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 concrete representation of alignment object class
//   AliAlignObjParams derived from the base class AliAlignObj
//-----------------------------------------------------------------

#include "AliAlignObj.h"
#include "AliAlignObjParams.h"

ClassImp(AliAlignObjParams)

//_____________________________________________________________________________
AliAlignObjParams::AliAlignObjParams() : AliAlignObj()
{
  // default constructor
  //
  fTranslation[0]=fTranslation[1]=fTranslation[2]=0.;
  fRotation[0]=fRotation[1]=fRotation[2]=0.;
}

//_____________________________________________________________________________
AliAlignObjParams::AliAlignObjParams(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)
{
  // 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";
  }
}

//_____________________________________________________________________________
AliAlignObjParams::AliAlignObjParams(const char* symname, UShort_t volUId, TGeoMatrix& m, Bool_t global) throw (const Char_t *) : AliAlignObj(symname,volUId)
{
  // 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 (!SetMatrix(m)) throw "Alignment object creation failed (can't extract roll-pitch-yall angles from the matrix)!\n";

  if (!global) {
    if (!SetLocalPars(fTranslation[0],fTranslation[1],fTranslation[2],fRotation[0],fRotation[1],fRotation[2])) throw "Alignment object creation failed (TGeo instance needed)!\n";
  }
}

//_____________________________________________________________________________
AliAlignObjParams::AliAlignObjParams(const AliAlignObj& theAlignObj) :
  AliAlignObj(theAlignObj)
{
  // 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]);
  else
    fRotation[0]=fRotation[1]=fRotation[2]=0.;
}

//_____________________________________________________________________________
AliAlignObjParams &AliAlignObjParams::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;
}

//_____________________________________________________________________________
AliAlignObjParams::~AliAlignObjParams()
{
  // default destructor
  //
}

//_____________________________________________________________________________
void AliAlignObjParams::SetTranslation(const TGeoMatrix& m)
{
  // set the translation parameters extracting them from the matrix
  // passed as argument
  // 
  if(m.IsTranslation()){
    const Double_t* tr = m.GetTranslation();
    fTranslation[0]=tr[0];  fTranslation[1]=tr[1]; fTranslation[2]=tr[2];
  }else{
    fTranslation[0] = fTranslation[1] = fTranslation[2] = 0.;
  }
}

//_____________________________________________________________________________
Bool_t AliAlignObjParams::SetRotation(const TGeoMatrix& m)
{
  // set the rotation parameters extracting them from the matrix
  // passed as argument
  // 
  if(m.IsRotation()){
    const Double_t* rot = m.GetRotationMatrix();
    return MatrixToAngles(rot,fRotation);
  }else{
    fRotation[0] = fRotation[1] = fRotation[2] = 0.;
    return kTRUE;
  }
}

//_____________________________________________________________________________
void AliAlignObjParams::GetMatrix(TGeoHMatrix& m) const
{
  // get the transformation matrix from the data memebers parameters
  m.SetTranslation(&fTranslation[0]);
  Double_t rot[9];
  AnglesToMatrix(fRotation,rot);
  m.SetRotation(rot);
}

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

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

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