CMS 3D CMS Logo

OutInConversionTrackFinder Class Reference

Id
OutInConversionTrackFinder.h,v 1.9 2008/05/08 20:41:27 nancy Exp
Date
2008/05/08 20:41:27
Revision
1.9
More...

#include <RecoEgamma/EgammaPhotonAlgos/interface/OutInConversionTrackFinder.h>

Inheritance diagram for OutInConversionTrackFinder:

ConversionTrackFinder

List of all members.

Public Member Functions

 OutInConversionTrackFinder (const edm::EventSetup &es, const edm::ParameterSet &config)
virtual std::vector< Trajectorytracks (const TrajectorySeedCollection seeds, TrackCandidateCollection &candidates) const
virtual ~OutInConversionTrackFinder ()

Private Attributes

RedundantSeedCleanertheSeedCleaner_
TrajectoryCleanerBySharedHitstheTrajectoryCleaner_


Detailed Description

Id
OutInConversionTrackFinder.h,v 1.9 2008/05/08 20:41:27 nancy Exp
Date
2008/05/08 20:41:27
Revision
1.9

Author:
Nancy Marinelli, U. of Notre Dame, US

Definition at line 33 of file OutInConversionTrackFinder.h.


Constructor & Destructor Documentation

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 }


Member Function Documentation

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 }


Member Data Documentation

RedundantSeedCleaner* OutInConversionTrackFinder::theSeedCleaner_ [private]

Definition at line 52 of file OutInConversionTrackFinder.h.

Referenced by OutInConversionTrackFinder(), tracks(), and ~OutInConversionTrackFinder().

TrajectoryCleanerBySharedHits* OutInConversionTrackFinder::theTrajectoryCleaner_ [private]

Definition at line 51 of file OutInConversionTrackFinder.h.

Referenced by OutInConversionTrackFinder(), tracks(), and ~OutInConversionTrackFinder().


The documentation for this class was generated from the following files:
Generated on Tue Jun 9 18:29:26 2009 for CMSSW by  doxygen 1.5.4