outputting multiple protoparticle containers breaking truth matching
Update 2/5/23
Updating issue to reflect findings -- the selective packing of the PP2MC relations did not take into account keys on a per-container basis. This meant that where there were two protoparticle containers and PP2MC relation tables, for example those from global reco and t-tracks reco, relations for only one or the other would be packed, unless the key did not appear in the other container.
Fixed by LHCb!4104 (merged)
It appears that outputting all (clone-killed) ttrack particles for events breaks the truth matching for long tracks. When only reconstructing, but not outputting, ttrack particles, the truth matching is as expected. However if the ttracks are persisted, e.g. as extra_outputs, then the truth matching for the long tracks is broken. I tested on Lb2JpsiLambda sample, and the truth matching for the Jpsi->mu mu is significantly broken when saving ttracks in an event.
Previous description:
I have encountered a bug with the PP2MC relations when running two lines simultaneously, with one containing extra_outputs. It appears that running the second line which includes extra_outputs breaks the truth matching for both lines.
If I run Moore with just Hlt2Conf.lines.bandq.hlt2_bandq.Lb2JpsiLambdaTTLine
and then tuple the output in DaVinci (filtering on Hlt2BandQ_Lb2JpsiLambdaTT
) , I get truth matching as expected.
If I define a new line:
from RecoConf.reconstruction_objects import (
make_pvs, upfront_reconstruction)
from Hlt2Conf.lines.charmonium_to_dimuon_detached import make_detached_jpsi
from Hlt2Conf.standard_particles import make_ttrack_pions, make_ttrack_protons
from Moore.lines import HltLine
def Jpsi_extra():
return HltLine(
# Name must start with either Hlt1 or Hlt2
name="Hlt2DetachedJpsi",
algs=upfront_reconstruction() + [require_pvs(make_pvs()),make_detached_jpsi()],
persistreco=True,
extra_outputs = [
("ttrack_pions", make_ttrack_pions()),
("ttrack_protons", make_ttrack_protons())
]
)
And run Moore with both lines:
from RecoConf.reconstruction_objects import reconstruction
with reconstruction.bind(from_file=False):
run_moore(options,lambda: [Lb2JpsiLambdaTTLine(), Jpsi_extra()])
and tuple the output with the same script as above, then the truth matching for Lb2JpsiLambdaTTLine changes significantly, even though it is the same events with the same filter applied (filtering on Hlt2BandQ_Lb2JpsiLambdaTT
).
When looking at the MC reconstructed values:
If I run Moore for only Lb2JpsiLambdaTTLine
:
If I run Moore for both Lb2JpsiLambdaTTLine
and Jpsi_extra
:
There are differences not only for the particles included as extra_outputs (protons and pions) but also for the muons. In fact the differences with the muons are much larger.
Something is breaking in the truth matching. I have tried running without the extra_outputs in the detached Jpsi line, and the problem doesn’t seem to appear, so I think it specifically related to the extra_outputs.
The problem appeared after the XXr5 updates from 1 month ago, which included changes to truth matching across several packages. With the XXr4 release this problem is not there.
If I run e.g. the MC background category algorithm then the output also changes, and is incorrect when running for the two lines.
I have put my scripts and the output files at
/eos/user/i/isanders/public_lhcb/MultipleLinesPP2MCBug