CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
MEtoEDMConverter.cc
Go to the documentation of this file.
1 
2 
10 #include <cassert>
11 
13 #include "classlib/utils/StringList.h"
14 #include "classlib/utils/StringOps.h"
17 
18 using namespace lat;
19 
21  std::string MsgLoggerCat = "MEtoEDMConverter_MEtoEDMConverter";
22 
23  // get information from parameter set
24  fName = iPSet.getUntrackedParameter<std::string>("Name", "MEtoEDMConverter");
25  verbosity = iPSet.getUntrackedParameter<int>("Verbosity", 0);
26  frequency = iPSet.getUntrackedParameter<int>("Frequency", 50);
27  path = iPSet.getUntrackedParameter<std::string>("MEPathToSave");
28  // use value of first digit to determine default output level (inclusive)
29  // 0 is none, 1 is basic, 2 is fill output, 3 is gather output
30  verbosity %= 10;
31 
32  // print out Parameter Set information being used
33  if (verbosity >= 0) {
34  edm::LogInfo(MsgLoggerCat) << "\n===============================\n"
35  << "Initialized as EDProducer with parameter values:\n"
36  << " Name = " << fName << "\n"
37  << " Verbosity = " << verbosity << "\n"
38  << " Frequency = " << frequency << "\n"
39  << " Path = " << path << "\n"
40  << "===============================\n";
41  }
42 
43  std::string sName;
44 
45  // create persistent objects
46 
47  sName = fName + "Run";
48  produces<MEtoEDM<TH1F>, edm::Transition::EndRun>(sName);
49  produces<MEtoEDM<TH1S>, edm::Transition::EndRun>(sName);
50  produces<MEtoEDM<TH1D>, edm::Transition::EndRun>(sName);
51  produces<MEtoEDM<TH2F>, edm::Transition::EndRun>(sName);
52  produces<MEtoEDM<TH2S>, edm::Transition::EndRun>(sName);
53  produces<MEtoEDM<TH2D>, edm::Transition::EndRun>(sName);
54  produces<MEtoEDM<TH3F>, edm::Transition::EndRun>(sName);
55  produces<MEtoEDM<TProfile>, edm::Transition::EndRun>(sName);
56  produces<MEtoEDM<TProfile2D>, edm::Transition::EndRun>(sName);
57  produces<MEtoEDM<double>, edm::Transition::EndRun>(sName);
58  produces<MEtoEDM<long long>, edm::Transition::EndRun>(sName);
59  produces<MEtoEDM<TString>, edm::Transition::EndRun>(sName);
60 
61  sName = fName + "Lumi";
62  produces<MEtoEDM<TH1F>, edm::Transition::EndLuminosityBlock>(sName);
63  produces<MEtoEDM<TH1S>, edm::Transition::EndLuminosityBlock>(sName);
64  produces<MEtoEDM<TH1D>, edm::Transition::EndLuminosityBlock>(sName);
65  produces<MEtoEDM<TH2F>, edm::Transition::EndLuminosityBlock>(sName);
66  produces<MEtoEDM<TH2S>, edm::Transition::EndLuminosityBlock>(sName);
67  produces<MEtoEDM<TH2D>, edm::Transition::EndLuminosityBlock>(sName);
68  produces<MEtoEDM<TH3F>, edm::Transition::EndLuminosityBlock>(sName);
69  produces<MEtoEDM<TProfile>, edm::Transition::EndLuminosityBlock>(sName);
70  produces<MEtoEDM<TProfile2D>, edm::Transition::EndLuminosityBlock>(sName);
71  produces<MEtoEDM<double>, edm::Transition::EndLuminosityBlock>(sName);
72  produces<MEtoEDM<long long>, edm::Transition::EndLuminosityBlock>(sName);
73  produces<MEtoEDM<TString>, edm::Transition::EndLuminosityBlock>(sName);
74 
75  consumesMany<DQMToken, edm::InLumi>();
76  consumesMany<DQMToken, edm::InRun>();
77  usesResource("DQMStore");
78 
79  static_assert(sizeof(int64_t) == sizeof(long long), "type int64_t is not the same length as long long");
80 }
81 
83 
85 
86 std::shared_ptr<meedm::Void> MEtoEDMConverter::globalBeginRun(edm::Run const& iRun,
87  const edm::EventSetup& iSetup) const {
88  return std::shared_ptr<meedm::Void>();
89 }
90 
91 void MEtoEDMConverter::globalEndRun(edm::Run const& iRun, const edm::EventSetup& iSetup) {}
92 
95  store->meBookerGetter([&](DQMStore::IBooker& b, DQMStore::IGetter& g) { putData(g, iRun, false, iRun.run(), 0); });
96 }
97 
99  edm::EventSetup const&) const {
100  return std::shared_ptr<meedm::Void>();
101 }
102 
106  putData(g, iLumi, true, iLumi.run(), iLumi.id().luminosityBlock());
107  });
108 }
109 
110 template <class T>
111 void MEtoEDMConverter::putData(DQMStore::IGetter& iGetter, T& iPutTo, bool iLumiOnly, uint32_t run, uint32_t lumi) {
112  std::string MsgLoggerCat = "MEtoEDMConverter_putData";
113 
114  if (verbosity > 0)
115  edm::LogInfo(MsgLoggerCat) << "\nStoring MEtoEDM dataformat histograms.";
116 
117  // extract ME information into vectors
118  std::vector<MonitorElement*>::iterator mmi, mme;
119  std::vector<MonitorElement*> items(iGetter.getAllContents(path, run, lumi));
120 
121  unsigned int n1F = 0;
122  unsigned int n1S = 0;
123  unsigned int n1D = 0;
124  unsigned int n2F = 0;
125  unsigned int n2S = 0;
126  unsigned int n2D = 0;
127  unsigned int n3F = 0;
128  unsigned int nProf = 0;
129  unsigned int nProf2 = 0;
130  unsigned int nDouble = 0;
131  unsigned int nInt64 = 0;
132  unsigned int nString = 0;
133 
134  for (mmi = items.begin(), mme = items.end(); mmi != mme; ++mmi) {
135  MonitorElement* me = *mmi;
136 
137  // store only flagged ME at endLumi transition, and Run-based
138  // histo at endRun transition
139  if (iLumiOnly && !me->getLumiFlag())
140  continue;
141  if (!iLumiOnly && me->getLumiFlag())
142  continue;
143 
144  switch (me->kind()) {
146  ++nInt64;
147  break;
148 
150  ++nDouble;
151  break;
152 
154  ++nString;
155  break;
156 
158  ++n1F;
159  break;
160 
162  ++n1S;
163  break;
164 
166  ++n1D;
167  break;
168 
170  ++n2F;
171  break;
172 
174  ++n2S;
175  break;
176 
178  ++n2D;
179  break;
180 
182  ++n3F;
183  break;
184 
186  ++nProf;
187  break;
188 
190  ++nProf2;
191  break;
192 
193  default:
194  edm::LogError(MsgLoggerCat) << "ERROR: The DQM object '" << me->getFullname()
195  << "' is neither a ROOT object nor a recognised "
196  << "simple object.\n";
197  continue;
198  }
199  }
200 
201  std::unique_ptr<MEtoEDM<long long> > pOutInt(new MEtoEDM<long long>(nInt64));
202  std::unique_ptr<MEtoEDM<double> > pOutDouble(new MEtoEDM<double>(nDouble));
203  std::unique_ptr<MEtoEDM<TString> > pOutString(new MEtoEDM<TString>(nString));
204  std::unique_ptr<MEtoEDM<TH1F> > pOut1(new MEtoEDM<TH1F>(n1F));
205  std::unique_ptr<MEtoEDM<TH1S> > pOut1s(new MEtoEDM<TH1S>(n1S));
206  std::unique_ptr<MEtoEDM<TH1D> > pOut1d(new MEtoEDM<TH1D>(n1D));
207  std::unique_ptr<MEtoEDM<TH2F> > pOut2(new MEtoEDM<TH2F>(n2F));
208  std::unique_ptr<MEtoEDM<TH2S> > pOut2s(new MEtoEDM<TH2S>(n2S));
209  std::unique_ptr<MEtoEDM<TH2D> > pOut2d(new MEtoEDM<TH2D>(n2D));
210  std::unique_ptr<MEtoEDM<TH3F> > pOut3(new MEtoEDM<TH3F>(n3F));
211  std::unique_ptr<MEtoEDM<TProfile> > pOutProf(new MEtoEDM<TProfile>(nProf));
212  std::unique_ptr<MEtoEDM<TProfile2D> > pOutProf2(new MEtoEDM<TProfile2D>(nProf2));
213 
214  for (mmi = items.begin(), mme = items.end(); mmi != mme; ++mmi) {
215  MonitorElement* me = *mmi;
216 
217  // store only flagged ME at endLumi transition, and Run-based
218  // histo at endRun transition
219  // DQMStore should only hand out matching MEs
220  assert(iLumiOnly == me->getLumiFlag());
221 
222  // get monitor elements
223  switch (me->kind()) {
225  pOutInt->putMEtoEdmObject(me->getFullname(), me->getIntValue());
226  break;
227 
229  pOutDouble->putMEtoEdmObject(me->getFullname(), me->getFloatValue());
230  break;
231 
233  pOutString->putMEtoEdmObject(me->getFullname(), me->getStringValue());
234  break;
235 
237  pOut1->putMEtoEdmObject(me->getFullname(), *me->getTH1F());
238  break;
239 
241  pOut1s->putMEtoEdmObject(me->getFullname(), *me->getTH1S());
242  break;
243 
245  pOut1d->putMEtoEdmObject(me->getFullname(), *me->getTH1D());
246  break;
247 
249  pOut2->putMEtoEdmObject(me->getFullname(), *me->getTH2F());
250  break;
251 
253  pOut2s->putMEtoEdmObject(me->getFullname(), *me->getTH2S());
254  break;
255 
257  pOut2d->putMEtoEdmObject(me->getFullname(), *me->getTH2D());
258  break;
259 
261  pOut3->putMEtoEdmObject(me->getFullname(), *me->getTH3F());
262  break;
263 
265  pOutProf->putMEtoEdmObject(me->getFullname(), *me->getTProfile());
266  break;
267 
269  pOutProf2->putMEtoEdmObject(me->getFullname(), *me->getTProfile2D());
270  break;
271 
272  default:
273  edm::LogError(MsgLoggerCat) << "ERROR: The DQM object '" << me->getFullname()
274  << "' is neither a ROOT object nor a recognised "
275  << "simple object.\n";
276  continue;
277  }
278 
279  } // end loop through monitor elements
280 
281  std::string sName;
282 
283  if (iLumiOnly) {
284  sName = fName + "Lumi";
285  } else {
286  sName = fName + "Run";
287  }
288 
289  // produce objects to put in events
290  iPutTo.put(std::move(pOutInt), sName);
291  iPutTo.put(std::move(pOutDouble), sName);
292  iPutTo.put(std::move(pOutString), sName);
293  iPutTo.put(std::move(pOut1), sName);
294  iPutTo.put(std::move(pOut1s), sName);
295  iPutTo.put(std::move(pOut1d), sName);
296  iPutTo.put(std::move(pOut2), sName);
297  iPutTo.put(std::move(pOut2s), sName);
298  iPutTo.put(std::move(pOut2d), sName);
299  iPutTo.put(std::move(pOut3), sName);
300  iPutTo.put(std::move(pOutProf), sName);
301  iPutTo.put(std::move(pOutProf2), sName);
302 }
303 
LuminosityBlockID id() const
virtual TH2D * getTH2D() const
T getUntrackedParameter(std::string const &, T const &) const
virtual TH2F * getTH2F() const
RunNumber_t run() const
Definition: RunBase.h:40
virtual TH1F * getTH1F() const
virtual int64_t getIntValue() const
Kind kind() const
Get the type of the monitor element.
~MEtoEDMConverter() override
Log< level::Error, false > LogError
void endRunProduce(edm::Run &, const edm::EventSetup &) override
assert(be >=bs)
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e g
Definition: Activities.doc:4
virtual TH1S * getTH1S() const
virtual std::vector< dqm::harvesting::MonitorElement * > getAllContents(std::string const &path) const
Definition: DQMStore.cc:609
void beginJob() override
void produce(edm::Event &, const edm::EventSetup &) override
int iEvent
Definition: GenABIO.cc:224
std::shared_ptr< meedm::Void > globalBeginLuminosityBlock(edm::LuminosityBlock const &, edm::EventSetup const &) const override
def move
Definition: eostools.py:511
std::shared_ptr< meedm::Void > globalBeginRun(edm::Run const &, const edm::EventSetup &) const override
void meBookerGetter(iFunc f)
Definition: DQMStore.h:632
RunNumber_t run() const
list lumi
Definition: dqmdumpme.py:53
void globalEndRun(edm::Run const &, const edm::EventSetup &) override
virtual TProfile2D * getTProfile2D() const
virtual TH2S * getTH2S() const
Log< level::Info, false > LogInfo
virtual TProfile * getTProfile() const
virtual TH1D * getTH1D() const
double b
Definition: hdecay.h:118
LuminosityBlockNumber_t luminosityBlock() const
bool getLumiFlag() const
true if ME is meant to be stored for each luminosity section
virtual double getFloatValue() const
virtual const std::string & getStringValue() const
std::string getFullname() const
get full name of ME including Pathname
MEtoEDMConverter(const edm::ParameterSet &)
void putData(DQMStore::IGetter &g, T &iPutTo, bool iLumiOnly, uint32_t run, uint32_t lumi)
long double T
virtual TH3F * getTH3F() const
void endLuminosityBlockProduce(edm::LuminosityBlock &, const edm::EventSetup &) override
Definition: Run.h:45