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

/*
$Log$
Revision 1.19  2007/10/02 09:46:08  arcelli
add methods to retrieve real survey data, and make some analysis (by B. Guerzoni)

Revision 1.17  2007/06/06 16:26:46  arcelli
remove fall-back call to local CDB storage

Revision 1.16  2007/05/15 16:25:44  cvetan
Moving the alignment-related static methods from AliAlignObj to the new geometry steering class AliGeomManager (macro from Raffaele)

Revision 1.15  2007/05/03 09:25:10  decaro
Coding convention: RN13 violation -> suppression

Revision 1.14  2007/04/18 14:49:54  arcelli
Some code cleanup, added more debug info

Revision 1.13  2007/04/17 16:38:36  arcelli
Include Methods to derive TOF AlignObjs from Survey Data

Revision 1.12  2007/02/28 18:09:23  arcelli
Add protection against failed retrieval of the CDB cal object

Revision 1.11  2006/09/19 14:31:26  cvetan
Bugfixes and clean-up of alignment object classes. Introduction of so called symbolic names used to identify the alignable volumes (Raffaele and Cvetan)

Revision 1.10  2006/08/22 13:26:05  arcelli
removal of effective c++ warnings (C.Zampolli)

Revision 1.9  2006/08/10 14:46:54  decaro
TOF raw data format: updated version

Revision 1.8  2006/05/04 19:41:42  hristov
Possibility for partial TOF geometry (S.Arcelli)

Revision 1.7  2006/04/27 13:13:29  hristov
Moving the destructor to the implementation file

Revision 1.6  2006/04/20 22:30:49  hristov
Coding conventions (Annalisa)

Revision 1.5  2006/04/16 22:29:05  hristov
Coding conventions (Annalisa)

Revision 1.4  2006/04/05 08:35:38  hristov
Coding conventions (S.Arcelli, C.Zampolli)

Revision 1.3  2006/03/31 13:49:07  arcelli
Removing some junk printout

Revision 1.2  2006/03/31 11:26:30  arcelli
 changing CDB Ids according to standard convention

Revision 1.1  2006/03/28 14:54:48  arcelli
class for TOF alignment

author: Silvia Arcelli, arcelli@bo.infn.it
*/  

/////////////////////////////////////////////////////////
//                                                     //
//            Class for alignment procedure            //
//                                                     //
//                                                     //
//                                                     //
/////////////////////////////////////////////////////////

#include <Rtypes.h>

#include "TGeoMatrix.h"
#include "TMath.h"
#include "TFile.h"
#include "TRandom.h"
#include "TGeoManager.h"
#include "TGeoVolume.h"
#include "TGeoBBox.h"
#include "TGeoTrd1.h"
#include "TGeoPhysicalNode.h"
#include "TGeoNode.h"
#include "TObjString.h"

#include "AliLog.h"
//#include "AliAlignObj.h"
#include "AliAlignObjParams.h"
#include "AliAlignObjMatrix.h"
#include "AliCDBManager.h"
#include "AliCDBMetaData.h"
#include "AliCDBId.h"
#include "AliCDBEntry.h"
#include "AliTOFAlignment.h"
#include "AliSurveyObj.h"
#include "AliSurveyPoint.h"
#include <cstdlib>

ClassImp(AliTOFAlignment)

const Double_t AliTOFAlignment::fgkRorigTOF  = 384.5; // Mean Radius of the TOF ext. volume, cm
const Double_t AliTOFAlignment::fgkX1BTOF = 124.5;    //x1 size of BTOF
const Double_t AliTOFAlignment::fgkX2BTOF = 134.7262; //x2 size of BTOF
const Double_t AliTOFAlignment::fgkYBTOF = 747.2;     //y size of BTOF
const Double_t AliTOFAlignment::fgkZBTOF = 29.0;      //z size of BTOF
const Double_t AliTOFAlignment::fgkXFM = 38.0;     //x pos of FM in BTOF, cm 
const Double_t AliTOFAlignment::fgkYFM = 457.3;    //y pos of FM in BTOF, cm
const Double_t AliTOFAlignment::fgkZFM = 11.2;     //z pos of FM in BTOF, cm

//_____________________________________________________________________________
AliTOFAlignment::AliTOFAlignment():
  TTask("AliTOFAlignment",""),
  fNTOFAlignObj(0),
  fTOFmgr(0x0),
  fTOFAlignObjArray(0x0)
 { 
   //AliTOFalignment main Ctor
   for(Int_t i=0; i<18;i++)
     for(Int_t j=0; j<5; j++)
       fNFMforSM[i][j]=0;
   for(Int_t i=0; i<72; i++)
    for (Int_t j=0; j<6; j++)
      fCombFMData[i][j]=0;

   for(Int_t i=0; i<18;i++)
     fTOFMatrixId[i]=0;

}
//_____________________________________________________________________________
AliTOFAlignment::AliTOFAlignment(const AliTOFAlignment &t):
  TTask(t),
  fNTOFAlignObj(t.fNTOFAlignObj),
  fTOFmgr(0x0),
  fTOFAlignObjArray(t.fTOFAlignObjArray)
{ 
  //AliTOFAlignment copy Ctor

  //AliTOFalignment main Ctor
  for(Int_t i=0; i<18;i++)
     for(Int_t j=0; j<5; j++)
       fNFMforSM[i][j]=t.fNFMforSM[i][j];
  for(Int_t i=0; i<72; i++)
    for (Int_t j=0; j<6; j++)
      fCombFMData[i][j]=t.fCombFMData[i][j]; 

  for(Int_t i=0; i<18;i++)
    fTOFMatrixId[i]=t.fTOFMatrixId[i];

}
//_____________________________________________________________________________
AliTOFAlignment& AliTOFAlignment::operator=(const AliTOFAlignment &t){ 
  //AliTOFAlignment assignment operator

  if (&t == this)
    return *this;

  TTask::operator=(t);
  fNTOFAlignObj=t.fNTOFAlignObj;
  fTOFmgr=t.fTOFmgr;
  fTOFAlignObjArray=t.fTOFAlignObjArray;
  for(Int_t i=0; i<18;i++)
    fTOFMatrixId[i]=t.fTOFMatrixId[i];

  return *this;

}
//_____________________________________________________________________________
AliTOFAlignment::~AliTOFAlignment() {
  delete fTOFAlignObjArray;
  delete fTOFmgr;
}

//_____________________________________________________________________________
void AliTOFAlignment::Smear(Float_t * const tr, Float_t * const rot)
{
  //Introduce Random Offset/Tilts
  fTOFAlignObjArray = new TObjArray(kMaxAlignObj);
  Float_t dx, dy, dz;  // shifts
  Float_t dpsi, dtheta, dphi; // angular displacements
  TRandom *rnd   = new TRandom(1567);
 
  Int_t nSMTOF = 18;
  AliGeomManager::ELayerID iLayer = AliGeomManager::kInvalidLayer;
  UShort_t iIndex=0; //dummy volume index
  //  AliGeomManager::ELayerID iLayer = AliGeomManager::kTOF;
  //  Int_t iIndex=1; //dummy volume index
  UShort_t dvoluid = AliGeomManager::LayerToVolUID(iLayer,iIndex); //dummy volume identity 
  Int_t i;

  const Int_t kSize=100;
  Char_t  path[kSize];
  for (i = 0; i<nSMTOF ; i++) {
    snprintf(path,kSize,"/ALIC_1/B077_1/BSEGMO%i_1/BTOF%i_1",i,i);

    dx = (rnd->Gaus(0.,1.))*tr[0];
    dy = (rnd->Gaus(0.,1.))*tr[1];
    dz = (rnd->Gaus(0.,1.))*tr[2];
    dpsi   = rot[0];
    dtheta = rot[1];
    dphi   = rot[2];
    AliAlignObjParams *o =new AliAlignObjParams(path, dvoluid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);
    fTOFAlignObjArray->Add(o);
  }

  fNTOFAlignObj=fTOFAlignObjArray->GetEntries();
  AliInfo(Form("Number of Alignable Volumes: %d",fNTOFAlignObj));
  delete rnd;
}

//_____________________________________________________________________________
void AliTOFAlignment::Align(Float_t * const tr, Float_t * const rot)
{
  //Introduce Offset/Tilts

  fTOFAlignObjArray = new TObjArray(kMaxAlignObj);
  Float_t dx, dy, dz;  // shifts
  Float_t dpsi, dtheta, dphi; // angular displacements


  Int_t nSMTOF = 18;
  AliGeomManager::ELayerID iLayer = AliGeomManager::kInvalidLayer;
  UShort_t iIndex=0; //dummy volume index
  UShort_t dvoluid = AliGeomManager::LayerToVolUID(iLayer,iIndex); //dummy volume identity 

  const Int_t kSize=100;
  Char_t  path[kSize];
  Int_t i;
  for (i = 0; i<nSMTOF ; i++) {

    snprintf(path,kSize,"/ALIC_1/B077_1/BSEGMO%i_1/BTOF%i_1",i,i);
    dx = tr[0];
    dy = tr[1];
    dz = tr[2];
    dpsi   = rot[0];
    dtheta = rot[1];
    dphi   = rot[2];
    
    AliAlignObjParams *o =new AliAlignObjParams(path, dvoluid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);
    fTOFAlignObjArray->Add(o);
  }
  fNTOFAlignObj=fTOFAlignObjArray->GetEntries();
  AliInfo(Form("Number of Alignable Volumes: %d",fNTOFAlignObj));
}
//_____________________________________________________________________________
void AliTOFAlignment::WriteParOnCDB(const Char_t *sel, Int_t minrun, Int_t maxrun)
{
  //Write Align Par on CDB
  AliCDBManager *man = AliCDBManager::Instance();
  const Char_t *sel1 = "AlignPar" ;
  const Int_t kSize=100;
  Char_t  out[kSize];
  snprintf(out,kSize,"%s/%s",sel,sel1); 
  AliCDBId idTOFAlign(out,minrun,maxrun);
  AliCDBMetaData *mdTOFAlign = new AliCDBMetaData();
  mdTOFAlign->SetResponsible("TOF");
  AliInfo(Form("Number of Alignable Volumes: %d",fNTOFAlignObj));
  man->Put(fTOFAlignObjArray,idTOFAlign,mdTOFAlign);
}
//_____________________________________________________________________________
void AliTOFAlignment::ReadParFromCDB(const Char_t *sel, Int_t nrun)
{
  //Read Align Par from CDB
  AliCDBManager *man = AliCDBManager::Instance();
  const Char_t *sel1 = "AlignPar" ;
  const Int_t kSize=100;
  Char_t  out[kSize];

  snprintf(out,kSize,"%s/%s",sel,sel1); 
  AliCDBEntry *entry = man->Get(out,nrun);
  if (!entry) { 
    AliError(Form("Failed to get entry: %s",out));
    return; 
  }
  fTOFAlignObjArray=(TObjArray*)entry->GetObject();
  fNTOFAlignObj=fTOFAlignObjArray->GetEntries();
  AliInfo(Form("Number of Alignable Volumes from CDB: %d",fNTOFAlignObj));

}
//_____________________________________________________________________________
void AliTOFAlignment::WriteSimParOnCDB(const Char_t *sel, Int_t minrun, Int_t maxrun)
{
  //Write Sim Align Par on CDB
  AliCDBManager *man = AliCDBManager::Instance();
  const Char_t *sel1 = "AlignSimPar" ;
  const Int_t kSize=100;
  Char_t  out[kSize];
  snprintf(out,kSize,"%s/%s",sel,sel1); 
  AliCDBId idTOFAlign(out,minrun,maxrun);
  AliCDBMetaData *mdTOFAlign = new AliCDBMetaData();
  mdTOFAlign->SetResponsible("TOF");
  AliInfo(Form("Number of Alignable Volumes: %d",fNTOFAlignObj));
  man->Put(fTOFAlignObjArray,idTOFAlign,mdTOFAlign);
}
//_____________________________________________________________________________
void AliTOFAlignment::ReadSimParFromCDB(const Char_t *sel, Int_t nrun){
  //Read Sim Align Par from CDB
  AliCDBManager *man = AliCDBManager::Instance();
  const Char_t *sel1 = "AlignSimPar" ;
  const Int_t kSize=100;
  Char_t  out[kSize];
  snprintf(out,kSize,"%s/%s",sel,sel1); 
  AliCDBEntry *entry = man->Get(out,nrun);
  if (!entry) { 
    AliError(Form("Failed to get entry: %s",out));
    return; 
  }
  fTOFAlignObjArray=(TObjArray*)entry->GetObject();
  fNTOFAlignObj=fTOFAlignObjArray->GetEntries();
  AliInfo(Form("Number of Alignable Volumes from CDB: %d",fNTOFAlignObj));

}
//_____________________________________________________________________________
void AliTOFAlignment::WriteOnCDBforDC()
{
  //Write Align Par on CDB for DC06
  AliCDBManager *man = AliCDBManager::Instance();
  AliCDBId idTOFAlign("TOF/Align/Data",0,0);
  AliCDBMetaData *mdTOFAlign = new AliCDBMetaData();
  mdTOFAlign->SetComment("Alignment objects for ideal geometry, i.e. applying them to TGeo has to leave geometry unchanged");
  mdTOFAlign->SetResponsible("TOF");
  AliInfo(Form("Number of Alignable Volumes: %d",fNTOFAlignObj));
  man->Put(fTOFAlignObjArray,idTOFAlign,mdTOFAlign);
}
//_____________________________________________________________________________
void AliTOFAlignment::ReadFromCDBforDC()
{
  //Read Sim Align Par from CDB for DC06
  AliCDBManager *man = AliCDBManager::Instance();
  AliCDBEntry *entry = man->Get("TOF/Align/Data",0);
  fTOFAlignObjArray=(TObjArray*)entry->GetObject();
  fNTOFAlignObj=fTOFAlignObjArray->GetEntries();
  AliInfo(Form("Number of Alignable Volumes from CDB: %d",fNTOFAlignObj));

}

//_____________________________________________________________________________
void AliTOFAlignment::BuildGeomForSurvey()
{

  //Generates the ideal TOF structure with four Fiducial Marks in each 
  //supermodule (two on each z side) in their expected position. 
  //Make BTOF

  fTOFmgr = new TGeoManager("Geom","survey to alignment for TOF");
  TGeoMedium *medium = 0;
  TGeoVolume *top = fTOFmgr->MakeBox("TOP",medium,1000,1000,1000);
  fTOFmgr->SetTopVolume(top);
  // make shape components:  
  // This is the BTOF containing the FTOA  
  TGeoTrd1 *strd1  = new TGeoTrd1(fgkX1BTOF*0.5,fgkX2BTOF*0.5, fgkYBTOF*0.5,fgkZBTOF*0.5);
  TGeoVolume* trd1[18];

  // Now four fiducial marks on SM, expressed in local coordinates
  // They are positioned at x=+/- 38 cm, y=+/- 457.3 cm, z=11.2 cm
  
  TGeoBBox *fmbox  = new TGeoBBox(1,1,1);
  TGeoVolume* fm = new TGeoVolume("FM",fmbox);
  fm->SetLineColor(2);
  

  TGeoTranslation* mAtr = new TGeoTranslation("mAtr",-fgkXFM, -fgkYFM ,fgkZFM);
  TGeoTranslation* mBtr = new TGeoTranslation("mBtr",fgkXFM, -fgkYFM ,fgkZFM );
  TGeoTranslation* mCtr = new TGeoTranslation("mCtr",fgkXFM, fgkYFM ,fgkZFM );
  TGeoTranslation* mDtr = new TGeoTranslation("mDtr",-fgkXFM, fgkYFM ,fgkZFM );

  // position all this stuff in the global ALICE frame

  const Int_t kSize=100;
  char name[kSize];
  Double_t smX = 0.;
  Double_t smY = 0.;
  Double_t smZ = 0.;
  Float_t  smR = fgkRorigTOF;
  for (Int_t iSM = 0; iSM < 18; iSM++) {
    Int_t mod = iSM + 13;
    if (mod > 17) mod -= 18;
    snprintf(name,kSize, "BTOF%d",mod);
    trd1[iSM] = new TGeoVolume(name,strd1);
    Float_t phi  = iSM * 20.;
    Float_t phi2 = 270 + phi;
    if (phi2 >= 360.) phi2 -= 360.;
    smX =  TMath::Sin(phi*TMath::Pi()/180.)*smR;
    smY = -TMath::Cos(phi*TMath::Pi()/180.)*smR;
    smZ = 0.;  
    TGeoRotation* bTOFRot = new TGeoRotation("bTOFRot",phi,90,0.);
    TGeoCombiTrans trans = *(new TGeoCombiTrans(smX,smY,smZ, bTOFRot));
    TGeoMatrix* id = new TGeoHMatrix();
    TGeoHMatrix  transMat = *id * trans;
    TGeoHMatrix  *smTrans = new TGeoHMatrix(transMat);
    
    trd1[iSM]->AddNode(fm,1,mAtr);        //place FM in BTOF
    trd1[iSM]->AddNode(fm,2,mBtr);
    trd1[iSM]->AddNode(fm,3,mCtr);
    trd1[iSM]->AddNode(fm,4,mDtr);
    top->AddNode(trd1[iSM],1,smTrans);    //place BTOF_iSM in ALICE
    trd1[iSM]->SetVisDaughters();
    trd1[iSM]->SetLineColor(iSM);         //black
    
  }  

  fTOFmgr->CloseGeometry();
  fTOFmgr->GetTopVolume()->Draw();
  fTOFmgr->SetVisOption(0);
  fTOFmgr->SetVisLevel(6);

  // Now Store the "Ideal"  Global Matrices (local to global) for later use
  
  for (Int_t iSM = 0; iSM < 18; iSM++) {

    snprintf(name,kSize, "TOP_1/BTOF%d_1", iSM);
    printf("\n\n*****************  TOF SuperModule:  %s ****************** \n",name);
    TGeoPhysicalNode* pn3 = fTOFmgr->MakePhysicalNode(name);
    fTOFMatrixId[iSM] = pn3->GetMatrix(); //save "ideal" global matrix
    printf("\n\n***************  The Ideal Matrix in GRS *****************\n");
    fTOFMatrixId[iSM]->Print();

  }
}

//_____________________________________________________________________________
void AliTOFAlignment::InsertMisAlignment(Float_t * const mis)
{
  // Now Apply the Displacements and store the misaligned FM positions...
  //
  //

  Double_t lA[3]={-fgkXFM, -fgkYFM ,fgkZFM};
  Double_t lB[3]={fgkXFM, -fgkYFM ,fgkZFM};
  Double_t lC[3]={fgkXFM, fgkYFM ,fgkZFM};
  Double_t lD[3]={-fgkXFM, fgkYFM ,fgkZFM};

  const Int_t kSize=16;
  char name[kSize];

  for(Int_t iSM=0;iSM<18;iSM++){
    snprintf(name,kSize, "TOP_1/BTOF%d_1", iSM);
     fTOFmgr->cd(name);
     printf("\n\n******Misaligning TOF SuperModule ************** %s \n",name);

    // ************* get ideal global matrix *******************
    TGeoHMatrix g3 = *fTOFmgr->GetCurrentMatrix(); 
    AliInfo(Form("This is the ideal global trasformation of SM %i",iSM));
    g3.Print(); // g3 is the local(BTOF) to global (ALICE) matrix and is the same of fTOFMatrixId
    TGeoNode* n3 = fTOFmgr->GetCurrentNode(); 
    TGeoMatrix* l3 = n3->GetMatrix(); 
    
    Double_t gA[3], gB[3], gC[3], gD[3]; // ideal global FM point coord.
    g3.LocalToMaster(lA,gA);
    g3.LocalToMaster(lB,gB);
    g3.LocalToMaster(lC,gC);
    g3.LocalToMaster(lD,gD);
   
    //  We apply a delta transformation to the surveyed vol to represent
    //  its real position, given below by ng3 nl3, which differs from its
    //  ideal position saved above in g3 and l3

    //we have to express the displacements as regards the old local RS (non misaligned BTOF)
    Double_t dx     = mis[0]; // shift along x 
    Double_t dy     = mis[1]; // shift along y 
    Double_t dz     = mis[2]; // shift along z 
    Double_t dphi   = mis[3]; // rot around z 
    Double_t dtheta = mis[4]; // rot around x' 
    Double_t dpsi   = mis[5]; // rot around z''

    TGeoRotation* rrot = new TGeoRotation("rot",dphi,dtheta,dpsi);
    TGeoCombiTrans localdelta = *(new TGeoCombiTrans(dx,dy,dz, rrot));
    AliInfo(Form("This is the local delta trasformation for SM %i \n",iSM));
    localdelta.Print();
    TGeoHMatrix nlocal = *l3 * localdelta;
    TGeoHMatrix* nl3 = new TGeoHMatrix(nlocal); // new matrix, representing real position (from new local mis RS to the global one)
   
    TGeoPhysicalNode* pn3 = fTOFmgr->MakePhysicalNode(name);

    pn3->Align(nl3);   
    
    TGeoHMatrix* ng3 = pn3->GetMatrix(); //"real" global matrix, what survey sees 
    printf("\n\n*************  The Misaligned Matrix in GRS **************\n");
    ng3->Print();
    Double_t ngA[3], ngB[3], ngC[3], ngD[3];// real FM point coord., global RS 
    ng3->LocalToMaster(lA,ngA);
    ng3->LocalToMaster(lB,ngB);
    ng3->LocalToMaster(lC,ngC);
    ng3->LocalToMaster(lD,ngD);    

    for(Int_t coord=0;coord<3;coord++){
      fCombFMData[iSM*4][2*coord]=ngA[coord];
      fCombFMData[iSM*4][2*coord+1]=1;
      fCombFMData[iSM*4+1][2*coord]=ngB[coord];
      fCombFMData[iSM*4+1][2*coord+1]=1;
      fCombFMData[iSM*4+2][2*coord]=ngC[coord];
      fCombFMData[iSM*4+2][2*coord+1]=1;
      fCombFMData[iSM*4+3][2*coord]=ngD[coord];
      fCombFMData[iSM*4+3][2*coord+1]=1;
      }
    }

}

//____________________________________________________________________________
void AliTOFAlignment::WriteCombData(const Char_t *nomefile, Int_t option)
{
  // 1 for simulated data; 0 for data from survey file
  // write combined data on a file
  //

  FILE *data;
  /* Open file in text mode: */
  if( (data = fopen( nomefile, "w+t" )) != NULL ){
    if (option==1){
      fprintf( data, "simulated data\n" );} else {
	fprintf( data, "survey data\n" );}
    if (option==1){
      fprintf( data, "data from InsertMisAlignmentBTOF method\n");}
    else {fprintf( data, "real survey data from text file (coordinate in global RS)\n");}
    fprintf( data, "Point Name,XPH,YPH,ZPH,PrecisionX(mm),PrecisionY(mm),PrecisionZ(mm)\n");
    fprintf( data, "> Data:\n");
    for(Int_t i=0;i<72;i++){
      if (fCombFMData[i][0]!=0){
	fprintf( data, "SM%02iFM%i %f %f %f M Y %f %f %f\n", (i-i%4)/4, i%4, fCombFMData[i][0],fCombFMData[i][2],fCombFMData[i][4],fCombFMData[i][1]*10,fCombFMData[i][3]*10,fCombFMData[i][5]*10); 
      }
    }
    fclose( data );
   }
  else{
    printf(  "Problem opening the file\n" );
  }
  
  return;  
}

//____________________________________________________________________________
void AliTOFAlignment::WriteSimSurveyData(const Char_t *nomefile)
{
  // write sim data in standard format
  //
  //

  FILE *data;
  /* Open file in text mode: */
  if( (data = fopen( nomefile, "w+t" )) != NULL )
   {
      fprintf( data, "> Title:\n" );
      fprintf( data, "simulated data\n" );
      fprintf( data, "> Date:\n" );
      fprintf( data, "24.09.2007\n" );
      fprintf( data, "> Subdetector:\n" );
      fprintf( data, "TOF\n" );
      fprintf( data, "> Report URL:\n" );
      fprintf( data, "https://edms.cern.ch/document/835615\n" );
      fprintf( data, "> Version:\n" );
      fprintf( data, "1\n");
      fprintf( data, "> General Observations:\n"); 
      fprintf( data, "data from InsertMisAlignmentBTOF method\n");
      fprintf( data, "> Coordinate System:\n");
      fprintf( data, "\\ALICEPH\n");
      fprintf( data, "> Units:\n");
      fprintf( data, "cm\n");
      fprintf( data, "> Nr Columns:\n");
      fprintf( data, "9\n");
      fprintf( data, "> Column Names:\n");
      fprintf( data, "Point Name,XPH,YPH,ZPH,Point Type,Target Used,PrecisionX(mm),PrecisionY(mm),PrecisionZ(mm)\n");
      fprintf( data, "> Data:\n");
      for(Int_t i=0;i<72;i++)
        if (fCombFMData[i][0]!=0)
 	  fprintf( data, "SM%02iFM%i %f %f %f M Y %f %f %f\n", (i-i%4)/4, i%4, fCombFMData[i][0],fCombFMData[i][2],fCombFMData[i][4],fCombFMData[i][1],fCombFMData[i][3],fCombFMData[i][5]); 
      
       fclose( data );
   }
   else
     printf(  "Problem opening the file\n" );
}

//____________________________________________________________________________
void AliTOFAlignment::MakeDefData(const Int_t nf,TString namefiles[])
{
  //this method combines survey data from different files (namefiles[]) 
  //
  // 
 
  Float_t data[72][6][100];
  for (Int_t i=0;i<72;i++)
    for (Int_t j=0; j<6; j++)
      for(Int_t k=0; k<100; k++)
        data[i][j][k]=0;
  Int_t nfm=0;
  Int_t nsm=0;
  Long64_t totdata[72]={0};

  for (Int_t ii=0;ii<nf; ii++)
    {
      AliSurveyObj *so = new AliSurveyObj();
      const Char_t *nome=namefiles[ii];
      so->FillFromLocalFile(nome);
      TObjArray *points = so->GetData();
      Int_t nSurveyPoint=points->GetEntries();
      for(Int_t jj=0;jj<nSurveyPoint;jj++){
        const char* pointName= ((AliSurveyPoint *) points->At(jj))->GetPointName().Data();
        nfm=atoi(&pointName[6]);
        nsm=atoi(&pointName[2]);
        data[nsm*4+nfm][0][totdata[nsm*4+nfm]]=((AliSurveyPoint *) points->At(jj))->GetX();
        data[nsm*4+nfm][2][totdata[nsm*4+nfm]]=((AliSurveyPoint *) points->At(jj))->GetY();
        data[nsm*4+nfm][4][totdata[nsm*4+nfm]]=((AliSurveyPoint *) points->At(jj))->GetZ();
        data[nsm*4+nfm][1][totdata[nsm*4+nfm]]=((AliSurveyPoint *) points->At(jj))->GetPrecisionX();
        data[nsm*4+nfm][3][totdata[nsm*4+nfm]]=((AliSurveyPoint *) points->At(jj))->GetPrecisionY();
        data[nsm*4+nfm][5][totdata[nsm*4+nfm]]=((AliSurveyPoint *) points->At(jj))->GetPrecisionZ();
        totdata[nsm*4+nfm]=totdata[nsm*4+nfm]+1;
      } 
      delete so;
    }

  
  for(Int_t i=0; i<72 ;i++){
    Float_t numx=0, numy=0,numz=0, comodox=0, comodoy=0, comodoz=0,denx=0, deny=0, denz=0;
    if(totdata[i]!=0){    
      for(Int_t j=0; j<totdata[i]; j++){
        comodox=1/(data[i][1][j]/10*data[i][1][j]/10);//precision in mm, position in cm
        numx=numx+data[i][0][j]*comodox;
        denx=denx+comodox;
        comodoy=1/(data[i][3][j]/10*data[i][3][j]/10);
        numy=numy+data[i][2][j]*comodoy;
        deny=deny+comodoy;
        comodoz=1/(data[i][5][j]/10*data[i][5][j]/10);
        numz=numz+data[i][4][j]*comodoz;
        denz=denz+comodoz;
        }
      fCombFMData[i][1]=TMath::Sqrt(1/denx); //error for x position
      fCombFMData[i][3]=TMath::Sqrt(1/deny); //error for y position
      fCombFMData[i][5]=TMath::Sqrt(1/denz); //error for z position
      fCombFMData[i][0]=numx/denx;           //combined survey data for x position of FM
      fCombFMData[i][2]=numy/deny;           //combined survey data for y position of FM
      fCombFMData[i][4]=numz/denz;           //combined survey data for z position of FM
      } else continue;
    }

  for(Int_t i=0;i<72;i++)
    if (fCombFMData[i][0]!=0){
      fNFMforSM[(i-i%4)/4][i%4]=1;
      fNFMforSM[(i-i%4)/4][4]=fNFMforSM[(i-i%4)/4][4]+1;
    }
}

//_____________________________________________________________________________
void AliTOFAlignment::ReadSurveyDataAndAlign(){
  //
  // read the survey data and, if we know the positions of at least 3 FM 
  //for a SM, call the right Alignement procedure  

  fTOFAlignObjArray = new TObjArray(kMaxAlignObj);

  Float_t deltaFM0=0, deltaFM1=0, deltaFM2=0, deltaFM3=0;

  for(Int_t i=0; i<18; i++){
    switch(fNFMforSM[i][4]){
    case 0:
      printf("we don't know the position of any FM of SM %i\n",i);
      break;
    case 1:
      printf("we know the position of only one FM for SM %i\n",i);
     
      break;
    case 2:
      printf("we know the position of only 2 FM for SM %i\n",i);
      
      break;
    case 3:
      if (fNFMforSM[i][0]==1 && fNFMforSM[i][1]==1 && fNFMforSM[i][2]==1){
        printf("we know the position of FM A B C for SM %i\n",i);
        AliTOFAlignment::AlignFromSurveyABC(i);};

        
      if (fNFMforSM[i][0]==1 && fNFMforSM[i][1]==1 && fNFMforSM[i][3]==1){
        printf("we know the position of FM A B D for SM %i\n",i);
        AliTOFAlignment::AlignFromSurveyABD(i);};

        
      if (fNFMforSM[i][0]==1 && fNFMforSM[i][2]==1 && fNFMforSM[i][3]==1){
        printf("we know the position of FM A C D for SM %i\n",i);
        AliTOFAlignment::AlignFromSurveyACD(i);};

        
      if (fNFMforSM[i][1]==1 && fNFMforSM[i][2]==1 && fNFMforSM[i][3]==1){
        printf("we know the position of FM B C D for SM %i\n",i);
        AliTOFAlignment::AlignFromSurveyBCD(i);};

        
      break;
    case 4:
      printf("we know the position of all the 4 FM for SM %i\n",i);
      //check the precision of the measurement

      deltaFM0=fCombFMData[i*4][1]/TMath::Abs(fCombFMData[i*4][0])+fCombFMData[i*4][3]/TMath::Abs(fCombFMData[i*4][2])+fCombFMData[i*4][5]/TMath::Abs(fCombFMData[i*4][4]);
      deltaFM1=fCombFMData[i*4+1][1]/TMath::Abs(fCombFMData[i*4+1][0])+fCombFMData[i*4+1][3]/TMath::Abs(fCombFMData[i*4+1][2])+fCombFMData[i*4+1][5]/TMath::Abs(fCombFMData[i*4+1][4]);
      deltaFM2=fCombFMData[i*4+2][1]/TMath::Abs(fCombFMData[i*4+2][0])+fCombFMData[i*4+2][3]/TMath::Abs(fCombFMData[i*4+2][2])+fCombFMData[i*4+2][5]/TMath::Abs(fCombFMData[i*4+2][4]);
      deltaFM3=fCombFMData[i*4+3][1]/TMath::Abs(fCombFMData[i*4+3][0])+fCombFMData[i*4+3][3]/TMath::Abs(fCombFMData[i*4+3][2])+fCombFMData[i*4+3][5]/TMath::Abs(fCombFMData[i*4+3][4]);

      //to AlignFromSurvey we use the 3 FM whose positions are known with greatest precision
      if(deltaFM0>=deltaFM1 && deltaFM0>=deltaFM2 && deltaFM0>=deltaFM3){
	printf("to Align we use FM B,C,D");
	AliTOFAlignment::AlignFromSurveyBCD(i);} else
	  if(deltaFM1>=deltaFM0 && deltaFM1>=deltaFM2 && deltaFM1>=deltaFM3){
           printf("to Align we use FM A,C,D");
           AliTOFAlignment::AlignFromSurveyACD(i);} else
	     if(deltaFM2>=deltaFM0 && deltaFM2>=deltaFM1 && deltaFM2>=deltaFM3){
               printf("to Align we use FM A,B,D");
	       AliTOFAlignment::AlignFromSurveyABD(i);} else{
                 printf("to Align we use FM A,B,C");
	         AliTOFAlignment::AlignFromSurveyABC(i);}
     
      break;
    }
  
  }

    // saving TOF AligObjs from survey on a file, for the moment.. 
  fNTOFAlignObj=fTOFAlignObjArray->GetEntries();
  AliInfo(Form("Number of Alignable Volumes: %d",fNTOFAlignObj));
  TFile f("TOFAlignFromSurvey.root","RECREATE");
  f.cd();
  f.WriteObject(fTOFAlignObjArray,"TOFAlignObjs","kSingleKey");
  f.Close();
  

}

//_____________________________________________________________________________
void AliTOFAlignment::AlignFromSurveyABC(Int_t iSM)
{

  //From Survey data, derive the needed transformations to get the 
  //Alignment Objects. 
  //Again, highly "inspired" to Raffaele's example... 
  //we use FM A,B,C
    
    Double_t ngA[3], ngB[3], ngC[3]; // real FM point coord., global RS
    // Get the 'realistic' input from the Survey Matrix
      for(Int_t coord=0;coord<3;coord++){
      ngA[coord]=   fCombFMData[iSM*4][coord*2];
      ngB[coord]=   fCombFMData[iSM*4+1][coord*2];
      ngC[coord]=   fCombFMData[iSM*4+2][coord*2];
      }

    printf("\n\n******Survey analysis for TOF SuperModule ************** %i \n",iSM);

    // From the real fiducial marks coordinates derive back the
    // new global position of the surveyed volume
    //*** What follows is the actual survey-to-alignment procedure
    
    Double_t ab[3], bc[3], n[3];
    Double_t plane[4], s=1.;
    
    // first vector on the plane of the fiducial marks
    for(Int_t i=0;i<3;i++){
      ab[i] = (ngB[i] - ngA[i]);
    }
    
    // second vector on the plane of the fiducial marks
    for(Int_t i=0;i<3;i++){
      bc[i] = (ngC[i] - ngB[i]);
    }
    
    // vector normal to the plane of the fiducial marks obtained
    // as cross product of the two vectors on the plane d0^d1
    n[0] = (ab[1] * bc[2] - ab[2] * bc[1]);
    n[1] = (ab[2] * bc[0] - ab[0] * bc[2]);
    n[2] = (ab[0] * bc[1] - ab[1] * bc[0]);
    
    Double_t sizen = TMath::Sqrt( n[0]*n[0] + n[1]*n[1] + n[2]*n[2] );
    if(sizen>1.e-8){
      s = Double_t(1.)/sizen ; //normalization factor
    }else{
      AliInfo("Problem in normalizing the vector");
    }
    
    // plane expressed in the hessian normal form, see:
    // http://mathworld.wolfram.com/HessianNormalForm.html
    // the first three are the coordinates of the orthonormal vector
    // the fourth coordinate is equal to the distance from the origin
  
    for(Int_t i=0;i<3;i++){
      plane[i] = n[i] * s;
    }
    plane[3] = ( plane[0] * ngA[0] + plane[1] * ngA[1] + plane[2] * ngA[2] );
    
    // The center of the square with fiducial marks as corners
    // as the middle point of one diagonal - md
    // Used below to get the center - orig - of the surveyed box

    Double_t orig[3], md[3];
    for(Int_t i=0;i<3;i++){
      md[i] = (ngA[i] + ngC[i]) * 0.5;
    }
    
    // The center of the box, gives the global translation
    for(Int_t i=0;i<3;i++){
      orig[i] = md[i] - plane[i]*fgkZFM;
    }
    
    // get local directions needed to write the global rotation matrix
    // for the surveyed volume by normalising vectors ab and bc
    Double_t sx = TMath::Sqrt(ab[0]*ab[0] + ab[1]*ab[1] + ab[2]*ab[2]);


    if(sx>1.e-8){
      for(Int_t i=0;i<3;i++){
	ab[i] /= sx;
      }
    }
    Double_t sy = TMath::Sqrt(bc[0]*bc[0] + bc[1]*bc[1] + bc[2]*bc[2]);
    if(sy>1.e-8){
      for(Int_t i=0;i<3;i++){
	bc[i] /= sy;
      }
    }
    Double_t rot[9] = {ab[0],bc[0],plane[0],ab[1],bc[1],plane[1],ab[2],bc[2],plane[2]}; // the rotation matrix
    // the Aligned matrix for the current TOF SM in the Global RS, as derived from Survey
    TGeoHMatrix ng;              
    ng.SetTranslation(orig);
    ng.SetRotation(rot);
    printf("\n\n**** The Misaligned Matrix in GRS, as from Survey data ***\n");
    ng.Print();    

    // Calculate the delta transformation wrt Ideal geometry
    // (Should be gdelta.rot ==I and gdelta.tr=0 if no misalignment is applied.)
    
    printf("\n\n**** The ideal matrix ***\n"); 
    fTOFMatrixId[iSM]->Print();   
    
    TGeoHMatrix gdelta =fTOFMatrixId[iSM]->Inverse();
    printf("\n\n**** The inverse of the ideal matrix ***\n");
    gdelta.Print();
 
    gdelta.MultiplyLeft(&ng);
    printf("\n\n**** The Delta Matrix in GRS, as from Survey data ***\n");
    gdelta.Print(); //this is the global delta trasformation
    
    // Now Write the Alignment Objects....
    Int_t index=0; //let all SM modules have index=0
    AliGeomManager::ELayerID layer = AliGeomManager::kInvalidLayer;
    UShort_t dvoluid = AliGeomManager::LayerToVolUID(layer,index); //dummy vol id 
    TString symname(Form("TOF/sm%02d",iSM));
    AliAlignObjMatrix* o = new AliAlignObjMatrix(symname.Data(),dvoluid,gdelta,kTRUE);
    fTOFAlignObjArray->Add(o);

  }


//_____________________________________________________________________________
void AliTOFAlignment::AlignFromSurveyABD(Int_t iSM)
{
  
  //From Survey data, derive the needed transformations to get the 
  //Alignment Objects. 
  //Again, highly "inspired" to Raffaele's example... 
  //we use FM A,B,D
    
  Double_t ngA[3], ngB[3], ngD[3];// real FM point coord., global RS
    
   // Get the 'realistic' input from the Survey Matrix
      for(Int_t coord=0;coord<3;coord++){
      ngA[coord]=   fCombFMData[iSM*4][coord*2];
      ngB[coord]=   fCombFMData[iSM*4+1][coord*2];
      ngD[coord]=   fCombFMData[iSM*4+3][coord*2];
      }

    printf("\n\n******Survey analysis for TOF SuperModule ************** %i \n",iSM);

    // From the new fiducial marks coordinates derive back the
    // new global position of the surveyed volume
    //*** What follows is the actual survey-to-alignment procedure
    
    Double_t ab[3], ad[3], n[3];
    Double_t plane[4], s=1.;
    
    // first vector on the plane of the fiducial marks
    for(Int_t i=0;i<3;i++){
      ab[i] = (ngB[i] - ngA[i]);
    }
    
    // second vector on the plane of the fiducial marks
    for(Int_t i=0;i<3;i++){
      ad[i] = (ngD[i] - ngA[i]);
    }
    
    // vector normal to the plane of the fiducial marks obtained
    // as cross product of the two vectors on the plane d0^d1
    n[0] = (ab[1] * ad[2] - ab[2] * ad[1]);
    n[1] = (ab[2] * ad[0] - ab[0] * ad[2]);
    n[2] = (ab[0] * ad[1] - ab[1] * ad[0]);
    
    Double_t sizen = TMath::Sqrt( n[0]*n[0] + n[1]*n[1] + n[2]*n[2] );
    if(sizen>1.e-8){
      s = Double_t(1.)/sizen ; //normalization factor
    }else{
      AliInfo("Problem in normalizing the vector");
    }
    
    // plane expressed in the hessian normal form, see:
    // http://mathworld.wolfram.com/HessianNormalForm.html
    // the first three are the coordinates of the orthonormal vector
    // the fourth coordinate is equal to the distance from the origin
  
    for(Int_t i=0;i<3;i++){
      plane[i] = n[i] * s;
    }
    plane[3] = ( plane[0] * ngA[0] + plane[1] * ngA[1] + plane[2] * ngA[2] );
    
    // The center of the square with fiducial marks as corners
    // as the middle point of one diagonal - md
    // Used below to get the center - orig - of the surveyed box

    Double_t orig[3], md[3];
    for(Int_t i=0;i<3;i++){
      md[i] = (ngB[i] + ngD[i]) * 0.5;
    }
    
    // The center of the box, gives the global translation
    for(Int_t i=0;i<3;i++){
      orig[i] = md[i] - plane[i]*fgkZFM;
    }
    
    // get local directions needed to write the global rotation matrix
    // for the surveyed volume by normalising vectors ab and bc
    Double_t sx = TMath::Sqrt(ab[0]*ab[0] + ab[1]*ab[1] + ab[2]*ab[2]);
    if(sx>1.e-8){
      for(Int_t i=0;i<3;i++){
	ab[i] /= sx;
      }
    }
    Double_t sy = TMath::Sqrt(ad[0]*ad[0] + ad[1]*ad[1] + ad[2]*ad[2]);
    if(sy>1.e-8){
      for(Int_t i=0;i<3;i++){
	ad[i] /= sy;
      }
    }
    Double_t rot[9] = {ab[0],ad[0],plane[0],ab[1],ad[1],plane[1],ab[2],ad[2],plane[2]};
    // the Aligned matrix for the current TOF SM in the Global RS, as derived from Survey:
    TGeoHMatrix ng;              
    ng.SetTranslation(orig);
    ng.SetRotation(rot);
    printf("\n\n**** The Misaligned Matrix in GRS, as from Survey data ***\n");
    ng.Print();    

    // Calculate the delta transformation wrt Ideal geometry
    // (Should be gdelta.rot ==I and gdelta.tr=0 if no misalignment is applied.)
    
    printf("\n\n**** The ideal matrix ***\n"); 
    fTOFMatrixId[iSM]->Print();   
    
    TGeoHMatrix gdelta =fTOFMatrixId[iSM]->Inverse();
    printf("\n\n**** The inverse of the ideal matrix ***\n");
    gdelta.Print();
 
    gdelta.MultiplyLeft(&ng);
    printf("\n\n**** The Delta Matrix in GRS, as from Survey data ***\n");
    gdelta.Print();  //global delta trasformation
    
    // Now Write the Alignment Objects....
    Int_t index=0; //let all SM modules have index=0
    AliGeomManager::ELayerID layer = AliGeomManager::kInvalidLayer;
    UShort_t dvoluid = AliGeomManager::LayerToVolUID(layer,index); //dummy vol id 
    TString symname(Form("TOF/sm%02d",iSM));
    AliAlignObjMatrix* o = new AliAlignObjMatrix(symname.Data(),dvoluid,gdelta,kTRUE);
    fTOFAlignObjArray->Add(o);

  }
//_____________________________________________________________________________
void AliTOFAlignment::AlignFromSurveyACD(Int_t iSM)
{
  //From Survey data, derive the needed transformations to get the 
  //Alignment Objects. 
  //Again, highly "inspired" to Raffaele's example... 
  //we use FM A,C,D
  
    
    Double_t ngA[3], ngC[3], ngD[3];// real FM point coord., global RS
    
   // Get the 'realistic' input from the Survey Matrix
      for(Int_t coord=0;coord<3;coord++){
      ngA[coord]=   fCombFMData[iSM*4][coord*2];
      ngC[coord]=   fCombFMData[iSM*4+2][coord*2];
      ngD[coord]=   fCombFMData[iSM*4+3][coord*2];
      }

    printf("\n\n******Survey analysis for TOF SuperModule ************** %i \n",iSM);

    // From the new fiducial marks coordinates derive back the
    // new global position of the surveyed volume
    //*** What follows is the actual survey-to-alignment procedure
    
    Double_t cd[3], ad[3], n[3];
    Double_t plane[4], s=1.;
    
    // first vector on the plane of the fiducial marks
    for(Int_t i=0;i<3;i++){
      cd[i] = (ngC[i] - ngD[i]);
    }
    
    // second vector on the plane of the fiducial marks
    for(Int_t i=0;i<3;i++){
      ad[i] = (ngD[i] - ngA[i]);
    }
    
    // vector normal to the plane of the fiducial marks obtained
    // as cross product of the two vectors on the plane d0^d1
    n[0] = (ad[1] * cd[2] - ad[2] * cd[1]);
    n[1] = (ad[2] * cd[0] - ad[0] * cd[2]);
    n[2] = (ad[0] * cd[1] - ad[1] * cd[0]);
    
    Double_t sizen = TMath::Sqrt( n[0]*n[0] + n[1]*n[1] + n[2]*n[2] );
    if(sizen>1.e-8){
      s = Double_t(1.)/sizen ; //normalization factor
    }else{
      AliInfo("Problem in normalizing the vector");
    }
    
    // plane expressed in the hessian normal form, see:
    // http://mathworld.wolfram.com/HessianNormalForm.html
    // the first three are the coordinates of the orthonormal vector
    // the fourth coordinate is equal to the distance from the origin
  
    for(Int_t i=0;i<3;i++){
      plane[i] = n[i] * s;
    }
    plane[3] = ( plane[0] * ngA[0] + plane[1] * ngA[1] + plane[2] * ngA[2] );
    
    // The center of the square with fiducial marks as corners
    // as the middle point of one diagonal - md
    // Used below to get the center - orig - of the surveyed box

    Double_t orig[3], md[3];
    for(Int_t i=0;i<3;i++){
      md[i] = (ngA[i] + ngC[i]) * 0.5;
    }
    
    // The center of the box, gives the global translation
    for(Int_t i=0;i<3;i++){
      orig[i] = md[i] + plane[i]*fgkZFM;
    }
    
    // get local directions needed to write the global rotation matrix
    // for the surveyed volume by normalising vectors ab and bc
    Double_t sx = TMath::Sqrt(ad[0]*ad[0] + ad[1]*ad[1] + ad[2]*ad[2]);
    if(sx>1.e-8){
      for(Int_t i=0;i<3;i++){
	ad[i] /= sx;
      }
    }
    Double_t sy = TMath::Sqrt(cd[0]*cd[0] + cd[1]*cd[1] + cd[2]*cd[2]);
    if(sy>1.e-8){
      for(Int_t i=0;i<3;i++){
	cd[i] /= sy;
      }
    }
    Double_t rot[9] = {cd[0],ad[0],-plane[0],cd[1],ad[1],-plane[1],cd[2],ad[2],-plane[2]};
    // the Aligned matrix for the current TOF SM in the Global RS, as derived from Survey:
    TGeoHMatrix ng;              
    ng.SetTranslation(orig);
    ng.SetRotation(rot);
    printf("\n\n**** The Misaligned Matrix in GRS, as from Survey data ***\n");
    ng.Print();    

    // Calculate the delta transformation wrt Ideal geometry
    // (Should be gdelta.rot ==I and gdelta.tr=0 if no misalignment is applied.)
    
    printf("\n\n**** The ideal matrix ***\n"); 
    fTOFMatrixId[iSM]->Print();
    
    TGeoHMatrix gdelta =fTOFMatrixId[iSM]->Inverse();
    printf("\n\n**** The inverse of the ideal matrix ***\n");
    gdelta.Print();
 
    gdelta.MultiplyLeft(&ng);
    printf("\n\n**** The Delta Matrix in GRS, as from Survey data ***\n");
    gdelta.Print(); //global delta trasformation
    
    // Now Write the Alignment Objects....
    Int_t index=0; //let all SM modules have index=0
    AliGeomManager::ELayerID layer = AliGeomManager::kInvalidLayer;
    UShort_t dvoluid = AliGeomManager::LayerToVolUID(layer,index); //dummy vol id 
    TString symname(Form("TOF/sm%02d",iSM));
    AliAlignObjMatrix* o = new AliAlignObjMatrix(symname.Data(),dvoluid,gdelta,kTRUE);
    fTOFAlignObjArray->Add(o);
  }

//___________________________________________________________________________
void AliTOFAlignment::AlignFromSurveyBCD(Int_t iSM)
{
  //From Survey data, derive the needed transformations to get the 
  //Alignment Objects. 
  //Again, highly "inspired" to Raffaele's example... 
  //we use FM B,C,D

    Double_t ngB[3], ngC[3], ngD[3];// real FM point coord., global RS
    
    
   // Get the 'realistic' input from the Survey Matrix
      for(Int_t coord=0;coord<3;coord++){
      ngB[coord]=   fCombFMData[iSM*4+1][coord*2];
      ngC[coord]=   fCombFMData[iSM*4+2][coord*2];
      ngD[coord]=   fCombFMData[iSM*4+3][coord*2];
      }

    printf("\n\n******Survey analysis for TOF SuperModule ************** %i \n",iSM);

    // From the new fiducial marks coordinates derive back the
    // new global position of the surveyed volume
    //*** What follows is the actual survey-to-alignment procedure
    
    Double_t cd[3], bc[3], n[3];
    Double_t plane[4], s=1.;
    
    // first vector on the plane of the fiducial marks
    for(Int_t i=0;i<3;i++){
      cd[i] = (ngC[i] - ngD[i]);
    }
    
    // second vector on the plane of the fiducial marks
    for(Int_t i=0;i<3;i++){
      bc[i] = (ngC[i] - ngB[i]);
    }
    
    // vector normal to the plane of the fiducial marks obtained
    // as cross product of the two vectors on the plane d0^d1
    n[0] = (bc[1] * cd[2] - bc[2] * cd[1]);
    n[1] = (bc[2] * cd[0] - bc[0] * cd[2]);
    n[2] = (bc[0] * cd[1] - bc[1] * cd[0]);
    
    Double_t sizen = TMath::Sqrt( n[0]*n[0] + n[1]*n[1] + n[2]*n[2] );
    if(sizen>1.e-8){
      s = Double_t(1.)/sizen ; //normalization factor
    }else{
      AliInfo("Problem in normalizing the vector");
    }
    
    // plane expressed in the hessian normal form, see:
    // http://mathworld.wolfram.com/HessianNormalForm.html
    // the first three are the coordinates of the orthonormal vector
    // the fourth coordinate is equal to the distance from the origin
  
    for(Int_t i=0;i<3;i++){
      plane[i] = n[i] * s;
    }
    plane[3] = ( plane[0] * ngB[0] + plane[1] * ngB[1] + plane[2] * ngB[2] );
    
    // The center of the square with fiducial marks as corners
    // as the middle point of one diagonal - md
    // Used below to get the center - orig - of the surveyed box

    Double_t orig[3], md[3];
    for(Int_t i=0;i<3;i++){
      md[i] = (ngB[i] + ngD[i]) * 0.5;
    }
    
    // The center of the box, gives the global translation
    for(Int_t i=0;i<3;i++){
      orig[i] = md[i] + plane[i]*fgkZFM;
    }
    
    // get local directions needed to write the global rotation matrix
    // for the surveyed volume by normalising vectors ab and bc
    Double_t sx = TMath::Sqrt(cd[0]*cd[0] + cd[1]*cd[1] + cd[2]*cd[2]);
    if(sx>1.e-8){
      for(Int_t i=0;i<3;i++){
	cd[i] /= sx;
      }
    }
    Double_t sy = TMath::Sqrt(bc[0]*bc[0] + bc[1]*bc[1] + bc[2]*bc[2]);
    if(sy>1.e-8){
      for(Int_t i=0;i<3;i++){
	bc[i] /= sy;
      }
    }
    Double_t rot[9] = {cd[0],bc[0],-plane[0],cd[1],bc[1],-plane[1],cd[2],bc[2],-plane[2]};
    // the Aligned matrix for the current TOF SM in the Global RS, as derived from Survey:
    TGeoHMatrix ng;              
    ng.SetTranslation(orig);
    ng.SetRotation(rot);
    printf("\n\n**** The Misaligned Matrix in GRS, as from Survey data ***\n");
    ng.Print();    

    // Calculate the delta transformation wrt Ideal geometry
    // (Should be gdelta.rot ==I and gdelta.tr=0 if no misalignment is applied.)
    
    printf("\n\n**** The ideal matrix ***\n"); 
    fTOFMatrixId[iSM]->Print();   
    
    TGeoHMatrix gdelta =fTOFMatrixId[iSM]->Inverse();
    printf("\n\n**** The inverse of the ideal matrix ***\n");
    gdelta.Print();
 
    gdelta.MultiplyLeft(&ng);
    printf("\n\n**** The Delta Matrix in GRS, as from Survey data ***\n");
    gdelta.Print(); //global delta trasformation
    
    // Now Write the Alignment Objects....
    Int_t index=0; //let all SM modules have index=0
    AliGeomManager::ELayerID layer = AliGeomManager::kInvalidLayer;
    UShort_t dvoluid = AliGeomManager::LayerToVolUID(layer,index); //dummy vol id 
    TString symname(Form("TOF/sm%02d",iSM));
    AliAlignObjMatrix* o = new AliAlignObjMatrix(symname.Data(),dvoluid,gdelta,kTRUE);
    fTOFAlignObjArray->Add(o);
  }


 AliTOFAlignment.cxx:1
 AliTOFAlignment.cxx:2
 AliTOFAlignment.cxx:3
 AliTOFAlignment.cxx:4
 AliTOFAlignment.cxx:5
 AliTOFAlignment.cxx:6
 AliTOFAlignment.cxx:7
 AliTOFAlignment.cxx:8
 AliTOFAlignment.cxx:9
 AliTOFAlignment.cxx:10
 AliTOFAlignment.cxx:11
 AliTOFAlignment.cxx:12
 AliTOFAlignment.cxx:13
 AliTOFAlignment.cxx:14
 AliTOFAlignment.cxx:15
 AliTOFAlignment.cxx:16
 AliTOFAlignment.cxx:17
 AliTOFAlignment.cxx:18
 AliTOFAlignment.cxx:19
 AliTOFAlignment.cxx:20
 AliTOFAlignment.cxx:21
 AliTOFAlignment.cxx:22
 AliTOFAlignment.cxx:23
 AliTOFAlignment.cxx:24
 AliTOFAlignment.cxx:25
 AliTOFAlignment.cxx:26
 AliTOFAlignment.cxx:27
 AliTOFAlignment.cxx:28
 AliTOFAlignment.cxx:29
 AliTOFAlignment.cxx:30
 AliTOFAlignment.cxx:31
 AliTOFAlignment.cxx:32
 AliTOFAlignment.cxx:33
 AliTOFAlignment.cxx:34
 AliTOFAlignment.cxx:35
 AliTOFAlignment.cxx:36
 AliTOFAlignment.cxx:37
 AliTOFAlignment.cxx:38
 AliTOFAlignment.cxx:39
 AliTOFAlignment.cxx:40
 AliTOFAlignment.cxx:41
 AliTOFAlignment.cxx:42
 AliTOFAlignment.cxx:43
 AliTOFAlignment.cxx:44
 AliTOFAlignment.cxx:45
 AliTOFAlignment.cxx:46
 AliTOFAlignment.cxx:47
 AliTOFAlignment.cxx:48
 AliTOFAlignment.cxx:49
 AliTOFAlignment.cxx:50
 AliTOFAlignment.cxx:51
 AliTOFAlignment.cxx:52
 AliTOFAlignment.cxx:53
 AliTOFAlignment.cxx:54
 AliTOFAlignment.cxx:55
 AliTOFAlignment.cxx:56
 AliTOFAlignment.cxx:57
 AliTOFAlignment.cxx:58
 AliTOFAlignment.cxx:59
 AliTOFAlignment.cxx:60
 AliTOFAlignment.cxx:61
 AliTOFAlignment.cxx:62
 AliTOFAlignment.cxx:63
 AliTOFAlignment.cxx:64
 AliTOFAlignment.cxx:65
 AliTOFAlignment.cxx:66
 AliTOFAlignment.cxx:67
 AliTOFAlignment.cxx:68
 AliTOFAlignment.cxx:69
 AliTOFAlignment.cxx:70
 AliTOFAlignment.cxx:71
 AliTOFAlignment.cxx:72
 AliTOFAlignment.cxx:73
 AliTOFAlignment.cxx:74
 AliTOFAlignment.cxx:75
 AliTOFAlignment.cxx:76
 AliTOFAlignment.cxx:77
 AliTOFAlignment.cxx:78
 AliTOFAlignment.cxx:79
 AliTOFAlignment.cxx:80
 AliTOFAlignment.cxx:81
 AliTOFAlignment.cxx:82
 AliTOFAlignment.cxx:83
 AliTOFAlignment.cxx:84
 AliTOFAlignment.cxx:85
 AliTOFAlignment.cxx:86
 AliTOFAlignment.cxx:87
 AliTOFAlignment.cxx:88
 AliTOFAlignment.cxx:89
 AliTOFAlignment.cxx:90
 AliTOFAlignment.cxx:91
 AliTOFAlignment.cxx:92
 AliTOFAlignment.cxx:93
 AliTOFAlignment.cxx:94
 AliTOFAlignment.cxx:95
 AliTOFAlignment.cxx:96
 AliTOFAlignment.cxx:97
 AliTOFAlignment.cxx:98
 AliTOFAlignment.cxx:99
 AliTOFAlignment.cxx:100
 AliTOFAlignment.cxx:101
 AliTOFAlignment.cxx:102
 AliTOFAlignment.cxx:103
 AliTOFAlignment.cxx:104
 AliTOFAlignment.cxx:105
 AliTOFAlignment.cxx:106
 AliTOFAlignment.cxx:107
 AliTOFAlignment.cxx:108
 AliTOFAlignment.cxx:109
 AliTOFAlignment.cxx:110
 AliTOFAlignment.cxx:111
 AliTOFAlignment.cxx:112
 AliTOFAlignment.cxx:113
 AliTOFAlignment.cxx:114
 AliTOFAlignment.cxx:115
 AliTOFAlignment.cxx:116
 AliTOFAlignment.cxx:117
 AliTOFAlignment.cxx:118
 AliTOFAlignment.cxx:119
 AliTOFAlignment.cxx:120
 AliTOFAlignment.cxx:121
 AliTOFAlignment.cxx:122
 AliTOFAlignment.cxx:123
 AliTOFAlignment.cxx:124
 AliTOFAlignment.cxx:125
 AliTOFAlignment.cxx:126
 AliTOFAlignment.cxx:127
 AliTOFAlignment.cxx:128
 AliTOFAlignment.cxx:129
 AliTOFAlignment.cxx:130
 AliTOFAlignment.cxx:131
 AliTOFAlignment.cxx:132
 AliTOFAlignment.cxx:133
 AliTOFAlignment.cxx:134
 AliTOFAlignment.cxx:135
 AliTOFAlignment.cxx:136
 AliTOFAlignment.cxx:137
 AliTOFAlignment.cxx:138
 AliTOFAlignment.cxx:139
 AliTOFAlignment.cxx:140
 AliTOFAlignment.cxx:141
 AliTOFAlignment.cxx:142
 AliTOFAlignment.cxx:143
 AliTOFAlignment.cxx:144
 AliTOFAlignment.cxx:145
 AliTOFAlignment.cxx:146
 AliTOFAlignment.cxx:147
 AliTOFAlignment.cxx:148
 AliTOFAlignment.cxx:149
 AliTOFAlignment.cxx:150
 AliTOFAlignment.cxx:151
 AliTOFAlignment.cxx:152
 AliTOFAlignment.cxx:153
 AliTOFAlignment.cxx:154
 AliTOFAlignment.cxx:155
 AliTOFAlignment.cxx:156
 AliTOFAlignment.cxx:157
 AliTOFAlignment.cxx:158
 AliTOFAlignment.cxx:159
 AliTOFAlignment.cxx:160
 AliTOFAlignment.cxx:161
 AliTOFAlignment.cxx:162
 AliTOFAlignment.cxx:163
 AliTOFAlignment.cxx:164
 AliTOFAlignment.cxx:165
 AliTOFAlignment.cxx:166
 AliTOFAlignment.cxx:167
 AliTOFAlignment.cxx:168
 AliTOFAlignment.cxx:169
 AliTOFAlignment.cxx:170
 AliTOFAlignment.cxx:171
 AliTOFAlignment.cxx:172
 AliTOFAlignment.cxx:173
 AliTOFAlignment.cxx:174
 AliTOFAlignment.cxx:175
 AliTOFAlignment.cxx:176
 AliTOFAlignment.cxx:177
 AliTOFAlignment.cxx:178
 AliTOFAlignment.cxx:179
 AliTOFAlignment.cxx:180
 AliTOFAlignment.cxx:181
 AliTOFAlignment.cxx:182
 AliTOFAlignment.cxx:183
 AliTOFAlignment.cxx:184
 AliTOFAlignment.cxx:185
 AliTOFAlignment.cxx:186
 AliTOFAlignment.cxx:187
 AliTOFAlignment.cxx:188
 AliTOFAlignment.cxx:189
 AliTOFAlignment.cxx:190
 AliTOFAlignment.cxx:191
 AliTOFAlignment.cxx:192
 AliTOFAlignment.cxx:193
 AliTOFAlignment.cxx:194
 AliTOFAlignment.cxx:195
 AliTOFAlignment.cxx:196
 AliTOFAlignment.cxx:197
 AliTOFAlignment.cxx:198
 AliTOFAlignment.cxx:199
 AliTOFAlignment.cxx:200
 AliTOFAlignment.cxx:201
 AliTOFAlignment.cxx:202
 AliTOFAlignment.cxx:203
 AliTOFAlignment.cxx:204
 AliTOFAlignment.cxx:205
 AliTOFAlignment.cxx:206
 AliTOFAlignment.cxx:207
 AliTOFAlignment.cxx:208
 AliTOFAlignment.cxx:209
 AliTOFAlignment.cxx:210
 AliTOFAlignment.cxx:211
 AliTOFAlignment.cxx:212
 AliTOFAlignment.cxx:213
 AliTOFAlignment.cxx:214
 AliTOFAlignment.cxx:215
 AliTOFAlignment.cxx:216
 AliTOFAlignment.cxx:217
 AliTOFAlignment.cxx:218
 AliTOFAlignment.cxx:219
 AliTOFAlignment.cxx:220
 AliTOFAlignment.cxx:221
 AliTOFAlignment.cxx:222
 AliTOFAlignment.cxx:223
 AliTOFAlignment.cxx:224
 AliTOFAlignment.cxx:225
 AliTOFAlignment.cxx:226
 AliTOFAlignment.cxx:227
 AliTOFAlignment.cxx:228
 AliTOFAlignment.cxx:229
 AliTOFAlignment.cxx:230
 AliTOFAlignment.cxx:231
 AliTOFAlignment.cxx:232
 AliTOFAlignment.cxx:233
 AliTOFAlignment.cxx:234
 AliTOFAlignment.cxx:235
 AliTOFAlignment.cxx:236
 AliTOFAlignment.cxx:237
 AliTOFAlignment.cxx:238
 AliTOFAlignment.cxx:239
 AliTOFAlignment.cxx:240
 AliTOFAlignment.cxx:241
 AliTOFAlignment.cxx:242
 AliTOFAlignment.cxx:243
 AliTOFAlignment.cxx:244
 AliTOFAlignment.cxx:245
 AliTOFAlignment.cxx:246
 AliTOFAlignment.cxx:247
 AliTOFAlignment.cxx:248
 AliTOFAlignment.cxx:249
 AliTOFAlignment.cxx:250
 AliTOFAlignment.cxx:251
 AliTOFAlignment.cxx:252
 AliTOFAlignment.cxx:253
 AliTOFAlignment.cxx:254
 AliTOFAlignment.cxx:255
 AliTOFAlignment.cxx:256
 AliTOFAlignment.cxx:257
 AliTOFAlignment.cxx:258
 AliTOFAlignment.cxx:259
 AliTOFAlignment.cxx:260
 AliTOFAlignment.cxx:261
 AliTOFAlignment.cxx:262
 AliTOFAlignment.cxx:263
 AliTOFAlignment.cxx:264
 AliTOFAlignment.cxx:265
 AliTOFAlignment.cxx:266
 AliTOFAlignment.cxx:267
 AliTOFAlignment.cxx:268
 AliTOFAlignment.cxx:269
 AliTOFAlignment.cxx:270
 AliTOFAlignment.cxx:271
 AliTOFAlignment.cxx:272
 AliTOFAlignment.cxx:273
 AliTOFAlignment.cxx:274
 AliTOFAlignment.cxx:275
 AliTOFAlignment.cxx:276
 AliTOFAlignment.cxx:277
 AliTOFAlignment.cxx:278
 AliTOFAlignment.cxx:279
 AliTOFAlignment.cxx:280
 AliTOFAlignment.cxx:281
 AliTOFAlignment.cxx:282
 AliTOFAlignment.cxx:283
 AliTOFAlignment.cxx:284
 AliTOFAlignment.cxx:285
 AliTOFAlignment.cxx:286
 AliTOFAlignment.cxx:287
 AliTOFAlignment.cxx:288
 AliTOFAlignment.cxx:289
 AliTOFAlignment.cxx:290
 AliTOFAlignment.cxx:291
 AliTOFAlignment.cxx:292
 AliTOFAlignment.cxx:293
 AliTOFAlignment.cxx:294
 AliTOFAlignment.cxx:295
 AliTOFAlignment.cxx:296
 AliTOFAlignment.cxx:297
 AliTOFAlignment.cxx:298
 AliTOFAlignment.cxx:299
 AliTOFAlignment.cxx:300
 AliTOFAlignment.cxx:301
 AliTOFAlignment.cxx:302
 AliTOFAlignment.cxx:303
 AliTOFAlignment.cxx:304
 AliTOFAlignment.cxx:305
 AliTOFAlignment.cxx:306
 AliTOFAlignment.cxx:307
 AliTOFAlignment.cxx:308
 AliTOFAlignment.cxx:309
 AliTOFAlignment.cxx:310
 AliTOFAlignment.cxx:311
 AliTOFAlignment.cxx:312
 AliTOFAlignment.cxx:313
 AliTOFAlignment.cxx:314
 AliTOFAlignment.cxx:315
 AliTOFAlignment.cxx:316
 AliTOFAlignment.cxx:317
 AliTOFAlignment.cxx:318
 AliTOFAlignment.cxx:319
 AliTOFAlignment.cxx:320
 AliTOFAlignment.cxx:321
 AliTOFAlignment.cxx:322
 AliTOFAlignment.cxx:323
 AliTOFAlignment.cxx:324
 AliTOFAlignment.cxx:325
 AliTOFAlignment.cxx:326
 AliTOFAlignment.cxx:327
 AliTOFAlignment.cxx:328
 AliTOFAlignment.cxx:329
 AliTOFAlignment.cxx:330
 AliTOFAlignment.cxx:331
 AliTOFAlignment.cxx:332
 AliTOFAlignment.cxx:333
 AliTOFAlignment.cxx:334
 AliTOFAlignment.cxx:335
 AliTOFAlignment.cxx:336
 AliTOFAlignment.cxx:337
 AliTOFAlignment.cxx:338
 AliTOFAlignment.cxx:339
 AliTOFAlignment.cxx:340
 AliTOFAlignment.cxx:341
 AliTOFAlignment.cxx:342
 AliTOFAlignment.cxx:343
 AliTOFAlignment.cxx:344
 AliTOFAlignment.cxx:345
 AliTOFAlignment.cxx:346
 AliTOFAlignment.cxx:347
 AliTOFAlignment.cxx:348
 AliTOFAlignment.cxx:349
 AliTOFAlignment.cxx:350
 AliTOFAlignment.cxx:351
 AliTOFAlignment.cxx:352
 AliTOFAlignment.cxx:353
 AliTOFAlignment.cxx:354
 AliTOFAlignment.cxx:355
 AliTOFAlignment.cxx:356
 AliTOFAlignment.cxx:357
 AliTOFAlignment.cxx:358
 AliTOFAlignment.cxx:359
 AliTOFAlignment.cxx:360
 AliTOFAlignment.cxx:361
 AliTOFAlignment.cxx:362
 AliTOFAlignment.cxx:363
 AliTOFAlignment.cxx:364
 AliTOFAlignment.cxx:365
 AliTOFAlignment.cxx:366
 AliTOFAlignment.cxx:367
 AliTOFAlignment.cxx:368
 AliTOFAlignment.cxx:369
 AliTOFAlignment.cxx:370
 AliTOFAlignment.cxx:371
 AliTOFAlignment.cxx:372
 AliTOFAlignment.cxx:373
 AliTOFAlignment.cxx:374
 AliTOFAlignment.cxx:375
 AliTOFAlignment.cxx:376
 AliTOFAlignment.cxx:377
 AliTOFAlignment.cxx:378
 AliTOFAlignment.cxx:379
 AliTOFAlignment.cxx:380
 AliTOFAlignment.cxx:381
 AliTOFAlignment.cxx:382
 AliTOFAlignment.cxx:383
 AliTOFAlignment.cxx:384
 AliTOFAlignment.cxx:385
 AliTOFAlignment.cxx:386
 AliTOFAlignment.cxx:387
 AliTOFAlignment.cxx:388
 AliTOFAlignment.cxx:389
 AliTOFAlignment.cxx:390
 AliTOFAlignment.cxx:391
 AliTOFAlignment.cxx:392
 AliTOFAlignment.cxx:393
 AliTOFAlignment.cxx:394
 AliTOFAlignment.cxx:395
 AliTOFAlignment.cxx:396
 AliTOFAlignment.cxx:397
 AliTOFAlignment.cxx:398
 AliTOFAlignment.cxx:399
 AliTOFAlignment.cxx:400
 AliTOFAlignment.cxx:401
 AliTOFAlignment.cxx:402
 AliTOFAlignment.cxx:403
 AliTOFAlignment.cxx:404
 AliTOFAlignment.cxx:405
 AliTOFAlignment.cxx:406
 AliTOFAlignment.cxx:407
 AliTOFAlignment.cxx:408
 AliTOFAlignment.cxx:409
 AliTOFAlignment.cxx:410
 AliTOFAlignment.cxx:411
 AliTOFAlignment.cxx:412
 AliTOFAlignment.cxx:413
 AliTOFAlignment.cxx:414
 AliTOFAlignment.cxx:415
 AliTOFAlignment.cxx:416
 AliTOFAlignment.cxx:417
 AliTOFAlignment.cxx:418
 AliTOFAlignment.cxx:419
 AliTOFAlignment.cxx:420
 AliTOFAlignment.cxx:421
 AliTOFAlignment.cxx:422
 AliTOFAlignment.cxx:423
 AliTOFAlignment.cxx:424
 AliTOFAlignment.cxx:425
 AliTOFAlignment.cxx:426
 AliTOFAlignment.cxx:427
 AliTOFAlignment.cxx:428
 AliTOFAlignment.cxx:429
 AliTOFAlignment.cxx:430
 AliTOFAlignment.cxx:431
 AliTOFAlignment.cxx:432
 AliTOFAlignment.cxx:433
 AliTOFAlignment.cxx:434
 AliTOFAlignment.cxx:435
 AliTOFAlignment.cxx:436
 AliTOFAlignment.cxx:437
 AliTOFAlignment.cxx:438
 AliTOFAlignment.cxx:439
 AliTOFAlignment.cxx:440
 AliTOFAlignment.cxx:441
 AliTOFAlignment.cxx:442
 AliTOFAlignment.cxx:443
 AliTOFAlignment.cxx:444
 AliTOFAlignment.cxx:445
 AliTOFAlignment.cxx:446
 AliTOFAlignment.cxx:447
 AliTOFAlignment.cxx:448
 AliTOFAlignment.cxx:449
 AliTOFAlignment.cxx:450
 AliTOFAlignment.cxx:451
 AliTOFAlignment.cxx:452
 AliTOFAlignment.cxx:453
 AliTOFAlignment.cxx:454
 AliTOFAlignment.cxx:455
 AliTOFAlignment.cxx:456
 AliTOFAlignment.cxx:457
 AliTOFAlignment.cxx:458
 AliTOFAlignment.cxx:459
 AliTOFAlignment.cxx:460
 AliTOFAlignment.cxx:461
 AliTOFAlignment.cxx:462
 AliTOFAlignment.cxx:463
 AliTOFAlignment.cxx:464
 AliTOFAlignment.cxx:465
 AliTOFAlignment.cxx:466
 AliTOFAlignment.cxx:467
 AliTOFAlignment.cxx:468
 AliTOFAlignment.cxx:469
 AliTOFAlignment.cxx:470
 AliTOFAlignment.cxx:471
 AliTOFAlignment.cxx:472
 AliTOFAlignment.cxx:473
 AliTOFAlignment.cxx:474
 AliTOFAlignment.cxx:475
 AliTOFAlignment.cxx:476
 AliTOFAlignment.cxx:477
 AliTOFAlignment.cxx:478
 AliTOFAlignment.cxx:479
 AliTOFAlignment.cxx:480
 AliTOFAlignment.cxx:481
 AliTOFAlignment.cxx:482
 AliTOFAlignment.cxx:483
 AliTOFAlignment.cxx:484
 AliTOFAlignment.cxx:485
 AliTOFAlignment.cxx:486
 AliTOFAlignment.cxx:487
 AliTOFAlignment.cxx:488
 AliTOFAlignment.cxx:489
 AliTOFAlignment.cxx:490
 AliTOFAlignment.cxx:491
 AliTOFAlignment.cxx:492
 AliTOFAlignment.cxx:493
 AliTOFAlignment.cxx:494
 AliTOFAlignment.cxx:495
 AliTOFAlignment.cxx:496
 AliTOFAlignment.cxx:497
 AliTOFAlignment.cxx:498
 AliTOFAlignment.cxx:499
 AliTOFAlignment.cxx:500
 AliTOFAlignment.cxx:501
 AliTOFAlignment.cxx:502
 AliTOFAlignment.cxx:503
 AliTOFAlignment.cxx:504
 AliTOFAlignment.cxx:505
 AliTOFAlignment.cxx:506
 AliTOFAlignment.cxx:507
 AliTOFAlignment.cxx:508
 AliTOFAlignment.cxx:509
 AliTOFAlignment.cxx:510
 AliTOFAlignment.cxx:511
 AliTOFAlignment.cxx:512
 AliTOFAlignment.cxx:513
 AliTOFAlignment.cxx:514
 AliTOFAlignment.cxx:515
 AliTOFAlignment.cxx:516
 AliTOFAlignment.cxx:517
 AliTOFAlignment.cxx:518
 AliTOFAlignment.cxx:519
 AliTOFAlignment.cxx:520
 AliTOFAlignment.cxx:521
 AliTOFAlignment.cxx:522
 AliTOFAlignment.cxx:523
 AliTOFAlignment.cxx:524
 AliTOFAlignment.cxx:525
 AliTOFAlignment.cxx:526
 AliTOFAlignment.cxx:527
 AliTOFAlignment.cxx:528
 AliTOFAlignment.cxx:529
 AliTOFAlignment.cxx:530
 AliTOFAlignment.cxx:531
 AliTOFAlignment.cxx:532
 AliTOFAlignment.cxx:533
 AliTOFAlignment.cxx:534
 AliTOFAlignment.cxx:535
 AliTOFAlignment.cxx:536
 AliTOFAlignment.cxx:537
 AliTOFAlignment.cxx:538
 AliTOFAlignment.cxx:539
 AliTOFAlignment.cxx:540
 AliTOFAlignment.cxx:541
 AliTOFAlignment.cxx:542
 AliTOFAlignment.cxx:543
 AliTOFAlignment.cxx:544
 AliTOFAlignment.cxx:545
 AliTOFAlignment.cxx:546
 AliTOFAlignment.cxx:547
 AliTOFAlignment.cxx:548
 AliTOFAlignment.cxx:549
 AliTOFAlignment.cxx:550
 AliTOFAlignment.cxx:551
 AliTOFAlignment.cxx:552
 AliTOFAlignment.cxx:553
 AliTOFAlignment.cxx:554
 AliTOFAlignment.cxx:555
 AliTOFAlignment.cxx:556
 AliTOFAlignment.cxx:557
 AliTOFAlignment.cxx:558
 AliTOFAlignment.cxx:559
 AliTOFAlignment.cxx:560
 AliTOFAlignment.cxx:561
 AliTOFAlignment.cxx:562
 AliTOFAlignment.cxx:563
 AliTOFAlignment.cxx:564
 AliTOFAlignment.cxx:565
 AliTOFAlignment.cxx:566
 AliTOFAlignment.cxx:567
 AliTOFAlignment.cxx:568
 AliTOFAlignment.cxx:569
 AliTOFAlignment.cxx:570
 AliTOFAlignment.cxx:571
 AliTOFAlignment.cxx:572
 AliTOFAlignment.cxx:573
 AliTOFAlignment.cxx:574
 AliTOFAlignment.cxx:575
 AliTOFAlignment.cxx:576
 AliTOFAlignment.cxx:577
 AliTOFAlignment.cxx:578
 AliTOFAlignment.cxx:579
 AliTOFAlignment.cxx:580
 AliTOFAlignment.cxx:581
 AliTOFAlignment.cxx:582
 AliTOFAlignment.cxx:583
 AliTOFAlignment.cxx:584
 AliTOFAlignment.cxx:585
 AliTOFAlignment.cxx:586
 AliTOFAlignment.cxx:587
 AliTOFAlignment.cxx:588
 AliTOFAlignment.cxx:589
 AliTOFAlignment.cxx:590
 AliTOFAlignment.cxx:591
 AliTOFAlignment.cxx:592
 AliTOFAlignment.cxx:593
 AliTOFAlignment.cxx:594
 AliTOFAlignment.cxx:595
 AliTOFAlignment.cxx:596
 AliTOFAlignment.cxx:597
 AliTOFAlignment.cxx:598
 AliTOFAlignment.cxx:599
 AliTOFAlignment.cxx:600
 AliTOFAlignment.cxx:601
 AliTOFAlignment.cxx:602
 AliTOFAlignment.cxx:603
 AliTOFAlignment.cxx:604
 AliTOFAlignment.cxx:605
 AliTOFAlignment.cxx:606
 AliTOFAlignment.cxx:607
 AliTOFAlignment.cxx:608
 AliTOFAlignment.cxx:609
 AliTOFAlignment.cxx:610
 AliTOFAlignment.cxx:611
 AliTOFAlignment.cxx:612
 AliTOFAlignment.cxx:613
 AliTOFAlignment.cxx:614
 AliTOFAlignment.cxx:615
 AliTOFAlignment.cxx:616
 AliTOFAlignment.cxx:617
 AliTOFAlignment.cxx:618
 AliTOFAlignment.cxx:619
 AliTOFAlignment.cxx:620
 AliTOFAlignment.cxx:621
 AliTOFAlignment.cxx:622
 AliTOFAlignment.cxx:623
 AliTOFAlignment.cxx:624
 AliTOFAlignment.cxx:625
 AliTOFAlignment.cxx:626
 AliTOFAlignment.cxx:627
 AliTOFAlignment.cxx:628
 AliTOFAlignment.cxx:629
 AliTOFAlignment.cxx:630
 AliTOFAlignment.cxx:631
 AliTOFAlignment.cxx:632
 AliTOFAlignment.cxx:633
 AliTOFAlignment.cxx:634
 AliTOFAlignment.cxx:635
 AliTOFAlignment.cxx:636
 AliTOFAlignment.cxx:637
 AliTOFAlignment.cxx:638
 AliTOFAlignment.cxx:639
 AliTOFAlignment.cxx:640
 AliTOFAlignment.cxx:641
 AliTOFAlignment.cxx:642
 AliTOFAlignment.cxx:643
 AliTOFAlignment.cxx:644
 AliTOFAlignment.cxx:645
 AliTOFAlignment.cxx:646
 AliTOFAlignment.cxx:647
 AliTOFAlignment.cxx:648
 AliTOFAlignment.cxx:649
 AliTOFAlignment.cxx:650
 AliTOFAlignment.cxx:651
 AliTOFAlignment.cxx:652
 AliTOFAlignment.cxx:653
 AliTOFAlignment.cxx:654
 AliTOFAlignment.cxx:655
 AliTOFAlignment.cxx:656
 AliTOFAlignment.cxx:657
 AliTOFAlignment.cxx:658
 AliTOFAlignment.cxx:659
 AliTOFAlignment.cxx:660
 AliTOFAlignment.cxx:661
 AliTOFAlignment.cxx:662
 AliTOFAlignment.cxx:663
 AliTOFAlignment.cxx:664
 AliTOFAlignment.cxx:665
 AliTOFAlignment.cxx:666
 AliTOFAlignment.cxx:667
 AliTOFAlignment.cxx:668
 AliTOFAlignment.cxx:669
 AliTOFAlignment.cxx:670
 AliTOFAlignment.cxx:671
 AliTOFAlignment.cxx:672
 AliTOFAlignment.cxx:673
 AliTOFAlignment.cxx:674
 AliTOFAlignment.cxx:675
 AliTOFAlignment.cxx:676
 AliTOFAlignment.cxx:677
 AliTOFAlignment.cxx:678
 AliTOFAlignment.cxx:679
 AliTOFAlignment.cxx:680
 AliTOFAlignment.cxx:681
 AliTOFAlignment.cxx:682
 AliTOFAlignment.cxx:683
 AliTOFAlignment.cxx:684
 AliTOFAlignment.cxx:685
 AliTOFAlignment.cxx:686
 AliTOFAlignment.cxx:687
 AliTOFAlignment.cxx:688
 AliTOFAlignment.cxx:689
 AliTOFAlignment.cxx:690
 AliTOFAlignment.cxx:691
 AliTOFAlignment.cxx:692
 AliTOFAlignment.cxx:693
 AliTOFAlignment.cxx:694
 AliTOFAlignment.cxx:695
 AliTOFAlignment.cxx:696
 AliTOFAlignment.cxx:697
 AliTOFAlignment.cxx:698
 AliTOFAlignment.cxx:699
 AliTOFAlignment.cxx:700
 AliTOFAlignment.cxx:701
 AliTOFAlignment.cxx:702
 AliTOFAlignment.cxx:703
 AliTOFAlignment.cxx:704
 AliTOFAlignment.cxx:705
 AliTOFAlignment.cxx:706
 AliTOFAlignment.cxx:707
 AliTOFAlignment.cxx:708
 AliTOFAlignment.cxx:709
 AliTOFAlignment.cxx:710
 AliTOFAlignment.cxx:711
 AliTOFAlignment.cxx:712
 AliTOFAlignment.cxx:713
 AliTOFAlignment.cxx:714
 AliTOFAlignment.cxx:715
 AliTOFAlignment.cxx:716
 AliTOFAlignment.cxx:717
 AliTOFAlignment.cxx:718
 AliTOFAlignment.cxx:719
 AliTOFAlignment.cxx:720
 AliTOFAlignment.cxx:721
 AliTOFAlignment.cxx:722
 AliTOFAlignment.cxx:723
 AliTOFAlignment.cxx:724
 AliTOFAlignment.cxx:725
 AliTOFAlignment.cxx:726
 AliTOFAlignment.cxx:727
 AliTOFAlignment.cxx:728
 AliTOFAlignment.cxx:729
 AliTOFAlignment.cxx:730
 AliTOFAlignment.cxx:731
 AliTOFAlignment.cxx:732
 AliTOFAlignment.cxx:733
 AliTOFAlignment.cxx:734
 AliTOFAlignment.cxx:735
 AliTOFAlignment.cxx:736
 AliTOFAlignment.cxx:737
 AliTOFAlignment.cxx:738
 AliTOFAlignment.cxx:739
 AliTOFAlignment.cxx:740
 AliTOFAlignment.cxx:741
 AliTOFAlignment.cxx:742
 AliTOFAlignment.cxx:743
 AliTOFAlignment.cxx:744
 AliTOFAlignment.cxx:745
 AliTOFAlignment.cxx:746
 AliTOFAlignment.cxx:747
 AliTOFAlignment.cxx:748
 AliTOFAlignment.cxx:749
 AliTOFAlignment.cxx:750
 AliTOFAlignment.cxx:751
 AliTOFAlignment.cxx:752
 AliTOFAlignment.cxx:753
 AliTOFAlignment.cxx:754
 AliTOFAlignment.cxx:755
 AliTOFAlignment.cxx:756
 AliTOFAlignment.cxx:757
 AliTOFAlignment.cxx:758
 AliTOFAlignment.cxx:759
 AliTOFAlignment.cxx:760
 AliTOFAlignment.cxx:761
 AliTOFAlignment.cxx:762
 AliTOFAlignment.cxx:763
 AliTOFAlignment.cxx:764
 AliTOFAlignment.cxx:765
 AliTOFAlignment.cxx:766
 AliTOFAlignment.cxx:767
 AliTOFAlignment.cxx:768
 AliTOFAlignment.cxx:769
 AliTOFAlignment.cxx:770
 AliTOFAlignment.cxx:771
 AliTOFAlignment.cxx:772
 AliTOFAlignment.cxx:773
 AliTOFAlignment.cxx:774
 AliTOFAlignment.cxx:775
 AliTOFAlignment.cxx:776
 AliTOFAlignment.cxx:777
 AliTOFAlignment.cxx:778
 AliTOFAlignment.cxx:779
 AliTOFAlignment.cxx:780
 AliTOFAlignment.cxx:781
 AliTOFAlignment.cxx:782
 AliTOFAlignment.cxx:783
 AliTOFAlignment.cxx:784
 AliTOFAlignment.cxx:785
 AliTOFAlignment.cxx:786
 AliTOFAlignment.cxx:787
 AliTOFAlignment.cxx:788
 AliTOFAlignment.cxx:789
 AliTOFAlignment.cxx:790
 AliTOFAlignment.cxx:791
 AliTOFAlignment.cxx:792
 AliTOFAlignment.cxx:793
 AliTOFAlignment.cxx:794
 AliTOFAlignment.cxx:795
 AliTOFAlignment.cxx:796
 AliTOFAlignment.cxx:797
 AliTOFAlignment.cxx:798
 AliTOFAlignment.cxx:799
 AliTOFAlignment.cxx:800
 AliTOFAlignment.cxx:801
 AliTOFAlignment.cxx:802
 AliTOFAlignment.cxx:803
 AliTOFAlignment.cxx:804
 AliTOFAlignment.cxx:805
 AliTOFAlignment.cxx:806
 AliTOFAlignment.cxx:807
 AliTOFAlignment.cxx:808
 AliTOFAlignment.cxx:809
 AliTOFAlignment.cxx:810
 AliTOFAlignment.cxx:811
 AliTOFAlignment.cxx:812
 AliTOFAlignment.cxx:813
 AliTOFAlignment.cxx:814
 AliTOFAlignment.cxx:815
 AliTOFAlignment.cxx:816
 AliTOFAlignment.cxx:817
 AliTOFAlignment.cxx:818
 AliTOFAlignment.cxx:819
 AliTOFAlignment.cxx:820
 AliTOFAlignment.cxx:821
 AliTOFAlignment.cxx:822
 AliTOFAlignment.cxx:823
 AliTOFAlignment.cxx:824
 AliTOFAlignment.cxx:825
 AliTOFAlignment.cxx:826
 AliTOFAlignment.cxx:827
 AliTOFAlignment.cxx:828
 AliTOFAlignment.cxx:829
 AliTOFAlignment.cxx:830
 AliTOFAlignment.cxx:831
 AliTOFAlignment.cxx:832
 AliTOFAlignment.cxx:833
 AliTOFAlignment.cxx:834
 AliTOFAlignment.cxx:835
 AliTOFAlignment.cxx:836
 AliTOFAlignment.cxx:837
 AliTOFAlignment.cxx:838
 AliTOFAlignment.cxx:839
 AliTOFAlignment.cxx:840
 AliTOFAlignment.cxx:841
 AliTOFAlignment.cxx:842
 AliTOFAlignment.cxx:843
 AliTOFAlignment.cxx:844
 AliTOFAlignment.cxx:845
 AliTOFAlignment.cxx:846
 AliTOFAlignment.cxx:847
 AliTOFAlignment.cxx:848
 AliTOFAlignment.cxx:849
 AliTOFAlignment.cxx:850
 AliTOFAlignment.cxx:851
 AliTOFAlignment.cxx:852
 AliTOFAlignment.cxx:853
 AliTOFAlignment.cxx:854
 AliTOFAlignment.cxx:855
 AliTOFAlignment.cxx:856
 AliTOFAlignment.cxx:857
 AliTOFAlignment.cxx:858
 AliTOFAlignment.cxx:859
 AliTOFAlignment.cxx:860
 AliTOFAlignment.cxx:861
 AliTOFAlignment.cxx:862
 AliTOFAlignment.cxx:863
 AliTOFAlignment.cxx:864
 AliTOFAlignment.cxx:865
 AliTOFAlignment.cxx:866
 AliTOFAlignment.cxx:867
 AliTOFAlignment.cxx:868
 AliTOFAlignment.cxx:869
 AliTOFAlignment.cxx:870
 AliTOFAlignment.cxx:871
 AliTOFAlignment.cxx:872
 AliTOFAlignment.cxx:873
 AliTOFAlignment.cxx:874
 AliTOFAlignment.cxx:875
 AliTOFAlignment.cxx:876
 AliTOFAlignment.cxx:877
 AliTOFAlignment.cxx:878
 AliTOFAlignment.cxx:879
 AliTOFAlignment.cxx:880
 AliTOFAlignment.cxx:881
 AliTOFAlignment.cxx:882
 AliTOFAlignment.cxx:883
 AliTOFAlignment.cxx:884
 AliTOFAlignment.cxx:885
 AliTOFAlignment.cxx:886
 AliTOFAlignment.cxx:887
 AliTOFAlignment.cxx:888
 AliTOFAlignment.cxx:889
 AliTOFAlignment.cxx:890
 AliTOFAlignment.cxx:891
 AliTOFAlignment.cxx:892
 AliTOFAlignment.cxx:893
 AliTOFAlignment.cxx:894
 AliTOFAlignment.cxx:895
 AliTOFAlignment.cxx:896
 AliTOFAlignment.cxx:897
 AliTOFAlignment.cxx:898
 AliTOFAlignment.cxx:899
 AliTOFAlignment.cxx:900
 AliTOFAlignment.cxx:901
 AliTOFAlignment.cxx:902
 AliTOFAlignment.cxx:903
 AliTOFAlignment.cxx:904
 AliTOFAlignment.cxx:905
 AliTOFAlignment.cxx:906
 AliTOFAlignment.cxx:907
 AliTOFAlignment.cxx:908
 AliTOFAlignment.cxx:909
 AliTOFAlignment.cxx:910
 AliTOFAlignment.cxx:911
 AliTOFAlignment.cxx:912
 AliTOFAlignment.cxx:913
 AliTOFAlignment.cxx:914
 AliTOFAlignment.cxx:915
 AliTOFAlignment.cxx:916
 AliTOFAlignment.cxx:917
 AliTOFAlignment.cxx:918
 AliTOFAlignment.cxx:919
 AliTOFAlignment.cxx:920
 AliTOFAlignment.cxx:921
 AliTOFAlignment.cxx:922
 AliTOFAlignment.cxx:923
 AliTOFAlignment.cxx:924
 AliTOFAlignment.cxx:925
 AliTOFAlignment.cxx:926
 AliTOFAlignment.cxx:927
 AliTOFAlignment.cxx:928
 AliTOFAlignment.cxx:929
 AliTOFAlignment.cxx:930
 AliTOFAlignment.cxx:931
 AliTOFAlignment.cxx:932
 AliTOFAlignment.cxx:933
 AliTOFAlignment.cxx:934
 AliTOFAlignment.cxx:935
 AliTOFAlignment.cxx:936
 AliTOFAlignment.cxx:937
 AliTOFAlignment.cxx:938
 AliTOFAlignment.cxx:939
 AliTOFAlignment.cxx:940
 AliTOFAlignment.cxx:941
 AliTOFAlignment.cxx:942
 AliTOFAlignment.cxx:943
 AliTOFAlignment.cxx:944
 AliTOFAlignment.cxx:945
 AliTOFAlignment.cxx:946
 AliTOFAlignment.cxx:947
 AliTOFAlignment.cxx:948
 AliTOFAlignment.cxx:949
 AliTOFAlignment.cxx:950
 AliTOFAlignment.cxx:951
 AliTOFAlignment.cxx:952
 AliTOFAlignment.cxx:953
 AliTOFAlignment.cxx:954
 AliTOFAlignment.cxx:955
 AliTOFAlignment.cxx:956
 AliTOFAlignment.cxx:957
 AliTOFAlignment.cxx:958
 AliTOFAlignment.cxx:959
 AliTOFAlignment.cxx:960
 AliTOFAlignment.cxx:961
 AliTOFAlignment.cxx:962
 AliTOFAlignment.cxx:963
 AliTOFAlignment.cxx:964
 AliTOFAlignment.cxx:965
 AliTOFAlignment.cxx:966
 AliTOFAlignment.cxx:967
 AliTOFAlignment.cxx:968
 AliTOFAlignment.cxx:969
 AliTOFAlignment.cxx:970
 AliTOFAlignment.cxx:971
 AliTOFAlignment.cxx:972
 AliTOFAlignment.cxx:973
 AliTOFAlignment.cxx:974
 AliTOFAlignment.cxx:975
 AliTOFAlignment.cxx:976
 AliTOFAlignment.cxx:977
 AliTOFAlignment.cxx:978
 AliTOFAlignment.cxx:979
 AliTOFAlignment.cxx:980
 AliTOFAlignment.cxx:981
 AliTOFAlignment.cxx:982
 AliTOFAlignment.cxx:983
 AliTOFAlignment.cxx:984
 AliTOFAlignment.cxx:985
 AliTOFAlignment.cxx:986
 AliTOFAlignment.cxx:987
 AliTOFAlignment.cxx:988
 AliTOFAlignment.cxx:989
 AliTOFAlignment.cxx:990
 AliTOFAlignment.cxx:991
 AliTOFAlignment.cxx:992
 AliTOFAlignment.cxx:993
 AliTOFAlignment.cxx:994
 AliTOFAlignment.cxx:995
 AliTOFAlignment.cxx:996
 AliTOFAlignment.cxx:997
 AliTOFAlignment.cxx:998
 AliTOFAlignment.cxx:999
 AliTOFAlignment.cxx:1000
 AliTOFAlignment.cxx:1001
 AliTOFAlignment.cxx:1002
 AliTOFAlignment.cxx:1003
 AliTOFAlignment.cxx:1004
 AliTOFAlignment.cxx:1005
 AliTOFAlignment.cxx:1006
 AliTOFAlignment.cxx:1007
 AliTOFAlignment.cxx:1008
 AliTOFAlignment.cxx:1009
 AliTOFAlignment.cxx:1010
 AliTOFAlignment.cxx:1011
 AliTOFAlignment.cxx:1012
 AliTOFAlignment.cxx:1013
 AliTOFAlignment.cxx:1014
 AliTOFAlignment.cxx:1015
 AliTOFAlignment.cxx:1016
 AliTOFAlignment.cxx:1017
 AliTOFAlignment.cxx:1018
 AliTOFAlignment.cxx:1019
 AliTOFAlignment.cxx:1020
 AliTOFAlignment.cxx:1021
 AliTOFAlignment.cxx:1022
 AliTOFAlignment.cxx:1023
 AliTOFAlignment.cxx:1024
 AliTOFAlignment.cxx:1025
 AliTOFAlignment.cxx:1026
 AliTOFAlignment.cxx:1027
 AliTOFAlignment.cxx:1028
 AliTOFAlignment.cxx:1029
 AliTOFAlignment.cxx:1030
 AliTOFAlignment.cxx:1031
 AliTOFAlignment.cxx:1032
 AliTOFAlignment.cxx:1033
 AliTOFAlignment.cxx:1034
 AliTOFAlignment.cxx:1035
 AliTOFAlignment.cxx:1036
 AliTOFAlignment.cxx:1037
 AliTOFAlignment.cxx:1038
 AliTOFAlignment.cxx:1039
 AliTOFAlignment.cxx:1040
 AliTOFAlignment.cxx:1041
 AliTOFAlignment.cxx:1042
 AliTOFAlignment.cxx:1043
 AliTOFAlignment.cxx:1044
 AliTOFAlignment.cxx:1045
 AliTOFAlignment.cxx:1046
 AliTOFAlignment.cxx:1047
 AliTOFAlignment.cxx:1048
 AliTOFAlignment.cxx:1049
 AliTOFAlignment.cxx:1050
 AliTOFAlignment.cxx:1051
 AliTOFAlignment.cxx:1052
 AliTOFAlignment.cxx:1053
 AliTOFAlignment.cxx:1054
 AliTOFAlignment.cxx:1055
 AliTOFAlignment.cxx:1056
 AliTOFAlignment.cxx:1057
 AliTOFAlignment.cxx:1058
 AliTOFAlignment.cxx:1059
 AliTOFAlignment.cxx:1060
 AliTOFAlignment.cxx:1061
 AliTOFAlignment.cxx:1062
 AliTOFAlignment.cxx:1063
 AliTOFAlignment.cxx:1064
 AliTOFAlignment.cxx:1065
 AliTOFAlignment.cxx:1066
 AliTOFAlignment.cxx:1067
 AliTOFAlignment.cxx:1068
 AliTOFAlignment.cxx:1069
 AliTOFAlignment.cxx:1070
 AliTOFAlignment.cxx:1071
 AliTOFAlignment.cxx:1072
 AliTOFAlignment.cxx:1073
 AliTOFAlignment.cxx:1074
 AliTOFAlignment.cxx:1075
 AliTOFAlignment.cxx:1076
 AliTOFAlignment.cxx:1077
 AliTOFAlignment.cxx:1078
 AliTOFAlignment.cxx:1079
 AliTOFAlignment.cxx:1080
 AliTOFAlignment.cxx:1081
 AliTOFAlignment.cxx:1082
 AliTOFAlignment.cxx:1083
 AliTOFAlignment.cxx:1084
 AliTOFAlignment.cxx:1085
 AliTOFAlignment.cxx:1086
 AliTOFAlignment.cxx:1087
 AliTOFAlignment.cxx:1088
 AliTOFAlignment.cxx:1089
 AliTOFAlignment.cxx:1090
 AliTOFAlignment.cxx:1091
 AliTOFAlignment.cxx:1092
 AliTOFAlignment.cxx:1093
 AliTOFAlignment.cxx:1094
 AliTOFAlignment.cxx:1095
 AliTOFAlignment.cxx:1096
 AliTOFAlignment.cxx:1097
 AliTOFAlignment.cxx:1098
 AliTOFAlignment.cxx:1099
 AliTOFAlignment.cxx:1100
 AliTOFAlignment.cxx:1101
 AliTOFAlignment.cxx:1102
 AliTOFAlignment.cxx:1103
 AliTOFAlignment.cxx:1104
 AliTOFAlignment.cxx:1105
 AliTOFAlignment.cxx:1106
 AliTOFAlignment.cxx:1107
 AliTOFAlignment.cxx:1108
 AliTOFAlignment.cxx:1109
 AliTOFAlignment.cxx:1110
 AliTOFAlignment.cxx:1111
 AliTOFAlignment.cxx:1112
 AliTOFAlignment.cxx:1113
 AliTOFAlignment.cxx:1114
 AliTOFAlignment.cxx:1115
 AliTOFAlignment.cxx:1116
 AliTOFAlignment.cxx:1117
 AliTOFAlignment.cxx:1118
 AliTOFAlignment.cxx:1119
 AliTOFAlignment.cxx:1120
 AliTOFAlignment.cxx:1121
 AliTOFAlignment.cxx:1122
 AliTOFAlignment.cxx:1123
 AliTOFAlignment.cxx:1124
 AliTOFAlignment.cxx:1125
 AliTOFAlignment.cxx:1126
 AliTOFAlignment.cxx:1127
 AliTOFAlignment.cxx:1128
 AliTOFAlignment.cxx:1129
 AliTOFAlignment.cxx:1130
 AliTOFAlignment.cxx:1131
 AliTOFAlignment.cxx:1132
 AliTOFAlignment.cxx:1133
 AliTOFAlignment.cxx:1134
 AliTOFAlignment.cxx:1135
 AliTOFAlignment.cxx:1136
 AliTOFAlignment.cxx:1137
 AliTOFAlignment.cxx:1138
 AliTOFAlignment.cxx:1139
 AliTOFAlignment.cxx:1140
 AliTOFAlignment.cxx:1141
 AliTOFAlignment.cxx:1142
 AliTOFAlignment.cxx:1143
 AliTOFAlignment.cxx:1144
 AliTOFAlignment.cxx:1145
 AliTOFAlignment.cxx:1146
 AliTOFAlignment.cxx:1147
 AliTOFAlignment.cxx:1148
 AliTOFAlignment.cxx:1149
 AliTOFAlignment.cxx:1150
 AliTOFAlignment.cxx:1151
 AliTOFAlignment.cxx:1152
 AliTOFAlignment.cxx:1153
 AliTOFAlignment.cxx:1154
 AliTOFAlignment.cxx:1155
 AliTOFAlignment.cxx:1156
 AliTOFAlignment.cxx:1157
 AliTOFAlignment.cxx:1158
 AliTOFAlignment.cxx:1159
 AliTOFAlignment.cxx:1160
 AliTOFAlignment.cxx:1161
 AliTOFAlignment.cxx:1162
 AliTOFAlignment.cxx:1163
 AliTOFAlignment.cxx:1164
 AliTOFAlignment.cxx:1165
 AliTOFAlignment.cxx:1166
 AliTOFAlignment.cxx:1167
 AliTOFAlignment.cxx:1168
 AliTOFAlignment.cxx:1169
 AliTOFAlignment.cxx:1170
 AliTOFAlignment.cxx:1171
 AliTOFAlignment.cxx:1172
 AliTOFAlignment.cxx:1173
 AliTOFAlignment.cxx:1174
 AliTOFAlignment.cxx:1175
 AliTOFAlignment.cxx:1176
 AliTOFAlignment.cxx:1177
 AliTOFAlignment.cxx:1178
 AliTOFAlignment.cxx:1179
 AliTOFAlignment.cxx:1180
 AliTOFAlignment.cxx:1181
 AliTOFAlignment.cxx:1182
 AliTOFAlignment.cxx:1183
 AliTOFAlignment.cxx:1184
 AliTOFAlignment.cxx:1185
 AliTOFAlignment.cxx:1186
 AliTOFAlignment.cxx:1187
 AliTOFAlignment.cxx:1188
 AliTOFAlignment.cxx:1189
 AliTOFAlignment.cxx:1190
 AliTOFAlignment.cxx:1191
 AliTOFAlignment.cxx:1192
 AliTOFAlignment.cxx:1193
 AliTOFAlignment.cxx:1194
 AliTOFAlignment.cxx:1195
 AliTOFAlignment.cxx:1196
 AliTOFAlignment.cxx:1197
 AliTOFAlignment.cxx:1198
 AliTOFAlignment.cxx:1199
 AliTOFAlignment.cxx:1200
 AliTOFAlignment.cxx:1201
 AliTOFAlignment.cxx:1202
 AliTOFAlignment.cxx:1203
 AliTOFAlignment.cxx:1204
 AliTOFAlignment.cxx:1205
 AliTOFAlignment.cxx:1206
 AliTOFAlignment.cxx:1207
 AliTOFAlignment.cxx:1208
 AliTOFAlignment.cxx:1209
 AliTOFAlignment.cxx:1210
 AliTOFAlignment.cxx:1211
 AliTOFAlignment.cxx:1212
 AliTOFAlignment.cxx:1213
 AliTOFAlignment.cxx:1214
 AliTOFAlignment.cxx:1215