Packing and persistence of containers for persist reco
Implementing packing and persistence of containers for persist reco. Unit tests run orthogonal dzero2kk_line HLT2 lines with PersistReco==True
and PersistReco==False
. We check the container sizes in the output dst to see if the persistreco logic is working, check the track unpacking using the new PersistRecoConf logic and check that the particle physics objects are correctly packed to pPhys/Particles
. One test for using reconstruction from file and one for real time reco
Still need to force whole reconstruction if a persistreco line fires
Depends on LHCb!2857 (merged).
Note 1 - VeloTracks
In the unit test test_persistreco_fromfile.qmt
(using reco from file) get the following when doing the packing
PackPVs WARNING PackRecVertex:: Null Track SmartRef in '/Event/Rec/Vertex/Primary' StatusCode=FAILURE
and
PackCaloElectrons WARNING PackCaloHypo:: Null CaloCluster SmartRef found StatusCode=FAILURE
In [3]: link_manager_paths(TES["/Event/pRec/Vertex/Primary"])
Out[3]: ['/Event/Rec/Track/Velo']
VELO tracks/clusters aren't saved by Brunel so nothing unpacked to /Event/Rec/Track/Velo. Velo tracks are the ones used to make the PVs and this container only be useful if you needed to refit the PV (DTF should work fine without)
This is not an issue when using real time reco.
As a result test_persistreco_fromfile.qmt
does not count Warnings
only ERROR
and FATAL
Note 2 - Missing reco
Muon tracks not implemented in real time reco so are not part of the persistreco container list (only for Calib anyway?).
Muon PIDs check
if TES["/Event/HLT2/pRec/Muon/MuonPID"].data().size() > N_TURBO:
muons = True
print('Packed Muon PID container size: ' + str(TES["/Event/HLT2/pRec/Muon/MuonPID"].data().size()))
is not included in the tests for real time reco as these are temporarily disabled, they will need to be added later.
Also not included in real time reco check is neutrals
if TES["/Event/HLT2/pRec/ProtoP/Neutrals"].protos().size() > N_TURBO:
neutrals = True
print('Packed neutral protos container size: ' + str(TES["/Event/HLT2/pRec/ProtoP/Neutrals"].protos().size()))
This can be added back when the whole reconstruction is forced if a persistreco line fires