CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_5_2_7_hltpatch2/src/TrackingTools/TrackFitters/src/KFSplittingFitter.cc

Go to the documentation of this file.
00001 #include "TrackingTools/TrackFitters/interface/KFSplittingFitter.h"
00002 #include "TrackingTools/TrackFitters/interface/TrajectoryStateWithArbitraryError.h"
00003 #include "TrackingTools/TrackFitters/interface/RecHitSplitter.h"
00004 #include "TrackingTools/TrackFitters/interface/RecHitSorter.h"
00005 #include "TrackingTools/TransientTrackingRecHit/interface/TransientTrackingRecHit.h"
00006 
00007 std::vector<Trajectory> KFSplittingFitter::fit(const Trajectory& aTraj) const {
00008   
00009   typedef RecHitSplitter::RecHitContainer        RecHitContainer;
00010   
00011   if(aTraj.empty()) return std::vector<Trajectory>();
00012   
00013   TM firstTM = aTraj.firstMeasurement();
00014   TSOS firstTsos = 
00015     TrajectoryStateWithArbitraryError()(firstTM.predictedState());
00016   
00017   RecHitContainer hits = aTraj.recHits();
00018   RecHitContainer result; 
00019   result.reserve(hits.size());
00020   for(RecHitContainer::iterator ihit = hits.begin(); ihit != hits.end();
00021       ihit++) {
00022     if(!(**ihit).isValid()) result.push_back(*ihit);
00023     else if((**ihit).transientHits().size() == 1) result.push_back(*ihit);
00024     else {
00025       RecHitContainer splitted = RecHitSplitter().split((**ihit).transientHits());
00026       RecHitContainer sorted = 
00027         RecHitSorter().sortHits(splitted, aTraj.direction());
00028       for (RecHitContainer::iterator srt = sorted.begin(); srt != sorted.end(); srt++) {
00029         result.push_back(*srt);
00030         //      result.insert(result.end(), sorted.begin(), sorted.end());
00031       }
00032     }
00033   }
00034   
00035 
00036   return KFTrajectoryFitter::fit(aTraj.seed(), result, firstTsos);
00037   
00038 }
00039 
00040 std::vector<Trajectory> KFSplittingFitter::fit(const TrajectorySeed& aSeed,
00041                                                const RecHitContainer& hits, 
00042                                                const TSOS& firstPredTsos) const {
00043 
00044   RecHitContainer result;
00045   result.reserve(hits.size());
00046   for(RecHitContainer::const_iterator ihit = hits.begin(); ihit != hits.end();
00047       ihit++) {
00048     if(!(**ihit).isValid()) result.push_back(*ihit);
00049     else if((**ihit).transientHits().size() == 1) result.push_back(*ihit);
00050     else {      
00051       RecHitContainer splitted = RecHitSplitter().split((**ihit).transientHits());
00052       RecHitContainer sorted = 
00053         RecHitSorter().sortHits(splitted, aSeed.direction());
00054       for (RecHitContainer::iterator srt = sorted.begin(); srt != sorted.end(); srt++) {
00055         result.push_back(*srt);
00056         //      result.insert(result.end(), sorted.begin(), sorted.end());
00057       }
00058     }
00059   }
00060   
00061   return KFTrajectoryFitter::fit(aSeed, result, firstPredTsos);
00062   
00063 }
00064