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

class  HitInfo
 
struct  MatchInfo
 
class  MatchingCuts
 
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 HitInfo &hit1, const HitInfo &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::HitInfo match2ndToNthHit (const TrajectorySeed &seed, const FreeTrajectoryState &trajState, const size_t hitNr, const GlobalPoint &prevHitPos, const GlobalPoint &vtxPos, const PropagatorWithMaterial &propagator)
 
TrajSeedMatcher::HitInfo matchFirstHit (const TrajectorySeed &seed, const TrajectoryStateOnSurface &trajState, const GlobalPoint &vtxPos, const PropagatorWithMaterial &propagator)
 
bool passesMatchSel (const HitInfo &hit, const size_t hitNr, const float scEt, const float scEta) const
 
bool passTrajPreSel (const GlobalPoint &hitPos, const GlobalPoint &candPos) const
 
std::vector< HitInfoprocessSeed (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< MatchingCutsmatchingCuts_
 
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 77 of file TrajSeedMatcher.h.

Constructor & Destructor Documentation

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

Definition at line 21 of file TrajSeedMatcher.cc.

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

21  :
23  minNrHits_(pset.getParameter<std::vector<unsigned int> >("minNrHits")),
24  minNrHitsValidLayerBins_(pset.getParameter<std::vector<int> >("minNrHitsValidLayerBins"))
25 {
26  useRecoVertex_ = pset.getParameter<bool>("useRecoVertex");
27  navSchoolLabel_ = pset.getParameter<std::string>("navSchool");
28  detLayerGeomLabel_ = pset.getParameter<std::string>("detLayerGeom");
29  const auto cutsPSets=pset.getParameter<std::vector<edm::ParameterSet> >("matchingCuts");
30  for(const auto & cutPSet : cutsPSets){
31  matchingCuts_.push_back(MatchingCuts(cutPSet));
32  }
33 
34  if(minNrHitsValidLayerBins_.size()+1!=minNrHits_.size()){
35  throw cms::Exception("InvalidConfig")<<" minNrHitsValidLayerBins should be 1 less than minNrHits when its "<<minNrHitsValidLayerBins_.size()<<" vs "<<minNrHits_.size();
36  }
37 }
T getParameter(std::string const &) const
const std::vector< int > minNrHitsValidLayerBins_
unsigned long long cacheIDMagField_
std::vector< 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 243 of file TrajSeedMatcher.cc.

References trajStateFromPointNegChargeCache_, trajStateFromPointPosChargeCache_, trajStateFromVtxNegChargeCache_, and trajStateFromVtxPosChargeCache_.

Referenced by compatibleSeeds().

244 {
249 }
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 73 of file TrajSeedMatcher.cc.

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

Referenced by ElectronNHitSeedProducer::produce().

75 {
77  throw cms::Exception("LogicError") <<__FUNCTION__<<" can not make pixel seeds as event setup has not properly been called";
78  }
79 
80  clearCache();
81 
82  std::vector<SeedWithInfo> matchedSeeds;
83  for(const auto& seed : seeds) {
84  std::vector<HitInfo> matchedHitsNeg = processSeed(seed,candPos,vprim,energy,-1);
85  std::vector<HitInfo> matchedHitsPos = processSeed(seed,candPos,vprim,energy,+1);
86  int nrValidLayersPos = 0;
87  int nrValidLayersNeg = 0;
88  if(matchedHitsNeg.size()>=2){
89  nrValidLayersNeg = getNrValidLayersAlongTraj(matchedHitsNeg[0],
90  matchedHitsNeg[1],
91  candPos,vprim,energy,-1);
92  }
93  if(matchedHitsPos.size()>=2){
94  nrValidLayersPos = getNrValidLayersAlongTraj(matchedHitsPos[0],
95  matchedHitsPos[1],
96  candPos,vprim,energy,+1);
97  }
98 
99  int nrValidLayers = std::max(nrValidLayersNeg,nrValidLayersPos);
100  size_t nrHitsRequired = getNrHitsRequired(nrValidLayers);
101  //so we require the number of hits to exactly match, this is because we currently do not
102  //do any duplicate cleaning for the input seeds
103  //this means is a hit pair with a 3rd hit will appear twice (or however many hits it has)
104  //so if you did >=nrHitsRequired, you would get the same seed multiple times
105  //ideally we should fix this and clean our input seed collection so each seed is only in once
106  //also it should be studied what impact having a 3rd hit has on a GsfTrack
107  //ie will we get a significantly different result seeding with a hit pair
108  //and the same the hit pair with a 3rd hit added
109  //in that case, perhaps it should be >=
110  if(matchedHitsNeg.size()==nrHitsRequired ||
111  matchedHitsPos.size()==nrHitsRequired){
112  matchedSeeds.push_back({seed,matchedHitsPos,matchedHitsNeg,nrValidLayers});
113  }
114 
115 
116  }
117  return matchedSeeds;
118 }
std::unique_ptr< PropagatorWithMaterial > forwardPropagator_
edm::ESHandle< MagneticField > magField_
int getNrValidLayersAlongTraj(const HitInfo &hit1, const HitInfo &hit2, const GlobalPoint &candPos, const GlobalPoint &vprim, const float energy, const int charge)
size_t getNrHitsRequired(const int nrValidLayers) const
std::vector< HitInfo > processSeed(const TrajectorySeed &seed, const GlobalPoint &candPos, const GlobalPoint &vprim, const float energy, const int charge)
bool isValid() const
Definition: ESHandle.h:47
std::unique_ptr< PropagatorWithMaterial > backwardPropagator_
void TrajSeedMatcher::doEventSetup ( const edm::EventSetup iSetup)

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

60 {
62  iSetup.get<IdealMagneticFieldRecord>().get(magField_);
63  cacheIDMagField_=iSetup.get<IdealMagneticFieldRecord>().cacheIdentifier();
64  forwardPropagator_=std::make_unique<PropagatorWithMaterial>(alongMomentum,kElectronMass_,&*(magField_));
65  backwardPropagator_=std::make_unique<PropagatorWithMaterial>(oppositeToMomentum,kElectronMass_,&*(magField_));
66  }
69 }
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_
const T & get() const
Definition: EventSetup.h:56
static float kElectronMass_
std::string detLayerGeomLabel_
std::unique_ptr< PropagatorWithMaterial > backwardPropagator_
size_t TrajSeedMatcher::getNrHitsRequired ( const int  nrValidLayers) const
private

Definition at line 322 of file TrajSeedMatcher.cc.

References minNrHits_, and minNrHitsValidLayerBins_.

Referenced by compatibleSeeds().

323 {
324  for(size_t binNr=0;binNr<minNrHitsValidLayerBins_.size();binNr++){
325  if(nrValidLayers<minNrHitsValidLayerBins_[binNr]) return minNrHits_[binNr];
326  }
327  return minNrHits_.back();
328 
329 }
const std::vector< int > minNrHitsValidLayerBins_
const std::vector< unsigned int > minNrHits_
int TrajSeedMatcher::getNrValidLayersAlongTraj ( const HitInfo hit1,
const HitInfo hit2,
const GlobalPoint candPos,
const GlobalPoint vprim,
const float  energy,
const int  charge 
)
private

Definition at line 261 of file TrajSeedMatcher.cc.

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

Referenced by compatibleSeeds().

265 {
266  double zVertex = useRecoVertex_ ? vprim.z() : getZVtxFromExtrapolation(vprim,hit1.pos(),candPos);
267  GlobalPoint vertex(vprim.x(),vprim.y(),zVertex);
268 
269  FreeTrajectoryState firstHitFreeTraj = FTSFromVertexToPointFactory::get(*magField_,hit1.pos(),
270  vertex, energy, charge);
271  const TrajectoryStateOnSurface& secondHitTraj = getTrajStateFromPoint(*hit2.hit(),firstHitFreeTraj,hit1.pos(),*forwardPropagator_);
272  return getNrValidLayersAlongTraj(hit2.hit()->geographicalId(),secondHitTraj);
273 }
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_
int getNrValidLayersAlongTraj(const HitInfo &hit1, const HitInfo &hit2, const GlobalPoint &candPos, const GlobalPoint &vprim, const float energy, const int charge)
T z() const
Definition: PV3DBase.h:64
T x() const
Definition: PV3DBase.h:62
int TrajSeedMatcher::getNrValidLayersAlongTraj ( const DetId hitId,
const TrajectoryStateOnSurface hitTrajState 
) const
private

Definition at line 275 of file TrajSeedMatcher.cc.

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

276 {
277 
278  const DetLayer* detLayer = detLayerGeom_->idToLayer(hitId);
279  if(detLayer==nullptr) return 0;
280 
281  const FreeTrajectoryState& hitFreeState = *hitTrajState.freeState();
282  const std::vector<const DetLayer*> inLayers = navSchool_->compatibleLayers(*detLayer,hitFreeState,oppositeToMomentum);
283  const std::vector<const DetLayer*> outLayers = navSchool_->compatibleLayers(*detLayer,hitFreeState,alongMomentum);
284 
285  int nrValidLayers=1; //because our current hit is also valid and wont be included in the count otherwise
286  int nrPixInLayers=0;
287  int nrPixOutLayers=0;
288  for(auto layer : inLayers){
289  if(GeomDetEnumerators::isTrackerPixel(layer->subDetector())){
290  nrPixInLayers++;
291  if(layerHasValidHits(*layer,hitTrajState,*backwardPropagator_)) nrValidLayers++;
292  }
293  }
294  for(auto layer : outLayers){
295  if(GeomDetEnumerators::isTrackerPixel(layer->subDetector())){
296  nrPixOutLayers++;
297  if(layerHasValidHits(*layer,hitTrajState,*forwardPropagator_)) nrValidLayers++;
298  }
299  }
300  return nrValidLayers;
301 }
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.
bool isTrackerPixel(const GeomDetEnumerators::SubDetector m)
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
const TrajectoryStateOnSurface & TrajSeedMatcher::getTrajStateFromPoint ( const TrackingRecHit hit,
const FreeTrajectoryState initialState,
const GlobalPoint point,
const PropagatorWithMaterial propagator 
)
private

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

196 {
197 
198  auto& trajStateFromPointCache = initialState.charge()==1 ? trajStateFromPointPosChargeCache_ :
200 
201  auto key = std::make_pair(hit.det()->gdetIndex(),point);
202  auto res = trajStateFromPointCache.find(key);
203  if(res!=trajStateFromPointCache.end()) return res->second;
204  else{ //doesnt exist, need to make it
205  //FIXME: check for efficiency
206  auto val = trajStateFromPointCache.emplace(key,propagator.propagate(initialState,hit.det()->surface()));
207  return val.first->second;
208  }
209 }
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:4
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 180 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().

181 {
182  auto& trajStateFromVtxCache = initialState.charge()==1 ? trajStateFromVtxPosChargeCache_ :
184 
185  auto key = hit.det()->gdetIndex();
186  auto res = trajStateFromVtxCache.find(key);
187  if(res!=trajStateFromVtxCache.end()) return res->second;
188  else{ //doesnt exist, need to make it
189  //FIXME: check for efficiency
190  auto val = trajStateFromVtxCache.emplace(key,propagator.propagate(initialState,hit.det()->surface()));
191  return val.first->second;
192  }
193 }
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:4
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 160 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().

162 {
163  auto sq = [](float x){return x*x;};
164  auto calRDiff = [sq](const GlobalPoint& p1,const GlobalPoint& p2){
165  return std::sqrt(sq(p2.x()-p1.x()) + sq(p2.y()-p1.y()));
166  };
167  const double r1Diff = calRDiff(primeVtxPos,hitPos);
168  const double r2Diff = calRDiff(hitPos,candPos);
169  return hitPos.z() - r1Diff*(candPos.z()-hitPos.z())/r2Diff;
170 }
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 303 of file TrajSeedMatcher.cc.

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

Referenced by getNrValidLayersAlongTraj().

305 {
306  //FIXME: do not hardcode with werid magic numbers stolen from ancient tracking code
307  //its taken from https://cmssdt.cern.ch/dxr/CMSSW/source/RecoTracker/TrackProducer/interface/TrackProducerBase.icc#165
308  //which inspires this code
309  Chi2MeasurementEstimator estimator(30.,-3.0,0.5,2.0,0.5,1.e12); // same as defauts....
310 
311  const std::vector<GeometricSearchDet::DetWithState>& detWithState = layer.compatibleDets(hitSurState,propToLayerFromState,estimator);
312  if(detWithState.empty()) return false;
313  else{
314  DetId id = detWithState.front().first->geographicalId();
316  if(measDet.isActive()) return true;
317  else return false;
318  }
319 }
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 39 of file TrajSeedMatcher.cc.

References edm::ParameterSetDescription::add(), edm::ParameterSetDescription::addVPSet(), and AlCaHLTBitMon_QueryRunRegistry::string.

Referenced by ElectronNHitSeedProducer::fillDescriptions().

40 {
42  desc.add<bool>("useRecoVertex",false);
43  desc.add<std::string>("navSchool","SimpleNavigationSchool");
44  desc.add<std::string>("detLayerGeom","hltESPGlobalDetLayerGeometry");
45  desc.add<std::vector<int> >("minNrHitsValidLayerBins",{4});
46  desc.add<std::vector<unsigned int> >("minNrHits",{2,3});
47 
48 
50  cutsDesc.add<double>("dPhiMax",0.04);
51  cutsDesc.add<double>("dRZMax",0.09);
52  cutsDesc.add<double>("dRZMaxLowEtThres",20.);
53  cutsDesc.add<std::vector<double> >("dRZMaxLowEtEtaBins",std::vector<double>{1.,1.5});
54  cutsDesc.add<std::vector<double> >("dRZMaxLowEt",std::vector<double>{0.09,0.15,0.09});
55  desc.addVPSet("matchingCuts",cutsDesc);
56  return desc;
57 }
ParameterDescriptionBase * add(U const &iLabel, T const &value)
TrajSeedMatcher::HitInfo 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 223 of file TrajSeedMatcher.cc.

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

Referenced by processSeed().

229 {
230  const TrajectorySeed::range& hits = seed.recHits();
231  auto hitIt = hits.first+hitNr;
232 
233  if(hitIt->isValid()){
234  const TrajectoryStateOnSurface& trajState = getTrajStateFromPoint(*hitIt,initialState,prevHitPos,propagator);
235  if(trajState.isValid()){
236  return HitInfo(vtxPos,trajState,*hitIt);
237  }
238  }
239  return HitInfo();
240 
241 }
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::HitInfo TrajSeedMatcher::matchFirstHit ( const TrajectorySeed seed,
const TrajectoryStateOnSurface trajState,
const GlobalPoint vtxPos,
const PropagatorWithMaterial propagator 
)
private

Definition at line 211 of file TrajSeedMatcher.cc.

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

Referenced by processSeed().

212 {
213  const TrajectorySeed::range& hits = seed.recHits();
214  auto hitIt = hits.first;
215 
216  if(hitIt->isValid()){
217  const TrajectoryStateOnSurface& trajStateFromVtx = getTrajStateFromVtx(*hitIt,initialState,propagator);
218  if(trajStateFromVtx.isValid()) return HitInfo(vtxPos,trajStateFromVtx,*hitIt);
219  }
220  return HitInfo();
221 }
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 HitInfo hit,
const size_t  hitNr,
const float  scEt,
const float  scEta 
) const
private

Definition at line 251 of file TrajSeedMatcher.cc.

References Exception, and matchingCuts_.

Referenced by processSeed().

252 {
253  if(hitNr<matchingCuts_.size()){
254  return matchingCuts_[hitNr](hit,scEt,scEta);
255  }else{
256  throw cms::Exception("LogicError") <<" Error, attempting to apply selection to hit "<<hitNr<<" but only cuts for "<<matchingCuts_.size()<<" defined";
257  }
258 
259 }
std::vector< MatchingCuts > matchingCuts_
bool TrajSeedMatcher::passTrajPreSel ( const GlobalPoint hitPos,
const GlobalPoint candPos 
) const
private

Definition at line 172 of file TrajSeedMatcher.cc.

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

173 {
174  float dt = hitPos.x()*candPos.x()+hitPos.y()*candPos.y();
175  if (dt<0) return false;
176  if (dt<kPhiCut_*(candPos.perp()*hitPos.perp())) return false;
177  return true;
178 }
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::HitInfo > TrajSeedMatcher::processSeed ( const TrajectorySeed seed,
const GlobalPoint candPos,
const GlobalPoint vprim,
const float  energy,
const int  charge 
)
private

Definition at line 124 of file TrajSeedMatcher.cc.

References backwardPropagator_, ALCARECOTkAlJpsiMuMu_cff::charge, PV3DBase< T, PVType, FrameType >::eta(), forwardPropagator_, FTSFromVertexToPointFactory::get(), getZVtxFromExtrapolation(), magField_, match2ndToNthHit(), matchFirstHit(), matchingCuts_, TrajectorySeed::nHits(), passesMatchSel(), TrajSeedMatcher::HitInfo::pos(), 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().

126 {
127  const float candEta = candPos.eta();
128  const float candEt = energy*std::sin(candPos.theta());
129 
130  FreeTrajectoryState trajStateFromVtx = FTSFromVertexToPointFactory::get(*magField_, candPos, vprim, energy, charge);
132  TrajectoryStateOnSurface initialTrajState(trajStateFromVtx,*bpb(trajStateFromVtx.position(),
133  trajStateFromVtx.momentum()));
134 
135  std::vector<HitInfo> matchedHits;
136  HitInfo firstHit = matchFirstHit(seed,initialTrajState,vprim,*backwardPropagator_);
137  if(passesMatchSel(firstHit,0,candEt,candEta)){
138  matchedHits.push_back(firstHit);
139 
140  //now we can figure out the z vertex
141  double zVertex = useRecoVertex_ ? vprim.z() : getZVtxFromExtrapolation(vprim,firstHit.pos(),candPos);
142  GlobalPoint vertex(vprim.x(),vprim.y(),zVertex);
143 
144  FreeTrajectoryState firstHitFreeTraj = FTSFromVertexToPointFactory::get(*magField_, firstHit.pos(),
145  vertex, energy, charge) ;
146 
147  GlobalPoint prevHitPos = firstHit.pos();
148  for(size_t hitNr=1;hitNr<matchingCuts_.size() && hitNr<seed.nHits();hitNr++){
149  HitInfo hit = match2ndToNthHit(seed,firstHitFreeTraj,hitNr,prevHitPos,vertex,*forwardPropagator_);
150  if(passesMatchSel(hit,hitNr,candEt,candEta)){
151  matchedHits.push_back(hit);
152  prevHitPos = hit.pos();
153  }else break;
154  }
155  }
156  return matchedHits;
157 }
static FreeTrajectoryState get(MagneticField const &magField, GlobalPoint const &xmeas, GlobalPoint const &xvert, float momentum, TrackCharge charge)
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
std::unique_ptr< PropagatorWithMaterial > forwardPropagator_
T y() const
Definition: PV3DBase.h:63
TrajSeedMatcher::HitInfo matchFirstHit(const TrajectorySeed &seed, const TrajectoryStateOnSurface &trajState, const GlobalPoint &vtxPos, const PropagatorWithMaterial &propagator)
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_
std::vector< MatchingCuts > matchingCuts_
TrajSeedMatcher::HitInfo match2ndToNthHit(const TrajectorySeed &seed, const FreeTrajectoryState &trajState, const size_t hitNr, const GlobalPoint &prevHitPos, const GlobalPoint &vtxPos, const PropagatorWithMaterial &propagator)
T z() const
Definition: PV3DBase.h:64
bool passesMatchSel(const HitInfo &hit, const size_t hitNr, const float scEt, const float scEta) const
T eta() const
Definition: PV3DBase.h:76
unsigned int nHits() const
T x() const
Definition: PV3DBase.h:62
std::unique_ptr< PropagatorWithMaterial > backwardPropagator_
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 220 of file TrajSeedMatcher.h.

Referenced by doEventSetup().

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

Definition at line 224 of file TrajSeedMatcher.h.

Referenced by doEventSetup(), and getNrValidLayersAlongTraj().

std::string TrajSeedMatcher::detLayerGeomLabel_
private

Definition at line 226 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 216 of file TrajSeedMatcher.h.

Referenced by doEventSetup().

float TrajSeedMatcher::kPhiCut_ = -0.801144
staticprivate

Definition at line 217 of file TrajSeedMatcher.h.

Referenced by passTrajPreSel().

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

Definition at line 229 of file TrajSeedMatcher.h.

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

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

Definition at line 222 of file TrajSeedMatcher.h.

Referenced by layerHasValidHits().

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

Definition at line 236 of file TrajSeedMatcher.h.

Referenced by getNrHitsRequired(), and TrajSeedMatcher().

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

Definition at line 237 of file TrajSeedMatcher.h.

Referenced by getNrHitsRequired(), and TrajSeedMatcher().

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

Definition at line 223 of file TrajSeedMatcher.h.

Referenced by doEventSetup(), and getNrValidLayersAlongTraj().

std::string TrajSeedMatcher::navSchoolLabel_
private

Definition at line 225 of file TrajSeedMatcher.h.

Referenced by doEventSetup(), and TrajSeedMatcher().

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

Definition at line 243 of file TrajSeedMatcher.h.

Referenced by clearCache(), and getTrajStateFromPoint().

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

Definition at line 242 of file TrajSeedMatcher.h.

Referenced by clearCache(), and getTrajStateFromPoint().

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

Definition at line 240 of file TrajSeedMatcher.h.

Referenced by clearCache(), and getTrajStateFromVtx().

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

Definition at line 239 of file TrajSeedMatcher.h.

Referenced by clearCache(), and getTrajStateFromVtx().

bool TrajSeedMatcher::useRecoVertex_
private

Definition at line 228 of file TrajSeedMatcher.h.

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