Medical Imaging Interaction Toolkit  2016.11.0
Medical Imaging Interaction Toolkit
mitk::DICOMTagBasedSorter Class Reference

Sort DICOM datasets based on configurable tags. More...

#include <mitkDICOMTagBasedSorter.h>

Inheritance diagram for mitk::DICOMTagBasedSorter:
Collaboration diagram for mitk::DICOMTagBasedSorter:

Classes

class  CutDecimalPlaces
 Cuts a number after configured number of decimal places. An instance of this class can be used to avoid errors when comparing minimally different image orientations. More...
 
struct  ParameterizedDatasetSort
 Helper struct to feed into std::sort, configured via DICOMSortCriterion. More...
 
class  TagValueProcessor
 Processes tag values before they are compared. These classes could do some kind of normalization such as rounding, lower case formatting, etc. More...
 

Public Member Functions

 mitkClassMacro (DICOMTagBasedSorter, DICOMDatasetSorter) static Pointer New()
 
void AddDistinguishingTag (const DICOMTag &, TagValueProcessor *tagValueProcessor=nullptr)
 Datasets that differ in given tag's value will be sorted into separate outputs. More...
 
DICOMTagList GetDistinguishingTags () const
 
const TagValueProcessorGetTagValueProcessorForDistinguishingTag (const DICOMTag &) const
 
void SetSortCriterion (DICOMSortCriterion::ConstPointer criterion)
 Define the sorting criterion (which holds seconardy criteria) More...
 
DICOMSortCriterion::ConstPointer GetSortCriterion () const
 
virtual DICOMTagList GetTagsOfInterest () override
 A list of all the tags needed for processing (facilitates scanning). More...
 
void SetStrictSorting (bool strict)
 Whether or not groups should be checked for consecutive tag values. More...
 
bool GetStrictSorting () const
 
void SetExpectDistanceOne (bool strict)
 Flag for a special case in "strict sorting". Please see documentation of SetStrictSorting(). More...
 
bool GetExpectDistanceOne () const
 
virtual void Sort () override
 Actually sort as described in the Detailed Description. More...
 
virtual void PrintConfiguration (std::ostream &os, const std::string &indent="") const override
 Print configuration details into given stream. More...
 
virtual bool operator== (const DICOMDatasetSorter &other) const override
 
- Public Member Functions inherited from mitk::DICOMDatasetSorter
 mitkClassMacroItkParent (DICOMDatasetSorter, itk::LightObject) virtual DICOMTagList GetTagsOfInterest()=0
 Return the tags of interest (to facilitate scanning) More...
 
void SetInput (DICOMDatasetList filenames)
 Input for sorting. More...
 
const DICOMDatasetListGetInput () const
 Input for sorting. More...
 
unsigned int GetNumberOfOutputs () const
 Output of the sorting process. More...
 
const DICOMDatasetListGetOutput (unsigned int index) const
 Output of the sorting process. More...
 
DICOMDatasetListGetOutput (unsigned int index)
 Output of the sorting process. More...
 

Protected Types

typedef std::map< std::string, DICOMDatasetListGroupIDToListType
 
typedef std::map< const DICOMTag, TagValueProcessor * > TagValueProcessorMap
 

Protected Member Functions

 DICOMTagBasedSorter ()
 
virtual ~DICOMTagBasedSorter ()
 
 DICOMTagBasedSorter (const DICOMTagBasedSorter &other)
 
DICOMTagBasedSorteroperator= (const DICOMTagBasedSorter &other)
 
std::string BuildGroupID (DICOMDatasetAccess *dataset)
 Helper for SplitInputGroups(). More...
 
GroupIDToListType SplitInputGroups ()
 Implements the "distiguishing tags". To sort datasets into different groups, a long string will be built for each dataset. The string concatenates all tags and their respective values. Datasets that match in all values will end up with the same string. More...
 
GroupIDToListTypeSortGroups (GroupIDToListType &groups)
 Implements the sorting step. Relatively simple implementation thanks to std::sort and a parameterization via DICOMSortCriterion. More...
 
- Protected Member Functions inherited from mitk::DICOMDatasetSorter
 DICOMDatasetSorter ()
 
virtual ~DICOMDatasetSorter ()
 
 DICOMDatasetSorter (const DICOMDatasetSorter &other)
 
DICOMDatasetSorteroperator= (const DICOMDatasetSorter &other)
 
void ClearOutputs ()
 
void SetNumberOfOutputs (unsigned int numberOfOutputs)
 
void SetOutput (unsigned int index, const DICOMDatasetList &output)
 

Protected Attributes

DICOMTagList m_DistinguishingTags
 
TagValueProcessorMap m_TagValueProcessor
 
DICOMSortCriterion::ConstPointer m_SortCriterion
 
bool m_StrictSorting
 
bool m_ExpectDistanceOne
 

Detailed Description

Sort DICOM datasets based on configurable tags.

This class implements sorting of input DICOM datasets into multiple outputs as described in Loading strategy.

The logic of sorting and splitting is most simple and most generic:

  1. Datasets will be put into different groups, if they differ in their value of specific tags (defined by AddDistinguishingTag())
    • there might be multiple distinguishing tags defined
    • tag values might be processed before comparison by means of TagValueProcessor (e.g. round to a number of decimal places)
  2. Each of the groups will be sorted by comparing their tag values using multiple DICOMSortCriterion

Definition at line 44 of file mitkDICOMTagBasedSorter.h.

Member Typedef Documentation

typedef std::map<std::string, DICOMDatasetList> mitk::DICOMTagBasedSorter::GroupIDToListType
protected

Definition at line 165 of file mitkDICOMTagBasedSorter.h.

Definition at line 181 of file mitkDICOMTagBasedSorter.h.

Constructor & Destructor Documentation

mitk::DICOMTagBasedSorter::DICOMTagBasedSorter ( )
protected

Definition at line 91 of file mitkDICOMTagBasedSorter.cpp.

mitk::DICOMTagBasedSorter::~DICOMTagBasedSorter ( )
protectedvirtual

Definition at line 99 of file mitkDICOMTagBasedSorter.cpp.

mitk::DICOMTagBasedSorter::DICOMTagBasedSorter ( const DICOMTagBasedSorter other)
protected

Definition at line 110 of file mitkDICOMTagBasedSorter.cpp.

References m_TagValueProcessor.

Member Function Documentation

void mitk::DICOMTagBasedSorter::AddDistinguishingTag ( const DICOMTag tag,
TagValueProcessor tagValueProcessor = nullptr 
)

Datasets that differ in given tag's value will be sorted into separate outputs.

Definition at line 279 of file mitkDICOMTagBasedSorter.cpp.

std::string mitk::DICOMTagBasedSorter::BuildGroupID ( DICOMDatasetAccess dataset)
protected
mitk::DICOMTagList mitk::DICOMTagBasedSorter::GetDistinguishingTags ( ) const

Definition at line 257 of file mitkDICOMTagBasedSorter.cpp.

bool mitk::DICOMTagBasedSorter::GetExpectDistanceOne ( ) const

Definition at line 237 of file mitkDICOMTagBasedSorter.cpp.

mitk::DICOMSortCriterion::ConstPointer mitk::DICOMTagBasedSorter::GetSortCriterion ( ) const

Definition at line 294 of file mitkDICOMTagBasedSorter.cpp.

bool mitk::DICOMTagBasedSorter::GetStrictSorting ( ) const

Definition at line 223 of file mitkDICOMTagBasedSorter.cpp.

mitk::DICOMTagList mitk::DICOMTagBasedSorter::GetTagsOfInterest ( )
overridevirtual

A list of all the tags needed for processing (facilitates scanning).

Definition at line 245 of file mitkDICOMTagBasedSorter.cpp.

const mitk::DICOMTagBasedSorter::TagValueProcessor * mitk::DICOMTagBasedSorter::GetTagValueProcessorForDistinguishingTag ( const DICOMTag tag) const

Definition at line 264 of file mitkDICOMTagBasedSorter.cpp.

mitk::DICOMTagBasedSorter::mitkClassMacro ( DICOMTagBasedSorter  ,
DICOMDatasetSorter   
)
bool mitk::DICOMTagBasedSorter::operator== ( const DICOMDatasetSorter other) const
overridevirtual

Implements mitk::DICOMDatasetSorter.

Definition at line 149 of file mitkDICOMTagBasedSorter.cpp.

void mitk::DICOMTagBasedSorter::PrintConfiguration ( std::ostream &  os,
const std::string &  indent = "" 
) const
overridevirtual

Print configuration details into given stream.

Implements mitk::DICOMDatasetSorter.

Definition at line 188 of file mitkDICOMTagBasedSorter.cpp.

void mitk::DICOMTagBasedSorter::SetExpectDistanceOne ( bool  strict)

Flag for a special case in "strict sorting". Please see documentation of SetStrictSorting().

See also
SetStrictSorting

Definition at line 230 of file mitkDICOMTagBasedSorter.cpp.

void mitk::DICOMTagBasedSorter::SetSortCriterion ( DICOMSortCriterion::ConstPointer  criterion)

Define the sorting criterion (which holds seconardy criteria)

Definition at line 287 of file mitkDICOMTagBasedSorter.cpp.

void mitk::DICOMTagBasedSorter::SetStrictSorting ( bool  strict)

Whether or not groups should be checked for consecutive tag values.

When this flag is set (default in constructor=off), the sorter will not only sort in a way that the values of a configured tag are ascending BUT in addition the sorter will enforce a constant numerical distance between values.

Having this flag is useful for handling of series with missing slices, e.g. Instance Numbers 1 2 3 5 6 7 8. With the flag set to true, the sorter would split this group into two, because the initial distance of 1 is not kept between Instance Numbers 3 and 5.

A special case of this behavior can be configured by SetExpectDistanceOne(). When this additional flag is set to true, the sorter will expect distance 1 exactly. This can help if the second slice is missing already. Without this additional flag, we would "learn" about a wrong distance of 2 (or similar) and then sort completely wrong.

Definition at line 216 of file mitkDICOMTagBasedSorter.cpp.

void mitk::DICOMTagBasedSorter::Sort ( )
overridevirtual

Actually sort as described in the Detailed Description.

Implements mitk::DICOMDatasetSorter.

Definition at line 301 of file mitkDICOMTagBasedSorter.cpp.

mitk::DICOMTagBasedSorter::GroupIDToListType & mitk::DICOMTagBasedSorter::SortGroups ( GroupIDToListType groups)
protected

Implements the sorting step. Relatively simple implementation thanks to std::sort and a parameterization via DICOMSortCriterion.

Definition at line 375 of file mitkDICOMTagBasedSorter.cpp.

References MITK_DEBUG.

mitk::DICOMTagBasedSorter::GroupIDToListType mitk::DICOMTagBasedSorter::SplitInputGroups ( )
protected

Implements the "distiguishing tags". To sort datasets into different groups, a long string will be built for each dataset. The string concatenates all tags and their respective values. Datasets that match in all values will end up with the same string.

Definition at line 350 of file mitkDICOMTagBasedSorter.cpp.

References mitk::DICOMDatasetAccess::GetFilenameIfAvailable(), and MITK_DEBUG.

Member Data Documentation

DICOMTagList mitk::DICOMTagBasedSorter::m_DistinguishingTags
protected

Definition at line 180 of file mitkDICOMTagBasedSorter.h.

Referenced by operator=().

bool mitk::DICOMTagBasedSorter::m_ExpectDistanceOne
protected

Definition at line 187 of file mitkDICOMTagBasedSorter.h.

Referenced by operator=().

DICOMSortCriterion::ConstPointer mitk::DICOMTagBasedSorter::m_SortCriterion
protected
bool mitk::DICOMTagBasedSorter::m_StrictSorting
protected

Definition at line 186 of file mitkDICOMTagBasedSorter.h.

Referenced by operator=().

TagValueProcessorMap mitk::DICOMTagBasedSorter::m_TagValueProcessor
protected

Definition at line 182 of file mitkDICOMTagBasedSorter.h.

Referenced by DICOMTagBasedSorter(), and operator=().


The documentation for this class was generated from the following files: