Exemplo n.º 1
0
def main():

    usage = "usage: %prog [options] interval.bed"
    parser = argparse.ArgumentParser(description='make reference vcf records based on non-variant interval bed file and pedfile')
    parser.add_argument('bed', metavar='bed', type=str, help='interval.bed')
    parser.add_argument("-ped", metavar='pedfile', type=str, help="file.ped")
    parser.add_argument("-twobitfile", metavar='tbf', type=str, help="file.2bit")

    args=parser.parse_args()

    samples=[]

    pedfh=open(args.ped)
    bedfh=open(args.bed)
    tbf=bx.seq.twobit.TwoBitFile( open( args.twobitfile ) )

    for line in pedfh:
        samples.append( line.split('\t')[1] )



    print "##fileformat=VCFv4.1"
    print "##INFO=<ID=NS,Number=1,Type=Integer,Description=\"Number of Samples With Data\">"
    print "##FORMAT=<ID=GT,Number=1,Type=String,Description=\"Genotype\">"
    print "\t".join(["#CHROM",  "POS" ,"ID", "REF", "ALT", "QUAL", "FILTER",  "INFO","FORMAT"]+samples)

    for (chrom,start,end) in yield_bedcoordinate(bedfh):
        for pos in range(start+1,end+1):
            sequence=tbf[chrom][pos-1:pos]
            vrec=VcfRecord(chrom,str(pos), '.', sequence,info="NS=8")
            genotypelist=[ VcfGenotype("GT","0/0") for z in range(len(samples))  ]
            vrec.addGenotypeList(genotypelist)
            print vrec.toStringwithGenotypes()
def main():

    """ This program adds non-reference positions to a VCF file with variant positions.
        It does this by the following. Given a bed file of non-variant intervals and a 2bit file of the reference genome,
        it retrieves the refernce alllele, and prints out the VCF data line with the ref/ref genotypes. Then 
        it prints a single line from the segregating VCF file, and then start the loop again.
        It assumes that the input vcf is position sorted.
        
        To generate the non-segrgating bed interval file, run the following program from bx-python:
        bed_subtract_basewise.py   reference_genome.bed  segregating.sites.bed
        bed_subtract_basewise.py   ~/software/Pgmsnp/PythonNotebook/simref.1.bed  Simulation1.segregating.bed """

    usage = "usage: %prog [options] file.vcf"
    parser = OptionParser(usage)
    parser.add_option("--bed", type="string", dest="bed", help="bed file with non-variant intervals")
    parser.add_option("--tbf", type="string", dest="tbf", help="2bit file of reference genome", default='/Users/amit/data/MySimulations/Simulation1/Reference/simref.1.2bit')
    
    (options, args)=parser.parse_args()

    try:
        sys.stderr.write("opening twobitfile...\n")
        twobit=bx.seq.twobit.TwoBitFile( open( options.tbf ) )
    except:
        sys.stderr.write("unable to open twobit file!\n")

    segregatingVcf=args[0]
    bedfh=open(options.bed,'r')

    vcfh=open(segregatingVcf,'r')
    vcfobj=VcfFile(segregatingVcf)
    vcfobj.parseMetaAndHeaderLines(vcfh)
    header=vcfobj.returnHeader()
    formatstring="GT"
    print header
    for (chrom,start,end) in yield_bedcoordinate(bedfh):
        start=int(start)
        end=int(end)
        for i in range(start,end):
            begin=i
            end=i+1
            refseq=twobit[chrom][begin:end]
            vrec=VcfRecord(chrom,str(end),'.',refseq,'.','.','.','NS=3')

            vrec.addGenotype( VcfGenotype(formatstring,'0/0') )
            vrec.addGenotype( VcfGenotype(formatstring,'0/0') )
            vrec.addGenotype( VcfGenotype(formatstring,'0/0') )
            print vrec.toStringwithGenotypes()
        vcf_gen=vcfobj.yieldVcfRecordwithGenotypes(vcfh)
        print vcf_gen.next().toStringwithGenotypes()