def save_roisubset(trkfile, roislist, roisexcel, labelmask): #loads trk file, list of rois, the full correspondance of structure => label and the label mask, and saves the # tracts traversing each region trkdata = load_trk(trkfile, 'same') trkdata.to_vox() if hasattr(trkdata, 'space_attribute'): header = trkdata.space_attribute elif hasattr(trkdata, 'space_attributes'): header = trkdata.space_attributes trkstreamlines = trkdata.streamlines import pandas as pd df = pd.read_excel(roisexcel, sheet_name='Sheet1') df['Structure'] = df['Structure'].str.lower() for rois in roislist: labelslist = [] for roi in rois: rslt_df = df.loc[df['Structure'] == roi.lower()] if rois[0].lower() == "wholebrain" or rois[0].lower() == "brain": labelslist = None else: labelslist = np.concatenate((labelslist, np.array(rslt_df.index2))) print(labelslist) if isempty(labelslist) and roi.lower() != "wholebrain" and roi.lower() != "brain": txt = "Warning: Unrecognized roi, will take whole brain as ROI. The roi specified was: " + roi print(txt) if isempty(labelslist): if labelmask is None: roimask = (fdwi_data[:, :, :, 0] > 0) else: roimask = np.where(labelmask == 0, False, True) else: if labelmask is None: raise ("File not found error: labels requested but labels file could not be found at "+dwipath+ " for subject " + subject) roimask = np.zeros(np.shape(labelmask),dtype=int) for label in labelslist: roimask = roimask + (labelmask == label) trkroipath = trkfile.replace(".trk", "_" + rois + ".trk") if not os.path.exists(trkroipath): affinetemp = np.eye(4) trkroistreamlines = target(trkstreamlines, affinetemp, roimask, include=True, strict="longstring") trkroistreamlines = Streamlines(trkroistreamlines) myheader = create_tractogram_header(trkroipath, *header) roi_sl = lambda: (s for s in trkroistreamlines) tract_save.save_trk_heavy_duty(trkroipath, streamlines=roi_sl, affine=header[0], header=myheader)
roistring = roistring #+ "_" #str_identifier = '_stepsize_' + str(stepsize) + saved_streamlines+ roistring str_identifier = '_stepsize_' + str(stepsize) + classifiertype + roistring + saved_streamlines labelslist=[] if targetrois and (targetrois[0]!="wholebrain" or len(targetrois) > 1): df = pd.read_excel(atlas_legends, sheet_name='Sheet1') df['Structure'] = df['Structure'].str.lower() for roi in targetrois: rslt_df = df.loc[df['Structure'] == roi.lower()] if roi.lower() == "wholebrain" or roi.lower() == "brain": labelslist=None else: labelslist=np.concatenate((labelslist, np.array(rslt_df.index))) print(labelslist) if isempty(labelslist) and roi.lower() != "wholebrain" and roi.lower() != "brain": txt = "Warning: Unrecognized roi, will take whole brain as ROI. The roi specified was: " + roi print(txt) bvec_orient=[1,2,-3] tall = time() tract_results = [] if verbose: txt=("Process running with % d max processes available on % d subjects with % d subjects in parallel each using % d processes" % (mp.cpu_count(), np.size(l), subject_processes, function_processes)) print(txt) send_mail(txt,subject="Main process start msg ")
def save_roisubset(streamlines, roislist, roisexcel, labelmask, stringstep, ratios, trkpath, subject, affine, header): #atlas_legends = BIGGUS_DISKUS + "/atlases/CHASSSYMM3AtlasLegends.xlsx" df = pd.read_excel(roisexcel, sheet_name='Sheet1') df['Structure'] = df['Structure'].str.lower() for rois in roislist: if len(rois)==1: roiname = "_" + rois[0] + "_" elif len(rois)>1: roiname="_" for roi in rois: roiname = roiname + roi[0:4] roiname = roiname + "_" labelslist=[]#fimbria for roi in rois: rslt_df = df.loc[df['Structure'] == roi.lower()] if roi.lower() == "wholebrain" or roi.lower() == "brain": labelslist=None else: labelslist=np.concatenate((labelslist,np.array(rslt_df.index2))) if isempty(labelslist) and roi.lower() != "wholebrain" and roi.lower() != "brain": txt = "Warning: Unrecognized roi, will take whole brain as ROI. The roi specified was: " + roi print(txt) #bvec_orient=[-2,1,3] if isempty(labelslist): roimask = np.where(labelmask == 0, False, True) else: if labelmask is None: raise ("Bad label data, could not define ROI for streams") roimask = np.zeros(np.shape(labelmask),dtype=int) for label in labelslist: roimask = roimask + (labelmask == label) if not isempty(labelslist): trkroipath = trkpath + '/' + subject + roiname + "_stepsize_" + stringstep + '.trk' if not os.path.exists(trkroipath): affinetemp=np.eye(4) trkstreamlines = target(streamlines, affinetemp, roimask, include=True, strict="longstring") trkstreamlines = Streamlines(trkstreamlines) myheader = create_tractogram_header(trkroipath, *header) roi_sl = lambda: (s for s in trkstreamlines) save_trk_heavy_duty(trkroipath, streamlines=roi_sl, affine=affine, header=myheader) else: trkdata = load_trk(trkroipath, 'same') trkdata.to_vox() if hasattr(trkdata, 'space_attribute'): header = trkdata.space_attribute elif hasattr(trkdata, 'space_attributes'): header = trkdata.space_attributes trkstreamlines = trkdata.streamlines for ratio in ratios: if ratio != 1: trkroiminipath = trkpath + '/' + subject + '_ratio_' + ratios + roiname + "_stepsize_" + stringstep + '.trk' if not os.path.exists(trkroiminipath): ministream = [] for idx, stream in enumerate(trkstreamlines): if (idx % ratio) == 0: ministream.append(stream) trkstreamlines = ministream myheader = create_tractogram_header(trkminipath, *header) ratioed_roi_sl_gen = lambda: (s for s in trkstreamlines) if allsave: save_trk_heavy_duty(trkroiminipath, streamlines=ratioed_roi_sl_gen, affine=affine, header=myheader) else: trkdata = load_trk(trkminipath, 'same') trkdata.to_vox() if hasattr(trkdata, 'space_attribute'): header = trkdata.space_attribute elif hasattr(trkdata, 'space_attributes'): header = trkdata.space_attributes trkstreamlines = trkdata.streamlines