ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitAna/TreeMod/src/AnaFwkMod.cc
(Generate patch)

Comparing UserCode/MitAna/TreeMod/src/AnaFwkMod.cc (file contents):
Revision 1.5 by loizides, Wed Mar 11 10:07:40 2009 UTC vs.
Revision 1.6 by loizides, Thu Mar 12 15:37:53 2009 UTC

# Line 2 | Line 2
2  
3   #include "MitAna/TreeMod/interface/AnaFwkMod.h"
4   #include "MitAna/DataUtil/interface/Debug.h"
5 + #include "MitAna/DataTree/interface/Names.h"
6   #include <TFile.h>
7   #include <TH1D.h>
8   #include <TStopwatch.h>
# Line 14 | Line 15 | ClassImp(mithep::AnaFwkMod)
15   //--------------------------------------------------------------------------------------------------
16   AnaFwkMod::AnaFwkMod(const char *name, const char *title) :
17    BaseMod(name,title),
18 +  fAllHeadTreeName(Names::gkAllEvtTreeName),
19 +  fAllHeadBrName(Names::gkAllEvtHeaderBrn),
20    fSWtotal(0),
21    fSWevent(0),
22 <  fAllHeaders(0,"AllEventHeaders"),
22 >  fAllHeaders(0,Names::gkSkimmedHeaders),
23    fAllHeadTree(0),
24    fAllEventHeader(0),
25    fReload(kFALSE),
26 <  fCurEnt(-2)
26 >  fCurEnt(-2),
27 >  fNEventsSkimmed(0)
28   {
29    // Constructor.
30   }
# Line 47 | Line 51 | void AnaFwkMod::BeginRun()
51      // get HLT tree
52      fAllHeadTree = dynamic_cast<TTree*>(file->Get(fAllHeadTreeName));
53      if (!fAllHeadTree) {
54 +      SendError(kWarning, "BeginRun",
55 +                "Can not find tree '%s' in file '%s'",
56 +                fAllHeadTreeName.Data(),file->GetName());
57        return;
58      }
59    }
# Line 56 | Line 63 | void AnaFwkMod::BeginRun()
63      fAllHeadTree->SetBranchAddress(fAllHeadBrName, &fAllEventHeader);
64    } else {
65      SendError(kWarning, "BeginRun",
66 <              "Can not find branch with name %s in tree %s",
66 >              "Can not find branch '%s' in tree '%s'",
67                fAllHeadBrName.Data(), fAllHeadTreeName.Data());
68      return;
69    }
# Line 76 | Line 83 | void AnaFwkMod::CopyAllEventHeaders()
83    }
84  
85    if (fAllHeadTree) {
86 +    const Int_t nemax = fAllHeadTree->GetEntries();
87 +    if (fCurEnt == nemax) {
88 +      SendError(kAbortEvent, "CopyAllEventHeaders",
89 +                "End of all events tree reached (%d=%d)", fCurEnt, nemax);
90 +      return;
91 +    }
92      fAllHeadTree->GetEntry(fCurEnt++);
93 <    while(fAllEventHeader->Skimmed()) {
93 >    while(fAllEventHeader->Skimmed() && fCurEnt<nemax) {
94        EventHeader *eh = fAllHeaders.AddNew();
95        eh->SetRunNum(fAllEventHeader->RunNum());
96        eh->SetEvtNum(fAllEventHeader->EvtNum());
# Line 91 | Line 104 | void AnaFwkMod::CopyAllEventHeaders()
104          (fAllEventHeader->LumiSec()!=curev->LumiSec()) ||
105          (fAllEventHeader->RunEntry()!=curev->RunEntry())) {
106        SendError(kWarning, "CopyAllEventHeaders",
107 <                "Event header information inconsistent: %d==%d, %d==%d, %d==%d, %d==%d",
107 >                "Event header information for entry %d inconsistent: "
108 >                "%d==%d, %d==%d, %d==%d, %d==%d",
109 >                fCurEnt,
110                  fAllEventHeader->RunNum(),   curev->RunNum(),
111                  fAllEventHeader->EvtNum(),   curev->EvtNum(),
112                  fAllEventHeader->LumiSec(),  curev->LumiSec(),
113                  fAllEventHeader->RunEntry(), curev->RunEntry());
114        return;
115      }
116 +
117 +    // read-ahead to check if more events are coming
118 +    if (fCurEnt<nemax) {
119 +      Int_t testEnt = fCurEnt;
120 +      fAllHeadTree->GetEntry(testEnt++);
121 +      while(fAllEventHeader->Skimmed() && testEnt<nemax)
122 +        fAllHeadTree->GetEntry(testEnt++);
123 +      if (testEnt==nemax) { // need to add remaining skimmed events
124 +        fAllHeadTree->GetEntry(fCurEnt++);
125 +        while(fAllEventHeader->Skimmed() && fCurEnt<nemax) {
126 +          EventHeader *eh = fAllHeaders.AddNew();
127 +          eh->SetRunNum(fAllEventHeader->RunNum());
128 +          eh->SetEvtNum(fAllEventHeader->EvtNum());
129 +          eh->SetLumiSec(fAllEventHeader->LumiSec());
130 +          eh->SetRunEntry(fAllEventHeader->RunEntry());
131 +          eh->SetSkimmed(fAllEventHeader->Skimmed());
132 +          fAllHeadTree->GetEntry(fCurEnt++);
133 +        }
134 +        if (fCurEnt != nemax) {
135 +          SendError(kAbortEvent, "CopyAllEventHeaders",
136 +                    "End of all events tree unexpectedly not reached (%d!=%d)", fCurEnt, nemax);
137 +          return;
138 +        }
139 +      }
140 +    }
141    }
142   }
143  
# Line 116 | Line 156 | void AnaFwkMod::Process()
156    // Do event counting and print out timing information.
157  
158    
159 +  // get skimmed event headers
160 +  CopyAllEventHeaders();
161 +  fNEventsSkimmed += fAllHeaders.GetEntries();
162  
163    // counting events
164    IncNEventsProcessed();
# Line 175 | Line 218 | void AnaFwkMod::SlaveTerminate()
218    RetractObj(fAllHeaders.GetName());
219  
220    SaveNEventsProcessed();
221 +  TH1D *hDAllEvents = new TH1D("hDAllEvents","Sum of processed and skimmed events",1,-0.5,0.5);
222 +  hDAllEvents->Fill(0.0,fNEventsSkimmed+GetNEventsProcessed());
223 +  hDAllEvents->SetEntries(fNEventsSkimmed+GetNEventsProcessed());
224 +  AddOutput(hDAllEvents);
225  
226    fSWtotal->Stop();
227    fSWevent->Stop();
# Line 187 | Line 234 | void AnaFwkMod::SlaveTerminate()
234    delete fSWtotal;
235    delete fSWevent;
236   }
190

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines