]> git.uio.no Git - u/mrichter/AliRoot.git/blame - TEvtGen/EvtGenModels/EvtSVVHelCPMix.cpp
ATO-78 - Technical changes to compare different calibrations
[u/mrichter/AliRoot.git] / TEvtGen / EvtGenModels / EvtSVVHelCPMix.cpp
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) 1998 Caltech, UCSB
10//
11// Module: EvtSVVHelCPMix.cc
12//
13// Description: Routine to decay scalar -> 2 vectors
14// by specifying the helicity amplitudes, taking appropriate
15// weak phases into account to get mixing and CP violation through
16// interference. Based on EvtSVVHelAmp. Particularly appropriate for
17// Bs->J/Psi+Phi
18//
19// Modification history:
20//
21// RYD November 24, 1996 EvtSVVHelAmp Module
22// CATMORE March 2004 Modified to EvtSVVHelCPMix
23//
24// Model takes the following as user-specified arguments:
25// deltaM, averageM - mass diference and average of light and heavy mass eigenstates (real scalars)
26// gamma, deltagamma - average width and width difference of the l and h eigenstates (real scalars)
27// delta1, delta2 - strong phases (real scalars)
28// direct weak phase (real scalar) (for Bs->JPsiPhi this will be zero)
29// weak mixing phase (real scalar) (this is equal to 2*arg(Vts Vtb) for Bs->JPsiPhi)
30// Magnitudes of helicity amplitudes as in SVV_HELAMP
31// See Phys Rev D 34 p1404 - p1417 and chapters 5 and 7 of Physics Reports 370 p537-680 for more details
32//------------------------------------------------------------------------
33//
34#ifdef WIN32
35 #pragma warning( disable : 4786 )
36 // Disable anoying warning about symbol size
37#endif
38#include <iostream>
39#include <fstream>
40#include <stdlib.h>
41#include <ctype.h>
42#include "EvtGenBase/EvtParticle.hh"
43#include "EvtGenBase/EvtGenKine.hh"
44#include "EvtGenBase/EvtPDL.hh"
45#include "EvtGenBase/EvtVector4C.hh"
46#include "EvtGenBase/EvtTensor4C.hh"
47#include "EvtGenBase/EvtVector3C.hh"
48#include "EvtGenBase/EvtVector3R.hh"
49#include "EvtGenBase/EvtTensor3C.hh"
50#include "EvtGenBase/EvtReport.hh"
51#include "EvtGenModels/EvtSVVHelCPMix.hh"
52#include "EvtGenBase/EvtId.hh"
53#include <string>
54
55EvtSVVHelCPMix::~EvtSVVHelCPMix() {}
56
57std::string EvtSVVHelCPMix::getName(){
58
59 return "SVVHELCPMIX";
60
61}
62
63
64EvtDecayBase* EvtSVVHelCPMix::clone(){
65
66 return new EvtSVVHelCPMix;
67
68}
69
70void EvtSVVHelCPMix::init(){
71
72 // check that there are 12 arguments
73 checkNArg(12);
74 checkNDaug(2);
75
76 checkSpinParent(EvtSpinType::SCALAR);
77
78 checkSpinDaughter(0,EvtSpinType::VECTOR);
79 checkSpinDaughter(1,EvtSpinType::VECTOR);
80
81 hp = EvtComplex(getArg(0)*cos(getArg(1)),getArg(0)*sin(getArg(1)));
82 h0 = EvtComplex(getArg(2)*cos(getArg(3)),getArg(2)*sin(getArg(3)));
83 hm = EvtComplex(getArg(4)*cos(getArg(5)),getArg(4)*sin(getArg(5)));
84 averageM = getArg(6);
85 deltaM = getArg(7);
86 gamma = getArg(8);
87 deltagamma = getArg(9);
88 weakmixingphase = EvtComplex(cos(getArg(10)),sin(getArg(10)));
89 weakdirectphase = EvtComplex(cos(getArg(11)),sin(getArg(11)));
90}
91
92
93void EvtSVVHelCPMix::initProbMax(){
94
95 setProbMax(getArg(0)*getArg(0)+getArg(2)*getArg(2)+getArg(4)*getArg(4));
96
97}
98
99
100void EvtSVVHelCPMix::decay( EvtParticle *p){
101
102 EvtParticle* parent = p;
103 EvtAmp& amp = _amp2;
104 EvtId n_v1 = getDaug(0);
105 EvtId n_v2 = getDaug(1);
106
107 // Routine to decay a vector into a vector and scalar. Started
108 // by ryd on Oct 17, 1996.
109 // Modified by J.Catmore to take account of CP-violation and mixing
110
111 int tndaug = 2;
112 EvtId tdaug[2];
113 EvtId Bs=EvtPDL::getId("B_s0");
114 EvtId antiBs=EvtPDL::getId("anti-B_s0");
115 tdaug[0] = n_v1;
116 tdaug[1] = n_v2;
117
118// Phase space and kinematics
119
120 parent->initializePhaseSpace(tndaug,tdaug);
121
122 EvtParticle *v1,*v2;
123 v1 = parent->getDaug(0);
124 v2 = parent->getDaug(1);
125
126 EvtVector4R momv1 = v1->getP4();
da0e9ce3 127
128 EvtVector3R v1dir(momv1.get(1),momv1.get(2),momv1.get(3));
129 v1dir=v1dir/v1dir.d3mag();
130
0ca57c2f 131 // Definition of quantities used in construction of complex amplitudes:
da0e9ce3 132
0ca57c2f 133 EvtTensor3C M; // Tensor as defined in EvtGen manual, equ 117
134 EvtComplex a,b,c; // Helicity amplitudes; EvtGen manual eqns 126-128, also see Phys Lett B 369 p144-150 eqn 15
135 //EvtComplex deltamu = EvtComplex(deltaM, -0.5*deltagamma); // See Phys Rev D 34 p1404
da0e9ce3 136
0ca57c2f 137 // conversion from times in mm/c to natural units [GeV]^-1
138 double t = ((parent->getLifetime())/2.998e11)*6.58e-25;
da0e9ce3 139
0ca57c2f 140 // The following two quantities defined in Phys Rev D 34 p1404
141 EvtComplex fplus = EvtComplex(cos(averageM*t),-1.*sin(averageM*t))*exp(-(gamma/2.0)*t)*
da0e9ce3 142 (cos(0.5*deltaM*t)*cosh(0.25*deltagamma*t)+EvtComplex(0.0,sin(0.5*deltaM*t)*sinh(0.25*deltagamma*t)));
0ca57c2f 143 EvtComplex fminus = EvtComplex(cos(averageM*t), -1.*sin(averageM*t))*exp(-(gamma/2.0)*t)*EvtComplex(0.0,1.0)*
da0e9ce3 144 (sin(0.5*deltaM*t)*cosh(0.25*deltagamma*t)-EvtComplex(0.0,1.0)*sinh(0.25*deltagamma*t)*cos(0.5*deltaM*t));
145
146// See EvtGen manual pp 106-107
147
148 a=-0.5*(hp+hm);
149 b=EvtComplex(0.0,0.5)*(hp-hm);
150 c=(h0+0.5*(hp+hm));
151
152 M=a*EvtTensor3C::id()+
0ca57c2f 153 b*EvtGenFunctions::eps(v1dir)+
154 c*EvtGenFunctions::directProd(v1dir,v1dir);
da0e9ce3 155
156 EvtVector3C t0=M.cont1(v1->eps(0).vec().conj());
157 EvtVector3C t1=M.cont1(v1->eps(1).vec().conj());
158 EvtVector3C t2=M.cont1(v1->eps(2).vec().conj());
159
160 EvtVector3C eps0=v2->eps(0).vec().conj();
161 EvtVector3C eps1=v2->eps(1).vec().conj();
162 EvtVector3C eps2=v2->eps(2).vec().conj();
163
164// We need two sets of equations, one for mesons which were in the Bs state at t=0, and another
165// for those which were in the antiBs state. Each equation consists of a sum of amplitudes - mod-squaring gives the interference terms.
166
167 EvtComplex amplSum00, amplSum01, amplSum02;
168 EvtComplex amplSum10, amplSum11, amplSum12;
169 EvtComplex amplSum20, amplSum21, amplSum22;
170
171 // First the Bs state:
172
173 if (parent->getId()==Bs) {
174
175 amplSum00 = (fplus*weakdirectphase*t0*eps0) + (fminus*(1.0/weakdirectphase)*weakmixingphase*t0*eps0);
176 amplSum01 = (fplus*weakdirectphase*t0*eps1) + (fminus*(1.0/weakdirectphase)*weakmixingphase*t0*eps1);
177 amplSum02 = (fplus*weakdirectphase*t0*eps2) + (fminus*(1.0/weakdirectphase)*weakmixingphase*t0*eps2);
178
179 amplSum10 = (fplus*weakdirectphase*t1*eps0) + (fminus*(1.0/weakdirectphase)*weakmixingphase*t1*eps0);
180 amplSum11 = (fplus*weakdirectphase*t1*eps1) + (fminus*(1.0/weakdirectphase)*weakmixingphase*t1*eps1);
181 amplSum12 = (fplus*weakdirectphase*t1*eps2) + (fminus*(1.0/weakdirectphase)*weakmixingphase*t1*eps2);
182
183 amplSum20 = (fplus*weakdirectphase*t2*eps0) + (fminus*(1.0/weakdirectphase)*weakmixingphase*t2*eps0);
184 amplSum21 = (fplus*weakdirectphase*t2*eps1) + (fminus*(1.0/weakdirectphase)*weakmixingphase*t2*eps1);
185 amplSum22 = (fplus*weakdirectphase*t2*eps2) + (fminus*(1.0/weakdirectphase)*weakmixingphase*t2*eps2);
186 }
187
188 // Now the anti-Bs state:
189
190 if (parent->getId()==antiBs) {
191
192 amplSum00 = (fminus*weakdirectphase*(1.0/weakmixingphase)*t0*eps0) + (fplus*(1.0/weakdirectphase)*t0*eps0);
193 amplSum01 = (fminus*weakdirectphase*(1.0/weakmixingphase)*t0*eps1) + (fplus*(1.0/weakdirectphase)*t0*eps1);
194 amplSum02 = (fminus*weakdirectphase*(1.0/weakmixingphase)*t0*eps2) + (fplus*(1.0/weakdirectphase)*t0*eps2);
195
196 amplSum10 = (fminus*weakdirectphase*(1.0/weakmixingphase)*t1*eps0) + (fplus*(1.0/weakdirectphase)*t1*eps0);
197 amplSum11 = (fminus*weakdirectphase*(1.0/weakmixingphase)*t1*eps1) + (fplus*(1.0/weakdirectphase)*t1*eps1);
198 amplSum12 = (fminus*weakdirectphase*(1.0/weakmixingphase)*t1*eps2) + (fplus*(1.0/weakdirectphase)*t1*eps2);
199
200 amplSum20 = (fminus*weakdirectphase*(1.0/weakmixingphase)*t2*eps0) + (fplus*(1.0/weakdirectphase)*t2*eps0);
201 amplSum21 = (fminus*weakdirectphase*(1.0/weakmixingphase)*t2*eps1) + (fplus*(1.0/weakdirectphase)*t2*eps1);
202 amplSum22 = (fminus*weakdirectphase*(1.0/weakmixingphase)*t2*eps2) + (fplus*(1.0/weakdirectphase)*t2*eps2);
203
204 }
205
206 // Now set the amplitude
207
208 amp.vertex(0,0,amplSum00);
209 report(INFO,"EvtGen") << "00: " << amplSum00 << std::endl;
210 amp.vertex(0,1,amplSum01);
211 report(INFO,"EvtGen") << "01: " << amplSum01 << std::endl;
212 amp.vertex(0,2,amplSum02);
213 report(INFO,"EvtGen") << "02: " << amplSum02 << std::endl;
214
215 amp.vertex(1,0,amplSum10);
216 report(INFO,"EvtGen") << "10: " << amplSum10 << std::endl;
217 amp.vertex(1,1,amplSum11);
218 report(INFO,"EvtGen") << "11: " << amplSum11 << std::endl;
219 amp.vertex(1,2,amplSum12);
220 report(INFO,"EvtGen") << "12: " << amplSum12 << std::endl;
221
222 amp.vertex(2,0,amplSum20);
223 report(INFO,"EvtGen") << "20: " << amplSum20 << std::endl;
224 amp.vertex(2,1,amplSum21);
225 report(INFO,"EvtGen") << "21: " << amplSum21 << std::endl;
226 amp.vertex(2,2,amplSum22);
227 report(INFO,"EvtGen") << "22: " << amplSum22 << std::endl;
228
229 return ;
230
231}
232
0ca57c2f 233std::string EvtSVVHelCPMix::getParamName(int i) {
234 switch(i) {
235 case 0:
236 return "plusHelAmp";
237 case 1:
238 return "plusHelAmpPhase";
239 case 2:
240 return "zeroHelAmp";
241 case 3:
242 return "zeroHelAmpPhase";
243 case 4:
244 return "minusHelAmp";
245 case 5:
246 return "minusHelAmpPhase";
247 case 6:
248 return "averageM";
249 case 7:
250 return "deltaM";
251 case 8:
252 return "gamma";
253 case 9:
254 return "deltaGamma";
255 case 10:
256 return "weakMixPhase";
257 case 11:
258 return "weakDirectPhase";
259 default:
260 return "";
261 }
262}
da0e9ce3 263
0ca57c2f 264std::string EvtSVVHelCPMix::getParamDefault(int i) {
265 switch(i) {
266 case 0:
267 return "1.0";
268 case 1:
269 return "0.0";
270 case 2:
271 return "1.0";
272 case 3:
273 return "0.0";
274 case 4:
275 return "1.0";
276 case 5:
277 return "0.0";
278 default:
279 return "";
280 }
281}