CMS 3D CMS Logo

Public Types | Public Member Functions | Private Member Functions | Private Attributes | Static Private Attributes

TwoBodyDecayTrajectoryState Class Reference

#include <TwoBodyDecayTrajectoryState.h>

List of all members.

Public Types

typedef std::pair
< AlgebraicMatrix,
AlgebraicMatrix
Derivatives
typedef std::pair
< TrajectoryStateOnSurface,
TrajectoryStateOnSurface
TsosContainer

Public Member Functions

const TwoBodyDecayParametersdecayParameters (void) const
const Derivativesderivatives (void) const
bool isValid (void) const
double particleMass (void) const
const TsosContainertrajectoryStates (bool useRefittedState=true) const
 TwoBodyDecayTrajectoryState (const TsosContainer &tsos, const TwoBodyDecayParameters &param, double particleMass, const MagneticField *magField)
 TwoBodyDecayTrajectoryState (const TsosContainer &tsos, const TwoBodyDecay &tbd, double particleMass, const MagneticField *magField)
 ~TwoBodyDecayTrajectoryState (void)

Private Member Functions

void construct (const MagneticField *magField)
bool propagateSingleState (const GlobalTrajectoryParameters &gtp, const AlgebraicMatrix &startDeriv, const Surface &surface, const MagneticField *magField, TrajectoryStateOnSurface &tsos, AlgebraicMatrix &endDeriv)

Private Attributes

Derivatives theDerivatives
TsosContainer theOriginalTsos
TwoBodyDecayParameters theParameters
double theParticleMass
TsosContainer theRefittedTsos
bool theValidityFlag

Static Private Attributes

static const unsigned int nDecayParam = TwoBodyDecayParameters::dimension
static const unsigned int nLocalParam = 5

Detailed Description

Definition at line 13 of file TwoBodyDecayTrajectoryState.h.


Member Typedef Documentation

Definition at line 19 of file TwoBodyDecayTrajectoryState.h.

Definition at line 18 of file TwoBodyDecayTrajectoryState.h.


Constructor & Destructor Documentation

TwoBodyDecayTrajectoryState::TwoBodyDecayTrajectoryState ( const TsosContainer tsos,
const TwoBodyDecay tbd,
double  particleMass,
const MagneticField magField 
)

The constructor takes the two trajectory states that are to be updated (typically the innermost trajectory states of two tracks) and the decay parameters.

Definition at line 21 of file TwoBodyDecayTrajectoryState.cc.

References construct().

TwoBodyDecayTrajectoryState::TwoBodyDecayTrajectoryState ( const TsosContainer tsos,
const TwoBodyDecayParameters param,
double  particleMass,
const MagneticField magField 
)

The constructor takes the two trajectory states that are to be updated (typically the innermost trajectory states of two tracks) and the decay parameters.

Definition at line 35 of file TwoBodyDecayTrajectoryState.cc.

References construct().

  : theValidityFlag( false ),
    theParticleMass( particleMass ),
    theParameters( param ),
    theDerivatives( AlgebraicMatrix( 5, 9 ), AlgebraicMatrix( 5, 9 ) ),
    theOriginalTsos( tsos )
{
  construct( magField );
}
TwoBodyDecayTrajectoryState::~TwoBodyDecayTrajectoryState ( void  ) [inline]

Definition at line 37 of file TwoBodyDecayTrajectoryState.h.

{}

Member Function Documentation

void TwoBodyDecayTrajectoryState::construct ( const MagneticField magField) [private]

Definition at line 49 of file TwoBodyDecayTrajectoryState.cc.

References TwoBodyDecayModel::cartesianSecondaryMomenta(), derivatives(), TwoBodyDecayParameters::mass, p1, p2, propagateSingleState(), theDerivatives, theOriginalTsos, theParameters, theParticleMass, theRefittedTsos, theValidityFlag, TwoBodyDecayParameters::x, TwoBodyDecayParameters::y, and TwoBodyDecayParameters::z.

Referenced by TwoBodyDecayTrajectoryState().

{
  // construct global trajectory parameters at the starting point
  TwoBodyDecayModel tbdDecayModel( theParameters[TwoBodyDecayParameters::mass], theParticleMass );
  pair< AlgebraicVector, AlgebraicVector > secondaryMomenta = tbdDecayModel.cartesianSecondaryMomenta( theParameters );

  GlobalPoint vtx( theParameters[TwoBodyDecayParameters::x],
                   theParameters[TwoBodyDecayParameters::y],
                   theParameters[TwoBodyDecayParameters::z] );

  GlobalVector p1( secondaryMomenta.first[0],
                   secondaryMomenta.first[1],
                   secondaryMomenta.first[2] );

  GlobalVector p2( secondaryMomenta.second[0],
                   secondaryMomenta.second[1],
                   secondaryMomenta.second[2] );

  GlobalTrajectoryParameters gtp1( vtx, p1, theOriginalTsos.first.charge(), magField );
  GlobalTrajectoryParameters gtp2( vtx, p2, theOriginalTsos.second.charge(), magField );

  // contruct derivatives at the starting point
  TwoBodyDecayDerivatives tbdDerivatives( theParameters[TwoBodyDecayParameters::mass], theParticleMass );
  pair< AlgebraicMatrix, AlgebraicMatrix > derivatives = tbdDerivatives.derivatives( theParameters );

  AlgebraicMatrix deriv1( 6, 9, 0 );
  deriv1.sub( 1, 1, AlgebraicMatrix( 3, 3, 1 ) );
  deriv1.sub( 4, 4, derivatives.first );

  AlgebraicMatrix deriv2( 6, 9, 0 );
  deriv2.sub( 1, 1, AlgebraicMatrix( 3, 3, 1 ) );
  deriv2.sub( 4, 4, derivatives.second );

  // propgate states and derivatives from the starting points to the end points
  bool valid1 = propagateSingleState( gtp1, deriv1, theOriginalTsos.first.surface(), magField,
                                      theRefittedTsos.first, theDerivatives.first );

  bool valid2 = propagateSingleState( gtp2, deriv2, theOriginalTsos.second.surface(), magField,
                                      theRefittedTsos.second, theDerivatives.second );

  theValidityFlag = valid1 && valid2;

  return;
}
const TwoBodyDecayParameters& TwoBodyDecayTrajectoryState::decayParameters ( void  ) const [inline]

Definition at line 42 of file TwoBodyDecayTrajectoryState.h.

References theParameters.

Referenced by TwoBodyDecayTrajectory::construct().

{ return theParameters; }
const Derivatives& TwoBodyDecayTrajectoryState::derivatives ( void  ) const [inline]

Definition at line 44 of file TwoBodyDecayTrajectoryState.h.

References theDerivatives.

Referenced by construct(), and TwoBodyDecayTrajectory::construct().

{ return theDerivatives; }
bool TwoBodyDecayTrajectoryState::isValid ( void  ) const [inline]

Definition at line 39 of file TwoBodyDecayTrajectoryState.h.

References theValidityFlag.

{ return theValidityFlag; }
double TwoBodyDecayTrajectoryState::particleMass ( void  ) const [inline]

Definition at line 41 of file TwoBodyDecayTrajectoryState.h.

References theParticleMass.

Referenced by TwoBodyDecayTrajectory::construct().

{ return theParticleMass; }
bool TwoBodyDecayTrajectoryState::propagateSingleState ( const GlobalTrajectoryParameters gtp,
const AlgebraicMatrix startDeriv,
const Surface surface,
const MagneticField magField,
TrajectoryStateOnSurface tsos,
AlgebraicMatrix endDeriv 
) [private]

Definition at line 95 of file TwoBodyDecayTrajectoryState.cc.

References asHepMatrix(), AnalyticalCurvilinearJacobian::jacobian(), JacobianCurvilinearToLocal::jacobian(), JacobianCartesianToCurvilinear::jacobian(), AnalyticalPropagator::propagateWithPath(), and LargeD0_PixelPairStep_cff::propagator.

Referenced by construct().

{
  AnalyticalPropagator propagator( magField );

  // propagate state
  pair< TrajectoryStateOnSurface, double > tsosWithPath = propagator.propagateWithPath( FreeTrajectoryState( gtp ), surface );

  // check if propagation was successful
  if ( !tsosWithPath.first.isValid() ) return false;

  // jacobian for transformation from cartesian to curvilinear frame at the starting point
  JacobianCartesianToCurvilinear cartToCurv( gtp );
  const AlgebraicMatrix56& matCartToCurv = cartToCurv.jacobian();

  // jacobian in curvilinear frame for propagation from the starting point to the end point
  AnalyticalCurvilinearJacobian curvJac( gtp, tsosWithPath.first.globalPosition(),
                                         tsosWithPath.first.globalMomentum(),
                                         tsosWithPath.second );
  const AlgebraicMatrix55& matCurvJac = curvJac.jacobian();

  // jacobian for transformation from curvilinear to local frame at the end point
  JacobianCurvilinearToLocal curvToLoc( surface, tsosWithPath.first.localParameters(), *magField );
  const AlgebraicMatrix55& matCurvToLoc = curvToLoc.jacobian();

  AlgebraicMatrix56 tmpDeriv = matCurvToLoc*matCurvJac*matCartToCurv;
  AlgebraicMatrix hepMatDeriv( asHepMatrix( tmpDeriv ) );
  //AlgebraicMatrix hepMatDeriv = asHepMatrix< 5, 6 >( tmpDeriv );

  // replace original state with new state
  tsos = tsosWithPath.first;

  // propagate derivative matrix
  endDeriv = hepMatDeriv*startDeriv;

  return true;
}
const TsosContainer& TwoBodyDecayTrajectoryState::trajectoryStates ( bool  useRefittedState = true) const [inline]

Definition at line 43 of file TwoBodyDecayTrajectoryState.h.

References theOriginalTsos, and theRefittedTsos.

Referenced by TwoBodyDecayTrajectory::construct().

{ return useRefittedState ? theRefittedTsos : theOriginalTsos; }

Member Data Documentation

const unsigned int TwoBodyDecayTrajectoryState::nDecayParam = TwoBodyDecayParameters::dimension [static, private]

Definition at line 68 of file TwoBodyDecayTrajectoryState.h.

const unsigned int TwoBodyDecayTrajectoryState::nLocalParam = 5 [static, private]

Definition at line 67 of file TwoBodyDecayTrajectoryState.h.

Definition at line 62 of file TwoBodyDecayTrajectoryState.h.

Referenced by construct(), and derivatives().

Definition at line 63 of file TwoBodyDecayTrajectoryState.h.

Referenced by construct(), and trajectoryStates().

Definition at line 61 of file TwoBodyDecayTrajectoryState.h.

Referenced by construct(), and decayParameters().

Definition at line 59 of file TwoBodyDecayTrajectoryState.h.

Referenced by construct(), and particleMass().

Definition at line 64 of file TwoBodyDecayTrajectoryState.h.

Referenced by construct(), and trajectoryStates().

Definition at line 57 of file TwoBodyDecayTrajectoryState.h.

Referenced by construct(), and isValid().