ROOT logo
/*
  marian.ivanov@cern.ch
  Macro to create  alignment/distortion maps
  As a input output of AliTPCcalibAlign is used.

  Algorithm:

  In the setup without the magnetic field the tracks are fitted using the linear track model.
  ( in y-rphi coordinate the primary vertex is also used as a constrain)
  Residuals (deltas0  between the track and clusters in Y and in z direction are filled in the 4 D histogram:
  Delta: phi(180 bins): localX(53 bins): tan(phi): tan(theta)(10 bins)

  Distortion map are extracted form the residual histograms as a mean value at each bin.
  Linear fits are then performed for each pad - delta as function of theta
  Delta Ymeas = offsetY+slopeY*tan(theta)  
  Delta Zmeas = offsetZ+slopeZ*tan(theta)  
  
  Resulting residuals exported into the OCDB are:
  DeltaY  = offsetY
  DeltaZ  = offsetZ
  DeltaR  = slopeZ;
  
  Example usage:

  make calpad+ make report ps file:
  aliroot -b -q ~/NimStyle.C ../ConfigCalibTrain.C\(119037\) $ALICE_ROOT/TPC/CalibMacros/MakeAlignCalPad.C\(1\)
  make only report ps file:
  aliroot -b -q ~/NimStyle.C $ALICE_ROOT/TPC/CalibMacros/MakeAlignCalPad.C\(3\)
  Making fit - iterative procedure - see below:
  
  gROOT->Macro("~/rootlogon.C");
  gSystem->Load("libANALYSIS");
  gSystem->Load("libSTAT");
  gSystem->Load("libTPCcalib");
  gSystem->AddIncludePath("-I$ALICE_ROOT/TPC/macros -I$ALICE_ROOT/TPC/TPC -I$ALICE_ROOT/STAT");
  .L $ALICE_ROOT/TPC/CalibMacros/MakeAlignCalPad.C+
  //load OCDB 
  gROOT->Macro("../ConfigCalibTrain.C(119037)");
  //2
  InitTPCalign(); 
  MakeFits();      // this is logn proceure 30 minutes

  //UpdateOCDB(0,AliCDBRunRange::Infinity());
  //
   gROOT->Macro("~/NimStyle.C")

*/
#if !defined(__CINT__) || defined(__MAKECINT__)
#include "TH1D.h"
#include "TH2F.h"
#include "THnSparse.h"
#include "TVectorD.h"
#include "TTreeStream.h"
#include "TFile.h"
#include "AliTPCcalibAlign.h"
#include "AliTPCROC.h"
#include "AliTPCCalROC.h"
#include "AliTPCCalPad.h"
#include "TF1.h"
#include "TH2.h"
#include "TH3.h"
#include "TROOT.h"
#include "TProfile.h"
#include "AliTPCPreprocessorOnline.h"
#include "AliTPCcalibDB.h"
#include "AliTPCkalmanAlign.h"
#include "TPostScript.h"
#include "TLegend.h"
#include "TCut.h"
#include "TCanvas.h"
#include "TStyle.h"
#include "AliTPCExBEffectiveSector.h"
#include "AliTPCComposedCorrection.h"
//
#include "AliCDBMetaData.h"
#include "AliCDBId.h"
#include "AliCDBManager.h"
#include "AliCDBStorage.h"
#include "AliCDBEntry.h"
#include "TStatToolkit.h"
#endif


TObject  *palign=0;
TTree * treeP=0;
TTree * treeM=0;
TTree * tree0=0;
TTree * treePZ=0;
TTree * treeMZ=0;
TTree * tree0Z=0;
AliTPCROC *proc = AliTPCROC::Instance();
AliTPCExBEffectiveSector * geffCorr=0;

Double_t GetCorr(Double_t sector, Double_t localX, Double_t kZ,Int_t type);

void MakeFits();
void InitTPCalign();


void MakeAlignCalPad(Int_t mode){
  //
  // Make AlignCalpad and make report
  //
  gSystem->Load("libANALYSIS");
  gSystem->Load("libSTAT");
  gSystem->Load("libTPCcalib");  
  printf("Make report mode\t%d\n", mode);
  if (mode<1) { 
    InitTPCalign();
    MakeFits();
  }
  printf("Make report\n");
}


void InitTPCalign(){
  //
  // read the TPC alignment
  //
  TFile fcalib("CalibObjects.root");
  TObjArray * array = (TObjArray*)fcalib.Get("TPCCalib");
  if (array){
    palign = ( AliTPCcalibAlign *)array->FindObject("alignTPC");
  }else{
    palign = ( AliTPCcalibAlign *)fcalib.Get("alignTPC");
  }
  if (!palign){
     TFile fcalib2("TPCAlignObjects.root");
     palign = ( AliTPCcalibAlign *)fcalib2.Get("alignTPC");
  }
}


void MakeFits(){
  AliTPCcalibAlign * align =  (AliTPCcalibAlign *)palign;
  THnSparse * hdY = align->GetClusterDelta(0);
  THnSparse * hdZ = align->GetClusterDelta(1);
  AliTPCExBEffectiveSector::MakeResidualMap(hdY,"clusterDY.root");
  AliTPCExBEffectiveSector::MakeResidualMap(hdZ,"clusterDZ.root");
}

void FitdY(TTree * tree){
  //
  //
  //

  AliTPCROC * roc = AliTPCROC::Instance();
  Double_t xquadrant = roc->GetPadRowRadii(36,53); 
  Double_t xIO       = ( roc->GetPadRowRadii(0,roc->GetNRows(0)-1)+roc->GetPadRowRadii(36,0))*0.5;
  
  //
  tree->SetAlias("diffS","(sector-int(sector)-0.5)");
  tree->SetAlias("diffQ",Form("(localX-%f)",xquadrant));
  tree->SetAlias("diffIO",Form("(localX-%f)",xIO));
  tree->SetAlias("iroc",Form("(localX<%f)",xIO));   // bool IROC
  tree->SetAlias("dqLR0",Form("(localX<%f)*(-1+(diffS<0)*2)",xIO));  //sign LeftRight
  tree->SetAlias("dqLR2",Form("(localX>%f)*(-1+(diffS<0)*2)",xquadrant));  //sign LeftRight up
  //
  tree->SetAlias("diffIFC","abs(localX-80)");
  tree->SetAlias("diffOFC","abs(250-localX)");
  tree->SetAlias("drift","(1-abs(kZ*localX)/250.)");
  //
  tree->SetAlias("dIFC2",Form("drift/(1+abs(diffIFC^2/(%f^2)))",10.));
  tree->SetAlias("dIFC",Form("drift/(1+abs(diffIFC/(%f)))",5.));
  tree->SetAlias("dOFC2",Form("drift/(1+abs(diffOFC^2/(%f^2)))",10.));
  tree->SetAlias("dOFC",Form("drift/(1+abs(diffOFC/(%f)))",5.));

 

  TStatToolkit toolkit;
  Double_t chi2=0;
  Int_t    npoints=0;
  TVectorD param;
  TMatrixD covar;
  TString  fstringG="";		 
  fstringG+="(iroc)++";           //1 iroc shift
  fstringG+="(dqLR0)++";
  fstringG+="(dqLR2)++";
  fstringG+="(diffIO*iroc)++";     // iroc rotation
  fstringG+="(diffIO*dqLR0)++";
  fstringG+="(diffQ*dqLR2)++";
  //
  fstringG+="(dIFC+dIFC2)++";            //9
  fstringG+="(diffS*(dIFC+dIFC2))++";
  fstringG+="(diffS^2*(dIFC+dIFC2))++";
  fstringG+="(dIFC-dIFC2)++";            //9
  fstringG+="(diffS*(dIFC-dIFC2))++";
  fstringG+="(diffS^2*(dIFC-dIFC2))++";
  //
  //
  fstringG+="(dOFC+dOFC2)++";            //9
  fstringG+="(diffS*(dOFC+dOFC2))++";
  fstringG+="(diffS^2*(dOFC+dOFC2))++";
  fstringG+="(dOFC-dOFC2)++";            //9
  fstringG+="(diffS*(dOFC-dOFC2))++";
  fstringG+="(diffS^2*(dOFC-dOFC2))++";
  //
  //
  //
  TTreeSRedirector *pcstream=new TTreeSRedirector("dyFit.root");
  {for (Int_t isec=0; isec<18; isec++){
      {for (Int_t iside=0; iside<=1; iside++){
	  TCut cutS=Form("abs(sector-%d.5)<0.5&&kZ*%d>0&&entries>2000",isec,(iside>0)?-1:1);
	  TString *strFitG = TStatToolkit::FitPlane(tree,"mean", fstringG.Data(),cutS, chi2,npoints,param,covar,-1,0, 10000000, kTRUE);
	  tree->SetAlias("fitG",strFitG->Data());
	  tree->Draw("mean-fitG",cutS,"");
	  //
	  printf("%d\t%d\t%f\n",iside,isec,TMath::Sqrt(chi2/npoints));
	  (*pcstream)<<"fitDy"<<
	    "iside="<<iside<<
	    "sec="<<isec<<
	    "chi2="<<chi2<<
	    "npoints="<<npoints<<
	    "p.="<<&param<<
	    "\n";
	}
      }
    }
  }
  delete pcstream;
}



void DumpDerivative(TH3 * his){
  //
  //
  //
  Int_t nbins0=his->GetXaxis()->GetNbins();
  Int_t nbins1=his->GetYaxis()->GetNbins();
  Int_t nbins2=his->GetZaxis()->GetNbins();
  TTreeSRedirector *pcstream = new TTreeSRedirector("aaa.root");
  for (Int_t ibin0=1; ibin0<nbins0; ibin0++)
    for (Int_t ibin1=1; ibin1<nbins1; ibin1++)
      for (Int_t ibin2=1; ibin2<nbins2; ibin2++){
	Float_t x= his->GetXaxis()->GetBinCenter(ibin0);
	Float_t y= his->GetYaxis()->GetBinCenter(ibin1);
	Float_t z= his->GetZaxis()->GetBinCenter(ibin2);
	Float_t c= his->GetBinContent(ibin0,ibin1,ibin2);
	Float_t c0M=his->GetBinContent(ibin0-1,ibin1,ibin2);
	Float_t c0P=his->GetBinContent(ibin0+1,ibin1,ibin2);
	Float_t c1M=his->GetBinContent(ibin0,ibin1-1,ibin2);
	Float_t c1P=his->GetBinContent(ibin0,ibin1+1,ibin2);
	Float_t c2M=his->GetBinContent(ibin0,ibin1,ibin2-1);
	Float_t c2P=his->GetBinContent(ibin0,ibin1,ibin2+1);
	printf("%f\t%f\t%f\t%f\n",x,y,z,c);
	(*pcstream)<<"aaa"<<
	  "x="<<x<<
	  "y="<<y<<
	  "z="<<z<<
	  "c="<<c<<
	  "c0M="<<c0M<<
	  "c0P="<<c0P<<
	  "c1M="<<c1M<<
	  "c1P="<<c1P<<
	  "c2M="<<c2M<<
	  "c2P="<<c2P<<
	  "\n";
      }						
  delete pcstream;
}

Double_t GetCorr(Double_t sector, Double_t localX, Double_t kZ, Int_t type){
  //
  // calculate the correction at given position - check the geffCorr
  //
  Double_t phi=sector*TMath::Pi()/9.;
  Double_t gx = localX*TMath::Cos(phi);
  Double_t gy = localX*TMath::Sin(phi);
  Double_t gz = localX*kZ;
  Int_t nsector=(gz>0) ? 0:18; 
  //
  //
  //
  Float_t distPoint[3]={gx,gy,gz};
  geffCorr->DistortPoint(distPoint, nsector);
  Double_t r0=TMath::Sqrt(gx*gx+gy*gy);
  Double_t r1=TMath::Sqrt(distPoint[0]*distPoint[0]+distPoint[1]*distPoint[1]);
  Double_t phi0=TMath::ATan2(gy,gx);
  Double_t phi1=TMath::ATan2(distPoint[1],distPoint[0]);
  if (type==0) return r1-r0;
  if (type==1) return (phi1-phi0)*r0;
  return phi1-phi0;
}



void LoadDistortionTrees(){
  //
  // Load distortion tree
  //
  TFile *fp = new TFile("clusterDYPlus.root");
  TFile *fm = new TFile("clusterDYMinus.root");
  TFile *f0 = new TFile("clusterDY0.root");
  TFile *fpz= new TFile("clusterDZPlus.root");
  TFile *fmz= new TFile("clusterDZMinus.root");
  TFile *f0z=new TFile("clusterDZ0.root");
  treeP=(TTree*)fp->Get("delta");
  treeM=(TTree*)fm->Get("delta");
  tree0=(TTree*)f0->Get("delta");
  treePZ=(TTree*)fpz->Get("delta");
  treeMZ=(TTree*)fmz->Get("delta");
  tree0Z=(TTree*)f0z->Get("delta");
  tree0->AddFriend(treeP,"P");
  tree0->AddFriend(treeM,"M");
  tree0->AddFriend(treePZ,"PZ");
  tree0->AddFriend(treeMZ,"MZ");
  tree0->AddFriend(tree0Z,"Z");
  tree0->SetMarkerStyle(25);
  tree0->SetMarkerSize(0.4);
}

void UpdateEffSectorOCDB(){
  //
  // Incremeantal update ot the correction maps
  // corrections on top of previous corrections
  //
  TFile fp("clusterDYPlus.root");
  TFile fm("clusterDYMinus.root");
  TFile f0("clusterDY0.root");
  TFile f0z("clusterDZ0.root");
  
  TH3F *his3D0=(TH3F*)f0.Get("his3D");
  TH3F *his3DP=(TH3F*)fp.Get("his3D");
  TH3F *his3DM=(TH3F*)fm.Get("his3D");
  TH3F *his3DZ=(TH3F*)f0z.Get("his3D");
  TH3F *hisR=0;   //half of difference (Plus-Minus) scaled by c1
  hisR=(TH3F*)his3DP->Clone();
  hisR->Add(his3DM,-1);
  hisR->Scale(0.5);         
  hisR->Scale(1/0.3); // c1 factor to be added there //is sign correct?        
  //
  //
  AliTPCExBEffectiveSector *effSector = new  AliTPCExBEffectiveSector;
  effSector->SetName("EffSector");
  effSector->SetTitle("EffSector");
  effSector->fCorrectionRPhi=(TH3F*)his3D0->Clone();
  effSector->fCorrectionR=(TH3F*)hisR->Clone();
  effSector->fCorrectionZ=(TH3F*)his3DZ->Clone();
  geffCorr=effSector;
  AliTPCCorrection::AddVisualCorrection(geffCorr,0);
  //
  //
  //
  AliTPCcalibDB * calib = AliTPCcalibDB::Instance();
  TObjArray *arr = calib->GetTPCComposedCorrectionArray();
  {for (Int_t i=0; i<arr->GetEntries(); i++){
    AliTPCComposedCorrection * corr=(AliTPCComposedCorrection*)arr->At(i);
    if (!corr) continue;
    AliTPCExBEffectiveSector * corrSec=( AliTPCExBEffectiveSector *)corr->GetCorrections()->FindObject("EffSector");
    if (i==0) geffCorr=(AliTPCExBEffectiveSector *)corrSec;
    if (!corrSec) corr->GetCorrections()->Add(effSector->Clone());
    if (corrSec){
      if (corrSec->fCorrectionRPhi) corrSec->fCorrectionRPhi->Add(effSector->fCorrectionRPhi);
      else corrSec->fCorrectionRPhi=(TH3F*)effSector->fCorrectionRPhi->Clone();
      if (corrSec->fCorrectionR) corrSec->fCorrectionR->Add(effSector->fCorrectionR);
      else corrSec->fCorrectionR=(TH3F*)effSector->fCorrectionR->Clone();
      if (corrSec->fCorrectionZ) corrSec->fCorrectionR->Add(effSector->fCorrectionZ);
      else corrSec->fCorrectionZ=(TH3F*)effSector->fCorrectionZ->Clone();
    }
    if (i==0) AliTPCCorrection::AddVisualCorrection(corrSec,1);
    }}
// make OCDB entries
  TString userName=gSystem->GetFromPipe("echo $USER");
  TString date=gSystem->GetFromPipe("date");
  TString ocdbStorage="local:////";
  ocdbStorage+=gSystem->GetFromPipe("pwd");
  ocdbStorage+="/OCDB";
  //
  AliCDBMetaData *metaData= new AliCDBMetaData();
  metaData->SetObjectClassName("TObjArray");
  metaData->SetResponsible("Marian Ivanov");
  metaData->SetBeamPeriod(1);
  metaData->SetAliRootVersion("05-27-04"); //root version
  metaData->SetComment(Form("Correction calibration. User: %s\n Data%s",userName.Data(),date.Data()));
  AliCDBId* id1=NULL;
  id1=new AliCDBId("TPC/Calib/Correction", 0, AliCDBRunRange::Infinity());
  AliCDBStorage* gStorage = 0;

  gStorage=AliCDBManager::Instance()->GetStorage((ocdbStorage+"Update").Data());
  gStorage->Put(arr, (*id1), metaData);


}


void DrawDiff(){
  TFile f0("../mergeField0/mean.root");
  TFile fP("../mergePlus/mean.root");
  TFile fM("../mergeMinus/mean.root");
  //
  TTree *itsdy0=(TTree*)f0.Get("ITSdy");
  TTree *itsdyP=(TTree*)fP.Get("ITSdy");
  TTree *itsdyM=(TTree*)fM.Get("ITSdy");
  TTree *vdy0=(TTree*)f0.Get("Vertexdy");
  TTree *vdyP=(TTree*)fP.Get("Vertexdy");
  TTree *vdyM=(TTree*)fM.Get("Vertexdy");
  itsdy0->SetMarkerStyle(25);
  itsdy0->SetMarkerSize(0.3);
  itsdy0->AddFriend(itsdyP,"P");
  itsdy0->AddFriend(itsdyM,"M");
  itsdy0->AddFriend(vdy0,"V");
  itsdy0->AddFriend(vdyP,"VP");
  itsdy0->AddFriend(vdyM,"VM");
  itsdy0->SetMarkerStyle(25);
  itsdy0->SetMarkerSize(0.4);

}





void MakePlotDeltaZ(){
  //
  // 
  //
  TCut cut="entries>500&&PZ.entries>500&&MZ.entries>500";
  TCanvas *cA = new TCanvas("deltaZA","deltaZA",900,700);
  TCanvas *cC = new TCanvas("deltaZC","deltaZC",900,700);
  TCanvas *cARef = new TCanvas("deltaZARef","deltaZARef",1000,800);
  TCanvas *cCRef = new TCanvas("deltaZCRef","deltaZCRef",1000,800);
  //
  TH1::AddDirectory(0);
  TH1 * his=0;
  cA->Divide(4,5);
  for (Int_t isec=0; isec<18; isec++){
    cA->cd(isec+1);
    TCut cutS=Form("abs(sector-0.5-%d)<0.1",isec);
    tree0->Draw("Z.mean*10.:localX:abs(kZ)",cutS+"entries>4000&&P.entries>200&&localX<250&&kZ>0&&abs(kZ)<1","colz");
    his=(TH1*)tree0->GetHistogram()->Clone();
    his->GetXaxis()->SetTitle("r (cm)");
    his->GetYaxis()->SetTitle("#Delta_{z} (mm)");
    his->GetZaxis()->SetTitle("tan($theta)");
    his->Draw("colz");
  }
  cA->cd(19);

  cC->Divide(4,5);
  for (Int_t isec=0; isec<18; isec++){
    cC->cd(isec+1);
    TCut cutS=Form("abs(sector-0.5-%d)<0.1",isec);
    tree0->Draw("Z.mean*10.:localX:abs(kZ)",cutS+"entries>4000&&P.entries>200&&localX<250&&kZ<0&&abs(kZ)<1","colz"); 
    his=(TH1*)tree0->GetHistogram()->Clone();
    his->GetXaxis()->SetTitle("r (cm)");
    his->GetYaxis()->SetTitle("#Delta_{z} (mm)");
    his->GetZaxis()->SetTitle("tan($theta)");
    his->Draw("colz");

  }

  cARef->Divide(4,5);
  for (Int_t isec=0; isec<18; isec++){
    cARef->cd(isec+1);
    TCut cutS=Form("abs(sector-0.5-%d)<0.1",isec);
    tree0->Draw("(PZ.mean-MZ.mean)*10.:localX:abs(kZ)",cutS+cut+"kZ>0&&abs(kZ)<1","colz");
    his=(TH1*)tree0->GetHistogram()->Clone();
    his->GetXaxis()->SetTitle("r (cm)");
    his->GetYaxis()->SetTitle("#Delta_{z} (mm)");
    his->GetZaxis()->SetTitle("tan($theta)");
    his->Draw("colz");

  }
  
  cCRef->Divide(4,5);
  for (Int_t isec=0; isec<18; isec++){
    cCRef->cd(isec+1);
    TCut cutS=Form("abs(sector-0.5-%d)<0.1",isec);
    tree0->Draw("(PZ.mean-MZ.mean)*10.:localX:abs(kZ)",cutS+cut+"kZ<0&&abs(kZ)<1","colz");
    his=(TH1*)tree0->GetHistogram()->Clone();
    his->GetXaxis()->SetTitle("r (cm)");
    his->GetYaxis()->SetTitle("#Delta_{z} (mm)");
    his->GetZaxis()->SetTitle("tan($theta)");
    his->Draw("colz");
  }

  TPostScript *ps = new TPostScript("distortionZ.ps", 112);
  ps->NewPage();
  cA->Draw();
  ps->NewPage();
  cA->Draw();
  ps->NewPage();
  cC->Draw();
  ps->NewPage();
  cARef->Draw();
  ps->NewPage();
  cCRef->Draw();
  ps->Close();
}




void MakeAlign(){
  //
  // make  sector alignment - using Kalman filter method -AliTPCkalmanAlign
  // Combined information is used, mean residuals are minimized:
  //
  // 1. TPC-TPC sector alignment
  // 2. TPC-ITS alignment
  // 3. TPC vertex alignment 
  //
  TFile fcalib("../mergeField0/TPCAlignObjects.root");
  AliTPCcalibAlign * align = ( AliTPCcalibAlign *)fcalib.Get("alignTPC");
  TFile f0("../mergeField0/mean.root");

  //
  TTree *itsdy=(TTree*)f0.Get("ITSdy");
  TTree *itsdp=(TTree*)f0.Get("ITSdsnp");
  TTree *itsdz=(TTree*)f0.Get("ITSdz");
  TTree *itsdt=(TTree*)f0.Get("ITSdtheta");
  //
  TTree *vdy=(TTree*)f0.Get("Vertexdy");
  TTree *vds=(TTree*)f0.Get("Vertexdsnp");
  TTree *vdz=(TTree*)f0.Get("Vertexdz");
  TTree *vdt=(TTree*)f0.Get("Vertexdtheta");

  itsdy->AddFriend(itsdp,"Snp");
  itsdy->AddFriend(itsdz,"Z");
  itsdy->AddFriend(itsdt,"T");
  //
  itsdy->AddFriend(vdy,"V");
  itsdy->AddFriend(vds,"VSnp");
  itsdy->AddFriend(vdz,"VZ");
  itsdy->AddFriend(vdt,"VT");
  itsdy->SetMarkerStyle(25);
  itsdy->SetMarkerSize(0.4);

  TCut cutQ="entries>500&&abs(theta)<0.8&&abs(snp)<0.2";
  TH1F his1("hdeltaY1","hdeltaY1",100,-0.5,0.5);
  TMatrixD vecAlign(72,1);
  TMatrixD covAlign(72,72);
  AliTPCkalmanAlign::BookAlign1D(vecAlign,covAlign,0,0.0005);
  TVectorD vecITSY(72);
  TVectorD vecITSS(72);
  TVectorD vecVS(72);
  TVectorD vecITSTan(72);
  TVectorD vecVTan(72);
  {for (Int_t isec0=0; isec0<36; isec0++){
      Double_t phi0=(isec0%18+0.5)*TMath::Pi()/9.;
      if (phi0>TMath::Pi()) phi0-=TMath::TwoPi();
      Int_t iside0=(isec0%36<18)? 0:1;
      TCut cutSector=Form("abs(%f-phi)<0.14",phi0);
      TCut cutSide = (iside0==0)? "theta>0":"theta<0";
      itsdy->Draw("mean",cutQ+cutSector+cutSide);
      Double_t meanITSY=itsdy->GetHistogram()->GetMean()/83.6;
      vecITSY[isec0]=meanITSY;
      vecITSY[isec0+36]=meanITSY;
      itsdy->Draw("Snp.mean",cutQ+cutSector+cutSide);
      Double_t meanITSS=itsdy->GetHistogram()->GetMean();
      vecITSS[isec0]=meanITSS;
      vecITSS[isec0+36]=meanITSS;
      itsdy->Draw("VSnp.mean",cutQ+cutSector+cutSide);
      Double_t meanVS=itsdy->GetHistogram()->GetMean();
      vecVS[isec0]=meanVS;
      vecVS[isec0+36]=meanVS;
    }
  }
  AliTPCROC * roc = AliTPCROC::Instance();
  Double_t fXIROC = (roc->GetPadRowRadii(0,0)+roc->GetPadRowRadii(0,roc->GetNRows(0)-1))*0.5;
  Double_t fXOROC = (roc->GetPadRowRadii(36,0)+roc->GetPadRowRadii(36,roc->GetNRows(36)-1))*0.5;
  Double_t fXmiddle   = ( roc->GetPadRowRadii(0,0)+roc->GetPadRowRadii(36,roc->GetNRows(36)-1))*0.5;
  Double_t fXIO       = ( roc->GetPadRowRadii(0,roc->GetNRows(0)-1)+roc->GetPadRowRadii(36,0))*0.5;

  TTreeSRedirector *pcstream=new TTreeSRedirector("combAlign.root");
  
  {
    for (Int_t iter=0; iter<2; iter++){
    for (Int_t isec0=0; isec0<72; isec0++){
    for (Int_t isec1=0; isec1<72; isec1++){
      TH1 * his = align->GetHisto(AliTPCcalibAlign::kY,isec0,isec1);
      TH1 * hisPhi = align->GetHisto(AliTPCcalibAlign::kPhi,isec0,isec1);
      if (!his) continue;
      if (his->GetEntries()<100) continue;
      Double_t xref=fXIO;
      if (isec0<36&&isec1<36) xref=fXIROC;
      if (isec0>=36&&isec1>=36) xref=fXOROC;
      Double_t meanTPC=his->GetMean()/xref;
      Double_t meanTPCPhi=hisPhi->GetMean();
      Double_t meanITS0=vecITSY[isec0];
      Double_t meanITS1=vecITSY[isec1];
      Double_t meanITSS0=vecITSS[isec0];
      Double_t meanITSS1=vecITSS[isec1];
      Double_t meanVS0=vecVS[isec0];
      Double_t meanVS1=vecVS[isec1];
      AliTPCkalmanAlign::UpdateAlign1D(meanTPC, 0.001, isec0,isec1,  vecAlign,covAlign);
      AliTPCkalmanAlign::UpdateAlign1D(meanTPCPhi, 0.001, isec0,isec1,  vecAlign,covAlign);
      AliTPCkalmanAlign::UpdateAlign1D(meanITS1-meanITS0, 0.001, isec0,isec1,  vecAlign,covAlign);
      AliTPCkalmanAlign::UpdateAlign1D(meanITSS1-meanITSS0, 0.001, isec0,isec1,  vecAlign,covAlign);
      AliTPCkalmanAlign::UpdateAlign1D(meanVS1-meanVS0, 0.001, isec0,isec1,  vecAlign,covAlign);
      //printf("isec0\t%d\tisec1\t%d\t%f\t%f\t%f\n",isec0,isec1, meanTPC, meanITS0,meanITS1);
      Double_t kalman0= vecAlign(isec0,0);
      Double_t kalman1= vecAlign(isec1,0);
      if (iter>0) (*pcstream)<<"align"<<
	"iter="<<iter<<
	"xref="<<xref<<
	"isec0="<<isec0<<
	"isec1="<<isec1<<
	"mTPC="<<meanTPC<<
	"mTPCPhi="<<meanTPCPhi<<
	"mITS0="<<meanITS0<<
	"mITS1="<<meanITS1<<
	"mITSS0="<<meanITSS0<<
	"mITSS1="<<meanITSS1<<
	"mVS0="<<meanVS0<<
	"mVS1="<<meanVS1<<
	"k0="<<kalman0<<
	"k1="<<kalman1<<
	"\n";
    }          
    }
    }
  }
  pcstream->GetFile()->cd();
  vecAlign.Write("alignPhiMean");
  covAlign.Write("alingPhiCovar");
  delete pcstream;
  TFile f("combAlign.root");
  TTree * treeA = (TTree*)f.Get("align"); 
  treeA->SetMarkerStyle(25);
  treeA->SetMarkerSize(0.5);
}



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