UNPKG

qiprofile

Version:

Quantitative Imaging Profile ( QiPr) web application

69 lines (62 loc) 2.62 kB
define ['angular', 'sprintf', 'file'], (ng, sprintf) -> xnat = ng.module 'qiprofile.xnat', ['qiprofile.file'] xnat.factory 'XNAT', ['File', (File) -> # The image store location relative to the web app root. # This is a symbolic link to the image store root directory # on the server. IMAGE_STORE_ROOT = '/data' # @param project the project name # @returns the image store project directory projectLocation = (project) -> "#{ IMAGE_STORE_ROOT }/#{ project }/arc001" # If the image sequence is a scan, then this method # returns the image sequence. Otherwise, this method # returns the scan from which the image sequence is # derived. # # @returns the image sequence scan scanFor = (imageSequence) -> if imageSequence._cls is 'Scan' imageSequence else if imageSequence.scan? imageSequence.scan else throw new TypeError("Cannot infer the #{ imageSequence.title }" + " parent scan") # @param image the REST TimeSeries or Volume object # @returns the image file path relative to the web app root location = (image) -> # The image parent is either a scan or registration image # sequence. resource = image.resource imageSequence = image.imageSequence scan = scanFor(imageSequence) session = imageSequence.session subject = session.subject collection = subject.collection project = subject.project # The XNAT project directory. projectDir = projectLocation(project) # The scan subdirectory. scanDir = "SCANS/#{ scan.number }" # The zero-padded subject label number suffix, e.g. "003". subjectNumberSuffix = sprintf.sprintf("%03d", subject.number) # The subject label, e.g. "Breast003". subjectLabel = "#{ collection }#{ subjectNumberSuffix }" # The zero-padded session label number suffix, e.g. "01". sessionNumberSuffix = sprintf.sprintf("%02d", session.number) # The XNAT experiment label, e.g. "Breast003_Session02". expLabel = "#{ subjectLabel }_Session#{ sessionNumberSuffix }" # Return the formatted image file path. "#{ projectDir }/#{ expLabel }/#{ scanDir }/#{ resource }/#{ image.name }" # Loads the image file content. # # @param image the image object # @returns a promise which resolves to the loaded image file # content load: (image) -> # The image file path. path = location(image) # Read the file into an ArrayBuffer. File.readBinary(path) ]