![]() |
![]() |
00001 #ifndef RecoTracker_SpecialSeedGenerators_ClusterChecker_H 00002 #define RecoTracker_SpecialSeedGenerators_ClusterChecker_H 00003 00004 #include "FWCore/Framework/interface/Event.h" 00005 #include "DataFormats/Common/interface/Handle.h" 00006 #include "FWCore/ParameterSet/interface/InputTag.h" 00007 00008 #include "FWCore/ParameterSet/interface/ParameterSet.h" 00009 #include "DataFormats/Common/interface/LazyGetter.h" 00010 #include "DataFormats/SiStripCluster/interface/SiStripCluster.h" 00011 #include "DataFormats/Common/interface/DetSetVectorNew.h" 00012 00013 #include "FWCore/MessageLogger/interface/MessageLogger.h" 00014 00015 class ClusterChecker { 00016 public: 00017 ClusterChecker(edm::ParameterSet conf) : 00018 doACheck_(conf.getParameter<bool>("doClusterCheck")) 00019 { 00020 if (doACheck_){ 00021 clusterCollectionInputTag_ = conf.getParameter<edm::InputTag>("ClusterCollectionLabel"); 00022 maxNrOfCosmicClusters_ = conf.getParameter<unsigned int>("MaxNumberOfCosmicClusters"); 00023 if (conf.existsAs<uint32_t>("DontCountDetsAboveNClusters")) { 00024 ignoreDetsAboveNClusters_ = conf.getParameter<uint32_t>("DontCountDetsAboveNClusters"); 00025 } else { 00026 ignoreDetsAboveNClusters_ = 0; 00027 } 00028 } 00029 } 00030 00031 size_t tooManyClusters(const edm::Event & e){ 00032 if (!doACheck_) return 0; 00033 00034 // get special input for cosmic cluster multiplicity filter 00035 edm::Handle<edmNew::DetSetVector<SiStripCluster> > clusterDSV; 00036 e.getByLabel(clusterCollectionInputTag_, clusterDSV); 00037 unsigned int totalClusters = 0; 00038 if (!clusterDSV.failedToGet()) { 00039 const edmNew::DetSetVector<SiStripCluster> & input = *clusterDSV; 00040 00041 if (ignoreDetsAboveNClusters_ == 0) { 00042 totalClusters = input.dataSize(); 00043 } else { 00044 //loop over detectors 00045 edmNew::DetSetVector<SiStripCluster>::const_iterator DSViter=input.begin(), DSViter_end=input.end(); 00046 for (; DSViter!=DSViter_end; DSViter++ ) { 00047 size_t siz = DSViter->size(); 00048 if (siz > ignoreDetsAboveNClusters_) continue; 00049 totalClusters += siz; 00050 } 00051 } 00052 } 00053 else{ 00054 edm::Handle<edm::LazyGetter<SiStripCluster> > lazyGH; 00055 e.getByLabel(clusterCollectionInputTag_, lazyGH); 00056 if (!lazyGH.failedToGet()){ 00057 totalClusters = lazyGH->size(); 00058 }else{ 00059 //say something's wrong. 00060 edm::LogError("ClusterChecker")<<"could not get any SiStrip cluster collections of type edm::DetSetVector<SiStripCluster> or edm::LazyGetter<SiStripCluster, with label: "<<clusterCollectionInputTag_; 00061 totalClusters = 999999; 00062 } 00063 } 00064 return (totalClusters > maxNrOfCosmicClusters_) ? totalClusters : 0; 00065 } 00066 00067 private: 00068 bool doACheck_; 00069 edm::InputTag clusterCollectionInputTag_; 00070 uint32_t maxNrOfCosmicClusters_; 00071 uint32_t ignoreDetsAboveNClusters_; 00072 }; 00073 00074 #endif