ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitProd/TreeService/src/TreeService.cc
Revision: 1.11
Committed: Tue Mar 3 18:06:10 2009 UTC (16 years, 2 months ago) by bendavid
Content type: text/plain
Branch: MAIN
CVS Tags: Mit_008pre1
Changes since 1.10: +45 -2 lines
Log Message:
Changed default basket size, added interface for optimized compression settings

File Contents

# Content
1 // $Id: TreeService.cc,v 1.10 2008/10/06 15:56:51 loizides Exp $
2
3 #include "MitProd/TreeService/interface/TreeService.h"
4 #include "DataFormats/Provenance/interface/ModuleDescription.h"
5 #include "FWCore/ParameterSet/interface/ParameterSet.h"
6 #include "FWCore/ServiceRegistry/interface/ActivityRegistry.h"
7 #include "FWCore/ServiceRegistry/interface/Service.h"
8 #include "FWCore/MessageLogger/interface/JobReport.h"
9 #include "MitAna/DataUtil/interface/TreeWriter.h"
10 #include "MitAna/DataTree/interface/Names.h"
11 #include "MitCommon/OptIO/interface/OptInt.h"
12
13 using namespace edm;
14 using namespace std;
15 using namespace mithep;
16
17 //--------------------------------------------------------------------------------------------------
18 TreeService::TreeService(const ParameterSet &cfg, ActivityRegistry &ar) :
19 tws_(0),
20 fDoReset_(cfg.getUntrackedParameter<bool>("doReset",1))
21 {
22 // Constructor.
23
24 if (cfg.exists("treeNames"))
25 treeNames_=cfg.getUntrackedParameter<vector<string> >("treeNames");
26 else
27 treeNames_.push_back(Names::gkEvtTreeName);
28
29 if (cfg.exists("fileNames"))
30 fileNames_=cfg.getUntrackedParameter<vector<string> >("fileNames");
31 else
32 fileNames_.push_back("mit-test");
33
34 if (cfg.exists("pathNames"))
35 pathNames_=cfg.getUntrackedParameter<vector<string> >("pathNames");
36 else
37 pathNames_.push_back(".");
38
39 if (cfg.exists("maxSizes"))
40 maxSizes_=cfg.getUntrackedParameter<vector<unsigned> >("maxSizes");
41 else
42 maxSizes_.push_back(1024);
43
44 if (cfg.exists("compLevels"))
45 compLevels_=cfg.getUntrackedParameter<vector<unsigned> >("compLevels");
46 else
47 compLevels_.push_back(9);
48
49 if (cfg.exists("splitLevels"))
50 splitLevels_=cfg.getUntrackedParameter<vector<unsigned> >("splitLevels");
51 else
52 splitLevels_.push_back(99);
53
54 if (cfg.exists("brSizes"))
55 brSizes_=cfg.getUntrackedParameter<vector<unsigned> >("brSizes");
56 else
57 brSizes_.push_back(64*1024);
58
59 if (cfg.exists("zipMode"))
60 zipMode_=cfg.getUntrackedParameter<unsigned>("zipMode");
61 else
62 zipMode_ = 99;
63
64 if (cfg.exists("bZipThres"))
65 bZipThres_=cfg.getUntrackedParameter<double>("bZipThres");
66 else
67 bZipThres_ = -1.0;
68
69 if (cfg.exists("gZipThres"))
70 gZipThres_=cfg.getUntrackedParameter<double>("gZipThres");
71 else
72 gZipThres_ = 1.0;
73
74 if (cfg.exists("lzoThres"))
75 lzoThres_=cfg.getUntrackedParameter<double>("lzoThres");
76 else
77 lzoThres_ = -1.0;
78
79 if (cfg.exists("lzmaThres"))
80 lzmaThres_=cfg.getUntrackedParameter<double>("lzmaThres");
81 else
82 lzmaThres_ = 0.95;
83
84 if (cfg.exists("optIOVerbose"))
85 optIOVerbose_=cfg.getUntrackedParameter<unsigned>("optIOVerbose");
86 else
87 optIOVerbose_ = 0;
88
89 if (treeNames_.size()!=fileNames_.size()) {
90 throw edm::Exception(edm::errors::Configuration, "TreeService::TreeService()\n")
91 << "Number of main trees should match number of files " << treeNames_.size()
92 << " " << fileNames_.size() << "\n";
93 return;
94 }
95
96 // setup tw array
97 tws_.SetOwner(kTRUE);
98 tws_.Expand(treeNames_.size());
99
100 // init tree writers
101 for (unsigned int i=0; i<treeNames_.size(); ++i) {
102
103 TreeWriter *t = new TreeWriter(treeNames_.at(i).c_str(),0);
104 t->SetPrefix(fileNames_.at(i).c_str());
105
106 if (i<pathNames_.size())
107 t->SetBaseURL(pathNames_.at(i).c_str());
108 else if (pathNames_.size()>0)
109 t->SetBaseURL(pathNames_.at(0).c_str());
110
111 if (i<maxSizes_.size())
112 t->SetMaxSize((Long64_t)maxSizes_.at(i)*1024*1024);
113 else if (maxSizes_.size()>0)
114 t->SetMaxSize((Long64_t)maxSizes_.at(0)*1024*1024);
115
116 if (i<compLevels_.size())
117 t->SetCompressLevel(compLevels_.at(i));
118 else if (compLevels_.size()>0)
119 t->SetCompressLevel(compLevels_.at(0));
120
121 if (i<splitLevels_.size())
122 t->SetDefaultSL(splitLevels_.at(i));
123 else if (splitLevels_.size()>0)
124 t->SetDefaultSL(splitLevels_.at(0));
125
126 if (i<brSizes_.size())
127 t->SetDefaultBrSize(brSizes_.at(i));
128 else if (brSizes_.size()>0)
129 t->SetDefaultBrSize(brSizes_.at(0));
130
131 OptInt::SetZipMode(zipMode_);
132
133 OptInt::SetGzipFraction(gZipThres_);
134
135 OptInt::SetBzipFraction(bZipThres_);
136
137 OptInt::SetLzoFraction(lzoThres_);
138
139 OptInt::SetLzmaFraction(lzmaThres_);
140
141 OptInt::SetVerbose(optIOVerbose_);
142
143 //t->Print();
144 tws_.Add(t);
145 }
146
147 // set watchers
148 ar.watchPreProcessEvent (this,&TreeService::preEventProcessing);
149 ar.watchPostProcessEvent(this,&TreeService::postEventProcessing);
150 ar.watchPostBeginJob (this,&TreeService::postBeginJob);
151 ar.watchPostEndJob (this,&TreeService::postEndJob);
152 }
153
154 //--------------------------------------------------------------------------------------------------
155 TreeService::~TreeService()
156 {
157 // Destructor.
158 }
159
160 //--------------------------------------------------------------------------------------------------
161 TreeWriter *TreeService::get(const char *name)
162 {
163 // Get TreeWriter by name. If no name given, first one will be returned.
164
165 if (tws_.GetEntries()<=0)
166 return 0;
167
168 if (name==0)
169 return dynamic_cast<TreeWriter*>(tws_.At(0));
170
171 TObject *ret = tws_.FindObject(name);
172
173 return dynamic_cast<TreeWriter*>(ret);
174 }
175
176 //--------------------------------------------------------------------------------------------------
177 void TreeService::postBeginJob()
178 {
179 // Nothing to be done for now
180 }
181
182 //--------------------------------------------------------------------------------------------------
183 void TreeService::postEndJob()
184 {
185 // Clear all TreeWriter objects.
186
187 tws_.Clear();
188 }
189
190 //--------------------------------------------------------------------------------------------------
191 void TreeService::postEventProcessing(const Event&, const EventSetup&)
192 {
193 // Loop over all TreeWriter objects before processing of an event.
194
195 for (int i=0; i<tws_.GetEntries(); ++i) {
196 TreeWriter *tw=dynamic_cast<TreeWriter*>(tws_.At(i));
197 if (tw) {
198 if (i<tws_.GetEntries()-1)
199 tw->EndEvent();
200 else // make sure objects are only reset at the end (if at all)
201 tw->EndEvent(fDoReset_);
202 }
203 }
204 }
205
206 //--------------------------------------------------------------------------------------------------
207 void TreeService::preEventProcessing(const EventID&, const Timestamp&)
208 {
209 // Loop over all TreeWriter objects after processing of a events.
210
211 for (int i=0; i<tws_.GetEntries(); ++i) {
212 TreeWriter *tw=dynamic_cast<TreeWriter*>(tws_.At(i));
213 if (tw) {
214 if (i==0) // make sure objects are only reset at the beginning (if at all)
215 tw->BeginEvent(fDoReset_);
216 else
217 tw->BeginEvent();
218 }
219 }
220 }