/usr/include/dcmtk/dcmsr/cmr/tid1411.h is in libdcmtk-dev 3.6.2-3build3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 | /*
*
* Copyright (C) 2016, J. Riesmeier, Oldenburg, Germany
* All rights reserved. See COPYRIGHT file for details.
*
* Header file for class TID1411_VolumetricROIMeasurements
*
* Author: Joerg Riesmeier
*
*/
#ifndef CMR_TID1411_H
#define CMR_TID1411_H
#include "dcmtk/config/osconfig.h" /* make sure OS specific configuration is included first */
#include "dcmtk/dcmsr/dsrstpl.h"
#include "dcmtk/dcmsr/cmr/define.h"
#include "dcmtk/dcmsr/cmr/srnumvlu.h"
// include this file in doxygen documentation
/** @file tid1411.h
* @brief Interface class and error constants for TID 1411 in module dcmsr/cmr
*/
/*------------------------*
* constant definitions *
*------------------------*/
/** @name specific error conditions for TID 1411 in module dcmsr/cmr
*/
//@{
/// error: there is no measurement group to add entries to
extern DCMTK_CMR_EXPORT const OFConditionConst CMR_EC_NoMeasurementGroup;
/// error: the given segmentation object does not conform to the template constraints
extern DCMTK_CMR_EXPORT const OFConditionConst CMR_EC_InvalidSegmentationObject;
/// error: the given DICOM object is not a real world value mapping object
extern DCMTK_CMR_EXPORT const OFConditionConst CMR_EC_InvalidRealWorldValueMappingObject;
//@}
/*---------------------*
* class declaration *
*---------------------*/
/** Implementation of DCMR Template:
* TID 1411 - Volumetric ROI Measurements (and included templates 1502 and 1419).
* All added content items are annotated with a text in the format "TID 1411 - Row [n]".
** @tparam T_Measurement concept names for the numeric measurements (context group)
* @tparam T_Units units of the numeric measurement values (context group)
* @tparam T_Method methods used for measuring the values (context group)
* @tparam T_Derivation methods of deriving or calculating the values (context group)
** @note Please note that currently only the mandatory (and some optional/conditional)
* content items and included templates are supported.
* @note Also note that this template class requires explicit instantiation for those
* combinations of the template parameters that are actually used. This is
* because the implementation is "hidden" in a separate source file, which has
* some advantages over the usual header-only approach.
*/
template<typename T_Measurement, typename T_Units, typename T_Method, typename T_Derivation>
class DCMTK_CMR_EXPORT TID1411_VolumetricROIMeasurements
: public DSRSubTemplate
{
public:
// type definition
typedef CMR_SRNumericMeasurementValueWithUnits<T_Units> MeasurementValue;
/** (default) constructor
** @param createGroup flag indicating whether to create an empty measurement group
* by calling createMeasurementGroup() during startup
*/
TID1411_VolumetricROIMeasurements(const OFBool createGroup = OFFalse);
/** check whether the current internal state is valid.
* That means, whether the base class is valid and whether all mandatory content
* items and included templates are valid, i.e. hasMeasurementGroup(),
* hasTrackingIdentifier(), hasTrackingUniqueIdentifier(), hasReferencedSegment(),
* hasSourceSeriesForSegmentation() and hasROIMeasurements() return true.
** @return OFTrue if valid, OFFalse otherwise
*/
OFBool isValid() const;
/** check whether the 'Measurement Group' content item (TID 1411 - Row 1) is present.
* Initially, this mandatory content item is created by the constructor of this
* class (if not disabled). After clear() has been called, it can be created again
* by calling createMeasurementGroup().
** @param checkChildren optional flag indicating whether to also check for any
* children, i.e.\ whether the respective content item has
* child nodes. By default, the presence of the higher-level
* CONTAINER is checked only.
** @return OFTrue if the measurement group is present, OFFalse otherwise
*/
OFBool hasMeasurementGroup(const OFBool checkChildren = OFFalse) const;
/** check whether the 'Tracking Identifier' content item (TID 1411 - Row 2) is
* present. This content item is mandatory, i.e. should be present with a value.
** @return OFTrue if the tracking identifier is present, OFFalse otherwise
*/
OFBool hasTrackingIdentifier() const;
/** check whether the 'Tracking Unique Identifier' content item (TID 1411 - Row 3) is
* present. This content item is mandatory, i.e. should be present with a value.
** @return OFTrue if the tracking unique identifier is present, OFFalse otherwise
*/
OFBool hasTrackingUniqueIdentifier() const;
/** check whether the 'Referenced Segment' content item (TID 1411 - Row 7) is present.
* This content item is conditional, but should be present to meet the conditions.
** @return OFTrue if the referenced segment is present, OFFalse otherwise
*/
OFBool hasReferencedSegment() const;
/** check whether the 'Source Series for Segmentation' content item (TID 1411 -
* Row 12) is present. This content item is conditional, but should be present to
* meet the conditions.
** @return OFTrue if source series for segmentation is present, OFFalse otherwise
*/
OFBool hasSourceSeriesForSegmentation() const;
/** check whether there is an included 'ROI Measurements' template (TID 1411 -
* Row 15) in this measurement template. This included template is mandatory.
** @return OFTrue if ROI measurements are present, OFFalse otherwise
*/
OFBool hasROIMeasurements() const;
/** set the value of the 'Activity Session' content item (TID 1411 - Row 1b).
* A measurement group is created automatically (if none is present). If the
* content item already exists, its value is overwritten.
** @param session identifier of the session during which the measurements were made
* @param check if enabled, check values for validity before setting them
** @return status, EC_Normal if successful, an error code otherwise
*/
OFCondition setActivitySession(const OFString &session,
const OFBool check = OFTrue);
/** set the value of the 'Tracking Identifier' content item (TID 1411 - Row 2).
* A measurement group is created automatically (if none is present). If the
* content item already exists, its value is overwritten.
** @param trackingID a text label used for tracking a finding or feature
* @param check if enabled, check values for validity before setting them
** @return status, EC_Normal if successful, an error code otherwise
*/
OFCondition setTrackingIdentifier(const OFString &trackingID,
const OFBool check = OFTrue);
/** set the value of the 'Tracking Unique Identifier' content item (TID 1411 - Row 3).
* A measurement group is created automatically (if none is present). If the
* content item already exists, its value is overwritten.
** @param trackingUID a unique identifier used for tracking a finding or feature
* (associated DICOM VR=UI)
* @param check if enabled, check values for validity before setting them
** @return status, EC_Normal if successful, an error code otherwise
*/
OFCondition setTrackingUniqueIdentifier(const OFString &trackingUID,
const OFBool check = OFTrue);
/** set the value of the 'Finding' content item (TID 1411 - Row 3b).
* A measurement group is created automatically (if none is present). If the
* content item already exists, its value is overwritten.
** @param finding coded entry that describes the type of the finding
* @param check if enabled, check values for validity before setting them
** @return status, EC_Normal if successful, an error code otherwise
*/
OFCondition setFinding(const DSRCodedEntryValue &finding,
const OFBool check = OFTrue);
/** set the value of the 'Time Point' content item (TID 1502 - Row 3).
* A measurement group is created automatically (if none is present). If the
* content item already exists, its value is overwritten.
** @param timePoint a short pre-defined label that is human-readable
* @param check if enabled, check values for validity before setting them
** @return status, EC_Normal if successful, an error code otherwise
*/
OFCondition setTimePoint(const OFString &timePoint,
const OFBool check = OFTrue);
/** set the value of the 'Referenced Segment' content item (TID 1411 - Row 7).
* A measurement group is created automatically (if none is present). If the
* content item already exists, its value is overwritten.
** @param segment reference to a segmentation object with a single selected
* segment; specifically the pixels or voxels identified as
* belonging to the classification of the identified segment
* @param check if enabled, check values for validity before setting them
** @return status, EC_Normal if successful, an error code otherwise
*/
OFCondition setReferencedSegment(const DSRImageReferenceValue &segment,
const OFBool check = OFTrue);
/** set the value of the 'Referenced Segment' content item (TID 1411 - Row 7).
* A measurement group is created automatically (if none is present). If the
* content item already exists, its value is overwritten.
* If 'copyTracking' is enabled and the 'dataset' contains appropriate tracking
* information for the given 'segmentNumber', setTrackingIdentifier() and
* setTrackingUniqueIdentifier() are also called by this method.
** @param dataset DICOM dataset from which the values for the referenced
* segment (e.g. SOP class UID and SOP instance UID) should
* be retrieved
* @param segmentNumber number of the segment that should be referenced. The
* value is only checked when 'copyTracking' is enabled.
* @param copyTracking flag indicating whether to copy tracking information
* (tracking ID and UID) from the 'dataset', if available
* @param check if enabled, check values for validity before setting them
** @return status, EC_Normal if successful, an error code otherwise
*/
OFCondition setReferencedSegment(DcmItem &dataset,
const Uint16 segmentNumber,
const OFBool copyTracking = OFTrue,
const OFBool check = OFTrue);
/** set the value of the 'Source series for segmentation' content item (TID 1411 -
* Row 12). A measurement group is created automatically (if none is present).
* If the content item already exists, its value is overwritten.
** @param seriesUID the unique identifier of the source series of images that
* were segmented to identify the ROI (associated DICOM VR=UI)
* @param check if enabled, check values for validity before setting them
** @return status, EC_Normal if successful, an error code otherwise
*/
OFCondition setSourceSeriesForSegmentation(const OFString &seriesUID,
const OFBool check = OFTrue);
/** set the value of the 'Real World Value Map used for measurement' content item
* (TID 1411 - Row 14). A measurement group is created automatically (if none is
* present). If the content item already exists, its value is overwritten.
** @param valueMap reference to a real world value mapping object applied to the
* stored image pixel values before their use for a measurement
* @param check if enabled, check values for validity before setting them
** @return status, EC_Normal if successful, an error code otherwise
*/
OFCondition setRealWorldValueMap(const DSRCompositeReferenceValue &valueMap,
const OFBool check = OFTrue);
/** set the value of the 'Real World Value Map used for measurement' content item
* (TID 1411 - Row 14). A measurement group is created automatically (if none is
* present). If the content item already exists, its value is overwritten.
** @param dataset DICOM dataset from which the values for the reference to a
* real world value mapping object (SOP class UID and SOP instance
* UID) should be retrieved
* @param check if enabled, check values for validity before setting them
** @return status, EC_Normal if successful, an error code otherwise
*/
OFCondition setRealWorldValueMap(DcmItem &dataset,
const OFBool check = OFTrue);
/** set the value of the 'Measurement Method' content item (TID 1419 - Row 1).
* A measurement group is created automatically (if none is present). If the
* content item already exists, its value is overwritten.
** @param method coded entry describing the method used for measuring the values
* (e.g.\ from the given context group 'T_Method')
* @param check if enabled, check values for validity before setting them
** @return status, EC_Normal if successful, an error code otherwise
*/
OFCondition setMeasurementMethod(const T_Method &method,
const OFBool check = OFTrue);
/** set the value of the 'Finding Site' content item (TID 1419 - Row 2).
* A measurement group is created automatically (if none is present). If the
* content item already exists, its value is overwritten.
** @param site coded entry describing the anatomic location of the measurements
* @param check if enabled, check values for validity before setting them
** @return status, EC_Normal if successful, an error code otherwise
*/
OFCondition setFindingSite(const DSRCodedEntryValue &site,
const OFBool check = OFTrue);
/** add a measurement as defined in 'ROI Measurements' (TID 1419 - Row 5, 7 and 8).
* There should be at least a single instance of the associated template.
** @param conceptName coded entry specifying the concept name of the measurement
* (e.g.\ from the given context group 'T_Measurement')
* @param numericValue numeric measurement value to be set. The measurement unit
* could be taken from the baseline context group 'T_Units'.
* @param method optional method used for measuring the value
* (e.g.\ from the given context group 'T_Method')
* @param derivation optional method of deriving or calculating the value
* (e.g.\ from the context group 'T_Derivation')
* @param check if enabled, check value for validity before setting it
** @return status, EC_Normal if successful, an error code otherwise
*/
OFCondition addMeasurement(const T_Measurement &conceptName,
const MeasurementValue &numericValue,
const T_Method &method = T_Method(),
const T_Derivation &derivation = T_Derivation(),
const OFBool check = OFTrue);
protected:
/** create the mandatory root content item of this template, i.e.\ TID 1411 - Row 1.
* It is expected that the tree is currently empty.
** @return status, EC_Normal if successful, an error code otherwise
*/
OFCondition createMeasurementGroup();
/** add a new or replace an existing content item with a given node ID.
* If the content item does not exist, it is added to the measurement group, i.e.
* below the root node. If it does exist, both the 'valueType' and 'conceptName'
* are checked before replacing the value. However, the value is not replaced by
* this method. This is up to the caller after this method returned with success.
** @param nodePos index of the list entry that stores the ID of the node
* to search for
* @param relationshipType relationship type of the content item to be added/replaced
* @param valueType value type of the content item to be added/replaced
* @param conceptName concept name of the content item to be added/replaced
* @param annotationText optional text used to annotate the content item
* @param check if enabled, check values for validity before setting them
** @return status, EC_Normal if successful, an error code otherwise
*/
OFCondition addOrReplaceContentItem(const size_t nodePos,
const E_RelationshipType relationshipType,
const E_ValueType valueType,
const DSRCodedEntryValue &conceptName,
const OFString &annotationText,
const OFBool check);
};
#endif
|