New bitmap to store output of event selection
authorprino <prino@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 28 Jun 2011 22:57:33 +0000 (22:57 +0000)
committerprino <prino@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 28 Jun 2011 22:57:33 +0000 (22:57 +0000)
PWG3/vertexingHF/AliRDHFCuts.cxx
PWG3/vertexingHF/AliRDHFCuts.h

index bd2fd42..4cd1b0e 100644 (file)
@@ -70,6 +70,7 @@ fUsePID(kFALSE),
 fUseAOD049(kFALSE),
 fPidHF(0),
 fWhyRejection(0),
+fEvRejectionBits(0),
 fRemoveDaughtersFromPrimary(kFALSE),
 fUseMCVertex(kFALSE),
 fOptPileup(0),
@@ -113,6 +114,7 @@ AliRDHFCuts::AliRDHFCuts(const AliRDHFCuts &source) :
   fUseAOD049(source.fUseAOD049),
   fPidHF(0),
   fWhyRejection(source.fWhyRejection),
+  fEvRejectionBits(source.fEvRejectionBits),
   fRemoveDaughtersFromPrimary(source.fRemoveDaughtersFromPrimary),
   fUseMCVertex(source.fUseMCVertex),
   fOptPileup(source.fOptPileup),
@@ -165,6 +167,7 @@ AliRDHFCuts &AliRDHFCuts::operator=(const AliRDHFCuts &source)
   fUseAOD049=source.fUseAOD049;
   SetPidHF(source.GetPidHF());
   fWhyRejection=source.fWhyRejection;
+  fEvRejectionBits=source.fEvRejectionBits;
   fRemoveDaughtersFromPrimary=source.fRemoveDaughtersFromPrimary;
   fUseMCVertex=source.fUseMCVertex;
   fOptPileup=source.fOptPileup;
@@ -211,7 +214,6 @@ Int_t AliRDHFCuts::IsEventSelectedInCentrality(AliVEvent *event) {
   //
   // Centrality selection
   //
-  
   if(fUseCentrality<kCentOff||fUseCentrality>=kCentInvalid){    
     AliWarning("Centrality estimator not valid");    
     return 3;  
@@ -235,6 +237,8 @@ Bool_t AliRDHFCuts::IsEventSelected(AliVEvent *event) {
   //if(fTriggerMask && event->GetTriggerMask()!=fTriggerMask) return kFALSE;
 
   fWhyRejection=0;
+  fEvRejectionBits=0;
+  Bool_t accept=kTRUE;
 
   // check if it's MC
   Bool_t isMC=kFALSE;
@@ -269,7 +273,8 @@ Bool_t AliRDHFCuts::IsEventSelected(AliVEvent *event) {
   if(!isMC && (event->GetRunNumber()<136851 || event->GetRunNumber()>139517)) {
     if(!firedTriggerClasses.Contains(fTriggerClass.Data())) {
       fWhyRejection=5;
-      return kFALSE;
+      fEvRejectionBits+=1<<kNotSelTrigger;
+      accept=kFALSE;
     }
   }
 
@@ -288,18 +293,29 @@ Bool_t AliRDHFCuts::IsEventSelected(AliVEvent *event) {
    
   const AliVVertex *vertex = event->GetPrimaryVertex();
 
-  if(!vertex) return kFALSE;
-
-  TString title=vertex->GetTitle();
-  if(title.Contains("Z") && fMinVtxType>1) return kFALSE; 
-  if(title.Contains("3D") && fMinVtxType>2) return kFALSE; 
-
-  if(vertex->GetNContributors()<fMinVtxContr) return kFALSE; 
-
-  if(TMath::Abs(vertex->GetZ())>fMaxVtxZ) {
-    fWhyRejection=6;
-    return kFALSE;
-  } 
+  if(!vertex){
+    accept=kFALSE;
+    fEvRejectionBits+=1<<kNoVertex;
+  }else{
+    TString title=vertex->GetTitle();
+    if(title.Contains("Z") && fMinVtxType>1){
+      accept=kFALSE;
+      fEvRejectionBits+=1<<kNoVertex;
+    }
+    else if(title.Contains("3D") && fMinVtxType>2){
+      accept=kFALSE;
+      fEvRejectionBits+=1<<kNoVertex;
+    }
+    if(vertex->GetNContributors()<fMinVtxContr){
+      accept=kFALSE;
+      fEvRejectionBits+=1<<kTooFewVtxContrib;
+    }
+    if(TMath::Abs(vertex->GetZ())>fMaxVtxZ) {
+      fEvRejectionBits+=1<<kZVtxOutFid;
+      if(accept) fWhyRejection=6;
+      accept=kFALSE;
+    } 
+  }
 
 
   // pile-up rejection
@@ -307,8 +323,9 @@ Bool_t AliRDHFCuts::IsEventSelected(AliVEvent *event) {
     Int_t cutc=(Int_t)fMinContrPileup;
     Double_t cutz=(Double_t)fMinDzPileup;
     if(event->IsPileupFromSPD(cutc,cutz,3.,2.,10.)) {
-      fWhyRejection=1;
-      return kFALSE;
+      if(accept) fWhyRejection=1;
+      fEvRejectionBits+=1<<kPileupSPD;
+      accept=kFALSE;
     }
   }
 
@@ -316,12 +333,13 @@ Bool_t AliRDHFCuts::IsEventSelected(AliVEvent *event) {
   if (fUseCentrality!=kCentOff) {  
     Int_t rejection=IsEventSelectedInCentrality(event);    
     if(rejection>1){      
-      fWhyRejection=rejection;      
-      return kFALSE;    
+      if(accept) fWhyRejection=rejection;      
+      fEvRejectionBits+=1<<kOutsideCentrality;
+      accept=kFALSE;
     }
   }
 
-  return kTRUE;
+  return accept;
 }
 //---------------------------------------------------------------------------
 Bool_t AliRDHFCuts::AreDaughtersSelected(AliAODRecoDecayHF *d) const {
index 2b34acc..907d664 100644 (file)
@@ -29,7 +29,7 @@ class AliRDHFCuts : public AliAnalysisCuts
   enum ESelLevel {kAll,kTracks,kPID,kCandidate};
   enum EPileup {kNoPileupSelection,kRejectPileupEvent,kRejectTracksFromPileupVertex};
   enum ESele {kD0toKpiCuts,kD0toKpiPID,kD0fromDstarCuts,kD0fromDstarPID,kDplusCuts,kDplusPID,kDsCuts,kDsPID,kLcCuts,kLcPID,kDstarCuts,kDstarPID};
-
+  enum ERejBits {kNotSelTrigger,kNoVertex,kTooFewVtxContrib,kZVtxOutFid,kPileupSPD,kOutsideCentrality};
   AliRDHFCuts(const Char_t* name="RDHFCuts", const Char_t* title="");
   
   virtual ~AliRDHFCuts();
@@ -127,6 +127,25 @@ class AliRDHFCuts : public AliAnalysisCuts
 
   void SetWhyRejection(Int_t why) {fWhyRejection=why; return;}
   Int_t GetWhyRejection() const {return fWhyRejection;}
+  UInt_t GetEventRejectionBitMap() const {return fEvRejectionBits;}
+  Bool_t IsEventRejectedDueToTrigger() const {
+    return fEvRejectionBits&(1<<kNotSelTrigger);
+  }
+  Bool_t IsEventRejectedDueToNotRecoVertex() const {
+    return fEvRejectionBits&(1<<kNoVertex);
+  }
+  Bool_t IsEventRejectedDueToVertexContributors() const {
+    return fEvRejectionBits&(1<<kTooFewVtxContrib);
+  }
+  Bool_t IsEventRejectedDueToZVertexOutsideFiducialRegion() const {
+    return fEvRejectionBits&(1<<kZVtxOutFid);
+  }
+  Bool_t IsEventRejectedDueToPileupSPD() const {
+    return fEvRejectionBits&(1<<kPileupSPD);
+  }
+  Bool_t IsEventRejectedDueToCentrality() const {
+    return fEvRejectionBits&(1<<kOutsideCentrality);
+  }
 
   void SetFixRefs(Bool_t fix=kTRUE) {fFixRefs=fix; return;}
 
@@ -146,6 +165,7 @@ class AliRDHFCuts : public AliAnalysisCuts
   Bool_t CountEventForNormalization() const 
   { if(fWhyRejection==0) {return kTRUE;} else {return kFALSE;} }
 
+
  protected:
 
   void SetNPtBins(Int_t nptBins){fnPtBins=nptBins;}
@@ -177,6 +197,7 @@ class AliRDHFCuts : public AliAnalysisCuts
   Bool_t fUseAOD049; // enable AOD049 centrality cleanup
   AliAODPidHF *fPidHF; // PID for heavy flavours manager
   Int_t fWhyRejection; // used to code the step at which candidate was rejected
+  UInt_t fEvRejectionBits; //bit map storing the full info about event rejection
   Bool_t fRemoveDaughtersFromPrimary; // flag to switch on the removal of duaghters from the primary vertex computation
   Bool_t fUseMCVertex; // use MC primary vertex 
   Int_t  fOptPileup;      // option for pielup selection
@@ -195,7 +216,7 @@ class AliRDHFCuts : public AliAnalysisCuts
   Double_t fMinPtCand; // minimum pt of the candidate
   Double_t fMaxPtCand; // minimum pt of the candidate
 
-  ClassDef(AliRDHFCuts,15);  // base class for cuts on AOD reconstructed heavy-flavour decays
+  ClassDef(AliRDHFCuts,16);  // base class for cuts on AOD reconstructed heavy-flavour decays
 };
 
 #endif