1 #include "EvtGenBase/EvtPatches.hh"
2 #include "EvtGenBase/EvtGenKine.hh"
3 #include "EvtGenBase/EvtPDL.hh"
4 #include "EvtGenBase/EvtReport.hh"
5 #include "EvtGenBase/EvtResonance.hh"
6 #include "EvtGenBase/EvtResonance2.hh"
7 #include "EvtGenModels/EvtMultibody.hh"
8 #include "EvtGenBase/EvtConst.hh"
9 #include "EvtGenBase/EvtdFunction.hh"
10 #include "EvtGenBase/EvtKine.hh"
11 #include "EvtGenBase/EvtParticle.hh"
13 EvtMultibody::~EvtMultibody()
15 if( _decayTree != NULL ) delete _decayTree;
17 if( _ilist != NULL ) delete [] _ilist;
21 std::string EvtMultibody::getName()
26 EvtDecayBase* EvtMultibody::clone()
28 return new EvtMultibody;
31 void EvtMultibody::init()
35 _decayTree = new EvtMTree( getDaugs(), getNDaug() );
36 _ilist = new int[getNDaug()+1];
38 for(int i=0; i<N-1; ++i) {
39 if(getArgStr( i )=="RESONANCE") {
40 _decayTree->addtree( getArgStr( ++i ) );
42 report(ERROR,"EvtGen")
43 << "Syntax error at " << getArgStr( i ) << std::endl;
49 // Set the maximum probability amplitude - if function is left blank then the
50 // program will search for it. This however is not deterministic and therefore
51 // in the release cannot be in place.
52 void EvtMultibody::initProbMax()
57 void EvtMultibody::decay( EvtParticle *p )
59 // Initialize the phase space before doing anything else!
60 p->initializePhaseSpace(getNDaug(),getDaugs());
62 EvtSpinAmp amp = _decayTree->amplitude( p );
64 vector<int> index = amp.iterallowedinit();
65 vector<unsigned int> spins = amp.dims();
68 for( size_t i=0; i<index.size(); ++i ) {
69 _ilist[i]=index[i]+spins[i];
72 vertex( _ilist, amp( index ) );
73 } while( amp.iterateallowed( index ) );