CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
KVFTest.cc
Go to the documentation of this file.
2 
12 #include <iostream>
13 #include <memory>
14 
15 using namespace reco;
16 using namespace edm;
17 using namespace std;
18 
20  : estoken_MF(esConsumes()),
21  estoken_TTB(esConsumes(edm::ESInputTag("", "TransientTrackBuilder"))),
22  theConfig(iConfig) {
23  token_tracks = consumes<TrackCollection>(iConfig.getParameter<string>("TrackLabel"));
24  outputFile_ = iConfig.getUntrackedParameter<std::string>("outputFile");
25  kvfPSet = iConfig.getParameter<edm::ParameterSet>("KVFParameters");
26  rootFile_ = TFile::Open(outputFile_.c_str(), "RECREATE");
27  edm::LogInfo("RecoVertex/KVFTest") << "Initializing KVF TEST analyser - Output file: " << outputFile_ << "\n";
28 
29  token_TrackTruth = consumes<TrackingParticleCollection>(edm::InputTag("trackingtruth", "TrackTruth"));
30  token_VertexTruth = consumes<TrackingVertexCollection>(edm::InputTag("trackingtruth", "VertexTruth"));
32  consumes<reco::TrackToTrackingParticleAssociator>(edm::InputTag("trackAssociatorByChi2"));
33 }
34 
36 
38 
39 void KVFTest::endJob() {}
40 
41 //
42 // member functions
43 //
44 
45 void KVFTest::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) {
47  iEvent.getByToken(token_associatorForParamAtPca, associatorForParamAtPca);
48 
49  if (not tree) {
50  tree = std::make_unique<SimpleVertexTree>("VertexFitter", &iSetup.getData(estoken_MF));
51  }
52 
53  edm::LogInfo("RecoVertex/KVFTest") << "Reconstructing event number: " << iEvent.id() << "\n";
54 
55  // get RECO tracks from the event
56  // `tks` can be used as a ptr to a reco::TrackCollection
58  iEvent.getByToken(token_tracks, tks);
59  if (!tks.isValid()) {
60  edm::LogInfo("RecoVertex/KVFTest") << "Exception during event number: " << iEvent.id() << "\n";
61  } else {
62  edm::LogInfo("RecoVertex/KVFTest") << "Found: " << (*tks).size() << " reconstructed tracks"
63  << "\n";
64  edm::LogPrint("RecoVertex/KVFTest") << "got " << (*tks).size() << " tracks " << std::endl;
65 
66  // Transform Track to TransientTrack
67 
68  //get the builder:
69  const auto& theB = &iSetup.getData(estoken_TTB);
70  //do the conversion:
71  std::vector<TransientTrack> t_tks = theB->build(tks);
72 
73  edm::LogInfo("RecoVertex/KVFTest") << "Found: " << t_tks.size() << " reconstructed tracks"
74  << "\n";
75 
76  // Call the KalmanVertexFitter if more than 1 track
77  if (t_tks.size() > 1) {
78  // KalmanVertexFitter kvf(kvfPSet);
79  KalmanVertexFitter kvf(true);
80  TransientVertex tv = kvf.vertex(t_tks);
81 
82  edm::LogPrint("RecoVertex/KVFTest") << "Position: " << Vertex::Point(tv.position()) << "\n";
83 
84  // For the analysis: compare to your SimVertex
85  TrackingVertex sv = getSimVertex(iEvent);
87  iEvent.getByToken(token_TrackTruth, TPCollectionH);
88  if (!TPCollectionH.isValid()) {
89  edm::LogInfo("RecoVertex/KVFTest") << "Exception during event number: " << iEvent.id() << "\n";
90  } else {
91  const TrackingParticleCollection tPC = *(TPCollectionH.product());
92  reco::RecoToSimCollection recSimColl = associatorForParamAtPca->associateRecoToSim(tks, TPCollectionH);
93  tree->fill(tv, &sv, &recSimColl);
94  }
95  }
96  }
97 }
98 
99 //Returns the first vertex in the list.
100 
102  // get the simulated vertices
104  iEvent.getByToken(token_VertexTruth, TVCollectionH);
105  const TrackingVertexCollection tPC = *(TVCollectionH.product());
106 
107  // Handle<edm::SimVertexContainer> simVtcs;
108  // iEvent.getByLabel("g4SimHits", simVtcs);
109  // std::cout << "SimVertex " << simVtcs->size() << std::endl;
110  // for(edm::SimVertexContainer::const_iterator v=simVtcs->begin();
111  // v!=simVtcs->end(); ++v){
112  // std::cout << "simvtx "
113  // << v->position().x() << " "
114  // << v->position().y() << " "
115  // << v->position().z() << " "
116  // << v->parentIndex() << " "
117  // << v->noParent() << " "
118  // << std::endl;
119  // }
120  return *(tPC.begin());
121 }
std::string outputFile_
Definition: KVFTest.h:59
T getUntrackedParameter(std::string const &, T const &) const
const edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > estoken_MF
Definition: KVFTest.h:51
TrackingVertex getSimVertex(const edm::Event &iEvent) const
Definition: KVFTest.cc:101
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:539
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
edm::EDGetTokenT< reco::TrackCollection > token_tracks
Definition: KVFTest.h:60
edm::EDGetTokenT< reco::TrackToTrackingParticleAssociator > token_associatorForParamAtPca
Definition: KVFTest.h:63
CachingVertex< 5 > vertex(const std::vector< reco::TransientTrack > &tracks) const override
bool getData(T &iHolder) const
Definition: EventSetup.h:122
edm::EDGetTokenT< TrackingParticleCollection > token_TrackTruth
Definition: KVFTest.h:61
int iEvent
Definition: GenABIO.cc:224
const edm::ESGetToken< TransientTrackBuilder, TransientTrackRecord > estoken_TTB
Definition: KVFTest.h:52
GlobalPoint position() const
math::XYZPoint Point
void analyze(const edm::Event &, const edm::EventSetup &) override
Definition: KVFTest.cc:45
TFile * rootFile_
Definition: KVFTest.h:57
bool isValid() const
Definition: HandleBase.h:70
Log< level::Warning, true > LogPrint
~KVFTest() override
Definition: KVFTest.cc:35
Log< level::Info, false > LogInfo
std::unique_ptr< SimpleVertexTree > tree
Definition: KVFTest.h:56
T const * product() const
Definition: Handle.h:70
edm::EDGetTokenT< TrackingVertexCollection > token_VertexTruth
Definition: KVFTest.h:62
void beginJob() override
Definition: KVFTest.cc:37
std::vector< TrackingVertex > TrackingVertexCollection
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
KVFTest(const edm::ParameterSet &)
Definition: KVFTest.cc:19
edm::EventID id() const
Definition: EventBase.h:59
void endJob() override
Definition: KVFTest.cc:39
edm::ParameterSet kvfPSet
Definition: KVFTest.h:55
std::vector< TrackingParticle > TrackingParticleCollection
ESGetTokenH3DDVariant esConsumes(std::string const &Reccord, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283