CMS 3D CMS Logo

HGCalTriggerCellBestChoiceCodec.cc
Go to the documentation of this file.
2 #include <limits>
3 
4 using namespace HGCalTriggerFE;
5 
8  "HGCalTriggerCellBestChoiceCodec");
9 
12  codecImpl_(conf)
13 {
14 }
15 
16 
17 void
20  const HGCalDigiCollection& fh,
21  const HGCalDigiCollection& )
22 {
23  data_.reset();
24  std::vector<HGCalDataFrame> dataframes;
25  std::vector<std::pair<DetId, uint32_t > > linearized_dataframes;
26  // convert ee and fh hit collections into the same object
27  if(!ee.empty())
28  {
29  for(const auto& eedata : ee)
30  {
31  dataframes.emplace_back(eedata.id());
32  for(int i=0; i<eedata.size(); i++)
33  {
34  dataframes.back().setSample(i, eedata.sample(i));
35  }
36  }
37  }
38  else if(!fh.empty())
39  {
40  for(const auto& fhdata : fh)
41  {
42  dataframes.emplace_back(fhdata.id());
43  for(int i=0; i<fhdata.size(); i++)
44  {
45  dataframes.back().setSample(i, fhdata.sample(i));
46  }
47  }
48  }
49  // linearize input energy on 16 bits
50  codecImpl_.linearize(dataframes, linearized_dataframes);
51  // sum energy in trigger cells
52  codecImpl_.triggerCellSums(*geometry_, linearized_dataframes, data_);
53  // choose best trigger cells in the module
55 }
56 
57 void
60 {
61  data_.reset();
62  // decode input data with different parameters
63  // (no selection, so NData=number of trigger cells in module)
64  // FIXME:
65  // Not very clean to define an alternative codec within this codec
66  // Also, the codec is built each time the method is called, which is not very efficient
67  // This may need a restructuration of the FECodec
68  edm::ParameterSet conf;
69  conf.addParameter<std::string>("CodecName", name());
70  conf.addParameter<uint32_t> ("CodecIndex", getCodecType());
71  conf.addParameter<uint32_t> ("MaxCellsInModule", codecImpl_.nCellsInModule());
72  conf.addParameter<uint32_t> ("NData", codecImpl_.nCellsInModule());
73  // The data length should be the same for input and output, which is limiting
74  conf.addParameter<uint32_t> ("DataLength", codecImpl_.dataLength());
75  conf.addParameter<double> ("linLSB", codecImpl_.linLSB());
76  conf.addParameter<uint32_t> ("linnBits", codecImpl_.linnBits());
77  conf.addParameter<double> ("adcsaturation", codecImpl_.adcsaturation());
78  conf.addParameter<uint32_t> ("adcnBits", codecImpl_.adcnBits());
79  conf.addParameter<double> ("tdcsaturation", codecImpl_.tdcsaturation());
80  conf.addParameter<uint32_t> ("tdcnBits", codecImpl_.tdcnBits());
81  conf.addParameter<double> ("tdcOnsetfC", codecImpl_.tdcOnsetfC());
82  conf.addParameter<uint32_t> ("triggerCellTruncationBits", codecImpl_.triggerCellTruncationBits());
83  conf.addParameter<std::vector<double>>("ThicknessCorrections", codecImpl_.ThicknessCorrections());
84  HGCalTriggerCellBestChoiceCodec codecInput(conf);
85  codecInput.setGeometry(geometry_);
86  digi.decode(codecInput,data_);
87  // choose best trigger cells in the module
89 }
90 
91 
92 std::vector<bool>
95 {
96  return codecImpl_.encode(data, *geometry_);
97 }
98 
101 decodeImpl(const std::vector<bool>& data, const uint32_t module) const
102 {
103  return codecImpl_.decode(data, module, *geometry_);
104 }
105 
106 
void setDataPayloadImpl(const HGCalDigiCollection &ee, const HGCalDigiCollection &fh, const HGCalDigiCollection &bh)
HGCalTriggerCellBestChoiceCodecImpl codecImpl_
void decode(const CODEC &codec, DATA &data) const
void triggerCellSums(const HGCalTriggerGeometryBase &, const std::vector< std::pair< DetId, uint32_t > > &, data_type &)
HGCalTriggerCellBestChoiceCodec(const edm::ParameterSet &conf)
data_type decode(const std::vector< bool > &, const uint32_t, const HGCalTriggerGeometryBase &) const
void addParameter(std::string const &name, T const &value)
Definition: ParameterSet.h:144
const unsigned char getCodecType() const
const HGCalTriggerGeometryBase * geometry_
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:82
std::vector< bool > encodeImpl(const data_type &) const
data_type decodeImpl(const std::vector< bool > &, const uint32_t) const
const std::string & name() const
#define DEFINE_EDM_PLUGIN(factory, type, name)
Definition: vlib.h:208
std::vector< bool > encode(const data_type &, const HGCalTriggerGeometryBase &) const
void linearize(const std::vector< HGCalDataFrame > &, std::vector< std::pair< DetId, uint32_t > > &)