]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
New cut on z of SPD vertex to remove outliers
authorprino <prino@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 9 Jul 2012 12:45:36 +0000 (12:45 +0000)
committerprino <prino@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 9 Jul 2012 12:45:36 +0000 (12:45 +0000)
PWGHF/vertexingHF/AliRDHFCuts.cxx
PWGHF/vertexingHF/AliRDHFCuts.h

index 92af4376c2584b4b3a46270f2892600408e401d0..045d6d5d9c1ac2652ebcd580ff02ef53a3219b16 100644 (file)
@@ -95,6 +95,7 @@ fIsCandTrackSPDFirst(kFALSE),
 fMaxPtCandTrackSPDFirst(0.),
 fApplySPDDeadPbPb2011(kFALSE),
 fRemoveTrackletOutliers(kFALSE),
+fCutOnzVertexSPD(0),
 fKinkReject(kFALSE)
 {
   //
@@ -149,6 +150,7 @@ AliRDHFCuts::AliRDHFCuts(const AliRDHFCuts &source) :
   fMaxPtCandTrackSPDFirst(source.fMaxPtCandTrackSPDFirst),
   fApplySPDDeadPbPb2011(source.fApplySPDDeadPbPb2011),
   fRemoveTrackletOutliers(source.fRemoveTrackletOutliers),
+  fCutOnzVertexSPD(source.fCutOnzVertexSPD),
   fKinkReject(source.fKinkReject)
 {
   //
@@ -216,6 +218,7 @@ AliRDHFCuts &AliRDHFCuts::operator=(const AliRDHFCuts &source)
   fMaxPtCandTrackSPDFirst=source.fMaxPtCandTrackSPDFirst;
   fApplySPDDeadPbPb2011=source.fApplySPDDeadPbPb2011;
   fRemoveTrackletOutliers=source.fRemoveTrackletOutliers;
+  fCutOnzVertexSPD=source.fCutOnzVertexSPD;
   fKinkReject=source.fKinkReject;
 
   if(source.GetTrackCuts()) {delete fTrackCuts; fTrackCuts=new AliESDtrackCuts(*(source.GetTrackCuts()));}
@@ -397,6 +400,24 @@ Bool_t AliRDHFCuts::IsEventSelected(AliVEvent *event) {
     } 
   }
 
+  if(fCutOnzVertexSPD>0){
+    const AliVVertex *vSPD = ((AliAODEvent*)event)->GetPrimaryVertexSPD();
+    if(!vSPD || (vSPD && vSPD->GetNContributors()<fMinVtxContr)){
+      accept=kFALSE;
+      fEvRejectionBits+=1<<kBadSPDVertex;
+    }else{
+      if(fCutOnzVertexSPD==1 && TMath::Abs(vSPD->GetZ())>12.) {
+       fEvRejectionBits+=1<<kZVtxSPDOutFid;
+       if(accept) fWhyRejection=6;
+       accept=kFALSE;
+      } 
+      if(fCutOnzVertexSPD==2 && TMath::Abs(vSPD->GetZ()-vertex->GetZ())>0.5) {
+       fEvRejectionBits+=1<<kZVtxSPDOutFid;
+       if(accept) fWhyRejection=6;
+       accept=kFALSE;
+      } 
+    }
+  }
 
   // pile-up rejection
   if(fOptPileup==kRejectPileupEvent){
@@ -900,7 +921,7 @@ Float_t AliRDHFCuts::GetCentrality(AliAODEvent* aodEvent,AliRDHFCuts::ECentralit
       cent=(Float_t)(centrality->GetCentralityPercentile("V0M"));
       if(cent<0){
        Int_t quality = centrality->GetQuality();
-       if(quality<=1){
+       if(quality<=1){ // fQuality==1 means rejected by zVertex cut that we apply a part and we want to keep separate (Giacomo)
          cent=(Float_t)centrality->GetCentralityPercentileUnchecked("V0M");
        }else{
          Int_t runnum=aodEvent->GetRunNumber();
index a0bbdca9357128a08bab2b2ddf58cb854ed8cce8..fd805bf3bb6c1fc6bc767fe3ab4952574a5c1a1f 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,kPhysicsSelection};
+  enum ERejBits {kNotSelTrigger,kNoVertex,kTooFewVtxContrib,kZVtxOutFid,kPileupSPD,kOutsideCentrality,kPhysicsSelection,kBadSPDVertex,kZVtxSPDOutFid};
   AliRDHFCuts(const Char_t* name="RDHFCuts", const Char_t* title="");
   
   virtual ~AliRDHFCuts();
@@ -101,6 +101,10 @@ class AliRDHFCuts : public AliAnalysisCuts
     fUseOnlyOneTrigger=kTRUE;
   }
   void SetRemoveTrackletOutliers(Bool_t opt) {fRemoveTrackletOutliers=opt;}
+  void SetCutOnzVertexSPD(Int_t opt) {
+    if(opt>=0 && opt<=2) fCutOnzVertexSPD=opt;
+    else AliError("Wrong option for cut on zVertexSPD");
+  }
   void SetTriggerClass(TString trclass0, TString trclass1="") {fTriggerClass[0]=trclass0; fTriggerClass[1]=trclass1;} 
   void ApplySPDDeadPbPb2011(){fApplySPDDeadPbPb2011=kTRUE;}
   void SetVarsForOpt(Int_t nVars,Bool_t *forOpt);
@@ -298,9 +302,10 @@ class AliRDHFCuts : public AliAnalysisCuts
   Double_t fMaxPtCandTrackSPDFirst; // maximum pt of the candidate for which to check if the daughters fulfill kFirst criteria
   Bool_t fApplySPDDeadPbPb2011;  // flag to apply SPD dead module map of PbPb2011
   Bool_t fRemoveTrackletOutliers; // flag to apply cut on tracklets vs. centrality for 2011 data
+  Int_t fCutOnzVertexSPD; // cut on zSPD vertex to remove outliers in centrality vs. tracklets (0=no cut, 1= cut at 12 cm, 2= cut on difference to z of vtx tracks
   Bool_t fKinkReject; // flag to reject kink daughters
 
-  ClassDef(AliRDHFCuts,24);  // base class for cuts on AOD reconstructed heavy-flavour decays
+  ClassDef(AliRDHFCuts,25);  // base class for cuts on AOD reconstructed heavy-flavour decays
 };
 
 #endif