Check the overlaps above 1cm after the (mis)alignment (Raffaele)
[u/mrichter/AliRoot.git] / STEER / AliAlignObjMatrix.cxx
CommitLineData
befe2c08 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
15
16//-----------------------------------------------------------------
17// Implementation of the alignment object class through
18// the derived concrete representation of alignment object class:
19// AliAlignObjMatrix derived from the base class AliAlignObj
20//-----------------------------------------------------------------
21
22#include "AliAlignObj.h"
23#include "AliAlignObjMatrix.h"
24//#include "AliLog.h"
25
26ClassImp(AliAlignObjMatrix)
27
28//_____________________________________________________________________________
fe12e09c 29AliAlignObjMatrix::AliAlignObjMatrix() :
30 AliAlignObj(),
31 fMatrix()
befe2c08 32{
33 // Default constructor
34 //
35}
36
37//_____________________________________________________________________________
b760c02e 38AliAlignObjMatrix::AliAlignObjMatrix(const char* volpath, UShort_t volUId, Double_t x, Double_t y, Double_t z, Double_t psi, Double_t theta, Double_t phi, Bool_t global) throw (const Char_t *) :
39 AliAlignObj(volpath,volUId),
fe12e09c 40 fMatrix()
befe2c08 41{
42 // standard constructor with 3 translation + 3 rotation parameters
48c8e89a 43 // If the user explicitly sets the global variable to kFALSE then the
44 // parameters are interpreted as giving the local transformation.
45 // This requires to have a gGeoMenager active instance, otherwise the
46 // constructor will fail (no object created)
47 //
48c8e89a 48 if(global){
b760c02e 49 SetPars(x, y, z, psi, theta, phi);
48c8e89a 50 }else{
51 if(!SetLocalPars(x,y,z,psi,theta,phi)) throw "Alignment object creation failed (TGeo instance needed)!\n";
52 }
befe2c08 53}
54
48c8e89a 55
befe2c08 56//_____________________________________________________________________________
b760c02e 57AliAlignObjMatrix::AliAlignObjMatrix(const char* volpath, UShort_t volUId, TGeoMatrix& m, Bool_t global) throw (const Char_t *) :
58 AliAlignObj(volpath,volUId),
fe12e09c 59 fMatrix()
d9cc42ed 60{
61 // standard constructor with TGeoMatrix
b760c02e 62 // If the user explicitly sets the global variable to kFALSE then the
63 // parameters are interpreted as giving the local transformation.
64 // This requires to have a gGeoMenager active instance, otherwise the
65 // constructor will fail (no object created)
d9cc42ed 66 //
d9cc42ed 67
b760c02e 68 if (global) {
69 SetMatrix(m);
70 }
71 else {
72 if (!SetLocalMatrix(m)) throw "Alignment object creation failed (TGeo instance needed)!\n";
73 }
befe2c08 74}
75
76//_____________________________________________________________________________
c5304981 77AliAlignObjMatrix::AliAlignObjMatrix(const AliAlignObj& theAlignObj) :
fe12e09c 78 AliAlignObj(theAlignObj),
79 fMatrix()
befe2c08 80{
81 //copy constructor
82 //
83 Double_t tr[3];
84 theAlignObj.GetTranslation(tr);
85 SetTranslation(tr[0],tr[1],tr[2]);
86 Double_t rot[3];
b760c02e 87 if (theAlignObj.GetAngles(rot))
88 SetRotation(rot[0],rot[1],rot[2]);
befe2c08 89}
90
91//_____________________________________________________________________________
c5304981 92AliAlignObjMatrix &AliAlignObjMatrix::operator =(const AliAlignObj& theAlignObj)
befe2c08 93{
94 // assignment operator
95 //
96 if(this==&theAlignObj) return *this;
97 ((AliAlignObj *)this)->operator=(theAlignObj);
98 Double_t tr[3];
99 theAlignObj.GetTranslation(tr);
100 SetTranslation(tr[0],tr[1],tr[2]);
101 Double_t rot[3];
b760c02e 102 if (theAlignObj.GetAngles(rot))
103 SetRotation(rot[0],rot[1],rot[2]);
104
befe2c08 105 return *this;
106}
107
108//_____________________________________________________________________________
109AliAlignObjMatrix::~AliAlignObjMatrix()
110{
111 // Destructor
112 //
113}
114
115//_____________________________________________________________________________
116void AliAlignObjMatrix::SetTranslation(Double_t x, Double_t y, Double_t z)
117{
118 Double_t tr[3];
119 tr[0]=x; tr[1]=y; tr[2]=z;
120 fMatrix.SetTranslation(tr);
121}
122
123//_____________________________________________________________________________
124void AliAlignObjMatrix::SetTranslation(const TGeoMatrix& m)
125{
126 const Double_t *tr = m.GetTranslation();
127 fMatrix.SetTranslation(tr);
128}
129
130//_____________________________________________________________________________
131void AliAlignObjMatrix::SetRotation(Double_t psi, Double_t theta, Double_t phi)
132{
133 Double_t angles[3] = {psi, theta, phi};
134 Double_t rot[9];
135 AnglesToMatrix(angles,rot);
136 fMatrix.SetRotation(rot);
137}
138
139//_____________________________________________________________________________
140Bool_t AliAlignObjMatrix::SetRotation(const TGeoMatrix& m)
141{
142 const Double_t* rot = m.GetRotationMatrix();
143 fMatrix.SetRotation(rot);
144 return kTRUE;
145}
146
147//_____________________________________________________________________________
befe2c08 148void AliAlignObjMatrix::GetTranslation(Double_t *tr) const
149{
150 // Get Translation from TGeoMatrix
151 const Double_t* translation = fMatrix.GetTranslation();
152 tr[0] = translation[0];
153 tr[1] = translation[1];
154 tr[2] = translation[2];
155}
156
157//_____________________________________________________________________________
158Bool_t AliAlignObjMatrix::GetAngles(Double_t *angles) const
159{
160 // Get rotation angles from the TGeoHMatrix
161 const Double_t* rot = fMatrix.GetRotationMatrix();
162 return MatrixToAngles(rot,angles);
163}
164
165//_____________________________________________________________________________
befe2c08 166void AliAlignObjMatrix::GetMatrix(TGeoHMatrix& m) const
167{
168 // Get TGeoHMatrix
169 //
170 const Double_t *tr = fMatrix.GetTranslation();
171 m.SetTranslation(tr);
172 const Double_t *rot = fMatrix.GetRotationMatrix();
173 m.SetRotation(rot);
174}
175
03b18860 176//_____________________________________________________________________________
177AliAlignObj& AliAlignObjMatrix::Inverse() const
178{
179 // Return a temporary inverse of the alignment
180 // object. This means 'mis
181 static AliAlignObjMatrix a;
182 a = *this;
183
184 TGeoHMatrix m;
185 GetMatrix(m);
186 a.SetMatrix(m.Inverse());
187
188 return a;
189}