#ifndef __EVTMTREE_HH__ #define __EVTMTREE_HH__ #include "EvtGenBase/EvtPDL.hh" #include "EvtGenBase/EvtSpinAmp.hh" #include "EvtGenBase/EvtComplex.hh" #include "EvtGenBase/EvtVector4R.hh" #include "EvtGenBase/EvtMNode.hh" #include "EvtGenBase/EvtMParticle.hh" #include "EvtGenBase/EvtMRes.hh" #include using std::vector; #include using std::string; typedef string::const_iterator ptype; class EvtParticle; class EvtMTree { public: EvtMTree( const EvtId * , unsigned int ); ~EvtMTree( ); // return the invariant amplitude of the entire tree EvtSpinAmp amplitude( EvtParticle * ) const; // add a decay tree to the list of trees that we posess void addtree( const string& ); private: vector< EvtMNode * > _root; vector _lbltbl; double _norm; bool parsecheck( char , const string& ); void parseerror( bool, ptype&, ptype&, ptype& ); string parseId( ptype&, ptype&, ptype& ); string parseKey( ptype&, ptype&, ptype& ); vector parseArg( ptype&, ptype&, ptype& ); vector parseAmps( ptype&, ptype&, ptype& ); vector duplicate( const vector& ) const; vector > unionChildren( const string&, vector >& ); vector > parseChildren( ptype&, ptype&, ptype& ); vector parsenode( const string& , bool ); bool validTree( const EvtMNode * ) const; vector makeparticles( const string& ); EvtMRes * makeresonance( const EvtId&, const string &, const vector&, const string& , const vector& , const vector& ); EvtSpinAmp getrotation( EvtParticle * ) const; }; #endif