CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
APVModeFilter.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: Alignment/CommonAlignment
4 // Class: APVModeFilter
5 //
31 //
32 // Original Author: Gregor Mittag
33 // Created: Thu, 03 Dec 2015 16:51:33 GMT
34 //
35 //
36 
37 
38 // system include files
39 #include <bitset>
40 #include <array>
41 
42 // user include files
51 
52 //
53 // class declaration
54 //
55 
57 public:
58  explicit APVModeFilter(const edm::ParameterSet&);
59  ~APVModeFilter() = default;
60 
62 
63 private:
64  virtual bool filter(edm::Event&, const edm::EventSetup&) override;
65  virtual void beginRun(const edm::Run&, const edm::EventSetup&) override;
66 
67  using BitMask = std::bitset<16>;
68 
70  BitMask convertMode(const std::string& mode) const;
71 
73  BitMask convertMode(const uint16_t& mode) const;
74 
75 
76  // ----------member data ---------------------------
77 
79  static constexpr std::array<size_t, 2> bits_ = {{1, 3}};
81  static constexpr BitMask peak_ = BitMask(10);
83 
84  const BitMask mode_;
86 };
87 
88 
89 //
90 // static data member definitions
91 //
92 constexpr std::array<size_t, 2> APVModeFilter::bits_;
96 
97 
98 //
99 // constructors and destructor
100 //
102  mode_(convertMode(iConfig.getUntrackedParameter<std::string>("apvMode"))) {
103 }
104 
105 
106 //
107 // member functions
108 //
109 
110 // ------------ method called on each new Event ------------
111 bool
113  return mode_ == modeCurrentRun_;
114 }
115 
116 // ------------ method called when starting to processes a run ------------
117 void
119  edm::ESHandle<SiStripLatency> siStripLatency;
120  iSetup.get<SiStripLatencyRcd>().get(siStripLatency);
121  auto product = siStripLatency.product();
122  modeCurrentRun_ = convertMode(product->singleMode());
123 }
124 
127  if (mode == "deco") {
128  return deco_;
129  } else if (mode == "peak") {
130  return peak_;
131  } else if (mode == "multi") {
132  return multi_;
133  } else {
134  throw cms::Exception("BadConfig")
135  << "Your choice for the APV mode ('" << mode
136  << "') is invalid.\nValid APV modes: deco, peak, multi" << std::endl;
137  }
138 }
139 
141 APVModeFilter::convertMode(const uint16_t& mode) const {
142  BitMask input(mode);
143  BitMask result;
144  for (const auto& bit: bits_) result.set(bit, input[bit]);
145  return result;
146 }
147 
148 // ------------ method fills 'descriptions' with the allowed parameters for the module ------------
149 void
152  desc.setComment("Filters events with the APV mode 'apvMode' (deco/peak/multi).");
153  desc.addUntracked<std::string>("apvMode", "deco");
154  descriptions.add("apvModeFilter", desc);
155 }
156 
157 //define this as a plug-in
static BitMask multi_
peak mode bit mask (1010)
static std::array< size_t, 2 > bits_
bits of interest for the APV mode
ParameterDescriptionBase * addUntracked(U const &iLabel, T const &value)
virtual bool filter(edm::Event &, const edm::EventSetup &) override
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
virtual void beginRun(const edm::Run &, const edm::EventSetup &) override
const BitMask mode_
multi mode bit mask (1000)
static BitMask deco_
#define constexpr
static std::string const input
Definition: EdmProvDump.cc:43
APVModeFilter(const edm::ParameterSet &)
void setComment(std::string const &value)
static BitMask peak_
deco mode bit mask (0000)
tuple result
Definition: query.py:137
BitMask convertMode(const std::string &mode) const
APV mode is encoded in uin16_t.
const T & get() const
Definition: EventSetup.h:56
T const * product() const
Definition: ESHandle.h:86
void add(std::string const &label, ParameterSetDescription const &psetDescription)
static void fillDescriptions(edm::ConfigurationDescriptions &)
BitMask modeCurrentRun_
APV mode that is filtered.
~APVModeFilter()=default
Definition: Run.h:43
std::bitset< 16 > BitMask