]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG/EMCAL/AliAnalysisTaskEmcal.cxx
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWG / EMCAL / AliAnalysisTaskEmcal.cxx
index 06ed828d5ae5c20caf1498ec1ab80e4fc2f2c712..aeb6b7817165ba3be33ba42303a6c333677caa45 100644 (file)
@@ -57,6 +57,8 @@ AliAnalysisTaskEmcal::AliAnalysisTaskEmcal() :
   fTrackPtCut(0),
   fMinNTrack(0),
   fUseAliAnaUtils(kFALSE),
+  fRejectPileup(kFALSE),
+  fTklVsClusSPDCut(kFALSE),
   fAliAnalysisUtils(0x0),
   fOffTrigger(AliVEvent::kAny),
   fTrigClass(),
@@ -97,7 +99,6 @@ AliAnalysisTaskEmcal::AliAnalysisTaskEmcal() :
   fXsection(0),
   fParticleCollArray(),
   fClusterCollArray(),
-  fMainTriggerPatch(0x0),
   fTriggers(0),
   fOutput(0),
   fHistEventCount(0),
@@ -140,6 +141,8 @@ AliAnalysisTaskEmcal::AliAnalysisTaskEmcal(const char *name, Bool_t histo) :
   fTrackPtCut(0),
   fMinNTrack(0),
   fUseAliAnaUtils(kFALSE),
+  fRejectPileup(kFALSE),
+  fTklVsClusSPDCut(kFALSE),
   fAliAnalysisUtils(0x0),
   fOffTrigger(AliVEvent::kAny),
   fTrigClass(),
@@ -180,7 +183,6 @@ AliAnalysisTaskEmcal::AliAnalysisTaskEmcal(const char *name, Bool_t histo) :
   fXsection(0),
   fParticleCollArray(),
   fClusterCollArray(),
-  fMainTriggerPatch(0x0),
   fTriggers(0),
   fOutput(0),
   fHistEventCount(0),
@@ -372,6 +374,7 @@ void AliAnalysisTaskEmcal::UserCreateOutputObjects()
   fHistEventRejection->GetXaxis()->SetBinLabel(10,"PileUp");
   fHistEventRejection->GetXaxis()->SetBinLabel(11,"EvtPlane");
   fHistEventRejection->GetXaxis()->SetBinLabel(12,"SelPtHardBin");
+  fHistEventRejection->GetXaxis()->SetBinLabel(13,"Bkg evt");
   fHistEventRejection->GetYaxis()->SetTitle("counts");
   fOutput->Add(fHistEventRejection);
 
@@ -406,8 +409,6 @@ void AliAnalysisTaskEmcal::UserExec(Option_t *)
 {
   // Main loop, called for each event.
 
-  fMainTriggerPatch = NULL;
-
   if (!fInitialized)
     ExecOnce();
 
@@ -733,6 +734,7 @@ ULong_t AliAnalysisTaskEmcal::GetTriggerList()
   Int_t nG2 = 0;
   Int_t nJ1 = 0;
   Int_t nJ2 = 0;
+  Int_t nL0 = 0;
   AliEmcalTriggerPatchInfo *patch;
   for (Int_t iPatch = 0; iPatch < nPatch; iPatch++) {
     patch = (AliEmcalTriggerPatchInfo*)fTriggerPatchInfo->At( iPatch );
@@ -740,6 +742,7 @@ ULong_t AliAnalysisTaskEmcal::GetTriggerList()
     if (patch->IsGammaLow())  nG2++;
     if (patch->IsJetHigh()) nJ1++;
     if (patch->IsJetLow())  nJ2++;
+    if (patch->IsLevel0())  nL0++;
   }
 
   AliDebug(2, "Patch summary: ");
@@ -748,25 +751,22 @@ ULong_t AliAnalysisTaskEmcal::GetTriggerList()
   AliDebug(2, Form("Gamma: low[%d], high[%d]" ,nG2, nG1));
 
   ULong_t triggers(0);
-  if (nG1>0)
-    SETBIT(triggers, kG1);
-  if (nG2>0)
-    SETBIT(triggers, kG2);
-  if (nJ1>0)
-    SETBIT(triggers, kJ1);
-  if (nJ2>0)
-    SETBIT(triggers, kJ2);
+  if (nL0>0) SETBIT(triggers, kL0);
+  if (nG1>0) SETBIT(triggers, kG1);
+  if (nG2>0) SETBIT(triggers, kG2);
+  if (nJ1>0) SETBIT(triggers, kJ1);
+  if (nJ2>0) SETBIT(triggers, kJ2);
   return triggers;
 }
 
 //________________________________________________________________________
-Bool_t AliAnalysisTaskEmcal::HasTriggerType(TriggerType t)
+Bool_t AliAnalysisTaskEmcal::HasTriggerType(TriggerType trigger)
 {
   // Check if event has a given trigger type
-  if(t == kND){
+  if(trigger & kND){
     return fTriggers == 0;
   }
-  return TESTBIT(fTriggers, int(t));
+  return TESTBIT(fTriggers, trigger);
 }
 
 //________________________________________________________________________
@@ -782,7 +782,7 @@ Bool_t AliAnalysisTaskEmcal::IsEventSelected()
     } else {
       const AliAODEvent *aev = dynamic_cast<const AliAODEvent*>(InputEvent());
       if (aev) {
-        res = aev->GetHeader()->GetOfflineTrigger();
+        res = ((AliVAODHeader*)aev->GetHeader())->GetOfflineTrigger();
       }
     }
     if ((res & fOffTrigger) == 0) {
@@ -855,10 +855,15 @@ Bool_t AliAnalysisTaskEmcal::IsEventSelected()
       return kFALSE;
     }
 
-    if (fAliAnalysisUtils->IsPileUpEvent(InputEvent())) {
+    if (fRejectPileup && fAliAnalysisUtils->IsPileUpEvent(InputEvent())) {
       if (fGeneralHistograms) fHistEventRejection->Fill("PileUp",1);
       return kFALSE;
     }
+
+    if(fTklVsClusSPDCut && fAliAnalysisUtils->IsSPDClusterVsTrackletBG(InputEvent())) {
+      if (fGeneralHistograms) fHistEventRejection->Fill("Bkg evt",1);
+      return kFALSE;
+    }
   }
 
   if ((fMinVz != -999) && (fMaxVz != -999)) {
@@ -1224,12 +1229,14 @@ Int_t AliAnalysisTaskEmcal::GetNClusters(Int_t i) const
 }
 
 //________________________________________________________________________
-AliEmcalTriggerPatchInfo* AliAnalysisTaskEmcal::GetMainTriggerPatch(
+AliEmcalTriggerPatchInfo* AliAnalysisTaskEmcal::GetMainTriggerPatch(TriggerCategory trigger, Bool_t doSimpleOffline)
 {
-  //get main trigger match; if not known yet, look for it and cache
-
-  if (fMainTriggerPatch) 
-    return fMainTriggerPatch;
+  // Get main trigger match
+  //
+  // For the selection of the main trigger patch, high and low threshold triggers of a given category are grouped
+  // If there are more than 1 main patch of a given trigger category (i.e. different high and low threshold patches),
+  // the highest one according to the ADC value is taken. In case doSimpleOffline is true, then only the patches from
+  // the simple offline trigger are used.
 
   if (!fTriggerPatchInfo) {
     AliError(Form("%s: fTriggerPatchInfo not available",GetName()));
@@ -1239,18 +1246,74 @@ AliEmcalTriggerPatchInfo* AliAnalysisTaskEmcal::GetMainTriggerPatch()
   //number of patches in event
   Int_t nPatch = fTriggerPatchInfo->GetEntries();
 
-  //extract main trigger patch
-  AliEmcalTriggerPatchInfo *patch;
+  //extract main trigger patch(es)
+  AliEmcalTriggerPatchInfo *patch(NULL), *selected(NULL);
   for (Int_t iPatch = 0; iPatch < nPatch; iPatch++) {
-    
+
     patch = (AliEmcalTriggerPatchInfo*)fTriggerPatchInfo->At( iPatch );
     if (patch->IsMainTrigger()) {
-      fMainTriggerPatch = patch;
-      break;
+      if(doSimpleOffline){
+        if(patch->IsOfflineSimple()){
+          switch(trigger){
+          case kTriggerLevel0:
+            // option not yet implemented in the trigger maker
+            if(patch->IsLevel0()) selected = patch;
+            break;
+          case kTriggerLevel1Jet: 
+            if(patch->IsJetHighSimple() || patch->IsJetLowSimple()){
+              if(!selected) selected = patch;
+              else if(patch->GetADCOfflineAmp() > selected->GetADCOfflineAmp()) selected = patch;
+            }
+            break;
+          case kTriggerLevel1Gamma:
+           if(patch->IsGammaHighSimple() || patch->IsGammaLowSimple()){
+             if(!selected) selected = patch;
+             else if(patch->GetADCOfflineAmp() > selected->GetADCOfflineAmp()) selected = patch;
+           }
+           break;
+          default:   // Silence compiler warnings
+            AliError("Untreated case: Main Patch is recalculated; should be in 'else' branch");
+          };
+        }
+      } else {  // Not OfflineSimple
+        switch(trigger){
+        case kTriggerLevel0:
+            if(patch->IsLevel0()) selected = patch;
+            break;
+        case kTriggerLevel1Jet:
+            if(patch->IsJetHigh() || patch->IsJetLow()){
+              if(!selected) selected = patch;
+              else if (patch->GetADCAmp() > selected->GetADCAmp()) 
+                selected = patch;
+            }
+            break;
+        case kTriggerLevel1Gamma:
+            if(patch->IsGammaHigh() || patch->IsGammaLow()){
+              if(!selected) selected = patch;
+              else if (patch->GetADCAmp() > selected->GetADCAmp()) 
+                selected = patch;
+            }
+            break;
+         default:
+            AliError("Untreated case: Main Patch is recalculated; should be in 'else' branch");
+        };
+      }
+    }
+    else if ((trigger == kTriggerRecalcJet &&  patch->IsRecalcJet()) || 
+             (trigger == kTriggerRecalcGamma && patch->IsRecalcGamma())) {  // recalculated patches
+      if (doSimpleOffline && patch->IsOfflineSimple()) {
+        if(!selected) selected = patch;
+        else if (patch->GetADCOfflineAmp() > selected->GetADCOfflineAmp())  // this in fact should not be needed, but we have it in teh other branches as well, so keeping it for compleness
+          selected = patch;
+      }
+      else if (!doSimpleOffline && !patch->IsOfflineSimple()) {
+        if(!selected) selected = patch;
+        else if (patch->GetADCAmp() > selected->GetADCAmp()) 
+          selected = patch;
+      }
     }
   }
-
-  return fMainTriggerPatch;
+  return selected;
 }
 
 //________________________________________________________________________
@@ -1299,8 +1362,8 @@ void AliAnalysisTaskEmcal::SetRejectionReasonLabels(TAxis* axis)
   axis->SetBinLabel(9,  "MCFlag");
   axis->SetBinLabel(10, "MCGenerator");
   axis->SetBinLabel(11, "ChargeCut");
-  axis->SetBinLabel(12, "Bit11");
-  axis->SetBinLabel(13, "Bit12");
+  axis->SetBinLabel(12, "MinDistanceTPCSectorEdge");
+  axis->SetBinLabel(13, "MinMCLabelAccept");
   axis->SetBinLabel(14, "IsEMCal");
   axis->SetBinLabel(15, "Time");
   axis->SetBinLabel(16, "Energy");