Beispiel #1
0
def main():
	parser = argparse.ArgumentParser(description="Reconstruct 3D coordinates from normalized intrachromosomal Hi-C BED files.")
	parser.add_argument("path", help="path to intrachromosomal Hi-C BED file")
	parser.add_argument("--classical", action="store_true", help="use classical MDS (default: metric MDS)")
	parser.add_argument("--full", action="store_true", help="use full MDS (default: partitioned MDS)")
	parser.add_argument("-l", type=int, help="low resolution/high resolution", default=10)
	parser.add_argument("-p", type=float, default=0.1, help="domain size parameter: larger value means fewer structures created (for partitioned MDS only)")
	parser.add_argument("-m", type=float, default=0.05, help="minimum domain size parameter: prevents structures from being too small (for partitioned MDS only)")
	parser.add_argument("-o", help="path to output file")
	parser.add_argument("-r", default=32000000, help="maximum RAM to use (in kb)")
	parser.add_argument("-n", default=3, help="number of threads")
	parser.add_argument("-a", type=float, default=4, help="alpha factor for converting contact frequencies to physical distances")
	parser.add_argument("-a2", type=float, default=2.5, help="short-range alpha factor for converting contact frequencies to physical distances")
	args = parser.parse_args()

	if args.full:	#not partitioned
		structure = fullMDS(args.path, args.classical, args.a, args.n)

	else:	#partitioned
		params = (args.p, args.m, args.r, args.n, args.a, args.l, args.a2)
		names = ("Domain size parameter", "Minimum domain size", "Maximum memory", "Number of threads", "Alpha", "Resolution ratio", "Short-range, alpha")
		intervals = ((0, 1), (0, 1), (0, None), (0, None), (1, None), (1, None), (1, None))
		if not tools.args_are_valid(params, names, intervals):
			sys.exit(1)

		structure = partitionedMDS(args.path, params)
	
	if args.o:
		structure.write(args.o)
	else:
		prefix = args.path.split(".bed")[0]
		structure.write(prefix + "_structure.tsv")
Beispiel #2
0
def main():
	parser = argparse.ArgumentParser(description="Reconstruct 3D coordinates from normalized interchromosomal Hi-C BED files.")
	parser.add_argument("inter_prefix", help="prefix of interchromosomal Hi-C BED file")
	parser.add_argument("intra_prefix", help="prefix of intrachromosomal Hi-C BED file")
	parser.add_argument("inter_res", type=int, help="resolution of interchromosomal BED files (bp)")
	parser.add_argument("intra_res", type=int, help="resolution of intrachromosomal BED files (bp)")
	parser.add_argument("-c", action="append", default=[], help="Names of chromosomes to use, e.g. 1 (default: all human chromosomes other than Y)")
	parser.add_argument("-l", type=int, help="resolution of low-res intrachromosomal files (bp) (for partitioned MDS only)")
	parser.add_argument("-p", type=float, default=0.1, help="domain size parameter: larger value means fewer clusters created (for partitioned MDS only)")
	parser.add_argument("-m", type=float, default=0.05, help="minimum domain size parameter: prevents clusters from being too small (for partitioned MDS only)")
	parser.add_argument("-o", help="prefix of output file")
	parser.add_argument("-r", default=32000000, help="maximum RAM to use (in kb)")
	parser.add_argument("-n", default=3, help="Number of threads")
	parser.add_argument("-a", type=float, default=4, help="alpha factor for converting contact frequencies to physical distances")
	args = parser.parse_args()

	if len(args.c) == 0:
		chrom_names = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, "X"]
	else:
		chrom_names = args.c

	params = (args.p, args.m, args.r, args.n, args.a)
	names = ("Domain size parameter", "Minimum domain size", "Maximum memory", "Number of threads", "Alpha")
	intervals = ((0,1), (0,1), (0, None), (0, None), (1, None))
	if not tools.args_are_valid(params, names, intervals):
		sys.exit(0)

	clusters = interMDS(chrom_names, args.inter_prefix, args.intra_prefix, args.inter_res, args.intra_res, args.l, params)

	if args.o is not None:
		for cluster in clusters:
			cluster.write("{}_{}_{}_cluster.tsv".format(args.o, cluster.chrom.name, tools.get_res_string(cluster.chrom.res)))
Beispiel #3
0
def main():
    parser = argparse.ArgumentParser(
        description=
        "Reconstruct 3D coordinates from normalized intrachromosomal Hi-C BED files."
    )
    parser.add_argument("path", help="path to intrachromosomal Hi-C BED file")
    parser.add_argument("--classical",
                        action="store_true",
                        help="use classical MDS (default: metric MDS)")
    parser.add_argument(
        "-l", help="path to low-resolution intrachromosomal Hi-C BED file")
    parser.add_argument(
        "-p",
        type=float,
        default=0.1,
        help=
        "domain size parameter: larger value means fewer clusters created (for partitioned MDS only)"
    )
    parser.add_argument(
        "-m",
        type=float,
        default=0.05,
        help=
        "minimum domain size parameter: prevents clusters from being too small (for partitioned MDS only)"
    )
    parser.add_argument("-o", help="path to output file")
    parser.add_argument("-r",
                        default=32000000,
                        help="maximum RAM to use (in kb)")
    parser.add_argument("-n", default=3, help="number of threads")
    parser.add_argument(
        "-a",
        type=float,
        default=4,
        help=
        "alpha factor for converting contact frequencies to physical distances"
    )
    args = parser.parse_args()

    if args.l is None:  #not partitioned
        cluster = fullMDS(args.path, args.classical, args.a)

    else:  #partitioned
        params = (args.p, args.m, args.r, args.n, args.a)
        names = ("Domain size parameter", "Minimum domain size",
                 "Maximum memory", "Number of threads", "Alpha")
        intervals = ((0, 1), (0, 1), (0, None), (0, None), (1, None))
        if not tools.args_are_valid(params, names, intervals):
            sys.exit(0)

        cluster = partitionedMDS(args.path, args.l, params)

    if args.o is not None:
        cluster.write(args.o)
Beispiel #4
0
def main():
    parser = argparse.ArgumentParser(
        description=
        "Jointly reconstruct 3D coordinates from two normalized intrachromosomal Hi-C BED files."
    )
    parser.add_argument("path1",
                        help="path to first intrachromosomal Hi-C BED file")
    parser.add_argument("path2",
                        help="path to second intrachromosomal Hi-C BED file")
    parser.add_argument("--partitioned",
                        action="store_true",
                        help="use partitioned MDS (default: full MDS)")
    parser.add_argument("-l",
                        type=int,
                        help="low resolution/high resolution",
                        default=10)
    parser.add_argument("-o", help="output file prefix")
    parser.add_argument("-r",
                        default=32000000,
                        help="maximum RAM to use (in kb)")
    parser.add_argument("-n", type=int, default=3, help="number of threads")
    parser.add_argument(
        "-a",
        type=float,
        default=4,
        help=
        "alpha factor for converting contact frequencies to physical distances"
    )
    parser.add_argument("-P",
                        type=float,
                        default=0.05,
                        help="joint MDS penalty")
    parser.add_argument("-m",
                        type=int,
                        default=0,
                        help="midpoint (usually centromere) for partitioning")
    parser.add_argument("-N", type=int, default=2, help="number of partitions")
    parser.add_argument("-w",
                        type=float,
                        default=0.05,
                        help="weight of distance decay prior")
    args = parser.parse_args()

    if args.partitioned:
        #TODO: cleanup
        params = (args.m, args.N, args.r, args.n, args.a, args.l, args.P,
                  args.w)
        names = ("Midpoint", "Number of partitions", "Maximum memory",
                 "Number of threads", "Alpha", "Resolution ratio", "Penalty",
                 "Weight")
        intervals = ((None, None), (1, None), (0, None), (0, None), (1, None),
                     (1, None), (0, None), (0, 1))
        if not tools.args_are_valid(params, names, intervals):
            sys.exit(0)

        structure1, structure2 = partitionedMDS(args.path1, args.path2, params)

    else:
        structure1, structure2 = fullMDS(args.path1, args.path2, args.a,
                                         args.P, args.n, args.w)

    if args.o:
        prefix = args.o
    else:
        prefix = ""

    #print("structure 1")
    #for i in range(len(structure1.points)):
    #	if structure1.points[i] != 0:
    #		print(structure1.points[i].relative_index)
    #print("structure 2")
    #for i in range(len(structure2.points)):
    #	if structure2.points[i] != 0:
    #		print(structure2.points[i].relative_index)

    prefix1 = os.path.splitext(os.path.basename(args.path1))[0]
    structure1.write("{}{}_structure.tsv".format(prefix, prefix1))
    prefix2 = os.path.splitext(os.path.basename(args.path2))[0]
    structure2.write("{}{}_structure.tsv".format(prefix, prefix2))

    coords1 = np.array(structure1.getCoords())
    coords2 = np.array(structure2.getCoords())
    dists = [
        la.calcDistance(coord1, coord2)
        for coord1, coord2 in zip(coords1, coords2)
    ]
    np.savetxt("{}{}_{}_relocalization.bed".format(prefix, prefix1, prefix2),
               dists)

    print("Fractional compartment change: ")
    print(
        calculate_compartment_fraction(structure1, structure2, args.path1,
                                       args.path2))
Beispiel #5
0
def main():
    parser = argparse.ArgumentParser(
        description=
        "Reconstruct 3D coordinates from normalized intrachromosomal Hi-C BED files."
    )
    parser.add_argument("path", help="path to intrachromosomal Hi-C BED file")
    parser.add_argument("--classical",
                        action="store_true",
                        help="use classical MDS (default: metric MDS)")
    parser.add_argument(
        "-l", help="path to low-resolution intrachromosomal Hi-C BED file")
    parser.add_argument(
        "-p",
        type=float,
        help=
        "domain size parameter: larger value means fewer clusters created (for partitioned MDS only)"
    )
    parser.add_argument(
        "-m",
        type=float,
        help=
        "minimum domain size parameter: prevents clusters from being too small (for partitioned MDS only)"
    )
    parser.add_argument("-o", help="path to output file")
    parser.add_argument("-r", help="maximum RAM to use (in kb)")
    parser.add_argument("-n", help="Number of threads")
    args = parser.parse_args()

    if args.l is None:  #not partitioned
        cluster = fullMDS(args.path, args.classical)
    else:  #partitioned
        if args.p is None:
            p = 0.1
        else:
            p = args.p
        if args.m is None:
            m = 0.05
        else:
            m = args.m

        if args.r is None:
            r = 32000000
        else:
            r = args.r

        if args.n is None:
            n = 3  #safe for standard 4-core desktop
        else:
            n = args.n

        params = (p, m, r, n)
        names = ("Domain size parameter", "Minimum domain size",
                 "Maximum memory", "Number of threads")
        intervals = ((0, 1), (0, 1), (0, None), (0, None))
        if not tools.args_are_valid(params, names, intervals):
            sys.exit(0)

        cluster = partitionedMDS(args.path, args.l, params)

    if args.o is not None:
        cluster.write(args.o)
Beispiel #6
0
def main():
    parser = argparse.ArgumentParser(
        description=
        "Reconstruct 3D coordinates from normalized interchromosomal Hi-C BED files."
    )
    parser.add_argument("prefix", help="prefix of Hi-C BED files")
    parser.add_argument("inter_res",
                        type=int,
                        help="resolution of interchromosomal BED files (bp)")
    parser.add_argument("intra_res",
                        type=int,
                        help="resolution of intrachromosomal BED files (bp)")
    parser.add_argument("--partitioned",
                        action="store_true",
                        help="use partitioned MDS (default: full MDS)")
    parser.add_argument(
        "-c",
        action="append",
        default=[],
        help=
        "names of chromosomes to use, e.g. 1 (default: all human chromosomes other than Y)"
    )
    parser.add_argument("-C", type=int, help="number of autosomes")
    parser.add_argument("-l",
                        type=int,
                        help="low resolution/high resolution",
                        default=10)
    parser.add_argument(
        "-p",
        type=float,
        default=0.1,
        help=
        "domain size parameter: larger value means fewer structures created (for partitioned MDS only)"
    )
    parser.add_argument(
        "-m",
        type=float,
        default=0.05,
        help=
        "minimum domain size parameter: prevents structures from being too small (for partitioned MDS only)"
    )
    parser.add_argument("-o", help="prefix of output file")
    parser.add_argument("-r",
                        default=32000000,
                        help="maximum RAM to use (in kb)")
    parser.add_argument("-n", type=int, default=3, help="Number of threads")
    parser.add_argument(
        "-a",
        type=float,
        default=4,
        help=
        "alpha factor for converting contact frequencies to physical distances"
    )
    parser.add_argument(
        "-a2",
        type=float,
        default=2.5,
        help=
        "short-range alpha factor for converting contact frequencies to physical distances"
    )
    parser.add_argument("-w",
                        type=float,
                        default=0.05,
                        help="weight of distance decay prior")
    args = parser.parse_args()

    if len(args.c) == 0:
        if args.C:
            chrom_names = range(1, args.C + 1)
        else:
            chrom_names = [
                1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
                19, 20, 21, 22, "X"
            ]
    else:
        chrom_names = args.c

    params = (args.p, args.m, args.r, args.n, args.a, args.l, args.a2, args.w)
    names = ("Domain size parameter", "Minimum domain size", "Maximum memory",
             "Number of threads", "Alpha", "Resolution ratio",
             "Short-range alpha", "Weight")
    intervals = ((0, 1), (0, 1), (0, None), (0, None), (1, None), (1, None),
                 (1, None), (None, 1))
    if not tools.args_are_valid(params, names, intervals):
        sys.exit(1)

    structures = interMDS(chrom_names, args.prefix, args.inter_res,
                          args.intra_res, args.partitioned, params)

    if args.o:
        for structure in structures:
            structure.write("{}_{}_{}_structure.tsv".format(
                args.o, structure.chrom.name.strip("chr"),
                tools.get_res_string(structure.chrom.res)))
    else:
        for structure in structures:
            structure.write("{}_{}_{}_structure.tsv".format(
                args.prefix, structure.chrom.name.strip("chr"),
                tools.get_res_string(structure.chrom.res)))