BOSS 7.0.9
BESIII Offline Software System
Loading...
Searching...
No Matches
bak-BesEvtGen-00-04-08/src/EvtGen/EvtGenModels/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//
22#include "EvtGenBase/EvtPatches.hh"
23#include <stdlib.h>
24#include <iostream>
25#include <string>
26#include "EvtGenBase/EvtParticle.hh"
27#include "EvtGenBase/EvtPDL.hh"
28#include "EvtGenBase/EvtGenKine.hh"
29#include "EvtGenModels/EvtLNuGamma.hh"
30#include "EvtGenBase/EvtDiracSpinor.hh"
31#include "EvtGenBase/EvtReport.hh"
32#include "EvtGenBase/EvtComplex.hh"
33#include "EvtGenBase/EvtVector4C.hh"
34#include "EvtGenBase/EvtVector4R.hh"
35#include "EvtGenBase/EvtTensor4C.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)
void checkSpinDaughter(int d1, EvtSpinType::spintype sp)
void checkNArg(int a1, int a2=-1, int a3=-1, int a4=-1)
static EvtId getId(const std::string &name)
double initializePhaseSpace(int numdaughter, EvtId *daughters, double poleSize=-1., int whichTwo1=0, int whichTwo2=1)
EvtVector4C cont2(const EvtVector4C &v4) const
EvtComplex cont(const EvtVector4C &v4) const