Go to the documentation of this file.00001 #include "FWCore/Framework/interface/EDProducer.h"
00002 #include "FWCore/Utilities/interface/InputTag.h"
00003 #include "DataFormats/Common/interface/Handle.h"
00004 #include "FWCore/Framework/interface/Event.h"
00005 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00006 #include "DataFormats/VertexReco/interface/Vertex.h"
00007 #include "DataFormats/VertexReco/interface/VertexFwd.h"
00008
00009 #include <vector>
00010
00011 using namespace edm;
00012 using namespace std;
00013 using namespace reco;
00014
00015
00016 class EventVtxInfoNtupleDumper : public edm::EDProducer {
00017 public:
00018 EventVtxInfoNtupleDumper( const edm::ParameterSet & );
00019
00020 private:
00021 void produce( edm::Event &, const edm::EventSetup & );
00022 edm::InputTag primaryVertices_;
00023
00024 };
00025
00026 EventVtxInfoNtupleDumper::EventVtxInfoNtupleDumper( const ParameterSet & cfg ) :
00027 primaryVertices_(cfg.getParameter<InputTag>("primaryVertices")) {
00028 produces<int>( "numPV" ).setBranchAlias( "numPV" );
00029 produces<int>( "nTrkPV" ).setBranchAlias( "nTrkPV" );
00030 produces<float>( "chi2PV" ).setBranchAlias( "chi2PV" );
00031 produces<float>( "ndofPV" ).setBranchAlias( "ndofPV" );
00032 produces<float>( "zPV" ).setBranchAlias( "zPV" );
00033 produces<float>( "rhoPV" ).setBranchAlias( "rhoPV" );
00034
00035
00036
00037 }
00038
00039
00040
00041 void EventVtxInfoNtupleDumper::produce( Event & evt, const EventSetup & ) {
00042
00043 Handle<reco::VertexCollection> primaryVertices;
00044 evt.getByLabel(primaryVertices_, primaryVertices);
00045 auto_ptr<int> nVtxs( new int );
00046 auto_ptr<int> nTrkVtx( new int );
00047 auto_ptr<float> chi2Vtx( new float );
00048 auto_ptr<float> ndofVtx( new float );
00049 auto_ptr<float> zVtx( new float );
00050 auto_ptr<float> rhoVtx( new float );
00051
00052
00053
00054
00055 const reco::Vertex &pv = (*primaryVertices)[0];
00056
00057 *nVtxs = -1;
00058 *nTrkVtx = -1;
00059 *chi2Vtx = -1.0;
00060 *ndofVtx = -1.0;
00061 *zVtx = -1000;
00062 *rhoVtx = -1000;
00063 if( !(pv.isFake()) ) {
00064 *nVtxs = primaryVertices->size();
00065 *nTrkVtx = pv.tracksSize();
00066 *chi2Vtx = pv.chi2();
00067 *ndofVtx = pv.ndof();
00068 *zVtx = pv.z();
00069 *rhoVtx = pv.position().Rho();
00070 }
00071
00072
00073
00074 evt.put( nVtxs, "numPV" );
00075 evt.put( nTrkVtx, "nTrkPV" );
00076 evt.put( chi2Vtx, "chi2PV" );
00077 evt.put( ndofVtx, "ndofPV" );
00078 evt.put( zVtx, "zPV" );
00079 evt.put( rhoVtx, "rhoPV" );
00080
00081 }
00082
00083 #include "FWCore/Framework/interface/MakerMacros.h"
00084
00085 DEFINE_FWK_MODULE( EventVtxInfoNtupleDumper );
00086