CMS 3D CMS Logo

/data/doxygen/doxygen-1.7.3/gen/CMSSW_4_2_8/src/CommonTools/RecoAlgos/src/TrackSelector.cc

Go to the documentation of this file.
00001 #include "CommonTools/RecoAlgos/interface/TrackSelector.h"
00002 
00003 using namespace reco;
00004 
00005 namespace helper 
00006 {
00007 
00008   TrackCollectionStoreManager::
00009   TrackCollectionStoreManager(const edm::Handle<reco::TrackCollection> & ) 
00010     :
00011     selTracks_( new reco::TrackCollection ),
00012     selTrackExtras_( new reco::TrackExtraCollection ),
00013     selHits_( new TrackingRecHitCollection ),
00014     selStripClusters_( new edmNew::DetSetVector<SiStripCluster> ),
00015     selPixelClusters_( new edmNew::DetSetVector<SiPixelCluster> ),
00016     rTracks_(), rTrackExtras_(), rHits_(),
00017     clusterStorer_(),
00018     idx_(0), hidx_(0),
00019     cloneClusters_ (true)
00020   {
00021   }
00022   
00023   
00024   //------------------------------------------------------------------
00026   //------------------------------------------------------------------
00027   void 
00028   TrackCollectionStoreManager::
00029   processTrack( const Track & trk ) 
00030   {
00031     selTracks_->push_back( Track( trk ) );
00032     selTracks_->back().setExtra( TrackExtraRef( rTrackExtras_, idx_ ++ ) );
00033     selTrackExtras_->push_back( TrackExtra( trk.outerPosition(), trk.outerMomentum(), trk.outerOk(),
00034                                             trk.innerPosition(), trk.innerMomentum(), trk.innerOk(),
00035                                             trk.outerStateCovariance(), trk.outerDetId(),
00036                                             trk.innerStateCovariance(), trk.innerDetId(),
00037                                             trk.seedDirection() ) );
00038     TrackExtra & tx = selTrackExtras_->back();
00039     for( trackingRecHit_iterator hit = trk.recHitsBegin(); hit != trk.recHitsEnd();
00040          ++ hit, ++ hidx_ ) {
00041 
00042         selHits_->push_back( (*hit)->clone() );
00043         TrackingRecHit * newHit = & (selHits_->back());
00044         tx.add( TrackingRecHitRef( rHits_, hidx_ ) );
00045 
00046         //--- Skip the rest for this hit if we don't want to clone the cluster.
00047         //--- The copy constructer in the rec hit will copy the link properly.
00048         if (cloneClusters() && newHit->isValid()
00049             && ((*hit)->geographicalId().det() == DetId::Tracker)) {
00050           clusterStorer_.addCluster( *selHits_, hidx_ );
00051         }
00052     } // end of for loop over tracking rec hits on this track
00053   } // end of track, and function
00054 
00055 
00056   //------------------------------------------------------------------
00058   //------------------------------------------------------------------
00059   edm::OrphanHandle<reco::TrackCollection> 
00060   TrackCollectionStoreManager::
00061   put( edm::Event & evt ) {
00062     edm::OrphanHandle<reco::TrackCollection> 
00063       h = evt.put( selTracks_ );
00064     evt.put( selTrackExtras_ );
00065     evt.put( selHits_ );
00066     evt.put( selStripClusters_ );
00067     evt.put( selPixelClusters_ );
00068     return h; 
00069   }
00070   
00071 } // end of namespace helper
00072