69 config_file =
"R4_AllNuisanceParameters_AllJERNP.config"
73 "Invalid uncertainty configuration - Scenario* systematicsModelJESs can "
74 "only be used together with the Simple systematicsModelJER")
80 "Invalid combination of systematicsModelJES and systematicsModelJER settings: "
85 if self.uncertToolCalibArea
is not None:
86 calib_area = self.uncertToolCalibArea
89 if self.uncertToolConfigPath
is not None:
90 config_file = self.uncertToolConfigPath
92 if config.geometry()
is LHCPeriod.Run2:
93 if config.dataType()
is DataType.FastSim:
94 config_file =
"rel22/Fall2024_PreRec/" + config_file
97 config_file =
"HIJetUncertainties/Spring2023/HI" + config_file
99 config_file =
"rel22/Summer2023_PreRec/" + config_file
101 if config.dataType()
is DataType.FastSim:
102 config_file =
"rel22/Winter2025_AF3_PreRec/" + config_file
105 config_file =
"HIJetUncertainties/Spring2023/HI" + config_file
107 config_file =
"rel22/Winter2025_PreRec/" + config_file
111 if self.uncertToolMCType
is not None:
112 mc_type = self.uncertToolMCType
114 if config.geometry()
is LHCPeriod.Run2:
115 if config.dataType()
is DataType.FastSim:
120 if config.dataType()
is DataType.FastSim:
128 return config_file, calib_area, mc_type
143 config.addPrivateTool(
'uncertaintiesTool',
'JetUncertaintiesTool' )
144 jetUncertaintiesAlg.uncertaintiesTool.JetDefinition = jetCollectionName[:-4]
145 jetUncertaintiesAlg.uncertaintiesTool.ConfigFile = configFile
146 if calibArea
is not None:
147 jetUncertaintiesAlg.uncertaintiesTool.CalibArea = calibArea
148 jetUncertaintiesAlg.uncertaintiesTool.MCType = mcType
149 jetUncertaintiesAlg.uncertaintiesTool.IsData = (config.dataType()
is DataType.Data)
150 jetUncertaintiesAlg.uncertaintiesTool.PseudoDataJERsmearingMode =
False
154 jetUncertaintiesAlg.affectingSystematicsFilter =
'.*'
157 config.addPrivateTool(
'uncertaintiesToolPD',
'JetUncertaintiesTool' )
158 jetUncertaintiesAlg.uncertaintiesToolPD.JetDefinition = jetCollectionName[:-4]
159 jetUncertaintiesAlg.uncertaintiesToolPD.ConfigFile = configFile
160 if calibArea
is not None:
161 jetUncertaintiesAlg.uncertaintiesToolPD.CalibArea = calibArea
162 jetUncertaintiesAlg.uncertaintiesToolPD.MCType = mcType
165 jetUncertaintiesAlg.uncertaintiesToolPD.IsData =
True
166 jetUncertaintiesAlg.uncertaintiesToolPD.PseudoDataJERsmearingMode =
True
173 log = logging.getLogger(
'LargeRJetAnalysisConfig')
181 "Invalid request for systematicsModelJER/JMS settings: "
182 "systematicsModelJER = '{0}', "
184 if self.uncertToolConfigPath
is not None:
186 config_file = self.uncertToolConfigPath
188 if config.geometry()
in [LHCPeriod.Run2, LHCPeriod.Run3]:
189 config_file =
"rel22/Summer2025_PreRec/" + config_file
191 log.warning(
"Uncertainties for UFO jets are not for Run 4!")
195 if self.uncertToolCalibArea
is not None:
196 calib_area = self.uncertToolCalibArea
199 if self.uncertToolMCType
is not None:
200 mc_type = self.uncertToolMCType
202 if config.dataType()
is DataType.FastSim:
203 if config.geometry()
is LHCPeriod.Run2:
208 if config.geometry()
is LHCPeriod.Run2:
213 return config_file, calib_area, mc_type
217 Create instance(s) of JetUncertaintiesTool following JetETmiss recommendations.
219 JER uncertainties under the "Full" scheme must be run on MC samples twice:
221 2. Pseudodata (PD) mode, as if the events are Data.
228 config.addPrivateTool(
'uncertaintiesTool',
'JetUncertaintiesTool' )
229 jetUncertaintiesAlg.uncertaintiesTool.JetDefinition = jetCollectionName[:-4]
230 jetUncertaintiesAlg.uncertaintiesTool.ConfigFile = configFile
231 from PathResolver
import PathResolver
232 if self.analysisFile
is not None:
234 if calibArea
is not None:
235 jetUncertaintiesAlg.uncertaintiesTool.CalibArea = calibArea
236 jetUncertaintiesAlg.uncertaintiesTool.MCType = mcType
237 jetUncertaintiesAlg.uncertaintiesTool.IsData = (config.dataType()
is DataType.Data)
238 jetUncertaintiesAlg.uncertaintiesTool.PseudoDataJERsmearingMode =
False
239 jetUncertaintiesAlg.uncertaintiesTool.NJetAccessorName =
"Njet_NOSYS"
242 if config.dataType()
is DataType.Data
and not (config.isPhyslite()
and doPseudoData
and self.
runJERsystematicsOnData):
244 jetUncertaintiesAlg.affectingSystematicsFilter =
'.*'
246 if config.dataType()
is not (DataType.Data
and config.isPhyslite())
and doPseudoData
and not self.
runJERsystematicsOnData:
248 config.addPrivateTool(
'uncertaintiesToolPD',
'JetUncertaintiesTool' )
249 jetUncertaintiesAlg.uncertaintiesToolPD.JetDefinition = jetCollectionName[:-4]
250 jetUncertaintiesAlg.uncertaintiesToolPD.ConfigFile = configFile
251 if calibArea
is not None:
252 jetUncertaintiesAlg.uncertaintiesToolPD.CalibArea = calibArea
253 jetUncertaintiesAlg.uncertaintiesToolPD.MCType = mcType
254 jetUncertaintiesAlg.uncertaintiesToolPD.IsData =
True
255 jetUncertaintiesAlg.uncertaintiesToolPD.PseudoDataJERsmearingMode =
True
261 jetCollectionName=
"AntiKt4EMPFlowJets"
263 jetCollectionName=
"AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets"
266 collection_pattern = re.compile(
267 r"AntiKt(\d+)(EMTopo|EMPFlow|LCTopo|TrackCaloCluster|UFO|Track|HI)(TrimmedPtFrac5SmallR20|CSSKSoftDropBeta100Zcut10)?Jets")
268 match = collection_pattern.match(jetCollectionName)
271 "Jet collection {0} does not match expected pattern!".format(jetCollectionName) )
272 radius = int(match.group(1) )
273 if radius
not in [2, 4, 6, 10]:
274 raise ValueError(
"Jet collection has an unsupported radius '{0}'!".format(radius) )
276 if (self.analysisJetSelection!=
''):
277 alg = config.createAlgorithm(
'CP::NJetDecoratorAlg',
'NJetDecoratorAlg' )
279 alg.jetSelection = self.analysisJetSelection
280 config.addOutputVar(
'EventInfo',
'Njet_%SYS%',
'Njet')
284 alg = config.createAlgorithm(
'CP::JetUncertaintiesAlg',
'JetUncertaintiesAlg' )
288 alg.preselection = config.getPreselection (self.
containerName,
'')
291 if self.
jetInput ==
"UFO" and config.dataType()
in [DataType.FullSim, DataType.FastSim]:
292 alg = config.createAlgorithm(
'CP::JetUncertaintiesAlg',
'JetUncertaintiesAlg' )
295 alg.uncertaintiesTool.JetDefinition = jetCollectionName[:-4]
298 alg.outOfValidity = 2
299 alg.outOfValidityDeco =
'outOfValidity'
303 alg.preselection = config.getPreselection (self.
containerName,
'')
306 alg = config.createAlgorithm(
'CP::JetUncertaintiesAlg',
'JetUncertaintiesAlg' )
309 alg.outOfValidity = 2
310 alg.outOfValidityDeco =
'outOfValidity'
311 config.addPrivateTool(
'uncertaintiesTool',
'JetUncertaintiesTool' )
313 alg.uncertaintiesTool.JetDefinition = jetCollectionName[:-4]
314 alg.uncertaintiesTool.ConfigFile = \
315 "rel21/Moriond2018/R10_{0}Mass_all.config".format(self.largeRMass)
316 alg.uncertaintiesTool.MCType =
"MC16a"
317 alg.uncertaintiesTool.IsData = (config.dataType()
is DataType.Data)
321 alg.preselection = config.getPreselection (self.
containerName,
'')
322 config.addSelection (self.
containerName,
'',
'outOfValidity')