ATLAS Offline Software
Class_FeatureHandler.py
Go to the documentation of this file.
1 # Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
2 
3 import string
4 
6 
7  def getFeatureNames(self):
8  listFeatNames = []
9  for iFeature in self.m_Feature_Names:
10  listFeatNames += [self.m_Feature_Names[iFeature]]
11  return listFeatNames
12  #end getFeatureNames
13 
14  def getFeatureTypes(self):
15  listFeatTypes = []
16  for iFeature in self.m_Feature_Types:
17  listFeatTypes += [self.m_Feature_Types[iFeature]]
18  return listFeatTypes
19  #end getFeatureTypes
20 
22  listFeatDefaults = []
23  for iFeature in self.m_Feature_Defaults:
24  listFeatDefaults += [self.m_Feature_Defaults[iFeature]]
25  return listFeatDefaults
26  #end getFeatureDefaultValues
27 
28  def addToFeatures(self, theBaseName, theVarTypeName, theFeatureType, defaultValueOverride=0):
29  """ Add a single feature with given name, type and default value """
30 
31  #set feature name and default value
32  featureName = theVarTypeName + "_" + theBaseName
33  defaultValue = self.m_DefaultValues[theVarTypeName]
34  if defaultValueOverride != 0:
35  defaultValue = defaultValueOverride
36 
37  #add to features
38  self.m_Feature_Names[featureName] = featureName
39  self.m_Feature_Defaults[featureName] = defaultValue
40  self.m_Feature_Types[featureName] = theFeatureType
41  #end addToFeatures
42 
43  def addToFeatures_FullName(self, completeFeatureName, theVarTypeName, theFeatureType, defaultValueOverride=0):
44  #set feature name and default value
45  featureName = completeFeatureName
46  defaultValue = self.m_DefaultValues[theVarTypeName]
47  if defaultValueOverride != 0:
48  defaultValue = defaultValueOverride
49 
50  #add to features
51  self.m_Feature_Names[featureName] = featureName
52  self.m_Feature_Defaults[featureName] = defaultValue
53  self.m_Feature_Types[featureName] = theFeatureType
54  #end addToFeatures_FullName
55 
56 
57  def addToFeatures_AllTypes(self, theBaseName, theVarTypeName, theFeatureType, defaultValueOverride=0):
58  """ Add the feature described by theName, theType and theDefault for all known constituent types"""
59 
60  #set default value
61  defaultValue = self.m_DefaultValues[theVarTypeName]
62  if defaultValueOverride != 0:
63  defaultValue = defaultValueOverride
64 
65  #fill feature for all types
66  for iConstType in self.m_ConstituentTypes:
67  featureName = iConstType + "_" + theVarTypeName + "_" + theBaseName
68 
69  self.m_Feature_Names[featureName] = featureName
70  self.m_Feature_Defaults[featureName] = defaultValue
71  self.m_Feature_Types[featureName] = theFeatureType
72  #end loop over types
73  #end addToFeatures_AllTypes
74 
75 
76  def addToFeatures_AllTypes_AllEnergyVariants(self, theBaseName, theVarTypeName, theFeatureType, defaultValueOverride=0):
77  """ Add the feature described by theName, theType and theDefault for all known constituent types"""
78  for iEnergyType in self.m_EnergyVariantsList:
79  featureName = theBaseName + iEnergyType
80  self.addToFeatures_AllTypes(featureName, theVarTypeName, theFeatureType, defaultValueOverride)
81  #end loop over energy types
82  #end addToFeatures_AllTypes
83 
84  def __init__(self):
85 
86  #setup the varType prefixes
87  # they are passed to the feature extractor later on - avoids errors due to typos
88  self.m_VarTypeName_Ratio = "Ratio"
89  self.m_VarTypeName_Mean = "Mean"
90  self.m_VarTypeName_StdDev = "StdDev"
91  self.m_VarTypeName_HLV = "HLV"
92  self.m_VarTypeName_Angle = "Angle"
93  self.m_VarTypeName_DeltaR = "DeltaR"
94  self.m_VarTypeName_JetMoment = "JetMoment"
95  self.m_VarTypeName_Combined = "Combined"
96  self.m_VarTypeName_Basic = "Basic"
97  self.m_VarTypeName_PID = "PID"
98  self.m_VarTypeName_Shots = "Shots"
99 
100  #setup the default values for the different variable types
101  self.m_DefaultValues = {}
102  self.m_DefaultValues[self.m_VarTypeName_Ratio] = -0.2
103  self.m_DefaultValues[self.m_VarTypeName_Mean] = -0.2
104  self.m_DefaultValues[self.m_VarTypeName_StdDev] = -0.2
105  self.m_DefaultValues[self.m_VarTypeName_HLV] = -4000.0
106  self.m_DefaultValues[self.m_VarTypeName_Angle] = -0.2
107  self.m_DefaultValues[self.m_VarTypeName_DeltaR] = -0.2
108  self.m_DefaultValues[self.m_VarTypeName_JetMoment] = -0.2
109  self.m_DefaultValues[self.m_VarTypeName_Combined] = -10.0
110  self.m_DefaultValues[self.m_VarTypeName_Basic] = -5.0
111  self.m_DefaultValues[self.m_VarTypeName_PID] = -9.0
112  self.m_DefaultValues[self.m_VarTypeName_Shots] = -2.0
113 
114  #setup the constituent types
119 
121  #baseline
125 
126  self.m_EnergyVariantsList = ["EtAllConsts"]
127  # ==============================================
128 
129 
130  #setup member variables to hold feature info
131  self.m_Feature_Names = {}
133  self.m_Feature_Types = {}
134 
135  #fill member variables
136  self.addSingleVariables()
137  self.addMultiplicities()
138  self.addFourMomentum()
147 
148  #end init
149 
150 
151  def dump(self):
152  print("config_FeatureCalculator: Dumping features:")
153  for iFeature in sorted(self.m_Feature_Names.iterkeys()):
154  featName = self.m_Feature_Names[iFeature]
155  featType = self.m_Feature_Types[iFeature]
156  featDefault = self.m_Feature_Defaults[iFeature]
157  print("\t" + string.ljust(featName, 50) + " of type " + featType + " defaults to " + string.rjust(str(featDefault), 10) )
158  #print("\t" + featName + " of type " + featType + " defaults to " + str(featDefault) )
159  #end for over features
160  print("config_FeatureCalculator: Done dumping features")
161  #end dump
162 
163 
165  Variables = []
166  Variables += ["isPanTauCandidate"]
167  Variables += ["RecoMode"]
168  Variables += ["RecoMode_PanTau"]
169  Variables += ["BDTValue_1p0n_vs_1p1n"]
170  Variables += ["BDTValue_1p1n_vs_1pXn"]
171  Variables += ["BDTValue_3p0n_vs_3pXn"]
172  Variables += ["SumCharge"]
173  Variables += ["AbsCharge"]
174  for iVar in Variables:
175  curDefVal = self.m_DefaultValues[self.m_VarTypeName_Basic]
176  if iVar == "isPanTauCandidate":
177  curDefVal = 0
178  if iVar == "RecoMode" or iVar == "RecoMode_PanTau":
179  curDefVal = -10
180  self.addToFeatures(iVar, self.m_VarTypeName_Basic, "F", curDefVal)
181  #end loop over variables
182  #end def addSingleVariables
183 
184 
185  def addMultiplicities(self):
186  Variables = self.m_ConstituentTypes
187 
188  for iVar in Variables:
189  featName = "N" + iVar + "Consts"
190  self.addToFeatures(featName, self.m_VarTypeName_Basic, "F")
191  #end loop over variables
192 
193  #add the inclusive one
194  self.addToFeatures("N" + self.m_ConstituentTypeName_All + "Consts", self.m_VarTypeName_Basic, "F")
195 
196  #end def addMultiplicities
197 
198 
199  def addFourMomentum(self):
200  Variables = []
201  Variables += ["pt"]
202  Variables += ["eta"]
203  Variables += ["phi"]
204  Variables += ["m"]
205 
206  Types = []
207  Types += ["ProtoMomentumCore"]
208 
209  for iVar in Variables:
210  for iType in Types:
211  curFeatName = iType + "_" + iVar
212  curDefVal = -4000.
213  if iVar == "eta" or iVar == "phi":
214  curDefVal = -9.
215  if iVar == "m":
216  curDefVal = -200.
217  self.addToFeatures(curFeatName, self.m_VarTypeName_Basic, "F", curDefVal)
218  #end loop types
219  #end loop vars
220  #end def addFourMomentum
221 
223  Variables = ["BDTValues"]
224 
225  MaxNum = 4
226 
227  for iVar in Variables:
228  for iNum in range(1, MaxNum):
229  featName = iVar + "_BDTSort_" + str(iNum)
230  self.addToFeatures_AllTypes(featName, self.m_VarTypeName_PID, "F")
231  #end loop over num
232  #end loop over variables
233  #end addTypeSpecificFeatures
234 
235 
237  Variables = []
238  Variables += ["nPhotons"]
239  Variables += ["EtSumShotsOverConstEt"]
240 
241  MaxNum = 4
242 
243  for iVar in Variables:
244  for iNum in range(1, MaxNum):
245  featName = iVar + "_BDTSort_" + str(iNum)
246  curDefVal = self.m_DefaultValues[self.m_VarTypeName_Shots]
247 
248  self.addToFeatures_FullName(self.m_ConstituentTypeName_Neutral + "_" + self.m_VarTypeName_Shots + "_" + featName, self.m_VarTypeName_Shots, "F", curDefVal)
249  self.addToFeatures_FullName(self.m_ConstituentTypeName_Pi0Neut + "_" + self.m_VarTypeName_Shots + "_" + featName, self.m_VarTypeName_Shots, "F", curDefVal)
250  #end loop over iNum
251  #end loop over variables
252 
253  Variables = []
254  Variables += ["NPhotonsInSeed"]
255  for iVar in Variables:
256  featName = iVar
257  curDefVal = self.m_DefaultValues[self.m_VarTypeName_Shots]
258 
259  self.addToFeatures_FullName(self.m_ConstituentTypeName_Neutral + "_" + self.m_VarTypeName_Shots + "_" + featName, self.m_VarTypeName_Shots, "F", curDefVal)
260  self.addToFeatures_FullName(self.m_ConstituentTypeName_Pi0Neut + "_" + self.m_VarTypeName_Shots + "_" + featName, self.m_VarTypeName_Shots, "F", curDefVal)
261  #end loop over variables
262  #end addTypeSpecificFeatures_Shots
263 
265 
266  Variables_WithEnergyTypes = []
267  Variables_WithEnergyTypes += ["EtOver"]
268  Variables_WithEnergyTypes += ["1stBDTEtOver"]
269  for iVar in Variables_WithEnergyTypes:
271  #end loop over variables with energy types
272 
273  Variables = []
274  Variables += ["1stBDTEtOverTypeEt"]
275  Variables += ["EFOsOverTotalEFOs"]
276  for iVar in Variables:
277  self.addToFeatures_AllTypes(iVar, self.m_VarTypeName_Ratio, "F")
278  #end loop over variables with energy types
279  #end addTypeSpecificFeatures_Ratios
280 
282 
283  Variables_WithEnergyTypes = []
284  Variables_WithEnergyTypes += ["Et_Wrt"]
285  for iVar in Variables_WithEnergyTypes:
287  #end addTypeSpecificFeatures_StdDevs
288 
289 
291  Variables = []
292  Variables += ["SumPt"]
293  Variables += ["SumEta"]
294  Variables += ["SumPhi"]
295  Variables += ["SumM"]
296  for iVar in Variables:
297  curDefVal = -4000.
298  if iVar == "SumEta" or iVar == "SumPhi":
299  curDefVal = -9.
300  if iVar == "SumM":
301  curDefVal = -200.
302  self.addToFeatures_AllTypes(iVar, self.m_VarTypeName_HLV, "F", curDefVal)
303 
304  #end loop over variables
305 
306  VariablesVec = []
307  VariablesVec += ["Constituents_pt"]
308  VariablesVec += ["Constituents_eta"]
309  VariablesVec += ["Constituents_phi"]
310  VariablesVec += ["Constituents_m"]
311 
312  for iVecVar in VariablesVec:
313  featName = "BDTSort_" + iVecVar
314  curDefVal = -4000.
315  if iVecVar == "Constituents_eta" or iVecVar == "Constituents_phi":
316  curDefVal = -9.
317  if iVecVar == "Constituents_m":
318  curDefVal = -200.
319  self.addToFeatures_AllTypes(featName, self.m_VarTypeName_HLV, "V", curDefVal)
320 
321 
322  #end loop over variables
323  #end addTypeSpecificFeatures_HLV
324 
326  Variables = []
327  Variables += ["EtDR"]
328  Variables += ["EtDRxTotalEt"]
329  for iVar in Variables:
330  self.addToFeatures_AllTypes(iVar, self.m_VarTypeName_JetMoment, "F")
331  #end loop over variables
332  #end addTypeSpecificFeatures_JetMoment
333 
335  Types = []
336  Types += ["Charged"]
337  Types += ["Neutral"]
338  Types += ["Pi0Neut"]
339 
340  Variables = []
341  Variables += [ ["Log1st", "EtOver", "Et"] ]
342  Variables += [ ["Log", "EtOver", "Et"] ]
343  Variables += [ ["Angle", "To", ""] ]
344  Variables += [ ["DeltaR1st", "To1st", ""] ]
345  Variables += [ ["Angle1st", "To1st", ""] ]
346  for iType in Types:
347  for jType in Types:
348 
349  #skip if types are equal
350  if iType == jType:
351  continue
352 
353  for iVar in Variables:
354  featName = iVar[0] + iType + iVar[1] + jType + iVar[2]
355  #if iVar[2] != "-":
356  #featName = featName + iVar[2]
357  self.addToFeatures(featName, self.m_VarTypeName_Combined, "F")
358  #end loop over variables
359  #end loop over jType
360  #end loop over iType
361  #end addCombinedFeatures_TypeVsType
362 
363 
365  iTypes = []
366  iTypes += ["Charged"]
367 
368  jTypes = []
369  jTypes += ["Pi0Neut"]
370  jTypes += ["Neutral"]
371 
372  Variables_WithEnergyTypes = []
373  Variables_WithEnergyTypes += [ ["Mean", "Et_Wrt"] ]
374 
375  Variables = []
376  Variables += [ ["InvMass", ""] ]
377  for iType in iTypes:
378  for jType in jTypes:
379 
380  for iVar in Variables:
381  featName = iVar[0] + iType + jType + iVar[1]
382  self.addToFeatures(featName, self.m_VarTypeName_Combined, "F")
383  #end loop over variables
384 
385  for iVar in Variables_WithEnergyTypes:
386  featName = iVar[0] + iType + jType + iVar[1]
387  for iEnergyType in self.m_EnergyVariantsList:
388  featNameWithEnergy = featName + iEnergyType
389  self.addToFeatures(featNameWithEnergy, self.m_VarTypeName_Combined, "F")
390  #end loop over variables for energy types
391 
392  #end loop over jTypes
393  #end loop over iTypes
394  #end addCombinedFeatures_SelectedTypes
395 
396 #end class config_FeatureCalculator
397 
398 
399 
python.Class_FeatureHandler.FeatureHandler.m_ConstituentTypeName_Neutral
m_ConstituentTypeName_Neutral
Definition: Class_FeatureHandler.py:117
DerivationFramework::TriggerMatchingUtils::sorted
std::vector< typename R::value_type > sorted(const R &r, PROJ proj={})
Helper function to create a sorted vector from an unsorted range.
python.Class_FeatureHandler.FeatureHandler.addTypeSpecificFeatures_Shots
def addTypeSpecificFeatures_Shots(self)
Definition: Class_FeatureHandler.py:236
python.Class_FeatureHandler.FeatureHandler.addCombinedFeatures_SelectedTypes
def addCombinedFeatures_SelectedTypes(self)
Definition: Class_FeatureHandler.py:364
python.Class_FeatureHandler.FeatureHandler.addTypeSpecificFeatures_StdDevs
def addTypeSpecificFeatures_StdDevs(self)
Definition: Class_FeatureHandler.py:281
python.Class_FeatureHandler.FeatureHandler.m_ConstituentTypeName_Charged
m_ConstituentTypeName_Charged
Definition: Class_FeatureHandler.py:116
python.Class_FeatureHandler.FeatureHandler.addCombinedFeatures_TypeVsType
def addCombinedFeatures_TypeVsType(self)
Definition: Class_FeatureHandler.py:334
python.Class_FeatureHandler.FeatureHandler.dump
def dump(self)
Definition: Class_FeatureHandler.py:151
python.Class_FeatureHandler.FeatureHandler.addToFeatures
def addToFeatures(self, theBaseName, theVarTypeName, theFeatureType, defaultValueOverride=0)
Definition: Class_FeatureHandler.py:28
python.Class_FeatureHandler.FeatureHandler.m_ConstituentTypes
m_ConstituentTypes
Definition: Class_FeatureHandler.py:120
python.Class_FeatureHandler.FeatureHandler.m_VarTypeName_HLV
m_VarTypeName_HLV
Definition: Class_FeatureHandler.py:91
python.Class_FeatureHandler.FeatureHandler.addTypeSpecificFeatures_JetMoment
def addTypeSpecificFeatures_JetMoment(self)
Definition: Class_FeatureHandler.py:325
python.Class_FeatureHandler.FeatureHandler.addToFeatures_AllTypes_AllEnergyVariants
def addToFeatures_AllTypes_AllEnergyVariants(self, theBaseName, theVarTypeName, theFeatureType, defaultValueOverride=0)
Definition: Class_FeatureHandler.py:76
python.Class_FeatureHandler.FeatureHandler.getFeatureNames
def getFeatureNames(self)
Definition: Class_FeatureHandler.py:7
python.Class_FeatureHandler.FeatureHandler.getFeatureTypes
def getFeatureTypes(self)
Definition: Class_FeatureHandler.py:14
python.Class_FeatureHandler.FeatureHandler.addSingleVariables
def addSingleVariables(self)
Definition: Class_FeatureHandler.py:164
python.Class_FeatureHandler.FeatureHandler.m_VarTypeName_Ratio
m_VarTypeName_Ratio
Definition: Class_FeatureHandler.py:88
python.Class_FeatureHandler.FeatureHandler.addToFeatures_AllTypes
def addToFeatures_AllTypes(self, theBaseName, theVarTypeName, theFeatureType, defaultValueOverride=0)
Definition: Class_FeatureHandler.py:57
python.Class_FeatureHandler.FeatureHandler.m_EnergyVariantsList
m_EnergyVariantsList
Definition: Class_FeatureHandler.py:126
python.Class_FeatureHandler.FeatureHandler.m_VarTypeName_Mean
m_VarTypeName_Mean
Definition: Class_FeatureHandler.py:89
python.Class_FeatureHandler.FeatureHandler.addTypeSpecificFeatures_Ratios
def addTypeSpecificFeatures_Ratios(self)
Definition: Class_FeatureHandler.py:264
python.Class_FeatureHandler.FeatureHandler.m_VarTypeName_DeltaR
m_VarTypeName_DeltaR
Definition: Class_FeatureHandler.py:93
python.Class_FeatureHandler.FeatureHandler.m_Feature_Names
m_Feature_Names
Definition: Class_FeatureHandler.py:131
python.Class_FeatureHandler.FeatureHandler.m_VarTypeName_JetMoment
m_VarTypeName_JetMoment
Definition: Class_FeatureHandler.py:94
python.Class_FeatureHandler.FeatureHandler.m_ConstituentTypeName_Pi0Neut
m_ConstituentTypeName_Pi0Neut
Definition: Class_FeatureHandler.py:118
python.Class_FeatureHandler.FeatureHandler.addToFeatures_FullName
def addToFeatures_FullName(self, completeFeatureName, theVarTypeName, theFeatureType, defaultValueOverride=0)
Definition: Class_FeatureHandler.py:43
python.Bindings.iterkeys
iterkeys
Definition: Control/AthenaPython/python/Bindings.py:813
python.Class_FeatureHandler.FeatureHandler.addFourMomentum
def addFourMomentum(self)
Definition: Class_FeatureHandler.py:199
python.Class_FeatureHandler.FeatureHandler.getFeatureDefaultValues
def getFeatureDefaultValues(self)
Definition: Class_FeatureHandler.py:21
python.Class_FeatureHandler.FeatureHandler.m_VarTypeName_StdDev
m_VarTypeName_StdDev
Definition: Class_FeatureHandler.py:90
plotBeamSpotVxVal.range
range
Definition: plotBeamSpotVxVal.py:194
python.Class_FeatureHandler.FeatureHandler.m_ConstituentTypeName_All
m_ConstituentTypeName_All
Definition: Class_FeatureHandler.py:115
python.Class_FeatureHandler.FeatureHandler.m_VarTypeName_Basic
m_VarTypeName_Basic
Definition: Class_FeatureHandler.py:96
python.Class_FeatureHandler.FeatureHandler.m_VarTypeName_PID
m_VarTypeName_PID
Definition: Class_FeatureHandler.py:97
print
void print(char *figname, TCanvas *c1)
Definition: TRTCalib_StrawStatusPlots.cxx:26
python.Class_FeatureHandler.FeatureHandler
Definition: Class_FeatureHandler.py:5
python.Class_FeatureHandler.FeatureHandler.m_Feature_Types
m_Feature_Types
Definition: Class_FeatureHandler.py:133
python.Class_FeatureHandler.FeatureHandler.addTypeSpecificFeatures_PID
def addTypeSpecificFeatures_PID(self)
Definition: Class_FeatureHandler.py:222
python.Class_FeatureHandler.FeatureHandler.addTypeSpecificFeatures_HLV
def addTypeSpecificFeatures_HLV(self)
Definition: Class_FeatureHandler.py:290
python.Class_FeatureHandler.FeatureHandler.m_DefaultValues
m_DefaultValues
Definition: Class_FeatureHandler.py:101
python.Class_FeatureHandler.FeatureHandler.__init__
def __init__(self)
Definition: Class_FeatureHandler.py:84
python.Class_FeatureHandler.FeatureHandler.addMultiplicities
def addMultiplicities(self)
Definition: Class_FeatureHandler.py:185
python.Class_FeatureHandler.FeatureHandler.m_VarTypeName_Shots
m_VarTypeName_Shots
Definition: Class_FeatureHandler.py:98
python.Class_FeatureHandler.FeatureHandler.m_VarTypeName_Angle
m_VarTypeName_Angle
Definition: Class_FeatureHandler.py:92
python.Class_FeatureHandler.FeatureHandler.m_Feature_Defaults
m_Feature_Defaults
Definition: Class_FeatureHandler.py:132
str
Definition: BTagTrackIpAccessor.cxx:11
python.Class_FeatureHandler.FeatureHandler.m_VarTypeName_Combined
m_VarTypeName_Combined
Definition: Class_FeatureHandler.py:95