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
00027
00028
00029
00030 class EcalCoder
00031 {
00032 public:
00034 enum {NBITS = 12};
00035
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