CMS 3D CMS Logo

/data/doxygen/doxygen-1.7.3/gen/CMSSW_4_2_8/src/RecoLocalTracker/SiStripClusterizer/interface/SiStripClusterInfo.h

Go to the documentation of this file.
00001 #ifndef SISTRIPCLUSTERIZER_SISTRIPCLUSTERINFO_H
00002 #define SISTRIPCLUSTERIZER_SISTRIPCLUSTERINFO_H
00003 
00004 #include "FWCore/Framework/interface/Frameworkfwd.h"
00005 #include "FWCore/Framework/interface/ESHandle.h"
00006 #include "DataFormats/SiStripCluster/interface/SiStripCluster.h"
00007 #include <numeric>
00008 
00009 class SiStripNoises;
00010 class SiStripGain;
00011 class SiStripQuality;
00012 
00013 
00014 class SiStripClusterInfo {
00015 
00016  public:
00017 
00018   SiStripClusterInfo(const SiStripCluster& cluster, 
00019                      const edm::EventSetup& es, 
00020                      std::string qualityLabel="");
00021 
00022   const SiStripCluster * cluster() const {return cluster_ptr;}
00023 
00024   uint32_t detId() const      {return cluster()->geographicalId();}
00025   uint16_t width() const      {return cluster()->amplitudes().size();}
00026   uint16_t firstStrip() const {return cluster()->firstStrip();}
00027   float    baryStrip() const  {return cluster()->barycenter();}
00028   uint16_t maxStrip() const   {return firstStrip() + maxIndex();}
00029   float    variance() const;
00030 
00031   const std::vector<uint8_t>& stripCharges() const {return cluster()->amplitudes();}
00032   std::vector<float>          stripGains() const;
00033   std::vector<float>          stripNoises() const;
00034   std::vector<float>          stripNoisesRescaledByGain() const;
00035   std::vector<bool>           stripQualitiesBad() const;
00036 
00037   uint16_t charge() const    {return   accumulate( stripCharges().begin(), stripCharges().end(), uint16_t(0));}
00038   uint8_t  maxCharge() const {return * max_element(stripCharges().begin(), stripCharges().end());}
00039   uint16_t maxIndex() const  {return   max_element(stripCharges().begin(), stripCharges().end()) - stripCharges().begin();}
00040   std::pair<uint16_t,uint16_t> chargeLR() const;
00041   
00042   float noise() const               { return calculate_noise(stripNoises());}
00043   float noiseRescaledByGain() const { return calculate_noise(stripNoisesRescaledByGain());}
00044 
00045   float signalOverNoise() const { return charge()/noiseRescaledByGain(); }
00046 
00047   bool IsAnythingBad() const;
00048   bool IsApvBad() const;
00049   bool IsFiberBad() const;
00050   bool IsModuleBad() const;
00051   bool IsModuleUsable() const;
00052 
00053   std::vector<SiStripCluster> reclusterize(const edm::ParameterSet&) const;
00054 
00055  private:
00056 
00057   float calculate_noise(const std::vector<float>&) const; 
00058 
00059   const SiStripCluster* cluster_ptr;
00060   const edm::EventSetup& es; 
00061   edm::ESHandle<SiStripNoises> noiseHandle;
00062   edm::ESHandle<SiStripGain> gainHandle;
00063   edm::ESHandle<SiStripQuality> qualityHandle;
00064   std::string qualityLabel;
00065 
00066 };
00067 
00068 #endif