CMS 3D CMS Logo

/data/doxygen/doxygen-1.7.3/gen/CMSSW_4_2_8/src/DPGAnalysis/Skims/src/SecondaryVertexFilter.cc

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