BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
EvtVector4C.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: EvtVector4C.cc
12//
13// Description: EvtComplex implemention of 4 - vectors
14//
15// Modification history:
16//
17// DJL/RYD September 25, 1996 Module created
18//
19//------------------------------------------------------------------------
20//
21#include "EvtVector4C.hh"
22#include "EvtComplex.hh"
23#include "EvtPatches.hh"
24#include <assert.h>
25#include <iostream>
26#include <math.h>
27using std::ostream;
28
30
31 v[0] = EvtComplex( 0.0 );
32 v[1] = EvtComplex( 0.0 );
33 v[2] = EvtComplex( 0.0 );
34 v[3] = EvtComplex( 0.0 );
35}
36
38
40 const EvtComplex& e3 ) {
41
42 v[0] = e0;
43 v[1] = e1;
44 v[2] = e2;
45 v[3] = e3;
46}
47
48EvtVector4C rotateEuler( const EvtVector4C& rs, double alpha, double beta, double gamma ) {
49
50 EvtVector4C tmp( rs );
51 tmp.applyRotateEuler( alpha, beta, gamma );
52 return tmp;
53}
54
56
57 EvtVector4C tmp( rs );
58 tmp.applyBoostTo( p4 );
59 return tmp;
60}
61
62EvtVector4C boostTo( const EvtVector4C& rs, const EvtVector3R boost ) {
63
64 EvtVector4C tmp( rs );
65 tmp.applyBoostTo( boost );
66 return tmp;
67}
68
70
71 double e = p4.get( 0 );
72
73 EvtVector3R boost( p4.get( 1 ) / e, p4.get( 2 ) / e, p4.get( 3 ) / e );
74
75 applyBoostTo( boost );
76
77 return;
78}
79
81
82 double bx, by, bz, gamma, b2;
83
84 bx = boost.get( 0 );
85 by = boost.get( 1 );
86 bz = boost.get( 2 );
87
88 double bxx = bx * bx;
89 double byy = by * by;
90 double bzz = bz * bz;
91
92 b2 = bxx + byy + bzz;
93
94 if ( b2 == 0.0 ) { return; }
95
96 assert( b2 < 1.0 );
97
98 gamma = 1.0 / sqrt( 1 - b2 );
99
100 double gb2 = ( gamma - 1.0 ) / b2;
101
102 double gb2xy = gb2 * bx * by;
103 double gb2xz = gb2 * bx * bz;
104 double gb2yz = gb2 * by * bz;
105
106 double gbx = gamma * bx;
107 double gby = gamma * by;
108 double gbz = gamma * bz;
109
110 EvtComplex e2 = v[0];
111 EvtComplex px2 = v[1];
112 EvtComplex py2 = v[2];
113 EvtComplex pz2 = v[3];
114
115 v[0] = gamma * e2 + gbx * px2 + gby * py2 + gbz * pz2;
116
117 v[1] = gbx * e2 + gb2 * bxx * px2 + px2 + gb2xy * py2 + gb2xz * pz2;
118
119 v[2] = gby * e2 + gb2 * byy * py2 + py2 + gb2xy * px2 + gb2yz * pz2;
120
121 v[3] = gbz * e2 + gb2 * bzz * pz2 + pz2 + gb2yz * py2 + gb2xz * px2;
122
123 return;
124}
125
126void EvtVector4C::applyRotateEuler( double phi, double theta, double ksi ) {
127
128 double sp = sin( phi );
129 double st = sin( theta );
130 double sk = sin( ksi );
131 double cp = cos( phi );
132 double ct = cos( theta );
133 double ck = cos( ksi );
134
135 EvtComplex x =
136 ( ck * ct * cp - sk * sp ) * v[1] + ( -sk * ct * cp - ck * sp ) * v[2] + st * cp * v[3];
137 EvtComplex y =
138 ( ck * ct * sp + sk * cp ) * v[1] + ( -sk * ct * sp + ck * cp ) * v[2] + st * sp * v[3];
139 EvtComplex z = -ck * st * v[1] + sk * st * v[2] + ct * v[3];
140
141 v[1] = x;
142 v[2] = y;
143 v[3] = z;
144}
145
146ostream& operator<<( ostream& s, const EvtVector4C& v ) {
147
148 s << "(" << v.v[0] << "," << v.v[1] << "," << v.v[2] << "," << v.v[3] << ")";
149
150 return s;
151}
Double_t e1
Double_t e2
double alpha
ostream & operator<<(ostream &s, const EvtVector4C &v)
EvtVector4C rotateEuler(const EvtVector4C &rs, double alpha, double beta, double gamma)
EvtVector4C boostTo(const EvtVector4C &rs, const EvtVector4R p4)
XmlRpcServer s
**********Class see also m_nmax DOUBLE PRECISION m_amel DOUBLE PRECISION m_x2 DOUBLE PRECISION m_alfinv DOUBLE PRECISION m_Xenph INTEGER m_KeyWtm INTEGER m_idyfs DOUBLE PRECISION m_zini DOUBLE PRECISION m_q2 DOUBLE PRECISION m_Wt_KF DOUBLE PRECISION m_WtCut INTEGER m_KFfin *COMMON c_KarLud $ !Input CMS energy[GeV] $ !CMS energy after beam spread beam strahlung[GeV] $ !Beam energy spread[GeV] $ !z boost due to beam spread $ !electron beam mass *ff pair spectrum $ !minimum v
Definition KarLud.h:35
double get(int i) const
virtual ~EvtVector4C()
void applyRotateEuler(double alpha, double beta, double gamma)
void applyBoostTo(const EvtVector4R &p4)
double get(int i) const