ATLAS Offline Software
Loading...
Searching...
No Matches
Class_FeatureHandler.py
Go to the documentation of this file.
1# Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
2
3import 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
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
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
120 self.m_ConstituentTypes = []
121 #baseline
125
126 self.m_EnergyVariantsList = ["EtAllConsts"]
127 # ==============================================
128
129
130 #setup member variables to hold feature info
131 self.m_Feature_Names = {}
132 self.m_Feature_Defaults = {}
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
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
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:
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
void print(char *figname, TCanvas *c1)
addToFeatures_FullName(self, completeFeatureName, theVarTypeName, theFeatureType, defaultValueOverride=0)
addToFeatures(self, theBaseName, theVarTypeName, theFeatureType, defaultValueOverride=0)
addToFeatures_AllTypes_AllEnergyVariants(self, theBaseName, theVarTypeName, theFeatureType, defaultValueOverride=0)
addToFeatures_AllTypes(self, theBaseName, theVarTypeName, theFeatureType, defaultValueOverride=0)
-event-from-file