ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitProd/TreeService/src/TreeService.cc
Revision: 1.1
Committed: Tue May 27 20:09:09 2008 UTC (16 years, 11 months ago) by loizides
Content type: text/plain
Branch: MAIN
Log Message:
Service to access TreeWriter.

File Contents

# User Rev Content
1 loizides 1.1 // $Id:$
2    
3     #include "MitProd/TreeService/interface/TreeService.h"
4    
5     #include "DataFormats/Provenance/interface/ModuleDescription.h"
6     #include "FWCore/ParameterSet/interface/ParameterSet.h"
7     #include "FWCore/ServiceRegistry/interface/ActivityRegistry.h"
8     #include "FWCore/ServiceRegistry/interface/Service.h"
9     #include "FWCore/MessageLogger/interface/JobReport.h"
10    
11     #include "MitAna/DataUtil/interface/TreeWriter.h"
12    
13     using namespace edm;
14     using namespace std;
15     using namespace mithep;
16    
17     //-------------------------------------------------------------------------------------------------
18     TreeService::TreeService(const ParameterSet &cfg, ActivityRegistry &r)
19     : tws_(0),
20     treeNames_(cfg.getUntrackedParameter<std::vector<std::string> >("treeNames")),
21     fileNames_(cfg.getUntrackedParameter<std::vector<std::string> >("fileNames")),
22     pathNames_(cfg.getUntrackedParameter<std::vector<std::string> >("pathNames")),
23     maxSizes_(cfg.getUntrackedParameter<std::vector<unsigned> >("maxSizes")),
24     compLevels_(cfg.getUntrackedParameter<std::vector<unsigned> >("compLevels")),
25     splitLevels_(cfg.getUntrackedParameter<std::vector<unsigned> >("splitLevels")),
26     brSizes_(cfg.getUntrackedParameter<std::vector<unsigned> >("brSizes"))
27     {
28     if(treeNames_.size()!=treeNames_.size()) {
29     //todo throw !!!
30     }
31    
32     // setup tw array
33     tws_.SetOwner(kTRUE);
34     tws_.Expand(treeNames_.size());
35    
36     // init tree writers
37     for(unsigned int i=0;i<treeNames_.size();++i) {
38    
39     TreeWriter *t = new TreeWriter(treeNames_.at(i).c_str(),1);
40    
41     t->SetPrefix(fileNames_.at(i).c_str());
42     if(i<pathNames_.size()) t->SetBaseURL(pathNames_.at(i).c_str());
43     else if (pathNames_.size()>0) t->SetBaseURL(pathNames_.at(0).c_str());
44     if(i<maxSizes_.size()) t->SetMaxSize(maxSizes_.at(i)*1024*1024);
45     else if (maxSizes_.size()>0) t->SetMaxSize(maxSizes_.at(0)*1024*1024);
46     if(i<compLevels_.size()) t->SetCompressLevel(compLevels_.at(i));
47     else if (compLevels_.size()>0) t->SetCompressLevel(compLevels_.at(0));
48     if(i<splitLevels_.size()) t->SetDefaultSL(splitLevels_.at(i));
49     else if (splitLevels_.size()>0) t->SetDefaultSL(splitLevels_.at(0));
50     if(i<brSizes_.size()) t->SetDefaultBrSize(brSizes_.at(i));
51     else if (brSizes_.size()>0) t->SetDefaultBrSize(brSizes_.at(0));
52    
53     //t->Print();
54     tws_.Add(t);
55     }
56    
57     // set watchers
58     r.watchPreProcessEvent(this,&TreeService::preEventProcessing);
59     r.watchPostProcessEvent(this,&TreeService::postEventProcessing);
60     r.watchPostBeginJob(this,&TreeService::postBeginJob);
61     r.watchPostEndJob(this,&TreeService::postEndJob);
62     }
63    
64     //-------------------------------------------------------------------------------------------------
65     TreeService::~TreeService()
66     {
67     }
68    
69     //-------------------------------------------------------------------------------------------------
70     TreeWriter* TreeService::get(const char *name)
71     {
72     if(tws_.GetEntries()<=0) return 0;
73    
74     if(name==0)
75     return dynamic_cast<TreeWriter*>(tws_.At(0));
76    
77     TObject *ret = tws_.FindObject(name);
78     return dynamic_cast<TreeWriter*>(ret);
79     }
80    
81     //-------------------------------------------------------------------------------------------------
82     void TreeService::postBeginJob()
83     {
84     // nothing to be done for now
85     }
86    
87     //-------------------------------------------------------------------------------------------------
88     void TreeService::postEndJob()
89     {
90     tws_.Clear();
91     }
92    
93     //-------------------------------------------------------------------------------------------------
94     void TreeService::postEventProcessing(const Event&, const EventSetup&)
95     {
96     for(int i=0;i<tws_.GetEntries();++i) {
97     TreeWriter *tw=dynamic_cast<TreeWriter*>(tws_.At(i));
98     if(tw)
99     tw->EndEvent();
100     }
101     }
102    
103     //-------------------------------------------------------------------------------------------------
104     void TreeService::preEventProcessing(const EventID&, const Timestamp&)
105     {
106     for(int i=0;i<tws_.GetEntries();++i) {
107     TreeWriter *tw=dynamic_cast<TreeWriter*>(tws_.At(i));
108     if(tw)
109     tw->BeginEvent();
110     }
111     }