2 from AthenaCommon
import Logging
3 jcslog = Logging.logging.getLogger(
'JetCalibStepsConfig')
5 from JetToolHelpers.HelperConfig
import VarToolCfg, HistoInputCfg
6 from AthenaConfiguration.ComponentFactory
import CompFactory
7 from PathResolver
import PathResolver
10 """ Configuration of the Smearing step. """
15 if "HistoReader" in configDict:
16 if "HistoReaderMC" in configDict:
17 raise JetCalibConfigError(
"Both HistoReader and HistoReaderMC blocks included in YAML config")
18 if "HistoReaderData" in configDict:
19 raise JetCalibConfigError(
"Both HistoReader and HistoReaderData blocks included in YAML config")
22 histoReader = configDict.pop(
"HistoReader")
23 histNameMC = histoReader.pop(
"histNameMC")
24 histNameData = histoReader.pop(
"histNameData")
25 configDict[
"HistoReaderMC"] = dict(histoReader)
26 configDict[
"HistoReaderData"] = dict(histoReader)
27 configDict[
"HistoReaderMC"][
"histName"] = histNameMC
28 configDict[
"HistoReaderData"][
"histName"] = histNameData
33 histToolMC =
HistoInputCfg(flags,
"HistToolMC", **configDict[
"HistoReaderMC"])
34 histToolData =
HistoInputCfg(flags,
"HistToolData", **configDict[
"HistoReaderData"])
35 configDict[
"HistoReaderMC"] = histToolMC
36 configDict[
"HistoReaderData"] = histToolData
38 smearStep = CompFactory.SmearingCalibStep(
"SmearingCalibStep", **configDict)
44 configDict.setdefault(
'IsData',
not flags.Input.isMC)
46 return CompFactory.Pileup1DResidualCalibStep(
"PUResid", **configDict)
54 defaultHistTools = dict(
55 histTool_EM3 = [dict(varX =
"pt", varY =
"EM3", histName=f
"AntiKt4EMPFlow_EM3_interpolation_resp_eta_{j}", inputFile=defaultFileGSC)
for j
in range(35)],
56 histTool_CharFrac = [dict(varX =
"pt", varY =
"ChargedFraction", histName = f
"AntiKt4EMPFlow_chargedFraction_interpolation_resp_eta_{j}", inputFile=defaultFileGSC)
for j
in range(25)],
57 histTool_Tile0 = [dict(varX =
"pt", varY =
"Tile0", histName=f
"AntiKt4EMPFlow_Tile0_interpolation_resp_eta_{j}", inputFile=defaultFileGSC)
for j
in range(18)],
58 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)],
59 histTool_trackWIDTH=[dict(varX =
"pt", varY =
"trackWIDTH", histName=f
"AntiKt4EMPFlow_trackWIDTH_interpolation_resp_eta_{j}", inputFile=defaultFileGSC)
for j
in range(25)],
63 for key
in [
'histTool_EM3',
'histTool_CharFrac',
'histTool_Tile0',
'histTool_nTrk',
'histTool_trackWIDTH']:
66 if key
not in configDict:
67 toolArray = defaultHistTools[key]
71 elif isinstance(configDict[key],list):
72 toolArray = configDict[key]
73 for subDict
in toolArray:
74 subDict.setdefault(
'inputFile',defaultFileGSC)
79 baseDict = dict(configDict[key])
80 N_hist = baseDict.pop(
'N_hist')
81 histNameBase = baseDict.pop(
'histNameBase')
82 inputFile = baseDict.pop(
'inputFile', defaultFileGSC)
83 varX = baseDict.pop(
'varX',defaultHistTools[key][0][
'varX'])
84 varY = baseDict.pop(
'varY', defaultHistTools[key][0][
'varY'])
85 toolArray = [dict(varX = varX, varY = varY, histName=f
'{histNameBase}_{j}', inputFile = inputFile)
for j
in range(N_hist)]
88 configDict[key] = [
HistoInputCfg(flags, Tname=f
"{key.split('_')[1]}_{j}", **toolConfig)
for j, toolConfig
in enumerate(toolArray)]
90 GSCstep = CompFactory.GSCCalibStep(
"gsccalibstep", **configDict)
96 pVars = configDic.pop(
"ParametrizedVars")
98 jesstep = CompFactory.EtaMassJESCalibStep(
"EtaMassJESCalib",
99 VarToolE=
VarToolCfg(flags, var=pVars[
'varE']),
100 VarToolEta=
VarToolCfg(flags, var=pVars[
"varEta"]),
107 histEtaInterCalib = configDic.pop(
'histEtaInterCalib')
108 histAbsCalib = configDic.pop(
'histAbsCalib')
110 histoReaderEta_vec, histoReaderAbs_vec = [], []
112 for infile
in configDic.pop(
'fileInsitu'):
115 configDic[
'HistoReaderEtaInter'] = [
HistoInputCfg(flags,
"HistToolEtaInter"+
str(j), **etaDic)
for j, etaDic
in enumerate(histoReaderEta_vec)]
116 configDic[
'HistoReaderAbs'] = [
HistoInputCfg(flags,
"HistToolAbs"+
str(j), **absDic)
for j, absDic
in enumerate(histoReaderAbs_vec)]
118 configDic[
'vartool1'] =
VarToolCfg(flags, var=histEtaInterCalib[
'varX'], Tname=
"VarTool")
119 configDic[
'vartool2'] =
VarToolCfg(flags, var=histEtaInterCalib[
'varY'], Tname=
"VarTool")
120 configDic[
'isMC'] = flags.Input.isMC
122 insituStep = CompFactory.InSituCalibStep(
"insitucalibstep", **configDic)
130 Residual = puresidualStep,
134 Smear = smearingStep,
139 Returns a list of instantiated tools for each of the calibration steps.
140 The order of the steps is determined by the InScale and OutScale properties given in the config.
141 Tools are instantiated by calling functions declared in the calibStepDic dictionary.
146 for step
in configDict:
148 configDict.get(step).pop(
'prereqs',{})
150 if configDict.get(step).pop(
'noRun',
False):
151 jcslog.warning(f
'Expert option: Skipping calib step {step}')
155 if step==
"Insitu" and flags.Input.isMC
and not configDict.get(
"Insitu").
get(
"CalibrateMC",
False):
156 jcslog.info(
'Skipping Insitu for MC')
159 calibFunc = calibStepDic.get(step,
None)
160 if calibFunc
is None:
161 raise NotImplementedError(f
'Calibration step {step} is not found in calibStepDic')
163 calibConfig = configDict.get(step)
165 tool = calibFunc(flags, **calibConfig)
168 if tool.InScale ==
"JetConstitScaleMomentum":
175 ordered_step_names = []
177 def findNextSteps(startScale = "JetConstitScaleMomentum"):
178 ''' Recursively add tools to ordered_tools based on in/out scale '''
180 if toolDic[step].InScale == startScale:
181 ordered_tools.append(toolDic[step])
182 ordered_step_names.append(step)
183 findNextSteps(toolDic[step].OutScale)
189 if step
not in ordered_step_names:
190 raise JetCalibConfigError(f
'Could not place calib step {step} - have you set InScale and OutScale correctly?')
192 jcslog.info(f
'Ordered jet calib steps: {"->".join(ordered_step_names)}')
200 globalSettings = configDic.pop(
'Global',{})
202 calibTool = CompFactory.JetCalibTool(name, CalibSteps=
calibConfigToToolList(flags, **configDic), **globalSettings)
206 from yaml
import safe_load
209 configDic = safe_load(
open(path_configFile))
214 """ Exception raised for invalid jet calibration config """