CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
CSCMuonPortCard.cc
Go to the documentation of this file.
3 #include <algorithm>
4 
6 
7 CSCMuonPortCard::CSCMuonPortCard(unsigned endcap, unsigned station, unsigned sector, const edm::ParameterSet& conf)
8  : theEndcap(endcap), theStation(station), theSector(sector) {
9  // Get min and max BX to sort LCTs in MPC.
10  minBX_ = conf.getParameter<int>("MinBX");
11  maxBX_ = conf.getParameter<int>("MaxBX");
12 
13  const auto& mpcParams = conf.getParameter<edm::ParameterSet>("mpcParam");
14  sort_stubs_ = mpcParams.getParameter<bool>("sortStubs");
15  drop_invalid_stubs_ = mpcParams.getParameter<bool>("dropInvalidStubs");
16  drop_low_quality_stubs_ = mpcParams.getParameter<bool>("dropLowQualityStubs");
17  max_stubs_ = mpcParams.getParameter<unsigned>("maxStubs");
18 
19  const std::string eSign = endcap == 1 ? "+" : "-";
20  vmeName_ = "VME" + eSign + std::to_string(theStation) + "/" + std::to_string(theSector);
21 }
22 
24  stubs_.clear();
25  selectedStubs_.clear();
26 }
27 
29  // clear the input and output collection
30  clear();
31 
32  for (auto Citer = thedigis.begin(); Citer != thedigis.end(); Citer++) {
33  const CSCDetId& detid((*Citer).first);
34  const unsigned endcap = detid.endcap();
35  const unsigned station = detid.station();
36  const unsigned sector = detid.triggerSector();
37 
38  // select stubs by region
39  if (endcap != theEndcap or station != theStation or sector != theSector)
40  continue;
41 
42  // Put everything from the digi container into a trigger container.
43  // This allows us to sort per BX more easily.
44  for (auto Diter = (*Citer).second.first; Diter != (*Citer).second.second; Diter++) {
45  stubs_.push_back(csctf::TrackStub((*Diter), (*Citer).first));
46  }
47  }
48 }
49 
51  // sort the LCTs per BX and subsector
52  for (int bx = minBX_; bx <= maxBX_; ++bx) {
53  // station 1 case with all 10 degree chambers
54  if (theStation == 1) {
55  sortLCTs(1, bx);
56  sortLCTs(2, bx);
57  }
58  // station 2,3,4 case with mixture of 10 and 20 degree chambers
59  else {
60  sortLCTs(0, bx);
61  }
62  }
63 }
64 
65 void CSCMuonPortCard::sortLCTs(const unsigned subsector, const int bx) {
66  // temporary vector
67  std::vector<csctf::TrackStub> result = stubs_.get(theEndcap, theStation, theSector, subsector, bx);
68 
69  // pre-selection step
70  for (auto LCT = result.begin(); LCT != result.end(); LCT++) {
71  // step 1: no invalid stubs
72  if (drop_invalid_stubs_ && !LCT->isValid()) {
73  result.erase(LCT, LCT);
74  }
75 
76  // step 2: no low-quality stubs
77  if (drop_low_quality_stubs_ && LCT->getQuality() == 0) {
78  result.erase(LCT, LCT);
79  }
80  }
81 
82  // sort+select
83  if (!result.empty()) {
84  // sort according to quality and CSCDetId
85  if (sort_stubs_) {
86  std::sort(result.begin(), result.end(), std::greater<csctf::TrackStub>());
87  }
88 
89  // select up to MAX_LCTS_PER_MPC (default 18) per bunch crossing.
90  const unsigned maxStubs = std::min(max_stubs_, unsigned(CSCConstants::MAX_LCTS_PER_MPC));
91  if (result.size() > maxStubs) {
92  result.erase(result.begin() + maxStubs, result.end());
93  }
94 
95  // Go through the sorted list and label the LCTs with a sorting number.
96  unsigned i = 0;
97  for (auto LCT = result.begin(); LCT != result.end(); LCT++) {
98  LCT->setMPCLink(++i);
99  }
100 
101  // now insert the temporary vector in the output collection
102  selectedStubs_.insert(selectedStubs_.end(), result.begin(), result.end());
103  }
104 }
std::vector< T > get() const
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::EventIDconst &, edm::Timestampconst & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
Definition: Activities.doc:12
std::string to_string(const V &value)
Definition: OMSAccess.h:71
void loadLCTs(const CSCCorrelatedLCTDigiCollection &thedigis)
void push_back(const T &data)
tuple result
Definition: mps_fire.py:311
int endcap() const
Definition: CSCDetId.h:85
bool drop_low_quality_stubs_
std::string vmeName_
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
CSCTriggerContainer< csctf::TrackStub > stubs_
int triggerSector() const
Definition: CSCDetId.cc:3
int station() const
Definition: CSCDetId.h:79
std::vector< csctf::TrackStub > selectedStubs_