Adding Pile-up rejection from AliAnalysisUtils to AliFemto code in AOD and ESD reader...
authormajanik <majanik@cern.ch>
Fri, 25 Apr 2014 09:21:20 +0000 (11:21 +0200)
committermajanik <majanik@cern.ch>
Fri, 25 Apr 2014 09:25:57 +0000 (11:25 +0200)
PWGCF/FEMTOSCOPY/AliFemto/AliFemtoEventReaderAOD.cxx
PWGCF/FEMTOSCOPY/AliFemto/AliFemtoEventReaderAOD.h
PWGCF/FEMTOSCOPY/AliFemto/AliFemtoEventReaderESDChain.cxx
PWGCF/FEMTOSCOPY/AliFemto/AliFemtoEventReaderESDChain.h

index c5b2a0b..a5f9d60 100644 (file)
@@ -29,6 +29,7 @@
 #include "AliPID.h"
 
 #include "AliAODpidUtil.h"
+#include "AliAnalysisUtils.h"
 
 ClassImp(AliFemtoEventReaderAOD)
 
@@ -63,6 +64,8 @@ AliFemtoEventReaderAOD::AliFemtoEventReaderAOD():
   fMagFieldSign(1),
   fisEPVZ(kTRUE),
   fpA2013(kFALSE),
+  fisPileUp(kFALSE),
+  fMVPlp(kFALSE),
   fDCAglobalTrack(kFALSE),
   fFlatCent(kFALSE)
 {
@@ -95,6 +98,8 @@ AliFemtoEventReaderAOD::AliFemtoEventReaderAOD(const AliFemtoEventReaderAOD &aRe
   fMagFieldSign(1),
   fisEPVZ(kTRUE),
   fpA2013(kFALSE),
+  fisPileUp(kFALSE),
+  fMVPlp(kFALSE),
   fDCAglobalTrack(kFALSE),
   fFlatCent(kFALSE)
 {
@@ -117,6 +122,8 @@ AliFemtoEventReaderAOD::AliFemtoEventReaderAOD(const AliFemtoEventReaderAOD &aRe
   fEstEventMult = aReader.fEstEventMult;
   fUsePreCent = aReader.fUsePreCent;
   fpA2013 = aReader.fpA2013;
+  fisPileUp = aReader.fisPileUp;
+  fMVPlp = aReader.fMVPlp;
   fDCAglobalTrack = aReader.fDCAglobalTrack;
 
 }
@@ -161,6 +168,8 @@ AliFemtoEventReaderAOD& AliFemtoEventReaderAOD::operator=(const AliFemtoEventRea
   fUsePreCent = aReader.fUsePreCent;
   fEstEventMult = aReader.fEstEventMult;
   fpA2013 = aReader.fpA2013;
+  fisPileUp = aReader.fisPileUp;
+  fMVPlp = aReader.fMVPlp;
   fDCAglobalTrack = aReader.fDCAglobalTrack;
   fFlatCent= aReader.fFlatCent;
 
@@ -307,38 +316,31 @@ void AliFemtoEventReaderAOD::CopyAODtoFemtoEvent(AliFemtoEvent *tEvent)
     }
   }
 
+  //AliAnalysisUtils
+  if(fisPileUp||fpA2013)
+    {
+      AliAnalysisUtils *anaUtil=new AliAnalysisUtils();
+      if(fpA2013)
+       if(anaUtil->IsVertexSelected2013pA(fEvent)==kFALSE) return; //Vertex rejection for pA analysis.
+      if(fMVPlp) anaUtil->SetUseMVPlpSelection(kTRUE);
+      else anaUtil->SetUseMVPlpSelection(kFALSE);
+      if(fisPileUp)
+       if(anaUtil->IsPileUpEvent(fEvent)) return; //Pile-up rejection.
+      delete anaUtil;   
+    }
+
+
   // Primary Vertex position
-  //  double fV1[3];
-  if(fpA2013)
-  {
-    const AliAODVertex* trkVtx = fEvent->GetPrimaryVertex();
-    if (!trkVtx || trkVtx->GetNContributors()<=0)  return;
-    TString vtxTtl = trkVtx->GetTitle();
-    if (!vtxTtl.Contains("VertexerTracks")) return;
-    Float_t zvtx = trkVtx->GetZ();
-    const AliAODVertex* spdVtx = fEvent->GetPrimaryVertexSPD();
-    if (spdVtx->GetNContributors()<=0)  return;
-    TString vtxTyp = spdVtx->GetTitle();
-    Double_t cov[6]={0};
-    spdVtx->GetCovarianceMatrix(cov);
-    Double_t zRes = TMath::Sqrt(cov[5]);
-    if (vtxTyp.Contains("vertexer:Z") && (zRes>0.25))  return;
-    if (TMath::Abs(spdVtx->GetZ() - trkVtx->GetZ())>0.5)  return;
-
-    if (TMath::Abs(zvtx) > 10)  return;
-  }
-  fEvent->GetPrimaryVertex()->GetPosition(fV1);
+  const AliAODVertex* aodvertex = (AliAODVertex*) fEvent->GetPrimaryVertex();
+  if(!aodvertex || aodvertex->GetNContributors() < 1) return; //Bad vertex, skip event.
 
+  aodvertex->GetPosition(fV1);
   AliFmThreeVectorF vertex(fV1[0],fV1[1],fV1[2]);
   tEvent->SetPrimVertPos(vertex);
 
   //starting to reading tracks
   int nofTracks=0;  //number of reconstructed tracks in event
 
-  // Check to see whether the additional info exists
-  //   if (fPWG2AODTracks)
-  //     nofTracks=fPWG2AODTracks->GetEntries();
-  //   else
   nofTracks=fEvent->GetNumberOfTracks();
 
   AliEventplane *ep = fEvent->GetEventplane();
@@ -543,18 +545,13 @@ void AliFemtoEventReaderAOD::CopyAODtoFemtoEvent(AliFemtoEvent *tEvent)
 
     //counting particles to set multiplicity
     if(fEstEventMult==kGlobalCount){
-      double impact[2];
-      double covimpact[3];
-      AliAODTrack* trk_clone = (AliAODTrack*)aodtrack->Clone("trk_clone");
-      if (trk_clone->PropagateToDCA(fEvent->GetPrimaryVertex(),fEvent->GetMagneticField(),10000,impact,covimpact)) {
-        if(impact[0]<0.2 && TMath::Abs(impact[1]+fV1[2])<2.0)
-          //if (aodtrack->IsPrimaryCandidate()) //? instead of kinks?
-          if (aodtrack->Chi2perNDF() < 4.0)
-            if (aodtrack->Pt() > 0.15 && aodtrack->Pt() < 20)
-              if (aodtrack->GetTPCNcls() > 70)
-                if (aodtrack->Eta() < 0.8)
-                  tNormMult++;
-      }
+      AliAODTrack* trk_clone = (AliAODTrack*)aodtrack->Clone("trk_clone"); //no DCA cut for global count
+      //if (aodtrack->IsPrimaryCandidate()) //? instead of kinks?
+      if (aodtrack->Chi2perNDF() < 4.0)
+       if (aodtrack->Pt() > 0.15 && aodtrack->Pt() < 20)
+         if (aodtrack->GetTPCNcls() > 70)
+           if (aodtrack->Eta() < 0.8)
+             tNormMult++;
       delete trk_clone;
     }
 
@@ -1509,6 +1506,18 @@ void AliFemtoEventReaderAOD::SetpA2013(Bool_t pa2013)
   fpA2013 = pa2013;
 }
 
+void AliFemtoEventReaderAOD::SetUseMVPlpSelection(Bool_t mvplp)
+{
+  fMVPlp = mvplp;
+}
+
+void AliFemtoEventReaderAOD::SetIsPileUpEvent(Bool_t ispileup)
+{
+  fisPileUp = ispileup;
+}
+
+
+
 void AliFemtoEventReaderAOD::SetDCAglobalTrack(Bool_t dcagt)
 {
   fDCAglobalTrack = dcagt;
index 3c4dddb..b89af56 100644 (file)
@@ -55,7 +55,9 @@ class AliFemtoEventReaderAOD : public AliFemtoEventReader
   void SetEPVZERO(Bool_t);
   void GetGlobalPositionAtGlobalRadiiThroughTPC(AliAODTrack *track, Float_t bfield, Float_t globalPositionsAtRadii[9][3]);
   void SetUseMultiplicity(EstEventMult aType);
-  void SetpA2013(Bool_t pa2013);
+  void SetpA2013(Bool_t pa2013); //set vertex configuration for pA (2013): IsVertexSelected2013pA
+  void SetUseMVPlpSelection(Bool_t mvplp);
+  void SetIsPileUpEvent(Bool_t ispileup);
   void SetDCAglobalTrack(Bool_t dcagt);
 
   bool RejectEventCentFlat(float MagField, float CentPercent);
@@ -99,6 +101,8 @@ class AliFemtoEventReaderAOD : public AliFemtoEventReader
   int            fMagFieldSign;     // Magnetic field sign
   Bool_t fisEPVZ; // to get event plane angle from VZERO
   Bool_t fpA2013; // analysis on pA 2013 data
+  Bool_t fisPileUp; //pile up rejection on?
+  Bool_t fMVPlp;  //multi-vertex pileup rejection?
   Bool_t fDCAglobalTrack; // to get DCA from global tracks instead of TPC-only
 
   bool fFlatCent;
index b84feeb..a76ef7d 100644 (file)
@@ -23,6 +23,7 @@
 #include "AliFemtoEvent.h"
 #include "AliFemtoModelHiddenInfo.h"
 #include "AliPID.h"
+#include "AliAnalysisUtils.h"
 
 ClassImp(AliFemtoEventReaderESDChain)
 
@@ -49,7 +50,9 @@ AliFemtoEventReaderESDChain::AliFemtoEventReaderESDChain():
   fIsPidOwner(0),
   fReadV0(0),
   fMagFieldSign(0),
-  fpA2013(kFALSE)
+  fpA2013(kFALSE),
+  fisPileUp(kFALSE),
+  fMVPlp(kFALSE)
 {
   //constructor with 0 parameters , look at default settings 
   //   fClusterPerPadrow = (list<Int_t> **) malloc(sizeof(list<Int_t> *) * AliESDfriendTrack::kMaxTPCcluster);
@@ -80,7 +83,9 @@ AliFemtoEventReaderESDChain::AliFemtoEventReaderESDChain(const AliFemtoEventRead
   fIsPidOwner(0),
   fReadV0(0),
   fMagFieldSign(0),
-  fpA2013(kFALSE)
+  fpA2013(kFALSE),
+  fisPileUp(kFALSE),
+  fMVPlp(kFALSE)
 {
   // Copy constructor
   fConstrained = aReader.fConstrained;
@@ -97,7 +102,8 @@ AliFemtoEventReaderESDChain::AliFemtoEventReaderESDChain(const AliFemtoEventRead
   fReadV0 = aReader.fReadV0;
   fMagFieldSign = aReader.fMagFieldSign;
   fpA2013 = aReader.fpA2013;
-
+  fisPileUp = aReader.fisPileUp;
+  fMVPlp = aReader.fMVPlp;
   //   fEventFriend = aReader.fEventFriend;
   //   fClusterPerPadrow = (list<Int_t> **) malloc(sizeof(list<Int_t> *) * AliESDfriendTrack::kMaxTPCcluster);
   //   for (int tPad=0; tPad<AliESDfriendTrack::kMaxTPCcluster; tPad++) {
@@ -156,6 +162,8 @@ AliFemtoEventReaderESDChain& AliFemtoEventReaderESDChain::operator=(const AliFem
   fReadV0 = aReader.fReadV0;
   fMagFieldSign = aReader.fMagFieldSign;
   fpA2013 = aReader.fpA2013;
+  fisPileUp = aReader.fisPileUp;
+  fMVPlp = aReader.fMVPlp;
   //  fEventFriend = aReader.fEventFriend;
   
   //   if (fClusterPerPadrow) {
@@ -299,34 +307,36 @@ void AliFemtoEventReaderESDChain::CopyESDtoFemtoEvent(AliFemtoEvent *hbtEvent)
   double fV1[3];
   double fVCov[6];
 
-  if(fpA2013)
+  //AliAnalysisUtils
+  if(fisPileUp||fpA2013)
     {
-      const AliESDVertex* trkVtx = fEvent->GetPrimaryVertex();
-      if (!trkVtx || trkVtx->GetNContributors()<=0) return;
-      TString vtxTtl = trkVtx->GetTitle();
-      if (!vtxTtl.Contains("VertexerTracks")) return;
-      Float_t zvtx = trkVtx->GetZ();
-      const AliESDVertex* spdVtx = fEvent->GetVertex();
-      if (spdVtx->GetNContributors()<=0) return;
-      TString vtxTyp = spdVtx->GetTitle();
-      Double_t cov[6]={0};
-      spdVtx->GetCovarianceMatrix(cov);
-      Double_t zRes = TMath::Sqrt(cov[5]);
-      if (vtxTyp.Contains("vertexer:Z") && (zRes>0.25)) return;
-      if (TMath::Abs(spdVtx->GetZ() - trkVtx->GetZ())>0.5) return;
-
-      if (TMath::Abs(zvtx) > 10) return;
+      AliAnalysisUtils *anaUtil=new AliAnalysisUtils();
+      if(fpA2013)
+       if(anaUtil->IsVertexSelected2013pA(fEvent)==kFALSE) return; //Vertex rejection for pA analysis.
+      if(fMVPlp) anaUtil->SetUseMVPlpSelection(kTRUE);
+      else anaUtil->SetUseMVPlpSelection(kFALSE);
+      if(fisPileUp)
+       if(anaUtil->IsPileUpEvent(fEvent)) return; //Pile-up rejection.
+      delete anaUtil;   
     }
+
+
   if (fUseTPCOnly) {
-    fEvent->GetPrimaryVertexTPC()->GetXYZ(fV1);
-    fEvent->GetPrimaryVertexTPC()->GetCovMatrix(fVCov);
-    if (!fEvent->GetPrimaryVertexTPC()->GetStatus())
+    const AliESDVertex* esdvertex = (AliESDVertex*) fEvent->GetPrimaryVertexTPC();
+    if(!esdvertex || esdvertex->GetNContributors() < 1) return; //Bad vertex, skip event.
+
+    esdvertex->GetXYZ(fV1);
+    esdvertex->GetCovMatrix(fVCov);
+    if (!esdvertex->GetStatus())
       fVCov[4] = -1001.0;
   }
   else {
-    fEvent->GetPrimaryVertex()->GetXYZ(fV1);
-    fEvent->GetPrimaryVertex()->GetCovMatrix(fVCov);
-    if (!fEvent->GetPrimaryVertex()->GetStatus())
+    const AliESDVertex* esdvertex = (AliESDVertex*) fEvent->GetPrimaryVertex();
+    if(!esdvertex || esdvertex->GetNContributors() < 1) return; //Bad vertex, skip event.
+   
+    esdvertex->GetXYZ(fV1);
+    esdvertex->GetCovMatrix(fVCov);
+    if (!esdvertex->GetStatus())
       fVCov[4] = -1001.0;
   }
     
@@ -1282,3 +1292,13 @@ void AliFemtoEventReaderESDChain::SetpA2013(Bool_t pA2013)
 {
   fpA2013 = pA2013;
 }
+
+void AliFemtoEventReaderESDChain::SetUseMVPlpSelection(Bool_t mvplp)
+{
+  fMVPlp = mvplp;
+}
+
+void AliFemtoEventReaderESDChain::SetIsPileUpEvent(Bool_t ispileup)
+{
+  fisPileUp = ispileup;
+}
index 39e69c8..214e48c 100644 (file)
@@ -69,6 +69,9 @@ class AliFemtoEventReaderESDChain : public AliFemtoEventReader
 
   void CopyESDtoFemtoEvent(AliFemtoEvent *hbtEvent);
   void SetpA2013(Bool_t pa2013);
+  void SetUseMVPlpSelection(Bool_t mvplp);
+  void SetIsPileUpEvent(Bool_t ispileup);
+
  protected:
 
  private:
@@ -100,6 +103,9 @@ class AliFemtoEventReaderESDChain : public AliFemtoEventReader
   int    fMagFieldSign;
 
   Bool_t fpA2013;
+  Bool_t fisPileUp;
+  Bool_t fMVPlp;
+
 
 #ifdef __ROOT__
   ClassDef(AliFemtoEventReaderESDChain, 1)