]> git.uio.no Git - u/mrichter/AliRoot.git/blame - TEvtGen/EvtGenBase/EvtTensorParticle.cxx
add opening angle versus energy asymmetry histogram
[u/mrichter/AliRoot.git] / TEvtGen / EvtGenBase / EvtTensorParticle.cxx
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: EvtTensorParticle.cc
12//
13// Description: Class to describe spin 2 particles.
14//
15// Modification history:
16//
17// DJL/RYD September 25,1996 Module created
18//
19//------------------------------------------------------------------------
20//
21#include "EvtGenBase/EvtPatches.hh"
22#include <stdlib.h>
23#include <iostream>
24#include <math.h>
25#include "EvtGenBase/EvtComplex.hh"
26#include "EvtGenBase/EvtVector4R.hh"
27#include "EvtGenBase/EvtTensor4C.hh"
28#include "EvtGenBase/EvtVector4C.hh"
29#include "EvtGenBase/EvtTensorParticle.hh"
30#include "EvtGenBase/EvtReport.hh"
31
32EvtTensorParticle::~EvtTensorParticle(){}
33
34void EvtTensorParticle::init(EvtId part_n,const EvtVector4R& p4){
35
36 init(part_n,p4.get(0),p4.get(1)
37 ,p4.get(2),p4.get(3));
38
39 setLifetime();
40
41
42}
43
44void EvtTensorParticle::init(EvtId part_n,double e,double px,double py,double pz){
45
46 _validP4=true;
47 setp(e,px,py,pz);
48 setpart_num(part_n);
49
50 eps[0].setdiag(0.0,-1.0/sqrt(6.0),-1.0/sqrt(6.0),
51 2.0/sqrt(6.0));
52 eps[1].setdiag(0.0,1.0/sqrt(2.0),-1.0/sqrt(2.0),0.0);
53 eps[2].setdiag(0.0,0.0,0.0,0.0);
54 eps[3].setdiag(0.0,0.0,0.0,0.0);
55 eps[4].setdiag(0.0,0.0,0.0,0.0);
56
57 eps[2].set(1,2,EvtComplex(1.0/sqrt(2.0),0.0));
58 eps[2].set(2,1,EvtComplex(1.0/sqrt(2.0),0.0));
59 eps[3].set(1,3,EvtComplex(1.0/sqrt(2.0),0.0));
60 eps[3].set(3,1,EvtComplex(1.0/sqrt(2.0),0.0));
61 eps[4].set(2,3,EvtComplex(1.0/sqrt(2.0),0.0));
62 eps[4].set(3,2,EvtComplex(1.0/sqrt(2.0),0.0));
63
64 setLifetime();
65
66}
67
68
69void EvtTensorParticle::init(EvtId part_n,const EvtVector4R& p4,
70 const EvtTensor4C& epsin1,
71 const EvtTensor4C& epsin2,
72 const EvtTensor4C& epsin3,
73 const EvtTensor4C& epsin4,
74 const EvtTensor4C& epsin5){
75
76 _validP4=true;
77 setp(p4);
78 setpart_num(part_n);
79
80 eps[0]=epsin1;
81 eps[1]=epsin2;
82 eps[2]=epsin3;
83 eps[3]=epsin4;
84 eps[4]=epsin5;
85
86 setLifetime();
87
88}
89
90
91
92EvtTensor4C EvtTensorParticle::epsTensorParent(int i) const {
93
94 EvtTensor4C temp=eps[i];
95
96 temp.applyBoostTo(this->getP4());
97 return temp;
98
99} //epsParent
100
101
102EvtTensor4C EvtTensorParticle::epsTensor(int i) const {
103
104 return eps[i];
105
106} //eps
107
108
109
110EvtSpinDensity EvtTensorParticle::rotateToHelicityBasis() const{
111
112
113 static EvtVector4C eplus(0.0,-1.0/sqrt(2.0),EvtComplex(0.0,-1.0/sqrt(2.0)),0.0);
114 static EvtVector4C ezero(0.0,0.0,0.0,1.0);
115 static EvtVector4C eminus(0.0,1.0/sqrt(2.0),EvtComplex(0.0,-1.0/sqrt(2.0)),0.0);
116
117 static EvtTensor4C dPpp(directProd(eplus,eplus));
118 static EvtTensor4C dPp0(directProd(eplus,ezero));
119 static EvtTensor4C dP0p(directProd(ezero,eplus));
120 static EvtTensor4C dPpm(directProd(eplus,eminus));
121 static EvtTensor4C dP00(directProd(ezero,ezero));
122 static EvtTensor4C dPmp(directProd(eminus,eplus));
123 static EvtTensor4C dPmm(directProd(eminus,eminus));
124 static EvtTensor4C dPm0(directProd(eminus,ezero));
125 static EvtTensor4C dP0m(directProd(ezero,eminus));
126
127 static EvtTensor4C es0(conj(dPpp));
128 static EvtTensor4C es1(conj((1/sqrt(2.0))*dPp0 +(1/sqrt(2.0))*dP0p));
129 static EvtTensor4C es2(conj((1/sqrt(6.0))*dPpm +(2/sqrt(6.0))*dP00 +(1/sqrt(6.0))*dPmp));
130 static EvtTensor4C es3(conj((1/sqrt(2.0))*dPm0 +(1/sqrt(2.0))*dP0m));
131 static EvtTensor4C es4(conj(dPmm));
132
133
134 EvtSpinDensity R;
135 R.setDim(5);
136
137 for (int j=0; j<5; j++) {
138 R.set(0,j,cont(es0,eps[j]));
139 R.set(1,j,cont(es1,eps[j]));
140 R.set(2,j,cont(es2,eps[j]));
141 R.set(3,j,cont(es3,eps[j]));
142 R.set(4,j,cont(es4,eps[j]));
143 }
144 return R;
145
146}
147
148
149EvtSpinDensity EvtTensorParticle::rotateToHelicityBasis(double alpha,
150 double beta,
151 double gamma) const{
152
153 EvtTensor4C es[5];
154
155 static EvtVector4C eplus(0.0,-1.0/sqrt(2.0),EvtComplex(0.0,-1.0/sqrt(2.0)),0.0);
156 static EvtVector4C ezero(0.0,0.0,0.0,1.0);
157 static EvtVector4C eminus(0.0,1.0/sqrt(2.0),EvtComplex(0.0,-1.0/sqrt(2.0)),0.0);
158
159 eplus.applyRotateEuler(alpha,beta,gamma);
160 ezero.applyRotateEuler(alpha,beta,gamma);
161 eminus.applyRotateEuler(alpha,beta,gamma);
162
163 for (int i=0; i<5; i++) es[i].zero();
164
165 es[0]=directProd(eplus,eplus);
166 es[1] =(1/sqrt(2.0))*directProd(eplus,ezero)
167 +(1/sqrt(2.0))*directProd(ezero,eplus);
168 es[2] =(1/sqrt(6.0))*directProd(eplus,eminus)
169 +(2/sqrt(6.0))*directProd(ezero,ezero)
170 +(1/sqrt(6.0))*directProd(eminus,eplus);
171 es[3] =(1/sqrt(2.0))*directProd(eminus,ezero)
172 +(1/sqrt(2.0))*directProd(ezero,eminus);
173 es[4]=directProd(eminus,eminus);
174
175 for (int i=0; i<5; i++) es[i]=conj(es[i]);
176
177 EvtSpinDensity R;
178 R.setDim(5);
179
180 for (int i=0; i<5; i++)
181 for (int j=0; j<5; j++)
182 R.set(i,j,cont(es[i],eps[j]));
183
184 return R;
185
186}
187
188
189
190
191
192
193
194