Fix bug in building local list of valid files.
[u/mrichter/AliRoot.git] / TEvtGen / EvtGenModels / EvtSVVCP.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: EvtSVVCP.cc
12 //
13 // Description: The decay of a scalar to two vector particles are 
14 //              performed with CP violation. E.g. B->J/psi K*.
15 //
16 // Modification history:
17 //
18 //    RYD       January 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/EvtPDL.hh"
28 #include "EvtGenModels/EvtSVVHelAmp.hh"
29 #include "EvtGenBase/EvtReport.hh"
30 #include "EvtGenModels/EvtSVVCP.hh"
31 #include "EvtGenBase/EvtId.hh"
32 #include <string>
33 #include "EvtGenBase/EvtConst.hh"
34
35 EvtSVVCP::~EvtSVVCP() {}
36
37 std::string EvtSVVCP::getName(){
38
39   return "SVV_CP";     
40
41 }
42
43
44 EvtDecayBase* EvtSVVCP::clone(){
45
46   return new EvtSVVCP;
47
48 }
49
50 void EvtSVVCP::init(){
51
52   // check that there are 9 arguments
53   checkNArg(9);
54   checkNDaug(2);
55
56   checkSpinParent(EvtSpinType::SCALAR);
57
58   checkSpinDaughter(0,EvtSpinType::VECTOR);
59   checkSpinDaughter(1,EvtSpinType::VECTOR);
60
61 }
62
63 void EvtSVVCP::initProbMax(){
64
65   //This is probably not quite right, but it should do as a start...
66   //Anders
67
68   setProbMax(2*(getArg(3)*getArg(3)+getArg(5)*getArg(5)+getArg(7)*getArg(7)));
69
70 }
71
72 void EvtSVVCP::decay( EvtParticle *p){
73
74   //added by Lange Jan4,2000
75   static EvtId B0=EvtPDL::getId("B0");
76   static EvtId B0B=EvtPDL::getId("anti-B0");
77
78   double t;
79   EvtId other_b;
80
81   EvtCPUtil::getInstance()->OtherB(p,t,other_b,0.5);
82
83    EvtComplex G0P,G1P,G1M;
84
85    G1P=EvtComplex(getArg(3)*cos(getArg(4)),getArg(3)*sin(getArg(4)));
86    G0P=EvtComplex(getArg(5)*cos(getArg(6)),getArg(5)*sin(getArg(6)));
87    G1M=EvtComplex(getArg(7)*cos(getArg(8)),getArg(7)*sin(getArg(8)));
88
89    EvtComplex lambda_km=EvtComplex(cos(-2*getArg(0)),sin(-2*getArg(0)));
90
91    double cdmt=cos(getArg(1)*t/(2*EvtConst::c));
92    double sdmt=sin(getArg(1)*t/(2*EvtConst::c));
93
94    EvtComplex cG0P,cG1P,cG1M;
95
96    if (other_b==B0B){
97      cG0P=G0P*(cdmt+lambda_km*EvtComplex(0.0,getArg(2)*sdmt));
98      cG1P=G1P*(cdmt+lambda_km*EvtComplex(0.0,getArg(2)*sdmt));
99      cG1M=G1M*(cdmt-lambda_km*EvtComplex(0.0,getArg(2)*sdmt));
100    }
101    if (other_b==B0){
102      cG0P=G0P*(cdmt+(1.0/lambda_km)*EvtComplex(0.0,getArg(2)*sdmt));
103      cG1P=G1P*(cdmt+(1.0/lambda_km)*EvtComplex(0.0,getArg(2)*sdmt));
104      cG1M=-G1M*(cdmt-(1.0/lambda_km)*EvtComplex(0.0,getArg(2)*sdmt));
105
106    }
107  
108    EvtComplex A0,AP,AM;
109
110    A0=cG0P/sqrt(2.0);
111    AP=(cG1P+cG1M)/sqrt(2.0); 
112    AM=(cG1P-cG1M)/sqrt(2.0); 
113
114    EvtSVVHelAmp::SVVHel(p,_amp2,getDaug(0),getDaug(1),AP,A0,AM);
115
116   return ;
117 }
118
119 std::string EvtSVVCP::getParamName(int i) {
120   switch(i) {
121   case 0:
122     return "weakPhase";
123   case 1:
124     return "deltaM";
125   case 2:
126     return "eta";
127   case 3:
128     return "G1Plus";
129   case 4:
130     return "G1PlusPhase";
131   case 5:
132     return "G0Plus";
133   case 6:
134     return "G0PlusPhase";
135   case 7:
136     return "G1Minus";
137   case 8:
138     return "G1MinusPhase";
139   default:
140     return "";
141   }
142 }
143
144 std::string EvtSVVCP::getParamDefault(int i) {
145   switch(i) {
146   case 3:
147     return "1.0";
148   case 4:
149     return "0.0";
150   case 5:
151     return "1.0";
152   case 6:
153     return "0.0";
154   case 7:
155     return "1.0";
156   case 8:
157     return "0.0";
158   default:
159     return "";
160   }
161 }