BOSS 7.1.2
BESIII Offline Software System
Loading...
Searching...
No Matches
EvtVector4R.hh
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: EvtGen/EvtVector4R.hh
12//
13// Description: Class to describe real 4 vectors
14//
15// Modification history:
16//
17// DJL/RYD September 25, 1996 Module created
18//
19//------------------------------------------------------------------------
20
21#ifndef EVTVECTOR4R_HH
22#define EVTVECTOR4R_HH
23
24#include <iostream>
25#include <math.h>
26
27class EvtVector3R;
28
30
31 friend EvtVector4R rotateEuler(const EvtVector4R& rs,
32 double alpha,double beta,double gamma);
33 friend EvtVector4R boostTo(const EvtVector4R& rs,
34 const EvtVector4R& p4);
35 friend EvtVector4R boostTo(const EvtVector4R& rs,
36 const EvtVector3R& boost);
37
38
39 inline friend EvtVector4R operator*(double d,const EvtVector4R& v2);
40 inline friend EvtVector4R operator*(const EvtVector4R& v2,double d);
41 inline friend EvtVector4R operator/(const EvtVector4R& v2,double d);
42 inline friend double operator*(const EvtVector4R& v1,const EvtVector4R& v2);
43 inline friend EvtVector4R operator+(const EvtVector4R& v1,const EvtVector4R& v2);
44 inline friend EvtVector4R operator-(const EvtVector4R& v1,const EvtVector4R& v2);
45
46public:
48 EvtVector4R(double e,double px,double py ,double pz);
49 inline void set(int i,double d);
50 inline void set(double e,double px,double py ,double pz);
51 inline EvtVector4R& operator*=(double c);
52 inline EvtVector4R& operator/=(double c);
53 inline EvtVector4R& operator=(const EvtVector4R& v2);
54 inline EvtVector4R& operator+=(const EvtVector4R& v2);
55 inline EvtVector4R& operator-=(const EvtVector4R& v2);
56 inline double get(int i) const;
57 inline double cont(const EvtVector4R& v4) const;
58 friend std::ostream& operator<<(std::ostream& s, const EvtVector4R& v);
59 double mass2() const;
60 double mass() const;
61 void applyRotateEuler(double alpha,double beta,double gamma);
62 void applyBoostTo(const EvtVector4R& p4);
63 void applyBoostTo(const EvtVector3R& boost);
64 EvtVector4R cross(const EvtVector4R& v2);
65 double dot(const EvtVector4R& v2) const;
66 double d3mag() const;
67
68 // Added by AJB - calculate scalars in the rest frame of the current object
69 double scalartripler3( const EvtVector4R& p1, const EvtVector4R& p2,
70 const EvtVector4R& p3 ) const;
71 double dotr3( const EvtVector4R& p1, const EvtVector4R& p2 ) const;
72 double mag2r3( const EvtVector4R& p1 ) const;
73 double magr3( const EvtVector4R& p1 ) const;
74 double theta();
75 double phi();
76
77private:
78
79 double v[4];
80
81 inline double Square( double x ) const { return x*x; }
82
83};
84
85
87
88 v[0]=v2.v[0];
89 v[1]=v2.v[1];
90 v[2]=v2.v[2];
91 v[3]=v2.v[3];
92
93 return *this;
94}
95
97
98 v[0]+=v2.v[0];
99 v[1]+=v2.v[1];
100 v[2]+=v2.v[2];
101 v[3]+=v2.v[3];
102
103 return *this;
104}
105
107
108 v[0]-=v2.v[0];
109 v[1]-=v2.v[1];
110 v[2]-=v2.v[2];
111 v[3]-=v2.v[3];
112
113 return *this;
114}
115
116inline double EvtVector4R::mass2() const{
117
118 return v[0]*v[0]-v[1]*v[1]-v[2]*v[2]-v[3]*v[3];
119}
120
121inline EvtVector4R operator*(double c,const EvtVector4R& v2){
122
123 return EvtVector4R(v2)*=c;
124}
125
126inline EvtVector4R operator*(const EvtVector4R& v2,double c){
127
128 return EvtVector4R(v2)*=c;
129}
130
131inline EvtVector4R operator/(const EvtVector4R& v2,double c){
132
133 return EvtVector4R(v2)/=c;
134}
135
137
138 v[0]*=c;
139 v[1]*=c;
140 v[2]*=c;
141 v[3]*=c;
142
143 return *this;
144}
145
147
148 double cinv=1.0/c;
149 v[0]*=cinv;
150 v[1]*=cinv;
151 v[2]*=cinv;
152 v[3]*=cinv;
153
154 return *this;
155}
156
157inline double operator*(const EvtVector4R& v1,const EvtVector4R& v2){
158
159 return v1.v[0]*v2.v[0]-v1.v[1]*v2.v[1]-
160 v1.v[2]*v2.v[2]-v1.v[3]*v2.v[3];
161}
162
163inline double EvtVector4R::cont(const EvtVector4R& v4) const {
164
165 return v[0]*v4.v[0]-v[1]*v4.v[1]-
166 v[2]*v4.v[2]-v[3]*v4.v[3];
167}
168
169inline EvtVector4R operator-(const EvtVector4R& v1,const EvtVector4R& v2){
170
171 return EvtVector4R(v1)-=v2;
172}
173
174inline EvtVector4R operator+(const EvtVector4R& v1,const EvtVector4R& v2){
175
176 return EvtVector4R(v1)+=v2;
177}
178
179inline double EvtVector4R::get(int i) const {
180 return v[i];
181}
182
183inline void EvtVector4R::set(int i,double d){
184
185 v[i]=d;
186}
187
188inline void EvtVector4R::set(double e,double p1,double p2, double p3){
189
190 v[0]=e;
191 v[1]=p1;
192 v[2]=p2;
193 v[3]=p3;
194}
195
196#endif
197
double p1[4]
double p2[4]
Double_t x[10]
EvtVector4R operator-(const EvtVector4R &v1, const EvtVector4R &v2)
EvtVector4R operator/(const EvtVector4R &v2, double c)
EvtVector4R operator+(const EvtVector4R &v1, const EvtVector4R &v2)
EvtVector4R operator*(double c, const EvtVector4R &v2)
const double alpha
XmlRpcServer s
double phi()
friend EvtVector4R boostTo(const EvtVector4R &rs, const EvtVector4R &p4)
double dot(const EvtVector4R &v2) const
friend EvtVector4R operator-(const EvtVector4R &v1, const EvtVector4R &v2)
EvtVector4R & operator-=(const EvtVector4R &v2)
void applyRotateEuler(double alpha, double beta, double gamma)
double mass() const
friend EvtVector4R rotateEuler(const EvtVector4R &rs, double alpha, double beta, double gamma)
EvtVector4R & operator=(const EvtVector4R &v2)
double magr3(const EvtVector4R &p1) const
double get(int i) const
EvtVector4R & operator+=(const EvtVector4R &v2)
EvtVector4R cross(const EvtVector4R &v2)
double d3mag() const
double dotr3(const EvtVector4R &p1, const EvtVector4R &p2) const
double scalartripler3(const EvtVector4R &p1, const EvtVector4R &p2, const EvtVector4R &p3) const
double mag2r3(const EvtVector4R &p1) const
friend std::ostream & operator<<(std::ostream &s, const EvtVector4R &v)
friend EvtVector4R operator+(const EvtVector4R &v1, const EvtVector4R &v2)
EvtVector4R & operator*=(double c)
double cont(const EvtVector4R &v4) const
EvtVector4R & operator/=(double c)
double mass2() const
friend EvtVector4R operator/(const EvtVector4R &v2, double d)
friend EvtVector4R operator*(double d, const EvtVector4R &v2)
void set(int i, double d)
void applyBoostTo(const EvtVector4R &p4)
double theta()
double double double * p4
Definition qcdloop1.h:77
double double * p3
Definition qcdloop1.h:76