BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
EvtRaritaSchwingerParticle.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: EvtRaritaSchwingerParticle.cc
12//
13// Description: Class to describe spin 1/2 particles.
14//
15// Modification history:
16//
17// RYD August 9, 2000 Module created
18//
19//------------------------------------------------------------------------
20//
22#include "EvtComplex.hh"
23#include "EvtDiracSpinor.hh"
24#include "EvtPDL.hh"
25#include "EvtPatches.hh"
26#include "EvtReport.hh"
27#include "EvtSpinDensity.hh"
28#include "EvtVector4R.hh"
29#include <iostream>
30#include <math.h>
31#include <stdlib.h>
32using std::endl;
33
35
37
39
40 _validP4 = true;
41 setp( p4 );
42 setpart_num( id );
43
44 if ( EvtPDL::getStdHep( id ) == 0 )
45 {
46 report( ERROR, "EvtGen" ) << "Error in EvtRaritaSchwingerParticle::init, part_n="
47 << id.getId() << endl;
48 ::abort();
49 }
50
51 static EvtVector4R e1( 0.0, 1.0, 0.0, 0.0 );
52 static EvtVector4R e2( 0.0, 0.0, 1.0, 0.0 );
53 static EvtVector4R e3( 0.0, 0.0, 0.0, 1.0 );
54
55 if ( EvtPDL::getStdHep( id ) > 0 )
56 {
57
58 EvtDiracSpinor u1, u2;
59
60 u1.set( EvtComplex( sqrt( 2.0 * mass() ), 0.0 ), EvtComplex( 0.0, 0.0 ),
61 EvtComplex( 0.0, 0.0 ), EvtComplex( 0.0, 0.0 ) );
62 u2.set( EvtComplex( 0.0, 0.0 ), EvtComplex( sqrt( 2.0 * mass() ), 0.0 ),
63 EvtComplex( 0.0, 0.0 ), EvtComplex( 0.0, 0.0 ) );
64
65 _spinorRest[0] = dirProd( e3, u1 + u2 );
66 _spinorRest[1] = dirProd( e1 + EvtComplex( 0.0, 1.0 ) * e2, u1 );
67 _spinorRest[2] = dirProd( e1 - EvtComplex( 0.0, 1.0 ) * e2, u2 );
68 _spinorRest[3] =
69 dirProd( e1, ( u1 + u2 ) ) + dirProd( EvtComplex( 0.0, 1.0 ) * e2, ( u1 - u2 ) );
70
71 _spinor[0] = boostTo( _spinorRest[0], p4 );
72 _spinor[1] = boostTo( _spinorRest[1], p4 );
73 _spinor[2] = boostTo( _spinorRest[2], p4 );
74 _spinor[3] = boostTo( _spinorRest[3], p4 );
75 }
76 else
77 {
78
79 EvtDiracSpinor u1, u2;
80
81 u1.set( EvtComplex( 0.0, 0.0 ), EvtComplex( 0.0, 0.0 ),
82 EvtComplex( sqrt( 2.0 * mass() ), 0.0 ), EvtComplex( 0.0, 0.0 ) );
83 u2.set( EvtComplex( 0.0, 0.0 ), EvtComplex( 0.0, 0.0 ), EvtComplex( 0.0, 0.0 ),
84 EvtComplex( sqrt( 2.0 * mass() ), 0.0 ) );
85
86 _spinorRest[0] = dirProd( e3, ( u1 + u2 ) );
87 _spinorRest[1] = dirProd( e1 + EvtComplex( 0.0, 1.0 ) * e2, u1 );
88 _spinorRest[2] = dirProd( e1 - EvtComplex( 0.0, 1.0 ) * e2, u2 );
89 _spinorRest[3] =
90 dirProd( e1, ( u1 + u2 ) ) + dirProd( EvtComplex( 0.0, 1.0 ) * e2, ( u1 - u2 ) );
91
92 _spinor[0] = boostTo( _spinorRest[0], p4 );
93 _spinor[1] = boostTo( _spinorRest[1], p4 );
94 _spinor[2] = boostTo( _spinorRest[2], p4 );
95 _spinor[3] = boostTo( _spinorRest[3], p4 );
96 }
97
99}
100
102
103EvtRaritaSchwinger EvtRaritaSchwingerParticle::spRS( int i ) const { return _spinorRest[i]; }
104
106
107 double sqmt2 = sqrt( 2.0 * ( this->getP4().mass() ) );
108
109 EvtDiracSpinor spplus;
110 EvtDiracSpinor spminus;
111
112 if ( EvtPDL::getStdHep( getId() ) > 0 )
113 {
114 spplus.set( 1.0, 0.0, 0.0, 0.0 );
115 spminus.set( 0.0, 1.0, 0.0, 0.0 );
116 }
117 else
118 {
119 spplus.set( 0.0, 0.0, 1.0, 0.0 );
120 spminus.set( 0.0, 0.0, 0.0, 1.0 );
121 }
122
123 EvtVector4C eplus( 0.0, -1.0 / sqrt( 2.0 ), EvtComplex( 0.0, -1.0 / sqrt( 2.0 ) ), 0.0 );
124 EvtVector4C ezero( 0.0, 0.0, 0.0, 1.0 );
125 EvtVector4C eminus( 0.0, 1.0 / sqrt( 2.0 ), EvtComplex( 0.0, -1.0 / sqrt( 2.0 ) ), 0.0 );
126
127 EvtRaritaSchwinger sppp = dirProd( eplus, spplus );
128 EvtRaritaSchwinger spp = dirProd( sqrt( 2.0 / 3.0 ) * ezero, spplus ) +
129 dirProd( sqrt( 1.0 / 3.0 ) * eplus, spminus );
130 EvtRaritaSchwinger spm = dirProd( sqrt( 2.0 / 3.0 ) * ezero, spminus ) +
131 dirProd( sqrt( 1.0 / 3.0 ) * eminus, spplus );
132 EvtRaritaSchwinger spmm = dirProd( eminus, spminus );
133
134 //
135
137 R.SetDim( 4 );
138
139 for ( int i = 0; i < 4; i++ )
140 {
141 R.Set( 0, i, ( sppp * _spinorRest[i] ) / sqmt2 );
142 R.Set( 1, i, ( spp * _spinorRest[i] ) / sqmt2 );
143 R.Set( 2, i, ( spm * _spinorRest[i] ) / sqmt2 );
144 R.Set( 3, i, ( spmm * _spinorRest[i] ) / sqmt2 );
145 }
146
147 return R;
148}
149
151 double gamma ) const {
152
153 EvtDiracSpinor spplus;
154 EvtDiracSpinor spminus;
155
156 if ( EvtPDL::getStdHep( getId() ) > 0 )
157 {
158 spplus.set( 1.0, 0.0, 0.0, 0.0 );
159 spminus.set( 0.0, 1.0, 0.0, 0.0 );
160 }
161 else
162 {
163 spplus.set( 0.0, 0.0, 1.0, 0.0 );
164 spminus.set( 0.0, 0.0, 0.0, 1.0 );
165 }
166
167 EvtVector4C eplus( 0.0, -1.0 / sqrt( 2.0 ), EvtComplex( 0.0, -1.0 / sqrt( 2.0 ) ), 0.0 );
168 EvtVector4C ezero( 0.0, 0.0, 0.0, 1.0 );
169 EvtVector4C eminus( 0.0, 1.0 / sqrt( 2.0 ), EvtComplex( 0.0, -1.0 / sqrt( 2.0 ) ), 0.0 );
170
171 EvtRaritaSchwinger sppp = dirProd( eplus, spplus );
172 EvtRaritaSchwinger spp = dirProd( sqrt( 2.0 / 3.0 ) * ezero, spplus ) +
173 dirProd( sqrt( 1.0 / 3.0 ) * eplus, spminus );
174 EvtRaritaSchwinger spm = dirProd( sqrt( 2.0 / 3.0 ) * ezero, spminus ) +
175 dirProd( sqrt( 1.0 / 3.0 ) * eminus, spplus );
176 EvtRaritaSchwinger spmm = dirProd( eminus, spminus );
177 //
178
179 sppp.applyRotateEuler( alpha, beta, gamma );
180 spp.applyRotateEuler( alpha, beta, gamma );
181 spm.applyRotateEuler( alpha, beta, gamma );
182 spmm.applyRotateEuler( alpha, beta, gamma );
183
185 R.SetDim( 4 );
186
187 double sqmt2 = sqrt( 2.0 * ( this->getP4().mass() ) );
188
189 for ( int i = 0; i < 4; i++ )
190 {
191 R.Set( 0, i, ( sppp * _spinorRest[i] ) / sqmt2 );
192 R.Set( 1, i, ( spp * _spinorRest[i] ) / sqmt2 );
193 R.Set( 2, i, ( spm * _spinorRest[i] ) / sqmt2 );
194 R.Set( 3, i, ( spmm * _spinorRest[i] ) / sqmt2 );
195 }
196
197 return R;
198}
Double_t e1
Double_t e2
EvtDiracSpinor boostTo(const EvtDiracSpinor &sp, const EvtVector4R p4)
double alpha
EvtRaritaSchwinger dirProd(EvtVector4R v, EvtDiracSpinor u)
ostream & report(Severity severity, const char *facility)
Definition EvtReport.cc:34
@ ERROR
Definition EvtReport.hh:49
void set(const EvtComplex &sp0, const EvtComplex &sp1, const EvtComplex &sp2, const EvtComplex &sp3)
Definition EvtId.hh:27
static int getStdHep(EvtId id)
Definition EvtPDL.hh:61
EvtId getId() const
void setLifetime()
const EvtVector4R & getP4() const
void setp(double e, double px, double py, double pz)
double mass() const
void setpart_num(EvtId particle_number)
EvtRaritaSchwinger spRS(int) const
EvtRaritaSchwinger spRSParent(int) const
void init(EvtId id, const EvtVector4R &p4)
EvtSpinDensity rotateToHelicityBasis() const
void applyRotateEuler(double alpha, double beta, double gamma)