00001 #ifndef CALIBCALORIMETRY_HCALTPGALGOS_HCALNOMINALTPGCODER_H
00002 #define CALIBCALORIMETRY_HCALTPGALGOS_HCALNOMINALTPGCODER_H 1
00003
00004 #include "CalibFormats/HcalObjects/interface/HcalTPGCoder.h"
00005 #include "CalibFormats/HcalObjects/interface/HcalNominalCoder.h"
00006 #include "Geometry/CaloTopology/interface/HcalTopology.h"
00007 #include "DataFormats/HcalDetId/interface/HcalDetId.h"
00008 #include <vector>
00009
00010 class HcalDbService;
00011
00031 class HcaluLUTTPGCoder : public HcalTPGCoder {
00032 public:
00033
00034 HcaluLUTTPGCoder(const char* ifilename, bool read_Ascii_LUTs);
00035 virtual ~HcaluLUTTPGCoder();
00036 virtual void adc2Linear(const HBHEDataFrame& df, IntegerCaloSamples& ics) const;
00037 virtual void adc2Linear(const HFDataFrame& df, IntegerCaloSamples& ics) const;
00038 virtual void compress(const IntegerCaloSamples& ics, const std::vector<bool>& featureBits, HcalTriggerPrimitiveDigi& tp) const;
00039 virtual unsigned short adc2Linear(HcalQIESample sample,HcalDetId id) const;
00040 virtual float getLUTPedestal(HcalDetId id) const;
00041 virtual float getLUTGain(HcalDetId id) const;
00042
00043 void update(const HcalDbService& conditions);
00044 void update(const char* filename);
00045 void PrintTPGMap();
00046 private:
00047 void loadILUTs(const char* filename);
00048 typedef std::vector<int> LUTType;
00049 std::vector<LUTType> inputluts_;
00050 static const int nluts = 46007, INPUT_LUT_SIZE = 128;
00051 int GetLUTID(HcalSubdetector id, int ieta, int iphi, int depth) const;
00052 void AllocateLUTs();
00053 void getRecHitCalib(const char* filename);
00054 float Rcalib[87];
00055 typedef short unsigned int LUT;
00056 LUT *inputLUT[nluts];
00057 float *_gain;
00058 float *_ped;
00059 static const float nominal_gain;
00060 };
00061
00062 #endif