246 from Campaigns.Utils
import Campaign
248 log = logging.getLogger(
'makePileupAnalysisSequence')
250 eventInfoVar = [(
'runNumber',
'unsigned'),
251 (
'eventNumber',
'unsigned_long'),
252 (
'actualInteractionsPerCrossing',
'float'),
253 (
'averageInteractionsPerCrossing',
'float')]
254 if config.dataType()
is not DataType.Data:
255 eventInfoVar += [(
'mcChannelNumber',
'unsigned')]
260 eventInfoVar += [(
'eventTypeBitmask',
'int')]
264 log.info(f
'Physlite does not need pileup reweighting. Variables will be copied from input instead. {config.isPhyslite}')
265 for var_name,var_type
in eventInfoVar:
266 config.addOutputVar (
'EventInfo', var_name, var_name, noSys=
True, auxType=var_type)
268 if config.dataType()
is not DataType.Data:
269 config.addOutputVar (
'EventInfo',
'PileupWeight_%SYS%',
'weight_pileup', auxType=
'float')
270 if config.geometry()
is LHCPeriod.Run2:
271 config.addOutputVar (
'EventInfo',
'beamSpotWeight',
'weight_beamspot', noSys=
True, auxType=
'float')
275 if self.
files is None and config.flags
is not None:
276 self.
files = config.flags.Input.Files
278 campaign = self.campaign
281 if config.dataType()
is not DataType.Data
and self.campaign
is None:
283 if config.campaign()
is not None and config.campaign()
is not Campaign.Unknown:
284 campaign = config.campaign()
285 log.info(f
'Auto-configuring campaign for PRW from flags: {campaign.value}')
288 if self.
files is not None:
289 from Campaigns.Utils
import getMCCampaign
290 campaign = getMCCampaign(self.
files)
291 if campaign
and campaign
is not Campaign.Unknown:
292 log.info(f
'Auto-configuring campaign for PRW from files: {campaign.value}')
294 log.info(
'Campaign could not be determined.')
298 toolLumicalcFiles = []
302 if (config.dataType()
is not DataType.Data
and
303 config.geometry()
is not LHCPeriod.Run4):
305 if self.userPileupConfigs
is not None and self.userPileupConfigsPerCampaign
is not None:
306 raise ValueError(
'Both userPileupConfigs and userPileupConfigsPerCampaign specified, '
307 'use only one of the options!')
308 if self.userPileupConfigsPerCampaign
is not None:
310 raise Exception(
'userPileupConfigsPerCampaign requires campaign to be configured!')
311 if campaign
is Campaign.Unknown:
312 raise Exception(
'userPileupConfigsPerCampaign used, but campaign = Unknown!')
314 toolConfigFiles = self.userPileupConfigsPerCampaign[campaign.value][:]
315 log.info(
'Using user provided per-campaign PRW configuration')
316 except KeyError
as e:
317 raise KeyError(f
'Unconfigured campaign {e} for userPileupConfigsPerCampaign!')
319 elif self.userPileupConfigs
is not None:
320 toolConfigFiles = self.userPileupConfigs[:]
321 log.info(
'Using user provided PRW configuration')
325 raise ValueError(
'useDefaultConfig requires files to be configured! '
326 'Either pass them as an option or use flags.')
328 from PileupReweighting.AutoconfigurePRW
import getConfigurationFiles
329 if campaign
and campaign
is not Campaign.Unknown:
330 toolConfigFiles = getConfigurationFiles(campaign=campaign,
333 data_type=config.dataType(),
334 GRLSuffixDict=self.GRLSuffixDict)
336 log.info(
'Auto-configuring universal/default PRW config')
338 log.info(
'Auto-configuring per-sample PRW config files based on input files')
340 log.info(
'No campaign specified, no PRW config files configured')
343 if self.userLumicalcFilesPerCampaign
is not None and self.userLumicalcFiles
is not None:
344 raise ValueError(
'Both userLumicalcFiles and userLumicalcFilesYear specified, '
345 'use only one of the options!')
346 if self.userLumicalcFilesPerCampaign
is not None:
348 toolLumicalcFiles = self.userLumicalcFilesPerCampaign[campaign.value][:]
349 log.info(
'Using user-provided per-campaign lumicalc files')
350 except KeyError
as e:
351 raise KeyError(f
'Unconfigured campaign {e} for userLumicalcFilesPerCampaign!')
352 elif self.userLumicalcFiles
is not None:
353 toolLumicalcFiles = self.userLumicalcFiles[:]
354 log.info(
'Using user-provided lumicalc files')
356 if campaign
and campaign
is not Campaign.Unknown:
357 from PileupReweighting.AutoconfigurePRW
import getLumicalcFiles
358 toolLumicalcFiles = getLumicalcFiles(campaign, self.GRLSuffixDict)
359 log.info(
'Using auto-configured lumicalc files')
361 log.info(
'No campaign specified, no lumicalc files configured for PRW')
363 log.info(
'Data needs no lumicalc and PRW configuration files')
366 if config.geometry()
is LHCPeriod.Run4:
367 warnings.warn_explicit(
368 'Pileup reweighting is not yet supported for Run 4 geometry',
369 Run4FallbackWarning, filename=
'', lineno=0)
370 alg = config.createAlgorithm(
'CP::EventDecoratorAlg',
'EventDecoratorAlg' )
371 alg.uint32Decorations = {
'RandomRunNumber' :
372 config.flags.Input.RunNumbers[0] }
375 alg = config.createAlgorithm(
'CP::PileupReweightingAlg',
376 'PileupReweightingAlg' )
377 config.addPrivateTool(
'pileupReweightingTool',
'CP::PileupReweightingTool' )
378 alg.pileupReweightingTool.ConfigFiles = toolConfigFiles
379 if not toolConfigFiles
and config.dataType()
is not DataType.Data:
380 log.info(
"No PRW config files provided. Disabling reweighting")
382 alg.pileupWeightDecoration =
""
384 alg.pileupWeightDecoration =
"PileupWeight" + self.
postfix +
"_%SYS%"
385 alg.pileupReweightingTool.LumiCalcFiles = toolLumicalcFiles
386 alg.pileupReweightingTool.UnrepresentedDataWarningThreshold = (
387 self.unrepresentedDataWarningThreshold)
390 for var_name,var_type
in eventInfoVar:
391 config.addOutputVar (
'EventInfo', var_name, var_name, noSys=
True, auxType=var_type)
393 if config.dataType()
is not DataType.Data
and config.geometry()
is LHCPeriod.Run2:
394 config.addOutputVar (
'EventInfo',
'beamSpotWeight',
'weight_beamspot', noSys=
True, auxType=
'float')
396 if config.dataType()
is not DataType.Data
and toolConfigFiles:
397 config.addOutputVar (
'EventInfo',
'PileupWeight' + self.
postfix +
'_%SYS%',
398 'weight_pileup'+self.
postfix, auxType=
'float')