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

Classes

class  JetCalibConfigError

Functions

 smearingStep (flags, **configDict)
 puresidualStep (flags, **configDict)
 newpuresidualStep (flags, **configDict)
 gscStep (flags, **configDict)
 etajesStep (flags, **configDic)
 jmsStep (flags, **configDic)
 insituStep (flags, **configDic)
 af3Step (flags, **configDic)
 ptResidualStep (flags, **configDic)
 mc2mcStep (flags, **configDic)
 calibConfigToToolList (flags, calibSeqOverride=None, **configDict)
 calibToolFromConfigFile (flags, configFile, name="jetcalib", calibSeqOverride=None)
 load_yaml_cfg (configFile)

Variables

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

Function Documentation

◆ af3Step()

JetCalibStepsConfig.af3Step ( flags,
** configDic )

Definition at line 193 of file JetCalibStepsConfig.py.

193def af3Step(flags, **configDic):
194 configDic.setdefault('OutScale','JetFastSimScaleMomentum')
195 # Get the settings for the histograms:
196 histoParams = configDic.pop('histoParams')
197 histoParams['inputFile'] = PathResolver.FindCalibFile(configDic.pop('CalibConstantFile'))
198 configDic["histoTool"] = HistoInputCfg(flags, "histoTool", **histoParams)
199
200 return [CompFactory.Generic4VecCorrectionStep("AF3", **configDic)]
201
static std::string FindCalibFile(const std::string &logical_file_name)

◆ calibConfigToToolList()

JetCalibStepsConfig.calibConfigToToolList ( flags,
calibSeqOverride = None,
** configDict )
Returns a list of instantiated tools for each of the calibration steps. 
Tools are instantiated by calling functions declared in the calibStepDic dictionary.
The order of the steps is determined by the Sequence block of the config. 
The calibSeqOverride argument can be set to a '_'-separated string of step names, 
which will override the step ordering set by the Sequence block.

Definition at line 304 of file JetCalibStepsConfig.py.

304def calibConfigToToolList(flags, calibSeqOverride=None, **configDict):
305 """
306 Returns a list of instantiated tools for each of the calibration steps.
307 Tools are instantiated by calling functions declared in the calibStepDic dictionary.
308 The order of the steps is determined by the Sequence block of the config.
309 The calibSeqOverride argument can be set to a '_'-separated string of step names,
310 which will override the step ordering set by the Sequence block.
311 """
312
313 # Identify type of sample
314 isFullSim = True
315 if flags.Input.isMC:
316 metaData = GetFileMD(flags.Input.Files[0])
317 simFlavour = metaData.get('Simulator','') # ATLFAST3 or FullG4
318 if 'ATLFAST3' in simFlavour:
319 isFullSim = False
320 sampleKey = 'AF3'
321 else:
322 sampleKey = 'FullSim'
323 else:
324 sampleKey = 'Data'
325
326 if flags.GeoModel.Run == LHCPeriod.Run2:
327 runKey = 'Run2'
328 elif flags.GeoModel.Run == LHCPeriod.Run3:
329 runKey = 'Run3'
330 elif flags.GeoModel.Run >= LHCPeriod.Run4:
331 runKey = 'Run4'
332 else:
333 jcslog.warning('LHCPeriod not recognised')
334
335
336 if calibSeqOverride:
337 # If calibSeqOverride is set, use this to determine ordering
338 sequence = calibSeqOverride.split('_')
339 jcslog.info('Expert option calibSeqOverride set - overriding step sequence')
340 else:
341 # Ordering of calib steps based on Sequence block and type of sample
342 try:
343 seqDict = configDict.pop('Sequence')
344 sequence = seqDict[runKey][sampleKey]
345 except KeyError:
346 raise JetCalibConfigError(f"{runKey} {sampleKey} sample identified. YAML should specify step ordering via the following block structure: \n \
347 Sequence:\n \
348 {runKey}: \n \
349 {sampleKey}: [list of steps] ")
350
351 toolList = []
352 jcslog.debug('Configuring jet calib steps:')
353 for step in sequence:
354
355 if step not in configDict:
356 raise JetCalibConfigError(f'Sequence includes step {step} but no YAML block is provided.')
357 configDict.get(step).pop('prereqs',{}) # removes the 'prereqs' entry not refined in steps
358
359 # expert option to skip a step
360 if configDict.get(step).pop('noRun',False):
361 jcslog.warning(f'Expert option: Skipping calib step {step}')
362 continue
363
364 # Warning: Insitu for MC
365 if step=="Insitu" and flags.Input.isMC and not configDict.get("Insitu").get("CalibrateMC",False):
366 jcslog.warning('Insitu step included for MC but CalibrateMC is False - no calibration will be run')
367
368 if step=="MC2MC":
369 # Print warning if running MC2MC calibration for data
370 if not flags.Input.isMC:
371 jcslog.warning('Running MC2MC calibration for data')
372
373 # Skip MC to MC calibration for Pythia8
374 for key, value in flags.Input.GeneratorsInfo.items():
375 generator = key
376 break
377 if 'Pythia' in generator:
378 jcslog.debug('Skipping MC2MC calibration for Pythia8')
379 continue
380
381 # Warning if running AF3 calibration for data or FullSim
382 if step=="AF3":
383 if not flags.Input.isMC:
384 jcslog.warning('Running FastSimulation calibration for data')
385
386 if isFullSim:
387 jcslog.warning('Running FastSimulation calibration for full sim')
388
389 calibFunc = calibStepDic.get(step,None)
390
391 if calibFunc is None:
392 raise NotImplementedError(f'Calibration step {step} is not found in calibStepDic')
393
394 calibConfig = configDict.get(step)
395
396 # Config can contain run-specific settings in a 'RunX:' sub-block
397 for overrideKey in ['Run2', 'Run3', 'Run4']:
398 # All override blocks should be removed from the configDict
399 overrideDict = calibConfig.pop(overrideKey,{})
400 # Only apply the overrides for the relevant Run
401 if runKey!=overrideKey or not overrideDict:
402 continue
403 jcslog.debug(f'{step}: Applying {runKey} override settings')
404
405 for key in overrideDict:
406 if key in calibConfig:
407 jcslog.warning(f'{key} will be overwritten by {overrideKey} settings')
408 calibConfig[key] = overrideDict[key]
409
410 # Start from ConstitScale. For subsequent steps set InScale to OutScale of previous step
411 if len(toolList)==0:
412 inScale = 'JetConstitScaleMomentum'
413 else:
414 inScale = toolList[-1].OutScale
415
416 calibConfig.setdefault('InScale', inScale)
417
418 if calibConfig['InScale']!=inScale:
419 jcslog.warning(f'InScale set to {calibConfig['InScale']} in YAML config, but expected {inScale} from Sequence ordering -- is this intentional?')
420
421 # each func returns a list (to allow one YAML block to configure multiple steps run in order)
422 newToolList = calibFunc(flags, **calibConfig)
423 jcslog.debug(f'{step}: InScale = {newToolList[0].InScale}, OutScale = {newToolList[-1].OutScale}')
424
425 toolList += newToolList
426
427 return toolList
428
T * get(TKey *tobj)
get a TObject* from a TKey* (why can't a TObject be a TKey?)
Definition hcg.cxx:132

◆ calibToolFromConfigFile()

JetCalibStepsConfig.calibToolFromConfigFile ( flags,
configFile,
name = "jetcalib",
calibSeqOverride = None )
Returns a list of instantiated tools for each of the calibration steps. 
The order of the steps is determined by the Sequence block of the config, unless calibSeqOverride is set.

Parameters:
-----------
configFile: str
    Path to YAML configuration file
name: str
    Internal name of the configured jet calib tool

Expert options:
---------------
calibSeqOverride: str
    Optional '_'-separated string of step names. If provided this will override the step ordering set by the Sequence block.

Definition at line 429 of file JetCalibStepsConfig.py.

429def calibToolFromConfigFile(flags, configFile, name = "jetcalib", calibSeqOverride = None):
430 """
431 Returns a list of instantiated tools for each of the calibration steps.
432 The order of the steps is determined by the Sequence block of the config, unless calibSeqOverride is set.
433
434 Parameters:
435 -----------
436 configFile: str
437 Path to YAML configuration file
438 name: str
439 Internal name of the configured jet calib tool
440
441 Expert options:
442 ---------------
443 calibSeqOverride: str
444 Optional '_'-separated string of step names. If provided this will override the step ordering set by the Sequence block.
445 """
446 infoMsg = f'Configuring JetCalibTools with {configFile}'
447 jcslog.info(infoMsg)
448
449 configDic = load_yaml_cfg(configFile)
450
451 globalSettings = configDic.pop('Global',{})
452
453 calibTool = CompFactory.JetCalibTool(name, CalibSteps=calibConfigToToolList(flags, calibSeqOverride, **configDic), **globalSettings)
454 return calibTool
455

◆ etajesStep()

JetCalibStepsConfig.etajesStep ( flags,
** configDic )

Definition at line 132 of file JetCalibStepsConfig.py.

132def etajesStep(flags, **configDic):
133 configDic.setdefault('OutScale', 'JetEtaJESScaleMomentum')
134 pVars = configDic.pop("ParametrizedVars")
135
136 jesstep = CompFactory.EtaJESCalibStep("EtaJESCalib",
137 VarToolE= VarToolCfg(flags, var=pVars['varE']),
138 VarToolEta= VarToolCfg(flags, var=pVars["varEta"]),
139 **configDic
140 )
141 return [jesstep]
142

◆ gscStep()

JetCalibStepsConfig.gscStep ( flags,
** configDict )

Definition at line 81 of file JetCalibStepsConfig.py.

81def gscStep(flags, **configDict):
82
83 configDict.setdefault('OutScale', 'JetGSCScaleMomentum')
84
85 defaultFileGSC = PathResolver.FindCalibFile(configDict.pop('fileGSC'))
86
87 # These HistoInput2D defaults can't be set in the C++, so are set here:
88 defaultHistTools = dict(
89 histTool_EM3 = [dict(varX = "pt", varY = "EM3", histName=f"AntiKt4EMPFlow_EM3_interpolation_resp_eta_{j}", inputFile=defaultFileGSC) for j in range(35)],
90 histTool_CharFrac = [dict(varX = "pt", varY = "ChargedFraction", histName = f"AntiKt4EMPFlow_chargedFraction_interpolation_resp_eta_{j}", inputFile=defaultFileGSC) for j in range(25)],
91 histTool_Tile0 = [dict(varX = "pt", varY = "Tile0", histName=f"AntiKt4EMPFlow_Tile0_interpolation_resp_eta_{j}", inputFile=defaultFileGSC) for j in range(18)],
92 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)],
93 histTool_trackWIDTH=[dict(varX = "pt", varY = "trackWIDTH", histName=f"AntiKt4EMPFlow_trackWIDTH_interpolation_resp_eta_{j}", inputFile=defaultFileGSC) for j in range(25)],
94 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)],
95 )
96
97 gsc_steps = ['histTool_EM3', 'histTool_CharFrac', 'histTool_Tile0', 'histTool_nTrk', 'histTool_trackWIDTH']
98 if configDict.get('applyPunchThrough',False):
99 gsc_steps.append('histTool_PunchThrough')
100
101 # Build the hist tools
102 for key in gsc_steps:
103 # Use defaultHistTools by default
104 if key not in configDict:
105 toolArray = defaultHistTools[key]
106
107 # In this case the full list of sub-tools has been specified in the YAML
108 # and the defaultDict will be fully overwritten (ie. all parameters must be specified)
109 elif isinstance(configDict[key],list):
110 toolArray = configDict[key]
111 for subDict in toolArray:
112 subDict.setdefault('inputFile',defaultFileGSC)
113
114 # Functionality to build the arrays of histogram reader from a shorter block in the YAML file
115 # Fall back on defaultHistTools for defaults
116 else:
117 baseDict = dict(configDict[key])
118 N_hist = baseDict.pop('N_hist')
119 histNameBase = baseDict.pop('histNameBase')
120 inputFile = baseDict.pop('inputFile', defaultFileGSC)
121 varX = baseDict.pop('varX',defaultHistTools[key][0]['varX'])
122 varY = baseDict.pop('varY', defaultHistTools[key][0]['varY'])
123 toolArray = [dict(varX = varX, varY = varY, histName=f'{histNameBase}_{j}', inputFile = inputFile) for j in range(N_hist)]
124
125 # Convert array of properties to HistoInput tools
126 configDict[key] = [HistoInputCfg(flags, Tname=f"{key.split('_')[1]}_{j}", **toolConfig) for j, toolConfig in enumerate(toolArray)]
127
128 GSCstep = CompFactory.GSCCalibStep("gsccalibstep", **configDict)
129
130 return [GSCstep]
131

◆ insituStep()

JetCalibStepsConfig.insituStep ( flags,
** configDic )

Definition at line 158 of file JetCalibStepsConfig.py.

158def insituStep(flags, **configDic):
159 configDic.setdefault('OutScale', 'JetInsituScaleMomentum')
160 histEtaInterCalib = configDic.pop('histEtaInterCalib')
161 histAbsCalib = configDic.pop('histAbsCalib')
162
163 histAbsJMSCalib = configDic.pop('JMS',None)
164
165 histoReaderEta_vec, histoReaderAbs_vec = [], []
166
167 for infile in configDic.pop('fileInsitu'):
168 histoReaderEta_vec.append(dict(inputFile = PathResolver.FindCalibFile(infile), **histEtaInterCalib))
169 histoReaderAbs_vec.append(dict(inputFile = PathResolver.FindCalibFile(infile), **histAbsCalib))
170
171 configDic['HistoReaderEtaInter'] = [HistoInputCfg(flags, "HistToolEtaInter"+str(j), **etaDic) for j, etaDic in enumerate(histoReaderEta_vec)]
172 configDic['HistoReaderAbs'] = [HistoInputCfg(flags, "HistToolAbs"+str(j), **absDic) for j, absDic in enumerate(histoReaderAbs_vec)]
173
174 configDic['isMC'] = flags.Input.isMC
175
176 insituSteps = [CompFactory.InSituCalibStep("insitucalibstep", **configDic)]
177
178 # JMS
179 if histAbsJMSCalib:
180 histAbsJMSCalib['inputFile'] = PathResolver.FindCalibFile(histAbsJMSCalib['inputFile'])
181 insituSteps.append(
182 CompFactory.InSituJMSCalibStep("insitujmscalibstep",
183 CalibrateMC = configDic.get("CalibrateMC",False),
184 isMC = flags.Input.isMC,
185 # modifying insitu scale rather than defining a new scale
186 InScale = "JetInsituScaleMomentum",
187 OutScale = "JetInsituScaleMomentum",
188 HistoReaderAbsJMS = HistoInputCfg(flags, "HistoToolAbsJMS", **histAbsJMSCalib),
189 ))
190
191 return insituSteps
192

◆ jmsStep()

JetCalibStepsConfig.jmsStep ( flags,
** configDic )

Definition at line 143 of file JetCalibStepsConfig.py.

143def jmsStep(flags, **configDic):
144
145 configDic.setdefault('OutScale', 'JetJMSScaleMomentum')
146 histoParams = configDic.pop('histoParams')
147 histoParams['inputFile'] = PathResolver.FindCalibFile(configDic.pop('HistoFile'))
148
149 configDic["histoReaderJMS"] = HistoInputCfg(flags, "HistToolJMS", **histoParams)
150 configDic['varToolX'] = VarToolCfg(flags, var=histoParams['varX'], Tname="VarToolX_JMS")
151 configDic['varToolZ'] = VarToolCfg(flags, var=histoParams['varZ'], Tname="VarToolZ_JMS")
152
153 jmsstep = CompFactory.JMSCalibStep("JMSCalib",
154 **configDic
155 )
156 return [jmsstep]
157

◆ load_yaml_cfg()

JetCalibStepsConfig.load_yaml_cfg ( configFile)

Definition at line 456 of file JetCalibStepsConfig.py.

456def load_yaml_cfg(configFile):
457 from yaml import safe_load
458
459 path_configFile = PathResolver.FindCalibFile(configFile)
460 configDic = safe_load(open(path_configFile))
461 return configDic
462
463

◆ mc2mcStep()

JetCalibStepsConfig.mc2mcStep ( flags,
** configDic )

Definition at line 218 of file JetCalibStepsConfig.py.

218def mc2mcStep(flags, **configDic):
219 configDic.setdefault('OutScale','JetMC2MCScaleMomentum')
220 # Generator and version are the first item
221 for key, value in flags.Input.GeneratorsInfo.items():
222 generator = key
223 generator_version = value
224 break
225
226 # Get the shower model:
227 showerModel = ''
228 # Check first if the DSID is on the exceptions list
229 mcDSID = flags.Input.MCChannelNumber
230 with open(PathResolver.FindCalibFile("JetCalibTools/MC2MC_exceptions_DSID.json")) as read_file:
231 data = json.load(read_file)
232 for key, value in data.items():
233 if key == mcDSID:
234 showerModel = value
235
236 if showerModel == '':
237 genType, psType, hadType = generatorDic[generator]
238 version = generator_version.replace('.','')[:3]
239 if (generator == 'Pythia8' or generator == 'Pythia8B') and not version.startswith('8'):
240 version = '8'+version
241 showerModel = genType+"-"+version+"-"+psType+"-"+hadType
242
243 with open(PathResolver.FindCalibFile("JetCalibTools/MC2MC_showerRemap.json")) as read_file:
244 data = json.load(read_file)
245 foundMatch = False
246 for key, value in data.items():
247 if key == showerModel:
248 showerModel = value
249 foundMatch = True
250 break
251 if not foundMatch:
252 for key, value in data.items():
253 if key == genType+"-"+version:
254 showerModel = value+"-"+psType+"-"+hadType
255 break
256
257 jcslog.info(f'Using shower model {showerModel} for the MC-to-MC correction')
258
259 # Get the settings for the histograms:
260 baseHistoParams = configDic.pop('histoParams')
261 baseHistoParams['inputFile'] = PathResolver.FindCalibFile(configDic.pop('CalibConstantFileName')+'_'+showerModel+'.root')
262
263 histNameBase = baseHistoParams.pop('histNameBase')
264 for flav in configDic.pop('flavours'):
265 if flav == 'c':
266 configDic['doCjetCorrection'] = True
267 elif flav == 'b':
268 configDic['doBjetCorrection'] = True
269 histoParams = dict(varX = baseHistoParams['varX'],varY = baseHistoParams['varY'],
270 histName=f'{histNameBase}_{flav}',
271 inputFile=baseHistoParams['inputFile'])
272 configDic['mc2mcHist_'+flav] = HistoInputCfg(flags,Tname='HistoTool_MC2MC_'+flav,**histoParams)
273
274 configDic['isMC2MCCorr'] = True
275
276 return [CompFactory.Generic4VecCorrectionStep("MC2MC", **configDic)]
277

◆ newpuresidualStep()

JetCalibStepsConfig.newpuresidualStep ( flags,
** configDict )

Definition at line 62 of file JetCalibStepsConfig.py.

62def newpuresidualStep(flags, **configDict):
63 configDict.setdefault('OutScale', 'JetPileupScaleMomentum')
64 configDict.setdefault('IsData', not flags.Input.isMC)
65
66 histoParamsMu = configDict.pop('histoParamsMu')
67 inputFile = PathResolver.FindCalibFile(configDict.pop('calibFile'))
68 histoParamsMu['inputFile'] = inputFile
69
70 histoParamsNPV = configDict.pop('histoParamsNPV')
71 histoParamsNPV['inputFile'] = inputFile
72
73 histToolMu = HistoInputCfg(flags, "HistToolMu", **histoParamsMu)
74 histToolNPV = HistoInputCfg(flags, "HistToolNPV", **histoParamsNPV)
75 configDict["histTool_mu"] = histToolMu
76 configDict["histTool_NPV"] = histToolNPV
77
78 PU_step = CompFactory.PileupAreaResidualCalibStep("PUAreaResidual", **configDict)
79 return [PU_step]
80

◆ ptResidualStep()

JetCalibStepsConfig.ptResidualStep ( flags,
** configDic )

Definition at line 202 of file JetCalibStepsConfig.py.

202def ptResidualStep(flags, **configDic):
203 configDic.setdefault('OutScale','JetPtResidualScaleMomentum')
204 # Get the settings for the histograms:
205 histoParams = configDic.pop('histoParams')
206
207 # Define varTool to switch to bin centers
208 if configDic['useBinCenter']:
209 varYHisto = histoParams.pop('varYHisto')
210 configDic['varTool'] = VarToolCfg(flags, var=varYHisto, Tname="VarTool_for_binCenter")
211
212 histoParams['inputFile'] = PathResolver.FindCalibFile(configDic.pop('CalibConstantFile'))
213 # 2D histogram with correction factors
214 configDic["histoTool"] = HistoInputCfg(flags, "histoTool", **histoParams)
215
216 return [CompFactory.Generic4VecCorrectionStep("PtResidual", **configDic)]
217

◆ puresidualStep()

JetCalibStepsConfig.puresidualStep ( flags,
** configDict )

Definition at line 56 of file JetCalibStepsConfig.py.

56def puresidualStep(flags, **configDict):
57 configDict.setdefault('OutScale', 'JetPileupScaleMomentum')
58 configDict.setdefault('IsData', not flags.Input.isMC)
59 PU_step = CompFactory.Pileup1DResidualCalibStep("PUResid", **configDict)
60 return [PU_step]
61

◆ smearingStep()

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

Definition at line 21 of file JetCalibStepsConfig.py.

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

Variable Documentation

◆ calibStepDic

JetCalibStepsConfig.calibStepDic
Initial value:
1= dict(
2 JetArea = None,
3 Residual = puresidualStep,
4 ResidualNew = newpuresidualStep,
5 EtaJES = etajesStep,
6 JMS = jmsStep,
7 GSC = gscStep,
8 Insitu = insituStep,
9 Smear = smearingStep,
10 AF3 = af3Step,
11 PtResidual = ptResidualStep,
12 MC2MC = mc2mcStep,
13
14)

Definition at line 280 of file JetCalibStepsConfig.py.

◆ generatorDic

dict JetCalibStepsConfig.generatorDic
Initial value:
1= {
2 "Herwigpp": ["Herwigpp", "angular", "cluster"],
3 "Herwig7": ["Herwig", "angular", "cluster"],
4 "Sherpa": ["Sherpa", "dipole", "cluster"],
5 "Pythia8B": ["PythiaB", "dipole", "cluster"],
6 "Pythia8": ["Pythia", "dipole", "cluster"]
7}

Definition at line 296 of file JetCalibStepsConfig.py.

◆ jcslog

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

Definition at line 12 of file JetCalibStepsConfig.py.