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