const _attrs = Symbol('attrs')
/**
* A segment.
*
* Describes an item of the Segment Sequence of a DICOM Segmentation instance.
*
* @class
* @memberof segment
*/
class Segment {
/**
* @param {Object} options - Options for construction of Segment
* @param {string} options.uid - Unique tracking identifier
* @param {number} options.number - Segment Number (one-based index value)
* @param {string} options.label - Segment Label
* @param {string} options.algorithmName - Segment Algorithm Name
* @param {Object} options.algorithmType - Segment Algorithm Type
* @param {Object} options.propertyCategory - Segmented Property Category Code
* @param {Object} options.propertyType - Segmented Property Type Code
* @param {string} options.studyInstanceUID - Study Instance UID of DICOM
* Segmentation instances
* @param {string} options.seriesInstanceUID - Series Instance UID of DICOM
* Segmentation instances
* @param {string[]} options.sopInstanceUIDs - SOP Instance UIDs of DICOM
* Segmentation instances
* @param {string|undefined} options.paletteColorLookupTableUID - Palette
* Color Lookup Table UID
*/
constructor ({
uid,
number,
label,
propertyCategory,
propertyType,
algorithmType,
algorithmName,
studyInstanceUID,
seriesInstanceUID,
sopInstanceUIDs,
paletteColorLookupTableUID
}) {
this[_attrs] = {}
if (uid === undefined) {
throw new Error('Unique Tracking Identifier is required.')
} else {
this[_attrs].uid = uid
}
if (number === undefined) {
throw new Error('Segment Number is required.')
}
this[_attrs].number = number
if (label === undefined) {
throw new Error('Segment Label is required.')
}
this[_attrs].label = label
if (propertyCategory === undefined) {
throw new Error('Segmented Property Category Code is required.')
}
this[_attrs].propertyCategory = propertyCategory
if (propertyType === undefined) {
throw new Error('Segmented Property Type Code is required.')
}
this[_attrs].propertyType = propertyType
if (algorithmName === undefined) {
throw new Error('Segment Algorithm Name is required.')
}
this[_attrs].algorithmType = algorithmType
if (algorithmType === undefined) {
throw new Error('Segment Algorithm Type is required.')
}
this[_attrs].algorithmName = algorithmName
if (studyInstanceUID === undefined) {
throw new Error('Study Instance UID is required.')
}
this[_attrs].studyInstanceUID = studyInstanceUID
if (seriesInstanceUID === undefined) {
throw new Error('Series Instance UID is required.')
}
this[_attrs].seriesInstanceUID = seriesInstanceUID
if (sopInstanceUIDs === undefined) {
throw new Error('SOP Instance UIDs are required.')
}
this[_attrs].sopInstanceUIDs = sopInstanceUIDs
this[_attrs].paletteColorLookupTableUID = paletteColorLookupTableUID
Object.freeze(this)
}
/**
* Unique Tracking Identifier
*
* @type string
*/
get uid () {
return this[_attrs].uid
}
/**
* Segment Number.
*
* @type number
*/
get number () {
return this[_attrs].number
}
/**
* Segment Label
*
* @type string
*/
get label () {
return this[_attrs].label
}
/**
* Segment Algorithm Name
*
* @type string
*/
get algorithmName () {
return this[_attrs].algorithmName
}
/**
* Segment Algorithm Type
*
* @type object
*/
get algorithmType () {
return this[_attrs].algorithmType
}
/**
* Segmented Property Category Code
*
* @type object
*/
get propertyCategory () {
return this[_attrs].propertyCategory
}
/**
* Segmented Property Type Code
*
* @type object
*/
get propertyType () {
return this[_attrs].propertyType
}
/**
* Study Instance UID of DICOM Segmentation instances.
*
* @type string
*/
get studyInstanceUID () {
return this[_attrs].studyInstanceUID
}
/**
* Series Instance UID of DICOM Segmentation instances.
*
* @type string
*/
get seriesInstanceUID () {
return this[_attrs].seriesInstanceUID
}
/**
* SOP Instance UIDs of DICOM Segmentation instances.
*
* @type string[]
*/
get sopInstanceUIDs () {
return this[_attrs].sopInstanceUIDs
}
/**
* Palette Color Lookup Table UID.
*
* @type string
*/
get paletteColorLookupTableUID () {
return this[_attrs].paletteColorLookupTableUID
}
}
export { Segment }