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;
89 : classifier_(config, consumesCollector()) {
122 "Frequency for the different track categories",
128 HistIndex_[
"rs_All_MatchQuality"] =
dqmStore_->book1D(
"rs_All_MatchQuality",
"Quality of Match", 51, -0.01, 1.01);
130 dqmStore_->book1D(
"rs_All_FlightDistance2d",
"Transverse flight distance [cm]", 100, 0, 5);
131 HistIndex_[
"rs_SecondaryVertex_FlightDistance2d"] =
132 dqmStore_->book1D(
"rs_SecondaryVertex_FlightDistance2d",
"Transverse flight distance [cm]", 100, 0, 5);
134 dqmStore_->book1D(
"rs_BSV_FlightDistance2d",
"Transverse flight distance [cm]", 100, 0, 5);
135 HistIndex_[
"rs_BWeakDecay_FlightDistance2d"] =
136 dqmStore_->book1D(
"rs_BWeakDecay_FlightDistance2d",
"Transverse flight distance [cm]", 100, 0, 5);
137 HistIndex_[
"rs_CWeakDecay_FlightDistance2d"] =
138 dqmStore_->book1D(
"rs_CWeakDecay_FlightDistance2d",
"Transverse flight distance [cm]", 100, 0, 5);
140 dqmStore_->book1D(
"rs_Light_FlightDistance2d",
"Transverse flight distance [cm]", 100, 0, 5);
142 HistIndex_[
"rs_All_nRecVtx"] =
dqmStore_->book1D(
"rs_All_nRecVtx",
"Number of Vertices per event", 11, -0.5, 10.5);
144 dqmStore_->book1D(
"rs_SecondaryVertex_nRecVtx",
"Number of Vertices per event", 11, -0.5, 10.5);
145 HistIndex_[
"rs_BSV_nRecVtx"] =
dqmStore_->book1D(
"rs_BSV_nRecVtx",
"Number of Vertices per event", 11, -0.5, 10.5);
147 dqmStore_->book1D(
"rs_BWeakDecay_nRecVtx",
"Number of Vertices per event", 11, -0.5, 10.5);
149 dqmStore_->book1D(
"rs_CWeakDecay_nRecVtx",
"Number of Vertices per event", 11, -0.5, 10.5);
151 dqmStore_->book1D(
"rs_Light_nRecVtx",
"Number of Vertices per event", 11, -0.5, 10.5);
154 HistIndex_[
"sr_All_MatchQuality"] =
dqmStore_->book1D(
"sr_All_MatchQuality",
"Quality of Match", 51, -0.01, 1.01);
155 HistIndex_[
"sr_All_nRecVtx"] =
dqmStore_->book1D(
"sr_All_nRecVtx",
"Number of Vertices per event", 11, -0.5, 10.5);
157 dqmStore_->book1D(
"sr_SecondaryVertex_nRecVtx",
"Number of Vertices per event", 11, -0.5, 10.5);
158 HistIndex_[
"sr_BSV_nRecVtx"] =
dqmStore_->book1D(
"sr_BSV_nRecVtx",
"Number of Vertices per event", 11, -0.5, 10.5);
160 dqmStore_->book1D(
"sr_BWeakDecay_nRecVtx",
"Number of Vertices per event", 11, -0.5, 10.5);
162 dqmStore_->book1D(
"sr_CWeakDecay_nRecVtx",
"Number of Vertices per event", 11, -0.5, 10.5);
164 dqmStore_->book1D(
"sr_Light_nRecVtx",
"Number of Vertices per event", 11, -0.5, 10.5);
189 std::cout <<
"*** Analyzing " <<
event.id() <<
" n_event = " <<
n_event << std::endl << std::endl;
196 event.getByToken(
svInfoToken, svTagInfoCollection);
200 cout <<
"* Event " <<
n_event <<
" ; svTagInfoCollection->size() = " << svTagInfoCollection->size() << endl;
219 for (std::size_t
index = 0;
index < svTagInfoCollection->size(); ++
index) {
223 for (std::size_t vindex = 0; vindex < svTagInfo->nVertices(); ++vindex) {
228 double rs_quality = tracer.
quality();
237 HistIndex_[
"rs_All_MatchQuality"]->Fill(rs_quality);
239 HistIndex_[
"rs_All_FlightDistance2d"]->Fill(svTagInfo->flightDistance(vindex,
true).value());
244 HistIndex_[
"rs_SecondaryVertex_FlightDistance2d"]->Fill(svTagInfo->flightDistance(vindex,
true).value());
250 HistIndex_[
"rs_BWeakDecay_FlightDistance2d"]->Fill(svTagInfo->flightDistance(vindex,
true).value());
255 HistIndex_[
"rs_BSV_FlightDistance2d"]->Fill(svTagInfo->flightDistance(vindex,
true).value());
262 HistIndex_[
"rs_CWeakDecay_FlightDistance2d"]->Fill(svTagInfo->flightDistance(vindex,
true).value());
267 HistIndex_[
"rs_Light_FlightDistance2d"]->Fill(svTagInfo->flightDistance(vindex,
true).value());
273 cout <<
" VertexCategories::Fake!!" << endl;
282 HistIndex_[
"rs_SecondaryVertex_nRecVtx"]->Fill(rs_nsv);
283 HistIndex_[
"rs_BWeakDecay_nRecVtx"]->Fill(rs_nbv);
285 HistIndex_[
"rs_CWeakDecay_nRecVtx"]->Fill(rs_ncv);
294 event.getByToken(
tvToken, TVCollection);
301 double sr_quality = tracer.
quality();
304 HistIndex_[
"sr_All_MatchQuality"]->Fill(sr_quality);
343 HistIndex_[
"sr_SecondaryVertex_nRecVtx"]->Fill(sr_nsv);
344 HistIndex_[
"sr_BWeakDecay_nRecVtx"]->Fill(sr_nbv);
346 HistIndex_[
"sr_CWeakDecay_nRecVtx"]->Fill(sr_ncv);
371 name = prefix +
"_Pully";
373 name = prefix +
"_Pullz";
376 name = prefix +
"_Resx";
378 name = prefix +
"_Resy";
380 name = prefix +
"_Resz";
383 name = prefix +
"_Chi2Norm";
385 name = prefix +
"_Chi2Prob";
388 name = prefix +
"_nRecTrks";
391 name = prefix +
"_AverageTrackWeight";
394 name = prefix +
"_Mass";
397 name = prefix +
"_RecPt";
400 name = prefix +
"_RecEta";
403 name = prefix +
"_RecCharge";
406 name = prefix +
"_RecTrackPt";
409 name = prefix +
"_RecTrackEta";
412 name = prefix +
"_nSimTrks";
415 name = prefix +
"_SimPt";
418 name = prefix +
"_SimEta";
421 name = prefix +
"_SimCharge";
424 name = prefix +
"_SimTrackPt";
427 name = prefix +
"_SimTrackEta";
436 name = prefix +
"_Pully";
438 name = prefix +
"_Pullz";
441 name = prefix +
"_Resx";
443 name = prefix +
"_Resy";
445 name = prefix +
"_Resz";
448 name = prefix +
"_Chi2Norm";
450 name = prefix +
"_Chi2Prob";
453 name = prefix +
"_nRecTrks";
456 name = prefix +
"_AverageTrackWeight";
459 name = prefix +
"_Mass";
462 name = prefix +
"_RecPt";
465 name = prefix +
"_RecEta";
468 name = prefix +
"_RecCharge";
471 name = prefix +
"_RecTrackPt";
474 name = prefix +
"_RecTrackEta";
477 name = prefix +
"_nSimTrks";
480 name = prefix +
"_SimPt";
483 name = prefix +
"_SimEta";
486 name = prefix +
"_SimCharge";
489 name = prefix +
"_SimTrackPt";
492 name = prefix +
"_SimTrackEta";
499 double pullx = (vertex.
x() - simVertex->position().x()) / vertex.
xError();
500 double pully = (vertex.
y() - simVertex->position().y()) / vertex.
yError();
501 double pullz = (vertex.
z() - simVertex->position().z()) / vertex.
zError();
503 double resx = vertex.
x() - simVertex->position().x();
504 double resy = vertex.
y() - simVertex->position().y();
505 double resz = vertex.
z() - simVertex->position().z();
510 double sum_weight = 0.;
516 double thePiMass = 0.13957;
519 ROOT::Math::LorentzVector<ROOT::Math::PxPyPzM4D<double>> vec;
521 vec.SetPx((**recDaughter).px());
522 vec.SetPy((**recDaughter).py());
523 vec.SetPz((**recDaughter).pz());
532 p = (**recDaughter).momentum();
535 charge += (*recDaughter)->charge();
537 HistIndex_[prefix +
"_RecTrackPt"]->Fill((*recDaughter)->pt());
538 HistIndex_[prefix +
"_RecTrackEta"]->Fill((*recDaughter)->eta());
543 double mass = sum.M();
544 double pt =
sqrt(momentum.Perp2());
545 double eta = momentum.Eta();
550 simDaughter != simVertex->daughterTracks_end();
553 p = (**simDaughter).momentum();
556 simcharge += (*simDaughter)->charge();
558 HistIndex_[prefix +
"_SimTrackPt"]->Fill((*simDaughter)->pt());
559 HistIndex_[prefix +
"_SimTrackEta"]->Fill((*simDaughter)->eta());
562 double simpt =
sqrt(simmomentum.Perp2());
563 double simeta = simmomentum.Eta();
570 HistIndex_[prefix +
"_nSimTrks"]->Fill(simVertex->nDaughterTracks());
577 HistIndex_[prefix +
"_AverageTrackWeight"]->Fill(sum_weight / tracksize);
578 HistIndex_[prefix +
"_Chi2Norm"]->Fill(chi2norm);
579 HistIndex_[prefix +
"_Chi2Prob"]->Fill(chi2prob);
582 HistIndex_[prefix +
"_RecCharge"]->Fill(charge);
586 HistIndex_[prefix +
"_SimCharge"]->Fill(simcharge);
592 double pullx = (vertex->
x() - simVertex->position().x()) / vertex->
xError();
593 double pully = (vertex->
y() - simVertex->position().y()) / vertex->
yError();
594 double pullz = (vertex->
z() - simVertex->position().z()) / vertex->
zError();
596 double resx = vertex->
x() - simVertex->position().x();
597 double resy = vertex->
y() - simVertex->position().y();
598 double resz = vertex->
z() - simVertex->position().z();
603 double sum_weight = 0.;
609 double thePiMass = 0.13957;
612 ROOT::Math::LorentzVector<ROOT::Math::PxPyPzM4D<double>> vec;
614 vec.SetPx((**recDaughter).px());
615 vec.SetPy((**recDaughter).py());
616 vec.SetPz((**recDaughter).pz());
625 p = (**recDaughter).momentum();
628 charge += (*recDaughter)->charge();
630 HistIndex_[prefix +
"_RecTrackPt"]->Fill((*recDaughter)->pt());
631 HistIndex_[prefix +
"_RecTrackEta"]->Fill((*recDaughter)->eta());
636 double mass = sum.M();
637 double pt =
sqrt(momentum.Perp2());
638 double eta = momentum.Eta();
643 simDaughter != simVertex->daughterTracks_end();
646 p = (**simDaughter).momentum();
649 simcharge += (*simDaughter)->charge();
651 HistIndex_[prefix +
"_SimTrackPt"]->Fill((*simDaughter)->pt());
652 HistIndex_[prefix +
"_SimTrackEta"]->Fill((*simDaughter)->eta());
655 double simpt =
sqrt(simmomentum.Perp2());
656 double simeta = simmomentum.Eta();
663 HistIndex_[prefix +
"_nSimTrks"]->Fill(simVertex->nDaughterTracks());
670 HistIndex_[prefix +
"_AverageTrackWeight"]->Fill(sum_weight / tracksize);
671 HistIndex_[prefix +
"_Chi2Norm"]->Fill(chi2norm);
672 HistIndex_[prefix +
"_Chi2Prob"]->Fill(chi2prob);
675 HistIndex_[prefix +
"_RecCharge"]->Fill(charge);
679 HistIndex_[prefix +
"_SimCharge"]->Fill(simcharge);
684 std::cout <<
" ====== Total Number of analyzed events: " <<
n_event <<
" ====== " << std::endl;
686 std::cout <<
" ====== Total Number of R2S SecondaryVertex: " <<
rs_total_nsv <<
" ====== " << std::endl;
688 std::cout <<
" ====== Total Number of R2S BWeakDecay::SecondaryVertex: " <<
rs_total_nbsv <<
" ====== " << std::endl;
693 std::cout <<
" ====== Total Number of S2R SecondaryVertex: " <<
sr_total_nsv <<
" ====== " << std::endl;
695 std::cout <<
" ====== Total Number of S2R BWeakDecay::SecondaryVertex: " <<
sr_total_nbsv <<
" ====== " << std::endl;
699 std::cout <<
" ====== Total Number of Fake Vertices: " <<
total_nfake <<
" ====== " << std::endl;
T getParameter(std::string const &) const
This class traces the simulated and generated history of a given track.
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
void bookSimToReco(std::string const &)
def setup(process, global_tag, zero_tesla=False)
const reco::VertexBaseRef & recoVertex() const
Return a reference to the reconstructed track.
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).
void fillSimToReco(std::string const &, reco::VertexBaseRef const &, TrackingVertexRef const &)
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
#define DEFINE_FWK_MODULE(type)
Category
Categories available to vertexes.
recoBSVTagInfoValidationAnalyzer(const edm::ParameterSet &)
VertexClassifierByProxy< reco::SecondaryVertexTagInfoCollection > classifier_
edm::InputTag svTagInfoProducer_
edm::EDGetTokenT< TrackingVertexCollection > tvToken
double chi2() const
chi-squares
double z() const
z coordinate
std::map< std::string, MonitorElement * > HistIndex_
void analyze(const edm::Event &, const edm::EventSetup &) override
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.
edm::InputTag trackingTruth_
void bookRecoToSim(std::string const &)
const TrackingVertexRef & simVertex() const
Return the initial tracking vertex from the history.
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.
Int_t numberVertexClassifier_
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.
trackRef_iterator tracks_begin() const
first iterator over tracks
void fillRecoToSim(std::string const &, reco::Vertex const &, TrackingVertexRef const &)
edm::EDGetTokenT< reco::SecondaryVertexTagInfoCollection > svInfoToken
double yError() const
error on y
size_t tracksSize() const
number of tracks