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.9 by loizides, Mon Mar 23 22:15:15 2009 UTC vs.
Revision 1.18 by bendavid, Wed May 30 16:23:54 2012 UTC

# Line 3 | Line 3
3   #include "MitAna/TreeMod/interface/AnaFwkMod.h"
4   #include "MitAna/DataUtil/interface/Debug.h"
5   #include "MitAna/DataTree/interface/Names.h"
6 + #include "MitAna/DataTree/interface/PileupInfo.h"
7   #include <TFile.h>
8   #include <TH1D.h>
9 + #include <TH3D.h>
10   #include <TStopwatch.h>
11   #include <TTree.h>
12  
# Line 18 | Line 20 | AnaFwkMod::AnaFwkMod(const char *name, c
20    fAllHeadTreeName(Names::gkAllEvtTreeName),
21    fAllHeadBrName(Names::gkAllEvtHeaderBrn),
22    fSkipNEvents(0),
23 +  fPrintScale(1),
24    fSWtotal(0),
25    fSWevent(0),
26    fAllHeaders(0,Names::gkSkimmedHeaders),
# Line 26 | Line 29 | AnaFwkMod::AnaFwkMod(const char *name, c
29    fReload(kFALSE),
30    fCurEnt(-2),
31    fNEventsSkimmed(0),
32 <  fNEventsSkipped(0)
32 >  fNEventsSkipped(0),
33 >  fPileupInfoName("PileupInfo"),
34 >  fDoPUInfo(kFALSE),
35 >  hNPU(0),
36 >  hNPU50ns(0)
37   {
38    // Constructor.
39   }
# Line 49 | Line 56 | void AnaFwkMod::BeginRun()
56      if (!file)
57        return;
58  
59 <    // get HLT tree
59 >    // get all event header tree
60      fAllHeadTree = dynamic_cast<TTree*>(file->Get(fAllHeadTreeName));
61      if (!fAllHeadTree) {
62        SendError(kWarning, "BeginRun",
# Line 57 | Line 64 | void AnaFwkMod::BeginRun()
64                  fAllHeadTreeName.Data(),file->GetName());
65        return;
66      }
60  }
67  
68 <  // get HLT trigger name branch
69 <  if (fAllHeadTree->GetBranch(fAllHeadBrName)) {
70 <    fAllHeadTree->SetBranchAddress(fAllHeadBrName, &fAllEventHeader);
71 <  } else {
72 <    SendError(kWarning, "BeginRun",
73 <              "Cannot find branch '%s' in tree '%s'",
74 <              fAllHeadBrName.Data(), fAllHeadTreeName.Data());
75 <    return;
68 >    // get all event header branch
69 >    if (fAllHeadTree->GetBranch(fAllHeadBrName)) {
70 >      fAllHeadTree->SetBranchAddress(fAllHeadBrName, &fAllEventHeader);
71 >    } else {
72 >      SendError(kWarning, "BeginRun",
73 >                "Cannot find branch '%s' in tree '%s'",
74 >                fAllHeadBrName.Data(), fAllHeadTreeName.Data());
75 >      return;
76 >    }
77    }
78   }
79  
# Line 91 | Line 98 | void AnaFwkMod::CopyAllEventHeaders()
98        return;
99      }
100      fAllHeadTree->GetEntry(fCurEnt++);
101 <    while(fCurEnt<=nemax && fAllEventHeader->Skimmed()) {
101 >    while (fCurEnt <= nemax && fAllEventHeader->Skimmed()) {
102        EventHeader *eh = fAllHeaders.AddNew();
103 <      eh->SetRunNum(fAllEventHeader->RunNum());
104 <      eh->SetEvtNum(fAllEventHeader->EvtNum());
105 <      eh->SetLumiSec(fAllEventHeader->LumiSec());
103 >      eh->SetRunNum  (fAllEventHeader->RunNum());
104 >      eh->SetEvtNum  (fAllEventHeader->EvtNum());
105 >      eh->SetLumiSec (fAllEventHeader->LumiSec());
106        eh->SetRunEntry(fAllEventHeader->RunEntry());
107 <      eh->SetSkimmed(fAllEventHeader->Skimmed());
107 >      eh->SetSkimmed (fAllEventHeader->Skimmed());
108        fAllHeadTree->GetEntry(fCurEnt++);
109      }
110 <    if ((fAllEventHeader->RunNum()!=curev->RunNum())   ||
111 <        (fAllEventHeader->EvtNum()!=curev->EvtNum())   ||
112 <        (fAllEventHeader->LumiSec()!=curev->LumiSec()) ||
113 <        (fAllEventHeader->RunEntry()!=curev->RunEntry())) {
110 >    if ((fAllEventHeader->RunNum()   != curev->RunNum())   ||
111 >        (fAllEventHeader->EvtNum()   != curev->EvtNum())   ||
112 >        (fAllEventHeader->LumiSec()  != curev->LumiSec())  ||
113 >        (fAllEventHeader->RunEntry() != curev->RunEntry())) {
114        SendError(kWarning, "CopyAllEventHeaders",
115                  "Event header information for entry %d inconsistent: "
116                  "%d==%d, %d==%d, %d==%d, %d==%d",
# Line 119 | Line 126 | void AnaFwkMod::CopyAllEventHeaders()
126      if (fCurEnt<nemax) {
127        Int_t testEnt = fCurEnt;
128        fAllHeadTree->GetEntry(testEnt++);
129 <      while(testEnt<=nemax && fAllEventHeader->Skimmed())
129 >      while (testEnt<=nemax && fAllEventHeader->Skimmed())
130          fAllHeadTree->GetEntry(testEnt++);
131        if (testEnt==nemax+1) { // need to add remaining skimmed events
132          fAllHeadTree->GetEntry(fCurEnt++);
133          while(fCurEnt<=nemax) {
134            EventHeader *eh = fAllHeaders.AddNew();
135 <          eh->SetRunNum(fAllEventHeader->RunNum());
136 <          eh->SetEvtNum(fAllEventHeader->EvtNum());
137 <          eh->SetLumiSec(fAllEventHeader->LumiSec());
135 >          eh->SetRunNum  (fAllEventHeader->RunNum());
136 >          eh->SetEvtNum  (fAllEventHeader->EvtNum());
137 >          eh->SetLumiSec (fAllEventHeader->LumiSec());
138            eh->SetRunEntry(fAllEventHeader->RunEntry());
139 <          eh->SetSkimmed(fAllEventHeader->Skimmed());
139 >          eh->SetSkimmed (fAllEventHeader->Skimmed());
140            fAllHeadTree->GetEntry(fCurEnt++);
141          }
142          if (fCurEnt != nemax+1) {
# Line 167 | Line 174 | void AnaFwkMod::Process()
174    if (fNEventsSkipped<fSkipNEvents) {
175      ++fNEventsSkipped;
176      MDB(kAnalysis, 3) {
177 <      Info("Process", "Skipping (aborting) %d out of %d first events.",
177 >      Info("Process", "Skipping (aborting) %d out of %lld first events.",
178             fNEventsSkipped, fSkipNEvents);
179      }
180      AbortEvent();
# Line 175 | Line 182 | void AnaFwkMod::Process()
182    }
183  
184    // check if printout should be done
185 <  Bool_t doPrint = 0;
185 >  Bool_t doPrint    = 0;
186 >  UInt_t nProcessed = fPrintScale;
187  
188    MDB(kAnalysis, 4) {
189 <    if (GetNEventsProcessed() % 250  == 0)
189 >    if (GetNEventsProcessed() % (fPrintScale)  == 0)
190        doPrint = 1;
191    } else {
192      MDB(kAnalysis, 3) {
193 <      if (GetNEventsProcessed() % 2500  == 0)
193 >      if (GetNEventsProcessed() % (fPrintScale*10)  == 0)
194          doPrint = 1;
195 +      nProcessed = fPrintScale*10;
196      } else {
197        MDB(kAnalysis, 2) {
198 <        if (GetNEventsProcessed() % 10000  == 0)
198 >        if (GetNEventsProcessed() % (fPrintScale*100)  == 0)
199            doPrint = 1;
200 +        nProcessed = fPrintScale*100;
201        } else {
202          MDB(kAnalysis, 1) {
203 <          if (GetNEventsProcessed() % 50000 == 0)
203 >          if (GetNEventsProcessed() % (fPrintScale*1000) == 0)
204              doPrint = 1;
205 +          nProcessed = fPrintScale*1000;
206          }
207        }
208      }
209    }
210  
211 +  if (GetEventHeader()->IsMC()) {
212 +    LoadBranch(fPileupInfoName);  
213 +    Int_t npu[3] = {0,0,0};
214 +    for (UInt_t i=0; i<fPileupInfo->GetEntries(); ++i) {
215 +      const PileupInfo *puinfo = fPileupInfo->At(i);
216 +      if (puinfo->GetBunchCrossing()==0) npu[0]= puinfo->GetPU_NumInteractions();
217 +      else if (puinfo->GetBunchCrossing()==-1) npu[1] = puinfo->GetPU_NumInteractions();
218 +      else if (puinfo->GetBunchCrossing()==1) npu[2] = puinfo->GetPU_NumInteractions();
219 +    }
220 +    
221 +    hNPU->Fill(npu[0]);
222 +    hNPU50ns->Fill(npu[0],npu[1],npu[2]);
223 +  }
224 +
225 +
226    if (doPrint) {
227      fSWevent->Stop();
228      Info("Process",
229           "Events %d -> %.2gs real, %.2gs cpu (%.2g real, %.2g cpu per event)",
230           GetNEventsProcessed(), fSWevent->RealTime(), fSWevent->CpuTime(),
231 <         fSWevent->RealTime()/GetNEventsProcessed(),
232 <         fSWevent->CpuTime()/GetNEventsProcessed());
231 >         fSWevent->RealTime()/nProcessed,
232 >         fSWevent->CpuTime()/nProcessed);
233      fSWevent->Start();
234 <  }  
234 >  }
235 >  
236 >    
237   }
238  
239   //--------------------------------------------------------------------------------------------------
# Line 221 | Line 249 | void AnaFwkMod::SlaveBegin()
249                "Could not publish all event headers with name %s.", fAllHeaders.GetName());
250      return;
251    }
252 +  
253 +  ReqBranch(fPileupInfoName, fPileupInfo);
254 +  
255 +  hNPU = new TH1D("hNPU", "hNPU", 201, -0.5, 200.5);
256 +  AddOutput(hNPU);  
257 +  
258 +  hNPU50ns = new TH3D("hNPU50ns", "hNPU50ns", 201, -0.5, 200.5, 201, -0.5, 200.5, 201, -0.5, 200.5);
259 +  AddOutput(hNPU50ns);  
260 +  
261   }
262  
263   //--------------------------------------------------------------------------------------------------

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines