ROOT logo
//
// Make lookup of distortion TPC distortion +(ITS and TRD) 
// Input: Residual histograms obtained in the AliTPCcalibTime

// Residual histograms:  
//   1. TPC-ITS  - entrance of the TPC  
//   2. TPC-ITS  - at the vertex
//   3. TPC-TRD  - outer wall of the TPC 

// Histogram binning:
//   1. Theta    - fP3
//   2. Phi      - global phi at the entrance (case 1,2) and at the outer wall of TPC (case 3)
//   3. snp(phi) - fP2 - local inclination angle at reference X 
              
// Output value:
//   Mean residuals, rms and number of entries in each bing
// 
// 

 
/* 
  Example usage:
  gROOT->Macro("~/rootlogon.C")
  gSystem->AddIncludePath("-I$ALICE_ROOT/STAT")
  gSystem->AddIncludePath("-I$ALICE_ROOT/TPC")
  gSystem->AddIncludePath("-I$ALICE_ROOT/TPC/macros")
  gSystem->Load("libANALYSIS");
  gSystem->Load("libTPCcalib");
  .L  $ALICE_ROOT/TPC/CalibMacros/MakeLookup.C+
  Int_t run=115888
  //     .x $ALICE_ROOT/ANALYSIS/CalibMacros/Pass0/ConfigCalibTrain.C(run,"local:///lustre/alice/alien/alice/data/2010/OCDB")

  MakeLookup(run,0);

  //Local check of procedure
  TTreeSRedirector * pcstream  = new TTreeSRedirector("mean.root");
  TFile f("CalibObjects.root");
  AliTPCcalibTime  *calibTime= f.Get("calibTime");
  THnSparse * his = calibTime->GetResHistoTPCITS(0);
  his->GetAxis(1)->SetRangeUser(-1,1);
  his->GetAxis(2)->SetRange(0,1000000);
  his->GetAxis(3)->SetRangeUser(-0.3,0.3);
  //

  

*/

#if !defined(__CINT__) || defined(__MAKECINT__)
#include "THnSparse.h"
#include "TLatex.h"
#include "TCanvas.h"
#include "TLegend.h"
#include "TSystem.h"
#include "TFile.h"
#include "TChain.h"
#include "TCut.h"
#include "TH3.h"
#include "TProfile3D.h"
#include "TMath.h" 
#include "TVectorD.h"
#include "TMatrixD.h"
#include "TStatToolkit.h"
#include "TTreeStream.h"
#include "AliExternalTrackParam.h"
#include "AliESDfriend.h"
#include "AliTPCcalibTime.h"
#include "TROOT.h"
#include "AliXRDPROOFtoolkit.h"
#include "AliTPCCorrection.h"
#include "AliTPCExBTwist.h"
#include "AliTPCGGVoltError.h"
#include "AliTPCComposedCorrection.h"
#include "AliTPCExBConical.h"
#include "TPostScript.h"
#include "TStyle.h"
#include "AliTrackerBase.h"
#include "AliTPCCalibGlobalMisalignment.h"
#include  "AliTPCExBEffective.h"
#include  "AliTPCExBBShape.h"
#endif

TChain * chain=0;
void MakeLookup(Int_t run, Int_t mode);
//void MakeLookupHisto(THnSparse * his, TTreeSRedirector *pcstream, const char* hname, Int_t run);
void FitLookup(TChain *chainIn, const char *prefix, TVectorD &vecA, TVectorD &vecC, TVectorD& vecStatA, TVectorD &vecStatD, TCut cut, TObjArray *picArray);
void MakeFits(Int_t run);
void MakeFitTree();
void DrawDistortionDy(TCut cutUser="", Double_t ymin=-0.6, Double_t ymax=0.6);
void DrawDistortionMaps(const char *fname="mean.root");
TCanvas *  DrawDistortionMaps(TTree * treedy, TTree * treedsnp, TTree* treed1Pt, const char * name, const char *title);
AliTPCComposedCorrection * MakeComposedCorrection();
void MakeLaserTree();
void AddEffectiveCorrection(AliTPCComposedCorrection* comp);

void MakeLookup(Int_t run, Int_t mode){
  //
  // make a lookup tree with mean values
  // 5. make laser tree
  // 4. 
  gSystem->AddIncludePath("-I$ALICE_ROOT/STAT");
  gSystem->Load("libANALYSIS");
  gSystem->Load("libTPCcalib");
  if (mode==5) {MakeLaserTree();return;};     
  if (mode==4) {DrawDistortionMaps();return;}
  if (mode==1){
    DrawDistortionDy("abs(snp)<0.25"); 
    DrawDistortionMaps();
    return;
  }
  if (mode==2) return  MakeFitTree();
  TFile f("TPCTimeObjects.root");
  AliTPCcalibTime  *calibTime= (AliTPCcalibTime*)f.Get("calibTime");
  if (!calibTime){
     TFile*  f2 = new TFile("CalibObjects.root");
     calibTime= (AliTPCcalibTime*)f2->Get("calibTime");
     if (!calibTime){
       TFile*  f3 = new TFile("../CalibObjects.root");
       calibTime= (AliTPCcalibTime*)f3->Get("calibTime");
     }
  }
  //
  TTreeSRedirector * pcstream  = new TTreeSRedirector("mean.root");
  THnSparse * his = 0;
  const char * hname[5]={"dy","dz","dsnp","dtheta","d1pt"};
  if (calibTime){
    for (Int_t ihis=0; ihis<5;ihis++){
      his = calibTime->GetResHistoTPCITS(ihis);
      his->GetAxis(1)->SetRangeUser(-1.1,1.1);
      his->GetAxis(2)->SetRange(0,1000000);
      his->GetAxis(3)->SetRangeUser(-0.5,0.5);
      AliTPCCorrection::MakeDistortionMap(his,pcstream, Form("ITS%s",hname[ihis]),run);
      //
      his = calibTime->GetResHistoTPCvertex(ihis);
      his->GetAxis(1)->SetRangeUser(-1.1,1.1);
      his->GetAxis(2)->SetRange(0,1000000);
      his->GetAxis(3)->SetRangeUser(-0.5,0.5);
      AliTPCCorrection::MakeDistortionMap(his,pcstream, Form("Vertex%s",hname[ihis]),run);
      //
      his = calibTime->GetResHistoTPCTRD(ihis);
      his->GetAxis(1)->SetRangeUser(-1.1,1.1);
      his->GetAxis(2)->SetRange(0,1000000);
      his->GetAxis(3)->SetRangeUser(-0.5,0.5);
      AliTPCCorrection::MakeDistortionMap(his,pcstream, Form("TRD%s",hname[ihis]),run);
      his = calibTime->GetResHistoTPCTOF(ihis);
      if (his){
	his->GetAxis(1)->SetRangeUser(-1.1,1.1);
	his->GetAxis(2)->SetRange(0,1000000);
	his->GetAxis(3)->SetRangeUser(-0.5,0.5);
	AliTPCCorrection::MakeDistortionMap(his,pcstream, Form("TOF%s",hname[ihis]),run);
      }
    }
  }
  delete pcstream;
  gSystem->Exec("echo `pwd`/mean.root > distort.txt");
  MakeFits(run);
}


void MakeFits(Int_t run){
  //
  // Make the fits of distortion
  //   store fit results and QA pictures in the file distortFit.root 
  //
  TCut cut="entries>50&&rms>0";
  TTreeSRedirector *pcstream = new TTreeSRedirector("distortFit.root");
  AliXRDPROOFtoolkit tool;
  TVectorD vecA[100],vecC[100], vecStatA[100],vecStatC[100];
  TObjArray * picArray= new TObjArray();
  //
  TChain *chainITSdy      = tool.MakeChain("distort.txt","ITSdy",0,100000);
  TChain *chainITSdsnp     = tool.MakeChain("distort.txt","ITSdsnp",0,100000);
  TChain *chainTRDdy      = tool.MakeChain("distort.txt","TRDdy",0,100000);
  TChain *chainTRDdsnp     = tool.MakeChain("distort.txt","TRDdsnp",0,100000);
  TChain *chainVertexdy   = tool.MakeChain("distort.txt","Vertexdy",0,100000);
  TChain *chainVertexdsnp  = tool.MakeChain("distort.txt","Vertexdsnp",0,100000);

  (*pcstream)<<"fits"<<"run="<<run;

  FitLookup(chainITSdy, "yits-tpc",vecA[0],vecC[0],vecStatA[0],vecStatC[0],cut, picArray);
  (*pcstream)<<"fits"<<"itsdyA.="<<&vecA[0]<<"itsdyC.="<<&vecC[0];
  (*pcstream)<<"fits"<<"itsdyAS.="<<&vecStatA[0]<<"itsdyCS.="<<&vecStatC[0];
  FitLookup(chainITSdsnp, "snpits-tpc",vecA[1],vecC[1],vecStatA[1],vecStatC[1],cut, picArray);
  (*pcstream)<<"fits"<<"itsdsnpA.="<<&vecA[1]<<"itsdsnpC.="<<&vecC[1];
  (*pcstream)<<"fits"<<"itsdsnpAS.="<<&vecStatA[1]<<"itsdsnpCS.="<<&vecStatC[1];
  //
  FitLookup(chainTRDdy, "ytrd-tpc",vecA[5],vecC[5],vecStatA[5],vecStatC[5],cut, picArray);
  (*pcstream)<<"fits"<<"trddyA.="<<&vecA[5]<<"trddyC="<<&vecC[5];
  (*pcstream)<<"fits"<<"trddyAS.="<<&vecStatA[5]<<"trddyCS.="<<&vecStatC[5];
  FitLookup(chainTRDdsnp, "snptrd-tpc",vecA[6],vecC[6],vecStatA[6],vecStatC[6],cut, picArray);
  (*pcstream)<<"fits"<<"trddsnpA.="<<&vecA[6]<<"trddsnpC.="<<&vecC[6];
  (*pcstream)<<"fits"<<"trddsnpAS.="<<&vecStatA[6]<<"trddsnpCS.="<<&vecStatC[6];
  //
  FitLookup(chainVertexdy, "yvertex-tpc",vecA[10],vecC[10],vecStatA[10],vecStatC[10],cut, picArray);
  (*pcstream)<<"fits"<<"vertexdyA.="<<&vecA[10]<<"vertexdyC.="<<&vecC[10];
  (*pcstream)<<"fits"<<"vertexdyAS.="<<&vecStatA[10]<<"vertexdyCS.="<<&vecStatC[10];
  FitLookup(chainVertexdsnp, "snpvertex-tpc",vecA[11],vecC[11],vecStatA[11],vecStatC[11],cut, picArray);
  (*pcstream)<<"fits"<<"vertexdsnpA.="<<&vecA[11]<<"vertexdsnpC.="<<&vecC[11];
  (*pcstream)<<"fits"<<"vertexdsnpAS.="<<&vecStatA[11]<<"vertexdsnpCS.="<<&vecStatC[11];
  //
  (*pcstream)<<"fits"<<"\n";

  pcstream->GetFile()->cd();
  for (Int_t i=0;i<picArray->GetEntries(); i++){
    TObject * obj = picArray->At(i);
    if (obj) obj->Write(obj->GetName());
  }
  //
  //
  //
  chainITSdy->AddFriend(chainITSdy,"ITSdy");
  chainITSdy->AddFriend(chainITSdsnp,"ITSdsnp");
  chainITSdy->AddFriend(chainTRDdy,"TRDdy");
  chainITSdy->AddFriend(chainTRDdsnp,"TRDdsnp");
  chainITSdy->AddFriend(chainVertexdy,"Vertexdy");
  chainITSdy->AddFriend(chainVertexdsnp,"Vertexdsnp");
  TTree * tree = chainITSdy->CloneTree();
  tree->Write("distortionTree");
  delete pcstream;

  //
  //
}





void FitLookup(TChain *chainIn, const char *prefix, TVectorD &vecA, TVectorD &vecC, TVectorD& vecStatA, TVectorD &vecStatC,  TCut cut, TObjArray *picArray){ 
  //  TCut cut="entries>100&&rms>0";
  vecStatA.ResizeTo(6);
  vecStatC.ResizeTo(6);
  vecA.ResizeTo(10);
  vecC.ResizeTo(10);
  Int_t  npointsMax=30000000;
  TStatToolkit toolkit;
  Double_t chi2A=0;
  Double_t chi2C=0;
  Int_t    npointsA=0;
  Int_t    npointsC=0;
  TVectorD paramA;
  TVectorD paramC;
  TMatrixD covar;
  TString *strFitYA;
  TString *strFitYC;

  TString  fstring="";   // magnetic part
  //fstring+="(1)++";             //0    - offset value
  fstring+="(cos(phi))++";        //1    - cos part 
  fstring+="(sin(phi))++";        //2    - sin part
  //
  fstring+="(theta)++";           //3
  fstring+="(theta*cos(phi))++";  //4
  fstring+="(theta*sin(phi))++";  //5
  //
  fstring+="(snp)++";             //6   - delta X(radial)  coeficients - offset
  fstring+="(snp*cos(phi))++";    //7   - delta X(radial) coeficient  
  fstring+="(snp*sin(phi))++";    //8   
  //
  //
  strFitYA = TStatToolkit::FitPlane(chainIn,"mean", fstring.Data(),cut+"theta>0", chi2A,npointsA,paramA,covar,-1,0, npointsMax, kFALSE);
  strFitYC = TStatToolkit::FitPlane(chainIn,"mean", fstring.Data(),cut+"theta<0", chi2C,npointsC,paramC,covar,-1,0, npointsMax,kFALSE);
  strFitYA->Tokenize("++")->Print();
  strFitYC->Tokenize("++")->Print();
  chainIn->SetAlias("dyA",strFitYA->Data());
  chainIn->SetAlias("dyC",strFitYC->Data());
  //
  TH1 * his=0;
  vecA.ResizeTo(paramA.GetNrows());
  vecC.ResizeTo(paramC.GetNrows());
  vecA=paramA;
  vecC=paramC;
  // A side stat
  vecStatA[0]=npointsA;
  vecStatA[1]=TMath::Sqrt(chi2A/npointsA);
  chainIn->Draw("mean",cut+"theta>0");
  his=chainIn->GetHistogram();
  his->SetName(Form("Orig #Delta%sA",prefix));
  his->SetTitle(Form("Orig #Delta%sA",prefix));
  picArray->AddLast(his->Clone());
  vecStatA[2] = his->GetMean();
  vecStatA[3] = his->GetRMS();
  chainIn->Draw("mean-dyA",cut+"theta>0");
  his=chainIn->GetHistogram();
  his->SetName(Form("Corr. #Delta%sA",prefix));
  his->SetTitle(Form("Corr. #Delta%sA",prefix));
  picArray->AddLast(his->Clone());
  vecStatA[4] = his->GetMean();
  vecStatA[5] = his->GetRMS();
  //
  // C side stat
  vecStatC[0]=npointsC;
  vecStatC[1]=TMath::Sqrt(chi2C/npointsC);
  chainIn->Draw("mean",cut+"theta<0");
  his=chainIn->GetHistogram();
  his->SetName(Form("Orig #Delta%sC",prefix));
  his->SetTitle(Form("Orig #Delta%sC",prefix));
  picArray->AddLast(his->Clone());
  vecStatC[2] = his->GetMean();
  vecStatC[3] = his->GetRMS();
  chainIn->Draw("mean-dyC",cut+"theta<0");
  his=chainIn->GetHistogram();
  his->SetName(Form("Corr. #Delta%sC",prefix));
  his->SetTitle(Form("Corr. #Delta%sC",prefix));
  picArray->AddLast(his->Clone());
  vecStatC[4] = his->GetMean();
  vecStatC[5] = his->GetRMS();
  
  vecStatA.Print();
  vecStatC.Print();
}



void DrawDistortionDy(TCut cutUser, Double_t ymin, Double_t ymax){
  //
  //
  //
  TFile fplus("meanBplus.root");
  TFile fminus("meanBminus.root");
  TTree * titsDyPlus=  (TTree*)fplus.Get("ITSdy");
  TTree * titsDyMinus= (TTree*)fminus.Get("ITSdy");
  TTree * ttrdDyPlus=  (TTree*)fplus.Get("TRDdy");
  TTree * ttrdDyMinus= (TTree*)fminus.Get("TRDdy");
  //
  TTree * titsDsnpPlus=  (TTree*)fplus.Get("ITSdsnp");
  TTree * titsDsnpMinus= (TTree*)fminus.Get("ITSdsnp");
  TTree * ttrdDsnpPlus=  (TTree*)fplus.Get("TRDdsnp");
  TTree * ttrdDsnpMinus= (TTree*)fminus.Get("TRDdsnp");
  TTree * titsDthetaPlus=  (TTree*)fplus.Get("ITSdtheta");
  TTree * titsDthetaMinus= (TTree*)fminus.Get("ITSdtheta");
  TTree * ttrdDthetaPlus=  (TTree*)fplus.Get("TRDdtheta");
  TTree * ttrdDthetaMinus= (TTree*)fminus.Get("TRDdtheta");
  TCut cut="rms>0&&entries>100&&abs(theta)<1&&abs(snp)<0.3";
  cut+=cutUser;
  //
  titsDyPlus->AddFriend(titsDyMinus,"TM.");
  titsDyPlus->AddFriend(titsDsnpMinus,"Tsnp.");
  titsDyPlus->AddFriend(titsDthetaMinus,"Ttheta.");
  ttrdDyPlus->AddFriend(ttrdDyMinus,"TM.");
  titsDsnpPlus->AddFriend(titsDsnpMinus,"TM.");
  ttrdDsnpPlus->AddFriend(ttrdDsnpMinus,"TM.");
 
  //
  //
  //
  Int_t entries=0;
  TGraph * graphITSYC[3];
  TGraph * graphITSYA[3];
  TGraph * graphTRDYC[3];
  TGraph * graphTRDYA[3];
  //
  //
  entries=titsDyPlus->Draw("mean-TM..mean:phi",cut+"theta<-0.1","goff");
  graphITSYC[0] = new TGraph(entries, titsDyPlus->GetV2(),titsDyPlus->GetV1());
  titsDyMinus->Draw("mean:phi",cut+"theta<-0.1","goff");
  graphITSYC[2] = new TGraph(entries, titsDyMinus->GetV2(),titsDyMinus->GetV1());
  titsDyPlus->Draw("mean:phi",cut+"theta<-0.1","goff");
  graphITSYC[1] = new TGraph(entries, titsDyPlus->GetV2(),titsDyPlus->GetV1());
  //
  entries=titsDyPlus->Draw("mean-TM..mean:phi",cut+"theta>0.1","goff");
  graphITSYA[0] = new TGraph(entries, titsDyPlus->GetV2(),titsDyPlus->GetV1());
  titsDyMinus->Draw("mean:phi",cut+"theta>0.1","goff");
  graphITSYA[2] = new TGraph(entries, titsDyMinus->GetV2(),titsDyMinus->GetV1());
  titsDyPlus->Draw("mean:phi",cut+"theta>0.1","goff");
  graphITSYA[1] = new TGraph(entries, titsDyPlus->GetV2(),titsDyPlus->GetV1());
  //
  entries=ttrdDyPlus->Draw("mean-TM..mean:phi",cut+"theta<-0.1&&TM..entries>100","goff");
  graphTRDYC[0] = new TGraph(entries, ttrdDyPlus->GetV2(),ttrdDyPlus->GetV1());
  ttrdDyMinus->Draw("mean:phi",cut+"theta<-0.1","goff");
  graphTRDYC[2] = new TGraph(entries, ttrdDyMinus->GetV2(),ttrdDyMinus->GetV1());
  ttrdDyPlus->Draw("mean:phi",cut+"theta<-0.1","goff");
  graphTRDYC[1] = new TGraph(entries, ttrdDyPlus->GetV2(),ttrdDyPlus->GetV1());
  //
  entries=ttrdDyPlus->Draw("mean-TM..mean:phi",cut+"theta>0.1&&TM..entries>100","goff");
  graphTRDYA[0] = new TGraph(entries, ttrdDyPlus->GetV2(),ttrdDyPlus->GetV1());
  ttrdDyMinus->Draw("mean:phi",cut+"theta>0.1","goff");
  graphTRDYA[2] = new TGraph(entries, ttrdDyMinus->GetV2(),ttrdDyMinus->GetV1());
  ttrdDyPlus->Draw("mean:phi",cut+"theta>0.1","goff");
  graphTRDYA[1] = new TGraph(entries, ttrdDyPlus->GetV2(),ttrdDyPlus->GetV1());
  //


  //
  {for (Int_t i=0; i<3; i++){
    graphITSYC[i]->SetMaximum(ymax+0.2); graphITSYC[i]->SetMinimum(ymin);
    graphITSYC[i]->GetXaxis()->SetTitle("#phi"); graphITSYC[i]->GetYaxis()->SetTitle("#Delta r#phi (cm)");
    graphITSYC[i]->SetMarkerColor(i+1); graphITSYC[i]->SetMarkerStyle(20+i);
    graphITSYA[i]->SetMaximum(ymax+0.2); graphITSYA[i]->SetMinimum(ymin);
    graphITSYA[i]->GetXaxis()->SetTitle("#phi"); graphITSYA[i]->GetYaxis()->SetTitle("#Delta r#phi (cm)");
    graphITSYA[i]->SetMarkerColor(i+1); graphITSYA[i]->SetMarkerStyle(20+i);
    graphTRDYC[i]->SetMaximum(ymax+0.2); graphTRDYC[i]->SetMinimum(ymin);
    graphTRDYC[i]->GetXaxis()->SetTitle("#phi"); graphTRDYC[i]->GetYaxis()->SetTitle("#Delta r#phi (cm)");
    graphTRDYC[i]->SetMarkerColor(i+1); graphTRDYC[i]->SetMarkerStyle(20+i);
    graphTRDYA[i]->SetMaximum(ymax+0.2); graphTRDYA[i]->SetMinimum(ymin);
    graphTRDYA[i]->GetXaxis()->SetTitle("#phi"); graphTRDYA[i]->GetYaxis()->SetTitle("#Delta r#phi (cm)");
    graphTRDYA[i]->SetMarkerColor(i+1); graphTRDYA[i]->SetMarkerStyle(20+i);
    }
  }
  TLegend *legend=0;
  TString cname="cdeltaY";
  TString dirName=gSystem->GetFromPipe("dirname `pwd` | xargs basename ");
  TString splus=gSystem->GetFromPipe("ls -al meanBplus.root | gawk '{print \"File: \"$8\" \"$6\" \"$7\" \";}'");
  TString sminus=gSystem->GetFromPipe("ls -al meanBminus.root | gawk '{print \"File: \"$8\" \"$6\" \"$7\" \";}'");
  
  TCanvas *cdeltaY = new TCanvas("cdeltaY","cdeltaY",1300,800);
  cdeltaY->Divide(2,2);

  cdeltaY->cd(1);
  graphITSYC[0]->Draw("ap");
  graphITSYC[1]->Draw("p");
  graphITSYC[2]->Draw("p");
  legend = new TLegend(0.6,0.6,1.0,1.0,"ITS-TPC C side #Delta r-#phi");
  legend->AddEntry("",dirName.Data());
  legend->AddEntry("",splus.Data());
  legend->AddEntry("",sminus.Data());
  legend->AddEntry(graphITSYC[0],"B_{plus}-B_{minus}");
  legend->AddEntry(graphITSYC[1],"B_{plus}");
  legend->AddEntry(graphITSYC[2],"B_{minus}");
  legend->Draw();

  cdeltaY->cd(2);
  graphITSYA[0]->Draw("ap");
  graphITSYA[1]->Draw("p");
  graphITSYA[2]->Draw("p");
  legend = new TLegend(0.6,0.6,1.0,1.0,"ITS-TPC A side #Delta r-#phi");
  legend->AddEntry(graphITSYA[0],"B_{plus}-B_{minus}");
  legend->AddEntry(graphITSYA[1],"B_{plus}");
  legend->AddEntry(graphITSYA[2],"B_{minus}");
  legend->Draw();

  //
  cdeltaY->cd(3);
  graphTRDYC[0]->Draw("ap");
  graphTRDYC[1]->Draw("p");
  graphTRDYC[2]->Draw("p");
  legend = new TLegend(0.6,0.6,1.0,1.0,"TRD-TPC C side #Delta r-#phi");
  legend->AddEntry(graphTRDYC[0],"B_{plus}-B_{minus}");
  legend->AddEntry(graphTRDYC[1],"B_{plus}");
  legend->AddEntry(graphTRDYC[2],"B_{minus}");
  legend->Draw();

  cdeltaY->cd(4);
  graphTRDYA[0]->Draw("ap");
  graphTRDYA[1]->Draw("p");
  graphTRDYA[2]->Draw("p");
  legend = new TLegend(0.6,0.6,1.0,1.0,"TRD-TPC A side #Delta r-#phi");
  legend->AddEntry(graphTRDYA[0],"B_{plus}-B_{minus}");
  legend->AddEntry(graphTRDYA[1],"B_{plus}");
  legend->AddEntry(graphTRDYA[2],"B_{minus}");
  legend->Draw();
  cdeltaY->SaveAs(dirName+"_deltaY.pdf");

}






void MakeFitTree(){
  //
  // 1. Initialize ocdb e.g 
  //     .x $ALICE_ROOT/ANALYSIS/CalibMacros/Pass0/ConfigCalibTrain.C(114972,)  
  //     .x $ALICE_ROOT/ANALYSIS/CalibMacros/Pass0/ConfigCalibTrain.C(114972,"local:///lustre/alice/alien/alice/data/2010/OCDB")
  //
  //

  AliTPCComposedCorrection *cc= MakeComposedCorrection();
  TObjArray * corr = (TObjArray*)(cc->GetCorrections());
  //  corr->AddLast(cc);
  const Int_t kskip=23;
  //
  TFile f("mean.root");
  TTree * tree= 0;
  tree = (TTree*)f.Get("ITSdy");
  printf("ITSdy\n");
  AliTPCCorrection::MakeTrackDistortionTree(tree,0,0,corr,kskip);
  tree = (TTree*)f.Get("TRDdy");
  printf("TRDdy\n");
  AliTPCCorrection::MakeTrackDistortionTree(tree,1,0,corr,kskip);
  tree = (TTree*)f.Get("Vertexdy");
  printf("Vertexdy\n");
  AliTPCCorrection::MakeTrackDistortionTree(tree,2,0,corr,kskip);
  tree = (TTree*)f.Get("TOFdy");
  printf("TOFdy\n");
  if (tree) AliTPCCorrection::MakeTrackDistortionTree(tree,3,0,corr,kskip);

  //
  tree = (TTree*)f.Get("ITSdsnp");
  printf("ITSdsnp\n");
  AliTPCCorrection::MakeTrackDistortionTree(tree,0,2,corr,kskip);
  tree = (TTree*)f.Get("TRDdsnp");
  printf("TRDdsnp\n");
  AliTPCCorrection::MakeTrackDistortionTree(tree,1,2,corr,kskip);
  tree = (TTree*)f.Get("Vertexdsnp");
  printf("Vertexdsnp\n");
  AliTPCCorrection::MakeTrackDistortionTree(tree,2,2,corr,kskip);
  //
 
  tree = (TTree*)f.Get("ITSd1pt");
  printf("ITSd1pt\n");
  if (tree) AliTPCCorrection::MakeTrackDistortionTree(tree,0,4,corr,kskip);

  tree = (TTree*)f.Get("TOFdz");
  printf("TOFdz\n");
  if (tree) AliTPCCorrection::MakeTrackDistortionTree(tree,3,0,corr,kskip);


  tree = (TTree*)f.Get("ITSdz");
  printf("ITSdz\n");
  AliTPCCorrection::MakeTrackDistortionTree(tree,0,1,corr,kskip);
  tree = (TTree*)f.Get("Vertexdz");
  printf("Vertexdz\n");
  AliTPCCorrection::MakeTrackDistortionTree(tree,2,1,corr,kskip);

  //
  tree = (TTree*)f.Get("ITSdtheta");
  printf("ITSdtheta\n");
  AliTPCCorrection::MakeTrackDistortionTree(tree,0,3,corr,kskip);
  //
  tree = (TTree*)f.Get("Vertexdtheta");
  printf("Vertexdtheta\n");
  AliTPCCorrection::MakeTrackDistortionTree(tree,2,3,corr,kskip);


}



void MakeGlobalFit(){
  AliXRDPROOFtoolkit tool;
  TChain *chain      = tool.MakeChain("distortion.txt","fit",0,100000);

  TCut cutS="rms>0&&entries>100";
  TCut cut=cutS+"(ptype==0||ptype==2||ptype==3||(ptype==4&&dtype==0))";
  Int_t  npointsMax=30000000;
  TStatToolkit toolkit;
  Double_t chi2=0;
  Int_t    npoints=0;
  TVectorD param;
  TMatrixD covar;
  chain->SetAlias("side","(1+(theta>0)*2)");
  TString  fstring="";     // magnetic part
  fstring+="tX1++";        //1    - twist x in mrad
  fstring+="tY1++";        //2    - twist y in mrad 
  fstring+="ExBCon++";     //3    - custom
  fstring+="ExBCon*cos(phi)++";     //3    - custom
  fstring+="ExBCon*sin(phi)++";     //3    - custom
  fstring+="ggA++";        //4    - gating grid
  fstring+="ggA*cos(phi)++";        //4    - gating grid
  fstring+="ggA*sin(phi)++";        //4    - gating grid
  fstring+="ggC++";        //5    - gating grid
  fstring+="ggC*cos(phi)++";        //5    - gating grid
  fstring+="ggC*sin(phi)++";        //5    - gating grid
  fstring+="(ptype==2)++";
  fstring+="(ptype==3)++";
  fstring+="(ptype==4)++";
  fstring+="(ptype==4)*bz++";

  TString *strDelta = TStatToolkit::FitPlane(chain,"mean:rms", fstring.Data(),cut+"(Entry$%13==0)", chi2,npoints,param,covar,-1,0, npointsMax, kTRUE);
  chain->SetAlias("delta",strDelta->Data());
  strDelta->Tokenize("++")->Print();

}


void MakeGlobalFitRelative(Int_t highFrequency=0){
  //
  // Make a global fit of ExB
  // To get rid of the misalignment errors -
  //   Use relative change of deltas for 2 different filed settings
  //    

  AliXRDPROOFtoolkit tool;
  //  TChain *chain         = tool.MakeChain("distortion.txt","fit",0,100000);
  TChain *chainPlus     = tool.MakeChain("distortionPlus.txt","fit",0,100000);
  TChain *chainMinus    = tool.MakeChain("distortionMinus.txt","fit",0,100000);
  TChain *chain0        = tool.MakeChain("distortionField0.txt","fit",0,100000);

  chainPlus->AddFriend(chainMinus,"M");
  chainPlus->AddFriend(chain0,"F0");

  TCut cut="rms>0&&M.rms>0&&entries>100&&dtype==0&&(ptype==0||ptype==2||ptype==4)";
  chainPlus->SetAlias("deltaM","mean-M.mean");
  Int_t  npointsMax=30000000;
  TStatToolkit toolkit;
  Double_t chi2=0;
  Int_t    npoints=0;
  TVectorD param;
  TMatrixD covar;
  //
  TString  fstring="";     // fit string
  fstring+="(ptype==0)*cos(phi)++";   //     - primitive gx movement
  fstring+="(ptype==0)*sin(phi)++";   //     - primitive gy movement

  fstring+="(tX1-M.tX1)++";           // 1    - twist x in mrad
  fstring+="(tY1-M.tY1)++";           // 2    - twist y in mrad 
  //
  fstring+="(ExBConA-M.ExBConA)++";   // 3 conical shape A side 
  fstring+="(ExBConC-M.ExBConC)++";   // 4 conical shape C side 
  //
  fstring+="(ggA-M.ggA)++";   // 3 conical shape A side 
  fstring+="(ggC-M.ggC)++";   // 4 conical shape C side 
  
  if (highFrequency) {for (Int_t i=1; i<highFrequency; i++){
      fstring+=Form("((ggA-M.ggA)*cos(%d*phi))++",i);
      fstring+=Form("((ggA-M.ggA)*sin(%d*phi))++",i);
      //
      fstring+=Form("((ggC-M.ggC)*cos(%d*phi))++",i);
      fstring+=Form("((ggC-M.ggC)*sin(%d*phi))++",i);
      if (i>1){
	fstring+=Form("((ExBConA-M.ExBConA)*cos(%d*phi))++",i);
	fstring+=Form("((ExBConA-M.ExBConA)*sin(%d*phi))++",i);
	fstring+=Form("((ExBConC-M.ExBConC)*cos(%d*phi))++",i);
	fstring+=Form("((ExBConC-M.ExBConC)*sin(%d*phi))++",i);
      }
    }}

  TString *strDelta = TStatToolkit::FitPlane(chainPlus,"deltaM:rms", fstring.Data(),cut+"(Entry$%7==0)", chi2,npoints,param,covar,-1,0, npointsMax, kTRUE);
  chainPlus->SetAlias("delta",strDelta->Data());
  TObjArray *fitArray = strDelta->Tokenize("++");
  fitArray->Print();

  //
  // Draw results
  //  
  TH1::AddDirectory(0);
  TLatex *lfit=new TLatex;


  TCanvas * canvasdY= new TCanvas(Form("deltaY%d",highFrequency),Form("deltaY%d",highFrequency),1200,800);
  TCanvas * canvasdSnp= new TCanvas(Form("deltaSnp%d",highFrequency),Form("deltaSnp%d",highFrequency),1200,800);
  TCanvas * canvasd1pt= new TCanvas(Form("delta1pt%d",highFrequency),Form("delta1pt%d",highFrequency),1200,800);

  canvasdY->Divide(3,2);
  chainPlus->SetMarkerStyle(25);
  chainPlus->SetMarkerSize(0.5);
  chainPlus->SetMarkerColor(1);
  canvasdY->cd(1);
  chainPlus->Draw("deltaM:delta",cut+"theta>0&&abs(snp)<0.2&&ptype==0","");
  canvasdY->cd(2);
  chainPlus->SetMarkerColor(1);
  chainPlus->Draw("deltaM-delta>>deltaCorr(50,-0.4,0.4)",cut+"theta>0&&abs(snp)<0.2&&ptype==0","err");
  chainPlus->SetMarkerColor(3);
  chainPlus->Draw("deltaM",cut+"theta>0&&abs(snp)<0.2&&ptype==0","errsame");
  canvasdY->cd(3);
  chainPlus->SetMarkerColor(1);
  chainPlus->Draw("deltaM:phi",cut+"theta>0&&abs(snp)<0.2&&ptype==0","");
  chainPlus->SetMarkerColor(2);
  chainPlus->Draw("deltaM-delta:phi",cut+"theta>0&&abs(snp)<0.2&&ptype==0","same");
  canvasdY->cd(6);
  chainPlus->SetMarkerStyle(26);
  chainPlus->SetMarkerColor(1);  
  chainPlus->Draw("deltaM:phi",cut+"theta<0&&abs(snp)<0.2&&ptype==0","");
  chainPlus->SetMarkerColor(4);  
  chainPlus->Draw("deltaM-delta:phi",cut+"theta<0&&abs(snp)<0.2&&ptype==0","same");
  
  

  canvasdSnp->Divide(3,2);
  chainPlus->SetMarkerStyle(25);
  chainPlus->SetMarkerSize(0.5);
  chainPlus->SetMarkerColor(1);
  canvasdSnp->cd(1);
  chainPlus->Draw("1000*deltaM:1000*delta",cut+"theta>0&&abs(snp)<0.2&&ptype==2","");
  canvasdSnp->cd(2);
  chainPlus->SetMarkerColor(1);
  chainPlus->Draw("1000*(deltaM-delta)>>deltaCorr(50,-4.,4)",cut+"theta>0&&abs(snp)<0.2&&ptype==2","err");
  chainPlus->SetMarkerColor(3);
  chainPlus->Draw("1000*deltaM",cut+"theta>0&&abs(snp)<0.2&&ptype==2","errsame");
  canvasdSnp->cd(3);
  chainPlus->SetMarkerColor(1);
  chainPlus->Draw("1000*(deltaM):phi",cut+"theta>0&&abs(snp)<0.2&&ptype==2","");
  chainPlus->SetMarkerColor(2);
  chainPlus->Draw("1000*(deltaM-delta):phi",cut+"theta>0&&abs(snp)<0.2&&ptype==2","same");
  canvasdSnp->cd(6);
  chainPlus->SetMarkerStyle(26);
  chainPlus->SetMarkerColor(1);  
  chainPlus->Draw("1000*(deltaM):phi",cut+"theta<0&&abs(snp)<0.2&&ptype==2","");
  chainPlus->SetMarkerColor(4);  
  chainPlus->Draw("1000*(deltaM-delta):phi",cut+"theta<0&&abs(snp)<0.2&&ptype==2","same");



  canvasd1pt->Divide(3,2);
  chainPlus->SetMarkerStyle(25);
  chainPlus->SetMarkerSize(0.5);
  chainPlus->SetMarkerColor(1);
  canvasd1pt->cd(1);
  chainPlus->Draw("deltaM:delta",cut+"theta>0&&abs(snp)<0.2&&ptype==4","");
  canvasd1pt->cd(2);
  chainPlus->SetMarkerColor(1);
  chainPlus->Draw("deltaM-delta>>deltaCorr(50,-0.15,0.15)",cut+"theta>0&&abs(snp)<0.2&&ptype==4","err");
  chainPlus->GetHistogram()->Fit("gaus");
  chainPlus->SetMarkerColor(3);
  chainPlus->Draw("deltaM",cut+"theta>0&&abs(snp)<0.2&&ptype==4","errsame");
  canvasd1pt->cd(3);
  chainPlus->SetMarkerColor(1);
  chainPlus->Draw("deltaM:phi",cut+"theta>0&&abs(snp)<0.2&&ptype==4","");
  chainPlus->SetMarkerColor(2);
  chainPlus->Draw("deltaM-delta:phi",cut+"theta>0&&abs(snp)<0.2&&ptype==4","same");
  canvasd1pt->cd(6);
  chainPlus->SetMarkerStyle(26);
  chainPlus->SetMarkerColor(1);  
  chainPlus->Draw("deltaM:phi",cut+"theta<0&&abs(snp)<0.2&&ptype==4","");
  chainPlus->SetMarkerColor(4);  
  chainPlus->Draw("deltaM-delta:phi",cut+"theta<0&&abs(snp)<0.2&&ptype==4","same");
  
  {for (Int_t ipad=0; ipad<3;ipad++){
    if (ipad==0) canvasdY->cd(5);
    if (ipad==1) canvasdSnp->cd(5);
    if (ipad==2) canvasd1pt->cd(5);
    lfit->SetTextAlign(12); lfit->SetTextSize(0.04);  
    {for (Int_t i=1; i<fitArray->GetEntries(); i++){
	lfit->DrawLatex(0.1,1-i/9.,fitArray->At(i)->GetName());
      }}
    if (ipad==0) canvasdY->cd(4);
    if (ipad==1) canvasdSnp->cd(4);
    if (ipad==2) canvasd1pt->cd(4);
    lfit->DrawLatex(0.1,0.9,"Global fit - TPC ITS matching in r-#phi");
    lfit->DrawLatex(0.1,0.8,"Residual minimization:");
    lfit->DrawLatex(0.1,0.7,"r#phi_{0.5T}-r#phi_{-0.5T} (cm)");
    lfit->DrawLatex(0.1,0.6,"sin(r#phi)_{0.5T}-sin(r#phi)_{-0.5T} (mrad)");
    lfit->DrawLatex(0.1,0.5,"1/pt_{0.5T}-1/pt_{-0.5T} (1/GeV)");
    }}


  TFile *fpic = new TFile(Form("fitPictures%d.root",highFrequency),"update");
  canvasd1pt->Write();
  canvasdY->Write();
  canvasdSnp->Write();
  //
  canvasd1pt->SaveAs(Form("fitd1pt%d.pdf",highFrequency));
  canvasdY->SaveAs(Form("fitdy%d.pdf",highFrequency));
  canvasdSnp->SaveAs(Form("fitdsnp%d.pdf",highFrequency));
  delete fpic;
}

void DrawDistortionMaps(const char *fname){
  TFile f(fname);
  TTree *ITSdy=(TTree*)f.Get("ITSdy");
  TTree *ITSdsnp=(TTree*)f.Get("ITSdsnp");
  TTree *ITSd1pt=(TTree*)f.Get("ITSd1pt");
  TTree *TRDdy=(TTree*)f.Get("TRDdy");
  TTree *TRDdsnp=(TTree*)f.Get("TRDdsnp");
  TTree *TRDd1pt=(TTree*)f.Get("TRDd1pt");
  TTree *Vertexdy=(TTree*)f.Get("Vertexdy");
  TTree *Vertexdsnp=(TTree*)f.Get("Vertexdsnp");
  TTree *Vertexd1pt=(TTree*)f.Get("Vertexd1pt");
  TCanvas *cits = DrawDistortionMaps(ITSdy,ITSdsnp,ITSd1pt,"ITS","ITS");
  cits->SaveAs("matchingITS.pdf");
  TCanvas *ctrd = DrawDistortionMaps(TRDdy,TRDdsnp,TRDd1pt,"TRD","TRD");
  ctrd->SaveAs("matchingTRD.pdf");
  TCanvas *cvertex = DrawDistortionMaps(Vertexdy,Vertexdsnp,Vertexd1pt,"Vertex","Vertex");
  cvertex->SaveAs("matchingVertex.pdf");
  //
  //
  TPostScript *ps = new TPostScript("matching.ps", 112); 
  gStyle->SetOptTitle(1);
  gStyle->SetOptStat(0);
  ps->NewPage();
  cits->Draw();
  ps->NewPage();
  ctrd->Draw();
  ps->NewPage();
  cvertex->Draw();
  ps->Close();
  delete ps;
}


TCanvas * DrawDistortionMaps(TTree * treedy, TTree * treedsnp, TTree* treed1pt, const char * name, const char *title){
  //
  //
  //
  TH1::AddDirectory(0);
  TCanvas *cdist = new TCanvas(name,name,1200,800); 
  cdist->Divide(3,2);
  cdist->Draw("");
  TH1 * his=0;

  cdist->cd(1);
  treedy->Draw("10*mean","rms>0&&abs(snp)<0.25&&entries>100","");
  his = (TH1*)treedy->GetHistogram()->Clone();
  his->SetName("dY"); his->SetXTitle("#Delta_{r#phi} (cm)");
  his->Draw();
  //
  cdist->cd(2);
  treedsnp->Draw("1000*mean","rms>0&&abs(snp)<0.25&&entries>200","");
  his = (TH1*)treedsnp->GetHistogram()->Clone();
  his->SetName("dsnp"); his->SetXTitle("#Delta_{sin(#phi)}");
  his->Draw();
  //
  cdist->cd(3);
  treed1pt->Draw("mean","rms>0&&abs(snp)<0.15&&entries>400","");
  his = (TH1*)treed1pt->GetHistogram()->Clone();
  his->SetName("d1pt"); his->SetXTitle("#Delta_{1/pt} (1/GeV)");
  his->Draw();
  //
  treedy->SetMarkerSize(1);
  treedsnp->SetMarkerSize(1);
  treed1pt->SetMarkerSize(1);
  {for (Int_t type=0; type<3; type++){
      cdist->cd(4+type);
      TTree * tree =treedy;
      if (type==1) tree=treedsnp;
      if (type==2) tree=treed1pt;
      Int_t counter=0;
      for (Double_t theta=-1; theta<=1; theta+=0.2){
	if (TMath::Abs(theta)<0.11) continue;
	TCut cut=Form("rms>0&&abs(snp)<0.25&&entries>20&&abs(theta-%f)<0.1",theta);
	tree->SetMarkerStyle(20+counter);
	Option_t *option=(counter==0)? "": "same";
	if (theta>0) tree->SetMarkerColor(2);
	if (theta<0) tree->SetMarkerColor(4);
	if (type==0) tree->Draw("10*mean:phi>>his(45,-pi,pi)",cut,"profgoff");      
	if (type==1) tree->Draw("1000*mean:phi>>his(45,-pi,pi)",cut,"profgoff");      
	if (type==2) tree->Draw("mean:phi>>his(45,-pi,pi)",cut,"profgoff");      
	his = (TH1*)tree->GetHistogram()->Clone();
	his->SetName(Form("%d_%d",counter,type));
	his->SetXTitle("#phi");
	his->SetMaximum(4);
	his->SetMinimum(-4);
	if (type==2){
	  his->SetMaximum(0.06);
	  his->SetMinimum(-0.06);	  
	}
	his->Draw(option);
	counter++;
      }
    }
  }
  //  cdist->SaveAs(Form("%s.pdf"),name);
  return cdist;
}





AliTPCComposedCorrection * MakeComposedCorrection(){

  //
  Double_t bzField=AliTrackerBase::GetBz();    
  AliMagF* magF= (AliMagF*)(TGeoGlobalMagField::Instance()->GetField());
  Double_t vdrift = 2.6; // [cm/us]   // to be updated: per second (ideally)
  Double_t ezField = 400; // [V/cm]   // to be updated: never (hopefully)
  Double_t wt = -10.0 * (bzField*10) * vdrift / ezField ; 
  Double_t T1 = 1.0;
  Double_t T2 = 1.0;
  //
  //
  

  AliTPCExBTwist *twistX1= new AliTPCExBTwist;
  twistX1->SetXTwist(0.001);  // 1 mrad twist in x
  twistX1->SetName("tX1");
  //
  AliTPCExBTwist *twistY1= new AliTPCExBTwist;
  twistY1->SetYTwist(0.001);   // 1 mrad twist in Y
  twistY1->SetName("tY1");
  //
  AliTPCGGVoltError* ggErrorA = new AliTPCGGVoltError;
  ggErrorA->SetDeltaVGGA(40.);  // delta GG - 1 mm
  ggErrorA->SetName("ggA");
  //
  AliTPCGGVoltError* ggErrorC = new AliTPCGGVoltError;
  ggErrorC->SetDeltaVGGC(40.);  // delta GG - 1 mm
  ggErrorC->SetName("ggC");
  // conical free param
  //
  AliTPCCalibGlobalMisalignment *shiftX=new  AliTPCCalibGlobalMisalignment;
  shiftX->SetXShift(0.1);
  shiftX->SetName("shiftX");
  AliTPCCalibGlobalMisalignment *shiftY=new  AliTPCCalibGlobalMisalignment;
  shiftY->SetYShift(0.1);
  shiftY->SetName("shiftY");

  AliTPCExBBShape *exb11 = new AliTPCExBBShape;
  exb11->SetBField(magF);
  exb11->SetName("exb11");
  AliTPCExBBShape *exbT1 = new AliTPCExBBShape;
  exbT1->SetBField(magF);
  exbT1->SetName("exbT1");
  AliTPCExBBShape *exbT2 = new AliTPCExBBShape;
  exbT2->SetBField(magF);
  exbT2->SetName("exbT2");

  TObjArray * corr = new TObjArray;
  corr->AddLast(twistX1);
  corr->AddLast(twistY1);
  corr->AddLast(ggErrorA);
  corr->AddLast(ggErrorC);
  corr->AddLast(shiftX);
  corr->AddLast(shiftY);
  corr->AddLast(exb11);
  corr->AddLast(exbT1);
  corr->AddLast(exbT2);
  //
  AliTPCComposedCorrection *cc= new AliTPCComposedCorrection ;
  cc->SetCorrections((TObjArray*)(corr));
  AddEffectiveCorrection(cc);
  cc->SetOmegaTauT1T2(wt,T1,T2);
  exbT1->SetOmegaTauT1T2(wt,T1+0.1,T2);
  exbT2->SetOmegaTauT1T2(wt,T1,T2+0.1);
  cc->Init();
  //  cc->SetMode(1);
  cc->Print("DA"); // Print used correction classes
  cc->SetName("Comp");
  return cc;
}



void AddEffectiveCorrection(AliTPCComposedCorrection* comp){
  //
  //
  //
  TMatrixD polA(18,4);
  TMatrixD polC(18,4);
  TMatrixD valA(18,1);
  TMatrixD valC(18,1);
  Int_t counter=0;
  { for (Int_t iside=0; iside<=1; iside++){
      {for (Int_t ir=0; ir<3; ir++)  
	  for (Int_t id=0; id<3; id++) {
	    polA(counter,0)=0;
	    polA(counter,1)=ir;
	    polA(counter,2)=id;
	    polC(counter,0)=0;
	    polC(counter,1)=ir;
	    polC(counter,2)=id;
	    valA(counter,0)=0;
	    valC(counter,0)=0;
	    counter++;
	  }
      }
    }
  }
  counter=0;
  TObjArray * array = (TObjArray*) comp->GetCorrections();
  { for (Int_t iside=0; iside<=1; iside++)
      for (Int_t ir=0; ir<3; ir++)  
	for (Int_t id=0; id<3; id++) {
	  AliTPCExBEffective *eff=new AliTPCExBEffective;
	  valA*=0;
	  valC*=0;
	  eff->SetName(Form("eff%d_%d_%d",iside,ir,id));
	  if (iside==0) valA(counter,0)=0.1;
	  if (iside==1) valC(counter,0)=0.1;
	  eff->SetPolynoms(&polA,&polC);
	  eff->SetCoeficients(&valA,&valC);
	  valA.Print();
	  valC.Print();
	  array->AddLast(eff);
	  counter++;	
	}
  }
}



void MakeLaserTree(){
  //
  //
  //
  AliTPCComposedCorrection *cc= MakeComposedCorrection();
  TObjArray * corr = (TObjArray*)(cc->GetCorrections());
  //  corr->AddLast(cc);
  TFile f("laserMean.root");
  TTree* tree =(TTree*)f.Get("Mean"); 
  AliTPCCorrection::MakeLaserDistortionTree(tree,corr,0);

}
 MakeLookup.C:1
 MakeLookup.C:2
 MakeLookup.C:3
 MakeLookup.C:4
 MakeLookup.C:5
 MakeLookup.C:6
 MakeLookup.C:7
 MakeLookup.C:8
 MakeLookup.C:9
 MakeLookup.C:10
 MakeLookup.C:11
 MakeLookup.C:12
 MakeLookup.C:13
 MakeLookup.C:14
 MakeLookup.C:15
 MakeLookup.C:16
 MakeLookup.C:17
 MakeLookup.C:18
 MakeLookup.C:19
 MakeLookup.C:20
 MakeLookup.C:21
 MakeLookup.C:22
 MakeLookup.C:23
 MakeLookup.C:24
 MakeLookup.C:25
 MakeLookup.C:26
 MakeLookup.C:27
 MakeLookup.C:28
 MakeLookup.C:29
 MakeLookup.C:30
 MakeLookup.C:31
 MakeLookup.C:32
 MakeLookup.C:33
 MakeLookup.C:34
 MakeLookup.C:35
 MakeLookup.C:36
 MakeLookup.C:37
 MakeLookup.C:38
 MakeLookup.C:39
 MakeLookup.C:40
 MakeLookup.C:41
 MakeLookup.C:42
 MakeLookup.C:43
 MakeLookup.C:44
 MakeLookup.C:45
 MakeLookup.C:46
 MakeLookup.C:47
 MakeLookup.C:48
 MakeLookup.C:49
 MakeLookup.C:50
 MakeLookup.C:51
 MakeLookup.C:52
 MakeLookup.C:53
 MakeLookup.C:54
 MakeLookup.C:55
 MakeLookup.C:56
 MakeLookup.C:57
 MakeLookup.C:58
 MakeLookup.C:59
 MakeLookup.C:60
 MakeLookup.C:61
 MakeLookup.C:62
 MakeLookup.C:63
 MakeLookup.C:64
 MakeLookup.C:65
 MakeLookup.C:66
 MakeLookup.C:67
 MakeLookup.C:68
 MakeLookup.C:69
 MakeLookup.C:70
 MakeLookup.C:71
 MakeLookup.C:72
 MakeLookup.C:73
 MakeLookup.C:74
 MakeLookup.C:75
 MakeLookup.C:76
 MakeLookup.C:77
 MakeLookup.C:78
 MakeLookup.C:79
 MakeLookup.C:80
 MakeLookup.C:81
 MakeLookup.C:82
 MakeLookup.C:83
 MakeLookup.C:84
 MakeLookup.C:85
 MakeLookup.C:86
 MakeLookup.C:87
 MakeLookup.C:88
 MakeLookup.C:89
 MakeLookup.C:90
 MakeLookup.C:91
 MakeLookup.C:92
 MakeLookup.C:93
 MakeLookup.C:94
 MakeLookup.C:95
 MakeLookup.C:96
 MakeLookup.C:97
 MakeLookup.C:98
 MakeLookup.C:99
 MakeLookup.C:100
 MakeLookup.C:101
 MakeLookup.C:102
 MakeLookup.C:103
 MakeLookup.C:104
 MakeLookup.C:105
 MakeLookup.C:106
 MakeLookup.C:107
 MakeLookup.C:108
 MakeLookup.C:109
 MakeLookup.C:110
 MakeLookup.C:111
 MakeLookup.C:112
 MakeLookup.C:113
 MakeLookup.C:114
 MakeLookup.C:115
 MakeLookup.C:116
 MakeLookup.C:117
 MakeLookup.C:118
 MakeLookup.C:119
 MakeLookup.C:120
 MakeLookup.C:121
 MakeLookup.C:122
 MakeLookup.C:123
 MakeLookup.C:124
 MakeLookup.C:125
 MakeLookup.C:126
 MakeLookup.C:127
 MakeLookup.C:128
 MakeLookup.C:129
 MakeLookup.C:130
 MakeLookup.C:131
 MakeLookup.C:132
 MakeLookup.C:133
 MakeLookup.C:134
 MakeLookup.C:135
 MakeLookup.C:136
 MakeLookup.C:137
 MakeLookup.C:138
 MakeLookup.C:139
 MakeLookup.C:140
 MakeLookup.C:141
 MakeLookup.C:142
 MakeLookup.C:143
 MakeLookup.C:144
 MakeLookup.C:145
 MakeLookup.C:146
 MakeLookup.C:147
 MakeLookup.C:148
 MakeLookup.C:149
 MakeLookup.C:150
 MakeLookup.C:151
 MakeLookup.C:152
 MakeLookup.C:153
 MakeLookup.C:154
 MakeLookup.C:155
 MakeLookup.C:156
 MakeLookup.C:157
 MakeLookup.C:158
 MakeLookup.C:159
 MakeLookup.C:160
 MakeLookup.C:161
 MakeLookup.C:162
 MakeLookup.C:163
 MakeLookup.C:164
 MakeLookup.C:165
 MakeLookup.C:166
 MakeLookup.C:167
 MakeLookup.C:168
 MakeLookup.C:169
 MakeLookup.C:170
 MakeLookup.C:171
 MakeLookup.C:172
 MakeLookup.C:173
 MakeLookup.C:174
 MakeLookup.C:175
 MakeLookup.C:176
 MakeLookup.C:177
 MakeLookup.C:178
 MakeLookup.C:179
 MakeLookup.C:180
 MakeLookup.C:181
 MakeLookup.C:182
 MakeLookup.C:183
 MakeLookup.C:184
 MakeLookup.C:185
 MakeLookup.C:186
 MakeLookup.C:187
 MakeLookup.C:188
 MakeLookup.C:189
 MakeLookup.C:190
 MakeLookup.C:191
 MakeLookup.C:192
 MakeLookup.C:193
 MakeLookup.C:194
 MakeLookup.C:195
 MakeLookup.C:196
 MakeLookup.C:197
 MakeLookup.C:198
 MakeLookup.C:199
 MakeLookup.C:200
 MakeLookup.C:201
 MakeLookup.C:202
 MakeLookup.C:203
 MakeLookup.C:204
 MakeLookup.C:205
 MakeLookup.C:206
 MakeLookup.C:207
 MakeLookup.C:208
 MakeLookup.C:209
 MakeLookup.C:210
 MakeLookup.C:211
 MakeLookup.C:212
 MakeLookup.C:213
 MakeLookup.C:214
 MakeLookup.C:215
 MakeLookup.C:216
 MakeLookup.C:217
 MakeLookup.C:218
 MakeLookup.C:219
 MakeLookup.C:220
 MakeLookup.C:221
 MakeLookup.C:222
 MakeLookup.C:223
 MakeLookup.C:224
 MakeLookup.C:225
 MakeLookup.C:226
 MakeLookup.C:227
 MakeLookup.C:228
 MakeLookup.C:229
 MakeLookup.C:230
 MakeLookup.C:231
 MakeLookup.C:232
 MakeLookup.C:233
 MakeLookup.C:234
 MakeLookup.C:235
 MakeLookup.C:236
 MakeLookup.C:237
 MakeLookup.C:238
 MakeLookup.C:239
 MakeLookup.C:240
 MakeLookup.C:241
 MakeLookup.C:242
 MakeLookup.C:243
 MakeLookup.C:244
 MakeLookup.C:245
 MakeLookup.C:246
 MakeLookup.C:247
 MakeLookup.C:248
 MakeLookup.C:249
 MakeLookup.C:250
 MakeLookup.C:251
 MakeLookup.C:252
 MakeLookup.C:253
 MakeLookup.C:254
 MakeLookup.C:255
 MakeLookup.C:256
 MakeLookup.C:257
 MakeLookup.C:258
 MakeLookup.C:259
 MakeLookup.C:260
 MakeLookup.C:261
 MakeLookup.C:262
 MakeLookup.C:263
 MakeLookup.C:264
 MakeLookup.C:265
 MakeLookup.C:266
 MakeLookup.C:267
 MakeLookup.C:268
 MakeLookup.C:269
 MakeLookup.C:270
 MakeLookup.C:271
 MakeLookup.C:272
 MakeLookup.C:273
 MakeLookup.C:274
 MakeLookup.C:275
 MakeLookup.C:276
 MakeLookup.C:277
 MakeLookup.C:278
 MakeLookup.C:279
 MakeLookup.C:280
 MakeLookup.C:281
 MakeLookup.C:282
 MakeLookup.C:283
 MakeLookup.C:284
 MakeLookup.C:285
 MakeLookup.C:286
 MakeLookup.C:287
 MakeLookup.C:288
 MakeLookup.C:289
 MakeLookup.C:290
 MakeLookup.C:291
 MakeLookup.C:292
 MakeLookup.C:293
 MakeLookup.C:294
 MakeLookup.C:295
 MakeLookup.C:296
 MakeLookup.C:297
 MakeLookup.C:298
 MakeLookup.C:299
 MakeLookup.C:300
 MakeLookup.C:301
 MakeLookup.C:302
 MakeLookup.C:303
 MakeLookup.C:304
 MakeLookup.C:305
 MakeLookup.C:306
 MakeLookup.C:307
 MakeLookup.C:308
 MakeLookup.C:309
 MakeLookup.C:310
 MakeLookup.C:311
 MakeLookup.C:312
 MakeLookup.C:313
 MakeLookup.C:314
 MakeLookup.C:315
 MakeLookup.C:316
 MakeLookup.C:317
 MakeLookup.C:318
 MakeLookup.C:319
 MakeLookup.C:320
 MakeLookup.C:321
 MakeLookup.C:322
 MakeLookup.C:323
 MakeLookup.C:324
 MakeLookup.C:325
 MakeLookup.C:326
 MakeLookup.C:327
 MakeLookup.C:328
 MakeLookup.C:329
 MakeLookup.C:330
 MakeLookup.C:331
 MakeLookup.C:332
 MakeLookup.C:333
 MakeLookup.C:334
 MakeLookup.C:335
 MakeLookup.C:336
 MakeLookup.C:337
 MakeLookup.C:338
 MakeLookup.C:339
 MakeLookup.C:340
 MakeLookup.C:341
 MakeLookup.C:342
 MakeLookup.C:343
 MakeLookup.C:344
 MakeLookup.C:345
 MakeLookup.C:346
 MakeLookup.C:347
 MakeLookup.C:348
 MakeLookup.C:349
 MakeLookup.C:350
 MakeLookup.C:351
 MakeLookup.C:352
 MakeLookup.C:353
 MakeLookup.C:354
 MakeLookup.C:355
 MakeLookup.C:356
 MakeLookup.C:357
 MakeLookup.C:358
 MakeLookup.C:359
 MakeLookup.C:360
 MakeLookup.C:361
 MakeLookup.C:362
 MakeLookup.C:363
 MakeLookup.C:364
 MakeLookup.C:365
 MakeLookup.C:366
 MakeLookup.C:367
 MakeLookup.C:368
 MakeLookup.C:369
 MakeLookup.C:370
 MakeLookup.C:371
 MakeLookup.C:372
 MakeLookup.C:373
 MakeLookup.C:374
 MakeLookup.C:375
 MakeLookup.C:376
 MakeLookup.C:377
 MakeLookup.C:378
 MakeLookup.C:379
 MakeLookup.C:380
 MakeLookup.C:381
 MakeLookup.C:382
 MakeLookup.C:383
 MakeLookup.C:384
 MakeLookup.C:385
 MakeLookup.C:386
 MakeLookup.C:387
 MakeLookup.C:388
 MakeLookup.C:389
 MakeLookup.C:390
 MakeLookup.C:391
 MakeLookup.C:392
 MakeLookup.C:393
 MakeLookup.C:394
 MakeLookup.C:395
 MakeLookup.C:396
 MakeLookup.C:397
 MakeLookup.C:398
 MakeLookup.C:399
 MakeLookup.C:400
 MakeLookup.C:401
 MakeLookup.C:402
 MakeLookup.C:403
 MakeLookup.C:404
 MakeLookup.C:405
 MakeLookup.C:406
 MakeLookup.C:407
 MakeLookup.C:408
 MakeLookup.C:409
 MakeLookup.C:410
 MakeLookup.C:411
 MakeLookup.C:412
 MakeLookup.C:413
 MakeLookup.C:414
 MakeLookup.C:415
 MakeLookup.C:416
 MakeLookup.C:417
 MakeLookup.C:418
 MakeLookup.C:419
 MakeLookup.C:420
 MakeLookup.C:421
 MakeLookup.C:422
 MakeLookup.C:423
 MakeLookup.C:424
 MakeLookup.C:425
 MakeLookup.C:426
 MakeLookup.C:427
 MakeLookup.C:428
 MakeLookup.C:429
 MakeLookup.C:430
 MakeLookup.C:431
 MakeLookup.C:432
 MakeLookup.C:433
 MakeLookup.C:434
 MakeLookup.C:435
 MakeLookup.C:436
 MakeLookup.C:437
 MakeLookup.C:438
 MakeLookup.C:439
 MakeLookup.C:440
 MakeLookup.C:441
 MakeLookup.C:442
 MakeLookup.C:443
 MakeLookup.C:444
 MakeLookup.C:445
 MakeLookup.C:446
 MakeLookup.C:447
 MakeLookup.C:448
 MakeLookup.C:449
 MakeLookup.C:450
 MakeLookup.C:451
 MakeLookup.C:452
 MakeLookup.C:453
 MakeLookup.C:454
 MakeLookup.C:455
 MakeLookup.C:456
 MakeLookup.C:457
 MakeLookup.C:458
 MakeLookup.C:459
 MakeLookup.C:460
 MakeLookup.C:461
 MakeLookup.C:462
 MakeLookup.C:463
 MakeLookup.C:464
 MakeLookup.C:465
 MakeLookup.C:466
 MakeLookup.C:467
 MakeLookup.C:468
 MakeLookup.C:469
 MakeLookup.C:470
 MakeLookup.C:471
 MakeLookup.C:472
 MakeLookup.C:473
 MakeLookup.C:474
 MakeLookup.C:475
 MakeLookup.C:476
 MakeLookup.C:477
 MakeLookup.C:478
 MakeLookup.C:479
 MakeLookup.C:480
 MakeLookup.C:481
 MakeLookup.C:482
 MakeLookup.C:483
 MakeLookup.C:484
 MakeLookup.C:485
 MakeLookup.C:486
 MakeLookup.C:487
 MakeLookup.C:488
 MakeLookup.C:489
 MakeLookup.C:490
 MakeLookup.C:491
 MakeLookup.C:492
 MakeLookup.C:493
 MakeLookup.C:494
 MakeLookup.C:495
 MakeLookup.C:496
 MakeLookup.C:497
 MakeLookup.C:498
 MakeLookup.C:499
 MakeLookup.C:500
 MakeLookup.C:501
 MakeLookup.C:502
 MakeLookup.C:503
 MakeLookup.C:504
 MakeLookup.C:505
 MakeLookup.C:506
 MakeLookup.C:507
 MakeLookup.C:508
 MakeLookup.C:509
 MakeLookup.C:510
 MakeLookup.C:511
 MakeLookup.C:512
 MakeLookup.C:513
 MakeLookup.C:514
 MakeLookup.C:515
 MakeLookup.C:516
 MakeLookup.C:517
 MakeLookup.C:518
 MakeLookup.C:519
 MakeLookup.C:520
 MakeLookup.C:521
 MakeLookup.C:522
 MakeLookup.C:523
 MakeLookup.C:524
 MakeLookup.C:525
 MakeLookup.C:526
 MakeLookup.C:527
 MakeLookup.C:528
 MakeLookup.C:529
 MakeLookup.C:530
 MakeLookup.C:531
 MakeLookup.C:532
 MakeLookup.C:533
 MakeLookup.C:534
 MakeLookup.C:535
 MakeLookup.C:536
 MakeLookup.C:537
 MakeLookup.C:538
 MakeLookup.C:539
 MakeLookup.C:540
 MakeLookup.C:541
 MakeLookup.C:542
 MakeLookup.C:543
 MakeLookup.C:544
 MakeLookup.C:545
 MakeLookup.C:546
 MakeLookup.C:547
 MakeLookup.C:548
 MakeLookup.C:549
 MakeLookup.C:550
 MakeLookup.C:551
 MakeLookup.C:552
 MakeLookup.C:553
 MakeLookup.C:554
 MakeLookup.C:555
 MakeLookup.C:556
 MakeLookup.C:557
 MakeLookup.C:558
 MakeLookup.C:559
 MakeLookup.C:560
 MakeLookup.C:561
 MakeLookup.C:562
 MakeLookup.C:563
 MakeLookup.C:564
 MakeLookup.C:565
 MakeLookup.C:566
 MakeLookup.C:567
 MakeLookup.C:568
 MakeLookup.C:569
 MakeLookup.C:570
 MakeLookup.C:571
 MakeLookup.C:572
 MakeLookup.C:573
 MakeLookup.C:574
 MakeLookup.C:575
 MakeLookup.C:576
 MakeLookup.C:577
 MakeLookup.C:578
 MakeLookup.C:579
 MakeLookup.C:580
 MakeLookup.C:581
 MakeLookup.C:582
 MakeLookup.C:583
 MakeLookup.C:584
 MakeLookup.C:585
 MakeLookup.C:586
 MakeLookup.C:587
 MakeLookup.C:588
 MakeLookup.C:589
 MakeLookup.C:590
 MakeLookup.C:591
 MakeLookup.C:592
 MakeLookup.C:593
 MakeLookup.C:594
 MakeLookup.C:595
 MakeLookup.C:596
 MakeLookup.C:597
 MakeLookup.C:598
 MakeLookup.C:599
 MakeLookup.C:600
 MakeLookup.C:601
 MakeLookup.C:602
 MakeLookup.C:603
 MakeLookup.C:604
 MakeLookup.C:605
 MakeLookup.C:606
 MakeLookup.C:607
 MakeLookup.C:608
 MakeLookup.C:609
 MakeLookup.C:610
 MakeLookup.C:611
 MakeLookup.C:612
 MakeLookup.C:613
 MakeLookup.C:614
 MakeLookup.C:615
 MakeLookup.C:616
 MakeLookup.C:617
 MakeLookup.C:618
 MakeLookup.C:619
 MakeLookup.C:620
 MakeLookup.C:621
 MakeLookup.C:622
 MakeLookup.C:623
 MakeLookup.C:624
 MakeLookup.C:625
 MakeLookup.C:626
 MakeLookup.C:627
 MakeLookup.C:628
 MakeLookup.C:629
 MakeLookup.C:630
 MakeLookup.C:631
 MakeLookup.C:632
 MakeLookup.C:633
 MakeLookup.C:634
 MakeLookup.C:635
 MakeLookup.C:636
 MakeLookup.C:637
 MakeLookup.C:638
 MakeLookup.C:639
 MakeLookup.C:640
 MakeLookup.C:641
 MakeLookup.C:642
 MakeLookup.C:643
 MakeLookup.C:644
 MakeLookup.C:645
 MakeLookup.C:646
 MakeLookup.C:647
 MakeLookup.C:648
 MakeLookup.C:649
 MakeLookup.C:650
 MakeLookup.C:651
 MakeLookup.C:652
 MakeLookup.C:653
 MakeLookup.C:654
 MakeLookup.C:655
 MakeLookup.C:656
 MakeLookup.C:657
 MakeLookup.C:658
 MakeLookup.C:659
 MakeLookup.C:660
 MakeLookup.C:661
 MakeLookup.C:662
 MakeLookup.C:663
 MakeLookup.C:664
 MakeLookup.C:665
 MakeLookup.C:666
 MakeLookup.C:667
 MakeLookup.C:668
 MakeLookup.C:669
 MakeLookup.C:670
 MakeLookup.C:671
 MakeLookup.C:672
 MakeLookup.C:673
 MakeLookup.C:674
 MakeLookup.C:675
 MakeLookup.C:676
 MakeLookup.C:677
 MakeLookup.C:678
 MakeLookup.C:679
 MakeLookup.C:680
 MakeLookup.C:681
 MakeLookup.C:682
 MakeLookup.C:683
 MakeLookup.C:684
 MakeLookup.C:685
 MakeLookup.C:686
 MakeLookup.C:687
 MakeLookup.C:688
 MakeLookup.C:689
 MakeLookup.C:690
 MakeLookup.C:691
 MakeLookup.C:692
 MakeLookup.C:693
 MakeLookup.C:694
 MakeLookup.C:695
 MakeLookup.C:696
 MakeLookup.C:697
 MakeLookup.C:698
 MakeLookup.C:699
 MakeLookup.C:700
 MakeLookup.C:701
 MakeLookup.C:702
 MakeLookup.C:703
 MakeLookup.C:704
 MakeLookup.C:705
 MakeLookup.C:706
 MakeLookup.C:707
 MakeLookup.C:708
 MakeLookup.C:709
 MakeLookup.C:710
 MakeLookup.C:711
 MakeLookup.C:712
 MakeLookup.C:713
 MakeLookup.C:714
 MakeLookup.C:715
 MakeLookup.C:716
 MakeLookup.C:717
 MakeLookup.C:718
 MakeLookup.C:719
 MakeLookup.C:720
 MakeLookup.C:721
 MakeLookup.C:722
 MakeLookup.C:723
 MakeLookup.C:724
 MakeLookup.C:725
 MakeLookup.C:726
 MakeLookup.C:727
 MakeLookup.C:728
 MakeLookup.C:729
 MakeLookup.C:730
 MakeLookup.C:731
 MakeLookup.C:732
 MakeLookup.C:733
 MakeLookup.C:734
 MakeLookup.C:735
 MakeLookup.C:736
 MakeLookup.C:737
 MakeLookup.C:738
 MakeLookup.C:739
 MakeLookup.C:740
 MakeLookup.C:741
 MakeLookup.C:742
 MakeLookup.C:743
 MakeLookup.C:744
 MakeLookup.C:745
 MakeLookup.C:746
 MakeLookup.C:747
 MakeLookup.C:748
 MakeLookup.C:749
 MakeLookup.C:750
 MakeLookup.C:751
 MakeLookup.C:752
 MakeLookup.C:753
 MakeLookup.C:754
 MakeLookup.C:755
 MakeLookup.C:756
 MakeLookup.C:757
 MakeLookup.C:758
 MakeLookup.C:759
 MakeLookup.C:760
 MakeLookup.C:761
 MakeLookup.C:762
 MakeLookup.C:763
 MakeLookup.C:764
 MakeLookup.C:765
 MakeLookup.C:766
 MakeLookup.C:767
 MakeLookup.C:768
 MakeLookup.C:769
 MakeLookup.C:770
 MakeLookup.C:771
 MakeLookup.C:772
 MakeLookup.C:773
 MakeLookup.C:774
 MakeLookup.C:775
 MakeLookup.C:776
 MakeLookup.C:777
 MakeLookup.C:778
 MakeLookup.C:779
 MakeLookup.C:780
 MakeLookup.C:781
 MakeLookup.C:782
 MakeLookup.C:783
 MakeLookup.C:784
 MakeLookup.C:785
 MakeLookup.C:786
 MakeLookup.C:787
 MakeLookup.C:788
 MakeLookup.C:789
 MakeLookup.C:790
 MakeLookup.C:791
 MakeLookup.C:792
 MakeLookup.C:793
 MakeLookup.C:794
 MakeLookup.C:795
 MakeLookup.C:796
 MakeLookup.C:797
 MakeLookup.C:798
 MakeLookup.C:799
 MakeLookup.C:800
 MakeLookup.C:801
 MakeLookup.C:802
 MakeLookup.C:803
 MakeLookup.C:804
 MakeLookup.C:805
 MakeLookup.C:806
 MakeLookup.C:807
 MakeLookup.C:808
 MakeLookup.C:809
 MakeLookup.C:810
 MakeLookup.C:811
 MakeLookup.C:812
 MakeLookup.C:813
 MakeLookup.C:814
 MakeLookup.C:815
 MakeLookup.C:816
 MakeLookup.C:817
 MakeLookup.C:818
 MakeLookup.C:819
 MakeLookup.C:820
 MakeLookup.C:821
 MakeLookup.C:822
 MakeLookup.C:823
 MakeLookup.C:824
 MakeLookup.C:825
 MakeLookup.C:826
 MakeLookup.C:827
 MakeLookup.C:828
 MakeLookup.C:829
 MakeLookup.C:830
 MakeLookup.C:831
 MakeLookup.C:832
 MakeLookup.C:833
 MakeLookup.C:834
 MakeLookup.C:835
 MakeLookup.C:836
 MakeLookup.C:837
 MakeLookup.C:838
 MakeLookup.C:839
 MakeLookup.C:840
 MakeLookup.C:841
 MakeLookup.C:842
 MakeLookup.C:843
 MakeLookup.C:844
 MakeLookup.C:845
 MakeLookup.C:846
 MakeLookup.C:847
 MakeLookup.C:848
 MakeLookup.C:849
 MakeLookup.C:850
 MakeLookup.C:851
 MakeLookup.C:852
 MakeLookup.C:853
 MakeLookup.C:854
 MakeLookup.C:855
 MakeLookup.C:856
 MakeLookup.C:857
 MakeLookup.C:858
 MakeLookup.C:859
 MakeLookup.C:860
 MakeLookup.C:861
 MakeLookup.C:862
 MakeLookup.C:863
 MakeLookup.C:864
 MakeLookup.C:865
 MakeLookup.C:866
 MakeLookup.C:867
 MakeLookup.C:868
 MakeLookup.C:869
 MakeLookup.C:870
 MakeLookup.C:871
 MakeLookup.C:872
 MakeLookup.C:873
 MakeLookup.C:874
 MakeLookup.C:875
 MakeLookup.C:876
 MakeLookup.C:877
 MakeLookup.C:878
 MakeLookup.C:879
 MakeLookup.C:880
 MakeLookup.C:881
 MakeLookup.C:882
 MakeLookup.C:883
 MakeLookup.C:884
 MakeLookup.C:885
 MakeLookup.C:886
 MakeLookup.C:887
 MakeLookup.C:888
 MakeLookup.C:889
 MakeLookup.C:890
 MakeLookup.C:891
 MakeLookup.C:892
 MakeLookup.C:893
 MakeLookup.C:894
 MakeLookup.C:895
 MakeLookup.C:896
 MakeLookup.C:897
 MakeLookup.C:898
 MakeLookup.C:899
 MakeLookup.C:900
 MakeLookup.C:901
 MakeLookup.C:902
 MakeLookup.C:903
 MakeLookup.C:904
 MakeLookup.C:905
 MakeLookup.C:906
 MakeLookup.C:907
 MakeLookup.C:908
 MakeLookup.C:909
 MakeLookup.C:910
 MakeLookup.C:911
 MakeLookup.C:912
 MakeLookup.C:913
 MakeLookup.C:914
 MakeLookup.C:915
 MakeLookup.C:916
 MakeLookup.C:917
 MakeLookup.C:918
 MakeLookup.C:919
 MakeLookup.C:920
 MakeLookup.C:921
 MakeLookup.C:922
 MakeLookup.C:923
 MakeLookup.C:924
 MakeLookup.C:925
 MakeLookup.C:926
 MakeLookup.C:927
 MakeLookup.C:928
 MakeLookup.C:929
 MakeLookup.C:930
 MakeLookup.C:931
 MakeLookup.C:932
 MakeLookup.C:933
 MakeLookup.C:934
 MakeLookup.C:935
 MakeLookup.C:936
 MakeLookup.C:937
 MakeLookup.C:938
 MakeLookup.C:939
 MakeLookup.C:940
 MakeLookup.C:941
 MakeLookup.C:942
 MakeLookup.C:943
 MakeLookup.C:944
 MakeLookup.C:945
 MakeLookup.C:946
 MakeLookup.C:947
 MakeLookup.C:948
 MakeLookup.C:949
 MakeLookup.C:950
 MakeLookup.C:951
 MakeLookup.C:952
 MakeLookup.C:953
 MakeLookup.C:954
 MakeLookup.C:955
 MakeLookup.C:956
 MakeLookup.C:957
 MakeLookup.C:958
 MakeLookup.C:959
 MakeLookup.C:960
 MakeLookup.C:961
 MakeLookup.C:962
 MakeLookup.C:963
 MakeLookup.C:964
 MakeLookup.C:965
 MakeLookup.C:966
 MakeLookup.C:967
 MakeLookup.C:968
 MakeLookup.C:969
 MakeLookup.C:970
 MakeLookup.C:971
 MakeLookup.C:972
 MakeLookup.C:973
 MakeLookup.C:974
 MakeLookup.C:975
 MakeLookup.C:976