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)
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  }
251  IBooker booker{this};
252  f(booker);
253 
254  /* Reset the run number and module id only if multithreading is enabled */
255  if (enableMultiThread_) {
256  run_ = 0;
257  moduleId_ = 0;
258  }
259  }
260 
261  // Similar function used to book "global" histograms via the
262  // ConcurrentMonitorElement interface.
263  template <typename iFunc>
264  void bookConcurrentTransaction(iFunc f, uint32_t run)
265  {
266  std::lock_guard<std::mutex> guard(book_mutex_);
267  /* Set the run_ member only if enableMultiThread is enabled */
268  if (enableMultiThread_) {
269  run_ = run;
270  }
271  ConcurrentBooker booker(this);
272  f(booker);
273 
274  /* Reset the run_ member only if enableMultiThread is enabled */
275  if (enableMultiThread_) {
276  run_ = 0;
277  }
278  }
279 
280  // Signature needed in the harvesting where the booking is done in
281  // the endJob. No handles to the run there. Two arguments ensure the
282  // capability of booking and getting. The method relies on the
283  // initialization of run, stream and module ID to 0. The mutex is
284  // not needed.
285  template <typename iFunc>
286  void meBookerGetter(iFunc f)
287  {
288  IBooker booker{this};
289  IGetter getter{this};
290  f(booker, getter);
291  }
292 
293  //-------------------------------------------------------------------------
294  // ---------------------- Constructors ------------------------------------
296  DQMStore(edm::ParameterSet const& pset);
297  ~DQMStore();
298 
299  //-------------------------------------------------------------------------
300  void setVerbose(unsigned level);
301 
302  // ---------------------- public navigation -------------------------------
303  std::string const& pwd() const;
304  void cd();
305  void cd(std::string const& subdir);
306  void setCurrentFolder(std::string const& fullpath);
307  void goUp();
308 
309  bool dirExists(std::string const& path) const;
310 
311  // Conversion class to allow specifications of TString const&,
312  // std::string const&, and char const* for the booking functions.
313  // Ideally, this will be replaced with std::string_view (what to do
314  // about TString?) whenever we move to C++17.
315  class char_string {
316  public:
317  char_string(TString const& str) : data_{str.Data()} {}
318  char_string(char const* str) : data_{str} {}
319  char_string(std::string const& str) : data_{str} {}
320  operator std::string const&() const { return data_; }
321  operator char const*() const { return data_.c_str(); }
322  private:
324  };
325 
326  //-------------------------------------------------------------------------
327  // ---------------------- public ME booking -------------------------------
328  MonitorElement* bookInt(char_string const& name);
329  MonitorElement* bookFloat(char_string const& name);
330  MonitorElement* bookString(char_string const& name,
331  char_string const& value);
332  MonitorElement* book1D(char_string const& name,
333  char_string const& title,
334  int const nchX, double const lowX, double const highX);
335  MonitorElement* book1D(char_string const& name,
336  char_string const& title,
337  int nchX, float const* xbinsize);
338  MonitorElement* book1D(char_string const& name, TH1F* h);
339  MonitorElement* book1S(char_string const& name,
340  char_string const& title,
341  int nchX, double lowX, double highX);
342  MonitorElement* book1S(char_string const& name,
343  char_string const& title,
344  int nchX, float const* xbinsize);
345  MonitorElement* book1S(char_string const& name, TH1S* h);
346  MonitorElement* book1DD(char_string const& name,
347  char_string const& title,
348  int nchX, double lowX, double highX);
349  MonitorElement* book1DD(char_string const& name,
350  char_string const& title,
351  int nchX, float const* xbinsize);
352  MonitorElement* book1DD(char_string const& name, TH1D* h);
353  MonitorElement* book2D(char_string const& name,
354  char_string const& title,
355  int nchX, double lowX, double highX,
356  int nchY, double lowY, double highY);
357  MonitorElement* book2D(char_string const& name,
358  char_string const& title,
359  int nchX, float const* xbinsize,
360  int nchY, float const* ybinsize);
361  MonitorElement* book2D(char_string const& name, TH2F* h);
362  MonitorElement* book2S(char_string const& name,
363  char_string const& title,
364  int nchX, double lowX, double highX,
365  int nchY, double lowY, double highY);
366  MonitorElement* book2S(char_string const& name,
367  char_string const& title,
368  int nchX, float const* xbinsize,
369  int nchY, float const* ybinsize);
370  MonitorElement* book2S(char_string const& name, TH2S* h);
371  MonitorElement* book2DD(char_string const& name,
372  char_string const& title,
373  int nchX, double lowX, double highX,
374  int nchY, double lowY, double highY);
375  MonitorElement* book2DD(char_string const& name,
376  char_string const& title,
377  int nchX, float const* xbinsize,
378  int nchY, float const* ybinsize);
379  MonitorElement* book2DD(char_string const& name, TH2D* h);
380  MonitorElement* book3D(char_string const& name,
381  char_string const& title,
382  int nchX, double lowX, double highX,
383  int nchY, double lowY, double highY,
384  int nchZ, double lowZ, double highZ);
385  MonitorElement* book3D(char_string const& name, TH3F* h);
386  MonitorElement* bookProfile(char_string const& name,
387  char_string const& title,
388  int nchX, double lowX, double highX,
389  int nchY, double lowY, double highY,
390  char const* option = "s");
391  MonitorElement* bookProfile(char_string const& name,
392  char_string const& title,
393  int nchX, double lowX, double highX,
394  double lowY, double highY,
395  char const* option = "s");
396  MonitorElement* bookProfile(char_string const& name,
397  char_string const& title,
398  int nchX, double const* xbinsize,
399  int nchY, double lowY, double highY,
400  char const* option = "s");
401  MonitorElement* bookProfile(char_string const& name,
402  char_string const& title,
403  int nchX, double const* xbinsize,
404  double lowY, double highY,
405  char const* option = "s");
406  MonitorElement* bookProfile(char_string const& name, TProfile* h);
407  MonitorElement* bookProfile2D(char_string const& name,
408  char_string const& title,
409  int nchX, double lowX, double highX,
410  int nchY, double lowY, double highY,
411  double lowZ, double highZ,
412  char const* option = "s");
413  MonitorElement* bookProfile2D(char_string const& name,
414  char_string const& title,
415  int nchX, double lowX, double highX,
416  int nchY, double lowY, double highY,
417  int nchZ, double lowZ, double highZ,
418  char const* option = "s");
419  MonitorElement* bookProfile2D(char_string const& name, TProfile2D* h);
420 
421  //-------------------------------------------------------------------------
422  // ---------------------- public tagging ----------------------------------
423  void tag(MonitorElement* me, unsigned int myTag);
424  void tag(std::string const& path, unsigned int myTag);
425  void tagContents(std::string const& path, unsigned int myTag);
426  void tagAllContents(std::string const& path, unsigned int myTag);
427 
428  //-------------------------------------------------------------------------
429  // ---------------------- public ME getters -------------------------------
430  std::vector<std::string> getSubdirs() const;
431  std::vector<std::string> getMEs() const;
432  bool containsAnyMonitorable(std::string const& path) const;
433 
434  MonitorElement* get(std::string const& path) const;
435  std::vector<MonitorElement*> get(unsigned int tag) const;
436  std::vector<MonitorElement*> getContents(std::string const& path) const;
437  std::vector<MonitorElement*> getContents(std::string const& path, unsigned int tag) const;
438  void getContents(std::vector<std::string> &into, bool showContents = true) const;
439 
440  // ---------------------- softReset methods -------------------------------
441  void softReset(MonitorElement* me);
442  void disableSoftReset(MonitorElement* me);
443 
444  // ---------------------- Public deleting ---------------------------------
445  void rmdir(std::string const& fullpath);
446  void removeContents();
447  void removeContents(std::string const& dir);
448  void removeElement(std::string const& name);
449  void removeElement(std::string const& dir, std::string const& name, bool warning = true);
450 
451  // ------------------------------------------------------------------------
452  // ---------------------- public I/O --------------------------------------
453  void save(std::string const& filename,
454  std::string const& path = "",
455  std::string const& pattern = "",
456  std::string const& rewrite = "",
457  uint32_t run = 0,
458  uint32_t lumi = 0,
459  SaveReferenceTag ref = SaveWithReference,
461  std::string const& fileupdate = "RECREATE");
462  void savePB(std::string const& filename,
463  std::string const& path = "",
464  uint32_t run = 0,
465  uint32_t lumi = 0);
466  bool open(std::string const& filename,
467  bool overwrite = false,
468  std::string const& path ="",
469  std::string const& prepend = "",
470  OpenRunDirs stripdirs = KeepRunDirs,
471  bool fileMustExist = true);
472  bool load(std::string const& filename,
473  OpenRunDirs stripdirs = StripRunDirs,
474  bool fileMustExist = true);
475  bool mtEnabled() { return enableMultiThread_; };
476 
477 
478 public:
479  // -------------------------------------------------------------------------
480  // ---------------------- Public print methods -----------------------------
481  void showDirStructure() const;
482 
483  // ---------------------- Public check options -----------------------------
484  bool isCollate() const;
485 
486  // -------------------------------------------------------------------------
487  // ---------------------- Quality Test methods -----------------------------
488  QCriterion* getQCriterion(std::string const& qtname) const;
489  QCriterion* createQTest(std::string const& algoname, std::string const& qtname);
490  void useQTest(std::string const& dir, std::string const& qtname);
491  int useQTestByMatch(std::string const& pattern, std::string const& qtname);
492  void runQTests();
493  int getStatus(std::string const& path = "") const;
494  void scaleElements();
495 
496 private:
497  // ---------------- Navigation -----------------------
498  bool cdInto(std::string const& path) const;
499 
500  // ------------------- Reference ME -------------------------------
501  bool isCollateME(MonitorElement* me) const;
502 
503  // ------------------- Private "getters" ------------------------------
504  bool readFilePB(std::string const& filename,
505  bool overwrite = false,
506  std::string const& path ="",
507  std::string const& prepend = "",
508  OpenRunDirs stripdirs = StripRunDirs,
509  bool fileMustExist = true);
510  bool readFile(std::string const& filename,
511  bool overwrite = false,
512  std::string const& path ="",
513  std::string const& prepend = "",
514  OpenRunDirs stripdirs = StripRunDirs,
515  bool fileMustExist = true);
516  void makeDirectory(std::string const& path);
517  unsigned int readDirectory(TFile* file,
518  bool overwrite,
519  std::string const& path,
520  std::string const& prepend,
521  std::string const& curdir,
522  OpenRunDirs stripdirs);
523 
524  MonitorElement* findObject(uint32_t run,
525  uint32_t lumi,
526  uint32_t moduleId,
527  std::string const& dir,
528  std::string const& name) const;
529 
532  std::string& objname,
533  TObject** obj);
534 
535 public:
536  std::vector<MonitorElement*> getAllContents(std::string const& path,
537  uint32_t runNumber = 0,
538  uint32_t lumi = 0) const;
539  std::vector<MonitorElement*> getMatchingContents(std::string const& pattern, lat::Regexp::Syntax syntaxType = lat::Regexp::Wildcard) const;
540 
541  // lumisection based histograms manipulations
542  void cloneLumiHistograms(uint32_t run, uint32_t lumi, uint32_t moduleId);
543  void cloneRunHistograms(uint32_t run, uint32_t moduleId);
544 
545  void deleteUnusedLumiHistograms(uint32_t run, uint32_t lumi);
546 
547  DQMStore(DQMStore const&) = delete;
548  DQMStore& operator=(DQMStore const&) = delete;
549 
550 private:
551  // ---------------- Miscellaneous -----------------------------
552  void initializeFrom(const edm::ParameterSet&);
553  void reset();
554  void forceReset();
555  void postGlobalBeginLumi(const edm::GlobalContext&);
556 
557  bool extract(TObject* obj, std::string const& dir, bool overwrite, bool collateHistograms);
558  TObject* extractNextObject(TBufferFile&) const;
559 
560  // ---------------------- Booking ------------------------------------
561  MonitorElement* initialise(MonitorElement* me, std::string const& path);
562  MonitorElement* book_(std::string const& dir,
563  std::string const& name,
564  char const* context);
565  template <class HISTO, class COLLATE>
566  MonitorElement* book_(std::string const& dir,
567  std::string const& name,
568  char const* context,
569  int kind, HISTO* h, COLLATE collate);
570 
571  MonitorElement* bookInt_(std::string const& dir, std::string const& name);
572  MonitorElement* bookFloat_(std::string const& dir, std::string const& name);
573  MonitorElement* bookString_(std::string const& dir, std::string const& name, std::string const& value);
574  MonitorElement* book1D_(std::string const& dir, std::string const& name, TH1F* h);
575  MonitorElement* book1S_(std::string const& dir, std::string const& name, TH1S* h);
576  MonitorElement* book1DD_(std::string const& dir, std::string const& name, TH1D* h);
577  MonitorElement* book2D_(std::string const& dir, std::string const& name, TH2F* h);
578  MonitorElement* book2S_(std::string const& dir, std::string const& name, TH2S* h);
579  MonitorElement* book2DD_(std::string const& dir, std::string const& name, TH2D* h);
580  MonitorElement* book3D_(std::string const& dir, std::string const& name, TH3F* h);
581  MonitorElement* bookProfile_(std::string const& dir, std::string const& name, TProfile* h);
582  MonitorElement* bookProfile2D_(std::string const& dir, std::string const& name, TProfile2D* h);
583 
584  static bool checkBinningMatches(MonitorElement* me, TH1* h, unsigned verbose);
585 
586  static void collate1D(MonitorElement* me, TH1F* h, unsigned verbose);
587  static void collate1S(MonitorElement* me, TH1S* h, unsigned verbose);
588  static void collate1DD(MonitorElement* me, TH1D* h, unsigned verbose);
589  static void collate2D(MonitorElement* me, TH2F* h, unsigned verbose);
590  static void collate2S(MonitorElement* me, TH2S* h, unsigned verbose);
591  static void collate2DD(MonitorElement* me, TH2D* h, unsigned verbose);
592  static void collate3D(MonitorElement* me, TH3F* h, unsigned verbose);
593  static void collateProfile(MonitorElement* me, TProfile* h, unsigned verbose);
594  static void collateProfile2D(MonitorElement* me, TProfile2D* h, unsigned verbose);
595 
596  // --- Operations on MEs that are normally reset at end of monitoring cycle ---
597  void setAccumulate(MonitorElement* me, bool flag);
598 
599  void print_trace(std::string const& dir, std::string const& name);
600 
601  //-------------------------------------------------------------------------------
602  //-------------------------------------------------------------------------------
603  using QTestSpec = std::pair<fastmatch*, QCriterion*>;
604  using QTestSpecs = std::list<QTestSpec>;
605  using MEMap = std::set<MonitorElement>;
606  using QCMap = std::map<std::string, QCriterion*>;
607  using QAMap = std::map<std::string, QCriterion* (*)(std::string const&)>;
608 
609  // ------------------------ private I/O helpers ------------------------------
610  void saveMonitorElementToPB(MonitorElement const& me,
611  dqmstorepb::ROOTFilePB& file);
612  void saveMonitorElementRangeToPB(std::string const& dir,
613  unsigned int run,
614  MEMap::const_iterator begin,
615  MEMap::const_iterator end,
617  unsigned int& counter);
618  void saveMonitorElementToROOT(MonitorElement const& me,
619  TFile& file);
620  void saveMonitorElementRangeToROOT(std::string const& dir,
621  std::string const& refpath,
622  SaveReferenceTag ref,
623  int minStatus,
624  unsigned int run,
625  MEMap::const_iterator begin,
626  MEMap::const_iterator end,
627  TFile& file,
628  unsigned int& counter);
629 
630  unsigned verbose_{1};
631  unsigned verboseQT_{1};
632  bool reset_{false};
633  double scaleFlag_;
634  bool collateHistograms_{false};
635  bool enableMultiThread_{false};
637  bool forceResetOnBeginLumi_{false};
638  std::string readSelectedDirectory_{};
639  uint32_t run_{};
640  uint32_t moduleId_{};
641  std::unique_ptr<std::ostream> stream_{nullptr};
642 
643  std::string pwd_{};
645  std::set<std::string> dirs_;
646 
650 
652 
653  friend class edm::DQMHttpSource;
654  friend class DQMService;
655  friend class DQMNet;
656  friend class DQMArchiver;
657  friend class DQMStoreExample; // for get{All,Matching}Contents -- sole user of this method!
658  friend class DQMRootOutputModule;
659  friend class DQMRootSource;
660  friend class DQMFileSaver;
661  friend class MEtoEDMConverter;
662 };
663 
664 #endif // DQMServices_Core_DQMStore_h
~DQMStore()
Definition: DQMStore.cc:390
static boost::mutex mutex
Definition: Proxy.cc:11
def dirExists(dir)
std::map< std::string, QCriterion *(*)(std::string const &)> QAMap
Definition: DQMStore.h:607
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:1519
#define noexcept
#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:605
Definition: DQMStore.h:29
uint32_t moduleId_
Definition: DQMStore.h:640
QCMap qtests_
Definition: DQMStore.h:647
std::mutex book_mutex_
Definition: DQMStore.h:651
static std::string const input
Definition: EdmProvDump.cc:45
SaveReferenceTag
Definition: DQMStore.h:78
std::list< QTestSpec > QTestSpecs
Definition: DQMStore.h:604
char_string(std::string const &str)
Definition: DQMStore.h:319
std::pair< fastmatch *, QCriterion * > QTestSpec
Definition: DQMStore.h:603
QTestSpecs qtestspecs_
Definition: DQMStore.h:649
double scaleFlag_
Definition: DQMStore.h:633
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:639
#define end
Definition: vmac.h:39
void setVerbose(unsigned level)
Definition: DQMStore.cc:525
Definition: value.py:1
QAMap qalgos_
Definition: DQMStore.h:648
std::vector< std::string > getSubdirs() const
Definition: DQMStore.cc:1552
void bookConcurrentTransaction(iFunc f, uint32_t run)
Definition: DQMStore.h:264
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:606
char_string(TString const &str)
Definition: DQMStore.h:317
int extract(std::vector< int > *output, const std::string &dati)
void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:565
int Int
Definition: forwards.h:16
DecomposeProduct< arg, typename Div::arg > D
Definition: Factorize.h:151
void cd()
go to top directory (ie. root)
Definition: DQMStore.cc:540
MEMap data_
Definition: DQMStore.h:644
DQMStore & operator=(DQMStore const &)=delete
def load(fileName)
Definition: svgfig.py:546
std::vector< std::string > getMEs() const
get list of (non-dir) MEs of current directory
Definition: DQMStore.cc:1575
std::string data_
Definition: DQMStore.h:323
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 bookTransaction(iFunc f, uint32_t run, uint32_t moduleId)
Definition: DQMStore.h:243
void meBookerGetter(iFunc f)
Definition: DQMStore.h:286
dbl *** dir
Definition: mlp_gen.cc:35
void goUp()
equivalent to "cd .."
Definition: DQMStore.cc:576
char_string(char const *str)
Definition: DQMStore.h:318
#define str(s)
DQMStore * owner_
Definition: DQMStore.h:232
std::set< std::string > dirs_
Definition: DQMStore.h:645
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:636
std::vector< MonitorElement * > getAllContents(std::string const &path, uint32_t runNumber=0, uint32_t lumi=0) const
Definition: DQMStore.cc:1755
bool containsAnyMonitorable(std::string const &path) const
Definition: DQMStore.cc:1591
bool mtEnabled()
Definition: DQMStore.h:475
bool enableMultiThread_
Definition: DQMStore.h:635
std::string match(BranchDescription const &a, BranchDescription const &b, std::string const &fileName)