예제 #1
0
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)
예제 #2
0
파일: handler.py 프로젝트: njvack/scansave
        """
        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()