ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitProd/TreeService/src/TreeService.cc
Revision: 1.9
Committed: Wed Jul 30 11:30:02 2008 UTC (16 years, 9 months ago) by loizides
Content type: text/plain
Branch: MAIN
CVS Tags: Mit_004, MITHEP_2_0_x
Changes since 1.8: +2 -2 lines
Log Message:
Cosmetics

File Contents

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