ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitProd/TreeService/src/TreeService.cc
(Generate patch)

Comparing UserCode/MitProd/TreeService/src/TreeService.cc (file contents):
Revision 1.1 by loizides, Tue May 27 20:09:09 2008 UTC vs.
Revision 1.14 by bendavid, Tue Nov 3 14:01:52 2009 UTC

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

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines