411 def makeAlgs (self, config) :
412
413 if config.dataType() is DataType.Data:
414
415 return
416 log = logging.getLogger('makeGeneratorAnalysisSequence')
417
418 if self.runNumber is None:
419 self.runNumber = config.runNumber()
420
421 if self.saveCutBookkeepers and not self.runNumber:
422 raise ValueError ("invalid run number: " + str(self.runNumber))
423
424
425 if self.saveCutBookkeepers:
426 alg = config.createAlgorithm('CP::AsgCutBookkeeperAlg', 'CutBookkeeperAlg')
427 alg.RootStreamName = self.streamName
428 alg.runNumber = self.runNumber
429 if self.cutBookkeepersSystematics is None:
430 alg.enableSystematics = not config.noSystematics()
431 else:
432 alg.enableSystematics = self.cutBookkeepersSystematics
433 if self.histPattern:
434 alg.histPattern = self.histPattern
435 config.addPrivateTool( 'truthWeightTool', 'PMGTools::PMGTruthWeightTool' )
436
437
438 alg = config.createAlgorithm( 'CP::PMGTruthWeightAlg', 'PMGTruthWeightAlg' )
439 config.addPrivateTool( 'truthWeightTool', 'PMGTools::PMGTruthWeightTool' )
440 alg.decoration = 'generatorWeight_%SYS%'
441 config.addOutputVar ('EventInfo', 'generatorWeight_%SYS%', 'weight_mc')
442
443 if self.detailedPDFinfo:
444 alg = config.createAlgorithm( 'CP::PDFinfoAlg', 'PDFinfoAlg', reentrant=True )
445 for var in ["PDFID1","PDFID2","PDGID1","PDGID2","Q","X1","X2","XF1","XF2"]:
446 config.addOutputVar ('EventInfo', var, 'PDFinfo_' + var, noSys=True)
447
448 if self.doPDFReweighting:
449 alg = config.createAlgorithm( 'CP::PDFReweightAlg', 'PDFReweightAlg', reentrant=True )
450
451 for pdf_set in self.outPDFName:
452 config.addOutputVar('EventInfo', f'PDFReweightSF_{pdf_set.replace("/", "_")}',
453 f'PDFReweightSF_{pdf_set.replace("/", "_")}', noSys=True)
454
455
456 if self.doHFProdFracReweighting:
457 generatorInfo = config.flags.Input.GeneratorsInfo
458 log.info(f"Loaded generator info: {generatorInfo}")
459
460 DSID = "000000"
461
462 if not generatorInfo:
463 log.warning("No generator info found.")
464 DSID = "000000"
465 elif isinstance(generatorInfo, dict):
466 if "Pythia8" in generatorInfo:
467 DSID = "410470"
468 elif "Sherpa" in generatorInfo and "2.2.8" in generatorInfo["Sherpa"]:
469 DSID = "421152"
470 elif "Sherpa" in generatorInfo and "2.2.10" in generatorInfo["Sherpa"]:
471 DSID = "700122"
472 elif "Sherpa" in generatorInfo and "2.2.11" in generatorInfo["Sherpa"]:
473 log.warning("HF production fraction reweighting is not configured for Sherpa 2.2.11. Using weights for Sherpa 2.2.10 instead.")
474 DSID = "700122"
475 elif "Sherpa" in generatorInfo and "2.2.12" in generatorInfo["Sherpa"]:
476 log.warning("HF production fraction reweighting is not configured for Sherpa 2.2.12. Using weights for Sherpa 2.2.10 instead.")
477 DSID = "700122"
478 elif "Sherpa" in generatorInfo and "2.2.14" in generatorInfo["Sherpa"]:
479 log.warning("HF production fraction reweighting is not configured for Sherpa 2.2.14. New weights need to be calculated.")
480 DSID = "000000"
481 elif "Sherpa" in generatorInfo and "2.2.1" in generatorInfo["Sherpa"]:
482 DSID = "410250"
483 elif "Herwig7" in generatorInfo and "7.1.3" in generatorInfo["Herwig7"]:
484 DSID = "411233"
485 elif "Herwig7" in generatorInfo and "7.2.1" in generatorInfo["Herwig7"]:
486 DSID = "600666"
487 elif "Herwig7" in generatorInfo and "7." in generatorInfo["Herwig7"]:
488 DSID = "410558"
489 elif "amc@NLO" in generatorInfo:
490 DSID = "410464"
491 else:
492 log.warning(f"HF production fraction reweighting is not configured for this generator: {generatorInfo}")
493 log.warning("New weights need to be calculated.")
494 DSID = "000000"
495 else:
496 log.warning("Failed to determine generator from metadata")
497 DSID = "000000"
498
499 log.info(f"Using HF production fraction weights calculated using DSID {DSID}")
500 if DSID == "000000":
501 log.warning("HF production fraction reweighting will return dummy weights of 1.0")
502
503 alg = config.createAlgorithm( 'CP::SysTruthWeightAlg', 'SysTruthWeightAlg' + self.streamName )
504 config.addPrivateTool( 'sysTruthWeightTool', 'PMGTools::PMGHFProductionFractionTool' )
505 alg.decoration = 'prodFracWeight_%SYS%'
506 alg.TruthParticleContainer = self.truthParticleContainer
507 alg.sysTruthWeightTool.ShowerGenerator = DSID
508 config.addOutputVar ('EventInfo', 'prodFracWeight_%SYS%', 'weight_HF_prod_frac')
509