ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitAna/TreeMod/src/Selector.cc
Revision: 1.5
Committed: Sun Sep 28 02:37:31 2008 UTC (16 years, 7 months ago) by loizides
Content type: text/plain
Branch: MAIN
CVS Tags: Mit_006, Mit_005, Mit_004
Changes since 1.4: +29 -16 lines
Log Message:
Cleanup related to names.

File Contents

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