27 :
CSCBaseboard(endcap, station, sector, subsector, chamber, conf) {
28 static std::atomic<bool> config_dumped{
false};
62 if ((infoV > 0) && !config_dumped) {
70 if ((i_layer + 1) % 2 == 0)
81 static std::atomic<bool> config_dumped{
false};
101 if ((i_layer + 1) % 2 == 0)
125 static std::atomic<bool> config_dumped{
false};
138 if (!config_dumped) {
140 config_dumped =
true;
148 static const unsigned int max_fifo_tbins = 1 << 5;
149 static const unsigned int max_fifo_pretrig = 1 << 5;
150 static const unsigned int max_hit_persist = 1 << 4;
151 static const unsigned int max_drift_delay = 1 << 2;
152 static const unsigned int max_nplanes_hit_pretrig = 1 << 3;
153 static const unsigned int max_nplanes_hit_pattern = 1 << 3;
154 static const unsigned int max_pid_thresh_pretrig = 1 << 4;
156 static const unsigned int max_tmb_l1a_window_size = 1 << 4;
162 <<
"+++ Value of fifo_tbins, " <<
fifo_tbins <<
", exceeds max allowed, " << max_fifo_tbins - 1 <<
" +++\n" 163 <<
"+++ Try to proceed with the default value, fifo_tbins=" <<
def_fifo_tbins <<
" +++\n";
169 <<
"+++ Value of fifo_pretrig, " <<
fifo_pretrig <<
", exceeds max allowed, " << max_fifo_pretrig - 1
171 <<
"+++ Try to proceed with the default value, fifo_pretrig=" <<
def_fifo_pretrig <<
" +++\n";
177 <<
"+++ Value of hit_persist, " <<
hit_persist <<
", exceeds max allowed, " << max_hit_persist - 1 <<
" +++\n" 178 <<
"+++ Try to proceed with the default value, hit_persist=" <<
def_hit_persist <<
" +++\n";
184 <<
"+++ Value of drift_delay, " <<
drift_delay <<
", exceeds max allowed, " << max_drift_delay - 1 <<
" +++\n" 185 <<
"+++ Try to proceed with the default value, drift_delay=" <<
def_drift_delay <<
" +++\n";
191 <<
"+++ Value of nplanes_hit_pretrig, " <<
nplanes_hit_pretrig <<
", exceeds max allowed, " 192 << max_nplanes_hit_pretrig - 1 <<
" +++\n" 199 <<
"+++ Value of nplanes_hit_pattern, " <<
nplanes_hit_pattern <<
", exceeds max allowed, " 200 << max_nplanes_hit_pattern - 1 <<
" +++\n" 208 <<
"+++ Value of pid_thresh_pretrig, " <<
pid_thresh_pretrig <<
", exceeds max allowed, " 209 << max_pid_thresh_pretrig - 1 <<
" +++\n" 210 <<
"+++ Try to proceed with the default value, pid_thresh_pretrig=" <<
def_pid_thresh_pretrig <<
" +++\n";
216 <<
"+++ Value of min_separation, " <<
min_separation <<
", exceeds max allowed, " << max_min_separation - 1
218 <<
"+++ Try to proceed with the default value, min_separation=" <<
def_min_separation <<
" +++\n";
225 <<
"+++ Value of tmb_l1a_window_size, " <<
tmb_l1a_window_size <<
", exceeds max allowed, " 226 << max_tmb_l1a_window_size - 1 <<
" +++\n" 248 static std::atomic<bool> config_dumped{
false};
249 if ((
infoV > 0) && !config_dumped) {
251 config_dumped =
true;
269 <<
"+++ Invalid ring number for this processor " <<
theRing <<
" was set in the config." 271 <<
"+++ CSC geometry looks garbled; no emulation possible +++\n";
285 <<
"+++ Number of strips, " <<
numStrips <<
" found in " 289 <<
"+++ CSC geometry looks garbled; no emulation possible +++\n";
313 <<
" is not defined in current geometry! +++\n" 314 <<
"+++ CSC geometry looks garbled; no emulation possible +++\n";
324 <<
" numStrips = " <<
numStrips <<
"; CLCT emulation skipped! +++";
325 std::vector<CSCCLCTDigi> emptyV;
343 unsigned int layersHit = 0;
346 if (!halfstrip[i_layer][i_hstrip].
empty()) {
360 std::vector<CSCCLCTDigi> tmpV =
getCLCTs();
369 for (
auto&
p : tmpV) {
383 std::vector<CSCCLCTDigi> CLCTlist =
findLCTs(halfstrip);
386 if (CLCTlist.size() > 1)
387 sort(CLCTlist.begin(), CLCTlist.end(), std::greater<CSCCLCTDigi>());
390 for (
const auto&
p : CLCTlist) {
391 const int bx =
p.getBX();
396 <<
"; skipping it... +++\n";
434 digiV[i_layer].clear();
447 LogTrace(
"CSCCathodeLCTProcessor") <<
"found " <<
digiV[i_layer].size() <<
" comparator digi(s) in layer " 458 const bool me1a = (
id.station() == 1) && (
id.
ring() == 4);
461 const unsigned int origStrip = digiIt->getStrip();
462 const unsigned int maxStripsME1a =
466 if (me1a && origStrip <= maxStripsME1a && !
disableME1a_) {
471 digiV[
id.layer() - 1].push_back(digi_corr);
473 digiV[
id.layer() - 1].push_back(*digiIt);
482 for (std::vector<CSCComparatorDigi>::iterator pld =
digiV[i_layer].
begin(); pld !=
digiV[i_layer].end();
486 std::ostringstream strstrm;
487 strstrm <<
"Comparator digi: comparator = " << pld->getComparator() <<
" strip #" << pld->getStrip()
489 std::vector<int> bx_times = pld->getTimeBinsOn();
490 for (
unsigned int tbin = 0; tbin < bx_times.size(); tbin++)
491 strstrm <<
" " << bx_times[tbin];
492 LogTrace(
"CSCCathodeLCTProcessor") << strstrm.str();
497 int thisComparator = pld->getComparator();
498 if (thisComparator != 0 && thisComparator != 1) {
502 <<
" Found comparator digi with wrong comparator value = " << thisComparator <<
"; skipping it... +++\n";
507 int thisStrip = pld->getStrip() - 1;
508 if (thisStrip < 0 || thisStrip >=
numStrips) {
512 <<
" Found comparator digi with wrong strip number = " << thisStrip <<
" (max strips = " <<
numStrips 513 <<
"); skipping it... +++\n";
519 int thisHalfstrip = 2 * thisStrip + thisComparator +
stagger[i_layer];
520 if (thisHalfstrip >= 2 *
numStrips + 1) {
524 <<
" Found wrong halfstrip number = " << thisHalfstrip <<
"; skipping this digi... +++\n";
529 std::vector<int> bx_times = pld->getTimeBinsOn();
530 for (
unsigned int i = 0;
i < bx_times.size();
i++) {
540 if (bx_times[
i] > 1 && bx_times[
i] < static_cast<int>(
fifo_tbins)) {
541 if (
i == 0 || (
i > 0 && bx_times[
i] - bx_times[
i - 1] >= static_cast<int>(
hit_persist))) {
547 <<
"Comp digi: layer " << i_layer + 1 <<
" digi #" << i_digi + 1 <<
" strip " << thisStrip
548 <<
" halfstrip " << thisHalfstrip <<
" time " << bx_times[
i] <<
" comparator " << thisComparator
549 <<
" stagger " << stagger[i_layer];
550 halfstrip[i_layer][thisHalfstrip].push_back(bx_times[
i]);
555 <<
" Skipping comparator digi: strip = " << thisStrip <<
", layer = " << i_layer + 1
556 <<
", bx = " << bx_times[
i] <<
", bx of previous hit = " << bx_times[
i - 1];
561 <<
theChamber <<
"+++ Skipping comparator digi: strip = " << thisStrip
562 <<
", layer = " << i_layer + 1 <<
", bx = " << bx_times[
i] <<
" +++";
572 std::vector<CSCCLCTDigi> lctList;
575 const int maxHalfStrips = 2 *
numStrips + 1;
592 while (start_bx < stop_bx) {
596 bool pre_trig =
preTrigger(pulse, start_bx, first_bx);
603 LogTrace(
"CSCCathodeLCTProcessor") <<
"..... pretrigger at bx = " << first_bx <<
"; waiting drift delay .....";
607 bool hits_in_time =
patternFinding(pulse, maxHalfStrips, latch_bx);
611 if (
nhits[hstrip] > 0) {
613 <<
" bx = " << std::setw(2) << latch_bx <<
" --->" 614 <<
" halfstrip = " << std::setw(3) << hstrip <<
" best pid = " << std::setw(2) <<
best_pid[hstrip]
615 <<
" nhits = " <<
nhits[hstrip];
628 best_halfstrip[ilct] = -1;
629 best_quality[ilct] = 0;
638 quality[hstrip] = (
best_pid[hstrip] & 14) | (
nhits[hstrip] << 5);
639 if (quality[hstrip] > best_quality[0]) {
640 best_halfstrip[0] = hstrip;
641 best_quality[0] = quality[hstrip];
643 if (
infoV > 1 && quality[hstrip] > 0) {
645 <<
" 1st CLCT: halfstrip = " << std::setw(3) << hstrip <<
" quality = " << std::setw(3)
646 << quality[hstrip] <<
" nhits = " << std::setw(3) <<
nhits[hstrip] <<
" pid = " << std::setw(3)
647 <<
best_pid[hstrip] <<
" best halfstrip = " << std::setw(3) << best_halfstrip[0]
648 <<
" best quality = " << std::setw(3) << best_quality[0];
654 if (best_halfstrip[0] >= 0) {
660 if (quality[hstrip] > best_quality[1]) {
661 best_halfstrip[1] = hstrip;
662 best_quality[1] = quality[hstrip];
664 if (
infoV > 1 && quality[hstrip] > 0) {
666 <<
" 2nd CLCT: halfstrip = " << std::setw(3) << hstrip <<
" quality = " << std::setw(3)
667 << quality[hstrip] <<
" nhits = " << std::setw(3) <<
nhits[hstrip] <<
" pid = " << std::setw(3)
668 <<
best_pid[hstrip] <<
" best halfstrip = " << std::setw(3) << best_halfstrip[1]
669 <<
" best quality = " << std::setw(3) << best_quality[1];
676 int best_hs = best_halfstrip[ilct];
684 keystrip_data[ilct][
CLCT_BX] = first_bx;
688 int halfstrip_in_cfeb = keystrip_data[ilct][
CLCT_STRIP] -
693 <<
" Final selection: ilct " << ilct <<
" key halfstrip " << keystrip_data[ilct][
CLCT_STRIP]
694 <<
" quality " << keystrip_data[ilct][
CLCT_QUALITY] <<
" pattern " 705 lctList.push_back(thisLCT);
721 for (
unsigned int bx = latch_bx + 1;
bx < stop_time;
bx++) {
722 bool return_to_idle =
true;
729 LogTrace(
"CSCCathodeLCTProcessor") <<
" State machine busy at bx = " <<
bx;
730 return_to_idle =
false;
735 if (return_to_idle) {
737 LogTrace(
"CSCCathodeLCTProcessor") <<
" State machine returns to idle state at bx = " <<
bx;
745 start_bx = first_bx + 1;
757 static const unsigned int bits_in_pulse = 8 *
sizeof(
pulse[0][0]);
768 for (
int i_strip = 0; i_strip <
nStrips; i_strip++)
769 pulse[i_layer][i_strip] = 0;
773 for (
int i_strip = 0; i_strip <
nStrips; i_strip++) {
777 std::vector<int> bx_times =
time[i_layer][i_strip];
778 for (
unsigned int i = 0;
i < bx_times.size();
i++) {
780 if (bx_times[
i] < 0 || bx_times[
i] +
hit_persist >= bits_in_pulse) {
783 <<
"+++ BX time of comparator digi (halfstrip = " << i_strip <<
" layer = " << i_layer
784 <<
") bx = " << bx_times[
i] <<
" is not within the range (0-" << bits_in_pulse
785 <<
"] allowed for pulse extension. Skip this digi! +++\n";
790 pulse[i_layer][i_strip] =
pulse[i_layer][i_strip] | (1 <<
bx);
804 LogTrace(
"CSCCathodeLCTProcessor") <<
"....................PreTrigger...........................";
809 int nPreTriggers = 0;
811 bool pre_trig =
false;
813 for (
unsigned int bx_time = start_bx; bx_time <
fifo_tbins; bx_time++) {
823 if (
nhits[hstrip] > 0) {
825 <<
" bx = " << std::setw(2) << bx_time <<
" --->" 826 <<
" halfstrip = " << std::setw(3) << hstrip <<
" best pid = " << std::setw(2) <<
best_pid[hstrip]
827 <<
" nhits = " <<
nhits[hstrip];
841 1,
nhits[hstrip], best_pid[hstrip], 1, bend, halfstrip, cfeb, bx_time, nPreTriggers, 0));
853 LogTrace(
"CSCCathodeLCTProcessor") <<
"no pretrigger, returning \n";
862 const unsigned int bx_time) {
869 unsigned int layers_hit = 0;
871 for (
int i_hstrip = 0; i_hstrip <
nStrips; i_hstrip++) {
872 if (((
pulse[i_layer][i_hstrip] >> bx_time) & 1) == 1) {
881 for (
int key_hstrip = 0; key_hstrip <
nStrips; key_hstrip++) {
883 nhits[key_hstrip] = 0;
894 hit_layer[ilayer] =
false;
896 double num_pattern_hits = 0., times_sum = 0.;
897 std::multiset<int> mset_for_median;
898 mset_for_median.clear();
904 if (this_layer >= 0 && this_layer < CSCConstants::NUM_LAYERS) {
906 if (this_strip >= 0 && this_strip < nStrips) {
909 <<
" In patternFinding: key_strip = " << key_hstrip <<
" pid = " << pid
910 <<
" strip_num = " << strip_num <<
" layer = " << this_layer <<
" strip = " << this_strip;
912 if (((
pulse[this_layer][this_strip] >> bx_time) & 1) == 1) {
913 if (hit_layer[this_layer] ==
false) {
914 hit_layer[this_layer] =
true;
920 int first_bx_layer = bx_time;
921 for (
unsigned int dbx = 0; dbx <
hit_persist; dbx++) {
922 if (((
pulse[this_layer][this_strip] >> (first_bx_layer - 1)) & 1) == 1)
927 times_sum += (double)first_bx_layer;
928 num_pattern_hits += 1.;
929 mset_for_median.insert(first_bx_layer);
931 LogTrace(
"CSCCathodeLCTProcessor") <<
" 1st bx in layer: " << first_bx_layer <<
" sum bx: " << times_sum
932 <<
" #pat. hits: " << num_pattern_hits;
938 if (layers_hit >
nhits[key_hstrip]) {
940 nhits[key_hstrip] = layers_hit;
943 const int sz = mset_for_median.size();
945 std::multiset<int>::iterator im = mset_for_median.begin();
947 std::advance(im, sz / 2 - 1);
950 else if ((sz % 2) == 1)
955 #if defined(EDM_ML_DEBUG) 958 auto lt =
LogTrace(
"CSCCathodeLCTProcessor")
960 for (im = mset_for_median.begin(); im != mset_for_median.end(); im++) {
968 if (
nhits[key_hstrip] == CSCConstants::NUM_LAYERS)
978 const int best_patid,
983 for (
int hstrip = best_hstrip - nspan; hstrip <= best_hstrip + pspan; hstrip++) {
984 if (hstrip >= 0 && hstrip < CSCConstants::NUM_HALF_STRIPS_7CFEBS) {
995 std::ostringstream strm;
997 strm <<
"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n";
998 strm <<
"+ CLCT configuration parameters: +\n";
999 strm <<
"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n";
1000 strm <<
" fifo_tbins [total number of time bins in DAQ readout] = " <<
fifo_tbins <<
"\n";
1001 strm <<
" fifo_pretrig [start time of cathode raw hits in DAQ readout] = " <<
fifo_pretrig <<
"\n";
1002 strm <<
" hit_persist [duration of signal pulse, in 25 ns bins] = " <<
hit_persist <<
"\n";
1003 strm <<
" drift_delay [time after pre-trigger before TMB latches LCTs] = " <<
drift_delay <<
"\n";
1004 strm <<
" nplanes_hit_pretrig [min. number of layers hit for pre-trigger] = " <<
nplanes_hit_pretrig <<
"\n";
1005 strm <<
" nplanes_hit_pattern [min. number of layers hit for trigger] = " <<
nplanes_hit_pattern <<
"\n";
1006 strm <<
" pid_thresh_pretrig [lower threshold on pattern id] = " <<
pid_thresh_pretrig <<
"\n";
1007 strm <<
" min_separation [region of busy key strips] = " <<
min_separation <<
"\n";
1008 strm <<
"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n";
1009 LogDebug(
"CSCCathodeLCTProcessor") << strm.str();
1017 <<
" strip type: half-strip, nStrips " <<
nStrips;
1019 std::ostringstream strstrm;
1020 for (
int i_strip = 0; i_strip <
nStrips; i_strip++) {
1021 if (i_strip % 10 == 0) {
1023 strstrm << i_strip / 10;
1025 strstrm << (i_strip - 100) / 10;
1032 for (
int i_strip = 0; i_strip <
nStrips; i_strip++) {
1033 strstrm << i_strip % 10;
1039 for (
int i_strip = 0; i_strip <
nStrips; i_strip++) {
1041 std::vector<int> bx_times =
strip[i_layer][i_strip];
1043 strstrm << std::hex << bx_times[0] <<
std::dec;
1051 LogTrace(
"CSCCathodeLCTProcessor") << strstrm.str();
1057 std::vector<CSCCLCTDigi> tmpV;
1069 static std::atomic<int> lct_bins;
1071 static std::atomic<int> late_tbins;
1074 static std::atomic<int> ifois{0};
1078 <<
"+++ early_tbins = " <<
early_tbins <<
"; in-time CLCTs are not getting read-out!!! +++" 1085 <<
"+++ Allowed range of time bins, [0-" << late_tbins <<
"] exceeds max allowed, " 1087 <<
"+++ Set late_tbins to max allowed +++\n";
1088 late_tbins = CSCConstants::MAX_CLCT_TBINS - 1;
1095 int bx_readout = -1;
1096 const std::vector<CSCCLCTDigi>& all_lcts =
getCLCTs();
1097 for (
const auto&
p : all_lcts) {
1101 const int bx =
p.getBX();
1106 <<
" Do not report CLCT on key halfstrip " <<
p.getKeyStrip() <<
": found at bx " << bx
1107 <<
", whereas the earliest allowed bx is " <<
early_tbins + 1;
1112 if (bx > late_tbins) {
1115 <<
" Do not report CLCT on key halfstrip " <<
p.getKeyStrip() <<
": found at bx " << bx
1116 <<
", whereas the latest allowed bx is " << late_tbins;
1124 if (bx_readout == -1 || bx == bx_readout) {
1126 if (bx_readout == -1)
1138 std::vector<CSCCLCTDigi> tmpV;
1141 const std::vector<CSCCLCTDigi>& allCLCTs =
readoutCLCTs();
1142 for (
const auto& clct : allCLCTs)
1143 if (clct.getCFEB() >= 4)
1144 tmpV.push_back(clct);
1151 std::vector<CSCCLCTDigi> tmpV;
1154 const std::vector<CSCCLCTDigi>& allCLCTs =
readoutCLCTs();
1155 for (
const auto& clct : allCLCTs)
1156 if (clct.getCFEB() < 4)
1157 tmpV.push_back(clct);
1162 std::vector<CSCCLCTPreTriggerDigi> tmpV;
1165 const std::vector<CSCCLCTPreTriggerDigi>& allPretriggerdigis =
preTriggerDigis();
1166 for (
const auto& preclct : allPretriggerdigis)
1167 if (preclct.getCFEB() >= 4)
1168 tmpV.push_back(preclct);
1173 std::vector<CSCCLCTPreTriggerDigi> tmpV;
1176 const std::vector<CSCCLCTPreTriggerDigi>& allPretriggerdigis =
preTriggerDigis();
1177 for (
const auto& preclct : allPretriggerdigis)
1178 if (preclct.getCFEB() < 4)
1179 tmpV.push_back(preclct);
1185 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 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)
nStrips
1.2 is to make the matching window safely the two nearest strips 0.35 is the size of an ME0 chamber i...
unsigned int clctDriftDelay() const
static const unsigned int def_pid_thresh_pretrig
static const int clct_pattern_offset[CSCConstants::MAX_HALFSTRIPS_IN_PATTERN]
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
void setBX(const int bx)
set bx
CSCCLCTDigi getSecondCLCT(int bx) const
unsigned int clctPidThreshPretrig() const
void readComparatorDigis(std::vector< int > halfstrip[CSCConstants::NUM_LAYERS][CSCConstants::NUM_HALF_STRIPS_7CFEBS])
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
int getBX() const
return BX
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_
CSCCLCTDigi getBestCLCT(int bx) const
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
std::pair< const_iterator, const_iterator > Range
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]
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
static const int clct_pattern[CSCConstants::NUM_CLCT_PATTERNS][CSCConstants::MAX_HALFSTRIPS_IN_PATTERN+2]
void setTrknmb(const uint16_t number)
Set track number (1,2) after sorting CLCTs.