Newer
Older
# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
## Generators providing input events via the LHEF format (MC@NLO produces LHEF
## when used in connection with Herwig++, which is fine since this variable is
## just used to determine the input file dummy-naming strategy for C++ generators)
lhefGenerators = ["Lhef", # generic name: prefer to use the names below
"aMcAtNlo", "McAtNlo", "Powheg", "PowHel", "MadGraph", "CompHep", "CalcHep",
"Whizard", "MCFM", "JHU", "MEtop", "Charybdis", "Charybdis2",
"BlackMax", "QBH", "gg2ww", "gg2zz", "gg2vv", "HvyN", "VBFNLO", "FPMC", "ProtosLHEF"]
## A more general list of generators which provide partonic input, including non-LHEF ones
inputGenerators = lhefGenerators + ["Alpgen", "Protos"]
## "Main" generators which typically model QCD showers, hadronisation, decays, etc.
## Herwig family, including Herwig++
mainGenerators = ["Herwig", "Herwigpp", "Jimmy", "Herwig7", "Matchig", "Pomwig"]
## Pythia family, including Pythia8
mainGenerators += ["Pythia", "PythiaB"]
mainGenerators += ["PythiaRhad", "PythiaChL", "PythiaGS", "PythiaResMod", "PythiaTopMdiff"]
mainGenerators += ["Pythia8", "Pythia8B"]
## Sherpa family
mainGenerators += ["Sherpa", "Sherpa22"]
## Soft QCD generators
mainGenerators += ["Exhume", "Phojet", "Epos", "QGSJet"]
## ATLAS-specific generators
mainGenerators += ["ParticleGenerator", "ParticleGun"]
mainGenerators += ["CosmicGenerator", "BeamHaloGenerator"]
## Heavy ion generators
mainGenerators += ["Starlight", "Hijing", "Hydjet", "Reldis", "Pyquen"]
## Misc generators
mainGenerators += ["AcerMC", "TopRex", "LPair"]
## Reading in fully-formed events
mainGenerators += ["HepMCAscii"]
## Special QED and decay afterburners
afterburnerGenerators = ["Photos", "Photospp", "Tauola", "TauolaPP", "Tauolapp", "EvtGen", "ParticleDecayer"]
# note: we have to use TauolaPP, because Tauolapp is used as a namespace in the external Tauolapp code
## Set up list of allowed generators. The evgenConfig.generators list will be used
## to set random seeds, determine input config and event files, and report used generators to AMI.
knownGenerators = inputGenerators + mainGenerators + afterburnerGenerators
## Note which generators should NOT be sanity tested by the TestHepMC alg
notesthepmcGenerators = ["ParticleDecayer", "ParticleGun", "CosmicGenerator", "BeamHaloGenerator", "FPMC",
"Hijing", "Hydjet", "Starlight", "PythiaRhad"]
## Generators with no flexibility/concept of a tune or PDF choice
notuneGenerators = ["ParticleGenerator", "ParticleGun", "CosmicGenerator", "BeamHaloGenerator", "HepMCAscii"]
def gen_require_steering(gennames):
"Return a boolean of whether this set of generators requires the steering command line flag"
if not "EvtGen" in gennames: return False
if any(("Pythia" in gen and not "Pythia8" in gen) for gen in gennames): return True
if any(("Herwig" in gen and not "Herwigpp" in gen and not "Herwig7" in gen) for gen in gennames): return True
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
return False
def gen_known(genname):
"Return whether a generator name is known"
return genname in knownGenerators
def gens_known(gennames):
"Return whether all generator names are known"
return all(gen_known(g) for g in gennames)
def gen_lhef(genname):
"Return whether a generator uses LHEF input files"
return genname in lhefGenerators
def gens_lhef(gennames):
"Return whether any of the generators uses LHEF input files"
return any(gen_lhef(g) for g in gennames)
def gen_testhepmc(genname):
"Return whether a generator should be sanity tested with TestHepMC"
return genname not in notesthepmcGenerators
def gens_testhepmc(gennames):
"Return whether all of the generators should be sanity tested with TestHepMC"
return all(gen_testhepmc(g) for g in gennames)
def gen_notune(genname):
"Return whether a generator is allowed to not provide PDF and tune information"
return genname not in notuneGenerators
def gens_notune(gennames):
"Return whether all of the generators are allowed to not provide PDF and tune information"
return all(gen_notune(g) for g in gennames)
def gen_sortkey(genname):
"Return a key suitable for sorting a generator name by stage, then alphabetically"
## Sort mainly in order of generator stage
genstage = None
for istage, gens in enumerate([inputGenerators, mainGenerators, afterburnerGenerators]):
if genname in gens:
genstage = istage
break
## Make sure JIMMY sorts after HERWIG
isjimmy = (genname == "Jimmy")
## Any special treatment for Photos, Tauola, EvtGen?
## Return a tuple
return (genstage, isjimmy, genname)
from PyJobTransformsCore.TransformConfig import *
class EvgenConfig(TransformConfig):
__slots__ = ()
generators = ListOfStrings("List of used generators", allowedValues=knownGenerators)
description = String("Human readable description of the dataset content")
process = String("Specific information about the physics process being generated")
notes = String("Extra information about this process e.g. known current problems")
contact = ListOfStrings("Contact person for this dataset. Leave empty for 'MC group'")
keywords = ListOfStrings("Search keywords for this dataset, e.g. 'QCD', 'EW', 'minbias', ...")
inputfilecheck = String("A regex to check that the input file needed for some generators has a valid name")
inputconfcheck = String("A regex to check that the config file needed for some generators has a valid name")
specialConfig = String("Special configuration for subsequent prod steps")
tune = String("Generator shower/hadronisation/MPI tune name")
saveJets = Boolean("Save truth jet collections in the output file if they are available", False)
findJets = Boolean("Schedule jet finding algorithms for each defined jet container", False)
doNotSaveItems = ListOfStrings("List of StreamEVGEN items to NOT save in output file - note occurs BEFORE extraSaveItems are added")
extraSaveItems = ListOfStrings("List of extra StreamEVGEN items to save in output file - note occurs AFTER doNotSaveItems are removed")
def __init__(self, name="evgenConfig"):
TransformConfig.__init__(self, name)
self.contact = ["MC group"]
self.auxfiles = ["PDGTABLE.MeV", "pdt.table", "DECAY.DEC", "Bdecays0.dat", "Bs2Jpsiphi.DEC","G4particle_whitelist.txt","susyParticlePdgid.txt"]
self.minevents = 5000
self.maxeventsstrategy = "ABORT"
self.specialConfig = "NONE"
## Explicitly block MC11/12 settings of efficiency, input*base, or weighting attrs
def __setattr__(self, name, value):
if name in ["efficiency", "inputfilebase", "inputconfbase", "weighting"]:
msg = "evgenConfig.%s is not used in MC14 production. " % name + \
"Please update your JO file, having read the docs at " + \
"https://twiki.cern.ch/twiki/bin/viewauth/AtlasProtected/AtlasMcProductionMC14"
raise TransformConfigError(msg)
object.__setattr__(self, name, value)
evgenConfig = EvgenConfig()