]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
added ZDC trigger
authorjgrosseo <jgrosseo@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sat, 14 Nov 2009 15:36:59 +0000 (15:36 +0000)
committerjgrosseo <jgrosseo@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sat, 14 Nov 2009 15:36:59 +0000 (15:36 +0000)
PWG0/AliOfflineTrigger.cxx
PWG0/AliOfflineTrigger.h
PWG0/AliPWG0Helper.cxx
PWG0/AliPWG0Helper.h
PWG0/trigger/AliTriggerTask.cxx
PWG0/trigger/AliTriggerTask.h
PWG0/trigger/run.C

index 09a3463f0cd8e1d7625f42a776529ecb82b2bf1f..5337311c3a5de37c377fd634712913e39e03a08d 100644 (file)
@@ -8,6 +8,7 @@
 
 #include <AliMultiplicity.h>
 #include <AliESDVZERO.h>
+#include <AliESDZDC.h>
 
 ClassImp(AliOfflineTrigger)
 
@@ -67,6 +68,12 @@ Bool_t AliOfflineTrigger::IsEventTriggered(const AliESDEvent* aEsd, AliPWG0Helpe
         return kTRUE;
       break;
     }
+    case AliPWG0Helper::kZDC:
+    {
+      if (ZDCTrigger(aEsd, kASide) || ZDCTrigger(aEsd, kCentralBarrel) || ZDCTrigger(aEsd, kCSide))
+        return kTRUE;
+      break;
+    }
     case AliPWG0Helper::kZDCA:
     {
       if (ZDCTrigger(aEsd, kASide))
@@ -140,11 +147,33 @@ Bool_t AliOfflineTrigger::V0Trigger(const AliESDEvent* aEsd, AliceSide side) con
   return kFALSE;  
 }
 
-Bool_t AliOfflineTrigger::ZDCTrigger(const AliESDEvent* /* aEsd */, AliceSide /* side */) const
+Bool_t AliOfflineTrigger::ZDCTrigger(const AliESDEvent* aEsd, AliceSide side) const
 {
   // Returns if ZDC triggered
   
-  AliFatal("Not implemented");
+  AliESDZDC* zdcData = aEsd->GetESDZDC();
+  if (!zdcData)
+  {
+    AliError("AliESDZDC not available");
+    return kFALSE;
+  }
+  
+  UInt_t quality = zdcData->GetESDQuality();
+  
+  // from Nora's presentation, general first physics meeting 16.10.09
+  static UInt_t zpc  = 0x20;
+  static UInt_t znc  = 0x10;
+  static UInt_t zem1 = 0x08;
+  static UInt_t zem2 = 0x04;
+  static UInt_t zpa  = 0x02;
+  static UInt_t zna  = 0x01;
+  
+  if (side == kASide && ((quality & zpa) || (quality & zna)))
+    return kTRUE;
+  if (side == kCentralBarrel && ((quality & zem1) || (quality & zem2)))
+    return kTRUE;
+  if (side == kCSide && ((quality & zpc) || (quality & znc)))
+    return kTRUE;
   
   return kFALSE;
 }
index c7f314140299b7729de545cd120e0334b1c2fecd..08cb354c46c9bcd6201dfa933a451c65d81caf3e 100644 (file)
@@ -11,7 +11,7 @@ class AliESDEvent;
 class AliOfflineTrigger : public TObject
 {
   public:
-    enum AliceSide { kASide = 1, kCSide };
+    enum AliceSide { kASide = 1, kCSide, kCentralBarrel };
     
     AliOfflineTrigger();
     virtual ~AliOfflineTrigger() {}
index ab7b6a56ff38b0327fffe9dfc5f967c4a2ee3309..ea2acbd5e484700f28a9ed1b5b2ecdce2b48e21d 100644 (file)
@@ -599,6 +599,7 @@ const char* AliPWG0Helper::GetTriggerName(Trigger trigger)
     case kSPDGFO : str = "SPD GFO"; break;
     case kV0A : str = "V0 A"; break;
     case kV0C : str = "V0 C"; break;
+    case kZDC : str = "ZDC"; break;
     case kZDCA : str = "ZDC A"; break;
     case kZDCC : str = "ZDC C"; break;
     case kFMD : str = "FMD"; break;
index 7fc056bf148eae02e10cc4d92020a986f39e4832..10bb19d213d9fcd519d4540edf6363385851de4b 100644 (file)
@@ -22,7 +22,7 @@ class AliOfflineTrigger;
 class AliPWG0Helper : public TObject
 {
   public:
-    enum Trigger { kAcceptAll = 1, kMB1 = 2, kMB2, kMB3, kSPDGFO, kV0A, kV0C, kZDCA, kZDCC, kFMD, kStartOfFlags = 0x0100, kOfflineFlag = 0x8000 }; // MB1, MB2, MB3 definition from ALICE-INT-2005-025
+    enum Trigger { kAcceptAll = 1, kMB1 = 2, kMB2, kMB3, kSPDGFO, kV0A, kV0C, kZDC, kZDCA, kZDCC, kFMD, kStartOfFlags = 0x0100, kOfflineFlag = 0x8000 }; // MB1, MB2, MB3 definition from ALICE-INT-2005-025
     enum AnalysisMode { kInvalid = -1, kSPD = 0x1, kTPC = 0x2, kTPCITS = 0x4, kFieldOn = 0x8 };
     // in case we want to use bitmaps...
     enum MCProcessType { kInvalidProcess = -1, kND = 0x1, kDD = 0x2, kSD = 0x4 };
index 7c96c1945a06a359b0942ba34288376e9c9210cd..1ff9da7d3ac70328e903db6389ff2f827daba82f 100644 (file)
@@ -23,6 +23,8 @@ AliTriggerTask::AliTriggerTask(const char* opt) :
   fESD(0),
   fOutput(0),
   fOption(opt),
+  fStartTime(0),
+  fEndTime(0),
   fNTriggers(0),
   fTriggerList(0),
   fStats(0)
@@ -35,9 +37,9 @@ AliTriggerTask::AliTriggerTask(const char* opt) :
   DefineInput(0, TChain::Class());
   DefineOutput(0, TList::Class());
   
-  fNTriggers = 6;
+  fNTriggers = 10;
   
-  static AliPWG0Helper::Trigger triggerList[] = { AliPWG0Helper::kMB1, AliPWG0Helper::kMB2, AliPWG0Helper::kMB3, AliPWG0Helper::kSPDGFO, AliPWG0Helper::kV0A, AliPWG0Helper::kV0C };
+  static AliPWG0Helper::Trigger triggerList[] = { AliPWG0Helper::kAcceptAll, AliPWG0Helper::kMB1, AliPWG0Helper::kMB2, AliPWG0Helper::kMB3, AliPWG0Helper::kSPDGFO, AliPWG0Helper::kV0A, AliPWG0Helper::kV0C, AliPWG0Helper::kZDC, AliPWG0Helper::kZDCA, AliPWG0Helper::kZDCC };
   fTriggerList = triggerList;
   
   fStats = new TH1*[fNTriggers];
@@ -90,10 +92,16 @@ void AliTriggerTask::CreateOutputObjects()
 
   fOutput = new TList;
   fOutput->SetOwner();
+  
+  if (fStartTime == fEndTime)
+    AliWarning("Start and endtime not set. Automatic binning will be used. This does not work in parallel systems");
 
+  Int_t nBins = 1000;
+  if (fEndTime - fStartTime > 0)
+    nBins = fEndTime - fStartTime;
   for (Int_t i=0; i<fNTriggers; i++)
   {
-    fStats[i] = new TH1F(Form("fStats_%d", i), Form("%s;time;counts", AliPWG0Helper::GetTriggerName(fTriggerList[i])), 100, 0, 0);
+    fStats[i] = new TH1F(Form("fStats_%d", i), Form("%s;time;counts", AliPWG0Helper::GetTriggerName(fTriggerList[i])), nBins, 0, fEndTime - fStartTime);
     fOutput->Add(fStats[i]);
   }
 }
@@ -128,7 +136,7 @@ void AliTriggerTask::Exec(Option_t*)
 
   //Printf("Trigger classes: %s:", fESD->GetFiredTriggerClasses().Data());
   
-  UInt_t timeStamp = fESD->GetTimeStamp() - 1257961181;
+  UInt_t timeStamp = fESD->GetTimeStamp() - fStartTime;
   //Printf("%d", timeStamp);
   
   for (Int_t i = 0; i < fNTriggers; i++)
@@ -165,14 +173,28 @@ void AliTriggerTask::Terminate(Option_t *)
   fout->Write();
   fout->Close();
   
+  Int_t nX = (Int_t) TMath::Sqrt(fNTriggers);
+  Int_t nY = nX;
+  
+  while (nX * nY < fNTriggers)
+  {
+    if (nX == nY)
+      nX++;
+    else
+      nY++;
+  }
+  
   TCanvas* c = new TCanvas("c", "c", 800, 800);
-  c->Divide((Int_t) TMath::Sqrt(fNTriggers) + 1, (Int_t) TMath::Sqrt(fNTriggers));
+  c->Divide(nX, nY);
+  
+  Printf("+++++++++ TRIGGER STATS:");
   
   for (Int_t i=0; i<fNTriggers; i++)
     if (fStats[i])
     {
       c->cd(i+1);
       fStats[i]->Draw();
+      Printf("%s: %d triggers", AliPWG0Helper::GetTriggerName(fTriggerList[i]), (UInt_t) fStats[i]->Integral());
     }
 
   Printf("Writting result to trigger.root");
index de3bc5511ea6e73e83d46f13b43523791ab4f1b2..15ad63b41df1c86638632a889845faba7e150e75 100644 (file)
@@ -20,12 +20,15 @@ class AliTriggerTask : public AliAnalysisTask {
     virtual void   Terminate(Option_t*);
 
     void SetOption(const char* opt) { fOption = opt; }
+    void SetTimes(UInt_t start, UInt_t end) { fStartTime = start; fEndTime = end; }
 
  protected:
     AliESDEvent *fESD;    //! ESD object
     TList* fOutput;                  //! list send on output slot 0
 
     TString fOption;      // option string
+    UInt_t fStartTime;    // run start time
+    UInt_t fEndTime;      // run end time
 
     Int_t fNTriggers;     //! number triggers
     AliPWG0Helper::Trigger* fTriggerList;  //! list of triggers
index 6cc36d40be8f26613b20095d4bc762648abf6100..3202c6b7fff5abfcc450cb060f504811f7590a49 100644 (file)
@@ -19,13 +19,41 @@ void Load(const char* taskName, Bool_t debug)
     AliLog::SetClassDebugLevel(taskName, AliLog::kWarning);
 }
 
-void run(const Char_t* data, Int_t nRuns=20, Int_t offset=0, Bool_t aDebug = kFALSE, Int_t aProof = kFALSE, const char* option = "")
+void GetTimes(UInt_t run, UInt_t* startTime = 0, UInt_t* endTime = 0)
+{
+  gSystem->Load("libXMLParser");
+  gSystem->Load("libXMLIO");
+  gSystem->Load("libCDB");
+  gSystem->Load("libSTEER");
+  
+  AliCDBManager * man = AliCDBManager::Instance();
+  man->SetDefaultStorage("raw://");
+  man->SetRun(run);
+  AliCDBPath cdb("GRP", "GRP", "Data");
+  obj = man->Get(cdb);
+  grp = (AliGRPObject*) obj->GetObject();
+  
+  if (startTime)
+    *startTime = grp->GetTimeStart();
+  if (endTime)
+    *endTime = grp->GetTimeEnd();
+  
+  Printf("Got start and endtime from OCDB: %d, %d", grp->GetTimeStart(), grp->GetTimeEnd());
+}
+
+void run(const Char_t* data, Int_t nRuns=20, Int_t offset=0, Bool_t aDebug = kFALSE, Int_t aProof = kFALSE, UInt_t startTime = 0, UInt_t endTime = 0, const char* option = "")
 {
   // aProof option: 0 no proof
   //                1 proof with chain
   //                2 proof with dataset
   //
   // option is passed to the task(s)
+
+/*
+ .x run.C("/PWG0/jgrosseo/ERP_run98097", -1, 0, kFALSE, 2, 1258045012, 1258045458)
+ .x run.C("/PWG0/jgrosseo/ERP_run98576", -1, 0, kFALSE, 2, 1258123911, 1258124103)
+ .x run.C("/PWG0/jgrosseo/ERP_run98569", -1, 0, kFALSE, 2, 1258122187, 1258122524)
+*/
   
   if (nRuns < 0)
     nRuns = 1234567890;
@@ -71,6 +99,14 @@ void run(const Char_t* data, Int_t nRuns=20, Int_t offset=0, Bool_t aDebug = kFA
     gSystem->Load("libANALYSISalice");
     gSystem->Load("libPWG0base");
   }
+  
+  if (startTime == endTime && startTime > 0)
+  {
+    // get times from OCDB, startTime must be run number
+
+    // WARNING only works if your par files loaded above are compatible with the libraries loaded here...
+    GetTimes(startTime, &startTime, &endTime);
+  }
 
   // Create the analysis manager
   mgr = new AliAnalysisManager;
@@ -85,6 +121,7 @@ void run(const Char_t* data, Int_t nRuns=20, Int_t offset=0, Bool_t aDebug = kFA
   Load("AliTriggerTask", aDebug);
   TString optStr(option);
   task = new AliTriggerTask(optStr);
+  task->SetTimes(startTime, endTime);
 
   mgr->AddTask(task);