ROOT logo
#ifndef ALIITSREALIGNTRACKS_H
#define ALIITSREALIGNTRACKS_H


//Class to perform the realignment if the Inner Tracking System 
//with an iterative approach based on track to cluster residuals
// minimization. More details in .cxx file
//
//Class by: A. Rossi, andrea,rossi@ts.infn.it


#include "AliGeomManager.h"
#include "AliAlignmentTracks.h"

class TArray;
class TGraph;
class TCanvas;
class TArray;
class TFile;
class AliAlignObjParams;


/* $Id$ */


class AliITSRealignTracks: public AliAlignmentTracks {
 public:
  
  AliITSRealignTracks():
    AliAlignmentTracks(),
    fSurveyObjs(0),
    fgeomfilename(),
    fmintracks(0),
    fUpdateCov(kFALSE),
    fVarySigmaY(kFALSE),
    fCorrModules(0),
    fLimitCorr(0.),
    fsigmaY(),
    fDraw(kFALSE),  
    fAlignDrawObjs(0), 
    fCanvPar(0), 
    fCanvGr(0), 
    fgrIterMeanX(0), 
    fgrIterRMSX(0),  
    fgrIterMeanY(0), 
    fgrIterRMSY(0),  
    fgrIterMeanZ(0), 
    fgrIterRMSZ(0),  
    fgrIterMeanPsi(0), 
    fgrIterRMSPsi(0),  
    fgrIterMeanTheta(0), 
    fgrIterRMSTheta(0),  
    fgrIterMeanPhi(0), 
    fgrIterRMSPhi(0)  
    {SetCovIsUsed(kFALSE);}
  
  AliITSRealignTracks(TString minimizer,Int_t fit=0,Bool_t covUsed=kFALSE,TString fileintro="AliTrackPoints.root",TString geometryfile="geometry.root",TString misalignmentFile="",TString startingfile="");
  AliITSRealignTracks(const AliITSRealignTracks &realignTracks);
  AliITSRealignTracks& operator=(const AliITSRealignTracks& obj);
  ~AliITSRealignTracks();
  
  void InitAlignObjs();
  Bool_t InitSurveyObjs(Bool_t infinite=kFALSE,Double_t factor=1.,TString filename="",TString arrayName="");
  void ResetAlignObjs(Bool_t all,TArrayI *volids=0x0);
  void ResetCorrModules();
  void DeleteSurveyObjs();
  void SetLimitCorr(Double_t limit=0.1){fLimitCorr=limit;}
  Int_t CheckWithSurvey(Double_t factor=2.,const TArrayI *volids=0x0);
  Bool_t SelectFitter(Int_t fit,Int_t minTrackPoint=2);
  Bool_t SelectMinimizer(TString minimizer,Int_t minpoints=1,const Bool_t *coord=0x0);
  void SetMinNtracks(Int_t minNtracks){fmintracks=minNtracks;}
  void SetCovUpdate(Bool_t covupdate){fUpdateCov=covupdate;}
  void SetVarySigmaY(Bool_t varysigmay,Double_t sigmaYfixed=1.);
  void SetGeomFilename(TString geomfilename){fgeomfilename=geomfilename;}
  //  Int_t LoadPoints(const TArrayI *volids, AliTrackPointArray** &points);
  Bool_t ReadAlignObjs(const char *alignObjFileName = "AlignObjs.root", const char* arrayName = "Alignment");
  void RealignITSVolIndependent(Int_t iter1,Int_t iterations,Int_t minNtracks,Int_t layer=0,Int_t minTrackPoint=6);
  void RealignITStracks(TString minimizer,Int_t fit,Int_t iter1,Int_t iterations,Int_t minNtracks,Int_t layer,Int_t minTrackPoint,Bool_t covUsed,TString misalignmentFile,TString startingfile,Int_t doGlobal);
  Bool_t AlignVolumesITS(const TArrayI *volids, const TArrayI *volidsfit,AliGeomManager::ELayerID layerRangeMin,AliGeomManager::ELayerID layerRangeMax,Int_t iterations);
  Bool_t FirstAlignmentSPD(Int_t minNtracks,Int_t iterations,Bool_t fitall=kTRUE,const TArrayI *volidsSet=0x0);
  Bool_t FirstAlignmentLayers(const Bool_t *layers,Int_t minNtracks,Int_t iterations,Bool_t fitall=kTRUE,const TArrayI *volidsSet=0x0);
  Bool_t SPDmodulesAlignToSSD(Int_t minNtracks,Int_t iterations);
  Bool_t AlignSPDBarrel(Int_t iterations);
  Bool_t AlignSPDHalfBarrel(Int_t method,Int_t iterations);
  Bool_t AlignLayer(Int_t layer,Int_t iterations);
  Bool_t AlignLayersToLayers(const Int_t *layer,Int_t iterations);
  Bool_t AlignLayerToSPDHalfBarrel(Int_t layer,Int_t updown,Int_t iterations);
  Bool_t AlignLayerToSector(Int_t layer,Int_t sector,Int_t iterations);
  Bool_t AlignSPDSectorToOuterLayers(Int_t sector,Int_t iterations);
  Bool_t AlignSPDSectorWithSectors(Int_t sector,Int_t iterations);
  Bool_t AlignSPDSectorsWithSectors(const Int_t *sectorIN,const Int_t *sectorFit,Int_t iterations);
  Bool_t AlignSPDStaves(const Int_t *staves,const Int_t *sectorsIN,const Int_t *sectorsFit,Int_t iterations);
  Bool_t AlignSPDHalfBarrelToHalfBarrel(Int_t updown,Int_t iterations); 
  Bool_t AlignSPDHalfBarrelToSectorRef(Int_t sector,Int_t iterations);
  Bool_t AlignSPD1SectorRef(Int_t sector,Int_t iterations);
  //masera  void AlignGlobalToSectRef(Int_t sector,Int_t minNtracks=100);
  TArrayI* GetLayersVolUID(const Int_t *layer);
  AliAlignObjParams* MediateAlignObj(const TArrayI *volIDs,Int_t lastVolid);
  TArrayI* GetSPDSectorsVolids(const Int_t *sectors); 
  TArrayI* GetSPDStavesVolids(const Int_t *sectors,const Int_t* staves);
  TArrayI* SelectLayerInVolids(const TArrayI *volidsIN,AliGeomManager::ELayerID layer);
  TArrayI* JoinVolArrays(const TArrayI *vol1,const TArrayI *vol2);
  TArrayI* IntersectVolArray(const TArrayI *vol1,const TArrayI *vol2);
  TArrayI* ExcludeVolidsFromVolidsArray(const TArrayI *volidsToExclude,const TArrayI *volStart);
  TArrayI* GetLayerVolumes(const Int_t *layer);
  TArrayI* GetAlignedVolumes(char *filename);
  /*  void AlignGlobalToSectRef(Int_t sector,Int_t minNtracks=100);
      AliAlignObjParams* MediateAlignObjs(AliAlignObj **alObjs,Int_t nObjs,const Bool_t *coords=0x0,TArrayI *volidArray=0x0,Bool_t local=kFALSE,const char* geometryfile=0x0);
      Bool_t MediateSectorsVolumes(char *filename,Bool_t local=kFALSE,char *geometryfile=0x0,Bool_t *coord=0x0);
  */
  void InitDrawHists();
  void SetDraw(Bool_t draw,Bool_t refresh);
  void UpdateDraw(TArrayI *volids,Int_t iter,Int_t color);
  void DeleteDrawHists();
  void WriteHists(const char *outfile);

 private:
  
  AliAlignObj    ***fSurveyObjs;   // Array with survey measurments 
  TString          fgeomfilename; // Geometry file name
  Int_t           fmintracks;   // minimum number of tracks to realign a set of volumes
  Bool_t             fUpdateCov;   // Update of Covariance for AlignObjs
  Bool_t            fVarySigmaY;   // If kTRUE the "sigmaY" parameter is changed accordingly to alignObj error
  Double_t          **fCorrModules;  //  Used to reduce correlations between modules
  Double_t           fLimitCorr;    // Maximum number of tracks shared between modules
  Double_t            fsigmaY;    // sigmaY parameter
  Bool_t              fDraw;     // flag to activate draw objects
  AliAlignObj  ***fAlignDrawObjs; //Array with reference objects for histograms
  TCanvas              *fCanvPar; //Canvas with iterations distributions
  TCanvas               *fCanvGr; //Canvas with iterations results
  TGraph           *fgrIterMeanX; // graph of Delta X
  TGraph           *fgrIterRMSX;  // graph of RMS X
  TGraph           *fgrIterMeanY; // graph of Delta Y
  TGraph           *fgrIterRMSY;  // graph of RMS Y
  TGraph           *fgrIterMeanZ; // graph of DeltaZ
  TGraph           *fgrIterRMSZ;  // TGraphs for displaying results during iterations
  TGraph           *fgrIterMeanPsi; // graphs during iterations
  TGraph           *fgrIterRMSPsi;  // graphs during iterations
  TGraph           *fgrIterMeanTheta; // graphs during iterations
  TGraph           *fgrIterRMSTheta;  // graphs during iterations
  TGraph           *fgrIterMeanPhi; // graphs during iterations
  TGraph           *fgrIterRMSPhi;  // graphs during iterations

  ClassDef(AliITSRealignTracks,3)
    
    };
    
#endif
 AliITSRealignTracks.h:1
 AliITSRealignTracks.h:2
 AliITSRealignTracks.h:3
 AliITSRealignTracks.h:4
 AliITSRealignTracks.h:5
 AliITSRealignTracks.h:6
 AliITSRealignTracks.h:7
 AliITSRealignTracks.h:8
 AliITSRealignTracks.h:9
 AliITSRealignTracks.h:10
 AliITSRealignTracks.h:11
 AliITSRealignTracks.h:12
 AliITSRealignTracks.h:13
 AliITSRealignTracks.h:14
 AliITSRealignTracks.h:15
 AliITSRealignTracks.h:16
 AliITSRealignTracks.h:17
 AliITSRealignTracks.h:18
 AliITSRealignTracks.h:19
 AliITSRealignTracks.h:20
 AliITSRealignTracks.h:21
 AliITSRealignTracks.h:22
 AliITSRealignTracks.h:23
 AliITSRealignTracks.h:24
 AliITSRealignTracks.h:25
 AliITSRealignTracks.h:26
 AliITSRealignTracks.h:27
 AliITSRealignTracks.h:28
 AliITSRealignTracks.h:29
 AliITSRealignTracks.h:30
 AliITSRealignTracks.h:31
 AliITSRealignTracks.h:32
 AliITSRealignTracks.h:33
 AliITSRealignTracks.h:34
 AliITSRealignTracks.h:35
 AliITSRealignTracks.h:36
 AliITSRealignTracks.h:37
 AliITSRealignTracks.h:38
 AliITSRealignTracks.h:39
 AliITSRealignTracks.h:40
 AliITSRealignTracks.h:41
 AliITSRealignTracks.h:42
 AliITSRealignTracks.h:43
 AliITSRealignTracks.h:44
 AliITSRealignTracks.h:45
 AliITSRealignTracks.h:46
 AliITSRealignTracks.h:47
 AliITSRealignTracks.h:48
 AliITSRealignTracks.h:49
 AliITSRealignTracks.h:50
 AliITSRealignTracks.h:51
 AliITSRealignTracks.h:52
 AliITSRealignTracks.h:53
 AliITSRealignTracks.h:54
 AliITSRealignTracks.h:55
 AliITSRealignTracks.h:56
 AliITSRealignTracks.h:57
 AliITSRealignTracks.h:58
 AliITSRealignTracks.h:59
 AliITSRealignTracks.h:60
 AliITSRealignTracks.h:61
 AliITSRealignTracks.h:62
 AliITSRealignTracks.h:63
 AliITSRealignTracks.h:64
 AliITSRealignTracks.h:65
 AliITSRealignTracks.h:66
 AliITSRealignTracks.h:67
 AliITSRealignTracks.h:68
 AliITSRealignTracks.h:69
 AliITSRealignTracks.h:70
 AliITSRealignTracks.h:71
 AliITSRealignTracks.h:72
 AliITSRealignTracks.h:73
 AliITSRealignTracks.h:74
 AliITSRealignTracks.h:75
 AliITSRealignTracks.h:76
 AliITSRealignTracks.h:77
 AliITSRealignTracks.h:78
 AliITSRealignTracks.h:79
 AliITSRealignTracks.h:80
 AliITSRealignTracks.h:81
 AliITSRealignTracks.h:82
 AliITSRealignTracks.h:83
 AliITSRealignTracks.h:84
 AliITSRealignTracks.h:85
 AliITSRealignTracks.h:86
 AliITSRealignTracks.h:87
 AliITSRealignTracks.h:88
 AliITSRealignTracks.h:89
 AliITSRealignTracks.h:90
 AliITSRealignTracks.h:91
 AliITSRealignTracks.h:92
 AliITSRealignTracks.h:93
 AliITSRealignTracks.h:94
 AliITSRealignTracks.h:95
 AliITSRealignTracks.h:96
 AliITSRealignTracks.h:97
 AliITSRealignTracks.h:98
 AliITSRealignTracks.h:99
 AliITSRealignTracks.h:100
 AliITSRealignTracks.h:101
 AliITSRealignTracks.h:102
 AliITSRealignTracks.h:103
 AliITSRealignTracks.h:104
 AliITSRealignTracks.h:105
 AliITSRealignTracks.h:106
 AliITSRealignTracks.h:107
 AliITSRealignTracks.h:108
 AliITSRealignTracks.h:109
 AliITSRealignTracks.h:110
 AliITSRealignTracks.h:111
 AliITSRealignTracks.h:112
 AliITSRealignTracks.h:113
 AliITSRealignTracks.h:114
 AliITSRealignTracks.h:115
 AliITSRealignTracks.h:116
 AliITSRealignTracks.h:117
 AliITSRealignTracks.h:118
 AliITSRealignTracks.h:119
 AliITSRealignTracks.h:120
 AliITSRealignTracks.h:121
 AliITSRealignTracks.h:122
 AliITSRealignTracks.h:123
 AliITSRealignTracks.h:124
 AliITSRealignTracks.h:125
 AliITSRealignTracks.h:126
 AliITSRealignTracks.h:127
 AliITSRealignTracks.h:128
 AliITSRealignTracks.h:129
 AliITSRealignTracks.h:130
 AliITSRealignTracks.h:131
 AliITSRealignTracks.h:132
 AliITSRealignTracks.h:133
 AliITSRealignTracks.h:134
 AliITSRealignTracks.h:135
 AliITSRealignTracks.h:136
 AliITSRealignTracks.h:137
 AliITSRealignTracks.h:138
 AliITSRealignTracks.h:139
 AliITSRealignTracks.h:140
 AliITSRealignTracks.h:141
 AliITSRealignTracks.h:142
 AliITSRealignTracks.h:143
 AliITSRealignTracks.h:144
 AliITSRealignTracks.h:145
 AliITSRealignTracks.h:146
 AliITSRealignTracks.h:147
 AliITSRealignTracks.h:148