BOSS 7.0.1
BESIII Offline Software System
Loading...
Searching...
No Matches
EvtDecayProb.cc
Go to the documentation of this file.
1//--------------------------------------------------------------------------
2//
3// Environment:
4// This software is part of the EvtGen package developed jointly
5// for the BaBar and CLEO collaborations. If you use all or part
6// of it, please give an appropriate acknowledgement.
7//
8// Copyright Information: See EvtGen/COPYRIGHT
9// Copyright (C) 1998 Caltech, UCSB
10//
11// Module: EvtGen/EvtDecayProb.cc
12//
13// Description:
14//
15// Modification history:
16//
17// DJL/RYD August 11, 1998 Module created
18//
19//------------------------------------------------------------------------
21
27#include "EvtGenBase/EvtPDL.hh"
29using std::endl;
30
32
33 int ntimes=10000;
34
35 double dummy;
36
37 do{
38 _weight=1.0;
40
41 decay(p);
42 //report(INFO,"EvtGen") << _weight << endl;
43 //debugging
44
45 ntimes--;
46
47 _prob = _prob/_weight;
48
49 dummy=getProbMax(_prob)*EvtRandom::Flat();
50 p->setDecayProb(_prob/getProbMax(_prob));
51 // report(INFO,"EvtGen") << _prob <<" "<<dummy<<" "<<ntimes<<endl;
52 }while(ntimes&&(_prob<dummy));
53 //report(INFO,"EvtGen") << ntimes <<endl;
54 if (ntimes==0){
55 report(DEBUG,"EvtGen") << "Tried accept/reject:10000"
56 <<" times, and rejected all the times!"<<endl;
57 report(DEBUG,"EvtGen") << "Is therefore accepting the last event!"<<endl;
58 report(DEBUG,"EvtGen") << "Decay of particle:"<<
59 EvtPDL::name(p->getId()).c_str()<<"(channel:"<<
60 p->getChannel()<<") with mass "<<p->mass()<<endl;
61
62 int ii;
63 for(ii=0;ii<p->getNDaug();ii++){
64 report(DEBUG,"EvtGen") <<"Daughter "<<ii<<":"<<
65 EvtPDL::name(p->getDaug(ii)->getId()).c_str()<<" with mass "<<
66 p->getDaug(ii)->mass()<<endl;
67 }
68 }
69
70
72 rho.SetDiag(p->getSpinStates());
76 }
77
78
79 //Now decay the daughters.
81 int i;
82 for(i=0;i<p->getNDaug();i++){
83 //Need to set the spin density of the daughters to be
84 //diagonal.
85 rho.SetDiag(p->getDaug(i)->getSpinStates());
87
88 //Now decay the daughter. Really!
89 p->getDaug(i)->decay();
90 }
91 }
92
93}
94
95
96
97
ostream & report(Severity severity, const char *facility)
Definition: EvtReport.cc:36
@ DEBUG
Definition: EvtReport.hh:53
virtual void decay(EvtParticle *p)=0
double getProbMax(double prob)
Definition: EvtDecayBase.cc:67
bool daugsDecayedByParentModel()
bool _daugsDecayedByParentModel
void makeDecay(EvtParticle *p)
Definition: EvtDecayProb.cc:31
static std::string name(EvtId i)
Definition: EvtPDL.hh:64
void setSpinDensityBackward(const EvtSpinDensity &rho)
Definition: EvtParticle.hh:352
void setSpinDensityForward(const EvtSpinDensity &rho)
Definition: EvtParticle.hh:321
void setDecayProb(double p)
void decay()
Definition: EvtParticle.cc:404
EvtId getId() const
Definition: EvtParticle.cc:113
int getSpinStates() const
Definition: EvtParticle.cc:118
int getNDaug() const
Definition: EvtParticle.cc:125
EvtParticle * getDaug(int i)
Definition: EvtParticle.cc:85
double mass() const
Definition: EvtParticle.cc:127
int getChannel() const
Definition: EvtParticle.cc:123
static bool alwaysRadCorr()
Definition: EvtRadCorr.cc:65
static void doRadCorr(EvtParticle *p)
Definition: EvtRadCorr.cc:52
static double Flat()
Definition: EvtRandom.cc:73
void SetDiag(int n)