CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Private Member Functions | Private Attributes
gen::HijingHadronizer Class Reference

#include <HijingHadronizer.h>

Inheritance diagram for gen::HijingHadronizer:
gen::BaseHadronizer

Public Member Functions

const char * classname () const
 
bool decay ()
 
bool declareSpecialSettings (const std::vector< std::string >)
 
bool declareStableParticles (const std::vector< int >)
 
void finalizeEvent ()
 
bool generatePartonsAndHadronize ()
 
bool hadronize ()
 
 HijingHadronizer (const edm::ParameterSet &)
 
bool initializeForExternalPartons ()
 
bool initializeForInternalPartons ()
 
bool residualDecay ()
 
void statistics ()
 
virtual ~HijingHadronizer ()
 
- Public Member Functions inherited from gen::BaseHadronizer
 BaseHadronizer (edm::ParameterSet const &ps)
 
edm::EventgetEDMEvent () const
 
HepMC::GenEvent * getGenEvent ()
 
GenEventInfoProductgetGenEventInfo ()
 
GenRunInfoProductgetGenRunInfo ()
 
const boost::shared_ptr
< lhef::LHERunInfo > & 
getLHERunInfo () const
 
void resetEvent (HepMC::GenEvent *event)
 
void resetEventInfo (GenEventInfoProduct *eventInfo)
 
void setEDMEvent (edm::Event &event)
 
void setLHEEvent (lhef::LHEEvent *event)
 
void setLHERunInfo (lhef::LHERunInfo *runInfo)
 
 ~BaseHadronizer ()
 

Private Member Functions

void add_heavy_ion_rec (HepMC::GenEvent *evt)
 
HepMC::GenParticle * build_hijing (int index, int barcode)
 
HepMC::GenVertex * build_hijing_vertex (int i, int id)
 
bool call_hijset (double efrm, std::string frame, std::string proj, std::string targ, int iap, int izp, int iat, int izt)
 
bool get_particles (HepMC::GenEvent *evt)
 
void rotateEvtPlane ()
 

Private Attributes

double bmax_
 
double bmin_
 
double cosphi0_
 
double efrm_
 
HepMC::GenEvent * evt
 
std::string frame_
 
int iap_
 
int iat_
 
int izp_
 
int izt_
 
double phi0_
 
std::string proj_
 
edm::ParameterSet pset_
 
bool rotate_
 
double sinphi0_
 
std::string targ_
 

Additional Inherited Members

- Protected Member Functions inherited from gen::BaseHadronizer
std::auto_ptr< HepMC::GenEvent > & event ()
 
std::auto_ptr
< GenEventInfoProduct > & 
eventInfo ()
 
lhef::LHEEventlheEvent ()
 
lhef::LHERunInfolheRunInfo ()
 
GenRunInfoProductrunInfo ()
 

Detailed Description

Definition at line 27 of file HijingHadronizer.h.

Constructor & Destructor Documentation

HijingHadronizer::HijingHadronizer ( const edm::ParameterSet pset)

Definition at line 43 of file HijingHadronizer.cc.

References edm::RandomNumberGenerator::getEngine(), and hijRandomEngine.

43  :
44  BaseHadronizer(pset),
45  evt(0),
46  pset_(pset),
47  bmax_(pset.getParameter<double>("bMax")),
48  bmin_(pset.getParameter<double>("bMin")),
49  efrm_(pset.getParameter<double>("comEnergy")),
50  frame_(pset.getParameter<string>("frame")),
51  proj_(pset.getParameter<string>("proj")),
52  targ_(pset.getParameter<string>("targ")),
53  iap_(pset.getParameter<int>("iap")),
54  izp_(pset.getParameter<int>("izp")),
55  iat_(pset.getParameter<int>("iat")),
56  izt_(pset.getParameter<int>("izt")),
57  phi0_(0.),
58  sinphi0_(0.),
59  cosphi0_(1.),
60  rotate_(pset.getParameter<bool>("rotateEventPlane"))
61 {
62  // Default constructor
64  hijRandomEngine = &(rng->getEngine());
65 
66 }
T getParameter(std::string const &) const
HepMC::GenEvent * evt
CLHEP::HepRandomEngine * hijRandomEngine
BaseHadronizer(edm::ParameterSet const &ps)
edm::ParameterSet pset_
virtual CLHEP::HepRandomEngine & getEngine() const =0
Use this to get the random number engine, this is the only function most users should call...
HijingHadronizer::~HijingHadronizer ( )
virtual

Definition at line 70 of file HijingHadronizer.cc.

71 {
72  // destructor
73 }

Member Function Documentation

void HijingHadronizer::add_heavy_ion_rec ( HepMC::GenEvent *  evt)
private

Definition at line 76 of file HijingHadronizer.cc.

References himain1, hiparnt, and phi0_.

Referenced by generatePartonsAndHadronize().

77 {
78  // heavy ion record in the final CMSSW Event
79  HepMC::HeavyIon* hi = new HepMC::HeavyIon(
80  himain1.jatt, // Ncoll_hard/N of SubEvents
81  himain1.np, // Npart_proj
82  himain1.nt, // Npart_targ
83  himain1.n0+himain1.n01+himain1.n10+himain1.n11, // Ncoll
84  0, // spectator_neutrons
85  0, // spectator_protons
86  himain1.n01, // N_Nwounded_collisions
87  himain1.n10, // Nwounded_N_collisions
88  himain1.n11, // Nwounded_Nwounded_collisions
89  //gsfs Changed from 19 to 18 (Fortran counts from 1 , not 0)
90  hiparnt.hint1[18], // impact_parameter in [fm]
91  phi0_, // event_plane_angle
92  0, // eccentricity
93  //gsfs Changed from 12 to 11 (Fortran counts from 1 , not 0)
94  hiparnt.hint1[11] // sigma_inel_NN
95  );
96  evt->set_heavy_ion(*hi);
97  delete hi;
98 }
HepMC::GenEvent * evt
#define hiparnt
Definition: HijingWrapper.h:51
#define himain1
Definition: HijingWrapper.h:33
HepMC::GenParticle * HijingHadronizer::build_hijing ( int  index,
int  barcode 
)
private

Definition at line 101 of file HijingHadronizer.cc.

References cosphi0_, configurableAnalysis::GenParticle, himain2, getHLTprescales::index, gen::p, sinphi0_, ExpressReco_HICollisions_FallBack::x, and ExpressReco_HICollisions_FallBack::y.

Referenced by get_particles().

102 {
103  // Build particle object corresponding to index in hijing
104 
105  double x0 = himain2.patt[0][index];
106  double y0 = himain2.patt[1][index];
107 
108  double x = x0*cosphi0_-y0*sinphi0_;
109  double y = y0*cosphi0_+x0*sinphi0_;
110 
112  HepMC::FourVector(x, // px
113  y, // py
114  himain2.patt[2][index], // pz
115  himain2.patt[3][index]), // E
116  himain2.katt[0][index],// id
117  himain2.katt[3][index] // status
118  );
119  p->suggest_barcode(barcode);
120 
121  return p;
122 }
double p[5][pyjets_maxn]
#define himain2
Definition: HijingWrapper.h:41
HepMC::GenVertex * HijingHadronizer::build_hijing_vertex ( int  i,
int  id 
)
private

Definition at line 125 of file HijingHadronizer.cc.

Referenced by get_particles().

126 {
127  // build verteces for the hijing stored events
128  HepMC::GenVertex* vertex = new HepMC::GenVertex(HepMC::FourVector(0,0,0,0),id);
129  return vertex;
130 }
bool HijingHadronizer::call_hijset ( double  efrm,
std::string  frame,
std::string  proj,
std::string  targ,
int  iap,
int  izp,
int  iat,
int  izt 
)
private

Definition at line 217 of file HijingHadronizer.cc.

References HIJSET.

Referenced by initializeForInternalPartons().

218 {
219  // initialize hydjet
220  HIJSET(efrm,frame.data(),proj.data(),targ.data(),iap,izp,iat,izt,strlen(frame.data()),strlen(proj.data()),strlen(targ.data()));
221  return true;
222 }
#define HIJSET
Definition: HijingWrapper.h:13
const char * HijingHadronizer::classname ( ) const

Definition at line 279 of file HijingHadronizer.cc.

280 {
281  return "gen::HijingHadronizer";
282 }
bool HijingHadronizer::decay ( )

Definition at line 261 of file HijingHadronizer.cc.

262 {
263  return true;
264 }
bool gen::HijingHadronizer::declareSpecialSettings ( const std::vector< std::string >  )
inline

Definition at line 39 of file HijingHadronizer.h.

39 { return true; }
bool HijingHadronizer::declareStableParticles ( const std::vector< int >  pdg)

Definition at line 242 of file HijingHadronizer.cc.

243 {
244  return true;
245 }
void HijingHadronizer::finalizeEvent ( )

Definition at line 271 of file HijingHadronizer.cc.

271  {
272  return;
273 }
bool HijingHadronizer::generatePartonsAndHadronize ( )

Definition at line 132 of file HijingHadronizer.cc.

References add_heavy_ion_rec(), bmax_, bmin_, gen::BaseHadronizer::event(), evt, frame_, get_particles(), HIJING, rotate_, and rotateEvtPlane().

133 {
134  // generate single event
135  if(rotate_) rotateEvtPlane();
136 
137  // generate a HIJING event
138  HIJING(frame_.data(), bmin_, bmax_, strlen(frame_.data()));
139 
140  // event information
141  HepMC::GenEvent *evt = new HepMC::GenEvent();
142  get_particles(evt);
143 
144  // evt->set_signal_process_id(pypars.msti[0]); // type of the process
145  // evt->set_event_scale(pypars.pari[16]); // Q^2
146  add_heavy_ion_rec(evt);
147 
148  event().reset(evt);
149 
150 
151  return true;
152 }
HepMC::GenEvent * evt
std::auto_ptr< HepMC::GenEvent > & event()
void add_heavy_ion_rec(HepMC::GenEvent *evt)
bool get_particles(HepMC::GenEvent *evt)
#define HIJING
Definition: HijingWrapper.h:18
bool HijingHadronizer::get_particles ( HepMC::GenEvent *  evt)
private

Definition at line 155 of file HijingHadronizer.cc.

References build_hijing(), build_hijing_vertex(), configurableAnalysis::GenParticle, himain1, himain2, i, and LogDebug.

Referenced by generatePartonsAndHadronize().

156 {
157  HepMC::GenVertex* vertice;
158 
159  vector<HepMC::GenParticle*> particles;
160  vector<int> mother_ids;
161  vector<HepMC::GenVertex*> prods;
162 
163  vertice = new HepMC::GenVertex(HepMC::FourVector(0,0,0,0),0);
164  evt->add_vertex(vertice);
165  if(!evt->signal_process_vertex()) evt->set_signal_process_vertex(vertice);
166 
167  const unsigned int knumpart = himain1.natt;
168  for (unsigned int ipart = 0; ipart<knumpart; ipart++) {
169 
170  int mid = himain2.katt[2][ipart];
171  particles.push_back(build_hijing(ipart,ipart+1));
172  prods.push_back(build_hijing_vertex(ipart,0));
173  mother_ids.push_back(mid);
174  LogDebug("DecayChain")<<"Mother index : "<<mid;
175  }
176 
177  LogDebug("Hijing")<<"Number of particles in vector "<<particles.size();
178 
179  for (unsigned int ipart = 0; ipart<particles.size(); ipart++) {
180  HepMC::GenParticle* part = particles[ipart];
181 
182  int mid = mother_ids[ipart];
183  LogDebug("DecayChain")<<"Particle "<<ipart;
184  LogDebug("DecayChain")<<"Mother's ID "<<mid;
185  LogDebug("DecayChain")<<"Particle's PDG ID "<<part->pdg_id();
186 
187  if(mid <= 0){
188  vertice->add_particle_out(part);
189  continue;
190  }
191 
192  if(mid > 0){
193  HepMC::GenParticle* mother = particles[mid];
194  LogDebug("DecayChain")<<"Mother's PDG ID "<<mother->pdg_id();
195 
196  HepMC::GenVertex* prod_vertex = mother->end_vertex();
197  if(!prod_vertex){
198  prod_vertex = prods[ipart];
199  prod_vertex->add_particle_in(mother);
200  evt->add_vertex(prod_vertex);
201  prods[ipart]=0; // mark to protect deletion
202 
203  }
204  prod_vertex->add_particle_out(part);
205  }
206  }
207 
208  // cleanup vertices not assigned to evt
209  for (unsigned int i = 0; i<prods.size(); i++) {
210  if(prods[i]) delete prods[i];
211  }
212 
213  return true;
214 }
#define LogDebug(id)
int i
Definition: DBlmapReader.cc:9
HepMC::GenEvent * evt
HepMC::GenParticle * build_hijing(int index, int barcode)
#define himain2
Definition: HijingWrapper.h:41
HepMC::GenVertex * build_hijing_vertex(int i, int id)
part
Definition: HCALResponse.h:21
#define himain1
Definition: HijingWrapper.h:33
bool HijingHadronizer::hadronize ( )

Definition at line 256 of file HijingHadronizer.cc.

257 {
258  return false;
259 }
bool gen::HijingHadronizer::initializeForExternalPartons ( )
bool HijingHadronizer::initializeForInternalPartons ( )

Definition at line 225 of file HijingHadronizer.cc.

References call_hijset(), gen::call_pygive(), efrm_, frame_, iap_, iat_, izp_, izt_, proj_, and targ_.

225  {
226 
227  //initialize pythia5
228 
229  if(0){
230  std::string dumstr = "";
231  call_pygive(dumstr);
232  }
233 
234  // initialize hijing
235  LogInfo("HIJINGinAction") << "##### Calling HIJSET(" << efrm_ << "," <<frame_<<","<<proj_<<","<<targ_<<","<<iap_<<","<<izp_<<","<<iat_<<","<<izt_<<") ####";
237 
238  return true;
239 
240 }
bool call_pygive(const std::string &line)
bool call_hijset(double efrm, std::string frame, std::string proj, std::string targ, int iap, int izp, int iat, int izt)
bool HijingHadronizer::residualDecay ( )

Definition at line 266 of file HijingHadronizer.cc.

267 {
268  return true;
269 }
void HijingHadronizer::rotateEvtPlane ( )
private

Definition at line 248 of file HijingHadronizer.cc.

References funct::cos(), cosphi0_, gen::hijran_(), phi0_, pi, funct::sin(), and sinphi0_.

Referenced by generatePartonsAndHadronize().

248  {
249 
250  phi0_ = 2.*pi*gen::hijran_(0) - pi;
251  sinphi0_ = sin(phi0_);
252  cosphi0_ = cos(phi0_);
253 }
double hijran_(int *)
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
double pi
void HijingHadronizer::statistics ( )

Definition at line 275 of file HijingHadronizer.cc.

275  {
276  return;
277 }

Member Data Documentation

double gen::HijingHadronizer::bmax_
private

Definition at line 58 of file HijingHadronizer.h.

Referenced by generatePartonsAndHadronize().

double gen::HijingHadronizer::bmin_
private

Definition at line 60 of file HijingHadronizer.h.

Referenced by generatePartonsAndHadronize().

double gen::HijingHadronizer::cosphi0_
private

Definition at line 76 of file HijingHadronizer.h.

Referenced by build_hijing(), and rotateEvtPlane().

double gen::HijingHadronizer::efrm_
private

Definition at line 62 of file HijingHadronizer.h.

Referenced by initializeForInternalPartons().

HepMC::GenEvent* gen::HijingHadronizer::evt
private

Definition at line 56 of file HijingHadronizer.h.

Referenced by generatePartonsAndHadronize().

std::string gen::HijingHadronizer::frame_
private

Definition at line 63 of file HijingHadronizer.h.

Referenced by generatePartonsAndHadronize(), and initializeForInternalPartons().

int gen::HijingHadronizer::iap_
private

Definition at line 66 of file HijingHadronizer.h.

Referenced by initializeForInternalPartons().

int gen::HijingHadronizer::iat_
private

Definition at line 68 of file HijingHadronizer.h.

Referenced by initializeForInternalPartons().

int gen::HijingHadronizer::izp_
private

Definition at line 67 of file HijingHadronizer.h.

Referenced by initializeForInternalPartons().

int gen::HijingHadronizer::izt_
private

Definition at line 69 of file HijingHadronizer.h.

Referenced by initializeForInternalPartons().

double gen::HijingHadronizer::phi0_
private

Definition at line 74 of file HijingHadronizer.h.

Referenced by add_heavy_ion_rec(), and rotateEvtPlane().

std::string gen::HijingHadronizer::proj_
private

Definition at line 64 of file HijingHadronizer.h.

Referenced by initializeForInternalPartons().

edm::ParameterSet gen::HijingHadronizer::pset_
private

Definition at line 57 of file HijingHadronizer.h.

bool gen::HijingHadronizer::rotate_
private

Definition at line 77 of file HijingHadronizer.h.

Referenced by generatePartonsAndHadronize().

double gen::HijingHadronizer::sinphi0_
private

Definition at line 75 of file HijingHadronizer.h.

Referenced by build_hijing(), and rotateEvtPlane().

std::string gen::HijingHadronizer::targ_
private

Definition at line 65 of file HijingHadronizer.h.

Referenced by initializeForInternalPartons().