68 config_file =
"R4_AllNuisanceParameters_AllJERNP.config"
72 "Invalid uncertainty configuration - Scenario* systematicsModelJESs can "
73 "only be used together with the Simple systematicsModelJER")
79 "Invalid combination of systematicsModelJES and systematicsModelJER settings: "
84 if self.uncertToolCalibArea
is not None:
85 calib_area = self.uncertToolCalibArea
88 if self.uncertToolConfigPath
is not None:
89 config_file = self.uncertToolConfigPath
91 if config.geometry()
is LHCPeriod.Run2:
92 if config.dataType()
is DataType.FastSim:
93 config_file =
"rel22/Fall2024_PreRec/" + config_file
96 config_file =
"HIJetUncertainties/Spring2023/HI" + config_file
98 config_file =
"rel22/Summer2023_PreRec/" + config_file
100 if config.dataType()
is DataType.FastSim:
101 config_file =
"rel22/Winter2025_AF3_PreRec/" + config_file
104 config_file =
"HIJetUncertainties/Spring2023/HI" + config_file
106 config_file =
"rel22/Winter2025_PreRec/" + config_file
110 if self.uncertToolMCType
is not None:
111 mc_type = self.uncertToolMCType
113 if config.geometry()
is LHCPeriod.Run2:
114 if config.dataType()
is DataType.FastSim:
119 if config.dataType()
is DataType.FastSim:
127 return config_file, calib_area, mc_type
142 config.addPrivateTool(
'uncertaintiesTool',
'JetUncertaintiesTool' )
143 jetUncertaintiesAlg.uncertaintiesTool.JetDefinition = jetCollectionName[:-4]
144 jetUncertaintiesAlg.uncertaintiesTool.ConfigFile = configFile
145 if calibArea
is not None:
146 jetUncertaintiesAlg.uncertaintiesTool.CalibArea = calibArea
147 jetUncertaintiesAlg.uncertaintiesTool.MCType = mcType
148 jetUncertaintiesAlg.uncertaintiesTool.IsData = (config.dataType()
is DataType.Data)
149 jetUncertaintiesAlg.uncertaintiesTool.PseudoDataJERsmearingMode =
False
153 jetUncertaintiesAlg.affectingSystematicsFilter =
'.*'
156 config.addPrivateTool(
'uncertaintiesToolPD',
'JetUncertaintiesTool' )
157 jetUncertaintiesAlg.uncertaintiesToolPD.JetDefinition = jetCollectionName[:-4]
158 jetUncertaintiesAlg.uncertaintiesToolPD.ConfigFile = configFile
159 if calibArea
is not None:
160 jetUncertaintiesAlg.uncertaintiesToolPD.CalibArea = calibArea
161 jetUncertaintiesAlg.uncertaintiesToolPD.MCType = mcType
164 jetUncertaintiesAlg.uncertaintiesToolPD.IsData =
True
165 jetUncertaintiesAlg.uncertaintiesToolPD.PseudoDataJERsmearingMode =
True
172 log = logging.getLogger(
'LargeRJetAnalysisConfig')
180 "Invalid request for systematicsModelJER/JMS settings: "
181 "systematicsModelJER = '{0}', "
183 if self.uncertToolConfigPath
is not None:
185 config_file = self.uncertToolConfigPath
187 if config.geometry()
in [LHCPeriod.Run2, LHCPeriod.Run3]:
188 config_file =
"rel22/Summer2025_PreRec/" + config_file
190 log.warning(
"Uncertainties for UFO jets are not for Run 4!")
194 if self.uncertToolCalibArea
is not None:
195 calib_area = self.uncertToolCalibArea
198 if self.uncertToolMCType
is not None:
199 mc_type = self.uncertToolMCType
201 if config.dataType()
is DataType.FastSim:
202 if config.geometry()
is LHCPeriod.Run2:
207 if config.geometry()
is LHCPeriod.Run2:
212 return config_file, calib_area, mc_type
216 Create instance(s) of JetUncertaintiesTool following JetETmiss recommendations.
218 JER uncertainties under the "Full" scheme must be run on MC samples twice:
220 2. Pseudodata (PD) mode, as if the events are Data.
227 config.addPrivateTool(
'uncertaintiesTool',
'JetUncertaintiesTool' )
228 jetUncertaintiesAlg.uncertaintiesTool.JetDefinition = jetCollectionName[:-4]
229 jetUncertaintiesAlg.uncertaintiesTool.ConfigFile = configFile
230 from PathResolver
import PathResolver
231 if self.analysisFile
is not None:
233 if calibArea
is not None:
234 jetUncertaintiesAlg.uncertaintiesTool.CalibArea = calibArea
235 jetUncertaintiesAlg.uncertaintiesTool.MCType = mcType
236 jetUncertaintiesAlg.uncertaintiesTool.IsData = (config.dataType()
is DataType.Data)
237 jetUncertaintiesAlg.uncertaintiesTool.PseudoDataJERsmearingMode =
False
238 jetUncertaintiesAlg.uncertaintiesTool.NJetAccessorName =
"Njet_NOSYS"
241 if config.dataType()
is DataType.Data
and not (config.isPhyslite()
and doPseudoData
and self.
runJERsystematicsOnData):
243 jetUncertaintiesAlg.affectingSystematicsFilter =
'.*'
245 if config.dataType()
is not (DataType.Data
and config.isPhyslite())
and doPseudoData
and not self.
runJERsystematicsOnData:
247 config.addPrivateTool(
'uncertaintiesToolPD',
'JetUncertaintiesTool' )
248 jetUncertaintiesAlg.uncertaintiesToolPD.JetDefinition = jetCollectionName[:-4]
249 jetUncertaintiesAlg.uncertaintiesToolPD.ConfigFile = configFile
250 if calibArea
is not None:
251 jetUncertaintiesAlg.uncertaintiesToolPD.CalibArea = calibArea
252 jetUncertaintiesAlg.uncertaintiesToolPD.MCType = mcType
253 jetUncertaintiesAlg.uncertaintiesToolPD.IsData =
True
254 jetUncertaintiesAlg.uncertaintiesToolPD.PseudoDataJERsmearingMode =
True
260 jetCollectionName=
"AntiKt4EMPFlowJets"
262 jetCollectionName=
"AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets"
265 collection_pattern = re.compile(
266 r"AntiKt(\d+)(EMTopo|EMPFlow|LCTopo|TrackCaloCluster|UFO|Track|HI)(TrimmedPtFrac5SmallR20|CSSKSoftDropBeta100Zcut10)?Jets")
267 match = collection_pattern.match(jetCollectionName)
270 "Jet collection {0} does not match expected pattern!".format(jetCollectionName) )
271 radius = int(match.group(1) )
272 if radius
not in [2, 4, 6, 10]:
273 raise ValueError(
"Jet collection has an unsupported radius '{0}'!".format(radius) )
275 if (self.analysisJetSelection!=
''):
276 alg = config.createAlgorithm(
'CP::NJetDecoratorAlg',
'NJetDecoratorAlg' )
278 alg.jetSelection = self.analysisJetSelection
279 config.addOutputVar(
'EventInfo',
'Njet_%SYS%',
'Njet')
283 alg = config.createAlgorithm(
'CP::JetUncertaintiesAlg',
'JetUncertaintiesAlg' )
287 alg.preselection = config.getPreselection (self.
containerName,
'')
290 if self.
jetInput ==
"UFO" and config.dataType()
in [DataType.FullSim, DataType.FastSim]:
291 alg = config.createAlgorithm(
'CP::JetUncertaintiesAlg',
'JetUncertaintiesAlg' )
294 alg.uncertaintiesTool.JetDefinition = jetCollectionName[:-4]
297 alg.outOfValidity = 2
298 alg.outOfValidityDeco =
'outOfValidity'
302 alg.preselection = config.getPreselection (self.
containerName,
'')
305 alg = config.createAlgorithm(
'CP::JetUncertaintiesAlg',
'JetUncertaintiesAlg' )
308 alg.outOfValidity = 2
309 alg.outOfValidityDeco =
'outOfValidity'
310 config.addPrivateTool(
'uncertaintiesTool',
'JetUncertaintiesTool' )
312 alg.uncertaintiesTool.JetDefinition = jetCollectionName[:-4]
313 alg.uncertaintiesTool.ConfigFile = \
314 "rel21/Moriond2018/R10_{0}Mass_all.config".format(self.largeRMass)
315 alg.uncertaintiesTool.MCType =
"MC16a"
316 alg.uncertaintiesTool.IsData = (config.dataType()
is DataType.Data)
320 alg.preselection = config.getPreselection (self.
containerName,
'')
321 config.addSelection (self.
containerName,
'',
'outOfValidity')