def main_saveandclose(event): global segmentation, main_last_action, inspect_last_action global metastasis, OoI, patch, volume, volume_vis, max_mID, DIMmetastases, metastases, removed_metastases, main_n_added segmentation['evaluation']['last_inspection'] = datetime.datetime.now().strftime("%Y-%m-%d %H:%M") segmentation['evaluation']['last_editor'] = NameOfAnnotator segmentation['metastases'] = metastases segmentation['dim_metastases'] = DIMmetastases segmentation['removed_metastases'] = removed_metastases segmentation['max_mID'] = max_mID if(segmentation['evaluation']['completed']): try: segs_outstanding.pop(segs_outstanding.index(segmentation['patch_id'])) except: pass # this will happen if we overwrite an previously completed patch segs_completed.append(segmentation['patch_id']) filehandling.psave(path_segs + 'segmentation_patch_' + str(patch['id']),segmentation) update_sigcap(signalcap_default) metastasis = None OoI = None patch = None segmentation = None volume = None volume_vis = None max_mID = None metastases = None DIMmetastases = None removed_metastases = None main_n_added = None main_last_action = '' inspect_last_action = '' inspect_update_plot() inspect_update_title() main_update_plot() main_update_title() print('Saved all changes to segmentation file.')
def save_to_file(event): filename = 'reviewed_via_GUI_by_' + NAME_OF_ANNOTATOR.replace( ' ', '_') + '_on_the_' + DATE_OF_TODAY + '.pickledump' filepath_with_filename = DATAPATH + '/mice_metadata/' + mouse + '/' + filename filehandling.psave(filepath_with_filename, TP_candidates) print() print('----------------------------------------------------') print('All decisions saved to file ', filepath_with_filename) print('----------------------------------------------------')
##!!!!!!! Adjust whether you only want to cut patches from CoreOfBody <------ TumorRegion = filehandling.pload(path_region + 'region') remaining_patches = [] for p, patch in enumerate(region['patches']): if (TumorRegion['patches'][p]['locationgroup'] == 'Core' or TumorRegion['patches'][p]['locationgroup'] == 'Boundary'): # <-- ADJUST AS NECESSARY! if (os.path.isfile(localfolder + 'patchvolume_' + str(patch['id']) + '.nii') == False and file_format == 'Nifti'): remaining_patches.append(patch) elif (os.path.isfile(localfolder + 'patchvolume_' + str(patch['id']) + '.tif') == False and file_format == 'TIFF'): remaining_patches.append(patch) filehandling.psave( syncfolder + 'region', region) # saving initial region file (will be updated later on) print('Patches initialized, now segmenting volume') #%% Function definition def save_patch(patch): bb = patch['boundingbox'] patch['volume'] = np.zeros((bb[0], bb[1], bb[2]), 'uint' + str(bitdepth)) flist = sorted(os.listdir(sourcefolder + region['dataset']['channelname'])) print('Patch ' + str(patch['id']) + ' was taken by ' + multiprocessing.current_process().name) for z in range(0, bb[2]): file = flist[patch['offset'][2] + z] image = cv2.imread(sourcefolder + region['dataset']['channelname'] +
segmentation_ambig_mets['dataset'] = whole_scan_metadata['dataset'] segmentation_ambig_mets['ambiguous_metastases'] = [] global_id = len(mets_of_all_patches) # = 488 for patch in whole_scan_metadata['patches']: patch_seg = p_leo.load_segmentation('F15', patch['id'], load_partial=False) if (len(patch_seg['ambiguous_metastases']) > 0): print("Adding ambig_mets of patch #" + str(patch['id'])) localpointlist = [] for ambig_metastasis in patch_seg['ambiguous_metastases']: ambig_metastasis['global_id'] = global_id ambig_metastasis['patch_id'] = patch['id'] segmentation_ambig_mets['ambiguous_metastases'].append( ambig_metastasis) global_id += 1 filehandling.psave(DATAPATH + 'segmentation_ambig_mets', segmentation_ambig_mets) print('Segmentations_ambig_mets merged & saved.') #%% Step 2) For each metastasis, add all relevant meta information for m, ambig_metastasis in enumerate( segmentation_ambig_mets['ambiguous_metastases'] ): # double loop as this will be needed for upcoming computations print('Adding information for ambig_metastasis #' + str(ambig_metastasis['global_id'])) # add global location information to metastasis segmentation_ambig_mets['ambiguous_metastases'][m]['location'] = {} p_offset = np.asarray( whole_scan_metadata['patches'][ambig_metastasis['patch_id']]['offset']) segmentation_ambig_mets['ambiguous_metastases'][m]['location'][ 'offset'] = (p_offset + ambig_metastasis['offset']).tolist()
main_w_UC = Button(main_wa_UC, "I'm not sure\nwhat this is") main_w_UC.label.set_fontsize(buttontext_size) main_w_UC.on_clicked(mark_as_UC) # button: save all main_wp_SA = [0.03 + 0.65, 0.9, 0.10, 0.08] main_wa_SA = plt.axes(main_wp_SA) main_w_SA = Button(main_wa_SA, 'Save all\ndecisions') main_w_SA.label.set_fontsize(buttontext_size) main_w_SA.on_clicked(save_to_file) next_candidate() plt.show(block=True) #%% ''' TP_candidates = TP_candidates[:-1] filename = 'reviewed_via_GUI_by_' + NAME_OF_ANNOTATOR.replace(' ', '_') + '_on_the_' + DATE_OF_TODAY + '.pickledump' filepath_with_filename = DATAPATH + '/mice_metadata/' + mouse + '/' + filename filehandling.psave(filepath_with_filename, TP_candidates) print() print('----------------------------------------------------') print('All decisions saved to file ', filepath_with_filename) print('----------------------------------------------------') DECISIONS = TP_candidates number_of_TP_decisions = len(dataconversions.filter_dicts(DECISIONS,'evaluation-reviewed_via_GUI','true positive')) number_of_FP_decisions = len(dataconversions.filter_dicts(DECISIONS,'evaluation-reviewed_via_GUI','false positive')) number_of_UC_decisions = len(dataconversions.filter_dicts(DECISIONS,'evaluation-reviewed_via_GUI','unclear')) number_of_filenotfounds = len(dataconversions.filter_dicts(DECISIONS,'evaluation-reviewed_via_GUI','could not load image files')) print('Number of true positive decisions: ', number_of_TP_decisions)
'/reviewed_via_GUI.pickledump') for decision in decisions: SAMPLECARD = {} SAMPLECARD['sample_id'] = global_count SAMPLECARD['mouse'] = mouse SAMPLECARD['patch_id'] = decision['patch_id'] SAMPLECARD['met_id'] = decision['id'] try: SAMPLECARD['label'] = decision['evaluation']['reviewed_via_GUI'] if not (SAMPLECARD['label'] == 'true positive' or SAMPLECARD['label'] == 'false positive'): raise Exception( 'Should not be added to list because it is neither TP nor FP' ) except: continue LIST_OF_SAMPLECARDS.append(SAMPLECARD) global_count += 1 if SAMPLECARD['label'] == 'true positive': TP_count += 1 elif SAMPLECARD['label'] == 'false positive': FP_count += 1 elif SAMPLECARD['label'] == 'unclear': unclear_count += 1 else: no_file_count += 1 filehandling.psave( DATAPATH + '/mice_metadata/' + 'list_of_samplecards.pickledump', LIST_OF_SAMPLECARDS)
if(len(patch_seg['metastases']) > 0): print("Adding metastases of patch #" + str(patch['id'])) localpointlist = [] for metastasis in patch_seg['metastases']: metastasis['global_id'] = global_id metastasis['patch_id'] = patch['id'] segmentation['metastases'].append(metastasis) localpointlist += metastasis['points'] global_id += 1 localvolume, offset, bb = dataconversions.points2volume(localpointlist, offset=[0,0,0], bb=region['partitioning']['patch_size']) offset = patch['offset'] - region['partitioning']['cropping_offset'] canvas[offset[0]:offset[0]+patch['boundingbox'][0], offset[1]:offset[1]+patch['boundingbox'][1], offset[2]:offset[2]+patch['boundingbox'][2]] = localvolume.astype(np.uint8) filehandling.psave(pathData + 'segmentation', segmentation) print('Segmentations merged & saved.') print('Creating global projections...') canvas = canvas[0:region['partitioning']['cropping_boundingbox'][0], 0:region['partitioning']['cropping_boundingbox'][1], 0:region['partitioning']['cropping_boundingbox'][2]] projections = {} projections['y'] = np.max(canvas,0).astype(np.bool) projections['x'] = np.max(canvas,1).astype(np.bool) projections['z'] = np.max(canvas,2).astype(np.bool) filehandling.psave(pathData + 'segmentationprojections', projections) del canvas print('Segmentation projections created & saved.')