CMS 3D CMS Logo

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 
94  DQMStore* store = edm::Service<DQMStore>().operator->();
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 
104  DQMStore* store = edm::Service<DQMStore>().operator->();
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 
ctppsCommonDQMSource_cfi.verbosity
verbosity
Definition: ctppsCommonDQMSource_cfi.py:14
MEtoEDMConverter::MEtoEDMConverter
MEtoEDMConverter(const edm::ParameterSet &)
Definition: MEtoEDMConverter.cc:20
MEtoEDMConverter::endLuminosityBlockProduce
void endLuminosityBlockProduce(edm::LuminosityBlock &, const edm::EventSetup &) override
Definition: MEtoEDMConverter.cc:103
MEtoEDMConverter::putData
void putData(DQMStore::IGetter &g, T &iPutTo, bool iLumiOnly, uint32_t run, uint32_t lumi)
Definition: MEtoEDMConverter.cc:111
MonitorElementData::Kind::INT
MEtoEDM
Definition: MEtoEDMFormat.h:37
edm::LuminosityBlock
Definition: LuminosityBlock.h:50
MonitorElementData::Kind::TH1S
edm::Run
Definition: Run.h:45
MEtoEDMConverter.h
MonitorElementData::Kind::TH1F
MonitorElementData::Kind::STRING
cms::cuda::assert
assert(be >=bs)
dqm::implementation::DQMStore::meBookerGetter
void meBookerGetter(iFunc f)
Definition: DQMStore.h:632
dqm::legacy::MonitorElement
Definition: MonitorElement.h:462
MEtoEDMConverter::endRunProduce
void endRunProduce(edm::Run &, const edm::EventSetup &) override
Definition: MEtoEDMConverter.cc:93
edm::ParameterSet::getUntrackedParameter
T getUntrackedParameter(std::string const &, T const &) const
edm::LuminosityBlockBase::run
RunNumber_t run() const
Definition: LuminosityBlockBase.h:42
edm::LogInfo
Log< level::Info, false > LogInfo
Definition: MessageLogger.h:125
dqm::implementation::IGetter::getAllContents
virtual std::vector< dqm::harvesting::MonitorElement * > getAllContents(std::string const &path) const
Definition: DQMStore.cc:609
MEtoEDMConverter::beginJob
void beginJob() override
Definition: MEtoEDMConverter.cc:84
edm::RunBase::run
RunNumber_t run() const
Definition: RunBase.h:40
MonitorElementData::Kind::TH2D
mps_monitormerge.items
list items
Definition: mps_monitormerge.py:29
MEtoEDMConverter::produce
void produce(edm::Event &, const edm::EventSetup &) override
Definition: MEtoEDMConverter.cc:304
MainPageGenerator.fName
fName
Definition: MainPageGenerator.py:301
MonitorElementData::Kind::TH2F
MEtoEDMConverter::~MEtoEDMConverter
~MEtoEDMConverter() override
MEtoEDMConverter::globalBeginLuminosityBlock
std::shared_ptr< meedm::Void > globalBeginLuminosityBlock(edm::LuminosityBlock const &, edm::EventSetup const &) const override
Definition: MEtoEDMConverter.cc:98
dqm::legacy::DQMStore
Definition: DQMStore.h:728
DQMToken.h
MEtoEDMConverter::verbosity
int verbosity
Definition: MEtoEDMConverter.h:87
MEtoEDMConverter::path
std::string path
Definition: MEtoEDMConverter.h:89
MEtoEDMFormat.h
MEtoEDMConverter::globalBeginRun
std::shared_ptr< meedm::Void > globalBeginRun(edm::Run const &, const edm::EventSetup &) const override
Definition: MEtoEDMConverter.cc:86
b
double b
Definition: hdecay.h:118
MEtoEDMConverter::globalEndRun
void globalEndRun(edm::Run const &, const edm::EventSetup &) override
Definition: MEtoEDMConverter.cc:91
edm::ParameterSet
Definition: ParameterSet.h:47
MEtoEDMConverter::fName
std::string fName
Definition: MEtoEDMConverter.h:86
edm::Service
Definition: Service.h:30
iEvent
int iEvent
Definition: GenABIO.cc:224
edm::LuminosityBlockID::luminosityBlock
LuminosityBlockNumber_t luminosityBlock() const
Definition: LuminosityBlockID.h:42
edm::LuminosityBlockBase::id
LuminosityBlockID id() const
Definition: LuminosityBlockBase.h:44
edm::EventSetup
Definition: EventSetup.h:58
edm::LogError
Log< level::Error, false > LogError
Definition: MessageLogger.h:123
MonitorElementData::Kind::TH1D
AlCaHLTBitMon_QueryRunRegistry.string
string string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
MonitorElementData::Kind::TH2S
MEtoEDMConverter::frequency
int frequency
Definition: MEtoEDMConverter.h:88
edm::Transition::EndLuminosityBlock
eostools.move
def move(src, dest)
Definition: eostools.py:511
writedatasetfile.run
run
Definition: writedatasetfile.py:27
MonitorElementData::Kind::TPROFILE2D
MonitorElementData::Kind::TH3F
T
long double T
Definition: Basic3DVectorLD.h:48
dqm::implementation::IGetter
Definition: DQMStore.h:484
dqm::implementation::IBooker
Definition: DQMStore.h:43
hlt_dqm_clientPB-live_cfg.me
me
Definition: hlt_dqm_clientPB-live_cfg.py:61
edm::Event
Definition: Event.h:73
edm::Transition::EndRun
lumi
Definition: LumiSectionData.h:20
MonitorElementData::Kind::TPROFILE
MonitorElementData::Kind::REAL
g
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