BOSS 7.0.9
BESIII Offline Software System
Loading...
Searching...
No Matches
BesEvtGen-00-04-08/src/EvtGen/EvtGenModels/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"
30using std::endl;
31
33
34void EvtSingleParticle::getName(std::string& model_name){
35
36 model_name="SINGLE";
37
38}
39
41
42 return new EvtSingleParticle();
43
44}
45
47
48
49 //turn off checks for charge conservation
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
116
117 EvtParticle *d;
118 EvtVector4R p4;
119
120 double mass=EvtPDL::getMass(getDaug(0));
121
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
double sin(const BesAngle a)
Definition: BesAngle.h:210
double cos(const BesAngle a)
Definition: BesAngle.h:213
double mass
ostream & report(Severity severity, const char *facility)
virtual void init(EvtId part_n, const EvtVector4R &p4)=0