EvtLunda Class Reference

#include <EvtLunda.hh>

Inheritance diagram for EvtLunda:

EvtDecayIncoherent EvtDecayBase List of all members.

Public Member Functions

 EvtLunda ()
virtual ~EvtLunda ()
void getName (std::string &name)
EvtDecayBaseclone ()
void decay (EvtParticle *p)
std::string commandName ()
void command (std::string cmd)
void init ()
void initProbMax ()
int getTotalEvt ()
void LundaInit (int dummy)
void ExclusiveDecay (EvtParticle *p)
void makeDecay (EvtParticle *p)
void setDaughterSpinDensity (int daughter)
int isDaughterSpinDensitySet (int daughter)
double getProbMax (double prob)
double resetProbMax (double prob)
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::stringgetArgsStr ()
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 ()

Static Public Member Functions

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

bool daugsDecayedByParentModel ()

Protected Attributes

bool _daugsDecayedByParentModel

Private Member Functions

void store (EvtDecayBase *jsdecay)
void fixPolarizations (EvtParticle *p)

Static Private Attributes

static int nlundadecays = 0
static EvtDecayBasePtrlundadecays = 0
static int ntable = 0
static int ncommand = 0
static int lcommand = 0
static std::stringcommands = 0
static int nevt = 0

Detailed Description

Definition at line 33 of file EvtLunda.hh.


Constructor & Destructor Documentation

EvtLunda::EvtLunda (  ) 

Definition at line 90 of file EvtLunda.cc.

00090 {}

EvtLunda::~EvtLunda (  )  [virtual]

Definition at line 91 of file EvtLunda.cc.

References commands, calibUtil::ERROR, genRecEmupikp::i, lundadecays, nlundadecays, and report().

00091                    {
00092 
00093 
00094   int i;
00095 
00096 
00097   //the deletion of commands is really uggly!
00098 
00099   if (nlundadecays==0) {
00100     delete [] commands;
00101     commands=0;
00102     return;
00103   }
00104 
00105   for(i=0;i<nlundadecays;i++){
00106     if (lundadecays[i]==this){
00107       lundadecays[i]=lundadecays[nlundadecays-1];
00108       nlundadecays--;
00109       if (nlundadecays==0) {
00110         delete [] commands;
00111         commands=0;
00112       }
00113       return;
00114     }
00115   }
00116 
00117   report(ERROR,"EvtGen") << "Error in destroying Lunda model!"<<endl;
00118  
00119 }


Member Function Documentation

void EvtDecayBase::checkNArg ( int  a1,
int  a2 = -1,
int  a3 = -1,
int  a4 = -1 
) [inherited]

Definition at line 482 of file EvtDecayBase.cc.

References EvtDecayBase::_modelname, EvtDecayBase::_narg, calibUtil::ERROR, EvtDecayBase::printSummary(), and report().

Referenced by EvtVVSPwave::init(), EvtVVPIPI_WEIGHTED::init(), EvtVVpipi::init(), EvtVVP::init(), EvtVSSMix::init(), EvtVSSBMixCPT::init(), EvtVSS::init(), EvtVSPPwave::init(), EvtVPHOtoVISRHi::init(), EvtVPHOtoVISR::init(), EvtVll::init(), EvtVectorIsr::init(), EvtTVSPwave::init(), EvtTSS::init(), EvtTrackGen::init(), EvtTauVectornu::init(), EvtTauScalarnu::init(), EvtTaulnunu::init(), EvtTauHadnu::init(), EvtTauGamMu::init(), EvtT2GV::init(), EvtSVVNONCPEIGEN::init(), EvtSVVHelAmp::init(), EvtSVVCPLH::init(), EvtSVVCP::init(), EvtSVSNONCPEIGEN::init(), EvtSVSCPLH::init(), EvtSVSCPiso::init(), EvtSVSCP::init(), EvtSVS::init(), EvtSVPHelAmp::init(), EvtSVPCP::init(), EvtSTSCP::init(), EvtSTS::init(), EvtSSSCPT::init(), EvtSSSCPpng::init(), EvtSSSCP::init(), EvtSSDCP::init(), EvtSLN::init(), EvtSll::init(), EvtS2GV::init(), EvtRexc::init(), EvtPythia::init(), EvtPyGaGa::init(), EvtPycont::init(), EvtPi0Dalitz::init(), EvtPhsp::init(), EvtPhokhara_ppbar::init(), EvtPhokhara_pipipi0::init(), EvtPhokhara_pipi::init(), EvtPhokhara_pi0pi0pipi::init(), EvtPhokhara_nnbar::init(), EvtPhokhara_LLB::init(), EvtPhokhara_KK::init(), EvtPhokhara_K0K0::init(), EvtPhokhara_4pi::init(), EvtPhokhara::init(), EvtPhiDalitz::init(), EvtPartWave::init(), EvtP2GC2::init(), EvtP2GC1::init(), EvtP2GC0::init(), EvtOmegaDalitz::init(), EvtmH2::init(), EvtMelikhov::init(), EvtMBody3::init(), EvtMassH2::init(), EvtMassH1::init(), EvtLNuGamma::init(), EvtLambdaP_BarGamma::init(), EvtLambdac2pKpi::init(), EvtKstarstargamma::init(), EvtKstarnunu::init(), EvtJscont::init(), EvtJpipi::init(), EvtJPE::init(), EvtJetSet::init(), EvtISGW2::init(), EvtISGW::init(), EvtHypWK::init(), EvtHQET::init(), EvtHelPPJ::init(), EvtHelAmp::init(), EvtHAngSam3::init(), EvtGoityRoberts::init(), EvtFlatQ2::init(), EvtEtaDalitz::init(), EvtEDM::init(), EvtDMix::init(), EvtDeBD::init(), EvtDDalitz::init(), EvtChi2BB2::init(), EvtChi2BB1::init(), EvtChi1BB2::init(), EvtChi1BB1::init(), EvtChi0BB2::init(), EvtCBTo3piP00::init(), EvtCBTo3piMPP::init(), EvtCalHelAmp::init(), EvtBtoXsll::init(), EvtBtoXsEtap::init(), EvtbTosllBall::init(), EvtbTosllAli::init(), EvtBToKpipiCP::init(), EvtBtoKpiCPiso::init(), EvtBtoKD3P::init(), EvtBTo4piCP::init(), EvtBTo3piCP::init(), EvtBto2piCPiso::init(), EvtBsquark::init(), EvtBody3::init(), EvtBHadronic::init(), EvtAV2GV::init(), and EvtAngH2::init().

00482                                                            {
00483 
00484   if ( _narg != a1 && _narg != a2 && _narg != a3 && _narg != a4 ) {
00485     report(ERROR,"EvtGen") << _modelname.c_str() << " generator expected "<<endl;
00486     report(ERROR,"EvtGen") << a1<<endl;; 
00487     if ( a2>-1) {
00488       report(ERROR,"EvtGen") << " or " << a2<<endl; 
00489     }
00490     if ( a3>-1) {
00491       report(ERROR,"EvtGen") << " or " << a3<<endl; 
00492     }
00493     if ( a4>-1) {
00494       report(ERROR,"EvtGen") << " or " << a4<<endl; 
00495     }
00496     report(ERROR,"EvtGen") << " arguments but found:"<< _narg << endl;
00497     printSummary();
00498     report(ERROR,"EvtGen") << "Will terminate execution!"<<endl;
00499     ::abort();
00500 
00501   } 
00502 
00503 }

void EvtDecayBase::checkNDaug ( int  d1,
int  d2 = -1 
) [inherited]

Definition at line 504 of file EvtDecayBase.cc.

References EvtDecayBase::_modelname, EvtDecayBase::_ndaug, calibUtil::ERROR, EvtDecayBase::printSummary(), and report().

Referenced by EvtVVSPwave::init(), EvtVVPIPI_WEIGHTED::init(), EvtVVpipi::init(), EvtVVP::init(), EvtVubNLO::init(), EvtVubHybrid::init(), EvtVub::init(), EvtVSSMix::init(), EvtVSSBMixCPT::init(), EvtVSS::init(), EvtVSPPwave::init(), EvtVPHOtoVISRHi::init(), EvtVPHOtoVISR::init(), EvtVll::init(), EvtVectorIsr::init(), EvtTVSPwave::init(), EvtTSS::init(), EvtTauVectornu::init(), EvtTauScalarnu::init(), EvtTaulnunu::init(), EvtTauGamMu::init(), EvtSVVNONCPEIGEN::init(), EvtSVVHelAmp::init(), EvtSVVCPLH::init(), EvtSVVCP::init(), EvtSVSNONCPEIGEN::init(), EvtSVSCPLH::init(), EvtSVSCPiso::init(), EvtSVSCP::init(), EvtSVS::init(), EvtSVPHelAmp::init(), EvtSVPCP::init(), EvtSTSCP::init(), EvtSTS::init(), EvtSSSCPT::init(), EvtSSSCPpng::init(), EvtSSSCP::init(), EvtSSDCP::init(), EvtSPL::init(), EvtSLPole::init(), EvtSLN::init(), EvtSll::init(), EvtSLBKPole::init(), EvtS2GV::init(), EvtPi0Dalitz::init(), EvtPhokhara::init(), EvtPhiDalitz::init(), EvtPBB2::init(), EvtPBB1::init(), EvtPartWave::init(), EvtP2GC2::init(), EvtP2GC1::init(), EvtP2GC0::init(), EvtOmegaDalitz::init(), EvtMelikhov::init(), EvtLNuGamma::init(), EvtLambdaP_BarGamma::init(), EvtKstarstargamma::init(), EvtKstarnunu::init(), EvtKKLambdaC::init(), EvtJTO3P::init(), EvtJpipi::init(), EvtJPE::init(), EvtJ2BB3::init(), EvtJ2BB2::init(), EvtJ2BB1::init(), EvtISGW2::init(), EvtISGW::init(), EvtHypWK::init(), EvtHQET2::init(), EvtHQET::init(), EvtHelPPJ::init(), EvtHelAmp::init(), EvtGoityRoberts::init(), EvtFlatQ2::init(), EvtEtaDalitz::init(), EvtEDM::init(), EvtDeBD::init(), EvtDDalitz::init(), EvtD0mixDalitz::init(), EvtChi2BB2::init(), EvtChi2BB1::init(), EvtChi1BB2::init(), EvtChi1BB1::init(), EvtChi0BB2::init(), EvtChi0BB1::init(), EvtCBTo3piP00::init(), EvtCBTo3piMPP::init(), EvtBtoXsll::init(), EvtbTosllBall::init(), EvtbTosllAli::init(), EvtBToKpipiCP::init(), EvtBtoKpiCPiso::init(), EvtBtoKD3P::init(), EvtBTo4piCP::init(), EvtBTo3piCP::init(), EvtBto2piCPiso::init(), EvtAV2GV::init(), EvtAngSamLab::init(), EvtAngSam3::init(), and EvtAngSam::init().

00504                                            {
00505 
00506   if ( _ndaug != d1 && _ndaug != d2 ) {
00507     report(ERROR,"EvtGen") << _modelname.c_str() << " generator expected ";
00508     report(ERROR,"EvtGen") << d1; 
00509     if ( d2>-1) {
00510       report(ERROR,"EvtGen") << " or " << d2; 
00511     }
00512     report(ERROR,"EvtGen") << " daughters but found:"<< _ndaug << endl;
00513     printSummary();
00514     report(ERROR,"EvtGen") << "Will terminate execution!"<<endl;
00515     ::abort();
00516   } 
00517 
00518 }

void EvtDecayBase::checkQ (  )  [inherited]

Definition at line 35 of file EvtDecayBase.cc.

References EvtDecayBase::_daug, EvtDecayBase::_modelname, EvtDecayBase::_ndaug, EvtDecayBase::_parent, EvtCyclic3::c_str(), EvtPDL::chg3(), calibUtil::ERROR, genRecEmupikp::i, EvtPDL::name(), q, and report().

Referenced by EvtDecayBase::saveDecayInfo().

00035                           {
00036   int i;
00037   int q=0;
00038   int qpar;
00039 
00040   //If there are no daughters (jetset etc) then we do not
00041   //want to do this test.  Why?  Because sometimes the parent
00042   //will have a nonzero charge.
00043 
00044   if ( _ndaug != 0) {
00045     for(i=0; i<_ndaug; i++ ) {
00046       q += EvtPDL::chg3(_daug[i]);
00047     }
00048     qpar = EvtPDL::chg3(_parent);
00049 
00050     if ( q != qpar ) {
00051       report(ERROR,"EvtGen") <<_modelname.c_str()<< " generator expected "
00052                              << " charge to be conserved, found:"<<endl;
00053       report(ERROR,"EvtGen") << "Parent charge of "<<(qpar/3)<<endl;
00054       report(ERROR,"EvtGen") << "Sum of daughter charge of "<<(q/3)<<endl;
00055       report(ERROR,"EvtGen") << "The parent is "<< EvtPDL::name(_parent).c_str()<<endl;
00056       for(i=0; i<_ndaug; i++ ) {
00057       report(ERROR,"EvtGen") << "Daughter "<< EvtPDL::name(_daug[i]).c_str()<<endl;
00058       }
00059       report(ERROR,"EvtGen") << "Will terminate execution!"<<endl;
00060       
00061       ::abort();
00062     }
00063   }
00064 }

void EvtDecayBase::checkSpinDaughter ( int  d1,
EvtSpinType::spintype  sp 
) [inherited]

Definition at line 533 of file EvtDecayBase.cc.

References EvtDecayBase::_modelname, calibUtil::ERROR, EvtDecayBase::getDaug(), EvtPDL::getSpinType(), EvtDecayBase::printSummary(), and report().

Referenced by EvtVVSPwave::init(), EvtVVPIPI_WEIGHTED::init(), EvtVVpipi::init(), EvtVVP::init(), EvtVSSMix::init(), EvtVSSBMixCPT::init(), EvtVSS::init(), EvtVSPPwave::init(), EvtVPHOtoVISRHi::init(), EvtVPHOtoVISR::init(), EvtVll::init(), EvtVectorIsr::init(), EvtTVSPwave::init(), EvtTSS::init(), EvtTauVectornu::init(), EvtTauScalarnu::init(), EvtTaulnunu::init(), EvtTauHadnu::init(), EvtTauGamMu::init(), EvtSVVNONCPEIGEN::init(), EvtSVVHelAmp::init(), EvtSVVCPLH::init(), EvtSVVCP::init(), EvtSVSNONCPEIGEN::init(), EvtSVSCPLH::init(), EvtSVSCPiso::init(), EvtSVSCP::init(), EvtSVS::init(), EvtSVPHelAmp::init(), EvtSVPCP::init(), EvtSTSCP::init(), EvtSTS::init(), EvtSSSCPpng::init(), EvtSSSCP::init(), EvtSPL::init(), EvtSLPole::init(), EvtSLN::init(), EvtSll::init(), EvtSLBKPole::init(), EvtS2GV::init(), EvtPi0Dalitz::init(), EvtPhiDalitz::init(), EvtPBB2::init(), EvtPBB1::init(), EvtP2GC2::init(), EvtP2GC1::init(), EvtP2GC0::init(), EvtOmegaDalitz::init(), EvtMelikhov::init(), EvtLNuGamma::init(), EvtLambdaP_BarGamma::init(), EvtKstarstargamma::init(), EvtKstarnunu::init(), EvtKKLambdaC::init(), EvtJTO3P::init(), EvtJpipi::init(), EvtJPE::init(), EvtJ2BB3::init(), EvtJ2BB2::init(), EvtJ2BB1::init(), EvtISGW2::init(), EvtISGW::init(), EvtHypWK::init(), EvtHQET2::init(), EvtHQET::init(), EvtHelPPJ::init(), EvtGoityRoberts::init(), EvtFlatQ2::init(), EvtEtaDalitz::init(), EvtEDM::init(), EvtDeBD::init(), EvtDDalitz::init(), EvtD0mixDalitz::init(), EvtChi2BB2::init(), EvtChi2BB1::init(), EvtChi1BB2::init(), EvtChi1BB1::init(), EvtChi0BB2::init(), EvtChi0BB1::init(), EvtCBTo3piP00::init(), EvtCBTo3piMPP::init(), EvtbTosllBall::init(), EvtbTosllAli::init(), EvtBToKpipiCP::init(), EvtBtoKpiCPiso::init(), EvtBtoKD3P::init(), EvtBTo4piCP::init(), EvtBTo3piCP::init(), EvtBto2piCPiso::init(), and EvtAV2GV::init().

00533                                                                    {
00534 
00535   EvtSpinType::spintype parenttype = EvtPDL::getSpinType(getDaug(d1));
00536   if ( parenttype != sp ) {
00537     report(ERROR,"EvtGen") << _modelname.c_str() 
00538                            << " did not get the correct daughter spin d=" 
00539                            << d1 << endl;
00540     printSummary();
00541     report(ERROR,"EvtGen") << "Will terminate execution!"<<endl;
00542     ::abort();
00543   } 
00544 
00545 }

void EvtDecayBase::checkSpinParent ( EvtSpinType::spintype  sp  )  [inherited]

Definition at line 520 of file EvtDecayBase.cc.

References EvtDecayBase::_modelname, calibUtil::ERROR, EvtDecayBase::getParentId(), EvtPDL::getSpinType(), EvtDecayBase::printSummary(), and report().

Referenced by EvtVVSPwave::init(), EvtVVPIPI_WEIGHTED::init(), EvtVVpipi::init(), EvtVVP::init(), EvtVSSMix::init(), EvtVSSBMixCPT::init(), EvtVSS::init(), EvtVSPPwave::init(), EvtVPHOtoVISRHi::init(), EvtVPHOtoVISR::init(), EvtVll::init(), EvtVectorIsr::init(), EvtTVSPwave::init(), EvtTSS::init(), EvtTauVectornu::init(), EvtTauScalarnu::init(), EvtTaulnunu::init(), EvtTauHadnu::init(), EvtTauGamMu::init(), EvtSVVHelAmp::init(), EvtSVVCPLH::init(), EvtSVVCP::init(), EvtSVSCPLH::init(), EvtSVSCPiso::init(), EvtSVSCP::init(), EvtSVS::init(), EvtSVPHelAmp::init(), EvtSVPCP::init(), EvtSTSCP::init(), EvtSTS::init(), EvtSSSCPpng::init(), EvtSSSCP::init(), EvtSPL::init(), EvtSLPole::init(), EvtSLN::init(), EvtSll::init(), EvtSLBKPole::init(), EvtS2GV::init(), EvtPi0Dalitz::init(), EvtPhiDalitz::init(), EvtPBB2::init(), EvtPBB1::init(), EvtP2GC2::init(), EvtP2GC1::init(), EvtP2GC0::init(), EvtOmegaDalitz::init(), EvtMelikhov::init(), EvtLNuGamma::init(), EvtLambdaP_BarGamma::init(), EvtKstarstargamma::init(), EvtKstarnunu::init(), EvtKKLambdaC::init(), EvtJTO3P::init(), EvtJpipi::init(), EvtJPE::init(), EvtJ2BB3::init(), EvtJ2BB2::init(), EvtJ2BB1::init(), EvtISGW2::init(), EvtISGW::init(), EvtHypWK::init(), EvtHQET2::init(), EvtHQET::init(), EvtHelPPJ::init(), EvtGoityRoberts::init(), EvtFlatQ2::init(), EvtEtaDalitz::init(), EvtEDM::init(), EvtDeBD::init(), EvtDDalitz::init(), EvtD0mixDalitz::init(), EvtChi2BB2::init(), EvtChi2BB1::init(), EvtChi1BB2::init(), EvtChi1BB1::init(), EvtChi0BB2::init(), EvtChi0BB1::init(), EvtCBTo3piP00::init(), EvtCBTo3piMPP::init(), EvtbTosllBall::init(), EvtbTosllAli::init(), EvtBToKpipiCP::init(), EvtBtoKpiCPiso::init(), EvtBtoKD3P::init(), EvtBTo4piCP::init(), EvtBTo3piCP::init(), EvtBto2piCPiso::init(), and EvtAV2GV::init().

00520                                                          {
00521 
00522   EvtSpinType::spintype parenttype = EvtPDL::getSpinType(getParentId());
00523   if ( parenttype != sp ) {
00524     report(ERROR,"EvtGen") << _modelname.c_str() 
00525                            << " did not get the correct parent spin\n";
00526     printSummary();
00527     report(ERROR,"EvtGen") << "Will terminate execution!"<<endl;
00528     ::abort();
00529   } 
00530 
00531 }

EvtDecayBase * EvtLunda::clone (  )  [virtual]

Implements EvtDecayBase.

Definition at line 128 of file EvtLunda.cc.

00128                              {
00129 
00130   return new EvtLunda;
00131 
00132 }

void EvtLunda::command ( std::string  cmd  )  [virtual]

Reimplemented from EvtDecayBase.

Definition at line 176 of file EvtLunda.cc.

References commands, genRecEmupikp::i, lcommand, ncommand, and deljobs::string.

00176                                    {
00177 
00178   if (ncommand==lcommand){
00179 
00180     lcommand=10+2*lcommand;
00181 
00182     std::string* newcommands=new std::string[lcommand];
00183     
00184     int i;
00185 
00186     for(i=0;i<ncommand;i++){
00187       newcommands[i]=commands[i];
00188     }
00189     
00190     delete [] commands;
00191 
00192     commands=newcommands;
00193 
00194   }
00195 
00196   commands[ncommand]=cmd;
00197 
00198   ncommand++;
00199 
00200 }

std::string EvtLunda::commandName (  )  [virtual]

Reimplemented from EvtDecayBase.

Definition at line 170 of file EvtLunda.cc.

References deljobs::string.

00170                                {
00171      
00172   return std::string("LundaPar");
00173   
00174 }

bool EvtDecayBase::daugsDecayedByParentModel (  )  [inline, protected, inherited]

Definition at line 110 of file EvtDecayBase.hh.

References EvtDecayBase::_daugsDecayedByParentModel.

Referenced by EvtDecayProb::makeDecay(), EvtDecayIncoherent::makeDecay(), and EvtDecayAmp::makeDecay().

void EvtLunda::decay ( EvtParticle p  )  [virtual]

Implements EvtDecayBase.

Definition at line 204 of file EvtLunda.cc.

References abs, boostTo(), EvtCyclic3::c_str(), checktag_, count, EvtParticle::decay(), EvtParticle::deleteDaughters(), calibUtil::ERROR, EvtPDL::evtIdFromStdHep(), fixPolarizations(), EvtVector4R::get(), EvtDecayBase::getArg(), EvtParticle::getDaug(), EvtParticle::getId(), EvtPDL::getId(), EvtDecayBase::getNArg(), EvtParticle::getNDaug(), EvtDecayBase::getParentId(), EvtPDL::getStdHep(), genRecEmupikp::i, EvtDecayTable::inChannelList(), Bes_Common::INFO, EvtParticle::init(), isr(), LundaInit(), lundar_(), EvtParticle::makeDaughters(), EvtParticle::mass(), MAX_DAUG, mp, EvtPDL::name(), report(), EvtVector4R::set(), EvtParticle::setDiagonalSpinDensity(), and type.

00204                                    {
00205 
00206   static int iniflag=1;
00207 
00208   static EvtId STRNG=EvtPDL::getId("string");
00209 
00210   int istdheppar=EvtPDL::getStdHep(p->getId());
00211 
00212   /*
00213   int Xpdg=0;
00214   if(getNArg()==1){
00215     Xpdg = getArg(0);
00216     if(Xpdg == 100443) Xpdg = 30443; //chage the curent pdg code to jetset pdg code for psiprime
00217   }
00218     nores_.xpdg = Xpdg;
00219   */
00220 
00221 /*
00222   if (pycomp_(&istdheppar)==0){
00223     report(ERROR,"EvtGen") << "Lunda can not decay:"
00224       <<EvtPDL::name(p->getId()).c_str()<<endl;
00225     return;
00226   }
00227 */
00228   double mp=p->mass();
00229   float xmp=mp;
00230 //  std::cout<<"float xmp="<<xmp<<std::endl;
00231 
00232   EvtVector4R p4[20];
00233   
00234   int i,more;
00235   int ip=EvtPDL::getStdHep(p->getId());
00236   int ndaugjs;
00237   static int kf[4000];
00238   EvtId evtnumstable[100],evtnumparton[100];
00239   int stableindex[100],partonindex[100];
00240   int numstable;
00241   int numparton;
00242   static int km[4000];
00243   EvtId type[MAX_DAUG];
00244 
00245   int isr=1; //open ISR (default)
00246   if(getNArg()>0){ isr=getArg(0);}
00247 
00248   static double px[4000],py[4000],pz[4000],e[4000];
00249   if (iniflag==1) lundar_(&isr,&iniflag,&xmp,&ndaugjs,kf,km,px,py,pz,e);
00250 
00251   if ( p->getNDaug() != 0 ) { p->deleteDaughters(true);}
00252 
00253   int count=0;
00254   bool mtg=0;
00255  
00256   do{
00257     //report(INFO,"EvtGen") << "calling lunda " << ip<< " " << mp <<endl;
00258     iniflag=iniflag+1;  //to count the event number
00259     //std::cout<<"Event number by Lunda: "<<iniflag<<std::endl;
00260 modeSelection:
00261     lundar_(&isr,&iniflag,&xmp,&ndaugjs,kf,km,px,py,pz,e);
00262 
00263     mtg = checktag_.decaytag==1;
00264     if(mtg)std::cout<<"checktag_.decaytag="<<checktag_.decaytag<<std::endl;
00265     //if the Ecms is too low, Lunda fails to decay, so change to 3pi decay exclusively
00266     //if(mtg) {ExclusiveDecay(p); return;} //see SUBROUTINE LUBEGN(KFL,ECM) in luarlw.F
00267 
00268     LundaInit(0); // allow user to set LundaPar in the decay list 
00269     numstable=0;
00270     numparton=0;
00271     //report(INFO,"EvtGen") << "found some daughters " << ndaugjs << endl;
00272     double esum=0;
00273     //for debugging
00274     //for(int i=0;i<ndaugjs;i++){
00275     //std::cout<<"ndaugjs,kf,km,px,py,pz,e: "<<i<<", "<<km[i]<<", "<<EvtPDL::name(EvtPDL::evtIdFromStdHep(kf[i]))<<", "<<px[i]<<" ,"<<py[i]<<", "<<pz[i]<<", "<<e[i]<<std::endl; 
00276     //}
00277 
00278     for(i=0;i<ndaugjs;i++){
00279       if (abs(kf[i])==11 || kf[i]==92 || kf[i]==22) continue; //fill out the unstatble particle
00280       //std::cout<<i<<", "<<km[i]<<", "<<kf[i]<<", "<<EvtPDL::name(EvtPDL::evtIdFromStdHep(kf[i]))<<" "<<px[i]<<" ,"<<py[i]<<", "<<pz[i]<<", "<<e[i]<<std::endl; //for debugging
00281       if (EvtPDL::evtIdFromStdHep(kf[i])==EvtId(-1,-1)) {
00282         report(ERROR,"EvtGen") << "Lunda returned particle:"<<kf[i]<<endl;
00283         report(ERROR,"EvtGen") << "This can not be translated to evt number"<<endl;
00284         report(ERROR,"EvtGen") << "and the decay will be rejected!"<<endl;
00285         report(ERROR,"EvtGen") << "The decay was of particle:"<<ip<<endl;
00286         //xmp=(1+0.01)*xmp;
00287         std::cout<<"xmp= "<<xmp<<std::endl;
00288         goto modeSelection;
00289       }
00290       
00291       //sort out the partons
00292       if (abs(kf[i])<=6||kf[i]==21){
00293         partonindex[numparton]=i;
00294         evtnumparton[numparton]=EvtPDL::evtIdFromStdHep(kf[i]);
00295         numparton++;
00296       }
00297       else{
00298         stableindex[numstable]=i;
00299         evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(kf[i]); 
00300         numstable++;
00301       }
00302       
00303       esum+=e[i];
00304       // have to protect against negative mass^2 for massless particles
00305       // i.e. neutrinos and photons.
00306       // this is uggly but I need to fix it right now....
00307       
00308       if (px[i]*px[i]+py[i]*py[i]+pz[i]*pz[i]>=e[i]*e[i]){
00309         
00310         e[i]=sqrt(px[i]*px[i]+py[i]*py[i]+pz[i]*pz[i])+0.0000000001;
00311         
00312       }
00313       
00314       p4[i].set(e[i],px[i],py[i],pz[i]);
00315       
00316       
00317     }
00318 
00319     int channel=EvtDecayTable::inChannelList(p->getId(),numstable,evtnumstable);
00320   
00321     // Test the branching fraction of lunda
00322     // the specified decay mode is put as the 0-th channel with specifing mother particle
00323     more=(channel!=-1);
00324     //debugging
00325     if(abs(esum-xmp)>0.001 ){
00326       std::cout<<"Unexpected final states from Lunda with total energy "<<esum<<" unequal to "<<xmp<<std::endl;
00327       //xmp=(1+0.01)*xmp;
00328       std::cout<<"xmp= "<<xmp<<std::endl;
00329       goto modeSelection;
00330     }
00331 
00332     count++;
00333  }while( more && (count<10000) && mtg );
00334     //  }while( more && (count<10000) );
00335   
00336   if (count>9999) {
00337     report(INFO,"EvtGen") << "Too many loops in EvtLunda!!!"<<endl;
00338     report(INFO,"EvtGen") << "Parent:"<<EvtPDL::name(getParentId()).c_str()<<endl;
00339     for(i=0;i<numstable;i++){
00340       report(INFO,"EvtGen") << "Daug("<<i<<")"<<EvtPDL::name(evtnumstable[i]).c_str()<<endl;
00341     }
00342 
00343   }
00344 
00345 
00346 
00347   if (numparton==0){
00348 
00349     p->makeDaughters(numstable,evtnumstable);
00350     int ndaugFound=0;
00351     for(i=0;i<numstable;i++){
00352       p->getDaug(i)->init(evtnumstable[i],p4[stableindex[i]]);
00353       ndaugFound++;
00354     }
00355     if ( ndaugFound == 0 ) {
00356       report(ERROR,"EvtGen") << "Lunda has failed to do a decay ";
00357       report(ERROR,"EvtGen") << EvtPDL::name(p->getId()).c_str() << " " << p->mass()<<endl;
00358       assert(0);
00359     }
00360 
00361     fixPolarizations(p);
00362     //debugging
00363     // p->printTree();
00364 
00365     return ;
00366    
00367   }
00368   else{
00369 
00370     //have partons in LUNDA
00371 
00372     EvtVector4R p4string(0.0,0.0,0.0,0.0);
00373 
00374     for(i=0;i<numparton;i++){
00375       p4string+=p4[partonindex[i]];
00376     }
00377 
00378     int nprimary=1;
00379     type[0]=STRNG;
00380     for(i=0;i<numstable;i++){
00381       if (km[stableindex[i]]==0){
00382         type[nprimary++]=evtnumstable[i];
00383       }
00384     }
00385 
00386     p->makeDaughters(nprimary,type);
00387 
00388     p->getDaug(0)->init(STRNG,p4string);
00389 
00390     EvtVector4R p4partons[10];
00391 
00392     for(i=0;i<numparton;i++){
00393       p4partons[i]=p4[partonindex[i]];
00394     }
00395 
00396     ((EvtStringParticle*)p->getDaug(0))->initPartons(numparton,p4partons,evtnumparton);
00397 
00398 
00399 
00400     nprimary=1;
00401 
00402     for(i=0;i<numstable;i++){
00403 
00404       if (km[stableindex[i]]==0){
00405         p->getDaug(nprimary++)->init(evtnumstable[i],p4[stableindex[i]]);
00406       }
00407     }
00408 
00409 
00410     int nsecond=0;
00411     for(i=0;i<numstable;i++){
00412       if (km[stableindex[i]]!=0){
00413         type[nsecond++]=evtnumstable[i];
00414       }
00415     }
00416 
00417 
00418     p->getDaug(0)->makeDaughters(nsecond,type);
00419 
00420     EvtVector4R p4stringboost(p4string.get(0),-p4string.get(1),
00421                               -p4string.get(2),-p4string.get(3));
00422 
00423     nsecond=0;
00424     for(i=0;i<numstable;i++){
00425       if (km[stableindex[i]]!=0){
00426         p4[stableindex[i]]=boostTo(p4[stableindex[i]],p4stringboost);
00427         p->getDaug(0)->getDaug(nsecond)->init(evtnumstable[i],p4[stableindex[i]]);
00428         p->getDaug(0)->getDaug(nsecond)->setDiagonalSpinDensity();
00429         p->getDaug(0)->getDaug(nsecond)->decay();
00430         nsecond++;
00431       }
00432     }
00433 
00434     if ( nsecond == 0 ) {
00435       report(ERROR,"EvtGen") << "Jetset has failed to do a decay ";
00436       report(ERROR,"EvtGen") << EvtPDL::name(p->getId()).c_str() << " " << p->mass() <<endl;
00437       assert(0);
00438     }
00439 
00440     fixPolarizations(p);
00441     
00442     return ;
00443 
00444   }
00445 
00446 }

void EvtDecayBase::disableCheckQ (  )  [inline, inherited]

Definition at line 62 of file EvtDecayBase.hh.

References EvtDecayBase::_chkCharge.

Referenced by EvtSinglePoint::init(), EvtSingleParticle2::init(), and EvtSingleParticle::init().

00062 {_chkCharge=0;};

void EvtLunda::ExclusiveDecay ( EvtParticle p  ) 

Definition at line 523 of file EvtLunda.cc.

References EvtParticle::getDaug(), EvtPDL::getId(), EvtPDL::getMass(), genRecEmupikp::i, EvtParticle::initializePhaseSpace(), EvtParticle::makeDaughters(), EvtParticle::mass(), and deljobs::string.

00523                                            {
00524   EvtId daugs[8];
00525   int _ndaugs =4;
00526   daugs[0]=EvtPDL::getId(std::string("pi+"));
00527   daugs[1]=EvtPDL::getId(std::string("pi-"));
00528   daugs[2]=EvtPDL::getId(std::string("pi+"));
00529   daugs[3]=EvtPDL::getId(std::string("pi-"));
00530  checkA:
00531   p->makeDaughters(_ndaugs,daugs);  
00532   double totMass=0;
00533   for(int i=0;i< _ndaugs;i++){            
00534     EvtParticle* di=p->getDaug(i);
00535     double xmi=EvtPDL::getMass(di->getId()); 
00536     di->setMass(xmi);
00537     totMass+=xmi;
00538   }              
00539   if(totMass>p->mass()) goto checkA;
00540   p->initializePhaseSpace( _ndaugs , daugs);  
00541   
00542 
00543 }

void EvtDecayBase::findMass ( EvtParticle p  )  [static, inherited]

Definition at line 346 of file EvtDecayBase.cc.

References EvtCyclic3::c_str(), count, EvtDecayBase::findMaxMass(), EvtParticle::getDaug(), EvtParticle::getId(), EvtPDL::getMass(), EvtPDL::getMaxMass(), EvtPDL::getMinMass(), EvtParticle::getNDaug(), EvtParticle::getParent(), genRecEmupikp::i, Bes_Common::INFO, EvtParticle::mass(), mass, EvtPDL::name(), EvtParticle::printTree(), report(), and EvtParticle::setMass().

00346                                           {
00347 
00348   //Need to also check that this mass does not screw
00349   //up the parent
00350   //This code assumes that for the ith daughter, 0..i-1
00351   //already have a mass
00352   double maxOkMass=findMaxMass(p);
00353 
00354   int count=0;
00355   double mass;
00356   bool massOk=false;
00357   int i;
00358   while (!massOk) { 
00359     count++;
00360     if ( count > 10000 ) {
00361       report(INFO,"EvtGen") << "Can not find a valid mass for: " << EvtPDL::name(p->getId()).c_str() <<endl;
00362       report(INFO,"EvtGen") << "Now printing parent and/or grandparent tree\n";
00363       if ( p->getParent() ) {
00364         if ( p->getParent()->getParent() ) {
00365           p->getParent()->getParent()->printTree();
00366           report(INFO,"EvtGen") << p->getParent()->getParent()->mass() <<endl;
00367           report(INFO,"EvtGen") << p->getParent()->mass() <<endl;
00368         }
00369         else{
00370           p->getParent()->printTree();
00371           report(INFO,"EvtGen") << p->getParent()->mass() <<endl;
00372         }
00373       }
00374       else  p->printTree();
00375       report(INFO,"EvtGen") << "maxokmass=" << maxOkMass << " " << EvtPDL::getMinMass(p->getId()) << " " << EvtPDL::getMaxMass(p->getId())<<endl;
00376       if ( p->getNDaug() ) { 
00377         for (i=0; i<p->getNDaug(); i++) {
00378           report(INFO,"EvtGen") << p->getDaug(i)->mass()<<" ";
00379         }
00380         report(INFO,"EvtGen") << endl;
00381       }
00382       if ( maxOkMass >= EvtPDL::getMinMass(p->getId()) ) {
00383         report(INFO,"EvtGen") << "taking a default value\n";
00384         p->setMass(maxOkMass);
00385         return;
00386       } 
00387       assert(0);
00388     }
00389     mass = EvtPDL::getMass(p->getId());
00390     //Just need to check that this mass is > than
00391     //the mass of all daughters
00392     double massSum=0.;
00393     if ( p->getNDaug() ) { 
00394       for (i=0; i<p->getNDaug(); i++) {
00395         massSum+= p->getDaug(i)->mass();
00396       }
00397     }
00398     //some special cases are handled with 0 (stable) or 1 (k0->ks/kl) daughters
00399     if (p->getNDaug()<2)  massOk=true;
00400     if ( p->getParent() ) {
00401       if ( p->getParent()->getNDaug()==1 ) massOk=true;
00402     }
00403     if ( !massOk ) { 
00404       if (massSum < mass) massOk=true;
00405       if ( mass> maxOkMass) massOk=false;
00406     }
00407   }
00408 
00409   p->setMass(mass);
00410   
00411 }

void EvtDecayBase::findMasses ( EvtParticle p,
int  ndaugs,
EvtId  daugs[10],
double  masses[10] 
) [static, inherited]

Definition at line 414 of file EvtDecayBase.cc.

References EvtCyclic3::c_str(), count, calibUtil::ERROR, EvtParticle::firstornot(), EvtParticle::getDaug(), EvtParticle::getId(), EvtPDL::getMass(), EvtPDL::getMinMass(), genRecEmupikp::i, EvtParticle::mass(), EvtPDL::name(), report(), EvtParticle::setFirstOrNot(), and EvtStatus::setRejectFlag().

Referenced by EvtBtoXsll::decay().

00415                                                                      {
00416 
00417   int i;
00418   double mass_sum;
00419 
00420   int count=0;
00421 
00422   if (!( p->firstornot() )) {
00423     for (i = 0; i < ndaugs; i++ ) {
00424       masses[i] = p->getDaug(i)->mass();
00425     } //for
00426   } //if
00427   else {
00428     p->setFirstOrNot();
00429     // if only one daughter do it
00430 
00431     if (ndaugs==1) {
00432       masses[0]=p->mass();
00433       return;
00434     }
00435     
00436     //until we get a combo whose masses are less than _parent mass.
00437     do {
00438       mass_sum = 0.0;
00439 
00440       for (i = 0; i < ndaugs; i++ ) {
00441         masses[i] = EvtPDL::getMass(daugs[i]);
00442         mass_sum = mass_sum + masses[i];
00443       } 
00444 
00445       count++;
00446 
00447      
00448       if(count==10000) {
00449         report(ERROR,"EvtGen") <<"Decaying particle:"<<
00450           EvtPDL::name(p->getId()).c_str()<<" (m="<<p->mass()<<")"<<endl;
00451         report(ERROR,"EvtGen") <<"To the following daugthers"<<endl;
00452         for (i = 0; i < ndaugs; i++ ) {
00453           report(ERROR,"EvtGen") <<  
00454             EvtPDL::name(daugs[i]).c_str() << endl;
00455         } 
00456         report(ERROR,"EvtGen") << "Has been rejected "<<count
00457                                << " times, will now take minimal masses "
00458                                << " of daugthers"<<endl;
00459         
00460         mass_sum=0.;
00461         for (i = 0; i < ndaugs; i++ ) {
00462           masses[i] = EvtPDL::getMinMass(daugs[i]);
00463           mass_sum = mass_sum + masses[i];
00464         } 
00465         if (mass_sum > p->mass()){
00466           report(ERROR,"EvtGen") << "Parent mass="<<p->mass()
00467                                  << "to light for daugthers."<<endl
00468                                  << "Will throw the event away."<<endl;
00469           //dont terminate - start over on the event.
00470           EvtStatus::setRejectFlag();
00471           mass_sum=0.;
00472           //      ::abort();
00473         }
00474 
00475       }
00476     } while ( mass_sum > p->mass());
00477   } //else
00478   
00479   return;
00480 }       

double EvtDecayBase::findMaxMass ( EvtParticle p  )  [static, inherited]

Definition at line 311 of file EvtDecayBase.cc.

References EvtParticle::getDaug(), EvtParticle::getId(), EvtPDL::getMaxMass(), EvtPDL::getMinMass(), EvtParticle::getNDaug(), EvtParticle::getParent(), EvtParticle::hasValidP4(), genRecEmupikp::i, and EvtParticle::mass().

Referenced by EvtDecayBase::findMass().

00311                                                {
00312 
00313   
00314   double maxOkMass=EvtPDL::getMaxMass(p->getId());
00315 
00316   //protect against vphotons
00317   if ( maxOkMass < 0.0000000001 ) return 10000000.;
00318   //and against already determined masses
00319   if ( p->hasValidP4() ) maxOkMass=p->mass();
00320 
00321   EvtParticle *par=p->getParent();
00322   if ( par ) {
00323     double maxParMass=findMaxMass(par);
00324     int i;
00325     double minDaugMass=0.;
00326     for(i=0;i<par->getNDaug();i++){
00327       EvtParticle *dau=par->getDaug(i);
00328       if ( dau!=p) {
00329         // it might already have a mass
00330         if ( dau->isInitialized() || dau->hasValidP4() )
00331           minDaugMass+=dau->mass();
00332         else
00333         //give it a bit of phase space 
00334           minDaugMass+=1.000001*EvtPDL::getMinMass(dau->getId());
00335       }
00336     }
00337     if ( maxOkMass>(maxParMass-minDaugMass)) maxOkMass=maxParMass-minDaugMass;
00338   }
00339   return maxOkMass;
00340 }

void EvtLunda::fixPolarizations ( EvtParticle p  )  [private]

Definition at line 448 of file EvtLunda.cc.

References alpha, EvtVector4R::d3mag(), EvtVector4R::get(), EvtParticle::getDaug(), EvtParticle::getId(), EvtPDL::getId(), EvtParticle::getNDaug(), EvtParticle::getP4(), genRecEmupikp::i, EvtSpinDensity::Set(), EvtDecayIncoherent::setDaughterSpinDensity(), and EvtParticle::setSpinDensityForwardHelicityBasis().

Referenced by decay().

00448                                              {
00449 
00450   //special case for now to handle the J/psi polarization
00451 
00452   int ndaug=p->getNDaug();
00453   
00454   int i;
00455 
00456   static EvtId Jpsi=EvtPDL::getId("J/psi");
00457 
00458   for(i=0;i<ndaug;i++){
00459     if(p->getDaug(i)->getId()==Jpsi){
00460   
00461       EvtSpinDensity rho;
00462       
00463       rho.SetDim(3);
00464       rho.Set(0,0,0.5);
00465       rho.Set(0,1,0.0);
00466       rho.Set(0,2,0.0);
00467 
00468       rho.Set(1,0,0.0);
00469       rho.Set(1,1,1.0);
00470       rho.Set(1,2,0.0);
00471 
00472       rho.Set(2,0,0.0);
00473       rho.Set(2,1,0.0);
00474       rho.Set(2,2,0.5);
00475 
00476       EvtVector4R p4Psi=p->getDaug(i)->getP4();
00477 
00478       double alpha=atan2(p4Psi.get(2),p4Psi.get(1));
00479       double beta=acos(p4Psi.get(3)/p4Psi.d3mag());
00480 
00481 
00482       p->getDaug(i)->setSpinDensityForwardHelicityBasis(rho,alpha,beta,0.0);
00483       setDaughterSpinDensity(i);
00484 
00485     }
00486   }
00487 
00488 }

double EvtDecayBase::getArg ( int  j  )  [inherited]

Definition at line 564 of file EvtDecayBase.cc.

References EvtDecayBase::_args, EvtCyclic3::c_str(), genRecEmupikp::i, Bes_Common::INFO, and report().

Referenced by EvtVVSPwave::decay(), EvtVSSMix::decay(), EvtVPHOtoVISRHi::decay(), EvtVPHOtoVISR::decay(), EvtTVSPwave::decay(), EvtTauGamMu::decay(), EvtSVVNONCPEIGEN::decay(), EvtSVVHelAmp::decay(), EvtSVVCPLH::decay(), EvtSVVCP::decay(), EvtSVSCPiso::decay(), EvtSVSCP::decay(), EvtSVPHelAmp::decay(), EvtSVPCP::decay(), EvtSTSCP::decay(), EvtSSSCPT::decay(), EvtSSSCPpng::decay(), EvtSSSCP::decay(), EvtRhoPi::decay(), EvtPhokhara::decay(), EvtPBB2::decay(), EvtPBB1::decay(), EvtOpenCharm::decay(), decay(), EvtJscont::decay(), EvtJ2BB3::decay(), EvtJ2BB2::decay(), EvtJ2BB1::decay(), EvtEDM::decay(), EvtDDalitz::decay(), EvtConExc::decay(), EvtChi2BB2::decay(), EvtChi2BB1::decay(), EvtChi1BB2::decay(), EvtChi1BB1::decay(), EvtChi0BB2::decay(), EvtCBTo3piP00::decay(), EvtCBTo3piMPP::decay(), EvtCalHelAmp::decay(), EvtBtoXsgamma::decay(), EvtBToKpipiCP::decay(), EvtBtoKpiCPiso::decay(), EvtBTo4piCP::decay(), EvtBTo3piCP::decay(), EvtBto2piCPiso::decay(), EvtBsquark::decay(), EvtBHadronic::decay(), EvtAngSamX::decay(), EvtAngSamLab::decay(), EvtAngSam3::decay(), EvtAngSam::decay(), EvtCalHelAmp::firstder(), EvtLNuGamma::getFormFactor(), EvtVubNLO::init(), EvtVubHybrid::init(), EvtVub::init(), EvtVSSBMixCPT::init(), EvtVectorIsr::init(), EvtTrackGen::init(), EvtTauHadnu::init(), EvtSVVNONCPEIGEN::init(), EvtSVSNONCPEIGEN::init(), EvtSVSCPLH::init(), EvtSSDCP::init(), EvtSinglePoint::init(), EvtSingleParticle2::init(), EvtSingleParticle::init(), EvtPycont::init(), EvtPartWave::init(), EvtmPhsp::init(), EvtmH2::init(), EvtMelikhov::init(), EvtLNuGamma::init(), EvtHypNonLepton::init(), EvtHQET2::init(), EvtHQET::init(), EvtHelAmp::init(), EvtDMix::init(), EvtD0mixDalitz::init(), EvtConExc::init(), EvtBtoXsll::init(), EvtBtoKD3P::init(), EvtPhokhara::init_evt(), EvtPhokhara::init_mode(), EvtSVVHelAmp::initProbMax(), EvtSVVCPLH::initProbMax(), EvtSVVCP::initProbMax(), EvtSVSCPLH::initProbMax(), EvtSVSCPiso::initProbMax(), EvtSVSCP::initProbMax(), EvtSVPHelAmp::initProbMax(), EvtSVPCP::initProbMax(), EvtSTSCP::initProbMax(), EvtSSSCPpng::initProbMax(), EvtSSSCP::initProbMax(), EvtPBB2::initProbMax(), EvtBtoKpiCPiso::initProbMax(), EvtBto2piCPiso::initProbMax(), and EvtVubHybrid::readWeights().

00564                                  {
00565 
00566   // Verify string
00567 
00568   const char* str = _args[j].c_str();
00569   int i = 0;
00570   while(str[i]!=0){
00571     if (isalpha(str[i]) && str[i]!='e') {
00572 
00573       report(INFO,"EvtGen") << "String " << str << " is not a number" << endl;
00574       assert(0);
00575     }
00576     i++;
00577   }
00578   
00579   char** tc=0; 
00580   return strtod(_args[j].c_str(),tc);
00581 }

double * EvtDecayBase::getArgs (  )  [inherited]

Definition at line 547 of file EvtDecayBase.cc.

References EvtDecayBase::_args, EvtDecayBase::_argsD, EvtDecayBase::_narg, EvtCyclic3::c_str(), and genRecEmupikp::i.

Referenced by EvtBtoXsgamma::decay(), EvtSLPole::init(), EvtSLBKPole::init(), and EvtKKLambdaC::init().

00547                               {
00548 
00549   if ( _argsD ) return _argsD;
00550   //The user has asked for a list of doubles - the arguments 
00551   //better all be doubles...
00552   if ( _narg==0 ) return _argsD;
00553 
00554   _argsD = new double[_narg];
00555 
00556   int i;
00557   char * tc;
00558   for(i=0;i<_narg;i++) { 
00559     _argsD[i] =  strtod(_args[i].c_str(),&tc);
00560   }
00561   return _argsD;
00562 }

std::string* EvtDecayBase::getArgsStr (  )  [inline, inherited]

Definition at line 73 of file EvtDecayBase.hh.

References EvtDecayBase::_args.

00073 {return _args;}

std::string EvtDecayBase::getArgStr ( int  j  )  [inline, inherited]

Definition at line 75 of file EvtDecayBase.hh.

References EvtDecayBase::_args.

Referenced by EvtParticleDecay::chargeConj(), EvtParticleDecayList::EvtParticleDecayList(), EvtDecayTable::findChannel(), EvtMultibody::init(), and EvtIntervalDecayAmp< EvtDalitzPoint >::init().

00075 {return _args[j];}

double EvtDecayBase::getBranchingFraction (  )  [inline, inherited]

Definition at line 61 of file EvtDecayBase.hh.

References EvtDecayBase::_brfr.

Referenced by EvtParticleDecay::chargeConj(), and EvtParticleDecayList::EvtParticleDecayList().

00061 {return _brfr;}

EvtId EvtDecayBase::getDaug ( int  i  )  [inline, inherited]

Definition at line 66 of file EvtDecayBase.hh.

References EvtDecayBase::_daug.

Referenced by EvtParticleDecayList::addMode(), EvtParticleDecay::chargeConj(), EvtDecayBase::checkSpinDaughter(), EvtVubNLO::decay(), EvtVubHybrid::decay(), EvtVub::decay(), EvtVSSBMixCPT::decay(), EvtVPHOtoVISRHi::decay(), EvtVPHOtoVISR::decay(), EvtVectorIsr::decay(), EvtTauHadnu::decay(), EvtSVVNONCPEIGEN::decay(), EvtSVVHelAmp::decay(), EvtSVVCPLH::decay(), EvtSVVCP::decay(), EvtSVSNONCPEIGEN::decay(), EvtSVSCPiso::decay(), EvtSSDCP::decay(), EvtSLN::decay(), EvtSinglePoint::decay(), EvtSingleParticle2::decay(), EvtSingleParticle::decay(), EvtKstarnunu::decay(), EvtJ2BB3::decay(), EvtJ2BB1::decay(), EvtGoityRoberts::decay(), EvtCBTo3piP00::decay(), EvtCBTo3piMPP::decay(), EvtBtoXsll::decay(), EvtBtoXsgamma::decay(), EvtBtoXsEtap::decay(), EvtBToKpipiCP::decay(), EvtBtoKpiCPiso::decay(), EvtBtoKD3P::decay(), EvtBTo3piCP::decay(), EvtPto3P::dp(), EvtDecayTable::findChannel(), EvtConExc::gamHXSection(), EvtVVPIPI_WEIGHTED::init(), EvtVVpipi::init(), EvtVSSBMixCPT::init(), EvtTrackGen::init(), EvtTauHadnu::init(), EvtSSDCP::init(), EvtSLPole::init(), EvtSLBKPole::init(), EvtS2GV::init(), EvtPartWave::init(), EvtP2GC2::init(), EvtP2GC1::init(), EvtP2GC0::init(), EvtJpipi::init(), EvtJPE::init(), EvtISGW2::init(), EvtISGW::init(), EvtHypNonLepton::init(), EvtHQET2::init(), EvtHQET::init(), EvtHelAmp::init(), EvtDDalitz::init(), EvtD0mixDalitz::init(), EvtBtoXsll::init(), EvtbTosllBall::init(), EvtbTosllAli::init(), EvtAV2GV::init(), EvtSVSCPiso::initProbMax(), EvtSSDCP::initProbMax(), EvtSLPole::initProbMax(), EvtSLN::initProbMax(), EvtSLBKPole::initProbMax(), EvtKKLambdaC::initProbMax(), EvtISGW2::initProbMax(), EvtHypNonLepton::initProbMax(), EvtHQET2::initProbMax(), EvtHQET::initProbMax(), EvtbTosllBall::initProbMax(), EvtbTosllAli::initProbMax(), EvtBtoKpiCPiso::initProbMax(), EvtTauHadnu::pi3G(), and EvtParticleDecayList::removeMode().

00066 {return _daug[i];}

EvtId* EvtDecayBase::getDaugs (  )  [inline, inherited]

Definition at line 65 of file EvtDecayBase.hh.

References EvtDecayBase::_daug.

Referenced by EvtVVSPwave::decay(), EvtVVPIPI_WEIGHTED::decay(), EvtVVpipi::decay(), EvtVVP::decay(), EvtVubNLO::decay(), EvtVubHybrid::decay(), EvtVub::decay(), EvtVSSMix::decay(), EvtVSSBMixCPT::decay(), EvtVSS::decay(), EvtVSPPwave::decay(), EvtVll::decay(), EvtVectorIsr::decay(), EvtTVSPwave::decay(), EvtTSS::decay(), EvtTrackGen::decay(), EvtTauVectornu::decay(), EvtTauScalarnu::decay(), EvtTaulnunu::decay(), EvtTauHadnu::decay(), EvtTauGamMu::decay(), EvtT2GV::decay(), EvtSVSCPLH::decay(), EvtSVSCP::decay(), EvtSVS::decay(), EvtSVPHelAmp::decay(), EvtSVPCP::decay(), EvtSTSCP::decay(), EvtSTS::decay(), EvtSSSCPT::decay(), EvtSSSCPpng::decay(), EvtSSSCP::decay(), EvtSPL::decay(), EvtSLPole::decay(), EvtSLN::decay(), EvtSll::decay(), EvtSLBKPole::decay(), EvtSinglePoint::decay(), EvtSingleParticle2::decay(), EvtSingleParticle::decay(), EvtS2GV::decay(), EvtRhoPi::decay(), EvtPi0Dalitz::decay(), EvtPhsp::decay(), EvtPhiDalitz::decay(), EvtPBB2::decay(), EvtPBB1::decay(), EvtPartWave::decay(), EvtP2GC2::decay(), EvtP2GC1::decay(), EvtP2GC0::decay(), EvtOmegaDalitz::decay(), EvtMultibody::decay(), EvtmPhsp::decay(), EvtmH2::decay(), EvtMelikhov::decay(), EvtMBody3::decay(), EvtMassH2::decay(), EvtMassH1::decay(), EvtLNuGamma::decay(), EvtLambdaP_BarGamma::decay(), EvtLambdac2pKpi::decay(), EvtKstarstargamma::decay(), EvtKstarnunu::decay(), EvtKKLambdaC::decay(), EvtJTO3P::decay(), EvtJpipi::decay(), EvtJPE::decay(), EvtJ2BB3::decay(), EvtJ2BB2::decay(), EvtJ2BB1::decay(), EvtISGW2::decay(), EvtISGW::decay(), EvtIntervalDecayAmp< EvtDalitzPoint >::decay(), EvtHypWK::decay(), EvtHypNonLepton::decay(), EvtHQET2::decay(), EvtHQET::decay(), EvtHelPPJ::decay(), EvtHelAmp::decay(), EvtHAngSam3::decay(), EvtFlatQ2::decay(), EvtEtaDalitz::decay(), EvtEDM::decay(), EvtDMix::decay(), EvtDIY::decay(), EvtDeBD::decay(), EvtDDalitz::decay(), EvtD0mixDalitz::decay(), EvtChi2BB2::decay(), EvtChi2BB1::decay(), EvtChi1BB2::decay(), EvtChi1BB1::decay(), EvtChi0BB2::decay(), EvtChi0BB1::decay(), EvtCBTo3piP00::decay(), EvtCBTo3piMPP::decay(), EvtCalHelAmp::decay(), EvtBtoXsll::decay(), EvtBtoXsgamma::decay(), EvtBtoXsEtap::decay(), EvtbTosllBall::decay(), EvtbTosllAli::decay(), EvtBToKpipiCP::decay(), EvtBtoKpiCPiso::decay(), EvtBtoKD3P::decay(), EvtBTo4piCP::decay(), EvtBTo3piCP::decay(), EvtBto2piCPiso::decay(), EvtBsquark::decay(), EvtBody3::decay(), EvtBHadronic::decay(), EvtAV2GV::decay(), EvtAngSamX::decay(), EvtAngSamLab::decay(), EvtAngSam3::decay(), EvtAngSam::decay(), EvtAngH2::decay(), EvtGoityRoberts::DecayBDpilnuGR(), EvtGoityRoberts::DecayBDstarpilnuGR(), EvtParticleDecayList::EvtParticleDecayList(), EvtConExc::get_mode(), EvtMultibody::init(), EvtLambdac2pKpi::init(), EvtConExc::init(), EvtConExc::init_mode(), EvtBto2piCPiso::initProbMax(), and EvtDecayAmp::makeDecay().

00065 {return _daug;}

int EvtDecayBase::getDSum (  )  [inline, inherited]

Definition at line 77 of file EvtDecayBase.hh.

References EvtDecayBase::_dsum.

00077 {return _dsum; }

std::string EvtDecayBase::getModelName (  )  [inline, inherited]

Definition at line 76 of file EvtDecayBase.hh.

References EvtDecayBase::_modelname.

Referenced by EvtParticleDecayList::addMode(), EvtParticleDecayList::EvtParticleDecayList(), EvtDecayTable::findChannel(), and EvtDecay::getModel().

00076 {return _modelname; }

void EvtLunda::getName ( std::string name  )  [virtual]

Implements EvtDecayBase.

Definition at line 122 of file EvtLunda.cc.

00122                                            {
00123 
00124   model_name="LUNDA";     
00125 
00126 }

int EvtDecayBase::getNArg (  )  [inline, inherited]

Definition at line 67 of file EvtDecayBase.hh.

References EvtDecayBase::_narg.

Referenced by EvtParticleDecay::chargeConj(), EvtVPHOtoVISRHi::decay(), EvtVPHOtoVISR::decay(), EvtRhoPi::decay(), EvtOpenCharm::decay(), EvtmPhsp::decay(), decay(), EvtJscont::decay(), EvtJ2BB3::decay(), EvtJ2BB2::decay(), EvtJ2BB1::decay(), EvtConExc::decay(), EvtCalHelAmp::decay(), EvtBtoXsgamma::decay(), EvtAngSamX::decay(), EvtAngSamLab::decay(), EvtAngSam3::decay(), EvtAngSam::decay(), EvtPto3P::dp(), EvtParticleDecayList::EvtParticleDecayList(), EvtDecayTable::findChannel(), EvtVubNLO::init(), EvtVubHybrid::init(), EvtVub::init(), EvtVSSBMixCPT::init(), EvtSVVNONCPEIGEN::init(), EvtSVSNONCPEIGEN::init(), EvtSSDCP::init(), EvtSLPole::init(), EvtSLBKPole::init(), EvtSinglePoint::init(), EvtSingleParticle2::init(), EvtSingleParticle::init(), EvtPycont::init(), EvtMultibody::init(), EvtmPhsp::init(), init(), EvtLNuGamma::init(), EvtKKLambdaC::init(), EvtIntervalDecayAmp< EvtDalitzPoint >::init(), EvtHypNonLepton::init(), EvtHQET2::init(), EvtHQET::init(), EvtD0mixDalitz::init(), EvtConExc::init(), EvtCalHelAmp::init(), EvtBtoXsll::init(), EvtBtoXsgamma::init(), EvtAngSamX::init(), EvtAngSamLab::init(), EvtAngSam3::init(), and EvtAngSam::init().

00067 {return _narg;}

int EvtDecayBase::getNDaug (  )  [inline, inherited]

Definition at line 64 of file EvtDecayBase.hh.

References EvtDecayBase::_ndaug.

Referenced by EvtParticleDecayList::addMode(), EvtParticleDecay::chargeConj(), EvtVVSPwave::decay(), EvtVVPIPI_WEIGHTED::decay(), EvtVVpipi::decay(), EvtVVP::decay(), EvtVubNLO::decay(), EvtVubHybrid::decay(), EvtVub::decay(), EvtVSSMix::decay(), EvtVSSBMixCPT::decay(), EvtVSS::decay(), EvtVSPPwave::decay(), EvtVll::decay(), EvtVectorIsr::decay(), EvtTVSPwave::decay(), EvtTSS::decay(), EvtTrackGen::decay(), EvtTauVectornu::decay(), EvtTauScalarnu::decay(), EvtTaulnunu::decay(), EvtTauHadnu::decay(), EvtTauGamMu::decay(), EvtT2GV::decay(), EvtSVSCPLH::decay(), EvtSVSCPiso::decay(), EvtSVSCP::decay(), EvtSVS::decay(), EvtSVPHelAmp::decay(), EvtSVPCP::decay(), EvtSTSCP::decay(), EvtSTS::decay(), EvtSSSCPT::decay(), EvtSSSCPpng::decay(), EvtSSSCP::decay(), EvtSPL::decay(), EvtSLPole::decay(), EvtSLN::decay(), EvtSll::decay(), EvtSLBKPole::decay(), EvtSinglePoint::decay(), EvtSingleParticle2::decay(), EvtSingleParticle::decay(), EvtS2GV::decay(), EvtRhoPi::decay(), EvtPi0Dalitz::decay(), EvtPhsp::decay(), EvtPhiDalitz::decay(), EvtPBB2::decay(), EvtPBB1::decay(), EvtPartWave::decay(), EvtP2GC2::decay(), EvtP2GC1::decay(), EvtP2GC0::decay(), EvtOmegaDalitz::decay(), EvtMultibody::decay(), EvtmPhsp::decay(), EvtmH2::decay(), EvtMelikhov::decay(), EvtMBody3::decay(), EvtMassH2::decay(), EvtMassH1::decay(), EvtLNuGamma::decay(), EvtLambdaP_BarGamma::decay(), EvtLambdac2pKpi::decay(), EvtKstarstargamma::decay(), EvtKstarnunu::decay(), EvtKKLambdaC::decay(), EvtJTO3P::decay(), EvtJpipi::decay(), EvtJPE::decay(), EvtJ2BB3::decay(), EvtJ2BB2::decay(), EvtJ2BB1::decay(), EvtISGW2::decay(), EvtISGW::decay(), EvtHypWK::decay(), EvtHypNonLepton::decay(), EvtHQET2::decay(), EvtHQET::decay(), EvtHelPPJ::decay(), EvtHelAmp::decay(), EvtHAngSam3::decay(), EvtFlatQ2::decay(), EvtEtaDalitz::decay(), EvtEDM::decay(), EvtDMix::decay(), EvtDIY::decay(), EvtDeBD::decay(), EvtDDalitz::decay(), EvtD0mixDalitz::decay(), EvtChi2BB2::decay(), EvtChi2BB1::decay(), EvtChi1BB2::decay(), EvtChi1BB1::decay(), EvtChi0BB2::decay(), EvtChi0BB1::decay(), EvtCBTo3piP00::decay(), EvtCBTo3piMPP::decay(), EvtCalHelAmp::decay(), EvtBtoXsll::decay(), EvtBtoXsgamma::decay(), EvtBtoXsEtap::decay(), EvtbTosllBall::decay(), EvtbTosllAli::decay(), EvtBToKpipiCP::decay(), EvtBtoKpiCPiso::decay(), EvtBtoKD3P::decay(), EvtBTo4piCP::decay(), EvtBTo3piCP::decay(), EvtBto2piCPiso::decay(), EvtBsquark::decay(), EvtBody3::decay(), EvtBHadronic::decay(), EvtAV2GV::decay(), EvtAngSamX::decay(), EvtAngSamLab::decay(), EvtAngSam3::decay(), EvtAngSam::decay(), EvtAngH2::decay(), EvtGoityRoberts::DecayBDpilnuGR(), EvtGoityRoberts::DecayBDstarpilnuGR(), EvtPto3P::dp(), EvtParticleDecayList::EvtParticleDecayList(), EvtDecayTable::findChannel(), EvtDecayTable::inChannelList(), EvtVSSBMixCPT::init(), EvtTrackGen::init(), EvtTauHadnu::init(), EvtMultibody::init(), EvtHypNonLepton::init(), EvtConExc::init(), EvtTauHadnu::initProbMax(), EvtDecayAmp::makeDecay(), and EvtParticleDecayList::removeMode().

00064 {return _ndaug;}

EvtId EvtDecayBase::getParentId (  )  [inline, inherited]

Definition at line 60 of file EvtDecayBase.hh.

References EvtDecayBase::_parent.

Referenced by EvtParticleDecayList::addMode(), EvtParticleDecay::chargeConj(), EvtDecayBase::checkSpinParent(), EvtTauola::decay(), EvtPythia::decay(), EvtOpenCharm::decay(), EvtMultibody::decay(), EvtLundCharm::decay(), decay(), EvtJPE::decay(), EvtJetSet::decay(), EvtJ2BB3::decay(), EvtJ2BB2::decay(), EvtJ2BB1::decay(), EvtPto3P::dp(), EvtParticleDecayList::EvtParticleDecayList(), EvtTauola::fixPolarizations(), EvtVSSBMixCPT::init(), EvtTauola::init(), EvtSSDCP::init(), EvtRhoPi::init(), EvtPythia::init(), EvtPhokhara_ppbar::init(), EvtPhokhara_pipipi0::init(), EvtPhokhara_pipi::init(), EvtPhokhara_pi0pi0pipi::init(), EvtPhokhara_nnbar::init(), EvtPhokhara_LLB::init(), EvtPhokhara_KK::init(), EvtPhokhara_K0K0::init(), EvtPhokhara_4pi::init(), EvtPhokhara::init(), EvtPartWave::init(), EvtOpenCharm::init(), EvtmH2::init(), EvtMassH2::init(), EvtMassH1::init(), EvtLundCharm::init(), init(), EvtJetSet::init(), EvtHypNonLepton::init(), EvtHelAmp::init(), EvtHAngSam3::init(), EvtDIY::init(), EvtDDalitz::init(), EvtD0mixDalitz::init(), EvtBody3::init(), EvtAngSamX::init(), EvtAngSamLab::init(), EvtAngSam3::init(), EvtAngSam::init(), EvtAngH2::init(), EvtSLPole::initProbMax(), EvtSLN::initProbMax(), EvtSLBKPole::initProbMax(), EvtKKLambdaC::initProbMax(), EvtISGW2::initProbMax(), EvtHypNonLepton::initProbMax(), EvtHQET2::initProbMax(), EvtHQET::initProbMax(), EvtbTosllBall::initProbMax(), EvtbTosllAli::initProbMax(), and EvtParticleDecayList::removeMode().

00060 {return _parent;}

int EvtDecayBase::getPHOTOS (  )  [inline, inherited]

Definition at line 68 of file EvtDecayBase.hh.

References EvtDecayBase::_photos.

Referenced by EvtParticleDecay::chargeConj(), EvtParticleDecayList::EvtParticleDecayList(), EvtDecayProb::makeDecay(), EvtDecayIncoherent::makeDecay(), and EvtDecayAmp::makeDecay().

00068 {return _photos;}

double EvtDecayBase::getProbMax ( double  prob  )  [inherited]

Definition at line 67 of file EvtDecayBase.cc.

References EvtDecayBase::_daug, EvtDecayBase::_modelname, EvtDecayBase::_ndaug, EvtDecayBase::_parent, EvtCyclic3::c_str(), EvtDecayBase::defaultprobmax, genRecEmupikp::i, Bes_Common::INFO, EvtDecayBase::max_prob, EvtPDL::name(), EvtDecayBase::ntimes_prob, EvtDecayBase::probmax, report(), and EvtDecayBase::sum_prob.

Referenced by EvtBtoKD3P::decay(), EvtDecayProb::makeDecay(), and EvtDecayAmp::makeDecay().

00067                                              {
00068 
00069   int i;
00070 
00071   //diagnostics
00072   sum_prob+=prob;
00073   if (prob>max_prob) max_prob=prob;
00074 
00075 
00076   if ( defaultprobmax && ntimes_prob<=500 ) { 
00077     //We are building up probmax with this iteration
00078      ntimes_prob += 1;
00079      if ( prob > probmax ) { probmax = prob;}
00080      if (ntimes_prob==500) { 
00081        probmax*=1.2;
00082      }
00083      return 1000000.0*prob;
00084   }
00085 
00086   if ( prob> probmax*1.0001) {
00087 
00088     report(INFO,"EvtGen") << "prob > probmax:("<<prob<<">"<<probmax<<")";
00089     report(INFO,"") << "("<<_modelname.c_str()<<") ";
00090     report(INFO,"") << EvtPDL::name(_parent).c_str()<<" -> ";
00091     for(i=0;i<_ndaug;i++){
00092        report(INFO,"") << EvtPDL::name(_daug[i]).c_str() << " ";
00093     }
00094     report(INFO,"") << endl;
00095 
00096     if (defaultprobmax) probmax = prob;
00097 
00098   }
00099 
00100   ntimes_prob += 1;
00101 
00102 
00103   return probmax;
00104 
00105 } //getProbMax

int EvtLunda::getTotalEvt (  )  [inline]

Definition at line 50 of file EvtLunda.hh.

References nevt.

00050 {return nevt;}

void EvtLunda::init (  )  [virtual]

Reimplemented from EvtDecayBase.

Definition at line 142 of file EvtLunda.cc.

References calibUtil::ERROR, EvtDecayBase::getNArg(), EvtDecayBase::getParentId(), EvtPDL::name(), report(), store(), and deljobs::string.

00142                    {
00143 
00144 //  checkNArg(1);
00145   std::string strpdg=getenv("BESEVTGENROOT");
00146   strpdg +="/share/r_pdg.dat"; 
00147   //strcpy(mypdgfile_.mypdg, strpdg.c_str());
00148   std::cout<<"mypdg= "<<strpdg<<std::endl;
00149 
00150   if(getNArg()>2){std::cout<<"Parameter can be 1 or 2, You have "<<getNArg()<<std::endl; ::abort();}
00151 
00152   if (getParentId().isAlias()){
00153 
00154     report(ERROR,"EvtGen") << "EvtLunda finds that you are decaying the"<<endl
00155                            << " aliased particle "
00156                            << EvtPDL::name(getParentId()).c_str()
00157                            << " with the Lunda model"<<endl
00158                            << " this does not work, please modify decay table."
00159                            << endl;
00160     report(ERROR,"EvtGen") << "Will terminate execution!"<<endl;
00161     ::abort();
00162 
00163   }
00164 
00165   store(this);
00166 
00167 }

void EvtLunda::initProbMax (  )  [virtual]

Reimplemented from EvtDecayBase.

Definition at line 135 of file EvtLunda.cc.

References EvtDecayBase::noProbMax().

00135                           {
00136 
00137   noProbMax();
00138 
00139 }

int EvtDecayIncoherent::isDaughterSpinDensitySet ( int  daughter  )  [inline, inherited]

Definition at line 39 of file EvtDecayIncoherent.hh.

References EvtDecayIncoherent::spinDensitySet.

Referenced by EvtDecayIncoherent::makeDecay().

00040   {return spinDensitySet[daughter];}

void EvtLunda::LundaInit ( int  dummy  ) 

Definition at line 511 of file EvtLunda.cc.

References EvtCyclic3::c_str(), commands, first, genRecEmupikp::i, lugive0_(), and ncommand.

Referenced by decay().

00511                                  {
00512   
00513   static int first=1;
00514   if (first){
00515     
00516     first=0;
00517     for(int i=0;i<ncommand;i++)
00518       lugive0_(commands[i].c_str(),strlen(commands[i].c_str()));
00519   }
00520 
00521 }

void EvtDecayIncoherent::makeDecay ( EvtParticle p  )  [virtual, inherited]

Implements EvtDecayBase.

Definition at line 29 of file EvtDecayIncoherent.cc.

References EvtDecayBase::_daugsDecayedByParentModel, EvtRadCorr::alwaysRadCorr(), EvtDecayBase::daugsDecayedByParentModel(), EvtParticle::decay(), EvtDecayBase::decay(), EvtRadCorr::doRadCorr(), EvtParticle::getDaug(), EvtParticle::getNDaug(), EvtDecayBase::getPHOTOS(), EvtParticle::getSpinDensityForward(), EvtParticle::getSpinStates(), genRecEmupikp::i, EvtDecayIncoherent::isDaughterSpinDensitySet(), MAX_DAUG, EvtParticle::setDecayProb(), EvtSpinDensity::SetDiag(), EvtParticle::setSpinDensityBackward(), EvtParticle::setSpinDensityForward(), EvtDecayIncoherent::spinDensitySet, and subSeperate::temp.

00029                                                 {
00030 
00031   int i;
00032   //initialize this the hard way..
00033   //Lange June 26, 2000
00034   for (i=0; i<MAX_DAUG; i++ ) { spinDensitySet[i]=0;}
00035   _daugsDecayedByParentModel=false;
00036 
00037   decay(p);
00038   p->setDecayProb(1.);
00039 
00040   EvtSpinDensity rho;
00041 
00042   rho.SetDiag(p->getSpinStates());
00043 
00044   p->setSpinDensityBackward(rho);
00045 
00046   if (getPHOTOS() || EvtRadCorr::alwaysRadCorr()) {
00047     EvtRadCorr::doRadCorr(p);
00048   }
00049 
00050   //Now decay the daughters.
00051 
00052   if ( !daugsDecayedByParentModel()) {
00053     
00054     for(i=0;i<p->getNDaug();i++){
00055       //Need to set the spin density of the daughters to be
00056       //diagonal.
00057       rho.SetDiag(p->getDaug(i)->getSpinStates());
00058       //if (p->getDaug(i)->getNDaug()==0){
00059       //only do this if the user has not already set the 
00060       //spin density matrix herself.
00061       //Lange June 26, 2000
00062       if ( isDaughterSpinDensitySet(i)==0 ) { 
00063         p->getDaug(i)->setSpinDensityForward(rho);
00064       }
00065       else{
00066         //report(INFO,"EvtGen") << "spinDensitymatrix already set!!!\n";
00067         EvtSpinDensity temp=p->getDaug(i)->getSpinDensityForward();
00068         //      report(INFO,"EvtGen") <<temp<<endl;
00069       }
00070       //Now decay the daughter.  Really!
00071       p->getDaug(i)->decay();
00072     }
00073 
00074   } 
00075 }

bool EvtDecayBase::matchingDecay ( const EvtDecayBase other  )  const [virtual, inherited]

Definition at line 587 of file EvtDecayBase.cc.

References EvtDecayBase::_daug, EvtDecayBase::_ndaug, EvtDecayBase::_parent, genRecEmupikp::i, ganga-rec::j, and EvtCyclic3::other().

Referenced by EvtParticleDecayList::addMode(), and EvtParticleDecayList::removeMode().

00587                                                                 {
00588 
00589   if ( _ndaug != other._ndaug) return false;
00590   if ( _parent != other._parent) return false;
00591   
00592   std::vector<int> useDs;
00593   for ( unsigned int i=0; i<_ndaug; i++) useDs.push_back(0);
00594 
00595   for ( unsigned int i=0; i<_ndaug; i++) {
00596     bool foundIt=false;
00597     for ( unsigned int j=0; j<_ndaug; j++) {
00598       if ( useDs[j] == 1 ) continue;
00599       if ( _daug[i] == other._daug[j] && _daug[i].getAlias() == other._daug[j].getAlias()) {
00600         foundIt=true;
00601         useDs[j]=1;
00602         break;
00603       }
00604     }
00605     if ( foundIt==false) return false;
00606   }
00607   for ( unsigned int i=0; i<_ndaug; i++) if ( useDs[i]==0) return false;
00608 
00609   return true;
00610 
00611 }

void EvtDecayBase::noProbMax (  )  [inherited]

Definition at line 304 of file EvtDecayBase.cc.

References EvtDecayBase::defaultprobmax.

Referenced by EvtVubNLO::initProbMax(), EvtVubHybrid::initProbMax(), EvtVub::initProbMax(), EvtVectorIsr::initProbMax(), EvtTrackGen::initProbMax(), EvtTauola::initProbMax(), EvtRhoPi::initProbMax(), EvtRexc::initProbMax(), EvtPythia::initProbMax(), EvtPyGaGa::initProbMax(), EvtPycont::initProbMax(), EvtPhsp::initProbMax(), EvtPhokhara_ppbar::initProbMax(), EvtPhokhara_pipipi0::initProbMax(), EvtPhokhara_pipi::initProbMax(), EvtPhokhara_pi0pi0pipi::initProbMax(), EvtPhokhara_nnbar::initProbMax(), EvtPhokhara_LLB::initProbMax(), EvtPhokhara_KK::initProbMax(), EvtPhokhara_K0K0::initProbMax(), EvtPhokhara_4pi::initProbMax(), EvtPhokhara::initProbMax(), EvtOpenCharm::initProbMax(), EvtmPhsp::initProbMax(), EvtmH2::initProbMax(), EvtMBody3::initProbMax(), EvtMassH2::initProbMax(), EvtMassH1::initProbMax(), EvtLundCharm::initProbMax(), initProbMax(), EvtLambdac2pKpi::initProbMax(), EvtJscont::initProbMax(), EvtJetSet::initProbMax(), EvtHAngSam3::initProbMax(), EvtDMix::initProbMax(), EvtDIY::initProbMax(), EvtConExc::initProbMax(), EvtCalHelAmp::initProbMax(), EvtBtoXsll::initProbMax(), EvtBtoXsgamma::initProbMax(), EvtBtoXsEtap::initProbMax(), EvtBody3::initProbMax(), EvtAngSamX::initProbMax(), EvtAngSamLab::initProbMax(), EvtAngSam3::initProbMax(), EvtAngSam::initProbMax(), and EvtAngH2::initProbMax().

00304                             {
00305 
00306   defaultprobmax=0;
00307 
00308 }

virtual int EvtDecayBase::nRealDaughters (  )  [inline, virtual, inherited]

Reimplemented in EvtBtoKD3P, and EvtVSSBMixCPT.

Definition at line 105 of file EvtDecayBase.hh.

References EvtDecayBase::_ndaug.

Referenced by EvtDecayTable::readDecayFile().

00105 { return _ndaug;}

void EvtDecayBase::printSummary (  )  [inherited]

Definition at line 259 of file EvtDecayBase.cc.

References EvtDecayBase::_daug, EvtDecayBase::_modelname, EvtDecayBase::_ndaug, EvtDecayBase::_parent, EvtCyclic3::c_str(), genRecEmupikp::i, Bes_Common::INFO, EvtDecayBase::max_prob, EvtPDL::name(), EvtDecayBase::ntimes_prob, EvtDecayBase::probmax, report(), and EvtDecayBase::sum_prob.

Referenced by EvtDecayBase::checkNArg(), EvtDecayBase::checkNDaug(), EvtDecayBase::checkSpinDaughter(), EvtDecayBase::checkSpinParent(), and EvtParticleDecay::printSummary().

00259                                 {
00260 
00261   int i;
00262 
00263   if (ntimes_prob>0) {
00264 
00265     report(INFO,"EvtGen") << "Calls="<<ntimes_prob<<" eff:"<<
00266       sum_prob/(probmax*ntimes_prob)<<" frac. max:"<<max_prob/probmax;
00267     report(INFO,"") <<" probmax:"<<probmax<<" max:"<<max_prob<<" : ";
00268   }
00269 
00270   report(INFO,"") << EvtPDL::name(_parent).c_str()<<" -> ";
00271   for(i=0;i<_ndaug;i++){
00272     report(INFO,"") << EvtPDL::name(_daug[i]).c_str() << " ";
00273   }
00274   report(INFO,"") << " ("<<_modelname.c_str()<<"):"<< endl;
00275   
00276   
00277   
00278 }

double EvtDecayBase::resetProbMax ( double  prob  )  [inherited]

Definition at line 108 of file EvtDecayBase.cc.

References EvtDecayBase::_daug, EvtDecayBase::_modelname, EvtDecayBase::_ndaug, EvtDecayBase::_parent, EvtDecayBase::defaultprobmax, EvtPDL::getStdHep(), genRecEmupikp::i, Bes_Common::INFO, EvtDecayBase::ntimes_prob, EvtDecayBase::probmax, and report().

00108                                              {
00109   
00110   report(INFO,"EvtGen") << "Reseting prob max\n"; 
00111   report(INFO,"EvtGen") << "prob > probmax:("<<prob<<">"<<probmax<<")";
00112   report(INFO,"") << "("<<_modelname.c_str()<<")";
00113   report(INFO,"") << EvtPDL::getStdHep(_parent)<<"->";
00114   
00115   for( int i=0;i<_ndaug;i++){
00116     report(INFO,"") << EvtPDL::getStdHep(_daug[i]) << " ";
00117   }
00118   report(INFO,"") << endl;
00119   
00120   probmax = 0.0;
00121   defaultprobmax = 0;
00122   ntimes_prob = 0;
00123   
00124   return prob;
00125 
00126 }

void EvtDecayBase::saveDecayInfo ( EvtId  ipar,
int  ndaug,
EvtId daug,
int  narg,
std::vector< std::string > &  args,
std::string  name,
double  brfr 
) [inherited]

Definition at line 167 of file EvtDecayBase.cc.

References EvtDecayBase::_args, EvtDecayBase::_brfr, EvtDecayBase::_chkCharge, EvtDecayBase::_daug, EvtDecayBase::_dsum, EvtDecayBase::_modelname, EvtDecayBase::_narg, EvtDecayBase::_ndaug, EvtDecayBase::_parent, EvtCyclic3::c_str(), EvtDecayBase::checkQ(), EvtDecayBase::defaultprobmax, EvtId::getAlias(), genRecEmupikp::i, Bes_Common::INFO, EvtDecayBase::init(), EvtDecayBase::initProbMax(), EvtPDL::name(), report(), and deljobs::string.

Referenced by EvtParticleDecay::chargeConj(), EvtParticleDecayList::EvtParticleDecayList(), and EvtDecayTable::readDecayFile().

00170                                               {
00171 
00172   int i;
00173 
00174   _brfr=brfr;
00175   _ndaug=ndaug;
00176   _narg=narg;
00177   _parent=ipar; 
00178 
00179   _dsum=0;
00180 
00181   if (_ndaug>0) {
00182     _daug=new EvtId [_ndaug];
00183     for(i=0;i<_ndaug;i++){
00184       _daug[i]=daug[i];
00185       _dsum+=daug[i].getAlias();
00186     }
00187   }
00188   else{
00189     _daug=0;
00190   }
00191 
00192   if (_narg>0) {
00193     _args=new std::string[_narg+1];
00194     for(i=0;i<_narg;i++){
00195       _args[i]=args[i];
00196     }
00197   }
00198   else{
00199      _args = 0;
00200   }
00201 
00202   _modelname=name;
00203 
00204   this->init();
00205   this->initProbMax();
00206 
00207   if (_chkCharge){
00208     this->checkQ();
00209   }
00210 
00211 
00212   if (defaultprobmax){
00213     report(INFO,"EvtGen") << "No default probmax for ";
00214     report(INFO,"") << "("<<_modelname.c_str()<<") ";
00215     report(INFO,"") << EvtPDL::name(_parent).c_str()<<" -> ";
00216     for(i=0;i<_ndaug;i++){
00217       report(INFO,"") << EvtPDL::name(_daug[i]).c_str() << " ";
00218     }
00219     report(INFO,"") << endl;
00220     report(INFO,"") << "This is fine for development, but must be provided for production."<<endl;
00221     report(INFO,"EvtGen") << "Never fear though - the decay will use the \n";
00222     report(INFO,"EvtGen") << "500 iterations to build up a good probmax \n";
00223     report(INFO,"EvtGen") << "before accepting a decay. "<<endl;
00224   }
00225 
00226 }

void EvtDecayIncoherent::setDaughterSpinDensity ( int  daughter  )  [inline, inherited]

Definition at line 36 of file EvtDecayIncoherent.hh.

References EvtDecayIncoherent::spinDensitySet.

Referenced by EvtVectorIsr::decay(), EvtTauola::fixPolarizations(), EvtPythia::fixPolarizations(), EvtOpenCharm::fixPolarizations(), EvtLundCharm::fixPolarizations(), fixPolarizations(), and EvtJetSet::fixPolarizations().

00037   { spinDensitySet[daughter]=1; return;}

void EvtDecayBase::setPHOTOS (  )  [inline, inherited]

Definition at line 69 of file EvtDecayBase.hh.

References EvtDecayBase::_photos.

Referenced by EvtParticleDecay::chargeConj(), EvtParticleDecayList::EvtParticleDecayList(), and EvtDecayTable::readDecayFile().

00069 {_photos=1;}

void EvtDecayBase::setProbMax ( double  prbmx  )  [inherited]

Definition at line 297 of file EvtDecayBase.cc.

References EvtDecayBase::defaultprobmax, and EvtDecayBase::probmax.

Referenced by EvtBtoKD3P::decay(), EvtVVSPwave::initProbMax(), EvtVVPIPI_WEIGHTED::initProbMax(), EvtVVpipi::initProbMax(), EvtVVP::initProbMax(), EvtVSSMix::initProbMax(), EvtVSSBMixCPT::initProbMax(), EvtVSS::initProbMax(), EvtVSPPwave::initProbMax(), EvtVPHOtoVISRHi::initProbMax(), EvtVll::initProbMax(), EvtTVSPwave::initProbMax(), EvtTSS::initProbMax(), EvtTauVectornu::initProbMax(), EvtTauScalarnu::initProbMax(), EvtTaulnunu::initProbMax(), EvtTauHadnu::initProbMax(), EvtT2GV::initProbMax(), EvtSVVNONCPEIGEN::initProbMax(), EvtSVVHelAmp::initProbMax(), EvtSVVCPLH::initProbMax(), EvtSVVCP::initProbMax(), EvtSVSNONCPEIGEN::initProbMax(), EvtSVSCPLH::initProbMax(), EvtSVSCPiso::initProbMax(), EvtSVSCP::initProbMax(), EvtSVS::initProbMax(), EvtSVPHelAmp::initProbMax(), EvtSVPCP::initProbMax(), EvtSTSCP::initProbMax(), EvtSTS::initProbMax(), EvtSSSCPpng::initProbMax(), EvtSSSCP::initProbMax(), EvtSSDCP::initProbMax(), EvtSPL::initProbMax(), EvtSLPole::initProbMax(), EvtSLN::initProbMax(), EvtSLBKPole::initProbMax(), EvtS2GV::initProbMax(), EvtPi0Dalitz::initProbMax(), EvtPBB2::initProbMax(), EvtPBB1::initProbMax(), EvtPartWave::initProbMax(), EvtP2GC2::initProbMax(), EvtP2GC1::initProbMax(), EvtP2GC0::initProbMax(), EvtOmegaDalitz::initProbMax(), EvtLNuGamma::initProbMax(), EvtLambdaP_BarGamma::initProbMax(), EvtKKLambdaC::initProbMax(), EvtJpipi::initProbMax(), EvtISGW2::initProbMax(), EvtIntervalDecayAmp< EvtDalitzPoint >::initProbMax(), EvtHypNonLepton::initProbMax(), EvtHQET2::initProbMax(), EvtHQET::initProbMax(), EvtHelAmp::initProbMax(), EvtGoityRoberts::initProbMax(), EvtFlatQ2::initProbMax(), EvtEtaDalitz::initProbMax(), EvtEDM::initProbMax(), EvtDDalitz::initProbMax(), EvtD0mixDalitz::initProbMax(), EvtCBTo3piP00::initProbMax(), EvtCBTo3piMPP::initProbMax(), EvtbTosllBall::initProbMax(), EvtbTosllAli::initProbMax(), EvtBtoKpiCPiso::initProbMax(), EvtBtoKD3P::initProbMax(), EvtBTo3piCP::initProbMax(), EvtBto2piCPiso::initProbMax(), and EvtAV2GV::initProbMax().

00297                                          {
00298 
00299   defaultprobmax=0;
00300   probmax=prbmx;
00301 
00302 }

void EvtDecayBase::setSummary (  )  [inline, inherited]

Definition at line 71 of file EvtDecayBase.hh.

References EvtDecayBase::_summary.

Referenced by EvtParticleDecayList::EvtParticleDecayList(), and EvtDecayTable::readDecayFile().

00071 {_summary=1;}

void EvtDecayBase::setVerbose (  )  [inline, inherited]

Definition at line 70 of file EvtDecayBase.hh.

References EvtDecayBase::_verbose.

Referenced by EvtParticleDecayList::EvtParticleDecayList(), and EvtDecayTable::readDecayFile().

00070 {_verbose=1;}

void EvtLunda::store ( EvtDecayBase jsdecay  )  [private]

Definition at line 490 of file EvtLunda.cc.

References genRecEmupikp::i, lundadecays, nlundadecays, and ntable.

Referenced by init().

00490                                          {
00491 
00492   if (nlundadecays==ntable){
00493 
00494     EvtDecayBasePtr* newlundadecays=new EvtDecayBasePtr[2*ntable+10];
00495     int i;
00496     for(i=0;i<ntable;i++){
00497       newlundadecays[i]=lundadecays[i];
00498     }
00499     ntable=2*ntable+10;
00500     delete [] lundadecays;
00501     lundadecays=newlundadecays;
00502   }
00503 
00504   lundadecays[nlundadecays++]=jsdecay;
00505 
00506 
00507 
00508 }

int EvtDecayBase::summary (  )  [inline, inherited]

Definition at line 78 of file EvtDecayBase.hh.

References EvtDecayBase::_summary.

Referenced by EvtParticleDecayList::EvtParticleDecayList().

00078 {return _summary; }

int EvtDecayBase::verbose (  )  [inline, inherited]

Definition at line 79 of file EvtDecayBase.hh.

References EvtDecayBase::_verbose.

Referenced by EvtParticleDecayList::EvtParticleDecayList(), EvtSVSCPLH::init(), EvtSSDCP::init(), EvtPartWave::init(), EvtHelAmp::init(), EvtBtoXsll::init(), EvtPartWave::initProbMax(), and EvtHelAmp::initProbMax().

00079 {return _verbose; }


Member Data Documentation

bool EvtDecayBase::_daugsDecayedByParentModel [protected, inherited]

Definition at line 109 of file EvtDecayBase.hh.

Referenced by EvtDecayBase::daugsDecayedByParentModel(), EvtBtoKD3P::decay(), EvtDecayProb::makeDecay(), EvtDecayIncoherent::makeDecay(), and EvtDecayAmp::makeDecay().

std::string * EvtLunda::commands = 0 [static, private]

Definition at line 64 of file EvtLunda.hh.

Referenced by command(), LundaInit(), and ~EvtLunda().

int EvtLunda::lcommand = 0 [static, private]

Definition at line 63 of file EvtLunda.hh.

Referenced by command().

EvtDecayBasePtr * EvtLunda::lundadecays = 0 [static, private]

Definition at line 59 of file EvtLunda.hh.

Referenced by store(), and ~EvtLunda().

int EvtLunda::ncommand = 0 [static, private]

Definition at line 62 of file EvtLunda.hh.

Referenced by command(), and LundaInit().

int EvtLunda::nevt = 0 [static, private]

Definition at line 65 of file EvtLunda.hh.

Referenced by getTotalEvt().

int EvtLunda::nlundadecays = 0 [static, private]

Definition at line 58 of file EvtLunda.hh.

Referenced by store(), and ~EvtLunda().

int EvtLunda::ntable = 0 [static, private]

Definition at line 60 of file EvtLunda.hh.

Referenced by store().


Generated on Tue Nov 29 23:19:06 2016 for BOSS_7.0.2 by  doxygen 1.4.7