Пример #1
0
    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()
Пример #2
0
    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()
Пример #3
0
    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()
Пример #4
0
    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()
Пример #5
0
    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)
Пример #6
0
    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)