def test_run_mantel_correlogram_single_matrix(self):
     """Test running mantel correlogram on one dm."""
     exp = ('# A sample comment.\nDM\tDM\tNumber of entries\tNumber of '
     'permutations\tClass index\tNumber of distances\tMantel r statistic\t'
     'p-value\tp-value (Bonferroni corrected)\tTail type\n', [], 0)
     obs = run_mantel_correlogram([self.fp1], [self.dm1], self.num_perms,
             self.comment, self.alpha, sample_id_map=self.sample_id_map)
     self.assertEqual((self.remove_nums(obs[0]), obs[1], len(obs[2])), exp)
def main():
    option_parser, opts, args = parse_command_line_parameters(**script_info)

    # Create the output dir if it doesn't already exist.
    try:
        if not path.exists(opts.output_dir):
            create_dir(opts.output_dir)
    except:
        option_parser.error("Could not create or access output directory "
                            "specified with the -o option.")
    sample_id_map = None
    if opts.sample_id_map_fp:
        sample_id_map = dict([(k, v[0]) for k, v in fields_to_dict(
            open(opts.sample_id_map_fp, "U")).items()])
    input_dm_fps = opts.input_dms
    distmats = [parse_distmat(open(dm_fp, 'U')) for dm_fp in input_dm_fps]

    if opts.method == 'mantel':
        output_f = open(path.join(opts.output_dir, 'mantel_results.txt'), 'w')
        output_f.write(
            run_mantel_test('mantel',
                            input_dm_fps,
                            distmats,
                            opts.num_permutations,
                            opts.tail_type,
                            comment_mantel_pmantel,
                            sample_id_map=sample_id_map))
    elif opts.method == 'partial_mantel':
        output_f = open(
            path.join(opts.output_dir, 'partial_mantel_results.txt'), 'w')
        output_f.write(
            run_mantel_test('partial_mantel',
                            input_dm_fps,
                            distmats,
                            opts.num_permutations,
                            opts.tail_type,
                            comment_mantel_pmantel,
                            control_dm_fp=opts.control_dm,
                            control_dm=parse_distmat(open(
                                opts.control_dm, 'U')),
                            sample_id_map=sample_id_map))
    elif opts.method == 'mantel_corr':
        output_f = open(
            path.join(opts.output_dir, 'mantel_correlogram_results.txt'), 'w')
        result_str, correlogram_fps, correlograms = run_mantel_correlogram(
            input_dm_fps,
            distmats,
            opts.num_permutations,
            comment_corr,
            opts.alpha,
            sample_id_map=sample_id_map,
            variable_size_distance_classes=opts.variable_size_distance_classes)

        output_f.write(result_str)
        for corr_fp, corr in zip(correlogram_fps, correlograms):
            corr.savefig(path.join(opts.output_dir, corr_fp + opts.image_type),
                         format=opts.image_type)
    output_f.close()
 def test_run_mantel_correlogram_too_small(self):
     """Test running mantel correlogram on two incompatible dms."""
     exp = ('# A sample comment.\nDM\tDM\tNumber of entries\tNumber of '
     'permutations\tClass index\tNumber of distances\tMantel r statistic\t'
     'p-value\tp-value (Bonferroni corrected)\tTail type\nfoo.txt\tbaz.txt'
     '\t\tToo few samples\n', [], 0)
     obs = run_mantel_correlogram([self.fp1, self.fp3],
             [self.dm2, self.dm4], self.num_perms, self.comment, self.alpha)
     self.assertEqual((self.remove_nums(obs[0]), obs[1], len(obs[2])), exp)
 def test_run_mantel_correlogram_no_comment(self):
     """Test running mantel correlogram without supplying a comment."""
     exp = ('DM\tDM\tNumber of entries\tNumber of permutations\tClass index'
     '\tNumber of distances\tMantel r statistic\tp-value\tp-value '
     '(Bonferroni corrected)\tTail type\nfoo.txt\tbar.txt\t\t\t.\t\t-.\t.'
     '\t.\tless\n\t\t\t\t.\t\tNone\tNone\tNone\tNone\n\t\t\t\t.\t\tNone\t'
     'None\tNone\tNone\n', ['foo.txt_AND_bar.txt_mantel_correlogram.'], 1)
     obs = run_mantel_correlogram([self.fp1, self.fp2],
             [self.dm1, self.dm3], self.num_perms, None, self.alpha,
             sample_id_map=self.sample_id_map)
     self.assertEqual((self.remove_nums(obs[0]), obs[1], len(obs[2])), exp)
 def test_run_mantel_correlogram(self):
     """Test running mantel correlogram on two distmats."""
     exp = ('# A sample comment.\nDM\tDM\tNumber of entries\tNumber of '
     'permutations\tClass index\tNumber of distances\tMantel r statistic\t'
     'p-value\tp-value (Bonferroni corrected)\tTail type\nfoo.txt\tbar.txt'
     '\t\t\t.\t\t.\t.\t.\tgreater\n\t\t\t\t.\t\tNone\tNone\tNone\tNone\n\t'
     '\t\t\t.\t\tNone\tNone\tNone\tNone\n',
     ['foo.txt_AND_bar.txt_mantel_correlogram.'], 1)
     obs = run_mantel_correlogram([self.fp1, self.fp2],
             [self.dm1, self.dm2], self.num_perms, self.comment, self.alpha)
     self.assertEqual((self.remove_nums(obs[0]), obs[1], len(obs[2])), exp)
def main():
    option_parser, opts, args = parse_command_line_parameters(**script_info)

    # Create the output dir if it doesn't already exist.
    try:
        if not path.exists(opts.output_dir):
            create_dir(opts.output_dir)
    except:
        option_parser.error("Could not create or access output directory " "specified with the -o option.")
    sample_id_map = None
    if opts.sample_id_map_fp:
        sample_id_map = dict([(k, v[0]) for k, v in fields_to_dict(open(opts.sample_id_map_fp, "U")).items()])
    input_dm_fps = opts.input_dms
    distmats = [parse_distmat(open(dm_fp, "U")) for dm_fp in input_dm_fps]

    if opts.method == "mantel":
        output_f = open(path.join(opts.output_dir, "mantel_results.txt"), "w")
        output_f.write(
            run_mantel_test(
                "mantel",
                input_dm_fps,
                distmats,
                opts.num_permutations,
                opts.tail_type,
                comment_mantel_pmantel,
                sample_id_map=sample_id_map,
            )
        )
    elif opts.method == "partial_mantel":
        output_f = open(path.join(opts.output_dir, "partial_mantel_results.txt"), "w")
        output_f.write(
            run_mantel_test(
                "partial_mantel",
                input_dm_fps,
                distmats,
                opts.num_permutations,
                opts.tail_type,
                comment_mantel_pmantel,
                control_dm_fp=opts.control_dm,
                control_dm=parse_distmat(open(opts.control_dm, "U")),
                sample_id_map=sample_id_map,
            )
        )
    elif opts.method == "mantel_corr":
        output_f = open(path.join(opts.output_dir, "mantel_correlogram_results.txt"), "w")
        result_str, correlogram_fps, correlograms = run_mantel_correlogram(
            input_dm_fps, distmats, opts.num_permutations, comment_corr, opts.alpha, sample_id_map=sample_id_map
        )
        output_f.write(result_str)
        for corr_fp, corr in zip(correlogram_fps, correlograms):
            corr.savefig(path.join(opts.output_dir, corr_fp + opts.image_type), format=opts.image_type)
    output_f.close()
 def test_run_mantel_correlogram_sample_id_map(self):
     """Test running mantel correlogram on two dms that need IDs mapped."""
     exp = (
         "# A sample comment.\nDM\tDM\tNumber of entries\tNumber of "
         "permutations\tClass index\tNumber of distances\tMantel r "
         "statistic\tp-value\tp-value (Bonferroni corrected)\tTail type"
         "\nfoo.txt\tbar.txt\t\t\t.\t\t.\t.\t.\tgreater\n\t\t\t\t.\t\t"
         "None\tNone\tNone\tNone\n\t\t\t\t.\t\tNone\tNone\tNone\tNone\n",
         ["foo.txt_AND_bar.txt_mantel_correlogram."],
         1,
     )
     obs = run_mantel_correlogram(
         [self.fp1, self.fp2],
         [self.dm3, self.dm4],
         self.num_perms,
         self.comment,
         self.alpha,
         sample_id_map=self.sample_id_map,
     )
     self.assertEqual((self.remove_nums(obs[0]), obs[1], len(obs[2])), exp)
 def test_run_mantel_correlogram_multiple(self):
     """Test running mantel correlogram on three distmats."""
     exp = (
         "# A sample comment.\nDM\tDM\tNumber of entries\tNumber of "
         "permutations\tClass index\tNumber of distances\tMantel r statistic\t"
         "p-value\tp-value (Bonferroni corrected)\tTail type\nfoo.txt\tbar.txt"
         "\t\t\t.\t\t.\t.\t.\tgreater\n\t\t\t\t.\t\tNone\tNone\tNone\tNone\n\t"
         "\t\t\t.\t\tNone\tNone\tNone\tNone\nfoo.txt\tbaz.txt\t\t\t.\t\t-.\t.\t"
         ".\tless\n\t\t\t\t.\t\tNone\tNone\tNone\tNone\n\t\t\t\t.\t\tNone\tNone"
         "\tNone\tNone\nbar.txt\tbaz.txt\t\t\t.\t\t-.\t.\t.\tless\n\t\t\t\t.\t"
         "\tNone\tNone\tNone\tNone\n\t\t\t\t.\t\tNone\tNone\tNone\tNone\n",
         [
             "foo.txt_AND_bar.txt_mantel_correlogram.",
             "foo.txt_AND_baz.txt_mantel_correlogram.",
             "bar.txt_AND_baz.txt_mantel_correlogram.",
         ],
         3,
     )
     obs = run_mantel_correlogram(self.fps, self.distmats, self.num_perms, self.comment, self.alpha)
     self.assertEqual((self.remove_nums(obs[0]), obs[1], len(obs[2])), exp)