ROOT logo
#if !defined(__CINT__) || defined(__MAKECINT__)
#include "Riostream.h"
#include "TFile.h"
#include "TSystem.h"
#include "TRandom3.h"
#include "TMath.h"
#include "TParticle.h"
#include "AliESDEvent.h"
#include "AliESDtrack.h"
#include "AliHLTSystem.h"
#include "AliHLTConfiguration.h"
#include "AliHLTTriggerDecision.h"

#include "AliESDCaloCluster.h"
#endif

void CreateInput(const char* filename, Int_t numOfTracks, Double_t minPt, Double_t maxPt)
{
  gRandom->SetSeed(123);
  TFile* file = new TFile(filename, "RECREATE");
  AliESDEvent event;
  event.CreateStdContent();

  AliESDCaloCluster cluster;
  cluster = new AliESDCaloCluster();
  
  Double_t et = gRandom->Rndm() * (maxPt - minPt) + minPt;
  
  cluster.SetE(et);
  cluster.SetClusterType(AliESDCaloCluster::kPHOSCluster);
  //cluster.SetClusterType(nuOfmTracks);

  event.AddCaloCluster(&cluster);

  event.Write();
  delete file;
}

bool CheckIfOutputIsOk()
{
  const char* filename = "PhosClusterEnergyTriggerTestOutput.root";
  TFile file(filename, "READ");
  AliHLTTriggerDecision* decision1 = dynamic_cast<AliHLTTriggerDecision*>(file.Get("PhosClusterEnergyTrigger;2"));
  AliHLTTriggerDecision* decision2 = dynamic_cast<AliHLTTriggerDecision*>(file.Get("PhosClusterEnergyTrigger;3"));
  if (decision1 == NULL)
  {
    cerr << "ERROR: 'PhosClusterEnergyTrigger;1' AliHLTTriggerDecision object not found in file " << filename << endl;
    return false;
  }
  if (decision2 == NULL)
  {
    cerr << "ERROR: 'PhosClusterEnergyTrigger;2' AliHLTTriggerDecision object not found in file " << filename << endl;
    return false;
  }
  cout << "============================== Decision 1 ==============================" << endl;
  decision1->Print();
  if (decision1->Result() != 0)
  {
    cout << "FAILED result check. Expected a result of 0 for trigger decision 1 but received: " << decision1->Result() << endl;
    return false;
  }
  cout << "============================== Decision 2 ==============================" << endl;
  decision2->Print();
  if (decision2->Result() != 1)
  {
    cout << "FAILED result check. Expected a result of 1 for trigger decision 2 but received: " << decision2->Result() << endl;
    return false;
  }

  return true;
}

bool testPhosClusterEnergyTrigger()
{
  AliCDBManager * man = AliCDBManager::Instance();
  man->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
  man->SetRun(0);
  gSystem->Load("libAliHLTUtil.so");
  gSystem->Load("libAliHLTMUON.so");
  gSystem->Load("libAliHLTTRD.so");
  gSystem->Load("libAliHLTTrigger.so");
  CreateInput("PhosClusterEnergyTriggerTestInput1.root", -2, 0.1, 0.99);
  CreateInput("PhosClusterEnergyTriggerTestInput2.root", 0, 2.1, 4.0);
  AliHLTSystem sys;
  sys.LoadComponentLibraries("libAliHLTUtil.so");
  sys.LoadComponentLibraries("libAliHLTTrigger.so");
  const char* cmdline = " -datatype ROOTTOBJ 'HLT ' -datafile PhosClusterEnergyTriggerTestInput1.root -nextevent -datafile PhosClusterEnergyTriggerTestInput2.root";
  AliHLTConfiguration pub("pub", "ROOTFilePublisher", NULL, cmdline);
  AliHLTConfiguration proc("proc", "PhosClusterEnergyTrigger", "pub", "");
  AliHLTConfiguration sink("sink", "ROOTFileWriter", "proc", "-datafile PhosClusterEnergyTriggerTestOutput.root -concatenate-events");
  sys.BuildTaskList("sink");
  sys.Run(2);
  return CheckIfOutputIsOk();
}
#ifndef __MAKECINT__
int main(int /*argc*/, const char** /*argv*/)
{
  bool resultOk = testPhosClusterEnergyTrigger();
  if (not resultOk) return 1;
  return 0;
}
#endif // __MAKECINT__
 testPhosClusterEnergyTrigger.C:1
 testPhosClusterEnergyTrigger.C:2
 testPhosClusterEnergyTrigger.C:3
 testPhosClusterEnergyTrigger.C:4
 testPhosClusterEnergyTrigger.C:5
 testPhosClusterEnergyTrigger.C:6
 testPhosClusterEnergyTrigger.C:7
 testPhosClusterEnergyTrigger.C:8
 testPhosClusterEnergyTrigger.C:9
 testPhosClusterEnergyTrigger.C:10
 testPhosClusterEnergyTrigger.C:11
 testPhosClusterEnergyTrigger.C:12
 testPhosClusterEnergyTrigger.C:13
 testPhosClusterEnergyTrigger.C:14
 testPhosClusterEnergyTrigger.C:15
 testPhosClusterEnergyTrigger.C:16
 testPhosClusterEnergyTrigger.C:17
 testPhosClusterEnergyTrigger.C:18
 testPhosClusterEnergyTrigger.C:19
 testPhosClusterEnergyTrigger.C:20
 testPhosClusterEnergyTrigger.C:21
 testPhosClusterEnergyTrigger.C:22
 testPhosClusterEnergyTrigger.C:23
 testPhosClusterEnergyTrigger.C:24
 testPhosClusterEnergyTrigger.C:25
 testPhosClusterEnergyTrigger.C:26
 testPhosClusterEnergyTrigger.C:27
 testPhosClusterEnergyTrigger.C:28
 testPhosClusterEnergyTrigger.C:29
 testPhosClusterEnergyTrigger.C:30
 testPhosClusterEnergyTrigger.C:31
 testPhosClusterEnergyTrigger.C:32
 testPhosClusterEnergyTrigger.C:33
 testPhosClusterEnergyTrigger.C:34
 testPhosClusterEnergyTrigger.C:35
 testPhosClusterEnergyTrigger.C:36
 testPhosClusterEnergyTrigger.C:37
 testPhosClusterEnergyTrigger.C:38
 testPhosClusterEnergyTrigger.C:39
 testPhosClusterEnergyTrigger.C:40
 testPhosClusterEnergyTrigger.C:41
 testPhosClusterEnergyTrigger.C:42
 testPhosClusterEnergyTrigger.C:43
 testPhosClusterEnergyTrigger.C:44
 testPhosClusterEnergyTrigger.C:45
 testPhosClusterEnergyTrigger.C:46
 testPhosClusterEnergyTrigger.C:47
 testPhosClusterEnergyTrigger.C:48
 testPhosClusterEnergyTrigger.C:49
 testPhosClusterEnergyTrigger.C:50
 testPhosClusterEnergyTrigger.C:51
 testPhosClusterEnergyTrigger.C:52
 testPhosClusterEnergyTrigger.C:53
 testPhosClusterEnergyTrigger.C:54
 testPhosClusterEnergyTrigger.C:55
 testPhosClusterEnergyTrigger.C:56
 testPhosClusterEnergyTrigger.C:57
 testPhosClusterEnergyTrigger.C:58
 testPhosClusterEnergyTrigger.C:59
 testPhosClusterEnergyTrigger.C:60
 testPhosClusterEnergyTrigger.C:61
 testPhosClusterEnergyTrigger.C:62
 testPhosClusterEnergyTrigger.C:63
 testPhosClusterEnergyTrigger.C:64
 testPhosClusterEnergyTrigger.C:65
 testPhosClusterEnergyTrigger.C:66
 testPhosClusterEnergyTrigger.C:67
 testPhosClusterEnergyTrigger.C:68
 testPhosClusterEnergyTrigger.C:69
 testPhosClusterEnergyTrigger.C:70
 testPhosClusterEnergyTrigger.C:71
 testPhosClusterEnergyTrigger.C:72
 testPhosClusterEnergyTrigger.C:73
 testPhosClusterEnergyTrigger.C:74
 testPhosClusterEnergyTrigger.C:75
 testPhosClusterEnergyTrigger.C:76
 testPhosClusterEnergyTrigger.C:77
 testPhosClusterEnergyTrigger.C:78
 testPhosClusterEnergyTrigger.C:79
 testPhosClusterEnergyTrigger.C:80
 testPhosClusterEnergyTrigger.C:81
 testPhosClusterEnergyTrigger.C:82
 testPhosClusterEnergyTrigger.C:83
 testPhosClusterEnergyTrigger.C:84
 testPhosClusterEnergyTrigger.C:85
 testPhosClusterEnergyTrigger.C:86
 testPhosClusterEnergyTrigger.C:87
 testPhosClusterEnergyTrigger.C:88
 testPhosClusterEnergyTrigger.C:89
 testPhosClusterEnergyTrigger.C:90
 testPhosClusterEnergyTrigger.C:91
 testPhosClusterEnergyTrigger.C:92
 testPhosClusterEnergyTrigger.C:93
 testPhosClusterEnergyTrigger.C:94
 testPhosClusterEnergyTrigger.C:95
 testPhosClusterEnergyTrigger.C:96
 testPhosClusterEnergyTrigger.C:97
 testPhosClusterEnergyTrigger.C:98
 testPhosClusterEnergyTrigger.C:99
 testPhosClusterEnergyTrigger.C:100
 testPhosClusterEnergyTrigger.C:101
 testPhosClusterEnergyTrigger.C:102
 testPhosClusterEnergyTrigger.C:103