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