241 from Campaigns.Utils
import Campaign
243 log = logging.getLogger(
'makePileupAnalysisSequence')
245 eventInfoVar = [
'runNumber',
'eventNumber',
'actualInteractionsPerCrossing',
'averageInteractionsPerCrossing']
246 if config.dataType()
is not DataType.Data:
247 eventInfoVar += [
'mcChannelNumber']
252 eventInfoVar += [
'eventTypeBitmask']
256 log.info(f
'Physlite does not need pileup reweighting. Variables will be copied from input instead. {config.isPhyslite}')
257 for var
in eventInfoVar:
258 config.addOutputVar (
'EventInfo', var, var, noSys=
True)
260 if config.dataType()
is not DataType.Data:
261 config.addOutputVar (
'EventInfo',
'PileupWeight_%SYS%',
'weight_pileup', auxType=
'float')
262 if config.geometry()
is LHCPeriod.Run2:
263 config.addOutputVar (
'EventInfo',
'beamSpotWeight',
'weight_beamspot', noSys=
True)
267 if self.
files is None and config.flags
is not None:
268 self.
files = config.flags.Input.Files
270 campaign = self.campaign
273 if config.dataType()
is not DataType.Data
and self.campaign
is None:
275 if config.campaign()
is not None and config.campaign()
is not Campaign.Unknown:
276 campaign = config.campaign()
277 log.info(f
'Auto-configuring campaign for PRW from flags: {campaign.value}')
280 if self.
files is not None:
281 from Campaigns.Utils
import getMCCampaign
282 campaign = getMCCampaign(self.
files)
283 if campaign
and campaign
is not Campaign.Unknown:
284 log.info(f
'Auto-configuring campaign for PRW from files: {campaign.value}')
286 log.info(
'Campaign could not be determined.')
290 toolLumicalcFiles = []
294 if (config.dataType()
is not DataType.Data
and
295 config.geometry()
is not LHCPeriod.Run4):
297 if self.userPileupConfigs
is not None and self.userPileupConfigsPerCampaign
is not None:
298 raise ValueError(
'Both userPileupConfigs and userPileupConfigsPerCampaign specified, '
299 'use only one of the options!')
300 if self.userPileupConfigsPerCampaign
is not None:
302 raise Exception(
'userPileupConfigsPerCampaign requires campaign to be configured!')
303 if campaign
is Campaign.Unknown:
304 raise Exception(
'userPileupConfigsPerCampaign used, but campaign = Unknown!')
306 toolConfigFiles = self.userPileupConfigsPerCampaign[campaign.value][:]
307 log.info(
'Using user provided per-campaign PRW configuration')
308 except KeyError
as e:
309 raise KeyError(f
'Unconfigured campaign {e} for userPileupConfigsPerCampaign!')
311 elif self.userPileupConfigs
is not None:
312 toolConfigFiles = self.userPileupConfigs[:]
313 log.info(
'Using user provided PRW configuration')
317 raise ValueError(
'useDefaultConfig requires files to be configured! '
318 'Either pass them as an option or use flags.')
320 from PileupReweighting.AutoconfigurePRW
import getConfigurationFiles
321 if campaign
and campaign
is not Campaign.Unknown:
322 toolConfigFiles = getConfigurationFiles(campaign=campaign,
325 data_type=config.dataType())
327 log.info(
'Auto-configuring universal/default PRW config')
329 log.info(
'Auto-configuring per-sample PRW config files based on input files')
331 log.info(
'No campaign specified, no PRW config files configured')
334 if self.userLumicalcFilesPerCampaign
is not None and self.userLumicalcFiles
is not None:
335 raise ValueError(
'Both userLumicalcFiles and userLumicalcFilesYear specified, '
336 'use only one of the options!')
337 if self.userLumicalcFilesPerCampaign
is not None:
339 toolLumicalcFiles = self.userLumicalcFilesPerCampaign[campaign.value][:]
340 log.info(
'Using user-provided per-campaign lumicalc files')
341 except KeyError
as e:
342 raise KeyError(f
'Unconfigured campaign {e} for userLumicalcFilesPerCampaign!')
343 elif self.userLumicalcFiles
is not None:
344 toolLumicalcFiles = self.userLumicalcFiles[:]
345 log.info(
'Using user-provided lumicalc files')
347 if campaign
and campaign
is not Campaign.Unknown:
348 from PileupReweighting.AutoconfigurePRW
import getLumicalcFiles
349 toolLumicalcFiles = getLumicalcFiles(campaign)
350 log.info(
'Using auto-configured lumicalc files')
352 log.info(
'No campaign specified, no lumicalc files configured for PRW')
354 log.info(
'Data needs no lumicalc and PRW configuration files')
357 if config.geometry()
is LHCPeriod.Run4:
358 warnings.warn_explicit(
359 'Pileup reweighting is not yet supported for Run 4 geometry',
360 Run4FallbackWarning, filename=
'', lineno=0)
361 alg = config.createAlgorithm(
'CP::EventDecoratorAlg',
'EventDecoratorAlg' )
362 alg.uint32Decorations = {
'RandomRunNumber' :
363 config.flags.Input.RunNumbers[0] }
366 alg = config.createAlgorithm(
'CP::PileupReweightingAlg',
367 'PileupReweightingAlg' )
368 config.addPrivateTool(
'pileupReweightingTool',
'CP::PileupReweightingTool' )
369 alg.pileupReweightingTool.ConfigFiles = toolConfigFiles
370 if not toolConfigFiles
and config.dataType()
is not DataType.Data:
371 log.info(
"No PRW config files provided. Disabling reweighting")
373 alg.pileupWeightDecoration =
""
375 alg.pileupWeightDecoration =
"PileupWeight" + self.
postfix +
"_%SYS%"
376 alg.pileupReweightingTool.LumiCalcFiles = toolLumicalcFiles
377 alg.pileupReweightingTool.UnrepresentedDataWarningThreshold = (
378 self.unrepresentedDataWarningThreshold)
381 for var
in eventInfoVar:
382 config.addOutputVar (
'EventInfo', var, var, noSys=
True)
384 if config.dataType()
is not DataType.Data
and config.geometry()
is LHCPeriod.Run2:
385 config.addOutputVar (
'EventInfo',
'beamSpotWeight',
'weight_beamspot', noSys=
True)
387 if config.dataType()
is not DataType.Data
and toolConfigFiles:
388 config.addOutputVar (
'EventInfo',
'PileupWeight' + self.
postfix +
'_%SYS%',