BOSS 7.0.5
BESIII Offline Software System
Loading...
Searching...
No Matches
EvtEtap2gpipiB.cc
Go to the documentation of this file.
1//--------------------------------------------------------------------------
2//
3// Environment:
4// This software is part of models developed at BES collaboration
5// based on the EvtGen framework. If you use all or part
6// of it, please give an appropriate acknowledgement.
7//
8// Copyright Information: See EvtGen/BesCopyright
9// Copyright (A) 2006 Ping Rong-Gang @IHEP
10//
11// Module: EvtEtap2gpipiB.cc
12//
13// Description: Model provided by user, see the mannual
14//
15// Modification history:
16//
17// Ping R.-G. December, 2006 Module created
18// qinlq Sep., 2011 Module created
19//
20//------------------------------------------------------------------------
21
23#include <stdlib.h>
26#include "EvtGenBase/EvtPDL.hh"
42#include <string>
43using namespace std; //::endl;
44
46
47void EvtEtap2gpipiB::getName(std::string& model_name){
48
49 model_name="Etap2gpipiB";
50
51}
52
54
55 return new EvtEtap2gpipiB;
56
57}
58
59
61
62// check that there are 1 arguments:angular distribution parameter
63 checkNArg(1);
64 checkNDaug(3);
66}
68 noProbMax();
69}
70
71
72int EvtEtap2gpipiB::nrun=1;
73double EvtEtap2gpipiB::max_amps=0.0;
74
76
77double amps,SamAmps,rd1;
78
79
80// calculated the max amplitude square in 20000 events, is it enough larger?
81
82 if(nrun==1){
83 int ir,nd;
84 for(ir=0;ir<=2000000;ir++){
85 // for(ir=0;ir<=20000;ir++){
86 loop0:
88 int nd=p->getNDaug(),i;
89 _nd=nd;
90 for(i=0;i<=nd-1;i++){
91 _p4Lab[i]=p->getDaug(i)->getP4Lab();
92 _p4CM[i]=p->getDaug(i)->getP4();
93 }
94 amps=AmplitudeSquare();
95 if(amps<0) goto loop0;
96 if(amps>max_amps) max_amps=amps*1.01;
97
98 //cout<<"amps= "<<amps<<endl;
99 //cout<<"max_amps= "<<max_amps<<endl;
100
101 if(nrun<2){//check decay card
102 EvtId pid0= p->getId();//etaprime
103 EvtId pid1= p->getDaug(0)->getId();//pi+
104 EvtId pid2= p->getDaug(1)->getId();//pi-
105 EvtId pid3= p->getDaug(2)->getId();//gamma
106 if(pid0!= EvtPDL::getId("eta'")) { std::cout<<"Etap2gpipiB need specify the parent as etaprime"<<std::endl;abort();}
107 if(pid3!= EvtPDL::getId("gamma")) { std::cout<<"Etap2gpipiB need specify the daughters as pi+ pi- gamma"<<std::endl;abort();}
108 }
109 nrun++;
110 }
111 }
112
113//cout<<"max_amps= "<<max_amps<<endl;
114
115
116if(max_amps==0.0) {report(ERROR,"EvtGen")<<"The decay amplitude square should be positive number"<<endl;abort();}
117
118//cout<<"max_amp="<<max_amps<<endl;
119
120loop:
122 int i;
123 for(i=0;i<=p->getNDaug()-1;i++){
124 _p4Lab[i]=p->getDaug(i)->getP4Lab();
125 _p4CM[i]=p->getDaug(i)->getP4();
126 }
127// Put phase space results into the daughters.
128 amps=AmplitudeSquare();
129 if(amps < 0) goto loop;
130 SamAmps=amps/max_amps;
131 rd1=EvtRandom::Flat(0.0, 1.0);
132 if(rd1>=SamAmps) goto loop;
133 return ;
134}
135
136
ostream & report(Severity severity, const char *facility)
Definition: EvtReport.cc:36
@ ERROR
Definition: EvtReport.hh:49
void noProbMax()
EvtId getParentId()
Definition: EvtDecayBase.hh:60
void checkNDaug(int d1, int d2=-1)
EvtId * getDaugs()
Definition: EvtDecayBase.hh:65
void checkNArg(int a1, int a2=-1, int a3=-1, int a4=-1)
virtual ~EvtEtap2gpipiB()
void getName(std::string &name)
void decay(EvtParticle *p)
EvtDecayBase * clone()
Definition: EvtId.hh:27
static EvtSpinType::spintype getSpinType(EvtId i)
Definition: EvtPDL.hh:61
static EvtId getId(const std::string &name)
Definition: EvtPDL.cc:287
EvtVector4R getP4Lab()
Definition: EvtParticle.cc:685
EvtId getId() const
Definition: EvtParticle.cc:113
const EvtVector4R & getP4() const
Definition: EvtParticle.cc:121
int getNDaug() const
Definition: EvtParticle.cc:125
EvtParticle * getDaug(int i)
Definition: EvtParticle.cc:85
double initializePhaseSpace(int numdaughter, EvtId *daughters, double poleSize=-1., int whichTwo1=0, int whichTwo2=1)
static double Flat()
Definition: EvtRandom.cc:74