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

#include <EvtPhokhara_pipieta.hh>

Inheritance diagram for EvtPhokhara_pipieta:

Public Member Functions

 EvtPhokhara_pipieta ()
virtual ~EvtPhokhara_pipieta ()
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_pipieta.hh.

Constructor & Destructor Documentation

◆ EvtPhokhara_pipieta()

EvtPhokhara_pipieta::EvtPhokhara_pipieta ( )

Definition at line 66 of file EvtPhokhara_pipieta.cc.

66{}

Referenced by clone().

◆ ~EvtPhokhara_pipieta()

EvtPhokhara_pipieta::~EvtPhokhara_pipieta ( )
virtual

Definition at line 67 of file EvtPhokhara_pipieta.cc.

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

Member Function Documentation

◆ clone()

EvtDecayBase * EvtPhokhara_pipieta::clone ( )
virtual

Implements EvtDecayBase.

Definition at line 101 of file EvtPhokhara_pipieta.cc.

◆ command()

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

Reimplemented from EvtDecayBase.

Definition at line 138 of file EvtPhokhara_pipieta.cc.

138 {
139
140 if ( ncommand == lcommand )
141 {
142
143 lcommand = 10 + 2 * lcommand;
144
145 std::string* newcommands = new std::string[lcommand];
146
147 int i;
148
149 for ( i = 0; i < ncommand; i++ ) { newcommands[i] = commands[i]; }
150
151 delete[] commands;
152
153 commands = newcommands;
154 }
155
156 commands[ncommand] = cmd;
157
158 ncommand++;
159}

◆ commandName()

std::string EvtPhokhara_pipieta::commandName ( )
virtual

Reimplemented from EvtDecayBase.

Definition at line 136 of file EvtPhokhara_pipieta.cc.

136{ return std::string( "PhokharaPar" ); }

◆ decay()

void EvtPhokhara_pipieta::decay ( EvtParticle * p)
virtual

Implements EvtDecayBase.

Definition at line 161 of file EvtPhokhara_pipieta.cc.

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

◆ ExclusiveDecay()

void EvtPhokhara_pipieta::ExclusiveDecay ( EvtParticle * p)

◆ getName()

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

Implements EvtDecayBase.

Definition at line 96 of file EvtPhokhara_pipieta.cc.

96 {
97
98 model_name = "PHOKHARA_pipieta";
99}

◆ getTotalEvt()

int EvtPhokhara_pipieta::getTotalEvt ( )
inline

Definition at line 51 of file EvtPhokhara_pipieta.hh.

51{ return nevt; }

◆ init()

void EvtPhokhara_pipieta::init ( )
virtual

Reimplemented from EvtDecayBase.

Definition at line 114 of file EvtPhokhara_pipieta.cc.

114 {
115 checkNArg( 0 );
116
117 std::string locvp = getenv( "BESEVTGENROOT" );
118 system( "cat $BESEVTGENROOT/share/phokhara_10.0.param>phokhara_10.0.param" );
119 system( "cat $BESEVTGENROOT/share/phokhara_10.0.fferr>phokhara_10.0.fferr" );
120 system( "cat $BESEVTGENROOT/share/phokhara_10.0.ffwarn>phokhara_10.0.ffwarn" );
121
122 if ( getParentId().isAlias() )
123 {
124
125 report( ERROR, "EvtGen" ) << "EvtPhokhara finds that you are decaying the" << endl
126 << " aliased particle " << EvtPDL::name( getParentId() ).c_str()
127 << " with the Phokhara model" << endl
128 << " this does not work, please modify decay table." << endl;
129 report( ERROR, "EvtGen" ) << "Will terminate execution!" << endl;
130 ::abort();
131 }
132
133 store( this );
134}
EvtId getParentId()
void checkNArg(int a1, int a2=-1, int a3=-1, int a4=-1)

◆ init_evt()

void EvtPhokhara_pipieta::init_evt ( EvtParticle * p)

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

Definition at line 474 of file EvtPhokhara_pipieta.cc.

474 {
475 m_pion = 10;
476 // mu+mu-(0),pi+pi-(1),2pi0pi+pi-(2),
477 // 2pi+2pi-(3),ppbar(4),nnbar(5),
478 // K+K-(6),K0K0bar(7),pi+pi-pi0(8),
479 // Lamb Lambbar->pi-pi+ppbar(9)
480#include "Phokhara_init_evt.txt"
481}

Referenced by decay().

◆ init_mode()

void EvtPhokhara_pipieta::init_mode ( EvtParticle * p)

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

Definition at line 105 of file EvtPhokhara_pipieta.cc.

105 {
106 m_pion = 10;
107 // mu+mu-(0),pi+pi-(1),2pi0pi+pi-(2),
108 // 2pi+2pi-(3),ppbar(4),nnbar(5),
109 // K+K-(6),K0K0bar(7),pi+pi-pi0(8),
110 // Lamb Lambbar->pi-pi+ppbar(9)
111#include "Phokhara_init_mode.txt"
112}

Referenced by decay().

◆ initProbMax()

void EvtPhokhara_pipieta::initProbMax ( )
virtual

Reimplemented from EvtDecayBase.

Definition at line 103 of file EvtPhokhara_pipieta.cc.

103{ noProbMax(); }

◆ PhokharaInit()

void EvtPhokhara_pipieta::PhokharaInit ( int dummy)

Definition at line 463 of file EvtPhokhara_pipieta.cc.

463 {
464 static int first = 1;
465 if ( first )
466 {
467
468 first = 0;
469 // for(int i=0;i<ncommand;i++)
470 // lugive0_(commands[i].c_str(),strlen(commands[i].c_str()));
471 }
472}
Index first(Pair i)

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