BOSS 7.0.1
BESIII Offline Software System
Loading...
Searching...
No Matches
EvtHypNonLepton Class Reference

#include <EvtHypNonLepton.hh>

+ Inheritance diagram for EvtHypNonLepton:

Public Member Functions

 EvtHypNonLepton ()
 
virtual ~EvtHypNonLepton ()
 
void getName (std::string &name)
 
EvtDecayBaseclone ()
 
void decay (EvtParticle *p)
 
void init ()
 
void initProbMax ()
 
void calcAmp (EvtAmp *amp, EvtParticle *parent)
 
- Public Member Functions inherited from EvtDecayAmp
void makeDecay (EvtParticle *p)
 
void setWeight (double weight)
 
void vertex (const EvtComplex &amp)
 
void vertex (int i1, const EvtComplex &amp)
 
void vertex (int i1, int i2, const EvtComplex &amp)
 
void vertex (int i1, int i2, int i3, const EvtComplex &amp)
 
void vertex (int *i1, const EvtComplex &amp)
 
virtual ~EvtDecayAmp ()
 
- Public Member Functions inherited from EvtDecayBase
virtual void getName (std::string &name)=0
 
virtual void decay (EvtParticle *p)=0
 
virtual void makeDecay (EvtParticle *p)=0
 
virtual EvtDecayBaseclone ()=0
 
virtual void init ()
 
virtual void initProbMax ()
 
virtual std::string commandName ()
 
virtual void command (std::string cmd)
 
double getProbMax (double prob)
 
double resetProbMax (double prob)
 
 EvtDecayBase ()
 
virtual ~EvtDecayBase ()
 
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::string * getArgsStr ()
 
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 ()
 

Additional Inherited Members

- Static Public Member Functions inherited from EvtDecayBase
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 inherited from EvtDecayBase
bool daugsDecayedByParentModel ()
 
- Protected Attributes inherited from EvtDecayAmp
EvtAmp _amp2
 
- Protected Attributes inherited from EvtDecayBase
bool _daugsDecayedByParentModel
 

Detailed Description

Definition at line 20 of file EvtHypNonLepton.hh.

Constructor & Destructor Documentation

◆ EvtHypNonLepton()

EvtHypNonLepton::EvtHypNonLepton ( )
inline

Definition at line 24 of file EvtHypNonLepton.hh.

24{}

Referenced by clone().

◆ ~EvtHypNonLepton()

EvtHypNonLepton::~EvtHypNonLepton ( )
virtual

Definition at line 31 of file EvtHypNonLepton.cc.

31{}

Member Function Documentation

◆ calcAmp()

void EvtHypNonLepton::calcAmp ( EvtAmp amp,
EvtParticle parent 
)

Definition at line 129 of file EvtHypNonLepton.cc.

129 {
130
131 static long noTries=0;
132 int i;
133 EvtComplex Matrix[2][2],B_to_A;
134
135 //G_F = 1.16637e-5;
136 //M_pi = 0.13957;
137
138 for(i=0;i<4;i++){
139 //std::cout << "--------------------------------------------------" << std::endl;
140 Matrix[i/2][i%2] = EvtLeptonSCurrent(parent->sp(i/2),parent->getDaug(0)->spParent(i%2));
141 //std::cout << "Matrix = " << Matrix[i/2][i%2] << std::endl;
142 Matrix[i/2][i%2] -= m_B_to_A*EvtLeptonPCurrent(parent->sp(i/2),parent->getDaug(0)->spParent(i%2));
143 //std::cout << "Matrix = " << Matrix[i/2][i%2] << std::endl;
144 //Matrix[i/2][i%2] *= G_F*M_pi*M_pi;
145 //std::cout << "Matrix = " << Matrix[i/2][i%2] << std::endl;
146 //std::cout << "--------------------------------------------------" << std::endl;
147 amp->vertex(i/2,i%2,Matrix[i/2][i%2]);
148 }
149
150 if(m_noTries>0) if(!((++noTries)%m_noTries)) report(DEBUG,"EvtGen") << " EvtHypNonLepton already finished " << noTries << " matrix element calculations" << std::endl;
151}
EvtComplex EvtLeptonSCurrent(const EvtDiracSpinor &d, const EvtDiracSpinor &dp)
EvtComplex EvtLeptonPCurrent(const EvtDiracSpinor &d, const EvtDiracSpinor &dp)
ostream & report(Severity severity, const char *facility)
Definition: EvtReport.cc:36
@ DEBUG
Definition: EvtReport.hh:53
void vertex(const EvtComplex &amp)
Definition: EvtAmp.cc:477
virtual EvtDiracSpinor spParent(int) const
Definition: EvtParticle.cc:609
EvtParticle * getDaug(int i)
Definition: EvtParticle.cc:85
virtual EvtDiracSpinor sp(int) const
Definition: EvtParticle.cc:622

Referenced by decay().

◆ clone()

EvtDecayBase * EvtHypNonLepton::clone ( )
virtual

Implements EvtDecayBase.

Definition at line 33 of file EvtHypNonLepton.cc.

33 {
34 return new EvtHypNonLepton;
35}

◆ decay()

void EvtHypNonLepton::decay ( EvtParticle p)
virtual

Implements EvtDecayBase.

Definition at line 122 of file EvtHypNonLepton.cc.

122 {
123
124 parent->initializePhaseSpace(getNDaug(),getDaugs());
125 calcAmp(&_amp2,parent);
126
127}
EvtAmp _amp2
Definition: EvtDecayAmp.hh:66
EvtId * getDaugs()
Definition: EvtDecayBase.hh:65
void calcAmp(EvtAmp *amp, EvtParticle *parent)

◆ getName()

void EvtHypNonLepton::getName ( std::string &  name)
virtual

Implements EvtDecayBase.

Definition at line 37 of file EvtHypNonLepton.cc.

37 {
38 model_name= "HypNonLepton";
39}

◆ init()

void EvtHypNonLepton::init ( )
virtual

Reimplemented from EvtDecayBase.

Definition at line 41 of file EvtHypNonLepton.cc.

41 {
42
43 if(getNArg()<2 || getNArg()>3){ // alpha phi gamma delta
44 report(ERROR,"EvtGen") << " ERROR: EvtHypNonLepton generator expected 2 or 3 arguments but found: " << getNArg() << std::endl;
45 report(INFO ,"EvtGen") << " 1. Decay asymmetry parameter - alpha" << std::endl;
46 report(INFO ,"EvtGen") << " 2. Parameter phi - in degrees (not radians)" << std::endl;
47 report(INFO ,"EvtGen") << " 3. Note on every x-th decay" << std::endl;
48 ::abort();
49 }
50
51 if(getNDaug()!=2){ // Check that there are 2 daughters only
52 report(ERROR,"EvtGen") << " ERROR: EvtHypNonLepton generator expected 2 daughters but found: " << getNDaug() << std::endl;
53 ::abort();
54 }
55
56 // Check particles spins
58 report(ERROR,"EvtGen") << " ERROR: EvtHypNonLepton generator expected dirac parent particle, but found " << EvtSpinType::getSpin2(EvtPDL::getSpinType(getParentId())) << " spin degrees of freedom" << std::endl;
59 ::abort();
60 }
62 report(ERROR,"EvtGen") << " ERROR: EvtHypNonLepton generator expected the first child to be dirac particle, but found " << EvtSpinType::getSpin2(EvtPDL::getSpinType(getDaug(0))) << " spin degrees of freedom" << std::endl;
63 ::abort();
64 }
66 report(ERROR,"EvtGen") << " ERROR: EvtHypNonLepton generator expected the second child to be scalar particle, but found " << EvtSpinType::getSpin2(EvtPDL::getSpinType(getDaug(1))) << " spin degrees of freedom" << std::endl;
67 ::abort();
68 }
69
70 // Read all parameters
71 m_alpha = getArg(0);
72 m_phi = getArg(1)*EvtConst::pi/180;
73 if(getNArg()==3) m_noTries = static_cast<long>(getArg(2));
74 else m_noTries = 0;
75
76 // calculate additional parameters
77 double p,M,m1,m2;
78 double p_to_s,beta,delta,gamma;
79
81 m1 = EvtPDL::getMass(getDaug(0));
82 m2 = EvtPDL::getMass(getDaug(1));
83
84 if(m1+m2>=M){
85 report(ERROR,"EvtGen") << " ERROR: EvtHypNonLepton found impossible decay: " << M << " --> " << m1 << " + " << m2 << " GeV\n" << std::endl;
86 ::abort();
87 }
88
89 p = sqrt(M*M-(m1+m2)*(m1+m2))*sqrt(M*M-(m1-m2)*(m1-m2))/2./M;
90
91 beta = sqrt(1.-m_alpha*m_alpha)*sin(m_phi);
92 delta = -atan2(beta,m_alpha);
93 gamma = sqrt(1.-m_alpha*m_alpha-beta*beta);
94 p_to_s = sqrt((1.-gamma)/(1.+gamma));
95
96 m_B_to_A = p_to_s*(m1+sqrt(p*p+m1*m1))/p*EvtComplex(cos(delta),sin(delta));
97
98}
@ ERROR
Definition: EvtReport.hh:49
@ INFO
Definition: EvtReport.hh:52
double sin(const BesAngle a)
double cos(const BesAngle a)
static const double pi
Definition: EvtConst.hh:28
double getArg(int j)
EvtId getParentId()
Definition: EvtDecayBase.hh:60
EvtId getDaug(int i)
Definition: EvtDecayBase.hh:66
static EvtSpinType::spintype getSpinType(EvtId i)
Definition: EvtPDL.hh:61
static double getMass(EvtId i)
Definition: EvtPDL.hh:46
static int getSpin2(spintype stype)
Definition: EvtSpinType.hh:34

◆ initProbMax()

void EvtHypNonLepton::initProbMax ( )
virtual

Reimplemented from EvtDecayBase.

Definition at line 100 of file EvtHypNonLepton.cc.

100 {
101
102 double maxProb,m1,m2,M,p;
103
107
108 if(m1+m2>=M){
109 report(ERROR,"EvtGen") << " ERROR: EvtHypNonLepton found impossible decay: " << M << " --> " << m1 << " + " << m2 << " GeV\n" << std::endl;
110 ::abort();
111 }
112
113 p=sqrt(M*M-(m1+m2)*(m1+m2))*sqrt(M*M-(m1-m2)*(m1-m2))/2/M;
114 maxProb=16*M*(sqrt(p*p+m1*m1)+m1+abs(m_B_to_A)*abs(m_B_to_A)*(sqrt(p*p+m1*m1)-m1));
115 //maxProb *= G_F*M_pi*M_pi;
116
117 setProbMax(maxProb);
118 report(INFO,"EvtGen") << " EvtHypNonLepton set up maximum probability to " << maxProb << std::endl;
119
120}
void setProbMax(double prbmx)

The documentation for this class was generated from the following files: