CMS 3D CMS Logo

Public Member Functions | Protected Member Functions | Protected Attributes

SeedFromConsecutiveHitsCreator Class Reference

#include <SeedFromConsecutiveHitsCreator.h>

Inheritance diagram for SeedFromConsecutiveHitsCreator:
SeedCreator SeedFromConsecutiveHitsStraightLineCreator SeedFromConsecutiveHitsTripletOnlyCreator

List of all members.

Public Member Functions

 SeedFromConsecutiveHitsCreator (const edm::ParameterSet &cfg)
 SeedFromConsecutiveHitsCreator (const std::string &propagator="PropagatorWithMaterial", double seedMomentumForBOFF=-5.0, double aOriginTransverseErrorMultiplier=1.0, double aMinOneOverPtError=1.0)
virtual const TrajectorySeedtrajectorySeed (TrajectorySeedCollection &seedCollection, const SeedingHitSet &ordered, const TrackingRegion &region, const edm::EventSetup &es, const SeedComparitor *filter)
virtual ~SeedFromConsecutiveHitsCreator ()

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
double theMinOneOverPtError
double theOriginTransverseErrorMultiplier
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.

                                                              :
    thePropagatorLabel(cfg.getParameter<std::string>("propagator")),
    theBOFFMomentum(cfg.existsAs<double>("SeedMomentumForBOFF") ? cfg.getParameter<double>("SeedMomentumForBOFF") : 5.0),
    theOriginTransverseErrorMultiplier(cfg.existsAs<double>("OriginTransverseErrorMultiplier") ? cfg.getParameter<double>("OriginTransverseErrorMultiplier") : 1.0),
    theMinOneOverPtError(cfg.existsAs<double>("MinOneOverPtError") ? cfg.getParameter<double>("MinOneOverPtError") : 1.0)
      {}
SeedFromConsecutiveHitsCreator::SeedFromConsecutiveHitsCreator ( const std::string &  propagator = "PropagatorWithMaterial",
double  seedMomentumForBOFF = -5.0,
double  aOriginTransverseErrorMultiplier = 1.0,
double  aMinOneOverPtError = 1.0 
) [inline]

Definition at line 20 of file SeedFromConsecutiveHitsCreator.h.

    : thePropagatorLabel(propagator), theBOFFMomentum(seedMomentumForBOFF), 
    theOriginTransverseErrorMultiplier(aOriginTransverseErrorMultiplier), theMinOneOverPtError(aMinOneOverPtError) { }
virtual SeedFromConsecutiveHitsCreator::~SeedFromConsecutiveHitsCreator ( ) [inline, virtual]

Definition at line 26 of file SeedFromConsecutiveHitsCreator.h.

{}

Member Function Documentation

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

Definition at line 104 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(), thePropagatorLabel, patCandidatesForDimuonsSequences_cff::tracker, and KFUpdator::update().

Referenced by trajectorySeed().

{
  // get tracker
  edm::ESHandle<TrackerGeometry> tracker;
  es.get<TrackerDigiGeometryRecord>().get(tracker);
  
  // get propagator
  edm::ESHandle<Propagator>  propagatorHandle;
  es.get<TrackingComponentsRecord>().get(thePropagatorLabel, propagatorHandle);
  const Propagator*  propagator = &(*propagatorHandle);
  
  // get updator
  KFUpdator  updator;
  
  // Now update initial state track using information from seed hits.
  
  TrajectoryStateOnSurface updatedState;
  edm::OwnVector<TrackingRecHit> seedHits;
  
  const TrackingRecHit* hit = 0;
  for ( unsigned int iHit = 0; iHit < hits.size(); iHit++) {
    hit = hits[iHit]->hit();
    TrajectoryStateOnSurface state = (iHit==0) ? 
      propagator->propagate(fts,tracker->idToDet(hit->geographicalId())->surface())
      : propagator->propagate(updatedState, tracker->idToDet(hit->geographicalId())->surface());
    if (!state.isValid()) return 0;
    
    TransientTrackingRecHit::ConstRecHitPointer tth = hits[iHit]; 
    
    TransientTrackingRecHit::RecHitPointer newtth = refitHit( tth, state);
    
    if (!checkHit(state,newtth,es,filter)) return 0;

    updatedState =  updator.update(state, *newtth);
    if (!updatedState.isValid()) return 0;
    
    seedHits.push_back(newtth->hit()->clone());
  } 

  
  PTrajectoryStateOnDet const & PTraj = 
      trajectoryStateTransform::persistentState(updatedState, hit->geographicalId().rawId());
  TrajectorySeed seed(PTraj,std::move(seedHits),alongMomentum); 
  if (filter != 0 && !filter->compatible(seed)) return 0;
  seedCollection.push_back(seed);
  return &seedCollection.back();
}
bool SeedFromConsecutiveHitsCreator::checkHit ( const TrajectoryStateOnSurface tsos,
const TransientTrackingRecHit::ConstRecHitPointer hit,
const edm::EventSetup es,
const SeedComparitor filter 
) const [protected, virtual]

Definition at line 165 of file SeedFromConsecutiveHitsCreator.cc.

References SeedComparitor::compatible().

Referenced by buildSeed().

{ 
    return (filter ? filter->compatible(tsos,hit) : true); 
}
CurvilinearTrajectoryError SeedFromConsecutiveHitsCreator::initialError ( const TrackingRegion region,
float  sinTheta 
) const [protected, virtual]

Definition at line 83 of file SeedFromConsecutiveHitsCreator.cc.

References funct::C, max(), TrackingRegion::originRBound(), TrackingRegion::originZBound(), TrackingRegion::ptMin(), funct::sqr(), theMinOneOverPtError, and theOriginTransverseErrorMultiplier.

Referenced by trajectorySeed().

{
  // Set initial uncertainty on track parameters, using only P.V. constraint and no hit
  // information.
  AlgebraicSymMatrix55 C = ROOT::Math::SMatrixIdentity();

// FIXME: minC00. Prevent apriori uncertainty in 1/P from being too small, 
// to avoid instabilities.
// N.B. This parameter needs optimising ...
  // Probably OK based on quick study: KS 22/11/12.
  float sin2th = sqr(sinTheta);
  float minC00 = sqr(theMinOneOverPtError);
  C[0][0] = std::max(sin2th/sqr(region.ptMin()), minC00);
  float zErr = sqr(region.originZBound());
  float transverseErr = sqr(theOriginTransverseErrorMultiplier*region.originRBound());
  C[3][3] = transverseErr;
  C[4][4] = zErr*sin2th + transverseErr*(1-sin2th);

  return CurvilinearTrajectoryError(C);
}
GlobalTrajectoryParameters SeedFromConsecutiveHitsCreator::initialKinematic ( const SeedingHitSet hits,
const TrackingRegion region,
const edm::EventSetup es,
const SeedComparitor filter,
bool &  passesFilter 
) const [protected, virtual]

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().

{
  edm::ESHandle<MagneticField> bfield;
  es.get<IdealMagneticFieldRecord>().get(bfield);

  GlobalTrajectoryParameters kine;

  TransientTrackingRecHit::ConstRecHitPointer tth1 = hits[0];
  TransientTrackingRecHit::ConstRecHitPointer tth2 = hits[1];
  const GlobalPoint& vertexPos = region.origin();

  FastHelix helix(tth2->globalPosition(), tth1->globalPosition(), vertexPos, es);
  if (helix.isValid()) {
    kine = helix.stateAtVertex().parameters();
  } else {
    GlobalVector initMomentum(tth2->globalPosition() - vertexPos);
    initMomentum *= (100./initMomentum.perp()); 
    kine = GlobalTrajectoryParameters(vertexPos, initMomentum, 1, &*bfield);
  } 

  bool isBOFF = ( std::abs(bfield->inTesla(GlobalPoint(0,0,0)).z()) < 1e-3 );
  if (isBOFF && (theBOFFMomentum > 0)) {
    kine = GlobalTrajectoryParameters(kine.position(),
                              kine.momentum().unit() * theBOFFMomentum,
                              kine.charge(),
                              &*bfield);
  }
  passesFilter = (filter ? filter->compatible(hits, kine, helix, region) : true); 
  return kine;
}
TransientTrackingRecHit::RecHitPointer SeedFromConsecutiveHitsCreator::refitHit ( const TransientTrackingRecHit::ConstRecHitPointer hit,
const TrajectoryStateOnSurface state 
) const [protected, virtual]

Definition at line 157 of file SeedFromConsecutiveHitsCreator.cc.

Referenced by buildSeed().

{
  return hit->clone(state);
}
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().

{
  if ( hits.size() < 2) return 0;

  bool passesFilter = true;
  GlobalTrajectoryParameters kine = initialKinematic(hits, region, es, filter, passesFilter);
  if (!passesFilter) return 0;

  float sinTheta = sin(kine.momentum().theta());

  CurvilinearTrajectoryError error = initialError(region,  sinTheta);
  FreeTrajectoryState fts(kine, error);

  return buildSeed(seedCollection,hits,fts,es,filter); 
}

Member Data Documentation

Definition at line 67 of file SeedFromConsecutiveHitsCreator.h.

Referenced by initialError().

Definition at line 66 of file SeedFromConsecutiveHitsCreator.h.

Referenced by initialError().

Definition at line 64 of file SeedFromConsecutiveHitsCreator.h.

Referenced by buildSeed().