File indexing completed on 2024-04-06 12:05:09
0001
0002
0003
0004
0005 #include "DataFormats/Scalers/interface/DcsStatus.h"
0006 #include "DataFormats/Scalers/interface/ScalersRaw.h"
0007 #include <cstdio>
0008 #include <ostream>
0009
0010 const int DcsStatus::partitionList[DcsStatus::nPartitions] = {EBp, EBm, EEp, EEm, HBHEa, HBHEb, HBHEc, HF, HO,
0011 RPC, DT0, DTp, DTm, CSCp, CSCm, CASTOR, ZDC, TIBTID,
0012 TOB, TECp, TECm, BPIX, FPIX, ESp, ESm};
0013
0014 const char* const DcsStatus::partitionName[DcsStatus::nPartitions] = {
0015 "EBp", "EBm", "EEp", "EEm", "HBHEa", "HBHEb", "HBHEc", "HF", "HO", "RPC", "DT0", "DTp", "DTm",
0016 "CSCp", "CSCm", "CASTOR", "ZDC", "TIBTID", "TOB", "TECp", "TECm", "BPIX", "FPIX", "ESp", "ESm"};
0017
0018 DcsStatus::DcsStatus()
0019 : trigType_(0),
0020 eventID_(0),
0021 sourceID_(0),
0022 bunchNumber_(0),
0023 version_(0),
0024 collectionTime_(0, 0),
0025 ready_(0),
0026 magnetCurrent_((float)0.0),
0027 magnetTemperature_((float)0.0) {}
0028
0029 DcsStatus::DcsStatus(const unsigned char* rawData) {
0030 DcsStatus();
0031
0032 struct ScalersEventRecordRaw_v4 const* raw = reinterpret_cast<struct ScalersEventRecordRaw_v4 const*>(rawData);
0033 trigType_ = (raw->header >> 56) & 0xFULL;
0034 eventID_ = (raw->header >> 32) & 0x00FFFFFFULL;
0035 sourceID_ = (raw->header >> 8) & 0x00000FFFULL;
0036 bunchNumber_ = (raw->header >> 20) & 0xFFFULL;
0037
0038 version_ = raw->version;
0039 if (version_ >= 4) {
0040 collectionTime_.set_tv_sec(static_cast<long>(raw->dcsStatus.collectionTime_sec));
0041 collectionTime_.set_tv_nsec(raw->dcsStatus.collectionTime_nsec);
0042 ready_ = raw->dcsStatus.ready;
0043 magnetCurrent_ = raw->dcsStatus.magnetCurrent;
0044 magnetTemperature_ = raw->dcsStatus.magnetTemperature;
0045 }
0046 }
0047
0048 DcsStatus::~DcsStatus() {}
0049
0050
0051 std::ostream& operator<<(std::ostream& s, const DcsStatus& c) {
0052 constexpr size_t kZeitBufferSize = 128;
0053 char zeit[kZeitBufferSize];
0054 constexpr size_t kLineBufferSize = 157;
0055 char line[kLineBufferSize];
0056 struct tm* hora;
0057
0058 s << "DcsStatus Version: " << c.version() << " SourceID: " << c.sourceID() << std::endl;
0059
0060 timespec ts = c.collectionTime();
0061 hora = gmtime(&ts.tv_sec);
0062 strftime(zeit, kZeitBufferSize, "%Y.%m.%d %H:%M:%S", hora);
0063 snprintf(line, kLineBufferSize, " CollectionTime: %s.%9.9d", zeit, (int)ts.tv_nsec);
0064 s << line << std::endl;
0065
0066 snprintf(line,
0067 kLineBufferSize,
0068 " TrigType: %d EventID: %d BunchNumber: %d",
0069 c.trigType(),
0070 c.eventID(),
0071 c.bunchNumber());
0072 s << line << std::endl;
0073
0074 snprintf(
0075 line, kLineBufferSize, " MagnetCurrent: %e MagnetTemperature: %e", c.magnetCurrent(), c.magnetTemperature());
0076 s << line << std::endl;
0077
0078 snprintf(line, kLineBufferSize, " Ready: %d 0x%8.8X", c.ready(), c.ready());
0079 s << line << std::endl;
0080
0081 for (int i = 0; i < DcsStatus::nPartitions; i++) {
0082 if (c.ready(DcsStatus::partitionList[i])) {
0083 snprintf(line, kLineBufferSize, " %2d %6s: READY", i, DcsStatus::partitionName[i]);
0084 } else {
0085 snprintf(line, kLineBufferSize, " %2d %6s: NOT READY", i, DcsStatus::partitionName[i]);
0086 }
0087 s << line << std::endl;
0088 }
0089 return s;
0090 }