]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
trigger selection for hadron-level event definition
authorjgrosseo <jgrosseo@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 12 Apr 2010 09:40:54 +0000 (09:40 +0000)
committerjgrosseo <jgrosseo@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 12 Apr 2010 09:40:54 +0000 (09:40 +0000)
ANALYSIS/AliTriggerAnalysis.cxx
ANALYSIS/AliTriggerAnalysis.h

index 16fa060b827adbb60d2456704f717ccf24b20a5f..abc3e27ad44c3f2d23d21637eda28de2b66ea821 100644 (file)
@@ -41,6 +41,7 @@
 #include <AliESDVZERO.h>
 #include <AliESDZDC.h>
 #include <AliESDFMD.h>
+#include <AliESDVertex.h>
 
 ClassImp(AliTriggerAnalysis)
 
@@ -199,6 +200,9 @@ const char* AliTriggerAnalysis::GetTriggerName(Trigger trigger)
   if (trigger & kOfflineFlag)
     str += " OFFLINE";  
   
+  if (trigger & kOneParticle)
+    str += " OneParticle";  
+
   return str;
 }
 
@@ -283,119 +287,120 @@ Bool_t AliTriggerAnalysis::IsOfflineTriggerFired(const AliESDEvent* aEsd, Trigge
 
   UInt_t triggerNoFlags = (UInt_t) trigger % (UInt_t) kStartOfFlags;
   
+  Bool_t decision = kFALSE;
   switch (triggerNoFlags)
   {
     case kAcceptAll:
     {
-      return kTRUE;
+      decision = kTRUE;
       break;
     }
     case kMB1:
     {
       if (SPDGFOTrigger(aEsd, 0) || V0Trigger(aEsd, kASide, kFALSE) == kV0BB || V0Trigger(aEsd, kCSide, kFALSE) == kV0BB)
-        return kTRUE;
+        decision = kTRUE;
       break;
     }
     case kMB2:
     {
       if (SPDGFOTrigger(aEsd, 0) && (V0Trigger(aEsd, kASide, kFALSE) == kV0BB || V0Trigger(aEsd, kCSide, kFALSE) == kV0BB))
-        return kTRUE;
+        decision = kTRUE;
       break;
     }
     case kMB3:
     {
       if (SPDGFOTrigger(aEsd, 0) && V0Trigger(aEsd, kASide, kFALSE) == kV0BB && V0Trigger(aEsd, kCSide, kFALSE) == kV0BB)
-        return kTRUE;
+        decision = kTRUE;
       break;
     }
     case kSPDGFO:
     {
       if (SPDGFOTrigger(aEsd, 0))
-        return kTRUE;
+        decision = kTRUE;
       break;
     }
     case kSPDGFOBits:
     {
       if (SPDGFOTrigger(aEsd, 1))
-        return kTRUE;
+        decision = kTRUE;
       break;
     }
     case kV0A:
     {
       if (V0Trigger(aEsd, kASide, kFALSE) == kV0BB)
-        return kTRUE;
+        decision = kTRUE;
       break;
     }
     case kV0C:
     {
       if (V0Trigger(aEsd, kCSide, kFALSE) == kV0BB)
-        return kTRUE;
+        decision = kTRUE;
       break;
     }
     case kV0OR:
     {
       if (V0Trigger(aEsd, kASide, kFALSE) == kV0BB || V0Trigger(aEsd, kCSide, kFALSE) == kV0BB)
-        return kTRUE;
+        decision = kTRUE;
       break;
     }
     case kV0AND:
     {
       if (V0Trigger(aEsd, kASide, kFALSE) == kV0BB && V0Trigger(aEsd, kCSide, kFALSE) == kV0BB)
-        return kTRUE;
+        decision = kTRUE;
       break;
     }
     case kV0ABG:
     {
       if (V0Trigger(aEsd, kASide, kFALSE) == kV0BG)
-        return kTRUE;
+        decision = kTRUE;
       break;
     }
     case kV0CBG:
     {
       if (V0Trigger(aEsd, kCSide, kFALSE) == kV0BG)
-        return kTRUE;
+        decision = kTRUE;
       break;
     }
     case kZDC:
     {
       if (ZDCTrigger(aEsd, kASide) || ZDCTrigger(aEsd, kCentralBarrel) || ZDCTrigger(aEsd, kCSide))
-        return kTRUE;
+        decision = kTRUE;
       break;
     }
     case kZDCA:
     {
       if (ZDCTrigger(aEsd, kASide))
-        return kTRUE;
+        decision = kTRUE;
       break;
     }
     case kZDCC:
     {
       if (ZDCTrigger(aEsd, kCSide))
-        return kTRUE;
+        decision = kTRUE;
       break;
     }
     case kFMDA:
     {
       if (FMDTrigger(aEsd, kASide))
-        return kTRUE;
+        decision = kTRUE;
       break;
     }
     case kFMDC:
     {
       if (FMDTrigger(aEsd, kCSide))
-        return kTRUE;
+        decision = kTRUE;
       break;
     }
     case kFPANY:
     {
       if (SPDGFOTrigger(aEsd, 0) || V0Trigger(aEsd, kASide, kFALSE) == kV0BB || V0Trigger(aEsd, kCSide, kFALSE) == kV0BB || ZDCTrigger(aEsd, kASide) || ZDCTrigger(aEsd, kCentralBarrel) || ZDCTrigger(aEsd, kCSide) || FMDTrigger(aEsd, kASide) || FMDTrigger(aEsd, kCSide))
-        return kTRUE;
+        decision = kTRUE;
       break;
     }
     case kNSD1:
     {
       if (SPDFiredChips(aEsd, 0) >= 5 || (V0Trigger(aEsd, kASide, kFALSE) == kV0BB && V0Trigger(aEsd, kCSide, kFALSE) == kV0BB))
-        return kTRUE;
+        decision = kTRUE;
        break;
     }
     case kMB1Prime:
@@ -409,7 +414,7 @@ Bool_t AliTriggerAnalysis::IsOfflineTriggerFired(const AliESDEvent* aEsd, Trigge
         count++;
       
       if (count >= 2)
-        return kTRUE;
+        decision = kTRUE;
         
       break;
     }
@@ -419,9 +424,29 @@ Bool_t AliTriggerAnalysis::IsOfflineTriggerFired(const AliESDEvent* aEsd, Trigge
     }
   }
   
-  return kFALSE;
-}
+  // hadron-level requirement
+  if (decision && (trigger & kOneParticle))
+  {
+    decision = kFALSE;
+    
+    const AliESDVertex* vertex = aEsd->GetPrimaryVertexSPD();
+    const AliMultiplicity* mult = aEsd->GetMultiplicity();
 
+    if (mult && vertex && vertex->GetNContributors() > 0 && (!vertex->IsFromVertexerZ() || vertex->GetDispersion() < 0.02) && TMath::Abs(vertex->GetZv()) < 5.5) 
+    {
+      for (Int_t i=0; i<mult->GetNumberOfTracklets(); ++i)
+      {
+        if (TMath::Abs(mult->GetEta(i)) < 1)
+        {
+          decision = kTRUE;
+          break;
+        }
+      }
+    }
+  }
+
+  return decision;
+}
 
 Bool_t AliTriggerAnalysis::IsTriggerClassFired(const AliESDEvent* aEsd, const Char_t* tclass) const 
 {
index 493b674662a24cdd8c0ce8f40072f5b013040710..847a9c327db0d8ef04d0bab04be35e6515d4ec04 100644 (file)
@@ -24,7 +24,7 @@ class TMap;
 class AliTriggerAnalysis : public TObject
 {
   public:
-    enum Trigger { kAcceptAll = 1, kMB1 = 2, kMB2, kMB3, kSPDGFO, kSPDGFOBits, kV0A, kV0C, kV0OR, kV0AND, kV0ABG, kV0CBG, kZDC, kZDCA, kZDCC, kFMDA, kFMDC, kFPANY, kNSD1, kMB1Prime, kStartOfFlags = 0x0100, kOfflineFlag = 0x8000 }; // MB1, MB2, MB3 definition from ALICE-INT-2005-025
+    enum Trigger { kAcceptAll = 1, kMB1 = 2, kMB2, kMB3, kSPDGFO, kSPDGFOBits, kV0A, kV0C, kV0OR, kV0AND, kV0ABG, kV0CBG, kZDC, kZDCA, kZDCC, kFMDA, kFMDC, kFPANY, kNSD1, kMB1Prime, kStartOfFlags = 0x0100, kOfflineFlag = 0x8000, kOneParticle = 0x16000 }; // MB1, MB2, MB3 definition from ALICE-INT-2005-025
     enum AliceSide { kASide = 1, kCSide, kCentralBarrel };
     enum V0Decision { kV0Invalid = -1, kV0Empty = 0, kV0BB, kV0BG, kV0Fake };