2 from AnaAlgorithm.DualUseConfig
import isAthena
5 import JetRecConfig.JetAnalysisCommon
6 from AthenaCommon
import Logging
7 jcslog = Logging.logging.getLogger(
'JetCalibStepsConfig')
9 from JetToolHelpers.HelperConfig
import VarToolCfg, HistoInputCfg
10 from AthenaConfiguration.ComponentFactory
import CompFactory
11 from PathResolver
import PathResolver
14 """ Configuration of the Smearing step. """
19 if "HistoReader" in configDict:
20 if "HistoReaderMC" in configDict:
21 raise JetCalibConfigError(
"Both HistoReader and HistoReaderMC blocks included in YAML config")
22 if "HistoReaderData" in configDict:
23 raise JetCalibConfigError(
"Both HistoReader and HistoReaderData blocks included in YAML config")
26 histoReader = configDict.pop(
"HistoReader")
27 histNameMC = histoReader.pop(
"histNameMC")
28 histNameData = histoReader.pop(
"histNameData")
29 configDict[
"HistoReaderMC"] = dict(histoReader)
30 configDict[
"HistoReaderData"] = dict(histoReader)
31 configDict[
"HistoReaderMC"][
"histName"] = histNameMC
32 configDict[
"HistoReaderData"][
"histName"] = histNameData
37 histToolMC =
HistoInputCfg(flags,
"HistToolMC", **configDict[
"HistoReaderMC"])
38 histToolData =
HistoInputCfg(flags,
"HistToolData", **configDict[
"HistoReaderData"])
39 configDict[
"HistoReaderMC"] = histToolMC
40 configDict[
"HistoReaderData"] = histToolData
42 smearStep = CompFactory.SmearingCalibStep(
"SmearingCalibStep", **configDict)
48 configDict.setdefault(
'IsData',
not flags.Input.isMC)
50 return CompFactory.Pileup1DResidualCalibStep(
"PUResid", **configDict)
58 defaultHistTools = dict(
59 histTool_EM3 = [dict(varX =
"pt", varY =
"EM3", histName=f
"AntiKt4EMPFlow_EM3_interpolation_resp_eta_{j}", inputFile=defaultFileGSC)
for j
in range(35)],
60 histTool_CharFrac = [dict(varX =
"pt", varY =
"ChargedFraction", histName = f
"AntiKt4EMPFlow_chargedFraction_interpolation_resp_eta_{j}", inputFile=defaultFileGSC)
for j
in range(25)],
61 histTool_Tile0 = [dict(varX =
"pt", varY =
"Tile0", histName=f
"AntiKt4EMPFlow_Tile0_interpolation_resp_eta_{j}", inputFile=defaultFileGSC)
for j
in range(18)],
62 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)],
63 histTool_trackWIDTH=[dict(varX =
"pt", varY =
"trackWIDTH", histName=f
"AntiKt4EMPFlow_trackWIDTH_interpolation_resp_eta_{j}", inputFile=defaultFileGSC)
for j
in range(25)],
67 for key
in [
'histTool_EM3',
'histTool_CharFrac',
'histTool_Tile0',
'histTool_nTrk',
'histTool_trackWIDTH']:
70 if key
not in configDict:
71 toolArray = defaultHistTools[key]
75 elif isinstance(configDict[key],list):
76 toolArray = configDict[key]
77 for subDict
in toolArray:
78 subDict.setdefault(
'inputFile',defaultFileGSC)
83 baseDict = dict(configDict[key])
84 N_hist = baseDict.pop(
'N_hist')
85 histNameBase = baseDict.pop(
'histNameBase')
86 inputFile = baseDict.pop(
'inputFile', defaultFileGSC)
87 varX = baseDict.pop(
'varX',defaultHistTools[key][0][
'varX'])
88 varY = baseDict.pop(
'varY', defaultHistTools[key][0][
'varY'])
89 toolArray = [dict(varX = varX, varY = varY, histName=f
'{histNameBase}_{j}', inputFile = inputFile)
for j
in range(N_hist)]
92 configDict[key] = [
HistoInputCfg(flags, Tname=f
"{key.split('_')[1]}_{j}", **toolConfig)
for j, toolConfig
in enumerate(toolArray)]
94 GSCstep = CompFactory.GSCCalibStep(
"gsccalibstep", **configDict)
100 pVars = configDic.pop(
"ParametrizedVars")
102 jesstep = CompFactory.EtaMassJESCalibStep(
"EtaMassJESCalib",
103 VarToolE=
VarToolCfg(flags, var=pVars[
'varE']),
104 VarToolEta=
VarToolCfg(flags, var=pVars[
"varEta"]),
111 histEtaInterCalib = configDic.pop(
'histEtaInterCalib')
112 histAbsCalib = configDic.pop(
'histAbsCalib')
114 histoReaderEta_vec, histoReaderAbs_vec = [], []
116 for infile
in configDic.pop(
'fileInsitu'):
119 configDic[
'HistoReaderEtaInter'] = [
HistoInputCfg(flags,
"HistToolEtaInter"+
str(j), **etaDic)
for j, etaDic
in enumerate(histoReaderEta_vec)]
120 configDic[
'HistoReaderAbs'] = [
HistoInputCfg(flags,
"HistToolAbs"+
str(j), **absDic)
for j, absDic
in enumerate(histoReaderAbs_vec)]
122 configDic[
'vartool1'] =
VarToolCfg(flags, var=histEtaInterCalib[
'varX'], Tname=
"VarTool")
123 configDic[
'vartool2'] =
VarToolCfg(flags, var=histEtaInterCalib[
'varY'], Tname=
"VarTool")
124 configDic[
'isMC'] = flags.Input.isMC
126 insituStep = CompFactory.InSituCalibStep(
"insitucalibstep", **configDic)
134 Residual = puresidualStep,
138 Smear = smearingStep,
143 Returns a list of instantiated tools for each of the calibration steps.
144 The order of the steps is determined by the InScale and OutScale properties given in the config.
145 Tools are instantiated by calling functions declared in the calibStepDic dictionary.
150 for step
in configDict:
152 configDict.get(step).pop(
'prereqs',{})
154 if configDict.get(step).pop(
'noRun',
False):
155 jcslog.warning(f
'Expert option: Skipping calib step {step}')
159 if step==
"Insitu" and flags.Input.isMC
and not configDict.get(
"Insitu").
get(
"CalibrateMC",
False):
160 jcslog.info(
'Skipping Insitu for MC')
163 calibFunc = calibStepDic.get(step,
None)
164 if calibFunc
is None:
165 raise NotImplementedError(f
'Calibration step {step} is not found in calibStepDic')
167 calibConfig = configDict.get(step)
169 tool = calibFunc(flags, **calibConfig)
172 if tool.InScale ==
"JetConstitScaleMomentum":
179 ordered_step_names = []
181 def findNextSteps(startScale = "JetConstitScaleMomentum"):
182 ''' Recursively add tools to ordered_tools based on in/out scale '''
184 if toolDic[step].InScale == startScale:
185 ordered_tools.append(toolDic[step])
186 ordered_step_names.append(step)
187 findNextSteps(toolDic[step].OutScale)
193 if step
not in ordered_step_names:
194 raise JetCalibConfigError(f
'Could not place calib step {step} - have you set InScale and OutScale correctly?')
196 jcslog.info(f
'Ordered jet calib steps: {"->".join(ordered_step_names)}')
204 globalSettings = configDic.pop(
'Global',{})
206 calibTool = CompFactory.JetCalibTool(name, CalibSteps=
calibConfigToToolList(flags, **configDic), **globalSettings)
210 from yaml
import safe_load
213 configDic = safe_load(
open(path_configFile))
218 """ Exception raised for invalid jet calibration config """