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[
'applyPunchThrough']:
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 histoReaderEta_vec, histoReaderAbs_vec = [], []
139 for infile
in configDic.pop(
'fileInsitu'):
142 configDic[
'HistoReaderEtaInter'] = [HistoInputCfg(flags,
"HistToolEtaInter"+str(j), **etaDic)
for j, etaDic
in enumerate(histoReaderEta_vec)]
143 configDic[
'HistoReaderAbs'] = [HistoInputCfg(flags,
"HistToolAbs"+str(j), **absDic)
for j, absDic
in enumerate(histoReaderAbs_vec)]
145 configDic[
'vartool1'] = VarToolCfg(flags, var=histEtaInterCalib[
'varX'], Tname=
"VarTool")
146 configDic[
'vartool2'] = VarToolCfg(flags, var=histEtaInterCalib[
'varY'], Tname=
"VarTool")
147 configDic[
'isMC'] = flags.Input.isMC
149 insituStep = CompFactory.InSituCalibStep(
"insitucalibstep", **configDic)
167 Returns a list of instantiated tools for each of the calibration steps.
168 The order of the steps is determined by the InScale and OutScale properties given in the config.
169 Tools are instantiated by calling functions declared in the calibStepDic dictionary.
174 for step
in configDict:
176 configDict.get(step).pop(
'prereqs',{})
178 if configDict.get(step).pop(
'noRun',
False):
179 jcslog.warning(f
'Expert option: Skipping calib step {step}')
183 if step==
"Insitu" and flags.Input.isMC
and not configDict.get(
"Insitu").
get(
"CalibrateMC",
False):
184 jcslog.info(
'Skipping Insitu for MC')
187 calibFunc = calibStepDic.get(step,
None)
188 if calibFunc
is None:
189 raise NotImplementedError(f
'Calibration step {step} is not found in calibStepDic')
191 calibConfig = configDict.get(step)
193 tool = calibFunc(flags, **calibConfig)
196 if tool.InScale ==
"JetConstitScaleMomentum":
203 ordered_step_names = []
205 def findNextSteps(startScale = "JetConstitScaleMomentum"):
206 ''' Recursively add tools to ordered_tools based on in/out scale '''
208 if toolDic[step].InScale == startScale:
209 ordered_tools.append(toolDic[step])
210 ordered_step_names.append(step)
211 findNextSteps(toolDic[step].OutScale)
217 if step
not in ordered_step_names:
218 raise JetCalibConfigError(f
'Could not place calib step {step} - have you set InScale and OutScale correctly?')
220 jcslog.info(f
'Ordered jet calib steps: {"->".join(ordered_step_names)}')