ATLAS Offline Software
Loading...
Searching...
No Matches
Starlight_i.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
5// -------------------------------------------------------------
6// Generators/Starlight_i.cxx Description: Allows the user
7// to generate Starlight events and store the result in the
8// Transient Store.
9//
10// AuthorList:
11// Andrzej Olszewski: Initial Code January 2011
12// Andrzej Olszewski: Update for Starlight "r193" March 2016
13//
14// Random seed set via jo
15// Random numbers not saved by atlas engine mechanism event by event.
16
18
20
21#include "AtlasHepMC/GenEvent.h"
25#include "HepMC3/GenCrossSection.h"
26
28#include "CLHEP/Vector/LorentzVector.h"
29
30#include "reportingUtils.h"
31#include "starlightconstants.h"
32#include "starlightparticlecodes.h"
33
34#include <stdlib.h>
35#include <iostream>
36#include <fstream>
37#include <cmath>
38
39namespace{
40 static const std::string starlight_stream = "STARLIGHT";
41}
42
43typedef std::vector<std::string> CommandVector;
44
45Starlight_i::Starlight_i(const std::string& name, ISvcLocator* pSvcLocator):
46 GenModule(name,pSvcLocator)
47{
48}
49
52
54{
55 // Initialisation of input parameters
56 //
57 ATH_MSG_INFO( "===> January 20 2011 STARLIGHT INTERFACE VERSION. \n" );
58 ATH_MSG_INFO( "===> STARLIGHT INITIALISING. \n" );
59
60 //Re-seed the random number stream
61 long seeds[7];
62 ATHRNG::calculateSeedsMC21(seeds, starlight_stream, 0, m_dsid, m_randomSeed);
63
64 // Create inputParameters and
65 // set the users' initialisation parameters choices
66 bool res = set_user_params();
67 if( !res ) {
68 return StatusCode::FAILURE;
69 }
70
71 // create the starlight object
72 m_starlight = std::make_unique<starlight>();
73 // Set random generator to prevent crash in tests.
74 m_randomGenerator = std::make_shared<randomGenerator>();
75 m_randomGenerator->SetSeed(seeds[0]);
76 m_starlight->setRandomGenerator(m_randomGenerator.get());
77 // set input parameters
78 m_starlight->setInputParameters(&m_inputParameters);
79 // and initialize
80 m_starlight->init();
81
82 // dump events to lhef (needed for QED showering with Pythia8
83 if(m_lheOutput){
84 ATH_MSG_INFO("===> dumping starlight events to lhef format. \n" );
85 if(!starlight2lhef()) return StatusCode::FAILURE;
86 }
87
88 return StatusCode::SUCCESS;
89}
90
92{
93 if(m_lheOutput) return StatusCode::SUCCESS;
94 ATH_MSG_DEBUG( " STARLIGHT generating. \n" );
95
96 //Re-seed the random number stream
97 long seeds[7];
98 const EventContext& ctx = Gaudi::Hive::currentContext();
99 ATHRNG::calculateSeedsMC21(seeds, starlight_stream, ctx.eventID().event_number(),
101 m_randomGenerator->SetSeed(seeds[0]);
102
103 // Generate event
104 if(m_productionMode >= starlightConstants::PHOTONUCLEARSINGLE)
105 m_event = std::make_unique<upcEvent>(m_starlight->produceUpcEvent());
106 else
107 m_event = std::make_unique<upcXEvent>(m_starlight->produceEvent());
108
109 // get particle vector from m_event whether it is upcEvent or upcXEvent
110 const std::vector<starlightParticle>* particleCollection = std::visit(
111 [](auto& _evt) { return _evt->getParticles(); }, m_event
112 );
113
114 // update event counter
115 ++m_events;
116
117 int numberofTracks = particleCollection->size();
118 int numberOfVertices = 1; //m_event->getVertices()->size();
119
120 ATH_MSG_DEBUG( "EVENT: " << m_events << " "
121 << " with " << numberOfVertices << " vertices "
122 << " and " << numberofTracks << " tracks" );
123 ATH_MSG_DEBUG( "VERTEX: "<< 0. << " " << 0. << " " << 0.
124 << " with " << numberofTracks << " tracks" );
125
126 int ipart = 0;
127 std::vector<starlightParticle>::const_iterator part =
128 particleCollection->begin();
129 for (part = particleCollection->begin();
130 part != particleCollection->end(); ++part, ++ipart) {
131 ATH_MSG_DEBUG( "TRACK: " << " "
132 << starlightParticleCodes::jetsetToGeant((*part).getCharge() * (*part).getPdgCode()) << " "
133 << (*part).GetPx() << " " << (*part).GetPy() << " "<< (*part).GetPz()
134 << " " << m_events << " " << ipart << " " << 0 << " "
135 << (*part).getCharge() * (*part).getPdgCode() );
136 }
137
138 ATH_MSG_DEBUG( " Starlight generating done. \n" );
139
140 return StatusCode::SUCCESS;
141}
142
143StatusCode
145{
146 ATH_MSG_DEBUG( " STARLIGHT Ending. \n" );
147
148 return StatusCode::SUCCESS;
149}
150
151StatusCode
153{
154 if(m_lheOutput) return StatusCode::SUCCESS;
155 ATH_MSG_DEBUG( " STARLIGHT Filing. \n" );
156
157 // Set the event number
158 evt->set_event_number( m_events );
159
160 // Create the event vertex
162 evt->add_vertex( v1 );
163
164 // get all final particles
165 const std::vector<starlightParticle>* particleCollection = std::visit(
166 [](auto& _evt) { return _evt->getParticles(); }, m_event
167 );
168
169 // Loop on all final particles and
170 // put them all as outgoing from the event vertex
171 int ipart = 0;
172 std::vector<starlightParticle>::const_iterator part =
173 particleCollection->begin();
174 double px_tot=0;
175 double py_tot=0;
176 double pz_tot=0;
177 for (part = particleCollection->begin();
178 part != particleCollection->end(); ++part, ++ipart)
179 {
180 int pid = (*part).getPdgCode();
181 int charge = (*part).getCharge();
182 //AO special for pid sign stored in charge
183 int pidsign = pid/std::abs(pid);
184 int chsign = 0;
185 if (charge !=0) chsign = charge/std::abs(charge);
186 if( chsign != pidsign && chsign != 0) pid = -pid;
187
188 double px = (*part).GetPx();
189 double py = (*part).GetPy();
190 double pz = (*part).GetPz();
191 double e = (*part).GetE();
192 // mass fix implemented only for muons
193 if(std::abs(pid)==13) {
194 float mass = m_inputParameters.muonMass();//0.1056583715;// starlightConstants::muonMass;
195 e = std::sqrt(px*px + py*py + pz*pz + mass*mass);
196 }
197 // mass fix for photons (ALPs)
198 if(std::abs(pid)==22) {
199 e = std::sqrt(px*px + py*py + pz*pz);
200 }
201
202 ATH_MSG_DEBUG( "saving particle " << ipart );
203 px_tot+=px;
204 py_tot+=py;
205 pz_tot+=pz;
206
207 if(!m_suppressVMdecay) v1->add_particle_out(
208 HepMC::newGenParticlePtr(HepMC::FourVector(px, py, pz, e), pid, 1) );
209 }
211 int pid = 113;
212 double mass = 0.770;
213 if(m_prodParticleId == 443011 || m_prodParticleId == 443013){
214 pid = 443;
215 mass = 3.0969;
216 }
217 if(m_prodParticleId == 444011 || m_prodParticleId == 444013){
218 pid = 100443;
219 mass = 3.6861;
220 }
221 if(m_prodParticleId == 553011 || m_prodParticleId == 553013){
222 pid = 553;
223 mass = 9.4604;
224 }
225 if(m_prodParticleId == 554011 || m_prodParticleId == 554013){
226 pid = 100553;
227 mass = 10.023;
228 }
229 if(m_prodParticleId == 555011 || m_prodParticleId == 555013){
230 pid = 200553;
231 mass = 10.355;
232 }
233 double e = sqrt(px_tot*px_tot + py_tot*py_tot + pz_tot*pz_tot + mass*mass);
234 v1->add_particle_out(
235 HepMC::newGenParticlePtr(HepMC::FourVector(px_tot, py_tot, pz_tot, e), pid, 1) );
236 }
237 ATH_MSG_DEBUG( "Saved " << ipart << " tracks " );
238
239 // Add beam particles
240 int beam1pid = 1000000000 + m_beam1Z*10000 + m_beam1A*10;
241 int beam2pid = 1000000000 + m_beam2Z*10000 + m_beam2A*10;
242
243 HepMC::GenParticlePtr b1 = std::make_shared<HepMC::GenParticle>(HepMC::FourVector(0, 0, m_beam1_energy.value(), m_beam1_energy.value()), beam1pid, 4);
244 HepMC::GenParticlePtr b2 = std::make_shared<HepMC::GenParticle>(HepMC::FourVector(0, 0, -m_beam2_energy.value(), m_beam2_energy.value()), beam2pid, 4);
245
246 v1->add_particle_in(b1);
247 v1->add_particle_in(b2);
248
249 // Conversion GeV -> MeV to ensure correct units
250 evt->set_units(HepMC3::Units::MEV, HepMC3::Units::MM);
251
252 return StatusCode::SUCCESS;
253}
254
255bool
257{
258
259 std::string lheFilename = "events.lhe";
260 std::ofstream lheStream;
261 lheStream.open(lheFilename.c_str(), std::ofstream::trunc);
262 if(!lheStream) {
263 ATH_MSG_ERROR("error: Failed to open file "+lheFilename);
264 return false;
265 }
266
267 lheStream << "<LesHouchesEvents version=\"1.0\">\n";
268 lheStream << "<!--\n";
269 lheStream << "File generated using Starlight \n";
270 lheStream << "-->\n";
271
272 lheStream << "<init>\n";
273 lheStream << " 13 -13 "<<m_beam1_energy.value()<<" "<<m_beam2_energy.value()<<" 0 0 0 0 3 1\n";
274 lheStream << " 1.000000e+00 0.000000e+00 1.000000e+00 9999\n";
275 lheStream << "</init>\n";
276
277 // Starting from version r330 uevent can be either
278 // upcEvent or upcXEvent depending on the process
279 std::variant<
280 std::unique_ptr<upcEvent>,
281 std::unique_ptr<upcXEvent>> uevent;
282
283 for(unsigned int i=0; i<m_maxevents; i++) {
284 lheStream << "<event>\n";
285
286 // Generate event
287 if(m_productionMode >= starlightConstants::PHOTONUCLEARSINGLE)
288 uevent = std::make_unique<upcEvent>(m_starlight->produceUpcEvent());
289 else
290 uevent = std::make_unique<upcXEvent>(m_starlight->produceEvent());
291
292 // get particle vector from m_event whether it is upcEvent or upcXEvent
293 const std::vector<starlightParticle>* particleCollection = std::visit(
294 [](auto& _evt) { return _evt->getParticles(); }, uevent
295 );
296
297 int ipart = 0;
298 CLHEP::HepLorentzVector photon_system(0);
299 double ptscale =0;
300 std::vector<starlightParticle>::const_iterator part = particleCollection->begin();
301 for (part = particleCollection->begin(); part != particleCollection->end(); ++part, ++ipart)
302 {
303 CLHEP::HepLorentzVector particle_sl((*part).GetPx(), (*part).GetPy(), (*part).GetPz(), (*part).GetE());
304 photon_system += particle_sl;
305 ptscale += std::sqrt((*part).GetPx()*(*part).GetPx() + (*part).GetPy()*(*part).GetPy());
306 }
307
308 // avg pt is the correct scale here
309 if (ipart == 0)[[unlikely]]{
310 ATH_MSG_WARNING( "Starlight_i::starlight2lhef: ipart is zero.");
311 ptscale = 0;
312 } else {
313 ptscale /= static_cast<float> (ipart);
314 }
315 lheStream << " 4 9999 1.000000e+00 "<<ptscale<<" 7.297e-03 2.569093e-01\n";
316
318 lheStream << " -11 -1 0 0 0 0 0.0000000000e+00 0.0000000000e+00 "
319 << photon_system.m()/2.*std::exp(photon_system.rapidity())<<" "
320 <<photon_system.m()/2.*std::exp(photon_system.rapidity())
321 << " 0.0000000000e+00 0. 9.\n";
322 lheStream << " 11 -1 0 0 0 0 0.0000000000e+00 0.0000000000e+00 "
323 << -photon_system.m()/2.*std::exp(-photon_system.rapidity())<<" "
324 <<photon_system.m()/2.*std::exp(-photon_system.rapidity())
325 << " 0.0000000000e+00 0. 9.\n";
326 }
327
328 else{
329 lheStream << " 22 -1 0 0 0 0 0.0000000000e+00 0.0000000000e+00 "
330 << photon_system.m()/2.*std::exp(photon_system.rapidity())<<" "
331 <<photon_system.m()/2.*std::exp(photon_system.rapidity())
332 <<" 0.0000000000e+00 0. 9.\n";
333 lheStream << " 22 -1 0 0 0 0 0.0000000000e+00 0.0000000000e+00 "
334 << -photon_system.m()/2.*std::exp(-photon_system.rapidity())<<" "
335 <<photon_system.m()/2.*std::exp(-photon_system.rapidity())
336 <<" 0.0000000000e+00 0. 9.\n";
337 }
338
339 for (part = particleCollection->begin(); part != particleCollection->end(); ++part, ++ipart)
340 {
341 int pid = (*part).getPdgCode();
342 int charge = (*part).getCharge();
343 //AO special for pid sign stored in charge
344 int pidsign = pid/std::abs(pid);
345 int chsign = charge/std::abs(charge);
346 if( chsign != pidsign ) pid = -pid;
347
348 double px = (*part).GetPx();
349 double py = (*part).GetPy();
350 double pz = (*part).GetPz();
351 double e = (*part).GetE();
352 double mass = (*part).getMass();
353 if(std::abs(pid)==11) mass = m_inputParameters.mel();
354 else if(std::abs(pid)==13) mass = m_inputParameters.muonMass();
355 else if(std::abs(pid)==15) mass = m_inputParameters.tauMass();
356
357 lheStream << pid<<" 1 1 2 0 0 "<<px<<" "<<py<<" "<<pz<<" "<<e<<" "<<mass<<" 0. 9.\n";
358
359 }
360 lheStream << "</event>\n";
361 }
362
363
364 lheStream << "</LesHouchesEvents>";
365 lheStream.close();
366
367 return true;
368}
369
371{
372 // Set starlight user initialization parameters
373
374 // write python starlight config parameters to tmp file
375 // if external config file not specified
376 if (m_configFileName.empty()) {
377 m_configFileName = "tmp.slight.in";
378 if (!prepare_params_file()) {
379 printWarn <<
380 "problems initializing input parameters. cannot initialize starlight.";
381 return false;
382 }
383 }
384
385 m_inputParameters.configureFromFile(m_configFileName);
386 if (!m_inputParameters.init()) {
387 ATH_MSG_WARNING( "problems initializing input parameters. cannot initialize starlight. " );
388 return false;
389 }
390
391 return true;
392}
393
395{
396 // Write initialization parameters to tmp file
397
398 for(CommandVector::iterator i = m_InitializeVector.begin(); i != m_InitializeVector.end(); ++i )
399 {
400 ATH_MSG_INFO( " Command is: " << *i );
401
402 StringParse mystring(*i);
403 std::string myparam = mystring.piece<std::string>(1);
404 if (myparam == "beam1Z")
405 {
406 m_beam1Z = mystring.piece<double>(2);
407 }
408 else if (myparam == "beam1A")
409 {
410 m_beam1A = mystring.piece<double>(2);
411 }
412 else if (myparam == "beam2Z")
413 {
414 m_beam2Z = mystring.piece<double>(2);
415 }
416 else if (myparam == "beam2A")
417 {
418 m_beam2A = mystring.piece<double>(2);
419 }
420 else if (myparam == "beam1Gamma")
421 {
422 m_beam1Gamma = mystring.piece<double>(2);
423 }
424 else if (myparam == "beam2Gamma")
425 {
426 m_beam2Gamma = mystring.piece<double>(2);
427 }
428 else if (myparam == "maxW")
429 {
430 m_maxW = mystring.piece<double>(2);
431 }
432 else if (myparam == "minW")
433 {
434 m_minW = mystring.piece<double>(2);
435 }
436 else if (myparam == "nmbWBins")
437 {
438 m_nmbWBins = mystring.piece<double>(2);
439 }
440 else if (myparam == "maxRapidity")
441 {
442 m_maxRapidity = mystring.piece<double>(2);
443 }
444 else if (myparam == "nmbRapidityBins")
445 {
446 m_nmbRapidityBins = mystring.piece<double>(2);
447 }
448 else if (myparam == "accCutPt")
449 {
450 m_accCutPt = mystring.piece<double>(2);
451 }
452 else if (myparam == "minPt")
453 {
454 m_minPt = mystring.piece<double>(2);
455 }
456 else if (myparam == "maxPt")
457 {
458 m_maxPt = mystring.piece<double>(2);
459 }
460 else if (myparam == "accCutEta")
461 {
462 m_accCutEta = mystring.piece<double>(2);
463 }
464 else if (myparam == "minEta")
465 {
466 m_minEta = mystring.piece<double>(2);
467 }
468 else if (myparam == "maxEta")
469 {
470 m_maxEta = mystring.piece<double>(2);
471 }
472 else if (myparam == "productionMode")
473 {
474 m_productionMode = mystring.piece<double>(2);
475 }
476 else if (myparam == "axionMass")
477 {
478 m_axionMass = mystring.piece<double>(2);
479 }
480 else if (myparam == "nmbEventsTot")
481 {
482 m_nmbEventsTot = mystring.piece<double>(2);
483 }
484 else if (myparam == "prodParticleId")
485 {
486 m_prodParticleId = mystring.piece<double>(2);
487 }
488 else if (myparam == "randomSeed")
489 {
490 m_randomSeed = mystring.piece<double>(2);
491 }
492 else if (myparam == "outputFormat")
493 {
494 m_outputFormat = mystring.piece<double>(2);
495 }
496 else if (myparam == "beamBreakupMode")
497 {
498 m_beamBreakupMode = mystring.piece<double>(2);
499 }
500 else if (myparam == "interferenceEnabled")
501 {
502 m_interferenceEnabled = mystring.piece<double>(2);
503 }
504 else if (myparam == "interferenceStrength")
505 {
506 m_interferenceStrength = mystring.piece<double>(2);
507 }
508 else if (myparam == "coherentProduction")
509 {
510 m_coherentProduction = mystring.piece<double>(2);
511 }
512 else if (myparam == "incoherentFactor")
513 {
514 m_incoherentFactor = mystring.piece<double>(2);
515 }
516 else if (myparam == "maxPtInterference")
517 {
518 m_maxPtInterference = mystring.piece<double>(2);
519 }
520 else if (myparam == "nmbPtBinsInterference")
521 {
522 m_nmbPtBinsInterference = mystring.piece<double>(2);
523 }
524 else if (myparam == "xsecMethod")
525 {
526 m_xsecMethod = mystring.piece<double>(2);
527 }
528 else if (myparam == "nThreads")
529 {
530 m_nThreads = mystring.piece<double>(2);
531 }
532 else if (myparam == "pythFullRec")
533 {
534 m_pythFullRec = mystring.piece<double>(2);
535 }
536 else
537 {
538 ATH_MSG_ERROR( " ERROR in STARLIGHT INITIALIZATION PARAMETERS "
539 << myparam << " is an invalid parameter !" );
540 return false;
541 }
542 }
543
544 std::ofstream configFile;
545 configFile.open(m_configFileName.value().c_str());
546
547 configFile << "BEAM_1_Z = " << m_beam1Z << std::endl;
548 configFile << "BEAM_1_A = " << m_beam1A << std::endl;
549 configFile << "BEAM_2_Z = " << m_beam2Z << std::endl;
550 configFile << "BEAM_2_A = " << m_beam2A << std::endl;
551 configFile << "BEAM_1_GAMMA = " << m_beam1Gamma << std::endl;
552 configFile << "BEAM_2_GAMMA = " << m_beam2Gamma << std::endl;
553 configFile << "W_MAX = " << m_maxW << std::endl;
554 configFile << "W_MIN = " << m_minW << std::endl;
555 configFile << "W_N_BINS = " << m_nmbWBins << std::endl;
556 configFile << "RAP_MAX = " << m_maxRapidity << std::endl;
557 configFile << "RAP_N_BINS = " << m_nmbRapidityBins << std::endl;
558 configFile << "CUT_PT = " << m_accCutPt << std::endl;
559 configFile << "PT_MIN = " << m_minPt << std::endl;
560 configFile << "PT_MAX = " << m_maxPt << std::endl;
561 configFile << "CUT_ETA = " << m_accCutEta << std::endl;
562 configFile << "ETA_MIN = " << m_minEta << std::endl;
563 configFile << "ETA_MAX = " << m_maxEta << std::endl;
564 configFile << "PROD_MODE = " << m_productionMode << std::endl;
565 configFile << "AXION_MASS = " << m_axionMass << std::endl;
566 configFile << "N_EVENTS = " << m_nmbEventsTot << std::endl;
567 configFile << "PROD_PID = " << m_prodParticleId << std::endl;
568 configFile << "RND_SEED = " << m_randomSeed.value() << std::endl;
569 configFile << "BREAKUP_MODE = " << m_beamBreakupMode << std::endl;
570 configFile << "INTERFERENCE = " << m_interferenceEnabled << std::endl;
571 configFile << "IF_STRENGTH = " << m_interferenceStrength << std::endl;
572 configFile << "INT_PT_MAX = " << m_maxPtInterference << std::endl;
573 configFile << "INT_PT_N_BINS = " << m_nmbPtBinsInterference << std::endl;
574 configFile << "COHERENT = " << m_coherentProduction << std::endl;
575 configFile << "INCO_FACTOR = " << m_incoherentFactor << std::endl;
576 configFile << "XSEC_METHOD = " << m_xsecMethod << std::endl;
577 configFile << "N_THREADS = " << m_nThreads << std::endl;
578 configFile << "PYTHIA_FULL_EVENTRECORD = " << m_pythFullRec << std::endl;
579
580 configFile.close();
581 return true;
582}
#define ATH_MSG_DEBUG(x,...)
#define ATH_MSG_ERROR(x,...)
#define ATH_MSG_WARNING(x,...)
#define ATH_MSG_INFO(x,...)
double charge(const T &p)
Definition AtlasPID.h:1008
ATLAS-specific HepMC functions.
std::vector< std::string > CommandVector
Definition Hijing.cxx:47
std::pair< std::vector< unsigned int >, bool > res
GenModule(const std::string &name, ISvcLocator *pSvcLocator)
Constructor.
Definition GenModule.cxx:14
IntegerProperty m_randomSeed
Seed for random number engine.
Definition GenModule.h:84
unsigned int m_beam1A
Definition Starlight_i.h:70
int m_beamBreakupMode
Definition Starlight_i.h:90
double m_interferenceStrength
Definition Starlight_i.h:92
unsigned int m_beam2A
Definition Starlight_i.h:72
unsigned int m_nmbRapidityBins
Definition Starlight_i.h:79
double m_maxW
Definition Starlight_i.h:75
int m_nmbPtBinsInterference
Definition Starlight_i.h:96
bool m_accCutEta
Definition Starlight_i.h:83
int m_productionMode
Definition Starlight_i.h:86
DoubleProperty m_beam1_energy
Definition Starlight_i.h:66
UnsignedIntegerProperty m_maxevents
Definition Starlight_i.h:45
virtual StatusCode fillEvt(HepMC::GenEvent *evt)
For filling the HepMC event object.
double m_incoherentFactor
Definition Starlight_i.h:94
bool set_user_params()
BooleanProperty m_lheOutput
Definition Starlight_i.h:44
IntegerProperty m_dsid
Definition Starlight_i.h:42
double m_maxEta
Definition Starlight_i.h:85
Starlight_i(const std::string &name, ISvcLocator *pSvcLocator)
StringArrayProperty m_InitializeVector
Definition Starlight_i.h:49
unsigned int m_nmbWBins
Definition Starlight_i.h:77
bool prepare_params_file()
bool starlight2lhef()
int m_outputFormat
Definition Starlight_i.h:89
DoubleProperty m_beam2_energy
Definition Starlight_i.h:67
unsigned int m_beam2Z
Definition Starlight_i.h:71
std::unique_ptr< starlight > m_starlight
Definition Starlight_i.h:56
BooleanProperty m_doTauolappLheFormat
Definition Starlight_i.h:46
unsigned int m_nmbEventsTot
Definition Starlight_i.h:87
int m_prodParticleId
Definition Starlight_i.h:88
double m_axionMass
Definition Starlight_i.h:59
virtual StatusCode callGenerator()
For calling the generator on each iteration of the event loop.
double m_beam1Gamma
Definition Starlight_i.h:73
bool m_xsecMethod
Definition Starlight_i.h:98
inputParameters m_inputParameters
Definition Starlight_i.h:58
double m_minEta
Definition Starlight_i.h:84
bool m_accCutPt
Definition Starlight_i.h:80
double m_minPt
Definition Starlight_i.h:81
double m_maxRapidity
Definition Starlight_i.h:78
unsigned int m_beam1Z
Definition Starlight_i.h:69
double m_maxPt
Definition Starlight_i.h:82
std::variant< std::unique_ptr< upcEvent >, std::unique_ptr< upcXEvent > > m_event
Definition Starlight_i.h:63
virtual ~Starlight_i()
double m_minW
Definition Starlight_i.h:76
virtual StatusCode genFinalize()
For finalising the generator, if required.
std::shared_ptr< randomGenerator > m_randomGenerator
Definition Starlight_i.h:57
StringProperty m_configFileName
Definition Starlight_i.h:43
bool m_coherentProduction
Definition Starlight_i.h:93
BooleanProperty m_suppressVMdecay
Definition Starlight_i.h:47
bool m_pythFullRec
virtual StatusCode genInitialize()
For initializing the generator, if required.
bool m_interferenceEnabled
Definition Starlight_i.h:91
double m_beam2Gamma
Definition Starlight_i.h:74
double m_maxPtInterference
Definition Starlight_i.h:95
Utility object for parsing a string into tokens and returning them as a variety of types.
Definition StringParse.h:33
T piece(size_t num) const
Templated function to get the num'th token as any numeric type.
Definition StringParse.h:44
void calculateSeedsMC21(long *seeds, const std::string &algName, uint64_t ev, uint64_t run, uint64_t offset=0)
Set the random seed using a string (e.g.
HepMC3::FourVector FourVector
GenParticlePtr newGenParticlePtr(const HepMC3::FourVector &mom=HepMC3::FourVector::ZERO_VECTOR(), int pid=0, int status=0)
Definition GenParticle.h:21
HepMC3::GenParticlePtr GenParticlePtr
Definition GenParticle.h:19
GenVertexPtr newGenVertexPtr(const HepMC3::FourVector &pos=HepMC3::FourVector::ZERO_VECTOR(), const int i=0)
Definition GenVertex.h:25
HepMC3::GenVertexPtr GenVertexPtr
Definition GenVertex.h:23
HepMC3::GenEvent GenEvent
Definition GenEvent.h:39
#define unlikely(x)