CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_6_1_2_SLHC2/src/RecoLocalCalo/EcalRecAlgos/interface/EcalRecHitSimpleAlgo.h

Go to the documentation of this file.
00001 #ifndef RecoLocalCalo_EcalRecAlgos_EcalRecHitSimpleAlgo_HH
00002 #define RecoLocalCalo_EcalRecAlgos_EcalRecHitSimpleAlgo_HH
00003 
00013 #include "RecoLocalCalo/EcalRecAlgos/interface/EcalRecHitAbsAlgo.h"
00014 #include "DataFormats/EcalDigi/interface/EcalDataFrame.h"
00015 #include "TMath.h"
00016 #include <iostream>
00017 
00018 class EcalRecHitSimpleAlgo : public EcalRecHitAbsAlgo {
00019  public:
00020   // default ctor
00021   EcalRecHitSimpleAlgo() {
00022     adcToGeVConstant_ = -1;
00023     adcToGeVConstantIsSet_ = false;
00024   }
00025 
00026   virtual void setADCToGeVConstant(const float& value) {
00027     adcToGeVConstant_ = value;
00028     adcToGeVConstantIsSet_ = true;
00029   }
00030 
00031 
00032   // destructor
00033   virtual ~EcalRecHitSimpleAlgo() { };
00034 
00036   virtual EcalRecHit makeRecHit(const EcalUncalibratedRecHit& uncalibRH,
00037                                 const float& intercalibConstant,
00038                                 const float& timeIntercalib = 0,
00039                                 const uint32_t& flags = 0) const {
00040 
00041     if(!adcToGeVConstantIsSet_) {
00042       std::cout << "EcalRecHitSimpleAlgo::makeRecHit: adcToGeVConstant_ not set before calling this method!" << 
00043                    " will use -1 and produce bogus rechits!" << std::endl;
00044     }
00045 
00046     float clockToNsConstant = 25;
00047     float energy = uncalibRH.amplitude()*adcToGeVConstant_*intercalibConstant;
00048     float time   = uncalibRH.jitter() * clockToNsConstant + timeIntercalib;
00049 
00050     EcalRecHit rh( uncalibRH.id(), energy, time );
00051     rh.setChi2( uncalibRH.chi2() );
00052     rh.setOutOfTimeEnergy( uncalibRH.outOfTimeEnergy() * adcToGeVConstant_ * intercalibConstant );
00053     rh.setOutOfTimeChi2( uncalibRH.outOfTimeChi2() );
00054     rh.setTimeError(uncalibRH.jitterErrorBits());
00055 
00056     // Now fill flags
00057 
00058     bool good=true;
00059     
00060     if ( uncalibRH.checkFlag(EcalUncalibratedRecHit::kLeadingEdgeRecovered) ){
00061             rh.setFlag(EcalRecHit::kLeadingEdgeRecovered);
00062             good=false; 
00063     } 
00064     if ( uncalibRH.checkFlag(EcalUncalibratedRecHit::kSaturated) ) { 
00065             // leading edge recovery failed - still keep the information 
00066             // about the saturation and do not flag as dead 
00067             rh.setFlag(EcalRecHit::kSaturated); 
00068             good=false;
00069     } 
00070     if( uncalibRH.isSaturated() ) {
00071             rh.setFlag(EcalRecHit::kSaturated);
00072             good=false;
00073     } 
00074     if ( uncalibRH.checkFlag(EcalUncalibratedRecHit::kOutOfTime) ) {
00075             rh.setFlag(EcalRecHit::kOutOfTime) ;
00076             good=false;   
00077     } 
00078     if ( uncalibRH.checkFlag(EcalUncalibratedRecHit::kPoorReco) ) {
00079             rh.setFlag(EcalRecHit::kPoorReco);
00080             good=false;
00081     }
00082     if ( uncalibRH.checkFlag( EcalUncalibratedRecHit::kHasSwitchToGain6 ) ) {
00083             rh.setFlag(EcalRecHit::kHasSwitchToGain6);
00084     }
00085     if (uncalibRH.checkFlag( EcalUncalibratedRecHit::kHasSwitchToGain1 ) ) {
00086             rh.setFlag(EcalRecHit::kHasSwitchToGain1);
00087     }
00088     
00089     if (good) rh.setFlag(EcalRecHit::kGood);
00090     return rh;
00091   }
00092 
00093 private:
00094   float adcToGeVConstant_;
00095   bool  adcToGeVConstantIsSet_;
00096 
00097 };
00098 #endif