]> git.uio.no Git - u/mrichter/AliRoot.git/blob - HLT/programs/print-ESD-HLTdecision.C
-Added separeate dXY and dZ histograms
[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->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;
41     cerr << "===============================================================" << endl;
42     return -1;
43   }
44   TTree* pTree=NULL;
45   esdFile->GetObject("esdTree", pTree);
46   if (!pTree) {
47     cerr << "can not find ESD tree" << endl;
48     return -1;
49   }
50
51   AliESDEvent* esd=new AliESDEvent;
52   esd->CreateStdContent();
53   esd->ReadFromTree(pTree);
54
55   TTree* pHLTTree=NULL;
56   esdFile->GetObject("HLTesdTree", pHLTTree);
57   if (!pHLTTree) {
58     cerr << "can not find HLT ESD tree" << endl;
59     return -1;
60   }
61
62   if (pTree->GetEntries() != pHLTTree->GetEntries()) {
63     cerr << "entries differ: ESD tree " << pTree->GetEntries() << "    HLT ESD tree " << pHLTTree->GetEntries() << endl;
64   }
65   
66   AliESDEvent* HLTesd=new AliESDEvent;
67   HLTesd->CreateStdContent();
68   HLTesd->ReadFromTree(pHLTTree);
69
70   for (int event=minEvent; 
71        event<pTree->GetEntries() && (maxEvent<minEvent || event<=maxEvent);
72        event++) {
73     pTree->GetEvent(event);
74     pHLTTree->GetEvent(event);
75     cout << "=====================  event " << event << "  ==========================" << endl;
76     cout << "\t ESD: # in file: " << esd->GetEventNumberInFile() << "   time stamp (UCT): " << esd->GetTimeStamp() << endl;
77     cout << "\t orbit no (offline/hlt): " <<  esd->GetOrbitNumber() << "/" << HLTesd->GetOrbitNumber() << endl;
78     cout << "\t bunch crossing (offline/hlt): " << esd->GetBunchCrossNumber() << "/" << HLTesd->GetBunchCrossNumber() << endl;
79     cout << "\t tracks (offline/hlt):\t " << esd->GetNumberOfTracks() << "/"<< HLTesd->GetNumberOfTracks() << endl;
80     cout << "\t hltESD content:" << endl;
81     cout << "\t    fired triggers:\t" << HLTesd->GetFiredTriggerClasses() << endl;
82     cout << "\t    trigger mask:\t 0x" << hex << HLTesd->GetTriggerMask() << dec << endl;
83     cout << "\t    time stamp (UCT):\t " << HLTesd->GetTimeStamp() << endl;
84     TObject* decision=HLTesd->GetHLTTriggerDecision();
85     if (decision) decision->Print();
86     else cout << "   no HLT decision found" << endl;
87   }
88   return 0;
89 }