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

# User Rev Content
1 bendavid 1.11 // $Id: TreeService.cc,v 1.10 2008/10/06 15:56:51 loizides Exp $
2 loizides 1.1
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 loizides 1.6 #include "MitAna/DataTree/interface/Names.h"
11 bendavid 1.11 #include "MitCommon/OptIO/interface/OptInt.h"
12 loizides 1.1
13     using namespace edm;
14     using namespace std;
15     using namespace mithep;
16    
17 paus 1.2 //--------------------------------------------------------------------------------------------------
18 loizides 1.8 TreeService::TreeService(const ParameterSet &cfg, ActivityRegistry &ar) :
19 loizides 1.10 tws_(0),
20     fDoReset_(cfg.getUntrackedParameter<bool>("doReset",1))
21 loizides 1.3 {
22 loizides 1.8 // Constructor.
23    
24 loizides 1.6 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 bendavid 1.11 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 loizides 1.6
89 loizides 1.3 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 loizides 1.1 }
95    
96     // setup tw array
97     tws_.SetOwner(kTRUE);
98     tws_.Expand(treeNames_.size());
99    
100     // init tree writers
101 paus 1.2 for (unsigned int i=0; i<treeNames_.size(); ++i) {
102 loizides 1.1
103 loizides 1.10 TreeWriter *t = new TreeWriter(treeNames_.at(i).c_str(),0);
104 loizides 1.1 t->SetPrefix(fileNames_.at(i).c_str());
105 paus 1.2
106 loizides 1.7 if (i<pathNames_.size())
107 paus 1.2 t->SetBaseURL(pathNames_.at(i).c_str());
108     else if (pathNames_.size()>0)
109     t->SetBaseURL(pathNames_.at(0).c_str());
110    
111 loizides 1.7 if (i<maxSizes_.size())
112 loizides 1.4 t->SetMaxSize((Long64_t)maxSizes_.at(i)*1024*1024);
113 paus 1.2 else if (maxSizes_.size()>0)
114 loizides 1.4 t->SetMaxSize((Long64_t)maxSizes_.at(0)*1024*1024);
115 paus 1.2
116 loizides 1.7 if (i<compLevels_.size())
117 paus 1.2 t->SetCompressLevel(compLevels_.at(i));
118     else if (compLevels_.size()>0)
119     t->SetCompressLevel(compLevels_.at(0));
120    
121 loizides 1.7 if (i<splitLevels_.size())
122 paus 1.2 t->SetDefaultSL(splitLevels_.at(i));
123     else if (splitLevels_.size()>0)
124     t->SetDefaultSL(splitLevels_.at(0));
125    
126 loizides 1.7 if (i<brSizes_.size())
127 paus 1.2 t->SetDefaultBrSize(brSizes_.at(i));
128     else if (brSizes_.size()>0)
129     t->SetDefaultBrSize(brSizes_.at(0));
130 loizides 1.1
131 bendavid 1.11 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 loizides 1.1 //t->Print();
144     tws_.Add(t);
145     }
146    
147     // set watchers
148 loizides 1.8 ar.watchPreProcessEvent (this,&TreeService::preEventProcessing);
149     ar.watchPostProcessEvent(this,&TreeService::postEventProcessing);
150     ar.watchPostBeginJob (this,&TreeService::postBeginJob);
151     ar.watchPostEndJob (this,&TreeService::postEndJob);
152 loizides 1.1 }
153    
154 paus 1.2 //--------------------------------------------------------------------------------------------------
155 loizides 1.1 TreeService::~TreeService()
156     {
157 loizides 1.8 // Destructor.
158 loizides 1.1 }
159    
160 paus 1.2 //--------------------------------------------------------------------------------------------------
161 loizides 1.9 TreeWriter *TreeService::get(const char *name)
162 loizides 1.1 {
163 loizides 1.8 // Get TreeWriter by name. If no name given, first one will be returned.
164    
165 paus 1.2 if (tws_.GetEntries()<=0)
166     return 0;
167 loizides 1.1
168 paus 1.2 if (name==0)
169 loizides 1.1 return dynamic_cast<TreeWriter*>(tws_.At(0));
170    
171     TObject *ret = tws_.FindObject(name);
172 paus 1.2
173 loizides 1.1 return dynamic_cast<TreeWriter*>(ret);
174     }
175    
176 paus 1.2 //--------------------------------------------------------------------------------------------------
177 loizides 1.1 void TreeService::postBeginJob()
178     {
179 loizides 1.8 // Nothing to be done for now
180 loizides 1.1 }
181    
182 paus 1.2 //--------------------------------------------------------------------------------------------------
183 loizides 1.1 void TreeService::postEndJob()
184     {
185 loizides 1.8 // Clear all TreeWriter objects.
186    
187 loizides 1.1 tws_.Clear();
188     }
189    
190 paus 1.2 //--------------------------------------------------------------------------------------------------
191 loizides 1.1 void TreeService::postEventProcessing(const Event&, const EventSetup&)
192     {
193 loizides 1.8 // Loop over all TreeWriter objects before processing of an event.
194    
195 paus 1.2 for (int i=0; i<tws_.GetEntries(); ++i) {
196 loizides 1.1 TreeWriter *tw=dynamic_cast<TreeWriter*>(tws_.At(i));
197 loizides 1.10 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 loizides 1.1 }
204     }
205    
206 paus 1.2 //--------------------------------------------------------------------------------------------------
207 loizides 1.1 void TreeService::preEventProcessing(const EventID&, const Timestamp&)
208     {
209 loizides 1.8 // Loop over all TreeWriter objects after processing of a events.
210    
211 paus 1.2 for (int i=0; i<tws_.GetEntries(); ++i) {
212 loizides 1.1 TreeWriter *tw=dynamic_cast<TreeWriter*>(tws_.At(i));
213 loizides 1.10 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 loizides 1.1 }
220     }