Medical Imaging Interaction Toolkit  2026.06.00
Medical Imaging Interaction Toolkit
mitkSUVCalculationHelper.h
Go to the documentation of this file.
1 /*===================================================================
2 
3 The Medical Imaging Interaction Toolkit (MITK)
4 
5 Copyright (c) German Cancer Research Center,
6 Division of Medical and Biological Informatics.
7 All rights reserved.
8 
9 This software is distributed WITHOUT ANY WARRANTY; without
10 even the implied warranty of MERCHANTABILITY or FITNESS FOR
11 A PARTICULAR PURPOSE.
12 
13 See LICENSE.txt or http://www.mitk.org for details.
14 
15 ===================================================================*/
16 
17 
18 #ifndef mitkSUVCalculationHelper_h
19 #define mitkSUVCalculationHelper_h
20 
21 #include <limits>
22 #include <map>
23 #include <string>
24 #include <vector>
25 
26 #include <mitkException.h>
27 #include <mitkExceptionMacro.h>
28 #include <mitkSlicedData.h>
29 
30 #include <MitkPETExports.h>
31 
32 namespace mitk
33 {
34  class IPropertyProvider;
35 
46  enum class Sex
47  {
48  Male,
49  Female,
56  Other
57  };
58 
66  {
67  public:
69  };
70 
79  {
80  public:
82  };
83 
92  {
93  public:
95  };
96 
110  {
111  public:
114  };
115 
136  {
137  public:
139  };
140 
154  {
155  public:
157  };
158 
174  {
175  public:
177  };
178 
194  {
195  public:
197  };
198 
211  {
212  public:
214  };
215 
238  {
239  public:
241  };
242 
257  {
258  public:
260  };
261 
280  {
281  public:
283  };
284 
296  {
297  public:
299  };
300 
313  {
314  public:
316  };
317 
343  enum class DICOMReadPolicy
344  {
345  Lenient,
346  Strict
347  };
348 
367  {
368  Siemens,
369  GE,
370  Philips,
371  Other
372  };
373 
385 
395  {
398  Admin,
400  Start,
403  None,
405  Manual
406  };
407 
413  typedef std::map<mitk::SlicedData::IndexValueType, double> DecayTimeSliceMapType;
414 
420  typedef std::map<mitk::TimeStepType, DecayTimeSliceMapType> DecayTimeMapType;
421 
435  {
438  };
439 
450  {
452  double halfLifeSeconds = std::numeric_limits<double>::quiet_NaN();
454  double totalDoseBq = std::numeric_limits<double>::quiet_NaN();
456  std::string name;
457  };
458 
496  std::vector<RadiopharmaceuticalInfo> MITKPET_EXPORT
499 
514 
529 
552 
568 
677  const mitk::SlicedData* data,
678  double halfLifeSeconds = std::numeric_limits<double>::quiet_NaN(),
680 
681 }
682 
683 #endif
#define MITKPET_EXPORT
Acquisition / radiopharmaceutical-injection timing cannot be reconciled.
mitkExceptionClassMacro(AmbiguousDecayTimingException, SUVHelperException)
Ambiguous patient sex would have been resolved as the IBSI mean of the male- and female-specific norm...
mitkExceptionClassMacro(AmbiguousPatientSexAdaptationRefusedException, BenchmarkAdaptationRequiredException)
Base class for failures triggered by a benchmark-recommended adaptation that the active policy refuse...
mitkExceptionClassMacro(BenchmarkAdaptationRequiredException, SUVHelperException)
Raised when a uniform decay-time override and a per-(timestep, slice) decay-time override map are set...
mitkExceptionClassMacro(ConflictingDecayTimeOverrideException, SUVHelperException)
Base class for all MITK exceptions.
Definition: mitkException.h:53
Interface implemented by classes that provide access to property information.
Radionuclide Total Dose (0018,1074) is implausible as Bq and would have been reinterpreted as MBq,...
mitkExceptionClassMacro(ImplausibleRadionuclideDoseException, BenchmarkAdaptationRequiredException)
A DICOM property is present but holds a value the helper does not understand.
mitkExceptionClassMacro(InvalidDICOMPropertyValueException, SUVHelperException)
A user-supplied per-(timestep, slice) decay-time override map is not a complete and well-formed match...
mitkExceptionClassMacro(InvalidDecayTimeMapException, SUVHelperException)
A uniform decay-time override value is not a usable decay duration.
mitkExceptionClassMacro(InvalidDecayTimeOverrideException, SUVHelperException)
A required DICOM property is missing on the input data.
mitkExceptionClassMacro(MissingDICOMPropertyException, SUVHelperException)
(0054,1001) Units == "CNTS" and the manufacturer is Philips, but neither of the two Philips private s...
mitkExceptionClassMacro(MissingPhilipsPETScaleException, SUVHelperException)
A multi-item Radiopharmaceutical Information Sequence (0054,0016) was supplied without an explicit tr...
mitkExceptionClassMacro(MultiItemRadiopharmaceuticalSequenceException, InvalidDICOMPropertyValueException)
Base class for failures originating from the SUV calculation helpers.
mitkExceptionClassMacro(SUVHelperException, mitk::Exception)
Super class of data objects consisting of slices.
Tag (0054,1001) Units holds a value the SUV pipeline cannot interpret.
mitkExceptionClassMacro(UnsupportedPETUnitsException, SUVHelperException)
Strategy DC=START would have been resolved via a vendor-specific empirical fallback (Steps 3 / 4),...
mitkExceptionClassMacro(VendorEmpiricalDecayFallbackRefusedException, BenchmarkAdaptationRequiredException)
Find image slices visible on a given plane.
ManufacturerFamily MITKPET_EXPORT GetManufacturerFamily(const mitk::IPropertyProvider *provider)
Classify the input's (0008,0070) Manufacturer into a family.
Sex MITKPET_EXPORT GetPatientsSex(const mitk::IPropertyProvider *provider)
Get the patient's sex from DICOM properties as a typed enum.
DecayCorrectionStrategy
Strategy describing how (or whether) the input pixel data has been decay-corrected by the scanner.
std::map< mitk::TimeStepType, DecayTimeSliceMapType > DecayTimeMapType
Map storing per-time-step decay time slice maps.
double MITKPET_EXPORT GetPatientsHeight(const mitk::IPropertyProvider *provider)
Get the patient's height (size) from DICOM properties.
DICOMReadPolicy
Policy controlling whether benchmark-recommended adaptations of borderline / non-spec DICOM input are...
ManufacturerFamily
Manufacturer family inferred from DICOM tag (0008,0070) Manufacturer.
std::vector< RadiopharmaceuticalInfo > MITKPET_EXPORT GetRadiopharmaceuticalInfos(const mitk::IPropertyProvider *provider, DICOMReadPolicy policy=DICOMReadPolicy::Lenient)
Read the Radiopharmaceutical Information Sequence as paired-by-item info.
DecayCorrectionStrategy MITKPET_EXPORT GetDecayCorrectionStrategy(const mitk::IPropertyProvider *provider)
Detect the DICOM Decay Correction strategy of the input data.
double MITKPET_EXPORT GetPatientsWeight(const mitk::IPropertyProvider *provider)
Get the patient's weight from DICOM properties.
DecayCorrectionInfo MITKPET_EXPORT DeduceDecayCorrection(const mitk::SlicedData *data, double halfLifeSeconds=std::numeric_limits< double >::quiet_NaN(), DICOMReadPolicy policy=DICOMReadPolicy::Lenient)
Deduce the residual decay correction needed to compute SUV.
std::map< mitk::SlicedData::IndexValueType, double > DecayTimeSliceMapType
Map storing the residual decay time in seconds per slice.
Sex
Patient sex modeled as a closed set.
Result of DeduceDecayCorrection().
Per-item radiopharmaceutical metadata pulled from the Radiopharmaceutical Information Sequence (0054,...