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_DeltaR = "DeltaR"
93 self.m_VarTypeName_JetMoment = "JetMoment"
94 self.m_VarTypeName_Combined = "Combined"
95 self.m_VarTypeName_Basic = "Basic"
96 self.m_VarTypeName_PID = "PID"
97 self.m_VarTypeName_Shots = "Shots"
98
99 #setup the default values for the different variable types
101 self.m_DefaultValues[self.m_VarTypeName_Ratio] = -0.2
102 self.m_DefaultValues[self.m_VarTypeName_Mean] = -0.2
103 self.m_DefaultValues[self.m_VarTypeName_StdDev] = -0.2
104 self.m_DefaultValues[self.m_VarTypeName_HLV] = -4000.0
105 self.m_DefaultValues[self.m_VarTypeName_DeltaR] = -0.2
107 self.m_DefaultValues[self.m_VarTypeName_Combined] = -10.0
108 self.m_DefaultValues[self.m_VarTypeName_Basic] = -5.0
109 self.m_DefaultValues[self.m_VarTypeName_PID] = -9.0
110 self.m_DefaultValues[self.m_VarTypeName_Shots] = -2.0
111
112 #setup the constituent types
117
118 self.m_ConstituentTypes = []
119 #baseline
123
124 self.m_EnergyVariantsList = ["EtAllConsts"]
125 # ==============================================
126
127
128 #setup member variables to hold feature info
129 self.m_Feature_Names = {}
130 self.m_Feature_Defaults = {}
131 self.m_Feature_Types = {}
132
133 #fill member variables
134 self.addSingleVariables()
135 self.addMultiplicities()
143
144 #end init
145
146
147 def dump(self):
148 print("config_FeatureCalculator: Dumping features:")
149 for iFeature in sorted(self.m_Feature_Names.iterkeys()):
150 featName = self.m_Feature_Names[iFeature]
151 featType = self.m_Feature_Types[iFeature]
152 featDefault = self.m_Feature_Defaults[iFeature]
153 print("\t" + string.ljust(featName, 50) + " of type " + featType + " defaults to " + string.rjust(str(featDefault), 10) )
154 #print("\t" + featName + " of type " + featType + " defaults to " + str(featDefault) )
155 #end for over features
156 print("config_FeatureCalculator: Done dumping features")
157 #end dump
158
159
161 Variables = []
162 Variables += ["isPanTauCandidate"]
163 Variables += ["RecoMode"]
164 Variables += ["RecoMode_PanTau"]
165 Variables += ["BDTValue_1p0n_vs_1p1n"]
166 Variables += ["BDTValue_1p1n_vs_1pXn"]
167 Variables += ["BDTValue_3p0n_vs_3pXn"]
168 for iVar in Variables:
169 curDefVal = self.m_DefaultValues[self.m_VarTypeName_Basic]
170 if iVar == "isPanTauCandidate":
171 curDefVal = 0
172 if iVar == "RecoMode" or iVar == "RecoMode_PanTau":
173 curDefVal = -10
174 self.addToFeatures(iVar, self.m_VarTypeName_Basic, "F", curDefVal)
175 #end loop over variables
176 #end def addSingleVariables
177
178
180 Variables = self.m_ConstituentTypes
181
182 for iVar in Variables:
183 featName = "N" + iVar + "Consts"
184 self.addToFeatures(featName, self.m_VarTypeName_Basic, "F")
185 #end loop over variables
186
187 #add the inclusive one
188 self.addToFeatures("N" + self.m_ConstituentTypeName_All + "Consts", self.m_VarTypeName_Basic, "F")
189
190 #end def addMultiplicities
191
193 Variables = ["BDTValues"]
194
195 MaxNum = 4
196
197 for iVar in Variables:
198 for iNum in range(1, MaxNum):
199 featName = iVar + "_BDTSort_" + str(iNum)
200 self.addToFeatures_AllTypes(featName, self.m_VarTypeName_PID, "F")
201 #end loop over num
202 #end loop over variables
203 #end addTypeSpecificFeatures
204
205
207
208 Variables = []
209 Variables += ["NPhotonsInSeed"]
210 for iVar in Variables:
211 featName = iVar
212 curDefVal = self.m_DefaultValues[self.m_VarTypeName_Shots]
213
214 self.addToFeatures_FullName(self.m_ConstituentTypeName_Neutral + "_" + self.m_VarTypeName_Shots + "_" + featName, self.m_VarTypeName_Shots, "F", curDefVal)
215 self.addToFeatures_FullName(self.m_ConstituentTypeName_Pi0Neut + "_" + self.m_VarTypeName_Shots + "_" + featName, self.m_VarTypeName_Shots, "F", curDefVal)
216 #end loop over variables
217 #end addTypeSpecificFeatures_Shots
218
220
221 Variables_WithEnergyTypes = []
222 Variables_WithEnergyTypes += ["EtOver"]
223 Variables_WithEnergyTypes += ["1stBDTEtOver"]
224 for iVar in Variables_WithEnergyTypes:
226 #end loop over variables with energy types
227 #end addTypeSpecificFeatures_Ratios
228
230
231 Variables_WithEnergyTypes = []
232 Variables_WithEnergyTypes += ["Et_Wrt"]
233 for iVar in Variables_WithEnergyTypes:
235 #end addTypeSpecificFeatures_StdDevs
236
237
239 Variables = []
240 Variables += ["SumM"]
241 for iVar in Variables:
242 self.addToFeatures_AllTypes(iVar, self.m_VarTypeName_HLV, "F", -200.)
243
244 #end loop over variables
245 #end addTypeSpecificFeatures_HLV
246
248 Variables = []
249 Variables += ["EtDRxTotalEt"]
250 for iVar in Variables:
252 #end loop over variables
253 #end addTypeSpecificFeatures_JetMoment
254
256 Types = []
257 Types += ["Charged"]
258 Types += ["Neutral"]
259 Types += ["Pi0Neut"]
260
261 Variables = []
262 Variables += [ ["DeltaR1st", "To1st", ""] ]
263 for iType in Types:
264 for jType in Types:
265
266 #skip if types are equal
267 if iType == jType:
268 continue
269
270 for iVar in Variables:
271 featName = iVar[0] + iType + iVar[1] + jType + iVar[2]
272 #if iVar[2] != "-":
273 #featName = featName + iVar[2]
274 self.addToFeatures(featName, self.m_VarTypeName_Combined, "F")
275 #end loop over variables
276 #end loop over jType
277 #end loop over iType
278 #end addCombinedFeatures_TypeVsType
279
280#end class config_FeatureCalculator
281
282
283
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