Skip to content

Commit 4bea061

Browse files
wiechulashahor02
authored andcommitted
access packet descripton & event sync, fix file reading
1 parent 9b71738 commit 4bea061

File tree

2 files changed

+42
-26
lines changed

2 files changed

+42
-26
lines changed

Detectors/TPC/reconstruction/include/TPCReconstruction/RawReaderCRU.h

Lines changed: 27 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -498,6 +498,8 @@ class RawReaderCRU
498498
{
499499
public:
500500
class PacketDescriptor;
501+
using PacketDescriptorMap = std::vector<PacketDescriptor>;
502+
using PacketDescriptorMapArray = std::array<PacketDescriptorMap, MaxNumberOfLinks>;
501503

502504
/// constructor
503505
/// \param
@@ -645,6 +647,9 @@ class RawReaderCRU
645647
/// output file prefix
646648
const std::string& getOutputFilePrefix() const { return mOutputFilePrefix; }
647649

650+
/// get packet descriptor map array
651+
const PacketDescriptorMapArray& getPacketDescriptorMaps() const { return mPacketDescriptorMaps; }
652+
648653
//===========================================================================
649654
//===| Nested helper classes |===============================================
650655
//
@@ -723,26 +728,25 @@ class RawReaderCRU
723728
//
724729

725730
private:
726-
using PacketDescriptorMap = std::vector<PacketDescriptor>;
727-
uint32_t mDebugLevel; ///< debug level
728-
uint32_t mVerbosity; ///< verbosity
729-
uint32_t mNumTimeBins; ///< number of time bins to process
730-
uint32_t mLink; ///< present link being processed
731-
uint32_t mStream; ///< present stream being processed
732-
uint32_t mEventNumber = 0; ///< current event number to process
733-
uint32_t mReaderNumber = 0; ///< raw reader number in manager
734-
CRU mCRU; ///< CRU
735-
size_t mFileSize; ///< size of the input file
736-
bool mDumpTextFiles = false; ///< dump debugging text files
737-
bool mFillADCdataMap = true; ///< fill the ADC data map
738-
bool mForceCRU = false; ///< force CRU: overwrite value from RDH
739-
bool mFileIsScanned = false; ///< if file was already scanned
740-
std::array<uint32_t, MaxNumberOfLinks> mPacketsPerLink; ///< array to keep track of the number of packets per link
741-
std::bitset<MaxNumberOfLinks> mLinkPresent; ///< info if link is present in data; information retrieved from scanning the RDH headers
742-
std::array<PacketDescriptorMap, MaxNumberOfLinks> mPacketDescriptorMaps; ///< array to hold vectors thhe packet descriptors
743-
std::string mInputFileName; ///< input file name
744-
std::string mOutputFilePrefix; ///< input file name
745-
std::array<SyncArray, MaxNumberOfLinks> mSyncPositions{}; ///< sync positions for each link
731+
uint32_t mDebugLevel; ///< debug level
732+
uint32_t mVerbosity; ///< verbosity
733+
uint32_t mNumTimeBins; ///< number of time bins to process
734+
uint32_t mLink; ///< present link being processed
735+
uint32_t mStream; ///< present stream being processed
736+
uint32_t mEventNumber = 0; ///< current event number to process
737+
uint32_t mReaderNumber = 0; ///< raw reader number in manager
738+
CRU mCRU; ///< CRU
739+
size_t mFileSize; ///< size of the input file
740+
bool mDumpTextFiles = false; ///< dump debugging text files
741+
bool mFillADCdataMap = true; ///< fill the ADC data map
742+
bool mForceCRU = false; ///< force CRU: overwrite value from RDH
743+
bool mFileIsScanned = false; ///< if file was already scanned
744+
std::array<uint32_t, MaxNumberOfLinks> mPacketsPerLink; ///< array to keep track of the number of packets per link
745+
std::bitset<MaxNumberOfLinks> mLinkPresent; ///< info if link is present in data; information retrieved from scanning the RDH headers
746+
PacketDescriptorMapArray mPacketDescriptorMaps; ///< array to hold vectors thhe packet descriptors
747+
std::string mInputFileName; ///< input file name
748+
std::string mOutputFilePrefix; ///< input file name
749+
std::array<SyncArray, MaxNumberOfLinks> mSyncPositions{}; ///< sync positions for each link
746750
// not so nice but simplest way to store the ADC data
747751
std::map<PadPos, std::vector<uint16_t>> mADCdata; ///< decoded ADC data
748752
RawReaderCRUManager* mManager{nullptr}; ///< event synchronization information
@@ -952,6 +956,9 @@ class RawReaderCRUManager
952956
}
953957
}
954958

959+
/// get the event sync
960+
const RawReaderCRUEventSync& getEventSync() const { return mEventSync; }
961+
955962
/// get number of all events
956963
size_t getNumberOfEvents() const { return mEventSync.getNumberOfEvents(); }
957964

Detectors/TPC/reconstruction/src/RawReaderCRU.cxx

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -231,9 +231,9 @@ int RawReaderCRU::scanFile()
231231
RDH rdh;
232232
uint32_t currentPacket = 0;
233233
uint32_t lastHeartbeatOrbit = 0;
234+
size_t currentPos = 0;
234235

235-
while ((currentPacket < numPackets) && !file.eof()) {
236-
const size_t currentPos = file.tellg();
236+
while ((currentPos < mFileSize) && !file.eof()) {
237237

238238
// ===| read in the RawDataHeader at the current position |=================
239239
file >> rdh;
@@ -349,6 +349,7 @@ int RawReaderCRU::scanFile()
349349
// std::cout << "Position after read : " << std::dec << file.tellg() << std::endl;
350350
file.seekg(offset, file.cur);
351351
++currentPacket;
352+
currentPos = file.tellg();
352353
}
353354

354355
// close the File
@@ -905,7 +906,7 @@ void RawReaderCRU::writeGBTDataPerLink(std::string_view outputDirectory, int max
905906

906907
// loop over events
907908
for (int eventNumber = 0; eventNumber < getNumberOfEvents(); ++eventNumber) {
908-
if ((maxEvents > -1) && (eventNumber > maxEvents)) {
909+
if ((maxEvents > -1) && (eventNumber >= maxEvents)) {
909910
break;
910911
}
911912

@@ -916,11 +917,12 @@ void RawReaderCRU::writeGBTDataPerLink(std::string_view outputDirectory, int max
916917
if (!linkInfo.IsPresent) {
917918
continue;
918919
}
920+
printf("Event %4d, Link %2d\n", eventNumber, iLink);
919921

920922
const int ep = iLink >= 12;
921923
const int link = iLink - (ep)*12;
922924
auto outputFileName = fmt::format("{}/CRU_{:02}_EP_{}_Link_{:02}", outputDirectory.data(), mCRU, ep, link);
923-
std::ofstream outputFile(outputFileName, std::ios_base::binary);
925+
std::ofstream outputFile(outputFileName, std::ios_base::binary | std::ios_base::app);
924926

925927
for (auto packetNumber : linkInfo.PacketPositions) {
926928
const auto& packet = mPacketDescriptorMaps[iLink][packetNumber];
@@ -1136,8 +1138,15 @@ void RawReaderCRUManager::copyEvents(const std::vector<uint32_t> eventNumbers, s
11361138
{
11371139
// make sure events have been built
11381140
init();
1139-
for (auto& rawReader : mRawReadersCRU) {
1140-
rawReader->copyEvents(eventNumbers, outputDirectory.data(), mode);
1141+
const auto& cruSeen = mEventSync.getCRUSeen();
1142+
1143+
for (size_t iCRU = 0; iCRU < cruSeen.size(); ++iCRU) {
1144+
const auto readerNumber = cruSeen[iCRU];
1145+
if (readerNumber >= 0) {
1146+
auto& reader = mRawReadersCRU[readerNumber];
1147+
reader->forceCRU(iCRU);
1148+
reader->copyEvents(eventNumbers, outputDirectory.data(), mode);
1149+
}
11411150
}
11421151
}
11431152

0 commit comments

Comments
 (0)