Go to the documentation of this file.00001
00002
00003
00004
00005
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include <memory>
00023 #include <string>
00024 #include <vector>
00025
00026
00027 #include "FWCore/Framework/interface/Frameworkfwd.h"
00028 #include "FWCore/Framework/interface/EDAnalyzer.h"
00029 #include "FWCore/Framework/interface/Event.h"
00030 #include "FWCore/Framework/interface/MakerMacros.h"
00031
00032 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00033 #include "DataFormats/TrackReco/interface/Track.h"
00034 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00035
00036
00037 #include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h"
00038 #include "HepMC/GenEvent.h"
00039 #include "HepMC/GenVertex.h"
00040 #include "HepMC/GenParticle.h"
00041
00042
00043 #include <DataFormats/VertexReco/interface/VertexFwd.h>
00044 #include "RecoVertex/VertexPrimitives/interface/TransientVertex.h"
00045
00046
00047 #include <SimDataFormats/Vertex/interface/SimVertex.h>
00048 #include <SimDataFormats/Vertex/interface/SimVertexContainer.h>
00049 #include <SimDataFormats/Track/interface/SimTrack.h>
00050 #include <SimDataFormats/Track/interface/SimTrackContainer.h>
00051 #include "SimGeneral/HepPDTRecord/interface/ParticleDataTable.h"
00052
00053
00054 #include <TH1.h>
00055 #include <TFile.h>
00056 #include <TDirectory.h>
00057
00058
00059
00060
00061 class PrimaryVertexAnalyzer : public edm::EDAnalyzer {
00062
00063
00064
00065 class simPrimaryVertex {
00066 public:
00067 simPrimaryVertex(double x1,double y1,double z1):x(x1),y(y1),z(z1),ptsq(0),nGenTrk(0){};
00068 double x,y,z;
00069 HepMC::FourVector ptot;
00070
00071 double ptsq;
00072 int nGenTrk;
00073 std::vector<int> finalstateParticles;
00074 std::vector<int> simTrackIndex;
00075 std::vector<int> genVertex;
00076 const reco::Vertex *recVtx;
00077 };
00078
00079
00080
00081 public:
00082 explicit PrimaryVertexAnalyzer(const edm::ParameterSet&);
00083 ~PrimaryVertexAnalyzer();
00084
00085 virtual void analyze(const edm::Event&, const edm::EventSetup&);
00086 virtual void beginJob();
00087 virtual void endJob();
00088
00089 private:
00090
00091 bool matchVertex(const simPrimaryVertex &vsim,
00092 const reco::Vertex &vrec);
00093 bool isResonance(const HepMC::GenParticle * p);
00094 bool isFinalstateParticle(const HepMC::GenParticle * p);
00095 bool isCharged(const HepMC::GenParticle * p);
00096
00097 void printRecVtxs(const edm::Handle<reco::VertexCollection> recVtxs);
00098 void printSimVtxs(const edm::Handle<edm::SimVertexContainer> simVtxs);
00099 void printSimTrks(const edm::Handle<edm::SimTrackContainer> simVtrks);
00100 std::vector<simPrimaryVertex> getSimPVs(const edm::Handle<edm::HepMCProduct> evtMC, std::string suffix);
00101 std::vector<simPrimaryVertex> getSimPVs(const edm::Handle<edm::HepMCProduct> evt,
00102 const edm::Handle<edm::SimVertexContainer> simVtxs,
00103 const edm::Handle<edm::SimTrackContainer> simTrks);
00104
00105 std::string recoTrackProducer_;
00106 std::string outputFile_;
00107 std::vector<std::string> vtxSample_;
00108 std::vector<std::string> suffixSample_;
00109 TFile* rootFile_;
00110 bool verbose_;
00111 edm::InputTag simG4_;
00112 double simUnit_;
00113 edm::ESHandle < ParticleDataTable > pdt;
00114
00115
00116 std::map<std::string, TH1*> h;
00117 std::map<std::string, TDirectory*> hdir;
00118
00119 };
00120