BOSS 7.1.0
BESIII Offline Software System
Loading...
Searching...
No Matches
EvtDTopi0pi0enu.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: EvtDTopi0pi0enu.cc
11// the necessary file: EvtDTopi0pi0enu.hh
12//
13// Description: D -> f0(500) (->pi0 pi0) e+ nu,
14//
15// Modification history:
16//
17// Liaoyuan Dong Fri Feb 17 00:56:58 2023 Module created
18//
19//------------------------------------------------------------------------
23#include "EvtGenBase/EvtPDL.hh"
28#include <stdlib.h>
29
31
32void EvtDTopi0pi0enu::getName(std::string& model_name){
33 model_name="DTopi0pi0enu";
34}
35
37 return new EvtDTopi0pi0enu;
38}
39
41 checkNArg(0);
42 checkNDaug(4);
46
47 //cout << "Initializing EvtDTopi0pi0enu: ProbMax = 2.48532"<< endl;
48
49 mA = 2.42;
50 m0_S = 0.953;
51 Dp_mD = 1.86962;
52 Pi = atan2(0.0,-1.0);
53 mPi = 0.1349766;
54 mKa = 0.493677;
55 mEt = 0.547853;
56}
57
59 setProbMax(2.48532);
60}
61
63/*
64 double maxprob = 0.0;
65 for(int ir=0;ir<=60000000;ir++){
66 p->initializePhaseSpace(getNDaug(),getDaugs());
67 EvtVector4R _pi1 = p->getDaug(0)->getP4();
68 EvtVector4R _pi2 = p->getDaug(1)->getP4();
69 EvtVector4R _e = p->getDaug(2)->getP4();
70 EvtVector4R _nu = p->getDaug(3)->getP4();
71
72 int pid = EvtPDL::getStdHep(p->getDaug(0)->getId());
73 int charm;
74 if(pid == -211) charm = 1;
75 else charm = -1;
76 double m2, q2, cosV, cosL, chi;
77 KinVGen(_pi1, _pi2, _e, _nu, charm, m2, q2, cosV, cosL, chi);
78 double _prob = calPDF(m2, q2, cosV, cosL, chi);
79 if(_prob>maxprob) {
80 maxprob=_prob;
81 std::cout << "Max PDF = " << ir << " charm= " << charm << " prob= " << _prob << std::endl;
82 }
83 }
84 std::cout << "Max!!!!!!!!!!! " << maxprob<< std::endl;
85*/
87 EvtVector4R pi1 = p->getDaug(0)->getP4();
88 EvtVector4R pi2 = p->getDaug(1)->getP4();
89 EvtVector4R e = p->getDaug(2)->getP4();
90 EvtVector4R nu = p->getDaug(3)->getP4();
91
92 int pid = EvtPDL::getStdHep(p->getDaug(0)->getId());
93 int charm;
94 if(pid == -211) charm = 1;
95 else charm = -1;
96 double m2, q2, cosV, cosL, chi;
97 KinVGen(pi1, pi2, e, nu, charm, m2, q2, cosV, cosL, chi);
98 double prob = calPDF(m2, q2, cosV, cosL, chi);
99 setProb(prob);
100 return;
101}
102
103void EvtDTopi0pi0enu::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)
104{
105 EvtVector4R vp4_KPi = vp4_K + vp4_Pi;
106 EvtVector4R vp4_W = vp4_Lep + vp4_Nu;
107 m2 = vp4_KPi.mass2();
108 q2 = vp4_W.mass2();
109
110 EvtVector4R boost;
111 boost.set(vp4_KPi.get(0), -vp4_KPi.get(1), -vp4_KPi.get(2), -vp4_KPi.get(3));
112 EvtVector4R vp4_Kp = boostTo(vp4_K, boost);
113 cosV = vp4_Kp.dot(vp4_KPi)/(vp4_Kp.d3mag()*vp4_KPi.d3mag());
114
115 boost.set(vp4_W.get(0), -vp4_W.get(1), -vp4_W.get(2), -vp4_W.get(3));
116 EvtVector4R vp4_Lepp = boostTo(vp4_Lep, boost);
117 cosL = vp4_Lepp.dot(vp4_W)/(vp4_Lepp.d3mag()*vp4_W.d3mag());
118
119 EvtVector4R V = vp4_KPi/vp4_KPi.d3mag();
120 EvtVector4R C = vp4_Kp.cross(V);
121 C/=C.d3mag();
122 EvtVector4R D = vp4_Lepp.cross(V);
123 D/=D.d3mag();
124 double sinx = C.cross(V).dot(D);
125 double cosx = C.dot(D);
126 chi = sinx>0? acos(cosx): -acos(cosx);
127 if(charm==-1) chi=-chi;
128}
129
130double EvtDTopi0pi0enu::calPDF(double m2, double q2, double cosV, double cosL, double chi) {
131 double m = sqrt(m2);
132 double q = sqrt(q2);
133 EvtComplex F10(0.0,0.0);
134 EvtComplex f10(0.0,0.0);
135 ResonanceSBugg(m, q, f10);
136 F10 = f10;
137 double I1 = 0.25*abs2(F10);
138 double sinL = sqrt(1.-cosL*cosL);
139 double sinL2 = sinL*sinL;
140 double cos2L = 1.0 - 2.0*sinL2;
141 double I = I1 - I1*cos2L;
142 return I;
143}
144
145void EvtDTopi0pi0enu::ResonanceSBugg(double m, double q, EvtComplex& F10)
146{
147 double pKPi = getPStar(Dp_mD, m, q);
148 double m2 = m*m;
149 double q2 = q*q;
150 double mA2 = mA*mA;
151
152 double sA = 0.41*mPi*mPi;
153 double mr = m0_S; //0.953;
154 double mr2 = m0_S*m0_S; //0.908209;// 0.953*0.953;
155 double alpha = 1.3;
156 double g4pi = 0.011;
157
158 EvtComplex ciR(1.0, 0.0);
159 EvtComplex ciM(0.0, 1.0);
160 EvtComplex Gamma1(0.0, 0.0);
161 EvtComplex Gamma2(0.0, 0.0);
162 EvtComplex Gamma3(0.0, 0.0);
163 EvtComplex Gamma4(0.0, 0.0);
164
165 Gamma1 = getrho(m2,mPi)*getG1(m2,mr)*(m2-sA)/(mr2-sA);
166 Gamma2 = getrho(m2,mKa)*0.6*getG1(m2,mr)*(m2/mr2)*exp(-alpha*fabs(m2-4.0*mKa*mKa));
167 Gamma3 = getrho(m2,mEt)*0.2*getG1(m2,mr)*(m2/mr2)*exp(-alpha*fabs(m2-4.0*mEt*mEt));
168 if (m > 4*mPi) Gamma4 = ciR*mr*g4pi*(1.0+exp(7.082-2.845*mr2))/(1.0+exp(7.082-2.845*m2));
169
170 double AA = mr2-m2-getG1(m2,mr)*(m2-sA)*getZ(m2, mr2)/(mr2-sA);
171 EvtComplex amp = ciR/(ciR*AA-ciM*(Gamma1+Gamma2+Gamma3+Gamma4));
172 F10 = amp*pKPi*Dp_mD/(1.0-q2/mA2);
173}
174
175double EvtDTopi0pi0enu::getPStar(double m, double m1, double m2)
176{
177 double s = m*m;
178 double s1 = m1*m1;
179 double s2 = m2*m2;
180 double x = s + s1 - s2;
181 double t = 0.25*x*x/s - s1;
182 double p;
183 if (t>0.0) {
184 p = sqrt(t);
185 } else {
186 // std::cout << " Hello, pstar is less than 0.0" << std::endl;
187 p = 0.04;
188 }
189 return p;
190}
191
192inline double EvtDTopi0pi0enu::getRho(double m2, double mX)
193{
194 double rho = 0.0;
195 if ((1.0-4.0*mX*mX/m2)>0)
196 rho = sqrt(1.0-4.0*mX*mX/m2);
197 else rho = 0.0;
198 return rho;
199}
200
201inline EvtComplex EvtDTopi0pi0enu::getrho(double m2, double mX)
202{
203 EvtComplex rho(0.0, 0.0);
204 EvtComplex ciR(1.0, 0.0);
205 EvtComplex ciM(0.0, 1.0);
206 if ((1.0-4.0*mX*mX/m2)>0)
207 rho = ciR*sqrt(1.0-4.0*mX*mX/m2);
208 else rho = ciM*sqrt(4.0*mX*mX/m2-1.0);
209 return rho;
210}
211
212inline double EvtDTopi0pi0enu::getG1(double m2, double Mr)
213{
214 double b1 = 1.302;
215 double b2 = 0.340;
216 double A = 2.426;
217 double Mr2 = Mr*Mr;// 0.953*0.953;
218 double gg1 = Mr*(b1+b2*m2)*exp(-(m2-Mr2)/A);
219 return gg1;
220}
221
222inline double EvtDTopi0pi0enu::getZ(double m2, double Mr2)
223{
224 double zz = (getRho(m2,mPi)*log((1.0-getRho(m2,mPi))/(1.0+getRho(m2,mPi)))
225 -getRho(Mr2,mPi)*log((1.0-getRho(Mr2,mPi))/(1.0+getRho(Mr2,mPi))))/Pi;
226
227 return zz;
228}
Double_t x[10]
const DifComplex I
double abs2(const EvtComplex &c)
Definition: EvtComplex.hh:221
EvtComplex exp(const EvtComplex &c)
Definition: EvtComplex.hh:252
EvtDiracSpinor boostTo(const EvtDiracSpinor &sp, const EvtVector4R p4)
const double alpha
XmlRpcServer s
Definition: HelloServer.cpp:11
****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
TTree * t
Definition: binning.cxx:23
void decay(EvtParticle *p)
EvtDecayBase * clone()
void getName(std::string &name)
virtual ~EvtDTopi0pi0enu()
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()
Definition: EvtDecayBase.hh:65
void checkNArg(int a1, int a2=-1, int a3=-1, int a4=-1)
void setProb(double prob)
Definition: EvtDecayProb.hh:34
static int getStdHep(EvtId id)
Definition: EvtPDL.hh:56
EvtId getId() const
Definition: EvtParticle.cc:112
const EvtVector4R & getP4() const
Definition: EvtParticle.cc:120
EvtParticle * getDaug(int i)
Definition: EvtParticle.cc:84
double initializePhaseSpace(int numdaughter, EvtId *daughters, double poleSize=-1., int whichTwo1=0, int whichTwo2=1)
double dot(const EvtVector4R &v2) const
Definition: EvtVector4R.cc:199
double get(int i) const
Definition: EvtVector4R.hh:179
EvtVector4R cross(const EvtVector4R &v2)
Definition: EvtVector4R.cc:171
double d3mag() const
Definition: EvtVector4R.cc:186
double mass2() const
Definition: EvtVector4R.hh:116
void set(int i, double d)
Definition: EvtVector4R.hh:183
double * m1
Definition: qcdloop1.h:75
double double * m2
Definition: qcdloop1.h:75