BOSS
7.0.2
BESIII Offline Software System
Loading...
Searching...
No Matches
EvtSingleParticle.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: EvtSingleParticle.cc
12
//
13
// Description: Special model to generate single particles.
14
//
15
// Modification history:
16
//
17
// RYD Febuary 17,1998 Module created
18
//
19
//------------------------------------------------------------------------
20
//
21
#include "
EvtGenBase/EvtPatches.hh
"
22
#include <stdlib.h>
23
#include "
EvtGenBase/EvtParticle.hh
"
24
#include "
EvtGenBase/EvtRandom.hh
"
25
#include "
EvtGenBase/EvtPDL.hh
"
26
#include "
EvtGenModels/EvtSingleParticle.hh
"
27
#include "
EvtGenBase/EvtReport.hh
"
28
#include <string>
29
#include "
EvtGenBase/EvtConst.hh
"
30
using
std::endl;
31
32
EvtSingleParticle::~EvtSingleParticle
() {}
33
34
void
EvtSingleParticle::getName
(std::string& model_name){
35
36
model_name=
"SINGLE"
;
37
38
}
39
40
EvtDecayBase
*
EvtSingleParticle::clone
(){
41
42
return
new
EvtSingleParticle
();
43
44
}
45
46
void
EvtSingleParticle::init
(){
47
48
49
//turn off checks for charge conservation
50
disableCheckQ
();
51
52
if
((
getNArg
()==6)||(
getNArg
()==4)||(
getNArg
()==2)) {
53
54
if
(
getNArg
()==6){
55
//copy the arguments into eaiser to remember names!
56
57
pmin=
getArg
(0);
58
pmax=
getArg
(1);
59
60
cthetamin=
getArg
(2);
61
cthetamax=
getArg
(3);
62
63
phimin=
getArg
(4);
64
phimax=
getArg
(5);
65
66
}
67
68
if
(
getNArg
()==4){
69
//copy the arguments into eaiser to remember names!
70
71
pmin=
getArg
(0);
72
pmax=
getArg
(1);
73
74
cthetamin=
getArg
(2);
75
cthetamax=
getArg
(3);
76
77
phimin=0.0;
78
phimax=
EvtConst::twoPi
;
79
80
}
81
82
if
(
getNArg
()==2){
83
//copy the arguments into eaiser to remember names!
84
85
pmin=
getArg
(0);
86
pmax=
getArg
(1);
87
88
cthetamin=-1.0;
89
cthetamax=1.0;
90
91
phimin=0.0;
92
phimax=
EvtConst::twoPi
;
93
94
}
95
96
97
}
else
{
98
99
report
(
ERROR
,
"EvtGen"
) <<
"EvtSingleParticle generator expected "
100
<<
" 6, 4, or 2 arguments but found:"
<<
getNArg
()<<endl;
101
report
(
ERROR
,
"EvtGen"
) <<
"Will terminate execution!"
<<endl;
102
::abort();
103
104
}
105
106
107
report
(
INFO
,
"EvtGen"
) <<
"The single particle generator has been configured:"
108
<<endl;
109
report
(
INFO
,
"EvtGen"
) << pmax <<
" > p > "
<< pmin <<endl;
110
report
(
INFO
,
"EvtGen"
) << cthetamax <<
" > costheta > "
<< cthetamin <<endl;
111
report
(
INFO
,
"EvtGen"
) << phimax <<
" > phi > "
<< phimin <<endl;
112
113
}
114
115
void
EvtSingleParticle::decay
(
EvtParticle
*p ){
116
117
EvtParticle
*d;
118
EvtVector4R
p4;
119
120
double
mass
=
EvtPDL::getMass
(
getDaug
(0));
121
122
p->
makeDaughters
(
getNDaug
(),
getDaugs
());
123
d=p->
getDaug
(0);
124
125
//generate flat distribution in p
126
//we are now in the parents restframe! This means the
127
//restframe of the e+e- collison.
128
double
pcm;
129
if
(pmin==pmax) pcm=pmin;
//pingrg, 2008-04-15
130
if
(pmin< pmax) pcm=
EvtRandom::Flat
(pmin,pmax);
131
132
//generate flat distribution in phi.
133
double
phi;
134
if
(phimin==phimax) phi=phimin;
//pingrg 2008-10-22
135
else
phi=
EvtRandom::Flat
(phimin,phimax);
136
137
double
cthetalab;
138
139
do
{
140
//generate flat distribution in costheta
141
double
ctheta;
142
if
(cthetamin==cthetamax) ctheta=cthetamin;
143
else
ctheta=
EvtRandom::Flat
(cthetamin,cthetamax);
144
double
stheta=sqrt(1.0-ctheta*ctheta);
145
p4.
set
(sqrt(
mass
*
mass
+pcm*pcm),pcm*
cos
(phi)*stheta,
146
pcm*
sin
(phi)*stheta,pcm*ctheta);
147
148
d->
init
(
getDaug
(0),p4);
149
150
//get 4 vector in the lab frame!
151
EvtVector4R
p4lab=d->
getP4Lab
();
152
cthetalab=p4lab.
get
(3)/p4lab.
d3mag
();
153
}
while
(cthetalab>cthetamax||cthetalab<cthetamin);
154
155
return ;
156
}
157
158
159
mass
double mass
Definition:
CosmicGenerator.cxx:138
EvtConst.hh
EvtPDL.hh
EvtParticle.hh
EvtPatches.hh
EvtRandom.hh
report
ostream & report(Severity severity, const char *facility)
Definition:
EvtReport.cc:36
EvtReport.hh
ERROR
@ ERROR
Definition:
EvtReport.hh:49
INFO
@ INFO
Definition:
EvtReport.hh:52
EvtSingleParticle.hh
sin
double sin(const BesAngle a)
Definition:
InstallArea/include/MdcGeom/MdcGeom/BesAngle.h:210
cos
double cos(const BesAngle a)
Definition:
InstallArea/include/MdcGeom/MdcGeom/BesAngle.h:213
EvtConst::twoPi
static const double twoPi
Definition:
EvtConst.hh:29
EvtDecayBase
Definition:
EvtDecayBase.hh:33
EvtDecayBase::getArg
double getArg(int j)
Definition:
EvtDecayBase.cc:564
EvtDecayBase::disableCheckQ
void disableCheckQ()
Definition:
EvtDecayBase.hh:62
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
EvtPDL::getMass
static double getMass(EvtId i)
Definition:
EvtPDL.hh:46
EvtParticle
Definition:
EvtParticle.hh:42
EvtParticle::makeDaughters
void makeDaughters(int ndaug, EvtId *id)
Definition:
EvtParticle.cc:1177
EvtParticle::init
virtual void init(EvtId part_n, const EvtVector4R &p4)=0
EvtParticle::getP4Lab
EvtVector4R getP4Lab()
Definition:
EvtParticle.cc:685
EvtParticle::getDaug
EvtParticle * getDaug(int i)
Definition:
EvtParticle.cc:85
EvtRandom::Flat
static double Flat()
Definition:
EvtRandom.cc:73
EvtSingleParticle::init
void init()
Definition:
EvtSingleParticle.cc:46
EvtSingleParticle::clone
EvtDecayBase * clone()
Definition:
EvtSingleParticle.cc:40
EvtSingleParticle::~EvtSingleParticle
virtual ~EvtSingleParticle()
Definition:
EvtSingleParticle.cc:32
EvtSingleParticle::EvtSingleParticle
EvtSingleParticle()
Definition:
EvtSingleParticle.hh:33
EvtSingleParticle::decay
void decay(EvtParticle *p)
Definition:
EvtSingleParticle.cc:115
EvtSingleParticle::getName
void getName(std::string &name)
Definition:
EvtSingleParticle.cc:34
EvtVector4R
Definition:
EvtVector4R.hh:29
EvtVector4R::get
double get(int i) const
Definition:
EvtVector4R.hh:179
EvtVector4R::d3mag
double d3mag() const
Definition:
EvtVector4R.cc:186
EvtVector4R::set
void set(int i, double d)
Definition:
EvtVector4R.hh:183
source
Generator
BesEvtGen
BesEvtGen-00-03-58
src
EvtGen
EvtGenModels
EvtSingleParticle.cc
Generated by
1.9.6