First version of Alice alignment object classes (R.Grosso)
[u/mrichter/AliRoot.git] / STEER / AliAlignObj.h
1 #ifndef ALIALIGNOBJ_H
2 #define ALIALIGNOBJ_H
3
4 /*************************************************************************
5  * AliAlignObj: alignment base class for the storage of alignment        *
6  *   information for a single volume, that is a translation, a rotation  *
7  *   and a the identity of the volume itself in form of a TGeo path and  *
8  *   as a unique integer identifier                                      *
9  *************************************************************************/
10 #include "TObject.h"
11 #include "TString.h"
12 #include "TGeoMatrix.h"
13
14 class AliAlignObj : public TObject {
15
16  public:
17
18   AliAlignObj();
19   AliAlignObj(const AliAlignObj& theAlignObj);
20   AliAlignObj& operator= (const AliAlignObj& theAlignObj);
21   virtual ~AliAlignObj();
22
23   //Setters
24   virtual void SetTranslation(Double_t x, Double_t y, Double_t z) = 0;
25   virtual void SetTranslation(const TGeoMatrix& m) = 0;
26   virtual void SetRotation(Double_t psi, Double_t theta, Double_t phi) = 0;
27   virtual Bool_t SetRotation(const TGeoMatrix& m) = 0;
28   virtual void SetPars(Double_t x, Double_t y, Double_t z, Double_t psi,
29                Double_t theta, Double_t phi) = 0;
30   virtual void SetMatrix(const TGeoMatrix& m) = 0;
31   void  SetVolPath(const TString& volpath) {fVolPath=volpath;}
32   void  SetVolUID(const UShort_t voluid) {fVolUID=voluid;}
33
34   //Getters
35   const char  *GetVolPath()    const {return fVolPath.Data();}
36   UShort_t     GetVolUID()     const {return fVolUID;}
37   virtual void GetTranslation(Double_t* tr)  const=0;
38   virtual Bool_t GetAngles(Double_t* angles) const=0;
39   virtual void GetPars(Double_t transl[], Double_t rot[]) const=0;
40   virtual void GetMatrix(TGeoHMatrix& m) const=0;
41
42   void  Print(Option_t *) const;
43
44  protected:
45
46   void AnglesToMatrix(const Double_t *angles, Double_t *rot) const;
47   Bool_t MatrixToAngles(const Double_t *rot, Double_t *angles) const;
48
49   //Volume identifiers
50   TString fVolPath; // Volume path inside TGeo geometry
51   UShort_t fVolUID; // Unique volume ID
52   
53   ClassDef(AliAlignObj, 1)
54 };
55
56 /*****************************************************************************
57  * AliAlignObjAngles: derived alignment class storing alignment information  *
58  *   for a single volume in form of three doubles for the translation        *
59  *   and three doubles for the rotation expressed with the euler angles      *
60  *   in the xyz-convention (http://mathworld.wolfram.com/EulerAngles.html),  *
61  *   also known as roll, pitch, yaw. PLEASE NOTE THE ANGLES SIGNS ARE        *
62  *   INVERSE WITH RESPECT TO THIS REFERENCE!!! In this way the representation*
63  *   is fully consistent with the TGeo Rotation methods.                     *
64  *****************************************************************************/
65 class AliAlignObjAngles : public AliAlignObj{
66  public:
67   AliAlignObjAngles();
68   AliAlignObjAngles(const AliAlignObjAngles& theAlignObj);
69   AliAlignObjAngles& operator= (const AliAlignObjAngles& theAlignObj);
70   virtual ~AliAlignObjAngles();
71   
72   //Setters
73   virtual void SetTranslation(Double_t x, Double_t y, Double_t z){
74     fTranslation[0]=x; fTranslation[1]=y; fTranslation[2]=z;}
75   virtual void SetTranslation(const TGeoMatrix& m);
76   virtual void SetRotation(Double_t psi, Double_t theta, Double_t phi){
77     fRotation[0]=psi; fRotation[1]=theta; fRotation[2]=phi;}
78   virtual Bool_t SetRotation(const TGeoMatrix& m);
79   virtual void SetMatrix(const TGeoMatrix& m);
80   virtual void SetPars(Double_t x, Double_t y, Double_t z, Double_t psi,
81                    Double_t theta, Double_t phi){
82     fTranslation[0]=x; fTranslation[1]=y; fTranslation[2]=z;
83     fRotation[0]=psi; fRotation[1]=theta; fRotation[2]=phi;}
84   
85   //Getters
86   virtual void GetTranslation(Double_t *tr)  const {
87     tr[0] = fTranslation[0]; tr[1] = fTranslation[1]; tr[2] = fTranslation[2];}
88   virtual Bool_t GetAngles(Double_t* angles)   const {
89     angles[0] = fRotation[0]; angles[1] = fRotation[1];
90     angles[2] = fRotation[2]; return kTRUE;}
91   virtual void GetPars(Double_t tr[], Double_t angles[]) const;
92   virtual void GetMatrix(TGeoHMatrix& m) const;
93   
94  protected:
95   Double_t fTranslation[3]; // Translation vector
96   Double_t fRotation[3]; // Roll-pitch-yaw angles
97   
98   ClassDef(AliAlignObjAngles, 1)
99 };
100
101 /**************************************************************************
102  * AliAlignObjMatrix: derived alignment class storing alignment           *
103  *   information for a single volume in form of TGeoHMatrix, which        *
104  *   includes the information for a translation, a rotation and a scale   *
105  *************************************************************************/
106 class AliAlignObjMatrix : public AliAlignObj {
107  public:
108   AliAlignObjMatrix();
109   AliAlignObjMatrix(const AliAlignObjMatrix& theAlignObj);
110   AliAlignObjMatrix& operator= (const AliAlignObjMatrix& theAlignObj);
111   virtual ~AliAlignObjMatrix();
112   
113   //Setters
114   virtual void SetTranslation(Double_t x, Double_t y, Double_t z);
115   virtual void SetTranslation(const TGeoMatrix& m);
116   virtual void SetRotation(Double_t psi, Double_t theta, Double_t phi);
117   virtual Bool_t SetRotation(const TGeoMatrix& m);
118   virtual void SetMatrix(const TGeoMatrix& m);
119   virtual void SetPars(Double_t x, Double_t y, Double_t z, Double_t psi,
120                    Double_t theta, Double_t phi);
121   //Getters
122   virtual void GetTranslation(Double_t* tr)  const;
123   virtual Bool_t GetAngles(Double_t* angles)  const;
124   virtual void GetPars(Double_t tr[], Double_t rot[]) const;
125   virtual void GetMatrix(TGeoHMatrix& m) const;
126   
127  protected:
128   TGeoHMatrix fMatrix; // Transformation matrix
129   
130   ClassDef(AliAlignObjMatrix, 1)
131 };
132
133 #endif