BOSS 8.0.0
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, double alpha, double beta,
32 double gamma );
33 friend EvtVector4R boostTo( const EvtVector4R& rs, const EvtVector4R& p4 );
34 friend EvtVector4R boostTo( const EvtVector4R& rs, const EvtVector3R& boost );
35
36 inline friend EvtVector4R operator*( double d, const EvtVector4R& v2 );
37 inline friend EvtVector4R operator*( const EvtVector4R& v2, double d );
38 inline friend EvtVector4R operator/( const EvtVector4R& v2, double d );
39 inline friend double operator*( const EvtVector4R& v1, const EvtVector4R& v2 );
40 inline friend EvtVector4R operator+( const EvtVector4R& v1, const EvtVector4R& v2 );
41 inline friend EvtVector4R operator-( const EvtVector4R& v1, const EvtVector4R& v2 );
42
43public:
45 EvtVector4R( double e, double px, double py, double pz );
46 inline void set( int i, double d );
47 inline void set( double e, double px, double py, double pz );
48 inline EvtVector4R& operator*=( double c );
49 inline EvtVector4R& operator/=( double c );
50 inline EvtVector4R& operator=( const EvtVector4R& v2 );
51 inline EvtVector4R& operator+=( const EvtVector4R& v2 );
52 inline EvtVector4R& operator-=( const EvtVector4R& v2 );
53 inline double get( int i ) const;
54 inline double cont( const EvtVector4R& v4 ) const;
55 friend std::ostream& operator<<( std::ostream& s, const EvtVector4R& v );
56 double mass2() const;
57 double mass() const;
58 void applyRotateEuler( double alpha, double beta, double gamma );
59 void applyBoostTo( const EvtVector4R& p4 );
60 void applyBoostTo( const EvtVector3R& boost );
61 EvtVector4R cross( const EvtVector4R& v2 );
62 double dot( const EvtVector4R& v2 ) const;
63 double d3mag() const;
64
65 // Added by AJB - calculate scalars in the rest frame of the current object
66 double scalartripler3( const EvtVector4R& p1, const EvtVector4R& p2,
67 const EvtVector4R& p3 ) const;
68 double dotr3( const EvtVector4R& p1, const EvtVector4R& p2 ) const;
69 double mag2r3( const EvtVector4R& p1 ) const;
70 double magr3( const EvtVector4R& p1 ) const;
71 double theta();
72 double phi();
73
74private:
75 double v[4];
76
77 inline double Square( double x ) const { return x * x; }
78};
79
81
82 v[0] = v2.v[0];
83 v[1] = v2.v[1];
84 v[2] = v2.v[2];
85 v[3] = v2.v[3];
86
87 return *this;
88}
89
91
92 v[0] += v2.v[0];
93 v[1] += v2.v[1];
94 v[2] += v2.v[2];
95 v[3] += v2.v[3];
96
97 return *this;
98}
99
101
102 v[0] -= v2.v[0];
103 v[1] -= v2.v[1];
104 v[2] -= v2.v[2];
105 v[3] -= v2.v[3];
106
107 return *this;
108}
109
110inline double EvtVector4R::mass2() const {
111
112 return v[0] * v[0] - v[1] * v[1] - v[2] * v[2] - v[3] * v[3];
113}
114
115inline EvtVector4R operator*( double c, const EvtVector4R& v2 ) {
116
117 return EvtVector4R( v2 ) *= c;
118}
119
120inline EvtVector4R operator*( const EvtVector4R& v2, double c ) {
121
122 return EvtVector4R( v2 ) *= c;
123}
124
125inline EvtVector4R operator/( const EvtVector4R& v2, double c ) {
126
127 return EvtVector4R( v2 ) /= c;
128}
129
131
132 v[0] *= c;
133 v[1] *= c;
134 v[2] *= c;
135 v[3] *= c;
136
137 return *this;
138}
139
141
142 double cinv = 1.0 / c;
143 v[0] *= cinv;
144 v[1] *= cinv;
145 v[2] *= cinv;
146 v[3] *= cinv;
147
148 return *this;
149}
150
151inline double operator*( const EvtVector4R& v1, const EvtVector4R& v2 ) {
152
153 return v1.v[0] * v2.v[0] - v1.v[1] * v2.v[1] - v1.v[2] * v2.v[2] - v1.v[3] * v2.v[3];
154}
155
156inline double EvtVector4R::cont( const EvtVector4R& v4 ) const {
157
158 return v[0] * v4.v[0] - v[1] * v4.v[1] - v[2] * v4.v[2] - v[3] * v4.v[3];
159}
160
161inline EvtVector4R operator-( const EvtVector4R& v1, const EvtVector4R& v2 ) {
162
163 return EvtVector4R( v1 ) -= v2;
164}
165
166inline EvtVector4R operator+( const EvtVector4R& v1, const EvtVector4R& v2 ) {
167
168 return EvtVector4R( v1 ) += v2;
169}
170
171inline double EvtVector4R::get( int i ) const { return v[i]; }
172
173inline void EvtVector4R::set( int i, double d ) { v[i] = d; }
174
175inline void EvtVector4R::set( double e, double p1, double p2, double p3 ) {
176
177 v[0] = e;
178 v[1] = p1;
179 v[2] = p2;
180 v[3] = p3;
181}
182
183#endif
double p2[4]
double p1[4]
double alpha
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)
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()