in src/dcmtkUtils.cpp [378:427]
OFCondition DcmtkUtils::insertMultiFrameTags(
const DcmtkImgDataInfo& imgInfo, const uint32_t numberOfFrames,
const uint32_t rowSize, const uint32_t row, const uint32_t column,
const int instanceNumber, const int batchNumber, const uint32_t offset,
const uint32_t totalNumberOfFrames, const bool tiled,
absl::string_view seriesId, DcmDataset* dataSet) {
unsigned int concatenationTotalNumber;
std::string seriesId_str = std::move(static_cast<std::string>(seriesId));
if (totalNumberOfFrames - offset == numberOfFrames) {
concatenationTotalNumber = batchNumber + 1;
} else {
concatenationTotalNumber =
std::ceil(static_cast<double>(totalNumberOfFrames) /
static_cast<double>(numberOfFrames));
}
OFCondition cond = dataSet->putAndInsertOFStringArray(
DCM_InstanceNumber, std::to_string(instanceNumber).c_str());
if (concatenationTotalNumber > 1 && cond.good()) {
cond =
dataSet->putAndInsertUint32(DCM_ConcatenationFrameOffsetNumber, offset);
if (cond.bad()) return cond;
cond =
dataSet->putAndInsertUint16(DCM_InConcatenationNumber, batchNumber + 1);
if (cond.bad()) return cond;
cond = dataSet->putAndInsertUint16(DCM_InConcatenationTotalNumber,
concatenationTotalNumber);
if (cond.bad()) return cond;
cond = dataSet->putAndInsertOFStringArray(
DCM_ConcatenationUID,
(seriesId_str + "." + std::to_string(instanceNumber)).c_str());
}
if (cond.bad()) return cond;
cond = dataSet->putAndInsertOFStringArray(
DCM_FrameOfReferenceUID,
(seriesId_str + "." + std::to_string(instanceNumber)).c_str());
if (cond.bad()) return cond;
if (tiled) {
cond = dataSet->putAndInsertOFStringArray(DCM_DimensionOrganizationType,
"TILED_FULL");
} else {
cond = dataSet->putAndInsertOFStringArray(DCM_DimensionOrganizationType,
"TILED_SPARSE");
if (cond.bad()) return cond;
cond = generateFramePositionMetadata(dataSet, numberOfFrames, rowSize, row,
column, imgInfo.rows, imgInfo.cols);
}
return cond;
}