CMS 3D CMS Logo

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

#include <GsfTrajectoryFitter.h>

Inheritance diagram for GsfTrajectoryFitter:
TrajectoryFitter

Public Member Functions

virtual GsfTrajectoryFitterclone () const
 
const MeasurementEstimatorestimator () const
 
virtual std::vector< Trajectoryfit (const Trajectory &aTraj) const
 
virtual std::vector< Trajectoryfit (const TrajectorySeed &aSeed, const RecHitContainer &hits) const
 
virtual std::vector< Trajectoryfit (const TrajectorySeed &aSeed, const RecHitContainer &hits, const TSOS &firstPredTsos) const
 
 GsfTrajectoryFitter (const Propagator &aPropagator, const TrajectoryStateUpdator &aUpdator, const MeasurementEstimator &aEstimator, const MultiTrajectoryStateMerger &aMerger, const DetLayerGeometry *detLayerGeometry=0)
 
const MultiTrajectoryStateMergermerger () const
 
const Propagatorpropagator () const
 
const TrajectoryStateUpdatorupdator () const
 
virtual ~GsfTrajectoryFitter ()
 
- Public Member Functions inherited from TrajectoryFitter
virtual std::vector< Trajectoryfit (const Trajectory &traj, fitType type) const
 
virtual std::vector< Trajectoryfit (const TrajectorySeed &seed, const RecHitContainer &hits, fitType type) const
 
virtual std::vector< Trajectoryfit (const TrajectorySeed &seed, const RecHitContainer &hits, const TrajectoryStateOnSurface &tsos, fitType type) const
 
virtual ~TrajectoryFitter ()
 

Private Types

typedef TrajectoryMeasurement TM
 
typedef TrajectoryStateOnSurface TSOS
 

Private Attributes

const DetLayerGeometry dummyGeometry
 
const MeasurementEstimatortheEstimator
 
const DetLayerGeometrytheGeometry
 
const MultiTrajectoryStateMergertheMerger
 
const PropagatorthePropagator
 
bool theTiming
 
const TrajectoryStateUpdatortheUpdator
 

Additional Inherited Members

- Public Types inherited from TrajectoryFitter
enum  fitType { standard =0, looper =1 }
 
typedef Trajectory::RecHitContainer RecHitContainer
 
typedef TrajectoryFitterRecord Record
 

Detailed Description

A GSF fitter, similar to KFTrajectoryFitter.

Definition at line 20 of file GsfTrajectoryFitter.h.

Member Typedef Documentation

Definition at line 24 of file GsfTrajectoryFitter.h.

Definition at line 23 of file GsfTrajectoryFitter.h.

Constructor & Destructor Documentation

GsfTrajectoryFitter::GsfTrajectoryFitter ( const Propagator aPropagator,
const TrajectoryStateUpdator aUpdator,
const MeasurementEstimator aEstimator,
const MultiTrajectoryStateMerger aMerger,
const DetLayerGeometry detLayerGeometry = 0 
)

Constructor with explicit components for propagation, update, chi2 calculation, merging and flag for merging before / after the update (i.e. fully configured)

Definition at line 12 of file GsfTrajectoryFitter.cc.

References dummyGeometry, and theGeometry.

Referenced by clone().

16  :
17  thePropagator(aPropagator.clone()),
18  theUpdator(aUpdator.clone()),
19  theEstimator(aEstimator.clone()),
20  theMerger(aMerger.clone()),
21  theGeometry(detLayerGeometry)
22 {
24  // static SimpleConfigurable<bool> timeConf(false,"GsfTrajectoryFitter:activateTiming");
25  // theTiming = timeConf.value();
26 }
const Propagator * thePropagator
const MultiTrajectoryStateMerger * theMerger
virtual TrajectoryStateUpdator * clone() const =0
virtual Propagator * clone() const =0
const DetLayerGeometry * theGeometry
const MeasurementEstimator * theEstimator
virtual MeasurementEstimator * clone() const =0
MultiTrajectoryStateMerger * clone() const
const TrajectoryStateUpdator * theUpdator
const DetLayerGeometry dummyGeometry
GsfTrajectoryFitter::~GsfTrajectoryFitter ( )
virtual

Definition at line 28 of file GsfTrajectoryFitter.cc.

References theEstimator, theMerger, thePropagator, and theUpdator.

28  {
29  delete thePropagator;
30  delete theUpdator;
31  delete theEstimator;
32  delete theMerger;
33 }
const Propagator * thePropagator
const MultiTrajectoryStateMerger * theMerger
const MeasurementEstimator * theEstimator
const TrajectoryStateUpdator * theUpdator

Member Function Documentation

virtual GsfTrajectoryFitter* GsfTrajectoryFitter::clone ( void  ) const
inlinevirtual

Implements TrajectoryFitter.

Definition at line 51 of file GsfTrajectoryFitter.h.

References GsfTrajectoryFitter(), theEstimator, theGeometry, theMerger, thePropagator, and theUpdator.

52  {
54  }
const Propagator * thePropagator
const MultiTrajectoryStateMerger * theMerger
GsfTrajectoryFitter(const Propagator &aPropagator, const TrajectoryStateUpdator &aUpdator, const MeasurementEstimator &aEstimator, const MultiTrajectoryStateMerger &aMerger, const DetLayerGeometry *detLayerGeometry=0)
const DetLayerGeometry * theGeometry
const MeasurementEstimator * theEstimator
const TrajectoryStateUpdator * theUpdator
const MeasurementEstimator* GsfTrajectoryFitter::estimator ( void  ) const
inline

Definition at line 48 of file GsfTrajectoryFitter.h.

References theEstimator.

Referenced by fit().

48 {return theEstimator;}
const MeasurementEstimator * theEstimator
std::vector< Trajectory > GsfTrajectoryFitter::fit ( const Trajectory aTraj) const
virtual

Implements TrajectoryFitter.

Definition at line 35 of file GsfTrajectoryFitter.cc.

References Trajectory::empty(), Trajectory::firstMeasurement(), Trajectory::recHits(), Trajectory::seed(), and TrajectoryMeasurement::updatedState().

36 {
37  if(aTraj.empty()) return std::vector<Trajectory>();
38 
39  TM firstTM = aTraj.firstMeasurement();
40  TSOS firstTsos = TrajectoryStateWithArbitraryError()(firstTM.updatedState());
41 
42  return fit(aTraj.seed(), aTraj.recHits(), firstTsos);
43 }
bool empty() const
True if trajectory has no measurements.
Definition: Trajectory.h:234
TrajectorySeed const & seed() const
Access to the seed used to reconstruct the Trajectory.
Definition: Trajectory.h:265
virtual std::vector< Trajectory > fit(const Trajectory &aTraj) const
ConstRecHitContainer recHits(bool splitting=false) const
Definition: Trajectory.cc:67
TrajectoryMeasurement TM
TrajectoryMeasurement const & firstMeasurement() const
Definition: Trajectory.h:194
std::vector< Trajectory > GsfTrajectoryFitter::fit ( const TrajectorySeed aSeed,
const RecHitContainer hits 
) const
virtual

Implements TrajectoryFitter.

Definition at line 45 of file GsfTrajectoryFitter.cc.

46  {
47 
48  edm::LogError("GsfTrajectoryFitter")
49  << "GsfTrajectoryFitter::fit(TrajectorySeed, vector<RecHit>) not implemented";
50 
51  return std::vector<Trajectory>();
52 }
std::vector< Trajectory > GsfTrajectoryFitter::fit ( const TrajectorySeed aSeed,
const RecHitContainer hits,
const TSOS firstPredTsos 
) const
virtual

!! no invalid hits on cylinders anymore??

Implements TrajectoryFitter.

Definition at line 54 of file GsfTrajectoryFitter.cc.

References MeasurementEstimator::estimate(), estimator(), Trajectory::foundHits(), DetLayerGeometry::idToLayer(), TrajectoryStateOnSurface::isValid(), LogDebug, MultiTrajectoryStateMerger::merge(), merger(), Propagator::propagate(), propagator(), Trajectory::push(), edm::second(), TrajectoryStateOnSurface::surface(), theGeometry, TrajectoryStateUpdator::update(), and updator().

56  {
57 
58  // static TimingReport::Item* propTimer =
59  // &(*TimingReport::current())[string("GsfTrajectoryFitter:propagation")];
60  // propTimer->switchCPU(false);
61  // if ( !theTiming ) propTimer->switchOn(false);
62  // static TimingReport::Item* updateTimer =
63  // &(*TimingReport::current())[string("GsfTrajectoryFitter:update")];
64  // updateTimer->switchCPU(false);
65  // if ( !theTiming ) updateTimer->switchOn(false);
66 
67  if(hits.empty()) return std::vector<Trajectory>();
68 
69  Trajectory myTraj(aSeed, propagator()->propagationDirection());
70 
71  TSOS predTsos(firstPredTsos);
72  if(!predTsos.isValid()) {
73  edm::LogInfo("GsfTrajectoryFitter")
74  << "GsfTrajectoryFitter: predicted tsos of first measurement not valid!";
75  return std::vector<Trajectory>();
76  }
77 
78  TSOS currTsos;
79  if(hits.front()->isValid()) {
80  //update
81  TransientTrackingRecHit::RecHitPointer preciseHit = hits.front()->clone(predTsos);
82  {
83  // TimeMe t(*updateTimer,false);
84  currTsos = updator()->update(predTsos, *preciseHit);
85  }
86  if (!predTsos.isValid() || !currTsos.isValid()){
87  edm::LogError("InvalidState")<<"first hit";
88  return std::vector<Trajectory>();
89  }
90  myTraj.push(TM(predTsos, currTsos, preciseHit, 0., theGeometry->idToLayer(preciseHit->geographicalId() )),
91  estimator()->estimate(predTsos, *preciseHit).second);
92  } else {
93  currTsos = predTsos;
94  if (!predTsos.isValid()){
95  edm::LogError("InvalidState")<<"first invalid hit";
96  return std::vector<Trajectory>();
97  }
98  myTraj.push(TM(predTsos, *hits.begin(),0., theGeometry->idToLayer((*hits.begin())->geographicalId()) ));
99  }
100 
101  for(RecHitContainer::const_iterator ihit = hits.begin() + 1;
102  ihit != hits.end(); ihit++) {
103  //
104  // temporary protection copied from KFTrajectoryFitter.
105  //
106  if ((**ihit).isValid() == false && (**ihit).det() == 0) {
107  LogDebug("GsfTrajectoryFitter") << " Error: invalid hit with no GeomDet attached .... skipping";
108  continue;
109  }
110 
112  // //
113  // // check type of surface in case of invalid hit
114  // // (in this version only propagations to planes are
115  // // supported for multi trajectory states)
116  // //
117  // if ( !(**ihit).isValid() ) {
118  // const BoundPlane* plane =
119  // dynamic_cast<const BoundPlane*>(&(**ihit).det().surface());
120  // //
121  // // no plane: insert invalid measurement
122  // //
123  // if ( plane==0 ) {
124  // myTraj.push(TM(TrajectoryStateOnSurface(),&(**ihit)));
125  // continue;
126  // }
127  // }
128  {
129  // TimeMe t(*propTimer,false);
130  predTsos = propagator()->propagate(currTsos,
131  (**ihit).det()->surface());
132  }
133  if(!predTsos.isValid()) {
134  if ( myTraj.foundHits()>=3 ) {
135  edm::LogInfo("GsfTrajectoryFitter")
136  << "GsfTrajectoryFitter: predicted tsos not valid! \n"
137  << "Returning trajectory with " << myTraj.foundHits() << " found hits.";
138  return std::vector<Trajectory>(1,myTraj);
139  }
140  else {
141  edm::LogInfo("GsfTrajectoryFitter")
142  << "GsfTrajectoryFitter: predicted tsos not valid after " << myTraj.foundHits()
143  << " hits, discarding candidate!";
144  return std::vector<Trajectory>();
145  }
146  }
147  if ( merger() ) predTsos = merger()->merge(predTsos);
148 
149  if((**ihit).isValid()) {
150  //update
151  TransientTrackingRecHit::RecHitPointer preciseHit = (**ihit).clone(predTsos);
152  {
153  // TimeMe t(*updateTimer,false);
154  currTsos = updator()->update(predTsos, *preciseHit);
155  }
156  if (!predTsos.isValid() || !currTsos.isValid()){
157  edm::LogError("InvalidState")<<"inside hit";
158  return std::vector<Trajectory>();
159  }
160  myTraj.push(TM(predTsos, currTsos, preciseHit,
161  estimator()->estimate(predTsos, *preciseHit).second,
162  theGeometry->idToLayer(preciseHit->geographicalId() )));
163  } else {
164  currTsos = predTsos;
165  if (!predTsos.isValid()){
166  edm::LogError("InvalidState")<<"inside invalid hit";
167  return std::vector<Trajectory>();
168  }
169  myTraj.push(TM(predTsos, *ihit,0., theGeometry->idToLayer( (*ihit)->geographicalId()) ));
170  }
171  }
172  return std::vector<Trajectory>(1, myTraj);
173 }
#define LogDebug(id)
virtual HitReturnType estimate(const TrajectoryStateOnSurface &ts, const TransientTrackingRecHit &hit) const =0
virtual TrajectoryStateOnSurface update(const TrajectoryStateOnSurface &, const TransientTrackingRecHit &) const =0
TrajectoryStateOnSurface merge(const TrajectoryStateOnSurface &tsos) const
const DetLayerGeometry * theGeometry
U second(std::pair< T, U > const &p)
TrajectoryMeasurement TM
virtual TrajectoryStateOnSurface propagate(const FreeTrajectoryState &, const Surface &) const
Definition: Propagator.cc:12
const MultiTrajectoryStateMerger * merger() const
const Propagator * propagator() const
const TrajectoryStateUpdator * updator() const
const Surface & surface() const
virtual const DetLayer * idToLayer(const DetId &detId) const
const MeasurementEstimator * estimator() const
const MultiTrajectoryStateMerger* GsfTrajectoryFitter::merger ( ) const
inline

Definition at line 49 of file GsfTrajectoryFitter.h.

References theMerger.

Referenced by fit().

49 {return theMerger;}
const MultiTrajectoryStateMerger * theMerger
const Propagator* GsfTrajectoryFitter::propagator ( void  ) const
inline

Definition at line 46 of file GsfTrajectoryFitter.h.

References thePropagator.

Referenced by fit().

46 {return thePropagator;}
const Propagator * thePropagator
const TrajectoryStateUpdator* GsfTrajectoryFitter::updator ( ) const
inline

Definition at line 47 of file GsfTrajectoryFitter.h.

References theUpdator.

Referenced by fit().

47 {return theUpdator;}
const TrajectoryStateUpdator * theUpdator

Member Data Documentation

const DetLayerGeometry GsfTrajectoryFitter::dummyGeometry
private

Definition at line 61 of file GsfTrajectoryFitter.h.

Referenced by GsfTrajectoryFitter().

const MeasurementEstimator* GsfTrajectoryFitter::theEstimator
private

Definition at line 59 of file GsfTrajectoryFitter.h.

Referenced by clone(), estimator(), and ~GsfTrajectoryFitter().

const DetLayerGeometry* GsfTrajectoryFitter::theGeometry
private

Definition at line 62 of file GsfTrajectoryFitter.h.

Referenced by clone(), fit(), and GsfTrajectoryFitter().

const MultiTrajectoryStateMerger* GsfTrajectoryFitter::theMerger
private

Definition at line 60 of file GsfTrajectoryFitter.h.

Referenced by clone(), merger(), and ~GsfTrajectoryFitter().

const Propagator* GsfTrajectoryFitter::thePropagator
private

Definition at line 57 of file GsfTrajectoryFitter.h.

Referenced by clone(), propagator(), and ~GsfTrajectoryFitter().

bool GsfTrajectoryFitter::theTiming
private

Definition at line 64 of file GsfTrajectoryFitter.h.

const TrajectoryStateUpdator* GsfTrajectoryFitter::theUpdator
private

Definition at line 58 of file GsfTrajectoryFitter.h.

Referenced by clone(), updator(), and ~GsfTrajectoryFitter().