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 23 of file TrajSeedMatcher.cc.

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

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  matchingCuts_.push_back(MatchingCuts(cutPSet));
34  }
35 
36  if(minNrHitsValidLayerBins_.size()+1!=minNrHits_.size()){
37  throw cms::Exception("InvalidConfig")<<" minNrHitsValidLayerBins should be 1 less than minNrHits when its "<<minNrHitsValidLayerBins_.size()<<" vs "<<minNrHits_.size();
38  }
39 }
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 251 of file TrajSeedMatcher.cc.

References trajStateFromPointNegChargeCache_, trajStateFromPointPosChargeCache_, trajStateFromVtxNegChargeCache_, and trajStateFromVtxPosChargeCache_.

Referenced by compatibleSeeds().

252 {
257 }
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 81 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().

83 {
85  throw cms::Exception("LogicError") <<__FUNCTION__<<" can not make pixel seeds as event setup has not properly been called";
86  }
87 
88  clearCache();
89 
90  std::vector<SeedWithInfo> matchedSeeds;
91  for(const auto& seed : seeds) {
92  std::vector<HitInfo> matchedHitsNeg = processSeed(seed,candPos,vprim,energy,-1);
93  std::vector<HitInfo> matchedHitsPos = processSeed(seed,candPos,vprim,energy,+1);
94  int nrValidLayersPos = 0;
95  int nrValidLayersNeg = 0;
96  if(matchedHitsNeg.size()>=2){
97  nrValidLayersNeg = getNrValidLayersAlongTraj(matchedHitsNeg[0],
98  matchedHitsNeg[1],
99  candPos,vprim,energy,-1);
100  }
101  if(matchedHitsPos.size()>=2){
102  nrValidLayersPos = getNrValidLayersAlongTraj(matchedHitsPos[0],
103  matchedHitsPos[1],
104  candPos,vprim,energy,+1);
105  }
106 
107  int nrValidLayers = std::max(nrValidLayersNeg,nrValidLayersPos);
108  size_t nrHitsRequired = getNrHitsRequired(nrValidLayers);
109  //so we require the number of hits to exactly match, this is because we currently do not
110  //do any duplicate cleaning for the input seeds
111  //this means is a hit pair with a 3rd hit will appear twice (or however many hits it has)
112  //so if you did >=nrHitsRequired, you would get the same seed multiple times
113  //ideally we should fix this and clean our input seed collection so each seed is only in once
114  //also it should be studied what impact having a 3rd hit has on a GsfTrack
115  //ie will we get a significantly different result seeding with a hit pair
116  //and the same the hit pair with a 3rd hit added
117  //in that case, perhaps it should be >=
118  if(matchedHitsNeg.size()==nrHitsRequired ||
119  matchedHitsPos.size()==nrHitsRequired){
120  matchedSeeds.push_back({seed,matchedHitsPos,matchedHitsNeg,nrValidLayers});
121  }
122 
123 
124  }
125  return matchedSeeds;
126 }
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 67 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().

68 {
70  iSetup.get<IdealMagneticFieldRecord>().get(magField_);
71  cacheIDMagField_=iSetup.get<IdealMagneticFieldRecord>().cacheIdentifier();
72  forwardPropagator_=std::make_unique<PropagatorWithMaterial>(alongMomentum,kElectronMass_,&*(magField_));
73  backwardPropagator_=std::make_unique<PropagatorWithMaterial>(oppositeToMomentum,kElectronMass_,&*(magField_));
74  }
77 }
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 330 of file TrajSeedMatcher.cc.

References minNrHits_, and minNrHitsValidLayerBins_.

Referenced by compatibleSeeds().

331 {
332  for(size_t binNr=0;binNr<minNrHitsValidLayerBins_.size();binNr++){
333  if(nrValidLayers<minNrHitsValidLayerBins_[binNr]) return minNrHits_[binNr];
334  }
335  return minNrHits_.back();
336 
337 }
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 269 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().

273 {
274  double zVertex = useRecoVertex_ ? vprim.z() : getZVtxFromExtrapolation(vprim,hit1.pos(),candPos);
275  GlobalPoint vertex(vprim.x(),vprim.y(),zVertex);
276 
277  FreeTrajectoryState firstHitFreeTraj = FTSFromVertexToPointFactory::get(*magField_,hit1.pos(),
278  vertex, energy, charge);
279  const TrajectoryStateOnSurface& secondHitTraj = getTrajStateFromPoint(*hit2.hit(),firstHitFreeTraj,hit1.pos(),*forwardPropagator_);
280  return getNrValidLayersAlongTraj(hit2.hit()->geographicalId(),secondHitTraj);
281 }
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 283 of file TrajSeedMatcher.cc.

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

284 {
285 
286  const DetLayer* detLayer = detLayerGeom_->idToLayer(hitId);
287  if(detLayer==nullptr) return 0;
288 
289  const FreeTrajectoryState& hitFreeState = *hitTrajState.freeState();
290  const std::vector<const DetLayer*> inLayers = navSchool_->compatibleLayers(*detLayer,hitFreeState,oppositeToMomentum);
291  const std::vector<const DetLayer*> outLayers = navSchool_->compatibleLayers(*detLayer,hitFreeState,alongMomentum);
292 
293  int nrValidLayers=1; //because our current hit is also valid and wont be included in the count otherwise
294  int nrPixInLayers=0;
295  int nrPixOutLayers=0;
296  for(auto layer : inLayers){
297  if(GeomDetEnumerators::isTrackerPixel(layer->subDetector())){
298  nrPixInLayers++;
299  if(layerHasValidHits(*layer,hitTrajState,*backwardPropagator_)) nrValidLayers++;
300  }
301  }
302  for(auto layer : outLayers){
303  if(GeomDetEnumerators::isTrackerPixel(layer->subDetector())){
304  nrPixOutLayers++;
305  if(layerHasValidHits(*layer,hitTrajState,*forwardPropagator_)) nrValidLayers++;
306  }
307  }
308  return nrValidLayers;
309 }
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 203 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().

204 {
205 
206  auto& trajStateFromPointCache = initialState.charge()==1 ? trajStateFromPointPosChargeCache_ :
208 
209  auto key = std::make_pair(hit.det()->gdetIndex(),point);
210  auto res = trajStateFromPointCache.find(key);
211  if(res!=trajStateFromPointCache.end()) return res->second;
212  else{ //doesnt exist, need to make it
213  //FIXME: check for efficiency
214  auto val = trajStateFromPointCache.emplace(key,propagator.propagate(initialState,hit.det()->surface()));
215  return val.first->second;
216  }
217 }
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 188 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().

189 {
190  auto& trajStateFromVtxCache = initialState.charge()==1 ? trajStateFromVtxPosChargeCache_ :
192 
193  auto key = hit.det()->gdetIndex();
194  auto res = trajStateFromVtxCache.find(key);
195  if(res!=trajStateFromVtxCache.end()) return res->second;
196  else{ //doesnt exist, need to make it
197  //FIXME: check for efficiency
198  auto val = trajStateFromVtxCache.emplace(key,propagator.propagate(initialState,hit.det()->surface()));
199  return val.first->second;
200  }
201 }
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 168 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().

170 {
171  auto sq = [](float x){return x*x;};
172  auto calRDiff = [sq](const GlobalPoint& p1,const GlobalPoint& p2){
173  return std::sqrt(sq(p2.x()-p1.x()) + sq(p2.y()-p1.y()));
174  };
175  const double r1Diff = calRDiff(primeVtxPos,hitPos);
176  const double r2Diff = calRDiff(hitPos,candPos);
177  return hitPos.z() - r1Diff*(candPos.z()-hitPos.z())/r2Diff;
178 }
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 311 of file TrajSeedMatcher.cc.

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

Referenced by getNrValidLayersAlongTraj().

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

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

Referenced by ElectronNHitSeedProducer::fillDescriptions().

42 {
44  desc.add<bool>("useRecoVertex",false);
45  desc.add<std::string>("navSchool","SimpleNavigationSchool");
46  desc.add<std::string>("detLayerGeom","hltESPGlobalDetLayerGeometry");
47  desc.add<std::vector<int> >("minNrHitsValidLayerBins",{4});
48  desc.add<std::vector<unsigned int> >("minNrHits",{2,3});
49 
50 
52  cutsDesc.add<double>("dPhiMax",0.04);
53  cutsDesc.add<double>("dRZMax",0.09);
54  cutsDesc.add<double>("dRZMaxLowEtThres",20.);
55  cutsDesc.add<std::vector<double> >("dRZMaxLowEtEtaBins",std::vector<double>{1.,1.5});
56  cutsDesc.add<std::vector<double> >("dRZMaxLowEt",std::vector<double>{0.09,0.15,0.09});
58  defaults.addParameter<double>("dPhiMax",0.04);
59  defaults.addParameter<double>("dRZMax",0.09);
60  defaults.addParameter<double>("dRZMaxLowEtThres",0.09);
61  defaults.addParameter<std::vector<double> >("dRZMaxLowEtEtaBins",std::vector<double>{1.,1.5});
62  defaults.addParameter<std::vector<double> >("dRZMaxLowEt",std::vector<double>{0.09,0.09,0.09});
63  desc.addVPSet("matchingCuts",cutsDesc,std::vector<edm::ParameterSet>{defaults,defaults,defaults});
64  return desc;
65 }
def defaults(locpath, dataType, var)
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 231 of file TrajSeedMatcher.cc.

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

Referenced by processSeed().

237 {
238  const TrajectorySeed::range& hits = seed.recHits();
239  auto hitIt = hits.first+hitNr;
240 
241  if(hitIt->isValid()){
242  const TrajectoryStateOnSurface& trajState = getTrajStateFromPoint(*hitIt,initialState,prevHitPos,propagator);
243  if(trajState.isValid()){
244  return HitInfo(vtxPos,trajState,*hitIt);
245  }
246  }
247  return HitInfo();
248 
249 }
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 219 of file TrajSeedMatcher.cc.

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

Referenced by processSeed().

220 {
221  const TrajectorySeed::range& hits = seed.recHits();
222  auto hitIt = hits.first;
223 
224  if(hitIt->isValid()){
225  const TrajectoryStateOnSurface& trajStateFromVtx = getTrajStateFromVtx(*hitIt,initialState,propagator);
226  if(trajStateFromVtx.isValid()) return HitInfo(vtxPos,trajStateFromVtx,*hitIt);
227  }
228  return HitInfo();
229 }
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 259 of file TrajSeedMatcher.cc.

References Exception, and matchingCuts_.

Referenced by processSeed().

260 {
261  if(hitNr<matchingCuts_.size()){
262  return matchingCuts_[hitNr](hit,scEt,scEta);
263  }else{
264  throw cms::Exception("LogicError") <<" Error, attempting to apply selection to hit "<<hitNr<<" but only cuts for "<<matchingCuts_.size()<<" defined";
265  }
266 
267 }
std::vector< MatchingCuts > matchingCuts_
bool TrajSeedMatcher::passTrajPreSel ( const GlobalPoint hitPos,
const GlobalPoint candPos 
) const
private

Definition at line 180 of file TrajSeedMatcher.cc.

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

181 {
182  float dt = hitPos.x()*candPos.x()+hitPos.y()*candPos.y();
183  if (dt<0) return false;
184  if (dt<kPhiCut_*(candPos.perp()*hitPos.perp())) return false;
185  return true;
186 }
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 132 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().

134 {
135  const float candEta = candPos.eta();
136  const float candEt = energy*std::sin(candPos.theta());
137 
138  FreeTrajectoryState trajStateFromVtx = FTSFromVertexToPointFactory::get(*magField_, candPos, vprim, energy, charge);
140  TrajectoryStateOnSurface initialTrajState(trajStateFromVtx,*bpb(trajStateFromVtx.position(),
141  trajStateFromVtx.momentum()));
142 
143  std::vector<HitInfo> matchedHits;
144  HitInfo firstHit = matchFirstHit(seed,initialTrajState,vprim,*backwardPropagator_);
145  if(passesMatchSel(firstHit,0,candEt,candEta)){
146  matchedHits.push_back(firstHit);
147 
148  //now we can figure out the z vertex
149  double zVertex = useRecoVertex_ ? vprim.z() : getZVtxFromExtrapolation(vprim,firstHit.pos(),candPos);
150  GlobalPoint vertex(vprim.x(),vprim.y(),zVertex);
151 
152  FreeTrajectoryState firstHitFreeTraj = FTSFromVertexToPointFactory::get(*magField_, firstHit.pos(),
153  vertex, energy, charge) ;
154 
155  GlobalPoint prevHitPos = firstHit.pos();
156  for(size_t hitNr=1;hitNr<matchingCuts_.size() && hitNr<seed.nHits();hitNr++){
157  HitInfo hit = match2ndToNthHit(seed,firstHitFreeTraj,hitNr,prevHitPos,vertex,*forwardPropagator_);
158  if(passesMatchSel(hit,hitNr,candEt,candEta)){
159  matchedHits.push_back(hit);
160  prevHitPos = hit.pos();
161  }else break;
162  }
163  }
164  return matchedHits;
165 }
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().