CMS 3D CMS Logo

List of all members | Public Member Functions | Protected Member Functions | Private Types | Private Member Functions | Static Private Member Functions | Private Attributes
GroupedCkfTrajectoryBuilder Class Referencefinal

#include <GroupedCkfTrajectoryBuilder.h>

Inheritance diagram for GroupedCkfTrajectoryBuilder:
BaseCkfTrajectoryBuilder TrajectoryBuilder

Public Member Functions

TempTrajectory buildTrajectories (const TrajectorySeed &seed, TrajectoryContainer &ret, unsigned int &nCandPerSeed, const TrajectoryFilter *) const override
 common part of both public trajectory building methods More...
 
double chiSquareCut ()
 
const Chi2MeasurementEstimatorBaseestimator () const
 
 GroupedCkfTrajectoryBuilder (const edm::ParameterSet &conf, edm::ConsumesCollector &iC)
 constructor from ParameterSet More...
 
float lostHitPenalty ()
 
double mass ()
 Mass hypothesis used for propagation. More...
 
int maxCand ()
 
double ptCut ()
 Pt cut. More...
 
void rebuildSeedingRegion (const TrajectorySeed &, TrajectoryContainer &result) const override
 
void rebuildTrajectories (TempTrajectory const &startingTraj, const TrajectorySeed &, TrajectoryContainer &result) const override
 
TrajectoryContainer trajectories (const TrajectorySeed &) const override
 set Event for the internal MeasurementTracker data member More...
 
void trajectories (const TrajectorySeed &, TrajectoryContainer &ret) const override
 trajectories building starting from a seed, return in an already allocated vector More...
 
TrajectoryContainer trajectories (const TrajectorySeed &, const TrackingRegion &) const
 trajectories building starting from a seed with a region More...
 
void trajectories (const TrajectorySeed &, TrajectoryContainer &ret, const TrackingRegion &) const
 trajectories building starting from a seed with a region More...
 
const TrajectoryStateUpdatorupdator () const
 
 ~GroupedCkfTrajectoryBuilder () override
 destructor More...
 
- Public Member Functions inherited from BaseCkfTrajectoryBuilder
 BaseCkfTrajectoryBuilder (const edm::ParameterSet &conf, TrajectoryFilter *filter, TrajectoryFilter *inOutFilter=0)
 
 BaseCkfTrajectoryBuilder (const BaseCkfTrajectoryBuilder &)=delete
 
const TransientTrackingRecHitBuilderhitBuilder () const
 
BaseCkfTrajectoryBuilderoperator= (const BaseCkfTrajectoryBuilder &)=delete
 
virtual void setDebugger (CkfDebugger *dbg) const
 
void setEvent (const edm::Event &event) const override
 
void setEvent (const edm::Event &iEvent, const edm::EventSetup &iSetup, const MeasurementTrackerEvent *data)
 
void setNavigationSchool (NavigationSchool const *nv)
 
void unset () const override
 
 ~BaseCkfTrajectoryBuilder () override
 
- Public Member Functions inherited from TrajectoryBuilder
virtual ~TrajectoryBuilder ()
 

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
 
void setEvent_ (const edm::Event &iEvent, const edm::EventSetup &iSetup) override
 
- Protected Member Functions inherited from BaseCkfTrajectoryBuilder
void addToResult (boost::shared_ptr< const TrajectorySeed > const &seed, TempTrajectory &traj, TrajectoryContainer &result, bool inOut=false) const
 
void addToResult (TempTrajectory const &traj, TempTrajectoryContainer &result, bool inOut=false) const
 
virtual bool analyzeMeasurementsDebugger (Trajectory &traj, const std::vector< TrajectoryMeasurement > &meas, const MeasurementTrackerEvent *theMeasurementTracker, const Propagator *theForwardPropagator, const Chi2MeasurementEstimatorBase *theEstimator, const TransientTrackingRecHitBuilder *theTTRHBuilder) const
 
virtual bool analyzeMeasurementsDebugger (TempTrajectory &traj, const std::vector< TrajectoryMeasurement > &meas, const MeasurementTrackerEvent *theMeasurementTracker, const Propagator *theForwardPropagator, const Chi2MeasurementEstimatorBase *theEstimator, const TransientTrackingRecHitBuilder *theTTRHBuilder) const
 
const PropagatorbackwardPropagator (const TrajectorySeed &seed) const
 
TempTrajectory createStartingTrajectory (const TrajectorySeed &seed) const
 
virtual void fillSeedHistoDebugger (std::vector< TrajectoryMeasurement >::iterator begin, std::vector< TrajectoryMeasurement >::iterator end) const
 
StateAndLayers findStateAndLayers (const TrajectorySeed &seed, const TempTrajectory &traj) const
 
const PropagatorforwardPropagator (const TrajectorySeed &seed) const
 
void moveToResult (TempTrajectory &&traj, TempTrajectoryContainer &result, bool inOut=false) const
 
bool qualityFilter (const TempTrajectory &traj, bool inOut=false) const
 
void setData (const MeasurementTrackerEvent *data)
 
bool toBeContinued (TempTrajectory &traj, bool inOut=false) const
 

Private Types

enum  work_MaxSize_Size_ { work_MaxSize_ = 50 }
 

Private Member Functions

bool advanceOneLayer (const TrajectorySeed &seed, TempTrajectory &traj, const TrajectoryFilter *regionalCondition, const Propagator *propagator, bool inOut, TempTrajectoryContainer &newCand, TempTrajectoryContainer &result) const
 
TempTrajectory backwardFit (TempTrajectory &candidate, unsigned int nSeed, const TrajectoryFitter &fitter, std::vector< const TrackingRecHit * > &remainingHits) const
 
void groupedIntermediaryClean (TempTrajectoryContainer &theTrajectories) const
 intermediate cleaning in the case of grouped measurements More...
 
unsigned int groupedLimitedCandidates (const TrajectorySeed &seed, TempTrajectory const &startingTraj, const TrajectoryFilter *regionalCondition, const Propagator *propagator, bool inOut, TempTrajectoryContainer &result) const
 
void rebuildSeedingRegion (const TrajectorySeed &seed, TempTrajectory const &startingTraj, TempTrajectoryContainer &result) const
 try to find additional hits in seeding region More...
 
int rebuildSeedingRegion (const TrajectorySeed &seed, const std::vector< const TrackingRecHit * > &seedHits, TempTrajectory &candidate, TempTrajectoryContainer &result) const
 
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. More...
 

Static Private Member Functions

static PropagationDirection oppositeDirection (PropagationDirection dir)
 change of propagation direction More...
 

Private Attributes

float maxDPhiForLooperReconstruction
 
float maxPt2ForLooperReconstruction
 
bool theAlwaysUseInvalid
 
bool theBestHitOnly
 
double theChiSquareCut
 
TrajectoryFiltertheConfigurableCondition
 
float theFoundHitBonus
 
bool theIntermediateCleaning
 
bool theKeepOriginalIfRebuildFails
 
bool theLockHits
 
float theLostHitPenalty
 
double theMass
 
int theMaxCand
 
unsigned int theMinNrOf2dHitsForRebuild
 
unsigned int theMinNrOfHitsForRebuild
 
double theptCut
 
bool theRequireSeedHitsInRebuild
 

Additional Inherited Members

- Public Types inherited from BaseCkfTrajectoryBuilder
typedef std::vector< TempTrajectoryTempTrajectoryContainer
 
typedef std::vector< TrajectoryTrajectoryContainer
 
typedef TrajectoryContainer::iterator TrajectoryIterator
 
- Public Types inherited from TrajectoryBuilder
typedef std::vector< TrajectoryTrajectoryContainer
 
typedef TrajectoryContainer::iterator TrajectoryIterator
 
- Protected Types inherited from BaseCkfTrajectoryBuilder
typedef TrackingComponentsRecord Chi2MeasurementEstimatorRecord
 
typedef FreeTrajectoryState FTS
 
typedef std::pair< TSOS, std::vector< const DetLayer * > > StateAndLayers
 
typedef TrajectoryMeasurement TM
 
typedef TrajectoryStateOnSurface TSOS
 
- Static Protected Member Functions inherited from BaseCkfTrajectoryBuilder
static TrajectoryFiltercreateTrajectoryFilter (const edm::ParameterSet &pset, edm::ConsumesCollector &iC)
 
- Protected Attributes inherited from BaseCkfTrajectoryBuilder
const Chi2MeasurementEstimatorBasetheEstimator
 
const MeasurementTrackerEventtheMeasurementTracker
 
const NavigationSchooltheNavigationSchool = 0
 
const PropagatorthePropagatorAlong
 
const PropagatorthePropagatorOpposite
 
const TransientTrackingRecHitBuildertheTTRHBuilder
 
const TrajectoryStateUpdatortheUpdator
 

Detailed Description

A highly configurable trajectory builder that allows full exploration of the combinatorial tree of possible continuations, and provides efficient ways of trimming the combinatorial tree.

Definition at line 24 of file GroupedCkfTrajectoryBuilder.h.

Member Enumeration Documentation

Enumerator
work_MaxSize_ 

Definition at line 208 of file GroupedCkfTrajectoryBuilder.h.

208 { work_MaxSize_ = 50 }; // if it grows above this number, it is forced to resize to half this amount when cleared

Constructor & Destructor Documentation

GroupedCkfTrajectoryBuilder::GroupedCkfTrajectoryBuilder ( const edm::ParameterSet conf,
edm::ConsumesCollector iC 
)

constructor from ParameterSet

Definition at line 126 of file GroupedCkfTrajectoryBuilder.cc.

References edm::ParameterSet::existsAs(), edm::ParameterSet::getParameter(), SiStripPI::max, maxDPhiForLooperReconstruction, maxPt2ForLooperReconstruction, theAlwaysUseInvalid, theBestHitOnly, theFoundHitBonus, theIntermediateCleaning, theKeepOriginalIfRebuildFails, theLockHits, theLostHitPenalty, theMaxCand, theMinNrOf2dHitsForRebuild, theMinNrOfHitsForRebuild, and theRequireSeedHitsInRebuild.

126  :
129  conf.getParameter<bool>("useSameTrajFilter") ?
132  )
133 {
134  // fill data members from parameters (eventually data members could be dropped)
135  //
136  theMaxCand = conf.getParameter<int>("maxCand");
137  theLostHitPenalty = conf.getParameter<double>("lostHitPenalty");
138  theFoundHitBonus = conf.getParameter<double>("foundHitBonus");
139  theIntermediateCleaning = conf.getParameter<bool>("intermediateCleaning");
140  theAlwaysUseInvalid = conf.getParameter<bool>("alwaysUseInvalidHits");
141  theLockHits = conf.getParameter<bool>("lockHits");
142  theBestHitOnly = conf.getParameter<bool>("bestHitOnly");
144  theRequireSeedHitsInRebuild = conf.getParameter<bool>("requireSeedHitsInRebuild");
145  theKeepOriginalIfRebuildFails = conf.getParameter<bool>("keepOriginalIfRebuildFails");
146  theMinNrOfHitsForRebuild = max(0,conf.getParameter<int>("minNrOfHitsForRebuild"));
147  maxPt2ForLooperReconstruction = conf.existsAs<double>("maxPtForLooperReconstruction") ?
148  conf.getParameter<double>("maxPtForLooperReconstruction") : 0;
150  maxDPhiForLooperReconstruction = conf.existsAs<double>("maxDPhiForLooperReconstruction") ?
151  conf.getParameter<double>("maxDPhiForLooperReconstruction") : 2.0;
152 
153 
154  /* ======= B.M. to be ported layer ===========
155  bool setOK = thePropagator->setMaxDirectionChange(1.6);
156  if (!setOK)
157  cout << "GroupedCkfTrajectoryBuilder WARNING: "
158  << "propagator does not support setMaxDirectionChange"
159  << endl;
160  // addStopCondition(theMinPtStopCondition);
161 
162  theConfigurableCondition = createAlgo<TrajectoryFilter>(componentConfig("StopCondition"));
163  ===================================== */
164 
165 }
T getParameter(std::string const &) const
bool existsAs(std::string const &parameterName, bool trackiness=true) const
checks if a parameter exists as a given type
Definition: ParameterSet.h:186
static TrajectoryFilter * createTrajectoryFilter(const edm::ParameterSet &pset, edm::ConsumesCollector &iC)
BaseCkfTrajectoryBuilder(const edm::ParameterSet &conf, TrajectoryFilter *filter, TrajectoryFilter *inOutFilter=0)
GroupedCkfTrajectoryBuilder::~GroupedCkfTrajectoryBuilder ( )
inlineoverride

Member Function Documentation

bool GroupedCkfTrajectoryBuilder::advanceOneLayer ( const TrajectorySeed seed,
TempTrajectory traj,
const TrajectoryFilter regionalCondition,
const Propagator propagator,
bool  inOut,
TempTrajectoryContainer newCand,
TempTrajectoryContainer result 
) const
private

Definition at line 463 of file GroupedCkfTrajectoryBuilder.cc.

References funct::abs(), BaseCkfTrajectoryBuilder::addToResult(), cmsutils::bqueue< T >::back(), PV3DBase< T, PVType, FrameType >::basicVector(), constexpr, gather_cfg::cout, TempTrajectory::empty(), PV3DBase< T, PVType, FrameType >::eta(), TransverseImpactPointExtrapolator::extrapolate(), f, lumiContext::fill, BaseCkfTrajectoryBuilder::findStateAndLayers(), BaseCkfTrajectoryBuilder::forwardPropagator(), TempTrajectory::foundHits(), TrajectoryStateOnSurface::globalMomentum(), TrajectoryStateOnSurface::globalPosition(), TempTrajectory::incrementLoops(), TrajectoryStateOnSurface::isValid(), TempTrajectory::join(), TempTrajectory::lastLayer(), TempTrajectory::lastMeasurement(), TrajectoryMeasurement::layer(), LayerTriplets::layers(), Bounds::length(), DetLayer::location(), LogDebug, TempTrajectory::lostHits(), maxDPhiForLooperReconstruction, maxPt2ForLooperReconstruction, TempTrajectory::measurements(), TrackingRecHit::missing, eostools::move(), BaseCkfTrajectoryBuilder::moveToResult(), N, NO_SEGMENTS_FOR_VALID_LAYERS, NOT_STOPPED, PV3DBase< T, PVType, FrameType >::perp(), PV3DBase< T, PVType, FrameType >::phi(), Propagator::propagationDirection(), hiDetachedQuadStep_cff::pt2, cmsutils::bqueue< T >::rbegin(), rejected(), cmsutils::bqueue< T >::rend(), TempTrajectory::setDPhiCacheForLoopersReconstruction(), TempTrajectory::setStopReason(), BarrelDetLayer::specificSurface(), lumiQTWidget::t, edmPickEvents::target, theAlwaysUseInvalid, theBestHitOnly, BaseCkfTrajectoryBuilder::theEstimator, theLockHits, theMaxCand, BaseCkfTrajectoryBuilder::theMeasurementTracker, BaseCkfTrajectoryBuilder::theUpdator, BaseCkfTrajectoryBuilder::toBeContinued(), TrajectoryStateOnSurface::transverseCurvature(), unlikely, TrajectoryMeasurement::updatedState(), and PV3DBase< T, PVType, FrameType >::z().

Referenced by groupedLimitedCandidates().

470 {
471  std::pair<TSOS,std::vector<const DetLayer*> > && stateAndLayers = findStateAndLayers(seed,traj);
472 
473 
475  if(
476  //stateAndLayers.second.size()==0 &&
477  traj.lastLayer()->location()==0) {
478  float pt2 = stateAndLayers.first.globalMomentum().perp2();
480  pt2>(0.3f*0.3f)
481  )
482  stateAndLayers.second.push_back(traj.lastLayer());
483  }
484  }
485 
486  auto layerBegin = stateAndLayers.second.begin();
487  auto layerEnd = stateAndLayers.second.end();
488 
489  // if (nl.empty()) {
490  // addToResult(traj,result,inOut);
491  // return false;
492  // }
493 
494 #ifdef EDM_ML_DEBUG
495  LogDebug("CkfPattern")<<whatIsTheNextStep(traj, stateAndLayers);
496 #endif
497 
498  bool foundSegments(false);
499  bool foundNewCandidates(false);
500  for ( auto il=layerBegin; il!=layerEnd; il++) {
501 
502  TSOS stateToUse = stateAndLayers.first;
503 
504  double dPhiCacheForLoopersReconstruction(0);
505  if unlikely(!traj.empty() && (*il)==traj.lastLayer()){
506 
508  // ------ For loopers reconstruction
509  //cout<<" self propagating in advanceOneLayer (for loopers) \n";
510  const BarrelDetLayer* sbdl = dynamic_cast<const BarrelDetLayer*>(traj.lastLayer());
511  if(sbdl){
512  HelixBarrelCylinderCrossing cylinderCrossing(stateToUse.globalPosition(),
513  stateToUse.globalMomentum(),
514  stateToUse.transverseCurvature(),
515  propagator->propagationDirection(),
516  sbdl->specificSurface());
517  if(!cylinderCrossing.hasSolution()) continue;
518  GlobalPoint starting = stateToUse.globalPosition();
519  GlobalPoint target1 = cylinderCrossing.position1();
520  GlobalPoint target2 = cylinderCrossing.position2();
521 
522  GlobalPoint farther = fabs(starting.phi()-target1.phi()) > fabs(starting.phi()-target2.phi()) ?
523  target1 : target2;
524 
525  const Bounds& bounds( sbdl->specificSurface().bounds());
526  float length = 0.5f*bounds.length();
527 
528  /*
529  cout << "starting: " << starting << endl;
530  cout << "target1: " << target1 << endl;
531  cout << "target2: " << target2 << endl;
532  cout << "dphi: " << (target1.phi()-target2.phi()) << endl;
533  cout << "length: " << length << endl;
534  */
535 
536  /*
537  float deltaZ = bounds.thickness()/2.f/fabs(tan(stateToUse.globalDirection().theta()) ) ;
538  if(stateToUse.hasError())
539  deltaZ += 3*sqrt(stateToUse.cartesianError().position().czz());
540  if( fabs(farther.z()) > length + deltaZ ) continue;
541  */
542  if(fabs(farther.z())*0.95f>length) continue;
543 
544  Geom::Phi<float> tmpDphi = target1.phi()-target2.phi();
545  if(std::abs(tmpDphi)>maxDPhiForLooperReconstruction) continue;
546  GlobalPoint target(0.5f*(target1.basicVector()+target2.basicVector()));
547  //cout << "target: " << target << endl;
548 
549 
550 
552  stateToUse = extrapolator.extrapolate(stateToUse, target, *propagator);
553  if (!stateToUse.isValid()) continue; //SK: consider trying the original? probably not
554 
555  //dPhiCacheForLoopersReconstruction = fabs(target1.phi()-target2.phi())*2.;
556  dPhiCacheForLoopersReconstruction = std::abs(tmpDphi);
557  traj.incrementLoops();
558  }else{ // not barrel
559  continue;
560  }
561  }else{ // loopers not requested (why else???)
562  // ------ For cosmics reconstruction
563  LogDebug("CkfPattern")<<" self propagating in advanceOneLayer.\n from: \n"<<stateToUse;
564  //self navigation case
565  // go to a middle point first
567  GlobalPoint center(0,0,0);
568  stateToUse = middle.extrapolate(stateToUse, center, *(forwardPropagator(seed)));
569 
570  if (!stateToUse.isValid()) continue;
571  LogDebug("CkfPattern")<<"to: "<<stateToUse;
572  }
573  } // last layer...
574 
575  //unsigned int maxCandidates = theMaxCand > 21 ? theMaxCand*2 : 42; //limit the number of returned segments
576  LayerMeasurements layerMeasurements(theMeasurementTracker->measurementTracker(), *theMeasurementTracker);
577  TrajectorySegmentBuilder layerBuilder(&layerMeasurements,
578  **il,*propagator,
581 
582 #ifdef EDM_ML_DEBUG
583  LogDebug("CkfPattern")<<whatIsTheStateToUse(stateAndLayers.first,stateToUse,*il);
584 #endif
585 
586  auto && segments= layerBuilder.segments(stateToUse);
587 
588  LogDebug("CkfPattern")<< "GCTB: number of segments = " << segments.size();
589 
590  if ( !segments.empty() ) foundSegments = true;
591 
592  for (auto is=segments.begin(); is!=segments.end(); is++ ) {
593  //
594  // assume "invalid hit only" segment is last in list
595  //
596  auto const & measurements = is->measurements();
597  if ( !theAlwaysUseInvalid && is!=segments.begin() && measurements.size()==1 &&
598  (measurements.front().recHit()->getType() == TrackingRecHit::missing) ) break;
599 
600 
601  //---- avoid to add the same hits more than once in the trajectory ----
602  bool toBeRejected(false);
603  for(auto revIt = measurements.rbegin(); revIt!=measurements.rend(); --revIt){
604  // int tmpCounter(0);
605  for(auto newTrajMeasIt = traj.measurements().rbegin();
606  newTrajMeasIt != traj.measurements().rend(); --newTrajMeasIt){
607  //if(tmpCounter==2) break;
608  if(revIt->recHitR().geographicalId()==newTrajMeasIt->recHitR().geographicalId()
609  && (revIt->recHitR().geographicalId() != DetId(0)) ){
610  toBeRejected=true;
611  goto rejected; //break; // see http://stackoverflow.com/questions/1257744/can-i-use-break-to-exit-multiple-nested-for-loops
612  }
613  // tmpCounter++;
614  }
615  }
616 
617  rejected:; // http://xkcd.com/292/
618  if(toBeRejected){
619 #ifdef VI_DEBUG
620  cout << "WARNING: neglect candidate because it contains the same hit twice \n";
621  cout << "-- discarded track's pt,eta,#found/lost: "
622  << traj.lastMeasurement().updatedState().globalMomentum().perp() << " , "
623  << traj.lastMeasurement().updatedState().globalMomentum().eta() << " , "
624  << traj.foundHits() << '/' << traj.lostHits() << "\n";
625 #endif
626  traj.setDPhiCacheForLoopersReconstruction(dPhiCacheForLoopersReconstruction);
627  continue; //Are we sure about this????
628  }
629  // ------------------------
630 
631  //
632  // create new candidate
633  //
634  TempTrajectory newTraj(traj);
635  traj.setDPhiCacheForLoopersReconstruction(dPhiCacheForLoopersReconstruction);
636  newTraj.join(*is);
637 
638  //std::cout << "DEBUG: newTraj after push found,lost: "
639  // << newTraj.foundHits() << " , "
640  // << newTraj.lostHits() << " , "
641  // << newTraj.measurements().size() << std::endl;
642 
643 
644 
645  //GIO// for ( vector<TM>::const_iterator im=measurements.begin();
646  //GIO// im!=measurements.end(); im++ ) newTraj.push(*im);
647  //if ( toBeContinued(newTraj,regionalCondition) ) { TOBE FIXED
648  if ( toBeContinued(newTraj, inOut) ) {
649  // Have added one more hit to track candidate
650 
651  LogDebug("CkfPattern")<<"GCTB: adding updated trajectory to candidates: inOut="<<inOut<<" hits="<<newTraj.foundHits();
652 
653  newTraj.setStopReason(StopReason::NOT_STOPPED);
654  newCand.push_back(std::move(newTraj));
655  foundNewCandidates = true;
656  }
657  else {
658  // Have finished building this track. Check if it passes cuts.
659 
660  LogDebug("CkfPattern")<< "GCTB: adding completed trajectory to results if passes cuts: inOut="<<inOut<<" hits="<<newTraj.foundHits();
661  moveToResult(std::move(newTraj), result, inOut);
662  }
663  } // loop over segs
664  } // loop over layers
665 
666  if ( !foundSegments ){
667  LogDebug("CkfPattern")<< "GCTB: adding input trajectory to result";
668  if (!stateAndLayers.second.empty())
670  addToResult(traj, result, inOut);
671  }
672  return foundNewCandidates;
673 }
#define LogDebug(id)
const_iterator rend() const
Definition: bqueue.h:164
virtual float length() const =0
T perp() const
Definition: PV3DBase.h:72
bool empty() const
True if trajectory has no measurements.
const Propagator * forwardPropagator(const TrajectorySeed &seed) const
const DataContainer & measurements() const
virtual Location location() const =0
Which part of the detector (barrel, endcap)
Geom::Phi< T > phi() const
Definition: PV3DBase.h:69
const TrajectoryStateUpdator * theUpdator
GlobalPoint globalPosition() const
virtual const BoundCylinder & specificSurface() const final
Extension of the interface.
int foundHits() const
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is rejected(acceptEvent retursns false).There are 3 relevant cases of types of criteria
const TrajectoryMeasurement & lastMeasurement() const
#define unlikely(x)
void setDPhiCacheForLoopersReconstruction(float dphi)
virtual PropagationDirection propagationDirection() const final
Definition: Propagator.h:151
T z() const
Definition: PV3DBase.h:64
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
double f[11][100]
void addToResult(boost::shared_ptr< const TrajectorySeed > const &seed, TempTrajectory &traj, TrajectoryContainer &result, bool inOut=false) const
const_iterator rbegin() const
Definition: bqueue.h:163
StateAndLayers findStateAndLayers(const TrajectorySeed &seed, const TempTrajectory &traj) const
const MeasurementTrackerEvent * theMeasurementTracker
Definition: DetId.h:18
void moveToResult(TempTrajectory &&traj, TempTrajectoryContainer &result, bool inOut=false) const
T eta() const
Definition: PV3DBase.h:76
TrajectoryStateOnSurface extrapolate(const FreeTrajectoryState &fts, const GlobalPoint &vtx) const
extrapolation with default (=geometrical) propagator
GlobalVector globalMomentum() const
bool toBeContinued(TempTrajectory &traj, bool inOut=false) const
void setStopReason(StopReason s)
TrajectoryStateOnSurface const & updatedState() const
Definition: Bounds.h:22
const DetLayer * lastLayer() const
Redundant method, returns the layer of lastMeasurement() .
const BasicVectorType & basicVector() const
Definition: PV3DBase.h:56
def move(src, dest)
Definition: eostools.py:510
const Chi2MeasurementEstimatorBase * theEstimator
int lostHits() const
virtual void GroupedCkfTrajectoryBuilder::analyseMeasurements ( const std::vector< TM > &  meas,
const Trajectory traj 
) const
inlineprotectedvirtual

Definition at line 101 of file GroupedCkfTrajectoryBuilder.h.

102  {}
virtual void GroupedCkfTrajectoryBuilder::analyseResult ( const TrajectoryContainer result) const
inlineprotectedvirtual

Definition at line 103 of file GroupedCkfTrajectoryBuilder.h.

Referenced by buildTrajectories().

103 {}
virtual void GroupedCkfTrajectoryBuilder::analyseSeed ( const TrajectorySeed seed) const
inlineprotectedvirtual

Definition at line 99 of file GroupedCkfTrajectoryBuilder.h.

Referenced by buildTrajectories().

99 {}
TempTrajectory GroupedCkfTrajectoryBuilder::backwardFit ( TempTrajectory candidate,
unsigned int  nSeed,
const TrajectoryFitter fitter,
std::vector< const TrackingRecHit * > &  remainingHits 
) const
private

Definition at line 1013 of file GroupedCkfTrajectoryBuilder.cc.

References TempTrajectory::direction(), Trajectory::direction(), PrintoutHelper::dumpMeasurement(), PrintoutHelper::dumpMeasurements(), Trajectory::firstMeasurement(), TrajectoryFitter::fitOne(), TempTrajectory::foundHits(), TrackingRecHit::isValid(), Trajectory::isValid(), likely, LogDebug, SiStripPI::max, Trajectory::measurements(), TempTrajectory::measurements(), ALCARECOTkAlBeamHalo_cff::nHitMin, TempTrajectory::nLoops(), Trajectory::nLoops(), oppositeDirection(), Trajectory::push(), Trajectory::recHits(), TrajectoryStateOnSurface::rescaleError(), Trajectory::setNLoops(), cmsutils::bqueue< T >::size(), theMinNrOfHitsForRebuild, unlikely, and TrajectoryMeasurement::updatedState().

Referenced by rebuildSeedingRegion().

1016 {
1017  //
1018  // clear array of non-fitted hits
1019  //
1020  remainingHits.clear();
1021 
1022  LogDebug("CkfPattern")<<"nSeed " << nSeed << endl
1023  << "Old traj direction = " << candidate.direction() << endl
1025 
1026  //
1027  // backward fit trajectory.
1028  // (Will try to fit only hits outside the seeding region. However,
1029  // if there are not enough of these, it will also use the seeding hits).
1030  //
1031  // const unsigned int nHitAllMin(5);
1032  // const unsigned int nHit2dMin(2);
1033  unsigned int nHit(0); // number of valid hits after seeding region
1034  //unsigned int nHit2d(0); // number of valid hits after seeding region with 2D info
1035  // use all hits except the first n (from seed), but require minimum
1036  // specified in configuration.
1037  // Swapped over next two lines.
1038  unsigned int nHitMin = std::max(candidate.foundHits()-nSeed,theMinNrOfHitsForRebuild);
1039  // unsigned int nHitMin = oldMeasurements.size()-nSeed;
1040  // we want to rebuild only if the number of VALID measurements excluding the seed measurements is higher than the cut
1042 
1043  LogDebug("CkfPattern")/* << "nHitMin " << nHitMin*/ <<"Sizes: " << candidate.measurements().size() << " / ";
1044  //
1045  // create input trajectory for backward fit
1046  //
1047  Trajectory fwdTraj(oppositeDirection(candidate.direction()));
1048  fwdTraj.setNLoops(candidate.nLoops());
1049  //const TrajectorySeed seed = TrajectorySeed(PTrajectoryStateOnDet(), TrajectorySeed::recHitContainer(), oppositeDirection(candidate.direction()));
1050  //Trajectory fwdTraj(seed, oppositeDirection(candidate.direction()));
1051 
1052  const DetLayer* bwdDetLayer[candidate.measurements().size()];
1053  int nl=0;
1054  for ( auto const & tm : candidate.measurements() ) {
1055  const TrackingRecHit* hit = tm.recHitR().hit();
1056  //
1057  // add hits until required number is reached
1058  //
1059  if ( nHit<nHitMin ){//|| nHit2d<theMinNrOf2dHitsForRebuild ) {
1060  fwdTraj.push(tm);
1061  bwdDetLayer[nl++]=tm.layer();
1062  //
1063  // count valid / 2D hits
1064  //
1065  if likely( hit->isValid() ) {
1066  nHit++;
1067  //if ( hit.isMatched() ||
1068  // hit.det().detUnits().front()->type().module()==pixel )
1069  //nHit2d++;
1070  }
1071  }
1072  //if (nHit==nHitMin) lastBwdDetLayer=im->layer();
1073  //
1074  // keep remaining (valid) hits for verification
1075  //
1076  else if ( hit->isValid() ) {
1077  //std::cout << "Adding a remaining hit" << std::endl;
1078  remainingHits.push_back(hit);
1079  }
1080  }
1081  //
1082  // Fit only if required number of valid hits can be used
1083  //
1084  if unlikely( nHit<nHitMin ) return TempTrajectory();
1085 
1086  //
1087  // Do the backward fit (important: start from scaled, not random cov. matrix!)
1088  //
1089  TrajectoryStateOnSurface firstTsos(fwdTraj.firstMeasurement().updatedState());
1090  //cout << "firstTsos "<< firstTsos << endl;
1091  firstTsos.rescaleError(10.);
1092  //TrajectoryContainer bwdFitted(fitter.fit(fwdTraj.seed(),fwdTraj.recHits(),firstTsos));
1093  Trajectory && bwdFitted = fitter.fitOne(TrajectorySeed(PTrajectoryStateOnDet(), TrajectorySeed::recHitContainer(), oppositeDirection(candidate.direction())),
1094  fwdTraj.recHits(),firstTsos);
1095  if unlikely(!bwdFitted.isValid()) return TempTrajectory();
1096 
1097 
1098  LogDebug("CkfPattern")<<"Obtained bwdFitted trajectory with measurement size " << bwdFitted.measurements().size();
1099  TempTrajectory fitted(fwdTraj.direction(),nSeed);
1100  fitted.setNLoops(fwdTraj.nLoops());
1101  vector<TM> const & tmsbf = bwdFitted.measurements();
1102  int iDetLayer=0;
1103  //this is ugly but the TM in the fitted track do not contain the DetLayer.
1104  //So we have to cache the detLayer pointers and replug them in.
1105  //For the backward building it would be enaugh to cache the last DetLayer,
1106  //but for the intermediary cleaning we need all
1107  for ( vector<TM>::const_iterator im=tmsbf.begin();im!=tmsbf.end(); im++ ) {
1108  fitted.emplace( (*im).forwardPredictedState(),
1109  (*im).backwardPredictedState(),
1110  (*im).updatedState(),
1111  (*im).recHit(),
1112  (*im).estimate(),
1113  bwdDetLayer[iDetLayer]
1114  );
1115 
1116  LogDebug("CkfPattern")<<PrintoutHelper::dumpMeasurement(*im);
1117  iDetLayer++;
1118  }
1119  /*
1120  TM lastMeas = bwdFitted.front().lastMeasurement();
1121  fitted.pop();
1122  fitted.push(TM(lastMeas.forwardPredictedState(),
1123  lastMeas.backwardPredictedState(),
1124  lastMeas.updatedState(),
1125  lastMeas.recHit(),
1126  lastMeas.estimate(),
1127  lastBwdDetLayer));
1128  */
1129 
1130 
1131  return fitted;
1132 }
#define LogDebug(id)
size
Write out results.
const DataContainer & measurements() const
int foundHits() const
static std::string dumpMeasurement(const TrajectoryMeasurement &tm)
static std::string dumpMeasurements(const std::vector< TrajectoryMeasurement > &v)
#define unlikely(x)
PropagationDirection direction() const
#define likely(x)
static PropagationDirection oppositeDirection(PropagationDirection dir)
change of propagation direction
#define end
Definition: vmac.h:37
bool isValid() const
return(e1-e2)*(e1-e2)+dp *dp
#define begin
Definition: vmac.h:30
if(dp >Float(M_PI)) dp-
TempTrajectory GroupedCkfTrajectoryBuilder::buildTrajectories ( const TrajectorySeed seed,
GroupedCkfTrajectoryBuilder::TrajectoryContainer result,
unsigned int &  nCandPerSeed,
const TrajectoryFilter regionalCondition 
) const
overridevirtual

common part of both public trajectory building methods

Reimplemented from BaseCkfTrajectoryBuilder.

Definition at line 260 of file GroupedCkfTrajectoryBuilder.cc.

References analyseResult(), analyseSeed(), EnergyCorrector::c, FastTrajectoryCleaner::clean(), gather_cfg::cout, BaseCkfTrajectoryBuilder::createStartingTrajectory(), Exception, BaseTrackerRecHit::firstClusterRef(), BaseCkfTrajectoryBuilder::forwardPropagator(), groupedLimitedCandidates(), trackerHitRTTI::isUndef(), LogDebug, theFoundHitBonus, theLostHitPenalty, BaseCkfTrajectoryBuilder::theMeasurementTracker, and work_MaxSize_.

Referenced by trajectories().

264 {
265  if (theMeasurementTracker == nullptr) {
266  throw cms::Exception("LogicError") << "Asking to create trajectories to an un-initialized GroupedCkfTrajectoryBuilder.\nYou have to call clone(const MeasurementTrackerEvent *data) and then call trajectories on it instead.\n";
267  }
268 
269  statCount.seed();
270  //
271  // Build trajectory outwards from seed
272  //
273 
274  analyseSeed( seed);
275 
276  TempTrajectory const & startingTraj = createStartingTrajectory( seed);
277 
278  work_.clear();
279  const bool inOut = true;
280  nCandPerSeed = groupedLimitedCandidates(seed, startingTraj, regionalCondition, forwardPropagator(seed), inOut, work_);
281  if ( work_.empty() ) return startingTraj;
282 
283  // cleaning now done here...
285  cleaner.clean(work_);
286 
287  boost::shared_ptr<const TrajectorySeed> pseed(new TrajectorySeed(seed));
288  for (auto const & it : work_) if (it.isValid()) {
289  result.push_back( it.toTrajectory() ); result.back().setSharedSeed(pseed);
290  }
291  work_.clear();
292  if (work_.capacity() > work_MaxSize_) { TempTrajectoryContainer().swap(work_); work_.reserve(work_MaxSize_/2); }
293 
295 
296  LogDebug("CkfPattern")<< "GroupedCkfTrajectoryBuilder: returning result of size " << result.size();
297  statCount.traj(result.size());
298 
299 #ifdef VI_DEBUG
300  int kt=0;
301  for (auto const & traj : result) {
302 int chit[7]={};
303 for (auto const & tm : traj.measurements()) {
304  auto const & hit = tm.recHitR();
305  if (!hit.isValid()) ++chit[0];
306  if (hit.det()==nullptr) ++chit[1];
307  if ( trackerHitRTTI::isUndef(hit) ) continue;
308  if ( hit.dimension()!=2 ) {
309  ++chit[2];
310  } else {
311  auto const & thit = static_cast<BaseTrackerRecHit const&>(hit);
312  auto const & clus = thit.firstClusterRef();
313  if (clus.isPixel()) ++chit[3];
314  else if (thit.isMatched()) {
315  ++chit[4];
316  } else if (thit.isProjected()) {
317  ++chit[5];
318  } else {
319  ++chit[6];
320  }
321  }
322  }
323 
324 std::cout << "ckf " << kt++ << ": "; for (auto c:chit) std::cout << c <<'/'; std::cout<< std::endl;
325 }
326 #endif
327 
328  return startingTraj;
329 
330 }
#define LogDebug(id)
unsigned int groupedLimitedCandidates(const TrajectorySeed &seed, TempTrajectory const &startingTraj, const TrajectoryFilter *regionalCondition, const Propagator *propagator, bool inOut, TempTrajectoryContainer &result) const
const Propagator * forwardPropagator(const TrajectorySeed &seed) const
virtual void analyseSeed(const TrajectorySeed &seed) const
virtual void analyseResult(const TrajectoryContainer &result) const
const MeasurementTrackerEvent * theMeasurementTracker
std::vector< TempTrajectory > TempTrajectoryContainer
virtual OmniClusterRef const & firstClusterRef() const =0
bool isUndef(TrackingRecHit const &hit)
TempTrajectory createStartingTrajectory(const TrajectorySeed &seed) const
double GroupedCkfTrajectoryBuilder::chiSquareCut ( )
inline

Chi**2 Cut on the new Trajectory Measurements to consider

Definition at line 78 of file GroupedCkfTrajectoryBuilder.h.

const Chi2MeasurementEstimatorBase& GroupedCkfTrajectoryBuilder::estimator ( void  ) const
inline

Definition at line 73 of file GroupedCkfTrajectoryBuilder.h.

References BaseCkfTrajectoryBuilder::theEstimator.

Referenced by rebuildSeedingRegion().

73 {return *theEstimator;}
const Chi2MeasurementEstimatorBase * theEstimator
void GroupedCkfTrajectoryBuilder::groupedIntermediaryClean ( TempTrajectoryContainer theTrajectories) const
private

intermediate cleaning in the case of grouped measurements

im1->recHit()->hit()->sharesInput(im2->recHit()->hit(), TrackingRecHit::all) ) {

im1->recHit()->hit()->sharesInput(im2->recHit()->hit(), TrackingRecHit::all) ) {

Definition at line 708 of file GroupedCkfTrajectoryBuilder.cc.

References lumiContext::fill, align_cfg::firstValid, TempTrajectory::isValid(), LayerTriplets::layers(), cmsutils::bqueue< T >::rbegin(), cmsutils::bqueue< T >::rend(), TrackingRecHit::some, lumiQTWidget::t, and tkxor().

Referenced by groupedLimitedCandidates().

709 {
710  //if (theTrajectories.empty()) return TrajectoryContainer();
711  //TrajectoryContainer result;
712  if (theTrajectories.empty()) return;
713  //RecHitEqualByChannels recHitEqualByChannels(false, false);
714  LayersInTraj layers[theTrajectories.size()];
715  int ntraj=0;
716  for ( auto & t : theTrajectories) {
717  if ( t.isValid() && t.lastMeasurement().recHitR().isValid() )
718  layers[ntraj++].fill(t);
719  }
720 
721  if (ntraj<2) return;
722 
723  for (int ifirst=0; ifirst!=ntraj-1; ++ifirst) {
724  auto firstTraj = layers[ifirst].traj;
725  if (!firstTraj->isValid()) continue;
726  const TempTrajectory::DataContainer & firstMeasurements = firstTraj->measurements();
727 
728  int firstLayerSize = layers[ifirst].tot;
729  if ( firstLayerSize<4 ) continue;
730  auto const & firstLayers = layers[ifirst].layers;
731 
732  for (int isecond= ifirst+1; isecond!=ntraj; ++isecond) {
733  auto secondTraj = layers[isecond].traj;
734  if (!secondTraj->isValid()) continue;
735 
736  const TempTrajectory::DataContainer & secondMeasurements = secondTraj->measurements();
737 
738  int secondLayerSize = layers[isecond].tot;
739  //
740  // only candidates using the same last 3 layers are compared
741  //
742  if ( firstLayerSize!=secondLayerSize ) continue; // V.I. why equal???
743  auto const & secondLayers = layers[isecond].layers;
744  if ( firstLayers[0]!=secondLayers[0] ||
745  firstLayers[1]!=secondLayers[1] ||
746  firstLayers[2]!=secondLayers[2] ) continue;
747 
748  TempTrajectory::DataContainer::const_iterator im1 = firstMeasurements.rbegin();
749  TempTrajectory::DataContainer::const_iterator im2 = secondMeasurements.rbegin();
750  //
751  // check for identical hits in the last layer
752  //
753  bool unequal(false);
754  const DetLayer* layerPtr = firstLayers[0];
755  while ( im1!=firstMeasurements.rend()&&im2!=secondMeasurements.rend() ) {
756  if ( im1->layer()!=layerPtr || im2->layer()!=layerPtr ) break;
757  if ( !(im1->recHit()->isValid()) || !(im2->recHit()->isValid()) ||
758  !im1->recHit()->hit()->sharesInput(im2->recHit()->hit(), TrackingRecHit::some) ) {
760  unequal = true;
761  break;
762  }
763  --im1;
764  --im2;
765  }
766  if ( im1==firstMeasurements.rend() || im2==secondMeasurements.rend() ||
767  im1->layer()==layerPtr || im2->layer()==layerPtr || unequal ) continue;
768  //
769  // check for invalid hits in the layer -2
770  // compare only candidates with invalid / valid combination
771  //
772  layerPtr = firstLayers[1];
773  bool firstValid(true);
774  while ( im1!=firstMeasurements.rend()&&im1->layer()==layerPtr ) {
775  if ( !im1->recHit()->isValid() ) firstValid = false;
776  --im1;
777  }
778  bool secondValid(true);
779  while ( im2!=secondMeasurements.rend()&&im2->layer()==layerPtr ) {
780  if ( !im2->recHit()->isValid() ) secondValid = false;
781  --im2;
782  }
783  if ( !tkxor(firstValid,secondValid) ) continue;
784  //
785  // ask for identical hits in layer -3
786  //
787  unequal = false;
788  layerPtr = firstLayers[2];
789  while ( im1!=firstMeasurements.rend()&&im2!=secondMeasurements.rend() ) {
790  if ( im1->layer()!=layerPtr || im2->layer()!=layerPtr ) break;
791  if ( !(im1->recHit()->isValid()) || !(im2->recHit()->isValid()) ||
792  !im1->recHit()->hit()->sharesInput(im2->recHit()->hit(), TrackingRecHit::some) ) {
794  unequal = true;
795  break;
796  }
797  --im1;
798  --im2;
799  }
800  if ( im1==firstMeasurements.rend() || im2==secondMeasurements.rend() ||
801  im1->layer()==layerPtr || im2->layer()==layerPtr || unequal ) continue;
802 
803  if ( !firstValid ) {
804  firstTraj->invalidate();
805  break;
806  }
807  else {
808  secondTraj->invalidate(); // V.I. why break?
809  break;
810  }
811  } // second
812  } // first
813 /*
814  for (TempTrajectoryContainer::const_iterator it = theTrajectories.begin();
815  it != theTrajectories.end(); it++) {
816  if(it->isValid()) result.push_back( *it);
817  }
818 
819  return result;
820 */
821  theTrajectories.erase(std::remove_if( theTrajectories.begin(),theTrajectories.end(),
822  std::not1(std::mem_fun_ref(&TempTrajectory::isValid))),
823  // boost::bind(&TempTrajectory::isValid,_1)),
824  theTrajectories.end());
825 }
const_iterator rend() const
Definition: bqueue.h:164
std::vector< LayerSetAndLayers > layers(const SeedingLayerSetsHits &sets)
Definition: LayerTriplets.cc:4
const_iterator rbegin() const
Definition: bqueue.h:163
bool isValid() const
bool tkxor(bool a, bool b) const
unsigned int GroupedCkfTrajectoryBuilder::groupedLimitedCandidates ( const TrajectorySeed seed,
TempTrajectory const &  startingTraj,
const TrajectoryFilter regionalCondition,
const Propagator propagator,
bool  inOut,
TempTrajectoryContainer result 
) const
private

Definition at line 334 of file GroupedCkfTrajectoryBuilder.cc.

References advanceOneLayer(), edmScanValgrind::buffer, objects.IsoTrackAnalyzer::candidates, TrajectoryStateOnSurface::charge(), IntermediateTrajectoryCleaner::clean(), TrajectoryStateOnSurface::curvilinearError(), PrintoutHelper::dumpCandidates(), TrajectoryStateOnSurface::globalMomentum(), TrajectoryStateOnSurface::globalPosition(), groupedIntermediaryClean(), mps_fire::i, checklumidiff::l, TempTrajectory::lastLayer(), LogDebug, CurvilinearTrajectoryError::matrix(), PV3DBase< T, PVType, FrameType >::perp(), PV3DBase< T, PVType, FrameType >::phi(), ForwardDetLayer::specificSurface(), BarrelDetLayer::specificSurface(), mathSSE::sqrt(), AlCaHLTBitMon_QueryRunRegistry::string, theFoundHitBonus, theIntermediateCleaning, theLostHitPenalty, theMaxCand, and PV3DBase< T, PVType, FrameType >::z().

Referenced by buildTrajectories(), and rebuildSeedingRegion().

340 {
341  unsigned int nIter=1;
342  unsigned int nCands=0; // ignore startingTraj
343  unsigned int prevNewCandSize=0;
345  TempTrajectoryContainer newCand;
346  candidates.push_back( startingTraj);
347 
348  while ( !candidates.empty()) {
349 
350  newCand.clear();
351  for (TempTrajectoryContainer::iterator traj=candidates.begin();
352  traj!=candidates.end(); traj++) {
353  if ( !advanceOneLayer(seed, *traj, regionalCondition, propagator, inOut, newCand, result) ) {
354  LogDebug("CkfPattern")<< "GCTB: terminating after advanceOneLayer==false";
355  continue;
356  }
357 
358  LogDebug("CkfPattern")<<"newCand(1): after advanced one layer:\n"<<PrintoutHelper::dumpCandidates(newCand);
359  // account only new candidates, i.e.
360  // - 1 candidate -> 1 candidate, don't increase count
361  // - 1 candidate -> 2 candidates, increase count by 1
362  nCands += newCand.size() - prevNewCandSize;
363  prevNewCandSize = newCand.size();
364 
365  if ((int)newCand.size() > theMaxCand) {
366  //ShowCand()(newCand);
367 
368  std::nth_element( newCand.begin(), newCand.begin()+theMaxCand, newCand.end(), GroupedTrajCandLess(theLostHitPenalty,theFoundHitBonus));
369  newCand.erase( newCand.begin()+theMaxCand, newCand.end());
370  }
371  LogDebug("CkfPattern")<<"newCand(2): after removing extra candidates.\n"<<PrintoutHelper::dumpCandidates(newCand);
372  }
373 
374  LogDebug("CkfPattern") << "newCand.size() at end = " << newCand.size();
375 /*
376  if (theIntermediateCleaning) {
377  candidates.clear();
378  candidates = groupedIntermediaryClean(newCand);
379  } else {
380  candidates.swap(newCand);
381  }
382 */
384 #ifdef STANDARD_INTERMEDIARYCLEAN
386 #else
387  groupedIntermediaryClean(newCand);
388 #endif
389 
390  }
391  candidates.swap(newCand);
392 
393  LogDebug("CkfPattern") <<"candidates(3): "<<result.size()<<" candidates after "<<nIter++<<" groupedCKF iteration: \n"
395  <<"\n "<<candidates.size()<<" running candidates are: \n"
396  <<PrintoutHelper::dumpCandidates(candidates);
397  }
398 
399  return nCands;
400 }
#define LogDebug(id)
static std::string dumpCandidates(collection &candidates)
static void clean(TempTrajectoryContainer &tracks)
void groupedIntermediaryClean(TempTrajectoryContainer &theTrajectories) const
intermediate cleaning in the case of grouped measurements
bool advanceOneLayer(const TrajectorySeed &seed, TempTrajectory &traj, const TrajectoryFilter *regionalCondition, const Propagator *propagator, bool inOut, TempTrajectoryContainer &newCand, TempTrajectoryContainer &result) const
std::vector< TempTrajectory > TempTrajectoryContainer
float GroupedCkfTrajectoryBuilder::lostHitPenalty ( )
inline

Chi**2 Penalty for each lost hit.

Definition at line 85 of file GroupedCkfTrajectoryBuilder.h.

double GroupedCkfTrajectoryBuilder::mass ( )
inline

Mass hypothesis used for propagation.

Definition at line 94 of file GroupedCkfTrajectoryBuilder.h.

References iEvent, and BaseCkfTrajectoryBuilder::setEvent_().

Referenced by Particle.Particle::__str__(), and DiObject.DiMuon::__str__().

int GroupedCkfTrajectoryBuilder::maxCand ( )
inline

Maximum number of trajectory candidates to propagate to the next layer.

Definition at line 81 of file GroupedCkfTrajectoryBuilder.h.

static PropagationDirection GroupedCkfTrajectoryBuilder::oppositeDirection ( PropagationDirection  dir)
inlinestaticprivate

change of propagation direction

Definition at line 159 of file GroupedCkfTrajectoryBuilder.h.

References alongMomentum, dir, and oppositeToMomentum.

Referenced by backwardFit().

159  {
160  if ( dir==alongMomentum ) return oppositeToMomentum;
161  if ( dir==oppositeToMomentum ) return alongMomentum;
162  return dir;
163  }
dbl *** dir
Definition: mlp_gen.cc:35
double GroupedCkfTrajectoryBuilder::ptCut ( )
inline

Pt cut.

Tells whether an intermediary cleaning stage should take place during TB.

Definition at line 91 of file GroupedCkfTrajectoryBuilder.h.

void GroupedCkfTrajectoryBuilder::rebuildSeedingRegion ( const TrajectorySeed seed,
TrajectoryContainer result 
) const
overridevirtual

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.

Reimplemented from TrajectoryBuilder.

Definition at line 217 of file GroupedCkfTrajectoryBuilder.cc.

References BaseCkfTrajectoryBuilder::createStartingTrajectory(), and rebuildTrajectories().

Referenced by rebuildSeedingRegion(), and rebuildTrajectories().

218  {
219  TempTrajectory const & startingTraj = createStartingTrajectory( seed);
220  rebuildTrajectories(startingTraj,seed,result);
221 
222 }
void rebuildTrajectories(TempTrajectory const &startingTraj, const TrajectorySeed &, TrajectoryContainer &result) const override
TempTrajectory createStartingTrajectory(const TrajectorySeed &seed) const
void GroupedCkfTrajectoryBuilder::rebuildSeedingRegion ( const TrajectorySeed seed,
TempTrajectory const &  startingTraj,
TempTrajectoryContainer result 
) const
private

try to find additional hits in seeding region

Definition at line 829 of file GroupedCkfTrajectoryBuilder.cc.

References backwardFit(), BaseCkfTrajectoryBuilder::backwardPropagator(), estimator(), BaseCkfTrajectoryBuilder::hitBuilder(), mps_fire::i, TempTrajectory::isValid(), LogDebug, eostools::move(), rebuildSeedingRegion(), TrajectorySeed::recHits(), theKeepOriginalIfRebuildFails, unlikely, and updator().

832 {
833  //
834  // Rebuilding of trajectories. Candidates are taken from result,
835  // which will be replaced with the solutions after rebuild
836  // (assume vector::swap is more efficient than building new container)
837  //
838  LogDebug("CkfPattern")<< "Starting to rebuild " << result.size() << " tracks";
839  //
840  // Fitter (need to create it here since the propagation direction
841  // might change between different starting trajectories)
842  //
843  auto hitCloner = static_cast<TkTransientTrackingRecHitBuilder const *>(hitBuilder())->cloner();
844  KFTrajectoryFitter fitter(backwardPropagator(seed),&updator(),&estimator(),3,nullptr,&hitCloner);
845  //
846  TrajectorySeed::range rseedHits = seed.recHits();
847  std::vector<const TrackingRecHit*> seedHits;
848  //seedHits.insert(seedHits.end(), rseedHits.first, rseedHits.second);
849  //for (TrajectorySeed::recHitContainer::const_iterator iter = rseedHits.first; iter != rseedHits.second; iter++){
850  // seedHits.push_back(&*iter);
851  //}
852 
853  //unsigned int nSeed(seedHits.size());
854  unsigned int nSeed(rseedHits.second-rseedHits.first);
855  //seedHits.reserve(nSeed);
856  TempTrajectoryContainer rebuiltTrajectories;
857 
858  for ( TempTrajectoryContainer::iterator it=result.begin();
859  it!=result.end(); it++ ) {
860 
861  // Refit - keep existing trajectory in case fit is not possible
862  // or fails
863  //
864 
865  auto && reFitted = backwardFit(*it,nSeed,fitter,seedHits);
866  if unlikely( !reFitted.isValid() ) {
867  rebuiltTrajectories.push_back(std::move(*it));
868  LogDebug("CkfPattern")<< "RebuildSeedingRegion skipped as backward fit failed";
869  // << "after reFitted.size() " << reFitted.size();
870  continue;
871  }
872  //LogDebug("CkfPattern")<<"after reFitted.size() " << reFitted.size();
873  //
874  // Rebuild seeding part. In case it fails: keep initial trajectory
875  // (better to drop it??)
876  //
877  int nRebuilt =
878  rebuildSeedingRegion (seed, seedHits,reFitted,rebuiltTrajectories);
879  // Loop over the last nRebuilt trajectories and propagate back the
880  // real cause that stopped the original in-out trajectory, since
881  // that's the one we want to monitor
882  for (size_t i = rebuiltTrajectories.size() - 1; i < rebuiltTrajectories.size() - nRebuilt - 1; --i) {
883  rebuiltTrajectories[i].setStopReason(it->stopReason());
884  }
885 
886  if ( nRebuilt==0 && !theKeepOriginalIfRebuildFails ) it->invalidate(); // won't use original in-out track
887 
888  if ( nRebuilt<0 ) rebuiltTrajectories.push_back(std::move(*it));
889  }
890  //
891  // Replace input trajectories with new ones
892  //
893  result.swap(rebuiltTrajectories);
894  result.erase(std::remove_if( result.begin(),result.end(),
895  std::not1(std::mem_fun_ref(&TempTrajectory::isValid))),
896  result.end());
897 }
#define LogDebug(id)
void rebuildSeedingRegion(const TrajectorySeed &, TrajectoryContainer &result) const override
#define unlikely(x)
const TransientTrackingRecHitBuilder * hitBuilder() const
const Chi2MeasurementEstimatorBase & estimator() const
std::pair< const_iterator, const_iterator > range
TempTrajectory backwardFit(TempTrajectory &candidate, unsigned int nSeed, const TrajectoryFitter &fitter, std::vector< const TrackingRecHit * > &remainingHits) const
bool isValid() const
std::vector< TempTrajectory > TempTrajectoryContainer
range recHits() const
const TrajectoryStateUpdator & updator() const
const Propagator * backwardPropagator(const TrajectorySeed &seed) const
def move(src, dest)
Definition: eostools.py:510
int GroupedCkfTrajectoryBuilder::rebuildSeedingRegion ( const TrajectorySeed seed,
const std::vector< const TrackingRecHit * > &  seedHits,
TempTrajectory candidate,
TempTrajectoryContainer result 
) const
private

Definition at line 900 of file GroupedCkfTrajectoryBuilder.cc.

References BaseCkfTrajectoryBuilder::backwardPropagator(), gather_cfg::cout, TrajectorySeed::direction(), TempTrajectory::direction(), PrintoutHelper::dumpCandidates(), PrintoutHelper::dumpMeasurements(), groupedLimitedCandidates(), LogDebug, TempTrajectory::measurements(), TrajectorySeed::nHits(), TempTrajectory::push(), TempTrajectory::setNLoops(), cmsutils::bqueue< T >::size(), theRequireSeedHitsInRebuild, and verifyHits().

904 {
905  //
906  // Starting from track found by in-out tracking phase, extrapolate it inwards through
907  // the seeding region if possible in towards smaller Tracker radii, searching for additional
908  // hits.
909  // The resulting trajectories are returned in result,
910  // the count is the return value.
911  //
912  TempTrajectoryContainer rebuiltTrajectories;
913 #ifdef DBG2_GCTB
914 /* const LayerFinderByDet layerFinder;
915  if ( !seedHits.empty() && seedHits.front().isValid() ) {
916  DetLayer* seedLayer = layerFinder(seedHits.front().det());
917  cout << "Seed hit at " << seedHits.front().globalPosition()
918  << " " << seedLayer << endl;
919  cout << "Started from "
920  << candidate.lastMeasurement().updatedState().globalPosition().perp() << " "
921  << candidate.lastMeasurement().updatedState().globalPosition().z() << endl;
922  pair<bool,TrajectoryStateOnSurface> layerComp(false,TrajectoryStateOnSurface());
923  if ( seedLayer ) layerComp =
924  seedLayer->compatible(candidate.lastMeasurement().updatedState(),
925  propagator(),estimator());
926  pair<bool,TrajectoryStateOnSurface> detComp =
927  seedHits.front().det().compatible(candidate.lastMeasurement().updatedState(),
928  propagator(),estimator());
929  cout << " layer compatibility = " << layerComp.first;
930  cout << " det compatibility = " << detComp.first;
931  if ( detComp.first ) {
932  cout << " estimate = "
933  << estimator().estimate(detComp.second,seedHits.front()).second ;
934  }
935  cout << endl;
936  }*/
937  cout << "Before backward building: #measurements = "
938  << candidate.measurements().size() ; //<< endl;;
939 #endif
940  //
941  // Use standard building with standard cuts. Maybe better to use different
942  // cuts from "forward" building (e.g. no check on nr. of invalid hits)?
943  //
944  const bool inOut = false;
945  groupedLimitedCandidates(seed, candidate, nullptr, backwardPropagator(seed), inOut, rebuiltTrajectories);
946 
947  LogDebug("CkfPattern")<<" After backward building: "<<PrintoutHelper::dumpCandidates(rebuiltTrajectories);
948 
949  //
950  // Check & count resulting candidates
951  //
952  int nrOfTrajectories(0);
953  bool orig_ok = false;
954  //const RecHitEqualByChannels recHitEqual(false,false);
955  //vector<TM> oldMeasurements(candidate.measurements());
956  for ( TempTrajectoryContainer::iterator it=rebuiltTrajectories.begin();
957  it!=rebuiltTrajectories.end(); it++ ) {
958 
959  TempTrajectory::DataContainer newMeasurements(it->measurements());
960  //
961  // Verify presence of seeding hits?
962  //
964  orig_ok = true;
965  // no hits found (and possibly some invalid hits discarded): drop track
966  if ( newMeasurements.size()<=candidate.measurements().size() ){
967  LogDebug("CkfPattern") << "newMeasurements.size()<=candidate.measurements().size()";
968  continue;
969  }
970  // verify presence of hits
971  //GIO//if ( !verifyHits(newMeasurements.begin()+candidate.measurements().size(),
972  //GIO// newMeasurements.end(),seedHits) ){
973  if ( !verifyHits(newMeasurements.rbegin(),
974  newMeasurements.size() - candidate.measurements().size(),
975  seedHits) ){
976  LogDebug("CkfPattern")<< "seed hits not found in rebuild";
977  continue;
978  }
979  }
980  //
981  // construct final trajectory in the right order
982  //
983  // save & count result
984  nrOfTrajectories++;
985  result.emplace_back(seed.direction(),seed.nHits());
986  TempTrajectory & reversedTrajectory = result.back();
987  reversedTrajectory.setNLoops(it->nLoops());
988  for (TempTrajectory::DataContainer::const_iterator im=newMeasurements.rbegin(), ed = newMeasurements.rend();
989  im != ed; --im ) {
990  reversedTrajectory.push(*im);
991  }
992 
993  LogDebug("CkgPattern")<<"New traj direction = " << reversedTrajectory.direction()<<"\n"
994  <<PrintoutHelper::dumpMeasurements(reversedTrajectory.measurements());
995  } // rebuiltTrajectories
996 
997  // If nrOfTrajectories = 0 and orig_ok = true, this means that a track was actually found on the
998  // out-in step (meeting those requirements) but did not have the seed hits in it.
999  // In this case when we return we will go ahead and use the original in-out track.
1000 
1001  // If nrOfTrajectories = 0 and orig_ok = false, this means that the out-in step failed to
1002  // find any track. Two cases are a technical failure in fitting the original seed hits or
1003  // because the track did not meet the out-in criteria (which may be stronger than the out-in
1004  // criteria). In this case we will NOT allow the original in-out track to be used.
1005 
1006  if ( (nrOfTrajectories == 0) && orig_ok ) {
1007  nrOfTrajectories = -1;
1008  }
1009  return nrOfTrajectories;
1010 }
#define LogDebug(id)
PropagationDirection direction() const
unsigned int groupedLimitedCandidates(const TrajectorySeed &seed, TempTrajectory const &startingTraj, const TrajectoryFilter *regionalCondition, const Propagator *propagator, bool inOut, TempTrajectoryContainer &result) const
static std::string dumpCandidates(collection &candidates)
const DataContainer & measurements() const
void setNLoops(signed char value)
static std::string dumpMeasurements(const std::vector< TrajectoryMeasurement > &v)
PropagationDirection direction() 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.
std::vector< TempTrajectory > TempTrajectoryContainer
unsigned int nHits() const
const Propagator * backwardPropagator(const TrajectorySeed &seed) const
size_type size() const
Definition: bqueue.h:167
void push(const TrajectoryMeasurement &tm)
void GroupedCkfTrajectoryBuilder::rebuildTrajectories ( TempTrajectory const &  startingTraj,
const TrajectorySeed seed,
TrajectoryContainer result 
) const
overridevirtual

Reimplemented from BaseCkfTrajectoryBuilder.

Definition at line 225 of file GroupedCkfTrajectoryBuilder.cc.

References FastTrajectoryCleaner::clean(), eostools::move(), rebuildSeedingRegion(), theFoundHitBonus, theLostHitPenalty, and edmIntegrityCheck::work.

Referenced by rebuildSeedingRegion().

226  {
228 
229  TrajectoryContainer final;
230 
231  // better the seed to be always the same...
232  boost::shared_ptr<const TrajectorySeed> sharedSeed;
233  if (result.empty())
234  sharedSeed.reset(new TrajectorySeed(seed));
235  else sharedSeed = result.front().sharedSeed();
236 
237 
238  work.reserve(result.size());
239  for (auto && traj : result)
240  if(traj.isValid()) work.emplace_back(std::move(traj));
241 
242 
243  rebuildSeedingRegion(seed,startingTraj,work);
244 
245  // we clean here now
247  cleaner.clean(work);
248 
249  for (auto const & it : work) if (it.isValid()) {
250  final.push_back( it.toTrajectory() ); final.back().setSharedSeed(sharedSeed);
251  }
252 
253  result.swap(final);
254 
255  statCount.rebuilt(result.size());
256 
257 }
void rebuildSeedingRegion(const TrajectorySeed &, TrajectoryContainer &result) const override
std::vector< TempTrajectory > TempTrajectoryContainer
std::vector< Trajectory > TrajectoryContainer
def move(src, dest)
Definition: eostools.py:510
void GroupedCkfTrajectoryBuilder::setEvent_ ( const edm::Event iEvent,
const edm::EventSetup iSetup 
)
overrideprotectedvirtual

Implements BaseCkfTrajectoryBuilder.

Definition at line 174 of file GroupedCkfTrajectoryBuilder.cc.

174  {
175 }
bool GroupedCkfTrajectoryBuilder::tkxor ( bool  a,
bool  b 
) const
inlineprivate
GroupedCkfTrajectoryBuilder::TrajectoryContainer GroupedCkfTrajectoryBuilder::trajectories ( const TrajectorySeed seed) const
overridevirtual

set Event for the internal MeasurementTracker data member

trajectories building starting from a seed

Implements TrajectoryBuilder.

Definition at line 178 of file GroupedCkfTrajectoryBuilder.cc.

References buildTrajectories(), and tmp.

179 {
180  TrajectoryContainer ret;
181  ret.reserve(10);
182  unsigned int tmp;
183  buildTrajectories(seed, ret, tmp, nullptr);
184  return ret;
185 }
TempTrajectory buildTrajectories(const TrajectorySeed &seed, TrajectoryContainer &ret, unsigned int &nCandPerSeed, const TrajectoryFilter *) const override
common part of both public trajectory building methods
std::vector< std::vector< double > > tmp
Definition: MVATrainer.cc:100
std::vector< Trajectory > TrajectoryContainer
void GroupedCkfTrajectoryBuilder::trajectories ( const TrajectorySeed seed,
GroupedCkfTrajectoryBuilder::TrajectoryContainer ret 
) const
overridevirtual

trajectories building starting from a seed, return in an already allocated vector

Reimplemented from TrajectoryBuilder.

Definition at line 200 of file GroupedCkfTrajectoryBuilder.cc.

References buildTrajectories(), and tmp.

201 {
202  unsigned int tmp;
203  buildTrajectories(seed,ret,tmp,nullptr);
204 }
TempTrajectory buildTrajectories(const TrajectorySeed &seed, TrajectoryContainer &ret, unsigned int &nCandPerSeed, const TrajectoryFilter *) const override
common part of both public trajectory building methods
std::vector< std::vector< double > > tmp
Definition: MVATrainer.cc:100
GroupedCkfTrajectoryBuilder::TrajectoryContainer GroupedCkfTrajectoryBuilder::trajectories ( const TrajectorySeed seed,
const TrackingRegion region 
) const

trajectories building starting from a seed with a region

Definition at line 188 of file GroupedCkfTrajectoryBuilder.cc.

References buildTrajectories(), and tmp.

190 {
191  TrajectoryContainer ret;
192  ret.reserve(10);
193  unsigned int tmp;
194  RegionalTrajectoryFilter regionalCondition(region);
195  buildTrajectories(seed, ret, tmp, &regionalCondition);
196  return ret;
197 }
TempTrajectory buildTrajectories(const TrajectorySeed &seed, TrajectoryContainer &ret, unsigned int &nCandPerSeed, const TrajectoryFilter *) const override
common part of both public trajectory building methods
std::vector< std::vector< double > > tmp
Definition: MVATrainer.cc:100
std::vector< Trajectory > TrajectoryContainer
void GroupedCkfTrajectoryBuilder::trajectories ( const TrajectorySeed seed,
GroupedCkfTrajectoryBuilder::TrajectoryContainer ret,
const TrackingRegion region 
) const

trajectories building starting from a seed with a region

Definition at line 207 of file GroupedCkfTrajectoryBuilder.cc.

References buildTrajectories(), and tmp.

210 {
211  RegionalTrajectoryFilter regionalCondition(region);
212  unsigned int tmp;
213  buildTrajectories(seed,ret,tmp,&regionalCondition);
214 }
TempTrajectory buildTrajectories(const TrajectorySeed &seed, TrajectoryContainer &ret, unsigned int &nCandPerSeed, const TrajectoryFilter *) const override
common part of both public trajectory building methods
std::vector< std::vector< double > > tmp
Definition: MVATrainer.cc:100
const TrajectoryStateUpdator& GroupedCkfTrajectoryBuilder::updator ( ) const
inline

Definition at line 72 of file GroupedCkfTrajectoryBuilder.h.

References BaseCkfTrajectoryBuilder::theUpdator.

Referenced by rebuildSeedingRegion().

72 {return *theUpdator;}
const TrajectoryStateUpdator * 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 1135 of file GroupedCkfTrajectoryBuilder.cc.

References LogDebug, CMSBoostedTauSeedingParameters_cfi::maxDepth, and TrackingRecHit::some.

Referenced by rebuildSeedingRegion().

1138 {
1139  //
1140  // verify presence of the seeding hits
1141  //
1142  LogDebug("CkfPattern")<<"Checking for " << hits.size() << " hits in "
1143  << maxDepth << " measurements" << endl;
1144 
1145  auto rend = rbegin;
1146  while (maxDepth > 0) { --maxDepth; --rend; }
1147  for ( auto ir=hits.begin(); ir!=hits.end(); ir++ ) {
1148  // assume that all seeding hits are valid!
1149  bool foundHit(false);
1150  for ( auto im=rbegin; im!=rend; --im ) {
1151  if ( im->recHit()->isValid() && (*ir)->sharesInput(im->recHit()->hit(), TrackingRecHit::some) ) {
1152  foundHit = true;
1153  break;
1154  }
1155  }
1156  if ( !foundHit ) return false;
1157  }
1158  return true;
1159 }
#define LogDebug(id)

Member Data Documentation

float GroupedCkfTrajectoryBuilder::maxDPhiForLooperReconstruction
private

Definition at line 205 of file GroupedCkfTrajectoryBuilder.h.

Referenced by advanceOneLayer(), and GroupedCkfTrajectoryBuilder().

float GroupedCkfTrajectoryBuilder::maxPt2ForLooperReconstruction
private

If the value is greater than zero, the reconstructions for looper is turned on for candidates with pt greater than maxPtForLooperReconstruction

Definition at line 203 of file GroupedCkfTrajectoryBuilder.h.

Referenced by advanceOneLayer(), and GroupedCkfTrajectoryBuilder().

bool GroupedCkfTrajectoryBuilder::theAlwaysUseInvalid
private

Definition at line 186 of file GroupedCkfTrajectoryBuilder.h.

Referenced by advanceOneLayer(), and GroupedCkfTrajectoryBuilder().

bool GroupedCkfTrajectoryBuilder::theBestHitOnly
private

Use only best hit / group when building segments

Definition at line 189 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 172 of file GroupedCkfTrajectoryBuilder.h.

TrajectoryFilter* GroupedCkfTrajectoryBuilder::theConfigurableCondition
private

Definition at line 167 of file GroupedCkfTrajectoryBuilder.h.

float GroupedCkfTrajectoryBuilder::theFoundHitBonus
private

Chi**2 bonus for each found hit (favours candidates with more measurements)

Definition at line 181 of file GroupedCkfTrajectoryBuilder.h.

Referenced by buildTrajectories(), GroupedCkfTrajectoryBuilder(), groupedLimitedCandidates(), and rebuildTrajectories().

bool GroupedCkfTrajectoryBuilder::theIntermediateCleaning
private

Tells whether an intermediary cleaning stage should take place during TB.

Definition at line 183 of file GroupedCkfTrajectoryBuilder.h.

Referenced by GroupedCkfTrajectoryBuilder(), and groupedLimitedCandidates().

bool GroupedCkfTrajectoryBuilder::theKeepOriginalIfRebuildFails
private

Keep original trajectory if rebuilding fails.

Definition at line 198 of file GroupedCkfTrajectoryBuilder.h.

Referenced by GroupedCkfTrajectoryBuilder(), and rebuildSeedingRegion().

bool GroupedCkfTrajectoryBuilder::theLockHits
private

Lock hits when building segments in a layer

Definition at line 188 of file GroupedCkfTrajectoryBuilder.h.

Referenced by advanceOneLayer(), and GroupedCkfTrajectoryBuilder().

float GroupedCkfTrajectoryBuilder::theLostHitPenalty
private

Chi**2 Penalty for each lost hit.

Definition at line 180 of file GroupedCkfTrajectoryBuilder.h.

Referenced by buildTrajectories(), GroupedCkfTrajectoryBuilder(), groupedLimitedCandidates(), and rebuildTrajectories().

double GroupedCkfTrajectoryBuilder::theMass
private

Mass hypothesis used for propagation

Definition at line 176 of file GroupedCkfTrajectoryBuilder.h.

int GroupedCkfTrajectoryBuilder::theMaxCand
private

Maximum number of trajectory candidates to propagate to the next layer.

Definition at line 178 of file GroupedCkfTrajectoryBuilder.h.

Referenced by advanceOneLayer(), GroupedCkfTrajectoryBuilder(), and groupedLimitedCandidates().

unsigned int GroupedCkfTrajectoryBuilder::theMinNrOf2dHitsForRebuild
private

Minimum nr. of non-seed 2D hits required for rebuild.

Definition at line 196 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 193 of file GroupedCkfTrajectoryBuilder.h.

Referenced by backwardFit(), and GroupedCkfTrajectoryBuilder().

double GroupedCkfTrajectoryBuilder::theptCut
private

ptCut

Definition at line 174 of file GroupedCkfTrajectoryBuilder.h.

bool GroupedCkfTrajectoryBuilder::theRequireSeedHitsInRebuild
private

Only accept rebuilt trajectories if they contain the seed hits.

Definition at line 191 of file GroupedCkfTrajectoryBuilder.h.

Referenced by GroupedCkfTrajectoryBuilder(), and rebuildSeedingRegion().