]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
add AOD TPC outlier cut for LHC10h and LHC11h data
authorrbertens <rbertens@cern.ch>
Fri, 16 May 2014 12:12:11 +0000 (14:12 +0200)
committerrbertens <rbertens@cern.ch>
Fri, 16 May 2014 12:38:02 +0000 (14:38 +0200)
- cut is disabled by default (for compatibilitiy)
- enable cut by calling AliFlowEventCuts::SetCutTPCmultiplicityOutliersAOD(kTRUE);
- select period by AliFlowEventCuts::SetLHC10h(kTRUE) or AliFlowEventCuts::SetLHC11h(kTRUE)
- on the agenda is creating a better interfact or let the event cut class determine the period by runnumber by itself

PWG/FLOW/Tasks/AliFlowEventCuts.cxx
PWG/FLOW/Tasks/AliFlowEventCuts.h

index 97c23c495ed9f5eabccca3ad839f83ac616f1975..9ad761e68f26b15cfe40e0a5bd5df965805bf57a 100644 (file)
@@ -81,6 +81,7 @@ AliFlowEventCuts::AliFlowEventCuts():
   fCutSPDvertexerAnomaly(kFALSE),
   fCutSPDTRKVtxZ(kFALSE),
   fCutTPCmultiplicityOutliers(kFALSE),
+  fCutTPCmultiplicityOutliersAOD(kFALSE),
   fUseCentralityUnchecked(kFALSE),
   fCentralityPercentileMethod(kTPConly),
   fCutZDCtiming(kFALSE),
@@ -129,6 +130,7 @@ AliFlowEventCuts::AliFlowEventCuts(const char* name, const char* title):
   fCutSPDvertexerAnomaly(kFALSE),
   fCutSPDTRKVtxZ(kFALSE),
   fCutTPCmultiplicityOutliers(kFALSE),
+  fCutTPCmultiplicityOutliersAOD(kFALSE),
   fUseCentralityUnchecked(kFALSE),
   fCentralityPercentileMethod(kTPConly),
   fCutZDCtiming(kFALSE),
@@ -177,6 +179,7 @@ AliFlowEventCuts::AliFlowEventCuts(const AliFlowEventCuts& that):
   fCutSPDvertexerAnomaly(that.fCutSPDvertexerAnomaly),
   fCutSPDTRKVtxZ(that.fCutSPDTRKVtxZ),
   fCutTPCmultiplicityOutliers(that.fCutTPCmultiplicityOutliers),
+  fCutTPCmultiplicityOutliersAOD(that.fCutTPCmultiplicityOutliersAOD),
   fUseCentralityUnchecked(that.fUseCentralityUnchecked),
   fCentralityPercentileMethod(that.fCentralityPercentileMethod),
   fCutZDCtiming(that.fCutZDCtiming),
@@ -261,6 +264,7 @@ AliFlowEventCuts& AliFlowEventCuts::operator=(const AliFlowEventCuts& that)
   fCutSPDvertexerAnomaly=that.fCutSPDvertexerAnomaly;
   fCutSPDTRKVtxZ=that.fCutSPDTRKVtxZ;
   fCutTPCmultiplicityOutliers=that.fCutTPCmultiplicityOutliers;
+  fCutTPCmultiplicityOutliersAOD=that.fCutTPCmultiplicityOutliersAOD;
   fUseCentralityUnchecked=that.fUseCentralityUnchecked;
   fCentralityPercentileMethod=that.fCentralityPercentileMethod;
   fCutZDCtiming=that.fCutZDCtiming;
@@ -299,7 +303,7 @@ Bool_t AliFlowEventCuts::PassesCuts(AliVEvent *event, AliMCEvent *mcevent)
     QAbefore(0)->Fill(pvtxz);
     QAbefore(1)->Fill(multGlobal,multTPC);
   }
-  if (  (fCutTPCmultiplicityOutliers && esdevent) ||  (fCutTPCmultiplicityOutliers && aodevent)  )
+  if ( fCutTPCmultiplicityOutliers && esdevent )
   {
     //this is pretty slow as we check the event track by track twice
     //this cut will work for 2010 PbPb data and is dependent on
@@ -308,18 +312,60 @@ Bool_t AliFlowEventCuts::PassesCuts(AliVEvent *event, AliMCEvent *mcevent)
       if (multTPC > ( 23+1.216*multGlobal)) {pass=kFALSE;}
       if (multTPC < (-20+1.087*multGlobal)) {pass=kFALSE;}
     }
-    
-    /* commenting conflicting code, fix is pending
-    if(aodevent && fData2011){
-        if (multTPC > ( 62.87+1.78*multGlobal)) {pass=kFALSE;}
-        if (multTPC < (-36.73+1.48*multGlobal)) {pass=kFALSE;}
+  }
+   
+
+  if(fCutTPCmultiplicityOutliersAOD && aodevent) {
+      // the AliFlowTrackCuts::Count() function will not work here, since the correlation cut uses different
+      // track cuts 
+      multTPC = 0; // tpc mult estimate
+      Int_t multGlob = 0; // global multiplicity
+      Int_t nGoodTracks(aodevent->GetNumberOfTracks());
+      if(!fData2011) { // cut on outliers
+          for(Int_t iTracks = 0; iTracks < nGoodTracks; iTracks++) { // fill tpc mult
+              AliAODTrack* trackAOD = aodevent->GetTrack(iTracks);
+              if (!trackAOD) continue;
+              if (!(trackAOD->TestFilterBit(1))) continue;
+              if ((trackAOD->Pt() < .2) || (trackAOD->Pt() > 5.0) || (TMath::Abs(trackAOD->Eta()) > .8) || (trackAOD->GetTPCNcls() < 70)  || (trackAOD->GetDetPid()->GetTPCsignal() < 10.0) || (trackAOD->Chi2perNDF() < 0.2)) continue;
+              multTPC++;
+          }
+          for(Int_t iTracks = 0; iTracks < nGoodTracks; iTracks++) { // fill global mult
+              AliAODTrack* trackAOD = aodevent->GetTrack(iTracks);
+              if (!trackAOD) continue;
+              if (!(trackAOD->TestFilterBit(16))) continue;
+              if ((trackAOD->Pt() < .2) || (trackAOD->Pt() > 5.0) || (TMath::Abs(trackAOD->Eta()) > .8) || (trackAOD->GetTPCNcls() < 70) || (trackAOD->GetDetPid()->GetTPCsignal() < 10.0) || (trackAOD->Chi2perNDF() < 0.1)) continue;
+              Double_t b[2] = {-99., -99.};
+              Double_t bCov[3] = {-99., -99., -99.};
+              if (!(trackAOD->PropagateToDCA(aodevent->GetPrimaryVertex(), aodevent->GetMagneticField(), 100., b, bCov))) continue;
+              if ((TMath::Abs(b[0]) > 0.3) || (TMath::Abs(b[1]) > 0.3)) continue;
+              multGlob++;
+          } //track loop
+          if(! (multTPC > (-40.3+1.22*multGlob) && multTPC < (32.1+1.59*multGlob))) return kFALSE;
       }
-    if(aodevent && !fData2011){
-        if (multTPC > ( 32.1+1.59*multGlobal)) {pass=kFALSE;}
-        if (multTPC < (-40.3+1.22*multGlobal)) {pass=kFALSE;}
+      if(fData2011) { // cut on outliers
+          for(Int_t iTracks = 0; iTracks < nGoodTracks; iTracks++) { // fill tpc mult
+              AliAODTrack* trackAOD = aodevent->GetTrack(iTracks);
+              if (!trackAOD) continue;
+              if (!(trackAOD->TestFilterBit(1))) continue;
+              if ((trackAOD->Pt() < .2) || (trackAOD->Pt() > 5.0) || (TMath::Abs(trackAOD->Eta()) > .8) || (trackAOD->GetTPCNcls() < 70)  || (trackAOD->GetDetPid()->GetTPCsignal() < 10.0) || (trackAOD->Chi2perNDF() < 0.2)) continue;
+              multTPC++;
+          }
+          for(Int_t iTracks = 0; iTracks < nGoodTracks; iTracks++) { // fill global mult
+              AliAODTrack* trackAOD = aodevent->GetTrack(iTracks);
+              if (!trackAOD) continue;
+              if (!(trackAOD->TestFilterBit(16))) continue;
+              if ((trackAOD->Pt() < .2) || (trackAOD->Pt() > 5.0) || (TMath::Abs(trackAOD->Eta()) > .8) || (trackAOD->GetTPCNcls() < 70) || (trackAOD->GetDetPid()->GetTPCsignal() < 10.0) || (trackAOD->Chi2perNDF() < 0.1)) continue;
+              Double_t b[2] = {-99., -99.};
+              Double_t bCov[3] = {-99., -99., -99.};
+              if (!(trackAOD->PropagateToDCA(aodevent->GetPrimaryVertex(), aodevent->GetMagneticField(), 100., b, bCov))) continue;
+              if ((TMath::Abs(b[0]) > 0.3) || (TMath::Abs(b[1]) > 0.3)) continue;
+              multGlob++;
+          } //track loop
+          if(! (multTPC > (-36.73 + 1.48*multGlob) && multTPC < (62.87 + 1.78*multGlob))) return kFALSE;
       }
-      */
   }
+
+
   if (fCutNContributors)
   {
     if (ncontrib < fNContributorsMin || ncontrib >= fNContributorsMax) pass=kFALSE;
index 72e2ed14255cd8abac1271e2b1893d24b5fa8a9a..84d25f9da3a52324e9d45121c29383bf1f3244c9 100644 (file)
@@ -61,6 +61,7 @@ class AliFlowEventCuts : public AliFlowEventSimpleCuts {
   void SetCutZDCtiming(Bool_t c=kTRUE) {fCutZDCtiming=c;}
   void SetCutSPDTRKVtxZ(Bool_t b=kTRUE) {fCutSPDTRKVtxZ=b;}
   void SetCutTPCmultiplicityOutliers(Bool_t b=kTRUE) {fCutTPCmultiplicityOutliers=b;}  
+  void SetCutTPCmultiplicityOutliersAOD(Bool_t b=kTRUE) {fCutTPCmultiplicityOutliersAOD=b;}
 
   Int_t GetNumberOfTracksMax() const {return fNumberOfTracksMax;}
   Int_t GetNumberOfTracksMin() const {return fNumberOfTracksMin;}
@@ -87,7 +88,10 @@ class AliFlowEventCuts : public AliFlowEventSimpleCuts {
   void SetUseCentralityUnchecked(Bool_t b=kTRUE) {fUseCentralityUnchecked=b;}
 
   Float_t GetCentrality(AliVEvent* event, AliMCEvent* mcEvent);
-  void SetUsedDataset(Bool_t b=kTRUE) {fData2011=b;}
+  void SetUsedDataset(Bool_t b=kTRUE) {fData2011=b;}    // confusing name, better use different interface
+  void SetLHC10h(Bool_t b=kTRUE) {fData2011=(!b);}      // TODO let cut object determine runnumber and period
+  void SetLHC11h(Bool_t b=kTRUE) {fData2011=b;}         // use this only as 'manual override'
+  
 
   void Browse(TBrowser* b);
   Long64_t Merge(TCollection* list);  
@@ -127,6 +131,7 @@ class AliFlowEventCuts : public AliFlowEventSimpleCuts {
   Bool_t fCutSPDvertexerAnomaly; //cut on the spd vertexer anomaly
   Bool_t fCutSPDTRKVtxZ; //require compatibility between SPDvertexz TRKvertexz
   Bool_t fCutTPCmultiplicityOutliers; //cut TPC multiplicity outliers
+  Bool_t fCutTPCmultiplicityOutliersAOD; // cut TPC outliers in 10h or 11h aod
   Bool_t fUseCentralityUnchecked; //use the unchecked method
   refMultMethod fCentralityPercentileMethod; //where to get the percentile from
   Bool_t fCutZDCtiming;   //cut on ZDC timing
@@ -137,7 +142,7 @@ class AliFlowEventCuts : public AliFlowEventSimpleCuts {
   TH2F *fhistTPCvsGlobalMult; //!correlation between TPCMult and GlobalMult
   Bool_t fData2011; //2011 data is used
 
-  ClassDef(AliFlowEventCuts,5)
+  ClassDef(AliFlowEventCuts,6)
 };
 
 #endif