ROOT logo
#include <TArray.h>
#include <TFile.h>
#include <TStopwatch.h>
#include <TArray.h>
#include <TNtuple.h>
#include <TGeoManager.h>
#include "AliGeomManager.h"
#include "AliAlignmentTracks.h"
#include "AliTrackFitter.h"
#include "AliTrackFitterKalman.h"
#include "AliTrackFitterRieman.h"
#include "AliTrackResidualsFast.h"
#include "AliTrackResidualsChi2.h"
#include "AliTrackResidualsLinear.h"


void RealignmentITSIndependVol(TString minimizer="fast",const Int_t fit=0,const Int_t iter1=1,const Int_t iterations=5,const Int_t minNtracks=-10,const Int_t layer=0,const Int_t minTrackPoint=6,TString fileintro="AliTrackPoints.root",TString geometryfile="geometry.root"){
  
  // minimizer="fast"->AliTrackResidualFast minimizer
  //           "minuit"->AliTrackResidualChi2 minimizer
  //           "minuitnorot"->AliTrackResidualChi2 minimizer without rotations degrees of freedom
  //           "linear"->AliTrackResidualLinear minimizer    
  //fit=0-> Riemann Fitter, fit=1->Kalman
  //iter1=#iterations inside AliAlignmentTracks::AliAlignVolumes method 
  //iterations=#iterations of the entire procedure
  //layer=0->all ITS, otherways the usual notation is considered (1=SPD1,2=SPD2,3=SDD1,4=SDD2,5=SSD1,6=SSD2)
  //minNtracks=minimun number of tracks passing through a module in order to try to realign the module itsself
  //           if minNtracks<0, minimun number of tracks is |minNtracks|*minNumPoint[layer]/fact (see the code below): this allows a different
  //           choice of the number of tracks required on different layers and to vary these numbers once tuned the relative proportions.  
  //minTrackPoint=minimun number of "good" points required to a track (THE POINT ON THE MODULE THAT IS GOING TO BE REALIGNED 
  //              IS NEVER CONSIDERED->max number can be required is 11 for cosmics tracks) for the track being considered in the minimization
  //fileintro=file into which the Tree with the space points is stored
  //geometryfile=file containing the geometry


  TArrayI volIDs2(2200); 
  volIDs2.Reset(0);
  TArrayI volIDs(1);
  TString outname;
  Int_t layerNum,modNum,iLayer,iLayerToAlign,j=0,size=0,lastVolid=0;
  Int_t minNumPoint[6]={200,200,200,200,100,100}; 
  Double_t fact=10; 
  TNtuple *ntVolumeAlign=new TNtuple("ntVolumeAlign","NTuple with volume tried to be realigned","layerNum:modNum:volumeIDnum"); 


  AliAlignmentTracks *AliAlTrack=new AliAlignmentTracks();
 
  AliAlTrack->SetPointsFilename(fileintro.Data());

  AliTrackFitter *fitter;
  if(fit==1)fitter= new AliTrackFitterKalman();
  else fitter=new AliTrackFitterRieman();

  fitter->SetMinNPoints(minTrackPoint);

  AliAlTrack->SetTrackFitter(fitter);


  AliTrackResiduals *res;
  if(minimizer=="minuit"){
    res = new AliTrackResidualsChi2();
  }
  else if(minimizer=="minuitnorot"){
    res = new AliTrackResidualsChi2();
    res->FixParameter(3);
    res->FixParameter(4);
    res->FixParameter(5);
  }

  else if(minimizer=="fast"){
    res = new AliTrackResidualsFast();
  } 
  else if(minimizer=="linear"){
    res = new AliTrackResidualsLinear();
  } 

  else {
    printf("Trying to set a non existing minimizer! \n");
    return;
  }

  res->SetMinNPoints(1);
  AliAlTrack->SetMinimizer(res);
  
  if(!gGeoManager) TGeoManager::Import(geometryfile.Data());
   
  
  TStopwatch *timer=new TStopwatch();
  timer->Start(); 
  AliAlTrack->BuildIndex();
  j=0;
  UShort_t volid;
  for(Int_t iter=0;iter<iterations;iter++){
    for(iLayerToAlign=1;iLayerToAlign<=6;iLayerToAlign++){
      if(layer!=0&&(Int_t)iLayerToAlign!=layer)continue;
      j=0;
      size=0;
      for(Int_t k=1;k<=6;k++){
	size+=(Int_t)AliGeomManager::LayerSize(k);
	printf("size: %d \n",size);
      }
  
      
      for (Int_t iModule=0;iModule<AliGeomManager::LayerSize(iLayerToAlign);iModule++){      
	j=0;
	if(minNtracks<0){	
	  if(AliAlTrack->GetLastIndex(iLayerToAlign-1,iModule)<minNumPoint[iLayerToAlign-1]*(-1*minNtracks/fact))continue;
	}	
	else if(AliAlTrack->GetLastIndex(iLayerToAlign-1,iModule)<minNtracks)continue;

	UShort_t volidAl = AliGeomManager::LayerToVolUID(iLayerToAlign,iModule);
	
	TArrayI volIDsFit(size-1);
	for (iLayer=(Int_t)AliGeomManager::kSPD1;iLayer<(Int_t)AliGeomManager::kTPC1;iLayer++){
	  for (Int_t iModule2=0;iModule2<AliGeomManager::LayerSize(iLayer);iModule2++){
	    volid = AliGeomManager::LayerToVolUID(iLayer,iModule2);
	    if(volid==volidAl)continue;
	    volIDsFit.AddAt(volid,j);
	    j++;
	  }
	}
	volIDs.AddAt((Int_t)volidAl,0);
	if(iter==iterations-1){
	  volIDs2.AddAt(volidAl,lastVolid);
	  lastVolid++;
	}
	AliAlTrack->AlignVolumes(&volIDs,&volIDsFit,AliGeomManager::kSPD1,AliGeomManager::kSSD2,iter1);  
      }
    }
    
    if((iter+1)%5==0||iter==0||iter==1||iter==2||iter==3||iter==iterations-1){
      outname="RealignObj";
      outname+=(iter+1);
      outname.Append(".root");
      AliAlTrack->WriteRealignObjArray(outname.Data(),AliGeomManager::kSPD1,AliGeomManager::kSSD2);
    }
  }
  
  if(lastVolid==0){printf("No modules could be realigned \n");return;}
  printf("End of selecting modules cycle: %d modules selected \n",lastVolid);
  for(Int_t k=0;k<volIDs2.GetSize();k++){
    if(volIDs2.At(k)==0)break;
    layerNum=AliGeomManager::VolUIDToLayer(volIDs2.At(k),modNum);
    ntVolumeAlign->Fill(layerNum,modNum,volIDs2.At(k));
  }
  TFile *f=new TFile("RealignVolNt.root","RECREATE");
  f->cd();
  ntVolumeAlign->Write();
  f->Close();

  timer->Stop();
  timer->Print();
  return;
}


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