LCOV - code coverage report
Current view: top level - HLT/BASE - AliHLTTriggerMenu.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 1 33 3.0 %
Date: 2016-06-14 17:26:59 Functions: 2 28 7.1 %

          Line data    Source code
       1             : //-*- Mode: C++ -*-
       2             : // $Id$
       3             : #ifndef ALIHLTTRIGGERMENU_H
       4             : #define ALIHLTTRIGGERMENU_H
       5             : /* This file is property of and copyright by the ALICE HLT Project        *
       6             :  * ALICE Experiment at CERN, All rights reserved.                         *
       7             :  * See cxx source for full Copyright notice                               */
       8             : 
       9             : /// @file   AliHLTTriggerMenu.h
      10             : /// @author Artur Szostak <artursz@iafrica.com>
      11             : /// @date   19 Dec 2008
      12             : /// @brief  Declaration of the AliHLTTriggerMenu base class.
      13             : 
      14             : #include "TObject.h"
      15             : #include "TString.h"
      16             : #include "TClonesArray.h"
      17             : #include "AliHLTTriggerMenuSymbol.h"
      18             : #include "AliHLTTriggerMenuItem.h"
      19             : #include "AliHLTTriggerDomain.h"
      20             : 
      21             : /**
      22             :  * \class AliHLTTriggerMenu
      23             :  * The trigger menu specifies the HLT global trigger component configuration.
      24             :  * The global trigger has a list of individual input trigger components deriving
      25             :  * from AliHLTTrigger. Each one of these triggers is named. Thus, the trigger menu
      26             :  * is a list of trigger condition expressions, where the variables inside the
      27             :  * expressions are the names of the input triggers. In this way the global trigger
      28             :  * can be configured in a powerful manner using C++ expressions.
      29             :  * Attached to each trigger condition expression is a trigger domain merging
      30             :  * expression, which indicates how the final global trigger domain should be
      31             :  * calculated from the fragments coming from each individual trigger component.
      32             :  * Each entry in the trigger menu has a priority. These are set explicitly and
      33             :  * set to zero by default. The higher the priority number for a menu item the
      34             :  * higher its priority. Multiple items can have the same priority values.
      35             :  *
      36             :  * An important concept is the trigger priority group. This is a number of menu
      37             :  * items that all have the same priority. If all trigger menu items have the
      38             :  * same priority value then there is only one priority group with all the items
      39             :  * being members of the same group. Otherwise there can be any number of priority
      40             :  * groups with any number of one or more trigger menu items in a group.
      41             :  * A trigger menu item belongs to priority group N if it has a priority number equal
      42             :  * to N. The trigger menu is then evaluated by the global trigger component, such
      43             :  * that the highest priority trigger groups (largest N) are evaluated first.
      44             :  * Trigger items within a priority group are then evaluated in the order they
      45             :  * were added to the trigger menu. Thus, the first item added to the menu in group
      46             :  * N is evaluated first, and the last added to group N is evaluated last.
      47             :  * Inside a priority group all trigger menu items have their trigger condition
      48             :  * expressions evaluated. This is equivalent to evaluating the group's trigger
      49             :  * condition expression, where the group's expression is a concatenation of the
      50             :  * individual trigger condition expressions of the items in priority group N.
      51             :  * This means that the trigger conditions expressions (indeed, also the trigger
      52             :  * domain merging expressions) are allowed to have a dangling trailing operator.
      53             :  * The trailing operator will then make sense in the full concatenated expression.
      54             :  * If no such trailing operator is found then the default trigger conditions operator
      55             :  * is used implicitly for the concatenation, as defined in the trigger menu.
      56             :  * If the full concatenated condition expression evaluates to true then the priority
      57             :  * group's result is also true and the output trigger domain can be calculated.
      58             :  * This is done by taking all the merging expressions from only those trigger menu
      59             :  * items whose trigger condition expression fragments were true, and concatenating
      60             :  * those merging expression fragments together to arrive at the full merging expression.
      61             :  * The final trigger domain is calculated by evaluating the merging expression.
      62             :  * Note that the concatenation of the merging expression fragments works in the
      63             :  * same manner as the trigger condition expressions. So a trailing operator is
      64             :  * allowed in each trigger menu item's merging expression, and is implicitly removed
      65             :  * if not needed, but used to concatenate with the next triggered expression.
      66             :  * The default domain merging operator is used if no trailing operator is present
      67             :  * but a concatenation is required.
      68             :  * The evaluation of trigger menu items stops at the first priority group whose
      69             :  * trigger condition expression evaluated to true. This is important to force
      70             :  * mutually exclusive precedence of a higher priority trigger or triggers.
      71             :  * The two extremes of this model are:
      72             :  * - All trigger menu entries have the same priority so they are all part of the
      73             :  *   same priority group, and thus every trigger menu item is evaluated.
      74             :  * - Every trigger menu entry has a different priority, so each forms its own priority
      75             :  *   group, and the trigger evaluation stops at the first highest priority item
      76             :  *   that matches the trigger condition.
      77             :  * Another way to look at the model is that priority groups are mutually exclusive.
      78             :  * Trigger menu items from two different priority groups cannot be active at the same
      79             :  * time. While more than one trigger menu item can be active at the same time if they
      80             :  * are from the same priority group.
      81             :  * Yet another view at the model is that a priority group forms an explicit trigger
      82             :  * condition and trigger domain merging expression, while trigger menu items specify
      83             :  * the expression fragments that are concatenated together implicitly. If there is
      84             :  * just one trigger menu item in a priority group then the groups expressions are
      85             :  * explicit. On the other hand, for multiple items in a group they form implicit
      86             :  * expression fragments.
      87             :  *
      88             :  * \note CTP trigger class names can be used in the trigger menu since the global
      89             :  *   trigger will generate and add corresponding trigger decision objects to the
      90             :  *   logic on the fly.
      91             :  *   In addition, for software triggers, a special SOFTWARE trigger decision is
      92             :  *   generated and the SOFTWARE name can be used in the trigger menu for this.
      93             :  *   If the software trigger is a calibration event then a trigger decision with
      94             :  *   the name CALIBRATION is generated instead. START_OF_DATA and END_OF_DATA
      95             :  *   symbols are similarly defined for the start and end of data events respectively.
      96             :  */
      97             : class AliHLTTriggerMenu : public TObject
      98             : {
      99             :  public:
     100             :   
     101             :   /**
     102             :    * Default constructor.
     103             :    */
     104             :   AliHLTTriggerMenu();
     105             :   
     106             :   /**
     107             :    * Default destructor.
     108             :    */
     109             :   virtual ~AliHLTTriggerMenu();
     110             :   
     111             :   /**
     112             :    * Inherited from TObject, this prints the contents of the trigger menu.
     113             :    * \param option  Can be "short" which will print the short format.
     114             :    */
     115             :   virtual void Print(Option_t* option = "") const;
     116             :   
     117             :   /**
     118             :    * This method removes all items and symbols from the trigger menu.
     119             :    * \note The name and default values are not changed. Only the items and symbol
     120             :    *    lists are cleared.
     121             :    * \param  option  This is passed onto the internal fSymbols and fItems TClonesArrays.
     122             :    * The method is inherited from TObject.
     123             :    */
     124             :   virtual void Clear(Option_t* option = "");
     125             : 
     126             :   /**
     127             :    * Copy constructor performs a deep copy of the object.
     128             :    * \param  obj  Object to copy from.
     129             :    */
     130             :   AliHLTTriggerMenu(const AliHLTTriggerMenu& obj);
     131             :   
     132             :   /**
     133             :    * Assignment operator performs a deep copy of the object.
     134             :    * \param  obj  Object to copy from.
     135             :    * \return  This object is returned after being replaced by a copy of <i>obj</i>.
     136             :    */
     137             :   AliHLTTriggerMenu& operator = (const AliHLTTriggerMenu& obj);
     138             :   
     139             :   /**
     140             :    * Inherited from TObject. Returns the name of the trigger menu.
     141             :    */
     142           0 :   virtual const char* GetName() const { return fName.Data(); }
     143             :   
     144             :   /**
     145             :    * Returns the name of the trigger menu.
     146             :    */
     147           0 :   const char* Name() const { return fName.Data(); }
     148             :   
     149             :   /**
     150             :    * Sets the name of the trigger menu.
     151             :    */
     152           0 :   void Name(const char* name) { fName = name; }
     153             :   
     154             :   /**
     155             :    * Returns the number of symbols in the trigger menu.
     156             :    */
     157           0 :   UInt_t NumberOfSymbols() const { return UInt_t(fSymbols.GetEntriesFast()); }
     158             :   
     159             :   /**
     160             :    * Fetches the i'th trigger menu symbol.
     161             :    */
     162             :   const AliHLTTriggerMenuSymbol* Symbol(UInt_t i) const
     163             :   {
     164           0 :     if (i >= UInt_t(fSymbols.GetEntriesFast())) return NULL;
     165           0 :     return static_cast<const AliHLTTriggerMenuSymbol*>( fSymbols.UncheckedAt(Int_t(i)) );
     166           0 :   }
     167             :   
     168             :   /**
     169             :    * Fetches the i'th trigger menu symbol for editing.
     170             :    */
     171             :   AliHLTTriggerMenuSymbol* Symbol(UInt_t i)
     172             :   {
     173           0 :     if (i >= UInt_t(fSymbols.GetEntriesFast())) return NULL;
     174           0 :     return static_cast<AliHLTTriggerMenuSymbol*>( fSymbols.UncheckedAt(Int_t(i)) );
     175           0 :   }
     176             :   
     177             :   /**
     178             :    * Adds a new symbol to the trigger menu. If the symbol being added already
     179             :    * exists in the trigger menu then the new symbol will not be added.
     180             :    * \param entry  The new trigger menu symbol being added.
     181             :    */
     182             :   void AddSymbol(const AliHLTTriggerMenuSymbol& entry);
     183             :   
     184             :   /**
     185             :    * Returns the array of symbols.
     186             :    */
     187           0 :   const TClonesArray& SymbolArray() const { return fSymbols; }
     188             :   
     189             :   /**
     190             :    * Returns the number of items in the trigger menu.
     191             :    */
     192           0 :   UInt_t NumberOfItems() const { return UInt_t(fItems.GetEntriesFast()); }
     193             :   
     194             :   /**
     195             :    * Fetches the i'th trigger menu item.
     196             :    */
     197             :   const AliHLTTriggerMenuItem* Item(UInt_t i) const
     198             :   {
     199           0 :     if (i >= UInt_t(fItems.GetEntriesFast())) return NULL;
     200           0 :     return static_cast<const AliHLTTriggerMenuItem*>( fItems.UncheckedAt(Int_t(i)) );
     201           0 :   }
     202             :   
     203             :   /**
     204             :    * Fetches the i'th trigger menu item for editing.
     205             :    */
     206             :   AliHLTTriggerMenuItem* Item(UInt_t i)
     207             :   {
     208           0 :     if (i >= UInt_t(fItems.GetEntriesFast())) return NULL;
     209           0 :     return static_cast<AliHLTTriggerMenuItem*>( fItems.UncheckedAt(Int_t(i)) );
     210           0 :   }
     211             :   
     212             :   /**
     213             :    * Adds a new entry to the trigger menu.
     214             :    */
     215             :   void AddItem(const AliHLTTriggerMenuItem& entry)
     216             :   {
     217           0 :     new (fItems[fItems.GetEntriesFast()]) AliHLTTriggerMenuItem(entry);
     218           0 :   }
     219             :   
     220             :   /**
     221             :    * Returns the array of menu items.
     222             :    */
     223           0 :   const TClonesArray& ItemsArray() const { return fItems; }
     224             :   
     225             :   /**
     226             :    * Sets the default trigger description to use if the global trigger does not
     227             :    * fire and returns a negative result.
     228             :    */
     229           0 :   void DefaultDescription(const char* value) { fDefaultDescription = value; }
     230             :   
     231             :   /**
     232             :    * Returns the default trigger description to use if the global trigger does not
     233             :    * fire and returns a negative result.
     234             :    */
     235           0 :   const char* DefaultDescription() const { return fDefaultDescription.Data(); }
     236             :   
     237             :   /**
     238             :    * Sets the default trigger domain to use if the global trigger does not
     239             :    * fire and returns a negative result.
     240             :    */
     241           0 :   void DefaultTriggerDomain(const AliHLTTriggerDomain& value) { fDefaultDomain = value; }
     242             :   
     243             :   /**
     244             :    * Returns the default trigger domain to use if the global trigger does not
     245             :    * fire and returns a negative result.
     246             :    */
     247           0 :   const AliHLTTriggerDomain& DefaultTriggerDomain() const { return fDefaultDomain; }
     248             :   
     249             :   /**
     250             :    * Returns the default trigger domain for modification.
     251             :    */
     252           0 :   AliHLTTriggerDomain& DefaultTriggerDomain() { return fDefaultDomain; }
     253             :   
     254             :   /**
     255             :    * Sets the default operator used to merge trigger conditions that are matched from
     256             :    * the same trigger menu priority group.
     257             :    */
     258           0 :   void DefaultConditionOperator(const char* value) { fDefaultConditionOperator = value; }
     259             :   
     260             :   /**
     261             :    * Returns the default operator used to merge trigger conditions that are matched from
     262             :    * the same trigger menu priority group.
     263             :    */
     264           0 :   const char* DefaultConditionOperator() const { return fDefaultConditionOperator.Data(); }
     265             :   
     266             :   /**
     267             :    * Sets the default operator used to merge trigger domains that are matched from
     268             :    * the same trigger menu priority group.
     269             :    */
     270           0 :   void DefaultDomainOperator(const char* value) { fDefaultDomainOperator = value; }
     271             :   
     272             :   /**
     273             :    * Returns the default operator used to merge trigger domains that are matched from
     274             :    * the same trigger menu priority group.
     275             :    */
     276           0 :   const char* DefaultDomainOperator() const { return fDefaultDomainOperator.Data(); }
     277             :   
     278             :   /**
     279             :    * Returns the default result for the global trigger if no item is matched.
     280             :    */
     281           0 :   bool DefaultResult() const { return TestBit(BIT(15)) == 1; }
     282             :   
     283             :   /**
     284             :    * Set the default result for the global trigger if no item is matched.
     285             :    */
     286           0 :   void DefaultResult(bool value) { SetBit(BIT(15), value); }
     287             :   
     288             :  private:
     289             :   
     290             :   TString fName;  /// Name of the trigger menu.
     291             :   TClonesArray fSymbols;  /// List of symbols used in trigger expressions.
     292             :   TClonesArray fItems;  /// List of trigger menu items.
     293             :   TString fDefaultDescription; /// The default trigger description to use for negative global triggers.
     294             :   AliHLTTriggerDomain fDefaultDomain;  /// The default trigger domain to use for negative global triggers.
     295             :   TString fDefaultConditionOperator;  /// The default operator to use to merge trigger conditions from the same priority group.
     296             :   TString fDefaultDomainOperator;  /// The default operator to use to merge trigger domains from the same priority group.
     297             :   
     298         142 :   ClassDef(AliHLTTriggerMenu, 4) // Trigger menu for the global HLT trigger.
     299             : };
     300             : 
     301             : #endif // ALIHLTTRIGGERMENU_H
     302             : 

Generated by: LCOV version 1.11