14from JetToolHelpers.HelperConfig
import VarToolCfg, HistoInputCfg
19 """ Configuration of the Smearing step. """
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")
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
42 histToolMC = HistoInputCfg(flags,
"HistToolMC", **configDict[
"HistoReaderMC"])
43 histToolData = HistoInputCfg(flags,
"HistToolData", **configDict[
"HistoReaderData"])
44 configDict[
"HistoReaderMC"] = histToolMC
45 configDict[
"HistoReaderData"] = histToolData
47 smearStep = CompFactory.SmearingCalibStep(
"SmearingCalibStep", **configDict)
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)],
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')
79 if key
not in configDict:
80 toolArray = defaultHistTools[key]
84 elif isinstance(configDict[key],list):
85 toolArray = configDict[key]
86 for subDict
in toolArray:
87 subDict.setdefault(
'inputFile',defaultFileGSC)
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)]
101 configDict[key] = [HistoInputCfg(flags, Tname=f
"{key.split('_')[1]}_{j}", **toolConfig)
for j, toolConfig
in enumerate(toolArray)]
103 GSCstep = CompFactory.GSCCalibStep(
"gsccalibstep", **configDict)
134 histEtaInterCalib = configDic.pop(
'histEtaInterCalib')
135 histAbsCalib = configDic.pop(
'histAbsCalib')
137 histAbsJMSCalib = configDic.pop(
'JMS',
None)
139 histoReaderEta_vec, histoReaderAbs_vec = [], []
141 for infile
in configDic.pop(
'fileInsitu'):
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)]
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
152 insituSteps = [CompFactory.InSituCalibStep(
"insitucalibstep", **configDic)]
158 CompFactory.InSituJMSCalibStep(
"insitujmscalibstep",
159 CalibrateMC = configDic.get(
"CalibrateMC",
False),
160 isMC = flags.Input.isMC,
162 InScale =
"JetInsituScaleMomentum",
163 OutScale =
"JetInsituScaleMomentum",
164 HistoReaderAbsJMS = HistoInputCfg(flags,
"HistoToolAbsJMS", **histAbsJMSCalib),
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.
190 for step
in configDict:
192 configDict.get(step).pop(
'prereqs',{})
194 if configDict.get(step).pop(
'noRun',
False):
195 jcslog.warning(f
'Expert option: Skipping calib step {step}')
199 if step==
"Insitu" and flags.Input.isMC
and not configDict.get(
"Insitu").
get(
"CalibrateMC",
False):
200 jcslog.info(
'Skipping Insitu for MC')
203 calibFunc = calibStepDic.get(step,
None)
204 if calibFunc
is None:
205 raise NotImplementedError(f
'Calibration step {step} is not found in calibStepDic')
207 calibConfig = configDict.get(step)
210 toolList = calibFunc(flags, **calibConfig)
212 toolDic[step] = toolList
213 if toolList[0].InScale ==
"JetConstitScaleMomentum":
219 def findNextSteps(ordered_tools=[], ordered_step_names=[], startScale = "JetConstitScaleMomentum"):
220 ''' Recursively add tools to ordered_tools based on in/out scale '''
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)
227 return ordered_tools, ordered_step_names
229 ordered_tools, ordered_step_names = findNextSteps([], [])
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?')
236 jcslog.info(f
'Ordered jet calib steps: {"->".join(ordered_step_names)}')