CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Classes | Public Member Functions | Protected Member Functions | Protected Attributes
DualKalmanFactory Class Reference
Inheritance diagram for DualKalmanFactory:
TrajectoryFactoryBase

Classes

struct  DualKalmanInput
 

Public Member Functions

virtual DualKalmanFactoryclone () const
 
 DualKalmanFactory (const edm::ParameterSet &config)
 
virtual const
ReferenceTrajectoryCollection 
trajectories (const edm::EventSetup &setup, const ConstTrajTrackPairCollection &tracks, const reco::BeamSpot &beamSpot) const
 Produce the reference trajectories. More...
 
virtual const
ReferenceTrajectoryCollection 
trajectories (const edm::EventSetup &setup, const ConstTrajTrackPairCollection &tracks, const ExternalPredictionCollection &external, const reco::BeamSpot &beamSpot) const
 
virtual ~DualKalmanFactory ()
 
- Public Member Functions inherited from TrajectoryFactoryBase
const MaterialEffects materialEffects (void) const
 
const PropagationDirection propagationDirection (void) const
 
 TrajectoryFactoryBase (const edm::ParameterSet &config)
 
virtual ~TrajectoryFactoryBase (void)
 

Protected Member Functions

const DualKalmanInput referenceStateAndRecHits (const ConstTrajTrackPair &track) const
 
- Protected Member Functions inherited from TrajectoryFactoryBase
virtual const TrajectoryInput innermostStateAndRecHits (const ConstTrajTrackPair &track) const
 
virtual const
Trajectory::DataContainer 
orderedTrajectoryMeasurements (const Trajectory &trajectory) const
 
bool sameSurface (const Surface &s1, const Surface &s2) const
 
bool useRecHit (const TransientTrackingRecHit::ConstRecHitPointer &hitPtr) const
 

Protected Attributes

const double theMass
 
const int theResidMethod
 
- Protected Attributes inherited from TrajectoryFactoryBase
bool theUseBeamSpot
 

Additional Inherited Members

- Public Types inherited from TrajectoryFactoryBase
typedef
AlignmentAlgorithmBase::ConstTrajTrackPair 
ConstTrajTrackPair
 
typedef
AlignmentAlgorithmBase::ConstTrajTrackPairCollection 
ConstTrajTrackPairCollection
 
typedef std::vector
< TrajectoryStateOnSurface
ExternalPredictionCollection
 
typedef
ReferenceTrajectoryBase::MaterialEffects 
MaterialEffects
 
typedef std::vector
< ReferenceTrajectoryPtr
ReferenceTrajectoryCollection
 
typedef
ReferenceTrajectoryBase::ReferenceTrajectoryPtr 
ReferenceTrajectoryPtr
 
typedef std::pair
< TrajectoryStateOnSurface,
TransientTrackingRecHit::ConstRecHitContainer
TrajectoryInput
 

Detailed Description

A factory that produces reference trajectory instances of class DualKalmanTrajectory from a given TrajTrackPairCollection.

Currently two methods to set residual and error can be choosen via cfg: 1: the unbiased residal approach 2: the pull approach

Author
: Gero Flucke date : October 2008
Revision:
1.2
Date:
2010/01/14 16:14:04

(last update by

Author:
flucke

)

Definition at line 32 of file DualKalmanFactory.cc.

Constructor & Destructor Documentation

DualKalmanFactory::DualKalmanFactory ( const edm::ParameterSet config)

Definition at line 75 of file DualKalmanFactory.cc.

Referenced by clone().

76  : TrajectoryFactoryBase(config), theMass(config.getParameter<double>("ParticleMass")),
77  theResidMethod(config.getParameter<int>("ResidualMethod"))
78 {
79  // Since theResidMethod is passed to DualKalmanTrajectory, valid values are checked there.
80  edm::LogInfo("Alignment") << "@SUB=DualKalmanFactory" << "Factory created.";
81 }
T getParameter(std::string const &) const
TrajectoryFactoryBase(const edm::ParameterSet &config)
DualKalmanFactory::~DualKalmanFactory ( )
virtual

Definition at line 85 of file DualKalmanFactory.cc.

85 {}

Member Function Documentation

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

Implements TrajectoryFactoryBase.

Definition at line 49 of file DualKalmanFactory.cc.

References DualKalmanFactory().

49 { return new DualKalmanFactory(*this); }
DualKalmanFactory(const edm::ParameterSet &config)
const DualKalmanFactory::DualKalmanInput DualKalmanFactory::referenceStateAndRecHits ( const ConstTrajTrackPair track) const
protected

Definition at line 194 of file DualKalmanFactory.cc.

References DualKalmanFactory::DualKalmanInput::bwdRecHitNums, DualKalmanFactory::DualKalmanInput::fwdRecHitNums, collect_tpl::input, TrajectoryFactoryBase::orderedTrajectoryMeasurements(), DualKalmanFactory::DualKalmanInput::refTsos, DualKalmanFactory::DualKalmanInput::trajMeasurements, and TrajectoryFactoryBase::useRecHit().

Referenced by trajectories().

195 {
196  // Same idea as in DualTrajectoryFactory::referenceStateAndRecHits(..):
197  // Split trajectory in the middle, take middle as reference and provide first
198  // and second half of hits, each starting from this middle hit.
199  // In contrast to DualTrajectoryFactory we deal here with indices and not rechits directly
200  // to be able to get measurements and uncertainties later from the Trajectory that is
201  // provided by the Kalman track fit.
202 
203  DualKalmanInput input;
204 
205  // get the trajectory measurements in the correct order, i.e. reverse if needed
206  input.trajMeasurements = this->orderedTrajectoryMeasurements(*track.first);
207 
208  // get indices of relevant trajectory measurements to find middle of them
209  std::vector<unsigned int> usedTrajMeasNums;
210  for (unsigned int iM = 0; iM < input.trajMeasurements.size(); ++iM) {
211  if (this->useRecHit(input.trajMeasurements[iM].recHit())) usedTrajMeasNums.push_back(iM);
212  }
213  unsigned int nRefStateMeas = usedTrajMeasNums.size()/2;
214 
215  // get the valid RecHits numbers
216  for (unsigned int iMeas = 0; iMeas < usedTrajMeasNums.size(); ++iMeas) {
217  if (iMeas < nRefStateMeas) {
218  input.bwdRecHitNums.push_back(usedTrajMeasNums[iMeas]);
219  } else if (iMeas > nRefStateMeas) {
220  input.fwdRecHitNums.push_back(usedTrajMeasNums[iMeas]);
221  } else { // iMeas == nRefStateMeas
222  if (input.trajMeasurements[usedTrajMeasNums[iMeas]].updatedState().isValid()) {
223  input.refTsos = input.trajMeasurements[usedTrajMeasNums[iMeas]].updatedState();
224  input.bwdRecHitNums.push_back(usedTrajMeasNums[iMeas]);
225  input.fwdRecHitNums.push_back(usedTrajMeasNums[iMeas]);
226  } else {
227  // if the hit/tsos of the middle hit is not valid, try the next one...
228  ++nRefStateMeas; // but keep hit if only TSOS bad
229  input.bwdRecHitNums.push_back(usedTrajMeasNums[iMeas]);
230  }
231  }
232  }
233 
234  // bring input.fwdRecHits into correct order
235  std::reverse(input.bwdRecHitNums.begin(), input.bwdRecHitNums.end());
236 
237  return input;
238 }
virtual const Trajectory::DataContainer orderedTrajectoryMeasurements(const Trajectory &trajectory) const
bool useRecHit(const TransientTrackingRecHit::ConstRecHitPointer &hitPtr) const
tuple input
Definition: collect_tpl.py:10
const DualKalmanFactory::ReferenceTrajectoryCollection DualKalmanFactory::trajectories ( const edm::EventSetup setup,
const ConstTrajTrackPairCollection tracks,
const reco::BeamSpot beamSpot 
) const
virtual

Produce the reference trajectories.

Implements TrajectoryFactoryBase.

Definition at line 90 of file DualKalmanFactory.cc.

References DualKalmanFactory::DualKalmanInput::bwdRecHitNums, DualKalmanFactory::DualKalmanInput::fwdRecHitNums, edm::EventSetup::get(), collect_tpl::input, TrajectoryStateOnSurface::isValid(), TrajectoryFactoryBase::materialEffects(), edm::ESHandle< class >::product(), TrajectoryFactoryBase::propagationDirection(), referenceStateAndRecHits(), DualKalmanFactory::DualKalmanInput::refTsos, theMass, theResidMethod, TrajectoryFactoryBase::theUseBeamSpot, and DualKalmanFactory::DualKalmanInput::trajMeasurements.

Referenced by trajectories().

93 {
95 
96  edm::ESHandle<MagneticField> magneticField;
97  setup.get<IdealMagneticFieldRecord>().get(magneticField);
98 
99  ConstTrajTrackPairCollection::const_iterator itTracks = tracks.begin();
100 
101  while (itTracks != tracks.end()) {
102  const DualKalmanInput input = this->referenceStateAndRecHits(*itTracks);
103  // Check input: If all hits were rejected, the TSOS is initialized as invalid.
104  if (input.refTsos.isValid()) {
105  ReferenceTrajectoryPtr ptr(new DualKalmanTrajectory(input.trajMeasurements,
106  input.refTsos,
107  input.fwdRecHitNums,
108  input.bwdRecHitNums,
109  magneticField.product(),
110  this->materialEffects(),
111  this->propagationDirection(),
112  theMass, theUseBeamSpot, beamSpot,
113  theResidMethod));
114  trajectories.push_back(ptr);
115  }
116  ++itTracks;
117  }
118 
119  return trajectories;
120 }
virtual const ReferenceTrajectoryCollection trajectories(const edm::EventSetup &setup, const ConstTrajTrackPairCollection &tracks, const reco::BeamSpot &beamSpot) const
Produce the reference trajectories.
const MaterialEffects materialEffects(void) const
tuple input
Definition: collect_tpl.py:10
std::vector< ReferenceTrajectoryPtr > ReferenceTrajectoryCollection
tuple tracks
Definition: testEve_cfg.py:39
const T & get() const
Definition: EventSetup.h:55
T const * product() const
Definition: ESHandle.h:62
const PropagationDirection propagationDirection(void) const
const DualKalmanInput referenceStateAndRecHits(const ConstTrajTrackPair &track) const
ReferenceTrajectoryBase::ReferenceTrajectoryPtr ReferenceTrajectoryPtr
const DualKalmanFactory::ReferenceTrajectoryCollection DualKalmanFactory::trajectories ( const edm::EventSetup setup,
const ConstTrajTrackPairCollection tracks,
const ExternalPredictionCollection external,
const reco::BeamSpot beamSpot 
) const
virtual

Implements TrajectoryFactoryBase.

Definition at line 124 of file DualKalmanFactory.cc.

References trajectories().

128 {
130 
131  edm::LogError("Alignment") << "@SUB=DualKalmanFactory::trajectories"
132  << "Not implemented with ExternalPrediction.";
133  return trajectories;
134 
135  // copy paste from DualTrajectoryFactory:
136  if (tracks.size() != external.size()) {
137  edm::LogInfo("ReferenceTrajectories") << "@SUB=DualKalmanFactory::trajectories"
138  << "Inconsistent input:\n"
139  << "\tnumber of tracks = " << tracks.size()
140  << "\tnumber of external predictions = " << external.size();
141  return trajectories;
142  }
143  /*
144  edm::ESHandle<MagneticField> magneticField;
145  setup.get<IdealMagneticFieldRecord>().get(magneticField);
146 
147  ConstTrajTrackPairCollection::const_iterator itTracks = tracks.begin();
148  ExternalPredictionCollection::const_iterator itExternal = external.begin();
149 
150  while (itTracks != tracks.end()) {
151  const DualKalmanInput input = this->referenceStateAndRecHits(*itTracks);
152  // Check input: If all hits were rejected, the TSOS is initialized as invalid.
153  if (input.refTsos.isValid()) {
154  if ((*itExternal).isValid()) {
155  TrajectoryStateOnSurface propExternal =
156  this->propagateExternal(*itExternal, input.refTsos.surface(), magneticField.product());
157  if (!propExternal.isValid()) continue;
158 
159  // set the flag for reversing the RecHits to false, since they are already in the correct order.
160  ReferenceTrajectoryPtr ptr(new DualKalmanTrajectory(propExternal,
161  input.fwdRecHits,
162  input.bwdRecHits,
163  magneticField.product(),
164  materialEffects(),
165  propagationDirection(),
166  theMass, theResidMethod));
167 
168  AlgebraicSymMatrix externalParamErrors(asHepMatrix<5>(propExternal.localError().matrix()));
169  ptr->setParameterErrors(externalParamErrors);
170  trajectories.push_back(ptr);
171  } else {
172  ReferenceTrajectoryPtr ptr(new DualKalmanTrajectory(input.refTsos,
173  input.fwdRecHits,
174  input.bwdRecHits,
175  magneticField.product(),
176  materialEffects(),
177  propagationDirection(),
178  theMass, theResidMethod));
179  trajectories.push_back(ptr);
180  }
181  }
182 
183  ++itTracks;
184  ++itExternal;
185  }
186  */
187 
188  return trajectories;
189 }
virtual const ReferenceTrajectoryCollection trajectories(const edm::EventSetup &setup, const ConstTrajTrackPairCollection &tracks, const reco::BeamSpot &beamSpot) const
Produce the reference trajectories.
std::vector< ReferenceTrajectoryPtr > ReferenceTrajectoryCollection
tuple tracks
Definition: testEve_cfg.py:39

Member Data Documentation

const double DualKalmanFactory::theMass
protected

Definition at line 67 of file DualKalmanFactory.cc.

Referenced by twikiExport.Constituent::__str__(), and trajectories().

const int DualKalmanFactory::theResidMethod
protected

Definition at line 68 of file DualKalmanFactory.cc.

Referenced by trajectories().