![]() |
![]() |
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