Go to the documentation of this file.00001 #ifndef CondFormats_SiPixelObjects_SiPixelGainCalibration_h
00002 #define CondFormats_SiPixelObjects_SiPixelGainCalibration_h
00003
00004
00005
00006
00007
00015
00016
00017
00018
00019
00020
00021
00022 #include<vector>
00023 #include<map>
00024 #include<iostream>
00025 #include<boost/cstdint.hpp>
00026
00027 class SiPixelGainCalibration {
00028
00029 public:
00030
00031 struct DecodingStructure{
00032 unsigned int gain :8;
00033 unsigned int ped :8;
00034
00035 };
00036
00037 struct DetRegistry{
00038 uint32_t detid;
00039 uint32_t ibegin;
00040 uint32_t iend;
00041 int ncols;
00042 };
00043
00044 class StrictWeakOrdering{
00045 public:
00046 bool operator() (const DetRegistry& p,const uint32_t& i) const {return p.detid < i;}
00047 };
00048
00049 typedef std::vector<char>::const_iterator ContainerIterator;
00050 typedef std::pair<ContainerIterator, ContainerIterator> Range;
00051 typedef std::vector<DetRegistry> Registry;
00052 typedef Registry::const_iterator RegistryIterator;
00053
00054
00055 SiPixelGainCalibration();
00056 SiPixelGainCalibration(float minPed, float maxPed, float minGain, float maxGain);
00057 virtual ~SiPixelGainCalibration(){};
00058
00059 bool put(const uint32_t& detID,Range input, const int& nCols);
00060 const Range getRange(const uint32_t& detID) const;
00061 void getDetIds(std::vector<uint32_t>& DetIds_) const;
00062 const int getNCols(const uint32_t& detID) const;
00063 const std::pair<const Range, const int> getRangeAndNCols(const uint32_t& detID) const;
00064
00065 unsigned int getNumberOfRowsToAverageOver() const { return numberOfRowsToAverageOver_; }
00066 double getGainLow() const { return minGain_; }
00067 double getGainHigh() const { return maxGain_; }
00068 double getPedLow() const { return minPed_; }
00069 double getPedHigh() const { return maxPed_; }
00070
00071
00072 void setData(float ped, float gain, std::vector<char>& vped, bool thisPixelIsDead = false, bool thisPixelIsNoisy = false);
00073
00074 void setDeadPixel(std::vector<char>& vped) { setData(0, 0, vped, true , false ); }
00075 void setNoisyPixel(std::vector<char>& vped) { setData(0, 0, vped, false , true ); }
00076
00077 float getPed (const int& col, const int& row, const Range& range, const int& nCols, bool& isDead, bool& isNoisy) const;
00078 float getGain (const int& col, const int& row, const Range& range, const int& nCols, bool& isDead, bool& isNoisy) const;
00079
00080 private:
00081
00082 float encodeGain(const float& gain);
00083 float encodePed (const float& ped);
00084 float decodeGain(unsigned int gain) const;
00085 float decodePed (unsigned int ped) const;
00086
00087 std::vector<char> v_pedestals;
00088 std::vector<DetRegistry> indexes;
00089 float minPed_, maxPed_, minGain_, maxGain_;
00090
00091 unsigned int numberOfRowsToAverageOver_;
00092 unsigned int nBinsToUseForEncoding_;
00093 unsigned int deadFlag_;
00094 unsigned int noisyFlag_;
00095
00096 };
00097
00098 #endif