ROOT logo
//-*- Mode: C++ -*-
// $Id$
#ifndef ALIHLTTRIGGERMENU_H
#define ALIHLTTRIGGERMENU_H
/* This file is property of and copyright by the ALICE HLT Project        *
 * ALICE Experiment at CERN, All rights reserved.                         *
 * See cxx source for full Copyright notice                               */

/// @file   AliHLTTriggerMenu.h
/// @author Artur Szostak <artursz@iafrica.com>
/// @date   19 Dec 2008
/// @brief  Declaration of the AliHLTTriggerMenu base class.

#include "TObject.h"
#include "TString.h"
#include "TClonesArray.h"
#include "AliHLTTriggerMenuSymbol.h"
#include "AliHLTTriggerMenuItem.h"
#include "AliHLTTriggerDomain.h"

/**
 * \class AliHLTTriggerMenu
 * The trigger menu specifies the HLT global trigger component configuration.
 * The global trigger has a list of individual input trigger components deriving
 * from AliHLTTrigger. Each one of these triggers is named. Thus, the trigger menu
 * is a list of trigger condition expressions, where the variables inside the
 * expressions are the names of the input triggers. In this way the global trigger
 * can be configured in a powerful manner using C++ expressions.
 * Attached to each trigger condition expression is a trigger domain merging
 * expression, which indicates how the final global trigger domain should be
 * calculated from the fragments coming from each individual trigger component.
 * Each entry in the trigger menu has a priority. These are set explicitly and
 * set to zero by default. The higher the priority number for a menu item the
 * higher its priority. Multiple items can have the same priority values.
 *
 * An important concept is the trigger priority group. This is a number of menu
 * items that all have the same priority. If all trigger menu items have the
 * same priority value then there is only one priority group with all the items
 * being members of the same group. Otherwise there can be any number of priority
 * groups with any number of one or more trigger menu items in a group.
 * A trigger menu item belongs to priority group N if it has a priority number equal
 * to N. The trigger menu is then evaluated by the global trigger component, such
 * that the highest priority trigger groups (largest N) are evaluated first.
 * Trigger items within a priority group are then evaluated in the order they
 * were added to the trigger menu. Thus, the first item added to the menu in group
 * N is evaluated first, and the last added to group N is evaluated last.
 * Inside a priority group all trigger menu items have their trigger condition
 * expressions evaluated. This is equivalent to evaluating the group's trigger
 * condition expression, where the group's expression is a concatenation of the
 * individual trigger condition expressions of the items in priority group N.
 * This means that the trigger conditions expressions (indeed, also the trigger
 * domain merging expressions) are allowed to have a dangling trailing operator.
 * The trailing operator will then make sense in the full concatenated expression.
 * If no such trailing operator is found then the default trigger conditions operator
 * is used implicitly for the concatenation, as defined in the trigger menu.
 * If the full concatenated condition expression evaluates to true then the priority
 * group's result is also true and the output trigger domain can be calculated.
 * This is done by taking all the merging expressions from only those trigger menu
 * items whose trigger condition expression fragments were true, and concatenating
 * those merging expression fragments together to arrive at the full merging expression.
 * The final trigger domain is calculated by evaluating the merging expression.
 * Note that the concatenation of the merging expression fragments works in the
 * same manner as the trigger condition expressions. So a trailing operator is
 * allowed in each trigger menu item's merging expression, and is implicitly removed
 * if not needed, but used to concatenate with the next triggered expression.
 * The default domain merging operator is used if no trailing operator is present
 * but a concatenation is required.
 * The evaluation of trigger menu items stops at the first priority group whose
 * trigger condition expression evaluated to true. This is important to force
 * mutually exclusive precedence of a higher priority trigger or triggers.
 * The two extremes of this model are:
 * - All trigger menu entries have the same priority so they are all part of the
 *   same priority group, and thus every trigger menu item is evaluated.
 * - Every trigger menu entry has a different priority, so each forms its own priority
 *   group, and the trigger evaluation stops at the first highest priority item
 *   that matches the trigger condition.
 * Another way to look at the model is that priority groups are mutually exclusive.
 * Trigger menu items from two different priority groups cannot be active at the same
 * time. While more than one trigger menu item can be active at the same time if they
 * are from the same priority group.
 * Yet another view at the model is that a priority group forms an explicit trigger
 * condition and trigger domain merging expression, while trigger menu items specify
 * the expression fragments that are concatenated together implicitly. If there is
 * just one trigger menu item in a priority group then the groups expressions are
 * explicit. On the other hand, for multiple items in a group they form implicit
 * expression fragments.
 *
 * \note CTP trigger class names can be used in the trigger menu since the global
 *   trigger will generate and add corresponding trigger decision objects to the
 *   logic on the fly.
 *   In addition, for software triggers, a special SOFTWARE trigger decision is
 *   generated and the SOFTWARE name can be used in the trigger menu for this.
 *   If the software trigger is a calibration event then a trigger decision with
 *   the name CALIBRATION is generated instead. START_OF_DATA and END_OF_DATA
 *   symbols are similarly defined for the start and end of data events respectively.
 */
class AliHLTTriggerMenu : public TObject
{
 public:
  
  /**
   * Default constructor.
   */
  AliHLTTriggerMenu();
  
  /**
   * Default destructor.
   */
  virtual ~AliHLTTriggerMenu();
  
  /**
   * Inherited from TObject, this prints the contents of the trigger menu.
   * \param option  Can be "short" which will print the short format.
   */
  virtual void Print(Option_t* option = "") const;
  
  /**
   * This method removes all items and symbols from the trigger menu.
   * \note The name and default values are not changed. Only the items and symbol
   *    lists are cleared.
   * \param  option  This is passed onto the internal fSymbols and fItems TClonesArrays.
   * The method is inherited from TObject.
   */
  virtual void Clear(Option_t* option = "");

  /**
   * Copy constructor performs a deep copy of the object.
   * \param  obj  Object to copy from.
   */
  AliHLTTriggerMenu(const AliHLTTriggerMenu& obj);
  
  /**
   * Assignment operator performs a deep copy of the object.
   * \param  obj  Object to copy from.
   * \return  This object is returned after being replaced by a copy of <i>obj</i>.
   */
  AliHLTTriggerMenu& operator = (const AliHLTTriggerMenu& obj);
  
  /**
   * Inherited from TObject. Returns the name of the trigger menu.
   */
  virtual const char* GetName() const { return fName.Data(); }
  
  /**
   * Returns the name of the trigger menu.
   */
  const char* Name() const { return fName.Data(); }
  
  /**
   * Sets the name of the trigger menu.
   */
  void Name(const char* name) { fName = name; }
  
  /**
   * Returns the number of symbols in the trigger menu.
   */
  UInt_t NumberOfSymbols() const { return UInt_t(fSymbols.GetEntriesFast()); }
  
  /**
   * Fetches the i'th trigger menu symbol.
   */
  const AliHLTTriggerMenuSymbol* Symbol(UInt_t i) const
  {
    if (i >= UInt_t(fSymbols.GetEntriesFast())) return NULL;
    return static_cast<const AliHLTTriggerMenuSymbol*>( fSymbols.UncheckedAt(Int_t(i)) );
  }
  
  /**
   * Fetches the i'th trigger menu symbol for editing.
   */
  AliHLTTriggerMenuSymbol* Symbol(UInt_t i)
  {
    if (i >= UInt_t(fSymbols.GetEntriesFast())) return NULL;
    return static_cast<AliHLTTriggerMenuSymbol*>( fSymbols.UncheckedAt(Int_t(i)) );
  }
  
  /**
   * Adds a new symbol to the trigger menu. If the symbol being added already
   * exists in the trigger menu then the new symbol will not be added.
   * \param entry  The new trigger menu symbol being added.
   */
  void AddSymbol(const AliHLTTriggerMenuSymbol& entry);
  
  /**
   * Returns the array of symbols.
   */
  const TClonesArray& SymbolArray() const { return fSymbols; }
  
  /**
   * Returns the number of items in the trigger menu.
   */
  UInt_t NumberOfItems() const { return UInt_t(fItems.GetEntriesFast()); }
  
  /**
   * Fetches the i'th trigger menu item.
   */
  const AliHLTTriggerMenuItem* Item(UInt_t i) const
  {
    if (i >= UInt_t(fItems.GetEntriesFast())) return NULL;
    return static_cast<const AliHLTTriggerMenuItem*>( fItems.UncheckedAt(Int_t(i)) );
  }
  
  /**
   * Fetches the i'th trigger menu item for editing.
   */
  AliHLTTriggerMenuItem* Item(UInt_t i)
  {
    if (i >= UInt_t(fItems.GetEntriesFast())) return NULL;
    return static_cast<AliHLTTriggerMenuItem*>( fItems.UncheckedAt(Int_t(i)) );
  }
  
  /**
   * Adds a new entry to the trigger menu.
   */
  void AddItem(const AliHLTTriggerMenuItem& entry)
  {
    new (fItems[fItems.GetEntriesFast()]) AliHLTTriggerMenuItem(entry);
  }
  
  /**
   * Returns the array of menu items.
   */
  const TClonesArray& ItemsArray() const { return fItems; }
  
  /**
   * Sets the default trigger description to use if the global trigger does not
   * fire and returns a negative result.
   */
  void DefaultDescription(const char* value) { fDefaultDescription = value; }
  
  /**
   * Returns the default trigger description to use if the global trigger does not
   * fire and returns a negative result.
   */
  const char* DefaultDescription() const { return fDefaultDescription.Data(); }
  
  /**
   * Sets the default trigger domain to use if the global trigger does not
   * fire and returns a negative result.
   */
  void DefaultTriggerDomain(const AliHLTTriggerDomain& value) { fDefaultDomain = value; }
  
  /**
   * Returns the default trigger domain to use if the global trigger does not
   * fire and returns a negative result.
   */
  const AliHLTTriggerDomain& DefaultTriggerDomain() const { return fDefaultDomain; }
  
  /**
   * Returns the default trigger domain for modification.
   */
  AliHLTTriggerDomain& DefaultTriggerDomain() { return fDefaultDomain; }
  
  /**
   * Sets the default operator used to merge trigger conditions that are matched from
   * the same trigger menu priority group.
   */
  void DefaultConditionOperator(const char* value) { fDefaultConditionOperator = value; }
  
  /**
   * Returns the default operator used to merge trigger conditions that are matched from
   * the same trigger menu priority group.
   */
  const char* DefaultConditionOperator() const { return fDefaultConditionOperator.Data(); }
  
  /**
   * Sets the default operator used to merge trigger domains that are matched from
   * the same trigger menu priority group.
   */
  void DefaultDomainOperator(const char* value) { fDefaultDomainOperator = value; }
  
  /**
   * Returns the default operator used to merge trigger domains that are matched from
   * the same trigger menu priority group.
   */
  const char* DefaultDomainOperator() const { return fDefaultDomainOperator.Data(); }
  
  /**
   * Returns the default result for the global trigger if no item is matched.
   */
  bool DefaultResult() const { return TestBit(BIT(15)) == 1; }
  
  /**
   * Set the default result for the global trigger if no item is matched.
   */
  void DefaultResult(bool value) { SetBit(BIT(15), value); }
  
 private:
  
  TString fName;  /// Name of the trigger menu.
  TClonesArray fSymbols;  /// List of symbols used in trigger expressions.
  TClonesArray fItems;  /// List of trigger menu items.
  TString fDefaultDescription; /// The default trigger description to use for negative global triggers.
  AliHLTTriggerDomain fDefaultDomain;  /// The default trigger domain to use for negative global triggers.
  TString fDefaultConditionOperator;  /// The default operator to use to merge trigger conditions from the same priority group.
  TString fDefaultDomainOperator;  /// The default operator to use to merge trigger domains from the same priority group.
  
  ClassDef(AliHLTTriggerMenu, 4) // Trigger menu for the global HLT trigger.
};

#endif // ALIHLTTRIGGERMENU_H

 AliHLTTriggerMenu.h:1
 AliHLTTriggerMenu.h:2
 AliHLTTriggerMenu.h:3
 AliHLTTriggerMenu.h:4
 AliHLTTriggerMenu.h:5
 AliHLTTriggerMenu.h:6
 AliHLTTriggerMenu.h:7
 AliHLTTriggerMenu.h:8
 AliHLTTriggerMenu.h:9
 AliHLTTriggerMenu.h:10
 AliHLTTriggerMenu.h:11
 AliHLTTriggerMenu.h:12
 AliHLTTriggerMenu.h:13
 AliHLTTriggerMenu.h:14
 AliHLTTriggerMenu.h:15
 AliHLTTriggerMenu.h:16
 AliHLTTriggerMenu.h:17
 AliHLTTriggerMenu.h:18
 AliHLTTriggerMenu.h:19
 AliHLTTriggerMenu.h:20
 AliHLTTriggerMenu.h:21
 AliHLTTriggerMenu.h:22
 AliHLTTriggerMenu.h:23
 AliHLTTriggerMenu.h:24
 AliHLTTriggerMenu.h:25
 AliHLTTriggerMenu.h:26
 AliHLTTriggerMenu.h:27
 AliHLTTriggerMenu.h:28
 AliHLTTriggerMenu.h:29
 AliHLTTriggerMenu.h:30
 AliHLTTriggerMenu.h:31
 AliHLTTriggerMenu.h:32
 AliHLTTriggerMenu.h:33
 AliHLTTriggerMenu.h:34
 AliHLTTriggerMenu.h:35
 AliHLTTriggerMenu.h:36
 AliHLTTriggerMenu.h:37
 AliHLTTriggerMenu.h:38
 AliHLTTriggerMenu.h:39
 AliHLTTriggerMenu.h:40
 AliHLTTriggerMenu.h:41
 AliHLTTriggerMenu.h:42
 AliHLTTriggerMenu.h:43
 AliHLTTriggerMenu.h:44
 AliHLTTriggerMenu.h:45
 AliHLTTriggerMenu.h:46
 AliHLTTriggerMenu.h:47
 AliHLTTriggerMenu.h:48
 AliHLTTriggerMenu.h:49
 AliHLTTriggerMenu.h:50
 AliHLTTriggerMenu.h:51
 AliHLTTriggerMenu.h:52
 AliHLTTriggerMenu.h:53
 AliHLTTriggerMenu.h:54
 AliHLTTriggerMenu.h:55
 AliHLTTriggerMenu.h:56
 AliHLTTriggerMenu.h:57
 AliHLTTriggerMenu.h:58
 AliHLTTriggerMenu.h:59
 AliHLTTriggerMenu.h:60
 AliHLTTriggerMenu.h:61
 AliHLTTriggerMenu.h:62
 AliHLTTriggerMenu.h:63
 AliHLTTriggerMenu.h:64
 AliHLTTriggerMenu.h:65
 AliHLTTriggerMenu.h:66
 AliHLTTriggerMenu.h:67
 AliHLTTriggerMenu.h:68
 AliHLTTriggerMenu.h:69
 AliHLTTriggerMenu.h:70
 AliHLTTriggerMenu.h:71
 AliHLTTriggerMenu.h:72
 AliHLTTriggerMenu.h:73
 AliHLTTriggerMenu.h:74
 AliHLTTriggerMenu.h:75
 AliHLTTriggerMenu.h:76
 AliHLTTriggerMenu.h:77
 AliHLTTriggerMenu.h:78
 AliHLTTriggerMenu.h:79
 AliHLTTriggerMenu.h:80
 AliHLTTriggerMenu.h:81
 AliHLTTriggerMenu.h:82
 AliHLTTriggerMenu.h:83
 AliHLTTriggerMenu.h:84
 AliHLTTriggerMenu.h:85
 AliHLTTriggerMenu.h:86
 AliHLTTriggerMenu.h:87
 AliHLTTriggerMenu.h:88
 AliHLTTriggerMenu.h:89
 AliHLTTriggerMenu.h:90
 AliHLTTriggerMenu.h:91
 AliHLTTriggerMenu.h:92
 AliHLTTriggerMenu.h:93
 AliHLTTriggerMenu.h:94
 AliHLTTriggerMenu.h:95
 AliHLTTriggerMenu.h:96
 AliHLTTriggerMenu.h:97
 AliHLTTriggerMenu.h:98
 AliHLTTriggerMenu.h:99
 AliHLTTriggerMenu.h:100
 AliHLTTriggerMenu.h:101
 AliHLTTriggerMenu.h:102
 AliHLTTriggerMenu.h:103
 AliHLTTriggerMenu.h:104
 AliHLTTriggerMenu.h:105
 AliHLTTriggerMenu.h:106
 AliHLTTriggerMenu.h:107
 AliHLTTriggerMenu.h:108
 AliHLTTriggerMenu.h:109
 AliHLTTriggerMenu.h:110
 AliHLTTriggerMenu.h:111
 AliHLTTriggerMenu.h:112
 AliHLTTriggerMenu.h:113
 AliHLTTriggerMenu.h:114
 AliHLTTriggerMenu.h:115
 AliHLTTriggerMenu.h:116
 AliHLTTriggerMenu.h:117
 AliHLTTriggerMenu.h:118
 AliHLTTriggerMenu.h:119
 AliHLTTriggerMenu.h:120
 AliHLTTriggerMenu.h:121
 AliHLTTriggerMenu.h:122
 AliHLTTriggerMenu.h:123
 AliHLTTriggerMenu.h:124
 AliHLTTriggerMenu.h:125
 AliHLTTriggerMenu.h:126
 AliHLTTriggerMenu.h:127
 AliHLTTriggerMenu.h:128
 AliHLTTriggerMenu.h:129
 AliHLTTriggerMenu.h:130
 AliHLTTriggerMenu.h:131
 AliHLTTriggerMenu.h:132
 AliHLTTriggerMenu.h:133
 AliHLTTriggerMenu.h:134
 AliHLTTriggerMenu.h:135
 AliHLTTriggerMenu.h:136
 AliHLTTriggerMenu.h:137
 AliHLTTriggerMenu.h:138
 AliHLTTriggerMenu.h:139
 AliHLTTriggerMenu.h:140
 AliHLTTriggerMenu.h:141
 AliHLTTriggerMenu.h:142
 AliHLTTriggerMenu.h:143
 AliHLTTriggerMenu.h:144
 AliHLTTriggerMenu.h:145
 AliHLTTriggerMenu.h:146
 AliHLTTriggerMenu.h:147
 AliHLTTriggerMenu.h:148
 AliHLTTriggerMenu.h:149
 AliHLTTriggerMenu.h:150
 AliHLTTriggerMenu.h:151
 AliHLTTriggerMenu.h:152
 AliHLTTriggerMenu.h:153
 AliHLTTriggerMenu.h:154
 AliHLTTriggerMenu.h:155
 AliHLTTriggerMenu.h:156
 AliHLTTriggerMenu.h:157
 AliHLTTriggerMenu.h:158
 AliHLTTriggerMenu.h:159
 AliHLTTriggerMenu.h:160
 AliHLTTriggerMenu.h:161
 AliHLTTriggerMenu.h:162
 AliHLTTriggerMenu.h:163
 AliHLTTriggerMenu.h:164
 AliHLTTriggerMenu.h:165
 AliHLTTriggerMenu.h:166
 AliHLTTriggerMenu.h:167
 AliHLTTriggerMenu.h:168
 AliHLTTriggerMenu.h:169
 AliHLTTriggerMenu.h:170
 AliHLTTriggerMenu.h:171
 AliHLTTriggerMenu.h:172
 AliHLTTriggerMenu.h:173
 AliHLTTriggerMenu.h:174
 AliHLTTriggerMenu.h:175
 AliHLTTriggerMenu.h:176
 AliHLTTriggerMenu.h:177
 AliHLTTriggerMenu.h:178
 AliHLTTriggerMenu.h:179
 AliHLTTriggerMenu.h:180
 AliHLTTriggerMenu.h:181
 AliHLTTriggerMenu.h:182
 AliHLTTriggerMenu.h:183
 AliHLTTriggerMenu.h:184
 AliHLTTriggerMenu.h:185
 AliHLTTriggerMenu.h:186
 AliHLTTriggerMenu.h:187
 AliHLTTriggerMenu.h:188
 AliHLTTriggerMenu.h:189
 AliHLTTriggerMenu.h:190
 AliHLTTriggerMenu.h:191
 AliHLTTriggerMenu.h:192
 AliHLTTriggerMenu.h:193
 AliHLTTriggerMenu.h:194
 AliHLTTriggerMenu.h:195
 AliHLTTriggerMenu.h:196
 AliHLTTriggerMenu.h:197
 AliHLTTriggerMenu.h:198
 AliHLTTriggerMenu.h:199
 AliHLTTriggerMenu.h:200
 AliHLTTriggerMenu.h:201
 AliHLTTriggerMenu.h:202
 AliHLTTriggerMenu.h:203
 AliHLTTriggerMenu.h:204
 AliHLTTriggerMenu.h:205
 AliHLTTriggerMenu.h:206
 AliHLTTriggerMenu.h:207
 AliHLTTriggerMenu.h:208
 AliHLTTriggerMenu.h:209
 AliHLTTriggerMenu.h:210
 AliHLTTriggerMenu.h:211
 AliHLTTriggerMenu.h:212
 AliHLTTriggerMenu.h:213
 AliHLTTriggerMenu.h:214
 AliHLTTriggerMenu.h:215
 AliHLTTriggerMenu.h:216
 AliHLTTriggerMenu.h:217
 AliHLTTriggerMenu.h:218
 AliHLTTriggerMenu.h:219
 AliHLTTriggerMenu.h:220
 AliHLTTriggerMenu.h:221
 AliHLTTriggerMenu.h:222
 AliHLTTriggerMenu.h:223
 AliHLTTriggerMenu.h:224
 AliHLTTriggerMenu.h:225
 AliHLTTriggerMenu.h:226
 AliHLTTriggerMenu.h:227
 AliHLTTriggerMenu.h:228
 AliHLTTriggerMenu.h:229
 AliHLTTriggerMenu.h:230
 AliHLTTriggerMenu.h:231
 AliHLTTriggerMenu.h:232
 AliHLTTriggerMenu.h:233
 AliHLTTriggerMenu.h:234
 AliHLTTriggerMenu.h:235
 AliHLTTriggerMenu.h:236
 AliHLTTriggerMenu.h:237
 AliHLTTriggerMenu.h:238
 AliHLTTriggerMenu.h:239
 AliHLTTriggerMenu.h:240
 AliHLTTriggerMenu.h:241
 AliHLTTriggerMenu.h:242
 AliHLTTriggerMenu.h:243
 AliHLTTriggerMenu.h:244
 AliHLTTriggerMenu.h:245
 AliHLTTriggerMenu.h:246
 AliHLTTriggerMenu.h:247
 AliHLTTriggerMenu.h:248
 AliHLTTriggerMenu.h:249
 AliHLTTriggerMenu.h:250
 AliHLTTriggerMenu.h:251
 AliHLTTriggerMenu.h:252
 AliHLTTriggerMenu.h:253
 AliHLTTriggerMenu.h:254
 AliHLTTriggerMenu.h:255
 AliHLTTriggerMenu.h:256
 AliHLTTriggerMenu.h:257
 AliHLTTriggerMenu.h:258
 AliHLTTriggerMenu.h:259
 AliHLTTriggerMenu.h:260
 AliHLTTriggerMenu.h:261
 AliHLTTriggerMenu.h:262
 AliHLTTriggerMenu.h:263
 AliHLTTriggerMenu.h:264
 AliHLTTriggerMenu.h:265
 AliHLTTriggerMenu.h:266
 AliHLTTriggerMenu.h:267
 AliHLTTriggerMenu.h:268
 AliHLTTriggerMenu.h:269
 AliHLTTriggerMenu.h:270
 AliHLTTriggerMenu.h:271
 AliHLTTriggerMenu.h:272
 AliHLTTriggerMenu.h:273
 AliHLTTriggerMenu.h:274
 AliHLTTriggerMenu.h:275
 AliHLTTriggerMenu.h:276
 AliHLTTriggerMenu.h:277
 AliHLTTriggerMenu.h:278
 AliHLTTriggerMenu.h:279
 AliHLTTriggerMenu.h:280
 AliHLTTriggerMenu.h:281
 AliHLTTriggerMenu.h:282
 AliHLTTriggerMenu.h:283
 AliHLTTriggerMenu.h:284
 AliHLTTriggerMenu.h:285
 AliHLTTriggerMenu.h:286
 AliHLTTriggerMenu.h:287
 AliHLTTriggerMenu.h:288
 AliHLTTriggerMenu.h:289
 AliHLTTriggerMenu.h:290
 AliHLTTriggerMenu.h:291
 AliHLTTriggerMenu.h:292
 AliHLTTriggerMenu.h:293
 AliHLTTriggerMenu.h:294
 AliHLTTriggerMenu.h:295
 AliHLTTriggerMenu.h:296
 AliHLTTriggerMenu.h:297
 AliHLTTriggerMenu.h:298
 AliHLTTriggerMenu.h:299
 AliHLTTriggerMenu.h:300
 AliHLTTriggerMenu.h:301
 AliHLTTriggerMenu.h:302