CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Protected Member Functions | Protected Attributes
SeedFromConsecutiveHitsCreator Class Reference

#include <SeedFromConsecutiveHitsCreator.h>

Inheritance diagram for SeedFromConsecutiveHitsCreator:
SeedCreator SeedFromConsecutiveHitsStraightLineCreator SeedFromConsecutiveHitsTripletOnlyCreator

Public Member Functions

 SeedFromConsecutiveHitsCreator (const edm::ParameterSet &cfg)
 
 SeedFromConsecutiveHitsCreator (const std::string &propagator="PropagatorWithMaterial", double seedMomentumForBOFF=-5.0)
 
virtual const TrajectorySeedtrajectorySeed (TrajectorySeedCollection &seedCollection, const SeedingHitSet &ordered, const TrackingRegion &region, const edm::EventSetup &es, const SeedComparitor *filter)
 
virtual ~SeedFromConsecutiveHitsCreator ()
 
- Public Member Functions inherited from SeedCreator
virtual ~SeedCreator ()
 

Protected Member Functions

virtual const TrajectorySeedbuildSeed (TrajectorySeedCollection &seedCollection, const SeedingHitSet &hits, const FreeTrajectoryState &fts, const edm::EventSetup &es, const SeedComparitor *filter) const
 
virtual bool checkHit (const TrajectoryStateOnSurface &tsos, const TransientTrackingRecHit::ConstRecHitPointer &hit, const edm::EventSetup &es, const SeedComparitor *filter) const
 
virtual CurvilinearTrajectoryError initialError (const TrackingRegion &region, float sinTheta) const
 
virtual GlobalTrajectoryParameters initialKinematic (const SeedingHitSet &hits, const TrackingRegion &region, const edm::EventSetup &es, const SeedComparitor *filter, bool &passesFilter) const
 
virtual
TransientTrackingRecHit::RecHitPointer 
refitHit (const TransientTrackingRecHit::ConstRecHitPointer &hit, const TrajectoryStateOnSurface &state) const
 

Protected Attributes

double theBOFFMomentum
 
std::string thePropagatorLabel
 

Detailed Description

Definition at line 10 of file SeedFromConsecutiveHitsCreator.h.

Constructor & Destructor Documentation

SeedFromConsecutiveHitsCreator::SeedFromConsecutiveHitsCreator ( const edm::ParameterSet cfg)
inline

Definition at line 13 of file SeedFromConsecutiveHitsCreator.h.

13  :
14  thePropagatorLabel(cfg.getParameter<std::string>("propagator")),
15  theBOFFMomentum(cfg.existsAs<double>("SeedMomentumForBOFF") ? cfg.getParameter<double>("SeedMomentumForBOFF") : 5.0)
16  {}
T getParameter(std::string const &) const
bool existsAs(std::string const &parameterName, bool trackiness=true) const
checks if a parameter exists as a given type
Definition: ParameterSet.h:187
SeedFromConsecutiveHitsCreator::SeedFromConsecutiveHitsCreator ( const std::string &  propagator = "PropagatorWithMaterial",
double  seedMomentumForBOFF = -5.0 
)
inline
virtual SeedFromConsecutiveHitsCreator::~SeedFromConsecutiveHitsCreator ( )
inlinevirtual

Definition at line 23 of file SeedFromConsecutiveHitsCreator.h.

23 {}

Member Function Documentation

const TrajectorySeed * SeedFromConsecutiveHitsCreator::buildSeed ( TrajectorySeedCollection seedCollection,
const SeedingHitSet hits,
const FreeTrajectoryState fts,
const edm::EventSetup es,
const SeedComparitor filter 
) const
protectedvirtual

Definition at line 109 of file SeedFromConsecutiveHitsCreator.cc.

References alongMomentum, checkHit(), SeedComparitor::compatible(), TrackingRecHit::geographicalId(), edm::EventSetup::get(), TrajectoryStateOnSurface::isValid(), trajectoryStateTransform::persistentState(), Propagator::propagate(), LargeD0_PixelPairStep_cff::propagator, edm::OwnVector< T, P >::push_back(), DetId::rawId(), refitHit(), SeedingHitSet::size(), evf::utils::state, thePropagatorLabel, patCandidatesForDimuonsSequences_cff::tracker, and KFUpdator::update().

Referenced by trajectorySeed().

115 {
116  // get tracker
118  es.get<TrackerDigiGeometryRecord>().get(tracker);
119 
120  // get propagator
121  edm::ESHandle<Propagator> propagatorHandle;
122  es.get<TrackingComponentsRecord>().get(thePropagatorLabel, propagatorHandle);
123  const Propagator* propagator = &(*propagatorHandle);
124 
125  // get updator
126  KFUpdator updator;
127 
128  // Now update initial state track using information from seed hits.
129 
130  TrajectoryStateOnSurface updatedState;
132 
133  const TrackingRecHit* hit = 0;
134  for ( unsigned int iHit = 0; iHit < hits.size(); iHit++) {
135  hit = hits[iHit]->hit();
136  TrajectoryStateOnSurface state = (iHit==0) ?
137  propagator->propagate(fts,tracker->idToDet(hit->geographicalId())->surface())
138  : propagator->propagate(updatedState, tracker->idToDet(hit->geographicalId())->surface());
139  if (!state.isValid()) return 0;
140 
142 
143  TransientTrackingRecHit::RecHitPointer newtth = refitHit( tth, state);
144 
145  if (!checkHit(state,newtth,es,filter)) return 0;
146 
147  updatedState = updator.update(state, *newtth);
148  if (!updatedState.isValid()) return 0;
149 
150  seedHits.push_back(newtth->hit()->clone());
151  }
152 
153 
154  PTrajectoryStateOnDet const & PTraj =
156  TrajectorySeed seed(PTraj,std::move(seedHits),alongMomentum);
157  if (filter != 0 && !filter->compatible(seed)) return 0;
158  seedCollection.push_back(seed);
159  return &seedCollection.back();
160 }
virtual TransientTrackingRecHit::RecHitPointer refitHit(const TransientTrackingRecHit::ConstRecHitPointer &hit, const TrajectoryStateOnSurface &state) const
PTrajectoryStateOnDet persistentState(const TrajectoryStateOnSurface &ts, unsigned int detid)
virtual bool compatible(const SeedingHitSet &hits, const TrackingRegion &region) const =0
uint32_t rawId() const
get the raw id
Definition: DetId.h:45
void push_back(D *&d)
Definition: OwnVector.h:273
virtual TrajectoryStateOnSurface propagate(const FreeTrajectoryState &, const Surface &) const
Definition: Propagator.cc:12
const T & get() const
Definition: EventSetup.h:55
char state
Definition: procUtils.cc:75
TrajectoryStateOnSurface update(const TrajectoryStateOnSurface &, const TransientTrackingRecHit &) const
Definition: KFUpdator.cc:10
virtual bool checkHit(const TrajectoryStateOnSurface &tsos, const TransientTrackingRecHit::ConstRecHitPointer &hit, const edm::EventSetup &es, const SeedComparitor *filter) const
unsigned int size() const
Definition: SeedingHitSet.h:31
DetId geographicalId() const
bool SeedFromConsecutiveHitsCreator::checkHit ( const TrajectoryStateOnSurface tsos,
const TransientTrackingRecHit::ConstRecHitPointer hit,
const edm::EventSetup es,
const SeedComparitor filter 
) const
protectedvirtual

Definition at line 170 of file SeedFromConsecutiveHitsCreator.cc.

References SeedComparitor::compatible().

Referenced by buildSeed().

175 {
176  return (filter ? filter->compatible(tsos,hit) : true);
177 }
virtual bool compatible(const SeedingHitSet &hits, const TrackingRegion &region) const =0
CurvilinearTrajectoryError SeedFromConsecutiveHitsCreator::initialError ( const TrackingRegion region,
float  sinTheta 
) const
protectedvirtual

Definition at line 83 of file SeedFromConsecutiveHitsCreator.cc.

References funct::C, GlobalErrorBase< T, ErrorWeightType >::cxx(), GlobalErrorBase< T, ErrorWeightType >::czz(), max(), TrackingRegion::originRBound(), TrackingRegion::originZBound(), PtMinSelector_cfg::ptMin, TrackingRegion::ptMin(), and funct::sqr().

Referenced by trajectorySeed().

84 {
85  // Set initial uncertainty on track parameters, using only P.V. constraint and no hit
86  // information.
87  GlobalError vertexErr( sqr(region.originRBound()), 0, sqr(region.originRBound()),
88  0, 0, sqr(region.originZBound()));
89 
90  float ptMin = region.ptMin();
91 
92 
93  AlgebraicSymMatrix55 C = ROOT::Math::SMatrixIdentity();
94 
95 // FIXME: minC00. Prevent apriori uncertainty in 1/P from being too small,
96 // to avoid instabilities.
97 // N.B. This parameter needs optimising ...
98  float sin2th = sqr(sinTheta);
99  float minC00 = 1.0;
100  C[0][0] = std::max(sin2th/sqr(ptMin), minC00);
101  float zErr = vertexErr.czz();
102  float transverseErr = vertexErr.cxx(); // assume equal cxx cyy
103  C[3][3] = transverseErr;
104  C[4][4] = zErr*sin2th + transverseErr*(1-sin2th);
105 
106  return CurvilinearTrajectoryError(C);
107 }
virtual float ptMin() const =0
minimal pt of interest
ROOT::Math::SMatrix< double, 5, 5, ROOT::Math::MatRepSym< double, 5 > > AlgebraicSymMatrix55
const T & max(const T &a, const T &b)
virtual float originRBound() const =0
bounds the particle vertex in the transverse plane
virtual float originZBound() const =0
bounds the particle vertex in the longitudinal plane
Square< F >::type sqr(const F &f)
Definition: Square.h:13
GlobalTrajectoryParameters SeedFromConsecutiveHitsCreator::initialKinematic ( const SeedingHitSet hits,
const TrackingRegion region,
const edm::EventSetup es,
const SeedComparitor filter,
bool &  passesFilter 
) const
protectedvirtual

Reimplemented in SeedFromConsecutiveHitsStraightLineCreator, and SeedFromConsecutiveHitsTripletOnlyCreator.

Definition at line 44 of file SeedFromConsecutiveHitsCreator.cc.

References abs, GlobalTrajectoryParameters::charge(), SeedComparitor::compatible(), alignCSCRings::e, edm::EventSetup::get(), GlobalTrajectoryParameters::momentum(), TrackingRegion::origin(), GlobalTrajectoryParameters::position(), theBOFFMomentum, and Vector3DBase< T, FrameTag >::unit().

Referenced by trajectorySeed().

50 {
52  es.get<IdealMagneticFieldRecord>().get(bfield);
53 
55 
58  const GlobalPoint& vertexPos = region.origin();
59 
60  FastHelix helix(tth2->globalPosition(), tth1->globalPosition(), vertexPos, es);
61  if (helix.isValid()) {
62  kine = helix.stateAtVertex().parameters();
63  } else {
64  GlobalVector initMomentum(tth2->globalPosition() - vertexPos);
65  initMomentum *= (100./initMomentum.perp());
66  kine = GlobalTrajectoryParameters(vertexPos, initMomentum, 1, &*bfield);
67  }
68 
69  bool isBOFF = ( std::abs(bfield->inTesla(GlobalPoint(0,0,0)).z()) < 1e-3 );
70  if (isBOFF && (theBOFFMomentum > 0)) {
72  kine.momentum().unit() * theBOFFMomentum,
73  kine.charge(),
74  &*bfield);
75  }
76  passesFilter = (filter ? filter->compatible(hits, kine, helix, region) : true);
77  return kine;
78 }
virtual GlobalPoint origin() const =0
#define abs(x)
Definition: mlp_lapack.h:159
virtual bool compatible(const SeedingHitSet &hits, const TrackingRegion &region) const =0
Vector3DBase unit() const
Definition: Vector3DBase.h:57
const T & get() const
Definition: EventSetup.h:55
TransientTrackingRecHit::RecHitPointer SeedFromConsecutiveHitsCreator::refitHit ( const TransientTrackingRecHit::ConstRecHitPointer hit,
const TrajectoryStateOnSurface state 
) const
protectedvirtual

Definition at line 162 of file SeedFromConsecutiveHitsCreator.cc.

Referenced by buildSeed().

165 {
166  return hit->clone(state);
167 }
const TrajectorySeed * SeedFromConsecutiveHitsCreator::trajectorySeed ( TrajectorySeedCollection seedCollection,
const SeedingHitSet ordered,
const TrackingRegion region,
const edm::EventSetup es,
const SeedComparitor filter 
)
virtual

Implements SeedCreator.

Definition at line 22 of file SeedFromConsecutiveHitsCreator.cc.

References buildSeed(), error, initialError(), initialKinematic(), GlobalTrajectoryParameters::momentum(), funct::sin(), SeedingHitSet::size(), and PV3DBase< T, PVType, FrameType >::theta().

28 {
29  if ( hits.size() < 2) return 0;
30 
31  bool passesFilter = true;
32  GlobalTrajectoryParameters kine = initialKinematic(hits, region, es, filter, passesFilter);
33  if (!passesFilter) return 0;
34 
35  float sinTheta = sin(kine.momentum().theta());
36 
37  CurvilinearTrajectoryError error = initialError(region, sinTheta);
38  FreeTrajectoryState fts(kine, error);
39 
40  return buildSeed(seedCollection,hits,fts,es,filter);
41 }
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
virtual const TrajectorySeed * buildSeed(TrajectorySeedCollection &seedCollection, const SeedingHitSet &hits, const FreeTrajectoryState &fts, const edm::EventSetup &es, const SeedComparitor *filter) const
Geom::Theta< T > theta() const
Definition: PV3DBase.h:74
virtual CurvilinearTrajectoryError initialError(const TrackingRegion &region, float sinTheta) const
virtual GlobalTrajectoryParameters initialKinematic(const SeedingHitSet &hits, const TrackingRegion &region, const edm::EventSetup &es, const SeedComparitor *filter, bool &passesFilter) const

Member Data Documentation

double SeedFromConsecutiveHitsCreator::theBOFFMomentum
protected
std::string SeedFromConsecutiveHitsCreator::thePropagatorLabel
protected

Definition at line 61 of file SeedFromConsecutiveHitsCreator.h.

Referenced by buildSeed().