ATLAS Offline Software
Loading...
Searching...
No Matches
Pythia8_i.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 Author: James Monk
4*/
5
6#ifndef GENERATOR_PYTHIA8_H
7#define GENERATOR_PYTHIA8_H
8
10
11// calls to fortran routines
12#include "CLHEP/Random/RandFlat.h"
13#include "GaudiKernel/ToolHandle.h"
16
17//#include "Pythia8/../Pythia8Plugins/HepMC2.h"
18#include "Pythia8Plugins/HepMC3.h"
19namespace HepMC {
20 typedef HepMC3::Pythia8ToHepMC3 Pythia8ToHepMC;
21}
22
23#include <stdexcept>
24
25
29
30namespace Pythia8{
31 class Sigma2Process;
32}
33
34
35class customRndm : public Pythia8::RndmEngine {
36public:
37
38 // Constructor.
40
41 // Routine for generating a random number.
42 inline double flat(){
43 m_RNC++;
44 return CLHEP::RandFlat::shoot(m_engine);
45 };
46
47 // Initialisation Routine
48 inline void init(CLHEP::HepRandomEngine* engine) {m_engine=engine; m_RNC=0;}
49 inline CLHEP::HepRandomEngine* getEngine() { return m_engine; }
50 inline unsigned long long int getRNCalls() {return m_RNC;}
51private:
52 unsigned long long int m_RNC{};
53 CLHEP::HepRandomEngine* m_engine{};
54};
55
56
57//namespace Generator{
58class Pythia8_i: public GenModule{
59
60public:
61 Pythia8_i(const std::string &name, ISvcLocator *pSvcLocator);
62
63 ~Pythia8_i();
64
65 class CommandException : public std::runtime_error{
66 public:
67
68 CommandException(const std::string &cmd): std::runtime_error("Cannot interpret command: " + cmd){
69 }
70 };
71
72 virtual StatusCode genInitialize();
73 virtual StatusCode callGenerator();
74 virtual StatusCode fillEvt(HepMC::GenEvent *evt);
75 virtual StatusCode fillWeights(HepMC::GenEvent *evt);
76 virtual StatusCode genFinalize();
77
78 double pythiaVersion() const;
79
80 static const std::string& pythia_stream();
81 static std::string xmlpath();
82
83protected:
84
85 bool useRndmGenSvc() const { return m_useRndmGenSvc; }
86 bool useReseed() const {return m_useReseed; }
87
88 std::unique_ptr<Pythia8::Pythia> m_pythia{};
90 UnsignedIntegerProperty m_maxFailures{this, "MaxFailures", 10};
91
92 BooleanProperty m_useRndmGenSvc{this, "useRndmGenSvc", true, "the max number of consecutive failures"};
93 std::shared_ptr<customRndm> m_atlasRndmEngine{};
94
95 BooleanProperty m_useReseed{this,"useReseed", false};
96
97 IntegerProperty m_dsid{this, "Dsid", 999999, "Dataset ID number"};
98 StringArrayProperty m_userHooks{this, "UserHooks", {} };
99//for Py8B
100 DoubleProperty m_pt0timesMPI{this,"pT0timesMPI", 1.0};
101 DoubleProperty m_numberAlphaS{this,"numberAlphaS", 3.0};
102 BooleanProperty m_sameAlphaSAsMPI{this,"useSameAlphaSasMPI", false};
103
104private:
105
106 static std::string findValue(const std::string &command, const std::string &key);
107
109
110 double m_version{-1.};
111
112 // Custom property to hold Pythia8 commands as a list of strings,
113 // with associated metadata for parsing and merging.
114 // The merging is handled by CA.merge() according to the rules in
115 // GeneratorSettingsSemantics.
116 StringArrayProperty m_commands{this,
117 "Commands",
118 {},
119 "List of Pythia8 commands",
120 "GeneratorSettings<std::string>"};
121 std::vector<std::string> m_userParams;
122 std::vector<std::string> m_userModes;
123
124 enum PDGID {PROTON=2212, ANTIPROTON=-2212, LEAD=1000822080, OXYGEN=1000080160, HELIUM= 1000020040, NEUTRON=2112, ANTINEUTRON=-2112, MUON=13, ANTIMUON=-13, ELECTRON=11, POSITRON=-11, INVALID=0};
125
126 DoubleProperty m_collisionEnergy{this, "CollisionEnergy", 14000.0};
127
128
129 StringProperty m_beam1{this, "Beam1", "PROTON"};
130 StringProperty m_beam2{this, "Beam2", "PROTON"};
132
133 StringProperty m_lheFile{this, "LHEFile", ""};
134
135 BooleanProperty m_doCKKWLAcceptance{this, "CKKWLAcceptance", false};
136 BooleanProperty m_doFxFxXS{this, "FxFxXS", false};
137 BooleanProperty m_computeEfficiency{this, "computeEfficiency", false};
138 double m_nAccepted{0.};
139 double m_nMerged{0.};
140 double m_sigmaTotal{0.};
141 double m_conversion{1.};
142
143 unsigned int m_failureCount{0};
144
145 std::map<std::string, PDGID> m_particleIDs;
146
147 std::vector<long int> m_seeds{};
148
149 StringProperty m_userProcess{this, "UserProcess", ""};
150
151 // ptr to possible user process
152 std::shared_ptr<Pythia8::Sigma2Process> m_procPtr{};
153
154 std::vector<UserHooksPtrType> m_userHooksPtrs{};
155
156 StringProperty m_userResonances{this, "UserResonances", ""};
157
158 std::vector<std::shared_ptr<Pythia8::ResonanceWidths> > m_userResonancePtrs;
159
160 BooleanProperty m_useLHAPDF{this, "UseLHAPDF", true};
161
162 StringProperty m_particleDataFile{this, "ParticleData", ""};
163 StringProperty m_outputParticleDataFile{this, "OutputParticleData", "ParticleData.local.xml"};
164
165 double m_mergingWeight{1.0};
166 double m_enhanceWeight{1.0};
167 std::vector<std::string> m_weightIDs{};
168 std::vector<std::string> m_weightNames{};
169 bool m_doLHE3Weights{false};
170 std::vector<std::string> m_weightCommands{};
171 std::vector<std::string> m_showerWeightNames{"nominal"};
172 StringArrayProperty m_showerWeightNamesProp{this, "ShowerWeightNames", {} };
173
174 PublicToolHandle<IPythia8Custom> m_athenaTool{this, "CustomInterface", ""};
175
176 BooleanProperty m_saveLHE{this, "SaveLHERecord", false};
177
178 static int s_allowedTunes(double version);
179
180 Pythia8::SuppressSmallPT *m_SuppressSmallPT{};
181
182};
183
184#endif
GenModule(const std::string &name, ISvcLocator *pSvcLocator)
Constructor.
Definition GenModule.cxx:14
CommandException(const std::string &cmd)
Definition Pythia8_i.h:68
bool m_override_transform_beamenergy
Definition Pythia8_i.h:131
virtual StatusCode genInitialize()
For initializing the generator, if required.
Definition Pythia8_i.cxx:98
IntegerProperty m_dsid
Definition Pythia8_i.h:97
BooleanProperty m_sameAlphaSAsMPI
Definition Pythia8_i.h:102
std::vector< std::string > m_weightCommands
Definition Pythia8_i.h:170
virtual StatusCode fillWeights(HepMC::GenEvent *evt)
virtual StatusCode fillEvt(HepMC::GenEvent *evt)
For filling the HepMC event object.
StringProperty m_userProcess
Definition Pythia8_i.h:149
std::vector< std::string > m_userParams
Definition Pythia8_i.h:121
BooleanProperty m_useReseed
Definition Pythia8_i.h:95
static std::string xmlpath()
static int s_allowedTunes(double version)
DoubleProperty m_numberAlphaS
Definition Pythia8_i.h:101
bool useRndmGenSvc() const
Definition Pythia8_i.h:85
Pythia8::SuppressSmallPT * m_SuppressSmallPT
Definition Pythia8_i.h:180
double m_nAccepted
Definition Pythia8_i.h:138
unsigned int m_failureCount
Definition Pythia8_i.h:143
bool m_doLHE3Weights
Definition Pythia8_i.h:169
DoubleProperty m_collisionEnergy
Definition Pythia8_i.h:126
StringProperty m_lheFile
Definition Pythia8_i.h:133
StringProperty m_beam1
Definition Pythia8_i.h:129
BooleanProperty m_computeEfficiency
Definition Pythia8_i.h:137
std::vector< std::shared_ptr< Pythia8::ResonanceWidths > > m_userResonancePtrs
Definition Pythia8_i.h:158
std::shared_ptr< Pythia8::Sigma2Process > m_procPtr
Definition Pythia8_i.h:152
double m_sigmaTotal
Definition Pythia8_i.h:140
BooleanProperty m_saveLHE
Definition Pythia8_i.h:176
HepMC::Pythia8ToHepMC m_pythiaToHepMC
Definition Pythia8_i.h:89
double m_nMerged
Definition Pythia8_i.h:139
PublicToolHandle< IPythia8Custom > m_athenaTool
Definition Pythia8_i.h:174
StringProperty m_userResonances
Definition Pythia8_i.h:156
virtual StatusCode callGenerator()
For calling the generator on each iteration of the event loop.
BooleanProperty m_doFxFxXS
Definition Pythia8_i.h:136
std::vector< long int > m_seeds
Definition Pythia8_i.h:147
std::vector< std::string > m_showerWeightNames
Definition Pythia8_i.h:171
std::vector< std::string > m_weightIDs
Definition Pythia8_i.h:167
DoubleProperty m_pt0timesMPI
Definition Pythia8_i.h:100
std::vector< std::string > m_weightNames
Definition Pythia8_i.h:168
int m_internal_event_number
Definition Pythia8_i.h:108
static const std::string & pythia_stream()
std::shared_ptr< customRndm > m_atlasRndmEngine
Definition Pythia8_i.h:93
std::vector< std::string > m_userModes
Definition Pythia8_i.h:122
double pythiaVersion() const
StringArrayProperty m_userHooks
Definition Pythia8_i.h:98
StringProperty m_beam2
Definition Pythia8_i.h:130
BooleanProperty m_useLHAPDF
Definition Pythia8_i.h:160
static std::string findValue(const std::string &command, const std::string &key)
virtual StatusCode genFinalize()
For finalising the generator, if required.
std::unique_ptr< Pythia8::Pythia > m_pythia
Definition Pythia8_i.h:88
double m_enhanceWeight
Definition Pythia8_i.h:166
double m_version
Definition Pythia8_i.h:110
double m_conversion
Definition Pythia8_i.h:141
std::map< std::string, PDGID > m_particleIDs
Definition Pythia8_i.h:145
BooleanProperty m_doCKKWLAcceptance
Definition Pythia8_i.h:135
double m_mergingWeight
Definition Pythia8_i.h:165
UnsignedIntegerProperty m_maxFailures
Definition Pythia8_i.h:90
BooleanProperty m_useRndmGenSvc
Definition Pythia8_i.h:92
StringProperty m_particleDataFile
Definition Pythia8_i.h:162
std::vector< UserHooksPtrType > m_userHooksPtrs
Definition Pythia8_i.h:154
StringArrayProperty m_showerWeightNamesProp
Definition Pythia8_i.h:172
StringProperty m_outputParticleDataFile
Definition Pythia8_i.h:163
StringArrayProperty m_commands
Definition Pythia8_i.h:116
bool useReseed() const
Definition Pythia8_i.h:86
Pythia8_i(const std::string &name, ISvcLocator *pSvcLocator)
Definition Pythia8_i.cxx:68
CLHEP::HepRandomEngine * m_engine
Definition Pythia8_i.h:53
double flat()
Definition Pythia8_i.h:42
CLHEP::HepRandomEngine * getEngine()
Definition Pythia8_i.h:49
void init(CLHEP::HepRandomEngine *engine)
Definition Pythia8_i.h:48
unsigned long long int getRNCalls()
Definition Pythia8_i.h:50
unsigned long long int m_RNC
Definition Pythia8_i.h:52
STL class.
HepMC3::GenEvent GenEvent
Definition GenEvent.h:39
HepMC3::Pythia8ToHepMC3 Pythia8ToHepMC
Definition Pythia8_i.h:20
Author: James Monk (jmonk@cern.ch).
STL namespace.