]> git.uio.no Git - u/mrichter/AliRoot.git/blob - TEvtGen/EvtGenModels/EvtVtoSll.cxx
Merge branch 'master' of https://git.cern.ch/reps/AliRoot
[u/mrichter/AliRoot.git] / TEvtGen / EvtGenModels / EvtVtoSll.cxx
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) 1998      Caltech, UCSB
10 //
11 // Module: EvtVll.cc
12 //
13 // Description: The decay of a vector meson to a scalar and a 
14 //              lepton pair. E.g. D_s*+ -> D_s+ e+ e-
15 //           
16 //
17 // Modification history:
18 //
19 //    RYD       February 28, 2009       Module created
20 //
21 //------------------------------------------------------------------------
22 //
23 #include "EvtGenBase/EvtPatches.hh"
24 #include <stdlib.h>
25 #include <iostream>
26 #include <string>
27 #include "EvtGenBase/EvtParticle.hh"
28 #include "EvtGenBase/EvtPDL.hh"
29 #include "EvtGenBase/EvtGenKine.hh"
30 #include "EvtGenModels/EvtVtoSll.hh"
31 #include "EvtGenBase/EvtDiracSpinor.hh"
32 #include "EvtGenBase/EvtReport.hh"
33 #include "EvtGenBase/EvtVector4C.hh"
34 #include "EvtGenBase/EvtTensor4C.hh"
35
36 EvtVtoSll::~EvtVtoSll() {}
37
38 std::string EvtVtoSll::getName(){
39
40   return "VTOSLL";     
41
42 }
43
44
45 EvtDecayBase* EvtVtoSll::clone(){
46
47   return new EvtVtoSll;
48
49 }
50
51 void EvtVtoSll::init(){
52
53   // check that there are 0 arguments
54   checkNArg(0);
55   checkNDaug(3);
56
57   checkSpinParent(EvtSpinType::VECTOR);
58   
59   checkSpinDaughter(0,EvtSpinType::SCALAR);
60   checkSpinDaughter(1,EvtSpinType::DIRAC);
61   checkSpinDaughter(2,EvtSpinType::DIRAC);
62
63 }
64
65 void EvtVtoSll::initProbMax(){
66
67   //setProbMax(1.0);
68
69 }
70
71 void EvtVtoSll::decay(EvtParticle *p){
72
73   p->initializePhaseSpace(getNDaug(),getDaugs());
74
75   EvtParticle *l1, *l2;
76   l1 = p->getDaug(1);
77   l2 = p->getDaug(2);
78
79   EvtVector4C l11, l12, l21, l22;
80   l11=EvtLeptonVCurrent(l1->spParent(0),l2->spParent(0));
81   l12=EvtLeptonVCurrent(l1->spParent(0),l2->spParent(1));
82   l21=EvtLeptonVCurrent(l1->spParent(1),l2->spParent(0));
83   l22=EvtLeptonVCurrent(l1->spParent(1),l2->spParent(1));
84
85   EvtVector4C eps0=p->eps(0);
86   EvtVector4C eps1=p->eps(1);
87   EvtVector4C eps2=p->eps(2);
88
89   EvtVector4R P=p->getP4Restframe();
90   EvtVector4R k=l1->getP4()+l2->getP4();
91   double k2=k*k;
92
93   EvtTensor4C T(dual(directProd(P,(1.0/k2)*k)));
94
95
96
97   double M2=p->mass();
98   M2*=M2;
99   double m2=l1->mass();
100   m2*=m2;
101
102   double norm=1.0/sqrt(2*M2+4*m2-4*m2*m2/M2);
103
104   vertex(0,0,0,norm*(eps0*T.cont2(l11)));
105   vertex(0,0,1,norm*(eps0*T.cont2(l12)));
106   vertex(0,1,0,norm*(eps0*T.cont2(l21)));
107   vertex(0,1,1,norm*(eps0*T.cont2(l22)));
108   
109   vertex(1,0,0,norm*(eps1*T.cont2(l11)));
110   vertex(1,0,1,norm*(eps1*T.cont2(l12)));
111   vertex(1,1,0,norm*(eps1*T.cont2(l21)));
112   vertex(1,1,1,norm*(eps1*T.cont2(l22)));
113   
114   vertex(2,0,0,norm*(eps2*T.cont2(l11)));
115   vertex(2,0,1,norm*(eps2*T.cont2(l12)));
116   vertex(2,1,0,norm*(eps2*T.cont2(l21)));
117   vertex(2,1,1,norm*(eps2*T.cont2(l22)));
118   
119   return;
120
121 }
122
123
124
125
126
127
128
129
130
131
132
133
134