qiprofile
Version:
Quantitative Imaging Profile ( QiPr) web application
70 lines (62 loc) • 2.47 kB
text/coffeescript
define ['angular', 'lodash', 'imageSequence'], (ng, _) ->
registration = ng.module 'qiprofile.registration', ['qiprofile.imagesequence']
registration.factory 'Registration', ['ImageSequence', (ImageSequence) ->
# Extends the given registration object as follows:
# * Adds the scan parent reference property
# * Adds the ImageSequence properties
# * Sets the registration number
# * Adds the title and session virtual properties
#
# @param registration the registration to extend
# @param scan the source scan
# @param number the one-based registration number within the scan
# @returns the extended registration object
extend: (registration, scan, number) ->
# Add the general image sequence properties.
ImageSequence.extend(registration)
# Add the parent scan reference.
registration.scan = scan
# Add the registration number.
registration.number = number
# Add the virtual properties.
Object.defineProperties registration,
# @returns the display title
title:
get: ->
"#{ @scan.title } Registration #{ @number }"
# Returns the <parent>/session path, where:
# * <parent> is the parent scan path
# * *registration* is the registration number
#
# @returns the registration path
path:
get: ->
"#{ @scan.path }/reg/#{ @number }"
# An ImageSequence present a uniform interface, which
# includes a bolus arrival index and session reference.
#
# @returns the registration scan session
session:
get: -> @scan.session
# @returns the registration scan bolus arrival
bolusArrivalIndex:
get: -> @scan.bolusArrivalIndex
# Return the extended object.
registration
# @param scan the Scan object to search
# @param number the registration number within the scan
# @returns the scan object
# @throws ReferenceError if the session does not have the scan
find: (scan, number) ->
# Match on the registration number.
match = (reg) -> reg.number is number
target = _.find(scan.registrations, match)
# If no such registration, then complain.
if not target?
throw new ReferenceError(
"#{ scan.title } does not have a registration with number" +
" #{ number }"
)
# Return the scan.
target
]