CMS 3D CMS Logo

ExhaustiveMuonTrajectoryBuilder.cc
Go to the documentation of this file.
5 
7  const MuonServiceProxy* proxy,
9  : theTrajBuilder(pset, proxy, iC), theSeeder(), theService(proxy) {}
10 
12 
14  LocalTrajectoryParameters localTrajectoryParameters(seed.startingState().parameters());
15  LocalVector p(localTrajectoryParameters.momentum());
16  int rawId = seed.startingState().detId();
17  DetId detId(rawId);
18  bool isBarrel = (detId.subdetId() == 1);
19  // homemade local-to-global
20  double pt = (isBarrel) ? -p.z() : p.perp();
21  pt *= localTrajectoryParameters.charge();
22  float err00 = seed.startingState().error(0);
23  // float p_err = sqr(sptmean/(ptmean*ptmean));
24  // mat[0][0]= p_err;
25  float sigmapt = sqrt(err00) * pt * pt;
27  // Make a new seed based on each segment, using the original pt and sigmapt
28  for (auto const& recHit : seed.recHits()) {
29  const GeomDet* geomDet = theService->trackingGeometry()->idToDet(recHit.geographicalId());
30  auto muonRecHit = MuonTransientTrackingRecHit::specificBuild(geomDet, &recHit);
31  TrajectorySeed tmpSeed(theSeeder.createSeed(pt, sigmapt, muonRecHit));
33  result.insert(
34  result.end(), std::make_move_iterator(trajectories.begin()), std::make_move_iterator(trajectories.end()));
35  }
36  return result;
37 }
38 
40  return CandidateContainer();
41 }
42 
44 
46  // choose the one with the most hits, and the smallest chi-squared
47  if (trajectories.empty()) {
48  return;
49  }
50  int best_nhits = 0;
51  unsigned best = 0;
52  unsigned ntraj = trajectories.size();
53  for (unsigned i = 0; i < ntraj; ++i) {
54  int nhits = trajectories[i]->foundHits();
55  if (nhits > best_nhits) {
56  best_nhits = nhits;
57  best = i;
58  } else if (nhits == best_nhits && trajectories[i]->chiSquared() < trajectories[best]->chiSquared()) {
59  best = i;
60  }
61  }
63  result.reserve(1);
64  result.emplace_back(std::move(trajectories[best]));
65  trajectories.swap(result);
66 }
MuonCandidate::CandidateContainer CandidateContainer
edm::ESHandle< GlobalTrackingGeometry > trackingGeometry() const
get the tracking geometry
void setEvent(const edm::Event &event) override
pass the Event to the algo at each event
std::pair< const Trajectory *, reco::TrackRef > TrackCand
StandAloneMuonTrajectoryBuilder theTrajBuilder
MuonCandidate::TrajectoryContainer TrajectoryContainer
const GeomDet * idToDet(DetId) const override
void clean(TrajectoryContainer &trajectories) const
TrajectoryContainer trajectories(const TrajectorySeed &) override
return a container of the reconstructed trajectories compatible with a given seed ...
T sqrt(T t)
Definition: SSEVec.h:19
TrajectoryContainer trajectories(const TrajectorySeed &) override
return a container of the reconstructed trajectories compatible with a given seed ...
Definition: DetId.h:17
TrajectorySeed createSeed(float ptmean, float sptmean, MuonTransientTrackingRecHit::ConstMuonRecHitPointer last) const
void setEvent(const edm::Event &event) override
Pass the Event to the algo at each event.
static MuonRecHitPointer specificBuild(const GeomDet *geom, const TrackingRecHit *rh)
ExhaustiveMuonTrajectoryBuilder(const edm::ParameterSet &pset, const MuonServiceProxy *, edm::ConsumesCollector &)
def move(src, dest)
Definition: eostools.py:511
Definition: event.py:1