]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG1/ITS/AliAnalysisTaskITSTrackingCheck.cxx
Changes to run on PbPb events
[u/mrichter/AliRoot.git] / PWG1 / ITS / AliAnalysisTaskITSTrackingCheck.cxx
index 1203fce786b8e6026b11c3d52ca1ed4e8650c593..607e521599c7da88fef48fb8075c4b4ff0226f42 100644 (file)
 #include "AliESDfriend.h"
 #include "AliESDInputHandler.h"
 #include "AliESDInputHandlerRP.h"
+#include "AliESDtrackCuts.h"
 #include "AliTrackPointArray.h"
 #include "../ITS/AliITSRecPoint.h"
 
+#include "AliInputEventHandler.h"
 #include "AliMCEventHandler.h"
 #include "AliMCEvent.h"
 #include "AliStack.h"
 
 
 ClassImp(AliAnalysisTaskITSTrackingCheck)
+AliAnalysisTaskITSTrackingCheck::AliAnalysisTaskITSTrackingCheck() : 
+AliAnalysisTaskSE(), 
+fReadMC(kFALSE),
+fReadRPLabels(kFALSE),
+fFillNtuples(kFALSE),
+fUseITSSAforNtuples(kFALSE),
+fUsePhysSel(kFALSE),
+fESD(0), 
+fOutput(0), 
+fHistNEvents(0),
+fHistNEventsFrac(0),
+fHistNtracks(0),
+fHistNclsITSMI(0),
+fHistNclsITSSA(0),
+fHistNclsITSSAInAcc(0),
+fHistClusterMapITSMI(0),
+fHistClusterMapITSMIok(0),
+fHistClusterMapITSMIbad(0),
+fHistClusterMapITSMIskipped(0),
+fHistClusterMapITSMIoutinz(0),
+fHistClusterMapITSMInorefit(0),
+fHistClusterMapITSMInocls(0),
+fHistClusterMapITSMIokoutinzbad(0),
+fHistClusterMapITSSA(0),
+fHistClusterMapITSSAok(0),
+fHistClusterMapITSSAbad(0),
+fHistClusterMapITSSAskipped(0),
+fHistClusterMapITSSAoutinz(0),
+fHistClusterMapITSSAnorefit(0),
+fHistClusterMapITSSAnocls(0),
+fHistClusterMapITSSAokoutinzbad(0),
+fHistClusterMapITSSAInAcc(0),
+fHistClusterMapITSSAokInAcc(0),
+fHistClusterMapITSSAbadInAcc(0),
+fHistClusterMapITSSAskippedInAcc(0),
+fHistClusterMapITSSAoutinzInAcc(0),
+fHistClusterMapITSSAnorefitInAcc(0),
+fHistClusterMapITSSAnoclsInAcc(0),
+fHistClusterMapITSSAokoutinzbadInAcc(0),
+fHistClusterMapModuleITSSAokInAcc(0),
+fHistClusterMapModuleITSSAbadInAcc(0),
+fHistClusterMapModuleITSSAnoclsInAcc(0),
+fHistClusterMapModuleITSMIokInAcc(0),
+fHistClusterMapModuleITSMIbadInAcc(0),
+fHistClusterMapModuleITSMInoclsInAcc(0),
+fHistZatSPDouter0ok(0),
+fHistZatSPDouter1ok(0),
+fHistZatSPDouter2ok(0),
+fHistZatSPDouter3ok(0),
+fHistZatSPDouter0notok(0),
+fHistZatSPDouter1notok(0),
+fHistZatSPDouter2notok(0),
+fHistZatSPDouter3notok(0),
+fHistxlocSDDok(0),
+fHistzlocSDDok(0),
+fHistxlocVSmodSDDok(0),
+fHistxlocSDDall(0),
+fHistzlocSDDall(0),
+fHistPhiTPCInAcc(0),
+fHistPtTPC(0),
+fHistPtTPCInAcc(0),
+fHistPtTPCInAccMCtwoSPD(0),
+fHistPtTPCInAccMConeSPD(0),
+fHistdEdxVSPtTPCInAcc(0),
+fHistdEdxVSPtITSTPCsel(0),
+fHistPtVSphiTPCInAcc(0),
+fHistPtTPCInAccNoTRDout(0),
+fHistPtTPCInAccNoTOFout(0),
+fHistPtTPCInAccWithPtTPCAtInnerWall(0),
+fHistPtTPCInAccWithPtTPCAtVtx(0),
+fHistDeltaPtTPC(0),
+fHistPtTPCInAccP(0),
+fHistPtTPCInAccS(0),
+fHistPtTPCInAccPfromStrange(0),
+fHistPtTPCInAccSfromStrange(0),
+fHistPtTPCInAccSfromMat(0),
+fHistPtITSMI2(0),
+fHistPtITSMI3(0),
+fHistPtITSMI4(0),
+fHistPtITSMI5(0),
+fHistPtITSMI6(0),
+fHistPtITSMISPD(0),
+fHistPtITSMIoneSPD(0),
+fHistPtITSMI2InAcc(0),
+fHistPtITSMI3InAcc(0),
+fHistPtITSMI4InAcc(0),
+fHistPtITSMI5InAcc(0),
+fHistPtITSMI6InAcc(0),
+fHistPtITSMISPDInAcc(0),
+fHistPtITSMIoneSPDInAcc(0),
+fHistPtITSMI2InAccFake(0),
+fHistPtITSMI3InAccFake(0),
+fHistPtITSMI4InAccFake(0),
+fHistPtITSMI5InAccFake(0),
+fHistPtITSMI6InAccFake(0),
+fHistPtITSMISPDInAccFake(0),
+fHistPtITSMIoneSPDInAccFake(0),
+fHistPtITSMIoneSPDthreeSDDSSDInAcc(0),
+fHistPtITSTPCsel(0),
+fHistPtITSTPCselP(0),
+fHistPtITSTPCselS(0),
+fHistPtITSTPCselPfromStrange(0),
+fHistPtITSTPCselSfromStrange(0),
+fHistPtITSTPCselSfromMat(0),
+fHistPtITSMI2InAccP(0),
+fHistPtITSMI3InAccP(0),
+fHistPtITSMI4InAccP(0),
+fHistPtITSMI5InAccP(0),
+fHistPtITSMI6InAccP(0),
+fHistPtITSMISPDInAccP(0),
+fHistPtITSMIoneSPDInAccP(0),
+fHistPtITSMI2InAccS(0),
+fHistPtITSMI3InAccS(0),
+fHistPtITSMI4InAccS(0),
+fHistPtITSMI5InAccS(0),
+fHistPtITSMI6InAccS(0),
+fHistPtITSMISPDInAccS(0),
+fHistPtITSMIoneSPDInAccS(0),
+fHistPtITSMIokbadoutinz6(0),
+fHistPtITSMIokbadoutinz4InAcc(0),
+fHistPtITSMIokbadoutinz5InAcc(0),
+fHistPtITSMIokbadoutinz6InAcc(0),
+fHistPhiITSMIokbadoutinz6InAcc(0),
+fHistRProdVtxInAccP(0),
+fHistRProdVtxInAccS(0),
+fHistd0rphiTPCInAccP150200(0),
+fHistd0rphiTPCInAccP500700(0),
+fHistd0rphiTPCInAccP10001500(0),
+fHistd0rphiTPCInAccS150200(0),
+fHistd0rphiTPCInAccS500700(0),
+fHistd0rphiTPCInAccS10001500(0),
+fHistd0rphiITSMISPDInAccP150200(0),
+fHistd0rphiITSMISPDInAccP500700(0),
+fHistd0rphiITSMISPDInAccP10001500(0),
+fHistd0rphiITSMISPDInAccS150200(0),
+fHistd0rphiITSMISPDInAccS500700(0),
+fHistd0rphiITSMISPDInAccS10001500(0),
+fHistd0rphiITSMIoneSPDInAccP150200(0),
+fHistd0rphiITSMIoneSPDInAccP350450(0),
+fHistd0rphiITSMIoneSPDInAccP500700(0),
+fHistd0rphiITSMIoneSPDInAccP10001500(0),
+fHistd0rphiITSMIoneSPDInAccP25004000(0),
+fHistd0rphiITSMIoneSPDInAccP40008000(0),
+fHistd0zITSMIoneSPDInAccP150200(0),
+fHistd0zITSMIoneSPDInAccP500700(0),
+fHistd0zITSMIoneSPDInAccP10001500(0),
+fHistd0zVSetaTPCInAccP10001500(0),
+fHistd0rphiVSphiITSMIoneSPDInAccP10001500(0),
+fHistd0rphiVSetaITSMIoneSPDInAccP10001500(0),
+fHistd0rphiITSMIoneSPDInAccS150200(0),
+fHistd0rphiITSMIoneSPDInAccS350450(0),
+fHistd0rphiITSMIoneSPDInAccS500700(0),
+fHistd0rphiITSMIoneSPDInAccS500700from22(0),
+fHistd0rphiITSMIoneSPDInAccS500700from211(0),
+fHistd0rphiITSMIoneSPDInAccS500700from310(0),
+fHistd0rphiITSMIoneSPDInAccS500700from321(0),
+fHistd0rphiITSMIoneSPDInAccS500700from3122(0),
+fHistd0rphiITSMIoneSPDInAccS10001500(0),
+fHistd0rphiITSMIoneSPDInAccS25004000(0),
+fHistd0rphiITSMIoneSPDInAccS40008000(0),
+fHistd0rphiITSMIoneSPDInAccS150200fromStrange(0),
+fHistd0rphiITSMIoneSPDInAccS150200fromMat(0),
+fHistd0rphiITSMIoneSPDInAccS350450fromStrange(0),
+fHistd0rphiITSMIoneSPDInAccS350450fromMat(0),
+fHistd0rphiITSMIoneSPDInAccS500700fromStrange(0),
+fHistd0rphiITSMIoneSPDInAccS500700fromMat(0),
+fHistd0rphiITSMIoneSPDInAccS10001500fromStrange(0),
+fHistd0rphiITSMIoneSPDInAccS10001500fromMat(0),
+fHistd0rphiITSMIoneSPDInAccS25004000fromStrange(0),
+fHistd0rphiITSMIoneSPDInAccS25004000fromMat(0),
+fHistd0rphiITSMIoneSPDInAccS40008000fromStrange(0),
+fHistd0rphiITSMIoneSPDInAccS40008000fromMat(0),
+fHistd0zITSMIoneSPDInAccS150200(0),
+fHistd0zITSMIoneSPDInAccS500700(0),
+fHistd0zITSMIoneSPDInAccS10001500(0),
+fHistPDGMoth(0),
+fHistPDGMoth150200(0),
+fHistPDGMoth500700(0),
+fHistPDGMoth10001500(0),
+fHistPDGTrk(0),
+fNtupleESDTracks(0),
+fNtupleITSAlignExtra(0),
+fNtupleITSAlignSPDTracklets(0),
+fESDtrackCutsTPC(0),
+fESDtrackCutsITSTPC(0)
+{
+  // Constructor
+}
 
 //________________________________________________________________________
 AliAnalysisTaskITSTrackingCheck::AliAnalysisTaskITSTrackingCheck(const char *name) : 
-AliAnalysisTask(name, "ITSTrackingCheckTask"), 
+AliAnalysisTaskSE(name), 
 fReadMC(kFALSE),
 fReadRPLabels(kFALSE),
 fFillNtuples(kFALSE),
 fUseITSSAforNtuples(kFALSE),
+fUsePhysSel(kFALSE),
 fESD(0), 
-fESDfriend(0),
 fOutput(0), 
+fHistNEvents(0),
+fHistNEventsFrac(0),
 fHistNtracks(0),
 fHistNclsITSMI(0),
 fHistNclsITSSA(0),
@@ -100,9 +292,40 @@ fHistClusterMapITSSAokoutinzbadInAcc(0),
 fHistClusterMapModuleITSSAokInAcc(0),
 fHistClusterMapModuleITSSAbadInAcc(0),
 fHistClusterMapModuleITSSAnoclsInAcc(0),
+fHistClusterMapModuleITSMIokInAcc(0),
+fHistClusterMapModuleITSMIbadInAcc(0),
+fHistClusterMapModuleITSMInoclsInAcc(0),
+fHistZatSPDouter0ok(0),
+fHistZatSPDouter1ok(0),
+fHistZatSPDouter2ok(0),
+fHistZatSPDouter3ok(0),
+fHistZatSPDouter0notok(0),
+fHistZatSPDouter1notok(0),
+fHistZatSPDouter2notok(0),
+fHistZatSPDouter3notok(0),
+fHistxlocSDDok(0),
+fHistzlocSDDok(0),
+fHistxlocVSmodSDDok(0),
+fHistxlocSDDall(0),
+fHistzlocSDDall(0),
 fHistPhiTPCInAcc(0),
 fHistPtTPC(0),
 fHistPtTPCInAcc(0),
+fHistPtTPCInAccMCtwoSPD(0),
+fHistPtTPCInAccMConeSPD(0),
+fHistdEdxVSPtTPCInAcc(0),
+fHistdEdxVSPtITSTPCsel(0),
+fHistPtVSphiTPCInAcc(0),
+fHistPtTPCInAccNoTRDout(0),
+fHistPtTPCInAccNoTOFout(0),
+fHistPtTPCInAccWithPtTPCAtInnerWall(0),
+fHistPtTPCInAccWithPtTPCAtVtx(0),
+fHistDeltaPtTPC(0),
+fHistPtTPCInAccP(0),
+fHistPtTPCInAccS(0),
+fHistPtTPCInAccPfromStrange(0),
+fHistPtTPCInAccSfromStrange(0),
+fHistPtTPCInAccSfromMat(0),
 fHistPtITSMI2(0),
 fHistPtITSMI3(0),
 fHistPtITSMI4(0),
@@ -117,24 +340,109 @@ fHistPtITSMI5InAcc(0),
 fHistPtITSMI6InAcc(0),
 fHistPtITSMISPDInAcc(0),
 fHistPtITSMIoneSPDInAcc(0),
+fHistPtITSMI2InAccFake(0),
+fHistPtITSMI3InAccFake(0),
+fHistPtITSMI4InAccFake(0),
+fHistPtITSMI5InAccFake(0),
+fHistPtITSMI6InAccFake(0),
+fHistPtITSMISPDInAccFake(0),
+fHistPtITSMIoneSPDInAccFake(0),
+fHistPtITSMIoneSPDthreeSDDSSDInAcc(0),
+fHistPtITSTPCsel(0),
+fHistPtITSTPCselP(0),
+fHistPtITSTPCselS(0),
+fHistPtITSTPCselPfromStrange(0),
+fHistPtITSTPCselSfromStrange(0),
+fHistPtITSTPCselSfromMat(0),
+fHistPtITSMI2InAccP(0),
+fHistPtITSMI3InAccP(0),
+fHistPtITSMI4InAccP(0),
+fHistPtITSMI5InAccP(0),
+fHistPtITSMI6InAccP(0),
+fHistPtITSMISPDInAccP(0),
+fHistPtITSMIoneSPDInAccP(0),
+fHistPtITSMI2InAccS(0),
+fHistPtITSMI3InAccS(0),
+fHistPtITSMI4InAccS(0),
+fHistPtITSMI5InAccS(0),
+fHistPtITSMI6InAccS(0),
+fHistPtITSMISPDInAccS(0),
+fHistPtITSMIoneSPDInAccS(0),
 fHistPtITSMIokbadoutinz6(0),
 fHistPtITSMIokbadoutinz4InAcc(0),
 fHistPtITSMIokbadoutinz5InAcc(0),
 fHistPtITSMIokbadoutinz6InAcc(0),
 fHistPhiITSMIokbadoutinz6InAcc(0),
+fHistRProdVtxInAccP(0),
+fHistRProdVtxInAccS(0),
+fHistd0rphiTPCInAccP150200(0),
+fHistd0rphiTPCInAccP500700(0),
+fHistd0rphiTPCInAccP10001500(0),
+fHistd0rphiTPCInAccS150200(0),
+fHistd0rphiTPCInAccS500700(0),
+fHistd0rphiTPCInAccS10001500(0),
+fHistd0rphiITSMISPDInAccP150200(0),
+fHistd0rphiITSMISPDInAccP500700(0),
+fHistd0rphiITSMISPDInAccP10001500(0),
+fHistd0rphiITSMISPDInAccS150200(0),
+fHistd0rphiITSMISPDInAccS500700(0),
+fHistd0rphiITSMISPDInAccS10001500(0),
+fHistd0rphiITSMIoneSPDInAccP150200(0),
+fHistd0rphiITSMIoneSPDInAccP350450(0),
+fHistd0rphiITSMIoneSPDInAccP500700(0),
+fHistd0rphiITSMIoneSPDInAccP10001500(0),
+fHistd0rphiITSMIoneSPDInAccP25004000(0),
+fHistd0rphiITSMIoneSPDInAccP40008000(0),
+fHistd0zITSMIoneSPDInAccP150200(0),
+fHistd0zITSMIoneSPDInAccP500700(0),
+fHistd0zITSMIoneSPDInAccP10001500(0),
+fHistd0zVSetaTPCInAccP10001500(0),
+fHistd0rphiVSphiITSMIoneSPDInAccP10001500(0),
+fHistd0rphiVSetaITSMIoneSPDInAccP10001500(0),
+fHistd0rphiITSMIoneSPDInAccS150200(0),
+fHistd0rphiITSMIoneSPDInAccS350450(0),
+fHistd0rphiITSMIoneSPDInAccS500700(0),
+fHistd0rphiITSMIoneSPDInAccS500700from22(0),
+fHistd0rphiITSMIoneSPDInAccS500700from211(0),
+fHistd0rphiITSMIoneSPDInAccS500700from310(0),
+fHistd0rphiITSMIoneSPDInAccS500700from321(0),
+fHistd0rphiITSMIoneSPDInAccS500700from3122(0),
+fHistd0rphiITSMIoneSPDInAccS10001500(0),
+fHistd0rphiITSMIoneSPDInAccS25004000(0),
+fHistd0rphiITSMIoneSPDInAccS40008000(0),
+fHistd0rphiITSMIoneSPDInAccS150200fromStrange(0),
+fHistd0rphiITSMIoneSPDInAccS150200fromMat(0),
+fHistd0rphiITSMIoneSPDInAccS350450fromStrange(0),
+fHistd0rphiITSMIoneSPDInAccS350450fromMat(0),
+fHistd0rphiITSMIoneSPDInAccS500700fromStrange(0),
+fHistd0rphiITSMIoneSPDInAccS500700fromMat(0),
+fHistd0rphiITSMIoneSPDInAccS10001500fromStrange(0),
+fHistd0rphiITSMIoneSPDInAccS10001500fromMat(0),
+fHistd0rphiITSMIoneSPDInAccS25004000fromStrange(0),
+fHistd0rphiITSMIoneSPDInAccS25004000fromMat(0),
+fHistd0rphiITSMIoneSPDInAccS40008000fromStrange(0),
+fHistd0rphiITSMIoneSPDInAccS40008000fromMat(0),
+fHistd0zITSMIoneSPDInAccS150200(0),
+fHistd0zITSMIoneSPDInAccS500700(0),
+fHistd0zITSMIoneSPDInAccS10001500(0),
+fHistPDGMoth(0),
+fHistPDGMoth150200(0),
+fHistPDGMoth500700(0),
+fHistPDGMoth10001500(0),
+fHistPDGTrk(0),
 fNtupleESDTracks(0),
 fNtupleITSAlignExtra(0),
-fNtupleITSAlignSPDTracklets(0)
+fNtupleITSAlignSPDTracklets(0),
+fESDtrackCutsTPC(0),
+fESDtrackCutsITSTPC(0)
 {
   // Constructor
 
-  for(Int_t i=0; i<10; i++) fCountsPerPtBin[i]=0;
+  for(Int_t i=0; i<11; i++) fCountsPerPtBin[i]=0;
 
   // Define input and output slots here
-  // Input slot #0 works with a TChain
-  DefineInput(0, TChain::Class());
   // Output slot #0 writes into a TList container
-  DefineOutput(0, TList::Class());  //My private output
+  DefineOutput(1, TList::Class());  //My private output
 }
 //________________________________________________________________________
 AliAnalysisTaskITSTrackingCheck::~AliAnalysisTaskITSTrackingCheck()
@@ -149,54 +457,41 @@ AliAnalysisTaskITSTrackingCheck::~AliAnalysisTaskITSTrackingCheck()
     fOutput = 0;
   }
 }
-
 //________________________________________________________________________
-void AliAnalysisTaskITSTrackingCheck::ConnectInputData(Option_t *) 
-{
-  // Connect ESD or AOD here
-  // Called once
-
-  TTree* tree = dynamic_cast<TTree*> (GetInputData(0));
-  if (!tree) {
-    Printf("ERROR: Could not read chain from input slot 0");
-  } else {
-    // Disable all branches and enable only the needed ones
-    // The next two lines are different when data produced as AliESDEvent is read
-
-    tree->SetBranchStatus("ESDfriend*", 1);
-    tree->SetBranchAddress("ESDfriend.",&fESDfriend);
-
-    AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
-
-    
-    if (!esdH) {
-      Printf("ERROR: Could not get ESDInputHandler");
-    } else {
-      fESD = esdH->GetEvent();
-
-    }
-  }
-  
-  return;
-}
-
-//________________________________________________________________________
-void AliAnalysisTaskITSTrackingCheck::CreateOutputObjects()
+void AliAnalysisTaskITSTrackingCheck::UserCreateOutputObjects()
 {
   // Create histograms
   // Called once
 
   gStyle->SetHistLineWidth(2);
 
-  Int_t nPtBins=21;
-  Float_t xPtBins[22]={0,0.1,0.2,0.3,0.4,0.5,0.6,0.8,1.0,1.5,2.,2.5,3,4,5,6,8,10,15,20,25,30};
+  Int_t nPtBins=34;
+  Float_t xPtBins[35]={0,0.025,0.05,0.075,0.1,0.125,0.15,0.175,0.2,0.225,0.25,0.275,0.3,0.325,0.35,0.375,0.4,0.5,0.6,0.7,0.8,1.0,1.5,2.,2.5,3,4,5,6,8,10,15,20,25,30};
 
-  for(Int_t i=0; i<10; i++) fCountsPerPtBin[i]=0;
+  for(Int_t i=0; i<11; i++) fCountsPerPtBin[i]=0;
 
   // Several histograms are more conveniently managed in a TList
   fOutput = new TList;
   fOutput->SetOwner();
 
+  fHistPDGMoth = new TH1F("fHistPDGMoth","",4000,0,4000);
+  fOutput->Add(fHistPDGMoth);
+  fHistPDGMoth150200 = new TH1F("fHistPDGMoth150200","",4000,0,4000);
+  fOutput->Add(fHistPDGMoth150200);
+  fHistPDGMoth500700 = new TH1F("fHistPDGMoth500700","",4000,0,4000);
+  fOutput->Add(fHistPDGMoth500700);
+  fHistPDGMoth10001500 = new TH1F("fHistPDGMoth10001500","",4000,0,4000);
+  fOutput->Add(fHistPDGMoth10001500);
+  fHistPDGTrk = new TH1F("fHistPDGTrk","",4000,0,4000);
+  fOutput->Add(fHistPDGTrk);
+
+  fHistNEvents = new TH1F("fHistNEvents", "Events: -1 tot, 0 sel, 1 vSPD3D, 2 vSPDZ, 3 vSPD, 4 vTRK; Type; N Events",12, -1.5, 10.5);
+  fHistNEvents->SetMinimum(0);
+  fOutput->Add(fHistNEvents);
+
+  fHistNEventsFrac = (TH1F*)fHistNEvents->Clone("fHistNEventsFrac");
+  fOutput->Add(fHistNEventsFrac);
+
   fHistNtracks = new TH1F("fHistNtracks", "N ESD tracks; N tracks; Events",5000, -0.5, 4999.5);
   fHistNtracks->Sumw2();
   fHistNtracks->SetMinimum(0);
@@ -246,6 +541,10 @@ void AliAnalysisTaskITSTrackingCheck::CreateOutputObjects()
   fHistClusterMapModuleITSSAokInAcc->SetMinimum(0);
   fOutput->Add(fHistClusterMapModuleITSSAokInAcc);
 
+  fHistClusterMapModuleITSMIokInAcc = new TH1F("fHistClusterMapModuleITSMIokInAcc", "N tracks with ok on Module (MI); Module; N tracks",2198, -0.5, 2197.5);
+  fHistClusterMapModuleITSMIokInAcc->SetMinimum(0);
+  fOutput->Add(fHistClusterMapModuleITSMIokInAcc);
+
   fHistClusterMapITSSAok = new TH1F("fHistClusterMapITSSAok", "N tracks with ok on Layer (SA); Layer; N tracks",6, -0.5, 5.5);
   fHistClusterMapITSSAok->Sumw2();
   fHistClusterMapITSSAok->SetMinimum(0);
@@ -265,6 +564,10 @@ void AliAnalysisTaskITSTrackingCheck::CreateOutputObjects()
   fHistClusterMapModuleITSSAbadInAcc->SetMinimum(0);
   fOutput->Add(fHistClusterMapModuleITSSAbadInAcc);
 
+  fHistClusterMapModuleITSMIbadInAcc = new TH1F("fHistClusterMapModuleITSMIbadInAcc", "N tracks with bad on Module (MI); Module; N tracks",2198, -0.5, 2197.5);
+  fHistClusterMapModuleITSMIbadInAcc->SetMinimum(0);
+  fOutput->Add(fHistClusterMapModuleITSMIbadInAcc);
+
   fHistClusterMapITSSAbad = new TH1F("fHistClusterMapITSSAbad", "N tracks with bad on Layer (SA); Layer; N tracks",6, -0.5, 5.5);
   fHistClusterMapITSSAbad->Sumw2();
   fHistClusterMapITSSAbad->SetMinimum(0);
@@ -344,11 +647,73 @@ void AliAnalysisTaskITSTrackingCheck::CreateOutputObjects()
   fHistClusterMapModuleITSSAnoclsInAcc->SetMinimum(0);
   fOutput->Add(fHistClusterMapModuleITSSAnoclsInAcc);
 
+  fHistClusterMapModuleITSMInoclsInAcc = new TH1F("fHistClusterMapModuleITSMInoclsInAcc", "N tracks with nocls on Module (MI); Module; N tracks",2198, -0.5, 2197.5);
+  fHistClusterMapModuleITSMInoclsInAcc->SetMinimum(0);
+  fOutput->Add(fHistClusterMapModuleITSMInoclsInAcc);
+
   fHistClusterMapITSSAnocls = new TH1F("fHistClusterMapITSSAnocls", "N tracks with nocls on Layer (SA); Layer; N tracks",6, -0.5, 5.5);
   fHistClusterMapITSSAnocls->Sumw2();
   fHistClusterMapITSSAnocls->SetMinimum(0);
   fOutput->Add(fHistClusterMapITSSAnocls);
   
+  
+  fHistZatSPDouter0ok = new TH1F("fHistZatSPDouter0ok", "Track z at SPDouter radius; z [cm]; N tracks",3200,-16,16);
+  fHistZatSPDouter0ok->Sumw2();
+  fHistZatSPDouter0ok->SetMinimum(0);
+  fOutput->Add(fHistZatSPDouter0ok);
+  fHistZatSPDouter1ok = new TH1F("fHistZatSPDouter1ok", "Track z at SPDouter radius; z [cm]; N tracks",3200,-16,16);
+  fHistZatSPDouter1ok->Sumw2();
+  fHistZatSPDouter1ok->SetMinimum(0);
+  fOutput->Add(fHistZatSPDouter1ok);
+  fHistZatSPDouter2ok = new TH1F("fHistZatSPDouter2ok", "Track z at SPDouter radius; z [cm]; N tracks",3200,-16,16);
+  fHistZatSPDouter2ok->Sumw2();
+  fHistZatSPDouter2ok->SetMinimum(0);
+  fOutput->Add(fHistZatSPDouter2ok);
+  fHistZatSPDouter3ok = new TH1F("fHistZatSPDouter3ok", "Track z at SPDouter radius; z [cm]; N tracks",3200,-16,16);
+  fHistZatSPDouter3ok->Sumw2();
+  fHistZatSPDouter3ok->SetMinimum(0);
+  fOutput->Add(fHistZatSPDouter3ok);
+  fHistZatSPDouter0notok = new TH1F("fHistZatSPDouter0notok", "Track z at SPDouter radius; z [cm]; N tracks",3200,-16,16);
+  fHistZatSPDouter0notok->Sumw2();
+  fHistZatSPDouter0notok->SetMinimum(0);
+  fOutput->Add(fHistZatSPDouter0notok);
+  fHistZatSPDouter1notok = new TH1F("fHistZatSPDouter1notok", "Track z at SPDouter radius; z [cm]; N tracks",3200,-16,16);
+  fHistZatSPDouter1notok->Sumw2();
+  fHistZatSPDouter1notok->SetMinimum(0);
+  fOutput->Add(fHistZatSPDouter1notok);
+  fHistZatSPDouter2notok = new TH1F("fHistZatSPDouter2notok", "Track z at SPDouter radius; z [cm]; N tracks",3200,-16,16);
+  fHistZatSPDouter2notok->Sumw2();
+  fHistZatSPDouter2notok->SetMinimum(0);
+  fOutput->Add(fHistZatSPDouter2notok);
+  fHistZatSPDouter3notok = new TH1F("fHistZatSPDouter3notok", "Track z at SPDouter radius; z [cm]; N tracks",3200,-16,16);
+  fHistZatSPDouter3notok->Sumw2();
+  fHistZatSPDouter3notok->SetMinimum(0);
+  fOutput->Add(fHistZatSPDouter3notok);
+  
+  fHistxlocSDDok = new TH1F("fHistxlocSDDok", "SDD points; xloc [cm]; N tracks",75, -3.75, 3.75);
+  fHistxlocSDDok->Sumw2();
+  fHistxlocSDDok->SetMinimum(0);
+  fOutput->Add(fHistxlocSDDok);
+
+  fHistxlocVSmodSDDok = new TH2F("fHistxlocVSmodSDDok", "SDD points; module; xloc [cm]",260,239.5,499.5,25, -3.75, 3.75);
+  fOutput->Add(fHistxlocVSmodSDDok);
+
+  fHistzlocSDDok = new TH1F("fHistzlocSDDok", "SDD points; zloc [cm]; N tracks",77, -3.85, 3.85);
+  fHistzlocSDDok->Sumw2();
+  fHistzlocSDDok->SetMinimum(0);
+  fOutput->Add(fHistzlocSDDok);
+  
+  fHistxlocSDDall = new TH1F("fHistxlocSDDall", "SDD points; xloc [cm]; N tracks",75, -3.75, 3.75);
+  fHistxlocSDDall->Sumw2();
+  fHistxlocSDDall->SetMinimum(0);
+  fOutput->Add(fHistxlocSDDall);
+
+  fHistzlocSDDall = new TH1F("fHistzlocSDDall", "SDD points; zloc [cm]; N tracks",77, -3.85, 3.85);
+  fHistzlocSDDall->Sumw2();
+  fHistzlocSDDall->SetMinimum(0);
+  fOutput->Add(fHistzlocSDDall);
+  
+
   fHistPhiTPCInAcc = new TH1F("fHistPhiTPCInAcc","Azimuthal distribution of TPC tracks; #phi; N tracks",100, 0, 2.*3.1415);
   fHistPhiTPCInAcc->Sumw2();
   fHistPhiTPCInAcc->SetMinimum(0);
@@ -404,6 +769,50 @@ void AliAnalysisTaskITSTrackingCheck::CreateOutputObjects()
   fHistPtTPCInAcc->SetMinimum(0);
   fOutput->Add(fHistPtTPCInAcc);
   
+  fHistPtTPCInAccMCtwoSPD = new TH1F("fHistPtTPCInAccMCtwoSPD","pt distribution of TPC tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
+  fHistPtTPCInAccMCtwoSPD->Sumw2();
+  fHistPtTPCInAccMCtwoSPD->SetMinimum(0);
+  fOutput->Add(fHistPtTPCInAccMCtwoSPD);
+  
+  fHistPtTPCInAccMConeSPD = new TH1F("fHistPtTPCInAccMConeSPD","pt distribution of TPC tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
+  fHistPtTPCInAccMConeSPD->Sumw2();
+  fHistPtTPCInAccMConeSPD->SetMinimum(0);
+  fOutput->Add(fHistPtTPCInAccMConeSPD);
+  
+  fHistdEdxVSPtTPCInAcc = new TH2F("fHistdEdxVSPtTPCInAcc","dE/dx distribution of TPC tracks; p_{t} [GeV/c]; TPC dE/dx",100,0,1,50,0,500);
+  fOutput->Add(fHistdEdxVSPtTPCInAcc);
+  
+  fHistdEdxVSPtITSTPCsel = new TH2F("fHistdEdxVSPtITSTPCsel","dE/dx distribution of TPC tracks; p_{t} [GeV/c]; ITS dE/dx",100,0,1,50,0,500);
+  fOutput->Add(fHistdEdxVSPtITSTPCsel);
+  
+  fHistPtVSphiTPCInAcc = new TH2F("fHistPtVSphiTPCInAcc","pt distribution of TPC tracks; phi; p_{t} [GeV/c]",18,0,6.28,20,0,0.5);
+  fHistPtVSphiTPCInAcc->SetMinimum(0);
+  fOutput->Add(fHistPtVSphiTPCInAcc);
+  
+  fHistPtTPCInAccNoTRDout = new TH1F("fHistPtTPCInAccNoTRDout","pt distribution of TPC tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
+  fHistPtTPCInAccNoTRDout->Sumw2();
+  fHistPtTPCInAccNoTRDout->SetMinimum(0);
+  fOutput->Add(fHistPtTPCInAccNoTRDout);
+  
+  fHistPtTPCInAccNoTOFout = new TH1F("fHistPtTPCInAccNoTOFout","pt distribution of TPC tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
+  fHistPtTPCInAccNoTOFout->Sumw2();
+  fHistPtTPCInAccNoTOFout->SetMinimum(0);
+  fOutput->Add(fHistPtTPCInAccNoTOFout);
+  
+  fHistPtTPCInAccWithPtTPCAtVtx = new TH1F("fHistPtTPCInAccWithPtTPCAtVtx","pt distribution of TPC tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
+  fHistPtTPCInAccWithPtTPCAtVtx->Sumw2();
+  fHistPtTPCInAccWithPtTPCAtVtx->SetMinimum(0);
+  fOutput->Add(fHistPtTPCInAccWithPtTPCAtVtx);
+  
+  fHistPtTPCInAccWithPtTPCAtInnerWall = new TH1F("fHistPtTPCInAccWithPtTPCAtInnerWall","pt distribution of TPC tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
+  fHistPtTPCInAccWithPtTPCAtInnerWall->Sumw2();
+  fHistPtTPCInAccWithPtTPCAtInnerWall->SetMinimum(0);
+  fOutput->Add(fHistPtTPCInAccWithPtTPCAtInnerWall);
+  
+  fHistDeltaPtTPC = new TH2F("fHistDeltaPtTPC","pt distribution of TPC tracks; p_{t} [GeV/c]; p_{t} TPC at vtx - p_{t} at inner wall [GeV/c]",100,0,1,50,-0.2,0.2);
+  fHistDeltaPtTPC->SetMinimum(0);
+  fOutput->Add(fHistDeltaPtTPC);
+  
   fHistPtITSMI6InAcc = new TH1F("fHistPtITSMI6InAcc","pt distribution of ITSMI6 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
   fHistPtITSMI6InAcc->Sumw2();
   fHistPtITSMI6InAcc->SetMinimum(0);
@@ -438,6 +847,171 @@ void AliAnalysisTaskITSTrackingCheck::CreateOutputObjects()
   fHistPtITSMIoneSPDInAcc->Sumw2();
   fHistPtITSMIoneSPDInAcc->SetMinimum(0);
   fOutput->Add(fHistPtITSMIoneSPDInAcc);
+
+  fHistPtITSMI6InAccFake = new TH1F("fHistPtITSMI6InAccFake","pt distribution of ITSMI6 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
+  fHistPtITSMI6InAccFake->Sumw2();
+  fHistPtITSMI6InAccFake->SetMinimum(0);
+  fOutput->Add(fHistPtITSMI6InAccFake);
+  
+  fHistPtITSMI5InAccFake = new TH1F("fHistPtITSMI5InAccFake","pt distribution of ITSMI5 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
+  fHistPtITSMI5InAccFake->Sumw2();
+  fHistPtITSMI5InAccFake->SetMinimum(0);
+  fOutput->Add(fHistPtITSMI5InAccFake);
+  
+  fHistPtITSMI4InAccFake = new TH1F("fHistPtITSMI4InAccFake","pt distribution of ITSMI4 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
+  fHistPtITSMI4InAccFake->Sumw2();
+  fHistPtITSMI4InAccFake->SetMinimum(0);
+  fOutput->Add(fHistPtITSMI4InAccFake);
+  
+  fHistPtITSMI3InAccFake = new TH1F("fHistPtITSMI3InAccFake","pt distribution of ITSMI3 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
+  fHistPtITSMI3InAccFake->Sumw2();
+  fHistPtITSMI3InAccFake->SetMinimum(0);
+  fOutput->Add(fHistPtITSMI3InAccFake);
+  
+  fHistPtITSMI2InAccFake = new TH1F("fHistPtITSMI2InAccFake","pt distribution of ITSMI2 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
+  fHistPtITSMI2InAccFake->Sumw2();
+  fHistPtITSMI2InAccFake->SetMinimum(0);
+  fOutput->Add(fHistPtITSMI2InAccFake);
+  
+  fHistPtITSMISPDInAccFake = new TH1F("fHistPtITSMISPDInAccFake","pt distribution of ITSMISPD tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
+  fHistPtITSMISPDInAccFake->Sumw2();
+  fHistPtITSMISPDInAccFake->SetMinimum(0);
+  fOutput->Add(fHistPtITSMISPDInAccFake);
+  
+  fHistPtITSMIoneSPDInAccFake = new TH1F("fHistPtITSMIoneSPDInAccFake","pt distribution of ITSMISPD tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
+  fHistPtITSMIoneSPDInAccFake->Sumw2();
+  fHistPtITSMIoneSPDInAccFake->SetMinimum(0);
+  fOutput->Add(fHistPtITSMIoneSPDInAccFake);
+
+  fHistPtITSMIoneSPDthreeSDDSSDInAcc = new TH1F("fHistPtITSMIoneSPDthreeSDDSSDInAcc","pt distribution of ITSMI tracks (>0 in SPD, >2 in SDD+SSD); p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
+  fHistPtITSMIoneSPDthreeSDDSSDInAcc->Sumw2();
+  fHistPtITSMIoneSPDthreeSDDSSDInAcc->SetMinimum(0);
+  fOutput->Add(fHistPtITSMIoneSPDthreeSDDSSDInAcc);
+
+  fHistPtITSTPCsel = new TH1F("fHistPtITSTPCsel","pt distribution of ITSMISPD tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
+  fHistPtITSTPCsel->Sumw2();
+  fHistPtITSTPCsel->SetMinimum(0);
+  fOutput->Add(fHistPtITSTPCsel);
+
+  fHistPtITSTPCselP = new TH1F("fHistPtITSTPCselP","pt distribution of ITSMISPD tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
+  fHistPtITSTPCselP->Sumw2();
+  fHistPtITSTPCselP->SetMinimum(0);
+  fOutput->Add(fHistPtITSTPCselP);
+
+  fHistPtITSTPCselS = new TH1F("fHistPtITSTPCselS","pt distribution of ITSMISPD tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
+  fHistPtITSTPCselS->Sumw2();
+  fHistPtITSTPCselS->SetMinimum(0);
+  fOutput->Add(fHistPtITSTPCselS);
+
+  fHistPtITSTPCselSfromStrange = new TH1F("fHistPtITSTPCselSfromStrange","pt distribution of ITSMISPD tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
+  fHistPtITSTPCselSfromStrange->Sumw2();
+  fHistPtITSTPCselSfromStrange->SetMinimum(0);
+  fOutput->Add(fHistPtITSTPCselSfromStrange);
+
+  fHistPtITSTPCselPfromStrange = new TH1F("fHistPtITSTPCselPfromStrange","pt distribution of ITSMISPD tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
+  fHistPtITSTPCselPfromStrange->Sumw2();
+  fHistPtITSTPCselPfromStrange->SetMinimum(0);
+  fOutput->Add(fHistPtITSTPCselPfromStrange);
+
+  fHistPtITSTPCselSfromMat = new TH1F("fHistPtITSTPCselSfromMat","pt distribution of ITSMISPD tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
+  fHistPtITSTPCselSfromMat->Sumw2();
+  fHistPtITSTPCselSfromMat->SetMinimum(0);
+  fOutput->Add(fHistPtITSTPCselSfromMat);
+
+  fHistPtTPCInAccP = new TH1F("fHistPtTPCInAccP","pt distribution of TPC tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
+  fHistPtTPCInAccP->Sumw2();
+  fHistPtTPCInAccP->SetMinimum(0);
+  fOutput->Add(fHistPtTPCInAccP);
+
+  fHistPtTPCInAccPfromStrange = new TH1F("fHistPtTPCInAccPfromStrange","pt distribution of TPC tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
+  fHistPtTPCInAccPfromStrange->Sumw2();
+  fHistPtTPCInAccPfromStrange->SetMinimum(0);
+  fOutput->Add(fHistPtTPCInAccPfromStrange);
+  
+  fHistPtITSMI6InAccP = new TH1F("fHistPtITSMI6InAccP","pt distribution of ITSMI6 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
+  fHistPtITSMI6InAccP->Sumw2();
+  fHistPtITSMI6InAccP->SetMinimum(0);
+  fOutput->Add(fHistPtITSMI6InAccP);
+  
+  fHistPtITSMI5InAccP = new TH1F("fHistPtITSMI5InAccP","pt distribution of ITSMI5 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
+  fHistPtITSMI5InAccP->Sumw2();
+  fHistPtITSMI5InAccP->SetMinimum(0);
+  fOutput->Add(fHistPtITSMI5InAccP);
+  
+  fHistPtITSMI4InAccP = new TH1F("fHistPtITSMI4InAccP","pt distribution of ITSMI4 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
+  fHistPtITSMI4InAccP->Sumw2();
+  fHistPtITSMI4InAccP->SetMinimum(0);
+  fOutput->Add(fHistPtITSMI4InAccP);
+  
+  fHistPtITSMI3InAccP = new TH1F("fHistPtITSMI3InAccP","pt distribution of ITSMI3 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
+  fHistPtITSMI3InAccP->Sumw2();
+  fHistPtITSMI3InAccP->SetMinimum(0);
+  fOutput->Add(fHistPtITSMI3InAccP);
+  
+  fHistPtITSMI2InAccP = new TH1F("fHistPtITSMI2InAccP","pt distribution of ITSMI2 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
+  fHistPtITSMI2InAccP->Sumw2();
+  fHistPtITSMI2InAccP->SetMinimum(0);
+  fOutput->Add(fHistPtITSMI2InAccP);
+  
+  fHistPtITSMISPDInAccP = new TH1F("fHistPtITSMISPDInAccP","pt distribution of ITSMISPD tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
+  fHistPtITSMISPDInAccP->Sumw2();
+  fHistPtITSMISPDInAccP->SetMinimum(0);
+  fOutput->Add(fHistPtITSMISPDInAccP);
+  
+  fHistPtITSMIoneSPDInAccP = new TH1F("fHistPtITSMIoneSPDInAccP","pt distribution of ITSMISPD tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
+  fHistPtITSMIoneSPDInAccP->Sumw2();
+  fHistPtITSMIoneSPDInAccP->SetMinimum(0);
+  fOutput->Add(fHistPtITSMIoneSPDInAccP);
+
+  fHistPtTPCInAccS = new TH1F("fHistPtTPCInAccS","pt distribution of TPC tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
+  fHistPtTPCInAccS->Sumw2();
+  fHistPtTPCInAccS->SetMinimum(0);
+  fOutput->Add(fHistPtTPCInAccS);
+  
+  fHistPtTPCInAccSfromStrange = new TH1F("fHistPtTPCInAccSfromStrange","pt distribution of TPC tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
+  fHistPtTPCInAccSfromStrange->Sumw2();
+  fHistPtTPCInAccSfromStrange->SetMinimum(0);
+  fOutput->Add(fHistPtTPCInAccSfromStrange);
+  
+  fHistPtTPCInAccSfromMat = new TH1F("fHistPtTPCInAccSfromMat","pt distribution of TPC tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
+  fHistPtTPCInAccSfromMat->Sumw2();
+  fHistPtTPCInAccSfromMat->SetMinimum(0);
+  fOutput->Add(fHistPtTPCInAccSfromMat);
+  
+  fHistPtITSMI6InAccS = new TH1F("fHistPtITSMI6InAccS","pt distribution of ITSMI6 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
+  fHistPtITSMI6InAccS->Sumw2();
+  fHistPtITSMI6InAccS->SetMinimum(0);
+  fOutput->Add(fHistPtITSMI6InAccS);
+  
+  fHistPtITSMI5InAccS = new TH1F("fHistPtITSMI5InAccS","pt distribution of ITSMI5 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
+  fHistPtITSMI5InAccS->Sumw2();
+  fHistPtITSMI5InAccS->SetMinimum(0);
+  fOutput->Add(fHistPtITSMI5InAccS);
+  
+  fHistPtITSMI4InAccS = new TH1F("fHistPtITSMI4InAccS","pt distribution of ITSMI4 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
+  fHistPtITSMI4InAccS->Sumw2();
+  fHistPtITSMI4InAccS->SetMinimum(0);
+  fOutput->Add(fHistPtITSMI4InAccS);
+  
+  fHistPtITSMI3InAccS = new TH1F("fHistPtITSMI3InAccS","pt distribution of ITSMI3 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
+  fHistPtITSMI3InAccS->Sumw2();
+  fHistPtITSMI3InAccS->SetMinimum(0);
+  fOutput->Add(fHistPtITSMI3InAccS);
+  
+  fHistPtITSMI2InAccS = new TH1F("fHistPtITSMI2InAccS","pt distribution of ITSMI2 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
+  fHistPtITSMI2InAccS->Sumw2();
+  fHistPtITSMI2InAccS->SetMinimum(0);
+  fOutput->Add(fHistPtITSMI2InAccS);
+  
+  fHistPtITSMISPDInAccS = new TH1F("fHistPtITSMISPDInAccS","pt distribution of ITSMISPD tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
+  fHistPtITSMISPDInAccS->Sumw2();
+  fHistPtITSMISPDInAccS->SetMinimum(0);
+  fOutput->Add(fHistPtITSMISPDInAccS);
+  
+  fHistPtITSMIoneSPDInAccS = new TH1F("fHistPtITSMIoneSPDInAccS","pt distribution of ITSMISPD tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
+  fHistPtITSMIoneSPDInAccS->Sumw2();
+  fHistPtITSMIoneSPDInAccS->SetMinimum(0);
+  fOutput->Add(fHistPtITSMIoneSPDInAccS);
   
   fHistPtITSMIokbadoutinz6 = new TH1F("fHistPtITSMIokbadoutinz6","pt distribution of ITSMI tracks with 6 layers OK; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
   fHistPtITSMIokbadoutinz6->Sumw2();
@@ -459,9 +1033,265 @@ void AliAnalysisTaskITSTrackingCheck::CreateOutputObjects()
   fHistPtITSMIokbadoutinz6InAcc->SetMinimum(0);
   fOutput->Add(fHistPtITSMIokbadoutinz6InAcc);
 
+  fHistRProdVtxInAccP = new TH1F("fHistRProdVtxInAccP","Radius of production vertex for primaries; r [cm]; N tracks",100,0,10);
+  fHistRProdVtxInAccP->Sumw2();
+  fHistRProdVtxInAccP->SetMinimum(0);
+  fOutput->Add(fHistRProdVtxInAccP);
+
+  fHistRProdVtxInAccS = new TH1F("fHistRProdVtxInAccS","Radius of production vertex for secondaries; r [cm]; N tracks",100,0,10);
+  fHistRProdVtxInAccS->Sumw2();
+  fHistRProdVtxInAccS->SetMinimum(0);
+  fOutput->Add(fHistRProdVtxInAccS);
+  
+  fHistd0rphiTPCInAccP150200 = new TH1F("fHistd0rphiTPCInAccP150200","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-5,5);
+  fHistd0rphiTPCInAccP150200->Sumw2();
+  fHistd0rphiTPCInAccP150200->SetMinimum(0);
+  fOutput->Add(fHistd0rphiTPCInAccP150200);
+
+  fHistd0rphiTPCInAccP500700 = new TH1F("fHistd0rphiTPCInAccP500700","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-5,5);
+  fHistd0rphiTPCInAccP500700->Sumw2();
+  fHistd0rphiTPCInAccP500700->SetMinimum(0);
+  fOutput->Add(fHistd0rphiTPCInAccP500700);
+
+  fHistd0rphiTPCInAccP10001500 = new TH1F("fHistd0rphiTPCInAccP10001500","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-5,5);
+  fHistd0rphiTPCInAccP10001500->Sumw2();
+  fHistd0rphiTPCInAccP10001500->SetMinimum(0);
+  fOutput->Add(fHistd0rphiTPCInAccP10001500);
+
+  fHistd0rphiTPCInAccS150200 = new TH1F("fHistd0rphiTPCInAccS150200","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-5,5);
+  fHistd0rphiTPCInAccS150200->Sumw2();
+  fHistd0rphiTPCInAccS150200->SetMinimum(0);
+  fOutput->Add(fHistd0rphiTPCInAccS150200);
+
+  fHistd0rphiTPCInAccS500700 = new TH1F("fHistd0rphiTPCInAccS500700","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-5,5);
+  fHistd0rphiTPCInAccS500700->Sumw2();
+  fHistd0rphiTPCInAccS500700->SetMinimum(0);
+  fOutput->Add(fHistd0rphiTPCInAccS500700);
+
+  fHistd0rphiTPCInAccS10001500 = new TH1F("fHistd0rphiTPCInAccS10001500","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-5,5);
+  fHistd0rphiTPCInAccS10001500->Sumw2();
+  fHistd0rphiTPCInAccS10001500->SetMinimum(0);
+  fOutput->Add(fHistd0rphiTPCInAccS10001500);
+
+  fHistd0rphiITSMISPDInAccP150200 = new TH1F("fHistd0rphiITSMISPDInAccP150200","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
+  fHistd0rphiITSMISPDInAccP150200->Sumw2();
+  fHistd0rphiITSMISPDInAccP150200->SetMinimum(0);
+  fOutput->Add(fHistd0rphiITSMISPDInAccP150200);
+
+  fHistd0rphiITSMISPDInAccP500700 = new TH1F("fHistd0rphiITSMISPDInAccP500700","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
+  fHistd0rphiITSMISPDInAccP500700->Sumw2();
+  fHistd0rphiITSMISPDInAccP500700->SetMinimum(0);
+  fOutput->Add(fHistd0rphiITSMISPDInAccP500700);
+
+  fHistd0rphiITSMISPDInAccP10001500 = new TH1F("fHistd0rphiITSMISPDInAccP10001500","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
+  fHistd0rphiITSMISPDInAccP10001500->Sumw2();
+  fHistd0rphiITSMISPDInAccP10001500->SetMinimum(0);
+  fOutput->Add(fHistd0rphiITSMISPDInAccP10001500);
+
+  fHistd0rphiITSMISPDInAccS150200 = new TH1F("fHistd0rphiITSMISPDInAccS150200","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
+  fHistd0rphiITSMISPDInAccS150200->Sumw2();
+  fHistd0rphiITSMISPDInAccS150200->SetMinimum(0);
+  fOutput->Add(fHistd0rphiITSMISPDInAccS150200);
+
+  fHistd0rphiITSMISPDInAccS500700 = new TH1F("fHistd0rphiITSMISPDInAccS500700","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
+  fHistd0rphiITSMISPDInAccS500700->Sumw2();
+  fHistd0rphiITSMISPDInAccS500700->SetMinimum(0);
+  fOutput->Add(fHistd0rphiITSMISPDInAccS500700);
+
+  fHistd0rphiITSMISPDInAccS10001500 = new TH1F("fHistd0rphiITSMISPDInAccS10001500","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
+  fHistd0rphiITSMISPDInAccS10001500->Sumw2();
+  fHistd0rphiITSMISPDInAccS10001500->SetMinimum(0);
+  fOutput->Add(fHistd0rphiITSMISPDInAccS10001500);
+
+  fHistd0rphiITSMIoneSPDInAccP150200 = new TH1F("fHistd0rphiITSMIoneSPDInAccP150200","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
+  fHistd0rphiITSMIoneSPDInAccP150200->Sumw2();
+  fHistd0rphiITSMIoneSPDInAccP150200->SetMinimum(0);
+  fOutput->Add(fHistd0rphiITSMIoneSPDInAccP150200);
+
+  fHistd0rphiITSMIoneSPDInAccP350450 = new TH1F("fHistd0rphiITSMIoneSPDInAccP350450","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
+  fHistd0rphiITSMIoneSPDInAccP350450->Sumw2();
+  fHistd0rphiITSMIoneSPDInAccP350450->SetMinimum(0);
+  fOutput->Add(fHistd0rphiITSMIoneSPDInAccP350450);
+
+  fHistd0rphiITSMIoneSPDInAccP500700 = new TH1F("fHistd0rphiITSMIoneSPDInAccP500700","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
+  fHistd0rphiITSMIoneSPDInAccP500700->Sumw2();
+  fHistd0rphiITSMIoneSPDInAccP500700->SetMinimum(0);
+  fOutput->Add(fHistd0rphiITSMIoneSPDInAccP500700);
+
+  fHistd0rphiITSMIoneSPDInAccP10001500 = new TH1F("fHistd0rphiITSMIoneSPDInAccP10001500","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
+  fHistd0rphiITSMIoneSPDInAccP10001500->Sumw2();
+  fHistd0rphiITSMIoneSPDInAccP10001500->SetMinimum(0);
+  fOutput->Add(fHistd0rphiITSMIoneSPDInAccP10001500);
+
+  fHistd0rphiITSMIoneSPDInAccP25004000 = new TH1F("fHistd0rphiITSMIoneSPDInAccP25004000","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
+  fHistd0rphiITSMIoneSPDInAccP25004000->Sumw2();
+  fHistd0rphiITSMIoneSPDInAccP25004000->SetMinimum(0);
+  fOutput->Add(fHistd0rphiITSMIoneSPDInAccP25004000);
+
+  fHistd0rphiITSMIoneSPDInAccP40008000 = new TH1F("fHistd0rphiITSMIoneSPDInAccP40008000","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
+  fHistd0rphiITSMIoneSPDInAccP40008000->Sumw2();
+  fHistd0rphiITSMIoneSPDInAccP40008000->SetMinimum(0);
+  fOutput->Add(fHistd0rphiITSMIoneSPDInAccP40008000);
+
+  fHistd0zITSMIoneSPDInAccP150200 = new TH1F("fHistd0zITSMIoneSPDInAccP150200","Longitudinal imp. par. to VertexTracks for primaries; d_{0} z [cm]; N tracks",300,-1.5,1.5);
+  fHistd0zITSMIoneSPDInAccP150200->Sumw2();
+  fHistd0zITSMIoneSPDInAccP150200->SetMinimum(0);
+  fOutput->Add(fHistd0zITSMIoneSPDInAccP150200);
+
+  fHistd0zITSMIoneSPDInAccP500700 = new TH1F("fHistd0zITSMIoneSPDInAccP500700","Longitudinal imp. par. to VertexTracks for primaries; d_{0} z [cm]; N tracks",300,-1.5,1.5);
+  fHistd0zITSMIoneSPDInAccP500700->Sumw2();
+  fHistd0zITSMIoneSPDInAccP500700->SetMinimum(0);
+  fOutput->Add(fHistd0zITSMIoneSPDInAccP500700);
+
+  fHistd0zITSMIoneSPDInAccP10001500 = new TH1F("fHistd0zITSMIoneSPDInAccP10001500","Longitudinal imp. par. to VertexTracks for primaries; d_{0} z [cm]; N tracks",300,-1.5,1.5);
+  fHistd0zITSMIoneSPDInAccP10001500->Sumw2();
+  fHistd0zITSMIoneSPDInAccP10001500->SetMinimum(0);
+  fOutput->Add(fHistd0zITSMIoneSPDInAccP10001500);
+
+  fHistd0zVSetaTPCInAccP10001500 = new TH2F("fHistd0zVSetaTPCInAccP10001500","Long. imp. par. to VertexSPD for TPC tracks; d_{0} z [cm]; eta",100,-4,4,10,-1,1);
+  fOutput->Add(fHistd0zVSetaTPCInAccP10001500);
+
+  fHistd0rphiVSphiITSMIoneSPDInAccP10001500 = new TH2F("fHistd0rphiVSphiITSMIoneSPDInAccP10001500","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; phi",30,-0.3,0.3,40,0,2*3.1415);
+  fOutput->Add(fHistd0rphiVSphiITSMIoneSPDInAccP10001500);
+
+  fHistd0rphiVSetaITSMIoneSPDInAccP10001500 = new TH2F("fHistd0rphiVSetaITSMIoneSPDInAccP10001500","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; eta",30,-0.3,0.3,10,-1,1);
+  fOutput->Add(fHistd0rphiVSetaITSMIoneSPDInAccP10001500);
+
+  fHistd0rphiITSMIoneSPDInAccS150200 = new TH1F("fHistd0rphiITSMIoneSPDInAccS150200","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
+  fHistd0rphiITSMIoneSPDInAccS150200->Sumw2();
+  fHistd0rphiITSMIoneSPDInAccS150200->SetMinimum(0);
+  fOutput->Add(fHistd0rphiITSMIoneSPDInAccS150200);
+
+  fHistd0rphiITSMIoneSPDInAccS350450 = new TH1F("fHistd0rphiITSMIoneSPDInAccS350450","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
+  fHistd0rphiITSMIoneSPDInAccS350450->Sumw2();
+  fHistd0rphiITSMIoneSPDInAccS350450->SetMinimum(0);
+  fOutput->Add(fHistd0rphiITSMIoneSPDInAccS350450);
+
+  fHistd0rphiITSMIoneSPDInAccS500700 = new TH1F("fHistd0rphiITSMIoneSPDInAccS500700","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
+  fHistd0rphiITSMIoneSPDInAccS500700->Sumw2();
+  fHistd0rphiITSMIoneSPDInAccS500700->SetMinimum(0);
+  fOutput->Add(fHistd0rphiITSMIoneSPDInAccS500700);
+
+  fHistd0rphiITSMIoneSPDInAccS500700from22 = new TH1F("fHistd0rphiITSMIoneSPDInAccS500700from22","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
+  fHistd0rphiITSMIoneSPDInAccS500700from22->Sumw2();
+  fHistd0rphiITSMIoneSPDInAccS500700from22->SetMinimum(0);
+  fOutput->Add(fHistd0rphiITSMIoneSPDInAccS500700from22);
+
+  fHistd0rphiITSMIoneSPDInAccS500700from211 = new TH1F("fHistd0rphiITSMIoneSPDInAccS500700from211","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
+  fHistd0rphiITSMIoneSPDInAccS500700from211->Sumw2();
+  fHistd0rphiITSMIoneSPDInAccS500700from211->SetMinimum(0);
+  fOutput->Add(fHistd0rphiITSMIoneSPDInAccS500700from211);
+
+  fHistd0rphiITSMIoneSPDInAccS500700from310 = new TH1F("fHistd0rphiITSMIoneSPDInAccS500700from310","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
+  fHistd0rphiITSMIoneSPDInAccS500700from310->Sumw2();
+  fHistd0rphiITSMIoneSPDInAccS500700from310->SetMinimum(0);
+  fOutput->Add(fHistd0rphiITSMIoneSPDInAccS500700from310);
+
+  fHistd0rphiITSMIoneSPDInAccS500700from321 = new TH1F("fHistd0rphiITSMIoneSPDInAccS500700from321","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
+  fHistd0rphiITSMIoneSPDInAccS500700from321->Sumw2();
+  fHistd0rphiITSMIoneSPDInAccS500700from321->SetMinimum(0);
+  fOutput->Add(fHistd0rphiITSMIoneSPDInAccS500700from321);
+
+  fHistd0rphiITSMIoneSPDInAccS500700from3122 = new TH1F("fHistd0rphiITSMIoneSPDInAccS500700from3122","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
+  fHistd0rphiITSMIoneSPDInAccS500700from3122->Sumw2();
+  fHistd0rphiITSMIoneSPDInAccS500700from3122->SetMinimum(0);
+  fOutput->Add(fHistd0rphiITSMIoneSPDInAccS500700from3122);
+
+  fHistd0rphiITSMIoneSPDInAccS10001500 = new TH1F("fHistd0rphiITSMIoneSPDInAccS10001500","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
+  fHistd0rphiITSMIoneSPDInAccS10001500->Sumw2();
+  fHistd0rphiITSMIoneSPDInAccS10001500->SetMinimum(0);
+  fOutput->Add(fHistd0rphiITSMIoneSPDInAccS10001500);
+
+  fHistd0rphiITSMIoneSPDInAccS25004000 = new TH1F("fHistd0rphiITSMIoneSPDInAccS25004000","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
+  fHistd0rphiITSMIoneSPDInAccS25004000->Sumw2();
+  fHistd0rphiITSMIoneSPDInAccS25004000->SetMinimum(0);
+  fOutput->Add(fHistd0rphiITSMIoneSPDInAccS25004000);
+
+  fHistd0rphiITSMIoneSPDInAccS40008000 = new TH1F("fHistd0rphiITSMIoneSPDInAccS40008000","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
+  fHistd0rphiITSMIoneSPDInAccS40008000->Sumw2();
+  fHistd0rphiITSMIoneSPDInAccS40008000->SetMinimum(0);
+  fOutput->Add(fHistd0rphiITSMIoneSPDInAccS40008000);
+
+  fHistd0rphiITSMIoneSPDInAccS150200fromStrange = new TH1F("fHistd0rphiITSMIoneSPDInAccS150200fromStrange","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
+  fHistd0rphiITSMIoneSPDInAccS150200fromStrange->Sumw2();
+  fHistd0rphiITSMIoneSPDInAccS150200fromStrange->SetMinimum(0);
+  fOutput->Add(fHistd0rphiITSMIoneSPDInAccS150200fromStrange);
+
+  fHistd0rphiITSMIoneSPDInAccS150200fromMat = new TH1F("fHistd0rphiITSMIoneSPDInAccS150200fromMat","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
+  fHistd0rphiITSMIoneSPDInAccS150200fromMat->Sumw2();
+  fHistd0rphiITSMIoneSPDInAccS150200fromMat->SetMinimum(0);
+  fOutput->Add(fHistd0rphiITSMIoneSPDInAccS150200fromMat);
+
+  fHistd0rphiITSMIoneSPDInAccS350450fromStrange = new TH1F("fHistd0rphiITSMIoneSPDInAccS350450fromStrange","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
+  fHistd0rphiITSMIoneSPDInAccS350450fromStrange->Sumw2();
+  fHistd0rphiITSMIoneSPDInAccS350450fromStrange->SetMinimum(0);
+  fOutput->Add(fHistd0rphiITSMIoneSPDInAccS350450fromStrange);
+
+  fHistd0rphiITSMIoneSPDInAccS350450fromMat = new TH1F("fHistd0rphiITSMIoneSPDInAccS350450fromMat","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
+  fHistd0rphiITSMIoneSPDInAccS350450fromMat->Sumw2();
+  fHistd0rphiITSMIoneSPDInAccS350450fromMat->SetMinimum(0);
+  fOutput->Add(fHistd0rphiITSMIoneSPDInAccS350450fromMat);
+
+  fHistd0rphiITSMIoneSPDInAccS500700fromStrange = new TH1F("fHistd0rphiITSMIoneSPDInAccS500700fromStrange","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
+  fHistd0rphiITSMIoneSPDInAccS500700fromStrange->Sumw2();
+  fHistd0rphiITSMIoneSPDInAccS500700fromStrange->SetMinimum(0);
+  fOutput->Add(fHistd0rphiITSMIoneSPDInAccS500700fromStrange);
+
+  fHistd0rphiITSMIoneSPDInAccS500700fromMat = new TH1F("fHistd0rphiITSMIoneSPDInAccS500700fromMat","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
+  fHistd0rphiITSMIoneSPDInAccS500700fromMat->Sumw2();
+  fHistd0rphiITSMIoneSPDInAccS500700fromMat->SetMinimum(0);
+  fOutput->Add(fHistd0rphiITSMIoneSPDInAccS500700fromMat);
+
+  fHistd0rphiITSMIoneSPDInAccS10001500fromStrange = new TH1F("fHistd0rphiITSMIoneSPDInAccS10001500fromStrange","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
+  fHistd0rphiITSMIoneSPDInAccS10001500fromStrange->Sumw2();
+  fHistd0rphiITSMIoneSPDInAccS10001500fromStrange->SetMinimum(0);
+  fOutput->Add(fHistd0rphiITSMIoneSPDInAccS10001500fromStrange);
+
+  fHistd0rphiITSMIoneSPDInAccS10001500fromMat = new TH1F("fHistd0rphiITSMIoneSPDInAccS10001500fromMat","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
+  fHistd0rphiITSMIoneSPDInAccS10001500fromMat->Sumw2();
+  fHistd0rphiITSMIoneSPDInAccS10001500fromMat->SetMinimum(0);
+  fOutput->Add(fHistd0rphiITSMIoneSPDInAccS10001500fromMat);
+
+  fHistd0rphiITSMIoneSPDInAccS25004000fromStrange = new TH1F("fHistd0rphiITSMIoneSPDInAccS25004000fromStrange","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
+  fHistd0rphiITSMIoneSPDInAccS25004000fromStrange->Sumw2();
+  fHistd0rphiITSMIoneSPDInAccS25004000fromStrange->SetMinimum(0);
+  fOutput->Add(fHistd0rphiITSMIoneSPDInAccS25004000fromStrange);
+
+  fHistd0rphiITSMIoneSPDInAccS25004000fromMat = new TH1F("fHistd0rphiITSMIoneSPDInAccS25004000fromMat","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
+  fHistd0rphiITSMIoneSPDInAccS25004000fromMat->Sumw2();
+  fHistd0rphiITSMIoneSPDInAccS25004000fromMat->SetMinimum(0);
+  fOutput->Add(fHistd0rphiITSMIoneSPDInAccS25004000fromMat);
+
+  fHistd0rphiITSMIoneSPDInAccS40008000fromStrange = new TH1F("fHistd0rphiITSMIoneSPDInAccS40008000fromStrange","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
+  fHistd0rphiITSMIoneSPDInAccS40008000fromStrange->Sumw2();
+  fHistd0rphiITSMIoneSPDInAccS40008000fromStrange->SetMinimum(0);
+  fOutput->Add(fHistd0rphiITSMIoneSPDInAccS40008000fromStrange);
+
+  fHistd0rphiITSMIoneSPDInAccS40008000fromMat = new TH1F("fHistd0rphiITSMIoneSPDInAccS40008000fromMat","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
+  fHistd0rphiITSMIoneSPDInAccS40008000fromMat->Sumw2();
+  fHistd0rphiITSMIoneSPDInAccS40008000fromMat->SetMinimum(0);
+  fOutput->Add(fHistd0rphiITSMIoneSPDInAccS40008000fromMat);
+
+  
+  fHistd0zITSMIoneSPDInAccS150200 = new TH1F("fHistd0zITSMIoneSPDInAccS150200","Longitudinal imp. par. to VertexTracks for secondaries; d_{0} z [cm]; N tracks",300,-1.5,1.5);
+  fHistd0zITSMIoneSPDInAccS150200->Sumw2();
+  fHistd0zITSMIoneSPDInAccS150200->SetMinimum(0);
+  fOutput->Add(fHistd0zITSMIoneSPDInAccS150200);
+
+  fHistd0zITSMIoneSPDInAccS500700 = new TH1F("fHistd0zITSMIoneSPDInAccS500700","Longitudinal imp. par. to VertexTracks for secondaries; d_{0} z [cm]; N tracks",300,-1.5,1.5);
+  fHistd0zITSMIoneSPDInAccS500700->Sumw2();
+  fHistd0zITSMIoneSPDInAccS500700->SetMinimum(0);
+  fOutput->Add(fHistd0zITSMIoneSPDInAccS500700);
+
+  fHistd0zITSMIoneSPDInAccS10001500 = new TH1F("fHistd0zITSMIoneSPDInAccS10001500","Longitudinal imp. par. to VertexTracks for secondaries; d_{0} z [cm]; N tracks",300,-1.5,1.5);
+  fHistd0zITSMIoneSPDInAccS10001500->Sumw2();
+  fHistd0zITSMIoneSPDInAccS10001500->SetMinimum(0);
+  fOutput->Add(fHistd0zITSMIoneSPDInAccS10001500);
+
+
   // ntuples
   //
-  fNtupleESDTracks = new TNtuple("fNtupleESDTracks","tracks","pt:eta:phi:d0:z0:sigmad0:sigmaz0:ptMC:pdgMC:d0MC:d0MCv:z0MCv:sigmad0MCv:sigmaz0MCv:ITSflag");  
+  fNtupleESDTracks = new TNtuple("fNtupleESDTracks","tracks","pt:eta:phi:d0:z0:sigmad0:sigmaz0:ptMC:pdgMC:pdgMCMoth:d0MC:d0MCv:z0MCv:sigmad0MCv:sigmaz0MCv:ITSflag:isPrimary:isTPCSel");  
   fOutput->Add(fNtupleESDTracks);
 
   fNtupleITSAlignExtra = new TNtuple("fNtupleITSAlignExtra","ITS alignment checks: extra clusters","layer:x:y:z:dxy:dz:xloc:zloc:npoints:pt");  
@@ -474,18 +1304,30 @@ void AliAnalysisTaskITSTrackingCheck::CreateOutputObjects()
 }
 
 //________________________________________________________________________
-void AliAnalysisTaskITSTrackingCheck::Exec(Option_t *) 
+void AliAnalysisTaskITSTrackingCheck::UserExec(Option_t *) 
 {
   // Main loop
   // Called for each event
-  
+
+  fESD = dynamic_cast<AliESDEvent*>(InputEvent());
+
   if (!fESD) {
     Printf("ERROR: fESD not available");
     return;
   }
-  //if(fESD->GetEventType()!=7) return;
 
-  const AliESDVertex *vertexESD = fESD->GetPrimaryVertexTracks();
+
+  fHistNEvents->Fill(-1);
+
+
+  Bool_t isSelected = kTRUE;
+  if(fUsePhysSel) {
+    isSelected = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected();
+  }
+  if(!isSelected) return;
+
+  
+  //if(fESD->GetEventType()!=7) return;
 
   // ***********  MC info ***************
   TArrayF mcVertex(3);
@@ -546,10 +1388,53 @@ void AliAnalysisTaskITSTrackingCheck::Exec(Option_t *)
   Double_t mcVtxPos[3]={mcVertex[0],mcVertex[1],mcVertex[2]},mcVtxSigma[3]={0,0,0};
   vertexMC = new AliESDVertex(mcVtxPos,mcVtxSigma);
 
-  // ***********  ESD friends ***********
-  fESD->SetESDfriend(fESDfriend); //Attach the friend to the ESD
-  // ***********  ESD friends ***********
-  if(!fESDfriend) printf("no ESD friend\n");
+
+
+  //------- event selection --------
+  Int_t   mincontrSPDvtx=1;
+  Double_t maxzSPDvtx=20.;
+  Double_t maxrSPDvtx=1.;
+  Bool_t useTRKvtx=kTRUE;
+  Bool_t useSPDvtxifNotTRK=kTRUE;
+  Int_t   mincontrTRKvtx=1;
+  //Double_t maxzTRKvtx=20.;
+  //Double_t maxrTRKvtx=1.;
+  //------- TPC track selection --------
+  Int_t    minclsTPC=90;
+  Double_t maxchi2perTPCcl=4.;
+  Double_t minEtaInAcc=-0.8; // -0.8
+  Double_t maxEtaInAcc=0.8; // 0.8
+  Double_t maxdcaxy=2.4;//2.4;
+  Double_t maxdcaz=3.2;//3.2;
+  AliESDtrackCuts* esdtrackCutsTPC = new AliESDtrackCuts("esdtrackCutsTPC");
+  esdtrackCutsTPC->SetMaxDCAToVertexXY(maxdcaxy);
+  esdtrackCutsTPC->SetMaxDCAToVertexZ(maxdcaz);
+  esdtrackCutsTPC->SetDCAToVertex2D(kTRUE);
+  esdtrackCutsTPC->SetRequireSigmaToVertex(kFALSE);
+  esdtrackCutsTPC->SetRequireTPCRefit(kFALSE);// cannot do it because status not copied in AliESDtrack::FillTPCOnlyTrack
+  esdtrackCutsTPC->SetAcceptKinkDaughters(kFALSE);
+  esdtrackCutsTPC->SetMinNClustersTPC(minclsTPC);
+  esdtrackCutsTPC->SetMaxChi2PerClusterTPC(maxchi2perTPCcl);
+  esdtrackCutsTPC->SetEtaRange(minEtaInAcc,maxEtaInAcc);
+  SetESDtrackCutsTPC(esdtrackCutsTPC);
+  //------- ITS+TPC track selection --------
+  Double_t maxdcaxyITSTPC=0.2;
+  Double_t maxdcazITSTPC=1.e6;
+  AliESDtrackCuts* esdtrackCutsITSTPC = new AliESDtrackCuts("esdtrackCutsITSTPC");
+  esdtrackCutsITSTPC->SetMaxDCAToVertexXY(maxdcaxyITSTPC);
+  esdtrackCutsITSTPC->SetMaxDCAToVertexZ(maxdcazITSTPC);
+  esdtrackCutsITSTPC->SetDCAToVertex2D(kFALSE);
+  esdtrackCutsITSTPC->SetRequireSigmaToVertex(kFALSE);
+  esdtrackCutsITSTPC->SetRequireITSRefit(kTRUE);
+  esdtrackCutsITSTPC->SetClusterRequirementITS(AliESDtrackCuts::kSPD,
+                                              AliESDtrackCuts::kAny);
+  esdtrackCutsITSTPC->SetAcceptKinkDaughters(kFALSE);
+  esdtrackCutsITSTPC->SetMinNClustersTPC(minclsTPC);
+  esdtrackCutsITSTPC->SetMaxChi2PerClusterTPC(maxchi2perTPCcl);
+  esdtrackCutsITSTPC->SetEtaRange(minEtaInAcc,maxEtaInAcc);
+  SetESDtrackCutsITSTPC(esdtrackCutsITSTPC);
+  //---------------------------------------
+  
 
   //
   
@@ -569,16 +1454,45 @@ void AliAnalysisTaskITSTrackingCheck::Exec(Option_t *)
   if(!eventTriggered) return;
   */
 
+
+  fHistNEvents->Fill(0);
+
   // SPD vertex
   const AliESDVertex *spdv=fESD->GetPrimaryVertexSPD();
-  
+  // Select good SPD vertices
+  TString spdvtitle=spdv->GetTitle();
+  //if(!spdvtitle.Contains("3D")) return;
+  if(spdv->GetNContributors()<mincontrSPDvtx ||
+     TMath::Abs(spdv->GetZv())>maxzSPDvtx ||  
+     spdv->GetXv()*spdv->GetXv()+spdv->GetYv()*spdv->GetYv()>maxrSPDvtx) {
+    delete esdtrackCutsTPC; esdtrackCutsTPC=0;
+    delete esdtrackCutsITSTPC; esdtrackCutsITSTPC=0;
+    return;
+  }
+
+
+  //
+  // Tracks vertex
+  const AliESDVertex *vertexESD = fESD->GetPrimaryVertexTracks();
+
+
+  if(spdvtitle.Contains("3D")) {
+    fHistNEvents->Fill(1);
+    fHistNEvents->Fill(3);
+  } else {
+    fHistNEvents->Fill(2);
+    fHistNEvents->Fill(3);
+  }
+  if(vertexESD) {
+    if(vertexESD->GetStatus()) fHistNEvents->Fill(4);
+  }
+
   Int_t ntracks = fESD->GetNumberOfTracks();
   printf("Tracks # = %d\n",fESD->GetNumberOfTracks());
 
   fHistNtracks->Fill(ntracks);
   // Post the data already here
-  PostData(0, fOutput);
+  PostData(1, fOutput);
 
   Int_t idet,status; Float_t xloc,zloc;
   Double_t rSPDouter=7.6,rSDDouter=23.9,rSSDouter=43.1;  
@@ -587,8 +1501,6 @@ void AliAnalysisTaskITSTrackingCheck::Exec(Option_t *)
   // loop on tracks
   for(Int_t itr=0; itr<ntracks; itr++) {
     AliESDtrack *track = fESD->GetTrack(itr);
-
-
     // remove kink daughters
     if(track->GetKinkIndex(0)>0) continue;
 
@@ -596,33 +1508,113 @@ void AliAnalysisTaskITSTrackingCheck::Exec(Option_t *)
     if (!(track->GetStatus() & AliESDtrack::kITSin) &&
        !(track->GetStatus() & AliESDtrack::kTPCin)) continue;
 
-    Bool_t itsrefit=kFALSE,tpcin=kFALSE,itsfindable=kFALSE,itsfindableAcc=kFALSE;
+    Bool_t isPrimary=kTRUE,isFromMat=kFALSE,isFromStrange=kFALSE;
+    Double_t rProdVtx=0,zProdVtx=0;
+    Int_t pdgTrk=0,pdgMoth=0;
+    Int_t nClsMCSPD=0;
+  
+    Int_t trkLabel = TMath::Abs(track->GetLabel());
+    Bool_t isFake=(track->GetLabel()>=0 ? kFALSE : kTRUE);
+    // check if it is primary
+    if(fReadMC && stack) {
+      isPrimary = stack->IsPhysicalPrimary(trkLabel);
+      part = (TParticle*)stack->Particle(trkLabel);
+      rProdVtx = TMath::Sqrt((part->Vx()-mcVertex[0])*(part->Vx()-mcVertex[0])+(part->Vy()-mcVertex[1])*(part->Vy()-mcVertex[1]));
+      zProdVtx = TMath::Abs(part->Vz()-mcVertex[2]);
+      //if(rProdVtx<2.8) isPrimary=kTRUE; // this could be tried
+      pdgTrk = TMath::Abs(part->GetPdgCode());
+      if(part->GetFirstMother()>=0) {
+       TParticle* mm=stack->Particle(part->GetFirstMother());
+       if(mm) pdgMoth = TMath::Abs(mm->GetPdgCode());
+      }
+      if(pdgMoth==310 || pdgMoth==321 || pdgMoth==3122 || pdgMoth==3312) isFromStrange=kTRUE;
+      if(pdgMoth==211 || pdgMoth==22 || pdgMoth==2112 || pdgMoth==2212) isFromMat=kTRUE;
+      nClsMCSPD = NumberOfITSClustersMC(trkLabel,240);
+    }
+
+    Bool_t itsrefit=kFALSE,tpcrefit=kFALSE,itsfindable=kFALSE,itsfindableAcc=kFALSE;
     if ((track->GetStatus() & AliESDtrack::kITSrefit)) itsrefit=kTRUE;
-    if ((track->GetStatus() & AliESDtrack::kTPCin)) tpcin=kTRUE;
+    if ((track->GetStatus() & AliESDtrack::kTPCrefit)) tpcrefit=kTRUE;
+    //if ((track->GetStatus() & AliESDtrack::kTPCin)) tpcrefit=kTRUE;
 
+    // remove tracks with kTPCin and not kTPCrefit 
+    if ((track->GetStatus() & AliESDtrack::kTPCin) && !tpcrefit) continue;
 
+    AliESDtrack *trackTPC = 0;
+    if(tpcrefit) trackTPC = AliESDtrackCuts::GetTPCOnlyTrack(fESD,itr);
+    if(trackTPC) trackTPC->RelateToVertex(spdv,fESD->GetMagneticField(),100.); // relate it to the SPD vertex
+   
 
-    Int_t trkLabel = TMath::Abs(track->GetLabel());
     Int_t nclsITS = track->GetNcls(0);
+    Int_t nclsSDDSSD = 0;
     Int_t nclsokbadoutinzITS = 0;
     Bool_t outInZ=kFALSE;
+    Bool_t skipTrack=kFALSE;
 
     for(Int_t layer=0; layer<6; layer++) {
+      if(layer>=2 && track->HasPointOnITSLayer(layer)) nclsSDDSSD++;
+      if(layer==0 && !track->HasPointOnITSLayer(1)) continue;
+      if(layer==1 && !track->HasPointOnITSLayer(0)) continue;
       track->GetITSModuleIndexInfo(layer,idet,status,xloc,zloc);
+      if(status<0) continue;
       if(layer>=2) idet+=240; // add n SPD modules
-      if(layer>=4) idet+=260; // add n SPD modules
+      if(layer>=4) idet+=260; // add n SDD modules
       if(status==4) outInZ=kTRUE;
-      if(tpcin) {
+      
+      if(layer==1 && tpcrefit && itsrefit) {
+       Double_t xyz[3];
+       track->GetXYZAt(rSPDouter,fESD->GetMagneticField(),xyz);
+       if(status==1) {
+         if(idet%4==0) fHistZatSPDouter0ok->Fill(xyz[2]);
+         if(idet%4==1) fHistZatSPDouter1ok->Fill(xyz[2]);
+         if(idet%4==2) fHistZatSPDouter2ok->Fill(xyz[2]);
+         if(idet%4==3) fHistZatSPDouter3ok->Fill(xyz[2]);
+       }
+       if(status==2 || status==5) {
+         if(idet%4==0) fHistZatSPDouter0notok->Fill(xyz[2]);
+         if(idet%4==1) fHistZatSPDouter1notok->Fill(xyz[2]);
+         if(idet%4==2) fHistZatSPDouter2notok->Fill(xyz[2]);
+         if(idet%4==3) fHistZatSPDouter3notok->Fill(xyz[2]);
+       }
+      }
+      // kill SDD clusters in MC
+      if(fReadMC && (layer==2 || layer==3)) {
+       Double_t qITS[4]; track->GetITSdEdxSamples(qITS);
+       Double_t conv=3.34/5.43; 
+       if(layer==2 && status==1 && qITS[0]*conv < 30.) status=5;
+       if(layer==3 && status==1 && qITS[1]*conv < 30.) status=5;
+      }
+      if(tpcrefit) {
+       if(trackTPC) if(!fESDtrackCutsTPC->AcceptTrack(trackTPC)) continue;
        if(status==1) fHistClusterMapITSMIok->Fill(layer);
        if(status==2) fHistClusterMapITSMIbad->Fill(layer);
        if(status==3) fHistClusterMapITSMIskipped->Fill(layer);
        if(status==4) fHistClusterMapITSMIoutinz->Fill(layer);
        if(status==5) fHistClusterMapITSMInocls->Fill(layer);
        if(status==6) fHistClusterMapITSMInorefit->Fill(layer);
+       if(status==1 && !outInZ) fHistClusterMapModuleITSMIokInAcc->Fill(idet);
+       if((status==2 || status==7) && !outInZ) fHistClusterMapModuleITSMIbadInAcc->Fill(idet);
+       if(status==5 && !outInZ) fHistClusterMapModuleITSMInoclsInAcc->Fill(idet);
        if(status==1 || status==2 || status==4) {
          fHistClusterMapITSMIokoutinzbad->Fill(layer);
          nclsokbadoutinzITS++;
        }
+       /*if(idet>=80 && idet<120) {
+         Double_t xyz[3];
+         track->GetXYZAt(6.8,fESD->GetMagneticField(),xyz);
+         printf("det %d status %d phi %f z %f zloc %f xloc %f\n",idet,status,TMath::ATan2(xyz[1],xyz[0]),xyz[2],zloc,xloc);
+         }*/
+       if((layer==2 || layer==3) && status!=2 && status!=4) {
+         //Float_t xlocCls;
+         //Int_t nClsInMod = NumberOfITSClusters(idet,xlocCls);
+         fHistxlocSDDall->Fill(xloc);
+         fHistzlocSDDall->Fill(zloc);
+         if(status==1  /*nClsInMod>0*/) {
+           fHistxlocSDDok->Fill(xloc);
+           fHistxlocVSmodSDDok->Fill(idet,xloc);
+           fHistzlocSDDok->Fill(zloc);
+         }     
+       }
       } else {
        if(status==1) fHistClusterMapITSSAok->Fill(layer);
        if(status==2) fHistClusterMapITSSAbad->Fill(layer);
@@ -632,7 +1624,7 @@ void AliAnalysisTaskITSTrackingCheck::Exec(Option_t *)
        if(status==6) fHistClusterMapITSSAnorefit->Fill(layer);
        if(status==1 || status==2 || status==4) fHistClusterMapITSSAokoutinzbad->Fill(layer);
        if(status==1 && !outInZ) {fHistClusterMapITSSAokInAcc->Fill(layer);fHistClusterMapModuleITSSAokInAcc->Fill(idet);}
-       if(status==2 && !outInZ) {fHistClusterMapITSSAbadInAcc->Fill(layer);fHistClusterMapModuleITSSAbadInAcc->Fill(idet);}
+       if((status==2 || status==7) && !outInZ) {fHistClusterMapITSSAbadInAcc->Fill(layer);fHistClusterMapModuleITSSAbadInAcc->Fill(idet);}
        if(status==3 && !outInZ) fHistClusterMapITSSAskippedInAcc->Fill(layer);
        if(status==4 && !outInZ) fHistClusterMapITSSAoutinzInAcc->Fill(layer);
        if(status==5 && !outInZ) {fHistClusterMapITSSAnoclsInAcc->Fill(layer);fHistClusterMapModuleITSSAnoclsInAcc->Fill(idet);}
@@ -640,105 +1632,382 @@ void AliAnalysisTaskITSTrackingCheck::Exec(Option_t *)
        if((status==1 || status==2 || status==4) && !outInZ) fHistClusterMapITSSAokoutinzbadInAcc->Fill(layer);
       }
       if(TESTBIT(track->GetITSClusterMap(),layer)) {
-       if(tpcin) {
+       if(tpcrefit) {
          fHistClusterMapITSMI->Fill(layer);
        } else {
          fHistClusterMapITSSA->Fill(layer);
          if(!outInZ) fHistClusterMapITSSAInAcc->Fill(layer);
        }
       }
+      /*    
+      // SKIP SDD MODULES LOW EFF
+      if(
+        idet==246 ||
+        idet==247 ||
+        idet==256 ||
+        idet==261 ||
+        idet==267 ||
+        idet==333 ||
+        idet==343 ||
+        idet==346 ||
+        idet==349 ||
+        idet==376 ||
+        idet==390 ||
+        idet==392 ||
+        idet==409 ||
+        idet==411 ||
+        idet==464 ||
+        idet==468 ||
+        idet==474 ||
+        idet==469
+        ) 
+       skipTrack=kTRUE;
+      */
+         /*
+      if(
+        idet==245
+        || idet==248
+        || idet==253
+        || idet==264
+        || idet==276
+        || idet==286
+        || idet==287
+        || idet==292
+        || idet==295
+        || idet==302
+        || idet==305
+        || idet==307
+        || idet==315
+        || idet==320
+        || idet==330
+        || idet==331
+        || idet==341
+        || idet==357
+        || idet==368
+        || idet==376
+        || idet==377
+        || idet==378
+        || idet==379
+        || idet==380
+        || idet==381
+        || idet==382
+        || idet==383
+        || idet==422
+        || idet==444
+        || idet==445
+        || idet==450
+        || idet==451
+        || idet==452
+        || idet==453
+        || idet==455
+        || idet==459
+        || idet==469
+        || idet==485
+        || idet==493
+        || idet==494
+        || idet==495
+        || idet==496
+        || idet==497
+        || idet==498
+        || idet==499
+        ) skipTrack=kTRUE;
+      // SKIP SDD MODULES LOW EFF
+      */
     }  
+    if(skipTrack) {delete trackTPC; trackTPC=0; continue;}
 
     // TPC track findable in ITS
-    if(tpcin && track->GetNcls(1)>=50 &&
-       TMath::Abs(track->GetD(0,0,fESD->GetMagneticField()))<2.) {
-      itsfindable=kTRUE;
-      Double_t zAtSSDouter=100,zAtSDDouter=100,zAtSPDouter=100;
-      track->GetZAt(rSSDouter,fESD->GetMagneticField(),zAtSSDouter);
-      track->GetZAt(rSDDouter,fESD->GetMagneticField(),zAtSDDouter);
-      track->GetZAt(rSPDouter,fESD->GetMagneticField(),zAtSPDouter);
-      fHistPtTPC->Fill(track->Pt());  
-      if(TMath::Abs(track->Eta())<0.9 && 
-        TMath::Abs(zAtSSDouter)<zSSDouter &&
-        TMath::Abs(zAtSDDouter)<zSDDouter &&
-        TMath::Abs(zAtSPDouter)<zSPDouter) {
-       itsfindableAcc=kTRUE;
-       fHistPtTPCInAcc->Fill(track->Pt());  
-       fHistPhiTPCInAcc->Fill(track->Phi());  
+    if(tpcrefit && trackTPC) { 
+      if(fESDtrackCutsTPC->AcceptTrack(trackTPC)) {
+       itsfindable=kTRUE;
+       Double_t zAtSSDouter=100,zAtSDDouter=100,zAtSPDouter=100;
+       track->GetZAt(rSSDouter,fESD->GetMagneticField(),zAtSSDouter);
+       track->GetZAt(rSDDouter,fESD->GetMagneticField(),zAtSDDouter);
+       track->GetZAt(rSPDouter,fESD->GetMagneticField(),zAtSPDouter);
+       fHistPtTPC->Fill(track->Pt());  
+       if(TMath::Abs(zAtSSDouter)<1.*zSSDouter &&
+          TMath::Abs(zAtSDDouter)<1.*zSDDouter &&
+          TMath::Abs(zAtSPDouter)<1.*zSPDouter) {
+         itsfindableAcc=kTRUE;
+         fHistdEdxVSPtTPCInAcc->Fill(track->Pt(),track->GetTPCsignal());
+         fHistPtTPCInAcc->Fill(track->Pt());
+         fHistPtVSphiTPCInAcc->Fill(track->Phi(),track->Pt());
+         if(!(track->GetStatus()&AliESDtrack::kTRDout)) fHistPtTPCInAccNoTRDout->Fill(track->Pt()); 
+         if(!(track->GetStatus()&AliESDtrack::kTOFout)) fHistPtTPCInAccNoTOFout->Fill(track->Pt()); 
+         fHistPtTPCInAccWithPtTPCAtVtx->Fill(trackTPC->Pt());
+         Double_t pTPCinnerwall[3];
+         track->GetInnerPxPyPz(pTPCinnerwall);
+         Double_t ptTPCinnerwall=TMath::Sqrt(pTPCinnerwall[0]*pTPCinnerwall[0]+pTPCinnerwall[1]*pTPCinnerwall[1]);
+         fHistPtTPCInAccWithPtTPCAtInnerWall->Fill(ptTPCinnerwall);
+         if(track->GetStatus()&AliESDtrack::kITSrefit && !(track->GetStatus()&AliESDtrack::kTOFout)) fHistDeltaPtTPC->Fill(trackTPC->P(),track->P()-trackTPC->P());
+         fHistPhiTPCInAcc->Fill(track->Phi());  
+         if(isPrimary) {
+           fHistPtTPCInAccP->Fill(track->Pt());
+           if(pdgTrk==321) fHistPtTPCInAccPfromStrange->Fill(track->Pt());
+         } else {
+           fHistPtTPCInAccS->Fill(track->Pt());
+           if(isFromMat) fHistPtTPCInAccSfromMat->Fill(track->Pt());
+           if(isFromStrange) fHistPtTPCInAccSfromStrange->Fill(track->Pt());
+         }  
+         if(nClsMCSPD==2) fHistPtTPCInAccMCtwoSPD->Fill(track->Pt());
+         if(nClsMCSPD>=1) fHistPtTPCInAccMConeSPD->Fill(track->Pt());
+         //if(isPrimary) {fHistRProdVtxInAccP->Fill(rProdVtx);} else {fHistRProdVtxInAccS->Fill(rProdVtx);}
+       }
       }
     }
-  
-    if(itsfindable&&itsrefit) {
-      if(nclsITS==6) fHistPtITSMI6->Fill(track->Pt());
-      if(nclsITS==5) fHistPtITSMI5->Fill(track->Pt());
-      if(nclsITS==4) fHistPtITSMI4->Fill(track->Pt());
-      if(nclsITS==3) fHistPtITSMI3->Fill(track->Pt());
-      if(nclsITS==2) fHistPtITSMI2->Fill(track->Pt());
-      if(track->HasPointOnITSLayer(0) && track->HasPointOnITSLayer(1))
-       fHistPtITSMISPD->Fill(track->Pt());
-      if(track->HasPointOnITSLayer(0) || track->HasPointOnITSLayer(1))
-       fHistPtITSMIoneSPD->Fill(track->Pt());
-      if(nclsokbadoutinzITS==6) fHistPtITSMIokbadoutinz6->Fill(track->Pt());
-    }
-    if(itsfindableAcc&&itsrefit) {
-      if(nclsITS==6) fHistPtITSMI6InAcc->Fill(track->Pt());
-      if(nclsITS==5) fHistPtITSMI5InAcc->Fill(track->Pt());
-      if(nclsITS==4) fHistPtITSMI4InAcc->Fill(track->Pt());
-      if(nclsITS==3) fHistPtITSMI3InAcc->Fill(track->Pt());
-      if(nclsITS==2) fHistPtITSMI2InAcc->Fill(track->Pt());
-      if(track->HasPointOnITSLayer(0) && track->HasPointOnITSLayer(1))
-       fHistPtITSMISPDInAcc->Fill(track->Pt());
-      if(track->HasPointOnITSLayer(0) || track->HasPointOnITSLayer(1))
-       fHistPtITSMIoneSPDInAcc->Fill(track->Pt());
-      if(nclsokbadoutinzITS==6) fHistPtITSMIokbadoutinz6InAcc->Fill(track->Pt());
-      if(nclsokbadoutinzITS==5) fHistPtITSMIokbadoutinz5InAcc->Fill(track->Pt());
-      if(nclsokbadoutinzITS==4) fHistPtITSMIokbadoutinz4InAcc->Fill(track->Pt());
-      if(nclsokbadoutinzITS==6) fHistPhiITSMIokbadoutinz6InAcc->Fill(track->Phi());  
+
+
+    if(useTRKvtx) {
+      // we need the vertex to compute the impact parameters
+      if(!vertexESD) {delete trackTPC; trackTPC=0; continue;}
+      if(!(vertexESD->GetStatus()) || vertexESD->GetNContributors()<mincontrTRKvtx) {
+       if(useSPDvtxifNotTRK) {
+         vertexESD = fESD->GetPrimaryVertexSPD();
+       } else {
+         delete trackTPC; trackTPC=0; continue;
+       }
+      }
     }
 
+    // track prolonged in ITS with different conditions
+    if(itsrefit) {
+      if(itsfindable) {
+       if(nclsITS==6) fHistPtITSMI6->Fill(track->Pt());
+       if(nclsITS==5) fHistPtITSMI5->Fill(track->Pt());
+       if(nclsITS==4) fHistPtITSMI4->Fill(track->Pt());
+       if(nclsITS==3) fHistPtITSMI3->Fill(track->Pt());
+       if(nclsITS==2) fHistPtITSMI2->Fill(track->Pt());
+       if(track->HasPointOnITSLayer(0) && track->HasPointOnITSLayer(1))
+         fHistPtITSMISPD->Fill(track->Pt());
+       if(track->HasPointOnITSLayer(0) || track->HasPointOnITSLayer(1))
+         fHistPtITSMIoneSPD->Fill(track->Pt());
+       if(nclsokbadoutinzITS==6) fHistPtITSMIokbadoutinz6->Fill(track->Pt());
+      }
+      if(itsfindableAcc) {
+       if(nclsITS==6) {
+         fHistPtITSMI6InAcc->Fill(track->Pt());
+         if(isFake) fHistPtITSMI6InAccFake->Fill(track->Pt());
+         if(isPrimary) {fHistPtITSMI6InAccP->Fill(track->Pt());} else {fHistPtITSMI6InAccS->Fill(track->Pt());}  
+       }
+       if(nclsITS==5) {
+         fHistPtITSMI5InAcc->Fill(track->Pt());
+         if(isFake) fHistPtITSMI5InAccFake->Fill(track->Pt());
+         if(isPrimary) {fHistPtITSMI5InAccP->Fill(track->Pt());} else {fHistPtITSMI5InAccS->Fill(track->Pt());}  
+       }
+       if(nclsITS==4) {
+         fHistPtITSMI4InAcc->Fill(track->Pt());
+         if(isFake) fHistPtITSMI4InAccFake->Fill(track->Pt());
+         if(isPrimary) {fHistPtITSMI4InAccP->Fill(track->Pt());} else {fHistPtITSMI4InAccS->Fill(track->Pt());}  
+       }
+       if(nclsITS==3) {
+         fHistPtITSMI3InAcc->Fill(track->Pt());
+         if(isFake) fHistPtITSMI3InAccFake->Fill(track->Pt());
+         if(isPrimary) {fHistPtITSMI3InAccP->Fill(track->Pt());} else {fHistPtITSMI3InAccS->Fill(track->Pt());}  
+       }
+       if(nclsITS==2) {
+         fHistPtITSMI2InAcc->Fill(track->Pt());
+         if(isFake) fHistPtITSMI2InAccFake->Fill(track->Pt());
+         if(isPrimary) {fHistPtITSMI2InAccP->Fill(track->Pt());} else {fHistPtITSMI2InAccS->Fill(track->Pt());}  
+       }
+       if(track->HasPointOnITSLayer(0) && track->HasPointOnITSLayer(1)) {
+         fHistPtITSMISPDInAcc->Fill(track->Pt());
+         if(isFake) fHistPtITSMISPDInAccFake->Fill(track->Pt());
+         if(isPrimary) {fHistPtITSMISPDInAccP->Fill(track->Pt());} else {fHistPtITSMISPDInAccS->Fill(track->Pt());}  
+       }
+       if(track->HasPointOnITSLayer(0) || track->HasPointOnITSLayer(1)) {
+         fHistPtITSMIoneSPDInAcc->Fill(track->Pt());
+         if(isFake) fHistPtITSMIoneSPDInAccFake->Fill(track->Pt());
+         if(nclsSDDSSD>=3) fHistPtITSMIoneSPDthreeSDDSSDInAcc->Fill(track->Pt());
 
-    if(tpcin) {
+         if(isPrimary) {fHistPtITSMIoneSPDInAccP->Fill(track->Pt());} else {fHistPtITSMIoneSPDInAccS->Fill(track->Pt());}  
+       }
+       if(nclsokbadoutinzITS==6) fHistPtITSMIokbadoutinz6InAcc->Fill(track->Pt());
+       if(nclsokbadoutinzITS==5) fHistPtITSMIokbadoutinz5InAcc->Fill(track->Pt());
+       if(nclsokbadoutinzITS==4) fHistPtITSMIokbadoutinz4InAcc->Fill(track->Pt());
+       if(nclsokbadoutinzITS==6) fHistPhiITSMIokbadoutinz6InAcc->Fill(track->Phi());  
+      }
+    }
+
+    if(tpcrefit) {
       fHistNclsITSMI->Fill(nclsITS);
     } else {
       fHistNclsITSSA->Fill(nclsITS);
       if(!outInZ) fHistNclsITSSAInAcc->Fill(nclsITS);
     }
 
-    if(tpcin && fUseITSSAforNtuples) continue;
+    
+    if((tpcrefit && fUseITSSAforNtuples) || // only ITS-SA for ntuples
+       (!tpcrefit && !fUseITSSAforNtuples)) // only ITS-TPC for ntuples
+      { delete trackTPC; trackTPC=0; continue; }
 
-    Int_t iITSflag=0; //ITSflag takes the value 0 if the track has no cluster assigned in the SPDs, 1 (2) if one cluster is assigned in SPD1(2), 3 if two clusters are present. Then the same adding 10,20 or 30 for SDD and 100,200 or 300 for SSD
+    // impact parameter to VertexTracks
+    Float_t d0z0[2],covd0z0[3];
+    Double_t d0z0TPC[2],covd0z0TPC[3];
+    if(useTRKvtx) {
+      if(!track->RelateToVertex(vertexESD,fESD->GetMagneticField(),kVeryBig)) { delete trackTPC; trackTPC=0; continue; }
+    } else { 
+      //if(!track->RelateToVertex(vertexMC,fESD->GetMagneticField(),kVeryBig)) continue;
+      if(!track->RelateToVertex(spdv,fESD->GetMagneticField(),kVeryBig)) { delete trackTPC; trackTPC=0; continue; }
+    } 
+    track->GetImpactParameters(d0z0,covd0z0);
+    if(trackTPC) trackTPC->PropagateToDCA(spdv,fESD->GetMagneticField(),kVeryBig,d0z0TPC,covd0z0TPC);
+    if(covd0z0[0]<0. || covd0z0[2]<0. || covd0z0TPC[0]<0. || covd0z0TPC[2]<0.) { delete trackTPC; trackTPC=0; continue; }
+
+
+    // track that passes final ITS+TPC cuts
+    if(itsfindableAcc && fESDtrackCutsITSTPC->AcceptTrack(track)) {
+      fHistPtITSTPCsel->Fill(track->Pt());
+      fHistdEdxVSPtITSTPCsel->Fill(track->Pt(),track->GetITSsignal());
+      if(isPrimary) {
+       fHistPtITSTPCselP->Fill(track->Pt());
+       if(pdgTrk==321) fHistPtITSTPCselPfromStrange->Fill(track->Pt());
+      } else {
+       fHistPtITSTPCselS->Fill(track->Pt());
+       if(isFromMat) fHistPtITSTPCselSfromMat->Fill(track->Pt());
+       if(isFromStrange) fHistPtITSTPCselSfromStrange->Fill(track->Pt());
+      }  
+    }
+    
 
-    if(track->HasPointOnITSLayer(0)) iITSflag+=1;
-    if(track->HasPointOnITSLayer(1)) iITSflag+=2;
-    if(track->HasPointOnITSLayer(2)) iITSflag+=10;
-    if(track->HasPointOnITSLayer(3)) iITSflag+=20;
-    if(track->HasPointOnITSLayer(4)) iITSflag+=100;
-    if(track->HasPointOnITSLayer(5)) iITSflag+=200;
+    // fill d0 histos
+    if(((!fUseITSSAforNtuples&&itsfindableAcc) || fUseITSSAforNtuples) /*&& track->Charge()>0*/) {
+      if(track->Pt()>0.150 && track->Pt()<0.200) {
+       if(isPrimary) {
+         fHistd0rphiTPCInAccP150200->Fill(d0z0TPC[0]);
+         if(track->HasPointOnITSLayer(0) && track->HasPointOnITSLayer(1) && itsrefit)
+           fHistd0rphiITSMISPDInAccP150200->Fill(d0z0[0]);
+         if((track->HasPointOnITSLayer(0) || track->HasPointOnITSLayer(1)) && itsrefit) {
+           //if(((track->HasPointOnITSLayer(0) && !track->HasPointOnITSLayer(1)) || (!track->HasPointOnITSLayer(0) && track->HasPointOnITSLayer(1))) && itsrefit) {
+           if(TMath::Abs(d0z0[1])<maxdcazITSTPC) fHistd0rphiITSMIoneSPDInAccP150200->Fill(d0z0[0]);
+           if(TMath::Abs(d0z0[0])<maxdcaxyITSTPC) fHistd0zITSMIoneSPDInAccP150200->Fill(d0z0[1]);
+         }
+       } else {
+         fHistd0rphiTPCInAccS150200->Fill(d0z0TPC[0]);
+         if(track->HasPointOnITSLayer(0) && track->HasPointOnITSLayer(1) && itsrefit)
+           fHistd0rphiITSMISPDInAccS150200->Fill(d0z0[0]);
+         if((track->HasPointOnITSLayer(0) || track->HasPointOnITSLayer(1)) && itsrefit) {
+           if(TMath::Abs(d0z0[1])<maxdcazITSTPC) {
+             fHistd0rphiITSMIoneSPDInAccS150200->Fill(d0z0[0]);
+             if(isFromStrange) fHistd0rphiITSMIoneSPDInAccS150200fromStrange->Fill(d0z0[0]);
+             if(isFromMat) fHistd0rphiITSMIoneSPDInAccS150200fromMat->Fill(d0z0[0]);
+           }
+           if(TMath::Abs(d0z0[0])<maxdcaxyITSTPC) fHistd0zITSMIoneSPDInAccS150200->Fill(d0z0[1]);
+           if(TMath::Abs(d0z0[0])<0.1) fHistPDGMoth150200->Fill(pdgMoth);
+         }
+       }
+      }
+      if(track->Pt()>0.350 && track->Pt()<0.450) {
+       if(isPrimary) {
+         if((track->HasPointOnITSLayer(0) || track->HasPointOnITSLayer(1)) && itsrefit) {
+           if(TMath::Abs(d0z0[1])<maxdcazITSTPC) fHistd0rphiITSMIoneSPDInAccP350450->Fill(d0z0[0]);
+         }
+       } else {
+         if((track->HasPointOnITSLayer(0) || track->HasPointOnITSLayer(1)) && itsrefit) {
+           if(TMath::Abs(d0z0[1])<maxdcazITSTPC) {
+             fHistd0rphiITSMIoneSPDInAccS350450->Fill(d0z0[0]);
+             if(isFromStrange) fHistd0rphiITSMIoneSPDInAccS350450fromStrange->Fill(d0z0[0]);
+             if(isFromMat) fHistd0rphiITSMIoneSPDInAccS350450fromMat->Fill(d0z0[0]);
+           }
+         }
+       }
+      }
+      if(track->Pt()>0.500 && track->Pt()<0.700) {
+       if(isPrimary) {
+         fHistd0rphiTPCInAccP500700->Fill(d0z0TPC[0]);
+         if(track->HasPointOnITSLayer(0) && track->HasPointOnITSLayer(1) && itsrefit)
+           fHistd0rphiITSMISPDInAccP500700->Fill(d0z0[0]);
+         if((track->HasPointOnITSLayer(0) || track->HasPointOnITSLayer(1)) && itsrefit) {
+           if(TMath::Abs(d0z0[1])<maxdcazITSTPC) fHistd0rphiITSMIoneSPDInAccP500700->Fill(d0z0[0]);
+           if(TMath::Abs(d0z0[0])<maxdcaxyITSTPC) fHistd0zITSMIoneSPDInAccP500700->Fill(d0z0[1]);
+         }
+       } else {
+         fHistd0rphiTPCInAccS500700->Fill(d0z0TPC[0]);
+         if(track->HasPointOnITSLayer(0) && track->HasPointOnITSLayer(1) && itsrefit)
+           fHistd0rphiITSMISPDInAccS500700->Fill(d0z0[0]);
+         if((track->HasPointOnITSLayer(0) || track->HasPointOnITSLayer(1)) && itsrefit) {
+           fHistPDGTrk->Fill(pdgTrk);
+           fHistPDGMoth->Fill(pdgMoth);
+           if(TMath::Abs(d0z0[0])<0.1) fHistPDGMoth500700->Fill(pdgMoth);
+           if(TMath::Abs(d0z0[1])<maxdcazITSTPC) {
+             fHistd0rphiITSMIoneSPDInAccS500700->Fill(d0z0[0]);
+             if(isFromStrange) fHistd0rphiITSMIoneSPDInAccS500700fromStrange->Fill(d0z0[0]);
+             if(isFromMat) fHistd0rphiITSMIoneSPDInAccS500700fromMat->Fill(d0z0[0]);
+           }
+           if(TMath::Abs(d0z0[0])<maxdcaxyITSTPC) fHistd0zITSMIoneSPDInAccS500700->Fill(d0z0[1]);
+           if(pdgMoth==310) fHistd0rphiITSMIoneSPDInAccS500700from310->Fill(d0z0[0]);
+           if(pdgMoth==321) fHistd0rphiITSMIoneSPDInAccS500700from321->Fill(d0z0[0]);
+           if(pdgMoth==3122) fHistd0rphiITSMIoneSPDInAccS500700from3122->Fill(d0z0[0]);
+           if(pdgMoth==211) fHistd0rphiITSMIoneSPDInAccS500700from211->Fill(d0z0[0]);
+           if(pdgMoth==22) fHistd0rphiITSMIoneSPDInAccS500700from22->Fill(d0z0[0]);
+           if(pdgMoth==211 && TMath::Abs(d0z0[0])>0.5) fHistRProdVtxInAccS->Fill(rProdVtx);
+         }
+       }
+      }
+      if(track->Pt()>1.000 && track->Pt()<1.500) {
+       if(isPrimary) {
+         fHistd0rphiTPCInAccP10001500->Fill(d0z0TPC[0]);
+         fHistd0zVSetaTPCInAccP10001500->Fill(d0z0TPC[1],trackTPC->Eta());
+
+         if(track->HasPointOnITSLayer(0) && track->HasPointOnITSLayer(1) && itsrefit)
+           fHistd0rphiITSMISPDInAccP10001500->Fill(d0z0[0]);
+         if((track->HasPointOnITSLayer(0) || track->HasPointOnITSLayer(1)) && itsrefit) {
+           if(TMath::Abs(d0z0[1])<maxdcazITSTPC) fHistd0rphiITSMIoneSPDInAccP10001500->Fill(d0z0[0]);
+           if(TMath::Abs(d0z0[0])<maxdcaxyITSTPC) fHistd0zITSMIoneSPDInAccP10001500->Fill(d0z0[1]);
+           fHistd0rphiVSphiITSMIoneSPDInAccP10001500->Fill(d0z0[0],track->Phi());
+           fHistd0rphiVSetaITSMIoneSPDInAccP10001500->Fill(d0z0[0],track->Eta());
+         }
+       } else {
+         fHistd0rphiTPCInAccS10001500->Fill(d0z0TPC[0]);
+         if(track->HasPointOnITSLayer(0) && track->HasPointOnITSLayer(1) && itsrefit)
+           fHistd0rphiITSMISPDInAccS10001500->Fill(d0z0[0]);
+         if((track->HasPointOnITSLayer(0) || track->HasPointOnITSLayer(1)) && itsrefit) {
+           if(TMath::Abs(d0z0[1])<maxdcazITSTPC) {
+             fHistd0rphiITSMIoneSPDInAccS10001500->Fill(d0z0[0]);
+             if(isFromStrange) fHistd0rphiITSMIoneSPDInAccS10001500fromStrange->Fill(d0z0[0]);
+             if(isFromMat) fHistd0rphiITSMIoneSPDInAccS10001500fromMat->Fill(d0z0[0]);
+           }
+           if(TMath::Abs(d0z0[0])<maxdcaxyITSTPC) fHistd0zITSMIoneSPDInAccS10001500->Fill(d0z0[1]);
+           if(TMath::Abs(d0z0[0])<0.1) fHistPDGMoth10001500->Fill(pdgMoth);
+         }
+       }
+      }
+      if(track->Pt()>2.500 && track->Pt()<4.000) {
+       if(isPrimary) {
+         if((track->HasPointOnITSLayer(0) || track->HasPointOnITSLayer(1)) && itsrefit) {
+           if(TMath::Abs(d0z0[1])<maxdcazITSTPC) fHistd0rphiITSMIoneSPDInAccP25004000->Fill(d0z0[0]);
+         }
+       } else {
+         if((track->HasPointOnITSLayer(0) || track->HasPointOnITSLayer(1)) && itsrefit) {
+           if(TMath::Abs(d0z0[1])<maxdcazITSTPC) {
+             fHistd0rphiITSMIoneSPDInAccS25004000->Fill(d0z0[0]);
+             if(isFromStrange) fHistd0rphiITSMIoneSPDInAccS25004000fromStrange->Fill(d0z0[0]);
+             if(isFromMat) fHistd0rphiITSMIoneSPDInAccS25004000fromMat->Fill(d0z0[0]);
+           }
+         }
+       }
+      }
+      if(track->Pt()>4.000 && track->Pt()<8.000) {
+       if(isPrimary) {
+         if((track->HasPointOnITSLayer(0) || track->HasPointOnITSLayer(1)) && itsrefit) {
+           if(TMath::Abs(d0z0[1])<maxdcazITSTPC) fHistd0rphiITSMIoneSPDInAccP40008000->Fill(d0z0[0]);
+         }
+       } else {
+         if((track->HasPointOnITSLayer(0) || track->HasPointOnITSLayer(1)) && itsrefit) {
+           if(TMath::Abs(d0z0[1])<maxdcazITSTPC) {
+             fHistd0rphiITSMIoneSPDInAccS40008000->Fill(d0z0[0]);
+             if(isFromStrange) fHistd0rphiITSMIoneSPDInAccS40008000fromStrange->Fill(d0z0[0]);
+             if(isFromMat) fHistd0rphiITSMIoneSPDInAccS40008000fromMat->Fill(d0z0[0]);
+           }
+         }
+       }
+      }
 
-    if(iITSflag==333 && track->GetNcls(0)<6) 
-      printf(" ERROR %d   %d\n",track->GetNcls(0),track->GetLabel());
-    
-    // number of associated ITS clusters
-    iITSflag += 1000*track->GetNcls(0);
-     
-    // number of associated TPC clusters
-    iITSflag += 100000*track->GetNcls(1);
-     
-    // if MC info and is available
-    // write the number of ITS clusters produced by this track
-    Int_t nITSclsMC=0;
-    if(fReadMC && fReadRPLabels) {
-      nITSclsMC = NumberOfITSClustersMC(trkLabel);
-      if(nITSclsMC>=0) iITSflag += 10000*nITSclsMC;    
     }
 
-    if(!vertexESD) continue;
-    if(!(vertexESD->GetStatus())) continue;
+    if(trackTPC) { delete trackTPC; trackTPC=0; }
 
-    // impact parameter to VertexTracks
-    Double_t d0z0[2],covd0z0[3];
-    track->PropagateToDCA(vertexESD,fESD->GetMagneticField(),100.,d0z0,covd0z0);
-    if(covd0z0[0]<0. || covd0z0[2]<0.) continue;
+    // encode ITS cluster map, including MC info
+    Int_t iITSflag=MakeITSflag(track);
 
     // if MC info is available: get particle properties
     Float_t ptMC=-999.,pdgMC=-999.,d0MC=-999.;
@@ -750,16 +2019,16 @@ void AliAnalysisTaskITSTrackingCheck::Exec(Option_t *)
       d0MC=ParticleImpParMC(part,vertexMC,0.1*fESD->GetMagneticField());
       track->PropagateToDCA(vertexMC,fESD->GetMagneticField(),100.,d0z0MCv,covd0z0MCv);
       if(covd0z0MCv[0]<0. || covd0z0MCv[2]<0.) continue;
-      // flag fake tracks
-      if(track->GetLabel()<0) iITSflag *= -1;
     }
 
     Double_t sigmad0MCv=TMath::Sqrt(covd0z0MCv[0]);
     if(!itsrefit) sigmad0MCv *= -1.;
+    Float_t isPrimaryFl = (isPrimary ? 1. : 0.);
+    Float_t isTPCSelFl  = (itsfindableAcc ? 1. : 0.);
 
     // fill ntuple with track properties
     if(fFillNtuples && SelectPt(track->Pt())) {
-      Float_t fillArray[19]={track->Pt(),track->Eta(),track->Phi(),d0z0[0],d0z0[1],TMath::Sqrt(covd0z0[0]),TMath::Sqrt(covd0z0[2]),ptMC,pdgMC,d0MC,d0z0MCv[0],d0z0MCv[1],sigmad0MCv,TMath::Sqrt(covd0z0MCv[2]),(Float_t)iITSflag};
+      Float_t fillArray[22]={track->Pt(),track->Eta(),track->Phi(),d0z0[0],d0z0[1],TMath::Sqrt(covd0z0[0]),TMath::Sqrt(covd0z0[2]),ptMC,pdgMC,pdgMoth,d0MC,d0z0MCv[0],d0z0MCv[1],sigmad0MCv,TMath::Sqrt(covd0z0MCv[2]),(Float_t)iITSflag,isPrimaryFl,isTPCSelFl};
       fNtupleESDTracks->Fill(fillArray);
     }
 
@@ -767,7 +2036,6 @@ void AliAnalysisTaskITSTrackingCheck::Exec(Option_t *)
     // AliTrackPoints: alignment checks
     // 
     if(!fFillNtuples) continue;
-    if(!fESDfriend) continue;
 
     const AliTrackPointArray *array = track->GetTrackPointArray();
     if(!array) continue;
@@ -848,11 +2116,14 @@ void AliAnalysisTaskITSTrackingCheck::Exec(Option_t *)
       fNtupleITSAlignExtra->Fill(layerExtra,pointExtra.GetX(),pointExtra.GetY(),pointExtra.GetZ(),dzExtra[0],dzExtra[1],xlocExtra,zlocExtra,nclsITS,track->Pt());  
     }
     
-
+    if(trackTPC) { delete trackTPC; trackTPC=0; }
   } // end loop on tracks
   
   if(vertexMC) { delete vertexMC; vertexMC=0; }
 
+  delete esdtrackCutsTPC;    esdtrackCutsTPC=0;
+  delete esdtrackCutsITSTPC; esdtrackCutsITSTPC=0;
+
   return;
 }      
 
@@ -861,35 +2132,23 @@ void AliAnalysisTaskITSTrackingCheck::Terminate(Option_t *)
 {
   // Draw result to the screen
   // Called once at the end of the query
-  fOutput = dynamic_cast<TList*> (GetOutputData(0));
+  fOutput = dynamic_cast<TList*> (GetOutputData(1));
   if (!fOutput) {     
     Printf("ERROR: fOutput not available");
     return;
   }
-
-  fHistNtracks = dynamic_cast<TH1F*>(fOutput->FindObject("fHistNtracks"));
-  fHistNclsITSMI = dynamic_cast<TH1F*>(fOutput->FindObject("fHistNclsITSMI"));
-  fHistNclsITSSA = dynamic_cast<TH1F*>(fOutput->FindObject("fHistNclsITSSA"));
-  fHistClusterMapITSMI = dynamic_cast<TH1F*>(fOutput->FindObject("fHistClusterMapITSMI"));
-  fHistClusterMapITSMIbad = dynamic_cast<TH1F*>(fOutput->FindObject("fHistClusterMapITSMIbad"));
-  fHistClusterMapITSMIskipped = dynamic_cast<TH1F*>(fOutput->FindObject("fHistClusterMapITSMIskipped"));
-  fHistClusterMapITSMIoutinz = dynamic_cast<TH1F*>(fOutput->FindObject("fHistClusterMapITSMIoutinz"));
-  fHistClusterMapITSMInorefit = dynamic_cast<TH1F*>(fOutput->FindObject("fHistClusterMapITSMInorefit"));
-  fHistClusterMapITSMInocls = dynamic_cast<TH1F*>(fOutput->FindObject("fHistClusterMapITSMInocls"));
-  fHistClusterMapITSSA = dynamic_cast<TH1F*>(fOutput->FindObject("fHistClusterMapITSSA"));
-  fHistClusterMapITSSAbad = dynamic_cast<TH1F*>(fOutput->FindObject("fHistClusterMapITSSAbad"));
-  fHistClusterMapITSSAskipped = dynamic_cast<TH1F*>(fOutput->FindObject("fHistClusterMapITSSAskipped"));
-  fHistClusterMapITSSAoutinz = dynamic_cast<TH1F*>(fOutput->FindObject("fHistClusterMapITSSAoutinz"));
-  fHistClusterMapITSSAnorefit = dynamic_cast<TH1F*>(fOutput->FindObject("fHistClusterMapITSSAnorefit"));
-  fHistClusterMapITSSAnocls = dynamic_cast<TH1F*>(fOutput->FindObject("fHistClusterMapITSSAnocls"));
-  fNtupleESDTracks = dynamic_cast<TNtuple*>(fOutput->FindObject("fNtupleESDTracks"));
-  fNtupleITSAlignExtra = dynamic_cast<TNtuple*>(fOutput->FindObject("fNtupleITSAlignExtra"));
-  fNtupleITSAlignSPDTracklets = dynamic_cast<TNtuple*>(fOutput->FindObject("fNtupleITSAlignSPDTracklets"));
+  fHistNEvents = dynamic_cast<TH1F*>(fOutput->FindObject("fHistNEvents"));
+  fHistNEventsFrac = dynamic_cast<TH1F*>(fOutput->FindObject("fHistNEventsFrac"));
+  if(fHistNEvents && fHistNEventsFrac) {
+    for(Int_t ibin=2; ibin<=fHistNEvents->GetNbinsX(); ibin++) {
+      if(fHistNEvents->GetBinContent(2)) fHistNEventsFrac->SetBinContent(ibin,fHistNEvents->GetBinContent(ibin)/fHistNEvents->GetBinContent(2)); 
+    }
+  }
 
   return;
 }
 //---------------------------------------------------------------------------
-Int_t AliAnalysisTaskITSTrackingCheck::NumberOfITSClustersMC(Int_t label) const
+Int_t AliAnalysisTaskITSTrackingCheck::NumberOfITSClustersMC(Int_t label,Int_t nModules) const
 {
   //
   // Return number of ITS clusters produced by MC particle with given label
@@ -899,7 +2158,7 @@ Int_t AliAnalysisTaskITSTrackingCheck::NumberOfITSClustersMC(Int_t label) const
   if(!esdHRP) return -1;
   TTree *cTree = (TTree*)esdHRP->GetTreeR("ITS");
   if(!cTree) return -1;
-  TClonesArray *clusters=0;   // new TClonesArray("AliITSRecPoint",10000);
+  TClonesArray *clusters=0;
   cTree->SetBranchAddress("ITSRecPoints",&clusters);
   if(!clusters) return -1;
 
@@ -908,21 +2167,53 @@ Int_t AliAnalysisTaskITSTrackingCheck::NumberOfITSClustersMC(Int_t label) const
   Int_t ncls[6]={0,0,0,0,0,0};
   Int_t nclstot=0;
 
-  for(i=0; i<2198; i++) {
+  for(i=0; i<nModules; i++) {
     cTree->GetEvent(i);
     n=clusters->GetEntriesFast();
     for (icl=0; icl<n; icl++) {
       c=(AliITSRecPoint*)clusters->UncheckedAt(icl);
       lay=c->GetLayer();
+      //printf("mod %d lay %d xloc %f zloc %f\n",i,lay,c->GetDetLocalX(),c->GetDetLocalZ());
       for(ilab=0;ilab<3;ilab++) {
         if(c->GetLabel(ilab)==label) ncls[lay]++;
       }
     }
   }
-  for(i=0;i<6;i++) { if(ncls[i]) nclstot++; }
+  for(i=0;i<6;i++) { 
+    //printf("%d\n",ncls[i]); 
+    if(ncls[i]) nclstot++; 
+  }
 
   return nclstot;
-    //return label*0;
+}
+//---------------------------------------------------------------------------
+Int_t AliAnalysisTaskITSTrackingCheck::NumberOfITSClusters(Int_t idet,Float_t &xloc) const
+{
+  //
+  // Return number of ITS clusters produced by MC particle with given label
+  //
+  
+  AliESDInputHandlerRP *esdHRP = dynamic_cast<AliESDInputHandlerRP*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
+  if(!esdHRP) return -1;
+  TTree *cTree = (TTree*)esdHRP->GetTreeR("ITS");
+  if(!cTree) return -1;
+  TClonesArray *clusters=0;   // new TClonesArray("AliITSRecPoint",10000);
+  cTree->SetBranchAddress("ITSRecPoints",&clusters);
+  if(!clusters) return -1;
+
+  AliITSRecPoint *c=0;
+  Int_t n,icl;
+
+  cTree->GetEvent(idet);
+  n=clusters->GetEntriesFast();
+
+  if(n==1) {
+    for (icl=0; icl<n; icl++) {
+      c=(AliITSRecPoint*)clusters->UncheckedAt(icl);
+      xloc = c->GetDetLocalX();
+    }
+  }
+  return n;
 }
 //---------------------------------------------------------------------------
 Double_t AliAnalysisTaskITSTrackingCheck::ParticleImpParMC(TParticle *part,
@@ -958,10 +2249,10 @@ Bool_t AliAnalysisTaskITSTrackingCheck::SelectPt(Double_t pt)
   //
   // Keep only tracks in given pt bins
   // 
-  Double_t ptlower[10]={0.29,0.49,0.75,0.9,1.9,3.5,6.5, 9.,19.,27.};
-  Double_t ptupper[10]={0.31,0.51,0.85,1.1,2.1,4.5,7.5,11.,21.,33.};
+  Double_t ptlower[11]={0.15,0.29,0.49,0.75,0.9,1.9,3.5,6.5, 9.,19.,27.};
+  Double_t ptupper[11]={0.16,0.31,0.51,0.85,1.1,2.1,4.5,7.5,11.,21.,33.};
 
-  for(Int_t i=0; i<10; i++) {
+  for(Int_t i=0; i<11; i++) {
     if(pt>ptlower[i] && pt<ptupper[i]) {
       fCountsPerPtBin[i]++;
       return kTRUE;
@@ -970,7 +2261,42 @@ Bool_t AliAnalysisTaskITSTrackingCheck::SelectPt(Double_t pt)
   return kFALSE;
   //return kTRUE;
 }
+//---------------------------------------------------------------------------
+Int_t AliAnalysisTaskITSTrackingCheck::MakeITSflag(AliESDtrack *track) const {
+  //
+  // ITSflag takes the value 0 if the track has no cluster assigned in the SPDs, 
+  // 1 (2) if one cluster is assigned in SPD1(2), 3 if two clusters are present. 
+  // Then the same adding 10,20 or 30 for SDD and 100,200 or 300 for SSD
+  //
+  Int_t iITSflag=0;
+  if(track->HasPointOnITSLayer(0)) iITSflag+=1;
+  if(track->HasPointOnITSLayer(1)) iITSflag+=2;
+  if(track->HasPointOnITSLayer(2)) iITSflag+=10;
+  if(track->HasPointOnITSLayer(3)) iITSflag+=20;
+  if(track->HasPointOnITSLayer(4)) iITSflag+=100;
+  if(track->HasPointOnITSLayer(5)) iITSflag+=200;
+  
+  if(iITSflag==333 && track->GetNcls(0)<6)
+    printf(" ERROR %d   %d\n",track->GetNcls(0),track->GetLabel());
+  
+  // number of associated ITS clusters
+  iITSflag += 1000*track->GetNcls(0);
+  
+  // number of associated TPC clusters
+  iITSflag += 100000*track->GetNcls(1);
+  
+  // if MC info and is available
+  // write the number of ITS clusters produced by this track
+  Int_t nITSclsMC=0;
+  if(fReadMC && fReadRPLabels) {
+    nITSclsMC = NumberOfITSClustersMC(TMath::Abs(track->GetLabel()));
+    if(nITSclsMC>=0) iITSflag += 10000*nITSclsMC;    
+    // flag fake tracks
+    if(track->GetLabel()<0) iITSflag *= -1;
+  }
 
+  return iITSflag;
+}