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