CMS 3D CMS Logo

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

#include <TwoTrackMinimumDistance.h>

Inheritance diagram for TwoTrackMinimumDistance:
ClosestApproachOnHelices

Public Types

enum  Mode { FastMode =0, SlowMode =1 }
 

Public Member Functions

virtual bool calculate (const TrajectoryStateOnSurface &sta, const TrajectoryStateOnSurface &stb)
 
virtual bool calculate (const FreeTrajectoryState &sta, const FreeTrajectoryState &stb)
 
virtual bool calculate (const GlobalTrajectoryParameters &sta, const GlobalTrajectoryParameters &stb)
 
virtual TwoTrackMinimumDistanceclone () const
 
virtual GlobalPoint crossingPoint () const
 
virtual float distance () const
 
double firstAngle () const
 
std::pair< double, double > pathLength () const
 
virtual std::pair< GlobalPoint,
GlobalPoint
points () const
 
double secondAngle () const
 
virtual bool status () const
 
 TwoTrackMinimumDistance (const Mode m=FastMode)
 
- Public Member Functions inherited from ClosestApproachOnHelices
 ClosestApproachOnHelices ()
 
virtual ~ClosestApproachOnHelices ()
 

Private Types

enum  Charge { hh, hl, ll }
 

Private Member Functions

bool pointsHelixHelix (const GlobalTrajectoryParameters &sta, const GlobalTrajectoryParameters &stb)
 
bool pointsHelixLine (const GlobalTrajectoryParameters &sta, const GlobalTrajectoryParameters &stb)
 
bool pointsLineLine (const GlobalTrajectoryParameters &sta, const GlobalTrajectoryParameters &stb)
 

Private Attributes

std::pair< GlobalPoint,
GlobalPoint
points_
 
bool status_
 
Charge theCharge
 
ClosestApproachInRPhi theIniAlgo
 
Mode theModus
 
TwoTrackMinimumDistanceHelixHelix theTTMDhh
 
TwoTrackMinimumDistanceHelixLine theTTMDhl
 
TwoTrackMinimumDistanceLineLine theTTMDll
 

Detailed Description

General interface to calculate the PCA of two tracks. According to the charge of the tracks, the correct algorithm is used:

Definition at line 19 of file TwoTrackMinimumDistance.h.

Member Enumeration Documentation

Constructor & Destructor Documentation

TwoTrackMinimumDistance::TwoTrackMinimumDistance ( const Mode  m = FastMode)
inline

Definition at line 25 of file TwoTrackMinimumDistance.h.

References m, status_, and theModus.

Referenced by clone().

Member Function Documentation

bool TwoTrackMinimumDistance::calculate ( const TrajectoryStateOnSurface sta,
const TrajectoryStateOnSurface stb 
)
virtual
bool TwoTrackMinimumDistance::calculate ( const FreeTrajectoryState sta,
const FreeTrajectoryState stb 
)
virtual

Implements ClosestApproachOnHelices.

Definition at line 73 of file TwoTrackMinimumDistance.cc.

References FreeTrajectoryState::parameters().

75 {
76 // pair<GlobalPoint, GlobalPoint> ret = theIniAlgo.points ( sta, stb );
77  return calculate ( sta.parameters(), stb.parameters() );
78 }
virtual bool calculate(const TrajectoryStateOnSurface &sta, const TrajectoryStateOnSurface &stb)
const GlobalTrajectoryParameters & parameters() const
bool TwoTrackMinimumDistance::calculate ( const GlobalTrajectoryParameters sta,
const GlobalTrajectoryParameters stb 
)
virtual

Definition at line 81 of file TwoTrackMinimumDistance.cc.

References GlobalTrajectoryParameters::charge(), MagneticField::inTesla(), GlobalTrajectoryParameters::magneticField(), GlobalTrajectoryParameters::position(), and z.

83 {
84  if ((sta.magneticField().inTesla(sta.position()).z() == 0.)||
85  (stb.magneticField().inTesla(stb.position()).z() == 0.)) {
86  status_ = pointsLineLine(sta, stb);
87  } else if ( sta.charge() != 0. && stb.charge() != 0. ) {
88  status_ = pointsHelixHelix(sta, stb);
89  } else if ( sta.charge() == 0. && stb.charge() == 0. ) {
90  status_ = pointsLineLine(sta, stb);
91  } else {
92  status_ = pointsHelixLine(sta, stb);
93  }
94  return status_;
95 }
virtual GlobalVector inTesla(const GlobalPoint &gp) const =0
Field value ad specified global point, in Tesla.
Definition: DDAxes.h:10
bool pointsHelixLine(const GlobalTrajectoryParameters &sta, const GlobalTrajectoryParameters &stb)
bool pointsLineLine(const GlobalTrajectoryParameters &sta, const GlobalTrajectoryParameters &stb)
const MagneticField & magneticField() const
bool pointsHelixHelix(const GlobalTrajectoryParameters &sta, const GlobalTrajectoryParameters &stb)
virtual TwoTrackMinimumDistance* TwoTrackMinimumDistance::clone ( void  ) const
inlinevirtual

Clone method

Implements ClosestApproachOnHelices.

Definition at line 54 of file TwoTrackMinimumDistance.h.

References TwoTrackMinimumDistance().

54  {
55  return new TwoTrackMinimumDistance(* this);
56  }
TwoTrackMinimumDistance(const Mode m=FastMode)
GlobalPoint TwoTrackMinimumDistance::crossingPoint ( ) const
virtual

arithmetic mean of the two points of closest approach

Implements ClosestApproachOnHelices.

Definition at line 176 of file TwoTrackMinimumDistance.cc.

References plotscripts::mean().

Referenced by VZeroFinder::checkTrackPair(), PFDisplacedVertexCandidateFinder::link(), and InclusiveVertexFinder::nearTracks().

177 {
178  return mean ( points_ );
179 }
std::pair< GlobalPoint, GlobalPoint > points_
float TwoTrackMinimumDistance::distance ( ) const
virtual

distance between the two points of closest approach in 3D

Implements ClosestApproachOnHelices.

Definition at line 182 of file TwoTrackMinimumDistance.cc.

Referenced by PhotonValidator::analyze(), VZeroFinder::checkTrackPair(), PFDisplacedVertexCandidateFinder::link(), InclusiveVertexFinder::nearTracks(), and SoftConversionProducer::produce().

183 {
184  return dist ( points_ );
185 }
std::pair< GlobalPoint, GlobalPoint > points_
double TwoTrackMinimumDistance::firstAngle ( ) const

Definition at line 20 of file TwoTrackMinimumDistance.cc.

References edm::hlt::Exception.

Referenced by VZeroFinder::checkTrackPair(), and TSCBLBuilderNoMaterial::operator()().

21 {
22  if (!status_)
23  throw cms::Exception("TrackingTools/PatternTools","TwoTrackMinimumDistance::could not compute track crossing. Check status before calling this method!");
24  switch ( theCharge ) {
25  case (hh): return theTTMDhh.firstAngle(); break;
26  case (hl): return theTTMDhl.firstAngle(); break;
27  case (ll): return theTTMDll.firstAngle(); break;
28  }
29  return 0;
30 }
TwoTrackMinimumDistanceHelixLine theTTMDhl
TwoTrackMinimumDistanceHelixHelix theTTMDhh
TwoTrackMinimumDistanceLineLine theTTMDll
pair< double, double > TwoTrackMinimumDistance::pathLength ( ) const

Definition at line 45 of file TwoTrackMinimumDistance.cc.

References edm::hlt::Exception.

Referenced by TSCBLBuilderNoMaterial::operator()().

46 {
47  if (!status_)
48  throw cms::Exception("TrackingTools/PatternTools","TwoTrackMinimumDistance::could not compute track crossing. Check status before calling this method!");
49  switch ( theCharge ) {
50  case (hh): return theTTMDhh.pathLength(); break;
51  case (hl): return theTTMDhl.pathLength(); break;
52  case (ll): return theTTMDll.pathLength(); break;
53  }
54  return std::pair<double,double>(0,0);
55 }
std::pair< double, double > pathLength() const
std::pair< double, double > pathLength() const
TwoTrackMinimumDistanceHelixLine theTTMDhl
TwoTrackMinimumDistanceHelixHelix theTTMDhh
std::pair< double, double > pathLength() const
TwoTrackMinimumDistanceLineLine theTTMDll
pair< GlobalPoint, GlobalPoint > TwoTrackMinimumDistance::points ( ) const
virtual

Returns the two PCA on the trajectories.

Implements ClosestApproachOnHelices.

Definition at line 57 of file TwoTrackMinimumDistance.cc.

References edm::hlt::Exception.

Referenced by VZeroFinder::checkTrackPair(), CrossingPtBasedLinearizationPointFinder::getLinearizationPoint(), InclusiveVertexFinder::nearTracks(), TSCBLBuilderNoMaterial::operator()(), and CrossingPtBasedLinearizationPointFinder::useAllTracks().

58 {
59  if (!status_)
60  throw cms::Exception("TrackingTools/PatternTools","TwoTrackMinimumDistance::could not compute track crossing. Check status before calling this method!");
61  return points_;
62 }
std::pair< GlobalPoint, GlobalPoint > points_
bool TwoTrackMinimumDistance::pointsHelixHelix ( const GlobalTrajectoryParameters sta,
const GlobalTrajectoryParameters stb 
)
private

Definition at line 118 of file TwoTrackMinimumDistance.cc.

References GlobalTrajectoryParameters::charge(), ExpressReco_HICollisions_FallBack::e, f, mag2(), GlobalTrajectoryParameters::momentum(), and GlobalTrajectoryParameters::position().

120 {
121  if ( ( sta.position() - stb.position() ).mag2() < 1e-7f &&
122  ( sta.momentum() - stb.momentum() ).mag2() < 1e-7f &&
123  sta.charge()==stb.charge()
124  )
125  {
126  edm::LogWarning ( "TwoTrackMinimumDistance") << "comparing track with itself!";
127  };
128 
129  theCharge = hh;
130  if ( theModus == FastMode )
131  {
132  // first we try directly - in FastMode only ...
133  if ( !(theTTMDhh.calculate ( sta, stb, .0001 )) )
134  {
136  return true;
137  };
138  };
139 
140  // okay. did not work. so we use CAIR, and then TTMD again.
141  bool cairStat = theIniAlgo.calculate ( sta, stb );
142 
143  if (!cairStat) { // yes. CAIR may fail.
144  edm::LogWarning ( "TwoTrackMinimumDistance" ) << "Computation HelixHelix::CAIR failed.";
145  if ( theModus == SlowMode ) { // we can still try ttmd here.
146  if ( !(theTTMDhh.calculate ( sta, stb, .0001 )) ) {
148  return true;
149  }
150  };
151  // we can try with more sloppy settings
152  if ( !(theTTMDhh.calculate ( sta, stb, .1 )) ) {
154  return true;
155  }
156  return false;
157  edm::LogWarning ( "TwoTrackMinimumDistance" ) << "TwoTrackMinimumDistanceHelixHelix failed";
158  };
159 
160  pair<GlobalTrajectoryParameters, GlobalTrajectoryParameters >
162 
163  pair<GlobalPoint, GlobalPoint> inip ( ini.first.position(),
164  ini.second.position() );
165  if ( theTTMDhh.calculate ( ini.first, ini.second, .0001 ) ) {
166  points_ = inip;
167  } else {
169  // if we are still worse than CAIR, we use CAIR results.
170  if ( dist ( points_ ) > dist ( inip ) ) points_ = inip;
171  };
172  return true;
173 }
std::pair< GlobalTrajectoryParameters, GlobalTrajectoryParameters > trajectoryParameters() const
std::pair< GlobalPoint, GlobalPoint > points_
T mag2() const
The vector magnitude squared. Equivalent to vec.dot(vec)
bool calculate(const GlobalTrajectoryParameters &, const GlobalTrajectoryParameters &, const float qual=.001)
double f[11][100]
TwoTrackMinimumDistanceHelixHelix theTTMDhh
virtual bool calculate(const TrajectoryStateOnSurface &sta, const TrajectoryStateOnSurface &stb)
ClosestApproachInRPhi theIniAlgo
std::pair< GlobalPoint, GlobalPoint > points() const
bool TwoTrackMinimumDistance::pointsHelixLine ( const GlobalTrajectoryParameters sta,
const GlobalTrajectoryParameters stb 
)
private

Definition at line 108 of file TwoTrackMinimumDistance.cc.

110 {
111  theCharge = hl;
112  if (theTTMDhl.calculate(sta, stb, 0.000001)) return false;
114  return true;
115 }
std::pair< GlobalPoint, GlobalPoint > points_
TwoTrackMinimumDistanceHelixLine theTTMDhl
std::pair< GlobalPoint, GlobalPoint > points() const
bool calculate(const GlobalTrajectoryParameters &, const GlobalTrajectoryParameters &, const float qual=.0001)
bool TwoTrackMinimumDistance::pointsLineLine ( const GlobalTrajectoryParameters sta,
const GlobalTrajectoryParameters stb 
)
private

Definition at line 98 of file TwoTrackMinimumDistance.cc.

100 {
101  theCharge = ll;
102  if (theTTMDll.calculate(sta, stb)) return false;
104  return true;
105 }
std::pair< GlobalPoint, GlobalPoint > points() const
std::pair< GlobalPoint, GlobalPoint > points_
bool calculate(const GlobalTrajectoryParameters &, const GlobalTrajectoryParameters &)
TwoTrackMinimumDistanceLineLine theTTMDll
double TwoTrackMinimumDistance::secondAngle ( ) const

Definition at line 32 of file TwoTrackMinimumDistance.cc.

References edm::hlt::Exception.

Referenced by VZeroFinder::checkTrackPair().

33 {
34  if (!status_)
35  throw cms::Exception("TrackingTools/PatternTools","TwoTrackMinimumDistance::could not compute track crossing. Check status before calling this method!");
36  switch ( theCharge ) {
37  case (hh): return theTTMDhh.secondAngle(); break;
38  case (hl): return theTTMDhl.secondAngle(); break;
39  case (ll): return theTTMDll.secondAngle(); break;
40  }
41  return 0;
42 }
TwoTrackMinimumDistanceHelixLine theTTMDhl
TwoTrackMinimumDistanceHelixHelix theTTMDhh
TwoTrackMinimumDistanceLineLine theTTMDll
virtual bool TwoTrackMinimumDistance::status ( void  ) const
inlinevirtual

Implements ClosestApproachOnHelices.

Definition at line 36 of file TwoTrackMinimumDistance.h.

References status_.

Referenced by PhotonValidator::analyze().

Member Data Documentation

std::pair<GlobalPoint, GlobalPoint> TwoTrackMinimumDistance::points_
private

Definition at line 71 of file TwoTrackMinimumDistance.h.

bool TwoTrackMinimumDistance::status_
private

Definition at line 70 of file TwoTrackMinimumDistance.h.

Referenced by status(), and TwoTrackMinimumDistance().

Charge TwoTrackMinimumDistance::theCharge
mutableprivate

Definition at line 65 of file TwoTrackMinimumDistance.h.

ClosestApproachInRPhi TwoTrackMinimumDistance::theIniAlgo
private

Definition at line 66 of file TwoTrackMinimumDistance.h.

Mode TwoTrackMinimumDistance::theModus
private

Definition at line 64 of file TwoTrackMinimumDistance.h.

Referenced by TwoTrackMinimumDistance().

TwoTrackMinimumDistanceHelixHelix TwoTrackMinimumDistance::theTTMDhh
mutableprivate

Definition at line 67 of file TwoTrackMinimumDistance.h.

TwoTrackMinimumDistanceHelixLine TwoTrackMinimumDistance::theTTMDhl
mutableprivate

Definition at line 69 of file TwoTrackMinimumDistance.h.

TwoTrackMinimumDistanceLineLine TwoTrackMinimumDistance::theTTMDll
mutableprivate

Definition at line 68 of file TwoTrackMinimumDistance.h.