CMS 3D CMS Logo

SummationSpecification.h
Go to the documentation of this file.
1 #ifndef SiPixel_SummationSpecification
2 #define SiPixel_SummationSpecification
3 // -*- C++ -*-
4 //
5 // Package: SiPixelPhase1Common
6 // Class: SummationSpecification
7 //
8 // This class represents a sequence of steps that produce histograms by summing
9 // up other histograms. This can be considered a domain-specific language for
10 // DQM. This class has no intelligence, it just manages the "program". It is
11 // not encapsulated, the structure is exposed.
12 //
13 // Original Author: Marcel Schneider
14 
15 #include <vector>
16 #include <string>
17 
19 
20 struct SummationStep {
21  // For step1, all the necessary information should be in the type and columns
22  // to allow fill() to exectute it very quickly.
23  // For step2 stuff (after the first SAVE), we can also keep strings, since
24  // step2 will only be executed once by an executor.
25  enum Type {NO_TYPE = 0,
26  GROUPBY = 1,
27  EXTEND_X = 2,
28  EXTEND_Y = 3,
29  COUNT = 4,
30  REDUCE = 5,
31  SAVE = 6,
32  USE_X = 8,
33  USE_Y = 9,
34  USE_Z = 10,
35  PROFILE = 11
36  };
38  // STAGE1 is DQM step1, STAGE2 step2. STAGE1_2 is somewhere in between, it runs
39  // in the analyze()-method (step1) but does a sort of harvesting (per-event).
40  // STAGE1_2 is for ndigis-like counters.
41  // FIRST is the first group-by, which is special.
44 
45  int nbins{-1};
46  int xmin{0};
47  int xmax{0};
48 
49  std::vector<GeometryInterface::Column> columns;
50 
51  // more parameters. Not very elegant but good enough for step2.
53 };
54 
56  std::vector<SummationStep> steps;
59 
60  template<class stream, class GI>
61  void dump(stream& out, GI& gi) {
62  for (auto& s : steps) {
63  out << "Step: type " << s.type << " stage " << s.stage << " col ";
64  for (auto c : s.columns) out << gi.pretty(c) << " ";
65  out << " arg " << s.arg << "\n";
66  }
67  }
68  private:
70 };
71 
72 #endif
type
Definition: HCALResponse.h:21
void dump(stream &out, GI &gi)
std::vector< GeometryInterface::Column > columns
std::vector< SummationStep > steps