CMS 3D CMS Logo

List of all members | Public Member Functions | Private Types | Private Member Functions | Private Attributes
SeedFromNuclearInteraction Class Reference

#include <SeedFromNuclearInteraction.h>

Public Member Functions

PropagationDirection direction () const
 
recHitContainer hits () const
 
const TSOSinitialTSOS () const
 
bool isValid () const
 
ConstRecHitPointer outerHit () const
 
DetId outerHitDetId () const
 
GlobalPoint outerHitPosition () const
 
AlgebraicMatrix33 rotationMatrix (const GlobalVector &perp) const
 
 SeedFromNuclearInteraction (const Propagator *prop, const TrackerGeometry *geom, const edm::ParameterSet &iConfig)
 
void setMeasurements (const TSOS &tsosAtInteractionPoint, ConstRecHitPointer ihit, ConstRecHitPointer ohit)
 Fill all data members from 2 TM's where the first one is supposed to be at the interaction point. More...
 
void setMeasurements (TangentHelix &primHelix, const TSOS &inner_TSOS, ConstRecHitPointer ihit, ConstRecHitPointer ohit)
 Fill all data members from 1 TSOS and 2 rec Hits and using the circle associated to the primary track as constraint. More...
 
FreeTrajectoryStatestateWithError () const
 
FreeTrajectoryStatestateWithError (TangentHelix &helix) const
 
PTrajectoryStateOnDet const & trajectoryState () const
 
TrajectorySeed TrajSeed () const
 
const TSOSupdatedTSOS () const
 
virtual ~SeedFromNuclearInteraction ()
 

Private Types

typedef std::vector< ConstRecHitPointerConstRecHitContainer
 
typedef TransientTrackingRecHit::ConstRecHitPointer ConstRecHitPointer
 
typedef edm::OwnVector< TrackingRecHitrecHitContainer
 
typedef TrajectoryMeasurement TM
 
typedef TrajectoryStateOnSurface TSOS
 

Private Member Functions

bool construct ()
 

Private Attributes

boost::shared_ptr< FreeTrajectoryStatefreeTS_
 
boost::shared_ptr< TSOSinitialTSOS_
 
ConstRecHitPointer innerHit_
 
bool isValid_
 
ConstRecHitPointer outerHit_
 
double ptMin
 
PTrajectoryStateOnDet pTraj
 
ConstRecHitContainer theHits
 
const PropagatorthePropagator
 
const TrackerGeometrytheTrackerGeom
 
boost::shared_ptr< TSOSupdatedTSOS_
 

Detailed Description

Definition at line 21 of file SeedFromNuclearInteraction.h.

Member Typedef Documentation

Definition at line 27 of file SeedFromNuclearInteraction.h.

Definition at line 26 of file SeedFromNuclearInteraction.h.

Definition at line 25 of file SeedFromNuclearInteraction.h.

Definition at line 23 of file SeedFromNuclearInteraction.h.

Definition at line 24 of file SeedFromNuclearInteraction.h.

Constructor & Destructor Documentation

SeedFromNuclearInteraction::SeedFromNuclearInteraction ( const Propagator prop,
const TrackerGeometry geom,
const edm::ParameterSet iConfig 
)

Definition at line 13 of file SeedFromNuclearInteraction.cc.

References freeTS_, initialTSOS_, isValid_, and updatedTSOS_.

13  :
14  ptMin(iConfig.getParameter<double>("ptMin")),
15  thePropagator(prop), theTrackerGeom(geom)
16  {
17  isValid_=true;
18  initialTSOS_ = boost::shared_ptr<TrajectoryStateOnSurface>(new TrajectoryStateOnSurface());
19  updatedTSOS_ = boost::shared_ptr<TrajectoryStateOnSurface>(new TrajectoryStateOnSurface());
20  freeTS_ = boost::shared_ptr<FreeTrajectoryState>(new FreeTrajectoryState());
21  }
const TrackerGeometry * theTrackerGeom
T getParameter(std::string const &) const
boost::shared_ptr< TSOS > updatedTSOS_
boost::shared_ptr< FreeTrajectoryState > freeTS_
boost::shared_ptr< TSOS > initialTSOS_
virtual SeedFromNuclearInteraction::~SeedFromNuclearInteraction ( )
inlinevirtual

Definition at line 32 of file SeedFromNuclearInteraction.h.

References setMeasurements().

32 {}

Member Function Documentation

bool SeedFromNuclearInteraction::construct ( )
private

Definition at line 124 of file SeedFromNuclearInteraction.cc.

References freeTS_, TrackingRecHit::geographicalId(), TrackerGeometry::idToDet(), TrajectoryStateOnSurface::isValid(), LogDebug, outerHitDetId(), trajectoryStateTransform::persistentState(), Propagator::propagate(), pTraj, theHits, thePropagator, theTrackerGeom, KFUpdator::update(), and updatedTSOS_.

Referenced by setMeasurements().

124  {
125 
126  // loop on all hits in theHits
127  KFUpdator theUpdator;
128 
129  const TrackingRecHit* hit = nullptr;
130 
131  LogDebug("NuclearSeedGenerator") << "Seed ** initial state " << freeTS_->cartesianError().matrix();
132 
133  for ( unsigned int iHit = 0; iHit < theHits.size(); iHit++) {
134  hit = theHits[iHit]->hit();
135  TrajectoryStateOnSurface state = (iHit==0) ?
138 
139  if (!state.isValid()) return false;
140 
142  updatedTSOS_.reset( new TrajectoryStateOnSurface(theUpdator.update(state, *tth)) );
143 
144  }
145 
146 
147 
148  LogDebug("NuclearSeedGenerator") << "Seed ** updated state " << updatedTSOS_->cartesianError().matrix();
149 
151  return true;
152 }
#define LogDebug(id)
const TrackerGeometry * theTrackerGeom
boost::shared_ptr< TSOS > updatedTSOS_
boost::shared_ptr< FreeTrajectoryState > freeTS_
PTrajectoryStateOnDet persistentState(const TrajectoryStateOnSurface &ts, unsigned int detid)
TrajectoryStateOnSurface update(const TrajectoryStateOnSurface &, const TrackingRecHit &) const override
Definition: KFUpdator.cc:75
std::shared_ptr< TrackingRecHit const > ConstRecHitPointer
TrajectoryStateOnSurface propagate(STA const &state, SUR const &surface) const
Definition: Propagator.h:53
const TrackerGeomDet * idToDet(DetId) const override
DetId geographicalId() const
PropagationDirection SeedFromNuclearInteraction::direction ( ) const
inline

Definition at line 46 of file SeedFromNuclearInteraction.h.

References alongMomentum, and hits().

Referenced by stateWithError(), and TrajSeed().

edm::OwnVector< TrackingRecHit > SeedFromNuclearInteraction::hits ( void  ) const

Definition at line 155 of file SeedFromNuclearInteraction.cc.

References edm::OwnVector< T, P >::push_back(), and theHits.

Referenced by ntupleDataFormat._TrackingParticleMatchAdaptor::bestMatchingTrackingParticle(), direction(), and TrajSeed().

155  {
156  recHitContainer _hits;
157  for( ConstRecHitContainer::const_iterator it = theHits.begin(); it!=theHits.end(); it++ ){
158  _hits.push_back( it->get()->hit()->clone() );
159  }
160  return _hits;
161 }
void push_back(D *&d)
Definition: OwnVector.h:290
edm::OwnVector< TrackingRecHit > recHitContainer
const TSOS& SeedFromNuclearInteraction::initialTSOS ( ) const
inline

Definition at line 56 of file SeedFromNuclearInteraction.h.

References initialTSOS_.

56 { return *initialTSOS_; }
boost::shared_ptr< TSOS > initialTSOS_
bool SeedFromNuclearInteraction::isValid ( void  ) const
inline
ConstRecHitPointer SeedFromNuclearInteraction::outerHit ( ) const
inline

Definition at line 64 of file SeedFromNuclearInteraction.h.

References outerHit_, perp(), and rotationMatrix().

64 { return outerHit_; }
DetId SeedFromNuclearInteraction::outerHitDetId ( ) const
inline

Definition at line 62 of file SeedFromNuclearInteraction.h.

References outerHit_.

Referenced by construct(), and outerHitPosition().

62 { return outerHit_->geographicalId(); }
GlobalPoint SeedFromNuclearInteraction::outerHitPosition ( ) const
inline

Definition at line 58 of file SeedFromNuclearInteraction.h.

References TrackerGeometry::idToDet(), outerHit_, outerHitDetId(), GeomDet::surface(), theTrackerGeom, and Surface::toGlobal().

Referenced by stateWithError().

58  {
59  return theTrackerGeom->idToDet(outerHitDetId())->surface().toGlobal(outerHit_->localPosition());
60  }
const TrackerGeometry * theTrackerGeom
GlobalPoint toGlobal(const Point2DBase< Scalar, LocalTag > lp) const
Definition: Surface.h:106
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:42
const TrackerGeomDet * idToDet(DetId) const override
AlgebraicMatrix33 SeedFromNuclearInteraction::rotationMatrix ( const GlobalVector perp) const

Return the rotation matrix to be applied to get parameters in a framework where the z direction is along perp

Definition at line 163 of file SeedFromNuclearInteraction.cc.

References Vector3DBase< T, FrameTag >::cross(), mps_fire::result, csvLumiCalc::unit, Vector3DBase< T, FrameTag >::unit(), PV3DBase< T, PVType, FrameType >::x(), MuonErrorMatrixValues_cff::xAxis, PV3DBase< T, PVType, FrameType >::y(), MuonErrorMatrixValues_cff::yAxis, PV3DBase< T, PVType, FrameType >::z(), and MetAnalyzer::zAxis.

Referenced by outerHit(), and stateWithError().

163  {
164 
166 
167  // z axis coincides with perp
168  GlobalVector zAxis = perp.unit();
169 
170  // x axis has no global Z component
172  if ( zAxis.x() != 0 || zAxis.y() != 0) {
173  // precision is not an issue here, just protect against divizion by zero
174  xAxis = GlobalVector( -zAxis.y(), zAxis.x(), 0).unit();
175  }
176  else { // perp coincides with global Z
177  xAxis = GlobalVector( 1, 0, 0);
178  }
179 
180  // y axis obtained by cross product
181  GlobalVector yAxis( zAxis.cross( xAxis));
182 
183  result(0,0) = xAxis.x();
184  result(0,1) = xAxis.y();
185  result(0,2) = xAxis.z();
186  result(1,0) = yAxis.x();
187  result(1,1) = yAxis.y();
188  result(1,2) = yAxis.z();
189  result(2,0) = zAxis.x();
190  result(2,1) = zAxis.y();
191  result(2,2) = zAxis.z();
192  return result;
193 }
T y() const
Definition: PV3DBase.h:63
Vector3DBase< typename PreciseFloatType< T, U >::Type, FrameTag > cross(const Vector3DBase< U, FrameTag > &v) const
Definition: Vector3DBase.h:119
T z() const
Definition: PV3DBase.h:64
Vector3DBase unit() const
Definition: Vector3DBase.h:57
T x() const
Definition: PV3DBase.h:62
ROOT::Math::SMatrix< double, 3, 3, ROOT::Math::MatRepStd< double, 3, 3 > > AlgebraicMatrix33
Global3DVector GlobalVector
Definition: GlobalVector.h:10
void SeedFromNuclearInteraction::setMeasurements ( const TSOS tsosAtInteractionPoint,
ConstRecHitPointer  ihit,
ConstRecHitPointer  ohit 
)

Fill all data members from 2 TM's where the first one is supposed to be at the interaction point.

Definition at line 24 of file SeedFromNuclearInteraction.cc.

References construct(), freeTS_, initialTSOS_, innerHit_, isValid_, outerHit_, ptMin, stateWithError(), and theHits.

Referenced by NuclearInteractionFinder::fillSeeds(), NuclearInteractionFinder::improveSeeds(), and ~SeedFromNuclearInteraction().

24  {
25 
26  // delete pointer to TrackingRecHits
27  theHits.clear();
28 
29  // get the inner and outer transient TrackingRecHits
30  innerHit_ = ihit;
31  outerHit_ = ohit;
32 
33  //theHits.push_back( inner_TM.recHit() ); // put temporarily - TODO: remove this line
34  theHits.push_back( outerHit_ );
35 
36  initialTSOS_.reset( new TrajectoryStateOnSurface(inner_TSOS) );
37 
38  // calculate the initial FreeTrajectoryState.
39  freeTS_.reset(stateWithError());
40 
41  // check transverse momentum
42  if(freeTS_->momentum().perp() < ptMin) { isValid_ = false; }
43  else {
44  // convert freeTS_ into a persistent TSOS on the outer surface
45  isValid_ = construct(); }
46 }
boost::shared_ptr< FreeTrajectoryState > freeTS_
boost::shared_ptr< TSOS > initialTSOS_
FreeTrajectoryState * stateWithError() const
void SeedFromNuclearInteraction::setMeasurements ( TangentHelix primHelix,
const TSOS inner_TSOS,
ConstRecHitPointer  ihit,
ConstRecHitPointer  ohit 
)

Fill all data members from 1 TSOS and 2 rec Hits and using the circle associated to the primary track as constraint.

Definition at line 48 of file SeedFromNuclearInteraction.cc.

References construct(), freeTS_, TrackerGeometry::idToDet(), initialTSOS_, innerHit_, isValid_, outerHit_, ptMin, stateWithError(), theHits, theTrackerGeom, and GeomDet::toGlobal().

48  {
49 
50  // delete pointer to TrackingRecHits
51  theHits.clear();
52 
53  // get the inner and outer transient TrackingRecHits
54  innerHit_ = ihit;
55  outerHit_ = ohit;
56 
57  GlobalPoint innerPos = theTrackerGeom->idToDet(innerHit_->geographicalId())->surface().toGlobal(innerHit_->localPosition());
58  GlobalPoint outerPos = theTrackerGeom->idToDet(outerHit_->geographicalId())->surface().toGlobal(outerHit_->localPosition());
59 
60  TangentHelix helix(thePrimaryHelix, outerPos, innerPos);
61 
62  theHits.push_back( innerHit_ );
63  theHits.push_back( outerHit_ );
64 
65  initialTSOS_.reset( new TrajectoryStateOnSurface(inner_TSOS) );
66 
67  // calculate the initial FreeTrajectoryState from the inner and outer TM assuming that the helix equation is already known.
68  freeTS_.reset(stateWithError(helix));
69 
70  if(freeTS_->momentum().perp() < ptMin) { isValid_ = false; }
71  else {
72  // convert freeTS_ into a persistent TSOS on the outer surface
73  isValid_ = construct(); }
74 }
const TrackerGeometry * theTrackerGeom
boost::shared_ptr< FreeTrajectoryState > freeTS_
GlobalPoint toGlobal(const Local2DPoint &lp) const
Conversion to the global R.F. from the R.F. of the GeomDet.
Definition: GeomDet.h:54
boost::shared_ptr< TSOS > initialTSOS_
const TrackerGeomDet * idToDet(DetId) const override
FreeTrajectoryState * stateWithError() const
FreeTrajectoryState * SeedFromNuclearInteraction::stateWithError ( ) const

Definition at line 76 of file SeedFromNuclearInteraction.cc.

References direction(), initialTSOS_, SurfaceOrientation::inner, and outerHitPosition().

Referenced by setMeasurements(), and trajectoryState().

76  {
77 
78  // Calculation of the helix assuming that the secondary track has the same direction
79  // than the primary track and pass through the inner and outer hits.
80  GlobalVector direction = initialTSOS_->globalDirection();
81  GlobalPoint inner = initialTSOS_->globalPosition();
82  TangentHelix helix(direction, inner, outerHitPosition());
83 
84  return stateWithError(helix);
85 }
PropagationDirection direction() const
boost::shared_ptr< TSOS > initialTSOS_
FreeTrajectoryState * stateWithError() const
FreeTrajectoryState * SeedFromNuclearInteraction::stateWithError ( TangentHelix helix) const

Definition at line 87 of file SeedFromNuclearInteraction.cc.

References TangentHelix::charge(), TangentHelix::directionAtVertex(), initialTSOS_, MagneticField::inTesla(), mag(), TangentHelix::rho(), makeMuonMisalignmentScenario::rot, rotationMatrix(), TangentHelix::vertexError(), TangentHelix::vertexPoint(), and z.

87  {
88 
89 // typedef TkRotation<float> Rotation;
90 
91  GlobalVector dirAtVtx = helix.directionAtVertex();
92  const MagneticField& mag = initialTSOS_->globalParameters().magneticField();
93 
94  // Get the global parameters of the trajectory
95  // we assume that the magnetic field at the vertex is equal to the magnetic field at the inner TM.
96  GlobalTrajectoryParameters gtp(helix.vertexPoint(), dirAtVtx , helix.charge(mag.inTesla(helix.vertexPoint()).z())/helix.rho(), 0, &mag);
97 
98  // Error matrix in a frame where z is in the direction of the track at the vertex
99  AlgebraicSymMatrix66 primaryError( initialTSOS_->cartesianError().matrix() );
100  double p_max = initialTSOS_->globalParameters().momentum().mag();
101  AlgebraicMatrix33 rot = this->rotationMatrix( dirAtVtx );
102 
103  AlgebraicMatrix66 globalRotation;
104  globalRotation.Place_at(rot,0,0);
105  globalRotation.Place_at(rot,3,3);
106  AlgebraicSymMatrix66 primaryErrorInNewFrame = ROOT::Math::Similarity(globalRotation, primaryError);
107 
108  AlgebraicSymMatrix66 secondaryErrorInNewFrame = AlgebraicMatrixID();
109  double p_perp_max = 2; // energy max of a secondary track emited perpendicularly to the
110  // primary track is +/- 2 GeV
111  secondaryErrorInNewFrame(0,0) = primaryErrorInNewFrame(0,0)+helix.vertexError()*p_perp_max/p_max;
112  secondaryErrorInNewFrame(1,1) = primaryErrorInNewFrame(1,1)+helix.vertexError()*p_perp_max/p_max;
113  secondaryErrorInNewFrame(2,2) = helix.vertexError() * helix.vertexError();
114  secondaryErrorInNewFrame(3,3) = p_perp_max*p_perp_max;
115  secondaryErrorInNewFrame(4,4) = p_perp_max*p_perp_max;
116  secondaryErrorInNewFrame(5,5) = p_max*p_max;
117 
118  AlgebraicSymMatrix66 secondaryError = ROOT::Math::SimilarityT(globalRotation, secondaryErrorInNewFrame);
119 
120  return new FreeTrajectoryState( gtp, CartesianTrajectoryError(secondaryError) );
121 }
GlobalVector directionAtVertex()
Definition: TangentHelix.cc:18
ROOT::Math::SMatrix< double, 6, 6, ROOT::Math::MatRepStd< double, 6, 6 > > AlgebraicMatrix66
T mag() const
The vector magnitude. Equivalent to sqrt(vec.mag2())
ROOT::Math::SMatrixIdentity AlgebraicMatrixID
ROOT::Math::SMatrix< double, 6, 6, ROOT::Math::MatRepSym< double, 6 > > AlgebraicSymMatrix66
double vertexError()
Definition: TangentHelix.h:42
virtual GlobalVector inTesla(const GlobalPoint &gp) const =0
Field value ad specified global point, in Tesla.
AlgebraicMatrix33 rotationMatrix(const GlobalVector &perp) const
int charge(float magz)
Definition: TangentHelix.h:36
boost::shared_ptr< TSOS > initialTSOS_
GlobalPoint vertexPoint() const
Definition: TangentHelix.h:30
double rho() const
Definition: TangentHelix.h:38
ROOT::Math::SMatrix< double, 3, 3, ROOT::Math::MatRepStd< double, 3, 3 > > AlgebraicMatrix33
PTrajectoryStateOnDet const& SeedFromNuclearInteraction::trajectoryState ( ) const
inline

Definition at line 40 of file SeedFromNuclearInteraction.h.

References pTraj, and stateWithError().

Referenced by TrajSeed().

40 { return pTraj; }
TrajectorySeed SeedFromNuclearInteraction::TrajSeed ( ) const
inline

Definition at line 50 of file SeedFromNuclearInteraction.h.

References direction(), hits(), and trajectoryState().

PropagationDirection direction() const
PTrajectoryStateOnDet const & trajectoryState() const
const TSOS& SeedFromNuclearInteraction::updatedTSOS ( ) const
inline

Definition at line 54 of file SeedFromNuclearInteraction.h.

References updatedTSOS_.

54 { return *updatedTSOS_; }
boost::shared_ptr< TSOS > updatedTSOS_

Member Data Documentation

boost::shared_ptr<FreeTrajectoryState> SeedFromNuclearInteraction::freeTS_
private
boost::shared_ptr<TSOS> SeedFromNuclearInteraction::initialTSOS_
private

Initial TSOS used as input

Definition at line 81 of file SeedFromNuclearInteraction.h.

Referenced by initialTSOS(), SeedFromNuclearInteraction(), setMeasurements(), and stateWithError().

ConstRecHitPointer SeedFromNuclearInteraction::innerHit_
private

Pointer to the hit of the inner TM

Definition at line 76 of file SeedFromNuclearInteraction.h.

Referenced by setMeasurements().

bool SeedFromNuclearInteraction::isValid_
private

check if the seed is valid

Definition at line 71 of file SeedFromNuclearInteraction.h.

Referenced by isValid(), SeedFromNuclearInteraction(), and setMeasurements().

ConstRecHitPointer SeedFromNuclearInteraction::outerHit_
private

Pointer to the outer hit

Definition at line 77 of file SeedFromNuclearInteraction.h.

Referenced by outerHit(), outerHitDetId(), outerHitPosition(), and setMeasurements().

double SeedFromNuclearInteraction::ptMin
private

Minimum transverse momentum of the seed

Definition at line 90 of file SeedFromNuclearInteraction.h.

Referenced by setMeasurements().

PTrajectoryStateOnDet SeedFromNuclearInteraction::pTraj
private

the final persistent TSOS

Definition at line 85 of file SeedFromNuclearInteraction.h.

Referenced by construct(), and trajectoryState().

ConstRecHitContainer SeedFromNuclearInteraction::theHits
private

all the hits to be used to update the

Definition at line 73 of file SeedFromNuclearInteraction.h.

Referenced by construct(), hits(), and setMeasurements().

const Propagator* SeedFromNuclearInteraction::thePropagator
private

Definition at line 92 of file SeedFromNuclearInteraction.h.

Referenced by construct().

const TrackerGeometry* SeedFromNuclearInteraction::theTrackerGeom
private

Definition at line 93 of file SeedFromNuclearInteraction.h.

Referenced by construct(), outerHitPosition(), and setMeasurements().

boost::shared_ptr<TSOS> SeedFromNuclearInteraction::updatedTSOS_
private

Final TSOS

Definition at line 79 of file SeedFromNuclearInteraction.h.

Referenced by construct(), SeedFromNuclearInteraction(), and updatedTSOS().