def test_write(self): with tempfile.TemporaryDirectory() as tempdir: outbase = os.path.join(tempdir, 'trashme') scidata.write(self.ds, self.ds.data, outbase=outbase, filetype='png') assert len(glob.glob(outbase + '*')) >= 1
def test004_get_size(self): with tempfile.TemporaryDirectory() as tempdir: outbase = os.path.join(tempdir, 'trashme') scidata.write(self.ds, self.ds.data, outbase=outbase, filetype='montage') outfile = os.path.join(tempdir, os.listdir(tempdir)[0]) ok_(scidata.medimg.montage.get_info(outfile)) # gets made?
def test005_get_tile(self): with tempfile.TemporaryDirectory() as tempdir: outbase = os.path.join(tempdir, 'trashme') scidata.write(self.ds, self.ds.data, outbase=outbase, filetype='montage') outfile = os.path.join(tempdir, os.listdir(tempdir)[0]) ok_(scidata.medimg.montage.get_tile(outfile, 0, 0, 0)) # all montage have 0, 0, 0
def test003_write_pyrdb(self): with tempfile.TemporaryDirectory() as tempdir: outbase = os.path.join(tempdir, 'trashme') ok_( scidata.write(self.ds, self.ds.data, outbase=outbase, filetype='montage', mtype='sqlite'))
def test002_write_dir(self): """directory jpeg montage""" with tempfile.TemporaryDirectory() as tempdir: outbase = os.path.join(tempdir, 'trashme') ok_( scidata.write(self.ds, self.ds.data, outbase=outbase, filetype='montage', mtype='dir'))
def test_empty_data(self): eq_(scidata.write(self.ds, None, filetype='nifti', outbase='trashme'), [])
def test_nifti_write(self): with tempfile.TemporaryDirectory() as tempdir: outbase = os.path.join(tempdir, 'trashme') scidata.write(self.ds, self.ds.data, filetype='nifti', outbase=outbase) print glob.glob(outbase + '*') assert (len(glob.glob(outbase + '*')) >= 1)
def process(self): log.info('reconstructing and concatenating') outfiles = [] first_tr = None with tempfile.TemporaryDirectory(dir=None) as temp_dirpath: for f in self.inputs: fpath = os.path.abspath(f) dcm_ds = scidata.parse(fpath, filetype='dicom', load_data=True, ignore_json=True) if not first_tr: first_tr = dcm_ds.tr # save info to name this nifti label = '%s_%s' % (dcm_ds.exam_no, dcm_ds.series_no) # GLU: label = '%s' % (dcm_ds.protocol_name) intermediate = os.path.join(temp_dirpath, '_%s' % label) # save info to name the final output if not self.outbase: self.outbase = os.path.join(label + '_multicoil.nii.gz') result = scidata.write(dcm_ds, dcm_ds.data, intermediate, filetype='nifti', voxel_order=self.voxel_order) log.debug('reconstructed nifti: %s' % result) # maintain a list of intermediate files outfiles += result first_nii_header = None first_qto_xyz = None # to be able to check if any is saved at all. seq = [] # create a sequence from the intermediate files # resulting sequence items should have consistent dimensions log.debug('combinging niftis: %s' % str(outfiles)) for f in outfiles: nii = dcmstack.dcmmeta.NiftiWrapper(nibabel.load(f), make_empty=True) # store the header from the first outfile if first_nii_header is None: log.debug('storing first input nifti header') first_nii_header = nii.nii_img.get_header() if first_qto_xyz is None: # is array set? log.debug('storing first input affine') first_qto_xyz = nii.nii_img.get_affine() # build up the sequence of nifti wrappers if len(nii.nii_img.get_shape()) == 4: seq += [nii_wrp for nii_wrp in nii.split()] else: seq += [nii] # combine the sequence of nifti wrappers, raises error if shapes not consistent nii_merge = dcmstack.dcmmeta.NiftiWrapper.from_sequence(seq) nii_merge.nii_img.update_header() # update the underlying nifti header nii_header = nii_merge.nii_img.get_header() # reference to underlying nifti header # adjust the new header nii_header['descrip'] = first_nii_header['descrip'] data = nii_merge.nii_img.get_data() if np.iscomplexobj(data): clip_vals = np.percentile(np.abs(data), (10.0, 99.5)) else: clip_vals = np.percentile(data, (10.0, 99.5)) nii_header.structarr['cal_min'] = clip_vals[0] nii_header.structarr['cal_max'] = clip_vals[1] nii_header['pixdim'][4] = first_tr if os.path.exists(self.outbase): raise ProcessorError('output file %s already exists. not overwriting. bailing.', log_level=logging.ERROR) else: nii_merge.to_filename(self.outbase) if os.path.exists(self.outbase): log.info('generated %s' % self.outbase) else: raise ProcessorError('output file %s does not exist?' % self.outbase, log_level=logging.ERROR) return [self.outbase]
def test003_write_pyrdb(self): with tempfile.TemporaryDirectory() as tempdir: outbase = os.path.join(tempdir, 'trashme') ok_(scidata.write(self.ds, self.ds.data, outbase=outbase, filetype='montage', mtype='sqlite'))
def test002_write_dir(self): """directory jpeg montage""" with tempfile.TemporaryDirectory() as tempdir: outbase = os.path.join(tempdir, 'trashme') ok_(scidata.write(self.ds, self.ds.data, outbase=outbase, filetype='montage', mtype='dir'))