241 from Campaigns.Utils
import Campaign
243 log = logging.getLogger(
'makePileupAnalysisSequence')
245 eventInfoVar = [(
'runNumber',
'unsigned'),
246 (
'eventNumber',
'unsigned_long'),
247 (
'actualInteractionsPerCrossing',
'float'),
248 (
'averageInteractionsPerCrossing',
'float')]
249 if config.dataType()
is not DataType.Data:
250 eventInfoVar += [(
'mcChannelNumber',
'unsigned')]
255 eventInfoVar += [(
'eventTypeBitmask',
'int')]
259 log.info(f
'Physlite does not need pileup reweighting. Variables will be copied from input instead. {config.isPhyslite}')
260 for var_name,var_type
in eventInfoVar:
261 config.addOutputVar (
'EventInfo', var_name, var_name, noSys=
True, auxType=var_type)
263 if config.dataType()
is not DataType.Data:
264 config.addOutputVar (
'EventInfo',
'PileupWeight_%SYS%',
'weight_pileup', auxType=
'float')
265 if config.geometry()
is LHCPeriod.Run2:
266 config.addOutputVar (
'EventInfo',
'beamSpotWeight',
'weight_beamspot', noSys=
True, auxType=
'float')
270 if self.
files is None and config.flags
is not None:
271 self.
files = config.flags.Input.Files
273 campaign = self.campaign
276 if config.dataType()
is not DataType.Data
and self.campaign
is None:
278 if config.campaign()
is not None and config.campaign()
is not Campaign.Unknown:
279 campaign = config.campaign()
280 log.info(f
'Auto-configuring campaign for PRW from flags: {campaign.value}')
283 if self.
files is not None:
284 from Campaigns.Utils
import getMCCampaign
285 campaign = getMCCampaign(self.
files)
286 if campaign
and campaign
is not Campaign.Unknown:
287 log.info(f
'Auto-configuring campaign for PRW from files: {campaign.value}')
289 log.info(
'Campaign could not be determined.')
293 toolLumicalcFiles = []
297 if (config.dataType()
is not DataType.Data
and
298 config.geometry()
is not LHCPeriod.Run4):
300 if self.userPileupConfigs
is not None and self.userPileupConfigsPerCampaign
is not None:
301 raise ValueError(
'Both userPileupConfigs and userPileupConfigsPerCampaign specified, '
302 'use only one of the options!')
303 if self.userPileupConfigsPerCampaign
is not None:
305 raise Exception(
'userPileupConfigsPerCampaign requires campaign to be configured!')
306 if campaign
is Campaign.Unknown:
307 raise Exception(
'userPileupConfigsPerCampaign used, but campaign = Unknown!')
309 toolConfigFiles = self.userPileupConfigsPerCampaign[campaign.value][:]
310 log.info(
'Using user provided per-campaign PRW configuration')
311 except KeyError
as e:
312 raise KeyError(f
'Unconfigured campaign {e} for userPileupConfigsPerCampaign!')
314 elif self.userPileupConfigs
is not None:
315 toolConfigFiles = self.userPileupConfigs[:]
316 log.info(
'Using user provided PRW configuration')
320 raise ValueError(
'useDefaultConfig requires files to be configured! '
321 'Either pass them as an option or use flags.')
323 from PileupReweighting.AutoconfigurePRW
import getConfigurationFiles
324 if campaign
and campaign
is not Campaign.Unknown:
325 toolConfigFiles = getConfigurationFiles(campaign=campaign,
328 data_type=config.dataType())
330 log.info(
'Auto-configuring universal/default PRW config')
332 log.info(
'Auto-configuring per-sample PRW config files based on input files')
334 log.info(
'No campaign specified, no PRW config files configured')
337 if self.userLumicalcFilesPerCampaign
is not None and self.userLumicalcFiles
is not None:
338 raise ValueError(
'Both userLumicalcFiles and userLumicalcFilesYear specified, '
339 'use only one of the options!')
340 if self.userLumicalcFilesPerCampaign
is not None:
342 toolLumicalcFiles = self.userLumicalcFilesPerCampaign[campaign.value][:]
343 log.info(
'Using user-provided per-campaign lumicalc files')
344 except KeyError
as e:
345 raise KeyError(f
'Unconfigured campaign {e} for userLumicalcFilesPerCampaign!')
346 elif self.userLumicalcFiles
is not None:
347 toolLumicalcFiles = self.userLumicalcFiles[:]
348 log.info(
'Using user-provided lumicalc files')
350 if campaign
and campaign
is not Campaign.Unknown:
351 from PileupReweighting.AutoconfigurePRW
import getLumicalcFiles
352 toolLumicalcFiles = getLumicalcFiles(campaign)
353 log.info(
'Using auto-configured lumicalc files')
355 log.info(
'No campaign specified, no lumicalc files configured for PRW')
357 log.info(
'Data needs no lumicalc and PRW configuration files')
360 if config.geometry()
is LHCPeriod.Run4:
361 warnings.warn_explicit(
362 'Pileup reweighting is not yet supported for Run 4 geometry',
363 Run4FallbackWarning, filename=
'', lineno=0)
364 alg = config.createAlgorithm(
'CP::EventDecoratorAlg',
'EventDecoratorAlg' )
365 alg.uint32Decorations = {
'RandomRunNumber' :
366 config.flags.Input.RunNumbers[0] }
369 alg = config.createAlgorithm(
'CP::PileupReweightingAlg',
370 'PileupReweightingAlg' )
371 config.addPrivateTool(
'pileupReweightingTool',
'CP::PileupReweightingTool' )
372 alg.pileupReweightingTool.ConfigFiles = toolConfigFiles
373 if not toolConfigFiles
and config.dataType()
is not DataType.Data:
374 log.info(
"No PRW config files provided. Disabling reweighting")
376 alg.pileupWeightDecoration =
""
378 alg.pileupWeightDecoration =
"PileupWeight" + self.
postfix +
"_%SYS%"
379 alg.pileupReweightingTool.LumiCalcFiles = toolLumicalcFiles
380 alg.pileupReweightingTool.UnrepresentedDataWarningThreshold = (
381 self.unrepresentedDataWarningThreshold)
384 for var_name,var_type
in eventInfoVar:
385 config.addOutputVar (
'EventInfo', var_name, var_name, noSys=
True, auxType=var_type)
387 if config.dataType()
is not DataType.Data
and config.geometry()
is LHCPeriod.Run2:
388 config.addOutputVar (
'EventInfo',
'beamSpotWeight',
'weight_beamspot', noSys=
True, auxType=
'float')
390 if config.dataType()
is not DataType.Data
and toolConfigFiles:
391 config.addOutputVar (
'EventInfo',
'PileupWeight' + self.
postfix +
'_%SYS%',
392 'weight_pileup'+self.
postfix, auxType=
'float')