File indexing completed on 2024-07-28 22:48:48
0001 #ifndef RecoParticleFlow_PFTracking_PFDisplacedVertexCandidateFinder_h
0002 #define RecoParticleFlow_PFTracking_PFDisplacedVertexCandidateFinder_h
0003
0004 #include "DataFormats/ParticleFlowReco/interface/PFDisplacedVertexCandidate.h"
0005 #include "DataFormats/ParticleFlowReco/interface/PFDisplacedVertexCandidateFwd.h"
0006 #include "DataFormats/GeometryVector/interface/GlobalPoint.h"
0007 #include "DataFormats/TrackReco/interface/TrackFwd.h"
0008 #include "DataFormats/VertexReco/interface/VertexFwd.h"
0009 #include "DataFormats/BeamSpot/interface/BeamSpot.h"
0010 #include "CommonTools/Utils/interface/KinematicTables.h"
0011 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0012
0013 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0014
0015 #include "TrackingTools/TrajectoryParametrization/interface/GlobalTrajectoryParameters.h"
0016 #include "TrackingTools/PatternTools/interface/TwoTrackMinimumDistance.h"
0017
0018
0019
0020
0021
0022
0023
0024 class MagneticField;
0025
0026 class PFDisplacedVertexCandidateFinder {
0027 public:
0028 PFDisplacedVertexCandidateFinder();
0029
0030 ~PFDisplacedVertexCandidateFinder();
0031
0032
0033 typedef std::vector<bool> Mask;
0034
0035 typedef std::list<reco::TrackBaseRef>::iterator IE;
0036 typedef std::list<reco::TrackBaseRef>::const_iterator IEC;
0037 typedef reco::PFDisplacedVertexCandidateCollection::const_iterator IBC;
0038
0039
0040
0041
0042 void setParameters(double dcaCut, double primaryVertexCut, double dcaPInnerHitCut, const edm::ParameterSet& ps_trk) {
0043 dcaCut_ = dcaCut;
0044 primaryVertexCut2_ = primaryVertexCut * primaryVertexCut;
0045 dcaPInnerHitCut2_ = dcaPInnerHitCut * dcaPInnerHitCut;
0046 nChi2_max_ = ps_trk.getParameter<double>("nChi2_max");
0047 pt_min_ = ps_trk.getParameter<double>("pt_min");
0048 pt_min_prim_ = ps_trk.getParameter<double>("pt_min_prim");
0049 dxy_ = ps_trk.getParameter<double>("dxy");
0050 qoverpError_max_ = ps_trk.getParameter<double>("qoverpError_max");
0051 }
0052
0053
0054 void setDebug(bool debug) { debug_ = debug; }
0055
0056
0057
0058 void setInput(const edm::Handle<reco::TrackCollection>& trackh, const MagneticField* magField);
0059
0060
0061 std::unique_ptr<reco::PFDisplacedVertexCandidateCollection> transferVertexCandidates() {
0062 return std::move(vertexCandidates_);
0063 }
0064
0065 const std::unique_ptr<reco::PFDisplacedVertexCandidateCollection>& vertexCandidates() const {
0066 return std::move(vertexCandidates_);
0067 }
0068
0069
0070
0071 void findDisplacedVertexCandidates();
0072
0073 void setPrimaryVertex(edm::Handle<reco::VertexCollection> mainVertexHandle,
0074 edm::Handle<reco::BeamSpot> beamSpotHandle);
0075
0076 private:
0077
0078
0079
0080 IE associate(IE next, IE last, reco::PFDisplacedVertexCandidate& tempVertexCandidate);
0081
0082
0083 void link(const reco::TrackBaseRef& el1,
0084 const reco::TrackBaseRef& el2,
0085 double& dist,
0086 GlobalPoint& crossing_point,
0087 reco::PFDisplacedVertexCandidate::VertexLinkTest& linktest);
0088
0089
0090
0091 void packLinks(reco::PFDisplacedVertexCandidate& vertexCandidate);
0092
0093
0094
0095
0096
0097 GlobalTrajectoryParameters getGlobalTrajectoryParameters(const reco::Track*) const;
0098
0099
0100 bool goodPtResolution(const reco::TrackBaseRef& trackref) const;
0101
0102
0103
0104 bool isSelected(const reco::TrackBaseRef& trackref) { return goodPtResolution(trackref); }
0105
0106 friend std::ostream& operator<<(std::ostream&, const PFDisplacedVertexCandidateFinder&);
0107
0108
0109
0110 std::unique_ptr<reco::PFDisplacedVertexCandidateCollection> vertexCandidates_;
0111
0112
0113 std::list<reco::TrackBaseRef> eventTracks_;
0114
0115
0116
0117
0118 Mask trackMask_;
0119
0120
0121 std::vector<GlobalTrajectoryParameters> eventTrackTrajectories_;
0122
0123
0124
0125
0126
0127 double dcaCut_;
0128
0129 double primaryVertexCut2_;
0130
0131 double dcaPInnerHitCut2_;
0132
0133
0134
0135
0136 double nChi2_max_;
0137 double pt_min_;
0138
0139 double pt_min_prim_;
0140 double dxy_;
0141 double qoverpError_max_;
0142
0143
0144 unsigned vertexCandidatesSize_;
0145
0146
0147 TwoTrackMinimumDistance theMinimum_;
0148
0149 math::XYZPoint pvtx_;
0150
0151
0152 bool debug_;
0153
0154
0155 const MagneticField* magField_;
0156
0157 edm::soa::PtEtaPhiTable track_table_;
0158 };
0159
0160 #endif