Fix for definitions for CINT
[u/mrichter/AliRoot.git] / TEvtGen / EvtGenModels / EvtbTosllBall.cpp
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) 2000      Caltech, UCSB
10 //
11 // Module: EvtbTosllBall.cc
12 //
13 // Description: Routine to implement b->sll decays according to Ball et al. 
14 //
15 // Modification history:
16 //
17 //    Ryd     January 5, 2000        Module created
18 //
19 //    jjhollar October 7, 2005       Option to select form factors at runtime
20 //------------------------------------------------------------------------
21 // 
22 #include "EvtGenBase/EvtPatches.hh"
23 #include <stdlib.h>
24 #include "EvtGenBase/EvtParticle.hh"
25 #include "EvtGenBase/EvtGenKine.hh"
26 #include "EvtGenBase/EvtPDL.hh"
27 #include "EvtGenBase/EvtReport.hh"
28 #include "EvtGenModels/EvtbTosllBall.hh"
29 #include "EvtGenModels/EvtbTosllBallFF.hh"
30 #include "EvtGenModels/EvtbTosllAmp.hh"
31 #include "EvtGenModels/EvtbTosllScalarAmp.hh"
32 #include "EvtGenModels/EvtbTosllVectorAmp.hh"
33
34 #include <string>
35 using std::endl;
36
37 EvtbTosllBall::~EvtbTosllBall() {
38   delete _calcamp;
39   delete _ballffmodel;
40 }
41
42 std::string EvtbTosllBall::getName(){
43
44   return "BTOSLLBALL";     
45 }
46
47
48 EvtDecayBase* EvtbTosllBall::clone(){
49
50   return new EvtbTosllBall;
51
52 }
53
54 void EvtbTosllBall::decay( EvtParticle *p ){
55
56   setWeight(p->initializePhaseSpace(getNDaug(),getDaugs(),false,
57                                     _poleSize,1,2));
58
59   _calcamp->CalcAmp(p,_amp2,_ballffmodel);
60   
61 }
62
63
64 void EvtbTosllBall::initProbMax(){
65
66   EvtId parnum,mesnum,l1num,l2num;
67   
68   parnum = getParentId();
69   mesnum = getDaug(0);
70   l1num = getDaug(1);
71   l2num = getDaug(2);
72   
73   //This routine sets the _poleSize.
74   double mymaxprob = _calcamp->CalcMaxProb(parnum,mesnum,
75                                            l1num,l2num,
76                                            _ballffmodel,_poleSize);
77
78   setProbMax(mymaxprob);
79
80 }
81
82
83 void EvtbTosllBall::init(){
84
85   // First choose form factors from the .DEC file
86   // 1 = Ali-Ball '01 LCSR
87   // 2 = Ali-Ball '99 LCSR
88   // 3 = Colangelo 3pt QCD
89   // 4 = Melikhov Lattice/Quark dispersion
90   // 5 = ???
91   // 6 = Ball-Zwicky '05 LCSR (mb = 480)
92   // 7 = Ball-Zwicky '05 LCSR (mb = 460 - pseudoscalar modes only)
93
94   // The default is Ali '01
95   int theFormFactorModel = 1;
96
97   if(getNArg() == 1)
98     theFormFactorModel = (int)getArg(0);
99
100   checkNDaug(3);
101
102   //We expect the parent to be a scalar 
103   //and the daughters to be X lepton+ lepton-
104
105   checkSpinParent(EvtSpinType::SCALAR);
106
107   EvtSpinType::spintype mesontype=EvtPDL::getSpinType(getDaug(0));
108
109   if ( !(mesontype == EvtSpinType::VECTOR||
110         mesontype == EvtSpinType::SCALAR)) {
111     report(ERROR,"EvtGen") << "EvtbTosllBall generator expected "
112                            << " a SCALAR or VECTOR 1st daughter, found:"<<
113                            EvtPDL::name(getDaug(0)).c_str()<<endl;
114     report(ERROR,"EvtGen") << "Will terminate execution!"<<endl;
115     ::abort();
116   }
117
118   checkSpinDaughter(1,EvtSpinType::DIRAC);
119   checkSpinDaughter(2,EvtSpinType::DIRAC);
120
121   _ballffmodel = new EvtbTosllBallFF(theFormFactorModel);
122   if (mesontype == EvtSpinType::SCALAR){
123     _calcamp = new EvtbTosllScalarAmp(-0.313,4.344,-4.669); 
124   } else if (mesontype == EvtSpinType::VECTOR){
125     _calcamp = new EvtbTosllVectorAmp(-0.313,4.344,-4.669); 
126   }
127
128 }
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144