EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
PHG4ParticleGenerator_flat_pT.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file PHG4ParticleGenerator_flat_pT.cc
2 
3 #include <g4main/PHG4InEvent.h>
4 #include <g4main/PHG4Particle.h> // for PHG4Particle
6 
7 #include <phool/getClass.h>
8 
9 #include <gsl/gsl_rng.h> // for gsl_rng_uniform_pos
10 
11 #include <cmath>
12 #include <iostream> // for operator<<, endl, basic_ostream, basic_o...
13 #include <vector> // for vector, vector<>::iterator
14 
15 class PHCompositeNode;
16 
19 {
20  return;
21 }
22 
23 void PHG4ParticleGenerator_flat_pT::set_z_range(const double min, const double max)
24 {
25  m_ZMin = min;
26  m_ZMax = max;
27  return;
28 }
29 
30 void PHG4ParticleGenerator_flat_pT::set_eta_range(const double min, const double max)
31 {
32  m_EtaMin = min;
33  m_EtaMax = max;
34  return;
35 }
36 
37 void PHG4ParticleGenerator_flat_pT::set_phi_range(const double min, const double max)
38 {
39  m_PhiMin = min;
40  m_PhiMax = max;
41  return;
42 }
43 
44 void PHG4ParticleGenerator_flat_pT::set_pT_range(const double min, const double max)
45 {
46  m_MomMin = min;
47  m_MomMax = max;
48  return;
49 }
50 
52 {
53  PHG4InEvent *ineve = findNode::getClass<PHG4InEvent>(topNode, "PHG4INEVENT");
54 
55  if (!ReuseExistingVertex(topNode))
56  {
57  set_vtx_z((m_ZMax - m_ZMin) * gsl_rng_uniform_pos(RandomGenerator()) + m_ZMin);
58  }
59  int vtxindex = ineve->AddVtx(get_vtx_x(), get_vtx_y(), get_vtx_z(), get_t0());
60 
61  std::vector<PHG4Particle *>::iterator iter;
62  for (iter = particlelist_begin(); iter != particlelist_end(); ++iter)
63  {
64  PHG4Particle *particle = new PHG4Particlev2(*iter);
65  SetParticleId(particle, ineve);
66  double pt = (m_MomMax - m_MomMin) * gsl_rng_uniform_pos(RandomGenerator()) + m_MomMin;
67  double eta = (m_EtaMax - m_EtaMin) * gsl_rng_uniform_pos(RandomGenerator()) + m_EtaMin;
68  double phi = (m_PhiMax - m_PhiMin) * gsl_rng_uniform_pos(RandomGenerator()) + m_PhiMin;
69  double mom = pt * cosh(eta);
70 
71  particle->set_e(mom);
72  particle->set_px(pt * cos(phi));
73  particle->set_py(pt * sin(phi));
74  particle->set_pz(pt * sinh(eta));
75  // update internal particle list with changed momenta
76  // needed for correct printout of particle kinematics
77  // in PHG4ParticleGenerator_flat_pT::Print()
78  (*iter)->set_e(particle->get_e());
79  (*iter)->set_px(particle->get_px());
80  (*iter)->set_py(particle->get_py());
81  (*iter)->set_pz(particle->get_pz());
82  ineve->AddParticle(vtxindex, particle);
83  }
84  if (Verbosity() > 0)
85  {
86  ineve->identify();
87  }
88  return 0;
89 }
90 
91 void PHG4ParticleGenerator_flat_pT::Print(const std::string &what) const
92 {
93  std::cout << "PHG4ParticleGenerator_flat_pT settings:" << std::endl;
94  std::cout << "ZMin, ZMax: " << m_ZMin << "/" << m_ZMax << std::endl;
95  std::cout << "EtaMin, EtaMax: " << m_EtaMin << "/" << m_EtaMax << std::endl;
96  std::cout << "PhiMin, PhiMax: " << m_PhiMin << "/" << m_PhiMax << std::endl;
97  std::cout << "MomMin, MomMax: " << m_MomMin << "/" << m_MomMax << std::endl;
98  PrintParticles(what);
99  return;
100 }