/ElectroWeakAnalysis/ZMuMu/plugins/EventVtxInfoNtupleDumper.cc

https://github.com/aivanov-cern/cmssw · C++ · 86 lines · 60 code · 17 blank · 9 comment · 1 complexity · 4dec72db990989e14aef4d672812bebc MD5 · raw file

  1. #include "FWCore/Framework/interface/EDProducer.h"
  2. #include "FWCore/Utilities/interface/InputTag.h"
  3. #include "DataFormats/Common/interface/Handle.h"
  4. #include "FWCore/Framework/interface/Event.h"
  5. #include "FWCore/ParameterSet/interface/ParameterSet.h"
  6. #include "DataFormats/VertexReco/interface/Vertex.h"
  7. #include "DataFormats/VertexReco/interface/VertexFwd.h"
  8. #include <vector>
  9. using namespace edm;
  10. using namespace std;
  11. using namespace reco;
  12. class EventVtxInfoNtupleDumper : public edm::EDProducer {
  13. public:
  14. EventVtxInfoNtupleDumper( const edm::ParameterSet & );
  15. private:
  16. void produce( edm::Event &, const edm::EventSetup & ) override;
  17. edm::InputTag primaryVertices_;
  18. };
  19. EventVtxInfoNtupleDumper::EventVtxInfoNtupleDumper( const ParameterSet & cfg ) :
  20. primaryVertices_(cfg.getParameter<InputTag>("primaryVertices")) {
  21. produces<int>( "numPV" ).setBranchAlias( "numPV" );
  22. produces<int>( "nTrkPV" ).setBranchAlias( "nTrkPV" );
  23. produces<float>( "chi2PV" ).setBranchAlias( "chi2PV" );
  24. produces<float>( "ndofPV" ).setBranchAlias( "ndofPV" );
  25. produces<float>( "zPV" ).setBranchAlias( "zPV" );
  26. produces<float>( "rhoPV" ).setBranchAlias( "rhoPV" );
  27. // produces<std::vector< unsigned int > >( "nTrkPV" ).setBranchAlias( "nTrkPV" );
  28. // produces<std::vector< float > >( "chi2PV" ).setBranchAlias( "chi2PV" );
  29. // produces<std::vector< float > >( "ndofPV" ).setBranchAlias( "ndofPV" );
  30. }
  31. void EventVtxInfoNtupleDumper::produce( Event & evt, const EventSetup & ) {
  32. Handle<reco::VertexCollection> primaryVertices; // Collection of primary Vertices
  33. evt.getByLabel(primaryVertices_, primaryVertices);
  34. auto_ptr<int> nVtxs( new int );
  35. auto_ptr<int> nTrkVtx( new int );
  36. auto_ptr<float> chi2Vtx( new float );
  37. auto_ptr<float> ndofVtx( new float );
  38. auto_ptr<float> zVtx( new float );
  39. auto_ptr<float> rhoVtx( new float );
  40. // auto_ptr< vector< unsigned int > > nTrkVtx( new vector< unsigned int > );
  41. // auto_ptr< vector< float > > chi2Vtx( new vector< float > );
  42. // auto_ptr< vector< float > > ndofVtx( new vector< float > );
  43. const reco::Vertex &pv = (*primaryVertices)[0];
  44. *nVtxs = -1;
  45. *nTrkVtx = -1;
  46. *chi2Vtx = -1.0;
  47. *ndofVtx = -1.0;
  48. *zVtx = -1000;
  49. *rhoVtx = -1000;
  50. if( !(pv.isFake()) ) {
  51. *nVtxs = primaryVertices->size();
  52. *nTrkVtx = pv.tracksSize();
  53. *chi2Vtx = pv.chi2();
  54. *ndofVtx = pv.ndof();
  55. *zVtx = pv.z();
  56. *rhoVtx = pv.position().Rho();
  57. }
  58. // nTrkVtx->push_back(pv.tracksSize());
  59. // chi2Vtx->push_back(pv.chi2());
  60. // ndofVtx->push_back(pv.ndof());
  61. evt.put( nVtxs, "numPV" );
  62. evt.put( nTrkVtx, "nTrkPV" );
  63. evt.put( chi2Vtx, "chi2PV" );
  64. evt.put( ndofVtx, "ndofPV" );
  65. evt.put( zVtx, "zPV" );
  66. evt.put( rhoVtx, "rhoPV" );
  67. }
  68. #include "FWCore/Framework/interface/MakerMacros.h"
  69. DEFINE_FWK_MODULE( EventVtxInfoNtupleDumper );