]> git.uio.no Git - u/mrichter/AliRoot.git/blob - HLT/programs/print-ESD-HLTdecision.C
a809e6598d0842e48b5875aa5ab22d9e20d635d1
[u/mrichter/AliRoot.git] / HLT / programs / print-ESD-HLTdecision.C
1 // $Id$
2 /**
3  * @file print-ESD-HLTdecision.C
4  * @brief Print HLT decisions per event of ESD
5  *
6  * <pre>
7  * Usage: aliroot -b -q print-ESD-HLTdecision.C
8  * </pre>
9  *
10  * The input file can be a file on Grid like e.g.
11  * "alien:///alice/data/2009/LHC09d/000104321/ESDs/pass5/09000104321018.30/AliESDs.root"
12  * In that case you need a valid token in order to connect to the Grid.
13  * Use 'alien-token-init' from your alien installation.
14  *
15  * @author Matthias.Richter@ift.uib.no
16  * @ingroup alihlt_programs
17  */
18 int print_ESD_HLTdecision(const char* esdFileName="AliESDs.root",
19                            int minEvent=0, int maxEvent=-1)
20 {
21
22   TString strfile=esdFileName;
23   if (strfile.Contains("://") && !strfile.Contains("local://")) {
24     TGrid::Connect("alien");
25   }
26
27   TFile* esdFile=NULL;
28   if (esdFileName && esdFileName[0]!=0) esdFile=TFile::Open(esdFileName);
29   if (!esdFileName || esdFileName[0]==0 || !esdFile || esdFile->IsZombie()) {
30     if (esdFileName && esdFileName[0]!=0)
31       cerr << "can not open esd file " << esdFileName << endl;
32     else
33       cerr << "print-ESD-HLTdecision.C Print HLT decisions per event of ESD" << endl;
34     cerr << "===============================================================" << endl;
35     cerr << "usage: aliroot -b -q -l print-ESD-HLTdecision.C'(\"AliESDs.root\" " << endl;
36     cerr << "                                                 minEvent, maxEvent)'" << endl << endl;
37     cerr << "  Parameter:" << endl;
38     cerr << "       esdFileName      default \"AliESDs.root\"" << endl;
39     cerr << "       minEvent         first event (optional)" << endl;
40     cerr << "       maxEvent         last event (optional)" << endl << endl;
41     cerr << "  The input file can be a file on Grid like e.g." << endl;
42     cerr << "  \"alien:///alice/data/2009/LHC09d/000104321/ESDs/pass5/09000104321018.30/AliESDs.root\"" << endl;
43     cerr << "===============================================================" << endl;
44     return -1;
45   }
46   TTree* pTree=NULL;
47   esdFile->GetObject("esdTree", pTree);
48   if (!pTree) {
49     cerr << "can not find ESD tree" << endl;
50     return -1;
51   }
52
53   AliESDEvent* esd=new AliESDEvent;
54   esd->CreateStdContent();
55   esd->ReadFromTree(pTree);
56
57   TTree* pHLTTree=NULL;
58   esdFile->GetObject("HLTesdTree", pHLTTree);
59   if (!pHLTTree) {
60     cerr << "can not find HLT ESD tree" << endl;
61     return -1;
62   }
63
64   if (pTree->GetEntries() != pHLTTree->GetEntries()) {
65     cerr << "entries differ: ESD tree " << pTree->GetEntries() << "    HLT ESD tree " << pHLTTree->GetEntries() << endl;
66   }
67   
68   AliESDEvent* HLTesd=new AliESDEvent;
69   HLTesd->CreateStdContent();
70   HLTesd->ReadFromTree(pHLTTree);
71
72   for (int event=minEvent; 
73        event<pTree->GetEntries() && (maxEvent<minEvent || event<=maxEvent);
74        event++) {
75     pTree->GetEvent(event);
76     pHLTTree->GetEvent(event);
77     cout << "=====================  event " << event << "  ==========================" << endl;
78     cout << "\t ESD: # in file: " << esd->GetEventNumberInFile() << "   time stamp (UCT): " << esd->GetTimeStamp() << endl;
79     cout << "\t orbit no (offline/hlt): " <<  esd->GetOrbitNumber() << "/" << HLTesd->GetOrbitNumber() << endl;
80     cout << "\t bunch crossing (offline/hlt): " << esd->GetBunchCrossNumber() << "/" << HLTesd->GetBunchCrossNumber() << endl;
81     cout << "\t tracks (offline/hlt):\t " << esd->GetNumberOfTracks() << "/"<< HLTesd->GetNumberOfTracks() << endl;
82     cout << "\t hltESD content:" << endl;
83     cout << "\t    fired triggers:\t" << HLTesd->GetFiredTriggerClasses() << endl;
84     cout << "\t    trigger mask:\t 0x" << hex << HLTesd->GetTriggerMask() << dec << endl;
85     cout << "\t    time stamp (UCT):\t " << HLTesd->GetTimeStamp() << endl;
86     TObject* decision=HLTesd->GetHLTTriggerDecision();
87     if (decision) decision->Print();
88     else cout << "   no HLT decision found" << endl;
89   }
90   return 0;
91 }