]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG2/FORWARD/analysis2/AliAODForwardMult.cxx
Add MCNSD flag to trigger mask
[u/mrichter/AliRoot.git] / PWG2 / FORWARD / analysis2 / AliAODForwardMult.cxx
index 414dbf2d5417189f3c2c6a5a72aadf5ed0033eba..a2aabdf24606462625897b8c4828626af51a61f7 100644 (file)
@@ -19,7 +19,8 @@
 #include <iostream>
 #include <TMath.h>
 #include <TObjString.h>
-
+#include <TObjArray.h>
+#include "AliLog.h"
 ClassImp(AliAODForwardMult)
 #ifdef DOXY_INPUT
 ; // For Emacs 
@@ -34,7 +35,8 @@ AliAODForwardMult::AliAODForwardMult()
     fHist(),
     fTriggers(0),
     fIpZ(fgkInvalidIpZ), 
-    fCentrality(-1)
+    fCentrality(-1),                           
+    fNClusters(0)
 {
   // 
   // Constructor 
@@ -48,7 +50,8 @@ AliAODForwardMult::AliAODForwardMult(Bool_t isMC)
          200, -4, 6, 20, 0, 2*TMath::Pi()),
     fTriggers(0),
     fIpZ(fgkInvalidIpZ), 
-    fCentrality(-1)
+    fCentrality(-1),                           
+    fNClusters(0)
 {
   // 
   // Constructor 
@@ -86,8 +89,9 @@ AliAODForwardMult::Clear(Option_t* option)
   //  option   Passed to TH1::Reset 
   // 
   fHist.Reset(option);
-  fTriggers = 0;
-  fIpZ      = fgkInvalidIpZ;
+  fTriggers  = 0;
+  fIpZ       = fgkInvalidIpZ;
+  fNClusters = 0;
 }
 //____________________________________________________________________
 void
@@ -159,13 +163,16 @@ AliAODForwardMult::Browse(TBrowser* b)
   static TObjString ipz;
   static TObjString trg;
   static TObjString cnt;
+  static TObjString ncl;
   ipz = Form("ip_z=%fcm", fIpZ);
   trg = GetTriggerString(fTriggers);
   cnt = Form("%+6.1f%%", fCentrality);
+  ncl = Form("%d clusters", fNClusters);
   b->Add(&fHist);
   b->Add(&ipz);
   b->Add(&trg);
   b->Add(&cnt);
+  b->Add(&ncl);
 }
 
 //____________________________________________________________________
@@ -188,6 +195,7 @@ AliAODForwardMult::GetTriggerString(UInt_t mask)
   if ((mask & kC)           != 0x0) trg.Append("C ");
   if ((mask & kE)           != 0x0) trg.Append("E ");
   if ((mask & kMCNSD)       != 0x0) trg.Append("MCNSD ");
+  if ((mask & kNClusterGt0) != 0x0) trg.Append("NCluster>0 ");
   return trg.Data();
 }
   
@@ -222,6 +230,8 @@ AliAODForwardMult::MakeTriggerHistogram(const char* name)
   ret->GetXaxis()->SetBinLabel(kBinNSD,         "NSD");
   ret->GetXaxis()->SetBinLabel(kBinMCNSD,       "NSD (MC truth)");
   ret->GetXaxis()->SetBinLabel(kBinPileUp,      "w/Pileup");
+  ret->GetXaxis()->SetBinLabel(kBinOffline,     "w/Offline");
+  ret->GetXaxis()->SetBinLabel(kBinNClusterGt0, "w/N_{cluster}>1");
   ret->GetXaxis()->SetBinLabel(kWithVertex,     "w/Vertex");
   ret->GetXaxis()->SetBinLabel(kWithTrigger,    "w/Selected trigger");
   ret->GetXaxis()->SetBinLabel(kAccepted,       "Accepted by cut");
@@ -230,6 +240,34 @@ AliAODForwardMult::MakeTriggerHistogram(const char* name)
 
   return ret;
 }
+//____________________________________________________________________
+UInt_t 
+AliAODForwardMult::MakeTriggerMask(const char* what)
+{
+  UShort_t    trgMask = 0;
+  TString     trgs(what);
+  trgs.ToUpper();
+  TObjString* trg;
+  TIter       next(trgs.Tokenize(" ,|"));
+  while ((trg = static_cast<TObjString*>(next()))) { 
+    TString s(trg->GetString());
+    if      (s.IsNull()) continue;
+    if      (s.CompareTo("INEL")  == 0) trgMask |= AliAODForwardMult::kInel;
+    else if (s.CompareTo("INEL>0")== 0) trgMask |= AliAODForwardMult::kInelGt0;
+    else if (s.CompareTo("NSD")   == 0) trgMask |= AliAODForwardMult::kNSD;
+    else if (s.CompareTo("MCNSD") == 0) trgMask |= AliAODForwardMult::kMCNSD;
+    else if (s.CompareTo("B")     == 0) trgMask |= AliAODForwardMult::kB;
+    else if (s.CompareTo("A")     == 0) trgMask |= AliAODForwardMult::kA;
+    else if (s.CompareTo("C")     == 0) trgMask |= AliAODForwardMult::kC;
+    else if (s.CompareTo("E")     == 0) trgMask |= AliAODForwardMult::kE;
+    else if (s.CompareTo("NCLUSTER>0") == 0) 
+      trgMask |= AliAODForwardMult::kNClusterGt0;
+    else 
+      AliWarningGeneral("MakeTriggerMask", 
+                       Form("Unknown trigger %s", s.Data()));
+  }
+  return trgMask;
+}
 
 //____________________________________________________________________
 Bool_t
@@ -266,29 +304,32 @@ AliAODForwardMult::CheckEvent(Int_t    triggerMask,
 
   if (hist) { 
     hist->AddBinContent(kBinAll);
-    if (IsTriggerBits(kB))        hist->AddBinContent(kBinB);
-    if (IsTriggerBits(kA))        hist->AddBinContent(kBinA);
-    if (IsTriggerBits(kC))        hist->AddBinContent(kBinC);
-    if (IsTriggerBits(kE))        hist->AddBinContent(kBinE);
-    if (IsTriggerBits(kInel))     hist->AddBinContent(kBinInel);
-    if (IsTriggerBits(kInelGt0))  hist->AddBinContent(kBinInelGt0);
-    if (IsTriggerBits(kNSD))      hist->AddBinContent(kBinNSD);
-    if (IsTriggerBits(kPileUp))   hist->AddBinContent(kBinPileUp);
-    if (IsTriggerBits(kMCNSD))    hist->AddBinContent(kBinMCNSD);
+    if (IsTriggerBits(kB|triggerMask))  hist->AddBinContent(kBinB);
+    if (IsTriggerBits(kA|triggerMask))  hist->AddBinContent(kBinA);
+    if (IsTriggerBits(kC|triggerMask))  hist->AddBinContent(kBinC);
+    if (IsTriggerBits(kE|triggerMask))  hist->AddBinContent(kBinE);
+    if (IsTriggerBits(kB|kInel))        hist->AddBinContent(kBinInel);
+    if (IsTriggerBits(kB|kInelGt0))     hist->AddBinContent(kBinInelGt0);
+    if (IsTriggerBits(kB|kNSD))         hist->AddBinContent(kBinNSD);
+    if (IsTriggerBits(kPileUp))         hist->AddBinContent(kBinPileUp);
+    if (IsTriggerBits(kMCNSD))          hist->AddBinContent(kBinMCNSD);
+    if (IsTriggerBits(kOffline))        hist->AddBinContent(kBinOffline);
+    if (IsTriggerBits(kNClusterGt0))    hist->AddBinContent(kBinNClusterGt0);
   }
   // Check if we have an event of interest. 
-  if (!IsTriggerBits(triggerMask)) return false;
+  Int_t mask = triggerMask; //|kB
+  if (!IsTriggerBits(mask)) return false;
   
   // Check for pileup
   if (IsTriggerBits(kPileUp)) return false;
   if (hist) hist->AddBinContent(kWithTrigger);
   
   // Check that we have a valid vertex
-  if (!HasIpZ()) return false;
+  if (vzMin < vzMax && !HasIpZ()) return false;
   if (hist) hist->AddBinContent(kWithVertex);
 
   // Check that vertex is within cuts 
-  if (!InRange(vzMin, vzMax)) return false;
+  if (vzMin < vzMax && !InRange(vzMin, vzMax)) return false;
   if (hist) hist->AddBinContent(kAccepted);
   
   return true;