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

  Input file mean.root with distortion tree expected to be in directory:
  ../mergeField0/mean.root


  The ouput file fitAlignCombined.root contains:
  1. Resulting (residual) AliTPCCalibMisalignment 
  2. QA fit plots

  Functions documented inside:

  RegisterAlignFunction();
  MakeAlignFunctionGlobal();
  MakeAlignFunctionSector();

*/


/*
  Example usage:
  //
  .x ~/NimStyle.C
  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/FitAlignCombined.C+
  .x ConfigCalibTrain.C(119047)
  //
  //
  FitAlignCombinedCorr();


*/



#if !defined(__CINT__) || defined(__MAKECINT__)
#include "TH1D.h"
#include "TH2F.h"
#include "THnSparse.h"
#include "TVectorD.h"
#include "TTreeStream.h"
#include "TFile.h"
#include "TChain.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 "AliLog.h"
#include "AliTPCExBEffectiveSector.h"
#include "AliTPCComposedCorrection.h"
#include "AliTPCCalibGlobalMisalignment.h"
//
#include "AliCDBMetaData.h"
#include "AliCDBId.h"
#include "AliCDBManager.h"
#include "AliCDBStorage.h"
#include "AliCDBEntry.h"
#include "TStatToolkit.h"
#include "AliAlignObjParams.h"
#include "AliTPCParam.h"
#endif


void DrawFitQA();

AliTPCROC *proc = AliTPCROC::Instance();
AliTPCCalibGlobalMisalignment *combAlignOCDBOld=0;  // old misalignment from OCDB - used for reconstruction
AliTPCCalibGlobalMisalignment *combAlignOCDBNew=0;  // new misalignment
AliTPCCalibGlobalMisalignment *combAlignGlobal=0;   // delta misalignment - global part
AliTPCCalibGlobalMisalignment *combAlignLocal=0;    // delta misalignment - sector/local part
//

TTreeSRedirector *pcstream= 0;    // Workspace to store the fit parameters and QA histograms
//
TChain * chain=0;
TChain * chainZ=0;                // trees with z measurement
TTree * tree=0;
TTree *itsdy=0;
TTree *itsdyP=0;
TTree *itsdyM=0;
TTree *itsdp=0;
TTree *itsdphiP=0;
TTree *itsdphiM=0;

TTree *itsdz=0;
TTree *itsdt=0;
TTree *tofdy=0;
TTree *trddy=0;
//
TTree *vdy=0;
TTree *vdyP=0;
TTree *vdyM=0;
TTree *vds=0;
TTree *vdz=0;
TTree *vdt=0;

TCut cutS="entries>1000&&abs(snp)<0.2&&abs(theta)<1.";


void RegisterAlignFunction(){
  //
  // Register primitive alignment components.
  // Linear conbination of primitev forulas used for fit
  // The nominal delta 1 mm in shift and 1 mrad in rotation
  // Primitive formulas registeren in AliTPCCoreection::AddvisualCorrection
  // 0 - deltaX 
  // 1 - deltaY
  // 2 - deltaZ
  // 3 - rot0 (phi)
  // 4 - rot1 (theta)
  // 5 - rot2 
  TGeoHMatrix matrixX;
  TGeoHMatrix matrixY;
  TGeoHMatrix matrixZ;
  TGeoRotation rot0;
  TGeoRotation rot1;
  TGeoRotation rot2;  //transformation matrices
  TGeoRotation rot90;  //transformation matrices
  matrixX.SetDx(0.1); matrixY.SetDy(0.1); matrixZ.SetDz(0.1); //1 mm translation
  rot0.SetAngles(0.001*TMath::RadToDeg(),0,0);
  rot1.SetAngles(0,0.001*TMath::RadToDeg(),0);
  rot2.SetAngles(0,0,0.001*TMath::RadToDeg());
  //how to get rot02 ?
  rot90.SetAngles(0,90,0);
  rot2.MultiplyBy(&rot90,kTRUE);
  rot90.SetAngles(0,-90,0);
  rot2.MultiplyBy(&rot90,kFALSE);
  AliTPCCalibGlobalMisalignment *alignRot0  =new  AliTPCCalibGlobalMisalignment;
  alignRot0->SetAlignGlobal(&rot0);
  AliTPCCalibGlobalMisalignment *alignRot1=new  AliTPCCalibGlobalMisalignment;
  alignRot1->SetAlignGlobal(&rot1);
  AliTPCCalibGlobalMisalignment *alignRot2=new  AliTPCCalibGlobalMisalignment;
  alignRot2->SetAlignGlobal(&rot2);
  //
  AliTPCCalibGlobalMisalignment *alignTrans0  =new  AliTPCCalibGlobalMisalignment;
  alignTrans0->SetAlignGlobal(&matrixX);
  AliTPCCalibGlobalMisalignment *alignTrans1=new  AliTPCCalibGlobalMisalignment;
  alignTrans1->SetAlignGlobal(&matrixY);
  AliTPCCalibGlobalMisalignment *alignTrans2=new  AliTPCCalibGlobalMisalignment;
  alignTrans2->SetAlignGlobal(&matrixZ);
  AliTPCCorrection::AddVisualCorrection(alignTrans0  ,0);
  AliTPCCorrection::AddVisualCorrection(alignTrans1  ,1);
  AliTPCCorrection::AddVisualCorrection(alignTrans2  ,2);
  AliTPCCorrection::AddVisualCorrection(alignRot0    ,3);
  AliTPCCorrection::AddVisualCorrection(alignRot1    ,4);
  AliTPCCorrection::AddVisualCorrection(alignRot2    ,5);
  TObjArray arrAlign(6);
  arrAlign.AddAt(alignTrans0->Clone(),0);
  arrAlign.AddAt(alignTrans1->Clone(),1);
  arrAlign.AddAt(alignTrans2->Clone(),2);
  arrAlign.AddAt(alignRot0->Clone(),3);
  arrAlign.AddAt(alignRot1->Clone(),4);
  arrAlign.AddAt(alignRot2->Clone(),5);
  //combAlign.SetCorrections((TObjArray*)arrAlign.Clone());
}

AliTPCCalibGlobalMisalignment * MakeAlignFunctionGlobal(TVectorD paramYGlobal){
  //
  // Take a fit parameters and make a combined correction
  // 1. Take the common part  
  // 3. Make combined AliTPCCalibGlobalMisalignment - register it
  // 4. Compare the aliases with fit values - IT is OK
  //  
  AliTPCCalibGlobalMisalignment *alignGlobal  =new  AliTPCCalibGlobalMisalignment;
  TGeoHMatrix matGlobal; // global parameters
  TGeoHMatrix matDelta;  // delta A side - C side
  //
  TGeoHMatrix matrixX;
  TGeoHMatrix matrixY;
  TGeoHMatrix matrixZ;
  TGeoRotation rot0;
  TGeoRotation rot1;
  TGeoRotation rot2;  //transformation matrices
  TGeoRotation rot90;  //transformation matrices
  //
  // 
  matrixX.SetDx(0.1*paramYGlobal[1]); 
  matrixY.SetDy(0.1*paramYGlobal[2]); 
  rot0.SetAngles(0.001*TMath::RadToDeg()*paramYGlobal[3],0,0);
  rot1.SetAngles(0,0.001*TMath::RadToDeg()*paramYGlobal[4],0);
  rot2.SetAngles(0,0,0.001*TMath::RadToDeg()*paramYGlobal[5]);
  rot90.SetAngles(0,90,0);
  rot2.MultiplyBy(&rot90,kTRUE);
  rot90.SetAngles(0,-90,0);
  rot2.MultiplyBy(&rot90,kFALSE);
  matGlobal.Multiply(&matrixX);
  matGlobal.Multiply(&matrixY);
  matGlobal.Multiply(&rot0);
  matGlobal.Multiply(&rot1);
  matGlobal.Multiply(&rot2);
  alignGlobal->SetAlignGlobal((TGeoMatrix*)matGlobal.Clone());
  AliTPCCorrection::AddVisualCorrection(alignGlobal    ,100);  
  //
  /*
    chain->Draw("mean-deltaG:int(sector)",cutS+"type==0&&refX==0&&theta>0","profsame");
    chain->Draw("mean-deltaG:int(sector+18)",cutS+"type==0&&refX==0&&theta<0","profsame");

    chain->Draw("deltaG:fitYGlobal",cutS+"type==0");
    chain->Draw("deltaG:fitYGlobal",cutS+"type==2");

  */

  return alignGlobal;
}


AliTPCCalibGlobalMisalignment * MakeAlignFunctionSector(TVectorD paramYLocal){
  //
  // Take a fit parameters and make a combined correction:
  // Only delta local Y and delta phi are fitted - not sensityvity for other parameters
  // Algorithm:
  //   1. Loop over sectors
  //   2. Make combined AliTPCCalibGlobalMisalignment - register it
  //   3. Compare the aliases with fit values - IT is OK
  //  
  AliTPCCalibGlobalMisalignment *alignLocal  =new  AliTPCCalibGlobalMisalignment;
  TGeoHMatrix matrixX;
  TGeoHMatrix matrixY;
  TGeoHMatrix matrixZ;
  TGeoRotation rot0;
  TGeoRotation rot1;
  TGeoRotation rot2;  //transformation matrices
  TGeoRotation rot90;  //transformation matrices
  TObjArray * array = new TObjArray(72);
  TVectorD vecLY(72);
  TVectorD vecGY(72);
  TVectorD vecGX(72);
  TVectorD vecPhi(72);
  TVectorD vecSec(72);
  //
  // 
  {for (Int_t isec=0; isec<72; isec++){
      Int_t sector=isec%18;
      Int_t offset=sector*4+1;
      if ((isec%36)>=18) offset+=2;
      Double_t phi= (Double_t(sector)+0.5)*TMath::Pi()/9.;
      //
      Double_t dly = paramYLocal[offset];
      Double_t dphi= paramYLocal[offset+1];
      Double_t dgx =   TMath::Cos(phi)*0+TMath::Sin(phi)*dly;
      Double_t dgy =   TMath::Sin(phi)*0-TMath::Cos(phi)*dly;
      vecSec[isec]=isec;
      vecLY[isec]=dly;
      vecGX[isec]=dgx;
      vecGY[isec]=dgy;
      vecPhi[isec]=dphi;
      //
      matrixX.SetDx(dgx); 
      matrixY.SetDy(dgy); 
      rot0.SetAngles(0.001*TMath::RadToDeg()*dphi,0,0);
      TGeoHMatrix matrixSector; // global parameters
      matrixSector.Multiply(&matrixX);
      matrixSector.Multiply(&matrixY);
      matrixSector.Multiply(&rot0);
      array->AddAt(matrixSector.Clone(),isec);
    }}
  alignLocal->SetAlignSectors(array);
  AliTPCCorrection::AddVisualCorrection(alignLocal,101);  
  //
  //
  TGraph * graphLY = new TGraph(72,vecSec.GetMatrixArray(), vecLY.GetMatrixArray());
  TGraph * graphGX = new TGraph(72,vecSec.GetMatrixArray(), vecGX.GetMatrixArray());
  TGraph * graphGY = new TGraph(72,vecSec.GetMatrixArray(), vecGY.GetMatrixArray());
  TGraph * graphPhi = new TGraph(72,vecSec.GetMatrixArray(), vecPhi.GetMatrixArray());
  graphLY->SetMarkerStyle(25); graphGX->SetMarkerStyle(25);  graphGY->SetMarkerStyle(25);   graphPhi->SetMarkerStyle(25);
  graphLY->SetName("DeltaLY"); graphLY->SetTitle("#Delta_{ly} (mm)");
  graphGX->SetName("DeltaGX"); graphGX->SetTitle("#Delta_{gx} (mm)");
  graphGY->SetName("DeltaGY"); graphGY->SetTitle("#Delta_{gy} (mm)");
  graphPhi->SetName("DeltaPhi"); graphPhi->SetTitle("#Delta_{phi} (mrad)");
  //
  graphLY->Write("grDeltaLY");
  graphGX->Write("grDeltaGX");
  graphGY->Write("grDeltaGY");
  graphPhi->Write("grDeltaPhi");
  // Check:
  /*
    graphLY.Draw("alp")
    chain->Draw("mean-deltaG:int(sector)",cutS+"type==0&&refX==0&&theta>0","profsame");
    chain->Draw("mean-deltaG:int(sector+18)",cutS+"type==0&&refX==0&&theta<0","profsame");

    graphPhi.Draw("alp")
    chain->Draw("1000*(mean-deltaG):int(sector)",cutS+"type==2&&refX==0&&theta>0","profsame");
    chain->Draw("1000*(mean-deltaG):int(sector+18)",cutS+"type==2&&refX==0&&theta<0","profsame");

    // 
    chain->Draw("deltaL:fitYLocal",cutS+"type==2&&refX==0","");  // phi shift - OK
    chain->Draw("deltaL:fitYLocal",cutS+"type==0&&refX==0","");  // OK
    chain->Draw("deltaL:fitYLocal",cutS+"type==0",""); // OK

  */
  
  return alignLocal;
}





void LoadTrees(){
  //
  // make  sector alignment - using Kalman filter method -AliTPCkalmanAlign
  // Combined information is used, mean residuals are minimized:
  //
  // 1. TPC-ITS alignment
  // 2. TPC vertex alignment 
  //
  TFile *f0 = new TFile("../mergeField0/mean.root");
  TFile *fP= new TFile("../mergePlus/mean.root");
  TFile *fM= new TFile("../mergeMinus/mean.root");
  //
  itsdy=(TTree*)f0->Get("ITSdy");
  itsdyP=(TTree*)fP->Get("ITSdy");
  itsdyM=(TTree*)fM->Get("ITSdy");
  itsdp=(TTree*)f0->Get("ITSdsnp");
  itsdphiP=(TTree*)fP->Get("ITSdsnp");
  itsdphiM=(TTree*)fM->Get("ITSdsnp");

  itsdz=(TTree*)f0->Get("ITSdz");
  itsdt=(TTree*)f0->Get("ITSdtheta");
  tofdy=(TTree*)f0->Get("TOFdy");
  trddy=(TTree*)f0->Get("TRDdy");
  //
  vdy=(TTree*)f0->Get("Vertexdy");
  vdyP=(TTree*)fP->Get("Vertexdy");
  vdyM=(TTree*)fM->Get("Vertexdy");
  vds=(TTree*)f0->Get("Vertexdsnp");
  vdz=(TTree*)f0->Get("Vertexdz");
  vdt=(TTree*)f0->Get("Vertexdtheta");
  chain    = new TChain("mean","mean");
  chainZ    = new TChain("mean","mean");
  chain->AddFile("../mergeField0/mean.root",10000000,"ITSdy");
  chain->AddFile("../mergeField0/mean.root",10000000,"ITSdsnp");
  chain->AddFile("../mergeField0/mean.root",10000000,"Vertexdy");
  chain->AddFile("../mergeField0/mean.root",10000000,"Vertexdsnp");
  chain->AddFile("../mergeField0/mean.root",10000000,"TOFdy");
  chain->AddFile("../mergeField0/mean.root",10000000,"TRDdy");
  //
  chainZ->AddFile("../mergeField0/mean.root",10000000,"Vertexdz");
  chainZ->AddFile("../mergeField0/mean.root",10000000,"Vertexdtheta");
  chainZ->AddFile("../mergeField0/mean.root",10000000,"ITSdz");
  chainZ->AddFile("../mergeField0/mean.root",10000000,"ITSdtheta");

  //
  itsdy->AddFriend(itsdp,"Phi");
  itsdy->AddFriend(itsdphiP,"PhiP");
  itsdy->AddFriend(itsdphiM,"PhiM");
  itsdy->AddFriend(itsdz,"Z");
  itsdy->AddFriend(itsdt,"T");
  itsdy->AddFriend(itsdyP,"YP");
  itsdy->AddFriend(itsdyM,"YM");
  //
  itsdy->AddFriend(vdy,"V");
  itsdy->AddFriend(vdyP,"VP");
  itsdy->AddFriend(vdyP,"VM");
  itsdy->AddFriend(tofdy,"TOF");
  itsdy->AddFriend(trddy,"TRD");
  itsdy->AddFriend(vds,"VPhi");
  itsdy->AddFriend(vdz,"VZ");
  itsdy->AddFriend(vdt,"VT");
  itsdy->AddFriend(tofdy,"TOF.");
  itsdy->SetMarkerStyle(25);
  itsdy->SetMarkerSize(0.4);
  tree=itsdy;
  tree->SetAlias("side","(-1+2*(theta>0))");
  chain->SetAlias("side","(-1+2*(theta>0))");
  chain->SetMarkerStyle(25);
  chain->SetMarkerSize(0.5);
}


void FitAlignCombinedCorr(){
  //
  // Fit Global X and globalY shift at vertex and at ITS
  // 
  RegisterAlignFunction();
  LoadTrees();
  combAlignOCDBOld = AliTPCCalibGlobalMisalignment::CreateOCDBAlign();
  //

  pcstream= new TTreeSRedirector("fitAlignCombined.root"); 

  TStatToolkit toolkit;
  Double_t chi2=0;
  Int_t    npoints=0;
  // Fit vectors
  // global fits  
  TVectorD vecSec(37);
  TVectorD paramYGlobal;
  TVectorD paramYLocal;
  TMatrixD covar;
  // make Aliases
  {for (Int_t isec=0; isec<18; isec++){ // sectors
      tree->SetAlias(Form("sec%d",isec), Form("(abs(sector-%f)<0.5)",isec+0.5));
      chain->SetAlias(Form("sec%d",isec), Form("(abs(sector-%f)<0.5)",isec+0.5));
    }}
  for (Int_t isec=-1;isec<36; isec++){
    vecSec[isec+1]=isec;
  }
  chain->SetAlias("err","((type==0)*0.1+(type==2)*0.001)");
  // delta phi
  chain->SetAlias("dpgx","(0+0)");
  chain->SetAlias("dpgy","(0+0)");
  chain->SetAlias("dpgr0","((AliTPCCorrection::GetCorrSector(sector,245,theta,1,3)-AliTPCCorrection::GetCorrSector(sector,85,theta,1,3))/160)");
  chain->SetAlias("dpgr1","((AliTPCCorrection::GetCorrSector(sector,245,theta,1,4)-AliTPCCorrection::GetCorrSector(sector,85,theta,1,4))/160)");
  chain->SetAlias("dpgr2","((AliTPCCorrection::GetCorrSector(sector,245,theta,1,5)-AliTPCCorrection::GetCorrSector(sector,85,theta,1,5))/160)");
  chain->SetAlias("deltaPG","((AliTPCCorrection::GetCorrSector(sector,245,theta,1,100)-AliTPCCorrection::GetCorrSector(sector,85,theta,1,100))/160)");
  chain->SetAlias("deltaPL","((AliTPCCorrection::GetCorrSector(sector,245,theta,1,101)-AliTPCCorrection::GetCorrSector(sector,85,theta,1,101))/160)");
  // delta y at 85 cm
  chain->SetAlias("dygxT","(AliTPCCorrection::GetCorrSector(sector,85,theta,1,0)+0)"); 
  chain->SetAlias("dygyT","(AliTPCCorrection::GetCorrSector(sector,85,theta,1,1)+0)");
  chain->SetAlias("dyr0T","(AliTPCCorrection::GetCorrSector(sector,85,theta,1,3)+0)");
  chain->SetAlias("dyr1T","(AliTPCCorrection::GetCorrSector(sector,85,theta,1,4)+0)");
  chain->SetAlias("dyr2T","(AliTPCCorrection::GetCorrSector(sector,85,theta,1,5)+0)");
  chain->SetAlias("deltaYGT","(AliTPCCorrection::GetCorrSector(sector,85,theta,1,100)+0)");
  chain->SetAlias("deltaYLT","(AliTPCCorrection::GetCorrSector(sector,85,theta,1,101)+0)");
  //
  // delta y at reference X
  chain->SetAlias("dygx","(dygxT+0)");   // due global x shift
  chain->SetAlias("dygy","(dygyT+0)");   // due global y shift
  chain->SetAlias("dyr0","(dyr0T+dpgr0*(refX-85.))");  // due rotation 0
  chain->SetAlias("dyr1","(dyr1T+dpgr1*(refX-85.))");  // due rotation 1
  chain->SetAlias("dyr2","(dyr2T+dpgr2*(refX-85.))");  // due rotation 2
  chain->SetAlias("deltaYG","(deltaYGT+deltaPG*(refX-85.))");  // due global distortion
  chain->SetAlias("deltaYL","(deltaYLT+deltaPL*(refX-85.))");  // due local distortion

  chain->SetAlias("deltaG","(type==0)*deltaYG+(type==2)*deltaPG");  //alias to global function
  chain->SetAlias("deltaL","(type==0)*deltaYL+(type==2)*deltaPL");  //alias to local function
  //
  TString  fstringGlobal="";		 
  // global part
  fstringGlobal+="((type==0)*dygx+0)++";
  fstringGlobal+="((type==0)*dygy+0)++";
  fstringGlobal+="((type==0)*dyr0+(type==2)*dpgr0)++";
  fstringGlobal+="((type==0)*dyr1+(type==2)*dpgr1)++";
  fstringGlobal+="((type==0)*dyr2+(type==2)*dpgr2)++";
  //
  // Make global fits
  //
  TString *strFitYGlobal = TStatToolkit::FitPlane(chain,"mean:err", fstringGlobal.Data(),cutS+"", chi2,npoints,paramYGlobal,covar,-1,0, 10000000, kTRUE);
  combAlignGlobal =MakeAlignFunctionGlobal(paramYGlobal);
  printf("chi2=%f\n",TMath::Sqrt(chi2/npoints));
  chain->SetAlias("fitYGlobal",strFitYGlobal->Data());
  paramYGlobal.Print();
  paramYGlobal.Write("paramYGlobal");
  //
  //
  //
  //
  {for (Int_t isec=0; isec<18; isec++){
      //A side
      chain->SetAlias(Form("glyASec%d",isec),Form("((type==0)*sec%d*(theta>0))",isec)); // ly shift   
      chain->SetAlias(Form("gxASec%d",isec),Form("((type==0)*dygx*sec%d*(theta>0))",isec)); // gx shift
      chain->SetAlias(Form("gyASec%d",isec),Form("((type==0)*dygy*sec%d*(theta>0))",isec)); // gy shift
      chain->SetAlias(Form("gpASec%d",isec),Form("(((type==0)*dyr0+(type==2)*dpgr0)*sec%d)*(theta>0)",isec)); // phi rotation
      //C side
      chain->SetAlias(Form("glyCSec%d",isec),Form("((type==0)*sec%d*(theta<0))",isec)); // ly shift   
      chain->SetAlias(Form("gxCSec%d",isec),Form("((type==0)*dygx*sec%d*(theta<0))",isec)); 
      chain->SetAlias(Form("gyCSec%d",isec),Form("((type==0)*dygy*sec%d*(theta<0))",isec));
      chain->SetAlias(Form("gpCSec%d",isec),Form("(((type==0)*dyr0+(type==2)*dpgr0)*sec%d)*(theta<0)",isec)); // phi rotation
    }}

  TString  fstringLocal="";		 
  {for (Int_t isec=0; isec<18; isec++){   
      //fstringLocal+=Form("((type==0)*dygx*sec%d*(theta>0))++",isec);
      //      fstringLocal+=Form("(gxASec%d)++",isec);
      // fstringLocal+=Form("(gyASec%d)++",isec);
      fstringLocal+=Form("(glyASec%d)++",isec);
      fstringLocal+=Form("(gpASec%d)++",isec);
      fstringLocal+=Form("(glyCSec%d)++",isec);
      //fstringLocal+=Form("(gxCSec%d)++",isec);
      //fstringLocal+=Form("(gyCSec%d)++",isec);
      fstringLocal+=Form("(gpCSec%d)++",isec);
    }}
  		 
  TString *strFitYLocal = TStatToolkit::FitPlane(chain,"(mean-deltaG):err", fstringLocal.Data(),cutS+"", chi2,npoints,paramYLocal,covar,-1,0, 10000000, kTRUE);
  printf("chi2=%f\n",TMath::Sqrt(chi2/npoints));
  chain->SetAlias("fitYLocal",strFitYLocal->Data());
  combAlignLocal =MakeAlignFunctionSector(paramYLocal);
  //paramYLocal.Print();
  paramYLocal.Write("paramYLocal");
  //
  // scaling  - why do we need it?
  TString  fstringScale="";		 
  fstringScale+="((type==1)*refX+(type==2))*dsec++";
  fstringScale+="((type==1)*refX+(type==2))*dsec*cos(phi)++";
  fstringScale+="((type==1)*refX+(type==2))*dsec*sin(phi)++";
  fstringScale+="((type==1)*refX+(type==2))*dsec*side++";
  fstringScale+="((type==1)*refX+(type==2))*dsec*side*cos(phi)++";
  fstringScale+="((type==1)*refX+(type==2))*dsec*side*sin(phi)++";
  //
  //
  //
  pcstream->GetFile()->cd();
  DrawFitQA();  
  //
  AliTPCCalibGlobalMisalignment * combAlignOCDBNew0 =( AliTPCCalibGlobalMisalignment *)combAlignOCDBOld->Clone();  
  combAlignOCDBNew0->AddAlign(*combAlignGlobal);
  combAlignOCDBNew0->AddAlign(*combAlignLocal);
  combAlignOCDBNew= AliTPCCalibGlobalMisalignment::CreateMeanAlign(combAlignOCDBNew0);
  //
  combAlignGlobal->SetName("fcombAlignGlobal");
  combAlignLocal->SetName("fcombAlignLocal");
  combAlignOCDBOld->SetName("fcombAlignOCDBOld");
  combAlignOCDBNew->SetName("fcombAlignOCDBNew");
  combAlignOCDBNew0->SetName("fcombAlignOCDBNew0");
  //
  combAlignGlobal->Write("fcombAlignGlobal");
  combAlignLocal->Write("fcombAlignLocal");
  combAlignOCDBOld->Write("fcombAlignOCDBOld");
  combAlignOCDBNew->Write("fcombAlignOCDBNew");
  combAlignOCDBNew0->Write("fcombAlignOCDBNew0");
  combAlignOCDBNew->Print();
  delete pcstream;
}

void DrawFitQA(){
  //
  //
  //
 //
  // MakeQA plot 1D
  //
  TCanvas c;
  c.SetLeftMargin(0.15);
  chain->Draw("1000*(mean-deltaG)>>his(100,-1.5,1.5)",cutS+"type==2&&refX==0","");
  chain->GetHistogram()->SetName("TPC_VertexDphiGlobal1D");
  chain->GetHistogram()->SetTitle("TPC-Vertex #Delta_{#phi} - (Global Fit)");
  chain->GetHistogram()->GetXaxis()->SetTitle("#Delta_{#phi} (mrad)");
  chain->GetHistogram()->Fit("gaus","qnr");
  chain->GetHistogram()->Write();
  //
  chain->Draw("1000*(mean-deltaG)>>his(100,-1.5,1.5)",cutS+"type==2&&abs(refX-85)<2","");
  chain->GetHistogram()->SetName("TPC_ITSDphiGlobal1D");
  chain->GetHistogram()->SetTitle("TPC-ITS #Delta_{#phi} - (Global Fit)");
  chain->GetHistogram()->GetXaxis()->SetTitle("#Delta_{#phi} (mrad)");
  chain->GetHistogram()->Fit("gaus","qnr");
  chain->GetHistogram()->Write();
  //
  chain->Draw("10*(mean-deltaG)>>his(100,-1,1)",cutS+"type==0&&abs(refX-85)<2","");
  chain->GetHistogram()->SetName("TPC_ITSDRPhiGlobal1D");
  chain->GetHistogram()->SetTitle("TPC-ITS #Delta_{r#phi} - (Global Fit)");
  chain->GetHistogram()->GetXaxis()->SetTitle("#Delta_{r#phi} (mm)");
  chain->GetHistogram()->Fit("gaus","qnr");
  chain->GetHistogram()->Write();
  //
  chain->Draw("10*(mean-deltaG)>>his(100,-1,1)",cutS+"type==0&&abs(refX-0)<2","");
  chain->GetHistogram()->SetName("TPC-VertexDRPhiGlobal1D");
  chain->GetHistogram()->SetTitle("TPC-Vertex #Delta_{r#phi} - (Global Fit)");
  chain->GetHistogram()->GetXaxis()->SetTitle("#Delta_{r#phi} (mm)");
  chain->GetHistogram()->Fit("gaus","qnr");
  chain->GetHistogram()->Write();
  //
  // Make QA plot 3D
  //
  chain->Draw("1000*(mean-deltaG):sector:abs(theta)",cutS+"theta>0&&type==2&&refX==0","colz");
  chain->GetHistogram()->SetName("TPC_VertexDphi3DGlobal3D");
  chain->GetHistogram()->SetTitle("TPC-Vertex #Delta_{#phi} - (Global Fit)");
  chain->GetHistogram()->GetYaxis()->SetTitle("#Delta_{#phi} (mrad)");
  chain->GetHistogram()->GetXaxis()->SetTitle("sector");
  chain->GetHistogram()->GetZaxis()->SetTitle("tan(#Theta)");
  chain->GetHistogram()->Draw("colz");
  chain->GetHistogram()->Write();
  //
  chain->Draw("1000*(mean-deltaG):sector:abs(theta)",cutS+"theta>0&&type==2&&abs(refX-85)<2","colz");
  chain->GetHistogram()->SetName("TPC_ITSDphi3DGlobal3D");
  chain->GetHistogram()->SetTitle("TPC-ITS #Delta_{#phi} - (Global Fit)");
  chain->GetHistogram()->GetYaxis()->SetTitle("#Delta_{#phi} (mrad)");
  chain->GetHistogram()->GetXaxis()->SetTitle("sector");
  chain->GetHistogram()->GetZaxis()->SetTitle("tan(#Theta)");
  chain->GetHistogram()->Draw("colz");
  chain->GetHistogram()->Write();
  //
  chain->Draw("10*(mean-deltaG):sector:abs(theta)",cutS+"theta>0&&type==0&&abs(refX-85)<2","colz");
  chain->GetHistogram()->SetName("TPC_ITSDRphi3DGlobal3D");
  chain->GetHistogram()->SetTitle("TPC-ITS #Delta_{r#phi} - (Global Fit)");
  chain->GetHistogram()->GetYaxis()->SetTitle("#Delta_{r#phi} (mm)");
  chain->GetHistogram()->GetXaxis()->SetTitle("sector");
  chain->GetHistogram()->GetZaxis()->SetTitle("tan(#Theta)");
  chain->GetHistogram()->Draw("colz");
  chain->GetHistogram()->Write();
  //
  chain->Draw("10*(mean-deltaG):sector:abs(theta)",cutS+"theta>0&&type==0&&abs(refX-0)<2","colz");
  chain->GetHistogram()->SetName("TPC_VertexDRphi3DGlobal3D");
  chain->GetHistogram()->SetTitle("TPC-Vertex #Delta_{r#phi} - (Global Fit)");
  chain->GetHistogram()->GetYaxis()->SetTitle("#Delta_{r#phi} (mm)");
  chain->GetHistogram()->GetXaxis()->SetTitle("sector");
  chain->GetHistogram()->GetZaxis()->SetTitle("tan(#Theta)");
  chain->GetHistogram()->Draw("colz");
  chain->GetHistogram()->Write();
  //
  //
  //
  chain->Draw("1000*(mean-deltaG-deltaL):sector:abs(theta)",cutS+"theta>0&&type==2&&refX==0","colz");
  chain->GetHistogram()->SetName("TPC_VertexDphi3DLocal3D");
  chain->GetHistogram()->SetTitle("TPC-Vertex #Delta_{#phi} - (Local Fit)");
  chain->GetHistogram()->GetYaxis()->SetTitle("#Delta_{#phi} (mrad)");
  chain->GetHistogram()->GetXaxis()->SetTitle("sector");
  chain->GetHistogram()->GetZaxis()->SetTitle("tan(#Theta)");
  chain->GetHistogram()->Draw("colz");
  chain->GetHistogram()->Write();
  //
  chain->Draw("1000*(mean-deltaG-deltaL):sector:abs(theta)",cutS+"theta>0&&type==2&&abs(refX-85)<2","colz");
  chain->GetHistogram()->SetName("TPC_ITSDphi3DLocal3D");
  chain->GetHistogram()->SetTitle("TPC-ITS #Delta_{#phi} - (Local Fit)");
  chain->GetHistogram()->GetYaxis()->SetTitle("#Delta_{#phi} (mrad)");
  chain->GetHistogram()->GetXaxis()->SetTitle("sector");
  chain->GetHistogram()->GetZaxis()->SetTitle("tan(#Theta)");
  chain->GetHistogram()->Draw("colz");
  chain->GetHistogram()->Write();
  //
  chain->Draw("10*(mean-deltaG-deltaL):sector:abs(theta)",cutS+"theta>0&&type==0&&abs(refX-85)<2","colz");
  chain->GetHistogram()->SetName("TPC_ITSDRphi3DLocal3D");
  chain->GetHistogram()->SetTitle("TPC-ITS #Delta_{r#phi} - (Local Fit)");
  chain->GetHistogram()->GetYaxis()->SetTitle("#Delta_{r#phi} (mm)");
  chain->GetHistogram()->GetXaxis()->SetTitle("sector");
  chain->GetHistogram()->GetZaxis()->SetTitle("tan(#Theta)");
  chain->GetHistogram()->Draw("colz");
  chain->GetHistogram()->Write();
  //
  chain->Draw("10*(mean-deltaG-deltaL):sector:abs(theta)",cutS+"theta>0&&type==0&&abs(refX-0)<2","colz");
  chain->GetHistogram()->SetName("TPC_VertexDRphiLocal3D");
  chain->GetHistogram()->SetTitle("TPC-Vertex #Delta_{r#phi} - (Local Fit)");
  chain->GetHistogram()->GetYaxis()->SetTitle("#Delta_{r#phi} (mm)");
  chain->GetHistogram()->GetXaxis()->SetTitle("sector");
  chain->GetHistogram()->GetZaxis()->SetTitle("tan(#Theta)");
  chain->GetHistogram()->Draw("colz");
  chain->GetHistogram()->Write();
}




void FitAlignCombined0(){
  //
  // Fit Global X and globalY shift at vertex and at ITS
  // 
  
  TTreeSRedirector *pcstream= new TTreeSRedirector("fitAlignCombined.root"); 

  TStatToolkit toolkit;
  Double_t chi2=0;
  Int_t    npoints=0;
  // Fit vectors
  // global fits  
  TVectorD vecSec(37);
  TVectorD paramYVGlobal;
  TVectorD paramYITSGlobal;
  TVectorD paramPhiVGlobal;
  TVectorD paramPhiITSGlobal;
  // local fits
  TVectorD paramYVLocal;
  TVectorD paramPhiVLocal;
  TVectorD paramYITSLocal;
  TVectorD paramPhiITSLocal;
  TMatrixD covar;
  // make Aliases
  {for (Int_t isec=0; isec<18; isec++){ // sectors
      tree->SetAlias(Form("sec%d",isec), Form("(abs(sector-%f)<0.5)",isec+0.5));
    }}
  for (Int_t isec=-1;isec<36; isec++){
    vecSec[isec+1]=isec;
  }
  //
  TString  fstringGlobal="";		 
  fstringGlobal+="side++";
  fstringGlobal+="theta++";
  fstringGlobal+="cos(phi)*(theta>0)++";  // GX - A side
  fstringGlobal+="sin(phi)*(theta>0)++";  // GY - A side
  fstringGlobal+="cos(phi)*(theta<0)++";  // GX - C side
  fstringGlobal+="sin(phi)*(theta<0)++";  // GY - C side
  fstringGlobal+="cos(phi)*(theta)++";    // theta - get rid of rotation 
  fstringGlobal+="sin(phi)*(theta)++";    // theta - get rid of rotation
  //
  // Local Fit
  //  
  TString  fstringLocal="";		 
  {for (Int_t sector=0; sector<18; sector++){   
      fstringLocal+=Form("((sec%d)*theta>0)++",sector);
      fstringLocal+=Form("((sec%d)*theta<0)++",sector);
    }}
  //
  // Make global fits
  //
  TString *strFitYVGlobal = TStatToolkit::FitPlane(tree,"V.mean", fstringGlobal.Data(),cutS+"", chi2,npoints,paramYVGlobal,covar,-1,0, 10000000, kFALSE);
  printf("chi2=%f\n",TMath::Sqrt(chi2/npoints));
  tree->SetAlias("fitYVGlobal",strFitYVGlobal->Data());
  tree->Draw("V.mean:fitYVGlobal",cutS);
  //
  TString *strFitPhiVGlobal = TStatToolkit::FitPlane(tree,"VPhi.mean", fstringGlobal.Data(),cutS+"", chi2,npoints,paramPhiVGlobal,covar,-1,0, 10000000, kFALSE);
  printf("chi2=%f\n",TMath::Sqrt(chi2/npoints));
  tree->SetAlias("fitPhiVGlobal",strFitPhiVGlobal->Data());
  tree->Draw("VPhi.mean:fitPhiVGlobal",cutS);
  //
  TString *strFitYITSGlobal = TStatToolkit::FitPlane(tree,"mean", fstringGlobal.Data(),cutS+"", chi2,npoints,paramYITSGlobal,covar,-1,0, 10000000, kFALSE);
  printf("chi2=%f\n",TMath::Sqrt(chi2/npoints));
  tree->SetAlias("fitYITSGlobal",strFitYITSGlobal->Data());
  tree->Draw("mean:fitYITSGlobal",cutS);
  TString *strFitPhiITSGlobal = TStatToolkit::FitPlane(tree,"Phi.mean", fstringGlobal.Data(),cutS+"", chi2,npoints,paramPhiITSGlobal,covar,-1,0, 10000000, kFALSE);
  printf("chi2=%f\n",TMath::Sqrt(chi2/npoints));
  tree->SetAlias("fitPhiITSGlobal",strFitPhiITSGlobal->Data());
  tree->Draw("Phi.mean:fitPhiITSGlobal",cutS);
  //
  // Residuals to the global fit
  //
  tree->SetAlias("dyVG", "V.mean-fitYVGlobal");      
  tree->SetAlias("dphiVG","(VPhi.mean-fitPhiVGlobal)");
  tree->SetAlias("dyITSG","mean-fitYITSGlobal");
  tree->SetAlias("dphiITSG","(Phi.mean-fitPhiITSGlobal)");

  TString *strFitYVLocal = TStatToolkit::FitPlane(tree,"dyVG", fstringLocal.Data(),cutS+"", chi2,npoints,paramYVLocal,covar,-1,0, 10000000, kFALSE);
  printf("chi2=%f\n",TMath::Sqrt(chi2/npoints));
  tree->SetAlias("fitYVLocal",strFitYVLocal->Data());
  tree->Draw("dyVG-fitYVLocal:sector:abs(theta)",cutS+"theta>0","colz");  
  //
  TString *strFitPhiVLocal = TStatToolkit::FitPlane(tree,"dphiVG", fstringLocal.Data(),cutS+"", chi2,npoints,paramPhiVLocal,covar,-1,0, 10000000, kFALSE);
  printf("chi2=%f\n",TMath::Sqrt(chi2/npoints));
  tree->SetAlias("fitPhiVLocal",strFitPhiVLocal->Data());
  tree->Draw("dphiVG-fitPhiVLocal:sector:abs(theta)",cutS+"theta>0","colz");  
  //
  //
  //
  TString *strFitYITSLocal = TStatToolkit::FitPlane(tree,"dyITSG", fstringLocal.Data(),cutS+"", chi2,npoints,paramYITSLocal,covar,-1,0, 10000000, kFALSE);
  printf("chi2=%f\n",TMath::Sqrt(chi2/npoints));
  tree->SetAlias("fitYITSLocal",strFitYITSLocal->Data());
  tree->Draw("dyITSG-fitYITSLocal:sector:abs(theta)",cutS+"theta>0","colz");
  //
  TString *strFitPhiITSLocal = TStatToolkit::FitPlane(tree,"dphiITSG", fstringLocal.Data(),cutS+"", chi2,npoints,paramPhiITSLocal,covar,-1,0, 10000000, kFALSE);
  printf("chi2=%f\n",TMath::Sqrt(chi2/npoints));
  tree->SetAlias("fitPhiITSLocal",strFitPhiITSLocal->Data());
  tree->Draw("dphiITSG-fitPhiITSLocal:sector:abs(theta)",cutS+"theta>0","colz");

  //
  TH1D *hisA = 0;
  TH1D *hisC = 0;
  TVectorD vSec(36);
  TVectorD vecDPhi(36);
  TVectorD vecDLY(36);
  TVectorD vecDGX(36);
  TVectorD vecDGY(36);

  //
  tree->SetAlias("phiMean","(fitPhiVLocal+fitPhiITSLocal+fitPhiVGlobal+fitPhiITSGlobal)*0.5");
  tree->SetAlias("yMeanV","((fitYITSLocal+fitYITSGlobal-85*phiMean)+(fitYVLocal+fitYVGlobal))*0.5");
  tree->SetAlias("yMeanITS","((fitYITSLocal+fitYITSGlobal)+(fitYVLocal+fitYVGlobal+85*phiMean))*0.5");
  

  tree->Draw("phiMean:int(sector)>>hhhA(18,0.18)",cutS+"abs(theta)<0.15&&theta>0","prof"); 
  hisA = (TH1D*) tree->GetHistogram()->Clone();
  tree->Draw("phiMean:int(sector)>>hhhC(18,0.18)",cutS+"abs(theta)<0.15&&theta<0","prof"); 
  hisC = (TH1D*) tree->GetHistogram()->Clone();
  
  for (Int_t isec=0; isec<36; isec++){
    vSec[isec]=isec;
    if (isec<18)  vecDPhi[isec]=hisA->GetBinContent(isec%18+1);
    if (isec>=18) vecDPhi[isec]=hisC->GetBinContent(isec%18+1);    
  }
  tree->Draw("yMeanV:int(sector)>>hhhA(18,0.18)",cutS+"abs(theta)<0.15&&theta>0","prof"); 
  hisA = (TH1D*) tree->GetHistogram()->Clone();
  tree->Draw("yMeanV:int(sector)>>hhhC(18,0.18)",cutS+"abs(theta)<0.15&&theta<0","prof"); 
  hisC = (TH1D*) tree->GetHistogram()->Clone();
  //
  for (Int_t isec=0; isec<36; isec++){
    if (isec<18)  vecDLY[isec]=hisA->GetBinContent(isec%18+1);
    if (isec>=18) vecDLY[isec]=hisC->GetBinContent(isec%18+1);    
    vecDGX[isec]=-vecDLY[isec]*TMath::Sin(TMath::Pi()*(isec+0.5)/9.);
    vecDGY[isec]= vecDLY[isec]*TMath::Cos(TMath::Pi()*(isec+0.5)/9.);
  }

 


  //
  // Store results 
  //
  {(*pcstream)<<"fitLocal"<<
      //global fits
      "sec.="<<&vSec<<
      "pYVGlobal.="<<&paramYVGlobal<<
      "pYITSGlobal.="<<&paramYITSGlobal<<
      "pPhiVGlobal.="<<&paramPhiVGlobal<<
      "pPhiITSGlobal.="<<&paramPhiITSGlobal<<
      // local fits
      "pYVLocal.="<<&paramYVLocal<<
      "pPhiVLocal.="<<&paramPhiVLocal<<
      "pYITSLocal.="<<&paramYITSLocal<<
      "pPhiITSLocal.="<<&paramPhiITSLocal<<
      //
      // combined
      "vDPhi.="<<&vecDPhi<<
      "vDLY.="<<&vecDLY<<
      "vDGX.="<<&vecDGX<<
      "vDGY.="<<&vecDGY<<
      "\n";
  }
  paramYVGlobal.Write("paramYVGlobal");
  paramYITSGlobal.Write("paramYITSGlobal");
  paramPhiVGlobal.Write("paramPhiVGlobal");
  paramPhiITSGlobal.Write("paramPhiITSGlobal");
  // local fits
  paramYVLocal.Write("paramYVLocal");
  paramPhiVLocal.Write("paramPhiVLocal");
  paramYITSLocal.Write("paramYITSLocal");
  paramPhiITSLocal.Write("paramPhiITSLocal");
  vecDPhi.Write("vecDPhi");
  vecDLY.Write("vecDLY");
  vecDGX.Write("vecDGX");
  vecDGY.Write("vecDGY");



  tree->Draw("dyVG:sector:abs(theta)",cutS+"theta>0","colz");
  tree->GetHistogram()->Write("fitYVGlobal");
  tree->Draw("dphiVG:sector:abs(theta)",cutS+"theta>0","colz");
  tree->GetHistogram()->Write("fitPhiVGlobal");
  tree->Draw("dyITSG:sector:abs(theta)",cutS+"theta>0","colz");
  tree->GetHistogram()->Write("fitYITSGlobal");
  tree->Draw("dphiITSG:sector:abs(theta)",cutS+"theta>0","colz");
  tree->GetHistogram()->Write("fitPhiITSGlobal");
  //
  tree->Draw("dyVG-fitYVLocal:sector:abs(theta)",cutS+"theta>0","colz");
  tree->GetHistogram()->Write("fitYVLocal");
  tree->Draw("dphiVG-fitPhiVLocal:sector:abs(theta)",cutS+"theta>0","colz");
  tree->GetHistogram()->Write("fitPhiVLocal");
  tree->Draw("dyITSG-fitYITSLocal:sector:abs(theta)",cutS+"theta>0","colz");
  tree->GetHistogram()->Write("fitYITSLocal");
  tree->Draw("dphiITSG-fitPhiITSLocal:sector:abs(theta)",cutS+"theta>0","colz");
  tree->GetHistogram()->Write("fitPhiITSLocal");
  delete pcstream;
}

void FitAlignCombined(){
  //
  // 
  // 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");

  TCut cutQ="entries>1000&&abs(theta)<0.5&&abs(snp)<0.2&&YP.entries>50&&YM.entries>50";
  TH1F his1("hdeltaY1","hdeltaY1",100,-0.5,0.5);
  TMatrixD vecAlign(72,1);
  TMatrixD covAlign(72,72);
  TMatrixD vecAlignY(72,1);
  TMatrixD covAlignY(72,72);
  TMatrixD vecAlignTheta(72,1);
  TMatrixD covAlignTheta(72,72);
  TMatrixD vecAlignZ(72,1);
  TMatrixD covAlignZ(72,72);
  AliTPCkalmanAlign::BookAlign1D(vecAlign,covAlign,0,0.002);
  AliTPCkalmanAlign::BookAlign1D(vecAlignY,covAlignY,0,0.1);
  AliTPCkalmanAlign::BookAlign1D(vecAlignTheta,covAlignTheta,0,0.002);
  AliTPCkalmanAlign::BookAlign1D(vecAlignZ,covAlignZ,0,0.1);
  TVectorD vecITSY(72);
  TVectorD vecITSYPM(72);
  TVectorD vecITSPhi(72);
  TVectorD vecITSPhiPM(72);
  TVectorD vecVY(72);
  TVectorD vecVS(72);
  TVectorD vecITSTheta(72);
  TVectorD vecVTheta(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();
      vecITSY[isec0]=meanITSY;
      vecITSY[isec0+36]=meanITSY;
      //
      itsdy->Draw("(YP.mean+YM.mean)*0.5",cutQ+cutSector+cutSide);
      Double_t meanITSYPM=itsdy->GetHistogram()->GetMean();
      vecITSYPM[isec0]=meanITSYPM;
      vecITSYPM[isec0+36]=meanITSYPM;
      //
      itsdy->Draw("Phi.mean",cutQ+cutSector+cutSide);
      Double_t meanITSPhi=itsdy->GetHistogram()->GetMean();
      vecITSPhi[isec0]=meanITSPhi;
      vecITSPhi[isec0+36]=meanITSPhi;
      //
      itsdy->Draw("(PhiP.mean+PhiM.mean)*0.5",cutQ+cutSector+cutSide);
      Double_t meanITSPhiPM=itsdy->GetHistogram()->GetMean();
      vecITSPhiPM[isec0]=meanITSPhiPM;
      vecITSPhiPM[isec0+36]=meanITSPhiPM;
      //
      //
      itsdy->Draw("VPhi.mean",cutQ+cutSector+cutSide);
      Double_t meanVS=itsdy->GetHistogram()->GetMean();
      vecVS[isec0]=meanVS;
      vecVS[isec0+36]=meanVS;
      //
      itsdy->Draw("V.mean",cutQ+cutSector+cutSide);
      Double_t meanVY=itsdy->GetHistogram()->GetMean();
      vecVY[isec0]=meanVY;
      vecVY[isec0+36]=meanVY;
      //
      itsdy->Draw("T.mean",cutQ+cutSector+cutSide);
      Double_t meanITST=itsdy->GetHistogram()->GetMean();
      vecITSTheta[isec0]=meanITST;
      vecITSTheta[isec0+36]=meanITST;
      // 
      itsdy->Draw("VT.mean",cutQ+cutSector+cutSide);
      Double_t meanVT=itsdy->GetHistogram()->GetMean();
      vecVTheta[isec0]=meanVT;
      vecVTheta[isec0+36]=meanVT;
    }
  }
  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 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<5; iter++){
    for (Int_t isec0=0; isec0<72; isec0++){
    for (Int_t isec1=0; isec1<72; isec1++){
      //if (isec0%36!=isec0%36) continue;
      if (iter==0 && isec0%36!=isec1%36) continue;
      if (iter==1 && isec0%18!=isec1%18) continue;
      TH1 * his = align->GetHisto(AliTPCcalibAlign::kY,isec0,isec1);
      TH1 * hisPhi = align->GetHisto(AliTPCcalibAlign::kPhi,isec0,isec1);
      TH1 * hisTheta = align->GetHisto(AliTPCcalibAlign::kTheta,isec0,isec1);
      TH1 * hisZ = align->GetHisto(AliTPCcalibAlign::kZ,isec0,isec1);
      Int_t side0=(isec0%36)<18 ? 1:-1; 
      Int_t side1=(isec1%36)<18 ? 1:-1;       
      Double_t weightTPC= 0.002;
      if (isec0%18==isec1%18) weightTPC=0.0005;
      if (isec0%36==isec1%36) weightTPC=0.00005;
      if (side0!=side1) weightTPC*=2.;
      Double_t weightTPCT= 0.001;
      if (isec0%18==isec1%18) weightTPC=0.0005;
      if (isec0%36==isec1%36) weightTPC=0.00005;
      if (TMath::Abs(isec0%18-isec1%18)==1) weightTPC = 0.0005;
      if (TMath::Abs(isec0%36-isec1%36)==1) weightTPC = 0.0001;

      //
      Double_t meanITS0=vecITSY[isec0];
      Double_t meanITSPM0=vecITSYPM[isec0];
      Double_t meanITSPhi0=vecITSPhi[isec0];
      Double_t meanITSPhiPM0=vecITSPhiPM[isec0];
      Double_t meanVY0=vecVY[isec0];
      Double_t meanVPhi0=vecVS[isec0];
      Double_t meanITSTheta0=vecITSTheta[isec0];
      Double_t meanVTheta0=vecVTheta[isec0];
      //
      Double_t meanITS1=vecITSY[isec1];
      Double_t meanITSPM1=vecITSYPM[isec1];
      Double_t meanITSPhi1=vecITSPhi[isec1];
      Double_t meanITSPhiPM1=vecITSPhiPM[isec1];
      Double_t meanVY1=vecVY[isec1];
      Double_t meanVPhi1=vecVS[isec1];
      Double_t meanITSTheta1=vecITSTheta[isec1];
      Double_t meanVTheta1=vecVTheta[isec1];
      //
      Double_t meanPhi0 = (meanITSPhi0+meanVPhi0+2*meanITS0/83.)/4.;
      Double_t meanPhi1 = (meanITSPhi1+meanVPhi1+2*meanITS1/83.)/4.;
      //
      //
      if (iter>2 &&isec0==isec1){
	AliTPCkalmanAlign::UpdateAlign1D(-meanITS0/83, 0.001, isec0,  vecAlign,covAlign);
	AliTPCkalmanAlign::UpdateAlign1D(-meanITSPhi0, 0.001, isec0,  vecAlign,covAlign);
	AliTPCkalmanAlign::UpdateAlign1D(-meanVPhi0, 0.001, isec0,  vecAlign,covAlign);
	//
	AliTPCkalmanAlign::UpdateAlign1D(-meanPhi0, 0.001, isec0,  vecAlign,covAlign);
	AliTPCkalmanAlign::UpdateAlign1D(-meanVTheta0, 0.001, isec0,  vecAlignTheta,covAlignTheta);
	AliTPCkalmanAlign::UpdateAlign1D(-meanITSTheta0, 0.001, isec0,  vecAlignTheta,covAlignTheta);
      }
      if (iter>2){
	AliTPCkalmanAlign::UpdateAlign1D(meanPhi1-meanPhi0, 0.001, isec0,isec1,  vecAlign,covAlign);
	AliTPCkalmanAlign::UpdateAlign1D(meanITSPhiPM1-meanITSPhiPM0, 0.001, isec0,isec1,  vecAlign,covAlign);
	AliTPCkalmanAlign::UpdateAlign1D((meanITSPM1-meanITSPM0)/83., 0.001, isec0,isec1,  vecAlign,covAlign);
	AliTPCkalmanAlign::UpdateAlign1D(meanVTheta1-meanVTheta0, 0.001, isec0,isec1,  vecAlignTheta,covAlignTheta);
	AliTPCkalmanAlign::UpdateAlign1D(meanITSTheta1-meanITSTheta0, 0.001, isec0,isec1,  vecAlignTheta,covAlignTheta);
      }
      //
      if (!his) continue;
      if (!hisPhi) continue;
      if (!hisTheta) 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();
      Double_t meanTPCPhi=hisPhi->GetMean();
      Double_t meanTPCTheta=hisTheta->GetMean();
      Double_t meanTPCZ=hisZ->GetMean();
      //
      //
      Double_t kalman0= vecAlign(isec0,0);
      Double_t kalman1= vecAlign(isec1,0);
      Double_t kalmanY0= vecAlignY(isec0,0);
      Double_t kalmanY1= vecAlignY(isec1,0);
      Double_t kalmanTheta0= vecAlignTheta(isec0,0);
      Double_t kalmanTheta1= vecAlignTheta(isec1,0);
      Double_t kalmanZ0= vecAlignZ(isec0,0);
      Double_t kalmanZ1= vecAlignZ(isec1,0);
      //
      //
      AliTPCkalmanAlign::UpdateAlign1D((meanTPC)/xref, weightTPC, isec0,isec1,  vecAlign,covAlign);
      AliTPCkalmanAlign::UpdateAlign1D(meanTPCPhi, weightTPC*10,isec0,isec1,  vecAlign,covAlign);
      //
      AliTPCkalmanAlign::UpdateAlign1D(meanTPCTheta, weightTPCT, isec0,isec1,  vecAlignTheta,covAlignTheta);
      if (side0==side1) AliTPCkalmanAlign::UpdateAlign1D(meanTPCZ, weightTPCT*100., isec0,isec1,  vecAlignZ,covAlignZ);      
      //printf("isec0\t%d\tisec1\t%d\t%f\t%f\t%f\n",isec0,isec1, meanTPC, meanITS0,meanITS1);

      if (iter>=0) (*pcstream)<<"align"<<
	"iter="<<iter<<           
	"xref="<<xref<<                 // reference X
	"isec0="<<isec0<<               // sector number
	"isec1="<<isec1<<
	"side0="<<side0<<
	"side1="<<side1<<
	//TPC
	"mTPC="<<meanTPC<<              // delta Y  / xref
	"mTPCPhi="<<meanTPCPhi<<        // delta Phi
	"mTPCZ="<<meanTPCZ<<        // delta Z
	"mTPCTheta="<<meanTPCTheta<<    // delta Theta
	//ITS
	"mITS0="<<meanITS0<<  
	"mITS1="<<meanITS1<<
	"mITSPhi0="<<meanITSPhi0<<
	"mITSPhi1="<<meanITSPhi1<<
	//
	"mITSPM0="<<meanITSPM0<<  
	"mITSPM1="<<meanITSPM1<<
	"mITSPhiPM0="<<meanITSPhiPM0<<
	"mITSPhiPM1="<<meanITSPhiPM1<<
	//
	"mITSTheta0="<<meanITSTheta0<<
	"mITSTheta1="<<meanITSTheta1<<
	//Vertex
	"mVY0="<<meanVY0<<
	"mVY1="<<meanVY1<<
	"mVPhi0="<<meanVPhi0<<
	"mVPhi1="<<meanVPhi1<<
	"mVTheta0="<<meanVTheta0<<
	"mVTheta1="<<meanVTheta1<<
	// Vertex+ITS mean
	"mPhi0="<<meanPhi0<<
	"mPhi1="<<meanPhi1<<
	//Kalman
	"kY0="<<kalmanY0<<
	"kY1="<<kalmanY1<<
	"kPhi0="<<kalman0<<
	"kPhi1="<<kalman1<<
	"kTheta0="<<kalmanTheta0<<
	"kTheta1="<<kalmanTheta1<<
	"kZ0="<<kalmanZ0<<
	"kZ1="<<kalmanZ1<<
	"\n";
    }          
    }
    }
  }
  pcstream->GetFile()->cd();
  vecAlign.Write("alignPhiMean");
  covAlign.Write("alingPhiCovar");
  vecAlignTheta.Write("alignThetaMean");
  covAlignTheta.Write("alingThetaCovar");
  vecAlignZ.Write("alignZMean");
  covAlignZ.Write("alingZCovar");
  delete pcstream;
  TFile f("combAlign.root");
  TTree * treeA = (TTree*)f.Get("align"); 
  treeA->SetMarkerStyle(25);
  treeA->SetMarkerSize(0.5);
}





void UpdateOCDBAlign(){
  //
  // Store resulting OCDB entry
  // 0. Setup OCDB to get necccessary old entries - not done here
  // 1. Get old OCDB entry
  // 2. Get delta alignment
  // 3. Add delta alignment
  // 4. Store new alignment in 

  AliCDBEntry * entry = AliCDBManager::Instance()->Get("TPC/Align/Data");
  TClonesArray * array = (TClonesArray*)entry->GetObject();
  Int_t entries = array->GetEntries();
  TClonesArray * arrayNew=(TClonesArray*)array->Clone();
  TFile f("combAlign.root");
  TMatrixD *matPhi=(TMatrixD*)f.Get("alignPhiMean");  
  //
  //
  { for (Int_t i=0;i<entries; i++){
      //
      //
      AliAlignObjParams *alignP = (AliAlignObjParams*)array->UncheckedAt(i);
      AliAlignObjParams *alignPNew = (AliAlignObjParams*)arrayNew->UncheckedAt(i);
      Int_t imod;
      AliGeomManager::ELayerID ilayer;
      alignP->GetVolUID(ilayer, imod);
      if (ilayer==AliGeomManager::kInvalidLayer) continue;
      Int_t sector=imod;
      if (ilayer==AliGeomManager::kTPC2) sector+=36;
      Double_t transOld[3], rotOld[3];
      alignP->GetTranslation(transOld);  // in cm 
      alignP->GetAngles(rotOld);         // in degrees
      printf("%d\t%d\t%d\t",ilayer, imod,sector);
      printf("%f mrad \t%f mrad\n",1000*rotOld[2]*TMath::DegToRad(), 1000*((*matPhi)(sector,0)));
      alignPNew->SetRotation(rotOld[0],rotOld[1], rotOld[2]+(*matPhi)(sector,0)*TMath::RadToDeg());
      alignPNew->Print("kokot");
      alignP->Print("kokot");	
    }
  }

  

  TString ocdbStorage="local://"+gSystem->GetFromPipe("pwd")+"/OCDBUpdate";
  TString userName=gSystem->GetFromPipe("echo $USER");
  TString date=gSystem->GetFromPipe("date");

  AliCDBMetaData *metaData= new AliCDBMetaData();
  metaData->SetObjectClassName("TObjArray");
  metaData->SetResponsible("Marian Ivanov");
  metaData->SetBeamPeriod(1);
  metaData->SetAliRootVersion("05-26-02"); //root version  
  metaData->SetComment(Form("Correction calibration. User: %s\n Data%s",userName.Data(),date.Data()));

  AliCDBId* id1=NULL;
  id1=new AliCDBId("TPC/Align/Data", 0, AliCDBRunRange::Infinity());
  AliCDBStorage* gStorage = AliCDBManager::Instance()->GetStorage(ocdbStorage);
  gStorage->Put(arrayNew, (*id1), metaData);

  TFile falign("falign.root","recreate");
  arrayNew->Write("new");
  array->Write("old");
  falign.Close();
}



void UpdateOCDBAlign0(){
  //
  // Store resulting OCDB entry
  // 0. Setup OCDB to get necccessary old entries - not done here
  // 1. Get old OCDB entry
  // 2. Get delta alignment
  // 3. Add delta alignment
  // 4. Store new alignment in 

  AliCDBEntry * entry = AliCDBManager::Instance()->Get("TPC/Align/Data");
  TClonesArray * array = (TClonesArray*)entry->GetObject();
  Int_t entries = array->GetEntries();
  TClonesArray * arrayNew=(TClonesArray*)array->Clone();
  TFile f("fitAlignCombined.root");
  TVectorD *vecDPhi = (TVectorD*) f.Get("vecDPhi");
  TVectorD *vecDGX = (TVectorD*) f.Get("vecDGX");
  TVectorD *vecDGY = (TVectorD*) f.Get("vecDGY");
  
  //
  //
  { for (Int_t i=0;i<entries; i++){
      //
      //
      AliAlignObjParams *alignP = (AliAlignObjParams*)array->UncheckedAt(i);
      AliAlignObjParams *alignPNew = (AliAlignObjParams*)arrayNew->UncheckedAt(i);
      Int_t imod;
      AliGeomManager::ELayerID ilayer;
      alignP->GetVolUID(ilayer, imod);
      if (ilayer==AliGeomManager::kInvalidLayer) continue;
      Int_t sector=imod;
      if (ilayer==AliGeomManager::kTPC2) sector+=36;
      Double_t transOld[3], rotOld[3];
      alignP->GetTranslation(transOld);  // in cm 
      alignP->GetAngles(rotOld);         // in degrees
      printf("%d\t%d\t%d\t",ilayer, imod,sector);
      printf("%f mrad \t%f mrad\n",1000*rotOld[2]*TMath::DegToRad(), 1000*((*vecDPhi)[sector%36]));
      alignPNew->SetRotation(rotOld[0],rotOld[1], rotOld[2]-(*vecDPhi)[sector%36]*TMath::RadToDeg());
      alignPNew->SetTranslation(transOld[0]-(*vecDGX)[sector%36],transOld[1]-(*vecDGY)[sector%36], transOld[2]);
      alignPNew->Print("kokot");
      alignP->Print("kokot");	
    }
  }

  

  TString ocdbStorage="local://"+gSystem->GetFromPipe("pwd")+"/OCDBUpdate";
  TString userName=gSystem->GetFromPipe("echo $USER");
  TString date=gSystem->GetFromPipe("date");

  AliCDBMetaData *metaData= new AliCDBMetaData();
  metaData->SetObjectClassName("TObjArray");
  metaData->SetResponsible("Marian Ivanov");
  metaData->SetBeamPeriod(1);
  metaData->SetAliRootVersion("05-26-02"); //root version  
  metaData->SetComment(Form("Correction calibration. User: %s\n Data%s",userName.Data(),date.Data()));

  AliCDBId* id1=NULL;
  id1=new AliCDBId("TPC/Align/Data", 0, AliCDBRunRange::Infinity());
  AliCDBStorage* gStorage = AliCDBManager::Instance()->GetStorage(ocdbStorage);
  gStorage->Put(arrayNew, (*id1), metaData);

  TFile falign("falign.root","recreate");
  arrayNew->Write("new");
  array->Write("old");
  falign.Close();
}
 FitAlignCombined.C:1
 FitAlignCombined.C:2
 FitAlignCombined.C:3
 FitAlignCombined.C:4
 FitAlignCombined.C:5
 FitAlignCombined.C:6
 FitAlignCombined.C:7
 FitAlignCombined.C:8
 FitAlignCombined.C:9
 FitAlignCombined.C:10
 FitAlignCombined.C:11
 FitAlignCombined.C:12
 FitAlignCombined.C:13
 FitAlignCombined.C:14
 FitAlignCombined.C:15
 FitAlignCombined.C:16
 FitAlignCombined.C:17
 FitAlignCombined.C:18
 FitAlignCombined.C:19
 FitAlignCombined.C:20
 FitAlignCombined.C:21
 FitAlignCombined.C:22
 FitAlignCombined.C:23
 FitAlignCombined.C:24
 FitAlignCombined.C:25
 FitAlignCombined.C:26
 FitAlignCombined.C:27
 FitAlignCombined.C:28
 FitAlignCombined.C:29
 FitAlignCombined.C:30
 FitAlignCombined.C:31
 FitAlignCombined.C:32
 FitAlignCombined.C:33
 FitAlignCombined.C:34
 FitAlignCombined.C:35
 FitAlignCombined.C:36
 FitAlignCombined.C:37
 FitAlignCombined.C:38
 FitAlignCombined.C:39
 FitAlignCombined.C:40
 FitAlignCombined.C:41
 FitAlignCombined.C:42
 FitAlignCombined.C:43
 FitAlignCombined.C:44
 FitAlignCombined.C:45
 FitAlignCombined.C:46
 FitAlignCombined.C:47
 FitAlignCombined.C:48
 FitAlignCombined.C:49
 FitAlignCombined.C:50
 FitAlignCombined.C:51
 FitAlignCombined.C:52
 FitAlignCombined.C:53
 FitAlignCombined.C:54
 FitAlignCombined.C:55
 FitAlignCombined.C:56
 FitAlignCombined.C:57
 FitAlignCombined.C:58
 FitAlignCombined.C:59
 FitAlignCombined.C:60
 FitAlignCombined.C:61
 FitAlignCombined.C:62
 FitAlignCombined.C:63
 FitAlignCombined.C:64
 FitAlignCombined.C:65
 FitAlignCombined.C:66
 FitAlignCombined.C:67
 FitAlignCombined.C:68
 FitAlignCombined.C:69
 FitAlignCombined.C:70
 FitAlignCombined.C:71
 FitAlignCombined.C:72
 FitAlignCombined.C:73
 FitAlignCombined.C:74
 FitAlignCombined.C:75
 FitAlignCombined.C:76
 FitAlignCombined.C:77
 FitAlignCombined.C:78
 FitAlignCombined.C:79
 FitAlignCombined.C:80
 FitAlignCombined.C:81
 FitAlignCombined.C:82
 FitAlignCombined.C:83
 FitAlignCombined.C:84
 FitAlignCombined.C:85
 FitAlignCombined.C:86
 FitAlignCombined.C:87
 FitAlignCombined.C:88
 FitAlignCombined.C:89
 FitAlignCombined.C:90
 FitAlignCombined.C:91
 FitAlignCombined.C:92
 FitAlignCombined.C:93
 FitAlignCombined.C:94
 FitAlignCombined.C:95
 FitAlignCombined.C:96
 FitAlignCombined.C:97
 FitAlignCombined.C:98
 FitAlignCombined.C:99
 FitAlignCombined.C:100
 FitAlignCombined.C:101
 FitAlignCombined.C:102
 FitAlignCombined.C:103
 FitAlignCombined.C:104
 FitAlignCombined.C:105
 FitAlignCombined.C:106
 FitAlignCombined.C:107
 FitAlignCombined.C:108
 FitAlignCombined.C:109
 FitAlignCombined.C:110
 FitAlignCombined.C:111
 FitAlignCombined.C:112
 FitAlignCombined.C:113
 FitAlignCombined.C:114
 FitAlignCombined.C:115
 FitAlignCombined.C:116
 FitAlignCombined.C:117
 FitAlignCombined.C:118
 FitAlignCombined.C:119
 FitAlignCombined.C:120
 FitAlignCombined.C:121
 FitAlignCombined.C:122
 FitAlignCombined.C:123
 FitAlignCombined.C:124
 FitAlignCombined.C:125
 FitAlignCombined.C:126
 FitAlignCombined.C:127
 FitAlignCombined.C:128
 FitAlignCombined.C:129
 FitAlignCombined.C:130
 FitAlignCombined.C:131
 FitAlignCombined.C:132
 FitAlignCombined.C:133
 FitAlignCombined.C:134
 FitAlignCombined.C:135
 FitAlignCombined.C:136
 FitAlignCombined.C:137
 FitAlignCombined.C:138
 FitAlignCombined.C:139
 FitAlignCombined.C:140
 FitAlignCombined.C:141
 FitAlignCombined.C:142
 FitAlignCombined.C:143
 FitAlignCombined.C:144
 FitAlignCombined.C:145
 FitAlignCombined.C:146
 FitAlignCombined.C:147
 FitAlignCombined.C:148
 FitAlignCombined.C:149
 FitAlignCombined.C:150
 FitAlignCombined.C:151
 FitAlignCombined.C:152
 FitAlignCombined.C:153
 FitAlignCombined.C:154
 FitAlignCombined.C:155
 FitAlignCombined.C:156
 FitAlignCombined.C:157
 FitAlignCombined.C:158
 FitAlignCombined.C:159
 FitAlignCombined.C:160
 FitAlignCombined.C:161
 FitAlignCombined.C:162
 FitAlignCombined.C:163
 FitAlignCombined.C:164
 FitAlignCombined.C:165
 FitAlignCombined.C:166
 FitAlignCombined.C:167
 FitAlignCombined.C:168
 FitAlignCombined.C:169
 FitAlignCombined.C:170
 FitAlignCombined.C:171
 FitAlignCombined.C:172
 FitAlignCombined.C:173
 FitAlignCombined.C:174
 FitAlignCombined.C:175
 FitAlignCombined.C:176
 FitAlignCombined.C:177
 FitAlignCombined.C:178
 FitAlignCombined.C:179
 FitAlignCombined.C:180
 FitAlignCombined.C:181
 FitAlignCombined.C:182
 FitAlignCombined.C:183
 FitAlignCombined.C:184
 FitAlignCombined.C:185
 FitAlignCombined.C:186
 FitAlignCombined.C:187
 FitAlignCombined.C:188
 FitAlignCombined.C:189
 FitAlignCombined.C:190
 FitAlignCombined.C:191
 FitAlignCombined.C:192
 FitAlignCombined.C:193
 FitAlignCombined.C:194
 FitAlignCombined.C:195
 FitAlignCombined.C:196
 FitAlignCombined.C:197
 FitAlignCombined.C:198
 FitAlignCombined.C:199
 FitAlignCombined.C:200
 FitAlignCombined.C:201
 FitAlignCombined.C:202
 FitAlignCombined.C:203
 FitAlignCombined.C:204
 FitAlignCombined.C:205
 FitAlignCombined.C:206
 FitAlignCombined.C:207
 FitAlignCombined.C:208
 FitAlignCombined.C:209
 FitAlignCombined.C:210
 FitAlignCombined.C:211
 FitAlignCombined.C:212
 FitAlignCombined.C:213
 FitAlignCombined.C:214
 FitAlignCombined.C:215
 FitAlignCombined.C:216
 FitAlignCombined.C:217
 FitAlignCombined.C:218
 FitAlignCombined.C:219
 FitAlignCombined.C:220
 FitAlignCombined.C:221
 FitAlignCombined.C:222
 FitAlignCombined.C:223
 FitAlignCombined.C:224
 FitAlignCombined.C:225
 FitAlignCombined.C:226
 FitAlignCombined.C:227
 FitAlignCombined.C:228
 FitAlignCombined.C:229
 FitAlignCombined.C:230
 FitAlignCombined.C:231
 FitAlignCombined.C:232
 FitAlignCombined.C:233
 FitAlignCombined.C:234
 FitAlignCombined.C:235
 FitAlignCombined.C:236
 FitAlignCombined.C:237
 FitAlignCombined.C:238
 FitAlignCombined.C:239
 FitAlignCombined.C:240
 FitAlignCombined.C:241
 FitAlignCombined.C:242
 FitAlignCombined.C:243
 FitAlignCombined.C:244
 FitAlignCombined.C:245
 FitAlignCombined.C:246
 FitAlignCombined.C:247
 FitAlignCombined.C:248
 FitAlignCombined.C:249
 FitAlignCombined.C:250
 FitAlignCombined.C:251
 FitAlignCombined.C:252
 FitAlignCombined.C:253
 FitAlignCombined.C:254
 FitAlignCombined.C:255
 FitAlignCombined.C:256
 FitAlignCombined.C:257
 FitAlignCombined.C:258
 FitAlignCombined.C:259
 FitAlignCombined.C:260
 FitAlignCombined.C:261
 FitAlignCombined.C:262
 FitAlignCombined.C:263
 FitAlignCombined.C:264
 FitAlignCombined.C:265
 FitAlignCombined.C:266
 FitAlignCombined.C:267
 FitAlignCombined.C:268
 FitAlignCombined.C:269
 FitAlignCombined.C:270
 FitAlignCombined.C:271
 FitAlignCombined.C:272
 FitAlignCombined.C:273
 FitAlignCombined.C:274
 FitAlignCombined.C:275
 FitAlignCombined.C:276
 FitAlignCombined.C:277
 FitAlignCombined.C:278
 FitAlignCombined.C:279
 FitAlignCombined.C:280
 FitAlignCombined.C:281
 FitAlignCombined.C:282
 FitAlignCombined.C:283
 FitAlignCombined.C:284
 FitAlignCombined.C:285
 FitAlignCombined.C:286
 FitAlignCombined.C:287
 FitAlignCombined.C:288
 FitAlignCombined.C:289
 FitAlignCombined.C:290
 FitAlignCombined.C:291
 FitAlignCombined.C:292
 FitAlignCombined.C:293
 FitAlignCombined.C:294
 FitAlignCombined.C:295
 FitAlignCombined.C:296
 FitAlignCombined.C:297
 FitAlignCombined.C:298
 FitAlignCombined.C:299
 FitAlignCombined.C:300
 FitAlignCombined.C:301
 FitAlignCombined.C:302
 FitAlignCombined.C:303
 FitAlignCombined.C:304
 FitAlignCombined.C:305
 FitAlignCombined.C:306
 FitAlignCombined.C:307
 FitAlignCombined.C:308
 FitAlignCombined.C:309
 FitAlignCombined.C:310
 FitAlignCombined.C:311
 FitAlignCombined.C:312
 FitAlignCombined.C:313
 FitAlignCombined.C:314
 FitAlignCombined.C:315
 FitAlignCombined.C:316
 FitAlignCombined.C:317
 FitAlignCombined.C:318
 FitAlignCombined.C:319
 FitAlignCombined.C:320
 FitAlignCombined.C:321
 FitAlignCombined.C:322
 FitAlignCombined.C:323
 FitAlignCombined.C:324
 FitAlignCombined.C:325
 FitAlignCombined.C:326
 FitAlignCombined.C:327
 FitAlignCombined.C:328
 FitAlignCombined.C:329
 FitAlignCombined.C:330
 FitAlignCombined.C:331
 FitAlignCombined.C:332
 FitAlignCombined.C:333
 FitAlignCombined.C:334
 FitAlignCombined.C:335
 FitAlignCombined.C:336
 FitAlignCombined.C:337
 FitAlignCombined.C:338
 FitAlignCombined.C:339
 FitAlignCombined.C:340
 FitAlignCombined.C:341
 FitAlignCombined.C:342
 FitAlignCombined.C:343
 FitAlignCombined.C:344
 FitAlignCombined.C:345
 FitAlignCombined.C:346
 FitAlignCombined.C:347
 FitAlignCombined.C:348
 FitAlignCombined.C:349
 FitAlignCombined.C:350
 FitAlignCombined.C:351
 FitAlignCombined.C:352
 FitAlignCombined.C:353
 FitAlignCombined.C:354
 FitAlignCombined.C:355
 FitAlignCombined.C:356
 FitAlignCombined.C:357
 FitAlignCombined.C:358
 FitAlignCombined.C:359
 FitAlignCombined.C:360
 FitAlignCombined.C:361
 FitAlignCombined.C:362
 FitAlignCombined.C:363
 FitAlignCombined.C:364
 FitAlignCombined.C:365
 FitAlignCombined.C:366
 FitAlignCombined.C:367
 FitAlignCombined.C:368
 FitAlignCombined.C:369
 FitAlignCombined.C:370
 FitAlignCombined.C:371
 FitAlignCombined.C:372
 FitAlignCombined.C:373
 FitAlignCombined.C:374
 FitAlignCombined.C:375
 FitAlignCombined.C:376
 FitAlignCombined.C:377
 FitAlignCombined.C:378
 FitAlignCombined.C:379
 FitAlignCombined.C:380
 FitAlignCombined.C:381
 FitAlignCombined.C:382
 FitAlignCombined.C:383
 FitAlignCombined.C:384
 FitAlignCombined.C:385
 FitAlignCombined.C:386
 FitAlignCombined.C:387
 FitAlignCombined.C:388
 FitAlignCombined.C:389
 FitAlignCombined.C:390
 FitAlignCombined.C:391
 FitAlignCombined.C:392
 FitAlignCombined.C:393
 FitAlignCombined.C:394
 FitAlignCombined.C:395
 FitAlignCombined.C:396
 FitAlignCombined.C:397
 FitAlignCombined.C:398
 FitAlignCombined.C:399
 FitAlignCombined.C:400
 FitAlignCombined.C:401
 FitAlignCombined.C:402
 FitAlignCombined.C:403
 FitAlignCombined.C:404
 FitAlignCombined.C:405
 FitAlignCombined.C:406
 FitAlignCombined.C:407
 FitAlignCombined.C:408
 FitAlignCombined.C:409
 FitAlignCombined.C:410
 FitAlignCombined.C:411
 FitAlignCombined.C:412
 FitAlignCombined.C:413
 FitAlignCombined.C:414
 FitAlignCombined.C:415
 FitAlignCombined.C:416
 FitAlignCombined.C:417
 FitAlignCombined.C:418
 FitAlignCombined.C:419
 FitAlignCombined.C:420
 FitAlignCombined.C:421
 FitAlignCombined.C:422
 FitAlignCombined.C:423
 FitAlignCombined.C:424
 FitAlignCombined.C:425
 FitAlignCombined.C:426
 FitAlignCombined.C:427
 FitAlignCombined.C:428
 FitAlignCombined.C:429
 FitAlignCombined.C:430
 FitAlignCombined.C:431
 FitAlignCombined.C:432
 FitAlignCombined.C:433
 FitAlignCombined.C:434
 FitAlignCombined.C:435
 FitAlignCombined.C:436
 FitAlignCombined.C:437
 FitAlignCombined.C:438
 FitAlignCombined.C:439
 FitAlignCombined.C:440
 FitAlignCombined.C:441
 FitAlignCombined.C:442
 FitAlignCombined.C:443
 FitAlignCombined.C:444
 FitAlignCombined.C:445
 FitAlignCombined.C:446
 FitAlignCombined.C:447
 FitAlignCombined.C:448
 FitAlignCombined.C:449
 FitAlignCombined.C:450
 FitAlignCombined.C:451
 FitAlignCombined.C:452
 FitAlignCombined.C:453
 FitAlignCombined.C:454
 FitAlignCombined.C:455
 FitAlignCombined.C:456
 FitAlignCombined.C:457
 FitAlignCombined.C:458
 FitAlignCombined.C:459
 FitAlignCombined.C:460
 FitAlignCombined.C:461
 FitAlignCombined.C:462
 FitAlignCombined.C:463
 FitAlignCombined.C:464
 FitAlignCombined.C:465
 FitAlignCombined.C:466
 FitAlignCombined.C:467
 FitAlignCombined.C:468
 FitAlignCombined.C:469
 FitAlignCombined.C:470
 FitAlignCombined.C:471
 FitAlignCombined.C:472
 FitAlignCombined.C:473
 FitAlignCombined.C:474
 FitAlignCombined.C:475
 FitAlignCombined.C:476
 FitAlignCombined.C:477
 FitAlignCombined.C:478
 FitAlignCombined.C:479
 FitAlignCombined.C:480
 FitAlignCombined.C:481
 FitAlignCombined.C:482
 FitAlignCombined.C:483
 FitAlignCombined.C:484
 FitAlignCombined.C:485
 FitAlignCombined.C:486
 FitAlignCombined.C:487
 FitAlignCombined.C:488
 FitAlignCombined.C:489
 FitAlignCombined.C:490
 FitAlignCombined.C:491
 FitAlignCombined.C:492
 FitAlignCombined.C:493
 FitAlignCombined.C:494
 FitAlignCombined.C:495
 FitAlignCombined.C:496
 FitAlignCombined.C:497
 FitAlignCombined.C:498
 FitAlignCombined.C:499
 FitAlignCombined.C:500
 FitAlignCombined.C:501
 FitAlignCombined.C:502
 FitAlignCombined.C:503
 FitAlignCombined.C:504
 FitAlignCombined.C:505
 FitAlignCombined.C:506
 FitAlignCombined.C:507
 FitAlignCombined.C:508
 FitAlignCombined.C:509
 FitAlignCombined.C:510
 FitAlignCombined.C:511
 FitAlignCombined.C:512
 FitAlignCombined.C:513
 FitAlignCombined.C:514
 FitAlignCombined.C:515
 FitAlignCombined.C:516
 FitAlignCombined.C:517
 FitAlignCombined.C:518
 FitAlignCombined.C:519
 FitAlignCombined.C:520
 FitAlignCombined.C:521
 FitAlignCombined.C:522
 FitAlignCombined.C:523
 FitAlignCombined.C:524
 FitAlignCombined.C:525
 FitAlignCombined.C:526
 FitAlignCombined.C:527
 FitAlignCombined.C:528
 FitAlignCombined.C:529
 FitAlignCombined.C:530
 FitAlignCombined.C:531
 FitAlignCombined.C:532
 FitAlignCombined.C:533
 FitAlignCombined.C:534
 FitAlignCombined.C:535
 FitAlignCombined.C:536
 FitAlignCombined.C:537
 FitAlignCombined.C:538
 FitAlignCombined.C:539
 FitAlignCombined.C:540
 FitAlignCombined.C:541
 FitAlignCombined.C:542
 FitAlignCombined.C:543
 FitAlignCombined.C:544
 FitAlignCombined.C:545
 FitAlignCombined.C:546
 FitAlignCombined.C:547
 FitAlignCombined.C:548
 FitAlignCombined.C:549
 FitAlignCombined.C:550
 FitAlignCombined.C:551
 FitAlignCombined.C:552
 FitAlignCombined.C:553
 FitAlignCombined.C:554
 FitAlignCombined.C:555
 FitAlignCombined.C:556
 FitAlignCombined.C:557
 FitAlignCombined.C:558
 FitAlignCombined.C:559
 FitAlignCombined.C:560
 FitAlignCombined.C:561
 FitAlignCombined.C:562
 FitAlignCombined.C:563
 FitAlignCombined.C:564
 FitAlignCombined.C:565
 FitAlignCombined.C:566
 FitAlignCombined.C:567
 FitAlignCombined.C:568
 FitAlignCombined.C:569
 FitAlignCombined.C:570
 FitAlignCombined.C:571
 FitAlignCombined.C:572
 FitAlignCombined.C:573
 FitAlignCombined.C:574
 FitAlignCombined.C:575
 FitAlignCombined.C:576
 FitAlignCombined.C:577
 FitAlignCombined.C:578
 FitAlignCombined.C:579
 FitAlignCombined.C:580
 FitAlignCombined.C:581
 FitAlignCombined.C:582
 FitAlignCombined.C:583
 FitAlignCombined.C:584
 FitAlignCombined.C:585
 FitAlignCombined.C:586
 FitAlignCombined.C:587
 FitAlignCombined.C:588
 FitAlignCombined.C:589
 FitAlignCombined.C:590
 FitAlignCombined.C:591
 FitAlignCombined.C:592
 FitAlignCombined.C:593
 FitAlignCombined.C:594
 FitAlignCombined.C:595
 FitAlignCombined.C:596
 FitAlignCombined.C:597
 FitAlignCombined.C:598
 FitAlignCombined.C:599
 FitAlignCombined.C:600
 FitAlignCombined.C:601
 FitAlignCombined.C:602
 FitAlignCombined.C:603
 FitAlignCombined.C:604
 FitAlignCombined.C:605
 FitAlignCombined.C:606
 FitAlignCombined.C:607
 FitAlignCombined.C:608
 FitAlignCombined.C:609
 FitAlignCombined.C:610
 FitAlignCombined.C:611
 FitAlignCombined.C:612
 FitAlignCombined.C:613
 FitAlignCombined.C:614
 FitAlignCombined.C:615
 FitAlignCombined.C:616
 FitAlignCombined.C:617
 FitAlignCombined.C:618
 FitAlignCombined.C:619
 FitAlignCombined.C:620
 FitAlignCombined.C:621
 FitAlignCombined.C:622
 FitAlignCombined.C:623
 FitAlignCombined.C:624
 FitAlignCombined.C:625
 FitAlignCombined.C:626
 FitAlignCombined.C:627
 FitAlignCombined.C:628
 FitAlignCombined.C:629
 FitAlignCombined.C:630
 FitAlignCombined.C:631
 FitAlignCombined.C:632
 FitAlignCombined.C:633
 FitAlignCombined.C:634
 FitAlignCombined.C:635
 FitAlignCombined.C:636
 FitAlignCombined.C:637
 FitAlignCombined.C:638
 FitAlignCombined.C:639
 FitAlignCombined.C:640
 FitAlignCombined.C:641
 FitAlignCombined.C:642
 FitAlignCombined.C:643
 FitAlignCombined.C:644
 FitAlignCombined.C:645
 FitAlignCombined.C:646
 FitAlignCombined.C:647
 FitAlignCombined.C:648
 FitAlignCombined.C:649
 FitAlignCombined.C:650
 FitAlignCombined.C:651
 FitAlignCombined.C:652
 FitAlignCombined.C:653
 FitAlignCombined.C:654
 FitAlignCombined.C:655
 FitAlignCombined.C:656
 FitAlignCombined.C:657
 FitAlignCombined.C:658
 FitAlignCombined.C:659
 FitAlignCombined.C:660
 FitAlignCombined.C:661
 FitAlignCombined.C:662
 FitAlignCombined.C:663
 FitAlignCombined.C:664
 FitAlignCombined.C:665
 FitAlignCombined.C:666
 FitAlignCombined.C:667
 FitAlignCombined.C:668
 FitAlignCombined.C:669
 FitAlignCombined.C:670
 FitAlignCombined.C:671
 FitAlignCombined.C:672
 FitAlignCombined.C:673
 FitAlignCombined.C:674
 FitAlignCombined.C:675
 FitAlignCombined.C:676
 FitAlignCombined.C:677
 FitAlignCombined.C:678
 FitAlignCombined.C:679
 FitAlignCombined.C:680
 FitAlignCombined.C:681
 FitAlignCombined.C:682
 FitAlignCombined.C:683
 FitAlignCombined.C:684
 FitAlignCombined.C:685
 FitAlignCombined.C:686
 FitAlignCombined.C:687
 FitAlignCombined.C:688
 FitAlignCombined.C:689
 FitAlignCombined.C:690
 FitAlignCombined.C:691
 FitAlignCombined.C:692
 FitAlignCombined.C:693
 FitAlignCombined.C:694
 FitAlignCombined.C:695
 FitAlignCombined.C:696
 FitAlignCombined.C:697
 FitAlignCombined.C:698
 FitAlignCombined.C:699
 FitAlignCombined.C:700
 FitAlignCombined.C:701
 FitAlignCombined.C:702
 FitAlignCombined.C:703
 FitAlignCombined.C:704
 FitAlignCombined.C:705
 FitAlignCombined.C:706
 FitAlignCombined.C:707
 FitAlignCombined.C:708
 FitAlignCombined.C:709
 FitAlignCombined.C:710
 FitAlignCombined.C:711
 FitAlignCombined.C:712
 FitAlignCombined.C:713
 FitAlignCombined.C:714
 FitAlignCombined.C:715
 FitAlignCombined.C:716
 FitAlignCombined.C:717
 FitAlignCombined.C:718
 FitAlignCombined.C:719
 FitAlignCombined.C:720
 FitAlignCombined.C:721
 FitAlignCombined.C:722
 FitAlignCombined.C:723
 FitAlignCombined.C:724
 FitAlignCombined.C:725
 FitAlignCombined.C:726
 FitAlignCombined.C:727
 FitAlignCombined.C:728
 FitAlignCombined.C:729
 FitAlignCombined.C:730
 FitAlignCombined.C:731
 FitAlignCombined.C:732
 FitAlignCombined.C:733
 FitAlignCombined.C:734
 FitAlignCombined.C:735
 FitAlignCombined.C:736
 FitAlignCombined.C:737
 FitAlignCombined.C:738
 FitAlignCombined.C:739
 FitAlignCombined.C:740
 FitAlignCombined.C:741
 FitAlignCombined.C:742
 FitAlignCombined.C:743
 FitAlignCombined.C:744
 FitAlignCombined.C:745
 FitAlignCombined.C:746
 FitAlignCombined.C:747
 FitAlignCombined.C:748
 FitAlignCombined.C:749
 FitAlignCombined.C:750
 FitAlignCombined.C:751
 FitAlignCombined.C:752
 FitAlignCombined.C:753
 FitAlignCombined.C:754
 FitAlignCombined.C:755
 FitAlignCombined.C:756
 FitAlignCombined.C:757
 FitAlignCombined.C:758
 FitAlignCombined.C:759
 FitAlignCombined.C:760
 FitAlignCombined.C:761
 FitAlignCombined.C:762
 FitAlignCombined.C:763
 FitAlignCombined.C:764
 FitAlignCombined.C:765
 FitAlignCombined.C:766
 FitAlignCombined.C:767
 FitAlignCombined.C:768
 FitAlignCombined.C:769
 FitAlignCombined.C:770
 FitAlignCombined.C:771
 FitAlignCombined.C:772
 FitAlignCombined.C:773
 FitAlignCombined.C:774
 FitAlignCombined.C:775
 FitAlignCombined.C:776
 FitAlignCombined.C:777
 FitAlignCombined.C:778
 FitAlignCombined.C:779
 FitAlignCombined.C:780
 FitAlignCombined.C:781
 FitAlignCombined.C:782
 FitAlignCombined.C:783
 FitAlignCombined.C:784
 FitAlignCombined.C:785
 FitAlignCombined.C:786
 FitAlignCombined.C:787
 FitAlignCombined.C:788
 FitAlignCombined.C:789
 FitAlignCombined.C:790
 FitAlignCombined.C:791
 FitAlignCombined.C:792
 FitAlignCombined.C:793
 FitAlignCombined.C:794
 FitAlignCombined.C:795
 FitAlignCombined.C:796
 FitAlignCombined.C:797
 FitAlignCombined.C:798
 FitAlignCombined.C:799
 FitAlignCombined.C:800
 FitAlignCombined.C:801
 FitAlignCombined.C:802
 FitAlignCombined.C:803
 FitAlignCombined.C:804
 FitAlignCombined.C:805
 FitAlignCombined.C:806
 FitAlignCombined.C:807
 FitAlignCombined.C:808
 FitAlignCombined.C:809
 FitAlignCombined.C:810
 FitAlignCombined.C:811
 FitAlignCombined.C:812
 FitAlignCombined.C:813
 FitAlignCombined.C:814
 FitAlignCombined.C:815
 FitAlignCombined.C:816
 FitAlignCombined.C:817
 FitAlignCombined.C:818
 FitAlignCombined.C:819
 FitAlignCombined.C:820
 FitAlignCombined.C:821
 FitAlignCombined.C:822
 FitAlignCombined.C:823
 FitAlignCombined.C:824
 FitAlignCombined.C:825
 FitAlignCombined.C:826
 FitAlignCombined.C:827
 FitAlignCombined.C:828
 FitAlignCombined.C:829
 FitAlignCombined.C:830
 FitAlignCombined.C:831
 FitAlignCombined.C:832
 FitAlignCombined.C:833
 FitAlignCombined.C:834
 FitAlignCombined.C:835
 FitAlignCombined.C:836
 FitAlignCombined.C:837
 FitAlignCombined.C:838
 FitAlignCombined.C:839
 FitAlignCombined.C:840
 FitAlignCombined.C:841
 FitAlignCombined.C:842
 FitAlignCombined.C:843
 FitAlignCombined.C:844
 FitAlignCombined.C:845
 FitAlignCombined.C:846
 FitAlignCombined.C:847
 FitAlignCombined.C:848
 FitAlignCombined.C:849
 FitAlignCombined.C:850
 FitAlignCombined.C:851
 FitAlignCombined.C:852
 FitAlignCombined.C:853
 FitAlignCombined.C:854
 FitAlignCombined.C:855
 FitAlignCombined.C:856
 FitAlignCombined.C:857
 FitAlignCombined.C:858
 FitAlignCombined.C:859
 FitAlignCombined.C:860
 FitAlignCombined.C:861
 FitAlignCombined.C:862
 FitAlignCombined.C:863
 FitAlignCombined.C:864
 FitAlignCombined.C:865
 FitAlignCombined.C:866
 FitAlignCombined.C:867
 FitAlignCombined.C:868
 FitAlignCombined.C:869
 FitAlignCombined.C:870
 FitAlignCombined.C:871
 FitAlignCombined.C:872
 FitAlignCombined.C:873
 FitAlignCombined.C:874
 FitAlignCombined.C:875
 FitAlignCombined.C:876
 FitAlignCombined.C:877
 FitAlignCombined.C:878
 FitAlignCombined.C:879
 FitAlignCombined.C:880
 FitAlignCombined.C:881
 FitAlignCombined.C:882
 FitAlignCombined.C:883
 FitAlignCombined.C:884
 FitAlignCombined.C:885
 FitAlignCombined.C:886
 FitAlignCombined.C:887
 FitAlignCombined.C:888
 FitAlignCombined.C:889
 FitAlignCombined.C:890
 FitAlignCombined.C:891
 FitAlignCombined.C:892
 FitAlignCombined.C:893
 FitAlignCombined.C:894
 FitAlignCombined.C:895
 FitAlignCombined.C:896
 FitAlignCombined.C:897
 FitAlignCombined.C:898
 FitAlignCombined.C:899
 FitAlignCombined.C:900
 FitAlignCombined.C:901
 FitAlignCombined.C:902
 FitAlignCombined.C:903
 FitAlignCombined.C:904
 FitAlignCombined.C:905
 FitAlignCombined.C:906
 FitAlignCombined.C:907
 FitAlignCombined.C:908
 FitAlignCombined.C:909
 FitAlignCombined.C:910
 FitAlignCombined.C:911
 FitAlignCombined.C:912
 FitAlignCombined.C:913
 FitAlignCombined.C:914
 FitAlignCombined.C:915
 FitAlignCombined.C:916
 FitAlignCombined.C:917
 FitAlignCombined.C:918
 FitAlignCombined.C:919
 FitAlignCombined.C:920
 FitAlignCombined.C:921
 FitAlignCombined.C:922
 FitAlignCombined.C:923
 FitAlignCombined.C:924
 FitAlignCombined.C:925
 FitAlignCombined.C:926
 FitAlignCombined.C:927
 FitAlignCombined.C:928
 FitAlignCombined.C:929
 FitAlignCombined.C:930
 FitAlignCombined.C:931
 FitAlignCombined.C:932
 FitAlignCombined.C:933
 FitAlignCombined.C:934
 FitAlignCombined.C:935
 FitAlignCombined.C:936
 FitAlignCombined.C:937
 FitAlignCombined.C:938
 FitAlignCombined.C:939
 FitAlignCombined.C:940
 FitAlignCombined.C:941
 FitAlignCombined.C:942
 FitAlignCombined.C:943
 FitAlignCombined.C:944
 FitAlignCombined.C:945
 FitAlignCombined.C:946
 FitAlignCombined.C:947
 FitAlignCombined.C:948
 FitAlignCombined.C:949
 FitAlignCombined.C:950
 FitAlignCombined.C:951
 FitAlignCombined.C:952
 FitAlignCombined.C:953
 FitAlignCombined.C:954
 FitAlignCombined.C:955
 FitAlignCombined.C:956
 FitAlignCombined.C:957
 FitAlignCombined.C:958
 FitAlignCombined.C:959
 FitAlignCombined.C:960
 FitAlignCombined.C:961
 FitAlignCombined.C:962
 FitAlignCombined.C:963
 FitAlignCombined.C:964
 FitAlignCombined.C:965
 FitAlignCombined.C:966
 FitAlignCombined.C:967
 FitAlignCombined.C:968
 FitAlignCombined.C:969
 FitAlignCombined.C:970
 FitAlignCombined.C:971
 FitAlignCombined.C:972
 FitAlignCombined.C:973
 FitAlignCombined.C:974
 FitAlignCombined.C:975
 FitAlignCombined.C:976
 FitAlignCombined.C:977
 FitAlignCombined.C:978
 FitAlignCombined.C:979
 FitAlignCombined.C:980
 FitAlignCombined.C:981
 FitAlignCombined.C:982
 FitAlignCombined.C:983
 FitAlignCombined.C:984
 FitAlignCombined.C:985
 FitAlignCombined.C:986
 FitAlignCombined.C:987
 FitAlignCombined.C:988
 FitAlignCombined.C:989
 FitAlignCombined.C:990
 FitAlignCombined.C:991
 FitAlignCombined.C:992
 FitAlignCombined.C:993
 FitAlignCombined.C:994
 FitAlignCombined.C:995
 FitAlignCombined.C:996
 FitAlignCombined.C:997
 FitAlignCombined.C:998
 FitAlignCombined.C:999
 FitAlignCombined.C:1000
 FitAlignCombined.C:1001
 FitAlignCombined.C:1002
 FitAlignCombined.C:1003
 FitAlignCombined.C:1004
 FitAlignCombined.C:1005
 FitAlignCombined.C:1006
 FitAlignCombined.C:1007
 FitAlignCombined.C:1008
 FitAlignCombined.C:1009
 FitAlignCombined.C:1010
 FitAlignCombined.C:1011
 FitAlignCombined.C:1012
 FitAlignCombined.C:1013
 FitAlignCombined.C:1014
 FitAlignCombined.C:1015
 FitAlignCombined.C:1016
 FitAlignCombined.C:1017
 FitAlignCombined.C:1018
 FitAlignCombined.C:1019
 FitAlignCombined.C:1020
 FitAlignCombined.C:1021
 FitAlignCombined.C:1022
 FitAlignCombined.C:1023
 FitAlignCombined.C:1024
 FitAlignCombined.C:1025
 FitAlignCombined.C:1026
 FitAlignCombined.C:1027
 FitAlignCombined.C:1028
 FitAlignCombined.C:1029
 FitAlignCombined.C:1030
 FitAlignCombined.C:1031
 FitAlignCombined.C:1032
 FitAlignCombined.C:1033
 FitAlignCombined.C:1034
 FitAlignCombined.C:1035
 FitAlignCombined.C:1036
 FitAlignCombined.C:1037
 FitAlignCombined.C:1038
 FitAlignCombined.C:1039
 FitAlignCombined.C:1040
 FitAlignCombined.C:1041
 FitAlignCombined.C:1042
 FitAlignCombined.C:1043
 FitAlignCombined.C:1044
 FitAlignCombined.C:1045
 FitAlignCombined.C:1046
 FitAlignCombined.C:1047
 FitAlignCombined.C:1048
 FitAlignCombined.C:1049
 FitAlignCombined.C:1050
 FitAlignCombined.C:1051
 FitAlignCombined.C:1052
 FitAlignCombined.C:1053
 FitAlignCombined.C:1054
 FitAlignCombined.C:1055
 FitAlignCombined.C:1056
 FitAlignCombined.C:1057
 FitAlignCombined.C:1058
 FitAlignCombined.C:1059
 FitAlignCombined.C:1060
 FitAlignCombined.C:1061
 FitAlignCombined.C:1062
 FitAlignCombined.C:1063
 FitAlignCombined.C:1064
 FitAlignCombined.C:1065
 FitAlignCombined.C:1066
 FitAlignCombined.C:1067
 FitAlignCombined.C:1068
 FitAlignCombined.C:1069
 FitAlignCombined.C:1070
 FitAlignCombined.C:1071
 FitAlignCombined.C:1072
 FitAlignCombined.C:1073
 FitAlignCombined.C:1074
 FitAlignCombined.C:1075
 FitAlignCombined.C:1076
 FitAlignCombined.C:1077
 FitAlignCombined.C:1078
 FitAlignCombined.C:1079
 FitAlignCombined.C:1080
 FitAlignCombined.C:1081
 FitAlignCombined.C:1082
 FitAlignCombined.C:1083
 FitAlignCombined.C:1084
 FitAlignCombined.C:1085
 FitAlignCombined.C:1086
 FitAlignCombined.C:1087
 FitAlignCombined.C:1088
 FitAlignCombined.C:1089
 FitAlignCombined.C:1090
 FitAlignCombined.C:1091
 FitAlignCombined.C:1092
 FitAlignCombined.C:1093
 FitAlignCombined.C:1094
 FitAlignCombined.C:1095
 FitAlignCombined.C:1096
 FitAlignCombined.C:1097
 FitAlignCombined.C:1098
 FitAlignCombined.C:1099
 FitAlignCombined.C:1100
 FitAlignCombined.C:1101
 FitAlignCombined.C:1102
 FitAlignCombined.C:1103
 FitAlignCombined.C:1104
 FitAlignCombined.C:1105
 FitAlignCombined.C:1106
 FitAlignCombined.C:1107
 FitAlignCombined.C:1108
 FitAlignCombined.C:1109
 FitAlignCombined.C:1110
 FitAlignCombined.C:1111
 FitAlignCombined.C:1112
 FitAlignCombined.C:1113
 FitAlignCombined.C:1114
 FitAlignCombined.C:1115
 FitAlignCombined.C:1116
 FitAlignCombined.C:1117
 FitAlignCombined.C:1118
 FitAlignCombined.C:1119
 FitAlignCombined.C:1120
 FitAlignCombined.C:1121
 FitAlignCombined.C:1122
 FitAlignCombined.C:1123
 FitAlignCombined.C:1124
 FitAlignCombined.C:1125
 FitAlignCombined.C:1126
 FitAlignCombined.C:1127
 FitAlignCombined.C:1128
 FitAlignCombined.C:1129
 FitAlignCombined.C:1130
 FitAlignCombined.C:1131
 FitAlignCombined.C:1132
 FitAlignCombined.C:1133
 FitAlignCombined.C:1134
 FitAlignCombined.C:1135
 FitAlignCombined.C:1136
 FitAlignCombined.C:1137
 FitAlignCombined.C:1138
 FitAlignCombined.C:1139
 FitAlignCombined.C:1140
 FitAlignCombined.C:1141
 FitAlignCombined.C:1142
 FitAlignCombined.C:1143
 FitAlignCombined.C:1144
 FitAlignCombined.C:1145
 FitAlignCombined.C:1146
 FitAlignCombined.C:1147
 FitAlignCombined.C:1148
 FitAlignCombined.C:1149
 FitAlignCombined.C:1150
 FitAlignCombined.C:1151
 FitAlignCombined.C:1152
 FitAlignCombined.C:1153
 FitAlignCombined.C:1154
 FitAlignCombined.C:1155
 FitAlignCombined.C:1156
 FitAlignCombined.C:1157
 FitAlignCombined.C:1158
 FitAlignCombined.C:1159
 FitAlignCombined.C:1160
 FitAlignCombined.C:1161
 FitAlignCombined.C:1162
 FitAlignCombined.C:1163
 FitAlignCombined.C:1164
 FitAlignCombined.C:1165
 FitAlignCombined.C:1166
 FitAlignCombined.C:1167
 FitAlignCombined.C:1168
 FitAlignCombined.C:1169
 FitAlignCombined.C:1170
 FitAlignCombined.C:1171
 FitAlignCombined.C:1172
 FitAlignCombined.C:1173
 FitAlignCombined.C:1174
 FitAlignCombined.C:1175
 FitAlignCombined.C:1176
 FitAlignCombined.C:1177
 FitAlignCombined.C:1178
 FitAlignCombined.C:1179
 FitAlignCombined.C:1180
 FitAlignCombined.C:1181
 FitAlignCombined.C:1182
 FitAlignCombined.C:1183
 FitAlignCombined.C:1184
 FitAlignCombined.C:1185
 FitAlignCombined.C:1186
 FitAlignCombined.C:1187
 FitAlignCombined.C:1188
 FitAlignCombined.C:1189
 FitAlignCombined.C:1190
 FitAlignCombined.C:1191
 FitAlignCombined.C:1192
 FitAlignCombined.C:1193
 FitAlignCombined.C:1194
 FitAlignCombined.C:1195
 FitAlignCombined.C:1196
 FitAlignCombined.C:1197
 FitAlignCombined.C:1198
 FitAlignCombined.C:1199
 FitAlignCombined.C:1200
 FitAlignCombined.C:1201
 FitAlignCombined.C:1202
 FitAlignCombined.C:1203
 FitAlignCombined.C:1204
 FitAlignCombined.C:1205
 FitAlignCombined.C:1206
 FitAlignCombined.C:1207
 FitAlignCombined.C:1208
 FitAlignCombined.C:1209
 FitAlignCombined.C:1210
 FitAlignCombined.C:1211
 FitAlignCombined.C:1212
 FitAlignCombined.C:1213
 FitAlignCombined.C:1214
 FitAlignCombined.C:1215
 FitAlignCombined.C:1216
 FitAlignCombined.C:1217
 FitAlignCombined.C:1218
 FitAlignCombined.C:1219
 FitAlignCombined.C:1220
 FitAlignCombined.C:1221
 FitAlignCombined.C:1222
 FitAlignCombined.C:1223
 FitAlignCombined.C:1224
 FitAlignCombined.C:1225
 FitAlignCombined.C:1226
 FitAlignCombined.C:1227
 FitAlignCombined.C:1228
 FitAlignCombined.C:1229
 FitAlignCombined.C:1230
 FitAlignCombined.C:1231
 FitAlignCombined.C:1232
 FitAlignCombined.C:1233