]> git.uio.no Git - u/mrichter/AliRoot.git/blame - TEvtGen/EvtGenBase/EvtDiracParticle.cxx
New plots for trending injector efficiencies (Melinda)
[u/mrichter/AliRoot.git] / TEvtGen / EvtGenBase / EvtDiracParticle.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: EvtDiracParticle.cc
12//
13// Description: Class to describe spin 1/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/EvtDiracParticle.hh"
27#include "EvtGenBase/EvtVector4R.hh"
28#include "EvtGenBase/EvtPDL.hh"
29#include "EvtGenBase/EvtReport.hh"
30#include "EvtGenBase/EvtSpinDensity.hh"
31#include "EvtGenBase/EvtGammaMatrix.hh"
32using std::endl;
33
34EvtDiracParticle::~EvtDiracParticle(){}
35
36
37EvtDiracParticle::EvtDiracParticle(){
38
39 return;
40
41}
42
43void EvtDiracParticle::init(EvtId part_n,const EvtVector4R& p4){
44
45 _validP4=true;
46 setp(p4);
47 setpart_num(part_n);
48
49 if (EvtPDL::getStdHep(part_n)==0){
50 report(ERROR,"EvtGen") << "Error in EvtDiracParticle::init, part_n="
51 << part_n.getId()<<endl;
52 ::abort();
53 }
54
55 if (EvtPDL::getStdHep(part_n)>0){
56
57 _spinorRest[0].set(EvtComplex(sqrt(2.0*mass()),0.0),EvtComplex(0.0,0.0),
58 EvtComplex(0.0,0.0),EvtComplex(0.0,0.0));
59 _spinorRest[1].set(EvtComplex(0.0,0.0),EvtComplex(sqrt(2.0*mass()),0.0),
60 EvtComplex(0.0,0.0),EvtComplex(0.0,0.0));
61
62 _spinorParent[0]=boostTo(_spinorRest[0],p4);
63 _spinorParent[1]=boostTo(_spinorRest[1],p4);
64
65
66 }
67 else{
68
69 _spinorRest[0].set(EvtComplex(0.0,0.0),EvtComplex(0.0,0.0),
70 EvtComplex(sqrt(2.0*mass()),0.0),EvtComplex(0.0,0.0));
71 _spinorRest[1].set(EvtComplex(0.0,0.0),EvtComplex(0.0,0.0),
72 EvtComplex(0.0,0.0),EvtComplex(sqrt(2.0*mass()),0.0));
73
74 _spinorParent[0]=boostTo(_spinorRest[0],p4);
75 _spinorParent[1]=boostTo(_spinorRest[1],p4);
76
77
78
79 }
80
81 setLifetime();
82}
83
84
85void EvtDiracParticle::init(EvtId part_n,const EvtVector4R& p4,
86 const EvtDiracSpinor & prod1,
87 const EvtDiracSpinor & prod2,
88 const EvtDiracSpinor & rest1,
89 const EvtDiracSpinor & rest2){
90
91 _validP4=true;
92 setp(p4);
93 setpart_num(part_n);
94
95 if (EvtPDL::getStdHep(part_n)==0){
96 report(ERROR,"EvtGen") << "Error in EvtDiracParticle::init, part_n="
97 << part_n.getId()<<std::endl;
98 ::abort();
99 }
100 _spinorRest[0]=rest1;
101 _spinorRest[1]=rest2;
102 _spinorParent[0]=prod1;
103 _spinorParent[1]=prod2;
104
105 setLifetime();
106}
107
108
109
110EvtSpinDensity EvtDiracParticle::rotateToHelicityBasis() const{
111
112 EvtDiracSpinor spplus;
113 EvtDiracSpinor spminus;
114
115 double sqmt2=sqrt(2.*(getP4().mass()));
116
117 if (EvtPDL::getStdHep(getId())>0){
118 spplus.set(1.0,0.0,0.0,0.0);
119 spminus.set(0.0,1.0,0.0,0.0);
120 } else {
121 spplus.set(0.0,0.0,0.0,1.0);
122 spminus.set(0.0,0.0,1.0,0.0);
123 }
124
125
126 EvtSpinDensity R;
127 R.setDim(2);
128
129 for (int i=0; i<2; i++) {
130 if (EvtPDL::getStdHep(getId())>0){
131 R.set(0,i,(EvtComplex)(spplus*_spinorRest[i])/sqmt2);
132 R.set(1,i,(EvtComplex)(spminus*_spinorRest[i])/sqmt2);
133 } else {
134 R.set(0,i,(EvtComplex)(_spinorRest[i]*spplus)/sqmt2);
135 R.set(1,i,(EvtComplex)(_spinorRest[i]*spminus)/sqmt2);
136 }
137 }
138
139 return R;
140
141}
142
143
144EvtSpinDensity EvtDiracParticle::rotateToHelicityBasis(double alpha,
145 double beta,
146 double gamma) const{
147
148
149 EvtDiracSpinor spplus;
150 EvtDiracSpinor spminus;
151
152 double sqmt2=sqrt(2.*(getP4().mass()));
153
154 if (EvtPDL::getStdHep(getId())>0){
155 spplus.set(1.0,0.0,0.0,0.0);
156 spminus.set(0.0,1.0,0.0,0.0);
157 } else {
158 spplus.set(0.0,0.0,0.0,1.0);
159 spminus.set(0.0,0.0,1.0,0.0);
160 }
161
162 spplus.applyRotateEuler(alpha,beta,gamma);
163 spminus.applyRotateEuler(alpha,beta,gamma);
164
165 EvtSpinDensity R;
166 R.setDim(2);
167
168 for (int i=0; i<2; i++) {
169 if (EvtPDL::getStdHep(getId())>0){
170 R.set(0,i,(EvtComplex)(spplus*_spinorRest[i])/sqmt2);
171 R.set(1,i,(EvtComplex)(spminus*_spinorRest[i])/sqmt2);
172 } else {
173 R.set(0,i,(EvtComplex)(_spinorRest[i]*spplus)/sqmt2);
174 R.set(1,i,(EvtComplex)(_spinorRest[i]*spminus)/sqmt2);
175 }
176 }
177
178 return R;
179
180}
181
182
183