ami-cjs.js
Version:
<p align="center"> <img src="https://cloud.githubusercontent.com/assets/214063/23213764/78ade038-f90c-11e6-8208-4fcade5f3832.png" width="60%"> </p>
163 lines (137 loc) • 3.67 kB
JavaScript
/** * Imports ***/
import ModelsBase from '../models/models.base';
/**
* Series object.
*
* @module models/series
*/
export default class ModelsSeries extends ModelsBase {
constructor() {
super();
this._concatenationUID = -1;
this._seriesInstanceUID = -1;
this._seriesNumber = -1;
this._modality = 'Modality not set';
this._dimensionIndexSequence = [];
// it is used in the loader in case a dicom/nifti contains multiple frames
// should be updated after merge or renamed
this._numberOfFrames = 0;
this._numberOfChannels = 1;
// SEGMENTATION STUFF
this._segmentationType = null;
this._segmentationSegments = [];
// STACK
this._stack = [];
}
/**
* Validate a series.
*
* Requirements:
* - mergeSeries method
* - _seriesInstanceUID
* - _numberOfFrames
* - _numberOfChannels
* _ _stack
*
* @param {ModelsSeries} model - Model to be validated as series.
*
* @returns {boolean} True if series is valid. False if not.
*
* @override
*/
validate(model) {
if (!(super.validate(model) &&
typeof model.mergeSeries === 'function' &&
model.hasOwnProperty('_seriesInstanceUID') &&
model.hasOwnProperty('_numberOfFrames') &&
model.hasOwnProperty('_numberOfChannels') &&
model.hasOwnProperty('_stack') &&
typeof model._stack !== 'undefined' &&
Array === model._stack.constructor)) {
return false;
}
return true;
}
/**
* Merge current series with provided series.
* 2 series can ONLY be merge if they have the same SeriesInstanceUID.
*
* Also merges the stacks inside a series.
*
* @param {ModelsSeries} series - Series to be merged against current series.
*
* @returns {boolean} True if series could be merge. False if not.
*
* @override
*/
merge(series) {
if(!this.validate(series)) {
return false;
}
if (this._seriesInstanceUID === series.seriesInstanceUID) {
return this.mergeModels(this._stack, series.stack);
} else {
return false;
}
}
/**
* Merge current series with provided array of series.
* 2 series can ONLY be merge if they have the same SeriesInstanceUID.
*
* Also merges the stacks inside a series.
*
* @param {Array.<ModelsSeries>} target - Series to be merged against current series.
*
* @returns {Array.<ModelsSeries>} Array of series properly merged.
*/
mergeSeries(target) {
let seriesContainer = [this];
this.mergeModels(seriesContainer, target);
return seriesContainer;
}
/**
* Setters/Getters
*/
set seriesInstanceUID(seriesInstanceUID) {
this._seriesInstanceUID = seriesInstanceUID;
}
get seriesInstanceUID() {
return this._seriesInstanceUID;
}
set numberOfFrames(numberOfFrames) {
this._numberOfFrames = numberOfFrames;
}
get numberOfFrames() {
return this._numberOfFrames;
}
set numberOfChannels(numberOfChannels) {
this._numberOfChannels = numberOfChannels;
}
get numberOfChannels() {
return this._numberOfChannels;
}
set stack(stack) {
this._stack = stack;
}
get stack() {
return this._stack;
}
set modality(modality) {
this._modality = modality;
}
get modality() {
return this._modality;
}
set segmentationType(segmentationType) {
this._segmentationType = segmentationType;
}
get segmentationType() {
return this._segmentationType;
}
set segmentationSegments(segmentationSegments) {
this._segmentationSegments = segmentationSegments;
}
get segmentationSegments() {
return this._segmentationSegments;
}
}