BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
EvtTensorParticle.cc
Go to the documentation of this file.
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 "EvtTensorParticle.hh"
22#include "EvtComplex.hh"
23#include "EvtPatches.hh"
24#include "EvtReport.hh"
25#include "EvtTensor4C.hh"
26#include "EvtVector4C.hh"
27#include "EvtVector4R.hh"
28#include <iostream>
29#include <math.h>
30#include <stdlib.h>
31
33
34void EvtTensorParticle::init( EvtId part_n, const EvtVector4R& p4 ) {
35
36 init( part_n, p4.get( 0 ), p4.get( 1 ), p4.get( 2 ), p4.get( 3 ) );
37
39}
40
41void EvtTensorParticle::init( EvtId part_n, double e, double px, double py, double pz ) {
42
43 _validP4 = true;
44 setp( e, px, py, pz );
45 setpart_num( part_n );
46
47 eps[0].setdiag( 0.0, -1.0 / sqrt( 6.0 ), -1.0 / sqrt( 6.0 ), 2.0 / sqrt( 6.0 ) );
48 eps[1].setdiag( 0.0, 1.0 / sqrt( 2.0 ), -1.0 / sqrt( 2.0 ), 0.0 );
49 eps[2].setdiag( 0.0, 0.0, 0.0, 0.0 );
50 eps[3].setdiag( 0.0, 0.0, 0.0, 0.0 );
51 eps[4].setdiag( 0.0, 0.0, 0.0, 0.0 );
52
53 eps[2].set( 1, 2, EvtComplex( 1.0 / sqrt( 2.0 ), 0.0 ) );
54 eps[2].set( 2, 1, EvtComplex( 1.0 / sqrt( 2.0 ), 0.0 ) );
55 eps[3].set( 1, 3, EvtComplex( 1.0 / sqrt( 2.0 ), 0.0 ) );
56 eps[3].set( 3, 1, EvtComplex( 1.0 / sqrt( 2.0 ), 0.0 ) );
57 eps[4].set( 2, 3, EvtComplex( 1.0 / sqrt( 2.0 ), 0.0 ) );
58 eps[4].set( 3, 2, EvtComplex( 1.0 / sqrt( 2.0 ), 0.0 ) );
59
61}
62
64
65 EvtTensor4C temp = eps[i];
66
67 temp.applyBoostTo( this->getP4() );
68 return temp;
69
70} // epsParent
71
72EvtTensor4C EvtTensorParticle::epsTensor( int i ) const { return eps[i]; } // eps
73
75
76 static EvtVector4C eplus( 0.0, -1.0 / sqrt( 2.0 ), EvtComplex( 0.0, -1.0 / sqrt( 2.0 ) ),
77 0.0 );
78 static EvtVector4C ezero( 0.0, 0.0, 0.0, 1.0 );
79 static EvtVector4C eminus( 0.0, 1.0 / sqrt( 2.0 ), EvtComplex( 0.0, -1.0 / sqrt( 2.0 ) ),
80 0.0 );
81
82 static EvtTensor4C dPpp( directProd( eplus, eplus ) );
83 static EvtTensor4C dPp0( directProd( eplus, ezero ) );
84 static EvtTensor4C dP0p( directProd( ezero, eplus ) );
85 static EvtTensor4C dPpm( directProd( eplus, eminus ) );
86 static EvtTensor4C dP00( directProd( ezero, ezero ) );
87 static EvtTensor4C dPmp( directProd( eminus, eplus ) );
88 static EvtTensor4C dPmm( directProd( eminus, eminus ) );
89 static EvtTensor4C dPm0( directProd( eminus, ezero ) );
90 static EvtTensor4C dP0m( directProd( ezero, eminus ) );
91
92 static EvtTensor4C es0( conj( dPpp ) );
93 static EvtTensor4C es1( conj( ( 1 / sqrt( 2.0 ) ) * dPp0 + ( 1 / sqrt( 2.0 ) ) * dP0p ) );
94 static EvtTensor4C es2( conj( ( 1 / sqrt( 6.0 ) ) * dPpm + ( 2 / sqrt( 6.0 ) ) * dP00 +
95 ( 1 / sqrt( 6.0 ) ) * dPmp ) );
96 static EvtTensor4C es3( conj( ( 1 / sqrt( 2.0 ) ) * dPm0 + ( 1 / sqrt( 2.0 ) ) * dP0m ) );
97 static EvtTensor4C es4( conj( dPmm ) );
98
100 R.SetDim( 5 );
101
102 for ( int j = 0; j < 5; j++ )
103 {
104 R.Set( 0, j, cont( es0, eps[j] ) );
105 R.Set( 1, j, cont( es1, eps[j] ) );
106 R.Set( 2, j, cont( es2, eps[j] ) );
107 R.Set( 3, j, cont( es3, eps[j] ) );
108 R.Set( 4, j, cont( es4, eps[j] ) );
109 }
110 return R;
111}
112
114 double gamma ) const {
115
116 EvtTensor4C es[5];
117
118 static EvtVector4C eplus( 0.0, -1.0 / sqrt( 2.0 ), EvtComplex( 0.0, -1.0 / sqrt( 2.0 ) ),
119 0.0 );
120 static EvtVector4C ezero( 0.0, 0.0, 0.0, 1.0 );
121 static EvtVector4C eminus( 0.0, 1.0 / sqrt( 2.0 ), EvtComplex( 0.0, -1.0 / sqrt( 2.0 ) ),
122 0.0 );
123
124 eplus.applyRotateEuler( alpha, beta, gamma );
125 ezero.applyRotateEuler( alpha, beta, gamma );
126 eminus.applyRotateEuler( alpha, beta, gamma );
127
128 for ( int i = 0; i < 5; i++ ) es[i].zero();
129
130 es[0] = directProd( eplus, eplus );
131 es[1] = ( 1 / sqrt( 2.0 ) ) * directProd( eplus, ezero ) +
132 ( 1 / sqrt( 2.0 ) ) * directProd( ezero, eplus );
133 es[2] = ( 1 / sqrt( 6.0 ) ) * directProd( eplus, eminus ) +
134 ( 2 / sqrt( 6.0 ) ) * directProd( ezero, ezero ) +
135 ( 1 / sqrt( 6.0 ) ) * directProd( eminus, eplus );
136 es[3] = ( 1 / sqrt( 2.0 ) ) * directProd( eminus, ezero ) +
137 ( 1 / sqrt( 2.0 ) ) * directProd( ezero, eminus );
138 es[4] = directProd( eminus, eminus );
139
140 for ( int i = 0; i < 5; i++ ) es[i] = conj( es[i] );
141
143 R.SetDim( 5 );
144
145 for ( int i = 0; i < 5; i++ )
146 for ( int j = 0; j < 5; j++ ) R.Set( i, j, cont( es[i], eps[j] ) );
147
148 return R;
149}
Evt3Rank3C conj(const Evt3Rank3C &t2)
Evt3Rank3C directProd(const EvtVector3C &c1, const EvtVector3C &c2, const EvtVector3C &c3)
double alpha
EvtComplex cont(const EvtTensor4C &t1, const EvtTensor4C &t2)
const DifNumber zero
Definition EvtId.hh:27
void setLifetime()
const EvtVector4R & getP4() const
void setp(double e, double px, double py, double pz)
void setpart_num(EvtId particle_number)
void applyBoostTo(const EvtVector4R &p4)
EvtTensor4C epsTensorParent(int i) const
EvtTensor4C epsTensor(int i) const
void init(EvtId part_n, double e, double px, double py, double pz)
EvtSpinDensity rotateToHelicityBasis() const
void applyRotateEuler(double alpha, double beta, double gamma)
double get(int i) const