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   AliHLTGlobalTriggerDecision.cxx
/// @author Artur Szostak <artursz@iafrica.com>
/// @date   26 Nov 2008
/// @brief  Implementation of the AliHLTGlobalTriggerDecision class.
/// 
/// The global trigger decision class stores the global HLT decision.

#include "AliHLTGlobalTriggerDecision.h"
#include "Riostream.h"
#include "TClass.h"
#include "AliHLTMisc.h"
#include "AliHLTLogging.h"

ClassImp(AliHLTGlobalTriggerDecision)


namespace {
const char* kgNULLObjMessage =
  "The global decision object contains NULL pointers in the fContributingTriggers array."
  " This is unexpected and probably indicates a serious problem.";
const char* kgSplitModeMessage =
  "The global decision object contains NULL pointers in the fInputObjects array."
  " This means that it was written to a TTree branch with the split-mode > 0."
  " This causes the custom streamer to be skipped and prevents the"
  " fInputObjects array to be setup properly. In addition this can cause memory leaks.";
};


AliHLTGlobalTriggerDecision::AliHLTGlobalTriggerDecision() :
AliHLTTriggerDecision(0, "HLTGlobalTrigger"),
  fContributingTriggers(AliHLTTriggerDecision::Class()),
  fInputObjects(),
  fCounters()
{
  // Default constructor.
  
  // We set the ownership to false since the objects are deleted manually by this
  // class in DeleteInputObjects().
  fInputObjects.SetOwner(kFALSE);
}


AliHLTGlobalTriggerDecision::AliHLTGlobalTriggerDecision(
    bool result, const AliHLTTriggerDomain& triggerDomain, const char* description
  ) :
  AliHLTTriggerDecision(result, "HLTGlobalTrigger", triggerDomain, description),
  fContributingTriggers(AliHLTTriggerDecision::Class()),
  fInputObjects(),
  fCounters()
{
  // Constructor specifying multiple information fields.
  
  Result(result);
  // We set the ownership to false since the objects are deleted manually by this
  // class in DeleteInputObjects().
  fInputObjects.SetOwner(kFALSE);
}


AliHLTGlobalTriggerDecision::~AliHLTGlobalTriggerDecision()
{
  // Default destructor.
  
  DeleteInputObjects();
}


void AliHLTGlobalTriggerDecision::Print(Option_t* option) const
{
  // Prints the contents of the trigger decision.
  
  TString opt(option);
  if (opt.Contains("compact"))
  {
    cout << "Global ";
    AliHLTTriggerDecision::Print("");
  }
  else if (opt.Contains("short"))
  {
    cout << "Global ";
    AliHLTTriggerDecision::Print(option);
    cout << "#################### Input trigger decisions ####################" << endl;
    for (Int_t i = 0; i < NumberOfTriggerInputs(); i++)
    {
      if (TriggerInput(i) != NULL)
      {
        TriggerInput(i)->Print(option);
      }
      else
      {
        AliHLTLogging log;
        log.LoggingVarargs(kHLTLogError, this->ClassName(), FUNCTIONNAME(), __FILE__, __LINE__, kgNULLObjMessage);
      }
    }
    if (NumberOfTriggerInputs() == 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
  {
    cout << "Global ";
    AliHLTTriggerDecision::Print(option);
    cout << "#################### Input trigger decisions ####################" << endl;
    for (Int_t i = 0; i < NumberOfTriggerInputs(); i++)
    {
      cout << "-------------------- Input trigger decision " << i << " --------------------" << endl;
      if (TriggerInput(i) != NULL)
      {
        TriggerInput(i)->Print(option);
      }
      else
      {
        AliHLTLogging log;
        log.LoggingVarargs(kHLTLogError, this->ClassName(), FUNCTIONNAME(), __FILE__, __LINE__, kgNULLObjMessage);
      }
    }
    if (NumberOfTriggerInputs() == 0)
    {
      cout << "(none)" << endl;
    }
    cout << "###################### Other input objects ######################" << endl;
    for (Int_t i = 0; i < NumberOfInputObjects(); i++)
    {
      cout << "------------------------ Input object " << i << " ------------------------" << endl;
      if (InputObject(i) != NULL)
      {
        InputObject(i)->Print(option);
      }
      else
      {
        AliHLTLogging log;
        log.LoggingVarargs(kHLTLogError, this->ClassName(), FUNCTIONNAME(), __FILE__, __LINE__, kgSplitModeMessage);
      }
    }
    if (NumberOfInputObjects() == 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 AliHLTGlobalTriggerDecision::Copy(TObject &object) const
{
  // copy this to the specified object

  if (object.IsA() == AliHLTMisc::Instance().IsAliESDHLTDecision()) {
    AliHLTMisc::Instance().Copy(this, &object);
    return;
  }

  AliHLTGlobalTriggerDecision* pDecision=dynamic_cast<AliHLTGlobalTriggerDecision*>(&object);
  if (pDecision)
  {
    // copy members if target is a AliHLTGlobalTriggerDecision
    *pDecision=*this;
  }
  // copy the base class
  AliHLTTriggerDecision::Copy(object);
}

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

  return new AliHLTGlobalTriggerDecision(*this);
}

AliHLTGlobalTriggerDecision::AliHLTGlobalTriggerDecision(const AliHLTGlobalTriggerDecision& src) :
  AliHLTTriggerDecision(src),
  fContributingTriggers(AliHLTTriggerDecision::Class()),
  fInputObjects(),
  fCounters()
{
  // Copy constructor performs a deep copy.
  
  // We set the ownership to false since the objects are deleted manually by this
  // class in DeleteInputObjects().
  fInputObjects.SetOwner(kFALSE);
  
  *this=src;
}

AliHLTGlobalTriggerDecision& AliHLTGlobalTriggerDecision::operator=(const AliHLTGlobalTriggerDecision& src)
{
  // assignment operator performs a deep copy.

  fContributingTriggers.Delete();
  for (int triggerInput=0; triggerInput<src.NumberOfTriggerInputs(); triggerInput++) {
    const AliHLTTriggerDecision* pTriggerObject=src.TriggerInput(triggerInput);
    if (pTriggerObject != NULL)
    {
      // the AddTriggerInput function uses the copy constructor and
      // makes a new object from the reference
      AddTriggerInput(*pTriggerObject);
    }
    else
    {
      AliHLTLogging log;
      log.LoggingVarargs(kHLTLogError, this->ClassName(), FUNCTIONNAME(), __FILE__, __LINE__, kgNULLObjMessage);
    }
  }

  DeleteInputObjects();
  for (int inputObject=0; inputObject<src.NumberOfInputObjects(); inputObject++) {
    const TObject* pInputObject=src.InputObject(inputObject);
    if (pInputObject != NULL)
    {
      // the AddInputObject function uses Clone() and
      // makes a new object from the reference
      AddInputObject(pInputObject);
    }
    else
    {
      AliHLTLogging log;
      log.LoggingVarargs(kHLTLogError, this->ClassName(), FUNCTIONNAME(), __FILE__, __LINE__, kgSplitModeMessage);
    }
  }
  
  SetCounters(src.Counters());

  return *this;
}


void AliHLTGlobalTriggerDecision::AddInputObject(const TObject* object)
{
  // Adds an object to the list of input objects considered in the global trigger.
  
  if (object == NULL) return;
  TObject* obj = object->Clone();
  obj->SetBit(kCanDelete);
  fInputObjects.Add(obj);
}


void AliHLTGlobalTriggerDecision::AddInputObjectRef(TObject* object, bool own)
{
  // Adds an object to the list of input objects considered in the global trigger.
  
  if (object == NULL) return;
  if (own)
  {
    object->SetBit(kCanDelete);
  }
  else
  {
    object->ResetBit(kCanDelete);
  }
  fInputObjects.Add(object);
}


void AliHLTGlobalTriggerDecision::SetCounters(const TArrayL64& counters, Long64_t eventCount)
{
  // Sets the counter array.
  // If the number of events is specified, an additional counter is added at the end.
  fCounters = counters;
  if (eventCount>=0) {
    int size=fCounters.GetSize();
    fCounters.Set(size+1);
    fCounters[size]=eventCount;
  }
}


void AliHLTGlobalTriggerDecision::Clear(Option_t* option)
{
  // Clears the trigger domain and resets the decision result.
  
  AliHLTTriggerDecision::Clear(option);
  // because of TClonesArray members in AliHLTTriggerDecision it is not
  // enough to call Clear. Delete will also invoke the destructor of the
  // elements which is necessary to do the proper internal cleanup
  fContributingTriggers.Delete();
  DeleteInputObjects();
  fCounters.Set(0);
}


TObject* AliHLTGlobalTriggerDecision::FindObject(const char* name) const
{
  // Finds the first object in fContributingTriggers or fInputObjects that has the given name.
  
  TObject* result = fContributingTriggers.FindObject(name);
  if (result != NULL) return result;
  return fInputObjects.FindObject(name);
}


TObject* AliHLTGlobalTriggerDecision::FindObject(const TObject* obj) const
{
  // Finds the first object in fContributingTriggers or fInputObjects that matches
  // based on a IsEqual() comparison.
  
  TObject* result = fContributingTriggers.FindObject(obj);
  if (result != NULL) return result;
  return fInputObjects.FindObject(obj);
}


void AliHLTGlobalTriggerDecision::DeleteInputObjects()
{
  // Deletes the objects marked with kCanDelete in fInputObjects and clears the array.
  
  for (Int_t i = 0; i < NumberOfInputObjects(); i++)
  {
    TObject* obj = fInputObjects.UncheckedAt(i);
    if (obj == NULL)
    {
      AliHLTLogging log;
      log.LoggingVarargs(kHLTLogError, this->ClassName(), FUNCTIONNAME(), __FILE__, __LINE__, kgSplitModeMessage);
      continue;
    }
    if (obj->TestBit(kCanDelete)) delete obj;
  }
  fInputObjects.Clear();
}


void AliHLTGlobalTriggerDecision::MarkInputObjectsAsOwned()
{
  // Marks all input objects as owned.

  // We must mark all the objects that were read into fInputObjects as owned.
  // Otherwise we will have a memory leak in DeleteInputObjects.
  bool loggedWarning = false;
  for (Int_t i = 0; i < fInputObjects.GetEntriesFast(); ++i)
  {
    TObject* obj = fInputObjects.UncheckedAt(i);
    // We must check if the object pointer is NULL. This could happen because the
    // class dictionary has not been loaded, so the ReadClassBuffer streamer just
    // silently skips the object but fills the fInputObjects array with a NULL pointer.
    if (obj == NULL)
    {
      fInputObjects.RemoveAt(i);
      if (not loggedWarning)
      {
        AliHLTLogging log;
        log.LoggingVarargs(kHLTLogWarning, this->ClassName(), FUNCTIONNAME(), __FILE__, __LINE__,
          "The global trigger decision contains NULL pointers in the input object array."
          " This is probably due to the fact that some class dictionaries have not been loaded."
          " Will just remove the NULL pointer and continue."
        );
        loggedWarning = true;  // Prevent multiple warnings, one is enough.
      }
    }
    else
    {
      obj->SetBit(kCanDelete);
    }
  }
  // Compress the input object array to prevent any seg-faults due to access of
  // NULL pointers if the objects were not loaded due to missing dictionaries.
  fInputObjects.Compress();
}

#if ROOT_VERSION_CODE < ROOT_VERSION(5,26,0)
void AliHLTGlobalTriggerDecision::Streamer(TBuffer &b)
{
   // Stream an object of class AliHLTGlobalTriggerDecision.

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