ROOT logo
/*
  Int_t year=2012;
  Int_t period=5; // 0=a, 1=b, 2=c
  .x $HOME/rootlogon.C   
  .L ~/alice/reconstruction/trunk/QAplots/source/highPt/AnalyzedEdx.C+ 
  //SelectV0sforPID();
  MakeSelectedArrays(4,4000);
  FitSelected(10000,100000,year,period);

 */

/*
  To implement:
  1. Selection of runs:
     a.)  Redo run wise gain calibration. Important for the bad periods 
     b.)  Remove runs with outlier peak position.  
     c.)  Make sector vise calibration. (To eliminate trigger bias)

   

*/

#include "TFile.h"
#include "TTree.h"
#include "TVectorD.h"
#include "TMatrixD.h"
#include "TH2.h"
#include "TF1.h"
#include "TTreeStream.h"
#include "AliMathBase.h"
#include "TSystem.h"
#include "TChain.h"
#include "TDatabasePDG.h"
#include "TRandom.h"
#include "AliTPCcalibBase.h"
//
#include "AliESDv0.h"
#include "AliESDtrack.h"
#include "TMath.h"
#include "AliXRDPROOFtoolkit.h"


TTree * tree  = 0;
Int_t run=0;
Int_t period=0;
TTreeSRedirector *pcstream = 0; //new TTreeSRedirector("trend.root");
TObjArray * arrayPions=0;
TObjArray * arrayProtons=0;
TObjArray * arrayElectrons=0;
TMatrixD *ppullPionsV0=0;
TMatrixD *ppullProtonsV0=0;
TMatrixD *ppullElectronsV0=0;



//void SetPionAliases();
//void FitSlopeROC();
//void AnalyzedEdxFile(const char * fname="");



void SelectV0sforPID( const char * finput="highptAll.list"){
  //
  // Code to select identified V0 for the PID 
  // As an input chain of filter trees is used
  // Parameter:
  //   finput - name of the list file
  // Oputput:
  //   file - V0Selected.root
  TChain * chain  = AliXRDPROOFtoolkit::MakeChainRandom(finput,"V0s",0,1000);
  chain->SetCacheSize(1000000000);
  //
  TDatabasePDG pdg;
  Double_t massLambda = pdg.GetParticle("Lambda0")->Mass();
  Double_t massK0 = pdg.GetParticle("K0")->Mass();
  Double_t massPion = pdg.GetParticle("pi+")->Mass();
  Double_t massProton = pdg.GetParticle("proton")->Mass();
  //
  //
  chain->SetAlias("massPion",Form("(%f+0)",massPion));
  chain->SetAlias("massProton",Form("(%f+0)",massProton));
  chain->SetAlias("massK0",Form("(%f+0)",massK0));
  chain->SetAlias("massLambda",Form("(%f+0)",massLambda));
  // delta of mass
  chain->SetAlias("K0Delta","(v0.GetEffMass(2,2)-massK0)");
  chain->SetAlias("LDelta","(v0.GetEffMass(4,2)-massLambda)");
  chain->SetAlias("ALDelta","(v0.GetEffMass(2,4)-massLambda)");
  chain->SetAlias("EDelta","(v0.GetEffMass(0,0))");
  // pull of the mass
  chain->SetAlias("K0Pull","(v0.GetEffMass(2,2)-massK0)/v0.GetKFInfo(2,2,1)");
  chain->SetAlias("LPull","(v0.GetEffMass(4,2)-massLambda)/v0.GetKFInfo(4,2,1)");
  chain->SetAlias("ALPull","(v0.GetEffMass(2,4)-massLambda)/v0.GetKFInfo(2,4,1)");
  chain->SetAlias("EPull","EDelta/v0.GetKFInfo(0,0,1)");
  // effective pull of the mass - (empirical values form fits)
  chain->SetAlias("K0PullEff","K0Delta/sqrt((3.63321e-03)**2+(5.68795e-04*v0.Pt())**2)");
  chain->SetAlias("LPullEff","LDelta/sqrt((1.5e-03)**2+(1.8e-04*v0.Pt())**2)");
  chain->SetAlias("ALPullEff","ALDelta/sqrt((1.5e-03)**2+(1.8e-04*v0.Pt())**2)");
  chain->SetAlias("EPullEff","v0.GetEffMass(0,0)/sqrt((5e-03)**2+(1.e-04*v0.Pt())**2)");
  //
  //
  chain->SetAlias("dEdx0DProton","AliMathBase::BetheBlochAleph(track0.fIp.P()/massProton)");
  chain->SetAlias("dEdx1DProton","AliMathBase::BetheBlochAleph(track1.fIp.P()/massProton)");
  chain->SetAlias("dEdx0DPion","AliMathBase::BetheBlochAleph(track0.fIp.P()/massPion)");
  chain->SetAlias("dEdx1DPion","AliMathBase::BetheBlochAleph(track1.fIp.P()/massPion)");
  //
  // V0 - cuts -PID, 
  //	
  chain->SetAlias("cutDist","sqrt((track0.fIp.fP[0]-track1.fIp.fP[0])**2+(track0.fIp.fP[1]-track1.fIp.fP[1])**2)>3");
  chain->SetAlias("cutLong","track0.GetTPCClusterInfo(3,1,0)-5*abs(track0.fP[4])>130&&track1.GetTPCClusterInfo(3,1,0)>130-5*abs(track0.fP[4])");
  chain->SetAlias("cutPID","track0.fTPCsignal>0&&track1.fTPCsignal>0");
  chain->SetAlias("cutResol","sqrt(track0.fC[14]/track0.fP[4])<0.15&&sqrt(track1.fC[14]/track1.fP[4])<0.15");
  chain->SetAlias("cutV0","cutPID&&cutDist&&cutLong&&cutResol");	
  //
  //  
  chain->SetAlias("K0Selected",      "abs(K0Pull)<3. &&abs(K0PullEff)<3.  && abs(LPull)>3  && abs(ALPull)>3  &&v0.PtArmV0()>0.11"); 
  chain->SetAlias("LambdaSelected",  "abs(LPull)<3.  &&abs(LPullEff)<3.   && abs(K0Pull)>3 && abs(EPull)>3 && abs(EDelta)>0.05");  
  chain->SetAlias("ALambdaSelected", "abs(ALPull)<3. &&abs(ALPullEff)<3   && abs(K0Pull)>3 && abs(EPull)>3 &&abs(EDelta)>0.05");
  //
  chain->SetAlias("GammaSelected", "abs(EPull)<3     && abs(K0Pull)>3 && abs(LPull)>3 && abs(ALPull)>3");
  //
  // Gamma PID selection
  //
  

  //
  //
  TFile *fselected = TFile::Open("V0Selected.root","recreate");
  TTree * treeK0     =   chain->CopyTree("type==8&&cutV0&&K0Selected");
  TTree * treeLambda =   chain->CopyTree("type==4&&cutV0&&LambdaSelected");
  TTree * treeALambda =   chain->CopyTree("type==2&&cutV0&&ALambdaSelected");
  TTree * treeGamma =   chain->CopyTree("type==1&&cutV0&&GammaSelected");
  //
  TTree * trees[4]={treeK0,treeLambda, treeGamma,treeALambda};
  TList * aliases = chain->GetListOfAliases();
  Int_t nalias= aliases->GetEntries();

  for (Int_t i=0; i<4; i++){
    for (Int_t ialias=0; ialias<nalias; ialias++){
      TNamed *alias = (TNamed*)aliases->At(ialias);
      trees[i]->SetAlias(alias->GetName(),alias->GetTitle());
    }
  }  
  treeK0->Write("treeK0");
  treeLambda->Write("treeLambda");
  treeALambda->Write("treeALambda");
  treeGamma->Write("treeGamma");
  fselected->Close();
  //
}



Double_t GetPullMass(AliESDv0 * v0, Int_t p0, Int_t p1, Int_t pdgCode){
  //
  // reeturn mass pull
  //  Test values: p0=2; p1=2; pdgCode=321
  //
  TDatabasePDG *pdg= TDatabasePDG::Instance();
  Double_t pdgMass = pdg->GetParticle(pdgCode)->Mass();
  Double_t recMass = v0->GetKFInfo(p0,p1, 0);
  Double_t rmsMass = v0->GetKFInfo(p0,p1, 1);
  if (rmsMass<=0) return -1;
  return   (recMass-pdgMass)/rmsMass;
}



void MakeSelectedArrays(Int_t scaling=20,  const Int_t maxEntries=10000){
  //
  //  Select pions, proton and electron based on the V0 information
  //  Selected tracks are written to the array in parallel with the V0 pull information
  // 
  //
  

  TFile *fselected = TFile::Open("V0Selected.root");
  TTree * treeK0= (TTree*)fselected->Get("treeK0");  
  TTree * treeLambda= (TTree*)fselected->Get("treeLambda");  
  TTree * treeALambda= (TTree*)fselected->Get("treeALambda");  
  TTree * treeGamma= (TTree*)fselected->Get("treeGamma");  
  Int_t entriesK0= treeK0->GetEntries();  
  Int_t entriesLambda= treeLambda->GetEntries();  
  Int_t entriesALambda= treeALambda->GetEntries();  
  Int_t entriesGamma= treeGamma->GetEntries();  
  
  //overestimated size 
  arrayPions=new TObjArray(entriesK0*2+entriesLambda+entriesALambda);
  arrayProtons=new TObjArray(entriesLambda+entriesALambda);
  arrayElectrons=new TObjArray(entriesGamma*2);
  //
  ppullElectronsV0=new TMatrixD(entriesGamma*2,2); 
  ppullPionsV0=new TMatrixD(entriesK0*2+entriesLambda+entriesALambda,2);
  ppullProtonsV0=new TMatrixD(entriesLambda+entriesALambda,2);
  TMatrixD & pullElectronsV0=*ppullElectronsV0;
  TMatrixD & pullPionsV0=*ppullPionsV0;
  TMatrixD & pullProtonsV0=*ppullProtonsV0;
  //
  // Use K0s, Lambda and ALambda to select pions
  //
  AliESDtrack * track0=0, *track1=0;
  AliESDv0 * v0=0;
  treeK0->SetBranchAddress("track0.",&track0);
  treeK0->SetBranchAddress("track1.",&track1);
  treeK0->SetBranchAddress("v0.",&v0);
  //
  treeLambda->SetBranchAddress("track0.",&track0);
  treeLambda->SetBranchAddress("track1.",&track1);
  treeLambda->SetBranchAddress("v0.",&v0);
  //
  treeALambda->SetBranchAddress("track0.",&track1);
  treeALambda->SetBranchAddress("track1.",&track0);
  treeALambda->SetBranchAddress("v0.",&v0);
  //
  treeGamma->SetBranchAddress("track0.",&track1);
  treeGamma->SetBranchAddress("track1.",&track0);
  treeGamma->SetBranchAddress("v0.",&v0);
  //
  Int_t counterPions=0; 
  Int_t counterProtons=0;
  Int_t counterElectrons=0;
 
  TH2F *hisPionPt = new TH2F("hisPionPt","hisPionPt", 20,0.2,20,20,-1,1);
  TH2F *hisProtonPt = new TH2F("hisProtonPt","hisProtonPt", 20,0.2,20,20,-1,1);
  TH2F *hisElectronPt = new TH2F("hisElectronPt","hisElectronPt", 20,0.2,20,20,-1,1);
  //
  AliTPCcalibBase::BinLogX(hisPionPt->GetXaxis());
  AliTPCcalibBase::BinLogX(hisProtonPt->GetXaxis());
  AliTPCcalibBase::BinLogX(hisElectronPt->GetXaxis());
  //
  //
  // Filter K0s
  //
  //
  for (Int_t iv0=0; iv0<entriesK0/scaling; iv0++){
    treeK0->GetEntry(iv0);
    Double_t pullK0= GetPullMass(v0,2,2,kK0);
    // 
    hisPionPt->Fill(track0->Pt(),track0->GetTgl());
    Int_t bin =  hisPionPt->FindBin(track0->Pt(),track0->GetTgl());
    Int_t entriesPt=(bin>0)? hisPionPt->GetBinContent(bin):0;
    if (entriesPt< maxEntries) {
      pullPionsV0(counterPions,0) =pullK0;
      arrayPions->AddAt(track0->Clone(),counterPions); counterPions++;	
    }
    
    hisPionPt->Fill(track1->Pt(), track1->GetTgl());
    bin =  hisPionPt->FindBin(track1->Pt(),track1->GetTgl());
    entriesPt=(bin>0)? hisPionPt->GetBinContent(bin):0;
    if (entriesPt< maxEntries) {
      pullPionsV0(counterPions,0) =pullK0;
      arrayPions->AddAt(track1->Clone(),counterPions);
      counterPions++;
    }    
    if (iv0%200==0) printf("K0s %d\t%d\n",iv0, counterPions);
  }  
  //
  // Filter lambdas
  //
  for (Int_t ilambda=0; ilambda<=1; ilambda++){
    TTree * treeL = (ilambda==0)? treeLambda: treeALambda;
    Int_t entriesTree=treeL->GetEntries();
    for (Int_t iv0=0; iv0<entriesTree/scaling; iv0++){
      treeL->GetEntry(iv0);
      Double_t pullLambda= 0;
      if (ilambda==0) pullLambda=GetPullMass(v0,4,2,kLambda0);
      if (ilambda==0) pullLambda=GetPullMass(v0,2,4,kLambda0);
      // 1 Additional cut on Gammas
      if (TMath::Abs(v0->GetEffMass(0,0))<0.05) continue;
      //
      hisPionPt->Fill(track1->Pt(), track1->GetTgl());
      Int_t bin =  hisPionPt->FindBin(track1->Pt(),track1->GetTgl());
      Int_t entriesPt=(bin>0)? hisPionPt->GetBinContent(bin):0;
      if (entriesPt< maxEntries) {
	arrayPions->AddAt(track1->Clone(),counterPions);
	pullPionsV0(counterPions,0) =pullLambda;
	counterPions++;
      }
      //
      hisProtonPt->Fill(track0->Pt(), track0->GetTgl());
      bin =  hisProtonPt->FindBin(track0->Pt(),track0->GetTgl());
      entriesPt=(bin>0)? hisProtonPt->GetBinContent(bin):0;
      if (entriesPt< maxEntries) {
	arrayProtons->AddAt(track0->Clone(),counterProtons);
	pullProtonsV0(counterProtons,0) =pullLambda;
	counterProtons++;
      }
      if (iv0%200==0) printf("Lambda Protons %d\t%d\t%d\n",ilambda, iv0,counterProtons);
    }
  }
  //
  // Electrons selection
  //

  Int_t nel= treeGamma->Draw("track0.fTPCsignal","abs(track0.fTPCsignal/track1.fTPCsignal-1)<0.05","goff",10000);
  Double_t meanElectron0=0, sigmaElectron0=0, meanElectron1 =0 , sigmaElectron1=0;
  AliMathBase::EvaluateUni(nel, treeGamma->GetV1(),meanElectron0,sigmaElectron0,0.55*nel);
  nel= treeGamma->Draw("track1.fTPCsignal",Form("abs(track0.fTPCsignal-%f)<%f&&abs(track0.fTPCsignal/track1.fTPCsignal-1)<0.15",meanElectron0,sigmaElectron0),"goff",10000);
  AliMathBase::EvaluateUni(nel, treeGamma->GetV1(),meanElectron1,sigmaElectron1,0.55*nel);
  //
  for (Int_t iv0=0; iv0<entriesGamma/scaling; iv0++){    
    treeGamma->GetEntry(iv0); 
    Double_t pullGamma= GetPullMass(v0,0,0,kGamma);
    //
    //
    hisElectronPt->Fill(track0->Pt(), track0->GetTgl());
    Int_t bin =  hisElectronPt->FindBin(track0->Pt(),track0->GetTgl());
    Int_t entriesPt=(bin>0)? hisElectronPt->GetBinContent(bin):0;
    if (entriesPt< maxEntries && TMath::Abs(track1->GetTPCsignal()-meanElectron1)<sigmaElectron1) {
      arrayElectrons->AddAt(track0->Clone(),counterElectrons);
      pullElectronsV0(counterElectrons,0) =pullGamma;
      counterElectrons++;
    }
    hisElectronPt->Fill(track1->Pt(), track1->GetTgl());
    bin =  hisElectronPt->FindBin(track1->Pt(),track1->GetTgl());
    entriesPt=(bin>0)? hisElectronPt->GetBinContent(bin):0;
    if (entriesPt< maxEntries  && TMath::Abs(track0->GetTPCsignal()-meanElectron1)<sigmaElectron1) {
      arrayElectrons->AddAt(track1->Clone(),counterElectrons);
      pullElectronsV0(counterElectrons,0) =pullGamma;
      counterElectrons++;      
    }
    if (iv0%100==0) printf("Electrons %d\t%d\n",iv0, counterElectrons);
  }



}

void SelectHPT(){
  //
  Int_t counter=0;
  AliESDtrack * track0=0;
  TChain * chainHPT  = AliXRDPROOFtoolkit::MakeChainRandom("highptAll.list","highPt",0,1000);
  Int_t entriesHPT = chainHPT->GetEntries();
  chainHPT->SetCacheSize(1000000000);
  chainHPT->SetBranchAddress("esdTrack.",&track0);  
  TBranch * branchFlags = chainHPT->GetBranch("esdTrack.fFlags");
  //  TBranch * branchTOFSignal = chainHPT->GetBranch("esdTrack.fITSsignal");
  TBranch * branchTOFSignalDX = chainHPT->GetBranch("esdTrack.fTOFsignalDx");
  TBranch * branchParam = chainHPT->GetBranch("esdTrack.AliExternalTrackParam.fP[5]");
  TBranch * branchTrack = chainHPT->GetBranch("esdTrack.");
  counter=0;

  for (Int_t i=0; i<entriesHPT; i++){    
    //
    if (i%100000==0) printf("Entrye\t %d\t%f\n",i,counter);
    branchFlags->GetEntry(i);
    if (track0->IsOn(0x4)==0) continue;    
    //
    branchTOFSignalDX->GetEntry(i);
    if (track0->GetTOFsignalDx()>3) continue;
    //
    branchParam->GetEntry(i);
    if (TMath::Abs(track0->GetParameter()[4])<0.25) continue; 
    branchTrack->GetEntry(i);
    // Select pions
    //esdTrack.fITSncls>4&&abs(esdTrack.fTOFsignalDx**2+esdTrack.fTOFsignalDz**2)<3&&esdTrack.fTOFsignal<esdTrack.fTrackTime[3]-400&&abs(esdTrack.fTOFsignal-esdTrack.fTrackTime[2])<300"
    //
    // Select Protons
    // chainHPT->Draw("esdTrack.fTPCsignal:esdTrack.P()>>his(60,0.3,6,50,30,200)","esdTrack.fITSncls>4&&abs(esdTrack.fTOFsignalDx**2+esdTrack.fTOFsignalDz**2)<4*(1+abs(esdTrack.fP[4]))&&esdTrack.fTOFsignal>esdTrack.fTrackTime[3]+500&&abs(esdTrack.fTOFsignal-esdTrack.fTrackTime[4])<4*(100+abs(esdTrack.fP[4])*100)","colz",10000000);
    counter++;
    if (counter%100==0) printf("%d\t%d\t%f\n",i, counter,track0->GetTOFsignal());
  }
}







void FitSelected( const Int_t ngener=1000, const Int_t maxEntries=10000, Int_t year=0, Int_t period=0){
  //
  // 1. fit the roubust means and the 
  //
  Int_t counter=0;
  TVectorD vecPt0(maxEntries);
  TVectorD vecP(maxEntries);
  TVectorD vecTheta(maxEntries);
  TVectorD vecdEdxTheor(maxEntries);
  //
  TVectorD vecdEdx0(maxEntries);
  TVectorD vecdEdx1(maxEntries);
  TVectorD vecdEdx2(maxEntries);
  TVectorD vecdEdxTRD(maxEntries);
  TVectorD vecdEdxOROC(maxEntries);
  TVectorD vecdEdxAll(maxEntries);
  TVectorD * vecArray[6]={&vecdEdx0, &vecdEdx1, &vecdEdx2, &vecdEdxTRD, &vecdEdxOROC, &vecdEdxAll};
  TVectorD vecMeanTrunc60(6);
  TVectorD vecRMSTrunc60(6);
  TVectorD vecMeanTrunc80(6);
  TVectorD vecRMSTrunc80(6);
  TVectorD vecMeanTrunc(6);
  TVectorD vecRMSTrunc(6);
  TVectorD vecMeanTruncAll(6);
  TVectorD vecRMSTruncAll(6);
  TVectorD vecSelected(6);
  //
  //
  //
  TDatabasePDG pdg;
  Double_t massPion = pdg.GetParticle("pi+")->Mass();
  Double_t massProton = pdg.GetParticle("proton")->Mass();
  Double_t massElectron = pdg.GetParticle("e+")->Mass();

  TTreeSRedirector * pcstream = new TTreeSRedirector("pidDEDX.root","recreate");
  //
  //
  //
  for (Int_t isel=0; isel<ngener; isel++){
    Double_t mcp=gRandom->Rndm()*20;
    Double_t mctheta=2*(gRandom->Rndm()-0.5);
    Int_t ipid= TMath::Nint(gRandom->Rndm()*3.);
    Double_t mass=massPion;
    TObjArray *arrayTrack = arrayPions;
    if (ipid==1) {arrayTrack=arrayProtons; mass=massProton;}
    if (ipid==2) {arrayTrack=arrayElectrons; mass=massElectron;}
    Int_t entriesArray= arrayTrack->GetEntries();
    //
    Int_t nselected=0;
    Int_t nselectedArray[6]={0};
    TVectorD vselectedArray(6);
    //
    // 1. First loop - select the tracks which fullfill the pt and theta criteria
    //
    for (Int_t itrack=0; itrack<entriesArray; itrack++){
      AliESDtrack * track = (AliESDtrack*)arrayTrack->At(itrack);
      if (!track) continue;
      if (!track->GetInnerParam()) continue;
      if (TMath::Abs(track->P()/mcp-1)>0.15) continue; // pt selection
      if (TMath::Abs(track->GetTgl()-mctheta)>0.15) continue; // theta selection
      Double_t mom = track->GetInnerParam()->P();
      Double_t dEdxTheor=50*AliMathBase::BetheBlochAleph(mom/mass);
      //
      vecPt0[nselected]=track->Pt();
      vecP[nselected]=mom;
      vecTheta[nselected]=track->GetTgl();
      vecdEdxTheor[nselected]=dEdxTheor;
      //
      if (track->GetTPCdEdxInfo()){
	vecdEdx0[nselectedArray[0]++]=track->GetTPCdEdxInfo()->GetSignal(0)/dEdxTheor;      
	vecdEdx1[nselectedArray[1]++]=track->GetTPCdEdxInfo()->GetSignal(1)/dEdxTheor;      
	vecdEdx2[nselectedArray[2]++]=track->GetTPCdEdxInfo()->GetSignal(2)/dEdxTheor;      
	vecdEdxOROC[nselectedArray[4]++]=track->GetTPCdEdxInfo()->GetSignal(3)/dEdxTheor;      
      }
      if (track->GetTRDsignal()>0 && track->GetTRDncls()>80){
	vecdEdxTRD[nselectedArray[3]++]=50.*track->GetTRDsignal()/dEdxTheor;            
      }
      vecdEdxAll[nselectedArray[5]++]=track->GetTPCsignal()/dEdxTheor;            
      nselected++;
    }    
    for (Int_t idedx=0; idedx<6; idedx++) vselectedArray[idedx]=nselectedArray[idedx];
    if (nselected <20) continue;
    //
    Double_t meanPt=TMath::Mean(nselected,vecPt0.GetMatrixArray());
    Double_t meanP=TMath::Mean(nselected,vecP.GetMatrixArray());
    Double_t meanTheta=TMath::Mean(nselected,vecTheta.GetMatrixArray());
    Double_t meanTheor=TMath::Mean(nselected,vecdEdxTheor.GetMatrixArray());
    Double_t meanRob, rmsRob;   
    //
    for (Int_t idet=0; idet<6; idet++){
      vecMeanTrunc60[idet]=0;
      vecRMSTrunc60[idet]=0;
      vecMeanTrunc80[idet]=0;
      vecRMSTrunc80[idet]=0;
      vecMeanTruncAll[idet]=0;
      vecRMSTruncAll[idet]=0;
      if  (nselectedArray[idet]<20) continue;
      AliMathBase::EvaluateUni( nselectedArray[idet], vecArray[idet]->GetMatrixArray(), meanRob, rmsRob, nselectedArray[idet]*0.6);
      vecMeanTrunc60[idet]=meanRob;
      vecRMSTrunc60[idet]=rmsRob;
      AliMathBase::EvaluateUni( nselectedArray[idet], vecArray[idet]->GetMatrixArray(), meanRob, rmsRob, nselectedArray[idet]*0.8);
      vecMeanTrunc80[idet]=meanRob;
      vecRMSTrunc80[idet]=rmsRob;
      vecMeanTruncAll[idet]= TMath::Mean(nselectedArray[idet],vecArray[idet]->GetMatrixArray());
      vecRMSTruncAll[idet] = TMath::RMS(nselectedArray[idet],vecArray[idet]->GetMatrixArray());
    }
    //
    if (isel%10==0) printf("%d\n",isel);
    Double_t dEdxTheorMeanP = AliMathBase::BetheBlochAleph(meanP/mass);
    Double_t dEdxTheorCenterP = AliMathBase::BetheBlochAleph(mcp/mass);
    (*pcstream)<<"pid"<<
      "ipid="<<ipid<<                     // pid type -0 pion, 1- proton, 2 electron
      "nAll="<<nselected<<                // number of primary points
      "year="<<year<<                     // year
      "period="<<period<<                 // period
      //
      "dEdxTheorMean="<<meanTheor<<                 // initial dEdx hypothesis - mean over given bin
      "dEdxTheorMeanP="<<dEdxTheorMeanP<<           // initial dEdx hypothesis - for mean momenta
      "dEdxTheorCenterP="<<dEdxTheorCenterP<<       // initial dEdx hypothesis - for central momenta
      // bin
      "p="<<mcp<<                                   // center of bin for particle momentum
      "theta="<<mctheta<<                           // particle theta
      //
      "mass="<<mass<<                               // mass of particle
      "meanPt="<<meanPt<<                           // mean pt in bin
      "meanP="<<meanP<<                              
      "meanTheta="<<meanTheta<<
      //
      "dedxMean60.="<<&vecMeanTrunc60<<
      "dedxRMS60.="<<&vecRMSTrunc60<<
      "dedxMean80.="<<&vecMeanTrunc80<<
      "dedxRMS80.="<<&vecRMSTrunc80<<
      "dedxMeanAll.="<<&vecMeanTruncAll<<
      "dedxRMSAll.="<<&vecRMSTruncAll<<
      "\n";
    //
    // Test 
    //
  }
  delete pcstream;

}




/*



void  AnalyzedEdx(){
  //
  pcstream = new TTreeSRedirector("trend.root","recreate");
  TString flist = gSystem->GetFromPipe("cat highpt.list");
  TObjArray * array = flist.Tokenize("\n");
  array->Print();
  Int_t entries = array->GetEntries();
  for (Int_t ifile=0; ifile<entries; ifile++){
    //TString name = array->At(ifile)->GetName();
    printf("\n\n\n");
    printf("Analyzing:\t%d\t%s\n", ifile,array->At(ifile)->GetName());
    AnalyzedEdxFile(Form("%s#FilterEvents_Trees.root",array->At(ifile)->GetName())); 
    printf("\n\n\n");
  }
  delete pcstream;
}

void AnalyzedEdxFile(const char * fname){
  //
  //scomment
    const char * fname="/hera/alice/local/filtered/alice/data/2013/LHC13e/000196201/vpass1/root_archive.zip#FilterEvents_Trees.root";
    const char * fname="/hera/alice/local/filtered/alice/data/2013/LHC13c/000195531/ESDs/pass1/root_archive.zip#FilterEvents_Trees.root";
  //ecomment
  //
  TFile * fin=TFile::Open(fname);
  if (!fin){
    printf("File\t%s  not existing\n",fname);
    return ;
  }
  TTree * treeIn = (TTree*)fin->Get("highPt");  
  if (!fin){
    printf("Tree \t%s  not existing\n",fname);
    return ;
  }
  treeIn->SetCacheSize(1000000000.0);  
  // TFile *fout = TFile::Open("aaa.root","recreate");
  
  tree =treeIn->CopyTree("esdTrack.fITSncls>0||(esdTrack.fTOFsignal<100000-1)","",50000);
  if (!tree) return;
  if (tree->GetEntries()<2000) return;
  SetPionAliases();
  FitSlopeROC();
}

void SetPionAliases(){
  //
  // Select the tracks with higher dEdx - at high momenta it is used in order to get clean sample of Pions
  // IROC selection used to select sample for OROC
  // OROC selection used to select sample for IROC
  //
  Int_t entries = 0;
  tree->SetAlias("pionOROC","(1+0)");
  tree->SetAlias("pionIROC","(1+0)");
  
  Double_t mean=0, sigma=0;
  entries = tree->Draw("runNumber","","goff",1000);
  run = tree->GetV1()[0];
  {for (Int_t iter=0; iter<2; iter++){
    entries = tree->Draw("esdTrack.fTPCdEdxInfo.fTPCsignalRegion[3]/AliMathBase::BetheBlochAleph(esdTrack.P()/0.1)>>his","esdTrack.fTPCdEdxInfo.fTPCsignalRegion[3]>0&&pionIROC", "goff");
    AliMathBase::EvaluateUni(entries, tree->GetV1(), mean,sigma, 0.6*entries);
    tree->SetAlias("pionOROC",Form("esdTrack.fTPCdEdxInfo.fTPCsignalRegion[3]/AliMathBase::BetheBlochAleph(esdTrack.P()/0.1)-%f>%f",mean,0.0*sigma));
    entries = tree->Draw("esdTrack.fTPCdEdxInfo.fTPCsignalRegion[0]/AliMathBase::BetheBlochAleph(esdTrack.P()/0.1)>>his","esdTrack.fTPCdEdxInfo.fTPCsignalRegion[0]>0&&pionOROC", "goff");
    AliMathBase::EvaluateUni(entries, tree->GetV1(), mean,sigma, 0.6*entries);
    tree->SetAlias("pionIROC",Form("esdTrack.fTPCdEdxInfo.fTPCsignalRegion[0]/AliMathBase::BetheBlochAleph(esdTrack.P()/0.1)-%f>%f",mean,0.0*sigma));
    printf("%d\n",iter);
    printf("%s\n",tree->GetAlias("pionIROC"));
    printf("%s\n",tree->GetAlias("pionOROC"));
    }}    
  
}


void FitSlopeROC(){
  //
  // fit dEdx/eta for "identified high pt pions"
  //
  TF1 f1IROC("f1IROC","pol1");
  TF1 f1OROC("f1IROC","pol1");
  TVectorD vectorIROC(2);
  TVectorD vectorOROC(2);
  TH2 * hisOROC=0;
  TH2 * hisIROC=0;
  TObjArray fitIROC(3);
  TObjArray fitOROC(3);
  tree->Draw("esdTrack.fTPCdEdxInfo.fTPCsignalRegion[3]/AliMathBase::BetheBlochAleph(esdTrack.P()/0.1):abs(esdTrack.fP[3])>>hisOROC(5,0,1,100,20,80)","esdTrack.fTPCncls>70&&pionIROC","colz");
  hisOROC = (TH2*)tree->GetHistogram()->Clone();
  tree->Draw("esdTrack.fTPCdEdxInfo.fTPCsignalRegion[0]/AliMathBase::BetheBlochAleph(esdTrack.P()/0.1):abs(esdTrack.fP[3])>>hisIROC(5,0,1,100,20,80)","esdTrack.fTPCncls>70&&pionOROC","colz");
  hisIROC = (TH2*)tree->GetHistogram()->Clone();
  hisOROC->FitSlicesY(0,0,-1,0,"QNR",&fitOROC);
  hisIROC->FitSlicesY(0,0,-1,0,"QNR",&fitIROC);
  TH1 * phisOROC[3];
  TH1 * phisIROC[3];
  for (Int_t ihis=0; ihis<3; ihis++){
    phisOROC[ihis]=(TH1*)fitOROC.At(ihis);
    phisIROC[ihis]=(TH1*)fitIROC.At(ihis);
  }
  //
  phisOROC[1]->SetMarkerColor(2);
  phisOROC[1]->SetMarkerStyle(25); 
  phisIROC[1]->SetMarkerColor(2);
  phisIROC[1]->SetMarkerStyle(25);   
  phisOROC[1]->Fit(&f1OROC);
  f1OROC.GetParameters(vectorOROC.GetMatrixArray());
  phisOROC[1]->Draw();
  phisIROC[1]->Fit(&f1IROC);
  f1IROC.GetParameters(vectorIROC.GetMatrixArray());
  phisIROC[1]->Draw();
  //
  (*pcstream)<<"dedxFit"<<
    "run="<<run<<
    "hisIROC1.="<<phisIROC[1]<<  // IROC - dEdx/dEdxExp - mean as function of theta
    "hisIROC2.="<<phisIROC[2]<<  // IROC - dEdx/dEdxExp -        RMS as function of the theta
    "hisOROC1.="<<phisOROC[1]<<  // OROC - dEdx/dEdxExp - mean as function of theta
    "hisOROC2.="<<phisOROC[2]<<  // OROC - dEdx/dEdxExp -        RMS as function of theta 
    "fIROC.="<<&vectorIROC<<     // IROC vector with fit parameters mean (at 0 theta) and splope IROC
    "fOROC.="<<&vectorOROC<<     // OROC vector 
    "f1IROC.="<<&f1IROC<<          
    "f1OROC.="<<&f1OROC<<
    "\n";

  //scomment
  //resolution at given bin divided 
  // 
  Standard plots:
  TStatToolkit::MakeGraphSparse(chain,"hisOROC2.fArray[1]/hisOROC1.fArray[1]:run","",25,1,0)->Draw("alp");
  TStatToolkit::MakeGraphSparse(chain,"hisIROC2.fArray[1]/hisIROC1.fArray[1]:run","",25,1,0)->Draw("alp")
  //
  TStatToolkit::MakeGraphSparse(chain,"fIROC.fElements[0]+fIROC.fElements[1]*0.5:run","",25,1,0)->Draw("alp");
  
  //ecomment
  
}


void DrawdEdx(){
  //
  //pdg.GetParticle("Lambda0")->Mass
  //
  TDatabasePDG pdg;
  Double_t massLambda = pdg.GetParticle("Lambda0")->Mass();
  Double_t massK0 = pdg.GetParticle("K0")->Mass();
  Double_t massPion = pdg.GetParticle("pi+")->Mass();
  Double_t massProton = pdg.GetParticle("proton")->Mass();
 
  chain->SetAlias("massPion",Form("(%f+0)",massPion));
  chain->SetAlias("massProton",Form("(%f+0)",massProton));
  chain->SetAlias("massK0",Form("(%f+0)",massK0));
  chain->SetAlias("massLambda",Form("(%f+0)",massLambda));
  chain->SetAlias("K0Pull","(v0.GetEffMass(2,2)-massK0)/v0.GetKFInfo(2,2,1)");
  chain->SetAlias("LPull","(v0.GetEffMass(4,2)-massLambda)/v0.GetKFInfo(4,2,1)");
  chain->SetAlias("K0sel", "abs(v0.GetEffMass(2,2)-massK0)<min(abs(v0.GetEffMass(4,2)-massLambda), abs(v0.GetEffMass(2,4)-massLambda))&&abs(K0Pull)<3");
  //
  //
  //
  chain->Draw("track0.fTPCsignal/AliMathBase::BetheBlochAleph(track0.fIp.P()/massPion)>>hisP(50,20,80)","K0sel","");
  chain->Draw("track1.fTPCsignal/AliMathBase::BetheBlochAleph(track1.fIp.P()/massPion)>>+hisN(50,20,80)","K0sel","");

  chain->Draw("track0.fTPCsignal/AliMathBase::BetheBlochAleph(track0.fIp.P()/massPion):track0.fIp.P()>>his(20,0,10,100,30,70)","K0sel","colz");


  TH3F * hisBGPion3D = new TH3F("hisBGPion3D","hisBGPion3D",40,0.5,200,4,0,1,100,30,70);
  TH3F * hisBGProton3D = new TH3F("hisBGProton3D","hisBGProton3D",40,0.5,200,4,0,1,100,30,70);
  AliTPCcalibBase::BinLogX(hisBGPion3D->GetXaxis());
  AliTPCcalibBase::BinLogX(hisBGProton3D->GetXaxis());
  
  chain->Draw("track0.fTPCsignal/AliMathBase::BetheBlochAleph(track0.fIp.P()/massPion):abs(track0.fIp.fP[3]):track0.fIp.P()/massPion>>hisBGPion3D","K0sel||(track0.fTOFr[2]+track0.fTOFr[1])>0.6","");
  chain->Draw("track0.fTPCsignal/AliMathBase::BetheBlochAleph(track0.fIp.P()/massProton):abs(track0.fIp.fP[3]):track0.fIp.P()/massProton>>hisBGProton3D","(!K0sel&&abs(LPull)<1.5)||track0.fTOFr[4]>0.6","");

  
  TTreeSRedirector *pcstream = new TTreeSRedirector("bb.root","recreate");
  TVectorD vecPionMean(4),vecPionRMS(4), vecPionEntries(4);
  TVectorD vecProtonMean(4),vecProtonRMS(4), vecProtonEntries(4);
  TVectorD vecTheta(4);
  {for (Int_t ibg=2; ibg<38; ibg++){
    for (Int_t itheta=0; itheta<4; itheta++){
      TH1 * hisPion = hisBGPion3D->ProjectionZ("hisPion",ibg-1, ibg+1, itheta+1, itheta+1);
      TH1 * hisProton = hisBGProton3D->ProjectionZ("hisProton",ibg-1, ibg+1, itheta+1, itheta+1);
      hisPion->Fit("gaus");      
      vecPionMean[itheta]=gaus->GetParameter(1);
      vecPionRMS[itheta]=gaus->GetParameter(2);
      vecPionEntries[itheta]=hisPion->GetEntries();
      hisProton->Fit("gaus");      
      vecProtonMean[itheta]=gaus->GetParameter(1);
      vecProtonRMS[itheta]=gaus->GetParameter(2);
      vecProtonEntries[itheta]=hisProton->GetEntries();
      vecTheta[itheta]=hisBGPion3D->GetXaxis()->GetBinCenter(itheta);
      delete hisPion;
      delete hisProton;
    }
    //
    Double_t bg = hisBGPion3D->GetXaxis()->GetBinCenter(ibg);
    Double_t dEdxRef = AliMathBase::BetheBlochAleph(bg);
    (*pcstream)<<"bb"<<
      "bg="<<bg<<
      "dedxRef="<<dEdxRef<<
      "ibg="<<ibg<<
      "pionMean.="<<&vecPionMean<<
      "pionRMS.="<<&vecPionRMS<<
      "pionEntries.="<<&vecPionEntries<<
      "protonMean.="<<&vecProtonMean<<
      "protonRMS.="<<&vecProtonRMS<<
      "protonEntries.="<<&vecProtonEntries<<
      "\n";
    }}

  delete pcstream;
  
  

  
  hisBGPion->FitSlicesY();
  hisBGProton->FitSlicesY();

  hisBGPion_1->SetMarkerStyle(25);
  hisBGProton_1->SetMarkerStyle(25);
  hisBGPion_1->SetMarkerColor(2);
  hisBGProton_1->SetMarkerColor(4);

  hisBGPion_1->Draw();
  hisBGProton_1->Draw("same");



}



void aaa(){
  
  TChain * chain  = AliXRDPROOFtoolkit::MakeChainRandom("/hera/alice/miranov/highptAll.list","V0s",0,1000);
  chain->SetCacheSize(1000000000);

  TChain * chainHPT  = AliXRDPROOFtoolkit::MakeChainRandom("/hera/alice/miranov/highptAll.list","highPt",0,1000);
  chainHPT->SetCacheSize(1000000000);
  // for Kaons not good referenece data
  TFile ftofSelected("tofSelected.root","recreate");
  TTree * treeTOF = chainHPT->CopyTree("abs(esdTrack.fTOFsignalDz)<5&&abs(esdTrack.fTOFsignalDx)<5&&esdTrack.fITSncls>0&&abs(1/esdTrack.fP[4])<2");
  treeTOF->Write("treeTOF");
  //ftofSelected.Write();
  
}






void DrawdEdxRatio(){
  //
  //pdg.GetParticle("Lambda0")->Mass
  //
  TDatabasePDG pdg;
  Double_t massLambda = pdg.GetParticle("Lambda0")->Mass();
  Double_t massK0 = pdg.GetParticle("K0")->Mass();
  Double_t massPion = pdg.GetParticle("pi+")->Mass();
  Double_t massProton = pdg.GetParticle("proton")->Mass();

  chain->SetAlias("massPion",Form("(%f+0)",massPion));
  chain->SetAlias("massProton",Form("(%f+0)",massProton));
  chain->SetAlias("massK0",Form("(%f+0)",massK0));
  chain->SetAlias("massLambda",Form("(%f+0)",massLambda));
  chain->SetAlias("K0Pull","(v0.GetEffMass(2,2)-massK0)/v0.GetKFInfo(2,2,1)");
  chain->SetAlias("LPull","(v0.GetEffMass(4,2)-massLambda)/v0.GetKFInfo(4,2,1)");
  chain->SetAlias("K0sel", "abs(v0.GetEffMass(2,2)-massK0)<min(abs(v0.GetEffMass(4,2)-massLambda), abs(v0.GetEffMass(2,4)-massLambda))&&abs(K0Pull)<3");
 

  //
  //
  //

  TH3F * hisBGPion3DR1 = new TH3F("hisBGPion3DR1","hisBGPion3DR1",40,0.5,200,4,0,1,100,0.5,1.5);
  TH3F * hisBGProton3DR1 = new TH3F("hisBGProton3DR1","hisBGProton3DR1",40,0.5,200,4,0,1,100,0.5,1.5);
  TH3F * hisBGPion3DR2 = new TH3F("hisBGPion3DR2","hisBGPion3DR2",40,0.5,200,4,0,1,100,0.5,1.5);
  TH3F * hisBGProton3DR2 = new TH3F("hisBGProton3DR2","hisBGProton3DR2",40,0.5,200,4,0,1,100,0.5,1.5);
  AliTPCcalibBase::BinLogX(hisBGPion3DR1->GetXaxis());
  AliTPCcalibBase::BinLogX(hisBGProton3DR1->GetXaxis());
  AliTPCcalibBase::BinLogX(hisBGPion3DR2->GetXaxis());
  AliTPCcalibBase::BinLogX(hisBGProton3DR2->GetXaxis());

  chain->Draw("track0.fTPCdEdxInfo.fTPCsignalRegion[1]/track0.fTPCdEdxInfo.fTPCsignalRegion[0]:abs(track0.fIp.fP[3]):track0.fIp.P()/massPion>>hisBGPion3DR1","K0sel||(track0.fTOFr[2]+track0.fTOFr[1])>0.6","");
  chain->Draw("track0.fTPCdEdxInfo.fTPCsignalRegion[2]/track0.fTPCdEdxInfo.fTPCsignalRegion[0]:abs(track0.fIp.fP[3]):track0.fIp.P()/massPion>>hisBGPion3DR2","K0sel||(track0.fTOFr[2]+track0.fTOFr[1])>0.6","");
  //
  //
  //
  chain->Draw("track0.fTPCdEdxInfo.fTPCsignalRegion[1]/track0.fTPCdEdxInfo.fTPCsignalRegion[0]:abs(track0.fIp.fP[3]):track0.fIp.P()/massProton>>hisBGProton3DR1","(!K0sel&&abs(LPull)<1.5)||track0.fTOFr[4]>0.6","");
  chain->Draw("track0.fTPCdEdxInfo.fTPCsignalRegion[2]/track0.fTPCdEdxInfo.fTPCsignalRegion[0]:abs(track0.fIp.fP[3]):track0.fIp.P()/massProton>>hisBGProton3DR2","(!K0sel&&abs(LPull)<1.5)||track0.fTOFr[4]>0.6","");

  TFile fratio("bbRatio.root","recreate");
  hisBGPion3DR1->Write();
  hisBGPion3DR2->Write();
  hisBGProton3DR1->Write();
  hisBGProton3DR2->Write();
  fratio.Close();

  Double_t masses[5]={massPion, massProton,0,0,0};
  const Double_t kB2C=-0.299792458e-3;

  AliTPCParamSR par;
  par.Update();

  TTreeSRedirector *pcstream = new TTreeSRedirector("bbRatio.root","update");
  TVectorD vecMean(4),vecRMS(4), vecEntries(4);
  TVectorD vecTheta(4);
  TVectorD vecP(4);
  TVectorD vecPt(4);
  TVectorD vecPhi0(4);  // tracklet angle at 0 
  TVectorD vecPhi1(4);  // tracklet angle at 1 
  TVectorD vecPhi2(4);  // tracklet angle at 2 
  TVectorD vecTheta0(4);  // tracklet angle at 0 
  TVectorD vecTheta1(4);  // tracklet angle at 1 
  TVectorD vecTheta2(4);  // tracklet angle at 2 
  TVectorD vecL0(4);  // tracklet length at 0 
  TVectorD vecL1(4);  // tracklet letgth at 1 
  TVectorD vecL2(4);  // tracklet length at 2 
  {
    for (Int_t ptype=0; ptype<2; ptype++){
      for (Int_t itype=0; itype<2; itype++){
	for (Int_t ibg=2; ibg<38; ibg++){
	  Double_t bg = hisBGPion3DR1->GetXaxis()->GetBinCenter(ibg);
	  Double_t dEdxRef = AliMathBase::BetheBlochAleph(bg);
	  Double_t length0=0;
	  for (Int_t itheta=0; itheta<4; itheta++){
	    TH1 * hisProjection = 0;
	    if (itype==0){
	      if (ptype==0) hisProjection   = hisBGPion3DR1->ProjectionZ("hisPion",ibg-1, ibg+1, itheta+1, itheta+1);
	      if (ptype==1) hisProjection   = hisBGProton3DR1->ProjectionZ("hisProton",ibg-1, ibg+1, itheta+1, itheta+1);
	    }
	    if (itype==1){
	      if (ptype==0) hisProjection   = hisBGPion3DR2->ProjectionZ("hisPion",ibg-1, ibg+1, itheta+1, itheta+1);
	      if (ptype==1) hisProjection   = hisBGProton3DR2->ProjectionZ("hisProton",ibg-1, ibg+1, itheta+1, itheta+1);
	    }
	    hisProjection->Fit("gaus");      
	    vecMean[itheta]=gaus->GetParameter(1);
	    vecRMS[itheta]=gaus->GetParameter(2);
	    vecEntries[itheta]=hisProjection->GetEntries();
	    vecTheta[itheta]=hisBGPion3DR1->GetYaxis()->GetBinCenter(itheta+1);
	    vecP[itheta]= bg*masses[ptype];
	    vecPt[itheta]=bg*masses[ptype]/TMath::Sqrt(1+vecTheta[itheta]*vecTheta[itheta]);  //Pt
	    //
	    // Get angle and length
	    //
	    Double_t crv= 5*kB2C/vecPt[itheta];   //GetC(b); // bz*kB2C/pt;
	    Double_t angleIROC= TMath::ASin(TMath::Min(TMath::Abs(par.GetPadRowRadii(0, par.GetNRow(0)/2.)*crv)*0.5,1.));
	    Double_t angleOROC0= TMath::ASin(TMath::Min(TMath::Abs(par.GetPadRowRadii(36, par.GetNRowUp1()/2.)*crv)*0.5,1.));
	    Double_t angleOROC1= TMath::ASin(TMath::Min(TMath::Abs(par.GetPadRowRadii(36, par.GetNRowUp1()+par.GetNRowUp2()/2.)*crv)*0.5,1.));
	    vecPhi0[itheta]=angleIROC;
	    vecPhi1[itheta]=angleOROC0;
	    vecPhi2[itheta]=angleOROC1;
	    //
	    vecTheta0[itheta]=TMath::Sqrt(1+TMath::Tan(vecPhi0[itheta])*TMath::Tan(vecPhi0[itheta]))*vecTheta[itheta];
	    vecTheta1[itheta]=TMath::Sqrt(1+TMath::Tan(vecPhi1[itheta])*TMath::Tan(vecPhi1[itheta]))*vecTheta[itheta];
	    vecTheta2[itheta]=TMath::Sqrt(1+TMath::Tan(vecPhi2[itheta])*TMath::Tan(vecPhi2[itheta]))*vecTheta[itheta];

	    //
	    vecL0[itheta]  = 0.75*TMath::Sqrt(1+TMath::Tan(vecPhi0[itheta])*TMath::Tan(vecPhi0[itheta]) + vecTheta0[itheta]*vecTheta0[itheta]);
	    vecL1[itheta]  = 1.0*TMath::Sqrt(1+TMath::Tan(vecPhi1[itheta])*TMath::Tan(vecPhi1[itheta])  +  vecTheta1[itheta]*vecTheta1[itheta]);
	    vecL2[itheta]  = 1.5*TMath::Sqrt(1+TMath::Tan(vecPhi2[itheta])*TMath::Tan(vecPhi2[itheta])  +  vecTheta2[itheta]*vecTheta2[itheta]);
	    delete hisProjection;
	  }
	  //
	  (*pcstream)<<"bbRatio"<<
	    "ptype="<<ptype<<            // particle type
	    "rtype="<<itype<<            // ratio type
	    "mass="<<masses[ptype]<<     // mass of the 
	    "bg="<<bg<<
	    "dedxRef="<<dEdxRef<<
	    "ibg="<<ibg<<
	    "vecTheta.="<<&vecTheta<<
	    "vecTheta0.="<<&vecTheta0<<
	    "vecTheta1.="<<&vecTheta1<<
	    "vecTheta2.="<<&vecTheta2<<
	    "ratioMean.="<<&vecMean<<
	    "ratioRMS.="<<&vecRMS<<
	    "ratioEntries.="<<&vecEntries<<
	    "vecP.="<<&vecP<<             // momentum
	    "vecPt.="<<&vecPt<<             // pt
	    "vecPhi0.="<<&vecPhi0<<       // angle in the IROC
	    "vecPhi1.="<<&vecPhi1<<       // angle in the OROC1
	    "vecPhi2.="<<&vecPhi2<<       // angle in the OROC2
	    "vecL0.="<<&vecL0<<       // angle in the IROC
	    "vecL1.="<<&vecL1<<       // angle in the OROC1
	    "vecL2.="<<&vecL2<<       // angle in the OROC2
	    "\n";
	}}
    }
  }

  delete pcstream;
  
}
 
void Fit(){
  
  TFile ff("bbRatio.root");  
  TTree * tree = ff.Get("bbRatio");
  tree->SetMarkerStyle(25);
  //
  Double_t chi2=0;
  Int_t    npoints=0;
  TVectorD param;
  TMatrixD covar;
  Int_t npointsMax=10000000;

  TCut cutFit="ratioRMS.fElements<0.3&&ratioEntries.fElements>100&&vecL1.fElements<10&&vecL2.fElements<10";
  TString fstringFast="";  
  fstringFast+="(1-(rtype==0)*2)++";
  fstringFast+="(rtype==0)*vecTheta.fElements++";
  fstringFast+="(rtype==1)*vecTheta.fElements++";
  //  fstringFast+="vecTheta.fElements++";
  //fstringFast+="vecPhi0.fElements++";
  fstringFast+="1/(vecL0.fElements*dedxRef)++";
  //fstringFast+="(rtype==0)*vecPhi1.fElements++";
  fstringFast+="(rtype==0)/(vecL1.fElements*dedxRef)++";
  //fstringFast+="(rtype==1)*vecPhi2.fElements++";
  fstringFast+="(rtype==1)/(vecL2.fElements*dedxRef)++";
  //
  TString *strDelta = TStatToolkit::FitPlaneConstrain(tree,"ratioMean.fElements:ratioRMS.fElements", fstringFast.Data(),cutFit, chi2,npoints,param,covar,0.9,0, npointsMax, 1);
  TObjArray* tokArr = strDelta->Tokenize("++");
  tokArr->Print();
  tree->SetAlias("corr",strDelta->Data());
}


void SelectTracks(){
  //
  //
  //
  TFile f("tofSelected.root");
  TChain * chain = f.Get("highPt");
  chain->SetAlias("ITSTOFrPion","sqrt((esdTrack.fTOFr[1]+esdTrack.fTOFr[2]+0.05)*(esdTrack.fITSr[1]+esdTrack.fITSr[2]+0.05))");
  chain->SetAlias("ITSTOFrProton","sqrt((esdTrack.fTOFr[4]+0.05)*(esdTrack.fITSr[4]+0.05))");
  chain->SetAlias("ITSTOFrKaon","sqrt((esdTrack.fTOFr[3]+0.05)*(esdTrack.fITSr[3]+0.05))");
  TDatabasePDG pdg;
  Double_t massLambda = pdg.GetParticle("Lambda0")->Mass();
  Double_t massK0 = pdg.GetParticle("K0")->Mass();
  Double_t massPion = pdg.GetParticle("pi+")->Mass();
  Double_t massProton = pdg.GetParticle("proton")->Mass();

  chain->SetAlias("massPion",Form("(%f+0)",massPion));
  chain->SetAlias("massProton",Form("(%f+0)",massProton));
  chain->SetAlias("massK0",Form("(%f+0)",massK0));

  // 
  chain->SetAlias("isPion", "((ITSTOFrPion>1.5*ITSTOFrProton&&ITSTOFrPion>1.5*ITSTOFrKaon)&&esdTrack.fTRDsignal/AliMathBase::BetheBlochAleph(esdTrack.P()/0.13-1)<0.2)");
  //
  chain->SetAlias("isKaon", "((ITSTOFrKaon>1.5*ITSTOFrProton&&ITSTOFrKaon>1.5*ITSTOFrPion))&&abs(esdTrack.fTRDsignal/AliMathBase::BetheBlochAleph(esdTrack.P()/massK0)-1)<0.3");

  chain->SetAlias("isProton", "((ITSTOFrProton>1.5*ITSTOFrKaon&&ITSTOFrProton>1.5*ITSTOFrPion))");
    
}

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