cms-sw/cmssw — pull request #3344 by VinInn (2014-04-15 12:53:57+00:00)
Title: TTRHs removed from Tracker code for good.

see https://its.cern.ch/jira/browse/CMSTRACK-93 for a historical perspective

TTRHs have been removed from Tracker code for good.
The migration has required three major interventions:
1) Percolating the new hit cloner down to the fits
2) use std::shared_ptr instead of the custom intrusive reference counting base class
3) change the way InvalidHits are handled: this causes a minor regression (see below)

Pending issues
more short cuts in the configuration of the hit builder in
src/RecoParticleFlow/PFTracking/plugins/GoodSeedProducer.cc: /// FIXME FIXME CLONE
src/RecoMuon/GlobalTrackingTools/plugins/GlobalTrackQualityProducer.cc: // FIXME FIXME CLONE!!!
not cloning with the trajectory direction in
src/Alignment/ReferenceTrajectories/plugins/TwoBodyDecayTrajectoryFactory.cc: // FIXME FIXME CLONE
src/Alignment/ReferenceTrajectories/src/ReferenceTrajectory.cc: // FIXME FIXME CLONE
src/RecoMuon/CosmicMuonProducer/src/CosmicMuonSmoother.cc: // FIXME FIXME CLONE !!!
src/RecoMuon/CosmicMuonProducer/src/CosmicMuonSmoother.cc: // FIXME FIXME CLONE !!!
Alignment will be fixed in a separate PR (would have been already done if ReferenceTrajectory (against all CMS rule for DataObjects) was not "fitting" itself in the constructor.

Performances:
It is neither slower not more memory hungry than the current version

Regression:
Current InvalidTransientTrackingRecHIt allows for hits w/o "Det" created on layers. They refer directly to the layer's surface.
This information is lost when transformed in InvalidTrackingRecHit at the time the Trajectory is converted in TrackCandidate.
Such hits are then removed during the first fit of the TrackCandidate in the TrackProducer.
In the new code these hits are now captured by a new class InvalidTrackingRecHItNoDet which in principle can survive (with its surface pointer fully valid) till output.
In order to minimize regressions hits with "noDet" are now removed during the Trajectory to TrackCandidate conversion
(in the class Traj2Cand).
This causes anyhow a minor regression whose origin is still unclear (most probably some sort of Candidate cleaning step).
This regression can be fully reproduced in current code applying the very same procedure (remove "noDet" in Traj2Cand).
The general wisdom among tracking experts is that is the correct thing to do.
Tracking POG plans to investigate later if propagating these hits further will bring any benefits.
It should be noted that they have to be removed anyhow before output as the surface pointer cannot be restored in input
(for refit purposed for instance)

Non conformances:
The code still includes several debug checkpoints in form of assert and protected cout

passed all tests including extensive reco and HLT at high pileup.

Next iterations will include
1) fix Alignment code (if really necessary)
2) cleanup obsolete code: try to merge use cases
3) try to optimize memory churn still present in particular during Ckf-Pattern
3) remove or properly protect all debug checkpoints
4) fix short cuts in configuration (eventually as part of a more general cleanup of configuration and event setup use)