def format_out(groups, amp_num, fa_amp_file_name, session_dir): '''Format output''' records = FastaFormatParser.parse(open(os.path.join(session_dir, fa_amp_file_name))) seq_dict = {} for record in records: id = record['id'].split()[0] desc = record['desc'] seq = record['seq'] seq = chilli.print_seq(seq, 80) fa_seq = '>%s %s%s%s%s' % (id, desc, os.linesep, seq, os.linesep) seq_dict[id] = fa_seq group_list = [] for group_sn, group in enumerate(groups): seq_list = [seq_dict[amp_id] for amp_id, strand in group] file_name = write_amplicons(session_dir, seq_list) file_name = os.path.join(session_dir, file_name) if len(group) < 2: t_coffee_result = file_name else: t_coffee_result = run_t_coffee(file_name) t_coffee_result = os.path.basename(t_coffee_result) group_list.append((group_sn+1, ', '.join(['%s (%s)' % (amp_id, strand) for amp_id, strand in group]), t_coffee_result)) return group_list
def check_infile(options): '''Check and return Oligos''' err_or_degenerate = SeqCheck.fasta_format_check(options.infile) if err_or_degenerate in ['yes', 'no']: global degenerate degenerate = err_or_degenerate else: print2stderr(err_or_degenerate) options.infile.seek(0) if degenerate == 'no': oligos = FastaFormatParser.parse(options.infile) else: oligos = DegenerateSeqConvetor.convert(FastaFormatParser.parse(options.infile)) options.infile.close() return oligos
def check_infile(options): '''Check and return Oligos''' err_or_degenerate = SeqCheck.fasta_format_check(options.infile) if err_or_degenerate in ['yes', 'no']: global degenerate degenerate = err_or_degenerate else: print2stderr(err_or_degenerate) options.infile.seek(0) if degenerate == 'no': oligos = FastaFormatParser.parse(options.infile) else: oligos = DegenerateSeqConvetor.convert( FastaFormatParser.parse(options.infile)) options.infile.close() return oligos
def analysis_hairpin(infile, mv, dv, oligo, dntp, align_mode): '''Analysis dimer''' records = FastaFormatParser.parse(open(infile)) dimer_list = [] for i in range(len(records)): record_i = records[i] id_i = record_i['id'] seq_i = record_i['seq'] delta_g, tm, align = run_ntthal(seq_i, seq_i, mv=mv, dv=dv, d=oligo, n=dntp, align_mode=align_mode) if tm >= 0: dimer_list.append([id_i, seq_i, tm, delta_g, align]) dimer_list.sort(key=itemgetter(2), reverse=True) return dimer_list
def get_mid_seq(mid_seq_id_list, options, session_dir, db): '''Get the amp sequence using twoBitToFa from Blat suite''' mid_seq_list = [] if len(mid_seq_id_list) == 0: return mid_seq_list tmp_name = '%s.mid_seq_id_list.txt.tmp' % (os.path.basename(db)) mid_seq_id_list_file = os.path.join(session_dir, tmp_name) fh = open(mid_seq_id_list_file, 'w') fh.write(os.linesep.join(mid_seq_id_list)) fh.close() tmp_name = '%s.twoBitToFa_output.txt.tmp' % (os.path.basename(db)) outfile = os.path.join(session_dir, tmp_name) twoBitDB = db + '.2bit' cmd = '%s%stwoBitToFa -seqList=%s %s %s' % ( bin_path, os.sep, mid_seq_id_list_file, twoBitDB, outfile) try: out, err = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate() except: msg = 'Error: twoBitToFa running error.' print msg print2stderr(msg) if err: print err print2stderr(err) try: fh = open(outfile) except: msg = 'Error: twoBitToFa running error: no output file produced.' print msg print2stderr(msg) records = FastaFormatParser.parse(fh) mid_seq_list = [] for record in records: mid_seq_list.append(record['seq'].lower()) fh.close() return mid_seq_list
def main(): '''Main''' options = get_opt() try: fh = open(options.infile) except: chilli.print2stderr('Error: can not open file: %s' % (options.infile)) records = FFP.parse(fh) result_fasta_array = convert(records) out = format2fasta(result_fasta_array) if options.outfile == sys.stdout: print(out) else: fo = open(options.outfile, 'w') fo.write(out) fo.close()
def extract_by_twoBitToFa(id_pos_range_list, options, session_dir, db): '''Get the amp sequence using twoBitToFa from Blat suite''' seq_list = [] if len(id_pos_range_list) == 0: return seq_list tmp_name = '%s.id_pos_range_list.txt.tmp' % (os.path.basename(db)) id_pos_range_list_file = os.path.join(session_dir, tmp_name) fh = open(id_pos_range_list_file, 'w') fh.write(os.linesep.join(id_pos_range_list)) fh.close() tmp_name = '%s.twoBitToFa_output.txt.tmp' % (os.path.basename(db)) outfile = os.path.join(session_dir, tmp_name) twoBitDB = db + '.2bit' cmd = 'MFEprimer_%s_%s_twoBitToFa -seqList=%s %s %s' % (platform.system( ), get_bit(), id_pos_range_list_file, twoBitDB, outfile) try: out, err = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate() except: msg = 'Error: twoBitToFa running error.' print2stderr(msg) if err: print2stderr(err) try: fh = open(outfile) except: msg = 'Error: twoBitToFa running error: no output file produced.' print2stderr(msg) records = FastaFormatParser.parse(fh) seq_list = [] for record in records: seq_list.append(record['seq'].lower()) fh.close() return seq_list
def get_mid_seq(mid_seq_id_list, options, session_dir, db): '''Get the amp sequence using twoBitToFa from Blat suite''' mid_seq_list = [] if len(mid_seq_id_list) == 0: return mid_seq_list tmp_name = '%s.mid_seq_id_list.txt.tmp' % (os.path.basename(db)) mid_seq_id_list_file = os.path.join(session_dir, tmp_name) fh = open(mid_seq_id_list_file, 'w') fh.write(os.linesep.join(mid_seq_id_list)) fh.close() tmp_name = '%s.twoBitToFa_output.txt.tmp' % (os.path.basename(db)) outfile = os.path.join(session_dir, tmp_name) twoBitDB = db + '.2bit' cmd = '%s%stwoBitToFa -seqList=%s %s %s' % (bin_path, os.sep, mid_seq_id_list_file, twoBitDB, outfile) try: out, err = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate() except: msg = 'Error: twoBitToFa running error.' print msg print2stderr(msg) if err: print err print2stderr(err) try: fh = open(outfile) except: msg = 'Error: twoBitToFa running error: no output file produced.' print msg print2stderr(msg) records = FastaFormatParser.parse(fh) mid_seq_list = [] for record in records: mid_seq_list.append(record['seq'].lower()) fh.close() return mid_seq_list