ROOT logo
#ifndef ALIITSALIGNMILLE2_H
#define ALIITSALIGNMILLE2_H

/* Copyright(c) 2007-2009 , ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                                */

/* $Id$ */
//-----------------------------------------------------------------------------
//
//  Interface to AliMillePede2 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), ruben.shahoyan@cern.ch
//-----------------------------------------------------------------------------

#include <TString.h>
#include <TObject.h>
#include <TGeoMatrix.h>
#include <TArrayS.h>
#include <TArrayD.h>
#include "AliTrackPointArray.h"
#include "AliITSAlignMille2Module.h"

class TSystem;
class TGeoManager;
class TVirtualFitter;
class AliMillePede2;
class AliAlignObjParams;
class AliTrackFitterRieman;
class AliITSAlignMille2Constraint;
class AliITSAlignMille2ConstrArray;
class AliITSresponseSDD;
class AliITSTPArrayFit;
class AliITSsegmentationSDD;
class AliITSDriftSpeedArraySDD;
class AliITSCorrectSDDPoints;
class AliCDBEntry;
class AliESDVertex;

class AliITSAlignMille2: public TObject
{
 public:
  enum {kX,kY,kZ};
  enum {kCosmics, kCollision, kNDataType};
  enum {kNLocal=5,kMaxPoints=20,
	kNParChGeom = AliITSAlignMille2Module::kMaxParGeom,
	kNParCh     = AliITSAlignMille2Module::kMaxParTot,
	kMaxITSSensID=2197,kVtxSensID=kMaxITSSensID+1,kMaxITSSensVID=14300,kVtxSensVID=14371,
	kMinITSSupeModuleID=14336,
	kSDDoffsID=240,kNSDDmod=260};
  //
  enum {kCovIScaleBit=BIT(9),
	kSameInitDeltasBit=BIT(14),
	kSameInitSDDRespBit=BIT(15),
	kSameInitSDDVDriftBit=BIT(16),
	kSameDiamondBit=BIT(17),
	kSameInitSDDCorrMapBit=BIT(18),
	kSameInitGeomBit=BIT(19) };
  //
  enum {kDiamondIgnore,kDiamondCheckIfPrompt,kDiamondUse};
 public:
  //
  AliITSAlignMille2(const Char_t *configFilename="AliITSAlignMille.conf",TList* userInfo=0);
  virtual ~AliITSAlignMille2();
  //
  AliMillePede2* GetMillePede()                                   const {return fMillepede;}
  AliITSTPArrayFit* GetTPAFitter()                                const {return fTPAFitter;}
  //
  // configuration methods
  //
  Int_t     IsVIDDefined(UShort_t voluid)                         const;
  Int_t     IsVIDContained(UShort_t voluid)                       const;
  Int_t     IsSymDefined(const Char_t* name)                      const;
  Int_t     IsSymContained(const Char_t* name)                    const;
  Int_t     GetRequestedModID(UShort_t voluid)                    const;
  //
  Int_t     GetModuleIndex(const Char_t *symname);
  Int_t     GetModuleIndex(UShort_t voluid);
  UShort_t  GetModuleVolumeID(const Char_t *symname);
  UShort_t  GetModuleVolumeID(Int_t index);
  AliITSAlignMille2Module*  GetMilleModuleByVID(UShort_t voluid) const; // get pointer to the defined supermodule
  AliITSAlignMille2Module*  GetMilleModuleBySymName(const Char_t* symname) const; // get pointer to the defined supermodule
  AliITSAlignMille2Module*  GetMilleModuleIfContained(const Char_t* symname) const;
  AliITSAlignMille2Module*  GetMilleModule(Int_t id)             const {return (AliITSAlignMille2Module*)fMilleModule[id];}
  AliITSAlignMille2Module*  GetCurrentModule()                   const {return fCurrentModule;}
  AliITSAlignMille2Module*  GetSuperModule(Int_t id)             const {return (AliITSAlignMille2Module*)fSuperModule[id];}
  AliITSAlignMille2Module*  CreateVertexModule();
  //
  AliAlignObjParams*        GetPrealignedObject(const Char_t* symname) const;
  AliAlignObjParams*        GetConstrRefObject(const Char_t* symname) const;
  //
  void          ConvertParamsToGlobal() const;
  void          ConvertParamsToLocal()  const;
  //
  const Char_t* GetGeometryPath()                                   {return fGeometryPath.Data();}
  const Char_t* GetPreAlignmentPath()                               {return fPreDeltaPath.Data();}
  TClonesArray* GetPreAlignmentDeltas()                           const {return fPrealignment;}
  AliITSresponseSDD* GetSDDPrecalResp()                           const {return fPreRespSDD;}
  AliITSresponseSDD* GetSDDInitResp()                             const {return fIniRespSDD;}
  TObjArray*         GetSDDInitVDrift()                           const {return fIniVDriftSDD;}
  void      PrintCurrentModuleInfo()                              const {if (fCurrentModule) fCurrentModule->Print();}
  void      Print(Option_t*)                                      const;
  Bool_t    IsConfigured()                                        const {return fIsConfigured;}
  Bool_t    GetUseGlobalDelta()                                   const {return fUseGlobalDelta;}
  Bool_t    IsConstraintWrtRef()                                  const {return fConstrRef!=0;}
  Bool_t    FixedOrphans()                                        const;
  Bool_t    IsLocalYError()                                       const {return fUseLocalYErr;}
  //
  // geometry stuffs
  Int_t     GetNModules()                   const {return fNModules;}
  Int_t     GetCurrentModuleIndex()         const {return fCurrentModule ? fCurrentModule->GetIndex():-1;}
  TGeoHMatrix *GetCurrentModuleHMatrix()    const {return fCurrentModule ? fCurrentModule->GetMatrix():0;}
  Double_t *GetCurrentModuleTranslation()   const {return fCurrentModule ? fCurrentModule->GetMatrix()->GetTranslation():0;}
  Int_t     GetCurrentModuleInternalIndex() const {return fCurrentModule ? Int_t(fCurrentModule->GetUniqueID()):-1;}
  Int_t     GetTotBadLocEqPoints()          const {return fTotBadLocEqPoints;}
  Int_t     GetNConstraints()               const {return fConstraints.GetLast()+1;}
  Int_t     InitModuleParams();
  //
  // fitting methods
  AliTrackFitterRieman *GetRiemanFitter()   const                       {return fRieman;}
  AliTrackPointArray   *PrepareTrack(const AliTrackPointArray *track); 
  AliTrackPointArray *GetCurrentTrack()     const                       {return (AliTrackPointArray*)fTrack;}
  AliTrackPoint      *GetCurrentCluster()   const                       {return (AliTrackPoint*)&fCluster;}
  void      ProcessSDDPointInfo(const AliTrackPoint* pnt,Int_t sID, Int_t pntID);
  void      SetCurrentTrack(const AliTrackPointArray *atp)              {fTrack = (AliTrackPointArray*)atp;}
  void      SetCurrentCluster(const AliTrackPoint &atp);
  void      InitTrackParams(int meth=1);
  Int_t     ProcessTrack(const AliTrackPointArray *track, Double_t wgh=1.0);
  Int_t     FitTrack();
  Int_t     CheckCurrentTrack();
  Bool_t    GetFixCurvIfConstraned()        const                       {return fFixCurvIfConstraned;}
  void      SetFixCurvIfConstraned(Bool_t v=kTRUE)                      {fFixCurvIfConstraned = v;}
  //
  // methods for point unbiasing (via scaling its inverted cov.matrix)
  Bool_t    IsCovIScaleTouched()                     const {return TestBit(kCovIScaleBit);}
  void      TouchCovIScale(Bool_t v=kTRUE)                 {SetBit(kCovIScaleBit,v);}
  Float_t   GetCovIScale(Int_t ip)                   const {return ip<kMaxPoints ? fCovIScale[ip]:-1.;}
  Float_t*  GetCovIScale()                           const {return (Float_t*)fCovIScale;}
  void      SetCovIScale(Int_t ip, Float_t v=-1.)          {if (ip<kMaxPoints) fCovIScale[ip] = v; TouchCovIScale();}
  void      SetCovIScale(Float_t *v, Int_t np)             {for (int i=TMath::Min(np,kMaxPoints);i--;) fCovIScale[i]=v[i]; TouchCovIScale();}
  void      ResetCovIScale()                               {for (int i=kMaxPoints;i--;) fCovIScale[i]=-1; TouchCovIScale(kFALSE);}
  //
  Int_t     CalcIntersectionPoint(const Double_t *lpar, const Double_t *gpar);
  Int_t     CalcDerivatives(Int_t paridx, Bool_t islpar);
  void      JacobianPosGloLoc(int locid,double* jacobian);
  Double_t* GetLocalIntersectionPoint()                           const {return (Double_t*)fPintLoc;}
  Double_t* GetGlobalIntersectionPoint()                          const {return (Double_t*)fPintGlo;}
  AliTrackPointArray *SortTrack(const AliTrackPointArray *atp);
  void      SetTemporaryExcludedModule(Int_t index)                     {fTempExcludedModule=index;}
  Int_t     GetTemporaryExcludedModule()                          const {return fTempExcludedModule;}
  Double_t  GetMeasGlo(Int_t dim)                                 const {return fMeasGlo[dim];}
  Double_t  GetMeasLoc(Int_t dim)                                 const {return fMeasLoc[dim];}
  Int_t     GetCurrentLayer()                                     const;
  void      SetBField(Double_t b=0);
  void      SetTypeCosmics()                                            {fDataType = kCosmics;}
  void      SetTypeCollision()                                          {fDataType = kCollision;}
  void      SetDataType(Int_t tp=kCosmics)                              {fDataType = tp>=0&&tp< kNDataType ? tp:kCosmics;}
  void      SetUseLocalYErrors(Bool_t v=kTRUE)                          {fUseLocalYErr = v && fTPAFitter;}
  void      SetMinPointsPerSensor( Int_t n )                            {fMinPntPerSens = n>0 ? n:0;}
  Int_t     GetMinPointsPerSensor()                               const {return fMinPntPerSens;}
  void      ConstrainHelixFitPT(  Int_t q=0,Double_t pt=-1, Double_t err=-1);
  void      ConstrainHelixFitCurv(Int_t q=0,Double_t crv=-1,Double_t crverr=-1);
  void      RemoveHelixFitConstraint();
  void      SetVertexConstraint(const AliESDVertex* vtx);
  Bool_t    IsVertexSet()                                         const {return fVertexSet;}
  void      RemoveVertexConstraint()                                    {fVertexSet = kFALSE;}
  void      SetVertexSet(Bool_t v)                                      {fVertexSet = v;}
  Double_t  GetHelixContraintCharge()                             const {return fConstrCharge;}
  Double_t  GetHelixContraintPT()                                 const {return fConstrPT;}
  Double_t  GetHelixContraintPTErr()                              const {return fConstrPTErr;}
  Int_t     GetDataType()                                         const {return fDataType;}
  //
  TGeoHMatrix* GetSensorOrigMatrixSID(Int_t sid)                  const;
  TGeoHMatrix* GetSensorOrigMatrixVID(Int_t vid)                  const;
  //
  TGeoHMatrix* GetSensorCurrMatrixSID(Int_t sid)                  const;
  TGeoHMatrix* GetSensorCurrMatrixVID(Int_t vid)                  const;
  //
  AliCDBEntry* GetCDBEntry(const char* path);
  // Hierarchical contraints
  void      TieSDDVDriftsLR(AliITSAlignMille2Module* mod);
  Bool_t    PseudoParentsAllowed()                                const {return fAllowPseudoParents;}
  void      ConstrainModuleSubUnitsMean(Int_t idm, Double_t val=0, UInt_t pattern=0xff);
  void      ConstrainModuleSubUnitsMedian(Int_t idm, Double_t val=0, UInt_t pattern=0xff);
  void      ConstrainOrphansMean(Double_t val=0, UInt_t pattern=0xff);
  void      ConstrainOrphansMedian(Double_t val=0, UInt_t pattern=0xff);
  void      ConstrainLocal(const Char_t* name,Double_t *parcf,Int_t npar,Double_t val,Double_t err);
  //
  void      ApplyGaussianConstraint(const AliITSAlignMille2ConstrArray* cstr);
  void      ApplyPreConstraints();
  void      ApplyPostConstraints();
  //
  void      SetWeightPt(Double_t w=1)                                   {fWeightPt = w;}
  void      SetSDDVDCorrMult(Bool_t v=kTRUE)                            {fIsSDDVDriftMult=v;}   
  Double_t  GetWeightPt()                                         const {return fWeightPt;}
  Bool_t    IsSDDVDCorrMult()                                     const {return fIsSDDVDriftMult;}
  Bool_t    IsParModConstrained(const AliITSAlignMille2Module* mod,Int_t par, Bool_t &meanmed, Bool_t &gaussian) const;
  Bool_t    IsParModFamilyVaried(const AliITSAlignMille2Module* mod,Int_t par,Int_t depth=999)             const;
  Bool_t    IsParFamilyFree(const AliITSAlignMille2Module* mod,Int_t par,Int_t depth=999)                  const;
  //
  // millepede methods
  Int_t     GlobalFit();
  void      FixParameter(Int_t param, Double_t value);
  void      PrintGlobalParameters();
  //
  TClonesArray*      CreateDeltas();
  AliITSresponseSDD* CreateSDDResponse();
  // module specific 
  //
  Double_t  GetTDriftSDD()                  const;
  Double_t  GetVDriftSDD()                  const;
  Double_t  GetDriftSpeed(Int_t id)         const {return fDriftSpeed[id];}
  Double_t  GetDriftSpeed0(Int_t id)        const {return fDriftSpeed0[id];}
  Double_t  GetDriftTime0(Int_t id)         const {return fDriftTime0[id];}

  //
  AliITSAlignMille2Constraint* GetConstraint(Int_t i)            const {return (AliITSAlignMille2Constraint*)fConstraints.At(i);}
  AliITSAlignMille2Constraint* GetConstraint(const char* name)   const {return (AliITSAlignMille2Constraint*)fConstraints.FindObject(name);}
  //
  // debug stuffs
  void       FetchCluster(int ip)                                      {fTrack->GetPoint(fCluster,ip);fCluster.SetUniqueID(ip);} 
  void       SetLocalInitParams(const Double_t *par)                   {for (int i=kNLocal;i--;) fLocalInitParam[i]=par[i];}
  Bool_t     IsTypeCosmics()                                     const {return fDataType==kCosmics;}
  Bool_t     IsTypeCollision()                                   const {return fDataType==kCollision;}
  Double_t  *GetMeasLoc()                                        const {return (Double_t*)fMeasLoc;}
  Double_t  *GetSigmaLoc()                                       const {return (Double_t*)fSigmaLoc;}
  Double_t   GetBField()                                         const {return fBField;}
  Bool_t     IsFieldON()                                         const {return fBOn;}
  Bool_t     IsDiamondUsed()                                     const {return fUseDiamond;}
  Int_t      GetCheckDiamondPoint()                              const {return fCheckDiamondPoint;}
  void       SetCheckDiamondPoint(Int_t m=kDiamondCheckIfPrompt)       {fCheckDiamondPoint = m;}
  Bool_t     IsVertexUsed()                                      const {return fUseVertex;}
  Double_t  *GetLocalInitParam()                                 const {return (Double_t*)fLocalInitParam;}
  Double_t  *GetLocalInitParEr()                                 const {return (Double_t*)fLocalInitParEr;}
  Double_t   GetLocalDif(int par, int coor)                      const {return fDerivativeLoc[par][coor];}
  Double_t   GetGlobalDif(int par, int coor)                     const {return fDerivativeGlo[par][coor];}
  Int_t      GetPreAlignmentQualityFactor(Int_t index)           const;// if not prealign. return -1
  void       SetBug(Int_t bug) {fBug=bug;}                             // 1:SSD inversion sens.18-19
  static     AliITSAlignMille2* GetInstance()                          {return fgInstance;}

  Int_t      LoadPreSDDCalib();
  // pepo270809
  Int_t      GetExtraClustersMode() const {return fExtraClustersMode;}
  void       SetExtraClustersMode(Int_t mode) {fExtraClustersMode=mode;}  
  // endpepo270809

  // pepo
  // flag for AliITSAlignMille compatibility
  Int_t      GetMilleVersion() const {return fMilleVersion;}
  void       SetMilleVersion(Int_t m1) {fMilleVersion=m1;}
  // modified existing methods
  void      SetCurrentModule(Int_t id);
  // old methods recovered
  Int_t     IsDefined(UShort_t voluid) const {return IsVIDDefined(voluid);}
  Int_t     IsContained(UShort_t voluid) const {return IsVIDContained(voluid);}
  // moved from private to public
  void      SetRequiredPoint(Char_t* where, Int_t ndet, Int_t updw, Int_t nreqpts,Int_t runtype=-1); 
  Bool_t    InitRiemanFit();
  void      SetMinNPtsPerTrack(Int_t pts=3)  {fMinNPtsPerTrack=pts;}
  //
  Int_t     GetRunID()                                            const {return fRunID;}
  void      SetRunID(int run)                                           {fRunID = run;}
  //
  AliITSCorrectSDDPoints * GetPreCorrMapSDD()                    const {return fPreCorrMapSDD;}
  AliITSCorrectSDDPoints * GetIniCorrMapSDD()                    const {return fIniCorrMapSDD;}
  static Bool_t    IsZero(Double_t v,Double_t threshold = 1e-15)       { return TMath::Abs(v)<threshold; }
  static void      SetWordBit(UInt_t word,Int_t bitID)                 { word |= (1<<bitID);}
  static void      ResetWordBit(UInt_t word,Int_t bitID)               { word &= ~(1<<bitID);}
  static Bool_t    TestWordBit(UInt_t word,Int_t bitID)                { return (Bool_t)(word&(1<<bitID));}      
  //
 protected:
  //
  struct Mille2Data { // structure to store data for LocalEquations (X and Z, optionally Y)
    enum {kMaxLev = 7};
    Double_t fMeas[3];                // measured coordinates
    Double_t fSigma[3];               // measured errors
    Double_t fDerLoc[kNLocal][3];     // calculated local derivatives
    Int_t    fNModFilled, fNGlobFilled, fModuleID[kMaxLev]; // used module info
    Int_t    fParMilleID[AliITSAlignMille2Module::kMaxParTot*kMaxLev]; // param id's
    Double_t fDerGlo[AliITSAlignMille2Module::kMaxParTot*kMaxLev][3]; // global derivatives
  };
  //
  // configuration methods
  void      Init();
  Int_t     CacheMatricesOrig();
  Int_t     CacheMatricesCurr();
  Int_t     ProcessUserInfo(TList *userInfo=0);
  Int_t     GetPathFromUserInfo(const TList* cdbList,const char* calib,TString& path, Int_t useBit);
  Int_t     LoadConfig(const Char_t *cfile="AliITSAlignMille.conf");
  TObjArray* GetConfigRecord(FILE* stream, TString& recTitle, TString& recOpt, Bool_t rew);
  Int_t     CheckConfigRecords(FILE* stream);
  Int_t     ReloadInitCalib(TList *userInfo);
  Int_t     ReloadInitCalib();
  //
  void      BuildHierarchy();
  Int_t     LoadSuperModuleFile(const Char_t *cfile="ITSMilleSuperModules.root");
  Int_t     LoadGeometry(TString& path);
  Int_t     LoadSDDResponse(TString& path, AliITSresponseSDD *&resp);
  Int_t     LoadSDDVDrift(TString& path, TObjArray *&arr);
  Int_t     LoadSDDCorrMap(TString& path, AliITSCorrectSDDPoints *&map);
  Int_t     LoadDeltas(TString& path, TClonesArray *&arr);
  Int_t     LoadDiamond(TString& path);
  void      ResetLocalEquation();
  Int_t     ApplyToGeometry();
  //
  void      ConstrainModuleSubUnits(Int_t idm, Double_t val=0, UInt_t pattern=0xff);
  void      ConstrainOrphans(Double_t val=0,UInt_t pattern=0xff);
  void      PostConstrainModuleSubUnits(Int_t type,Int_t idm, Double_t val, UInt_t pattern);
  void      PostConstrainOrphans(Int_t type,Double_t val, UInt_t pattern);
  //
  void      SetGeometryPath(const Char_t* filename="geometry.root") { fGeometryPath = filename; }

  void      SetInitTrackParamsMeth(Int_t meth=1)                        {fIniTrackParamsMeth=meth;}
  //
  void      AddConstraint(Double_t *factor, Double_t value, Double_t sigma=0);
  void      InitGlobalParameters(Double_t *par);
  Bool_t    SetLocalDerivative(Int_t index, Double_t value)             {return IsZero(fLocalDerivatives[index]=value);}
  Bool_t    SetGlobalDerivative(Int_t index, Double_t value)            {return IsZero(fGlobalDerivatives[index]=value);}  
  //
  // millepede methods
  //
  Int_t     AddLocalEquation(Mille2Data &m);
  Int_t     AddLocalEquationTPA(Mille2Data &m);
  void      SetLocalEquations(const Mille2Data *marr, Int_t neq);
  void      SetUseGlobalDelta(Bool_t v=kTRUE)                           {fUseGlobalDelta = v;}
  void      SetAllowPseudoParents(Bool_t v=kTRUE)                       {fAllowPseudoParents = v;} 
  Int_t     SetConstraintWrtRef(const char* reffname);
  //
  void      ConvertDeltas();
  void      ConvSortHierarchically(TObjArray& matArr);
  Bool_t    ConvIsJParentOfI(const TGeoHMatrix* matI,const TGeoHMatrix* matJ) const;
  AliAlignObjParams* ConvFindDelta(const TClonesArray* arrDelta,const TString& algname) const;

  AliITSAlignMille2(const AliITSAlignMille2& rhs);
  AliITSAlignMille2& operator=(const AliITSAlignMille2& rhs);
  //
 protected:
  //
  enum {
    kOCDBDefaultPath,
    kOCDBSpecificPath,
    kGeomFile,
    kSuperModileFile,
    kConstrRefFile,
    kPreDeltaFile,
    kPreCalSDDFile,
    kPreVDriftSDDFile,
    kPreCorrMapSDDFile,
    kInitCorrMapSDDFile,
    kInitCalSDDFile,
    kInitVDriftSDDFile,
    kInitDeltaFile,
    kInitGeomFile,
    kGlobalDeltas,
    kConstrLocal,
    kModVolID,
    kModIndex,
    kPseudoParents,
    kTrackFitMethod,
    kMinPntTrack,
    kNStDev,
    kResCutInit,
    kResCutOther,
    kLocalSigFactor,
    kStartFactor,
    kFinalFactor,
    kBField,
    kSparseMatrix,
    kRequirePoint,
    kConstrOrphans,
    kConstrSubunits,
    kApplyConstr,
    kExtraClustersMode,
    kTPAFitter,
    kUseLocalYErr,
    kMinPointsSens,
    kSDDVDCorrMult,
    kWeightPt,
    kUseDiamond,
    kCorrectDiamond,
    kUseVertex,
    kSameSDDT0,
    //
    kNKeyWords
  };                                            // id's of the keywirds for config file records

  // millepede stuffs
  AliMillePede2 *fMillepede;                    // Detector independent alignment class
  Double_t      fStartFac;                      // Initial factor for chi2 cut 
  Double_t      fFinalFac;                      // Final factor for chi2 cut 
  Double_t      fResCutInitial;                 // Cut on residual for first iteration
  Double_t      fResCut;                        // Cut on residual for other iterations 
  Int_t         fNGlobal;                       // Number of global parameters
  Int_t         fNLocal;                        // Number of local parameters
  Int_t         fNStdDev;                       // Number of standard deviations for chi2 cut
  Bool_t        fIsMilleInit;                   // Flag for initialization
  Bool_t        fAllowPseudoParents;            // For simple constraints don't involve parents into the fit
  //
  // fitting stuffs
  AliITSTPArrayFit        *fTPAFitter;          // TPArrayFitter       
  AliITSAlignMille2Module *fCurrentModule;      // Current SuperModule index
  AliTrackPointArray *fTrack;                   // pointer to current track 
  TObjArray     fTrackBuff;                     // buffer for tracks of min length
  AliTrackPoint fCluster;                       // current cluster
  Int_t         fCurrentSensID;                 // sensor index for current cluster
  TArrayD       fClusLoc;                       // local  coordinates of the clusters
  TArrayD       fClusGlo;                       // global coordinates of the clusters
  TArrayD       fClusSigLoc;                    // local cov matrix of the clusters
  Double_t     *fGlobalDerivatives;             // Array of global derivatives
  Double_t      fLocalDerivatives[kNLocal];     // Array of local deriv.
  Double_t      fLocalInitParam[kNLocal];       // Array with inital values for local parameters for current track
  Double_t      fLocalInitParEr[kNLocal][kNLocal];// Array with inital values for local parameters for current track
  Double_t      fModuleInitParam[kNParCh];      // Array with inital values for current module parameters (init geometry)
  Double_t      fPintLoc[3];                    // track/module intersection point in local coordinates
  Double_t      fPintLoc0[3];                   // track/module intersection point in local coordinates (before variation)
  Double_t      fPintGlo[3];                    // track/module intersection point in global coordinates
  Double_t     *fMeasLoc;                       // current point local coordinates (the original ones)
  Double_t     *fMeasGlo;                       // current point glob. coord (AliTrackPoint)
  Double_t     *fSigmaLoc;                      // stdev current point
  Double_t      fSigmaFactor[3];                // multiplicative factor for cluster sigmaX,Y,Z
  Double_t      fConstrPT;                      // optional PT constraint for helix (abs value)
  Double_t      fConstrPTErr;                   // error on this constraint (0 - exact)
  Int_t         fConstrCharge;                  // optional constraint on charge of Helix track (0 - no constraint)
  Int_t         fRunID;                         // current runID
  //
  Double_t      fDerivativeLoc[kNLocal][3];     // XYZ deriv. over local params
  Double_t      fDerivativeGlo[kNParCh][3];     // XYZ deriv. over global params
  Int_t         fMinNPtsPerTrack;               // min number of points per track to accept it
  Int_t         fIniTrackParamsMeth;            // method for track fit
  Int_t         fTotBadLocEqPoints;             // total number of reject points because of bad EqLoc
  AliTrackFitterRieman *fRieman;                // riemann fitter for helices
  //
  TObjArray     fConstraints;                   // list of constraints
  TObjArray     fCacheMatrixOrig;               // cach for original geom matrices
  TObjArray     fCacheMatrixCurr;               // cach for prealigned geom matrices
  // >> new members
  Bool_t        fUseGlobalDelta;                // intetpret deltas as global 
  Bool_t        fRequirePoints[kNDataType];     // required points in specific layers
  Int_t         fNReqLayUp[kNDataType][6];      // number of points required in layer[n] with Y>0
  Int_t         fNReqLayDown[kNDataType][6];    // number of points required in layer[n] with Y<0
  Int_t         fNReqLay[kNDataType][6];        // number of points required in layer[n] 
  Int_t         fNReqDetUp[kNDataType][3];      // number of points required in Detector[n] with Y>0
  Int_t         fNReqDetDown[kNDataType][3];    // number of points required in Detector[n] with Y<0
  Int_t         fNReqDet[kNDataType][3];        // number of points required in Detector[n]
  Int_t         fTempExcludedModule; /// single module temporary excluded from initial fit
  UInt_t        fUserProvided;                  // settings which user provided: not to update from the UserUnfo
  // << new members
  //
  // OCDB stuff
  TList        *fIniUserInfo;                   // initial user info (validity is not guaranteed after initialization)
  TString       fIniGeomPath;                   // where to take the ideal geometry used to produce the points
  TString       fIniDeltaPath;                  // where to take the deltas used to produce the points
  TString       fIniSDDRespPath;                // where to take the initial SDD response used to produce the points
  TString       fPreCalSDDRespPath;             // precalibration SDD response file name
  TString       fIniSDDVDriftPath;              // initial SDD vdrift file name
  TString       fPreSDDVDriftPath;              // precalibration SDD vdrift file name
  TString       fIniSDDCorrMapPath;             // initial SDD corr.map file name
  TString       fPreSDDCorrMapPath;             // precalibration SDD corr.map file name
  // geometry stuffs
  Bool_t        fConvertPreDeltas;              // when the prealignment deltas come from UserInfo, convert them from UserInfo geometry to target one
  TString       fGeometryPath;                  // Geometry file name
  TString       fPreDeltaPath;                  // file with prealigned objects
  TString       fConstrRefPath;                 // file with prealigned objects wrt which constraints are defined
  TString       fDiamondPath;                   // file with diamond constraint
  TGeoManager  *fGeoManager;                    // pointer to Alice geomanager
  Bool_t        fIsConfigured;                  // flag for loaded config file
  TArrayS       fPreAlignQF;                    // prealignment flags (not used?)
  //
  AliITSresponseSDD* fIniRespSDD;               // array of SDD t0/vdrift calib params used to create the track points
  AliITSresponseSDD* fPreRespSDD;               // array of SDD t0/vdrift calib params
  TObjArray*         fIniVDriftSDD;             // array of AliITSDriftSpeedArraySDD objects used for original reco
  TObjArray*         fPreVDriftSDD;             // array of AliITSDriftSpeedArraySDD objects to be used as a starting point instead of fIniVDriftSDD
  AliITSCorrectSDDPoints* fIniCorrMapSDD;       // SDD initial correction map
  AliITSCorrectSDDPoints* fPreCorrMapSDD;       // SDD precalibration correction map
  AliITSsegmentationSDD* fSegmentationSDD;      // extraction of SDD segmentation params
  TClonesArray* fPrealignment; // array of prealignment global deltas
  TClonesArray* fConstrRef;    // array of refererence deltas with respect to which the constraint are defined (survey?)
  TObjArray     fMilleModule; /// array of super modules to be aligned
  TObjArray     fSuperModule; /// array of super modules defined in supermodule file
  Int_t         fNModules;                      // number of defined modules from config file
  Int_t         fNSuperModules; /// number of custom supermodules in SM file
  Bool_t        fUsePreAlignment;               // start from prealigned setup 
  Bool_t        fUseLocalYErr;                  // use local Yerror due to the sensor thickness
  Bool_t        fBOn;                           // magentic field ON
  Double_t      fBField;                        // value of magnetic field
  Int_t         fDataType;                      // is this cosmics or collision processing?
  Int_t         fMinPntPerSens;                 // min number of points per module to vary it
  Int_t         fBug;                           /// tag for temporary bug correction
  // pepo
  Int_t         fMilleVersion; /// tag for backward compatibility
  // endpepo
  // pepo270809
  Int_t         fExtraClustersMode; /// 1=remove random / 2=remove internal / 10=use only tracks with xcl
  // endpepo270809
  //
  Double_t      fTrackWeight;                      //weight given by the user to current track
  Double_t      fWeightPt;                         //weight track equations by pT in this power
  Bool_t        fIsSDDVDriftMult;                  //use multiplicative correction for SDD vdrift
  Double_t      fDriftSpeed[50];                   //temporary array for corrected drift speed of SDD alitrackpoints
  Double_t      fDriftSpeed0[50];                  //temporary array for original  drift speed of SDD alitrackpoints
  Double_t      fDriftTime0[50];                   //temporary array for drift time 0's used for SDD alitrackpoints
  Double_t      fExtClusterPar[9];                 //array to store the parameters of the externally imposed cluster
  AliTrackPoint fDiamond;                          //optional constraint on the vertex
  AliTrackPoint fDiamondI;                         //constraint on the vertex with inverted error matrix
  Double_t      fCorrDiamond[3];                   //diamond correction
  Bool_t        fUseDiamond;                       //use diamond as a vertex constraint
  Bool_t        fUseVertex;                        //use vertex for constraint
  Bool_t        fVertexSet;                        //vertex is set for current track
  Int_t         fDiamondPointID;                   //ID of the diamond point in the track
  Int_t         fDiamondModID;                     //id of the fake diamond module
  Int_t         fCheckDiamondPoint;                // kDiamondIgnore: ignore in this event, kDiamondCheckIfPrompt: verify if track is prompt, kDiamondUse: use w/o verification
  Float_t       fCovIScale[kMaxPoints];            //optional scaling for inv.cov matrix (debiasing). MANAGED BY THE USER EXTERNALLY
  //
  Bool_t        fFixCurvIfConstraned;              //when fit curv. was constrained, don't pass it as a free param to MP2
  Bool_t        fCurvFitWasConstrained;            //flag that the last fit had constrained curvature
  //
  TObjArray     fConvAlgMatOld;                    //array to keep matrices of alignables for deltas conversion
  //
  static AliITSAlignMille2* fgInstance;         // global pointer on itself
  static Int_t              fgInstanceID;       // global counter of the instances
  static const Char_t     * fgkRecKeys[];       // keywords for config file records
  static const Char_t       fgkXYZ[];           // XYZ labels
  //
  ClassDef(AliITSAlignMille2, 0)
};


//______________________________________________________________________________________
inline void AliITSAlignMille2::SetCurrentCluster(const AliTrackPoint &atp) 
{
  // set current cluster
  fCluster = atp; 
  fCurrentSensID = AliITSAlignMille2Module::GetIndexFromVolumeID(fCluster.GetVolumeID());
}

//______________________________________________________________________________________
inline TGeoHMatrix* AliITSAlignMille2::GetSensorOrigMatrixSID(Int_t sid) const 
{
  // get cached original matrix by sensor ID
  return sid<0 ? 0 : (TGeoHMatrix*) fCacheMatrixOrig[sid];
}

//______________________________________________________________________________________
inline TGeoHMatrix* AliITSAlignMille2::GetSensorOrigMatrixVID(Int_t vid) const
{
  // get cached original matrix by sensor volume ID
  return GetSensorOrigMatrixSID( AliITSAlignMille2Module::GetIndexFromVolumeID(vid) );
}

//______________________________________________________________________________________
inline TGeoHMatrix* AliITSAlignMille2::GetSensorCurrMatrixSID(Int_t sid) const 
{
  // get cached current matrix by sensor ID
  return sid<0 ? 0 : (TGeoHMatrix*) fCacheMatrixCurr[sid];
}

//______________________________________________________________________________________
inline TGeoHMatrix* AliITSAlignMille2::GetSensorCurrMatrixVID(Int_t vid) const
{
  // get cached current matrix by sensor volume ID
  return GetSensorCurrMatrixSID( AliITSAlignMille2Module::GetIndexFromVolumeID(vid) );
}

#endif

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