22 nominal_gain_(0.), lsb_factor_(0.), rct_factor_(1.), nct_factor_(1.),
23 compressionFile_(compressionFile),
24 decompressionFile_(decompressionFile)
34 throw cms::Exception(
"CaloTPGTranscoderULUT") <<
"Topology not set! Use CaloTPGTranscoderULUT::setup(...) first!";
37 std::array<unsigned int, OUTPUT_LUT_SIZE> analyticalLUT;
38 std::array<unsigned int, OUTPUT_LUT_SIZE> linearRctLUT;
39 std::array<unsigned int, OUTPUT_LUT_SIZE> linearNctLUT;
50 for(std::vector<DetId>::iterator
i=allChannels.begin();
i!=allChannels.end(); ++
i){
78 for (
unsigned int i = threshold;
i < lutsize; ++
i)
81 for (
unsigned int i = threshold;
i < lutsize; ++
i)
82 outputLUT_[index][
i] = version == 0 ? linearRctLUT[
i] : linearNctLUT[
i];
85 double eta_low = 0., eta_high = 0.;
86 theTrigTowerGeometry.
towerEtaBounds(ieta,version,eta_low,eta_high);
87 double cosh_ieta = fabs(cosh((eta_low + eta_high)/2.));
96 unsigned int mid = (low +
i)/2;
122 <<
"LUT has " <<
getOutputLUTSize(
id) <<
" entries for " <<
id <<
" but " << sample <<
" was requested.";
125 throw cms::Exception(
"Out of Range") <<
"No decompression LUT found for " <<
id;
134 edm::LogError(
"CaloTPGTranscoderULUT") <<
"No decompression LUT found for ieta, iphi = " << ieta <<
", " << iphi;
135 }
else if (compET < 0 || compET >= (
int)
TPGMAX) {
136 edm::LogError(
"CaloTPGTranscoderULUT") <<
"Compressed value out of range: eta, phi, cET = " << ieta <<
", " << iphi <<
", " << compET;
151 throw cms::Exception(
"Not Implemented") <<
"CaloTPGTranscoderULUT::ecalCompress";
156 unsigned int&
et,
bool& egVecto,
bool& activity)
const {
157 throw cms::Exception(
"Not Implemented") <<
"CaloTPGTranscoderULUT::rctEGammaUncompress";
161 unsigned int&
et)
const {
162 throw cms::Exception(
"Not Implemented") <<
"CaloTPGTranscoderULUT::rctJetUncompress";
167 id.setVersion(version);
169 throw cms::Exception(
"CaloTPGTranscoderULUT") <<
"Topology not set! Use CaloTPGTranscoderULUT::setup(...) first!";
176 throw cms::Exception(
"CaloTPGTranscoderULUT") <<
"Topology not set! Use CaloTPGTranscoderULUT::setup(...) first!";
183 throw cms::Exception(
"CaloTPGTranscoderULUT") <<
"Topology not set! Use CaloTPGTranscoderULUT::setup(...) first!";
186 id.setVersion(version);
195 <<
"Topology not set! Use CaloTPGTranscoderULUT::setup(...) first!";
228 <<
"Unknown trigger mode used by the topology!";
235 std::vector<unsigned int>
result(
lut.begin(),
lut.end());
258 for (
const auto& tower: theTrigTowerGeometry.
towerIds(cell))
266 throw cms::Exception(
"Not Implemented") <<
"setup of CaloTPGTranscoderULUT from text files";
const HcalDDDRecConstants * dddConstants() const
std::vector< RCTdecompression > hcaluncomp_
std::vector< std::array< LUT, OUTPUT_LUT_SIZE > > outputLUT_
bool isHcalZDCDetId() const
std::vector< HcalTrigTowerDetId > towerIds(const HcalDetId &cellId) const
the mapping to and from DetIds
std::set< HcalDetId > plan1_towers_
static const unsigned int QIE8_OUTPUT_LUT_SIZE
virtual bool HTvalid(const int ieta, const int iphi, const int version) const
unsigned int detId2denseIdHT(const DetId &id) const
return a linear packed id from HT
unsigned int getOutputLUTSize(const HcalTrigTowerDetId &id) const
virtual const std::vector< unsigned int > getCompressionLUT(const HcalTrigTowerDetId &id) const
std::string decompressionFile_
void towerEtaBounds(int ieta, int version, double &eta1, double &eta2) const
where this tower begins and ends in eta
CaloTPGTranscoderULUT(const std::string &compressionFile="", const std::string &decompressionFile="")
const Item * getValues(DetId fId, bool throwOnFail=true) const
virtual ~CaloTPGTranscoderULUT()
HcalTopologyMode::TriggerMode triggerMode() const
virtual HcalTriggerPrimitiveSample hcalCompress(const HcalTrigTowerDetId &id, unsigned int sample, int fineGrain) const override
Compression from linear samples+fine grain in the HTR.
virtual void rctJetUncompress(const HcalTrigTowerDetId &hid, const HcalTriggerPrimitiveSample &hc, const EcalTrigTowerDetId &eid, const EcalTriggerPrimitiveSample &ec, unsigned int &et) const override
Uncompression for the JET path in the RCT.
bool isHcalTrigTowerDetId() const
const HcalTopology * theTopology
std::vector< DetId > getAllChannels() const
static const unsigned int QIE10_OUTPUT_LUT_SIZE
virtual int getOutputLUTId(const HcalTrigTowerDetId &id) const
unsigned int getHTSize() const
Abs< T >::type abs(const T &t)
static const unsigned int OUTPUT_LUT_SIZE
void loadHCALCompress(HcalLutMetadata const &, HcalTrigTowerGeometry const &)
virtual void setup(HcalLutMetadata const &, HcalTrigTowerGeometry const &, int, int)
virtual EcalTriggerPrimitiveSample ecalCompress(const EcalTrigTowerDetId &id, unsigned int sample, bool fineGrain) const override
Compression from linear samples+fine grain in the ECAL.
std::string compressionFile_
static const unsigned int QIE11_OUTPUT_LUT_SIZE
virtual bool valid(const DetId &id) const
et
define resolution functions of each parameter
virtual double hcaletValue(const int &ieta, const int &iphi, const int &version, const int &compressedValue) const override
static const unsigned int TPGMAX
virtual void rctEGammaUncompress(const HcalTrigTowerDetId &hid, const HcalTriggerPrimitiveSample &hc, const EcalTrigTowerDetId &eid, const EcalTriggerPrimitiveSample &ec, unsigned int &et, bool &egVecto, bool &activity) const override
Uncompression for the Electron/Photon path in the RCT.
int compressedEt() const
get the encoded/compressed Et
bool isPlan1(const HcalDetId &id) const
bool isHcalCastorDetId() const
const HcalTopology * topo() const
bool validHT(const HcalTrigTowerDetId &id) const
int firstHFTower(int version) const