BOSS 7.0.8
BESIII Offline Software System
Loading...
Searching...
No Matches
EvtVPHOtoVISRHi Class Reference

#include <EvtVPHOtoVISRHi.hh>

+ Inheritance diagram for EvtVPHOtoVISRHi:

Public Member Functions

 EvtVPHOtoVISRHi ()
 
virtual ~EvtVPHOtoVISRHi ()
 
void getName (std::string &name)
 
EvtDecayBaseclone ()
 
void decay (EvtParticle *p)
 
void init ()
 
void initProbMax ()
 
- 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 29 of file EvtVPHOtoVISRHi.hh.

Constructor & Destructor Documentation

◆ EvtVPHOtoVISRHi()

EvtVPHOtoVISRHi::EvtVPHOtoVISRHi ( )
inline

Definition at line 33 of file EvtVPHOtoVISRHi.hh.

33{}

Referenced by clone().

◆ ~EvtVPHOtoVISRHi()

EvtVPHOtoVISRHi::~EvtVPHOtoVISRHi ( )
virtual

Definition at line 34 of file EvtVPHOtoVISRHi.cc.

34{}

Member Function Documentation

◆ clone()

EvtDecayBase * EvtVPHOtoVISRHi::clone ( )
virtual

Implements EvtDecayBase.

Definition at line 43 of file EvtVPHOtoVISRHi.cc.

43 {
44
45 return new EvtVPHOtoVISRHi;
46
47}

◆ decay()

void EvtVPHOtoVISRHi::decay ( EvtParticle p)
virtual

Implements EvtDecayBase.

Definition at line 69 of file EvtVPHOtoVISRHi.cc.

69 {
70 //take photon along z-axis, either forward or backward.
71 //Implement this as generating the photon momentum along
72 //the z-axis uniformly
73 double power=1;
74 if (getNArg()==1) power=getArg(0);
75 // define particle names
76 static EvtId D0=EvtPDL::getId("D0");
77 static EvtId D0B=EvtPDL::getId("anti-D0");
78 static EvtId DP=EvtPDL::getId("D+");
79 static EvtId DM=EvtPDL::getId("D-");
80 static EvtId DSM=EvtPDL::getId("D_s-");
81 static EvtId DSP=EvtPDL::getId("D_s+");
82 static EvtId DSMS=EvtPDL::getId("D_s*-");
83 static EvtId DSPS=EvtPDL::getId("D_s*+");
84 static EvtId D0S=EvtPDL::getId("D*0");
85 static EvtId D0BS=EvtPDL::getId("anti-D*0");
86 static EvtId DPS=EvtPDL::getId("D*+");
87 static EvtId DMS=EvtPDL::getId("D*-");
88 // setup some parameters
89 double w=p->mass();
90 double s=w*w;
91 double L=2.0*log(w/0.000511);
92 double alpha=1/137.0;
93 double beta=(L-1)*2.0*alpha/EvtConst::pi;
94 // make sure only 2 or 3 body are present
95 assert (p->getDaug(0)->getNDaug() == 2 || p->getDaug(0)->getNDaug() == 3);
96
97 // determine minimum rest mass of parent
98 double md1 = EvtPDL::getMeanMass(p->getDaug(0)->getDaug(0)->getId());
99 double md2 = EvtPDL::getMeanMass(p->getDaug(0)->getDaug(1)->getId());
100 double minResMass = md1+md2;
101 if (p->getDaug(0)->getNDaug() == 3) {
102 double md3 = EvtPDL::getMeanMass(p->getDaug(0)->getDaug(2)->getId());
103 minResMass = minResMass + md3;
104 }
105
106 // calculate the maximum energy of the ISR photon
107 double pgmax=(s-minResMass*minResMass)/(2.0*w);
108 double pgz=0.99*pgmax*exp(log(EvtRandom::Flat(1.0))/(beta*power));
109 if (EvtRandom::Flat(1.0)<0.5) pgz=-pgz;
110
111 double k=fabs(pgz);
112 // print of ISR energy
113 // std::cout << "Energy ISR :"<< k <<std::endl;
114 EvtVector4R p4g(k,0.0,0.0,pgz);
115
116 EvtVector4R p4res=p->getP4Restframe()-p4g;
117
118 double mres=p4res.mass();
119
120 // set masses
121 p->getDaug(0)->init(getDaug(0),p4res);
122 p->getDaug(1)->init(getDaug(1),p4g);
123
124
125 // determine XS - langbw
126 // very crude way of determining XS just a simple straight line Approx.
127 // this was determined by eye.
128 // lots of cout statements to make plots to check that things are working as expected
129 double sigma=9.0;
130 if (mres<=3.9) sigma = 0.00001;
131
132 bool sigmacomputed(false);
133
134 // DETERMINE XS FOR D*D*
135 if (p->getDaug(0)->getNDaug() == 2
136 &&((p->getDaug(0)->getDaug(0)->getId()==D0S
137 && p->getDaug(0)->getDaug(1)->getId()==D0BS)
138 ||(p->getDaug(0)->getDaug(0)->getId()==DPS
139 && p->getDaug(0)->getDaug(1)->getId()==DMS))){
140 if(mres>4.18) {
141 sigma*=5./9.*(1.-1.*sqrt((4.18-mres)*(4.18-mres))/(4.3-4.18));
142 }
143 else if(mres>4.07 && mres<=4.18) {
144 sigma*=5./9.;
145 }
146 else if (mres<=4.07&&mres>4.03)
147 {
148 sigma*=(5./9. - 1.5/9.*sqrt((4.07-mres)*(4.07-mres))/(4.07-4.03));
149 }
150 else if (mres<=4.03&& mres>=4.013)
151 {
152 sigma*=(3.5/9. - 3.5/9.*sqrt((4.03-mres)*(4.03-mres))/(4.03-4.013));
153 }
154 else{
155 sigma=0.00001;
156 }
157 sigmacomputed = true;
158// std::cout << "DSDSXS "<<sigma<< " " << mres<<std::endl;
159 }
160
161 // DETERMINE XS FOR D*D
162 if(p->getDaug(0)->getNDaug() == 2 && ((p->getDaug(0)->getDaug(0)->getId()==D0S
163 && p->getDaug(0)->getDaug(1)->getId()==D0B)
164 ||(p->getDaug(0)->getDaug(0)->getId()==DPS
165 && p->getDaug(0)->getDaug(1)->getId()==DM)
166 ||(p->getDaug(0)->getDaug(0)->getId()==D0BS
167 && p->getDaug(0)->getDaug(1)->getId()==D0)
168 ||(p->getDaug(0)->getDaug(0)->getId()==DMS
169 && p->getDaug(0)->getDaug(1)->getId()==DP)) )
170 {
171 if(mres>=4.2){
172 sigma*=1.5/9.;
173 }
174 else if( mres>4.06 && mres<4.2){
175 sigma*=((1.5/9.+2.5/9.*sqrt((4.2-mres)*(4.2-mres))/(4.2-4.06)));
176 }
177 else if(mres>=4.015 && mres<4.06){
178 sigma*=((4./9.+3./9.*sqrt((4.06-mres)*(4.06-mres))/(4.06-4.015)));
179 }
180 else if (mres<4.015 && mres>=3.9){
181 sigma*=((7./9.-7/9.*sqrt((4.015-mres)*(4.015-mres))/(4.015-3.9)));
182 }
183 else {
184 sigma = 0.00001;
185 }
186 sigmacomputed = true;
187// std::cout << "DSDXS "<<sigma<< " " << mres<<std::endl;
188 }
189
190 // DETERMINE XS FOR Ds*Ds*
191 if (((p->getDaug(0)->getDaug(0)->getId()==DSPS && p->getDaug(0)->getDaug(1)->getId()==DSMS)))
192 {
193 if(mres>(2.112+2.112)){
194 sigma=0.4;
195 }
196 else {
197// sigma=0.4;
198// sigma = 0 surely below Ds*Ds* threshold? - ponyisi
199 sigma=0.00001;
200 }
201 sigmacomputed = true;
202// std::cout << "DsSDsSXS "<<sigma<< " " << mres<<std::endl;
203 }
204
205 // DETERMINE XS FOR Ds*Ds
206 if (p->getDaug(0)->getNDaug() == 2 && ((p->getDaug(0)->getDaug(0)->getId()==DSPS
207 && p->getDaug(0)->getDaug(1)->getId()==DSM)
208 || (p->getDaug(0)->getDaug(0)->getId()==DSMS
209 && p->getDaug(0)->getDaug(1)->getId()==DSP)))
210 {
211 if(mres>4.26){
212 sigma=0.05;
213 }
214 else if (mres>4.18 && mres<=4.26){
215 sigma*=1./9.*(0.05+0.95*sqrt((4.26-mres)*(4.26-mres))/(4.26-4.18));
216 }
217 else if (mres>4.16 && mres<=4.18){
218 sigma*=1/9.;
219 }
220 else if (mres<=4.16 && mres>4.08){
221 sigma*=1/9.*(1-sqrt((4.16-mres)*(4.16-mres))/(4.16-4.08));
222 }
223 else if (mres<=(4.08)){
224 sigma=0.00001;
225 }
226 sigmacomputed = true;
227// std::cout << "DsSDsXS "<<sigma<< " " << mres<<std::endl;
228 }
229
230 // DETERMINE XS FOR DD
231 if (p->getDaug(0)->getNDaug() == 2 && ((p->getDaug(0)->getDaug(0)->getId()==D0
232 && p->getDaug(0)->getDaug(1)->getId()==D0B)
233 ||(p->getDaug(0)->getDaug(0)->getId()==DP
234 && p->getDaug(0)->getDaug(1)->getId()==DM))){
235 sigma*=0.4/9.;
236 sigmacomputed = true;
237// std::cout << "DDXS "<<sigma<< " " << mres<<std::endl;
238 }
239
240 // DETERMINE XS FOR DsDs
241 if (p->getDaug(0)->getNDaug() == 2 && ((p->getDaug(0)->getDaug(0)->getId()==DSP && p->getDaug(0)->getDaug(1)->getId()==DSM))){
242 sigma*=0.2/9.;
243 sigmacomputed = true;
244// std::cout << "DsDsXS "<<sigma<< " " << mres<<std::endl;
245 }
246
247 // DETERMINE XS FOR MULTIBODY
248 if (p->getDaug(0)->getNDaug() == 3){
249 if(mres>4.03){
250 sigma*=0.5/9.;
251 }
252 else {
253 sigma=0.00001;
254 }
255 sigmacomputed = true;
256// std::cout << "DSDpiXS "<<sigma<< " " << mres<<std::endl;
257 }
258
259 if (! sigmacomputed) {
260 report(ERROR,"EvtGen") << "VPHOTOVISRHI: This model requires daughters to be listed in a particular order." << endl
261 << "The following are acceptable:" << endl
262 << "D0 anti-D0" << endl
263 << "D+ D-" << endl
264 << "D*0 anti-D0" << endl
265 << "anti-D*0 D0" << endl
266 << "D*+ D-" << endl
267 << "D*- D+" << endl
268 << "D*0 anti-D*0" << endl
269 << "D*+ D*-" << endl
270 << "D_s+ D_s-" << endl
271 << "D_s*+ D_s-" << endl
272 << "D_s*- D_s+" << endl
273 << "D_s*+ D_s*-" << endl
274 << "(D* D pi can be in any order)" << endl
275 << "Aborting..." << endl;
276 assert(0);
277 }
278
279 if(sigma<0) sigma = 0.0;
280
281// static double sigmax=sigma;
282// if (sigma>sigmax){
283// sigmax=sigma;
284// }
285
286 static int count=0;
287
288 count++;
289
290// if (count%10000==0){
291// std::cout << "sigma :"<<sigma<<std::endl;
292// std::cout << "sigmax:"<<sigmax<<std::endl;
293// }
294
295 double norm=sqrt(sigma);
296
297// EvtParticle* d=p->getDaug(0);
298
299
300 vertex(0,0,0,norm*p->eps(0)*p->epsParent(0).conj());
301 vertex(1,0,0,norm*p->eps(1)*p->epsParent(0).conj());
302 vertex(2,0,0,norm*p->eps(2)*p->epsParent(0).conj());
303
304 vertex(0,1,0,norm*p->eps(0)*p->epsParent(1).conj());
305 vertex(1,1,0,norm*p->eps(1)*p->epsParent(1).conj());
306 vertex(2,1,0,norm*p->eps(2)*p->epsParent(1).conj());
307
308 vertex(0,2,0,norm*p->eps(0)*p->epsParent(2).conj());
309 vertex(1,2,0,norm*p->eps(1)*p->epsParent(2).conj());
310 vertex(2,2,0,norm*p->eps(2)*p->epsParent(2).conj());
311
312 vertex(0,0,1,norm*p->eps(0)*p->epsParent(0).conj());
313 vertex(1,0,1,norm*p->eps(1)*p->epsParent(0).conj());
314 vertex(2,0,1,norm*p->eps(2)*p->epsParent(0).conj());
315
316 vertex(0,1,1,norm*p->eps(0)*p->epsParent(1).conj());
317 vertex(1,1,1,norm*p->eps(1)*p->epsParent(1).conj());
318 vertex(2,1,1,norm*p->eps(2)*p->epsParent(1).conj());
319
320 vertex(0,2,1,norm*p->eps(0)*p->epsParent(2).conj());
321 vertex(1,2,1,norm*p->eps(1)*p->epsParent(2).conj());
322 vertex(2,2,1,norm*p->eps(2)*p->epsParent(2).conj());
323
324 return;
325}
TTree * sigma
EvtComplex exp(const EvtComplex &c)
Definition: EvtComplex.hh:252
DOUBLE_PRECISION count[3]
double w
ostream & report(Severity severity, const char *facility)
Definition: EvtReport.cc:36
@ ERROR
Definition: EvtReport.hh:49
const double alpha
XmlRpcServer s
Definition: HelloServer.cpp:11
static const double pi
Definition: EvtConst.hh:28
void vertex(const EvtComplex &amp)
Definition: EvtDecayAmp.hh:37
double getArg(int j)
EvtId getDaug(int i)
Definition: EvtDecayBase.hh:66
Definition: EvtId.hh:27
static double getMeanMass(EvtId i)
Definition: EvtPDL.hh:45
static EvtId getId(const std::string &name)
Definition: EvtPDL.cc:287
virtual EvtVector4C epsParent(int i) const
Definition: EvtParticle.cc:565
virtual void init(EvtId part_n, const EvtVector4R &p4)=0
EvtId getId() const
Definition: EvtParticle.cc:113
EvtVector4R getP4Restframe()
Definition: EvtParticle.cc:700
int getNDaug() const
Definition: EvtParticle.cc:125
EvtParticle * getDaug(int i)
Definition: EvtParticle.cc:85
double mass() const
Definition: EvtParticle.cc:127
virtual EvtVector4C eps(int i) const
Definition: EvtParticle.cc:576
static double Flat()
Definition: EvtRandom.cc:74
EvtVector4C conj() const
Definition: EvtVector4C.hh:206
double mass() const
Definition: EvtVector4R.cc:39

◆ getName()

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

Implements EvtDecayBase.

Definition at line 36 of file EvtVPHOtoVISRHi.cc.

36 {
37
38 model_name="VPHOTOVISRHI";
39
40}

◆ init()

void EvtVPHOtoVISRHi::init ( )
virtual

Reimplemented from EvtDecayBase.

Definition at line 49 of file EvtVPHOtoVISRHi.cc.

49 {
50
51 // check that there are 0 or 1 arguments
52 checkNArg(0,1);
53
54 // check that there are 2 daughters
55 checkNDaug(2);
56
57 // check the parent and daughter spins
61}
void checkSpinDaughter(int d1, EvtSpinType::spintype sp)
void checkSpinParent(EvtSpinType::spintype sp)
void checkNDaug(int d1, int d2=-1)
void checkNArg(int a1, int a2=-1, int a3=-1, int a4=-1)

◆ initProbMax()

void EvtVPHOtoVISRHi::initProbMax ( )
virtual

Reimplemented from EvtDecayBase.

Definition at line 63 of file EvtVPHOtoVISRHi.cc.

63 {
64
65 setProbMax(20.0);
66
67}
void setProbMax(double prbmx)

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