ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitAna/TreeMod/src/Selector.cc
Revision: 1.6
Committed: Wed Dec 3 17:42:37 2008 UTC (16 years, 5 months ago) by loizides
Content type: text/plain
Branch: MAIN
Changes since 1.5: +11 -4 lines
Log Message:
Added hook for output module to be called even if events are skipped.

File Contents

# User Rev Content
1 loizides 1.6 // $Id: Selector.cc,v 1.5 2008/09/28 02:37:31 loizides Exp $
2 loizides 1.1
3     #include "MitAna/TreeMod/interface/Selector.h"
4 loizides 1.2 #include "MitAna/DataTree/interface/Names.h"
5 loizides 1.6 #include "MitAna/TreeMod/interface/OutputMod.h"
6 loizides 1.2 #include <TProcessID.h>
7     #include <TFile.h>
8     #include <TTree.h>
9    
10 loizides 1.1 using namespace mithep;
11    
12     ClassImp(mithep::Selector)
13    
14 loizides 1.4 //--------------------------------------------------------------------------------------------------
15 loizides 1.2 Selector::Selector() :
16     fDoRunInfo(kTRUE),
17 loizides 1.5 fEvtHdrName(Names::gkEvtHeaderBrn),
18     fRunTreeName(Names::gkRunTreeName),
19     fRunInfoName(Names::gkRunInfoBrn),
20 loizides 1.6 fAllEvtHdrBrn(Names::gkAllEvtHeaderBrn),
21 loizides 1.5 fLATreeName(Names::gkLATreeName),
22     fLAHdrName(Names::gkLAHeaderBrn),
23 loizides 1.6 fAllEvtTreeName(Names::gkAllEvtTreeName),
24 loizides 1.2 fRunTree(0),
25     fEventHeader(0),
26     fRunInfo(0),
27     fLATree(0),
28 loizides 1.3 fLAHeader(0),
29     fCurRunNum(UInt_t(-1))
30 loizides 1.1 {
31 loizides 1.5 // Constructor.
32 loizides 1.1 }
33    
34 loizides 1.4 //--------------------------------------------------------------------------------------------------
35 loizides 1.1 Selector::~Selector()
36     {
37 loizides 1.5 // Destructor.
38    
39     fRunTree = 0;
40     fEventHeader = 0;
41     fRunInfo = 0;
42     fLATree = 0;
43     fLAHeader = 0;
44     fCurRunNum = UInt_t(-1);
45 loizides 1.1 }
46 loizides 1.2
47 loizides 1.4 //--------------------------------------------------------------------------------------------------
48 loizides 1.2 Bool_t Selector::BeginRun()
49     {
50     // Determines whether we are at beginning of a new run.
51    
52     if (!fDoRunInfo)
53     return kFALSE;
54    
55 loizides 1.5 LoadBranch(fEvtHdrName);
56 loizides 1.2 if (!fEventHeader)
57     return kFALSE;
58    
59     if (ConsistentRunNum())
60     return kFALSE;
61    
62     UpdateRunInfo();
63     return ValidRunNum();
64     }
65    
66 loizides 1.4 //--------------------------------------------------------------------------------------------------
67 loizides 1.2 Bool_t Selector::EndRun()
68     {
69 loizides 1.6 // Determines whether we are at the end of a run. Also, do treat special case of output module
70     // here so it in any case can process the event.
71    
72     if (fOutputMod && (IsAModAborted() || IsEventAborted())) {
73     fOutputMod->ProcessAll();
74     }
75 loizides 1.2
76     if (!fDoRunInfo)
77     return kFALSE;
78    
79     if (!ValidRunNum())
80     return kFALSE;
81    
82     // determine if run will end
83     if (fCurEvt+1==fTree->GetTree()->GetEntries())
84     return kTRUE; // we are at last entry in current file
85    
86     fLAHeader=0;
87     Int_t ret = fLATree->GetEvent(fCurEvt);
88     if (ret<0 || fLAHeader==0) {
89     Error("EndRun", "Could not get entry lookahead entry for next event,"
90     " assuming end of run %ld reached!", fCurRunNum);
91     return kTRUE;
92     }
93    
94     return (fLAHeader->RunNum()!=fCurRunNum);
95     }
96    
97 loizides 1.4 //--------------------------------------------------------------------------------------------------
98 loizides 1.2 Bool_t Selector::Notify()
99     {
100 loizides 1.5 // The Notify() function is called when a new file is opened.
101     // Here, we check for a new run info tree.
102 loizides 1.2
103     if (!GetCurrentFile())
104     return kTRUE;
105    
106     if (fDoRunInfo)
107     UpdateRunInfoTree();
108    
109     return TAMSelector::Notify();
110     }
111    
112 loizides 1.4 //--------------------------------------------------------------------------------------------------
113 loizides 1.6 void Selector::SlaveBegin(TTree *tree)
114 loizides 1.2 {
115     // The SlaveBegin() function is called after the Begin() function and can be used to setup
116     // analysis on the slaves. Here, we request the event header branch.
117    
118     if (fDoRunInfo) {
119 loizides 1.5 ReqBranch(fEvtHdrName.Data(), fEventHeader);
120 loizides 1.2 }
121    
122     TAMSelector::SlaveBegin(tree);
123     }
124    
125 loizides 1.4 //--------------------------------------------------------------------------------------------------
126 loizides 1.2 void Selector::UpdateRunInfo()
127     {
128     // Update the run info to be consistent with the information from the event header.
129    
130     fRunInfo = 0;
131    
132     if (!fRunTree)
133     return;
134    
135     Int_t ret = fRunTree->GetEvent(fEventHeader->RunEntry());
136     if (ret<0 || fRunInfo==0) {
137     Error("UpdateRunInfo", "Error updating run info for run %ld, entry %ld, return value %d",
138     fEventHeader->RunNum(), fEventHeader->RunEntry(), ret);
139     return;
140     }
141    
142     fCurRunNum = fEventHeader->RunNum();
143     if (!ValidRunInfo()) {
144     Error("UpdateRunInfo", "Error updating run info, run values do not match %d %d",
145     fCurRunNum, fRunInfo->RunNum());
146     return;
147     }
148     }
149    
150 loizides 1.4 //--------------------------------------------------------------------------------------------------
151 loizides 1.2 void Selector::UpdateRunInfoTree()
152     {
153     // Get the run info tree from current file and set our branches.
154    
155     // first erase previous entries
156     fRunTree = 0;
157     fRunInfo = 0;
158     fCurRunNum = UInt_t(-1);
159     fLATree = 0;
160     fLAHeader = 0;
161    
162     // get current file and retrieve trees
163     TFile *f = GetCurrentFile();
164     if (!f) {
165     Error("UpdateRunInfoTree", "Ptr to current file is null");
166     return;
167     }
168    
169     // run info tree
170 loizides 1.5 fRunTree = dynamic_cast<TTree*>(f->Get(fRunTreeName));
171 loizides 1.2 if (!fRunTree) {
172 loizides 1.5 Fatal("UpdateRunInfoTree", "Can not find run info tree with name %s", fRunTreeName.Data());
173 loizides 1.2 }
174    
175     // set branches
176 loizides 1.5 if (fRunTree->GetBranch(fRunInfoName)) {
177     fRunTree->SetBranchAddress(fRunInfoName, &fRunInfo);
178 loizides 1.2 } else {
179 loizides 1.5 Fatal("UpdateRunInfoTree", "Can not find run info branch with name %s", fRunInfoName.Data());
180 loizides 1.2 }
181    
182     // look-ahead tree
183 loizides 1.5 fLATree = dynamic_cast<TTree*>(f->Get(fLATreeName));
184 loizides 1.2 if (!fLATree) {
185 loizides 1.5 Fatal("UpdateRunInfoTree", "Can not find look-ahead tree with name %s", fLATreeName.Data());
186 loizides 1.2 }
187    
188     // set branches
189 loizides 1.5 if (fLATree->GetBranch(fLAHdrName)) {
190     fLATree->SetBranchAddress(fLAHdrName, &fLAHeader);
191 loizides 1.2 } else {
192 loizides 1.5 Fatal("UpdateRunInfoTree", "Can not find look-ahead branch with name %s", fLAHdrName.Data());
193 loizides 1.2 }
194     }