![]() |
![]() |
00001 // -*- C++ -*- 00002 // 00003 // Package: SecondaryVertexFilter 00004 // Class: SecondaryVertexFilter 00005 // 00013 // 00014 // Original Author: Andrea RIZZI 00015 // Created: Mon Dec 7 18:02:10 CET 2009 00016 // $Id: SecondaryVertexFilter.cc,v 1.2 2010/02/17 23:39:10 wmtan 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 #include "FWCore/Utilities/interface/InputTag.h" 00033 #include "DataFormats/VertexReco/interface/Vertex.h" 00034 #include "DataFormats/VertexReco/interface/VertexFwd.h" 00035 #include "DataFormats/BTauReco/interface/SecondaryVertexTagInfo.h" 00036 // 00037 // class declaration 00038 // 00039 00040 class SecondaryVertexFilter : public edm::EDFilter { 00041 public: 00042 explicit SecondaryVertexFilter(const edm::ParameterSet&); 00043 ~SecondaryVertexFilter(); 00044 00045 private: 00046 virtual bool filter(edm::Event&, const edm::EventSetup&); 00047 edm::InputTag vertexSrc; 00048 unsigned int minNumTracks; 00049 double maxAbsZ; 00050 double maxd0; 00051 // ----------member data --------------------------- 00052 }; 00053 00054 SecondaryVertexFilter::SecondaryVertexFilter(const edm::ParameterSet& iConfig) 00055 { 00056 vertexSrc = iConfig.getParameter<edm::InputTag>("vertexCollection"); 00057 minNumTracks = iConfig.getParameter<unsigned int>("minimumNumberOfTracks"); 00058 maxAbsZ = iConfig.getParameter<double>("maxAbsZ"); 00059 maxd0 = iConfig.getParameter<double>("maxd0"); 00060 00061 } 00062 00063 00064 SecondaryVertexFilter::~SecondaryVertexFilter() 00065 { 00066 } 00067 00068 bool 00069 SecondaryVertexFilter::filter(edm::Event& iEvent, const edm::EventSetup& iSetup) 00070 { 00071 bool result = false; 00072 edm::Handle<reco::SecondaryVertexTagInfoCollection> pvHandle; 00073 iEvent.getByLabel(vertexSrc,pvHandle); 00074 const reco::SecondaryVertexTagInfoCollection & vertices = *pvHandle.product(); 00075 for(reco::SecondaryVertexTagInfoCollection::const_iterator it=vertices.begin() ; it!=vertices.end() ; ++it) 00076 { 00077 if(it->nVertices() > 0) result = true; 00078 // if(it->tracksSize() > minNumTracks && 00079 // ( (maxAbsZ <=0 ) || fabs(it->z()) <= maxAbsZ ) && 00080 // ( (maxd0 <=0 ) || fabs(it->position().rho()) <= maxd0 ) 00081 //) result = true; 00082 } 00083 00084 return result; 00085 } 00086 00087 00088 //define this as a plug-in 00089 DEFINE_FWK_MODULE(SecondaryVertexFilter);