Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:29:33

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   // Provides FG bit based on energy cuts in long & short fibers.
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