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.                  *
 **************************************************************************/

/* $Id: $ */

#include <stdexcept>
#include <iostream>

#include <TGeoMatrix.h>
#include <TObjArray.h>
#include <TString.h>
#include <TError.h>
#include <TMath.h>

#include "AliSurveyPoint.h"

#include "AliPHOSModuleMisalignment.h"
#include "AliPHOSGeometry.h"

ClassImp(AliPHOSModuleMisalignment)

namespace {

  /*
    Tiny vector/matrix utility stuff. Operates on doubles directly.
    Instead of points and vectors I use arrays of doubles with size 3.
    To make this explicit - I use references to arrays.
  */
  
  //___________________________________________________________________
  void Vector(const Double_t (&p1)[3], const Double_t (&p2)[3], Double_t (&v)[3])
  {
    for(UInt_t i = 0; i < 3; ++i)
      v[i] = p2[i] - p1[i];
  }
  
#if 0
  //___________________________________________________________________
  void MultVector(Double_t (&v)[3], Double_t m)
  {
    v[0] *= m;
    v[1] *= m;
    v[2] *= m;
  }
#endif
  
  /*
    Using points name0, name1, name2 find two orthogonal vectors.
  */
  //___________________________________________________________________
  void FindVectors(const Double_t (&pts)[3][3], Double_t (&v)[3][3])
  {
    Vector(pts[0], pts[2], v[0]);
    //v[1] will be cross-product (v[2] x v[0]).
    Vector(pts[0], pts[1], v[2]);
  }
  
  //___________________________________________________________________
  Double_t Length(const Double_t (&v)[3])
  {
    return TMath::Sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]);
  }
  
#if 0
  //___________________________________________________________________
  Double_t Distance(const Double_t (&p1)[3], const Double_t (&p2)[3])
  {
    return TMath::Sqrt((p2[0] - p1[0]) * (p2[0] - p1[0]) +
		       (p2[1] - p1[1]) * (p2[1] - p1[1]) +
		       (p2[2] - p1[2]) * (p2[2] - p1[2]));
  }
  
  //______________________________________________________________________________
#endif
  void CrossProduct(const Double_t (&v1)[3], const Double_t (&v2)[3], Double_t (&v3)[3])
  {
    v3[0] = v1[1] * v2[2] - v2[1] * v1[2];
    v3[1] = v1[2] * v2[0] - v2[2] * v1[0];
    v3[2] = v1[0] * v2[1] - v2[0] * v1[1];
  }
  
  //___________________________________________________________________
  void Normalize(Double_t (&v)[3])
  {
    const Double_t len = Length(v);
    if(len < 1E-10)//Threshold?
      throw std::runtime_error("Zero len vector");
    v[0] /= len;
    v[1] /= len;
    v[2] /= len;
  }
  
  //______________________________________________________________________________
  void Normalize(Double_t (&v)[3][3])
  {
    for(UInt_t i = 0; i < 3; ++i)
      Normalize(v[i]);
  }
  
  
  //___________________________________________________________________
  void FindRotation(const Double_t (&u)[3][3], const Double_t (&v)[3][3], Double_t (&r)[9])
  {
    //I have orthogonal vectors and very nice rotation matrix.
    //V = R * U, R = V * U ^ t
    r[0] = v[0][0] * u[0][0] + v[1][0] * u[1][0] + v[2][0] * u[2][0];
    r[1] = v[0][0] * u[0][1] + v[1][0] * u[1][1] + v[2][0] * u[2][1];
    r[2] = v[0][0] * u[0][2] + v[1][0] * u[1][2] + v[2][0] * u[2][2];
    
    r[3] = v[0][1] * u[0][0] + v[1][1] * u[1][0] + v[2][1] * u[2][0];
    r[4] = v[0][1] * u[0][1] + v[1][1] * u[1][1] + v[2][1] * u[2][1];
    r[5] = v[0][1] * u[0][2] + v[1][1] * u[1][2] + v[2][1] * u[2][2];
    
    r[6] = v[0][2] * u[0][0] + v[1][2] * u[1][0] + v[2][2] * u[2][0];
    r[7] = v[0][2] * u[0][1] + v[1][2] * u[1][1] + v[2][2] * u[2][1];
    r[8] = v[0][2] * u[0][2] + v[1][2] * u[1][2] + v[2][2] * u[2][2];
  }
  
  //___________________________________________________________________
  void Rotate(const Double_t (&r)[9], const Double_t (&u)[3], Double_t (&v)[3])
  {
    v[0] = r[0] * u[0] + r[1] * u[1] + r[2] * u[2];
    v[1] = r[3] * u[0] + r[4] * u[1] + r[5] * u[2];
    v[2] = r[6] * u[0] + r[7] * u[1] + r[8] * u[2];
  }
  
  //___________________________________________________________________
  void Rotate(const Double_t (&r)[9], const Double_t (&u)[3][3], Double_t (&v)[3][3])
  {
    for(UInt_t i = 0; i < 3; ++i)
      Rotate(r, u[i], v[i]);
  }
  
  /*
    PrintVector, PrintMatrix, Translate are used in "debug" mode only.
  */
  //___________________________________________________________________
  void PrintVector(const Double_t (&v)[3])
  {
    std::cout<<v[0]<<' '<<v[1]<<' '<<v[2]<<std::endl;
  }
  
  //___________________________________________________________________
  void PrintMatrix(const Double_t (&u)[3][3])
  {
    for(UInt_t i = 0; i < 3; ++i)
      PrintVector(u[i]);
  }
  
  //___________________________________________________________________
  void Translate(const Double_t (&t)[3], const Double_t (&u)[3], Double_t (&v)[3])
  {
    for(UInt_t i = 0; i < 3; ++i)
      v[i] = u[i] + t[i];
  }
  
  //___________________________________________________________________
  void Translate(const Double_t (&t)[3], const Double_t (&u)[3][3], Double_t (&v)[3][3])
  {
    for(UInt_t i = 0; i < 3; ++i)
      Translate(t, u[i], v[i]);
  }
  
}

//______________________________________________________________________________
AliPHOSModuleMisalignment::
AliPHOSModuleMisalignment(const AliPHOSGeometry & geom, Bool_t debug)
                            : fDebug(debug),
                              fAngles(),
                              fCenters(),
                              fModule(),
                              fU(),
                              fV()
{
  //Ctor.
  //Extract ideal module transformations from AliPHOSGeometry.

  //Angles.
  for (UInt_t module = 0; module < kModules; ++module)
    for (UInt_t axis = 0; axis < 3; ++axis)
      for (UInt_t angle = 0; angle < 2; ++angle)
        fAngles[module][axis][angle] = geom.GetModuleAngle(module, axis, angle);
  //Translations.
  for (UInt_t module = 0; module < kModules; ++module)
    for (UInt_t axis = 0; axis < 3; ++axis)
      fCenters[module][axis] = geom.GetModuleCenter(module, axis);
  //Points, will be rotated/translated using module angle/center.
  fModule[0][0] = -geom.GetNPhi() / 2. * geom.GetCellStep() + geom.GetCellStep() / 2.;
  fModule[0][1] = -geom.GetNZ()   / 2. * geom.GetCellStep() + geom.GetCellStep() / 2.;
  fModule[0][2] = -22.61;//This number is hardcoded, AliPHOSGeometry does not have it,
                         //only 460. but this is result of transformation applied already.
  fModule[1][0] = fModule[0][0];
  fModule[1][1] = -fModule[0][1] - geom.GetCellStep();
  fModule[1][2] = -22.61;

  fModule[2][0] = -fModule[0][0] - 7 * geom.GetCellStep();
  fModule[2][1] = fModule[0][1];
  fModule[2][2] = -22.61;
}

//______________________________________________________________________________
AliPHOSModuleMisalignment::~AliPHOSModuleMisalignment()
{
}

//______________________________________________________________________________
void AliPHOSModuleMisalignment::
DeltaTransformation(UInt_t module, const TObjArray * points, 
                    const TString & name0, const TString & name1, 
                    const TString & name2, TGeoHMatrix * delta)
{
  //Find delta transformation to misalign module. Global transformation.
  const AliSurveyPoint * pt0 = static_cast<AliSurveyPoint *>(points->FindObject(name0));
  const AliSurveyPoint * pt1 = static_cast<AliSurveyPoint *>(points->FindObject(name1));
  const AliSurveyPoint * pt2 = static_cast<AliSurveyPoint *>(points->FindObject(name2));

  if (!pt0 || !pt1 || !pt2) {
    Warning("AliPHOSModuleData::DeltaTransformation",
            "One of points not found in TObjArray");
    return;
  }

  //Transform fModule using angle and translation for module number "module".
  //fU.
  FindIdealModule(module);
  //Extract coordinates from survey.
  //fV.
  FindRealModule(pt0, pt1, pt2);
  //Find delta, using ideal module (fU) and survey data (fV).
  FindDelta(delta);
}

//______________________________________________________________________________
void AliPHOSModuleMisalignment::FindIdealModule(UInt_t module)
{
  //Ideal module described by fU.
  TGeoHMatrix matrix;
  //Rotation.
  const TGeoRotation r("", 
                       fAngles[module][0][0], fAngles[module][0][1], 
                       fAngles[module][1][0], fAngles[module][1][1], 
                       fAngles[module][2][0], fAngles[module][2][1]);
  matrix.SetRotation(r.GetRotationMatrix());
  //Translation.
  matrix.SetDx(fCenters[module][0]);
  matrix.SetDy(fCenters[module][1]);
  matrix.SetDz(fCenters[module][2]);
  //Find ideal module's points.
  matrix.LocalToMaster(fModule[0], fU[0]);
  matrix.LocalToMaster(fModule[1], fU[1]);
  matrix.LocalToMaster(fModule[2], fU[2]);
}

//______________________________________________________________________________
void AliPHOSModuleMisalignment::FindRealModule(const AliSurveyPoint * pt0, 
                                               const AliSurveyPoint * pt1,
                                               const AliSurveyPoint * pt2)
{
  //Real module - fV.
  //Survey is in millimeters.
  //AliPHOSGeometry is in centimeters.
  const Double_t scale = 0.1;

  fV[0][0] = pt0->GetX() * scale;
  fV[0][1] = pt0->GetY() * scale;
  fV[0][2] = pt0->GetZ() * scale;

  fV[1][0] = pt1->GetX() * scale;
  fV[1][1] = pt1->GetY() * scale;
  fV[1][2] = pt1->GetZ() * scale;

  fV[2][0] = pt2->GetX() * scale;
  fV[2][1] = pt2->GetY() * scale;
  fV[2][2] = pt2->GetZ() * scale;
}

//______________________________________________________________________________
void AliPHOSModuleMisalignment::FindDelta(TGeoHMatrix * delta)const
{
  //Find rotation and translation wich can
  //convert fU into fV (ideal module points into points from survey).
  Double_t u[3][3] = {};
  FindVectors(fU, u);		      
  //Find cross product u2 x u0 and save it in u[2].
  CrossProduct(u[2], u[0], u[1]);
  /*
  const Double_t lenXideal = Length(u[0]);
  const Double_t lenZideal = Length(u[2]);
  */
  Double_t v[3][3] = {};
  FindVectors(fV, v);		      
  //Find cross product (v2 x v0) and save it in v[2].
  CrossProduct(v[2], v[0], v[1]);
  /*
  const Double_t lenXreal = Length(v[0]);
  const Double_t lenZreal = Length(v[2]);
  */
  //Now, find rotation matrix.
  //1. Normalize vectors in u and v.
  try {
    Normalize(u);
    Normalize(v);
  } catch (const std::exception & e) {
    //One of lengths is zero (in principle, impossible, just to be neat).
    Error("AliPHOSModuleMisalignment::FindDelta", 
	  "\tone of vectors from ideal or real\n\tpoints have zero size\n"
	  "\tzero misalignment will be created");
    return;
  }

  //2. Rotation matrix.
  Double_t r[9] = {};
  FindRotation(u, v, r);
  delta->SetRotation(r);
  
#if 1

  //3. Now, rotate fU and look, what translation I have to add.
  Double_t idealRotated[3] = {};
  Rotate(r, fU[0], idealRotated);

  delta->SetDx(fV[0][0] - idealRotated[0]);
  delta->SetDy(fV[0][1] - idealRotated[1]);
  delta->SetDz(fV[0][2] - idealRotated[2]);

  if (fDebug) {
    const Double_t shifts[3] = 
    {fV[0][0] - idealRotated[0], 
     fV[0][1] - idealRotated[1], 
     fV[0][2] - idealRotated[2]};

    Double_t test1[3][3] = {};
    Rotate(r, fU, test1);
    Double_t test2[3][3] = {};
    Translate(shifts, test1, test2);
    std::cout<<"ideal:\n";
    PrintMatrix(fU);
    std::cout<<"misaligned:\n";
    PrintMatrix(test2);
    std::cout<<"real:\n";
    PrintMatrix(fV);
  }

#endif

#if 0
  //3. Now, rotate fU and look, what translation I have to add.
  Double_t idealRotated[3][3] = {};
  Rotate(r, fU, idealRotated);
  //Because of measurement errors, distances 
  //between points has errors. I can try to split
  //this difference (and make "final errors" smaller).
  Double_t zShift[3] = {};
  Vector(fV[0], fV[1], zShift);
  Normalize(zShift);
  
  Double_t xShift[3] = {};
  Vector(fV[0], fV[2], xShift);
  Normalize(xShift);

  MultVector(zShift, 0.5 * (lenZreal - lenZideal));
  MultVector(xShift, 0.5 * (lenXreal - lenXideal));

  Double_t pt1[3] = {};
  Translate(zShift, fV[0], pt1);
  Double_t pt2[3] = {};
  Translate(xShift, pt1, pt2);

  Double_t shifts[] = {pt2[0] - idealRotated[0][0],
                       pt2[1] - idealRotated[0][1],
                       pt2[2] - idealRotated[0][2]};

  delta->SetDx(shifts[0]);
  delta->SetDy(shifts[1]);
  delta->SetDz(shifts[2]);

  if (fDebug) {
    Double_t idealTr[3][3] = {};
    Translate(shifts, idealRotated, idealTr);

    std::cout<<"misaligned:\n";
    PrintMatrix(idealTr);
    std::cout<<"ideal1 "<<Distance(idealTr[0], idealTr[1])<<std::endl;
    std::cout<<"ideal2 "<<Distance(idealTr[0], idealTr[2])<<std::endl;
    std::cout<<"real:\n";
    PrintMatrix(fV);
    std::cout<<"real1 "<<Distance(fV[0], fV[1])<<std::endl;
    std::cout<<"real2 "<<Distance(fV[0], fV[2])<<std::endl;
  }
#endif
}
 AliPHOSModuleMisalignment.cxx:1
 AliPHOSModuleMisalignment.cxx:2
 AliPHOSModuleMisalignment.cxx:3
 AliPHOSModuleMisalignment.cxx:4
 AliPHOSModuleMisalignment.cxx:5
 AliPHOSModuleMisalignment.cxx:6
 AliPHOSModuleMisalignment.cxx:7
 AliPHOSModuleMisalignment.cxx:8
 AliPHOSModuleMisalignment.cxx:9
 AliPHOSModuleMisalignment.cxx:10
 AliPHOSModuleMisalignment.cxx:11
 AliPHOSModuleMisalignment.cxx:12
 AliPHOSModuleMisalignment.cxx:13
 AliPHOSModuleMisalignment.cxx:14
 AliPHOSModuleMisalignment.cxx:15
 AliPHOSModuleMisalignment.cxx:16
 AliPHOSModuleMisalignment.cxx:17
 AliPHOSModuleMisalignment.cxx:18
 AliPHOSModuleMisalignment.cxx:19
 AliPHOSModuleMisalignment.cxx:20
 AliPHOSModuleMisalignment.cxx:21
 AliPHOSModuleMisalignment.cxx:22
 AliPHOSModuleMisalignment.cxx:23
 AliPHOSModuleMisalignment.cxx:24
 AliPHOSModuleMisalignment.cxx:25
 AliPHOSModuleMisalignment.cxx:26
 AliPHOSModuleMisalignment.cxx:27
 AliPHOSModuleMisalignment.cxx:28
 AliPHOSModuleMisalignment.cxx:29
 AliPHOSModuleMisalignment.cxx:30
 AliPHOSModuleMisalignment.cxx:31
 AliPHOSModuleMisalignment.cxx:32
 AliPHOSModuleMisalignment.cxx:33
 AliPHOSModuleMisalignment.cxx:34
 AliPHOSModuleMisalignment.cxx:35
 AliPHOSModuleMisalignment.cxx:36
 AliPHOSModuleMisalignment.cxx:37
 AliPHOSModuleMisalignment.cxx:38
 AliPHOSModuleMisalignment.cxx:39
 AliPHOSModuleMisalignment.cxx:40
 AliPHOSModuleMisalignment.cxx:41
 AliPHOSModuleMisalignment.cxx:42
 AliPHOSModuleMisalignment.cxx:43
 AliPHOSModuleMisalignment.cxx:44
 AliPHOSModuleMisalignment.cxx:45
 AliPHOSModuleMisalignment.cxx:46
 AliPHOSModuleMisalignment.cxx:47
 AliPHOSModuleMisalignment.cxx:48
 AliPHOSModuleMisalignment.cxx:49
 AliPHOSModuleMisalignment.cxx:50
 AliPHOSModuleMisalignment.cxx:51
 AliPHOSModuleMisalignment.cxx:52
 AliPHOSModuleMisalignment.cxx:53
 AliPHOSModuleMisalignment.cxx:54
 AliPHOSModuleMisalignment.cxx:55
 AliPHOSModuleMisalignment.cxx:56
 AliPHOSModuleMisalignment.cxx:57
 AliPHOSModuleMisalignment.cxx:58
 AliPHOSModuleMisalignment.cxx:59
 AliPHOSModuleMisalignment.cxx:60
 AliPHOSModuleMisalignment.cxx:61
 AliPHOSModuleMisalignment.cxx:62
 AliPHOSModuleMisalignment.cxx:63
 AliPHOSModuleMisalignment.cxx:64
 AliPHOSModuleMisalignment.cxx:65
 AliPHOSModuleMisalignment.cxx:66
 AliPHOSModuleMisalignment.cxx:67
 AliPHOSModuleMisalignment.cxx:68
 AliPHOSModuleMisalignment.cxx:69
 AliPHOSModuleMisalignment.cxx:70
 AliPHOSModuleMisalignment.cxx:71
 AliPHOSModuleMisalignment.cxx:72
 AliPHOSModuleMisalignment.cxx:73
 AliPHOSModuleMisalignment.cxx:74
 AliPHOSModuleMisalignment.cxx:75
 AliPHOSModuleMisalignment.cxx:76
 AliPHOSModuleMisalignment.cxx:77
 AliPHOSModuleMisalignment.cxx:78
 AliPHOSModuleMisalignment.cxx:79
 AliPHOSModuleMisalignment.cxx:80
 AliPHOSModuleMisalignment.cxx:81
 AliPHOSModuleMisalignment.cxx:82
 AliPHOSModuleMisalignment.cxx:83
 AliPHOSModuleMisalignment.cxx:84
 AliPHOSModuleMisalignment.cxx:85
 AliPHOSModuleMisalignment.cxx:86
 AliPHOSModuleMisalignment.cxx:87
 AliPHOSModuleMisalignment.cxx:88
 AliPHOSModuleMisalignment.cxx:89
 AliPHOSModuleMisalignment.cxx:90
 AliPHOSModuleMisalignment.cxx:91
 AliPHOSModuleMisalignment.cxx:92
 AliPHOSModuleMisalignment.cxx:93
 AliPHOSModuleMisalignment.cxx:94
 AliPHOSModuleMisalignment.cxx:95
 AliPHOSModuleMisalignment.cxx:96
 AliPHOSModuleMisalignment.cxx:97
 AliPHOSModuleMisalignment.cxx:98
 AliPHOSModuleMisalignment.cxx:99
 AliPHOSModuleMisalignment.cxx:100
 AliPHOSModuleMisalignment.cxx:101
 AliPHOSModuleMisalignment.cxx:102
 AliPHOSModuleMisalignment.cxx:103
 AliPHOSModuleMisalignment.cxx:104
 AliPHOSModuleMisalignment.cxx:105
 AliPHOSModuleMisalignment.cxx:106
 AliPHOSModuleMisalignment.cxx:107
 AliPHOSModuleMisalignment.cxx:108
 AliPHOSModuleMisalignment.cxx:109
 AliPHOSModuleMisalignment.cxx:110
 AliPHOSModuleMisalignment.cxx:111
 AliPHOSModuleMisalignment.cxx:112
 AliPHOSModuleMisalignment.cxx:113
 AliPHOSModuleMisalignment.cxx:114
 AliPHOSModuleMisalignment.cxx:115
 AliPHOSModuleMisalignment.cxx:116
 AliPHOSModuleMisalignment.cxx:117
 AliPHOSModuleMisalignment.cxx:118
 AliPHOSModuleMisalignment.cxx:119
 AliPHOSModuleMisalignment.cxx:120
 AliPHOSModuleMisalignment.cxx:121
 AliPHOSModuleMisalignment.cxx:122
 AliPHOSModuleMisalignment.cxx:123
 AliPHOSModuleMisalignment.cxx:124
 AliPHOSModuleMisalignment.cxx:125
 AliPHOSModuleMisalignment.cxx:126
 AliPHOSModuleMisalignment.cxx:127
 AliPHOSModuleMisalignment.cxx:128
 AliPHOSModuleMisalignment.cxx:129
 AliPHOSModuleMisalignment.cxx:130
 AliPHOSModuleMisalignment.cxx:131
 AliPHOSModuleMisalignment.cxx:132
 AliPHOSModuleMisalignment.cxx:133
 AliPHOSModuleMisalignment.cxx:134
 AliPHOSModuleMisalignment.cxx:135
 AliPHOSModuleMisalignment.cxx:136
 AliPHOSModuleMisalignment.cxx:137
 AliPHOSModuleMisalignment.cxx:138
 AliPHOSModuleMisalignment.cxx:139
 AliPHOSModuleMisalignment.cxx:140
 AliPHOSModuleMisalignment.cxx:141
 AliPHOSModuleMisalignment.cxx:142
 AliPHOSModuleMisalignment.cxx:143
 AliPHOSModuleMisalignment.cxx:144
 AliPHOSModuleMisalignment.cxx:145
 AliPHOSModuleMisalignment.cxx:146
 AliPHOSModuleMisalignment.cxx:147
 AliPHOSModuleMisalignment.cxx:148
 AliPHOSModuleMisalignment.cxx:149
 AliPHOSModuleMisalignment.cxx:150
 AliPHOSModuleMisalignment.cxx:151
 AliPHOSModuleMisalignment.cxx:152
 AliPHOSModuleMisalignment.cxx:153
 AliPHOSModuleMisalignment.cxx:154
 AliPHOSModuleMisalignment.cxx:155
 AliPHOSModuleMisalignment.cxx:156
 AliPHOSModuleMisalignment.cxx:157
 AliPHOSModuleMisalignment.cxx:158
 AliPHOSModuleMisalignment.cxx:159
 AliPHOSModuleMisalignment.cxx:160
 AliPHOSModuleMisalignment.cxx:161
 AliPHOSModuleMisalignment.cxx:162
 AliPHOSModuleMisalignment.cxx:163
 AliPHOSModuleMisalignment.cxx:164
 AliPHOSModuleMisalignment.cxx:165
 AliPHOSModuleMisalignment.cxx:166
 AliPHOSModuleMisalignment.cxx:167
 AliPHOSModuleMisalignment.cxx:168
 AliPHOSModuleMisalignment.cxx:169
 AliPHOSModuleMisalignment.cxx:170
 AliPHOSModuleMisalignment.cxx:171
 AliPHOSModuleMisalignment.cxx:172
 AliPHOSModuleMisalignment.cxx:173
 AliPHOSModuleMisalignment.cxx:174
 AliPHOSModuleMisalignment.cxx:175
 AliPHOSModuleMisalignment.cxx:176
 AliPHOSModuleMisalignment.cxx:177
 AliPHOSModuleMisalignment.cxx:178
 AliPHOSModuleMisalignment.cxx:179
 AliPHOSModuleMisalignment.cxx:180
 AliPHOSModuleMisalignment.cxx:181
 AliPHOSModuleMisalignment.cxx:182
 AliPHOSModuleMisalignment.cxx:183
 AliPHOSModuleMisalignment.cxx:184
 AliPHOSModuleMisalignment.cxx:185
 AliPHOSModuleMisalignment.cxx:186
 AliPHOSModuleMisalignment.cxx:187
 AliPHOSModuleMisalignment.cxx:188
 AliPHOSModuleMisalignment.cxx:189
 AliPHOSModuleMisalignment.cxx:190
 AliPHOSModuleMisalignment.cxx:191
 AliPHOSModuleMisalignment.cxx:192
 AliPHOSModuleMisalignment.cxx:193
 AliPHOSModuleMisalignment.cxx:194
 AliPHOSModuleMisalignment.cxx:195
 AliPHOSModuleMisalignment.cxx:196
 AliPHOSModuleMisalignment.cxx:197
 AliPHOSModuleMisalignment.cxx:198
 AliPHOSModuleMisalignment.cxx:199
 AliPHOSModuleMisalignment.cxx:200
 AliPHOSModuleMisalignment.cxx:201
 AliPHOSModuleMisalignment.cxx:202
 AliPHOSModuleMisalignment.cxx:203
 AliPHOSModuleMisalignment.cxx:204
 AliPHOSModuleMisalignment.cxx:205
 AliPHOSModuleMisalignment.cxx:206
 AliPHOSModuleMisalignment.cxx:207
 AliPHOSModuleMisalignment.cxx:208
 AliPHOSModuleMisalignment.cxx:209
 AliPHOSModuleMisalignment.cxx:210
 AliPHOSModuleMisalignment.cxx:211
 AliPHOSModuleMisalignment.cxx:212
 AliPHOSModuleMisalignment.cxx:213
 AliPHOSModuleMisalignment.cxx:214
 AliPHOSModuleMisalignment.cxx:215
 AliPHOSModuleMisalignment.cxx:216
 AliPHOSModuleMisalignment.cxx:217
 AliPHOSModuleMisalignment.cxx:218
 AliPHOSModuleMisalignment.cxx:219
 AliPHOSModuleMisalignment.cxx:220
 AliPHOSModuleMisalignment.cxx:221
 AliPHOSModuleMisalignment.cxx:222
 AliPHOSModuleMisalignment.cxx:223
 AliPHOSModuleMisalignment.cxx:224
 AliPHOSModuleMisalignment.cxx:225
 AliPHOSModuleMisalignment.cxx:226
 AliPHOSModuleMisalignment.cxx:227
 AliPHOSModuleMisalignment.cxx:228
 AliPHOSModuleMisalignment.cxx:229
 AliPHOSModuleMisalignment.cxx:230
 AliPHOSModuleMisalignment.cxx:231
 AliPHOSModuleMisalignment.cxx:232
 AliPHOSModuleMisalignment.cxx:233
 AliPHOSModuleMisalignment.cxx:234
 AliPHOSModuleMisalignment.cxx:235
 AliPHOSModuleMisalignment.cxx:236
 AliPHOSModuleMisalignment.cxx:237
 AliPHOSModuleMisalignment.cxx:238
 AliPHOSModuleMisalignment.cxx:239
 AliPHOSModuleMisalignment.cxx:240
 AliPHOSModuleMisalignment.cxx:241
 AliPHOSModuleMisalignment.cxx:242
 AliPHOSModuleMisalignment.cxx:243
 AliPHOSModuleMisalignment.cxx:244
 AliPHOSModuleMisalignment.cxx:245
 AliPHOSModuleMisalignment.cxx:246
 AliPHOSModuleMisalignment.cxx:247
 AliPHOSModuleMisalignment.cxx:248
 AliPHOSModuleMisalignment.cxx:249
 AliPHOSModuleMisalignment.cxx:250
 AliPHOSModuleMisalignment.cxx:251
 AliPHOSModuleMisalignment.cxx:252
 AliPHOSModuleMisalignment.cxx:253
 AliPHOSModuleMisalignment.cxx:254
 AliPHOSModuleMisalignment.cxx:255
 AliPHOSModuleMisalignment.cxx:256
 AliPHOSModuleMisalignment.cxx:257
 AliPHOSModuleMisalignment.cxx:258
 AliPHOSModuleMisalignment.cxx:259
 AliPHOSModuleMisalignment.cxx:260
 AliPHOSModuleMisalignment.cxx:261
 AliPHOSModuleMisalignment.cxx:262
 AliPHOSModuleMisalignment.cxx:263
 AliPHOSModuleMisalignment.cxx:264
 AliPHOSModuleMisalignment.cxx:265
 AliPHOSModuleMisalignment.cxx:266
 AliPHOSModuleMisalignment.cxx:267
 AliPHOSModuleMisalignment.cxx:268
 AliPHOSModuleMisalignment.cxx:269
 AliPHOSModuleMisalignment.cxx:270
 AliPHOSModuleMisalignment.cxx:271
 AliPHOSModuleMisalignment.cxx:272
 AliPHOSModuleMisalignment.cxx:273
 AliPHOSModuleMisalignment.cxx:274
 AliPHOSModuleMisalignment.cxx:275
 AliPHOSModuleMisalignment.cxx:276
 AliPHOSModuleMisalignment.cxx:277
 AliPHOSModuleMisalignment.cxx:278
 AliPHOSModuleMisalignment.cxx:279
 AliPHOSModuleMisalignment.cxx:280
 AliPHOSModuleMisalignment.cxx:281
 AliPHOSModuleMisalignment.cxx:282
 AliPHOSModuleMisalignment.cxx:283
 AliPHOSModuleMisalignment.cxx:284
 AliPHOSModuleMisalignment.cxx:285
 AliPHOSModuleMisalignment.cxx:286
 AliPHOSModuleMisalignment.cxx:287
 AliPHOSModuleMisalignment.cxx:288
 AliPHOSModuleMisalignment.cxx:289
 AliPHOSModuleMisalignment.cxx:290
 AliPHOSModuleMisalignment.cxx:291
 AliPHOSModuleMisalignment.cxx:292
 AliPHOSModuleMisalignment.cxx:293
 AliPHOSModuleMisalignment.cxx:294
 AliPHOSModuleMisalignment.cxx:295
 AliPHOSModuleMisalignment.cxx:296
 AliPHOSModuleMisalignment.cxx:297
 AliPHOSModuleMisalignment.cxx:298
 AliPHOSModuleMisalignment.cxx:299
 AliPHOSModuleMisalignment.cxx:300
 AliPHOSModuleMisalignment.cxx:301
 AliPHOSModuleMisalignment.cxx:302
 AliPHOSModuleMisalignment.cxx:303
 AliPHOSModuleMisalignment.cxx:304
 AliPHOSModuleMisalignment.cxx:305
 AliPHOSModuleMisalignment.cxx:306
 AliPHOSModuleMisalignment.cxx:307
 AliPHOSModuleMisalignment.cxx:308
 AliPHOSModuleMisalignment.cxx:309
 AliPHOSModuleMisalignment.cxx:310
 AliPHOSModuleMisalignment.cxx:311
 AliPHOSModuleMisalignment.cxx:312
 AliPHOSModuleMisalignment.cxx:313
 AliPHOSModuleMisalignment.cxx:314
 AliPHOSModuleMisalignment.cxx:315
 AliPHOSModuleMisalignment.cxx:316
 AliPHOSModuleMisalignment.cxx:317
 AliPHOSModuleMisalignment.cxx:318
 AliPHOSModuleMisalignment.cxx:319
 AliPHOSModuleMisalignment.cxx:320
 AliPHOSModuleMisalignment.cxx:321
 AliPHOSModuleMisalignment.cxx:322
 AliPHOSModuleMisalignment.cxx:323
 AliPHOSModuleMisalignment.cxx:324
 AliPHOSModuleMisalignment.cxx:325
 AliPHOSModuleMisalignment.cxx:326
 AliPHOSModuleMisalignment.cxx:327
 AliPHOSModuleMisalignment.cxx:328
 AliPHOSModuleMisalignment.cxx:329
 AliPHOSModuleMisalignment.cxx:330
 AliPHOSModuleMisalignment.cxx:331
 AliPHOSModuleMisalignment.cxx:332
 AliPHOSModuleMisalignment.cxx:333
 AliPHOSModuleMisalignment.cxx:334
 AliPHOSModuleMisalignment.cxx:335
 AliPHOSModuleMisalignment.cxx:336
 AliPHOSModuleMisalignment.cxx:337
 AliPHOSModuleMisalignment.cxx:338
 AliPHOSModuleMisalignment.cxx:339
 AliPHOSModuleMisalignment.cxx:340
 AliPHOSModuleMisalignment.cxx:341
 AliPHOSModuleMisalignment.cxx:342
 AliPHOSModuleMisalignment.cxx:343
 AliPHOSModuleMisalignment.cxx:344
 AliPHOSModuleMisalignment.cxx:345
 AliPHOSModuleMisalignment.cxx:346
 AliPHOSModuleMisalignment.cxx:347
 AliPHOSModuleMisalignment.cxx:348
 AliPHOSModuleMisalignment.cxx:349
 AliPHOSModuleMisalignment.cxx:350
 AliPHOSModuleMisalignment.cxx:351
 AliPHOSModuleMisalignment.cxx:352
 AliPHOSModuleMisalignment.cxx:353
 AliPHOSModuleMisalignment.cxx:354
 AliPHOSModuleMisalignment.cxx:355
 AliPHOSModuleMisalignment.cxx:356
 AliPHOSModuleMisalignment.cxx:357
 AliPHOSModuleMisalignment.cxx:358
 AliPHOSModuleMisalignment.cxx:359
 AliPHOSModuleMisalignment.cxx:360
 AliPHOSModuleMisalignment.cxx:361
 AliPHOSModuleMisalignment.cxx:362
 AliPHOSModuleMisalignment.cxx:363
 AliPHOSModuleMisalignment.cxx:364
 AliPHOSModuleMisalignment.cxx:365
 AliPHOSModuleMisalignment.cxx:366
 AliPHOSModuleMisalignment.cxx:367
 AliPHOSModuleMisalignment.cxx:368
 AliPHOSModuleMisalignment.cxx:369
 AliPHOSModuleMisalignment.cxx:370
 AliPHOSModuleMisalignment.cxx:371
 AliPHOSModuleMisalignment.cxx:372
 AliPHOSModuleMisalignment.cxx:373
 AliPHOSModuleMisalignment.cxx:374
 AliPHOSModuleMisalignment.cxx:375
 AliPHOSModuleMisalignment.cxx:376
 AliPHOSModuleMisalignment.cxx:377
 AliPHOSModuleMisalignment.cxx:378
 AliPHOSModuleMisalignment.cxx:379
 AliPHOSModuleMisalignment.cxx:380
 AliPHOSModuleMisalignment.cxx:381
 AliPHOSModuleMisalignment.cxx:382
 AliPHOSModuleMisalignment.cxx:383
 AliPHOSModuleMisalignment.cxx:384
 AliPHOSModuleMisalignment.cxx:385
 AliPHOSModuleMisalignment.cxx:386
 AliPHOSModuleMisalignment.cxx:387
 AliPHOSModuleMisalignment.cxx:388
 AliPHOSModuleMisalignment.cxx:389
 AliPHOSModuleMisalignment.cxx:390
 AliPHOSModuleMisalignment.cxx:391
 AliPHOSModuleMisalignment.cxx:392
 AliPHOSModuleMisalignment.cxx:393
 AliPHOSModuleMisalignment.cxx:394
 AliPHOSModuleMisalignment.cxx:395
 AliPHOSModuleMisalignment.cxx:396
 AliPHOSModuleMisalignment.cxx:397
 AliPHOSModuleMisalignment.cxx:398
 AliPHOSModuleMisalignment.cxx:399
 AliPHOSModuleMisalignment.cxx:400
 AliPHOSModuleMisalignment.cxx:401
 AliPHOSModuleMisalignment.cxx:402
 AliPHOSModuleMisalignment.cxx:403
 AliPHOSModuleMisalignment.cxx:404