ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

//-----------------------------------------------------------------
//   Implementation of the alignment object class through
//   the derived concrete representation of alignment object class:
//   AliAlignObjMatrix derived from the base class AliAlignObj
//-----------------------------------------------------------------

#include "AliAlignObj.h"
#include "AliAlignObjMatrix.h"

ClassImp(AliAlignObjMatrix)

//_____________________________________________________________________________
AliAlignObjMatrix::AliAlignObjMatrix() : 
  AliAlignObj(),
  fMatrix()
{
  // Default constructor
  //
}

//_____________________________________________________________________________
AliAlignObjMatrix::AliAlignObjMatrix(const char* symname, 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 *) :
  AliAlignObj(symname,volUId),
  fMatrix()
{
  // standard constructor with 3 translation + 3 rotation parameters
  // If the user explicitly sets the global variable to kFALSE then the
  // parameters are interpreted as giving the local transformation.
  // This requires to have a gGeoMenager active instance, otherwise the
  // constructor will fail (no object created)
  // 
  if(global){
    SetPars(x, y, z, psi, theta, phi);
  }else{
    if(!SetLocalPars(x,y,z,psi,theta,phi)) throw "Alignment object creation failed (TGeo instance needed)!\n";
  }
}


//_____________________________________________________________________________
AliAlignObjMatrix::AliAlignObjMatrix(const char* symname, UShort_t volUId, TGeoMatrix& m, Bool_t global) throw (const Char_t *) :
  AliAlignObj(symname,volUId),
  fMatrix()
{
  // standard constructor with TGeoMatrix
  // If the user explicitly sets the global variable to kFALSE then the
  // parameters are interpreted as giving the local transformation.
  // This requires to have a gGeoMenager active instance, otherwise the
  // constructor will fail (no object created)
  //

  if (global) {
    SetMatrix(m);
  }
  else {
    if (!SetLocalMatrix(m)) throw "Alignment object creation failed (TGeo instance needed)!\n";
  }
}

//_____________________________________________________________________________
AliAlignObjMatrix::AliAlignObjMatrix(const AliAlignObj& theAlignObj) :
  AliAlignObj(theAlignObj),
  fMatrix()
{
  //copy constructor
  //
  Double_t tr[3];
  theAlignObj.GetTranslation(tr);
  SetTranslation(tr[0],tr[1],tr[2]);
  Double_t rot[3];
  if (theAlignObj.GetAngles(rot))
    SetRotation(rot[0],rot[1],rot[2]);
}

//_____________________________________________________________________________
AliAlignObjMatrix &AliAlignObjMatrix::operator =(const AliAlignObj& theAlignObj)
{  
  // assignment operator
  //
  if(this==&theAlignObj) return *this;
  ((AliAlignObj *)this)->operator=(theAlignObj);
  Double_t tr[3];
  theAlignObj.GetTranslation(tr);
  SetTranslation(tr[0],tr[1],tr[2]);
  Double_t rot[3];
  if (theAlignObj.GetAngles(rot))
    SetRotation(rot[0],rot[1],rot[2]);

  return *this;
}

//_____________________________________________________________________________
AliAlignObjMatrix::~AliAlignObjMatrix()
{
  // Destructor
  //
}

//_____________________________________________________________________________
void AliAlignObjMatrix::SetTranslation(Double_t x, Double_t y, Double_t z)
{
  // set the translation coefficients of the data member matrix
  // from the parameters passed as arguments
  // 
  Double_t tr[3];
  tr[0]=x; tr[1]=y; tr[2]=z;
  fMatrix.SetTranslation(tr);
}

//_____________________________________________________________________________
void AliAlignObjMatrix::SetTranslation(const TGeoMatrix& m)
{
  // set the translation coefficients of the data member matrix
  // from the matrix passed as argument
  // 
  const Double_t *tr = m.GetTranslation();
  fMatrix.SetTranslation(tr);
}

//_____________________________________________________________________________
void AliAlignObjMatrix::SetRotation(Double_t psi, Double_t theta, Double_t phi)
{
  // set the rotation parameters from the parameters passed as arguments
  // 
  Double_t angles[3] = {psi, theta, phi};
  Double_t rot[9];
  AnglesToMatrix(angles,rot);
  fMatrix.SetRotation(rot);
}

//_____________________________________________________________________________
Bool_t AliAlignObjMatrix::SetRotation(const TGeoMatrix& m)
{
  // set the rotation coefficients of the data member matrix
  // from the matrix passed as argument
  // 
  const Double_t* rot = m.GetRotationMatrix();
  fMatrix.SetRotation(rot);
  return kTRUE;
}

//_____________________________________________________________________________
void AliAlignObjMatrix::GetTranslation(Double_t *tr) const
{
  // Get Translation from TGeoMatrix
  const Double_t* translation = fMatrix.GetTranslation();
  tr[0] = translation[0];
  tr[1] = translation[1];
  tr[2] = translation[2];
}

//_____________________________________________________________________________
Bool_t AliAlignObjMatrix::GetAngles(Double_t *angles) const
{
  // Get rotation angles from the TGeoHMatrix
  const Double_t* rot = fMatrix.GetRotationMatrix();
  return MatrixToAngles(rot,angles);
}

//_____________________________________________________________________________
void AliAlignObjMatrix::GetMatrix(TGeoHMatrix& m) const
{
  // Get TGeoHMatrix
  //
  const Double_t *tr = fMatrix.GetTranslation();
  m.SetTranslation(tr);
  const Double_t *rot = fMatrix.GetRotationMatrix();
  m.SetRotation(rot);
}

//_____________________________________________________________________________
AliAlignObj& AliAlignObjMatrix::Inverse() const
{
  // Return a temporary "inverse" of the alignment object, that is return
  // an object with inverted transformation matrix.
  //
   static AliAlignObjMatrix a;
   a = *this;

   TGeoHMatrix m;
   GetMatrix(m);
   a.SetMatrix(m.Inverse());

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