ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitAna/TreeMod/src/AnaFwkMod.cc
Revision: 1.4
Committed: Mon Mar 9 17:07:05 2009 UTC (16 years, 1 month ago) by loizides
Content type: text/plain
Branch: MAIN
Changes since 1.3: +105 -2 lines
Log Message:
Begin of allevent processing. Not finished yet but it compiles.

File Contents

# User Rev Content
1 loizides 1.4 // $Id: AnaFwkMod.cc,v 1.3 2008/11/25 15:57:49 loizides Exp $
2 loizides 1.1
3     #include "MitAna/TreeMod/interface/AnaFwkMod.h"
4     #include "MitAna/DataUtil/interface/Debug.h"
5 loizides 1.4 #include <TFile.h>
6 loizides 1.1 #include <TH1D.h>
7     #include <TStopwatch.h>
8 loizides 1.4 #include <TTree.h>
9 loizides 1.1
10     using namespace mithep;
11    
12     ClassImp(mithep::AnaFwkMod)
13    
14     //--------------------------------------------------------------------------------------------------
15     AnaFwkMod::AnaFwkMod(const char *name, const char *title) :
16     BaseMod(name,title),
17     fSWtotal(0),
18 loizides 1.4 fSWevent(0),
19     fAllHeaders(0,"AllEventHeaders"),
20     fAllHeadTree(0),
21     fAllEventHeader(0),
22     fReload(kFALSE),
23     fCurEnt(-2)
24 loizides 1.1 {
25     // Constructor.
26     }
27    
28     //--------------------------------------------------------------------------------------------------
29 loizides 1.4 void AnaFwkMod::BeginRun()
30     {
31     // Get HLT tree and set branches if new file was opened. Read next entry in HLT key
32     // depending on entry in RunInfo.
33    
34     if (fReload) {
35    
36     // reset to be (re-)loaded variables
37     fReload = 0;
38     fAllHeadTree = 0;
39     fAllEventHeader = 0;
40     fCurEnt = 0;
41    
42     // get current file
43     TFile *file = GetCurrentFile();
44     if (!file)
45     return;
46    
47     // get HLT tree
48     fAllHeadTree = dynamic_cast<TTree*>(file->Get(fAllHeadTreeName));
49     if (!fAllHeadTree) {
50     return;
51     }
52     }
53    
54     // get HLT trigger name branch
55     if (fAllHeadTree->GetBranch(fAllHeadBrName)) {
56     fAllHeadTree->SetBranchAddress(fAllHeadBrName, &fAllEventHeader);
57     } else {
58     SendError(kWarning, "BeginRun",
59     "Can not find branch with name %s in tree %s",
60     fAllHeadBrName.Data(), fAllHeadTreeName.Data());
61     return;
62     }
63     }
64    
65     //--------------------------------------------------------------------------------------------------
66     void AnaFwkMod::CopyAllEventHeaders()
67     {
68     // Deal with the headers from all events if needed.
69    
70     fAllHeaders.Reset();
71    
72     const EventHeader *curev = GetEventHeader();
73     if (!curev) {
74     SendError(kWarning, "CopyAllEventHeaders", "Can not obtain current event");
75     return;
76     }
77    
78     if (fAllHeadTree) {
79     fAllHeadTree->GetEntry(fCurEnt++);
80     while(fAllEventHeader->IsRemoved()) {
81     EventHeader *eh = fAllHeaders.AddNew();
82     eh->SetRunNum(fAllEventHeader->RunNum());
83     eh->SetEvtNum(fAllEventHeader->EvtNum());
84     eh->SetLumiSec(fAllEventHeader->LumiSec());
85     eh->SetIsRemoved(fAllEventHeader->RunEntry());
86     eh->SetRunEntry(fAllEventHeader->IsRemoved());
87     fAllHeadTree->GetEntry(fCurEnt++);
88     }
89     if ((fAllEventHeader->RunNum()!=curev->RunNum()) ||
90     (fAllEventHeader->EvtNum()!=curev->EvtNum()) ||
91     (fAllEventHeader->LumiSec()!=curev->LumiSec()) ||
92     (fAllEventHeader->RunEntry()!=curev->RunEntry())) {
93     SendError(kWarning, "CopyAllEventHeaders",
94     "Event header information inconsistent: %d==%d, %d==%d, %d==%d, %d==%d",
95     fAllEventHeader->RunNum(), curev->RunNum(),
96     fAllEventHeader->EvtNum(), curev->EvtNum(),
97     fAllEventHeader->LumiSec(), curev->LumiSec(),
98     fAllEventHeader->RunEntry(), curev->RunEntry());
99     return;
100     }
101     }
102     }
103    
104     //--------------------------------------------------------------------------------------------------
105     Bool_t AnaFwkMod::Notify()
106     {
107     // Make sure to get the new "AllEvents" tree when the file changes.
108    
109     fReload = kTRUE;
110     return kTRUE;
111     }
112    
113     //--------------------------------------------------------------------------------------------------
114 loizides 1.1 void AnaFwkMod::Process()
115     {
116     // Do event counting and print out timing information.
117    
118 loizides 1.4
119    
120 loizides 1.1 // counting events
121 loizides 1.3 IncNEventsProcessed();
122 loizides 1.1
123     // check if printout should be done
124     Bool_t doPrint = 0;
125    
126     MDB(kAnalysis, 4) {
127 loizides 1.3 if (GetNEventsProcessed() % 1000 == 0)
128 loizides 1.1 doPrint = 1;
129     } else {
130     MDB(kAnalysis, 3) {
131 loizides 1.3 if (GetNEventsProcessed() % 10000 == 0)
132 loizides 1.1 doPrint = 1;
133     } else {
134     MDB(kAnalysis, 2) {
135 loizides 1.3 if (GetNEventsProcessed() % 50000 == 0)
136 loizides 1.1 doPrint = 1;
137     } else {
138     MDB(kAnalysis, 1) {
139 loizides 1.3 if (GetNEventsProcessed() % 250000 == 0)
140 loizides 1.1 doPrint = 1;
141     }
142     }
143     }
144     }
145    
146     if (doPrint) {
147     fSWevent->Stop();
148     Info("Process", "Events %d -> %.2gs real, %.2gs cpu (%.2g real, %.2g cpu per event)",
149 loizides 1.3 GetNEventsProcessed(), fSWevent->RealTime(), fSWevent->CpuTime(),
150     fSWevent->RealTime()/GetNEventsProcessed(), fSWevent->CpuTime()/GetNEventsProcessed());
151 loizides 1.1 fSWevent->Start();
152     }
153     }
154    
155     //--------------------------------------------------------------------------------------------------
156     void AnaFwkMod::SlaveBegin()
157     {
158     // Book our histogram and start the stop watches.
159    
160     fSWtotal = new TStopwatch;
161     fSWevent = new TStopwatch;
162 loizides 1.4
163     if (!PublishObj(&fAllHeaders)) {
164     SendError(kAbortAnalysis, "SlaveBegin",
165     "Could not publish all event headers with name %s.", fAllHeaders.GetName());
166     return;
167     }
168 loizides 1.1 }
169    
170     //--------------------------------------------------------------------------------------------------
171     void AnaFwkMod::SlaveTerminate()
172     {
173     // Fill event histogram and printout timing information.
174    
175 loizides 1.4 RetractObj(fAllHeaders.GetName());
176    
177 loizides 1.3 SaveNEventsProcessed();
178 loizides 1.1
179     fSWtotal->Stop();
180     fSWevent->Stop();
181    
182     MDB(kAnalysis, 1)
183     Info("SlaveTerminate", "Events %d -> %.2gs real, %.2gs cpu (%.2gs real, %.2gs cpu per event)",
184 loizides 1.3 GetNEventsProcessed(), fSWtotal->RealTime(), fSWtotal->CpuTime(),
185     fSWtotal->RealTime()/GetNEventsProcessed(), fSWtotal->CpuTime()/GetNEventsProcessed());
186 loizides 1.1
187     delete fSWtotal;
188     delete fSWevent;
189     }
190 loizides 1.4