BOSS 8.0.0
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//
22#include "EvtLNuGamma.hh"
33#include <iostream>
34#include <stdlib.h>
35#include <string>
36
38
40
41void EvtLNuGamma::getName( std::string& model_name ) { model_name = "LNUGAMMA"; }
42
44
46
47 // check that there are 3 or 4 arguments
48 checkNArg( 3, 4 );
49 checkNDaug( 3 );
50
51 if ( getNArg() == 4 )
52 {
53 // Argv[3] is a flag set to 0 if abs(f_a/f_v) is 1
54 // and not set to 0 if f_a/f_v is set to 0.
55 if ( getArg( 3 ) > 0 ) { _fafvzero = true; }
56 else { _fafvzero = false; }
57 }
58 else { _fafvzero = false; }
59
61
65}
66
68
70
71 static EvtId BM = EvtPDL::getId( "B-" );
73
74 EvtComplex myI( 0, 1 );
75
76 EvtParticle *lept, *neut, *phot;
77 lept = p->getDaug( 0 );
78 neut = p->getDaug( 1 );
79 phot = p->getDaug( 2 );
80
81 EvtVector4C lept1, lept2, photon1, photon2;
82
83 if ( p->getId() == BM )
84 {
85 lept1 = EvtLeptonVACurrent( lept->spParent( 0 ), neut->spParentNeutrino() );
86 lept2 = EvtLeptonVACurrent( lept->spParent( 1 ), neut->spParentNeutrino() );
87 }
88 else
89 {
90 lept1 = EvtLeptonVACurrent( neut->spParentNeutrino(), lept->spParent( 0 ) );
91 lept2 = EvtLeptonVACurrent( neut->spParentNeutrino(), lept->spParent( 1 ) );
92 }
93
94 EvtVector4R photp = phot->getP4(); // Photon 4-momentum in parent rest frame
95 double photE = photp.get( 0 ); // Photon energy in parent rest frame
96
97 EvtVector4C photone1 = phot->epsParentPhoton( 0 ).conj();
98 EvtVector4C photone2 = phot->epsParentPhoton( 1 ).conj();
99
100 EvtVector4R parVelocity( 1, 0, 0, 0 ); // Parent velocity in parent rest-frame
101
102 double fv, fa;
103
104 fv = getFormFactor( photE );
105 if ( _fafvzero ) { fa = 0.0; }
106 else if ( p->getId() == BM ) { fa = -fv; }
107 else { fa = fv; }
108
109 EvtVector4C temp1a = dual( directProd( parVelocity, photp ) ).cont2( photone1 );
110 EvtVector4C temp2a = dual( directProd( parVelocity, photp ) ).cont2( photone2 );
111
112 EvtVector4C temp1b = ( photone1 ) * ( parVelocity * photp );
113 EvtVector4C temp1c = ( photp ) * ( photone1 * parVelocity );
114
115 EvtVector4C temp2b = ( photone2 ) * ( parVelocity * photp );
116 EvtVector4C temp2c = ( photp ) * ( photone2 * parVelocity );
117
118 photon1 = ( temp1a * fv ) + ( myI * fa * ( temp1b - temp1c ) );
119 photon2 = ( temp2a * fv ) + ( myI * fa * ( temp2b - temp2c ) );
120
121 vertex( 0, 0, lept1.cont( photon1 ) );
122 vertex( 0, 1, lept1.cont( photon2 ) );
123 vertex( 1, 0, lept2.cont( photon1 ) );
124 vertex( 1, 1, lept2.cont( photon2 ) );
125
126 return;
127}
128
129double EvtLNuGamma::getFormFactor( double photonEnergy ) {
130 // Arg[0] = photon mass cutoff (GeV)
131 // Arg[1] = R (GeV^(-1))
132 // Arg[2] = m_b (GeV)
133 // Using Korchemsky et al. Phy Rev D 61 (2000) 114510
134 // Up to a constant
135
136 double formFactor = 0;
137 double qu = 2. / 3.;
138 double qb = -1. / 3.;
139
140 if ( photonEnergy > getArg( 0 ) )
141 { formFactor = ( 1 / photonEnergy ) * ( ( qu * getArg( 1 ) ) - ( qb / getArg( 2 ) ) ); }
142 return formFactor;
143}
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 vertex(const EvtComplex &amp)
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()
void checkNArg(int a1, int a2=-1, int a3=-1, int a4=-1)
Definition EvtId.hh:27
double getFormFactor(double photonEnergy)
virtual ~EvtLNuGamma()
EvtDecayBase * clone()
void getName(std::string &name)
void decay(EvtParticle *p)
void initProbMax()
static EvtId getId(const std::string &name)
Definition EvtPDL.cc:272
virtual EvtVector4C epsParentPhoton(int i)
EvtId getId() const
virtual EvtDiracSpinor spParentNeutrino() const
virtual EvtDiracSpinor spParent(int) const
const EvtVector4R & getP4() const
EvtParticle * getDaug(int i)
double initializePhaseSpace(int numdaughter, EvtId *daughters, double poleSize=-1., int whichTwo1=0, int whichTwo2=1)
EvtVector4C cont2(const EvtVector4C &v4) const
EvtVector4C conj() const
EvtComplex cont(const EvtVector4C &v4) const
double get(int i) const