CMS 3D CMS Logo

List of all members | Public Member Functions | Private Attributes
CandidateSimMuonMatcher Class Reference

#include <CandidateSimMuonMatcher.h>

Inheritance diagram for CandidateSimMuonMatcher:
IOMTFEmulationObserver

Public Member Functions

TrajectoryStateOnSurface atStation2 (const FreeTrajectoryState &ftsStart) const
 
void beginRun (edm::EventSetup const &eventSetup) override
 
 CandidateSimMuonMatcher (const edm::ParameterSet &edmCfg, const OMTFConfiguration *omtfConfig, const edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > &magneticFieldEsToken, const edm::ESGetToken< Propagator, TrackingComponentsRecord > &propagatorEsToken)
 
std::vector< MatchingResultcleanMatching (std::vector< MatchingResult > matchingResults, std::vector< const l1t::RegionalMuonCand *> &muonCands, AlgoMuons &ghostBustedProcMuons)
 
void endJob () override
 
std::vector< MatchingResultgetMatchingResults ()
 
std::vector< const l1t::RegionalMuonCand * > ghostBust (const l1t::RegionalMuonCandBxCollection *mtfCands, const AlgoMuons &gbCandidates, AlgoMuons &ghostBustedProcMuons)
 
MatchingResult match (const l1t::RegionalMuonCand *omtfCand, const AlgoMuonPtr &procMuon, const SimTrack &simTrack, TrajectoryStateOnSurface &tsof)
 
MatchingResult match (const l1t::RegionalMuonCand *omtfCand, const AlgoMuonPtr &procMuon, const TrackingParticle &trackingParticle, TrajectoryStateOnSurface &tsof)
 
std::vector< MatchingResultmatch (std::vector< const l1t::RegionalMuonCand *> &muonCands, AlgoMuons &ghostBustedProcMuons, const edm::SimTrackContainer *simTracks, const edm::SimVertexContainer *simVertices, std::function< bool(const SimTrack &)> const &simTrackFilter)
 
std::vector< MatchingResultmatch (std::vector< const l1t::RegionalMuonCand *> &muonCands, AlgoMuons &ghostBustedProcMuons, const TrackingParticleCollection *trackingParticles, std::function< bool(const TrackingParticle &)> const &simTrackFilter)
 
void observeEventBegin (const edm::Event &event) override
 
void observeEventEnd (const edm::Event &event, std::unique_ptr< l1t::RegionalMuonCandBxCollection > &finalCandidates) override
 
void observeProcesorEmulation (unsigned int iProcessor, l1t::tftype mtfType, const std::shared_ptr< OMTFinput > &, const AlgoMuons &algoCandidates, const AlgoMuons &gbCandidates, const std::vector< l1t::RegionalMuonCand > &candMuons) override
 
TrajectoryStateOnSurface propagate (const SimTrack &simTrack, const edm::SimVertexContainer *simVertices)
 
TrajectoryStateOnSurface propagate (const TrackingParticle &trackingParticle)
 
FreeTrajectoryState simTrackToFts (const SimTrack &simTrack, const SimVertex &simVertex)
 
FreeTrajectoryState simTrackToFts (const TrackingParticle &trackingParticle)
 
 ~CandidateSimMuonMatcher () override
 
- Public Member Functions inherited from IOMTFEmulationObserver
virtual void addProcesorData (std::string key, boost::property_tree::ptree &procDataTree)
 
 IOMTFEmulationObserver ()
 
virtual void observeProcesorBegin (unsigned int iProcessor, l1t::tftype mtfType)
 
virtual ~IOMTFEmulationObserver ()
 

Private Attributes

TH1D * deltaPhiPropCandMean = nullptr
 
TH1D * deltaPhiPropCandStdDev = nullptr
 
const edm::ParameterSetedmCfg
 
AlgoMuons gbCandidates
 
edm::ESHandle< MagneticFieldmagField
 
const edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > & magneticFieldEsToken
 
std::vector< MatchingResultmatchingResults
 
const OMTFConfigurationomtfConfig
 
edm::ESHandle< Propagatorpropagator
 
const edm::ESGetToken< Propagator, TrackingComponentsRecord > & propagatorEsToken
 

Detailed Description

Definition at line 97 of file CandidateSimMuonMatcher.h.

Constructor & Destructor Documentation

◆ CandidateSimMuonMatcher()

CandidateSimMuonMatcher::CandidateSimMuonMatcher ( const edm::ParameterSet edmCfg,
const OMTFConfiguration omtfConfig,
const edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > &  magneticFieldEsToken,
const edm::ESGetToken< Propagator, TrackingComponentsRecord > &  propagatorEsToken 
)

Definition at line 42 of file CandidateSimMuonMatcher.cc.

References deltaPhiPropCandMean, deltaPhiPropCandStdDev, edmCfg, contentValuesFiles::fullPath, edm::ParameterSet::getParameter(), testHGCalDigi_cfg::inFile, and AlCaHLTBitMon_QueryRunRegistry::string.

48  edmCfg(edmCfg),
51  std::string muonMatcherFileName = edmCfg.getParameter<edm::FileInPath>("muonMatcherFile").fullPath();
52  TFile inFile(muonMatcherFileName.c_str());
53  edm::LogImportant("l1tOmtfEventPrint") << " CandidateSimMuonMatcher: using muonMatcherFileName "
54  << muonMatcherFileName << std::endl;
55 
56  deltaPhiPropCandMean = (TH1D*)inFile.Get("deltaPhiPropCandMean");
57  deltaPhiPropCandStdDev = (TH1D*)inFile.Get("deltaPhiPropCandStdDev");
58 }
T getParameter(std::string const &) const
Definition: ParameterSet.h:307
const OMTFConfiguration * omtfConfig
const edm::ESGetToken< Propagator, TrackingComponentsRecord > & propagatorEsToken
const edm::ParameterSet & edmCfg
Log< level::Error, true > LogImportant
const edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > & magneticFieldEsToken

◆ ~CandidateSimMuonMatcher()

CandidateSimMuonMatcher::~CandidateSimMuonMatcher ( )
override

Definition at line 60 of file CandidateSimMuonMatcher.cc.

60 {}

Member Function Documentation

◆ atStation2()

TrajectoryStateOnSurface CandidateSimMuonMatcher::atStation2 ( const FreeTrajectoryState ftsStart) const

Definition at line 308 of file CandidateSimMuonMatcher.cc.

References funct::abs(), Propagator::propagate(), propagator, and omtf::DataWord64::rpc.

Referenced by propagate().

308  {
309  // first propagate to MB2 assuming that muon is within barrel+overlap
310  // 512.401cm is R of middle of the MB2
312  GlobalPoint(0., 0., 0.), TkRotation<float>(), SimpleCylinderBounds(512.401, 512.401, -900, 900)));
313  TrajectoryStateOnSurface trackAtRPC = propagator->propagate(ftsStart, *rpc);
314  float zAtRPC = trackAtRPC.globalPosition().z();
315  // check if propagated track within barrel+overlap, |z| = 660.5cm is edge of MB2 (B field on)
316  if (std::abs(zAtRPC) > 660.5) { //endcap, RE2, z = +-790cm
317  rpc = ReferenceCountingPointer<Surface>(new BoundDisk(GlobalPoint(0., 0., std::copysign(790., zAtRPC)),
319  SimpleDiskBounds(300., 810., -10., 10.)));
320  trackAtRPC = propagator->propagate(ftsStart, *rpc);
321  }
322  return trackAtRPC;
323 }
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
Cylinder BoundCylinder
Definition: BoundCylinder.h:17
TrajectoryStateOnSurface propagate(STA const &state, SUR const &surface) const
Definition: Propagator.h:50
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
edm::ESHandle< Propagator > propagator
Disk BoundDisk
Definition: BoundDisk.h:54

◆ beginRun()

void CandidateSimMuonMatcher::beginRun ( edm::EventSetup const &  eventSetup)
overridevirtual

Reimplemented from IOMTFEmulationObserver.

Definition at line 62 of file CandidateSimMuonMatcher.cc.

References options_cfi::eventSetup, magField, magneticFieldEsToken, propagator, and propagatorEsToken.

62  {
63  //TODO use edm::ESWatcher<MagneticField> magneticFieldRecordWatcher;
66 }
edm::ESHandle< MagneticField > magField
const edm::ESGetToken< Propagator, TrackingComponentsRecord > & propagatorEsToken
edm::ESHandle< Propagator > propagator
const edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > & magneticFieldEsToken

◆ cleanMatching()

std::vector< MatchingResult > CandidateSimMuonMatcher::cleanMatching ( std::vector< MatchingResult matchingResults,
std::vector< const l1t::RegionalMuonCand *> &  muonCands,
AlgoMuons ghostBustedProcMuons 
)

Definition at line 503 of file CandidateSimMuonMatcher.cc.

References a, b, MatchingResult::duplicate, testProducerWithPsetDescEmpty_cfi::i1, testProducerWithPsetDescEmpty_cfi::i2, trackerHitRTTI::isMatched(), LogTrace, MatchingResult::matched, matchingResults, mps_fire::result, and jetUpdater_cfi::sort.

Referenced by match().

505  {
506  //Cleaning the matching
507  std::sort(
508  matchingResults.begin(), matchingResults.end(), [](const MatchingResult& a, const MatchingResult& b) -> bool {
509  return a.matchingLikelihood > b.matchingLikelihood;
510  });
511 
512  for (unsigned int i1 = 0; i1 < matchingResults.size(); i1++) {
514  for (unsigned int i2 = i1 + 1; i2 < matchingResults.size(); i2++) {
515  if ((matchingResults[i1].trackingParticle &&
516  matchingResults[i1].trackingParticle == matchingResults[i2].trackingParticle) ||
517  (matchingResults[i1].simTrack && matchingResults[i1].simTrack == matchingResults[i2].simTrack) ||
518  (matchingResults[i1].muonCand == matchingResults[i2].muonCand)) {
519  //if matchingResults[i1].muonCand == false, then it is also OK here
521  }
522  }
523  }
524  }
525 
526  std::vector<MatchingResult> cleanedMatchingResults;
527  for (auto& matchingResult : matchingResults) {
528  if (matchingResult.result == MatchingResult::ResultType::matched ||
529  matchingResult.muonCand ==
530  nullptr) //adding also the simTracks that are not matched at all, before it is assured that they are not duplicates
531  cleanedMatchingResults.push_back(matchingResult);
532  if (matchingResult.result == MatchingResult::ResultType::matched) {
533  /* TODO fix if filling of the deltaPhiPropCandMean and deltaPhiPropCandStdDev is needed
534  if(fillMean) {
535  double ptGen = matchingResult.genPt;
536  deltaPhiPropCandMean->Fill(ptGen, matchingResult.deltaPhi); //filling overflow is ok here
537  deltaPhiPropCandStdDev->Fill(ptGen, matchingResult.deltaPhi * matchingResult.deltaPhi);
538  }*/
539  }
540  }
541 
542  //adding the muonCand-s that were not matched, i.e. in order to analyze them later
543  unsigned int iCand = 0;
544  for (auto& muonCand : muonCands) {
545  bool isMatched = false;
546  for (auto& matchingResult : cleanedMatchingResults) {
547  if (matchingResult.muonCand == muonCand) {
548  isMatched = true;
549  break;
550  }
551  }
552 
553  if (!isMatched) {
555  result.muonCand = muonCand;
556  result.procMuon = ghostBustedProcMuons.at(iCand);
557  cleanedMatchingResults.push_back(result);
558  }
559  iCand++;
560  }
561 
562  LogTrace("l1tOmtfEventPrint") << "CandidateSimMuonMatcher::cleanMatching:" << __LINE__
563  << " CandidateSimMuonMatcher::match cleanedMatchingResults:" << std::endl;
564  for (auto& result : cleanedMatchingResults) {
565  if (result.trackingParticle || result.simTrack)
566  LogTrace("l1tOmtfEventPrint") << "CandidateSimMuonMatcher::cleanMatching:" << __LINE__ << " simTrack type "
567  << result.pdgId << " pt " << std::setw(8) << result.genPt << " eta " << std::setw(8)
568  << result.genEta << " phi " << std::setw(8) << result.genPhi;
569  else
570  LogTrace("l1tOmtfEventPrint") << "no matched track ";
571 
572  if (result.muonCand) {
573  LogTrace("l1tOmtfEventPrint") << " muonCand pt " << std::setw(8) << result.muonCand->hwPt() << " hwQual "
574  << result.muonCand->hwQual() << " hwEta " << result.muonCand->hwEta()
575  << " deltaEta " << std::setw(8) << result.deltaEta << " deltaPhi " << std::setw(8)
576  << result.deltaPhi << " Likelihood " << std::setw(8) << result.matchingLikelihood
577  << " result " << (short)result.result;
578  LogTrace("l1tOmtfEventPrint") << " procMuon " << *(result.procMuon) << std::endl;
579  } else
580  LogTrace("l1tOmtfEventPrint") << " no muonCand "
581  << " result " << (short)result.result << std::endl;
582  }
583  LogTrace("l1tOmtfEventPrint") << " " << std::endl;
584 
585  return cleanedMatchingResults;
586 }
#define LogTrace(id)
bool isMatched(TrackingRecHit const &hit)
double b
Definition: hdecay.h:120
double a
Definition: hdecay.h:121
std::vector< MatchingResult > matchingResults

◆ endJob()

void CandidateSimMuonMatcher::endJob ( void  )
overridevirtual

Implements IOMTFEmulationObserver.

Definition at line 229 of file CandidateSimMuonMatcher.cc.

229 {}

◆ getMatchingResults()

std::vector<MatchingResult> CandidateSimMuonMatcher::getMatchingResults ( )
inline

◆ ghostBust()

std::vector< const l1t::RegionalMuonCand * > CandidateSimMuonMatcher::ghostBust ( const l1t::RegionalMuonCandBxCollection mtfCands,
const AlgoMuons gbCandidates,
AlgoMuons ghostBustedProcMuons 
)

Definition at line 231 of file CandidateSimMuonMatcher.cc.

References funct::abs(), BXVector< T >::at(), OMTFConfiguration::calcGlobalPhi(), gbCandidates, hwGmtPhiToGlobalPhi(), testProducerWithPsetDescEmpty_cfi::i1, testProducerWithPsetDescEmpty_cfi::i2, LogTrace, omtfConfig, and BXVector< T >::size().

Referenced by observeEventEnd().

232  {
233  if (gbCandidates.size() != mtfCands->size(0)) {
234  edm::LogError("l1tOmtfEventPrint") << "CandidateSimMuonMatcher::ghostBust(): gbCandidates.size() "
235  << gbCandidates.size() << " != mtfCands.size() " << mtfCands->size();
236  }
237 
238  boost::dynamic_bitset<> isKilled(mtfCands->size(0), false);
239 
240  for (unsigned int i1 = 0; i1 < mtfCands->size(0); ++i1) {
241  if (mtfCands->at(0, i1).hwPt() == 0)
242  continue;
243  LogTrace("l1tOmtfEventPrint") << "\nCandidateSimMuonMatcher::ghostBust regionalCand pt " << std::setw(3)
244  << mtfCands->at(0, i1).hwPt() << " qual " << std::setw(2)
245  << mtfCands->at(0, i1).hwQual() << " proc " << std::setw(2)
246  << mtfCands->at(0, i1).processor();
247  for (unsigned int i2 = i1 + 1; i2 < mtfCands->size(0); ++i2) {
248  auto& mtfCand1 = mtfCands->at(0, i1);
249  auto& mtfCand2 = mtfCands->at(0, i2);
250  if (mtfCand2.hwPt() == 0)
251  continue;
252 
253  if (std::abs(mtfCand1.hwEta() - mtfCand2.hwEta()) < (0.3 / 0.010875)) {
254  int gloablHwPhi1 = omtfConfig->calcGlobalPhi(mtfCand1.hwPhi(), mtfCand1.processor());
255  int gloablHwPhi2 = omtfConfig->calcGlobalPhi(mtfCand2.hwPhi(), mtfCand2.processor());
256 
257  //one can use the phi in radians like that:
258  //double globalPhi1 = hwGmtPhiToGlobalPhi(omtfConfig->calcGlobalPhi( mtfCand1.hwPhi(), mtfCand1.processor() ) );
259  //double globalPhi2 = hwGmtPhiToGlobalPhi(omtfConfig->calcGlobalPhi( mtfCand2.hwPhi(), mtfCand2.processor() ) );
260 
261  //0.0872664626 = 5 deg, i.e. the same window as in the OMTF ghost buster
262  if (std::abs(gloablHwPhi1 - gloablHwPhi2) < 8) {
263  //if (mtfCand1.hwQual() > mtfCand2.hwQual()) //TODO this is used in the uGMT
264  if (gbCandidates[i1]->getFiredLayerCnt() >
265  gbCandidates[i2]->getFiredLayerCnt()) //but this should be better - but probably the difference is not big
266  {
267  isKilled[i2] = true;
268  } else
269  isKilled[i1] = true;
270  }
271  }
272  }
273  }
274 
275  std::vector<const l1t::RegionalMuonCand*> resultCands;
276 
277  for (unsigned int i1 = 0; i1 < mtfCands->size(0); ++i1) {
278  //dropping candidates with quality 0 !!!!!!!!!!!!!!!!!!!! fixme if not needed
279  if (!isKilled[i1] && mtfCands->at(0, i1).hwPt()) {
280  resultCands.push_back(&(mtfCands->at(0, i1)));
281  ghostBustedProcMuons.push_back(gbCandidates.at(i1));
282  }
283 
284  if (mtfCands->at(0, i1).hwPt()) {
285  LogTrace("l1tOmtfEventPrint") << "CandidateSimMuonMatcher::ghostBust\n regionalCand pt " << std::setw(3)
286  << mtfCands->at(0, i1).hwPt() << " qual " << std::setw(2)
287  << mtfCands->at(0, i1).hwQual() << " proc " << std::setw(2)
288  << mtfCands->at(0, i1).processor() << " eta " << std::setw(4)
289  << mtfCands->at(0, i1).hwEta() << " gloablEta " << std::setw(8)
290  << mtfCands->at(0, i1).hwEta() * 0.010875 << " hwPhi " << std::setw(3)
291  << mtfCands->at(0, i1).hwPhi() << " globalPhi " << std::setw(8)
292  << hwGmtPhiToGlobalPhi(omtfConfig->calcGlobalPhi(mtfCands->at(0, i1).hwPhi(),
293  mtfCands->at(0, i1).processor()))
294  << " fireadLayers " << std::bitset<18>(mtfCands->at(0, i1).trackAddress().at(0))
295  << " gb isKilled " << isKilled.test(i1) << std::endl;
296 
297  LogTrace("l1tOmtfEventPrint") << *(gbCandidates.at(i1)) << std::endl;
298  }
299  }
300 
301  if (resultCands.size() >= 3)
302  LogTrace("l1tOmtfEventPrint") << " ghost !!!!!! " << std::endl;
303  LogTrace("l1tOmtfEventPrint") << std::endl;
304 
305  return resultCands;
306 }
double hwGmtPhiToGlobalPhi(int phi)
Log< level::Error, false > LogError
const OMTFConfiguration * omtfConfig
#define LogTrace(id)
unsigned size(int bx) const
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
const T & at(int bx, unsigned i) const
int calcGlobalPhi(int locPhi, int proc) const

◆ match() [1/4]

MatchingResult CandidateSimMuonMatcher::match ( const l1t::RegionalMuonCand omtfCand,
const AlgoMuonPtr procMuon,
const SimTrack simTrack,
TrajectoryStateOnSurface tsof 
)

Definition at line 383 of file CandidateSimMuonMatcher.cc.

References funct::abs(), OMTFConfiguration::calcGlobalPhi(), deltaPhiPropCandMean, deltaPhiPropCandStdDev, PV3DBase< T, PVType, FrameType >::eta(), foldPhi(), TrajectoryStateOnSurface::globalPosition(), l1t::RegionalMuonCand::hwEta(), hwGmtPhiToGlobalPhi(), l1t::RegionalMuonCand::hwPhi(), l1t::RegionalMuonCand::hwPt(), l1t::RegionalMuonCand::hwQual(), LogTrace, M_PI, MatchingResult::matched, SiStripPI::mean, normal_pdf(), omtfConfig, PV3DBase< T, PVType, FrameType >::phi(), l1t::RegionalMuonCand::processor(), muonRecoAnalyzer_cfi::ptBin, mps_fire::result, and cscDigiValidation_cfi::simTrack.

Referenced by match(), and observeEventEnd().

386  {
388 
389  double candGloablEta = muonCand->hwEta() * 0.010875;
390  //if (std::abs(simTrack.momentum().eta() - candGloablEta) < 0.3) //has no sense for displaced muons
391  {
392  double candGlobalPhi = omtfConfig->calcGlobalPhi(muonCand->hwPhi(), muonCand->processor());
393  candGlobalPhi = hwGmtPhiToGlobalPhi(candGlobalPhi);
394 
395  if (candGlobalPhi > M_PI)
396  candGlobalPhi = candGlobalPhi - (2. * M_PI);
397 
398  result.deltaPhi = foldPhi(tsof.globalPosition().phi() - candGlobalPhi);
399  result.deltaEta = tsof.globalPosition().eta() - candGloablEta;
400 
401  result.propagatedPhi = tsof.globalPosition().phi();
402  result.propagatedEta = tsof.globalPosition().eta();
403 
404  double mean = 0;
405  double sigma = 1;
406  //if(!fillMean)
407  {
408  auto ptBin = deltaPhiPropCandMean->FindBin(simTrack.momentum().pt());
409  mean = deltaPhiPropCandMean->GetBinContent(ptBin);
410  sigma = deltaPhiPropCandStdDev->GetBinContent(ptBin);
411  }
412  result.matchingLikelihood = normal_pdf(result.deltaPhi, mean, sigma); //TODO temporary solution
413 
414  result.muonCand = muonCand;
415  result.procMuon = procMuon;
416 
417  double treshold = 6. * sigma;
418  if (simTrack.momentum().pt() > 20)
419  treshold = 7. * sigma;
420  if (simTrack.momentum().pt() > 100)
421  treshold = 20. * sigma;
422 
423  if (std::abs(result.deltaPhi - mean) < treshold && std::abs(result.deltaEta) < 0.3)
425 
426  LogTrace("l1tOmtfEventPrint") << "CandidateSimMuonMatcher::match: simTrack type " << simTrack.type() << " pt "
427  << std::setw(8) << simTrack.momentum().pt() << " eta " << std::setw(8)
428  << simTrack.momentum().eta() << " phi " << std::setw(8) << simTrack.momentum().phi()
429  << " propagation eta " << std::setw(8) << tsof.globalPosition().eta() << " phi "
430  << tsof.globalPosition().phi() << "\n muonCand pt " << std::setw(8)
431  << muonCand->hwPt() << " candGloablEta " << std::setw(8) << candGloablEta
432  << " candGlobalPhi " << std::setw(8) << candGlobalPhi << " hwQual "
433  << muonCand->hwQual() << " deltaEta " << std::setw(8) << result.deltaEta
434  << " deltaPhi " << std::setw(8) << result.deltaPhi << " sigma " << std::setw(8)
435  << sigma << " Likelihood " << std::setw(8) << result.matchingLikelihood << " result "
436  << (short)result.result << std::endl;
437  }
438 
439  return result;
440 }
double hwGmtPhiToGlobalPhi(int phi)
Geom::Phi< T > phi() const
Definition: PV3DBase.h:66
T eta() const
Definition: PV3DBase.h:73
float normal_pdf(float x, float m, float s)
const OMTFConfiguration * omtfConfig
#define LogTrace(id)
double foldPhi(double phi)
GlobalPoint globalPosition() const
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
#define M_PI
int calcGlobalPhi(int locPhi, int proc) const

◆ match() [2/4]

MatchingResult CandidateSimMuonMatcher::match ( const l1t::RegionalMuonCand omtfCand,
const AlgoMuonPtr procMuon,
const TrackingParticle trackingParticle,
TrajectoryStateOnSurface tsof 
)

Definition at line 442 of file CandidateSimMuonMatcher.cc.

References funct::abs(), OMTFConfiguration::calcGlobalPhi(), deltaPhiPropCandMean, deltaPhiPropCandStdDev, PV3DBase< T, PVType, FrameType >::eta(), foldPhi(), TrajectoryStateOnSurface::globalPosition(), l1t::RegionalMuonCand::hwEta(), hwGmtPhiToGlobalPhi(), l1t::RegionalMuonCand::hwPhi(), l1t::RegionalMuonCand::hwPt(), l1t::RegionalMuonCand::hwQual(), LogTrace, M_PI, MatchingResult::matched, SiStripPI::mean, TrackingParticle::momentum(), normal_pdf(), omtfConfig, TrackingParticle::pdgId(), PV3DBase< T, PVType, FrameType >::phi(), l1t::RegionalMuonCand::processor(), TrackingParticle::pt(), muonRecoAnalyzer_cfi::ptBin, and mps_fire::result.

445  {
446  MatchingResult result(trackingParticle);
447 
448  double candGloablEta = muonCand->hwEta() * 0.010875;
449  //if (std::abs(trackingParticle.momentum().eta() - candGloablEta) < 0.3) //has no sense for displaced muons
450  {
451  double candGlobalPhi = omtfConfig->calcGlobalPhi(muonCand->hwPhi(), muonCand->processor());
452  candGlobalPhi = hwGmtPhiToGlobalPhi(candGlobalPhi);
453 
454  if (candGlobalPhi > M_PI)
455  candGlobalPhi = candGlobalPhi - (2. * M_PI);
456 
457  result.deltaPhi = foldPhi(tsof.globalPosition().phi() - candGlobalPhi);
458  result.deltaEta = tsof.globalPosition().eta() - candGloablEta;
459 
460  result.propagatedPhi = tsof.globalPosition().phi();
461  result.propagatedEta = tsof.globalPosition().eta();
462 
463  double mean = 0;
464  double sigma = 1;
465  //if(!fillMean)
466  {
467  auto ptBin = deltaPhiPropCandMean->FindBin(trackingParticle.pt());
468 
469  mean = deltaPhiPropCandMean->GetBinContent(ptBin);
470  sigma = deltaPhiPropCandStdDev->GetBinContent(ptBin);
471  }
472 
473  result.matchingLikelihood = normal_pdf(result.deltaPhi, mean, sigma); //TODO temporary solution
474 
475  result.muonCand = muonCand;
476  result.procMuon = procMuon;
477 
478  double treshold = 6. * sigma;
479  if (trackingParticle.pt() > 20)
480  treshold = 7. * sigma;
481  if (trackingParticle.pt() > 100)
482  treshold = 20. * sigma;
483 
484  if (std::abs(result.deltaPhi - mean) < treshold && std::abs(result.deltaEta) < 0.3)
486 
487  LogTrace("l1tOmtfEventPrint") << "CandidateSimMuonMatcher::match: trackingParticle type "
488  << trackingParticle.pdgId() << " pt " << std::setw(8) << trackingParticle.pt()
489  << " eta " << std::setw(8) << trackingParticle.momentum().eta() << " phi "
490  << std::setw(8) << trackingParticle.momentum().phi() << " propagation eta "
491  << std::setw(8) << tsof.globalPosition().eta() << " phi "
492  << tsof.globalPosition().phi() << " muonCand pt " << std::setw(8) << muonCand->hwPt()
493  << " candGloablEta " << std::setw(8) << candGloablEta << " candGlobalPhi "
494  << std::setw(8) << candGlobalPhi << " hwQual " << muonCand->hwQual() << " deltaEta "
495  << std::setw(8) << result.deltaEta << " deltaPhi " << std::setw(8) << result.deltaPhi
496  << " Likelihood " << std::setw(8) << result.matchingLikelihood << " result "
497  << (short)result.result << std::endl;
498  }
499 
500  return result;
501 }
int pdgId() const
PDG ID.
Vector momentum() const
spatial momentum vector
double hwGmtPhiToGlobalPhi(int phi)
Geom::Phi< T > phi() const
Definition: PV3DBase.h:66
T eta() const
Definition: PV3DBase.h:73
float normal_pdf(float x, float m, float s)
const OMTFConfiguration * omtfConfig
#define LogTrace(id)
double foldPhi(double phi)
GlobalPoint globalPosition() const
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
#define M_PI
int calcGlobalPhi(int locPhi, int proc) const
double pt() const
Transverse momentum. Note this is taken from the first SimTrack only.

◆ match() [3/4]

std::vector< MatchingResult > CandidateSimMuonMatcher::match ( std::vector< const l1t::RegionalMuonCand *> &  muonCands,
AlgoMuons ghostBustedProcMuons,
const edm::SimTrackContainer simTracks,
const edm::SimVertexContainer simVertices,
std::function< bool(const SimTrack &)> const &  simTrackFilter 
)

Definition at line 588 of file CandidateSimMuonMatcher.cc.

References funct::abs(), cleanMatching(), PV3DBase< T, PVType, FrameType >::eta(), TrajectoryStateOnSurface::globalPosition(), TrajectoryStateOnSurface::isValid(), LogTrace, match(), MatchingResult::matched, muonTagProbeFilters_cff::matched, matchingResults, propagate(), MatchingResult::propagationFailed, mps_fire::result, cscDigiValidation_cfi::simTrack, TrackCandidateProducer_cfi::simTracks, HGCalValidator_cfi::simVertices, and run3scouting_cff::vtxInd.

592  {
593  std::vector<MatchingResult> matchingResults;
594 
595  for (auto& simTrack : *simTracks) {
596  if (!simTrackFilter(simTrack))
597  continue;
598 
599  LogTrace("l1tOmtfEventPrint") << "CandidateSimMuonMatcher::match, simTrack type " << std::setw(3) << simTrack.type()
600  << " pt " << std::setw(9) << simTrack.momentum().pt() << " eta " << std::setw(9)
601  << simTrack.momentum().eta() << " phi " << std::setw(9) << simTrack.momentum().phi()
602  << std::endl;
603 
604  bool matched = false;
605 
607  if (!tsof.isValid()) {
608  LogTrace("l1tOmtfEventPrint") << __FUNCTION__ << ":" << __LINE__ << " propagation failed" << std::endl;
611  continue; //no sense to do matching
612  }
613 
614  //checking if the propagated track is inside the OMTF range, TODO - tune the range!!!!!!!!!!!!!!!!!
615  //eta 0.7 is the beginning of the MB2, while 1.31 is mid of RE2 + some margin
616  //the eta range wider than the nominal OMTF region is needed, as in any case muons outside this region are seen by the OMTF
617  //so it better to train the nn suich that is able to measure its pt, as it may affect the rate
618  if ((std::abs(tsof.globalPosition().eta()) >= 0.7) && (std::abs(tsof.globalPosition().eta()) <= 1.31)) {
619  LogTrace("l1tOmtfEventPrint")
620  << "CandidateSimMuonMatcher::match simTrack IS in OMTF region, matching to the omtfCands";
621  } else {
622  LogTrace("l1tOmtfEventPrint") << "simTrack NOT in OMTF region ";
623  continue;
624  }
625 
626  /* TODO fix if filling of the deltaPhiPropCandMean and deltaPhiPropCandStdDev is needed
627  double ptGen = simTrack.momentum().pt();
628  if(ptGen >= deltaPhiVertexProp->GetXaxis()->GetXmax())
629  ptGen = deltaPhiVertexProp->GetXaxis()->GetXmax() - 0.01;
630 
631  deltaPhiVertexProp->Fill(ptGen, simTrack.momentum().phi() - tsof.globalPosition().phi());*/
632 
633  unsigned int iCand = 0;
634  for (auto& muonCand : muonCands) {
635  //dropping very low quality candidates, as they are fakes usually - but it has no sense, then the results are not conclusive
636  //if(muonCand->hwQual() > 1)
637  {
639  if (tsof.isValid()) {
640  result = match(muonCand, ghostBustedProcMuons.at(iCand), simTrack, tsof);
641  }
642  int vtxInd = simTrack.vertIndex();
643  if (vtxInd >= 0) {
644  result.simVertex = &(
645  simVertices->at(vtxInd)); //TODO ?????? something strange is here, was commented in the previous version
646  }
648  matchingResults.push_back(result);
649  matched = true;
650  }
651  }
652  iCand++;
653  }
654 
655  if (!matched) { //we are adding also if it was not matching to any candidate
657  matchingResults.push_back(result);
658  LogTrace("l1tOmtfEventPrint") << __FUNCTION__ << ":" << __LINE__ << " no matching candidate found" << std::endl;
659  }
660  }
661 
662  return cleanMatching(matchingResults, muonCands, ghostBustedProcMuons);
663 }
MatchingResult match(const l1t::RegionalMuonCand *omtfCand, const AlgoMuonPtr &procMuon, const SimTrack &simTrack, TrajectoryStateOnSurface &tsof)
T eta() const
Definition: PV3DBase.h:73
TrajectoryStateOnSurface propagate(const SimTrack &simTrack, const edm::SimVertexContainer *simVertices)
#define LogTrace(id)
std::vector< MatchingResult > cleanMatching(std::vector< MatchingResult > matchingResults, std::vector< const l1t::RegionalMuonCand *> &muonCands, AlgoMuons &ghostBustedProcMuons)
GlobalPoint globalPosition() const
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
std::vector< MatchingResult > matchingResults

◆ match() [4/4]

std::vector< MatchingResult > CandidateSimMuonMatcher::match ( std::vector< const l1t::RegionalMuonCand *> &  muonCands,
AlgoMuons ghostBustedProcMuons,
const TrackingParticleCollection trackingParticles,
std::function< bool(const TrackingParticle &)> const &  simTrackFilter 
)

Definition at line 665 of file CandidateSimMuonMatcher.cc.

References funct::abs(), cleanMatching(), PV3DBase< T, PVType, FrameType >::eta(), TrajectoryStateOnSurface::globalPosition(), TrajectoryStateOnSurface::isValid(), LogTrace, match(), MatchingResult::matched, muonTagProbeFilters_cff::matched, matchingResults, propagate(), MatchingResult::propagationFailed, mps_fire::result, and muonClassificationByHits_cfi::trackingParticles.

669  {
670  std::vector<MatchingResult> matchingResults;
671  LogTrace("l1tOmtfEventPrint") << "CandidateSimMuonMatcher::match trackingParticles->size() "
672  << trackingParticles->size() << std::endl;
673 
674  for (auto& trackingParticle : *trackingParticles) {
675  //LogTrace("l1tOmtfEventPrint") <<"CandidateSimMuonMatcher::match:"<<__LINE__<<" trackingParticle type "<<std::setw(3)<<trackingParticle.pdgId()<<" pt "<<std::setw(9)<<trackingParticle.pt()<<" eta "<<std::setw(9)<<trackingParticle.momentum().eta()<<" phi "<<std::setw(9)<<trackingParticle.momentum().phi()<<std::endl;
676 
677  if (simTrackFilter(trackingParticle) == false)
678  continue;
679 
680  LogTrace("l1tOmtfEventPrint") << "CandidateSimMuonMatcher::match, trackingParticle type " << std::setw(3)
681  << trackingParticle.pdgId() << " pt " << std::setw(9) << trackingParticle.pt()
682  << " eta " << std::setw(9) << trackingParticle.momentum().eta() << " phi "
683  << std::setw(9) << trackingParticle.momentum().phi() << std::endl;
684 
685  bool matched = false;
686 
687  TrajectoryStateOnSurface tsof = propagate(trackingParticle);
688  if (!tsof.isValid()) {
689  LogTrace("l1tOmtfEventPrint") << "CandidateSimMuonMatcher::match:" << __LINE__ << " propagation failed"
690  << std::endl;
693  continue; //no sense to do matching
694  }
695 
696  LogTrace("l1tOmtfEventPrint") << "CandidateSimMuonMatcher::match, tsof.globalPosition().eta() "
697  << tsof.globalPosition().eta();
698 
699  //checking if the propagated track is inside the OMTF range, TODO - tune the range!!!!!!!!!!!!!!!!!
700  //eta 0.7 is the beginning of the MB2, while 1.31 is mid of RE2 + some margin
701  if ((std::abs(tsof.globalPosition().eta()) >= 0.7) && (std::abs(tsof.globalPosition().eta()) <= 1.31)) {
702  LogTrace("l1tOmtfEventPrint")
703  << "CandidateSimMuonMatcher::match trackingParticle IS in OMTF region, matching to the omtfCands";
704  } else {
705  LogTrace("l1tOmtfEventPrint") << "trackingParticle NOT in OMTF region ";
706  continue;
707  }
708 
709  /* TODO fix if filling of the deltaPhiPropCandMean and deltaPhiPropCandStdDev is needed
710  double ptGen = trackingParticle.pt();
711  if(ptGen >= deltaPhiVertexProp->GetXaxis()->GetXmax())
712  ptGen = deltaPhiVertexProp->GetXaxis()->GetXmax() - 0.01;
713 
714  deltaPhiVertexProp->Fill(ptGen, trackingParticle.momentum().phi() - tsof.globalPosition().phi());
715 */
716 
717  unsigned int iCand = 0;
718  for (auto& muonCand : muonCands) {
719  //dropping very low quality candidates, as they are fakes usually - but it has no sense, then the results are not conclusive then
720  /*if(muonCand->hwQual() <= 1)
721  continue; */
722 
724  if (tsof.isValid()) {
725  result = match(muonCand, ghostBustedProcMuons.at(iCand), trackingParticle, tsof);
726  }
727  iCand++;
728 
730  matchingResults.push_back(result);
731  matched = true;
732  }
733  }
734 
735  if (!matched) { //we are adding result also if it there was no matching to any candidate
736  MatchingResult result(trackingParticle);
737  matchingResults.push_back(result);
738  LogTrace("l1tOmtfEventPrint") << __FUNCTION__ << ":" << __LINE__ << " no matching candidate found" << std::endl;
739  }
740  }
741 
742  return cleanMatching(matchingResults, muonCands, ghostBustedProcMuons);
743 }
MatchingResult match(const l1t::RegionalMuonCand *omtfCand, const AlgoMuonPtr &procMuon, const SimTrack &simTrack, TrajectoryStateOnSurface &tsof)
T eta() const
Definition: PV3DBase.h:73
TrajectoryStateOnSurface propagate(const SimTrack &simTrack, const edm::SimVertexContainer *simVertices)
#define LogTrace(id)
std::vector< MatchingResult > cleanMatching(std::vector< MatchingResult > matchingResults, std::vector< const l1t::RegionalMuonCand *> &muonCands, AlgoMuons &ghostBustedProcMuons)
GlobalPoint globalPosition() const
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
std::vector< MatchingResult > matchingResults

◆ observeEventBegin()

void CandidateSimMuonMatcher::observeEventBegin ( const edm::Event event)
overridevirtual

Reimplemented from IOMTFEmulationObserver.

Definition at line 68 of file CandidateSimMuonMatcher.cc.

References gbCandidates.

68 { gbCandidates.clear(); }

◆ observeEventEnd()

void CandidateSimMuonMatcher::observeEventEnd ( const edm::Event event,
std::unique_ptr< l1t::RegionalMuonCandBxCollection > &  finalCandidates 
)
overridevirtual

Reimplemented from IOMTFEmulationObserver.

Definition at line 189 of file CandidateSimMuonMatcher.cc.

References edmCfg, edm::ParameterSet::exists(), gbCandidates, edm::ParameterSet::getParameter(), ghostBust(), LogTrace, match(), matchingResults, edm::Handle< T >::product(), simTrackIsMuonInBx0(), HGCalValidator_cfi::simVertices, and trackingParticleIsMuonInBx0().

190  {
191  LogTrace("l1tOmtfEventPrint") << "\nCandidateSimMuonMatcher::observeEventEnd" << std::endl;
192  AlgoMuons ghostBustedProcMuons;
193  std::vector<const l1t::RegionalMuonCand*> ghostBustedRegionalCands =
194  CandidateSimMuonMatcher::ghostBust(finalCandidates.get(), gbCandidates, ghostBustedProcMuons);
195 
196  matchingResults.clear();
197  if (edmCfg.exists("simTracksTag")) {
199  event.getByLabel(edmCfg.getParameter<edm::InputTag>("simTracksTag"), simTraksHandle);
200 
202  event.getByLabel(edmCfg.getParameter<edm::InputTag>("simVertexesTag"), simVertices);
203 
204  LogTrace("l1tOmtfEventPrint") << "simTraksHandle size " << simTraksHandle.product()->size() << std::endl;
205  LogTrace("l1tOmtfEventPrint") << "simVertices size " << simVertices.product()->size() << std::endl;
206 
207  //TODO use other simTrackFilter if needed <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
208  //we dont want to check the eta of the generated muon, as it is on the vertex,
209  //instead inside match, we check the eta of the propagated track to the second muons station
210  std::function<bool(const SimTrack&)> const& simTrackFilter = simTrackIsMuonInBx0; //simTrackIsMuonInOmtfBx0;
211 
213  ghostBustedRegionalCands, ghostBustedProcMuons, simTraksHandle.product(), simVertices.product(), simTrackFilter);
214 
215  } else if (edmCfg.exists("trackingParticleTag")) {
216  edm::Handle<TrackingParticleCollection> trackingParticleHandle;
217  event.getByLabel(edmCfg.getParameter<edm::InputTag>("trackingParticleTag"), trackingParticleHandle);
218  LogTrace("l1tOmtfEventPrint") << "\nCandidateSimMuonMatcher::observeEventEnd trackingParticleHandle size "
219  << trackingParticleHandle.product()->size() << std::endl;
220 
221  //TODO use other trackParticleFilter if needed <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
222  std::function<bool(const TrackingParticle&)> trackParticleFilter =
223  trackingParticleIsMuonInBx0; //trackingParticleIsMuonInOmtfBx0;
225  match(ghostBustedRegionalCands, ghostBustedProcMuons, trackingParticleHandle.product(), trackParticleFilter);
226  }
227 }
MatchingResult match(const l1t::RegionalMuonCand *omtfCand, const AlgoMuonPtr &procMuon, const SimTrack &simTrack, TrajectoryStateOnSurface &tsof)
T getParameter(std::string const &) const
Definition: ParameterSet.h:307
bool exists(std::string const &parameterName) const
checks if a parameter exists
T const * product() const
Definition: Handle.h:70
#define LogTrace(id)
bool trackingParticleIsMuonInBx0(const TrackingParticle &trackingParticle)
const edm::ParameterSet & edmCfg
bool simTrackIsMuonInBx0(const SimTrack &simTrack)
std::vector< AlgoMuonPtr > AlgoMuons
Definition: AlgoMuon.h:183
std::vector< MatchingResult > matchingResults
std::vector< const l1t::RegionalMuonCand * > ghostBust(const l1t::RegionalMuonCandBxCollection *mtfCands, const AlgoMuons &gbCandidates, AlgoMuons &ghostBustedProcMuons)

◆ observeProcesorEmulation()

void CandidateSimMuonMatcher::observeProcesorEmulation ( unsigned int  iProcessor,
l1t::tftype  mtfType,
const std::shared_ptr< OMTFinput > &  input,
const AlgoMuons algoCandidates,
const AlgoMuons gbCandidates,
const std::vector< l1t::RegionalMuonCand > &  candMuons 
)
overridevirtual

Implements IOMTFEmulationObserver.

Definition at line 70 of file CandidateSimMuonMatcher.cc.

References gbCandidates, OMTFConfiguration::getProcIndx(), LogTrace, and omtfConfig.

75  {
76  //debug
77  unsigned int procIndx = omtfConfig->getProcIndx(iProcessor, mtfType);
78  for (auto& gbCandidate : gbCandidates) {
79  if (gbCandidate->getPtConstr() > 0) {
80  LogTrace("l1tOmtfEventPrint") << "CandidateSimMuonMatcher::observeProcesorEmulation procIndx" << procIndx << " "
81  << *gbCandidate << std::endl;
82  this->gbCandidates.emplace_back(gbCandidate);
83  }
84  }
85 }
const OMTFConfiguration * omtfConfig
#define LogTrace(id)
unsigned int getProcIndx(unsigned int iProcessor, l1t::tftype mtfType) const
input phi should be in the hardware scale (nPhiBins units for 2pi), can be in range -nPhiBins ...

◆ propagate() [1/2]

TrajectoryStateOnSurface CandidateSimMuonMatcher::propagate ( const SimTrack simTrack,
const edm::SimVertexContainer simVertices 
)

Definition at line 347 of file CandidateSimMuonMatcher.cc.

References atStation2(), cscDigiValidation_cfi::simTrack, simTrackToFts(), ecalDetailedTimeRecHit_cfi::simVertex, HGCalValidator_cfi::simVertices, and run3scouting_cff::vtxInd.

Referenced by match().

348  {
350  int vtxInd = simTrack.vertIndex();
351  if (vtxInd < 0) {
352  edm::LogImportant("l1tOmtfEventPrint") << "Track with no vertex, defaulting to (0,0,0)";
353  } else {
355  if (((int)simVertex.vertexId()) != vtxInd) {
356  edm::LogImportant("l1tOmtfEventPrint") << "simVertex.vertexId() != vtxInd. simVertex.vertexId() "
357  << simVertex.vertexId() << " vtxInd " << vtxInd << " !!!!!!!!!!!!!!!!!";
358  }
359  }
360 
362 
363  TrajectoryStateOnSurface tsof = atStation2(ftsTrack); //propagation
364 
365  return tsof;
366 }
TrajectoryStateOnSurface atStation2(const FreeTrajectoryState &ftsStart) const
Log< level::Error, true > LogImportant
FreeTrajectoryState simTrackToFts(const SimTrack &simTrack, const SimVertex &simVertex)

◆ propagate() [2/2]

TrajectoryStateOnSurface CandidateSimMuonMatcher::propagate ( const TrackingParticle trackingParticle)

Definition at line 368 of file CandidateSimMuonMatcher.cc.

References atStation2(), and simTrackToFts().

368  {
369  FreeTrajectoryState ftsTrack = simTrackToFts(trackingParticle);
370 
371  TrajectoryStateOnSurface tsof = atStation2(ftsTrack); //propagation
372 
373  return tsof;
374 }
TrajectoryStateOnSurface atStation2(const FreeTrajectoryState &ftsStart) const
FreeTrajectoryState simTrackToFts(const SimTrack &simTrack, const SimVertex &simVertex)

◆ simTrackToFts() [1/2]

FreeTrajectoryState CandidateSimMuonMatcher::simTrackToFts ( const SimTrack simTrack,
const SimVertex simVertex 
)

Definition at line 325 of file CandidateSimMuonMatcher.cc.

References ALCARECOTkAlJpsiMuMu_cff::charge, magField, CoreSimTrack::momentum(), ecalDetailedTimeRecHit_cfi::simVertex, and CoreSimTrack::type().

Referenced by propagate().

325  {
326  int charge = simTrackPtr.type() > 0 ? -1 : 1; //works for muons
327 
328  GlobalVector p3GV(simTrackPtr.momentum().x(), simTrackPtr.momentum().y(), simTrackPtr.momentum().z());
329  GlobalPoint r3GP(simVertex.position().x(), simVertex.position().y(), simVertex.position().z());
330 
331  GlobalTrajectoryParameters tPars(r3GP, p3GV, charge, &*magField);
332 
333  return FreeTrajectoryState(tPars);
334 }
edm::ESHandle< MagneticField > magField

◆ simTrackToFts() [2/2]

FreeTrajectoryState CandidateSimMuonMatcher::simTrackToFts ( const TrackingParticle trackingParticle)

Definition at line 336 of file CandidateSimMuonMatcher.cc.

References ALCARECOTkAlJpsiMuMu_cff::charge, magField, TrackingParticle::momentum(), TrackingParticle::pdgId(), TrackingParticle::vx(), TrackingParticle::vy(), and TrackingParticle::vz().

336  {
337  int charge = trackingParticle.pdgId() > 0 ? -1 : 1; //works for muons
338 
339  GlobalVector p3GV(trackingParticle.momentum().x(), trackingParticle.momentum().y(), trackingParticle.momentum().z());
340  GlobalPoint r3GP(trackingParticle.vx(), trackingParticle.vy(), trackingParticle.vz());
341 
342  GlobalTrajectoryParameters tPars(r3GP, p3GV, charge, &*magField);
343 
344  return FreeTrajectoryState(tPars);
345 }
int pdgId() const
PDG ID.
Vector momentum() const
spatial momentum vector
double vx() const
x coordinate of parent vertex position
edm::ESHandle< MagneticField > magField
double vy() const
y coordinate of parent vertex position
double vz() const
z coordinate of parent vertex position

Member Data Documentation

◆ deltaPhiPropCandMean

TH1D* CandidateSimMuonMatcher::deltaPhiPropCandMean = nullptr
private

Definition at line 183 of file CandidateSimMuonMatcher.h.

Referenced by CandidateSimMuonMatcher(), and match().

◆ deltaPhiPropCandStdDev

TH1D* CandidateSimMuonMatcher::deltaPhiPropCandStdDev = nullptr
private

Definition at line 184 of file CandidateSimMuonMatcher.h.

Referenced by CandidateSimMuonMatcher(), and match().

◆ edmCfg

const edm::ParameterSet& CandidateSimMuonMatcher::edmCfg
private

Definition at line 172 of file CandidateSimMuonMatcher.h.

Referenced by CandidateSimMuonMatcher(), and observeEventEnd().

◆ gbCandidates

AlgoMuons CandidateSimMuonMatcher::gbCandidates
private

◆ magField

edm::ESHandle<MagneticField> CandidateSimMuonMatcher::magField
private

Definition at line 180 of file CandidateSimMuonMatcher.h.

Referenced by beginRun(), and simTrackToFts().

◆ magneticFieldEsToken

const edm::ESGetToken<MagneticField, IdealMagneticFieldRecord>& CandidateSimMuonMatcher::magneticFieldEsToken
private

Definition at line 177 of file CandidateSimMuonMatcher.h.

Referenced by beginRun().

◆ matchingResults

std::vector<MatchingResult> CandidateSimMuonMatcher::matchingResults
private

◆ omtfConfig

const OMTFConfiguration* CandidateSimMuonMatcher::omtfConfig
private

Definition at line 170 of file CandidateSimMuonMatcher.h.

Referenced by ghostBust(), match(), and observeProcesorEmulation().

◆ propagator

edm::ESHandle<Propagator> CandidateSimMuonMatcher::propagator
private

Definition at line 181 of file CandidateSimMuonMatcher.h.

Referenced by atStation2(), and beginRun().

◆ propagatorEsToken

const edm::ESGetToken<Propagator, TrackingComponentsRecord>& CandidateSimMuonMatcher::propagatorEsToken
private

Definition at line 178 of file CandidateSimMuonMatcher.h.

Referenced by beginRun().