CMS 3D CMS Logo

ClusterChecker.h

Go to the documentation of this file.
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

Generated on Tue Jun 9 17:45:44 2009 for CMSSW by  doxygen 1.5.4