ROOT logo
// $Id$
//**************************************************************************
//* This file is property of and copyright by the ALICE HLT Project        *
//* ALICE Experiment at CERN, All rights reserved.                         *
//*                                                                        *
//* Primary Authors: Matthias.Richter@ift.uib.no                           *
//*                  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   AliESDHLTDecision.cxx
/// @author matthias.richter@ift.uib.no
/// @date   23 Nov 2009
/// @brief  Container for HLT decision within the ESD
///
/// A container for the HLT trigger decision stored in the ESD.
/// The HLT trigger decision is evaluated by the HLTGlobalTrigger component
/// according to different trigger inputs and the HLT trigger menu.
 
#include "AliESDHLTDecision.h"
#include <iostream>

using std::endl;
using std::cout;
ClassImp(AliESDHLTDecision)

AliESDHLTDecision::AliESDHLTDecision()
  : TNamed(fgkName, "")
  , fInputObjectInfo(TNamed::Class())
  , fTriggerItems()
  , fCounters()
{
  /// constructor
}

const char* AliESDHLTDecision::fgkName="HLTGlobalTrigger";

AliESDHLTDecision::AliESDHLTDecision(bool result, const char* description)
  : TNamed(fgkName, description)
  , fInputObjectInfo(TNamed::Class())
  , fTriggerItems()
  , fCounters()
{
  /// constructor
  SetBit(kTriggerResult, result);
}

AliESDHLTDecision::AliESDHLTDecision(const AliESDHLTDecision& src)
  : TNamed(src)
  , fInputObjectInfo(src.fInputObjectInfo)
  , fTriggerItems(src.fTriggerItems)
  , fCounters(src.fCounters)
{
  /// copy constructor, performs a deep copy
}

AliESDHLTDecision& AliESDHLTDecision::operator=(const AliESDHLTDecision& src)
{
  /// assignment operator
  TNamed::operator=(src);

  fInputObjectInfo=src.fInputObjectInfo;
  fTriggerItems=src.fTriggerItems;
  fCounters=src.fCounters;

  return *this;
}

AliESDHLTDecision::~AliESDHLTDecision()
{
  /// destructor
  fInputObjectInfo.Delete();
}

const char* AliESDHLTDecision::GetDescription() const
{
  /// get the description of the global trigger decision
  return GetTitle();
}

Bool_t    AliESDHLTDecision::IsTriggerFired(const char* name) const
{
  /// check whether the HLT global trigger has fired, or
  /// for a specific HLT trigger class if specified

  // TODO: the complete functionality must be implemented
  // The HLT global trigger evaluates the trigger decision
  // according to the trigger input and the trigger menu. It
  // supports priority groups, allowing items to take precedence
  // over others. The simplest scheme is an 'OR' of all items.
  // This is implemented here, and the full and correct handling
  // needs to be implemented.
  Option_t* option=this->GetOption();
  if (option==NULL || *option!='1') return kFALSE;

  if (name) {
    TString description=GetDescription();
    Int_t index=description.Index(name);
    if (index<0) return kFALSE;
    index+=strlen(name);
    if (index>=description.Length()) return kFALSE;
    if (description[index]!=0 && description[index]!=' ') return kFALSE;
  }
  return kTRUE;
}

void AliESDHLTDecision::Print(Option_t* option ) const
{
  /// Inherited from TObject. Print Information.
  TString opt(option);
  if (opt.Contains("compact"))
  {
    cout << "Global Trigger " << GetName() << ": result = " << TestBit(kTriggerResult) << endl;
    cout << "    Description = \"" << GetDescription() << "\"" << endl;
  }
  else if (opt.Contains("short"))
  {
    cout << "Global Trigger " << GetName() << ": result = " << TestBit(kTriggerResult) << endl;
    cout << "    Description = \"" << GetDescription() << "\"" << endl;
    cout << "#################### Input trigger decisions ####################" << endl;
    TIter next(&fInputObjectInfo);
    TObject* object=NULL;
    int count=0;
    while ((object=next())) {
      if (object->TestBit(kTriggerDecision)) {
	count++;
	cout << "Trigger " << object->GetName() << ": result = " << object->TestBit(kTriggerResult) << endl;
	cout << "    Description = \"" << object->GetTitle() << "\"" << endl;
      }
    }
    if (count==0) {
      cout << "(none)" << endl;
    }
  }
  else if (opt.Contains("counters"))
  {
    cout << "Counter\tValue" << endl;
    for (Int_t i = 0; i < fCounters.GetSize(); i++)
    {
      cout << i << "\t" << fCounters[i] << endl;
    }
    if (fCounters.GetSize() == 0)
    {
      cout << "(none)" << endl;
    }
  }
  else
  {
    TObject* object=NULL;
    cout << "Global Trigger " << GetName() << ": result = " << TestBit(kTriggerResult) << endl;
    cout << "    Description = \"" << GetDescription() << "\"" << endl;
    cout << "#################### Input trigger decisions ####################" << endl;
    TIter next(&fInputObjectInfo);
    int count=0;
    while ((object=next())) {
      if (object->TestBit(kTriggerDecision)) {
	count++;
	cout << "Trigger " << object->GetName() << ": result = " << object->TestBit(kTriggerResult) << endl;
	cout << "    Description = \"" << object->GetTitle() << "\"" << endl;
      }
    }
    if (count==0) {
      cout << "(none)" << endl;
    }
    cout << "###################### Other input objects ######################" << endl;
    count=0;
    next.Reset();
    while ((object=next())) {
      if (!object->TestBit(kTriggerDecision)) {
	cout << "------------------------ Input object " << count << " ------------------------" << endl;
	object->Print(option);
	count++;
      }
    }
    if (count==0) {
      cout << "(none)" << endl;
    }
    cout << "#################### Event class counters ####################" << endl;
    cout << "Counter\tValue" << endl;
    for (Int_t i = 0; i < fCounters.GetSize(); i++)
    {
      cout << i << "\t" << fCounters[i] << endl;
    }
    if (fCounters.GetSize() == 0)
    {
      cout << "(none)" << endl;
    }
  }
}

void AliESDHLTDecision::Copy(TObject &object) const
{
  /// Inherited from TObject. Copy this to the specified object.
  if (object.IsA() != IsA()) return;

  AliESDHLTDecision& target=dynamic_cast<AliESDHLTDecision&>(object);
  target=*this;
}

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