CMS 3D CMS Logo

List of all members | Public Types | Public Member Functions | Protected Member Functions | Protected Attributes
TwoBodyDecayTrajectoryFactory Class Reference
Inheritance diagram for TwoBodyDecayTrajectoryFactory:
TrajectoryFactoryBase

Public Types

typedef TwoBodyDecayTrajectory::ConstRecHitCollection ConstRecHitCollection
 
typedef TwoBodyDecayTrajectoryState::TsosContainer TsosContainer
 
typedef TwoBodyDecayVirtualMeasurement VirtualMeasurement
 
- Public Types inherited from TrajectoryFactoryBase
typedef AlignmentAlgorithmBase::ConstTrajTrackPair ConstTrajTrackPair
 
typedef AlignmentAlgorithmBase::ConstTrajTrackPairCollection ConstTrajTrackPairCollection
 
typedef std::vector< TrajectoryStateOnSurfaceExternalPredictionCollection
 
typedef ReferenceTrajectoryBase::MaterialEffects MaterialEffects
 
typedef std::vector< ReferenceTrajectoryPtrReferenceTrajectoryCollection
 
typedef ReferenceTrajectoryBase::ReferenceTrajectoryPtr ReferenceTrajectoryPtr
 
typedef std::pair< TrajectoryStateOnSurface, TransientTrackingRecHit::ConstRecHitContainerTrajectoryInput
 

Public Member Functions

virtual TwoBodyDecayTrajectoryFactoryclone () const override
 
virtual const ReferenceTrajectoryCollection trajectories (const edm::EventSetup &setup, const ConstTrajTrackPairCollection &tracks, const reco::BeamSpot &beamSpot) const override
 Produce the trajectories. More...
 
virtual const ReferenceTrajectoryCollection trajectories (const edm::EventSetup &setup, const ConstTrajTrackPairCollection &tracks, const ExternalPredictionCollection &external, const reco::BeamSpot &beamSpot) const override
 
 TwoBodyDecayTrajectoryFactory (const edm::ParameterSet &config)
 
 ~TwoBodyDecayTrajectoryFactory ()
 
- Public Member Functions inherited from TrajectoryFactoryBase
const edm::ParameterSetconfiguration () const
 
MaterialEffects materialEffects (void) const
 
PropagationDirection propagationDirection (void) const
 
unsigned int tracksPerTrajectory () const
 
 TrajectoryFactoryBase (const edm::ParameterSet &config)
 
 TrajectoryFactoryBase (const edm::ParameterSet &config, unsigned int tracksPerTrajectory)
 
virtual ~TrajectoryFactoryBase (void)
 

Protected Member Functions

const ReferenceTrajectoryCollection constructTrajectories (const ConstTrajTrackPairCollection &tracks, const TwoBodyDecay &tbd, const MagneticField *magField, const reco::BeamSpot &beamSpot, bool setParameterErrors) const
 
bool match (const TrajectoryStateOnSurface &state, const TransientTrackingRecHit::ConstRecHitPointer &recHit) 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

double theChi2CutValue
 
bool theConstructTsosWithErrorsFlag
 
TwoBodyDecayFitter theFitter
 
double theNSigmaCutValue
 
double thePrimaryMass
 
double thePrimaryWidth
 
double theSecondaryMass
 
bool theUseRefittedStateFlag
 
- Protected Attributes inherited from TrajectoryFactoryBase
const bool allowZeroMaterial_
 
const bool includeAPEs_
 
const bool useBeamSpot_
 

Detailed Description

by Edmund Widl, see CMS NOTE-2007/032. extension for BreakPoints or BrokenLines by Claus Kleinwort

Definition at line 30 of file TwoBodyDecayTrajectoryFactory.cc.

Member Typedef Documentation

Definition at line 36 of file TwoBodyDecayTrajectoryFactory.cc.

Definition at line 35 of file TwoBodyDecayTrajectoryFactory.cc.

Definition at line 34 of file TwoBodyDecayTrajectoryFactory.cc.

Constructor & Destructor Documentation

TwoBodyDecayTrajectoryFactory::TwoBodyDecayTrajectoryFactory ( const edm::ParameterSet config)

Definition at line 80 of file TwoBodyDecayTrajectoryFactory.cc.

References edm::ParameterSet::getParameter(), theChi2CutValue, theConstructTsosWithErrorsFlag, theNSigmaCutValue, thePrimaryMass, thePrimaryWidth, theSecondaryMass, and theUseRefittedStateFlag.

Referenced by clone().

81  : TrajectoryFactoryBase(config, 2),
82  theFitter(config)
83 {
84  const edm::ParameterSet ppc = config.getParameter< edm::ParameterSet >( "ParticleProperties" );
85  thePrimaryMass = ppc.getParameter< double >( "PrimaryMass" );
86  thePrimaryWidth = ppc.getParameter< double >( "PrimaryWidth" );
87  theSecondaryMass = ppc.getParameter< double >( "SecondaryMass" );
88 
89  theNSigmaCutValue = config.getParameter< double >( "NSigmaCut" );
90  theChi2CutValue = config.getParameter< double >( "Chi2Cut" );
91  theUseRefittedStateFlag = config.getParameter< bool >( "UseRefittedState" );
92  theConstructTsosWithErrorsFlag = config.getParameter< bool >( "ConstructTsosWithErrors" );
93 }
T getParameter(std::string const &) const
TrajectoryFactoryBase(const edm::ParameterSet &config)
TwoBodyDecayTrajectoryFactory::~TwoBodyDecayTrajectoryFactory ( )

Definition at line 95 of file TwoBodyDecayTrajectoryFactory.cc.

96 {
97 }

Member Function Documentation

virtual TwoBodyDecayTrajectoryFactory* TwoBodyDecayTrajectoryFactory::clone ( void  ) const
inlineoverridevirtual
const TwoBodyDecayTrajectoryFactory::ReferenceTrajectoryCollection TwoBodyDecayTrajectoryFactory::constructTrajectories ( const ConstTrajTrackPairCollection tracks,
const TwoBodyDecay tbd,
const MagneticField magField,
const reco::BeamSpot beamSpot,
bool  setParameterErrors 
) const
protected

Definition at line 197 of file TwoBodyDecayTrajectoryFactory.cc.

References ReferenceTrajectoryBase::Config::allowZeroMaterial, TrajectoryFactoryBase::allowZeroMaterial_, mps_alisetup::config, ReferenceTrajectoryBase::Config::constructTsosWithErrors, TwoBodyDecay::covariance(), TwoBodyDecay::hasError(), ReferenceTrajectoryBase::Config::hitsAreReverse, ReferenceTrajectoryBase::Config::includeAPEs, TrajectoryFactoryBase::includeAPEs_, TrajectoryFactoryBase::innermostStateAndRecHits(), input1, input2, TwoBodyDecayTrajectoryState::isValid(), match(), TrajectoryFactoryBase::materialEffects(), TrajectoryFactoryBase::propagationDirection(), mps_fire::result, ReferenceTrajectoryBase::setParameterErrors(), theConstructTsosWithErrorsFlag, theSecondaryMass, theUseRefittedStateFlag, trajectories(), TwoBodyDecayTrajectoryState::trajectoryStates(), ReferenceTrajectoryBase::Config::useBeamSpot, TrajectoryFactoryBase::useBeamSpot_, and ReferenceTrajectoryBase::Config::useRefittedState.

Referenced by clone(), and trajectories().

202 {
204 
205  // get innermost valid trajectory state and hits from the tracks
208 
209  if ( !( input1.first.isValid() && input2.first.isValid() ) ) return trajectories;
210 
211  // produce TwoBodyDecayTrajectoryState (input for TwoBodyDecayTrajectory)
212  TsosContainer tsos( input1.first, input2.first );
213  ConstRecHitCollection recHits( input1.second, input2.second );
214  TwoBodyDecayTrajectoryState trajectoryState( tsos, tbd, theSecondaryMass, magField );
215 
216  if ( !trajectoryState.isValid() )
217  {
218  trajectories.push_back( ReferenceTrajectoryPtr( new TwoBodyDecayTrajectory() ) );
219  return trajectories;
220  }
221 
222  // always use the refitted trajectory state for matching
223  // FIXME FIXME CLONE
224  //TrackingRecHit::ConstRecHitPointer updatedRecHit1( recHits.first.front()->clone( tsos.first ) );
225  // TrackingRecHit::ConstRecHitPointer updatedRecHit2( recHits.second.front()->clone( tsos.second ) );
226 
227  TrackingRecHit::ConstRecHitPointer updatedRecHit1( recHits.first.front() );
228  TrackingRecHit::ConstRecHitPointer updatedRecHit2( recHits.second.front() );
229 
230 
231  bool valid1 = match( trajectoryState.trajectoryStates( true ).first,
232  updatedRecHit1 );
233 
234  bool valid2 = match( trajectoryState.trajectoryStates( true ).second,
235  updatedRecHit2 );
236 
237  if ( !valid1 || !valid2 )
238  {
239  trajectories.push_back( ReferenceTrajectoryPtr( new TwoBodyDecayTrajectory() ) );
240  return trajectories;
241  }
242 
244  config.useBeamSpot = useBeamSpot_;
245  config.includeAPEs = includeAPEs_;
246  config.allowZeroMaterial = allowZeroMaterial_;
247  config.useRefittedState = theUseRefittedStateFlag;
248  config.constructTsosWithErrors = theConstructTsosWithErrorsFlag;
249  // set the flag for reversing the RecHits to false, since they are already in the correct order.
250  config.hitsAreReverse = false;
252  recHits,
253  magField,
254  beamSpot,
255  config);
256  if ( setParameterErrors && tbd.hasError() ) result->setParameterErrors( tbd.covariance() );
257  trajectories.push_back( ReferenceTrajectoryPtr( result ) );
258  return trajectories;
259 }
bool hasError(void) const
Definition: TwoBodyDecay.h:45
virtual const ReferenceTrajectoryCollection trajectories(const edm::EventSetup &setup, const ConstTrajTrackPairCollection &tracks, const reco::BeamSpot &beamSpot) const override
Produce the trajectories.
MaterialEffects materialEffects(void) const
TwoBodyDecayTrajectory::ConstRecHitCollection ConstRecHitCollection
void setParameterErrors(const AlgebraicSymMatrix &error)
Definition: config.py:1
#define input2
Definition: AMPTWrapper.h:149
bool match(const TrajectoryStateOnSurface &state, const TransientTrackingRecHit::ConstRecHitPointer &recHit) const
const AlgebraicSymMatrix & covariance(void) const
Definition: TwoBodyDecay.h:37
std::shared_ptr< TrackingRecHit const > ConstRecHitPointer
#define input1
Definition: AMPTWrapper.h:129
virtual const TrajectoryInput innermostStateAndRecHits(const ConstTrajTrackPair &track) const
std::vector< ReferenceTrajectoryPtr > ReferenceTrajectoryCollection
PropagationDirection propagationDirection(void) const
std::pair< TrajectoryStateOnSurface, TransientTrackingRecHit::ConstRecHitContainer > TrajectoryInput
ReferenceTrajectoryBase::ReferenceTrajectoryPtr ReferenceTrajectoryPtr
TwoBodyDecayTrajectoryState::TsosContainer TsosContainer
bool TwoBodyDecayTrajectoryFactory::match ( const TrajectoryStateOnSurface state,
const TransientTrackingRecHit::ConstRecHitPointer recHit 
) const
protected

Definition at line 262 of file TwoBodyDecayTrajectoryFactory.cc.

References DEFINE_EDM_PLUGIN, TrajectoryStateOnSurface::localPosition(), mathSSE::sqrt(), theNSigmaCutValue, PV3DBase< T, PVType, FrameType >::x(), LocalError::xx(), PV3DBase< T, PVType, FrameType >::y(), and LocalError::yy().

Referenced by clone(), and constructTrajectories().

264 {
265  LocalPoint lp1 = state.localPosition();
266  LocalPoint lp2 = recHit->localPosition();
267 
268  double deltaX = lp1.x() - lp2.x();
269  double deltaY = lp1.y() - lp2.y();
270 
271  LocalError le = recHit->localPositionError();
272 
273  double varX = le.xx();
274  double varY = le.yy();
275 
276  return ( ( fabs(deltaX)/sqrt(varX) < theNSigmaCutValue ) && ( fabs(deltaY)/sqrt(varY) < theNSigmaCutValue ) );
277 }
float xx() const
Definition: LocalError.h:24
T y() const
Definition: PV3DBase.h:63
float yy() const
Definition: LocalError.h:26
T sqrt(T t)
Definition: SSEVec.h:18
T x() const
Definition: PV3DBase.h:62
const TrajectoryFactoryBase::ReferenceTrajectoryCollection TwoBodyDecayTrajectoryFactory::trajectories ( const edm::EventSetup setup,
const ConstTrajTrackPairCollection tracks,
const reco::BeamSpot beamSpot 
) const
overridevirtual

Produce the trajectories.

Implements TrajectoryFactoryBase.

Definition at line 100 of file TwoBodyDecayTrajectoryFactory.cc.

References ecalDrivenElectronSeedsParameters_cff::beamSpot, TwoBodyDecay::chi2(), constructTrajectories(), TwoBodyDecayFitter::estimate(), funct::false, edm::EventSetup::get(), TwoBodyDecay::isValid(), seedCreatorFromRegionConsecutiveHitsEDProducer_cff::magneticField, edm::ESHandle< T >::product(), edm::second(), reco::TransientTrack::setES(), theChi2CutValue, theFitter, thePrimaryMass, thePrimaryWidth, and theSecondaryMass.

Referenced by constructTrajectories(), and trajectories().

103 {
105 
107  setup.get< IdealMagneticFieldRecord >().get( magneticField );
108 
109  if ( tracks.size() == 2 )
110  {
111  // produce transient tracks from persistent tracks
112  std::vector< reco::TransientTrack > transientTracks( 2 );
113 
114  transientTracks[0] = reco::TransientTrack( *tracks[0].second, magneticField.product() );
115  transientTracks[0].setES( setup );
116 
117  transientTracks[1] = reco::TransientTrack( *tracks[1].second, magneticField.product() );
118  transientTracks[1].setES( setup );
119 
120  // estimate the decay parameters
122  TwoBodyDecay tbd = theFitter.estimate( transientTracks, vm );
123 
124  if ( !tbd.isValid() || ( tbd.chi2() > theChi2CutValue ) )
125  {
126  trajectories.push_back( ReferenceTrajectoryPtr( new TwoBodyDecayTrajectory() ) );
127  return trajectories;
128  }
129 
130  return constructTrajectories( tracks, tbd, magneticField.product(), beamSpot, false );
131  }
132  else
133  {
134  edm::LogInfo( "ReferenceTrajectories" ) << "@SUB=TwoBodyDecayTrajectoryFactory::trajectories"
135  << "Need 2 tracks, got " << tracks.size() << ".\n";
136  }
137 
138  return trajectories;
139 }
virtual const ReferenceTrajectoryCollection trajectories(const edm::EventSetup &setup, const ConstTrajTrackPairCollection &tracks, const reco::BeamSpot &beamSpot) const override
Produce the trajectories.
TwoBodyDecayVirtualMeasurement VirtualMeasurement
const ReferenceTrajectoryCollection constructTrajectories(const ConstTrajTrackPairCollection &tracks, const TwoBodyDecay &tbd, const MagneticField *magField, const reco::BeamSpot &beamSpot, bool setParameterErrors) const
virtual const TwoBodyDecay estimate(const std::vector< reco::TransientTrack > &tracks, const TwoBodyDecayVirtualMeasurement &vm) const
U second(std::pair< T, U > const &p)
void setES(const edm::EventSetup &es)
bool isValid(void) const
Definition: TwoBodyDecay.h:49
std::vector< ReferenceTrajectoryPtr > ReferenceTrajectoryCollection
const T & get() const
Definition: EventSetup.h:56
double chi2(void) const
Definition: TwoBodyDecay.h:47
ReferenceTrajectoryBase::ReferenceTrajectoryPtr ReferenceTrajectoryPtr
T const * product() const
Definition: ESHandle.h:86
const TrajectoryFactoryBase::ReferenceTrajectoryCollection TwoBodyDecayTrajectoryFactory::trajectories ( const edm::EventSetup setup,
const ConstTrajTrackPairCollection tracks,
const ExternalPredictionCollection external,
const reco::BeamSpot beamSpot 
) const
overridevirtual

Implements TrajectoryFactoryBase.

Definition at line 143 of file TwoBodyDecayTrajectoryFactory.cc.

References ecalDrivenElectronSeedsParameters_cff::beamSpot, TwoBodyDecay::chi2(), constructTrajectories(), TwoBodyDecayFitter::estimate(), edm::EventSetup::get(), TwoBodyDecay::isValid(), seedCreatorFromRegionConsecutiveHitsEDProducer_cff::magneticField, edm::ESHandle< T >::product(), edm::second(), reco::TransientTrack::setES(), theChi2CutValue, theFitter, thePrimaryMass, thePrimaryWidth, theSecondaryMass, trajectories(), and funct::true.

147 {
149 
151  setup.get< IdealMagneticFieldRecord >().get( magneticField );
152 
153  if ( tracks.size() == 2 && external.size() == 2 )
154  {
155  if ( external[0].isValid() && external[1].isValid() ) // Include external estimates
156  {
157  // produce transient tracks from persistent tracks
158  std::vector< reco::TransientTrack > transientTracks( 2 );
159 
160  transientTracks[0] = reco::TransientTrack( *tracks[0].second, magneticField.product() );
161  transientTracks[0].setES( setup );
162 
163  transientTracks[1] = reco::TransientTrack( *tracks[1].second, magneticField.product() );
164  transientTracks[1].setES( setup );
165 
166  // estimate the decay parameters. the transient tracks are not really associated to the
167  // the external tsos, but this is o.k., because the only information retrieved from them
168  // is the magnetic field.
170  TwoBodyDecay tbd = theFitter.estimate(transientTracks, external, vm);
171 
172  if ( !tbd.isValid() || ( tbd.chi2() > theChi2CutValue ) )
173  {
174  trajectories.push_back( ReferenceTrajectoryPtr( new TwoBodyDecayTrajectory() ) );
175  return trajectories;
176  }
177 
178  return constructTrajectories( tracks, tbd, magneticField.product(), beamSpot, true );
179  }
180  else
181  {
182  // Return without external estimate
183  trajectories = this->trajectories(setup, tracks, beamSpot);
184  }
185  }
186  else
187  {
188  edm::LogInfo( "ReferenceTrajectories" ) << "@SUB=TwoBodyDecayTrajectoryFactory::trajectories"
189  << "Need 2 tracks, got " << tracks.size() << ".\n";
190  }
191 
192  return trajectories;
193 }
virtual const ReferenceTrajectoryCollection trajectories(const edm::EventSetup &setup, const ConstTrajTrackPairCollection &tracks, const reco::BeamSpot &beamSpot) const override
Produce the trajectories.
TwoBodyDecayVirtualMeasurement VirtualMeasurement
const ReferenceTrajectoryCollection constructTrajectories(const ConstTrajTrackPairCollection &tracks, const TwoBodyDecay &tbd, const MagneticField *magField, const reco::BeamSpot &beamSpot, bool setParameterErrors) const
virtual const TwoBodyDecay estimate(const std::vector< reco::TransientTrack > &tracks, const TwoBodyDecayVirtualMeasurement &vm) const
U second(std::pair< T, U > const &p)
void setES(const edm::EventSetup &es)
bool isValid(void) const
Definition: TwoBodyDecay.h:49
std::vector< ReferenceTrajectoryPtr > ReferenceTrajectoryCollection
const T & get() const
Definition: EventSetup.h:56
double chi2(void) const
Definition: TwoBodyDecay.h:47
ReferenceTrajectoryBase::ReferenceTrajectoryPtr ReferenceTrajectoryPtr
T const * product() const
Definition: ESHandle.h:86

Member Data Documentation

double TwoBodyDecayTrajectoryFactory::theChi2CutValue
protected

Definition at line 70 of file TwoBodyDecayTrajectoryFactory.cc.

Referenced by trajectories(), and TwoBodyDecayTrajectoryFactory().

bool TwoBodyDecayTrajectoryFactory::theConstructTsosWithErrorsFlag
protected
TwoBodyDecayFitter TwoBodyDecayTrajectoryFactory::theFitter
protected

Definition at line 63 of file TwoBodyDecayTrajectoryFactory.cc.

Referenced by trajectories().

double TwoBodyDecayTrajectoryFactory::theNSigmaCutValue
protected

Definition at line 69 of file TwoBodyDecayTrajectoryFactory.cc.

Referenced by match(), and TwoBodyDecayTrajectoryFactory().

double TwoBodyDecayTrajectoryFactory::thePrimaryMass
protected

Definition at line 65 of file TwoBodyDecayTrajectoryFactory.cc.

Referenced by trajectories(), and TwoBodyDecayTrajectoryFactory().

double TwoBodyDecayTrajectoryFactory::thePrimaryWidth
protected

Definition at line 66 of file TwoBodyDecayTrajectoryFactory.cc.

Referenced by trajectories(), and TwoBodyDecayTrajectoryFactory().

double TwoBodyDecayTrajectoryFactory::theSecondaryMass
protected
bool TwoBodyDecayTrajectoryFactory::theUseRefittedStateFlag
protected