145 unsigned sector,
unsigned subsector,
149 theEndcap(endcap), theStation(station), theSector(sector),
150 theSubsector(subsector), theTrigChamber(chamber) {
151 static bool config_dumped =
false;
158 conf.
getParameter<
unsigned int>(
"alctNplanesHitPretrig");
160 conf.
getParameter<
unsigned int>(
"alctNplanesHitPattern");
162 conf.
getParameter<
unsigned int>(
"alctNplanesHitAccelPretrig");
164 conf.
getParameter<
unsigned int>(
"alctNplanesHitAccelPattern");
180 if (infoV > 0 && !config_dumped) {
182 config_dumped =
true;
191 if (isMTCC || isTMB07) {
202 theEndcap(1), theStation(1), theSector(1),
203 theSubsector(1), theTrigChamber(1) {
205 static bool config_dumped =
false;
215 if (!config_dumped) {
217 config_dumped =
true;
247 static bool config_dumped =
false;
262 if (!config_dumped) {
264 config_dumped =
true;
272 static const unsigned int max_fifo_tbins = 1 << 5;
273 static const unsigned int max_fifo_pretrig = 1 << 5;
274 static const unsigned int max_drift_delay = 1 << 2;
275 static const unsigned int max_nplanes_hit_pretrig = 1 << 3;
276 static const unsigned int max_nplanes_hit_pattern = 1 << 3;
277 static const unsigned int max_nplanes_hit_accel_pretrig = 1 << 3;
278 static const unsigned int max_nplanes_hit_accel_pattern = 1 << 3;
279 static const unsigned int max_trig_mode = 1 << 2;
280 static const unsigned int max_accel_mode = 1 << 2;
281 static const unsigned int max_l1a_window_width =
MAX_ALCT_BINS;
287 <<
", exceeds max allowed, " << max_fifo_tbins-1 <<
" +++\n"
288 <<
"+++ Try to proceed with the default value, fifo_tbins="
295 <<
", exceeds max allowed, " << max_fifo_pretrig-1 <<
" +++\n"
296 <<
"+++ Try to proceed with the default value, fifo_pretrig="
303 <<
", exceeds max allowed, " << max_drift_delay-1 <<
" +++\n"
304 <<
"+++ Try to proceed with the default value, drift_delay="
311 <<
", exceeds max allowed, " << max_nplanes_hit_pretrig-1 <<
" +++\n"
312 <<
"+++ Try to proceed with the default value, nplanes_hit_pretrig="
319 <<
", exceeds max allowed, " << max_nplanes_hit_pattern-1 <<
" +++\n"
320 <<
"+++ Try to proceed with the default value, nplanes_hit_pattern="
326 <<
"+++ Value of nplanes_hit_accel_pretrig, "
328 << max_nplanes_hit_accel_pretrig-1 <<
" +++\n"
329 <<
"+++ Try to proceed with the default value, "
335 <<
"+++ Value of nplanes_hit_accel_pattern, "
337 << max_nplanes_hit_accel_pattern-1 <<
" +++\n"
338 <<
"+++ Try to proceed with the default value, "
344 <<
"+++ Value of trig_mode, " <<
trig_mode
345 <<
", exceeds max allowed, " << max_trig_mode-1 <<
" +++\n"
346 <<
"+++ Try to proceed with the default value, trig_mode="
353 <<
", exceeds max allowed, " << max_accel_mode-1 <<
" +++\n"
354 <<
"+++ Try to proceed with the default value, accel_mode="
361 <<
", exceeds max allowed, " << max_l1a_window_width-1 <<
" +++\n"
362 <<
"+++ Try to proceed with the default value, l1a_window_width="
377 if (pattern == 0)
quality[wire][0] = -999;
384 std::vector<CSCALCTDigi>
402 <<
" found in ME" << ((
theEndcap == 1) ?
"+" :
"-")
412 <<
"+++ CSC geometry looks garbled; no emulation possible +++\n";
425 <<
" is not defined in current geometry! +++\n"
426 <<
"+++ CSC geometry looks garbled; no emulation possible +++\n";
441 <<
"; ALCT emulation skipped! +++";
442 std::vector<CSCALCTDigi> emptyV;
458 const unsigned int min_layers =
463 unsigned int layersHit = 0;
466 if (!wire[i_layer][i_wire].
empty()) {layersHit++;
break;}
469 if (layersHit >= min_layers)
run(wire);
473 std::vector<CSCALCTDigi> tmpV =
getALCTs();
483 bool trigger =
false;
492 if (!chamber_empty) {
494 unsigned int start_bx = 0;
496 while (start_bx < stop_bx) {
507 start_bx =
first_bx[i_wire] + drift_delay + 4;
534 digiV[i_layer].clear();
549 <<
"found " <<
digiV[i_layer].size()
550 <<
" wire digi(s) in layer " << i_layer <<
" of ME"
552 <<
"/" << theChamber <<
" (trig. sector " <<
theSector
554 for (std::vector<CSCWireDigi>::iterator pld =
digiV[i_layer].
begin();
555 pld !=
digiV[i_layer].end(); pld++) {
556 LogTrace(
"CSCAnodeLCTProcessor") <<
" " << (*pld);
569 digiIt != rwired.second; ++digiIt) {
570 digiV[
id.layer()-1].push_back(*digiIt);
581 for (std::vector<CSCWireDigi>::iterator pld =
digiV[i_layer].
begin();
582 pld !=
digiV[i_layer].end(); pld++) {
583 int i_wire = pld->getWireGroup()-1;
584 std::vector<int> bx_times = pld->getTimeBinsOn();
589 <<
"+++ Found wire digi with wrong wire number = " << i_wire
590 <<
" (max wires = " <<
numWireGroups <<
"); skipping it... +++\n";
600 int last_time = -999;
602 wire[i_layer][i_wire].push_back(0);
603 wire[i_layer][i_wire].push_back(6);
606 for (
unsigned int i = 0;
i < bx_times.size();
i++) {
608 if (
i > 0 && bx_times[
i] == (bx_times[
i-1]+1))
continue;
611 <<
"Digi on layer " << i_layer <<
" wire " << i_wire
612 <<
" at time " << bx_times[
i];
617 if (last_time < 0 || ((bx_times[
i]-last_time) >= 6) ) {
618 wire[i_layer][i_wire].push_back(bx_times[
i]);
619 last_time = bx_times[
i];
624 <<
"+++ Skipping wire digi: wire = " << i_wire
625 <<
" layer = " << i_layer <<
", bx = " << bx_times[
i] <<
" +++";
640 bool chamber_empty =
true;
641 int i_wire, i_layer, digi_num;
642 static unsigned int hit_persist = 6;
643 static unsigned int bits_in_pulse = 8*
sizeof(
pulse[0][0]);
647 pulse[i_layer][i_wire] = 0;
650 for (
int j = 0;
j < 3;
j++)
quality[i_wire][
j] = -999;
656 if (wire[i_layer][i_wire].
size() > 0) {
657 std::vector<int> bx_times = wire[i_layer][i_wire];
658 for (
unsigned int i = 0;
i < bx_times.size();
i++) {
660 if (bx_times[
i] < 0 || bx_times[
i] + hit_persist >= bits_in_pulse) {
662 <<
"+++ BX time of wire digi (wire = " << i_wire
663 <<
" layer = " << i_layer <<
") bx = " << bx_times[
i]
664 <<
" is not within the range (0-" << bits_in_pulse
665 <<
"] allowed for pulse extension. Skip this digi! +++\n";
670 if (chamber_empty) chamber_empty =
false;
673 for (
unsigned int bx = bx_times[
i];
674 bx < (bx_times[
i] + hit_persist); bx++)
675 pulse[i_layer][i_wire] =
pulse[i_layer][i_wire] | (1 << bx);
680 <<
"Wire digi: layer " << i_layer
681 <<
" digi #" << ++digi_num <<
" wire group " << i_wire
682 <<
" time " << bx_times[
i];
684 std::ostringstream strstrm;
685 for (
int i = 1;
i <= 32;
i++) {
686 strstrm << ((pulse[i_layer][i_wire]>>(32-
i)) & 1);
688 LogTrace(
"CSCAnodeLCTProcessor") <<
" Pulse: " << strstrm.str();
696 if (
infoV > 1 && !chamber_empty) {
700 return chamber_empty;
708 unsigned int layers_hit;
710 int this_layer, this_wire;
713 const unsigned int nplanes_hit_pretrig_acc =
725 for (
unsigned int bx_time = start_bx; bx_time < stop_bx; bx_time++) {
728 hit_layer[i_layer] =
false;
737 if (((
pulse[this_layer][this_wire] >> bx_time) & 1) == 1) {
739 if (hit_layer[this_layer] ==
false){
740 hit_layer[this_layer] =
true;
746 if (layers_hit >= pretrig_thresh[i_pattern]) {
750 <<
"Pretrigger was satisfied for wire: " << key_wire
751 <<
" pattern: " << i_pattern
752 <<
" bx_time: " << bx_time;
771 bool trigger =
false;
773 unsigned int temp_quality;
774 int this_layer, this_wire;
777 const unsigned int nplanes_hit_pattern_acc =
783 const std::string ptn_label[] = {
"Accelerator",
"CollisionA",
"CollisionB"};
788 hit_layer[i_layer] =
false;
798 if (((
pulse[this_layer][this_wire] >>
803 if (hit_layer[this_layer] ==
false){
806 hit_layer[this_layer] =
true;
809 <<
"bx_time: " <<
first_bx[key_wire]
810 <<
" pattern: " << i_pattern <<
" keywire: " << key_wire
811 <<
" layer: " << this_layer
812 <<
" quality: " << temp_quality;
818 if (temp_quality >= pattern_thresh[i_pattern]) {
824 temp_quality -= (pattern_thresh[i_pattern]-1);
829 if (temp_quality > 3) temp_quality -= 3;
830 else temp_quality = 0;
833 if (i_pattern == 0) {
835 quality[key_wire][0] = temp_quality;
839 if (static_cast<int>(temp_quality) >
quality[key_wire][1]) {
840 quality[key_wire][1] = temp_quality;
841 quality[key_wire][2] = i_pattern-1;
846 <<
"Pattern found; keywire: " << key_wire
847 <<
" type: " << ptn_label[i_pattern]
848 <<
" quality: " << temp_quality <<
"\n";
855 <<
"Collision Pattern A is chosen" <<
"\n";
856 else if (
quality[key_wire][2] == 1)
858 <<
"Collision Pattern B is chosen" <<
"\n";
873 for (
int key_wire = 0; key_wire <
numWireGroups; key_wire++) {
874 for (
int i_pattern = 0; i_pattern < 2; i_pattern++) {
875 ghost_cleared[key_wire][i_pattern] = 0;
878 int qual_this =
quality[key_wire][i_pattern];
882 int qual_prev = (key_wire > 0) ?
quality[key_wire-1][i_pattern] : 0;
892 if (qual_prev >= qual_this) ghost_cleared[key_wire][i_pattern] = 1;
894 else if (dt > 0 && dt <= 4) {
900 ghost_cleared[key_wire][i_pattern] = 1;
906 if (ghost_cleared[key_wire][i_pattern] == 1) {
908 << ((i_pattern == 0) ?
"Accelerator" :
"Collision")
909 <<
" pattern ghost cancelled on key_wire " << key_wire
910 <<
" by wire " << key_wire-1;
915 (key_wire < numWireGroups-1) ?
quality[key_wire+1][i_pattern] : 0;
920 if (qual_next > qual_this) ghost_cleared[key_wire][i_pattern] = 1;
922 else if (dt > 0 && dt <= 4) {
928 ghost_cleared[key_wire][i_pattern] = 1;
931 if (ghost_cleared[key_wire][i_pattern] == 1) {
933 << ((i_pattern == 0) ?
"Accelerator" :
"Collision")
934 <<
" pattern ghost cancelled on key_wire " << key_wire
935 <<
" by wire " << key_wire+1;
944 for (
int key_wire = 0; key_wire <
numWireGroups; key_wire++) {
945 for (
int i_pattern = 0; i_pattern < 2; i_pattern++) {
946 if (ghost_cleared[key_wire][i_pattern] > 0) {
947 clear(key_wire, i_pattern);
956 std::vector<CSCALCTDigi> lct_list;
966 int qual = (
quality[i_wire][0] & 0x03);
968 lct_list.push_back(lct_info);
973 int qual = (
quality[i_wire][1] & 0x03);
976 lct_list.push_back(lct_info);
990 for (std::vector<CSCALCTDigi>::const_iterator plct = fourBest.begin();
991 plct != fourBest.end(); plct++) {
993 int bx = plct->getBX();
996 <<
"+++ Bx of ALCT candidate, " << bx <<
", exceeds max allowed, "
1021 if (first_bx < MAX_ALCT_BINS) {
1034 <<
"\n" <<
bestALCT[bx] <<
" found in ME"
1062 const std::vector<CSCALCTDigi>& all_alcts) {
1068 LogTrace(
"CSCAnodeLCTProcessor") << all_alcts.size() <<
1069 " ALCTs at the input of best-track selector: ";
1070 for (std::vector <CSCALCTDigi>::const_iterator plct = all_alcts.begin();
1071 plct != all_alcts.end(); plct++) {
1072 if (!plct->isValid())
continue;
1073 LogTrace(
"CSCAnodeLCTProcessor") << (*plct);
1078 for (std::vector <CSCALCTDigi>::const_iterator plct = all_alcts.begin();
1079 plct != all_alcts.end(); plct++) {
1080 if (!plct->isValid())
continue;
1089 int bx = (*plct).
getBX();
1090 int accel = (*plct).getAccelerator();
1091 int qual = (*plct).getQuality();
1092 int wire = (*plct).getKeyWG();
1093 bool vA = tA[bx][accel].
isValid();
1094 bool vB = tB[bx][accel].
isValid();
1099 if (!vA || qual > qA || (qual == qA && wire > wA)) {
1100 tA[bx][accel] = *plct;
1102 if (!vB || qual > qB || (qual == qB && wire < wB)) {
1103 tB[bx][accel] = *plct;
1108 for (
int accel = 0; accel <= 1; accel++) {
1110 if (tA[bx][accel].isValid()) {
1112 LogTrace(
"CSCAnodeLCTProcessor") <<
"tA: " << tA[bx][accel];
1113 LogTrace(
"CSCAnodeLCTProcessor") <<
"tB: " << tB[bx][accel];
1115 bestALCTs[bx][accel] = tA[bx][accel];
1118 if (tA[bx][accel] != tB[bx][accel] &&
1119 tA[bx][accel].getQuality() == tB[bx][accel].getQuality()) {
1120 secondALCTs[bx][accel] = tB[bx][accel];
1127 for (std::vector <CSCALCTDigi>::const_iterator plct =
1128 all_alcts.begin(); plct != all_alcts.end(); plct++) {
1129 if ((*plct).isValid() &&
1130 (*plct).getAccelerator() == accel && (*plct).getBX() == bx &&
1131 (*plct).getQuality() < bestALCTs[bx][accel].
getQuality() &&
1132 (*plct).getQuality() >= secondALCTs[bx][accel].
getQuality() &&
1133 (*plct).getKeyWG() >= secondALCTs[bx][accel].
getKeyWG()) {
1134 secondALCTs[bx][accel] = *plct;
1143 std::vector<CSCALCTDigi> fourBest;
1145 for (
int i = 0;
i < 2;
i++) {
1146 if (bestALCTs[bx][
i].isValid()) fourBest.push_back(bestALCTs[bx][
i]);
1148 for (
int i = 0;
i < 2;
i++) {
1149 if (secondALCTs[bx][
i].isValid()) fourBest.push_back(secondALCTs[bx][
i]);
1154 LogTrace(
"CSCAnodeLCTProcessor") << fourBest.size() <<
" ALCTs selected: ";
1155 for (std::vector<CSCALCTDigi>::const_iterator plct = fourBest.begin();
1156 plct != fourBest.end(); plct++) {
1157 LogTrace(
"CSCAnodeLCTProcessor") << (*plct);
1169 bool returnValue =
false;
1175 if (lhsALCT.
getBX() < rhsALCT.
getBX()) {returnValue =
true;}
1176 if (lhsALCT.
getBX() != rhsALCT.
getBX()) {
return returnValue;}
1181 if (qual1 > qual2) {returnValue =
true;}
1185 else if (qual1 == qual2 &&
1189 {returnValue =
true;}
1205 if (
quality[key_wire][1] > 0) {
1208 <<
"trigMode(): collision track " << key_wire <<
" disabled" <<
"\n";
1213 if (
quality[key_wire][0] > 0) {
1216 <<
"trigMode(): accelerator track " << key_wire <<
" disabled" <<
"\n";
1225 <<
"trigMode(): collision track " << key_wire <<
" disabled" <<
"\n";
1235 int promotionBit = 1 << 2;
1241 if (
quality[key_wire][0] > 0) {
1244 <<
"alctMode(): accelerator track " << key_wire <<
" ignored" <<
"\n";
1249 if (
quality[key_wire][1] > 0) {
1250 quality[key_wire][1] += promotionBit;
1252 <<
"alctMode(): collision track " << key_wire <<
" promoted" <<
"\n";
1257 if (
quality[key_wire][0] > 0) {
1258 quality[key_wire][0] += promotionBit;
1260 <<
"alctMode(): accelerator track " << key_wire <<
" promoted"<<
"\n";
1265 if (
quality[key_wire][1] > 0) {
1268 <<
"alctMode(): collision track " << key_wire <<
" ignored" <<
"\n";
1276 std::ostringstream strm;
1278 strm <<
"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n";
1279 strm <<
"+ ALCT configuration parameters: +\n";
1280 strm <<
"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n";
1281 strm <<
" fifo_tbins [total number of time bins in DAQ readout] = "
1283 strm <<
" fifo_pretrig [start time of anode raw hits in DAQ readout] = "
1285 strm <<
" drift_delay [drift delay after pre-trigger, in 25 ns bins] = "
1287 strm <<
" nplanes_hit_pretrig [min. number of layers hit for pre-trigger] = "
1289 strm <<
" nplanes_hit_pattern [min. number of layers hit for trigger] = "
1291 strm <<
" nplanes_hit_accel_pretrig [min. number of layers hit for accel."
1293 strm <<
" nplanes_hit_accel_pattern [min. number of layers hit for accel."
1295 strm <<
" trig_mode [enabling/disabling collision/accelerator tracks] = "
1297 strm <<
" accel_mode [preference to collision/accelerator tracks] = "
1299 strm <<
" l1a_window_width [L1Accept window width, in 25 ns bins] = "
1301 strm <<
"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n";
1302 LogDebug(
"CSCAnodeLCTProcessor") << strm.str();
1314 std::ostringstream strstrm;
1316 if (i_wire%10 == 0) {
1317 if (i_wire < 100) strstrm << i_wire/10;
1318 else strstrm << (i_wire-100)/10;
1320 else strstrm <<
" ";
1324 strstrm << i_wire%10;
1329 if (wire[i_layer][i_wire].
size() > 0) {
1330 std::vector<int> bx_times = wire[i_layer][i_wire];
1331 strstrm << std::hex << bx_times[0] << std::dec;
1338 LogTrace(
"CSCAnodeLCTProcessor") << strstrm.str();
1344 std::vector<CSCALCTDigi> tmpV;
1346 static int fpga_latency = 6;
1351 static int lct_bins =
1354 static int late_tbins = early_tbins + lct_bins;
1356 static int ifois = 0;
1358 if (
infoV >= 0 && early_tbins < 0) {
1361 <<
"; in-time ALCTs are not getting read-out!!! +++" <<
"\n";
1366 <<
"+++ Allowed range of time bins, [0-" << late_tbins
1368 <<
"+++ Set late_tbins to max allowed +++\n";
1369 late_tbins = MAX_ALCT_BINS-1;
1376 std::vector<CSCALCTDigi> all_alcts =
getALCTs();
1377 for (std::vector <CSCALCTDigi>::const_iterator plct = all_alcts.begin();
1378 plct != all_alcts.end(); plct++) {
1379 if (!plct->isValid())
continue;
1381 int bx = (*plct).getBX();
1383 if (bx <= early_tbins) {
1385 <<
" Do not report ALCT on keywire " << plct->getKeyWG()
1386 <<
": found at bx " << bx <<
", whereas the earliest allowed bx is "
1392 if (bx > late_tbins) {
1394 <<
" Do not report ALCT on keywire " << plct->getKeyWG()
1395 <<
": found at bx " << bx <<
", whereas the latest allowed bx is "
1400 tmpV.push_back(*plct);
1407 std::vector<CSCALCTDigi> tmpV;
1422 std::ostringstream strstrm_header;
1424 <<
"\n" <<
"Pattern: " << i_pattern <<
" Key wire: " << key_wire;
1425 for (
int i = 1;
i <= 32;
i++) {
1426 strstrm_header << ((32-
i)%10);
1428 LogTrace(
"CSCAnodeLCTProcessor") << strstrm_header.str();
1431 std::ostringstream strstrm_pulse;
1435 for (
int i = 1;
i <= 32;
i++) {
1436 strstrm_pulse << ((pulse[this_layer][this_wire]>>(32-
i)) & 1);
1439 << strstrm_pulse.str() <<
" on layer " << this_layer;
1444 <<
"-------------------------------------------";
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
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
CSCChamber * chamber(unsigned endcap, unsigned station, unsigned sector, unsigned subsector, unsigned tcscid) const
Return the CSCChamber for a corresponding endcap/station/sector/subsector/trigger cscid...
void checkConfigParameters()
static const unsigned int def_drift_delay
static const unsigned int def_fifo_tbins
CSCALCTDigi bestALCT[MAX_ALCT_BINS]
CSCALCTDigi secondALCT[MAX_ALCT_BINS]
static const int pattern_mask_slim[CSCConstants::NUM_ALCT_PATTERNS][NUM_PATTERN_WIRES]
bool getDigis(const CSCWireDigiCollection *wiredc)
bool isValid() const
check ALCT validity (1 - valid ALCT)
unsigned int nplanes_hit_pattern
void clear()
clear this ALCT
const unsigned theTrigChamber
unsigned int alctNplanesHitPretrig() const
void setConfigParameters(const CSCDBL1TPParameters *conf)
void trigMode(const int key_wire)
int numberOfWireGroups() const
static int ringFromTriggerLabels(int station, int triggerCSCID)
static const unsigned int def_accel_mode
unsigned int alctL1aWindowWidth() const
void ghostCancellationLogic()
static const unsigned int def_nplanes_hit_accel_pretrig
static const unsigned int def_fifo_pretrig
static CSCTriggerGeomManager * get()
void accelMode(const int key_wire)
const CSCLayer * layer(CSCDetId id) const
Return the layer corresponding to the given id.
unsigned int l1a_window_width
static const unsigned int def_nplanes_hit_pattern
static const int pattern_envelope[CSCConstants::NUM_ALCT_PATTERNS][NUM_PATTERN_WIRES]
unsigned int alctTrigMode() const
bool preTrigger(const int key_wire, const int start_bx)
static const int pattern_mask_open[CSCConstants::NUM_ALCT_PATTERNS][NUM_PATTERN_WIRES]
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
static const unsigned int def_l1a_window_width
int getQuality() const
return quality of a pattern
bool isBetterALCT(const CSCALCTDigi &lhsALCT, const CSCALCTDigi &rhsALCT)
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
int first_bx[CSCConstants::MAX_NUM_WIRES]
void dumpConfigParams() const
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.
const unsigned theSubsector
unsigned int pulse[CSCConstants::NUM_LAYERS][CSCConstants::MAX_NUM_WIRES]
unsigned int alctNplanesHitPattern() const
bool patternDetection(const int key_wire)
unsigned int nplanes_hit_accel_pattern
std::vector< CSCALCTDigi > run(const CSCWireDigiCollection *wiredc)
int getKeyWG() const
return key wire group
const CSCLayerGeometry * geometry() const
std::vector< CSCWireDigi > digiV[CSCConstants::NUM_LAYERS]
tuple size
Write out results.
static int chamberFromTriggerLabels(int TriggerSector, int TriggerSubSector, int station, int TriggerCSCID)
unsigned int nplanes_hit_pretrig
int pattern_mask[CSCConstants::NUM_ALCT_PATTERNS][NUM_PATTERN_WIRES]
std::vector< CSCALCTDigi > getALCTs()
static const unsigned int def_nplanes_hit_pretrig
unsigned int nplanes_hit_accel_pretrig
unsigned int alctFifoTbins() const