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

TwoBodyDecayTrajectoryFactoryclone () const override
 
const ReferenceTrajectoryCollection trajectories (const edm::EventSetup &setup, const ConstTrajTrackPairCollection &tracks, const reco::BeamSpot &beamSpot) const override
 Produce the trajectories. More...
 
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 () override
 
- 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 29 of file TwoBodyDecayTrajectoryFactory.cc.

Member Typedef Documentation

Definition at line 35 of file TwoBodyDecayTrajectoryFactory.cc.

Definition at line 34 of file TwoBodyDecayTrajectoryFactory.cc.

Definition at line 33 of file TwoBodyDecayTrajectoryFactory.cc.

Constructor & Destructor Documentation

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

Definition at line 79 of file TwoBodyDecayTrajectoryFactory.cc.

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

Referenced by clone().

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

Definition at line 94 of file TwoBodyDecayTrajectoryFactory.cc.

95 {
96 }

Member Function Documentation

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 196 of file TwoBodyDecayTrajectoryFactory.cc.

References ReferenceTrajectoryBase::Config::allowZeroMaterial, TrajectoryFactoryBase::allowZeroMaterial_, looper::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().

201 {
203 
204  // get innermost valid trajectory state and hits from the tracks
207 
208  if ( !( input1.first.isValid() && input2.first.isValid() ) ) return trajectories;
209 
210  // produce TwoBodyDecayTrajectoryState (input for TwoBodyDecayTrajectory)
211  TsosContainer tsos( input1.first, input2.first );
212  ConstRecHitCollection recHits( input1.second, input2.second );
213  TwoBodyDecayTrajectoryState trajectoryState( tsos, tbd, theSecondaryMass, magField );
214 
215  if ( !trajectoryState.isValid() )
216  {
217  trajectories.push_back( ReferenceTrajectoryPtr( new TwoBodyDecayTrajectory() ) );
218  return trajectories;
219  }
220 
221  // always use the refitted trajectory state for matching
222  // FIXME FIXME CLONE
223  //TrackingRecHit::ConstRecHitPointer updatedRecHit1( recHits.first.front()->clone( tsos.first ) );
224  // TrackingRecHit::ConstRecHitPointer updatedRecHit2( recHits.second.front()->clone( tsos.second ) );
225 
226  TrackingRecHit::ConstRecHitPointer updatedRecHit1( recHits.first.front() );
227  TrackingRecHit::ConstRecHitPointer updatedRecHit2( recHits.second.front() );
228 
229 
230  bool valid1 = match( trajectoryState.trajectoryStates( true ).first,
231  updatedRecHit1 );
232 
233  bool valid2 = match( trajectoryState.trajectoryStates( true ).second,
234  updatedRecHit2 );
235 
236  if ( !valid1 || !valid2 )
237  {
238  trajectories.push_back( ReferenceTrajectoryPtr( new TwoBodyDecayTrajectory() ) );
239  return trajectories;
240  }
241 
243  config.useBeamSpot = useBeamSpot_;
244  config.includeAPEs = includeAPEs_;
245  config.allowZeroMaterial = allowZeroMaterial_;
246  config.useRefittedState = theUseRefittedStateFlag;
247  config.constructTsosWithErrors = theConstructTsosWithErrorsFlag;
248  // set the flag for reversing the RecHits to false, since they are already in the correct order.
249  config.hitsAreReverse = false;
251  recHits,
252  magField,
253  beamSpot,
254  config);
255  if ( setParameterErrors && tbd.hasError() ) result->setParameterErrors( tbd.covariance() );
256  trajectories.push_back( ReferenceTrajectoryPtr( result ) );
257  return trajectories;
258 }
bool hasError(void) const
Definition: TwoBodyDecay.h:45
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
config
Definition: looper.py:289
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 261 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().

263 {
264  LocalPoint lp1 = state.localPosition();
265  LocalPoint lp2 = recHit->localPosition();
266 
267  double deltaX = lp1.x() - lp2.x();
268  double deltaY = lp1.y() - lp2.y();
269 
270  LocalError le = recHit->localPositionError();
271 
272  double varX = le.xx();
273  double varY = le.yy();
274 
275  return ( ( fabs(deltaX)/sqrt(varX) < theNSigmaCutValue ) && ( fabs(deltaY)/sqrt(varY) < theNSigmaCutValue ) );
276 }
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 99 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().

102 {
104 
106  setup.get< IdealMagneticFieldRecord >().get( magneticField );
107 
108  if ( tracks.size() == 2 )
109  {
110  // produce transient tracks from persistent tracks
111  std::vector< reco::TransientTrack > transientTracks( 2 );
112 
113  transientTracks[0] = reco::TransientTrack( *tracks[0].second, magneticField.product() );
114  transientTracks[0].setES( setup );
115 
116  transientTracks[1] = reco::TransientTrack( *tracks[1].second, magneticField.product() );
117  transientTracks[1].setES( setup );
118 
119  // estimate the decay parameters
121  TwoBodyDecay tbd = theFitter.estimate( transientTracks, vm );
122 
123  if ( !tbd.isValid() || ( tbd.chi2() > theChi2CutValue ) )
124  {
125  trajectories.push_back( ReferenceTrajectoryPtr( new TwoBodyDecayTrajectory() ) );
126  return trajectories;
127  }
128 
129  return constructTrajectories( tracks, tbd, magneticField.product(), beamSpot, false );
130  }
131  else
132  {
133  edm::LogInfo( "ReferenceTrajectories" ) << "@SUB=TwoBodyDecayTrajectoryFactory::trajectories"
134  << "Need 2 tracks, got " << tracks.size() << ".\n";
135  }
136 
137  return trajectories;
138 }
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
double chi2(void) const
Definition: TwoBodyDecay.h:47
T get() const
Definition: EventSetup.h:68
ReferenceTrajectoryBase::ReferenceTrajectoryPtr ReferenceTrajectoryPtr
T const * product() const
Definition: ESHandle.h:84
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 142 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.

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

Member Data Documentation

double TwoBodyDecayTrajectoryFactory::theChi2CutValue
protected

Definition at line 69 of file TwoBodyDecayTrajectoryFactory.cc.

Referenced by trajectories(), and TwoBodyDecayTrajectoryFactory().

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

Definition at line 62 of file TwoBodyDecayTrajectoryFactory.cc.

Referenced by trajectories().

double TwoBodyDecayTrajectoryFactory::theNSigmaCutValue
protected

Definition at line 68 of file TwoBodyDecayTrajectoryFactory.cc.

Referenced by match(), and TwoBodyDecayTrajectoryFactory().

double TwoBodyDecayTrajectoryFactory::thePrimaryMass
protected

Definition at line 64 of file TwoBodyDecayTrajectoryFactory.cc.

Referenced by trajectories(), and TwoBodyDecayTrajectoryFactory().

double TwoBodyDecayTrajectoryFactory::thePrimaryWidth
protected

Definition at line 65 of file TwoBodyDecayTrajectoryFactory.cc.

Referenced by trajectories(), and TwoBodyDecayTrajectoryFactory().

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