![]() |
![]() |
#include <RecoTracker/CkfPattern/interface/GroupedCkfTrajectoryBuilder.h>
Public Member Functions | |
double | chiSquareCut () |
Chi**2 Cut on the new Trajectory Measurements to consider. | |
const Chi2MeasurementEstimatorBase & | estimator () const |
GroupedCkfTrajectoryBuilder (const edm::ParameterSet &conf, const TrajectoryStateUpdator *updator, const Propagator *propagatorAlong, const Propagator *propagatorOpposite, const Chi2MeasurementEstimatorBase *estimator, const TransientTrackingRecHitBuilder *RecHitBuilder, const MeasurementTracker *measurementTracker, const TrajectoryFilter *filter) | |
constructor from ParameterSet | |
float | lostHitPenalty () |
Chi**2 Penalty for each lost hit. | |
double | mass () |
Mass hypothesis used for propagation. | |
int | maxCand () |
Maximum number of trajectory candidates to propagate to the next layer. | |
double | ptCut () |
Tells whether an intermediary cleaning stage should take place during TB. | |
void | rebuildSeedingRegion (const TrajectorySeed &, TrajectoryContainer &result) const |
trajectories re-building in the seeding region. | |
virtual void | setEvent (const edm::Event &event) const |
set Event for the internal MeasurementTracker data member | |
void | trajectories (const TrajectorySeed &, TrajectoryContainer &ret, const TrackingRegion &) const |
trajectories building starting from a seed with a region | |
TrajectoryContainer | trajectories (const TrajectorySeed &, const TrackingRegion &) const |
trajectories building starting from a seed with a region | |
void | trajectories (const TrajectorySeed &, TrajectoryContainer &ret) const |
trajectories building starting from a seed, return in an already allocated vector | |
TrajectoryContainer | trajectories (const TrajectorySeed &) const |
trajectories building starting from a seed | |
const TrajectoryStateUpdator & | updator () const |
virtual | ~GroupedCkfTrajectoryBuilder () |
destructor | |
Protected Member Functions | |
virtual void | analyseMeasurements (const std::vector< TM > &meas, const Trajectory &traj) const |
virtual void | analyseResult (const TrajectoryContainer &result) const |
virtual void | analyseSeed (const TrajectorySeed &seed) const |
Private Types | |
enum | work_MaxSize_Size_ { work_MaxSize_ = 50 } |
Private Member Functions | |
bool | advanceOneLayer (TempTrajectory &traj, const TrajectoryFilter *regionalCondition, const Propagator *propagator, TempTrajectoryContainer &newCand, TempTrajectoryContainer &result) const |
void | backwardFit (TempTrajectory &candidate, unsigned int nSeed, const TrajectoryFitter &fitter, TempTrajectoryContainer &fittedTracks, std::vector< const TrackingRecHit * > &remainingHits) const |
void | buildTrajectories (const TrajectorySeed &, TrajectoryContainer &ret, const TrajectoryFilter *) const |
common part of both public trajectory building methods | |
GroupedCkfTrajectoryBuilder (const GroupedCkfTrajectoryBuilder &) | |
no copy constructor | |
void | groupedIntermediaryClean (TempTrajectoryContainer &theTrajectories) const |
intermediate cleaning in the case of grouped measurements | |
void | groupedLimitedCandidates (TempTrajectory &startingTraj, const TrajectoryFilter *regionalCondition, const Propagator *propagator, TempTrajectoryContainer &result) const |
void | layers (const TempTrajectory::DataContainer &measurements, std::vector< const DetLayer * > &fillme) const |
fills in a list of layers from a container of TrajectoryMeasurements the "fillme" vector is cleared beforehand. | |
GroupedCkfTrajectoryBuilder & | operator= (const GroupedCkfTrajectoryBuilder &) |
no assignment operator | |
PropagationDirection | oppositeDirection (PropagationDirection dir) const |
change of propagation direction | |
int | rebuildSeedingRegion (const std::vector< const TrackingRecHit * > &seedHits, TempTrajectory &candidate, TempTrajectoryContainer &result) const |
void | rebuildSeedingRegion (TempTrajectory &startingTraj, TempTrajectoryContainer &result) const |
try to find additional hits in seeding region | |
bool | tkxor (bool a, bool b) const |
bool | verifyHits (TempTrajectory::DataContainer::const_iterator rbegin, size_t maxDepth, const std::vector< const TrackingRecHit * > &hits) const |
Verifies presence of a RecHits in a range of TrajectoryMeasurements. | |
Private Attributes | |
bool | theAlwaysUseInvalid |
bool | theBestHitOnly |
Use only best hit / group when building segments. | |
double | theChiSquareCut |
Chi**2 Cut on the new Trajectory Measurements to consider. | |
TrajectoryFilter * | theConfigurableCondition |
float | theFoundHitBonus |
Chi**2 bonus for each found hit (favours candidates with more measurements). | |
bool | theIntermediateCleaning |
Tells whether an intermediary cleaning stage should take place during TB. | |
bool | theLockHits |
Lock hits when building segments in a layer. | |
float | theLostHitPenalty |
Chi**2 Penalty for each lost hit. | |
double | theMass |
Mass hypothesis used for propagation. | |
int | theMaxCand |
Maximum number of trajectory candidates to propagate to the next layer. | |
unsigned int | theMinNrOf2dHitsForRebuild |
Minimum nr. | |
unsigned int | theMinNrOfHitsForRebuild |
Minimum nr. | |
double | theptCut |
ptCut | |
bool | theRequireSeedHitsInRebuild |
Only accept rebuilt trajectories if they contain the seed hits. | |
TempTrajectoryContainer | work_ |
Definition at line 23 of file GroupedCkfTrajectoryBuilder.h.
enum GroupedCkfTrajectoryBuilder::work_MaxSize_Size_ [private] |
Definition at line 196 of file GroupedCkfTrajectoryBuilder.h.
00196 { work_MaxSize_ = 50 }; // if it grows above this number, it is forced to resize to half this amount when cleared
GroupedCkfTrajectoryBuilder::GroupedCkfTrajectoryBuilder | ( | const edm::ParameterSet & | conf, | |
const TrajectoryStateUpdator * | updator, | |||
const Propagator * | propagatorAlong, | |||
const Propagator * | propagatorOpposite, | |||
const Chi2MeasurementEstimatorBase * | estimator, | |||
const TransientTrackingRecHitBuilder * | RecHitBuilder, | |||
const MeasurementTracker * | measurementTracker, | |||
const TrajectoryFilter * | filter | |||
) |
constructor from ParameterSet
Definition at line 61 of file GroupedCkfTrajectoryBuilder.cc.
References edm::ParameterSet::getParameter(), max, theAlwaysUseInvalid, theBestHitOnly, theFoundHitBonus, theIntermediateCleaning, theLockHits, theLostHitPenalty, theMaxCand, theMinNrOf2dHitsForRebuild, theMinNrOfHitsForRebuild, and theRequireSeedHitsInRebuild.
00068 : 00069 00070 BaseCkfTrajectoryBuilder(conf, 00071 updator, propagatorAlong,propagatorOpposite, 00072 estimator, recHitBuilder, measurementTracker,filter) 00073 { 00074 // fill data members from parameters (eventually data members could be dropped) 00075 // 00076 theMaxCand = conf.getParameter<int>("maxCand"); 00077 00078 theLostHitPenalty = conf.getParameter<double>("lostHitPenalty"); 00079 theFoundHitBonus = conf.getParameter<double>("foundHitBonus"); 00080 theIntermediateCleaning = conf.getParameter<bool>("intermediateCleaning"); 00081 theAlwaysUseInvalid = conf.getParameter<bool>("alwaysUseInvalidHits"); 00082 theLockHits = conf.getParameter<bool>("lockHits"); 00083 theBestHitOnly = conf.getParameter<bool>("bestHitOnly"); 00084 theMinNrOf2dHitsForRebuild = 2; 00085 theRequireSeedHitsInRebuild = conf.getParameter<bool>("requireSeedHitsInRebuild"); 00086 theMinNrOfHitsForRebuild = max(0,conf.getParameter<int>("minNrOfHitsForRebuild")); 00087 00088 /* ======= B.M. to be ported later ======= 00089 bool setOK = thePropagator->setMaxDirectionChange(1.6); 00090 if (!setOK) 00091 cout << "GroupedCkfTrajectoryBuilder WARNING: " 00092 << "propagator does not support setMaxDirectionChange" 00093 << endl; 00094 // addStopCondition(theMinPtStopCondition); 00095 theConfigurableCondition = createAlgo<TrajectoryFilter>(componentConfig("StopCondition")); 00096 ===================================== */ 00097 00098 }
virtual GroupedCkfTrajectoryBuilder::~GroupedCkfTrajectoryBuilder | ( | ) | [inline, virtual] |
GroupedCkfTrajectoryBuilder::GroupedCkfTrajectoryBuilder | ( | const GroupedCkfTrajectoryBuilder & | ) | [private] |
no copy constructor
bool GroupedCkfTrajectoryBuilder::advanceOneLayer | ( | TempTrajectory & | traj, | |
const TrajectoryFilter * | regionalCondition, | |||
const Propagator * | propagator, | |||
TempTrajectoryContainer & | newCand, | |||
TempTrajectoryContainer & | result | |||
) | const [private] |
Definition at line 344 of file GroupedCkfTrajectoryBuilder.cc.
References BaseCkfTrajectoryBuilder::addToResult(), GenMuonPlsPt100GeV_cfg::cout, TrajectoryStateOnSurface::curvilinearError(), lat::endl(), TransverseImpactPointExtrapolator::extrapolate(), BaseCkfTrajectoryBuilder::findStateAndLayers(), cmsutils::bqueue< T >::front(), TrajectoryStateOnSurface::globalMomentum(), TrajectoryStateOnSurface::globalPosition(), i, TrajectoryStateOnSurface::isValid(), TempTrajectory::lastLayer(), LogDebug, CurvilinearTrajectoryError::matrix(), middle, TrackingRecHit::missing, PV3DBase< T, PVType, FrameType >::perp(), GloballyPositioned< T >::position(), TempTrajectory::push(), Cylinder::radius(), TrajectorySegmentBuilder::segments(), cmsutils::bqueue< T >::size(), ForwardDetLayer::specificSurface(), BarrelDetLayer::specificSurface(), funct::sqrt(), theAlwaysUseInvalid, theBestHitOnly, BaseCkfTrajectoryBuilder::theEstimator, BaseCkfTrajectoryBuilder::theForwardPropagator, BaseCkfTrajectoryBuilder::theLayerMeasurements, theLockHits, BaseCkfTrajectoryBuilder::theMeasurementTracker, BaseCkfTrajectoryBuilder::theUpdator, BaseCkfTrajectoryBuilder::toBeContinued(), and PV3DBase< T, PVType, FrameType >::z().
Referenced by groupedLimitedCandidates().
00349 { 00350 std::pair<TSOS,std::vector<const DetLayer*> > stateAndLayers = findStateAndLayers(traj); 00351 vector<const DetLayer*>::iterator layerBegin = stateAndLayers.second.begin(); 00352 vector<const DetLayer*>::iterator layerEnd = stateAndLayers.second.end(); 00353 00354 // if (nl.empty()) { 00355 // addToResult(traj,result); 00356 // return false; 00357 // } 00358 00359 #ifdef DBG_GCTB 00360 vector<const DetLayer*> & nl = stateAndLayers.second; 00361 #include "TrackingTools/DetLayers/interface/BarrelDetLayer.h" 00362 #include "TrackingTools/DetLayers/interface/ForwardDetLayer.h" 00363 //B.M. TkLayerName layerName; 00364 //B.M. cout << "Started from " << layerName(traj.lastLayer()) 00365 const BarrelDetLayer* sbdl = dynamic_cast<const BarrelDetLayer*>(traj.lastLayer()); 00366 const ForwardDetLayer* sfdl = dynamic_cast<const ForwardDetLayer*>(traj.lastLayer()); 00367 if (sbdl) cout << "Started from " << traj.lastLayer() << " r " << sbdl->specificSurface().radius() << endl; 00368 if (sfdl) cout << "Started from " << traj.lastLayer() << " z " << sfdl->specificSurface().position().z() << endl; 00369 cout << "Trying to go to"; 00370 for ( vector<const DetLayer*>::iterator il=nl.begin(); 00371 il!=nl.end(); il++){ 00372 //B.M. cout << " " << layerName(*il) << " " << *il << endl; 00373 const BarrelDetLayer* bdl = dynamic_cast<const BarrelDetLayer*>(*il); 00374 const ForwardDetLayer* fdl = dynamic_cast<const ForwardDetLayer*>(*il); 00375 00376 if (bdl) cout << " r " << bdl->specificSurface().radius() << endl; 00377 if (fdl) cout << " z " << fdl->specificSurface().position().z() << endl; 00378 //cout << " " << *il << endl; 00379 } 00380 cout << endl; 00381 #endif 00382 00383 bool foundSegments(false); 00384 bool foundNewCandidates(false); 00385 for ( vector<const DetLayer*>::iterator il=layerBegin; 00386 il!=layerEnd; il++) { 00387 00388 TSOS stateToUse = stateAndLayers.first; 00389 if ((*il)==traj.lastLayer()) 00390 { 00391 LogDebug("CkfPattern")<<" self propagating in advanceOneLayer.\n from: \n"<<stateToUse; 00392 //self navigation case 00393 // go to a middle point first 00394 TransverseImpactPointExtrapolator middle; 00395 GlobalPoint center(0,0,0); 00396 stateToUse = middle.extrapolate(stateToUse, center, *theForwardPropagator); 00397 00398 if (!stateToUse.isValid()) continue; 00399 LogDebug("CkfPattern")<<"to: "<<stateToUse; 00400 } 00401 00402 TrajectorySegmentBuilder layerBuilder(theMeasurementTracker, 00403 theLayerMeasurements, 00404 **il,*propagator, 00405 *theUpdator,*theEstimator, 00406 theLockHits,theBestHitOnly); 00407 00408 #ifdef DBG_GCTB 00409 cout << "GCTB: starting from r / z = " << stateToUse.globalPosition().perp() 00410 << " / " << stateToUse.globalPosition().z() << " , pt / pz = " 00411 << stateToUse.globalMomentum().perp() << " / " 00412 << stateToUse.globalMomentum().z() << " for layer at " 00413 << *il << endl; 00414 cout << " errors:"; 00415 for ( int i=0; i<5; i++ ) cout << " " << sqrt(stateToUse.curvilinearError().matrix()(i,i)); 00416 cout << endl; 00417 00418 //cout << "GCTB: starting from r / phi / z = " << stateAndLayers.first.globalPosition().perp() 00419 //<< " / " << stateAndLayers.first.globalPosition().phi() 00420 //<< " / " << stateAndLayers.first.globalPosition().z() << " , pt / pz = " 00421 //<< stateAndLayers.first.globalMomentum().perp() << " / " 00422 //<< stateAndLayers.first.globalMomentum().z() << " for layer at " 00423 //<< *il << endl; 00424 //cout << " errors:"; 00425 //for ( int i=0; i<5; i++ ) cout << " " << sqrt(stateAndLayers.first.curvilinearError().matrix()(i,i)); 00426 //cout << endl; 00427 #endif 00428 00429 TempTrajectoryContainer segments= 00430 //layerBuilder.segments(stateAndLayers.first); 00431 layerBuilder.segments(stateToUse); 00432 00433 #ifdef DBG_GCTB 00434 cout << "GCTB: number of segments = " << segments.size() << endl; 00435 #endif 00436 00437 if ( !segments.empty() ) foundSegments = true; 00438 00439 for ( TempTrajectoryContainer::const_iterator is=segments.begin(); 00440 is!=segments.end(); is++ ) { 00441 // 00442 // assume "invalid hit only" segment is last in list 00443 // 00444 const TempTrajectory::DataContainer & measurements = is->measurements(); 00445 if ( !theAlwaysUseInvalid && is!=segments.begin() && measurements.size()==1 && 00446 (measurements.front().recHit()->getType() == TrackingRecHit::missing) ) break; 00447 // 00448 // create new candidate 00449 // 00450 TempTrajectory newTraj(traj); 00451 00452 newTraj.push(*is); 00453 //GIO// for ( vector<TM>::const_iterator im=measurements.begin(); 00454 //GIO// im!=measurements.end(); im++ ) newTraj.push(*im); 00455 //if ( toBeContinued(newTraj,regionalCondition) ) { TOBE FIXED 00456 if ( toBeContinued(newTraj) ) { 00457 00458 #ifdef DBG_GCTB 00459 cout << "GCTB: adding new trajectory to candidates" << endl; 00460 #endif 00461 00462 newCand.push_back(newTraj); 00463 foundNewCandidates = true; 00464 } 00465 else { 00466 00467 #ifdef DBG_GCTB 00468 cout << "GCTB: adding new trajectory to results" << endl; 00469 #endif 00470 00471 addToResult(newTraj,result); 00472 } 00473 } 00474 } 00475 00476 #ifdef DBG_GCTB 00477 if ( !foundSegments ) cout << "GCTB: adding input trajectory to result" << endl; 00478 #endif 00479 00480 if ( !foundSegments ) addToResult(traj,result); 00481 return foundNewCandidates; 00482 }
virtual void GroupedCkfTrajectoryBuilder::analyseMeasurements | ( | const std::vector< TM > & | meas, | |
const Trajectory & | traj | |||
) | const [inline, protected, virtual] |
virtual void GroupedCkfTrajectoryBuilder::analyseResult | ( | const TrajectoryContainer & | result | ) | const [inline, protected, virtual] |
virtual void GroupedCkfTrajectoryBuilder::analyseSeed | ( | const TrajectorySeed & | seed | ) | const [inline, protected, virtual] |
void GroupedCkfTrajectoryBuilder::backwardFit | ( | TempTrajectory & | candidate, | |
unsigned int | nSeed, | |||
const TrajectoryFitter & | fitter, | |||
TempTrajectoryContainer & | fittedTracks, | |||
std::vector< const TrackingRecHit * > & | remainingHits | |||
) | const [private] |
Definition at line 802 of file GroupedCkfTrajectoryBuilder.cc.
References GenMuonPlsPt100GeV_cfg::cout, TempTrajectory::direction(), Trajectory::direction(), end, lat::endl(), Trajectory::firstMeasurement(), TrajectoryFitter::fit(), TrackingRecHit::isValid(), TempTrajectory::measurements(), oppositeDirection(), Trajectory::push(), cmsutils::bqueue< T >::rbegin(), Trajectory::recHits(), cmsutils::bqueue< T >::rend(), TempTrajectory::seed(), Trajectory::seed(), theMinNrOfHitsForRebuild, and TrajectoryMeasurement::updatedState().
Referenced by rebuildSeedingRegion().
00807 { 00808 // 00809 // clear array of non-fitted hits 00810 // 00811 remainingHits.clear(); 00812 fittedTracks.clear(); 00813 // 00814 // skip candidates which are not exceeding the seed size 00815 // (should not happen) 00816 // 00817 if ( candidate.measurements().size()<=nSeed ) { 00818 fittedTracks.clear(); 00819 return; 00820 } 00821 #ifdef DBG2_GCTB 00822 { 00823 cout << "nSeed " << nSeed << endl; 00824 cout << "Old traj direction = " << candidate.direction() << endl; 00825 cmsutils::bqueue<TM> tms = candidate.measurements(); 00826 for (cmsutils::bqueue<TM>::const_iterator im=tms.rbegin(),end=tms.rend(); 00827 im!=end; --im ) { 00828 if ( im->recHit()->isValid() ) cout << im->recHit()->globalPosition(); 00829 else cout << "(-,-,-)"; 00830 cout << " layer " << im->layer(); 00831 cout << " fwdPred " << im->forwardPredictedState().isValid(); 00832 cout << " bwdPred " << im->backwardPredictedState().isValid(); 00833 cout << " upPred " << im->updatedState().isValid() << " ;"; 00834 //SimIdPrinter()(im->recHit()); 00835 cout << endl; 00836 } 00837 } 00838 #endif 00839 // 00840 // backward fit trajectory (excluding the seeding region) 00841 // 00842 TempTrajectory::DataContainer oldMeasurements(candidate.measurements()); 00843 // int nOld(oldMeasurements.size()); 00844 // const unsigned int nHitAllMin(5); 00845 // const unsigned int nHit2dMin(2); 00846 unsigned int nHit(0); // number of valid hits after seeding region 00847 //unsigned int nHit2d(0); // number of valid hits after seeding region with 2D info 00848 // use all hits except the first n (from seed), but require minimum 00849 // specified in configuration. 00850 //unsigned int nHitMin = max(oldMeasurements.size()-nSeed,theMinNrOfHitsForRebuild); 00851 unsigned int nHitMin = oldMeasurements.size()-nSeed; 00852 // we want to rebuild only if the number of measurements excluding the seed measurements is higher than the cut 00853 if (nHitMin<theMinNrOfHitsForRebuild){ 00854 fittedTracks.clear(); 00855 return; 00856 } 00857 //cout << "nHitMin " << nHitMin << endl; 00858 #ifdef DBG2_GCTB 00859 cout << "Sizes: " << oldMeasurements.size() << " / " << endl; 00860 #endif 00861 // 00862 // create input trajectory for backward fit 00863 // 00864 Trajectory fwdTraj(candidate.seed(),oppositeDirection(candidate.direction())); 00865 //const TrajectorySeed seed = TrajectorySeed(PTrajectoryStateOnDet(), TrajectorySeed::recHitContainer(), oppositeDirection(candidate.direction())); 00866 //Trajectory fwdTraj(seed, oppositeDirection(candidate.direction())); 00867 std::vector<const DetLayer*> bwdDetLayer; 00868 for ( TempTrajectory::DataContainer::const_iterator im=oldMeasurements.rbegin(); 00869 im!=oldMeasurements.rend(); --im) { 00870 const TrackingRecHit* hit = im->recHit()->hit(); 00871 // 00872 // add hits until required number is reached 00873 // 00874 if ( nHit<nHitMin ){//|| nHit2d<theMinNrOf2dHitsForRebuild ) { 00875 fwdTraj.push(*im); 00876 bwdDetLayer.push_back(im->layer()); 00877 // 00878 // count valid / 2D hits 00879 // 00880 if ( hit->isValid() ) { 00881 nHit++; 00882 //if ( hit.isMatched() || 00883 // hit.det().detUnits().front()->type().module()==pixel ) 00884 //nHit2d++; 00885 } 00886 } 00887 //if (nHit==nHitMin) lastBwdDetLayer=im->layer(); 00888 // 00889 // keep remaining (valid) hits for verification 00890 // 00891 else if ( hit->isValid() ) { 00892 //std::cout << "Adding a remaining hit" << std::endl; 00893 remainingHits.push_back(hit); 00894 } 00895 } 00896 // 00897 // Fit only if required number of valid hits can be used 00898 // 00899 if ( nHit<nHitMin ){ //|| nHit2d<theMinNrOf2dHitsForRebuild ) { 00900 fittedTracks.clear(); 00901 return; 00902 } 00903 // 00904 // Do the backward fit (important: start from scaled, not random cov. matrix!) 00905 // 00906 TrajectoryStateOnSurface firstTsos(fwdTraj.firstMeasurement().updatedState()); 00907 //cout << "firstTsos "<< firstTsos << endl; 00908 firstTsos.rescaleError(100.); 00909 //TrajectoryContainer bwdFitted(fitter.fit(fwdTraj.seed(),fwdTraj.recHits(),firstTsos)); 00910 TrajectoryContainer bwdFitted(fitter.fit( 00911 TrajectorySeed(PTrajectoryStateOnDet(), TrajectorySeed::recHitContainer(), oppositeDirection(candidate.direction())), 00912 fwdTraj.recHits(),firstTsos)); 00913 if (bwdFitted.size()){ 00914 #ifdef DBG2_GCTB 00915 cout << "Obtained " << bwdFitted.size() << " bwdFitted trajectories with measurement size " << bwdFitted.front().measurements().size() << endl; 00916 #endif 00917 TempTrajectory fitted(fwdTraj.seed(), fwdTraj.direction()); 00918 vector<TM> tmsbf = bwdFitted.front().measurements(); 00919 int iDetLayer=0; 00920 //this is ugly but the TM in the fitted track do not contain the DetLayer. 00921 //So we have to cache the detLayer pointers and replug them in. 00922 //For the backward building it would be enaugh to cache the last DetLayer, 00923 //but for the intermediary cleaning we need all 00924 for ( vector<TM>::const_iterator im=tmsbf.begin();im!=tmsbf.end(); im++ ) { 00925 fitted.push(TM( (*im).forwardPredictedState(), 00926 (*im).backwardPredictedState(), 00927 (*im).updatedState(), 00928 (*im).recHit(), 00929 (*im).estimate(), 00930 bwdDetLayer[iDetLayer])); 00931 #ifdef DBG2_GCTB 00932 if ( im->recHit()->isValid() ) cout << im->recHit()->globalPosition(); 00933 else cout << "(-,-,-)"; 00934 cout << " layer " << bwdDetLayer[iDetLayer]; 00935 cout << " fwdPred " << im->forwardPredictedState().isValid(); 00936 cout << " bwdPred " << im->backwardPredictedState().isValid(); 00937 cout << " upPred " << im->updatedState().isValid() << " ;"; 00938 //SimIdPrinter()(im->recHit()); 00939 cout << endl; 00940 #endif 00941 iDetLayer++; 00942 } 00943 /* 00944 TM lastMeas = bwdFitted.front().lastMeasurement(); 00945 fitted.pop(); 00946 fitted.push(TM(lastMeas.forwardPredictedState(), 00947 lastMeas.backwardPredictedState(), 00948 lastMeas.updatedState(), 00949 lastMeas.recHit(), 00950 lastMeas.estimate(), 00951 lastBwdDetLayer));*/ 00952 fittedTracks.push_back(fitted); 00953 } 00954 // 00955 // save result 00956 // 00957 //fittedTracks.swap(bwdFitted); 00958 //cout << "Obtained " << fittedTracks.size() << " fittedTracks trajectories with measurement size " << fittedTracks.front().measurements().size() << endl;
void GroupedCkfTrajectoryBuilder::buildTrajectories | ( | const TrajectorySeed & | , | |
TrajectoryContainer & | ret, | |||
const TrajectoryFilter * | ||||
) | const [private] |
double GroupedCkfTrajectoryBuilder::chiSquareCut | ( | ) | [inline] |
Chi**2 Cut on the new Trajectory Measurements to consider.
Definition at line 70 of file GroupedCkfTrajectoryBuilder.h.
References theChiSquareCut.
00070 {return theChiSquareCut;}
const Chi2MeasurementEstimatorBase& GroupedCkfTrajectoryBuilder::estimator | ( | void | ) | const [inline] |
Definition at line 65 of file GroupedCkfTrajectoryBuilder.h.
References BaseCkfTrajectoryBuilder::theEstimator.
Referenced by rebuildSeedingRegion().
00065 {return *theEstimator;}
void GroupedCkfTrajectoryBuilder::groupedIntermediaryClean | ( | TempTrajectoryContainer & | theTrajectories | ) | const [private] |
intermediate cleaning in the case of grouped measurements
recHitEqualByChannels(im1->recHit(),im2->recHit()) ) {
recHitEqualByChannels(im1->recHit(),im2->recHit()) ) {
Definition at line 486 of file GroupedCkfTrajectoryBuilder.cc.
References HLT_VtxMuL3::firstValid, TempTrajectory::isValid(), layers(), cmsutils::bqueue< T >::rbegin(), cmsutils::bqueue< T >::rend(), TrackingRecHit::some, and tkxor().
Referenced by groupedLimitedCandidates().
00487 { 00488 //if (theTrajectories.empty()) return TrajectoryContainer(); 00489 //TrajectoryContainer result; 00490 if (theTrajectories.empty()) return; 00491 //RecHitEqualByChannels recHitEqualByChannels(false, false); 00492 int firstLayerSize, secondLayerSize; 00493 vector<const DetLayer*> firstLayers, secondLayers; 00494 00495 for (TempTrajectoryContainer::iterator firstTraj=theTrajectories.begin(); 00496 firstTraj!=(theTrajectories.end()-1); firstTraj++) { 00497 00498 if ( (!firstTraj->isValid()) || 00499 (!firstTraj->lastMeasurement().recHit()->isValid()) ) continue; 00500 const TempTrajectory::DataContainer & firstMeasurements = firstTraj->measurements(); 00501 layers(firstMeasurements, firstLayers); 00502 firstLayerSize = firstLayers.size(); 00503 if ( firstLayerSize<4 ) continue; 00504 00505 for (TempTrajectoryContainer::iterator secondTraj=(firstTraj+1); 00506 secondTraj!=theTrajectories.end(); secondTraj++) { 00507 00508 if ( (!secondTraj->isValid()) || 00509 (!secondTraj->lastMeasurement().recHit()->isValid()) ) continue; 00510 const TempTrajectory::DataContainer & secondMeasurements = secondTraj->measurements(); 00511 layers(secondMeasurements, secondLayers); 00512 secondLayerSize = secondLayers.size(); 00513 // 00514 // only candidates using the same last 3 layers are compared 00515 // 00516 if ( firstLayerSize!=secondLayerSize ) continue; 00517 if ( firstLayers[0]!=secondLayers[0] || 00518 firstLayers[1]!=secondLayers[1] || 00519 firstLayers[2]!=secondLayers[2] ) continue; 00520 00521 TempTrajectory::DataContainer::const_iterator im1 = firstMeasurements.rbegin(); 00522 TempTrajectory::DataContainer::const_iterator im2 = secondMeasurements.rbegin(); 00523 // 00524 // check for identical hits in the last layer 00525 // 00526 bool unequal(false); 00527 const DetLayer* layerPtr = firstLayers[0]; 00528 while ( im1!=firstMeasurements.rend()&&im2!=secondMeasurements.rend() ) { 00529 if ( im1->layer()!=layerPtr || im2->layer()!=layerPtr ) break; 00530 if ( !(im1->recHit()->isValid()) || !(im2->recHit()->isValid()) || 00532 !im1->recHit()->hit()->sharesInput(im2->recHit()->hit(), TrackingRecHit::some) ) { 00533 unequal = true; 00534 break; 00535 } 00536 --im1; 00537 --im2; 00538 } 00539 if ( im1==firstMeasurements.rend() || im2==secondMeasurements.rend() || 00540 im1->layer()==layerPtr || im2->layer()==layerPtr || unequal ) continue; 00541 // 00542 // check for invalid hits in the layer -2 00543 // compare only candidates with invalid / valid combination 00544 // 00545 layerPtr = firstLayers[1]; 00546 bool firstValid(true); 00547 while ( im1!=firstMeasurements.rend()&&im1->layer()==layerPtr ) { 00548 if ( !im1->recHit()->isValid() ) firstValid = false; 00549 --im1; 00550 } 00551 bool secondValid(true); 00552 while ( im2!=secondMeasurements.rend()&&im2->layer()==layerPtr ) { 00553 if ( !im2->recHit()->isValid() ) secondValid = false; 00554 --im2; 00555 } 00556 if ( !tkxor(firstValid,secondValid) ) continue; 00557 // 00558 // ask for identical hits in layer -3 00559 // 00560 unequal = false; 00561 layerPtr = firstLayers[2]; 00562 while ( im1!=firstMeasurements.rend()&&im2!=secondMeasurements.rend() ) { 00563 if ( im1->layer()!=layerPtr || im2->layer()!=layerPtr ) break; 00564 if ( !(im1->recHit()->isValid()) || !(im2->recHit()->isValid()) || 00566 !im1->recHit()->hit()->sharesInput(im2->recHit()->hit(), TrackingRecHit::some) ) { 00567 unequal = true; 00568 break; 00569 } 00570 --im1; 00571 --im2; 00572 } 00573 if ( im1==firstMeasurements.rend() || im2==secondMeasurements.rend() || 00574 im1->layer()==layerPtr || im2->layer()==layerPtr || unequal ) continue; 00575 00576 if ( !firstValid ) { 00577 firstTraj->invalidate(); 00578 break; 00579 } 00580 else { 00581 secondTraj->invalidate(); 00582 break; 00583 } 00584 } 00585 } 00586 /* 00587 for (TempTrajectoryContainer::const_iterator it = theTrajectories.begin(); 00588 it != theTrajectories.end(); it++) { 00589 if(it->isValid()) result.push_back( *it); 00590 } 00591 00592 return result; 00593 */ 00594 theTrajectories.erase(std::remove_if( theTrajectories.begin(),theTrajectories.end(), 00595 std::not1(std::mem_fun_ref(&TempTrajectory::isValid))), 00596 // boost::bind(&TempTrajectory::isValid,_1)), 00597 theTrajectories.end()); 00598 }
void GroupedCkfTrajectoryBuilder::groupedLimitedCandidates | ( | TempTrajectory & | startingTraj, | |
const TrajectoryFilter * | regionalCondition, | |||
const Propagator * | propagator, | |||
TempTrajectoryContainer & | result | |||
) | const [private] |
Definition at line 247 of file GroupedCkfTrajectoryBuilder.cc.
References advanceOneLayer(), IntermediateTrajectoryCleaner::clean(), GenMuonPlsPt100GeV_cfg::cout, dumpCandidates(), lat::endl(), groupedIntermediaryClean(), it, LogDebug, python::multivaluedict::sort(), theFoundHitBonus, theIntermediateCleaning, theLostHitPenalty, and theMaxCand.
Referenced by rebuildSeedingRegion().
00251 { 00252 uint nIter=1; 00253 TempTrajectoryContainer candidates; 00254 TempTrajectoryContainer newCand; 00255 candidates.push_back( startingTraj); 00256 00257 while ( !candidates.empty()) { 00258 #ifdef DBG_GCTB 00259 cout << "===== GCTB::groupedLimitedCandidates, start NEW iteration of WHILE loop" << endl; 00260 #endif 00261 newCand.clear(); 00262 for (TempTrajectoryContainer::iterator traj=candidates.begin(); 00263 traj!=candidates.end(); traj++) { 00264 if ( !advanceOneLayer(*traj,regionalCondition, propagator, newCand,result) ) { 00265 #ifdef DBG_GCTB 00266 cout << "GCTB: terminating after advanceOneLayer==false" << endl; 00267 #endif 00268 continue; 00269 } 00270 00271 #ifdef DBG_GCTB 00272 cout << "newCand(1)"; 00273 for ( TempTrajectoryContainer::const_iterator it=newCand.begin(); 00274 it!=newCand.end(); it++ ) 00275 cout << " " << it->lostHits() << " " << it->foundHits() 00276 << " " << it->chiSquared() << " ;"; 00277 cout << endl; 00278 // cout << "newCand.size() = " << newCand.size() << endl; 00279 #endif 00280 if ((int)newCand.size() > theMaxCand) { 00281 #ifdef DBG_GCTB 00282 //ShowCand()(newCand); 00283 #endif 00284 sort( newCand.begin(), newCand.end(), GroupedTrajCandLess(theLostHitPenalty,theFoundHitBonus)); 00285 newCand.erase( newCand.begin()+theMaxCand, newCand.end()); 00286 } 00287 #ifdef DBG_GCTB 00288 cout << "newCand(2)"; 00289 for ( TempTrajectoryContainer::const_iterator it=newCand.begin(); 00290 it!=newCand.end(); it++ ) 00291 cout << " " << it->lostHits() << " " << it->foundHits() 00292 << " " << it->chiSquared() << " ;"; 00293 cout << endl; 00294 #endif 00295 } 00296 00297 #ifdef DBG_GCTB 00298 cout << "newCand.size() at end = " << newCand.size() << endl; 00299 #endif 00300 /* 00301 if (theIntermediateCleaning) { 00302 candidates.clear(); 00303 candidates = groupedIntermediaryClean(newCand); 00304 } else { 00305 candidates.swap(newCand); 00306 } 00307 */ 00308 if (theIntermediateCleaning) { 00309 #ifdef STANDARD_INTERMEDIARYCLEAN 00310 IntermediateTrajectoryCleaner::clean(newCand); 00311 #else 00312 groupedIntermediaryClean(newCand); 00313 #endif 00314 00315 } 00316 candidates.swap(newCand); 00317 00318 LogDebug("CkfPattern") <<result.size()<<" candidates after "<<nIter++<<" groupedCKF iteration: \n" 00319 <<dumpCandidates(result) 00320 <<"\n "<<candidates.size()<<" running candidates are: \n" 00321 <<dumpCandidates(candidates); 00322 00323 #ifdef DBG_GCTB 00324 cout << "candidates(3)"; 00325 for ( TempTrajectoryContainer::const_iterator it=candidates.begin(); 00326 it!=candidates.end(); it++ ) 00327 cout << "lost,found,chi2, last pt, r,z: " 00328 << it->lostHits() << " , " 00329 << it->foundHits() << " , " 00330 << it->chiSquared() << " , " 00331 << it->lastMeasurement().updatedState().globalMomentum().perp() << " , " 00332 << it->lastMeasurement().updatedState().globalPosition().perp() << " , " 00333 << it->lastMeasurement().updatedState().globalPosition().z() << endl; 00334 cout << endl; 00335 00336 cout << "after intermediate cleaning = " << candidates.size() << endl; 00337 //B.M. ShowCand()(candidates); 00338 cout << "===== GCTB::groupedLimitedCandidates, END iteration of WHILE loop" << endl; 00339 #endif 00340 } 00341 }
void GroupedCkfTrajectoryBuilder::layers | ( | const TempTrajectory::DataContainer & | measurements, | |
std::vector< const DetLayer * > & | fillme | |||
) | const [private] |
fills in a list of layers from a container of TrajectoryMeasurements the "fillme" vector is cleared beforehand.
Referenced by groupedIntermediaryClean().
float GroupedCkfTrajectoryBuilder::lostHitPenalty | ( | ) | [inline] |
Chi**2 Penalty for each lost hit.
Definition at line 77 of file GroupedCkfTrajectoryBuilder.h.
References theLostHitPenalty.
00077 {return theLostHitPenalty;}
double GroupedCkfTrajectoryBuilder::mass | ( | ) | [inline] |
Mass hypothesis used for propagation.
Definition at line 86 of file GroupedCkfTrajectoryBuilder.h.
References theMass.
00086 {return theMass;}
int GroupedCkfTrajectoryBuilder::maxCand | ( | ) | [inline] |
Maximum number of trajectory candidates to propagate to the next layer.
Definition at line 73 of file GroupedCkfTrajectoryBuilder.h.
References theMaxCand.
00073 {return theMaxCand;}
GroupedCkfTrajectoryBuilder& GroupedCkfTrajectoryBuilder::operator= | ( | const GroupedCkfTrajectoryBuilder & | ) | [private] |
no assignment operator
PropagationDirection GroupedCkfTrajectoryBuilder::oppositeDirection | ( | PropagationDirection | dir | ) | const [inline, private] |
change of propagation direction
Definition at line 154 of file GroupedCkfTrajectoryBuilder.h.
References alongMomentum, and oppositeToMomentum.
Referenced by backwardFit().
00154 { 00155 if ( dir==alongMomentum ) return oppositeToMomentum; 00156 else if ( dir==oppositeToMomentum ) return alongMomentum; 00157 return dir; 00158 }
double GroupedCkfTrajectoryBuilder::ptCut | ( | ) | [inline] |
Tells whether an intermediary cleaning stage should take place during TB.
Pt cut
Definition at line 83 of file GroupedCkfTrajectoryBuilder.h.
References theptCut.
00083 {return theptCut;}
int GroupedCkfTrajectoryBuilder::rebuildSeedingRegion | ( | const std::vector< const TrackingRecHit * > & | seedHits, | |
TempTrajectory & | candidate, | |||
TempTrajectoryContainer & | result | |||
) | const [private] |
Definition at line 691 of file GroupedCkfTrajectoryBuilder.cc.
References GenMuonPlsPt100GeV_cfg::cout, end, lat::endl(), groupedLimitedCandidates(), it, TempTrajectory::measurements(), cmsutils::bqueue< T >::rbegin(), cmsutils::bqueue< T >::rend(), BaseCkfTrajectoryBuilder::theBackwardPropagator, theRequireSeedHitsInRebuild, and verifyHits().
00694 { 00695 // 00696 // Try to rebuild one candidate in the seeding region. 00697 // The resulting trajectories are returned in result, 00698 // the count is the return value. 00699 // 00700 TempTrajectoryContainer rebuiltTrajectories; 00701 #ifdef DBG2_GCTB 00702 /* const LayerFinderByDet layerFinder; 00703 if ( !seedHits.empty() && seedHits.front().isValid() ) { 00704 DetLayer* seedLayer = layerFinder(seedHits.front().det()); 00705 cout << "Seed hit at " << seedHits.front().globalPosition() 00706 << " " << seedLayer << endl; 00707 cout << "Started from " 00708 << candidate.lastMeasurement().updatedState().globalPosition().perp() << " " 00709 << candidate.lastMeasurement().updatedState().globalPosition().z() << endl; 00710 pair<bool,TrajectoryStateOnSurface> layerComp(false,TrajectoryStateOnSurface()); 00711 if ( seedLayer ) layerComp = 00712 seedLayer->compatible(candidate.lastMeasurement().updatedState(), 00713 propagator(),estimator()); 00714 pair<bool,TrajectoryStateOnSurface> detComp = 00715 seedHits.front().det().compatible(candidate.lastMeasurement().updatedState(), 00716 propagator(),estimator()); 00717 cout << " layer compatibility = " << layerComp.first; 00718 cout << " det compatibility = " << detComp.first; 00719 if ( detComp.first ) { 00720 cout << " estimate = " 00721 << estimator().estimate(detComp.second,seedHits.front()).second ; 00722 } 00723 cout << endl; 00724 }*/ 00725 cout << "Before backward building: #measurements = " 00726 << candidate.measurements().size() ; //<< endl;; 00727 #endif 00728 // 00729 // Use standard building with standard cuts. Maybe better to use different 00730 // cuts from "forward" building (e.g. no check on nr. of invalid hits)? 00731 // 00732 groupedLimitedCandidates(candidate,(const TrajectoryFilter*)0, theBackwardPropagator, rebuiltTrajectories); 00733 #ifdef DBG2_GCTB 00734 cout << " After backward building: #measurements ="; 00735 for ( TempTrajectoryContainer::iterator it=rebuiltTrajectories.begin(); 00736 it!=rebuiltTrajectories.end(); it++ ) cout << " " << it->measurements().size(); 00737 cout << endl; 00738 #endif 00739 // 00740 // Check & count resulting candidates 00741 // 00742 int nrOfTrajectories(0); 00743 //const RecHitEqualByChannels recHitEqual(false,false); 00744 //vector<TM> oldMeasurements(candidate.measurements()); 00745 for ( TempTrajectoryContainer::iterator it=rebuiltTrajectories.begin(); 00746 it!=rebuiltTrajectories.end(); it++ ) { 00747 00748 TempTrajectory::DataContainer newMeasurements(it->measurements()); 00749 // 00750 // Verify presence of seeding hits? 00751 // 00752 if ( theRequireSeedHitsInRebuild ) { 00753 // no hits found (and possibly some invalid hits discarded): drop track 00754 if ( newMeasurements.size()<=candidate.measurements().size() ){ 00755 #ifdef DBG2_GCTB 00756 cout << "newMeasurements.size()<=candidate.measurements().size()" << endl; 00757 #endif 00758 continue; 00759 } 00760 // verify presence of hits 00761 //GIO//if ( !verifyHits(newMeasurements.begin()+candidate.measurements().size(), 00762 //GIO// newMeasurements.end(),seedHits) ){ 00763 if ( !verifyHits(newMeasurements.rbegin(), 00764 newMeasurements.size() - candidate.measurements().size(), 00765 seedHits) ){ 00766 #ifdef DBG2_GCTB 00767 cout << "seed hits not found in rebuild" << endl; 00768 #endif 00769 continue; 00770 } 00771 } 00772 // 00773 // construct final trajectory in the right order 00774 // 00775 TempTrajectory reversedTrajectory(it->seed(),it->seed().direction()); 00776 for (TempTrajectory::DataContainer::const_iterator im=newMeasurements.rbegin(), ed = newMeasurements.rend(); 00777 im != ed; --im ) { 00778 reversedTrajectory.push(*im); 00779 } 00780 // save & count result 00781 result.push_back(reversedTrajectory); 00782 nrOfTrajectories++; 00783 #ifdef DBG2_GCTB 00784 cout << "New traj direction = " << reversedTrajectory.direction() << endl; 00785 cmsutils::bqueue<TM> tms = reversedTrajectory.measurements(); 00786 for (cmsutils::bqueue<TM>::const_iterator im=tms.rbegin(),end=tms.rend(); 00787 im!=end; --im ) { 00788 if ( im->recHit()->isValid() ) cout << im->recHit()->globalPosition(); 00789 else cout << "(-,-,-)"; 00790 cout << " "; 00791 cout << " fwdPred " << im->forwardPredictedState().isValid(); 00792 cout << " bwdPred " << im->backwardPredictedState().isValid(); 00793 cout << " upPred " << im->updatedState().isValid(); 00794 //SimIdPrinter()(im->recHit()); 00795 cout << endl; 00796 } 00797 #endif 00798 } 00799 return nrOfTrajectories;
void GroupedCkfTrajectoryBuilder::rebuildSeedingRegion | ( | TempTrajectory & | startingTraj, | |
TempTrajectoryContainer & | result | |||
) | const [private] |
try to find additional hits in seeding region
Definition at line 623 of file GroupedCkfTrajectoryBuilder.cc.
References backwardFit(), GenMuonPlsPt100GeV_cfg::cout, lat::endl(), estimator(), it, TempTrajectory::measurements(), rebuildSeedingRegion(), TrajectorySeed::recHits(), TempTrajectory::seed(), BaseCkfTrajectoryBuilder::theBackwardPropagator, and updator().
00625 { 00626 // 00627 // Rebuilding of trajectories. Candidates are taken from result, 00628 // which will be replaced with the solutions after rebuild 00629 // (assume vector::swap is more efficient than building new container) 00630 // 00631 #ifdef DBG2_GCTB 00632 cout << "Starting to rebuild " << result.size() << " tracks" << endl; 00633 #endif 00634 // 00635 // Fitter (need to create it here since the propagation direction 00636 // might change between different starting trajectories) 00637 // 00638 KFTrajectoryFitter fitter(*theBackwardPropagator,updator(),estimator()); 00639 // 00640 TempTrajectoryContainer reFitted; 00641 TrajectorySeed::range rseedHits = startingTraj.seed().recHits(); 00642 std::vector<const TrackingRecHit*> seedHits; 00643 //seedHits.insert(seedHits.end(), rseedHits.first, rseedHits.second); 00644 //for (TrajectorySeed::recHitContainer::const_iterator iter = rseedHits.first; iter != rseedHits.second; iter++){ 00645 // seedHits.push_back(&*iter); 00646 //} 00647 00648 //unsigned int nSeed(seedHits.size()); 00649 unsigned int nSeed(rseedHits.second-rseedHits.first); 00650 //seedHits.reserve(nSeed); 00651 TempTrajectoryContainer rebuiltTrajectories; 00652 for ( TempTrajectoryContainer::iterator it=result.begin(); 00653 it!=result.end(); it++ ) { 00654 // 00655 // skip candidates which are not exceeding the seed size 00656 // (should not happen) - keep existing trajectory 00657 // 00658 if ( it->measurements().size()<=startingTraj.measurements().size() ) { 00659 rebuiltTrajectories.push_back(*it); 00660 #ifdef DBG2_GCTB 00661 cout << " candidates not exceeding the seed size; skipping " << endl; 00662 #endif 00663 continue; 00664 } 00665 // 00666 // Refit - keep existing trajectory in case fit is not possible 00667 // or fails 00668 // 00669 backwardFit(*it,nSeed,fitter,reFitted,seedHits); 00670 if ( reFitted.size()!=1 ) { 00671 rebuiltTrajectories.push_back(*it); 00672 //std::cout << "after reFitted.size() " << reFitted.size() << std::endl; 00673 continue; 00674 } 00675 //std::cout << "after reFitted.size() " << reFitted.size() << std::endl; 00676 // 00677 // Rebuild seeding part. In case it fails: keep initial trajectory 00678 // (better to drop it??) 00679 // 00680 int nRebuilt = 00681 rebuildSeedingRegion (seedHits,reFitted.front(),rebuiltTrajectories); 00682 if ( nRebuilt==0 ) rebuiltTrajectories.push_back(*it); 00683 } 00684 // 00685 // Replace input trajectories with new ones 00686 // 00687 result.swap(rebuiltTrajectories); 00688 }
void GroupedCkfTrajectoryBuilder::rebuildSeedingRegion | ( | const TrajectorySeed & | seed, | |
TrajectoryContainer & | result | |||
) | const |
trajectories re-building in the seeding region.
It looks for additional measurements in the seeding region of the intial trajectories. Only valid trajectories are returned. Invalid ones are dropped from the input collection.
Definition at line 142 of file GroupedCkfTrajectoryBuilder.cc.
References BaseCkfTrajectoryBuilder::createStartingTrajectory().
Referenced by rebuildSeedingRegion().
00143 { 00144 TempTrajectory startingTraj = createStartingTrajectory( seed); 00145 TempTrajectoryContainer work; 00146 00147 TrajectoryContainer final; 00148 00149 work.reserve(result.size()); 00150 for (TrajectoryContainer::iterator traj=result.begin(); 00151 traj!=result.end(); ++traj) { 00152 if(traj->isValid()) work.push_back(TempTrajectory(*traj)); 00153 } 00154 00155 rebuildSeedingRegion(startingTraj,work); 00156 final.reserve(work.size()); 00157 00158 for (TempTrajectoryContainer::iterator traj=work.begin(); 00159 traj!=work.end(); ++traj) { 00160 final.push_back(traj->toTrajectory()); 00161 } 00162 00163 result.swap(final); 00164 00165 }
void GroupedCkfTrajectoryBuilder::setEvent | ( | const edm::Event & | event | ) | const [virtual] |
set Event for the internal MeasurementTracker data member
Implements BaseCkfTrajectoryBuilder.
Definition at line 101 of file GroupedCkfTrajectoryBuilder.cc.
References BaseCkfTrajectoryBuilder::theMeasurementTracker, and MeasurementTracker::update().
00102 { 00103 theMeasurementTracker->update(event); 00104 }
Definition at line 108 of file GroupedCkfTrajectoryBuilder.h.
Referenced by groupedIntermediaryClean().
void GroupedCkfTrajectoryBuilder::trajectories | ( | const TrajectorySeed & | , | |
TrajectoryContainer & | ret, | |||
const TrackingRegion & | ||||
) | const |
trajectories building starting from a seed with a region
GroupedCkfTrajectoryBuilder::TrajectoryContainer GroupedCkfTrajectoryBuilder::trajectories | ( | const TrajectorySeed & | seed, | |
const TrackingRegion & | region | |||
) | const |
trajectories building starting from a seed with a region
Definition at line 116 of file GroupedCkfTrajectoryBuilder.cc.
References buildTrajectories().
00118 { 00119 TrajectoryContainer ret; 00120 ret.reserve(10); 00121 RegionalTrajectoryFilter regionalCondition(region); 00122 buildTrajectories(seed, ret, ®ionalCondition); 00123 return ret; 00124 }
void GroupedCkfTrajectoryBuilder::trajectories | ( | const TrajectorySeed & | , | |
TrajectoryContainer & | ret | |||
) | const |
trajectories building starting from a seed, return in an already allocated vector
GroupedCkfTrajectoryBuilder::TrajectoryContainer GroupedCkfTrajectoryBuilder::trajectories | ( | const TrajectorySeed & | seed | ) | const [virtual] |
trajectories building starting from a seed
Implements BaseCkfTrajectoryBuilder.
Definition at line 107 of file GroupedCkfTrajectoryBuilder.cc.
References buildTrajectories().
00108 { 00109 TrajectoryContainer ret; 00110 ret.reserve(10); 00111 buildTrajectories(seed, ret, 0); 00112 return ret; 00113 }
const TrajectoryStateUpdator& GroupedCkfTrajectoryBuilder::updator | ( | ) | const [inline] |
Definition at line 64 of file GroupedCkfTrajectoryBuilder.h.
References BaseCkfTrajectoryBuilder::theUpdator.
Referenced by rebuildSeedingRegion().
00064 {return *theUpdator;}
bool GroupedCkfTrajectoryBuilder::verifyHits | ( | TempTrajectory::DataContainer::const_iterator | rbegin, | |
size_t | maxDepth, | |||
const std::vector< const TrackingRecHit * > & | hits | |||
) | const [private] |
Verifies presence of a RecHits in a range of TrajectoryMeasurements.
Definition at line 961 of file GroupedCkfTrajectoryBuilder.cc.
References GenMuonPlsPt100GeV_cfg::cout, lat::endl(), and TrackingRecHit::some.
Referenced by rebuildSeedingRegion().
00965 { 00966 // 00967 // verify presence of the seeding hits 00968 // 00969 #ifdef DBG2_GCTB 00970 cout << "Checking for " << hits.size() << " hits in " 00971 << maxDepth << " measurements" << endl; 00972 #endif 00973 TempTrajectory::DataContainer::const_iterator rend = rbegin; 00974 while (maxDepth > 0) { --maxDepth; --rend; } 00975 for ( vector<const TrackingRecHit*>::const_iterator ir=hits.begin(); 00976 ir!=hits.end(); ir++ ) { 00977 // assume that all seeding hits are valid! 00978 bool foundHit(false); 00979 for ( TempTrajectory::DataContainer::const_iterator im=rbegin; im!=rend; --im ) { 00980 if ( im->recHit()->isValid() && (*ir)->sharesInput(im->recHit()->hit(), TrackingRecHit::some) ) { 00981 foundHit = true; 00982 break; 00983 } 00984 } 00985 if ( !foundHit ) return false; 00986 } 00987 return true;
Definition at line 181 of file GroupedCkfTrajectoryBuilder.h.
Referenced by advanceOneLayer(), and GroupedCkfTrajectoryBuilder().
Use only best hit / group when building segments.
Definition at line 184 of file GroupedCkfTrajectoryBuilder.h.
Referenced by advanceOneLayer(), and GroupedCkfTrajectoryBuilder().
double GroupedCkfTrajectoryBuilder::theChiSquareCut [private] |
Chi**2 Cut on the new Trajectory Measurements to consider.
Definition at line 167 of file GroupedCkfTrajectoryBuilder.h.
Referenced by chiSquareCut().
Definition at line 162 of file GroupedCkfTrajectoryBuilder.h.
float GroupedCkfTrajectoryBuilder::theFoundHitBonus [private] |
Chi**2 bonus for each found hit (favours candidates with more measurements).
Definition at line 176 of file GroupedCkfTrajectoryBuilder.h.
Referenced by GroupedCkfTrajectoryBuilder(), and groupedLimitedCandidates().
Tells whether an intermediary cleaning stage should take place during TB.
Definition at line 178 of file GroupedCkfTrajectoryBuilder.h.
Referenced by GroupedCkfTrajectoryBuilder(), and groupedLimitedCandidates().
bool GroupedCkfTrajectoryBuilder::theLockHits [private] |
Lock hits when building segments in a layer.
Definition at line 183 of file GroupedCkfTrajectoryBuilder.h.
Referenced by advanceOneLayer(), and GroupedCkfTrajectoryBuilder().
float GroupedCkfTrajectoryBuilder::theLostHitPenalty [private] |
Chi**2 Penalty for each lost hit.
Definition at line 175 of file GroupedCkfTrajectoryBuilder.h.
Referenced by GroupedCkfTrajectoryBuilder(), groupedLimitedCandidates(), and lostHitPenalty().
double GroupedCkfTrajectoryBuilder::theMass [private] |
Mass hypothesis used for propagation.
Definition at line 171 of file GroupedCkfTrajectoryBuilder.h.
Referenced by mass().
int GroupedCkfTrajectoryBuilder::theMaxCand [private] |
Maximum number of trajectory candidates to propagate to the next layer.
Definition at line 173 of file GroupedCkfTrajectoryBuilder.h.
Referenced by GroupedCkfTrajectoryBuilder(), groupedLimitedCandidates(), and maxCand().
unsigned int GroupedCkfTrajectoryBuilder::theMinNrOf2dHitsForRebuild [private] |
Minimum nr.
of non-seed 2D hits required for rebuild.
Definition at line 192 of file GroupedCkfTrajectoryBuilder.h.
Referenced by GroupedCkfTrajectoryBuilder().
unsigned int GroupedCkfTrajectoryBuilder::theMinNrOfHitsForRebuild [private] |
Minimum nr.
of non-seed hits required for rebuild. If ==0 the seeding part will remain untouched.
Definition at line 189 of file GroupedCkfTrajectoryBuilder.h.
Referenced by backwardFit(), and GroupedCkfTrajectoryBuilder().
double GroupedCkfTrajectoryBuilder::theptCut [private] |
Only accept rebuilt trajectories if they contain the seed hits.
Definition at line 187 of file GroupedCkfTrajectoryBuilder.h.
Referenced by GroupedCkfTrajectoryBuilder(), and rebuildSeedingRegion().
TempTrajectoryContainer GroupedCkfTrajectoryBuilder::work_ [mutable, private] |
Definition at line 195 of file GroupedCkfTrajectoryBuilder.h.