1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
#ifndef CALIBFORMATS_HCALOBJECTS_HCALTPGCODER_H
#define CALIBFORMATS_HCALOBJECTS_HCALTPGCODER_H 1
#include "CalibFormats/CaloObjects/interface/IntegerCaloSamples.h"
#include "DataFormats/HcalDigi/interface/HBHEDataFrame.h"
#include "DataFormats/HcalDigi/interface/HFDataFrame.h"
#include "DataFormats/HcalDigi/interface/HcalTriggerPrimitiveDigi.h"
#include "DataFormats/HcalDigi/interface/QIE10DataFrame.h"
#include "DataFormats/HcalDigi/interface/QIE11DataFrame.h"
#include "DataFormats/HcalDetId/interface/HcalZDCDetId.h"
// forward declaration of EventSetup is all that is needed here
namespace edm {
class EventSetup;
}
/** \class HcalTPGCoder
*
* Converts ADC to linear E or ET for use in the TPG path
* Also compresses linear scale for transmission to RCT
*
* Note : whether the coder produces E or ET is determined by the specific
* implementation of the coder.
*
* \author J. Mans - Minnesota
*/
class HcalTPGCoder {
public:
virtual ~HcalTPGCoder() = default;
virtual void adc2Linear(const HBHEDataFrame& df, IntegerCaloSamples& ics) const = 0;
virtual void adc2Linear(const HFDataFrame& df, IntegerCaloSamples& ics) const = 0;
virtual void adc2Linear(const QIE10DataFrame& df, IntegerCaloSamples& ics, bool ootpu_lut) const = 0;
virtual void adc2Linear(const QIE11DataFrame& df, IntegerCaloSamples& ics) const = 0;
virtual unsigned short adc2Linear(HcalQIESample sample, HcalDetId id) const = 0;
unsigned short adc2Linear(unsigned char adc, HcalDetId id) const {
return adc2Linear(HcalQIESample(adc, 0, 0, 0), id);
}
virtual void compress(const IntegerCaloSamples& ics,
const std::vector<bool>& featureBits,
HcalTriggerPrimitiveDigi& tp) const = 0;
virtual float getLUTPedestal(HcalDetId id) const = 0;
virtual float getLUTGain(HcalDetId id) const = 0;
/** \brief Get the full linearization LUT (128 elements).
Default implementation just uses adc2Linear to get all values
*/
virtual std::vector<unsigned short> getLinearizationLUT(HcalDetId id) const;
virtual std::vector<unsigned short> getLinearizationLUT(HcalZDCDetId id, bool ootput_lut) const;
};
#endif
|