#include <RecoEgamma/EgammaPhotonAlgos/interface/OutInConversionTrackFinder.h>
Public Member Functions | |
OutInConversionTrackFinder (const edm::EventSetup &es, const edm::ParameterSet &config) | |
virtual std::vector< Trajectory > | tracks (const TrajectorySeedCollection seeds, TrackCandidateCollection &candidates) const |
virtual | ~OutInConversionTrackFinder () |
Private Attributes | |
RedundantSeedCleaner * | theSeedCleaner_ |
TrajectoryCleanerBySharedHits * | theTrajectoryCleaner_ |
Definition at line 33 of file OutInConversionTrackFinder.h.
OutInConversionTrackFinder::OutInConversionTrackFinder | ( | const edm::EventSetup & | es, | |
const edm::ParameterSet & | config | |||
) |
Definition at line 26 of file OutInConversionTrackFinder.cc.
References ConversionTrackFinder::conf_, Exception, edm::ParameterSet::getParameter(), theSeedCleaner_, and theTrajectoryCleaner_.
00027 : ConversionTrackFinder( es, conf ) 00028 { 00029 00030 00031 theTrajectoryCleaner_ = new TrajectoryCleanerBySharedHits(); 00032 00033 // get the seed cleaner 00034 std::string cleaner = conf_.getParameter<std::string>("OutInRedundantSeedCleaner"); 00035 if (cleaner == "SeedCleanerByHitPosition") { 00036 theSeedCleaner_ = new SeedCleanerByHitPosition(); 00037 } else if (cleaner == "CachingSeedCleanerByHitPosition") { 00038 theSeedCleaner_ = new CachingSeedCleanerByHitPosition(); 00039 } else if (cleaner == "CachingSeedCleanerBySharedInput") { 00040 theSeedCleaner_ = new CachingSeedCleanerBySharedInput(); 00041 } else if (cleaner == "none") { 00042 theSeedCleaner_ = 0; 00043 } else { 00044 throw cms::Exception("OutInRedundantSeedCleaner not found", cleaner); 00045 } 00046 00047 00048 00049 00050 00051 }
OutInConversionTrackFinder::~OutInConversionTrackFinder | ( | ) | [virtual] |
Definition at line 56 of file OutInConversionTrackFinder.cc.
References theSeedCleaner_, and theTrajectoryCleaner_.
00056 { 00057 00058 delete theTrajectoryCleaner_; 00059 if (theSeedCleaner_) delete theSeedCleaner_; 00060 00061 }
std::vector< Trajectory > OutInConversionTrackFinder::tracks | ( | const TrajectorySeedCollection | seeds, | |
TrackCandidateCollection & | candidates | |||
) | const [virtual] |
Implements ConversionTrackFinder.
Definition at line 64 of file OutInConversionTrackFinder.cc.
References RedundantSeedCleaner::add(), TrajectoryCleanerBySharedHits::clean(), RedundantSeedCleaner::done(), PV3DBase< T, PVType, FrameType >::eta(), MeasurementTracker::geomTracker(), RedundantSeedCleaner::good(), i, TrackingGeometry::idToDet(), RedundantSeedCleaner::init(), TransientInitialStateEstimator::innerState(), it, LogDebug, PV3DBase< T, PVType, FrameType >::perp(), PV3DBase< T, PVType, FrameType >::phi(), precomputed_value_sort(), edm::OwnVector< T, P >::push_back(), HLT_VtxMuL3::result, edm::OwnVector< T, P >::size(), state, GeomDet::surface(), ConversionTrackFinder::theCkfTrajectoryBuilder_, ConversionTrackFinder::theInitialState_, ConversionTrackFinder::theMeasurementTracker_, theSeedCleaner_, theTrajectoryCleaner_, Surface::toGlobal(), and TrajectoryBuilder::trajectories().
Referenced by ConversionTrackCandidateProducer::buildCollections(), and SoftConversionTrackCandidateProducer::buildCollections().
00065 { 00066 00067 00068 // std::cout << "OutInConversionTrackFinder::tracks getting " << outInSeeds.size() << " Out-In seeds " << "\n";; 00069 00070 std::vector<Trajectory> tmpO; 00071 tmpO.erase(tmpO.begin(), tmpO.end() ) ; 00072 00073 std::vector<Trajectory> result; 00074 result.erase(result.begin(), result.end() ) ; 00075 00076 00077 std::vector<Trajectory> rawResult; 00078 if (theSeedCleaner_) theSeedCleaner_->init( &rawResult ); 00079 00080 00082 /* 00083 for(TrajectorySeedCollection::const_iterator iSeed=outInSeeds.begin(); iSeed!=outInSeeds.end();iSeed++){ 00084 DetId tmpId = DetId( iSeed->startingState().detId()); 00085 const GeomDet* tmpDet = theMeasurementTracker_->geomTracker()->idToDet( tmpId ); 00086 GlobalVector gv = tmpDet->surface().toGlobal( iSeed->startingState().parameters().momentum() ); 00087 00088 LogDebug("OutInConversionTrackFinder") << " OutInConversionTrackFinder::tracks hits in the seed " << iSeed->nHits() << "\n"; 00089 LogDebug("OutInConversionTrackFinder")<< " OutInConversionTrackFinder::tracks seed starting state position " << iSeed->startingState().parameters().position() << " momentum " << iSeed->startingState().parameters().momentum() << " charge " << iSeed->startingState().parameters().charge() << " R " << gv.perp() << " eta " << gv.eta() << " phi " << gv.phi() << "\n"; 00090 00091 TrajectorySeed::range hitRange = iSeed->recHits(); 00092 for (TrajectorySeed::const_iterator ihit = hitRange.first; ihit != hitRange.second; ihit++) { 00093 00094 if ( ihit->isValid() ) { 00095 00096 LogDebug("OutInConversionTrackFinder") << " Valid hit global position " << theMeasurementTracker_->geomTracker()->idToDet((ihit)->geographicalId())->surface().toGlobal((ihit)->localPosition()) << " R " << theMeasurementTracker_->geomTracker()->idToDet((ihit)->geographicalId())->surface().toGlobal((ihit)->localPosition()).perp() << " phi " << theMeasurementTracker_->geomTracker()->idToDet((ihit)->geographicalId())->surface().toGlobal((ihit)->localPosition()).phi() << " eta " << theMeasurementTracker_->geomTracker()->idToDet((ihit)->geographicalId())->surface().toGlobal((ihit)->localPosition()).eta() << "\n" ; 00097 00098 } 00099 } 00100 } 00101 00102 */ 00103 00104 00105 00106 00107 00108 int goodSeed=0; 00109 std::vector<Trajectory> theTmpTrajectories; 00110 for(TrajectorySeedCollection::const_iterator iSeed=outInSeeds.begin(); iSeed!=outInSeeds.end();iSeed++){ 00111 00112 theTmpTrajectories.clear(); 00113 00114 if (!theSeedCleaner_ || theSeedCleaner_->good(&(*iSeed))) { 00115 goodSeed++; 00116 00117 00118 DetId tmpId = DetId( iSeed->startingState().detId()); 00119 const GeomDet* tmpDet = theMeasurementTracker_->geomTracker()->idToDet( tmpId ); 00120 GlobalVector gv = tmpDet->surface().toGlobal( iSeed->startingState().parameters().momentum() ); 00121 00122 // std::cout << " OutInConversionTrackFinder::tracks hits in the seed " << iSeed->nHits() << "\n"; 00123 LogDebug("OutInConversionTrackFinder") << " OutInConversionTrackFinder::tracks seed starting state position " << iSeed->startingState().parameters().position() << " momentum " << iSeed->startingState().parameters().momentum() << " charge " << iSeed->startingState().parameters().charge() << " R " << gv.perp() << " eta " << gv.eta() << " phi " << gv.phi() << "\n"; 00124 00125 00126 theCkfTrajectoryBuilder_->trajectories(*iSeed, theTmpTrajectories); 00127 00128 LogDebug("OutInConversionTrackFinder") << "OutInConversionTrackFinder::track returned " << theTmpTrajectories.size() << " trajectories" << "\n"; 00129 00130 theTrajectoryCleaner_->clean(theTmpTrajectories); 00131 00132 for(std::vector<Trajectory>::const_iterator it=theTmpTrajectories.begin(); 00133 it!=theTmpTrajectories.end(); it++){ 00134 if( it->isValid() ) { 00135 rawResult.push_back(*it); 00136 if (theSeedCleaner_) theSeedCleaner_->add( & (*it) ); 00137 } 00138 } 00139 00140 00141 } 00142 } // end loop over the seeds 00143 LogDebug("OutInConversionTrackFinder") << " OutInConversionTrackFinder::track Good seeds " << goodSeed << "\n"; 00144 LogDebug("OutInConversionTrackFinder") << "OutInConversionTrackFinder::track rawResult size after cleaning " << rawResult.size() << "\n"; 00145 00146 if (theSeedCleaner_) theSeedCleaner_->done(); 00147 00148 std::vector<Trajectory> unsmoothedResult; 00149 theTrajectoryCleaner_->clean(rawResult); 00150 00151 for (std::vector<Trajectory>::const_iterator itraw = rawResult.begin(); itraw != rawResult.end(); itraw++) { 00152 if((*itraw).isValid()) { 00153 tmpO.push_back( *itraw ); 00154 LogDebug("OutInConversionTrackFinder") << " rawResult num hits " << (*itraw).foundHits() << "\n"; 00155 } 00156 } 00157 00158 00159 00160 LogDebug("OutInConversionTrackFinder") << "OutInConversionTrackFinder tmpO size " << tmpO.size() << " before sorting " << "\n"; 00161 // for (std::vector<Trajectory>::const_iterator it =tmpO.begin(); it != tmpO.end(); it++) { 00162 // LogDebug("OutInConversionTrackFinder") << "OutInConversionTrackFinder tmpO num of hits " << (*it).foundHits() << " before ordering " << "\n"; 00163 // } 00164 00165 precomputed_value_sort( tmpO.begin(), tmpO.end(), ExtractNumOfHits() ); 00166 00167 00168 LogDebug("OutInConversionTrackFinder") << "OutInConversionTrackFinder tmpO after sorting " << "\n"; 00169 // for (std::vector<Trajectory>::const_iterator it =tmpO.begin(); it != tmpO.end(); it++) { 00170 // LogDebug("OutInConversionTrackFinder") << "OutInConversionTrackFinder tmpO num of hits " << (*it).foundHits() << "\n"; 00171 // } 00172 00173 for (int i=tmpO.size()-1; i>=0; i--) { 00174 unsmoothedResult.push_back( tmpO[i] ); 00175 } 00176 LogDebug("OutInConversionTrackFinder") << "OutInConversionTrackFinder unsmoothedResult size " << unsmoothedResult.size() << "\n"; 00177 00178 // for (std::vector<Trajectory>::const_iterator it = unsmoothedResult.begin(); it != unsmoothedResult.end(); it++) { 00179 // LogDebug("OutInConversionTrackFinder") << "OutInConversionTrackFinder unsmoothedResult after reordering " <<(*it).foundHits() << "\n"; 00180 // } 00181 00182 00183 00184 // Check if the inner state is valid 00185 tmpO.clear(); 00186 LogDebug("OutInConversionTrackFinder") << "OutInConversionTrackFinder tmpO size " << tmpO.size() << " after clearing " << "\n"; 00187 for (std::vector<Trajectory>::const_iterator it = unsmoothedResult.begin(); it != unsmoothedResult.end(); it++) { 00188 if( !it->isValid() ) continue; 00189 00190 00191 std::pair<TrajectoryStateOnSurface, const GeomDet*> initState = theInitialState_->innerState( *it); 00192 // LogDebug("OutInConversionTrackFinder") << " Initial state parameters " << initState.first << "\n"; 00193 00194 // temporary protection againt invalid initial states 00195 if (! initState.first.isValid() || initState.second == 0) { 00196 LogDebug("OutInConversionTrackFinder") << "invalid innerState, will not make TrackCandidate" << "\n";; 00197 continue; 00198 } 00199 tmpO.push_back(*it); 00200 } 00201 00202 00203 LogDebug("OutInConversionTrackFinder") << "OutInConversionTrackFinder tmpO size " << tmpO.size() << " after filling " << "\n"; 00204 if ( tmpO.size() ) { 00205 std::vector<Trajectory>::iterator it=tmpO.begin(); 00206 00207 // only send out the two best tracks 00208 result.push_back(*it); 00209 if ( tmpO.size() > 1) result.push_back(*(++it)); 00210 } 00211 00212 // for (std::vector<Trajectory>::const_iterator it =result.begin(); it != result.end(); it++) { 00213 // LogDebug("OutInConversionTrackFinder") << "OutInConversionTrackFinder Result num of hits " << (*it).foundHits() << "\n"; 00214 //} 00215 00216 00217 // Converted to track candidates 00218 for (std::vector<Trajectory>::const_iterator it = result.begin(); it != result.end(); it++) { 00219 if( !it->isValid() ) continue; 00220 00221 edm::OwnVector<TrackingRecHit> recHits; 00222 Trajectory::RecHitContainer thits = it->recHits(); 00223 for (Trajectory::RecHitContainer::const_iterator hitIt = thits.begin(); hitIt != thits.end(); hitIt++) { 00224 recHits.push_back( (**hitIt).hit()->clone()); 00225 } 00226 00227 00228 std::pair<TrajectoryStateOnSurface, const GeomDet*> initState = theInitialState_->innerState( *it); 00229 PTrajectoryStateOnDet* state = TrajectoryStateTransform().persistentState( initState.first, initState.second->geographicalId().rawId()); 00230 LogDebug("OutInConversionTrackFinder")<< "OutInConversionTrackFinder Number of hits for the track candidate " << recHits.size() << " TSOS charge " << initState.first.charge() << "\n"; 00231 output_p.push_back(TrackCandidate(recHits, it->seed(),*state ) ); 00232 delete state; 00233 } 00234 00235 00236 // std::cout << " Returning " << result.size() << "Out In Trajectories " << "\n"; 00237 00238 00239 return result; 00240 00241 00242 00243 }
Definition at line 52 of file OutInConversionTrackFinder.h.
Referenced by OutInConversionTrackFinder(), tracks(), and ~OutInConversionTrackFinder().
Definition at line 51 of file OutInConversionTrackFinder.h.
Referenced by OutInConversionTrackFinder(), tracks(), and ~OutInConversionTrackFinder().