CMS 3D CMS Logo

IntermediateTrajectoryCleaner Class Reference

#include <RecoTracker/CkfPattern/interface/IntermediateTrajectoryCleaner.h>

List of all members.

Static Public Member Functions

static void clean (TempTrajectoryContainer &tracks)

Private Types

typedef
TransientTrackingRecHit::ConstRecHitPointer 
ConstRecHitPointer
typedef
BaseCkfTrajectoryBuilder::TempTrajectoryContainer 
TempTrajectoryContainer


Detailed Description

Definition at line 8 of file IntermediateTrajectoryCleaner.h.


Member Typedef Documentation

typedef TransientTrackingRecHit::ConstRecHitPointer IntermediateTrajectoryCleaner::ConstRecHitPointer [private]

Definition at line 10 of file IntermediateTrajectoryCleaner.h.

typedef BaseCkfTrajectoryBuilder::TempTrajectoryContainer IntermediateTrajectoryCleaner::TempTrajectoryContainer [private]

Definition at line 9 of file IntermediateTrajectoryCleaner.h.


Member Function Documentation

void IntermediateTrajectoryCleaner::clean ( IntermediateTrajectoryCleaner::TempTrajectoryContainer theTrajectories  )  [static]

Definition at line 14 of file IntermediateTrajectoryCleaner.cc.

References TrackingRecHit::all, and TempTrajectory::isValid().

Referenced by GroupedCkfTrajectoryBuilder::groupedLimitedCandidates(), and CkfTrajectoryBuilder::limitedCandidates().

00014                                                                                                           {
00015 
00016   if (theTrajectories.empty()) return;
00017   if (theTrajectories[0].measurements().size()<4) return;
00018 
00019   for (TempTrajectoryContainer::iterator firstTraj=theTrajectories.begin(), firstEnd=theTrajectories.end() - 1;
00020      firstTraj != firstEnd; ++firstTraj) {
00021 
00022     if ( (!firstTraj->isValid()) ||
00023          (!firstTraj->lastMeasurement().recHit()->isValid()) ) continue;
00024     
00025     TempTrajectory::DataContainer::const_iterator itFirst = firstTraj->measurements().rbegin();
00026     ConstRecHitPointer first_hit1 = itFirst->recHit(); --itFirst; 
00027     ConstRecHitPointer first_hit2 = itFirst->recHit(); --itFirst; 
00028     ConstRecHitPointer first_hit3 = itFirst->recHit();
00029 
00030     bool fh2Valid = first_hit2->isValid();
00031 
00032     for (TempTrajectoryContainer::iterator secondTraj = (firstTraj+1), secondEnd = theTrajectories.end();
00033        secondTraj != secondEnd; ++secondTraj) {
00034 
00035       if ( (!secondTraj->isValid()) ||
00036            (!secondTraj->lastMeasurement().recHit()->isValid()) ) continue;
00037 
00038         TempTrajectory::DataContainer::const_iterator itSecond = secondTraj->measurements().rbegin();
00039         ConstRecHitPointer second_hit1 = itSecond->recHit(); --itSecond; 
00040         ConstRecHitPointer second_hit2 = itSecond->recHit(); --itSecond; 
00041         ConstRecHitPointer second_hit3 = itSecond->recHit();
00042 
00043         if ( &(*first_hit3) == &(*second_hit3) ) {
00044           if (fh2Valid ^ second_hit2->isValid()) { // ^ = XOR!
00045             if ( first_hit1->hit()->sharesInput( second_hit1->hit(), TrackingRecHit::all ) ){
00046               
00047               if (!fh2Valid) {
00048                 firstTraj->invalidate();
00049                 break;
00050               }
00051               // else // if (!second_hit2->isValid())  // should be always true, as we did XOR !
00052               secondTraj->invalidate();
00053             }
00054           }
00055         }
00056     }
00057   }
00058   theTrajectories.erase(std::remove_if( theTrajectories.begin(),theTrajectories.end(),
00059                                         std::not1(std::mem_fun_ref(&TempTrajectory::isValid))),
00060  //                                     boost::bind(&TempTrajectory::isValid,_1)), 
00061                         theTrajectories.end());
00062 }


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