def RunCommand(self): """Run the BLAST search.""" self.fh_in, self.infile = tempfile.mkstemp() self.fh_out, self.outfile = tempfile.mkstemp() with open(self.infile, "w+") as f: f.write(">Name\n") f.write(self.command_data[0]) blast_program = self.command_data[1] database = self.command_data[2] # Check if user supplied additional options and extract them if self.command_data[3]: option = self.command_data[3] options = {} for x in range(0, len(option.split()) - 1, 2): options[option.split()[x]] = option.split()[x + 1] else: options = {} args, kwargs = ( blast_program, { "query": self.infile, "db": database, "out": self.outfile }, ) if blast_program.endswith("blastn"): blast_cmd = NcbiblastnCommandline(args, **kwargs) elif blast_program.endswith("blastp"): blast_cmd = NcbiblastpCommandline(args, **kwargs) elif blast_program.endswith("blastx"): blast_cmd = NcbiblastxCommandline(args, **kwargs) elif blast_program.endswith("tblastn"): blast_cmd = NcbitblastnCommandline(args, **kwargs) elif blast_program.endswith("tblastx"): blast_cmd = NcbitblastxCommandline(args, **kwargs) else: return if options: try: for key in options: blast_cmd.set_parameter(key, options[key]) except ValueError as e: messagebox.showerror("xbb tools", "Commandline error:\n\n" + str(e)) self.tid.destroy() return self.worker = BlastWorker(blast_cmd) self.worker.start() self.UpdateResults()
def RunCommand(self): self.fh_in, self.infile = tempfile.mkstemp() self.fh_out, self.outfile = tempfile.mkstemp() with open(self.infile, 'w+') as f: f.write('>Name\n') f.write(self.command_data[0]) blast_program = self.command_data[1] database = self.command_data[2] # Check if user supplied additional options and extract them if self.command_data[3]: option = self.command_data[3] options = {} for x in range(0, len(option.split()) - 1, 2): options[option.split()[x]] = option.split()[x + 1] else: options = {} args, kwargs = blast_program, { 'query': self.infile, 'db': database, 'out': self.outfile } if blast_program.endswith('blastn'): blast_cmd = NcbiblastnCommandline(args, **kwargs) elif blast_program.endswith('blastp'): blast_cmd = NcbiblastpCommandline(args, **kwargs) elif blast_program.endswith('blastx'): blast_cmd = NcbiblastxCommandline(args, **kwargs) elif blast_program.endswith('tblastn'): blast_cmd = NcbitblastnCommandline(args, **kwargs) elif blast_program.endswith('tblastx'): blast_cmd = NcbitblastxCommandline(args, **kwargs) else: return if options: try: for key in options: blast_cmd.set_parameter(key, options[key]) except ValueError as e: messagebox.showerror('xbb tools', 'Commandline error:\n\n' + str(e)) self.tid.destroy() return self.worker = BlastWorker(blast_cmd) self.worker.start() self.UpdateResults()
def RunCommand(self): """Run the BLAST search.""" self.fh_in, self.infile = tempfile.mkstemp() self.fh_out, self.outfile = tempfile.mkstemp() with open(self.infile, 'w+') as f: f.write('>Name\n') f.write(self.command_data[0]) blast_program = self.command_data[1] database = self.command_data[2] # Check if user supplied additional options and extract them if self.command_data[3]: option = self.command_data[3] options = {} for x in range(0, len(option.split()) - 1, 2): options[option.split()[x]] = option.split()[x + 1] else: options = {} args, kwargs = blast_program, {'query': self.infile, 'db': database, 'out': self.outfile} if blast_program.endswith('blastn'): blast_cmd = NcbiblastnCommandline(args, **kwargs) elif blast_program.endswith('blastp'): blast_cmd = NcbiblastpCommandline(args, **kwargs) elif blast_program.endswith('blastx'): blast_cmd = NcbiblastxCommandline(args, **kwargs) elif blast_program.endswith('tblastn'): blast_cmd = NcbitblastnCommandline(args, **kwargs) elif blast_program.endswith('tblastx'): blast_cmd = NcbitblastxCommandline(args, **kwargs) else: return if options: try: for key in options: blast_cmd.set_parameter(key, options[key]) except ValueError as e: messagebox.showerror('xbb tools', 'Commandline error:\n\n' + str(e)) self.tid.destroy() return self.worker = BlastWorker(blast_cmd) self.worker.start() self.UpdateResults()
def RunCommand(self): self.fh_in, self.infile = tempfile.mkstemp() self.fh_out, self.outfile = tempfile.mkstemp() with open(self.infile, "w+") as f: f.write(">Name\n") f.write(self.command_data[0]) blast_program = self.command_data[1] database = self.command_data[2] # Check if user supplied additional options and extract them if self.command_data[3]: option = self.command_data[3] options = {} for x in range(0, len(option.split()) - 1, 2): options[option.split()[x]] = option.split()[x + 1] else: options = {} args, kwargs = blast_program, {"query": self.infile, "db": database, "out": self.outfile} if blast_program.endswith("blastn"): blast_cmd = NcbiblastnCommandline(args, **kwargs) elif blast_program.endswith("blastp"): blast_cmd = NcbiblastpCommandline(args, **kwargs) elif blast_program.endswith("blastx"): blast_cmd = NcbiblastxCommandline(args, **kwargs) elif blast_program.endswith("tblastn"): blast_cmd = NcbitblastnCommandline(args, **kwargs) elif blast_program.endswith("tblastx"): blast_cmd = NcbitblastxCommandline(args, **kwargs) else: return if options: try: for key in options: blast_cmd.set_parameter(key, options[key]) except ValueError as e: messagebox.showerror("xbb tools", "Commandline error:\n\n" + str(e)) self.tid.destroy() return self.worker = BlastWorker(blast_cmd) self.worker.start() self.UpdateResults()
def run(self): print('Begin Resequencing') print('input_file='+str(self.input_file)) assembly_conf = self.conf['identification']['assembly'] if self.input_file_paired == None: print('begin assembly') os.mkdir(os.path.abspath('.')+'/'+self.result_dir+'/identification/assembly') assembly_obj = assembly.Assembly(self.result_dir+'/identification/assembly', assembly_conf, input_file=self.input_file) print(assembly_conf['megahit']['enable'], assembly_conf['spades']['enable'], assembly_conf['velvet']['enable']) if assembly_conf['megahit']['enable'] != False: assembly_obj.megahit_single() assembly_result = self.result_dir+'/identification/assembly/megahit_out/final.contigs.fa' elif assembly_conf['spades']['enable'] != False: assembly_obj.spades_single() assembly_result = self.result_dir+'/identification/assembly/spades_out/contigs.fasta' elif assembly_conf['velvet']['enable'] != False: assembly_obj.velvet_single() assembly_result = self.result_dir+'/identification/assembly/velvet_output/contigs.fa' else: assembly_result = self.input_file # assembly_obj.megahit_single() # assembly_result = self.result_dir+'/identification/assembly/megahit_out/final.contigs.fa' print('end assembly') print("Begin QUAST") try: completed_process = subprocess.run('quast '+assembly_result+' --min-contig 50 -o '+self.result_dir+'/identification/quast_out', shell=True, check=True) if completed_process.returncode == 0: print('Assembly runs successfully! CompleteProcess.returncode = %s.' % completed_process.returncode) else: print('An error occurred in Assembly. Please install QUAST.') print('stdout = %s, stderr = %s.' % (completed_process.stdout, completed_process.stderr)) subprocess.run(os.path.dirname(os.path.realpath(__file__))+'/external_tools/quast-5.0.2/quast.py '+assembly_result+' --min-contig 50 -o '+self.result_dir+'/identification/quast_out', shell=True, check=True) except Exception as e: print(e) print("Please install QUAST") print("End QUAST") else: print('begin assembly') os.mkdir(os.path.abspath('.')+'/'+self.result_dir+'/identification/assembly') assembly_obj = assembly.Assembly(self.result_dir+'/identification/assembly', assembly_conf, input_file_1=self.input_file, input_file_2=self.input_file_paired) if assembly_conf['megahit']['enable'] != False: assembly_obj.megahit_paired() assembly_result = self.result_dir+'/identification/assembly/megahit_out/final.contigs.fa' elif assembly_conf['spades']['enable'] != False: assembly_obj.spades_paired() assembly_result = self.result_dir+'/identification/assembly/spades_out/contigs.fasta' elif assembly_conf['velvet']['enable'] != False: assembly_obj.velvet_paired() assembly_result = self.result_dir+'/identification/assembly/velvet_output/contigs.fa' else: assembly_result = self.input_file # assembly_obj.megahit_paired() # assembly_result = self.result_dir+'/identification/assembly/megahit_out/final.contigs.fa' print('end assembly') print("Begin QUAST") try: completed_process = subprocess.run('quast '+assembly_result+' --min-contig 50 -o '+self.result_dir+'/identification/quast_out', shell=True, check=True) if completed_process.returncode == 0: print('Assembly runs successfully! CompleteProcess.returncode = %s.' % completed_process.returncode) else: print('An error occurred in Assembly. Please install QUAST.') print('stdout = %s, stderr = %s.' % (completed_process.stdout, completed_process.stderr)) subprocess.run(os.path.dirname(os.path.realpath(__file__))+'/external_tools/quast-5.0.2/quast.py '+assembly_result+' --min-contig 50 -o '+self.result_dir+'/identification/quast_out', shell=True, check=True) except Exception as e: print(e) print("Please install QUAST") print("End QUAST") temp_file = open(os.path.abspath('.') + '/' + self.result_dir+'/Summary_of_results.html', 'a+') temp_file.write('<ul>\n') temp_file.write('<li>assembly result is in %s</li>\n' % './identification/assembly') temp_file.write('<li><a href="%s">click to assembly result</a></li>\n' % ('./identification/assembly')) temp_file.write('<li>assembly qc result is in %s</li>\n' % './identification/quast_out') temp_file.write('<li><a href="%s">click to assembly qc result</a></li>\n' % ('./identification/quast_out/report.html')) temp_file.write('</ul>\n') temp_file.close() if assembly_conf['enable'] != False: blast_input = assembly_result else: scripts.fastq2fasta.fastq2fasta(self.input_file, self.result_dir+"/identification") blast_input = self.result_dir+"/identification/input.fasta" # time.sleep(1000) blastn_conf = self.conf['identification']['blastn'] blastn_cline = NcbiblastnCommandline(cmd=os.path.dirname(os.path.realpath(__file__))+'/external_tools/blastn', query=blast_input, db=self.conf["identification"]['blastn']["blast_db_path"], outfmt=7, out=self.result_dir+"/identification/ncbi_fungi_blast_out.xml") blastn_cline.set_parameter('num_threads', int(blastn_conf['num_threads'])) blastn_cline.set_parameter('num_alignments', int(blastn_conf['num_alignments'])) blastn_cline.set_parameter('evalue', float(blastn_conf['evalue'])) # if blastn_conf['task'] != None: # blastn_cline.set_parameter('task', blastn_conf['task']) if blastn_conf['penalty'] != None: blastn_cline.set_parameter('penalty', int(blastn_conf['penalty'])) if blastn_conf['reward'] != None: blastn_cline.set_parameter('reward', int(blastn_conf['reward'])) # if blastn_conf['dust'] != None: # blastn_cline.set_parameter('dust', blastn_conf['dust']) # if blastn_conf['filtering_db'] != None: # blastn_cline.set_parameter('filtering_db', blastn_conf['filtering_db']) # if blastn_conf['window_masker_taxid'] != None: # blastn_cline.set_parameter('window_masker_taxid', blastn_conf['window_masker_taxid']) # if blastn_conf['no_greedy'] != None: # blastn_cline.set_parameter('no_greedy', blastn_conf['no_greedy']) # if blastn_conf['min_raw_gapped_score'] != None: # blastn_cline.set_parameter('min_raw_gapped_score', blastn_conf['min_raw_gapped_score']) # if blastn_conf['ungapped'] != None: # blastn_cline.set_parameter('ungapped', blastn_conf['ungapped']) # if blastn_conf['off_diagonal_range'] != None: # blastn_cline.set_parameter('off_diagonal_range', blastn_conf['off_diagonal_range']) print(blastn_cline) stdout, stderr = blastn_cline() print(stdout) print(stderr) accession_version_list = scripts.handle_blast_xml_result.handle_blast_xml_result_outfmt7(self.result_dir+"/identification/ncbi_fungi_blast_out.xml") accession_version_list = [accession_version_list[i][0] for i in range(int(self.conf["identification"]['number_of_candidate_similar_genome']))] # print("accession_version_list="+str(accession_version_list)) temp_file = open(os.path.abspath('.') + '/' + self.result_dir+'/Summary_of_results.html', 'a+') temp_file.write('<ul>\n') temp_file.write('<li>candiate closest genome list %s \n' % (accession_version_list)) temp_file.write('</ul>\n') temp_file.close() for accession_version in accession_version_list: scripts.download_nucleotide.download_by_accession_version(self.result_dir, accession_version) genome_similarity_calculator = calculating_genome_similarity.GenomeSimilarityCalculator(self.result_dir, assembly_result, accession_version_list) closest_accession_version, max_jaccard = genome_similarity_calculator.search_similar_genome_from_bacteria_dataset() print("closest_accession_version = %s, max_jaccard = %s" % (closest_accession_version, max_jaccard)) temp_file = open(os.path.abspath('.') + '/' + self.result_dir+'/Summary_of_results.html', 'a+') temp_file.write('<ul>\n') temp_file.write('<li>closest accession version is %s in %s Jaccard similarity coefficient</li>\n' % (closest_accession_version, max_jaccard)) temp_file.write('</ul>\n') temp_file.close() if self.conf['annotation']['cds_annotation']["enable"] != False: self.cds_annotation_ngs(closest_accession_version, assembly_result) if self.conf['annotation']['mlst'] != False: self.mlst(blast_input) if self.conf['annotation']['prokka']['enable'] != False: scripts.prokka_annotation.annotation(blast_input, self.result_dir, self.conf, closest_accession_version)
def run_3gs(self): print('Begin Resequencing 3gs') assembly_conf = self.conf['identification']['assembly'] os.mkdir(os.path.abspath('.')+'/'+self.result_dir+'/identification/assembly') assembly_obj = assembly.Assembly(self.result_dir+'/identification/assembly', assembly_conf, input_file=self.input_file) if assembly_conf['canu']['enable'] != False: assembly_obj.canu() assembly_result = self.result_dir+'/identification/assembly/canu_output/canu_assembly_result.contigs.fasta' print("Begin QUAST") try: completed_process = subprocess.run('quast '+assembly_result+' --min-contig 50 -o '+self.result_dir+'/identification/quast_out', shell=True, check=True) if completed_process.returncode == 0: print('Assembly runs successfully! CompleteProcess.returncode = %s.' % completed_process.returncode) else: print('An error occurred in Assembly. Please install QUAST.') print('stdout = %s, stderr = %s.' % (completed_process.stdout, completed_process.stderr)) subprocess.run(os.path.dirname(os.path.realpath(__file__))+'/external_tools/quast-5.0.2/quast.py '+assembly_result+' --min-contig 50 -o '+self.result_dir+'/identification/quast_out', shell=True, check=True) except Exception as e: print(e) print("Please install QUAST") print("End QUAST") elif assembly_conf['spades']['enable'] != False: assembly_obj.spades_3gs() assembly_result = self.result_dir+'/identification/assembly/spades_out/contigs.fasta' print("Begin QUAST") try: completed_process = subprocess.run('quast '+assembly_result+' --min-contig 50 -o '+self.result_dir+'/identification/quast_out', shell=True, check=True) if completed_process.returncode == 0: print('Assembly runs successfully! CompleteProcess.returncode = %s.' % completed_process.returncode) else: print('An error occurred in Assembly. Please install QUAST.') print('stdout = %s, stderr = %s.' % (completed_process.stdout, completed_process.stderr)) subprocess.run(os.path.dirname(os.path.realpath(__file__))+'/external_tools/quast-5.0.2/quast.py '+assembly_result+' --min-contig 50 -o '+self.result_dir+'/identification/quast_out', shell=True, check=True) except Exception as e: print(e) print("Please install QUAST") print("End QUAST") else: assembly_result = self.input_file # else: # assembly_obj.canu() # assembly_result = self.result_dir+'/identification/assembly/canu_output/canu_assembly_result.contigs.fasta' temp_file = open(os.path.abspath('.') + '/' + self.result_dir+'/Summary_of_results.html', 'a+') temp_file.write('<ul>\n') temp_file.write('<li>assembly result is in %s</li>\n' % './identification/assembly') temp_file.write('<li><a href="%s">click to assembly result</a></li>\n' % ('./identification/assembly')) temp_file.write('<li>assembly qc result is in %s</li>\n' % './identification/quast_out') temp_file.write('<li><a href="%s">click to assembly qc result</a></li>\n' % ('./identification/quast_out/report.html')) temp_file.write('</ul>\n') temp_file.close() if assembly_conf['enable'] != False: blast_input = assembly_result else: scripts.fastq2fasta.fastq2fasta(self.input_file, self.result_dir+"/identification") blast_input = self.result_dir+"/identification/input.fasta" # scripts.fastq2fasta.fastq2fasta(self.input_file, self.result_dir+"/identification") # time.sleep(900) blastn_conf = self.conf['identification']['blastn'] blastn_cline = NcbiblastnCommandline(cmd=os.path.dirname(os.path.realpath(__file__))+'/external_tools/blastn', query=blast_input, db=self.conf["identification"]['blastn']["blast_db_path"], outfmt=7, out=self.result_dir+"/identification/ncbi_fungi_blast_out.xml", evalue=1e-5) # blastn_cline.set_parameter('num_threads', int(blastn_conf['num_threads'])) blastn_cline.set_parameter('num_threads', int(blastn_conf['num_threads'])) blastn_cline.set_parameter('num_alignments', int(blastn_conf['num_alignments'])) if blastn_conf['evalue'] != None: blastn_cline.set_parameter('evalue', blastn_conf['evalue']) # if blastn_conf['task'] != None: # blastn_cline.set_parameter('task', blastn_conf['task']) if blastn_conf['penalty'] != None: blastn_cline.set_parameter('penalty', int(blastn_conf['penalty'])) if blastn_conf['reward'] != None: blastn_cline.set_parameter('reward', int(blastn_conf['reward'])) # if blastn_conf['dust'] != None: # blastn_cline.set_parameter('dust', blastn_conf['dust']) # if blastn_conf['filtering_db'] != None: # blastn_cline.set_parameter('filtering_db', blastn_conf['filtering_db']) # if blastn_conf['window_masker_taxid'] != None: # blastn_cline.set_parameter('window_masker_taxid', blastn_conf['window_masker_taxid']) # if blastn_conf['no_greedy'] != None: # blastn_cline.set_parameter('no_greedy', blastn_conf['no_greedy']) # if blastn_conf['min_raw_gapped_score'] != None: # blastn_cline.set_parameter('min_raw_gapped_score', blastn_conf['min_raw_gapped_score']) # if blastn_conf['ungapped'] != None: # blastn_cline.set_parameter('ungapped', blastn_conf['ungapped']) # if blastn_conf['off_diagonal_range'] != None: # blastn_cline.set_parameter('off_diagonal_range', blastn_conf['off_diagonal_range']) print(blastn_cline) stdout, stderr = blastn_cline() print(stdout) print(stderr) accession_version_list = scripts.handle_blast_xml_result.handle_blast_xml_result_outfmt7(self.result_dir+"/identification/ncbi_fungi_blast_out.xml") accession_version_list = [accession_version_list[i][0] for i in range(int(self.conf["identification"]['number_of_candidate_similar_genome']))] # print("accession_version_list="+str(accession_version_list)) temp_file = open(os.path.abspath('.') + '/' + self.result_dir+'/Summary_of_results.html', 'a+') temp_file.write('<ul>\n') temp_file.write('<li>candiate closest genome list %s \n' % (accession_version_list)) temp_file.write('</ul>\n') temp_file.close() for accession_version in accession_version_list: time.sleep(10) scripts.download_nucleotide.download_by_accession_version(self.result_dir, accession_version) genome_similarity_calculator = calculating_genome_similarity.GenomeSimilarityCalculator(self.result_dir, assembly_result, accession_version_list) closest_accession_version, max_jaccard = genome_similarity_calculator.search_similar_genome_from_bacteria_dataset() print("closest_accession_version = %s, max_jaccard = %s" % (closest_accession_version, max_jaccard)) temp_file = open(os.path.abspath('.') + '/' + self.result_dir+'/Summary_of_results.html', 'a+') temp_file.write('<ul>\n') temp_file.write('<li>closest accession version is %s in %s Jaccard similarity coefficient</li>\n' % (closest_accession_version, max_jaccard)) temp_file.write('</ul>\n') temp_file.close() # closest_accession_version = accession_version_list[0] # max_similarity = 0 # for accession_version in accession_version_list: # print(command_line % (accession_version, accession_version)) # subprocess.run(command_line % (accession_version, accession_version), shell=True, check=True) # subprocess.run('samtools sort '+self.result_dir+'/identification/minimap2_'+accession_version+'_result.sam -o '+self.result_dir+'/identification/minimap2_'+accession_version+'_result.sorted.bam -O bam', shell=True, check=True) # res = subprocess.Popen('bedtools genomecov -ibam '+self.result_dir+'/identification/minimap2_'+accession_version+'_result.sorted.bam', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=True) # send_messages = res.stdout.readlines() # print(send_messages[0].decode('utf-8')) # for message in send_messages: # message = message.decode('utf-8') # if message.startswith('genome\t0'): # print(message) # line = message.split() # if line[-1] == '\n': # new_similarity = 1 - float(line[-2]) # else: # new_similarity = 1 - float(line[-1]) # break # print('new_similarity='+str(new_similarity)) # if new_similarity > max_similarity: # max_similarity = new_similarity # closest_accession_version = accession_version # print("closest_accession_version="+str(closest_accession_version)) if self.conf['annotation']['cds_annotation']['enable'] != False: self.cds_annotation_3gs(closest_accession_version, assembly_result) if self.conf['annotation']['mlst'] != False: self.mlst(assembly_result) if self.conf['annotation']['prokka']['enable'] != False: scripts.prokka_annotation.annotation(assembly_result, self.result_dir, self.conf, closest_accession_version)