ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitProd/TreeService/src/TreeService.cc
Revision: 1.15
Committed: Wed Nov 4 16:59:22 2009 UTC (15 years, 6 months ago) by loizides
Content type: text/plain
Branch: MAIN
CVS Tags: Mit_032, Mit_031, Mit_025c_branch2, Mit_025c_branch1, Mit_030, Mit_029c, Mit_029b, Mit_030_pre1, Mit_029a, Mit_029, Mit_029_pre1, Mit_028a, Mit_025c_branch0, Mit_028, Mit_027a, Mit_027, Mit_026, Mit_025e, Mit_025d, Mit_025c, Mit_025b, Mit_025a, Mit_025, Mit_025pre2, Mit_024b, Mit_025pre1, Mit_024a, Mit_024, Mit_023, Mit_022a, Mit_022, Mit_020d, TMit_020d, Mit_020c, Mit_021, Mit_021pre2, Mit_021pre1, Mit_020b, Mit_020a, Mit_020, Mit_020pre1, Mit_018, Mit_017, Mit_017pre3, Mit_017pre2, Mit_017pre1, Mit_016, Mit_015b, Mit_015a, Mit_015, Mit_014e, Mit_014d, Mit_014c, Mit_014b, Mit_014a, Mit_014, Mit_014pre3, Mit_014pre2, Mit_014pre1, Mit_013d, Mit_013c, Mit_013b, Mit_013a, Mit_013, Mit_013pre1, Mit_012i, Mit_012h, Mit_012g, Mit_012f, Mit_012e, Mit_012d, Mit_012c, Mit_012b, Mit_012a, Mit_012, HEAD
Branch point for: Mit_025c_branch
Changes since 1.14: +14 -9 lines
Log Message:
Service by default off.

File Contents

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