Exemple #1
0
def test_do_subject_files_exist_template_for_existing_files_exist():
    subjects_dir = os.path.join(TEST_DATA_DIR, 'empty_subjects')
    subjects_file = os.path.join(subjects_dir, 'subjects_empty.txt')
    subjects_list = nit.read_subjects_file(subjects_file)
    assert len(subjects_list) == 3
    missing = nit.do_subject_files_exist(subjects_list, subjects_dir, filename_template='${SUBJECT_ID}.txt')
    assert len(missing) == 0
Exemple #2
0
def test_do_subject_files_exist_raises_on_too_much_fileinfo():
    subjects_dir = TEST_DATA_DIR
    subjects_file = os.path.join(subjects_dir, 'subjects.txt')
    subjects_list = nit.read_subjects_file(subjects_file)
    assert len(subjects_list) == 5
    with pytest.raises(ValueError) as exc_info:
        missing = nit.do_subject_files_exist(subjects_list, subjects_dir, filename='not_there', filename_template='not_there')
    assert 'Exactly one of' in str(exc_info.value)
Exemple #3
0
def test_read_subjects_file_five_subjects():
    subjects_file = os.path.join(TEST_DATA_DIR, 'subjects.txt')
    subject_ids = nit.read_subjects_file(subjects_file)
    assert len(subject_ids) == 5
    assert 'subject1' in subject_ids
    assert 'subject2' in subject_ids
    assert 'subject3' in subject_ids
    assert 'subject4' in subject_ids
    assert 'subject5' in subject_ids
Exemple #4
0
def test_read_subjects_file_csv_format_tab_separated_with_header():
    subjects_file = os.path.join(TEST_DATA_DIR, 'subject_files_tab_separated', 'subjects_including_s6_tab_hdr.csv')
    subject_ids = nit.read_subjects_file(subjects_file, has_header_line=True, delimiter='\t')  # the name arg 'delimiter' should be passed on to csv.reader by the function. This is tested here.
    assert len(subject_ids) == 6
    assert 'subject1' in subject_ids
    assert 'subject2' in subject_ids
    assert 'subject3' in subject_ids
    assert 'subject4' in subject_ids
    assert 'subject5' in subject_ids
    assert 'subject6' in subject_ids
Exemple #5
0
def test_read_subjects_file_csv_format_comma_separated_no_header():
    subjects_file = os.path.join(TEST_DATA_DIR, 'subjects_including_s6.csv')
    subject_ids = nit.read_subjects_file(subjects_file)
    assert len(subject_ids) == 6
    assert 'subject1' in subject_ids
    assert 'subject2' in subject_ids
    assert 'subject3' in subject_ids
    assert 'subject4' in subject_ids
    assert 'subject5' in subject_ids
    assert 'subject6' in subject_ids
Exemple #6
0
def test_do_subject_files_exist_not_there():
    subjects_dir = TEST_DATA_DIR
    subjects_file = os.path.join(subjects_dir, 'subjects.txt')
    subjects_list = nit.read_subjects_file(subjects_file)
    assert len(subjects_list) == 5
    missing = nit.do_subject_files_exist(subjects_list, subjects_dir, filename='not_there')
    assert len(missing) == 5
    assert 'subject1' in missing
    assert 'subject2' in missing
    assert 'subject3' in missing
    assert 'subject4' in missing
    assert 'subject5' in missing
Exemple #7
0
def test_do_subject_files_exist_lh_area():
    expected_subjects_dir = TEST_DATA_DIR
    expected_fsaverage_surf_dir = os.path.join(TEST_DATA_DIR, 'fsaverage', 'surf')
    if not os.path.isdir(expected_fsaverage_surf_dir):
        pytest.skip("Test data missing: e.g., directory '%s' does not exist. You can get all test data by running './develop/get_test_data_all.bash' in the repo root." % expected_fsaverage_surf_dir)

    subjects_dir = TEST_DATA_DIR
    subjects_file = os.path.join(subjects_dir, 'subjects.txt')
    subjects_list = nit.read_subjects_file(subjects_file)
    assert len(subjects_list) == 5
    missing = nit.do_subject_files_exist(subjects_list, subjects_dir, filename='lh.area')
    assert len(missing) == 0
Exemple #8
0
def test_do_subject_files_exist_template_for_existing_files():
    subjects_dir = os.path.join(TEST_DATA_DIR, 'empty_subjects')
    subjects_file = os.path.join(subjects_dir, 'subjects_empty.txt')
    subjects_list = nit.read_subjects_file(subjects_file)
    assert len(subjects_list) == 3
    expected_missing_file1 = os.path.join(subjects_dir, 'empty1', 'surf', 'empty1_not_there.txt')
    expected_missing_file2 = os.path.join(subjects_dir, 'empty2', 'surf', 'empty2_not_there.txt')
    expected_missing_file3 = os.path.join(subjects_dir, 'empty3', 'surf', 'empty3_not_there.txt')
    missing = nit.do_subject_files_exist(subjects_list, subjects_dir, filename_template='${SUBJECT_ID}_not_there.txt')
    assert len(missing) == 3
    assert missing['empty1'] == expected_missing_file1
    assert missing['empty2'] == expected_missing_file2
    assert missing['empty3'] == expected_missing_file3
def brain_consistency():
    """
    Brain data consistency checks.

    Simple script to check brain data consistency.
    """

    # Parse command line arguments
    parser = argparse.ArgumentParser(
        description="Check brain data consistency.")
    parser.add_argument(
        "subjects_dir",
        help=
        "The directory that contains your subjects. Note: in most cases you can pass the environment variable SUBJECTS_DIR."
    )
    parser.add_argument(
        "subjects_file",
        help=
        "Text file containing all subjects that should be checked, one subject per line."
    )
    parser.add_argument(
        "-m",
        "--measures-native",
        help=
        "Which vertex-wise native space measure data to check (e.g., 'area' to check files 'surf/lh.area' and similar). Colon-separated string or 'None'. Defaults to 'area:volume:thickness'.",
        default="area:volume:thickness")
    parser.add_argument(
        "-s",
        "--measures-standard",
        help=
        "Which vertex-wise standard space measure data to check (e.g., 'area' to check files 'surf/lh.area.fwhmX.fsaverage.mgh' and similar). Colon-separated string or 'None'. Defaults to 'area:volume:thickness'.",
        default="area:volume:thickness")
    parser.add_argument(
        "-a",
        "--average-subject",
        help=
        "Name of the average subject (template) for standard space data (see '-s'). Defaults to 'fsaverage'.",
        default="fsaverage")
    parser.add_argument(
        "-f",
        "--fwhm-list",
        help=
        "The list of fwhm files to check for standard space data (see '-s'). Defaults to '0:5:10:15:20:25'.",
        default="0:5:10:15:20:25")
    parser.add_argument(
        "-r",
        "--report",
        help=
        "File name for the report in HTML format. If not given, no HTML report is written.",
        default=None)
    verb_group = parser.add_mutually_exclusive_group(required=False)
    verb_group.add_argument("-v",
                            "--verbose",
                            help="Increase output verbosity to INFO.",
                            action="store_true")
    verb_group.add_argument(
        "-w",
        "--verbosity",
        help=
        "Set verbosity level. One of 'WARN', 'INFO', or 'DEBUG'. Defaults to 'WARN'",
        default="WARN")
    args = parser.parse_args()

    log_level = logging.WARN  # Default

    if args.verbose:
        log_level = logging.INFO
    elif args.verbosity:
        if args.verbosity == 'INFO':
            log_level = logging.INFO
        elif args.verbosity == 'DEBUG':
            log_level = logging.DEBUG

    logging.basicConfig(level=log_level)

    logger.info("---Brain Data Consistency Checks---")
    logger.info("Using subjects_dir '%s' and subjects file '%s'." %
                (args.subjects_dir, args.subjects_file))

    native_measures = args.measures_native.split(":")
    if args.measures_native == "None":
        native_measures = []
    standard_measures = args.measures_standard.split(":")
    if args.measures_standard == "None":
        standard_measures = []
    standard_fwhm_list = args.fwhm_list.split(":")
    subjects_list = nit.read_subjects_file(args.subjects_file)

    logger.info("Handling %d subjects." % (len(subjects_list)))
    if len(native_measures):
        logger.info("Handling %d native space measures: %s" %
                    (len(native_measures), ", ".join(native_measures)))
    else:
        logger.info("Not handling any native space measures.")

    if len(standard_measures):
        logger.info(
            "Handling %d standard space measures using template subject '%s': %s"
            % (len(standard_measures), args.average_subject,
               ", ".join(standard_measures)))
        logger.info(
            "Handling standard space measures at %d fwhm settings: %s" %
            (len(standard_fwhm_list), ", ".join(standard_fwhm_list)))
    else:
        logger.info("Not handling any standard space measures.")

    bdc = brainqa.BrainDataConsistency(args.subjects_dir,
                                       subjects_list,
                                       log_level=log_level)
    bdc.average_subject = args.average_subject
    bdc.fwhm_list = standard_fwhm_list
    bdc.check_custom(native_measures, standard_measures)
    if args.report:
        bdc.save_html_report(args.report)

    sys.exit(0)
Exemple #10
0
def test_read_subjects_file_one_subject():
    subjects_file = os.path.join(TEST_DATA_DIR, 'subjects_only1.txt')
    subject_ids = nit.read_subjects_file(subjects_file)
    assert len(subject_ids) == 1
    assert 'subject1' in subject_ids