244 from Campaigns.Utils
import Campaign
246 log = logging.getLogger(
'makePileupAnalysisSequence')
248 eventInfoVar = [(
'runNumber',
'unsigned'),
249 (
'eventNumber',
'unsigned_long'),
250 (
'actualInteractionsPerCrossing',
'float'),
251 (
'averageInteractionsPerCrossing',
'float')]
252 if config.dataType()
is not DataType.Data:
253 eventInfoVar += [(
'mcChannelNumber',
'unsigned')]
258 eventInfoVar += [(
'eventTypeBitmask',
'int')]
262 log.info(f
'Physlite does not need pileup reweighting. Variables will be copied from input instead. {config.isPhyslite}')
263 for var_name,var_type
in eventInfoVar:
264 config.addOutputVar (
'EventInfo', var_name, var_name, noSys=
True, auxType=var_type)
266 if config.dataType()
is not DataType.Data:
267 config.addOutputVar (
'EventInfo',
'PileupWeight_%SYS%',
'weight_pileup', auxType=
'float')
268 if config.geometry()
is LHCPeriod.Run2:
269 config.addOutputVar (
'EventInfo',
'beamSpotWeight',
'weight_beamspot', noSys=
True, auxType=
'float')
273 if self.
files is None and config.flags
is not None:
274 self.
files = config.flags.Input.Files
276 campaign = self.campaign
279 if config.dataType()
is not DataType.Data
and self.campaign
is None:
281 if config.campaign()
is not None and config.campaign()
is not Campaign.Unknown:
282 campaign = config.campaign()
283 log.info(f
'Auto-configuring campaign for PRW from flags: {campaign.value}')
286 if self.
files is not None:
287 from Campaigns.Utils
import getMCCampaign
288 campaign = getMCCampaign(self.
files)
289 if campaign
and campaign
is not Campaign.Unknown:
290 log.info(f
'Auto-configuring campaign for PRW from files: {campaign.value}')
292 log.info(
'Campaign could not be determined.')
296 toolLumicalcFiles = []
300 if (config.dataType()
is not DataType.Data
and
301 config.geometry()
is not LHCPeriod.Run4):
303 if self.userPileupConfigs
is not None and self.userPileupConfigsPerCampaign
is not None:
304 raise ValueError(
'Both userPileupConfigs and userPileupConfigsPerCampaign specified, '
305 'use only one of the options!')
306 if self.userPileupConfigsPerCampaign
is not None:
308 raise Exception(
'userPileupConfigsPerCampaign requires campaign to be configured!')
309 if campaign
is Campaign.Unknown:
310 raise Exception(
'userPileupConfigsPerCampaign used, but campaign = Unknown!')
312 toolConfigFiles = self.userPileupConfigsPerCampaign[campaign.value][:]
313 log.info(
'Using user provided per-campaign PRW configuration')
314 except KeyError
as e:
315 raise KeyError(f
'Unconfigured campaign {e} for userPileupConfigsPerCampaign!')
317 elif self.userPileupConfigs
is not None:
318 toolConfigFiles = self.userPileupConfigs[:]
319 log.info(
'Using user provided PRW configuration')
323 raise ValueError(
'useDefaultConfig requires files to be configured! '
324 'Either pass them as an option or use flags.')
326 from PileupReweighting.AutoconfigurePRW
import getConfigurationFiles
327 if campaign
and campaign
is not Campaign.Unknown:
328 toolConfigFiles = getConfigurationFiles(campaign=campaign,
331 data_type=config.dataType(),
332 GRLSuffixDict=self.GRLSuffixDict)
334 log.info(
'Auto-configuring universal/default PRW config')
336 log.info(
'Auto-configuring per-sample PRW config files based on input files')
338 log.info(
'No campaign specified, no PRW config files configured')
341 if self.userLumicalcFilesPerCampaign
is not None and self.userLumicalcFiles
is not None:
342 raise ValueError(
'Both userLumicalcFiles and userLumicalcFilesYear specified, '
343 'use only one of the options!')
344 if self.userLumicalcFilesPerCampaign
is not None:
346 toolLumicalcFiles = self.userLumicalcFilesPerCampaign[campaign.value][:]
347 log.info(
'Using user-provided per-campaign lumicalc files')
348 except KeyError
as e:
349 raise KeyError(f
'Unconfigured campaign {e} for userLumicalcFilesPerCampaign!')
350 elif self.userLumicalcFiles
is not None:
351 toolLumicalcFiles = self.userLumicalcFiles[:]
352 log.info(
'Using user-provided lumicalc files')
354 if campaign
and campaign
is not Campaign.Unknown:
355 from PileupReweighting.AutoconfigurePRW
import getLumicalcFiles
356 toolLumicalcFiles = getLumicalcFiles(campaign, self.GRLSuffixDict)
357 log.info(
'Using auto-configured lumicalc files')
359 log.info(
'No campaign specified, no lumicalc files configured for PRW')
361 log.info(
'Data needs no lumicalc and PRW configuration files')
364 if config.geometry()
is LHCPeriod.Run4:
365 warnings.warn_explicit(
366 'Pileup reweighting is not yet supported for Run 4 geometry',
367 Run4FallbackWarning, filename=
'', lineno=0)
368 alg = config.createAlgorithm(
'CP::EventDecoratorAlg',
'EventDecoratorAlg' )
369 alg.uint32Decorations = {
'RandomRunNumber' :
370 config.flags.Input.RunNumbers[0] }
373 alg = config.createAlgorithm(
'CP::PileupReweightingAlg',
374 'PileupReweightingAlg' )
375 config.addPrivateTool(
'pileupReweightingTool',
'CP::PileupReweightingTool' )
376 alg.pileupReweightingTool.ConfigFiles = toolConfigFiles
377 if not toolConfigFiles
and config.dataType()
is not DataType.Data:
378 log.info(
"No PRW config files provided. Disabling reweighting")
380 alg.pileupWeightDecoration =
""
382 alg.pileupWeightDecoration =
"PileupWeight" + self.
postfix +
"_%SYS%"
383 alg.pileupReweightingTool.LumiCalcFiles = toolLumicalcFiles
384 alg.pileupReweightingTool.UnrepresentedDataWarningThreshold = (
385 self.unrepresentedDataWarningThreshold)
388 for var_name,var_type
in eventInfoVar:
389 config.addOutputVar (
'EventInfo', var_name, var_name, noSys=
True, auxType=var_type)
391 if config.dataType()
is not DataType.Data
and config.geometry()
is LHCPeriod.Run2:
392 config.addOutputVar (
'EventInfo',
'beamSpotWeight',
'weight_beamspot', noSys=
True, auxType=
'float')
394 if config.dataType()
is not DataType.Data
and toolConfigFiles:
395 config.addOutputVar (
'EventInfo',
'PileupWeight' + self.
postfix +
'_%SYS%',
396 'weight_pileup'+self.
postfix, auxType=
'float')