11 { -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5,
15 -4, -3, -2, -1, 0, 1, 2, 3, 4,
16 -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5 };
19 { 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999,
20 999, 999, 999, 999, 999,
22 999, 999, 999, 999, 999,
23 999, 999, 999, 999, 999, 999, 999, 999, 999,
24 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, -1, 0},
26 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
30 4, 4, 4, 4, 4, 4, 4, 4, 4,
31 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -1, 11},
33 { 999, 999, 999, 999, 999, 999, 999, 999, 0, 0, 0,
37 4, 4, 4, 999, 999, 999, 999, 999, 999,
38 5, 5, 5, 999, 999, 999, 999, 999, 999, 999, 999, 0, 11},
40 { 0, 0, 0, 999, 999, 999, 999, 999, 999, 999, 999,
44 999, 999, 999, 999, 999, 999, 4, 4, 4,
45 999, 999, 999, 999, 999, 999, 999, 999, 5, 5, 5, 1, 11},
47 { 999, 999, 999, 999, 999, 999, 999, 0, 0, 0, 999,
51 4, 4, 4, 999, 999, 999, 999, 999, 999,
52 999, 5, 5, 5, 999, 999, 999, 999, 999, 999, 999, 0, 9},
54 { 999, 0, 0, 0, 999, 999, 999, 999, 999, 999, 999,
58 999, 999, 999, 999, 999, 999, 4, 4, 4,
59 999, 999, 999, 999, 999, 999, 999, 5, 5, 5, 999, 1, 9},
61 { 999, 999, 999, 999, 999, 999, 0, 0, 0, 999, 999,
65 999, 999, 4, 4, 999, 999, 999, 999, 999,
66 999, 999, 5, 5, 5, 999, 999, 999, 999, 999, 999, 0, 7},
68 { 999, 999, 0, 0, 0, 999, 999, 999, 999, 999, 999,
72 999, 999, 999, 999, 999, 4, 4, 999, 999,
73 999, 999, 999, 999, 999, 999, 5, 5, 5, 999, 999, 1, 7},
75 { 999, 999, 999, 999, 999, 0, 0, 0, 999, 999, 999,
79 999, 999, 4, 4, 4, 999, 999, 999, 999,
80 999, 999, 999, 5, 5, 5, 999, 999, 999, 999, 999, 0, 5},
82 { 999, 999, 999, 0, 0, 0, 999, 999, 999, 999, 999,
86 999, 999, 999, 999, 4, 4, 4, 999, 999,
87 999, 999, 999, 999, 999, 5, 5, 5, 999, 999, 999, 1, 5},
89 { 999, 999, 999, 999, 0, 0, 0, 999, 999, 999, 999,
90 999, 999, 1, 999, 999,
92 999, 999, 3, 999, 999,
93 999, 999, 999, 4, 4, 4, 999, 999, 999,
94 999, 999, 999, 999, 5, 5, 5, 999, 999, 999, 999, 0, 3}
119 CSCBaseboard(endcap, station, sector, subsector, chamber, conf)
121 static std::atomic<bool> config_dumped{
false};
158 if ((infoV > 0) && !config_dumped) {
160 config_dumped =
true;
166 if ((i_layer+1)%2 == 0)
stagger[i_layer] = 0;
178 static std::atomic<bool> config_dumped{
false};
190 if (!config_dumped) {
192 config_dumped =
true;
198 if ((i_layer+1)%2 == 0)
stagger[i_layer] = 0;
222 static std::atomic<bool> config_dumped{
false};
235 if (!config_dumped) {
237 config_dumped =
true;
245 static const unsigned int max_fifo_tbins = 1 << 5;
246 static const unsigned int max_fifo_pretrig = 1 << 5;
247 static const unsigned int max_hit_persist = 1 << 4;
248 static const unsigned int max_drift_delay = 1 << 2;
249 static const unsigned int max_nplanes_hit_pretrig = 1 << 3;
250 static const unsigned int max_nplanes_hit_pattern = 1 << 3;
251 static const unsigned int max_pid_thresh_pretrig = 1 << 4;
253 static const unsigned int max_tmb_l1a_window_size = 1 << 4;
259 <<
", exceeds max allowed, " << max_fifo_tbins-1 <<
" +++\n" 260 <<
"+++ Try to proceed with the default value, fifo_tbins=" 267 <<
", exceeds max allowed, " << max_fifo_pretrig-1 <<
" +++\n" 268 <<
"+++ Try to proceed with the default value, fifo_pretrig=" 275 <<
", exceeds max allowed, " << max_hit_persist-1 <<
" +++\n" 276 <<
"+++ Try to proceed with the default value, hit_persist=" 283 <<
", exceeds max allowed, " << max_drift_delay-1 <<
" +++\n" 284 <<
"+++ Try to proceed with the default value, drift_delay=" 291 <<
", exceeds max allowed, " << max_nplanes_hit_pretrig-1 <<
" +++\n" 292 <<
"+++ Try to proceed with the default value, nplanes_hit_pretrig=" 299 <<
", exceeds max allowed, " << max_nplanes_hit_pattern-1 <<
" +++\n" 300 <<
"+++ Try to proceed with the default value, nplanes_hit_pattern=" 308 <<
", exceeds max allowed, " << max_pid_thresh_pretrig-1 <<
" +++\n" 309 <<
"+++ Try to proceed with the default value, pid_thresh_pretrig=" 316 <<
", exceeds max allowed, " << max_min_separation-1 <<
" +++\n" 317 <<
"+++ Try to proceed with the default value, min_separation=" 325 <<
", exceeds max allowed, " << max_tmb_l1a_window_size-1 <<
" +++\n" 326 <<
"+++ Try to proceed with the default value, tmb_l1a_window_size=" 341 std::vector<CSCCLCTDigi>
350 static std::atomic<bool> config_dumped{
false};
351 if ((
infoV > 0) && !config_dumped) {
353 config_dumped =
true;
371 <<
"+++ Invalid ring number for this processor " <<
theRing 372 <<
" was set in the config." 374 <<
"+++ CSC geometry looks garbled; no emulation possible +++\n";
390 <<
"+++ CSC geometry looks garbled; no emulation possible +++\n";
416 <<
" is not defined in current geometry! +++\n" 417 <<
"+++ CSC geometry looks garbled; no emulation possible +++\n";
427 <<
" numStrips = " <<
numStrips <<
"; CLCT emulation skipped! +++";
428 std::vector<CSCCLCTDigi> emptyV;
447 unsigned int layersHit = 0;
451 if (!halfstrip[i_layer][i_hstrip].
empty()) {layersHit++;
break;}
461 std::vector<CSCCLCTDigi> tmpV =
getCLCTs();
470 for (
auto&
p : tmpV){
484 std::vector<CSCCLCTDigi> CLCTlist =
findLCTs(halfstrip);
487 if (CLCTlist.size() > 1)
488 sort(CLCTlist.begin(), CLCTlist.end(), std::greater<CSCCLCTDigi>());
491 for (
const auto&
p : CLCTlist) {
492 const int bx =
p.getBX();
495 <<
"+++ Bx of CLCT candidate, " << bx <<
", exceeds max allowed, " 536 digiV[i_layer].clear();
550 <<
"found " <<
digiV[i_layer].size()
551 <<
" comparator digi(s) in layer " << i_layer <<
" of " <<
564 const bool me1a = (
id.station() == 1) && (
id.
ring() == 4);
567 digiIt != rcompd.second; ++digiIt) {
568 const unsigned int origStrip = digiIt->getStrip();
573 if (me1a && origStrip <= maxStripsME1a && !
disableME1a_) {
577 digiIt->getComparator(),
578 digiIt->getTimeBinWord());
579 digiV[
id.layer()-1].push_back(digi_corr);
582 digiV[
id.layer()-1].push_back(*digiIt);
592 for (std::vector<CSCComparatorDigi>::iterator pld =
digiV[i_layer].
begin();
593 pld !=
digiV[i_layer].end(); pld++, i_digi++) {
596 std::ostringstream strstrm;
597 strstrm <<
"Comparator digi: comparator = " << pld->getComparator()
598 <<
" strip #" << pld->getStrip()
600 std::vector<int> bx_times = pld->getTimeBinsOn();
601 for (
unsigned int tbin = 0; tbin < bx_times.size(); tbin++)
602 strstrm <<
" " << bx_times[tbin];
603 LogTrace(
"CSCCathodeLCTProcessor") << strstrm.str();
608 int thisComparator = pld->getComparator();
609 if (thisComparator != 0 && thisComparator != 1) {
612 <<
" Found comparator digi with wrong comparator value = " 613 << thisComparator <<
"; skipping it... +++\n";
618 int thisStrip = pld->getStrip() - 1;
619 if (thisStrip < 0 || thisStrip >=
numStrips) {
622 <<
" Found comparator digi with wrong strip number = " 624 <<
" (max strips = " <<
numStrips <<
"); skipping it... +++\n";
630 int thisHalfstrip = 2*thisStrip + thisComparator +
stagger[i_layer];
634 <<
" Found wrong halfstrip number = " << thisHalfstrip
635 <<
"; skipping this digi... +++\n";
640 std::vector<int> bx_times = pld->getTimeBinsOn();
641 for (
unsigned int i = 0;
i < bx_times.size();
i++) {
651 if (bx_times[
i] > 1 && bx_times[
i] < static_cast<int>(
fifo_tbins)) {
653 if (
i == 0 || (
i > 0 && bx_times[
i]-bx_times[
i-1] >=
659 <<
"Comp digi: layer " << i_layer+1
660 <<
" digi #" << i_digi+1
661 <<
" strip " << thisStrip
662 <<
" halfstrip " << thisHalfstrip
663 <<
" time " << bx_times[
i]
664 <<
" comparator " << thisComparator
665 <<
" stagger " << stagger[i_layer];
666 halfstrip[i_layer][thisHalfstrip].push_back(bx_times[
i]);
671 <<
" Skipping comparator digi: strip = " << thisStrip
672 <<
", layer = " << i_layer+1 <<
", bx = " << bx_times[
i]
673 <<
", bx of previous hit = " << bx_times[
i-1];
679 <<
"+++ Skipping comparator digi: strip = " << thisStrip
680 <<
", layer = " << i_layer+1 <<
", bx = " << bx_times[
i] <<
" +++";
691 std::vector<CSCCLCTDigi> lctList;
694 const int maxHalfStrips = 2*
numStrips + 1;
710 while (start_bx < stop_bx) {
714 bool pre_trig =
preTrigger(pulse, start_bx, first_bx);
721 <<
"..... pretrigger at bx = " << first_bx
722 <<
"; waiting drift delay .....";
726 bool hits_in_time =
patternFinding(pulse, maxHalfStrips, latch_bx);
730 hstrip < maxHalfStrips; hstrip++) {
731 if (
nhits[hstrip] > 0) {
733 <<
" bx = " << std::setw(2) << latch_bx <<
" --->" 734 <<
" halfstrip = " << std::setw(3) << hstrip
735 <<
" best pid = " << std::setw(2) <<
best_pid[hstrip]
736 <<
" nhits = " <<
nhits[hstrip];
749 best_halfstrip[ilct] = -1;
750 best_quality[ilct] = 0;
757 hstrip < maxHalfStrips; hstrip++) {
760 quality[hstrip] = (
best_pid[hstrip] & 14) | (
nhits[hstrip] << 5);
761 if (quality[hstrip] > best_quality[0]) {
762 best_halfstrip[0] = hstrip;
763 best_quality[0] = quality[hstrip];
765 if (
infoV > 1 && quality[hstrip] > 0) {
767 <<
" 1st CLCT: halfstrip = " << std::setw(3) << hstrip
768 <<
" quality = " << std::setw(3) << quality[hstrip]
769 <<
" nhits = " << std::setw(3) <<
nhits[hstrip]
770 <<
" pid = " << std::setw(3) <<
best_pid[hstrip]
771 <<
" best halfstrip = " << std::setw(3) << best_halfstrip[0]
772 <<
" best quality = " << std::setw(3) << best_quality[0];
778 if (best_halfstrip[0] >= 0) {
784 hstrip < maxHalfStrips; hstrip++) {
785 if (quality[hstrip] > best_quality[1]) {
786 best_halfstrip[1] = hstrip;
787 best_quality[1] = quality[hstrip];
789 if (
infoV > 1 && quality[hstrip] > 0) {
791 <<
" 2nd CLCT: halfstrip = " << std::setw(3) << hstrip
792 <<
" quality = " << std::setw(3) << quality[hstrip]
793 <<
" nhits = " << std::setw(3) <<
nhits[hstrip]
794 <<
" pid = " << std::setw(3) <<
best_pid[hstrip]
795 <<
" best halfstrip = " << std::setw(3) << best_halfstrip[1]
796 <<
" best quality = " << std::setw(3) << best_quality[1];
803 int best_hs = best_halfstrip[ilct];
812 keystrip_data[ilct][
CLCT_BX] = first_bx;
817 int halfstrip_in_cfeb = keystrip_data[ilct][
CLCT_STRIP] -
821 <<
" Final selection: ilct " << ilct
822 <<
" key halfstrip " << keystrip_data[ilct][
CLCT_STRIP]
825 <<
" bx " << keystrip_data[ilct][
CLCT_BX];
834 lctList.push_back(thisLCT);
850 for (
unsigned int bx = latch_bx + 1; bx < stop_time; bx++) {
851 bool return_to_idle =
true;
855 hstrip < maxHalfStrips; hstrip++) {
859 <<
" State machine busy at bx = " << bx;
860 return_to_idle =
false;
865 if (return_to_idle) {
867 <<
" State machine returns to idle state at bx = " << bx;
875 start_bx = first_bx + 1;
889 static const unsigned int bits_in_pulse = 8*
sizeof(
pulse[0][0]);
900 for (
int i_strip = 0; i_strip < nStrips; i_strip++)
901 pulse[i_layer][i_strip] = 0;
905 for (
int i_strip = 0; i_strip < nStrips; i_strip++) {
909 std::vector<int> bx_times =
time[i_layer][i_strip];
910 for (
unsigned int i = 0;
i < bx_times.size();
i++) {
912 if (bx_times[
i] < 0 || bx_times[
i] +
hit_persist >= bits_in_pulse) {
914 <<
"+++ BX time of comparator digi (halfstrip = " << i_strip
915 <<
" layer = " << i_layer <<
") bx = " << bx_times[
i]
916 <<
" is not within the range (0-" << bits_in_pulse
917 <<
"] allowed for pulse extension. Skip this digi! +++\n";
921 for (
unsigned int bx = bx_times[
i]; bx < bx_times[
i] +
hit_persist; ++bx)
922 pulse[i_layer][i_strip] =
pulse[i_layer][i_strip] | (1 << bx);
934 const int start_bx,
int& first_bx)
937 <<
"....................PreTrigger...........................";
942 int nPreTriggers = 0;
944 bool pre_trig =
false;
946 for (
unsigned int bx_time = start_bx; bx_time <
fifo_tbins; bx_time++) {
955 hstrip < nStrips; hstrip++) {
957 if (
nhits[hstrip] > 0) {
959 <<
" bx = " << std::setw(2) << bx_time <<
" --->" 960 <<
" halfstrip = " << std::setw(3) << hstrip
961 <<
" best pid = " << std::setw(2) <<
best_pid[hstrip]
962 <<
" nhits = " <<
nhits[hstrip];
977 1, bend, halfstrip, cfeb, bx_time, nPreTriggers, 0));
990 "no pretrigger, returning \n";
999 const int nStrips,
const unsigned int bx_time)
1006 unsigned int layers_hit = 0;
1009 for (
int i_hstrip = 0; i_hstrip < nStrips; i_hstrip++)
1011 if (((
pulse[i_layer][i_hstrip] >> bx_time) & 1) == 1)
1020 for (
int key_hstrip = 0; key_hstrip < nStrips; key_hstrip++)
1023 nhits[key_hstrip] = 0;
1036 hit_layer[ilayer] =
false;
1038 double num_pattern_hits=0., times_sum=0.;
1039 std::multiset<int> mset_for_median;
1040 mset_for_median.clear();
1047 if (this_layer >= 0 && this_layer < CSCConstants::NUM_LAYERS)
1050 if (this_strip >= 0 && this_strip < nStrips) {
1052 <<
" In patternFinding: key_strip = " << key_hstrip
1053 <<
" pid = " <<
pid <<
" strip_num = " << strip_num
1054 <<
" layer = " << this_layer <<
" strip = " << this_strip;
1056 if (((
pulse[this_layer][this_strip] >> bx_time) & 1) == 1)
1058 if (hit_layer[this_layer] ==
false)
1060 hit_layer[this_layer] =
true;
1066 int first_bx_layer = bx_time;
1067 for (
unsigned int dbx = 0; dbx <
hit_persist; dbx++)
1069 if (((
pulse[this_layer][this_strip] >> (first_bx_layer - 1)) & 1) == 1)
1074 times_sum += (double) first_bx_layer;
1075 num_pattern_hits += 1.;
1076 mset_for_median.insert(first_bx_layer);
1078 LogTrace(
"CSCCathodeLCTProcessor") <<
" 1st bx in layer: " << first_bx_layer <<
" sum bx: " << times_sum
1079 <<
" #pat. hits: " << num_pattern_hits;
1085 if (layers_hit >
nhits[key_hstrip])
1088 nhits[key_hstrip] = layers_hit;
1091 const int sz = mset_for_median.size();
1093 std::multiset<int>::iterator im = mset_for_median.begin();
1094 if (sz>1) std::advance(im,sz/2-1);
1099 #if defined(EDM_ML_DEBUG) 1102 auto lt =
LogTrace(
"CSCCathodeLCTProcessor")
1104 for (im = mset_for_median.begin(); im != mset_for_median.end(); im++) {
1112 if (
nhits[key_hstrip] == CSCConstants::NUM_LAYERS)
break;
1122 const int best_patid,
1128 for (
int hstrip = best_hstrip-nspan; hstrip <= best_hstrip+pspan; hstrip++) {
1129 if (hstrip >= 0 && hstrip < CSCConstants::NUM_HALF_STRIPS_7CFEBS) {
1141 std::ostringstream strm;
1143 strm <<
"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n";
1144 strm <<
"+ CLCT configuration parameters: +\n";
1145 strm <<
"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n";
1146 strm <<
" fifo_tbins [total number of time bins in DAQ readout] = " 1148 strm <<
" fifo_pretrig [start time of cathode raw hits in DAQ readout] = " 1150 strm <<
" hit_persist [duration of signal pulse, in 25 ns bins] = " 1152 strm <<
" drift_delay [time after pre-trigger before TMB latches LCTs] = " 1154 strm <<
" nplanes_hit_pretrig [min. number of layers hit for pre-trigger] = " 1156 strm <<
" nplanes_hit_pattern [min. number of layers hit for trigger] = " 1158 strm <<
" pid_thresh_pretrig [lower threshold on pattern id] = " 1160 strm <<
" min_separation [region of busy key strips] = " 1162 strm <<
"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n";
1163 LogDebug(
"CSCCathodeLCTProcessor") << strm.str();
1171 <<
" strip type: half-strip, nStrips " << nStrips;
1173 std::ostringstream strstrm;
1174 for (
int i_strip = 0; i_strip < nStrips; i_strip++) {
1175 if (i_strip%10 == 0) {
1176 if (i_strip < 100) strstrm << i_strip/10;
1177 else strstrm << (i_strip-100)/10;
1179 else strstrm <<
" ";
1183 for (
int i_strip = 0; i_strip < nStrips; i_strip++) {
1184 strstrm << i_strip%10;
1189 for (
int i_strip = 0; i_strip < nStrips; i_strip++) {
1191 std::vector<int> bx_times =
strip[i_layer][i_strip];
1193 strstrm << std::hex << bx_times[0] <<
std::dec;
1201 LogTrace(
"CSCCathodeLCTProcessor") << strstrm.str();
1208 std::vector<CSCCLCTDigi> tmpV;
1220 static std::atomic<int> lct_bins;
1222 static std::atomic<int> late_tbins;
1225 static std::atomic<int> ifois{0};
1230 <<
"; in-time CLCTs are not getting read-out!!! +++" <<
"\n";
1235 <<
"+++ Allowed range of time bins, [0-" << late_tbins
1237 <<
"+++ Set late_tbins to max allowed +++\n";
1238 late_tbins = CSCConstants::MAX_CLCT_TBINS-1;
1245 int bx_readout = -1;
1246 const std::vector<CSCCLCTDigi>& all_lcts =
getCLCTs();
1247 for (
const auto&
p : all_lcts) {
1248 if (!
p.isValid())
continue;
1250 const int bx =
p.getBX();
1254 <<
" Do not report CLCT on key halfstrip " <<
p.getKeyStrip()
1255 <<
": found at bx " << bx <<
", whereas the earliest allowed bx is " 1261 if (bx > late_tbins) {
1263 <<
" Do not report CLCT on key halfstrip " <<
p.getKeyStrip()
1264 <<
": found at bx " << bx <<
", whereas the latest allowed bx is " 1273 if (bx_readout == -1 || bx == bx_readout) {
1275 if (bx_readout == -1) bx_readout = bx;
1278 else tmpV.push_back(
p);
1287 std::vector<CSCCLCTDigi> tmpV;
1290 const std::vector<CSCCLCTDigi>& allCLCTs =
readoutCLCTs();
1291 for (
const auto& clct : allCLCTs)
1292 if (clct.getCFEB() >= 4 )
1293 tmpV.push_back(clct);
1302 std::vector<CSCCLCTDigi> tmpV;
1305 const std::vector<CSCCLCTDigi>& allCLCTs =
readoutCLCTs();
1306 for (
const auto& clct : allCLCTs)
1307 if (clct.getCFEB() < 4 )
1308 tmpV.push_back(clct);
1315 std::vector<CSCCLCTPreTriggerDigi> tmpV;
1318 const std::vector<CSCCLCTPreTriggerDigi>& allPretriggerdigis =
preTriggerDigis();
1319 for (
const auto& preclct : allPretriggerdigis)
1320 if (preclct.getCFEB() >= 4 )
1321 tmpV.push_back(preclct);
1328 std::vector<CSCCLCTPreTriggerDigi> tmpV;
1331 const std::vector<CSCCLCTPreTriggerDigi>& allPretriggerdigis =
preTriggerDigis();
1332 for (
const auto& preclct : allPretriggerdigis)
1333 if (preclct.getCFEB() < 4 )
1334 tmpV.push_back(preclct);
1342 std::vector<CSCCLCTDigi> tmpV;
static const unsigned int def_drift_delay
T getParameter(std::string const &) const
CSCCLCTDigi bestCLCT[CSCConstants::MAX_CLCT_TBINS]
void dumpDigis(const std::vector< int > strip[CSCConstants::NUM_LAYERS][CSCConstants::NUM_HALF_STRIPS_7CFEBS], const int nStrips) const
void setDefaultConfigParameters()
bool patternFinding(const unsigned int pulse[CSCConstants::NUM_LAYERS][CSCConstants::NUM_HALF_STRIPS_7CFEBS], const int nStrips, const unsigned int bx_time)
std::vector< CSCCLCTDigi > readoutCLCTs() const
unsigned int nplanes_hit_pretrig
static const unsigned int def_fifo_tbins
bool ispretrig[CSCConstants::NUM_HALF_STRIPS_7CFEBS]
unsigned int min_separation
unsigned int clctHitPersist() const
virtual std::vector< CSCCLCTDigi > findLCTs(const std::vector< int > halfstrip[CSCConstants::NUM_LAYERS][CSCConstants::NUM_HALF_STRIPS_7CFEBS])
static std::string chamberName(int endcap, int station, int ring, int chamber)
const CSCChamber * cscChamber_
int first_bx_corrected[CSCConstants::NUM_HALF_STRIPS_7CFEBS]
unsigned int clctNplanesHitPattern() const
void dumpConfigParams() const
static const int pattern2007_offset[CSCConstants::MAX_HALFSTRIPS_IN_PATTERN]
static const unsigned int def_min_separation
int numberOfStrips() const
std::vector< CSCCLCTDigi > readoutCLCTsME1b() const
unsigned int clctMinSeparation() const
unsigned int clctNplanesHitPretrig() const
static const unsigned int def_nplanes_hit_pretrig
virtual bool preTrigger(const unsigned int pulse[CSCConstants::NUM_LAYERS][CSCConstants::NUM_HALF_STRIPS_7CFEBS], const int start_bx, int &first_bx)
unsigned int clctDriftDelay() const
static const unsigned int def_pid_thresh_pretrig
unsigned int fifo_pretrig
unsigned int best_pid[CSCConstants::NUM_HALF_STRIPS_7CFEBS]
void markBusyKeys(const int best_hstrip, const int best_patid, int quality[CSCConstants::NUM_HALF_STRIPS_7CFEBS])
const unsigned theTrigChamber
unsigned int clctPidThreshPretrig() const
void readComparatorDigis(std::vector< int > halfstrip[CSCConstants::NUM_LAYERS][CSCConstants::NUM_HALF_STRIPS_7CFEBS])
static const int pattern2007[CSCConstants::NUM_CLCT_PATTERNS][CSCConstants::MAX_HALFSTRIPS_IN_PATTERN+2]
std::vector< CSCCLCTDigi > readoutCLCTsME1a() const
static const unsigned int def_tmb_l1a_window_size
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
bool getDigis(const CSCComparatorDigiCollection *compdc)
static const unsigned int def_nplanes_hit_pattern
const CSCLayer * layer(CSCDetId id) const
Return the layer corresponding to the given id.
unsigned int clctFifoPretrig() const
edm::ParameterSet clctParams_
std::vector< CSCCLCTPreTriggerDigi > thePreTriggerDigis
unsigned int nplanes_hit_pattern
std::vector< CSCCLCTPreTriggerDigi > preTriggerDigisME1b() const
edm::ParameterSet tmbParams_
std::string chamberName() const
std::vector< CSCCLCTDigi > getCLCTs() const
double pulse(double x, double y, double z, double t)
void checkConfigParameters()
static const unsigned int def_fifo_pretrig
std::vector< int > thePreTriggerBXs
static const unsigned int def_hit_persist
const unsigned theStation
int stagger[CSCConstants::NUM_LAYERS]
std::vector< DigiType >::const_iterator const_iterator
unsigned int nhits[CSCConstants::NUM_HALF_STRIPS_7CFEBS]
std::vector< CSCCLCTDigi > run(const CSCComparatorDigiCollection *compdc)
unsigned int clctFifoTbins() const
CSCCLCTDigi secondCLCT[CSCConstants::MAX_CLCT_TBINS]
void clear()
clear this CLCT
std::vector< CSCComparatorDigi > digiV[CSCConstants::NUM_LAYERS]
std::pair< const_iterator, const_iterator > Range
unsigned int tmb_l1a_window_size
void pulseExtension(const std::vector< int > time[CSCConstants::NUM_LAYERS][CSCConstants::NUM_HALF_STRIPS_7CFEBS], const int nStrips, unsigned int pulse[CSCConstants::NUM_LAYERS][CSCConstants::NUM_HALF_STRIPS_7CFEBS])
std::vector< CSCCLCTPreTriggerDigi > preTriggerDigisME1a() const
unsigned int alctClctOffset_
const CSCLayerGeometry * geometry() const
std::vector< CSCCLCTPreTriggerDigi > preTriggerDigis() const
unsigned int pid_thresh_pretrig
void setConfigParameters(const CSCDBL1TPParameters *conf)
const unsigned theSubsector
void setTrknmb(const uint16_t number)
Set track number (1,2) after sorting CLCTs.