ATLAS Offline Software
TauConfigFlags.py
Go to the documentation of this file.
1 # Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
2 
3 import unittest
4 from AthenaConfiguration.AthConfigFlags import AthConfigFlags
5 import AthenaCommon.SystemOfUnits as Units
6 from AthenaConfiguration.Enums import LHCPeriod
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.doTJVA", True)
17  tau_cfg.addFlag("Tau.doPi0Clus", 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 
26  # Settings common to Run2 and Run3
27  tau_cfg.addFlag("Tau.SeedMinPt", 0.0*Units.GeV)
28  tau_cfg.addFlag("Tau.SeedMaxEta", lambda pcf: 2.5 if pcf.GeoModel.Run <= LHCPeriod.Run3 else 4.0)
29  # FIXME: MaxNTracks is not used, drop at the next occasion
30  tau_cfg.addFlag("Tau.MaxNTracks", -1)
31  tau_cfg.addFlag("Tau.RemoveDupeCoreTracks", True)
32  tau_cfg.addFlag("Tau.doTJVATiebreak", True)
33  tau_cfg.addFlag("Tau.useGhostTracks", True)
34  tau_cfg.addFlag("Tau.ghostTrackDR", 0.25)
35  tau_cfg.addFlag("Tau.shotPtCut_1Photon", [430.*Units.MeV, 300.*Units.MeV, 9999999.*Units.MeV, 330.*Units.MeV, 350.*Units.MeV])
36  tau_cfg.addFlag("Tau.shotPtCut_2Photons", [10000.*Units.MeV, 10000.*Units.MeV, 9999999.*Units.MeV, 10000.*Units.MeV, 10000.*Units.MeV])
37  tau_cfg.addFlag("Tau.Pi0ScoreConfig", "TauPi0BDTWeights.root")
38  tau_cfg.addFlag("Tau.pi0EtCuts", [2800.*Units.MeV, 2700.*Units.MeV, 2500.*Units.MeV, 2900.*Units.MeV, 2700.*Units.MeV])
39  tau_cfg.addFlag("Tau.pi0MVACuts_1prong", [0.45, 0.37, 0.39, 0.40, 0.38])
40  tau_cfg.addFlag("Tau.pi0MVACuts_mprong", [0.73, 0.69, 0.58, 0.69, 0.67])
41 
42  # Run2 settings and calibration files
43  tau_cfg.addFlag("Tau.tauRecToolsCVMFSPath", "tauRecTools/R22_preprod")
44  tau_cfg.addFlag("Tau.tauRNNTrackClassConfig", "RNNTrackClassifier_2021-07-19_14-25-14_90_25_30.json")
45  tau_cfg.addFlag("Tau.CalibrateLCConfig", "CaloTES_R22_Round2.5.root")
46  tau_cfg.addFlag("Tau.CombinedTESConfig", "CombinedTES_R22_Round2.5.root")
47  tau_cfg.addFlag("Tau.MvaTESConfig0p", "MvaTES_0p_R23.root")
48  tau_cfg.addFlag("Tau.MvaTESConfig", "MvaTES_R23.root")
49  tau_cfg.addFlag("Tau.MinPt0p", 9.25*Units.GeV)
50  tau_cfg.addFlag("Tau.MinPt", 6.75*Units.GeV)
51  tau_cfg.addFlag("Tau.MinPtDAOD", 13*Units.GeV)
52  tau_cfg.addFlag("Tau.TauJetRNNConfig", ["tauid_rnn_1p_R22_v1.json", "tauid_rnn_2p_R22_v1.json", "tauid_rnn_3p_R22_v1.json"])
53  tau_cfg.addFlag("Tau.TauJetRNNWPConfig", ["tauid_rnnWP_1p_R22_v0.root", "tauid_rnnWP_2p_R22_v0.root", "tauid_rnnWP_3p_R22_v0.root"])
54  tau_cfg.addFlag("Tau.TauEleRNNConfig", ["taueveto_rnn_config_1P_r22.json", "taueveto_rnn_config_3P_r22.json"])
55  tau_cfg.addFlag("Tau.TauEleRNNWPConfig", ["taueveto_rnn_flat_1P_r22.root", "taueveto_rnn_flat_3P_r22.root"])
56  tau_cfg.addFlag("Tau.DecayModeNNClassifierConfig", "NNDecayMode_R22_v1.json")
57  tau_cfg.addFlag("Tau.TauEleRNNWPfix", ["rnneveto_mc16d_flat_1p_fix.root", "rnneveto_mc16d_flat_3p_fix.root"])
58  # GNTau ID tune file (need to add another version for noAux)
59  tau_cfg.addFlag("Tau.TauGNNConfig", ["GNTau_pruned_MC23.onnx","GNTau_trunc_MC23.onnx"])
60  tau_cfg.addFlag("Tau.TauGNNWP",
61  [
62  ["GNTauNAprune_flat_model_1p.root", "GNTauNAprune_flat_model_2p.root", "GNTauNAprune_flat_model_3p.root"],
63  ["GNTauNAtrunc_flat_model_1p.root", "GNTauNAtrunc_flat_model_2p.root", "GNTauNAtrunc_flat_model_3p.root"]
64  ])
65  tau_cfg.addFlag("Tau.GNTauScoreName", ["GNTauScore_v0prune","GNTauScore_v1trunc"])
66  tau_cfg.addFlag("Tau.GNTauTransScoreName", ["GNTauScoreSigTrans_v0prune","GNTauScoreSigTrans_v1trunc"])
67  tau_cfg.addFlag("Tau.GNTauMaxTracks", [30,10])
68  tau_cfg.addFlag("Tau.GNTauMaxClusters", [20,6])
69  tau_cfg.addFlag("Tau.GNTauNodeNameTau", "GN2TauNoAux_pb")
70  tau_cfg.addFlag("Tau.GNTauNodeNameJet", "GN2TauNoAux_pu")
71  tau_cfg.addFlag("Tau.GNTauDecorWPNames",
72  [
73  ["GNTauVL_v0prune", "GNTauL_v0prune", "GNTauM_v0prune", "GNTauT_v0prune"],
74  ["GNTauVL_v1trunc", "GNTauL_v1trunc", "GNTauM_v1trunc", "GNTauT_v1trunc"]
75  ])
76 
77 
78  # PanTau config flags
79  from PanTauAlgs.PanTauConfigFlags import createPanTauConfigFlags
80  tau_cfg.addFlagsCategory("Tau.PanTau", createPanTauConfigFlags, prefix=True)
81 
82  # create 2 flag categories, for standard taus and electron-subtracted taus
83  tau_cfg.addFlagsCategory("Tau.TauRec", createTauRecConfigFlags, prefix=True)
84  tau_cfg.addFlagsCategory("Tau.TauEleRM", createTauEleRMConfigFlags, prefix=True)
85  # define ActiveConfig in TauConfigFlags.py so it exists for client code like DerivationFramework that don't want to define it via cloneAndReplace
86  # FIXME: this looks more like a hack than good design, maybe dropping Tau.ActiveConfig and using Tau.TauRec as active config would be better?
87  tau_cfg.addFlagsCategory("Tau.ActiveConfig", createTauRecConfigFlags, prefix=True)
88 
89  # e-had boosted ditaus, aka electron-subtracted taus
90  tau_cfg.addFlag("Tau.doTauEleRMRec", True)
91  # had-had boosted ditaus
92  tau_cfg.addFlag("Tau.doDiTauRec", True)
93 
94  return tau_cfg
95 
96 
98  from AthenaConfiguration.AthConfigFlags import AthConfigFlags
99  flags = AthConfigFlags()
100  flags.addFlag("prefix", "")
101 
102  # Output containers
103  flags.addFlag("TauJets", "TauJets")
104  flags.addFlag("TauTracks", "TauTracks")
105  flags.addFlag("TauShotClusters", "TauShotClusters")
106  flags.addFlag("TauShotClustersLinks", "TauShotClusters_links")
107  flags.addFlag("TauShotPFOs", "TauShotParticleFlowObjects")
108  flags.addFlag("TauPi0Clusters", "TauPi0Clusters")
109  flags.addFlag("TauPi0ClustersLinks", "TauPi0Clusters_links")
110  flags.addFlag("TauHadronicPFOs", "TauHadronicParticleFlowObjects")
111  flags.addFlag("TauNeutralPFOs", "TauNeutralParticleFlowObjects")
112  flags.addFlag("TauChargedPFOs", "TauChargedParticleFlowObjects")
113  flags.addFlag("TauSecondaryVertices", "TauSecondaryVertices")
114  flags.addFlag("TauFinalPi0s", "TauFinalPi0s")
115 
116  # Transient containers
117  flags.addFlag("TauJets_tmp", "TauJets_tmp")
118  flags.addFlag("TauCommonPi0Cells", "TauCommonPi0Cells")
119  flags.addFlag("TauPi0Clusters_tmp", "TauPi0Clusters_tmp")
120 
121  # Input containers
122  flags.addFlag("VertexCollection", "PrimaryVertices")
123  flags.addFlag("TrackCollection", "InDetTrackParticles")
124  flags.addFlag("SeedJetCollection", "AntiKt4LCTopoJets")
125  flags.addFlag("LargeD0TrackCollection", "InDetLargeD0TrackParticles")
126  flags.addFlag("EventShapeCollection", "Kt4LCTopoOriginEventShape")
127 
128  # Electron-subtracted tau flags appearing in standard tau reconstruction
129  flags.addFlag("inTauEleRM", False)
130  flags.addFlag("RemoveElectronCells", False)
131  flags.addFlag("RemovedElectronClusters", "")
132 
133  return flags
134 
135 
137  flags = createTauRecConfigFlags()
138  flags.prefix = "EleRM_"
139  _output_suffix = "_EleRM"
140 
141  # Output containers
142  flags.TauJets = f"TauJets{_output_suffix}"
143  flags.TauTracks = f"TauTracks{_output_suffix}"
144  flags.TauShotClusters = f"TauShotClusters{_output_suffix}"
145  flags.TauShotClustersLinks = f"TauShotClusters{_output_suffix}_links"
146  flags.TauShotPFOs = f"TauShotParticleFlowObjects{_output_suffix}"
147  flags.TauPi0Clusters = f"TauPi0Clusters{_output_suffix}"
148  flags.TauPi0ClustersLinks = f"TauPi0Clusters{_output_suffix}_links"
149  flags.TauHadronicPFOs = f"TauHadronicParticleFlowObjects{_output_suffix}"
150  flags.TauNeutralPFOs = f"TauNeutralParticleFlowObjects{_output_suffix}"
151  flags.TauChargedPFOs = f"TauChargedParticleFlowObjects{_output_suffix}"
152  flags.TauSecondaryVertices = f"TauSecondaryVertices{_output_suffix}"
153  flags.TauFinalPi0s = f"TauFinalPi0s{_output_suffix}"
154 
155  # Transient containers
156  flags.TauJets_tmp = "TauJets_tmp_EleRM"
157  flags.TauCommonPi0Cells = "TauCommonPi0Cells_EleRM"
158  flags.TauPi0Clusters_tmp = "TauPi0Clusters_tmp_EleRM"
159 
160  # Input containers
161  flags.TrackCollection = "InDetTrackParticles_EleRM"
162  flags.SeedJetCollection = "AntiKt4LCTopoJets_EleRM"
163  flags.EventShapeCollection = "EleRM_Kt4LCTopoOriginEventShape"
164 
165  # Electron-subtracted tau flags appearing in standard tau reconstruction
166  flags.inTauEleRM = True
167  flags.RemoveElectronCells = True
168  flags.RemovedElectronClusters = "RemovedClusters_EleRM"
169 
170  # Electron-subtracted tau specific flags
171  flags.addFlag("EleRM_ElectronWorkingPoint", "Medium")
172  flags.addFlag("RemovedElectronTracks", "RemovedTracks_EleRM")
173  flags.addFlag("CaloCalTopoClusters_EleRM", "CaloCalTopoClusters_EleRM")
174  flags.addFlag("LCOriginTopoClusters_EleRM", "LCOriginTopoClusters_EleRM")
175  flags.addFlag("LCTopoOrigin_EleRM", "LCTopoOrigin_EleRM")
176  flags.addFlag("EleRM_CheckingConeSize", 0.6)
177 
178  return flags
179 
180 
181 # Self test
182 
183 class TestTauRecConfigFlags(unittest.TestCase):
184  def runTest(self):
186 
187 
188 if __name__ == "__main__":
189  unittest.main()
TauConfigFlags.createTauEleRMConfigFlags
def createTauEleRMConfigFlags()
Definition: TauConfigFlags.py:136
SystemOfUnits
TauConfigFlags.TestTauRecConfigFlags.runTest
def runTest(self)
Definition: TauConfigFlags.py:184
TauConfigFlags.createTauConfigFlags
def createTauConfigFlags()
Definition: TauConfigFlags.py:8
TauConfigFlags.TestTauRecConfigFlags
Definition: TauConfigFlags.py:183
TauConfigFlags.createTauRecConfigFlags
def createTauRecConfigFlags()
Definition: TauConfigFlags.py:97