CMS 3D CMS Logo

CSCMuonPortCard.cc
Go to the documentation of this file.
1 //-----------------------------------------------------------------------------
2 //
3 // Class: CSCMuonPortCard
4 //
5 // Description:
6 // Simulates the functionality of the Muon Port Card (MPC). Each MPC
7 // is responsible for 9 Trigger Mother Boards (TMBs). It takes the up to
8 // 18 LCTs (2/TMB) in each (sub)sector every bunch crossing, sorts them,
9 // selects up to three best, and puts them into an output collection.
10 //
11 // Author List: Benn Tannenbaum 30 August 1999.
12 // Based on code by Nick Wisniewski.
13 //
14 //
15 // Modifications: Numerous later improvements by Jason Mumford and
16 // Slava Valuev (see cvs in ORCA).
17 // Porting/reworking from ORCA by L. Gray (UF), June 2006.
18 //
19 //-----------------------------------------------------------------------------
20 
23 #include <algorithm>
24 
26 {
28 }
29 
31 {
33 
34  edm::ParameterSet commonParams = conf.getParameter<edm::ParameterSet>("commonParam");
35  if (commonParams.getParameter<bool>("isSLHC"))
36  {
37  edm::ParameterSet mpcParams = conf.getParameter<edm::ParameterSet>("mpcSLHC");
38  max_stubs_ = mpcParams.getParameter<unsigned int>("mpcMaxStubs");
39  }
40  edm::ParameterSet mpcRun2Params = conf.getParameter<edm::ParameterSet>("mpcRun2");
41  sort_stubs_ = mpcRun2Params.getParameter<bool>("sortStubs");
42  drop_invalid_stubs_ = mpcRun2Params.getParameter<bool>("dropInvalidStubs");
43  drop_low_quality_stubs_ = mpcRun2Params.getParameter<bool>("dropLowQualityStubs");
44 }
45 
47 {
48  // Put everything from the digi container into a trigger container.
49  // This allows us to sort per BX more easily.
50  clear();
51 
53 
54  for (Citer = thedigis.begin(); Citer != thedigis.end(); Citer++) {
55  CSCCorrelatedLCTDigiCollection::const_iterator Diter = (*Citer).second.first;
56  CSCCorrelatedLCTDigiCollection::const_iterator Dend = (*Citer).second.second;
57 
58  for (; Diter != Dend; Diter++) {
59  csctf::TrackStub theStub((*Diter), (*Citer).first);
60  stubs_.push_back(theStub);
61  }
62  }
63 }
64 
65 std::vector<csctf::TrackStub> CSCMuonPortCard::sort(const unsigned endcap, const unsigned station,
66  const unsigned sector, const unsigned subsector, const int bx)
67 {
68  std::vector<csctf::TrackStub> result;
69  std::vector<csctf::TrackStub>::iterator LCT;
70 
71  result = stubs_.get(endcap, station, sector, subsector, bx);
72 
73  // Make sure no Quality 0 or non-valid LCTs come through the portcard.
74  for (LCT = result.begin(); LCT != result.end(); LCT++) {
75  if ( (drop_invalid_stubs_ && !LCT->isValid()) ||
76  (drop_low_quality_stubs_ && LCT->getQuality()==0) )
77  result.erase(LCT, LCT);
78  }
79 
80  if (!result.empty()) {
81  if (sort_stubs_) std::sort(result.begin(), result.end(), std::greater<csctf::TrackStub>());
82  // Can only return maxStubs or less LCTs per bunch crossing.
83  if (result.size() > max_stubs_)
84  result.erase(result.begin() + max_stubs_, result.end());
85 
86 
87  // Go through the sorted list and label the LCTs with a sorting number.
88  unsigned i = 0;
89  for (LCT = result.begin(); LCT != result.end(); LCT++)
90  LCT->setMPCLink(++i);
91  }
92 
93  return result;
94 }
unsigned int max_stubs_
T getParameter(std::string const &) const
std::vector< T > get() const
void push_back(const T &data)
void loadDigis(const CSCCorrelatedLCTDigiCollection &thedigis)
bool drop_low_quality_stubs_
std::vector< CSCCorrelatedLCTDigi >::const_iterator const_iterator
CSCTriggerContainer< csctf::TrackStub > stubs_
std::vector< csctf::TrackStub > sort(const unsigned endcap, const unsigned station, const unsigned sector, const unsigned subsector, const int bx)