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
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
< TrajectoryStateOnSurface
ExternalPredictionCollection
 
typedef
ReferenceTrajectoryBase::MaterialEffects 
MaterialEffects
 
typedef std::vector
< ReferenceTrajectoryPtr
ReferenceTrajectoryCollection
 
typedef
ReferenceTrajectoryBase::ReferenceTrajectoryPtr 
ReferenceTrajectoryPtr
 
typedef std::pair
< TrajectoryStateOnSurface,
TransientTrackingRecHit::ConstRecHitContainer
TrajectoryInput
 

Public Member Functions

virtual
TwoBodyDecayTrajectoryFactory
clone () const
 
virtual const
ReferenceTrajectoryCollection 
trajectories (const edm::EventSetup &setup, const ConstTrajTrackPairCollection &tracks, const reco::BeamSpot &beamSpot) const
 Produce the trajectories. More...
 
virtual const
ReferenceTrajectoryCollection 
trajectories (const edm::EventSetup &setup, const ConstTrajTrackPairCollection &tracks, const ExternalPredictionCollection &external, const reco::BeamSpot &beamSpot) const
 
 TwoBodyDecayTrajectoryFactory (const edm::ParameterSet &config)
 
 ~TwoBodyDecayTrajectoryFactory ()
 
- Public Member Functions inherited from TrajectoryFactoryBase
MaterialEffects materialEffects (void) const
 
PropagationDirection propagationDirection (void) const
 
 TrajectoryFactoryBase (const edm::ParameterSet &config)
 
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
 
TwoBodyDecayFittertheFitter
 
double theNSigmaCutValue
 
double thePrimaryMass
 
double thePrimaryWidth
 
double theSecondaryMass
 
bool theUseRefittedStateFlag
 
- Protected Attributes inherited from TrajectoryFactoryBase
bool theUseBeamSpot
 

Detailed Description

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

Definition at line 31 of file TwoBodyDecayTrajectoryFactory.cc.

Member Typedef Documentation

Definition at line 37 of file TwoBodyDecayTrajectoryFactory.cc.

Definition at line 36 of file TwoBodyDecayTrajectoryFactory.cc.

Definition at line 35 of file TwoBodyDecayTrajectoryFactory.cc.

Constructor & Destructor Documentation

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

Definition at line 81 of file TwoBodyDecayTrajectoryFactory.cc.

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

Referenced by clone().

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

Definition at line 96 of file TwoBodyDecayTrajectoryFactory.cc.

References theFitter.

97 {
98  delete theFitter;
99 }

Member Function Documentation

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

Implements TrajectoryFactoryBase.

Definition at line 52 of file TwoBodyDecayTrajectoryFactory.cc.

References TwoBodyDecayTrajectoryFactory().

52 { return new TwoBodyDecayTrajectoryFactory(*this); }
TwoBodyDecayTrajectoryFactory(const edm::ParameterSet &config)
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 199 of file TwoBodyDecayTrajectoryFactory.cc.

References TwoBodyDecay::covariance(), TwoBodyDecay::hasError(), TrajectoryFactoryBase::innermostStateAndRecHits(), input1, input2, TwoBodyDecayTrajectoryState::isValid(), match(), TrajectoryFactoryBase::materialEffects(), TrajectoryFactoryBase::propagationDirection(), query::result, ReferenceTrajectoryBase::setParameterErrors(), theConstructTsosWithErrorsFlag, theSecondaryMass, theUseRefittedStateFlag, trajectories(), and TwoBodyDecayTrajectoryState::trajectoryStates().

Referenced by trajectories().

204 {
206 
207  // get innermost valid trajectory state and hits from the tracks
210 
211  if ( !( input1.first.isValid() && input2.first.isValid() ) ) return trajectories;
212 
213  // produce TwoBodyDecayTrajectoryState (input for TwoBodyDecayTrajectory)
214  TsosContainer tsos( input1.first, input2.first );
215  ConstRecHitCollection recHits( input1.second, input2.second );
216  TwoBodyDecayTrajectoryState trajectoryState( tsos, tbd, theSecondaryMass, magField );
217 
218  if ( !trajectoryState.isValid() )
219  {
220  trajectories.push_back( ReferenceTrajectoryPtr( new TwoBodyDecayTrajectory() ) );
221  return trajectories;
222  }
223 
224  // always use the refitted trajectory state for matching
225  TransientTrackingRecHit::ConstRecHitPointer updatedRecHit1( recHits.first.front()->clone( tsos.first ) );
226  bool valid1 = match( trajectoryState.trajectoryStates( true ).first,
227  updatedRecHit1 );
228 
229  TransientTrackingRecHit::ConstRecHitPointer updatedRecHit2( recHits.second.front()->clone( tsos.second ) );
230  bool valid2 = match( trajectoryState.trajectoryStates( true ).second,
231  updatedRecHit2 );
232 
233  if ( !valid1 || !valid2 )
234  {
235  trajectories.push_back( ReferenceTrajectoryPtr( new TwoBodyDecayTrajectory() ) );
236  return trajectories;
237  }
238 
239  // set the flag for reversing the RecHits to false, since they are already in the correct order.
240  TwoBodyDecayTrajectory* result = new TwoBodyDecayTrajectory( trajectoryState, recHits, magField,
242  false, beamSpot, theUseRefittedStateFlag,
244  if ( setParameterErrors && tbd.hasError() ) result->setParameterErrors( tbd.covariance() );
245  trajectories.push_back( ReferenceTrajectoryPtr( result ) );
246  return trajectories;
247 }
bool hasError(void) const
Definition: TwoBodyDecay.h:45
MaterialEffects materialEffects(void) const
TwoBodyDecayTrajectory::ConstRecHitCollection ConstRecHitCollection
void setParameterErrors(const AlgebraicSymMatrix &error)
virtual const ReferenceTrajectoryCollection trajectories(const edm::EventSetup &setup, const ConstTrajTrackPairCollection &tracks, const reco::BeamSpot &beamSpot) const
Produce the trajectories.
#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
tuple result
Definition: query.py:137
#define input1
Definition: AMPTWrapper.h:129
virtual const TrajectoryInput innermostStateAndRecHits(const ConstTrajTrackPair &track) const
std::vector< ReferenceTrajectoryPtr > ReferenceTrajectoryCollection
tuple tracks
Definition: testEve_cfg.py:39
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 250 of file TwoBodyDecayTrajectoryFactory.cc.

References AlignmentPositionError::globalError(), vdt::le, TrajectoryStateOnSurface::localPosition(), mathSSE::sqrt(), theNSigmaCutValue, ErrorFrameTransformer::transform(), PV3DBase< T, PVType, FrameType >::x(), LocalError::xx(), PV3DBase< T, PVType, FrameType >::y(), and LocalError::yy().

Referenced by constructTrajectories().

252 {
253  LocalPoint lp1 = state.localPosition();
254  LocalPoint lp2 = recHit->localPosition();
255 
256  double deltaX = lp1.x() - lp2.x();
257  double deltaY = lp1.y() - lp2.y();
258 
259  LocalError le = recHit->localPositionError();
260 
261  double varX = le.xx();
262  double varY = le.yy();
263 
264  AlignmentPositionError* gape = recHit->det()->alignmentPositionError();
265  if ( gape )
266  {
268  LocalError lape = eft.transform( gape->globalError(), recHit->det()->surface() );
269 
270  varX += lape.xx();
271  varY += lape.yy();
272  }
273 
274  return ( ( fabs(deltaX)/sqrt(varX) < theNSigmaCutValue ) && ( fabs(deltaY)/sqrt(varY) < theNSigmaCutValue ) );
275 }
static GlobalError transform(const LocalError &le, const Surface &surf)
float xx() const
Definition: LocalError.h:24
T y() const
Definition: PV3DBase.h:62
float yy() const
Definition: LocalError.h:26
T sqrt(T t)
Definition: SSEVec.h:46
const GlobalError & globalError() const
T x() const
Definition: PV3DBase.h:61
unsigned long long le
Definition: VDTMath.h:202
const TrajectoryFactoryBase::ReferenceTrajectoryCollection TwoBodyDecayTrajectoryFactory::trajectories ( const edm::EventSetup setup,
const ConstTrajTrackPairCollection tracks,
const reco::BeamSpot beamSpot 
) const
virtual

Produce the trajectories.

Implements TrajectoryFactoryBase.

Definition at line 102 of file TwoBodyDecayTrajectoryFactory.cc.

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

Referenced by constructTrajectories(), and trajectories().

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

Implements TrajectoryFactoryBase.

Definition at line 145 of file TwoBodyDecayTrajectoryFactory.cc.

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

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

Member Data Documentation

double TwoBodyDecayTrajectoryFactory::theChi2CutValue
protected

Definition at line 71 of file TwoBodyDecayTrajectoryFactory.cc.

Referenced by trajectories(), and TwoBodyDecayTrajectoryFactory().

bool TwoBodyDecayTrajectoryFactory::theConstructTsosWithErrorsFlag
protected
TwoBodyDecayFitter* TwoBodyDecayTrajectoryFactory::theFitter
protected
double TwoBodyDecayTrajectoryFactory::theNSigmaCutValue
protected

Definition at line 70 of file TwoBodyDecayTrajectoryFactory.cc.

Referenced by match(), and TwoBodyDecayTrajectoryFactory().

double TwoBodyDecayTrajectoryFactory::thePrimaryMass
protected

Definition at line 66 of file TwoBodyDecayTrajectoryFactory.cc.

Referenced by trajectories(), and TwoBodyDecayTrajectoryFactory().

double TwoBodyDecayTrajectoryFactory::thePrimaryWidth
protected

Definition at line 67 of file TwoBodyDecayTrajectoryFactory.cc.

Referenced by trajectories(), and TwoBodyDecayTrajectoryFactory().

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