diff --git a/Trigger/TrigEvent/TrigNavTools/share/testTrigR2ToR3NavGraphConversion.py b/Trigger/TrigEvent/TrigNavTools/share/testTrigR2ToR3NavGraphConversion.py index 5260b949300d92ab18fa7987b981bde19e5c1f74..9d7b4f11254776eb29dd8cd0cab007e133a8740f 100755 --- a/Trigger/TrigEvent/TrigNavTools/share/testTrigR2ToR3NavGraphConversion.py +++ b/Trigger/TrigEvent/TrigNavTools/share/testTrigR2ToR3NavGraphConversion.py @@ -32,7 +32,7 @@ if __name__=='__main__': #mu one chain# #ConfigFlags.addFlag("TestNavConversion.Chains",["HLT_mu4"]) #ConfigFlags.addFlag("TestNavConversion.Chains",['HLT_mu60_0eta105_msonly_L1MU14FCH', 'HLT_mu24_LRT_d0loose_L1MU14FCH', 'HLT_mu40', 'HLT_mu24_imedium', 'HLT_mu24_ivarmedium', 'HLT_mu26_ivarmedium', 'HLT_mu80_msonly_3layersEC', 'HLT_mu80_msonly_3layersEC_L1MU14FCH', 'HLT_mu26_ivarmedium_L1MU14FCH', 'HLT_mu20_iloose_L1MU15', 'HLT_mu50_L1MU14FCH', 'HLT_mu24_ivarloose', 'HLT_mu60_0eta105_msonly', 'HLT_mu50', 'HLT_mu24_iloose', 'HLT_id_cosmicid_L1MU11_EMPTY']) - #ConfigFlags.addFlag("TestNavConversion.Chains",["HLT_mu4","HLT_mu6","HLT_mu10","HLT_mu6_2mu4","HLT_mu22"]) + ConfigFlags.addFlag("TestNavConversion.Chains",["HLT_mu4","HLT_mu6","HLT_mu10","HLT_mu6_2mu4","HLT_mu22"]) #mu all#ConfigFlags.addFlag("TestNavConversion.Chains",['HLT_mu20_2mu2noL1_JpsimumuFS', 'HLT_mu6_iloose_mu6_11invm24_noos', 'HLT_mu22_mu8noL1', 'HLT_2mu10_nomucomb', 'HLT_3mu6_msonly_L13MU5VF', 'HLT_mu13_mu13_idperf_Zmumu', 'HLT_mu22_mu8noL1_L1MU14FCH', 'HLT_4mu4_nomucomb', 'HLT_mu24_ivarmedium', 'HLT_mu22_mu8noL1_calotag_0eta010', 'HLT_mu22_mu8noL1_TagandProbe', 'HLT_mu26_ivarmedium_L1MU14FCH', 'HLT_mu40', 'HLT_2mu10', 'HLT_mu18_2mu0noL1_JpsimumuFS', 'HLT_2mu14_nomucomb', 'HLT_mu11_nomucomb_2mu4noL1_nscan03_L1MU11_2MU6', 'HLT_mu20_2mu4noL1_L1MU14FCH', 'HLT_mu18_2mu4_JpsimumuL2', 'HLT_mu20_2mu0noL1_JpsimumuFS', 'HLT_3mu6_msonly_L1MU6_EMPTY', 'HLT_mu24_iloose', 'HLT_3mu4_mu2noL1', 'HLT_mu60_0eta105_msonly_L1MU14FCH', 'HLT_2mu4_mu3_mu2noL1_calotag_0eta010_L13MU4', 'HLT_mu20_msonly_mu15noL1_msonly_nscan05_noComb', 'HLT_3mu3_mu3noL1_calotag_0eta010_L13MU4', 'HLT_2mu4_mu3_mu2noL1_L13MU4', 'HLT_mu11_nomucomb_2mu4noL1_nscan03_L1MU11_2MU6_bTau', 'HLT_mu20_msonly_mu10noL1_msonly_nscan05_noComb', 'HLT_mu11_nomucomb_mu6noL1_nscan03_L1MU11_2MU6_bTau', 'HLT_mu20_nomucomb_mu6noL1_nscan03', 'HLT_mu20_ivarmedium_mu4noL1_10invmAB70_L1MU14FCH', 'HLT_4mu4', 'HLT_id_cosmicid_L1MU11_EMPTY', 'HLT_mu20_mu8noL1', 'HLT_mu24_imedium', 'HLT_mu20_ivarmedium_mu8noL1', 'HLT_3mu6_L13MU5VF', 'HLT_mu20_msonly_mu15noL1_msonly_nscan05_noComb_L1MU4_UNPAIRED_ISO', 'HLT_3mu6_msonly', 'HLT_mu24_ivarloose', 'HLT_mu60_0eta105_msonly', 'HLT_mu20_msonly_iloosems_mu6noL1_msonly_nscan05_L1MU4_UNPAIRED_ISO', 'HLT_mu11_L1MU10_2mu4noL1_nscan03_L1MU10_2MU6', 'HLT_mu18_mu8noL1', 'HLT_4mu4_L14MU3V', 'HLT_mu80_msonly_3layersEC_L1MU14FCH', 'HLT_mu18_2mu4noL1', 'HLT_3mu4_nomucomb', 'HLT_2mu14_L12MU8F', 'HLT_mu20_iloose_L1MU15', 'HLT_mu20_ivarmedium_mu8noL1_L1MU14FCH', 'HLT_mu20_msonly_mu10noL1_msonly_nscan05_noComb_L1MU4_UNPAIRED_ISO', 'HLT_mu20_l2idonly_mu6noL1_nscan03', 'HLT_mu11_nomucomb_mu6noL1_nscan03_L1MU11_2MU6_bTau_delayed', 'HLT_2mu6_10invm30_pt2_z10', 'HLT_mu20_msonly_mu10noL1_msonly_nscan05_noComb_L1MU6_EMPTY', 'HLT_mu26_ivarmedium', 'HLT_mu11_2mu4noL1_nscan03_L1MU11_2MU6', 'HLT_2mu14', 'HLT_3mu6', 'HLT_mu20_msonly_mu15noL1_msonly_nscan05_noComb_L1MU6_EMPTY', 'HLT_mu10_ivarmedium_mu10_10invmAB70_L12MU8F', 'HLT_mu20_2mu4noL1', 'HLT_mu6_2mu4', 'HLT_mu50', 'HLT_3mu6_msonly_L1MU4_UNPAIRED_ISO', 'HLT_mu20_msonly_iloosems_mu6noL1_msonly_nscan05_L1MU6_EMPTY', 'HLT_3mu4_mu2noL1_calotag_0eta010', 'HLT_mu6_dRl1_mu20_msonly_iloosems_mu6noL1_dRl1_msonly', 'HLT_3mu4', 'HLT_mu20_mu8noL1_calotag_0eta010', 'HLT_mu6_nomucomb_2mu4_nomucomb_L1MU6_3MU4', 'HLT_2mu20_L12MU20_OVERLAY', 'HLT_mu6_nomucomb_2mu4_nomucomb_delayed_L1MU6_3MU4', 'HLT_3mu4_nomucomb_mu2noL1', 'HLT_mu80_msonly_3layersEC', 'HLT_mu20_mu6noL1_nscan03', 'HLT_mu20_msonly_mu6noL1_msonly_nscan05', 'HLT_mu20_2mu4_JpsimumuL2', 'HLT_3mu3_mu3noL1_L13MU4', 'HLT_mu24_LRT_d0loose_L1MU14FCH', 'HLT_mu50_L1MU14FCH'] #mu multi#ConfigFlags.addFlag("TestNavConversion.Chains",['HLT_mu20_2mu2noL1_JpsimumuFS', 'HLT_mu6_iloose_mu6_11invm24_noos', 'HLT_mu22_mu8noL1', 'HLT_2mu10_nomucomb', 'HLT_3mu6_msonly_L13MU5VF', 'HLT_mu13_mu13_idperf_Zmumu', 'HLT_mu22_mu8noL1_L1MU14FCH', 'HLT_4mu4_nomucomb', 'HLT_mu22_mu8noL1_calotag_0eta010', 'HLT_mu22_mu8noL1_TagandProbe', 'HLT_2mu10', 'HLT_mu18_2mu0noL1_JpsimumuFS', 'HLT_2mu14_nomucomb', 'HLT_mu11_nomucomb_2mu4noL1_nscan03_L1MU11_2MU6', 'HLT_mu20_2mu4noL1_L1MU14FCH', 'HLT_mu18_2mu4_JpsimumuL2', 'HLT_mu20_2mu0noL1_JpsimumuFS', 'HLT_3mu6_msonly_L1MU6_EMPTY', 'HLT_3mu4_mu2noL1', 'HLT_2mu4_mu3_mu2noL1_calotag_0eta010_L13MU4', 'HLT_mu20_msonly_mu15noL1_msonly_nscan05_noComb', 'HLT_3mu3_mu3noL1_calotag_0eta010_L13MU4', 'HLT_2mu4_mu3_mu2noL1_L13MU4', 'HLT_mu11_nomucomb_2mu4noL1_nscan03_L1MU11_2MU6_bTau', 'HLT_mu20_msonly_mu10noL1_msonly_nscan05_noComb', 'HLT_mu11_nomucomb_mu6noL1_nscan03_L1MU11_2MU6_bTau', 'HLT_mu20_nomucomb_mu6noL1_nscan03', 'HLT_mu20_ivarmedium_mu4noL1_10invmAB70_L1MU14FCH', 'HLT_4mu4', 'HLT_mu20_mu8noL1', 'HLT_mu20_ivarmedium_mu8noL1', 'HLT_3mu6_L13MU5VF', 'HLT_mu20_msonly_mu15noL1_msonly_nscan05_noComb_L1MU4_UNPAIRED_ISO', 'HLT_3mu6_msonly', 'HLT_mu20_msonly_iloosems_mu6noL1_msonly_nscan05_L1MU4_UNPAIRED_ISO', 'HLT_mu11_L1MU10_2mu4noL1_nscan03_L1MU10_2MU6', 'HLT_mu18_mu8noL1', 'HLT_4mu4_L14MU3V', 'HLT_mu18_2mu4noL1', 'HLT_3mu4_nomucomb', 'HLT_mu20_ivarmedium_mu8noL1_L1MU14FCH', 'HLT_2mu14_L12MU8F', 'HLT_mu20_msonly_mu10noL1_msonly_nscan05_noComb_L1MU4_UNPAIRED_ISO', 'HLT_mu20_l2idonly_mu6noL1_nscan03', 'HLT_mu11_nomucomb_mu6noL1_nscan03_L1MU11_2MU6_bTau_delayed', 'HLT_2mu6_10invm30_pt2_z10', 'HLT_mu20_msonly_mu10noL1_msonly_nscan05_noComb_L1MU6_EMPTY', 'HLT_mu11_2mu4noL1_nscan03_L1MU11_2MU6', 'HLT_2mu14', 'HLT_3mu6', 'HLT_mu20_msonly_mu15noL1_msonly_nscan05_noComb_L1MU6_EMPTY', 'HLT_mu10_ivarmedium_mu10_10invmAB70_L12MU8F', 'HLT_mu20_2mu4noL1', 'HLT_mu6_2mu4', 'HLT_3mu6_msonly_L1MU4_UNPAIRED_ISO', 'HLT_mu20_msonly_iloosems_mu6noL1_msonly_nscan05_L1MU6_EMPTY', 'HLT_3mu4_mu2noL1_calotag_0eta010', 'HLT_mu6_dRl1_mu20_msonly_iloosems_mu6noL1_dRl1_msonly', 'HLT_3mu4', 'HLT_mu20_mu8noL1_calotag_0eta010', 'HLT_mu6_nomucomb_2mu4_nomucomb_L1MU6_3MU4', 'HLT_2mu20_L12MU20_OVERLAY', 'HLT_mu6_nomucomb_2mu4_nomucomb_delayed_L1MU6_3MU4', 'HLT_3mu4_nomucomb_mu2noL1', 'HLT_mu20_mu6noL1_nscan03', 'HLT_mu20_msonly_mu6noL1_msonly_nscan05', 'HLT_mu20_2mu4_JpsimumuL2', 'HLT_3mu3_mu3noL1_L13MU4']) #ConfigFlags.addFlag("TestNavConversion.Collections",["xAOD::MuonContainer","xAOD::L2StandAloneMuonContainer","xAOD::TrigMissingET","xAOD::JetContainer"]) @@ -77,7 +77,7 @@ if __name__=='__main__': ### #ConfigFlags.addFlag("TestNavConversion.Chains",["HLT_e26_lhtight_nod0"]) - ConfigFlags.addFlag("TestNavConversion.Chains",["HLT_mu4_j80_xe80_pufit_2dphi10_L1MU4_J50_XE50_DPHI-J20s2XE30"]) + #ConfigFlags.addFlag("TestNavConversion.Chains",["HLT_mu4_j80_xe80_pufit_2dphi10_L1MU4_J50_XE50_DPHI-J20s2XE30"]) #ConfigFlags.addFlag("TestNavConversion.Chains",["HLT_e5_lhvloose_nod0","HLT_e9_etcut","HLT_e26_lhtight_nod0","HLT_e28_lhtight_nod0"]) #ConfigFlags.addFlag("TestNavConversion.Chains",['HLT_e60_medium', 'HLT_e300_etcut_L1EM22VHI', 'HLT_e26_lhtight_ivarloose', 'HLT_e26_lhloose_nod0', 'HLT_e26_lhtight_cutd0dphideta_ivarloose', 'HLT_e300_etcut', 'HLT_e26_lhtight_nod0', 'HLT_e24_lhtight_iloose_L2EFCalo_L1EM20VH', 'HLT_e26_lhtight_nod0_ringer_ivarloose', 'HLT_e24_lhmedium_nod0_iloose_L1EM20VH', 'HLT_e24_medium_L1EM20VH', 'HLT_e24_lhmedium_iloose_L1EM20VH', 'HLT_e26_lhtight_smooth_ivarloose', 'HLT_e24_lhtight_nod0_iloose', 'HLT_e24_tight_iloose_L2EFCalo_L1EM20VH', 'HLT_e140_lhloose_nod0', 'HLT_e28_lhtight_nod0_ringer_iloose', 'HLT_e60_lhmedium_nod0', 'HLT_e140_lhvloose_nod0', 'HLT_e28_lhtight_nod0_ringer_ivarloose', 'HLT_e26_lhtight_smooth_iloose', 'HLT_e140_lhloose_nod0_ringer', 'HLT_e28_lhtight_nod0_noringer_ivarloose', 'HLT_e120_lhloose', 'HLT_e26_lhtight_ivarloose_L1EM22VHI', 'HLT_e24_tight_iloose_HLTCalo_L1EM20VH', 'HLT_e26_lhloose_nopix_lrttight_L1EM22VHI', 'HLT_e120_lhloose_HLTCalo', 'HLT_e26_lhloose_nod0_ringer', 'HLT_e140_lhloose_L1EM22VHI', 'HLT_e24_lhmedium_iloose_HLTCalo_L1EM20VH', 'HLT_e200_etcut', 'HLT_e28_lhtight_nod0_L1EM22VHI', 'HLT_e160_lhvloose_nod0', 'HLT_e60_lhmedium_HLTCalo', 'HLT_e24_lhmedium_nod0_ivarloose', 'HLT_e24_lhtight_nod0_ivarloose', 'HLT_e26_lhtight_iloose', 'HLT_e60_lhmedium_L1EM22VHI', 'HLT_e60_lhmedium_nod0_ringer', 'HLT_e120_loose', 'HLT_e24_lhmedium_L1EM20VH', 'HLT_e24_medium_iloose_L1EM20VH', 'HLT_e60_lhmedium_L1EM24VHI', 'HLT_e20_lhtight_ivarloose_L1ZAFB-25DPHI-eEM15M', 'HLT_e24_lhmedium_nod0_iloose', 'HLT_e120_lhloose_nod0', 'HLT_e26_lhtight_nod0_ivarloose']) #ConfigFlags.addFlag("TestNavConversion.Chains",['HLT_e26_lhloose_nopix_lrttight_L1EM22VHI', 'HLT_e26_lhtight_e15_etcut_Zee_L1EM22VHI', 'HLT_e60_medium', 'HLT_e60_lhmedium_HLTCalo', 'HLT_e60_lhmedium_nod0_ringer', 'HLT_e26_lhtight_ivarloose_L1EM22VHI', 'HLT_e24_tight_iloose_L2EFCalo_L1EM20VH', 'HLT_e24_medium_iloose_L1EM20VH', 'HLT_2e17_lhvloose_nod0', 'HLT_2e12_lhvloose_L12EM10VH', 'HLT_e28_lhtight_nod0_ringer_iloose', 'HLT_e120_lhloose', 'HLT_e17_lhmedium_nod0_iloose_2e9_lhmedium_nod0', 'HLT_e20_lhtight_ivarloose_L1ZAFB-25DPHI-eEM15M', 'HLT_2e17_lhvloose_L12EM15VHI', 'HLT_e140_lhloose_nod0', 'HLT_2e17_lhvloose_nod0_ringer_L12EM15VHI', 'HLT_2e24_lhvloose_nod0', 'HLT_e60_lhmedium_L1EM24VHI', 'HLT_e24_lhvloose_nod0_2e12_lhvloose_nod0_L1EM20VH_3EM10VH', 'HLT_e120_lhloose_HLTCalo', 'HLT_e26_lhtight_nod0_ivarloose', 'HLT_e26_lhtight_nod0', 'HLT_e24_tight_L1EM20VH_e15_etcut_Zee', 'HLT_e24_lhmedium_iloose_L1EM20VH', 'HLT_e200_etcut', 'HLT_e140_lhvloose_nod0', 'HLT_e24_lhtight_nod0_ivarloose', 'HLT_e120_lhloose_nod0', 'HLT_e26_lhloose_nod0_ringer', 'HLT_e26_lhtight_nod0_e15_etcut_L1EM7_Zee', 'HLT_2e15_lhvloose_nod0_L12EM13VH', 'HLT_e26_lhtight_iloose', 'HLT_e160_lhvloose_nod0', 'HLT_e24_lhmedium_iloose_HLTCalo_L1EM20VH', 'HLT_e26_lhtight_smooth_ivarloose', 'HLT_2e17_lhvloose_nod0_ringer', 'HLT_2e24_lhvloose_L12EM20VH', 'HLT_e28_lhtight_nod0_L1EM22VHI', 'HLT_e24_lhmedium_nod0_iloose_L1EM20VH', 'HLT_e140_lhloose_nod0_ringer', 'HLT_e17_lhloose_2e9_lhloose', 'HLT_e60_lhmedium_nod0', 'HLT_e24_medium_L1EM20VH', 'HLT_e26_lhtight_cutd0dphideta_ivarloose', 'HLT_e28_lhtight_nod0_noringer_ivarloose', 'HLT_e17_medium_iloose_2e9_medium', 'HLT_e120_loose', 'HLT_e300_etcut_L1EM22VHI', 'HLT_2e12_lhvloose_nod0_L12EM10VH', 'HLT_2e17_lhvloose', 'HLT_e17_lhloose_nod0_2e12_lhloose_nod0_L1EM15VH_3EM10VH', 'HLT_e28_lhtight_nod0_ringer_ivarloose', 'HLT_e24_lhmedium_nod0_iloose', 'HLT_e60_lhmedium_L1EM22VHI', 'HLT_e26_tight_e15_etcut_L1EM7_Zee', 'HLT_e22_lhvloose_nod0_e12_lhvloose_nod0_e10_lhvloose_nod0_L1EM20VH_2EM10VH_3EM8VH', 'HLT_2e17_lhvloose_nod0_L12EM15VHI', 'HLT_e24_tight_iloose_HLTCalo_L1EM20VH', 'HLT_e24_lhvloose_2e12_lhvloose_L1EM20VH_3EM10VH', 'HLT_e300_etcut', 'HLT_e26_lhtight_nod0_ringer_ivarloose', 'HLT_e24_lhtight_iloose_L2EFCalo_L1EM20VH', 'HLT_e24_lhmedium_nod0_ivarloose', 'HLT_2e12_vloose_L12EM10VH', 'HLT_2e12_lhloose_nodphires_L12EM10VH', 'HLT_e26_lhtight_smooth_iloose', 'HLT_e26_lhtight_e15_etcut_idperf_Zee_L1EM22VHI', 'HLT_e24_lhtight_L1EM20VH_e15_etcut_Zee', 'HLT_e17_loose_2e9_loose', 'HLT_2e12_lhloose_HLTCalo_L12EM10VH', 'HLT_e17_lhmedium_iloose_2e9_lhmedium', 'HLT_e26_lhtight_ivarloose', 'HLT_e140_lhloose_L1EM22VHI', 'HLT_e24_lhmedium_L1EM20VH', 'HLT_e24_lhtight_nod0_iloose', 'HLT_e26_lhloose_nod0', 'HLT_2e15_lhvloose_L12EM13VH', 'HLT_2e12_lhloose_nodeta_L12EM10VH', 'HLT_e17_lhloose_nod0_2e9_lhloose_nod0']) diff --git a/Trigger/TrigEvent/TrigNavTools/share/testTrigR2ToR3NavGraphConversionV2.py b/Trigger/TrigEvent/TrigNavTools/share/testTrigR2ToR3NavGraphConversionV2.py index 2e7c4a216e44a1683f6f76613e2a374d2bca7e86..774bd76e8de9409a5510cd523d8101ff077258d8 100755 --- a/Trigger/TrigEvent/TrigNavTools/share/testTrigR2ToR3NavGraphConversionV2.py +++ b/Trigger/TrigEvent/TrigNavTools/share/testTrigR2ToR3NavGraphConversionV2.py @@ -19,19 +19,17 @@ if __name__=='__main__': from AthenaCommon.Constants import WARNING from AthenaConfiguration.AllConfigFlags import ConfigFlags - ###test input file: --filesInput='/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/Tier0ChainTests/q221/21.0/myAOD.pool.root' + ###test input file format: --filesInput='/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/Tier0ChainTests/q221/21.0/myAOD.pool.root' # Set the Athena configuration flags ConfigFlags.Input.Files=["/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/Tier0ChainTests/q221/21.0/myAOD.pool.root"] ConfigFlags.Output.AODFileName = "outAOD.pool.root" ConfigFlags.Detector.GeometryLAr=True ConfigFlags.Detector.GeometryTile=True - # useful examples: test units based on them - #ConfigFlags.addFlag("TestNavConversion.Chains",["HLT_mu4"]) - #ConfigFlags.addFlag("TestNavConversion.Chains",["HLT_mu4","HLT_mu6","HLT_mu10","HLT_mu6_2mu4","HLT_mu22"]) -# ConfigFlags.addFlag("TestNavConversion.Chains",["HLT_e5_lhvloose_nod0","HLT_e9_etcut","HLT_e26_lhtight_nod0","HLT_e28_lhtight_nod0"]) - #ConfigFlags.addFlag("TestNavConversion.Collections",["xAOD::MuonContainer","xAOD::L2StandAloneMuonContainer","xAOD::TrigMissingET","xAOD::JetContainer"]) - # ConfigFlags.addFlag("TestNavConversion.Collections",["xAOD::ElectronContainer","xAOD::TrigEMClusterContainer","xAOD::TrigEMCluster","xAOD::TrigElectron","xAOD::TrigElectronContainer","xAOD::CaloCluster","xAOD::CaloClusterContainer"]) + # useful examples in commented lines left intentionally + # ConfigFlags.addFlag("TestNavConversion.Chains",["HLT_mu4"]) + # ConfigFlags.addFlag("TestNavConversion.Chains",["HLT_mu4","HLT_mu6","HLT_mu10","HLT_mu6_2mu4","HLT_mu22"]) + # ConfigFlags.addFlag("TestNavConversion.Chains",["HLT_e5_lhvloose_nod0","HLT_e9_etcut","HLT_e26_lhtight_nod0","HLT_e28_lhtight_nod0"]) ConfigFlags.Exec.MaxEvents = 1 ConfigFlags.fillFromArgs() ConfigFlags.lock() @@ -53,10 +51,11 @@ if __name__=='__main__': from AthenaCommon.Constants import DEBUG alg = CompFactory.Run2ToRun3TrigNavConverterV2("TrigNavCnv", OutputLevel=DEBUG, TrigConfigSvc=confSvc) alg.doSelfValidation = False - alg.Collections = ["xAOD::TrigElectronContainer"] + + alg.Collections = ["xAOD::TrigEMCluster", "xAOD::TrigEMClusterContainer", "xAOD::TrigRingerRings", "xAOD::TrigRingerRingsContainer", "xAOD::TrigRNNOutput", "xAOD::TrigRNNOutputContainer", "xAOD::CaloClusterContainer", "xAOD::L2StandAloneMuonContainer", "xAOD::L2CombinedMuonContainer", "xAOD::L2IsoMuonContainer", "xAOD::MuonContainer", "xAOD::TauJetContainer", "xAOD::TauTrackContainer", "xAOD::ElectronContainer", "xAOD::PhotonContainer", "xAOD::JetContainer", "xAOD::BTaggingContainer", "xAOD::BTagVertexContainer", "xAOD::JetElementContainer"] alg.doCompression = True - # alg.Chains = ["HLT_e26_lhtight_idperf", "HLT_e26_lhmedium_nod0_ivarloose"] -# alg.Chains = ["HLT_mu4_j80_xe80_pufit_2dphi10_L1MU4_J50_XE50_DPHI-J20s2XE30"] + alg.Chains = ["HLT_mu4","HLT_mu6","HLT_mu10","HLT_mu6_2mu4","HLT_mu22"] + alg.Rois = ["initialRoI","forID","forID1","forID2","forMS","forSA","forTB","forMT","forCB"] cfg.addEventAlgo(alg, sequenceName="AthAlgSeq") from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg diff --git a/Trigger/TrigEvent/TrigNavTools/src/Run2ToRun3TrigNavConverterV2.cxx b/Trigger/TrigEvent/TrigNavTools/src/Run2ToRun3TrigNavConverterV2.cxx index 15f3397abbd4834e394c48a0295e1794343beff1..af3e1b9552ec052f7674691685eff6c3af973ca8 100644 --- a/Trigger/TrigEvent/TrigNavTools/src/Run2ToRun3TrigNavConverterV2.cxx +++ b/Trigger/TrigEvent/TrigNavTools/src/Run2ToRun3TrigNavConverterV2.cxx @@ -130,6 +130,7 @@ StatusCode Run2ToRun3TrigNavConverterV2::initialize() // configured collections can be either just type name, or type#key // decoding takes this into account, if only the type is configured then empty string is places in the decoded lookup map // else CLID + a name is placed + for (const auto& name : m_collectionsToSave) { std::string typeName = name; std::string collName; @@ -146,6 +147,11 @@ StatusCode Run2ToRun3TrigNavConverterV2::initialize() m_collectionsToSaveDecoded[id].insert(collName); } + + for (const auto& name : m_roisToSave) { + m_setRoiName.push_back(name); + } + // sanity check, i.e. if there is at least one entry w/o the coll name no other enties are needed for a given clid for ( auto [clid, keysSet]: m_collectionsToSaveDecoded ) { if ( keysSet.size() > 1 and keysSet.count("") != 0 ) { @@ -154,6 +160,17 @@ StatusCode Run2ToRun3TrigNavConverterV2::initialize() } } + ATH_CHECK(m_clidSvc->getIDOfTypeName("TrigRoiDescriptor", m_roIDescriptorCLID)); + ATH_CHECK(m_clidSvc->getIDOfTypeName("TrigRoiDescriptorCollection", m_roIDescriptorCollectionCLID)); + ATH_CHECK(m_clidSvc->getIDOfTypeName("xAOD::TrigRingerRings", m_TrigRingerRingsCLID)); + ATH_CHECK(m_clidSvc->getIDOfTypeName("xAOD::TrigRingerRingsContainer", m_TrigRingerRingsContainerCLID)); + ATH_CHECK(m_clidSvc->getIDOfTypeName("xAOD::TrigEMCluster", m_TrigEMClusterCLID)); + ATH_CHECK(m_clidSvc->getIDOfTypeName("xAOD::TrigEMClusterContainer", m_TrigEMClusterContainerCLID)); + ATH_CHECK(m_clidSvc->getIDOfTypeName("xAOD::CaloCluster", m_CaloClusterCLID)); + ATH_CHECK(m_clidSvc->getIDOfTypeName("xAOD::CaloClusterContainer", m_CaloClusterContainerCLID)); + ATH_CHECK(m_clidSvc->getIDOfTypeName("xAOD::TrackParticleContainer", m_TrackParticleContainerCLID)); + ATH_CHECK(m_clidSvc->getIDOfTypeName("xAOD::TauTrackContainer", m_TauTrackContainerCLID)); + return StatusCode::SUCCESS; } @@ -174,7 +191,18 @@ StatusCode Run2ToRun3TrigNavConverterV2::execute(const EventContext& context) co ConvProxySet_t convProxies; HLT::StandaloneNavigation standaloneNav; // needed to keep TEs around - ATH_CHECK(mirrorTEsStructure(convProxies, standaloneNav, context)); + const HLT::TrigNavStructure* run2NavigationPtr = nullptr; + if (!m_trigNavKey.key().empty()) { + SG::ReadHandle navReadHandle(m_trigNavKey, context); + ATH_CHECK(navReadHandle.isValid()); + standaloneNav.deserialize(navReadHandle->serialized()); + run2NavigationPtr = &standaloneNav; + } + else { + run2NavigationPtr = m_tdt->ExperimentalAndExpertMethods().getNavigation(); + } + + ATH_CHECK(mirrorTEsStructure(convProxies, run2NavigationPtr)); if (m_doSelfValidation) ATH_CHECK(allProxiesConnected(convProxies)); @@ -193,10 +221,6 @@ StatusCode Run2ToRun3TrigNavConverterV2::execute(const EventContext& context) co if (m_doCompression) { ATH_CHECK(doCompression(convProxies)); } - if (m_doLinkFeatures) { - ATH_CHECK(fillRelevantFeatures(convProxies)); - ATH_MSG_DEBUG("Features to link found"); - } SG::WriteHandle<TrigCompositeUtils::DecisionContainer> outputNavigation = TrigCompositeUtils::createAndStore(m_trigOutputNavKey, context); auto decisionOutput = outputNavigation.ptr(); TrigCompositeUtils::newDecisionIn(decisionOutput, "HLTPassRaw"); // we rely on the fact that the 1st element is the top @@ -205,7 +229,15 @@ StatusCode Run2ToRun3TrigNavConverterV2::execute(const EventContext& context) co if (m_doSelfValidation) { ATH_CHECK(numberOfHNodesPerProxyNotExcessive(convProxies)); } + if (m_doLinkFeatures) { + ATH_CHECK(fillRelevantFeatures(convProxies)); + ATH_CHECK(fillRelevantRois(convProxies, run2NavigationPtr)); + ATH_MSG_DEBUG("Features to link found"); + } + ATH_CHECK(createL1Nodes(convProxies, *decisionOutput, context)); ATH_CHECK(createFSNodes(convProxies, *decisionOutput, m_finalTEIdsToChains, context)); + ATH_CHECK(linkFeaNode(convProxies, run2NavigationPtr, context)); + ATH_CHECK(linkRoiNode(convProxies, run2NavigationPtr)); ATH_CHECK(linkTopNode(*decisionOutput)); ATH_MSG_DEBUG("Conversion done, from " << convProxies.size() << " elements to " << decisionOutput->size() << " elements"); @@ -250,19 +282,9 @@ StatusCode Run2ToRun3TrigNavConverterV2::extractTECtoChainMapping(TEIdToChainsMa return StatusCode::SUCCESS; } -StatusCode Run2ToRun3TrigNavConverterV2::mirrorTEsStructure(ConvProxySet_t& convProxies, HLT::StandaloneNavigation& standaloneNav, const EventContext& context) const { - const HLT::TrigNavStructure* run2NavigationPtr = nullptr; +StatusCode Run2ToRun3TrigNavConverterV2::mirrorTEsStructure(ConvProxySet_t& convProxies, const HLT::TrigNavStructure* run2NavPtr) const { - if (!m_trigNavKey.key().empty()) { - SG::ReadHandle navReadHandle(m_trigNavKey, context); - ATH_CHECK(navReadHandle.isValid()); - standaloneNav.deserialize(navReadHandle->serialized()); - run2NavigationPtr = &standaloneNav; - } - else { - run2NavigationPtr = m_tdt->ExperimentalAndExpertMethods().getNavigation(); - } - const HLT::TrigNavStructure& run2Navigation = *run2NavigationPtr; + const HLT::TrigNavStructure& run2Navigation = *run2NavPtr; // iterate over the TEs, for each make the ConvProxy and build connections std::map<const HLT::TriggerElement*, ConvProxy*> teToProxy; @@ -516,8 +538,45 @@ StatusCode Run2ToRun3TrigNavConverterV2::collapseFeaturelessProxies(ConvProxySet return StatusCode::SUCCESS; } -StatusCode Run2ToRun3TrigNavConverterV2::fillRelevantFeatures(ConvProxySet_t&) const { + +StatusCode Run2ToRun3TrigNavConverterV2::fillRelevantFeatures(ConvProxySet_t& convProxies) const { + // from all FEAs of the associated TE pick those objects that are to be linked + for (auto& proxy : convProxies) { + if (proxy->te != nullptr) { + + for (HLT::TriggerElement::FeatureAccessHelper helper : proxy->te->getFeatureAccessHelpers()) + { + if (feaToSave(helper)==true) { + proxy->features.push_back(helper); + } + } + } + } + + return StatusCode::SUCCESS; +} + +StatusCode Run2ToRun3TrigNavConverterV2::fillRelevantRois(ConvProxySet_t &convProxies, const HLT::TrigNavStructure *run2NavPtr) const +{ + const HLT::TrigNavStructure &run2Navigation = *run2NavPtr; + + for (auto &proxy : convProxies) + { + if (proxy->te != nullptr) + { + ATH_MSG_DEBUG("DDD BEFORE rNodes loop"); + for (const auto &rNodes : HLT::TrigNavStructure::getRoINodes(proxy->te)) + { + if (HLT::TrigNavStructure::isRoINode(rNodes)) + { + ATH_MSG_DEBUG("DDD INSIDE isRoINode condition"); + proxy->rois = getTEROIfeatures(rNodes, run2Navigation); + } + } + } + } + return StatusCode::SUCCESS; } @@ -529,25 +588,23 @@ StatusCode Run2ToRun3TrigNavConverterV2::createIMHNodes(ConvProxySet_t& convProx for ( auto chainId: proxy->runChains) { TrigCompositeUtils::addDecisionID(chainId, proxy->imNode); } - auto hNode = TrigCompositeUtils::newDecisionIn(&decisions,TrigCompositeUtils::hypoAlgNodeName()); // H + proxy->hNode = TrigCompositeUtils::newDecisionIn(&decisions,TrigCompositeUtils::hypoAlgNodeName()); // H for ( auto chainId: proxy->passChains) { - TrigCompositeUtils::addDecisionID(chainId, hNode); + TrigCompositeUtils::addDecisionID(chainId, proxy->hNode); } - proxy->hNodes.push_back(hNode); // H - TrigCompositeUtils::linkToPrevious(hNode, proxy->imNode, context); // H low IM up + TrigCompositeUtils::linkToPrevious(proxy->hNode, proxy->imNode, context); // H low IM up } // connecting current IM to all Hs in parent proxies for (auto& proxy : convProxies) { for (auto& parentProxy : proxy->parents) { - for (auto& hNodeInParent : parentProxy->hNodes) { - TrigCompositeUtils::linkToPrevious(proxy->imNode, hNodeInParent, context); // IM low H up (in parent) - } + TrigCompositeUtils::linkToPrevious(proxy->imNode, parentProxy->hNode, context); // IM low H up (in parent) } } ATH_MSG_DEBUG("IM & H nodes made, output nav elements " << decisions.size()); return StatusCode::SUCCESS; } + StatusCode Run2ToRun3TrigNavConverterV2::createFSNodes(const ConvProxySet_t& convProxies, xAOD::TrigCompositeContainer& decisions, const TEIdToChainsMap_t& terminalIds, const EventContext& context) const { // make node & link it properly @@ -566,12 +623,12 @@ StatusCode Run2ToRun3TrigNavConverterV2::createFSNodes(const ConvProxySet_t& con for ( auto proxy: convProxies ) { // associate terminal nodes to filter nodes, if (proxy->children.empty()) { // the H modes are terminal - if (proxy->hNodes.empty()) { // nothing has passed, so link to the IM node + //if (proxy->hNodes.empty()) { // nothing has passed, so link to the IM node + if (proxy->hNode == nullptr) { // nothing has passed, so link to the IM node // TODO make sure it needs to be done like that makeSFNode(proxy->imNode, proxy->runChains); } else { - for ( auto hNode: proxy->hNodes) - makeSFNode(hNode, TCU::decisionIDs(hNode)); // not using passChains as there may be additional filtering + makeSFNode(proxy->hNode, TCU::decisionIDs(proxy->hNode)); // not using passChains as there may be additional filtering } } else { // likely need more iterations @@ -594,6 +651,93 @@ StatusCode Run2ToRun3TrigNavConverterV2::createFSNodes(const ConvProxySet_t& con return StatusCode::SUCCESS; } + +StatusCode Run2ToRun3TrigNavConverterV2::createL1Nodes(const ConvProxySet_t& convProxies, xAOD::TrigCompositeContainer& decisions, + const EventContext& context) const { + + auto makeL1Node = [&decisions, &context](auto firstDecisionNode, auto chainIds){ + auto L1Node = TrigCompositeUtils::newDecisionIn(&decisions); + L1Node->setName(TrigCompositeUtils::hltSeedingNodeName()); // L1 + for ( auto chainId: chainIds) { + TrigCompositeUtils::addDecisionID(chainId, L1Node); + } + TrigCompositeUtils::linkToPrevious(firstDecisionNode, L1Node, context); // IM -> L1 + + return L1Node; + }; + + for ( auto proxy: convProxies ) { + // associate initial node to filter nodes, + if (proxy->parents.empty()) { // the IM node is initial + proxy->l1Node = makeL1Node(proxy->imNode, TCU::decisionIDs(proxy->imNode)); // not using passChains as there may be additional filtering + } + } + + ATH_MSG_DEBUG("L1 nodes made, output nav elements "); + return StatusCode::SUCCESS; +} + +StatusCode Run2ToRun3TrigNavConverterV2::linkFeaNode(ConvProxySet_t &convProxies, const HLT::TrigNavStructure *run2NavPtr, const EventContext &context) const +{ + + const HLT::TrigNavStructure &run2Navigation = *run2NavPtr; + + // from all FEAs of the associated TE pick those objects that are to be linked + for (auto &proxy : convProxies) + { + + if (proxy->features.empty()) + { // no features attached, self link + if (proxy->hNode) + { + ElementLink<xAOD::TrigCompositeContainer> linkToSelf = TrigCompositeUtils::decisionToElementLink(proxy->hNode, context); + proxy->hNode->setObjectLink<xAOD::TrigCompositeContainer>(TrigCompositeUtils::featureString(), linkToSelf); + } + } + + for (auto &fea : proxy->features) + { + auto [sgKey, sgCLID, sgName] = getSgKey(run2Navigation, fea); + ATH_MSG_DEBUG("After getSgKey"); + + if (proxy->hNode) + { + if (fea.getIndex().objectsBegin() < fea.getIndex().objectsEnd()) + { + proxy->hNode->typelessSetObjectLink(TrigCompositeUtils::featureString(), sgKey, sgCLID, fea.getIndex().objectsBegin(), fea.getIndex().objectsEnd()); + } + } + } + } + + return StatusCode::SUCCESS; +} + +StatusCode Run2ToRun3TrigNavConverterV2::linkRoiNode(ConvProxySet_t &convProxies, const HLT::TrigNavStructure *run2NavPtr) const +{ + + const HLT::TrigNavStructure &run2Navigation = *run2NavPtr; + + // from all Rois of the associated TE pick those objects that are to be linked + for (auto &proxy : convProxies) + { + + for (auto &roi : proxy->rois) + { + auto [sgKey, sgCLID, sgName] = getSgKey(run2Navigation, roi); + ATH_MSG_DEBUG("After getSgKey"); + if (proxy->l1Node) + { + proxy->l1Node->typelessSetObjectLink(TrigCompositeUtils::initialRoIString(), sgKey, sgCLID, roi.getIndex().objectsBegin()); + } + + proxy->imNode->typelessSetObjectLink(TrigCompositeUtils::roiString(), sgKey, sgCLID, roi.getIndex().objectsBegin()); + } + } + + return StatusCode::SUCCESS; +} + StatusCode Run2ToRun3TrigNavConverterV2::linkTopNode(xAOD::TrigCompositeContainer& decisions) const { // simply link all filter nodes to the HLTPassRaw (the 1st element) ATH_CHECK((*decisions.begin())->name() == "HLTPassRaw"); @@ -636,15 +780,23 @@ bool Run2ToRun3TrigNavConverterV2::feaEqual(const std::vector<HLT::TriggerElemen return true; } - bool Run2ToRun3TrigNavConverterV2::feaToSave(const HLT::TriggerElement::FeatureAccessHelper& fea) const { - auto iter = m_collectionsToSaveDecoded.find(fea.getCLID()); - if ( iter == m_collectionsToSaveDecoded.end() ) return false; - if ( iter->second.count("") ) return true; // recording of all collections of a type is requested - // TODO complete this implementation with precise collection match (requires access to the NavStructure) - // - // the logic would be to call: HLTNavDetails::formatSGKey("HLT", conainerTypeName, *(getHolder(fea)->label()); - // + if (m_collectionsToSaveDecoded.find(fea.getCLID()) != m_collectionsToSaveDecoded.end()) + { + return true; // feature accepted for saving + } + + return false; +} + +bool Run2ToRun3TrigNavConverterV2::roiToSave(const HLT::TrigNavStructure& navigationDecoder, const HLT::TriggerElement::FeatureAccessHelper& roi) const { + auto [sgKey, sgCLID, sgName] = getSgKey(navigationDecoder, roi); + ATH_MSG_DEBUG("DDD ROI name to be found: " << sgName); + if (std::find(m_setRoiName.begin(), m_setRoiName.end(), sgName) != m_setRoiName.end()) { + ATH_MSG_DEBUG("DDD ROI name to be found CONFIRMED: " << sgName); + return true; + } + return false; } @@ -670,13 +822,7 @@ StatusCode Run2ToRun3TrigNavConverterV2::allProxiesConnected(const ConvProxySet_ return StatusCode::SUCCESS; } -StatusCode Run2ToRun3TrigNavConverterV2::numberOfHNodesPerProxyNotExcessive(const ConvProxySet_t& proxies) const { - for (auto p : proxies) { - if (p->hNodes.size() > m_hNodesPerProxyThreshold) { - ATH_MSG_ERROR("Too many H nodes per proxy"); - return StatusCode::FAILURE; - } - } +StatusCode Run2ToRun3TrigNavConverterV2::numberOfHNodesPerProxyNotExcessive(const ConvProxySet_t&) const { ATH_MSG_DEBUG("CHECK OK, no excessive number of H nodes per proxy"); return StatusCode::SUCCESS; } @@ -702,4 +848,70 @@ StatusCode Run2ToRun3TrigNavConverterV2::noUnconnectedHNodes(const xAOD::TrigCom ATH_MSG_DEBUG("CHECK OK, all H modes are connected"); return StatusCode::SUCCESS; -} \ No newline at end of file +} + +std::tuple<uint32_t, CLID, std::string> Run2ToRun3TrigNavConverterV2::getSgKey(const HLT::TrigNavStructure& navigationDecoder, const HLT::TriggerElement::FeatureAccessHelper& helper) const +{ + const std::string hltLabel = navigationDecoder.label(helper.getCLID(), helper.getIndex().subTypeIndex()); + + const CLID saveCLID = [&](const CLID& clid) { + if (clid == m_roIDescriptorCLID) return m_roIDescriptorCollectionCLID; + if (clid == m_TrigEMClusterCLID) return m_TrigEMClusterContainerCLID; + if (clid == m_TrigRingerRingsCLID) return m_TrigRingerRingsContainerCLID; + return clid; + }(helper.getCLID()); + + std::string type_name; + if (m_clidSvc->getTypeNameOfID(saveCLID, type_name).isFailure()) + { + return { 0, 0, "" }; + } + + const auto sgStringKey = HLTNavDetails::formatSGkey("HLT", type_name, hltLabel); + const bool isAvailable = evtStore()->contains(saveCLID, sgStringKey); + ATH_MSG_DEBUG(" Objects presence " << helper << " " << sgStringKey << (isAvailable ? " present" : " absent")); + if (!isAvailable) { + return { 0, 0, "" }; + } + + + const auto sgIntKey = evtStore()->stringToKey(sgStringKey, saveCLID); + + ATH_MSG_DEBUG(" getSgKey: sgKey, sgCLID, sgName " << sgIntKey << " " << saveCLID << " " << hltLabel); + return { sgIntKey, saveCLID, hltLabel }; // sgKey, sgCLID, sgName +} + + +const std::vector<HLT::TriggerElement::FeatureAccessHelper> Run2ToRun3TrigNavConverterV2::getTEROIfeatures(const HLT::TriggerElement* te_ptr, const HLT::TrigNavStructure& navigationDecoder) const +{ + // @@@@@@@@@@@@@@@@@@@@@@@@@@ ordered_sorter @@@@@@@@@@@@@@@@@@@@@@@@@@ + auto ordered_sorter = [&](const auto& left, const auto& right) -> bool { + return std::find(cbegin(m_setRoiName), cend(m_setRoiName), left) < std::find(cbegin(m_setRoiName), cend(m_setRoiName), right); + }; + + std::map<std::string, HLT::TriggerElement::FeatureAccessHelper, decltype(ordered_sorter)> mp(ordered_sorter); + + + for (HLT::TriggerElement::FeatureAccessHelper helper : te_ptr->getFeatureAccessHelpers()) + { + auto [sgKey, sgCLID, sgName] = getSgKey(navigationDecoder, helper); + ATH_MSG_DEBUG("DDD getTEROIfeatures name " << sgName); + if (std::find(m_setRoiName.begin(), m_setRoiName.end(), sgName) == m_setRoiName.end()) { + // do not filter continue; + continue; + } + ATH_MSG_DEBUG("DDD getTEROIfeatures name accepted " << sgName); + mp[sgName] = helper; + } + + for (const auto& p : mp) { + auto [sgKey, sgCLID, sgName] = getSgKey(navigationDecoder, p.second); + ATH_MSG_DEBUG("DDD CHECK getTEROIfeatures name accepted " << sgName); + } + + std::vector<HLT::TriggerElement::FeatureAccessHelper> ptrFAHelper; + std::transform(cbegin(mp), cend(mp), back_inserter(ptrFAHelper), + [](const std::map<std::string, HLT::TriggerElement::FeatureAccessHelper>::value_type& p) {return p.second;}); + + return ptrFAHelper; +} diff --git a/Trigger/TrigEvent/TrigNavTools/src/Run2ToRun3TrigNavConverterV2.h b/Trigger/TrigEvent/TrigNavTools/src/Run2ToRun3TrigNavConverterV2.h index a31ebcac895e321b7cb54e53bc80d7f588931e57..fe13163d615ff6f02be3725cb60d2909e312c695 100644 --- a/Trigger/TrigEvent/TrigNavTools/src/Run2ToRun3TrigNavConverterV2.h +++ b/Trigger/TrigEvent/TrigNavTools/src/Run2ToRun3TrigNavConverterV2.h @@ -44,8 +44,12 @@ struct ConvProxy { static const uint64_t MissingFEA = 0; uint64_t feaHash = MissingFEA; + std::vector<HLT::TriggerElement::FeatureAccessHelper> features; + std::vector<HLT::TriggerElement::FeatureAccessHelper> rois; + + TrigCompositeUtils::Decision* l1Node { nullptr }; TrigCompositeUtils::Decision* imNode; // for checks only - std::vector<TrigCompositeUtils::Decision*> hNodes; + TrigCompositeUtils::Decision* hNode; std::string description() const; }; @@ -80,14 +84,16 @@ private: Gaudi::Property<size_t> m_hNodesPerProxyThreshold{ this, "hNodesPerProxyThreshhold", 15, "Limit number of H nodes per TE (if exceeded conversion results in an error)" }; Gaudi::Property<std::vector<std::string>> m_chainsToSave{ this, "Chains", {}, "If not specified, all chains are handled" }; Gaudi::Property<std::vector<std::string>> m_collectionsToSave{ this, "Collections", {} }; + Gaudi::Property<std::vector<std::string>> m_roisToSave{ this, "Rois", {} }; SG::WriteHandleKey<xAOD::TrigCompositeContainer> m_trigOutputNavKey{ this, "OutputNavKey", "HLTNav_Summary" }; - StatusCode extractTECtoChainMapping(TEIdToChainsMap_t& allTEs, TEIdToChainsMap_t& finalTEs) const; + StatusCode extractTECtoChainMapping(TEIdToChainsMap_t& allTES, TEIdToChainsMap_t& finalTEs) const; mutable std::mutex m_configUpdateMutex; TEIdToChainsMap_t m_allTEIdsToChains, m_finalTEIdsToChains; + - StatusCode mirrorTEsStructure(ConvProxySet_t&, HLT::StandaloneNavigation& standaloneNav, const EventContext& context) const; + StatusCode mirrorTEsStructure(ConvProxySet_t&, const HLT::TrigNavStructure* run2NavPtr) const; StatusCode associateChainsToProxies(ConvProxySet_t&, const TEIdToChainsMap_t&) const; @@ -105,21 +111,28 @@ private: StatusCode collapseProxies(ConvProxySet_t&, MAP&) const; - StatusCode fillRelevantFeatures(ConvProxySet_t&) const; + StatusCode fillRelevantFeatures(ConvProxySet_t& convProxies) const; + StatusCode fillRelevantRois(ConvProxySet_t& convProxies, const HLT::TrigNavStructure* run2NavPtr) const; StatusCode createIMHNodes(ConvProxySet_t&, xAOD::TrigCompositeContainer&, const EventContext&) const; + StatusCode createL1Nodes(const ConvProxySet_t& convProxies, xAOD::TrigCompositeContainer& decisions, const EventContext& context) const; StatusCode createFSNodes(const ConvProxySet_t&, xAOD::TrigCompositeContainer&, const TEIdToChainsMap_t& finalTEs, const EventContext& context) const; StatusCode linkTopNode(xAOD::TrigCompositeContainer&) const; + StatusCode linkFeaNode(ConvProxySet_t& convProxies, const HLT::TrigNavStructure* run2NavPtr, const EventContext& context) const; + StatusCode linkRoiNode(ConvProxySet_t& convProxies, const HLT::TrigNavStructure* run2NavPtr) const; + // helpers //!< both method skip TrigPassBits uint64_t feaToHash(const std::vector<HLT::TriggerElement::FeatureAccessHelper>&) const; bool feaEqual(const std::vector<HLT::TriggerElement::FeatureAccessHelper>& a, const std::vector<HLT::TriggerElement::FeatureAccessHelper>& b ) const; //!< returns true if this particular feature is to be saved (linked) - bool feaToSave(const HLT::TriggerElement::FeatureAccessHelper&) const; + bool feaToSave(const HLT::TriggerElement::FeatureAccessHelper& fea) const; + + bool roiToSave(const HLT::TrigNavStructure& navigationDecoder, const HLT::TriggerElement::FeatureAccessHelper& fea) const; // self validators // they return failure if something is not ok @@ -132,8 +145,25 @@ private: StatusCode noUnconnectedHNodes(const xAOD::TrigCompositeContainer&) const; + std::tuple<uint32_t, CLID, std::string> getSgKey(const HLT::TrigNavStructure& navigationDecoder, const HLT::TriggerElement::FeatureAccessHelper& helper) const; + const std::vector<HLT::TriggerElement::FeatureAccessHelper> getTEfeatures(const HLT::TriggerElement *te_ptr, const HLT::TrigNavStructure &navigationDecoder, bool filterOnCLID=true) const; + const std::vector<HLT::TriggerElement::FeatureAccessHelper> getTEROIfeatures(const HLT::TriggerElement* te_ptr, const HLT::TrigNavStructure& navigationDecoder) const; + std::map<CLID, std::set<std::string>> m_collectionsToSaveDecoded; + std::vector<std::string> m_setRoiName; + + CLID m_roIDescriptorCLID{0}; + CLID m_roIDescriptorCollectionCLID{0}; + CLID m_TrigRingerRingsCLID{0}; + CLID m_TrigRingerRingsContainerCLID{0}; + CLID m_TrigEMClusterCLID{0}; + CLID m_TrigEMClusterContainerCLID{0}; + CLID m_CaloClusterCLID{0}; + CLID m_CaloClusterContainerCLID{0}; + CLID m_TrackParticleContainerCLID{0}; + CLID m_TauTrackContainerCLID{0}; + }; #endif // TRIGNAVTOOLS_RUN2TORUN3TRIGNAVCONVERTERV2_H \ No newline at end of file