File indexing completed on 2023-03-17 11:23:50
0001 #ifndef SimCalorimetry_HcalTPGAlgos_interface_HcalFeatureHFEMBit_h_included
0002 #define SimCalorimetry_HcalTPGAlgos_interface_HcalFeatureHFEMBit_h_included 1
0003
0004 #include "SimCalorimetry/HcalTrigPrimAlgos/interface/HcalFeatureBit.h"
0005 #include "CalibFormats/HcalObjects/interface/HcalDbService.h"
0006 #include "CalibFormats/HcalObjects/interface/HcalCoderDb.h"
0007
0008 class HcalFeatureHFEMBit : public HcalFeatureBit {
0009 public:
0010 HcalFeatureHFEMBit(double ShortMinE,
0011 double LongMinE,
0012 double ShortLongCutSlope,
0013 double ShortLongCutOffset,
0014 const HcalDbService& conditions);
0015 ~HcalFeatureHFEMBit() override;
0016
0017
0018 bool fineGrainbit(const QIE10DataFrame& short1,
0019 const QIE10DataFrame& short2,
0020 const QIE10DataFrame& long1,
0021 const QIE10DataFrame& long2,
0022 bool validShort1,
0023 bool validShort2,
0024 bool validLong1,
0025 bool validLong2,
0026 int idx) const override;
0027 bool fineGrainbit(const HFDataFrame& shortDigi, const HFDataFrame& longDigi, int idx) const override;
0028
0029 private:
0030 template <typename T>
0031 float getE(const T& f, int idx) const;
0032
0033 double ShortMinE_, LongMinE_, ShortLongCutSlope_, ShortLongCutOffset_;
0034 const HcalDbService& conditions_;
0035 };
0036
0037 template <typename T>
0038 float HcalFeatureHFEMBit::getE(const T& f, int idx) const {
0039 const HcalDetId id(f.id());
0040 const HcalCalibrations& calibrations = conditions_.getHcalCalibrations(id);
0041 const auto* coder = conditions_.getHcalCoder(id);
0042 const auto* shape = conditions_.getHcalShape(coder);
0043
0044 HcalCoderDb db(*coder, *shape);
0045 CaloSamples samples;
0046 db.adc2fC(f, samples);
0047
0048 auto ped = calibrations.effpedestal(f[idx].capid());
0049 auto corr = calibrations.respcorrgain(f[idx].capid());
0050
0051 return (samples[idx] - ped) * corr;
0052 }
0053
0054 #endif