ROOT logo
// $Id$
/**************************************************************************
 * This file is property of and copyright by the ALICE HLT Project        *
 * ALICE Experiment at CERN, All rights reserved.                         *
 *                                                                        *
 * Primary Authors: Artur Szostak <artursz@iafrica.com>                   *
 *                  for The ALICE HLT Project.                            *
 *                                                                        *
 * 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.                  *
 **************************************************************************/

/// @file   AliHLTTriggerDecision.cxx
/// @author Artur Szostak <artursz@iafrica.com>
/// @date   21 Nov 2008
/// @brief  Implementation of the AliHLTTriggerDecision class.
/// 
/// The trigger decision class stores the HLT decision from an AliHLTTrigger component.

#include "AliHLTTriggerDecision.h"
#include "Riostream.h"

ClassImp(AliHLTTriggerDecision)


AliHLTTriggerDecision::AliHLTTriggerDecision() :
  TObject(),
  fName(),
  fDescription(),
  fTriggerDomain()
{
  // Default constructor.
}


AliHLTTriggerDecision::AliHLTTriggerDecision(const AliHLTTriggerDecision& obj) :
  TObject(obj),
  fName(obj.fName),
  fDescription(obj.fDescription),
  fTriggerDomain(obj.fTriggerDomain)
{
  // Copy constructor performs a deep copy.
  
  // The following is a backward compatibility fix to be able to read trigger
  // decisions recorded before the fix in AliRoot trunk rev. 35998 correctly.
  if (obj.TestBits(15) == 15)
  {
    ResetBit(15);  // We can clear 'this' objects bit because we performed a deep copy.
    SetBit(BIT(15));
  }
}


AliHLTTriggerDecision::AliHLTTriggerDecision(bool result, const char* name) :
  TObject(),
  fName(name),
  fDescription(),
  fTriggerDomain()
{
  // Constructor specifying the name and result of the trigger decision.
  
  Result(result);
}


AliHLTTriggerDecision::AliHLTTriggerDecision(
    bool result, const char* name,
    const AliHLTTriggerDomain& triggerDomain,
    const char* description
  ) :
  TObject(),
  fName(name),
  fDescription(description),
  fTriggerDomain(triggerDomain)
{
  // Constructor specifying all information fields.
  
  Result(result);
}


AliHLTTriggerDecision::~AliHLTTriggerDecision()
{
  // Default destructor.
}


bool AliHLTTriggerDecision::Result() const
{
  // Returns the result of the trigger decision.
  
  // The following is a backward compatibility fix to be able to read trigger
  // decisions recorded before the fix in AliRoot trunk rev. 35998 correctly.
  if (TestBits(15) == 15) return true;
  
  return TestBit(BIT(15)) == 1;
}


void AliHLTTriggerDecision::Result(bool value)
{
  // Sets the result of the trigger decision.
  SetBit(BIT(15), value);
  
  // The following is a backward compatibility fix to be able to read trigger
  // decisions recorded before the fix in AliRoot trunk rev. 35998 correctly.
  // It looks like bit 1 and 2 of fBits are not used in the case of the
  // AliHLTTriggerDecision class, so reset those to prevent "TestBits(15) == 15"
  // from succeeding in the "Result() const" method above.
  // We do not touch the other two bits because they could affect memory handling
  // and cleanup.
  if (TestBits(15) == 15) ResetBit(6);
}


void AliHLTTriggerDecision::ReadoutList(const AliHLTReadoutList& value)
{
  // Replaces the readout list in the trigger domain with the new value.
  
  AliHLTReadoutList fullReadout = ~ AliHLTReadoutList(0x0);
  fTriggerDomain.Remove(fullReadout);
  fTriggerDomain.Add(value);
}


void AliHLTTriggerDecision::Print(Option_t* option) const
{
  // Prints the contents of the trigger decision.
  
  cout << "Trigger (" << fName.Data() << ") result = " << Result() << endl;
  TString opt(option);
  if (opt.Contains("short")) return;
  cout << "Description = \"" << fDescription.Data() << "\"" << endl;
  fTriggerDomain.Print();
}

void AliHLTTriggerDecision::Copy(TObject &object) const
{
  // copy this to the specified object

  AliHLTTriggerDecision* pDecision=dynamic_cast<AliHLTTriggerDecision*>(&object);
  if (pDecision) {
    // copy members if target is a AliHLTTriggerDecision
    *pDecision=*this;
  }

  // copy the base class
  TObject::Copy(object);
}

TObject *AliHLTTriggerDecision::Clone(const char */*newname*/) const
{
  // create a new clone, classname is ignored

  return new AliHLTTriggerDecision(*this);
}

Option_t *AliHLTTriggerDecision::GetOption() const
{
  // Return the result of the trigger.
  // "0" or "1"
  if (Result()) return "1";
  return "0";
}


AliHLTTriggerDecision& AliHLTTriggerDecision::operator = (const AliHLTTriggerDecision& obj)
{
  // Assignment operator performs a deep copy.
  
  if (this == &obj) return *this;
  
  TObject::operator = (obj);
  // The following is a backward compatibility fix to be able to read trigger
  // decisions recorded before the fix in AliRoot trunk rev. 35998 correctly.
  if (obj.TestBits(15) == 15)
  {
    ResetBit(15);  // We can clear 'this' objects bit because we performed a deep copy.
    SetBit(BIT(15));
  }
  
  fName = obj.fName;
  fDescription = obj.fDescription;
  fTriggerDomain = obj.fTriggerDomain;
  return *this;
}


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