CGEM BOSS
6.6.5.i
BESIII Offline Software System
Loading...
Searching...
No Matches
EvtHypNonLepton.cc
Go to the documentation of this file.
1
//-----------------------------------------------------------------------------------------------
2
//
3
// Module: EvtHypNonLepton.cpp
4
//
5
// Desription: Routine to implement Hyperon(s=1/2) -> Baryon(s=1/2) + Scalar decays accroding to
6
// Review Of Particle Physics 2004, Phys.Lett.B, Vol.592, p.864
7
//
8
// Modification history:
9
//
10
// 09/02/2009 PR Corrected Delta sign
11
// 20/02/2005 PR Module created according to PHSP and Lb2Lll model
12
//
13
//-----------------------------------------------------------------------------------------------
14
15
#ifdef WIN32
16
#pragma warning( disable : 4786 )
17
// Disable anoying warning about symbol size
18
#endif
19
20
#include "
EvtGenModels/EvtHypNonLepton.hh
"
21
#include "
EvtGenBase/EvtParticle.hh
"
22
#include "
EvtGenBase/EvtPDL.hh
"
23
#include "
EvtGenBase/EvtDiracSpinor.hh
"
24
#include "
EvtGenBase/EvtTensor4C.hh
"
25
#include "
EvtGenBase/EvtVector4C.hh
"
26
#include "
EvtGenBase/EvtVector4R.hh
"
27
#include "
EvtGenBase/EvtComplex.hh
"
28
#include "
EvtGenBase/EvtGammaMatrix.hh
"
29
30
31
EvtHypNonLepton::~EvtHypNonLepton
() {}
32
33
EvtDecayBase
*
EvtHypNonLepton::clone
(){
34
return
new
EvtHypNonLepton
;
35
}
36
37
void
EvtHypNonLepton::getName
(std::string& model_name){
38
model_name=
"HypNonLepton"
;
39
}
40
41
void
EvtHypNonLepton::init
(){
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
57
if
(
EvtSpinType::getSpin2
(
EvtPDL::getSpinType
(
getParentId
()))!=1){
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
}
61
if
(
EvtSpinType::getSpin2
(
EvtPDL::getSpinType
(
getDaug
(0)))!=1){
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
}
65
if
(
EvtSpinType::getSpin2
(
EvtPDL::getSpinType
(
getDaug
(1)))!=0){
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
80
M =
EvtPDL::getMass
(
getParentId
());
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
}
99
100
void
EvtHypNonLepton::initProbMax
(){
101
102
double
maxProb,m1,m2,M,p;
103
104
M=
EvtPDL::getMass
(
getParentId
());
105
m1=
EvtPDL::getMass
(
getDaug
(0));
106
m2=
EvtPDL::getMass
(
getDaug
(1));
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
}
121
122
void
EvtHypNonLepton::decay
(
EvtParticle
* parent){
123
124
parent->
initializePhaseSpace
(
getNDaug
(),
getDaugs
());
125
calcAmp
(&
_amp2
,parent);
126
127
}
128
129
void
EvtHypNonLepton::calcAmp
(
EvtAmp
*amp,
EvtParticle
*parent){
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
}
sin
double sin(const BesAngle a)
Definition
BesAngle.h:210
cos
double cos(const BesAngle a)
Definition
BesAngle.h:213
EvtComplex.hh
abs
double abs(const EvtComplex &c)
Definition
EvtComplex.hh:212
EvtLeptonSCurrent
EvtComplex EvtLeptonSCurrent(const EvtDiracSpinor &d, const EvtDiracSpinor &dp)
Definition
EvtDiracSpinor.cc:260
EvtLeptonPCurrent
EvtComplex EvtLeptonPCurrent(const EvtDiracSpinor &d, const EvtDiracSpinor &dp)
Definition
EvtDiracSpinor.cc:272
EvtDiracSpinor.hh
EvtGammaMatrix.hh
EvtHypNonLepton.hh
EvtPDL.hh
EvtParticle.hh
report
ostream & report(Severity severity, const char *facility)
Definition
EvtReport.cc:36
DEBUG
@ DEBUG
Definition
EvtReport.hh:53
ERROR
@ ERROR
Definition
EvtReport.hh:49
INFO
@ INFO
Definition
EvtReport.hh:52
EvtTensor4C.hh
EvtVector4C.hh
EvtVector4R.hh
Matrix
CLHEP::HepMatrix Matrix
Definition
Reconstruction/TrackUtil/TrackUtil-00-00-12/TrackUtil/Helix.h:44
EvtAmp
Definition
EvtAmp.hh:30
EvtAmp::vertex
void vertex(const EvtComplex &)
Definition
EvtAmp.cc:477
EvtComplex
Definition
EvtComplex.hh:28
EvtConst::pi
static const double pi
Definition
EvtConst.hh:28
EvtDecayAmp::_amp2
EvtAmp _amp2
Definition
EvtDecayAmp.hh:66
EvtDecayBase
Definition
EvtDecayBase.hh:33
EvtDecayBase::getArg
double getArg(int j)
Definition
EvtDecayBase.cc:564
EvtDecayBase::setProbMax
void setProbMax(double prbmx)
Definition
EvtDecayBase.cc:297
EvtDecayBase::getParentId
EvtId getParentId()
Definition
EvtDecayBase.hh:60
EvtDecayBase::getNDaug
int getNDaug()
Definition
EvtDecayBase.hh:64
EvtDecayBase::getNArg
int getNArg()
Definition
EvtDecayBase.hh:67
EvtDecayBase::getDaugs
EvtId * getDaugs()
Definition
EvtDecayBase.hh:65
EvtDecayBase::getDaug
EvtId getDaug(int i)
Definition
EvtDecayBase.hh:66
EvtHypNonLepton::EvtHypNonLepton
EvtHypNonLepton()
Definition
EvtHypNonLepton.hh:24
EvtHypNonLepton::initProbMax
void initProbMax()
Definition
EvtHypNonLepton.cc:100
EvtHypNonLepton::clone
EvtDecayBase * clone()
Definition
EvtHypNonLepton.cc:33
EvtHypNonLepton::getName
void getName(std::string &name)
Definition
EvtHypNonLepton.cc:37
EvtHypNonLepton::calcAmp
void calcAmp(EvtAmp *amp, EvtParticle *parent)
Definition
EvtHypNonLepton.cc:129
EvtHypNonLepton::init
void init()
Definition
EvtHypNonLepton.cc:41
EvtHypNonLepton::decay
void decay(EvtParticle *p)
Definition
EvtHypNonLepton.cc:122
EvtHypNonLepton::~EvtHypNonLepton
virtual ~EvtHypNonLepton()
Definition
EvtHypNonLepton.cc:31
EvtPDL::getSpinType
static EvtSpinType::spintype getSpinType(EvtId i)
Definition
EvtPDL.hh:61
EvtPDL::getMass
static double getMass(EvtId i)
Definition
EvtPDL.hh:46
EvtParticle
Definition
EvtParticle.hh:42
EvtParticle::spParent
virtual EvtDiracSpinor spParent(int) const
Definition
EvtParticle.cc:607
EvtParticle::getDaug
EvtParticle * getDaug(int i)
Definition
EvtParticle.cc:85
EvtParticle::sp
virtual EvtDiracSpinor sp(int) const
Definition
EvtParticle.cc:620
EvtParticle::initializePhaseSpace
double initializePhaseSpace(int numdaughter, EvtId *daughters, double poleSize=-1., int whichTwo1=0, int whichTwo2=1)
Definition
EvtParticle.cc:1069
EvtSpinType::getSpin2
static int getSpin2(spintype stype)
Definition
EvtSpinType.hh:34
6.6.5.i
Generator
BesEvtGen
BesEvtGen-00-01-96-slc6tag
src
EvtGen
EvtGenModels
EvtHypNonLepton.cc
Generated by
1.12.0