Go to the documentation of this file.00001
00002
00003
00004
00005
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <memory>
00022 #include <string>
00023
00024
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 #include "FWCore/Framework/interface/ESHandle.h"
00031 #include "FWCore/Framework/interface/ESWatcher.h"
00032
00033 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00034
00035 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00036
00037 #include "FWCore/Utilities/interface/InputTag.h"
00038
00039 #include "DataFormats/SiStripDigi/interface/SiStripDigi.h"
00040 #include "DataFormats/SiStripCluster/interface/SiStripCluster.h"
00041 #include "DataFormats/SiPixelCluster/interface/SiPixelCluster.h"
00042 #include "DataFormats/Common/interface/DetSetVector.h"
00043 #include "DataFormats/Common/interface/DetSetVectorNew.h"
00044 #include "DataFormats/Common/interface/DetSet.h"
00045
00046 #include "CalibFormats/SiStripObjects/interface/SiStripQuality.h"
00047 #include "CalibTracker/Records/interface/SiStripQualityRcd.h"
00048
00049
00050
00051
00052
00053 template <class T>
00054 class LargeEvents : public edm::EDFilter {
00055 public:
00056 explicit LargeEvents(const edm::ParameterSet&);
00057 ~LargeEvents();
00058
00059 private:
00060 virtual void beginJob() ;
00061 virtual bool filter(edm::Event&, const edm::EventSetup&);
00062 virtual void endJob() ;
00063
00064
00065
00066 edm::InputTag _collection;
00067 int _absthr;
00068 int _modthr;
00069 bool _useQuality;
00070 std::string _qualityLabel;
00071 edm::ESHandle<SiStripQuality> _qualityHandle;
00072 edm::ESWatcher<SiStripQualityRcd> _qualityWatcher;
00073
00074 };
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087 template <class T>
00088 LargeEvents<T>::LargeEvents(const edm::ParameterSet& iConfig):
00089 _collection(iConfig.getParameter<edm::InputTag>("collectionName")),
00090 _absthr(iConfig.getUntrackedParameter<int>("absoluteThreshold")),
00091 _modthr(iConfig.getUntrackedParameter<int>("moduleThreshold")),
00092 _useQuality(iConfig.getUntrackedParameter<bool>("useQuality",false)),
00093 _qualityLabel(iConfig.getUntrackedParameter<std::string>("qualityLabel",""))
00094 {
00095
00096
00097
00098 }
00099
00100 template <class T>
00101 LargeEvents<T>::~LargeEvents()
00102 {
00103
00104
00105
00106
00107 }
00108
00109
00110
00111
00112
00113
00114
00115 template <class T>
00116 bool
00117 LargeEvents<T>::filter(edm::Event& iEvent, const edm::EventSetup& iSetup)
00118 {
00119 using namespace edm;
00120
00121 if( _useQuality) {
00122 if(_qualityWatcher.check(iSetup)) {
00123 iSetup.get<SiStripQualityRcd>().get(_qualityLabel,_qualityHandle);
00124 LogDebug("SiStripQualityUpdated") << "SiStripQuality has changed and it will be updated";
00125 }
00126 }
00127
00128 Handle<T> digis;
00129 iEvent.getByLabel(_collection,digis);
00130
00131
00132 int ndigitot = 0;
00133 for(typename T::const_iterator it = digis->begin();it!=digis->end();it++) {
00134
00135 if(!_useQuality || !_qualityHandle->IsModuleBad(it->detId()) ) {
00136 if(_modthr < 0 || int(it->size()) < _modthr ) {
00137 ndigitot += it->size();
00138 }
00139 }
00140 }
00141
00142 if(ndigitot > _absthr) {
00143 LogDebug("LargeEventSelected") << "event with " << ndigitot << " digi/cluster selected";
00144 return true;
00145 }
00146
00147 return false;
00148 }
00149
00150
00151 template <class T>
00152 void
00153 LargeEvents<T>::beginJob()
00154 {
00155 }
00156
00157
00158 template <class T>
00159 void
00160 LargeEvents<T>::endJob() {
00161 }
00162
00163
00164 typedef LargeEvents<edm::DetSetVector<SiStripDigi> > LargeSiStripDigiEvents;
00165 typedef LargeEvents<edmNew::DetSetVector<SiStripCluster> > LargeSiStripClusterEvents;
00166 typedef LargeEvents<edmNew::DetSetVector<SiPixelCluster> > LargeSiPixelClusterEvents;
00167
00168 DEFINE_FWK_MODULE(LargeSiStripDigiEvents);
00169 DEFINE_FWK_MODULE(LargeSiStripClusterEvents);
00170 DEFINE_FWK_MODULE(LargeSiPixelClusterEvents);