def main(rabbit): import RabbitCommon as rc in_path = f'/scratch/rabbit_data/{rabbit}/rawDicoms/ExVivo*/*' out_path = f'/hdscratch/ucair/{rabbit}/mri/exvivo/volumes/raw/' files = sorted(glob.glob(in_path)) if not os.path.exists(out_path): os.makedirs(out_path) for cnt, dcm_file in enumerate(files): print(f'Processing {dcm_file} ... ', end='') out_name = dcm_file.split('/')[-1].split(' ')[-1] if os.path.exists(f'{out_path}{cnt:02d}_{out_name}.nii.gz'): print('done') continue vol = rc.LoadDICOM(dcm_file, 'cpu') io.SaveITKFile(vol, f'{out_path}{cnt:02d}_{out_name}.nii.gz') print('done') # Copy over some of the 'invivo' (day3) out_path = f'/hdscratch/ucair/{rabbit}/mri/invivo/volumes/raw/' in_path = f'/scratch/rabbit_data/{rabbit}/rawVolumes/Post*/*' files = sorted(glob.glob(in_path)) filt_files = [x for x in files if '3D_VIBE_0.5' in x] filt_files += [x for x in files if 't2' in x] filt_files += [x for x in files if 'Day3' in x] if not os.path.exists(out_path): os.makedirs(out_path) for f in filt_files: shutil.copy(f, f'{out_path}{f.split("/")[-1]}') # Copy over some of the day0 out_path = f'/hdscratch/ucair/{rabbit}/mri/day0/volumes/raw/' in_path = f'/scratch/rabbit_data/{rabbit}/rawVolumes/Ablation*/*' files = sorted(glob.glob(in_path)) filt_files = [x for x in files if '3D_VIBE_0.5' in x] filt_files += [x for x in files if 't2' in x] filt_files += [x for x in files if 'Day0' in x] if not os.path.exists(out_path): os.makedirs(out_path) for f in filt_files: shutil.copy(f, f'{out_path}{f.split("/")[-1]}')
def save_volume(vol, opt): import CAMP.Core as core import CAMP.FileIO as io # Bring the volume to the CPU vol = vol.to('cpu') out_path = f'{opt.hd_root}/{opt.rabbit}/blockface/{opt.block}/volumes/raw/' mhd_file = f'{out_path}/surface_volume.mhd' mhd_dict = read_mhd_header(mhd_file) data_files = f'predictions/IMG_%03d_prediction.raw 0 {vol.shape[0]} 1' mhd_dict['ElementDataFile'] = data_files mhd_dict['ElementNumberOfChannels'] = 1 out_path = f'{out_path}/predictions/' try: os.stat(out_path) except OSError: os.makedirs(out_path) origin = [float(x) for x in mhd_dict['Offset'].split(' ')][0:2] spacing = [float(x) for x in mhd_dict['ElementSpacing'].split(' ')][0:2] # Loop over the firs dimension for s in range(0, vol.shape[0]): v_slice = core.StructuredGrid( vol.shape[1:], tensor=vol[s, :, :].unsqueeze(0), spacing=spacing, origin=origin, device='cpu', dtype=torch.float32, channels=1 ) # Generate the name for the image out_name = f'{out_path}IMG_{s:03d}_prediction.mhd' io.SaveITKFile(v_slice, out_name) write_mhd_header(f'{out_path}../prediction_volume.mhd', mhd_dict)
} evalOpt = SimpleNamespace(**evalOpt) trainOpt = SimpleNamespace(**trainOpt) # train(trainOpt) block_list = sorted(glob.glob(f'{evalOpt.hd_root}{evalOpt.rabbit}/blockface/block*')) for block_path in block_list[1:]: block = block_path.split('/')[-1] print(f'{block} ... ') import CAMP.Core as core import CAMP.FileIO as io scat_vol = io.LoadITKFile(f'{block_path}/volumes/raw/scatter_volume.mhd', device='cuda') grad_scat = scat_vol.data[:, :-1, :, :].cpu() - scat_vol.data[:, 1:, :, :].cpu() grad_scat = (grad_scat - grad_scat.min()) / (grad_scat.max() - grad_scat.min()) grad_scat = torch.cat([grad_scat[:, 0, :, :].unsqueeze(1), grad_scat], dim=1) grad_scat = core.StructuredGrid( size=scat_vol.size, spacing=scat_vol.spacing, origin=scat_vol.origin, tensor=grad_scat[2].unsqueeze(0), device='cuda', channels=1 ) io.SaveITKFile(grad_scat, f'{block_path}/volumes/raw/scatter_gradient_volume.mhd') evalOpt.block = block eval(evalOpt) print(f'{block} ... done') print('All Done')