ratio = 100 step_size = 2 peak_processes=1 get_params=False doprune = False #mask, _ = getmask(os.path.dirname(input_diff_file), subject, masktype, verbose) #check_dif_ratio(outpath, subject, strproperty, ratio) if os.path.exists(output_trk_file) and overwrite is False: print("The tract creation of subject " + subject + " is already done") if verbose: print('Running the ' + subject + ' file') diff_data, affine, vox_size, header, ref_info = extract_nii_info(input_diff_file, verbose) gtab = getgtab(os.path.dirname(input_diff_file), subject, bvec_orient) if np.size(np.shape(mask)) == 1: mask = mask[0] if np.size(np.shape(mask)) == 4: mask = mask[:, :, :, 0] print("Mask shape is " + str(np.shape(mask))) #if classifier == "FA": # outpathbmfa, mask = make_tensorfit(diff_data ,mask ,gtab ,affine ,subject ,outpath=diffpath ,verbose=verbose) print(verbose) if verbose: txt = ("The QCSA Tractmake is ready to launch for subject " + subject) print(txt)
affine=np.eye(4), verbose=verbose) affine_mat_path = os.path.join(path_transforms, f'{subj}_affine.txt') affine_mat_s = read_affine_txt(affine_mat_path) affine_mat = np.eye(4) affine_mat[:3, :3] = affine_mat_s #streamlines_postrigid, header_postrigid = unload_trk(trk_preprocess_postrigid) streamlines_postrigidaffine = transform_streamlines(streamlines_postrigid, np.linalg.inv(affine_mat)) if (not os.path.exists(trk_preprocess_postrigid_affine) or overwrite) and save_temp_files: save_trk_header(filepath=trk_preprocess_postrigid_affine, streamlines=streamlines_postrigidaffine, header=header, affine=np.eye(4), verbose=verbose) #streamlines_postrigidaffine, header_postrigidaffine = unload_trk(trk_preprocess_postrigid_affine) warp, affine, vox_size, header_warp, ref_info = extract_nii_info(runno_to_MDT) warp = warp[:,:,:,0,:] vox_size = tuple(np.linalg.eigvals(affine[:3,:3])) vox_size = vox_size[0] target_isocenter = np.diag(np.array([-vox_size, vox_size, vox_size, 1])) streamlines_post_warp = deform_streamlines( streamlines_postrigidaffine, deform_field=warp, stream_to_current_grid=target_isocenter, current_grid_to_world=np.eye(4), stream_to_ref_grid=target_isocenter, ref_grid_to_world=np.eye(4)) if (not os.path.exists(trk_MDT_space) or overwrite): save_trk_header(filepath=trk_MDT_space, streamlines=streamlines_post_warp, header=header, affine=np.eye(4), verbose=verbose) else:
def header_superpose_trk(target_path, origin_path, outpath=None): if not isinstance(origin_path, str): origin_trk = origin_path else: origin_trk = load_trk(origin_path, 'same') target_data, target_affine, vox_size, target_header, target_ref_info = extract_nii_info( target_path) if outpath is None: if isinstance(origin_path, str): warnings.warn("Will copy over old trkfile, if this what you want?") permission = input("enter yes or y if you are ok with this") if permission.lower() == "yes" or permission.lower() == "y": outpath = origin_trk else: raise Exception("Will not copy over old trk file") else: raise Exception("Need to specify a output path of some kind") trk_header = origin_trk.space_attributes trk_affine = origin_trk._affine trkstreamlines = origin_trk.streamlines if np.any(trk_header[1][0:3] != np.shape(target_data)[0:3]): raise TypeError( 'Size of the originating matrix are difference, recalculation not implemented' ) if np.any(trk_affine != target_affine): test = 3 if test == 1: trk_header = list(trk_header) trk_header[0] = target_affine trk_header = tuple(trk_header) myheader = create_tractogram_header(outpath, *trk_header) trk_sl = lambda: (s for s in trkstreamlines) save_trk_heavy_duty(outpath, streamlines=trk_sl, affine=target_affine, header=myheader) elif test == 2: transform_matrix = ( np.inverse(np.transpose(trk_affine) * trk_affine) * np.transpose(trk_affine)) * target_affine from dipy.tracking.streamline import transform_streamlines myheader = create_tractogram_header(outpath, *trk_header) new_streamlines = transform_streamlines(trkstreamlines, transform_matrix) trk_sl = lambda: (s for s in new_streamlines) save_trk_heavy_duty(outpath, streamlines=trkstreamlines, affine=trk_affine, header=myheader) elif test == 3: myheader = create_tractogram_header(outpath, *target_ref_info) trk_sl = lambda: (s for s in trkstreamlines) save_trk_heavy_duty(outpath, streamlines=trk_sl, affine=target_affine, header=myheader) else: print("No need to change affine, bring to new path") if isinstance(origin_path, str): copyfile(origin_path, outpath) else: myheader = create_tractogram_header(outpath, *trk_header) save_trk_heavy_duty(outpath, streamlines=trkstreamlines, affine=target_affine, header=myheader)