ATLAS Offline Software
Loading...
Searching...
No Matches
H7C.py
Go to the documentation of this file.
1# Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
2
3"""
4This module provides a stateful object for preparing a H7 run.
5It mirrors what is done in MGC.py but in a more CA-friendly way
6(i.e. avoiding side effects).
7"""
8
9from Herwig7_i import Herwig7Utils as hw7Utils
10from Herwig7_i.Herwig7Config import Hw7Config
11from AthenaCommon.SystemOfUnits import GeV
12
13from textwrap import dedent
14
15
16class H7C(Hw7Config):
17 """
18 Stateful control object for preparing a Herwig7 CA run.
19 Note that this inherits from Hw7Config, which provides
20 all the baseline settings, so that we don't have to rewrite
21 the full config.
22 """
24 self,
25 flags,
26 run_name="Herwig",
27 local_pre_commands=None,
28 local_post_commands=None,
29 ):
30 self.flags = flags
31 self.run_name = run_name
32 self._local_pre_commands = local_pre_commands or (lambda: "")
33 self._local_post_commands = local_post_commands or (lambda: "")
34
35 self.me_pdf_name = "MMHT2014lo68cl"
36 self.mpi_pdf_name = "MMHT2014lo68cl"
37 self.ecmEnergy = 0
38 self.random_seed = 0
39
43
44 self.default_commands = hw7Utils.ConfigurationCommands()
45 self.commands = hw7Utils.ConfigurationCommands()
46
48 return self._local_pre_commands()
49
51 return self._local_post_commands()
52
53 def get_flags_info(self, flags):
54 """Populate beam energy and random seed from CA flags"""
55 if flags is None:
56 raise RuntimeError("flags must be provided!")
57
58 try:
59 self.ecmEnergy = float(flags.Beam.Energy * 2) / GeV
60 except AttributeError as exc:
61 raise RuntimeError("No beam energy found in flags (expected flags.Beam.Energy).") from exc
62
63 try:
64 self.random_seed = int(flags.Random.SeedOffset)
65 except AttributeError as exc:
66 raise RuntimeError("No random seed found in flags (expected flags.Random.SeedOffset).") from exc
67
68 def add_flags(self, flags=None):
69 if flags is not None:
70 self.get_flags_info(flags)
71
72 def beam_commands(self):
73 return dedent("""
74 ## Commands for proton-proton collisions
75 read snippets/PPCollider.in
76 """)
77
79 return dedent(f"""
80 ## Random number generator seed
81 set /Herwig/Random:Seed {self.random_seed}
82 """)
83
84 def energy_commands(self):
85 return dedent(f"""
86 ## Center-of-mass energy
87 set /Herwig/Generators/EventGenerator:EventHandler:LuminosityFunction:Energy {self.ecmEnergy}
88 """)
Definition H7C.py:16
random_seed_commands(self)
Definition H7C.py:78
str mpi_pdf_name
Definition H7C.py:36
beam_commands(self)
Definition H7C.py:72
run_name
Definition H7C.py:31
bool set_physics_parameter_commands
Definition H7C.py:41
__init__(self, flags, run_name="Herwig", local_pre_commands=None, local_post_commands=None)
Definition H7C.py:29
default_commands
Definition H7C.py:44
local_post_commands(self)
Definition H7C.py:50
get_flags_info(self, flags)
Definition H7C.py:53
str me_pdf_name
Definition H7C.py:35
bool set_printout_commands
Definition H7C.py:40
local_pre_commands(self)
Definition H7C.py:47
energy_commands(self)
Definition H7C.py:84
_local_pre_commands
Definition H7C.py:32
flags
Definition H7C.py:30
commands
Definition H7C.py:45
_local_post_commands
Definition H7C.py:33
bool set_technical_parameter_commands
Definition H7C.py:42
int random_seed
Definition H7C.py:38
int ecmEnergy
Definition H7C.py:37
add_flags(self, flags=None)
Definition H7C.py:68