CMS 3D CMS Logo

ReggeGribovPartonMCHadronizer.h
Go to the documentation of this file.
1 #ifndef REGGEGRIBOVPARTONMCHADRONIZER_H
2 #define REGGEGRIBOVPARTONMCHADRONIZER_H
3 
7 
8 #include <map>
9 #include <string>
10 #include <vector>
11 #include <math.h>
12 
13 namespace HepMC {
14  class GenEvent;
15  class GenParticle;
16  class GenVertex;
17 }
18 
19 namespace CLHEP {
20  class HepRandomEngine;
21 }
22 
23 extern "C"
24 {
25  //iout,ievent,noutpart,impactpar,outpart,outpx,outpy,outpz,oute,outm,outstat
26  void crmc_f_(int&, int&, int&, double&, int&, double&, double&, double&,
27  double&, double&, int&);
28 
29  //iEvent,iSeed,pproj,ptarg,ipart,itarg,imodel,itab,iout,output,param
30  void crmc_set_f_(int&, int&, double&, double&, int&, int&, int&, int&,
31  int&, const char*, const char*);
32 
33  //iEvent,iSeed,pproj,ptarg,ipart,itarg,imodel,itab,iout,output,param
34  void crmc_init_f_();
35 }
36 
37 #define nmxhep 99990
38 
39 extern "C"
40 {
41 /* extern struct
42  {
43  int nevhep;
44  int nhep;
45 
46  int isthep[nmxhep];
47  int idhep[nmxhep];
48  int jmohep[nmxhep][2];
49  int jdahep[nmxhep][2];
50  double phep[nmxhep][5];
51  double vhep[nmxhep][5];
52  } hepcom_; //epos.inc*/
53 
54  extern struct
55  {
56  float sigtot; // ........ total cross section
57  float sigcut;
58  float sigela;
59  float sloela;
60  float sigsd;
61  float sigine;
62  float sigdif;
63  float sigineaa;
64  float sigtotaa;
65  float sigelaaa;
66  float sigcutaa;
67  } hadr5_; //epos.inc
68 
69  extern struct
70  {
71  float phievt; // ........ angle of impact parameter
72  int nevt; // ........ error code. 1=valid event, 0=invalid event
73  float bimevt; // ........ absolute value of impact parameter
74  int kolevt; // ........ number of collisions
75  int koievt; // ........ number of inelastic collisions
76  float pmxevt; // ........ reference momentum
77  float egyevt; // ........ pp cm energy (hadron) or string energy (lepton)
78  int npjevt; // ........ number of primary projectile participants
79  int ntgevt; // ........ number of primary target participants
80  int npnevt; // ........ number of primary projectile neutron spectators
81  int nppevt; // ........ number of primary projectile proton spectators
82  int ntnevt; // ........ number of primary target neutron spectators
83  int ntpevt; // ........ number of primary target proton spectators
84  int jpnevt; // ........ number of absolute projectile neutron spectators
85  int jppevt; // ........ number of absolute projectile proton spectators
86  int jtnevt; // ........ number of absolute target neutron spectators
87  int jtpevt; // ........ number of absolute target proton spectators
88  float xbjevt; // ........ bjorken x for dis
89  float qsqevt; // ........ q**2 for dis
90  int nglevt; // ........ number of collisions acc to Glauber
91  float zppevt; // ........ average Z-parton-proj
92  float zptevt; // ........ average Z-parton-targ
93  int minfra; //
94  int maxfra; //
95  int kohevt; // ........ number of hard collisions
96  } cevt_; //epos.inc
97 
98  extern struct
99  {
100  int ng1evt; // ........ number of collisions acc to Glauber
101  int ng2evt; // ........ number of Glauber participants with at least two IAs
102  float rglevt; // ........
103  float sglevt; // ........
104  float eglevt; // ........
105  float fglevt; // ........
106  int ikoevt; // ........ number of elementary parton-parton scatterings
107  float typevt; // ........ type of event (1=Non Diff, 2=Double Diff, 3=Single Diff)
108  } c2evt_; //epos.inc
109 
110  extern struct
111  {
112  float bmaxim;
113  float bminim;
114  float phimax;
115  float phimin;
116  } nucl2_; //epos.inc
117 }
118 
119 
120 extern "C"
121 {
122  extern struct
123  {
124  char fnch[500];
125  char fnhi[500];
126  char fndt[500];
127  char fnii[500];
128  char fnid[500];
129  char fnie[500];
130  char fnrj[500];
131  char fnmt[500];
132  char fngrv[500];
133  char fncp[500];
134  char fnnx[500];
135  char fncs[500];
136  char fndr[500];
137  char fnhpf[500];
138  } fname_; //epos.inc
139 
140  extern struct
141  {
142  int nfnch;
143  int nfnhi;
144  int nfndt;
145  int nfnii;
146  int nfnid;
147  int nfnie;
148  int nfnrj;
149  int nfnmt;
150  int nfngrv;
151  int nfncp;
152  int nfnnx;
153  int nfncs;
154  int nfndr;
155  int nfnhpf;
156  } nfname_; //epos.inc
157 
158  extern struct
159  {
160  char fndat[500];
161  char fnncs[500];
162  int ifdat;
163  int ifncs;
164  } qgsfname_; //epos-bas.f
165 
166  extern struct
167  {
168  int nfndat;
169  int nfnncs;
170  } qgsnfname_; //epos-bas.f
171 
172  extern struct
173  {
174  char fniidat[500];
175  char fniincs[500];
176  int ifiidat;
177  int ifiincs;
178  } qgsiifname_; //epos-bas.f
179 
180  extern struct
181  {
182  int nfniidat;
183  int nfniincs;
184  } qgsiinfname_; //epos-bas.f
185 }
186 
187 namespace gen
188 {
189  extern "C" {
190  float rangen_();
191  }
192 
193  extern "C" {
194  double drangen_(int*);
195  }
196 
197 
198  class ReggeGribovPartonMCHadronizer : public BaseHadronizer
199  {
200 
201  public:
202  ReggeGribovPartonMCHadronizer(const edm::ParameterSet &);
203  virtual ~ReggeGribovPartonMCHadronizer();
204 
205  bool generatePartonsAndHadronize();
206  bool hadronize();
207  bool decay();
208  bool residualDecay();
209  bool readSettings( int ) { return true; }
210  bool initializeForExternalPartons() { return true; }
211  bool initializeForInternalPartons();
212  bool declareStableParticles( const std::vector<int>& );
213  bool declareSpecialSettings( const std::vector<std::string>& ) { return true; }
214  bool initializeTablePaths();
215 
216  void finalizeEvent();
217  void statistics();
218  const char* classname() const;
219 
220  private:
221 
222  virtual void doSetRandomEngine(CLHEP::HepRandomEngine* v) override;
223 
227  int m_BeamID;
230  double m_bMin;
231  double m_bMax;
234  int m_NEvent;
235 
238  int m_PartID[nmxhep];
239  double m_PartPx[nmxhep];
240  double m_PartPy[nmxhep];
241  double m_PartPz[nmxhep];
242  double m_PartEnergy[nmxhep];
243  double m_PartMass[nmxhep];
244  int m_PartStatus[nmxhep];
245 
247  };
248 
249 } /*end namespace*/
250 
251 #endif //ifndef REGGEGRIBOVPARTONMCHADRONIZER_H
struct @658 cevt_
char fnii[500]
struct @663 qgsfname_
bool declareSpecialSettings(const std::vector< std::string > &)
char fnmt[500]
struct @659 c2evt_
struct @660 nucl2_
struct @665 qgsiifname_
void crmc_f_(int &, int &, int &, double &, int &, double &, double &, double &, double &, double &, int &)
struct @657 hadr5_
char fnncs[500]
char fnrj[500]
char fncp[500]
struct @661 fname_
char fnid[500]
void crmc_init_f_()
char fniidat[500]
char fnhpf[500]
char fncs[500]
char fnch[500]
struct @664 qgsnfname_
char fniincs[500]
double drangen_(int *)
struct @662 nfname_
char fndat[500]
char fnnx[500]
char fndt[500]
struct @666 qgsiinfname_
char fnie[500]
char fndr[500]
void crmc_set_f_(int &, int &, double &, double &, int &, int &, int &, int &, int &, const char *, const char *)
char fnhi[500]
char fngrv[500]