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