Fix for definitions for CINT
[u/mrichter/AliRoot.git] / TEvtGen / EvtGenModels / EvtSTSCP.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) 1998      Caltech, UCSB
10 //
11 // Module: EvtSTSCP.cc
12 //
13 // Description: Routine to decay scalar -> tensor scalar
14 //              and has CP violation.
15 //
16 // Modification history:
17 //
18 //    RYD       June 19, 1997       Module created
19 //
20 //------------------------------------------------------------------------
21 // 
22 #include "EvtGenBase/EvtPatches.hh"
23 #include <stdlib.h>
24 #include "EvtGenBase/EvtParticle.hh"
25 #include "EvtGenBase/EvtGenKine.hh"
26 #include "EvtGenBase/EvtCPUtil.hh"
27 #include "EvtGenBase/EvtTensor4C.hh"
28 #include "EvtGenBase/EvtVector4C.hh"
29 #include "EvtGenBase/EvtPDL.hh"
30 #include "EvtGenBase/EvtReport.hh"
31 #include "EvtGenModels/EvtSTSCP.hh"
32 #include "EvtGenBase/EvtId.hh"
33 #include <string>
34 #include "EvtGenBase/EvtConst.hh"
35
36 EvtSTSCP::~EvtSTSCP() {}
37
38 std::string EvtSTSCP::getName(){
39
40   return "STS_CP";     
41
42 }
43
44 void EvtSTSCP::initProbMax(){
45
46   //This is probably not quite right, but it should do as a start...
47   //Anders
48
49   setProbMax(20*(getArg(3)*getArg(3)+getArg(5)*getArg(5)));
50
51 }
52
53 EvtDecayBase* EvtSTSCP::clone(){
54
55   return new EvtSTSCP;
56
57 }
58
59 void EvtSTSCP::init(){
60
61   // check that there are 7 arguments
62   checkNArg(7);
63   checkNDaug(2);
64
65   checkSpinParent(EvtSpinType::SCALAR);
66
67   checkSpinDaughter(0,EvtSpinType::TENSOR);
68   checkSpinDaughter(1,EvtSpinType::SCALAR);
69
70 }
71
72
73 void EvtSTSCP::decay( EvtParticle *p){
74
75   //added by Lange Jan4,2000
76   static EvtId B0=EvtPDL::getId("B0");
77   static EvtId B0B=EvtPDL::getId("anti-B0");
78
79   double t;
80   EvtId other_b;
81
82   EvtParticle *t1;
83   p->initializePhaseSpace(getNDaug(),getDaugs());
84   t1 = p->getDaug(0);
85   EvtVector4R momt = t1->getP4();
86   EvtVector4R moms = p->getDaug(1)->getP4();
87   double masst = t1->mass();
88
89   EvtCPUtil::getInstance()->OtherB(p,t,other_b,0.5);
90
91   double m_parent = p->mass();
92
93    EvtComplex amp;
94
95    EvtComplex A,Abar;
96
97    A=EvtComplex(getArg(3)*cos(getArg(4)),getArg(3)*sin(getArg(4)));
98    Abar=EvtComplex(getArg(5)*cos(getArg(6)),getArg(5)*sin(getArg(6)));
99
100    if (other_b==B0B){
101      amp=A*cos(getArg(1)*t/(2*EvtConst::c))+
102        EvtComplex(cos(-2.0*getArg(0)),sin(-2.0*getArg(0)))*
103        getArg(2)*EvtComplex(0.0,1.0)*Abar*sin(getArg(1)*t/(2*EvtConst::c));
104    }
105    if (other_b==B0){
106      amp=A*EvtComplex(cos(2.0*getArg(0)),sin(2.0*getArg(0)))*
107        EvtComplex(0.0,1.0)*sin(getArg(1)*t/(2*EvtConst::c))+       
108        getArg(2)*Abar*cos(getArg(1)*t/(2*EvtConst::c));
109    }
110
111   EvtVector4R p4_parent;
112
113   p4_parent=momt+moms;
114
115   double norm=masst*masst/(m_parent*momt.d3mag()*momt.d3mag());
116  
117    
118    vertex(0,amp*norm*t1->epsTensorParent(0).cont1(p4_parent)*p4_parent);
119    vertex(1,amp*norm*t1->epsTensorParent(1).cont1(p4_parent)*p4_parent);
120    vertex(2,amp*norm*t1->epsTensorParent(2).cont1(p4_parent)*p4_parent);
121    vertex(3,amp*norm*t1->epsTensorParent(3).cont1(p4_parent)*p4_parent);
122    vertex(4,amp*norm*t1->epsTensorParent(4).cont1(p4_parent)*p4_parent);
123
124   return ;
125 }
126
127 std::string EvtSTSCP::getParamName(int i) {
128   switch(i) {
129   case 0:
130     return "weakPhase";
131   case 1:
132     return "deltaM";
133   case 2:
134     return "finalStateCP";
135   case 3:
136     return "Af";
137   case 4:
138     return "AfPhase";
139   case 5:
140     return "Abarf";
141   case 6:
142     return "AbarfPhase";
143   default:
144     return "";
145   }
146 }
147
148 std::string EvtSTSCP::getParamDefault(int i) {
149   switch(i) {
150   case 3:
151     return "1.0";
152   case 4:
153     return "0.0";
154   case 5:
155     return "1.0";
156   case 6:
157     return "0.0";
158   default:
159     return "";
160   }
161 }