112 unsigned sector,
unsigned subsector,
115 CSCBaseboard(endcap, station, sector, subsector, chamber, conf)
117 static std::atomic<bool> config_dumped{
false};
158 if ((infoV > 0 || (
isSLHC_)) && !config_dumped) {
161 config_dumped =
true;
181 static std::atomic<bool> config_dumped{
false};
191 if (!config_dumped) {
194 config_dumped =
true;
236 static std::atomic<bool> config_dumped{
false};
251 if (!config_dumped) {
254 config_dumped =
true;
263 static const unsigned int max_fifo_tbins = 1 << 5;
264 static const unsigned int max_fifo_pretrig = 1 << 5;
265 static const unsigned int max_drift_delay = 1 << 2;
266 static const unsigned int max_nplanes_hit_pretrig = 1 << 3;
267 static const unsigned int max_nplanes_hit_pattern = 1 << 3;
268 static const unsigned int max_nplanes_hit_accel_pretrig = 1 << 3;
269 static const unsigned int max_nplanes_hit_accel_pattern = 1 << 3;
270 static const unsigned int max_trig_mode = 1 << 2;
271 static const unsigned int max_accel_mode = 1 << 2;
278 <<
", exceeds max allowed, " << max_fifo_tbins-1 <<
" +++\n" 279 <<
"+++ Try to proceed with the default value, fifo_tbins=" 286 <<
", exceeds max allowed, " << max_fifo_pretrig-1 <<
" +++\n" 287 <<
"+++ Try to proceed with the default value, fifo_pretrig=" 294 <<
", exceeds max allowed, " << max_drift_delay-1 <<
" +++\n" 295 <<
"+++ Try to proceed with the default value, drift_delay=" 302 <<
", exceeds max allowed, " << max_nplanes_hit_pretrig-1 <<
" +++\n" 303 <<
"+++ Try to proceed with the default value, nplanes_hit_pretrig=" 310 <<
", exceeds max allowed, " << max_nplanes_hit_pattern-1 <<
" +++\n" 311 <<
"+++ Try to proceed with the default value, nplanes_hit_pattern=" 317 <<
"+++ Value of nplanes_hit_accel_pretrig, " 319 << max_nplanes_hit_accel_pretrig-1 <<
" +++\n" 320 <<
"+++ Try to proceed with the default value, " 326 <<
"+++ Value of nplanes_hit_accel_pattern, " 328 << max_nplanes_hit_accel_pattern-1 <<
" +++\n" 329 <<
"+++ Try to proceed with the default value, " 335 <<
"+++ Value of trig_mode, " <<
trig_mode 336 <<
", exceeds max allowed, " << max_trig_mode-1 <<
" +++\n" 337 <<
"+++ Try to proceed with the default value, trig_mode=" 344 <<
", exceeds max allowed, " << max_accel_mode-1 <<
" +++\n" 345 <<
"+++ Try to proceed with the default value, accel_mode=" 352 <<
", exceeds max allowed, " << max_l1a_window_width-1 <<
" +++\n" 353 <<
"+++ Try to proceed with the default value, l1a_window_width=" 371 if (pattern == 0)
quality[wire][0] = -999;
378 std::vector<CSCALCTDigi>
381 static std::atomic<bool> config_dumped{
false};
385 config_dumped =
true;
402 <<
"+++ CSC geometry looks garbled; no emulation possible +++\n";
411 <<
" is not defined in current geometry! +++\n" 412 <<
"+++ CSC geometry looks garbled; no emulation possible +++\n";
423 <<
"; ALCT emulation skipped! +++";
424 std::vector<CSCALCTDigi> emptyV;
440 const unsigned int min_layers =
448 unsigned int layersHit = 0;
451 if (!wire[i_layer][i_wire].
empty()) {layersHit++;
break;}
454 if (layersHit >= min_layers)
run(wire);
473 if (!chamber_empty) {
475 unsigned int start_bx = 0;
477 while (start_bx < stop_bx) {
482 int ghost_cleared[2] = {0, 0};
490 if (
quality[i_wire][0] > 0 and bx < CSCConstants::MAX_ALCT_TBINS){
491 int valid = (ghost_cleared[0] == 0) ? 1 : 0;
494 <<
"Add one ALCT to list "<<
lct_list.back();
498 if (
quality[i_wire][1] > 0 and bx < CSCConstants::MAX_ALCT_TBINS){
499 int valid = (ghost_cleared[1] == 0) ? 1 : 0;
502 <<
"Add one ALCT to list "<<
lct_list.back();
538 digiV[i_layer].clear();
553 <<
"found " <<
digiV[i_layer].size()
554 <<
" wire digi(s) in layer " << i_layer <<
" of " <<
theCSCName_ 557 for (
const auto& wd :
digiV[i_layer]) {
558 LogTrace(
"CSCAnodeLCTProcessor") <<
" " << wd;
572 digiIt != rwired.second; ++digiIt) {
573 digiV[
id.layer()-1].push_back(*digiIt);
583 for (
const auto& wd :
digiV[i_layer]) {
584 int i_wire = wd.getWireGroup()-1;
585 std::vector<int> bx_times = wd.getTimeBinsOn();
590 <<
"+++ Found wire digi with wrong wire number = " << i_wire
591 <<
" (max wires = " <<
numWireGroups <<
"); skipping it... +++\n";
601 int last_time = -999;
603 wire[i_layer][i_wire].push_back(0);
604 wire[i_layer][i_wire].push_back(6);
607 for (
unsigned int i = 0;
i < bx_times.size();
i++) {
609 if (
i > 0 && bx_times[
i] == (bx_times[
i-1]+1))
continue;
612 <<
"Digi on layer " << i_layer <<
" wire " << i_wire
613 <<
" at time " << bx_times[
i];
618 if (last_time < 0 || ((bx_times[
i]-last_time) >= 6) ) {
619 wire[i_layer][i_wire].push_back(bx_times[
i]);
620 last_time = bx_times[
i];
625 <<
"+++ Skipping wire digi: wire = " << i_wire
626 <<
" layer = " << i_layer <<
", bx = " << bx_times[
i] <<
" +++";
636 bool chamber_empty =
true;
637 int i_wire, i_layer, digi_num;
638 const unsigned int bits_in_pulse = 8*
sizeof(
pulse[0][0]);
642 pulse[i_layer][i_wire] = 0;
646 for (
int j = 0; j < 3; j++)
quality[i_wire][j] = -999;
652 if (!wire[i_layer][i_wire].
empty()) {
653 std::vector<int> bx_times = wire[i_layer][i_wire];
654 for (
unsigned int i = 0;
i < bx_times.size();
i++) {
656 if (bx_times[
i] < 0 || bx_times[
i] +
hit_persist >= bits_in_pulse) {
658 <<
"+++ BX time of wire digi (wire = " << i_wire
659 <<
" layer = " << i_layer <<
") bx = " << bx_times[
i]
660 <<
" is not within the range (0-" << bits_in_pulse
661 <<
"] allowed for pulse extension. Skip this digi! +++\n";
666 if (chamber_empty) chamber_empty =
false;
669 for (
unsigned int bx = bx_times[
i];
671 pulse[i_layer][i_wire] =
pulse[i_layer][i_wire] | (1 << bx);
676 <<
"Wire digi: layer " << i_layer
677 <<
" digi #" << ++digi_num <<
" wire group " << i_wire
678 <<
" time " << bx_times[
i];
680 std::ostringstream strstrm;
681 for (
int i = 1;
i <= 32;
i++) {
682 strstrm << ((pulse[i_layer][i_wire]>>(32-
i)) & 1);
684 LogTrace(
"CSCAnodeLCTProcessor") <<
" Pulse: " << strstrm.str();
692 if (
infoV > 1 && !chamber_empty) {
696 return chamber_empty;
701 unsigned int layers_hit;
703 int this_layer, this_wire;
706 const unsigned int nplanes_hit_pretrig_acc =
718 for (
unsigned int bx_time = start_bx; bx_time < stop_bx; bx_time++) {
721 hit_layer[i_layer] =
false;
730 if (((
pulse[this_layer][this_wire] >> bx_time) & 1) == 1) {
732 if (hit_layer[this_layer] ==
false){
733 hit_layer[this_layer] =
true;
739 if (layers_hit >= pretrig_thresh[i_pattern]) {
743 <<
"Pretrigger was satisfied for wire: " << key_wire
744 <<
" pattern: " << i_pattern
745 <<
" bx_time: " << bx_time;
763 unsigned int temp_quality;
764 int this_layer, this_wire, delta_wire;
767 const unsigned int nplanes_hit_pattern_acc =
773 const std::string ptn_label[] = {
"Accelerator",
"CollisionA",
"CollisionB"};
778 hit_layer[i_layer] =
false;
780 double num_pattern_hits=0., times_sum=0.;
781 std::multiset<int> mset_for_median;
782 mset_for_median.clear();
788 this_wire = delta_wire + key_wire;
793 if ( ( (
pulse[this_layer][this_wire] >>
798 if (hit_layer[this_layer] ==
false){
801 hit_layer[this_layer] =
true;
804 <<
"bx_time: " <<
first_bx[key_wire]
805 <<
" pattern: " << i_pattern <<
" keywire: " << key_wire
806 <<
" layer: " << this_layer
807 <<
" quality: " << temp_quality;
811 if (
abs(delta_wire)<2) {
816 if (((
pulse[this_layer][this_wire] >> (first_bx_layer-1)) & 1) == 1) first_bx_layer--;
819 times_sum += (double)first_bx_layer;
820 num_pattern_hits += 1.;
821 mset_for_median.insert(first_bx_layer);
824 <<
" 1st bx in layer: "<<first_bx_layer
825 <<
" sum bx: "<<times_sum
826 <<
" #pat. hits: "<<num_pattern_hits;
834 const int sz = mset_for_median.size();
836 std::multiset<int>::iterator im = mset_for_median.begin();
837 if (sz > 1) std::advance(im,sz/2-1);
842 #if defined(EDM_ML_DEBUG) 845 for (im = mset_for_median.begin(); im != mset_for_median.end(); im++) {
852 if (temp_quality >= pattern_thresh[i_pattern]) {
859 if (i_pattern == 0) {
861 quality[key_wire][0] = temp_quality;
865 if (static_cast<int>(temp_quality) >
quality[key_wire][1]) {
866 quality[key_wire][1] = temp_quality;
867 quality[key_wire][2] = i_pattern-1;
872 <<
"Pattern found; keywire: " << key_wire
873 <<
" type: " << ptn_label[i_pattern]
874 <<
" quality: " << temp_quality <<
"\n";
881 <<
"Collision Pattern A is chosen" <<
"\n";
882 else if (
quality[key_wire][2] == 1)
884 <<
"Collision Pattern B is chosen" <<
"\n";
898 for (
int key_wire = 0; key_wire <
numWireGroups; key_wire++) {
899 for (
int i_pattern = 0; i_pattern < 2; i_pattern++) {
900 ghost_cleared[key_wire][i_pattern] = 0;
903 int qual_this =
quality[key_wire][i_pattern];
907 int qual_prev = (key_wire > 0) ?
quality[key_wire-1][i_pattern] : 0;
917 if (qual_prev >= qual_this) ghost_cleared[key_wire][i_pattern] = 1;
921 (qual_prev > qual_this) )
922 ghost_cleared[key_wire][i_pattern] = 1;
928 if (ghost_cleared[key_wire][i_pattern] == 1) {
930 << ((i_pattern == 0) ?
"Accelerator" :
"Collision")
931 <<
" pattern ghost cancelled on key_wire " << key_wire <<
" q="<<qual_this
932 <<
" by wire " << key_wire-1<<
" q="<<qual_prev;
937 (key_wire < numWireGroups-1) ?
quality[key_wire+1][i_pattern] : 0;
942 if (qual_next > qual_this) ghost_cleared[key_wire][i_pattern] = 1;
946 (qual_next >= qual_this) )
947 ghost_cleared[key_wire][i_pattern] = 1;
950 if (ghost_cleared[key_wire][i_pattern] == 1) {
952 << ((i_pattern == 0) ?
"Accelerator" :
"Collision")
953 <<
" pattern ghost cancelled on key_wire " << key_wire <<
" q="<<qual_this
954 <<
" by wire " << key_wire+1<<
" q="<<qual_next;
964 for (
int key_wire = 0; key_wire <
numWireGroups; key_wire++) {
965 for (
int i_pattern = 0; i_pattern < 2; i_pattern++) {
966 if (ghost_cleared[key_wire][i_pattern] > 0) {
967 clear(key_wire, i_pattern);
981 for (
int i_pattern = 0; i_pattern < 2; i_pattern++) {
982 ghost_cleared[i_pattern] = 0;
983 if (key_wire == 0)
continue;
986 int qual_this =
quality[key_wire][i_pattern];
996 if (not (
p.getKeyWG() == key_wire -1 and 1-
p.getAccelerator() == i_pattern))
continue;
998 bool ghost_cleared_prev =
false;
999 int qual_prev =
p.getQuality();
1000 int first_bx_prev =
p.getBX();
1002 <<
"ghost concellation logic " << ((i_pattern == 0) ?
"Accelerator" :
"Collision")
1003 <<
" key_wire "<< key_wire <<
" quality "<< qual_this <<
" bx " <<
first_bx[key_wire]
1004 <<
" previous key_wire "<< key_wire -1 <<
" quality "<< qual_prev <<
" bx " <<
first_bx[key_wire-1];
1007 int dt = first_bx[key_wire] - first_bx_prev;
1015 if (qual_prev >= qual_this) ghost_cleared[i_pattern] = 1;
1016 else if (qual_prev < qual_this) ghost_cleared_prev =
true;
1020 (qual_prev > qual_this) )
1021 ghost_cleared[i_pattern] = 1;
1025 (qual_prev < qual_this) )
1026 ghost_cleared_prev =
true;
1029 if (ghost_cleared[i_pattern] == 1) {
1031 << ((i_pattern == 0) ?
"Accelerator" :
"Collision")
1032 <<
" pattern ghost cancelled on key_wire " << key_wire <<
" q="<<qual_this
1033 <<
" by wire " << key_wire-1<<
" q="<<qual_prev;
1037 if (ghost_cleared_prev) {
1039 << ((i_pattern == 0) ?
"Accelerator" :
"Collision")
1040 <<
" pattern ghost cancelled on key_wire " << key_wire - 1 <<
" q="<<qual_prev
1041 <<
" by wire " << key_wire <<
" q="<<qual_this;
1060 int n_alct_all=0, n_alct=0;
1064 for (
const auto&
p: fourBest) {
1069 <<
" all "<<n_alct_all<<
" found "<<n_alct;
1074 for (
const auto&
p : fourBest) {
1076 const int bx =
p.getBX();
1079 <<
"+++ Bx of ALCT candidate, " << bx <<
", exceeds max allowed, " 1120 const std::vector<CSCALCTDigi>& all_alcts)
1126 LogTrace(
"CSCAnodeLCTProcessor") << all_alcts.size() <<
1127 " ALCTs at the input of best-track selector: ";
1128 for (
const auto&
p : all_alcts) {
1129 if (!
p.isValid())
continue;
1136 for (
const auto&
p : all_alcts) {
1137 if (!
p.isValid())
continue;
1147 int accel =
p.getAccelerator();
1148 int qual =
p.getQuality();
1149 int wire =
p.getKeyWG();
1150 bool vA = tA[bx][accel].
isValid();
1151 bool vB = tB[bx][accel].
isValid();
1156 if (!vA || qual > qA || (qual == qA && wire > wA)) {
1159 if (!vB || qual > qB || (qual == qB && wire < wB)) {
1165 for (
int accel = 0; accel <= 1; accel++) {
1167 if (tA[bx][accel].isValid()) {
1169 LogTrace(
"CSCAnodeLCTProcessor") <<
"tA: " << tA[bx][accel];
1170 LogTrace(
"CSCAnodeLCTProcessor") <<
"tB: " << tB[bx][accel];
1172 bestALCTs[bx][accel] = tA[bx][accel];
1175 if (tA[bx][accel] != tB[bx][accel] &&
1176 tA[bx][accel].getQuality() == tB[bx][accel].getQuality()) {
1177 secondALCTs[bx][accel] = tB[bx][accel];
1184 for (
const auto&
p : all_alcts) {
1186 p.getAccelerator() == accel &&
1188 p.getQuality() < bestALCTs[bx][accel].
getQuality() &&
1189 p.getQuality() >= secondALCTs[bx][accel].
getQuality() &&
1190 p.getKeyWG() >= secondALCTs[bx][accel].
getKeyWG()) {
1191 secondALCTs[bx][accel] =
p;
1200 std::vector<CSCALCTDigi> fourBest;
1203 if (bestALCTs[bx][
i].isValid()) {
1204 fourBest.push_back(bestALCTs[bx][
i]);
1208 if (secondALCTs[bx][
i].isValid()) {
1209 fourBest.push_back(secondALCTs[bx][
i]);
1215 LogTrace(
"CSCAnodeLCTProcessor") << fourBest.size() <<
" ALCTs selected: ";
1216 for (
const auto&
p : fourBest) {
1227 bool returnValue =
false;
1233 if (lhsALCT.
getBX() < rhsALCT.
getBX()) {returnValue =
true;}
1234 if (lhsALCT.
getBX() != rhsALCT.
getBX()) {
return returnValue;}
1239 if (qual1 > qual2) {returnValue =
true;}
1265 if (
quality[key_wire][1] > 0) {
1268 <<
"trigMode(): collision track " << key_wire <<
" disabled" <<
"\n";
1273 if (
quality[key_wire][0] > 0) {
1276 <<
"trigMode(): accelerator track " << key_wire <<
" disabled" <<
"\n";
1285 <<
"trigMode(): collision track " << key_wire <<
" disabled" <<
"\n";
1293 int promotionBit = 1 << 2;
1299 if (
quality[key_wire][0] > 0) {
1302 <<
"alctMode(): accelerator track " << key_wire <<
" ignored" <<
"\n";
1307 if (
quality[key_wire][1] > 0) {
1308 quality[key_wire][1] += promotionBit;
1310 <<
"alctMode(): collision track " << key_wire <<
" promoted" <<
"\n";
1315 if (
quality[key_wire][0] > 0) {
1316 quality[key_wire][0] += promotionBit;
1318 <<
"alctMode(): accelerator track " << key_wire <<
" promoted"<<
"\n";
1323 if (
quality[key_wire][1] > 0) {
1326 <<
"alctMode(): collision track " << key_wire <<
" ignored" <<
"\n";
1335 std::ostringstream strm;
1337 strm <<
"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n";
1338 strm <<
"+ ALCT configuration parameters: +\n";
1339 strm <<
"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n";
1340 strm <<
" fifo_tbins [total number of time bins in DAQ readout] = " 1342 strm <<
" fifo_pretrig [start time of anode raw hits in DAQ readout] = " 1344 strm <<
" drift_delay [drift delay after pre-trigger, in 25 ns bins] = " 1346 strm <<
" nplanes_hit_pretrig [min. number of layers hit for pre-trigger] = " 1348 strm <<
" nplanes_hit_pattern [min. number of layers hit for trigger] = " 1350 strm <<
" nplanes_hit_accel_pretrig [min. number of layers hit for accel." 1352 strm <<
" nplanes_hit_accel_pattern [min. number of layers hit for accel." 1354 strm <<
" trig_mode [enabling/disabling collision/accelerator tracks] = " 1356 strm <<
" accel_mode [preference to collision/accelerator tracks] = " 1358 strm <<
" l1a_window_width [L1Accept window width, in 25 ns bins] = " 1360 strm <<
"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n";
1361 LogDebug(
"CSCAnodeLCTProcessor") << strm.str();
1372 std::ostringstream strstrm;
1374 if (i_wire%10 == 0) {
1375 if (i_wire < 100) strstrm << i_wire/10;
1376 else strstrm << (i_wire-100)/10;
1378 else strstrm <<
" ";
1382 strstrm << i_wire%10;
1387 if (!wire[i_layer][i_wire].
empty()) {
1388 std::vector<int> bx_times = wire[i_layer][i_wire];
1389 strstrm << std::hex << bx_times[0] <<
std::dec;
1396 LogTrace(
"CSCAnodeLCTProcessor") << strstrm.str();
1403 std::vector<CSCALCTDigi> tmpV;
1408 const int lct_bins =
1411 static std::atomic<int> late_tbins{
early_tbins + lct_bins};
1413 static std::atomic<int> ifois{0};
1423 <<
"; in-time ALCTs are not getting read-out!!! +++" <<
"\n";
1428 <<
"+++ Allowed range of time bins, [0-" << late_tbins
1430 <<
"+++ Set late_tbins to max allowed +++\n";
1431 late_tbins = CSCConstants::MAX_ALCT_TBINS-1;
1438 const std::vector<CSCALCTDigi>& all_alcts =
getALCTs();
1439 for (
const auto&
p : all_alcts) {
1440 if (!
p.isValid())
continue;
1446 <<
" Do not report ALCT on keywire " <<
p.getKeyWG()
1447 <<
": found at bx " << bx <<
", whereas the earliest allowed bx is " 1453 if (bx > late_tbins) {
1455 <<
" Do not report ALCT on keywire " <<
p.getKeyWG()
1456 <<
": found at bx " << bx <<
", whereas the latest allowed bx is " 1470 for (
auto&
p : tmpV){
1479 std::vector<CSCALCTDigi> tmpV;
1495 std::ostringstream strstrm_header;
1497 <<
"\n" <<
"Pattern: " << i_pattern <<
" Key wire: " << key_wire;
1498 for (
int i = 1;
i <= 32;
i++) {
1499 strstrm_header << ((32-
i)%10);
1501 LogTrace(
"CSCAnodeLCTProcessor") << strstrm_header.str();
1504 std::ostringstream strstrm_pulse;
1508 for (
int i = 1;
i <= 32;
i++) {
1509 strstrm_pulse << ((pulse[this_layer][this_wire]>>(32-
i)) & 1);
1512 << strstrm_pulse.str() <<
" on layer " << this_layer <<
" wire "<< this_wire;
1517 <<
"-------------------------------------------";
1524 if (temp_quality > 3) Q = temp_quality - 3;
T getParameter(std::string const &) const
int ghost_cancellation_bx_depth
void showPatterns(const int key_wire)
void readWireDigis(std::vector< int > wire[CSCConstants::NUM_LAYERS][CSCConstants::MAX_NUM_WIRES])
int quality[CSCConstants::MAX_NUM_WIRES][3]
unsigned int alctDriftDelay() const
void checkConfigParameters()
int first_bx_corrected[CSCConstants::MAX_NUM_WIRES]
static const unsigned int def_drift_delay
static const unsigned int def_fifo_tbins
bool getDigis(const CSCWireDigiCollection *wiredc)
const CSCChamber * cscChamber_
bool isValid() const
check ALCT validity (1 - valid ALCT)
unsigned int nplanes_hit_pattern
void clear()
clear this ALCT
unsigned int alctNplanesHitPretrig() const
bool isBetterALCT(const CSCALCTDigi &lhsALCT, const CSCALCTDigi &rhsALCT) const
void setConfigParameters(const CSCDBL1TPParameters *conf)
void trigMode(const int key_wire)
int numberOfWireGroups() const
static const unsigned int def_accel_mode
std::vector< CSCALCTDigi > lct_list
unsigned int alctL1aWindowWidth() const
int getFullBX() const
return 12-bit full BX.
static const int pattern_envelope[CSCConstants::NUM_ALCT_PATTERNS][CSCConstants::MAX_WIRES_IN_PATTERN]
virtual void ghostCancellationLogic()
static const unsigned int def_nplanes_hit_accel_pretrig
const unsigned theTrigChamber
static const unsigned int def_fifo_pretrig
void accelMode(const int key_wire)
Abs< T >::type abs(const T &t)
const CSCLayer * layer(CSCDetId id) const
Return the layer corresponding to the given id.
int pattern_mask[CSCConstants::NUM_ALCT_PATTERNS][CSCConstants::MAX_WIRES_IN_PATTERN]
unsigned int l1a_window_width
static const unsigned int def_nplanes_hit_pattern
unsigned int alctTrigMode() const
bool preTrigger(const int key_wire, const int start_bx)
bool pulseExtension(const std::vector< int > wire[CSCConstants::NUM_LAYERS][CSCConstants::MAX_NUM_WIRES])
int getBX() const
return BX - five low bits of BXN counter tagged by the ALCT
CSCALCTDigi secondALCT[CSCConstants::MAX_ALCT_TBINS]
virtual int getTempALCTQuality(int temp_quality) const
static const unsigned int def_l1a_window_width
bool ghost_cancellation_side_quality
static const int pattern_mask_open[CSCConstants::NUM_ALCT_PATTERNS][CSCConstants::MAX_WIRES_IN_PATTERN]
int getQuality() const
return quality of a pattern
unsigned int alctAccelMode() const
static const unsigned int def_trig_mode
int getAccelerator() const
static const unsigned int def_nplanes_hit_accel_pattern
unsigned int alctFifoPretrig() const
std::vector< CSCALCTDigi > readoutALCTs()
unsigned int alctNplanesHitAccelPretrig() const
void setDefaultConfigParameters()
const unsigned theStation
std::vector< DigiType >::const_iterator const_iterator
unsigned int alctNplanesHitAccelPattern() const
std::vector< CSCALCTDigi > bestTrackSelector(const std::vector< CSCALCTDigi > &all_alcts)
unsigned int fifo_pretrig
CSCALCTDigi bestALCT[CSCConstants::MAX_ALCT_TBINS]
virtual void ghostCancellationLogicOneWire(const int key_wire, int *ghost_cleared)
int first_bx[CSCConstants::MAX_NUM_WIRES]
void dumpConfigParams() const
edm::ParameterSet alctParams_
std::pair< const_iterator, const_iterator > Range
void dumpDigis(const std::vector< int > wire[CSCConstants::NUM_LAYERS][CSCConstants::MAX_NUM_WIRES]) const
void setTrknmb(const uint16_t number)
Set track number (1,2) after sorting ALCTs.
unsigned int pulse[CSCConstants::NUM_LAYERS][CSCConstants::MAX_NUM_WIRES]
unsigned int alctNplanesHitPattern() const
bool patternDetection(const int key_wire)
static const int pattern_mask_r1[CSCConstants::NUM_ALCT_PATTERNS][CSCConstants::MAX_WIRES_IN_PATTERN]
unsigned int nplanes_hit_accel_pattern
std::vector< CSCALCTDigi > run(const CSCWireDigiCollection *wiredc)
unsigned int pretrig_extra_deadtime
int getKeyWG() const
return key wire group
const CSCLayerGeometry * geometry() const
std::vector< CSCWireDigi > digiV[CSCConstants::NUM_LAYERS]
unsigned int nplanes_hit_pretrig
std::vector< CSCALCTDigi > getALCTs()
static const unsigned int def_nplanes_hit_pretrig
const unsigned theSubsector
unsigned int nplanes_hit_accel_pretrig
unsigned int alctFifoTbins() const