BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
EvtGen Class Reference

#include <EvtGen.hh>

Public Member Functions

 EvtGen (const char *const decayName, const char *const pdtTableName, EvtRandomEngine *randomEngine=0, EvtAbsRadCorr *isrEngine=0)
 ~EvtGen ()
void readUDecay (const char *const udecay_name)
void generateDecay (int stdhepid, EvtVector4R P, EvtVector4R D, EvtStdHep *evtStdHep, EvtSpinDensity *spinDensity=0)
void generateDecay (EvtParticle *p)
void generateEvent (int stdhepid, HepLorentzVector P, HepLorentzVector D)
void generateEvent (EvtParticle *p, HepLorentzVector D)

Detailed Description

Definition at line 45 of file EvtGen.hh.

Constructor & Destructor Documentation

◆ EvtGen()

EvtGen::EvtGen ( const char *const decayName,
const char *const pdtTableName,
EvtRandomEngine * randomEngine = 0,
EvtAbsRadCorr * isrEngine = 0 )

Definition at line 71 of file EvtGen.cc.

72 {
73
74 report( INFO, "EvtGen" ) << "Initializing EvtGen" << endl;
75
76 report( INFO, "EvtGen" ) << "Storing known decay models" << endl;
77 EvtModelReg dummy;
78
79 report( INFO, "EvtGen" ) << "Main decay file name :" << decayName << endl;
80 report( INFO, "EvtGen" ) << "PDT table file name :" << pdtTableName << endl;
81
82 report( INFO, "EvtGen" ) << "Initializing RadCorr=PHOTOS" << endl;
83 if ( isrEngine == 0 )
84 {
85 static EvtPHOTOS defaultRadCorrEngine;
86 EvtRadCorr::setRadCorrEngine( &defaultRadCorrEngine );
87 report( INFO, "EvtGen" ) << "No RadCorr engine given in "
88 << "EvtGen::EvtGen constructor, "
89 << "will use default EvtPHOTOS." << endl;
90 }
91 else { EvtRadCorr::setRadCorrEngine( isrEngine ); }
92
93 _pdl.readPDT( pdtTableName );
94
95 ifstream indec;
96
98
99 if ( randomEngine == 0 )
100 {
101 static EvtRandomEngine defaultRandomEngine;
102 EvtRandom::setRandomEngine( &defaultRandomEngine );
103 report( INFO, "EvtGen" ) << "No random engine given in "
104 << "EvtGen::EvtGen constructor, "
105 << "will use default EvtRandomEngine." << endl;
106 }
107 else { EvtRandom::setRandomEngine( randomEngine ); }
108
109 report( INFO, "EvtGen" ) << "Done initializing EvtGen" << endl;
110}
ostream & report(Severity severity, const char *facility)
Definition EvtReport.cc:34
@ INFO
Definition EvtReport.hh:52
static void readDecayFile(const std::string dec_name)
static void setRadCorrEngine(EvtAbsRadCorr *isrEngine)
Definition EvtRadCorr.cc:46
static void setRandomEngine(EvtRandomEngine *randomEngine)
Definition EvtRandom.cc:35

◆ ~EvtGen()

EvtGen::~EvtGen ( )

Definition at line 61 of file EvtGen.cc.

61 {
62
63 // This is a bit uggly, should not do anything
64 // in a destructor. This will fail if EvtGen is made a static
65 // because then this destructor might be called _after_
66 // the destructoin of objects that it depends on, e.g., EvtPDL.
67
68 if ( getenv( "EVTINFO" ) ) { EvtDecayTable::printSummary(); }
69}
static void printSummary()

Member Function Documentation

◆ generateDecay() [1/2]

void EvtGen::generateDecay ( EvtParticle * p)

Definition at line 163 of file EvtGen.cc.

163 {
164
165 int times = 0;
166 do {
167 times += 1;
169 p->decay();
170 // ok then finish.
171 if ( EvtStatus::getRejectFlag() == 0 ) { times = 0; }
172 else
173 {
174
175 int ii;
176 for ( ii = 0; ii < p->getNDaug(); ii++ )
177 {
178 EvtParticle* temp = p->getDaug( ii );
179 temp->deleteTree();
180 }
181 p->resetFirstOrNot();
182 p->resetNDaug();
183 }
184
185 if ( times == 10000 )
186 {
187 report( ERROR, "EvtGen" ) << "Your event has been rejected 10000 times!" << endl;
188 report( ERROR, "EvtGen" ) << "Will now abort." << endl;
189 ::abort();
190 times = 0;
191 }
192 } while ( times );
193}
@ ERROR
Definition EvtReport.hh:49
void resetNDaug()
void resetFirstOrNot()
int getNDaug() const
EvtParticle * getDaug(int i)
void deleteTree()
static void initRejectFlag()
Definition EvtStatus.hh:41
static int getRejectFlag()
Definition EvtStatus.hh:50

◆ generateDecay() [2/2]

void EvtGen::generateDecay ( int stdhepid,
EvtVector4R P,
EvtVector4R D,
EvtStdHep * evtStdHep,
EvtSpinDensity * spinDensity = 0 )

Definition at line 138 of file EvtGen.cc.

139 {
140
141 EvtParticle* p;
142
143 if ( spinDensity == 0 )
145 else
146 {
148 *spinDensity );
149 }
150
151 generateDecay( p );
152 // p->Decay();
153
154 evtStdHep->init();
155
156 p->makeStdHep( *evtStdHep );
157
158 evtStdHep->translate( D );
159
160 p->deleteTree();
161}
double P(RecMdcKalTrack *trk)
void generateDecay(int stdhepid, EvtVector4R P, EvtVector4R D, EvtStdHep *evtStdHep, EvtSpinDensity *spinDensity=0)
Definition EvtGen.cc:138
static EvtId evtIdFromStdHep(int stdhep)
Definition EvtPDL.cc:232
static EvtParticle * particleFactory(EvtSpinType::spintype spinType)
void makeStdHep(EvtStdHep &stdhep, EvtSecondary &secondary, EvtId *stable_parent_ihep)
void translate(EvtVector4R d)
Definition EvtStdHep.cc:65
void init()
Definition EvtStdHep.cc:33

Referenced by generateDecay(), and generateEvent().

◆ generateEvent() [1/2]

void EvtGen::generateEvent ( EvtParticle * p,
HepLorentzVector D )

Definition at line 216 of file EvtGen.cc.

216 {
217 int i;
218 static int nevent = 0;
219 nevent++;
220
221 static EvtStdHep evtstdhep;
222 // static EvtSecondary evtsecondary;
223
224 int j;
225 int istat;
226 int partnum;
227 double px, py, pz, e, m;
228 double x, y, z, t;
229
230 EvtVector4R p4, x4;
231 generateDecay( root_part );
232 // root_part->Decay();
233 int npart = 0;
234 EvtId list_of_stable[10];
235 EvtParticle* stable_parent[10];
236
237 list_of_stable[0] = EvtId( -1, -1 );
238 stable_parent[0] = 0;
239
240 evtstdhep.init();
241 // evtsecondary.init();
242 // root_part->makeStdHep(evtstdhep,evtsecondary,list_of_stable);
243 root_part->makeStdHep( evtstdhep );
244
245 // report(INFO,"EvtGen") << evtstdhep;
246 // report(INFO,"EvtGen") << evtsecondary;
247
248 npart = evtstdhep.getNPart();
249 for ( i = 0; i < evtstdhep.getNPart(); i++ )
250 {
251
252 j = i + 1;
253
254 int jmotherfirst = evtstdhep.getFirstMother( i ) + 1;
255 int jmotherlast = evtstdhep.getLastMother( i ) + 1;
256 int jdaugfirst = evtstdhep.getFirstDaughter( i ) + 1;
257 int jdauglast = evtstdhep.getLastDaughter( i ) + 1;
258
259 partnum = evtstdhep.getStdHepID( i );
260
261 istat = evtstdhep.getIStat( i );
262
263 p4 = evtstdhep.getP4( i );
264 x4 = evtstdhep.getX4( i );
265 px = p4.get( 1 );
266 py = p4.get( 2 );
267 pz = p4.get( 3 );
268 e = p4.get( 0 );
269
270 x = x4.get( 1 ) + D.x();
271 y = x4.get( 2 ) + D.y();
272 z = x4.get( 3 ) + D.z();
273 t = x4.get( 0 ) + D.t();
274
275 m = p4.mass();
276
277 begevtgenstore_( &j, &nevent, &npart, &istat, &partnum, &jmotherfirst, &jmotherlast,
278 &jdaugfirst, &jdauglast, &px, &py, &pz, &e, &m, &x, &y, &z, &t );
279 }
280}
Double_t x[10]
void begevtgenstore_(int *, int *, int *, int *, int *, int *, int *, int *, int *, double *, double *, double *, double *, double *, double *, double *, double *, double *)
int getIStat(int i)
Definition EvtStdHep.hh:44
int getFirstMother(int i)
Definition EvtStdHep.hh:38
int getLastMother(int i)
Definition EvtStdHep.hh:39
int getLastDaughter(int i)
Definition EvtStdHep.hh:41
int getStdHepID(int i)
Definition EvtStdHep.hh:43
int getFirstDaughter(int i)
Definition EvtStdHep.hh:40
int getNPart()
Definition EvtStdHep.cc:35
EvtVector4R getP4(int i)
Definition EvtStdHep.hh:46
EvtVector4R getX4(int i)
Definition EvtStdHep.hh:47
double mass() const
double get(int i) const
int t()
Definition t.c:1

◆ generateEvent() [2/2]

void EvtGen::generateEvent ( int stdhepid,
HepLorentzVector P,
HepLorentzVector D )

Definition at line 195 of file EvtGen.cc.

195 {
196
197 EvtParticle* root_part;
198 EvtVectorParticle* vector_part;
199
200 vector_part = new EvtVectorParticle;
201 EvtVector4R p_init;
202
203 p_init.set( P.t(), P.x(), P.y(), P.z() );
204
205 vector_part->init( EvtPDL::evtIdFromStdHep( stdhepid ), p_init );
206
207 root_part = (EvtParticle*)vector_part;
208
209 root_part->setVectorSpinDensity();
210
211 generateEvent( root_part, D );
212
213 root_part->deleteTree();
214}
void generateEvent(int stdhepid, HepLorentzVector P, HepLorentzVector D)
Definition EvtGen.cc:195
void setVectorSpinDensity()
void set(int i, double d)
void init(EvtId part_n, double e, double px, double py, double pz)

Referenced by generateEvent().

◆ readUDecay()

void EvtGen::readUDecay ( const char *const udecay_name)

Definition at line 112 of file EvtGen.cc.

112 {
113
114 ifstream indec;
115
116 if ( uDecayName[0] == 0 )
117 { report( INFO, "EvtGen" ) << "Is not reading a user decay file!" << endl; }
118 else
119 {
120 indec.open( uDecayName );
121 if ( indec )
122 {
123 EvtDecayTable::readDecayFile( uDecayName );
124
125 report( INFO, "EvtGen" ) << "Reading " << uDecayName << " to override decay table."
126 << endl;
127 }
128 else
129 {
130
131 report( INFO, "EvtGen" ) << "Can not find UDECAY file '" << uDecayName << "'. Stopping"
132 << endl;
133 ::abort();
134 }
135 }
136}

The documentation for this class was generated from the following files: