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

#include "AliACORDEAlign.h"
#include "TROOT.h"
#include "Riostream.h"
#include "TFile.h"
#include "TMath.h"
#include "TSystem.h"
#include "AliSurveyObj.h"
#include "AliAlignObjParams.h"
#include "AliCDBStorage.h"
#include <TClonesArray.h>
#include <TFile.h>
#include "AliLog.h"
#include "AliCDBManager.h"
#include "AliSurveyPoint.h" 
#include "AliACORDEConstants.h" 

// Class creating the ACORDE aligmnent objects 
// from the surveys done by surveyers at Point2.
// Survey results are fetched from 
// Survey Depot, based on survey results 
// position of ACORDE alignment objects is computed.
using std::cout;
using std::endl;
ClassImp(AliACORDEAlign)


//________________________________________________________________________
AliACORDEAlign::AliACORDEAlign() :
  TObject(),
  fFileGlob(0x0),
  fRepLoc(0),
  fRepGlob(0),
  fUser(0x0),  
  fX(),
  fAlignACORDEObjArray(0x0),
  fDebug(0)
{
  //
  //  default constructor
  //
}

AliACORDEAlign::AliACORDEAlign(/*Int_t reportloc,*/Int_t reportglob):
  TObject(),
  fFileGlob(0x0),
  fRepLoc(0),
  fRepGlob(0),
  fUser(0x0),
  fX(120,4),
  fAlignACORDEObjArray(0x0),
  fDebug(0)
{
  
//
  // constructor
  //fRepLoc = new reportloc[80];
  //fRepGlob = new reportglob[80];
  Char_t path[50];
   fFileGlob = new Char_t[80];
   fUser = new Char_t[10];
  snprintf(path,50,"%s",gSystem->Getenv("ALICE_ROOT")); 
  // 
  snprintf(fFileGlob,80,"%s/ACORDE/Survey_%d_ACORDE.txt",path,reportglob);
  //
 snprintf(fUser,10,"%s",gSystem->Getenv("alien_API_USER"));

}

//__________________________________________________________________________
AliACORDEAlign::~AliACORDEAlign(){
  //
  // destructor
  //
if(fAlignACORDEObjArray) delete fAlignACORDEObjArray;
  if(fFileGlob) delete[] fFileGlob;
  if(fUser) delete[] fUser;
}


void AliACORDEAlign::LoadSurveyData()
{

//
// Create a new survey object and fill it.
 
AliSurveyObj * s1 = new AliSurveyObj(); 

if(fRepLoc != 0) 
 { 
 // Filling from DCDB (via GRID)
 s1->SetGridUser(fUser);
 s1->Fill("ACORDE",1014872,1,fUser); 
 }
 else
 {
   s1->FillFromLocalFile(fFileGlob);
 }


 //s1->GetEntries();
 //s1->GetUnits();
 //TObjArray* arr = s1->GetData();
 //cout<< "number of entries " << arr->GetEntries() <<endl;
 //arr->UncheckedAt(0)->ClassName();
 //AliSurveyPoint *sp0 = (AliSurveyPoint*) arr->UncheckedAt(0);   
 //cout << "point name " << sp0->GetPointName() << endl  ;
  

//
TString ML= "M" ;
//TString PL= "P";
TString underscore =  "_";
TString  endInner =  "_I";
TString  endOuter =  "_O";
TString  endCenter = "_P";
//
TString surveyname;
TString surveynameInner;
TString surveynameOuter;
TString surveynameCenter;

//TString surveynameAngles;
// 
TString pointNamesInner[60];
TString pointNamesOuter[60];
TString pointNamesCenter[60];

//
Int_t  nid=0;
//
 //for regular modules 
 for (Int_t ncolum=0; ncolum<6; ncolum++)
   {
     for (Int_t nrow=0; nrow<10; nrow++)
       {	
         
         surveyname=ML;
         surveyname+=ncolum;
         surveyname+=underscore;
         surveyname+=nrow;
  
         surveynameInner=surveyname; 
         surveynameInner+=endInner;

         surveynameOuter=surveyname;
         surveynameOuter+=endOuter; 
                          
         surveynameCenter=surveyname;
         surveynameCenter+=endCenter;
  
        pointNamesInner[nid] =  surveynameInner;
        pointNamesOuter[nid] = surveynameOuter; 
        pointNamesCenter[nid] = surveynameCenter;
  	 ++nid; 
       }
   }


//Read  two points 
AliSurveyPoint  *InnerPoint;
AliSurveyPoint *OuterPoint
; 
AliSurveyPoint  *CenterPoint;


 for(Int_t i=0;i<60;i++)
 {

   InnerPoint=0;
   OuterPoint=0; 
   CenterPoint=0;
 
   InnerPoint = (AliSurveyPoint *) s1->GetData()->FindObject(pointNamesInner[i]);
   OuterPoint = (AliSurveyPoint *) s1->GetData()->FindObject(pointNamesOuter[i]);
   CenterPoint = (AliSurveyPoint *) s1->GetData()->FindObject(pointNamesCenter[i]);



  if(InnerPoint && OuterPoint)
   {     
     //Use center if it is available
     if(CenterPoint)
       { 
         fX(i+60,0) =  CenterPoint->GetX()*100;  
         fX(i+60,1) =  CenterPoint->GetY()*100; 
         fX(i+60,2) =  CenterPoint->GetZ()*100;
        }
      else
        {
      //calculate center point 
         fX(i+60,0) = 100*(InnerPoint->GetX() + OuterPoint->GetX())/2.0;  
         fX(i+60,1) = 100*(InnerPoint->GetY() + OuterPoint->GetY())/2.0; 
         fX(i+60,2) = 100*(InnerPoint->GetZ() + OuterPoint->GetZ())/2.0;
        } 
   
      fX(i,0) =  OuterPoint->GetX()*100;  
      fX(i,1) =  OuterPoint->GetY()*100;
      fX(i,2) =  OuterPoint->GetZ()*100;
   }
   else 
   {
       if(InnerPoint && CenterPoint) 
         {

          fX(i+60,0) =  CenterPoint->GetX()*100;  
          fX(i+60,1) =  CenterPoint->GetY()*100; 
          fX(i+60,2) =  CenterPoint->GetZ()*100;

          fX(i,0) =  InnerPoint->GetX()*100;  
          fX(i,1) =  InnerPoint->GetY()*100;
          fX(i,2) =  InnerPoint->GetZ()*100;   
         } 
        else
        {
          if(OuterPoint && CenterPoint)
            { 
        
             fX(i+60,0) =  CenterPoint->GetX()*100;  
             fX(i+60,1) =  CenterPoint->GetY()*100; 
             fX(i+60,2) =  CenterPoint->GetZ()*100;

             fX(i,0) =  OuterPoint->GetX()*100;  
             fX(i,1) =  OuterPoint->GetY()*100;
             fX(i,2) =  OuterPoint->GetZ()*100;   
            }
          else
            { 

             fX(i+60,0) = -99.0;  
             fX(i+60,1) = -99.0; 
             fX(i+60,2) = -99.0;

             fX(i,0) =  -99.0;  
             fX(i,1) =  -99.0;
             fX(i,2) =  -99.0;   
            
            }
        }  
   } 


 }//ends  for

 delete s1;

}

void  AliACORDEAlign::ComputePosition()
{


//Residuals for rotations

Double_t theta;
Double_t resphi[60]; 
Double_t resiphi;

for (Int_t imod=0; imod<60; imod++)
  {
   if(TMath::Abs(fX(imod+60,0)-fX(imod,0))>=0.000001)
   {
   theta = (fX(imod+60,1)-fX(imod,1))/(fX(imod+60,0)-fX(imod,0));
   resiphi = TMath::ATan(theta)*(180.0/TMath::Pi());
   // calculate the residuals  special  modules 
   if(imod==0 || imod==9 || imod==50 || imod==59 )
    {    
    resphi[imod] = 0.0-resiphi;
    continue; 
    }
   // for module with no measurements 
   if(imod == 42 )
    {
     resphi[imod]= 0.0;
    continue;
    } 
   //face A
   if(imod>0 && imod <20)
    {
    resphi[imod] = resiphi + 45.0;  
    }
   //face B
   if(imod>=20 && imod <40)
    {
    resphi[imod] = -resiphi;  
    }
   //face C
   if(imod>=40 && imod <60)
    {
    resphi[imod] = resiphi - 45.0;  
    }
 
   }

}


//Get the  residuals for translations 

AliCDBManager* cdb = AliCDBManager::Instance();
if(!cdb->IsDefaultStorageSet()) cdb->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
cdb->SetRun(0);

//AliCDBStorage* storage;
AliGeomManager::LoadGeometry(); 


TString symname;
TString basename = "ACORDE/Array";


// Get the ideal directly from the geometry 
 Double_t *tr;
 TGeoHMatrix *matrix;  
  for (Int_t imod=0; imod<60; imod++)
  {
    symname = basename;
    symname += imod; 
    cout<< symname << endl;
    matrix = AliGeomManager::GetMatrix(symname);
    tr=matrix->GetTranslation();  

    if(imod == 42)
      {
    fX(imod+60,0) = 0.0;  
    fX(imod+60,1) = 0.0;  
    fX(imod+60,2) = 0.0; 
    fX(imod,0) = 0.0;  
    fX(imod,1) = 0.0;  
    fX(imod,2) = 0.0; 
    continue;
      }

    fX(imod+60,0)=fX(imod+60,0)- tr[0];
    fX(imod+60,1)=fX(imod+60,1)- tr[1]- 4.0;
    fX(imod+60,2)=fX(imod+60,2)- tr[2];  
  
    fX(imod,0) = resphi[imod];  
    fX(imod,1) = 0.0;  
    fX(imod,2) = 0.0; 

   }
  



}

//______________________________________________________________________
void AliACORDEAlign::Run(){
  //
  // runs the full chain
  //
  
  //if(!LoadSurveyFromAlienFile("ACORDE",999999,1))
  //{
   // cout<<"Missing points"<<endl;
    //return;
  //}
  //else 
  //{
    //LoadSurveyfromLocalFile("ACORDE",99999,1);
  //} 


  LoadSurveyData();
  ComputePosition();
  //CreateACORDEAlignObjs();
  StoreAlignObj();

}

//_________________________________________________________________________

void AliACORDEAlign::StoreAlignObj()
{
  //
  // Storing ACORDE alignment objects 
  //

  AliCDBManager* cdb = AliCDBManager::Instance();
  if(!cdb->IsDefaultStorageSet()) cdb->SetDefaultStorage("local://$ALICE_ROOT");

  TClonesArray *array = new TClonesArray("AliAlignObjParams",60);
  //
  // storing either in the OCDB or local file
  //

  TString symname;
  TString basename = "ACORDE/Array";
  Int_t iIndex=0; 

  AliGeomManager::ELayerID iLayer = AliGeomManager::kInvalidLayer;
  UShort_t volid = AliGeomManager::LayerToVolUID(iLayer,iIndex);

  Double_t dx=0., dy=0., dz=0., dpsi=0., dtheta=0., dphi=0.0;
  
   for (Int_t imod=0; imod<60; imod++)
     {
       
       dphi = fX(imod,0);
       dtheta = fX(imod,1);
       dpsi = fX(imod,2);
       dx = fX(imod+60,0);
       dy = fX(imod+60,1);
       dz = fX(imod+60,2);  
       symname = basename;
       symname +=  imod;         
       new((*array)[imod]) AliAlignObjParams(symname,volid,dx,dy,dz,dpsi,dtheta,dphi,kFALSE);     
     }


  if( TString(gSystem->Getenv("TOCDB"))!= TString("kTRUE") )
   {
   
    

 // save on file
    const char* filename = "ACORDESurveyMisalignment.root";
    Char_t fullname[80];

    

    snprintf(fullname,80,"%s",filename);
       
   
    TFile *f = new TFile(fullname,"RECREATE");

    
    if(!f)
      {
	AliError("cannot open file for output\n");
	return;
      }
    AliInfo(Form("Saving alignment objects to the file %s", filename));
    f->cd();
    f->WriteObject(array,"ACORDEAlignObjs","kSingleKey");
    f->Close();
  }
  else
    {
      // save in CDB storage
      AliCDBStorage* storage;
      //
       TString Storage = gSystem->Getenv("STORAGE");
       if(!Storage.BeginsWith("local://") && !Storage.BeginsWith("alien://"))
	 {
	   AliError(Form("STORAGE variable set to %s is not valid. Exiting\n",Storage.Data()));
	   return;
	 }
       storage = cdb->GetStorage(Storage.Data());
       if(!storage)
	 {
	   AliError(Form("Unable to open storage %s\n",Storage.Data()));
	   return;
	 }
       //
       AliCDBMetaData* md = new AliCDBMetaData();
       md->SetResponsible("Pedro Podesta");
       md->SetComment("Full misalignment of ACORDE from surveyors");
       AliCDBId id("ACORDE/Align/Data",0,AliCDBRunRange::Infinity());
       storage->Put(fAlignACORDEObjArray,id,md);
    }

}
 AliACORDEAlign.cxx:1
 AliACORDEAlign.cxx:2
 AliACORDEAlign.cxx:3
 AliACORDEAlign.cxx:4
 AliACORDEAlign.cxx:5
 AliACORDEAlign.cxx:6
 AliACORDEAlign.cxx:7
 AliACORDEAlign.cxx:8
 AliACORDEAlign.cxx:9
 AliACORDEAlign.cxx:10
 AliACORDEAlign.cxx:11
 AliACORDEAlign.cxx:12
 AliACORDEAlign.cxx:13
 AliACORDEAlign.cxx:14
 AliACORDEAlign.cxx:15
 AliACORDEAlign.cxx:16
 AliACORDEAlign.cxx:17
 AliACORDEAlign.cxx:18
 AliACORDEAlign.cxx:19
 AliACORDEAlign.cxx:20
 AliACORDEAlign.cxx:21
 AliACORDEAlign.cxx:22
 AliACORDEAlign.cxx:23
 AliACORDEAlign.cxx:24
 AliACORDEAlign.cxx:25
 AliACORDEAlign.cxx:26
 AliACORDEAlign.cxx:27
 AliACORDEAlign.cxx:28
 AliACORDEAlign.cxx:29
 AliACORDEAlign.cxx:30
 AliACORDEAlign.cxx:31
 AliACORDEAlign.cxx:32
 AliACORDEAlign.cxx:33
 AliACORDEAlign.cxx:34
 AliACORDEAlign.cxx:35
 AliACORDEAlign.cxx:36
 AliACORDEAlign.cxx:37
 AliACORDEAlign.cxx:38
 AliACORDEAlign.cxx:39
 AliACORDEAlign.cxx:40
 AliACORDEAlign.cxx:41
 AliACORDEAlign.cxx:42
 AliACORDEAlign.cxx:43
 AliACORDEAlign.cxx:44
 AliACORDEAlign.cxx:45
 AliACORDEAlign.cxx:46
 AliACORDEAlign.cxx:47
 AliACORDEAlign.cxx:48
 AliACORDEAlign.cxx:49
 AliACORDEAlign.cxx:50
 AliACORDEAlign.cxx:51
 AliACORDEAlign.cxx:52
 AliACORDEAlign.cxx:53
 AliACORDEAlign.cxx:54
 AliACORDEAlign.cxx:55
 AliACORDEAlign.cxx:56
 AliACORDEAlign.cxx:57
 AliACORDEAlign.cxx:58
 AliACORDEAlign.cxx:59
 AliACORDEAlign.cxx:60
 AliACORDEAlign.cxx:61
 AliACORDEAlign.cxx:62
 AliACORDEAlign.cxx:63
 AliACORDEAlign.cxx:64
 AliACORDEAlign.cxx:65
 AliACORDEAlign.cxx:66
 AliACORDEAlign.cxx:67
 AliACORDEAlign.cxx:68
 AliACORDEAlign.cxx:69
 AliACORDEAlign.cxx:70
 AliACORDEAlign.cxx:71
 AliACORDEAlign.cxx:72
 AliACORDEAlign.cxx:73
 AliACORDEAlign.cxx:74
 AliACORDEAlign.cxx:75
 AliACORDEAlign.cxx:76
 AliACORDEAlign.cxx:77
 AliACORDEAlign.cxx:78
 AliACORDEAlign.cxx:79
 AliACORDEAlign.cxx:80
 AliACORDEAlign.cxx:81
 AliACORDEAlign.cxx:82
 AliACORDEAlign.cxx:83
 AliACORDEAlign.cxx:84
 AliACORDEAlign.cxx:85
 AliACORDEAlign.cxx:86
 AliACORDEAlign.cxx:87
 AliACORDEAlign.cxx:88
 AliACORDEAlign.cxx:89
 AliACORDEAlign.cxx:90
 AliACORDEAlign.cxx:91
 AliACORDEAlign.cxx:92
 AliACORDEAlign.cxx:93
 AliACORDEAlign.cxx:94
 AliACORDEAlign.cxx:95
 AliACORDEAlign.cxx:96
 AliACORDEAlign.cxx:97
 AliACORDEAlign.cxx:98
 AliACORDEAlign.cxx:99
 AliACORDEAlign.cxx:100
 AliACORDEAlign.cxx:101
 AliACORDEAlign.cxx:102
 AliACORDEAlign.cxx:103
 AliACORDEAlign.cxx:104
 AliACORDEAlign.cxx:105
 AliACORDEAlign.cxx:106
 AliACORDEAlign.cxx:107
 AliACORDEAlign.cxx:108
 AliACORDEAlign.cxx:109
 AliACORDEAlign.cxx:110
 AliACORDEAlign.cxx:111
 AliACORDEAlign.cxx:112
 AliACORDEAlign.cxx:113
 AliACORDEAlign.cxx:114
 AliACORDEAlign.cxx:115
 AliACORDEAlign.cxx:116
 AliACORDEAlign.cxx:117
 AliACORDEAlign.cxx:118
 AliACORDEAlign.cxx:119
 AliACORDEAlign.cxx:120
 AliACORDEAlign.cxx:121
 AliACORDEAlign.cxx:122
 AliACORDEAlign.cxx:123
 AliACORDEAlign.cxx:124
 AliACORDEAlign.cxx:125
 AliACORDEAlign.cxx:126
 AliACORDEAlign.cxx:127
 AliACORDEAlign.cxx:128
 AliACORDEAlign.cxx:129
 AliACORDEAlign.cxx:130
 AliACORDEAlign.cxx:131
 AliACORDEAlign.cxx:132
 AliACORDEAlign.cxx:133
 AliACORDEAlign.cxx:134
 AliACORDEAlign.cxx:135
 AliACORDEAlign.cxx:136
 AliACORDEAlign.cxx:137
 AliACORDEAlign.cxx:138
 AliACORDEAlign.cxx:139
 AliACORDEAlign.cxx:140
 AliACORDEAlign.cxx:141
 AliACORDEAlign.cxx:142
 AliACORDEAlign.cxx:143
 AliACORDEAlign.cxx:144
 AliACORDEAlign.cxx:145
 AliACORDEAlign.cxx:146
 AliACORDEAlign.cxx:147
 AliACORDEAlign.cxx:148
 AliACORDEAlign.cxx:149
 AliACORDEAlign.cxx:150
 AliACORDEAlign.cxx:151
 AliACORDEAlign.cxx:152
 AliACORDEAlign.cxx:153
 AliACORDEAlign.cxx:154
 AliACORDEAlign.cxx:155
 AliACORDEAlign.cxx:156
 AliACORDEAlign.cxx:157
 AliACORDEAlign.cxx:158
 AliACORDEAlign.cxx:159
 AliACORDEAlign.cxx:160
 AliACORDEAlign.cxx:161
 AliACORDEAlign.cxx:162
 AliACORDEAlign.cxx:163
 AliACORDEAlign.cxx:164
 AliACORDEAlign.cxx:165
 AliACORDEAlign.cxx:166
 AliACORDEAlign.cxx:167
 AliACORDEAlign.cxx:168
 AliACORDEAlign.cxx:169
 AliACORDEAlign.cxx:170
 AliACORDEAlign.cxx:171
 AliACORDEAlign.cxx:172
 AliACORDEAlign.cxx:173
 AliACORDEAlign.cxx:174
 AliACORDEAlign.cxx:175
 AliACORDEAlign.cxx:176
 AliACORDEAlign.cxx:177
 AliACORDEAlign.cxx:178
 AliACORDEAlign.cxx:179
 AliACORDEAlign.cxx:180
 AliACORDEAlign.cxx:181
 AliACORDEAlign.cxx:182
 AliACORDEAlign.cxx:183
 AliACORDEAlign.cxx:184
 AliACORDEAlign.cxx:185
 AliACORDEAlign.cxx:186
 AliACORDEAlign.cxx:187
 AliACORDEAlign.cxx:188
 AliACORDEAlign.cxx:189
 AliACORDEAlign.cxx:190
 AliACORDEAlign.cxx:191
 AliACORDEAlign.cxx:192
 AliACORDEAlign.cxx:193
 AliACORDEAlign.cxx:194
 AliACORDEAlign.cxx:195
 AliACORDEAlign.cxx:196
 AliACORDEAlign.cxx:197
 AliACORDEAlign.cxx:198
 AliACORDEAlign.cxx:199
 AliACORDEAlign.cxx:200
 AliACORDEAlign.cxx:201
 AliACORDEAlign.cxx:202
 AliACORDEAlign.cxx:203
 AliACORDEAlign.cxx:204
 AliACORDEAlign.cxx:205
 AliACORDEAlign.cxx:206
 AliACORDEAlign.cxx:207
 AliACORDEAlign.cxx:208
 AliACORDEAlign.cxx:209
 AliACORDEAlign.cxx:210
 AliACORDEAlign.cxx:211
 AliACORDEAlign.cxx:212
 AliACORDEAlign.cxx:213
 AliACORDEAlign.cxx:214
 AliACORDEAlign.cxx:215
 AliACORDEAlign.cxx:216
 AliACORDEAlign.cxx:217
 AliACORDEAlign.cxx:218
 AliACORDEAlign.cxx:219
 AliACORDEAlign.cxx:220
 AliACORDEAlign.cxx:221
 AliACORDEAlign.cxx:222
 AliACORDEAlign.cxx:223
 AliACORDEAlign.cxx:224
 AliACORDEAlign.cxx:225
 AliACORDEAlign.cxx:226
 AliACORDEAlign.cxx:227
 AliACORDEAlign.cxx:228
 AliACORDEAlign.cxx:229
 AliACORDEAlign.cxx:230
 AliACORDEAlign.cxx:231
 AliACORDEAlign.cxx:232
 AliACORDEAlign.cxx:233
 AliACORDEAlign.cxx:234
 AliACORDEAlign.cxx:235
 AliACORDEAlign.cxx:236
 AliACORDEAlign.cxx:237
 AliACORDEAlign.cxx:238
 AliACORDEAlign.cxx:239
 AliACORDEAlign.cxx:240
 AliACORDEAlign.cxx:241
 AliACORDEAlign.cxx:242
 AliACORDEAlign.cxx:243
 AliACORDEAlign.cxx:244
 AliACORDEAlign.cxx:245
 AliACORDEAlign.cxx:246
 AliACORDEAlign.cxx:247
 AliACORDEAlign.cxx:248
 AliACORDEAlign.cxx:249
 AliACORDEAlign.cxx:250
 AliACORDEAlign.cxx:251
 AliACORDEAlign.cxx:252
 AliACORDEAlign.cxx:253
 AliACORDEAlign.cxx:254
 AliACORDEAlign.cxx:255
 AliACORDEAlign.cxx:256
 AliACORDEAlign.cxx:257
 AliACORDEAlign.cxx:258
 AliACORDEAlign.cxx:259
 AliACORDEAlign.cxx:260
 AliACORDEAlign.cxx:261
 AliACORDEAlign.cxx:262
 AliACORDEAlign.cxx:263
 AliACORDEAlign.cxx:264
 AliACORDEAlign.cxx:265
 AliACORDEAlign.cxx:266
 AliACORDEAlign.cxx:267
 AliACORDEAlign.cxx:268
 AliACORDEAlign.cxx:269
 AliACORDEAlign.cxx:270
 AliACORDEAlign.cxx:271
 AliACORDEAlign.cxx:272
 AliACORDEAlign.cxx:273
 AliACORDEAlign.cxx:274
 AliACORDEAlign.cxx:275
 AliACORDEAlign.cxx:276
 AliACORDEAlign.cxx:277
 AliACORDEAlign.cxx:278
 AliACORDEAlign.cxx:279
 AliACORDEAlign.cxx:280
 AliACORDEAlign.cxx:281
 AliACORDEAlign.cxx:282
 AliACORDEAlign.cxx:283
 AliACORDEAlign.cxx:284
 AliACORDEAlign.cxx:285
 AliACORDEAlign.cxx:286
 AliACORDEAlign.cxx:287
 AliACORDEAlign.cxx:288
 AliACORDEAlign.cxx:289
 AliACORDEAlign.cxx:290
 AliACORDEAlign.cxx:291
 AliACORDEAlign.cxx:292
 AliACORDEAlign.cxx:293
 AliACORDEAlign.cxx:294
 AliACORDEAlign.cxx:295
 AliACORDEAlign.cxx:296
 AliACORDEAlign.cxx:297
 AliACORDEAlign.cxx:298
 AliACORDEAlign.cxx:299
 AliACORDEAlign.cxx:300
 AliACORDEAlign.cxx:301
 AliACORDEAlign.cxx:302
 AliACORDEAlign.cxx:303
 AliACORDEAlign.cxx:304
 AliACORDEAlign.cxx:305
 AliACORDEAlign.cxx:306
 AliACORDEAlign.cxx:307
 AliACORDEAlign.cxx:308
 AliACORDEAlign.cxx:309
 AliACORDEAlign.cxx:310
 AliACORDEAlign.cxx:311
 AliACORDEAlign.cxx:312
 AliACORDEAlign.cxx:313
 AliACORDEAlign.cxx:314
 AliACORDEAlign.cxx:315
 AliACORDEAlign.cxx:316
 AliACORDEAlign.cxx:317
 AliACORDEAlign.cxx:318
 AliACORDEAlign.cxx:319
 AliACORDEAlign.cxx:320
 AliACORDEAlign.cxx:321
 AliACORDEAlign.cxx:322
 AliACORDEAlign.cxx:323
 AliACORDEAlign.cxx:324
 AliACORDEAlign.cxx:325
 AliACORDEAlign.cxx:326
 AliACORDEAlign.cxx:327
 AliACORDEAlign.cxx:328
 AliACORDEAlign.cxx:329
 AliACORDEAlign.cxx:330
 AliACORDEAlign.cxx:331
 AliACORDEAlign.cxx:332
 AliACORDEAlign.cxx:333
 AliACORDEAlign.cxx:334
 AliACORDEAlign.cxx:335
 AliACORDEAlign.cxx:336
 AliACORDEAlign.cxx:337
 AliACORDEAlign.cxx:338
 AliACORDEAlign.cxx:339
 AliACORDEAlign.cxx:340
 AliACORDEAlign.cxx:341
 AliACORDEAlign.cxx:342
 AliACORDEAlign.cxx:343
 AliACORDEAlign.cxx:344
 AliACORDEAlign.cxx:345
 AliACORDEAlign.cxx:346
 AliACORDEAlign.cxx:347
 AliACORDEAlign.cxx:348
 AliACORDEAlign.cxx:349
 AliACORDEAlign.cxx:350
 AliACORDEAlign.cxx:351
 AliACORDEAlign.cxx:352
 AliACORDEAlign.cxx:353
 AliACORDEAlign.cxx:354
 AliACORDEAlign.cxx:355
 AliACORDEAlign.cxx:356
 AliACORDEAlign.cxx:357
 AliACORDEAlign.cxx:358
 AliACORDEAlign.cxx:359
 AliACORDEAlign.cxx:360
 AliACORDEAlign.cxx:361
 AliACORDEAlign.cxx:362
 AliACORDEAlign.cxx:363
 AliACORDEAlign.cxx:364
 AliACORDEAlign.cxx:365
 AliACORDEAlign.cxx:366
 AliACORDEAlign.cxx:367
 AliACORDEAlign.cxx:368
 AliACORDEAlign.cxx:369
 AliACORDEAlign.cxx:370
 AliACORDEAlign.cxx:371
 AliACORDEAlign.cxx:372
 AliACORDEAlign.cxx:373
 AliACORDEAlign.cxx:374
 AliACORDEAlign.cxx:375
 AliACORDEAlign.cxx:376
 AliACORDEAlign.cxx:377
 AliACORDEAlign.cxx:378
 AliACORDEAlign.cxx:379
 AliACORDEAlign.cxx:380
 AliACORDEAlign.cxx:381
 AliACORDEAlign.cxx:382
 AliACORDEAlign.cxx:383
 AliACORDEAlign.cxx:384
 AliACORDEAlign.cxx:385
 AliACORDEAlign.cxx:386
 AliACORDEAlign.cxx:387
 AliACORDEAlign.cxx:388
 AliACORDEAlign.cxx:389
 AliACORDEAlign.cxx:390
 AliACORDEAlign.cxx:391
 AliACORDEAlign.cxx:392
 AliACORDEAlign.cxx:393
 AliACORDEAlign.cxx:394
 AliACORDEAlign.cxx:395
 AliACORDEAlign.cxx:396
 AliACORDEAlign.cxx:397
 AliACORDEAlign.cxx:398
 AliACORDEAlign.cxx:399
 AliACORDEAlign.cxx:400
 AliACORDEAlign.cxx:401
 AliACORDEAlign.cxx:402
 AliACORDEAlign.cxx:403
 AliACORDEAlign.cxx:404
 AliACORDEAlign.cxx:405
 AliACORDEAlign.cxx:406
 AliACORDEAlign.cxx:407
 AliACORDEAlign.cxx:408
 AliACORDEAlign.cxx:409
 AliACORDEAlign.cxx:410
 AliACORDEAlign.cxx:411
 AliACORDEAlign.cxx:412
 AliACORDEAlign.cxx:413
 AliACORDEAlign.cxx:414
 AliACORDEAlign.cxx:415
 AliACORDEAlign.cxx:416
 AliACORDEAlign.cxx:417
 AliACORDEAlign.cxx:418
 AliACORDEAlign.cxx:419
 AliACORDEAlign.cxx:420
 AliACORDEAlign.cxx:421
 AliACORDEAlign.cxx:422
 AliACORDEAlign.cxx:423
 AliACORDEAlign.cxx:424
 AliACORDEAlign.cxx:425
 AliACORDEAlign.cxx:426
 AliACORDEAlign.cxx:427
 AliACORDEAlign.cxx:428
 AliACORDEAlign.cxx:429
 AliACORDEAlign.cxx:430
 AliACORDEAlign.cxx:431
 AliACORDEAlign.cxx:432
 AliACORDEAlign.cxx:433
 AliACORDEAlign.cxx:434
 AliACORDEAlign.cxx:435
 AliACORDEAlign.cxx:436
 AliACORDEAlign.cxx:437
 AliACORDEAlign.cxx:438
 AliACORDEAlign.cxx:439
 AliACORDEAlign.cxx:440
 AliACORDEAlign.cxx:441
 AliACORDEAlign.cxx:442
 AliACORDEAlign.cxx:443
 AliACORDEAlign.cxx:444
 AliACORDEAlign.cxx:445
 AliACORDEAlign.cxx:446
 AliACORDEAlign.cxx:447
 AliACORDEAlign.cxx:448
 AliACORDEAlign.cxx:449
 AliACORDEAlign.cxx:450
 AliACORDEAlign.cxx:451
 AliACORDEAlign.cxx:452
 AliACORDEAlign.cxx:453
 AliACORDEAlign.cxx:454
 AliACORDEAlign.cxx:455
 AliACORDEAlign.cxx:456
 AliACORDEAlign.cxx:457
 AliACORDEAlign.cxx:458
 AliACORDEAlign.cxx:459
 AliACORDEAlign.cxx:460
 AliACORDEAlign.cxx:461
 AliACORDEAlign.cxx:462
 AliACORDEAlign.cxx:463
 AliACORDEAlign.cxx:464
 AliACORDEAlign.cxx:465
 AliACORDEAlign.cxx:466
 AliACORDEAlign.cxx:467
 AliACORDEAlign.cxx:468
 AliACORDEAlign.cxx:469
 AliACORDEAlign.cxx:470
 AliACORDEAlign.cxx:471
 AliACORDEAlign.cxx:472
 AliACORDEAlign.cxx:473
 AliACORDEAlign.cxx:474
 AliACORDEAlign.cxx:475
 AliACORDEAlign.cxx:476
 AliACORDEAlign.cxx:477
 AliACORDEAlign.cxx:478
 AliACORDEAlign.cxx:479