//-------------------------------------------------------------------------- // // Environment: // This software is part of the EvtGen package developed jointly // for the BaBar and CLEO collaborations. If you use all or part // of it, please give an appropriate acknowledgement. // // Copyright Information: See EvtGen/COPYRIGHT // Copyright (C) 2000 Caltech, UCSB // // Module: EvtHelAmp.cc // // Description: Decay model for implementation of generic 2 body // decay specified by the partial wave amplitudes // // // Modification history: // // fkw February 2, 2001 changes to satisfy KCC // RYD September 7, 2000 Module created // //------------------------------------------------------------------------ // #include "EvtGenBase/EvtPatches.hh" #include #include "EvtGenBase/EvtParticle.hh" #include "EvtGenBase/EvtGenKine.hh" #include "EvtGenBase/EvtPDL.hh" #include "EvtGenBase/EvtVector4C.hh" #include "EvtGenBase/EvtTensor4C.hh" #include "EvtGenBase/EvtReport.hh" #include "EvtGenModels/EvtPartWave.hh" #include "EvtGenBase/EvtEvalHelAmp.hh" #include "EvtGenBase/EvtId.hh" #include #include "EvtGenBase/EvtConst.hh" #include "EvtGenBase/EvtKine.hh" #include "EvtGenBase/EvtCGCoefSingle.hh" #include using std::endl; EvtPartWave::~EvtPartWave() {} std::string EvtPartWave::getName(){ return "PARTWAVE"; } EvtDecayBase* EvtPartWave::clone(){ return new EvtPartWave; } void EvtPartWave::init(){ checkNDaug(2); //find out how many states each particle have int _nA=EvtSpinType::getSpinStates(EvtPDL::getSpinType(getParentId())); int _nB=EvtSpinType::getSpinStates(EvtPDL::getSpinType(getDaug(0))); int _nC=EvtSpinType::getSpinStates(EvtPDL::getSpinType(getDaug(1))); if (verbose()){ report(INFO,"EvtGen")<<"_nA,_nB,_nC:" <<_nA<<","<<_nB<<","<<_nC<abs(_JB2+_JC2)) Smax=abs(_JB2+_JC2); int S; for (S=Smin;S<=Smax;S+=2){ _nL[_nPartialWaveAmp]=L; _nS[_nPartialWaveAmp]=S; _nPartialWaveAmp++; if (verbose()){ report(INFO,"EvtGen")<<"M["<=abs(m1)){ EvtComplex tmp=sqrt(fkwTmp) *c1.coef(S,m1,s2,s3,lambda2,-lambda3) *c2.coef(s1,m1,L,S,0,m1)*_M[i]; _HBC[ib][ic]+=tmp; } } if (verbose()){ report(INFO,"EvtGen")<<"_HBC["<1e-6){ report(ERROR,"EvtGen")<<"In EvtPartWave for decay " << EvtPDL::name(getParentId()) << " -> " << EvtPDL::name(getDaug(0)) << " " << EvtPDL::name(getDaug(1)) << std::endl; report(ERROR,"EvtGen")<<"With arguments: "<probMax(); if (verbose()){ report(INFO,"EvtGen")<<"Calculated probmax"<initializePhaseSpace(getNDaug(),getDaugs()); _evalHelAmp->evalAmp(p,_amp2); return; } void EvtPartWave::fillHelicity(int* lambda2,int n,int J2){ int i; //photon is special case! if (n==2&&J2==2) { lambda2[0]=2; lambda2[1]=-2; return; } assert(n==J2+1); for(i=0;i