mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2026-01-01 17:11:17 +01:00
wip
This commit is contained in:
@@ -12,21 +12,38 @@ void BinaryDataFile::CloseFile() {
|
||||
fd_ = nullptr;
|
||||
}
|
||||
|
||||
void BinaryDataFile::CreateDataFile(std::string filePath,
|
||||
std::string fileNamePrefix,
|
||||
uint64_t fileIndex, bool overWriteEnable,
|
||||
bool silentMode, int detIndex,
|
||||
int numUnitsPerDetector,
|
||||
uint32_t udpPortNumber) {
|
||||
void BinaryDataFile::CreateFirstBinaryDataFile(
|
||||
std::string filePath, std::string fileNamePrefix, uint64_t fileIndex,
|
||||
bool overWriteEnable, bool silentMode, int detIndex,
|
||||
int numUnitsPerDetector, uint32_t udpPortNumber,
|
||||
uint32_t maxFramesPerFile) {
|
||||
|
||||
subFileIndex_ = 0;
|
||||
numFramesInFile_ = 0;
|
||||
|
||||
filePath_ = filePath;
|
||||
fileNamePrefix_ = fileNamePrefix;
|
||||
fileIndex_ = fileIndex;
|
||||
overWriteEnable_ = overWriteEnable;
|
||||
silentMode_ = silentMode;
|
||||
detIndex_ = detIndex;
|
||||
numUnitsPerDetector_ = numUnitsPerDetector;
|
||||
udpPortNumber_ = udpPortNumber;
|
||||
maxFramesPerFile_ = maxFramesPerFile;
|
||||
|
||||
CreateFile();
|
||||
}
|
||||
|
||||
void BinaryDataFile::CreateFile() {
|
||||
numFramesInFile_ = 0;
|
||||
|
||||
std::ostringstream os;
|
||||
os << filePath << "/" << fileNamePrefix << "_d"
|
||||
<< (detIndex * numUnitsPerDetector + index_) << "_f" << subFileIndex_
|
||||
<< '_' << fileIndex << ".raw";
|
||||
os << filePath_ << "/" << fileNamePrefix_ << "_d"
|
||||
<< (detIndex_ * numUnitsPerDetector_ + index_) << "_f" << subFileIndex_
|
||||
<< '_' << fileIndex_ << ".raw";
|
||||
fileName_ = os.str();
|
||||
|
||||
if (!overWriteEnable) {
|
||||
if (!overWriteEnable_) {
|
||||
if (nullptr == (fd_ = fopen((const char *)fileName_.c_str(), "wx"))) {
|
||||
fd_ = nullptr;
|
||||
throw sls::RuntimeError("Could not create/overwrite file " +
|
||||
@@ -39,8 +56,54 @@ void BinaryDataFile::CreateDataFile(std::string filePath,
|
||||
// setting to no file buffering
|
||||
setvbuf(fd_, nullptr, _IONBF, 0);
|
||||
|
||||
if (!(silentMode)) {
|
||||
LOG(logINFO) << "[" << udpPortNumber
|
||||
if (!silentMode_) {
|
||||
LOG(logINFO) << "[" << udpPortNumber_
|
||||
<< "]: Binary File created: " << fileName_;
|
||||
}
|
||||
}
|
||||
|
||||
void BinaryDataFile::WriteToFile(char *buffer, int buffersize,
|
||||
uint64_t currentFrameNumber,
|
||||
uint32_t numPacketsCaught) {
|
||||
// check if maxframesperfile = 0 for infinite
|
||||
if (maxFramesPerFile_ && (numFramesInFile_ >= maxFramesPerFile_)) {
|
||||
CloseFile();
|
||||
++subFileIndex_;
|
||||
CreateFile();
|
||||
}
|
||||
numFramesInFile_++;
|
||||
|
||||
// write to file
|
||||
int ret = 0;
|
||||
|
||||
// contiguous bitset
|
||||
if (sizeof(sls_bitset) == sizeof(bitset_storage)) {
|
||||
ret = fwrite(buffer, 1, buffersize, fd_);
|
||||
}
|
||||
|
||||
// not contiguous bitset
|
||||
else {
|
||||
// write detector header
|
||||
ret = fwrite(buffer, 1, sizeof(sls_detector_header), fd_);
|
||||
|
||||
// get contiguous representation of bit mask
|
||||
bitset_storage storage;
|
||||
memset(storage, 0, sizeof(bitset_storage));
|
||||
sls_bitset bits = *(sls_bitset *)(buffer + sizeof(sls_detector_header));
|
||||
for (int i = 0; i < MAX_NUM_PACKETS; ++i)
|
||||
storage[i >> 3] |= (bits[i] << (i & 7));
|
||||
// write bitmask
|
||||
ret += fwrite((char *)storage, 1, sizeof(bitset_storage), fd_);
|
||||
|
||||
// write data
|
||||
ret += fwrite(buffer + sizeof(sls_detector_header), 1,
|
||||
buffersize - sizeof(sls_receiver_header), fd_);
|
||||
}
|
||||
|
||||
// if write error
|
||||
if (ret != buffersize) {
|
||||
throw sls::RuntimeError(std::to_string(index_) +
|
||||
" : Write to file failed for image number " +
|
||||
std::to_string(currentFrameNumber));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user