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_Sum = "Sum"
89  self.m_VarTypeName_Ratio = "Ratio"
90  self.m_VarTypeName_Isolation = "Isolation"
91  self.m_VarTypeName_Num = "Num"
92  self.m_VarTypeName_Mean = "Mean"
93  self.m_VarTypeName_StdDev = "StdDev"
94  self.m_VarTypeName_HLV = "HLV"
95  self.m_VarTypeName_Angle = "Angle"
96  self.m_VarTypeName_DeltaR = "DeltaR"
97  self.m_VarTypeName_JetMoment = "JetMoment"
98  self.m_VarTypeName_Combined = "Combined"
99  self.m_VarTypeName_Basic = "Basic"
100  self.m_VarTypeName_PID = "PID"
101  self.m_VarTypeName_Shots = "Shots"
102 
103  #setup the default values for the different variable types
104  self.m_DefaultValues = {}
105  self.m_DefaultValues[self.m_VarTypeName_Sum] = -4000.0
106  self.m_DefaultValues[self.m_VarTypeName_Ratio] = -0.2
107  self.m_DefaultValues[self.m_VarTypeName_Isolation] = -0.2
108  self.m_DefaultValues[self.m_VarTypeName_Num] = -5.0
109  self.m_DefaultValues[self.m_VarTypeName_Mean] = -0.2
110  self.m_DefaultValues[self.m_VarTypeName_StdDev] = -0.2
111  self.m_DefaultValues[self.m_VarTypeName_HLV] = -4000.0
112  self.m_DefaultValues[self.m_VarTypeName_Angle] = -0.2
113  self.m_DefaultValues[self.m_VarTypeName_DeltaR] = -0.2
114  self.m_DefaultValues[self.m_VarTypeName_JetMoment] = -0.2
115  self.m_DefaultValues[self.m_VarTypeName_Combined] = -10.0
116  self.m_DefaultValues[self.m_VarTypeName_Basic] = -5.0
117  self.m_DefaultValues[self.m_VarTypeName_PID] = -9.0
118  self.m_DefaultValues[self.m_VarTypeName_Shots] = -2.0
119 
120  #setup the constituent types
125 
127  #baseline
131 
132  self.m_EnergyVariantsList = ["EtAllConsts"]
133  # ==============================================
134 
135 
136  #setup member variables to hold feature info
137  self.m_Feature_Names = {}
139  self.m_Feature_Types = {}
140 
141  #fill member variables
142  self.addSingleVariables()
143  self.addMultiplicities()
144  self.addFourMomentum()
153 
154  #end init
155 
156 
157  def dump(self):
158  print("config_FeatureCalculator: Dumping features:")
159  for iFeature in sorted(self.m_Feature_Names.iterkeys()):
160  featName = self.m_Feature_Names[iFeature]
161  featType = self.m_Feature_Types[iFeature]
162  featDefault = self.m_Feature_Defaults[iFeature]
163  print("\t" + string.ljust(featName, 50) + " of type " + featType + " defaults to " + string.rjust(str(featDefault), 10) )
164  #print("\t" + featName + " of type " + featType + " defaults to " + str(featDefault) )
165  #end for over features
166  print("config_FeatureCalculator: Done dumping features")
167  #end dump
168 
169 
171  Variables = []
172  Variables += ["isPanTauCandidate"]
173  Variables += ["RecoMode"]
174  Variables += ["RecoMode_PanTau"]
175  Variables += ["BDTValue_1p0n_vs_1p1n"]
176  Variables += ["BDTValue_1p1n_vs_1pXn"]
177  Variables += ["BDTValue_3p0n_vs_3pXn"]
178  Variables += ["SumCharge"]
179  Variables += ["AbsCharge"]
180  for iVar in Variables:
181  curDefVal = self.m_DefaultValues[self.m_VarTypeName_Basic]
182  if iVar == "isPanTauCandidate":
183  curDefVal = 0
184  if iVar == "RecoMode" or iVar == "RecoMode_PanTau":
185  curDefVal = -10
186  self.addToFeatures(iVar, self.m_VarTypeName_Basic, "F", curDefVal)
187  #end loop over variables
188  #end def addSingleVariables
189 
190 
191  def addMultiplicities(self):
192  Variables = self.m_ConstituentTypes
193 
194  for iVar in Variables:
195  featName = "N" + iVar + "Consts"
196  self.addToFeatures(featName, self.m_VarTypeName_Basic, "F")
197  #end loop over variables
198 
199  #add the inclusive one
200  self.addToFeatures("N" + self.m_ConstituentTypeName_All + "Consts", self.m_VarTypeName_Basic, "F")
201 
202  #end def addMultiplicities
203 
204 
205  def addFourMomentum(self):
206  Variables = []
207  Variables += ["pt"]
208  Variables += ["eta"]
209  Variables += ["phi"]
210  Variables += ["m"]
211 
212  Types = []
213  Types += ["ProtoMomentumCore"]
214 
215  for iVar in Variables:
216  for iType in Types:
217  curFeatName = iType + "_" + iVar
218  curDefVal = -4000.
219  if iVar == "eta" or iVar == "phi":
220  curDefVal = -9.
221  if iVar == "m":
222  curDefVal = -200.
223  self.addToFeatures(curFeatName, self.m_VarTypeName_Basic, "F", curDefVal)
224  #end loop types
225  #end loop vars
226  #end def addFourMomentum
227 
229  Variables = ["BDTValues"]
230 
231  MaxNum = 4
232 
233  for iVar in Variables:
234  for iNum in range(1, MaxNum):
235  featName = iVar + "_BDTSort_" + str(iNum)
236  self.addToFeatures_AllTypes(featName, self.m_VarTypeName_PID, "F")
237  #end loop over num
238  #end loop over variables
239  #end addTypeSpecificFeatures
240 
241 
243  Variables = []
244  Variables += ["nPhotons"]
245  Variables += ["EtSumShotsOverConstEt"]
246 
247  MaxNum = 4
248 
249  for iVar in Variables:
250  for iNum in range(1, MaxNum):
251  featName = iVar + "_BDTSort_" + str(iNum)
252  curDefVal = self.m_DefaultValues[self.m_VarTypeName_Shots]
253 
254  self.addToFeatures_FullName(self.m_ConstituentTypeName_Neutral + "_" + self.m_VarTypeName_Shots + "_" + featName, self.m_VarTypeName_Shots, "F", curDefVal)
255  self.addToFeatures_FullName(self.m_ConstituentTypeName_Pi0Neut + "_" + self.m_VarTypeName_Shots + "_" + featName, self.m_VarTypeName_Shots, "F", curDefVal)
256  #end loop over iNum
257  #end loop over variables
258 
259  Variables = []
260  Variables += ["NPhotonsInSeed"]
261  for iVar in Variables:
262  featName = iVar
263  curDefVal = self.m_DefaultValues[self.m_VarTypeName_Shots]
264 
265  self.addToFeatures_FullName(self.m_ConstituentTypeName_Neutral + "_" + self.m_VarTypeName_Shots + "_" + featName, self.m_VarTypeName_Shots, "F", curDefVal)
266  self.addToFeatures_FullName(self.m_ConstituentTypeName_Pi0Neut + "_" + self.m_VarTypeName_Shots + "_" + featName, self.m_VarTypeName_Shots, "F", curDefVal)
267  #end loop over variables
268  #end addTypeSpecificFeatures_Shots
269 
271 
272  Variables_WithEnergyTypes = []
273  Variables_WithEnergyTypes += ["EtOver"]
274  Variables_WithEnergyTypes += ["1stBDTEtOver"]
275  for iVar in Variables_WithEnergyTypes:
277  #end loop over variables with energy types
278 
279  Variables = []
280  Variables += ["1stBDTEtOverTypeEt"]
281  Variables += ["EFOsOverTotalEFOs"]
282  for iVar in Variables:
283  self.addToFeatures_AllTypes(iVar, self.m_VarTypeName_Ratio, "F")
284  #end loop over variables with energy types
285  #end addTypeSpecificFeatures_Ratios
286 
288 
289  Variables_WithEnergyTypes = []
290  Variables_WithEnergyTypes += ["Et_Wrt"]
291  for iVar in Variables_WithEnergyTypes:
293  #end addTypeSpecificFeatures_StdDevs
294 
295 
297  Variables = []
298  Variables += ["SumPt"]
299  Variables += ["SumEta"]
300  Variables += ["SumPhi"]
301  Variables += ["SumM"]
302  for iVar in Variables:
303  curDefVal = -4000.
304  if iVar == "SumEta" or iVar == "SumPhi":
305  curDefVal = -9.
306  if iVar == "SumM":
307  curDefVal = -200.
308  self.addToFeatures_AllTypes(iVar, self.m_VarTypeName_HLV, "F", curDefVal)
309 
310  #end loop over variables
311 
312  VariablesVec = []
313  VariablesVec += ["Constituents_pt"]
314  VariablesVec += ["Constituents_eta"]
315  VariablesVec += ["Constituents_phi"]
316  VariablesVec += ["Constituents_m"]
317 
318  for iVecVar in VariablesVec:
319  featName = "BDTSort_" + iVecVar
320  curDefVal = -4000.
321  if iVecVar == "Constituents_eta" or iVecVar == "Constituents_phi":
322  curDefVal = -9.
323  if iVecVar == "Constituents_m":
324  curDefVal = -200.
325  self.addToFeatures_AllTypes(featName, self.m_VarTypeName_HLV, "V", curDefVal)
326 
327 
328  #end loop over variables
329  #end addTypeSpecificFeatures_HLV
330 
332  Variables = []
333  Variables += ["EtDR"]
334  Variables += ["EtDRxTotalEt"]
335  for iVar in Variables:
336  self.addToFeatures_AllTypes(iVar, self.m_VarTypeName_JetMoment, "F")
337  #end loop over variables
338  #end addTypeSpecificFeatures_JetMoment
339 
341  Types = []
342  Types += ["Charged"]
343  Types += ["Neutral"]
344  Types += ["Pi0Neut"]
345 
346  Variables = []
347  Variables += [ ["Log1st", "EtOver", "Et"] ]
348  Variables += [ ["Log", "EtOver", "Et"] ]
349  Variables += [ ["Angle", "To", ""] ]
350  Variables += [ ["DeltaR1st", "To1st", ""] ]
351  Variables += [ ["Angle1st", "To1st", ""] ]
352  for iType in Types:
353  for jType in Types:
354 
355  #skip if types are equal
356  if iType == jType:
357  continue
358 
359  for iVar in Variables:
360  featName = iVar[0] + iType + iVar[1] + jType + iVar[2]
361  #if iVar[2] != "-":
362  #featName = featName + iVar[2]
363  self.addToFeatures(featName, self.m_VarTypeName_Combined, "F")
364  #end loop over variables
365  #end loop over jType
366  #end loop over iType
367  #end addCombinedFeatures_TypeVsType
368 
369 
371  iTypes = []
372  iTypes += ["Charged"]
373 
374  jTypes = []
375  jTypes += ["Pi0Neut"]
376  jTypes += ["Neutral"]
377 
378  Variables_WithEnergyTypes = []
379  Variables_WithEnergyTypes += [ ["Mean", "Et_Wrt"] ]
380 
381  Variables = []
382  Variables += [ ["InvMass", ""] ]
383  for iType in iTypes:
384  for jType in jTypes:
385 
386  for iVar in Variables:
387  featName = iVar[0] + iType + jType + iVar[1]
388  self.addToFeatures(featName, self.m_VarTypeName_Combined, "F")
389  #end loop over variables
390 
391  for iVar in Variables_WithEnergyTypes:
392  featName = iVar[0] + iType + jType + iVar[1]
393  for iEnergyType in self.m_EnergyVariantsList:
394  featNameWithEnergy = featName + iEnergyType
395  self.addToFeatures(featNameWithEnergy, self.m_VarTypeName_Combined, "F")
396  #end loop over variables for energy types
397 
398  #end loop over jTypes
399  #end loop over iTypes
400  #end addCombinedFeatures_SelectedTypes
401 
402 #end class config_FeatureCalculator
403 
404 
405 
python.Class_FeatureHandler.FeatureHandler.m_ConstituentTypeName_Neutral
m_ConstituentTypeName_Neutral
Definition: Class_FeatureHandler.py:123
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:242
python.Class_FeatureHandler.FeatureHandler.addCombinedFeatures_SelectedTypes
def addCombinedFeatures_SelectedTypes(self)
Definition: Class_FeatureHandler.py:370
python.Class_FeatureHandler.FeatureHandler.addTypeSpecificFeatures_StdDevs
def addTypeSpecificFeatures_StdDevs(self)
Definition: Class_FeatureHandler.py:287
python.Class_FeatureHandler.FeatureHandler.m_ConstituentTypeName_Charged
m_ConstituentTypeName_Charged
Definition: Class_FeatureHandler.py:122
python.Class_FeatureHandler.FeatureHandler.addCombinedFeatures_TypeVsType
def addCombinedFeatures_TypeVsType(self)
Definition: Class_FeatureHandler.py:340
python.Class_FeatureHandler.FeatureHandler.dump
def dump(self)
Definition: Class_FeatureHandler.py:157
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:126
python.Class_FeatureHandler.FeatureHandler.m_VarTypeName_HLV
m_VarTypeName_HLV
Definition: Class_FeatureHandler.py:94
python.Class_FeatureHandler.FeatureHandler.addTypeSpecificFeatures_JetMoment
def addTypeSpecificFeatures_JetMoment(self)
Definition: Class_FeatureHandler.py:331
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:170
python.Class_FeatureHandler.FeatureHandler.m_VarTypeName_Ratio
m_VarTypeName_Ratio
Definition: Class_FeatureHandler.py:89
python.Class_FeatureHandler.FeatureHandler.m_VarTypeName_Num
m_VarTypeName_Num
Definition: Class_FeatureHandler.py:91
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:132
python.Class_FeatureHandler.FeatureHandler.m_VarTypeName_Mean
m_VarTypeName_Mean
Definition: Class_FeatureHandler.py:92
python.Class_FeatureHandler.FeatureHandler.addTypeSpecificFeatures_Ratios
def addTypeSpecificFeatures_Ratios(self)
Definition: Class_FeatureHandler.py:270
python.Class_FeatureHandler.FeatureHandler.m_VarTypeName_DeltaR
m_VarTypeName_DeltaR
Definition: Class_FeatureHandler.py:96
python.Class_FeatureHandler.FeatureHandler.m_Feature_Names
m_Feature_Names
Definition: Class_FeatureHandler.py:137
python.Class_FeatureHandler.FeatureHandler.m_VarTypeName_Sum
m_VarTypeName_Sum
Definition: Class_FeatureHandler.py:88
python.Class_FeatureHandler.FeatureHandler.m_VarTypeName_JetMoment
m_VarTypeName_JetMoment
Definition: Class_FeatureHandler.py:97
python.Class_FeatureHandler.FeatureHandler.m_ConstituentTypeName_Pi0Neut
m_ConstituentTypeName_Pi0Neut
Definition: Class_FeatureHandler.py:124
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:205
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:93
plotBeamSpotVxVal.range
range
Definition: plotBeamSpotVxVal.py:194
python.Class_FeatureHandler.FeatureHandler.m_ConstituentTypeName_All
m_ConstituentTypeName_All
Definition: Class_FeatureHandler.py:121
python.Class_FeatureHandler.FeatureHandler.m_VarTypeName_Basic
m_VarTypeName_Basic
Definition: Class_FeatureHandler.py:99
python.Class_FeatureHandler.FeatureHandler.m_VarTypeName_PID
m_VarTypeName_PID
Definition: Class_FeatureHandler.py:100
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:139
python.Class_FeatureHandler.FeatureHandler.addTypeSpecificFeatures_PID
def addTypeSpecificFeatures_PID(self)
Definition: Class_FeatureHandler.py:228
python.Class_FeatureHandler.FeatureHandler.addTypeSpecificFeatures_HLV
def addTypeSpecificFeatures_HLV(self)
Definition: Class_FeatureHandler.py:296
python.Class_FeatureHandler.FeatureHandler.m_DefaultValues
m_DefaultValues
Definition: Class_FeatureHandler.py:104
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:191
python.Class_FeatureHandler.FeatureHandler.m_VarTypeName_Shots
m_VarTypeName_Shots
Definition: Class_FeatureHandler.py:101
python.Class_FeatureHandler.FeatureHandler.m_VarTypeName_Angle
m_VarTypeName_Angle
Definition: Class_FeatureHandler.py:95
python.Class_FeatureHandler.FeatureHandler.m_Feature_Defaults
m_Feature_Defaults
Definition: Class_FeatureHandler.py:138
str
Definition: BTagTrackIpAccessor.cxx:11
python.Class_FeatureHandler.FeatureHandler.m_VarTypeName_Isolation
m_VarTypeName_Isolation
Definition: Class_FeatureHandler.py:90
python.Class_FeatureHandler.FeatureHandler.m_VarTypeName_Combined
m_VarTypeName_Combined
Definition: Class_FeatureHandler.py:98