ATLAS Offline Software
Loading...
Searching...
No Matches
TauConfigFlags.py
Go to the documentation of this file.
1# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
2
3import unittest
4from AthenaConfiguration.AthConfigFlags import AthConfigFlags
5import AthenaCommon.SystemOfUnits as Units
6from AthenaConfiguration.Enums import LHCPeriod, ProductionStep
7
9 tau_cfg = AthConfigFlags()
10
11 tau_cfg.addFlag("Tau.doTauRec", True)
12 tau_cfg.addFlag("Tau.ThinTaus", True)
13 tau_cfg.addFlag("Tau.doEarlyStopping", True)
14
15 # Switches for enabling/disabling some tools
16 tau_cfg.addFlag("Tau.doVertexCorrection", True)
17 tau_cfg.addFlag("Tau.doTJVA", True)
18 tau_cfg.addFlag("Tau.doPanTau", True)
19 tau_cfg.addFlag("Tau.doRNNTrackClass", True)
20 tau_cfg.addFlag("Tau.doTauDiscriminant", True)
21 tau_cfg.addFlag("Tau.associateLRT", False)
22 tau_cfg.addFlag("Tau.isStandalone", False)
23 # Classify Large Radius Tracks in tau track classifier
24 tau_cfg.addFlag("Tau.classifyLRT", False)
25 tau_cfg.addFlag("Tau.classifyLRTWithDedicated", False)
26
27 # Track-to-Calo extrapolation
28 tau_cfg.addFlag("Tau.useACTSExtrapolator", False)
29
30 # Settings common to Run2 and Run3
31 tau_cfg.addFlag("Tau.SeedMinPt", 0.0*Units.GeV)
32 tau_cfg.addFlag("Tau.SeedMaxEta", lambda prevFlags: 2.5 if prevFlags.GeoModel.Run <= LHCPeriod.Run3 else 4.0)
33 tau_cfg.addFlag("Tau.MaxNTracks", -1)
34 tau_cfg.addFlag("Tau.RemoveDupeCoreTracks", lambda prevFlags: True if prevFlags.GeoModel.Run <= LHCPeriod.Run3 else False) # For Run4, the duplication of core tracks won't be performed, but instead the charged track duplication with be done after the RNN track classifier
35 tau_cfg.addFlag("Tau.useGhostTracks", True)
36 tau_cfg.addFlag("Tau.ghostTrackDR", 0.25)
37 tau_cfg.addFlag("Tau.removeDuplicateChargedTracks", lambda prevFlags: False if prevFlags.GeoModel.Run <= LHCPeriod.Run3 else True) # For Run4, the duplication of charged tracks with be done after the RNN track classifier
38 tau_cfg.addFlag("Tau.shotPtCut_1Photon", [430.*Units.MeV, 300.*Units.MeV, 9999999.*Units.MeV, 330.*Units.MeV, 350.*Units.MeV])
39 tau_cfg.addFlag("Tau.shotPtCut_2Photons", [10000.*Units.MeV, 10000.*Units.MeV, 9999999.*Units.MeV, 10000.*Units.MeV, 10000.*Units.MeV])
40 tau_cfg.addFlag("Tau.Pi0ScoreConfig", "TauPi0BDTWeights.root")
41 tau_cfg.addFlag("Tau.pi0EtCuts", [2800.*Units.MeV, 2700.*Units.MeV, 2500.*Units.MeV, 2900.*Units.MeV, 2700.*Units.MeV])
42 tau_cfg.addFlag("Tau.pi0MVACuts_1prong", [0.45, 0.37, 0.39, 0.40, 0.38])
43 tau_cfg.addFlag("Tau.pi0MVACuts_mprong", [0.73, 0.69, 0.58, 0.69, 0.67])
44 tau_cfg.addFlag("Tau.MinNeutralPFOPt", 100.*Units.MeV)
45
46 # Run2 settings and calibration files
47 tau_cfg.addFlag("Tau.tauRecToolsCVMFSPath", "tauRecTools/R22_preprod")
48 tau_cfg.addFlag("Tau.tauRNNTrackClassConfig", lambda prevFlags: "RNNTrackClassifier_2021-07-19_14-25-14_90_25_30.json" if prevFlags.GeoModel.Run <= LHCPeriod.Run3 else "Run4/RNNTrackClassifier_v1.json")
49 tau_cfg.addFlag("Tau.CalibrateLCConfig", "CaloTES_R22_Round2.5.root")
50 tau_cfg.addFlag("Tau.CombinedTESConfig", lambda prevFlags: "CombinedTES_R22_Round2.5_v2.root" if prevFlags.Common.ProductionStep is ProductionStep.Derivation else "CombinedTES_R22_Round2.5.root")
51 tau_cfg.addFlag("Tau.MvaTESConfig0p", "MvaTES_0p_R23.root")
52 tau_cfg.addFlag("Tau.MvaTESConfig", "MvaTES_R23.root")
53 tau_cfg.addFlag("Tau.MinPt0p", 9.25*Units.GeV)
54 tau_cfg.addFlag("Tau.MinPt", 6.75*Units.GeV)
55 tau_cfg.addFlag("Tau.MinPtDAOD", 13*Units.GeV)
56 tau_cfg.addFlag("Tau.MinPtLITE", 20*Units.GeV)
57 tau_cfg.addFlag("Tau.MaxTracksDAOD", 5)
58 tau_cfg.addFlag("Tau.TauJetRNNConfig", ["tauid_rnn_1p_R22_v1.json", "tauid_rnn_2p_R22_v1.json", "tauid_rnn_3p_R22_v1.json"])
59 tau_cfg.addFlag("Tau.TauJetRNNWPConfig", ["tauid_rnnWP_1p_R22_v0.root", "tauid_rnnWP_2p_R22_v0.root", "tauid_rnnWP_3p_R22_v0.root"])
60 tau_cfg.addFlag("Tau.TauEleRNNConfig", ["taueveto_rnn_config_1P_r22.json", "taueveto_rnn_config_3P_r22.json"])
61 tau_cfg.addFlag("Tau.TauEleRNNWPConfig", ["rnneveto_mc16d_flat_1p_fix.root", "rnneveto_mc16d_flat_3p_fix.root"])
62 tau_cfg.addFlag("Tau.DecayModeNNClassifierConfig", "NNDecayMode_R22_v1.json")
63 # GNTau ID tune file (need to add another version for noAux)
64 tau_cfg.addFlag("Tau.TauGNNConfig", ["GNTau_pruned_MC23.onnx","GNTau_trunc_MC23.onnx"])
65 tau_cfg.addFlag("Tau.TauGNNWP",
66 [
67 ["GNTauNAprune_flat_model_1p.root", "GNTauNAprune_flat_model_2p.root", "GNTauNAprune_flat_model_3p.root"],
68 ["GNTauNAtrunc_flat_model_1p.root", "GNTauNAtrunc_flat_model_2p.root", "GNTauNAtrunc_flat_model_3p.root"]
69 ])
70 tau_cfg.addFlag("Tau.TauDisplacedGNNConfig", ["GNdTau_pruned_MC23.onnx"])
71 tau_cfg.addFlag("Tau.GNTauScoreName", ["GNTauScore_v0prune","GNTauScore_v1trunc"])
72 tau_cfg.addFlag("Tau.GNTauTransScoreName", ["GNTauScoreSigTrans_v0prune","GNTauScoreSigTrans_v1trunc"])
73 tau_cfg.addFlag("Tau.GNTauMaxTracks", [30,10])
74 tau_cfg.addFlag("Tau.GNTauMaxClusters", [20,6])
75 tau_cfg.addFlag("Tau.GNTauNodeNameTau", "GN2TauNoAux_pb")
76 tau_cfg.addFlag("Tau.GNTauNodeNameJet", "GN2TauNoAux_pu")
77 tau_cfg.addFlag("Tau.GNTauDecorWPNames",
78 [
79 ["GNTauVL_v0prune", "GNTauL_v0prune", "GNTauM_v0prune", "GNTauT_v0prune"],
80 ["GNTauVL_v1trunc", "GNTauL_v1trunc", "GNTauM_v1trunc", "GNTauT_v1trunc"]
81 ])
82 # GNN eVeto config flags
83 #tau_cfg.addFlag("Tau.TauGNNeVetoConfig", ["GNTaueVeto_2025Retune.onnx"])
84 tau_cfg.addFlag("Tau.TauGNNeVetoConfig", ["GNTaueVeto_2025Retune_finitemask.onnx"])
85 tau_cfg.addFlag("Tau.TauGNNeVetoWP", ["GNTaueVeto_flat_model_1p.root", "GNTaueVeto_flat_model_1p.root", "GNTaueVeto_flat_model_1p.root"])
86 tau_cfg.addFlag("Tau.TauGNNeVetoScoreName", "TauGNNeVetoScore")
87 tau_cfg.addFlag("Tau.TauGNNeVetoTransScoreName", "TauGNNeVetoSigTrans")
88 tau_cfg.addFlag("Tau.TauGNNeVetoOutputDiscriminant_NeglogPJet_True", 3)
89 tau_cfg.addFlag("Tau.TauGNNeVetoOutputDiscriminant_PTau", 1)
90 tau_cfg.addFlag("Tau.TauGNNeVetoMaxTracks", [10])
91 tau_cfg.addFlag("Tau.TauGNNeVetoMaxClusters", [6])
92 tau_cfg.addFlag("Tau.TauGNNeVetoNodeNameTau", "TauGNNeVeto_pb")
93 tau_cfg.addFlag("Tau.TauGNNeVetoNodeNameJet", "TauGNNeVeto_pu")
94 tau_cfg.addFlag("Tau.TauGNNeVetoDecorWPNames", ["TauGNNeVeto_L", "TauGNNeVeto_M", "TauGNNeVeto_T"])
95
96
97 tau_cfg.addFlag("Tau.doTausRUs", False)
98 tau_cfg.addFlag("Tau.TausRUsModelFile", "dev/tauRecTools/tausrus_6.8.26.onnx")
99 tau_cfg.addFlag("Tau.TausRUsMinPt", lambda prevFlags: prevFlags.Tau.MinPtDAOD)
100 # Inference-as-a-service config (optional)
101 tau_cfg.addFlag("Tau.TausRUsUseTriton", False)
102 tau_cfg.addFlag("Tau.TausRUsTritonModel", "tausrus")
103 tau_cfg.addFlag("Tau.TausRUsTritonUrl", "localhost")
104 tau_cfg.addFlag("Tau.TausRUsTritonPort", 8001)
105
106 # PanTau config flags
107 from PanTauAlgs.PanTauConfigFlags import createPanTauConfigFlags
108 tau_cfg.addFlagsCategory("Tau.PanTau", createPanTauConfigFlags, prefix=True)
109
110 # create 2 flag categories, for standard taus and electron-subtracted taus
111 tau_cfg.addFlagsCategory("Tau.TauRec", createTauRecConfigFlags, prefix=True)
112 tau_cfg.addFlagsCategory("Tau.TauEleRM", createTauEleRMConfigFlags, prefix=True)
113 tau_cfg.addFlagsCategory("Tau.TauLRT", createTauLRTConfigFlags, prefix=True)
114 # define ActiveConfig in TauConfigFlags.py so it exists for client code like DerivationFramework that don't want to define it via cloneAndReplace
115 # FIXME: this looks more like a hack than good design, maybe dropping Tau.ActiveConfig and using Tau.TauRec as active config would be better?
116 tau_cfg.addFlagsCategory("Tau.ActiveConfig", createTauRecConfigFlags, prefix=True)
117
118 # e-had boosted ditaus, aka electron-subtracted taus
119 tau_cfg.addFlag("Tau.doTauEleRMRec", lambda prevFlags : True if prevFlags.GeoModel.Run <= LHCPeriod.Run3 else False)
120 # helper for derivations, TauJets_EleRM not available for AODs produced before 24.0.17
121 tau_cfg.addFlag("Tau.TauEleRM_isAvailable", lambda prevFlags : "xAOD::TauJetContainer#TauJets_EleRM" in prevFlags.Input.TypedCollections)
122 # helper for derivations, used in PHYSVAL monitoring
123 tau_cfg.addFlag("Tau.TauMuonRM_isAvailable", lambda prevFlags : "xAOD::TauJetContainer#TauJets_MuonRM" in prevFlags.Input.TypedCollections)
124 tau_cfg.addFlag("Tau.Tau_isAvailable", lambda prevFlags : "xAOD::TauJetContainer#TauJets" in prevFlags.Input.TypedCollections)
125
126 return tau_cfg
127
128
130 from AthenaConfiguration.AthConfigFlags import AthConfigFlags
131 flags = AthConfigFlags()
132 flags.addFlag("prefix", "")
133
134 # Output containers
135 flags.addFlag("TauJets", "TauJets")
136 flags.addFlag("TauTracks", "TauTracks")
137 flags.addFlag("TauShotClusters", "TauShotClusters")
138 flags.addFlag("TauShotClustersLinks", "TauShotClusters_links")
139 flags.addFlag("TauShotPFOs", "TauShotParticleFlowObjects")
140 flags.addFlag("TauPi0Clusters", "TauPi0Clusters")
141 flags.addFlag("TauPi0ClustersLinks", "TauPi0Clusters_links")
142 flags.addFlag("TauHadronicPFOs", "TauHadronicParticleFlowObjects")
143 flags.addFlag("TauNeutralPFOs", "TauNeutralParticleFlowObjects")
144 flags.addFlag("TauChargedPFOs", "TauChargedParticleFlowObjects")
145 flags.addFlag("TauSecondaryVertices", "TauSecondaryVertices")
146 flags.addFlag("TauFinalPi0s", "TauFinalPi0s")
147
148 # Transient containers
149 flags.addFlag("TauJets_tmp", "TauJets_tmp")
150 flags.addFlag("TauCommonPi0Cells", "TauCommonPi0Cells")
151 flags.addFlag("TauPi0Clusters_tmp", "TauPi0Clusters_tmp")
152
153 # Input containers
154 flags.addFlag("VertexCollection", "PrimaryVertices")
155 flags.addFlag("TrackCollection", "InDetTrackParticles")
156 flags.addFlag("SeedJetCollection", lambda prevFlags: "AntiKt4LCTopoJets" if prevFlags.GeoModel.Run <= LHCPeriod.Run3 else "AntiKt4EMPFlowNoPtCutTauSeedJets")
157 flags.addFlag("LargeD0TrackCollection", "InDetLargeD0TrackParticles")
158 flags.addFlag("EventShapeCollection", lambda prevFlags: "Kt4LCTopoOriginEventShape" if prevFlags.GeoModel.Run <= LHCPeriod.Run3 else "Kt4EMPFlowEventShape")
159
160 # Electron-subtracted tau flags appearing in standard tau reconstruction
161 flags.addFlag("inTauEleRM", False)
162 flags.addFlag("RemoveElectronCells", False)
163 flags.addFlag("RemovedElectronClusters", "")
164
165 # Flags for LRT tau
166 flags.addFlag("inTauLRT", False)
167 return flags
168
169
172 flags.prefix = "EleRM_"
173 _output_suffix = "_EleRM"
174
175 # Output containers
176 flags.TauJets = f"TauJets{_output_suffix}"
177 flags.TauTracks = f"TauTracks{_output_suffix}"
178 flags.TauShotClusters = f"TauShotClusters{_output_suffix}"
179 flags.TauShotClustersLinks = f"TauShotClusters{_output_suffix}_links"
180 flags.TauShotPFOs = f"TauShotParticleFlowObjects{_output_suffix}"
181 flags.TauPi0Clusters = f"TauPi0Clusters{_output_suffix}"
182 flags.TauPi0ClustersLinks = f"TauPi0Clusters{_output_suffix}_links"
183 flags.TauHadronicPFOs = f"TauHadronicParticleFlowObjects{_output_suffix}"
184 flags.TauNeutralPFOs = f"TauNeutralParticleFlowObjects{_output_suffix}"
185 flags.TauChargedPFOs = f"TauChargedParticleFlowObjects{_output_suffix}"
186 flags.TauSecondaryVertices = f"TauSecondaryVertices{_output_suffix}"
187 flags.TauFinalPi0s = f"TauFinalPi0s{_output_suffix}"
188
189 # Transient containers
190 flags.TauJets_tmp = f"TauJets_tmp{_output_suffix}"
191 flags.TauCommonPi0Cells = f"TauCommonPi0Cells{_output_suffix}"
192 flags.TauPi0Clusters_tmp = f"TauPi0Clusters_tmp{_output_suffix}"
193
194 # Input containers
195 flags.TrackCollection = f"InDetTrackParticles{_output_suffix}"
196 flags.SeedJetCollection = f"AntiKt4LCTopoJets{_output_suffix}"
197 flags.EventShapeCollection = "EleRM_Kt4LCTopoOriginEventShape"
198
199 # Electron-subtracted tau flags appearing in standard tau reconstruction
200 flags.inTauEleRM = True
201 flags.RemoveElectronCells = True
202 flags.RemovedElectronClusters = f"RemovedClusters{_output_suffix}"
203
204 # Electron-subtracted tau specific flags
205 flags.addFlag("EleRM_ElectronWorkingPoint", "Medium")
206 flags.addFlag("RemovedElectronTracks", f"RemovedTracks{_output_suffix}")
207 flags.addFlag("CaloCalTopoClusters_EleRM", f"CaloCalTopoClusters{_output_suffix}")
208 flags.addFlag("LCOriginTopoClusters_EleRM", f"LCOriginTopoClusters{_output_suffix}")
209 flags.addFlag("LCTopoOrigin_EleRM", f"LCTopoOrigin{_output_suffix}")
210 flags.addFlag("EleRM_CheckingConeSize", 0.6)
211
212 return flags
213
216 flags.prefix = "TauLRT_"
217 _output_suffix = "LRT"
218
219 # Output containers
220 flags.TauJets = f"TauJets{_output_suffix}"
221 flags.TauTracks = f"TauTracks{_output_suffix}"
222 flags.TauShotClusters = f"TauShotClusters{_output_suffix}"
223 flags.TauShotClustersLinks = f"TauShotClusters{_output_suffix}_links"
224 flags.TauShotPFOs = f"TauShotParticleFlowObjects{_output_suffix}"
225 flags.TauPi0Clusters = f"TauPi0Clusters{_output_suffix}"
226 flags.TauPi0ClustersLinks = f"TauPi0Clusters{_output_suffix}_links"
227 flags.TauHadronicPFOs = f"TauHadronicParticleFlowObjects{_output_suffix}"
228 flags.TauNeutralPFOs = f"TauNeutralParticleFlowObjects{_output_suffix}"
229 flags.TauChargedPFOs = f"TauChargedParticleFlowObjects{_output_suffix}"
230 flags.TauSecondaryVertices = f"TauSecondaryVertices{_output_suffix}"
231 flags.TauFinalPi0s = f"TauFinalPi0s{_output_suffix}"
232
233 # Transient containers
234 flags.TauJets_tmp = f"TauJets_tmp{_output_suffix}"
235 flags.TauCommonPi0Cells = f"TauCommonPi0Cells{_output_suffix}"
236 flags.TauPi0Clusters_tmp = f"TauPi0Clusters_tmp{_output_suffix}"
237
238 flags.inTauLRT = True
239
240 return flags
241
242# Self test
243
244class TestTauRecConfigFlags(unittest.TestCase):
245 def runTest(self):
247
248
249if __name__ == "__main__":
250 unittest.main()