CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
List of all members | Classes | Public Member Functions | Private Member Functions | Private Attributes
TracksClusteringFromDisplacedSeed Class Reference

#include <TracksClusteringFromDisplacedSeed.h>

Classes

struct  Cluster
 

Public Member Functions

std::vector< Clusterclusters (const reco::Vertex &pv, const std::vector< reco::TransientTrack > &selectedTracks)
 
 TracksClusteringFromDisplacedSeed (const edm::ParameterSet &params)
 

Private Member Functions

std::pair< std::vector
< reco::TransientTrack >
, GlobalPoint
nearTracks (const reco::TransientTrack &seed, const std::vector< reco::TransientTrack > &tracks, const reco::Vertex &primaryVertex) const
 
bool trackFilter (const reco::TrackRef &track) const
 

Private Attributes

double clusterMaxDistance
 
double clusterMaxSignificance
 
double clusterMinAngleCosine
 
double distanceRatio
 
double max3DIPSignificance
 
double max3DIPValue
 
double maxTimeSignificance
 
double min3DIPSignificance
 
double min3DIPValue
 

Detailed Description

Definition at line 25 of file TracksClusteringFromDisplacedSeed.h.

Constructor & Destructor Documentation

TracksClusteringFromDisplacedSeed::TracksClusteringFromDisplacedSeed ( const edm::ParameterSet params)

Definition at line 5 of file TracksClusteringFromDisplacedSeed.cc.

6  : // maxNTracks(params.getParameter<unsigned int>("maxNTracks")),
7  max3DIPSignificance(params.getParameter<double>("seedMax3DIPSignificance")),
8  max3DIPValue(params.getParameter<double>("seedMax3DIPValue")),
9  min3DIPSignificance(params.getParameter<double>("seedMin3DIPSignificance")),
10  min3DIPValue(params.getParameter<double>("seedMin3DIPValue")),
11  clusterMaxDistance(params.getParameter<double>("clusterMaxDistance")),
12  clusterMaxSignificance(params.getParameter<double>("clusterMaxSignificance")), //3
13  distanceRatio(params.getParameter<double>("distanceRatio")), //was clusterScale/densityFactor
14  clusterMinAngleCosine(params.getParameter<double>("clusterMinAngleCosine")), //0.0
15  maxTimeSignificance(params.getParameter<double>("maxTimeSignificance"))
16 
17 {}
T getParameter(std::string const &) const
Definition: ParameterSet.h:303

Member Function Documentation

std::vector< TracksClusteringFromDisplacedSeed::Cluster > TracksClusteringFromDisplacedSeed::clusters ( const reco::Vertex pv,
const std::vector< reco::TransientTrack > &  selectedTracks 
)

Definition at line 100 of file TracksClusteringFromDisplacedSeed.cc.

References IPTools::absoluteImpactParameter3D(), gather_cfg::cout, mps_fire::i, max3DIPSignificance, max3DIPValue, min3DIPSignificance, min3DIPValue, nearTracks(), dt_dqm_sourceclient_common_cff::reco, alignCSCRings::s, TracksClusteringFromDisplacedSeed::Cluster::seedingTrack, TracksClusteringFromDisplacedSeed::Cluster::seedPoint, DetachedQuadStep_cff::seeds, and TracksClusteringFromDisplacedSeed::Cluster::tracks.

101  {
102  using namespace reco;
103  std::vector<TransientTrack> seeds;
104  for (std::vector<TransientTrack>::const_iterator it = selectedTracks.begin(); it != selectedTracks.end(); it++) {
105  std::pair<bool, Measurement1D> ip = IPTools::absoluteImpactParameter3D(*it, pv);
106  if (ip.first && ip.second.value() >= min3DIPValue && ip.second.significance() >= min3DIPSignificance &&
107  ip.second.value() <= max3DIPValue && ip.second.significance() <= max3DIPSignificance) {
108 #ifdef VTXDEBUG
109  std::cout << "new seed " << it - selectedTracks.begin() << " ref " << it->trackBaseRef().key() << " "
110  << ip.second.value() << " " << ip.second.significance() << " "
111  << it->track().hitPattern().trackerLayersWithMeasurement() << " " << it->track().pt() << " "
112  << it->track().eta() << std::endl;
113 #endif
114  seeds.push_back(*it);
115  }
116  }
117 
118  std::vector<Cluster> clusters;
119  int i = 0;
120  for (std::vector<TransientTrack>::const_iterator s = seeds.begin(); s != seeds.end(); ++s, ++i) {
121 #ifdef VTXDEBUG
122  std::cout << "Seed N. " << i << std::endl;
123 #endif // VTXDEBUG
124  std::pair<std::vector<reco::TransientTrack>, GlobalPoint> ntracks = nearTracks(*s, selectedTracks, pv);
125  // std::cout << ntracks.first.size() << " " << ntracks.first.size() << std::endl;
126  // if(ntracks.first.size() == 0 || ntracks.first.size() > maxNTracks ) continue;
127  ntracks.first.push_back(*s);
128  Cluster aCl;
129  aCl.seedingTrack = *s;
130  aCl.seedPoint = ntracks.second;
131  aCl.tracks = ntracks.first;
132  clusters.push_back(aCl);
133  }
134 
135  return clusters;
136 }
std::pair< std::vector< reco::TransientTrack >, GlobalPoint > nearTracks(const reco::TransientTrack &seed, const std::vector< reco::TransientTrack > &tracks, const reco::Vertex &primaryVertex) const
std::vector< Cluster > clusters(const reco::Vertex &pv, const std::vector< reco::TransientTrack > &selectedTracks)
std::pair< bool, Measurement1D > absoluteImpactParameter3D(const reco::TransientTrack &transientTrack, const reco::Vertex &vertex)
Definition: IPTools.cc:38
tuple cout
Definition: gather_cfg.py:144
std::pair< std::vector< reco::TransientTrack >, GlobalPoint > TracksClusteringFromDisplacedSeed::nearTracks ( const reco::TransientTrack seed,
const std::vector< reco::TransientTrack > &  tracks,
const reco::Vertex primaryVertex 
) const
private

Definition at line 19 of file TracksClusteringFromDisplacedSeed.cc.

References funct::abs(), IPTools::absoluteImpactParameter3D(), TwoTrackMinimumDistance::calculate(), TrajectoryStateOnSurface::cartesianError(), clusterMaxDistance, clusterMaxSignificance, clusterMinAngleCosine, gather_cfg::cout, reco::Vertex::covariance(), CommonMethods::cp(), TwoTrackMinimumDistance::crossingPoint(), VertexDistance3D::distance(), TwoTrackMinimumDistance::distance(), HLT_FULL_cff::distance, distanceRatio, Basic3DVector< T >::dot(), reco::TransientTrack::dtErrorExt(), TrajectoryStateOnSurface::globalDirection(), reco::TransientTrack::impactPointState(), edm::isFinite(), visualization-live-secondInstance_cfg::m, mag(), maxTimeSignificance, TwoTrackMinimumDistance::points(), CartesianTrajectoryError::position(), reco::Vertex::position(), funct::pow(), MetAnalyzer::pv(), mps_fire::result, Measurement1D::significance(), mathSSE::sqrt(), reco::TransientTrack::timeExt(), groupFilesInBlocks::tt, Vector3DBase< T, FrameTag >::unit(), unit(), w, PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

Referenced by clusters().

22  {
23  VertexDistance3D distanceComputer;
24  GlobalPoint pv(primaryVertex.position().x(), primaryVertex.position().y(), primaryVertex.position().z());
25  std::vector<reco::TransientTrack> result;
27  GlobalPoint seedingPoint;
28  float sumWeights = 0;
29  std::pair<bool, Measurement1D> ipSeed = IPTools::absoluteImpactParameter3D(seed, primaryVertex);
30  float pvDistance = ipSeed.second.value();
31  for (std::vector<reco::TransientTrack>::const_iterator tt = tracks.begin(); tt != tracks.end(); ++tt) {
32  if (*tt == seed)
33  continue;
34 
35  if (dist.calculate(tt->impactPointState(), seed.impactPointState())) {
36  GlobalPoint ttPoint = dist.points().first;
37  GlobalError ttPointErr = tt->impactPointState().cartesianError().position();
38  GlobalPoint seedPosition = dist.points().second;
39  GlobalError seedPositionErr = seed.impactPointState().cartesianError().position();
41  distanceComputer.distance(VertexState(seedPosition, seedPositionErr), VertexState(ttPoint, ttPointErr));
43 
44  double timeSig = 0.;
45  if (primaryVertex.covariance(3, 3) > 0. && edm::isFinite(seed.timeExt()) && edm::isFinite(tt->timeExt())) {
46  // apply only if time available and being used in vertexing
47  const double tError = std::sqrt(std::pow(seed.dtErrorExt(), 2) + std::pow(tt->dtErrorExt(), 2));
48  timeSig = std::abs(seed.timeExt() - tt->timeExt()) / tError;
49  }
50 
51  float distanceFromPV = (dist.points().second - pv).mag();
52  float distance = dist.distance();
53  GlobalVector trackDir2D(
54  tt->impactPointState().globalDirection().x(), tt->impactPointState().globalDirection().y(), 0.);
55  GlobalVector seedDir2D(
57  //SK:UNUSED// float dotprodTrackSeed2D = trackDir2D.unit().dot(seedDir2D.unit());
58 
59  float dotprodTrack = (dist.points().first - pv).unit().dot(tt->impactPointState().globalDirection().unit());
60  float dotprodSeed = (dist.points().second - pv).unit().dot(seed.impactPointState().globalDirection().unit());
61 
62  float w = distanceFromPV * distanceFromPV / (pvDistance * distance);
63  bool selected =
66  ? (dotprodSeed > clusterMinAngleCosine)
67  : (dotprodSeed < clusterMinAngleCosine)) && //Angles between PV-PCAonSeed vectors and seed directions
69  ? (dotprodTrack > clusterMinAngleCosine)
70  : (dotprodTrack < clusterMinAngleCosine)) && //Angles between PV-PCAonTrack vectors and track directions
71  //dotprodTrackSeed2D > clusterMinAngleCosine && //Angle between track and seed
72  //distance*clusterScale*tracks.size() < (distanceFromPV+pvDistance)*(distanceFromPV+pvDistance)/pvDistance && // cut scaling with track density
73  distance * distanceRatio < distanceFromPV && // cut scaling with track density
74  distance < clusterMaxDistance &&
75  timeSig < maxTimeSignificance); // absolute distance cut
76 
77 #ifdef VTXDEBUG
78  std::cout << tt->trackBaseRef().key() << " : " << (selected ? "+" : " ") << " " << m.significance() << " < "
79  << clusterMaxSignificance << " && " << dotprodSeed << " > " << clusterMinAngleCosine << " && "
80  << dotprodTrack << " > " << clusterMinAngleCosine << " && " << dotprodTrackSeed2D << " > "
81  << clusterMinAngleCosine << " && " << distance * distanceRatio << " < " << distanceFromPV
82  << " crossingtoPV: " << distanceFromPV << " dis*scal " << distance * distanceRatio << " < "
83  << distanceFromPV << " dist: " << distance << " < " << clusterMaxDistance < < < <
84  "timeSig: " << timeSig << std::endl; // cut scaling with track density
85 #endif
86  if (selected) {
87  result.push_back(*tt);
88  seedingPoint =
89  GlobalPoint(cp.x() * w + seedingPoint.x(), cp.y() * w + seedingPoint.y(), cp.z() * w + seedingPoint.z());
90  sumWeights += w;
91  }
92  }
93  }
94 
95  seedingPoint =
96  GlobalPoint(seedingPoint.x() / sumWeights, seedingPoint.y() / sumWeights, seedingPoint.z() / sumWeights);
97  return std::pair<std::vector<reco::TransientTrack>, GlobalPoint>(result, seedingPoint);
98 }
const double w
Definition: UKUtility.cc:23
T mag() const
The vector magnitude. Equivalent to sqrt(vec.mag2())
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
const CartesianTrajectoryError cartesianError() const
std::pair< bool, Measurement1D > absoluteImpactParameter3D(const reco::TransientTrack &transientTrack, const reco::Vertex &vertex)
Definition: IPTools.cc:38
T y() const
Definition: PV3DBase.h:60
double timeExt() const
auto const & tracks
cannot be loose
GlobalPoint crossingPoint() const override
double covariance(int i, int j) const
(i, j)-th element of error matrix, i, j = 0, ... 2
Definition: Vertex.h:148
constexpr bool isFinite(T x)
const Point & position() const
position
Definition: Vertex.h:127
tuple result
Definition: mps_fire.py:311
bool calculate(const TrajectoryStateOnSurface &sta, const TrajectoryStateOnSurface &stb) override
T sqrt(T t)
Definition: SSEVec.h:19
T z() const
Definition: PV3DBase.h:61
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
std::pair< GlobalPoint, GlobalPoint > points() const override
Measurement1D distance(const GlobalPoint &vtx1Position, const GlobalError &vtx1PositionError, const GlobalPoint &vtx2Position, const GlobalError &vtx2PositionError) const override
Vector3DBase unit() const
Definition: Vector3DBase.h:54
double significance() const
Definition: Measurement1D.h:29
const GlobalError position() const
Position error submatrix.
double dtErrorExt() const
tuple cout
Definition: gather_cfg.py:144
TrajectoryStateOnSurface impactPointState() const
float distance() const override
T x() const
Definition: PV3DBase.h:59
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:29
GlobalVector globalDirection() const
Basic3DVector unit() const
T dot(const Basic3DVector &rh) const
Scalar product, or &quot;dot&quot; product, with a vector of same type.
bool TracksClusteringFromDisplacedSeed::trackFilter ( const reco::TrackRef track) const
private

Member Data Documentation

double TracksClusteringFromDisplacedSeed::clusterMaxDistance
private

Definition at line 47 of file TracksClusteringFromDisplacedSeed.h.

Referenced by nearTracks().

double TracksClusteringFromDisplacedSeed::clusterMaxSignificance
private

Definition at line 48 of file TracksClusteringFromDisplacedSeed.h.

Referenced by nearTracks().

double TracksClusteringFromDisplacedSeed::clusterMinAngleCosine
private

Definition at line 50 of file TracksClusteringFromDisplacedSeed.h.

Referenced by nearTracks().

double TracksClusteringFromDisplacedSeed::distanceRatio
private

Definition at line 49 of file TracksClusteringFromDisplacedSeed.h.

Referenced by nearTracks().

double TracksClusteringFromDisplacedSeed::max3DIPSignificance
private

Definition at line 43 of file TracksClusteringFromDisplacedSeed.h.

Referenced by clusters().

double TracksClusteringFromDisplacedSeed::max3DIPValue
private

Definition at line 44 of file TracksClusteringFromDisplacedSeed.h.

Referenced by clusters().

double TracksClusteringFromDisplacedSeed::maxTimeSignificance
private

Definition at line 51 of file TracksClusteringFromDisplacedSeed.h.

Referenced by nearTracks().

double TracksClusteringFromDisplacedSeed::min3DIPSignificance
private

Definition at line 45 of file TracksClusteringFromDisplacedSeed.h.

Referenced by clusters().

double TracksClusteringFromDisplacedSeed::min3DIPValue
private

Definition at line 46 of file TracksClusteringFromDisplacedSeed.h.

Referenced by clusters().