test
CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
HGCalTriggerFECodecBase.h
Go to the documentation of this file.
1 #ifndef __L1Trigger_L1THGCal_HGCalTriggerFECodecBase_h__
2 #define __L1Trigger_L1THGCal_HGCalTriggerFECodecBase_h__
3 
5 
7 
9 
11 
12 /*******
13  *
14  * class: HGCalTriggerCodecBase
15  * author: L.Gray (FNAL)
16  * date: 27 July, 2015
17  *
18  * Base classes for defining HGCal FE codec classes.
19  * The base class defines an abstract interface, which is then specialized
20  * by the "Codec<>" class to handle a specific data format.
21  * To keep the implementation properly factorized, an implementation class
22  * is used to provide the appropriate coding and decoding.
23  *
24  *******/
25 
27  public:
29  name_(conf.getParameter<std::string>("CodecName")),
30  codec_idx_(static_cast<unsigned char>(conf.getParameter<uint32_t>("CodecIndex")))
31  {}
33 
34  const std::string& name() const { return name_; }
35 
36  const unsigned char getCodecType() const { return codec_idx_; }
37 
38  // give the FECodec the trigger geometry + input digis and it sets itself
39  // with the approprate data
40  virtual void setDataPayload(const HGCalTriggerGeometryBase&,
41  const HGCEEDigiCollection&,
42  const HGCHEDigiCollection&,
43  const HGCHEDigiCollection& ) = 0;
44  virtual void setDataPayload(const HGCalTriggerGeometryBase& ,
45  const l1t::HGCFETriggerDigi&) = 0;
46  virtual void unSetDataPayload() = 0;
47  // get the set data out for your own enjoyment
48  virtual std::vector<bool> getDataPayload() const = 0;
49 
50  // abstract interface to manipulating l1t::HGCFETriggerDigis
51  // these will yell at you if you haven't set the data in the Codec class
52  virtual void encode(l1t::HGCFETriggerDigi&) = 0;
53  virtual void decode(const l1t::HGCFETriggerDigi&) = 0;
54  virtual void print(const l1t::HGCFETriggerDigi& digi,
55  std::ostream& out = std::cout) const = 0;
56 
57  private:
59  unsigned char codec_idx_; // I hope we never come to having 256 FE codecs :-)
60 };
61 
62 // ----> all codec classes derive from this <----
63 // inheritance looks like class MyCodec : public HGCalTriggerFE::Codec<MyCodec,MyData>
64 namespace HGCalTriggerFE {
65  template<typename Impl,typename DATA>
66  class Codec : public HGCalTriggerFECodecBase {
67  public:
68  Codec(const edm::ParameterSet& conf) :
70  dataIsSet_(false) {
71  }
72 
73  // mark these as final since at this level we know
74  // the implementation of the codec
75  virtual void encode(l1t::HGCFETriggerDigi& digi) override final {
76  if( !dataIsSet_ ) {
77  edm::LogWarning("HGCalTriggerFECodec|NoDataPayload")
78  << "No data payload was set for HGCTriggerFECodec: "
79  << this->name();
80  }
81  digi.encode(static_cast<const Impl&>(*this),data_);
82  }
83  virtual void decode(const l1t::HGCFETriggerDigi& digi) override final {
84  if( dataIsSet_ ) {
85  edm::LogWarning("HGCalTriggerFECodec|OverwritePayload")
86  << "Data payload was already set for HGCTriggerFECodec: "
87  << this->name() << " overwriting current data!";
88  }
89  digi.decode(static_cast<const Impl&>(*this),data_);
90  dataIsSet_ = true;
91  }
92 
94  const HGCEEDigiCollection& ee,
95  const HGCHEDigiCollection& fh,
96  const HGCHEDigiCollection& bh ) override final {
97  if( dataIsSet_ ) {
98  edm::LogWarning("HGCalTriggerFECodec|OverwritePayload")
99  << "Data payload was already set for HGCTriggerFECodec: "
100  << this->name() << " overwriting current data!";
101  }
102  static_cast<Impl&>(*this).setDataPayloadImpl(geom,ee,fh,bh);
103  dataIsSet_ = true;
104  }
105 
107  const l1t::HGCFETriggerDigi& digi) override final {
108  if( dataIsSet_ ) {
109  edm::LogWarning("HGCalTriggerFECodec|OverwritePayload")
110  << "Data payload was already set for HGCTriggerFECodec: "
111  << this->name() << " overwriting current data!";
112  }
113  static_cast<Impl&>(*this).setDataPayloadImpl(geom,digi);
114  dataIsSet_ = true;
115  }
116 
117  virtual void unSetDataPayload() override final {
118  data_.reset();
119  dataIsSet_ = false;
120  }
121  std::vector<bool> getDataPayload() const override final {
122  return this->encode(data_);
123  }
124 
125  virtual void print(const l1t::HGCFETriggerDigi& digi,
126  std::ostream& out = std::cout) const override final {
127  digi.print(static_cast<const Impl&>(*this),out);
128  }
129 
130  std::vector<bool> encode(const DATA& data) const {
131  return static_cast<const Impl&>(*this).encodeImpl(data);
132  }
133 
134  DATA decode(const std::vector<bool>& data) const {
135  return static_cast<const Impl&>(*this).decodeImpl(data);
136  }
137 
138  protected:
140  private:
142  };
143 }
144 
147 
148 #endif
virtual void decode(const l1t::HGCFETriggerDigi &digi) overridefinal
virtual std::vector< bool > getDataPayload() const =0
Codec(const edm::ParameterSet &conf)
virtual void print(const l1t::HGCFETriggerDigi &digi, std::ostream &out=std::cout) const =0
virtual void encode(l1t::HGCFETriggerDigi &digi) overridefinal
std::vector< bool > encode(const DATA &data) const
DATA decode(const std::vector< bool > &data) const
virtual void unSetDataPayload()=0
edmplugin::PluginFactory< HGCalTriggerFECodecBase *(const edm::ParameterSet &) > HGCalTriggerFECodecFactory
HGCalTriggerFECodecBase(const edm::ParameterSet &conf)
const unsigned char getCodecType() const
virtual void unSetDataPayload() overridefinal
virtual void decode(const l1t::HGCFETriggerDigi &)=0
virtual void print(const l1t::HGCFETriggerDigi &digi, std::ostream &out=std::cout) const overridefinal
void print(std::ostream &out) const
virtual void setDataPayload(const HGCalTriggerGeometryBase &geom, const l1t::HGCFETriggerDigi &digi) overridefinal
string const
Definition: compareJSON.py:14
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:82
virtual void setDataPayload(const HGCalTriggerGeometryBase &, const HGCEEDigiCollection &, const HGCHEDigiCollection &, const HGCHEDigiCollection &)=0
tuple cout
Definition: gather_cfg.py:145
const std::string & name() const
std::vector< bool > getDataPayload() const overridefinal
volatile std::atomic< bool > shutdown_flag false
virtual void setDataPayload(const HGCalTriggerGeometryBase &geom, const HGCEEDigiCollection &ee, const HGCHEDigiCollection &fh, const HGCHEDigiCollection &bh) overridefinal
virtual void encode(l1t::HGCFETriggerDigi &)=0