ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitProd/TreeService/src/TreeService.cc
Revision: 1.7
Committed: Tue Jul 1 16:33:55 2008 UTC (16 years, 10 months ago) by loizides
Content type: text/plain
Branch: MAIN
Changes since 1.6: +7 -8 lines
Log Message:
Cosmetics.

File Contents

# Content
1 // $Id: TreeService.cc,v 1.6 2008/06/20 17:52:24 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
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 {
20 if (cfg.exists("treeNames"))
21 treeNames_=cfg.getUntrackedParameter<vector<string> >("treeNames");
22 else
23 treeNames_.push_back(Names::gkEvtTreeName);
24
25 if (cfg.exists("fileNames"))
26 fileNames_=cfg.getUntrackedParameter<vector<string> >("fileNames");
27 else
28 fileNames_.push_back("mit-test");
29
30 if (cfg.exists("pathNames"))
31 pathNames_=cfg.getUntrackedParameter<vector<string> >("pathNames");
32 else
33 pathNames_.push_back(".");
34
35 if (cfg.exists("maxSizes"))
36 maxSizes_=cfg.getUntrackedParameter<vector<unsigned> >("maxSizes");
37 else
38 maxSizes_.push_back(1024);
39
40 if (cfg.exists("compLevels"))
41 compLevels_=cfg.getUntrackedParameter<vector<unsigned> >("compLevels");
42 else
43 compLevels_.push_back(9);
44
45 if (cfg.exists("splitLevels"))
46 splitLevels_=cfg.getUntrackedParameter<vector<unsigned> >("splitLevels");
47 else
48 splitLevels_.push_back(99);
49
50 if (cfg.exists("brSizes"))
51 brSizes_=cfg.getUntrackedParameter<vector<unsigned> >("brSizes");
52 else
53 brSizes_.push_back(32*1024);
54
55 if (treeNames_.size()!=fileNames_.size()) {
56 throw edm::Exception(edm::errors::Configuration, "TreeService::TreeService()\n")
57 << "Number of main trees should match number of files " << treeNames_.size()
58 << " " << fileNames_.size() << "\n";
59 return;
60 }
61
62 // setup tw array
63 tws_.SetOwner(kTRUE);
64 tws_.Expand(treeNames_.size());
65
66 // init tree writers
67 for (unsigned int i=0; i<treeNames_.size(); ++i) {
68
69 TreeWriter *t = new TreeWriter(treeNames_.at(i).c_str(),1);
70 t->SetPrefix(fileNames_.at(i).c_str());
71
72 if (i<pathNames_.size())
73 t->SetBaseURL(pathNames_.at(i).c_str());
74 else if (pathNames_.size()>0)
75 t->SetBaseURL(pathNames_.at(0).c_str());
76
77 if (i<maxSizes_.size())
78 t->SetMaxSize((Long64_t)maxSizes_.at(i)*1024*1024);
79 else if (maxSizes_.size()>0)
80 t->SetMaxSize((Long64_t)maxSizes_.at(0)*1024*1024);
81
82 if (i<compLevels_.size())
83 t->SetCompressLevel(compLevels_.at(i));
84 else if (compLevels_.size()>0)
85 t->SetCompressLevel(compLevels_.at(0));
86
87 if (i<splitLevels_.size())
88 t->SetDefaultSL(splitLevels_.at(i));
89 else if (splitLevels_.size()>0)
90 t->SetDefaultSL(splitLevels_.at(0));
91
92 if (i<brSizes_.size())
93 t->SetDefaultBrSize(brSizes_.at(i));
94 else if (brSizes_.size()>0)
95 t->SetDefaultBrSize(brSizes_.at(0));
96
97 //t->Print();
98 tws_.Add(t);
99 }
100
101 // set watchers
102 r.watchPreProcessEvent (this,&TreeService::preEventProcessing);
103 r.watchPostProcessEvent(this,&TreeService::postEventProcessing);
104 r.watchPostBeginJob (this,&TreeService::postBeginJob);
105 r.watchPostEndJob (this,&TreeService::postEndJob);
106 }
107
108 //--------------------------------------------------------------------------------------------------
109 TreeService::~TreeService()
110 {
111 }
112
113 //--------------------------------------------------------------------------------------------------
114 TreeWriter* TreeService::get(const char *name)
115 {
116 if (tws_.GetEntries()<=0)
117 return 0;
118
119 if (name==0)
120 return dynamic_cast<TreeWriter*>(tws_.At(0));
121
122 TObject *ret = tws_.FindObject(name);
123
124 return dynamic_cast<TreeWriter*>(ret);
125 }
126
127 //--------------------------------------------------------------------------------------------------
128 void TreeService::postBeginJob()
129 {
130 // nothing to be done for now
131 }
132
133 //--------------------------------------------------------------------------------------------------
134 void TreeService::postEndJob()
135 {
136 tws_.Clear();
137 }
138
139 //--------------------------------------------------------------------------------------------------
140 void TreeService::postEventProcessing(const Event&, const EventSetup&)
141 {
142 for (int i=0; i<tws_.GetEntries(); ++i) {
143 TreeWriter *tw=dynamic_cast<TreeWriter*>(tws_.At(i));
144 if (tw)
145 tw->EndEvent();
146 }
147 }
148
149 //--------------------------------------------------------------------------------------------------
150 void TreeService::preEventProcessing(const EventID&, const Timestamp&)
151 {
152 for (int i=0; i<tws_.GetEntries(); ++i) {
153 TreeWriter *tw=dynamic_cast<TreeWriter*>(tws_.At(i));
154 if (tw)
155 tw->BeginEvent();
156 }
157 }