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.4 by loizides, Mon Mar 9 17:07:05 2009 UTC vs.
Revision 1.7 by loizides, Thu Mar 12 18:25:35 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 32 | Line 36 | void AnaFwkMod::BeginRun()
36    // depending on entry in RunInfo.
37  
38    if (fReload) {
35
39      // reset to be (re-)loaded variables
40      fReload         = 0;
41      fAllHeadTree    = 0;
# Line 47 | Line 50 | void AnaFwkMod::BeginRun()
50      // get HLT tree
51      fAllHeadTree = dynamic_cast<TTree*>(file->Get(fAllHeadTreeName));
52      if (!fAllHeadTree) {
53 +      SendError(kWarning, "BeginRun",
54 +                "Can not find tree '%s' in file '%s'",
55 +                fAllHeadTreeName.Data(),file->GetName());
56        return;
57      }
58    }
# Line 56 | Line 62 | void AnaFwkMod::BeginRun()
62      fAllHeadTree->SetBranchAddress(fAllHeadBrName, &fAllEventHeader);
63    } else {
64      SendError(kWarning, "BeginRun",
65 <              "Can not find branch with name %s in tree %s",
65 >              "Can not find branch '%s' in tree '%s'",
66                fAllHeadBrName.Data(), fAllHeadTreeName.Data());
67      return;
68    }
# Line 76 | Line 82 | void AnaFwkMod::CopyAllEventHeaders()
82    }
83  
84    if (fAllHeadTree) {
85 +    const Int_t nemax = fAllHeadTree->GetEntries();
86 +    if (fCurEnt == nemax) {
87 +      SendError(kAbortEvent, "CopyAllEventHeaders",
88 +                "End of all events tree reached (%d=%d)", fCurEnt, nemax);
89 +      return;
90 +    }
91      fAllHeadTree->GetEntry(fCurEnt++);
92 <    while(fAllEventHeader->IsRemoved()) {
92 >    while(fCurEnt<=nemax && fAllEventHeader->Skimmed()) {
93        EventHeader *eh = fAllHeaders.AddNew();
94        eh->SetRunNum(fAllEventHeader->RunNum());
95        eh->SetEvtNum(fAllEventHeader->EvtNum());
96        eh->SetLumiSec(fAllEventHeader->LumiSec());
97 <      eh->SetIsRemoved(fAllEventHeader->RunEntry());
98 <      eh->SetRunEntry(fAllEventHeader->IsRemoved());
97 >      eh->SetRunEntry(fAllEventHeader->RunEntry());
98 >      eh->SetSkimmed(fAllEventHeader->Skimmed());
99        fAllHeadTree->GetEntry(fCurEnt++);
100      }
101      if ((fAllEventHeader->RunNum()!=curev->RunNum())   ||
# Line 91 | Line 103 | void AnaFwkMod::CopyAllEventHeaders()
103          (fAllEventHeader->LumiSec()!=curev->LumiSec()) ||
104          (fAllEventHeader->RunEntry()!=curev->RunEntry())) {
105        SendError(kWarning, "CopyAllEventHeaders",
106 <                "Event header information inconsistent: %d==%d, %d==%d, %d==%d, %d==%d",
106 >                "Event header information for entry %d inconsistent: "
107 >                "%d==%d, %d==%d, %d==%d, %d==%d",
108 >                fCurEnt,
109                  fAllEventHeader->RunNum(),   curev->RunNum(),
110                  fAllEventHeader->EvtNum(),   curev->EvtNum(),
111                  fAllEventHeader->LumiSec(),  curev->LumiSec(),
112                  fAllEventHeader->RunEntry(), curev->RunEntry());
113        return;
114      }
115 +
116 +    // read-ahead to check if more events are coming
117 +    if (fCurEnt<nemax) {
118 +      Int_t testEnt = fCurEnt;
119 +      fAllHeadTree->GetEntry(testEnt++);
120 +      while(testEnt<=nemax && fAllEventHeader->Skimmed())
121 +        fAllHeadTree->GetEntry(testEnt++);
122 +      if (testEnt==nemax+1) { // need to add remaining skimmed events
123 +        fAllHeadTree->GetEntry(fCurEnt++);
124 +        while(fCurEnt<=nemax) {
125 +          EventHeader *eh = fAllHeaders.AddNew();
126 +          eh->SetRunNum(fAllEventHeader->RunNum());
127 +          eh->SetEvtNum(fAllEventHeader->EvtNum());
128 +          eh->SetLumiSec(fAllEventHeader->LumiSec());
129 +          eh->SetRunEntry(fAllEventHeader->RunEntry());
130 +          eh->SetSkimmed(fAllEventHeader->Skimmed());
131 +          fAllHeadTree->GetEntry(fCurEnt++);
132 +        }
133 +        if (fCurEnt != nemax+1) {
134 +          SendError(kAbortEvent, "CopyAllEventHeaders",
135 +                    "End of all events tree unexpectedly not reached (%d!=%d)", fCurEnt, nemax);
136 +          return;
137 +        }
138 +      }
139 +    }
140    }
141   }
142  
# Line 116 | Line 155 | void AnaFwkMod::Process()
155    // Do event counting and print out timing information.
156  
157    
158 +  // get skimmed event headers
159 +  CopyAllEventHeaders();
160 +  fNEventsSkimmed += fAllHeaders.GetEntries();
161  
162    // counting events
163    IncNEventsProcessed();
# Line 175 | Line 217 | void AnaFwkMod::SlaveTerminate()
217    RetractObj(fAllHeaders.GetName());
218  
219    SaveNEventsProcessed();
220 +  TH1D *hDAllEvents = new TH1D("hDAllEvents","Sum of processed and skimmed events",1,-0.5,0.5);
221 +  hDAllEvents->Fill(0.0,fNEventsSkimmed+GetNEventsProcessed());
222 +  hDAllEvents->SetEntries(fNEventsSkimmed+GetNEventsProcessed());
223 +  AddOutput(hDAllEvents);
224  
225    fSWtotal->Stop();
226    fSWevent->Stop();
# Line 187 | Line 233 | void AnaFwkMod::SlaveTerminate()
233    delete fSWtotal;
234    delete fSWevent;
235   }
190

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines