176 jetCollectionName=
"AntiKt4EMPFlowJets"
178 jetCollectionName=
"AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets"
180 if self.
jetInput not in [
"EMTopo",
"EMPFlow",
"HI"]:
182 "Unsupported input type '{0}' for R=0.4 jets!".format(self.
jetInput) )
184 if self.
jvtWP not in [
"FixedEffPt"]:
186 "Unsupported NNJvt WP '{0}'".format(self.
jvtWP) )
188 if self.
fJvtWP not in [
"Loose",
"Tight",
"Tighter"]:
190 "Unsupported fJvt WP '{0}'".format(self.
fJvtWP) )
197 calibToolName =
'JetCalibTool_' + jetCollectionName[:-4]
198 calibTool = config.createPublicTool(
'JetCalibrationTool', calibToolName )
199 calibTool.JetCollection = jetCollectionName[:-4]
202 if config.geometry()
is LHCPeriod.Run2:
203 configFile =
"PreRec_R22_PFlow_ResPU_EtaJES_GSC_February23_230215.config"
204 calibTool.CalibArea =
"00-04-82"
205 elif config.geometry() >= LHCPeriod.Run3:
206 configFile =
"AntiKt4EMPFlow_MC23a_PreRecR22_Phase2_CalibConfig_ResPU_EtaJES_GSC_241208_InSitu.config"
207 calibTool.CalibArea =
"00-04-83"
209 if config.geometry()
is LHCPeriod.Run2:
210 configFile =
"JES_MC16_HI_Jan2021_5TeV.config"
211 if config.geometry()
is LHCPeriod.Run3:
212 configFile =
"AntiKt4HI_MC23_EtaJES_Run3PreRec_Run2VJet_Run3EtaInt_5p36TeV.config"
213 calibTool.CalibArea =
"00-04-83"
215 if config.dataType()
is DataType.FastSim:
216 configFile =
"JES_MC16Recommendation_AFII_{0}_Apr2019_Rel21.config"
218 configFile =
"JES_MC16Recommendation_Consolidated_{0}_Apr2019_Rel21.config"
219 configFile = configFile.format(self.
jetInput)
220 if self.calibToolCalibArea
is not None:
221 calibTool.CalibArea = self.calibToolCalibArea
222 if self.calibToolConfigFile
is not None:
223 configFile = self.calibToolConfigFile
224 calibTool.ConfigFile = configFile
225 if config.dataType()
is DataType.Data:
227 calibTool.CalibSequence =
'EtaJES_Insitu'
229 calibTool.CalibSequence =
'JetArea_Residual_EtaJES_GSC_Insitu'
232 calibTool.CalibSequence =
'JetArea_Residual_EtaJES_GSC'
234 calibTool.CalibSequence =
'EtaJES'
236 calibTool.CalibSequence =
'JetArea_Residual_EtaJES_GSC_Smear'
237 if self.calibToolCalibSeq
is not None:
238 calibTool.CalibSequence = self.calibToolCalibSeq
239 calibTool.IsData = (config.dataType()
is DataType.Data)
241 alg = config.createAlgorithm(
'CP::JetCalibrationAlg',
'JetCalibrationAlg' )
243 alg.calibrationTool = f
'{calibTool.getType()}/{calibTool.getName()}'
249 alg = config.createAlgorithm(
'CP::JvtUpdateAlg',
'JvtUpdateAlg' )
250 config.addPrivateTool(
'jvtTool',
'JetVertexTaggerTool' )
252 alg.jvtTool.SuppressInputDependence=
True
255 alg.preselection = config.getPreselection (self.
containerName,
'')
258 assert self.
jetInput==
"EMPFlow",
"NN JVT only defined for PFlow jets"
259 alg = config.createAlgorithm(
'CP::JetDecoratorAlg',
'NNJvtUpdateAlg' )
260 config.addPrivateTool(
'decorator',
'JetPileupTag::JetVertexNNTagger' )
264 alg.decorator.JetContainer = alg.jetsOut.replace (
'%SYS%',
'NOSYS')
265 alg.decorator.SuppressInputDependence=
True
266 alg.decorator.SuppressOutputDependence=
True
271 assert self.
jetInput==
"EMPFlow",
"NNJvt WPs and SFs only valid for PFlow jets"
272 alg = config.createAlgorithm(
'CP::AsgSelectionAlg',
'JvtSelectionAlg')
273 config.addPrivateTool(
'selectionTool',
'CP::NNJvtSelectionTool')
274 alg.selectionTool.JetContainer = config.readName(self.
containerName)
275 alg.selectionTool.JvtMomentName =
"NNJvt"
276 alg.selectionTool.WorkingPoint = self.
jvtWP
277 alg.selectionTool.MaxPtForJvt = 60*GeV
278 alg.selectionDecoration =
"jvt_selection,as_char"
281 if self.runJvtEfficiency
and config.dataType()
is not DataType.Data:
282 alg = config.createAlgorithm(
'CP::JvtEfficiencyAlg',
'JvtEfficiencyAlg' )
283 config.addPrivateTool(
'efficiencyTool',
'CP::NNJvtEfficiencyTool' )
284 alg.efficiencyTool.JetContainer = config.readName(self.
containerName)
285 alg.efficiencyTool.MaxPtForJvt = 60*GeV
286 alg.efficiencyTool.WorkingPoint = self.
jvtWP
287 if config.geometry()
is LHCPeriod.Run2:
288 alg.efficiencyTool.SFFile =
"JetJvtEfficiency/May2024/NNJvtSFFile_Run2_EMPFlow.root"
290 alg.efficiencyTool.SFFile =
"JetJvtEfficiency/May2024/NNJvtSFFile_Run3_EMPFlow.root"
291 alg.selection =
'jvt_selection,as_char'
292 alg.scaleFactorDecoration =
'jvt_effSF_%SYS%'
293 alg.outOfValidity = 2
294 alg.outOfValidityDeco =
'no_jvt'
295 alg.skipBadEfficiency =
False
297 alg.preselection = config.getPreselection (self.
containerName,
'')
298 config.addOutputVar (self.
containerName, alg.scaleFactorDecoration,
'jvtEfficiency')
299 config.addSelection (self.
containerName,
'baselineJvt',
'jvt_selection,as_char', preselection=
False)
302 assert self.
jetInput==
"EMPFlow",
"fJvt WPs and SFs only valid for PFlow jets"
303 alg = config.createAlgorithm(
'CP::AsgSelectionAlg',
'FJvtSelectionAlg')
304 config.addPrivateTool(
'selectionTool',
'CP::FJvtSelectionTool')
305 alg.selectionTool.JetContainer = config.readName(self.
containerName)
306 alg.selectionTool.JvtMomentName =
"DFCommonJets_fJvt"
307 alg.selectionTool.WorkingPoint = self.
fJvtWP
308 alg.selectionDecoration =
"fjvt_selection,as_char"
311 if self.runFJvtEfficiency
and config.dataType()
is not DataType.Data:
312 alg = config.createAlgorithm(
'CP::JvtEfficiencyAlg',
'FJvtEfficiencyAlg' )
313 config.addPrivateTool(
'efficiencyTool',
'CP::FJvtEfficiencyTool' )
314 alg.efficiencyTool.JetContainer = config.readName(self.
containerName)
315 alg.efficiencyTool.WorkingPoint = self.
fJvtWP
316 if config.geometry()
is LHCPeriod.Run2:
317 alg.efficiencyTool.SFFile =
"JetJvtEfficiency/May2024/fJvtSFFile_Run2_EMPFlow.root"
319 alg.efficiencyTool.SFFile =
"JetJvtEfficiency/May2024/fJvtSFFile_Run3_EMPFlow.root"
320 alg.selection =
'fjvt_selection,as_char'
321 alg.scaleFactorDecoration =
'fjvt_effSF_%SYS%'
322 alg.outOfValidity = 2
323 alg.outOfValidityDeco =
'no_fjvt'
324 alg.skipBadEfficiency =
False
326 alg.preselection = config.getPreselection (self.
containerName,
'')
327 config.addOutputVar (self.
containerName, alg.scaleFactorDecoration,
'fjvtEfficiency')
328 config.addSelection (self.
containerName,
'baselineFJvt',
'fjvt_selection,as_char', preselection=
False)