DYTSrouce/Tool/3rdParty_x64/include/dcmtk/dcmtract/trcstatistic.h
2024-11-22 23:19:31 +08:00

319 lines
12 KiB
C++

/*
*
* Copyright (C) 2016, Open Connections GmbH
* All rights reserved. See COPYRIGHT file for details.
*
* This software and supporting documentation are maintained by
*
* OFFIS e.V.
* R&D Division Health
* Escherweg 2
* D-26121 Oldenburg, Germany
*
*
* Module: dcmtract
*
* Author: Michael Onken
*
* Purpose: Statistics from a Tractography Results IOD
*
*/
#ifndef TRCSTATISTIC_H
#define TRCSTATISTIC_H
#include "dcmtk/config/osconfig.h"
#include "dcmtk/dcmiod/modbase.h"
#include "dcmtk/dcmiod/iodutil.h"
#include "dcmtk/dcmiod/iodmacro.h"
#include "dcmtk/dcmtract/trctypes.h"
// Forward declarations
class CodeSequenceMacro;
/** Base class representing a statistic within the "Tractography Results" IOD. A
* statistic is of a certain type and applies to a specific region of interest.
* For each Track Set and for each track there may be one or more statistics
* defined. The specializations can be found in classes TrcTracksStatistic and
* TrcTrackSetStatistic.
*/
class DCMTK_DCMTRACT_EXPORT TrcStatistic
: public IODComponent
{
public:
// Allow read/write functions in DcmIODUtil to access class internals
friend class DcmIODUtil;
/** Constructor
*/
TrcStatistic();
/** Destructor, frees memory
*/
virtual ~TrcStatistic();
/** Clears all data
*/
virtual void clearData();
/** Read attributes from given item into this class
* @param source The source to read from
* @param clearOldData If OFTrue, old data is cleared before reading. Otherwise
* old data is overwritten (or amended)
* @result EC_Normal if reading was successful, error otherwise
*/
virtual OFCondition read(DcmItem& source,
const OFBool clearOldData = OFTrue);
/** Write attributes from this class into given item
* @param destination The item to write to
* @result EC_Normal if writing was successful, error otherwise
*/
virtual OFCondition write(DcmItem& destination);
/** Set descriptive information of statistic
* @param typeCode The type of statistic, DICOM prescribes codes from
* CID 7263 "Diffusion Tractography Measurement Types"
* @param typeModifierCode Defines the region of interest, DICOM prescribes
* code from CID 7464 "General Region of Interest Measurement
* Modifiers"
* @param unitsCode The physical units of the statistic value, DICOM
* prescribes code from CID 82 "Units of Measurement" (UCUM).
* @return EC_Normal if setting was successful, error otherwise.
*/
virtual OFCondition set(const CodeSequenceMacro& typeCode,
const CodeSequenceMacro& typeModifierCode,
const CodeSequenceMacro& unitsCode);
/** Get descriptive information of statistic
* @param typeCode Returns type of statistic
* @param typeModifierCode Returns region of interest
* @param unitsCode Returns physical units of the statistic value
* @return EC_Normal if getting was successful, error otherwise.
*/
virtual OFCondition get(CodeSequenceMacro& typeCode,
CodeSequenceMacro& typeModifierCode,
CodeSequenceMacro& unitsCode);
/** Resets rules to their original values
*/
virtual void resetRules();
protected:
/// Single item from Concept Name Code Sequence
CodeSequenceMacro m_Type;
/// Single item from Modifier Code Sequence
CodeSequenceMacro m_TypeModifier;
/// Single item from Unit Code Sequence
CodeSequenceMacro m_Units;
/// Floating Point Value(s), one for each Track in Track Set (for Track
/// Statistic), or a single value in case of Track Set Statistic
OFVector<Float32*> m_Values;
};
/** Class representing a statistic for Tracks in Track Set. Besides describing
* information like type of statistic, region o interest and units of the
* statistic values, the statistic defines a single statistic value for each
* track. Thus the number of statistic values must be identical to the number
* of tracks in the containing Track Set.
*/
class TrcTracksStatistic : public TrcStatistic
{
public:
/** Constructor
*/
TrcTracksStatistic();
/** Destructor, frees memory
*/
~TrcTracksStatistic();
/** Create track statistic by providing the required information
* @param typeCode The value for which the statistic is a summary. DICOM
* prescribes code from CID 7263 "Diffusion Tractography Measurement
* Types"
* @param typeModifierCode The region of interest of the statistic. DICOM
* prescribes code from CID 7464 "General Region of Interest
* Measurement Modifiers"
* @param unitsCode The physical units of the statistic value. DICOM
* prescribes code from CID 82 "Units of Measurement".
* @param statisticValues The statistic values
* @param numValues The number of statistic values in statisticValues, must
* be equal to number of Tracks in the Track Set that this statistic
* applies to
* @param statistic Returns the resulting TrcTracksStatistic object (NULL
* in case of any error)
* @return EC_Normal if creation was successful, error otherwise
*/
static OFCondition create(const CodeSequenceMacro& typeCode,
const CodeSequenceMacro& typeModifierCode,
const CodeSequenceMacro& unitsCode,
const Float32* statisticValues,
const size_t numValues,
TrcTracksStatistic*& statistic /* result */);
/** Read attributes from given item into this class
* @param source The source to read from
* @param clearOldData If OFTrue, old data is cleared before reading. Otherwise
* old data is overwritten (or amended)
* @result EC_Normal if reading was successful, error otherwise
*/
virtual OFCondition read(DcmItem& source,
const OFBool clearOldData = OFTrue);
/** Write attributes from this class into given item
* @param destination The item to write to
* @result EC_Normal if writing was successful, error otherwise
*/
virtual OFCondition write(DcmItem& destination);
/** Resets rules to their original values
*/
virtual void resetRules();
/** Get name of component
* @return Name of the module ("TrackStatisticsSequenceItem")
*/
virtual OFString getName() const;
/** Set Track statistic
* @param typeCode The value for which the statistic is a summary. DICOM
* prescribes code from CID 7263 "Diffusion Tractography Measurement
* Types"
* @param typeModifierCode The region of interest of the statistic. DICOM
* prescribes code from CID 7464 "General Region of Interest
* Measurement Modifiers"
* @param unitsCode The physical units of the statistic value. DICOM
* prescribes code from CID 82 "Units of Measurement".
* @param statisticValues The statistic values
* @param numValues The number of statistic values in statisticValues, must
* equal the number of tracks in containing Track Set
* @return EC_Normal if setting was successful, error otherwise
*/
virtual OFCondition set(const CodeSequenceMacro& typeCode,
const CodeSequenceMacro& typeModifierCode,
const CodeSequenceMacro& unitsCode,
const Float32* statisticValues,
const size_t numValues);
/** Get Track statistic information
* @param typeCode Returns value for which the statistic is a summary.
* @param typeModifierCode Returns region of interest of the statistic.
* @param unitsCode Returns physical units of the statistic value.
* @param statisticValues Returns statistic values
* @param numValues Returns number of statistic values in statisticValues,
* should be equal to number of tracks in containing Track Set
* @return EC_Normal if data could be retrieved, error otherwise
*/
virtual OFCondition get(CodeSequenceMacro& typeCode,
CodeSequenceMacro& typeModifierCode,
CodeSequenceMacro& unitsCode,
const Float32*& statisticValues,
unsigned long& numValues);
};
/** Class representing a Track Set statistic, i.e. a single statistic value that
* is amended by information about type of statistic, region of interest it as
* well as physical unit of the value. A Track Set can define 0 or more
* statistics.
*/
class TrcTrackSetStatistic : public TrcStatistic
{
public:
/** Constructor
*/
TrcTrackSetStatistic();
/** Destructor, frees memory
*/
virtual ~TrcTrackSetStatistic();
/** Create track statistic by providing the required information
* @param typeCode The value for which the statistic is a summary. DICOM
* prescribes code from CID 7263 "Diffusion Tractography Measurement
* Types"
* @param typeModifierCode The region of interest of the statistic. DICOM
* prescribes code from CID 7464 "General Region of Interest
* Measurement Modifiers"
* @param unitsCode The physical units of the statistic value. DICOM
* prescribes code from CID 82 "Units of Measurement".
* @param statisticValue The statistic value
* @param statistic Returns the resulting TrcTrackSetStatistic object (NULL
* in case of any error)
* @return EC_Normal if creation was successful, error otherwise
*/
static OFCondition create(const CodeSequenceMacro& typeCode,
const CodeSequenceMacro& typeModifierCode,
const CodeSequenceMacro& unitsCode,
const Float64 statisticValue,
TrcTrackSetStatistic*& statistic /* result */);
/** Read attributes from given item into this class
* @param source The source to read from
* @param clearOldData If OFTrue, old data is cleared before reading. Otherwise
* old data is overwritten (or amended)
* @result EC_Normal if reading was successful, error otherwise
*/
virtual OFCondition read(DcmItem& source,
const OFBool clearOldData = OFTrue);
/** Write attributes from this class into given item
* @param destination The item to write to
* @result EC_Normal if writing was successful, error otherwise
*/
virtual OFCondition write(DcmItem& destination);
/** Resets rules to their original values
*/
virtual void resetRules();
/** Get name of component
* @return Name of the module ("TrackSetStatisticsSequenceItem")
*/
virtual OFString getName() const;
/** Set Track Set statistic
* @param typeCode The value for which the statistic is a summary. DICOM
* prescribes code from CID 7263 "Diffusion Tractography Measurement
* Types"
* @param typeModifierCode The region of interest of the statistic. DICOM
* prescribes code from CID 7464 "General Region of Interest
* Measurement Modifiers"
* @param unitsCode The physical units of the statistic value. DICOM
* prescribes code from CID 82 "Units of Measurement".
* @param statisticValue The statistic value
* @return EC_Normal if setting was successful, error otherwise
*/
virtual OFCondition set(const CodeSequenceMacro& typeCode,
const CodeSequenceMacro& typeModifierCode,
const CodeSequenceMacro& unitsCode,
const Float64 statisticValue);
/** Get Track Set statistic information
* @param typeCode Returns value for which the statistic is a summary.
* @param typeModifierCode Returns region of interest of the statistic.
* @param unitsCode Returns physical units of the statistic value.
* @param statisticValue Returns the statistic value
* @return EC_Normal if data could be retrieved, error otherwise
*/
virtual OFCondition get(CodeSequenceMacro& typeCode,
CodeSequenceMacro& typeModifierCode,
CodeSequenceMacro& unitsCode,
Float64& statisticValue);
};
#endif // TRCSTATISTIC_H