13 from AthenaConfiguration.Enums
import LHCPeriod
14 from JetRecConfig.StandardJetConstits
import inputsFromContext
16 from AthenaCommon
import Logging
17 jetcaliblog = Logging.logging.getLogger(
'JetCalibToolsConfig')
19 all = [
'getJetCalibTool']
25 "T0":(
"JES_MC15cRecommendation_PFlow_Aug2016_rel21.config",
"00-04-77",
"JetArea_Residual_EtaJES"),
27 "AnalysisLatest":(
"PreRec_R22_PFlow_ResPU_EtaJES_GSC_February23_230215.config",
"00-04-82",
"JetArea_Residual_EtaJES_GSC_Insitu"),
28 "TrigLS2":(
"JES_MC16Recommendation_Consolidated_PFlow_Apr2019_Rel21_Trigger.config",
"00-04-82",
"JetArea_Residual_EtaJES_GSC_Insitu"),
29 "Trigger":(
"JES_MC16Recommendation_Consolidated_PFlow_30May2022_Rel22_Trigger.config",
"00-04-82",
"JetArea_Residual_EtaJES_GSC_Insitu"),
30 "TrigR22Prerec":(
"PreRec_R22_PFlow_ResPU_EtaJES_GSC_February23_230215.config",
"00-04-82",
"JetArea_Residual_EtaJES_GSC_Insitu"),
31 "TrigHIUPC" : (
"JES_MC16Recommendation_LowMu1718_MCJES_GSC_nTrkOn_PFlow_Sep2023_Rel21.config",
"00-04-82",
"EtaJES_GSC"),
35 "T0":(
"JES_MC15cRecommendation_May2016_rel21.config",
"00-04-77",
"JetArea_Residual_EtaJES"),
37 "AnalysisLatest":(
"JES_MC16Recommendation_Consolidated_EMTopo_Apr2019_Rel21.config",
"00-04-82",
"JetArea_Residual_EtaJES_GSC_Insitu"),
38 "TrigRun2":(
"JES_MC15cRecommendation_May2016_Trigger.config",
"00-04-77",
"JetArea_EtaJES_GSC_Insitu"),
39 "TrigRun2GSC":(
"JES_data2016_data2015_Recommendation_Dec2016_rel21.config",
"00-04-77",
"JetArea_EtaJES_GSC_Insitu"),
40 "TrigLS2":(
"JES_MC16Recommendation_Consolidated_EMTopo_Apr2019_Rel21_Trigger.config",
"00-04-82",
"JetArea_Residual_EtaJES_GSC_Insitu"),
41 "Trigger":(
"JES_MC16Recommendation_Consolidated_EMTopo_Apr2019_Rel21_Trigger.config",
"00-04-82",
"JetArea_Residual_EtaJES_GSC_Insitu"),
42 "HLLHC":(
"HLLHC/JES_MC16_HLLHC_Aug2021_rel21.config",
"00-04-82",
"JetArea_Residual_EtaJES"),
46 "T0":(
"Consolidated_R22_CSSKUFO_ResPU_EtaJES_GNNC_20231103.config",
"00-04-83",
"Residual_EtaJES_GNNC"),
50 "RScanLatest":(
"JES_MC16Recommendation_Rscan2LC_22Feb2018_rel21.config",
"00-04-81",
"JetArea_Residual_EtaJES_GSC_Insitu")
54 "RScanLatest":(
"JES_MC16Recommendation_Rscan6LC_22Feb2018_rel21.config",
"00-04-81",
"JetArea_Residual_EtaJES_GSC_Insitu")
58 "CombinedMass": (
"JES_MC16recommendation_FatJet_Trimmed_JMS_comb_17Oct2018.config",
"00-04-82",
"EtaJES_JMS"),
59 "CaloMass": (
"JES_MC16recommendation_FatJet_Trimmed_JMS_calo_12Oct2018.config",
"00-04-82",
"EtaJES_JMS"),
60 "TAMass": (
"JES_MC16recommendation_FatJet_Trimmed_JMS_TA_12Oct2018.config",
"00-04-82",
"EtaJES_JMS"),
61 "SoftDrop": (
"JES_MC20PreRecommendation_R10_UFO_CSSK_SoftDrop_JMS_R21Insitu_10Mar2023.config",
"00-04-82",
"EtaJES_JMS"),
62 "TrigUngroomed": (
"JES_Full2012dataset_Rscan_June2014.config",
"00-04-77",
"JetArea_EtaJES"),
63 "TrigTrimmed": (
"JES_MC15recommendation_FatJet_June2015_PtFrac4.config",
"00-04-82",
"EtaJES_JMS"),
64 "TrigSoftDrop": (
"JES_MC16recommendation_R10_UFO_CSSK_SoftDrop_JMS_01April2020.config",
"00-04-82",
"EtaJES_JMS"),
65 "TrigHLTSoftDrop":(
"JES_JMS_MC21_R10_PFlow_CSSK_SoftDrop_Dec2023_Trigger.config",
"00-04-83",
"EtaJES_JMS"),
66 "LargeRDNN": (
"JES_JMS_MC20dnnc_R10_UFO_CSSK_SoftDrop_Jun2023.config",
"00-04-83",
"LargeRDNN"),
71 "AntiKt4EMPFlow":
"JES_MC16Recommendation_AFII_PFlow_Apr2019_Rel21.config",
72 "AntiKt4GPFlow":
"JES_MC16Recommendation_AFII_PFlow_Apr2019_Rel21.config",
73 "AntiKt4EMTopo":
"JES_MC16Recommendation_AFII_EMTopo_Apr2019_Rel21.config",
74 "AntiKt4LCTopo":
"JES_MC16Recommendation_AFII_EMTopo_Apr2019_Rel21.config",
79 "AntiKt4EMPFlow":pflowcontexts,
80 "AntiKt4EMPFlow_noElectrons":pflowcontexts,
81 "AntiKt4EMPFlow_noMuons":pflowcontexts,
82 "AntiKt4EMPFlow_noLeptons":pflowcontexts,
83 "AntiKt4EMPFlowByVertex":pflowcontexts,
84 "AntiKt4GPFlow":pflowcontexts,
85 "AntiKt4UFOCSSK":ufocontexts,
86 "AntiKt4EMTopo":topocontexts,
87 "AntiKt4LCTopo":topocontexts,
88 "AntiKt10LCTopo":fatjetcontexts,
90 "AntiKt10LCTopoTrimmedPtFrac5SmallR20":fatjetcontexts,
91 "AntiKt10LCTopoTrimmedPtFrac4SmallR20":fatjetcontexts,
93 "AntiKt10UFOCSSKSoftDropBeta100Zcut10":fatjetcontexts,
95 "AntiKt10UFOCSSK_noElectronsSoftDropBeta100Zcut10":fatjetcontexts,
96 "AntiKt10UFOCSSK_noMuonsSoftDropBeta100Zcut10":fatjetcontexts,
97 "AntiKt10UFOCSSK_noLeptonsSoftDropBeta100Zcut10":fatjetcontexts,
99 "AntiKt10EMPFlowCSSKSoftDropBeta100Zcut10":fatjetcontexts,
101 "AntiKt2LCTopo":rscanlc2,
102 "AntiKt6LCTopo":rscanlc6,
106 hasInSitu = [
"AntiKt4LCTopo",
"AntiKt4EMTopo",
"AntiKt4EMPFlow",
"AntiKt4EMPFlow_noElectrons",
"AntiKt4EMPFlow_noMuons",
"AntiKt4EMPFlow_noLeptons",
"TrigAntiKt4EMTopo"]
112 def getJetCalibTool(jetdef, context, data_type, calibseq = "", rhoname = "", pvname = "PrimaryVertices", gscdepth = "auto"):
114 jetcollection = jetdef.basename
117 if data_type
not in [
'data',
'mc',
'afii']:
118 jetcaliblog.error(
"JetCalibConfig accepts data_type values: 'data', 'mc', 'afii'")
119 raise ValueError(
"Unsupported data_type provided: '{0}".
format(data_type))
121 if jetcollection.endswith(
"Jets"):
122 jetcaliblog.error(
"Jet collection '{0}'should be specified w/o 'Jets' in the name.".
format(jetcollection))
123 raise ValueError(
"Bad jet collection formatting in getJetCalibTool.")
125 jetcaliblog.debug(
"Preparing calibration for {0}, in context {1} on sample type {2}".
format(jetcollection,context,data_type))
127 jetcontexts = calibcontexts[jetcollection]
129 if jetcollection ==
"AntiKt4EMTopo" and context ==
"T0":
130 if jetdef._cflags.GeoModel.Run >= LHCPeriod.Run4:
134 configfile, calibarea, calibseq_def = jetcontexts[context]
135 _calibseq = calibseq
if calibseq
else calibseq_def
140 if _calibseq.endswith(
"Insitu"):
141 if data_type ==
'data':
142 if jetcollection
not in hasInSitu:
143 raise ValueError(
"In situ calibration does not exist for {0}, context {1}".
format(jetcollection,context))
145 raise ValueError(
"In situ calibration requested for MC on {0}, context {1}".
format(jetcollection,context))
146 _configfile = configfile
147 if data_type ==
"afii" and jetcollection
in af2configs.keys():
148 _configfile = af2configs[jetcollection]
149 _data_type = data_type
156 if "Residual" in _calibseq
or "GSC" in _calibseq
and gscdepth!=
"EM3" or "LargeRDNN" in _calibseq:
159 if context ==
"TrigHIUPC":
162 _jetcollection = jetcollection
163 if "PFlow" in jetcollection
and (context==
"TrigSoftDrop" or context==
"TrigHLTSoftDrop"):
164 _jetcollection = jetcollection.replace(
"EMPFlow",
"UFO")
165 if "_noElectrons" in jetcollection :
166 _jetcollection = _jetcollection.replace(
"_noElectrons",
"")
167 if "_noMuons" in jetcollection :
168 _jetcollection = _jetcollection.replace(
"_noMuons",
"")
169 if "_noLeptons" in jetcollection :
170 _jetcollection = _jetcollection.replace(
"_noLeptons",
"")
172 if "ByVertex" in jetcollection:
173 _jetcollection = jetcollection.replace(
"ByVertex",
"")
174 return defineJetCalibTool(_jetcollection, context, _configfile, calibarea, _calibseq, _data_type, rhoname, _pvname, gscdepth)
175 except KeyError
as e:
176 jetcaliblog.error(
"Context '{0}' not found for jet collection '{1}'".
format(context,jetcollection))
177 jetcaliblog.error(
"Options are '{0}".
format(
','.
join(jetcontexts.keys())))
182 def defineJetCalibTool(jetcollection, context, configfile, calibarea, calibseq, data_type, rhoname, pvname, gscdepth):
184 calibseqshort =
''.
join([ step[0]
for step
in calibseq.split(
'_') ])
185 toolname =
"jetcalib_{0}_{1}_{2}".
format(jetcollection,calibseqshort,context)
187 from AthenaConfiguration.ComponentFactory
import CompFactory
188 jct = CompFactory.JetCalibrationTool(toolname,
189 JetCollection = jetcollection,
190 ConfigFile = configfile,
191 CalibArea = calibarea,
192 CalibSequence = calibseq,
193 IsData = (data_type ==
"data"),
195 PrimaryVerticesContainerName = pvname,
205 cfg, calibarea, calibseq = calibcontexts[jetdef.basename][calibcontext]
210 prereqs.append(
"mod:ConstitFourMom")
211 if "JetArea" in calibseq:
212 if calibcontext.startswith(
"Trig"): prereqs.append(
"input:HLT_EventDensity")
213 elif pvname !=
"PrimaryVertices": prereqs.append(
"input:EventDensityCustomVtx")
215 if "GSC" in calibseq:
216 prereqs += [
"mod:CaloEnergies"]
217 if calibcontext !=
"TrigRun2":
218 prereqs += [
"mod:TrackMoments",
220 if "GNNC" in calibseq:
221 prereqs += [
"mod:CaloQuality",
"mod:TrackMoments"]
222 if "CombinedMass" in calibcontext:
223 prereqs += [
"mod:TrackSumMoments"]
224 if "LargeRDNN" in calibseq:
225 prereqs += [
"mod:CaloEnergiesLargeR",
"mod:ConstitFrac",
"mod:groomMRatio",
"mod:Width",
226 "mod:nsubjettiness",
"mod:nsubjettinessR",
"mod:ktsplitter",
"mod:ecorr",
227 "mod:ecorrR",
"mod:qw"]
228 jetcaliblog.debug(
"Prereqs for calibseq '{0}': {1}".
format(calibseq,
str(prereqs)))
235 rhoname =
"EleRM_Kt4LCTopoOriginEventShape" if jetdef.context ==
"EleRM" else "auto"
236 pvname =
"PrimaryVertices"
238 calibspecs = modspec.split(
':')
240 calibcontext, data_type = calibspecs[:2]
241 if len(calibspecs)>2: calibseq = calibspecs[2]
242 if len(calibspecs)>3: rhoname = calibspecs[3]
243 if len(calibspecs)>4: pvname = calibspecs[4]
244 if len(calibspecs)>5: gscdepth = calibspecs[5]
246 return calibcontext, data_type, calibseq, rhoname, pvname, gscdepth
251 return getJetCalibTool(jetdef,calibcontext,data_type,calibseq,rhoname,pvname,gscdepth)