BOSS
7.1.0
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
delta
const double delta
Definition:
CheckRung/check/gainVsDoca.cxx:32
abs
#define abs(x)
Definition:
Eepipi/Eepipi-00-01-00/src/ee2eepp/basesv5.1/f2c.h:151
EvtComplex.hh
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-08/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:608
EvtParticle::getDaug
EvtParticle * getDaug(int i)
Definition:
EvtParticle.cc:84
EvtParticle::sp
virtual EvtDiracSpinor sp(int) const
Definition:
EvtParticle.cc:621
EvtParticle::initializePhaseSpace
double initializePhaseSpace(int numdaughter, EvtId *daughters, double poleSize=-1., int whichTwo1=0, int whichTwo2=1)
Definition:
EvtParticle.cc:1070
EvtSpinType::getSpin2
static int getSpin2(spintype stype)
Definition:
EvtSpinType.hh:34
m1
double * m1
Definition:
qcdloop1.h:75
m2
double double * m2
Definition:
qcdloop1.h:75
source
Generator
BesEvtGen
BesEvtGen-00-04-26
src
EvtGen
EvtGenModels
EvtHypNonLepton.cc
Generated by
1.9.6