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
const MaterialEffects materialEffects (void) const
 
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
 
void produceVirtualMeasurement (const edm::ParameterSet &config)
 
- 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

bool theConstructTsosWithErrorsFlag
 
TwoBodyDecayFittertheFitter
 
double theNSigmaCutValue
 
bool theUseRefittedStateFlag
 
VirtualMeasurement theVM
 
- 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 80 of file TwoBodyDecayTrajectoryFactory.cc.

References produceVirtualMeasurement().

Referenced by clone().

81  : TrajectoryFactoryBase( config ),
82  theFitter( new TwoBodyDecayFitter( config ) ),
83  theNSigmaCutValue( config.getParameter< double >( "NSigmaCut" ) ),
84  theUseRefittedStateFlag( config.getParameter< bool >( "UseRefittedState" ) ),
85  theConstructTsosWithErrorsFlag( config.getParameter< bool >( "ConstructTsosWithErrors" ) )
86 {
87  produceVirtualMeasurement( config );
88 }
T getParameter(std::string const &) const
TrajectoryFactoryBase(const edm::ParameterSet &config)
void produceVirtualMeasurement(const edm::ParameterSet &config)
TwoBodyDecayTrajectoryFactory::~TwoBodyDecayTrajectoryFactory ( )
inline

Definition at line 40 of file TwoBodyDecayTrajectoryFactory.cc.

40 {}

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

References TwoBodyDecay::covariance(), TwoBodyDecay::hasError(), TrajectoryFactoryBase::innermostStateAndRecHits(), input1, input2, match(), TrajectoryFactoryBase::materialEffects(), TrajectoryFactoryBase::propagationDirection(), query::result, TwoBodyDecayVirtualMeasurement::secondaryMass(), ReferenceTrajectoryBase::setParameterErrors(), theConstructTsosWithErrorsFlag, theUseRefittedStateFlag, theVM, and trajectories().

Referenced by trajectories().

192 {
194 
195  // get innermost valid trajectory state and hits from the tracks
198 
199  if ( !( input1.first.isValid() && input2.first.isValid() ) ) return trajectories;
200 
201  // produce TwoBodyDecayTrajectoryState (input for TwoBodyDecayTrajectory)
202  TsosContainer tsos( input1.first, input2.first );
203  ConstRecHitCollection recHits( input1.second, input2.second );
204  TwoBodyDecayTrajectoryState trajectoryState( tsos, tbd, theVM.secondaryMass(), magField );
205 
206  if ( !trajectoryState.isValid() )
207  {
208  trajectories.push_back( ReferenceTrajectoryPtr( new TwoBodyDecayTrajectory() ) );
209  return trajectories;
210  }
211 
212  // always use the refitted trajectory state for matching
213  TransientTrackingRecHit::ConstRecHitPointer updatedRecHit1( recHits.first.front()->clone( tsos.first ) );
214  bool valid1 = match( trajectoryState.trajectoryStates( true ).first,
215  updatedRecHit1 );
216 
217  TransientTrackingRecHit::ConstRecHitPointer updatedRecHit2( recHits.second.front()->clone( tsos.second ) );
218  bool valid2 = match( trajectoryState.trajectoryStates( true ).second,
219  updatedRecHit2 );
220 
221  if ( !valid1 || !valid2 )
222  {
223  trajectories.push_back( ReferenceTrajectoryPtr( new TwoBodyDecayTrajectory() ) );
224  return trajectories;
225  }
226 
227  // set the flag for reversing the RecHits to false, since they are already in the correct order.
228  TwoBodyDecayTrajectory* result = new TwoBodyDecayTrajectory( trajectoryState, recHits, magField,
230  false, beamSpot, theUseRefittedStateFlag,
232  if ( setParameterErrors && tbd.hasError() ) result->setParameterErrors( tbd.covariance() );
233  trajectories.push_back( ReferenceTrajectoryPtr( result ) );
234  return trajectories;
235 }
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:33
const bool hasError(void) const
Definition: TwoBodyDecay.h:41
tuple result
Definition: query.py:137
#define input1
Definition: AMPTWrapper.h:129
const MaterialEffects materialEffects(void) const
virtual const TrajectoryInput innermostStateAndRecHits(const ConstTrajTrackPair &track) const
std::vector< ReferenceTrajectoryPtr > ReferenceTrajectoryCollection
tuple tracks
Definition: testEve_cfg.py:39
const 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 238 of file TwoBodyDecayTrajectoryFactory.cc.

References AlignmentPositionError::globalError(), asciidump::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().

240 {
241  LocalPoint lp1 = state.localPosition();
242  LocalPoint lp2 = recHit->localPosition();
243 
244  double deltaX = lp1.x() - lp2.x();
245  double deltaY = lp1.y() - lp2.y();
246 
247  LocalError le = recHit->localPositionError();
248 
249  double varX = le.xx();
250  double varY = le.yy();
251 
252  AlignmentPositionError* gape = recHit->det()->alignmentPositionError();
253  if ( gape )
254  {
256  LocalError lape = eft.transform( gape->globalError(), recHit->det()->surface() );
257 
258  varX += lape.xx();
259  varY += lape.yy();
260  }
261 
262  return ( ( fabs(deltaX)/sqrt(varX) < theNSigmaCutValue ) && ( fabs(deltaY)/sqrt(varY) < theNSigmaCutValue ) );
263 }
float xx() const
Definition: LocalError.h:19
GlobalError transform(const LocalError &le, const Surface &surf) const
T y() const
Definition: PV3DBase.h:57
float yy() const
Definition: LocalError.h:21
T sqrt(T t)
Definition: SSEVec.h:28
const GlobalError & globalError() const
T x() const
Definition: PV3DBase.h:56
void TwoBodyDecayTrajectoryFactory::produceVirtualMeasurement ( const edm::ParameterSet config)
protected

Definition at line 266 of file TwoBodyDecayTrajectoryFactory.cc.

References edm::ParameterSet::getParameter(), and theVM.

Referenced by TwoBodyDecayTrajectoryFactory().

267 {
268  const edm::ParameterSet bsc = config.getParameter< edm::ParameterSet >( "BeamSpot" );
269  const edm::ParameterSet ppc = config.getParameter< edm::ParameterSet >( "ParticleProperties" );
270  // FIXME: Should get 3D beamspot and errors from BeamSpot input from
271  // event with extrapolation of tracks to beam line?
272 
273  GlobalPoint theBeamSpot( bsc.getParameter< double >( "MeanX" ),
274  bsc.getParameter< double >( "MeanY" ),
275  bsc.getParameter< double >( "MeanZ" ) );
276 
277  GlobalError theBeamSpotError( bsc.getParameter< double >( "VarXX" ),
278  bsc.getParameter< double >( "VarXY" ),
279  bsc.getParameter< double >( "VarYY" ),
280  bsc.getParameter< double >( "VarXZ" ),
281  bsc.getParameter< double >( "VarYZ" ),
282  bsc.getParameter< double >( "VarZZ" ) );
283 
284  theVM = VirtualMeasurement( ppc.getParameter< double >( "PrimaryMass" ),
285  ppc.getParameter< double >( "PrimaryWidth" ),
286  ppc.getParameter< double >( "SecondaryMass" ),
287  theBeamSpot, theBeamSpotError );
288  return;
289 }
T getParameter(std::string const &) const
TwoBodyDecayVirtualMeasurement VirtualMeasurement
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 92 of file TwoBodyDecayTrajectoryFactory.cc.

References constructTrajectories(), TwoBodyDecayFitter::estimate(), funct::false, edm::EventSetup::get(), TwoBodyDecay::isValid(), edm::ESHandle< class >::product(), edm::second(), reco::TransientTrack::setES(), theFitter, and theVM.

Referenced by constructTrajectories(), and trajectories().

95 {
97 
98  edm::ESHandle< MagneticField > magneticField;
99  setup.get< IdealMagneticFieldRecord >().get( magneticField );
100 
101  if ( tracks.size() == 2 )
102  {
103  // produce transient tracks from persistent tracks
104  std::vector< reco::TransientTrack > transientTracks( 2 );
105 
106  transientTracks[0] = reco::TransientTrack( *tracks[0].second, magneticField.product() );
107  transientTracks[0].setES( setup );
108 
109  transientTracks[1] = reco::TransientTrack( *tracks[1].second, magneticField.product() );
110  transientTracks[1].setES( setup );
111 
112  // estimate the decay parameters
113  TwoBodyDecay tbd = theFitter->estimate( transientTracks, theVM );
114 
115  if ( !tbd.isValid() )
116  {
117  trajectories.push_back( ReferenceTrajectoryPtr( new TwoBodyDecayTrajectory() ) );
118  return trajectories;
119  }
120 
121  return constructTrajectories( tracks, tbd, magneticField.product(), beamSpot, false );
122  }
123  else
124  {
125  edm::LogInfo( "ReferenceTrajectories" ) << "@SUB=TwoBodyDecayTrajectoryFactory::trajectories"
126  << "Need 2 tracks, got " << tracks.size() << ".\n";
127  }
128 
129  return trajectories;
130 }
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)
const bool isValid(void) const
Definition: TwoBodyDecay.h:45
void setES(const edm::EventSetup &es)
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
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 134 of file TwoBodyDecayTrajectoryFactory.cc.

References constructTrajectories(), TwoBodyDecayFitter::estimate(), edm::EventSetup::get(), TwoBodyDecay::isValid(), edm::ESHandle< class >::product(), edm::second(), reco::TransientTrack::setES(), theFitter, theVM, trajectories(), and funct::true.

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

Member Data Documentation

bool TwoBodyDecayTrajectoryFactory::theConstructTsosWithErrorsFlag
protected

Definition at line 72 of file TwoBodyDecayTrajectoryFactory.cc.

Referenced by constructTrajectories().

TwoBodyDecayFitter* TwoBodyDecayTrajectoryFactory::theFitter
protected

Definition at line 68 of file TwoBodyDecayTrajectoryFactory.cc.

Referenced by trajectories().

double TwoBodyDecayTrajectoryFactory::theNSigmaCutValue
protected

Definition at line 70 of file TwoBodyDecayTrajectoryFactory.cc.

Referenced by match().

bool TwoBodyDecayTrajectoryFactory::theUseRefittedStateFlag
protected

Definition at line 71 of file TwoBodyDecayTrajectoryFactory.cc.

Referenced by constructTrajectories().

VirtualMeasurement TwoBodyDecayTrajectoryFactory::theVM
protected