OFCondition DcmtkUtils::insertMultiFrameTags()

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;
}