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
00047
00048 if (cloneClusters() && newHit->isValid()
00049 && ((*hit)->geographicalId().det() == DetId::Tracker)) {
00050 clusterStorer_.addCluster( *selHits_, hidx_ );
00051 }
00052 }
00053 }
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 }
00072