BOSS 6.6.4.p01
BESIII Offline Software System
Loading...
Searching...
No Matches
EvtLNuGamma.cc
Go to the documentation of this file.
1//--------------------------------------------------------------------------
2//
3// Environment:
4// This software is part of the EvtGen package developed jointly
5// for the BaBar and CLEO collaborations. If you use all or part
6// of it, please give an appropriate acknowledgement.
7//
8// Copyright Information: See EvtGen/COPYRIGHT
9// Copyright (C) 2001 Caltech
10//
11// Module: EvtLNuGamma.cc
12//
13// Description: B+ -> l+ nu gamma
14//
15//
16// Modification history:
17//
18// Edward Chen April 24, 2001 Module created
19//
20//------------------------------------------------------------------------
21//
23#include <stdlib.h>
24#include <iostream>
25#include <string>
27#include "EvtGenBase/EvtPDL.hh"
36
38 _fafvzero = false;
39}
40
42
43void EvtLNuGamma::getName(std::string& model_name){
44
45 model_name="LNUGAMMA";
46
47}
48
49
51
52 return new EvtLNuGamma;
53
54}
55
57
58 // check that there are 3 or 4 arguments
59 checkNArg(3,4);
60 checkNDaug(3);
61
62 if (getNArg() == 4){
63 // Argv[3] is a flag set to 0 if abs(f_a/f_v) is 1
64 // and not set to 0 if f_a/f_v is set to 0.
65 if (getArg(3) > 0){
66 _fafvzero = true;
67 }
68 else{
69 _fafvzero = false;
70 }
71 }
72 else{
73 _fafvzero = false;
74 }
75
77
81}
82
84
85 setProbMax(7000.0);
86
87}
88
90
91 static EvtId BM=EvtPDL::getId("B-");
93
94 EvtComplex myI(0,1);
95
96 EvtParticle *lept, *neut,*phot;
97 lept=p->getDaug(0);
98 neut=p->getDaug(1);
99 phot=p->getDaug(2);
100
101 EvtVector4C lept1,lept2,photon1,photon2;
102
103 if (p->getId()==BM) {
104 lept1=EvtLeptonVACurrent(lept->spParent(0),neut->spParentNeutrino());
105 lept2=EvtLeptonVACurrent(lept->spParent(1),neut->spParentNeutrino());
106 }
107 else{
108 lept1=EvtLeptonVACurrent(neut->spParentNeutrino(),lept->spParent(0));
109 lept2=EvtLeptonVACurrent(neut->spParentNeutrino(),lept->spParent(1));
110 }
111
112
113
114 EvtVector4R photp = phot->getP4(); // Photon 4-momentum in parent rest frame
115 double photE = photp.get(0); // Photon energy in parent rest frame
116
117 EvtVector4C photone1 = phot->epsParentPhoton(0).conj();
118 EvtVector4C photone2 = phot->epsParentPhoton(1).conj();
119
120 EvtVector4R parVelocity(1,0,0,0); // Parent velocity in parent rest-frame
121
122 double fv,fa;
123
124 fv = getFormFactor(photE);
125 if (_fafvzero){
126 fa = 0.0;
127 }
128 else if (p->getId()==BM) {
129 fa = - fv;
130 }
131 else{
132 fa = fv;
133 }
134
135 EvtVector4C temp1a = dual(directProd(parVelocity,photp)).cont2(photone1);
136 EvtVector4C temp2a = dual(directProd(parVelocity,photp)).cont2(photone2);
137
138 EvtVector4C temp1b = (photone1)*(parVelocity*photp);
139 EvtVector4C temp1c = (photp)*(photone1*parVelocity);
140
141 EvtVector4C temp2b = (photone2)*(parVelocity*photp);
142 EvtVector4C temp2c = (photp)*(photone2*parVelocity);
143
144 photon1 = (temp1a*fv) + (myI*fa*(temp1b - temp1c));
145 photon2 = (temp2a*fv) + (myI*fa*(temp2b - temp2c));
146
147 vertex(0,0,lept1.cont(photon1));
148 vertex(0,1,lept1.cont(photon2));
149 vertex(1,0,lept2.cont(photon1));
150 vertex(1,1,lept2.cont(photon2));
151
152 return;
153
154}
155
156double EvtLNuGamma::getFormFactor(double photonEnergy){
157 // Arg[0] = photon mass cutoff (GeV)
158 // Arg[1] = R (GeV^(-1))
159 // Arg[2] = m_b (GeV)
160 // Using Korchemsky et al. Phy Rev D 61 (2000) 114510
161 // Up to a constant
162
163 double formFactor = 0;
164 double qu = 2./3.;
165 double qb = -1./3.;
166
167 if (photonEnergy > getArg(0)){
168 formFactor = (1/photonEnergy) * ((qu*getArg(1)) - (qb/getArg(2)));
169 }
170 return formFactor;
171}
Evt3Rank3C directProd(const EvtVector3C &c1, const EvtVector3C &c2, const EvtVector3C &c3)
EvtVector4C EvtLeptonVACurrent(const EvtDiracSpinor &d, const EvtDiracSpinor &dp)
EvtTensor4C dual(const EvtTensor4C &t2)
Definition: EvtTensor4C.cc:379
void vertex(const EvtComplex &amp)
Definition: EvtDecayAmp.hh:37
void checkSpinDaughter(int d1, EvtSpinType::spintype sp)
void checkSpinParent(EvtSpinType::spintype sp)
double getArg(int j)
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)
Definition: EvtId.hh:27
bool _fafvzero
Definition: EvtLNuGamma.hh:45
double getFormFactor(double photonEnergy)
Definition: EvtLNuGamma.cc:156
virtual ~EvtLNuGamma()
Definition: EvtLNuGamma.cc:41
EvtDecayBase * clone()
Definition: EvtLNuGamma.cc:50
void getName(std::string &name)
Definition: EvtLNuGamma.cc:43
void decay(EvtParticle *p)
Definition: EvtLNuGamma.cc:89
void init()
Definition: EvtLNuGamma.cc:56
void initProbMax()
Definition: EvtLNuGamma.cc:83
static EvtId getId(const std::string &name)
Definition: EvtPDL.cc:287
virtual EvtVector4C epsParentPhoton(int i)
Definition: EvtParticle.cc:585
EvtId getId() const
Definition: EvtParticle.cc:113
virtual EvtDiracSpinor spParentNeutrino() const
Definition: EvtParticle.cc:633
virtual EvtDiracSpinor spParent(int) const
Definition: EvtParticle.cc:607
const EvtVector4R & getP4() const
Definition: EvtParticle.cc:121
EvtParticle * getDaug(int i)
Definition: EvtParticle.cc:85
double initializePhaseSpace(int numdaughter, EvtId *daughters, double poleSize=-1., int whichTwo1=0, int whichTwo2=1)
EvtVector4C cont2(const EvtVector4C &v4) const
Definition: EvtTensor4C.cc:474
EvtVector4C conj() const
Definition: EvtVector4C.hh:206
EvtComplex cont(const EvtVector4C &v4) const
Definition: EvtVector4C.hh:146
double get(int i) const
Definition: EvtVector4R.hh:179