BOSS 7.1.1
BESIII Offline Software System
Loading...
Searching...
No Matches
EvtPhokhara_etapgam Class Reference

#include <EvtPhokhara_etapgam.hh>

+ Inheritance diagram for EvtPhokhara_etapgam:

Public Member Functions

 EvtPhokhara_etapgam ()
 
virtual ~EvtPhokhara_etapgam ()
 
void getName (std::string &name)
 
EvtDecayBaseclone ()
 
void decay (EvtParticle *p)
 
std::string commandName ()
 
void command (std::string cmd)
 
void init ()
 
void init_mode (EvtParticle *p)
 
void init_evt (EvtParticle *p)
 
void initProbMax ()
 
int getTotalEvt ()
 
void PhokharaInit (int dummy)
 
void ExclusiveDecay (EvtParticle *p)
 
- Public Member Functions inherited from EvtDecayIncoherent
void makeDecay (EvtParticle *p)
 
virtual ~EvtDecayIncoherent ()
 
void setDaughterSpinDensity (int daughter)
 
int isDaughterSpinDensitySet (int daughter)
 
- Public Member Functions inherited from EvtDecayBase
double getProbMax (double prob)
 
double resetProbMax (double prob)
 
 EvtDecayBase ()
 
virtual ~EvtDecayBase ()
 
virtual bool matchingDecay (const EvtDecayBase &other) const
 
EvtId getParentId ()
 
double getBranchingFraction ()
 
void disableCheckQ ()
 
void checkQ ()
 
int getNDaug ()
 
EvtIdgetDaugs ()
 
EvtId getDaug (int i)
 
int getNArg ()
 
int getPHOTOS ()
 
void setPHOTOS ()
 
void setVerbose ()
 
void setSummary ()
 
double * getArgs ()
 
std::string * getArgsStr ()
 
double getArg (int j)
 
std::string getArgStr (int j)
 
std::string getModelName ()
 
int getDSum ()
 
int summary ()
 
int verbose ()
 
void saveDecayInfo (EvtId ipar, int ndaug, EvtId *daug, int narg, std::vector< std::string > &args, std::string name, double brfr)
 
void printSummary ()
 
void setProbMax (double prbmx)
 
void noProbMax ()
 
void checkNArg (int a1, int a2=-1, int a3=-1, int a4=-1)
 
void checkNDaug (int d1, int d2=-1)
 
void checkSpinParent (EvtSpinType::spintype sp)
 
void checkSpinDaughter (int d1, EvtSpinType::spintype sp)
 
virtual int nRealDaughters ()
 

Additional Inherited Members

- Static Public Member Functions inherited from EvtDecayBase
static void findMasses (EvtParticle *p, int ndaugs, EvtId daugs[10], double masses[10])
 
static void findMass (EvtParticle *p)
 
static double findMaxMass (EvtParticle *p)
 
- Protected Member Functions inherited from EvtDecayBase
bool daugsDecayedByParentModel ()
 
- Protected Attributes inherited from EvtDecayBase
bool _daugsDecayedByParentModel
 

Detailed Description

Definition at line 33 of file EvtPhokhara_etapgam.hh.

Constructor & Destructor Documentation

◆ EvtPhokhara_etapgam()

EvtPhokhara_etapgam::EvtPhokhara_etapgam ( )

Definition at line 67 of file EvtPhokhara_etapgam.cc.

67{}

Referenced by clone().

◆ ~EvtPhokhara_etapgam()

EvtPhokhara_etapgam::~EvtPhokhara_etapgam ( )
virtual

Definition at line 68 of file EvtPhokhara_etapgam.cc.

68 {
69 int i;
70 //the deletion of commands is really uggly!
71
72 if (nphokharadecays==0) {
73 delete [] commands;
74 commands=0;
75 return;
76 }
77
78 for(i=0;i<nphokharadecays;i++){
79 if (phokharadecays[i]==this){
80 phokharadecays[i]=phokharadecays[nphokharadecays-1];
81 nphokharadecays--;
82 if (nphokharadecays==0) {
83 delete [] commands;
84 commands=0;
85 }
86 return;
87 }
88 }
89
90 report(ERROR,"EvtGen") << "Error in destroying Phokhara model!"<<endl;
91
92}
ostream & report(Severity severity, const char *facility)
Definition EvtReport.cc:36
@ ERROR
Definition EvtReport.hh:49

Member Function Documentation

◆ clone()

EvtDecayBase * EvtPhokhara_etapgam::clone ( )
virtual

Implements EvtDecayBase.

Definition at line 101 of file EvtPhokhara_etapgam.cc.

101 {
102
103 return new EvtPhokhara_etapgam;
104
105}

◆ command()

void EvtPhokhara_etapgam::command ( std::string cmd)
virtual

Reimplemented from EvtDecayBase.

Definition at line 160 of file EvtPhokhara_etapgam.cc.

160 {
161
162 if (ncommand==lcommand){
163
164 lcommand=10+2*lcommand;
165
166 std::string* newcommands=new std::string[lcommand];
167
168 int i;
169
170 for(i=0;i<ncommand;i++){
171 newcommands[i]=commands[i];
172 }
173
174 delete [] commands;
175
176 commands=newcommands;
177
178 }
179
180 commands[ncommand]=cmd;
181
182 ncommand++;
183
184}

◆ commandName()

std::string EvtPhokhara_etapgam::commandName ( )
virtual

Reimplemented from EvtDecayBase.

Definition at line 154 of file EvtPhokhara_etapgam.cc.

154 {
155
156 return std::string("PhokharaPar");
157
158}

◆ decay()

void EvtPhokhara_etapgam::decay ( EvtParticle * p)
virtual

Implements EvtDecayBase.

Definition at line 188 of file EvtPhokhara_etapgam.cc.

188 {
189 EvtId myvpho=EvtPDL::getId("vpho");
190 if(p->getId()!=myvpho) {std::cout<<"Parent particle is required to be vpho for Phokhara model"<<std::endl;abort();}
191 if(nevtgen==0) {init_mode(p);}
192 else{init_evt(p);}
193
194 std::cout<<"PHOKHARA : eta' gamma mode "<<std::endl;
195 int istdheppar=EvtPDL::getStdHep(p->getId());
196 int ntrials = 0;
197 int tr_old[3];
198 tr_old[0] = (int)maxima_.tr[0];
199 tr_old[1] = (int)maxima_.tr[1];
200 tr_old[2] = (int)maxima_.tr[2];
201
202 while( ntrials < 1000000)
203 {
204 ievent++;
205 RANLXDF(Ar_r,1);
206 Ar[1] = Ar_r[0];
207
208 if (Ar[1] <= (maxima_.Mmax[0]/(maxima_.Mmax[0]+maxima_.Mmax[1]+maxima_.Mmax[2]))) {
209 maxima_.count[0] = maxima_.count[0]+1.0;
210 GEN_0PH(2,qqmin,ctes_.Sp,cos3min,cos3max);
211 }else
212 if (Ar[1] <= ( (maxima_.Mmax[0]+maxima_.Mmax[1])/(maxima_.Mmax[0]+maxima_.Mmax[1]+maxima_.Mmax[2]))) {
213 maxima_.count[1] = maxima_.count[1]+1.0;
214 GEN_1PH(2,qqmin,qqmax,cos1min,cos1max,cos3min,cos3max);
215 }
216 else {
217 maxima_.count[2] = maxima_.count[2]+1.0;
218 GEN_2PH(2,qqmin,cos1min,cos1max,cos2min,cos2max,cos3min,cos3max);
219 }
220
221 if( ((int)maxima_.tr[0]+(int)maxima_.tr[1]+(int)maxima_.tr[2]) > (tr_old[0]+tr_old[1]+tr_old[2]) ) // event accepted after cuts
222 {
223 goto storedEvents;
224 }
225 ntrials ++;
226 }
227
228 std::cout <<"FATAL: Could not satisfy cuts after " << ntrials << "trials. Terminate." <<std::endl;
229 //----
230 storedEvents:
231 int more=0;
232 int numstable=0;
233 int numparton=0;
234 EvtId evtnumstable[100];//
235 EvtVector4R p4[20];
236
237 // except ISR photos, products depending on channel
238 if (flags_.pion == 0) { // mu+ mu-
239 // mu+
240 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(-13);
241 p4[numstable].set(ctes_.momenta[0][5],ctes_.momenta[1][5], ctes_.momenta[2][5], ctes_.momenta[3][5]);
242 numstable++;
243 // mu -
244 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(13);
245 p4[numstable].set(ctes_.momenta[0][6],ctes_.momenta[1][6], ctes_.momenta[2][6], ctes_.momenta[3][6]);
246 numstable++;
247 }
248 if (flags_.pion == 1) { // pi+ pi-
249 // pi+
250 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(211);
251 p4[numstable].set(ctes_.momenta[0][5],ctes_.momenta[1][5], ctes_.momenta[2][5], ctes_.momenta[3][5]);
252 numstable++;
253 // pi -
254 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(-211);
255 p4[numstable].set(ctes_.momenta[0][6],ctes_.momenta[1][6], ctes_.momenta[2][6], ctes_.momenta[3][6]);
256 numstable++;
257 }
258 if (flags_.pion == 2) { // pi+ pi-2pi0
259 // pi0
260 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(111);
261 p4[numstable].set(ctes_.momenta[0][5],ctes_.momenta[1][5], ctes_.momenta[2][5], ctes_.momenta[3][5]);
262 numstable++;
263 // pi0
264 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(111);
265 p4[numstable].set(ctes_.momenta[0][6],ctes_.momenta[1][6], ctes_.momenta[2][6], ctes_.momenta[3][6]);
266 numstable++;
267 // pi-
268 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(-211);
269 p4[numstable].set(ctes_.momenta[0][7],ctes_.momenta[1][7], ctes_.momenta[2][7], ctes_.momenta[3][7]);
270 numstable++;
271 // pi +
272 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(211);
273 p4[numstable].set(ctes_.momenta[0][8],ctes_.momenta[1][8], ctes_.momenta[2][8], ctes_.momenta[3][8]);
274 numstable++;
275 }
276 if (flags_.pion == 3) { // 2(pi+ pi-)
277 // pi+
278 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(211);
279 p4[numstable].set(ctes_.momenta[0][5],ctes_.momenta[1][5], ctes_.momenta[2][5], ctes_.momenta[3][5]);
280 numstable++;
281 // pi-
282 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(-211);
283 p4[numstable].set(ctes_.momenta[0][6],ctes_.momenta[1][6], ctes_.momenta[2][6], ctes_.momenta[3][6]);
284 numstable++;
285 // pi+
286 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(-211);
287 p4[numstable].set(ctes_.momenta[0][7],ctes_.momenta[1][7], ctes_.momenta[2][7], ctes_.momenta[3][7]);
288 numstable++;
289 // pi -
290 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(211);
291 p4[numstable].set(ctes_.momenta[0][8],ctes_.momenta[1][8], ctes_.momenta[2][8], ctes_.momenta[3][8]);
292 numstable++;
293 }
294 if (flags_.pion == 4) { // ppbar
295 // pbar
296 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(-2212);
297 p4[numstable].set(ctes_.momenta[0][5],ctes_.momenta[1][5], ctes_.momenta[2][5], ctes_.momenta[3][5]);
298 numstable++;
299 // p
300 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(2212);
301 p4[numstable].set(ctes_.momenta[0][6],ctes_.momenta[1][6], ctes_.momenta[2][6], ctes_.momenta[3][6]);
302 numstable++;
303 }
304 if (flags_.pion == 5) { // nnbar
305 // pbar
306 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(-2112);
307 p4[numstable].set(ctes_.momenta[0][5],ctes_.momenta[1][5], ctes_.momenta[2][5], ctes_.momenta[3][5]);
308 numstable++;
309 // p
310 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(2112);
311 p4[numstable].set(ctes_.momenta[0][6],ctes_.momenta[1][6], ctes_.momenta[2][6], ctes_.momenta[3][6]);
312 numstable++;
313 }
314 if (flags_.pion == 6) { // K+ K-
315 // K+
316 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(321);
317 p4[numstable].set(ctes_.momenta[0][5],ctes_.momenta[1][5], ctes_.momenta[2][5], ctes_.momenta[3][5]);
318 numstable++;
319 // K -
320 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(-321);
321 p4[numstable].set(ctes_.momenta[0][6],ctes_.momenta[1][6], ctes_.momenta[2][6], ctes_.momenta[3][6]);
322 numstable++;
323 }
324 if (flags_.pion == 7) { // K0K0bar
325 // Kbar
326 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(311);
327 p4[numstable].set(ctes_.momenta[0][5],ctes_.momenta[1][5], ctes_.momenta[2][5], ctes_.momenta[3][5]);
328 numstable++;
329 // K0
330 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(-311);
331 p4[numstable].set(ctes_.momenta[0][6],ctes_.momenta[1][6], ctes_.momenta[2][6], ctes_.momenta[3][6]);
332 numstable++;
333 }
334 if (flags_.pion == 8) { // pi+ pi-pi0
335 // pi+
336 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(211);
337 p4[numstable].set(ctes_.momenta[0][5],ctes_.momenta[1][5], ctes_.momenta[2][5], ctes_.momenta[3][5]);
338 numstable++;
339 // pi-
340 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(-211);
341 p4[numstable].set(ctes_.momenta[0][6],ctes_.momenta[1][6], ctes_.momenta[2][6], ctes_.momenta[3][6]);
342 numstable++;
343 // pi0
344 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(111);
345 p4[numstable].set(ctes_.momenta[0][7],ctes_.momenta[1][7], ctes_.momenta[2][7], ctes_.momenta[3][7]);
346 numstable++;
347 }
348 if (flags_.pion == 9) { //Lambda Lambdabar-> pi+ pi- ppbar
349 // pi+
350 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(211);
351 p4[numstable].set(ctes_.momenta[0][7],ctes_.momenta[1][7], ctes_.momenta[2][7], ctes_.momenta[3][7]);
352 numstable++;
353 // pbar
354 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(-2212);
355 p4[numstable].set(ctes_.momenta[0][8],ctes_.momenta[1][8], ctes_.momenta[2][8], ctes_.momenta[3][8]);
356 numstable++;
357 // pi-
358 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(-211);
359 p4[numstable].set(ctes_.momenta[0][9],ctes_.momenta[1][9], ctes_.momenta[2][9], ctes_.momenta[3][9]);
360 numstable++;
361 // p
362 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(2212);
363 p4[numstable].set(ctes_.momenta[0][10],ctes_.momenta[1][10], ctes_.momenta[2][10], ctes_.momenta[3][10]);
364 numstable++;
365 }
366 if (flags_.pion == 13) { // pi0 gamma
367 // pi0
368 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(111);
369 p4[numstable].set(ctes_.momenta[0][5],ctes_.momenta[1][5], ctes_.momenta[2][5], ctes_.momenta[3][5]);
370 numstable++;
371 // gamma
372 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(22);
373 p4[numstable].set(ctes_.momenta[0][6],ctes_.momenta[1][6], ctes_.momenta[2][6], ctes_.momenta[3][6]);
374 numstable++;
375 }
376 if (flags_.pion == 14) { // eta gamma
377 // eta
378 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(221);
379 p4[numstable].set(ctes_.momenta[0][5],ctes_.momenta[1][5], ctes_.momenta[2][5], ctes_.momenta[3][5]);
380 numstable++;
381 // gamma
382 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(22);
383 p4[numstable].set(ctes_.momenta[0][6],ctes_.momenta[1][6], ctes_.momenta[2][6], ctes_.momenta[3][6]);
384 numstable++;
385 }
386 if (flags_.pion == 15) { // eta' gamma
387 // eta'
388 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(331);
389 p4[numstable].set(ctes_.momenta[0][5],ctes_.momenta[1][5], ctes_.momenta[2][5], ctes_.momenta[3][5]);
390 numstable++;
391 // gamma
392 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(22);
393 p4[numstable].set(ctes_.momenta[0][6],ctes_.momenta[1][6], ctes_.momenta[2][6], ctes_.momenta[3][6]);
394 numstable++;
395 }
396
397 // ISR gamma
398 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(22);
399 p4[numstable].set(ctes_.momenta[0][2],ctes_.momenta[1][2], ctes_.momenta[2][2], ctes_.momenta[3][2]);
400 numstable++;
401 if( ctes_.momenta[0][3] != 0 ) // second photon exists
402 {
403 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(22);
404 p4[numstable].set(ctes_.momenta[0][3],ctes_.momenta[1][3], ctes_.momenta[2][3], ctes_.momenta[3][3]);
405 numstable++;
406 }
407
408 int channel=EvtDecayTable::inChannelList(p->getId(),numstable,evtnumstable);
409 more=(channel!=-1);
410 if(more) {std::cout<<"Existence of mode "<<channel<<" in exclusive decay list has the same final state as this one"<<std::endl;abort(); }
411
412 p->makeDaughters(numstable,evtnumstable);
413 //double weight = p->initializePhaseSpace(getNDaug(),getDaugs());
414
415 int ndaugFound=0;
416 EvtVector4R SUMP4(0,0,0,0);
417 for(int i=0;i<numstable;i++){
418 p->getDaug(i)->init(evtnumstable[i],p4[i]);
419 ndaugFound++;
420 }
421 if ( ndaugFound == 0 ) {
422 report(ERROR,"EvtGen") << "Phokhara has failed to do a decay ";
423 report(ERROR,"EvtGen") << EvtPDL::name(p->getId()).c_str() << " " << p->mass()<<endl;
424 assert(0);
425 }
426
427 nevtgen++;
428 return ;
429
430}
#define GEN_1PH(I, QQMIN, QQMAX, COS1MIN, COS1MAX, COS3MIN, COS3MAX)
#define RANLXDF(AR, VAL)
#define GEN_0PH(I, QQMIN, SP, COS3MIN, COS3MAX)
struct @15 ctes_
struct @21 maxima_
struct @22 flags_
#define GEN_2PH(I, QQMIN, COS1MIN, COS1MAX, COS2MIN, COS2MAX, COS3MIN, COS3MAX)
static int inChannelList(EvtId parent, int ndaug, EvtId *daugs)
Definition EvtId.hh:27
static int getStdHep(EvtId id)
Definition EvtPDL.hh:56
static EvtId evtIdFromStdHep(int stdhep)
Definition EvtPDL.cc:244
static std::string name(EvtId i)
Definition EvtPDL.hh:64
static EvtId getId(const std::string &name)
Definition EvtPDL.cc:287
void makeDaughters(int ndaug, EvtId *id)
virtual void init(EvtId part_n, const EvtVector4R &p4)=0
EvtId getId() const
EvtParticle * getDaug(int i)
double mass() const
void init_evt(EvtParticle *p)
void init_mode(EvtParticle *p)
double double double * p4
Definition qcdloop1.h:77

◆ ExclusiveDecay()

void EvtPhokhara_etapgam::ExclusiveDecay ( EvtParticle * p)

◆ getName()

void EvtPhokhara_etapgam::getName ( std::string & name)
virtual

Implements EvtDecayBase.

Definition at line 95 of file EvtPhokhara_etapgam.cc.

95 {
96
97 model_name="PHOKHARA_etapgam";
98
99}

◆ getTotalEvt()

int EvtPhokhara_etapgam::getTotalEvt ( )
inline

Definition at line 52 of file EvtPhokhara_etapgam.hh.

52{return nevt;}

◆ init()

void EvtPhokhara_etapgam::init ( )
virtual

Reimplemented from EvtDecayBase.

Definition at line 127 of file EvtPhokhara_etapgam.cc.

127 {
128 checkNArg(0);
129
130 std::string locvp=getenv("BESEVTGENROOT");
131 system("cat $BESEVTGENROOT/share/phokhara_10.0.param>phokhara_10.0.param");
132 system("cat $BESEVTGENROOT/share/phokhara_10.0.fferr>phokhara_10.0.fferr");
133 system("cat $BESEVTGENROOT/share/phokhara_10.0.ffwarn>phokhara_10.0.ffwarn");
134
135
136 if (getParentId().isAlias()){
137
138 report(ERROR,"EvtGen") << "EvtPhokhara finds that you are decaying the"<<endl
139 << " aliased particle "
140 << EvtPDL::name(getParentId()).c_str()
141 << " with the Phokhara model"<<endl
142 << " this does not work, please modify decay table."
143 << endl;
144 report(ERROR,"EvtGen") << "Will terminate execution!"<<endl;
145 ::abort();
146
147 }
148
149 store(this);
150
151}
EvtId getParentId()
void checkNArg(int a1, int a2=-1, int a3=-1, int a4=-1)

◆ init_evt()

void EvtPhokhara_etapgam::init_evt ( EvtParticle * p)

======== list parameters to be initialized

Definition at line 468 of file EvtPhokhara_etapgam.cc.

468 {
469 m_pion=15;
470 // mu+mu-(0),pi+pi-(1),2pi0pi+pi-(2),
471 // 2pi+2pi-(3),ppbar(4),nnbar(5),
472 // K+K-(6),K0K0bar(7),pi+pi-pi0(8),
473 // Lamb Lambbar->pi-pi+ppbar(9)
474 // pi+pi-eta
475#include "Phokhara_init_evt.txt"
476}

Referenced by decay().

◆ init_mode()

void EvtPhokhara_etapgam::init_mode ( EvtParticle * p)

======== list parameters to be initialized

Definition at line 115 of file EvtPhokhara_etapgam.cc.

115 {
116 m_pion=15;
117 // mu+mu-(0),pi+pi-(1),2pi0pi+pi-(2),
118 // 2pi+2pi-(3),ppbar(4),nnbar(5),
119 // K+K-(6),K0K0bar(7),pi+pi-pi0(8),
120 // Lamb Lambbar->pi-pi+ppbar(9)
121 // pi+pi-eta
122#include "Phokhara_init_mode.txt"
123}

Referenced by decay().

◆ initProbMax()

void EvtPhokhara_etapgam::initProbMax ( )
virtual

Reimplemented from EvtDecayBase.

Definition at line 108 of file EvtPhokhara_etapgam.cc.

108 {
109
110 noProbMax();
111
112}

◆ PhokharaInit()

void EvtPhokhara_etapgam::PhokharaInit ( int dummy)

Definition at line 455 of file EvtPhokhara_etapgam.cc.

455 {
456 static int first=1;
457 if (first){
458
459 first=0;
460 //for(int i=0;i<ncommand;i++)
461 // lugive0_(commands[i].c_str(),strlen(commands[i].c_str()));
462 }
463
464}
Index first(Pair i)

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