CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Types | Public Member Functions | Protected Member Functions | Protected Attributes
CkfTrajectoryBuilder Class Reference

#include <CkfTrajectoryBuilder.h>

Inheritance diagram for CkfTrajectoryBuilder:
BaseCkfTrajectoryBuilder TrajectoryBuilder CkfDebugTrajectoryBuilder MuonCkfTrajectoryBuilder

Public Types

typedef std::vector
< TempTrajectory
TempTrajectoryContainer
 
typedef std::vector< TrajectoryTrajectoryContainer
 
- Public Types inherited from BaseCkfTrajectoryBuilder
typedef std::vector
< TempTrajectory
TempTrajectoryContainer
 
typedef std::vector< TrajectoryTrajectoryContainer
 
typedef
TrajectoryContainer::iterator 
TrajectoryIterator
 
- Public Types inherited from TrajectoryBuilder
typedef std::vector< TrajectoryTrajectoryContainer
 
typedef
TrajectoryContainer::iterator 
TrajectoryIterator
 

Public Member Functions

 CkfTrajectoryBuilder (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)
 
virtual void setEvent (const edm::Event &event) const
 set Event for the internal MeasurementTracker data member More...
 
virtual TrajectoryContainer trajectories (const TrajectorySeed &seed) const
 trajectories building starting from a seed More...
 
virtual void trajectories (const TrajectorySeed &seed, TrajectoryContainer &ret) const
 trajectories building starting from a seed More...
 
 ~CkfTrajectoryBuilder ()
 
- Public Member Functions inherited from BaseCkfTrajectoryBuilder
 BaseCkfTrajectoryBuilder (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, const TrajectoryFilter *inOutFilter=0)
 
virtual void setDebugger (CkfDebugger *dbg) const
 
virtual ~BaseCkfTrajectoryBuilder ()
 
- Public Member Functions inherited from TrajectoryBuilder
virtual void rebuildSeedingRegion (const TrajectorySeed &, TrajectoryContainer &result) const
 
virtual ~TrajectoryBuilder ()
 

Protected Member Functions

virtual void findCompatibleMeasurements (const TempTrajectory &traj, std::vector< TrajectoryMeasurement > &result) const
 
void limitedCandidates (TempTrajectory &startingTraj, TrajectoryContainer &result) const
 
void limitedCandidates (TempTrajectoryContainer &candidates, TrajectoryContainer &result) const
 
void updateTrajectory (TempTrajectory &traj, const TM &tm) const
 
- Protected Member Functions inherited from BaseCkfTrajectoryBuilder
void addToResult (TempTrajectory &traj, TrajectoryContainer &result, bool inOut=false) const
 
void addToResult (TempTrajectory &traj, TempTrajectoryContainer &result, bool inOut=false) const
 
virtual bool analyzeMeasurementsDebugger (Trajectory &traj, std::vector< TrajectoryMeasurement > meas, const MeasurementTracker *theMeasurementTracker, const Propagator *theForwardPropagator, const Chi2MeasurementEstimatorBase *theEstimator, const TransientTrackingRecHitBuilder *theTTRHBuilder) const
 
virtual bool analyzeMeasurementsDebugger (TempTrajectory &traj, std::vector< TrajectoryMeasurement > meas, const MeasurementTracker *theMeasurementTracker, const Propagator *theForwardPropagator, const Chi2MeasurementEstimatorBase *theEstimator, const TransientTrackingRecHitBuilder *theTTRHBuilder) const
 
TempTrajectory createStartingTrajectory (const TrajectorySeed &seed) const
 
virtual void fillSeedHistoDebugger (std::vector< TrajectoryMeasurement >::iterator begin, std::vector< TrajectoryMeasurement >::iterator end) const
 
StateAndLayers findStateAndLayers (const TempTrajectory &traj) const
 
bool qualityFilter (const TempTrajectory &traj, bool inOut=false) const
 
bool toBeContinued (TempTrajectory &traj, bool inOut=false) const
 

Protected Attributes

bool theAlwaysUseInvalidHits
 
bool theIntermediateCleaning
 
float theLostHitPenalty
 
int theMaxCand
 
- Protected Attributes inherited from BaseCkfTrajectoryBuilder
const PropagatortheBackwardPropagator
 
const
Chi2MeasurementEstimatorBase
theEstimator
 
const PropagatortheForwardPropagator
 
const LayerMeasurementstheLayerMeasurements
 
const MeasurementTrackertheMeasurementTracker
 
const PropagatorthePropagatorAlong
 
const PropagatorthePropagatorOpposite
 
const
TransientTrackingRecHitBuilder
theTTRHBuilder
 
const TrajectoryStateUpdatortheUpdator
 

Additional Inherited Members

- Protected Types inherited from BaseCkfTrajectoryBuilder
typedef FreeTrajectoryState FTS
 
typedef std::pair< TSOS,
std::vector< const DetLayer * > > 
StateAndLayers
 
typedef TrajectoryMeasurement TM
 
typedef TrajectoryStateOnSurface TSOS
 

Detailed Description

Definition at line 34 of file CkfTrajectoryBuilder.h.

Member Typedef Documentation

Definition at line 39 of file CkfTrajectoryBuilder.h.

Definition at line 38 of file CkfTrajectoryBuilder.h.

Constructor & Destructor Documentation

CkfTrajectoryBuilder::CkfTrajectoryBuilder ( 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 
)

Definition at line 33 of file CkfTrajectoryBuilder.cc.

References edm::ParameterSet::getParameter(), theAlwaysUseInvalidHits, theIntermediateCleaning, theLostHitPenalty, and theMaxCand.

40  :
41 
43  updator, propagatorAlong,propagatorOpposite,
44  estimator, recHitBuilder, measurementTracker,filter)
45 {
46  theMaxCand = conf.getParameter<int>("maxCand");
47  theLostHitPenalty = conf.getParameter<double>("lostHitPenalty");
48  theIntermediateCleaning = conf.getParameter<bool>("intermediateCleaning");
49  theAlwaysUseInvalidHits = conf.getParameter<bool>("alwaysUseInvalidHits");
50  /*
51  theSharedSeedCheck = conf.getParameter<bool>("SharedSeedCheck");
52  std::stringstream ss;
53  ss<<"CkfTrajectoryBuilder_"<<conf.getParameter<std::string>("ComponentName")<<"_"<<this;
54  theUniqueName = ss.str();
55  LogDebug("CkfPattern")<<"my unique name is: "<<theUniqueName;
56  */
57 }
T getParameter(std::string const &) const
BaseCkfTrajectoryBuilder(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, const TrajectoryFilter *inOutFilter=0)
CkfTrajectoryBuilder::~CkfTrajectoryBuilder ( )
inline

Definition at line 50 of file CkfTrajectoryBuilder.h.

50 {}

Member Function Documentation

void CkfTrajectoryBuilder::findCompatibleMeasurements ( const TempTrajectory traj,
std::vector< TrajectoryMeasurement > &  result 
) const
protectedvirtual

Reimplemented in MuonCkfTrajectoryBuilder.

Definition at line 261 of file CkfTrajectoryBuilder.cc.

References PrintoutHelper::dumpMeasurements(), TransverseImpactPointExtrapolator::extrapolate(), BaseCkfTrajectoryBuilder::findStateAndLayers(), i, TrajectoryStateOnSurface::isValid(), TempTrajectory::lastLayer(), LogDebug, LayerMeasurements::measurements(), python.multivaluedict::sort(), BaseCkfTrajectoryBuilder::theEstimator, BaseCkfTrajectoryBuilder::theForwardPropagator, BaseCkfTrajectoryBuilder::theLayerMeasurements, and tmp.

Referenced by limitedCandidates().

263 {
264  int invalidHits = 0;
265  std::pair<TSOS,std::vector<const DetLayer*> > stateAndLayers = findStateAndLayers(traj);
266  if (stateAndLayers.second.empty()) return;
267 
268  vector<const DetLayer*>::iterator layerBegin = stateAndLayers.second.begin();
269  vector<const DetLayer*>::iterator layerEnd = stateAndLayers.second.end();
270  LogDebug("CkfPattern")<<"looping on "<< stateAndLayers.second.size()<<" layers.";
271  for (vector<const DetLayer*>::iterator il = layerBegin;
272  il != layerEnd; il++) {
273 
274  LogDebug("CkfPattern")<<"looping on a layer in findCompatibleMeasurements.\n last layer: "<<traj.lastLayer()<<" current layer: "<<(*il);
275 
276  TSOS stateToUse = stateAndLayers.first;
277  if ((*il)==traj.lastLayer())
278  {
279  LogDebug("CkfPattern")<<" self propagating in findCompatibleMeasurements.\n from: \n"<<stateToUse;
280  //self navigation case
281  // go to a middle point first
283  GlobalPoint center(0,0,0);
284  stateToUse = middle.extrapolate(stateToUse, center, *theForwardPropagator);
285 
286  if (!stateToUse.isValid()) continue;
287  LogDebug("CkfPattern")<<"to: "<<stateToUse;
288  }
289 
290  vector<TrajectoryMeasurement> tmp = theLayerMeasurements->measurements((**il),stateToUse, *theForwardPropagator, *theEstimator);
291 
292  if ( !tmp.empty()) {
293  if ( result.empty()) result = tmp;
294  else {
295  // keep one dummy TM at the end, skip the others
296  result.insert( result.end()-invalidHits, tmp.begin(), tmp.end());
297  }
298  invalidHits++;
299  }
300  }
301 
302  // sort the final result, keep dummy measurements at the end
303  if ( result.size() > 1) {
304  sort( result.begin(), result.end()-invalidHits, TrajMeasLessEstim());
305  }
306 
307  LogDebug("CkfPattern")<<"starting from:\n"
308  <<"x: "<<stateAndLayers.first.globalPosition()<<"\n"
309  <<"p: "<<stateAndLayers.first.globalMomentum()<<"\n"
311 
312 #ifdef DEBUG_INVALID
313  bool afterInvalid = false;
314  for (vector<TM>::const_iterator i=result.begin();
315  i!=result.end(); i++) {
316  if ( ! i->recHit().isValid()) afterInvalid = true;
317  if (afterInvalid && i->recHit().isValid()) {
318  edm::LogError("CkfPattern") << "CkfTrajectoryBuilder error: valid hit after invalid!" ;
319  }
320  }
321 #endif
322 
323  //analyseMeasurements( result, traj);
324 
325 }
#define LogDebug(id)
std::vector< TrajectoryMeasurement > measurements(const DetLayer &layer, const TrajectoryStateOnSurface &startingState, const Propagator &prop, const MeasurementEstimator &est) const
int i
Definition: DBlmapReader.cc:9
static std::string dumpMeasurements(const std::vector< TrajectoryMeasurement > &v)
const LayerMeasurements * theLayerMeasurements
tuple result
Definition: query.py:137
TrajectoryStateOnSurface extrapolate(const FreeTrajectoryState &fts, const GlobalPoint &vtx) const
extrapolation with default (=geometrical) propagator
std::vector< std::vector< double > > tmp
Definition: MVATrainer.cc:100
StateAndLayers findStateAndLayers(const TempTrajectory &traj) const
const DetLayer * lastLayer() const
Redundant method, returns the layer of lastMeasurement() .
const Chi2MeasurementEstimatorBase * theEstimator
const Propagator * theForwardPropagator
void CkfTrajectoryBuilder::limitedCandidates ( TempTrajectory startingTraj,
TrajectoryContainer result 
) const
protected

Definition at line 163 of file CkfTrajectoryBuilder.cc.

Referenced by trajectories().

165 {
166  TempTrajectoryContainer candidates;
167  candidates.push_back( startingTraj);
168  limitedCandidates(candidates,result);
169 }
std::vector< TempTrajectory > TempTrajectoryContainer
tuple result
Definition: query.py:137
void limitedCandidates(TempTrajectory &startingTraj, TrajectoryContainer &result) const
void CkfTrajectoryBuilder::limitedCandidates ( TempTrajectoryContainer candidates,
TrajectoryContainer result 
) const
protected

Definition at line 172 of file CkfTrajectoryBuilder.cc.

References BaseCkfTrajectoryBuilder::addToResult(), BaseCkfTrajectoryBuilder::analyzeMeasurementsDebugger(), IntermediateTrajectoryCleaner::clean(), PrintoutHelper::dumpCandidates(), findCompatibleMeasurements(), prof2calltree::last, LogDebug, BaseCkfTrajectoryBuilder::qualityFilter(), python.multivaluedict::sort(), theAlwaysUseInvalidHits, BaseCkfTrajectoryBuilder::theEstimator, BaseCkfTrajectoryBuilder::theForwardPropagator, theIntermediateCleaning, theLostHitPenalty, theMaxCand, BaseCkfTrajectoryBuilder::theMeasurementTracker, BaseCkfTrajectoryBuilder::theTTRHBuilder, BaseCkfTrajectoryBuilder::toBeContinued(), and updateTrajectory().

174 {
175  unsigned int nIter=1;
176  // TempTrajectoryContainer candidates; // = TrajectoryContainer();
177  TempTrajectoryContainer newCand; // = TrajectoryContainer();
178  // candidates.push_back( startingTraj);
179 
180  while ( !candidates.empty()) {
181 
182  newCand.clear();
183  for (TempTrajectoryContainer::iterator traj=candidates.begin();
184  traj!=candidates.end(); traj++) {
185  std::vector<TM> meas;
186  findCompatibleMeasurements(*traj, meas);
187 
188  // --- method for debugging
189  if(!analyzeMeasurementsDebugger(*traj,meas,
192  theTTRHBuilder)) return;
193  // ---
194 
195  if ( meas.empty()) {
196  if ( qualityFilter( *traj)) addToResult( *traj, result);
197  }
198  else {
199  std::vector<TM>::const_iterator last;
200  if ( theAlwaysUseInvalidHits) last = meas.end();
201  else {
202  if (meas.front().recHit()->isValid()) {
203  last = find_if( meas.begin(), meas.end(), RecHitIsInvalid());
204  }
205  else last = meas.end();
206  }
207 
208  for( std::vector<TM>::const_iterator itm = meas.begin();
209  itm != last; itm++) {
210  TempTrajectory newTraj = *traj;
211  updateTrajectory( newTraj, *itm);
212 
213  if ( toBeContinued(newTraj)) {
214  newCand.push_back(newTraj);
215  }
216  else {
217  if ( qualityFilter(newTraj)) addToResult( newTraj, result);
219  }
220  }
221  }
222 
223  if ((int)newCand.size() > theMaxCand) {
224  sort( newCand.begin(), newCand.end(), TrajCandLess<TempTrajectory>(theLostHitPenalty));
225  newCand.erase( newCand.begin()+theMaxCand, newCand.end());
226  }
227  }
228 
230 
231  candidates.swap(newCand);
232 
233  LogDebug("CkfPattern") <<result.size()<<" candidates after "<<nIter++<<" CKF iteration: \n"
235  <<"\n "<<candidates.size()<<" running candidates are: \n"
236  <<PrintoutHelper::dumpCandidates(candidates);
237 
238  }
239 }
#define LogDebug(id)
static std::string dumpCandidates(collection &candidates)
static void clean(TempTrajectoryContainer &tracks)
void addToResult(TempTrajectory &traj, TrajectoryContainer &result, bool inOut=false) const
std::vector< TempTrajectory > TempTrajectoryContainer
bool qualityFilter(const TempTrajectory &traj, bool inOut=false) const
const TransientTrackingRecHitBuilder * theTTRHBuilder
tuple result
Definition: query.py:137
virtual void findCompatibleMeasurements(const TempTrajectory &traj, std::vector< TrajectoryMeasurement > &result) const
void updateTrajectory(TempTrajectory &traj, const TM &tm) const
const MeasurementTracker * theMeasurementTracker
bool toBeContinued(TempTrajectory &traj, bool inOut=false) const
virtual bool analyzeMeasurementsDebugger(Trajectory &traj, std::vector< TrajectoryMeasurement > meas, const MeasurementTracker *theMeasurementTracker, const Propagator *theForwardPropagator, const Chi2MeasurementEstimatorBase *theEstimator, const TransientTrackingRecHitBuilder *theTTRHBuilder) const
const Chi2MeasurementEstimatorBase * theEstimator
const Propagator * theForwardPropagator
void CkfTrajectoryBuilder::setEvent ( const edm::Event event) const
virtual

set Event for the internal MeasurementTracker data member

Implements BaseCkfTrajectoryBuilder.

Definition at line 59 of file CkfTrajectoryBuilder.cc.

References BaseCkfTrajectoryBuilder::theMeasurementTracker.

60 {
61  theMeasurementTracker->update(event);
62 }
const MeasurementTracker * theMeasurementTracker
CkfTrajectoryBuilder::TrajectoryContainer CkfTrajectoryBuilder::trajectories ( const TrajectorySeed seed) const
virtual

trajectories building starting from a seed

Implements BaseCkfTrajectoryBuilder.

Definition at line 65 of file CkfTrajectoryBuilder.cc.

References query::result.

66 {
68  result.reserve(5);
69  trajectories(seed, result);
70  return result;
71 }
std::vector< Trajectory > TrajectoryContainer
tuple result
Definition: query.py:137
virtual TrajectoryContainer trajectories(const TrajectorySeed &seed) const
trajectories building starting from a seed
void CkfTrajectoryBuilder::trajectories ( const TrajectorySeed seed,
CkfTrajectoryBuilder::TrajectoryContainer result 
) const
virtual

trajectories building starting from a seed

limitedCandidates( startingTraj, regionalCondition, result); FIXME: restore regionalCondition

Reimplemented from TrajectoryBuilder.

Definition at line 132 of file CkfTrajectoryBuilder.cc.

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

133 {
134  // analyseSeed( seed);
135  /*
136  if (theSharedSeedCheck){
137  TempTrajectoryContainer candidates;
138  if (seedAlreadyUsed(seed,candidates))
139  {
140  //start with those candidates already made before
141  limitedCandidates(candidates,result);
142  //and quit
143  return;
144  }
145  }
146  */
147 
148  TempTrajectory startingTraj = createStartingTrajectory( seed );
149 
152  limitedCandidates( startingTraj, result);
153 
154  /*
155  //and remember what you just did
156  if (theSharedSeedCheck) rememberSeedAndTrajectories(seed,result);
157  */
158 
159  // analyseResult(result);
160 }
tuple result
Definition: query.py:137
void limitedCandidates(TempTrajectory &startingTraj, TrajectoryContainer &result) const
TempTrajectory createStartingTrajectory(const TrajectorySeed &seed) const
void CkfTrajectoryBuilder::updateTrajectory ( TempTrajectory traj,
const TM tm 
) const
protected

Definition at line 243 of file CkfTrajectoryBuilder.cc.

References TrajectoryMeasurement::estimate(), TrajectoryMeasurement::layer(), TrajectoryMeasurement::predictedState(), TempTrajectory::push(), TrajectoryMeasurement::recHit(), BaseCkfTrajectoryBuilder::theUpdator, tmp, and TrajectoryStateUpdator::update().

Referenced by limitedCandidates().

245 {
246  TSOS predictedState = tm.predictedState();
247  TM::ConstRecHitPointer hit = tm.recHit();
248 
249  if ( hit->isValid()) {
250  TM tmp = TM( predictedState, theUpdator->update( predictedState, *hit),
251  hit, tm.estimate(), tm.layer());
252  traj.push(tmp );
253  }
254  else {
255  traj.push( TM( predictedState, hit, 0, tm.layer()));
256  }
257 }
virtual TrajectoryStateOnSurface update(const TrajectoryStateOnSurface &, const TransientTrackingRecHit &) const =0
const TrajectoryStateUpdator * theUpdator
TransientTrackingRecHit::ConstRecHitPointer ConstRecHitPointer
std::vector< std::vector< double > > tmp
Definition: MVATrainer.cc:100
void push(const TrajectoryMeasurement &tm)

Member Data Documentation

bool CkfTrajectoryBuilder::theAlwaysUseInvalidHits
protected

Definition at line 68 of file CkfTrajectoryBuilder.h.

Referenced by CkfTrajectoryBuilder(), and limitedCandidates().

bool CkfTrajectoryBuilder::theIntermediateCleaning
protected

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

Definition at line 66 of file CkfTrajectoryBuilder.h.

Referenced by CkfTrajectoryBuilder(), and limitedCandidates().

float CkfTrajectoryBuilder::theLostHitPenalty
protected

Chi**2 Penalty for each lost hit.

Definition at line 65 of file CkfTrajectoryBuilder.h.

Referenced by CkfTrajectoryBuilder(), and limitedCandidates().

int CkfTrajectoryBuilder::theMaxCand
protected
    Maximum number of trajectory candidates 

to propagate to the next layer.

Definition at line 63 of file CkfTrajectoryBuilder.h.

Referenced by CkfTrajectoryBuilder(), and limitedCandidates().