ROOT logo
//-*- Mode: C++ -*-
// $Id$
#ifndef ALIHLTTRIGGERDOMAIN_H
#define ALIHLTTRIGGERDOMAIN_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   AliHLTDomainEntry.h
/// @author Artur Szostak <artursz@iafrica.com>
/// @date   19 Nov 2008
/// @brief  Declaration of the AliHLTTriggerDomain class used to store the set of data block types to readout.

#include "TObject.h"
#include "TClonesArray.h"
#include "AliHLTDataTypes.h"

class AliHLTDomainEntry;
class AliHLTReadoutList;

/**
 * \class AliHLTTriggerDomain
 * The trigger domain class is the set of HLT raw data block types that should
 * be readout and sent to HLTOUT.
 * It is implemented as a list of domain entries, where each domain entry is
 * like a rule, or pattern to match against. When trying to decide if a given
 * data block falls within the trigger domain, i.e. is part of the readout, the
 * domain entries are applied one after the other from top to bottom. Two kinds
 * of domain entries, inclusive and exclusive are possible, which indicate if a
 * data block type or range, is part of the trigger domain or not. As we process
 * the domain entries we update our decision of whether the data block is part
 * of the trigger domain or not. If the domain entry is an inclusion then we update
 * the decision to true, if it is an exclusion then we update the decision to false.
 * The value of the result after applying the last domain entry then indicates
 * if the data block is part of the trigger domain or not.
 * In this way we can specify trigger domains as sets to arbitrary complexity
 * and manipulate them as mathematical sets accordingly.
 *
 * The other feature of the AliHLTTriggerDomain class is that it overloads the
 * following operators to provide set like behaviour:
 *   |  this provides the set union operation (The + operator does the same).
 *   &  this provides the set intersect operation.
 *   -  this provides the set difference operation.
 *   ^  this provides an exclusive or (xor) operation. i.e. given two sets A and B
 *        the result C is given by:
 *        C = {x : x elf A and not x elf B, or x elf B and not x elf A}
 *        where 'elf' means "is an element of".
 *   ~  this returns the set complement.
 * These operators then allow expressions to be formed from trigger domain objects
 * which behave like sets.
 */
class AliHLTTriggerDomain : public TObject
{
 public:
  
  /**
   * Default constructor.
   */
  AliHLTTriggerDomain();
  
  /**
   * Constructs the trigger domain from a list of domain entries.
   * \param list  Comma separated list of domain entries of the form xxx:yyy:zzz
   *    Can optionaly have a '+' or '-' character just in front of the block
   *    type string, xxx in this case, to indicate inclusive or exclusive entries.
   * \note If inclusive and exclusive entries are specified then they are applied
   *    in the order found in the list, from left to right. This means that subsequent
   *    includes can override previous excludes and visa versa.
   */
  AliHLTTriggerDomain(const char* list);
  
  /**
   * Constructor to create a trigger domain from a DDL readout list.
   * The trigger domain will contain entries of the form "DAQRDOUT:xxxx:yyyy"
   * where xxxx is the appropriate detector name given by AliDAQ::OnlineName()
   * and yyyy is the DDL equipment ID number.
   * \param list  The read out list object
   */
  AliHLTTriggerDomain(const AliHLTReadoutList& list);
  
  /**
   * Copy constructor performs a deep copy.
   * \param domain  The domain entry to copy from.
   */
  AliHLTTriggerDomain(const AliHLTTriggerDomain& domain);
  
  /**
   * Default destructor.
   */
  virtual ~AliHLTTriggerDomain();
  
  /**
   * Adds entries to the trigger domain to correspond to the DDL readout list.
   * The trigger domain will contain entries of the form "DAQRDOUT:xxxx:yyyy"
   * where xxxx is the appropriate detector name given by AliDAQ::OnlineName()
   * and yyyy is the DDL equipment ID number.
   * \param list  The readout list object
   */
  void Add(const AliHLTReadoutList& list);
  
  /**
   * Adds the given entry to this trigger domain as an inclusive entry.
   * Existing entries are modified as required to optimise the trigger domain
   * rule / pattern matching list.
   * \param entry  The domain entry object to add.
   * \note The entry.Exclusive() flag is ignored and is treated as if it was kFALSE.
   */
  void Add(const AliHLTDomainEntry& entry);
  
  /**
   * Adds the given data type to the trigger domain such that all data blocks
   * that match this type will form part of the trigger domain.
   * \param datatype  The data block type and origin to match.
   */
  void Add(const AliHLTComponentDataType& datatype);
  
  /**
   * Adds the given data type and origin to the trigger domain such that all data
   * blocks that match will form part of this trigger domain.
   * \param blocktype  The data block type string of the data block that must match.
   *    The value of kAliHLTAnyDataTypeID can be used to specify the 'any' type
   *    wild card value.
   * \param origin  The origin of the data block, such as the detector name, that
   *    must match. The value of kAliHLTDataOriginAny can be used to specify the
   *    'any' origin wild card value.
   */
  void Add(const char* blocktype, const char* origin);
  
  /**
   * Adds the given data type with particular specification bits to the trigger
   * domain, such that all data blocks that match these will form part of this
   * trigger domain.
   * \param datatype  The data block type and origin that must match.
   * \param spec  The specification bits that must match.
   */
  void Add(const AliHLTComponentDataType& datatype, UInt_t spec);
  
  /**
   * Adds the given data type, origin and specification bits of data blocks that
   * should form part of this trigger domain.
   * \param blocktype  The data block type string of the data block that must match.
   *    The value of kAliHLTAnyDataTypeID can be used to specify the 'any' type
   *    wild card value.
   * \param origin  The origin of the data block, such as the detector name, that
   *    must match. The value of kAliHLTDataOriginAny can be used to specify the
   *    'any' origin wild card value.
   * \param spec  The specification bits that must match.
   */
  void Add(const char* blocktype, const char* origin, UInt_t spec);
  
  /**
   * Removes entries from the trigger domain that correspond to the DDL readout list.
   * All entries of the form "DAQRDOUT:xxxx:yyyy" are removed, where xxxx is the
   * appropriate detector name given by AliDAQ::OnlineName() and yyyy is the DDL
   * equipment ID number, as long as the corresponding bit is set in the readout
   * list.
   * \param list  The readout list object
   */
  void Remove(const AliHLTReadoutList& list);
  
  /**
   * Removes or modifies all entries from the trigger domain, such that data blocks
   * that match the given domain entry will not form part of this trigger domain.
   * Existing entries are modified as required to optimise the trigger domain
   * rule / pattern matching list.
   * \param entry  The domain entry object to indicating values that should be removed.
   * \note The entry.Exclusive() flag is ignored and is treated as if it was kTRUE.
   */
  void Remove(const AliHLTDomainEntry& entry);
  
  /**
   * Removes the given data type from the trigger domain, such that all data blocks
   * that match this type will not form part of the trigger domain.
   * \param datatype  The data block type and origin that must match the blocks not
   *    forming part of this trigger domain.
   */
  void Remove(const AliHLTComponentDataType& datatype);
  
  /**
   * Removes the given data type and origin from the trigger domain, such that all
   * data blocks that match these will not form part of the trigger domain.
   * \param blocktype  The data block type string that must match the data blocks
   *    not forming part of this trigger domain.
   *    The value of kAliHLTAnyDataTypeID can be used to specify the 'any' type
   *    wild card value.
   * \param origin  The origin string, such as the detector name, that must match
   *    the data blocks not forming part of this trigger domain.
   *    The value of kAliHLTDataOriginAny can be used to specify the 'any' origin
   *    wild card value.
   */
  void Remove(const char* blocktype, const char* origin);
  
  /**
   * Removes the given data type with given specification bit from the trigger
   * domain, such that all data blocks that match these will not form part of the
   * trigger domain.
   * \param datatype  The data block type and origin that must match the blocks
   *    not forming part of this trigger domain.
   * \param spec  The specification bits that must match for the blocks that do
   *    not form part of this trigger domain.
   */
  void Remove(const AliHLTComponentDataType& datatype, UInt_t spec);
  
  /**
   * Removes the given data type, origin and specification from the trigger domain,
   * such that all data blocks that match these will not form part of the trigger
   * domain.
   * \param blocktype  The data block type string that must match the data blocks
   *    not forming part of this trigger domain.
   *    The value of kAliHLTAnyDataTypeID can be used to specify the 'any' type
   *    wild card value.
   * \param origin  The origin string, such as the detector name, that must match
   *    the data blocks not forming part of this trigger domain.
   *    The value of kAliHLTDataOriginAny can be used to specify the 'any' origin
   *    wild card value.
   * \param spec  The specification bits that must match for the blocks that do
   *    not form part of this trigger domain.
   */
  void Remove(const char* blocktype, const char* origin, UInt_t spec);
  
  /**
   * This checks to see if the given entry (or class of entries, if the entry uses
   * wild card values) is part of the trigger domain.
   * \param entry  This is the entry to check for.
   * \return  true if data blocks that match the entry are part of this
   *    trigger domain and false otherwise.
   * \note If the block contains the 'any' wild card values for the data type
   *    origin or specification, then the inclusive domains are treated
   *    optimistically and the exclusive domains pessimistically. This means that
   *    the wild card values are assumed to fall within the trigger domain for the
   *    optimistic case, but fall outside the domain for the pessimistic case.
   */
  bool Contains(const AliHLTDomainEntry& entry) const;
  
  /**
   * This checks to see if the given data block should be included in the HLT readout.
   * \param block  The data block descriptor to check.
   * \return  true if data block forms part of this trigger domain and should
   *    be part of the readout and false otherwise.
   * \note If the block contains the 'any' wild card values for the data type
   *    or origin, then the inclusive domains are treated optimistically and the
   *    exclusive domains pessimistically. This means that the wild card values
   *    are assumed to fall within the trigger domain for the optimistic case,
   *    but fall outside the domain for the pessimistic case.
   */
  bool IncludeInReadout(const AliHLTComponentBlockData* block) const;
  
  /**
   * This checks to see if the given data block should not be included in the
   * HLT readout.
   * \param block  The data block descriptor to check.
   * \return  true if data block does not form part of this trigger domain and
   *    false otherwise.
   */
  bool ExcludeFromReadout(const AliHLTComponentBlockData* block) const
  {
    return ! IncludeInReadout(block);
  }
  
  /**
   * This method removes all entries in the trigger domain list, giving us and
   * empty trigger domain set.
   * \param  option  This is passed onto the internal fEntries TClonesArray.
   * The method is inherited from TObject.
   */
  virtual void Clear(Option_t* option = "C");
  
  /**
   * Prints all the domain entries in this trigger domain in the order in which
   * they are applied and if they are inclusive or exclusive.
   * \param  option  This is not used by this method.
   * The method is inherited from TObject.
   */
  virtual void Print(Option_t* option = "") const;

  /**
   * Assignment operator performs a deep copy.
   * \param domain  The domain entry to copy from.
   * \return  A reference to this object.
   */
  AliHLTTriggerDomain& operator = (const AliHLTTriggerDomain& domain);
  
  /**
   * This operator adds all domain entries in <i>domain</i> to this trigger domain
   * in such a way, so as to effectively perform a set union.
   * \param domain  The domain object on the right hand side of the operator.
   * \return  A reference to this object.
   */
  AliHLTTriggerDomain& operator |= (const AliHLTTriggerDomain& domain);
  
  /**
   * This operator adds all domain entries in <i>domain</i> that do not exist in
   * this trigger domain, but removes all entries that do exist, effectively
   * performing an exclusive or (xor) operation.
   * i.e. given two sets A and B the result C is given by:
   *    C = {x : x elf A and not x elf B, or x elf B and not x elf A}
   * where 'elf' means "is an element of".
   * \param domain  The domain object on the right hand side of the operator.
   * \return  A reference to this object.
   */
  AliHLTTriggerDomain& operator ^= (const AliHLTTriggerDomain& domain);
  
  /**
   * This operator removes all domain entries from this trigger domain that do
   * not also exist in <i>domain</i>, effectively performing a set intersect.
   * \param domain  The domain object on the right hand side of the operator.
   * \return  A reference to this object.
   */
  AliHLTTriggerDomain& operator &= (const AliHLTTriggerDomain& domain)
  {
    return this->operator = (*this & domain);
  }
  
  /**
   * This operator removes all domain entries from this trigger domain that exisit
   * in <i>domain</i>, effectively implementing a set difference.
   * \param domain  The domain object on the right hand side of the operator.
   * \return  A reference to this object.
   */
  AliHLTTriggerDomain& operator -= (const AliHLTTriggerDomain& domain);
  
  /**
   * This operator returns the set complement of the trigger domain.
   * \return  The complement of this trigger domain, such that any data block that
   *    returns true for AliHLTTriggerDomain::IncludeInReadout() for this trigger
   *    domain, will return false for the same method call in the returned object.
   */
  AliHLTTriggerDomain operator ~ () const;
  
  /**
   * This operator performs a set union between this trigger domain and <i>domain</i>.
   * \param domain  The domain object on the right hand side of the operator.
   * \return  a trigger domain object R, such that for each data block D, we will have
   *    R.IncludeInReadout(D) == this->IncludeInReadout(D) or domain.IncludeInReadout(D)
   */
  AliHLTTriggerDomain operator | (const AliHLTTriggerDomain& domain) const
  {
    AliHLTTriggerDomain result = *this;
    return result.operator |= (domain);
  }
  
  /**
   * This operator performs an exclusive or (xor) like operation between this trigger
   * domain and <i>domain</i>.
   * \param domain  The domain object on the right hand side of the operator.
   * \return  a trigger domain object R, such that for each data block D, we will have
   *    R.IncludeInReadout(D) == this->IncludeInReadout(D) xor domain.IncludeInReadout(D)
   */
  AliHLTTriggerDomain operator ^ (const AliHLTTriggerDomain& domain) const
  {
    AliHLTTriggerDomain result = *this;
    return result.operator ^= (domain);
  }
  
  /**
   * This operator performs a set intersect operation between this trigger domain
   * and <i>domain</i>.
   * \param domain  The domain object on the right hand side of the operator.
   * \return  a trigger domain object R, such that for each data block D, we will have
   *    R.IncludeInReadout(D) == this->IncludeInReadout(D) and domain.IncludeInReadout(D)
   */
  AliHLTTriggerDomain operator & (const AliHLTTriggerDomain& domain) const;
  
  /**
   * This operator implements the set difference between this trigger domain and
   * <i>domain</i>.
   * \param domain  The domain object on the right hand side of the operator.
   * \return  a trigger domain object R, such that for each data block D, we will have
   *    R.IncludeInReadout(D) == this->IncludeInReadout(D) and not domain.IncludeInReadout(D)
   */
  AliHLTTriggerDomain operator - (const AliHLTTriggerDomain& domain) const
  {
    AliHLTTriggerDomain result = *this;
    return result.operator -= (domain);
  }
  
  /**
   * Checks if two domains are equal, i.e. have the same domain rules.
   */
  bool operator == (const AliHLTTriggerDomain& domain) const;
  
  /**
   * Checks if two domains are not equal, i.e. have different domain rules.
   */
  bool operator != (const AliHLTTriggerDomain& domain) const { return not this->operator==(domain); }
  
  /**
   * Typecase operator to create a DDL readout list object from the trigger domain.
   */
  operator AliHLTReadoutList () const;

  /**
   * access of the individual entries
   */
  const AliHLTDomainEntry& operator[](int index) const;

  /** get number of entries in the domain */
  int GetNofEntries()const  {return fEntries.GetEntriesFast();}
  
 private:
  
  /**
   * This method merges the domain entries from <i>domain</i> by copying them into
   * fEntries, but only the ones not marked for removal in <i>removeDomainEntry</i>.
   * Any entries that were marked for removal in fEntries are also removed.
   * \param removeThisEntry  Flags which indicate if the corresponding fEntries[i]
   *    should be removed.
   * \param entriesCount The number of entries in <i>removeThisEntry</i>.
   * \param removeDomainEntry  Flags which indicate if the corresponding domain.fEntries[i]
   *    was marked for removal or not. If marked for removal then it will not be copied
   *    into this trigger domain. The size of the array is given by domain.GetEntriesFast().
   * \param startOfIntersects  This is the start location of the new intersection domain
   *    entries that were added to fEntries. i.e. fEntries[startOfIntersects] is the
   *    first new intersect entry.
   */
  void MergeEntries(
      const bool* removeThisEntry, Int_t entriesCount,
      const bool* removeDomainEntry, Int_t startOfIntersects,
      const AliHLTTriggerDomain& domain
    );
  
  /**
   * Goes throught the list of domain entries in fEntries from the first entry
   * indicated by 'min' to the end of the list and marks for deletion all entries
   * in fEntries that are subsets of 'entry'.
   * The entries are marked by setting the 14'th bit in fBits with a call to
   * AliHLTDomainEntry::SetBit(BIT(14), true).
   * \param entry  The entry that should be the super set of the entries we mark
   *    for removal.
   * \param min  This is the first entry we consider, all the way up to
   *    fEntries.GetEntriesFast() - 1.
   */
  void MarkForDeletionSubsetsOf(const AliHLTDomainEntry& entry, Int_t min);
  
  /**
   * Removes all entries in this trigger domain which were marked for removal.
   * These are all domain entries that have the 14'th bit set in their fBits field
   * with a call to AliHLTDomainEntry::SetBit(BIT(14), true).
   */
  void RemoveMarkedEntries();
  
  /**
   * Removes any redundant trigger domain entries from the fEntries list.
   * Entries that are subsets of each other are removed. Also exclusive entries
   * that are not subsets of any inclusive entry are also removed, because we
   * implicitly assume a data block does not form part of the trigger domain,
   * unless explicitly included with an inclusive domain entry. So these kinds
   * of entries are redundant.
   */
  void Optimise();
  
  TClonesArray fEntries;  /// The list of domain entries used to decide if a data block forms part of trigger domain set.
  
  ClassDef(AliHLTTriggerDomain, 1) // This is a list of internal HLT data block types which should be forwarded for readout.

};

#endif // ALIHLTTRIGGERDOMAIN_H

 AliHLTTriggerDomain.h:1
 AliHLTTriggerDomain.h:2
 AliHLTTriggerDomain.h:3
 AliHLTTriggerDomain.h:4
 AliHLTTriggerDomain.h:5
 AliHLTTriggerDomain.h:6
 AliHLTTriggerDomain.h:7
 AliHLTTriggerDomain.h:8
 AliHLTTriggerDomain.h:9
 AliHLTTriggerDomain.h:10
 AliHLTTriggerDomain.h:11
 AliHLTTriggerDomain.h:12
 AliHLTTriggerDomain.h:13
 AliHLTTriggerDomain.h:14
 AliHLTTriggerDomain.h:15
 AliHLTTriggerDomain.h:16
 AliHLTTriggerDomain.h:17
 AliHLTTriggerDomain.h:18
 AliHLTTriggerDomain.h:19
 AliHLTTriggerDomain.h:20
 AliHLTTriggerDomain.h:21
 AliHLTTriggerDomain.h:22
 AliHLTTriggerDomain.h:23
 AliHLTTriggerDomain.h:24
 AliHLTTriggerDomain.h:25
 AliHLTTriggerDomain.h:26
 AliHLTTriggerDomain.h:27
 AliHLTTriggerDomain.h:28
 AliHLTTriggerDomain.h:29
 AliHLTTriggerDomain.h:30
 AliHLTTriggerDomain.h:31
 AliHLTTriggerDomain.h:32
 AliHLTTriggerDomain.h:33
 AliHLTTriggerDomain.h:34
 AliHLTTriggerDomain.h:35
 AliHLTTriggerDomain.h:36
 AliHLTTriggerDomain.h:37
 AliHLTTriggerDomain.h:38
 AliHLTTriggerDomain.h:39
 AliHLTTriggerDomain.h:40
 AliHLTTriggerDomain.h:41
 AliHLTTriggerDomain.h:42
 AliHLTTriggerDomain.h:43
 AliHLTTriggerDomain.h:44
 AliHLTTriggerDomain.h:45
 AliHLTTriggerDomain.h:46
 AliHLTTriggerDomain.h:47
 AliHLTTriggerDomain.h:48
 AliHLTTriggerDomain.h:49
 AliHLTTriggerDomain.h:50
 AliHLTTriggerDomain.h:51
 AliHLTTriggerDomain.h:52
 AliHLTTriggerDomain.h:53
 AliHLTTriggerDomain.h:54
 AliHLTTriggerDomain.h:55
 AliHLTTriggerDomain.h:56
 AliHLTTriggerDomain.h:57
 AliHLTTriggerDomain.h:58
 AliHLTTriggerDomain.h:59
 AliHLTTriggerDomain.h:60
 AliHLTTriggerDomain.h:61
 AliHLTTriggerDomain.h:62
 AliHLTTriggerDomain.h:63
 AliHLTTriggerDomain.h:64
 AliHLTTriggerDomain.h:65
 AliHLTTriggerDomain.h:66
 AliHLTTriggerDomain.h:67
 AliHLTTriggerDomain.h:68
 AliHLTTriggerDomain.h:69
 AliHLTTriggerDomain.h:70
 AliHLTTriggerDomain.h:71
 AliHLTTriggerDomain.h:72
 AliHLTTriggerDomain.h:73
 AliHLTTriggerDomain.h:74
 AliHLTTriggerDomain.h:75
 AliHLTTriggerDomain.h:76
 AliHLTTriggerDomain.h:77
 AliHLTTriggerDomain.h:78
 AliHLTTriggerDomain.h:79
 AliHLTTriggerDomain.h:80
 AliHLTTriggerDomain.h:81
 AliHLTTriggerDomain.h:82
 AliHLTTriggerDomain.h:83
 AliHLTTriggerDomain.h:84
 AliHLTTriggerDomain.h:85
 AliHLTTriggerDomain.h:86
 AliHLTTriggerDomain.h:87
 AliHLTTriggerDomain.h:88
 AliHLTTriggerDomain.h:89
 AliHLTTriggerDomain.h:90
 AliHLTTriggerDomain.h:91
 AliHLTTriggerDomain.h:92
 AliHLTTriggerDomain.h:93
 AliHLTTriggerDomain.h:94
 AliHLTTriggerDomain.h:95
 AliHLTTriggerDomain.h:96
 AliHLTTriggerDomain.h:97
 AliHLTTriggerDomain.h:98
 AliHLTTriggerDomain.h:99
 AliHLTTriggerDomain.h:100
 AliHLTTriggerDomain.h:101
 AliHLTTriggerDomain.h:102
 AliHLTTriggerDomain.h:103
 AliHLTTriggerDomain.h:104
 AliHLTTriggerDomain.h:105
 AliHLTTriggerDomain.h:106
 AliHLTTriggerDomain.h:107
 AliHLTTriggerDomain.h:108
 AliHLTTriggerDomain.h:109
 AliHLTTriggerDomain.h:110
 AliHLTTriggerDomain.h:111
 AliHLTTriggerDomain.h:112
 AliHLTTriggerDomain.h:113
 AliHLTTriggerDomain.h:114
 AliHLTTriggerDomain.h:115
 AliHLTTriggerDomain.h:116
 AliHLTTriggerDomain.h:117
 AliHLTTriggerDomain.h:118
 AliHLTTriggerDomain.h:119
 AliHLTTriggerDomain.h:120
 AliHLTTriggerDomain.h:121
 AliHLTTriggerDomain.h:122
 AliHLTTriggerDomain.h:123
 AliHLTTriggerDomain.h:124
 AliHLTTriggerDomain.h:125
 AliHLTTriggerDomain.h:126
 AliHLTTriggerDomain.h:127
 AliHLTTriggerDomain.h:128
 AliHLTTriggerDomain.h:129
 AliHLTTriggerDomain.h:130
 AliHLTTriggerDomain.h:131
 AliHLTTriggerDomain.h:132
 AliHLTTriggerDomain.h:133
 AliHLTTriggerDomain.h:134
 AliHLTTriggerDomain.h:135
 AliHLTTriggerDomain.h:136
 AliHLTTriggerDomain.h:137
 AliHLTTriggerDomain.h:138
 AliHLTTriggerDomain.h:139
 AliHLTTriggerDomain.h:140
 AliHLTTriggerDomain.h:141
 AliHLTTriggerDomain.h:142
 AliHLTTriggerDomain.h:143
 AliHLTTriggerDomain.h:144
 AliHLTTriggerDomain.h:145
 AliHLTTriggerDomain.h:146
 AliHLTTriggerDomain.h:147
 AliHLTTriggerDomain.h:148
 AliHLTTriggerDomain.h:149
 AliHLTTriggerDomain.h:150
 AliHLTTriggerDomain.h:151
 AliHLTTriggerDomain.h:152
 AliHLTTriggerDomain.h:153
 AliHLTTriggerDomain.h:154
 AliHLTTriggerDomain.h:155
 AliHLTTriggerDomain.h:156
 AliHLTTriggerDomain.h:157
 AliHLTTriggerDomain.h:158
 AliHLTTriggerDomain.h:159
 AliHLTTriggerDomain.h:160
 AliHLTTriggerDomain.h:161
 AliHLTTriggerDomain.h:162
 AliHLTTriggerDomain.h:163
 AliHLTTriggerDomain.h:164
 AliHLTTriggerDomain.h:165
 AliHLTTriggerDomain.h:166
 AliHLTTriggerDomain.h:167
 AliHLTTriggerDomain.h:168
 AliHLTTriggerDomain.h:169
 AliHLTTriggerDomain.h:170
 AliHLTTriggerDomain.h:171
 AliHLTTriggerDomain.h:172
 AliHLTTriggerDomain.h:173
 AliHLTTriggerDomain.h:174
 AliHLTTriggerDomain.h:175
 AliHLTTriggerDomain.h:176
 AliHLTTriggerDomain.h:177
 AliHLTTriggerDomain.h:178
 AliHLTTriggerDomain.h:179
 AliHLTTriggerDomain.h:180
 AliHLTTriggerDomain.h:181
 AliHLTTriggerDomain.h:182
 AliHLTTriggerDomain.h:183
 AliHLTTriggerDomain.h:184
 AliHLTTriggerDomain.h:185
 AliHLTTriggerDomain.h:186
 AliHLTTriggerDomain.h:187
 AliHLTTriggerDomain.h:188
 AliHLTTriggerDomain.h:189
 AliHLTTriggerDomain.h:190
 AliHLTTriggerDomain.h:191
 AliHLTTriggerDomain.h:192
 AliHLTTriggerDomain.h:193
 AliHLTTriggerDomain.h:194
 AliHLTTriggerDomain.h:195
 AliHLTTriggerDomain.h:196
 AliHLTTriggerDomain.h:197
 AliHLTTriggerDomain.h:198
 AliHLTTriggerDomain.h:199
 AliHLTTriggerDomain.h:200
 AliHLTTriggerDomain.h:201
 AliHLTTriggerDomain.h:202
 AliHLTTriggerDomain.h:203
 AliHLTTriggerDomain.h:204
 AliHLTTriggerDomain.h:205
 AliHLTTriggerDomain.h:206
 AliHLTTriggerDomain.h:207
 AliHLTTriggerDomain.h:208
 AliHLTTriggerDomain.h:209
 AliHLTTriggerDomain.h:210
 AliHLTTriggerDomain.h:211
 AliHLTTriggerDomain.h:212
 AliHLTTriggerDomain.h:213
 AliHLTTriggerDomain.h:214
 AliHLTTriggerDomain.h:215
 AliHLTTriggerDomain.h:216
 AliHLTTriggerDomain.h:217
 AliHLTTriggerDomain.h:218
 AliHLTTriggerDomain.h:219
 AliHLTTriggerDomain.h:220
 AliHLTTriggerDomain.h:221
 AliHLTTriggerDomain.h:222
 AliHLTTriggerDomain.h:223
 AliHLTTriggerDomain.h:224
 AliHLTTriggerDomain.h:225
 AliHLTTriggerDomain.h:226
 AliHLTTriggerDomain.h:227
 AliHLTTriggerDomain.h:228
 AliHLTTriggerDomain.h:229
 AliHLTTriggerDomain.h:230
 AliHLTTriggerDomain.h:231
 AliHLTTriggerDomain.h:232
 AliHLTTriggerDomain.h:233
 AliHLTTriggerDomain.h:234
 AliHLTTriggerDomain.h:235
 AliHLTTriggerDomain.h:236
 AliHLTTriggerDomain.h:237
 AliHLTTriggerDomain.h:238
 AliHLTTriggerDomain.h:239
 AliHLTTriggerDomain.h:240
 AliHLTTriggerDomain.h:241
 AliHLTTriggerDomain.h:242
 AliHLTTriggerDomain.h:243
 AliHLTTriggerDomain.h:244
 AliHLTTriggerDomain.h:245
 AliHLTTriggerDomain.h:246
 AliHLTTriggerDomain.h:247
 AliHLTTriggerDomain.h:248
 AliHLTTriggerDomain.h:249
 AliHLTTriggerDomain.h:250
 AliHLTTriggerDomain.h:251
 AliHLTTriggerDomain.h:252
 AliHLTTriggerDomain.h:253
 AliHLTTriggerDomain.h:254
 AliHLTTriggerDomain.h:255
 AliHLTTriggerDomain.h:256
 AliHLTTriggerDomain.h:257
 AliHLTTriggerDomain.h:258
 AliHLTTriggerDomain.h:259
 AliHLTTriggerDomain.h:260
 AliHLTTriggerDomain.h:261
 AliHLTTriggerDomain.h:262
 AliHLTTriggerDomain.h:263
 AliHLTTriggerDomain.h:264
 AliHLTTriggerDomain.h:265
 AliHLTTriggerDomain.h:266
 AliHLTTriggerDomain.h:267
 AliHLTTriggerDomain.h:268
 AliHLTTriggerDomain.h:269
 AliHLTTriggerDomain.h:270
 AliHLTTriggerDomain.h:271
 AliHLTTriggerDomain.h:272
 AliHLTTriggerDomain.h:273
 AliHLTTriggerDomain.h:274
 AliHLTTriggerDomain.h:275
 AliHLTTriggerDomain.h:276
 AliHLTTriggerDomain.h:277
 AliHLTTriggerDomain.h:278
 AliHLTTriggerDomain.h:279
 AliHLTTriggerDomain.h:280
 AliHLTTriggerDomain.h:281
 AliHLTTriggerDomain.h:282
 AliHLTTriggerDomain.h:283
 AliHLTTriggerDomain.h:284
 AliHLTTriggerDomain.h:285
 AliHLTTriggerDomain.h:286
 AliHLTTriggerDomain.h:287
 AliHLTTriggerDomain.h:288
 AliHLTTriggerDomain.h:289
 AliHLTTriggerDomain.h:290
 AliHLTTriggerDomain.h:291
 AliHLTTriggerDomain.h:292
 AliHLTTriggerDomain.h:293
 AliHLTTriggerDomain.h:294
 AliHLTTriggerDomain.h:295
 AliHLTTriggerDomain.h:296
 AliHLTTriggerDomain.h:297
 AliHLTTriggerDomain.h:298
 AliHLTTriggerDomain.h:299
 AliHLTTriggerDomain.h:300
 AliHLTTriggerDomain.h:301
 AliHLTTriggerDomain.h:302
 AliHLTTriggerDomain.h:303
 AliHLTTriggerDomain.h:304
 AliHLTTriggerDomain.h:305
 AliHLTTriggerDomain.h:306
 AliHLTTriggerDomain.h:307
 AliHLTTriggerDomain.h:308
 AliHLTTriggerDomain.h:309
 AliHLTTriggerDomain.h:310
 AliHLTTriggerDomain.h:311
 AliHLTTriggerDomain.h:312
 AliHLTTriggerDomain.h:313
 AliHLTTriggerDomain.h:314
 AliHLTTriggerDomain.h:315
 AliHLTTriggerDomain.h:316
 AliHLTTriggerDomain.h:317
 AliHLTTriggerDomain.h:318
 AliHLTTriggerDomain.h:319
 AliHLTTriggerDomain.h:320
 AliHLTTriggerDomain.h:321
 AliHLTTriggerDomain.h:322
 AliHLTTriggerDomain.h:323
 AliHLTTriggerDomain.h:324
 AliHLTTriggerDomain.h:325
 AliHLTTriggerDomain.h:326
 AliHLTTriggerDomain.h:327
 AliHLTTriggerDomain.h:328
 AliHLTTriggerDomain.h:329
 AliHLTTriggerDomain.h:330
 AliHLTTriggerDomain.h:331
 AliHLTTriggerDomain.h:332
 AliHLTTriggerDomain.h:333
 AliHLTTriggerDomain.h:334
 AliHLTTriggerDomain.h:335
 AliHLTTriggerDomain.h:336
 AliHLTTriggerDomain.h:337
 AliHLTTriggerDomain.h:338
 AliHLTTriggerDomain.h:339
 AliHLTTriggerDomain.h:340
 AliHLTTriggerDomain.h:341
 AliHLTTriggerDomain.h:342
 AliHLTTriggerDomain.h:343
 AliHLTTriggerDomain.h:344
 AliHLTTriggerDomain.h:345
 AliHLTTriggerDomain.h:346
 AliHLTTriggerDomain.h:347
 AliHLTTriggerDomain.h:348
 AliHLTTriggerDomain.h:349
 AliHLTTriggerDomain.h:350
 AliHLTTriggerDomain.h:351
 AliHLTTriggerDomain.h:352
 AliHLTTriggerDomain.h:353
 AliHLTTriggerDomain.h:354
 AliHLTTriggerDomain.h:355
 AliHLTTriggerDomain.h:356
 AliHLTTriggerDomain.h:357
 AliHLTTriggerDomain.h:358
 AliHLTTriggerDomain.h:359
 AliHLTTriggerDomain.h:360
 AliHLTTriggerDomain.h:361
 AliHLTTriggerDomain.h:362
 AliHLTTriggerDomain.h:363
 AliHLTTriggerDomain.h:364
 AliHLTTriggerDomain.h:365
 AliHLTTriggerDomain.h:366
 AliHLTTriggerDomain.h:367
 AliHLTTriggerDomain.h:368
 AliHLTTriggerDomain.h:369
 AliHLTTriggerDomain.h:370
 AliHLTTriggerDomain.h:371
 AliHLTTriggerDomain.h:372
 AliHLTTriggerDomain.h:373
 AliHLTTriggerDomain.h:374
 AliHLTTriggerDomain.h:375
 AliHLTTriggerDomain.h:376
 AliHLTTriggerDomain.h:377
 AliHLTTriggerDomain.h:378
 AliHLTTriggerDomain.h:379
 AliHLTTriggerDomain.h:380
 AliHLTTriggerDomain.h:381
 AliHLTTriggerDomain.h:382
 AliHLTTriggerDomain.h:383
 AliHLTTriggerDomain.h:384
 AliHLTTriggerDomain.h:385
 AliHLTTriggerDomain.h:386
 AliHLTTriggerDomain.h:387
 AliHLTTriggerDomain.h:388
 AliHLTTriggerDomain.h:389
 AliHLTTriggerDomain.h:390
 AliHLTTriggerDomain.h:391
 AliHLTTriggerDomain.h:392
 AliHLTTriggerDomain.h:393
 AliHLTTriggerDomain.h:394
 AliHLTTriggerDomain.h:395
 AliHLTTriggerDomain.h:396
 AliHLTTriggerDomain.h:397
 AliHLTTriggerDomain.h:398
 AliHLTTriggerDomain.h:399
 AliHLTTriggerDomain.h:400
 AliHLTTriggerDomain.h:401
 AliHLTTriggerDomain.h:402
 AliHLTTriggerDomain.h:403
 AliHLTTriggerDomain.h:404
 AliHLTTriggerDomain.h:405
 AliHLTTriggerDomain.h:406
 AliHLTTriggerDomain.h:407
 AliHLTTriggerDomain.h:408
 AliHLTTriggerDomain.h:409
 AliHLTTriggerDomain.h:410
 AliHLTTriggerDomain.h:411
 AliHLTTriggerDomain.h:412
 AliHLTTriggerDomain.h:413
 AliHLTTriggerDomain.h:414
 AliHLTTriggerDomain.h:415
 AliHLTTriggerDomain.h:416
 AliHLTTriggerDomain.h:417
 AliHLTTriggerDomain.h:418
 AliHLTTriggerDomain.h:419
 AliHLTTriggerDomain.h:420
 AliHLTTriggerDomain.h:421
 AliHLTTriggerDomain.h:422
 AliHLTTriggerDomain.h:423
 AliHLTTriggerDomain.h:424
 AliHLTTriggerDomain.h:425
 AliHLTTriggerDomain.h:426
 AliHLTTriggerDomain.h:427
 AliHLTTriggerDomain.h:428
 AliHLTTriggerDomain.h:429
 AliHLTTriggerDomain.h:430
 AliHLTTriggerDomain.h:431
 AliHLTTriggerDomain.h:432
 AliHLTTriggerDomain.h:433
 AliHLTTriggerDomain.h:434
 AliHLTTriggerDomain.h:435
 AliHLTTriggerDomain.h:436
 AliHLTTriggerDomain.h:437
 AliHLTTriggerDomain.h:438
 AliHLTTriggerDomain.h:439
 AliHLTTriggerDomain.h:440
 AliHLTTriggerDomain.h:441
 AliHLTTriggerDomain.h:442
 AliHLTTriggerDomain.h:443
 AliHLTTriggerDomain.h:444
 AliHLTTriggerDomain.h:445
 AliHLTTriggerDomain.h:446
 AliHLTTriggerDomain.h:447
 AliHLTTriggerDomain.h:448
 AliHLTTriggerDomain.h:449
 AliHLTTriggerDomain.h:450
 AliHLTTriggerDomain.h:451
 AliHLTTriggerDomain.h:452
 AliHLTTriggerDomain.h:453
 AliHLTTriggerDomain.h:454
 AliHLTTriggerDomain.h:455
 AliHLTTriggerDomain.h:456
 AliHLTTriggerDomain.h:457
 AliHLTTriggerDomain.h:458
 AliHLTTriggerDomain.h:459