ROOT logo
/**************************************************************************
 * Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

/* $Id$ */

//-----------------------------------------------------------------------------
/// \class AliITSAlignMille
/// Alignment class for the ALICE ITS detector
///
/// ITS specific alignment class which interface to AliMillepede.   
/// For each track ProcessTrack calculates the local and global derivatives
/// at each hit and fill the corresponding local equations. Provide methods for
/// fixing or constraining detection elements for best results. 
///
/// \author M. Lunardon (thanks to J. Castillo)
//-----------------------------------------------------------------------------

#include <TF1.h>
#include <TFile.h>
#include <TClonesArray.h>
#include <TGraph.h>
#include <TMath.h>
#include <TGraphErrors.h>

#include "AliITSAlignMilleModule.h"
#include "AliITSAlignMille.h"
#include "AliITSAlignMilleData.h"
#include "AliITSgeomTGeo.h"
#include "AliGeomManager.h"
#include "AliMillepede.h"
#include "AliTrackPointArray.h"
#include "AliAlignObjParams.h"
#include "AliLog.h"
#include <TSystem.h>
#include "AliTrackFitterRieman.h"

/// \cond CLASSIMP
ClassImp(AliITSAlignMille)
/// \endcond
  
Int_t AliITSAlignMille::fgNDetElem = ITSMILLENDETELEM;
Int_t AliITSAlignMille::fgNParCh = ITSMILLENPARCH;

AliITSAlignMille::AliITSAlignMille(const Char_t *configFilename, Bool_t initmille) 
  : TObject(),
    fMillepede(0),
    fStartFac(16.), 
    fResCutInitial(100.), 
    fResCut(100.),
    fNGlobal(ITSMILLENDETELEM*ITSMILLENPARCH),
    fNLocal(4),
    fNStdDev(ITSMILLENSTDEV),
    fIsMilleInit(kFALSE),
    fParSigTranslations(0.0100),
    fParSigRotations(0.1),
    fTrack(NULL),
    fCluster(),
    fGlobalDerivatives(NULL),
    fSigmaXfactor(1.0),
    fSigmaZfactor(1.0),
    fTempAlignObj(NULL),
    fDerivativeXLoc(0),
    fDerivativeZLoc(0),
    fMinNPtsPerTrack(3),
    fInitTrackParamsMeth(1),
    fProcessedPoints(NULL),
    fTotBadLocEqPoints(0),
    fRieman(NULL),
    fRequirePoints(kFALSE),
    fTempExcludedModule(-1),
    fGeometryFileName("geometry.root"),
    fPreAlignmentFileName(""),
    fGeoManager(0),
    fCurrentModuleIndex(0),
    fCurrentModuleInternalIndex(0),
    fCurrentSensVolIndex(0),
    fNModules(0),
    fUseLocalShifts(kTRUE),
    fUseSuperModules(kFALSE),
    fUsePreAlignment(kFALSE),
    fUseSortedTracks(kTRUE),
    fBOn(kFALSE),
    fBField(0.0),
    fNSuperModules(0),
    fCurrentModuleHMatrix(NULL),
    fIsConfigured(kFALSE),
    fBug(0)
{
  /// main constructor that takes input from configuration file
  
  fMillepede = new AliMillepede();
  fGlobalDerivatives = new Double_t[fNGlobal];

  for (Int_t i=0; i<ITSMILLENDETELEM*2; i++) {
    fPreAlignQF[i]=-1;
    fSensVolSigmaXfactor[i]=1.0;
    fSensVolSigmaZfactor[i]=1.0;
  }

  for (Int_t i=0; i<6; i++) {
    fNReqLayUp[i]=0;
    fNReqLayDown[i]=0;
    fNReqLay[i]=0;
  }
  for (Int_t i=0; i<3; i++) {
    fNReqDetUp[i]=0;
    fNReqDetDown[i]=0;
    fNReqDet[i]=0;
  }

  Int_t lc=LoadConfig(configFilename);
  if (lc) {
    AliInfo(Form("Error %d loading configuration from %s",lc,configFilename));
  }
  else {    
    fIsConfigured=kTRUE;
    if (initmille && fNGlobal<20000) {
      AliInfo(Form("Initializing Millepede with %d gpar, %d lpar and %d stddev ...",fNGlobal, fNLocal, fNStdDev));
      Init(fNGlobal, fNLocal, fNStdDev);      
      ResetLocalEquation();    
      AliInfo("Parameters initialized to zero");
    }
    else {
      AliInfo("Millepede has not been initialized ... ");
    }
  }
  
  if (fNModules) {
    fProcessedPoints=new Int_t[fNModules];
    for (Int_t ipp=0; ipp<fNModules; ipp++) fProcessedPoints[ipp]=0;
  }
}

AliITSAlignMille::~AliITSAlignMille() {
  /// Destructor
  if (fMillepede) delete fMillepede;
  delete [] fGlobalDerivatives;
  for (int i=0; i<fNModules; i++) delete fMilleModule[i];
  for (int i=0; i<fNSuperModules; i++) delete fSuperModule[i];
  if (fNModules) delete [] fProcessedPoints;
  if (fRieman) delete fRieman;
}

///////////////////////////////////////////////////////////////////////
Int_t AliITSAlignMille::LoadConfig(const Char_t *cfile) {
  /// return 0 if success
  ///        1 if error in module index or voluid
  
  FILE *pfc=fopen(cfile,"r");
  if (!pfc) return -1;
  
  Char_t st[200],st2[200];
  Char_t tmp[100];
  Int_t idx,itx,ity,itz,ith,ips,iph;
  Float_t f1,f2;
  UShort_t voluid;
  Int_t nmod=0;

  while (fgets(st,200,pfc)) {

    // skip comments
    for (int i=0; i<int(strlen(st)); i++) {
      if (st[i]=='#') st[i]=0;
    }

    if (strstr(st,"GEOMETRY_FILE")) {
      memset(tmp,0,100*sizeof(char));
      memset(st2,0,200*sizeof(char));
      sscanf(st,"%99s %199s",tmp,st2);
      if (gSystem->AccessPathName(st2)) {
	AliInfo("*** WARNING! *** geometry file not found! ");
	fclose(pfc);
	return -1;
      }  
      fGeometryFileName=st2;
      InitGeometry();
    }

    if (strstr(st,"PREALIGNMENT_FILE")) {
      memset(tmp,0,100*sizeof(char));
      memset(st2,0,200*sizeof(char));
      sscanf(st,"%99s %199s",tmp,st2);
      if (gSystem->AccessPathName(st2)) {
	AliInfo("*** WARNING! *** prealignment file not found! ");
	fclose(pfc);
	return -1;
      }  
      fPreAlignmentFileName=st2;
      itx=ApplyToGeometry();
      if (itx) {
	AliInfo(Form("*** WARNING! *** error %d reading prealignment file! ",itx));
	fclose(pfc);
	return -6;
      }
    }

    if (strstr(st,"SUPERMODULE_FILE")) {
      memset(tmp,0,100*sizeof(char));
      memset(st2,0,200*sizeof(char));
      sscanf(st,"%99s %199s",tmp,st2);
      if (gSystem->AccessPathName(st2)) {
	AliInfo("*** WARNING! *** supermodule file not found! ");
	fclose(pfc);
	return -1;
      }  
      if (LoadSuperModuleFile(st2)) {fclose(pfc); return -1;}
    }

    if (strstr(st,"SET_B_FIELD")) {
      memset(tmp,0,100*sizeof(char));
      sscanf(st,"%99s %f",tmp,&f1);
      if (f1>0) {
	fBField = f1;
	fBOn = kTRUE;
	fNLocal = 5; // helices
	fRieman = new AliTrackFitterRieman();
      }  
      else {
	fBField = 0.0;
	fBOn = kFALSE;
	fNLocal = 4;
      }
    }

    if (strstr(st,"SET_PARSIG_TRA")) {
      memset(tmp,0,100*sizeof(char));
      sscanf(st,"%99s %f",tmp,&f1);
      fParSigTranslations=f1;
    }

    if (strstr(st,"SET_PARSIG_ROT")) {
      memset(tmp,0,100*sizeof(char));
      sscanf(st,"%99s %f",tmp,&f1);
      fParSigRotations=f1;
    }

    if (strstr(st,"SET_NSTDDEV")) {
      memset(tmp,0,100*sizeof(char));
      sscanf(st,"%99s %d",tmp,&idx);
      fNStdDev=idx;
    }

    if (strstr(st,"SET_RESCUT_INIT")) {
      memset(tmp,0,100*sizeof(char));
      sscanf(st,"%99s %f",tmp,&f1);
      fResCutInitial=f1;
    }

    if (strstr(st,"SET_RESCUT_OTHER")) {
      memset(tmp,0,100*sizeof(char));
      sscanf(st,"%99s %f",tmp,&f1);
      fResCut=f1;
    }

    if (strstr(st,"SET_LOCALSIGMAFACTOR")) {
      memset(tmp,0,100*sizeof(char));
      sscanf(st,"%99s %f %f",tmp,&f1,&f2);
      if (f1>0 && f2>0) {
	fSigmaXfactor=f1;
	fSigmaZfactor=f2;
      }
    }

    if (strstr(st,"SET_STARTFAC")) {
      memset(tmp,0,100*sizeof(char));
      sscanf(st,"%99s %f",tmp,&f1);
      fStartFac=f1;
    }

    if (strstr(st,"REQUIRE_POINT")) {
      // syntax:   REQUIRE_POINT where ndet updw nreqpts
      //    where = LAYER or DETECTOR
      //    ndet = detector number: 1-6 for LAYER and 1-3 for DETECTOR (SPD=1, SDD=2, SSD=3)
      //    updw = 1 for Y>0, -1 for Y<0, 0 if not specified
      //    nreqpts = minimum number of points of that type
      memset(tmp,0,100*sizeof(char));
      memset(st2,0,200*sizeof(char));
      sscanf(st,"%99s %199s %d %d %d",tmp,st2,&itx,&ity,&itz);
      itx--;
      if (strstr(st2,"LAYER")) {
	if (itx<0 || itx>5) {fclose(pfc); return -7;}
	if (ity>0) fNReqLayUp[itx]=itz;
	else if (ity<0) fNReqLayDown[itx]=itz;
	else fNReqLay[itx]=itz;
	fRequirePoints=kTRUE;
      }
      else if (strstr(st2,"DETECTOR")) { // DETECTOR
	if (itx<0 || itx>2) {fclose(pfc); return -7;}
	if (ity>0) fNReqDetUp[itx]=itz;
	else if (ity<0) fNReqDetDown[itx]=itz;
	else fNReqDet[itx]=itz;	
	fRequirePoints=kTRUE;
      }
    }
    

    if (strstr(st,"SET_LOCAL_SHIFTS")) { // only enabled mode...
      fUseLocalShifts = kTRUE;
    }

    if (strstr(st,"MODULE_INDEX")) { // works only for sensitive modules
      f1=0; f2=0;
      memset(tmp,0,100*sizeof(char));
      sscanf(st,"%99s %d %d %d %d %d %d %d %f %f",tmp,&idx,&itx,&ity,&itz,&iph,&ith,&ips,&f1,&f2);
      if (idx<0 || idx>2197) {fclose(pfc); return 1;} // bad index
      voluid=GetModuleVolumeID(idx);
      if (!voluid || voluid>14300) {fclose(pfc); return 1;} // bad index
      fModuleIndex[nmod]=idx;
      fModuleVolumeID[nmod]=voluid;
      fFreeParam[nmod][0]=itx;
      fFreeParam[nmod][1]=ity;
      fFreeParam[nmod][2]=itz;
      fFreeParam[nmod][3]=iph;
      fFreeParam[nmod][4]=ith;
      fFreeParam[nmod][5]=ips;
      fMilleModule[nmod] = new AliITSAlignMilleModule(voluid);
      if (f1>0) fSensVolSigmaXfactor[idx]=f1;
      if (f2>0) fSensVolSigmaZfactor[idx]=f2;
      nmod++;
    }
   
    if (strstr(st,"MODULE_VOLUID")) {
      f1=0; f2=0;
      memset(tmp,0,100*sizeof(char));
      sscanf(st,"%99s %d %d %d %d %d %d %d %f %f",tmp,&idx,&itx,&ity,&itz,&iph,&ith,&ips,&f1,&f2);
      voluid=UShort_t(idx);
      if (voluid>14335 && fUseSuperModules) { // custom supermodule
	int ism=-1;
	for (int j=0; j<fNSuperModules; j++) {
	  if (voluid==fSuperModule[j]->GetVolumeID()) ism=j;
	}
	if (ism<0) {fclose(pfc); return -1;} // bad volid
	fModuleIndex[nmod]=fSuperModule[ism]->GetIndex();
	fModuleVolumeID[nmod]=voluid;
	fFreeParam[nmod][0]=itx;
	fFreeParam[nmod][1]=ity;
	fFreeParam[nmod][2]=itz;
	fFreeParam[nmod][3]=iph;
	fFreeParam[nmod][4]=ith;
	fFreeParam[nmod][5]=ips;
	fMilleModule[nmod] = new AliITSAlignMilleModule(*fSuperModule[ism]);
	if (f1>0) {
	  for (int kk=0; kk<fMilleModule[nmod]->GetNSensitiveVolumes(); kk++) {
	    idx=AliITSAlignMilleModule::GetIndexFromVolumeID(fMilleModule[nmod]->GetSensitiveVolumeVolumeID()[kk]);
	    if (idx>=0) fSensVolSigmaXfactor[idx]=f1;
	  }
	}
	if (f2>0) {
	  for (int kk=0; kk<fMilleModule[nmod]->GetNSensitiveVolumes(); kk++) {
	    idx=AliITSAlignMilleModule::GetIndexFromVolumeID(fMilleModule[nmod]->GetSensitiveVolumeVolumeID()[kk]);
	    if (idx>=0) fSensVolSigmaZfactor[idx]=f2;
	  }
	}	nmod++;
      }
      else { // sensitive volume
	idx=GetModuleIndex(voluid);
	if (idx<0 || idx>2197) {fclose(pfc); return 1;} // bad index
	fModuleIndex[nmod]=idx;
	fModuleVolumeID[nmod]=voluid;
	fFreeParam[nmod][0]=itx;
	fFreeParam[nmod][1]=ity;
	fFreeParam[nmod][2]=itz;
	fFreeParam[nmod][3]=iph;
	fFreeParam[nmod][4]=ith;
	fFreeParam[nmod][5]=ips;
	fMilleModule[nmod] = new AliITSAlignMilleModule(voluid);
	if (f1>0) fSensVolSigmaXfactor[idx]=f1;
	if (f2>0) fSensVolSigmaZfactor[idx]=f2;
	nmod++;
      }
    }
    //----------

  } // end while

  fNModules = nmod;
  fNGlobal = fNModules*fgNParCh;
 
  fclose(pfc);
  return 0;
}

void AliITSAlignMille::SetRequiredPoint(Char_t* where, Int_t ndet, Int_t updw, Int_t nreqpts) 
{
  // set minimum number of points in specific detector or layer
  // where = LAYER or DETECTOR
  // ndet = detector number: 1-6 for LAYER and 1-3 for DETECTOR (SPD=1, SDD=2, SSD=3)
  // updw = 1 for Y>0, -1 for Y<0, 0 if not specified
  // nreqpts = minimum number of points of that type
  ndet--;
  if (strstr(where,"LAYER")) {
    if (ndet<0 || ndet>5) return;
    if (updw>0) fNReqLayUp[ndet]=nreqpts;
    else if (updw<0) fNReqLayDown[ndet]=nreqpts;
    else fNReqLay[ndet]=nreqpts;
    fRequirePoints=kTRUE;
  }
  else if (strstr(where,"DETECTOR")) {
    if (ndet<0 || ndet>2) return;
    if (updw>0) fNReqDetUp[ndet]=nreqpts;
    else if (updw<0) fNReqDetDown[ndet]=nreqpts;
    else fNReqDet[ndet]=nreqpts;	
    fRequirePoints=kTRUE;
  }
}

Int_t AliITSAlignMille::GetModuleIndex(const Char_t *symname) {
  /// index from symname
  if (!symname) return -1;
  for (Int_t i=0; i<2198; i++) {
    if (!strcmp(symname,AliITSgeomTGeo::GetSymName(i))) return i;
  }
  return -1;
}

Int_t AliITSAlignMille::GetModuleIndex(UShort_t voluid) {
  /// index from volume ID
  AliGeomManager::ELayerID lay = AliGeomManager::VolUIDToLayer(voluid);
  if (lay<1|| lay>6) return -1;
  Int_t idx=Int_t(voluid)-2048*lay;
  if (idx>=AliGeomManager::LayerSize(lay)) return -1;
  for (Int_t ilay=1; ilay<lay; ilay++) 
    idx += AliGeomManager::LayerSize(ilay);
  return idx;
}

UShort_t AliITSAlignMille::GetModuleVolumeID(const Char_t *symname) {
  /// volume ID from symname
  /// works for sensitive volumes only
  if (!symname) return 0;

  for (UShort_t voluid=2000; voluid<13300; voluid++) {
    Int_t modId;
    AliGeomManager::ELayerID layerId = AliGeomManager::VolUIDToLayer(voluid,modId);
    if (layerId>0 && layerId<7 && modId>=0 && modId<AliGeomManager::LayerSize(layerId)) {
      if (!strcmp(symname,AliGeomManager::SymName(layerId,modId))) return voluid;
    }
  }

  return 0;
}

UShort_t AliITSAlignMille::GetModuleVolumeID(Int_t index) {
  /// volume ID from index
  if (index<0) return 0;
  if (index<2198)
    return GetModuleVolumeID(AliITSgeomTGeo::GetSymName(index));
  else {
    for (int i=0; i<fNSuperModules; i++) {
      if (fSuperModule[i]->GetIndex()==index) return fSuperModule[i]->GetVolumeID();
    }
  }
  return 0;
}

void AliITSAlignMille::InitGeometry() {
  /// initialize geometry
  AliGeomManager::LoadGeometry(fGeometryFileName.Data());
  fGeoManager = AliGeomManager::GetGeometry();
  if (!fGeoManager) {
    AliInfo("Couldn't initialize geometry");
    return;
  }
  // temporary align object, just use the rotation...
  fTempAlignObj=new AliAlignObjParams;
}

void AliITSAlignMille::Init(Int_t nGlobal,  /* number of global paramers */
			   Int_t nLocal,   /* number of local parameters */
			   Int_t nStdDev   /* std dev cut */ )
{
  /// Initialization of AliMillepede. Fix parameters, define constraints ...
  fMillepede->InitMille(nGlobal,nLocal,nStdDev,fResCut,fResCutInitial);
  fIsMilleInit = kTRUE;
  
  /// Fix non free parameters
  for (Int_t i=0; i<fNModules; i++) {
    for (Int_t j=0; j<ITSMILLENPARCH; j++) {
      if (!fFreeParam[i][j]) FixParameter(i*ITSMILLENPARCH+j,0.0);
      else {
	// pepopepo: da verificare il settaggio delle sigma, ma forse va bene...
	Double_t parsig=0;
	if (j<3) parsig=fParSigTranslations; // translations (0.0100 cm)
	else parsig=fParSigRotations; // rotations (1/10 deg)
	FixParameter(i*ITSMILLENPARCH+j,parsig);
      }
    }    
  }
  
  
//   // Set iterations
  if (fStartFac>1) fMillepede->SetIterations(fStartFac);          
}


void AliITSAlignMille::AddConstraint(Double_t *par, Double_t value) {
  /// Constrain equation defined by par to value
  if (!fIsMilleInit) {
    AliInfo("Millepede has not been initialized!");
    return;
  }
  fMillepede->SetGlobalConstraint(par, value);
  AliInfo("Adding constraint");
}

void AliITSAlignMille::InitGlobalParameters(Double_t *par) {
  /// Initialize global parameters with par array
  if (!fIsMilleInit) {
    AliInfo("Millepede has not been initialized!");
    return;
  }
  fMillepede->SetGlobalParameters(par);
  AliInfo("Init Global Parameters");
}
 
void AliITSAlignMille::FixParameter(Int_t iPar, Double_t value) {
  /// Parameter iPar is encourage to vary in [-value;value]. 
  /// If value == 0, parameter is fixed
  if (!fIsMilleInit) {
    AliInfo("Millepede has not been initialized!");
    return;
  }
  fMillepede->SetParSigma(iPar, value);
  if (value==0) AliInfo(Form("Parameter %i Fixed", iPar));
}

void AliITSAlignMille::ResetLocalEquation()
{
  /// Reset the derivative vectors
  for(int i=0; i<fNLocal; i++) {
    fLocalDerivatives[i] = 0.0;
  }
  for(int i=0; i<fNGlobal; i++) {
    fGlobalDerivatives[i] = 0.0;
  }
}

// newpep
Int_t AliITSAlignMille::ApplyToGeometry() {
  /// apply starting realignment to ideal geometry
  if(!AliGeomManager::GetGeometry()) return -1;

  TFile *pref = new TFile(fPreAlignmentFileName.Data());
  if (!pref->IsOpen()) return -2;
  TClonesArray *prea=(TClonesArray*)pref->Get("ITSAlignObjs");
  if (!prea) return -3;  
  Int_t nprea=prea->GetEntriesFast();
  AliInfo(Form("Array of input misalignments with %d entries",nprea));

  AliGeomManager::ApplyAlignObjsToGeom(*prea); // apply all levels of objs

  // set prealignment factor if defined...
  for (int ix=0; ix<nprea; ix++) {
    AliAlignObjParams *preo=(AliAlignObjParams*) prea->UncheckedAt(ix);
    Int_t index=AliITSAlignMilleModule::GetIndexFromVolumeID(preo->GetVolUID());
    if (index>=0) {
      fPreAlignQF[index] = (int) preo->GetUniqueID();
      //printf("index=%d   QF=%d\n",index,preo->GetUniqueID());
    }
    //if (!preo->ApplyToGeometry()) return -4;
  }
  pref->Close();
  delete pref;

  fUsePreAlignment = kTRUE;
  return 0;
}
// endnewpep

Int_t AliITSAlignMille::GetPreAlignmentQualityFactor(Int_t index) const {
  /// works for sensitive volumes
  if (!fUsePreAlignment || index<0 || index>2197) return -1;
  return fPreAlignQF[index];
}

AliTrackPointArray *AliITSAlignMille::PrepareTrack(const AliTrackPointArray *atp) {
  /// create a new AliTrackPointArray keeping only defined modules
  /// move points according to a given prealignment, if any
  /// sort alitrackpoints w.r.t. global Y direction, if selected

  AliTrackPointArray *atps=NULL;
  Int_t idx[20];
  Int_t npts=atp->GetNPoints();

  /// checks if AliTrackPoints belong to defined modules
  Int_t ngoodpts=0;
  Int_t intidx[20];
  
  for (int j=0; j<npts; j++) {
    intidx[j] = IsContained(atp->GetVolumeID()[j]);
    if (intidx[j]>=0) ngoodpts++;
  }
  AliDebug(3,Form("Number of points in defined modules: %d",ngoodpts));

  // reject track if not enough points are left
  if (ngoodpts<fMinNPtsPerTrack) {
    AliInfo("Track with not enough points!");
    return NULL;
  }

  AliTrackPoint p;
  // check points in specific places
  if (fRequirePoints) {
    Int_t nlayup[6],nlaydown[6],nlay[6];
    Int_t ndetup[3],ndetdown[3],ndet[3];
    for (Int_t j=0; j<6; j++) {nlayup[j]=0; nlaydown[j]=0; nlay[j]=0;}
    for (Int_t j=0; j<3; j++) {ndetup[j]=0; ndetdown[j]=0; ndet[j]=0;}
    
    for (int i=0; i<npts; i++) {
      // skip not defined points
      if (intidx[i]<0) continue;
      Float_t xx=atp->GetX()[i];
      Float_t yy=atp->GetY()[i];
      Float_t r=TMath::Sqrt(xx*xx + yy*yy);
      int lay=-1;
      if (r<5) lay=0;
      else if (r>5 && r<10) lay=1;
      else if (r>10 && r<18) lay=2;
      else if (r>18 && r<30) lay=3;
      else if (r>30 && r<40) lay=4;
      else if (r>40) lay=5;
      if (lay<0) continue;
      int det=lay/2;
      //printf("Point %d - x=%f  y=%f  R=%f  lay=%d  det=%d\n",i,xx,yy,r,lay,det);

      if (yy>=0.0) { // UP point
	nlayup[lay]++;
	nlay[lay]++;
	ndetup[det]++;
	ndet[det]++;
      }
      else {
	nlaydown[lay]++;
	nlay[lay]++;
	ndetdown[det]++;
	ndet[det]++;
      }
    }
    
    // checks minimum values
    Bool_t isok=kTRUE;
    for (Int_t j=0; j<6; j++) {
      if (nlayup[j]<fNReqLayUp[j]) isok=kFALSE; 
      if (nlaydown[j]<fNReqLayDown[j]) isok=kFALSE; 
      if (nlay[j]<fNReqLay[j]) isok=kFALSE; 
    }
    for (Int_t j=0; j<3; j++) {
      if (ndetup[j]<fNReqDetUp[j]) isok=kFALSE; 
      if (ndetdown[j]<fNReqDetDown[j]) isok=kFALSE; 
      if (ndet[j]<fNReqDet[j]) isok=kFALSE; 
    }
    if (!isok) {
      AliDebug(2,Form("Track does not meet all location point requirements!"));
      return NULL;
    }
  }
  
  // build a new track with (sorted) (prealigned) good points
  atps=new AliTrackPointArray(ngoodpts);

  for (int i=0; i<npts; i++) idx[i]=i;
  // sort track if required
  if (fUseSortedTracks) TMath::Sort(npts,atp->GetY(),idx); // sort descending...

  Int_t npto=0;
  for (int i=0; i<npts; i++) {
    // skip not defined points
    if (intidx[idx[i]]<0) continue;
    atp->GetPoint(p,idx[i]);

    // prealign point if required
    // get IDEAL matrix
    TGeoHMatrix *svOrigMatrix = fMilleModule[intidx[idx[i]]]->GetSensitiveVolumeOrigGlobalMatrix(p.GetVolumeID());
    // get back real local coordinates: use OriginalGlobalMatrix because AliTrackPoints were written
    // with idel geometry  
    Double_t pg[3],pl[3];
    pg[0]=p.GetX();
    pg[1]=p.GetY();
    pg[2]=p.GetZ();
    AliDebug(3,Form("Global coordinates of measured point : X=%f  Y=%f  Z=%f \n",pg[0],pg[1],pg[2]));
    svOrigMatrix->MasterToLocal(pg,pl);

    AliDebug(3,Form("Local coordinates of measured point : X=%f  Y=%f  Z=%f \n",pl[0],pl[1],pl[2]));

    // update covariance matrix
    TGeoHMatrix hcov;
    Double_t hcovel[9];
    hcovel[0]=double(p.GetCov()[0]);
    hcovel[1]=double(p.GetCov()[1]);
    hcovel[2]=double(p.GetCov()[2]);
    hcovel[3]=double(p.GetCov()[1]);
    hcovel[4]=double(p.GetCov()[3]);
    hcovel[5]=double(p.GetCov()[4]);
    hcovel[6]=double(p.GetCov()[2]);
    hcovel[7]=double(p.GetCov()[4]);
    hcovel[8]=double(p.GetCov()[5]);
    hcov.SetRotation(hcovel);
    // now rotate in local system
    hcov.Multiply(svOrigMatrix);
    hcov.MultiplyLeft(&svOrigMatrix->Inverse());
    // now hcov is LOCAL COVARIANCE MATRIX


    // pepopepo
    if (fBug==1) {
      // correzione bug LAYER 5  SSD temporanea..
      int ssdidx=AliITSAlignMilleModule::GetIndexFromVolumeID(p.GetVolumeID());
      if (ssdidx>=500 && ssdidx<1248) {
	int ladder=(ssdidx-500)%22;
      if (ladder==18) p.SetVolumeID(AliITSAlignMilleModule::GetVolumeIDFromIndex(ssdidx+1));
      if (ladder==19) p.SetVolumeID(AliITSAlignMilleModule::GetVolumeIDFromIndex(ssdidx-1));
      }
    }

    /// get (evenctually prealigned) matrix of sens. vol.
    TGeoHMatrix *svMatrix = fMilleModule[intidx[idx[i]]]->GetSensitiveVolumeMatrix(p.GetVolumeID());
    // modify global coordinates according with pre-aligment
    svMatrix->LocalToMaster(pl,pg);
    // now rotate in local system
    hcov.Multiply(&svMatrix->Inverse());
    hcov.MultiplyLeft(svMatrix);
    // hcov is back in GLOBAL RF
    Float_t pcov[6];
    pcov[0]=hcov.GetRotationMatrix()[0];
    pcov[1]=hcov.GetRotationMatrix()[1];
    pcov[2]=hcov.GetRotationMatrix()[2];
    pcov[3]=hcov.GetRotationMatrix()[4];
    pcov[4]=hcov.GetRotationMatrix()[5];
    pcov[5]=hcov.GetRotationMatrix()[8];

    p.SetXYZ(pg[0],pg[1],pg[2],pcov);
    AliDebug(3,Form("New global coordinates of measured point : X=%f  Y=%f  Z=%f \n",pg[0],pg[1],pg[2]));
    atps->AddPoint(npto,&p);
    AliDebug(2,Form("Adding point[%d] = ( %f , %f , %f )     volid = %d",npto,atps->GetX()[npto],atps->GetY()[npto],atps->GetZ()[npto],atps->GetVolumeID()[npto] ));

    npto++;
  }

  return atps;
}



AliTrackPointArray *AliITSAlignMille::SortTrack(const AliTrackPointArray *atp) {
  /// sort alitrackpoints w.r.t. global Y direction
  AliTrackPointArray *atps=NULL;
  Int_t idx[20];
  Int_t npts=atp->GetNPoints();
  AliTrackPoint p;
  atps=new AliTrackPointArray(npts);

  TMath::Sort(npts,atp->GetY(),idx);

  for (int i=0; i<npts; i++) {
    atp->GetPoint(p,idx[i]);
    atps->AddPoint(i,&p);
    AliDebug(2,Form("Point[%d] = ( %f , %f , %f )     volid = %d",i,atps->GetX()[i],atps->GetY()[i],atps->GetZ()[i],atps->GetVolumeID()[i] ));
  }
  return atps;
}


Int_t AliITSAlignMille::InitModuleParams() {
  /// initialize geometry parameters for a given detector
  /// for current cluster (fCluster)
  /// fGlobalInitParam[] is set as:
  ///    [tx,ty,tz,psi,theta,phi]
  ///
  /// return 0 if success

  if (!fGeoManager) {
    AliInfo("ITS geometry not initialized!");
    return -1;
  }

  // now 'voluid' is the volumeID of a SENSITIVE VOLUME (coming from a cluster)

  // set the internal index (index in module list)
  UShort_t voluid=fCluster.GetVolumeID();
  Int_t k=fNModules-1;
  while (k>=0 && !(fMilleModule[k]->IsIn(voluid)) ) k--; 
  if (k<0) return -3;    
  fCurrentModuleInternalIndex=k; // the internal index of the SUPERMODULE

  fCurrentModuleIndex=fMilleModule[k]->GetIndex(); // index of the SUPERMODULE

  // set the index
  Int_t index = GetModuleIndex(voluid);
  if (index<0) return -2;
  fCurrentSensVolIndex = index; // the index of the SENSITIVE VOLUME

  fModuleInitParam[0] = 0.0;
  fModuleInitParam[1] = 0.0;
  fModuleInitParam[2] = 0.0;
  fModuleInitParam[3] = 0.0; // psi   (X)
  fModuleInitParam[4] = 0.0; // theta (Y)
  fModuleInitParam[5] = 0.0; // phi   (Z)
  
  fCurrentModuleHMatrix = fMilleModule[fCurrentModuleInternalIndex]->GetMatrix();

  for (int ii=0; ii<3; ii++)
    fCurrentModuleTranslation[ii]=fCurrentModuleHMatrix->GetTranslation()[ii];

  /// get (evenctually prealigned) matrix of sens. vol.
  TGeoHMatrix *svMatrix = fMilleModule[fCurrentModuleInternalIndex]->GetSensitiveVolumeMatrix(voluid);
  
  fMeasGlo[0] = fCluster.GetX();
  fMeasGlo[1] = fCluster.GetY();
  fMeasGlo[2] = fCluster.GetZ(); 
  svMatrix->MasterToLocal(fMeasGlo,fMeasLoc);  
  AliDebug(2,Form("Local coordinates of measured point : X=%f  Y=%f  Z=%f \n",fMeasLoc[0] ,fMeasLoc[1] ,fMeasLoc[2] ));
  
  // set stdev from cluster
  TGeoHMatrix hcov;
  Double_t hcovel[9];
  hcovel[0]=double(fCluster.GetCov()[0]);
  hcovel[1]=double(fCluster.GetCov()[1]);
  hcovel[2]=double(fCluster.GetCov()[2]);
  hcovel[3]=double(fCluster.GetCov()[1]);
  hcovel[4]=double(fCluster.GetCov()[3]);
  hcovel[5]=double(fCluster.GetCov()[4]);
  hcovel[6]=double(fCluster.GetCov()[2]);
  hcovel[7]=double(fCluster.GetCov()[4]);
  hcovel[8]=double(fCluster.GetCov()[5]);
  hcov.SetRotation(hcovel);
  // now rotate in local system
  hcov.Multiply(svMatrix);
  hcov.MultiplyLeft(&svMatrix->Inverse());

  // set local sigmas
  fSigmaLoc[0] = TMath::Sqrt(TMath::Abs(hcov.GetRotationMatrix()[0]));
  fSigmaLoc[1] = TMath::Sqrt(TMath::Abs(hcov.GetRotationMatrix()[4]));
  fSigmaLoc[2] = TMath::Sqrt(TMath::Abs(hcov.GetRotationMatrix()[8]));

  // set minimum value for SigmaLoc to 10 micron 
  if (fSigmaLoc[0]<0.0010) fSigmaLoc[0]=0.0010;
  if (fSigmaLoc[2]<0.0010) fSigmaLoc[2]=0.0010;

  // multiply local sigmas by global factor
  fSigmaLoc[0] *= fSigmaXfactor;
  fSigmaLoc[2] *= fSigmaZfactor;

  // multiply local sigmas by individual factor
  fSigmaLoc[0] *= fSensVolSigmaXfactor[index];
  fSigmaLoc[2] *= fSensVolSigmaZfactor[index];

  AliDebug(2,Form("Setting StDev from CovMat : fSigmaLocX=%g  fSigmaLocY=%g fSigmaLocZ=%g \n",fSigmaLoc[0] ,fSigmaLoc[1] ,fSigmaLoc[2] ));
   
  return 0;
}

void AliITSAlignMille::SetCurrentModule(Int_t index) {
  /// set as current the SuperModule that contains the 'index' sens.vol.
  if (index<0 || index>2197) {
    AliInfo("index does not correspond to a sensitive volume!");
    return;
  }
  UShort_t voluid=GetModuleVolumeID(index);
  Int_t k=IsContained(voluid);
  if (k>=0){
    fCluster.SetVolumeID(voluid);
    fCluster.SetXYZ(0,0,0);
    InitModuleParams();
  }
  else
    AliInfo(Form("module %d not defined\n",index));    
}

void AliITSAlignMille::SetCurrentSensitiveModule(Int_t index) {
  /// set as current the SuperModule that contains the 'index' sens.vol.
  if (index<0 || index>2197) {
    AliInfo("index does not correspond to a sensitive volume!");
    return;
  }
  UShort_t voluid=AliITSAlignMilleModule::GetVolumeIDFromIndex(index);
  Int_t k=IsDefined(voluid);
  if (k>=0){
    fCluster.SetVolumeID(voluid);
    fCluster.SetXYZ(0,0,0);
    InitModuleParams();
  }
  else
    AliInfo(Form("module %d not defined\n",index));    
}

void AliITSAlignMille::Print(Option_t*) const 
{
  /// print infos
  printf("*** AliMillepede for ITS ***\n");
  printf("    number of defined super modules: %d\n",fNModules);
  
  if (fGeoManager)
    printf("    geometry loaded from %s\n",fGeometryFileName.Data());
  else
    printf("    geometry not loaded\n");
  
  if (fUseSuperModules) 
    printf("    using custom supermodules ( %d defined )\n",fNSuperModules);
  else
    printf("    custom supermodules not used\n");    

  if (fUsePreAlignment) 
    printf("    using prealignment from %s \n",fPreAlignmentFileName.Data());
  else
    printf("    prealignment not used\n");    

  if (fBOn) 
    printf("    B Field set to %f T - using Riemann's helices\n",fBField);
  else
    printf("    B Field OFF - using straight lines \n");

  if (fUseLocalShifts) 
    printf("    Alignment shifts will be computed in LOCAL RS\n");
  else
    printf("    Alignment shifts will be computed in GLOBAL RS\n");    

  if (fRequirePoints) printf("    Required points in tracks:\n");
  for (Int_t i=0; i<6; i++) {
    if (fNReqLayUp[i]>0) printf("        Layer %d : %d points with Y>0\n",i+1,fNReqLayUp[i]);
    if (fNReqLayDown[i]>0) printf("        Layer %d : %d points with Y<0\n",i+1,fNReqLayDown[i]);
    if (fNReqLay[i]>0) printf("        Layer %d : %d points \n",i+1,fNReqLay[i]);
  }
  for (Int_t i=0; i<3; i++) {
    if (fNReqDetUp[i]>0) printf("        Detector %d : %d points with Y>0\n",i+1,fNReqDetUp[i]);
    if (fNReqDetDown[i]>0) printf("        Detector %d : %d points with Y<0\n",i+1,fNReqDetDown[i]);
    if (fNReqDet[i]>0) printf("        Detector %d : %d points \n",i+1,fNReqDet[i]);
  }
  
  printf("\n    Millepede configuration parameters:\n");
  printf("        init parsig for translations  : %.4f\n",fParSigTranslations);
  printf("        init parsig for rotations     : %.4f\n",fParSigRotations);
  printf("        init value for chi2 cut       : %.4f\n",fStartFac);
  printf("        first iteration cut value     : %.4f\n",fResCutInitial);
  printf("        other iterations cut value    : %.4f\n",fResCut);
  printf("        number of stddev for chi2 cut : %d\n",fNStdDev);
  printf("        mult. fact. for local sigmas  : %.4f %.4f\n",fSigmaXfactor, fSigmaZfactor);

  printf("List of defined modules:\n");
  printf("  intidx\tindex\tvoluid\tname\n");
  for (int i=0; i<fNModules; i++)
    printf("  %d\t%d\t%d\t%s\n",i,fModuleIndex[i],fModuleVolumeID[i],fMilleModule[i]->GetName());
   
}

AliITSAlignMilleModule  *AliITSAlignMille::GetMilleModule(UShort_t voluid) const
{
  // return pointer to a define supermodule
  // return NULL if error
  Int_t i=IsDefined(voluid);
  if (i<0) return NULL;
  return fMilleModule[i];
}

AliITSAlignMilleModule *AliITSAlignMille::GetCurrentModule() const
{
  if (fNModules) return fMilleModule[fCurrentModuleInternalIndex];
  return NULL;
}

void AliITSAlignMille::PrintCurrentModuleInfo() 
{
  ///
  Int_t k=fCurrentModuleInternalIndex;
  if (k<0 || k>=fNModules) return;
  fMilleModule[k]->Print("");
}

Bool_t AliITSAlignMille::InitRiemanFit() {
  // Initialize Riemann Fitter for current track
  // return kFALSE if error

  if (!fBOn) return kFALSE;

  Int_t npts=0;
  AliTrackPoint ap;
  npts = fTrack->GetNPoints();
  AliDebug(3,Form("Fitting track with %d points",npts));

  fRieman->Reset();
  fRieman->SetTrackPointArray(fTrack);

  TArrayI ai(npts);
  for (Int_t ipt=0; ipt<npts; ipt++) ai[ipt]=fTrack->GetVolumeID()[ipt];
  
  // fit track with 5 params in his own tracking-rotated reference system
  // xc = -p[1]/p[0];
  // yc = 1/p[0];
  // R  = sqrt( x0*x0 + y0*y0 - y0*p[2]);
  if (!fRieman->Fit(&ai,NULL,(AliGeomManager::ELayerID)1,(AliGeomManager::ELayerID)6)) {
    return kFALSE;
  }

  for (int i=0; i<5; i++)
    fLocalInitParam[i] = fRieman->GetParam()[i];
  
  return kTRUE;
}


void AliITSAlignMille::InitTrackParams(int meth) {
  /// initialize local parameters with different methods
  /// for current track (fTrack)
  
  Int_t npts=0;
  TF1 *f1=NULL;
  TGraph *g=NULL;
  Float_t sigmax[20],sigmay[20],sigmaz[20];
  AliTrackPoint ap;
  TGraphErrors *ge=NULL;

  switch (meth) {
  case 1:   // simple linear interpolation
    // get local starting parameters (to be substituted by ESD track parms)
    // local parms (fLocalInitParam[]) are:
    //      [0] = global x coord. of straight line intersection at y=0 plane
    //      [1] = global z coord. of straight line intersection at y=0 plane
    //      [2] = px/py  
    //      [3] = pz/py
    
    // test #1: linear fit in x(y) and z(y)
    npts = fTrack->GetNPoints();
    AliDebug(3,Form("*** initializing track with %d points ***",npts));

    f1=new TF1("f1","[0]+x*[1]",-50,50);

    g=new TGraph(npts,fTrack->GetY(),fTrack->GetX());
    g->Fit(f1,"RNQ");
    fLocalInitParam[0] = f1->GetParameter(0);
    fLocalInitParam[2] = f1->GetParameter(1);
    AliDebug(2,Form("X = p0gx + ugx*Y : p0gx = %f +- %f    ugx = %f +- %f\n",fLocalInitParam[0],f1->GetParError(0),fLocalInitParam[2],f1->GetParError(1)));
    delete g; g=NULL;

    g=new TGraph(npts,fTrack->GetY(),fTrack->GetZ());
    g->Fit(f1,"RNQ");
    fLocalInitParam[1] = f1->GetParameter(0);
    fLocalInitParam[3] = f1->GetParameter(1);
    AliDebug(2,Form("Z = p0gz + ugz*Y : p0gz=%f  ugz=%f\n",fLocalInitParam[1],fLocalInitParam[3]));
    delete g;
    delete f1;

    break;
    
  case 2:   // simple linear interpolation weighted using sigmas
    // get local starting parameters (to be substituted by ESD track parms)
    // local parms (fLocalInitParam[]) are:
    //      [0] = global x coord. of straight line intersection at y=0 plane
    //      [1] = global z coord. of straight line intersection at y=0 plane
    //      [2] = px/py  
    //      [3] = pz/py
    
    // test #1: linear fit in x(y) and z(y)
    npts = fTrack->GetNPoints();
    AliDebug(3,Form("*** initializing track with %d points ***",npts));

    for (Int_t isig=0; isig<npts; isig++) {
      fTrack->GetPoint(ap,isig);
      sigmax[isig]=ap.GetCov()[0]; 
      if (sigmax[isig]<1.0e-07) sigmax[isig]=1.0e-07; // minimum sigma=3 mu
      sigmax[isig]=TMath::Sqrt(sigmax[isig]);

      sigmay[isig]=ap.GetCov()[3]; 
      if (sigmay[isig]<1.0e-07) sigmay[isig]=1.0e-07; // minimum sigma=3 mu
      sigmay[isig]=TMath::Sqrt(sigmay[isig]);

      sigmaz[isig]=ap.GetCov()[5]; 
      if (sigmaz[isig]<1.0e-07) sigmaz[isig]=1.0e-07; // minimum sigma=3 mu
      sigmaz[isig]=TMath::Sqrt(sigmaz[isig]);      

      if (fTempExcludedModule>=0 && fTempExcludedModule==AliITSAlignMilleModule::GetIndexFromVolumeID(ap.GetVolumeID())) {
	sigmax[isig] *= 1000.;
	sigmay[isig] *= 1000.;
	sigmaz[isig] *= 1000.;
	fTempExcludedModule=-1;
      }
    }

    f1=new TF1("f1","[0]+x*[1]",-50,50);

    ge=new TGraphErrors(npts,fTrack->GetY(),fTrack->GetX(),sigmay,sigmax);
    ge->Fit(f1,"RNQ");
    fLocalInitParam[0] = f1->GetParameter(0);
    fLocalInitParam[2] = f1->GetParameter(1);
    AliDebug(2,Form("X = p0gx + ugx*Y : p0gx = %f +- %f    ugx = %f +- %f\n",fLocalInitParam[0],f1->GetParError(0),fLocalInitParam[2],f1->GetParError(1)));
    delete ge; ge=NULL;
    
    ge=new TGraphErrors(npts,fTrack->GetY(),fTrack->GetZ(),sigmay,sigmaz);
    ge->Fit(f1,"RNQ");
    fLocalInitParam[1] = f1->GetParameter(0);
    fLocalInitParam[3] = f1->GetParameter(1);
    AliDebug(2,Form("Z = p0gz + ugz*Y : p0gz=%f  ugz=%f\n",fLocalInitParam[1],fLocalInitParam[3]));
    delete ge;
    delete f1;
    
    break;
    
  }
}

Int_t AliITSAlignMille::IsDefined(UShort_t voluid) const
{
  // checks if supermodule 'voluid' is defined and return the internal index
  // return -1 if error
  Int_t k=fNModules-1;
  while (k>=0 && !(voluid==fModuleVolumeID[k]) ) k--;  
  if (k<0) return -1; 
  return k;
}

Int_t AliITSAlignMille::IsContained(UShort_t voluid) const
{
  // checks if the sensitive module 'voluid' is contained inside a supermodule and return the internal index of the last identified supermodule
  // return -1 if error
  if (AliITSAlignMilleModule::GetIndexFromVolumeID(voluid)<0) return -1;
  Int_t k=fNModules-1;
  while (k>=0 && !(fMilleModule[k]->IsIn(voluid)) ) k--;  
  if (k<0) return -1; 
  return k;
}

Bool_t AliITSAlignMille::CheckVolumeID(UShort_t voluid) const 
{
  /// check if a sensitive volume is contained inside one of the defined supermodules
  Int_t k=fNModules-1;
  while (k>=0 && !(fMilleModule[k]->IsIn(voluid)) ) k--;  
  if (k>=0) return kTRUE;
  return kFALSE;
}

Int_t AliITSAlignMille::CheckCurrentTrack() {
  /// checks if AliTrackPoints belongs to defined modules
  /// return number of good poins
  /// return 0 if not enough points

  Int_t npts = fTrack->GetNPoints();
  Int_t ngoodpts=0;
  // debug points
  for (int j=0; j<npts; j++) {
    UShort_t voluid = fTrack->GetVolumeID()[j];    
    if (CheckVolumeID(voluid)) {
      ngoodpts++;
    }
  }

  if (ngoodpts<fMinNPtsPerTrack) return 0;

  return ngoodpts;
}

Int_t AliITSAlignMille::ProcessTrack(AliTrackPointArray *track) {
  /// Process track; Loop over hits and set local equations
  /// here 'track' is a AliTrackPointArray
  /// return 0 if success;
  
  if (!fIsMilleInit) {
    AliInfo("Millepede has not been initialized!");
    return -1;
  }

  Int_t npts = track->GetNPoints();
  AliDebug(2,Form("*** Input track with %d points ***",npts));

  // preprocessing of the input track: keep only points in defined volumes,
  // move points if prealignment is set, sort by Yglo if required
  
  fTrack=PrepareTrack(track);
  if (!fTrack) return -1;

  npts = fTrack->GetNPoints();
  AliDebug(2,Form("*** Processing prepared track with %d points ***",npts));
  
  if (!fBOn) { // straight lines  
    // set local starting parameters (to be substituted by ESD track parms)
    // local parms (fLocalInitParam[]) are:
    //      [0] = global x coord. of straight line intersection at y=0 plane
    //      [1] = global z coord. of straight line intersection at y=0 plane
    //      [2] = px/py  
    //      [3] = pz/py
    InitTrackParams(fInitTrackParamsMeth);  
  } 
  else {
    // local parms (fLocalInitParam[]) are the Riemann Fitter params
    if (!InitRiemanFit()) {
      AliInfo("Riemann fit failed! skipping this track...");
      delete fTrack;
      fTrack=NULL;
      return -5;
    }
  }
  
  Int_t nloceq=0;
  AliITSAlignMilleData *md = new AliITSAlignMilleData[npts];
  
  for (Int_t ipt=0; ipt<npts; ipt++) {
    fTrack->GetPoint(fCluster,ipt);
    AliDebug(2,Form("\n--- processing point %d --- \n",ipt));    

    // set geometry parameters for the the current module
    if (InitModuleParams()) continue;
    AliDebug(2,Form("    VolID=%d  Index=%d  InternalIdx=%d  symname=%s\n", track->GetVolumeID()[ipt], fCurrentModuleIndex ,fCurrentModuleInternalIndex, AliGeomManager::SymName(track->GetVolumeID()[ipt]) ));
    AliDebug(2,Form("    Preprocessed Point = ( %f , %f , %f ) \n",fCluster.GetX(),fCluster.GetY(),fCluster.GetZ()));
    
    if (!AddLocalEquation(md[nloceq])) {
      nloceq++;    
      fProcessedPoints[fCurrentModuleInternalIndex]++;
    }
    else {
      fTotBadLocEqPoints++;
    }
    
  } // end loop over points
  
  delete fTrack;
  fTrack=NULL;

  // not enough good points!
  if (nloceq<fMinNPtsPerTrack) {
    delete [] md;      
    return -1;
  }
  
  // finally send local equations to millepede
  SetLocalEquations(md,nloceq);

  delete [] md;
  
  return 0;
}

Int_t AliITSAlignMille::CalcIntersectionPoint(const Double_t *lpar, const Double_t *gpar) {
  /// calculate intersection point of track with current module in local coordinates
  /// according with a given set of parameters (local(4/5) and global(6))
  /// and fill fPintLoc/Glo
  ///    local are:   pgx0, pgz0, ugx, ugz   OR   riemann fitters pars
  ///    global are:  tx,ty,tz,psi,theta,phi (Raff's delta angles in deg.)
  /// return 0 if success
  
  AliDebug(3,Form("lpar = %g %g %g %g %g\ngpar= %g %g %g %g %g %g\n",lpar[0],lpar[1],lpar[2],lpar[3],lpar[4],gpar[0],gpar[1],gpar[2],gpar[3],gpar[4],gpar[5]));
  AliDebug(3,Form("deltalpar = %g %g %g %g %g\n",lpar[0]-fLocalInitParam[0],lpar[1]-fLocalInitParam[1],lpar[2]-fLocalInitParam[2],lpar[3]-fLocalInitParam[3],lpar[4]-fLocalInitParam[4]));

  
  // prepare the TGeoHMatrix
  TGeoHMatrix *fTempHMat = fMilleModule[fCurrentModuleInternalIndex]->GetSensitiveVolumeModifiedMatrix(fCluster.GetVolumeID(),gpar);
  if (!fTempHMat) return -1;
  
  Double_t v0g[3]; // vector with straight line direction in global coord.
  Double_t p0g[3]; // point of the straight line (glo)
  
  if (fBOn) { // B FIELD!
    AliTrackPoint prf; 
    for (int ip=0; ip<5; ip++)
      fRieman->SetParam(ip,lpar[ip]);

    if (!fRieman->GetPCA(fCluster,prf))  {
      AliInfo(Form("error in GetPCA for point %d",fCluster.GetVolumeID()));
      return -3;
    }
    // now determine straight line passing tangent to fit curve at prf
    // ugx = dX/dY_glo = DeltaX/DeltaY_glo
    // mo' P1=(X,Y,Z)_glo_prf
    //       => (x,y,Z)_trk_prf ruotando di alpha...
    Double_t alpha=fRieman->GetAlpha();
    Double_t x1g = prf.GetX();
    Double_t y1g = prf.GetY();
    Double_t z1g = prf.GetZ();
    Double_t x1t =  x1g*TMath::Cos(alpha) + y1g*TMath::Sin(alpha);
    Double_t y1t = -x1g*TMath::Sin(alpha) + y1g*TMath::Cos(alpha);
    Double_t z1t =  z1g;    

    Double_t x2t = x1t+1.0;
    Double_t y2t = y1t+fRieman->GetDYat(x1t);
    Double_t z2t = z1t+fRieman->GetDZat(x1t);
    Double_t x2g =  x2t*TMath::Cos(alpha) - y2t*TMath::Sin(alpha);
    Double_t y2g =  x2t*TMath::Sin(alpha) + y2t*TMath::Cos(alpha);
    Double_t z2g =  z2t;  

    AliDebug(3,Form("Riemann frame:  fAlpha = %f  =  %f  ",alpha,alpha*180./TMath::Pi()));
    AliDebug(3,Form("   prf_glo=( %f , %f , %f )  prf_rf=( %f , %f , %f )\n", x1g,y1g,z1g, x1t,y1t,z1t));
    AliDebug(3,Form("   mov_glo=( %f , %f , %f )      rf=( %f , %f , %f )\n",x2g,y2g,z2g, x2t,y2t,z2t));
        
    if (TMath::Abs(y2g-y1g)<1e-15) {
      AliInfo("DeltaY=0! Cannot proceed...");
      return -1;
    }
    // ugx,1,ugz
    v0g[0] = (x2g-x1g)/(y2g-y1g);
    v0g[1]=1.0;
    v0g[2] = (z2g-z1g)/(y2g-y1g);
    
    // point: just keep prf
    p0g[0]=x1g;
    p0g[1]=y1g;
    p0g[2]=z1g;
  }  
  else { // staight line
    // vector of initial straight line direction in glob. coord
    v0g[0]=lpar[2];
    v0g[1]=1.0;
    v0g[2]=lpar[3];
    
    // intercept in yg=0 plane in glob coord
    p0g[0]=lpar[0];
    p0g[1]=0.0;
    p0g[2]=lpar[1];
  }
  AliDebug(3,Form("Line vector: ( %f , %f , %f )  point:( %f , %f , %f )\n",v0g[0],v0g[1],v0g[2],p0g[0],p0g[1],p0g[2]));
  
  // same in local coord.
  Double_t p0l[3],v0l[3];
  fTempHMat->MasterToLocalVect(v0g,v0l);
  fTempHMat->MasterToLocal(p0g,p0l);
  
  if (TMath::Abs(v0l[1])<1e-15) {
    AliInfo("Track Y direction in local frame is zero! Cannot proceed...");
    return -1;
  }
  
  // local intersection point
  fPintLoc[0] = p0l[0] - (v0l[0]/v0l[1])*p0l[1];
  fPintLoc[1] = 0;
  fPintLoc[2] = p0l[2] - (v0l[2]/v0l[1])*p0l[1];
  
  // global intersection point
  fTempHMat->LocalToMaster(fPintLoc,fPintGlo);
  AliDebug(3,Form("Intesect. point: L( %f , %f , %f )  G( %f , %f , %f )\n",fPintLoc[0],fPintLoc[1],fPintLoc[2],fPintGlo[0],fPintGlo[1],fPintGlo[2]));
  
  return 0;
}

Int_t AliITSAlignMille::CalcDerivatives(Int_t paridx, Bool_t islpar) {
  /// calculate numerically (ROOT's style) the derivatives for
  /// local X intersection  and local Z intersection
  /// parlist: local  (islpar=kTRUE)  pgx0, pgz0, ugx0, ugz0  OR riemann's params
  ///          global (islpar=kFALSE) tx, ty, tz, psi, theta, phi (Raf's angles in deg)
  /// return 0 if success
  
  // copy initial parameters
  Double_t lpar[ITSMILLENLOCAL];
  Double_t gpar[ITSMILLENPARCH];
  for (Int_t i=0; i<ITSMILLENLOCAL; i++) lpar[i]=fLocalInitParam[i];
  for (Int_t i=0; i<ITSMILLENPARCH; i++) gpar[i]=fModuleInitParam[i];

  // trial with fixed dpar...
  Double_t dpar=0.0;

  if (islpar) { // track parameters
    //dpar=fLocalInitParam[paridx]*0.001;
    // set minimum dpar
    if (!fBOn) {
      if (paridx<2) dpar=1.0e-4; // translations
      else dpar=1.0e-6; // direction
    }
    else { // B Field
      // pepo: proviamo con 1/1000, poi evenctually 1/100...
      Double_t dfrac=0.01;
      switch(paridx) {
      case 0:
	// RMS cosmics: 1e-4
	dpar = TMath::Max(1.0e-6,TMath::Abs(fLocalInitParam[paridx]*dfrac)); 
	break;
      case 1: 
	// RMS cosmics: 0.2
	dpar = TMath::Max(0.002,TMath::Abs(fLocalInitParam[paridx]*dfrac)); 
	break;
      case 2: 
	// RMS cosmics: 9
	dpar = TMath::Max(0.09,TMath::Abs(fLocalInitParam[paridx]*dfrac)); 
	break;
      case 3: 
	// RMS cosmics: 7
	dpar = TMath::Max(0.07,TMath::Abs(fLocalInitParam[paridx]*dfrac)); 
	break;
      case 4: 
	// RMS cosmics: 0.3
	dpar = TMath::Max(0.003,TMath::Abs(fLocalInitParam[paridx]*dfrac)); 
	break;
      }
    }
  }
  else { // alignment global parameters
    //dpar=fModuleInitParam[paridx]*0.001;
    if (paridx<3) dpar=1.0e-4; // translations
    else dpar=1.0e-2; // angles    
  }

  AliDebug(3,Form("+++ using dpar=%g",dpar));
  
  // calculate derivative ROOT's like:
  //  using f(x+h),f(x-h),f(x+h/2),f(x-h2)...
  Double_t pintl1[3]; // f(x-h)
  Double_t pintl2[3]; // f(x-h/2)
  Double_t pintl3[3]; // f(x+h/2)
  Double_t pintl4[3]; // f(x+h)
    
  // first values
  if (islpar) lpar[paridx] -= dpar;
  else gpar[paridx] -= dpar;
  if (CalcIntersectionPoint(lpar, gpar)) return -2;
  for (Int_t i=0; i<3; i++) pintl1[i]=fPintLoc[i];

  // second values
  if (islpar) lpar[paridx] += dpar/2;
  else gpar[paridx] += dpar/2;
  if (CalcIntersectionPoint(lpar, gpar)) return -2;
  for (Int_t i=0; i<3; i++) pintl2[i]=fPintLoc[i];

  // third values
  if (islpar) lpar[paridx] += dpar;
  else gpar[paridx] += dpar;
  if (CalcIntersectionPoint(lpar, gpar)) return -2;
  for (Int_t i=0; i<3; i++) pintl3[i]=fPintLoc[i];

  // fourth values
  if (islpar) lpar[paridx] += dpar/2;
  else gpar[paridx] += dpar/2;
  if (CalcIntersectionPoint(lpar, gpar)) return -2;
  for (Int_t i=0; i<3; i++) pintl4[i]=fPintLoc[i];

  Double_t h2 = 1./(2.*dpar);
  Double_t d0 = pintl4[0]-pintl1[0];
  Double_t d2 = 2.*(pintl3[0]-pintl2[0]);
  fDerivativeXLoc = h2*(4*d2 - d0)/3.;
  if (TMath::Abs(fDerivativeXLoc) < 1.0e-9) fDerivativeXLoc=0.0;

  d0 = pintl4[2]-pintl1[2];
  d2 = 2.*(pintl3[2]-pintl2[2]);
  fDerivativeZLoc = h2*(4*d2 - d0)/3.;
  if (TMath::Abs(fDerivativeZLoc) < 1.0e-9) fDerivativeZLoc=0.0;

  AliDebug(3,Form("\n+++ derivatives +++ \n"));
  AliDebug(3,Form("+++ dXLoc/dpar = %g +++\n",fDerivativeXLoc));
  AliDebug(3,Form("+++ dZLoc/dpar = %g +++\n\n",fDerivativeZLoc));
  
  return 0;
}


Int_t AliITSAlignMille::AddLocalEquation(AliITSAlignMilleData &m) {
  /// Define local equation for current cluster in X and Z coor.
  /// and store them to memory
  /// return 0 if success
  
  // store first interaction point
  if (CalcIntersectionPoint(fLocalInitParam, fModuleInitParam)) return -4;  
  for (Int_t i=0; i<3; i++) fPintLoc0[i]=fPintLoc[i];
  AliDebug(2,Form("Intesect. point: L( %f , %f , %f )",fPintLoc[0],fPintLoc[1],fPintLoc[2]));
  
  // calculate local derivatives numerically
  Double_t dXdL[ITSMILLENLOCAL],dZdL[ITSMILLENLOCAL];
  for (Int_t i=0; i<fNLocal; i++) {
    if (CalcDerivatives(i,kTRUE)) return -1;
    dXdL[i]=fDerivativeXLoc;
    dZdL[i]=fDerivativeZLoc;
  }

  Double_t dXdG[ITSMILLENPARCH],dZdG[ITSMILLENPARCH];
  for (Int_t i=0; i<ITSMILLENPARCH; i++) {
    if (CalcDerivatives(i,kFALSE)) return -1;
    dXdG[i]=fDerivativeXLoc;
    dZdG[i]=fDerivativeZLoc;
  }

  AliDebug(2,Form("\n***************\n"));
  for (Int_t i=0; i<fNLocal; i++)
    AliDebug(2,Form("Local parameter %d - dXdpar = %g  - dZdpar = %g\n",i,dXdL[i],dZdL[i]));
  for (Int_t i=0; i<ITSMILLENPARCH; i++)
    AliDebug(2,Form("Global parameter %d - dXdpar = %g  - dZdpar = %g\n",i,dXdG[i],dZdG[i]));
  AliDebug(2,Form("\n***************\n"));

  // check if at least 1 local and 1 global derivs. are not null
  Double_t nonzero=0.0;
  for (Int_t i=0; i<fNLocal; i++) nonzero += TMath::Abs(dXdL[i]);
  if (nonzero==0.0) {
    AliInfo("Discarding local equations for this point beacuse of zero local X derivatives!");
    return -2;
  }
  nonzero=0.0;
  for (Int_t i=0; i<ITSMILLENPARCH; i++) nonzero += TMath::Abs(dXdG[i]);
  if (nonzero==0.0) {
    AliInfo("Discarding local equations for this point beacuse of zero global X derivatives!");
    return -2;
  }
  nonzero=0.0;
  for (Int_t i=0; i<fNLocal; i++) nonzero += TMath::Abs(dZdL[i]);
  if (nonzero==0.0) {
    AliInfo("Discarding local equations for this point beacuse of zero local Z derivatives!");
    return -2;
  }
  nonzero=0.0;
  for (Int_t i=0; i<ITSMILLENPARCH; i++) nonzero += TMath::Abs(dZdG[i]);
  if (nonzero==0.0) {
    AliInfo("Discarding local equations for this point beacuse of zero global Z derivatives!");
    return -2;
  }

  // ok, can copy to m

  AliDebug(2,Form("Adding local equation X with fMeas=%.6f  and fSigma=%.6f",(fMeasLoc[0]-fPintLoc0[0]), fSigmaLoc[0]));
  // set equation for Xloc coordinate
  for (Int_t i=0; i<fNLocal; i++) {
    m.GetIdxlocX()[i]=i;
    m.GetDerlocX()[i]=dXdL[i];
  }
  for (Int_t i=0; i<ITSMILLENPARCH; i++) {
    m.GetIdxgloX()[i]=fCurrentModuleInternalIndex*ITSMILLENPARCH+i;
    m.GetDergloX()[i]=dXdG[i];    
  }
  m.SetMeasX(fMeasLoc[0]-fPintLoc0[0]);
  m.SetSigmaX(fSigmaLoc[0]);
  
  AliDebug(2,Form("Adding local equation Z with fMeas=%.6f  and fSigma=%.6f",(fMeasLoc[2]-fPintLoc0[2]), fSigmaLoc[2]));
  // set equation for Zloc coordinate
  for (Int_t i=0; i<fNLocal; i++) {
    m.GetIdxlocZ()[i]=i;
    m.GetDerlocZ()[i]=dZdL[i];
  }
  for (Int_t i=0; i<ITSMILLENPARCH; i++) {
    m.GetIdxgloZ()[i]=fCurrentModuleInternalIndex*ITSMILLENPARCH+i;
    m.GetDergloZ()[i]=dZdG[i];    
  }
  m.SetMeasZ(fMeasLoc[2]-fPintLoc0[2]);
  m.SetSigmaZ(fSigmaLoc[2]);
 
  return 0;
}


void AliITSAlignMille::SetLocalEquations(const AliITSAlignMilleData *m, Int_t neq) {
  /// Set local equations with data stored in m
  /// return 0 if success
  
  for (Int_t j=0; j<neq; j++) {
    
    AliDebug(2,Form("setting local equation X with fMeas=%.6f  and fSigma=%.6f",m[j].GetMeasX(), m[j].GetSigmaX()));
    // set equation for Xloc coordinate
    for (Int_t i=0; i<fNLocal; i++) 
      SetLocalDerivative( m[j].GetIdxlocX()[i], m[j].GetDerlocX()[i] );
    
    for (Int_t i=0; i<ITSMILLENPARCH; i++)
      SetGlobalDerivative( m[j].GetIdxgloX()[i], m[j].GetDergloX()[i] );
    
    fMillepede->SetLocalEquation(fGlobalDerivatives, fLocalDerivatives, m[j].GetMeasX(), m[j].GetSigmaX());  
    
    
    AliDebug(2,Form("setting local equation Z with fMeas=%.6f  and fSigma=%.6f",m[j].GetMeasZ(), m[j].GetSigmaZ()));
    // set equation for Zloc coordinate
    for (Int_t i=0; i<fNLocal; i++) 
      SetLocalDerivative( m[j].GetIdxlocZ()[i], m[j].GetDerlocZ()[i] );
    
    for (Int_t i=0; i<ITSMILLENPARCH; i++)
      SetGlobalDerivative( m[j].GetIdxgloZ()[i], m[j].GetDergloZ()[i] );
    
    fMillepede->SetLocalEquation(fGlobalDerivatives, fLocalDerivatives, m[j].GetMeasZ(), m[j].GetSigmaZ());  
  }
}


void AliITSAlignMille::LocalFit(Int_t iTrack, Double_t *lTrackParam, Int_t lSingleFit) {
  /// Call local fit for this track
  if (!fIsMilleInit) {
    AliInfo("Millepede has not been initialized!");
    return;
  }
  Int_t iRes = fMillepede->LocalFit(iTrack,lTrackParam,lSingleFit);
  AliDebug(2,Form("iRes = %d",iRes));
  //if (iRes && !lSingleFit) {
  if (!lSingleFit) { // Ruben Shahoyan's bug fix
    fMillepede->SetNLocalEquations(fMillepede->GetNLocalEquations()+1);
  }
}

void AliITSAlignMille::GlobalFit(Double_t *parameters,Double_t *errors,Double_t *pulls) {
  /// Call global fit; Global parameters are stored in parameters
  if (!fIsMilleInit) {
    AliInfo("Millepede has not been initialized!");
    return;
  }
  fMillepede->GlobalFit(parameters,errors,pulls);
  AliInfo("Done fitting global parameters!");
}

Double_t AliITSAlignMille::GetParError(Int_t iPar) {
  /// Get error of parameter iPar
  if (!fIsMilleInit) {
    AliInfo("Millepede has not been initialized!");
    return 0;
  }
  Double_t lErr = fMillepede->GetParError(iPar);
  return lErr;
}

void AliITSAlignMille::PrintGlobalParameters() {
  /// Print global parameters
  if (!fIsMilleInit) {
    AliInfo("Millepede has not been initialized!");
    return;
  }
  fMillepede->PrintGlobalParameters();
}

// //_________________________________________________________________________
Int_t AliITSAlignMille::LoadSuperModuleFile(const Char_t *sfile)
{ 
  // load definitions of supermodules from a root file
  // return 0 if success

  TFile *smf=TFile::Open(sfile);
  if (!smf->IsOpen()) {
    AliInfo(Form("Cannot open supermodule file %s",sfile));
    return -1;
  }

  TClonesArray *sma=(TClonesArray*)smf->Get("ITSMilleSuperModules");
  if (!sma) {
    AliInfo(Form("Cannot find ITSMilleSuperModules array in file"));
    return -2;  
  }  
  Int_t nsma=sma->GetEntriesFast();
  AliInfo(Form("Array of SuperModules with %d entries\n",nsma));
  
  Char_t st[2048];
  char symname[250];
  UShort_t volid;
  TGeoHMatrix m;

  for (Int_t i=0; i<nsma; i++) {
    AliAlignObjParams *a = (AliAlignObjParams*)sma->UncheckedAt(i);
    volid=a->GetVolUID();
    strncpy(st,a->GetSymName(),TMath::Min(sizeof(st),strlen(a->GetSymName())+1));
    a->GetMatrix(m);
    memset(symname,0,250*sizeof(char));
    sscanf(st,"%249s",symname);
    // decode module list
    char *stp=strstr(st,"ModuleList:");
    if (!stp) return -3;
    stp += 11;
    int idx[2200];
    char spp[200]; int jp=0;
    char cl[20];
    strncpy(st,stp,TMath::Min(sizeof(st),strlen(stp)+1));
    int l=strlen(st);
    int j=0;
    int n=0;

    while (j<=l) {
      if (st[j]==9 || st[j]==32 || st[j]==10 || st[j]==0) {
	spp[jp]=0;
	jp=0;
	if (strlen(spp)) {
	  int k=strcspn(spp,"-");
	  if (k<int(strlen(spp))) { // c'e' il -
	    strncpy(cl,&(spp[k+1]), TMath::Min(sizeof(cl),strlen(&spp[k+1])+1));
	    spp[k]=0;
	    int ifrom=atoi(spp); int ito=atoi(cl);
	    for (int b=ifrom; b<=ito; b++) {
	      idx[n]=b;
	      n++;
	    }
	  }
	  else { // numerillo singolo
	    idx[n]=atoi(spp);
	    n++;
	  }
	}
      }
      else {
	spp[jp]=st[j];
	jp++;
      }
      j++;
    }
    UShort_t volidsv[2198];
    for (j=0;j<n;j++) {
      volidsv[j]=AliITSAlignMilleModule::GetVolumeIDFromIndex(idx[j]);
      if (!volidsv[j]) {
	AliInfo(Form("Index %d not valid (range 0->2197)",idx[j]));
	return -5;
      }
    }
    Int_t smindex=int(2198+volid-14336); // virtual index
    fSuperModule[fNSuperModules]=new AliITSAlignMilleModule(smindex,volid,symname,&m,n,volidsv);

    //-------------
    fNSuperModules++;
  }

  smf->Close();

  fUseSuperModules=1;
  return 0;
}

 AliITSAlignMille.cxx:1
 AliITSAlignMille.cxx:2
 AliITSAlignMille.cxx:3
 AliITSAlignMille.cxx:4
 AliITSAlignMille.cxx:5
 AliITSAlignMille.cxx:6
 AliITSAlignMille.cxx:7
 AliITSAlignMille.cxx:8
 AliITSAlignMille.cxx:9
 AliITSAlignMille.cxx:10
 AliITSAlignMille.cxx:11
 AliITSAlignMille.cxx:12
 AliITSAlignMille.cxx:13
 AliITSAlignMille.cxx:14
 AliITSAlignMille.cxx:15
 AliITSAlignMille.cxx:16
 AliITSAlignMille.cxx:17
 AliITSAlignMille.cxx:18
 AliITSAlignMille.cxx:19
 AliITSAlignMille.cxx:20
 AliITSAlignMille.cxx:21
 AliITSAlignMille.cxx:22
 AliITSAlignMille.cxx:23
 AliITSAlignMille.cxx:24
 AliITSAlignMille.cxx:25
 AliITSAlignMille.cxx:26
 AliITSAlignMille.cxx:27
 AliITSAlignMille.cxx:28
 AliITSAlignMille.cxx:29
 AliITSAlignMille.cxx:30
 AliITSAlignMille.cxx:31
 AliITSAlignMille.cxx:32
 AliITSAlignMille.cxx:33
 AliITSAlignMille.cxx:34
 AliITSAlignMille.cxx:35
 AliITSAlignMille.cxx:36
 AliITSAlignMille.cxx:37
 AliITSAlignMille.cxx:38
 AliITSAlignMille.cxx:39
 AliITSAlignMille.cxx:40
 AliITSAlignMille.cxx:41
 AliITSAlignMille.cxx:42
 AliITSAlignMille.cxx:43
 AliITSAlignMille.cxx:44
 AliITSAlignMille.cxx:45
 AliITSAlignMille.cxx:46
 AliITSAlignMille.cxx:47
 AliITSAlignMille.cxx:48
 AliITSAlignMille.cxx:49
 AliITSAlignMille.cxx:50
 AliITSAlignMille.cxx:51
 AliITSAlignMille.cxx:52
 AliITSAlignMille.cxx:53
 AliITSAlignMille.cxx:54
 AliITSAlignMille.cxx:55
 AliITSAlignMille.cxx:56
 AliITSAlignMille.cxx:57
 AliITSAlignMille.cxx:58
 AliITSAlignMille.cxx:59
 AliITSAlignMille.cxx:60
 AliITSAlignMille.cxx:61
 AliITSAlignMille.cxx:62
 AliITSAlignMille.cxx:63
 AliITSAlignMille.cxx:64
 AliITSAlignMille.cxx:65
 AliITSAlignMille.cxx:66
 AliITSAlignMille.cxx:67
 AliITSAlignMille.cxx:68
 AliITSAlignMille.cxx:69
 AliITSAlignMille.cxx:70
 AliITSAlignMille.cxx:71
 AliITSAlignMille.cxx:72
 AliITSAlignMille.cxx:73
 AliITSAlignMille.cxx:74
 AliITSAlignMille.cxx:75
 AliITSAlignMille.cxx:76
 AliITSAlignMille.cxx:77
 AliITSAlignMille.cxx:78
 AliITSAlignMille.cxx:79
 AliITSAlignMille.cxx:80
 AliITSAlignMille.cxx:81
 AliITSAlignMille.cxx:82
 AliITSAlignMille.cxx:83
 AliITSAlignMille.cxx:84
 AliITSAlignMille.cxx:85
 AliITSAlignMille.cxx:86
 AliITSAlignMille.cxx:87
 AliITSAlignMille.cxx:88
 AliITSAlignMille.cxx:89
 AliITSAlignMille.cxx:90
 AliITSAlignMille.cxx:91
 AliITSAlignMille.cxx:92
 AliITSAlignMille.cxx:93
 AliITSAlignMille.cxx:94
 AliITSAlignMille.cxx:95
 AliITSAlignMille.cxx:96
 AliITSAlignMille.cxx:97
 AliITSAlignMille.cxx:98
 AliITSAlignMille.cxx:99
 AliITSAlignMille.cxx:100
 AliITSAlignMille.cxx:101
 AliITSAlignMille.cxx:102
 AliITSAlignMille.cxx:103
 AliITSAlignMille.cxx:104
 AliITSAlignMille.cxx:105
 AliITSAlignMille.cxx:106
 AliITSAlignMille.cxx:107
 AliITSAlignMille.cxx:108
 AliITSAlignMille.cxx:109
 AliITSAlignMille.cxx:110
 AliITSAlignMille.cxx:111
 AliITSAlignMille.cxx:112
 AliITSAlignMille.cxx:113
 AliITSAlignMille.cxx:114
 AliITSAlignMille.cxx:115
 AliITSAlignMille.cxx:116
 AliITSAlignMille.cxx:117
 AliITSAlignMille.cxx:118
 AliITSAlignMille.cxx:119
 AliITSAlignMille.cxx:120
 AliITSAlignMille.cxx:121
 AliITSAlignMille.cxx:122
 AliITSAlignMille.cxx:123
 AliITSAlignMille.cxx:124
 AliITSAlignMille.cxx:125
 AliITSAlignMille.cxx:126
 AliITSAlignMille.cxx:127
 AliITSAlignMille.cxx:128
 AliITSAlignMille.cxx:129
 AliITSAlignMille.cxx:130
 AliITSAlignMille.cxx:131
 AliITSAlignMille.cxx:132
 AliITSAlignMille.cxx:133
 AliITSAlignMille.cxx:134
 AliITSAlignMille.cxx:135
 AliITSAlignMille.cxx:136
 AliITSAlignMille.cxx:137
 AliITSAlignMille.cxx:138
 AliITSAlignMille.cxx:139
 AliITSAlignMille.cxx:140
 AliITSAlignMille.cxx:141
 AliITSAlignMille.cxx:142
 AliITSAlignMille.cxx:143
 AliITSAlignMille.cxx:144
 AliITSAlignMille.cxx:145
 AliITSAlignMille.cxx:146
 AliITSAlignMille.cxx:147
 AliITSAlignMille.cxx:148
 AliITSAlignMille.cxx:149
 AliITSAlignMille.cxx:150
 AliITSAlignMille.cxx:151
 AliITSAlignMille.cxx:152
 AliITSAlignMille.cxx:153
 AliITSAlignMille.cxx:154
 AliITSAlignMille.cxx:155
 AliITSAlignMille.cxx:156
 AliITSAlignMille.cxx:157
 AliITSAlignMille.cxx:158
 AliITSAlignMille.cxx:159
 AliITSAlignMille.cxx:160
 AliITSAlignMille.cxx:161
 AliITSAlignMille.cxx:162
 AliITSAlignMille.cxx:163
 AliITSAlignMille.cxx:164
 AliITSAlignMille.cxx:165
 AliITSAlignMille.cxx:166
 AliITSAlignMille.cxx:167
 AliITSAlignMille.cxx:168
 AliITSAlignMille.cxx:169
 AliITSAlignMille.cxx:170
 AliITSAlignMille.cxx:171
 AliITSAlignMille.cxx:172
 AliITSAlignMille.cxx:173
 AliITSAlignMille.cxx:174
 AliITSAlignMille.cxx:175
 AliITSAlignMille.cxx:176
 AliITSAlignMille.cxx:177
 AliITSAlignMille.cxx:178
 AliITSAlignMille.cxx:179
 AliITSAlignMille.cxx:180
 AliITSAlignMille.cxx:181
 AliITSAlignMille.cxx:182
 AliITSAlignMille.cxx:183
 AliITSAlignMille.cxx:184
 AliITSAlignMille.cxx:185
 AliITSAlignMille.cxx:186
 AliITSAlignMille.cxx:187
 AliITSAlignMille.cxx:188
 AliITSAlignMille.cxx:189
 AliITSAlignMille.cxx:190
 AliITSAlignMille.cxx:191
 AliITSAlignMille.cxx:192
 AliITSAlignMille.cxx:193
 AliITSAlignMille.cxx:194
 AliITSAlignMille.cxx:195
 AliITSAlignMille.cxx:196
 AliITSAlignMille.cxx:197
 AliITSAlignMille.cxx:198
 AliITSAlignMille.cxx:199
 AliITSAlignMille.cxx:200
 AliITSAlignMille.cxx:201
 AliITSAlignMille.cxx:202
 AliITSAlignMille.cxx:203
 AliITSAlignMille.cxx:204
 AliITSAlignMille.cxx:205
 AliITSAlignMille.cxx:206
 AliITSAlignMille.cxx:207
 AliITSAlignMille.cxx:208
 AliITSAlignMille.cxx:209
 AliITSAlignMille.cxx:210
 AliITSAlignMille.cxx:211
 AliITSAlignMille.cxx:212
 AliITSAlignMille.cxx:213
 AliITSAlignMille.cxx:214
 AliITSAlignMille.cxx:215
 AliITSAlignMille.cxx:216
 AliITSAlignMille.cxx:217
 AliITSAlignMille.cxx:218
 AliITSAlignMille.cxx:219
 AliITSAlignMille.cxx:220
 AliITSAlignMille.cxx:221
 AliITSAlignMille.cxx:222
 AliITSAlignMille.cxx:223
 AliITSAlignMille.cxx:224
 AliITSAlignMille.cxx:225
 AliITSAlignMille.cxx:226
 AliITSAlignMille.cxx:227
 AliITSAlignMille.cxx:228
 AliITSAlignMille.cxx:229
 AliITSAlignMille.cxx:230
 AliITSAlignMille.cxx:231
 AliITSAlignMille.cxx:232
 AliITSAlignMille.cxx:233
 AliITSAlignMille.cxx:234
 AliITSAlignMille.cxx:235
 AliITSAlignMille.cxx:236
 AliITSAlignMille.cxx:237
 AliITSAlignMille.cxx:238
 AliITSAlignMille.cxx:239
 AliITSAlignMille.cxx:240
 AliITSAlignMille.cxx:241
 AliITSAlignMille.cxx:242
 AliITSAlignMille.cxx:243
 AliITSAlignMille.cxx:244
 AliITSAlignMille.cxx:245
 AliITSAlignMille.cxx:246
 AliITSAlignMille.cxx:247
 AliITSAlignMille.cxx:248
 AliITSAlignMille.cxx:249
 AliITSAlignMille.cxx:250
 AliITSAlignMille.cxx:251
 AliITSAlignMille.cxx:252
 AliITSAlignMille.cxx:253
 AliITSAlignMille.cxx:254
 AliITSAlignMille.cxx:255
 AliITSAlignMille.cxx:256
 AliITSAlignMille.cxx:257
 AliITSAlignMille.cxx:258
 AliITSAlignMille.cxx:259
 AliITSAlignMille.cxx:260
 AliITSAlignMille.cxx:261
 AliITSAlignMille.cxx:262
 AliITSAlignMille.cxx:263
 AliITSAlignMille.cxx:264
 AliITSAlignMille.cxx:265
 AliITSAlignMille.cxx:266
 AliITSAlignMille.cxx:267
 AliITSAlignMille.cxx:268
 AliITSAlignMille.cxx:269
 AliITSAlignMille.cxx:270
 AliITSAlignMille.cxx:271
 AliITSAlignMille.cxx:272
 AliITSAlignMille.cxx:273
 AliITSAlignMille.cxx:274
 AliITSAlignMille.cxx:275
 AliITSAlignMille.cxx:276
 AliITSAlignMille.cxx:277
 AliITSAlignMille.cxx:278
 AliITSAlignMille.cxx:279
 AliITSAlignMille.cxx:280
 AliITSAlignMille.cxx:281
 AliITSAlignMille.cxx:282
 AliITSAlignMille.cxx:283
 AliITSAlignMille.cxx:284
 AliITSAlignMille.cxx:285
 AliITSAlignMille.cxx:286
 AliITSAlignMille.cxx:287
 AliITSAlignMille.cxx:288
 AliITSAlignMille.cxx:289
 AliITSAlignMille.cxx:290
 AliITSAlignMille.cxx:291
 AliITSAlignMille.cxx:292
 AliITSAlignMille.cxx:293
 AliITSAlignMille.cxx:294
 AliITSAlignMille.cxx:295
 AliITSAlignMille.cxx:296
 AliITSAlignMille.cxx:297
 AliITSAlignMille.cxx:298
 AliITSAlignMille.cxx:299
 AliITSAlignMille.cxx:300
 AliITSAlignMille.cxx:301
 AliITSAlignMille.cxx:302
 AliITSAlignMille.cxx:303
 AliITSAlignMille.cxx:304
 AliITSAlignMille.cxx:305
 AliITSAlignMille.cxx:306
 AliITSAlignMille.cxx:307
 AliITSAlignMille.cxx:308
 AliITSAlignMille.cxx:309
 AliITSAlignMille.cxx:310
 AliITSAlignMille.cxx:311
 AliITSAlignMille.cxx:312
 AliITSAlignMille.cxx:313
 AliITSAlignMille.cxx:314
 AliITSAlignMille.cxx:315
 AliITSAlignMille.cxx:316
 AliITSAlignMille.cxx:317
 AliITSAlignMille.cxx:318
 AliITSAlignMille.cxx:319
 AliITSAlignMille.cxx:320
 AliITSAlignMille.cxx:321
 AliITSAlignMille.cxx:322
 AliITSAlignMille.cxx:323
 AliITSAlignMille.cxx:324
 AliITSAlignMille.cxx:325
 AliITSAlignMille.cxx:326
 AliITSAlignMille.cxx:327
 AliITSAlignMille.cxx:328
 AliITSAlignMille.cxx:329
 AliITSAlignMille.cxx:330
 AliITSAlignMille.cxx:331
 AliITSAlignMille.cxx:332
 AliITSAlignMille.cxx:333
 AliITSAlignMille.cxx:334
 AliITSAlignMille.cxx:335
 AliITSAlignMille.cxx:336
 AliITSAlignMille.cxx:337
 AliITSAlignMille.cxx:338
 AliITSAlignMille.cxx:339
 AliITSAlignMille.cxx:340
 AliITSAlignMille.cxx:341
 AliITSAlignMille.cxx:342
 AliITSAlignMille.cxx:343
 AliITSAlignMille.cxx:344
 AliITSAlignMille.cxx:345
 AliITSAlignMille.cxx:346
 AliITSAlignMille.cxx:347
 AliITSAlignMille.cxx:348
 AliITSAlignMille.cxx:349
 AliITSAlignMille.cxx:350
 AliITSAlignMille.cxx:351
 AliITSAlignMille.cxx:352
 AliITSAlignMille.cxx:353
 AliITSAlignMille.cxx:354
 AliITSAlignMille.cxx:355
 AliITSAlignMille.cxx:356
 AliITSAlignMille.cxx:357
 AliITSAlignMille.cxx:358
 AliITSAlignMille.cxx:359
 AliITSAlignMille.cxx:360
 AliITSAlignMille.cxx:361
 AliITSAlignMille.cxx:362
 AliITSAlignMille.cxx:363
 AliITSAlignMille.cxx:364
 AliITSAlignMille.cxx:365
 AliITSAlignMille.cxx:366
 AliITSAlignMille.cxx:367
 AliITSAlignMille.cxx:368
 AliITSAlignMille.cxx:369
 AliITSAlignMille.cxx:370
 AliITSAlignMille.cxx:371
 AliITSAlignMille.cxx:372
 AliITSAlignMille.cxx:373
 AliITSAlignMille.cxx:374
 AliITSAlignMille.cxx:375
 AliITSAlignMille.cxx:376
 AliITSAlignMille.cxx:377
 AliITSAlignMille.cxx:378
 AliITSAlignMille.cxx:379
 AliITSAlignMille.cxx:380
 AliITSAlignMille.cxx:381
 AliITSAlignMille.cxx:382
 AliITSAlignMille.cxx:383
 AliITSAlignMille.cxx:384
 AliITSAlignMille.cxx:385
 AliITSAlignMille.cxx:386
 AliITSAlignMille.cxx:387
 AliITSAlignMille.cxx:388
 AliITSAlignMille.cxx:389
 AliITSAlignMille.cxx:390
 AliITSAlignMille.cxx:391
 AliITSAlignMille.cxx:392
 AliITSAlignMille.cxx:393
 AliITSAlignMille.cxx:394
 AliITSAlignMille.cxx:395
 AliITSAlignMille.cxx:396
 AliITSAlignMille.cxx:397
 AliITSAlignMille.cxx:398
 AliITSAlignMille.cxx:399
 AliITSAlignMille.cxx:400
 AliITSAlignMille.cxx:401
 AliITSAlignMille.cxx:402
 AliITSAlignMille.cxx:403
 AliITSAlignMille.cxx:404
 AliITSAlignMille.cxx:405
 AliITSAlignMille.cxx:406
 AliITSAlignMille.cxx:407
 AliITSAlignMille.cxx:408
 AliITSAlignMille.cxx:409
 AliITSAlignMille.cxx:410
 AliITSAlignMille.cxx:411
 AliITSAlignMille.cxx:412
 AliITSAlignMille.cxx:413
 AliITSAlignMille.cxx:414
 AliITSAlignMille.cxx:415
 AliITSAlignMille.cxx:416
 AliITSAlignMille.cxx:417
 AliITSAlignMille.cxx:418
 AliITSAlignMille.cxx:419
 AliITSAlignMille.cxx:420
 AliITSAlignMille.cxx:421
 AliITSAlignMille.cxx:422
 AliITSAlignMille.cxx:423
 AliITSAlignMille.cxx:424
 AliITSAlignMille.cxx:425
 AliITSAlignMille.cxx:426
 AliITSAlignMille.cxx:427
 AliITSAlignMille.cxx:428
 AliITSAlignMille.cxx:429
 AliITSAlignMille.cxx:430
 AliITSAlignMille.cxx:431
 AliITSAlignMille.cxx:432
 AliITSAlignMille.cxx:433
 AliITSAlignMille.cxx:434
 AliITSAlignMille.cxx:435
 AliITSAlignMille.cxx:436
 AliITSAlignMille.cxx:437
 AliITSAlignMille.cxx:438
 AliITSAlignMille.cxx:439
 AliITSAlignMille.cxx:440
 AliITSAlignMille.cxx:441
 AliITSAlignMille.cxx:442
 AliITSAlignMille.cxx:443
 AliITSAlignMille.cxx:444
 AliITSAlignMille.cxx:445
 AliITSAlignMille.cxx:446
 AliITSAlignMille.cxx:447
 AliITSAlignMille.cxx:448
 AliITSAlignMille.cxx:449
 AliITSAlignMille.cxx:450
 AliITSAlignMille.cxx:451
 AliITSAlignMille.cxx:452
 AliITSAlignMille.cxx:453
 AliITSAlignMille.cxx:454
 AliITSAlignMille.cxx:455
 AliITSAlignMille.cxx:456
 AliITSAlignMille.cxx:457
 AliITSAlignMille.cxx:458
 AliITSAlignMille.cxx:459
 AliITSAlignMille.cxx:460
 AliITSAlignMille.cxx:461
 AliITSAlignMille.cxx:462
 AliITSAlignMille.cxx:463
 AliITSAlignMille.cxx:464
 AliITSAlignMille.cxx:465
 AliITSAlignMille.cxx:466
 AliITSAlignMille.cxx:467
 AliITSAlignMille.cxx:468
 AliITSAlignMille.cxx:469
 AliITSAlignMille.cxx:470
 AliITSAlignMille.cxx:471
 AliITSAlignMille.cxx:472
 AliITSAlignMille.cxx:473
 AliITSAlignMille.cxx:474
 AliITSAlignMille.cxx:475
 AliITSAlignMille.cxx:476
 AliITSAlignMille.cxx:477
 AliITSAlignMille.cxx:478
 AliITSAlignMille.cxx:479
 AliITSAlignMille.cxx:480
 AliITSAlignMille.cxx:481
 AliITSAlignMille.cxx:482
 AliITSAlignMille.cxx:483
 AliITSAlignMille.cxx:484
 AliITSAlignMille.cxx:485
 AliITSAlignMille.cxx:486
 AliITSAlignMille.cxx:487
 AliITSAlignMille.cxx:488
 AliITSAlignMille.cxx:489
 AliITSAlignMille.cxx:490
 AliITSAlignMille.cxx:491
 AliITSAlignMille.cxx:492
 AliITSAlignMille.cxx:493
 AliITSAlignMille.cxx:494
 AliITSAlignMille.cxx:495
 AliITSAlignMille.cxx:496
 AliITSAlignMille.cxx:497
 AliITSAlignMille.cxx:498
 AliITSAlignMille.cxx:499
 AliITSAlignMille.cxx:500
 AliITSAlignMille.cxx:501
 AliITSAlignMille.cxx:502
 AliITSAlignMille.cxx:503
 AliITSAlignMille.cxx:504
 AliITSAlignMille.cxx:505
 AliITSAlignMille.cxx:506
 AliITSAlignMille.cxx:507
 AliITSAlignMille.cxx:508
 AliITSAlignMille.cxx:509
 AliITSAlignMille.cxx:510
 AliITSAlignMille.cxx:511
 AliITSAlignMille.cxx:512
 AliITSAlignMille.cxx:513
 AliITSAlignMille.cxx:514
 AliITSAlignMille.cxx:515
 AliITSAlignMille.cxx:516
 AliITSAlignMille.cxx:517
 AliITSAlignMille.cxx:518
 AliITSAlignMille.cxx:519
 AliITSAlignMille.cxx:520
 AliITSAlignMille.cxx:521
 AliITSAlignMille.cxx:522
 AliITSAlignMille.cxx:523
 AliITSAlignMille.cxx:524
 AliITSAlignMille.cxx:525
 AliITSAlignMille.cxx:526
 AliITSAlignMille.cxx:527
 AliITSAlignMille.cxx:528
 AliITSAlignMille.cxx:529
 AliITSAlignMille.cxx:530
 AliITSAlignMille.cxx:531
 AliITSAlignMille.cxx:532
 AliITSAlignMille.cxx:533
 AliITSAlignMille.cxx:534
 AliITSAlignMille.cxx:535
 AliITSAlignMille.cxx:536
 AliITSAlignMille.cxx:537
 AliITSAlignMille.cxx:538
 AliITSAlignMille.cxx:539
 AliITSAlignMille.cxx:540
 AliITSAlignMille.cxx:541
 AliITSAlignMille.cxx:542
 AliITSAlignMille.cxx:543
 AliITSAlignMille.cxx:544
 AliITSAlignMille.cxx:545
 AliITSAlignMille.cxx:546
 AliITSAlignMille.cxx:547
 AliITSAlignMille.cxx:548
 AliITSAlignMille.cxx:549
 AliITSAlignMille.cxx:550
 AliITSAlignMille.cxx:551
 AliITSAlignMille.cxx:552
 AliITSAlignMille.cxx:553
 AliITSAlignMille.cxx:554
 AliITSAlignMille.cxx:555
 AliITSAlignMille.cxx:556
 AliITSAlignMille.cxx:557
 AliITSAlignMille.cxx:558
 AliITSAlignMille.cxx:559
 AliITSAlignMille.cxx:560
 AliITSAlignMille.cxx:561
 AliITSAlignMille.cxx:562
 AliITSAlignMille.cxx:563
 AliITSAlignMille.cxx:564
 AliITSAlignMille.cxx:565
 AliITSAlignMille.cxx:566
 AliITSAlignMille.cxx:567
 AliITSAlignMille.cxx:568
 AliITSAlignMille.cxx:569
 AliITSAlignMille.cxx:570
 AliITSAlignMille.cxx:571
 AliITSAlignMille.cxx:572
 AliITSAlignMille.cxx:573
 AliITSAlignMille.cxx:574
 AliITSAlignMille.cxx:575
 AliITSAlignMille.cxx:576
 AliITSAlignMille.cxx:577
 AliITSAlignMille.cxx:578
 AliITSAlignMille.cxx:579
 AliITSAlignMille.cxx:580
 AliITSAlignMille.cxx:581
 AliITSAlignMille.cxx:582
 AliITSAlignMille.cxx:583
 AliITSAlignMille.cxx:584
 AliITSAlignMille.cxx:585
 AliITSAlignMille.cxx:586
 AliITSAlignMille.cxx:587
 AliITSAlignMille.cxx:588
 AliITSAlignMille.cxx:589
 AliITSAlignMille.cxx:590
 AliITSAlignMille.cxx:591
 AliITSAlignMille.cxx:592
 AliITSAlignMille.cxx:593
 AliITSAlignMille.cxx:594
 AliITSAlignMille.cxx:595
 AliITSAlignMille.cxx:596
 AliITSAlignMille.cxx:597
 AliITSAlignMille.cxx:598
 AliITSAlignMille.cxx:599
 AliITSAlignMille.cxx:600
 AliITSAlignMille.cxx:601
 AliITSAlignMille.cxx:602
 AliITSAlignMille.cxx:603
 AliITSAlignMille.cxx:604
 AliITSAlignMille.cxx:605
 AliITSAlignMille.cxx:606
 AliITSAlignMille.cxx:607
 AliITSAlignMille.cxx:608
 AliITSAlignMille.cxx:609
 AliITSAlignMille.cxx:610
 AliITSAlignMille.cxx:611
 AliITSAlignMille.cxx:612
 AliITSAlignMille.cxx:613
 AliITSAlignMille.cxx:614
 AliITSAlignMille.cxx:615
 AliITSAlignMille.cxx:616
 AliITSAlignMille.cxx:617
 AliITSAlignMille.cxx:618
 AliITSAlignMille.cxx:619
 AliITSAlignMille.cxx:620
 AliITSAlignMille.cxx:621
 AliITSAlignMille.cxx:622
 AliITSAlignMille.cxx:623
 AliITSAlignMille.cxx:624
 AliITSAlignMille.cxx:625
 AliITSAlignMille.cxx:626
 AliITSAlignMille.cxx:627
 AliITSAlignMille.cxx:628
 AliITSAlignMille.cxx:629
 AliITSAlignMille.cxx:630
 AliITSAlignMille.cxx:631
 AliITSAlignMille.cxx:632
 AliITSAlignMille.cxx:633
 AliITSAlignMille.cxx:634
 AliITSAlignMille.cxx:635
 AliITSAlignMille.cxx:636
 AliITSAlignMille.cxx:637
 AliITSAlignMille.cxx:638
 AliITSAlignMille.cxx:639
 AliITSAlignMille.cxx:640
 AliITSAlignMille.cxx:641
 AliITSAlignMille.cxx:642
 AliITSAlignMille.cxx:643
 AliITSAlignMille.cxx:644
 AliITSAlignMille.cxx:645
 AliITSAlignMille.cxx:646
 AliITSAlignMille.cxx:647
 AliITSAlignMille.cxx:648
 AliITSAlignMille.cxx:649
 AliITSAlignMille.cxx:650
 AliITSAlignMille.cxx:651
 AliITSAlignMille.cxx:652
 AliITSAlignMille.cxx:653
 AliITSAlignMille.cxx:654
 AliITSAlignMille.cxx:655
 AliITSAlignMille.cxx:656
 AliITSAlignMille.cxx:657
 AliITSAlignMille.cxx:658
 AliITSAlignMille.cxx:659
 AliITSAlignMille.cxx:660
 AliITSAlignMille.cxx:661
 AliITSAlignMille.cxx:662
 AliITSAlignMille.cxx:663
 AliITSAlignMille.cxx:664
 AliITSAlignMille.cxx:665
 AliITSAlignMille.cxx:666
 AliITSAlignMille.cxx:667
 AliITSAlignMille.cxx:668
 AliITSAlignMille.cxx:669
 AliITSAlignMille.cxx:670
 AliITSAlignMille.cxx:671
 AliITSAlignMille.cxx:672
 AliITSAlignMille.cxx:673
 AliITSAlignMille.cxx:674
 AliITSAlignMille.cxx:675
 AliITSAlignMille.cxx:676
 AliITSAlignMille.cxx:677
 AliITSAlignMille.cxx:678
 AliITSAlignMille.cxx:679
 AliITSAlignMille.cxx:680
 AliITSAlignMille.cxx:681
 AliITSAlignMille.cxx:682
 AliITSAlignMille.cxx:683
 AliITSAlignMille.cxx:684
 AliITSAlignMille.cxx:685
 AliITSAlignMille.cxx:686
 AliITSAlignMille.cxx:687
 AliITSAlignMille.cxx:688
 AliITSAlignMille.cxx:689
 AliITSAlignMille.cxx:690
 AliITSAlignMille.cxx:691
 AliITSAlignMille.cxx:692
 AliITSAlignMille.cxx:693
 AliITSAlignMille.cxx:694
 AliITSAlignMille.cxx:695
 AliITSAlignMille.cxx:696
 AliITSAlignMille.cxx:697
 AliITSAlignMille.cxx:698
 AliITSAlignMille.cxx:699
 AliITSAlignMille.cxx:700
 AliITSAlignMille.cxx:701
 AliITSAlignMille.cxx:702
 AliITSAlignMille.cxx:703
 AliITSAlignMille.cxx:704
 AliITSAlignMille.cxx:705
 AliITSAlignMille.cxx:706
 AliITSAlignMille.cxx:707
 AliITSAlignMille.cxx:708
 AliITSAlignMille.cxx:709
 AliITSAlignMille.cxx:710
 AliITSAlignMille.cxx:711
 AliITSAlignMille.cxx:712
 AliITSAlignMille.cxx:713
 AliITSAlignMille.cxx:714
 AliITSAlignMille.cxx:715
 AliITSAlignMille.cxx:716
 AliITSAlignMille.cxx:717
 AliITSAlignMille.cxx:718
 AliITSAlignMille.cxx:719
 AliITSAlignMille.cxx:720
 AliITSAlignMille.cxx:721
 AliITSAlignMille.cxx:722
 AliITSAlignMille.cxx:723
 AliITSAlignMille.cxx:724
 AliITSAlignMille.cxx:725
 AliITSAlignMille.cxx:726
 AliITSAlignMille.cxx:727
 AliITSAlignMille.cxx:728
 AliITSAlignMille.cxx:729
 AliITSAlignMille.cxx:730
 AliITSAlignMille.cxx:731
 AliITSAlignMille.cxx:732
 AliITSAlignMille.cxx:733
 AliITSAlignMille.cxx:734
 AliITSAlignMille.cxx:735
 AliITSAlignMille.cxx:736
 AliITSAlignMille.cxx:737
 AliITSAlignMille.cxx:738
 AliITSAlignMille.cxx:739
 AliITSAlignMille.cxx:740
 AliITSAlignMille.cxx:741
 AliITSAlignMille.cxx:742
 AliITSAlignMille.cxx:743
 AliITSAlignMille.cxx:744
 AliITSAlignMille.cxx:745
 AliITSAlignMille.cxx:746
 AliITSAlignMille.cxx:747
 AliITSAlignMille.cxx:748
 AliITSAlignMille.cxx:749
 AliITSAlignMille.cxx:750
 AliITSAlignMille.cxx:751
 AliITSAlignMille.cxx:752
 AliITSAlignMille.cxx:753
 AliITSAlignMille.cxx:754
 AliITSAlignMille.cxx:755
 AliITSAlignMille.cxx:756
 AliITSAlignMille.cxx:757
 AliITSAlignMille.cxx:758
 AliITSAlignMille.cxx:759
 AliITSAlignMille.cxx:760
 AliITSAlignMille.cxx:761
 AliITSAlignMille.cxx:762
 AliITSAlignMille.cxx:763
 AliITSAlignMille.cxx:764
 AliITSAlignMille.cxx:765
 AliITSAlignMille.cxx:766
 AliITSAlignMille.cxx:767
 AliITSAlignMille.cxx:768
 AliITSAlignMille.cxx:769
 AliITSAlignMille.cxx:770
 AliITSAlignMille.cxx:771
 AliITSAlignMille.cxx:772
 AliITSAlignMille.cxx:773
 AliITSAlignMille.cxx:774
 AliITSAlignMille.cxx:775
 AliITSAlignMille.cxx:776
 AliITSAlignMille.cxx:777
 AliITSAlignMille.cxx:778
 AliITSAlignMille.cxx:779
 AliITSAlignMille.cxx:780
 AliITSAlignMille.cxx:781
 AliITSAlignMille.cxx:782
 AliITSAlignMille.cxx:783
 AliITSAlignMille.cxx:784
 AliITSAlignMille.cxx:785
 AliITSAlignMille.cxx:786
 AliITSAlignMille.cxx:787
 AliITSAlignMille.cxx:788
 AliITSAlignMille.cxx:789
 AliITSAlignMille.cxx:790
 AliITSAlignMille.cxx:791
 AliITSAlignMille.cxx:792
 AliITSAlignMille.cxx:793
 AliITSAlignMille.cxx:794
 AliITSAlignMille.cxx:795
 AliITSAlignMille.cxx:796
 AliITSAlignMille.cxx:797
 AliITSAlignMille.cxx:798
 AliITSAlignMille.cxx:799
 AliITSAlignMille.cxx:800
 AliITSAlignMille.cxx:801
 AliITSAlignMille.cxx:802
 AliITSAlignMille.cxx:803
 AliITSAlignMille.cxx:804
 AliITSAlignMille.cxx:805
 AliITSAlignMille.cxx:806
 AliITSAlignMille.cxx:807
 AliITSAlignMille.cxx:808
 AliITSAlignMille.cxx:809
 AliITSAlignMille.cxx:810
 AliITSAlignMille.cxx:811
 AliITSAlignMille.cxx:812
 AliITSAlignMille.cxx:813
 AliITSAlignMille.cxx:814
 AliITSAlignMille.cxx:815
 AliITSAlignMille.cxx:816
 AliITSAlignMille.cxx:817
 AliITSAlignMille.cxx:818
 AliITSAlignMille.cxx:819
 AliITSAlignMille.cxx:820
 AliITSAlignMille.cxx:821
 AliITSAlignMille.cxx:822
 AliITSAlignMille.cxx:823
 AliITSAlignMille.cxx:824
 AliITSAlignMille.cxx:825
 AliITSAlignMille.cxx:826
 AliITSAlignMille.cxx:827
 AliITSAlignMille.cxx:828
 AliITSAlignMille.cxx:829
 AliITSAlignMille.cxx:830
 AliITSAlignMille.cxx:831
 AliITSAlignMille.cxx:832
 AliITSAlignMille.cxx:833
 AliITSAlignMille.cxx:834
 AliITSAlignMille.cxx:835
 AliITSAlignMille.cxx:836
 AliITSAlignMille.cxx:837
 AliITSAlignMille.cxx:838
 AliITSAlignMille.cxx:839
 AliITSAlignMille.cxx:840
 AliITSAlignMille.cxx:841
 AliITSAlignMille.cxx:842
 AliITSAlignMille.cxx:843
 AliITSAlignMille.cxx:844
 AliITSAlignMille.cxx:845
 AliITSAlignMille.cxx:846
 AliITSAlignMille.cxx:847
 AliITSAlignMille.cxx:848
 AliITSAlignMille.cxx:849
 AliITSAlignMille.cxx:850
 AliITSAlignMille.cxx:851
 AliITSAlignMille.cxx:852
 AliITSAlignMille.cxx:853
 AliITSAlignMille.cxx:854
 AliITSAlignMille.cxx:855
 AliITSAlignMille.cxx:856
 AliITSAlignMille.cxx:857
 AliITSAlignMille.cxx:858
 AliITSAlignMille.cxx:859
 AliITSAlignMille.cxx:860
 AliITSAlignMille.cxx:861
 AliITSAlignMille.cxx:862
 AliITSAlignMille.cxx:863
 AliITSAlignMille.cxx:864
 AliITSAlignMille.cxx:865
 AliITSAlignMille.cxx:866
 AliITSAlignMille.cxx:867
 AliITSAlignMille.cxx:868
 AliITSAlignMille.cxx:869
 AliITSAlignMille.cxx:870
 AliITSAlignMille.cxx:871
 AliITSAlignMille.cxx:872
 AliITSAlignMille.cxx:873
 AliITSAlignMille.cxx:874
 AliITSAlignMille.cxx:875
 AliITSAlignMille.cxx:876
 AliITSAlignMille.cxx:877
 AliITSAlignMille.cxx:878
 AliITSAlignMille.cxx:879
 AliITSAlignMille.cxx:880
 AliITSAlignMille.cxx:881
 AliITSAlignMille.cxx:882
 AliITSAlignMille.cxx:883
 AliITSAlignMille.cxx:884
 AliITSAlignMille.cxx:885
 AliITSAlignMille.cxx:886
 AliITSAlignMille.cxx:887
 AliITSAlignMille.cxx:888
 AliITSAlignMille.cxx:889
 AliITSAlignMille.cxx:890
 AliITSAlignMille.cxx:891
 AliITSAlignMille.cxx:892
 AliITSAlignMille.cxx:893
 AliITSAlignMille.cxx:894
 AliITSAlignMille.cxx:895
 AliITSAlignMille.cxx:896
 AliITSAlignMille.cxx:897
 AliITSAlignMille.cxx:898
 AliITSAlignMille.cxx:899
 AliITSAlignMille.cxx:900
 AliITSAlignMille.cxx:901
 AliITSAlignMille.cxx:902
 AliITSAlignMille.cxx:903
 AliITSAlignMille.cxx:904
 AliITSAlignMille.cxx:905
 AliITSAlignMille.cxx:906
 AliITSAlignMille.cxx:907
 AliITSAlignMille.cxx:908
 AliITSAlignMille.cxx:909
 AliITSAlignMille.cxx:910
 AliITSAlignMille.cxx:911
 AliITSAlignMille.cxx:912
 AliITSAlignMille.cxx:913
 AliITSAlignMille.cxx:914
 AliITSAlignMille.cxx:915
 AliITSAlignMille.cxx:916
 AliITSAlignMille.cxx:917
 AliITSAlignMille.cxx:918
 AliITSAlignMille.cxx:919
 AliITSAlignMille.cxx:920
 AliITSAlignMille.cxx:921
 AliITSAlignMille.cxx:922
 AliITSAlignMille.cxx:923
 AliITSAlignMille.cxx:924
 AliITSAlignMille.cxx:925
 AliITSAlignMille.cxx:926
 AliITSAlignMille.cxx:927
 AliITSAlignMille.cxx:928
 AliITSAlignMille.cxx:929
 AliITSAlignMille.cxx:930
 AliITSAlignMille.cxx:931
 AliITSAlignMille.cxx:932
 AliITSAlignMille.cxx:933
 AliITSAlignMille.cxx:934
 AliITSAlignMille.cxx:935
 AliITSAlignMille.cxx:936
 AliITSAlignMille.cxx:937
 AliITSAlignMille.cxx:938
 AliITSAlignMille.cxx:939
 AliITSAlignMille.cxx:940
 AliITSAlignMille.cxx:941
 AliITSAlignMille.cxx:942
 AliITSAlignMille.cxx:943
 AliITSAlignMille.cxx:944
 AliITSAlignMille.cxx:945
 AliITSAlignMille.cxx:946
 AliITSAlignMille.cxx:947
 AliITSAlignMille.cxx:948
 AliITSAlignMille.cxx:949
 AliITSAlignMille.cxx:950
 AliITSAlignMille.cxx:951
 AliITSAlignMille.cxx:952
 AliITSAlignMille.cxx:953
 AliITSAlignMille.cxx:954
 AliITSAlignMille.cxx:955
 AliITSAlignMille.cxx:956
 AliITSAlignMille.cxx:957
 AliITSAlignMille.cxx:958
 AliITSAlignMille.cxx:959
 AliITSAlignMille.cxx:960
 AliITSAlignMille.cxx:961
 AliITSAlignMille.cxx:962
 AliITSAlignMille.cxx:963
 AliITSAlignMille.cxx:964
 AliITSAlignMille.cxx:965
 AliITSAlignMille.cxx:966
 AliITSAlignMille.cxx:967
 AliITSAlignMille.cxx:968
 AliITSAlignMille.cxx:969
 AliITSAlignMille.cxx:970
 AliITSAlignMille.cxx:971
 AliITSAlignMille.cxx:972
 AliITSAlignMille.cxx:973
 AliITSAlignMille.cxx:974
 AliITSAlignMille.cxx:975
 AliITSAlignMille.cxx:976
 AliITSAlignMille.cxx:977
 AliITSAlignMille.cxx:978
 AliITSAlignMille.cxx:979
 AliITSAlignMille.cxx:980
 AliITSAlignMille.cxx:981
 AliITSAlignMille.cxx:982
 AliITSAlignMille.cxx:983
 AliITSAlignMille.cxx:984
 AliITSAlignMille.cxx:985
 AliITSAlignMille.cxx:986
 AliITSAlignMille.cxx:987
 AliITSAlignMille.cxx:988
 AliITSAlignMille.cxx:989
 AliITSAlignMille.cxx:990
 AliITSAlignMille.cxx:991
 AliITSAlignMille.cxx:992
 AliITSAlignMille.cxx:993
 AliITSAlignMille.cxx:994
 AliITSAlignMille.cxx:995
 AliITSAlignMille.cxx:996
 AliITSAlignMille.cxx:997
 AliITSAlignMille.cxx:998
 AliITSAlignMille.cxx:999
 AliITSAlignMille.cxx:1000
 AliITSAlignMille.cxx:1001
 AliITSAlignMille.cxx:1002
 AliITSAlignMille.cxx:1003
 AliITSAlignMille.cxx:1004
 AliITSAlignMille.cxx:1005
 AliITSAlignMille.cxx:1006
 AliITSAlignMille.cxx:1007
 AliITSAlignMille.cxx:1008
 AliITSAlignMille.cxx:1009
 AliITSAlignMille.cxx:1010
 AliITSAlignMille.cxx:1011
 AliITSAlignMille.cxx:1012
 AliITSAlignMille.cxx:1013
 AliITSAlignMille.cxx:1014
 AliITSAlignMille.cxx:1015
 AliITSAlignMille.cxx:1016
 AliITSAlignMille.cxx:1017
 AliITSAlignMille.cxx:1018
 AliITSAlignMille.cxx:1019
 AliITSAlignMille.cxx:1020
 AliITSAlignMille.cxx:1021
 AliITSAlignMille.cxx:1022
 AliITSAlignMille.cxx:1023
 AliITSAlignMille.cxx:1024
 AliITSAlignMille.cxx:1025
 AliITSAlignMille.cxx:1026
 AliITSAlignMille.cxx:1027
 AliITSAlignMille.cxx:1028
 AliITSAlignMille.cxx:1029
 AliITSAlignMille.cxx:1030
 AliITSAlignMille.cxx:1031
 AliITSAlignMille.cxx:1032
 AliITSAlignMille.cxx:1033
 AliITSAlignMille.cxx:1034
 AliITSAlignMille.cxx:1035
 AliITSAlignMille.cxx:1036
 AliITSAlignMille.cxx:1037
 AliITSAlignMille.cxx:1038
 AliITSAlignMille.cxx:1039
 AliITSAlignMille.cxx:1040
 AliITSAlignMille.cxx:1041
 AliITSAlignMille.cxx:1042
 AliITSAlignMille.cxx:1043
 AliITSAlignMille.cxx:1044
 AliITSAlignMille.cxx:1045
 AliITSAlignMille.cxx:1046
 AliITSAlignMille.cxx:1047
 AliITSAlignMille.cxx:1048
 AliITSAlignMille.cxx:1049
 AliITSAlignMille.cxx:1050
 AliITSAlignMille.cxx:1051
 AliITSAlignMille.cxx:1052
 AliITSAlignMille.cxx:1053
 AliITSAlignMille.cxx:1054
 AliITSAlignMille.cxx:1055
 AliITSAlignMille.cxx:1056
 AliITSAlignMille.cxx:1057
 AliITSAlignMille.cxx:1058
 AliITSAlignMille.cxx:1059
 AliITSAlignMille.cxx:1060
 AliITSAlignMille.cxx:1061
 AliITSAlignMille.cxx:1062
 AliITSAlignMille.cxx:1063
 AliITSAlignMille.cxx:1064
 AliITSAlignMille.cxx:1065
 AliITSAlignMille.cxx:1066
 AliITSAlignMille.cxx:1067
 AliITSAlignMille.cxx:1068
 AliITSAlignMille.cxx:1069
 AliITSAlignMille.cxx:1070
 AliITSAlignMille.cxx:1071
 AliITSAlignMille.cxx:1072
 AliITSAlignMille.cxx:1073
 AliITSAlignMille.cxx:1074
 AliITSAlignMille.cxx:1075
 AliITSAlignMille.cxx:1076
 AliITSAlignMille.cxx:1077
 AliITSAlignMille.cxx:1078
 AliITSAlignMille.cxx:1079
 AliITSAlignMille.cxx:1080
 AliITSAlignMille.cxx:1081
 AliITSAlignMille.cxx:1082
 AliITSAlignMille.cxx:1083
 AliITSAlignMille.cxx:1084
 AliITSAlignMille.cxx:1085
 AliITSAlignMille.cxx:1086
 AliITSAlignMille.cxx:1087
 AliITSAlignMille.cxx:1088
 AliITSAlignMille.cxx:1089
 AliITSAlignMille.cxx:1090
 AliITSAlignMille.cxx:1091
 AliITSAlignMille.cxx:1092
 AliITSAlignMille.cxx:1093
 AliITSAlignMille.cxx:1094
 AliITSAlignMille.cxx:1095
 AliITSAlignMille.cxx:1096
 AliITSAlignMille.cxx:1097
 AliITSAlignMille.cxx:1098
 AliITSAlignMille.cxx:1099
 AliITSAlignMille.cxx:1100
 AliITSAlignMille.cxx:1101
 AliITSAlignMille.cxx:1102
 AliITSAlignMille.cxx:1103
 AliITSAlignMille.cxx:1104
 AliITSAlignMille.cxx:1105
 AliITSAlignMille.cxx:1106
 AliITSAlignMille.cxx:1107
 AliITSAlignMille.cxx:1108
 AliITSAlignMille.cxx:1109
 AliITSAlignMille.cxx:1110
 AliITSAlignMille.cxx:1111
 AliITSAlignMille.cxx:1112
 AliITSAlignMille.cxx:1113
 AliITSAlignMille.cxx:1114
 AliITSAlignMille.cxx:1115
 AliITSAlignMille.cxx:1116
 AliITSAlignMille.cxx:1117
 AliITSAlignMille.cxx:1118
 AliITSAlignMille.cxx:1119
 AliITSAlignMille.cxx:1120
 AliITSAlignMille.cxx:1121
 AliITSAlignMille.cxx:1122
 AliITSAlignMille.cxx:1123
 AliITSAlignMille.cxx:1124
 AliITSAlignMille.cxx:1125
 AliITSAlignMille.cxx:1126
 AliITSAlignMille.cxx:1127
 AliITSAlignMille.cxx:1128
 AliITSAlignMille.cxx:1129
 AliITSAlignMille.cxx:1130
 AliITSAlignMille.cxx:1131
 AliITSAlignMille.cxx:1132
 AliITSAlignMille.cxx:1133
 AliITSAlignMille.cxx:1134
 AliITSAlignMille.cxx:1135
 AliITSAlignMille.cxx:1136
 AliITSAlignMille.cxx:1137
 AliITSAlignMille.cxx:1138
 AliITSAlignMille.cxx:1139
 AliITSAlignMille.cxx:1140
 AliITSAlignMille.cxx:1141
 AliITSAlignMille.cxx:1142
 AliITSAlignMille.cxx:1143
 AliITSAlignMille.cxx:1144
 AliITSAlignMille.cxx:1145
 AliITSAlignMille.cxx:1146
 AliITSAlignMille.cxx:1147
 AliITSAlignMille.cxx:1148
 AliITSAlignMille.cxx:1149
 AliITSAlignMille.cxx:1150
 AliITSAlignMille.cxx:1151
 AliITSAlignMille.cxx:1152
 AliITSAlignMille.cxx:1153
 AliITSAlignMille.cxx:1154
 AliITSAlignMille.cxx:1155
 AliITSAlignMille.cxx:1156
 AliITSAlignMille.cxx:1157
 AliITSAlignMille.cxx:1158
 AliITSAlignMille.cxx:1159
 AliITSAlignMille.cxx:1160
 AliITSAlignMille.cxx:1161
 AliITSAlignMille.cxx:1162
 AliITSAlignMille.cxx:1163
 AliITSAlignMille.cxx:1164
 AliITSAlignMille.cxx:1165
 AliITSAlignMille.cxx:1166
 AliITSAlignMille.cxx:1167
 AliITSAlignMille.cxx:1168
 AliITSAlignMille.cxx:1169
 AliITSAlignMille.cxx:1170
 AliITSAlignMille.cxx:1171
 AliITSAlignMille.cxx:1172
 AliITSAlignMille.cxx:1173
 AliITSAlignMille.cxx:1174
 AliITSAlignMille.cxx:1175
 AliITSAlignMille.cxx:1176
 AliITSAlignMille.cxx:1177
 AliITSAlignMille.cxx:1178
 AliITSAlignMille.cxx:1179
 AliITSAlignMille.cxx:1180
 AliITSAlignMille.cxx:1181
 AliITSAlignMille.cxx:1182
 AliITSAlignMille.cxx:1183
 AliITSAlignMille.cxx:1184
 AliITSAlignMille.cxx:1185
 AliITSAlignMille.cxx:1186
 AliITSAlignMille.cxx:1187
 AliITSAlignMille.cxx:1188
 AliITSAlignMille.cxx:1189
 AliITSAlignMille.cxx:1190
 AliITSAlignMille.cxx:1191
 AliITSAlignMille.cxx:1192
 AliITSAlignMille.cxx:1193
 AliITSAlignMille.cxx:1194
 AliITSAlignMille.cxx:1195
 AliITSAlignMille.cxx:1196
 AliITSAlignMille.cxx:1197
 AliITSAlignMille.cxx:1198
 AliITSAlignMille.cxx:1199
 AliITSAlignMille.cxx:1200
 AliITSAlignMille.cxx:1201
 AliITSAlignMille.cxx:1202
 AliITSAlignMille.cxx:1203
 AliITSAlignMille.cxx:1204
 AliITSAlignMille.cxx:1205
 AliITSAlignMille.cxx:1206
 AliITSAlignMille.cxx:1207
 AliITSAlignMille.cxx:1208
 AliITSAlignMille.cxx:1209
 AliITSAlignMille.cxx:1210
 AliITSAlignMille.cxx:1211
 AliITSAlignMille.cxx:1212
 AliITSAlignMille.cxx:1213
 AliITSAlignMille.cxx:1214
 AliITSAlignMille.cxx:1215
 AliITSAlignMille.cxx:1216
 AliITSAlignMille.cxx:1217
 AliITSAlignMille.cxx:1218
 AliITSAlignMille.cxx:1219
 AliITSAlignMille.cxx:1220
 AliITSAlignMille.cxx:1221
 AliITSAlignMille.cxx:1222
 AliITSAlignMille.cxx:1223
 AliITSAlignMille.cxx:1224
 AliITSAlignMille.cxx:1225
 AliITSAlignMille.cxx:1226
 AliITSAlignMille.cxx:1227
 AliITSAlignMille.cxx:1228
 AliITSAlignMille.cxx:1229
 AliITSAlignMille.cxx:1230
 AliITSAlignMille.cxx:1231
 AliITSAlignMille.cxx:1232
 AliITSAlignMille.cxx:1233
 AliITSAlignMille.cxx:1234
 AliITSAlignMille.cxx:1235
 AliITSAlignMille.cxx:1236
 AliITSAlignMille.cxx:1237
 AliITSAlignMille.cxx:1238
 AliITSAlignMille.cxx:1239
 AliITSAlignMille.cxx:1240
 AliITSAlignMille.cxx:1241
 AliITSAlignMille.cxx:1242
 AliITSAlignMille.cxx:1243
 AliITSAlignMille.cxx:1244
 AliITSAlignMille.cxx:1245
 AliITSAlignMille.cxx:1246
 AliITSAlignMille.cxx:1247
 AliITSAlignMille.cxx:1248
 AliITSAlignMille.cxx:1249
 AliITSAlignMille.cxx:1250
 AliITSAlignMille.cxx:1251
 AliITSAlignMille.cxx:1252
 AliITSAlignMille.cxx:1253
 AliITSAlignMille.cxx:1254
 AliITSAlignMille.cxx:1255
 AliITSAlignMille.cxx:1256
 AliITSAlignMille.cxx:1257
 AliITSAlignMille.cxx:1258
 AliITSAlignMille.cxx:1259
 AliITSAlignMille.cxx:1260
 AliITSAlignMille.cxx:1261
 AliITSAlignMille.cxx:1262
 AliITSAlignMille.cxx:1263
 AliITSAlignMille.cxx:1264
 AliITSAlignMille.cxx:1265
 AliITSAlignMille.cxx:1266
 AliITSAlignMille.cxx:1267
 AliITSAlignMille.cxx:1268
 AliITSAlignMille.cxx:1269
 AliITSAlignMille.cxx:1270
 AliITSAlignMille.cxx:1271
 AliITSAlignMille.cxx:1272
 AliITSAlignMille.cxx:1273
 AliITSAlignMille.cxx:1274
 AliITSAlignMille.cxx:1275
 AliITSAlignMille.cxx:1276
 AliITSAlignMille.cxx:1277
 AliITSAlignMille.cxx:1278
 AliITSAlignMille.cxx:1279
 AliITSAlignMille.cxx:1280
 AliITSAlignMille.cxx:1281
 AliITSAlignMille.cxx:1282
 AliITSAlignMille.cxx:1283
 AliITSAlignMille.cxx:1284
 AliITSAlignMille.cxx:1285
 AliITSAlignMille.cxx:1286
 AliITSAlignMille.cxx:1287
 AliITSAlignMille.cxx:1288
 AliITSAlignMille.cxx:1289
 AliITSAlignMille.cxx:1290
 AliITSAlignMille.cxx:1291
 AliITSAlignMille.cxx:1292
 AliITSAlignMille.cxx:1293
 AliITSAlignMille.cxx:1294
 AliITSAlignMille.cxx:1295
 AliITSAlignMille.cxx:1296
 AliITSAlignMille.cxx:1297
 AliITSAlignMille.cxx:1298
 AliITSAlignMille.cxx:1299
 AliITSAlignMille.cxx:1300
 AliITSAlignMille.cxx:1301
 AliITSAlignMille.cxx:1302
 AliITSAlignMille.cxx:1303
 AliITSAlignMille.cxx:1304
 AliITSAlignMille.cxx:1305
 AliITSAlignMille.cxx:1306
 AliITSAlignMille.cxx:1307
 AliITSAlignMille.cxx:1308
 AliITSAlignMille.cxx:1309
 AliITSAlignMille.cxx:1310
 AliITSAlignMille.cxx:1311
 AliITSAlignMille.cxx:1312
 AliITSAlignMille.cxx:1313
 AliITSAlignMille.cxx:1314
 AliITSAlignMille.cxx:1315
 AliITSAlignMille.cxx:1316
 AliITSAlignMille.cxx:1317
 AliITSAlignMille.cxx:1318
 AliITSAlignMille.cxx:1319
 AliITSAlignMille.cxx:1320
 AliITSAlignMille.cxx:1321
 AliITSAlignMille.cxx:1322
 AliITSAlignMille.cxx:1323
 AliITSAlignMille.cxx:1324
 AliITSAlignMille.cxx:1325
 AliITSAlignMille.cxx:1326
 AliITSAlignMille.cxx:1327
 AliITSAlignMille.cxx:1328
 AliITSAlignMille.cxx:1329
 AliITSAlignMille.cxx:1330
 AliITSAlignMille.cxx:1331
 AliITSAlignMille.cxx:1332
 AliITSAlignMille.cxx:1333
 AliITSAlignMille.cxx:1334
 AliITSAlignMille.cxx:1335
 AliITSAlignMille.cxx:1336
 AliITSAlignMille.cxx:1337
 AliITSAlignMille.cxx:1338
 AliITSAlignMille.cxx:1339
 AliITSAlignMille.cxx:1340
 AliITSAlignMille.cxx:1341
 AliITSAlignMille.cxx:1342
 AliITSAlignMille.cxx:1343
 AliITSAlignMille.cxx:1344
 AliITSAlignMille.cxx:1345
 AliITSAlignMille.cxx:1346
 AliITSAlignMille.cxx:1347
 AliITSAlignMille.cxx:1348
 AliITSAlignMille.cxx:1349
 AliITSAlignMille.cxx:1350
 AliITSAlignMille.cxx:1351
 AliITSAlignMille.cxx:1352
 AliITSAlignMille.cxx:1353
 AliITSAlignMille.cxx:1354
 AliITSAlignMille.cxx:1355
 AliITSAlignMille.cxx:1356
 AliITSAlignMille.cxx:1357
 AliITSAlignMille.cxx:1358
 AliITSAlignMille.cxx:1359
 AliITSAlignMille.cxx:1360
 AliITSAlignMille.cxx:1361
 AliITSAlignMille.cxx:1362
 AliITSAlignMille.cxx:1363
 AliITSAlignMille.cxx:1364
 AliITSAlignMille.cxx:1365
 AliITSAlignMille.cxx:1366
 AliITSAlignMille.cxx:1367
 AliITSAlignMille.cxx:1368
 AliITSAlignMille.cxx:1369
 AliITSAlignMille.cxx:1370
 AliITSAlignMille.cxx:1371
 AliITSAlignMille.cxx:1372
 AliITSAlignMille.cxx:1373
 AliITSAlignMille.cxx:1374
 AliITSAlignMille.cxx:1375
 AliITSAlignMille.cxx:1376
 AliITSAlignMille.cxx:1377
 AliITSAlignMille.cxx:1378
 AliITSAlignMille.cxx:1379
 AliITSAlignMille.cxx:1380
 AliITSAlignMille.cxx:1381
 AliITSAlignMille.cxx:1382
 AliITSAlignMille.cxx:1383
 AliITSAlignMille.cxx:1384
 AliITSAlignMille.cxx:1385
 AliITSAlignMille.cxx:1386
 AliITSAlignMille.cxx:1387
 AliITSAlignMille.cxx:1388
 AliITSAlignMille.cxx:1389
 AliITSAlignMille.cxx:1390
 AliITSAlignMille.cxx:1391
 AliITSAlignMille.cxx:1392
 AliITSAlignMille.cxx:1393
 AliITSAlignMille.cxx:1394
 AliITSAlignMille.cxx:1395
 AliITSAlignMille.cxx:1396
 AliITSAlignMille.cxx:1397
 AliITSAlignMille.cxx:1398
 AliITSAlignMille.cxx:1399
 AliITSAlignMille.cxx:1400
 AliITSAlignMille.cxx:1401
 AliITSAlignMille.cxx:1402
 AliITSAlignMille.cxx:1403
 AliITSAlignMille.cxx:1404
 AliITSAlignMille.cxx:1405
 AliITSAlignMille.cxx:1406
 AliITSAlignMille.cxx:1407
 AliITSAlignMille.cxx:1408
 AliITSAlignMille.cxx:1409
 AliITSAlignMille.cxx:1410
 AliITSAlignMille.cxx:1411
 AliITSAlignMille.cxx:1412
 AliITSAlignMille.cxx:1413
 AliITSAlignMille.cxx:1414
 AliITSAlignMille.cxx:1415
 AliITSAlignMille.cxx:1416
 AliITSAlignMille.cxx:1417
 AliITSAlignMille.cxx:1418
 AliITSAlignMille.cxx:1419
 AliITSAlignMille.cxx:1420
 AliITSAlignMille.cxx:1421
 AliITSAlignMille.cxx:1422
 AliITSAlignMille.cxx:1423
 AliITSAlignMille.cxx:1424
 AliITSAlignMille.cxx:1425
 AliITSAlignMille.cxx:1426
 AliITSAlignMille.cxx:1427
 AliITSAlignMille.cxx:1428
 AliITSAlignMille.cxx:1429
 AliITSAlignMille.cxx:1430
 AliITSAlignMille.cxx:1431
 AliITSAlignMille.cxx:1432
 AliITSAlignMille.cxx:1433
 AliITSAlignMille.cxx:1434
 AliITSAlignMille.cxx:1435
 AliITSAlignMille.cxx:1436
 AliITSAlignMille.cxx:1437
 AliITSAlignMille.cxx:1438
 AliITSAlignMille.cxx:1439
 AliITSAlignMille.cxx:1440
 AliITSAlignMille.cxx:1441
 AliITSAlignMille.cxx:1442
 AliITSAlignMille.cxx:1443
 AliITSAlignMille.cxx:1444
 AliITSAlignMille.cxx:1445
 AliITSAlignMille.cxx:1446
 AliITSAlignMille.cxx:1447
 AliITSAlignMille.cxx:1448
 AliITSAlignMille.cxx:1449
 AliITSAlignMille.cxx:1450
 AliITSAlignMille.cxx:1451
 AliITSAlignMille.cxx:1452
 AliITSAlignMille.cxx:1453
 AliITSAlignMille.cxx:1454
 AliITSAlignMille.cxx:1455
 AliITSAlignMille.cxx:1456
 AliITSAlignMille.cxx:1457
 AliITSAlignMille.cxx:1458
 AliITSAlignMille.cxx:1459
 AliITSAlignMille.cxx:1460
 AliITSAlignMille.cxx:1461
 AliITSAlignMille.cxx:1462
 AliITSAlignMille.cxx:1463
 AliITSAlignMille.cxx:1464
 AliITSAlignMille.cxx:1465
 AliITSAlignMille.cxx:1466
 AliITSAlignMille.cxx:1467
 AliITSAlignMille.cxx:1468
 AliITSAlignMille.cxx:1469
 AliITSAlignMille.cxx:1470
 AliITSAlignMille.cxx:1471
 AliITSAlignMille.cxx:1472
 AliITSAlignMille.cxx:1473
 AliITSAlignMille.cxx:1474
 AliITSAlignMille.cxx:1475
 AliITSAlignMille.cxx:1476
 AliITSAlignMille.cxx:1477
 AliITSAlignMille.cxx:1478
 AliITSAlignMille.cxx:1479
 AliITSAlignMille.cxx:1480
 AliITSAlignMille.cxx:1481
 AliITSAlignMille.cxx:1482
 AliITSAlignMille.cxx:1483
 AliITSAlignMille.cxx:1484
 AliITSAlignMille.cxx:1485
 AliITSAlignMille.cxx:1486
 AliITSAlignMille.cxx:1487
 AliITSAlignMille.cxx:1488
 AliITSAlignMille.cxx:1489
 AliITSAlignMille.cxx:1490
 AliITSAlignMille.cxx:1491
 AliITSAlignMille.cxx:1492
 AliITSAlignMille.cxx:1493
 AliITSAlignMille.cxx:1494
 AliITSAlignMille.cxx:1495
 AliITSAlignMille.cxx:1496
 AliITSAlignMille.cxx:1497
 AliITSAlignMille.cxx:1498
 AliITSAlignMille.cxx:1499
 AliITSAlignMille.cxx:1500
 AliITSAlignMille.cxx:1501
 AliITSAlignMille.cxx:1502
 AliITSAlignMille.cxx:1503
 AliITSAlignMille.cxx:1504
 AliITSAlignMille.cxx:1505
 AliITSAlignMille.cxx:1506
 AliITSAlignMille.cxx:1507
 AliITSAlignMille.cxx:1508
 AliITSAlignMille.cxx:1509
 AliITSAlignMille.cxx:1510
 AliITSAlignMille.cxx:1511
 AliITSAlignMille.cxx:1512
 AliITSAlignMille.cxx:1513
 AliITSAlignMille.cxx:1514
 AliITSAlignMille.cxx:1515
 AliITSAlignMille.cxx:1516
 AliITSAlignMille.cxx:1517
 AliITSAlignMille.cxx:1518
 AliITSAlignMille.cxx:1519
 AliITSAlignMille.cxx:1520
 AliITSAlignMille.cxx:1521
 AliITSAlignMille.cxx:1522
 AliITSAlignMille.cxx:1523
 AliITSAlignMille.cxx:1524
 AliITSAlignMille.cxx:1525
 AliITSAlignMille.cxx:1526
 AliITSAlignMille.cxx:1527
 AliITSAlignMille.cxx:1528
 AliITSAlignMille.cxx:1529
 AliITSAlignMille.cxx:1530
 AliITSAlignMille.cxx:1531
 AliITSAlignMille.cxx:1532
 AliITSAlignMille.cxx:1533
 AliITSAlignMille.cxx:1534
 AliITSAlignMille.cxx:1535
 AliITSAlignMille.cxx:1536
 AliITSAlignMille.cxx:1537
 AliITSAlignMille.cxx:1538
 AliITSAlignMille.cxx:1539
 AliITSAlignMille.cxx:1540
 AliITSAlignMille.cxx:1541
 AliITSAlignMille.cxx:1542
 AliITSAlignMille.cxx:1543
 AliITSAlignMille.cxx:1544
 AliITSAlignMille.cxx:1545
 AliITSAlignMille.cxx:1546
 AliITSAlignMille.cxx:1547
 AliITSAlignMille.cxx:1548
 AliITSAlignMille.cxx:1549
 AliITSAlignMille.cxx:1550
 AliITSAlignMille.cxx:1551
 AliITSAlignMille.cxx:1552
 AliITSAlignMille.cxx:1553
 AliITSAlignMille.cxx:1554
 AliITSAlignMille.cxx:1555
 AliITSAlignMille.cxx:1556
 AliITSAlignMille.cxx:1557
 AliITSAlignMille.cxx:1558
 AliITSAlignMille.cxx:1559
 AliITSAlignMille.cxx:1560
 AliITSAlignMille.cxx:1561
 AliITSAlignMille.cxx:1562
 AliITSAlignMille.cxx:1563
 AliITSAlignMille.cxx:1564
 AliITSAlignMille.cxx:1565
 AliITSAlignMille.cxx:1566
 AliITSAlignMille.cxx:1567
 AliITSAlignMille.cxx:1568
 AliITSAlignMille.cxx:1569
 AliITSAlignMille.cxx:1570
 AliITSAlignMille.cxx:1571
 AliITSAlignMille.cxx:1572
 AliITSAlignMille.cxx:1573
 AliITSAlignMille.cxx:1574
 AliITSAlignMille.cxx:1575
 AliITSAlignMille.cxx:1576
 AliITSAlignMille.cxx:1577
 AliITSAlignMille.cxx:1578
 AliITSAlignMille.cxx:1579
 AliITSAlignMille.cxx:1580
 AliITSAlignMille.cxx:1581
 AliITSAlignMille.cxx:1582
 AliITSAlignMille.cxx:1583
 AliITSAlignMille.cxx:1584
 AliITSAlignMille.cxx:1585
 AliITSAlignMille.cxx:1586
 AliITSAlignMille.cxx:1587
 AliITSAlignMille.cxx:1588
 AliITSAlignMille.cxx:1589
 AliITSAlignMille.cxx:1590
 AliITSAlignMille.cxx:1591
 AliITSAlignMille.cxx:1592
 AliITSAlignMille.cxx:1593
 AliITSAlignMille.cxx:1594
 AliITSAlignMille.cxx:1595
 AliITSAlignMille.cxx:1596
 AliITSAlignMille.cxx:1597
 AliITSAlignMille.cxx:1598
 AliITSAlignMille.cxx:1599
 AliITSAlignMille.cxx:1600
 AliITSAlignMille.cxx:1601
 AliITSAlignMille.cxx:1602
 AliITSAlignMille.cxx:1603
 AliITSAlignMille.cxx:1604
 AliITSAlignMille.cxx:1605
 AliITSAlignMille.cxx:1606
 AliITSAlignMille.cxx:1607
 AliITSAlignMille.cxx:1608
 AliITSAlignMille.cxx:1609
 AliITSAlignMille.cxx:1610
 AliITSAlignMille.cxx:1611
 AliITSAlignMille.cxx:1612
 AliITSAlignMille.cxx:1613
 AliITSAlignMille.cxx:1614
 AliITSAlignMille.cxx:1615
 AliITSAlignMille.cxx:1616
 AliITSAlignMille.cxx:1617
 AliITSAlignMille.cxx:1618
 AliITSAlignMille.cxx:1619
 AliITSAlignMille.cxx:1620
 AliITSAlignMille.cxx:1621
 AliITSAlignMille.cxx:1622
 AliITSAlignMille.cxx:1623
 AliITSAlignMille.cxx:1624
 AliITSAlignMille.cxx:1625
 AliITSAlignMille.cxx:1626
 AliITSAlignMille.cxx:1627
 AliITSAlignMille.cxx:1628
 AliITSAlignMille.cxx:1629
 AliITSAlignMille.cxx:1630
 AliITSAlignMille.cxx:1631
 AliITSAlignMille.cxx:1632
 AliITSAlignMille.cxx:1633
 AliITSAlignMille.cxx:1634
 AliITSAlignMille.cxx:1635
 AliITSAlignMille.cxx:1636
 AliITSAlignMille.cxx:1637
 AliITSAlignMille.cxx:1638
 AliITSAlignMille.cxx:1639
 AliITSAlignMille.cxx:1640
 AliITSAlignMille.cxx:1641
 AliITSAlignMille.cxx:1642
 AliITSAlignMille.cxx:1643
 AliITSAlignMille.cxx:1644
 AliITSAlignMille.cxx:1645
 AliITSAlignMille.cxx:1646
 AliITSAlignMille.cxx:1647
 AliITSAlignMille.cxx:1648
 AliITSAlignMille.cxx:1649
 AliITSAlignMille.cxx:1650
 AliITSAlignMille.cxx:1651
 AliITSAlignMille.cxx:1652
 AliITSAlignMille.cxx:1653
 AliITSAlignMille.cxx:1654
 AliITSAlignMille.cxx:1655
 AliITSAlignMille.cxx:1656
 AliITSAlignMille.cxx:1657
 AliITSAlignMille.cxx:1658
 AliITSAlignMille.cxx:1659
 AliITSAlignMille.cxx:1660
 AliITSAlignMille.cxx:1661
 AliITSAlignMille.cxx:1662
 AliITSAlignMille.cxx:1663
 AliITSAlignMille.cxx:1664
 AliITSAlignMille.cxx:1665
 AliITSAlignMille.cxx:1666
 AliITSAlignMille.cxx:1667
 AliITSAlignMille.cxx:1668
 AliITSAlignMille.cxx:1669
 AliITSAlignMille.cxx:1670
 AliITSAlignMille.cxx:1671
 AliITSAlignMille.cxx:1672
 AliITSAlignMille.cxx:1673
 AliITSAlignMille.cxx:1674
 AliITSAlignMille.cxx:1675
 AliITSAlignMille.cxx:1676
 AliITSAlignMille.cxx:1677
 AliITSAlignMille.cxx:1678
 AliITSAlignMille.cxx:1679
 AliITSAlignMille.cxx:1680
 AliITSAlignMille.cxx:1681
 AliITSAlignMille.cxx:1682
 AliITSAlignMille.cxx:1683
 AliITSAlignMille.cxx:1684
 AliITSAlignMille.cxx:1685
 AliITSAlignMille.cxx:1686
 AliITSAlignMille.cxx:1687
 AliITSAlignMille.cxx:1688
 AliITSAlignMille.cxx:1689
 AliITSAlignMille.cxx:1690
 AliITSAlignMille.cxx:1691
 AliITSAlignMille.cxx:1692
 AliITSAlignMille.cxx:1693
 AliITSAlignMille.cxx:1694
 AliITSAlignMille.cxx:1695
 AliITSAlignMille.cxx:1696
 AliITSAlignMille.cxx:1697
 AliITSAlignMille.cxx:1698
 AliITSAlignMille.cxx:1699
 AliITSAlignMille.cxx:1700
 AliITSAlignMille.cxx:1701
 AliITSAlignMille.cxx:1702
 AliITSAlignMille.cxx:1703