00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #include <cmath>
00011
00012 namespace CLHEP {
00013
00014
00015
00016 inline HepBoostY::HepBoostY() : beta_(0.0), gamma_(1.0) {}
00017
00018 inline HepBoostY::HepBoostY(const HepBoostY & b) :
00019 beta_ (b.beta_),
00020 gamma_(b.gamma_) {}
00021
00022 inline HepBoostY & HepBoostY::operator = (const HepBoostY & b) {
00023 beta_ = b.beta_;
00024 gamma_ = b.gamma_;
00025 return *this;
00026 }
00027
00028 inline HepBoostY::HepBoostY(double bbeta) { set(bbeta); }
00029
00030
00031 inline HepBoostY::HepBoostY( double bbeta, double ggamma ) :
00032 beta_(bbeta), gamma_(ggamma) {}
00033
00034
00035
00036 inline double HepBoostY::beta() const {
00037 return beta_;
00038 }
00039
00040 inline double HepBoostY::gamma() const {
00041 return gamma_;
00042 }
00043
00044 inline Hep3Vector HepBoostY::boostVector() const {
00045 return Hep3Vector( 0, beta_, 0 );
00046 }
00047
00048 inline Hep3Vector HepBoostY::getDirection() const {
00049 return Hep3Vector( 0.0, 1.0, 0.0 );
00050 }
00051
00052 inline double HepBoostY::xx() const { return 1.0;}
00053 inline double HepBoostY::xy() const { return 0.0;}
00054 inline double HepBoostY::xz() const { return 0.0;}
00055 inline double HepBoostY::xt() const { return 0.0;}
00056 inline double HepBoostY::yx() const { return 0.0;}
00057 inline double HepBoostY::yy() const { return gamma();}
00058 inline double HepBoostY::yz() const { return 0.0;}
00059 inline double HepBoostY::yt() const { return beta()*gamma();}
00060 inline double HepBoostY::zx() const { return 0.0;}
00061 inline double HepBoostY::zy() const { return 0.0;}
00062 inline double HepBoostY::zz() const { return 1.0;}
00063 inline double HepBoostY::zt() const { return 0.0;}
00064 inline double HepBoostY::tx() const { return 0.0;}
00065 inline double HepBoostY::ty() const { return beta()*gamma();}
00066 inline double HepBoostY::tz() const { return 0.0;}
00067 inline double HepBoostY::tt() const { return gamma();}
00068
00069 inline HepLorentzVector HepBoostY::col1() const {
00070 return HepLorentzVector ( 1, 0, 0, 0 );
00071 }
00072 inline HepLorentzVector HepBoostY::col2() const {
00073 return HepLorentzVector ( 0, gamma(), 0, beta()*gamma() );
00074 }
00075 inline HepLorentzVector HepBoostY::col3() const {
00076 return HepLorentzVector ( 0, 0, 1, 0 );
00077 }
00078 inline HepLorentzVector HepBoostY::col4() const {
00079 return HepLorentzVector ( 0, beta()*gamma(), 0, gamma() );
00080 }
00081
00082 inline HepLorentzVector HepBoostY::row1() const {
00083 return HepLorentzVector ( col1() );
00084 }
00085 inline HepLorentzVector HepBoostY::row2() const {
00086 return HepLorentzVector ( col2() );
00087 }
00088 inline HepLorentzVector HepBoostY::row3() const {
00089 return HepLorentzVector ( col3() );
00090 }
00091 inline HepLorentzVector HepBoostY::row4() const {
00092 return HepLorentzVector ( col4() );
00093 }
00094
00095
00096
00097 inline int HepBoostY::compare( const HepBoostY & b ) const {
00098 if (beta() < b.beta()) {
00099 return -1;
00100 } else if (beta() > b.beta()) {
00101 return 1;
00102 } else {
00103 return 0;
00104 }
00105 }
00106
00107 inline bool HepBoostY::operator == ( const HepBoostY & b ) const {
00108 return beta_ == b.beta_;
00109 }
00110 inline bool HepBoostY::operator != ( const HepBoostY & b ) const {
00111 return beta_ != b.beta_;
00112 }
00113 inline bool HepBoostY::operator <= ( const HepBoostY & b ) const {
00114 return beta_ <= b.beta_;
00115 }
00116 inline bool HepBoostY::operator >= ( const HepBoostY & b ) const {
00117 return beta_ >= b.beta_;
00118 }
00119 inline bool HepBoostY::operator < ( const HepBoostY & b ) const {
00120 return beta_ < b.beta_;
00121 }
00122 inline bool HepBoostY::operator > ( const HepBoostY & b ) const {
00123 return beta_ > b.beta_;
00124 }
00125
00126 inline bool HepBoostY::isIdentity() const {
00127 return ( beta() == 0 );
00128 }
00129
00130 inline double HepBoostY::distance2( const HepBoostY & b ) const {
00131 double d = beta()*gamma() - b.beta()*b.gamma();
00132 return d*d;
00133 }
00134
00135 inline double HepBoostY::howNear(const HepBoostY & b) const {
00136 return std::sqrt(distance2(b)); }
00137 inline double HepBoostY::howNear(const HepBoost & b) const {
00138 return std::sqrt(distance2(b)); }
00139 inline double HepBoostY::howNear(const HepRotation & r) const {
00140 return std::sqrt(distance2(r)); }
00141 inline double HepBoostY::howNear(const HepLorentzRotation & lt) const {
00142 return std::sqrt(distance2(lt)); }
00143
00144 inline bool HepBoostY::isNear(const HepBoostY & b,
00145 double epsilon) const {
00146 return (distance2(b) <= epsilon*epsilon);
00147 }
00148 inline bool HepBoostY::isNear(const HepBoost & b,
00149 double epsilon) const {
00150 return (distance2(b) <= epsilon*epsilon);
00151 }
00152
00153
00154
00155 double HepBoostY::norm2() const {
00156 register double bg = beta_*gamma_;
00157 return bg*bg;
00158 }
00159
00160
00161
00162 inline HepLorentzVector
00163 HepBoostY::operator * (const HepLorentzVector & p) const {
00164 double bg = beta_*gamma_;
00165 return HepLorentzVector( p.x(),
00166 gamma_*p.y() + bg*p.t(),
00167 p.z(),
00168 gamma_*p.t() + bg*p.y());
00169 }
00170
00171 HepLorentzVector HepBoostY::operator() (const HepLorentzVector & w) const {
00172 return operator*(w);
00173 }
00174
00175
00176
00177 inline HepBoostY HepBoostY::inverse() const {
00178 return HepBoostY( -beta(), gamma() );
00179 }
00180
00181 inline HepBoostY inverseOf ( const HepBoostY & b ) {
00182 return HepBoostY( -b.beta(), b.gamma());
00183 }
00184
00185 inline HepBoostY & HepBoostY::invert() {
00186 beta_ = -beta_;
00187 return *this;
00188 }
00189
00190
00191
00192 inline double HepBoostY::getTolerance() {
00193 return Hep4RotationInterface::tolerance;
00194 }
00195 inline double HepBoostY::setTolerance(double tol) {
00196 return Hep4RotationInterface::setTolerance(tol);
00197 }
00198
00199 }