CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_6_2_5/src/CondFormats/SiPixelObjects/interface/SiPixelGainCalibration.h

Go to the documentation of this file.
00001 #ifndef CondFormats_SiPixelObjects_SiPixelGainCalibration_h
00002 #define CondFormats_SiPixelObjects_SiPixelGainCalibration_h
00003 // -*- C++ -*-
00004 //
00005 // Package:    SiPixelObjects
00006 // Class:      SiPixelGainCalibration
00007 // 
00015 //
00016 // Original Author:  Vincenzo Chiochia
00017 //         Created:  Tue 8 12:31:25 CEST 2007
00018 //         Modified: Evan Friis
00019 // $Id: SiPixelGainCalibration.h,v 1.9 2009/02/17 19:03:38 rougny Exp $
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     //    unsigned int ped :10;
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   // Constructors
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   // Set and get public methods
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, /*dummy values, not used*/ vped,  true , false ); }
00075   void  setNoisyPixel(std::vector<char>& vped) { setData(0, 0, /*dummy values, not used*/ 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; //@@@ blob streaming doesn't work with uint16_t and with classes
00088   std::vector<DetRegistry> indexes;
00089   float  minPed_, maxPed_, minGain_, maxGain_;
00090 
00091   unsigned int numberOfRowsToAverageOver_;   //THIS WILL BE HARDCODED TO 1 (no averaging) DON'T CHANGE UNLESS YOU KNOW WHAT YOU ARE DOING! 
00092   unsigned int nBinsToUseForEncoding_;
00093   unsigned int deadFlag_;
00094   unsigned int noisyFlag_;
00095 
00096 };
00097     
00098 #endif