DYT/Tool/3rdParty_x64/include/dcmtk/dcmsr/cmr/tid1500.h
2024-11-22 23:19:31 +08:00

291 lines
13 KiB
C++

/*
*
* Copyright (C) 2015-2016, J. Riesmeier, Oldenburg, Germany
* All rights reserved. See COPYRIGHT file for details.
*
* Header file for class TID1500_MeasurementReport
*
* Author: Joerg Riesmeier
*
*/
#ifndef CMR_TID1500_H
#define CMR_TID1500_H
#include "dcmtk/config/osconfig.h" /* make sure OS specific configuration is included first */
#include "dcmtk/dcmsr/dsrrtpl.h"
#include "dcmtk/dcmsr/dsrstpl.h"
#include "dcmtk/dcmsr/cmr/define.h"
#include "dcmtk/dcmsr/cmr/tid1001.h"
#include "dcmtk/dcmsr/cmr/tid1204.h"
#include "dcmtk/dcmsr/cmr/tid1411.h"
#include "dcmtk/dcmsr/cmr/tid1600.h"
#include "dcmtk/dcmsr/cmr/cid100.h"
#include "dcmtk/dcmsr/cmr/cid6147.h"
#include "dcmtk/dcmsr/cmr/cid7021.h"
#include "dcmtk/dcmsr/cmr/cid7181.h"
#include "dcmtk/dcmsr/cmr/cid7464.h"
#include "dcmtk/dcmsr/cmr/cid7469.h"
// include this file in doxygen documentation
/** @file tid1500.h
* @brief Interface class and error constants for TID 1500 in module dcmsr/cmr
*/
/*------------------------*
* constant definitions *
*------------------------*/
/** @name specific error conditions for TID 1500 in module dcmsr/cmr
*/
//@{
/// error: there is no measurement report to add content items to
extern DCMTK_CMR_EXPORT const OFConditionConst CMR_EC_NoMeasurementReport;
//@}
/*---------------------*
* class declaration *
*---------------------*/
/** Implementation of DCMR Template:
* TID 1500 - Measurement Report (and included templates 1204, 1001, 1600, 1411).
* All added content items are annotated with a text in the format "TID 1500 - Row [n]".
** @note Please note that currently only the mandatory (and some optional/conditional)
* content items and included templates are supported.
*/
class DCMTK_CMR_EXPORT TID1500_MeasurementReport
: public DSRRootTemplate
{
public:
// type definition
typedef TID1411_VolumetricROIMeasurements<CID7469_GenericIntensityAndSizeMeasurements,
CID7181_AbstractMultiDimensionalImageModelComponentUnits,
CID6147_ResponseCriteria,
CID7464_GeneralRegionOfInterestMeasurementModifiers>
TID1411_Measurements;
/** (default) constructor.
* Also creates an initial, almost empty measurement report by calling
* createNewMeasurementReport(), but only if a non-empty 'title' is passed.
** @param title optional document title to be set (from CID 7021 - Measurement
* Report Document Titles), i.e.\ the concept name of the root node
*/
TID1500_MeasurementReport(const CID7021_MeasurementReportDocumentTitles &title = CID7021_MeasurementReportDocumentTitles());
/** clear internal member variables.
* Also see notes on the clear() method of the base class.
*/
virtual void clear();
/** check whether the current internal state is valid.
* That means, check whether the base class is valid, the mandatory included
* templates TID 1204, 1001 and 1600 are valid, and whether hasProcedureReported()
* as well as hasImagingMeasurements() or hasQualitativeEvaluations() return true.
** @return OFTrue if valid, OFFalse otherwise
*/
virtual OFBool isValid() const;
/** check whether there are any 'Procedure reported' content items (TID 1500 - Row 4)
* in this measurement report. This content item is mandatory, i.e. one or more
* instances of the associated content item should be present.
** @return OFTrue if at least one procedure reported is present, OFFalse otherwise
*/
OFBool hasProcedureReported() const;
/** check whether there is an included 'Volumetric ROI Measurements' template
* (TID 1500 - Row 8) in this measurement report. Initially, this optional
* sub-template is created and included by the constructor of this class. After
* clear() has been called or no document title is passed to the constructor, it
* can be created again by calling createNewMeasurementReport().
** @param checkChildren optional flag indicating whether to also check for any
* children, i.e.\ whether the respective sub-template has
* any content (child nodes). By default, the presence of
* the "included template" content item is checked only.
** @return OFTrue if volumetric ROI measurements are present, OFFalse otherwise
*/
OFBool hasVolumetricROIMeasurements(const OFBool checkChildren = OFFalse) const;
/** check whether there is an 'Imaging Measurements' content item (TID 1500 - Row 6)
* in this measurement report. Initially, this conditional content item is created
* by the constructor of this class. After clear() has been called or no document
* title is passed to the constructor, it can be created again by calling
* createNewMeasurementReport().
** @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 imaging measurements are present, OFFalse otherwise
*/
OFBool hasImagingMeasurements(const OFBool checkChildren = OFFalse) const;
/** check whether there is an 'Qualitative Evaluations' content item (TID 1500 -
* Row 12) in this measurement report
** @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 qualitative evaluations are present, OFFalse otherwise
*/
OFBool hasQualitativeEvaluations(const OFBool checkChildren = OFFalse) const;
/** get language of this report as defined by TID 1204 (Language of Content Item and
* Descendants). This included template is mandatory, i.e. should not be empty.
** @return reference to internally managed SR template
*/
inline TID1204_LanguageOfContentItemAndDescendants &getLanguage() const
{
return *OFstatic_cast(TID1204_LanguageOfContentItemAndDescendants *, Language.get());
}
/** get observation context of this report as defined by TID 1001 (Observation
* Context). This included template is mandatory, i.e. should not be empty.
** @return reference to internally managed SR template
*/
inline TID1001_ObservationContext &getObservationContext() const
{
return *OFstatic_cast(TID1001_ObservationContext *, ObservationContext.get());
}
/** get image library of this report as defined by TID 1600 (Image Library).
* This included template is mandatory, i.e. should not be empty.
** @return reference to internally managed SR template
*/
inline TID1600_ImageLibrary &getImageLibrary() const
{
return *OFstatic_cast(TID1600_ImageLibrary *, ImageLibrary.get());
}
/** get volumetric ROI measurements of this report as defined by TID 1411 (Volumetric
* ROI Measurements), i.e.\ the current instance of TID 1500 - Row 8.
* This included template is optional, i.e. might be empty (but not absent).
* Further instances can be added by calling addVolumetricROIMeasurements().
** @return reference to internally managed SR template (current instance)
*/
inline TID1411_Measurements &getVolumetricROIMeasurements() const
{
return *OFstatic_cast(TID1411_Measurements *, VolumetricROIMeasurements.get());
}
/** get document title of this report, i.e.\ the concept name of the root node
** @param titleCode coded entry that specifies the document title of this report
** @return status, EC_Normal if successful, an error code otherwise
*/
OFCondition getDocumentTitle(DSRCodedEntryValue &titleCode);
/** create a new measurement report.
* Clear the report and create the mandatory (and other supported) content items of
* this template, i.e.\ TID 1500 - Row 1 to 6 and 8.
** @param title document title to be set (from CID 7021 - Measurement Report
* Document Titles), i.e.\ the concept name of the root node
** @return status, EC_Normal if successful, an error code otherwise
*/
OFCondition createNewMeasurementReport(const CID7021_MeasurementReportDocumentTitles &title);
/** set language of this report as defined by TID 1204 (Language of Content Item and
* Descendants)
** @param language language of the report, being a language that is primarily
* used for human communication (from CID 5000 - Languages)
* @param country coded entry that describes the country-specific variant of
* 'language' (optional, from CID 5001 - Countries)
* @param check if enabled, check values for validity before setting them
** @return status, EC_Normal if successful, an error code otherwise
*/
OFCondition setLanguage(const CID5000_Languages &language,
const CID5001_Countries &country = CID5001_Countries(),
const OFBool check = OFTrue);
/** add the imaging procedure whose results are reported (TID 1500 - Row 4).
* There should be at least a single instance of the associated content item.
** @param procedure coded entry that describes the imaging procedure to be added
* (from CID 100 - Quantitative Diagnostic Imaging Procedures)
* @param check if enabled, check value for validity before setting it
** @return status, EC_Normal if successful, an error code otherwise
*/
OFCondition addProcedureReported(const CID100_QuantitativeDiagnosticImagingProcedures &procedure,
const OFBool check = OFTrue);
/** create another instance of TID 1411 (Volumetric ROI Measurements) and add it as
* an included template to this report (TID 1500 - Row 8). A first instance of
* TID 1411 is created and added by calling createNewMeasurementReport(). Access
* to the current instance is available through getVolumetricROIMeasurements().
** @return status, EC_Normal if successful, an error code otherwise
*/
OFCondition addVolumetricROIMeasurements();
/** add a qualitative evaluation related to the entire subject of the report as a
* coded entry (TID 1500 - Row 13). The higher-level CONTAINER (Row 12) is created
* automatically (if none is present).
** @param conceptName coded entry to be set as the concept name
* @param codeValue coded entry to be set as the value of the new content item
* @param check if enabled, check values for validity before setting them
** @return status, EC_Normal if successful, an error code otherwise
*/
OFCondition addQualitativeEvaluation(const DSRCodedEntryValue &conceptName,
const DSRCodedEntryValue &codeValue,
const OFBool check = OFTrue);
/** add a qualitative evaluation related to the entire subject of the report in
* text form (TID 1500 - Row 14). The higher-level CONTAINER (Row 12) is created
* automatically (if none is present).
** @param conceptName coded entry to be set as the concept name
* @param stringValue character string to be set as the value of 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 addQualitativeEvaluation(const DSRCodedEntryValue &conceptName,
const OFString &stringValue,
const OFBool check = OFTrue);
protected:
/** create the mandatory (and other supported) content items of this template,
* i.e.\ TID 1500 - Row 1 to 6 and 8. It is expected that the tree is currently
* empty.
** @param title coded entry that specifies the document title to be set
** @return status, EC_Normal if successful, an error code otherwise
*/
OFCondition createMeasurementReport(const CID7021_MeasurementReportDocumentTitles &title);
/** create the 'Qualitative Evaluations' content item (TID 1500 - Row 12) if not
* existing yet
** @return status, EC_Normal if successful, an error code otherwise
*/
OFCondition createQualitativeEvaluations();
private:
// shared pointer to included template "Language of Content Item and Descendants" (TID 1204)
DSRSharedSubTemplate Language;
// shared pointer to included template "Observation Context" (TID 1001)
DSRSharedSubTemplate ObservationContext;
// shared pointer to included template "Image Library" (TID 1600)
DSRSharedSubTemplate ImageLibrary;
// shared pointer to included template "Volumetric ROI Measurements" (TID 1411)
DSRSharedSubTemplate VolumetricROIMeasurements;
};
/*--------------------*
* type definitions *
*--------------------*/
// define short names for the SR template classes
typedef TID1500_MeasurementReport CMR_TID1500;
typedef TID1500_MeasurementReport::TID1411_Measurements CMR_TID1411_in_TID1500;
#endif