]> git.uio.no Git - u/mrichter/AliRoot.git/blame - TEvtGen/EvtGenModels/EvtLNuGamma.cxx
Merge branch 'master' of https://git.cern.ch/reps/AliRoot
[u/mrichter/AliRoot.git] / TEvtGen / EvtGenModels / EvtLNuGamma.cxx
CommitLineData
da0e9ce3 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
37EvtLNuGamma::EvtLNuGamma(){
38 _fafvzero = false;
39}
40
41EvtLNuGamma::~EvtLNuGamma() {}
42
43std::string EvtLNuGamma::getName(){
44
45 return "LNUGAMMA";
46
47}
48
49
50EvtDecayBase* EvtLNuGamma::clone(){
51
52 return new EvtLNuGamma;
53
54}
55
56void EvtLNuGamma::init(){
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
76 checkSpinParent(EvtSpinType::SCALAR);
77
78 checkSpinDaughter(0,EvtSpinType::DIRAC);
79 checkSpinDaughter(1,EvtSpinType::NEUTRINO);
80 checkSpinDaughter(2,EvtSpinType::PHOTON);
81}
82
83void EvtLNuGamma::initProbMax(){
84
85
86 setProbMax(7000.0);
87
88}
89
90void EvtLNuGamma::decay(EvtParticle *p){
91
92 static EvtId BM=EvtPDL::getId("B-");
93 static EvtId DM=EvtPDL::getId("D-");
94 p->initializePhaseSpace(getNDaug(),getDaugs());
95
96 EvtComplex myI(0,1);
97
98 EvtParticle *lept, *neut,*phot;
99 lept=p->getDaug(0);
100 neut=p->getDaug(1);
101 phot=p->getDaug(2);
102
103 EvtVector4C lept1,lept2,photon1,photon2;
104
105 if (p->getId()==BM||p->getId()==DM) {
106 lept1=EvtLeptonVACurrent(lept->spParent(0),neut->spParentNeutrino());
107 lept2=EvtLeptonVACurrent(lept->spParent(1),neut->spParentNeutrino());
108 }
109 else{
110 lept1=EvtLeptonVACurrent(neut->spParentNeutrino(),lept->spParent(0));
111 lept2=EvtLeptonVACurrent(neut->spParentNeutrino(),lept->spParent(1));
112 }
113
114
115
116 EvtVector4R photp = phot->getP4(); // Photon 4-momentum in parent rest frame
117 double photE = photp.get(0); // Photon energy in parent rest frame
118
119 EvtVector4C photone1 = phot->epsParentPhoton(0).conj();
120 EvtVector4C photone2 = phot->epsParentPhoton(1).conj();
121
122 EvtVector4R parVelocity(1,0,0,0); // Parent velocity in parent rest-frame
123
124 double fv,fa;
125
126 fv = getFormFactor(photE);
127 if (_fafvzero){
128 fa = 0.0;
129 }
130 else if (p->getId()==BM||p->getId()==DM) {
131 fa = - fv;
132 }
133 else{
134 fa = fv;
135 }
136
137 EvtVector4C temp1a = dual(directProd(parVelocity,photp)).cont2(photone1);
138 EvtVector4C temp2a = dual(directProd(parVelocity,photp)).cont2(photone2);
139
140 EvtVector4C temp1b = (photone1)*(parVelocity*photp);
141 EvtVector4C temp1c = (photp)*(photone1*parVelocity);
142
143 EvtVector4C temp2b = (photone2)*(parVelocity*photp);
144 EvtVector4C temp2c = (photp)*(photone2*parVelocity);
145
146 photon1 = (temp1a*fv) + (myI*fa*(temp1b - temp1c));
147 photon2 = (temp2a*fv) + (myI*fa*(temp2b - temp2c));
148
149 vertex(0,0,lept1.cont(photon1));
150 vertex(0,1,lept1.cont(photon2));
151 vertex(1,0,lept2.cont(photon1));
152 vertex(1,1,lept2.cont(photon2));
153
154 return;
155
156}
157
158double EvtLNuGamma::getFormFactor(double photonEnergy){
159 // Arg[0] = photon mass cutoff (GeV)
160 // Arg[1] = R (GeV^(-1))
161 // Arg[2] = m_b (GeV)
162 // Using Korchemsky et al. Phy Rev D 61 (2000) 114510
163 // Up to a constant
164
165 double formFactor = 0;
166 double qu = 2./3.;
167 double qb = -1./3.;
168
169 if (photonEnergy > getArg(0)){
170 formFactor = (1/photonEnergy) * ((qu*getArg(1)) - (qb/getArg(2)));
171 }
172 return formFactor;
173}