ROOT logo
//-*- Mode: C++ -*-
// $Id$
#ifndef ALIHLTTRIGGERDECISION_H
#define ALIHLTTRIGGERDECISION_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   AliHLTTriggerDecision.h
/// @author Artur Szostak <artursz@iafrica.com>
/// @date   21 Nov 2008
/// @brief  Declaration of the AliHLTTriggerDecision class storing the a AliHLTTrigger component's decision.

#include "TString.h"
#include "AliHLTReadoutList.h"
#include "AliHLTTriggerDomain.h"

/**
 * \class AliHLTTriggerDecision
 * Stores the information and result of a trigger decision made by a component
 * deriving from AliHLTTrigger. The information includes the DDL readout list
 * indicating which DDLs to readout and the trigger domain specifying which HLT
 * raw data blocks to forward to HLTOUT.
 */
class AliHLTTriggerDecision : public TObject
{
 public:
  
  /**
   * Default constructor.
   */
  AliHLTTriggerDecision();
  
  /**
   * Copy constructor performs a deep copy.
   */
  AliHLTTriggerDecision(const AliHLTTriggerDecision& obj);
  
  /**
   * Constructor specifying the result and trigger name.
   * \param result  The result of the trigger decision.
   * \param name  The name of the trigger decision. Should be the name of the
   *     AliHLTTrigger component.
   */
  AliHLTTriggerDecision(bool result, const char* name);
  
  /**
   * Constructor specifying all information fields.
   * \param result  The result of the trigger decision.
   * \param name  The name of the trigger decision. Should be the name of the
   *     AliHLTTrigger component.
   * \param triggerDomain  The trigger domain for the trigger decision.
   * \param description  The description of (reason for) the trigger decision.
   */
  AliHLTTriggerDecision(
      bool result, const char* name, const AliHLTTriggerDomain& triggerDomain,
      const char* description = ""
    );
  
  /**
   * Default destructor.
   */
  virtual ~AliHLTTriggerDecision();
  
  /**
   * Inherited from TObject. Returns the name of the trigger decision.
   */
  virtual const char* GetName() const { return fName.Data(); }
  
  /**
   * Inherited from TObject. Returns the description of the trigger decision.
   */
  virtual const char* GetTitle() const { return fDescription.Data(); }
  
  /**
   * Inherited from TObject. This prints the contents of the trigger decision.
   * \param option  Can be "short" which will print the short format.
   */
  virtual void Print(Option_t* option = "") const;

  /**
   * Inherited from TObject. Copy this to the specified object.
   */
  virtual void Copy(TObject &object) const;

  /**
   * Inherited from TObject. Create a new clone.
   */
  virtual TObject *Clone(const char *newname="") const;

  /**
   * Inherited from TObject. Return the result of the trigger.
   * @return   "0" or "1" (note: its a string)
   */
  virtual Option_t *GetOption() const;

  /**
   * Returns the result of the trigger decision.
   * \returns true if the event was triggered and should be readout.
   */
  bool EventTriggered() const { return Result(); }
  
  /**
   * Returns the result of the trigger decision.
   * The decision is stored in bit 15 of the fBits field.
   * \returns true if the event was triggered and should be readout.
   */
  bool Result() const;
  
  /**
   * Sets the result of the trigger decision.
   * The decision is stored in bit 15 of the fBits field.
   * \param value  The value to set; true if the event triggered and should be
   *     readout and false otherwise.
   */
  void Result(bool value);
  
  /**
   * Returns the name of the trigger decision.
   */
  const char* Name() const { return fName.Data(); }
  
  /**
   * Sets the name of the trigger decision.
   */
  void Name(const char* name) { fName = name; }
  
  /**
   * Returns the description of (reason for) the trigger decision.
   */
  const char* Description() const { return fDescription.Data(); }
  
  /**
   * Sets the description of the trigger decision.
   */
  void Description(const char* value) { fDescription = value; }
  
  /**
   * Returns the DDL readout list associated with this trigger decision.
   */
  AliHLTReadoutList ReadoutList() const { return AliHLTReadoutList(fTriggerDomain); }
  
  /**
   * Sets the DDL readout list associated with this trigger decision.
   */
  void ReadoutList(const AliHLTReadoutList& value);
  
  /**
   * Returns the trigger domain associated with this trigger decision.
   */
  const AliHLTTriggerDomain& TriggerDomain() const { return fTriggerDomain; }
  
  /**
   * Returns the trigger domain associated with this trigger decision for editing.
   */
  AliHLTTriggerDomain& TriggerDomain() { return fTriggerDomain; }
  
  /**
   * Sets the trigger domain associated with this trigger decision.
   */
  void TriggerDomain(const AliHLTTriggerDomain& value) { fTriggerDomain = value; }
  
  /**
   * Assignment operator performs a deep copy.
   */
  AliHLTTriggerDecision& operator = (const AliHLTTriggerDecision& obj);
  
  /**
   * This method clears the trigger domain and sets the decision result to false.
   * \param  option  This is passed onto the trigger domain clear method.
   * The method is inherited from TObject.
   */
  virtual void Clear(Option_t* option = "C");
  
 private:
  
  TString fName; /// The name of the trigger decision. Should be the name of the trigger component that generated it.
  TString fDescription; /// Optional descriptive text giving the reason for the trigger.
  AliHLTTriggerDomain fTriggerDomain;  /// The trigger domain associated with this trigger. i.e. the HLT data blocks to read out.
  
  ClassDef(AliHLTTriggerDecision, 2) // HLT trigger decision object storing information about the readout list, trigger domain and result.
};

#endif // ALIHLTTRIGGERDECISION_H

 AliHLTTriggerDecision.h:1
 AliHLTTriggerDecision.h:2
 AliHLTTriggerDecision.h:3
 AliHLTTriggerDecision.h:4
 AliHLTTriggerDecision.h:5
 AliHLTTriggerDecision.h:6
 AliHLTTriggerDecision.h:7
 AliHLTTriggerDecision.h:8
 AliHLTTriggerDecision.h:9
 AliHLTTriggerDecision.h:10
 AliHLTTriggerDecision.h:11
 AliHLTTriggerDecision.h:12
 AliHLTTriggerDecision.h:13
 AliHLTTriggerDecision.h:14
 AliHLTTriggerDecision.h:15
 AliHLTTriggerDecision.h:16
 AliHLTTriggerDecision.h:17
 AliHLTTriggerDecision.h:18
 AliHLTTriggerDecision.h:19
 AliHLTTriggerDecision.h:20
 AliHLTTriggerDecision.h:21
 AliHLTTriggerDecision.h:22
 AliHLTTriggerDecision.h:23
 AliHLTTriggerDecision.h:24
 AliHLTTriggerDecision.h:25
 AliHLTTriggerDecision.h:26
 AliHLTTriggerDecision.h:27
 AliHLTTriggerDecision.h:28
 AliHLTTriggerDecision.h:29
 AliHLTTriggerDecision.h:30
 AliHLTTriggerDecision.h:31
 AliHLTTriggerDecision.h:32
 AliHLTTriggerDecision.h:33
 AliHLTTriggerDecision.h:34
 AliHLTTriggerDecision.h:35
 AliHLTTriggerDecision.h:36
 AliHLTTriggerDecision.h:37
 AliHLTTriggerDecision.h:38
 AliHLTTriggerDecision.h:39
 AliHLTTriggerDecision.h:40
 AliHLTTriggerDecision.h:41
 AliHLTTriggerDecision.h:42
 AliHLTTriggerDecision.h:43
 AliHLTTriggerDecision.h:44
 AliHLTTriggerDecision.h:45
 AliHLTTriggerDecision.h:46
 AliHLTTriggerDecision.h:47
 AliHLTTriggerDecision.h:48
 AliHLTTriggerDecision.h:49
 AliHLTTriggerDecision.h:50
 AliHLTTriggerDecision.h:51
 AliHLTTriggerDecision.h:52
 AliHLTTriggerDecision.h:53
 AliHLTTriggerDecision.h:54
 AliHLTTriggerDecision.h:55
 AliHLTTriggerDecision.h:56
 AliHLTTriggerDecision.h:57
 AliHLTTriggerDecision.h:58
 AliHLTTriggerDecision.h:59
 AliHLTTriggerDecision.h:60
 AliHLTTriggerDecision.h:61
 AliHLTTriggerDecision.h:62
 AliHLTTriggerDecision.h:63
 AliHLTTriggerDecision.h:64
 AliHLTTriggerDecision.h:65
 AliHLTTriggerDecision.h:66
 AliHLTTriggerDecision.h:67
 AliHLTTriggerDecision.h:68
 AliHLTTriggerDecision.h:69
 AliHLTTriggerDecision.h:70
 AliHLTTriggerDecision.h:71
 AliHLTTriggerDecision.h:72
 AliHLTTriggerDecision.h:73
 AliHLTTriggerDecision.h:74
 AliHLTTriggerDecision.h:75
 AliHLTTriggerDecision.h:76
 AliHLTTriggerDecision.h:77
 AliHLTTriggerDecision.h:78
 AliHLTTriggerDecision.h:79
 AliHLTTriggerDecision.h:80
 AliHLTTriggerDecision.h:81
 AliHLTTriggerDecision.h:82
 AliHLTTriggerDecision.h:83
 AliHLTTriggerDecision.h:84
 AliHLTTriggerDecision.h:85
 AliHLTTriggerDecision.h:86
 AliHLTTriggerDecision.h:87
 AliHLTTriggerDecision.h:88
 AliHLTTriggerDecision.h:89
 AliHLTTriggerDecision.h:90
 AliHLTTriggerDecision.h:91
 AliHLTTriggerDecision.h:92
 AliHLTTriggerDecision.h:93
 AliHLTTriggerDecision.h:94
 AliHLTTriggerDecision.h:95
 AliHLTTriggerDecision.h:96
 AliHLTTriggerDecision.h:97
 AliHLTTriggerDecision.h:98
 AliHLTTriggerDecision.h:99
 AliHLTTriggerDecision.h:100
 AliHLTTriggerDecision.h:101
 AliHLTTriggerDecision.h:102
 AliHLTTriggerDecision.h:103
 AliHLTTriggerDecision.h:104
 AliHLTTriggerDecision.h:105
 AliHLTTriggerDecision.h:106
 AliHLTTriggerDecision.h:107
 AliHLTTriggerDecision.h:108
 AliHLTTriggerDecision.h:109
 AliHLTTriggerDecision.h:110
 AliHLTTriggerDecision.h:111
 AliHLTTriggerDecision.h:112
 AliHLTTriggerDecision.h:113
 AliHLTTriggerDecision.h:114
 AliHLTTriggerDecision.h:115
 AliHLTTriggerDecision.h:116
 AliHLTTriggerDecision.h:117
 AliHLTTriggerDecision.h:118
 AliHLTTriggerDecision.h:119
 AliHLTTriggerDecision.h:120
 AliHLTTriggerDecision.h:121
 AliHLTTriggerDecision.h:122
 AliHLTTriggerDecision.h:123
 AliHLTTriggerDecision.h:124
 AliHLTTriggerDecision.h:125
 AliHLTTriggerDecision.h:126
 AliHLTTriggerDecision.h:127
 AliHLTTriggerDecision.h:128
 AliHLTTriggerDecision.h:129
 AliHLTTriggerDecision.h:130
 AliHLTTriggerDecision.h:131
 AliHLTTriggerDecision.h:132
 AliHLTTriggerDecision.h:133
 AliHLTTriggerDecision.h:134
 AliHLTTriggerDecision.h:135
 AliHLTTriggerDecision.h:136
 AliHLTTriggerDecision.h:137
 AliHLTTriggerDecision.h:138
 AliHLTTriggerDecision.h:139
 AliHLTTriggerDecision.h:140
 AliHLTTriggerDecision.h:141
 AliHLTTriggerDecision.h:142
 AliHLTTriggerDecision.h:143
 AliHLTTriggerDecision.h:144
 AliHLTTriggerDecision.h:145
 AliHLTTriggerDecision.h:146
 AliHLTTriggerDecision.h:147
 AliHLTTriggerDecision.h:148
 AliHLTTriggerDecision.h:149
 AliHLTTriggerDecision.h:150
 AliHLTTriggerDecision.h:151
 AliHLTTriggerDecision.h:152
 AliHLTTriggerDecision.h:153
 AliHLTTriggerDecision.h:154
 AliHLTTriggerDecision.h:155
 AliHLTTriggerDecision.h:156
 AliHLTTriggerDecision.h:157
 AliHLTTriggerDecision.h:158
 AliHLTTriggerDecision.h:159
 AliHLTTriggerDecision.h:160
 AliHLTTriggerDecision.h:161
 AliHLTTriggerDecision.h:162
 AliHLTTriggerDecision.h:163
 AliHLTTriggerDecision.h:164
 AliHLTTriggerDecision.h:165
 AliHLTTriggerDecision.h:166
 AliHLTTriggerDecision.h:167
 AliHLTTriggerDecision.h:168
 AliHLTTriggerDecision.h:169
 AliHLTTriggerDecision.h:170
 AliHLTTriggerDecision.h:171
 AliHLTTriggerDecision.h:172
 AliHLTTriggerDecision.h:173
 AliHLTTriggerDecision.h:174
 AliHLTTriggerDecision.h:175
 AliHLTTriggerDecision.h:176
 AliHLTTriggerDecision.h:177
 AliHLTTriggerDecision.h:178
 AliHLTTriggerDecision.h:179
 AliHLTTriggerDecision.h:180
 AliHLTTriggerDecision.h:181
 AliHLTTriggerDecision.h:182
 AliHLTTriggerDecision.h:183
 AliHLTTriggerDecision.h:184
 AliHLTTriggerDecision.h:185