CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
PatVertexAnalyzer.cc
Go to the documentation of this file.
1 #include <iostream>
2 #include <cmath>
3 #include <vector>
4 #include <string>
5 
6 #include <TH1.h>
7 #include <TProfile.h>
8 
16 
18 
25 
27  public:
29  PatVertexAnalyzer(const edm::ParameterSet &params);
31 
32  // virtual methods called from base class EDAnalyzer
33  virtual void beginJob();
34  virtual void analyze(const edm::Event &event, const edm::EventSetup &es);
35 
36  private:
37  // configuration parameters
40 
42  TH1 *x_, *y_, *z_;
43  TH1 *xErr_, *yErr_, *zErr_;
45  TH1 *xPull_, *yPull_, *zPull_;
46 };
47 
49  src_(params.getParameter<edm::InputTag>("src")),
50  genParticles_(params.getParameter<edm::InputTag>("mc"))
51 {
52 }
53 
55 {
56 }
57 
59 {
60  // retrieve handle to auxiliary service
61  // used for storing histograms into ROOT file
63 
64  nVertices_ = fs->make<TH1F>("nVertices", "number of reconstructed primary vertices", 50, 0, 50);
65  nTracks_ = fs->make<TH1F>("nTracks", "number of tracks at primary vertex", 100, 0, 300);
66  x_ = fs->make<TH1F>("pvX", "primary vertex x", 100, -0.1, 0.1);
67  y_ = fs->make<TH1F>("pvY", "primary vertex y", 100, -0.1, 0.1);
68  z_ = fs->make<TH1F>("pvZ", "primary vertex z", 100, -30, 30);
69  xErr_ = fs->make<TH1F>("pvErrorX", "primary vertex x error", 100, 0, 0.005);
70  yErr_ = fs->make<TH1F>("pvErrorY", "primary vertex y error", 100, 0, 0.005);
71  zErr_ = fs->make<TH1F>("pvErrorZ", "primary vertex z error", 100, 0, 0.01);
72  xDelta_ = fs->make<TH1F>("pvDeltaX", "x shift wrt simulated vertex", 100, -0.01, 0.01);
73  yDelta_ = fs->make<TH1F>("pvDeltaY", "y shift wrt simulated vertex", 100, -0.01, 0.01);
74  zDelta_ = fs->make<TH1F>("pvDeltaZ", "z shift wrt simulated vertex", 100, -0.02, 0.02);
75  xPull_ = fs->make<TH1F>("pvPullX", "primary vertex x pull", 100, -5, 5);
76  yPull_ = fs->make<TH1F>("pvPullY", "primary vertex y pull", 100, -5, 5);
77  zPull_ = fs->make<TH1F>("pvPullZ", "primary vertex z pull", 100, -5, 5);
78 }
79 
81 {
82  // handle to the primary vertex collection
84  event.getByLabel(src_, pvHandle);
85 
86  // handle to the generator particles (i.e. the MC truth)
88  event.getByLabel(genParticles_, genParticlesHandle);
89 
90  // extract the position of the simulated vertex
91  math::XYZPoint simPV = (*genParticlesHandle)[2].vertex();
92 
93  // the number of reconstructed primary vertices
94  nVertices_->Fill(pvHandle->size());
95 
96  // if we have at least one, use the first (highest pt^2 sum)
97  if (!pvHandle->empty()) {
98  const reco::Vertex &pv = (*pvHandle)[0];
99 
100  nTracks_->Fill(pv.tracksSize());
101 
102  x_->Fill(pv.x());
103  y_->Fill(pv.y());
104  z_->Fill(pv.z());
105 
106  xErr_->Fill(pv.xError());
107  yErr_->Fill(pv.yError());
108  zErr_->Fill(pv.zError());
109 
110  xDelta_->Fill(pv.x() - simPV.X());
111  yDelta_->Fill(pv.y() - simPV.Y());
112  zDelta_->Fill(pv.z() - simPV.Z());
113 
114  xPull_->Fill((pv.x() - simPV.X()) / pv.xError());
115  yPull_->Fill((pv.y() - simPV.Y()) / pv.yError());
116  zPull_->Fill((pv.z() - simPV.Z()) / pv.zError());
117 
118  // we could access the tracks using the
119  // pv.tracks_begin() ... pv.tracks_end() iterators
120  }
121 }
122 
124 
virtual void beginJob()
double zError() const
error on z
Definition: Vertex.h:105
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
double y() const
y coordinate
Definition: Vertex.h:97
edm::InputTag genParticles_
double z() const
y coordinate
Definition: Vertex.h:99
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
double x() const
x coordinate
Definition: Vertex.h:95
double xError() const
error on x
Definition: Vertex.h:101
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:13
virtual void analyze(const edm::Event &event, const edm::EventSetup &es)
T * make() const
make new ROOT object
PatVertexAnalyzer(const edm::ParameterSet &params)
constructor and destructor
double yError() const
error on y
Definition: Vertex.h:103
size_t tracksSize() const
number of tracks
Definition: Vertex.cc:35