def test_load_deid(self): print("Case 1: Test loading deid directly") from deid.config import load_deid config = load_deid(self.deid) self.assertTrue('format' in config) print("Case 2: Loading from folder") config = load_deid(os.path.dirname(self.deid)) self.assertTrue('format' in config) print("Case 3: Testing error on non-existing load") with self.assertRaises(SystemExit) as cm: config = load_deid(self.tmpdir) self.assertEqual(cm.exception.code, 1)
def main(args, parser): # Global output folder output_folder = args.outfolder if output_folder is None: output_folder = tempfile.mkdtemp() # If a deid is given, check against format if args.deid is not None: params = load_deid(args.deid) if params["format"] != args.format: bot.error( "Format in deid (%s) doesn't match choice here (%s) exiting." % (params["format"], args.format)) # Get list of dicom files base = args.input if base is None: bot.info("No input folder specified, will use demo dicom-cookies.") base = get_dataset("dicom-cookies") basename = os.path.basename(base) dicom_files = list( get_files(base)) # todo : consider using generator functionality do_get = False do_put = False ids = None if args.action == "all": bot.info("GET and PUT identifiers from %s" % (basename)) do_get = True do_put = True elif args.action == "get": do_get = True bot.info("GET and PUT identifiers from %s" % (basename)) elif args.action == "put": bot.info("PUT identifiers from %s" % (basename)) do_put = True if args.ids is None: bot.exit( "To PUT without GET you must provide a json file with ids.") ids = args.ids # GET identifiers if do_get is True: ids = get_identifiers(dicom_files) if do_put is True: cleaned_files = replace_identifiers( dicom_files=dicom_files, ids=ids, deid=args.deid, overwrite=args.overwrite, output_folder=output_folder, ) bot.info("%s %s files at %s" % (len(cleaned_files), args.format, output_folder))
def main(args, parser): """inspect currently serves to inspect the header fields of a set of dicom files against a standard, and flag images that don't pass the different levels of criteria """ # If a deid is given, check against format deid = args.deid if deid is not None: params = load_deid(deid) if params["format"] != args.format: bot.error( "Format in deid (%s) doesn't match choice here (%s) exiting." % (params["format"], args.format) ) # Get list of dicom files base = args.folder if base is None: bot.info("No input folder specified, will use demo dicom-cookies.") base = get_dataset("dicom-cookies") dicom_files = list( get_files(base, pattern=args.pattern) ) # todo : consider using generator functionality result = has_burned_pixels(dicom_files, deid=deid) print("\nSUMMARY ================================\n") if result["clean"]: bot.custom( prefix="CLEAN", message="%s files" % len(result["clean"]), color="CYAN" ) if result["flagged"]: for group, files in result["flagged"].items(): bot.flag("%s %s files" % (group, len(files))) if args.save: folders = "-".join([os.path.basename(folder) for folder in base]) outfile = "pixel-flag-results-%s-%s.tsv" % ( folders, datetime.datetime.now().strftime("%y-%m-%d"), ) with open(outfile, "w") as filey: filey.writelines("dicom_file\tpixels_flagged\tflag_list\treason\n") for clean in result["clean"]: filey.writelines("%s\tCLEAN\t\t\n" % clean) for flagged, details in result["flagged"].items(): if details["flagged"] is True: for result in details["results"]: group = result["group"] reason = result["reason"] filey.writelines( "%s\tFLAGGED\t%s\t%s\n" % (flagged, group, reason) ) print("Result written to %s" % outfile)
def main(args, parser): '''inspect currently serves to inspect the header fields of a set of dicom files against a standard, and flag images that don't pass the different levels of criteria ''' # Global output folder #output_folder = args.outfolder #if output_folder is None: # output_folder = tempfile.mkdtemp() # If a deid is given, check against format deid = args.deid if deid is not None: params = load_deid(deid) if params['format'] != args.format: bot.error( "Format in deid (%s) doesn't match choice here (%s) exiting." % (params['format'], args.format)) # Get list of dicom files base = args.folder if base is None: bot.info("No input folder specified, will use demo dicom-cookies.") base = get_dataset('dicom-cookies') dicom_files = list(get_files( base, pattern=args.pattern)) # todo : consider using generator functionality result = has_burned_pixels(dicom_files, deid=deid) print('\nSUMMARY ================================\n') if len(result['clean']) > 0: bot.custom(prefix='CLEAN', message="%s files" % len(result['clean']), color="CYAN") if len(result['flagged']) > 0: for group, files in result['flagged'].items(): bot.flag("%s %s files" % (group, len(files))) if args.save is True: folders = '-'.join([os.path.basename(folder) for folder in base]) outfile = "pixel-flag-results-%s-%s.tsv" % ( folders, datetime.datetime.now().strftime('%y-%m-%d')) with open(outfile, 'w') as filey: filey.writelines('dicom_file\tpixels_flagged\tflag_list\treason\n') for clean in result['clean']: filey.writelines('%s\tCLEAN\t\t\n' % clean) for flagged, details in result['flagged'].items(): if details['flagged'] is True: for result in details['results']: group = result['group'] reason = result['reason'] filey.writelines('%s\tFLAGGED\t%s\t%s\n' % (flagged, group, reason)) print('Result written to %s' % outfile)
def test_load_deid(self): print("Case 1: Test loading deid directly") from deid.config import load_deid config = load_deid(self.deid) self.assertTrue("format" in config) print("Case 2: Loading from folder") config = load_deid(os.path.dirname(self.deid)) self.assertTrue("format" in config) print("Case 3: Testing error on non-existing load of file") with self.assertRaises(SystemExit) as cm: config = load_deid(os.path.join(self.tmpdir, "deid.doesnt-exist")) self.assertEqual(cm.exception.code, 1) print("Case 4: Testing load of default deid.") config = load_deid(self.tmpdir)
#** # Here you might save them in your special (IRB approvied) places # And then provide replacement anonymous ids to put back in the data # A cookie tumor example is below #** # Load your custom deid parameters (see deid folder under examples) from deid.utils import get_installdir from deid.config import load_deid import os path = os.path.abspath("%s/../examples/deid/" % get_installdir()) # If you are intereseted to see it, but you don't have to do this, # this happens internally deid = load_deid(path) # Let's add the fields that we specify to add in our deid, a source_id for SOPInstanceUID, # and an id for PatientID count = 0 updated_ids = dict() for image, fields in ids.items(): fields['id'] = 'cookiemonster' fields['source_id'] = "cookiemonster-image-%s" % (count) updated_ids[image] = fields count += 1 # Run again, provided the path to deid, and the updated ids cleaned_files = replace_identifiers(dicom_files=dicom_files, deid=path, ids=updated_ids)