A new class AliPHOSModuleMisalignment is added to read survey data
authorkharlov <kharlov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 10 Dec 2008 05:16:59 +0000 (05:16 +0000)
committerkharlov <kharlov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 10 Dec 2008 05:16:59 +0000 (05:16 +0000)
with PHOS position in P2 (T.Pocheptsov).

PHOS/AliPHOSModuleMisalignment.cxx [new file with mode: 0644]
PHOS/AliPHOSModuleMisalignment.h [new file with mode: 0644]
PHOS/CMake_libPHOSbase.txt
PHOS/MakePHOSFullMisAlignment.C
PHOS/PHOSbaseLinkDef.h
PHOS/data/phos_mod3_survey_2008.txt [new file with mode: 0644]
PHOS/libPHOSbase.pkg

diff --git a/PHOS/AliPHOSModuleMisalignment.cxx b/PHOS/AliPHOSModuleMisalignment.cxx
new file mode 100644 (file)
index 0000000..920fff3
--- /dev/null
@@ -0,0 +1,400 @@
+/**************************************************************************
+ * 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];
+  }
+  
+  //___________________________________________________________________
+  void MultVector(Double_t (&v)[3], Double_t m)
+  {
+    v[0] *= m;
+    v[1] *= m;
+    v[2] *= m;
+  }
+  
+  /*
+    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]);
+  }
+  
+  //___________________________________________________________________
+  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]));
+  }
+  
+  //______________________________________________________________________________
+  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
+}
diff --git a/PHOS/AliPHOSModuleMisalignment.h b/PHOS/AliPHOSModuleMisalignment.h
new file mode 100644 (file)
index 0000000..982393f
--- /dev/null
@@ -0,0 +1,103 @@
+#ifndef ALIPHOSMODULEMISALIGNMENT_H
+#define ALIPHOSMODULEMISALIGNMENT_H
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice                               */
+
+/* $Id: $ */
+
+// Utility class to calculate PHOS module's 
+// misalignment from ideal geometry (defined by AliPHOSGeometry)
+// and survey data. 5 modules expected.
+// Number of modules is specified by enumerator kModules here,
+// if this number changes in AliPHOSGeometry
+// - CHANGE kModules constant here.
+// We do not have such compile-time constant in
+// AliPHOSGeometry.
+// I define module position by three points
+// with names "name0", "name1", "name2".
+//
+// Module:
+//                                 |
+// <-------------Z-----------------|--
+// name1 ------------------- name0 |
+//                               | |
+//                               | |
+//                               | |
+//                               | |
+//                               | |
+//                               | X
+//                               | |
+//                               | |
+//                               | |
+//                               | |
+//                           name2 |
+//
+// For example, in
+//    "PHOS MODULE Position 2 (Production 2) 
+//     MEASUREMENT AFTER FINAL INSTALLATION
+//     Measurement on 19.05.2008": (https://edms.cern.ch/document/922320)
+//
+// name0 == "T2_10000"
+// name1 == "T2_10027"
+// name2 == "T2_24000"
+//
+// Usage:
+//
+// ...
+// AliPHOSGeometry * phosGeom = AliPHOSGeometry::GetInstance("IHEP", "");
+// ...
+// //For AliSurveyObj usage details see $ALICE_ROOT/STEER/AliSurveyObj.h,
+// //here's example with local file.
+// AliSurveyObj survey;
+// survey.FillFromLocalFile("local_file_name");
+// ...
+// AliPHOSModuleMisalignment delta(*phosGeom);
+// TGeoHMatrix m;//matrix to save transformations in.
+// delta.DeltaTransformation(moduleNumber, survey.GetData(), "T2_10000",
+//                           "T2_10027", "T2_24000", &m);
+//
+// Author: Timur Pocheptsov.
+// 2 December 2008
+
+//ROOT's typedefs.
+#include <Rtypes.h>
+
+class TGeoHMatrix;
+class TString;
+
+class AliSurveyPoint;
+class AliPHOSGeometry;
+
+class AliPHOSModuleMisalignment {
+  enum {
+    kModules = 5
+  };
+
+public:
+  AliPHOSModuleMisalignment(const AliPHOSGeometry & geom, Bool_t debug = kFALSE);
+  //ClassDef macro will add virtual functions,
+  //so, I have to define virtual dtor
+  //to supress warnings.
+  virtual ~AliPHOSModuleMisalignment();
+  //Module number "module" starts from zero.
+  void DeltaTransformation(UInt_t module, const TObjArray * points, const TString & name0,
+                           const TString & name1, const TString & name2, TGeoHMatrix * delta);
+private:
+  void FindIdealModule(UInt_t module);
+  void FindRealModule(const AliSurveyPoint * pt0, const AliSurveyPoint * pt1,
+                      const AliSurveyPoint * pt2);
+  void FindDelta(TGeoHMatrix * delta)const;
+
+private:
+  Bool_t   fDebug;  // debug level
+
+  Double_t fAngles[kModules][3][2]; // Matrix of rotation angles
+  Double_t fCenters[kModules][3];   // Matrix of center displacements
+  Double_t fModule[3][3];  //Module's described by 3 points (non-positioned module)
+  Double_t fU[3][3];       //Points from ideal module
+  Double_t fV[3][3];       //Points from real module
+
+  ClassDef(AliPHOSModuleMisalignment, 1)//Utility class for module misalignment.
+};
+
+#endif
index 7cbc189..256c648 100644 (file)
@@ -21,6 +21,7 @@ set(SRCS
                  AliPHOSEmcBadChannelsMap.cxx
                  AliPHOSSurvey.cxx
                  AliPHOSSurvey1.cxx
+                 AliPHOSModuleMisalignment.cxx
                  AliPHOSQAChecker.cxx
                  AliPHOSRecParticle.cxx AliPHOSRecPoint.cxx
                  AliPHOSEmcRecPoint.cxx
index 21fb1ae..a13185f 100644 (file)
@@ -18,7 +18,10 @@ void MakePHOSFullMisAlignment()
   //Activate CDB storage and load geometry from CDB
   //I need valid gGeoManager to create local transformations.
   
-  //[Part of code, taken from ITS version of MakexxxFullMisalignment
+  //[Part of code, taken from ITS version of MakexxxFullMisalignment.
+  //This code was required only for local delta transformations.
+  //Now, transformations are global, so no gGeoManager and geometry are required.
+  /*
   AliCDBManager * cdb = AliCDBManager::Instance();
   if (!cdb->IsDefaultStorageSet())
     cdb->SetDefaultStorage("local://$ALICE_ROOT");
@@ -48,12 +51,14 @@ void MakePHOSFullMisAlignment()
     AliGeomManager::SetGeometry((TGeoManager*) entry->GetObject());
   }else{
     AliGeomManager::LoadGeometry("geometry.root"); //load geom from default CDB storage
-  }    
+  }  
+  */  
   //end of code taken from ITS version of MakexxxFullMisalignment]
 
   AliPHOSEMCAGeometry * emca = phosGeom->GetEMCAGeometry();
-  TClonesArray alobj("AliAlignObjParams", 16);// + phosGeom->GetNModules() * emca->GetNStripX() * emca->GetNStripZ());
-   
+  TClonesArray alobj("AliAlignObjParams", 16);// + phosGeom->GetNModules() * emca->GetNStripX() *
+                                              //   emca->GetNStripZ());
+  
   const Double_t dpsi = 0., dtheta = 0., dphi = 0.;
   const Double_t displacement = 10.;
   Int_t iIndex = 0; //let all modules have index=0 in a layer with no LUT
@@ -63,25 +68,33 @@ void MakePHOSFullMisAlignment()
 
   // Alignment for 5 PHOS modules
 
-  new(alobj[i++]) AliAlignObjParams("PHOS/Module1",
-         volid, 0., 0., 0., 0., 0., 0., kTRUE);
-  new(alobj[i++]) AliAlignObjParams("PHOS/Module2",
-         volid, 2., 0., 0., 0., 0., 0., kTRUE);
-
-  Double_t rotMatrix[9] = {0.999992695, -0.00295322, -0.0024267, 
-                          0.002955489, 0.999995199, 0.00093165, 
-                          0.002423942, -0.000938811, 0.99999662};
-  TGeoRotation rotation;
-  rotation.SetMatrix(rotMatrix);
-  Double_t dX=1.25474126, dY=-1.4088643, dZ=-12.856;
-  AliAlignObjParams * mod3 = 
-    new(alobj[i++]) AliAlignObjParams("PHOS/Module3", volid, dX, dY, dZ, 0., 0., 0., kFALSE);
-  mod3->SetRotation(rotation);
+  TString surveyFileName;
   
-  new(alobj[i++]) AliAlignObjParams("PHOS/Module4",
-         volid, 0.,  0., 0., 0., 0., 0., kTRUE);
-  new(alobj[i++]) AliAlignObjParams("PHOS/Module5",
-         volid, 0., 0., 0., 0., 0., 0., kTRUE);
+  const Char_t * szEnv = gSystem->Getenv("ALICE_ROOT");
+  if (szEnv && szEnv[0]) {
+    surveyFileName += szEnv;
+    if (surveyFileName[surveyFileName.Length() - 1] != '/')
+      surveyFileName += '/';
+  } else {
+    Warning(macroName, "cannot find ALICE_ROOT environment variable\n"
+                      "probably, I wan't be able to find survey file");
+  }
+    
+  surveyFileName += "PHOS/data/phos_mod3_survey_2008.txt";
+
+  new(alobj[i++]) AliAlignObjParams("PHOS/Module1", volid, 0., 0., 0., 0., 0., 0., kTRUE);
+  new(alobj[i++]) AliAlignObjParams("PHOS/Module2", volid, 2., 0., 0., 0., 0., 0., kTRUE);
+  //
+  AliSurveyObj survey;
+  survey.FillFromLocalFile(surveyFileName.Data());
+  TGeoHMatrix module3Delta;
+  AliPHOSModuleMisalignment delta(*phosGeom);
+  delta.DeltaTransformation(2, survey.GetData(), "T2_10000", "T2_10027", "T2_24000", 
+                           &module3Delta);
+  new(alobj[i++]) AliAlignObjParams("PHOS/Module3", volid, module3Delta, kTRUE);
+  //
+  new(alobj[i++]) AliAlignObjParams("PHOS/Module4", volid, 0.,  0., 0., 0., 0., 0., kTRUE);
+  new(alobj[i++]) AliAlignObjParams("PHOS/Module5", volid, 0., 0., 0., 0., 0., 0., kTRUE);
 
   const Double_t dx = 0., dy = 0., dz = 0. ;
   // Alignment of CPV modules
index 77d8b47..6e01164 100644 (file)
@@ -29,6 +29,7 @@
 #pragma link C++ class AliPHOSEmcBadChannelsMap+;
 #pragma link C++ class AliPHOSSurvey+;
 #pragma link C++ class AliPHOSSurvey1+;
+#pragma link C++ class AliPHOSModuleMisalignment+;
 
 #pragma link C++ class AliPHOSQAChecker+;
 #pragma link C++ class AliPHOSRecParticle+;
diff --git a/PHOS/data/phos_mod3_survey_2008.txt b/PHOS/data/phos_mod3_survey_2008.txt
new file mode 100644 (file)
index 0000000..ba13321
--- /dev/null
@@ -0,0 +1,479 @@
+> Title:
+PHOS MODULE Position 2 (Production 2), MEASUREMENT AFTER FINAL INSTALLATION
+> Date:
+19/05/2008
+> Subdetector:
+PHOS
+> Report URL:
+https://edms.cern.ch/document/922320
+> Version:
+1
+> General Observations:
+Measurement of 19/05/2008 is given with prefix T1_
+Transformed measurement results of 27/02/2008 is given with prefix T2_
+Point Types: M(easured),T(ransformed), R(eference)
+> Coordinate System:
+ALICEPH
+> Units:
+mm
+> Nr Columns:
+7
+> Column Names:
+Point Name,XLOCAL,YLOCAL,ZLOCAL,Point Type,Target Used,Precision(mm)
+> Data:
+T1_5000 -678.5 -4314.8 -835.5 R Y 1.0
+T1_5001 721.8 -4309.6 -825.9 R Y 1.0
+T1_5002 712.4 -4312.4 804.9 R Y 1.0
+T1_5003 -688.3 -4313.4 804.6 R Y 1.0
+T2_5000 -677.9 -4314.1 -832.0 T Y 1.0
+T2_5001 719.7 -4310.4 -823.2 T Y 1.0
+T2_5002 712.4 -4311.7 803.9 T Y 1.0
+T2_5003 -686.7 -4314.2 799.3 T Y 1.0
+T2_10000 -697.5 -4472.6 -640.5 T Y 1.0
+T2_10027 -700.5 -4471.9 585.4 T Y 1.0
+T2_25000 727.2 -4469.2 -614.5 T Y 1.0
+T2_25027 722.6 -4470.3 612.4 T Y 1.0
+T2_10001 -697.5 -4472.3 -595.4 T Y 1.0
+T2_10002 -697.4 -4472.5 -550.0 T Y 1.0
+T2_10003 -697.1 -4472.2 -504.4 T Y 1.0
+T2_10004 -697.5 -4472.2 -458.8 T Y 1.0
+T2_10005 -698.3 -4472.3 -413.3 T Y 1.0
+T2_10006 -698.4 -4472.6 -367.9 T Y 1.0
+T2_10007 -697.8 -4472.3 -322.9 T Y 1.0
+T2_10008 -698.5 -4472.3 -277.7 T Y 1.0
+T2_10009 -698.5 -4472.2 -232.5 T Y 1.0
+T2_10010 -698.3 -4471.4 -186.7 T Y 1.0
+T2_10011 -698.5 -4472.1 -142.0 T Y 1.0
+T2_10012 -698.3 -4472.2 -97.0 T Y 1.0
+T2_10013 -699.3 -4472.4 -50.5 T Y 1.0
+T2_10014 -699.9 -4471.8 -5.2 T Y 1.0
+T2_10015 -700.4 -4471.1 40.9 T Y 1.0
+T2_10016 -700.2 -4472.2 86.1 T Y 1.0
+T2_10017 -698.4 -4471.8 131.7 T Y 1.0
+T2_10018 -700.9 -4471.6 177.5 T Y 1.0
+T2_10019 -701.4 -4472.0 223.1 T Y 1.0
+T2_10020 -700.5 -4471.8 268.6 T Y 1.0
+T2_10021 -700.5 -4472.0 313.4 T Y 1.0
+T2_10022 -701.2 -4471.9 358.9 T Y 1.0
+T2_10023 -700.8 -4471.8 404.0 T Y 1.0
+T2_10024 -700.0 -4471.5 449.4 T Y 1.0
+T2_10025 -700.2 -4471.3 494.5 T Y 1.0
+T2_10026 -700.3 -4471.5 540.9 T Y 1.0
+T2_11000 -539.0 -4472.2 -618.1 T Y 1.0
+T2_11001 -538.6 -4472.0 -572.7 T Y 1.0
+T2_11002 -539.4 -4471.8 -526.7 T Y 1.0
+T2_11003 -538.3 -4471.6 -482.1 T Y 1.0
+T2_11004 -539.1 -4471.8 -436.6 T Y 1.0
+T2_11005 -539.4 -4472.0 -391.1 T Y 1.0
+T2_11006 -539.9 -4471.8 -346.2 T Y 1.0
+T2_11007 -539.7 -4471.7 -300.4 T Y 1.0
+T2_11008 -539.9 -4471.2 -255.6 T Y 1.0
+T2_11009 -540.3 -4471.8 -209.6 T Y 1.0
+T2_11010 -540.3 -4471.8 -164.4 T Y 1.0
+T2_11011 -540.5 -4471.4 -119.7 T Y 1.0
+T2_11012 -540.7 -4471.4 -74.2 T Y 1.0
+T2_11013 -541.3 -4471.5 -27.9 T Y 1.0
+T2_11014 -540.6 -4471.6 17.5 T Y 1.0
+T2_11015 -540.9 -4471.0 62.7 T Y 1.0
+T2_11016 -541.0 -4471.7 108.0 T Y 1.0
+T2_11017 -541.2 -4471.5 154.1 T Y 1.0
+T2_11018 -542.1 -4471.5 199.4 T Y 1.0
+T2_11019 -543.1 -4471.4 245.1 T Y 1.0
+T2_11020 -542.0 -4471.4 290.8 T Y 1.0
+T2_11021 -541.4 -4471.2 336.3 T Y 1.0
+T2_11022 -542.1 -4471.4 381.3 T Y 1.0
+T2_11023 -542.3 -4471.4 426.2 T Y 1.0
+T2_11024 -542.2 -4471.4 471.4 T Y 1.0
+T2_11025 -542.3 -4471.5 517.0 T Y 1.0
+T2_11026 -543.0 -4471.6 562.4 T Y 1.0
+T2_11027 -542.7 -4471.9 607.2 T Y 1.0
+T2_12000 -515.6 -4472.0 -640.0 T Y 1.0
+T2_12001 -515.4 -4471.8 -594.5 T Y 1.0
+T2_12002 -517.0 -4472.0 -549.2 T Y 1.0
+T2_12003 -515.5 -4471.8 -504.7 T Y 1.0
+T2_12004 -516.2 -4471.9 -458.1 T Y 1.0
+T2_12005 -516.3 -4471.1 -411.6 T Y 1.0
+T2_12006 -517.3 -4471.5 -366.5 T Y 1.0
+T2_12007 -516.4 -4471.6 -320.4 T Y 1.0
+T2_12008 -517.0 -4472.0 -276.1 T Y 1.0
+T2_12009 -517.5 -4471.4 -230.5 T Y 1.0
+T2_12010 -516.9 -4471.0 -185.3 T Y 1.0
+T2_12011 -517.7 -4471.5 -140.0 T Y 1.0
+T2_12012 -517.8 -4471.4 -95.0 T Y 1.0
+T2_12013 -518.5 -4471.6 -49.6 T Y 1.0
+T2_12014 -518.3 -4471.3 -4.3 T Y 1.0
+T2_12015 -518.5 -4471.5 41.5 T Y 1.0
+T2_12016 -518.2 -4471.1 86.6 T Y 1.0
+T2_12017 -518.4 -4471.7 132.4 T Y 1.0
+T2_12018 -518.5 -4471.3 178.8 T Y 1.0
+T2_12019 -520.4 -4470.7 224.1 T Y 1.0
+T2_12020 -518.6 -4471.5 269.3 T Y 1.0
+T2_12021 -518.7 -4471.0 314.8 T Y 1.0
+T2_12022 -518.5 -4471.5 359.9 T Y 1.0
+T2_12023 -519.3 -4471.6 405.5 T Y 1.0
+T2_12024 -519.0 -4471.5 450.7 T Y 1.0
+T2_12025 -519.3 -4471.6 496.3 T Y 1.0
+T2_12026 -520.0 -4471.4 541.4 T Y 1.0
+T2_12027 -520.1 -4470.4 588.4 T Y 1.0
+T2_13000 -357.8 -4471.5 -619.3 T Y 1.0
+T2_13001 -357.8 -4470.4 -573.5 T Y 1.0
+T2_13002 -358.0 -4470.6 -528.3 T Y 1.0
+T2_13003 -357.9 -4471.0 -480.4 T Y 1.0
+T2_13004 -357.8 -4471.5 -435.6 T Y 1.0
+T2_13005 -358.2 -4471.4 -389.7 T Y 1.0
+T2_13006 -358.9 -4471.4 -344.9 T Y 1.0
+T2_13007 -358.8 -4470.9 -299.3 T Y 1.0
+T2_13008 -358.9 -4471.1 -253.9 T Y 1.0
+T2_13009 -359.2 -4471.3 -208.9 T Y 1.0
+T2_13010 -358.6 -4471.2 -164.1 T Y 1.0
+T2_13011 -360.2 -4471.3 -118.3 T Y 1.0
+T2_13012 -360.3 -4471.2 -72.8 T Y 1.0
+T2_13013 -359.8 -4471.2 -27.1 T Y 1.0
+T2_13014 -360.1 -4471.1 18.2 T Y 1.0
+T2_13015 -360.1 -4471.2 63.2 T Y 1.0
+T2_13016 -359.8 -4471.2 108.5 T Y 1.0
+T2_13017 -360.4 -4471.0 154.1 T Y 1.0
+T2_13018 -360.1 -4468.2 200.1 T Y 1.0
+T2_13019 -362.8 -4471.2 245.4 T Y 1.0
+T2_13020 -360.4 -4471.2 290.5 T Y 1.0
+T2_13021 -360.7 -4471.3 336.3 T Y 1.0
+T2_13022 -360.8 -4470.9 381.8 T Y 1.0
+T2_13023 -361.5 -4471.2 427.1 T Y 1.0
+T2_13024 -361.3 -4471.3 472.2 T Y 1.0
+T2_13025 -361.5 -4470.8 517.8 T Y 1.0
+T2_13026 -361.3 -4470.6 563.1 T Y 1.0
+T2_13027 -361.9 -4470.7 610.7 T Y 1.0
+T2_14000 -334.7 -4471.9 -641.1 T Y 1.0
+T2_14001 -335.2 -4471.5 -595.6 T Y 1.0
+T2_14002 -334.9 -4471.2 -550.2 T Y 1.0
+T2_14003 -335.4 -4471.8 -505.4 T Y 1.0
+T2_14004 -335.1 -4471.4 -459.5 T Y 1.0
+T2_14005 -335.6 -4470.9 -413.3 T Y 1.0
+T2_14006 -336.0 -4471.1 -367.3 T Y 1.0
+T2_14007 -336.0 -4471.1 -321.9 T Y 1.0
+T2_14008 -336.3 -4471.3 -277.0 T Y 1.0
+T2_14009 -336.3 -4471.2 -231.8 T Y 1.0
+T2_14010 -336.4 -4471.3 -186.3 T Y 1.0
+T2_14011 -337.1 -4471.5 -140.8 T Y 1.0
+T2_14012 -336.9 -4470.9 -96.2 T Y 1.0
+T2_14013 -336.9 -4469.9 -49.4 T Y 1.0
+T2_14014 -337.1 -4471.3 -3.9 T Y 1.0
+T2_14015 -337.6 -4471.2 41.4 T Y 1.0
+T2_14016 -337.6 -4471.2 87.3 T Y 1.0
+T2_14017 -337.9 -4471.4 132.5 T Y 1.0
+T2_14018 -337.7 -4471.1 177.7 T Y 1.0
+T2_14019 -337.7 -4470.5 222.7 T Y 1.0
+T2_14020 -338.0 -4471.0 268.0 T Y 1.0
+T2_14021 -338.1 -4471.1 313.1 T Y 1.0
+T2_14022 -338.4 -4471.1 359.8 T Y 1.0
+T2_14023 -339.0 -4470.8 405.1 T Y 1.0
+T2_14024 -338.9 -4471.4 450.3 T Y 1.0
+T2_14025 -338.9 -4470.2 496.2 T Y 1.0
+T2_14026 -338.7 -4471.6 541.7 T Y 1.0
+T2_14027 -338.8 -4470.7 588.3 T Y 1.0
+T2_15000 -176.8 -4471.7 -618.9 T Y 1.0
+T2_15001 -176.9 -4471.0 -573.4 T Y 1.0
+T2_15002 -177.2 -4470.4 -528.6 T Y 1.0
+T2_15003 -177.1 -4471.3 -482.6 T Y 1.0
+T2_15004 -177.1 -4471.3 -437.8 T Y 1.0
+T2_15005 -177.5 -4471.2 -391.7 T Y 1.0
+T2_15006 -178.4 -4470.3 -346.1 T Y 1.0
+T2_15007 -177.5 -4470.7 -300.8 T Y 1.0
+T2_15008 -177.8 -4471.2 -255.3 T Y 1.0
+T2_15009 -178.4 -4471.2 -209.8 T Y 1.0
+T2_15010 -178.4 -4470.5 -164.4 T Y 1.0
+T2_15011 -178.3 -4471.1 -119.1 T Y 1.0
+T2_15012 -178.6 -4471.1 -73.6 T Y 1.0
+T2_15013 -178.8 -4470.7 -27.3 T Y 1.0
+T2_15014 -179.2 -4470.2 18.5 T Y 1.0
+T2_15015 -179.3 -4470.9 64.2 T Y 1.0
+T2_15016 -179.1 -4470.7 108.7 T Y 1.0
+T2_15017 -179.6 -4470.9 154.0 T Y 1.0
+T2_15018 -179.3 -4471.1 199.1 T Y 1.0
+T2_15019 -179.7 -4470.5 244.5 T Y 1.0
+T2_15020 -179.8 -4471.2 289.8 T Y 1.0
+T2_15021 -179.8 -4470.3 335.4 T Y 1.0
+T2_15022 -180.3 -4470.9 381.6 T Y 1.0
+T2_15023 -180.0 -4471.1 426.9 T Y 1.0
+T2_15024 -180.5 -4470.7 472.5 T Y 1.0
+T2_15025 -180.6 -4471.3 517.7 T Y 1.0
+T2_15026 -181.0 -4471.1 563.6 T Y 1.0
+T2_15027 -180.9 -4471.3 609.5 T Y 1.0
+T2_16000 -153.3 -4471.8 -639.9 T Y 1.0
+T2_16001 -154.2 -4471.5 -594.7 T Y 1.0
+T2_16002 -153.5 -4471.3 -548.8 T Y 1.0
+T2_16003 -154.1 -4471.0 -503.2 T Y 1.0
+T2_16004 -154.6 -4471.1 -458.0 T Y 1.0
+T2_16005 -153.8 -4471.3 -412.6 T Y 1.0
+T2_16006 -155.0 -4471.0 -367.1 T Y 1.0
+T2_16007 -155.3 -4471.0 -321.9 T Y 1.0
+T2_16008 -154.7 -4470.3 -276.4 T Y 1.0
+T2_16009 -155.6 -4471.2 -230.1 T Y 1.0
+T2_16010 -155.4 -4470.8 -184.7 T Y 1.0
+T2_16011 -156.3 -4471.0 -139.1 T Y 1.0
+T2_16012 -156.6 -4470.5 -93.9 T Y 1.0
+T2_16013 -156.2 -4471.2 -48.4 T Y 1.0
+T2_16014 -156.0 -4470.8 -3.1 T Y 1.0
+T2_16015 -156.5 -4470.5 42.8 T Y 1.0
+T2_16016 -156.2 -4470.2 87.9 T Y 1.0
+T2_16017 -157.2 -4471.2 133.5 T Y 1.0
+T2_16018 -156.7 -4471.0 178.7 T Y 1.0
+T2_16019 -157.0 -4470.1 224.7 T Y 1.0
+T2_16020 -156.9 -4471.0 269.6 T Y 1.0
+T2_16021 -156.8 -4471.1 315.0 T Y 1.0
+T2_16022 -158.0 -4471.2 360.1 T Y 1.0
+T2_16023 -157.8 -4471.1 405.1 T Y 1.0
+T2_16024 -157.4 -4470.6 451.1 T Y 1.0
+T2_16025 -157.7 -4470.3 497.4 T Y 1.0
+T2_16026 -158.3 -4471.3 542.7 T Y 1.0
+T2_16027 -158.0 -4470.6 588.6 T Y 1.0
+T2_17000 4.5 -4471.4 -617.6 T Y 1.0
+T2_17001 3.7 -4471.2 -572.0 T Y 1.0
+T2_17002 4.0 -4470.7 -526.8 T Y 1.0
+T2_17003 3.3 -4470.7 -481.3 T Y 1.0
+T2_17004 3.4 -4471.1 -435.0 T Y 1.0
+T2_17005 4.2 -4471.2 -388.8 T Y 1.0
+T2_17006 3.1 -4471.1 -343.5 T Y 1.0
+T2_17007 3.3 -4470.7 -298.3 T Y 1.0
+T2_17008 2.4 -4470.8 -252.7 T Y 1.0
+T2_17009 2.6 -4470.7 -207.4 T Y 1.0
+T2_17010 2.1 -4470.7 -161.2 T Y 1.0
+T2_17011 2.4 -4471.0 -116.2 T Y 1.0
+T2_17012 2.0 -4470.8 -70.4 T Y 1.0
+T2_17013 2.7 -4470.8 -25.6 T Y 1.0
+T2_17014 1.9 -4470.6 20.4 T Y 1.0
+T2_17015 1.4 -4470.4 65.6 T Y 1.0
+T2_17016 2.3 -4470.5 110.3 T Y 1.0
+T2_17017 1.6 -4470.6 156.0 T Y 1.0
+T2_17018 0.8 -4470.8 201.5 T Y 1.0
+T2_17019 1.5 -4470.7 246.7 T Y 1.0
+T2_17020 1.6 -4471.0 292.1 T Y 1.0
+T2_17021 1.0 -4470.5 337.3 T Y 1.0
+T2_17022 -0.3 -4470.4 382.3 T Y 1.0
+T2_17023 0.0 -4470.9 427.7 T Y 1.0
+T2_17024 0.5 -4470.7 473.7 T Y 1.0
+T2_17025 0.1 -4471.3 519.2 T Y 1.0
+T2_17026 0.2 -4471.1 564.6 T Y 1.0
+T2_17027 -0.1 -4471.3 610.4 T Y 1.0
+T2_18000 27.5 -4470.4 -640.1 T Y 1.0
+T2_18001 27.1 -4471.3 -595.2 T Y 1.0
+T2_18002 26.4 -4470.8 -548.4 T Y 1.0
+T2_18003 26.4 -4470.9 -502.6 T Y 1.0
+T2_18004 25.9 -4470.7 -457.5 T Y 1.0
+T2_18005 26.9 -4470.3 -411.9 T Y 1.0
+T2_18006 26.2 -4471.0 -366.6 T Y 1.0
+T2_18007 25.7 -4470.4 -321.5 T Y 1.0
+T2_18008 25.8 -4471.1 -275.7 T Y 1.0
+T2_18009 25.3 -4470.9 -229.4 T Y 1.0
+T2_18010 24.9 -4470.6 -184.1 T Y 1.0
+T2_18011 25.0 -4471.1 -138.9 T Y 1.0
+T2_18012 24.9 -4470.7 -93.6 T Y 1.0
+T2_18013 -697.5 -4472.6 -640.5 T Y 1.0
+T2_18014 24.9 -4470.9 -2.9 T Y 1.0
+T2_18015 24.1 -4470.5 42.2 T Y 1.0
+T2_18016 24.5 -4470.8 87.5 T Y 1.0
+T2_18017 24.7 -4470.9 133.2 T Y 1.0
+T2_18018 23.9 -4470.8 178.4 T Y 1.0
+T2_18019 23.7 -4470.8 224.0 T Y 1.0
+T2_18020 24.7 -4471.0 269.0 T Y 1.0
+T2_18021 23.6 -4471.1 314.3 T Y 1.0
+T2_18022 23.6 -4470.6 359.7 T Y 1.0
+T2_18023 22.6 -4471.1 404.4 T Y 1.0
+T2_18024 23.5 -4471.1 450.3 T Y 1.0
+T2_18025 23.0 -4471.2 495.8 T Y 1.0
+T2_18026 22.9 -4471.1 540.8 T Y 1.0
+T2_18027 22.7 -4470.8 588.2 T Y 1.0
+T2_19000 185.4 -4470.7 -617.8 T Y 1.0
+T2_19001 185.1 -4470.7 -572.6 T Y 1.0
+T2_19002 185.0 -4470.7 -526.3 T Y 1.0
+T2_19003 184.4 -4470.8 -480.5 T Y 1.0
+T2_19004 183.7 -4470.5 -433.1 T Y 1.0
+T2_19005 184.5 -4470.0 -388.2 T Y 1.0
+T2_19006 184.6 -4470.3 -343.2 T Y 1.0
+T2_19007 183.6 -4470.7 -298.4 T Y 1.0
+T2_19008 183.6 -4470.6 -253.1 T Y 1.0
+T2_19009 182.9 -4470.5 -207.2 T Y 1.0
+T2_19010 183.5 -4470.4 -162.2 T Y 1.0
+T2_19011 183.7 -4470.1 -116.7 T Y 1.0
+T2_19012 183.6 -4470.2 -71.1 T Y 1.0
+T2_19013 183.2 -4470.2 -25.4 T Y 1.0
+T2_19014 183.1 -4470.7 19.7 T Y 1.0
+T2_19015 183.0 -4469.8 64.7 T Y 1.0
+T2_19016 182.5 -4470.3 110.1 T Y 1.0
+T2_19017 183.1 -4470.6 155.9 T Y 1.0
+T2_19018 181.7 -4470.5 200.7 T Y 1.0
+T2_19019 181.8 -4470.5 246.1 T Y 1.0
+T2_19020 182.3 -4470.8 291.1 T Y 1.0
+T2_19021 181.3 -4470.4 336.7 T Y 1.0
+T2_19022 181.5 -4470.8 381.9 T Y 1.0
+T2_19023 181.4 -4470.3 427.6 T Y 1.0
+T2_19024 181.1 -4470.7 472.5 T Y 1.0
+T2_19025 181.4 -4470.8 517.9 T Y 1.0
+T2_19026 180.0 -4471.0 563.3 T Y 1.0
+T2_19027 180.7 -4470.9 610.7 T Y 1.0
+T2_20000 208.3 -4470.6 -639.0 T Y 1.0
+T2_20001 208.2 -4469.6 -592.9 T Y 1.0
+T2_20002 207.6 -4470.4 -546.9 T Y 1.0
+T2_20003 206.7 -4470.5 -501.9 T Y 1.0
+T2_20004 207.0 -4470.3 -456.0 T Y 1.0
+T2_20005 207.7 -4470.6 -410.7 T Y 1.0
+T2_20006 206.9 -4469.9 -365.5 T Y 1.0
+T2_20007 206.6 -4470.4 -319.9 T Y 1.0
+T2_20008 206.6 -4470.3 -274.1 T Y 1.0
+T2_20009 206.3 -4470.3 -229.0 T Y 1.0
+T2_20010 206.3 -4470.3 -183.4 T Y 1.0
+T2_20011 206.4 -4469.7 -137.8 T Y 1.0
+T2_20012 206.3 -4470.0 -92.8 T Y 1.0
+T2_20013 205.8 -4470.2 -47.4 T Y 1.0
+T2_20014 205.8 -4470.4 -2.2 T Y 1.0
+T2_20015 206.0 -4470.2 43.5 T Y 1.0
+T2_20016 205.5 -4470.2 88.8 T Y 1.0
+T2_20017 205.7 -4470.4 134.5 T Y 1.0
+T2_20018 204.9 -4470.0 181.1 T Y 1.0
+T2_20019 205.0 -4469.6 226.3 T Y 1.0
+T2_20020 204.8 -4470.5 271.0 T Y 1.0
+T2_20021 204.6 -4470.5 316.8 T Y 1.0
+T2_20022 204.2 -4471.1 361.9 T Y 1.0
+T2_20023 204.0 -4470.5 407.4 T Y 1.0
+T2_20024 203.5 -4470.6 452.3 T Y 1.0
+T2_20025 204.0 -4470.6 498.3 T Y 1.0
+T2_20026 203.3 -4470.3 544.2 T Y 1.0
+T2_20027 203.8 -4470.7 588.7 T Y 1.0
+T2_21000 365.8 -4470.3 -616.8 T Y 1.0
+T2_21001 366.0 -4470.0 -570.2 T Y 1.0
+T2_21002 365.4 -4469.9 -524.6 T Y 1.0
+T2_21003 364.8 -4469.9 -479.1 T Y 1.0
+T2_21004 365.4 -4470.4 -433.8 T Y 1.0
+T2_21005 365.7 -4470.5 -388.5 T Y 1.0
+T2_21006 365.2 -4470.4 -343.3 T Y 1.0
+T2_21007 364.0 -4469.6 -297.6 T Y 1.0
+T2_21008 365.2 -4470.0 -252.3 T Y 1.0
+T2_21009 364.5 -4470.1 -207.1 T Y 1.0
+T2_21010 364.1 -4470.0 -161.2 T Y 1.0
+T2_21011 363.9 -4470.2 -116.4 T Y 1.0
+T2_21012 364.5 -4469.9 -70.7 T Y 1.0
+T2_21013 363.8 -4470.3 -25.3 T Y 1.0
+T2_21014 364.1 -4470.5 20.5 T Y 1.0
+T2_21015 363.8 -4470.3 65.4 T Y 1.0
+T2_21016 363.3 -4470.2 110.6 T Y 1.0
+T2_21017 363.1 -4469.7 156.3 T Y 1.0
+T2_21018 363.1 -4470.4 202.7 T Y 1.0
+T2_21019 363.2 -4470.2 248.2 T Y 1.0
+T2_21020 362.2 -4470.3 293.4 T Y 1.0
+T2_21021 362.4 -4470.3 338.5 T Y 1.0
+T2_21022 362.3 -4470.8 384.1 T Y 1.0
+T2_21023 362.3 -4470.3 428.9 T Y 1.0
+T2_21024 362.3 -4470.5 474.3 T Y 1.0
+T2_21025 362.3 -4470.7 520.5 T Y 1.0
+T2_21026 361.2 -4470.4 565.7 T Y 1.0
+T2_21027 361.7 -4470.5 610.7 T Y 1.0
+T2_22000 388.5 -4470.4 -639.0 T Y 1.0
+T2_22001 388.8 -4469.9 -592.6 T Y 1.0
+T2_22002 388.4 -4470.0 -547.2 T Y 1.0
+T2_22003 388.5 -4469.5 -501.9 T Y 1.0
+T2_22004 388.3 -4470.0 -456.0 T Y 1.0
+T2_22005 388.2 -4469.9 -410.6 T Y 1.0
+T2_22006 388.0 -4469.9 -365.1 T Y 1.0
+T2_22007 386.7 -4470.0 -319.7 T Y 1.0
+T2_22008 387.7 -4470.0 -274.2 T Y 1.0
+T2_22009 387.8 -4470.0 -229.0 T Y 1.0
+T2_22010 388.0 -4470.1 -183.6 T Y 1.0
+T2_22011 387.4 -4469.9 -138.4 T Y 1.0
+T2_22012 387.3 -4469.9 -92.9 T Y 1.0
+T2_22013 386.5 -4470.2 -47.3 T Y 1.0
+T2_22014 387.9 -4470.3 -2.5 T Y 1.0
+T2_22015 386.6 -4470.1 42.6 T Y 1.0
+T2_22016 386.3 -4469.9 89.6 T Y 1.0
+T2_22017 385.7 -4469.9 135.1 T Y 1.0
+T2_22018 386.0 -4469.8 179.8 T Y 1.0
+T2_22019 386.7 -4470.0 225.1 T Y 1.0
+T2_22020 385.5 -4470.3 270.3 T Y 1.0
+T2_22021 385.3 -4470.1 315.6 T Y 1.0
+T2_22022 385.5 -4470.5 360.9 T Y 1.0
+T2_22023 385.1 -4470.3 406.4 T Y 1.0
+T2_22024 384.7 -4470.0 451.4 T Y 1.0
+T2_22025 384.7 -4470.4 496.7 T Y 1.0
+T2_22026 384.2 -4470.3 542.8 T Y 1.0
+T2_22027 384.1 -4470.6 589.1 T Y 1.0
+T2_23000 547.0 -4469.7 -615.7 T Y 1.0
+T2_23001 546.5 -4469.8 -569.9 T Y 1.0
+T2_23002 546.6 -4469.4 -524.5 T Y 1.0
+T2_23003 546.2 -4468.5 -478.9 T Y 1.0
+T2_23004 546.8 -4470.1 -433.1 T Y 1.0
+T2_23005 546.2 -4469.8 -387.7 T Y 1.0
+T2_23006 546.1 -4469.9 -342.5 T Y 1.0
+T2_23007 544.6 -4470.0 -296.5 T Y 1.0
+T2_23008 545.7 -4469.9 -251.7 T Y 1.0
+T2_23009 545.5 -4470.1 -206.5 T Y 1.0
+T2_23010 546.1 -4469.6 -161.1 T Y 1.0
+T2_23011 545.6 -4469.8 -115.4 T Y 1.0
+T2_23012 545.1 -4469.5 -70.3 T Y 1.0
+T2_23013 545.2 -4469.9 -25.1 T Y 1.0
+T2_23014 546.8 -4469.5 20.0 T Y 1.0
+T2_23015 545.0 -4469.9 65.8 T Y 1.0
+T2_23016 544.5 -4469.9 112.2 T Y 1.0
+T2_23017 544.7 -4469.9 157.2 T Y 1.0
+T2_23018 544.0 -4469.9 202.1 T Y 1.0
+T2_23019 545.0 -4469.5 247.6 T Y 1.0
+T2_23020 543.7 -4470.3 293.4 T Y 1.0
+T2_23021 543.3 -4469.9 338.5 T Y 1.0
+T2_23022 542.8 -4469.3 383.8 T Y 1.0
+T2_23023 543.2 -4470.1 429.2 T Y 1.0
+T2_23024 542.7 -4470.1 474.7 T Y 1.0
+T2_23025 542.9 -4470.1 520.0 T Y 1.0
+T2_23026 542.8 -4470.2 566.1 T Y 1.0
+T2_23027 541.6 -4470.3 612.1 T Y 1.0
+T2_24000 569.8 -4469.5 -637.1 T Y 1.0
+T2_24001 569.9 -4469.7 -591.9 T Y 1.0
+T2_24002 569.2 -4469.4 -547.3 T Y 1.0
+T2_24003 569.3 -4469.7 -501.7 T Y 1.0
+T2_24004 569.3 -4469.7 -455.7 T Y 1.0
+T2_24005 569.8 -4469.2 -410.6 T Y 1.0
+T2_24006 568.9 -4470.1 -364.8 T Y 1.0
+T2_24007 567.5 -4469.7 -319.8 T Y 1.0
+T2_24008 569.2 -4469.2 -274.6 T Y 1.0
+T2_24009 568.6 -4469.7 -229.0 T Y 1.0
+T2_24010 569.6 -4469.5 -183.3 T Y 1.0
+T2_24011 568.5 -4469.8 -138.2 T Y 1.0
+T2_24012 569.2 -4469.9 -92.8 T Y 1.0
+T2_24013 569.1 -4470.0 -46.5 T Y 1.0
+T2_24014 569.3 -4469.8 -1.5 T Y 1.0
+T2_24015 568.2 -4469.9 44.0 T Y 1.0
+T2_24016 568.1 -4469.8 89.1 T Y 1.0
+T2_24017 567.8 -4469.8 135.1 T Y 1.0
+T2_24018 567.8 -4469.9 180.0 T Y 1.0
+T2_24019 568.4 -4469.0 225.1 T Y 1.0
+T2_24020 567.6 -4467.7 270.8 T Y 1.0
+T2_24021 566.7 -4470.1 316.0 T Y 1.0
+T2_24022 566.2 -4469.8 361.7 T Y 1.0
+T2_24023 566.3 -4470.1 407.5 T Y 1.0
+T2_24024 565.6 -4470.0 452.1 T Y 1.0
+T2_24025 566.3 -4469.7 497.8 T Y 1.0
+T2_24026 565.6 -4469.9 543.7 T Y 1.0
+T2_24027 564.6 -4470.1 589.2 T Y 1.0
+T2_25001 727.5 -4469.5 -569.0 T Y 1.0
+T2_25002 726.7 -4469.5 -523.7 T Y 1.0
+T2_25003 727.5 -4469.8 -478.8 T Y 1.0
+T2_25004 727.0 -4469.5 -432.8 T Y 1.0
+T2_25005 727.2 -4469.4 -387.4 T Y 1.0
+T2_25006 726.7 -4469.7 -342.3 T Y 1.0
+T2_25007 724.4 -4469.5 -296.6 T Y 1.0
+T2_25008 726.9 -4469.5 -250.9 T Y 1.0
+T2_25009 726.8 -4469.1 -205.7 T Y 1.0
+T2_25010 727.7 -4470.1 -159.9 T Y 1.0
+T2_25011 726.2 -4469.4 -114.2 T Y 1.0
+T2_25012 726.5 -4470.0 -69.1 T Y 1.0
+T2_25013 726.9 -4470.2 -23.8 T Y 1.0
+T2_25014 726.3 -4469.9 21.5 T Y 1.0
+T2_25015 726.2 -4470.3 66.8 T Y 1.0
+T2_25016 726.0 -4469.7 110.3 T Y 1.0
+T2_25017 726.6 -4470.0 158.1 T Y 1.0
+T2_25018 725.2 -4469.3 203.0 T Y 1.0
+T2_25019 726.2 -4469.4 248.6 T Y 1.0
+T2_25020 726.2 -4469.5 293.7 T Y 1.0
+T2_25021 724.6 -4469.2 339.8 T Y 1.0
+T2_25022 723.6 -4470.1 385.0 T Y 1.0
+T2_25023 723.7 -4469.7 430.6 T Y 1.0
+T2_25024 723.9 -4469.6 476.0 T Y 1.0
+T2_25025 723.2 -4468.7 522.0 T Y 1.0
+T2_25026 722.7 -4470.0 567.7 T Y 1.0
\ No newline at end of file
index e98322a..c87cc24 100644 (file)
@@ -21,6 +21,7 @@ SRCS          =  \
                  AliPHOSEmcBadChannelsMap.cxx \
                  AliPHOSSurvey.cxx \
                  AliPHOSSurvey1.cxx \
+                 AliPHOSModuleMisalignment.cxx \
                  AliPHOSQAChecker.cxx \
                  AliPHOSRecParticle.cxx AliPHOSRecPoint.cxx \
                  AliPHOSEmcRecPoint.cxx \