ROOT logo
#ifndef HGEOMVECTOR_H
#define HGEOMVECTOR_H
using namespace std;
#include "TObject.h"
#include "TMath.h"
#include <math.h>
#include <iostream>
#include <iomanip>

class HGeomVector : public TObject {
protected:
  Double_t x;
  Double_t y;
  Double_t z;
  inline void round(Double_t d,Int_t n);
public:
  HGeomVector(Double_t dx=0,Double_t dy=0,Double_t dz=0) : x(dx),y(dy),z(dz) {}
  ~HGeomVector() {}
  Double_t &X() {return x;}
  Double_t &Y() {return y;}
  Double_t &Z() {return z;}
  Double_t getX() const {return x;}
  Double_t getY() const {return y;}
  Double_t getZ() const {return z;}
  void setXYZ(const Double_t xx,const Double_t yy,const Double_t zz) {
    x=xx; y=yy; z=zz;
  }
  void setX(const Double_t a) {x=a;}
  void setY(const Double_t a) {y=a;}
  void setZ(const Double_t a) {z=a;}
  inline void setVector(const Double_t* a);
  inline void setVector(const Float_t* a);
  inline Double_t operator() (const Int_t i) const;
  inline HGeomVector operator - () const;
  inline HGeomVector& operator = (const HGeomVector& v);
  inline Bool_t operator == (const HGeomVector& v) const;
  inline Bool_t operator != (const HGeomVector& v) const;
  inline Bool_t operator < (const Double_t a);
  inline Bool_t operator <= (const Double_t a);
  inline Bool_t operator > (const Double_t a);
  inline Bool_t operator >= (const Double_t a);
  inline HGeomVector& operator += (const Double_t a);
  inline HGeomVector& operator -= (const Double_t a);
  inline HGeomVector& operator *= (const Double_t a);
  inline HGeomVector& operator /= (const Double_t a);
  inline HGeomVector& operator += (const HGeomVector& v);
  inline HGeomVector& operator -= (const HGeomVector& v);
  inline HGeomVector operator + (const HGeomVector& v) const;
  inline HGeomVector operator - (const HGeomVector& v) const;
  inline HGeomVector& abs();
  inline Double_t scalarProduct(const HGeomVector& v) const;
  inline HGeomVector vectorProduct(const HGeomVector& v) const;
  Double_t length() const {return sqrt(x*x+y*y+z*z);}
  void clear() {x=y=z=0.;}
  void print() const {printf("%10.3f%10.3f%10.3f\n",x,y,z);}
  inline void round(Int_t n);
  inline friend ostream& operator << (ostream& put,const HGeomVector& v);
  inline friend istream& operator >> (istream& get,HGeomVector& v);
  ClassDef(HGeomVector,1) // vector with 3 components
};

// -------------------- inlines ---------------------------

inline void HGeomVector::setVector(const Double_t* a) {
  x=a[0];
  y=a[1];
  z=a[2];
}

inline void HGeomVector::setVector(const Float_t* a) {
  x=a[0];
  y=a[1];
  z=a[2];
}

inline Double_t HGeomVector::operator() (const Int_t i) const {
  switch (i) {
    case 0: return x;
    case 1: return y;
    case 2: return z;
    default: Error("operator()","bad index");
  }
  return 0;
}

inline HGeomVector HGeomVector::operator - () const {
  HGeomVector p(-x,-y,-z);
  return p;
}

inline HGeomVector& HGeomVector::operator = (const HGeomVector& v) {
  x=v.getX();
  y=v.getY();
  z=v.getZ();
  return *this;
}

inline Bool_t HGeomVector::operator == (const HGeomVector& v) const {
  return ((v.getX()!=x || v.getY()!=y || v.getZ()!=z) ? kFALSE : kTRUE); 
}

inline  Bool_t HGeomVector::operator != (const HGeomVector& v) const {
  return (v.getX()!=x || v.getY()!=y || v.getZ()!=z)  ? kTRUE : kFALSE; 
}

inline Bool_t HGeomVector::operator < (const Double_t a) {
  return (x>=a || y>=a || z>=a) ? kFALSE : kTRUE;
}

inline Bool_t HGeomVector::operator <= (const Double_t a) {
  return (x>a || y>a || z>a) ? kFALSE : kTRUE;
}

inline Bool_t HGeomVector::operator > (const Double_t a) {
  return (x<=a || y<=a || z<=a) ? kFALSE : kTRUE;
}

inline Bool_t HGeomVector::operator >= (const Double_t a) {
  return (x<a || y<a || z<a) ? kFALSE : kTRUE;
}

inline HGeomVector& HGeomVector::operator += (const Double_t a) {
  x+=a;
  y+=a;
  z+=a;
  return *this;
}

inline HGeomVector& HGeomVector::operator -= (const Double_t a) {
  x-=a;
  y-=a;
  z-=a;
  return *this;
}

inline HGeomVector& HGeomVector::operator *= (const Double_t a) {
  x*=a;
  y*=a;
  z*=a;
  return *this;
}

inline HGeomVector& HGeomVector::operator /= (const Double_t a) {
  x/=a;
  y/=a;
  z/=a;
  return *this;
}

inline HGeomVector& HGeomVector::operator += (const HGeomVector& v) {
  x+=v.getX();
  y+=v.getY();
  z+=v.getZ();
  return *this;
}

inline HGeomVector& HGeomVector::operator -= (const HGeomVector& v) {
  x-=v.getX();
  y-=v.getY();
  z-=v.getZ();
  return *this;
}

inline HGeomVector HGeomVector::operator + (const HGeomVector& v) const {
  HGeomVector p(*this);
  p+=v;
  return p;
}

inline HGeomVector HGeomVector::operator - (const HGeomVector& v) const {
  HGeomVector p(*this);
  p-=v;
  return p;
}

inline HGeomVector& HGeomVector::abs() {
  x=TMath::Abs(x);
  y=TMath::Abs(y);
  z=TMath::Abs(z);
  return *this;
}

inline Double_t HGeomVector::scalarProduct(const HGeomVector& v) const {
  return (x*v.getX()+y*v.getY()+z*v.getZ());
}

inline HGeomVector HGeomVector::vectorProduct(const HGeomVector& v) const {
  HGeomVector p(y*v.getZ()-z*v.getY(),z*v.getX()-x*v.getZ(),
                x*v.getY()-y*v.getX());
  return p;
}

inline void HGeomVector::round(Double_t d,Int_t n) {
  // rounds d to a precision with n digits
    if(d>0) d=floor(d*pow(10.,n)+0.5)/pow(10.,n);
  else d=-floor((-d)*pow(10.,n)+0.5)/pow(10.,n);
}

inline void HGeomVector::round(Int_t n) {
  // rounds every component to a precision with n digits
  round(x,n);
  round(y,n);
  round(z,n);
}

inline ostream& operator << (ostream& put,const HGeomVector& v) {
  return put<<v(0)<<"  "<<v(1)<<"  "<<v(2)<<'\n';
}

inline istream& operator >> (istream& get,HGeomVector& v) {
  Double_t x[3];
  get>>x[0]>>x[1]>>x[2];
  v.setVector(x);
  return get;
}

#endif /* !HGEOMVECTOR_H */













 hgeomvector.h:1
 hgeomvector.h:2
 hgeomvector.h:3
 hgeomvector.h:4
 hgeomvector.h:5
 hgeomvector.h:6
 hgeomvector.h:7
 hgeomvector.h:8
 hgeomvector.h:9
 hgeomvector.h:10
 hgeomvector.h:11
 hgeomvector.h:12
 hgeomvector.h:13
 hgeomvector.h:14
 hgeomvector.h:15
 hgeomvector.h:16
 hgeomvector.h:17
 hgeomvector.h:18
 hgeomvector.h:19
 hgeomvector.h:20
 hgeomvector.h:21
 hgeomvector.h:22
 hgeomvector.h:23
 hgeomvector.h:24
 hgeomvector.h:25
 hgeomvector.h:26
 hgeomvector.h:27
 hgeomvector.h:28
 hgeomvector.h:29
 hgeomvector.h:30
 hgeomvector.h:31
 hgeomvector.h:32
 hgeomvector.h:33
 hgeomvector.h:34
 hgeomvector.h:35
 hgeomvector.h:36
 hgeomvector.h:37
 hgeomvector.h:38
 hgeomvector.h:39
 hgeomvector.h:40
 hgeomvector.h:41
 hgeomvector.h:42
 hgeomvector.h:43
 hgeomvector.h:44
 hgeomvector.h:45
 hgeomvector.h:46
 hgeomvector.h:47
 hgeomvector.h:48
 hgeomvector.h:49
 hgeomvector.h:50
 hgeomvector.h:51
 hgeomvector.h:52
 hgeomvector.h:53
 hgeomvector.h:54
 hgeomvector.h:55
 hgeomvector.h:56
 hgeomvector.h:57
 hgeomvector.h:58
 hgeomvector.h:59
 hgeomvector.h:60
 hgeomvector.h:61
 hgeomvector.h:62
 hgeomvector.h:63
 hgeomvector.h:64
 hgeomvector.h:65
 hgeomvector.h:66
 hgeomvector.h:67
 hgeomvector.h:68
 hgeomvector.h:69
 hgeomvector.h:70
 hgeomvector.h:71
 hgeomvector.h:72
 hgeomvector.h:73
 hgeomvector.h:74
 hgeomvector.h:75
 hgeomvector.h:76
 hgeomvector.h:77
 hgeomvector.h:78
 hgeomvector.h:79
 hgeomvector.h:80
 hgeomvector.h:81
 hgeomvector.h:82
 hgeomvector.h:83
 hgeomvector.h:84
 hgeomvector.h:85
 hgeomvector.h:86
 hgeomvector.h:87
 hgeomvector.h:88
 hgeomvector.h:89
 hgeomvector.h:90
 hgeomvector.h:91
 hgeomvector.h:92
 hgeomvector.h:93
 hgeomvector.h:94
 hgeomvector.h:95
 hgeomvector.h:96
 hgeomvector.h:97
 hgeomvector.h:98
 hgeomvector.h:99
 hgeomvector.h:100
 hgeomvector.h:101
 hgeomvector.h:102
 hgeomvector.h:103
 hgeomvector.h:104
 hgeomvector.h:105
 hgeomvector.h:106
 hgeomvector.h:107
 hgeomvector.h:108
 hgeomvector.h:109
 hgeomvector.h:110
 hgeomvector.h:111
 hgeomvector.h:112
 hgeomvector.h:113
 hgeomvector.h:114
 hgeomvector.h:115
 hgeomvector.h:116
 hgeomvector.h:117
 hgeomvector.h:118
 hgeomvector.h:119
 hgeomvector.h:120
 hgeomvector.h:121
 hgeomvector.h:122
 hgeomvector.h:123
 hgeomvector.h:124
 hgeomvector.h:125
 hgeomvector.h:126
 hgeomvector.h:127
 hgeomvector.h:128
 hgeomvector.h:129
 hgeomvector.h:130
 hgeomvector.h:131
 hgeomvector.h:132
 hgeomvector.h:133
 hgeomvector.h:134
 hgeomvector.h:135
 hgeomvector.h:136
 hgeomvector.h:137
 hgeomvector.h:138
 hgeomvector.h:139
 hgeomvector.h:140
 hgeomvector.h:141
 hgeomvector.h:142
 hgeomvector.h:143
 hgeomvector.h:144
 hgeomvector.h:145
 hgeomvector.h:146
 hgeomvector.h:147
 hgeomvector.h:148
 hgeomvector.h:149
 hgeomvector.h:150
 hgeomvector.h:151
 hgeomvector.h:152
 hgeomvector.h:153
 hgeomvector.h:154
 hgeomvector.h:155
 hgeomvector.h:156
 hgeomvector.h:157
 hgeomvector.h:158
 hgeomvector.h:159
 hgeomvector.h:160
 hgeomvector.h:161
 hgeomvector.h:162
 hgeomvector.h:163
 hgeomvector.h:164
 hgeomvector.h:165
 hgeomvector.h:166
 hgeomvector.h:167
 hgeomvector.h:168
 hgeomvector.h:169
 hgeomvector.h:170
 hgeomvector.h:171
 hgeomvector.h:172
 hgeomvector.h:173
 hgeomvector.h:174
 hgeomvector.h:175
 hgeomvector.h:176
 hgeomvector.h:177
 hgeomvector.h:178
 hgeomvector.h:179
 hgeomvector.h:180
 hgeomvector.h:181
 hgeomvector.h:182
 hgeomvector.h:183
 hgeomvector.h:184
 hgeomvector.h:185
 hgeomvector.h:186
 hgeomvector.h:187
 hgeomvector.h:188
 hgeomvector.h:189
 hgeomvector.h:190
 hgeomvector.h:191
 hgeomvector.h:192
 hgeomvector.h:193
 hgeomvector.h:194
 hgeomvector.h:195
 hgeomvector.h:196
 hgeomvector.h:197
 hgeomvector.h:198
 hgeomvector.h:199
 hgeomvector.h:200
 hgeomvector.h:201
 hgeomvector.h:202
 hgeomvector.h:203
 hgeomvector.h:204
 hgeomvector.h:205
 hgeomvector.h:206
 hgeomvector.h:207
 hgeomvector.h:208
 hgeomvector.h:209
 hgeomvector.h:210
 hgeomvector.h:211
 hgeomvector.h:212
 hgeomvector.h:213
 hgeomvector.h:214
 hgeomvector.h:215
 hgeomvector.h:216
 hgeomvector.h:217
 hgeomvector.h:218
 hgeomvector.h:219
 hgeomvector.h:220
 hgeomvector.h:221
 hgeomvector.h:222
 hgeomvector.h:223
 hgeomvector.h:224
 hgeomvector.h:225
 hgeomvector.h:226
 hgeomvector.h:227
 hgeomvector.h:228
 hgeomvector.h:229
 hgeomvector.h:230