diff -ru 9.1/EvtGenBase/EvtDecayAmp.hh 9.1/EvtGenBase/EvtDecayAmp.hh --- 9.1/EvtGenBase/EvtDecayAmp.hh 2003-10-02 18:25:52.000000000 +0100 +++ 9.1/EvtGenBase/EvtDecayAmp.hh 2009-01-09 09:15:16.000000000 +0000 @@ -28,7 +28,7 @@ public: - void makeDecay(EvtParticle* p); + void makeDecay(EvtParticle* p,bool recursive=true); inline void setWeight(double weight) {_weight=weight;} /** @@ -60,6 +60,13 @@ void vertex(int *i1, const EvtComplex& amp) { _amp2.vertex(i1,amp);} + /** + * Provide access to the amplitude + */ + const EvtAmp & amplitude() const + { return _amp2;} + + virtual ~EvtDecayAmp() {} protected: diff -ru 9.1/EvtGenBase/EvtDecayBase.hh 9.1/EvtGenBase/EvtDecayBase.hh --- 9.1/EvtGenBase/EvtDecayBase.hh 2003-10-02 18:25:52.000000000 +0100 +++ 9.1/EvtGenBase/EvtDecayBase.hh 2009-01-09 09:15:40.000000000 +0000 @@ -37,7 +37,7 @@ //by any derived class virtual void getName(std::string& name)=0; virtual void decay(EvtParticle *p)=0; - virtual void makeDecay(EvtParticle *p)=0; + virtual void makeDecay(EvtParticle *p,bool recursive=true)=0; virtual EvtDecayBase* clone()=0; diff -ru 9.1/EvtGenBase/EvtDecayIncoherent.hh 9.1/EvtGenBase/EvtDecayIncoherent.hh --- 9.1/EvtGenBase/EvtDecayIncoherent.hh 2003-10-02 18:25:52.000000000 +0100 +++ 9.1/EvtGenBase/EvtDecayIncoherent.hh 2009-01-09 09:15:48.000000000 +0000 @@ -30,7 +30,7 @@ public: - void makeDecay(EvtParticle* p); + void makeDecay(EvtParticle* p,bool recursive=true); virtual ~EvtDecayIncoherent() {} diff -ru 9.1/EvtGenBase/EvtDecayProb.hh 9.1/EvtGenBase/EvtDecayProb.hh --- 9.1/EvtGenBase/EvtDecayProb.hh 2003-10-02 18:25:52.000000000 +0100 +++ 9.1/EvtGenBase/EvtDecayProb.hh 2009-01-09 09:15:57.000000000 +0000 @@ -29,7 +29,7 @@ public: - void makeDecay(EvtParticle* p); + void makeDecay(EvtParticle* p,bool recursive=true); void setProb(double prob) { _prob=prob;} double getProb() { return _prob;} diff -ru 9.1/EvtGenBase/EvtDiracParticle.hh 9.1/EvtGenBase/EvtDiracParticle.hh --- 9.1/EvtGenBase/EvtDiracParticle.hh 2003-10-02 18:25:52.000000000 +0100 +++ 9.1/EvtGenBase/EvtDiracParticle.hh 2009-01-09 09:16:43.000000000 +0000 @@ -36,6 +36,9 @@ EvtDiracParticle(); virtual ~EvtDiracParticle(); void init(EvtId part_n,const EvtVector4R& p4); + void init(EvtId part_n,const EvtVector4R& p4, + const EvtDiracSpinor &,const EvtDiracSpinor &, + const EvtDiracSpinor &,const EvtDiracSpinor &); EvtDiracSpinor spParent(int) const; EvtDiracSpinor sp(int) const; EvtSpinDensity rotateToHelicityBasis() const; diff -ru 9.1/EvtGenBase/EvtParticle.hh 9.1/EvtGenBase/EvtParticle.hh --- 9.1/EvtGenBase/EvtParticle.hh 2003-10-10 10:21:43.000000000 +0100 +++ 9.1/EvtGenBase/EvtParticle.hh 2009-01-09 09:17:38.000000000 +0000 @@ -33,6 +33,7 @@ class EvtTensor4C; class EvtStdHep; class EvtSecondary; +class EvtRaritaSchwinger; const int MAX_DAUG =100; const int MAX_LEVEL=10; @@ -107,6 +108,18 @@ * Returns tensor in the particles own restframe for a spin 2 particle. */ virtual EvtTensor4C epsTensor(int i) const; + + /** + * Returns Rarita-Schwinger spinor in the parents restframe for a + * Rarita-Schwinger particle. + */ + virtual EvtRaritaSchwinger spRSParent(int) const; + + /** + * Returns Rarita-Schwinger spinor in the particles own restframe for a + * Rarita-Schwinger particle. + */ + virtual EvtRaritaSchwinger spRS(int) const; /** diff -ru 9.1/EvtGenBase/EvtPDL.hh 9.1/EvtGenBase/EvtPDL.hh --- 9.1/EvtGenBase/EvtPDL.hh 2007-10-14 19:50:07.000000000 +0100 +++ 9.1/EvtGenBase/EvtPDL.hh 2009-01-09 09:27:12.000000000 +0000 @@ -69,6 +69,7 @@ static void alias(EvtId num,const std::string& newname); static void aliasChgConj(EvtId a,EvtId abar); static int entries() ; + static EvtId getEntry(int i); static void reSetMass(EvtId i, double mass) ; static void reSetWidth(EvtId i, double width); static void reSetMassMin(EvtId i, double mass); diff -ru 9.1/EvtGenBase/EvtRaritaSchwingerParticle.hh 9.1/EvtGenBase/EvtRaritaSchwingerParticle.hh --- 9.1/EvtGenBase/EvtRaritaSchwingerParticle.hh 2003-10-02 18:25:55.000000000 +0100 +++ 9.1/EvtGenBase/EvtRaritaSchwingerParticle.hh 2009-01-09 09:32:54.000000000 +0000 @@ -35,6 +35,11 @@ EvtRaritaSchwingerParticle(); virtual ~EvtRaritaSchwingerParticle(); void init(EvtId id,const EvtVector4R& p4); + void init(EvtId id,const EvtVector4R& p4, + const EvtRaritaSchwinger &,const EvtRaritaSchwinger &, + const EvtRaritaSchwinger &,const EvtRaritaSchwinger &, + const EvtRaritaSchwinger &,const EvtRaritaSchwinger &, + const EvtRaritaSchwinger &,const EvtRaritaSchwinger &); EvtRaritaSchwinger spRSParent(int) const; EvtRaritaSchwinger spRS(int) const; EvtSpinDensity rotateToHelicityBasis() const; diff -ru 9.1/EvtGenBase/EvtTensorParticle.hh 9.1/EvtGenBase/EvtTensorParticle.hh --- 9.1/EvtGenBase/EvtTensorParticle.hh 2003-10-02 18:25:57.000000000 +0100 +++ 9.1/EvtGenBase/EvtTensorParticle.hh 2009-01-09 09:19:40.000000000 +0000 @@ -33,7 +33,10 @@ void init(EvtId part_n,double e,double px,double py,double pz); void init(EvtId part_n,const EvtVector4R& p4); -//Returns polarization tensors. + void init(EvtId part_n,const EvtVector4R& p4, + const EvtTensor4C&,const EvtTensor4C&,const EvtTensor4C&, + const EvtTensor4C&,const EvtTensor4C&); + //Returns polarization tensors. EvtTensor4C epsTensorParent(int i) const; EvtTensor4C epsTensor(int i) const; diff -ru 9.1/EvtGenBase/EvtVectorParticle.hh 9.1/EvtGenBase/EvtVectorParticle.hh --- 9.1/EvtGenBase/EvtVectorParticle.hh 2003-10-02 18:25:57.000000000 +0100 +++ 9.1/EvtGenBase/EvtVectorParticle.hh 2009-01-09 09:19:58.000000000 +0000 @@ -35,6 +35,8 @@ void init(EvtId part_n,double e,double px,double py,double pz); void init(EvtId part_n,const EvtVector4R& p); + void init(EvtId part_n,const EvtVector4R& p, + const EvtVector4C&,const EvtVector4C&,const EvtVector4C&); EvtVector4C epsParent(int i) const; EvtVector4C eps(int i) const; EvtSpinDensity rotateToHelicityBasis() const; diff -ru 9.1/src/EvtDecayAmp.cpp 9.1/src/EvtDecayAmp.cpp --- 9.1/src/EvtDecayAmp.cpp 2004-07-12 17:13:28.000000000 +0100 +++ 9.1/src/EvtDecayAmp.cpp 2009-01-09 09:22:40.000000000 +0000 @@ -30,7 +30,7 @@ #include "EvtGenBase/EvtReport.hh" -void EvtDecayAmp::makeDecay(EvtParticle* p){ +void EvtDecayAmp::makeDecay(EvtParticle* p,bool recursive){ int ntimes=10000; @@ -153,6 +153,7 @@ } //report(INFO,"EvtGen") << "Found " << p->getNDaug() << " daughters\n"; + if(recursive) { for(i=0;igetNDaug();i++){ rho.SetDim(_amp2.dstates[i]); @@ -206,6 +207,7 @@ report(ERROR,"EvtGen") << p->getSpinDensityBackward(); } + } if (getPHOTOS() || EvtRadCorr::alwaysRadCorr()) { EvtRadCorr::doRadCorr(p); diff -ru 9.1/src/EvtDecayIncoherent.cpp 9.1/src/EvtDecayIncoherent.cpp --- 9.1/src/EvtDecayIncoherent.cpp 2004-07-12 17:13:28.000000000 +0100 +++ 9.1/src/EvtDecayIncoherent.cpp 2009-01-09 09:35:55.000000000 +0000 @@ -26,7 +26,7 @@ #include "EvtGenBase/EvtPDL.hh" -void EvtDecayIncoherent::makeDecay(EvtParticle* p){ +void EvtDecayIncoherent::makeDecay(EvtParticle* p, bool recursive){ int i; //initialize this the hard way.. @@ -45,6 +45,8 @@ EvtRadCorr::doRadCorr(p); } + if(!recursive) return; + //Now decay the daughters. for(i=0;igetNDaug();i++){ //Need to set the spin density of the daughters to be diff -ru 9.1/src/EvtDecayProb.cpp 9.1/src/EvtDecayProb.cpp --- 9.1/src/EvtDecayProb.cpp 2004-07-12 17:13:29.000000000 +0100 +++ 9.1/src/EvtDecayProb.cpp 2009-01-09 09:38:44.000000000 +0000 @@ -26,7 +26,7 @@ #include "EvtGenBase/EvtPDL.hh" #include "EvtGenBase/EvtReport.hh" -void EvtDecayProb::makeDecay(EvtParticle* p){ +void EvtDecayProb::makeDecay(EvtParticle* p, bool recursive){ int ntimes=10000; @@ -70,6 +70,7 @@ EvtRadCorr::doRadCorr(p); } + if(!recursive) return; //Now decay the daughters. int i; diff -ru 9.1/src/EvtDiracParticle.cpp 9.1/src/EvtDiracParticle.cpp --- 9.1/src/EvtDiracParticle.cpp 2005-04-05 22:55:03.000000000 +0100 +++ 9.1/src/EvtDiracParticle.cpp 2009-01-09 09:23:40.000000000 +0000 @@ -79,6 +79,26 @@ setLifetime(); } +void EvtDiracParticle::init(EvtId part_n,const EvtVector4R& p4, + const EvtDiracSpinor & prod1, const EvtDiracSpinor & prod2, + const EvtDiracSpinor & rest1, const EvtDiracSpinor & rest2){ + + _validP4=true; + setp(p4); + setpart_num(part_n); + + if (EvtPDL::getStdHep(part_n)==0){ + report(ERROR,"EvtGen") << "Error in EvtDiracParticle::init, part_n=" + << part_n.getId()<