ROOT logo
// $Id$
/**
 * @file print-ESD-HLTdecision.C
 * @brief Print HLT decisions per event of ESD
 *
 * <pre>
 * Usage: aliroot -b -q print-ESD-HLTdecision.C
 * </pre>
 *
 * The input file can be a file on Grid like e.g.
 * "alien:///alice/data/2009/LHC09d/000104321/ESDs/pass5/09000104321018.30/AliESDs.root"
 * In that case you need a valid token in order to connect to the Grid.
 * Use 'alien-token-init' from your alien installation.
 *
 * @author Matthias.Richter@ift.uib.no
 * @ingroup alihlt_programs
 */
int print_ESD_HLTdecision(const char* esdFileName="AliESDs.root",
			   int minEvent=0, int maxEvent=-1)
{

  TString strfile=esdFileName;
  if (strfile.Contains("://") && !strfile.Contains("local://")) {
    TGrid::Connect("alien");
  }

  TFile* esdFile=NULL;
  if (esdFileName && esdFileName[0]!=0) esdFile=TFile::Open(esdFileName);
  if (!esdFileName || esdFileName[0]==0 || !esdFile || esdFile->IsZombie()) {
    if (esdFileName && esdFileName[0]!=0)
      cerr << "can not open esd file " << esdFileName << endl;
    else
      cerr << "print-ESD-HLTdecision.C Print HLT decisions per event of ESD" << endl;
    cerr << "===============================================================" << endl;
    cerr << "usage: aliroot -b -q -l print-ESD-HLTdecision.C'(\"AliESDs.root\" " << endl;
    cerr << "                                                 minEvent, maxEvent)'" << endl << endl;
    cerr << "  Parameter:" << endl;
    cerr << "       esdFileName      default \"AliESDs.root\"" << endl;
    cerr << "       minEvent         first event (optional)" << endl;
    cerr << "       maxEvent         last event (optional)" << endl << endl;
    cerr << "  The input file can be a file on Grid like e.g." << endl;
    cerr << "  \"alien:///alice/data/2009/LHC09d/000104321/ESDs/pass5/09000104321018.30/AliESDs.root\"" << endl;
    cerr << "===============================================================" << endl;
    return -1;
  }
  TTree* pTree=NULL;
  esdFile->GetObject("esdTree", pTree);
  if (!pTree) {
    cerr << "can not find ESD tree" << endl;
    return -1;
  }

  AliESDEvent* esd=new AliESDEvent;
  esd->CreateStdContent();
  esd->ReadFromTree(pTree);

  TTree* pHLTTree=NULL;
  esdFile->GetObject("HLTesdTree", pHLTTree);
  if (!pHLTTree) {
    cerr << "can not find HLT ESD tree" << endl;
    return -1;
  }

  if (pTree->GetEntries() != pHLTTree->GetEntries()) {
    cerr << "entries differ: ESD tree " << pTree->GetEntries() << "    HLT ESD tree " << pHLTTree->GetEntries() << endl;
  }
  
  AliESDEvent* HLTesd=new AliESDEvent;
  HLTesd->CreateStdContent();
  HLTesd->ReadFromTree(pHLTTree);

  for (int event=minEvent; 
       event<pTree->GetEntries() && (maxEvent<minEvent || event<=maxEvent);
       event++) {
    pTree->GetEvent(event);
    pHLTTree->GetEvent(event);
    cout << "=====================  event " << event << "  ==========================" << endl;
    cout << "\t ESD: # in file: " << esd->GetEventNumberInFile() << "   time stamp (UCT): " << esd->GetTimeStamp() << endl;
    cout << "\t orbit no (offline/hlt): " <<  esd->GetOrbitNumber() << "/" << HLTesd->GetOrbitNumber() << endl;
    cout << "\t bunch crossing (offline/hlt): " << esd->GetBunchCrossNumber() << "/" << HLTesd->GetBunchCrossNumber() << endl;
    cout << "\t tracks (offline/hlt):\t " << esd->GetNumberOfTracks() << "/"<< HLTesd->GetNumberOfTracks() << endl;
    cout << "\t hltESD content:" << endl;
    cout << "\t    fired triggers:\t" << HLTesd->GetFiredTriggerClasses() << endl;
    cout << "\t    trigger mask:\t 0x" << hex << HLTesd->GetTriggerMask() << dec << endl;
    cout << "\t    time stamp (UCT):\t " << HLTesd->GetTimeStamp() << endl;
    TObject* decision=HLTesd->GetHLTTriggerDecision();
    if (decision) decision->Print();
    else cout << "   no HLT decision found" << endl;
  }
  return 0;
}
 print-ESD-HLTdecision.C:1
 print-ESD-HLTdecision.C:2
 print-ESD-HLTdecision.C:3
 print-ESD-HLTdecision.C:4
 print-ESD-HLTdecision.C:5
 print-ESD-HLTdecision.C:6
 print-ESD-HLTdecision.C:7
 print-ESD-HLTdecision.C:8
 print-ESD-HLTdecision.C:9
 print-ESD-HLTdecision.C:10
 print-ESD-HLTdecision.C:11
 print-ESD-HLTdecision.C:12
 print-ESD-HLTdecision.C:13
 print-ESD-HLTdecision.C:14
 print-ESD-HLTdecision.C:15
 print-ESD-HLTdecision.C:16
 print-ESD-HLTdecision.C:17
 print-ESD-HLTdecision.C:18
 print-ESD-HLTdecision.C:19
 print-ESD-HLTdecision.C:20
 print-ESD-HLTdecision.C:21
 print-ESD-HLTdecision.C:22
 print-ESD-HLTdecision.C:23
 print-ESD-HLTdecision.C:24
 print-ESD-HLTdecision.C:25
 print-ESD-HLTdecision.C:26
 print-ESD-HLTdecision.C:27
 print-ESD-HLTdecision.C:28
 print-ESD-HLTdecision.C:29
 print-ESD-HLTdecision.C:30
 print-ESD-HLTdecision.C:31
 print-ESD-HLTdecision.C:32
 print-ESD-HLTdecision.C:33
 print-ESD-HLTdecision.C:34
 print-ESD-HLTdecision.C:35
 print-ESD-HLTdecision.C:36
 print-ESD-HLTdecision.C:37
 print-ESD-HLTdecision.C:38
 print-ESD-HLTdecision.C:39
 print-ESD-HLTdecision.C:40
 print-ESD-HLTdecision.C:41
 print-ESD-HLTdecision.C:42
 print-ESD-HLTdecision.C:43
 print-ESD-HLTdecision.C:44
 print-ESD-HLTdecision.C:45
 print-ESD-HLTdecision.C:46
 print-ESD-HLTdecision.C:47
 print-ESD-HLTdecision.C:48
 print-ESD-HLTdecision.C:49
 print-ESD-HLTdecision.C:50
 print-ESD-HLTdecision.C:51
 print-ESD-HLTdecision.C:52
 print-ESD-HLTdecision.C:53
 print-ESD-HLTdecision.C:54
 print-ESD-HLTdecision.C:55
 print-ESD-HLTdecision.C:56
 print-ESD-HLTdecision.C:57
 print-ESD-HLTdecision.C:58
 print-ESD-HLTdecision.C:59
 print-ESD-HLTdecision.C:60
 print-ESD-HLTdecision.C:61
 print-ESD-HLTdecision.C:62
 print-ESD-HLTdecision.C:63
 print-ESD-HLTdecision.C:64
 print-ESD-HLTdecision.C:65
 print-ESD-HLTdecision.C:66
 print-ESD-HLTdecision.C:67
 print-ESD-HLTdecision.C:68
 print-ESD-HLTdecision.C:69
 print-ESD-HLTdecision.C:70
 print-ESD-HLTdecision.C:71
 print-ESD-HLTdecision.C:72
 print-ESD-HLTdecision.C:73
 print-ESD-HLTdecision.C:74
 print-ESD-HLTdecision.C:75
 print-ESD-HLTdecision.C:76
 print-ESD-HLTdecision.C:77
 print-ESD-HLTdecision.C:78
 print-ESD-HLTdecision.C:79
 print-ESD-HLTdecision.C:80
 print-ESD-HLTdecision.C:81
 print-ESD-HLTdecision.C:82
 print-ESD-HLTdecision.C:83
 print-ESD-HLTdecision.C:84
 print-ESD-HLTdecision.C:85
 print-ESD-HLTdecision.C:86
 print-ESD-HLTdecision.C:87
 print-ESD-HLTdecision.C:88
 print-ESD-HLTdecision.C:89
 print-ESD-HLTdecision.C:90
 print-ESD-HLTdecision.C:91
 print-ESD-HLTdecision.C:92