14 : ncfebs_(tmbHeader->NCFEBs()), ntbins_(tmbHeader->NTBins())
22 : ncfebs_(ncfebs), ntbins_(ntbins)
32 : ncfebs_(ncfebs), ntbins_(ntbins)
45 for(
int ifeb = 0; ifeb <
ncfebs_; ++ifeb)
47 for(
int tbin = 0; tbin <
ntbins_; ++tbin)
49 for(
int layer = 1; layer <= 6; ++layer)
61 static const bool doStripSwapping =
true;
68 std::vector<CSCComparatorDigi>
result;
69 assert(layer>0 && layer<= 6);
73 for(
int distrip = 0; distrip < 8; ++distrip)
75 uint16_t tbinbitsS0HS0=0;
76 uint16_t tbinbitsS0HS1=0;
77 uint16_t tbinbitsS1HS0=0;
78 uint16_t tbinbitsS1HS1=0;
79 for(
int tbin = 0; tbin <
ntbins_-2; ++tbin)
81 if(
bitValue(cfeb, tbin, layer, distrip))
85 assert(word.
tbin_ == tbin);
86 assert(word.
cfeb_ == cfeb);
89 int bit2 =
bitValue(cfeb, tbin+1, layer, distrip);
90 int bit3 =
bitValue(cfeb, tbin+2, layer, distrip);
92 int chamberDistrip = distrip + cfeb*8;
93 int HalfStrip = 4*chamberDistrip + bit2*2 + bit3;
94 int output = 4 + bit2*2 + bit3;
106 LogTrace (
"CSCCLCTData|CSCRawToDigi")
107 <<
"fillComparatorOutputs: layer = "
108 << layer <<
" timebin = " << tbin
109 <<
" cfeb = " << cfeb <<
" distrip = " << chamberDistrip
110 <<
" HalfStrip = " << HalfStrip
111 <<
" Output " << output << std::endl;
115 if (output==4) tbinbitsS0HS0=tbinbitsS0HS0+(1<<tbin);
116 if (output==5) tbinbitsS0HS1=tbinbitsS0HS1+(1<<tbin);
117 if (output==6) tbinbitsS1HS0=tbinbitsS1HS0+(1<<tbin);
118 if (output==7) tbinbitsS1HS1=tbinbitsS1HS1+(1<<tbin);
127 if (tbinbitsS0HS0 || tbinbitsS0HS1 || tbinbitsS1HS0 || tbinbitsS1HS1) {
128 unsigned int cfeb_corr = cfeb;
129 unsigned int distrip_corr = distrip;
131 if (doStripSwapping) {
136 if ( me1a && zplus ) {distrip_corr = 7-distrip;}
137 if ( me1b && !zplus ) {distrip_corr = 7-distrip; cfeb_corr = 3-cfeb;}
140 int strip = 16*cfeb_corr + 2*distrip_corr + 1;
143 LogTrace (
"CSCCLCTData|CSCRawToDigi")
144 <<
"fillComparatorOutputs: cfeb_corr = " << cfeb_corr
145 <<
" distrip_corr = " << distrip_corr <<
" strip = " << strip;
147 if (doStripSwapping && (( me1a && zplus ) || ( me1b && !zplus ))) {
151 if (tbinbitsS0HS1) result.push_back(
CSCComparatorDigi(strip+1, 0, tbinbitsS0HS1));
152 if (tbinbitsS0HS0) result.push_back(
CSCComparatorDigi(strip+1, 1, tbinbitsS0HS0));
157 if (tbinbitsS1HS0) result.push_back(
CSCComparatorDigi(strip+1, 0, tbinbitsS1HS0));
158 if (tbinbitsS1HS1) result.push_back(
CSCComparatorDigi(strip+1, 1, tbinbitsS1HS1));
171 std::vector<CSCComparatorDigi>
result;
172 assert(layer>0 && layer<= 6);
174 for(
int cfeb = 0; cfeb <
ncfebs_; ++cfeb)
176 std::vector<CSCComparatorDigi> oneCfebDigi =
comparatorDigis(layer,cfeb);
177 result.insert(result.end(), oneCfebDigi.begin(), oneCfebDigi.end());
189 int cfeb = (strip-1)/16;
190 int distrip = ((strip-1)%16) / 2;
191 assert(distrip < 8 && cfeb < 6 && halfStrip < 161);
194 for(std::vector<int>::const_iterator tbinItr = timeBinsOn.begin();
195 tbinItr != timeBinsOn.end(); ++tbinItr)
198 if(tbin >= 0 && tbin <
ntbins_-2) {
216 for(
int cfeb = 0; cfeb <
ncfebs_; ++cfeb)
218 for(
int tbin = 0; tbin <
ntbins_; ++tbin)
220 for(
int layer = 1; layer <= 6; ++layer)
224 bool wordIsGood = (word.
tbin_ == tbin) && (word.
cfeb_ == cfeb);
225 result = result && wordIsGood;
226 if(!wordIsGood &&
debug)
228 LogTrace(
"CSCCLCTData|CSCRawToDigi") <<
"Bad CLCT data in layer " << layer
229 <<
" expect CFEB " << cfeb <<
" tbin " << tbin;
230 LogTrace(
"CSCCLCTData|CSCRawToDigi") <<
" See " << word.
cfeb_ <<
" "
236 if(!result)
LogTrace(
"CSCCLCTData|CSCRawToDigi") <<
"++ Bad CLCT Data ++ ";
259 clctData.
add(comparatorDigi1,1);
260 clctData.
add(comparatorDigi2,4);
261 clctData.
add(comparatorDigi3,6);
271 assert(digis1.size() == 1);
272 assert(digis2.size() == 1);
273 assert(digis3.size() == 1);
275 assert(digis1[0].getStrip() == 1);
276 assert(digis1[0].getComparator() == 0);
277 assert(digis1[0].getTimeBin() == 4);
279 assert(digis2[0].getStrip() == 39);
280 assert(digis2[0].getComparator() == 1);
281 assert(digis2[0].getTimeBin() == 5);
283 assert(digis3[0].getStrip() == 80);
284 assert(digis3[0].getComparator() == 1);
285 assert(digis3[0].getTimeBin() == 6);
int getStrip() const
Get the strip number.
void set(int distrip, bool value)
@ not right! doesn't set zero
CSCCLCTDataWord & dataWord(int iline) const
int getComparator() const
Get Comparator readings.
unsigned short theData[5 *6 *32]
bool bitValue(int cfeb, int tbin, int layer, int distrip)
std::vector< int > getTimeBinsOn() const
static std::atomic< bool > debug
CSCCLCTData(const CSCTMBHeader *tmbHeader)
std::vector< CSCComparatorDigi > comparatorDigis(int layer)
layers count from one
void add(const CSCComparatorDigi &digi, int layer)
TODO for packing. Doesn't do flipping yet.