File indexing completed on 2024-04-06 12:10:25
0001 #include "EventFilter/CSCRawToDigi/interface/CSCALCTHeader2006.h"
0002 #include "EventFilter/CSCRawToDigi/interface/CSCDMBHeader.h"
0003
0004 #ifdef LOCAL_UNPACK
0005 static int activeFEBsForChamberType[11] = {0, 7, 7, 0xf, 7, 0x7f, 0xf, 0x3f, 0xf, 0x3f, 0xf};
0006 static int nTBinsForChamberType[11] = {7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7};
0007 #else
0008 constexpr int activeFEBsForChamberType[11] = {0, 7, 7, 0xf, 7, 0x7f, 0xf, 0x3f, 0xf, 0x3f, 0xf};
0009 constexpr int nTBinsForChamberType[11] = {7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7};
0010 #endif
0011
0012 CSCALCTHeader2006::CSCALCTHeader2006(int chamberType) {
0013
0014 init();
0015 flag_0 = 0xC;
0016 flag_1 = 0;
0017 reserved_1 = 0;
0018 fifoMode = 1;
0019
0020 l1aMatch = 1;
0021 lctChipRead = activeFEBsForChamberType[chamberType];
0022 activeFEBs = lctChipRead;
0023 nTBins = nTBinsForChamberType[chamberType];
0024
0025
0026 }
0027
0028 void CSCALCTHeader2006::setEventInformation(const CSCDMBHeader& dmb) {
0029 l1Acc = dmb.l1a();
0030 cscID = dmb.dmbID();
0031 nTBins = 16;
0032 bxnCount = dmb.bxn();
0033 }
0034
0035 unsigned short CSCALCTHeader2006::nLCTChipRead() const {
0036 int count = 0;
0037 for (int i = 0; i < 7; ++i) {
0038 if ((lctChipRead >> i) & 1)
0039 ++count;
0040 }
0041 return count;
0042 }
0043
0044 std::vector<CSCALCTDigi> CSCALCTs2006::ALCTDigis() const {
0045 std::vector<CSCALCTDigi> result;
0046 result.reserve(2);
0047
0048 CSCALCTDigi digi0(
0049 alct0_valid, alct0_quality, alct0_accel, alct0_pattern, alct0_key_wire, alct0_bxn_low | (alct0_bxn_high << 3), 1);
0050 CSCALCTDigi digi1(
0051 alct1_valid, alct1_quality, alct1_accel, alct1_pattern, alct1_key_wire, alct1_bxn_low | (alct1_bxn_high << 3), 2);
0052 result.push_back(digi0);
0053 result.push_back(digi1);
0054 return result;
0055 }
0056
0057 void CSCALCTs2006::add(const std::vector<CSCALCTDigi>& digis) {
0058
0059 if (!digis.empty())
0060 addALCT0(digis[0]);
0061 if (digis.size() > 1)
0062 addALCT1(digis[1]);
0063 }
0064
0065 void CSCALCTs2006::addALCT0(const CSCALCTDigi& digi) {
0066 alct0_valid = digi.isValid();
0067 alct0_quality = digi.getQuality();
0068 alct0_accel = digi.getAccelerator();
0069 alct0_pattern = digi.getCollisionB();
0070 alct0_key_wire = digi.getKeyWG();
0071
0072 alct0_bxn_low = digi.getBX();
0073 }
0074
0075 void CSCALCTs2006::addALCT1(const CSCALCTDigi& digi) {
0076 alct1_valid = digi.isValid();
0077 alct1_quality = digi.getQuality();
0078 alct1_accel = digi.getAccelerator();
0079 alct1_pattern = digi.getCollisionB();
0080 alct1_key_wire = digi.getKeyWG();
0081
0082 alct1_bxn_low = digi.getBX();
0083 }