]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG4/JetTasks/AliPWG4HighPtQAMC.cxx
more coverity fixes (M. Verweij)
[u/mrichter/AliRoot.git] / PWG4 / JetTasks / AliPWG4HighPtQAMC.cxx
index 6e7d34351c90106b5c99a8859e282626fded5917..05b0bc2e285281b94111bfb6cec302a991725072 100644 (file)
@@ -60,9 +60,11 @@ AliPWG4HighPtQAMC::AliPWG4HighPtQAMC()
   fESD(0), 
   fMC(0),
   fStack(0),
+  fVtx(0x0),
   fTrackCuts(0), 
-  fTrackCutsITS(0),
+  fTrackCutsReject(),
   fTrackType(0),
+  fSigmaConstrainedMax(1e6),
   fPtMax(100.),
   fAvgTrials(1),
   fNEventAll(0),
@@ -74,8 +76,20 @@ AliPWG4HighPtQAMC::AliPWG4HighPtQAMC()
   fh1PtHardTrials(0),
   fPtAll(0),  
   fPtSel(0),  
+  fPtSelFakes(0),
+  fNPointTPCFakes(0),
+  fPtSelLargeLabel(0),
+  fMultRec(0),
+  fNPointTPCMultRec(0),
+  fDeltaPtMultRec(0),
+  fPtAllvsPtMC(0),
   fPtAllminPtMCvsPtAll(0),
+  fPtAllvsPtMCvsMult(0),
+  fPtAllminPtMCvsPtAllvsMult(0),
   fPtAllminPtMCvsPtAllNPointTPC(0),
+  fPtAllminPtMCvsPtAllNPointTPCIter1(0),
+  fPtAllminPtMCvsPtAllChi2TPC(0),
+  fPtAllminPtMCvsPtAllChi2TPCIter1(0),
   fPtAllminPtMCvsPtAllDCAR(0),
   fPtAllminPtMCvsPtAllDCAZ(0),
   fPtAllminPtMCvsPtAllPhi(0),
@@ -85,21 +99,16 @@ AliPWG4HighPtQAMC::AliPWG4HighPtQAMC()
   fPtAllminPtMCvsPtAllRel1PtUncertainty(0),
   fPtAllMC(0),
   fPtSelMC(0),
-  fPtSelMCITS(0),
-  fHistList(0),
-  fPtSelITS(0),
-  fPtITSminPtMCvsPtITS(0),
-  fPtITSminPtMCvsPtITSNPointTPC(0),
-  fPtITSminPtMCvsPtITSDCAR(0),
-  fPtITSminPtMCvsPtITSDCAZ(0),
-  fPtITSminPtMCvsPtITSPhi(0),
-  fPtITSminPtMCvsPtITSNPointITS(0),
-  fPtITSminPtMCvsPtITSNSigmaToVertex(0),
-  fPtITSminPtMCvsPtITSChi2C(0),
-  fPtITSminPtMCvsPtITSRel1PtUncertainty(0),
-  fHistListITS(0)
+  fHistList(0)
 {
 
+  fPtBinEdges[0][0] = 10.;
+  fPtBinEdges[0][1] = 1.;
+  fPtBinEdges[1][0] = 20.;
+  fPtBinEdges[1][1] = 2.;
+  fPtBinEdges[2][0] = 100.;
+  fPtBinEdges[2][1] = 10.;
+
 }
 //________________________________________________________________________
 AliPWG4HighPtQAMC::AliPWG4HighPtQAMC(const char *name): 
@@ -107,9 +116,11 @@ AliPWG4HighPtQAMC::AliPWG4HighPtQAMC(const char *name):
   fESD(0),
   fMC(0),
   fStack(0),
+  fVtx(0x0),
   fTrackCuts(),
-  fTrackCutsITS(),
+  fTrackCutsReject(),
   fTrackType(0),
+  fSigmaConstrainedMax(1e6),
   fPtMax(100.),
   fAvgTrials(1),
   fNEventAll(0),
@@ -121,8 +132,20 @@ AliPWG4HighPtQAMC::AliPWG4HighPtQAMC(const char *name):
   fh1PtHardTrials(0),
   fPtAll(0),
   fPtSel(0),
+  fPtSelFakes(0),
+  fNPointTPCFakes(0),
+  fPtSelLargeLabel(0),
+  fMultRec(0),
+  fNPointTPCMultRec(0),
+  fDeltaPtMultRec(0),
+  fPtAllvsPtMC(0),
   fPtAllminPtMCvsPtAll(0),
+  fPtAllvsPtMCvsMult(0),
+  fPtAllminPtMCvsPtAllvsMult(0),
   fPtAllminPtMCvsPtAllNPointTPC(0),
+  fPtAllminPtMCvsPtAllNPointTPCIter1(0),
+  fPtAllminPtMCvsPtAllChi2TPC(0),
+  fPtAllminPtMCvsPtAllChi2TPCIter1(0),
   fPtAllminPtMCvsPtAllDCAR(0),
   fPtAllminPtMCvsPtAllDCAZ(0),
   fPtAllminPtMCvsPtAllPhi(0),
@@ -132,29 +155,38 @@ AliPWG4HighPtQAMC::AliPWG4HighPtQAMC(const char *name):
   fPtAllminPtMCvsPtAllRel1PtUncertainty(0),
   fPtAllMC(0),
   fPtSelMC(0),
-  fPtSelMCITS(0),
-  fHistList(0),
-  fPtSelITS(0),
-  fPtITSminPtMCvsPtITS(0),
-  fPtITSminPtMCvsPtITSNPointTPC(0),
-  fPtITSminPtMCvsPtITSDCAR(0),
-  fPtITSminPtMCvsPtITSDCAZ(0),
-  fPtITSminPtMCvsPtITSPhi(0),
-  fPtITSminPtMCvsPtITSNPointITS(0),
-  fPtITSminPtMCvsPtITSNSigmaToVertex(0),
-  fPtITSminPtMCvsPtITSChi2C(0),
-  fPtITSminPtMCvsPtITSRel1PtUncertainty(0),
-  fHistListITS(0)
+  fHistList(0)
 {
   //
   // Constructor. Initialization of Inputs and Outputs
   //
   AliDebug(2,Form("AliPWG4HighPtQAMC Calling Constructor"));
+
+  fPtBinEdges[0][0] = 10.;
+  fPtBinEdges[0][1] = 1.;
+  fPtBinEdges[1][0] = 20.;
+  fPtBinEdges[1][1] = 2.;
+  fPtBinEdges[2][0] = 100.;
+  fPtBinEdges[2][1] = 10.;
+
   // Input slot #0 works with a TChain ESD
   DefineInput(0, TChain::Class());
   // Output slot #0, #1 write into a TList
   DefineOutput(0, TList::Class());
-  DefineOutput(1, TList::Class());
+}
+
+//________________________________________________________________________
+void AliPWG4HighPtQAMC::SetPtBinEdges(Int_t region, Double_t ptmax, Double_t ptBinWidth) {
+
+  if(region<3) {
+    fPtBinEdges[region][0] = ptmax;
+    fPtBinEdges[region][1] = ptBinWidth;
+  }
+  else {
+    AliError("Only 3 regions alowed. Use region 0/1/2\n");
+    return;
+  }
+
 }
 
 //________________________________________________________________________
@@ -198,24 +230,124 @@ void AliPWG4HighPtQAMC::CreateOutputObjects() {
   OpenFile(0);
   fHistList = new TList();
   fHistList->SetOwner(kTRUE);
-  OpenFile(1);
-  fHistListITS = new TList();
-  fHistListITS->SetOwner(kTRUE);
 
-  Int_t fgkNPhiBins=18;
-  Float_t kMinPhi = 0.;
-  Float_t kMaxPhi = 2.*TMath::Pi();
-  
-  Int_t fgkNPtBins=98;
-  Float_t fgkPtMin=2.;
-  Float_t fgkPtMax=fPtMax;
+  Float_t fgkPtMin = 0.;
+
+  //fPtBinEdges[region][0] = ptmax of region ; fPtBinEdges[region][1] = binWidth of region
+  const Float_t ptmin1 =  fgkPtMin;
+  const Float_t ptmax1 =  fPtBinEdges[0][0];
+  const Float_t ptmin2 =  ptmax1 ;
+  const Float_t ptmax2 =  fPtBinEdges[1][0];
+  const Float_t ptmin3 =  ptmax2 ;
+  const Float_t ptmax3 =  fPtBinEdges[2][0];//fgkPtMax;
+  const Int_t nbin11 = (int)((ptmax1-ptmin1)/fPtBinEdges[0][1]);
+  const Int_t nbin12 = (int)((ptmax2-ptmin2)/fPtBinEdges[1][1])+nbin11;
+  const Int_t nbin13 = (int)((ptmax3-ptmin3)/fPtBinEdges[2][1])+nbin12;
+  Int_t fgkNPtBins=nbin13;
+  //Create array with low edges of each bin
+  Double_t *binsPt=new Double_t[fgkNPtBins+1];
+  for(Int_t i=0; i<=fgkNPtBins; i++) {
+    if(i<=nbin11) binsPt[i]=(Double_t)ptmin1 + (ptmax1-ptmin1)/nbin11*(Double_t)i ;
+    if(i<=nbin12 && i>nbin11) binsPt[i]=(Double_t)ptmin2 + (ptmax2-ptmin2)/(nbin12-nbin11)*((Double_t)i-(Double_t)nbin11) ;
+    if(i<=nbin13 && i>nbin12) binsPt[i]=(Double_t)ptmin3 + (ptmax3-ptmin3)/(nbin13-nbin12)*((Double_t)i-(Double_t)nbin12) ;
+  }
+
+  Int_t fgkNPhiBins = 18*6;
+  Float_t kMinPhi   = 0.;
+  Float_t kMaxPhi   = 2.*TMath::Pi();
+  Double_t *binsPhi = new Double_t[fgkNPhiBins+1];
+  for(Int_t i=0; i<=fgkNPhiBins; i++) binsPhi[i]=(Double_t)kMinPhi + (kMaxPhi-kMinPhi)/fgkNPhiBins*(Double_t)i ;
+
   Int_t fgkResPtBins=80;
+  Float_t kMinResPt = -1.;
+  Float_t kMaxResPt = 1.;
+  Double_t *binsResPt = new Double_t[fgkResPtBins+1];
+  for(Int_t i=0; i<=fgkResPtBins; i++) binsResPt[i]=(Double_t)kMinResPt + (kMaxResPt-kMinResPt)/fgkResPtBins*(Double_t)i ;
+
+  Int_t fgkMultBins=50;
+  Float_t kMinMult = 0.;
+  Float_t kMaxMult = 3000.;
+  Double_t *binsMult = new Double_t[fgkMultBins+1];
+  for(Int_t i=0; i<=fgkMultBins; i++) binsMult[i]=(Double_t)kMinMult + (kMaxMult-kMinMult)/fgkMultBins*(Double_t)i ;
+
+  Int_t fgkNEtaBins=20;
+  Float_t fgkEtaMin = -1.;
+  Float_t fgkEtaMax = 1.;
+  Double_t *binsEta=new Double_t[fgkNEtaBins+1];
+  for(Int_t i=0; i<=fgkNEtaBins; i++) binsEta[i]=(Double_t)fgkEtaMin + (fgkEtaMax-fgkEtaMin)/fgkNEtaBins*(Double_t)i ;
+
+  Int_t fgkNNClustersTPCBins=80;
+  Float_t fgkNClustersTPCMin = 0.5;
+  Float_t fgkNClustersTPCMax = 160.5;
+  Double_t *binsNClustersTPC=new Double_t[fgkNNClustersTPCBins+1];
+  for(Int_t i=0; i<=fgkNNClustersTPCBins; i++) binsNClustersTPC[i]=(Double_t)fgkNClustersTPCMin + (fgkNClustersTPCMax-fgkNClustersTPCMin)/fgkNNClustersTPCBins*(Double_t)i ;
+
+  Int_t fgkNDCA2DBins=80;
+  Float_t fgkDCA2DMin = -0.2;
+  Float_t fgkDCA2DMax = 0.2;
+  if(fTrackType==1 || fTrackType==2 || fTrackType==4) {
+    fgkDCA2DMin = -2.;
+    fgkDCA2DMax = 2.;
+  }
+  Double_t *binsDCA2D=new Double_t[fgkNDCA2DBins+1];
+  for(Int_t i=0; i<=fgkNDCA2DBins; i++) binsDCA2D[i]=(Double_t)fgkDCA2DMin + (fgkDCA2DMax-fgkDCA2DMin)/fgkNDCA2DBins*(Double_t)i ;
+
+  Int_t fgkNDCAZBins=80;
+  Float_t fgkDCAZMin = -2.;
+  Float_t fgkDCAZMax = 2.;
+  if(fTrackType==1 || fTrackType==2 || fTrackType==4) {
+    fgkDCAZMin = -5.;
+    fgkDCAZMax = 5.;
+  }
+  Double_t *binsDCAZ=new Double_t[fgkNDCAZBins+1];
+  for(Int_t i=0; i<=fgkNDCAZBins; i++) binsDCAZ[i]=(Double_t)fgkDCAZMin + (fgkDCAZMax-fgkDCAZMin)/fgkNDCAZBins*(Double_t)i ;
+
+ Int_t fgkNNPointITSBins=9;
+  Float_t fgkNPointITSMin = -0.5;
+  Float_t fgkNPointITSMax = 8.5;
+  Double_t *binsNPointITS=new Double_t[fgkNNPointITSBins+1];
+  for(Int_t i=0; i<=fgkNNPointITSBins; i++) binsNPointITS[i]=(Double_t)fgkNPointITSMin + (fgkNPointITSMax-fgkNPointITSMin)/fgkNNPointITSBins*(Double_t)i ;
+
+  Int_t fgkNNSigmaToVertexBins=20;
+  Float_t fgkNSigmaToVertexMin = 0.;
+  Float_t fgkNSigmaToVertexMax = 8.;
+  Double_t *binsNSigmaToVertex=new Double_t[fgkNNSigmaToVertexBins+1];
+  for(Int_t i=0; i<=fgkNNSigmaToVertexBins; i++) binsNSigmaToVertex[i]=(Double_t)fgkNSigmaToVertexMin + (fgkNSigmaToVertexMax-fgkNSigmaToVertexMin)/fgkNNSigmaToVertexBins*(Double_t)i ;
+
+  Int_t fgkNChi2CBins=20;
+  Float_t fgkChi2CMin = 0.;
+  Float_t fgkChi2CMax = 100.;
+  Double_t *binsChi2C=new Double_t[fgkNChi2CBins+1];
+  for(Int_t i=0; i<=fgkNChi2CBins; i++) binsChi2C[i]=(Double_t)fgkChi2CMin + (fgkChi2CMax-fgkChi2CMin)/fgkNChi2CBins*(Double_t)i ;
+
+  Int_t fgkNRel1PtUncertaintyBins=50;
+  Float_t fgkRel1PtUncertaintyMin = 0.;
+  Float_t fgkRel1PtUncertaintyMax = 1.;
+  Double_t *binsRel1PtUncertainty=new Double_t[fgkNRel1PtUncertaintyBins+1];
+  for(Int_t i=0; i<=fgkNRel1PtUncertaintyBins; i++) binsRel1PtUncertainty[i]=(Double_t)fgkRel1PtUncertaintyMin + (fgkRel1PtUncertaintyMax-fgkRel1PtUncertaintyMin)/fgkNRel1PtUncertaintyBins*(Double_t)i ;
+
+  Float_t fgkChi2PerClusMin = 0.;
+  Float_t fgkChi2PerClusMax = 4.;
+  Int_t fgkNChi2PerClusBins = (int)(fgkChi2PerClusMax*10.);
+  Double_t *binsChi2PerClus=new Double_t[fgkNChi2PerClusBins+1];
+  for(Int_t i=0; i<=fgkNChi2PerClusBins; i++) binsChi2PerClus[i]=(Double_t)fgkChi2PerClusMin + (fgkChi2PerClusMax-fgkChi2PerClusMin)/fgkNChi2PerClusBins*(Double_t)i ;
+
 
   fNEventAll = new TH1F("fNEventAll","NEventAll",1,-0.5,0.5);
   fHistList->Add(fNEventAll);
   fNEventSel = new TH1F("fNEventSel","NEvent Selected for analysis",1,-0.5,0.5);
   fHistList->Add(fNEventSel);
   fNEventReject = new TH1F("fNEventReject","Reason events are rejectected for analysis",20,0,20);
+  //Set labels
+  fNEventReject->Fill("noESD",0);
+  fNEventReject->Fill("Trigger",0);
+  fNEventReject->Fill("noMCEvent",0);
+  fNEventReject->Fill("noStack",0);
+  fNEventReject->Fill("NTracks<2",0);
+  fNEventReject->Fill("noVTX",0);
+  fNEventReject->Fill("VtxStatus",0);
+  fNEventReject->Fill("NCont<2",0);
+  fNEventReject->Fill("ZVTX>10",0);
   fHistList->Add(fNEventReject);
 
   fh1Xsec = new TProfile("fh1Xsec","xsec from pyxsec.root",1,0,1);
@@ -231,130 +363,136 @@ void AliPWG4HighPtQAMC::CreateOutputObjects() {
   fh1PtHardTrials = new TH1F("fh1PtHardTrials","PYTHIA Pt hard weight with trials;p_{T,hard}",350,-.5,349.5);
   fHistList->Add(fh1PtHardTrials);
 
-  fPtAll = new TH1F("fPtAll","PtAll",fgkNPtBins, fgkPtMin, fgkPtMax);
+  fPtAll = new TH1F("fPtAll","PtAll",fgkNPtBins, binsPt);
   fHistList->Add(fPtAll);
-  fPtSel = new TH1F("fPtSel","PtSel",fgkNPtBins, fgkPtMin, fgkPtMax);
+  fPtSel = new TH1F("fPtSel","PtSel",fgkNPtBins, binsPt);
   fHistList->Add(fPtSel);
-  
-  fPtAllminPtMCvsPtAll = new TH2F("fPtAllminPtMCvsPtAll","PtAllminPtMCvsPtAll",fgkNPtBins, fgkPtMin,fgkPtMax,fgkResPtBins,-1.,1.);
+
+  fPtSelFakes = new TH1F("fPtSelFakes","PtSelFakes",fgkNPtBins, binsPt);
+  fHistList->Add(fPtSelFakes);
+
+  fNPointTPCFakes = new TH1F("fNPointTPCFakes","fNPointTPCFakes",fgkNNClustersTPCBins, binsNClustersTPC);
+  fHistList->Add(fNPointTPCFakes);
+
+  fPtSelLargeLabel = new TH1F("fPtSelLargeLabel","PtSelLargeLabel",fgkNPtBins, binsPt);
+  fHistList->Add(fPtSelLargeLabel);
+
+  fMultRec = new TH1F("fMultRec","Multiple reconstruction of tracks",fgkMultBins, binsMult);
+  fHistList->Add(fMultRec);
+
+  fNPointTPCMultRec = new TH1F("fNPointTPCMultRec","Multiple reconstruction of tracks",fgkNNClustersTPCBins, binsNClustersTPC);
+  fHistList->Add(fNPointTPCMultRec);
+
+  fDeltaPtMultRec = new TH2F("fDeltaPtMultRec","Delta pT vs pT for multiple reconstructed tracks",50,0.,50.,40,-20.,20.);
+  fHistList->Add(fDeltaPtMultRec);
+
+  fPtAllvsPtMC = new TH2F("fPtAllvsPtMC","fPtAllvsPtMC;p_{T,MC};p_{T,rec}",fgkNPtBins, binsPt,fgkNPtBins, binsPt);
+  fHistList->Add(fPtAllvsPtMC);
+
+  fPtAllminPtMCvsPtAll = new TH2F("fPtAllminPtMCvsPtAll","PtAllminPtMCvsPtAll",fgkNPtBins, binsPt,fgkResPtBins,binsResPt);
   fPtAllminPtMCvsPtAll->SetXTitle("p_{t}^{MC}");
   fPtAllminPtMCvsPtAll->SetYTitle("(1/p_{t}^{All}-1/p_{t}^{MC})/(1/p_{t}^{MC})");
   fHistList->Add(fPtAllminPtMCvsPtAll);
+
+  fPtAllvsPtMCvsMult = new TH3F("fPtAllvsPtMCvsMult","fPtAllvsPtMCvsMult;p_{T,MC};p_{T,rec};N_{tracks}",fgkNPtBins, binsPt,fgkNPtBins, binsPt,fgkMultBins,binsMult);
+  fHistList->Add(fPtAllvsPtMCvsMult);
+
+  fPtAllminPtMCvsPtAllvsMult = new TH3F("fPtAllminPtMCvsPtAllvsMult","fPtAllminPtMCvsPtAllvsMult",fgkNPtBins, binsPt,fgkResPtBins,binsResPt,fgkMultBins,binsMult);
+  fPtAllminPtMCvsPtAllvsMult->SetXTitle("p_{t}^{MC}");
+  fPtAllminPtMCvsPtAllvsMult->SetYTitle("(1/p_{t}^{All}-1/p_{t}^{MC})/(1/p_{t}^{MC})");
+  fPtAllminPtMCvsPtAllvsMult->SetZTitle("N_{tracks}");
+  fHistList->Add(fPtAllminPtMCvsPtAllvsMult);
   
-  fPtAllminPtMCvsPtAllNPointTPC = new TH3F("fPtAllminPtMCvsPtAllNPointTPC","PtAllminPtMCvsPtAllNPointTPC",fgkNPtBins, fgkPtMin,fgkPtMax,fgkResPtBins,-1.,1.,160,0.5,160.5);
+  fPtAllminPtMCvsPtAllNPointTPC = new TH3F("fPtAllminPtMCvsPtAllNPointTPC","PtAllminPtMCvsPtAllNPointTPC",fgkNPtBins, binsPt,fgkResPtBins,binsResPt,fgkNNClustersTPCBins, binsNClustersTPC);
   fPtAllminPtMCvsPtAllNPointTPC->SetXTitle("p_{t}^{MC}");
   fPtAllminPtMCvsPtAllNPointTPC->SetYTitle("(1/p_{t}^{All}-1/p_{t}^{MC})/(1/p_{t}^{MC})");
-  fPtAllminPtMCvsPtAllNPointTPC->SetZTitle("N_{point,TPC}");
+  fPtAllminPtMCvsPtAllNPointTPC->SetZTitle("N_{cls,TPC}");
   fHistList->Add(fPtAllminPtMCvsPtAllNPointTPC);
 
-  fPtAllminPtMCvsPtAllDCAR = new TH3F("fPtAllminPtMCvsPtAllDCAR","PtAllminPtMCvsPtAllDCAR",fgkNPtBins, fgkPtMin,fgkPtMax,fgkResPtBins,-1.,1.,80,-0.2,0.2);
+  fPtAllminPtMCvsPtAllNPointTPCIter1 = new TH3F("fPtAllminPtMCvsPtAllNPointTPCIter1","PtAllminPtMCvsPtAllNPointTPCIter1",fgkNPtBins, binsPt,fgkResPtBins,binsResPt,fgkNNClustersTPCBins, binsNClustersTPC);
+  fPtAllminPtMCvsPtAllNPointTPCIter1->SetXTitle("p_{t}^{MC}");
+  fPtAllminPtMCvsPtAllNPointTPCIter1->SetYTitle("(1/p_{t}^{All}-1/p_{t}^{MC})/(1/p_{t}^{MC})");
+  fPtAllminPtMCvsPtAllNPointTPCIter1->SetZTitle("N_{clsIter1,TPC}");
+  fHistList->Add(fPtAllminPtMCvsPtAllNPointTPCIter1);
+
+  fPtAllminPtMCvsPtAllChi2TPC = new TH3F("fPtAllminPtMCvsPtAllChi2TPC","PtAllminPtMCvsPtAllChi2TPC",fgkNPtBins, binsPt,fgkResPtBins,binsResPt,fgkNChi2PerClusBins, binsChi2PerClus);
+  fPtAllminPtMCvsPtAllChi2TPC->SetXTitle("p_{t}^{MC}");
+  fPtAllminPtMCvsPtAllChi2TPC->SetYTitle("(1/p_{t}^{All}-1/p_{t}^{MC})/(1/p_{t}^{MC})");
+  fPtAllminPtMCvsPtAllChi2TPC->SetZTitle("#chi^{2} TPC");
+  fHistList->Add(fPtAllminPtMCvsPtAllChi2TPC);
+
+  fPtAllminPtMCvsPtAllChi2TPCIter1 = new TH3F("fPtAllminPtMCvsPtAllChi2TPCIter1","PtAllminPtMCvsPtAllChi2TPCIter1",fgkNPtBins, binsPt,fgkResPtBins,binsResPt,fgkNChi2PerClusBins, binsChi2PerClus);
+  fPtAllminPtMCvsPtAllChi2TPCIter1->SetXTitle("p_{t}^{MC}");
+  fPtAllminPtMCvsPtAllChi2TPCIter1->SetYTitle("(1/p_{t}^{All}-1/p_{t}^{MC})/(1/p_{t}^{MC})");
+  fPtAllminPtMCvsPtAllChi2TPCIter1->SetZTitle("#chi^{2} TPC Iter1");
+  fHistList->Add(fPtAllminPtMCvsPtAllChi2TPCIter1);
+
+  fPtAllminPtMCvsPtAllDCAR = new TH3F("fPtAllminPtMCvsPtAllDCAR","PtAllminPtMCvsPtAllDCAR",fgkNPtBins, binsPt,fgkResPtBins,binsResPt,fgkNDCA2DBins,binsDCA2D);
   fPtAllminPtMCvsPtAllDCAR->SetXTitle("p_{t}^{MC}");
   fPtAllminPtMCvsPtAllDCAR->SetYTitle("(1/p_{t}^{All}-1/p_{t}^{MC})/(1/p_{t}^{MC})");
   fPtAllminPtMCvsPtAllDCAR->SetZTitle("DCA_{R}");
   fHistList->Add(fPtAllminPtMCvsPtAllDCAR);
 
-  fPtAllminPtMCvsPtAllDCAZ = new TH3F("fPtAllminPtMCvsPtAllDCAZ","PtAllminPtMCvsPtAllDCAZ",fgkNPtBins, fgkPtMin,fgkPtMax,fgkResPtBins,-1.,1.,80,-2.,2.);
+  fPtAllminPtMCvsPtAllDCAZ = new TH3F("fPtAllminPtMCvsPtAllDCAZ","PtAllminPtMCvsPtAllDCAZ",fgkNPtBins, binsPt,fgkResPtBins,binsResPt,fgkNDCAZBins,binsDCAZ);
   fPtAllminPtMCvsPtAllDCAZ->SetXTitle("p_{t}^{MC}");
   fPtAllminPtMCvsPtAllDCAZ->SetYTitle("(1/p_{t}^{All}-1/p_{t}^{MC})/(1/p_{t}^{MC})");
   fPtAllminPtMCvsPtAllDCAZ->SetZTitle("DCA_{Z}");
   fHistList->Add(fPtAllminPtMCvsPtAllDCAZ);
 
-  fPtAllminPtMCvsPtAllPhi = new TH3F("fPtAllminPtMCvsPtAllPhi","PtAllminPtMCvsPtAllPhi",fgkNPtBins, fgkPtMin,fgkPtMax,fgkResPtBins,-1.,1.,fgkNPhiBins,kMinPhi,kMaxPhi);
+  fPtAllminPtMCvsPtAllPhi = new TH3F("fPtAllminPtMCvsPtAllPhi","PtAllminPtMCvsPtAllPhi",fgkNPtBins, binsPt,fgkResPtBins,binsResPt,fgkNPhiBins,binsPhi);
   fPtAllminPtMCvsPtAllPhi->SetXTitle("p_{t}^{MC}");
   fPtAllminPtMCvsPtAllPhi->SetYTitle("(1/p_{t}^{All}-1/p_{t}^{MC})/(1/p_{t}^{MC})");
   fPtAllminPtMCvsPtAllPhi->SetZTitle("#phi");
   fHistList->Add(fPtAllminPtMCvsPtAllPhi);
 
-  fPtAllminPtMCvsPtAllNPointITS = new TH3F("fPtAllminPtMCvsPtAllNPointITS","PtAllminPtMCvsPtAllNPointITS",fgkNPtBins, fgkPtMin,fgkPtMax,fgkResPtBins,-1.,1.,9,-0.5,8.5);
+  fPtAllminPtMCvsPtAllNPointITS = new TH3F("fPtAllminPtMCvsPtAllNPointITS","PtAllminPtMCvsPtAllNPointITS",fgkNPtBins, binsPt,fgkResPtBins,binsResPt,fgkNNPointITSBins,binsNPointITS);
   fPtAllminPtMCvsPtAllNPointITS->SetXTitle("p_{t}^{MC}");
   fPtAllminPtMCvsPtAllNPointITS->SetYTitle("(1/p_{t}^{All}-1/p_{t}^{MC})/(1/p_{t}^{MC})");
   fPtAllminPtMCvsPtAllNPointITS->SetZTitle("N_{point,ITS}}");
   fHistList->Add(fPtAllminPtMCvsPtAllNPointITS);
   
-  fPtAllminPtMCvsPtAllNSigmaToVertex = new TH3F("fPtAllminPtMCvsPtAllNSigmaToVertex","PtAllminPtMCvsPtAllNSigmaToVertex",fgkNPtBins, fgkPtMin,fgkPtMax,fgkResPtBins,-1.,1.,40,0.,8.);
+  fPtAllminPtMCvsPtAllNSigmaToVertex = new TH3F("fPtAllminPtMCvsPtAllNSigmaToVertex","PtAllminPtMCvsPtAllNSigmaToVertex",fgkNPtBins, binsPt,fgkResPtBins,binsResPt,fgkNNSigmaToVertexBins,binsNSigmaToVertex);
   fPtAllminPtMCvsPtAllNSigmaToVertex->SetXTitle("p_{t}^{MC}");
   fPtAllminPtMCvsPtAllNSigmaToVertex->SetYTitle("(1/p_{t}^{All}-1/p_{t}^{MC})/(1/p_{t}^{MC})");
   fPtAllminPtMCvsPtAllNSigmaToVertex->SetZTitle("N#sigma to vertex");
   fHistList->Add(fPtAllminPtMCvsPtAllNSigmaToVertex);
 
-  fPtAllminPtMCvsPtAllChi2C = new TH3F("fPtAllminPtMCvsPtAllChi2C","PtAllminPtMCvsPtAllChi2C",fgkNPtBins, fgkPtMin,fgkPtMax,fgkResPtBins,-1.,1.,20,0.,10.);
+  fPtAllminPtMCvsPtAllChi2C = new TH3F("fPtAllminPtMCvsPtAllChi2C","PtAllminPtMCvsPtAllChi2C",fgkNPtBins, binsPt,fgkResPtBins,binsResPt,fgkNChi2CBins,binsChi2C);
   fPtAllminPtMCvsPtAllChi2C->SetXTitle("p_{t}^{MC}");
   fPtAllminPtMCvsPtAllChi2C->SetYTitle("(1/p_{t}^{All}-1/p_{t}^{MC})/(1/p_{t}^{MC})");
   fPtAllminPtMCvsPtAllChi2C->SetZTitle("Constrained #chi^{2}");
   fHistList->Add(fPtAllminPtMCvsPtAllChi2C);
 
-  fPtAllminPtMCvsPtAllRel1PtUncertainty = new TH3F("fPtAllminPtMCvsPtAllRel1PtUncertainty","PtAllminPtMCvsPtAllRel1PtUncertainty",fgkNPtBins, fgkPtMin,fgkPtMax,fgkResPtBins,-1.,1.,30,0.,0.3);
+  fPtAllminPtMCvsPtAllRel1PtUncertainty = new TH3F("fPtAllminPtMCvsPtAllRel1PtUncertainty","PtAllminPtMCvsPtAllRel1PtUncertainty",fgkNPtBins, binsPt,fgkResPtBins,binsResPt,fgkNRel1PtUncertaintyBins,binsRel1PtUncertainty);
   fPtAllminPtMCvsPtAllRel1PtUncertainty->SetXTitle("p_{t}^{MC}");
   fPtAllminPtMCvsPtAllRel1PtUncertainty->SetYTitle("(1/p_{t}^{All}-1/p_{t}^{MC})/(1/p_{t}^{MC})");
   fPtAllminPtMCvsPtAllRel1PtUncertainty->SetZTitle("Rel1PtUncertainty");
   fHistList->Add(fPtAllminPtMCvsPtAllRel1PtUncertainty);
 
-  //ITSrefit
-  fPtSelITS = new TH1F("fPtSelITSrefit","PtSel",fgkNPtBins, fgkPtMin, fgkPtMax);
-  fHistListITS->Add(fPtSelITS);
-  
-  fPtITSminPtMCvsPtITS = new TH2F("fPtITSminPtMCvsPtITS","PtITSminPtMCvsPtITS",fgkNPtBins, fgkPtMin,fgkPtMax,fgkResPtBins,-1.,1.);
-  fPtITSminPtMCvsPtITS->SetXTitle("p_{t}^{MC}");
-  fPtITSminPtMCvsPtITS->SetYTitle("(1/p_{t}^{ITS}-1/p_{t}^{MC})/(1/p_{t}^{MC})");
-  fHistListITS->Add(fPtITSminPtMCvsPtITS);
-  
-  fPtITSminPtMCvsPtITSNPointTPC = new TH3F("fPtITSminPtMCvsPtITSNPointTPC","PtITSminPtMCvsPtITSNPointTPC",fgkNPtBins, fgkPtMin,fgkPtMax,fgkResPtBins,-1.,1.,160,0.5,160.5);
-  fPtITSminPtMCvsPtITSNPointTPC->SetXTitle("p_{t}^{MC}");
-  fPtITSminPtMCvsPtITSNPointTPC->SetYTitle("(1/p_{t}^{ITS}-1/p_{t}^{MC})/(1/p_{t}^{MC})");
-  fPtITSminPtMCvsPtITSNPointTPC->SetZTitle("N_{point,TPC}");
-  fHistListITS->Add(fPtITSminPtMCvsPtITSNPointTPC);
-    
-  fPtITSminPtMCvsPtITSDCAR = new TH3F("fPtITSminPtMCvsPtITSDCAR","PtITSminPtMCvsPtITSDCAR",fgkNPtBins, fgkPtMin,fgkPtMax,fgkResPtBins,-1.,1.,80,-0.2,0.2);
-  fPtITSminPtMCvsPtITSDCAR->SetXTitle("p_{t}^{MC}");
-  fPtITSminPtMCvsPtITSDCAR->SetYTitle("(1/p_{t}^{ITS}-1/p_{t}^{MC})/(1/p_{t}^{MC})");
-  fPtITSminPtMCvsPtITSDCAR->SetZTitle("DCA_{R}");
-  fHistListITS->Add(fPtITSminPtMCvsPtITSDCAR);
-  
-  fPtITSminPtMCvsPtITSDCAZ = new TH3F("fPtITSminPtMCvsPtITSDCAZ","PtITSminPtMCvsPtITSDCAZ",fgkNPtBins, fgkPtMin,fgkPtMax,fgkResPtBins,-1.,1.,80,-2.,2.);
-  fPtITSminPtMCvsPtITSDCAZ->SetXTitle("p_{t}^{MC}");
-  fPtITSminPtMCvsPtITSDCAZ->SetYTitle("(1/p_{t}^{ITS}-1/p_{t}^{MC})/(1/p_{t}^{MC})");
-  fPtITSminPtMCvsPtITSDCAZ->SetZTitle("DCA_{Z}");
-  fHistListITS->Add(fPtITSminPtMCvsPtITSDCAZ);
-  
-  fPtITSminPtMCvsPtITSPhi = new TH3F("fPtITSminPtMCvsPtITSPhi","PtITSminPtMCvsPtITSPhi",fgkNPtBins, fgkPtMin,fgkPtMax,fgkResPtBins,-1.,1.,fgkNPhiBins,kMinPhi,kMaxPhi);
-  fPtITSminPtMCvsPtITSPhi->SetXTitle("p_{t}^{MC}");
-  fPtITSminPtMCvsPtITSPhi->SetYTitle("(1/p_{t}^{ITS}-1/p_{t}^{MC})/(1/p_{t}^{MC})");
-  fPtITSminPtMCvsPtITSPhi->SetZTitle("#phi");
-  fHistListITS->Add(fPtITSminPtMCvsPtITSPhi);
-  
-  fPtITSminPtMCvsPtITSNPointITS = new TH3F("fPtITSminPtMCvsPtITSNPointITS","PtITSminPtMCvsPtITSNPointITS",fgkNPtBins, fgkPtMin,fgkPtMax,fgkResPtBins,-1.,1.,9,-0.5,8.5);
-  fPtITSminPtMCvsPtITSNPointITS->SetXTitle("p_{t}^{MC}");
-  fPtITSminPtMCvsPtITSNPointITS->SetYTitle("(1/p_{t}^{ITS}-1/p_{t}^{MC})/(1/p_{t}^{MC})}");
-  fPtITSminPtMCvsPtITSNPointITS->SetZTitle("N_{point,ITS}}");
-  fHistListITS->Add(fPtITSminPtMCvsPtITSNPointITS); 
-  
-  fPtITSminPtMCvsPtITSNSigmaToVertex = new TH3F("fPtITSminPtMCvsPtITSNSigmaToVertex","PtITSminPtMCvsPtITSNSigmaToVertex",fgkNPtBins, fgkPtMin,fgkPtMax,fgkResPtBins,-1.,1.,40,0.,8.);
-  fPtITSminPtMCvsPtITSNSigmaToVertex->SetXTitle("p_{t}^{MC}");
-  fPtITSminPtMCvsPtITSNSigmaToVertex->SetYTitle("(1/p_{t}^{ITS}-1/p_{t}^{MC})/(1/p_{t}^{MC})");
-  fPtITSminPtMCvsPtITSNSigmaToVertex->SetZTitle("N#sigma to vertex");
-  fHistListITS->Add(fPtITSminPtMCvsPtITSNSigmaToVertex);
-
-  fPtITSminPtMCvsPtITSChi2C = new TH3F("fPtITSminPtMCvsPtITSChi2C","PtITSminPtMCvsPtITSChi2C",fgkNPtBins, fgkPtMin,fgkPtMax,fgkResPtBins,-1.,1.,20,0.,10.);
-  fPtITSminPtMCvsPtITSChi2C->SetXTitle("p_{t}^{MC}");
-  fPtITSminPtMCvsPtITSChi2C->SetYTitle("(1/p_{t}^{ITS}-1/p_{t}^{MC})/(1/p_{t}^{MC})");
-  fPtITSminPtMCvsPtITSChi2C->SetZTitle("Constrained #chi^{2}");
-  fHistListITS->Add(fPtITSminPtMCvsPtITSChi2C);
-
-  fPtITSminPtMCvsPtITSRel1PtUncertainty = new TH3F("fPtITSminPtMCvsPtITSRel1PtUncertainty","PtITSminPtMCvsPtITSRel1PtUncertainty",fgkNPtBins, fgkPtMin,fgkPtMax,fgkResPtBins,-1.,1.,30,0.,0.3);
-  fPtITSminPtMCvsPtITSRel1PtUncertainty->SetXTitle("p_{t}^{MC}");
-  fPtITSminPtMCvsPtITSRel1PtUncertainty->SetYTitle("(1/p_{t}^{ITS}-1/p_{t}^{MC})/(1/p_{t}^{MC})");
-  fPtITSminPtMCvsPtITSRel1PtUncertainty->SetZTitle("Rel1PtUncertainty");
-  fHistListITS->Add(fPtITSminPtMCvsPtITSRel1PtUncertainty);
-
-  fPtAllMC = new TH1F("fPtAllMC","PtAll",fgkNPtBins, fgkPtMin, fgkPtMax);
+
+  fPtAllMC = new TH1F("fPtAllMC","PtAll",fgkNPtBins, binsPt);
   fHistList->Add(fPtAllMC);
-  fPtSelMC = new TH1F("fPtSelMC","PtSel",fgkNPtBins, fgkPtMin, fgkPtMax);
+  fPtSelMC = new TH1F("fPtSelMC","PtSel",fgkNPtBins, binsPt);
   fHistList->Add(fPtSelMC);
-  fPtSelMCITS = new TH1F("fPtSelMCITS","PtSel",fgkNPtBins, fgkPtMin, fgkPtMax);
-  fHistList->Add(fPtSelMCITS);
-  
+
   TH1::AddDirectory(oldStatus); 
 
+  PostData(0, fHistList);
+
+  if(binsPt)                delete [] binsPt;
+  if(binsResPt)             delete [] binsResPt;
+  if(binsPhi)               delete [] binsPhi;
+  if(binsNClustersTPC)      delete [] binsNClustersTPC;
+  if(binsDCA2D)             delete [] binsDCA2D;
+  if(binsDCAZ)              delete [] binsDCAZ;
+  if(binsNPointITS)         delete [] binsNPointITS;
+  if(binsNSigmaToVertex)    delete [] binsNSigmaToVertex;
+  if(binsChi2C)             delete [] binsChi2C;
+  if(binsEta)               delete [] binsEta;
+  if(binsRel1PtUncertainty) delete [] binsRel1PtUncertainty;
+  if(binsChi2PerClus)       delete [] binsChi2PerClus;
+  if(binsMult)              delete [] binsMult;
+  
 }
 
 //________________________________________________________________________
@@ -395,9 +533,17 @@ Bool_t AliPWG4HighPtQAMC::SelectEvent() {
   if(fMC) {
     AliDebug(2,Form("MC particles: %d", fMC->GetNumberOfTracks()));
     fStack = fMC->Stack();                //Particles Stack
-    AliDebug(2,Form("MC particles stack: %d", fStack->GetNtrack()));
+    if(fStack) { 
+      AliDebug(2,Form("MC particles stack: %d", fStack->GetNtrack()));
+    }
+    else {
+      AliDebug(2,Form("ERROR: Could not retrieve MC eventHandler"));
+      fNEventReject->Fill("noStack",1);
+      selectEvent = kFALSE;
+      return selectEvent;
+    }
   } else {
-    AliDebug(2,Form("ERROR: Could not retrieve MC eventHandler"));
+    AliDebug(2,Form("ERROR: Could not retrieve stack"));
     fNEventReject->Fill("noMCEvent",1);
     selectEvent = kFALSE;
     return selectEvent;
@@ -411,30 +557,39 @@ Bool_t AliPWG4HighPtQAMC::SelectEvent() {
   }
 
   //Check if vertex is reconstructed
-  const AliESDVertex *vtx = fESD->GetPrimaryVertex();
+  if(fTrackType==1) fVtx = fESD->GetPrimaryVertexTPC();
+  else              fVtx = fESD->GetPrimaryVertexSPD();
+
+  if(!fVtx) {
+    fNEventReject->Fill("noVTX",1);
+    selectEvent = kFALSE;
+    return selectEvent;
+  }
+   
+  if(!fVtx->GetStatus()) {
+    fNEventReject->Fill("VtxStatus",1);
+    selectEvent = kFALSE;
+    return selectEvent;
+  }
+  
   // Need vertex cut
-  TString vtxName(vtx->GetName());
-  if(vtx->GetNContributors() < 2 || (vtxName.Contains("TPCVertex")) ) {
-    // SPD vertex
-    vtx = fESD->GetPrimaryVertexSPD();
-    if(vtx->GetNContributors()<2) {
-      vtx = 0x0;
-      fNEventReject->Fill("noVTX",1);
-      selectEvent = kFALSE;
-      return selectEvent;
-    }
+  //  TString vtxName(fVtx->GetName());
+  if(fVtx->GetNContributors()<2) {
+    fNEventReject->Fill("NCont<2",1);
+    selectEvent = kFALSE;
+    return selectEvent;
   }
-
+  
   //Check if z-vertex < 10 cm
   double primVtx[3];
-  vtx->GetXYZ(primVtx);
+  fVtx->GetXYZ(primVtx);
   if(TMath::Sqrt(primVtx[0]*primVtx[0] + primVtx[1]*primVtx[1])>1. || TMath::Abs(primVtx[2]>10.)){
     fNEventReject->Fill("ZVTX>10",1);
     selectEvent = kFALSE;
     return selectEvent;
   }
-  
-  AliDebug(2,Form("Vertex title %s, status %d, nCont %d\n",vtx->GetTitle(), vtx->GetStatus(), vtx->GetNContributors()));
+
+  AliDebug(2,Form("Vertex title %s, status %d, nCont %d\n",fVtx->GetTitle(), fVtx->GetStatus(), fVtx->GetNContributors()));
 
   return selectEvent;
 
@@ -450,9 +605,7 @@ void AliPWG4HighPtQAMC::Exec(Option_t *) {
 
   if(!SelectEvent()) {
     // Post output data
-    fNEventReject->Fill("NTracks<2",1);
     PostData(0, fHistList);
-    PostData(1, fHistListITS);
     return;
   }
 
@@ -491,60 +644,115 @@ void AliPWG4HighPtQAMC::Exec(Option_t *) {
   Float_t nSigmaToVertex    = 0.;
   Float_t relUncertainty1Pt = 0.;
 
+  int mult = fTrackCuts->CountAcceptedTracks(fESD);
+
   for (Int_t iTrack = 0; iTrack < nTracks; iTrack++) {
     
-    AliESDtrack *track;
+    AliESDtrack *track = 0;
     AliESDtrack *esdtrack = fESD->GetTrack(iTrack);
     if(!esdtrack) continue;
-    AliExternalTrackParam *trackTPC = (AliExternalTrackParam *)esdtrack->GetTPCInnerParam();
 
-    if(fTrackType==1)
+    if(fTrackType==1) {
+      track = AliESDtrackCuts::GetTPCOnlyTrack(fESD,esdtrack->GetID());
+      if(!track) continue;
+    }
+    else if(fTrackType==2) {
       track = AliESDtrackCuts::GetTPCOnlyTrack(fESD,esdtrack->GetID());
+      if(!track) continue;
+      
+      AliExternalTrackParam exParam;
+      Bool_t relate = track->RelateToVertexTPC(fVtx,fESD->GetMagneticField(),kVeryBig,&exParam);
+      if( !relate ) {
+       delete track;
+       continue;
+      }
+      track->Set(exParam.GetX(),exParam.GetAlpha(),exParam.GetParameter(),exParam.GetCovariance());
+    }
+    else if(fTrackType==7) {
+      //use global constrained track
+      track = new AliESDtrack(*esdtrack);
+      //      track = esdtrack;
+      //      track->Set(esdtrack->GetConstrainedParam()->GetX(),esdtrack->GetConstrainedParam()->GetAlpha(),esdtrack->GetConstrainedParam()->GetParameter(),esdtrack->GetConstrainedParam()->GetCovariance());
+    }
     else
       track = esdtrack;
 
-    
     if(!track) continue;
+    
+    if(fTrackType==2) {
+      //Cut on chi2 of constrained fit
+      if(track->GetConstrainedChi2TPC() > fSigmaConstrainedMax*fSigmaConstrainedMax) {
+       delete track;
+       continue;
+      }
+    }
 
     Int_t label = TMath::Abs(track->GetLabel());
-    if(label>=nMCtracks)continue;
+    if(label>=nMCtracks) {
+      if (fTrackCuts->AcceptTrack(track)) { fPtSelLargeLabel->Fill(pt); }
+      if(fTrackType==1 || fTrackType==2 || fTrackType==7) delete track;
+      continue;
+    }
+
     TParticle *particle = fStack->Particle(label) ;
-    if(!particle) continue;
+    if(!particle) {
+      if(fTrackType==1 || fTrackType==2 || fTrackType==7) {
+       if(track) delete track;
+      }
+      continue;
+    }
 
     ptMC = particle->Pt();
 
-    if(fTrackType==0) {       //Global
-      pt  = track->Pt();
-      phi = track->Phi();
-      track->GetImpactParameters(dca2D,dcaZ);
-    }
-    else if(fTrackType==1) {  //TPConly
-      pt  = trackTPC->Pt();
-      phi = trackTPC->Phi();
-      track->GetImpactParametersTPC(dca2D,dcaZ);
-    }
-    else {continue;}
-
+    if(fTrackType==1 || fTrackType==2) 
+      track->GetImpactParametersTPC(dca2D,dcaZ);  //TPConly
+    else
+      track->GetImpactParameters(dca2D,dcaZ);     //Global
     
     UChar_t itsMap = track->GetITSClusterMap();
     for (Int_t i=0; i < 6; i++) {
       if (itsMap & (1 << i))
        nPointITS ++;
     }
-    nSigmaToVertex = fTrackCuts->GetSigmaToVertex(track);// Calculates the number of sigma to the vertex for a track.
-    chi2C = track->GetConstrainedChi2();
-    relUncertainty1Pt = TMath::Sqrt(track->GetSigma1Pt2())*pt;
     
-    fPtAll->Fill(pt);
+    //    fPtAll->Fill(pt);
     fPtAllMC->Fill(ptMC);
 
     if (fTrackCuts->AcceptTrack(track)) {
 
+      if(fTrackType==7) {
+       if(fTrackCutsReject ) {
+         if(fTrackCutsReject->AcceptTrack(track) ) {
+           if(track) delete track;
+           continue;
+         }
+       }
+       
+       if(esdtrack->GetConstrainedParam()) 
+         track->Set(esdtrack->GetConstrainedParam()->GetX(),esdtrack->GetConstrainedParam()->GetAlpha(),esdtrack->GetConstrainedParam()->GetParameter(),esdtrack->GetConstrainedParam()->GetCovariance());
+      }
+
+      pt  = track->Pt();
+      phi = track->Phi();
+
+      nSigmaToVertex = fTrackCuts->GetSigmaToVertex(track);// Calculates the number of sigma to the vertex for a track.
+      chi2C = track->GetConstrainedChi2();
+      relUncertainty1Pt = TMath::Sqrt(track->GetSigma1Pt2())*pt;
+
       fPtSel->Fill(pt);
-      
+      if(track->GetLabel()<0) {
+        fPtSelFakes->Fill(pt);
+        fNPointTPCFakes->Fill(track->GetTPCNcls());
+      }
       fPtSelMC->Fill(ptMC);
+      fPtAllvsPtMC->Fill(ptMC,pt);
       fPtAllminPtMCvsPtAll->Fill(ptMC,(1./pt-1./ptMC)/(1./ptMC) );
       fPtAllminPtMCvsPtAllNPointTPC->Fill(ptMC,(1./pt-1./ptMC)/(1./ptMC),track->GetTPCNcls());
+      fPtAllminPtMCvsPtAllNPointTPCIter1->Fill(ptMC,(1./pt-1./ptMC)/(1./ptMC),track->GetTPCNclsIter1());
+      if(track->GetTPCNcls()>0.) 
+       fPtAllminPtMCvsPtAllChi2TPC->Fill(ptMC,(1./pt-1./ptMC)/(1./ptMC),track->GetTPCchi2()/track->GetTPCNcls());
+      if(track->GetTPCNclsIter1()>0.) 
+       fPtAllminPtMCvsPtAllChi2TPCIter1->Fill(ptMC,(1./pt-1./ptMC)/(1./ptMC),track->GetTPCchi2Iter1()/track->GetTPCNclsIter1());
       fPtAllminPtMCvsPtAllDCAR->Fill(ptMC,(1./pt-1./ptMC)/(1./ptMC),dca2D);
       fPtAllminPtMCvsPtAllDCAZ->Fill(ptMC,(1./pt-1./ptMC)/(1./ptMC),dcaZ);
       fPtAllminPtMCvsPtAllPhi->Fill(ptMC,(1./pt-1./ptMC)/(1./ptMC),phi);
@@ -552,32 +760,66 @@ void AliPWG4HighPtQAMC::Exec(Option_t *) {
       fPtAllminPtMCvsPtAllNSigmaToVertex->Fill(ptMC,(1./pt-1./ptMC)/(1./ptMC),nSigmaToVertex);
       fPtAllminPtMCvsPtAllChi2C->Fill(ptMC,(1./pt-1./ptMC)/(1./ptMC),chi2C);
       fPtAllminPtMCvsPtAllRel1PtUncertainty->Fill(ptMC,(1./pt-1./ptMC)/(1./ptMC),relUncertainty1Pt);
-    }//fTrackCuts selection
-    
-    
-    
-    //ITSrefit selection
-    if (fTrackCutsITS->AcceptTrack(track) && fTrackType==0) {
+
+      fPtAllvsPtMCvsMult->Fill(ptMC,pt,mult);
+      fPtAllminPtMCvsPtAllvsMult->Fill(ptMC,(1./pt-1./ptMC)/(1./ptMC), mult);
+
+      //Check if track is reconstructed multiple times
+      /*
+      int multCounter = 1;
+      for (Int_t iTrack2 = iTrack+1; iTrack2 < nTracks; iTrack2++) {
+       //   AliESDtrack *track2 = GetTrackForAnalysis(iTrack2);
+       AliESDtrack *track2;
+       AliESDtrack *esdtrack2 = fESD->GetTrack(iTrack2);
+       if(!esdtrack2) continue;
       
-      fPtSelITS->Fill(pt);
-      fPtSelMCITS->Fill(ptMC);
-      fPtITSminPtMCvsPtITS->Fill(ptMC,(1./pt-1./ptMC)/(1./ptMC) );
-      fPtITSminPtMCvsPtITSNPointTPC->Fill(ptMC,(1./pt-1./ptMC)/(1./ptMC),track->GetTPCNcls());
-      fPtITSminPtMCvsPtITSDCAR->Fill(ptMC,(1./pt-1./ptMC)/(1./ptMC),dca2D);
-      fPtITSminPtMCvsPtITSDCAZ->Fill(ptMC,(1./pt-1./ptMC)/(1./ptMC),dcaZ);
-      fPtITSminPtMCvsPtITSPhi->Fill(ptMC,(pt-ptMC)/(pt),phi);
-      fPtITSminPtMCvsPtITSNPointITS->Fill(ptMC,(pt-ptMC)/(pt),nPointITS);
-      fPtITSminPtMCvsPtITSNSigmaToVertex->Fill(ptMC,(1./pt-1./ptMC)/(1./ptMC),nSigmaToVertex);
-      fPtITSminPtMCvsPtITSChi2C->Fill(ptMC,(1./pt-1./ptMC)/(1./ptMC),chi2C);
-      fPtITSminPtMCvsPtITSRel1PtUncertainty->Fill(ptMC,(1./pt-1./ptMC)/(1./ptMC),relUncertainty1Pt);
-    }//fTrackCutsITS loop
-    
+       if(fTrackType==1)
+         track2 = AliESDtrackCuts::GetTPCOnlyTrack(fESD,esdtrack2->GetID());
+       else if(fTrackType==2) {
+         track2 = AliESDtrackCuts::GetTPCOnlyTrack(fESD,esdtrack2->GetID());
+         if(!track2) { 
+           continue;
+         }
+         AliExternalTrackParam exParam2;
+         Bool_t relate = track2->RelateToVertexTPC(fVtx,fESD->GetMagneticField(),kVeryBig,&exParam2);
+         if( !relate ) {
+           delete track2;
+           continue;
+         }
+         track2->Set(exParam2.GetX(),exParam2.GetAlpha(),exParam2.GetParameter(),exParam2.GetCovariance());
+       }
+       else
+         track2 = esdtrack2;
+       if(!track2) {
+         continue;
+       }
+      
+       if (fTrackCuts->AcceptTrack(track2)) {
+         Int_t label2 = TMath::Abs(track2->GetLabel());
+         if(label==label2) {
+           fNPointTPCMultRec->Fill(track->GetTPCNcls());
+           fNPointTPCMultRec->Fill(track2->GetTPCNcls());
+           fDeltaPtMultRec->Fill(track->Pt(),track->Pt()-track2->Pt());
+           multCounter++;
+         }
+       }
+       if(fTrackType==1 || fTrackType==2) delete track2;
+      }//track2 loop
+      if(multCounter>1) fMultRec->Fill(multCounter);
+      */
+
+    }//fTrackCuts selection
+
+
+    if(fTrackType==1 || fTrackType==2 || fTrackType==7) {
+      if(track) delete track;    
+    }
+
   }//ESD track loop
    
   // Post output data
   PostData(0, fHistList);
-  PostData(1, fHistListITS);
-
+  
 }
 //________________________________________________________________________
 Bool_t AliPWG4HighPtQAMC::PythiaInfoFromFile(const char* currFile,Float_t &fXsec,Float_t &fTrials){