Mercurial > repos > jeremie > pindel_test
changeset 0:544c5266fc0f draft
Uploaded
author | jeremie |
---|---|
date | Wed, 02 Jul 2014 04:39:54 -0400 |
parents | |
children | 3ce285e7c6da |
files | pindel.py |
diffstat | 1 files changed, 144 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pindel.py Wed Jul 02 04:39:54 2014 -0400 @@ -0,0 +1,144 @@ + +import argparse, optparse, os, shutil, subprocess, sys, tempfile, time, shlex + +parser = argparse.ArgumentParser(description='') +parser.add_argument('-r', dest='input_reference', required=True, help='the reference file') +parser.add_argument('-b', dest='input_bam', required=True, help='the bam file') +parser.add_argument('-s', dest='insert_size', type=int, default='500', required=True, help='the insert size') +parser.add_argument('-n', dest='sampleTag', default='sample', required=False, help='the sample tag') +parser.add_argument('-o', dest='output_vcf', help='the output vcf', required=True) +parser.add_argument('--name', dest='name', default='defaults') +parser.add_argument('--number_of_threads', dest='number_of_threads', type=int, default='1') +parser.add_argument('--window_size', dest='window_size', type=int, default='5') +parser.add_argument('--sequencing_error_rate', dest='sequencing_error_rate', type=float, default='0.01') +parser.add_argument('--sensitivity', dest='sensitivity', default='0.95', type=float) +parser.add_argument('--report_long_insertions', dest='report_long_insertions', action='store_true', default=False) +parser.add_argument('--report_duplications', dest='report_duplications', action='store_true', default=False) +parser.add_argument('--report_inversions', dest='report_inversions', action='store_true', default=False) +parser.add_argument('--report_breakpoints', dest='report_breakpoints', action='store_true', default=False) + +tmp_dir = tempfile.mkdtemp() +pindel_dir=tmp_dir+"/pindel" +errorFile = tmp_dir+"/errorLog" + + +def execute( cmd, output="" ): + try: + err = open(tmp_dir+"/errorLog", 'a') + if output != "": + out = open(output, 'w') + else: + out = subprocess.PIPE + process = subprocess.Popen( args=shlex.split(cmd), stdout=out, stderr=err ) + process.wait() + err.close() + if out != subprocess.PIPE: + out.close() + except Exception, e: + sys.stderr.write("problem doing : %s\n" %(cmd)) + sys.stderr.write( '%s\n\n' % str(e) ) + + +def index (args): + cmd = "samtools index %s" % (args.input_bam) + # print( "commande = "+cmd ) + # os.system(cmd) + execute(cmd) + + cmd = "samtools faidx %s" % (args.input_reference) + # print( "commande = "+cmd ) + # os.system(cmd) + execute(cmd) + + +def config( args ): + # print("config") + config = tmp_dir+"/pindel_config" + # cmd = 'echo %s\t%s\t%s > %s' % (bam, size, name, config) + # print("commande = "+cmd) + # os.system(cmd) + fil = open(config, 'w') + fil.write("%s\t%s\t%s" % (args.input_bam, args.insert_size, args.name) ) + fil.close() + return config + + +# def pindel( reference, config, output ): +# print("pindel") +# cmd="pindel -f %s -i %s -o %s" % (reference, config, output) +# print("commande = "+cmd) +# os.system(cmd) + +# os.system("rm %s" % (output)) +# if not os.path.exists(output): +# os.makedirs(output) +# os.system("mv %s_* %s" %(output, output) ) + + +def pindel( reference, config, temp, args ): + cmd = "pindel -f %s -i %s -o %s " % (reference, config, pindel_dir) + cmd += "--number_of_threads %d --window_size %d --sequencing_error_rate %f --sensitivity %f" % (args.number_of_threads, args.window_size, args.sequencing_error_rate, args.sensitivity) + if args.report_long_insertions: + cmd += ' --report_long_insertions ' + if args.report_duplications: + cmd += ' --report_duplications ' + if args.report_inversions: + cmd += ' --report_inversions ' + if args.report_breakpoints: + cmd += ' --report_breakpoints ' + print("commande = "+cmd) + execute( cmd ) + + + + + +def move( avant, apres ): + if os.path.exists(avant): + execute("mv %s %s" %(avant, apres)) + + +def pindel2vcf( args ): + date = str(time.strftime('%d/%m/%y',time.localtime())) + name = "test" + cmd = "pindel2vcf -P %s -r %s -R %s -d %s" % (pindel_dir, args.input_reference, name, date ) + print ("commande = " + cmd) + execute(cmd) + if os.path.exists(pindel_dir+".vcf"): + execute("cp %s %s" %(pindel_dir+".vcf", args.output_vcf)) + + +def __main__(): + + args = parser.parse_args() + + # try: + # cmd = 'pindel' + # cmd += ' -i1 %s -i2 %s -o %s ' % (args.input1, args.input2, args.output1) + # except: + # sys.stdout.write( 'problem args : %s' % (cmd) ) + # try: + # os.system(cmd) + # except: + # sys.stdout.write( 'problem cmd' ) + # pipeline(args.reference, args.bam, args.output_raw, args.output_vcf, size, name, args) + + reference = args.input_reference + bam = args.input_bam + temp = args.output_vcf+"_temp/temp" + output_vcf = args.output_vcf + + try: + index( args ) + conf = config( args ) + + pindel( reference, conf, temp, args ) + pindel2vcf(args) + + + finally: + if os.path.exists( tmp_dir ): + shutil.rmtree( tmp_dir ) + +if __name__=="__main__": + __main__()