TVolumePosition.h

Go to the documentation of this file.
00001 // @(#)root/table:$Id: TVolumePosition.h 27157 2009-01-15 14:05:12Z brun $
00002 // Author: Valery Fine(fine@bnl.gov)   25/12/98
00003 
00004 /*************************************************************************
00005  * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers.               *
00006  * All rights reserved.                                                  *
00007  *                                                                       *
00008  * For the licensing terms see $ROOTSYS/LICENSE.                         *
00009  * For the list of contributors see $ROOTSYS/README/CREDITS.             *
00010  *************************************************************************/
00011 
00012 //////////////////////////////////////////////////////////////////////////
00013 //                                                                      //
00014 // TVolumePosition                                                      //
00015 //                                                                      //
00016 // Description of parameters to position a 3-D geometry object          //
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];        //X offset with respect to parent object
00031    TRotMatrix     *fMatrix;      //Pointer to rotation matrix
00032    TVolume        *fNode;        //Refs pointer to the node defined
00033    UInt_t          fId;          // Unique ID of this position
00034 
00035 protected:
00036    void DeleteOwnMatrix();
00037 
00038 public:
00039    enum EPositionBits {
00040        kIsOwn      = BIT(23)   // if the TVolumePoistion doesn't own the TRotMatrix object
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"); // *MENU*
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(); // *MENU*
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); // *MENU*
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)  //Description of parameters to position a 3-D geometry object
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   // Check whether this object owns the TRotMatrix (to be deleted for example)
00130   // Note: This method is to be caleed from dtor. 
00131   //       It is dangerous to make it virtual
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

Generated on Tue Jul 5 14:28:30 2011 for ROOT_528-00b_version by  doxygen 1.5.1