CMS 3D CMS Logo

EcalCoder.h

Go to the documentation of this file.
00001 
00002 #ifndef EcalSimAlgos_EcalCoder_h
00003 #define EcalSimAlgos_EcalCoder_h 1
00004 
00005 #include "FWCore/Framework/interface/EDProducer.h"
00006 #include "DataFormats/Common/interface/EDProduct.h"
00007 #include "FWCore/Framework/interface/Event.h"
00008 #include "DataFormats/Common/interface/Handle.h"
00009 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00010 #include "FWCore/Framework/interface/ESHandle.h"
00011 #include "FWCore/Framework/interface/EventSetup.h"
00012 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00013 #include "CalibFormats/CaloObjects/interface/CaloSamples.h"
00014 #include "SimGeneral/NoiseGenerators/interface/CorrelatedNoisifier.h"
00015 #include "SimCalorimetry/EcalSimAlgos/interface/EcalCorrelatedNoiseMatrix.h"
00016 
00017 #include "CalibCalorimetry/EcalTrivialCondModules/interface/EcalTrivialConditionRetriever.h"
00018 
00019 
00020 class EcalMGPASample;
00021 class EBDataFrame;
00022 class EEDataFrame;
00023 class DetId;
00024 #include<vector>
00025 
00026 /* \class EEDigitizerTraits
00027  * \brief Converts CaloDataFrame in CaloTimeSample and vice versa.
00028  *
00029  */
00030 class EcalCoder
00031 {
00032  public:
00034   enum {NBITS = 12};
00035   // 2^12 -1
00037   enum {MAXADC = 4095}; 
00039   enum {ADCGAINSWITCH = 4079};
00041   enum {NGAINS = 3};
00042 
00044   EcalCoder(bool addNoise, CorrelatedNoisifier<EcalCorrMatrix> * theCorrNoise) ;
00046   virtual ~EcalCoder() {}
00047 
00049   void setPedestals(const EcalPedestals * pedestals);
00050 
00051   void setGainRatios(const EcalGainRatios * gainRatios);
00052 
00053   void setFullScaleEnergy(const double EBscale , const double EEscale) {m_maxEneEB = EBscale; m_maxEneEE = EEscale; }
00054 
00055  
00057   virtual void digitalToAnalog(const EBDataFrame& df, CaloSamples& lf) const;
00059   virtual void digitalToAnalog(const EEDataFrame& df, CaloSamples& lf) const;
00061   virtual void analogToDigital(const CaloSamples& clf, EcalDataFrame& df) const;
00062  
00064   void newEvent() {}
00065 
00066  private:
00067 
00069   double fullScaleEnergy (const DetId & ) const ;
00070 
00072   void encode(const CaloSamples& caloSamples, EcalDataFrame& df) const;
00073 
00074   double decode(const EcalMGPASample & sample, const DetId & detId) const;
00075 
00077   void noisify(float * values, int size) const;
00078 
00080   void findPedestal(const DetId & detId, int gainId, 
00081                     double & pedestal, double & width) const;
00082     
00083   double theGains[NGAINS+1];
00084    
00085   void findGains(const DetId & detId, double theGains[] ) const;
00086    
00088   const EcalPedestals * thePedestals;
00090   const EcalGainRatios * theGainRatios;
00092   double m_maxEneEB ;
00094   double m_maxEneEE ;
00096   bool addNoise_;
00098   CorrelatedNoisifier<EcalCorrMatrix> * theCorrNoise_;
00099 
00100 };
00101 
00102 
00103 #endif

Generated on Tue Jun 9 17:46:16 2009 for CMSSW by  doxygen 1.5.4