ATLAS Offline Software
Loading...
Searching...
No Matches
JetCalibStepsConfig Namespace Reference

Classes

class  JetCalibConfigError

Functions

 smearingStep (flags, **configDict)
 puresidualStep (flags, **configDict)
 gscStep (flags, **configDict)
 etajesStep (flags, **configDic)
 jmsStep (flags, **configDic)
 insituStep (flags, **configDic)
 calibConfigToToolList (flags, **configDict)
 calibToolFromConfigFile (flags, configFile, name="jetcalib")
 load_yaml_cfg (configFile)

Variables

 jcslog = Logging.logging.getLogger('JetCalibStepsConfig')
 calibStepDic

Function Documentation

◆ calibConfigToToolList()

JetCalibStepsConfig.calibConfigToToolList ( flags,
** configDict )
Returns a list of instantiated tools for each of the calibration steps. 
The order of the steps is determined by the InScale and OutScale properties given in the config.
Tools are instantiated by calling functions declared in the calibStepDic dictionary.

Definition at line 181 of file JetCalibStepsConfig.py.

181def calibConfigToToolList(flags, **configDict):
182 """
183 Returns a list of instantiated tools for each of the calibration steps.
184 The order of the steps is determined by the InScale and OutScale properties given in the config.
185 Tools are instantiated by calling functions declared in the calibStepDic dictionary.
186 """
187
188 toolDic = {}
189 foundCS = False # check at least one of the steps starts from constituent scale
190 for step in configDict:
191
192 configDict.get(step).pop('prereqs',{}) # removes the 'prereqs' entry not refined in steps
193 # expert option to skip a step
194 if configDict.get(step).pop('noRun',False):
195 jcslog.warning(f'Expert option: Skipping calib step {step}')
196 continue
197
198 # Skip Insitu for MC
199 if step=="Insitu" and flags.Input.isMC and not configDict.get("Insitu").get("CalibrateMC",False):
200 jcslog.info('Skipping Insitu for MC')
201 continue
202
203 calibFunc = calibStepDic.get(step,None)
204 if calibFunc is None:
205 raise NotImplementedError(f'Calibration step {step} is not found in calibStepDic')
206
207 calibConfig = configDict.get(step)
208
209 # each func returns a list (to allow one YAML block to configure multiple steps run in order)
210 toolList = calibFunc(flags, **calibConfig)
211
212 toolDic[step] = toolList
213 if toolList[0].InScale == "JetConstitScaleMomentum":
214 foundCS = True
215
216 if not foundCS:
217 raise JetCalibConfigError('At least one step must have InScale = JetConstitScaleMomentum')
218
219 def findNextSteps(ordered_tools=[], ordered_step_names=[], startScale = "JetConstitScaleMomentum"):
220 ''' Recursively add tools to ordered_tools based on in/out scale '''
221 for step in toolDic:
222 if toolDic[step][0].InScale == startScale:
223 ordered_tools += toolDic[step]
224 ordered_step_names.append(step)
225 ordered_tools, ordered_step_names = findNextSteps(ordered_tools, ordered_step_names, toolDic[step][-1].OutScale)
226
227 return ordered_tools, ordered_step_names
228
229 ordered_tools, ordered_step_names = findNextSteps([], [])
230
231 # Check we've got all the steps
232 for step in toolDic:
233 if step not in ordered_step_names:
234 raise JetCalibConfigError(f'Could not place calib step {step} - have you set InScale and OutScale correctly?')
235
236 jcslog.info(f'Ordered jet calib steps: {"->".join(ordered_step_names)}')
237
238 return ordered_tools
239
T * get(TKey *tobj)
get a TObject* from a TKey* (why can't a TObject be a TKey?)
Definition hcg.cxx:130

◆ calibToolFromConfigFile()

JetCalibStepsConfig.calibToolFromConfigFile ( flags,
configFile,
name = "jetcalib" )

Definition at line 240 of file JetCalibStepsConfig.py.

240def calibToolFromConfigFile(flags, configFile, name = "jetcalib"):
241
242 configDic = load_yaml_cfg(configFile)
243
244 globalSettings = configDic.pop('Global',{})
245
246 calibTool = CompFactory.JetCalibTool(name, CalibSteps=calibConfigToToolList(flags, **configDic), **globalSettings)
247 return calibTool
248

◆ etajesStep()

JetCalibStepsConfig.etajesStep ( flags,
** configDic )

Definition at line 107 of file JetCalibStepsConfig.py.

107def etajesStep(flags, **configDic):
108
109 pVars = configDic.pop("ParametrizedVars")
110
111 jesstep = CompFactory.EtaJESCalibStep("EtaJESCalib",
112 VarToolE= VarToolCfg(flags, var=pVars['varE']),
113 VarToolEta= VarToolCfg(flags, var=pVars["varEta"]),
114 **configDic
115 )
116 return [jesstep]
117

◆ gscStep()

JetCalibStepsConfig.gscStep ( flags,
** configDict )

Definition at line 58 of file JetCalibStepsConfig.py.

58def gscStep(flags, **configDict):
59
60 defaultFileGSC = PathResolver.FindCalibFile(configDict.pop('fileGSC'))
61
62 # These HistoInput2D defaults can't be set in the C++, so are set here:
63 defaultHistTools = dict(
64 histTool_EM3 = [dict(varX = "pt", varY = "EM3", histName=f"AntiKt4EMPFlow_EM3_interpolation_resp_eta_{j}", inputFile=defaultFileGSC) for j in range(35)],
65 histTool_CharFrac = [dict(varX = "pt", varY = "ChargedFraction", histName = f"AntiKt4EMPFlow_chargedFraction_interpolation_resp_eta_{j}", inputFile=defaultFileGSC) for j in range(25)],
66 histTool_Tile0 = [dict(varX = "pt", varY = "Tile0", histName=f"AntiKt4EMPFlow_Tile0_interpolation_resp_eta_{j}", inputFile=defaultFileGSC) for j in range(18)],
67 histTool_nTrk=[dict(varX = "pt", varY = dict(Name="nTrk", Type="int",), histName=f"AntiKt4EMPFlow_nTrk_interpolation_resp_eta_{j}", inputFile=defaultFileGSC) for j in range(25)],
68 histTool_trackWIDTH=[dict(varX = "pt", varY = "trackWIDTH", histName=f"AntiKt4EMPFlow_trackWIDTH_interpolation_resp_eta_{j}", inputFile=defaultFileGSC) for j in range(25)],
69 histTool_PunchThrough=[dict(varX = "e", varY = dict(Name="Nsegments", Type="int",), histName=f"AntiKt4EMPFlow_PunchThrough_interpolation_resp_eta_{j}", inputFile=defaultFileGSC) for j in range(2)],
70 )
71
72 gsc_steps = ['histTool_EM3', 'histTool_CharFrac', 'histTool_Tile0', 'histTool_nTrk', 'histTool_trackWIDTH']
73 if configDict.get('applyPunchThrough',False):
74 gsc_steps.append('histTool_PunchThrough')
75
76 # Build the hist tools
77 for key in gsc_steps:
78 # Use defaultHistTools by default
79 if key not in configDict:
80 toolArray = defaultHistTools[key]
81
82 # In this case the full list of sub-tools has been specified in the YAML
83 # and the defaultDict will be fully overwritten (ie. all parameters must be specified)
84 elif isinstance(configDict[key],list):
85 toolArray = configDict[key]
86 for subDict in toolArray:
87 subDict.setdefault('inputFile',defaultFileGSC)
88
89 # Functionality to build the arrays of histogram reader from a shorter block in the YAML file
90 # Fall back on defaultHistTools for defaults
91 else:
92 baseDict = dict(configDict[key])
93 N_hist = baseDict.pop('N_hist')
94 histNameBase = baseDict.pop('histNameBase')
95 inputFile = baseDict.pop('inputFile', defaultFileGSC)
96 varX = baseDict.pop('varX',defaultHistTools[key][0]['varX'])
97 varY = baseDict.pop('varY', defaultHistTools[key][0]['varY'])
98 toolArray = [dict(varX = varX, varY = varY, histName=f'{histNameBase}_{j}', inputFile = inputFile) for j in range(N_hist)]
99
100 # Convert array of properties to HistoInput tools
101 configDict[key] = [HistoInputCfg(flags, Tname=f"{key.split('_')[1]}_{j}", **toolConfig) for j, toolConfig in enumerate(toolArray)]
102
103 GSCstep = CompFactory.GSCCalibStep("gsccalibstep", **configDict)
104
105 return [GSCstep]
106
static std::string FindCalibFile(const std::string &logical_file_name)

◆ insituStep()

JetCalibStepsConfig.insituStep ( flags,
** configDic )

Definition at line 132 of file JetCalibStepsConfig.py.

132def insituStep(flags, **configDic):
133
134 histEtaInterCalib = configDic.pop('histEtaInterCalib')
135 histAbsCalib = configDic.pop('histAbsCalib')
136
137 histAbsJMSCalib = configDic.pop('JMS',None)
138
139 histoReaderEta_vec, histoReaderAbs_vec = [], []
140
141 for infile in configDic.pop('fileInsitu'):
142 histoReaderEta_vec.append(dict(inputFile = PathResolver.FindCalibFile(infile), **histEtaInterCalib))
143 histoReaderAbs_vec.append(dict(inputFile = PathResolver.FindCalibFile(infile), **histAbsCalib))
144
145 configDic['HistoReaderEtaInter'] = [HistoInputCfg(flags, "HistToolEtaInter"+str(j), **etaDic) for j, etaDic in enumerate(histoReaderEta_vec)]
146 configDic['HistoReaderAbs'] = [HistoInputCfg(flags, "HistToolAbs"+str(j), **absDic) for j, absDic in enumerate(histoReaderAbs_vec)]
147
148 configDic['vartool1'] = VarToolCfg(flags, var=histEtaInterCalib['varX'], Tname="VarTool")
149 configDic['vartool2'] = VarToolCfg(flags, var=histEtaInterCalib['varY'], Tname="VarTool")
150 configDic['isMC'] = flags.Input.isMC
151
152 insituSteps = [CompFactory.InSituCalibStep("insitucalibstep", **configDic)]
153
154 # JMS
155 if histAbsJMSCalib:
156 histAbsJMSCalib['inputFile'] = PathResolver.FindCalibFile(histAbsJMSCalib['inputFile'])
157 insituSteps.append(
158 CompFactory.InSituJMSCalibStep("insitujmscalibstep",
159 CalibrateMC = configDic.get("CalibrateMC",False),
160 isMC = flags.Input.isMC,
161 # modifying insitu scale rather than defining a new scale
162 InScale = "JetInsituScaleMomentum",
163 OutScale = "JetInsituScaleMomentum",
164 HistoReaderAbsJMS = HistoInputCfg(flags, "HistoToolAbsJMS", **histAbsJMSCalib),
165 ))
166
167 return insituSteps
168

◆ jmsStep()

JetCalibStepsConfig.jmsStep ( flags,
** configDic )

Definition at line 118 of file JetCalibStepsConfig.py.

118def jmsStep(flags, **configDic):
119
120 histoParams = configDic.pop('histoParams')
121 histoParams['inputFile'] = PathResolver.FindCalibFile(configDic.pop('HistoFile'))
122
123 configDic["histoReaderJMS"] = HistoInputCfg(flags, "HistToolJMS", **histoParams)
124 configDic['varToolX'] = VarToolCfg(flags, var=histoParams['varX'], Tname="VarToolX_JMS")
125 configDic['varToolZ'] = VarToolCfg(flags, var=histoParams['varZ'], Tname="VarToolZ_JMS")
126
127 jmsstep = CompFactory.JMSCalibStep("JMSCalib",
128 **configDic
129 )
130 return [jmsstep]
131

◆ load_yaml_cfg()

JetCalibStepsConfig.load_yaml_cfg ( configFile)

Definition at line 249 of file JetCalibStepsConfig.py.

249def load_yaml_cfg(configFile):
250 from yaml import safe_load
251
252 path_configFile = PathResolver.FindCalibFile(configFile)
253 configDic = safe_load(open(path_configFile))
254 return configDic
255
256

◆ puresidualStep()

JetCalibStepsConfig.puresidualStep ( flags,
** configDict )

Definition at line 51 of file JetCalibStepsConfig.py.

51def puresidualStep(flags, **configDict):
52
53 configDict.setdefault('IsData', not flags.Input.isMC)
54 PU_step = CompFactory.Pileup1DResidualCalibStep("PUResid", **configDict)
55 return [PU_step]
56
57

◆ smearingStep()

JetCalibStepsConfig.smearingStep ( flags,
** configDict )
Configuration of the Smearing step. 

Definition at line 18 of file JetCalibStepsConfig.py.

18def smearingStep(flags, **configDict):
19 """ Configuration of the Smearing step. """
20
21 # HistoReaderMC and HistoReaderData can be specified simultaneously using a single "HistoReader" YAML block.
22 # This should contain the common configuration for both and histNameMC/histNameData entries for the histogram names.
23 # This cannot be used simultaneously with a HistoReaderMC or HistoReaderData block
24 if "HistoReader" in configDict:
25 if "HistoReaderMC" in configDict:
26 raise JetCalibConfigError("Both HistoReader and HistoReaderMC blocks included in YAML config")
27 if "HistoReaderData" in configDict:
28 raise JetCalibConfigError("Both HistoReader and HistoReaderData blocks included in YAML config")
29
30 # Build the HistoReaderMC and HistoReaderData blocks from the HistoReader block
31 histoReader = configDict.pop("HistoReader")
32 histNameMC = histoReader.pop("histNameMC")
33 histNameData = histoReader.pop("histNameData")
34 configDict["HistoReaderMC"] = dict(histoReader)
35 configDict["HistoReaderData"] = dict(histoReader)
36 configDict["HistoReaderMC"]["histName"] = histNameMC
37 configDict["HistoReaderData"]["histName"] = histNameData
38
39 configDict["HistoReaderMC"]["inputFile"] = PathResolver.FindCalibFile(configDict["HistoReaderMC"]["inputFile"])
40 configDict["HistoReaderData"]["inputFile"] = PathResolver.FindCalibFile(configDict["HistoReaderData"]["inputFile"])
41
42 histToolMC = HistoInputCfg(flags, "HistToolMC", **configDict["HistoReaderMC"])
43 histToolData = HistoInputCfg(flags, "HistToolData", **configDict["HistoReaderData"])
44 configDict["HistoReaderMC"] = histToolMC
45 configDict["HistoReaderData"] = histToolData
46
47 smearStep = CompFactory.SmearingCalibStep("SmearingCalibStep", **configDict)
48
49 return [smearStep]
50

Variable Documentation

◆ calibStepDic

JetCalibStepsConfig.calibStepDic
Initial value:
1= dict(
2 JetArea = None,
3 Residual = puresidualStep,
4 EtaJES = etajesStep,
5 JMS = jmsStep,
6 GSC = gscStep,
7 Insitu = insituStep,
8 Smear = smearingStep,
9)

Definition at line 171 of file JetCalibStepsConfig.py.

◆ jcslog

JetCalibStepsConfig.jcslog = Logging.logging.getLogger('JetCalibStepsConfig')

Definition at line 12 of file JetCalibStepsConfig.py.