6from .
import Herwig7Utils
as hw7Utils
9from MCJobOptionUtils.JOsupport
import check_reset_proc_number
12from AthenaCommon
import Logging
13athMsgLog = Logging.logging.getLogger(
'Herwig7Config')
19 def __init__(self, genSeq, runArgs, run_name="Herwig"):
22 check_reset_proc_number(runArgs)
40 self.
commands = hw7Utils.ConfigurationCommands()
46## =========================================
47## Global Pre-Commands from Herwig7Config.py
48## =========================================
50## ensure JetFinder uses AntiKt with R=0.4
51set /Herwig/Cuts/JetFinder:Variant AntiKt
52set /Herwig/Cuts/JetFinder:ConeRadius 0.4
66## Random number generator seed
67set /Herwig/Random:Seed {}
68""".format(self.
runArgs.randomSeed))
75## Commands for lepton-lepton collisions
76read snippets/EECollider.in
77set /Herwig/Shower/PartnerFinder:QEDPartner IIandFF
78set /Herwig/Shower/ShowerHandler:MPIHandler NULL
79set /Herwig/DipoleShower/DipoleShowerHandler:MPIHandler NULL
80set /Herwig/Shower/PowhegShowerHandler:MPIHandler NULL
82 elif self.
beams ==
"EP":
84## Commands for proton-lepton collisions
85read snippets/EPCollider.in
86do /Herwig/Shower/SplittingGenerator:DeleteFinalSplitting e-->e-,gamma; /Herwig/Shower/LtoLGammaSudakov
87do /Herwig/Shower/SplittingGenerator:DeleteFinalSplitting mu-->mu-,gamma; /Herwig/Shower/LtoLGammaSudakov
88do /Herwig/Shower/SplittingGenerator:DeleteFinalSplitting tau-->tau-,gamma; /Herwig/Shower/LtoLGammaSudakov
89set /Herwig/Shower/KinematicsReconstructor:ReconstructionOption Colour
93## Commands for proton-proton collisions
94read snippets/PPCollider.in
111## Center-of-mass energy
112set /Herwig/Generators/EventGenerator:EventHandler:LuminosityFunction:Energy {}
113""".format(self.
runArgs.ecmEnergy))
123## Verbosity and printout settings
124set /Herwig/Generators/EventGenerator:DebugLevel 1
125set /Herwig/Generators/EventGenerator:PrintEvent 2
126set /Herwig/Generators/EventGenerator:UseStdout Yes
127set /Herwig/Generators/EventGenerator:NumberOfEvents 1000000000
128set /Herwig/Generators/EventGenerator:MaxErrors 500
130## Make sampler print out cross sections for each subprocess
131set /Herwig/Samplers/Sampler:Verbose Yes
144 paramlist.append(
"## Masses and widths: PDG 2019 values")
147 from EvgenProdTools.offline_dict
import parameters
148 for k,v
in parameters.items():
150 for key,value
in v.items():
152 paramlist.append(
"set /Herwig/Particles/"+value[
'name']+
"+:NominalMass "+value[
'mass'])
153 paramlist.append(
"set /Herwig/Particles/"+value[
'name']+
"+:Width "+value[
'width'])
154 paramlist.append(
"set /Herwig/Particles/"+value[
'name']+
"-:NominalMass "+value[
'mass'])
155 paramlist.append(
"set /Herwig/Particles/"+value[
'name']+
"-:Width "+value[
'width'])
157 paramlist.append(
"set /Herwig/Particles/"+value[
'name']+
"0:NominalMass "+value[
'mass'])
158 paramlist.append(
"set /Herwig/Particles/"+value[
'name']+
"0:Width "+value[
'width'])
160 paramlist.append(
"set /Herwig/Particles/"+value[
'name']+
"bar:NominalMass "+value[
'mass'])
161 paramlist.append(
"set /Herwig/Particles/"+value[
'name']+
"bar:Width "+value[
'width'])
162 paramlist.append(
"set /Herwig/Particles/"+value[
'name']+
":NominalMass "+value[
'mass'])
163 paramlist.append(
"set /Herwig/Particles/"+value[
'name']+
":Width "+value[
'width'])
166 if k ==
'EW_parameters':
167 for key,value
in v.items():
168 if key[2] ==
"Sin2ThetaW":
169 paramlist.append(
"set /Herwig/Model:EW/"+
str(key[2])+
" "+
str(value))
170 paramstring =
'\n'.join(paramlist)
177## Masses and widths: PDG 2010 values (except TOP mass; kept at PDG2007)
180set /Herwig/Particles/t:NominalMass 172.5*GeV
181set /Herwig/Particles/tbar:NominalMass 172.5*GeV
183set /Herwig/Particles/W+:NominalMass 80.399*GeV
184set /Herwig/Particles/W-:NominalMass 80.399*GeV
185set /Herwig/Particles/W+:Width 2.085*GeV
186set /Herwig/Particles/W-:Width 2.085*GeV
188set /Herwig/Particles/Z0:NominalMass 91.1876*GeV
189set /Herwig/Particles/Z0:Width 2.4952*GeV
191set /Herwig/Particles/b:NominalMass 4.95*GeV
192set /Herwig/Particles/bbar:NominalMass 4.95*GeV
195set /Herwig/Model:EW/Sin2ThetaW 0.23113
203## Disable default attempts to use Pomeron PDF data files, until we're worked how to do that on the Grid!
204set /Herwig/Particles/pomeron:PDF /Herwig/Partons/NoPDF
206## Set long-lived particles stable
207set /Herwig/Decays/DecayHandler:MaxLifeTime 10*mm
223 if order
not in [
"LO",
"NLO"]:
224 raise RuntimeError(hw7Utils.ansi_format_error(
"Parameter 'order' must either be 'LO' or 'NLO'!"))
227## Configure {0} AlphaS for the hard process
228## (LO: 1-loop-running / NLO: 2-loop running)
229set /Herwig/Couplings/{0}AlphaS:input_scale {1}
230set /Herwig/Couplings/{0}AlphaS:input_alpha_s {2}
231set /Herwig/Model:QCD/RunningAlphaS /Herwig/Couplings/{0}AlphaS
232""".format(order, scale, value)
243 if order
not in [
"LO",
"NLO"]:
244 raise RuntimeError(hw7Utils.ansi_format_error(
"Parameter 'order' must either be 'LO' or 'NLO'!"))
249## Configure {0} PDF set for the hard process
250set /Herwig/Partons/Hard{0}PDF:PDFName {1}
251set /Herwig/Partons/Hard{0}PDF:Member {2}
252set /Herwig/Partons/Hard{0}PDF:MaxFlav {3}
253set /Herwig/Partons/Hard{0}PDF:RemnantHandler /Herwig/Partons/HadronRemnants
254set /Herwig/Particles/p+:PDF /Herwig/Partons/Hard{0}PDF
255set /Herwig/Particles/pbar-:PDF /Herwig/Partons/Hard{0}PDF
256set /Herwig/Partons/PPExtractor:FirstPDF /Herwig/Partons/Hard{0}PDF
257set /Herwig/Partons/PPExtractor:SecondPDF /Herwig/Partons/Hard{0}PDF
258""".format(order, name, member, max_flav)
269 if order
not in [
"LO",
"NLO"]:
270 raise RuntimeError(hw7Utils.ansi_format_error(
"Parameter 'order' must either be 'LO' or 'NLO'!"))
276## Configure {0} PDF set for the parton shower
277set /Herwig/Partons/Shower{0}PDF:PDFName {1}
278set /Herwig/Partons/Shower{0}PDF:Member {2}
279set /Herwig/Partons/Shower{0}PDF:MaxFlav {3}
280set /Herwig/Shower/ShowerHandler:PDFA /Herwig/Partons/Shower{0}PDF
281set /Herwig/Shower/ShowerHandler:PDFB /Herwig/Partons/Shower{0}PDF
282set /Herwig/Shower/PowhegShowerHandler:PDFA /Herwig/Partons/Shower{0}PDF
283set /Herwig/Shower/PowhegShowerHandler:PDFB /Herwig/Partons/Shower{0}PDF
284set /Herwig/DipoleShower/DipoleShowerHandler:PDFA /Herwig/Partons/Shower{0}PDF
285set /Herwig/DipoleShower/DipoleShowerHandler:PDFB /Herwig/Partons/Shower{0}PDF
286""".format(order, name, member, max_flav)
300set /Herwig/Partons/MPIPDF:PDFName {}
301set /Herwig/Partons/MPIPDF:Member {}
302set /Herwig/Partons/MPIPDF:MaxFlav {}
303""".format(name, member, max_flav)
314## Configure Remnant PDF
315set /Herwig/Partons/RemnantPDF:PDFName {}
316set /Herwig/Partons/RemnantPDF:Member {}
317set /Herwig/Partons/RemnantPDF:MaxFlav {}
318""".format(name, member, max_flav)
341## Parton shower / hadronization tune settings
360## Underlying event tune settings
375 cmt_path = os.environ.get(
"CMAKE_PREFIX_PATH")
376 cmt_dir = os.environ.get(
"BINARY_TAG")
378 cmtPaths = cmt_path.split(
':')
380 for path
in cmtPaths:
381 pathNow = path +
"/InstallArea/" + cmt_dir +
"/share/"
383 fileList = os.listdir(pathNow)
386 if "HerwigDefaults.rpo" in fileList:
387 simSharePath = pathNow
389 dpdf_path = os.path.dirname(os.path.normpath(os.path.join(simSharePath, os.readlink(simSharePath +
'HerwigDefaults.rpo')))) +
"/PDF/diffraction/"
400 cmds +=
"set /Herwig/Partons/PomeronPDF:RootName %s\n" % dpdf_path
401 cmds +=
"set /Herwig/Partons/PomeronFlux:PDFFit %s\n" % flux
402 cmds +=
"set /Herwig/Partons/PomeronPDF:PDFFit %s\n" % pdf
405set /Herwig/Particles/pomeron:PDF /Herwig/Partons/PomeronPDF
407# Technical parameters for this run
408set /Herwig/Generators/EventGenerator:EventHandler:Sampler:Ntry 100000
409set /Herwig/Generators/EventGenerator:MaxErrors 500
412# TODO: Is this a problem?
413set /Herwig/Generators/EventGenerator:EventHandler:CascadeHandler:MPIHandler NULL
415# Choice of phase-space generation for PDFs
416set /Herwig/Partons/PPExtractor:FlatSHatY 0
428# Technical parameters for this run
429set /Herwig/Generators/EventGenerator:EventHandler:Sampler:Ntry 100000
431# Choice of phase-space generation for PDFs
432set /Herwig/Partons/PPExtractor:FlatSHatY 0
434# Change the proton PDFs to those for photon radiation
435set /Herwig/Particles/p+:PDF /Herwig/Partons/BudnevPDF
436set /Herwig/Particles/pbar-:PDF /Herwig/Partons/BudnevPDF
439# TODO: Is this a problem?
440set /Herwig/Generators/EventGenerator:EventHandler:CascadeHandler:MPIHandler NULL
446 tune_schemes = [
"DotProduct-Veto",
"DotProduct",
"pT",
"Q2"]
447 if tune_scheme
not in tune_schemes:
448 athMsgLog.warn(
"Please choose one of the supported tune-schemes! (DotProduct-Veto,DotProduct,pT,Q2)")
450 athMsgLog.info(
"{tune_scheme:s} was used for the tune scheme.".format(tune_scheme=tune_scheme))
457# Tune-{tune_scheme:s}
458read snippets/EvolutionScheme-{tune_scheme:s}.in
459read snippets/Tune-{tune_scheme:s}.in
460""".format(tune_scheme=tune_scheme)
466\n## -----------------------
467## Shower scale variation
468## -----------------------
470do ShowerHandler:AddVariation MUR2_MUF2_SHOWER_HARD 2 2 Hard
471do ShowerHandler:AddVariation MUR2_MUF1_SHOWER_HARD 2 1 Hard
472do ShowerHandler:AddVariation MUR1_MUF2_SHOWER_HARD 1 2 Hard
473do ShowerHandler:AddVariation MUR1_MUF0.5_SHOWER_HARD 1 0.5 Hard
474do ShowerHandler:AddVariation MUR0.5_MUF1_SHOWER_HARD 0.5 1 Hard
475do ShowerHandler:AddVariation MUR0.5_MUF0.5_SHOWER_HARD 0.5 0.5 Hard
476do ShowerHandler:AddVariation MUR2_MUF2_SHOWER_SEC 2 2 Secondary
477do ShowerHandler:AddVariation MUR2_MUF1_SHOWER_SEC 2 1 Secondary
478do ShowerHandler:AddVariation MUR1_MUF2_SHOWER_SEC 1 2 Secondary
479do ShowerHandler:AddVariation MUR1_MUF0.5_SHOWER_SEC 1 0.5 Secondary
480do ShowerHandler:AddVariation MUR0.5_MUF1_SHOWER_SEC 0.5 1 Secondary
481do ShowerHandler:AddVariation MUR0.5_MUF0.5_SHOWER_SEC 0.5 0.5 Secondary
482set SplittingGenerator:Detuning 2.0
Configuration base class for Herwig7.
technical_parameter_commands(self)
remnant_pdf_commands(self, name="MMHT2014lo68cl", member=0, max_flav=5)
Commands for setting the remnant PDF.
pdf_pomeron_cmds(self, flux, pdf)
Set pomeron structure function.
bool physics_parameter_commands
global_pre_commands(self)
Commands applied to all configuration classes before commands from the JobOptions.
add_commands(self, commands)
Add direct Herwig7 repository commands as they wo.
bool set_technical_parameter_commands
set_tune_scheme(self, tune_scheme="DotProduct")
printout_commands(self)
Sets printout verbosity and error tolerance.
shower_pdf_commands(self, order="LO", name="MMHT2014lo68cl", member=0, max_flav=5)
Commands for setting the PDF in the parton showers.
bool set_printout_commands
__init__(self, genSeq, runArgs, run_name="Herwig")
Constructor.
ue_tune_commands(self)
Commands for only setting the UE/MPI tune.
mpi_pdf_commands(self, name="MMHT2014lo68cl", member=0, max_flav=5)
Commands for setting the PDF in the underlying event (UE).
me_alphas_commands(self, order="NLO", scale=91.1876, value=0.118)
Commands for setting the strong coupling in the hard process.
enable_angularShowerScaleVariations(self, do_variations=False)
tune_commands(self)
Commands for setting PS/hadronization and UE/MPI tune simultaneously.
me_pdf_commands(self, order="NLO", name="MMHT2014nlo68cl", member=0, max_flav=5)
Commands for setting the PDF in the hard process.
bool set_physics_parameter_commands
beam_commands(self)
Commands specific to certain beam / collision types.
random_seed_commands(self)
Sets the seed for the random number generator.
energy_commands(self)
Sets center-of-mass energy sqrts(s) in GeV.
pdf_gammagamma_cmds(self)
Initialize Budnev Photon flux for two-photon exclusive exchange.
ps_tune_commands(self)
Commands for only setting the PS/hadronization tune.