00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef ROOT_TVolumePosition
00021 #define ROOT_TVolumePosition
00022
00023 #include "TVolume.h"
00024
00025 class TBrowser;
00026 class TRotMatrix;
00027
00028 class TVolumePosition : public TObject {
00029 protected:
00030 Double_t fX[3];
00031 TRotMatrix *fMatrix;
00032 TVolume *fNode;
00033 UInt_t fId;
00034
00035 protected:
00036 void DeleteOwnMatrix();
00037
00038 public:
00039 enum EPositionBits {
00040 kIsOwn = BIT(23)
00041 };
00042 TVolumePosition(TVolume *node=0,Double_t x=0, Double_t y=0, Double_t z=0, TRotMatrix *matrix=0);
00043 TVolumePosition(TVolume *node,Double_t x, Double_t y, Double_t z, const char *matrixname);
00044 TVolumePosition(const TVolumePosition* oldPosition, const TVolumePosition* curPosition);
00045 TVolumePosition(const TVolumePosition&pos);
00046 virtual ~TVolumePosition();
00047 virtual void Browse(TBrowser *b);
00048 virtual Float_t *Errmx2Local (const Float_t *masterError, Float_t *localError ) const;
00049 virtual Double_t *Errmx2Local (const Double_t *masterError, Double_t *localError) const;
00050 virtual Float_t *Errmx2Master(const Float_t *localError, Float_t *masterError ) const;
00051 virtual Double_t *Errmx2Master(const Double_t *localError, Double_t *masterError) const;
00052 virtual Double_t *Cormx2Local (const Double_t *masterCorr, Double_t *localCorr ) const;
00053 virtual Float_t *Cormx2Local (const Float_t *masterCorr, Float_t *localCorr ) const;
00054 virtual Double_t *Cormx2Master(const Double_t *localCorr, Double_t *masterCorr ) const;
00055 virtual Float_t *Cormx2Master(const Float_t *localCorr, Float_t *masterCorr ) const;
00056 virtual Double_t *Master2Local(const Double_t *master, Double_t *local,Int_t nPoints=1) const;
00057 virtual Float_t *Master2Local(const Float_t *master, Float_t *local,Int_t nPoints=1) const;
00058
00059 virtual Int_t DistancetoPrimitive(Int_t px, Int_t py);
00060 virtual TDataSet *DefineSet();
00061 virtual void Draw(Option_t *depth="3");
00062 virtual void ExecuteEvent(Int_t event, Int_t px, Int_t py);
00063 virtual TVolume *GetNode() const {return fNode;}
00064 virtual char *GetObjectInfo(Int_t px, Int_t py) const;
00065 const Option_t *GetOption() const { return GetNode()?GetNode()->GetOption():0;}
00066 virtual const Char_t *GetName() const;
00067 const TRotMatrix *GetMatrix() const;
00068 TRotMatrix *GetMatrix();
00069
00070 Int_t GetVisibility() const {return GetNode()?GetNode()->GetVisibility():0;}
00071 virtual Double_t GetX(Int_t indx=0) const {return fX[indx];}
00072 virtual const Double_t *GetXYZ() const {return fX;}
00073 virtual Double_t GetY() const {return fX[1];}
00074 virtual Double_t GetZ() const {return fX[2];}
00075 virtual UInt_t GetId() const {return fId;}
00076 Bool_t IsMatrixOwner() const;
00077 Bool_t SetMatrixOwner(Bool_t ownerShips=kTRUE);
00078 Bool_t IsFolder() const {return GetNode()?kTRUE:kFALSE;}
00079 virtual Bool_t Is3D() const {return kTRUE;}
00080 virtual Double_t *Local2Master(const Double_t *local, Double_t *master,Int_t nPoints=1) const;
00081 virtual Float_t *Local2Master(const Float_t *local, Float_t *master,Int_t nPoints=1) const;
00082 virtual TVolumePosition &Mult(const TVolumePosition &position);
00083 virtual void Paint(Option_t *option="");
00084 virtual void Print(Option_t *option="") const;
00085 virtual void UpdatePosition(Option_t *option="");
00086 virtual TVolumePosition *Reset(TVolume *node=0,Double_t x=0, Double_t y=0, Double_t z=0, TRotMatrix *matrix=0);
00087 virtual void SavePrimitive(ostream &out, Option_t *option = "");
00088 virtual void SetLineAttributes();
00089 virtual void SetMatrix(TRotMatrix *matrix=0);
00090 virtual void SetNode(TVolume *node){ fNode = node;}
00091 virtual void SetPosition( Double_t x=0, Double_t y=0, Double_t z=0) {fX[0]=x; fX[1]=y; fX[2]=z;}
00092 virtual void SetVisibility(Int_t vis=1);
00093 virtual void SetX(Double_t x){ fX[0] = x;}
00094 virtual void SetY(Double_t y){ fX[1] = y;}
00095 virtual void SetZ(Double_t z){ fX[2] = z;}
00096 virtual void SetXYZ(Double_t *xyz = 0);
00097 virtual void SetId(UInt_t id){fId = id;}
00098 TVolumePosition &operator=(const TVolumePosition &rhs);
00099 ClassDef(TVolumePosition,2)
00100 };
00101
00102
00103 inline TDataSet *TVolumePosition::DefineSet(){ return GetNode(); }
00104
00105 inline void TVolumePosition::DeleteOwnMatrix()
00106 {
00107 if (IsMatrixOwner()) {
00108 TRotMatrix *erasing = fMatrix;
00109 fMatrix = 0;
00110 delete erasing;
00111 }
00112 }
00113
00114 inline TRotMatrix *TVolumePosition::GetMatrix()
00115 { return fMatrix; }
00116
00117 inline const TRotMatrix *TVolumePosition::GetMatrix() const
00118 { return fMatrix; }
00119
00120 inline Bool_t TVolumePosition::SetMatrixOwner(Bool_t ownerShips)
00121 {
00122 Bool_t currentOwner = IsMatrixOwner();
00123 SetBit(kIsOwn,ownerShips);
00124 return currentOwner;
00125 }
00126
00127 inline Bool_t TVolumePosition::IsMatrixOwner() const
00128 {
00129
00130
00131
00132 return TestBit(kIsOwn);
00133 }
00134
00135 inline TVolumePosition &TVolumePosition::operator=(const TVolumePosition &rhs) {
00136 if (this != &rhs) {
00137 for (int i = 0; i < 3; i++) fX[i] = rhs.fX[i];
00138 fMatrix = rhs.fMatrix;
00139 fNode = rhs.fNode;
00140 fId = rhs.fId;
00141 }
00142 return *this;
00143 }
00144
00145 ostream& operator<<(ostream& s,const TVolumePosition &target);
00146 #endif