]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - CORRFW/AliCFTrackIsPrimaryCuts.cxx
Typo
[u/mrichter/AliRoot.git] / CORRFW / AliCFTrackIsPrimaryCuts.cxx
index 2bd2f5707f8084133ea8691d9accabe291c68e6e..1087df9d35b4357ff96df964de681d5f84bc99ab 100644 (file)
@@ -38,8 +38,9 @@
 
 #include <TCanvas.h>
 #include <TDirectory.h>
-#include <TBits.h>
 #include <TH2.h>
+#include <TBits.h>
+
 #include <AliESDtrack.h>
 #include <AliLog.h>
 #include "AliCFTrackIsPrimaryCuts.h"
@@ -49,6 +50,7 @@ ClassImp(AliCFTrackIsPrimaryCuts)
 //__________________________________________________________________________________
 AliCFTrackIsPrimaryCuts::AliCFTrackIsPrimaryCuts() :
   AliCFCutBase(),
+  fNSigmaToVertex(0),
   fNSigmaToVertexMax(0),
   fRequireSigmaToVertex(0),
   fAcceptKinkDaughters(0),
@@ -73,12 +75,12 @@ AliCFTrackIsPrimaryCuts::AliCFTrackIsPrimaryCuts() :
   //
   // Default constructor
   //
-  fBitmap=new TBits(0);
   Initialise();
 }
 //__________________________________________________________________________________
 AliCFTrackIsPrimaryCuts::AliCFTrackIsPrimaryCuts(Char_t* name, Char_t* title) :
   AliCFCutBase(name,title),
+  fNSigmaToVertex(0),
   fNSigmaToVertexMax(0),
   fRequireSigmaToVertex(0),
   fAcceptKinkDaughters(0),
@@ -103,12 +105,12 @@ AliCFTrackIsPrimaryCuts::AliCFTrackIsPrimaryCuts(Char_t* name, Char_t* title) :
   //
   // Constructor
   //
-  fBitmap=new TBits(0);
   Initialise();
 }
 //__________________________________________________________________________________
 AliCFTrackIsPrimaryCuts::AliCFTrackIsPrimaryCuts(const AliCFTrackIsPrimaryCuts& c) :
   AliCFCutBase(c),
+  fNSigmaToVertex(c.fNSigmaToVertex),
   fNSigmaToVertexMax(c.fNSigmaToVertexMax),
   fRequireSigmaToVertex(c.fRequireSigmaToVertex),
   fAcceptKinkDaughters(c.fAcceptKinkDaughters),
@@ -143,6 +145,7 @@ AliCFTrackIsPrimaryCuts& AliCFTrackIsPrimaryCuts::operator=(const AliCFTrackIsPr
   //
   if (this != &c) {
     AliCFCutBase::operator=(c) ;
+    fNSigmaToVertex = c.fNSigmaToVertex ;
     fNSigmaToVertexMax = c.fNSigmaToVertexMax ;
     fRequireSigmaToVertex = c.fRequireSigmaToVertex ;
     fAcceptKinkDaughters = c.fAcceptKinkDaughters ;
@@ -163,7 +166,7 @@ AliCFTrackIsPrimaryCuts& AliCFTrackIsPrimaryCuts::operator=(const AliCFTrackIsPr
     fhBinLimDcaZ = c.fhBinLimDcaZ;
     fhBinLimDcaXYnorm = c.fhBinLimDcaXYnorm;
     fhBinLimDcaZnorm = c.fhBinLimDcaZnorm;
-    
+
     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();
@@ -171,7 +174,6 @@ AliCFTrackIsPrimaryCuts& AliCFTrackIsPrimaryCuts::operator=(const AliCFTrackIsPr
        if(c.fhDcaXYvsDcaZnorm[j]) fhDcaXYvsDcaZnorm[j] = (TH2F*)c.fhDcaXYvsDcaZnorm[j]->Clone();
       }
     }
-
     ((AliCFTrackIsPrimaryCuts &) c).Copy(*this);
  }
   return *this;
@@ -186,22 +188,19 @@ AliCFTrackIsPrimaryCuts::~AliCFTrackIsPrimaryCuts()
   if (fhCutCorrelation)                        delete fhCutCorrelation;
 
   for (Int_t j=0; j<kNStepQA; j++){
-    for (Int_t i=0; i<kNHist; i++){
-      if(fhQA[i][j]) delete fhQA[i][j];
-    }
-    if(fhDcaXYvsDcaZ[j]) delete fhDcaXYvsDcaZ[j];
-    if(fhDcaXYvsDcaZnorm[j]) delete fhDcaXYvsDcaZnorm[j];
+    if(fhDcaXYvsDcaZ[j])       delete fhDcaXYvsDcaZ[j];
+    if(fhDcaXYvsDcaZnorm[j])   delete fhDcaXYvsDcaZnorm[j];
+    for (Int_t i=0; i<kNHist; i++)
+      if(fhQA[i][j])           delete fhQA[i][j];
   }
-
-  if (fBitmap) delete fBitmap;
-  
-  if(fhBinLimNSigma) delete fhBinLimNSigma;
-  if(fhBinLimRequireSigma) delete fhBinLimRequireSigma;
-  if(fhBinLimAcceptKink) delete fhBinLimAcceptKink;
-  if(fhBinLimDcaXY) delete fhBinLimDcaXY;
-  if(fhBinLimDcaZ) delete fhBinLimDcaZ;
-  if(fhBinLimDcaXYnorm) delete fhBinLimDcaXYnorm;
-  if(fhBinLimDcaZnorm) delete fhBinLimDcaZnorm;
+  if(fBitmap)                  delete fBitmap;
+  if(fhBinLimNSigma)           delete fhBinLimNSigma;
+  if(fhBinLimRequireSigma)     delete fhBinLimRequireSigma;
+  if(fhBinLimAcceptKink)       delete fhBinLimAcceptKink;
+  if(fhBinLimDcaXY)            delete fhBinLimDcaXY;
+  if(fhBinLimDcaZ)             delete fhBinLimDcaZ;
+  if(fhBinLimDcaXYnorm)        delete fhBinLimDcaXYnorm;
+  if(fhBinLimDcaZnorm)                 delete fhBinLimDcaZnorm;
 }
 //__________________________________________________________________________________
 void AliCFTrackIsPrimaryCuts::Initialise()
@@ -209,6 +208,7 @@ void AliCFTrackIsPrimaryCuts::Initialise()
   //
   // sets everything to zero
   //
+  fNSigmaToVertex = 0;
   fNSigmaToVertexMax = 0;
   fRequireSigmaToVertex = 0;
   fAcceptKinkDaughters = 0;
@@ -217,23 +217,23 @@ void AliCFTrackIsPrimaryCuts::Initialise()
   SetRequireSigmaToVertex();
 
   for (Int_t j=0; j<kNStepQA; j++)  {
-    for (Int_t i=0; i<kNHist; i++){
-      fhQA[i][j] = 0x0;
-    }
     fhDcaXYvsDcaZ[j] = 0x0;
     fhDcaXYvsDcaZnorm[j] = 0x0;
+    for (Int_t i=0; i<kNHist; i++)
+      fhQA[i][j] = 0x0;
   }
   fhCutStatistics = 0;
   fhCutCorrelation = 0;
-  
+  fBitmap=new TBits(0);
+
   //set default bining for QA histograms
-  SetHistogramBins(kCutNSigmaToVertex,500,0,50);
-  SetHistogramBins(kCutRequireSigmaToVertex,2,-0.5,1.5);
-  SetHistogramBins(kCutAcceptKinkDaughters,2,-0.5,1.5);
-  SetHistogramBins(kDcaXY,500,-10,10);
-  SetHistogramBins(kDcaZ,500,-10,10);
-  SetHistogramBins(kDcaXYnorm,500,-10,10);
-  SetHistogramBins(kDcaZnorm,500,-10,10);
+  SetHistogramBins(kCutNSigmaToVertex,500,0.,50.);
+  SetHistogramBins(kCutRequireSigmaToVertex,5,-0.75,1.75);
+  SetHistogramBins(kCutAcceptKinkDaughters,5,-0.75,1.75);
+  SetHistogramBins(kDcaXY,500,-10.,10.);
+  SetHistogramBins(kDcaZ,500,-10.,10.);
+  SetHistogramBins(kDcaXYnorm,500,-10.,10.);
+  SetHistogramBins(kDcaZnorm,500,-10.,10.);
 }
 //__________________________________________________________________________________
 void AliCFTrackIsPrimaryCuts::Copy(TObject &c) const
@@ -249,18 +249,15 @@ void AliCFTrackIsPrimaryCuts::Copy(TObject &c) const
   if (fhCutCorrelation) target.fhCutCorrelation = (TH2F*) fhCutCorrelation->Clone();
 
   for (Int_t j=0; j<kNStepQA; j++){
-    for (Int_t i=0; i<kNHist; i++){
-      if(fhQA[i][j]) target.fhQA[i][j] = (TH1F*)fhQA[i][j]->Clone();
-      
-    }
     if(fhDcaXYvsDcaZ[j]) target.fhDcaXYvsDcaZ[j] = (TH2F*)fhDcaXYvsDcaZ[j]->Clone();
     if(fhDcaXYvsDcaZnorm[j]) target.fhDcaXYvsDcaZnorm[j] = (TH2F*)fhDcaXYvsDcaZnorm[j]->Clone();
+    for (Int_t i=0; i<kNHist; i++)
+      if(fhQA[i][j]) target.fhQA[i][j] = (TH1F*)fhQA[i][j]->Clone();
   }
-  
   TNamed::Copy(c);
 }
 //____________________________________________________________________
-Float_t AliCFTrackIsPrimaryCuts::GetSigmaToVertex(AliESDtrack* esdTrack) const
+void AliCFTrackIsPrimaryCuts::GetSigmaToVertex(AliESDtrack* esdTrack)
 {
   //
   // Calculates the number of sigma to the vertex.
@@ -287,28 +284,26 @@ Float_t AliCFTrackIsPrimaryCuts::GetSigmaToVertex(AliESDtrack* esdTrack) const
   // It means that for a 2-dim gauss: n_sigma(d) = Sqrt(2)*ErfInv(1 - Exp((-x**2)/2)
   // Can this be expressed in a different way?
 
-  if (bRes[0] == 0 || bRes[1] ==0)
-    return -1;
+  if (bRes[0] == 0 || bRes[1] ==0) {
+    fNSigmaToVertex = -1;
+    return;
+  }
 
   Float_t d = TMath::Sqrt(TMath::Power(b[0]/bRes[0],2) + TMath::Power(b[1]/bRes[1],2));
 
   // stupid rounding problem screws up everything:
   // if d is too big, TMath::Exp(...) gets 0, and TMath::ErfInverse(1) that should be infinite, gets 0 :(
-  if (TMath::Exp(-d * d / 2) < 1e-10)
-    return 1000;
+  if (TMath::Exp(-d * d / 2) < 1e-10) {
+    fNSigmaToVertex = 1000;
+    return;
+  }
 
   d = TMath::ErfInverse(1 - TMath::Exp(-d * d / 2)) * TMath::Sqrt(2);
-  return d;
+  fNSigmaToVertex = d;
+  return;
 }
 //__________________________________________________________________________________
-void AliCFTrackIsPrimaryCuts::GetBitMap(TObject* obj, TBits *bitmap)  {
-  //
-  // retrieve the pointer to the bitmap
-  //
-  bitmap = SelectionBitMap(obj);
-}
-//__________________________________________________________________________________
-TBits* AliCFTrackIsPrimaryCuts::SelectionBitMap(TObject* obj)
+void AliCFTrackIsPrimaryCuts::SelectionBitMap(TObject* obj)
 {
   //
   // test if the track passes the single cuts
@@ -318,50 +313,47 @@ TBits* AliCFTrackIsPrimaryCuts::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
+  // check TObject and cast into ESDtrack
+  if (!obj) return;
+  if (!obj->InheritsFrom("AliESDtrack")) AliError("object must derived from AliESDtrack !");
   AliESDtrack* esdTrack = dynamic_cast<AliESDtrack *>(obj);
-  if ( !esdTrack ) return fBitmap ;
-
-
-  for(Int_t i=0; i<kNCuts; i++)fBitmap->SetBitNumber(i,kTRUE);
+  if ( !esdTrack ) return;
 
   // get the track to vertex parameter
-  Float_t nSigmaToVertex = GetSigmaToVertex(esdTrack);
+  GetSigmaToVertex(esdTrack);
 
   // fill the bitmap
   Int_t iCutBit = 0;
-  if (nSigmaToVertex > fNSigmaToVertexMax)
-       fBitmap->SetBitNumber(iCutBit,kFALSE);
+  if (fNSigmaToVertex <= fNSigmaToVertexMax)
+       fBitmap->SetBitNumber(iCutBit,kTRUE);
   iCutBit++;
-  if (nSigmaToVertex<0 && fRequireSigmaToVertex)
-       fBitmap->SetBitNumber(iCutBit,kFALSE);
+  if (!fRequireSigmaToVertex || (fNSigmaToVertex>=0 && fRequireSigmaToVertex))
+       fBitmap->SetBitNumber(iCutBit,kTRUE);
   iCutBit++;
-  if (!fAcceptKinkDaughters && esdTrack->GetKinkIndex(0)>0)
-       fBitmap->SetBitNumber(iCutBit,kFALSE);
+  if (fAcceptKinkDaughters || (!fAcceptKinkDaughters && esdTrack->GetKinkIndex(0)<=0))
+       fBitmap->SetBitNumber(iCutBit,kTRUE);
 
-  return fBitmap;
+  return;
 }
 //__________________________________________________________________________________
 Bool_t AliCFTrackIsPrimaryCuts::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 AliCFTrackIsPrimaryCuts::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 AliCFTrackIsPrimaryCuts::SetHistogramBins(Int_t index, Int_t nbins, Double_t *bins)
@@ -373,43 +365,43 @@ void AliCFTrackIsPrimaryCuts::SetHistogramBins(Int_t index, Int_t nbins, Double_
 
   switch(index){
   case kCutNSigmaToVertex:
-    fhNBinsNSigma=nbins;
+    fhNBinsNSigma=nbins+1;
     fhBinLimNSigma=new Double_t[nbins+1];
     for(Int_t i=0;i<nbins+1;i++)fhBinLimNSigma[i]=bins[i];
     break;
 
   case kCutRequireSigmaToVertex:
-    fhNBinsRequireSigma=nbins;
+    fhNBinsRequireSigma=nbins+1;
     fhBinLimRequireSigma=new Double_t[nbins+1];
     for(Int_t i=0;i<nbins+1;i++)fhBinLimRequireSigma[i]=bins[i];
     break;
 
   case kCutAcceptKinkDaughters:
-    fhNBinsAcceptKink=nbins;
+    fhNBinsAcceptKink=nbins+1;
     fhBinLimAcceptKink=new Double_t[nbins+1];
     for(Int_t i=0;i<nbins+1;i++)fhBinLimAcceptKink[i]=bins[i];
     break;
 
   case kDcaXY:
-    fhNBinsDcaXY=nbins;
+    fhNBinsDcaXY=nbins+1;
     fhBinLimDcaXY=new Double_t[nbins+1];
     for(Int_t i=0;i<nbins+1;i++)fhBinLimDcaXY[i]=bins[i];
     break;
-    
+
   case kDcaZ:
-    fhNBinsDcaZ=nbins;
+    fhNBinsDcaZ=nbins+1;
     fhBinLimDcaZ=new Double_t[nbins+1];
     for(Int_t i=0;i<nbins+1;i++)fhBinLimDcaZ[i]=bins[i];
     break;
-    
+
   case kDcaXYnorm:
-    fhNBinsDcaXYnorm=nbins;
+    fhNBinsDcaXYnorm=nbins+1;
     fhBinLimDcaXYnorm=new Double_t[nbins+1];
     for(Int_t i=0;i<nbins+1;i++)fhBinLimDcaXYnorm[i]=bins[i];
     break;
-    
+
   case kDcaZnorm:
-    fhNBinsDcaZnorm=nbins;
+    fhNBinsDcaZnorm=nbins+1;
     fhBinLimDcaZnorm=new Double_t[nbins+1];
     for(Int_t i=0;i<nbins+1;i++)fhBinLimDcaZnorm[i]=bins[i];
     break;
@@ -421,47 +413,45 @@ void AliCFTrackIsPrimaryCuts::SetHistogramBins(Int_t index, Int_t nbins, Double_
   //
   // fixed bin size
   //
-  if(!fIsQAOn) return;
-
   switch(index){
   case kCutNSigmaToVertex:
-    fhNBinsNSigma=nbins;
+    fhNBinsNSigma=nbins+1;
     fhBinLimNSigma=new Double_t[nbins+1];
     for(Int_t i=0;i<nbins+1;i++)fhBinLimNSigma[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
     break;
 
   case kCutRequireSigmaToVertex:
-    fhNBinsRequireSigma=nbins;
+    fhNBinsRequireSigma=nbins+1;
     fhBinLimRequireSigma=new Double_t[nbins+1];
     for(Int_t i=0;i<nbins+1;i++)fhBinLimRequireSigma[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
     break;
 
   case kCutAcceptKinkDaughters:
-    fhNBinsAcceptKink=nbins;
+    fhNBinsAcceptKink=nbins+1;
     fhBinLimAcceptKink=new Double_t[nbins+1];
     for(Int_t i=0;i<nbins+1;i++)fhBinLimAcceptKink[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
     break;
 
   case kDcaXY:
-    fhNBinsDcaXY=nbins;
+    fhNBinsDcaXY=nbins+1;
     fhBinLimDcaXY=new Double_t[nbins+1];
     for(Int_t i=0;i<nbins+1;i++)fhBinLimDcaXY[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
     break;
-    
+
   case kDcaZ:
-    fhNBinsDcaZ=nbins;
+    fhNBinsDcaZ=nbins+1;
     fhBinLimDcaZ=new Double_t[nbins+1];
     for(Int_t i=0;i<nbins+1;i++)fhBinLimDcaZ[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
     break;
-    
+
   case kDcaXYnorm:
-    fhNBinsDcaXYnorm=nbins;
+    fhNBinsDcaXYnorm=nbins+1;
     fhBinLimDcaXYnorm=new Double_t[nbins+1];
     for(Int_t i=0;i<nbins+1;i++)fhBinLimDcaXYnorm[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
     break;
-    
+
   case kDcaZnorm:
-    fhNBinsDcaZnorm=nbins;
+    fhNBinsDcaZnorm=nbins+1;
     fhBinLimDcaZnorm=new Double_t[nbins+1];
     for(Int_t i=0;i<nbins+1;i++)fhBinLimDcaZnorm[i]=xmin+i*(xmax-xmin)/Double_t(nbins);
     break;
@@ -472,7 +462,6 @@ void AliCFTrackIsPrimaryCuts::SetHistogramBins(Int_t index, Int_t nbins, Double_
   //
   // histograms for cut variables, cut statistics and cut correlations
   //
-
   Int_t color = 2;
 
   // book cut statistics and cut correlation histograms
@@ -497,17 +486,16 @@ void AliCFTrackIsPrimaryCuts::SetHistogramBins(Int_t index, Int_t nbins, Double_
   for (Int_t i=0; i<kNStepQA; i++) {
     if (i==0) sprintf(str," ");
     else sprintf(str,"_cut");
-  
+
     fhDcaXYvsDcaZ[i]            = new  TH2F(Form("%s_dcaXYvsDcaZ%s",GetName(),str),"",200,-10,10,200,-10,10);
     fhDcaXYvsDcaZnorm[i]        = new  TH2F(Form("%s_dcaXYvsDcaZnorm%s",GetName(),str),"",200,-10,10,200,-10,10);
-
-    fhQA[kCutNSigmaToVertex][i]        = new TH1F(Form("%s_nSigmaToVertex%s",GetName(),str),"",fhNBinsNSigma,fhBinLimNSigma);
-    fhQA[kCutRequireSigmaToVertex][i] = new TH1F(Form("%s_requireSigmaToVertex%s",GetName(),str),"",fhNBinsRequireSigma,fhBinLimRequireSigma);
-    fhQA[kCutAcceptKinkDaughters][i] = new TH1F(Form("%s_acceptKinkDaughters%s",GetName(),str),"",fhNBinsAcceptKink,fhBinLimAcceptKink);
-    fhQA[kDcaXY][i]            = new TH1F(Form("%s_dcaXY%s",GetName(),str),"",fhNBinsDcaXY,fhBinLimDcaXY);
-    fhQA[kDcaZ][i]             = new TH1F(Form("%s_dcaZ%s",GetName(),str),"",fhNBinsDcaZ,fhBinLimDcaZ);
-    fhQA[kDcaXYnorm][i]                = new TH1F(Form("%s_dcaXYnorm%s",GetName(),str),"",fhNBinsDcaXYnorm,fhBinLimDcaXYnorm);
-    fhQA[kDcaZnorm][i]         = new TH1F(Form("%s_dcaZnorm%s",GetName(),str),"",fhNBinsDcaZnorm,fhBinLimDcaZnorm);
+    fhQA[kCutNSigmaToVertex][i]        = new TH1F(Form("%s_nSigmaToVertex%s",GetName(),str),"",fhNBinsNSigma-1,fhBinLimNSigma);
+    fhQA[kCutRequireSigmaToVertex][i] = new TH1F(Form("%s_requireSigmaToVertex%s",GetName(),str),"",fhNBinsRequireSigma-1,fhBinLimRequireSigma);
+    fhQA[kCutAcceptKinkDaughters][i] = new TH1F(Form("%s_acceptKinkDaughters%s",GetName(),str),"",fhNBinsAcceptKink-1,fhBinLimAcceptKink);
+    fhQA[kDcaXY][i]            = new TH1F(Form("%s_dcaXY%s",GetName(),str),"",fhNBinsDcaXY-1,fhBinLimDcaXY);
+    fhQA[kDcaZ][i]             = new TH1F(Form("%s_dcaZ%s",GetName(),str),"",fhNBinsDcaZ-1,fhBinLimDcaZ);
+    fhQA[kDcaXYnorm][i]                = new TH1F(Form("%s_dcaXYnorm%s",GetName(),str),"",fhNBinsDcaXYnorm-1,fhBinLimDcaXYnorm);
+    fhQA[kDcaZnorm][i]         = new TH1F(Form("%s_dcaZnorm%s",GetName(),str),"",fhNBinsDcaZnorm-1,fhBinLimDcaZnorm);
 
     fhDcaXYvsDcaZ[i]->SetXTitle("impact par. d_{z}");
     fhDcaXYvsDcaZ[i]->SetYTitle("impact par. d_{xy}");
@@ -522,9 +510,7 @@ void AliCFTrackIsPrimaryCuts::SetHistogramBins(Int_t index, Int_t nbins, Double_
     fhQA[kDcaXYnorm][i]->SetXTitle("norm. impact par. d_{xy} / #sigma_{xy}");
     fhQA[kDcaZnorm][i]->SetXTitle("norm. impact par. d_{z} / #sigma_{z}");
   }
-
   for(Int_t i=0; i<kNHist; i++) fhQA[i][1]->SetLineColor(color);
-
 }
 //__________________________________________________________________________________
 void AliCFTrackIsPrimaryCuts::FillHistograms(TObject* obj, Bool_t f)
@@ -532,16 +518,14 @@ void AliCFTrackIsPrimaryCuts::FillHistograms(TObject* obj, Bool_t f)
   //
   // fill the QA histograms
   //
-  if(!fIsQAOn) return;
 
   // cast TObject into ESDtrack
+  if (!obj) return;
   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 = ((f) ? 1 : 0);
+  // f = 0: fill histograms before cuts
+  // f = 1: fill histograms after cuts
 
        Float_t b[2];
        Float_t bRes[2];
@@ -554,41 +538,38 @@ void AliCFTrackIsPrimaryCuts::FillHistograms(TObject* obj, Bool_t f)
        bRes[0] = TMath::Sqrt(bCov[0]);
        bRes[1] = TMath::Sqrt(bCov[2]);
 
-       fhQA[kDcaZ][index]->Fill(b[1]);
-       fhQA[kDcaXY][index]->Fill(b[0]);
-       fhDcaXYvsDcaZ[index]->Fill(b[1],b[0]);
+       fhQA[kDcaZ][f]->Fill(b[1]);
+       fhQA[kDcaXY][f]->Fill(b[0]);
+       fhDcaXYvsDcaZ[f]->Fill(b[1],b[0]);
 
        if (bRes[0]!=0 && bRes[1]!=0) {
-          fhQA[kDcaZnorm][index]->Fill(b[1]/bRes[1]);
-          fhQA[kDcaXYnorm][index]->Fill(b[0]/bRes[0]);
-          fhDcaXYvsDcaZnorm[index]->Fill(b[1]/bRes[1], b[0]/bRes[0]);
+          fhQA[kDcaZnorm][f]->Fill(b[1]/bRes[1]);
+          fhQA[kDcaXYnorm][f]->Fill(b[0]/bRes[0]);
+          fhDcaXYvsDcaZnorm[f]->Fill(b[1]/bRes[1], b[0]/bRes[0]);
        }
 
-  // getting the track to vertex parameters
-  Float_t nSigmaToVertex = GetSigmaToVertex(esdTrack);
-
-  fhQA[kCutNSigmaToVertex][index]->Fill(nSigmaToVertex);
-  if (nSigmaToVertex<0 && fRequireSigmaToVertex) fhQA[kCutRequireSigmaToVertex][index]->Fill(0.);
-  if (!(nSigmaToVertex<0 && fRequireSigmaToVertex)) fhQA[kCutRequireSigmaToVertex][index]->Fill(1.);
+  fhQA[kCutNSigmaToVertex][f]->Fill(fNSigmaToVertex);
+  if (fNSigmaToVertex<0 && fRequireSigmaToVertex) fhQA[kCutRequireSigmaToVertex][f]->Fill(0.);
+  if (!(fNSigmaToVertex<0 && fRequireSigmaToVertex)) fhQA[kCutRequireSigmaToVertex][f]->Fill(1.);
 
 
-  if (!fAcceptKinkDaughters && esdTrack->GetKinkIndex(0)>0) fhQA[kCutAcceptKinkDaughters][index]->Fill(0.);
-  if (!(!fAcceptKinkDaughters && esdTrack->GetKinkIndex(0)>0)) fhQA[kCutAcceptKinkDaughters][index]->Fill(0.);
+  if (!fAcceptKinkDaughters && esdTrack->GetKinkIndex(0)>0) fhQA[kCutAcceptKinkDaughters][f]->Fill(0.);
+  if (!(!fAcceptKinkDaughters && esdTrack->GetKinkIndex(0)>0)) fhQA[kCutAcceptKinkDaughters][f]->Fill(0.);
 
   // fill cut statistics and cut correlation histograms with information from the bitmap
   if (f) 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);
        }
     }
@@ -790,19 +771,19 @@ void AliCFTrackIsPrimaryCuts::DrawHistograms()
   canvas4->SaveAs(Form("%s.ps", canvas4->GetName()));
 }
 //__________________________________________________________________________________
-void AliCFTrackIsPrimaryCuts::AddQAHistograms(TList *qaList) const {
+void AliCFTrackIsPrimaryCuts::AddQAHistograms(TList *qaList) {
   //
   // saves the histograms in a TList
   //
-  if(!fIsQAOn) return;
+  DefineHistograms();
 
   qaList->Add(fhCutStatistics);
   qaList->Add(fhCutCorrelation);
 
   for (Int_t j=0; j<kNStepQA; j++) {
     qaList->Add(fhDcaXYvsDcaZ[j]);
-    qaList->Add(fhDcaXYvsDcaZnorm[j]);    
+    qaList->Add(fhDcaXYvsDcaZnorm[j]);
     for(Int_t i=0; i<kNHist; i++)
-      qaList->Add(fhQA[i][j]);
+       qaList->Add(fhQA[i][j]);
   }
 }