File indexing completed on 2024-04-06 12:03:59
0001
0002
0003
0004
0005
0006 #include "DataFormats/CSCDigi/interface/CSCComparatorDigi.h"
0007 #include "DataFormats/CSCDigi/interface/CSCConstants.h"
0008 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0009 #include <iostream>
0010 #include <algorithm>
0011 #include <iterator>
0012
0013 using namespace std;
0014
0015
0016 CSCComparatorDigi::CSCComparatorDigi(int strip, int comparator, int timeBinWord)
0017 : strip_(strip), comparator_(comparator), timeBinWord_(timeBinWord) {}
0018
0019 CSCComparatorDigi::CSCComparatorDigi() : strip_(0), comparator_(0), timeBinWord_(0) {}
0020
0021
0022
0023 bool CSCComparatorDigi::operator==(const CSCComparatorDigi& digi) const {
0024 if (getStrip() != digi.getStrip())
0025 return false;
0026 if (getComparator() != digi.getComparator())
0027 return false;
0028 if (getTimeBinWord() != digi.getTimeBinWord())
0029 return false;
0030 return true;
0031 }
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041 bool CSCComparatorDigi::operator<(const CSCComparatorDigi& digi) const {
0042 bool result = false;
0043 if (getTimeBin() == digi.getTimeBin()) {
0044 result = (getStrip() < digi.getStrip());
0045 }
0046 return result;
0047 }
0048
0049
0050
0051 int CSCComparatorDigi::getTimeBin() const {
0052
0053 uint16_t tbit = 1;
0054 int tbin = -1;
0055 for (int i = 0; i < 16; ++i) {
0056 if (tbit & timeBinWord_) {
0057 tbin = i;
0058 break;
0059 }
0060 tbit = tbit << 1;
0061 }
0062 return tbin;
0063 }
0064
0065
0066
0067 int CSCComparatorDigi::getDiStrip() const { return ((strip_ - 1) % CSCConstants::NUM_STRIPS_PER_CFEB) / 2; }
0068
0069
0070
0071 int CSCComparatorDigi::getCFEB() const { return (strip_ - 1) / CSCConstants::NUM_STRIPS_PER_CFEB; }
0072
0073
0074
0075
0076 int CSCComparatorDigi::getHalfStrip() const { return (getStrip() - 1) * 2 + getComparator(); }
0077
0078
0079 float CSCComparatorDigi::getFractionalStrip() const { return getStrip() + getComparator() * 0.5f - 0.75f; }
0080
0081 std::vector<int> CSCComparatorDigi::getTimeBinsOn() const {
0082 std::vector<int> tbins;
0083 uint16_t tbit = timeBinWord_;
0084 const uint16_t one = 1;
0085 for (int i = 0; i < 16; ++i) {
0086 if (tbit & one)
0087 tbins.push_back(i);
0088 tbit = tbit >> 1;
0089 if (tbit == 0)
0090 break;
0091 }
0092 return tbins;
0093 }
0094
0095
0096
0097
0098 void CSCComparatorDigi::setStrip(int strip) { strip_ = strip; }
0099 void CSCComparatorDigi::setComparator(int comparator) { comparator_ = comparator; }
0100
0101
0102
0103 void CSCComparatorDigi::print() const {
0104 std::ostringstream ost;
0105 ost << "CSCComparatorDigi | strip " << getStrip() << " | comparator " << getComparator() << " | first time bin "
0106 << getTimeBin() << " | time bins on ";
0107 std::vector<int> tbins = getTimeBinsOn();
0108 std::copy(tbins.begin(), tbins.end(), std::ostream_iterator<int>(ost, " "));
0109 edm::LogVerbatim("CSCDigi") << ost.str();
0110 }
0111
0112 std::ostream& operator<<(std::ostream& o, const CSCComparatorDigi& digi) {
0113 o << "CSCComparatorDigi Strip:" << digi.getStrip() << ", Comparator: " << digi.getComparator()
0114 << ", First Time Bin On: " << digi.getTimeBin() << ", Time Bins On: ";
0115 std::vector<int> tbins = digi.getTimeBinsOn();
0116 std::copy(tbins.begin(), tbins.end(), std::ostream_iterator<int>(o, " "));
0117 return o;
0118 }