CMS 3D CMS Logo

MuonCosmicsId.cc
Go to the documentation of this file.
3 
5  // check is done in 2D
6  return (track.innerPosition().x() - track.vx()) * track.px() + (track.innerPosition().y() - track.vy()) * track.py() >
7  0;
8 }
9 
10 // returns angle and dPt/Pt
11 std::pair<double, double> muonid::matchTracks(const reco::Track& ref, const reco::Track& probe) {
12  std::pair<double, double> result(0, 0);
13  // When both tracks are reconstructed as outside going, sign is -1
14  // otherwise it's +1. There is also a crazy case of both are outside
15  // going, then sign is -1 as well.
16  int match_sign = directionAlongMomentum(ref) == directionAlongMomentum(probe) ? -1 : +1;
17  double sprod = ref.px() * probe.px() + ref.py() * probe.py() + ref.pz() * probe.pz();
18  double argCos = match_sign * (sprod / ref.p() / probe.p());
19  if (argCos < -1.0)
20  argCos = -1.0;
21  if (argCos > 1.0)
22  argCos = 1.0;
23  result.first = acos(argCos);
24  result.second = fabs(probe.pt() - ref.pt()) / sqrt(ref.pt() * probe.pt()); //SK: take a geom-mean pt
25  return result;
26 }
27 
29  const reco::Track& muonTrack,
30  double angleMatch,
31  double momentumMatch) {
32  for (unsigned int i = 0; i < tracks->size(); ++i) {
33  // When both tracks are reconstructed as outside going, sign is -1
34  // otherwise it's +1. There is also a crazy case of both are outside
35  // going, then sign is -1 as well.
36  const std::pair<double, double>& match = matchTracks(muonTrack, tracks->at(i));
37  if (match.first < angleMatch && match.second < momentumMatch)
38  return reco::TrackRef(tracks, i);
39  }
40  return reco::TrackRef();
41 }
reco::TrackRef findOppositeTrack(const edm::Handle< reco::TrackCollection > &collection, const reco::Track &muon, double angleMatch=0.01, double momentumMatch=0.05)
double px() const
x coordinate of momentum vector
Definition: TrackBase.h:640
double p() const
momentum vector magnitude
Definition: TrackBase.h:631
double py() const
y coordinate of momentum vector
Definition: TrackBase.h:643
std::pair< double, double > matchTracks(const reco::Track &ref, const reco::Track &probe)
double pt() const
track transverse momentum
Definition: TrackBase.h:637
bool directionAlongMomentum(const reco::Track &track)
Definition: MuonCosmicsId.cc:4
T sqrt(T t)
Definition: SSEVec.h:19
auto const & tracks
cannot be loose
edm::Ref< TrackCollection > TrackRef
persistent reference to a Track
Definition: TrackFwd.h:20
double pz() const
z coordinate of momentum vector
Definition: TrackBase.h:646
std::pair< typename Association::data_type::first_type, double > match(Reference key, Association association, bool bestMatchByMaxValue)
Generic matching function.
Definition: Utils.h:10