CMS 3D CMS Logo

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

#include <CSCStubMatcher.h>

Public Member Functions

std::map< unsigned int, CSCALCTDigiContaineralcts () const
 
const CSCALCTDigiContaineralctsInChamber (unsigned int) const
 
const CSCALCTDigiContainerallALCTsInChamber (unsigned int) const
 
const CSCCLCTDigiContainerallCLCTsInChamber (unsigned int) const
 all stubs (not necessarily matching) from a particular crossed chamber More...
 
const CSCCorrelatedLCTDigiContainerallLCTsInChamber (unsigned int) const
 
const CSCCorrelatedLCTDigiContainerallMPLCTsInChamber (unsigned int) const
 
CSCALCTDigi bestAlctInChamber (unsigned int) const
 
CSCCLCTDigi bestClctInChamber (unsigned int) const
 best matching from a particular crossed chamber More...
 
CSCCorrelatedLCTDigi bestLctInChamber (unsigned int) const
 
CSCCorrelatedLCTDigi bestMplctInChamber (unsigned int) const
 
std::set< unsigned int > chamberIdsALCT (int csc_type=MuonHitHelper::CSC_ALL) const
 
std::set< unsigned int > chamberIdsAllALCT (int csc_type=MuonHitHelper::CSC_ALL) const
 
std::set< unsigned int > chamberIdsAllCLCT (int csc_type=MuonHitHelper::CSC_ALL) const
 crossed chamber detIds with not necessarily matching stubs More...
 
std::set< unsigned int > chamberIdsAllLCT (int csc_type=MuonHitHelper::CSC_ALL) const
 
std::set< unsigned int > chamberIdsAllMPLCT (int csc_type=MuonHitHelper::CSC_ALL) const
 
std::set< unsigned int > chamberIdsCLCT (int csc_type=MuonHitHelper::CSC_ALL) const
 chamber detIds with matching stubs More...
 
std::set< unsigned int > chamberIdsLCT (int csc_type=MuonHitHelper::CSC_ALL) const
 
std::set< unsigned int > chamberIdsMPLCT (int csc_type=MuonHitHelper::CSC_ALL) const
 
std::map< unsigned int, CSCCLCTDigiContainerclcts () const
 all matching lcts More...
 
const CSCCLCTDigiContainerclctsInChamber (unsigned int) const
 all matching from a particular crossed chamber More...
 
std::shared_ptr< CSCDigiMatchercscDigiMatcher ()
 
 CSCStubMatcher (edm::ParameterSet const &iPS, edm::ConsumesCollector &&iC)
 
std::shared_ptr< GEMDigiMatchergemDigiMatcher ()
 
GlobalPoint getGlobalPosition (unsigned int rawId, const CSCCorrelatedLCTDigi &lct) const
 
void init (const edm::Event &e, const edm::EventSetup &eventSetup)
 initialize the event More...
 
bool lctInChamber (const CSCDetId &id, const CSCCorrelatedLCTDigi &lct) const
 
std::map< unsigned int, CSCCorrelatedLCTDigiContainerlcts () const
 
const CSCCorrelatedLCTDigiContainerlctsInChamber (unsigned int) const
 
void match (const SimTrack &t, const SimVertex &v)
 do the matching More...
 
std::map< unsigned int, CSCCorrelatedLCTDigiContainermplcts () const
 
const CSCCorrelatedLCTDigiContainermplctsInChamber (unsigned int) const
 
int nChambersWithALCT (int min_quality=0) const
 
int nChambersWithCLCT (int min_quality=0) const
 How many CSC chambers with matching stubs of some minimal quality did this SimTrack hit? More...
 
int nChambersWithLCT (int min_quality=0) const
 
int nChambersWithMPLCT (int min_quality=0) const
 
float zpositionOfLayer (unsigned int detid, int layer) const
 
 ~CSCStubMatcher ()
 

Private Member Functions

void addGhostLCTs (const CSCCorrelatedLCTDigi &lct11, const CSCCorrelatedLCTDigi &lct22, CSCCorrelatedLCTDigiContainer &lctcontainer) const
 
void clear ()
 
void matchALCTsToSimTrack (const CSCALCTDigiCollection &)
 
void matchCLCTsToSimTrack (const CSCCLCTDigiCollection &)
 
void matchLCTsToSimTrack (const CSCCorrelatedLCTDigiCollection &)
 
void matchMPLCTsToSimTrack (const CSCCorrelatedLCTDigiCollection &)
 
template<class D >
std::set< unsigned int > selectDetIds (D &, int) const
 

Private Attributes

bool addGhostLCTs_
 
edm::InputTag alctInputTag_
 
edm::Handle< CSCALCTDigiCollectionalctsH_
 
edm::EDGetTokenT< CSCALCTDigiCollectionalctToken_
 
std::map< unsigned int, CSCALCTDigiContainerchamber_to_alcts_
 
std::map< unsigned int, CSCALCTDigiContainerchamber_to_alcts_all_
 
std::map< unsigned int, CSCCLCTDigiContainerchamber_to_clcts_
 
std::map< unsigned int, CSCCLCTDigiContainerchamber_to_clcts_all_
 
std::map< unsigned int, CSCCorrelatedLCTDigiContainerchamber_to_lcts_
 
std::map< unsigned int, CSCCorrelatedLCTDigiContainerchamber_to_lcts_all_
 
std::map< unsigned int, CSCCorrelatedLCTDigiContainerchamber_to_mplcts_
 
std::map< unsigned int, CSCCorrelatedLCTDigiContainerchamber_to_mplcts_all_
 
edm::InputTag clctInputTag_
 
edm::Handle< CSCCLCTDigiCollectionclctsH_
 
edm::EDGetTokenT< CSCCLCTDigiCollectionclctToken_
 
std::shared_ptr< CSCDigiMatchercscDigiMatcher_
 
const CSCGeometrycscGeometry_
 
std::shared_ptr< GEMDigiMatchergemDigiMatcher_
 
edm::ESGetToken< CSCGeometry, MuonGeometryRecordgeomToken_
 
edm::InputTag lctInputTag_
 
edm::Handle< CSCCorrelatedLCTDigiCollectionlctsH_
 
edm::EDGetTokenT< CSCCorrelatedLCTDigiCollectionlctToken_
 
int maxBXALCT_
 
int maxBXCLCT_
 
int maxBXLCT_
 
int maxBXMPLCT_
 
int minBXALCT_
 
int minBXCLCT_
 
int minBXLCT_
 
int minBXMPLCT_
 
int minNHitsChamber_
 
int minNHitsChamberALCT_
 
int minNHitsChamberCLCT_
 
int minNHitsChamberLCT_
 
int minNHitsChamberMPLCT_
 
edm::InputTag mplctInputTag_
 
edm::Handle< CSCCorrelatedLCTDigiCollectionmplctsH_
 
edm::EDGetTokenT< CSCCorrelatedLCTDigiCollectionmplctToken_
 
CSCALCTDigiContainer no_alcts_
 
CSCCLCTDigiContainer no_clcts_
 
CSCCorrelatedLCTDigiContainer no_lcts_
 
CSCCorrelatedLCTDigiContainer no_mplcts_
 
bool useGEMs_
 
bool verboseALCT_
 
bool verboseCLCT_
 
bool verboseLCT_
 
bool verboseMPLCT_
 

Detailed Description

Description: Matching of CSC L1 trigger stubs to SimTrack

Author: Sven Dildick (TAMU), Tao Huang (TAMU)

Definition at line 23 of file CSCStubMatcher.h.

Constructor & Destructor Documentation

◆ CSCStubMatcher()

CSCStubMatcher::CSCStubMatcher ( edm::ParameterSet const &  iPS,
edm::ConsumesCollector &&  iC 
)

Definition at line 7 of file CSCStubMatcher.cc.

References muonCSCStubPSet::cscALCT, muonCSCStubPSet::cscCLCT, muonCSCStubPSet::cscLCT, muonCSCStubPSet::cscMPLCT, edm::ParameterSet::getParameter(), and eostools::move().

7  {
8  useGEMs_ = pSet.getParameter<bool>("useGEMs");
9 
10  const auto& cscCLCT = pSet.getParameter<edm::ParameterSet>("cscCLCT");
11  minBXCLCT_ = cscCLCT.getParameter<int>("minBX");
12  maxBXCLCT_ = cscCLCT.getParameter<int>("maxBX");
13  verboseCLCT_ = cscCLCT.getParameter<int>("verbose");
14  minNHitsChamberCLCT_ = cscCLCT.getParameter<int>("minNHitsChamber");
15 
16  const auto& cscALCT = pSet.getParameter<edm::ParameterSet>("cscALCT");
17  minBXALCT_ = cscALCT.getParameter<int>("minBX");
18  maxBXALCT_ = cscALCT.getParameter<int>("maxBX");
19  verboseALCT_ = cscALCT.getParameter<int>("verbose");
20  minNHitsChamberALCT_ = cscALCT.getParameter<int>("minNHitsChamber");
21 
22  const auto& cscLCT = pSet.getParameter<edm::ParameterSet>("cscLCT");
23  minBXLCT_ = cscLCT.getParameter<int>("minBX");
24  maxBXLCT_ = cscLCT.getParameter<int>("maxBX");
25  verboseLCT_ = cscLCT.getParameter<int>("verbose");
26  minNHitsChamberLCT_ = cscLCT.getParameter<int>("minNHitsChamber");
27  addGhostLCTs_ = cscLCT.getParameter<bool>("addGhosts");
28 
29  const auto& cscMPLCT = pSet.getParameter<edm::ParameterSet>("cscMPLCT");
30  minBXMPLCT_ = cscMPLCT.getParameter<int>("minBX");
31  maxBXMPLCT_ = cscMPLCT.getParameter<int>("maxBX");
32  verboseMPLCT_ = cscMPLCT.getParameter<int>("verbose");
33  minNHitsChamberMPLCT_ = cscMPLCT.getParameter<int>("minNHitsChamber");
34 
35  if (useGEMs_)
36  gemDigiMatcher_.reset(new GEMDigiMatcher(pSet, std::move(iC)));
37  cscDigiMatcher_.reset(new CSCDigiMatcher(pSet, std::move(iC)));
38 
39  clctInputTag_ = cscCLCT.getParameter<edm::InputTag>("inputTag");
40  alctInputTag_ = cscALCT.getParameter<edm::InputTag>("inputTag");
41  lctInputTag_ = cscLCT.getParameter<edm::InputTag>("inputTag");
42  mplctInputTag_ = cscMPLCT.getParameter<edm::InputTag>("inputTag");
43 
48 
50 }
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
edm::InputTag clctInputTag_
edm::EDGetTokenT< CSCCLCTDigiCollection > clctToken_
std::shared_ptr< CSCDigiMatcher > cscDigiMatcher_
edm::EDGetTokenT< CSCCorrelatedLCTDigiCollection > mplctToken_
edm::EDGetTokenT< CSCCorrelatedLCTDigiCollection > lctToken_
edm::EDGetTokenT< CSCALCTDigiCollection > alctToken_
edm::InputTag mplctInputTag_
edm::ESGetToken< CSCGeometry, MuonGeometryRecord > geomToken_
std::shared_ptr< GEMDigiMatcher > gemDigiMatcher_
edm::InputTag alctInputTag_
edm::InputTag lctInputTag_
def move(src, dest)
Definition: eostools.py:511

◆ ~CSCStubMatcher()

CSCStubMatcher::~CSCStubMatcher ( )
inline

Definition at line 27 of file CSCStubMatcher.h.

27 {}

Member Function Documentation

◆ addGhostLCTs()

void CSCStubMatcher::addGhostLCTs ( const CSCCorrelatedLCTDigi lct11,
const CSCCorrelatedLCTDigi lct22,
CSCCorrelatedLCTDigiContainer lctcontainer 
) const
private

Definition at line 683 of file CSCStubMatcher.cc.

References CSCCorrelatedLCTDigi::getALCT(), CSCCorrelatedLCTDigi::getCLCT(), CSCCorrelatedLCTDigi::getKeyWG(), CSCCorrelatedLCTDigi::getStrip(), CSCCorrelatedLCTDigi::setALCT(), CSCCorrelatedLCTDigi::setCLCT(), and CSCCorrelatedLCTDigi::setWireGroup().

685  {
686  int wg1 = lct11.getKeyWG();
687  int wg2 = lct22.getKeyWG();
688  int hs1 = lct11.getStrip();
689  int hs2 = lct22.getStrip();
690 
691  if (!(wg1 == wg2 || hs1 == hs2)) {
692  // flip the ALCTs
693  CSCCorrelatedLCTDigi lct12 = lct11;
694  lct12.setWireGroup(wg2);
695  lct12.setALCT(lct22.getALCT());
696  lct12.setCLCT(lct11.getCLCT());
697  lcts_tmp.push_back(lct12);
698 
699  CSCCorrelatedLCTDigi lct21 = lct22;
700  lct21.setWireGroup(wg1);
701  lct21.setALCT(lct11.getALCT());
702  lct21.setCLCT(lct22.getCLCT());
703  lcts_tmp.push_back(lct21);
704  }
705 }
void setALCT(const CSCALCTDigi &alct)
void setWireGroup(const uint16_t wiregroup)
set wiregroup number
uint16_t getStrip(uint16_t n=2) const
return the key halfstrip from 0,159
const CSCCLCTDigi & getCLCT() const
uint16_t getKeyWG() const
return the key wire group. counts from 0.
void setCLCT(const CSCCLCTDigi &clct)
const CSCALCTDigi & getALCT() const

◆ alcts()

std::map<unsigned int, CSCALCTDigiContainer> CSCStubMatcher::alcts ( ) const
inline

Definition at line 61 of file CSCStubMatcher.h.

References chamber_to_alcts_.

61 { return chamber_to_alcts_; }
std::map< unsigned int, CSCALCTDigiContainer > chamber_to_alcts_

◆ alctsInChamber()

const CSCALCTDigiContainer & CSCStubMatcher::alctsInChamber ( unsigned int  detid) const

Definition at line 484 of file CSCStubMatcher.cc.

484  {
485  if (chamber_to_alcts_.find(detid) == chamber_to_alcts_.end())
486  return no_alcts_;
487  return chamber_to_alcts_.at(detid);
488 }
std::map< unsigned int, CSCALCTDigiContainer > chamber_to_alcts_
CSCALCTDigiContainer no_alcts_

◆ allALCTsInChamber()

const CSCALCTDigiContainer & CSCStubMatcher::allALCTsInChamber ( unsigned int  detid) const

Definition at line 460 of file CSCStubMatcher.cc.

460  {
461  if (chamber_to_alcts_all_.find(detid) == chamber_to_alcts_all_.end())
462  return no_alcts_;
463  return chamber_to_alcts_all_.at(detid);
464 }
CSCALCTDigiContainer no_alcts_
std::map< unsigned int, CSCALCTDigiContainer > chamber_to_alcts_all_

◆ allCLCTsInChamber()

const CSCCLCTDigiContainer & CSCStubMatcher::allCLCTsInChamber ( unsigned int  detid) const

all stubs (not necessarily matching) from a particular crossed chamber

Definition at line 454 of file CSCStubMatcher.cc.

454  {
455  if (chamber_to_clcts_all_.find(detid) == chamber_to_clcts_all_.end())
456  return no_clcts_;
457  return chamber_to_clcts_all_.at(detid);
458 }
std::map< unsigned int, CSCCLCTDigiContainer > chamber_to_clcts_all_
CSCCLCTDigiContainer no_clcts_

◆ allLCTsInChamber()

const CSCCorrelatedLCTDigiContainer & CSCStubMatcher::allLCTsInChamber ( unsigned int  detid) const

Definition at line 466 of file CSCStubMatcher.cc.

466  {
467  if (chamber_to_lcts_all_.find(detid) == chamber_to_lcts_all_.end())
468  return no_lcts_;
469  return chamber_to_lcts_all_.at(detid);
470 }
std::map< unsigned int, CSCCorrelatedLCTDigiContainer > chamber_to_lcts_all_
CSCCorrelatedLCTDigiContainer no_lcts_

◆ allMPLCTsInChamber()

const CSCCorrelatedLCTDigiContainer & CSCStubMatcher::allMPLCTsInChamber ( unsigned int  detid) const

Definition at line 472 of file CSCStubMatcher.cc.

472  {
473  if (chamber_to_mplcts_all_.find(detid) == chamber_to_mplcts_all_.end())
474  return no_mplcts_;
475  return chamber_to_mplcts_all_.at(detid);
476 }
std::map< unsigned int, CSCCorrelatedLCTDigiContainer > chamber_to_mplcts_all_
CSCCorrelatedLCTDigiContainer no_mplcts_

◆ bestAlctInChamber()

CSCALCTDigi CSCStubMatcher::bestAlctInChamber ( unsigned int  detid) const

Definition at line 519 of file CSCStubMatcher.cc.

References mps_fire::i, input, and quality.

519  {
520  //sort stubs based on quality
521  const auto& input(alctsInChamber(detid));
522  int bestQ = 0;
523  int index = -1;
524  for (unsigned int i = 0; i < input.size(); ++i) {
525  int quality = input[i].getQuality();
526  if (quality > bestQ) {
527  bestQ = quality;
528  index = i;
529  }
530  }
531  if (index != -1)
532  return input[index];
533  return CSCALCTDigi();
534 }
static std::string const input
Definition: EdmProvDump.cc:47
const CSCALCTDigiContainer & alctsInChamber(unsigned int) const
string quality

◆ bestClctInChamber()

CSCCLCTDigi CSCStubMatcher::bestClctInChamber ( unsigned int  detid) const

best matching from a particular crossed chamber

Definition at line 502 of file CSCStubMatcher.cc.

References mps_fire::i, input, and quality.

502  {
503  //sort stubs based on quality
504  const auto& input(clctsInChamber(detid));
505  int bestQ = 0;
506  int index = -1;
507  for (unsigned int i = 0; i < input.size(); ++i) {
508  int quality = input[i].getQuality();
509  if (quality > bestQ) {
510  bestQ = quality;
511  index = i;
512  }
513  }
514  if (index != -1)
515  return input[index];
516  return CSCCLCTDigi();
517 }
static std::string const input
Definition: EdmProvDump.cc:47
const CSCCLCTDigiContainer & clctsInChamber(unsigned int) const
all matching from a particular crossed chamber
string quality

◆ bestLctInChamber()

CSCCorrelatedLCTDigi CSCStubMatcher::bestLctInChamber ( unsigned int  detid) const

Definition at line 536 of file CSCStubMatcher.cc.

References mps_fire::i, input, and quality.

536  {
537  //sort stubs based on quality
538  const auto& input(lctsInChamber(detid));
539  int bestQ = 0;
540  int index = -1;
541  for (unsigned int i = 0; i < input.size(); ++i) {
542  int quality = input[i].getQuality();
543  if (quality > bestQ) {
544  bestQ = quality;
545  index = i;
546  }
547  }
548  if (index != -1)
549  return input[index];
550  return CSCCorrelatedLCTDigi();
551 }
static std::string const input
Definition: EdmProvDump.cc:47
const CSCCorrelatedLCTDigiContainer & lctsInChamber(unsigned int) const
string quality

◆ bestMplctInChamber()

CSCCorrelatedLCTDigi CSCStubMatcher::bestMplctInChamber ( unsigned  int) const

◆ chamberIdsALCT()

std::set< unsigned int > CSCStubMatcher::chamberIdsALCT ( int  csc_type = MuonHitHelper::CSC_ALL) const

Definition at line 442 of file CSCStubMatcher.cc.

442  {
443  return selectDetIds(chamber_to_alcts_, csc_type);
444 }
std::set< unsigned int > selectDetIds(D &, int) const
std::map< unsigned int, CSCALCTDigiContainer > chamber_to_alcts_

◆ chamberIdsAllALCT()

std::set< unsigned int > CSCStubMatcher::chamberIdsAllALCT ( int  csc_type = MuonHitHelper::CSC_ALL) const

Definition at line 426 of file CSCStubMatcher.cc.

426  {
427  return selectDetIds(chamber_to_alcts_all_, csc_type);
428 }
std::set< unsigned int > selectDetIds(D &, int) const
std::map< unsigned int, CSCALCTDigiContainer > chamber_to_alcts_all_

◆ chamberIdsAllCLCT()

std::set< unsigned int > CSCStubMatcher::chamberIdsAllCLCT ( int  csc_type = MuonHitHelper::CSC_ALL) const

crossed chamber detIds with not necessarily matching stubs

Definition at line 422 of file CSCStubMatcher.cc.

422  {
423  return selectDetIds(chamber_to_clcts_all_, csc_type);
424 }
std::set< unsigned int > selectDetIds(D &, int) const
std::map< unsigned int, CSCCLCTDigiContainer > chamber_to_clcts_all_

◆ chamberIdsAllLCT()

std::set< unsigned int > CSCStubMatcher::chamberIdsAllLCT ( int  csc_type = MuonHitHelper::CSC_ALL) const

Definition at line 430 of file CSCStubMatcher.cc.

430  {
431  return selectDetIds(chamber_to_lcts_all_, csc_type);
432 }
std::set< unsigned int > selectDetIds(D &, int) const
std::map< unsigned int, CSCCorrelatedLCTDigiContainer > chamber_to_lcts_all_

◆ chamberIdsAllMPLCT()

std::set< unsigned int > CSCStubMatcher::chamberIdsAllMPLCT ( int  csc_type = MuonHitHelper::CSC_ALL) const

Definition at line 434 of file CSCStubMatcher.cc.

434  {
435  return selectDetIds(chamber_to_mplcts_all_, csc_type);
436 }
std::map< unsigned int, CSCCorrelatedLCTDigiContainer > chamber_to_mplcts_all_
std::set< unsigned int > selectDetIds(D &, int) const

◆ chamberIdsCLCT()

std::set< unsigned int > CSCStubMatcher::chamberIdsCLCT ( int  csc_type = MuonHitHelper::CSC_ALL) const

chamber detIds with matching stubs

Definition at line 438 of file CSCStubMatcher.cc.

438  {
439  return selectDetIds(chamber_to_clcts_, csc_type);
440 }
std::set< unsigned int > selectDetIds(D &, int) const
std::map< unsigned int, CSCCLCTDigiContainer > chamber_to_clcts_

◆ chamberIdsLCT()

std::set< unsigned int > CSCStubMatcher::chamberIdsLCT ( int  csc_type = MuonHitHelper::CSC_ALL) const

Definition at line 446 of file CSCStubMatcher.cc.

446  {
447  return selectDetIds(chamber_to_lcts_, csc_type);
448 }
std::set< unsigned int > selectDetIds(D &, int) const
std::map< unsigned int, CSCCorrelatedLCTDigiContainer > chamber_to_lcts_

◆ chamberIdsMPLCT()

std::set< unsigned int > CSCStubMatcher::chamberIdsMPLCT ( int  csc_type = MuonHitHelper::CSC_ALL) const

Definition at line 450 of file CSCStubMatcher.cc.

450  {
451  return selectDetIds(chamber_to_mplcts_, csc_type);
452 }
std::set< unsigned int > selectDetIds(D &, int) const
std::map< unsigned int, CSCCorrelatedLCTDigiContainer > chamber_to_mplcts_

◆ clcts()

std::map<unsigned int, CSCCLCTDigiContainer> CSCStubMatcher::clcts ( ) const
inline

all matching lcts

Definition at line 60 of file CSCStubMatcher.h.

References chamber_to_clcts_.

60 { return chamber_to_clcts_; }
std::map< unsigned int, CSCCLCTDigiContainer > chamber_to_clcts_

◆ clctsInChamber()

const CSCCLCTDigiContainer & CSCStubMatcher::clctsInChamber ( unsigned int  detid) const

all matching from a particular crossed chamber

Definition at line 478 of file CSCStubMatcher.cc.

478  {
479  if (chamber_to_clcts_.find(detid) == chamber_to_clcts_.end())
480  return no_clcts_;
481  return chamber_to_clcts_.at(detid);
482 }
std::map< unsigned int, CSCCLCTDigiContainer > chamber_to_clcts_
CSCCLCTDigiContainer no_clcts_

◆ clear()

void CSCStubMatcher::clear ( void  )
private

Definition at line 671 of file CSCStubMatcher.cc.

671  {
672  chamber_to_clcts_all_.clear();
673  chamber_to_alcts_all_.clear();
674  chamber_to_lcts_all_.clear();
675  chamber_to_mplcts_all_.clear();
676 
677  chamber_to_clcts_.clear();
678  chamber_to_alcts_.clear();
679  chamber_to_lcts_.clear();
680  chamber_to_mplcts_.clear();
681 }
std::map< unsigned int, CSCCorrelatedLCTDigiContainer > chamber_to_mplcts_all_
std::map< unsigned int, CSCCorrelatedLCTDigiContainer > chamber_to_lcts_
std::map< unsigned int, CSCCorrelatedLCTDigiContainer > chamber_to_mplcts_
std::map< unsigned int, CSCALCTDigiContainer > chamber_to_alcts_
std::map< unsigned int, CSCCorrelatedLCTDigiContainer > chamber_to_lcts_all_
std::map< unsigned int, CSCCLCTDigiContainer > chamber_to_clcts_all_
std::map< unsigned int, CSCCLCTDigiContainer > chamber_to_clcts_
std::map< unsigned int, CSCALCTDigiContainer > chamber_to_alcts_all_

◆ cscDigiMatcher()

std::shared_ptr<CSCDigiMatcher> CSCStubMatcher::cscDigiMatcher ( )
inline

Definition at line 85 of file CSCStubMatcher.h.

References cscDigiMatcher_.

85 { return cscDigiMatcher_; }
std::shared_ptr< CSCDigiMatcher > cscDigiMatcher_

◆ gemDigiMatcher()

std::shared_ptr<GEMDigiMatcher> CSCStubMatcher::gemDigiMatcher ( )
inline

Definition at line 86 of file CSCStubMatcher.h.

References gemDigiMatcher_.

86 { return gemDigiMatcher_; }
std::shared_ptr< GEMDigiMatcher > gemDigiMatcher_

◆ getGlobalPosition()

GlobalPoint CSCStubMatcher::getGlobalPosition ( unsigned int  rawId,
const CSCCorrelatedLCTDigi lct 
) const

Definition at line 647 of file CSCStubMatcher.cc.

References relativeConstraints::chamber, CSCDetId::chamber(), CSCDetId::endcap(), CSCCorrelatedLCTDigi::getFractionalStrip(), CSCCorrelatedLCTDigi::getKeyWG(), CSCCorrelatedLCTDigi::getStrip(), CSCConstants::KEY_CLCT_LAYER, CSCDetId::layer(), CSCConstants::MAX_HALF_STRIP_ME1B, CSCConstants::NUM_STRIPS_ME1B, relativeConstraints::ring, CSCDetId::ring(), and CSCDetId::station().

647  {
648  CSCDetId cscId(rawId);
649  CSCDetId keyId(cscId.endcap(), cscId.station(), cscId.ring(), cscId.chamber(), CSCConstants::KEY_CLCT_LAYER);
650  float fractional_strip = lct.getFractionalStrip();
651  // case ME1/1
652  if (cscId.station() == 1 and (cscId.ring() == 4 || cscId.ring() == 1)) {
653  int ring = 1; // Default to ME1/b
655  ring = 4; // Change to ME1/a if the HalfStrip Number exceeds the range of ME1/b
656  fractional_strip -= CSCConstants::NUM_STRIPS_ME1B;
657  }
658  CSCDetId cscId_(cscId.endcap(), cscId.station(), ring, cscId.chamber(), cscId.layer());
659  cscId = cscId_;
660  }
661  // regular cases
662  const auto& chamber = cscGeometry_->chamber(cscId);
663  const auto& layer_geo = chamber->layer(CSCConstants::KEY_CLCT_LAYER)->geometry();
664  // LCT::getKeyWG() also starts from 0
665  float wire = layer_geo->middleWireOfGroup(lct.getKeyWG() + 1);
666  const LocalPoint& csc_intersect = layer_geo->intersectionOfStripAndWire(fractional_strip, wire);
667  const GlobalPoint& csc_gp = cscGeometry_->idToDet(keyId)->surface().toGlobal(csc_intersect);
668  return csc_gp;
669 }
const CSCChamber * chamber(CSCDetId id) const
Return the chamber corresponding to given DetId.
Definition: CSCGeometry.cc:100
const CSCGeometry * cscGeometry_
GlobalPoint toGlobal(const Point2DBase< Scalar, LocalTag > lp) const
Definition: Surface.h:79
uint16_t getStrip(uint16_t n=2) const
return the key halfstrip from 0,159
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:37
float getFractionalStrip(uint16_t n=2) const
return the fractional strip
uint16_t getKeyWG() const
return the key wire group. counts from 0.
const GeomDet * idToDet(DetId) const override
Definition: CSCGeometry.cc:91

◆ init()

void CSCStubMatcher::init ( const edm::Event e,
const edm::EventSetup eventSetup 
)

initialize the event

Definition at line 52 of file CSCStubMatcher.cc.

References edm::EventSetup::getData(), and iEvent.

52  {
53  if (useGEMs_)
54  gemDigiMatcher_->init(iEvent, iSetup);
55  cscDigiMatcher_->init(iEvent, iSetup);
56 
57  iEvent.getByToken(clctToken_, clctsH_);
58  iEvent.getByToken(alctToken_, alctsH_);
59  iEvent.getByToken(lctToken_, lctsH_);
60  iEvent.getByToken(mplctToken_, mplctsH_);
61 
62  cscGeometry_ = &iSetup.getData(geomToken_);
63 }
edm::EDGetTokenT< CSCCLCTDigiCollection > clctToken_
edm::Handle< CSCCorrelatedLCTDigiCollection > lctsH_
std::shared_ptr< CSCDigiMatcher > cscDigiMatcher_
const CSCGeometry * cscGeometry_
edm::EDGetTokenT< CSCCorrelatedLCTDigiCollection > mplctToken_
edm::Handle< CSCCLCTDigiCollection > clctsH_
int iEvent
Definition: GenABIO.cc:224
edm::EDGetTokenT< CSCCorrelatedLCTDigiCollection > lctToken_
edm::EDGetTokenT< CSCALCTDigiCollection > alctToken_
edm::Handle< CSCALCTDigiCollection > alctsH_
edm::ESGetToken< CSCGeometry, MuonGeometryRecord > geomToken_
std::shared_ptr< GEMDigiMatcher > gemDigiMatcher_
edm::Handle< CSCCorrelatedLCTDigiCollection > mplctsH_

◆ lctInChamber()

bool CSCStubMatcher::lctInChamber ( const CSCDetId id,
const CSCCorrelatedLCTDigi lct 
) const

Definition at line 639 of file CSCStubMatcher.cc.

639  {
640  for (const auto& stub : lctsInChamber(id.rawId())) {
641  if (stub == lct)
642  return true;
643  }
644  return false;
645 }
const CSCCorrelatedLCTDigiContainer & lctsInChamber(unsigned int) const

◆ lcts()

std::map<unsigned int, CSCCorrelatedLCTDigiContainer> CSCStubMatcher::lcts ( ) const
inline

Definition at line 62 of file CSCStubMatcher.h.

References chamber_to_lcts_.

62 { return chamber_to_lcts_; }
std::map< unsigned int, CSCCorrelatedLCTDigiContainer > chamber_to_lcts_

◆ lctsInChamber()

const CSCCorrelatedLCTDigiContainer & CSCStubMatcher::lctsInChamber ( unsigned int  detid) const

Definition at line 490 of file CSCStubMatcher.cc.

490  {
491  if (chamber_to_lcts_.find(detid) == chamber_to_lcts_.end())
492  return no_lcts_;
493  return chamber_to_lcts_.at(detid);
494 }
std::map< unsigned int, CSCCorrelatedLCTDigiContainer > chamber_to_lcts_
CSCCorrelatedLCTDigiContainer no_lcts_

◆ match()

void CSCStubMatcher::match ( const SimTrack t,
const SimVertex v 
)

do the matching

Definition at line 66 of file CSCStubMatcher.cc.

References clear(), submitPVValidationJobs::t, and findQualityFiles::v.

66  {
67  // match simhits first
68  if (useGEMs_)
69  gemDigiMatcher_->match(t, v);
70  cscDigiMatcher_->match(t, v);
71 
76 
77  // clear collections
78  clear();
79 
80  if (!alctsH_.isValid()) {
81  edm::LogError("CSCStubMatcher") << "Cannot get ALCTs with label " << alctInputTag_.encode();
82  } else {
84  }
85 
86  if (!clctsH_.isValid()) {
87  edm::LogError("CSCStubMatcher") << "Cannot get CLCTs with label " << clctInputTag_.encode();
88  } else {
90  }
91 
92  if (!lctsH_.isValid()) {
93  edm::LogError("CSCStubMatcher") << "Cannot get LCTs with label " << lctInputTag_.encode();
94  } else {
96  }
97 
98  if (!mplctsH_.isValid()) {
99  edm::LogError("CSCStubMatcher") << "Cannot get MPLCTs with label " << mplctInputTag_.encode();
100  } else {
102  }
103 }
std::map< unsigned int, CSCCorrelatedLCTDigiContainer > mplcts() const
std::map< unsigned int, CSCALCTDigiContainer > alcts() const
edm::InputTag clctInputTag_
std::string encode() const
Definition: InputTag.cc:159
void matchMPLCTsToSimTrack(const CSCCorrelatedLCTDigiCollection &)
T const * product() const
Definition: Handle.h:70
edm::Handle< CSCCorrelatedLCTDigiCollection > lctsH_
std::shared_ptr< CSCDigiMatcher > cscDigiMatcher_
Log< level::Error, false > LogError
std::map< unsigned int, CSCCLCTDigiContainer > clcts() const
all matching lcts
edm::Handle< CSCCLCTDigiCollection > clctsH_
void matchLCTsToSimTrack(const CSCCorrelatedLCTDigiCollection &)
edm::InputTag mplctInputTag_
edm::Handle< CSCALCTDigiCollection > alctsH_
void matchALCTsToSimTrack(const CSCALCTDigiCollection &)
void matchCLCTsToSimTrack(const CSCCLCTDigiCollection &)
std::shared_ptr< GEMDigiMatcher > gemDigiMatcher_
edm::Handle< CSCCorrelatedLCTDigiCollection > mplctsH_
edm::InputTag alctInputTag_
bool isValid() const
Definition: HandleBase.h:70
edm::InputTag lctInputTag_
std::map< unsigned int, CSCCorrelatedLCTDigiContainer > lcts() const

◆ matchALCTsToSimTrack()

void CSCStubMatcher::matchALCTsToSimTrack ( const CSCALCTDigiCollection alcts)
private

Definition at line 207 of file CSCStubMatcher.cc.

References a, CSCDetId::chamber(), filterCSVwithJSON::copy, gather_cfg::cout, mps_fire::end, CSCDetId::endcap(), spr::find(), globals_cff::id2, relativeConstraints::ring, CSCDetId::ring(), findQualityFiles::size, and CSCDetId::station().

207  {
208  const auto& anode_ids = cscDigiMatcher_->chamberIdsWire(0);
209  int n_minLayers = 0;
210  for (const auto& id : anode_ids) {
211  if (cscDigiMatcher_->nLayersWithWireInChamber(id) >= minNHitsChamberALCT_)
212  ++n_minLayers;
213  CSCDetId ch_id(id);
214 
215  // fill 1 WG wide gaps
216  const auto& digi_wgs = cscDigiMatcher_->wiregroupsInChamber(id, 1);
217  if (verboseALCT_) {
218  cout << "alct: digi_wgs " << ch_id << " ";
219  copy(digi_wgs.begin(), digi_wgs.end(), ostream_iterator<int>(cout, " "));
220  cout << endl;
221  }
222 
223  int ring = ch_id.ring();
224  if (ring == 4)
225  ring = 1; //use ME1b id to get ALCTs
226  CSCDetId ch_id2(ch_id.endcap(), ch_id.station(), ring, ch_id.chamber(), 0);
227  auto id2 = ch_id2.rawId(); // ALCTs should be sorted into the det of the ALCTs.
228 
229  const auto& alcts_in_det = alcts.get(ch_id2);
230  for (auto a = alcts_in_det.first; a != alcts_in_det.second; ++a) {
231  if (!a->isValid())
232  continue;
233 
234  if (verboseALCT_)
235  edm::LogInfo("CSCStubMatcher") << "alct " << ch_id << " " << *a;
236 
237  // check that the BX for stub wasn't too early or too late
238  if (a->getBX() < minBXALCT_ || a->getBX() > maxBXALCT_)
239  continue;
240 
241  int wg = a->getKeyWG() + 1; // as ALCT wiregroups numbers start from 0
242 
243  // store all ALCTs in this chamber
244  chamber_to_alcts_all_[id2].push_back(*a);
245 
246  // match by wiregroup with the digis
247  if (digi_wgs.find(wg) == digi_wgs.end()) {
248  continue;
249  }
250  if (verboseALCT_)
251  edm::LogInfo("CSCStubMatcher") << "alctGOOD";
252 
253  // store matching ALCTs in this chamber
255  chamber_to_alcts_[id2].push_back(*a);
256  }
257  }
258  if (chamber_to_alcts_[id2].size() > 2) {
259  edm::LogInfo("CSCStubMatcher") << "WARNING!!! too many ALCTs " << chamber_to_alcts_[id2].size() << " in "
260  << ch_id;
261  for (auto& a : chamber_to_alcts_[id2])
262  edm::LogInfo("CSCStubMatcher") << " " << a;
263  }
264  }
265 }
size
Write out results.
std::map< unsigned int, CSCALCTDigiContainer > alcts() const
std::shared_ptr< CSCDigiMatcher > cscDigiMatcher_
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:19
std::map< unsigned int, CSCALCTDigiContainer > chamber_to_alcts_
Log< level::Info, false > LogInfo
double a
Definition: hdecay.h:119
std::map< unsigned int, CSCALCTDigiContainer > chamber_to_alcts_all_

◆ matchCLCTsToSimTrack()

void CSCStubMatcher::matchCLCTsToSimTrack ( const CSCCLCTDigiCollection clcts)
private

Definition at line 105 of file CSCStubMatcher.cc.

References c, CSCDetId::chamber(), mps_fire::end, CSCDetId::endcap(), spr::find(), globals_cff::id2, phase1PixelTopology::layer, CSCDetId::maxLayerId(), CSCDetId::minLayerId(), or, AlCaHLTBitMon_ParallelJobs::p, submitPVResolutionJobs::q, CSCDetId::ring(), relativeConstraints::ring, findQualityFiles::size, and CSCDetId::station().

105  {
106  const auto& cathode_ids = cscDigiMatcher_->chamberIdsStrip(0);
107 
108  for (const auto& id : cathode_ids) {
109  CSCDetId ch_id(id);
110  if (verboseCLCT_) {
111  edm::LogInfo("CSCStubMatcher") << "To check CSC chamber " << ch_id;
112  }
113 
114  int ring = ch_id.ring();
115 
116  // do not consider CSCs with too few hits
117  if (cscDigiMatcher_->nLayersWithStripInChamber(ch_id) < minNHitsChamberCLCT_)
118  continue;
119 
120  // get the comparator digis in this chamber
121  std::vector<CSCComparatorDigiContainer> comps;
122  for (int ilayer = CSCDetId::minLayerId(); ilayer <= CSCDetId::maxLayerId(); ilayer++) {
123  CSCDetId layerid(ch_id.endcap(), ch_id.station(), ring, ch_id.chamber(), ilayer);
124  comps.push_back(cscDigiMatcher_->comparatorDigisInDetId(layerid));
125  }
126 
127  // print out the digis
128  if (verboseCLCT_) {
129  edm::LogInfo("CSCStubMatcher") << "clct: comparators " << ch_id;
130  int layer = 0;
131  for (const auto& p : comps) {
132  layer++;
133  for (const auto& q : p) {
134  edm::LogInfo("CSCStubMatcher") << "L" << layer << " " << q << " " << q.getHalfStrip() << " ";
135  }
136  }
137  }
138 
139  //use ME1b id to get CLCTs
140  const bool isME1a(ch_id.station() == 1 and ch_id.ring() == 4);
141  if (isME1a)
142  ring = 1;
143  CSCDetId ch_id2(ch_id.endcap(), ch_id.station(), ring, ch_id.chamber(), 0);
144  auto id2 = ch_id2.rawId(); // CLCTs should be sorted into the det of the CLCTs.
145 
146  const auto& clcts_in_det = clcts.get(ch_id2);
147 
148  for (auto c = clcts_in_det.first; c != clcts_in_det.second; ++c) {
149  if (verboseCLCT_)
150  edm::LogInfo("CSCStubMatcher") << "clct " << ch_id2 << " " << *c;
151 
152  if (!c->isValid())
153  continue;
154 
155  // check that the BX for this stub wasn't too early or too late
156  if (c->getBX() < minBXCLCT_ || c->getBX() > maxBXCLCT_)
157  continue;
158 
159  // store all CLCTs in this chamber
160  chamber_to_clcts_all_[id2].push_back(*c);
161 
162  // check that at least 3 comparator digis were matched!
163  int nMatches = 0;
164  int layer = 0;
165  for (const auto& p : comps) {
166  layer++;
167  for (const auto& q : p) {
168  if (verboseCLCT_)
169  edm::LogInfo("CSCStubMatcher") << "L" << layer << " " << q << " " << q.getHalfStrip() << " " << std::endl;
170  for (const auto& clctComp : (*c).getHits()[layer - 1]) {
171  if (clctComp == 65535)
172  continue;
173  if (verboseCLCT_) {
174  edm::LogInfo("CSCStubMatcher") << "\t" << clctComp << " ";
175  }
176  if (q.getHalfStrip() == clctComp or (isME1a and q.getHalfStrip() + 128 == clctComp)) {
177  nMatches++;
178  if (verboseCLCT_) {
179  edm::LogInfo("CSCStubMatcher") << "\t\tnMatches " << nMatches << std::endl;
180  }
181  }
182  }
183  }
184  }
185 
186  // require at least 3 good matches
187  if (nMatches < 3)
188  continue;
189 
190  if (verboseCLCT_)
191  edm::LogInfo("CSCStubMatcher") << "clctGOOD";
192 
193  // store matching CLCTs in this chamber
195  chamber_to_clcts_[id2].push_back(*c);
196  }
197  }
198  if (chamber_to_clcts_[id2].size() > 2) {
199  edm::LogInfo("CSCStubMatcher") << "WARNING!!! too many CLCTs " << chamber_to_clcts_[id2].size() << " in "
200  << ch_id2;
201  for (auto& c : chamber_to_clcts_[id2])
202  edm::LogInfo("CSCStubMatcher") << " " << c;
203  }
204  }
205 }
size
Write out results.
std::shared_ptr< CSCDigiMatcher > cscDigiMatcher_
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:19
constexpr std::array< uint8_t, layerIndexSize > layer
std::map< unsigned int, CSCCLCTDigiContainer > clcts() const
all matching lcts
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
Definition: Activities.doc:12
std::map< unsigned int, CSCCLCTDigiContainer > chamber_to_clcts_all_
Log< level::Info, false > LogInfo
static int minLayerId()
Definition: CSCDetId.h:242
std::map< unsigned int, CSCCLCTDigiContainer > chamber_to_clcts_
static int maxLayerId()
Definition: CSCDetId.h:243

◆ matchLCTsToSimTrack()

void CSCStubMatcher::matchLCTsToSimTrack ( const CSCCorrelatedLCTDigiCollection lcts)
private

Definition at line 267 of file CSCStubMatcher.cc.

References simKBmtfDigis_cfi::bx, CSCDetId::chamber(), mps_fire::end, CSCDetId::endcap(), spr::find(), globals_cff::id2, or, AlCaHLTBitMon_ParallelJobs::p, CSCDetId::ring(), relativeConstraints::ring, findQualityFiles::size, CSCDetId::station(), and CSCDetId::zendcap().

267  {
268  // only look for stubs in chambers that already have CLCT and ALCT
269  const auto& cathode_ids = chamberIdsAllCLCT(0);
270  const auto& anode_ids = chamberIdsAllALCT(0);
271 
272  std::set<int> cathode_and_anode_ids;
273  std::set_union(cathode_ids.begin(),
274  cathode_ids.end(),
275  anode_ids.begin(),
276  anode_ids.end(),
277  std::inserter(cathode_and_anode_ids, cathode_and_anode_ids.end()));
278 
279  for (const auto& id : cathode_and_anode_ids) {
280  int iLct = -1;
281 
282  CSCDetId ch_id(id);
283 
284  //use ME1b id to get LCTs
285  int ring = ch_id.ring();
286  if (ring == 4)
287  ring = 1;
288  CSCDetId ch_id2(ch_id.endcap(), ch_id.station(), ring, ch_id.chamber(), 0);
289  auto id2 = ch_id2.rawId(); // LCTs should be sorted into the det of the LCTs.
290 
291  const auto& lcts_in_det = lcts.get(ch_id2);
292 
293  std::map<int, CSCCorrelatedLCTDigiContainer> bx_to_lcts;
294 
295  // collect all valid LCTs in a handy container
297  for (auto lct = lcts_in_det.first; lct != lcts_in_det.second; ++lct) {
298  if (!lct->isValid())
299  continue;
300  lcts_tmp.push_back(*lct);
301  int bx = lct->getBX();
302  bx_to_lcts[bx].push_back(*lct);
303 
304  // Add ghost LCTs when there are two in bx
305  // and the two don't share half-strip or wiregroup
306  if (bx_to_lcts[bx].size() == 2 and addGhostLCTs_) {
307  auto lct11 = bx_to_lcts[bx][0];
308  auto lct22 = bx_to_lcts[bx][1];
309  addGhostLCTs(lct11, lct22, lcts_tmp);
310  }
311  }
312 
313  for (const auto& lct : lcts_tmp) {
314  iLct++;
315 
316  bool lct_clct_match(false);
317  bool lct_alct_match(false);
318  bool lct_gem1_match(false);
319  bool lct_gem2_match(false);
320 
321  if (verboseLCT_) {
322  edm::LogInfo("CSCStubMatcher") << ch_id << " " << ch_id2;
323  edm::LogInfo("CSCStubMatcher") << lct;
324  edm::LogInfo("CSCStubMatcher") << "getCLCT " << lct.getCLCT() << "\ngetALCT " << lct.getALCT() << "\ngetGEM1 "
325  << lct.getGEM1() << "\ngetGEM2 " << lct.getGEM2();
326  }
327  // Check if matched to an CLCT
328  for (const auto& p : clctsInChamber(id)) {
329  if (p == lct.getCLCT()) {
330  lct_clct_match = true;
331  if (verboseLCT_)
332  edm::LogInfo("CSCStubMatcher") << "\t...lct_clct_match";
333  break;
334  }
335  }
336 
337  // Check if matched to an ALCT
338  for (const auto& p : alctsInChamber(id)) {
339  if (p == lct.getALCT()) {
340  lct_alct_match = true;
341  if (verboseLCT_)
342  edm::LogInfo("CSCStubMatcher") << "\t...lct_alct_match";
343  break;
344  }
345  }
346 
347  if (useGEMs_) {
348  // fixME here: double check the timing of GEMPad
349  if (ch_id.ring() == 1 and (ch_id.station() == 1 or ch_id.station() == 2)) {
350  // Check if matched to an GEM pad L1
351  const GEMDetId gemDetIdL1(ch_id.zendcap(), 1, ch_id.station(), 1, ch_id.chamber(), 0);
352  for (const auto& p : gemDigiMatcher_->padsInChamber(gemDetIdL1.rawId())) {
353  if (p == lct.getGEM1()) {
354  lct_gem1_match = true;
355  if (verboseLCT_)
356  edm::LogInfo("CSCStubMatcher") << "\t...lct_gem1_match";
357  break;
358  }
359  }
360 
361  // Check if matched to an GEM pad L2
362  const GEMDetId gemDetIdL2(ch_id.zendcap(), 1, ch_id.station(), 2, ch_id.chamber(), 0);
363  for (const auto& p : gemDigiMatcher_->padsInChamber(gemDetIdL2.rawId())) {
364  if (p == lct.getGEM2()) {
365  lct_gem2_match = true;
366  if (verboseLCT_)
367  edm::LogInfo("CSCStubMatcher") << "\t...lct_gem2_match";
368  break;
369  }
370  }
371  }
372  }
373 
374  const bool alct_clct = lct_clct_match and lct_alct_match;
375  const bool alct_gem = lct_alct_match and lct_gem1_match and lct_gem2_match;
376  const bool clct_gem = lct_clct_match and lct_gem1_match and lct_gem2_match;
377 
378  bool lct_tight_matched = alct_clct or alct_gem or clct_gem;
379  bool lct_loose_matched = lct_clct_match or lct_alct_match;
380  bool lct_matched = lct_loose_matched or lct_tight_matched;
381 
382  if (lct_matched) {
383  if (verboseLCT_)
384  edm::LogInfo("CSCStubMatcher") << "...was matched";
386  chamber_to_lcts_[id2].emplace_back(lct);
387  }
388  }
389  } // lct loop over
390  }
391 }
size
Write out results.
std::set< unsigned int > chamberIdsAllALCT(int csc_type=MuonHitHelper::CSC_ALL) const
std::set< unsigned int > chamberIdsAllCLCT(int csc_type=MuonHitHelper::CSC_ALL) const
crossed chamber detIds with not necessarily matching stubs
std::vector< CSCCorrelatedLCTDigi > CSCCorrelatedLCTDigiContainer
std::map< unsigned int, CSCCorrelatedLCTDigiContainer > chamber_to_lcts_
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:19
const CSCCLCTDigiContainer & clctsInChamber(unsigned int) const
all matching from a particular crossed chamber
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
Definition: Activities.doc:12
const CSCALCTDigiContainer & alctsInChamber(unsigned int) const
Log< level::Info, false > LogInfo
std::shared_ptr< GEMDigiMatcher > gemDigiMatcher_
std::map< unsigned int, CSCCorrelatedLCTDigiContainer > lcts() const
void addGhostLCTs(const CSCCorrelatedLCTDigi &lct11, const CSCCorrelatedLCTDigi &lct22, CSCCorrelatedLCTDigiContainer &lctcontainer) const

◆ matchMPLCTsToSimTrack()

void CSCStubMatcher::matchMPLCTsToSimTrack ( const CSCCorrelatedLCTDigiCollection mplcts)
private

Definition at line 393 of file CSCStubMatcher.cc.

References mps_fire::end, spr::find(), and triggerObjects_cff::id.

393  {
394  // match simtrack to MPC LCT by looking only in chambers
395  // that already have LCTs matched to this simtrack
396  const auto& lcts_ids = chamberIdsLCT(0);
397 
398  // loop on the detids
399  for (const auto& id : lcts_ids) {
400  const auto& mplcts_in_det = mplcts.get(id);
401 
402  // loop on the MPC LCTs in this detid
403  for (auto lct = mplcts_in_det.first; lct != mplcts_in_det.second; ++lct) {
404  if (!lct->isValid())
405  continue;
406 
407  chamber_to_mplcts_all_[id].emplace_back(*lct);
408 
409  // check if this stub corresponds with a previously matched stub
410  for (const auto& sim_stub : lctsInChamber(id)) {
411  if (sim_stub == *lct) {
412  if (std::find(chamber_to_mplcts_[id].begin(), chamber_to_mplcts_[id].end(), *lct) ==
413  chamber_to_mplcts_[id].end()) {
414  chamber_to_mplcts_[id].emplace_back(*lct);
415  }
416  }
417  }
418  }
419  }
420 }
std::map< unsigned int, CSCCorrelatedLCTDigiContainer > mplcts() const
std::map< unsigned int, CSCCorrelatedLCTDigiContainer > chamber_to_mplcts_all_
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:19
std::map< unsigned int, CSCCorrelatedLCTDigiContainer > chamber_to_mplcts_
std::set< unsigned int > chamberIdsLCT(int csc_type=MuonHitHelper::CSC_ALL) const
const CSCCorrelatedLCTDigiContainer & lctsInChamber(unsigned int) const

◆ mplcts()

std::map<unsigned int, CSCCorrelatedLCTDigiContainer> CSCStubMatcher::mplcts ( ) const
inline

Definition at line 63 of file CSCStubMatcher.h.

References chamber_to_mplcts_.

63 { return chamber_to_mplcts_; }
std::map< unsigned int, CSCCorrelatedLCTDigiContainer > chamber_to_mplcts_

◆ mplctsInChamber()

const CSCCorrelatedLCTDigiContainer & CSCStubMatcher::mplctsInChamber ( unsigned int  detid) const

Definition at line 496 of file CSCStubMatcher.cc.

496  {
497  if (chamber_to_mplcts_.find(detid) == chamber_to_mplcts_.end())
498  return no_mplcts_;
499  return chamber_to_mplcts_.at(detid);
500 }
CSCCorrelatedLCTDigiContainer no_mplcts_
std::map< unsigned int, CSCCorrelatedLCTDigiContainer > chamber_to_mplcts_

◆ nChambersWithALCT()

int CSCStubMatcher::nChambersWithALCT ( int  min_quality = 0) const

Definition at line 579 of file CSCStubMatcher.cc.

References mps_fire::result.

579  {
580  int result = 0;
581  const auto& chamber_ids = chamberIdsALCT();
582  for (const auto& id : chamber_ids) {
583  int nStubChamber = 0;
584  const auto& alcts = alctsInChamber(id);
585  for (const auto& alct : alcts) {
586  if (!alct.isValid())
587  continue;
588  if (alct.getQuality() >= min_quality) {
589  nStubChamber++;
590  }
591  }
592  if (nStubChamber > 0) {
593  ++result;
594  }
595  }
596  return result;
597 }
std::map< unsigned int, CSCALCTDigiContainer > alcts() const
std::set< unsigned int > chamberIdsALCT(int csc_type=MuonHitHelper::CSC_ALL) const
const CSCALCTDigiContainer & alctsInChamber(unsigned int) const

◆ nChambersWithCLCT()

int CSCStubMatcher::nChambersWithCLCT ( int  min_quality = 0) const

How many CSC chambers with matching stubs of some minimal quality did this SimTrack hit?

Definition at line 559 of file CSCStubMatcher.cc.

References mps_fire::result.

559  {
560  int result = 0;
561  const auto& chamber_ids = chamberIdsCLCT();
562  for (const auto& id : chamber_ids) {
563  int nStubChamber = 0;
564  const auto& clcts = clctsInChamber(id);
565  for (const auto& clct : clcts) {
566  if (!clct.isValid())
567  continue;
568  if (clct.getQuality() >= min_quality) {
569  nStubChamber++;
570  }
571  }
572  if (nStubChamber > 0) {
573  ++result;
574  }
575  }
576  return result;
577 }
std::map< unsigned int, CSCCLCTDigiContainer > clcts() const
all matching lcts
const CSCCLCTDigiContainer & clctsInChamber(unsigned int) const
all matching from a particular crossed chamber
std::set< unsigned int > chamberIdsCLCT(int csc_type=MuonHitHelper::CSC_ALL) const
chamber detIds with matching stubs

◆ nChambersWithLCT()

int CSCStubMatcher::nChambersWithLCT ( int  min_quality = 0) const

Definition at line 599 of file CSCStubMatcher.cc.

References mps_fire::result.

599  {
600  int result = 0;
601  const auto& chamber_ids = chamberIdsLCT();
602  for (const auto& id : chamber_ids) {
603  int nStubChamber = 0;
604  const auto& lcts = lctsInChamber(id);
605  for (const auto& lct : lcts) {
606  if (!lct.isValid())
607  continue;
608  if (lct.getQuality() >= min_quality) {
609  nStubChamber++;
610  }
611  }
612  if (nStubChamber > 0) {
613  ++result;
614  }
615  }
616  return result;
617 }
std::set< unsigned int > chamberIdsLCT(int csc_type=MuonHitHelper::CSC_ALL) const
const CSCCorrelatedLCTDigiContainer & lctsInChamber(unsigned int) const
std::map< unsigned int, CSCCorrelatedLCTDigiContainer > lcts() const

◆ nChambersWithMPLCT()

int CSCStubMatcher::nChambersWithMPLCT ( int  min_quality = 0) const

Definition at line 619 of file CSCStubMatcher.cc.

References mps_fire::result.

619  {
620  int result = 0;
621  const auto& chamber_ids = chamberIdsMPLCT();
622  for (const auto& id : chamber_ids) {
623  int nStubChamber = 0;
624  const auto& mplcts = mplctsInChamber(id);
625  for (const auto& mplct : mplcts) {
626  if (!mplct.isValid())
627  continue;
628  if (mplct.getQuality() >= min_quality) {
629  nStubChamber++;
630  }
631  }
632  if (nStubChamber > 0) {
633  ++result;
634  }
635  }
636  return result;
637 }
std::map< unsigned int, CSCCorrelatedLCTDigiContainer > mplcts() const
std::set< unsigned int > chamberIdsMPLCT(int csc_type=MuonHitHelper::CSC_ALL) const
const CSCCorrelatedLCTDigiContainer & mplctsInChamber(unsigned int) const

◆ selectDetIds()

template<class D >
std::set< unsigned int > CSCStubMatcher::selectDetIds ( D &  digis,
int  csc_type 
) const
private

Definition at line 162 of file CSCStubMatcher.h.

References AlCaHLTBitMon_ParallelJobs::p, mps_fire::result, CSCDetId::ring(), CSCDetId::station(), and MuonHitHelper::toCSCType().

162  {
163  std::set<unsigned int> result;
164  for (auto& p : digis) {
165  auto id = p.first;
166  if (csc_type > 0) {
167  CSCDetId detId(id);
168  if (MuonHitHelper::toCSCType(detId.station(), detId.ring()) != csc_type)
169  continue;
170  }
171  result.insert(p.first);
172  }
173  return result;
174 }
static int toCSCType(int st, int ri)

◆ zpositionOfLayer()

float CSCStubMatcher::zpositionOfLayer ( unsigned int  detid,
int  layer 
) const

Definition at line 553 of file CSCStubMatcher.cc.

References relativeConstraints::chamber, and phase1PixelTopology::layer.

553  {
554  const auto& id = CSCDetId(detid);
555  const auto& chamber(cscGeometry_->chamber(id));
556  return fabs(chamber->layer(layer)->centerOfStrip(20).z());
557 }
const CSCChamber * chamber(CSCDetId id) const
Return the chamber corresponding to given DetId.
Definition: CSCGeometry.cc:100
const CSCGeometry * cscGeometry_
constexpr std::array< uint8_t, layerIndexSize > layer

Member Data Documentation

◆ addGhostLCTs_

bool CSCStubMatcher::addGhostLCTs_
private

Definition at line 136 of file CSCStubMatcher.h.

◆ alctInputTag_

edm::InputTag CSCStubMatcher::alctInputTag_
private

Definition at line 101 of file CSCStubMatcher.h.

◆ alctsH_

edm::Handle<CSCALCTDigiCollection> CSCStubMatcher::alctsH_
private

Definition at line 111 of file CSCStubMatcher.h.

◆ alctToken_

edm::EDGetTokenT<CSCALCTDigiCollection> CSCStubMatcher::alctToken_
private

Definition at line 106 of file CSCStubMatcher.h.

◆ chamber_to_alcts_

std::map<unsigned int, CSCALCTDigiContainer> CSCStubMatcher::chamber_to_alcts_
private

Definition at line 129 of file CSCStubMatcher.h.

Referenced by alcts().

◆ chamber_to_alcts_all_

std::map<unsigned int, CSCALCTDigiContainer> CSCStubMatcher::chamber_to_alcts_all_
private

Definition at line 123 of file CSCStubMatcher.h.

◆ chamber_to_clcts_

std::map<unsigned int, CSCCLCTDigiContainer> CSCStubMatcher::chamber_to_clcts_
private

Definition at line 128 of file CSCStubMatcher.h.

Referenced by clcts().

◆ chamber_to_clcts_all_

std::map<unsigned int, CSCCLCTDigiContainer> CSCStubMatcher::chamber_to_clcts_all_
private

Definition at line 122 of file CSCStubMatcher.h.

◆ chamber_to_lcts_

std::map<unsigned int, CSCCorrelatedLCTDigiContainer> CSCStubMatcher::chamber_to_lcts_
private

Definition at line 130 of file CSCStubMatcher.h.

Referenced by lcts().

◆ chamber_to_lcts_all_

std::map<unsigned int, CSCCorrelatedLCTDigiContainer> CSCStubMatcher::chamber_to_lcts_all_
private

Definition at line 124 of file CSCStubMatcher.h.

◆ chamber_to_mplcts_

std::map<unsigned int, CSCCorrelatedLCTDigiContainer> CSCStubMatcher::chamber_to_mplcts_
private

Definition at line 131 of file CSCStubMatcher.h.

Referenced by mplcts().

◆ chamber_to_mplcts_all_

std::map<unsigned int, CSCCorrelatedLCTDigiContainer> CSCStubMatcher::chamber_to_mplcts_all_
private

Definition at line 125 of file CSCStubMatcher.h.

◆ clctInputTag_

edm::InputTag CSCStubMatcher::clctInputTag_
private

Definition at line 100 of file CSCStubMatcher.h.

◆ clctsH_

edm::Handle<CSCCLCTDigiCollection> CSCStubMatcher::clctsH_
private

Definition at line 110 of file CSCStubMatcher.h.

◆ clctToken_

edm::EDGetTokenT<CSCCLCTDigiCollection> CSCStubMatcher::clctToken_
private

Definition at line 105 of file CSCStubMatcher.h.

◆ cscDigiMatcher_

std::shared_ptr<CSCDigiMatcher> CSCStubMatcher::cscDigiMatcher_
private

Definition at line 115 of file CSCStubMatcher.h.

Referenced by cscDigiMatcher().

◆ cscGeometry_

const CSCGeometry* CSCStubMatcher::cscGeometry_
private

Definition at line 119 of file CSCStubMatcher.h.

◆ gemDigiMatcher_

std::shared_ptr<GEMDigiMatcher> CSCStubMatcher::gemDigiMatcher_
private

Definition at line 116 of file CSCStubMatcher.h.

Referenced by gemDigiMatcher().

◆ geomToken_

edm::ESGetToken<CSCGeometry, MuonGeometryRecord> CSCStubMatcher::geomToken_
private

Definition at line 118 of file CSCStubMatcher.h.

◆ lctInputTag_

edm::InputTag CSCStubMatcher::lctInputTag_
private

Definition at line 102 of file CSCStubMatcher.h.

◆ lctsH_

edm::Handle<CSCCorrelatedLCTDigiCollection> CSCStubMatcher::lctsH_
private

Definition at line 112 of file CSCStubMatcher.h.

◆ lctToken_

edm::EDGetTokenT<CSCCorrelatedLCTDigiCollection> CSCStubMatcher::lctToken_
private

Definition at line 107 of file CSCStubMatcher.h.

◆ maxBXALCT_

int CSCStubMatcher::maxBXALCT_
private

Definition at line 151 of file CSCStubMatcher.h.

◆ maxBXCLCT_

int CSCStubMatcher::maxBXCLCT_
private

Definition at line 150 of file CSCStubMatcher.h.

◆ maxBXLCT_

int CSCStubMatcher::maxBXLCT_
private

Definition at line 152 of file CSCStubMatcher.h.

◆ maxBXMPLCT_

int CSCStubMatcher::maxBXMPLCT_
private

Definition at line 153 of file CSCStubMatcher.h.

◆ minBXALCT_

int CSCStubMatcher::minBXALCT_
private

Definition at line 151 of file CSCStubMatcher.h.

◆ minBXCLCT_

int CSCStubMatcher::minBXCLCT_
private

Definition at line 150 of file CSCStubMatcher.h.

◆ minBXLCT_

int CSCStubMatcher::minBXLCT_
private

Definition at line 152 of file CSCStubMatcher.h.

◆ minBXMPLCT_

int CSCStubMatcher::minBXMPLCT_
private

Definition at line 153 of file CSCStubMatcher.h.

◆ minNHitsChamber_

int CSCStubMatcher::minNHitsChamber_
private

Definition at line 139 of file CSCStubMatcher.h.

◆ minNHitsChamberALCT_

int CSCStubMatcher::minNHitsChamberALCT_
private

Definition at line 140 of file CSCStubMatcher.h.

◆ minNHitsChamberCLCT_

int CSCStubMatcher::minNHitsChamberCLCT_
private

Definition at line 141 of file CSCStubMatcher.h.

◆ minNHitsChamberLCT_

int CSCStubMatcher::minNHitsChamberLCT_
private

Definition at line 142 of file CSCStubMatcher.h.

◆ minNHitsChamberMPLCT_

int CSCStubMatcher::minNHitsChamberMPLCT_
private

Definition at line 143 of file CSCStubMatcher.h.

◆ mplctInputTag_

edm::InputTag CSCStubMatcher::mplctInputTag_
private

Definition at line 103 of file CSCStubMatcher.h.

◆ mplctsH_

edm::Handle<CSCCorrelatedLCTDigiCollection> CSCStubMatcher::mplctsH_
private

Definition at line 113 of file CSCStubMatcher.h.

◆ mplctToken_

edm::EDGetTokenT<CSCCorrelatedLCTDigiCollection> CSCStubMatcher::mplctToken_
private

Definition at line 108 of file CSCStubMatcher.h.

◆ no_alcts_

CSCALCTDigiContainer CSCStubMatcher::no_alcts_
private

Definition at line 156 of file CSCStubMatcher.h.

◆ no_clcts_

CSCCLCTDigiContainer CSCStubMatcher::no_clcts_
private

Definition at line 155 of file CSCStubMatcher.h.

◆ no_lcts_

CSCCorrelatedLCTDigiContainer CSCStubMatcher::no_lcts_
private

Definition at line 157 of file CSCStubMatcher.h.

◆ no_mplcts_

CSCCorrelatedLCTDigiContainer CSCStubMatcher::no_mplcts_
private

Definition at line 158 of file CSCStubMatcher.h.

◆ useGEMs_

bool CSCStubMatcher::useGEMs_
private

Definition at line 137 of file CSCStubMatcher.h.

◆ verboseALCT_

bool CSCStubMatcher::verboseALCT_
private

Definition at line 145 of file CSCStubMatcher.h.

◆ verboseCLCT_

bool CSCStubMatcher::verboseCLCT_
private

Definition at line 146 of file CSCStubMatcher.h.

◆ verboseLCT_

bool CSCStubMatcher::verboseLCT_
private

Definition at line 147 of file CSCStubMatcher.h.

◆ verboseMPLCT_

bool CSCStubMatcher::verboseMPLCT_
private

Definition at line 148 of file CSCStubMatcher.h.