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 ()
 
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
 
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 int charge)
 

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_
 
std::unique_ptr< PropagatorWithMaterialforwardPropagator_
 
edm::ESHandle< MagneticFieldmagField_
 
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::unordered_map< std::pair< int, GlobalPoint >, TrajectoryStateOnSurfacetrajStateFromPointNegChargeCache_
 
std::unordered_map< std::pair< int, GlobalPoint >, TrajectoryStateOnSurfacetrajStateFromPointPosChargeCache_
 
std::unordered_map< int, TrajectoryStateOnSurfacetrajStateFromVtxNegChargeCache_
 
std::unordered_map< int, TrajectoryStateOnSurfacetrajStateFromVtxPosChargeCache_
 
bool useRecoVertex_
 

Static Private Attributes

static float kElectronMass_ = 0.000511
 
static float kPhiCut_ = -0.801144
 

Detailed Description

Definition at line 70 of file TrajSeedMatcher.h.

Constructor & Destructor Documentation

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

Definition at line 23 of file TrajSeedMatcher.cc.

References detLayerGeomLabel_, Exception, edm::ParameterSet::getParameter(), matchingCuts_, minNrHits_, minNrHitsValidLayerBins_, navSchoolLabel_, AlCaHLTBitMon_QueryRunRegistry::string, useRecoVertex_, and jets_cff::version.

23  :
25  minNrHits_(pset.getParameter<std::vector<unsigned int> >("minNrHits")),
26  minNrHitsValidLayerBins_(pset.getParameter<std::vector<int> >("minNrHitsValidLayerBins"))
27 {
28  useRecoVertex_ = pset.getParameter<bool>("useRecoVertex");
29  navSchoolLabel_ = pset.getParameter<std::string>("navSchool");
30  detLayerGeomLabel_ = pset.getParameter<std::string>("detLayerGeom");
31  const auto cutsPSets=pset.getParameter<std::vector<edm::ParameterSet> >("matchingCuts");
32  for(const auto & cutPSet : cutsPSets){
33  int version=cutPSet.getParameter<int>("version");
34  switch(version){
35  case 1:
36  matchingCuts_.emplace_back(std::make_unique<MatchingCutsV1>(cutPSet));
37  break;
38  case 2:
39  matchingCuts_.emplace_back(std::make_unique<MatchingCutsV2>(cutPSet));
40  break;
41  default:
42  throw cms::Exception("InvalidConfig") <<" Error TrajSeedMatcher::TrajSeedMatcher pixel match cuts version "<<version<<" not recognised"<<std::endl;
43  }
44  }
45 
46  if(minNrHitsValidLayerBins_.size()+1!=minNrHits_.size()){
47  throw cms::Exception("InvalidConfig")<<" TrajSeedMatcher::TrajSeedMatcher minNrHitsValidLayerBins should be 1 less than minNrHits when its "<<minNrHitsValidLayerBins_.size()<<" vs "<<minNrHits_.size();
48  }
49 }
T getParameter(std::string const &) const
const std::vector< int > minNrHitsValidLayerBins_
unsigned long long cacheIDMagField_
std::vector< std::unique_ptr< MatchingCuts > > matchingCuts_
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 284 of file TrajSeedMatcher.cc.

References trajStateFromPointNegChargeCache_, trajStateFromPointPosChargeCache_, trajStateFromVtxNegChargeCache_, and trajStateFromVtxPosChargeCache_.

Referenced by compatibleSeeds().

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

Definition at line 103 of file TrajSeedMatcher.cc.

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

Referenced by ElectronNHitSeedProducer::produce().

105 {
107  throw cms::Exception("LogicError") <<__FUNCTION__<<" can not make pixel seeds as event setup has not properly been called";
108  }
109 
110  clearCache();
111 
112  std::vector<SeedWithInfo> matchedSeeds;
113  for(const auto& seed : seeds) {
114  std::vector<SCHitMatch> matchedHitsNeg = processSeed(seed,candPos,vprim,energy,-1);
115  std::vector<SCHitMatch> matchedHitsPos = processSeed(seed,candPos,vprim,energy,+1);
116  int nrValidLayersPos = 0;
117  int nrValidLayersNeg = 0;
118  if(matchedHitsNeg.size()>=2){
119  nrValidLayersNeg = getNrValidLayersAlongTraj(matchedHitsNeg[0],
120  matchedHitsNeg[1],
121  candPos,vprim,energy,-1);
122  }
123  if(matchedHitsPos.size()>=2){
124  nrValidLayersPos = getNrValidLayersAlongTraj(matchedHitsPos[0],
125  matchedHitsPos[1],
126  candPos,vprim,energy,+1);
127  }
128 
129  int nrValidLayers = std::max(nrValidLayersNeg,nrValidLayersPos);
130  size_t nrHitsRequired = getNrHitsRequired(nrValidLayers);
131  //so we require the number of hits to exactly match, this is because we currently do not
132  //do any duplicate cleaning for the input seeds
133  //this means is a hit pair with a 3rd hit will appear twice (or however many hits it has)
134  //so if you did >=nrHitsRequired, you would get the same seed multiple times
135  //ideally we should fix this and clean our input seed collection so each seed is only in once
136  //also it should be studied what impact having a 3rd hit has on a GsfTrack
137  //ie will we get a significantly different result seeding with a hit pair
138  //and the same the hit pair with a 3rd hit added
139  //in that case, perhaps it should be >=
140  if(matchedHitsNeg.size()==nrHitsRequired ||
141  matchedHitsPos.size()==nrHitsRequired){
142  matchedSeeds.push_back({seed,matchedHitsPos,matchedHitsNeg,nrValidLayers});
143  }
144 
145 
146  }
147  return matchedSeeds;
148 }
std::unique_ptr< PropagatorWithMaterial > forwardPropagator_
edm::ESHandle< MagneticField > magField_
size_t getNrHitsRequired(const int nrValidLayers) const
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_
std::vector< SCHitMatch > processSeed(const TrajectorySeed &seed, const GlobalPoint &candPos, const GlobalPoint &vprim, const float energy, const int charge)
void TrajSeedMatcher::doEventSetup ( const edm::EventSetup iSetup)

Definition at line 89 of file TrajSeedMatcher.cc.

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

Referenced by ElectronNHitSeedProducer::produce().

90 {
92  iSetup.get<IdealMagneticFieldRecord>().get(magField_);
93  cacheIDMagField_=iSetup.get<IdealMagneticFieldRecord>().cacheIdentifier();
94  forwardPropagator_=std::make_unique<PropagatorWithMaterial>(alongMomentum,kElectronMass_,&*(magField_));
95  backwardPropagator_=std::make_unique<PropagatorWithMaterial>(oppositeToMomentum,kElectronMass_,&*(magField_));
96  }
99 }
unsigned long long cacheIdentifier() const
edm::ESHandle< DetLayerGeometry > detLayerGeom_
std::unique_ptr< PropagatorWithMaterial > forwardPropagator_
edm::ESHandle< NavigationSchool > navSchool_
unsigned long long cacheIDMagField_
edm::ESHandle< MagneticField > magField_
std::string navSchoolLabel_
static float kElectronMass_
T get() const
Definition: EventSetup.h:71
std::string detLayerGeomLabel_
std::unique_ptr< PropagatorWithMaterial > backwardPropagator_
size_t TrajSeedMatcher::getNrHitsRequired ( const int  nrValidLayers) const
private

Definition at line 362 of file TrajSeedMatcher.cc.

References minNrHits_, and minNrHitsValidLayerBins_.

Referenced by compatibleSeeds().

363 {
364  for(size_t binNr=0;binNr<minNrHitsValidLayerBins_.size();binNr++){
365  if(nrValidLayers<minNrHitsValidLayerBins_[binNr]) return minNrHits_[binNr];
366  }
367  return minNrHits_.back();
368 
369 }
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 301 of file TrajSeedMatcher.cc.

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

Referenced by compatibleSeeds().

305 {
306  double zVertex = useRecoVertex_ ? vprim.z() : getZVtxFromExtrapolation(vprim,hit1.hitPos(),candPos);
307  GlobalPoint vertex(vprim.x(),vprim.y(),zVertex);
308 
309  FreeTrajectoryState firstHitFreeTraj = FTSFromVertexToPointFactory::get(*magField_,hit1.hitPos(),
310  vertex, energy, charge);
311  const TrajectoryStateOnSurface& secondHitTraj = getTrajStateFromPoint(*hit2.hit(),firstHitFreeTraj,hit1.hitPos(),*forwardPropagator_);
312  return getNrValidLayersAlongTraj(hit2.hit()->geographicalId(),secondHitTraj);
313 }
static FreeTrajectoryState get(MagneticField const &magField, GlobalPoint const &xmeas, GlobalPoint const &xvert, float momentum, TrackCharge charge)
std::unique_ptr< PropagatorWithMaterial > forwardPropagator_
T y() const
Definition: PV3DBase.h:63
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)
edm::ESHandle< MagneticField > magField_
T z() const
Definition: PV3DBase.h:64
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:62
int TrajSeedMatcher::getNrValidLayersAlongTraj ( const DetId hitId,
const TrajectoryStateOnSurface hitTrajState 
) const
private

Definition at line 315 of file TrajSeedMatcher.cc.

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

316 {
317 
318  const DetLayer* detLayer = detLayerGeom_->idToLayer(hitId);
319  if(detLayer==nullptr) return 0;
320 
321  const FreeTrajectoryState& hitFreeState = *hitTrajState.freeState();
322  const std::vector<const DetLayer*> inLayers = navSchool_->compatibleLayers(*detLayer,hitFreeState,oppositeToMomentum);
323  const std::vector<const DetLayer*> outLayers = navSchool_->compatibleLayers(*detLayer,hitFreeState,alongMomentum);
324 
325  int nrValidLayers=1; //because our current hit is also valid and wont be included in the count otherwise
326  int nrPixInLayers=0;
327  int nrPixOutLayers=0;
328  for(auto layer : inLayers){
329  if(GeomDetEnumerators::isTrackerPixel(layer->subDetector())){
330  nrPixInLayers++;
331  if(layerHasValidHits(*layer,hitTrajState,*backwardPropagator_)) nrValidLayers++;
332  }
333  }
334  for(auto layer : outLayers){
335  if(GeomDetEnumerators::isTrackerPixel(layer->subDetector())){
336  nrPixOutLayers++;
337  if(layerHasValidHits(*layer,hitTrajState,*forwardPropagator_)) nrValidLayers++;
338  }
339  }
340  return nrValidLayers;
341 }
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 229 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().

233 {
234 
235  auto& trajStateFromPointCache = initialState.charge()==1 ? trajStateFromPointPosChargeCache_ :
237 
238  auto key = std::make_pair(hit.det()->gdetIndex(),point);
239  auto res = trajStateFromPointCache.find(key);
240  if(res!=trajStateFromPointCache.end()) return res->second;
241  else{ //doesnt exist, need to make it
242  //FIXME: check for efficiency
243  auto val = trajStateFromPointCache.emplace(key,propagator.propagate(initialState,hit.det()->surface()));
244  return val.first->second;
245  }
246 }
std::unordered_map< std::pair< int, GlobalPoint >, TrajectoryStateOnSurface > trajStateFromPointNegChargeCache_
int gdetIndex() const
Definition: GeomDet.h:103
TrackCharge charge() const
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:42
Definition: Electron.h:6
std::unordered_map< std::pair< int, GlobalPoint >, TrajectoryStateOnSurface > trajStateFromPointPosChargeCache_
const GeomDet * det() const
TrajectoryStateOnSurface propagate(STA const &state, SUR const &surface) const
Definition: Propagator.h:53
*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 212 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().

215 {
216  auto& trajStateFromVtxCache = initialState.charge()==1 ? trajStateFromVtxPosChargeCache_ :
218 
219  auto key = hit.det()->gdetIndex();
220  auto res = trajStateFromVtxCache.find(key);
221  if(res!=trajStateFromVtxCache.end()) return res->second;
222  else{ //doesnt exist, need to make it
223  //FIXME: check for efficiency
224  auto val = trajStateFromVtxCache.emplace(key,propagator.propagate(initialState,hit.det()->surface()));
225  return val.first->second;
226  }
227 }
std::unordered_map< int, TrajectoryStateOnSurface > trajStateFromVtxNegChargeCache_
int gdetIndex() const
Definition: GeomDet.h:103
std::unordered_map< int, TrajectoryStateOnSurface > trajStateFromVtxPosChargeCache_
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:42
Definition: Electron.h:6
const GeomDet * det() const
TrajectoryStateOnSurface propagate(STA const &state, SUR const &surface) const
Definition: Propagator.h:53
float TrajSeedMatcher::getZVtxFromExtrapolation ( const GlobalPoint primeVtxPos,
const GlobalPoint hitPos,
const GlobalPoint candPos 
)
staticprivate

Definition at line 192 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().

194 {
195  auto sq = [](float x){return x*x;};
196  auto calRDiff = [sq](const GlobalPoint& p1,const GlobalPoint& p2){
197  return std::sqrt(sq(p2.x()-p1.x()) + sq(p2.y()-p1.y()));
198  };
199  const double r1Diff = calRDiff(primeVtxPos,hitPos);
200  const double r2Diff = calRDiff(hitPos,candPos);
201  return hitPos.z() - r1Diff*(candPos.z()-hitPos.z())/r2Diff;
202 }
T y() const
Definition: PV3DBase.h:63
T sqrt(T t)
Definition: SSEVec.h:18
T z() const
Definition: PV3DBase.h:64
double p2[4]
Definition: TauolaWrapper.h:90
double p1[4]
Definition: TauolaWrapper.h:89
T x() const
Definition: PV3DBase.h:62
bool TrajSeedMatcher::layerHasValidHits ( const DetLayer layer,
const TrajectoryStateOnSurface hitSurState,
const Propagator propToLayerFromState 
) const
private

Definition at line 343 of file TrajSeedMatcher.cc.

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

Referenced by getNrValidLayersAlongTraj().

345 {
346  //FIXME: do not hardcode with werid magic numbers stolen from ancient tracking code
347  //its taken from https://cmssdt.cern.ch/dxr/CMSSW/source/RecoTracker/TrackProducer/interface/TrackProducerBase.icc#165
348  //which inspires this code
349  Chi2MeasurementEstimator estimator(30.,-3.0,0.5,2.0,0.5,1.e12); // same as defauts....
350 
351  const std::vector<GeometricSearchDet::DetWithState>& detWithState = layer.compatibleDets(hitSurState,propToLayerFromState,estimator);
352  if(detWithState.empty()) return false;
353  else{
354  DetId id = detWithState.front().first->geographicalId();
356  if(measDet.isActive()) return true;
357  else return false;
358  }
359 }
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:18
edm::Handle< MeasurementTrackerEvent > measTkEvt_
edm::ParameterSetDescription TrajSeedMatcher::makePSetDescription ( )
static

Definition at line 51 of file TrajSeedMatcher.cc.

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

Referenced by ElectronNHitSeedProducer::fillDescriptions().

52 {
54  desc.add<bool>("useRecoVertex",false);
55  desc.add<std::string>("navSchool","SimpleNavigationSchool");
56  desc.add<std::string>("detLayerGeom","hltESPGlobalDetLayerGeometry");
57  desc.add<std::vector<int> >("minNrHitsValidLayerBins",{4});
58  desc.add<std::vector<unsigned int> >("minNrHits",{2,3});
59 
61  auto cutDescCases =
62  1 >>
63  (edm::ParameterDescription<double>("dPhiMax",0.04,true) and
64  edm::ParameterDescription<double>("dRZMax",0.09,true) and
65  edm::ParameterDescription<double>("dRZMaxLowEtThres",20.,true) and
66  edm::ParameterDescription<std::vector<double> >("dRZMaxLowEtEtaBins",std::vector<double>{1.,1.5},true) and
67  edm::ParameterDescription<std::vector<double> >("dRZMaxLowEt",std::vector<double>{0.09,0.15,0.09},true)) or
68  2 >>
69  (edm::ParameterDescription<std::vector<double> >("dPhiMaxHighEt",{0.003},true) and
70  edm::ParameterDescription<std::vector<double> >("dPhiMaxHighEtThres",{0.0},true) and
71  edm::ParameterDescription<std::vector<double> >("dPhiMaxLowEtGrad",{0.0},true) and
72  edm::ParameterDescription<std::vector<double> >("dRZMaxHighEt",{0.005},true) and
73  edm::ParameterDescription<std::vector<double> >("dRZMaxHighEtThres",{30},true) and
74  edm::ParameterDescription<std::vector<double> >("dRZMaxLowEtGrad",{-0.002},true) and
75  edm::ParameterDescription<std::vector<double> >("etaBins",{},true));
76  cutsDesc.ifValue(edm::ParameterDescription<int>("version",1,true), std::move(cutDescCases));
77 
79  defaults.addParameter<double>("dPhiMax",0.04);
80  defaults.addParameter<double>("dRZMax",0.09);
81  defaults.addParameter<double>("dRZMaxLowEtThres",0.09);
82  defaults.addParameter<std::vector<double> >("dRZMaxLowEtEtaBins",std::vector<double>{1.,1.5});
83  defaults.addParameter<std::vector<double> >("dRZMaxLowEt",std::vector<double>{0.09,0.09,0.09});
84  defaults.addParameter<int>("version",1);
85  desc.addVPSet("matchingCuts",cutsDesc,std::vector<edm::ParameterSet>{defaults,defaults,defaults});
86  return desc;
87 }
ParameterDescriptionBase * addVPSet(U const &iLabel, ParameterSetDescription const &validator, std::vector< ParameterSet > const &defaults)
def defaults(locpath, dataType, var)
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:125
ParameterDescriptionBase * add(U const &iLabel, T const &value)
HLT enums.
def move(src, dest)
Definition: eostools.py:511
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 263 of file TrajSeedMatcher.cc.

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

Referenced by processSeed().

269 {
270  const TrajectorySeed::range& hits = seed.recHits();
271  auto hitIt = hits.first+hitNr;
272 
273  if(hitIt->isValid()){
274  const TrajectoryStateOnSurface& trajState = getTrajStateFromPoint(*hitIt,initialState,prevHitPos,propagator);
275 
276  if(trajState.isValid()){
277  return SCHitMatch(vtxPos,trajState,*hitIt);
278  }
279  }
280  return SCHitMatch();
281 
282 }
const TrajectoryStateOnSurface & getTrajStateFromPoint(const TrackingRecHit &hit, const FreeTrajectoryState &initialState, const GlobalPoint &point, const PropagatorWithMaterial &propagator)
std::pair< const_iterator, const_iterator > range
range recHits() const
TrajSeedMatcher::SCHitMatch TrajSeedMatcher::matchFirstHit ( const TrajectorySeed seed,
const TrajectoryStateOnSurface trajState,
const GlobalPoint vtxPos,
const PropagatorWithMaterial propagator 
)
private

Definition at line 248 of file TrajSeedMatcher.cc.

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

Referenced by processSeed().

252 {
253  const TrajectorySeed::range& hits = seed.recHits();
254  auto hitIt = hits.first;
255 
256  if(hitIt->isValid()){
257  const TrajectoryStateOnSurface& trajStateFromVtx = getTrajStateFromVtx(*hitIt,initialState,propagator);
258  if(trajStateFromVtx.isValid()) return SCHitMatch(vtxPos,trajStateFromVtx,*hitIt);
259  }
260  return SCHitMatch();
261 }
const TrajectoryStateOnSurface & getTrajStateFromVtx(const TrackingRecHit &hit, const TrajectoryStateOnSurface &initialState, const PropagatorWithMaterial &propagator)
std::pair< const_iterator, const_iterator > range
range recHits() const
bool TrajSeedMatcher::passesMatchSel ( const SCHitMatch hit,
const size_t  hitNr 
) const
private

Definition at line 292 of file TrajSeedMatcher.cc.

References Exception, and matchingCuts_.

Referenced by processSeed().

293 {
294  if(hitNr<matchingCuts_.size()){
295  return (*matchingCuts_[hitNr])(hit);
296  }else{
297  throw cms::Exception("LogicError") <<" Error, attempting to apply selection to hit "<<hitNr<<" but only cuts for "<<matchingCuts_.size()<<" defined";
298  }
299 }
std::vector< std::unique_ptr< MatchingCuts > > matchingCuts_
bool TrajSeedMatcher::passTrajPreSel ( const GlobalPoint hitPos,
const GlobalPoint candPos 
) const
private

Definition at line 204 of file TrajSeedMatcher.cc.

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

205 {
206  float dt = hitPos.x()*candPos.x()+hitPos.y()*candPos.y();
207  if (dt<0) return false;
208  if (dt<kPhiCut_*(candPos.perp()*hitPos.perp())) return false;
209  return true;
210 }
float dt
Definition: AMPTWrapper.h:126
T perp() const
Definition: PV3DBase.h:72
T y() const
Definition: PV3DBase.h:63
T x() const
Definition: PV3DBase.h:62
static float kPhiCut_
std::vector< TrajSeedMatcher::SCHitMatch > TrajSeedMatcher::processSeed ( const TrajectorySeed seed,
const GlobalPoint candPos,
const GlobalPoint vprim,
const float  energy,
const int  charge 
)
private

Definition at line 154 of file TrajSeedMatcher.cc.

References backwardPropagator_, ALCARECOTkAlJpsiMuMu_cff::charge, randomXiThetaGunProducer_cfi::energy, PV3DBase< T, PVType, FrameType >::eta(), forwardPropagator_, FTSFromVertexToPointFactory::get(), getZVtxFromExtrapolation(), TrajSeedMatcher::SCHitMatch::hitPos(), magField_, match2ndToNthHit(), matchFirstHit(), matchingCuts_, TrajectorySeed::nHits(), passesMatchSel(), PV3DBase< T, PVType, FrameType >::phi(), TrajSeedMatcher::SCHitMatch::setExtra(), funct::sin(), PV3DBase< T, PVType, FrameType >::theta(), useRecoVertex_, PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), PV3DBase< T, PVType, FrameType >::z(), and CombinatorialSeedGeneratorForCosmicsRegionalReconstruction_cfi::zVertex.

Referenced by compatibleSeeds().

156 {
157  const float candEta = candPos.eta();
158  const float candEt = energy*std::sin(candPos.theta());
159 
160  FreeTrajectoryState trajStateFromVtx = FTSFromVertexToPointFactory::get(*magField_, candPos, vprim, energy, charge);
162  TrajectoryStateOnSurface initialTrajState(trajStateFromVtx,*bpb(trajStateFromVtx.position(),
163  trajStateFromVtx.momentum()));
164 
165  std::vector<SCHitMatch> matchedHits;
166  SCHitMatch firstHit = matchFirstHit(seed,initialTrajState,vprim,*backwardPropagator_);
167  firstHit.setExtra(candEt,candEta,candPos.phi(),charge,1);
168  if(passesMatchSel(firstHit,0)){
169  matchedHits.push_back(firstHit);
170 
171  //now we can figure out the z vertex
172  double zVertex = useRecoVertex_ ? vprim.z() : getZVtxFromExtrapolation(vprim,firstHit.hitPos(),candPos);
173  GlobalPoint vertex(vprim.x(),vprim.y(),zVertex);
174 
175  FreeTrajectoryState firstHitFreeTraj = FTSFromVertexToPointFactory::get(*magField_, firstHit.hitPos(),
176  vertex, energy, charge) ;
177 
178  GlobalPoint prevHitPos = firstHit.hitPos();
179  for(size_t hitNr=1;hitNr<matchingCuts_.size() && hitNr<seed.nHits();hitNr++){
180  SCHitMatch hit = match2ndToNthHit(seed,firstHitFreeTraj,hitNr,prevHitPos,vertex,*forwardPropagator_);
181  hit.setExtra(candEt,candEta,candPos.phi(),charge,1);
182  if(passesMatchSel(hit,hitNr)){
183  matchedHits.push_back(hit);
184  prevHitPos = hit.hitPos();
185  }else break;
186  }
187  }
188  return matchedHits;
189 }
static FreeTrajectoryState get(MagneticField const &magField, GlobalPoint const &xmeas, GlobalPoint const &xvert, float momentum, TrackCharge charge)
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:69
std::unique_ptr< PropagatorWithMaterial > forwardPropagator_
T y() const
Definition: PV3DBase.h:63
static float getZVtxFromExtrapolation(const GlobalPoint &primeVtxPos, const GlobalPoint &hitPos, const GlobalPoint &candPos)
Geom::Theta< T > theta() const
Definition: PV3DBase.h:75
edm::ESHandle< MagneticField > magField_
T z() const
Definition: PV3DBase.h:64
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:76
unsigned int nHits() const
T x() const
Definition: PV3DBase.h:62
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 267 of file TrajSeedMatcher.h.

Referenced by doEventSetup().

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

Definition at line 271 of file TrajSeedMatcher.h.

Referenced by doEventSetup(), and getNrValidLayersAlongTraj().

std::string TrajSeedMatcher::detLayerGeomLabel_
private

Definition at line 273 of file TrajSeedMatcher.h.

Referenced by doEventSetup(), and TrajSeedMatcher().

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

Definition at line 263 of file TrajSeedMatcher.h.

Referenced by doEventSetup().

float TrajSeedMatcher::kPhiCut_ = -0.801144
staticprivate

Definition at line 264 of file TrajSeedMatcher.h.

Referenced by passTrajPreSel().

edm::ESHandle<MagneticField> TrajSeedMatcher::magField_
private
std::vector<std::unique_ptr<MatchingCuts> > TrajSeedMatcher::matchingCuts_
private

Definition at line 276 of file TrajSeedMatcher.h.

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

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

Definition at line 269 of file TrajSeedMatcher.h.

Referenced by layerHasValidHits().

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

Definition at line 283 of file TrajSeedMatcher.h.

Referenced by getNrHitsRequired(), and TrajSeedMatcher().

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

Definition at line 284 of file TrajSeedMatcher.h.

Referenced by getNrHitsRequired(), and TrajSeedMatcher().

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

Definition at line 270 of file TrajSeedMatcher.h.

Referenced by doEventSetup(), and getNrValidLayersAlongTraj().

std::string TrajSeedMatcher::navSchoolLabel_
private

Definition at line 272 of file TrajSeedMatcher.h.

Referenced by doEventSetup(), and TrajSeedMatcher().

std::unordered_map<std::pair<int,GlobalPoint>,TrajectoryStateOnSurface> TrajSeedMatcher::trajStateFromPointNegChargeCache_
private

Definition at line 290 of file TrajSeedMatcher.h.

Referenced by clearCache(), and getTrajStateFromPoint().

std::unordered_map<std::pair<int,GlobalPoint>,TrajectoryStateOnSurface> TrajSeedMatcher::trajStateFromPointPosChargeCache_
private

Definition at line 289 of file TrajSeedMatcher.h.

Referenced by clearCache(), and getTrajStateFromPoint().

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

Definition at line 287 of file TrajSeedMatcher.h.

Referenced by clearCache(), and getTrajStateFromVtx().

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

Definition at line 286 of file TrajSeedMatcher.h.

Referenced by clearCache(), and getTrajStateFromVtx().

bool TrajSeedMatcher::useRecoVertex_
private

Definition at line 275 of file TrajSeedMatcher.h.

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