CMS 3D CMS Logo

/data/doxygen/doxygen-1.7.3/gen/CMSSW_4_2_8/src/DQMOffline/CalibTracker/src/StatisticsFilter.cc

Go to the documentation of this file.
00001 // -*- C++ -*-
00002 //
00003 // Package:    StatisticsFilter
00004 // Class:      StatisticsFilter
00005 // 
00013 //
00014 // Original Author:  Gordon Kaussen,40 1-A15,+41227671647,
00015 //         Created:  Mon Nov 15 10:48:54 CET 2010
00016 // $Id: StatisticsFilter.cc,v 1.1 2010/11/15 17:16:31 kaussen Exp $
00017 //
00018 //
00019 
00020 
00021 // system include files
00022 #include <memory>
00023 
00024 // user include files
00025 #include "FWCore/Framework/interface/Frameworkfwd.h"
00026 #include "FWCore/Framework/interface/EDFilter.h"
00027 
00028 #include "FWCore/Framework/interface/Event.h"
00029 #include "FWCore/Framework/interface/MakerMacros.h"
00030 
00031 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00032 
00033 #include "FWCore/ServiceRegistry/interface/Service.h"
00034 
00035 #include "DQMServices/Core/interface/DQMStore.h"
00036 #include "DQMServices/Core/interface/MonitorElement.h"
00037 
00038 //
00039 // class declaration
00040 //
00041 
00042 class StatisticsFilter : public edm::EDFilter {
00043    public:
00044       explicit StatisticsFilter(const edm::ParameterSet&);
00045       ~StatisticsFilter();
00046 
00047    private:
00048       virtual void beginJob() ;
00049       virtual bool filter(edm::Event&, const edm::EventSetup&);
00050       virtual void endJob() ;
00051       
00052       // ----------member data ---------------------------
00053 
00054   DQMStore* dqmStore_;
00055 
00056   std::string filename, dirpath;
00057   int TotNumberOfEvents;
00058   int MinNumberOfEvents;
00059 
00060 };
00061 
00062 //
00063 // constants, enums and typedefs
00064 //
00065 
00066 //
00067 // static data member definitions
00068 //
00069 
00070 //
00071 // constructors and destructor
00072 //
00073 StatisticsFilter::StatisticsFilter(const edm::ParameterSet& iConfig) : filename(iConfig.getUntrackedParameter<std::string>("rootFilename","")),
00074                                                                        dirpath(iConfig.getUntrackedParameter<std::string>("histoDirPath","")),
00075                                                                        MinNumberOfEvents(iConfig.getUntrackedParameter<int>("minNumberOfEvents"))
00076 {
00077    //now do what ever initialization is needed
00078 
00079   dqmStore_ = edm::Service<DQMStore>().operator->();
00080   dqmStore_->open(filename.c_str(), false);
00081 }
00082 
00083 
00084 StatisticsFilter::~StatisticsFilter()
00085 {
00086  
00087    // do anything here that needs to be done at desctruction time
00088    // (e.g. close files, deallocate resources etc.)
00089 
00090 }
00091 
00092 
00093 //
00094 // member functions
00095 //
00096 
00097 // ------------ method called on each new Event  ------------
00098 bool
00099 StatisticsFilter::filter(edm::Event& iEvent, const edm::EventSetup& iSetup)
00100 {
00101   TotNumberOfEvents = 0;
00102 
00103   std::vector<MonitorElement*> MEs = dqmStore_->getAllContents(dirpath);
00104 
00105   std::vector<MonitorElement*>::const_iterator iter=MEs.begin();
00106   std::vector<MonitorElement*>::const_iterator iterEnd=MEs.end();
00107 
00108   for (; iter!=iterEnd;++iter)
00109     {
00110       std::string me_name = (*iter)->getName();
00111 
00112       if ( strstr(me_name.c_str(),"TotalNumberOfCluster__T")!=NULL && strstr(me_name.c_str(),"Profile")==NULL )
00113         {
00114           TotNumberOfEvents = ((TH1F*)(*iter)->getTH1F())->GetEntries();
00115 
00116           break;
00117         }
00118     }
00119 
00120   if ( TotNumberOfEvents<MinNumberOfEvents )
00121     {
00122       edm::LogInfo("StatisticsFilter") << "Only " << TotNumberOfEvents << " events in the run. Run will not be analyzed!";
00123 
00124       return false;
00125     }
00126 
00127   return true;
00128 }
00129 
00130 // ------------ method called once each job just before starting event loop  ------------
00131 void 
00132 StatisticsFilter::beginJob()
00133 {
00134 }
00135 
00136 // ------------ method called once each job just after ending the event loop  ------------
00137 void 
00138 StatisticsFilter::endJob() {
00139 }
00140 
00141 //define this as a plug-in
00142 DEFINE_FWK_MODULE(StatisticsFilter);