CMS 3D CMS Logo

CSCUpgradeAnodeLCTProcessor.cc
Go to the documentation of this file.
2 
4  unsigned station,
5  unsigned sector,
6  unsigned subsector,
7  unsigned chamber,
8  const edm::ParameterSet& conf)
9  : CSCAnodeLCTProcessor(endcap, station, sector, subsector, chamber, conf) {
10  if (!isSLHC_)
11  edm::LogError("CSCUpgradeAnodeLCTProcessor|ConfigError")
12  << "+++ Upgrade CSCUpgradeAnodeLCTProcessor constructed while isSLHC_ is not set! +++\n";
13 
14  if (!enableAlctSLHC_)
15  edm::LogError("CSCUpgradeAnodeLCTProcessor|ConfigError")
16  << "+++ Upgrade CSCUpgradeAnodeLCTProcessor constructed while enableAlctSLHC_ is not set! +++\n";
17 }
18 
20  if (!isSLHC_)
21  edm::LogError("CSCUpgradeAnodeLCTProcessor|ConfigError")
22  << "+++ Upgrade CSCUpgradeAnodeLCTProcessor constructed while isSLHC_ is not set! +++\n";
23 
24  if (!enableAlctSLHC_)
25  edm::LogError("CSCUpgradeAnodeLCTProcessor|ConfigError")
26  << "+++ Upgrade CSCUpgradeAnodeLCTProcessor constructed while enableAlctSLHC_ is not set! +++\n";
27 }
28 
30  int ghost_cleared[CSCConstants::MAX_NUM_WIRES][2];
31 
32  for (int key_wire = 0; key_wire < numWireGroups; key_wire++) {
33  for (int i_pattern = 0; i_pattern < 2; i_pattern++) {
34  ghost_cleared[key_wire][i_pattern] = 0;
35 
36  // Non-empty wire group.
37  int qual_this = quality[key_wire][i_pattern];
38  if (qual_this > 0) {
40  qual_this = (qual_this & 0x03);
41  // Previous wire.
42  int dt = -1;
43  int qual_prev = (key_wire > 0) ? quality[key_wire - 1][i_pattern] : 0;
44  if (qual_prev > 0) {
45  if (use_corrected_bx)
46  dt = first_bx_corrected[key_wire] - first_bx_corrected[key_wire - 1];
47  else
48  dt = first_bx[key_wire] - first_bx[key_wire - 1];
49  // hack to run the Phase-II ME2/1, ME3/1 and ME4/1 ILT
51  qual_prev = (qual_prev & 0x03);
52 
53  // Cancel this wire
54  // 1) If the candidate at the previous wire is at the same bx
55  // clock and has better quality (or equal? quality - this has
56  // been implemented only in 2004).
57  // 2) If the candidate at the previous wire is up to 4 clocks
58  // earlier, regardless of quality.
59  if (dt == 0) {
60  if (qual_prev > qual_this)
61  ghost_cleared[key_wire][i_pattern] = 1;
62  } else if (dt > 0 && dt <= ghost_cancellation_bx_depth) {
63  if ((!ghost_cancellation_side_quality) || (qual_prev > qual_this))
64  ghost_cleared[key_wire][i_pattern] = 1;
65  }
66  }
67 
68  // Next wire.
69  // Skip this step if this wire is already declared "ghost".
70  if (ghost_cleared[key_wire][i_pattern] == 1) {
71  if (infoV > 1)
72  LogTrace("CSCUpgradeAnodeLCTProcessor")
73  << ((i_pattern == 0) ? "Accelerator" : "Collision") << " pattern ghost cancelled on key_wire "
74  << key_wire << " q=" << qual_this << " by wire " << key_wire - 1 << " q=" << qual_prev
75  << " dt=" << dt;
76  continue;
77  }
78 
79  dt = -1;
80  int qual_next = (key_wire < numWireGroups - 1) ? quality[key_wire + 1][i_pattern] : 0;
81  if (qual_next > 0) {
82  if (use_corrected_bx)
83  dt = first_bx_corrected[key_wire] - first_bx_corrected[key_wire + 1];
84  else
85  dt = first_bx[key_wire] - first_bx[key_wire + 1];
86  // hack to run the Phase-II ME2/1, ME3/1 and ME4/1 ILT
88  qual_next = (qual_next & 0x03);
89  // Same cancellation logic as for the previous wire.
90  if (dt == 0) {
91  if (qual_next >= qual_this)
92  ghost_cleared[key_wire][i_pattern] = 1;
93  } else if (dt > 0 && dt <= ghost_cancellation_bx_depth) {
94  if ((!ghost_cancellation_side_quality) || (qual_next >= qual_this))
95  ghost_cleared[key_wire][i_pattern] = 1;
96  }
97  }
98  if (ghost_cleared[key_wire][i_pattern] == 1) {
99  if (infoV > 1)
100  LogTrace("CSCUpgradeAnodeLCTProcessor")
101  << ((i_pattern == 0) ? "Accelerator" : "Collision") << " pattern ghost cancelled on key_wire "
102  << key_wire << " q=" << qual_this << " by wire " << key_wire + 1 << " q=" << qual_next
103  << " dt=" << dt;
104  continue;
105  }
106  }
107  }
108  }
109 
110  // All cancellation is done in parallel, so wiregroups do not know what
111  // their neighbors are cancelling.
112  for (int key_wire = 0; key_wire < numWireGroups; key_wire++) {
113  for (int i_pattern = 0; i_pattern < 2; i_pattern++) {
114  if (ghost_cleared[key_wire][i_pattern] > 0) {
115  clear(key_wire, i_pattern);
116  }
117  }
118  }
119 }
120 
121 void CSCUpgradeAnodeLCTProcessor::ghostCancellationLogicOneWire(const int key_wire, int* ghost_cleared) {
122  for (int i_pattern = 0; i_pattern < 2; i_pattern++) {
123  ghost_cleared[i_pattern] = 0;
124  if (key_wire == 0)
125  continue;
126 
127  // Non-empty wire group.
128  int qual_this = quality[key_wire][i_pattern];
129  if (qual_this > 0) {
131  qual_this = (qual_this & 0x03);
132  // Previous wire.
133  int dt = -1;
134  for (auto& p : lct_list) {
135  if (not(p.isValid() and p.getKeyWG() == key_wire - 1 and 1 - p.getAccelerator() == i_pattern))
136  continue;
137 
138  bool ghost_cleared_prev = false;
139  int qual_prev = p.getQuality();
140  int first_bx_prev = p.getBX();
141  if (infoV > 1)
142  LogTrace("CSCAnodeLCTProcessor")
143  << "ghost concellation logic " << ((i_pattern == 0) ? "Accelerator" : "Collision") << " key_wire "
144  << key_wire << " quality " << qual_this << " bx " << first_bx[key_wire] << " previous key_wire "
145  << key_wire - 1 << " quality " << qual_prev << " bx " << first_bx[key_wire - 1];
146 
147  //int dt = first_bx[key_wire] - first_bx[key_wire-1];
148  if (use_corrected_bx)
149  dt = first_bx_corrected[key_wire] - first_bx_prev;
150  else
151  dt = first_bx[key_wire] - first_bx_prev;
152  // hack to run the Phase-II ME2/1, ME3/1 and ME4/1 ILT
154  qual_prev = (qual_prev & 0x03);
155 
156  // Cancel this wire
157  // 1) If the candidate at the previous wire is at the same bx
158  // clock and has better quality (or equal? quality - this has
159  // been implemented only in 2004).
160  // 2) If the candidate at the previous wire is up to 4 clocks
161  // earlier, regardless of quality.
162  if (dt == 0) {
163  if (qual_prev > qual_this)
164  ghost_cleared[i_pattern] = 1;
165  } else if (dt > 0 && dt <= ghost_cancellation_bx_depth) {
166  if ((!ghost_cancellation_side_quality) || (qual_prev > qual_this))
167  ghost_cleared[i_pattern] = 1;
168  } else if (dt < 0 && dt * (-1) <= ghost_cancellation_bx_depth) {
169  if ((!ghost_cancellation_side_quality) || (qual_prev < qual_this))
170  ghost_cleared_prev = true;
171  }
172 
173  if (ghost_cleared[i_pattern] == 1) {
174  if (infoV > 1)
175  LogTrace("CSCUpgradeAnodeLCTProcessor")
176  << ((i_pattern == 0) ? "Accelerator" : "Collision") << " pattern ghost cancelled on key_wire "
177  << key_wire << " q=" << qual_this << " by wire " << key_wire - 1 << " q=" << qual_prev
178  << " dt=" << dt;
179  //cancellation for key_wire is done when ALCT is created and pushed to lct_list
180  }
181  if (ghost_cleared_prev) {
182  if (infoV > 1)
183  LogTrace("CSCAnodeLCTProcessor")
184  << ((i_pattern == 0) ? "Accelerator" : "Collision") << " pattern ghost cancelled on key_wire "
185  << key_wire - 1 << " q=" << qual_prev << " by wire " << key_wire << " q=" << qual_this;
186  p.setValid(0); //clean prev ALCT
187  }
188  }
189  }
190  }
191 }
192 
194  // Quality definition changed on 22 June 2007: it no longer depends
195  // on pattern_thresh.
196  int Q;
197  // hack to run the Phase-II ME2/1, ME3/1 and ME4/1 ILT
198  if (temp_quality == 3 and isSLHC_ and (runME21ILT_ or runME31Up_ or runME41Up_))
199  Q = 4;
200  else if (temp_quality > 3)
201  Q = temp_quality - 3;
202  else
203  Q = 0; // quality code 0 is valid!
204 
205  return Q;
206 }
CSCConstants::MAX_NUM_WIRES
Definition: CSCConstants.h:22
CSCBaseboard::isSLHC_
bool isSLHC_
Definition: CSCBaseboard.h:82
CSCBaseboard::enableAlctSLHC_
bool enableAlctSLHC_
Definition: CSCBaseboard.h:83
relativeConstraints.station
station
Definition: relativeConstraints.py:67
AlCaHLTBitMon_ParallelJobs.p
p
Definition: AlCaHLTBitMon_ParallelJobs.py:153
CSCUpgradeAnodeLCTProcessor::ghostCancellationLogic
void ghostCancellationLogic() override
Definition: CSCUpgradeAnodeLCTProcessor.cc:29
CSCAnodeLCTProcessor::first_bx_corrected
int first_bx_corrected[CSCConstants::MAX_NUM_WIRES]
Definition: CSCAnodeLCTProcessor.h:112
makeMuonMisalignmentScenario.endcap
endcap
Definition: makeMuonMisalignmentScenario.py:320
CSCUpgradeAnodeLCTProcessor::CSCUpgradeAnodeLCTProcessor
CSCUpgradeAnodeLCTProcessor()
Definition: CSCUpgradeAnodeLCTProcessor.cc:19
class-composition.Q
Q
Definition: class-composition.py:82
dt
float dt
Definition: AMPTWrapper.h:136
CSCAnodeLCTProcessor::quality
int quality[CSCConstants::MAX_NUM_WIRES][3]
Definition: CSCAnodeLCTProcessor.h:113
CSCAnodeLCTProcessor::lct_list
std::vector< CSCALCTDigi > lct_list
Definition: CSCAnodeLCTProcessor.h:117
CSCBaseboard::runME41Up_
bool runME41Up_
Definition: CSCBaseboard.h:107
CSCAnodeLCTProcessor::clear
void clear()
Definition: CSCAnodeLCTProcessor.cc:194
CSCBaseboard::runME31Up_
bool runME31Up_
Definition: CSCBaseboard.h:106
edm::ParameterSet
Definition: ParameterSet.h:36
edm::LogError
Definition: MessageLogger.h:183
CSCUpgradeAnodeLCTProcessor::ghostCancellationLogicOneWire
void ghostCancellationLogicOneWire(const int key_wire, int *ghost_cleared) override
Definition: CSCUpgradeAnodeLCTProcessor.cc:121
CSCUpgradeAnodeLCTProcessor.h
CSCAnodeLCTProcessor::use_corrected_bx
bool use_corrected_bx
Definition: CSCAnodeLCTProcessor.h:148
CSCAnodeLCTProcessor::numWireGroups
int numWireGroups
Definition: CSCAnodeLCTProcessor.h:108
CSCAnodeLCTProcessor::ghost_cancellation_side_quality
bool ghost_cancellation_side_quality
Definition: CSCAnodeLCTProcessor.h:142
CSCBaseboard::runME21ILT_
bool runME21ILT_
Definition: CSCBaseboard.h:101
CSCAnodeLCTProcessor::first_bx
int first_bx[CSCConstants::MAX_NUM_WIRES]
Definition: CSCAnodeLCTProcessor.h:111
relativeConstraints.chamber
chamber
Definition: relativeConstraints.py:53
or
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
CSCAnodeLCTProcessor
Definition: CSCAnodeLCTProcessor.h:45
LogTrace
#define LogTrace(id)
Definition: MessageLogger.h:671
CSCAnodeLCTProcessor::ghost_cancellation_bx_depth
int ghost_cancellation_bx_depth
Definition: CSCAnodeLCTProcessor.h:138
CSCUpgradeAnodeLCTProcessor::getTempALCTQuality
int getTempALCTQuality(int temp_quality) const override
Definition: CSCUpgradeAnodeLCTProcessor.cc:193
CSCBaseboard::infoV
int infoV
Definition: CSCBaseboard.h:61