6 #include <Math/Functions.h> 7 #include <Math/SMatrix.h> 8 #include <Math/SVector.h> 24 #include "Math/VectorUtil.h" 27 #include <Math/GenVector/PxPyPzE4D.h> 28 #include <Math/GenVector/PxPyPzM4D.h> 43 void endJob()
override;
85 : classifier_(config, consumesCollector()) {
117 "Frequency for the different track categories",
120 numberVertexClassifier_ - 0.5);
123 TH1Index_[
"rs_All_MatchQuality"] =
fs_->
make<TH1D>(
"rs_All_MatchQuality",
"Quality of Match", 51, -0.01, 1.01);
125 fs_->
make<TH1D>(
"rs_All_FlightDistance2d",
"Transverse flight distance [cm]", 100, 0, 5);
126 TH1Index_[
"rs_SecondaryVertex_FlightDistance2d"] =
127 fs_->
make<TH1D>(
"rs_SecondaryVertex_FlightDistance2d",
"Transverse flight distance [cm]", 100, 0, 5);
128 TH1Index_[
"rs_BSV_FlightDistance2d"] =
129 fs_->
make<TH1D>(
"rs_BSV_FlightDistance2d",
"Transverse flight distance [cm]", 100, 0, 5);
130 TH1Index_[
"rs_BWeakDecay_FlightDistance2d"] =
131 fs_->
make<TH1D>(
"rs_BWeakDecay_FlightDistance2d",
"Transverse flight distance [cm]", 100, 0, 5);
132 TH1Index_[
"rs_CWeakDecay_FlightDistance2d"] =
133 fs_->
make<TH1D>(
"rs_CWeakDecay_FlightDistance2d",
"Transverse flight distance [cm]", 100, 0, 5);
134 TH1Index_[
"rs_Light_FlightDistance2d"] =
135 fs_->
make<TH1D>(
"rs_Light_FlightDistance2d",
"Transverse flight distance [cm]", 100, 0, 5);
137 TH1Index_[
"rs_All_nRecVtx"] =
fs_->
make<TH1D>(
"rs_All_nRecVtx",
"Number of Vertices per event", 11, -0.5, 10.5);
138 TH1Index_[
"rs_SecondaryVertex_nRecVtx"] =
139 fs_->
make<TH1D>(
"rs_SecondaryVertex_nRecVtx",
"Number of Vertices per event", 11, -0.5, 10.5);
140 TH1Index_[
"rs_BSV_nRecVtx"] =
fs_->
make<TH1D>(
"rs_BSV_nRecVtx",
"Number of Vertices per event", 11, -0.5, 10.5);
141 TH1Index_[
"rs_BWeakDecay_nRecVtx"] =
142 fs_->
make<TH1D>(
"rs_BWeakDecay_nRecVtx",
"Number of Vertices per event", 11, -0.5, 10.5);
143 TH1Index_[
"rs_CWeakDecay_nRecVtx"] =
144 fs_->
make<TH1D>(
"rs_CWeakDecay_nRecVtx",
"Number of Vertices per event", 11, -0.5, 10.5);
145 TH1Index_[
"rs_Light_nRecVtx"] =
fs_->
make<TH1D>(
"rs_Light_nRecVtx",
"Number of Vertices per event", 11, -0.5, 10.5);
148 TH1Index_[
"sr_All_MatchQuality"] =
fs_->
make<TH1D>(
"sr_All_MatchQuality",
"Quality of Match", 51, -0.01, 1.01);
149 TH1Index_[
"sr_All_nRecVtx"] =
fs_->
make<TH1D>(
"sr_All_nRecVtx",
"Number of Vertices per event", 11, -0.5, 10.5);
150 TH1Index_[
"sr_SecondaryVertex_nRecVtx"] =
151 fs_->
make<TH1D>(
"sr_SecondaryVertex_nRecVtx",
"Number of Vertices per event", 11, -0.5, 10.5);
152 TH1Index_[
"sr_BSV_nRecVtx"] =
fs_->
make<TH1D>(
"sr_BSV_nRecVtx",
"Number of Vertices per event", 11, -0.5, 10.5);
153 TH1Index_[
"sr_BWeakDecay_nRecVtx"] =
154 fs_->
make<TH1D>(
"sr_BWeakDecay_nRecVtx",
"Number of Vertices per event", 11, -0.5, 10.5);
155 TH1Index_[
"sr_CWeakDecay_nRecVtx"] =
156 fs_->
make<TH1D>(
"sr_CWeakDecay_nRecVtx",
"Number of Vertices per event", 11, -0.5, 10.5);
157 TH1Index_[
"sr_Light_nRecVtx"] =
fs_->
make<TH1D>(
"sr_Light_nRecVtx",
"Number of Vertices per event", 11, -0.5, 10.5);
182 std::cout <<
"*** Analyzing " <<
event.id() <<
" n_event = " <<
n_event << std::endl << std::endl;
194 cout <<
"* Event " <<
n_event <<
" ; svTagInfoCollection->size() = " << svTagInfoCollection->size() << endl;
213 for (std::size_t
index = 0;
index < svTagInfoCollection->size(); ++
index) {
217 for (std::size_t vindex = 0; vindex < svTagInfo->nVertices(); ++vindex) {
222 double rs_quality = tracer.
quality();
231 cout <<
"R2S: MatchQuality = " << rs_quality << endl;
233 TH1Index_[
"rs_All_MatchQuality"]->Fill(rs_quality);
235 TH1Index_[
"rs_All_FlightDistance2d"]->Fill(svTagInfo->flightDistance(vindex,
true).value());
241 TH1Index_[
"rs_SecondaryVertex_FlightDistance2d"]->Fill(svTagInfo->flightDistance(vindex,
true).value());
248 TH1Index_[
"rs_BWeakDecay_FlightDistance2d"]->Fill(svTagInfo->flightDistance(vindex,
true).value());
255 TH1Index_[
"rs_BSV_FlightDistance2d"]->Fill(svTagInfo->flightDistance(vindex,
true).value());
263 TH1Index_[
"rs_CWeakDecay_FlightDistance2d"]->Fill(svTagInfo->flightDistance(vindex,
true).value());
269 TH1Index_[
"rs_Light_FlightDistance2d"]->Fill(svTagInfo->flightDistance(vindex,
true).value());
275 cout <<
" VertexCategories::Fake!!" << endl;
283 TH1Index_[
"rs_All_nRecVtx"]->Fill(rs_nall);
284 TH1Index_[
"rs_SecondaryVertex_nRecVtx"]->Fill(rs_nsv);
285 TH1Index_[
"rs_BWeakDecay_nRecVtx"]->Fill(rs_nbv);
286 TH1Index_[
"rs_BSV_nRecVtx"]->Fill(rs_nbsv);
287 TH1Index_[
"rs_CWeakDecay_nRecVtx"]->Fill(rs_ncv);
288 TH1Index_[
"rs_Light_nRecVtx"]->Fill(rs_nlv);
304 double sr_quality = tracer.
quality();
307 cout <<
"S2R: MatchQuality = " << sr_quality << endl;
310 TH1Index_[
"sr_All_MatchQuality"]->Fill(sr_quality);
356 TH1Index_[
"sr_All_nRecVtx"]->Fill(sr_nall);
357 TH1Index_[
"sr_SecondaryVertex_nRecVtx"]->Fill(sr_nsv);
358 TH1Index_[
"sr_BWeakDecay_nRecVtx"]->Fill(sr_nbv);
359 TH1Index_[
"sr_BSV_nRecVtx"]->Fill(sr_nbsv);
360 TH1Index_[
"sr_CWeakDecay_nRecVtx"]->Fill(sr_ncv);
361 TH1Index_[
"sr_Light_nRecVtx"]->Fill(rs_nlv);
385 name = prefix +
"_Pully";
387 name = prefix +
"_Pullz";
390 name = prefix +
"_Resx";
392 name = prefix +
"_Resy";
394 name = prefix +
"_Resz";
397 name = prefix +
"_Chi2Norm";
399 name = prefix +
"_Chi2Prob";
402 name = prefix +
"_nRecTrks";
405 name = prefix +
"_AverageTrackWeight";
408 name = prefix +
"_Mass";
411 name = prefix +
"_RecPt";
414 name = prefix +
"_RecEta";
417 name = prefix +
"_RecCharge";
420 name = prefix +
"_RecTrackPt";
423 name = prefix +
"_RecTrackEta";
426 name = prefix +
"_nSimTrks";
429 name = prefix +
"_SimPt";
432 name = prefix +
"_SimEta";
435 name = prefix +
"_SimCharge";
438 name = prefix +
"_SimTrackPt";
441 name = prefix +
"_SimTrackEta";
450 name = prefix +
"_Pully";
452 name = prefix +
"_Pullz";
455 name = prefix +
"_Resx";
457 name = prefix +
"_Resy";
459 name = prefix +
"_Resz";
462 name = prefix +
"_Chi2Norm";
464 name = prefix +
"_Chi2Prob";
467 name = prefix +
"_nRecTrks";
470 name = prefix +
"_AverageTrackWeight";
473 name = prefix +
"_Mass";
476 name = prefix +
"_RecPt";
479 name = prefix +
"_RecEta";
482 name = prefix +
"_RecCharge";
485 name = prefix +
"_RecTrackPt";
488 name = prefix +
"_RecTrackEta";
491 name = prefix +
"_nSimTrks";
494 name = prefix +
"_SimPt";
497 name = prefix +
"_SimEta";
500 name = prefix +
"_SimCharge";
503 name = prefix +
"_SimTrackPt";
506 name = prefix +
"_SimTrackEta";
513 double pullx = (vertex.
x() - simVertex->position().x()) / vertex.
xError();
514 double pully = (vertex.
y() - simVertex->position().y()) / vertex.
yError();
515 double pullz = (vertex.
z() - simVertex->position().z()) / vertex.
zError();
517 double resx = vertex.
x() - simVertex->position().x();
518 double resy = vertex.
y() - simVertex->position().y();
519 double resz = vertex.
z() - simVertex->position().z();
524 double sum_weight = 0.;
530 double thePiMass = 0.13957;
533 ROOT::Math::LorentzVector<ROOT::Math::PxPyPzM4D<double>> vec;
535 vec.SetPx((**recDaughter).px());
536 vec.SetPy((**recDaughter).py());
537 vec.SetPz((**recDaughter).pz());
546 p = (**recDaughter).momentum();
549 charge += (*recDaughter)->charge();
551 TH1Index_[prefix +
"_RecTrackPt"]->Fill((*recDaughter)->pt());
552 TH1Index_[prefix +
"_RecTrackEta"]->Fill((*recDaughter)->eta());
557 double mass = sum.M();
558 double pt =
sqrt(momentum.Perp2());
559 double eta = momentum.Eta();
564 simDaughter != simVertex->daughterTracks_end();
567 p = (**simDaughter).momentum();
570 simcharge += (*simDaughter)->charge();
572 TH1Index_[prefix +
"_SimTrackPt"]->Fill((*simDaughter)->pt());
573 TH1Index_[prefix +
"_SimTrackEta"]->Fill((*simDaughter)->eta());
576 double simpt =
sqrt(simmomentum.Perp2());
577 double simeta = simmomentum.Eta();
584 TH1Index_[prefix +
"_nSimTrks"]->Fill(simVertex->nDaughterTracks());
585 TH1Index_[prefix +
"_Pullx"]->Fill(pullx);
586 TH1Index_[prefix +
"_Pully"]->Fill(pully);
587 TH1Index_[prefix +
"_Pullz"]->Fill(pullz);
591 TH1Index_[prefix +
"_AverageTrackWeight"]->Fill(sum_weight / tracksize);
592 TH1Index_[prefix +
"_Chi2Norm"]->Fill(chi2norm);
593 TH1Index_[prefix +
"_Chi2Prob"]->Fill(chi2prob);
595 TH1Index_[prefix +
"_RecEta"]->Fill(eta);
596 TH1Index_[prefix +
"_RecCharge"]->Fill(charge);
598 TH1Index_[prefix +
"_SimPt"]->Fill(simpt);
599 TH1Index_[prefix +
"_SimEta"]->Fill(simeta);
600 TH1Index_[prefix +
"_SimCharge"]->Fill(simcharge);
606 double pullx = (vertex->
x() - simVertex->position().x()) / vertex->
xError();
607 double pully = (vertex->
y() - simVertex->position().y()) / vertex->
yError();
608 double pullz = (vertex->
z() - simVertex->position().z()) / vertex->
zError();
610 double resx = vertex->
x() - simVertex->position().x();
611 double resy = vertex->
y() - simVertex->position().y();
612 double resz = vertex->
z() - simVertex->position().z();
617 double sum_weight = 0.;
623 double thePiMass = 0.13957;
626 ROOT::Math::LorentzVector<ROOT::Math::PxPyPzM4D<double>> vec;
628 vec.SetPx((**recDaughter).px());
629 vec.SetPy((**recDaughter).py());
630 vec.SetPz((**recDaughter).pz());
639 p = (**recDaughter).momentum();
642 charge += (*recDaughter)->charge();
644 TH1Index_[prefix +
"_RecTrackPt"]->Fill((*recDaughter)->pt());
645 TH1Index_[prefix +
"_RecTrackEta"]->Fill((*recDaughter)->eta());
650 double mass = sum.M();
651 double pt =
sqrt(momentum.Perp2());
652 double eta = momentum.Eta();
657 simDaughter != simVertex->daughterTracks_end();
660 p = (**simDaughter).momentum();
663 simcharge += (*simDaughter)->charge();
665 TH1Index_[prefix +
"_SimTrackPt"]->Fill((*simDaughter)->pt());
666 TH1Index_[prefix +
"_SimTrackEta"]->Fill((*simDaughter)->eta());
669 double simpt =
sqrt(simmomentum.Perp2());
670 double simeta = simmomentum.Eta();
677 TH1Index_[prefix +
"_nSimTrks"]->Fill(simVertex->nDaughterTracks());
678 TH1Index_[prefix +
"_Pullx"]->Fill(pullx);
679 TH1Index_[prefix +
"_Pully"]->Fill(pully);
680 TH1Index_[prefix +
"_Pullz"]->Fill(pullz);
684 TH1Index_[prefix +
"_AverageTrackWeight"]->Fill(sum_weight / tracksize);
685 TH1Index_[prefix +
"_Chi2Norm"]->Fill(chi2norm);
686 TH1Index_[prefix +
"_Chi2Prob"]->Fill(chi2prob);
688 TH1Index_[prefix +
"_RecEta"]->Fill(eta);
689 TH1Index_[prefix +
"_RecCharge"]->Fill(charge);
691 TH1Index_[prefix +
"_SimPt"]->Fill(simpt);
692 TH1Index_[prefix +
"_SimEta"]->Fill(simeta);
693 TH1Index_[prefix +
"_SimCharge"]->Fill(simcharge);
698 std::cout <<
" ====== Total Number of analyzed events: " <<
n_event <<
" ====== " << std::endl;
700 std::cout <<
" ====== Total Number of R2S SecondaryVertex: " <<
rs_total_nsv <<
" ====== " << std::endl;
702 std::cout <<
" ====== Total Number of R2S BWeakDecay::SecondaryVertex: " <<
rs_total_nbsv <<
" ====== " << std::endl;
707 std::cout <<
" ====== Total Number of S2R SecondaryVertex: " <<
sr_total_nsv <<
" ====== " << std::endl;
709 std::cout <<
" ====== Total Number of S2R BWeakDecay::SecondaryVertex: " <<
sr_total_nbsv <<
" ====== " << std::endl;
713 std::cout <<
" ====== Total Number of Fake Vertices: " <<
total_nfake <<
" ====== " << std::endl;
This class traces the simulated and generated history of a given track.
T getUntrackedParameter(std::string const &, T const &) const
VertexHistory const & history() const
Returns a reference to the vertex history used in the classification.
trackRef_iterator tracks_end() const
last iterator over tracks
double zError() const
error on z
double y() const
y coordinate
def setup(process, global_tag, zero_tesla=False)
T * make(const Args &...args) const
make new ROOT object
const reco::VertexBaseRef & recoVertex() const
Return a reference to the reconstructed track.
void fillRecoToSim(std::string const &, reco::Vertex const &, TrackingVertexRef const &)
edm::Service< TFileService > fs_
example_stream void analyze(const edm::Event &, const edm::EventSetup &) override
void newEvent(edm::Event const &event, edm::EventSetup const &config) override
Pre-process event information (for accessing reconstraction information).
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
Int_t numberVertexClassifier_
#define DEFINE_FWK_MODULE(type)
edm::InputTag svTagInfoProducer_
Category
Categories available to vertexes.
void bookSimToReco(std::string const &)
std::map< std::string, TH1D * > TH1Index_
double chi2() const
chi-squares
double z() const
z coordinate
float ChiSquaredProbability(double chiSquared, double nrDOF)
float trackWeight(const TREF &r) const
returns the weight with which a Track has contributed to the vertex-fit.
bool is(Category category) const
Returns track flag for a given category.
const TrackingVertexRef & simVertex() const
Return the initial tracking vertex from the history.
void bookRecoToSim(std::string const &)
double x() const
x coordinate
double xError() const
error on x
XYZVectorD XYZVector
spatial vector with cartesian internal representation
VertexClassifierByProxy< Collection > const & evaluate(TrackingVertexRef const &vertex)
Classify the TrackingVertex in categories.
void fillSimToReco(std::string const &, reco::VertexBaseRef const &, TrackingVertexRef const &)
VertexClassifierByProxy< reco::SecondaryVertexTagInfoCollection > classifier_
std::vector< TrackBaseRef >::const_iterator trackRef_iterator
The iteratator for the vector<TrackRef>
double normalizedChi2() const
chi-squared divided by n.d.o.f.
double quality() const
Return the quality of the match.
static const char *const Names[]
Name of the different categories.
SVTagInfoValidationAnalyzer(const edm::ParameterSet &)
trackRef_iterator tracks_begin() const
first iterator over tracks
void analyze(const edm::Event &, const edm::EventSetup &) override
edm::InputTag trackingTruth_
double yError() const
error on y
size_t tracksSize() const
number of tracks