CMS 3D CMS Logo

DQMStore.h
Go to the documentation of this file.
1 #ifndef DQMServices_Core_DQMStore_h
2 #define DQMServices_Core_DQMStore_h
3 
4 #if __GNUC__ && !defined DQM_DEPRECATED
5 //#define DQM_DEPRECATED __attribute__((deprecated))
6 #define DQM_DEPRECATED
7 #endif
8 
9 #include <cassert>
10 #include <cstdio>
11 #include <cstdlib>
12 #include <iosfwd>
13 #include <list>
14 #include <map>
15 #include <memory>
16 #include <mutex>
17 #include <set>
18 #include <string>
19 #include <thread>
20 #include <vector>
21 #include <cxxabi.h>
22 #include <execinfo.h>
23 
24 #include <classlib/utils/Regexp.h>
25 
28 
29 namespace edm {
30  class DQMHttpSource;
31  class ParameterSet;
32  class ActivityRegistry;
33  class GlobalContext;
34 } // namespace edm
35 namespace lat {
36  class Regexp;
37 }
38 namespace dqmstorepb {
39  class ROOTFilePB;
40  class ROOTFilePB_Histo;
41 } // namespace dqmstorepb
42 
43 class QCriterion;
44 class TFile;
45 class TBufferFile;
46 class TObject;
47 class TH1;
48 class TObjString;
49 class TH1F;
50 class TH1S;
51 class TH1D;
52 class TH2F;
53 class TH2S;
54 class TH2D;
55 class TH3F;
56 class TProfile;
57 class TProfile2D;
58 class TNamed;
59 
60 // forward-declare all our friends
61 class DQMService;
62 class DQMNet;
63 class DQMArchiver;
64 class DQMStoreExample; // for get{All,Matching}Contents -- sole user of this method!
66 class DQMRootSource;
67 class DQMFileSaver;
68 class MEtoEDMConverter;
69 
70 namespace dqm::dqmstoreimpl {
71  // dqmstoreimpl is a different namespace from dqm::impl, so we can globally
72  // change the ME subtype here
74 
79  class fastmatch {
80  enum MatchingHeuristicEnum { UseFull, OneStarStart, OneStarEnd, TwoStar };
81 
82  public:
83  fastmatch(std::string fastString);
84 
85  bool match(std::string const& s) const;
86 
87  private:
88  // checks if two strings are equal, starting at the back of the strings
89  bool compare_strings_reverse(std::string const& pattern, std::string const& input) const;
90  // checks if two strings are equal, starting at the front of the strings
91  bool compare_strings(std::string const& pattern, std::string const& input) const;
92 
93  std::unique_ptr<lat::Regexp> regexp_{nullptr};
96  };
97 
98  class DQMStore {
99  public:
100  // legacy exposes the biggest API and implicitly converts to reco and
101  // harvesting, with reduced APIs.
102 
103  enum SaveReferenceTag { SaveWithoutReference, SaveWithReference, SaveWithReferenceForQTest };
104  enum OpenRunDirs { KeepRunDirs, StripRunDirs };
105 
106  class IBooker {
107  public:
108  friend class DQMStore;
109 
110  MonitorElement* bookInt(TString const& name);
111  MonitorElement* bookFloat(TString const& name);
112  MonitorElement* bookString(TString const& name, TString const& value);
113  MonitorElement* book1D(
114  TString const& name, TString const& title, int const nchX, double const lowX, double const highX);
115  MonitorElement* book1D(TString const& name, TString const& title, int nchX, float const* xbinsize);
116  MonitorElement* book1D(TString const& name, TH1F* object);
117  MonitorElement* book1S(TString const& name, TString const& title, int nchX, double lowX, double highX);
118  MonitorElement* book1S(TString const& name, TH1S* object);
119  MonitorElement* book1DD(TString const& name, TString const& title, int nchX, double lowX, double highX);
120  MonitorElement* book1DD(TString const& name, TH1D* object);
121  MonitorElement* book2D(TString const& name,
122  TString const& title,
123  int nchX,
124  double lowX,
125  double highX,
126  int nchY,
127  double lowY,
128  double highY);
129  MonitorElement* book2D(
130  TString const& name, TString const& title, int nchX, float const* xbinsize, int nchY, float const* ybinsize);
131  MonitorElement* book2D(TString const& name, TH2F* object);
132  MonitorElement* book2S(TString const& name,
133  TString const& title,
134  int nchX,
135  double lowX,
136  double highX,
137  int nchY,
138  double lowY,
139  double highY);
140  MonitorElement* book2S(
141  TString const& name, TString const& title, int nchX, float const* xbinsize, int nchY, float const* ybinsize);
142  MonitorElement* book2S(TString const& name, TH2S* object);
143  MonitorElement* book2DD(TString const& name,
144  TString const& title,
145  int nchX,
146  double lowX,
147  double highX,
148  int nchY,
149  double lowY,
150  double highY);
151  MonitorElement* book2DD(TString const& name, TH2D* object);
152  MonitorElement* book3D(TString const& name,
153  TString const& title,
154  int nchX,
155  double lowX,
156  double highX,
157  int nchY,
158  double lowY,
159  double highY,
160  int nchZ,
161  double lowZ,
162  double highZ);
163  MonitorElement* book3D(TString const& name, TH3F* object);
164  MonitorElement* bookProfile(TString const& name,
165  TString const& title,
166  int nchX,
167  double lowX,
168  double highX,
169  int nchY,
170  double lowY,
171  double highY,
172  char const* option = "s");
173  MonitorElement* bookProfile(TString const& name,
174  TString const& title,
175  int nchX,
176  double lowX,
177  double highX,
178  double lowY,
179  double highY,
180  char const* option = "s");
181  MonitorElement* bookProfile(TString const& name,
182  TString const& title,
183  int nchX,
184  double const* xbinsize,
185  int nchY,
186  double lowY,
187  double highY,
188  char const* option = "s");
189  MonitorElement* bookProfile(TString const& name,
190  TString const& title,
191  int nchX,
192  double const* xbinsize,
193  double lowY,
194  double highY,
195  char const* option = "s");
196  MonitorElement* bookProfile(TString const& name, TProfile* object);
197  MonitorElement* bookProfile2D(TString const& name,
198  TString const& title,
199  int nchX,
200  double lowX,
201  double highX,
202  int nchY,
203  double lowY,
204  double highY,
205  double lowZ,
206  double highZ,
207  char const* option = "s");
208  MonitorElement* bookProfile2D(TString const& name,
209  TString const& title,
210  int nchX,
211  double lowX,
212  double highX,
213  int nchY,
214  double lowY,
215  double highY,
216  int nchZ,
217  double lowZ,
218  double highZ,
219  char const* option = "s");
220  MonitorElement* bookProfile2D(TString const& name, TProfile2D* object);
221 
222  void cd();
223  void cd(std::string const& dir);
224  void setCurrentFolder(std::string const& fullpath);
225  void goUp();
226  std::string const& pwd();
227 
228  IBooker() = delete;
229  IBooker(IBooker const&) = delete;
230 
231  private:
232  explicit IBooker(DQMStore* store) noexcept : owner_{store} { assert(store); }
233 
234  // Embedded classes do not natively own a pointer to the embedding
235  // class. We therefore need to store a pointer to the main
236  // DQMStore instance (owner_).
238  }; // IBooker
239 
240  class IGetter {
241  public:
242  friend class DQMStore;
243 
244  // for the supported syntaxes, see the declarations of DQMStore::getContents
245  template <typename... Args>
246  std::vector<MonitorElement*> getContents(Args&&... args) {
247  return owner_->getContents(std::forward<Args>(args)...);
248  }
249 
250  std::vector<MonitorElement*> getAllContents(std::string const& path, uint32_t runNumber = 0, uint32_t lumi = 0);
251  MonitorElement* get(std::string const& path);
252 
253  // same as get, throws an exception if histogram not found
254  MonitorElement* getElement(std::string const& path);
255 
256  std::vector<std::string> getSubdirs();
257  std::vector<std::string> getMEs();
258  bool containsAnyMonitorable(std::string const& path);
259  bool dirExists(std::string const& path);
260  void cd();
261  void cd(std::string const& dir);
262  void setCurrentFolder(std::string const& fullpath);
263 
264  IGetter() = delete;
265  IGetter(IGetter const&) = delete;
266 
267  private:
268  explicit IGetter(DQMStore* store) noexcept : owner_{store} { assert(store); }
269 
270  // Embedded classes do not natively own a pointer to the embedding
271  // class. We therefore need to store a pointer to the main
272  // DQMStore instance (owner_).
274  }; //IGetter
275 
276  // Template function to be used inside each DQM Modules' lambda
277  // functions to book MonitorElements into the DQMStore. The function
278  // calls whatever user-supplied code via the function f. The latter
279  // is passed the instance of the IBooker class (owned by the *only*
280  // DQMStore instance), that is capable of booking MonitorElements
281  // into the DQMStore via a public API. The central mutex is acquired
282  // *before* invoking and automatically released upon returns.
283  template <typename iFunc>
284  void bookTransaction(iFunc f, uint32_t run, uint32_t moduleId, bool canSaveByLumi) {
285  std::lock_guard<std::mutex> guard(book_mutex_);
286  /* Set the run number and module id only if multithreading is enabled */
287  if (enableMultiThread_) {
288  run_ = run;
289  moduleId_ = moduleId;
290  canSaveByLumi_ = canSaveByLumi;
291  }
292  IBooker booker{this};
293  f(booker);
294 
295  /* Reset the run number and module id only if multithreading is enabled */
296  if (enableMultiThread_) {
297  run_ = 0;
298  moduleId_ = 0;
299  canSaveByLumi_ = false;
300  }
301  }
302 
303  // Similar function used to book "global" histograms via the
304  // dqm::reco::MonitorElement* interface.
305  template <typename iFunc>
306  void bookConcurrentTransaction(iFunc f, uint32_t run) {
307  std::lock_guard<std::mutex> guard(book_mutex_);
308  /* Set the run_ member only if enableMultiThread is enabled */
309  if (enableMultiThread_) {
310  run_ = run;
311  moduleId_ = 0;
312  canSaveByLumi_ = false;
313  }
314  IBooker booker(this);
315  f(booker);
316 
317  /* Reset the run_ member only if enableMultiThread is enabled */
318  if (enableMultiThread_) {
319  run_ = 0;
320  moduleId_ = 0;
321  canSaveByLumi_ = false;
322  }
323  }
324 
325  // Signature needed in the harvesting where the booking is done in
326  // the endJob. No handles to the run there. Two arguments ensure the
327  // capability of booking and getting. The method relies on the
328  // initialization of run, stream and module ID to 0. The mutex is
329  // not needed.
330  template <typename iFunc>
331  void meBookerGetter(iFunc f) {
332  IBooker booker{this};
333  IGetter getter{this};
334  f(booker, getter);
335  }
336 
337  //-------------------------------------------------------------------------
338  // ---------------------- Constructors ------------------------------------
340  DQMStore(edm::ParameterSet const& pset);
341  ~DQMStore();
342 
343  //-------------------------------------------------------------------------
344  void setVerbose(unsigned level);
345 
346  // ---------------------- public navigation -------------------------------
347  std::string const& pwd() const;
348  void cd();
349  void cd(std::string const& subdir);
350  void setCurrentFolder(std::string const& fullpath);
351  void goUp();
352 
353  bool dirExists(std::string const& path) const;
354 
355  // Conversion class to allow specifications of TString const&,
356  // std::string const&, and char const* for the booking functions.
357  // Ideally, this will be replaced with std::string_view (what to do
358  // about TString?) whenever we move to C++17.
359  class char_string {
360  public:
361  char_string(TString const& str) : data_{str.Data()} {}
362  char_string(char const* str) : data_{str} {}
363  char_string(std::string const& str) : data_{str} {}
364  operator std::string const&() const { return data_; }
365  operator char const*() const { return data_.c_str(); }
366 
367  private:
369  };
370 
371  //-------------------------------------------------------------------------
372  // ---------------------- public ME booking -------------------------------
373  MonitorElement* bookInt(char_string const& name);
374  MonitorElement* bookFloat(char_string const& name);
375  MonitorElement* bookString(char_string const& name, char_string const& value);
376  MonitorElement* book1D(
377  char_string const& name, char_string const& title, int const nchX, double const lowX, double const highX);
378  MonitorElement* book1D(char_string const& name, char_string const& title, int nchX, float const* xbinsize);
379  MonitorElement* book1D(char_string const& name, TH1F* h);
380  MonitorElement* book1S(char_string const& name, char_string const& title, int nchX, double lowX, double highX);
381  MonitorElement* book1S(char_string const& name, TH1S* h);
382  MonitorElement* book1DD(char_string const& name, char_string const& title, int nchX, double lowX, double highX);
383  MonitorElement* book1DD(char_string const& name, TH1D* h);
384  MonitorElement* book2D(char_string const& name,
385  char_string const& title,
386  int nchX,
387  double lowX,
388  double highX,
389  int nchY,
390  double lowY,
391  double highY);
392  MonitorElement* book2D(char_string const& name,
393  char_string const& title,
394  int nchX,
395  float const* xbinsize,
396  int nchY,
397  float const* ybinsize);
398  MonitorElement* book2D(char_string const& name, TH2F* h);
399  MonitorElement* book2S(char_string const& name,
400  char_string const& title,
401  int nchX,
402  double lowX,
403  double highX,
404  int nchY,
405  double lowY,
406  double highY);
407  MonitorElement* book2S(char_string const& name,
408  char_string const& title,
409  int nchX,
410  float const* xbinsize,
411  int nchY,
412  float const* ybinsize);
413  MonitorElement* book2S(char_string const& name, TH2S* h);
414  MonitorElement* book2DD(char_string const& name,
415  char_string const& title,
416  int nchX,
417  double lowX,
418  double highX,
419  int nchY,
420  double lowY,
421  double highY);
422  MonitorElement* book2DD(char_string const& name, TH2D* h);
423  MonitorElement* book3D(char_string const& name,
424  char_string const& title,
425  int nchX,
426  double lowX,
427  double highX,
428  int nchY,
429  double lowY,
430  double highY,
431  int nchZ,
432  double lowZ,
433  double highZ);
434  MonitorElement* book3D(char_string const& name, TH3F* h);
435  MonitorElement* bookProfile(char_string const& name,
436  char_string const& title,
437  int nchX,
438  double lowX,
439  double highX,
440  int nchY,
441  double lowY,
442  double highY,
443  char const* option = "s");
444  MonitorElement* bookProfile(char_string const& name,
445  char_string const& title,
446  int nchX,
447  double lowX,
448  double highX,
449  double lowY,
450  double highY,
451  char const* option = "s");
452  MonitorElement* bookProfile(char_string const& name,
453  char_string const& title,
454  int nchX,
455  double const* xbinsize,
456  int nchY,
457  double lowY,
458  double highY,
459  char const* option = "s");
460  MonitorElement* bookProfile(char_string const& name,
461  char_string const& title,
462  int nchX,
463  double const* xbinsize,
464  double lowY,
465  double highY,
466  char const* option = "s");
467  MonitorElement* bookProfile(char_string const& name, TProfile* h);
468  MonitorElement* bookProfile2D(char_string const& name,
469  char_string const& title,
470  int nchX,
471  double lowX,
472  double highX,
473  int nchY,
474  double lowY,
475  double highY,
476  double lowZ,
477  double highZ,
478  char const* option = "s");
479  MonitorElement* bookProfile2D(char_string const& name,
480  char_string const& title,
481  int nchX,
482  double lowX,
483  double highX,
484  int nchY,
485  double lowY,
486  double highY,
487  int nchZ,
488  double lowZ,
489  double highZ,
490  char const* option = "s");
491  MonitorElement* bookProfile2D(char_string const& name, TProfile2D* h);
492 
493  //-------------------------------------------------------------------------
494  // ---------------------- public ME getters -------------------------------
495  std::vector<std::string> getSubdirs() const;
496  std::vector<std::string> getMEs() const;
497  bool containsAnyMonitorable(std::string const& path) const;
498 
499  MonitorElement* get(std::string const& path) const;
500  std::vector<MonitorElement*> getContents(std::string const& path) const;
501  void getContents(std::vector<std::string>& into, bool showContents = true) const;
502 
503  // ------------------------------------------------------------------------
504  // ---------------------- public I/O --------------------------------------
505  void save(std::string const& filename,
506  std::string const& path = "",
507  std::string const& pattern = "",
508  std::string const& rewrite = "",
509  uint32_t run = 0,
510  uint32_t lumi = 0,
511  SaveReferenceTag ref = SaveWithReference,
513  std::string const& fileupdate = "RECREATE");
514  void savePB(std::string const& filename, std::string const& path = "", uint32_t run = 0, uint32_t lumi = 0);
515  bool open(std::string const& filename,
516  bool overwrite = false,
517  std::string const& path = "",
518  std::string const& prepend = "",
519  OpenRunDirs stripdirs = KeepRunDirs,
520  bool fileMustExist = true);
521  bool load(std::string const& filename, OpenRunDirs stripdirs = StripRunDirs, bool fileMustExist = true);
522  bool mtEnabled() { return enableMultiThread_; };
523 
524  public:
525  // -------------------------------------------------------------------------
526  // ---------------------- Public print methods -----------------------------
527  void showDirStructure() const;
528 
529  // ---------------------- Public check options -----------------------------
530  bool isCollate() const;
531 
532  // -------------------------------------------------------------------------
533  // ---------------------- Quality Test methods -----------------------------
534  QCriterion* getQCriterion(std::string const& qtname) const;
535  QCriterion* createQTest(std::string const& algoname, std::string const& qtname);
536  void useQTest(std::string const& dir, std::string const& qtname);
537  int useQTestByMatch(std::string const& pattern, std::string const& qtname);
538  void runQTests();
539  int getStatus(std::string const& path = "") const;
540 
541  private:
542  // ---------------- Navigation -----------------------
543  bool cdInto(std::string const& path) const;
544 
545  // ------------------- Reference ME -------------------------------
546  bool isCollateME(MonitorElement* me) const;
547 
548  // ------------------- Private "getters" ------------------------------
549  bool readFilePB(std::string const& filename,
550  bool overwrite = false,
551  std::string const& path = "",
552  std::string const& prepend = "",
553  OpenRunDirs stripdirs = StripRunDirs,
554  bool fileMustExist = true);
555  bool readFile(std::string const& filename,
556  bool overwrite = false,
557  std::string const& path = "",
558  std::string const& prepend = "",
559  OpenRunDirs stripdirs = StripRunDirs,
560  bool fileMustExist = true);
561  void makeDirectory(std::string const& path);
562  unsigned int readDirectory(TFile* file,
563  bool overwrite,
564  std::string const& path,
565  std::string const& prepend,
566  std::string const& curdir,
567  OpenRunDirs stripdirs);
568 
569  MonitorElement* findObject(
570  uint32_t run, uint32_t lumi, uint32_t moduleId, std::string const& dir, std::string const& name) const;
571 
572  void get_info(dqmstorepb::ROOTFilePB_Histo const&, std::string& dirname, std::string& objname, TObject** obj);
573 
574  public:
575  std::vector<MonitorElement*> getAllContents(std::string const& path,
576  uint32_t runNumber = 0,
577  uint32_t lumi = 0) const;
578  std::vector<MonitorElement*> getMatchingContents(std::string const& pattern,
579  lat::Regexp::Syntax syntaxType = lat::Regexp::Wildcard) const;
580 
581  // lumisection based histograms manipulations
582  void cloneLumiHistograms(uint32_t run, uint32_t lumi, uint32_t moduleId);
583  void cloneRunHistograms(uint32_t run, uint32_t moduleId);
584 
585  void deleteUnusedLumiHistograms(uint32_t run, uint32_t lumi);
586 
587  DQMStore(DQMStore const&) = delete;
588  DQMStore& operator=(DQMStore const&) = delete;
589 
590  private:
591  // ---------------- Miscellaneous -----------------------------
592  void initializeFrom(const edm::ParameterSet&);
593  void reset();
594  void forceReset();
595  void postGlobalBeginLumi(const edm::GlobalContext&);
596 
597  bool extract(TObject* obj, std::string const& dir, bool overwrite, bool collateHistograms);
598  TObject* extractNextObject(TBufferFile&) const;
599 
600  // ---------------------- Booking ------------------------------------
601  MonitorElement* initialise(MonitorElement* me, std::string const& path);
602  MonitorElement* book_(std::string const& dir, std::string const& name, char const* context);
603  template <class HISTO, class COLLATE>
604  MonitorElement* book_(std::string const& dir,
605  std::string const& name,
606  char const* context,
608  HISTO* h,
609  COLLATE collate);
610 
611  MonitorElement* bookInt_(std::string const& dir, std::string const& name);
612  MonitorElement* bookFloat_(std::string const& dir, std::string const& name);
613  MonitorElement* bookString_(std::string const& dir, std::string const& name, std::string const& value);
614  MonitorElement* book1D_(std::string const& dir, std::string const& name, TH1F* h);
615  MonitorElement* book1S_(std::string const& dir, std::string const& name, TH1S* h);
616  MonitorElement* book1DD_(std::string const& dir, std::string const& name, TH1D* h);
617  MonitorElement* book2D_(std::string const& dir, std::string const& name, TH2F* h);
618  MonitorElement* book2S_(std::string const& dir, std::string const& name, TH2S* h);
619  MonitorElement* book2DD_(std::string const& dir, std::string const& name, TH2D* h);
620  MonitorElement* book3D_(std::string const& dir, std::string const& name, TH3F* h);
621  MonitorElement* bookProfile_(std::string const& dir, std::string const& name, TProfile* h);
622  MonitorElement* bookProfile2D_(std::string const& dir, std::string const& name, TProfile2D* h);
623 
624  static bool checkBinningMatches(MonitorElement* me, TH1* h, unsigned verbose);
625 
626  static void collate1D(MonitorElement* me, TH1F* h, unsigned verbose);
627  static void collate1S(MonitorElement* me, TH1S* h, unsigned verbose);
628  static void collate1DD(MonitorElement* me, TH1D* h, unsigned verbose);
629  static void collate2D(MonitorElement* me, TH2F* h, unsigned verbose);
630  static void collate2S(MonitorElement* me, TH2S* h, unsigned verbose);
631  static void collate2DD(MonitorElement* me, TH2D* h, unsigned verbose);
632  static void collate3D(MonitorElement* me, TH3F* h, unsigned verbose);
633  static void collateProfile(MonitorElement* me, TProfile* h, unsigned verbose);
634  static void collateProfile2D(MonitorElement* me, TProfile2D* h, unsigned verbose);
635 
636  void print_trace(std::string const& dir, std::string const& name);
637 
638  //-------------------------------------------------------------------------------
639  //-------------------------------------------------------------------------------
640  using QTestSpec = std::pair<fastmatch*, QCriterion*>;
641  using QTestSpecs = std::list<QTestSpec>;
642  using MEMap = std::set<MonitorElement>;
643  using QCMap = std::map<std::string, QCriterion*>;
644  using QAMap = std::map<std::string, QCriterion* (*)(std::string const&)>;
645 
646  // ------------------------ private I/O helpers ------------------------------
647  void saveMonitorElementToPB(MonitorElement const& me, dqmstorepb::ROOTFilePB& file);
648  void saveMonitorElementRangeToPB(std::string const& dir,
649  unsigned int run,
650  MEMap::const_iterator begin,
651  MEMap::const_iterator end,
653  unsigned int& counter);
654  void saveMonitorElementToROOT(MonitorElement const& me, TFile& file);
655  void saveMonitorElementRangeToROOT(std::string const& dir,
656  std::string const& refpath,
657  SaveReferenceTag ref,
658  int minStatus,
659  unsigned int run,
660  MEMap::const_iterator begin,
661  MEMap::const_iterator end,
662  TFile& file,
663  unsigned int& counter);
664 
665  unsigned verbose_{1};
666  unsigned verboseQT_{1};
667  bool reset_{false};
668  double scaleFlag_;
669  bool collateHistograms_{false};
670  bool enableMultiThread_{false};
672  bool forceResetOnBeginLumi_{false};
673  std::string readSelectedDirectory_{};
674  uint32_t run_{};
675  uint32_t moduleId_{};
676  // set to true in the transaction if module supports per-lumi saving.
677  bool canSaveByLumi_{false};
678  // set to true in configuration if per-lumi saving is requested.
679  bool doSaveByLumi_{false};
680  std::unique_ptr<std::ostream> stream_{nullptr};
681 
682  std::string pwd_{};
684  std::set<std::string> dirs_;
685 
689 
691 
692  friend DQMService;
693  friend DQMNet;
694  friend DQMArchiver;
695  friend DQMStoreExample; // for get{All,Matching}Contents -- sole user of this method!
698  friend DQMFileSaver;
700  };
701 
702 } // namespace dqm::dqmstoreimpl
703 
704 // These will become distinct classes in the future.
705 namespace dqm::legacy {
707 }
708 namespace dqm::reco {
710 }
711 namespace dqm::harvesting {
713 }
714 
715 #endif // DQMServices_Core_DQMStore_h
static boost::mutex mutex
Definition: Proxy.cc:9
def dirExists(dir)
FWCore Framework interface EventSetupRecordImplementation h
Helper function to determine trigger accepts.
void bookConcurrentTransaction(iFunc f, uint32_t run)
Definition: DQMStore.h:306
static void get_info(const dqmstorepb::ROOTFilePB::Histo &h, std::string &dirname, std::string &objname, TObject **obj)
Definition: fastHadd.cc:170
void meBookerGetter(iFunc f)
Definition: DQMStore.h:331
char_string(std::string const &str)
Definition: DQMStore.h:363
TObject * extractNextObject(TBufferFile &buf)
Definition: fastHadd.cc:162
Definition: DQMNet.h:23
std::vector< MonitorElement * > getContents(Args &&...args)
Definition: DQMStore.h:246
void bookTransaction(iFunc f, uint32_t run, uint32_t moduleId, bool canSaveByLumi)
Definition: DQMStore.h:284
Definition: DQMStore.h:35
dqm::dqmstoreimpl::DQMStore DQMStore
Definition: DQMStore.h:712
static std::string const input
Definition: EdmProvDump.cc:48
MatchingHeuristicEnum matching_
Definition: DQMStore.h:95
std::set< MonitorElement > MEMap
Definition: DQMStore.h:642
double f[11][100]
#define end
Definition: vmac.h:39
Definition: value.py:1
std::pair< fastmatch *, QCriterion * > QTestSpec
Definition: DQMStore.h:640
int extract(std::vector< int > *output, const std::string &dati)
#define noexcept
std::list< QTestSpec > QTestSpecs
Definition: DQMStore.h:641
dqm::legacy::MonitorElement MonitorElement
def load(fileName)
Definition: svgfig.py:547
std::set< std::string > dirs_
Definition: DQMStore.h:684
std::map< std::string, QCriterion *(*)(std::string const &)> QAMap
Definition: DQMStore.h:644
#define begin
Definition: vmac.h:32
HLT enums.
static const int STATUS_OK
#define str(s)
void reset(double vett[256])
Definition: TPedValues.cc:11
save
Definition: cuy.py:1165
std::map< std::string, QCriterion * > QCMap
Definition: DQMStore.h:643
std::string match(BranchDescription const &a, BranchDescription const &b, std::string const &fileName)