432 def makeAlgs (self, config) :
433
434 if config.dataType() is DataType.Data:
435
436 return
437 log = logging.getLogger('makeGeneratorAnalysisSequence')
438
439
440 streamName = self.streamName or config.defaultHistogramStream()
441
442 if self.runNumber is None:
443 self.runNumber = config.runNumber()
444
445 if self.saveCutBookkeepers and not self.runNumber:
446 raise ValueError ("invalid run number: " + str(self.runNumber))
447
448
449 if self.saveCutBookkeepers:
450 alg = config.createAlgorithm('CP::AsgCutBookkeeperAlg', 'CutBookkeeperAlg')
451 alg.RootStreamName = streamName
452 alg.runNumber = self.runNumber
453 if self.cutBookkeepersSystematics is None:
454 alg.enableSystematics = not config.noSystematics()
455 else:
456 alg.enableSystematics = self.cutBookkeepersSystematics
457 if self.histPattern:
458 alg.histPattern = self.histPattern
459 config.addPrivateTool( 'truthWeightTool', 'PMGTools::PMGTruthWeightTool' )
460
461
462 alg = config.createAlgorithm( 'CP::PMGTruthWeightAlg', 'PMGTruthWeightAlg' )
463 config.addPrivateTool( 'truthWeightTool', 'PMGTools::PMGTruthWeightTool' )
464 alg.decoration = 'generatorWeight_%SYS%'
465 config.addOutputVar ('EventInfo', 'generatorWeight_%SYS%', 'weight_mc')
466
467 if self.detailedPDFinfo:
468 alg = config.createAlgorithm( 'CP::PDFinfoAlg', 'PDFinfoAlg', reentrant=True )
469 for var in ["PDFID1","PDFID2","PDGID1","PDGID2","Q","X1","X2","XF1","XF2"]:
470 config.addOutputVar ('EventInfo', var, 'PDFinfo_' + var, noSys=True)
471
472 if self.doPDFReweighting:
473 alg = config.createAlgorithm( 'CP::PDFReweightAlg', 'PDFReweightAlg', reentrant=True )
474
475 for pdf_set in self.outPDFName:
476 config.addOutputVar('EventInfo', f'PDFReweightSF_{pdf_set.replace("/", "_")}',
477 f'PDFReweightSF_{pdf_set.replace("/", "_")}', noSys=True)
478
479
480 if self.doHFProdFracReweighting:
481 generatorInfo = config.flags.Input.GeneratorsInfo
482 log.info(f"Loaded generator info: {generatorInfo}")
483
484 DSID = "000000"
485
486 if not generatorInfo:
487 warnings.warn_explicit(
488 "No generator info found.",
489 GeneratorWeightWarning, filename='', lineno=0)
490 DSID = "000000"
491 elif isinstance(generatorInfo, dict):
492 if "Pythia8" in generatorInfo:
493 DSID = "410470"
494 elif "Sherpa" in generatorInfo and "2.2.8" in generatorInfo["Sherpa"]:
495 DSID = "421152"
496 elif "Sherpa" in generatorInfo and "2.2.10" in generatorInfo["Sherpa"]:
497 DSID = "700122"
498 elif "Sherpa" in generatorInfo and "2.2.11" in generatorInfo["Sherpa"]:
499 warnings.warn_explicit(
500 "HF production fraction reweighting is not configured"
501 " for Sherpa 2.2.11. Using weights for Sherpa 2.2.10"
502 " instead.",
503 GeneratorWeightWarning, filename='', lineno=0)
504 DSID = "700122"
505 elif "Sherpa" in generatorInfo and "2.2.12" in generatorInfo["Sherpa"]:
506 warnings.warn_explicit(
507 "HF production fraction reweighting is not configured"
508 " for Sherpa 2.2.12. Using weights for Sherpa 2.2.10"
509 " instead.",
510 GeneratorWeightWarning, filename='', lineno=0)
511 DSID = "700122"
512 elif "Sherpa" in generatorInfo and "2.2.14" in generatorInfo["Sherpa"]:
513 warnings.warn_explicit(
514 "HF production fraction reweighting is not configured"
515 " for Sherpa 2.2.14. New weights need to be"
516 " calculated.",
517 GeneratorWeightWarning, filename='', lineno=0)
518 DSID = "000000"
519 elif "Sherpa" in generatorInfo and "2.2.1" in generatorInfo["Sherpa"]:
520 DSID = "410250"
521 elif "Herwig7" in generatorInfo and "7.1.3" in generatorInfo["Herwig7"]:
522 DSID = "411233"
523 elif "Herwig7" in generatorInfo and "7.2.1" in generatorInfo["Herwig7"]:
524 DSID = "600666"
525 elif "Herwig7" in generatorInfo and "7." in generatorInfo["Herwig7"]:
526 DSID = "410558"
527 elif "amc@NLO" in generatorInfo:
528 DSID = "410464"
529 else:
530 warnings.warn_explicit(
531 f"HF production fraction reweighting is not configured"
532 f" for this generator: {generatorInfo}."
533 f" New weights need to be calculated.",
534 GeneratorWeightWarning, filename='', lineno=0)
535 DSID = "000000"
536 else:
537 warnings.warn_explicit(
538 "Failed to determine generator from metadata",
539 GeneratorWeightWarning, filename='', lineno=0)
540 DSID = "000000"
541
542 log.info(f"Using HF production fraction weights calculated using DSID {DSID}")
543 if DSID == "000000":
544 warnings.warn_explicit(
545 "HF production fraction reweighting will return dummy"
546 " weights of 1.0",
547 GeneratorWeightWarning, filename='', lineno=0)
548
549 alg = config.createAlgorithm( 'CP::SysTruthWeightAlg', f'SysTruthWeightAlg_{streamName}' )
550 config.addPrivateTool( 'sysTruthWeightTool', 'PMGTools::PMGHFProductionFractionTool' )
551 alg.decoration = 'prodFracWeight_%SYS%'
552 alg.TruthParticleContainer = self.truthParticleContainer
553 alg.sysTruthWeightTool.ShowerGenerator = DSID
554 config.addOutputVar ('EventInfo', 'prodFracWeight_%SYS%', 'weight_HF_prod_frac')
555