Adding default HLT trigger menu object to AliRoot CDB and macro for generating it.
authoraszostak <aszostak@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 30 Jun 2009 10:07:55 +0000 (10:07 +0000)
committeraszostak <aszostak@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 30 Jun 2009 10:07:55 +0000 (10:07 +0000)
Global trigger now reads the OCDB trigger menu entry if the "-config" option is not used.
Updating the default dHLT CDB entries.

HLT/MUON/macros/CreateDefaultCDBEntries.C
HLT/trigger/AliHLTGlobalTriggerComponent.cxx
HLT/trigger/AliHLTGlobalTriggerComponent.h
HLT/trigger/CreateTriggerMenuCDBEntry.C [new file with mode: 0644]
OCDB/HLT/ConfigHLT/HLTGlobalTrigger/Run0_999999999_v0_s0.root [new file with mode: 0644]
OCDB/HLT/ConfigMUON/DecisionComponent/Run0_999999999_v0_s0.root
OCDB/HLT/ConfigMUON/HitReconstructor/Run0_999999999_v0_s0.root
OCDB/HLT/ConfigMUON/MansoTrackerFSM/Run0_999999999_v0_s0.root
OCDB/HLT/ConfigMUON/TriggerReconstructor/Run0_999999999_v0_s0.root

index 9040bec..9903cdb 100644 (file)
@@ -51,7 +51,30 @@ using std::endl;
  * Generates default CDB entries in the given CDB storage (local by default)
  * \param cdbPath  The path to the local storage.
  */
-void CreateDefaultCDBEntries(const char* cdbPath = "local://$ALICE_ROOT/OCDB")
+void CreateDefaultCDBEntries(
+               const char* cdbPath = "local://$ALICE_ROOT/OCDB",
+               float zmiddle = -975.,
+               float bfieldintegral = -3.,
+               int dccut = 50,
+               float roiParamAchamber7 = 0.020,
+               float roiParamBchamber7 = 2.2,
+               float roiParamAchamber8 = 0.023,
+               float roiParamBchamber8 = 2.3,
+               float roiParamAchamber9 = 0.049,
+               float roiParamBchamber9 = 4.8,
+               float roiParamAchamber10 = 0.045,
+               float roiParamBchamber10 = 4.2,
+               float lowptcut = 0.779,
+               float highptcut = 1.755,
+               float lowmasscut = 1.5,
+               float highmasscut = 6.,
+               float chamber7postion = -1276.5,
+               float chamber8postion = -1307.5,
+               float chamber9postion = -1406.6,
+               float chamber10postion = -1437.6,
+               float chamber11postion = -1603.5,
+               float chamber13postion = -1703.5
+       )
 {
        // Setup the CDB default storage and run number.
        AliCDBManager* cdbManager = AliCDBManager::Instance();
@@ -68,7 +91,7 @@ void CreateDefaultCDBEntries(const char* cdbPath = "local://$ALICE_ROOT/OCDB")
                return;
        }
        
-       Int_t verison = 0;
+       Int_t version = 0;
        Int_t firstRun = 0;
        Int_t lastRun = AliCDBRunRange::Infinity();
        
@@ -80,11 +103,14 @@ void CreateDefaultCDBEntries(const char* cdbPath = "local://$ALICE_ROOT/OCDB")
        // Create and store the configuration parameters for the trigger reconstructor.
        params = new TMap;
        params->SetOwner(kTRUE);
-       params->Add(new TObjString("zmiddle"), new TObjString("-975"));
-       params->Add(new TObjString("bfieldintegral"), new TObjString("3"));
+       char valstr[1024];
+       sprintf(valstr, "%8.8f", zmiddle);
+       params->Add(new TObjString("zmiddle"), new TObjString(valstr));
+       sprintf(valstr, "%8.8f", bfieldintegral);
+       params->Add(new TObjString("bfieldintegral"), new TObjString(valstr));
        
        path = AliHLTMUONConstants::TriggerReconstructorCDBPath();
-       id = AliCDBId(path, firstRun, lastRun, verison);
+       id = AliCDBId(path, firstRun, lastRun, version);
        metaData = new AliCDBMetaData();
        metaData->SetResponsible("dimuon HLT");
        metaData->SetComment("Trigger reconstructor configuration parameters for dimuon HLT.");
@@ -93,10 +119,11 @@ void CreateDefaultCDBEntries(const char* cdbPath = "local://$ALICE_ROOT/OCDB")
        // Create and store the configuration parameters for the hit reconstructor.
        params = new TMap;
        params->SetOwner(kTRUE);
-       params->Add(new TObjString("dccut"), new TObjString("50"));
+       sprintf(valstr, "%d", dccut);
+       params->Add(new TObjString("dccut"), new TObjString(valstr));
        
        path = AliHLTMUONConstants::HitReconstructorCDBPath();
-       id = AliCDBId(path, firstRun, lastRun, verison);
+       id = AliCDBId(path, firstRun, lastRun, version);
        metaData = new AliCDBMetaData();
        metaData->SetResponsible("dimuon HLT");
        metaData->SetComment("Hit reconstructor DC cut parameter for dimuon HLT.");
@@ -105,25 +132,41 @@ void CreateDefaultCDBEntries(const char* cdbPath = "local://$ALICE_ROOT/OCDB")
        // Create and store the configuration parameters for the Manso tracker.
        params = new TMap;
        params->SetOwner(kTRUE);
-       params->Add(new TObjString("zmiddle"), new TObjString("-975"));
-       params->Add(new TObjString("bfieldintegral"), new TObjString("3"));
-       params->Add(new TObjString("roi_paramA_chamber7"), new TObjString("0.016"));
-       params->Add(new TObjString("roi_paramB_chamber7"), new TObjString("2.0"));
-       params->Add(new TObjString("roi_paramA_chamber8"), new TObjString("0.016"));
-       params->Add(new TObjString("roi_paramB_chamber8"), new TObjString("2.0"));
-       params->Add(new TObjString("roi_paramA_chamber9"), new TObjString("0.02"));
-       params->Add(new TObjString("roi_paramB_chamber9"), new TObjString("3.0"));
-       params->Add(new TObjString("roi_paramA_chamber10"), new TObjString("0.02"));
-       params->Add(new TObjString("roi_paramB_chamber10"), new TObjString("3.0"));
-       params->Add(new TObjString("chamber7postion"), new TObjString("-1274.5"));
-       params->Add(new TObjString("chamber8postion"), new TObjString("-1305.5"));
-       params->Add(new TObjString("chamber9postion"), new TObjString("-1408.6"));
-       params->Add(new TObjString("chamber10postion"), new TObjString("-1439.6"));
-       params->Add(new TObjString("chamber11postion"), new TObjString("-1603.5"));
-       params->Add(new TObjString("chamber13postion"), new TObjString("-1703.5"));
+       sprintf(valstr, "%8.8f", zmiddle);
+       params->Add(new TObjString("zmiddle"), new TObjString(valstr));
+       sprintf(valstr, "%8.8f", bfieldintegral);
+       params->Add(new TObjString("bfieldintegral"), new TObjString(valstr));
+       sprintf(valstr, "%8.8f", roiParamAchamber7);
+       params->Add(new TObjString("roiParamAchamber7"), new TObjString(valstr));
+       sprintf(valstr, "%8.8f", roiParamBchamber7);
+       params->Add(new TObjString("roiParamBchamber7"), new TObjString(valstr));
+       sprintf(valstr, "%8.8f", roiParamAchamber8);
+       params->Add(new TObjString("roiParamAchamber8"), new TObjString(valstr));
+       sprintf(valstr, "%8.8f", roiParamBchamber8);
+       params->Add(new TObjString("roiParamBchamber8"), new TObjString(valstr));
+       sprintf(valstr, "%8.8f", roiParamAchamber9);
+       params->Add(new TObjString("roiParamAchamber9"), new TObjString(valstr));
+       sprintf(valstr, "%8.8f", roiParamBchamber9);
+       params->Add(new TObjString("roiParamBchamber9"), new TObjString(valstr));
+       sprintf(valstr, "%8.8f", roiParamAchamber10);
+       params->Add(new TObjString("roiParamAchamber10"), new TObjString(valstr));
+       sprintf(valstr, "%8.8f", roiParamBchamber10);
+       params->Add(new TObjString("roiParamBchamber10"), new TObjString(valstr));
+       sprintf(valstr, "%8.8f", chamber7postion);
+       params->Add(new TObjString("chamber7postion"), new TObjString(valstr));
+       sprintf(valstr, "%8.8f", chamber8postion);
+       params->Add(new TObjString("chamber8postion"), new TObjString(valstr));
+       sprintf(valstr, "%8.8f", chamber9postion);
+       params->Add(new TObjString("chamber9postion"), new TObjString(valstr));
+       sprintf(valstr, "%8.8f", chamber10postion);
+       params->Add(new TObjString("chamber10postion"), new TObjString(valstr));
+       sprintf(valstr, "%8.8f", chamber11postion);
+       params->Add(new TObjString("chamber11postion"), new TObjString(valstr));
+       sprintf(valstr, "%8.8f", chamber13postion);
+       params->Add(new TObjString("chamber13postion"), new TObjString(valstr));
        
        path = AliHLTMUONConstants::MansoTrackerFSMCDBPath();
-       id = AliCDBId(path, firstRun, lastRun, verison);
+       id = AliCDBId(path, firstRun, lastRun, version);
        metaData = new AliCDBMetaData();
        metaData->SetResponsible("dimuon HLT");
        metaData->SetComment("Manso tracker FSM component configuration parameters for dimuon HLT.");
@@ -132,13 +175,17 @@ void CreateDefaultCDBEntries(const char* cdbPath = "local://$ALICE_ROOT/OCDB")
        // Create and store the configuration parameters for the trigger decision cuts.
        params = new TMap;
        params->SetOwner(kTRUE);
-       params->Add(new TObjString("lowptcut"), new TObjString("1"));
-       params->Add(new TObjString("highptcut"), new TObjString("2"));
-       params->Add(new TObjString("lowmasscut"), new TObjString("2.5"));
-       params->Add(new TObjString("highmasscut"), new TObjString("7"));
+       sprintf(valstr, "%8.8f", lowptcut);
+       params->Add(new TObjString("lowptcut"), new TObjString(valstr));
+       sprintf(valstr, "%8.8f", highptcut);
+       params->Add(new TObjString("highptcut"), new TObjString(valstr));
+       sprintf(valstr, "%8.8f", lowmasscut);
+       params->Add(new TObjString("lowmasscut"), new TObjString(valstr));
+       sprintf(valstr, "%8.8f", highmasscut);
+       params->Add(new TObjString("highmasscut"), new TObjString(valstr));
        
        path = AliHLTMUONConstants::DecisionComponentCDBPath();
-       id = AliCDBId(path, firstRun, lastRun, verison);
+       id = AliCDBId(path, firstRun, lastRun, version);
        metaData = new AliCDBMetaData();
        metaData->SetResponsible("dimuon HLT");
        metaData->SetComment("Trigger decision cuts for dimuon HLT.");
index 1c60c43..df5cea1 100644 (file)
@@ -1,4 +1,4 @@
-// $Id:$
+// $Id$
 /**************************************************************************
  * This file is property of and copyright by the ALICE HLT Project        *
  * ALICE Experiment at CERN, All rights reserved.                         *
@@ -28,6 +28,9 @@
 #include "AliHLTGlobalTrigger.h"
 #include "AliHLTGlobalTriggerConfig.h"
 #include "AliHLTTriggerMenu.h"
+#include "AliCDBManager.h"
+#include "AliCDBStorage.h"
+#include "AliCDBEntry.h"
 #include "TUUID.h"
 #include "TROOT.h"
 #include "TRegexp.h"
@@ -40,6 +43,8 @@
 
 ClassImp(AliHLTGlobalTriggerComponent)
 
+const char* AliHLTGlobalTriggerComponent::fgkTriggerMenuCDBPath = "HLT/ConfigHLT/HLTGlobalTrigger";
+
 
 AliHLTGlobalTriggerComponent::AliHLTGlobalTriggerComponent() :
        AliHLTTrigger(),
@@ -172,6 +177,40 @@ Int_t AliHLTGlobalTriggerComponent::DoInit(int argc, const char** argv)
     menu = AliHLTGlobalTriggerConfig::Menu();
   }
   
+  // Try load the trigger menu from the CDB if it is not loaded yet with the
+  // -config option
+  if (menu == NULL and AliCDBManager::Instance() != NULL)
+  {
+    AliCDBStorage* store = AliCDBManager::Instance()->GetDefaultStorage();
+    if (store == NULL)
+    {
+      HLTError("Could not get the the default storage for the CDB.");
+      return -EIO;
+    }
+    Int_t version = store->GetLatestVersion(fgkTriggerMenuCDBPath, GetRunNo());
+    Int_t subVersion = store->GetLatestSubVersion(fgkTriggerMenuCDBPath, GetRunNo(), version);
+    AliCDBEntry* entry = AliCDBManager::Instance()->Get(fgkTriggerMenuCDBPath, GetRunNo(), version, subVersion);
+    if (entry == NULL)
+    {
+      HLTError("Could not get the CDB entry for \"%s\".", fgkTriggerMenuCDBPath);
+      return -EIO;
+    }
+    TObject* obj = entry->GetObject();
+    if (obj == NULL)
+    {
+      HLTError("Configuration object for \"%s\" is missing.", fgkTriggerMenuCDBPath);
+      return -ENOENT;
+    }
+    if (obj->IsA() != AliHLTTriggerMenu::Class())
+    {
+      HLTError("Wrong type for configuration object in \"%s\". Found a %s but we expect a AliHLTTriggerMenu.",
+               fgkTriggerMenuCDBPath, obj->ClassName()
+      );
+      return -EPROTO;
+    }
+    menu = dynamic_cast<AliHLTTriggerMenu*>(obj);
+  }
+  
   if (menu == NULL)
   {
     HLTError("No trigger menu configuration found or specified.");
@@ -689,6 +728,7 @@ int AliHLTGlobalTriggerComponent::BuildSymbolList(const AliHLTTriggerMenu* menu,
   }
   
   TRegexp exp("[_a-zA-Z][_a-zA-Z0-9]*");
+  TRegexp hexexp("x[a-fA-F0-9]+");
   for (UInt_t i = 0; i < menu->NumberOfItems(); i++)
   {
     const AliHLTTriggerMenuItem* item = menu->Item(i);
@@ -699,9 +739,28 @@ int AliHLTGlobalTriggerComponent::BuildSymbolList(const AliHLTTriggerMenu* menu,
       Ssiz_t length = 0;
       Ssiz_t pos = exp.Index(str, &length, start);
       if (pos == kNPOS) break;
-      TString s = str(pos, length);
       start = pos+length;
       
+      // Check if there is a numerical character before the found
+      // regular expression. If so, then the symbol is not a valid one
+      // and should be skipped.
+      if (pos > 0)
+      {
+        bool notValid = false;
+        switch (str[pos-1])
+        {
+        case '0': case '1': case '2': case '3': case '4':
+        case '5': case '6': case '7': case '8': case '9':
+          notValid = true;
+          break;
+        default:
+          notValid = false;
+          break;
+        }
+        if (notValid) continue;
+      }
+      TString s = str(pos, length);
+      
       if (s == "and" or s == "and_eq" or s == "bitand" or s == "bitor" or
           s == "compl" or s == "not" or s == "not_eq" or s == "or" or
           s == "or_eq" or s == "xor" or s == "xor_eq" or s == "true" or
@@ -711,7 +770,7 @@ int AliHLTGlobalTriggerComponent::BuildSymbolList(const AliHLTTriggerMenu* menu,
         // Ignore iso646.h and other keywords.
         continue;
       }
-      
+
       if (FindSymbol(s.Data(), list) == -1)
       {
         AliHLTTriggerMenuSymbol newSymbol;
index 76b4df0..8043879 100644 (file)
@@ -1,5 +1,5 @@
 //-*- Mode: C++ -*-
-// $Id:$
+// $Id$
 #ifndef ALIHLTGLOBALTRIGGERCOMPONENT_H
 #define ALIHLTGLOBALTRIGGERCOMPONENT_H
 /* This file is property of and copyright by the ALICE HLT Project        *
@@ -58,16 +58,26 @@ class TClonesArray;
  * Configuration by component arguments.
  *
  * <h2>Default CDB entries:</h2>
- * TODO
+ * HLT/ConfigHLT/HLTGlobalTrigger - Contains the global trigger menu.
  *
  * <h2>Performance:</h2>
- * TODO
+ * This is a linear function of the number of input triggers (AliHLTTrigger) that
+ * need to be processed.
+ * For a modest trigger menu configurations the processing time per event should
+ * be on the order of a few milliseconds.
  *
  * <h2>Memory consumption:</h2>
- * TODO
+ * Memory consumption is minimal. It should be on the order of 2 or 3 MBytes.
  *
  * <h2>Output size:</h2>
- * TODO
+ * This will depend almost linearly on the number of intput triggers and summary
+ * data objects used. Thus, for every trigger (AliHLTTrigger object) specified
+ * in the trigger menu the output size will require about 1 kBytes.
+ * Then for every summary data object (i.e. TObject symbol defined in the trigger
+ * menu configuration) one will need an extra few kBytes, depending on the size
+ * of the summary objects.
+ * In total one would expect no more than a MByte output size for a large trigger
+ * configuration and typically only a few kBytes for a small or optimised one.
  *
  * \ingroup alihlt_trigger_components
  */
@@ -178,6 +188,8 @@ class AliHLTGlobalTriggerComponent : public AliHLTTrigger
   AliHLTGlobalTrigger* fTrigger;  //! Trigger object which implements the global trigger menu.
   bool fDebugMode;  //! Indicates if the generated global trigger class should be in debug mode.
   
+  static const char* fgkTriggerMenuCDBPath; //! The path string to read the trigger menu from the CDB.
+  
   ClassDef(AliHLTGlobalTriggerComponent, 0) // Global HLT trigger component class which produces the final trigger decision and readout list.
 };
 
diff --git a/HLT/trigger/CreateTriggerMenuCDBEntry.C b/HLT/trigger/CreateTriggerMenuCDBEntry.C
new file mode 100644 (file)
index 0000000..04f1cbf
--- /dev/null
@@ -0,0 +1,90 @@
+/**************************************************************************
+ * This file is property of and copyright by the ALICE HLT Project        *
+ * All rights reserved.                                                   *
+ *                                                                        *
+ * Primary Authors:                                                       *
+ *   Artur Szostak <artursz@iafrica.com>                                  *
+ *                                                                        *
+ * Permission to use, copy, modify and distribute this software and its   *
+ * documentation strictly for non-commercial purposes is hereby granted   *
+ * without fee, provided that the above copyright notice appears in all   *
+ * copies and that both the copyright notice and this permission notice   *
+ * appear in the supporting documentation. The authors make no claims     *
+ * about the suitability of this software for any purpose. It is          *
+ * provided "as is" without express or implied warranty.                  *
+ **************************************************************************/
+
+/**
+ * \ingroup macros
+ * \file CreateTriggerMenuCDBEntry.C
+ * \brief Macro for generating the trigger menu CDB entry for the HLT global trigger.
+ *
+ * This macro is used to generate a default CDB entry for the HLT global trigger.
+ * The trigger menu is used by the HLT global trigger as a configuration object.
+ * It is an experts macro so make sure you know what you are doing.
+ *
+ * You can run this macro with defaults using the following shell command:
+ * \code
+ *   > aliroot -b -q $ALICE_ROOT/HLT/trigger/CreateTriggerMenuCDBEntry.C
+ * \endcode
+ *
+ * \author Artur Szostak <artursz@iafrica.com>
+ */
+
+#if !defined(__CINT__) || defined(__MAKECINT__)
+#include "AliCDBManager.h"
+#include "AliCDBStorage.h"
+#include "AliCDBEntry.h"
+#include "AliHLTTriggerMenu.h"
+#include "AliHLTGlobalTriggerConfig.h"
+#include "TObjString.h"
+#include "TString.h"
+#include "TSystem.h"
+#include "Riostream.h"
+using std::cerr;
+using std::endl;
+#endif
+
+/**
+ * Generates a default CDB entry for the trigger menu in the given CDB storage
+ * (local by default).
+ * \param cdbPath  The path to the default CDB storage.
+ */
+void CreateTriggerMenuCDBEntry(
+               const char* cdbPath = "local://$ALICE_ROOT/OCDB",
+               Int_t version = 0,
+               Int_t firstRun = 0,
+               Int_t lastRun = AliCDBRunRange::Infinity()
+       )
+{
+       gSystem->Load("libAliHLTTrigger.so");
+
+       // Setup the CDB default storage and run number.
+       AliCDBManager* cdbManager = AliCDBManager::Instance();
+       if (cdbManager == NULL)
+       {
+               cerr << "ERROR: Global CDB manager object does not exist." << endl;
+               return;
+       }
+       AliCDBStorage* storage = cdbManager->GetStorage(cdbPath);
+       if (storage == NULL)
+       {
+               cerr << "ERROR: Could not get storage for: " << cdbPath << endl;
+               return;
+       }
+       
+       // Create the trigger menu.
+       AliHLTGlobalTriggerConfig config("Default Global Trigger Config");
+       config.AddSymbol("triggerClasses", "AliHLTUInt64_t", "this->GetTriggerClasses()", "0x0", "AliHLTEventSummary");
+       config.AddSymbol("domainAll", "AliHLTTriggerDomain", "", "AliHLTTriggerDomain(\"*******:***\")");
+       config.AddItem("triggerClasses != 0x0", "domainAll", "CTP triggered");
+       TObject* menu = AliHLTGlobalTriggerConfig::Menu()->Clone();
+       menu->Print();
+       
+       // Write the trigger menu object to the CDB.
+       AliCDBId id("HLT/ConfigHLT/HLTGlobalTrigger", firstRun, lastRun, version);
+       AliCDBMetaData* metaData = new AliCDBMetaData();
+       metaData->SetResponsible("HLT");
+       metaData->SetComment("Default trigger menu for HLT global trigger.");
+       storage->Put(menu, id, metaData);
+}
diff --git a/OCDB/HLT/ConfigHLT/HLTGlobalTrigger/Run0_999999999_v0_s0.root b/OCDB/HLT/ConfigHLT/HLTGlobalTrigger/Run0_999999999_v0_s0.root
new file mode 100644 (file)
index 0000000..8420dd5
Binary files /dev/null and b/OCDB/HLT/ConfigHLT/HLTGlobalTrigger/Run0_999999999_v0_s0.root differ
index 9c21607..3766581 100644 (file)
Binary files a/OCDB/HLT/ConfigMUON/DecisionComponent/Run0_999999999_v0_s0.root and b/OCDB/HLT/ConfigMUON/DecisionComponent/Run0_999999999_v0_s0.root differ
index 5177baf..5935049 100644 (file)
Binary files a/OCDB/HLT/ConfigMUON/HitReconstructor/Run0_999999999_v0_s0.root and b/OCDB/HLT/ConfigMUON/HitReconstructor/Run0_999999999_v0_s0.root differ
index 3e1f7bb..403a1c6 100644 (file)
Binary files a/OCDB/HLT/ConfigMUON/MansoTrackerFSM/Run0_999999999_v0_s0.root and b/OCDB/HLT/ConfigMUON/MansoTrackerFSM/Run0_999999999_v0_s0.root differ
index 45b85ce..7dcd76c 100644 (file)
Binary files a/OCDB/HLT/ConfigMUON/TriggerReconstructor/Run0_999999999_v0_s0.root and b/OCDB/HLT/ConfigMUON/TriggerReconstructor/Run0_999999999_v0_s0.root differ