BOSS 7.1.2
BESIII Offline Software System
Loading...
Searching...
No Matches
EvtDToa0enu.cc
Go to the documentation of this file.
1//--------------------------------------------------------------------------
2// Environment:
3// This software is part of models developed at BES collaboration
4// based on the EvtGen framework. If you use all or part
5// of it, please give an appropriate acknowledgement.
6//
7// Copyright Information: See EvtGen/BesCopyright
8// Copyright (A) 2006 Ping Rong-Gang @IHEP
9//
10// Module: EvtDToa0enu.cc
11// the necessary file: EvtDToa0enu.hh
12//
13// Description: D -> a0(980) e+ nu,
14//
15// Modification history:
16//
17// Liaoyuan Dong Thu Sep 29 00:13:16 2022 Module created
18//------------------------------------------------------------------------
22#include "EvtGenBase/EvtPDL.hh"
27#include <stdlib.h>
28
30
31void EvtDToa0enu::getName(std::string& model_name){
32 model_name="DToa0enu";
33}
34
38
40 checkNArg(0);
41 checkNDaug(4);
45
46 mode = 1; // D+
47 ProbMax = 15.85;
48
49 // std::cout << "Initializing EvtDToa0enu (D+ -> a0(980)0 e+ nu_e) ProbMax = " << ProbMax << std::endl;
50
51 double m_Kaon = 0.493677;
52 m2_Kaon = m_Kaon*m_Kaon;
53 double m_K0 = 0.497614;
54 m2_K0 = m_K0*m_K0;
55 double m_eta = 0.547853;
56 m2_eta = m_eta*m_eta;
57 double m_Pion = 0.13957;
58 m2_Pion = m_Pion*m_Pion;
59 double m_Pi0 = 0.1349766;
60 m2_Pi0 = m_Pi0*m_Pi0;
61 m_D0 = 1.86486;
62 m2_D0 = m_D0*m_D0;
63 m_D = 1.86962;
64 m2_D = m_D*m_D;
65
66 ciR = EvtComplex(1.0, 0.0);
67 ciM = EvtComplex(0.0, 1.0);
68
69 ///////////// for D to a0 e nu
70 double mAD0 = 2.42;
71 m2AD0 = mAD0*mAD0;
72 double mAD = 2.42;
73 m2AD = mAD*mAD;
74 double m_a0 = 0.990;
75 m2_a0 = m_a0*m_a0;
76 flatte_g1 = 0.341;
77 flatte_g2 = 0.341*0.892;
78}
79
81 setProbMax(ProbMax);
82}
83
85/*
86 double maxprob = 0.0;
87 for(int ir=0;ir<=60000000;ir++){
88 p->initializePhaseSpace(getNDaug(),getDaugs());
89 EvtVector4R _pi1 = p->getDaug(0)->getP4();
90 EvtVector4R _pi2 = p->getDaug(1)->getP4();
91 EvtVector4R _e = p->getDaug(2)->getP4();
92 EvtVector4R _nu = p->getDaug(3)->getP4();
93
94 int pid = EvtPDL::getStdHep(p->getDaug(2)->getId());
95 int charm;
96 if(pid == 11) charm = -1;
97 else charm = 1;
98 double m2, q2, cosV, cosL, chi;
99 KinVGen(_pi1, _pi2, _e, _nu, charm, m2, q2, cosV, cosL, chi);
100 double _prob = calPDF(m2, q2, cosV, cosL, chi);
101 if(_prob>maxprob) {
102 maxprob=_prob;
103 std::cout << "Max PDF = " << ir << " charm= " << charm << " prob= " << _prob << std::endl;
104 }
105 }
106 std::cout << "Max!!!!!!!!!!! " << maxprob<< std::endl;
107*/
109 EvtVector4R pi1 = p->getDaug(0)->getP4();
110 EvtVector4R pi2 = p->getDaug(1)->getP4();
111 EvtVector4R e = p->getDaug(2)->getP4();
112 EvtVector4R nu = p->getDaug(3)->getP4();
113
114 int pid = EvtPDL::getStdHep(p->getDaug(2)->getId());
115 int charm;
116 if(pid==11||pid==13) charm =-1;
117 else charm = 1;
118 double m2, q2, cosV, cosL, chi;
119 KinVGen(pi1, pi2, e, nu, charm, m2, q2, cosV, cosL, chi);
120 double prob = calPDF(m2, q2, cosV, cosL, chi);
121 setProb(prob);
122 return;
123}
124
125void EvtDToa0enu::KinVGen(EvtVector4R vp4_K, EvtVector4R vp4_Pi, EvtVector4R vp4_Lep, EvtVector4R vp4_Nu, int charm, double& m2, double& q2, double& cosV, double& cosL, double& chi) {
126 EvtVector4R vp4_KPi = vp4_K + vp4_Pi;
127 EvtVector4R vp4_W = vp4_Lep + vp4_Nu;
128 m2 = vp4_KPi.mass2();
129 q2 = vp4_W.mass2();
130
131 EvtVector4R boost;
132 boost.set(vp4_KPi.get(0), -vp4_KPi.get(1), -vp4_KPi.get(2), -vp4_KPi.get(3));
133 EvtVector4R vp4_Kp = boostTo(vp4_K, boost);
134 cosV = vp4_Kp.dot(vp4_KPi)/(vp4_Kp.d3mag()*vp4_KPi.d3mag());
135
136 boost.set(vp4_W.get(0), -vp4_W.get(1), -vp4_W.get(2), -vp4_W.get(3));
137 EvtVector4R vp4_Lepp = boostTo(vp4_Lep, boost);
138 cosL = vp4_Lepp.dot(vp4_W)/(vp4_Lepp.d3mag()*vp4_W.d3mag());
139
140 EvtVector4R V = vp4_KPi/vp4_KPi.d3mag();
141 EvtVector4R C = vp4_Kp.cross(V);
142 C/=C.d3mag();
143 EvtVector4R D = vp4_Lepp.cross(V);
144 D/=D.d3mag();
145 double sinx = C.cross(V).dot(D);
146 double cosx = C.dot(D);
147 chi = sinx>0? acos(cosx): -acos(cosx);
148 if(charm==-1) chi=-chi;
149}
150
151double EvtDToa0enu::calPDF(double m2, double q2, double cosV, double cosL, double chi) {
152 EvtComplex F10(0.0,0.0);
153 if (mode==0) F10 = a0pFlatte(m2, q2);
154 else if (mode==1) F10 = a0nFlatte(m2, q2);
155 double I1 = 0.25*abs2(F10);
156 double sinL = sqrt(1.-cosL*cosL);
157 double sinL2 = sinL*sinL;
158 double cos2L = 1.0 - 2.0*sinL2;
159 double I = I1 - I1*cos2L;
160 return I;
161}
162
163EvtComplex EvtDToa0enu::a0nFlatte(double m2, double q2) {
164 double PetaPi = getPStar(m2_D, m2, q2);
165 EvtComplex rhokk = Flatte_rhoab(m2,m2_Kaon,m2_Kaon);
166 EvtComplex rhopieta = Flatte_rhoab(m2,m2_Pi0, m2_eta);
167 EvtComplex amp = ciR/(ciR*(m2_a0-m2)-ciM*(flatte_g1*rhopieta+flatte_g2*rhokk));
168 EvtComplex F10 = amp*PetaPi*m_D/(1.0-q2/m2AD);
169 return F10;
170}
171
172EvtComplex EvtDToa0enu::a0pFlatte(double m2, double q2) {
173 double PetaPi = getPStar(m2_D0, m2, q2);
174 EvtComplex rhokk = Flatte_rhoab(m2,m2_K0,m2_Kaon);
175 EvtComplex rhopieta = Flatte_rhoab(m2,m2_Pion,m2_eta);
176 EvtComplex amp = ciR/(ciR*(m2_a0-m2)-ciM*(flatte_g1*rhopieta+flatte_g2*rhokk));
177 EvtComplex F10 = amp*PetaPi*m_D0/(1.0-q2/m2AD0);
178 return F10;
179}
180
181EvtComplex EvtDToa0enu::Flatte_rhoab(double sa, double sb, double sc) {
182 EvtComplex rho(0.0, 0.0);
183 double x = sa + sb - sc;
184 double q = 0.25*x*x/sa-sb;
185 if(q>0){
186 rho = 2.0*sqrt(q/sa)*ciR;
187 } else {
188 rho = 2.0*sqrt(-q/sa)*ciM;
189 }
190 return rho;
191}
192
193double EvtDToa0enu::getPStar(double sa, double sb, double sc) {
194 double x = sa + sb - sc;
195 double q = 0.25*x*x/sa-sb;
196 double p;
197 if (q>0.0) {
198 p = sqrt(q);
199 } else {
200 // std::cout << "EvtDToa0enu: pstar is less than 0.0" << std::endl;
201 p = 0.01;
202 }
203 return p;
204}
Double_t x[10]
const DifComplex I
character *LEPTONflag integer iresonances real pi2
double abs2(const EvtComplex &c)
EvtDiracSpinor boostTo(const EvtDiracSpinor &sp, const EvtVector4R p4)
*********DOUBLE PRECISION m_pi INTEGER m_lenwt !max no of aux weights INTEGER m_phmax !maximum photon multiplicity ISR FSR *DOUBLE COMPLEX m_Pauli4 DOUBLE COMPLEX m_AmpBorn DOUBLE COMPLEX m_AmpBoxy DOUBLE COMPLEX m_AmpBorn1 DOUBLE COMPLEX m_AmpBorn2 DOUBLE COMPLEX m_AmpExpo2p DOUBLE COMPLEX m_Rmat DOUBLE COMPLEX m_BoxGZut !DOUBLE COMPLEX m_F1finPair2 !DOUBLE PRECISION m_Vcut DOUBLE PRECISION m_Alfinv DOUBLE PRECISION m_Lorin1 DOUBLE PRECISION m_Lorin2 DOUBLE PRECISION m_eta
Definition GPS.h:30
****INTEGER imax DOUBLE PRECISION m_pi *DOUBLE PRECISION m_amfin DOUBLE PRECISION m_Chfin DOUBLE PRECISION m_Xenph DOUBLE PRECISION m_sinw2 DOUBLE PRECISION m_GFermi DOUBLE PRECISION m_MfinMin DOUBLE PRECISION m_ta2 INTEGER m_out INTEGER m_KeyFSR INTEGER m_KeyQCD *COMMON c_Semalib $ !copy of input $ !CMS energy $ !beam mass $ !final mass $ !beam charge $ !final charge $ !smallest final mass $ !Z mass $ !Z width $ !EW mixing angle $ !Gmu Fermi $ alphaQED at q
Definition KKsem.h:33
***************************************************************************************Pseudo Class RRes *****************************************************************************************Parameters and physical constants **Maarten sept ************************************************************************DOUBLE PRECISION xsmu **************************************************************************PARTICLE DATA all others are from PDG *Only resonances with known widths into electron pairs are sept ************************************************************************C Declarations C
Definition RRes.h:29
void getName(std::string &name)
virtual ~EvtDToa0enu()
void decay(EvtParticle *p)
void initProbMax()
EvtDecayBase * clone()
void checkSpinDaughter(int d1, EvtSpinType::spintype sp)
void checkSpinParent(EvtSpinType::spintype sp)
void setProbMax(double prbmx)
void checkNDaug(int d1, int d2=-1)
EvtId * getDaugs()
void checkNArg(int a1, int a2=-1, int a3=-1, int a4=-1)
void setProb(double prob)
static int getStdHep(EvtId id)
Definition EvtPDL.hh:56
EvtId getId() const
const EvtVector4R & getP4() const
EvtParticle * getDaug(int i)
double initializePhaseSpace(int numdaughter, EvtId *daughters, double poleSize=-1., int whichTwo1=0, int whichTwo2=1)
double dot(const EvtVector4R &v2) const
double get(int i) const
EvtVector4R cross(const EvtVector4R &v2)
double d3mag() const
double mass2() const
void set(int i, double d)
double double * m2
Definition qcdloop1.h:75