BOSS 7.1.2
BESIII Offline Software System
Loading...
Searching...
No Matches
EvtD0Toa0enu.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: EvtD0Toa0enu.cc
11// the necessary file: EvtD0Toa0enu.hh
12//
13// Description: D -> a0(980) e+ nu,
14//
15// Modification history:
16//
17// Liaoyuan Dong Sep 29 00:13:16 2022 Module created
18//
19//------------------------------------------------------------------------
23#include "EvtGenBase/EvtPDL.hh"
28#include <stdlib.h>
29
31
32void EvtD0Toa0enu::getName(std::string& model_name){
33 model_name="D0Toa0enu";
34}
35
39
41 checkNArg(0);
42 checkNDaug(4);
46
47
48 mode = 0; // D0
49 ProbMax = 15.55;
50
51 //std::cout << "Initializing EvtD0Toa0enu (D0 -> a0(980)- e+ nu_e) ProbMax = " << ProbMax << std::endl;
52
53 double m_Kaon = 0.493677;
54 m2_Kaon = m_Kaon*m_Kaon;
55 double m_K0 = 0.497614;
56 m2_K0 = m_K0*m_K0;
57 double m_eta = 0.547853;
58 m2_eta = m_eta*m_eta;
59 double m_Pion = 0.13957;
60 m2_Pion = m_Pion*m_Pion;
61 double m_Pi0 = 0.1349766;
62 m2_Pi0 = m_Pi0*m_Pi0;
63 m_D0 = 1.86486;
64 m2_D0 = m_D0*m_D0;
65 m_D = 1.86962;
66 m2_D = m_D*m_D;
67
68 ciR = EvtComplex(1.0, 0.0);
69 ciM = EvtComplex(0.0, 1.0);
70
71 ///////////// for D to a0 e nu
72 double mAD0 = 2.42;
73 m2AD0 = mAD0*mAD0;
74 double mAD = 2.42;
75 m2AD = mAD*mAD;
76 double m_a0 = 0.990;
77 m2_a0 = m_a0*m_a0;
78 flatte_g1 = 0.341;
79 flatte_g2 = 0.341*0.892;
80}
81
83 setProbMax(ProbMax);
84}
85
87/*
88 double maxprob = 0.0;
89 for(int ir=0;ir<=60000000;ir++){
90 p->initializePhaseSpace(getNDaug(),getDaugs());
91 EvtVector4R _pi1 = p->getDaug(0)->getP4();
92 EvtVector4R _pi2 = p->getDaug(1)->getP4();
93 EvtVector4R _e = p->getDaug(2)->getP4();
94 EvtVector4R _nu = p->getDaug(3)->getP4();
95
96 int pid = EvtPDL::getStdHep(p->getDaug(2)->getId());
97 int charm;
98 if(pid == 11) charm = -1;
99 else charm = 1;
100 double m2, q2, cosV, cosL, chi;
101 KinVGen(_pi1, _pi2, _e, _nu, charm, m2, q2, cosV, cosL, chi);
102 double _prob = calPDF(m2, q2, cosV, cosL, chi);
103 if(_prob>maxprob) {
104 maxprob=_prob;
105 std::cout << "Max PDF = " << ir << " charm= " << charm << " prob= " << _prob << std::endl;
106 }
107 }
108 std::cout << "Max!!!!!!!!!!! " << maxprob<< std::endl;
109*/
111 EvtVector4R pi1 = p->getDaug(0)->getP4();
112 EvtVector4R pi2 = p->getDaug(1)->getP4();
113 EvtVector4R e = p->getDaug(2)->getP4();
114 EvtVector4R nu = p->getDaug(3)->getP4();
115
116 int pid = EvtPDL::getStdHep(p->getDaug(2)->getId());
117 int charm;
118 if(pid==11||pid==13) charm =-1;
119 else charm = 1;
120 double m2, q2, cosV, cosL, chi;
121 KinVGen(pi1, pi2, e, nu, charm, m2, q2, cosV, cosL, chi);
122 double prob = calPDF(m2, q2, cosV, cosL, chi);
123 setProb(prob);
124 return;
125}
126
127void EvtD0Toa0enu::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) {
128 EvtVector4R vp4_KPi = vp4_K + vp4_Pi;
129 EvtVector4R vp4_W = vp4_Lep + vp4_Nu;
130 m2 = vp4_KPi.mass2();
131 q2 = vp4_W.mass2();
132
133 EvtVector4R boost;
134 boost.set(vp4_KPi.get(0), -vp4_KPi.get(1), -vp4_KPi.get(2), -vp4_KPi.get(3));
135 EvtVector4R vp4_Kp = boostTo(vp4_K, boost);
136 cosV = vp4_Kp.dot(vp4_KPi)/(vp4_Kp.d3mag()*vp4_KPi.d3mag());
137
138 boost.set(vp4_W.get(0), -vp4_W.get(1), -vp4_W.get(2), -vp4_W.get(3));
139 EvtVector4R vp4_Lepp = boostTo(vp4_Lep, boost);
140 cosL = vp4_Lepp.dot(vp4_W)/(vp4_Lepp.d3mag()*vp4_W.d3mag());
141
142 EvtVector4R V = vp4_KPi/vp4_KPi.d3mag();
143 EvtVector4R C = vp4_Kp.cross(V);
144 C/=C.d3mag();
145 EvtVector4R D = vp4_Lepp.cross(V);
146 D/=D.d3mag();
147 double sinx = C.cross(V).dot(D);
148 double cosx = C.dot(D);
149 chi = sinx>0? acos(cosx): -acos(cosx);
150 if(charm==-1) chi=-chi;
151}
152
153double EvtD0Toa0enu::calPDF(double m2, double q2, double cosV, double cosL, double chi) {
154 EvtComplex F10(0.0,0.0);
155 if (mode==0) F10 = a0pFlatte(m2, q2);
156 else if (mode==1) F10 = a0nFlatte(m2, q2);
157 double I1 = 0.25*abs2(F10);
158 double sinL = sqrt(1.-cosL*cosL);
159 double sinL2 = sinL*sinL;
160 double cos2L = 1.0 - 2.0*sinL2;
161 double I = I1 - I1*cos2L;
162 return I;
163}
164
165EvtComplex EvtD0Toa0enu::a0nFlatte(double m2, double q2) {
166 double PetaPi = getPStar(m2_D, m2, q2);
167 EvtComplex rhokk = Flatte_rhoab(m2,m2_Kaon,m2_Kaon);
168 EvtComplex rhopieta = Flatte_rhoab(m2,m2_Pi0, m2_eta);
169 EvtComplex amp = ciR/(ciR*(m2_a0-m2)-ciM*(flatte_g1*rhopieta+flatte_g2*rhokk));
170 EvtComplex F10 = amp*PetaPi*m_D/(1.0-q2/m2AD);
171 return F10;
172}
173
174EvtComplex EvtD0Toa0enu::a0pFlatte(double m2, double q2) {
175 double PetaPi = getPStar(m2_D0, m2, q2);
176 EvtComplex rhokk = Flatte_rhoab(m2,m2_K0,m2_Kaon);
177 EvtComplex rhopieta = Flatte_rhoab(m2,m2_Pion,m2_eta);
178 EvtComplex amp = ciR/(ciR*(m2_a0-m2)-ciM*(flatte_g1*rhopieta+flatte_g2*rhokk));
179 EvtComplex F10 = amp*PetaPi*m_D0/(1.0-q2/m2AD0);
180 return F10;
181}
182
183EvtComplex EvtD0Toa0enu::Flatte_rhoab(double sa, double sb, double sc) {
184 EvtComplex rho(0.0, 0.0);
185 double x = sa + sb - sc;
186 double q = 0.25*x*x/sa-sb;
187 if(q>0){
188 rho = 2.0*sqrt(q/sa)*ciR;
189 } else {
190 rho = 2.0*sqrt(-q/sa)*ciM;
191 }
192 return rho;
193}
194
195double EvtD0Toa0enu::getPStar(double sa, double sb, double sc) {
196 double x = sa + sb - sc;
197 double q = 0.25*x*x/sa-sb;
198 double p;
199 if (q>0.0) {
200 p = sqrt(q);
201 } else {
202 // std::cout << "EvtD0Toa0enu: pstar is less than 0.0" << std::endl;
203 p = 0.01;
204 }
205 return p;
206}
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 ~EvtD0Toa0enu()
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