]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - CORRFW/AliCFTrackQualityCuts.cxx
Create DA RPM
[u/mrichter/AliRoot.git] / CORRFW / AliCFTrackQualityCuts.cxx
index 2fe43b6e0c7f3db00c53c5652e07e26c7d3edc3c..44700b5da8ea42e8fd48cfc3ae5b398955a8e97d 100644 (file)
 // ESD and AOD data.
 // It mainly consists of a IsSelected function that returns a boolean.
 // This function checks whether the considered track passes a set of cuts:
-// - number of clusters in the TPC
 // - number of clusters in the ITS
-// - chi2 / cluster in the TPC
+// - number of clusters in the TPC
+// - number of clusters in the TRD
+// - ratio of found / finable number of clusters in the TPC
+// - number of tracklets in the TRD
+// - number TRD tracklets used for pid
 // - chi2 / cluster in the ITS
+// - chi2 / cluster in the TPC
+// - chi2 / tracklet in the TRD
+// - number of clusters in the TPC used for dEdx calculation
 // - successful TPC refit
 // - successful ITS refit
 // - covariance matrix diagonal elements
 
 #include <TCanvas.h>
 #include <TDirectory.h>
-#include <TBits.h>
 #include <TH2.h>
+#include <TBits.h>
 
 #include <AliESDtrack.h>
+#include <AliESDtrackCuts.h>
 #include <AliLog.h>
 #include "AliCFTrackQualityCuts.h"
+#include "AliAODTrack.h"
 
 ClassImp(AliCFTrackQualityCuts)
 
@@ -56,24 +64,34 @@ AliCFTrackQualityCuts::AliCFTrackQualityCuts() :
   AliCFCutBase(),
   fMinNClusterTPC(0),
   fMinNClusterITS(0),
+  fMinNClusterTRD(0),
+  fMinFoundClusterTPC(0),
+  fMinNTrackletTRD(0),
+  fMinNTrackletTRDpid(0),
   fMaxChi2PerClusterTPC(0),
   fMaxChi2PerClusterITS(0),
-  fRequireTPCRefit(0),
-  fRequireITSRefit(0),
+  fMaxChi2PerTrackletTRD(0),
+  fMinNdEdxClusterTPC(0),
   fCovariance11Max(0),
   fCovariance22Max(0),
   fCovariance33Max(0),
   fCovariance44Max(0),
   fCovariance55Max(0),
+  fStatus(0),
   fhCutStatistics(0),
   fhCutCorrelation(0),
   fBitmap(0x0),
+  fTrackCuts(0x0),
   fhNBinsClusterTPC(0),
   fhNBinsClusterITS(0),
+  fhNBinsClusterTRD(0),
+  fhNBinsFoundClusterTPC(0),
+  fhNBinsTrackletTRD(0),
+  fhNBinsTrackletTRDpid(0),
   fhNBinsChi2TPC(0),
   fhNBinsChi2ITS(0),
-  fhNBinsRefitTPC(0),
-  fhNBinsRefitITS(0),
+  fhNBinsChi2TRD(0),
+  fhNBinsdEdxClusterTPC(0),
   fhNBinsCovariance11(0),
   fhNBinsCovariance22(0),
   fhNBinsCovariance33(0),
@@ -81,20 +99,23 @@ AliCFTrackQualityCuts::AliCFTrackQualityCuts() :
   fhNBinsCovariance55(0),
   fhBinLimClusterTPC(0x0),
   fhBinLimClusterITS(0x0),
+  fhBinLimClusterTRD(0x0),
+  fhBinLimFoundClusterTPC(0x0),
+  fhBinLimTrackletTRD(0x0),
+  fhBinLimTrackletTRDpid(0x0),
   fhBinLimChi2TPC(0x0),
   fhBinLimChi2ITS(0x0),
-  fhBinLimRefitTPC(0x0),
-  fhBinLimRefitITS(0x0),
+  fhBinLimChi2TRD(0x0),
+  fhBinLimdEdxClusterTPC(0x0),
   fhBinLimCovariance11(0x0),
   fhBinLimCovariance22(0x0),
   fhBinLimCovariance33(0x0),
   fhBinLimCovariance44(0x0),
   fhBinLimCovariance55(0x0)
-  {
+{
   //
   // Default constructor
   //
-  fBitmap=new TBits(0);
   Initialise();
 }
 //__________________________________________________________________________________
@@ -102,24 +123,34 @@ AliCFTrackQualityCuts::AliCFTrackQualityCuts(Char_t* name, Char_t* title) :
   AliCFCutBase(name,title),
   fMinNClusterTPC(0),
   fMinNClusterITS(0),
+  fMinNClusterTRD(0),
+  fMinFoundClusterTPC(0),
+  fMinNTrackletTRD(0),
+  fMinNTrackletTRDpid(0),
   fMaxChi2PerClusterTPC(0),
   fMaxChi2PerClusterITS(0),
-  fRequireTPCRefit(0),
-  fRequireITSRefit(0),
+  fMaxChi2PerTrackletTRD(0),
+  fMinNdEdxClusterTPC(0),
   fCovariance11Max(0),
   fCovariance22Max(0),
   fCovariance33Max(0),
   fCovariance44Max(0),
   fCovariance55Max(0),
+  fStatus(0),
   fhCutStatistics(0),
   fhCutCorrelation(0),
   fBitmap(0x0),
+  fTrackCuts(0x0),
   fhNBinsClusterTPC(0),
   fhNBinsClusterITS(0),
+  fhNBinsClusterTRD(0),
+  fhNBinsFoundClusterTPC(0),
+  fhNBinsTrackletTRD(0),
+  fhNBinsTrackletTRDpid(0),
   fhNBinsChi2TPC(0),
   fhNBinsChi2ITS(0),
-  fhNBinsRefitTPC(0),
-  fhNBinsRefitITS(0),
+  fhNBinsChi2TRD(0),
+  fhNBinsdEdxClusterTPC(0),
   fhNBinsCovariance11(0),
   fhNBinsCovariance22(0),
   fhNBinsCovariance33(0),
@@ -127,21 +158,23 @@ AliCFTrackQualityCuts::AliCFTrackQualityCuts(Char_t* name, Char_t* title) :
   fhNBinsCovariance55(0),
   fhBinLimClusterTPC(0x0),
   fhBinLimClusterITS(0x0),
+  fhBinLimClusterTRD(0x0),
+  fhBinLimFoundClusterTPC(0x0),
+  fhBinLimTrackletTRD(0x0),
+  fhBinLimTrackletTRDpid(0x0),
   fhBinLimChi2TPC(0x0),
   fhBinLimChi2ITS(0x0),
-  fhBinLimRefitTPC(0x0),
-  fhBinLimRefitITS(0x0),
+  fhBinLimChi2TRD(0x0),
+  fhBinLimdEdxClusterTPC(0x0),
   fhBinLimCovariance11(0x0),
   fhBinLimCovariance22(0x0),
   fhBinLimCovariance33(0x0),
   fhBinLimCovariance44(0x0),
   fhBinLimCovariance55(0x0)
-
 {
   //
   // Constructor
   //
-  fBitmap=new TBits(0);
   Initialise();
 }
 //__________________________________________________________________________________
@@ -149,24 +182,34 @@ AliCFTrackQualityCuts::AliCFTrackQualityCuts(const AliCFTrackQualityCuts& c) :
   AliCFCutBase(c),
   fMinNClusterTPC(c.fMinNClusterTPC),
   fMinNClusterITS(c.fMinNClusterITS),
+  fMinNClusterTRD(c.fMinNClusterTRD),
+  fMinFoundClusterTPC(c.fMinFoundClusterTPC),
+  fMinNTrackletTRD(c.fMinNTrackletTRD),
+  fMinNTrackletTRDpid(c.fMinNTrackletTRDpid),
   fMaxChi2PerClusterTPC(c.fMaxChi2PerClusterTPC),
   fMaxChi2PerClusterITS(c.fMaxChi2PerClusterITS),
-  fRequireTPCRefit(c.fRequireTPCRefit),
-  fRequireITSRefit(c.fRequireITSRefit),
+  fMaxChi2PerTrackletTRD(c.fMaxChi2PerTrackletTRD),
+  fMinNdEdxClusterTPC(c.fMinNdEdxClusterTPC),
   fCovariance11Max(c.fCovariance11Max),
   fCovariance22Max(c.fCovariance22Max),
   fCovariance33Max(c.fCovariance33Max),
   fCovariance44Max(c.fCovariance44Max),
   fCovariance55Max(c.fCovariance55Max),
+  fStatus(c.fStatus),
   fhCutStatistics(c.fhCutStatistics),
   fhCutCorrelation(c.fhCutCorrelation),
   fBitmap(c.fBitmap),
+  fTrackCuts(c.fTrackCuts),
   fhNBinsClusterTPC(c.fhNBinsClusterTPC),
   fhNBinsClusterITS(c.fhNBinsClusterITS),
+  fhNBinsClusterTRD(c.fhNBinsClusterTRD),
+  fhNBinsFoundClusterTPC(c.fhNBinsFoundClusterTPC),
+  fhNBinsTrackletTRD(c.fhNBinsTrackletTRD),
+  fhNBinsTrackletTRDpid(c.fhNBinsTrackletTRDpid),
   fhNBinsChi2TPC(c.fhNBinsChi2TPC),
   fhNBinsChi2ITS(c.fhNBinsChi2ITS),
-  fhNBinsRefitTPC(c.fhNBinsRefitTPC),
-  fhNBinsRefitITS(c.fhNBinsRefitITS),
+  fhNBinsChi2TRD(c.fhNBinsChi2TRD),
+  fhNBinsdEdxClusterTPC(c.fhNBinsdEdxClusterTPC),
   fhNBinsCovariance11(c.fhNBinsCovariance11),
   fhNBinsCovariance22(c.fhNBinsCovariance22),
   fhNBinsCovariance33(c.fhNBinsCovariance33),
@@ -174,10 +217,14 @@ AliCFTrackQualityCuts::AliCFTrackQualityCuts(const AliCFTrackQualityCuts& c) :
   fhNBinsCovariance55(c.fhNBinsCovariance55),
   fhBinLimClusterTPC(c.fhBinLimClusterTPC),
   fhBinLimClusterITS(c.fhBinLimClusterITS),
+  fhBinLimClusterTRD(c.fhBinLimClusterTRD),
+  fhBinLimFoundClusterTPC(c.fhBinLimFoundClusterTPC),
+  fhBinLimTrackletTRD(c.fhBinLimTrackletTRD),
+  fhBinLimTrackletTRDpid(c.fhBinLimTrackletTRDpid),
   fhBinLimChi2TPC(c.fhBinLimChi2TPC),
   fhBinLimChi2ITS(c.fhBinLimChi2ITS),
-  fhBinLimRefitTPC(c.fhBinLimRefitTPC),
-  fhBinLimRefitITS(c.fhBinLimRefitITS),
+  fhBinLimChi2TRD(c.fhBinLimChi2TRD),
+  fhBinLimdEdxClusterTPC(c.fhBinLimdEdxClusterTPC),
   fhBinLimCovariance11(c.fhBinLimCovariance11),
   fhBinLimCovariance22(c.fhBinLimCovariance22),
   fhBinLimCovariance33(c.fhBinLimCovariance33),
@@ -199,25 +246,34 @@ AliCFTrackQualityCuts& AliCFTrackQualityCuts::operator=(const AliCFTrackQualityC
     AliCFCutBase::operator=(c) ;
     fMinNClusterTPC = c.fMinNClusterTPC ;
     fMinNClusterITS = c.fMinNClusterITS ;
+    fMinNClusterTRD = c.fMinNClusterTRD ;
+    fMinFoundClusterTPC = c.fMinFoundClusterTPC ;
+    fMinNTrackletTRD = c.fMinNTrackletTRD ;
+    fMinNTrackletTRDpid = c.fMinNTrackletTRDpid ;
     fMaxChi2PerClusterTPC = c.fMaxChi2PerClusterTPC ;
     fMaxChi2PerClusterITS = c.fMaxChi2PerClusterITS ;
-    fRequireTPCRefit = c.fRequireTPCRefit ;
-    fRequireITSRefit = c.fRequireITSRefit ;
+    fMaxChi2PerTrackletTRD = c.fMaxChi2PerTrackletTRD ;
+    fMinNdEdxClusterTPC = c.fMinNdEdxClusterTPC;
     fCovariance11Max = c.fCovariance11Max ;
     fCovariance22Max = c.fCovariance22Max ;
     fCovariance33Max = c.fCovariance33Max ;
     fCovariance44Max = c.fCovariance44Max ;
     fCovariance55Max = c.fCovariance55Max ;
+    fStatus = c.fStatus ;
     fhCutStatistics = c.fhCutStatistics ;
     fhCutCorrelation = c.fhCutCorrelation ;
     fBitmap =  c.fBitmap ;
-    
+    fTrackCuts = c.fTrackCuts ;
     fhNBinsClusterTPC = c.fhNBinsClusterTPC ;
     fhNBinsClusterITS = c.fhNBinsClusterITS ;
+    fhNBinsClusterTRD = c.fhNBinsClusterTRD ;
+    fhNBinsFoundClusterTPC = c.fhNBinsFoundClusterTPC ;
+    fhNBinsTrackletTRD = c.fhNBinsTrackletTRD ;
+    fhNBinsTrackletTRDpid = c.fhNBinsTrackletTRDpid ;
     fhNBinsChi2TPC = c.fhNBinsChi2TPC ;
     fhNBinsChi2ITS = c.fhNBinsChi2ITS ;
-    fhNBinsRefitTPC = c.fhNBinsRefitTPC ;
-    fhNBinsRefitITS = c.fhNBinsRefitITS ;
+    fhNBinsChi2TRD = c.fhNBinsChi2TRD ;
+    fhNBinsdEdxClusterTPC = c.fhNBinsdEdxClusterTPC ;
     fhNBinsCovariance11 = c.fhNBinsCovariance11 ;
     fhNBinsCovariance22 = c.fhNBinsCovariance22 ;
     fhNBinsCovariance33 = c.fhNBinsCovariance33 ;
@@ -225,24 +281,27 @@ AliCFTrackQualityCuts& AliCFTrackQualityCuts::operator=(const AliCFTrackQualityC
     fhNBinsCovariance55 = c.fhNBinsCovariance55 ;
     fhBinLimClusterTPC = c.fhBinLimClusterTPC ;
     fhBinLimClusterITS = c.fhBinLimClusterITS ;
+    fhBinLimClusterTRD = c.fhBinLimClusterTRD ;
+    fhBinLimFoundClusterTPC = c.fhBinLimFoundClusterTPC ;
+    fhBinLimTrackletTRD = c.fhBinLimTrackletTRD ;
+    fhBinLimTrackletTRDpid = c.fhBinLimTrackletTRDpid ;
     fhBinLimChi2TPC = c.fhBinLimChi2TPC ;
     fhBinLimChi2ITS = c.fhBinLimChi2ITS ;
-    fhBinLimRefitTPC = c.fhBinLimRefitTPC ;
-    fhBinLimRefitITS = c.fhBinLimRefitITS ;
+    fhBinLimChi2TRD = c.fhBinLimChi2TRD ;
+    fhBinLimdEdxClusterTPC = c.fhBinLimdEdxClusterTPC ;
     fhBinLimCovariance11 = c.fhBinLimCovariance11 ;
     fhBinLimCovariance22 = c.fhBinLimCovariance22 ;
     fhBinLimCovariance33 = c.fhBinLimCovariance33 ;
     fhBinLimCovariance44 = c.fhBinLimCovariance44 ;
     fhBinLimCovariance55 = c.fhBinLimCovariance55 ;
-    
+
     for (Int_t i=0; i<c.kNHist; i++){
       for (Int_t j=0; j<c.kNStepQA; j++){
        if(c.fhQA[i][j]) fhQA[i][j] = (TH1F*)c.fhQA[i][j]->Clone();
       }
     }
-
     ((AliCFTrackQualityCuts &) c).Copy(*this);
- }
 }
   return *this;
 }
 //__________________________________________________________________________________
@@ -251,31 +310,31 @@ AliCFTrackQualityCuts::~AliCFTrackQualityCuts()
   //
   // destructor
   //
-  if (fhCutStatistics)                 delete fhCutStatistics;
-  if (fhCutCorrelation)                        delete fhCutCorrelation;
+  if (fhCutStatistics)  delete fhCutStatistics;
+  if (fhCutCorrelation) delete fhCutCorrelation;
 
   for (Int_t i=0; i<kNHist; i++){
     for (Int_t j=0; j<kNStepQA; j++){
       if(fhQA[i][j]) delete fhQA[i][j];
     }
   }
-
-  if(fBitmap)  delete   fBitmap;
-
+  if(fBitmap) delete fBitmap;
+  if(fTrackCuts) delete fTrackCuts;
   if(fhBinLimClusterTPC) delete fhBinLimClusterTPC;
   if(fhBinLimClusterITS) delete fhBinLimClusterITS;
+  if(fhBinLimClusterTRD) delete fhBinLimClusterTRD;
+  if(fhBinLimFoundClusterTPC) delete fhBinLimFoundClusterTPC;
+  if(fhBinLimTrackletTRD) delete fhBinLimTrackletTRD;
+  if(fhBinLimTrackletTRDpid) delete fhBinLimTrackletTRDpid;
   if(fhBinLimChi2TPC) delete fhBinLimChi2TPC;
   if(fhBinLimChi2ITS) delete fhBinLimChi2ITS;
-  if(fhBinLimRefitTPC) delete fhBinLimRefitTPC;
-  if(fhBinLimRefitITS) delete fhBinLimRefitITS;
+  if(fhBinLimChi2TRD) delete fhBinLimChi2TRD;
+  if(fhBinLimdEdxClusterTPC) delete fhBinLimdEdxClusterTPC;
   if(fhBinLimCovariance11) delete fhBinLimCovariance11;
   if(fhBinLimCovariance22) delete fhBinLimCovariance22;
   if(fhBinLimCovariance33) delete fhBinLimCovariance33;
   if(fhBinLimCovariance44) delete fhBinLimCovariance44;
   if(fhBinLimCovariance55) delete fhBinLimCovariance55;
-  
-  
-  
 }
 //__________________________________________________________________________________
 void AliCFTrackQualityCuts::Initialise()
@@ -285,46 +344,59 @@ void AliCFTrackQualityCuts::Initialise()
   //
   fMinNClusterTPC = 0;
   fMinNClusterITS = 0;
+  fMinNClusterTRD = 0;
+  fMinFoundClusterTPC = 0;
+  fMinNTrackletTRD = 0;
+  fMinNTrackletTRDpid = 0;
   fMaxChi2PerClusterTPC = 0;
   fMaxChi2PerClusterITS = 0;
-  fRequireTPCRefit = 0;
-  fRequireITSRefit = 0;
+  fMaxChi2PerTrackletTRD = 0;
+  fMinNdEdxClusterTPC = 0;
   fCovariance11Max = 0;
   fCovariance22Max = 0;
   fCovariance33Max = 0;
   fCovariance44Max = 0;
   fCovariance55Max = 0;
+  fStatus = 0;
 
   SetMinNClusterTPC();
   SetMinNClusterITS();
+  SetMinNClusterTRD();
+  SetMinFoundClusterTPC();
+  SetMinNTrackletTRD();
+  SetMinNTrackletTRDpid();
   SetMaxChi2PerClusterTPC();
   SetMaxChi2PerClusterITS();
-  SetRequireTPCRefit();
-  SetRequireITSRefit();
+  SetMaxChi2PerTrackletTRD();
+  SetMinNdEdxClusterTPC();
   SetMaxCovDiagonalElements();
+  SetStatus();
 
   for (Int_t i=0; i<kNHist; i++){
-    for (Int_t j=0; j<kNStepQA; j++)  {
+    for (Int_t j=0; j<kNStepQA; j++)
       fhQA[i][j] = 0x0;
-    }
   }
   fhCutStatistics = 0;
   fhCutCorrelation = 0;
+  fBitmap=new TBits(0);
+  fTrackCuts=new AliESDtrackCuts("aliESDtrackCuts","aliESDtrackCuts");
 
-  
-    //set default bining for QA histograms
+  //set default bining for QA histograms
   SetHistogramBins(kCutClusterTPC,165,-0.5,164.5);
   SetHistogramBins(kCutClusterITS,8,-0.5,7.5);
-  SetHistogramBins(kCutChi2TPC,500,0,10);
-  SetHistogramBins(kCutChi2ITS,500,0,10);
-  SetHistogramBins(kCutRefitTPC,2,-0.5,1.5);
-  SetHistogramBins(kCutRefitITS,2,-0.5,1.5);
-  SetHistogramBins(kCutCovElement11,200,0,20);
-  SetHistogramBins(kCutCovElement22,200,0,20);
-  SetHistogramBins(kCutCovElement33,100,0,1);
-  SetHistogramBins(kCutCovElement44,100,0,5);
-  SetHistogramBins(kCutCovElement55,100,0,5);
-  
+  SetHistogramBins(kCutClusterTRD,120,-0.5,119.5);
+  SetHistogramBins(kCutMinFoundClusterTPC,110,-0.05,1.05);
+  SetHistogramBins(kCutTrackletTRD,7,-0.5,6.5);
+  SetHistogramBins(kCutTrackletTRDpid,7,-0.5,6.5);
+  SetHistogramBins(kCutChi2TPC,500,0.,10.);
+  SetHistogramBins(kCutChi2ITS,500,0.,10.);
+  SetHistogramBins(kCutChi2TRD,500,0.,10.);
+  SetHistogramBins(kCutdEdxClusterTPC,165,-0.5,164.5);
+  SetHistogramBins(kCutCovElement11,200,0.,20.);
+  SetHistogramBins(kCutCovElement22,200,0.,20.);
+  SetHistogramBins(kCutCovElement33,100,0.,1.);
+  SetHistogramBins(kCutCovElement44,100,0.,5.);
+  SetHistogramBins(kCutCovElement55,100,0.,5.);
 }
 //__________________________________________________________________________________
 void AliCFTrackQualityCuts::Copy(TObject &c) const
@@ -344,18 +416,10 @@ void AliCFTrackQualityCuts::Copy(TObject &c) const
       if(fhQA[i][j]) target.fhQA[i][j] = (TH1F*)fhQA[i][j]->Clone();
     }
   }
-
   TNamed::Copy(c);
 }
 //__________________________________________________________________________________
-void AliCFTrackQualityCuts::GetBitMap(TObject* obj, TBits *bitmap) {
-  //
-  // retrieve the pointer to the bitmap
-  //
-  bitmap = SelectionBitMap(obj);
-}
-//__________________________________________________________________________________
-TBits* AliCFTrackQualityCuts::SelectionBitMap(TObject* obj)
+void AliCFTrackQualityCuts::SelectionBitMap(TObject* obj)
 {
   //
   // test if the track passes the single cuts
@@ -365,88 +429,159 @@ TBits* AliCFTrackQualityCuts::SelectionBitMap(TObject* obj)
   // bitmap stores the decision of each single cut
   for(Int_t i=0; i<kNCuts; i++)fBitmap->SetBitNumber(i,kFALSE);
 
-  // cast TObject into ESDtrack
-  AliESDtrack* esdTrack = dynamic_cast<AliESDtrack *>(obj);
-  if ( !esdTrack ) return fBitmap ;
+  if (!obj) return;
+  if (!obj->InheritsFrom("AliVParticle")) {
+    AliError("object must derived from AliVParticle !");
+    return;
+  }
 
-  for(Int_t i=0; i<kNCuts; i++)fBitmap->SetBitNumber(i,kTRUE);
+  AliESDtrack * esdTrack = dynamic_cast<AliESDtrack*>(obj);
+  AliAODTrack * aodTrack = dynamic_cast<AliAODTrack*>(obj);
 
-  // get cut quantities
-  Int_t  fIdxInt[200];
-  Int_t nClustersTPC = esdTrack->GetTPCclusters(fIdxInt);
-  Int_t nClustersITS = esdTrack->GetITSclusters(fIdxInt);
+  if (!(esdTrack || aodTrack)) {
+    AliError("object must be an ESDtrack or an AODtrack !");
+    return;
+  }
 
-  Float_t chi2PerClusterTPC = -1;
-  Float_t chi2PerClusterITS = -1;
+  Bool_t isESDTrack = kFALSE;
+  Bool_t isAODTrack = kFALSE;
 
-  if (nClustersTPC != 0)
-    chi2PerClusterTPC = esdTrack->GetTPCchi2() / Float_t(nClustersTPC);
-  if (nClustersITS!=0)
-    chi2PerClusterITS = esdTrack->GetITSchi2() / Float_t(nClustersITS);
+  if (esdTrack) isESDTrack = strcmp(obj->ClassName(),"AliESDtrack") == 0 ? kTRUE : kFALSE ;
+  if (aodTrack) isAODTrack = strcmp(obj->ClassName(),"AliAODTrack") == 0 ? kTRUE : kFALSE ;
 
-  Double_t extCov[15];
-  esdTrack->GetExternalCovariance(extCov);
+  fTrackCuts->SetMinNClustersTPC(fMinNClusterTPC);
+  fTrackCuts->SetMinNClustersITS(fMinNClusterITS);
+  fTrackCuts->SetMaxChi2PerClusterTPC(fMaxChi2PerClusterTPC);
+  fTrackCuts->SetMaxChi2PerClusterITS(fMaxChi2PerClusterITS);
+  fTrackCuts->SetMaxCovDiagonalElements(fCovariance11Max,fCovariance22Max,fCovariance33Max,fCovariance44Max,fCovariance55Max);
 
+// // // remove following 5 lines when AliESDtrackCuts is updated
+   Int_t    nClustersTPC = 0;
+   Int_t    nClustersITS = 0 ;
+   Float_t  chi2PerClusterTPC =  0 ;
+   Float_t  chi2PerClusterITS = 0 ;
+   Double_t extCov[15]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
+
+  // get cut quantities
+  Int_t   nClustersTRD = 0;
+  Int_t   nTrackletsTRD = 0;
+  Float_t chi2PerTrackletTRD = 0;
+  Float_t fractionFoundClustersTPC = 0;
+
+  if (isESDTrack) {
+    nClustersTRD = esdTrack->GetTRDncls();
+    nTrackletsTRD = esdTrack->GetTRDntracklets();
+    if (nTrackletsTRD != 0) chi2PerTrackletTRD = esdTrack->GetTRDchi2() / Float_t(nTrackletsTRD);
+// // // include following line when AliESDtrackCuts is updated
+//     if (esdTrack->GetTPCNclsF() != 0) fractionFoundClustersTPC = fTrackCuts->GetCutVariable(2) / float(esdTrack->GetTPCNclsF());
+
+// // // remove following 6 lines when AliESDtrackCuts is updated
+     nClustersTPC = esdTrack->GetTPCclusters(0x0);
+     nClustersITS = esdTrack->GetITSclusters(0x0);
+     if (nClustersTPC != 0) chi2PerClusterTPC = esdTrack->GetTPCchi2() / Float_t(nClustersTPC);
+     if (nClustersITS != 0) chi2PerClusterITS = esdTrack->GetITSchi2() / Float_t(nClustersITS);
+     esdTrack->GetExternalCovariance(extCov);
+     if (esdTrack->GetTPCNclsF() != 0) fractionFoundClustersTPC = float(nClustersTPC) / float(esdTrack->GetTPCNclsF());
+  }
 
   // fill the bitmap
   Int_t iCutBit = 0;
 
-  if (nClustersTPC < fMinNClusterTPC)
-       fBitmap->SetBitNumber(iCutBit,kFALSE);
-  iCutBit++;
-  if (nClustersITS < fMinNClusterITS)
-       fBitmap->SetBitNumber(iCutBit,kFALSE);
+// // // include following lines when AliESDtrackCuts is updated
+//   fBitmap->SetBitNumber(iCutBit,fTrackCuts->GetCutDecision(2)); iCutBit++; // nClustersTPC
+//   fBitmap->SetBitNumber(iCutBit,fTrackCuts->GetCutDecision(3)); iCutBit++; // nClustersITS
+// // // remove following 6 lines when AliESDtrackCuts is updated
+   if (nClustersTPC >= fMinNClusterTPC)
+     fBitmap->SetBitNumber(iCutBit,kTRUE);
+   iCutBit++;
+   if (nClustersITS >= fMinNClusterITS)
+     fBitmap->SetBitNumber(iCutBit,kTRUE);
+   iCutBit++;
+
+  if (nClustersTRD >= fMinNClusterTRD)
+    fBitmap->SetBitNumber(iCutBit,kTRUE);
   iCutBit++;
-  if (chi2PerClusterTPC > fMaxChi2PerClusterTPC)
-       fBitmap->SetBitNumber(iCutBit,kFALSE);
+// // //   if ((fMinFoundClusterTPC <= 0) || (fTrackCuts->GetCutVariable(2) > 0 && (fractionFoundClustersTPC >= fMinFoundClusterTPC)))
+  if ((fMinFoundClusterTPC <= 0) || (nClustersTPC > 0 && (fractionFoundClustersTPC >= fMinFoundClusterTPC)))
+    fBitmap->SetBitNumber(iCutBit,kTRUE);
   iCutBit++;
-  if (chi2PerClusterITS > fMaxChi2PerClusterITS)
-       fBitmap->SetBitNumber(iCutBit,kFALSE);
+  if (nTrackletsTRD >= fMinNTrackletTRD)
+    fBitmap->SetBitNumber(iCutBit,kTRUE);
   iCutBit++;
-  if (fRequireTPCRefit && (esdTrack->GetStatus()&AliESDtrack::kTPCrefit)==0)
-       fBitmap->SetBitNumber(iCutBit,kFALSE);
+  if (!isESDTrack || esdTrack->GetTRDntrackletsPID() >= fMinNTrackletTRDpid)
+    fBitmap->SetBitNumber(iCutBit,kTRUE);
   iCutBit++;
-  if (fRequireITSRefit && (esdTrack->GetStatus()&AliESDtrack::kITSrefit)==0)
-       fBitmap->SetBitNumber(iCutBit,kFALSE);
-  iCutBit++;
-  if (extCov[0]  > fCovariance11Max)
-       fBitmap->SetBitNumber(iCutBit,kFALSE);
-  iCutBit++;
-  if (extCov[2]  > fCovariance22Max)
-       fBitmap->SetBitNumber(iCutBit,kFALSE);
-  iCutBit++;
-  if (extCov[5]  > fCovariance33Max)
-       fBitmap->SetBitNumber(iCutBit,kFALSE);
+
+// // // include following lines when AliESDtrackCuts is updated
+//   fBitmap->SetBitNumber(iCutBit,fTrackCuts->GetCutDecision(4)); iCutBit++; // chi2PerClusterTPC
+//   fBitmap->SetBitNumber(iCutBit,fTrackCuts->GetCutDecision(5)); iCutBit++; // chi2PerClusterITS
+// // // remove following 6 lines when AliESDtrackCuts is updated
+   if (chi2PerClusterTPC <= fMaxChi2PerClusterTPC)
+     fBitmap->SetBitNumber(iCutBit,kTRUE);
+   iCutBit++;
+   if (chi2PerClusterITS <= fMaxChi2PerClusterITS)
+     fBitmap->SetBitNumber(iCutBit,kTRUE);
+   iCutBit++;
+
+  if (chi2PerTrackletTRD <= fMaxChi2PerTrackletTRD)
+    fBitmap->SetBitNumber(iCutBit,kTRUE);
   iCutBit++;
-  if (extCov[9]  > fCovariance44Max)
-       fBitmap->SetBitNumber(iCutBit,kFALSE);
+  if (!isESDTrack || esdTrack->GetTPCsignalN() >= fMinNdEdxClusterTPC)
+    fBitmap->SetBitNumber(iCutBit,kTRUE);
   iCutBit++;
-  if (extCov[14] > fCovariance55Max)
-       fBitmap->SetBitNumber(iCutBit,kFALSE);
 
-  return fBitmap;
+// // // include following lines when AliESDtrackCuts is updated
+//   fBitmap->SetBitNumber(iCutBit,fTrackCuts->GetCutDecision(6)); iCutBit++; // extCov[0]
+//   fBitmap->SetBitNumber(iCutBit,fTrackCuts->GetCutDecision(7)); iCutBit++; // extCov[2]
+//   fBitmap->SetBitNumber(iCutBit,fTrackCuts->GetCutDecision(8)); iCutBit++; // extCov[5]
+//   fBitmap->SetBitNumber(iCutBit,fTrackCuts->GetCutDecision(9)); iCutBit++; // extCov[9]
+//   fBitmap->SetBitNumber(iCutBit,fTrackCuts->GetCutDecision(10)); iCutBit++; // extCov[14]
+// // // remove following lines when AliESDtrackCuts is updated
+   if (extCov[0]  <= fCovariance11Max)
+     fBitmap->SetBitNumber(iCutBit,kTRUE);
+   iCutBit++;
+   if (extCov[2]  <= fCovariance22Max)
+     fBitmap->SetBitNumber(iCutBit,kTRUE);
+   iCutBit++;
+   if (extCov[5]  <= fCovariance33Max)
+     fBitmap->SetBitNumber(iCutBit,kTRUE);
+   iCutBit++;
+   if (extCov[9]  <= fCovariance44Max)
+     fBitmap->SetBitNumber(iCutBit,kTRUE);
+   iCutBit++;
+   if (extCov[14] <= fCovariance55Max)
+     fBitmap->SetBitNumber(iCutBit,kTRUE);
+   iCutBit++;
+
+
+  if (isESDTrack) {
+    if ( (esdTrack->GetStatus() & fStatus) == fStatus ) fBitmap->SetBitNumber(iCutBit,kTRUE);
+  }
+  else {
+    if ( (aodTrack->GetStatus() & fStatus) == fStatus ) fBitmap->SetBitNumber(iCutBit,kTRUE);
+  }
+
+  return;
 }
 //__________________________________________________________________________________
 Bool_t AliCFTrackQualityCuts::IsSelected(TObject* obj) {
   //
   // loops over decisions of single cuts and returns if the track is accepted
   //
-  TBits* bitmap = SelectionBitMap(obj);
+  SelectionBitMap(obj);
 
+  if (fIsQAOn) FillHistograms(obj,0);
   Bool_t isSelected = kTRUE;
 
-  for (UInt_t icut=0; icut<bitmap->GetNbits();icut++)
-       if(!bitmap->TestBitNumber(icut)) isSelected = kFALSE;
-
-  return isSelected;
-}
-//__________________________________________________________________________________
-void AliCFTrackQualityCuts::Init() {
-  //
-  // initialises all histograms and the TList which holds the histograms
-  //
-  if(fIsQAOn)
-    DefineHistograms();
+  for (UInt_t icut=0; icut<fBitmap->GetNbits();icut++) {
+    if(!fBitmap->TestBitNumber(icut)) {
+       isSelected = kFALSE;
+       break;
+    }
+  }
+  if (!isSelected) return kFALSE ;
+  if (fIsQAOn) FillHistograms(obj,1);
+  return kTRUE;
 }
 //__________________________________________________________________________________
 void AliCFTrackQualityCuts::SetHistogramBins(Int_t index, Int_t nbins, Double_t *bins)
@@ -456,69 +591,98 @@ void AliCFTrackQualityCuts::SetHistogramBins(Int_t index, Int_t nbins, Double_t
   //
   if(!fIsQAOn) return;
 
+  if (index<0 || index>=kNHist) {
+    Error("SetHistogramBins","could not determine histogram from index %d",index);
+    return;
+  }
+
   switch(index){
   case kCutClusterTPC:
-    fhNBinsClusterTPC=nbins;
+    fhNBinsClusterTPC=nbins+1;
     fhBinLimClusterTPC=new Double_t[nbins+1];
     for(Int_t i=0;i<nbins+1;i++)fhBinLimClusterTPC[i]=bins[i];
     break;
-    
+
   case kCutClusterITS:
-    fhNBinsClusterITS=nbins;
+    fhNBinsClusterITS=nbins+1;
     fhBinLimClusterITS=new Double_t[nbins+1];
     for(Int_t i=0;i<nbins+1;i++)fhBinLimClusterITS[i]=bins[i];
     break;
-    
+
+  case kCutClusterTRD:
+    fhNBinsClusterTRD=nbins+1;
+    fhBinLimClusterTRD=new Double_t[nbins+1];
+    for(Int_t i=0;i<nbins+1;i++)fhBinLimClusterTRD[i]=bins[i];
+    break;
+
+  case kCutMinFoundClusterTPC:
+    fhNBinsFoundClusterTPC=nbins+1;
+    fhBinLimFoundClusterTPC=new Double_t[nbins+1];
+    for(Int_t i=0;i<nbins+1;i++)fhBinLimFoundClusterTPC[i]=bins[i];
+    break;
+
+  case kCutTrackletTRD:
+    fhNBinsTrackletTRD=nbins+1;
+    fhBinLimTrackletTRD=new Double_t[nbins+1];
+    for(Int_t i=0;i<nbins+1;i++)fhBinLimTrackletTRD[i]=bins[i];
+    break;
+
+  case kCutTrackletTRDpid:
+    fhNBinsTrackletTRDpid=nbins+1;
+    fhBinLimTrackletTRDpid=new Double_t[nbins+1];
+    for(Int_t i=0;i<nbins+1;i++)fhBinLimTrackletTRDpid[i]=bins[i];
+    break;
+
   case kCutChi2TPC:
-    fhNBinsChi2TPC=nbins;
+    fhNBinsChi2TPC=nbins+1;
     fhBinLimChi2TPC=new Double_t[nbins+1];
     for(Int_t i=0;i<nbins+1;i++)fhBinLimChi2TPC[i]=bins[i];
     break;
-    
+
   case kCutChi2ITS:
-    fhNBinsChi2ITS=nbins;
+    fhNBinsChi2ITS=nbins+1;
     fhBinLimChi2ITS=new Double_t[nbins+1];
     for(Int_t i=0;i<nbins+1;i++)fhBinLimChi2ITS[i]=bins[i];
     break;
-    
-  case kCutRefitTPC:
-    fhNBinsRefitTPC=nbins;
-    fhBinLimRefitTPC=new Double_t[nbins+1];
-    for(Int_t i=0;i<nbins+1;i++)fhBinLimRefitTPC[i]=bins[i];
+
+  case kCutChi2TRD:
+    fhNBinsChi2TRD=nbins+1;
+    fhBinLimChi2TRD=new Double_t[nbins+1];
+    for(Int_t i=0;i<nbins+1;i++)fhBinLimChi2TRD[i]=bins[i];
     break;
-    
-  case kCutRefitITS:
-    fhNBinsRefitITS=nbins;
-    fhBinLimRefitITS=new Double_t[nbins+1];
-    for(Int_t i=0;i<nbins+1;i++)fhBinLimRefitITS[i]=bins[i];
+
+  case kCutdEdxClusterTPC:
+    fhNBinsdEdxClusterTPC=nbins+1;
+    fhBinLimdEdxClusterTPC=new Double_t[nbins+1];
+    for(Int_t i=0;i<nbins+1;i++)fhBinLimdEdxClusterTPC[i]=bins[i];
     break;
-    
+
   case kCutCovElement11:
-    fhNBinsCovariance11=nbins;
+    fhNBinsCovariance11=nbins+1;
     fhBinLimCovariance11=new Double_t[nbins+1];
     for(Int_t i=0;i<nbins+1;i++)fhBinLimCovariance11[i]=bins[i];
     break;
-    
+
   case kCutCovElement22:
-    fhNBinsCovariance22=nbins;
+    fhNBinsCovariance22=nbins+1;
     fhBinLimCovariance22=new Double_t[nbins+1];
     for(Int_t i=0;i<nbins+1;i++)fhBinLimCovariance22[i]=bins[i];
     break;
-    
+
   case kCutCovElement33:
-    fhNBinsCovariance33=nbins;
+    fhNBinsCovariance33=nbins+1;
     fhBinLimCovariance33=new Double_t[nbins+1];
     for(Int_t i=0;i<nbins+1;i++)fhBinLimCovariance33[i]=bins[i];
     break;
-    
+
   case kCutCovElement44:
-    fhNBinsCovariance44=nbins;
+    fhNBinsCovariance44=nbins+1;
     fhBinLimCovariance44=new Double_t[nbins+1];
     for(Int_t i=0;i<nbins+1;i++)fhBinLimCovariance44[i]=bins[i];
     break;
-  
+
   case kCutCovElement55:
-    fhNBinsCovariance55=nbins;
+    fhNBinsCovariance55=nbins+1;
     fhBinLimCovariance55=new Double_t[nbins+1];
     for(Int_t i=0;i<nbins+1;i++)fhBinLimCovariance55[i]=bins[i];
     break;
@@ -530,71 +694,98 @@ void AliCFTrackQualityCuts::SetHistogramBins(Int_t index, Int_t nbins, Double_t
   //
   // fixed bin size
   //
-  if(!fIsQAOn) return;
+  if (index<0 || index>=kNHist) {
+    Error("SetHistogramBins","could not determine histogram from index %d",index);
+    return;
+  }
 
   switch(index){
   case kCutClusterTPC:
-    fhNBinsClusterTPC=nbins;
+    fhNBinsClusterTPC=nbins+1;
     fhBinLimClusterTPC=new Double_t[nbins+1];
     for(Int_t i=0;i<nbins+1;i++)fhBinLimClusterTPC[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
     break;
-    
+
   case kCutClusterITS:
-    fhNBinsClusterITS=nbins;
+    fhNBinsClusterITS=nbins+1;
     fhBinLimClusterITS=new Double_t[nbins+1];
     for(Int_t i=0;i<nbins+1;i++)fhBinLimClusterITS[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
     break;
-    
+
+  case kCutClusterTRD:
+    fhNBinsClusterTRD=nbins+1;
+    fhBinLimClusterTRD=new Double_t[nbins+1];
+    for(Int_t i=0;i<nbins+1;i++)fhBinLimClusterTRD[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
+    break;
+
+  case kCutMinFoundClusterTPC:
+    fhNBinsFoundClusterTPC=nbins+1;
+    fhBinLimFoundClusterTPC=new Double_t[nbins+1];
+    for(Int_t i=0;i<nbins+1;i++)fhBinLimFoundClusterTPC[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
+    break;
+
+  case kCutTrackletTRD:
+    fhNBinsTrackletTRD=nbins+1;
+    fhBinLimTrackletTRD=new Double_t[nbins+1];
+    for(Int_t i=0;i<nbins+1;i++)fhBinLimTrackletTRD[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
+    break;
+
+  case kCutTrackletTRDpid:
+    fhNBinsTrackletTRDpid=nbins+1;
+    fhBinLimTrackletTRDpid=new Double_t[nbins+1];
+    for(Int_t i=0;i<nbins+1;i++)fhBinLimTrackletTRDpid[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
+    break;
+
   case kCutChi2TPC:
-    fhNBinsChi2TPC=nbins;
+    fhNBinsChi2TPC=nbins+1;
     fhBinLimChi2TPC=new Double_t[nbins+1];
     for(Int_t i=0;i<nbins+1;i++)fhBinLimChi2TPC[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
     break;
-    
+
   case kCutChi2ITS:
-    fhNBinsChi2ITS=nbins;
+    fhNBinsChi2ITS=nbins+1;
     fhBinLimChi2ITS=new Double_t[nbins+1];
     for(Int_t i=0;i<nbins+1;i++)fhBinLimChi2ITS[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
     break;
-    
-  case kCutRefitTPC:
-    fhNBinsRefitTPC=nbins;
-    fhBinLimRefitTPC=new Double_t[nbins+1];
-    for(Int_t i=0;i<nbins+1;i++)fhBinLimRefitTPC[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
+
+  case kCutChi2TRD:
+    fhNBinsChi2TRD=nbins+1;
+    fhBinLimChi2TRD=new Double_t[nbins+1];
+    for(Int_t i=0;i<nbins+1;i++)fhBinLimChi2TRD[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
     break;
-    
-  case kCutRefitITS:
-    fhNBinsRefitITS=nbins;
-    fhBinLimRefitITS=new Double_t[nbins+1];
-    for(Int_t i=0;i<nbins+1;i++)fhBinLimRefitITS[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
+
+  case kCutdEdxClusterTPC:
+    fhNBinsdEdxClusterTPC=nbins+1;
+    fhBinLimdEdxClusterTPC=new Double_t[nbins+1];
+    for(Int_t i=0;i<nbins+1;i++)fhBinLimdEdxClusterTPC[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
     break;
-    
+
   case kCutCovElement11:
-    fhNBinsCovariance11=nbins;
+    fhNBinsCovariance11=nbins+1;
     fhBinLimCovariance11=new Double_t[nbins+1];
     for(Int_t i=0;i<nbins+1;i++)fhBinLimCovariance11[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
     break;
-    
+
   case kCutCovElement22:
-    fhNBinsCovariance22=nbins;
+    fhNBinsCovariance22=nbins+1;
     fhBinLimCovariance22=new Double_t[nbins+1];
     for(Int_t i=0;i<nbins+1;i++)fhBinLimCovariance22[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
     break;
-    
+
   case kCutCovElement33:
-    fhNBinsCovariance33=nbins;
+    fhNBinsCovariance33=nbins+1;
     fhBinLimCovariance33=new Double_t[nbins+1];
     for(Int_t i=0;i<nbins+1;i++)fhBinLimCovariance33[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
     break;
-    
+
   case kCutCovElement44:
-    fhNBinsCovariance44=nbins;
+    fhNBinsCovariance44=nbins+1;
     fhBinLimCovariance44=new Double_t[nbins+1];
     for(Int_t i=0;i<nbins+1;i++)fhBinLimCovariance44[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
     break;
-  
+
   case kCutCovElement55:
-    fhNBinsCovariance55=nbins;
+    fhNBinsCovariance55=nbins+1;
     fhBinLimCovariance55=new Double_t[nbins+1];
     for(Int_t i=0;i<nbins+1;i++)fhBinLimCovariance55[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
     break;
@@ -605,84 +796,105 @@ void AliCFTrackQualityCuts::SetHistogramBins(Int_t index, Int_t nbins, Double_t
   //
   // histograms for cut variables, cut statistics and cut correlations
   //
-
   Int_t color = 2;
 
   // book cut statistics and cut correlation histograms
   fhCutStatistics = new TH1F(Form("%s_cut_statistics",GetName()), Form("%s cut statistics",GetName()), kNCuts,0.5,kNCuts+0.5);
   fhCutStatistics->SetLineWidth(2);
-  fhCutStatistics->GetXaxis()->SetBinLabel(1,"nClustersTPC");
-  fhCutStatistics->GetXaxis()->SetBinLabel(2,"nClustersITS");
-  fhCutStatistics->GetXaxis()->SetBinLabel(3,"chi2PerClusterTPC");
-  fhCutStatistics->GetXaxis()->SetBinLabel(4,"chi2PerClusterITS");
-  fhCutStatistics->GetXaxis()->SetBinLabel(5,"refitTPC");
-  fhCutStatistics->GetXaxis()->SetBinLabel(6,"refitITS");
-  fhCutStatistics->GetXaxis()->SetBinLabel(7,"covElement11");
-  fhCutStatistics->GetXaxis()->SetBinLabel(8,"covElement22");
-  fhCutStatistics->GetXaxis()->SetBinLabel(9,"covElement33");
-  fhCutStatistics->GetXaxis()->SetBinLabel(10,"covElement44");
-  fhCutStatistics->GetXaxis()->SetBinLabel(11,"covElement55");
+  fhCutStatistics->GetXaxis()->SetBinLabel(1, "nClustersTPC");
+  fhCutStatistics->GetXaxis()->SetBinLabel(2, "nClustersITS");
+  fhCutStatistics->GetXaxis()->SetBinLabel(3, "nClustersTRD");
+  fhCutStatistics->GetXaxis()->SetBinLabel(4, "fractionClustersTPC");
+  fhCutStatistics->GetXaxis()->SetBinLabel(5, "ntrackletsTRD");
+  fhCutStatistics->GetXaxis()->SetBinLabel(6, "ntrackletsTRDpid");
+  fhCutStatistics->GetXaxis()->SetBinLabel(7, "chi2PerClusterTPC");
+  fhCutStatistics->GetXaxis()->SetBinLabel(8, "chi2PerClusterITS");
+  fhCutStatistics->GetXaxis()->SetBinLabel(9, "chi2PerTrackletTRD");
+  fhCutStatistics->GetXaxis()->SetBinLabel(10, "ndEdxClusterTPC");
+  fhCutStatistics->GetXaxis()->SetBinLabel(11, "covElement11");
+  fhCutStatistics->GetXaxis()->SetBinLabel(12, "covElement22");
+  fhCutStatistics->GetXaxis()->SetBinLabel(13, "covElement33");
+  fhCutStatistics->GetXaxis()->SetBinLabel(14, "covElement44");
+  fhCutStatistics->GetXaxis()->SetBinLabel(15, "covElement55");
+  fhCutStatistics->GetXaxis()->SetBinLabel(16, "status");
 
   fhCutCorrelation = new TH2F(Form("%s_cut_correlation",GetName()), Form("%s cut  correlation",GetName()), kNCuts,0.5,kNCuts+0.5,kNCuts,0.5,kNCuts+0.5);
   fhCutCorrelation->SetLineWidth(2);
-  fhCutCorrelation->GetXaxis()->SetBinLabel(1,"nClustersTPC");
-  fhCutCorrelation->GetXaxis()->SetBinLabel(2,"nClustersITS");
-  fhCutCorrelation->GetXaxis()->SetBinLabel(3,"chi2PerClusterTPC");
-  fhCutCorrelation->GetXaxis()->SetBinLabel(4,"chi2PerClusterITS");
-  fhCutCorrelation->GetXaxis()->SetBinLabel(5,"refitTPC");
-  fhCutCorrelation->GetXaxis()->SetBinLabel(6,"refitITS");
-  fhCutCorrelation->GetXaxis()->SetBinLabel(7,"covElement11");
-  fhCutCorrelation->GetXaxis()->SetBinLabel(8,"covElement22");
-  fhCutCorrelation->GetXaxis()->SetBinLabel(9,"covElement33");
-  fhCutCorrelation->GetXaxis()->SetBinLabel(10,"covElement44");
-  fhCutCorrelation->GetXaxis()->SetBinLabel(11,"covElement55");
-
-  fhCutCorrelation->GetYaxis()->SetBinLabel(1,"nClustersTPC");
-  fhCutCorrelation->GetYaxis()->SetBinLabel(2,"nClustersITS");
-  fhCutCorrelation->GetYaxis()->SetBinLabel(3,"chi2PerClusterTPC");
-  fhCutCorrelation->GetYaxis()->SetBinLabel(4,"chi2PerClusterITS");
-  fhCutCorrelation->GetYaxis()->SetBinLabel(5,"refitTPC");
-  fhCutCorrelation->GetYaxis()->SetBinLabel(6,"refitITS");
-  fhCutCorrelation->GetYaxis()->SetBinLabel(7,"covElement11");
-  fhCutCorrelation->GetYaxis()->SetBinLabel(8,"covElement22");
-  fhCutCorrelation->GetYaxis()->SetBinLabel(9,"covElement33");
-  fhCutCorrelation->GetYaxis()->SetBinLabel(10,"covElement44");
-  fhCutCorrelation->GetYaxis()->SetBinLabel(11,"covElement55");
+  fhCutCorrelation->GetXaxis()->SetBinLabel(1, "nClustersTPC");
+  fhCutCorrelation->GetXaxis()->SetBinLabel(2, "nClustersITS");
+  fhCutCorrelation->GetXaxis()->SetBinLabel(3, "nClustersTRD");
+  fhCutCorrelation->GetXaxis()->SetBinLabel(4, "fractionClustersTPC");
+  fhCutCorrelation->GetXaxis()->SetBinLabel(5, "ntrackletsTRD");
+  fhCutCorrelation->GetXaxis()->SetBinLabel(6, "ntrackletsTRDpid");
+  fhCutCorrelation->GetXaxis()->SetBinLabel(7, "chi2PerClusterTPC");
+  fhCutCorrelation->GetXaxis()->SetBinLabel(8, "chi2PerClusterITS");
+  fhCutCorrelation->GetXaxis()->SetBinLabel(9, "chi2PerTrackletTRD");
+  fhCutCorrelation->GetXaxis()->SetBinLabel(10, "ndEdxClustersTPC");
+  fhCutCorrelation->GetXaxis()->SetBinLabel(11, "covElement11");
+  fhCutCorrelation->GetXaxis()->SetBinLabel(12, "covElement22");
+  fhCutCorrelation->GetXaxis()->SetBinLabel(13, "covElement33");
+  fhCutCorrelation->GetXaxis()->SetBinLabel(14, "covElement44");
+  fhCutCorrelation->GetXaxis()->SetBinLabel(15, "covElement55");
+  fhCutCorrelation->GetXaxis()->SetBinLabel(16, "status");
+
+  fhCutCorrelation->GetYaxis()->SetBinLabel(1, "nClustersTPC");
+  fhCutCorrelation->GetYaxis()->SetBinLabel(2, "nClustersITS");
+  fhCutCorrelation->GetYaxis()->SetBinLabel(3, "nClustersTRD");
+  fhCutCorrelation->GetYaxis()->SetBinLabel(4, "fractionClustersTPC");
+  fhCutCorrelation->GetYaxis()->SetBinLabel(5, "ntrackletsTRD");
+  fhCutCorrelation->GetYaxis()->SetBinLabel(6, "ntrackletsTRDpid");
+  fhCutCorrelation->GetYaxis()->SetBinLabel(7, "chi2PerClusterTPC");
+  fhCutCorrelation->GetYaxis()->SetBinLabel(8, "chi2PerClusterITS");
+  fhCutCorrelation->GetYaxis()->SetBinLabel(9, "chi2PerTrackletTRD");
+  fhCutCorrelation->GetYaxis()->SetBinLabel(10, "ndEdxClustersTPC");
+  fhCutCorrelation->GetYaxis()->SetBinLabel(11, "covElement11");
+  fhCutCorrelation->GetYaxis()->SetBinLabel(12, "covElement22");
+  fhCutCorrelation->GetYaxis()->SetBinLabel(13, "covElement33");
+  fhCutCorrelation->GetYaxis()->SetBinLabel(14, "covElement44");
+  fhCutCorrelation->GetYaxis()->SetBinLabel(15, "covElement55");
+  fhCutCorrelation->GetYaxis()->SetBinLabel(16, "status");
 
 
   // book QA histograms
-  Char_t str[256];
+  Char_t str[5];
   for (Int_t i=0; i<kNStepQA; i++) {
-    if (i==0) sprintf(str," ");
-    else sprintf(str,"_cut");
-        
-    fhQA[kCutClusterTPC][i]    = new TH1F(Form("%s_nClustersTPC%s",GetName(),str)     ,"",fhNBinsClusterTPC,fhBinLimClusterTPC);
-    fhQA[kCutClusterITS][i]    = new TH1F(Form("%s_nClustersITS%s",GetName(),str)     ,"",fhNBinsClusterITS,fhBinLimClusterITS);
-    fhQA[kCutChi2TPC][i]       = new TH1F(Form("%s_chi2PerClusterTPC%s",GetName(),str),"",fhNBinsChi2TPC,fhBinLimChi2TPC);
-    fhQA[kCutChi2ITS][i]       = new TH1F(Form("%s_chi2PerClusterITS%s",GetName(),str),"",fhNBinsChi2ITS,fhBinLimChi2ITS);
-    fhQA[kCutRefitTPC][i]      = new TH1F(Form("%s_refitTPC%s",GetName(),str)     ,"",fhNBinsRefitTPC,fhBinLimRefitTPC);
-    fhQA[kCutRefitITS][i]      = new TH1F(Form("%s_refitITS%s",GetName(),str)     ,"",fhNBinsRefitITS,fhBinLimRefitITS);
-    fhQA[kCutCovElement11][i]  = new TH1F(Form("%s_covMatrixDiagonal11%s",GetName(),str),"",fhNBinsCovariance11,fhBinLimCovariance11);
-    fhQA[kCutCovElement22][i]  = new TH1F(Form("%s_covMatrixDiagonal22%s",GetName(),str),"",fhNBinsCovariance22,fhBinLimCovariance22);
-    fhQA[kCutCovElement33][i]  = new TH1F(Form("%s_covMatrixDiagonal33%s",GetName(),str),"",fhNBinsCovariance33,fhBinLimCovariance33);
-    fhQA[kCutCovElement44][i]  = new TH1F(Form("%s_covMatrixDiagonal44%s",GetName(),str),"",fhNBinsCovariance44,fhBinLimCovariance44);
-    fhQA[kCutCovElement55][i]  = new TH1F(Form("%s_covMatrixDiagonal55%s",GetName(),str),"",fhNBinsCovariance55,fhBinLimCovariance55);
+    if (i==0) snprintf(str,5," ");
+    else snprintf(str,5,"_cut");
+
+    fhQA[kCutClusterTPC][i]    = new TH1F(Form("%s_nClustersTPC%s",GetName(),str)     ,"",fhNBinsClusterTPC-1,fhBinLimClusterTPC);
+    fhQA[kCutClusterITS][i]    = new TH1F(Form("%s_nClustersITS%s",GetName(),str)     ,"",fhNBinsClusterITS-1,fhBinLimClusterITS);
+    fhQA[kCutClusterTRD][i]    = new TH1F(Form("%s_nClustersTRD%s",GetName(),str)     ,"",fhNBinsClusterTRD-1,fhBinLimClusterTRD);
+    fhQA[kCutMinFoundClusterTPC][i]    = new TH1F(Form("%s_fractionClustersTPC%s",GetName(),str)     ,"",fhNBinsFoundClusterTPC-1,fhBinLimFoundClusterTPC);
+    fhQA[kCutTrackletTRD][i]   = new TH1F(Form("%s_ntrackletsTRD%s",GetName(),str)     ,"",fhNBinsTrackletTRD-1,fhBinLimTrackletTRD);
+    fhQA[kCutTrackletTRDpid][i]        = new TH1F(Form("%s_ntrackletsTRDpid%s",GetName(),str)     ,"",fhNBinsTrackletTRDpid-1,fhBinLimTrackletTRDpid);
+    fhQA[kCutChi2TPC][i]       = new TH1F(Form("%s_chi2PerClusterTPC%s",GetName(),str),"",fhNBinsChi2TPC-1,fhBinLimChi2TPC);
+    fhQA[kCutChi2ITS][i]       = new TH1F(Form("%s_chi2PerClusterITS%s",GetName(),str),"",fhNBinsChi2ITS-1,fhBinLimChi2ITS);
+    fhQA[kCutChi2TRD][i]       = new TH1F(Form("%s_chi2PerTrackletTRD%s",GetName(),str),"",fhNBinsChi2TRD-1,fhBinLimChi2TRD);
+    fhQA[kCutdEdxClusterTPC][i]        = new TH1F(Form("%s_ndEdxClustersTPC%s",GetName(),str)     ,"",fhNBinsdEdxClusterTPC-1,fhBinLimdEdxClusterTPC);
+    fhQA[kCutCovElement11][i]  = new TH1F(Form("%s_covMatrixDiagonal11%s",GetName(),str),"",fhNBinsCovariance11-1,fhBinLimCovariance11);
+    fhQA[kCutCovElement22][i]  = new TH1F(Form("%s_covMatrixDiagonal22%s",GetName(),str),"",fhNBinsCovariance22-1,fhBinLimCovariance22);
+    fhQA[kCutCovElement33][i]  = new TH1F(Form("%s_covMatrixDiagonal33%s",GetName(),str),"",fhNBinsCovariance33-1,fhBinLimCovariance33);
+    fhQA[kCutCovElement44][i]  = new TH1F(Form("%s_covMatrixDiagonal44%s",GetName(),str),"",fhNBinsCovariance44-1,fhBinLimCovariance44);
+    fhQA[kCutCovElement55][i]  = new TH1F(Form("%s_covMatrixDiagonal55%s",GetName(),str),"",fhNBinsCovariance55-1,fhBinLimCovariance55);
 
     fhQA[kCutClusterTPC][i]    ->SetXTitle("n TPC clusters");
     fhQA[kCutClusterITS][i]    ->SetXTitle("n ITS clusters");
+    fhQA[kCutClusterTRD][i]    ->SetXTitle("n TRD clusters");
+    fhQA[kCutMinFoundClusterTPC][i]->SetXTitle("fraction TPC clusters");
+    fhQA[kCutTrackletTRD][i] ->SetXTitle("n tracklets TRD");
+    fhQA[kCutTrackletTRDpid][i]->SetXTitle("n tracklets TRD pid");
     fhQA[kCutChi2TPC][i]       ->SetXTitle("#chi^{2} per TPC cluster");
     fhQA[kCutChi2ITS][i]       ->SetXTitle("#chi^{2} per ITS cluster");
-    fhQA[kCutRefitTPC][i]      ->SetXTitle("refit TPC");
-    fhQA[kCutRefitITS][i]      ->SetXTitle("refit ITS");
+    fhQA[kCutChi2TRD][i]       ->SetXTitle("#chi^{2} per TRD tracklet");
+    fhQA[kCutdEdxClusterTPC][i]        ->SetXTitle("n dEdx TPC clusters");
     fhQA[kCutCovElement11][i]  ->SetXTitle("cov 11 : #sigma_{y}^{2} (cm^{2})");
     fhQA[kCutCovElement22][i]  ->SetXTitle("cov 22 : #sigma_{z}^{2} (cm^{2})");
     fhQA[kCutCovElement33][i]  ->SetXTitle("cov 33 : #sigma_{sin(#phi)}^{2}");
     fhQA[kCutCovElement44][i]  ->SetXTitle("cov 44 : #sigma_{tan(#theta_{dip})}^{2}");
-    fhQA[kCutCovElement55][i]  ->SetXTitle("cov 55 : #sigma_{1/p_{T}}^{2} ((c/GeV)^2)");
+    fhQA[kCutCovElement55][i]  ->SetXTitle("cov 55 : #sigma_{1/p_{T}}^{2} ((c/GeV)^{2})");
   }
 
   for(Int_t i=0; i<kNHist; i++) fhQA[i][1]->SetLineColor(color);
-
 }
 //__________________________________________________________________________________
 void AliCFTrackQualityCuts::FillHistograms(TObject* obj, Bool_t b)
@@ -690,67 +902,108 @@ void AliCFTrackQualityCuts::FillHistograms(TObject* obj, Bool_t b)
   //
   // fill the QA histograms
   //
-  if(!fIsQAOn) return;
 
-  // cast TObject into ESDtrack
-  AliESDtrack* esdTrack = dynamic_cast<AliESDtrack *>(obj);
-  if ( !esdTrack ) return;
-
-  // index = 0: fill histograms before cuts
-  // index = 1: fill histograms after cuts
-  Int_t index = -1;
-  index = ((b) ? 1 : 0);
-
-  Int_t  fIdxInt[200];
-  Int_t nClustersTPC = esdTrack->GetTPCclusters(fIdxInt);
-  fhQA[kCutClusterTPC][index]->Fill((float)nClustersTPC);
-  Float_t chi2PerClusterTPC = -1.;
-  if (nClustersTPC!=0)
-    chi2PerClusterTPC = esdTrack->GetTPCchi2()/((float)nClustersTPC);
-  fhQA[kCutChi2TPC][index]->Fill(chi2PerClusterTPC);
-  
-  Int_t nClustersITS = esdTrack->GetITSclusters(fIdxInt);
-  fhQA[kCutClusterITS][index]->Fill((float)nClustersITS);
-  Float_t chi2PerClusterITS = -1.;
-  if (nClustersITS!=0)
-    chi2PerClusterITS = esdTrack->GetITSchi2()/((float)nClustersITS);
-  fhQA[kCutChi2ITS][index]->Fill(chi2PerClusterITS);
-  
-  
-  if ((esdTrack->GetStatus()&AliESDtrack::kTPCrefit)==0)
-    fhQA[kCutRefitTPC][index]->Fill(0.);
-  if (!((esdTrack->GetStatus()&AliESDtrack::kTPCrefit)==0))
-    fhQA[kCutRefitTPC][index]->Fill(1.);
-  
-  if ((esdTrack->GetStatus()&AliESDtrack::kITSrefit)==0)
-    fhQA[kCutRefitITS][index]->Fill(0.);
-  if (!((esdTrack->GetStatus()&AliESDtrack::kITSrefit)==0))
-    fhQA[kCutRefitITS][index]->Fill(1.);
-  
-  
-  Double_t extCov[15];
-  esdTrack->GetExternalCovariance(extCov);
-  
-  fhQA[kCutCovElement11][index]->Fill(extCov[0]);
-  fhQA[kCutCovElement22][index]->Fill(extCov[2]);
-  fhQA[kCutCovElement33][index]->Fill(extCov[5]);
-  fhQA[kCutCovElement44][index]->Fill(extCov[9]);
-  fhQA[kCutCovElement55][index]->Fill(extCov[14]);
-  
+  if (!obj) return;
+  if (!obj->InheritsFrom("AliVParticle")) {
+    AliError("object must derived from AliVParticle !");
+    return;
+  }
+
+  AliESDtrack * esdTrack = dynamic_cast<AliESDtrack*>(obj);
+  AliAODTrack * aodTrack = dynamic_cast<AliAODTrack*>(obj);
+
+  if (!(esdTrack || aodTrack)) {
+    AliError("object must be an ESDtrack or an AODtrack !");
+    return;
+  }
+
+  Bool_t isESDTrack = kFALSE;
+  Bool_t isAODTrack = kFALSE;
+
+  if (esdTrack) isESDTrack = strcmp(obj->ClassName(),"AliESDtrack") == 0 ? kTRUE : kFALSE ;
+  if (aodTrack) isAODTrack = strcmp(obj->ClassName(),"AliAODTrack") == 0 ? kTRUE : kFALSE ;
+
+
+  // b = 0: fill histograms before cuts
+  // b = 1: fill histograms after cuts
+
+// // // remove following 5 lines when AliESDtrackCuts is updated
+   Int_t    nClustersTPC = 0;
+   Int_t    nClustersITS = 0 ;
+   Float_t  chi2PerClusterTPC =  0 ;
+   Float_t  chi2PerClusterITS = 0 ;
+   Double_t extCov[15]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
+
+  Int_t   nClustersTRD = 0 ;
+  Int_t   nTrackletsTRD = 0 ;
+  Float_t chi2PerTrackletTRD = 0 ;
+  Float_t fractionFoundClustersTPC = 0;
+
+  if (isESDTrack) {
+    nClustersTRD = esdTrack->GetTRDncls();
+    nTrackletsTRD = esdTrack->GetTRDntracklets();
+    if (nTrackletsTRD != 0) chi2PerTrackletTRD = esdTrack->GetTRDchi2() / Float_t(nTrackletsTRD);
+
+// // // include following line when AliESDtrackCuts is updated
+//     if (esdTrack->GetTPCNclsF() != 0) fractionFoundClustersTPC = fTrackCuts->GetCutVariable(2) / float(esdTrack->GetTPCNclsF());
+
+// // // remove following 6 lines when AliESDtrackCuts is updated
+     nClustersTPC = esdTrack->GetTPCclusters(0x0);
+     nClustersITS = esdTrack->GetITSclusters(0x0);
+     if (nClustersTPC != 0) chi2PerClusterTPC = esdTrack->GetTPCchi2() / Float_t(nClustersTPC);
+     if (nClustersITS != 0) chi2PerClusterITS = esdTrack->GetITSchi2() / Float_t(nClustersITS);
+     esdTrack->GetExternalCovariance(extCov);
+     if (esdTrack->GetTPCNclsF() != 0) fractionFoundClustersTPC = float(nClustersTPC) / float(esdTrack->GetTPCNclsF());
+  }
+
+// // // include following lines when AliESDtrackCuts is updated
+//   fhQA[kCutClusterTPC][b]->Fill(fTrackCuts->GetCutVariable(2));
+//   fhQA[kCutClusterITS][b]->Fill(fTrackCuts->GetCutVariable(3));
+//   fhQA[kCutChi2TPC][b]->Fill(fTrackCuts->GetCutVariable(4));
+//   fhQA[kCutChi2ITS][b]->Fill(fTrackCuts->GetCutVariable(5));
+// // // remove following 4 lines when AliESDtrackCuts is updated
+   fhQA[kCutClusterTPC][b]->Fill((float)nClustersTPC);
+   fhQA[kCutChi2TPC][b]->Fill(chi2PerClusterTPC);
+   fhQA[kCutClusterITS][b]->Fill((float)nClustersITS);
+   fhQA[kCutChi2ITS][b]->Fill(chi2PerClusterITS);
+
+
+  fhQA[kCutClusterTRD][b]->Fill((float)nClustersTRD);
+  fhQA[kCutChi2TRD][b]->Fill(chi2PerTrackletTRD);
+//   if (b==0 || (b==1 && fTrackCuts->GetCutVariable(2)>0)) fhQA[kCutMinFoundClusterTPC][b]->Fill((float)fractionFoundClustersTPC);
+  if (b==0 || (b==1 && nClustersTPC>0)) fhQA[kCutMinFoundClusterTPC][b]->Fill((float)fractionFoundClustersTPC);
+  fhQA[kCutTrackletTRD][b]->Fill((float)nTrackletsTRD);
+  if (isESDTrack) {
+   fhQA[kCutTrackletTRDpid][b]->Fill((float)esdTrack->GetTRDntrackletsPID());
+   fhQA[kCutdEdxClusterTPC][b]->Fill((float)esdTrack->GetTPCsignalN());
+  }
+// // // include following lines when AliESDtrackCuts is updated
+//   fhQA[kCutCovElement11][b]->Fill(fTrackCuts->GetCutVariable(6));
+//   fhQA[kCutCovElement22][b]->Fill(fTrackCuts->GetCutVariable(7));
+//   fhQA[kCutCovElement33][b]->Fill(fTrackCuts->GetCutVariable(8));
+//   fhQA[kCutCovElement44][b]->Fill(fTrackCuts->GetCutVariable(9));
+//   fhQA[kCutCovElement55][b]->Fill(fTrackCuts->GetCutVariable(10));
+// // // remove following 5 lines when AliESDtrackCuts is updated
+   fhQA[kCutCovElement11][b]->Fill(extCov[0]);
+   fhQA[kCutCovElement22][b]->Fill(extCov[2]);
+   fhQA[kCutCovElement33][b]->Fill(extCov[5]);
+   fhQA[kCutCovElement44][b]->Fill(extCov[9]);
+   fhQA[kCutCovElement55][b]->Fill(extCov[14]);
+
+
   // fill cut statistics and cut correlation histograms with information from the bitmap
   if (b) return;
 
   // Get the bitmap of the single cuts
-  if ( !obj ) return;
-  TBits* bitmap = SelectionBitMap(obj);
+  SelectionBitMap(obj);
 
   // Number of single cuts in this class
-  UInt_t ncuts = bitmap->GetNbits();
+  UInt_t ncuts = fBitmap->GetNbits();
   for(UInt_t bit=0; bit<ncuts;bit++) {
-    if (!bitmap->TestBitNumber(bit)) {
+    if (!fBitmap->TestBitNumber(bit)) {
        fhCutStatistics->Fill(bit+1);
        for (UInt_t bit2=bit; bit2<ncuts;bit2++) {
-         if (!bitmap->TestBitNumber(bit2)) 
+         if (!fBitmap->TestBitNumber(bit2)) 
            fhCutCorrelation->Fill(bit+1,bit2+1);
        }
     }
@@ -828,7 +1081,7 @@ void AliCFTrackQualityCuts::DrawHistograms(Bool_t drawLogScale)
   // -----
 
   TCanvas* canvas2 = new TCanvas("Track_QA_Quality_2", "Track QA Quality 2", 1200, 800);
-  canvas2->Divide(3, 2);
+  canvas2->Divide(2, 2);
 
   canvas2->cd(1);
   gPad->SetRightMargin(right);
@@ -853,20 +1106,11 @@ void AliCFTrackQualityCuts::DrawHistograms(Bool_t drawLogScale)
   gPad->SetLeftMargin(left);
   gPad->SetTopMargin(top);
   gPad->SetBottomMargin(bottom);
-//   fhQA[kCutRefitTPC][0]->SetStats(kFALSE);
-  fhQA[kCutRefitTPC][0]->Draw();
-  fhQA[kCutRefitTPC][1]->Draw("same");
-
-  canvas2->cd(4);
-  gPad->SetRightMargin(right);
-  gPad->SetLeftMargin(left);
-  gPad->SetTopMargin(top);
-  gPad->SetBottomMargin(bottom);
   fhQA[kCutClusterITS][0]->SetStats(kFALSE);
   fhQA[kCutClusterITS][0]->Draw();
   fhQA[kCutClusterITS][1]->Draw("same");
 
-  canvas2->cd(5);
+  canvas2->cd(4);
   gPad->SetRightMargin(right);
   gPad->SetLeftMargin(left);
   gPad->SetTopMargin(top);
@@ -875,15 +1119,6 @@ void AliCFTrackQualityCuts::DrawHistograms(Bool_t drawLogScale)
   fhQA[kCutChi2ITS][0]->Draw();
   fhQA[kCutChi2ITS][1]->Draw("same");
 
-  canvas2->cd(6);
-  gPad->SetRightMargin(right);
-  gPad->SetLeftMargin(left);
-  gPad->SetTopMargin(top);
-  gPad->SetBottomMargin(bottom);
-//   fhQA[kCutRefitITS][0]->SetStats(kFALSE);
-  fhQA[kCutRefitITS][0]->Draw();
-  fhQA[kCutRefitITS][1]->Draw("same");
-
   canvas2->SaveAs(Form("%s.eps", canvas2->GetName()));
   canvas2->SaveAs(Form("%s.ps", canvas2->GetName()));
 
@@ -946,11 +1181,11 @@ void AliCFTrackQualityCuts::DrawHistograms(Bool_t drawLogScale)
   canvas3->SaveAs(Form("%s.ps", canvas3->GetName()));
 }
 //__________________________________________________________________________________
-void AliCFTrackQualityCuts::AddQAHistograms(TList *qaList)  const {
+void AliCFTrackQualityCuts::AddQAHistograms(TList *qaList) {
   //
   // saves the histograms in a TList
   //
-  if(!fIsQAOn) return;
+  DefineHistograms();
 
   qaList->Add(fhCutStatistics);
   qaList->Add(fhCutCorrelation);