def main(in_dir, out_dir): logger.info("Searching %s, writing to %s" % (out_dir, in_dir)) def key_fx(dcm): return "%s-%s-%s" % (dcm.StudyDate, dcm.StudyID, dcm.SeriesNumber) def handler_factory(dcm, manager): exam_key = "%s-%s" % (dcm.StudyDate, dcm.StudyID) target_dir = os.path.join(out_dir, exam_key, str(dcm.SeriesNumber)) logger.info("Computed target_dir: %s" % target_dir) try: os.makedirs(target_dir) except: pass return SortingDicomHandler(target_dir, TIMEOUT, key_fx(dcm), manager) mgr = handler.ThreadedDicomManager(TIMEOUT, key_fx, handler_factory) for root, dirs, files in os.walk(in_dir): for f in files: pathname = os.path.join(root, f) logger.debug("reading %s" % pathname) try: d = file_dicom.read_file(pathname) mgr.handle_dicom(d) except: logger.warn("Could not handle %s" % pathname)
""" logger.debug("%s - handling dicom" % (self)) def __str__(self): return "%s" % (self.name) if __name__ == '__main__': # Easy testing test! import sys import glob import file_dicom logging.basicConfig() logger.setLevel(logging.DEBUG) timeout = int(sys.argv[1]) in_dir = sys.argv[2] def key_fx(dcm): return "%s-%s-%s" % (dcm.StudyDate, dcm.StudyID, dcm.SeriesNumber) def handler_factory(example_dicom, manager): name = key_fx(example_dicom) return DicomSeriesHandler(timeout, name, manager) mgr = ThreadedDicomManager(timeout, key_fx, handler_factory) for f in glob.iglob("%s/*" % (in_dir)): dcm = file_dicom.read_file(f) mgr.handle_dicom(dcm) mgr.wait_for_handlers()