ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitProd/TreeService/src/TreeService.cc
Revision: 1.10
Committed: Mon Oct 6 15:56:51 2008 UTC (16 years, 7 months ago) by loizides
Content type: text/plain
Branch: MAIN
CVS Tags: Mit_006b, Mit_006a, Mit_006, Mit_005
Changes since 1.9: +16 -7 lines
Log Message:
Do obj reset only at start and end.

File Contents

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