CMS 3D CMS Logo

List of all members | Classes | Public Member Functions | Static Public Member Functions | Private Member Functions | Static Private Member Functions | Private Attributes | Static Private Attributes
TrajSeedMatcher Class Reference

#include <TrajSeedMatcher.h>

Classes

struct  MatchInfo
 
class  MatchingCuts
 
class  MatchingCutsV1
 
class  MatchingCutsV2
 
class  SCHitMatch
 
class  SeedWithInfo
 

Public Member Functions

std::vector< TrajSeedMatcher::SeedWithInfocompatibleSeeds (const TrajectorySeedCollection &seeds, const GlobalPoint &candPos, const GlobalPoint &vprim, const float energy)
 
void doEventSetup (const edm::EventSetup &iSetup)
 
void setMeasTkEvtHandle (edm::Handle< MeasurementTrackerEvent > handle)
 
 TrajSeedMatcher (const edm::ParameterSet &pset)
 
 ~TrajSeedMatcher ()=default
 

Static Public Member Functions

static edm::ParameterSetDescription makePSetDescription ()
 

Private Member Functions

void clearCache ()
 
const MagneticFieldgetMagField (const GlobalPoint &point) const
 
size_t getNrHitsRequired (const int nrValidLayers) const
 
int getNrValidLayersAlongTraj (const SCHitMatch &hit1, const SCHitMatch &hit2, const GlobalPoint &candPos, const GlobalPoint &vprim, const float energy, const int charge)
 
int getNrValidLayersAlongTraj (const DetId &hitId, const TrajectoryStateOnSurface &hitTrajState) const
 
const TrajectoryStateOnSurfacegetTrajStateFromPoint (const TrackingRecHit &hit, const FreeTrajectoryState &initialState, const GlobalPoint &point, const PropagatorWithMaterial &propagator)
 
const TrajectoryStateOnSurfacegetTrajStateFromVtx (const TrackingRecHit &hit, const TrajectoryStateOnSurface &initialState, const PropagatorWithMaterial &propagator)
 
bool layerHasValidHits (const DetLayer &layer, const TrajectoryStateOnSurface &hitSurState, const Propagator &propToLayerFromState) const
 
TrajectoryStateOnSurface makeTrajStateOnSurface (const GlobalPoint &pos, const GlobalPoint &vtx, const float energy, const int charge) const
 
TrajSeedMatcher::SCHitMatch match2ndToNthHit (const TrajectorySeed &seed, const FreeTrajectoryState &trajState, const size_t hitNr, const GlobalPoint &prevHitPos, const GlobalPoint &vtxPos, const PropagatorWithMaterial &propagator)
 
TrajSeedMatcher::SCHitMatch matchFirstHit (const TrajectorySeed &seed, const TrajectoryStateOnSurface &trajState, const GlobalPoint &vtxPos, const PropagatorWithMaterial &propagator)
 
bool passesMatchSel (const SCHitMatch &hit, const size_t hitNr) const
 
bool passTrajPreSel (const GlobalPoint &hitPos, const GlobalPoint &candPos) const
 
std::vector< SCHitMatchprocessSeed (const TrajectorySeed &seed, const GlobalPoint &candPos, const GlobalPoint &vprim, const float energy, const TrajectoryStateOnSurface &initialTrajState)
 

Static Private Member Functions

static float getZVtxFromExtrapolation (const GlobalPoint &primeVtxPos, const GlobalPoint &hitPos, const GlobalPoint &candPos)
 

Private Attributes

std::unique_ptr< PropagatorWithMaterialbackwardPropagator_
 
unsigned long long cacheIDMagField_
 
edm::ESHandle< DetLayerGeometrydetLayerGeom_
 
std::string detLayerGeomLabel_
 
bool enableHitSkipping_
 
std::unique_ptr< PropagatorWithMaterialforwardPropagator_
 
edm::ESHandle< MagneticFieldmagField_
 
edm::ESHandle< MagneticFieldmagFieldParam_
 
std::vector< std::unique_ptr< MatchingCuts > > matchingCuts_
 
edm::Handle< MeasurementTrackerEventmeasTkEvt_
 
const std::vector< unsigned int > minNrHits_
 
const std::vector< int > minNrHitsValidLayerBins_
 
edm::ESHandle< NavigationSchoolnavSchool_
 
std::string navSchoolLabel_
 
std::string paramMagFieldLabel_
 
bool requireExactMatchCount_
 
IntGlobalPointPairUnorderedMap< TrajectoryStateOnSurfacetrajStateFromPointNegChargeCache_
 
IntGlobalPointPairUnorderedMap< TrajectoryStateOnSurfacetrajStateFromPointPosChargeCache_
 
std::unordered_map< int, TrajectoryStateOnSurfacetrajStateFromVtxNegChargeCache_
 
std::unordered_map< int, TrajectoryStateOnSurfacetrajStateFromVtxPosChargeCache_
 
bool useParamMagFieldIfDefined_
 
bool useRecoVertex_
 

Static Private Attributes

static float kElectronMass_ = 0.000511
 
static float kPhiCut_ = -0.801144
 

Detailed Description

Definition at line 48 of file TrajSeedMatcher.h.

Constructor & Destructor Documentation

TrajSeedMatcher::TrajSeedMatcher ( const edm::ParameterSet pset)
explicit

Definition at line 23 of file TrajSeedMatcher.cc.

References L1TMuonDQMOffline_cfi::cutsPSets, Exception, edm::ParameterSet::getParameter(), matchingCuts_, minNrHits_, minNrHitsValidLayerBins_, and BeamSplash_cfg::version.

24  : cacheIDMagField_(0),
25  paramMagFieldLabel_(pset.getParameter<std::string>("paramMagField")),
26  navSchoolLabel_(pset.getParameter<std::string>("navSchool")),
27  detLayerGeomLabel_(pset.getParameter<std::string>("detLayerGeom")),
28  useRecoVertex_(pset.getParameter<bool>("useRecoVertex")),
29  enableHitSkipping_(pset.getParameter<bool>("enableHitSkipping")),
30  requireExactMatchCount_(pset.getParameter<bool>("requireExactMatchCount")),
31  useParamMagFieldIfDefined_(pset.getParameter<bool>("useParamMagFieldIfDefined")),
32  minNrHits_(pset.getParameter<std::vector<unsigned int> >("minNrHits")),
33  minNrHitsValidLayerBins_(pset.getParameter<std::vector<int> >("minNrHitsValidLayerBins")) {
34  const auto cutsPSets = pset.getParameter<std::vector<edm::ParameterSet> >("matchingCuts");
35  for (const auto& cutPSet : cutsPSets) {
36  int version = cutPSet.getParameter<int>("version");
37  switch (version) {
38  case 1:
39  matchingCuts_.emplace_back(std::make_unique<MatchingCutsV1>(cutPSet));
40  break;
41  case 2:
42  matchingCuts_.emplace_back(std::make_unique<MatchingCutsV2>(cutPSet));
43  break;
44  default:
45  throw cms::Exception("InvalidConfig") << " Error TrajSeedMatcher::TrajSeedMatcher pixel match cuts version "
46  << version << " not recognised" << std::endl;
47  }
48  }
49 
50  if (minNrHitsValidLayerBins_.size() + 1 != minNrHits_.size()) {
51  throw cms::Exception("InvalidConfig")
52  << " TrajSeedMatcher::TrajSeedMatcher minNrHitsValidLayerBins should be 1 less than minNrHits when its "
53  << minNrHitsValidLayerBins_.size() << " vs " << minNrHits_.size();
54  }
55 }
T getParameter(std::string const &) const
bool useParamMagFieldIfDefined_
const std::vector< int > minNrHitsValidLayerBins_
unsigned long long cacheIDMagField_
std::vector< std::unique_ptr< MatchingCuts > > matchingCuts_
std::string paramMagFieldLabel_
std::string navSchoolLabel_
std::string detLayerGeomLabel_
const std::vector< unsigned int > minNrHits_
TrajSeedMatcher::~TrajSeedMatcher ( )
default

Member Function Documentation

void TrajSeedMatcher::clearCache ( )
private

Definition at line 301 of file TrajSeedMatcher.cc.

References trajStateFromPointNegChargeCache_, trajStateFromPointPosChargeCache_, trajStateFromVtxNegChargeCache_, and trajStateFromVtxPosChargeCache_.

Referenced by compatibleSeeds().

301  {
306 }
IntGlobalPointPairUnorderedMap< TrajectoryStateOnSurface > trajStateFromPointNegChargeCache_
IntGlobalPointPairUnorderedMap< TrajectoryStateOnSurface > trajStateFromPointPosChargeCache_
std::unordered_map< int, TrajectoryStateOnSurface > trajStateFromVtxPosChargeCache_
std::unordered_map< int, TrajectoryStateOnSurface > trajStateFromVtxNegChargeCache_
std::vector< TrajSeedMatcher::SeedWithInfo > TrajSeedMatcher::compatibleSeeds ( const TrajectorySeedCollection seeds,
const GlobalPoint candPos,
const GlobalPoint vprim,
const float  energy 
)

Definition at line 110 of file TrajSeedMatcher.cc.

References backwardPropagator_, clearCache(), Exception, forwardPropagator_, getNrHitsRequired(), getNrValidLayersAlongTraj(), edm::ESHandleBase::isValid(), magField_, makeTrajStateOnSurface(), SiStripPI::max, processSeed(), requireExactMatchCount_, and SurveyInfoScenario_cff::seed.

Referenced by ElectronNHitSeedProducer::produce().

113  {
115  throw cms::Exception("LogicError") << __FUNCTION__
116  << " can not make pixel seeds as event setup has not properly been called";
117  }
118 
119  clearCache();
120 
121  std::vector<SeedWithInfo> matchedSeeds;
122 
123  //these are super expensive functions
124  TrajectoryStateOnSurface scTrajStateOnSurfNeg = makeTrajStateOnSurface(candPos, vprim, energy, -1);
125  TrajectoryStateOnSurface scTrajStateOnSurfPos = makeTrajStateOnSurface(candPos, vprim, energy, 1);
126 
127  for (const auto& seed : seeds) {
128  std::vector<SCHitMatch> matchedHitsNeg = processSeed(seed, candPos, vprim, energy, scTrajStateOnSurfNeg);
129  std::vector<SCHitMatch> matchedHitsPos = processSeed(seed, candPos, vprim, energy, scTrajStateOnSurfPos);
130 
131  int nrValidLayersPos = 0;
132  int nrValidLayersNeg = 0;
133  if (matchedHitsNeg.size() >= 2) {
134  nrValidLayersNeg = getNrValidLayersAlongTraj(matchedHitsNeg[0], matchedHitsNeg[1], candPos, vprim, energy, -1);
135  }
136  if (matchedHitsPos.size() >= 2) {
137  nrValidLayersPos = getNrValidLayersAlongTraj(matchedHitsPos[0], matchedHitsPos[1], candPos, vprim, energy, +1);
138  }
139 
140  int nrValidLayers = std::max(nrValidLayersNeg, nrValidLayersPos);
141  size_t nrHitsRequired = getNrHitsRequired(nrValidLayers);
142  bool matchCountPasses;
144  // If the input seed collection is not cross-cleaned, an exact match is necessary to
145  // prevent redundant seeds.
146  matchCountPasses = matchedHitsNeg.size() == nrHitsRequired || matchedHitsPos.size() == nrHitsRequired;
147  } else {
148  matchCountPasses = matchedHitsNeg.size() >= nrHitsRequired || matchedHitsPos.size() >= nrHitsRequired;
149  }
150  if (matchCountPasses) {
151  matchedSeeds.push_back({seed, matchedHitsPos, matchedHitsNeg, nrValidLayers});
152  }
153  }
154  return matchedSeeds;
155 }
TrajectoryStateOnSurface makeTrajStateOnSurface(const GlobalPoint &pos, const GlobalPoint &vtx, const float energy, const int charge) const
std::unique_ptr< PropagatorWithMaterial > forwardPropagator_
edm::ESHandle< MagneticField > magField_
size_t getNrHitsRequired(const int nrValidLayers) const
std::vector< SCHitMatch > processSeed(const TrajectorySeed &seed, const GlobalPoint &candPos, const GlobalPoint &vprim, const float energy, const TrajectoryStateOnSurface &initialTrajState)
bool isValid() const
Definition: ESHandle.h:44
int getNrValidLayersAlongTraj(const SCHitMatch &hit1, const SCHitMatch &hit2, const GlobalPoint &candPos, const GlobalPoint &vprim, const float energy, const int charge)
std::unique_ptr< PropagatorWithMaterial > backwardPropagator_
void TrajSeedMatcher::doEventSetup ( const edm::EventSetup iSetup)

Definition at line 97 of file TrajSeedMatcher.cc.

References alongMomentum, backwardPropagator_, edm::eventsetup::EventSetupRecord::cacheIdentifier(), cacheIDMagField_, detLayerGeom_, detLayerGeomLabel_, forwardPropagator_, edm::EventSetup::get(), kElectronMass_, magField_, magFieldParam_, navSchool_, navSchoolLabel_, oppositeToMomentum, paramMagFieldLabel_, and useParamMagFieldIfDefined_.

Referenced by ElectronNHitSeedProducer::produce().

97  {
99  iSetup.get<IdealMagneticFieldRecord>().get(magField_);
102  cacheIDMagField_ = iSetup.get<IdealMagneticFieldRecord>().cacheIdentifier();
103  forwardPropagator_ = std::make_unique<PropagatorWithMaterial>(alongMomentum, kElectronMass_, &*(magField_));
104  backwardPropagator_ = std::make_unique<PropagatorWithMaterial>(oppositeToMomentum, kElectronMass_, &*(magField_));
105  }
108 }
unsigned long long cacheIdentifier() const
bool useParamMagFieldIfDefined_
edm::ESHandle< MagneticField > magFieldParam_
edm::ESHandle< DetLayerGeometry > detLayerGeom_
std::unique_ptr< PropagatorWithMaterial > forwardPropagator_
edm::ESHandle< NavigationSchool > navSchool_
unsigned long long cacheIDMagField_
edm::ESHandle< MagneticField > magField_
std::string paramMagFieldLabel_
std::string navSchoolLabel_
static float kElectronMass_
T get() const
Definition: EventSetup.h:73
std::string detLayerGeomLabel_
std::unique_ptr< PropagatorWithMaterial > backwardPropagator_
const MagneticField& TrajSeedMatcher::getMagField ( const GlobalPoint point) const
inlineprivate

Definition at line 254 of file TrajSeedMatcher.h.

References MagneticField::isDefined().

Referenced by getNrValidLayersAlongTraj(), makeTrajStateOnSurface(), and processSeed().

254  {
256  }
bool useParamMagFieldIfDefined_
edm::ESHandle< MagneticField > magFieldParam_
edm::ESHandle< MagneticField > magField_
virtual bool isDefined(const GlobalPoint &) const
True if the point is within the region where the concrete field.
Definition: MagneticField.h:40
size_t TrajSeedMatcher::getNrHitsRequired ( const int  nrValidLayers) const
private

Definition at line 385 of file TrajSeedMatcher.cc.

References minNrHits_, and minNrHitsValidLayerBins_.

Referenced by compatibleSeeds().

385  {
386  for (size_t binNr = 0; binNr < minNrHitsValidLayerBins_.size(); binNr++) {
387  if (nrValidLayers < minNrHitsValidLayerBins_[binNr])
388  return minNrHits_[binNr];
389  }
390  return minNrHits_.back();
391 }
const std::vector< int > minNrHitsValidLayerBins_
const std::vector< unsigned int > minNrHits_
int TrajSeedMatcher::getNrValidLayersAlongTraj ( const SCHitMatch hit1,
const SCHitMatch hit2,
const GlobalPoint candPos,
const GlobalPoint vprim,
const float  energy,
const int  charge 
)
private

Definition at line 317 of file TrajSeedMatcher.cc.

References ALCARECOTkAlJpsiMuMu_cff::charge, HCALHighEnergyHPDFilter_cfi::energy, forwardPropagator_, TrackingRecHit::geographicalId(), FTSFromVertexToPointFactory::get(), getMagField(), getTrajStateFromPoint(), getZVtxFromExtrapolation(), TrajSeedMatcher::SCHitMatch::hit(), TrajSeedMatcher::SCHitMatch::hitPos(), useRecoVertex_, bphysicsOniaDQM_cfi::vertex, PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), PV3DBase< T, PVType, FrameType >::z(), and HLT_FULL_cff::zVertex.

Referenced by compatibleSeeds().

322  {
323  double zVertex = useRecoVertex_ ? vprim.z() : getZVtxFromExtrapolation(vprim, hit1.hitPos(), candPos);
324  GlobalPoint vertex(vprim.x(), vprim.y(), zVertex);
325 
326  FreeTrajectoryState firstHitFreeTraj =
327  FTSFromVertexToPointFactory::get(getMagField(hit1.hitPos()), hit1.hitPos(), vertex, energy, charge);
328  const TrajectoryStateOnSurface& secondHitTraj =
329  getTrajStateFromPoint(*hit2.hit(), firstHitFreeTraj, hit1.hitPos(), *forwardPropagator_);
330  return getNrValidLayersAlongTraj(hit2.hit()->geographicalId(), secondHitTraj);
331 }
static FreeTrajectoryState get(MagneticField const &magField, GlobalPoint const &xmeas, GlobalPoint const &xvert, float momentum, TrackCharge charge)
const MagneticField & getMagField(const GlobalPoint &point) const
std::unique_ptr< PropagatorWithMaterial > forwardPropagator_
T y() const
Definition: PV3DBase.h:60
static float getZVtxFromExtrapolation(const GlobalPoint &primeVtxPos, const GlobalPoint &hitPos, const GlobalPoint &candPos)
const TrajectoryStateOnSurface & getTrajStateFromPoint(const TrackingRecHit &hit, const FreeTrajectoryState &initialState, const GlobalPoint &point, const PropagatorWithMaterial &propagator)
T z() const
Definition: PV3DBase.h:61
int getNrValidLayersAlongTraj(const SCHitMatch &hit1, const SCHitMatch &hit2, const GlobalPoint &candPos, const GlobalPoint &vprim, const float energy, const int charge)
T x() const
Definition: PV3DBase.h:59
int TrajSeedMatcher::getNrValidLayersAlongTraj ( const DetId hitId,
const TrajectoryStateOnSurface hitTrajState 
) const
private

Definition at line 333 of file TrajSeedMatcher.cc.

References alongMomentum, backwardPropagator_, NavigationSchool::compatibleLayers(), detLayerGeom_, forwardPropagator_, TrajectoryStateOnSurface::freeState(), DetLayerGeometry::idToLayer(), GeomDetEnumerators::isTrackerPixel(), layerHasValidHits(), navSchool_, and oppositeToMomentum.

333  {
334  const DetLayer* detLayer = detLayerGeom_->idToLayer(hitId);
335  if (detLayer == nullptr)
336  return 0;
337 
338  const FreeTrajectoryState& hitFreeState = *hitTrajState.freeState();
339  const std::vector<const DetLayer*> inLayers =
340  navSchool_->compatibleLayers(*detLayer, hitFreeState, oppositeToMomentum);
341  const std::vector<const DetLayer*> outLayers = navSchool_->compatibleLayers(*detLayer, hitFreeState, alongMomentum);
342 
343  int nrValidLayers = 1; //because our current hit is also valid and wont be included in the count otherwise
344  int nrPixInLayers = 0;
345  int nrPixOutLayers = 0;
346  for (auto layer : inLayers) {
347  if (GeomDetEnumerators::isTrackerPixel(layer->subDetector())) {
348  nrPixInLayers++;
349  if (layerHasValidHits(*layer, hitTrajState, *backwardPropagator_))
350  nrValidLayers++;
351  }
352  }
353  for (auto layer : outLayers) {
354  if (GeomDetEnumerators::isTrackerPixel(layer->subDetector())) {
355  nrPixOutLayers++;
356  if (layerHasValidHits(*layer, hitTrajState, *forwardPropagator_))
357  nrValidLayers++;
358  }
359  }
360  return nrValidLayers;
361 }
edm::ESHandle< DetLayerGeometry > detLayerGeom_
std::unique_ptr< PropagatorWithMaterial > forwardPropagator_
edm::ESHandle< NavigationSchool > navSchool_
FreeTrajectoryState const * freeState(bool withErrors=true) const
std::vector< const DetLayer * > compatibleLayers(const DetLayer &detLayer, Args &&...args) const
Returns all layers compatible.
virtual const DetLayer * idToLayer(const DetId &detId) const
std::unique_ptr< PropagatorWithMaterial > backwardPropagator_
bool layerHasValidHits(const DetLayer &layer, const TrajectoryStateOnSurface &hitSurState, const Propagator &propToLayerFromState) const
bool isTrackerPixel(GeomDetEnumerators::SubDetector m)
const TrajectoryStateOnSurface & TrajSeedMatcher::getTrajStateFromPoint ( const TrackingRecHit hit,
const FreeTrajectoryState initialState,
const GlobalPoint point,
const PropagatorWithMaterial propagator 
)
private

Definition at line 240 of file TrajSeedMatcher.cc.

References FreeTrajectoryState::charge(), TrackingRecHit::det(), GeomDet::gdetIndex(), crabWrapper::key, point, Propagator::propagate(), GeomDet::surface(), trajStateFromPointNegChargeCache_, trajStateFromPointPosChargeCache_, and heppy_batch::val.

Referenced by getNrValidLayersAlongTraj(), and match2ndToNthHit().

243  {
244  auto& trajStateFromPointCache =
246 
247  auto key = std::make_pair(hit.det()->gdetIndex(), point);
248  auto res = trajStateFromPointCache.find(key);
249  if (res != trajStateFromPointCache.end())
250  return res->second;
251  else { //doesnt exist, need to make it
252  //FIXME: check for efficiency
253  auto val = trajStateFromPointCache.emplace(key, propagator.propagate(initialState, hit.det()->surface()));
254  return val.first->second;
255  }
256 }
IntGlobalPointPairUnorderedMap< TrajectoryStateOnSurface > trajStateFromPointNegChargeCache_
int gdetIndex() const
Definition: GeomDet.h:87
IntGlobalPointPairUnorderedMap< TrajectoryStateOnSurface > trajStateFromPointPosChargeCache_
TrackCharge charge() const
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:37
Definition: Electron.h:6
const GeomDet * det() const
TrajectoryStateOnSurface propagate(STA const &state, SUR const &surface) const
Definition: Propagator.h:50
*vegas h *****************************************************used in the default bin number in original ***version of VEGAS is ***a higher bin number might help to derive a more precise ***grade subtle point
Definition: invegas.h:5
const TrajectoryStateOnSurface & TrajSeedMatcher::getTrajStateFromVtx ( const TrackingRecHit hit,
const TrajectoryStateOnSurface initialState,
const PropagatorWithMaterial propagator 
)
private

Definition at line 223 of file TrajSeedMatcher.cc.

References TrajectoryStateOnSurface::charge(), TrackingRecHit::det(), GeomDet::gdetIndex(), crabWrapper::key, Propagator::propagate(), GeomDet::surface(), trajStateFromVtxNegChargeCache_, trajStateFromVtxPosChargeCache_, and heppy_batch::val.

Referenced by matchFirstHit().

225  {
226  auto& trajStateFromVtxCache =
228 
229  auto key = hit.det()->gdetIndex();
230  auto res = trajStateFromVtxCache.find(key);
231  if (res != trajStateFromVtxCache.end())
232  return res->second;
233  else { //doesnt exist, need to make it
234  //FIXME: check for efficiency
235  auto val = trajStateFromVtxCache.emplace(key, propagator.propagate(initialState, hit.det()->surface()));
236  return val.first->second;
237  }
238 }
int gdetIndex() const
Definition: GeomDet.h:87
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:37
Definition: Electron.h:6
const GeomDet * det() const
std::unordered_map< int, TrajectoryStateOnSurface > trajStateFromVtxPosChargeCache_
TrajectoryStateOnSurface propagate(STA const &state, SUR const &surface) const
Definition: Propagator.h:50
std::unordered_map< int, TrajectoryStateOnSurface > trajStateFromVtxNegChargeCache_
float TrajSeedMatcher::getZVtxFromExtrapolation ( const GlobalPoint primeVtxPos,
const GlobalPoint hitPos,
const GlobalPoint candPos 
)
staticprivate

Definition at line 202 of file TrajSeedMatcher.cc.

References p1, p2, mathSSE::sqrt(), x, PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

Referenced by getNrValidLayersAlongTraj(), and processSeed().

204  {
205  auto sq = [](float x) { return x * x; };
206  auto calRDiff = [sq](const GlobalPoint& p1, const GlobalPoint& p2) {
207  return std::sqrt(sq(p2.x() - p1.x()) + sq(p2.y() - p1.y()));
208  };
209  const double r1Diff = calRDiff(primeVtxPos, hitPos);
210  const double r2Diff = calRDiff(hitPos, candPos);
211  return hitPos.z() - r1Diff * (candPos.z() - hitPos.z()) / r2Diff;
212 }
T y() const
Definition: PV3DBase.h:60
T sqrt(T t)
Definition: SSEVec.h:19
T z() const
Definition: PV3DBase.h:61
double p2[4]
Definition: TauolaWrapper.h:90
double p1[4]
Definition: TauolaWrapper.h:89
T x() const
Definition: PV3DBase.h:59
bool TrajSeedMatcher::layerHasValidHits ( const DetLayer layer,
const TrajectoryStateOnSurface hitSurState,
const Propagator propToLayerFromState 
) const
private

Definition at line 363 of file TrajSeedMatcher.cc.

References GeometricSearchDet::compatibleDets(), MeasurementTrackerEvent::idToDet(), MeasurementDetWithData::isActive(), and measTkEvt_.

Referenced by getNrValidLayersAlongTraj().

365  {
366  //FIXME: do not hardcode with werid magic numbers stolen from ancient tracking code
367  //its taken from https://cmssdt.cern.ch/dxr/CMSSW/source/RecoTracker/TrackProducer/interface/TrackProducerBase.icc#165
368  //which inspires this code
369  Chi2MeasurementEstimator estimator(30., -3.0, 0.5, 2.0, 0.5, 1.e12); // same as defauts....
370 
371  const std::vector<GeometricSearchDet::DetWithState>& detWithState =
372  layer.compatibleDets(hitSurState, propToLayerFromState, estimator);
373  if (detWithState.empty())
374  return false;
375  else {
376  DetId id = detWithState.front().first->geographicalId();
378  if (measDet.isActive())
379  return true;
380  else
381  return false;
382  }
383 }
MeasurementDetWithData idToDet(const DetId &id) const
Previous MeasurementDetSystem interface.
virtual std::vector< DetWithState > compatibleDets(const TrajectoryStateOnSurface &startingState, const Propagator &prop, const MeasurementEstimator &est) const
Definition: DetId.h:17
edm::Handle< MeasurementTrackerEvent > measTkEvt_
edm::ParameterSetDescription TrajSeedMatcher::makePSetDescription ( )
static

Definition at line 57 of file TrajSeedMatcher.cc.

References edm::ParameterSetDescription::add(), edm::ParameterSet::addParameter(), edm::ParameterSetDescription::addVPSet(), l1GtPatternGenerator_cfi::defaults, eostools::move(), or, and AlCaHLTBitMon_QueryRunRegistry::string.

Referenced by ElectronNHitSeedProducer::fillDescriptions().

57  {
59  desc.add<bool>("useRecoVertex", false);
60  desc.add<bool>("enableHitSkipping", false);
61  desc.add<bool>("requireExactMatchCount", true);
62  desc.add<bool>("useParamMagFieldIfDefined", true);
63  desc.add<std::string>("paramMagField", "ParabolicMf");
64  desc.add<std::string>("navSchool", "SimpleNavigationSchool");
65  desc.add<std::string>("detLayerGeom", "hltESPGlobalDetLayerGeometry");
66  desc.add<std::vector<int> >("minNrHitsValidLayerBins", {4});
67  desc.add<std::vector<unsigned int> >("minNrHits", {2, 3});
68 
70  auto cutDescCases = 1 >> (edm::ParameterDescription<double>("dPhiMax", 0.04, true) and
71  edm::ParameterDescription<double>("dRZMax", 0.09, true) and
72  edm::ParameterDescription<double>("dRZMaxLowEtThres", 20., true) and
73  edm::ParameterDescription<std::vector<double> >(
74  "dRZMaxLowEtEtaBins", std::vector<double>{1., 1.5}, true) and
75  edm::ParameterDescription<std::vector<double> >(
76  "dRZMaxLowEt", std::vector<double>{0.09, 0.15, 0.09}, true)) or
77  2 >> (edm::ParameterDescription<std::vector<double> >("dPhiMaxHighEt", {0.003}, true) and
78  edm::ParameterDescription<std::vector<double> >("dPhiMaxHighEtThres", {0.0}, true) and
79  edm::ParameterDescription<std::vector<double> >("dPhiMaxLowEtGrad", {0.0}, true) and
80  edm::ParameterDescription<std::vector<double> >("dRZMaxHighEt", {0.005}, true) and
81  edm::ParameterDescription<std::vector<double> >("dRZMaxHighEtThres", {30}, true) and
82  edm::ParameterDescription<std::vector<double> >("dRZMaxLowEtGrad", {-0.002}, true) and
83  edm::ParameterDescription<std::vector<double> >("etaBins", {}, true));
84  cutsDesc.ifValue(edm::ParameterDescription<int>("version", 1, true), std::move(cutDescCases));
85 
87  defaults.addParameter<double>("dPhiMax", 0.04);
88  defaults.addParameter<double>("dRZMax", 0.09);
89  defaults.addParameter<double>("dRZMaxLowEtThres", 0.09);
90  defaults.addParameter<std::vector<double> >("dRZMaxLowEtEtaBins", std::vector<double>{1., 1.5});
91  defaults.addParameter<std::vector<double> >("dRZMaxLowEt", std::vector<double>{0.09, 0.09, 0.09});
92  defaults.addParameter<int>("version", 1);
93  desc.addVPSet("matchingCuts", cutsDesc, std::vector<edm::ParameterSet>{defaults, defaults, defaults});
94  return desc;
95 }
ParameterDescriptionBase * addVPSet(U const &iLabel, ParameterSetDescription const &validator, std::vector< ParameterSet > const &defaults)
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
Definition: Activities.doc:12
void addParameter(std::string const &name, T const &value)
Definition: ParameterSet.h:124
ParameterDescriptionBase * add(U const &iLabel, T const &value)
HLT enums.
def move(src, dest)
Definition: eostools.py:511
TrajectoryStateOnSurface TrajSeedMatcher::makeTrajStateOnSurface ( const GlobalPoint pos,
const GlobalPoint vtx,
const float  energy,
const int  charge 
) const
private

Definition at line 258 of file TrajSeedMatcher.cc.

References FTSFromVertexToPointFactory::get(), getMagField(), FreeTrajectoryState::momentum(), and FreeTrajectoryState::position().

Referenced by compatibleSeeds().

261  {
264  return TrajectoryStateOnSurface(freeTS, *bpb(freeTS.position(), freeTS.momentum()));
265 }
static FreeTrajectoryState get(MagneticField const &magField, GlobalPoint const &xmeas, GlobalPoint const &xvert, float momentum, TrackCharge charge)
const MagneticField & getMagField(const GlobalPoint &point) const
GlobalVector momentum() const
GlobalPoint position() const
TrajSeedMatcher::SCHitMatch TrajSeedMatcher::match2ndToNthHit ( const TrajectorySeed seed,
const FreeTrajectoryState trajState,
const size_t  hitNr,
const GlobalPoint prevHitPos,
const GlobalPoint vtxPos,
const PropagatorWithMaterial propagator 
)
private

Definition at line 282 of file TrajSeedMatcher.cc.

References getTrajStateFromPoint(), hfClusterShapes_cfi::hits, TrajectoryStateOnSurface::isValid(), and TrajectorySeed::recHits().

Referenced by processSeed().

287  {
288  const TrajectorySeed::range& hits = seed.recHits();
289  auto hitIt = hits.first + hitNr;
290 
291  if (hitIt->isValid()) {
292  const TrajectoryStateOnSurface& trajState = getTrajStateFromPoint(*hitIt, initialState, prevHitPos, propagator);
293 
294  if (trajState.isValid()) {
295  return SCHitMatch(vtxPos, trajState, *hitIt);
296  }
297  }
298  return SCHitMatch();
299 }
std::pair< const_iterator, const_iterator > range
const TrajectoryStateOnSurface & getTrajStateFromPoint(const TrackingRecHit &hit, const FreeTrajectoryState &initialState, const GlobalPoint &point, const PropagatorWithMaterial &propagator)
range recHits() const
TrajSeedMatcher::SCHitMatch TrajSeedMatcher::matchFirstHit ( const TrajectorySeed seed,
const TrajectoryStateOnSurface trajState,
const GlobalPoint vtxPos,
const PropagatorWithMaterial propagator 
)
private

Definition at line 267 of file TrajSeedMatcher.cc.

References getTrajStateFromVtx(), hfClusterShapes_cfi::hits, TrajectoryStateOnSurface::isValid(), and TrajectorySeed::recHits().

Referenced by processSeed().

270  {
271  const TrajectorySeed::range& hits = seed.recHits();
272  auto hitIt = hits.first;
273 
274  if (hitIt->isValid()) {
275  const TrajectoryStateOnSurface& trajStateFromVtx = getTrajStateFromVtx(*hitIt, initialState, propagator);
276  if (trajStateFromVtx.isValid())
277  return SCHitMatch(vtxPos, trajStateFromVtx, *hitIt);
278  }
279  return SCHitMatch();
280 }
std::pair< const_iterator, const_iterator > range
const TrajectoryStateOnSurface & getTrajStateFromVtx(const TrackingRecHit &hit, const TrajectoryStateOnSurface &initialState, const PropagatorWithMaterial &propagator)
range recHits() const
bool TrajSeedMatcher::passesMatchSel ( const SCHitMatch hit,
const size_t  hitNr 
) const
private

Definition at line 308 of file TrajSeedMatcher.cc.

References Exception, and matchingCuts_.

Referenced by processSeed().

308  {
309  if (hitNr < matchingCuts_.size()) {
310  return (*matchingCuts_[hitNr])(hit);
311  } else {
312  throw cms::Exception("LogicError") << " Error, attempting to apply selection to hit " << hitNr
313  << " but only cuts for " << matchingCuts_.size() << " defined";
314  }
315 }
std::vector< std::unique_ptr< MatchingCuts > > matchingCuts_
bool TrajSeedMatcher::passTrajPreSel ( const GlobalPoint hitPos,
const GlobalPoint candPos 
) const
private

Definition at line 214 of file TrajSeedMatcher.cc.

References dt, kPhiCut_, PV3DBase< T, PVType, FrameType >::perp(), PV3DBase< T, PVType, FrameType >::x(), and PV3DBase< T, PVType, FrameType >::y().

214  {
215  float dt = hitPos.x() * candPos.x() + hitPos.y() * candPos.y();
216  if (dt < 0)
217  return false;
218  if (dt < kPhiCut_ * (candPos.perp() * hitPos.perp()))
219  return false;
220  return true;
221 }
float dt
Definition: AMPTWrapper.h:136
T perp() const
Definition: PV3DBase.h:69
T y() const
Definition: PV3DBase.h:60
T x() const
Definition: PV3DBase.h:59
static float kPhiCut_
std::vector< TrajSeedMatcher::SCHitMatch > TrajSeedMatcher::processSeed ( const TrajectorySeed seed,
const GlobalPoint candPos,
const GlobalPoint vprim,
const float  energy,
const TrajectoryStateOnSurface initialTrajState 
)
private

Definition at line 157 of file TrajSeedMatcher.cc.

References backwardPropagator_, ALCARECOTkAlJpsiMuMu_cff::charge, TrajectoryStateOnSurface::charge(), enableHitSkipping_, HCALHighEnergyHPDFilter_cfi::energy, PV3DBase< T, PVType, FrameType >::eta(), forwardPropagator_, FTSFromVertexToPointFactory::get(), getMagField(), getZVtxFromExtrapolation(), TrajSeedMatcher::SCHitMatch::hitPos(), match2ndToNthHit(), muonTagProbeFilters_cff::matched, matchFirstHit(), matchingCuts_, TrajectorySeed::nHits(), passesMatchSel(), PV3DBase< T, PVType, FrameType >::phi(), TrajSeedMatcher::SCHitMatch::setExtra(), funct::sin(), PV3DBase< T, PVType, FrameType >::theta(), useRecoVertex_, bphysicsOniaDQM_cfi::vertex, PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), PV3DBase< T, PVType, FrameType >::z(), and HLT_FULL_cff::zVertex.

Referenced by compatibleSeeds().

161  {
162  //next try passing these variables in once...
163  const float candEta = candPos.eta();
164  const float candEt = energy * std::sin(candPos.theta());
165  const int charge = initialTrajState.charge();
166 
167  std::vector<SCHitMatch> matchedHits;
168  FreeTrajectoryState firstHitFreeTraj;
169  GlobalPoint prevHitPos;
171  for (size_t hitNr = 0; hitNr < matchingCuts_.size() && hitNr < seed.nHits(); hitNr++) {
172  bool matched = false;
173  if (matchedHits.empty()) { // First hit is special
174  SCHitMatch firstHit = matchFirstHit(seed, initialTrajState, vprim, *backwardPropagator_);
175  firstHit.setExtra(candEt, candEta, candPos.phi(), charge, 1);
176  if (passesMatchSel(firstHit, 0)) {
177  matched = true;
178  matchedHits.push_back(firstHit);
179  //now we can figure out the z vertex
180  double zVertex = useRecoVertex_ ? vprim.z() : getZVtxFromExtrapolation(vprim, firstHit.hitPos(), candPos);
181  vertex = GlobalPoint(vprim.x(), vprim.y(), zVertex);
182  firstHitFreeTraj =
183  FTSFromVertexToPointFactory::get(getMagField(firstHit.hitPos()), firstHit.hitPos(), vertex, energy, charge);
184  prevHitPos = firstHit.hitPos();
185  }
186  } else { // All subsequent hits are handled the same
187  SCHitMatch hit = match2ndToNthHit(seed, firstHitFreeTraj, hitNr, prevHitPos, vertex, *forwardPropagator_);
188  hit.setExtra(candEt, candEta, candPos.phi(), charge, 1);
189  if (passesMatchSel(hit, matchedHits.size())) {
190  matched = true;
191  matchedHits.push_back(hit);
192  prevHitPos = hit.hitPos();
193  }
194  }
195  if (!matched and !enableHitSkipping_)
196  break;
197  }
198  return matchedHits;
199 }
static FreeTrajectoryState get(MagneticField const &magField, GlobalPoint const &xmeas, GlobalPoint const &xvert, float momentum, TrackCharge charge)
const MagneticField & getMagField(const GlobalPoint &point) const
bool passesMatchSel(const SCHitMatch &hit, const size_t hitNr) const
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
Geom::Phi< T > phi() const
Definition: PV3DBase.h:66
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
std::unique_ptr< PropagatorWithMaterial > forwardPropagator_
T y() const
Definition: PV3DBase.h:60
static float getZVtxFromExtrapolation(const GlobalPoint &primeVtxPos, const GlobalPoint &hitPos, const GlobalPoint &candPos)
Geom::Theta< T > theta() const
Definition: PV3DBase.h:72
T z() const
Definition: PV3DBase.h:61
std::vector< std::unique_ptr< MatchingCuts > > matchingCuts_
TrajSeedMatcher::SCHitMatch match2ndToNthHit(const TrajectorySeed &seed, const FreeTrajectoryState &trajState, const size_t hitNr, const GlobalPoint &prevHitPos, const GlobalPoint &vtxPos, const PropagatorWithMaterial &propagator)
T eta() const
Definition: PV3DBase.h:73
unsigned int nHits() const
T x() const
Definition: PV3DBase.h:59
std::unique_ptr< PropagatorWithMaterial > backwardPropagator_
TrajSeedMatcher::SCHitMatch matchFirstHit(const TrajectorySeed &seed, const TrajectoryStateOnSurface &trajState, const GlobalPoint &vtxPos, const PropagatorWithMaterial &propagator)
void TrajSeedMatcher::setMeasTkEvtHandle ( edm::Handle< MeasurementTrackerEvent handle)
inline

Member Data Documentation

std::unique_ptr<PropagatorWithMaterial> TrajSeedMatcher::backwardPropagator_
private
unsigned long long TrajSeedMatcher::cacheIDMagField_
private

Definition at line 263 of file TrajSeedMatcher.h.

Referenced by doEventSetup().

edm::ESHandle<DetLayerGeometry> TrajSeedMatcher::detLayerGeom_
private

Definition at line 268 of file TrajSeedMatcher.h.

Referenced by doEventSetup(), and getNrValidLayersAlongTraj().

std::string TrajSeedMatcher::detLayerGeomLabel_
private

Definition at line 271 of file TrajSeedMatcher.h.

Referenced by doEventSetup().

bool TrajSeedMatcher::enableHitSkipping_
private

Definition at line 274 of file TrajSeedMatcher.h.

Referenced by processSeed().

std::unique_ptr<PropagatorWithMaterial> TrajSeedMatcher::forwardPropagator_
private
float TrajSeedMatcher::kElectronMass_ = 0.000511
staticprivate

Definition at line 259 of file TrajSeedMatcher.h.

Referenced by doEventSetup().

float TrajSeedMatcher::kPhiCut_ = -0.801144
staticprivate

Definition at line 260 of file TrajSeedMatcher.h.

Referenced by passTrajPreSel().

edm::ESHandle<MagneticField> TrajSeedMatcher::magField_
private

Definition at line 264 of file TrajSeedMatcher.h.

Referenced by compatibleSeeds(), and doEventSetup().

edm::ESHandle<MagneticField> TrajSeedMatcher::magFieldParam_
private

Definition at line 265 of file TrajSeedMatcher.h.

Referenced by doEventSetup().

std::vector<std::unique_ptr<MatchingCuts> > TrajSeedMatcher::matchingCuts_
private

Definition at line 277 of file TrajSeedMatcher.h.

Referenced by passesMatchSel(), processSeed(), and TrajSeedMatcher().

edm::Handle<MeasurementTrackerEvent> TrajSeedMatcher::measTkEvt_
private

Definition at line 266 of file TrajSeedMatcher.h.

Referenced by layerHasValidHits().

const std::vector<unsigned int> TrajSeedMatcher::minNrHits_
private

Definition at line 284 of file TrajSeedMatcher.h.

Referenced by getNrHitsRequired(), and TrajSeedMatcher().

const std::vector<int> TrajSeedMatcher::minNrHitsValidLayerBins_
private

Definition at line 285 of file TrajSeedMatcher.h.

Referenced by getNrHitsRequired(), and TrajSeedMatcher().

edm::ESHandle<NavigationSchool> TrajSeedMatcher::navSchool_
private

Definition at line 267 of file TrajSeedMatcher.h.

Referenced by doEventSetup(), and getNrValidLayersAlongTraj().

std::string TrajSeedMatcher::navSchoolLabel_
private

Definition at line 270 of file TrajSeedMatcher.h.

Referenced by doEventSetup().

std::string TrajSeedMatcher::paramMagFieldLabel_
private

Definition at line 269 of file TrajSeedMatcher.h.

Referenced by doEventSetup().

bool TrajSeedMatcher::requireExactMatchCount_
private

Definition at line 275 of file TrajSeedMatcher.h.

Referenced by compatibleSeeds().

IntGlobalPointPairUnorderedMap<TrajectoryStateOnSurface> TrajSeedMatcher::trajStateFromPointNegChargeCache_
private

Definition at line 291 of file TrajSeedMatcher.h.

Referenced by clearCache(), and getTrajStateFromPoint().

IntGlobalPointPairUnorderedMap<TrajectoryStateOnSurface> TrajSeedMatcher::trajStateFromPointPosChargeCache_
private

Definition at line 290 of file TrajSeedMatcher.h.

Referenced by clearCache(), and getTrajStateFromPoint().

std::unordered_map<int, TrajectoryStateOnSurface> TrajSeedMatcher::trajStateFromVtxNegChargeCache_
private

Definition at line 288 of file TrajSeedMatcher.h.

Referenced by clearCache(), and getTrajStateFromVtx().

std::unordered_map<int, TrajectoryStateOnSurface> TrajSeedMatcher::trajStateFromVtxPosChargeCache_
private

Definition at line 287 of file TrajSeedMatcher.h.

Referenced by clearCache(), and getTrajStateFromVtx().

bool TrajSeedMatcher::useParamMagFieldIfDefined_
private

Definition at line 276 of file TrajSeedMatcher.h.

Referenced by doEventSetup().

bool TrajSeedMatcher::useRecoVertex_
private

Definition at line 273 of file TrajSeedMatcher.h.

Referenced by getNrValidLayersAlongTraj(), and processSeed().