Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DAQ - adding DCS validity bitfield for high voltage in FED 1022 #36294

Merged
merged 2 commits into from
Dec 4, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions DataFormats/OnlineMetaData/interface/DCSRecord.h
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ class DCSRecord {

DCSRecord();
explicit DCSRecord(const online::DCS_v1&);
explicit DCSRecord(const online::DCS_v2&);
virtual ~DCSRecord();

/// Return the time of the last change
Expand All @@ -69,6 +70,9 @@ class DCSRecord {
/// Return true if the high voltage of the given parition is ready
bool highVoltageReady(const uint8_t partitionNumber) const { return highVoltageReady_.test(partitionNumber); }

/// Return true if the high voltage bit of the given partition is valid
bool highVoltageValid(const uint8_t partitionNumber) const { return highVoltageValid_.test(partitionNumber); }

/// Return the current of the CMS magnet in A
float magnetCurrent() const { return magnetCurrent_; }

Expand All @@ -79,6 +83,7 @@ class DCSRecord {
private:
edm::Timestamp timestamp_;
std::bitset<Partition::Last> highVoltageReady_;
std::bitset<Partition::Last> highVoltageValid_;
float magnetCurrent_;
static const ParitionNames partitionNames_;
};
Expand Down
15 changes: 15 additions & 0 deletions DataFormats/OnlineMetaData/interface/OnlineMetaDataRaw.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,13 @@ namespace online {
const float magnetCurrent;
};

struct DCS_v2 {
const uint64_t timestamp;
const uint32_t highVoltageReady;
const uint32_t highVoltageValid;
const float magnetCurrent;
};

struct Data_v1 {
const uint8_t version;
const Luminosity_v1 luminosity;
Expand All @@ -66,6 +73,14 @@ namespace online {
const DCS_v1 dcs;
};

struct Data_v3 {
const uint8_t version;
const Luminosity_v1 luminosity;
const BeamSpot_v1 beamSpot;
const CTPPS_v1 ctpps;
const DCS_v2 dcs;
};

} // namespace online

#endif // DATAFORMATS_ONLINEMETADATA_ONLINEMETADATARAW_H
14 changes: 13 additions & 1 deletion DataFormats/OnlineMetaData/src/DCSRecord.cc
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,18 @@ DCSRecord::DCSRecord(const online::DCS_v1& dcs) {
const uint32_t microseconds = (dcs.timestamp % 1000) * 1000;
timestamp_ = edm::Timestamp((seconds << 32) | microseconds);
highVoltageReady_ = dcs.highVoltageReady;
//bit always valid for V1
highVoltageValid_ = 0xffffffff;
magnetCurrent_ = dcs.magnetCurrent;
}

DCSRecord::DCSRecord(const online::DCS_v2& dcs) {
// DIP timestamp is in milliseconds
const uint64_t seconds = dcs.timestamp / 1000;
const uint32_t microseconds = (dcs.timestamp % 1000) * 1000;
timestamp_ = edm::Timestamp((seconds << 32) | microseconds);
highVoltageReady_ = dcs.highVoltageReady;
highVoltageValid_ = dcs.highVoltageValid;
magnetCurrent_ = dcs.magnetCurrent;
}

Expand All @@ -37,7 +49,7 @@ std::ostream& operator<<(std::ostream& s, const DCSRecord& dcs) {

for (unsigned int i = 0; i < DCSRecord::Partition::Last; ++i) {
s << " " << std::setw(7) << std::left << dcs.partitionName(i) << ": "
<< (dcs.highVoltageReady(i) ? "READY" : "OFF") << std::endl;
<< (!dcs.highVoltageValid(i) ? "N/A" : (dcs.highVoltageReady(i) ? "READY" : "OFF")) << std::endl;
}

return s;
Expand Down
3 changes: 2 additions & 1 deletion DataFormats/OnlineMetaData/src/classes_def.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@
<field name="romanPotNames_" transient="true"/>
<field name="statusNames_" transient="true"/>
</class>
<class name="DCSRecord" ClassVersion="4">
<class name="DCSRecord" ClassVersion="5">
<version ClassVersion="5" checksum="442670371"/>
<version ClassVersion="4" checksum="920984468"/>
<version ClassVersion="3" checksum="2537350258"/>
<field name="partitionNames_" transient="true"/>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
==================== DUMP ======================
Reason for dump: Requested by user
00000000 : 0003fe00 50804521 00000003 00000000 | human readable swapped : 50804521 0003fe00 00000000 00000003 : 00000000
00000010 : 00000000 00000000 00000000 00000000 | human readable swapped : 00000000 00000000 00000000 00000000 : 00000010
00000020 : 00000000 00000000 00000000 00000000 | human readable swapped : 00000000 00000000 00000000 00000000 : 00000020
00000030 : 00000000 00000000 00000000 00000000 | human readable swapped : 00000000 00000000 00000000 00000000 : 00000030
00000040 : 00000000 00000000 00000000 00000000 | human readable swapped : 00000000 00000000 00000000 00000000 : 00000040
00000050 : 00000000 00000000 00000000 00000000 | human readable swapped : 00000000 00000000 00000000 00000000 : 00000050
00000060 : 00000000 00000000 00000000 00000000 | human readable swapped : 00000000 00000000 00000000 00000000 : 00000060
00000070 : 00000000 00000000 00000000 00000000 | human readable swapped : 00000000 00000000 00000000 00000000 : 00000070
00000080 : 6fae1ad6 0000017d 00000000 07fe7fff | human readable swapped : 0000017d 6fae1ad6 07fe7fff 00000000 : 00000080
00000090 : 3d69f92e 00000000 eb290000 a0000014 | human readable swapped : 00000000 3d69f92e a0000014 eb290000 : 00000090
================ END OF DUMP ===================
21 changes: 21 additions & 0 deletions DataFormats/OnlineMetaData/test/onlineMetaDataRecord_t.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ class TestOnlineMetaDataRecord : public CppUnit::TestFixture {
CPPUNIT_TEST_SUITE(TestOnlineMetaDataRecord);
CPPUNIT_TEST(testDCSRecord_v1);
CPPUNIT_TEST(testDCSRecord_v2);
CPPUNIT_TEST(testDCSRecord_v3);
CPPUNIT_TEST(testOnlineLuminosityRecord_v1);
CPPUNIT_TEST(testOnlineLuminosityRecord_v2);
CPPUNIT_TEST(testCTPPSRecord_v2);
Expand All @@ -28,6 +29,7 @@ class TestOnlineMetaDataRecord : public CppUnit::TestFixture {

void testDCSRecord_v1();
void testDCSRecord_v2();
void testDCSRecord_v3();
void testOnlineLuminosityRecord_v1();
void testOnlineLuminosityRecord_v2();
void testCTPPSRecord_v2();
Expand Down Expand Up @@ -109,6 +111,25 @@ void TestOnlineMetaDataRecord::testDCSRecord_v2() {
CPPUNIT_ASSERT_EQUAL(castToFloat(0x3ccd2785), dcs.magnetCurrent());
}

void TestOnlineMetaDataRecord::testDCSRecord_v3() {
const unsigned char* payload = readPayload("dump_run000001_event1350583585_fed1022.txt");
const online::Data_v3* data_v3 = reinterpret_cast<online::Data_v3 const*>(payload + FEDHeader::length);
DCSRecord dcs(data_v3->dcs);

// DIP timestamp is in milliseconds
const uint64_t ts = dcs.timestamp().unixTime() * 1000UL + dcs.timestamp().microsecondOffset() / 1000;
CPPUNIT_ASSERT_EQUAL(static_cast<uint64_t>(0x17d6fae1ad6), ts);
CPPUNIT_ASSERT(dcs.highVoltageValid(DCSRecord::Partition::CSCp));
CPPUNIT_ASSERT(!dcs.highVoltageReady(DCSRecord::Partition::CSCp));
CPPUNIT_ASSERT(dcs.highVoltageValid(DCSRecord::Partition::BPIX));
CPPUNIT_ASSERT(!dcs.highVoltageReady(DCSRecord::Partition::BPIX));
CPPUNIT_ASSERT(dcs.highVoltageValid(DCSRecord::Partition::TOB));
CPPUNIT_ASSERT(!dcs.highVoltageReady(DCSRecord::Partition::TOB));
CPPUNIT_ASSERT(!dcs.highVoltageValid(DCSRecord::Partition::ZDC));
CPPUNIT_ASSERT(!dcs.highVoltageValid(DCSRecord::Partition::CASTOR));
CPPUNIT_ASSERT_EQUAL(castToFloat(0x3D69F92E), dcs.magnetCurrent());
}

void TestOnlineMetaDataRecord::testOnlineLuminosityRecord_v1() {
const unsigned char* payload = readPayload("dump_run000001_event00057185_fed1022.txt");
const online::Data_v1* data_v1 = reinterpret_cast<online::Data_v1 const*>(payload + FEDHeader::length);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,12 @@ void OnlineMetaDataRawToDigi::produce(edm::Event& iEvent, const edm::EventSetup&
dcsRecord = DCSRecord(onlineMetaData->dcs);
onlineLuminosityRecord = OnlineLuminosityRecord(onlineMetaData->luminosity);
onlineBeamSpot = getBeamSpot(onlineMetaData->beamSpot);
} else if (version == 3 && onlineMetaDataRaw.size() >= FEDHeader::length + sizeof(online::Data_v3)) {
online::Data_v3 const* onlineMetaData = reinterpret_cast<online::Data_v3 const*>(payload);
ctppsRecord = CTPPSRecord(onlineMetaData->ctpps);
dcsRecord = DCSRecord(onlineMetaData->dcs);
onlineLuminosityRecord = OnlineLuminosityRecord(onlineMetaData->luminosity);
onlineBeamSpot = getBeamSpot(onlineMetaData->beamSpot);
}
}
}
Expand Down