Mercurial > repos > cpt > cpt_phageqc_annotations
changeset 0:c3140b08d703 draft default tip
Uploaded
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cpt_phageqc_annotation/cpt-macros.xml Fri Jun 17 13:00:50 2022 +0000 @@ -0,0 +1,115 @@ +<?xml version="1.0"?> +<macros> + <xml name="gff_requirements"> + <requirements> + <requirement type="package" version="2.7">python</requirement> + <requirement type="package" version="1.65">biopython</requirement> + <requirement type="package" version="2.12.1">requests</requirement> + <yield/> + </requirements> + <version_command> + <![CDATA[ + cd $__tool_directory__ && git rev-parse HEAD + ]]> + </version_command> + </xml> + <xml name="citation/mijalisrasche"> + <citation type="doi">10.1371/journal.pcbi.1008214</citation> + <citation type="bibtex">@unpublished{galaxyTools, + author = {E. Mijalis, H. Rasche}, + title = {CPT Galaxy Tools}, + year = {2013-2017}, + note = {https://github.com/tamu-cpt/galaxy-tools/} + } + </citation> + </xml> + <xml name="citations"> + <citations> + <citation type="doi">10.1371/journal.pcbi.1008214</citation> + <citation type="bibtex"> + @unpublished{galaxyTools, + author = {E. Mijalis, H. Rasche}, + title = {CPT Galaxy Tools}, + year = {2013-2017}, + note = {https://github.com/tamu-cpt/galaxy-tools/} + } + </citation> + <yield/> + </citations> + </xml> + <xml name="citations-crr"> + <citations> + <citation type="doi">10.1371/journal.pcbi.1008214</citation> + <citation type="bibtex"> + @unpublished{galaxyTools, + author = {C. Ross}, + title = {CPT Galaxy Tools}, + year = {2020-}, + note = {https://github.com/tamu-cpt/galaxy-tools/} + } + </citation> + <yield/> + </citations> + </xml> + <xml name="citations-2020"> + <citations> + <citation type="doi">10.1371/journal.pcbi.1008214</citation> + <citation type="bibtex"> + @unpublished{galaxyTools, + author = {E. Mijalis, H. Rasche}, + title = {CPT Galaxy Tools}, + year = {2013-2017}, + note = {https://github.com/tamu-cpt/galaxy-tools/} + } + </citation> + <citation type="bibtex"> + @unpublished{galaxyTools, + author = {A. Criscione}, + title = {CPT Galaxy Tools}, + year = {2019-2021}, + note = {https://github.com/tamu-cpt/galaxy-tools/} + } + </citation> + <yield/> + </citations> + </xml> + <xml name="citations-2020-AJC-solo"> + <citations> + <citation type="doi">10.1371/journal.pcbi.1008214</citation> + <citation type="bibtex"> + @unpublished{galaxyTools, + author = {A. Criscione}, + title = {CPT Galaxy Tools}, + year = {2019-2021}, + note = {https://github.com/tamu-cpt/galaxy-tools/} + } + </citation> + <yield/> + </citations> + </xml> + <xml name="citations-clm"> + <citations> + <citation type="doi">10.1371/journal.pcbi.1008214</citation> + <citation type="bibtex"> + @unpublished{galaxyTools, + author = {C. Maughmer}, + title = {CPT Galaxy Tools}, + year = {2017-2020}, + note = {https://github.com/tamu-cpt/galaxy-tools/} + } + </citation> + <yield/> + </citations> + </xml> + <xml name="sl-citations-clm"> + <citation type="bibtex"> + @unpublished{galaxyTools, + author = {C. Maughmer}, + title = {CPT Galaxy Tools}, + year = {2017-2020}, + note = {https://github.com/tamu-cpt/galaxy-tools/} + } + </citation> + <yield/> + </xml> +</macros>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cpt_phageqc_annotation/cpt.py Fri Jun 17 13:00:50 2022 +0000 @@ -0,0 +1,342 @@ +#!/usr/bin/env python +import regex as re +from Bio.Seq import Seq, reverse_complement, translate +from Bio.SeqRecord import SeqRecord +from Bio import SeqIO +from Bio.Data import CodonTable +import logging + +logging.basicConfig() +log = logging.getLogger() + +PHAGE_IN_MIDDLE = re.compile("^(?P<host>.*)\s*phage (?P<phage>.*)$") +BACTERIOPHAGE_IN_MIDDLE = re.compile("^(?P<host>.*)\s*bacteriophage (?P<phage>.*)$") +STARTS_WITH_PHAGE = re.compile( + "^(bacterio|vibrio|Bacterio|Vibrio|)?[Pp]hage (?P<phage>.*)$" +) +NEW_STYLE_NAMES = re.compile("(?P<phage>v[A-Z]_[A-Z][a-z]{2}_.*)") + + +def phage_name_parser(name): + host = None + phage = None + name = name.replace(", complete genome.", "") + name = name.replace(", complete genome", "") + + m = BACTERIOPHAGE_IN_MIDDLE.match(name) + if m: + host = m.group("host") + phage = m.group("phage") + return (host, phage) + + m = PHAGE_IN_MIDDLE.match(name) + if m: + host = m.group("host") + phage = m.group("phage") + return (host, phage) + + m = STARTS_WITH_PHAGE.match(name) + if m: + phage = m.group("phage") + return (host, phage) + + m = NEW_STYLE_NAMES.match(name) + if m: + phage = m.group("phage") + return (host, phage) + + return (host, phage) + + +class OrfFinder(object): + def __init__(self, table, ftype, ends, min_len, strand): + self.table = table + self.table_obj = CodonTable.ambiguous_generic_by_id[table] + self.ends = ends + self.ftype = ftype + self.min_len = min_len + self.starts = sorted(self.table_obj.start_codons) + self.stops = sorted(self.table_obj.stop_codons) + self.re_starts = re.compile("|".join(self.starts)) + self.re_stops = re.compile("|".join(self.stops)) + self.strand = strand + + def locate(self, fasta_file, out_nuc, out_prot, out_bed, out_gff3): + seq_format = "fasta" + log.debug("Genetic code table %i" % self.table) + log.debug("Minimum length %i aa" % self.min_len) + + out_count = 0 + + out_gff3.write("##gff-version 3\n") + + for idx, record in enumerate(SeqIO.parse(fasta_file, seq_format)): + for i, (f_start, f_end, f_strand, n, t) in enumerate( + self.get_all_peptides(str(record.seq).upper()) + ): + out_count += 1 + + descr = "length %i aa, %i bp, from %s..%s[%s] of %s" % ( + len(t), + len(n), + f_start, + f_end, + f_strand, + record.description, + ) + fid = record.id + "|%s%i" % (self.ftype, i + 1) + + r = SeqRecord(Seq(n), id=fid, name="", description=descr) + t = SeqRecord(Seq(t), id=fid, name="", description=descr) + + SeqIO.write(r, out_nuc, "fasta") + SeqIO.write(t, out_prot, "fasta") + + nice_strand = "+" if f_strand == +1 else "-" + + out_bed.write( + "\t".join( + map(str, [record.id, f_start, f_end, fid, 0, nice_strand]) + ) + + "\n" + ) + + out_gff3.write( + "\t".join( + map( + str, + [ + record.id, + "getOrfsOrCds", + "CDS", + f_start + 1, + f_end, + ".", + nice_strand, + 0, + "ID=%s.%s.%s" % (self.ftype, idx, i + 1), + ], + ) + ) + + "\n" + ) + log.info("Found %i %ss", out_count, self.ftype) + + def start_chop_and_trans(self, s, strict=True): + """Returns offset, trimmed nuc, protein.""" + if strict: + assert s[-3:] in self.stops, s + assert len(s) % 3 == 0 + for match in self.re_starts.finditer(s, overlapped=True): + # Must check the start is in frame + start = match.start() + if start % 3 == 0: + n = s[start:] + assert len(n) % 3 == 0, "%s is len %i" % (n, len(n)) + if strict: + t = translate(n, self.table) + else: + # Use when missing stop codon, + t = "M" + translate(n[3:], self.table, to_stop=True) + yield start, n, t # Edited by CPT to be a generator + + def break_up_frame(self, s): + """Returns offset, nuc, protein.""" + start = 0 + for match in self.re_stops.finditer(s, overlapped=True): + index = match.start() + 3 + if index % 3 != 0: + continue + n = s[start:index] + for (offset, n, t) in self.start_chop_and_trans(n): + if n and len(t) >= self.min_len: + yield start + offset, n, t + start = index + + def putative_genes_in_sequence(self, nuc_seq): + """Returns start, end, strand, nucleotides, protein. + Co-ordinates are Python style zero-based. + """ + nuc_seq = nuc_seq.upper() + # TODO - Refactor to use a generator function (in start order) + # rather than making a list and sorting? + answer = [] + full_len = len(nuc_seq) + + for frame in range(0, 3): + for offset, n, t in self.break_up_frame(nuc_seq[frame:]): + start = frame + offset # zero based + answer.append((start, start + len(n), +1, n, t)) + + rc = reverse_complement(nuc_seq) + for frame in range(0, 3): + for offset, n, t in self.break_up_frame(rc[frame:]): + start = full_len - frame - offset # zero based + answer.append((start, start - len(n), -1, n, t)) + answer.sort() + return answer + + def get_all_peptides(self, nuc_seq): + """Returns start, end, strand, nucleotides, protein. + + Co-ordinates are Python style zero-based. + """ + # Refactored into generator by CPT + full_len = len(nuc_seq) + if self.strand != "reverse": + for frame in range(0, 3): + for offset, n, t in self.break_up_frame(nuc_seq[frame:]): + start = frame + offset # zero based + yield (start, start + len(n), +1, n, t) + if self.strand != "forward": + rc = reverse_complement(nuc_seq) + for frame in range(0, 3): + for offset, n, t in self.break_up_frame(rc[frame:]): + start = full_len - frame - offset # zero based + yield (start - len(n), start, -1, n, t) + + +class MGAFinder(object): + def __init__(self, table, ftype, ends, min_len): + self.table = table + self.table_obj = CodonTable.ambiguous_generic_by_id[table] + self.ends = ends + self.ftype = ftype + self.min_len = min_len + self.starts = sorted(self.table_obj.start_codons) + self.stops = sorted(self.table_obj.stop_codons) + self.re_starts = re.compile("|".join(self.starts)) + self.re_stops = re.compile("|".join(self.stops)) + + def locate(self, fasta_file, out_nuc, out_prot, out_bed, out_gff3): + seq_format = "fasta" + log.debug("Genetic code table %i" % self.table) + log.debug("Minimum length %i aa" % self.min_len) + + out_count = 0 + + out_gff3.write("##gff-version 3\n") + + for idx, record in enumerate(SeqIO.parse(fasta_file, seq_format)): + for i, (f_start, f_end, f_strand, n, t) in enumerate( + self.get_all_peptides(str(record.seq).upper()) + ): + out_count += 1 + + descr = "length %i aa, %i bp, from %s..%s[%s] of %s" % ( + len(t), + len(n), + f_start, + f_end, + f_strand, + record.description, + ) + fid = record.id + "|%s%i" % (self.ftype, i + 1) + + r = SeqRecord(Seq(n), id=fid, name="", description=descr) + t = SeqRecord(Seq(t), id=fid, name="", description=descr) + + SeqIO.write(r, out_nuc, "fasta") + SeqIO.write(t, out_prot, "fasta") + + nice_strand = "+" if f_strand == +1 else "-" + + out_bed.write( + "\t".join( + map(str, [record.id, f_start, f_end, fid, 0, nice_strand]) + ) + + "\n" + ) + + out_gff3.write( + "\t".join( + map( + str, + [ + record.id, + "getOrfsOrCds", + "CDS", + f_start + 1, + f_end, + ".", + nice_strand, + 0, + "ID=%s.%s.%s" % (self.ftype, idx, i + 1), + ], + ) + ) + + "\n" + ) + log.info("Found %i %ss", out_count, self.ftype) + + def start_chop_and_trans(self, s, strict=True): + """Returns offset, trimmed nuc, protein.""" + if strict: + assert s[-3:] in self.stops, s + assert len(s) % 3 == 0 + for match in self.re_starts.finditer(s, overlapped=True): + # Must check the start is in frame + start = match.start() + if start % 3 == 0: + n = s[start:] + assert len(n) % 3 == 0, "%s is len %i" % (n, len(n)) + if strict: + t = translate(n, self.table) + else: + # Use when missing stop codon, + t = "M" + translate(n[3:], self.table, to_stop=True) + yield start, n, t + + def break_up_frame(self, s): + """Returns offset, nuc, protein.""" + start = 0 + for match in self.re_stops.finditer(s, overlapped=True): + index = match.start() + 3 + if index % 3 != 0: + continue + n = s[start:index] + for (offset, n, t) in self.start_chop_and_trans(n): + if n and len(t) >= self.min_len: + yield start + offset, n, t + start = index + + def putative_genes_in_sequence(self, nuc_seq): + """Returns start, end, strand, nucleotides, protein. + Co-ordinates are Python style zero-based. + """ + nuc_seq = nuc_seq.upper() + # TODO - Refactor to use a generator function (in start order) + # rather than making a list and sorting? + answer = [] + full_len = len(nuc_seq) + + for frame in range(0, 3): + for offset, n, t in self.break_up_frame(nuc_seq[frame:]): + start = frame + offset # zero based + answer.append((start, start + len(n), +1, n, t)) + + rc = reverse_complement(nuc_seq) + for frame in range(0, 3): + for offset, n, t in self.break_up_frame(rc[frame:]): + start = full_len - frame - offset # zero based + answer.append((start, start - len(n), -1, n, t)) + answer.sort() + return answer + + def get_all_peptides(self, nuc_seq): + """Returns start, end, strand, nucleotides, protein. + + Co-ordinates are Python style zero-based. + """ + # Refactored into generator by CPT + + full_len = len(nuc_seq) + for frame in range(0, 3): + for offset, n, t in self.break_up_frame(nuc_seq[frame:]): + start = frame + offset # zero based + yield (start, start + len(n), +1, n, t) + rc = reverse_complement(nuc_seq) + for frame in range(0, 3): + for offset, n, t in self.break_up_frame(rc[frame:]): + start = full_len - frame - offset # zero based + yield (start - len(n), start, -1, n, t)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cpt_phageqc_annotation/gff3.py Fri Jun 17 13:00:50 2022 +0000 @@ -0,0 +1,346 @@ +import copy +import logging + +log = logging.getLogger() +log.setLevel(logging.WARN) + + +def feature_lambda( + feature_list, + test, + test_kwargs, + subfeatures=True, + parent=None, + invert=False, + recurse=True, +): + """Recursively search through features, testing each with a test function, yielding matches. + + GFF3 is a hierachical data structure, so we need to be able to recursively + search through features. E.g. if you're looking for a feature with + ID='bob.42', you can't just do a simple list comprehension with a test + case. You don't know how deeply burried bob.42 will be in the feature tree. This is where feature_lambda steps in. + + :type feature_list: list + :param feature_list: an iterable of features + + :type test: function reference + :param test: a closure with the method signature (feature, **kwargs) where + the kwargs are those passed in the next argument. This + function should return True or False, True if the feature is + to be yielded as part of the main feature_lambda function, or + False if it is to be ignored. This function CAN mutate the + features passed to it (think "apply"). + + :type test_kwargs: dictionary + :param test_kwargs: kwargs to pass to your closure when it is called. + + :type subfeatures: boolean + :param subfeatures: when a feature is matched, should just that feature be + yielded to the caller, or should the entire sub_feature + tree for that feature be included? subfeatures=True is + useful in cases such as searching for a gene feature, + and wanting to know what RBS/Shine_Dalgarno_sequences + are in the sub_feature tree (which can be accomplished + with two feature_lambda calls). subfeatures=False is + useful in cases when you want to process (and possibly + return) the entire feature tree, such as applying a + qualifier to every single feature. + + :type invert: boolean + :param invert: Negate/invert the result of the filter. + + :rtype: yielded list + :return: Yields a list of matching features. + """ + # Either the top level set of [features] or the subfeature attribute + for feature in feature_list: + feature._parent = parent + if not parent: + # Set to self so we cannot go above root. + feature._parent = feature + test_result = test(feature, **test_kwargs) + # if (not invert and test_result) or (invert and not test_result): + if invert ^ test_result: + if not subfeatures: + feature_copy = copy.deepcopy(feature) + feature_copy.sub_features = list() + yield feature_copy + else: + yield feature + + if recurse and hasattr(feature, "sub_features"): + for x in feature_lambda( + feature.sub_features, + test, + test_kwargs, + subfeatures=subfeatures, + parent=feature, + invert=invert, + recurse=recurse, + ): + yield x + + +def fetchParent(feature): + if not hasattr(feature, "_parent") or feature._parent is None: + return feature + else: + return fetchParent(feature._parent) + + +def feature_test_true(feature, **kwargs): + return True + + +def feature_test_type(feature, **kwargs): + if "type" in kwargs: + return str(feature.type).upper() == str(kwargs["type"]).upper() + elif "types" in kwargs: + for x in kwargs["types"]: + if str(feature.type).upper() == str(x).upper(): + return True + return False + raise Exception("Incorrect feature_test_type call, need type or types") + + +def feature_test_qual_value(feature, **kwargs): + """Test qualifier values. + + For every feature, check that at least one value in + feature.quailfiers(kwargs['qualifier']) is in kwargs['attribute_list'] + """ + if isinstance(kwargs["qualifier"], list): + for qualifier in kwargs["qualifier"]: + for attribute_value in feature.qualifiers.get(qualifier, []): + if attribute_value in kwargs["attribute_list"]: + return True + else: + for attribute_value in feature.qualifiers.get(kwargs["qualifier"], []): + if attribute_value in kwargs["attribute_list"]: + return True + return False + + +def feature_test_location(feature, **kwargs): + if "strand" in kwargs: + if feature.location.strand != kwargs["strand"]: + return False + + return feature.location.start <= kwargs["loc"] <= feature.location.end + + +def feature_test_quals(feature, **kwargs): + """ + Example:: + + a = Feature(qualifiers={'Note': ['Some notes', 'Aasdf']}) + + # Check if a contains a Note + feature_test_quals(a, {'Note': None}) # Returns True + feature_test_quals(a, {'Product': None}) # Returns False + + # Check if a contains a note with specific value + feature_test_quals(a, {'Note': ['ome']}) # Returns True + + # Check if a contains a note with specific value + feature_test_quals(a, {'Note': ['other']}) # Returns False + """ + for key in kwargs: + if key not in feature.qualifiers: + return False + + # Key is present, no value specified + if kwargs[key] is None: + return True + + # Otherwise there is a key value we're looking for. + # so we make a list of matches + matches = [] + # And check all of the feature qualifier valuse + for value in feature.qualifiers[key]: + # For that kwargs[key] value + for x in kwargs[key]: + matches.append(x in value) + + # If none matched, then we return false. + if not any(matches): + return False + + return True + + +def feature_test_contains(feature, **kwargs): + if "index" in kwargs: + return feature.location.start < kwargs["index"] < feature.location.end + elif "range" in kwargs: + return ( + feature.location.start < kwargs["range"]["start"] < feature.location.end + and feature.location.start < kwargs["range"]["end"] < feature.location.end + ) + else: + raise RuntimeError("Must use index or range keyword") + + +def get_id(feature=None, parent_prefix=None): + result = "" + if parent_prefix is not None: + result += parent_prefix + "|" + if "locus_tag" in feature.qualifiers: + result += feature.qualifiers["locus_tag"][0] + elif "gene" in feature.qualifiers: + result += feature.qualifiers["gene"][0] + elif "Gene" in feature.qualifiers: + result += feature.qualifiers["Gene"][0] + elif "product" in feature.qualifiers: + result += feature.qualifiers["product"][0] + elif "Product" in feature.qualifiers: + result += feature.qualifiers["Product"][0] + elif "Name" in feature.qualifiers: + result += feature.qualifiers["Name"][0] + else: + return feature.id + # Leaving in case bad things happen. + # result += '%s_%s_%s_%s' % ( + # feature.id, + # feature.location.start, + # feature.location.end, + # feature.location.strand + # ) + return result + + +def get_gff3_id(gene): + return gene.qualifiers.get("Name", [gene.id])[0] + + +def ensure_location_in_bounds(start=0, end=0, parent_length=0): + # This prevents frameshift errors + while start < 0: + start += 3 + while end < 0: + end += 3 + while start > parent_length: + start -= 3 + while end > parent_length: + end -= 3 + return (start, end) + + +def coding_genes(feature_list): + for x in genes(feature_list): + if ( + len( + list( + feature_lambda( + x.sub_features, + feature_test_type, + {"type": "CDS"}, + subfeatures=False, + ) + ) + ) + > 0 + ): + yield x + + +def genes(feature_list, feature_type="gene", sort=False): + """ + Simple filter to extract gene features from the feature set. + """ + + if not sort: + for x in feature_lambda( + feature_list, feature_test_type, {"type": feature_type}, subfeatures=True + ): + yield x + else: + data = list(genes(feature_list, feature_type=feature_type, sort=False)) + data = sorted(data, key=lambda feature: feature.location.start) + for x in data: + yield x + + +def wa_unified_product_name(feature): + """ + Try and figure out a name. We gave conflicting instructions, so + this isn't as trivial as it should be. Sometimes it will be in + 'product' or 'Product', othertimes in 'Name' + """ + # Manually applied tags. + protein_product = feature.qualifiers.get( + "product", feature.qualifiers.get("Product", [None]) + )[0] + + # If neither of those are available ... + if protein_product is None: + # And there's a name... + if "Name" in feature.qualifiers: + if not is_uuid(feature.qualifiers["Name"][0]): + protein_product = feature.qualifiers["Name"][0] + + return protein_product + + +def is_uuid(name): + return name.count("-") == 4 and len(name) == 36 + + +def get_rbs_from(gene): + # Normal RBS annotation types + rbs_rbs = list( + feature_lambda( + gene.sub_features, feature_test_type, {"type": "RBS"}, subfeatures=False + ) + ) + rbs_sds = list( + feature_lambda( + gene.sub_features, + feature_test_type, + {"type": "Shine_Dalgarno_sequence"}, + subfeatures=False, + ) + ) + # Fraking apollo + apollo_exons = list( + feature_lambda( + gene.sub_features, feature_test_type, {"type": "exon"}, subfeatures=False + ) + ) + apollo_exons = [x for x in apollo_exons if len(x) < 10] + # These are more NCBI's style + regulatory_elements = list( + feature_lambda( + gene.sub_features, + feature_test_type, + {"type": "regulatory"}, + subfeatures=False, + ) + ) + rbs_regulatory = list( + feature_lambda( + regulatory_elements, + feature_test_quals, + {"regulatory_class": ["ribosome_binding_site"]}, + subfeatures=False, + ) + ) + # Here's hoping you find just one ;) + return rbs_rbs + rbs_sds + rbs_regulatory + apollo_exons + + +def nice_name(record): + """ + get the real name rather than NCBI IDs and so on. If fails, will return record.id + """ + name = record.id + likely_parental_contig = list(genes(record.features, feature_type="contig")) + if len(likely_parental_contig) == 1: + name = likely_parental_contig[0].qualifiers.get("organism", [name])[0] + return name + + +def fsort(it): + for i in sorted(it, key=lambda x: int(x.location.start)): + yield i
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cpt_phageqc_annotation/macros.xml Fri Jun 17 13:00:50 2022 +0000 @@ -0,0 +1,23 @@ +<?xml version="1.0"?> +<macros> + <xml name="requirements"> + <requirements> + <requirement type="package" version="3.8.13">python</requirement> + <requirement type="package" version="1.79">biopython</requirement> + <requirement type="package" version="1.2.2">cpt_gffparser</requirement> + <yield/> + </requirements> + </xml> + <xml name="genome_selector"> + <param name="genome_fasta" type="data" format="fasta" label="Source FASTA Sequence"/> + </xml> + <xml name="gff3_input"> + <param label="GFF3 Annotations" name="gff3_data" type="data" format="gff3"/> + </xml> + <token name="@GENOME_SELECTOR_PRE@"> + ln -s $genome_fasta genomeref.fa; + </token> + <token name="@GENOME_SELECTOR@"> + genomeref.fa + </token> +</macros>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cpt_phageqc_annotation/phage_annotation_validator.py Fri Jun 17 13:00:50 2022 +0000 @@ -0,0 +1,1254 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# vim: set fileencoding=utf-8 +import os +import sys +import json +import math +import numpy +import argparse +import itertools +import logging +from gff3 import ( + feature_lambda, + coding_genes, + genes, + get_gff3_id, + feature_test_location, + get_rbs_from, + nice_name, +) +from shinefind import NaiveSDCaller +from CPT_GFFParser import gffParse, gffWrite, gffSeqFeature +from Bio import SeqIO +from Bio.SeqRecord import SeqRecord +from Bio.SeqFeature import SeqFeature, FeatureLocation +from jinja2 import Environment, FileSystemLoader +from cpt import MGAFinder + +logging.basicConfig(level=logging.DEBUG) +log = logging.getLogger(name="pav") + +# Path to script, required because of Galaxy. +SCRIPT_PATH = os.path.dirname(os.path.realpath(__file__)) +# Path to the HTML template for the report + +ENCOURAGEMENT = ( + (100, "Perfection itself!"), + (90, "Amazing!"), + (80, "Not too bad, a few minor things to fix..."), + (70, "Some issues to address"), + ( + 50, + """Issues detected! </p><p class="text-muted">Have you heard of the + <a href="https://cpt.tamu.edu">CPT</a>\'s Automated Phage Annotation + Pipeline?""", + ), + ( + 0, + """<b>MAJOR</b> issues detected! Please consider using the + <a href="https://cpt.tamu.edu">CPT</a>\'s Automated Phage Annotation Pipeline""", + ), +) + + +def gen_qc_feature(start, end, message, strand=0, id_src=None, type_src="gene"): + kwargs = {"qualifiers": {"note": [message]}} + kwargs["type"] = type_src + kwargs["strand"] = strand + kwargs["phase"]=0 + kwargs["score"]=0.0 + kwargs["source"]="feature" + if id_src is not None: + kwargs["id"] = id_src.id + kwargs["qualifiers"]["ID"] = [id_src.id] + kwargs["qualifiers"]["Name"] = id_src.qualifiers.get("Name", []) + + + if end >= start: + return gffSeqFeature(FeatureLocation(start, end, strand=strand), **kwargs) + else: + return gffSeqFeature(FeatureLocation(end, start, strand=strand), **kwargs) + + +def __ensure_location_in_bounds(start=0, end=0, parent_length=0): + # This prevents frameshift errors + while start < 0: + start += 3 + while end < 0: + end += 3 + while start > parent_length: + start -= 3 + while end > parent_length: + end -= 3 + return (start, end) + + +def missing_rbs(record, lookahead_min=5, lookahead_max=15): + """ + Identify gene features with missing RBSs + + This "looks ahead" 5-15 bases ahead of each gene feature, and checks if + there's an RBS feature in those bounds. + + The returned data is a set of genes with the RBS sequence in the __upstream + attribute, and a message in the __message attribute. + """ + results = [] + good = 0 + bad = 0 + qc_features = [] + sd_finder = NaiveSDCaller() + + any_rbss = False + + for gene in coding_genes(record.features): + # Check if there are RBSs, TODO: make this recursive. Each feature in + # gene.sub_features can also have sub_features. + rbss = get_rbs_from(gene) + # No RBS found + if len(rbss) == 0: + # Get the sequence lookahead_min to lookahead_max upstream + if gene.strand > 0: + start = gene.location.start - lookahead_max + end = gene.location.start - lookahead_min + else: + start = gene.location.end + lookahead_min + end = gene.location.end + lookahead_max + # We have to ensure the feature is ON the genome, otherwise we may + # be trying to access a location outside of the length of the + # genome, which would be bad. + (start, end) = __ensure_location_in_bounds( + start=start, end=end, parent_length=len(record) + ) + # Temporary feature to extract sequence + tmp = gffSeqFeature( + FeatureLocation(start, end, strand=gene.strand), type="domain" + ) + # Get the sequence + seq = str(tmp.extract(record.seq)) + # Set the default properties + gene.__upstream = seq.lower() + gene.__message = "No RBS annotated, None found" + + # Try and do an automated shinefind call + sds = sd_finder.list_sds(seq) + if len(sds) > 0: + sd = sds[0] + gene.__upstream = sd_finder.highlight_sd( + seq.lower(), sd["start"], sd["end"] + ) + gene.__message = "Unannotated but valid RBS" + + qc_features.append( + gen_qc_feature( + start, end, "Missing RBS", strand=gene.strand, id_src=gene, type_src="gene" + ) + ) + + bad += 1 + results.append(gene) + results[-1].location = FeatureLocation(results[-1].location.start + 1, results[-1].location.end, results[-1].location.strand) + else: + if len(rbss) > 1: + log.warn("%s RBSs found for gene %s", rbss[0].id, get_gff3_id(gene)) + any_rbss = True + # get first RBS/CDS + cds = list(genes(gene.sub_features, feature_type="CDS"))[0] + rbs = rbss[0] + + # Get the distance between the two + if gene.strand > 0: + distance = cds.location.start - rbs.location.end + else: + distance = rbs.location.start - cds.location.end + + # If the RBS is too far away, annotate that + if distance > lookahead_max: + gene.__message = "RBS too far away (%s nt)" % distance + + qc_features.append( + gen_qc_feature( + rbs.location.start, + rbs.location.end, + gene.__message, + strand=gene.strand, + id_src=gene, + type_src="gene" + ) + ) + + bad += 1 + results.append(gene) + results[-1].location = FeatureLocation(results[-1].location.start + 1, results[-1].location.end, results[-1].location.strand) + else: + good += 1 + + return good, bad, results, qc_features, any_rbss + + +# modified from get_orfs_or_cdss.py +# ----------------------------------------------------------- + + +def require_sd(data, record, chrom_start, sd_min, sd_max): + sd_finder = NaiveSDCaller() + for putative_gene in data: + if putative_gene[2] > 0: # strand + start = chrom_start + putative_gene[0] - sd_max + end = chrom_start + putative_gene[0] - sd_min + else: + start = chrom_start + putative_gene[1] + sd_min + end = chrom_start + putative_gene[1] + sd_max + + (start, end) = __ensure_location_in_bounds( + start=start, end=end, parent_length=len(record) + ) + tmp = gffSeqFeature( + FeatureLocation(start, end, strand=putative_gene[2]), type="domain" + ) + # Get the sequence + seq = str(tmp.extract(record.seq)) + sds = sd_finder.list_sds(seq) + if len(sds) > 0: + yield putative_gene + (start, end) + + +def excessive_gap( + record, + excess=50, + excess_divergent=200, + min_gene=30, + slop=30, + lookahead_min=5, + lookahead_max=15, +): + """ + Identify excessive gaps between gene features. + + Default "excessive" gap size is 10, but that should likely be larger. + """ + results = [] + good = 0 + bad = 0 + + contiguous_regions = [] + + sorted_genes = sorted( + genes(record.features), key=lambda feature: feature.location.start + ) + if len(sorted_genes) == 0: + log.warn("NO GENES FOUND") + return good, bad, results, [] + + current_gene = None + for gene in sorted_genes: + # If the gene's start is contiguous to the "current_gene", then we + # extend current_gene + for cds in genes(gene.sub_features, feature_type="CDS"): + if current_gene is None: + current_gene = [int(cds.location.start), int(cds.location.end)] + + if cds.location.start <= current_gene[1] + excess: + # Don't want to decrease size + if int(cds.location.end) >= current_gene[1]: + current_gene[1] = int(cds.location.end) + else: + # If it's discontiguous, we append the region and clear. + contiguous_regions.append(current_gene) + current_gene = [int(cds.location.start), int(cds.location.end)] + + # This generally expected that annotations would NOT continue unto the end + # of the genome, however that's a bug, and we can make it here with an + # empty contiguous_regions list + contiguous_regions.append(current_gene) + + for i in range(len(contiguous_regions) + 1): + if i == 0: + a = (1, 1) + b = contiguous_regions[i] + elif i >= len(contiguous_regions): + a = contiguous_regions[i - 1] + b = (len(record.seq), None) + else: + a = contiguous_regions[i - 1] + b = contiguous_regions[i] + + gap_size = abs(b[0] - a[1]) + + if gap_size > min(excess, excess_divergent): + a_feat_l = itertools.islice( + feature_lambda( + sorted_genes, + feature_test_location, + {"loc": a[1]}, + subfeatures=False, + ), + 1, + ) + b_feat_l = itertools.islice( + feature_lambda( + sorted_genes, + feature_test_location, + {"loc": b[0]}, + subfeatures=False, + ), + 1, + ) + + try: + a_feat = next(a_feat_l) + except StopIteration: + # Triggers on end of genome + a_feat = None + try: + b_feat = next(b_feat_l) + except StopIteration: + # Triggers on end of genome + b_feat = None + + result_obj = [ + a[1], + b[0], + None if not a_feat else a_feat.location.strand, + None if not b_feat else b_feat.location.strand, + ] + + if a_feat is None or b_feat is None: + if gap_size > excess_divergent: + results.append(result_obj) + else: + if ( + a_feat.location.strand == b_feat.location.strand + and gap_size > excess + ): + results.append(result_obj) + elif ( + a_feat.location.strand != b_feat.location.strand + and gap_size > excess_divergent + ): + results.append(result_obj) + + better_results = [] + qc_features = [] + of = MGAFinder(11, "CDS", "closed", min_gene) + # of = OrfFinder(11, 'CDS', 'closed', min_gene) + + for result_obj in results: + start = result_obj[0] + end = result_obj[1] + f = gen_qc_feature(start, end, "Excessive gap, %s bases" % abs(end - start), type_src="gene") + qc_features.append(f) + putative_genes = of.putative_genes_in_sequence( + str(record[start - slop : end + slop].seq) + ) + putative_genes = list( + require_sd(putative_genes, record, start, lookahead_min, lookahead_max) + ) + for putative_gene in putative_genes: + # (0, 33, 1, 'ATTATTTTATCAAAACGCTTTACAATCTTTTAG', 'MILSKRFTIF', 123123, 124324) + possible_gene_start = start + putative_gene[0] + possible_gene_end = start + putative_gene[1] + + if possible_gene_start <= possible_gene_end: + possible_cds = gffSeqFeature( + FeatureLocation( + possible_gene_start, possible_gene_end, strand=putative_gene[2] + ), + type="CDS", + ) + else: + possible_cds = gffSeqFeature( + FeatureLocation( + possible_gene_end, possible_gene_start, strand=putative_gene[2], + ), + type="CDS", + ) + + # Now we adjust our boundaries for the RBS that's required + # There are only two cases, the rbs is upstream of it, or downstream + if putative_gene[5] < possible_gene_start: + possible_gene_start = putative_gene[5] + else: + possible_gene_end = putative_gene[6] + + if putative_gene[5] <= putative_gene[6]: + possible_rbs = gffSeqFeature( + FeatureLocation( + putative_gene[5], putative_gene[6], strand=putative_gene[2] + ), + type="Shine_Dalgarno_sequence", + ) + else: + possible_rbs = gffSeqFeature( + FeatureLocation( + putative_gene[6], putative_gene[5], strand=putative_gene[2], + ), + type="Shine_Dalgarno_sequence", + ) + + if possible_gene_start <= possible_gene_end: + possible_gene = gffSeqFeature( + FeatureLocation( + possible_gene_start, possible_gene_end, strand=putative_gene[2] + ), + type="gene", + qualifiers={"note": ["Possible gene"]}, + ) + else: + possible_gene = gffSeqFeature( + FeatureLocation( + possible_gene_end, possible_gene_start, strand=putative_gene[2], + ), + type="gene", + qualifiers={"note": ["Possible gene"]}, + ) + possible_gene.sub_features = [possible_rbs, possible_cds] + qc_features.append(possible_gene) + + better_results.append(result_obj + [len(putative_genes)]) + + # Bad gaps are those with more than zero possible genes found + bad = len([x for x in better_results if x[2] > 0]) + # Generally taking "good" here as every possible gap in the genome + # Thus, good is TOTAL - gaps + good = len(sorted_genes) + 1 - bad + # and bad is just gaps + return good, bad, better_results, qc_features + + +def phi(x): + """Standard phi function used in calculation of normal distribution""" + return math.exp(-1 * math.pi * x * x) + + +def norm(x, mean=0, sd=1): + """ + Normal distribution. Given an x position, a mean, and a standard + deviation, calculate the "y" value. Useful for score scaling + + Modified to multiply by SD. This means even at sd=5, norm(x, mean) where x = mean => 1, rather than 1/5. + """ + return (1 / float(sd)) * phi(float(x - mean) / float(sd)) * sd + + +def coding_density(record, mean=92.5, sd=20): + """ + Find coding density in the genome + """ + feature_lengths = 0 + + for gene_a in coding_genes(record.features): + feature_lengths += sum( + [len(x) for x in genes(gene_a.sub_features, feature_type="CDS")] + ) + + avgFeatLen = float(feature_lengths) / float(len(record.seq)) + return int(norm(100 * avgFeatLen, mean=mean, sd=sd) * 100), int(100 * avgFeatLen) + + +def exact_coding_density(record, mean=92.5, sd=20): + """ + Find exact coding density in the genome + """ + data = numpy.zeros(len(record.seq)) + + for gene_a in coding_genes(record.features): + for cds in genes(gene_a.sub_features, feature_type="CDS"): + for i in range(cds.location.start, cds.location.end + 1): + data[i - 1] = 1 + + return float(sum(data)) / len(data) + + +def excessive_overlap(record, excess=15, excess_divergent=30): + """ + Find excessive overlaps in the genome, where excessive is defined as 15 + bases for same strand, and 30 for divergent translation. + + Does a product of all the top-level features in the genome, and calculates + gaps. + """ + results = [] + bad = 0 + qc_features = [] + + for (gene_a, gene_b) in itertools.combinations(coding_genes(record.features), 2): + # Get the CDS from the subfeature list. + # TODO: not recursive. + cds_a = [x for x in genes(gene_a.sub_features, feature_type="CDS")] + cds_b = [x for x in genes(gene_b.sub_features, feature_type="CDS")] + + if len(cds_a) == 0: + log.warn("Gene missing subfeatures; %s", get_gff3_id(gene_a)) + continue + + if len(cds_b) == 0: + log.warn("Gene missing subfeatures; %s", get_gff3_id(gene_b)) + continue + + cds_a = cds_a[0] + cds_b = cds_b[0] + + # Set of locations that are included in the CDS of A and the + # CDS of B + cas = set(range(cds_a.location.start, cds_a.location.end)) + cbs = set(range(cds_b.location.start, cds_b.location.end)) + + # Here we calculate the intersection between the two sets, and + # if it's larger than our excessive size, we know that they're + # overlapped + ix = cas.intersection(cbs) + + if (cds_a.location.strand == cds_b.location.strand and len(ix) >= excess) or ( + cds_a.location.strand != cds_b.location.strand + and len(ix) >= excess_divergent + ): + bad += float(len(ix)) / float(min(excess, excess_divergent)) + qc_features.append( + gen_qc_feature(min(ix), max(ix), "Excessive Overlap", id_src=gene_a, type_src="gene") + ) + results.append((gene_a, gene_b, min(ix), max(ix))) + + # Good isn't accurate here. It's a triangle number and just ugly, but we + # don't care enough to fix it. + good = len(list(coding_genes(record.features))) + good = int(good - bad) + if good < 0: + good = 0 + return good, int(bad), results, qc_features + + +def get_encouragement(score): + """Some text telling the user how they did + """ + for encouragement in ENCOURAGEMENT: + if score > encouragement[0]: + return encouragement[1] + return ENCOURAGEMENT[-1][1] + + +def genome_overview(record): + """Genome overview + """ + data = { + "genes": { + "count": 0, + "bases": len(record.seq), + "density": 0, # genes / kb + "avg_len": [], + "comp": {"A": 0, "C": 0, "G": 0, "T": 0}, + }, + "overall": { + "comp": { + "A": record.seq.count("A") + record.seq.count("a"), + "C": record.seq.count("C") + record.seq.count("c"), + "G": record.seq.count("G") + record.seq.count("g"), + "T": record.seq.count("T") + record.seq.count("t"), + }, + "gc": 0, + }, + } + gene_features = list(coding_genes(record.features)) + data["genes"]["count"] = len(gene_features) + + for feat in gene_features: + data["genes"]["comp"]["A"] += feat.extract(record).seq.count("A") + feat.extract(record).seq.count("a") + data["genes"]["comp"]["C"] += feat.extract(record).seq.count("C") + feat.extract(record).seq.count("c") + data["genes"]["comp"]["T"] += feat.extract(record).seq.count("T") + feat.extract(record).seq.count("t") + data["genes"]["comp"]["G"] += feat.extract(record).seq.count("G") + feat.extract(record).seq.count("g") + #data["genes"]["bases"] += len(feat) + data["genes"]["avg_len"].append(len(feat)) + + data["genes"]["avg_len"] = float(sum(data["genes"]["avg_len"])) / len(gene_features) + data["overall"]["gc"] = float( + data["overall"]["comp"]["G"] + data["overall"]["comp"]["C"] + ) / len(record.seq) + return data + + +def find_morons(record): + """Locate morons in the genome + + Don't even know why... + + TODO: remove? Idk. + """ + results = [] + good = 0 + bad = 0 + + gene_features = list(coding_genes(record.features)) + for i, gene in enumerate(gene_features): + two_left = gene_features[i - 2 : i] + two_right = gene_features[i + 1 : i + 1 + 2] + strands = [x.strand for x in two_left] + [x.strand for x in two_right] + anticon = [x for x in strands if x != gene.strand] + + if len(anticon) == 4: + has_rbs = [x.type == "Shine_Dalgarno_sequence" for x in gene.sub_features] + if any(has_rbs): + rbs = [ + x for x in gene.sub_features if x.type == "Shine_Dalgarno_sequence" + ][0] + rbs_msg = str(rbs.extract(record.seq)) + else: + rbs_msg = "No RBS Available" + results.append((gene, two_left, two_right, rbs_msg)) + bad += 1 + else: + good += 1 + return good, bad, results, [] + + +def bad_gene_model(record): + """Find features without product + """ + results = [] + good = 0 + bad = 0 + qc_features = [] + + for gene in coding_genes(record.features): + exons = [ + x for x in genes(gene.sub_features, feature_type="exon") if len(x) > 10 + ] + CDSs = [x for x in genes(gene.sub_features, feature_type="CDS")] + if len(exons) >= 1 and len(CDSs) >= 1: + if len(exons) != len(CDSs): + results.append( + ( + get_gff3_id(gene), + None, + None, + "Mismatched number of exons and CDSs in gff3 representation", + ) + ) + qc_features.append( + gen_qc_feature( + gene.location.start, + gene.location.end, + "Mismatched number of exons and CDSs in gff3 representation", + strand=gene.strand, + id_src=gene, + type_src="gene" + ) + ) + bad += 1 + else: + for (exon, cds) in zip( + sorted(exons, key=lambda x: x.location.start), + sorted(CDSs, key=lambda x: x.location.start), + ): + if len(exon) != len(cds): + results.append( + ( + get_gff3_id(gene), + exon, + cds, + "CDS does not extend to full length of gene", + ) + ) + qc_features.append( + gen_qc_feature( + exon.location.start, + exon.location.end, + "CDS does not extend to full length of gene", + strand=exon.strand, + id_src=gene, + type_src="CDS" + ) + ) + bad += 1 + else: + good += 1 + else: + log.warn("Could not handle %s, %s", exons, CDSs) + results.append( + ( + get_gff3_id(gene), + None, + None, + "{0} exons, {1} CDSs".format(len(exons), len(CDSs)), + ) + ) + + return good, len(results) + bad, results, qc_features + + +def weird_starts(record): + """Find features without product + """ + good = 0 + bad = 0 + qc_features = [] + results = [] + + overall = {} + for gene in coding_genes(record.features): + seq = [x for x in genes(gene.sub_features, feature_type="CDS")] + if len(seq) == 0: + log.warn("No CDS for gene %s", get_gff3_id(gene)) + continue + else: + seq = seq[0] + + seq_str = str(seq.extract(record.seq)) + start_codon = seq_str[0:3] + if len(seq_str) < 3: + sys.stderr.write("Fatal Error: CDS of length less than 3 at " + str(seq.location) + '\n') + exit(2) +# if len(seq_str) % 3 != 0: +# if len(seq_str) < 3: +# stop_codon = seq_str[-(len(seq_str))] +# else: +# stop_codon = seq_str[-3] +# +# log.warn("CDS at %s length is not a multiple of three (Length = %d)", get_gff3_id(gene), len(seq_str)) +# seq.__error = "Bad CDS Length" +# results.append(seq) +# qc_features.append( +# gen_qc_feature( +# s, e, "Bad Length", strand=seq.strand, id_src=gene +# ) +# ) +# bad += 1 +# seq.__start = start_codon +# seq.__stop = stop_codon +# continue + + stop_codon = seq_str[-3] + seq.__start = start_codon + seq.__stop = stop_codon + if start_codon not in overall: + overall[start_codon] = 1 + else: + overall[start_codon] += 1 + + if start_codon not in ("ATG", "TTG", "GTG"): + log.warn("Weird start codon (%s) on %s", start_codon, get_gff3_id(gene)) + seq.__error = "Unusual start codon %s" % start_codon + + s = 0 + e = 0 + if seq.strand > 0: + s = seq.location.start + e = seq.location.start + 3 + else: + s = seq.location.end + e = seq.location.end - 3 + + results.append(seq) + results[-1].location = FeatureLocation(results[-1].location.start + 1, results[-1].location.end, results[-1].location.strand) + qc_features.append( + gen_qc_feature( + s, e, "Weird start codon", strand=seq.strand, id_src=gene, type_src="gene" + ) + ) + bad += 1 + else: + good += 1 + + return good, bad, results, qc_features, overall + + +def missing_genes(record): + """Find features without product + """ + results = [] + good = 0 + bad = 0 + qc_features = [] + + for gene in coding_genes(record.features): + if gene.qualifiers.get("cpt_source", [None])[0] == "CPT_GENE_MODEL_CORRECTION": + results.append(gene) + bad += 1 + else: + good += 1 + + return good, bad, results, qc_features + + +def gene_model_correction_issues(record): + """Find features that have issues from the gene model correction step. + These have qualifiers beginning with CPT_GMS + """ + results = [] + good = 0 + bad = 0 + qc_features = [] + + # For each gene + for gene in coding_genes(record.features): + # Get the list of child CDSs + cdss = [x for x in genes(gene.sub_features, feature_type="CDS")] + # And our matching qualifiers + gene_data = [(k, v) for (k, v) in gene.qualifiers.items() if k == "cpt_gmc"] + # If there are problems with ONLY the parent, let's complain + local_results = [] + local_qc_features = [] + for x in gene_data: + if "Missing Locus Tag" in x[1]: + # Missing locus tag is an either or thing, if it hits here + # there shouldn't be anything else wrong with it. + + # Obviously missing so we remove it + gene.qualifiers["locus_tag"] = [""] + # Translation from bp_genbank2gff3.py + cdss[0].qualifiers["locus_tag"] = cdss[0].qualifiers["Name"] + # Append our results + local_results.append((gene, cdss[0], "Gene is missing a locus_tag")) + local_qc_features.append( + gen_qc_feature( + gene.location.start, + gene.location.end, + "Gene is missing a locus_tag", + strand=gene.strand, + type_src="gene" + ) + ) + + # We need to alert on any child issues as well. + for cds in cdss: + cds_data = [ + (k, v[0]) for (k, v) in cds.qualifiers.items() if k == "cpt_gmc" + ] + if len(gene_data) == 0 and len(cds_data) == 0: + # Alles gut + pass + else: + for _, problem in cds_data: + if problem == "BOTH Missing Locus Tag": + gene.qualifiers["locus_tag"] = [""] + cds.qualifiers["locus_tag"] = [""] + local_results.append( + (gene, cds, "Both gene and CDS are missing locus tags") + ) + local_qc_features.append( + gen_qc_feature( + cds.location.start, + cds.location.end, + "CDS is missing a locus_tag", + strand=cds.strand, + type_src="CDS" + ) + ) + local_qc_features.append( + gen_qc_feature( + gene.location.start, + gene.location.end, + "Gene is missing a locus_tag", + strand=gene.strand, + type_src="gene" + ) + ) + elif problem == "Different locus tag from associated gene.": + gene.qualifiers["locus_tag"] = gene.qualifiers["Name"] + cds.qualifiers["locus_tag"] = cds.qualifiers["cpt_gmc_locus"] + local_results.append( + (gene, cds, "Gene and CDS have differing locus tags") + ) + local_qc_features.append( + gen_qc_feature( + gene.location.start, + gene.location.end, + "Gene and CDS have differing locus tags", + strand=gene.strand, + type_src="gene" + ) + ) + elif problem == "Missing Locus Tag": + # Copy this over + gene.qualifiers["locus_tag"] = gene.qualifiers["Name"] + # This one is missing + cds.qualifiers["locus_tag"] = [""] + local_results.append((gene, cds, "CDS is missing a locus_tag")) + local_qc_features.append( + gen_qc_feature( + cds.location.start, + cds.location.end, + "CDS is missing a locus_tag", + strand=cds.strand, + type_src="CDS" + ) + ) + else: + log.warn("Cannot handle %s", problem) + + if len(local_results) > 0: + bad += 1 + else: + good += 1 + + qc_features.extend(local_qc_features) + results.extend(local_results) + return good, bad, results, qc_features + + +def missing_tags(record): + """Find features without product + """ + results = [] + good = 0 + bad = 0 + qc_features = [] + + for gene in coding_genes(record.features): + cds = [x for x in genes(gene.sub_features, feature_type="CDS")] + if len(cds) == 0: + log.warn("Gene missing CDS subfeature %s", get_gff3_id(gene)) + continue + + cds = cds[0] + + if "product" not in cds.qualifiers: + log.info("Missing product tag on %s", get_gff3_id(gene)) + qc_features.append( + gen_qc_feature( + cds.location.start, + cds.location.end, + "Missing product tag", + strand=cds.strand, + type_src="CDS" + ) + ) + results.append(cds) + bad += 1 + else: + good += 1 + + return good, bad, results, qc_features + + +def evaluate_and_report( + annotations, + genome, + gff3=None, + tbl=None, + sd_min=5, + sd_max=15, + min_gene_length=30, + excessive_gap_dist=50, + excessive_gap_divergent_dist=200, + excessive_overlap_dist=25, + excessive_overlap_divergent_dist=50, + reportTemplateName="phage_annotation_validator.html", +): + """ + Generate our HTML evaluation of the genome + """ + # Get features from GFF file + seq_dict = SeqIO.to_dict(SeqIO.parse(genome, "fasta")) + # Get the first GFF3 record + # TODO: support multiple GFF3 files. + mostFeat = 0 + for rec in list(gffParse(annotations, base_dict=seq_dict)): + if len(rec.features) > mostFeat: + mostFeat = len(rec.features) + record = rec + + gff3_qc_record = SeqRecord(record.id, id=record.id) + gff3_qc_record.features = [] + gff3_qc_features = [] + + log.info("Locating missing RBSs") + # mb_any = "did they annotate ANY rbss? if so, take off from score." + mb_good, mb_bad, mb_results, mb_annotations, mb_any = missing_rbs( + record, lookahead_min=sd_min, lookahead_max=sd_max + ) + gff3_qc_features += mb_annotations + + log.info("Locating excessive gaps") + eg_good, eg_bad, eg_results, eg_annotations = excessive_gap( + record, + excess=excessive_gap_dist, + excess_divergent=excessive_gap_divergent_dist, + min_gene=min_gene_length, + slop=excessive_overlap_dist, + lookahead_min=sd_min, + lookahead_max=sd_max, + ) + gff3_qc_features += eg_annotations + + log.info("Locating excessive overlaps") + eo_good, eo_bad, eo_results, eo_annotations = excessive_overlap( + record, + excess=excessive_overlap_dist, + excess_divergent=excessive_overlap_divergent_dist, + ) + gff3_qc_features += eo_annotations + + log.info("Locating morons") + mo_good, mo_bad, mo_results, mo_annotations = find_morons(record) + gff3_qc_features += mo_annotations + + log.info("Locating missing tags") + mt_good, mt_bad, mt_results, mt_annotations = missing_tags(record) + gff3_qc_features += mt_annotations + + log.info("Locating missing gene features") + mg_good, mg_bad, mg_results, mg_annotations = missing_genes(record) + gff3_qc_features += mg_annotations + + log.info("Determining coding density") + cd, cd_real = coding_density(record) + + log.info("Locating weird starts") + ws_good, ws_bad, ws_results, ws_annotations, ws_overall = weird_starts(record) + gff3_qc_features += ws_annotations + + log.info("Locating bad gene models") + gm_good, gm_bad, gm_results, gm_annotations = bad_gene_model(record) + if gm_good + gm_bad == 0: + gm_bad = 1 + + log.info("Locating more bad gene models") + gmc_good, gmc_bad, gmc_results, gmc_annotations = gene_model_correction_issues( + record + ) + if gmc_good + gmc_bad == 0: + gmc_bad = 1 + + good_scores = [eg_good, eo_good, mt_good, ws_good, gm_good, gmc_good] + bad_scores = [eg_bad, eo_bad, mt_bad, ws_bad, gm_bad, gmc_bad] + + # Only if they tried to annotate RBSs do we consider them. + if mb_any: + good_scores.append(mb_good) + bad_scores.append(mb_bad) + subscores = [] + + for (g, b) in zip(good_scores, bad_scores): + if g + b == 0: + s = 0 + else: + s = int(100 * float(g) / (float(b) + float(g))) + subscores.append(s) + subscores.append(cd) + + score = int(float(sum(subscores)) / float(len(subscores))) + + # This is data that will go into our HTML template + kwargs = { + "upstream_min": sd_min, + "upstream_max": sd_max, + "record_name": record.id, + "record_nice_name": nice_name(record), + "params": { + "sd_min": sd_min, + "sd_max": sd_max, + "min_gene_length": min_gene_length, + "excessive_gap_dist": excessive_gap_dist, + "excessive_gap_divergent_dist": excessive_gap_divergent_dist, + "excessive_overlap_dist": excessive_overlap_dist, + "excessive_overlap_divergent_dist": excessive_overlap_divergent_dist, + }, + "score": score, + "encouragement": get_encouragement(score), + "genome_overview": genome_overview(record), + "rbss_annotated": mb_any, + "missing_rbs": mb_results, + "missing_rbs_good": mb_good, + "missing_rbs_bad": mb_bad, + "missing_rbs_score": 0 + if mb_good + mb_bad == 0 + else (100 * mb_good / (mb_good + mb_bad)), + "excessive_gap": eg_results, + "excessive_gap_good": eg_good, + "excessive_gap_bad": eg_bad, + "excessive_gap_score": 0 + if eo_good + eo_bad == 0 + else (100 * eo_good / (eo_good + eo_bad)), + "excessive_overlap": eo_results, + "excessive_overlap_good": eo_good, + "excessive_overlap_bad": eo_bad, + "excessive_overlap_score": 0 + if eo_good + eo_bad == 0 + else (100 * eo_good / (eo_good + eo_bad)), + "morons": mo_results, + "morons_good": mo_good, + "morons_bad": mo_bad, + "morons_score": 0 + if mo_good + mo_bad == 0 + else (100 * mo_good / (mo_good + mo_bad)), + "missing_tags": mt_results, + "missing_tags_good": mt_good, + "missing_tags_bad": mt_bad, + "missing_tags_score": 0 + if mt_good + mt_bad == 0 + else (100 * mt_good / (mt_good + mt_bad)), + "missing_genes": mg_results, + "missing_genes_good": mg_good, + "missing_genes_bad": mg_bad, + "missing_genes_score": 0 + if mg_good + mg_bad == 0 + else (100 * mg_good / (mg_good + mg_bad)), + "weird_starts": ws_results, + "weird_starts_good": ws_good, + "weird_starts_bad": ws_bad, + "weird_starts_overall": ws_overall, + "weird_starts_overall_sorted_keys": sorted( + ws_overall, reverse=True, key=lambda x: ws_overall[x] + ), + "weird_starts_score": 0 + if ws_good + ws_bad == 0 + else (100 * ws_good / (ws_good + ws_bad)), + "gene_model": gm_results, + "gene_model_good": gm_good, + "gene_model_bad": gm_bad, + "gene_model_score": 0 + if gm_good + gm_bad == 0 + else (100 * gm_good / (gm_good + gm_bad)), + "gene_model_correction": gmc_results, + "gene_model_correction_good": gmc_good, + "gene_model_correction_bad": gmc_bad, + "gene_model_correction_score": 0 + if gmc_good + gmc_bad == 0 + else (100 * gmc_good / (gmc_good + gmc_bad)), + "coding_density": cd, + "coding_density_exact": exact_coding_density(record), + "coding_density_real": cd_real, + "coding_density_score": cd, + } + + with open(tbl, "w") as handle: + kw_subset = {} + for key in kwargs: + if ( + key in ("score", "record_name") + or "_good" in key + or "_bad" in key + or "_overall" in key + ): + kw_subset[key] = kwargs[key] + json.dump(kw_subset, handle) + + with open(gff3, "w") as handle: + gff3_qc_record.features = gff3_qc_features + gff3_qc_record.annotations = {} + gffWrite([gff3_qc_record], handle) + + def nice_strand(direction): + # It is somehow possible for whole gffSeqFeature objects to end up in here, apparently at the gene level + if "SeqFeature" in str(type(direction)): + direction = direction.location.strand + if direction > 0: + return "→"#.decode("utf-8") + else: + return "←"#.decode("utf-8") + + def nice_strand_tex(direction): + if "SeqFeature" in str(type(direction)): + direction = direction.location.strand + if direction > 0: + return "$\\rightarrow$" + else: + return "$\\leftarrow$" + + def texify(data): + return data.replace("_", "\\_").replace("$", "\\$") + + def length(data): + return len(data) + + def my_encode(data): + return str(data)#.encode("utf-8") + + def my_decode(data): + # For production + return str(data)#.decode("utf-8") + # For local testing. No, I do not understand. + return str(data)#.encode("utf-8")).decode("utf-8") + + env = Environment( + loader=FileSystemLoader(SCRIPT_PATH), trim_blocks=True, lstrip_blocks=True + ) + env.filters.update( + { + "nice_id": get_gff3_id, + "nice_strand": nice_strand, + "nice_strand_tex": nice_strand_tex, + "texify": texify, + "length": length, + "encode": my_encode, + "decode": my_decode, + } + ) + tpl = env.get_template(reportTemplateName) + return tpl.render(**kwargs)#.encode("utf-8") + + +if __name__ == "__main__": + parser = argparse.ArgumentParser( + description="rebase gff3 features against parent locations", epilog="" + ) + parser.add_argument( + "annotations", type=argparse.FileType("r"), help="Parent GFF3 annotations" + ) + parser.add_argument("genome", type=argparse.FileType("r"), help="Genome Sequence") + parser.add_argument( + "--gff3", type=str, help="GFF3 Annotations", default="qc_annotations.gff3" + ) + parser.add_argument( + "--tbl", + type=str, + help="Table for noninteractive parsing", + default="qc_results.json", + ) + + parser.add_argument( + "--sd_min", + type=int, + help="Minimum distance from gene start for an SD to be", + default=5, + ) + parser.add_argument( + "--sd_max", + type=int, + help="Maximum distance from gene start for an SD to be", + default=15, + ) + + parser.add_argument( + "--min_gene_length", + type=int, + help="Minimum length for a putative gene call (AAs)", + default=30, + ) + + parser.add_argument( + "--excessive_overlap_dist", + type=int, + help="Excessive overlap for genes in same direction", + default=25, + ) + parser.add_argument( + "--excessive_overlap_divergent_dist", + type=int, + help="Excessive overlap for genes in diff directions", + default=50, + ) + + parser.add_argument( + "--excessive_gap_dist", + type=int, + help="Maximum distance between two genes", + default=40, + ) + parser.add_argument( + "--excessive_gap_divergent_dist", + type=int, + help="Maximum distance between two divergent genes", + default=200, + ) + + parser.add_argument( + "--reportTemplateName", + help="Report template file name", + default="phageqc_report_full.html", + ) + + args = parser.parse_args() + + sys.stdout.write(evaluate_and_report(**vars(args)))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cpt_phageqc_annotation/phage_annotation_validator.xml Fri Jun 17 13:00:50 2022 +0000 @@ -0,0 +1,102 @@ +<?xml version="1.0"?> +<tool id="edu.tamu.cpt2.phage.annotation_validator" name="Phage QC" version="1.9.0" profile="16.04"> + <description>validate phage annotations</description> + <macros> + <import>macros.xml</import> + <import>cpt-macros.xml</import> + </macros> + <requirements> + <requirement type="package" version="3.6">python</requirement> + <requirement type="package" version="1.77">biopython</requirement> + <requirement type="package" version="1.1.7">cpt_gffparser</requirement> + <requirement type="package" version="0.12.0">python-levenshtein</requirement> + <requirement type="package" version="2019.06.08">regex</requirement> + <requirement type="package">metagene_annotator</requirement> + <requirement type="package" version="2.10.1">jinja2</requirement> + <requirement type="package" version="1.11">numpy</requirement> + </requirements> + <command detect_errors="aggressive"><![CDATA[ +@GENOME_SELECTOR_PRE@ + +python $__tool_directory__/phage_annotation_validator.py +$gff3_data +@GENOME_SELECTOR@ + +--gff3 $gff3 + +--sd_min $sd_min +--sd_max $sd_max + +--min_gene_length $min_gene + +--excessive_overlap_dist $eod +--excessive_overlap_divergent_dist $eodd + +--excessive_gap_dist $egd +--excessive_gap_divergent_dist $egdd + +--reportTemplateName $report_format + +> $output; + +#if ".tex" in str($report_format): + mv $output tmp.tex; + docker run --rm -i --user="1002:1002" --net=none -v \$PWD:/data blang/latex pdflatex tmp.tex && + docker run --rm -i --user="1002:1002" --net=none -v \$PWD:/data blang/latex pdflatex tmp.tex && + mv tmp.pdf $output; +#end if +]]></command> + <inputs> + <expand macro="gff3_input" /> + <expand macro="genome_selector" /> + + <param label="Minimum distance for SDs (bp)" name="sd_min" type="integer" value="5" /> + <param label="Maximum distance for SDs (bp)" name="sd_max" type="integer" value="15" /> + + <param label="Minimum length of naively called ORFs in gaps (in AAs)" name="min_gene" type="integer" value="25" /> + + <param label="Excessive overlap distance (non-divergent, bp)" name="eod" type="integer" value="25" /> + <param label="Excessive overlap distance (divergent, bp)" name="eodd" type="integer" value="50" /> + + <param label="Excessive gap distance (non-divergent, bp)" name="egd" type="integer" value="50" /> + <param label="Excessive gap distance (divergent, bp)" name="egdd" type="integer" value="200" /> + + <param label="Report Format" type="select" name="report_format"> + <option value="phageqc_report_full.html" selected="True">Full Report</option> + <option value="phageqc_report_464.html">464 Report</option> + <option value="phageqc_report_genomea.tex">GenomeA PDF Report</option> + <option value="phageqc_report_genomea.html">GenomeA HTML Report</option> + </param> + </inputs> + <outputs> + <data format="html" name="output"> + <change_format> + <when input="report_format" value="phageqc_report_genomea.tex" format="pdf"/> + </change_format> + </data> + <data format="gff3" name="gff3" label="Phage QC annotation track"/> + </outputs> + <tests> + <test> + <param name="gff3_data" value="AY216660.gff3"/> + <param name="genome_fasta" value="AY216660.fasta" /> + <output name="gff3" file="PhageQC_Out.gff3"/> + <output name="output" file="PhageQC_Out.html"/> + </test> + </tests> + <help><![CDATA[ +**What it does** + +Run CPT's Phage Annotation Validator validating the following properties: + +- Missing RBSs +- Missing Gene Features +- Excessive Gaps +- Excessive Overlaps +- Morons +- Weird Start Codons +- Incorrect gene model (when used with our Genbank Gene Model correction tool) + + ]]></help> + <expand macro="citations" /> +</tool>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cpt_phageqc_annotation/phageqc_report_464.html Fri Jun 17 13:00:50 2022 +0000 @@ -0,0 +1,419 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <meta name="description" content=""> + <meta name="author" content=""> + <title>[BICH464] Phage QC on {{record_name}} - {{score}}</title> + <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css"> + <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap-theme.min.css"> + + <style type="text/css"> +/* + * Base structure + */ + +/* Move down content because we have a fixed navbar that is 50px tall */ +body { + padding-top: 50px; +} + +h3:before { + display: block; + content: " "; + margin-top: -50px; + height: 50px; + visibility: hidden; +} + +/* + * Global add-ons + */ + +.sub-header { + padding-bottom: 10px; + border-bottom: 1px solid #eee; +} + +/* + * Top navigation + * Hide default border to remove 1px line. + */ +.navbar-fixed-top { + border: 0; +} + +/* + * Sidebar + */ + +/* Hide for mobile, show later */ +.sidebar { + display: none; +} +@media (min-width: 768px) { + .sidebar { + position: fixed; + top: 51px; + bottom: 0; + left: 0; + z-index: 1000; + display: block; + padding: 20px; + overflow-x: hidden; + overflow-y: auto; /* Scrollable contents if viewport is shorter than content. */ + background-color: #f5f5f5; + border-right: 1px solid #eee; + } +} + +/* Sidebar navigation */ +.nav-sidebar { + margin-right: -21px; /* 20px padding + 1px border */ + margin-bottom: 20px; + margin-left: -20px; +} +.nav-sidebar > li > a { + padding-right: 20px; + padding-left: 20px; +} +.nav-sidebar > .active > a, +.nav-sidebar > .active > a:hover, +.nav-sidebar > .active > a:focus { + color: #fff; + background-color: #428bca; +} + + +/* + * Main content + */ + +.main { + padding: 20px; +} +@media (min-width: 768px) { + .main { + padding-right: 40px; + padding-left: 40px; + } +} +.main .page-header { + margin-top: 0; +} + + +/* + * Placeholder dashboard ideas + */ + +.placeholders { + margin-bottom: 30px; + text-align: center; +} +.placeholders h4 { + margin-bottom: 0; +} +.placeholder { + margin-bottom: 20px; +} +.placeholder img { + display: inline-block; + border-radius: 50%; +} + + + + + + + +/* CUSTOM CSS */ +.spark { + position: relative; + margin:5px; +} +.spark span { + padding: 0px; + padding-left: 20px; + padding-right: 20px; + margin: 5px; + position: relative; +} +.spark .plus { + top: -10px; + background: #aaaaff; +} +.spark .minus { + top: 10px; + background: #ffaaaa; +} +.plus-focus { + top: -10px; + background: blue; +} +.minus-focus { + top: 10px; + background: red; +} + </style> + <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> + <!--[if lt IE 9]> + <script src="//oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> + <script src="//oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> + <![endif]--> + </head> + <body> + + <nav class="navbar navbar-inverse navbar-fixed-top"> + <div class="container-fluid"> + <div class="navbar-header"> + <a class="navbar-brand" href="#">[BICH464] Phage QC on {{record_name}}</a> + </div> + </div> + </nav> + + <div class="container-fluid"> + <div class="row"> + <div class="col-sm-3 col-md-2 sidebar"> + <ul class="nav nav-sidebar"> + <li><a href="#main"><b>Overview</b></a></li> + <li><a href="#bad_gene_starts"><b>Bad Gene Starts</b></a></li> + <li><a href="#missing_rbs"><small>Missing RBS</small></a></li> + <li><a href="#weird_starts"><small>Unusual Start Codons</small></a></li> + <li><a href="#excessive_gaps"><small>Excessive Gaps</small></a></li> + <li><a href="#excessive_overlap"><small>Excessive Overlaps</small></a></li> + <!--<li><a href="#coding_density"><small>Coding Density</small></a></li>--> + <li><a href="#gene_model"><b>Gene Model Issues</b></a></li> + </ul> + </div> + <div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main" id="main"> + <div class="jumbotron"> + <div class="row"> + <div class="col-sm-7"> + <h1>Phage {{record_name}}</h1> + <!--<h2>Score: {{ '%d' % ((gene_model_score + coding_density + excessive_overlap_score + excessive_overlap_score + missing_rbs_score) / 5)}}</h2>--> + </div> + <!--<div class="col-sm-5"> + <table class="table table-striped"> + <thead> + <tr> + <th>Section</th> + <th>Score</th> + </tr> + </thead> + <tbody> + <tr><td>Missing RBS</td><td>{{ '%d' % missing_rbs_score }}%</td></tr> + <tr><td>Excessive Gaps</td><td>{{ '%d' % excessive_gap_score }}%</td></tr> + <tr><td>Excessive Overlap</td><td>{{ '%d' % excessive_overlap_score }}%</td></tr> + <tr><td>Coding Density Score</td><td>{{ '%d' % coding_density }}%</td></tr> + <tr><td>Coding Density Real</td><td>{{ '%0.2f' % (100 * coding_density_exact) }}%</td></tr> + <tr><td>Gene Model Issues</td><td>{{ '%d' % gene_model_score }}%</td></tr> + </tbody> + </table> + </div>--> + </div> + <div class="row"> + <h3>Genome Overview</h3> + <h4>Genes</h4> + <ul> + <li>Count: {{ genome_overview.genes.count }}</li> + <li>Bases: {{ genome_overview.genes.bases }}</li> + <li>Average Length: {{ genome_overview.genes.avg_len | round | int}}</li> + <li>Coding Density: {{ '%0.2f' % (100 * coding_density_exact) }}%</li> + <li>Composition + <ul> + <li>A {{ genome_overview.genes.comp.A }}</li> + <li>C {{ genome_overview.genes.comp.C }}</li> + <li>T {{ genome_overview.genes.comp.T }}</li> + <li>G {{ genome_overview.genes.comp.G }}</li> + </ul> + </li> + </ul> + <h4>Overall</h4> + <ul> + <li>%GC: {{ '%0.2f' % (100 * genome_overview.overall.gc) }}%</li> + <li>Composition + <ul> + <li>A {{ genome_overview.overall.comp.A }}</li> + <li>C {{ genome_overview.overall.comp.C }}</li> + <li>T {{ genome_overview.overall.comp.T }}</li> + <li>G {{ genome_overview.overall.comp.G }}</li> + </ul> + </li> + </ul> + </div> + </div> + + <h2 class="sub-header" id="bad_gene_starts">Gene Starts</h2> + <h3 id="missing_rbs">Genes Missing RBS <small>{{missing_rbs_good}} / {{missing_rbs_good + missing_rbs_bad}}</small></h3> + <p>The following genes have issues with their RBS.</p> + {% if not rbss_annotated %} + <p> + Since you have not annotated any possible RBSs, this does not count off from your overall score. + </p> + {% endif %} + <div class="table-responsive"> + <table class="table table-striped"> + <thead> + <tr> + <th>ID</th> + <th>Location</th> + <th>Error</th> + <th>Upstream (-{{upstream_max}} .. -{{upstream_min}})</th> + </tr> + </thead> + <tbody> + {% for row in missing_rbs %} + {% if "None found" in row.__message %} + <tr> + <td>{{row | nice_id | decode}}</td> + <td>{{row.location.start}}..{{row.location.end}} [{{row.strand}}]</td> + <td>None found</td> + <td><span style="font-family:monospace">{{row.__upstream }}</span></td> + </tr> + {% endif %} + {% endfor %} + </tbody> + </table> + </div> + + <h3 id="weird_starts">Start Codon Usage</h3> + <p>This section covers genes with unusual start codons</p> + <div class="table-responsive"> + <table class="table table-striped"> + <thead> + <tr> + <th>Start Codon</th> + <th>Count</th> + </tr> + </thead> + <tbody> + {% for codon_key in weird_starts_overall_sorted_keys %} + <tr><td>{{ codon_key }}</td><td>{{ weird_starts_overall[codon_key] }}</td></tr> + {% endfor %} + </tbody> + </table> + </div> + + <div class="table-responsive"> + <table class="table table-striped"> + <thead> + <tr> + <th>ID</th> + <th>Location</th> + <th>Error</th> + </tr> + </thead> + <tbody> + {% for row in weird_starts %} + <tr> + <td>{{row | nice_id| decode}}</td> + <td>{{row.location.start}}..{{row.location.end}} [{{row.strand}}]</td> + <td>{{row.qualifiers.get('note', [])}}</td> + </tr> + {% endfor %} + </tbody> + </table> + </div> + + <h3 id="excessive_gaps">Intergenic Gaps</h3> + <p>Phage genomes are under pressure to maintain high coding density. Large intergenic gaps may be a sign of incorrect gene starts or missing genes.</p> + <div class="table-responsive"> + <table class="table table-striped"> + <thead> + <tr> + <th>Region</th> + <th>Size</th> + <th>Bounding Gene Transcription Direction</th> + <th>Message</th> + </tr> + </thead> + <tbody> + {% for row in excessive_gap %} + <tr> + <td>{{row[0]}} .. {{row[1]}}</td> + <td>{{row[1] - row[0]}}</td> + <td>{{row[2] | nice_strand}} {{row[3] | nice_strand}}</td> + <td> + {% if row[4] == 0 %} + {% else %} + {{row[4]}} possible genes found in this region + {% endif %} + </td> + </tr> + {% endfor %} + </tbody> + </table> + </div> + + <h3 id="excessive_overlap">Overlapping Genes</h3> + <p>Large gene overlaps may indicate an incorrect gene start or miscalled gene.</p> + <div class="table-responsive"> + <table class="table table-striped"> + <thead> + <tr> + <th>Feature A</th> + <th>Feature B</th> + <th>Shared Region</th> + <th>Overlap Length</th> + </tr> + </thead> + <tbody> + {% for row in excessive_overlap %} + <tr> + <td>{{row[0] | nice_id | decode}} ({{row[0].location}})</td> + <td>{{row[1] | nice_id | decode}} ({{row[1].location}})</td> + <td>{{row[2]}}..{{row[3]}}</td> + <td>{{row[3] - row[2]}}bp</td> + </tr> + {% endfor %} + </tbody> + </table> + </div> + <!--<h3 id="coding_density">Coding Density Issues <small>{{ coding_density }} / 100</small></h3> + <div class="table-responsive"> + <p> + You have a coding density score of {{ coding_density_real }} which scores + {{ coding_density }} / 100. Most genomes should be in the 90% to + 100% coding density range. Your exact coding density is {{ coding_density_exact }}. + </p> + </div>--> + + <h2 class="sub-header" id="gene_model">Gene Model Issues</h2> + <p>These issues are mostly derived from how Apollo handles the gene model. <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMsAAAAUCAYAAAAjk8nJAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4AIRECEhlCV0dQAAAPBJREFUaN7t20EKgkAUxvFnlBASiBewNm7HldA+ukQH6AhtukBH6ABdIqJtIIS6dVNdoCtMm8CN1gtb6f+3GmQ28/DjzeDoWGutAPhqQAkAnSElQB0n6M9a7ZOwoKV43/015uuWnWW2q8a3Tf1zgDML0DNpepSyvLTfhh1OFBMd34rldzEmlCw7i+eNJYrmnFmAJkXxEBH5GBrCAihDQ1gAZWg44ANKdBaghjGhuO6IbRjwS0joLIAyJOqwrBbVeHulqOieOJ6K708aQ0JnAd6SZKma5/A/C2pfjKA/Fym1t44JCxrD0heEBfgzPkoCSi/B1kHb2fpwrwAAAABJRU5ErkJggg=="></p> + <div class="table-responsive"> + <table class="table table-striped"> + <thead> + <tr> + <th>ID</th> + <th>Exon</th> + <th>CDS</th> + <th>Message</th> + </tr> + </thead> + <tbody> + {% for row in gene_model %} + <tr> + <td>{{row[0]}}</td> + <td>{{row[1].location}}</td> + <td>{{row[2].location}}</td> + <td>{{row[3]}}</td> + </tr> + {% endfor %} + </tbody> + </table> + </div> + + </div> + </div> + </div> + + + <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script> + </body> +</html> +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cpt_phageqc_annotation/phageqc_report_annotation_table.html Fri Jun 17 13:00:50 2022 +0000 @@ -0,0 +1,244 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <meta name="description" content=""> + <meta name="author" content=""> + <title>Annotation Table</title> + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script> + <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" crossorigin="anonymous"> + <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap-theme.min.css" crossorigin="anonymous"> + <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" crossorigin="anonymous"></script> + + <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.11/css/jquery.dataTables.css"> + <script type="text/javascript" charset="utf8" src="https://cdn.datatables.net/1.10.11/js/jquery.dataTables.js"></script> + <style type="text/css"> +/* + * Base structure + */ + +/* Move down content because we have a fixed navbar that is 50px tall */ +body { + padding-top: 50px; +} + +h3:before { + display: block; + content: " "; + margin-top: -50px; + height: 50px; + visibility: hidden; +} + +/* + * Global add-ons + */ + +.sub-header { + padding-bottom: 10px; + border-bottom: 1px solid #eee; +} + +/* + * Top navigation + * Hide default border to remove 1px line. + */ +.navbar-fixed-top { + border: 0; +} + +/* + * Sidebar + */ + +/* Hide for mobile, show later */ +.sidebar { + display: none; +} +@media (min-width: 768px) { + .sidebar { + position: fixed; + top: 51px; + bottom: 0; + left: 0; + z-index: 1000; + display: block; + padding: 20px; + overflow-x: hidden; + overflow-y: auto; /* Scrollable contents if viewport is shorter than content. */ + background-color: #f5f5f5; + border-right: 1px solid #eee; + } +} + +/* Sidebar navigation */ +.nav-sidebar { + margin-right: -21px; /* 20px padding + 1px border */ + margin-bottom: 20px; + margin-left: -20px; +} +.nav-sidebar > li > a { + padding-right: 20px; + padding-left: 20px; +} +.nav-sidebar > .active > a, +.nav-sidebar > .active > a:hover, +.nav-sidebar > .active > a:focus { + color: #fff; + background-color: #428bca; +} + + +/* + * Main content + */ + +.main { + padding: 20px; +} +@media (min-width: 768px) { + .main { + padding-right: 40px; + padding-left: 40px; + } +} +.main .page-header { + margin-top: 0; +} + + +/* + * Placeholder dashboard ideas + */ + +.placeholders { + margin-bottom: 30px; + text-align: center; +} +.placeholders h4 { + margin-bottom: 0; +} +.placeholder { + margin-bottom: 20px; +} +.placeholder img { + display: inline-block; + border-radius: 50%; +} + +td.moron { + font-size: 150%; + padding: 0px; + color: gray; +} +.strand_emph { + text-decoration: underline; + color: black; +} + + </style> + <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> + <!--[if lt IE 9]> + <script src="//oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> + <script src="//oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> + <![endif]--> + </head> + <body> + + <nav class="navbar navbar-inverse navbar-fixed-top"> + <div class="container-fluid"> + <div class="navbar-header"> + <a class="navbar-brand" href="#">Annotation Table</a> + </div> + </div> + </nav> + + <div class="container-fluid"> + <div class="row"> + <div class="col-md-12 main" id="main"> + <ul class="nav nav-tabs" role="tablist" id="myTabs"> + <li role="presentation" class="active"><a href="#overview" role="tab" data-toggle="tab">Overview</a></li> + {% for (record, data) in annotation_table_data %} + <li role="presentation"><a href="#{{ record.id }}" role="tab" data-toggle="tab">{{ record.id }}</a></li> + {% endfor %} + </ul> + + <!-- Tab panes --> + <div class="tab-content"> + <div role="tabpanel" class="tab-pane active" id="overview"> + Data on each organism will be accessible from the tabs above. + </div> + {% for (record, data) in annotation_table_data %} + <div role="tabpanel" class="tab-pane" id="{{ record.id }}"> + <table class="table table-striped" id="data"> + <thead> + <tr> + {% for col in annotation_table_col_names %} + <th>{{ col[0] }}</th> + {% endfor %} + </tr> + </thead> + <tbody> + {% for row in data %} + <tr> + {% for col in row %} + <td>{% if col is not string %}<ul>{% for val in col %}<li>{{ val }}</li>{% endfor %}</ul>{% else %}{{ col }}{% endif %}</td> + {% endfor %} + </tr> + {% endfor %} + </tbody> + </table> + </div> + {% endfor %} + </div> + </div> + </div> + </div> + + <script type="text/javascript"> + $(document).ready( function () { + + + +$('#myTabs a').click(function (e) { + e.preventDefault() + $(this).tab('show') +}) + + + +jQuery.fn.dataTable.ext.type.detect.unshift( function ( data ) { + if ( typeof data !== 'string' ) { + return null; + } + + var matches = data.match(/^(\d+)\.\.(\d+)/); + return matches ? 'genomic' : null; +} ); + + + +jQuery.extend( jQuery.fn.dataTableExt.oSort, { + "genomic-pre": function ( a ) { + var matches = a.match(/^(\d+)\.\.(\d+)/); + console.log(a + " " + matches[1]); + return parseInt(matches[1]); + }, + + "genomic-asc": function ( a, b ) { + return ((a < b) ? -1 : ((a > b) ? 1 : 0)); + }, + + "genomic-desc": function ( a, b ) { + return ((a < b) ? 1 : ((a > b) ? -1 : 0)); + } +} ); + + $('table').DataTable(); + }); + </script> + </body> +</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cpt_phageqc_annotation/phageqc_report_full.html Fri Jun 17 13:00:50 2022 +0000 @@ -0,0 +1,412 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <meta name="description" content=""> + <meta name="author" content=""> + <title>Phage QC on {{record_name}} - {{score}}</title> + <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css"> + <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap-theme.min.css"> + + <style type="text/css"> +/* + * Base structure + */ + +/* Move down content because we have a fixed navbar that is 50px tall */ +body { + padding-top: 50px; +} + +h3:before { + display: block; + content: " "; + margin-top: -50px; + height: 50px; + visibility: hidden; +} + +/* + * Global add-ons + */ + +.sub-header { + padding-bottom: 10px; + border-bottom: 1px solid #eee; +} + +/* + * Top navigation + * Hide default border to remove 1px line. + */ +.navbar-fixed-top { + border: 0; +} + +/* + * Sidebar + */ + +/* Hide for mobile, show later */ +.sidebar { + display: none; +} +@media (min-width: 768px) { + .sidebar { + position: fixed; + top: 51px; + bottom: 0; + left: 0; + z-index: 1000; + display: block; + padding: 20px; + overflow-x: hidden; + overflow-y: auto; /* Scrollable contents if viewport is shorter than content. */ + background-color: #f5f5f5; + border-right: 1px solid #eee; + } +} + +/* Sidebar navigation */ +.nav-sidebar { + margin-right: -21px; /* 20px padding + 1px border */ + margin-bottom: 20px; + margin-left: -20px; +} +.nav-sidebar > li > a { + padding-right: 20px; + padding-left: 20px; +} +.nav-sidebar > .active > a, +.nav-sidebar > .active > a:hover, +.nav-sidebar > .active > a:focus { + color: #fff; + background-color: #428bca; +} + + +/* + * Main content + */ + +.main { + padding: 20px; +} +@media (min-width: 768px) { + .main { + padding-right: 40px; + padding-left: 40px; + } +} +.main .page-header { + margin-top: 0; +} + + +/* + * Placeholder dashboard ideas + */ + +.placeholders { + margin-bottom: 30px; + text-align: center; +} +.placeholders h4 { + margin-bottom: 0; +} +.placeholder { + margin-bottom: 20px; +} +.placeholder img { + display: inline-block; + border-radius: 50%; +} + +td.moron { + font-size: 150%; + padding: 0px; + color: gray; +} +.strand_emph { + text-decoration: underline; + color: black; +} + + </style> + <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> + <!--[if lt IE 9]> + <script src="//oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> + <script src="//oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> + <![endif]--> + </head> + <body> + + <nav class="navbar navbar-inverse navbar-fixed-top"> + <div class="container-fluid"> + <div class="navbar-header"> + <a class="navbar-brand" href="#">Phage QC on {{record_name}}</a> + </div> + </div> + </nav> + + <div class="container-fluid"> + <div class="row"> + <div class="col-sm-3 col-md-2 sidebar"> + <ul class="nav nav-sidebar"> + <li><a href="#main"><b>Overview</b></a></li> + <li><a href="#bad_gene_starts"><b>Bad Gene Starts</b></a></li> + <li><a href="#missing_rbs"><small>Missing RBS</small></a></li> + <li><a href="#weird_starts"><small>Unusual Start Codons</small></a></li> + <li><a href="#excessive_gaps"><small>Excessive Gaps</small></a></li> + <li><a href="#excessive_overlap"><small>Excessive Overlaps</small></a></li> + <!--<li><a href="#coding_density"><small>Coding Density</small></a></li>--> + <li><a href="#antisense"><b>Antisense Genes</b></a></li> + <li><a href="#morons"><small>Possible Morons</small></a></li> + <li><a href="#annotations"><b>Annotation Issues</b></a></li> + <li><a href="#missing_product"><small>Missing Product Tags</small></a></li> + </ul> + </div> + <div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main" id="main"> + <div class="jumbotron"> + <div class="row"> + <div class="col-sm-7"> + <h1>Phage {{record_name}}</h1> + <!--<h2>Score: {{score}}/100</h2>--> + </div> + <!--<div class="col-sm-5"> + <table class="table table-striped"> + <thead> + <tr> + <th>Section</th> + <th>Score</th> + </tr> + </thead> + <tbody> + <tr><td>Missing RBS</td><td>{{ '%d' % missing_rbs_score }}%</td></tr> + <tr><td>Excessive Gaps</td><td>{{ '%d' % excessive_gap_score }}%</td></tr> + <tr><td>Excessive Overlap</td><td>{{ '%d' % excessive_overlap_score }}%</td></tr> + <tr><td>Coding Density Score</td><td>{{ '%d' % coding_density }}%</td></tr> + <tr><td>Possible Morons</td><td>{{ '%d' % (100 * morons_good / (morons_good + morons_bad))}}%</td></tr> + <tr><td>Missing Product Tags</td><td>{{ '%d' % (100 * missing_tags_good / (missing_tags_good + missing_tags_bad))}}%</td></tr> + </tbody> + </table> + </div>--> + </div> + </div> + + <h2 class="sub-header" id="bad_gene_starts">Gene Starts</h2> + <h3 id="missing_rbs">Genes missing RBS <small>{{missing_rbs_good}} / {{missing_rbs_good + missing_rbs_bad}}</small></h3> + <p>The following genes have issues with their RBS.</p> + {% if not rbss_annotated %} + <p> + Since you have not annotated any possible RBSs, this does not count off from your overall score. + </p> + {% endif %} + <div class="table-responsive"> + <table class="table table-striped"> + <thead> + <tr> + <th>Feature Type</th> + <th>ID</th> + <th>Location</th> + <th>Error</th> + <th>Upstream (-{{upstream_max}} .. -{{upstream_min}})</th> + </tr> + </thead> + <tbody> + {% for row in missing_rbs %} + <tr> + <td>{{row.type}}</td> + <td>{{row.id}}</td> + <td>{{row.location.start}}..{{row.location.end}} [{{row.strand}}]</td> + <td>{{row.__message}}</td> + <td><span style="font-family:monospace">{{row.__upstream}}</span></td> + </tr> + {% endfor %} + </tbody> + </table> + </div> + + <h3 id="weird_starts">Start Codon Usage</h3> + <p>This section covers genes with unusual start codons</p> + <div class="table-responsive"> + <table class="table table-striped"> + <thead> + <tr> + <th>Start Codon</th> + <th>Count</th> + </tr> + </thead> + <tbody> + {% for codon_key in weird_starts_overall_sorted_keys %} + <tr><td>{{ codon_key }}</td><td>{{ weird_starts_overall[codon_key] }}</td></tr> + {% endfor %} + </tbody> + </table> + </div> + + <div class="table-responsive"> + <table class="table table-striped"> + <thead> + <tr> + <th>Feature Type</th> + <th>ID</th> + <th>Location</th> + <th>Error</th> + </tr> + </thead> + <tbody> + {% for row in weird_starts %} + <tr> + <td>{{row.type}}</td> + <td>{{row.id}}</td> + <td>{{row.location.start}}..{{row.location.end}} [{{row.strand}}]</td> + <td>{{row.__error}}</td> + </tr> + {% endfor %} + </tbody> + </table> + </div> + + <h3 id="excessive_gaps">Intergenic Gaps</h3> + <p>Phage genomes are under pressure to maintain high coding density. Large intergenic gaps may be a sign of incorrect gene starts or missing genes.</p> + <div class="table-responsive"> + <table class="table table-striped"> + <thead> + <tr> + <th>Region</th> + <th>Size</th> + <th>Bounding Gene Transcription Direction</th> + <th>Message</th> + </tr> + </thead> + <tbody> + {% for row in excessive_gap %} + <tr> + <td>{{row[0]}} .. {{row[1]}}</td> + <td>{{row[1] - row[0]}}</td> + <td>{{row[2] | nice_strand}} {{row[3] | nice_strand}}</td> + <td> + {% if row[4] == 0 %} + {% else %} + {{row[4]}} ORFs found in this region + {% endif %} + </td> + </tr> + {% endfor %} + </tbody> + </table> + </div> + + <h3 id="excessive_overlap">Overlapping Genes </h3> + <p>Large gene overlaps may indicate an incorrect gene start or miscalled gene.</p> + <div class="table-responsive"> + <table class="table table-striped"> + <thead> + <tr> + <th>Feature A</th> + <th>Feature B</th> + <th>Shared Region</th> + <th>Overlap Length</th> + </tr> + </thead> + <tbody> + {% for row in excessive_overlap %} + <tr> + <td>{{row[0].id}} ({{row[0].location}})</td> + <td>{{row[1].id}} ({{row[1].location}})</td> + <td>{{row[2]}}..{{row[3]}}</td> + <td>{{row[3] - row[2]}} bp</td> + </tr> + {% endfor %} + </tbody> + </table> + </div> + <!--<h3 id="coding_density">Coding Density Issues <small>{{ coding_density }} / 100</small></h3> + <div class="table-responsive"> + <p> + You have a coding density of {{ coding_density_real }} which scores + {{ coding_density }} / 100. Most genomes should be in the 90% to + 100% coding density range + </p> + </div>--> + + <h2 class="sub-header" id="antisense">Antisense Genes</h2> + <h3 id="morons">Possible Morons <small>{{morons_good}} / {{morons_good + morons_bad}} (Doesn't count towards score)</small></h3> + <div class="table-responsive"> + <table class="table table-striped"> + <thead> + <tr> + <th>Feature</th> + <th>RBS</th> + <th>Surrounding Features</th> + </tr> + </thead> + <tbody> + {% for row in morons %} + <tr> + <td>{{row[0].id}}</td> + <td>{{row[3]}}</td> + <td class="moron"> + {% for x in row[1] %} + {{ x | nice_strand }} + {% endfor %} + <span class="strand_emph">{{ row[0].strand | nice_strand }}</span> + {% for x in row[2] %} + {{ x | nice_strand }} + {% endfor %} + </div> + </td> + </tr> + {% endfor %} + </tbody> + </table> + </div> + + + <h2 class="sub-header" id="annotations">Annotation Issues</h2> + <h3 id="missing_product">Missing Product Tags <small>{{missing_tags_good}} / {{missing_tags_good + missing_tags_bad}}</small></h3> + <div class="table-responsive"> + <table class="table table-striped"> + <thead> + <tr> + <th>Feature</th> + <th>Qualifiers</th> + </tr> + </thead> + <tbody> + {% for row in missing_tags %} + <tr> + <td>{{row.id}}</td> + <td> + {% for key in row.qualifiers %} + {{ key }} + <ul> + {% for value in row.qualifiers[key] %} + <li>{{value}}</li> + {% endfor %} + </ul> + {% endfor %} + </td> + </tr> + {% endfor %} + </tbody> + </table> + </div> + + + + + + </div> + </div> + </div> + + + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script> + </body> +</html> +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cpt_phageqc_annotation/phageqc_report_genomea.tex Fri Jun 17 13:00:50 2022 +0000 @@ -0,0 +1,235 @@ +\documentclass[]{article} +\usepackage{lmodern} +\usepackage{amssymb,amsmath} +\usepackage{ifxetex,ifluatex} +\usepackage{fixltx2e} % provides \textsubscript +\usepackage[T1]{fontenc} +\usepackage[utf8]{inputenc} + +\addtolength{\oddsidemargin}{-.875in} +\addtolength{\evensidemargin}{-.875in} +\addtolength{\textwidth}{1.75in} + +\addtolength{\topmargin}{-.875in} +\addtolength{\textheight}{1.75in} + +\usepackage{fancyhdr} +\pagestyle{fancy} +\lhead{GenomeA Compliance Report} +\chead{} +\rhead{ {{record_name | texify}} } +\lfoot{} +\cfoot{\thepage} +\rfoot{} + + + +\usepackage{microtype} +\usepackage{hyperref} +\hypersetup{unicode=true, + pdfborder={0 0 0}, + breaklinks=true} +\urlstyle{same} % don't use monospace font for urls +\usepackage{longtable,booktabs} +\date{Compiled \today} +\title{GenomeA Compliance Report for {{record_nice_name | texify}}} + +\begin{document} +%\pagestyle{plain} +\maketitle +This report details possible issues with your submitted genome annotations. + +\section{Required Changes} + +The changes detailed in this section are required for acceptance of your +submission. + +\subsection{Missing Gene Features} + +These coding sequences (``CDS'' in your GenBank file) are missing the +associated gene feature (``gene''). This is required for validation by NCBI's +rules which are encoded in the sequin and tbl2asn programs. +{%if missing_genes_bad > 0 %} + +{{ missing_genes_bad }} out of {{ missing_genes_good + missing_genes_bad +}} features are lacking their associated gene feature. + +\begin{longtable}{ll} +\hline +Feature ID & Location\\ +\hline +\endhead +{% for row in missing_genes %} +{{ row.id | texify }} & \texttt{{'{'}}{{row.location}}{{'}'}}\tabularnewline +{% endfor %} +\end{longtable} +{% else %} +You are not missing any gene features +{% endif %} + +\subsection{Missing Product Tags}\label{missing-product-tags} + +{{missing_tags_good}} out of {{missing_tags_good + missing_tags_bad}} features have product tags (\texttt{/product="..."}). +{% if missing_tags_bad > 0 %} +The following features are missing product tags +\begin{longtable}{ll} +\hline +Feature & Location\\ +\hline +\endhead +{% for row in missing_tags %} +{{ row.id | texify }} & \texttt{{'{'}}{{row.location}}{{'}'}}\tabularnewline +{% endfor %} +\end{longtable} +{% endif %} + +\subsection{Missing Locus Tags}\label{missing-locus-tags} + +{{gene_model_correction_good}} out of {{gene_model_correction_good + gene_model_correction_bad}} features have valid locus tags (\texttt{/locus\_tag="..."}). +{% if gene_model_correction_bad > 0 %} +The following features have issues with their locus tags +\begin{longtable}{lllll} +\hline +ID & Location & Gene Locus Tag & CDS Locus Tag & Issue \\ +\hline +\endhead +{% for row in gene_model_correction %} +{{ row[0].id | texify }} & \texttt{{'{'}}{{row[1].location}}{{'}'}} & {{ row[0].qualifiers['locus_tag'][0] | texify }} & {{ row[1].qualifiers['locus_tag'][0] | texify }} & {{ row[2] | texify }}\tabularnewline +{% endfor %} +\end{longtable} +{% endif %} + + +\section{Suggested Changes}\label{suggested-changes} + +These changes are not required, but are strongly encouraged in order to +provide a uniform genome annotation within the phage community. + +\subsection{Start Codons}\label{start-codons} +Nearly all phage genes use ATG, GTG or TTG as start codons. The start codon distribution is as +follows: + + +\begin{longtable}{lll} +\hline +Start Codon & Count\\ +\hline +\endhead +{% for codon_key in weird_starts_overall_sorted_keys %} +{{ codon_key }} & {{ weird_starts_overall[codon_key] }} \\ +{% endfor %} +\end{longtable} + +{% if weird_starts_bad != 0 %} +There are {{weird_starts_bad }} unusual start codons in the genome, these +should be carefully justified. If there is evidence for these starts, the +GenomeA text should note this. + +\begin{longtable}{lll} +\hline +Feature ID & Location & Start Codon\\ +\hline +\endhead +{% for row in weird_starts %} +{{ row.id | texify }} & \texttt{{'{'}}{{row.location}}{{'}'}} & {{row.__start}} \\ +{% endfor %} +\end{longtable} + +{% endif %} + +\subsection{Unannotated RBSs}\label{unannotated-rbss} + +The following CDSs either do not have a detectable ribosome binding site (RBS; +Shine-Dalgarno sequence), in which case there is a strong possibility that +this is not the correct start, or there is one but it is not annotated. +Annotating the RBS as part of the gene feature is the best practice. + +\begin{longtable}{lllll} +\hline +ID & Location & Error & Upstream (-{{upstream_max}} .. -{{upstream_min}})\\ +\hline +\endhead +{% for row in missing_rbs %} +{% if 'Unannotated' not in row.__message%} +{{ row.id | texify }} & \texttt{{'{'}}{{row.location}}{{'}'}} & {{row.__message | texify}} & \texttt{{'{'}}{{row.__upstream}}{{'}'}} \\ +{% endif %} +{% endfor %} +{% for row in missing_rbs %} +{% if 'Unannotated' in row.__message%} +{{ row.id | texify }} & \texttt{{'{'}}{{row.location}}{{'}'}} & {{row.__message | texify}} & \texttt{{'{'}}{{row.__upstream}}{{'}'}} \\ +{% endif %} +{% endfor %} +\end{longtable} + +\section{Areas for Further Examination}\label{notes} + +These areas may be indicative of a problem, or may simply be +informational. You should examine the areas mentioned in detail to ensure +that the annotations are valid and that no genes are missed. + + + + + +\subsection{Unusual Gaps}\label{excessive-gaps} + +{% if excessive_gap | length == 0 %} +No gaps over {{ params['excessive_gap_dist'] }} nt (for genes on the same +strand) or {{ params['excessive_gap_divergent_dist'] }} (for genes on +opposite strands) were found. +{% else %} +Gaps over {{ params['excessive_gap_dist'] }} nt (for genes on the same +strand) or {{ params['excessive_gap_divergent_dist'] }} (for genes on +opposite strands) were found. + +\begin{longtable}{llll} +\hline +Region & Size & Surroundings & Messages\\ +\hline +\endhead +{% for row in excessive_gap %} +\texttt{{'{'}}{{row[0]}}..{{row[1]}}{{'}'}} & {{row[1] - row[0]}} & {{row[2] | nice_strand_tex}} {{row[3] | nice_strand_tex}} & {% if row[4] != 0 %}{{row[4]}} ORFs found in this region{% endif %} \\ + +{% endfor %} +\end{longtable} +{% endif %} + + + + +\subsection{Unusual Overlaps}\label{excessive-overlaps} + +{% if excessive_overlap | length == 0 %} +No overlaps over {{ params['excessive_overlap_dist'] }} nt (for genes on the same +strand) or {{ params['excessive_overlap_divergent_dist'] }} (for genes on +opposite strands) were found. +{% else %} +Overlaps over {{ params['excessive_overlap_dist'] }} nt (for genes on the same +strand) or {{ params['excessive_overlap_divergent_dist'] }} (for genes on +opposite strands) were found. +\begin{longtable}{llllll} +\hline +\multicolumn{2}{l}{Feature A} & \multicolumn{2}{l}{Feature B} & & \\ +ID & Location & ID & Location & Region & Length\\ +\hline +\endhead +{% for row in excessive_overlap %} +{{row[0].id | texify}} & \texttt{{'{'}}{{row[0].location}}{{'}'}} & {{row[1].id | texify}} & \texttt{{'{'}}{{row[1].location}}{{'}'}} & {{row[2]}}..{{row[3]}} & {{row[3] - row[2]}} \\ +{% endfor %} +\end{longtable} +{% endif %} + +\subsection{Coding Density}\label{coding-density} + +You have a coding density of {{ coding_density_real }}\% which scores +{{ coding_density }} / 100 on our scale. Most genomes should be in the 90\% to 100\% +coding density range + + + + + + + + +\end{document}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cpt_phageqc_annotation/shinefind.py Fri Jun 17 13:00:50 2022 +0000 @@ -0,0 +1,420 @@ +#!/usr/bin/env python +import re +import sys +import argparse +import logging +from CPT_GFFParser import gffParse, gffWrite, gffSeqFeature +from Bio import SeqIO +from Bio.SeqRecord import SeqRecord +from Bio.SeqFeature import FeatureLocation +from gff3 import ( + feature_lambda, + feature_test_type, + feature_test_true, + feature_test_quals, + get_id, + ensure_location_in_bounds, +) + +logging.basicConfig(level=logging.INFO) +log = logging.getLogger() + + +class NaiveSDCaller(object): + + # TODO May make switch for different sequence sets + SD_SEQUENCES = ( + "AGGAGGT", + "GGAGGT", + "AGGAGG", + "GGGGGG", + "AGGAG", + "GAGGT", + "GGAGG", + "GGGGG", + "AGGT", + "GGGT", + "GAGG", + "GGGG", + "AGGA", + "GGAG", + "GGA", + "GAG", + "AGG", + "GGT", + "GGG", + ) + + def __init__(self): + self.sd_reg = [re.compile(x, re.IGNORECASE) for x in self.SD_SEQUENCES] + + def list_sds(self, sequence, sd_min=3, sd_max=17): + hits = [] + for regex in self.sd_reg: + for match in regex.finditer(sequence): + spacing = len(sequence) - len(match.group()) - match.start() + if sd_max >= spacing+sd_min and spacing+sd_min >= sd_min: + #if the spacing is within gap limits, add + #(search space is [sd_max+7 .. sd_min] so actual gap is spacing+sd_min) + #print('min %d max %d - adding SD with gap %d' % (sd_min, sd_max, spacing+sd_min)) + hits.append( + { + "spacing": spacing, + "hit": match.group(), + "start": match.start(), + "end": match.end(), + "len": len(match.group()), + } + ) + hits = sorted(hits, key= lambda x: (-x['len'],x['spacing'])) + return hits + + @classmethod + def highlight_sd(cls, sequence, start, end): + return " ".join( + [ + sequence[0:start].lower(), + sequence[start:end].upper(), + sequence[end:].lower(), + ] + ) + + @classmethod + def to_features(cls, hits, strand, parent_start, parent_end, feature_id=None, sd_min=3, sd_max=17): + results = [] + for idx, hit in enumerate(hits): + # gene complement(124..486) + # -1 491 501 0 5 5 + # -1 491 501 0 4 5 + # -1 491 501 1 4 5 + # -1 491 501 2 3 5 + # -1 491 501 1 3 5 + # -1 491 501 0 3 5 + + qualifiers = { + "source": "CPT_ShineFind", + "ID": "%s.rbs-%s" % (feature_id, idx), + } + + if strand > 0: + start = parent_end - hit["spacing"] - hit["len"] + end = parent_end - hit["spacing"] + else: + start = parent_start + hit["spacing"] + end = parent_start + hit["spacing"] + hit["len"] + # check that the END of the SD sequence is within the given min/max of parent start/end + + # gap is either the sd_start-cds_end (neg strand) or the sd_end-cds_start (pos strand) + # minimum absolute value of these two will be the proper gap regardless of strand + tmp = gffSeqFeature( + FeatureLocation(min(start, end), max(start, end), strand=strand), + #FeatureLocation(min(start, end), max(start, end), strand=strand), + type="Shine_Dalgarno_sequence", + qualifiers=qualifiers, + ) + results.append(tmp) + return results + + def testFeatureUpstream(self, feature, record, sd_min=3, sd_max=17): + # Strand information necessary to getting correct upstream sequence + strand = feature.location.strand + + # n_bases_upstream (plus/minus 7 upstream to make the min/max define the possible gap position) + if strand > 0: + start = feature.location.start - sd_max - 7 + end = feature.location.start - sd_min + else: + start = feature.location.end + sd_min + end = feature.location.end + sd_max + 7 + + (start, end) = ensure_location_in_bounds( + start=start, end=end, parent_length=len(record) + ) + + # Create our temp feature used to obtain correct portion of + # genome + tmp = gffSeqFeature(FeatureLocation(min(start, end), max(start, end), strand=strand), type="domain") + seq = str(tmp.extract(record.seq)) + return self.list_sds(seq, sd_min, sd_max), start, end, seq + + def hasSd(self, feature, record, sd_min=3, sd_max=17): + sds, start, end, seq = self.testFeatureUpstream( + feature, record, sd_min=sd_min, sd_max=sd_max + ) + return len(sds) > 0 + + +# Cycle through subfeatures, set feature's location to be equal +# to the smallest start and largest end. +# Remove pending bugfix for feature display in Apollo +def fminmax(feature): + fmin = None + fmax = None + for sf in feature_lambda([feature], feature_test_true, {}, subfeatures=True): + if fmin is None: + fmin = sf.location.start + fmax = sf.location.end + if sf.location.start < fmin: + fmin = sf.location.start + if sf.location.end > fmax: + fmax = sf.location.end + return fmin, fmax + + +def fix_gene_boundaries(feature): + # There is a bug in Apollo whereby we have created gene + # features which are larger than expected, but we cannot see this. + # We only see a perfect sized gene + SD together. + # + # So, we clamp the location of the gene feature to the + # contained mRNAs. Will remove pending Apollo upgrade. + fmin, fmax = fminmax(feature) + if feature.location.strand > 0: + feature.location = FeatureLocation(fmin, fmax, strand=1) + else: + feature.location = FeatureLocation(fmin, fmax, strand=-1) + return feature + +def shinefind( + fasta, + gff3, + gff3_output=None, + table_output=None, + lookahead_min=3, + lookahead_max=17, + top_only=False, + add=False, +): + table_output.write( + "\t".join( + [ + "ID", + "Name", + "Terminus", + "Terminus", + "Strand", + "Upstream Sequence", + "SD", + "Spacing", + ] + ) + + "\n" + ) + + sd_finder = NaiveSDCaller() + # Load up sequence(s) for GFF3 data + seq_dict = SeqIO.to_dict(SeqIO.parse(fasta, "fasta")) + # Parse GFF3 records + for record in gffParse(gff3, base_dict=seq_dict): + # Shinefind's gff3_output. + gff3_output_record = SeqRecord(record.seq, record.id) + # Filter out just coding sequences + ignored_features = [] + for x in record.features: + # If feature X does NOT contain a CDS, add to ignored_features + # list. This means if we have a top level gene feature with or + # without a CDS subfeature, we're catch it appropriately here. + if ( + len( + list( + feature_lambda( + [x], feature_test_type, {"type": "CDS"}, subfeatures=True + ) + ) + ) + == 0 + ): + ignored_features.append(x) + + # Loop over all gene features + for gene in feature_lambda( + record.features, feature_test_type, {"type": "gene"}, subfeatures=True + ): + + # Get the CDS from this gene. + feature = sorted( + list( + feature_lambda( + gene.sub_features, + feature_test_type, + {"type": "CDS"}, + subfeatures=True, + ) + ), + key=lambda x: x.location.start, + ) + # If no CDSs are in this gene feature, then quit + if len(feature) == 0: + # We've already caught these above in our ignored_features + # list, so we skip out on the rest of this for loop + continue + else: + # Otherwise pull the first on the strand. + feature = feature[0] + + # Three different ways RBSs can be stored that we expect. + rbs_rbs = list( + feature_lambda( + gene.sub_features, + feature_test_type, + {"type": "RBS"}, + subfeatures=False, + ) + ) + rbs_sds = list( + feature_lambda( + gene.sub_features, + feature_test_type, + {"type": "Shine_Dalgarno_sequence"}, + subfeatures=False, + ) + ) + regulatory_elements = list( + feature_lambda( + gene.sub_features, + feature_test_type, + {"type": "regulatory"}, + subfeatures=False, + ) + ) + rbs_regulatory = list( + feature_lambda( + regulatory_elements, + feature_test_quals, + {"regulatory_class": ["ribosome_binding_site"]}, + subfeatures=False, + ) + ) + rbss = rbs_rbs + rbs_sds + rbs_regulatory + + # If someone has already annotated an RBS, we move to the next gene + if len(rbss) > 0: + log.debug("Has %s RBSs", len(rbss)) + ignored_features.append(gene) + continue + + sds, start, end, seq = sd_finder.testFeatureUpstream( + feature, record, sd_min=lookahead_min, sd_max=lookahead_max + ) + + feature_id = get_id(feature) + sd_features = sd_finder.to_features( + sds, feature.location.strand, start, end, feature_id=feature.id + ) + + human_strand = "+" if feature.location.strand == 1 else "-" + + # http://book.pythontips.com/en/latest/for_-_else.html + log.debug("Found %s SDs", len(sds)) + for (sd, sd_feature) in zip(sds, sd_features): + # If we only want the top feature, after the bulk of the + # forloop executes once, we append the top feature, and fake a + # break, because an actual break triggers the else: block + table_output.write( + "\t".join( + map( + str, + [ + feature.id, + feature_id, + feature.location.start, + feature.location.end, + human_strand, + sd_finder.highlight_sd(seq, sd["start"], sd["end"]), + sd["hit"], + int(sd["spacing"]) + lookahead_min, + ], + ) + ) + + "\n" + ) + + if add: + # Append the top RBS to the gene feature + gene.sub_features.append(sd_feature) + # Pick out start/end locations for all sub_features + locations = [x.location.start for x in gene.sub_features] + [ + x.location.end for x in gene.sub_features + ] + # Update gene's start/end to be inclusive + gene.location._start = min(locations) + gene.location._end = max(locations) + # Also register the feature with the separate GFF3 output + sd_feature = fix_gene_boundaries(sd_feature) + gff3_output_record.features.append(sd_feature) + + if top_only or sd == (sds[-1]): + break + else: + table_output.write( + "\t".join( + map( + str, + [ + feature.id, + feature_id, + feature.location.start, + feature.location.end, + human_strand, + seq, + None, + -1, + ], + ) + ) + + "\n" + ) + + record.annotations = {} + gffWrite([record], sys.stdout) + + gff3_output_record.features = sorted( + gff3_output_record.features, key=lambda x: x.location.start + ) + gff3_output_record.annotations = {} + gffWrite([gff3_output_record], gff3_output) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="Identify shine-dalgarno sequences") + parser.add_argument("fasta", type=argparse.FileType("r"), help="Fasta Genome") + parser.add_argument("gff3", type=argparse.FileType("r"), help="GFF3 annotations") + + parser.add_argument( + "--gff3_output", + type=argparse.FileType("w"), + help="GFF3 Output", + default="shinefind.gff3", + ) + parser.add_argument( + "--table_output", + type=argparse.FileType("w"), + help="Tabular Output", + default="shinefind.tbl", + ) + + parser.add_argument( + "--lookahead_min", + nargs="?", + type=int, + help="Number of bases upstream of CDSs to end search", + default=3, + ) + parser.add_argument( + "--lookahead_max", + nargs="?", + type=int, + help="Number of bases upstream of CDSs to begin search", + default=17, + ) + + parser.add_argument("--top_only", action="store_true", help="Only report best hits") + parser.add_argument( + "--add", + action="store_true", + help='Function in "addition" mode whereby the ' + + "RBSs are added directly to the gene model.", + ) + + args = parser.parse_args() + shinefind(**vars(args))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cpt_phageqc_annotation/test-data/AY216660.fasta Fri Jun 17 13:00:50 2022 +0000 @@ -0,0 +1,815 @@ +>AY216660.2 Enterobacteria phage T1, complete genome +GCCTGCAATATGGTAAAATAGCACTAAATGTTAAACAAAGAGGATGTATTTATGAGTGAA +CCTAAGAACGCTCCCGTAGTCCAGGGTGGTAATTTCAAAGAGCTATACAAGAAAAAGTTT +GGCACTGTACTCGCGAAAAACCGGGCTATGACGCCAGAGCAACTATTCGATCTGTCAGTG +AAGTATTTCGAATGGGCCGAGGACAATGCGATCAAGGCGTCAGAATCAGCCAGCTTTCAG +GGTGGCGTTTATGAGTCGCTTGTCCATAAGCCGCGCGTCTTCACCTGGACCGGATACCGA +CTATTCATCGGTGCAAGCGAGGCTGCAATCATTAAGTGGAAGCGAGAGGAAGAATACAGC +GAGGTTATGGAGTTTGTGGAATCGGTAATCAACGAGCAAAAATTCCAGCTTGCCGCCAAC +GGTGTTATTAATGCCTCCTTTATCGGTAAGGATCTCGGAATCGATAAGCCAGCCTCAATC +AATATCGAAAACTCGTCAGCTTCCGCATCGACAGTAGTCGCCACTACTGAGGATGCGATG +AAAGAGGCGGTAAACAGCATTCTTGATATGCTTTAACTTTAGGGGCGCGAGAGCGCCCAC +ATGGGAGACTTAATCATGATTCAATGGGAAGACCTTAACGCAACGCAGAAGTTAGCGATC +AAGAAAATGAGCGAGGCCAATTTCGAAAAAATGATTCGGATCTGGTTCCAACTTATGCAG +GCGCAGCAGTTCCAGCCTAACTGGCATCACCTTTACCTATGTCACGAAGTGGAGGAAATT +ATTGCAGGGCGGCGAGGGAATACAATCTTTAACGTCACACCAGGTTCCGGTAAAACTGAA +GTGTTCTCAATTCACCTTCCGGTGTACGCAATGCTTAAGTGTAAGAAGGTGCGAAACCTT +AACGTGTCGTTTGCTGACAGCCTGGTTAAGCGTAACAGTAAGCGCGTCCGTGAGATTATC +AGCAGCAACGAATTTCAAGAGCTATGGCCTTGCAAGTTCGGTACATCGAAAGATGAGGAG +ATGCAGGTTCTTAACGAAGATGGAAAGGTTTGGTTTGAGTTGATATCCGCAGCGGCTGGC +GGTCGTATTACTGGTTCGCGTGGTGGCTACATGACGCCGGGATTCTCGGGGATGGTAATG +CTAGACGATATCGACAAGCCTGATGATATGTTCTCAAAGGTTAAGCGTGAGCGTACGCAC +ATGCTATTGAAAAACACCATCCGTTCCCGTCGTATGCATAACGAGACGCCTATTATTGCA +ATTCAGCAGCGACTACATGCTCAGGATTCAACCTGGTTCATGATGAATGGCGGTATGGGT +ATTGAGTTTGACCAAATCTCAATACCGGCGCTGGTGACGGAAGAATACGGAAAGACACTT +CCTGATTGGTTGCAGCCTTACTTTGAGCGTGATGTTTTATCGTCTGAGTATGTAGAATTG +GATGGCGTTAAGCATTACTCTTTTTGGCCAAGCAAGGAAAGCGTTCACGACCTGTTGGCG +TTACGAGAAGCAGATCAGTATACCTTTGATTCTCAGTATCAGCAGAAACCGATCGCGCTG +GGTGGCTCCGTGTTTAACTCAGAGTGGTGGACTTATTACGGCAGCAGTCTTGACGCTGAC +GAGCCAGATCCGGGTAAATATGATTACCGATTCATCACTGCCGATACCGCTCAGAAGACA +GGCGAGCTAAACGACTACACGGTATTTTGTTTGTGGGGCAAGAAGAATGATAAGGTTTAC +TTTATCGACGGCATTCGCGGAAAGTGGGAAGCGCCGGATATGGAGAGGCAATTTACAGCT +TTCGTCAATCAGGCATGGAGGCACAATAAATCAATGGGGGTACTTCGTAAAATTTATGTG +GAAGATAAGGCGAGCGGTACGGGCTTAATCCAGAACCTCAGGAAAAAGACCCCGATCTCA +ATCACTCCATTGCAGCGTAACAAAGACAAAGTTACCCGAGCTATGGATGCTCAGCCAGTT +ATTAAAGCCGGGCGCGTGGTTCTGCCAGAAGAGCACCCTATGCTTGCTGAAATTATCGCT +GAACACAGTGCCTTCACTTACGATGACACCCATCCGCATGATGATATCGTCGATAACTTC +ATGGATGCGGCGAACATCGAATTGCTGACCATTGATGATCCTATCGAGAGAATGAAGCGA +CTCGCCGGGATGGTTAAGCGGTAATAAATGAGATATAATTAGGGCTGTCAATTGACGGCC +CTTTTTATTGGAGGAAACATGAAAATTGTTAAGCATGATGGATATAACGATATCTTTAAC +GGCGGCGCGGACGGATCGCCTAAGCCATTCTTTATGTCTGATGCATCATATCACGTCGGT +TCTTTCTACAACGACAACGCAACCGCGAAGCGAATTGTGGATGTTATCCCGGAAGAGATG +GTGACGGCTGGTTTTAAAATGTCAGGCGTTAAGGATGAAAAAGAGTTCAAGTCTTTATGG +GATAGCTACAAACTTGATTCAAGTCTGGTGGATCTTCTTTGTTGGGCACGACTTTACGGT +GGCGCGGCGATGGTGGCAATCATCAAAGACAACCGGATGTTAACCAGTCAGGCAAAGCCT +GGAGCTAAACTTGAAGGCGTCCGAGTTTATGATCGATTTGCTATCACTGTTGAAAAGCGA +GTCACCAATGCAAGATCTCCTCGCTATGGTGAGCCTGAAATTTACAAGGTATCCCCTGGC +GACAATATGCAGCCGTACCTGATTCATCACTCAAGAGTCTTTATTGCTGATGGTGAACGA +GTGGCGCAACAGGCAAGAAAGCAGAATCAAGGATGGGGAGCTTCGGTATTGAATAAGTCA +CTGATTGATGCAATCTGTGACTATGATTACTGTGAATCTCTGGCTACTCAGATCTTGCGA +CGTAAGCAACAGGCTGTATGGAAGGTCAAAGGTCTTGCCGAAATGTGTGATGATGATGAT +GCTCAGTATGCCGCGCGCCTGCGACTTGCTCAGGTAGATGATAACTCCGGCGTAGGCCGT +GCGATCGGTATCGATGCTGAGACTGAGGAATATGACGTTCTCAACTCTGATATCAGCGGA +GTCCCTGAGTTCTTATCAAGCAAGATGGACCGCATCGTCTCCCTATCCGGGATTCATGAG +ATTATCATCAAGAATAAGAACGTAGGCGGCGTATCAGCGAGCCAAAACACAGCGCTTGAG +ACTTTCTATAAGCTAGTCGATCGCAAGCGCGAGGAAGATTACAGGCCGCTTCTTGAGTTC +TTGTTGCCGTTCATTGTTGATGAGGAAGAGTGGTCGATCGAGTTTGAGCCTTTGTCTGTT +CCGAGTAAGAAAGAGGAATCAGAGATCACGAAGAATAACGTTGAGTCAGTCACGAAGGCT +ATCACTGAGCAAATCATCGATCTGGAAGAAGCTCGCGACACGTTGCGATCCATTGCCCCT +GAGTTCAAACTCAAGGATGGTAATAACATCAACATTCGCGAACCGGAAGAAACAACCGAA +CCGGAGCCGGGATTAGGGGAGAAGTTAGAAGATGAAAATTAATGGCGTTGCAACACAGTG +GCGCTATCCTGAAATGAGCGAGCGCGCAATGTCGCGCTCCCTACAGGATGTTGCAGCCAA +ACTAACTGAAAAAATGCGTGACGAATTAAAGCCGATGAAATTTGACGCTACCGACGAAGA +GATAGATCAGACAGAGAGGTCATTGCTTGATTACGTCGAATCACTCATCGCTCCGATTAT +TGGTTCTCTATCATCCGTTGCGCTCACGATCTATAAATTCAACTCTAAGCAGTGGCTGCG +CATCGCTCGCAATGCTGGAGGTAAGAAGAATCAAGCCGTGATGCTACTTGCCCTGATTGG +TCCTACCGCTGCCGAAAGCTGGTACTCAGGACAATATAATCTGTGGCGATCGCAGGTTGC +TACTTCTATCAGGAAATTTGCCGCCAACATGGTTACTGATTTCACTGATAAACTTCGTGC +GGCATCCGGTCAGGGTAAAAGCAAGGATTTTGTTGTTGAACTTGCTAAGGAGCGATTTGG +TATTTACCGGAACTGGGCCAAAAATAGAGCGTCGGGAATTGTCGGAACCTGGAACAGTAG +ACTGATGCGTCAGCGCATAAAAGACGCTGGTGTCTCTTACTATTTCTGGCGCGGGGTGAT +GGATTTACGCGAACGTGAAAAACATGTAAGATGGGAAGGTAAGCGCATAGCGGTAGATTC +CGATCATGTATTCCCTGGTGAGGAATACAACTGCCGCTGTTGGGCTGTTCCAGACTTTTC +TACAGGAGATTAAAAATGAAGGCAAAGCAAAGATTCGATTCAGTAAAAATCAAGGCGCAC +TTTGATGATAACGGTTTTTTAGTTGACCGCCCAATCGTGGCGCGAATCGGCGCTCAGGTT +TACAAAACGCCGCACGGCGATCGAGTTGAGTTCCGTCCGGCGTCCGAAGTTTTCAAGCAA +GACTCCTTGCAAAGTTTTGCGGGTAAGCCAATTACTGTCGGTCACGTAACGGTAACTCCG +CAGAATGCTAAGGACGTTGTTGTCGGATCGTGTGCTGGCGCTGGTATTGCTTCAGGGGTT +GGCGTTGAAGTTCCTTTGAGTATTTACAGCGACTACGCGATCAGCAAGGCTAAAGCAAAA +GAAGCAGGTGAATTATCTGTTGGTTATACTTCGGTTGATATTGATAAGCCTGGTTGGGGT +TCAAATGAGACTGGAGAATATATCTTCGAAGAGGATATGAAACAGGACGAAGCGCCGCCT +GAAGGTTGGGTGAGATTCGACGCGGTACAAACTAATATCAAGGTCAACCATATTGCCCTA +GTTTTTAAAGGTCGTGCGGGAATTGCTAAATTAAATCTTGATGCCGAACAGGAGTTCCCG +TATGATAATAACGTTCAATTAACTAACGAGGACAAGCAAATGAAAAAAATTAAGATCGAC +TCAGTTGATGTGGAAGTAACCGAAGACGTTGCGAACCATATCGAAAAATTAACCGCGCAG +ATTGCCACCATTCAGGGGAAAGCTGATGGCTTCGAAGCTGAGCGCGATGCGCTGAAGGTT +AAGGTTGACTCTCTGCCGGAACTTGTGAAGGCCGAGGTAGAGAAGCAAAAAGCCGATGCC +GCCGCACGCGCAGAAGTTACCGCAGTAGCAGAAACCGCAGGCGTCAAACATGATGGTCTT +GATATCAAAGACGTCAAGATTGCCGTAGTTAAAGCCATGCTTGATAAAGATGTTAGTGAA +AAATCAGACGCATATATCGACGCTATGTTTGATGTTGCTAAAGATTCTGATATCATGGCT +ATTCAGCGTAAAGCAGTAAAAGGCGACTCTATCGAAGGCGGTAAGCCGGAAGAGAAAAAC +GACGCCGCGCCTGTTACGCCAAATTCACGTTTAAGCAAAGTAATGTAAGGGGAAATATCA +TGGCACAAATTAATGCATCTTATCAGCGAGATATGGCGATTGCGCTTCCGGGTATGGTTG +CGGATACTTCAAAGTACAATATTGACGGCGCTTGTGTCGTTAATGAAGGTGATGTTCTTG +TTGGCGCTGCCGTACAAGTTGTTCAAGCTCAGGCGGTTGATGGTCATAAGTTGGTTAAGG +CTCTTACTACCGGAACCACTCCTTACGGCGTGGCAATCCGATCTCACTGGCAGACTGTTA +ACGCTCAAAATCAGATGATTTACGAAGATGGCGGCGCTATCAACGTGATGACTTCAGGCC +GAGTATGGATGCTTTCCAAATCCACCGAAGCGCCAACTTTCGGCTCTGCCGTTAAACTTG +ATGTTGATGGTCAGGAAAAATCTGATGGCACGATCGAAACAACCTGGACCTACGCTGGCG +GTTGGACTAAATACAAAGATATTCAGCTTGTTGAGGTTCAGTTGCATCAACTGTAATTAG +CGTTTAATATGGGGACTATCCTTTTTTGGATAGTCCTTTTTTTATGGAGAAATCATTATG +GCTTACGAAAATTTAATGTTGCGCCCGGCGTGTCCGGGAAATCTTTCTGATACTTCAACC +TACAATATTGATGGCGCTTGCGTGGCTCAAGGTGACATTGAGTTCGGCTCAGCGGTTCAG +GTTGTCGGCATCGTTGATGGTGTAAAAGTTGTTACGGCGCTTTCTGATGGTGGAACTCCT +TACGGTATCGCTTTCCGTTCCCAATATGAACACCTGAGCGGTAAAATCCTCGACGGTGAA +GTGTGCAACGTCGTTTCTCACGGTCGCGTGTGGGCGCTTACTTCTCTTGATGAGGCTCCC +AGCTTGTTCTCAAAGTTGCAGTTTGGATCTGGTGGGGTTGTTACTGGTGGATCTGGTTAC +GCAGGATGGACCTTTGCTGGCGGCTTTGTTAAGCACGAAGATGGCTACATTATTGAGGTT +CGGGTGAAACAAAATGCTTTCATCGTTCCACCGCCGCCGCCCCCTGTCGTTCTTGTTGAA +TCCGCTACAATCACCACTGACAAGGAAAGCCCTCAGCCAAACAACGTTACGATCCAGTGT +GTAGCTAATGCTCTTCCGGCTAATGCAACTGATAAGACTGGCAAATGGTCAATCGACGCT +ACCAATATCGCCACTGTCAATCCGGACTCAGGTCTTGTAACTCCTGTTGGTGGAGAGGTA +GTCGGTGATTTCAATATTACCTGGACGGCTAACGATGCCAGCAAGACGACGGCAACCATT +GCTTATCGCGTAGAAGCAGTGCCAACGCCAGAGGTTGATGTATAACATAAAAACACTTTG +ACGCTTTAACAAAAAGTGCTATTATTGAAGCCGTGAACATAATCACGGTTTTTTATTAAC +TATGGAGAAGTAATCATGACTACTAAAAAATTTGATGAAGCAGATAAAAGCAATGTTGAA +ATGTATCTGATCCAGGCTGGCGTAAAACAGGATGCGGCCGCAACGATGGGTATCTGGACC +GCTCAGGAACTACACCGCATCAAAAGCCAGTCCTATGAAGAAGACTACCCGGTCGGCTCA +GCTTTACGCGTATTCCCGGTTACAACCGAGCTTTCTCCGACCGACAAGACGTTTGAGTAT +ATGACCTTTGATAAGGTTGGTACGGCTCAGATTATCGCAGACTACACCGACGATCTTCCG +CTGGTTGATGCCCTGGGTACTTCTGAATTTGGCAAGGTGTTCCGTCTTGGTAACGCGTAC +CTGATCTCAATCGACGAAATCAAAGCGGGTCAGGCAACTGGTCGCCCACTGTCAACCCGT +AAGGCGAGTGCGTGCCAGTTGGCGCATGATCAGCTTGTTAACCGCCTGGTGTTCAAAGGT +TCCGCGCCGCACAAGATTGTGTCCGTGTTCAACCATCCGAATATCACCAAAATTACCTCT +GGTAAGTGGATTGATGTATCTACTATGAAGCCGGAAACTGCGGAAGCTGAGCTAACTCAA +GCGATCGAAACCATCGAGACGATTACTCGTGGTCAGCACCGCGCAACCAACATCCTGATC +CCGCCTTCCATGCGTAAGGTTTTGGCGATTCGTATGCCTGAGACAACCATGTCTTACCTG +GACTATTTTAAGTCTCAGAACTCCGGTATCGAAATCGACTCTATCGCAGAGCTTGAGGAT +ATTGACGGCGCAGGCACCAAAGGCGTACTGGTGTACGAAAAGAATCCGATGAACATGTCC +ATCGAGATCCCGGAAGCATTTAACATGCTGCCAGCACAACCGAAAGACTTGCACTTTAAA +GTGCCTTGCACCTCTAAGTGTACTGGTCTTACAATTTATCGCCCGATGACTATTGTCTTA +ATCACTGGCGTGTAATATTATAGGGGCTAACTTAGTTAGTCCCTTTTTTTATTGGAGAAA +TCAAAATGGCTAAAGAAAAAACTGTTGTTATCGTAAACGTTGGTGTAGCTCTTCAGATGT +TCCGTCTTGAAGATGGTTCCTTTGCTAAAGTTCTTCCAGATGAAGAGGTCACGCTTCCGG +CGTCCGTTCTTGATTTACCTGGTCTGCGTTGCTTAATTGCTCGCGAAGAAATCGAAGTTA +AAGACGACAGTGCAACCAACCGCAAAATCCGCGCTGAAATGGCAAAGATCACGAAGCCAG +ATCCGTGGGATAAAATGAGCGTAAAAGAGCTTGAAGACGGCGGCGAATATTAATCATCAA +GGCGCTCATGTAGCGCCTTTTTTTATGGTGGTAAATTATGAATCAAGAAACTTTAATTGC +AGTTGTTGAGCAAATGCGAAAGCTGGTTCCGGCACTTCGTAAGGTTCCAGACGAAACGCT +TTATGCGTGGGTAGAAATGGCTGAGCTTTTTGTATGCCAGAAGACCTTTAAAGACGCATA +CGTCAAAGCGCTCGCTCTTTATGCATTGCACCTTGCTTTCCTTGACGGGGCGCTAAAAGG +TGAAGATGAGGATCTGGAATCGTACTCACGACGAGTTACGTCATTCTCCCTGAGCGGTGA +ATTTAGCCAGACTTTCGGAGAGGTTACAAAGAACCAGTCAGGAGACATGATGCTTTCGAC +GCCGTGGGGTAAGATGTTCGAACAGCTTAAAGCGCGACGCCGTGGTCGATTCGCATTAAT +GACAGGACTCCGTGGAGGATGCCACTAATGAACTACTCACAGATTGAAAGGATGGCTCGC +AAAGGTGTGGCTTTCTTCACCGATCCGTCAAGACCTATGAACCTGATAAAGCAAGGTGAA +TACGGATATGATGAAAACGGATTCGAGATCCCACCGATGGAACAGGTTATTCCAATATCC +GGCGCGACGCGAAGACCGAACGCGCGTGAGATTGACGGGGAAACCATCCGCGCCTCAGAT +ATTTTGGGGATCTTCAATAATGATCATGAAATAAACGAAGGTGACTATATAGAGATTGAT +GGCATTCGTCATGTTGTCGTTGATGCTCGCCCGGTTCAGGCGTCACTGGAACCAGTTGCC +TATCGTCCAGTATTGCGGAGGGTATCAGTCGGTGGCTAATTATCAGATTCGTAGATTTCA +AGGCGAGATTGATGCGTGGATTAATGCCGCTGAAAGCACGTTAGAACATGCTATTGAGAT +ATTCGTAAGGGATGTTCACGACGCTCTTGTTAGCCGCTCCCCTGTTGATACAGGTCGATT +CAAGGGTAACTGGCAGATAACTTTTAACGAAATCCCTAACCACGCATTAAACCGATACGA +TAAAACTGGCGGTGTCGTCAGGGGTGAGGAACAGGCAAAAACTTATGGCATGTTCAGCCG +TGGCGGCGCGATAACATCCGTTCACTTTTCAAACATGTTGATTTATGCAAACGCTCTTGA +GTACGGTCATTCACAGCAAGCACCGAGCGGCGTTGTCGGTCTTGTGGCGTTAAGGCTTAG +ATCATATATGGCTGACGCAATCAAGCAGGCAAGGAGACAGCAAAATGCACTATGAGTTAT +CAGCGGCGGCGCGAGCCGCTTTTCTATCAAAGTACAGAGACTTTCCTCACTACATGGAAA +ACAGAAATTTCACACCGCCGAAGGATGGCGGGATGTGGCTGAGGTTCAACTACATTGAAG +GGGATACGCTTTATCTATCCATTGACAGAAAGTGTAAATCTTACATCGCAATCGTTCAGA +TCGGCGTAGTGTTCCCTCCAGGCTCCGGCGTTGACGAAGCAAGATTGAAAGCAAAAGAGA +TTGCTGATTTTTTCAAAGATGGTAAAATGCTTAACGTTGGTTATATTTTCGAGGGTGCAA +TCGTGCATCAAATTGTTAAACATGAAAGCGGGTGGATGATTCCGGTTCGCTTTACAGTAC +GAGTAGACACAAAGGAGACTTAATTATGCACTTACCAAATGGCGCACAAATTTTCGTGGA +AACCTCTCGCGGGGTAGAGGTTGAGGCAACCGCTATCACTAACGCAGAAAATCCTGTTGC +TACAGTTGCATCTAAGGGTGACTTGGCAAAAGGTGATTACGTTATTGTAACTCAGTCAAC +TTGGGCAAAGATGGTTAGTCGAGTGCTAATTGTTACTGACGCTCAGGAAACAAGTATCAC +TCTTGCTGGAATTGACACCTCCGATACTCTTGTTTTCCCGGCTGGCGGCACGATGAGCTT +TGCAAAAATTACTGGCTGGACTGAGATCCCTTGCGTACAGGAGATTGGTCAGGACGGCGG +CGAGCAGCAGTATTACACTTATCAGTGTTTGTCCGACGATAAAGAGCAGCAGATCCCAAC +GTTTAAATCTGCGGTCTCGCTAACTTACACCTTCGCGCACGAATTTGATAACCCGATCTA +CCCGATTCTGCGCAAGCTGGATTCGTCTGGTCAGGTAACAGCGGTTCGAATGTACGTTCC +GAAAGCGAGCGAAATGCGCATGTGGGCTGGCATCTTGTCGTTTAACGATATCCCATCCAC +GCAGGTTAACGAAATGGAAACGGTGGAACTCGCCGTATCCCTGAAAGGTGACTTTACTTT +CATCTCATCCACTCTGGCATCGCCTGGTGCTTAAATACCATCCACAGGGGGCTTGCACCC +CCTTATTCATTTCTGTAAAATCATCTTATCAACTTTATTCGATTAACTTTTAACAAAAAG +TGCTATCAACCAATCAGGAGAAACATCATGGCTAAATTCAATTTCGTGTTGGGCCAGCTT +CCAGACTTCAAACTTCCGGTGACGTTCACCATGCCAAACGGCGAGGATGCGACTATTATT +TTTACAGTACGCCACCTTTCCAGTAAAGAAGTGCAAGATATGTATGCGAAGCAGGGCGAA +ATGAATGATAGCGATTTCATCACTAAGATAGCATCAGGATGGAATCTGGAAGAAGAATTT +AACGAAGAGAATACGCGTAAGCTGGTACAGTATTATCCTTCCGCAGCGTACAATCTGACG +GCAACTTACATCAAGGCGCTCGCCGGACACCGCGCAAAAAACTAAAAAGGGCGGTTTATC +TGTTATATCAGAAACCGCCAACAGAAGAGCAATTAAGATCGGTTGGCCTCAGTCTTTCTG +ACTATGAAGACGAGGAACCGGAAACGATAATCGGCGATGCTGAAATGGTGAAGGCGTGGA +ATGTTTTTACGTCAATGCTCACTCAGTGGAGAAGTTCAGGCGCTGGAGCTTATGGTCTTG +ACTATAATGTTTTGCCTATGTTGTTCAAAATCTATAAAATAGAAGATGAAGAACTGGCAT +TGCAGGACGTTAGGATCATGGAAGCGAAAGCGCTTGAAATGATTGCTAAGCAAAACAACT +AAGCCGCCGTTTGGCGGTTTTTTCGTATATAGGGGGGGTTATATGGTTGATAAGGTAGCA +GGTCTATCTCTTGACGTTGACGTGTCAACAGTTCAGCGCGCTGTCAAGTCACTGAAAGAG +TTTTCAAAGGCCAACGATCAGGCCGCTGATTCTATGGGTTCTTTAATCAATGAGTCAGAG +GTTGCAAAACAGAAGGCCAAAGAACACGCCGAACAACTCAGGCGCCAGAGAAAAGAGTAT +GAGGCCGTGGAGAAGGCAATCGATCCTACAGTATCAAAAATGGAAAGGTTGAAGATTGCA +TCTCAGCAGCTTGATAAACTCTGGCAGCAGGGAGTCGTTCCAGATGAGACTTTTTTCCGT +TTGGGTGAAATGCTGGATCTGCAAAACGCAAAACTTGCTCGCAGCCGGGCCATGCTGACA +GAAGAAGGGCAGGCAGCATTGCAAGAGGCGAAAGCAAAAGAGCAGGCGGCAGTGCGTAGC +AAGGCGTTCATGGATGCCCTGAATGGTCAAGTTAACGCGATCGGTAAGACTCATGCTGAA +TTGATGGAACTGAAAGCGGCTGAGCTTGGTTTATCGAAAGAAGCAGCACCACTAATCGCA +AAACTTAAAGATCAAGGCCGGGCTATGAATGCAGCAGGTATTAGCGCCGGGGAATACAGA +CAGGCAATGCGAATGCTTCCTGCGCAGATCACAGATGTCGTAACATCTCTTGCATCCGGT +ATGCCAGTATGGATGGTTGCTATCCAACAGGGCGGTCAGATTAAGGATTCGTTCGGCGGG +ATCGGTAACACGTTTAAAGTGTTGCTGAGTTATATTAATCCGGTCACGGCAGGTGTTGGC +GTTCTTGTTGGTTCGTTAGGTATTCTAGCGAAAGCTGGTTATGACTCTTACAAATCAATA +ACTGATATTCAGAATGCGCTTATTGAGACTGGAGGTTATGCAGGTGTTACGGCTGAAGAG +CTTGATTCAGTGTCTAAAAAGATCGCGCAGACAAGCAACTCAACCATTGGGAGTATTCGC +GAGATTGTAACGGAGTTGGCGAGTTCTGGTAAGTACACCCGCGAGCAGATCCAGAACATC +ACTAAGGCTACCGCAGAGTGGTCAGCGTCAACAGGAAAATCAGCAAGTCAAATTATTTCT +GAGTTCGAAAAAATAGCAAGCGATCCGGTAAAAGGACTGAAGAAGTTAAACGAGCAATAT +AATTTCCTTGAAAAAGGGCAGCTTACCTATATCGATACATTAAGCCGGACGAAAGGAGAA +ACTGAGGCTGTATCAGAGGCTACAAAACTATTCGCAGACGTAATGGAAAAGCGAATGAAG +TCGATCGCGGATAACGCTACTCCTCTGGAAAAGATGTGGAGCGATATTAAACAATGGGCT +TCGGACGCGTGGGGATGGGTTGGTGATCATACACTCGGGGCACTAAACCTGATTATCGAC +GTTGTTCAGGGTACAGTGATTCAGGTTAAAATGATTCTTGCGAAGGGTGATGAATACATC +TCAAACTTTATCGCCTCAGCCATAAAGGCAACTCAGTCACTGCCTGGAATGAGTGACTTC +GGCGCTGATGTACTGAAGGAGCAGGAGAATATTGTAAAAAGTTCTCGCGACAACTACGAT +CAGTTAGCTTCAGATCTTGACGCTATTAACGCTCGTGTAGAAAAAGGCGAGATGGGATAC +ATTGAAGCAATGAGGCAGCGCCGCACCCTTGAAAAGCAGTACAGTGAGGAAACTAAGGAG +GCAATAAGGAAAGAAGCAGAAGAGATCGAGAAGCGAAACCGAGAACGAAATAAGCAGTCG +AAAATTGTACGATCACCGACAGAGCAATTCGACAAGGAGTTAATTTCACTCAGGGCTCAA +CTTAAGGTATTGCAGGAGCATAAGGAGATCGGTCAAAAACTATCAGCACAGAGAAAGGCG +CTGTTTACAACTGAGGCTACGATCGCTGTTCTTCGCGAAGCTAGTTCTAAGCGCCAGTTG +TCTGCGGAAGAAAAAGCGTTGCTGGCAAGTCAGGAGAGAGTTATTGAGCTTGCGAAACAG +AAGGCCGAGATTGGCGATCAGATTGTTAAGCAACAGCAGTTGAATGATCTTACCGATAAA +TCTCTGAAGTTTGTCAATGAGATGACGGCGGCGACGGAACAGCTTAACGCGTCACGCGGT +CTTAGTACTCGCGACATGGAACGACAAGCTGAACTAGCTAAAATCACCACTGATTACATC +AACTCCGGCGGCAGCGAAGGAGACGAGAAACTTCAGAACATGATTAAGGCGCAAAATGAT +TACTACGCTGCGGAAGATGCCAAGCGAGCTGACTGGTTGGCAGGTGCTGAAAGTGCTTTT +GCTGATTACGGTGATGCAGCAATGGATATGTACGGCAATGTTAACGAGATCGCGTCAAGT +GCCCTTAACGGAATGTCAGATATGATGGTTCAATTTCTGACCACAGGAAAAGCGAACTTT +GAGGACTTTGCGAAAAATATCATCGGCATGATTATAAAGATGATTGCTCAGATGGTAATC +TTCAATACGATCTCAGGCATGATGGGCGGTAAGACGTGGAGCTTTGCTGGAGGGGCGTCG +TCTGGTGCTTCTGCGGCATCACAGGCAACCCCTACACCTGCTGCTTCTGTTTTTAGATCT +GTATCTTCCGGCGGGGCCGCTGTATCACTTGCTGCCGCAGCGGGTAGCGTGGCAACCTCT +GGATTCAACGCATCAAACTCGGCGCCAAAGGTGGTAAACCATTCAGGAGGTGGAACGGTC +GTTGACGTTAGCGGAATGGAGGTGAAAGTTGACAACGGTTCAGATCCGAGGGGGATTTCT +CAGGGCGTGGAAATGATGTTCAAAAAAATGATTCGTGAGTCTTGTTCGCAGGGCGGCGAG +GTTTATAATTACATTCAGGAAAAAACAGGAGGCTAATAATGGCGACACTTGACACTTTTG +GTTGGTGTACGCAGGTTCAAGGGGGCGGTGGCTCCCTTACCACTACCAACAGCGACCGCT +CTATTCAGTTCGGTAACGGGTACATGCAACTTGCATCATCTGGATTTAACACCACGCGGC +GTGAATATTCAGTCGTCTATGCCGGGGAAGATTTCATGGCTGTTTACGACTTCTGCAACT +CTCACCGCATTAAGCCGTTCGCATGGACGCCGCCGGACGGTAAGATCGGGATATGGGTAG +TAAAGCCTAACAGTTTGGGAGCGAAGCCAGTATCGCGCGACGTGATGGAGATTAACGTCA +CGTTTATGGAGCAATTTACATCTATGGAGTAACGCCATATAACAAAAGCCCGCCTTGCGC +GGGTTTTTTTGTAGCTGTAGAATGGTTGCAGGTAAACAAGAGGAAAAATCAATGAGCGAA +AACAAAAAACTTTATGATGAAGAAAGCGGAAAGAGCCTGTTTCACAACTGCCTTCAATCA +CTATATCCGGGAGAGATAATCACTCTCATCGAAGTTGATGGTAGTAAGTTCGGCGCTCAG +GTGTACCGATTCCACGGTGAGAATATCCAGTACACTCCAGAAGAAATCATGCAGGCCCAG +CAAACTGGAACGCTACCGCCGAAGGAAATTACATTCCGTGGCGAGAAATACGGGGCGCGA +CCGTTCGGTATATCCGGGATCTCGTTTGACAGTTCCGGGAAGGCAACAAAACCACAATTA +ACGGTGGCAAACATTGATAGTCGCGTATCTGCGATGATTCGTGCATATAACGGACTAATG +CAAGCTAAGGTGACTATCTGGATAACTCAGCGTGAGCTTATTAACTCCGATGGCTCAATC +GCTGATGGAGCTTACCGTAAACTGGTATACTATATCGAGCGTCCGAACTATGTTGATAAA +AGCGTTGCGCGGTTCGATCTCACATCACCTTACGATATGGACGGCATAATGATCCCGTCT +CGACTCACGCAAAGCGTATGCTATTTTGCACAACGAGGGTGGTATAAAACAGGGAAAGGC +TGCGGATACAACGGGCAAAATGGTTACTTCGATAAAGACAATAATCCTGTAGACGATCCG +TCGCTGGATTTTTGCCCGGGAACGGTAACGGCCTGCCGCCTGAGATTCGGCGCAAACAAT +GAATTGGATTTTGGCGGTTGCGCTGTCGCTTCATTACAGAGGAAAAATCAATGATTAGTG +CAAAAATTAAACTTGAAATTATGACTCACGCTCAGGAAGAATACCCCCGCGAATGCTGCG +GGGTAGTCACCCAAAAGGGCCGCGTGCAAAAATACCATCGCATTGATAATGTGCATCGTG +ATCCCGAGAATCATTTCATGATGGATGCTGTACAATACGCTTGCATTGAGGACGATGCGG +AATCAACAACAATAGCAATTGTTCACAGCCACACAGGAGACGGGGCTACAACTCTACCAA +GCGCTCACGATACGTGCATGTGCAACGAGATGGAAGTTACCTGGATTATTGTTAGCGTGC +CGGAAGGGGATATGCGATTTGTGAAGCCGGAGAAATTGCCTCTGATTGGTCGTCCGTGGT +CATTAGGATCATTCGACTGTTACGGTCTTGTTATGGCGTGGCACAAAGAGCACGGCGTAG +AATTGCGCGATCGCCGATTGAATTTTGAATGGTGGAAACCTGAGTACGGAATTAATCTCT +ATCAGGATTATTACAAGCAGGATGGCTTCGTTGAGATTCCAGATCAGAATAATCCGTCAT +TCGGTGATATGGTAATCATGCAGATAGGGCAAAACGTTCCGGTATGGAACCATGCAGGGA +TTTACCTGGGAGATAATCAGATCTTGCATCATGCCTTCGGCAAGCTATCTCGTCGTGATA +TTTATTCCGGATGGTATCAGGATCATACTGTTTTAATCGTTCGCCATAAGGATCTTAAAT +TATGAATGATGTAAAAGTAATTAAATTGTCAGGTTCACTTGGGAGACGCTTCGGCGTCTT +TCACCGTTACGCTGTTGACTCTTACCCGGAAGCCATACGGGCGCTATCCAGTCAGGTTGA +CGGATTTAAAGAATACATGCAAAGCGAGGTAGGATCTCGTAGCAAGTTTGCAATATTTGT +GGATGGCGTTAACGTGGGACACCATGAAGAGGAAAAATTCAAGTGCGCGAAAGAGATAAG +AATCGTACCGATCCCTACTGGCTCTAAGACAGGAGGTCTATTTCAGGTTGTATTGGGCGC +GGCAATAATGGTTGCAGCATTCTATACTGGCGGCGCGTCTCTGGCTTTAATGGGCACAAT +GTCCTCGTCTCTGTTTATGATGGGCGGCGCTATGGTGCTGGGCGGCGTGATGCAGATGAT +TTCACCGCAGCCGGGTGGCGCAAACTTTGAAGTTCAATCAAGCAAGAATAAACCTTCGTA +CGCGTTCGGCGGTGCTGTCAATACGACGGCGGCGGGATACCCTCTCCCGGTCCCGTATGG +ATATCGCGCCGGAGGTGGGGCAACTTTCTCAGCAGGTTCTTATGCCGAGGATATGAGTTA +AAATTAACCCGCCTTGCGCGGGTTTTTTTTCGCCTGTATAATGAGTCCACCGATAAATAG +CACAAAAAGGTAAACATCATGATTCAAAAAGTGATAAGCGGATCTAAAGGTGGGTCACAG +AAGCCTCATAACCCAGTTGAGATGGAGGACAATCTAATCTCAATCAACAAAATCAAGATC +CTGTTAGCTGTATCTGATGGTGAAATTGACGAAACATTCAGCCTGAAGCAGTTGATGTTT +AACTCAGTCCCGGTGCAAAACGAGGATGGCTCATTTAACTTCGAGGGAGTAAAGGCAGAG +TTCAGACCGGGGACGCAGACTCAGGAATATATCAAGGGAATGGAAGATAGCTCTAGTGAG +GTAACTGTAAATCGTGAGGTTACTACCGATAACCCATACACAATCTCAGTAACCAACAAA +ACGCTGTCGGCAATCCGTATCAAAATGTTCATGCCTCGCGGCGTACGAATTGAAAGTAAC +GGTGATAAAAATGGCGTAAGAGTTGAGTATGAGGTGCAACAAGCTGTTGATGGCGGCTCG +TTTGAGACGGTGCTCACCGATGTAATCGAAGGCAAAACAATGTCAGGTTACGATCGAAGC +AGACGTGTAAACCTACCTAACTTCAACAATCAGGTGATATTCAGAGTGGTTCGGAAAACT +CCAGACTCTAACGACTCGAACGTTGTTGACGCGATTCAGGTAAAGAGCTATGCCGAGGTG +ATTGATGCCAAATTCCGTTATCCGCTGACTGGTCTTCTTTTTGTCGAGTTTGATTCGAAG +ATGTTCCCAAACCAGTTACCTACGATCTCAATTCGTAAGCGCTGGAAGATTGTAAACGTT +CCGTCAAACTATGATCCAGAATCACGAACTTATAACGGAAATTGGGATGGAACTTTTAAG +AAGGCATGGACGAATAATCCGGCCTGGGTGCTTTATGACCTGATGATTAATCAGCGTTAT +GGCTTGGATCAGAAAGAGCTTGGTATCGCTGTAGATAAATGGGCGCTCTACGAGGCTGCG +CAATATTGCGATCAGATGGTTCCTGATGGGAAGGGCGGGACGGAACCTCGATACCTTTGC +GACGTGATAATCCAGTCTCAGACTGACGCTTACAAGGTTATCCGAGATATTTGCTCAATC +TTTCGTGGTATGAGCTTTTGGAATGGTGAGAGCATTTCGGTAATCATCGACAGGCCGCGT +GAACCTGCGTACATCTTCACTAACGACAACGTTGTTAATGGTGACTTCTCCTACACGTTC +GCAAGCGAAAAGAGCATGTACACGACGTGTAATGTGATGTTTGATGATGAACAAAACATG +TATCAGCAGGACGTTGAGCCAGTATTCGATCGTGAGGCTACTCTACGGTTTGGGAACAAC +GTTACGAGCATTACAGCGATCGGTTGCACACGTCGAAGCGAGGCCAACCGACGCGGGAGA +TGGATTCTGAAAACTAACCTCCGCAGCACTACGGTAAACTTCGCTACCGGGCTTGAGGGC +ATGATCCCGACAATCGGAGATGTTGTGGCAATAGCTGATAACTTCTGGTCAAGTAACTTG +ACAATGAACCTGTCAGGGCGTTTGCTCGAAGTGTCTGGAAGTCAGATTTTCTTGCCGTTC +CGGGTGGATGCACGCGCTGGTGACTTTATTATCGTAAATAAGCCAGATGGCAAGCCTGTG +AAGCGCACAATCTCAAGTGTTAGTGCGGATGGTAAGACTATAGAGGTTAACATTGGCTTT +GGCTTTCCTGTGAAGCCTAACACGGTATTCGCTATCGACCGCACCGACATTGCGTTACAG +CAGTACGTCGTGACAAAAATCGATAAGGGCGATGATGATGAGGAATTTACCTACAAAATA +ACGGCGGTGGAGTACGATCCTAACAAGTATGATGAGATTGATTACGGAGTTAACATCGAC +GACCGACCGACGAGCATCGTTGAACCAGATCAGATCCCTAGACCGAAAAATGTGCAAGTA +TCCTCAGAGTCGAGAATCGTCCAGGGGATGAGCGTAGAAACGATGATTGTTAGCTGGGAT +AAAGTTCCGTACGCTGTTTTCTATGACGTCCAGTGGCGAAAGGATAACGGCAACTGGCAA +AATGTACCGCAGACAGCAAACAAAGAGGTATACGTTGAAGGTATTTACGCTGGCAACTAT +CAGGTTCGCGTTCGCTCAGTCGCTGGTTCGGGCACGACTTCAGGCTGGTCAAATATCGTC +GCGGCAACGTTGACGGGTAAACAGGGTGAACCGGGCCGACCGATTAACCTCACAGCTACG +GATGATGTTGTTTTTGGTATCCGTACAAAATGGGGGTTCTCTGATGGTTCTGGAGATACA +GCCTATACAGAGTTGCAACAGTCACCGGATGGAACAGTGGATAACGCAAGTTTGCTTTCT +TTGATTCCGTATCCGCAGCATGAGTATTATCACTCACCAATGCCTGGAGGGAATATTGTT +TGGTATCGGGTAAGGACGGTTGACAGGATCGGTAACGTGTCTCAGTGGACTGATTTTGTC +AGAGGTATGGCATCAACAAACGTTGACGATATCATTGGGGAGATTTCTGTTGATATCGAA +AACTCACCTGGTTACGAGTGGCTTGTTGATAACGCAACAGACAACGCGGCGCAGAACTCA +GCTAACGCAGAGGCAGCAATAGAAAACGCGCTCGCCAATGACAAAGACGCGATCTACATG +AAGAAGGAGAACGGAAAACGAAAAGCTGAGTACACGAAATCACTGAAACTTATTGCTGAT +GAGACGCAGGCACGAGTGACGGCGATCGAGCAATTGAAGGCAAGTTTTGGCGATCAGATT +AGCGCTAGCAACAGCGAGCTGCGTGAGGTTATCGCAACCGAGACTGAAGCACTATCGCGT +GAGATTGACCAGCTTAAGGCTCAGATTGGTGACGATATTCAGGCAAGTCTGACTGATATT +CGGGAGGTTATCGCAACCGAGACTGAAGCACTATCGCGTGAGATTGACCAGCTTAAGGCT +CAGATTGGTGACGATATTCAGGCAAGTCTGACTGATATTCGGGAGGCTATCGCGAACGAG +ACTGAGGCTAGAACGCAAGCTGACTTAACACTTAGCGCGCGGCTTGGAAATAACGAGGCG +GCACTTGCTCAAAAACTAGACTCGTGGAGTAACGCGGATTCTACTGGTGCAATGTACGGT +GTCAAGTTGGGTCTGAAATACAACGGCCAGGAATACAGTGCAGGCATGGCTATGTCTCTA +GTTGGTTCCGGAGCTGCGGTTAAGGCGCAGATTTTGTTTGAGGCGTCACGATTTGCCATC +ATGACTGGAATGAATGGTCAGACTCAGTACCCCTTCGTTGTTGAGAATGGTCAGGTTATT +TTAAGTAGCGCGATTATCAAGAACGGATTCATCACCAACGCAATGATTGGAAACTTCATC +CAGTCGAATAACTATGTATTTAACCAGTCCGGATGGAGGCTTGACAAGGGTGGAACATTC +GAAAATTACGGAAGTGACGGTGAGGGTGCAATGAAGCAAACTAATACCACAATATCTGTT +AGGGATGCGAGTGGTCGCCTGAGGGTTCAGATTGGCAGGTTGACTGGCTCATGGTAATAT +CAAGGGCATCGAGAGATGCCCTTTTCTTTTGGAGGATTTATTATGGCGTACGGTATATCA +ACTTGGGACGCAAATGGCGTTTATAATAACTATGGAATTAAGCCTATTACGGTTGTTGGT +TGGAACTTTTTGTCAGCAGGCCAGAATTCAGCATCGTTCAGCTATCAAGTGCCTCCTGGT +ATGCATGTGAACTACGTTATAAGCCTTGACGATGGCGCCATTAGTGGGCCTGGCAGGAAA +ATTATTGCTAGCGGTAATACGATAACAGTAACGCCAACAAACTCACCTGGGCCAAACGTG +TACCCATCATCAAACTGTTACTTAATAGCATATCTGGAGAATGATTAATGTCATACGGTG +CTTTTATAGATGTAAACGGAAACCCATTCATAACCCCGTTATCCACGCCATTCGCTTTAT +ATGCGAGAGGGGAAATTCAATCAGTAAATGTTAGTGGTTCACAGGTTGCGGAGAGATACG +TTCGGATACCTACAGGTGTTCCGGTTATAGCTTTTTGCAAAACAACAAACACGCAGCAGG +GGACCGCGCTTTCAGCCTTTACTTTCAGAAGCGGACCCAATGTTGGAACTGTTTATATAA +GGGGGACAAATCCAGCAAACCAATCATACACGCTAACATACTACATATTTGCCATATTTG +AGCAGTCACTACCGAGATGGGGTATGGCAATATGGGATGCGTCAGGAAAGCTAGTGCTGA +CAAATGAGACAAAAGTCCTTAGTGATTTGGTTACAATCGGCACTCCTGGATACGCTGGCG +GTGGATTAAACATAGACACAACACTCAGCGGAAGCTACGCGGTTGTTCCAACTATACTTG +GCAACTATCAAGTTGTTATTGGAAGGTTGCCAACTGGGCAACCAATAATAGGAAACTCAA +CAGCAGGCAGTTCATGCAGGTACAACGGGAGCACAACGAGAATAAATGCAGCAGCAACCA +CTGCGGCAGGTCAGATAATGAACACAACGAATAATGGAAATATTATAACAGCAATCAAAA +CGGCAGCATACGACTAAGCCCCTTGCGGGGCTTTTATTTTATATCGAGCAATCGTGAGAT +TTGAAGTTTTTCTCTGATACATAGTTGAAGGAGAATGGGTATCCAGCACGCAATACCATC +TCCTTTCCGCGCATCTTAGATCCAAAAACGTAAACCGAGTACTCCGCGCCGCCTGATTCA +TAAATTGCCGTGCAAGTGCGCTCAGGCATCGATGAGCAACCAGTCAGGATGAATGCCGCA +GCGATAATGGTGATTAACTTTTTCATTTGTATGTCCTCGTCGTTAGTGTGATTGCATTGT +ATGTCGCATTTACTTTTATTGCAATAGAGCGATTACAATTTTTTTCGTGTAACAGGCGTA +TATTTTTGTAACCGGAATGGGTGTTACAAAATCGCCTCCATCCGACCGCAGGGAGATATG +ATAAAAACTCTATATAATATATATAGATAGATAATATTTAATTTTAGCTTTATATATATA +ATTATTGTTGTGTAACAGTTGTATATCGTGTAACAGGTGATTTGATTGATTCGTCAAATT +TCTATCATGTATGTTCAAAATTTAATCAATCTGGATTCTATTTGTAGGTATCTCTGTATT +TCTAATAAAAAGCGGTTACAAGTGTTACGCAATAGACAGCGCATAAAAATCTACTTAAGC +CATTGATTCTGTTGATGCTGGTTGTAACTTGAGCAATATAGACACGCAATTACACACTGA +TTACATGTATTCGATTGACTAAACGCTGTTAATGGCTATAATGGATTCATCGTAAACGAA +GGAGATAAACGCAATGTTCCAGGTATTCACATCAAGCCAGCTTTCTAACGACGAGTATCA +TAGAAACGAAGGTTGGGCGTCAGAGTATGTAAGCGGATCGAGTCTTGCAGAAATTTATCA +GACCTGCCCTGCTAACTGGAGATTCAAGAAGAACGAGACAACGAAAGCTCTGGAGTTCGG +TACTCAGTCGCACACCAACTTTGAGAGTCGAGATCTGTTTACTGCAACGTATGCTAGATG +CCCTGCTCCGTCAGAGTTTAAGGATCTGATTACTTCGCAGGCGGCGCTGGCAGCAAAATT +AAAATCATTCGGCCTGAAAGGTACATCCGGTAAGCAGTACCCGGACCTCATCAAAATGAT +GGTTGATTGTGGTGAAGAACTCAACGTTCAATACCTGATTGAACTGATCGCAGAAGCTGA +GGCCCGTGCTGAAGGAAAACAACTTGTTGACGCGGACAAATACGACGCTTGCATGAAGAT +GAGAGCCATCCTTGAGCAGAATCCCGATCATGAAGCGTGCATCAACAGTGAAACGGCGCA +GCGTGAGATTTCAATCTTCGGTGAGATATCCGGCGTAAAAGTTAAGGTTCGACTTGACCA +TCTGGACTACAAAGAGAATGTTCCAGGTCGTGTCCTGACTGGTTATGATGAGAATGGCGA +TCCGGTATTTGAAGACGTAATTTTCCCGGAAGCACTGATTATCACAGATTTCAAAACTAC +GATGAGCGCCAACCCGTTAGAGTTCCCGAGACTGGCATACAATCACGGCTATTACCTGAA +GATGGCATTGCAGCATGACCTGCTACGACGCGCAATCCAGGCTGGAGCTTTTGAAGGTAA +CTTCCCGGAAGACATTCCGATCGTGGTTCGATTGCTTGCGCAGGAGAAAAAAGAGCCTTA +TATCGCACTGGCTTACCGTATGACTATGGAGCAAATCAGGATAGGTCGTAACCAGTACAT +TAGCGTAGTCCACACTTACAAGGCTTGCTCTGAAATGGATGTTTGGCCTGGGTACGCTGG +CGACGCAAGCGAGATCGAACTTGAAACGCCATCATGGGTGCGTTACCAAAATAAGTAAAC +GGCATAAATAGCTAAACAAATAATTAATGAGGTGTTATAATGCACCTCATACACCAATCA +GGAGAAGTTAAGATGCAATTATCACCAGAAACAAACGAAATCCTTCCCGCACTGTTCAAT +GCTCGCAATAAATTTGCTAAAGCAAAGAAGGACGCAAAAAACAATCACCTGAAAAATTCA +TACGCAACTCTTGATGCAATGATGGCTGCGGTTAGTCCGGCGCTAACCGACAACGATATT +ATGATCCTGCAATCAATGCTGGACACCAGCACTGAAACAACCTTCCATCTTGAAACGATG +CTGATTCACAAATCCGGGCAGTGGGCCAAATTCTTCATGATGATGCCGATTGCAAAGCGC +GATCCGCAAGGCGTAGGTTCTGCAATGACGTATGCTCGACGTTACTCATTAGCCGCAGCG +CTGGGGATTAGCCAGAGTGATGACGATGCTCAGCTTGCAGTGAAATCCGTCAAGGACTGG +AAAAAAGAACTTGATGCGTGTGAAGACATCGAGTCACTGAAAGATGTATGGGCCAACGCT +TACCGCCAGACTGACACGGCGAGCAAGTCAATCATTCAGGATCACTACAACGCATTGAAG +GCTAAATTTGAGATCGGTAAAGCTCGCGGCATTCGCCCGGCGCAACCGGAACAGAAAAAA +CAGGTTGAAGCAACAAGCGCGAAGCCTGTACAATCCCAATCAATCACCAACTTCGAATAA +TCATCAGGGCGGCTTAGGTCGCCCATAAAATTTAGGAGAGAAAAACATGCATATTATCAC +TGGCGAGATCCGCAAAGAACCAAAGATTCTTGAACGTAACGGCGGCAATACTTATATTAT +CGAACTGGCAGAAAGCTATAAGCCTCGTGATGGCGATCGCGAATACACCAACTACACGTT +CTTTTTTAGCGACGGTGGGAAGCCAGGCCTTGCTGACTGGTATCGTGAAGCGTTCCAAGT +TGGTCGAGTTATCTCAGTATCGTGCGAGACGTTGAAGATCTCATCACGCGAACACAACGG +AATGATTTACAATTCATTGCAGGCGGCTGACTTCCCTAAACTAGTATTTAGTCAACGAGG +TCAAAGCAACCAGCAACAACGAGCGCCTCAGCAACAACAGCGTTCTCAGCAGCAATCACA +ACCACAACCAAATCAACAATCAACATTTGACGACGATATTCCATTCTAAAGAGAAGCCCC +GCATTGCGGGGCTTTTTATTACTTCATCTCAATTGCCTTCGGAAATGAGTCTACGTATTT +TTTAAGCTTTCAACAAACTCTCCAGATACCATTCTTTCATGATTTCTTTTGCACTCTTCA +ACCTTCTTGTTGTAAATCGAGTCATTAGGCATCTCAACTCGAACGCTAACAAAAACATCA +CTCGGAATGTCAATAGGATCTCCGTCGCTATACCCATCCTTATGATTTCTTGCGAATGAA +GGCGCGTTATCATGAGTTCTATGATAAGTCTTGATAACCAAAGACCCATCAGGGTTAACA +TCATAATCTACCCACAATATAGGCTGTCCGTTAATGTCTTTTGGTATCTCTATACCACCA +TTAACACCACCCCACGCTAGATCAGAATTTAGTGATAAACACCCCCTTATCAAATACTCG +CCAGTAGAAATCCTCTCAACTGTACAACCTTCGCTCTCGTCGTTTGTTCTATGGCTCCCG +TTGCCAAAAATATCAACGATGGGCGAGGCTCTTTTTATAAATCCGTTAGAGTCAACGGTT +GTATTGCCTGTATTCCATATAACCTGGGTAGATTGCCATTGCCCCGCTCCTGTCTGTTTT +CTGAGCCTCACATCCTTATAGTGTGGAGAGGTCATTGATGCGTCTTCAATAACAAAACCG +AAAGCACTACCATCTCCTTGACCGTTTCTATGACGAACAGATATAGCTGTGACCCATCCA +ACAGAATTAACATTGTAACTTGCAAGGCTGCTAGGCTGAGATGATAAGGCGTTAACATAA +TCTACCCAGCTTGATTTCTCGTTAGATGCCGGACTTGATACAACGTTACCGGAAGAACTT +GCCTGAAACGGTATCCACGGAGAAAACTTTGCATTATTGCCGTTTTTCATCCTTATGTAA +AAAGTGCCGCGACCCGCTCTTGCGTATTCGTTTTGAGAATTTCCAGATTCTGGGGCAGTA +CCCAAATAAGTAAAAGGCGTAAATCTCTGAATGCAAGCGCTTGCACCGTTAGCTCCATTA +GGAAGAACCTCAAGCATACCTGCCGTAGCCTCAGGATAGCCCCTACTAGCGGTAGCTAAA +GCACTTGATGATTGCATATATATTCCAGGGCCATCACCTTCACCAGTTATTGAATCAAGA +TGTTTTTCCCCTAAGTTAGTTCTATCAAGTTTGTAAACCTTTAGGCTTGTCCTTGCCTGC +TCCTCGGTAGTTCCACCAGTGCCACCAAAATTAACCCCTAGAGCCTTGTTTTCACTTCCA +TCATGAGTCATGGCGCCCCAGTCGCCGCTATCCTTGACGATCAGCTTAAATCCGGTCCTA +TCGTCATTTGAATAGATTTCCGTTAAATCTCCGCGAGGTTGATTTAATCTATTTACTGCT +AGATTTTTCTTTGATTGCTCCTTGTCAGCAAGGCCAGAAAGATTTCCGTCCTTAGTTAAA +AGATTGTCAGCATTAACGCTATTTGCTGCGTCCTGAGCTTCCTGAGCACTTACCGCTGCC +GCGTCTTTAGCGCTAACCGCCGCATCGCGTGCTGCCTGGGCATCGTTTTTTGCTGAGGTT +GCAGTTTGCGCCGCAGTCTGAGCATCATTAACATAGCCAGATAGATCGCCTTTAGCGTCA +TTGATTGCCTGAATGGCCGCCGCCTCTTCAGAGTTAATATGCGTAACGGCTGAATTTTCT +TTTTGCTGCACATTAGTGATAGCCTTGTCTTTTGCTGCATTAATGCTACCAATAGCGCTA +TCTGAGATTTGCTGCGTCTGGTTTTTTATTGAGATAGACTCGTCACGCGCTGAATTAGCT +GAGTCGCGAGCAAGCTCCGCTTGATTCTGCGCAGCTTCTGCGGCTGATTTGTTTGACTTA +ATTTCTTGAACGATATTGTTCAGGTTGTCCATATCAAGATCGGCAATAATATCCAATGCC +GATGCGATCTCAGTCTCTTTGCTCTGGTAGTACCGAAGCGTCTCAGCGACGTTTTGCGCA +AGACCGTTAACGGTCAATGAATCGTTAAGCAAGATCACATACTTACCGTCAGCGGCAGTC +TGACCATCCGTAGAGATAGCCTTTAGCTCTGTGTCGCTCACAATGTCGCTGATTACCGCC +AGTTTAATTGGTTGCTCCAGGAATACGATAGTTGCACCGACTCGAATCAGAGCAAGCTGA +TCTTTCCATTTTGTATCGGTTCCGTGAACCGTACCGTCTGCATCCATTGATGCAGTACCG +CGTCTATATAAAGCCATAGTATAAACTCCTTAAGTAAATAGCACGAATTGCTAAGCAATG +ATTTTATCATTGTGATACCTGCCTTGCAATGGGCAATAAAAAACCGCCCGAAGGCGGTTA +GAGTAGGTCACTTGCTGAGAATAATTTGGCTTGCATTCCTGAGCGGTATCCTCCGGGATT +CGGTATGATTATTTTTAATTGTCTGTCGTCTGCCATGTACAAGGTATCCTTGTCTGAAGG +TTCACACGCCACCCTTACCTCTCGATCACCTTTATACCTGTATGCAACCATTTCGAGGTT +TTCAGGGGTGAAGCAGGCCCATACCTCTTGCTTTGTGTGAAATGCAATATGCTGAGCATC +AATCCAGTTAAGGCATAAGTAGATCGCCTTTTCAGTTTTACCAGTCACGGCAACCGAGCA +ACTCGTGTATTTCTTCGCATAAAATGACTCTCTTCCTTCTTCATCAATAATCAAAATATT +GCAAAACTCATCATCAAGCCCATCCTCGTGCACAAGTTGACACGGTATAGTGTGAAATAC +GCTCTCTCTTCCATCCTCGCTACGCTTTATACCGACATCGAATGATTCGGTGGGTAGTGA +CTCAAACACGCTCAACGGCGTATTTACACGTTTCTCTGTGCGCTCCATAACCTTCATCAC +CGCCTCATGTTCAGCCATCATGACATTGACACCTGACACCGGAGTCCGGCGCGCTTTCTT +GTTTGCCTTGACGATGTATTCCTGCGGAACCTTTCCGAGAAATCTTCCCAGGATGTTTAC +GCATTCGCTGTACGGCATACCAGTCAACTTCATCAGCCAGCCAATACCAGAGTCGTTACC +GCATGAGTTGCAGATCGCACCGCCGTCGCCCGGGGTGTTCAGGTTATCAGTCCAGCGAAA +TCGGTCTTTACCGCCGCAGTTGGGGCAGGGTTGGTGCTTCTTATTAAAAACATTATTCGG +CAATCCGCAGATTGATTGGAAAGCCTCGCGCCATAACCCCTTCATGTACGGTAAAACGTC +CTCTTTCTGAAACATCATAAATTCTTCGTTCACTTCCAGATCTCCAAAATAAAAAACGCG +TAGAAGGATGTTAACCCGCTACGCGTCGTTTGTTTTAACTAAAAATGCTATTGGTCGTTC +CGATATCTTCCCTCTTCACGACGCGCATAAATTTCTTGTTCTTGCATCGCTTCTCAAGGC +ACTTGCCGTTACCGTCAAACTTCAGGTCGAATCGCAACCATGCGGCCCTAAACCCTTTGC +ACCCCTGTCGGCGGTAAGCACGATGCGCAGCTTCAGCGCCTTGCCATGAAATCATATTGC +GTTCTTTCCAGCCTTGCACCGTCTGATTGCTAACCTTCAGAGCCTTTGCGCAGGCCGCCG +GGCCGCCGTAATATTCGATAAGGGCATCAAGTCGCGCTCGCAGTCCGGCGCGCGTTTCTT +CTTTATGAATATAGAACCCGCAACGCTGGCGAGGCTTTTTATCTTTACCGCGCCGTGTTC +CGTTGTTACCATTGATGTGACGTTTATCGATTTCACCAGTTGACTCTGCGATACGTTGAA +TACTCATCTTGATTCCCCTATAGCACTTTTTGCTAAAAACGTTTACTTTATGCCGTGTAT +TATAGCGTAAACGTTACAACGATTCAAAGGATTAATAGCCGTGACAATGAACATTAAAAA +ACAGATTGCATTACTTGGCGATGACTATATAAAGAGAACTCAGGAGCGATTTACTGTTGG +TGAGGTTGTTCCTTATCCGTACCAGGTTGTTGCTTATGCCGAGATCGCGAAACGCCTATC +AAATTACGAGCATCCATTCTTCGTTAAAGCGTCTGTATCCGCAGGTAAGACAATCATCTT +CGCTATGGTGGCAAAGCAGTGTCAGAAAATGGGCTTAAAAATGCTTGTCCTGGCTCGTCA +GGGTGAGATTGTCGATCAGGATAGCGAAGAGATCGACAACTTCGGGGTAACGAACTCCAT +CTTCTCAGCGTCACTTGGAATCAAGTCCTGCTACTTCCCGATCGTGGTTGGCTCAGAGGG +TACTGTTGCAAATGGCCTCGACAATGAGTTAGCTGATTTCGTCCCGCATGTAATTGGGAT +CGACGAATGTCACCAGGTGGATTGGGAAGACCTTGCGCAAGCCATCGAGGGTAAGGAAAC +AATGGAACAAATGAGGGGCGAGAAAGGGAAAATTATCATGGACGGAGATATTCCCCTGAT +TGGTAATGATGGAAAGCCTTTGCTTGGAACTAAGCGCAGTCAGTACACGATCGTAATCAT +GGAAATGATGCGGCGCTGTAAAAAGGTTCACGGTCACGATCTCAGAATATTTGGTATGAC +TGGATCTGAATTTCGTGGCGTAGTTCCTATTCTGGTAGAGAATCCGAAAGCATTGGGATT +CTGGCGTGAGCGAGTAACTGATATCGACACAAACTATCTGATTGAGTTCGGCTCTGTCGT +TCCGACTATATTCGGATCAACAGACGGAGTTCATTACGATCTTGATAAGTTCAAGGCGTC +TAGCGAGGACGGAGTGCAGGACTTTACAGAGAAAGACATGAAGGCTATGGAAGATGAGAT +CCTTCATGATAAATCTCTGACTCAGCGAATCATGCAAATGGTCGCCAAAAAGGCAGAAGA +ACGCAATGCGGTCCTGATTACATGTGCTGGTGTGCGCCACTGCAAAGAGGCAGCGGCAGC +ACTTCCTCCGGGAAGCACCTATGCAATTATTACTGGCGACACAGACAACAAAGCGCGCAA +GAAGATTCTTGACGATGTAAGGGCCGGAAAAATTAAATACACCTTTCAGGTAATGGCGCT +CACTACTGGCGTTAACGTTCCAAATTGGGATTTCAGTGTCATACTCCGCAAGATAGGATC +GCTCACTCTGTTGATTCAACTTTTGGGTAGGGGTATGCGACTGCTTAAATCCTGGCAGGT +TGCTGAAGGAATGGTTAAGCAGGACCATCTGGTATGGGATTTTGCAGGTACGATGGATGA +GCTGGGTCAGCTTTATTTCGATCCGATACTTGAGCAGGCGCAATTCCAGAAGCGTTTTGA +AAACGGCAAAGATCCGAAAACATGTCCGAAATGCGGTTGCGTAAATAGCTTCTATGCTCG +ACGATGCGTTAATGTCATTGATGGTGAGCGTTGCGATCATTTCTGGACTTCTCAGATTTG +TGAGGACCAGGTTGACGAGCGAACCGGGAAAATCCTTGTTAAAGGATGCGGTGCAGAGAA +TGACGTTGTTGCGCGAGTCTGTCGTTGTTGTGATGCTTCTCTTGTCGATCCTAACCTGAA +GTTATCCGGTAAGGCGTACACCAAGAATGACTGGTATGAAGTAAAGAATTTTGAGGTTAC +GCTAACCAAAAACCAGAAAGGCATAATATACAAATACACTCTGATTAACGACGATGGTGA +TGAGTTCAAGGCGTATGAAAAATTCTTCCCCGAGTCTGACTCTAAGATTTGCGGTACGCT +ATGGAAAACTAAAGGTGTACTTCCTCATGTGTCAGATCCTAAAATGCGCCGCTACTTTAT +CGGAATGAAGAACGCCATCAAGATTTTGCAATACTCACATCATATTGCTCACCCGGTGCG +CGTAACTCATCGTCGCAACCAGAAGAAAGAAGATATCATCTCACGCAAAGACTTCGGTAT +GGAGGATATCCCGGAATGATTACAGACAAAGGTGATTATTTAGAATTTTACGAGAGAGAC +ACAAGCGACACTCGAAAGGAGGATGCTCATCAGGTGGATTGTGTATCTTGGCTGAAATAC +AATTTTCCTCACCTTCTATTTTGGCACACTGTCAATGAAGGTGAAAAAACAATCACATCG +GCGCTCAGGGATGAGCAGGCAGGATTACTTAAAGGCGTGTCAGACTTCGTTATCCTGATT +GGTGTTAACTCACGATACCCGTTTGCAGCAATCGAACTTAAGCGGGTTAATAAGTCAGGC +AAAGGAAAGGCGTCACCAGTCAGCGACAAGCAAAGGGAATTTCTCCAAAAGGTCCGGGAG +CGTGGCGGCTTCTCTGCCGTCGCATACGGATTCGGGCAATTCAAGATCGCAATTTACGAA +ATGATGAAATAGCACTTTTTGTTAAAACTGCCGGGATGGAATCTGGCATTATTATCTCAC +CAAAACGAGAGGAATAAAAATGAAAGACTTTAATGATATCGAAACTATCGACTTTGCAGA +AACTGGTTGCTCATTCACTCGCGAAGCAATAGCATCAGGCGGTTATTATCAGGCATTGAA +AACGCCAACCTGTAAAGAGATTTCAGGGCGTCGATACAAGGGGACAAATACCCCTGACGC +TGTTCGTGATTTATGGTCAACTCCGCGAGAGGTTATTGCATACCTTGAGGGTCGTTATGG +GAAATATGATCTCGACGCTGCGGCAAGCGAAGAAAATAAAGTTTGCGAGAAGTTTTACTC +TCAGGAAACAAACTGCTTAAAACGTTGGTGGGGAAAGAATAAGCACGTTTGGTTAAATCC +TCCTTATAGCCGACCTGATATATTTGTCAAGAAGGCCATTGAGCAAATGGAGCACAACAA +TCAGATCGATATGCTTTTACCTGCAGATAACTCTACTGCGTGGTTTACTGAAGCGCGGCA +GAACGCAGCTGAAATAATCTGGATTGAAGCGGACTTGACTGAGGATATTGACGGCAATGA +ATACGCACGATCCGGTCGCCTGGCTTTCATATCCGGTGAAACTGGAAAGGCCGTAGACGG +TAATAACAAAGGTTCGGTAATTTTTATTATGCGCGAACTTAAAGAAGGTGAGGTGCAACA +GACTCACTACATCCCAATCACAAGCATTTGCCCTTCGGTGAAAAACAAACGAGCAAAGGT +GAGGAAAGTATGATGAGCGAAAAAATGGTTCCTGTTAAATTAACTGAGCAAGGTTTATGG +CTACTTTATCGAGCTACGTGCTGCGAAATTATGGAGCGAAACGGATTGACTCAGGATGTT +ATTGGTTGCGATCTGTGGGAGTTCACTAGTTCTCTTGATATGTCTTTCGATGAGATAAAA +AATGAATACATAGAGAACTGGCCTTCAATCATACAGAAAGACGTGGAAGAACTTAAAGCT +GATACAATCGTACAGCACTAATTGCTAAAACTACCCGGCGAAAGTCGGGTATAGTTATTT +CATAGAAACGAAATGAGGAATCAGAAGATGGCACGCATTAACGCAAACTTTTTCAATATC +GCTCAGCAGTCCGCAAAAATGGCTGTTCATATTACGAACAAGCAAGGCGGCAACTTCGAT +TGGGATATTGCTATGAACTTCCTTAAAATGTCTTATTACCGTTGCTCAGTTGAAGAAGTC +GAAGGCTTCATCTCTGACGTGGAGAAATTAACTAATGCTGATAAAAAAGCAAGGTAAGCG +CGAAGTGTGGGAGCACGCAAAGGAATGCGGCATCTCAGACGATATAGCATTAATTGCTAA +ATACTTTGATATAAAGGATGTTAGCATTATATCAAACGGCAAGATTTCATTTATGGAAGG +TATGCCGAGAAAAATGCAAAGAGTTCCAGCCACTCCATCACTTGAGTTTTACCGCGAAGA +GGGAAAGAGAATTGAGCGAGAAAGAAAATCCACAAAAAACGGCAAGTCTTCCCGGCTTAA +ATATTAATGCGGACGAATACCAGGCAATATGGATCGGGAAAAAGCAGGTTAAGCAAATCC +CTTTCTCTGACTGGTTGCCACCTGACTTTGTTAATGTGCTTTGCACTATCGGTATTGAGC +AGGAGTTGCATATAGGTTACTACTCACCTGGCCGAAACAGTATGATGCTTGAGGTTGACG +GAAAGCTCGTTGAGTTTAAATCTTCAGATCTAGGATTCTGGTTAAAGGCTGTGGCATGAA +ACTTTATTTTGCTGTAGTATTAACACCGCTAATTTCATTTTCAGTAATGTATTTCATTAT +CATGTAAGGATTAAAATATGTCACAAGCTAAAATCACTACCGAGCAACTTATCGAAGAGC +GCATGAGCGGCCTGACACTTCGCGAGATCGCGGAAAAGTACGGTATGCACATTCGCACTG +TCGAGGCGCGTCACGCAAAACTTGCAAAAGAAGGCCACTTCCACGGCAACGAGCATGTTG +CTAAGATGGTTCCGGAAGGCTTCATGGTAAAAGGCACGTCAACCATGATTGACGCGGAAG +GTAACGAGAAGATTCGTTGGGTTAAGACATCAGTTGATAATGAGCGCCTTGAGGTTCTAA +TGGAAAAAGCGCGTGAAGCATTCTGTTCAGAGTTGCCTAAGGCTATTCCATCTGAATCAC +CTGACGTTAGTTTTGATGAAGACACGCTTGCGATGTATCCAGTTTTTGATTTGCACATTG +GTGCTCTTGCTCACAAACATGAGTGCGGCGAAAACTACGACACAGCGACAGCAGAGAAGG +TTATGAATGGGTTCTTTGACTACGCTGTAGATAAGGCGCCAAACTCAAAGAATGCCGTAT +TGGTATTGGGTGGCGATTTCCTACATTACGACTCTTTGGAGTCTAAGACTCCAGCGTCAG +GCCATTACTTAGATTCTGACAGTCGTTACGCTAAGCTTGTTTATGTCGCAATCCGATCAG +TACGACGCGCAGTCTCTCGAATGCTGGAGAAGCACCAAGTTATTGATATTAAAGCAATAA +GTGGGAATCACGACGAATCAGGGATGGTTTGGTTGCGCGCTGCGCTTGCTGCATTTTATG +AAGATGAGCCGCGCGTAAATGTTGATGTTAGCCCTGCCGCAATGATGATGACCAGCTTTG +GTAAGACCCTTATTGGATACACTCACGGGCATCAAATGCGAAAAGCAGATACTCGACTAA +GTGTTATGGCAACTGATTTTCGTAAGTTGTTTGGTCAAAGTGATTACGTTTACACGCATA +GCGGTCACTGGCACAGTCAAAAGATTACAGAAACAAACTTGGGTATTGATGAGGTTCATG +GTCAGCTTGGAAGTCCTGACGCATACTCTGCCAATGGCGGTTGGAGGTCTCAGCGTCAAG +CTGCTGTGATTGTCTATCACAAGGAATTTGGTGAGGTTGGACGATTCATTTGTCGACCTG +AAATGTTCTAAATAGCACCTTTTGTTAAAACAGTACCCGCGAAAGCGGGTATTATTGTTT +TATAGAAACAAGAGGAGATTGCAATGAACTGGCACGAGCATTACGAATATAGGGATGGTG +TTCTATATCACAAGGTAAAGCCATGCAGAAGGCATGATGTAAATATTGGGGATGTTGCTG +GAAGGGTTGCCAAAAACGGCTATCACTATGTTGTTCACAAGAACAGGCCGTATAAGAGAT +CTCGAGTTATATGGGAGATGTTTAATGGTGAGATACCAGATGGTTTTGTTATAGATCATC +TGAATCACAATGCCACCGATGATAGGATCGATAACCTTGAGTGTAAGCCAAGAAGAGAGA +ATATGGTTAATGTTAAGTTAAGGATTGATAGCACGACCGGAGTAACTGGCGTATCAAGAA +AGAGGGATAACAAGTGGAGGGCGTACATAACAATTATGGGTAAGCAGAAGTGCAAGAGCT +TTGACACGTTTGAGGAAGCTTGCGCGCAGAGGATTGAATGGTCAGTAACTCATGATTTTC +ACCCAAATCACGGTGGAACATACTAATAGCACCTTTTACCTAACCCGCGCCACAGAAGTG +CGGCATAGTAACCACATCGAAAACAGAGATGCTATATCATGAAGATAGTCAAGTGCATCC +GAAATGACTCCAAAACACTTCCATTCCGTGTAAATCAGATCTATAGTGTTGGTTATGATT +TCGGTGGGGGATTATTTGAGATTTACGACGGGCGAGGTTCAGCAATCCAGACTCCTCTGA +ACGGTCACTACCTGGAATTTATTGAGATAGATTAACAATAGCATTCATCACCTTACAGGC +TGGCATGATTTACATGCTGGCCTTTTTGCGTTGTGTCAAATAAATTTGAAGGTTAAAATC +GACTCACTTGTTCAAAAAATATATGGTGAGATTATGAAAGAGTTTTTAACGGCTGCTACG +TCAAGCACTGGCGGTGCTTCGTTGGTAGGGGCGGCGACAGGGCAACTTTATATTGCTGGC +GCTACATTCATTTGCTTTCTGCTTTTTGGTGCCTGGGGAGCGTACTGGAAGTATCGTGAT +AGCAAGGCAATTCAGGAAGCGTTAAACGATGGCGATCTAAATAAGGCGCTTAAGATCAGG +GGGAGATAATGAGTTTAAAAAATAACGTTATAGGCGCATCAATCGGGGCCGCTTTGACGT +TGACACCTACCCTACTGGAACGGATCGAAGGTATAGAATACGAGGTTTATTACGATATCG +CCGGAGTCCCTACCGTATGCAGCGGAATAACCGGGCCTGACGTCATACCTGGTAAGAAAT +ACACTAAGCGAGAATGCGATGCATTGCTGATAAAACATATCGGCGTCGCTCAGCGATACG +TTGACAAGAAGGTTAAGGTTGACATTCCGGTAACTATGCGCGCATCACTGTATAGCTTCA +CTTTCAACGTTGGGACTGGCGCTTTCGGATCGTCTACAATGCTTAAGCTAATCAATCAGC +GCAAGCACAAAGAAGCGTGTAATCAGTTATGGCGATGGGTATACTACTACAACCCAAAAA +CCAAAAAGCGCGAAGTGTCGAGAGGGATCAAGAATCGGCGCGCTGAAGAATACGCATATT +GCGTTAAGGAACTATAATGAAACTTAAGAAAACGTGCATTGCAATTACGGTTGCTGTTGG +TGTGATTTCTCTATCCGGTTGTTCGACGGCATCTGCTCTGAGTGGTTTACTTTCTGACTC +CCCGGATGTTACGGCGCAGGTTGGCGCTGAGAACACAAAACAACTAGCAGGAGTAACAGC +AAAGGCGGATGATAAGCGAGAAGTGAAGGTGAGTGATTCAAATATTGGCAAGATTGACTC +ATCCGTCAAGAAGTCCGTGGAGGTGTCAACCATTCAGGCCAACACGGTTAACGCTGAAAG +CATCACAGTAACCAAATCTGGAAGCTGGTACGATCCTGTGGTTTGCTGGATTCTCGTTTT +TATTGTCCTGTTGCTGTTTTATTTTTTAATTCGTAAGCACGAAAAAAAGGAGGCGTAAGC +CTCCTTTCTTATTTGTACCTTTTGACGTGAAGTAGCAACTCCCCATCCTGATCGCAAAGA +TTGTGCTCACCGTCGTTATTGGCCCTCATCGAAGTGAGCAGTAGGCTAAGTAATCCTTGC +TCAAATTCTTCTTTCGTAAGCTGGAGCCTTGCGCACAATTCGACGTTCCGATCTATCAAT +GTTTCTACGTTCGCCAAACAAGTCTTCATCACTCATTTCTCCAATGTGCATCATTTCCCA +CGTATATCGATTGTTGTAGCCATCAATACACATCAGCTTCATCATTACCGGGCGCTTGAT +CTTTCCCTTGCACCAGTAAAATCCACCCTTGCAATCAAGATAACCCTCAGTCACGCAGCG +TGCGCAAAACTCCTTAGACAGCGCGCTTGTAAATTCACGGCGAGTCATTCCGGCGGCCTT +AGCAAATCGCTCACTTTCCTTGTGGGCGTATATAAATTTCGCTATGTGCTGTCGAGTGTA +TTTGTCGTAACCTTCGCAGAACCTGAACAGATCTAAAAGAAGAAGCATATTATTAACCCA +TCAGTCGAGGATTGATGAAAACAATATCATCAATCCGGCAAGTGTAGTTCATCTCTTCGA +GCGTGATCAGCAGGCTGTCGATTCGCTCAGCTACTTTTTGTTGACCGTTGAACGGCGTAA +CGTTACGGCACTTTGCAACAATGCTATGAATAGGTGCGCGACCTTTGTTCTTCTTTGCGA +TCTCAGTGATAACATCAATCAGCTTACGAGATTCAGCCTCATCACCAGCATACCCGGCGG +CGCTGGCAGACGACAGATAGGTTCTGGAAAGCTCATTGAAAATCATGATCGCTTCCTGCA +TTGTTTCAAGGTCAATCTCACGGTTGGAACGGTTCGGTGATTCACCCTCCCAGTTCTTGA +TTGTGTGAAGAACTGAAGCAATGCGCAAAGCGTGCTTATCGAACTTGCCGAGATGACCGC +GTAGCATTGAGTGAGAGTATTTGCCCCCGGCTGCGAAATCCGGCTCCATAGCCTGGCGAG +CAAGGTTTAATTCACGCATAGCATTACGGCTTACAGAGAGAACAACGTTGTCCTCCTTCA +TAATGTTGTGCACAAGTCGATAATATTTACTCACCAATCCTCGATCGACTTCCTTATACA +GTGCATCACCATTTTCATCGCAAAGAATACGAGTGCCTAAAAGAGGTTCCTCGCGAACCA +ATAGGAAACGCTCAGATACACCGATACCGCGCTGGCCTGCGTCCATGATACCCTTGATTG +TTTCATCCTGCGCAATGACGCAGATCGAACCGACCGGGCAAAGAGATAAGTTATTGTCCT +GATTTGAACGCGCAACCTCCATATGGTTTTTATCCCACGCCTTGAGGATAAGCTCGCTGT +TTGATTTCTTATCAGAACCGCCATAAGTCAGGCCAAGCAATGTATTTATTGCCGTTGCCT +CATCAGAGATTACGGAAAAGTGGCCTTGAACAGCAGCTACTTTCGCAAGACCTTCCGGTG +TAGGATCTGATACCGCGAAAACAATATCAGCCATCTTCTTGATCTTCTCTTCCAGTTTTT +CCTTGTCCTCGTACAGCGCCGCCGTCGTGTTACCCTTCGGATCGTTTTTGATTTCCTTCT +CGATCTGACGTAGCTGACTGGTTAAACGGATACGTTCCTTTTTGCGCTCTTCATTCAGTC +TCTGAATCTCTGCGCGCATAGGTGTAATCGCCGCTGAGTTAATCGCGGATTTACCTGTTG +ATGGTGGCTGGCTAATCACCATATAAAGAGCGGTCGGTTGTTCTTCTCCGTGATATTGCA +CCCAAAACTTCCCTAGCATCGCGGCTGAGATGCACCCAATGAAATGAGCGTACGCAGACG +AAACAGGAAACTGTACAGACTCAGCTTTTGCTTTTGCATATTCGAATACCAGGTTATCGC +CACCTAACGAAATCAGCGGGAACTTATCGTTTCCACTGTTGATATCGATCGGGTCTTGCC +AAAACGAAACTGAATCCCCGTAGCTGTTTTCACGAATTGCGATCGCCACCGGATTAACTC +CAGTGCTATTTGCGATCTCAATAATCTGTTGGTAATTCAGTTTTGGCTTAATATTAAACA +TCACAATAAACTCCTTAGTTGACGGCGTGAATGATACACCGTCAATGGTACACGCGTTTT +GCAAAAAGTGCTATTCGATCCGTGATTCTCATGAAAACCGTATAGCCTTTCCGCTTCCTT +CCTTGCTTTAGCCGCTGCATCCAGCGTCATGAAGGTCCCTAAGTGTTTTGTCTTTTTATT +TATGGTTATGTTTGCCGTGTATCTATTTGTTTTTTTATTCCAATACACTCCCATAACTCC +TGTGTTTGATGACACTACTCCCTTGTTTCTTAGGTTGTCTTGCCTAGTTACTAGCCTGAG +ATTCTCAATTCTGTTATCGTCTCTTTCATGGTTTATGTGGTCTACATCCATTCCTTCTGG +TATGTTTCCGTAGTGTATTTTCCATACTATTCGATGGGCGTATTCAAATACACCTCCTGG +AAAACATATTGACCGATAACCTTTTTTATTAACAGTTCCGGCAAGTAGATTTCGTCTTCT +TCCGATTCTCCACTCTTTCCAGTACAGTCTCCCGCTAACGTATTTCAGTTCATCTTTCAT +AAGTATTTACTCTCAAAGGTTGTGCCGTCTGCGATACTAAAACCAACCTCTTCGCGGAAT +AAGGTCCAGCGGCAACCGTCCTCATCAAAGATGTAACCAGCTACGCCTCCAAGAGCGCGA +CCGCTTTCTACCTGGTAACGCTTTCCAACCTTGAATGATTTTTTCATTGGGTTGCGATGG +TCAAGTCCGGTGCACTTGAGCGTCTTTGTTTTCAACTCGGTGAACTTCGCGAAGAAGATT +TCATCAGATCCGTGAATATGTAATTCATCATGCTTTTCAAGTTTTAAATACTTCCCGCAT +TTTAACTTTACTTCACGAGTATCATCATAGCGCTCACGACCTTTGTACAGATTGTTTACT +TCGAATCCTGTGATTTTGTCTGCGGAAGTGCATTTAAGTTTGATTGATTTCATTGTGTTC +GCTCCTGATTGGTTATCTTGAATAAGGCCACTTTATCAAATGACCTTACGGCAATATTAA +CAAATCGTGCTATTTACCAGGGAATATAATCGTCAACGTCCTCATTAATATCATCACCGG +GTAACTCAAAGTTAGGATCGTATTCGCTTTCAGCATCCATATCCATATCACCAAGAGCCT +CGTCAAGTGTGATTTCTTTATATGCTACCTTGATGCACCATTCGGAACTAAGTCCGGCAT +CAAGCGCTGCAAAATAACGAGTCCAGAAATTATCTTGTTCCATTAATTAGCCCCACGAAT +TAATGTAAATCGAGTTAGCCTCAAGCGTTGCACGAACATCCGCATCTGTTGCATTTATCA +GTCGAGAGCCTGGCACGCTTCCGATAACACTATTTCCGTTACGCGTCTTAGTTACCGTCA +TTGAAATAAAGCCTGAAGACTTATCCATCTTGATAAATACACGGCCTTTTGCGTTCAGGT +GCTTGATGATATTCTCAACTTTAATGCTCATTTTTGATTCCTTTGTTTTGTTTGGTATGG +GAGTAATATACCTTACTCCCCGATGTGTGTCTTTAGCAATTTGTGCTATCAGCACTCAGA +AATTACTTTACACTCTTTGATCGTGCCGCCGAGAACTACCTTTTGCATCATTGCTTTTTG +GCGACTATCGTAAACGCGAACATTTTTTACGCTGTTAAACTTTCCTGTATAGAAAGTGTG +AACATAAATCATTTTTTACCGTCCCATGTTTGATATGCCGTAACCAGGTTAATGCTATGG +TCGAACTCGTCAACGCTAAGCGATCCGATTCTAACAAGCTCTTTGTTGTGCTTAATGTCA +ACCATCCGGCTATATGGATGACCTGGCGCGTATTTAAATAGACGCTTGCTGTCGGCAATG +TCTGCGTTAATTCCGTAGAATCGGCCTACTGCCGCCTTAACGCGCTCCATGATGTTTTTT +TCGTGGATTGCCGCCGCGTTATTTAGTGCCGCAACCGTACTTCCGTTAATCTTCGGTGAC +TTCGTTGTGATTTTGTAAGTGTGGTTCATTATTCCCCCTAACCAGTCAGGATAGCTTTCT +AGCTTCATCAATGATAACAGGTTCGAGACGCTCAAGTCGAACGCGGAACGTGTTCATAAA +TCCCTCGTTATTCTTCAATAACTCGAAGGCGTCCGTAGCTTCAATGGCGCTACTACCCAT +GTAAGCGATTACGCGCTTCTGTGTTTTTCGTGAGATCGCCACTACGCGGTAAATATTATC +ACTCATACAATGCCTCCTTAACACGATCCGCTACGAATGAGTTAACGGTGATTGAATAGT +CAGCCACGAAGCAAGGAGCAACACTGCCTGGCTCAGTGCGCATGAATGGTTTATTGAACT +GAGTGATTACCTCGCCAGTATCGTTATCAATTAAGCGAGACGCGCCTAAGCGGTCCACCA +CGCGCGTTACGCGGTCCACGCACTCCATTACATCACTTACGTCATAATAGGCGGTTAGAG +CGGCTATCATTGCCTTCTCTTGCTTGTTGTGAATCTTACGCGCAATGTTCTCTATCGCAA +CGTGCACTTTCTCGTCAGTCTGGATTACCGAGCTGGCTGAGAAGTCCAGATCTGTGAACT +GCTTAAACATAATACTTTCCTCGTTTACTGTTGATGTGATGAATCATACCCAGTAGACAT +GGATAAGTCGTTAGCAAAAAATGCTATTCCAATAATTGCTCATTATTCCATCAATACTGG +AATATCTGGAATAATCACGATCATGATTGATCTCTAATGATGAGATGTGATTGTTGCATG +GTGTGCAACTGTTGATGTGATTGTTGCTTAGAATGCAATGATTGTGAGAGGGGGGATCTA +GTGTTACCAGGTTCGCCTGGTAGTCATCTCCATTTTTAGCAAAAAGTGCTATCGATTACG +ATTACGCTTGATTGCGTGTTAATCATTGTATATGATTTGCCTAAATCGCAATCGTATACA +AAATTACGCCAAATTACGCCTTATAATATACATATAGATATATGTATATATATAATATAT +AAGTGTTTTTTTTATTTATATATATAGATACTATTATTTGTAATATGGTTGTATAGCGTG +TCTTTTATGTTAATCGTTGGATGCTCTGATTATGATGCTCATGTTTATATATACAGTAGT +TTTATCGGCGCATATTTATTTAGGGAAATCGATTAACACGATTAACACGATTAACCACAC +TTAAAATCGCCCCGCAGACCTTGACACATGCGGGTCGTCGTGTAACACTACGATTAGAGA +CACGGTGTTACATGTTAATCATGGTGTATATTGAAACTAAGGAGAAAGCTATGAGTTCTT +ACCAGTCAGACGCAGTACAGGCAGCAATCAAGGCAGCTTACGAGAAGGCCGGAGTAACGG +TTGAGCAGCGACCGGAGGCAAAAGTGACCGATGTTATCCGGGCCGCCTGCGATCAGCTTT +ATGGTGATGGCGAGAATACCGAGTTCACATTCGACGCGAATAAGATGGCTGAGGCCGCAG +CAAGAAAGTCGATGCCAGACGCTGACGAACATGATGTTGCCAAAGGCGCCGAGTCCTGGT +TGCTCGGGAAGACGGATGAGATTAACGAGAAGTTTAAATCCTCATTCATCACCCCGATCG +TTTCTCGACACTTCTCCAAGATCGGCAAGTCGGTCAAGGTGAGCGTGACCATGAACGATG +AGAAGTTGCGAGTCGTTACTATCTCAGTGAGTGACGAAGAAGTTCCGGTGAAGAAGCGCC +GCAGCCGGAAAAAAGTCAGCCTGGCTGATTGTCTGGATTCGTTTGTTCCTGATGTTGATG +ATCTTGAGAAAGGCGACGTTACTGTAAGCACCGTGCGCGACCTGGTTCGCCAGATGAAAG +CGCATATCGAAAAATGTGGACTGTAAGGAGAAGTAATTATGTTTAATATCAAACCATTAA +CAGAAGCAGAGAAACAGGCTCAGGCCAAGCAAACCGAAAACATCCAAGTGATCGCTGATG +CGCTGATTGGTAAGAGGTCAATCAAAATAAACCTCGACACTGTTGGTCAGTCATTTTTTA +CTAAAGGTTTGGATAAGTACGTTATAAATGTGAAGGCGAGAGACCTGGTGGCGAGAATTC +AAAAGCTAAACAATCAAAAGCTAAAGCTCATCAAGGTCGAAGGCAACATGTGCGAAATTG +AGAACCTCAGCGCACCAGACCCGAATAAGTGGGAAATCACCGATGTCGAGTTTATCGTAG +AATAGCACTTTTTGTTAAAACCGGATCGGGGTATCTTGCTATAGTTACCCCATCAAAACG +AGATACCAATCAGAGGAATCACCATGTCAATCGTCAAGAACCAGCAAGCCATCGATTCAA +CCAATAACAACCGCTTTGCTATTTTCATCACTCGCGACAACAAGCGCTTTGCAGTAAAGG +CCGTACCAGGTGGATACAAAACCTACATGGAAGATAACGGAAAGTGGGTGCGGTGCGACA +ACCTCGCAAACTTCTTGGTCTGGAACGCAGACCTGCAGGGATTCGATGACATCAGCACTT +TAATTGAGGAGTAATAATCATGCCACGTTACAGCAACCTAACTCAACTAACCCGCGTCAA +CGGGCACATGATCCCGGCAAAATCCACTCACTACGCAATGGGAGCAAAGCACGGATTGTA +TTTCAAATGGCGCGGTCAATGGAACTTCACGGTTATTCGTAATTTCTACATTAGAGTTAC +AGGTGATGACCCGCAATCGGTCGTAGAGAACTCAATCGGCGACAACAAGATCGAGGTGCT +GAAATGAACTTCAACATAATTGCTTTCTGGTCTGCCGTATGGTTCTTTTGCGTAGGTCAT +GTTGTGGTTGGAATCGTAATCATGTTGCTACTGTGTGCGGGAGCGTTCGAATGATGCGGA +TTCTGATTTGCATGATGGCGGCGGTCGCCATGGCTATCCTGGTAGTGTCCGGCTGCGGCG +AGGCCAGGGATAGCTGTCATGAAACCGGGAGCCAGGTTACTACTTTCGTGATGGTTGGCA +ACGTATTGCTACCAATAACATCAAATGAAATCACTTGCGAATAGCACTTTTTGTTAAAAC +TCAACTCCGGGGTTGCGATATAGTAACCCCATCGACAACGAACGAGGACGCAAACATGAA +AATTAAATTACTTAGCAATGGCGGTTACAAGGGATTCACCCGCGACCTGGAAGCTGACCC +TATCGTGGTTGACGCGGTTAAGTGCGACTCAAGTACTGGAGGCTACCGCGTTAAGGTTGA +TGACCTTGTAAAAGCTGGCGTGTACGATCTTGATTATGGCCTGTCGGTTAGCCCGGTATT +TGGCCCAGCTGACTTCAACGAGAAAGACGGAACGATGTTCTTTTTTGATTGGGAAGTGAA +GGCAAACATCAAGCCGCGCAAGGTTCGTCTTCTCAGCAATGGCGGCTACCCGATGCGACC +AGGTTATGAGAATCGCACGTTCCCGGTTATCGTTGACTTCATTGGGACAACTGACAACTT +GGTATACGTTAGCCATGAGCAACTTAAGGCAGTTGGATTCGTTGGCGGTATGAATAAAGA +AGCGCTTTGCTTCTTCCATCGATGTCCAGAGCCGATCGGTATTGAGTGCGAGTTAGTATA +CTAAGCACGAATTGTTAAAAGGGGATTTGGCCTGACTGGTATAATCCCCACATCAACCAC +TAATAGGAAAGCATCATGTTAAAATTAAAAGATATTCAGTTCCCTGTAGTATTTAACACT +ATTAGCTGCGGTAAAATAACCTGCCACAGCAAAGATCGCGCAACAGATTCATCATTCAAT +GAGTGCCACCCGTCTATTGTTGGTAATCTTATTGAGCTTCATAACAATCACAATCCTGAT +AACATCCCATCTCTTCCATATTATGTTGAGGGAGTCGGGCCTGGTTGGAAGGTTGGTCGC +TCCATCTTCCATGCAGCAAAGCCAGAAATCAAGCCAGCGCTACAATGCACTCAGATCGAG +AACATGCCATTGAGCGCGACACTAAAAGGTGTCCAACTTGATAGCGAATCCTGGATCGAG +ATTACCGCCACGCCTAAAACTATTGAGGTACATGATGATGTGGTGATTCTCCTGTTGCAT +TACGGCAGCTTTAAGCACAAGACGGTATCAGGTGAAATCAGCATTAAGCGCGGAACTCTT +GTCCGCTACGAGGTGAAATAATGACTGCATGGGTCTTGATTATCTTGATGAGCAAAGGTC +CGGATCACGTATACATGGAAAGTCAACAATCATGCAACAAGGCACGGGAAGTTATCGCAG +AGAACAAGCCGTTCGGATATGAAGTAAAAACTATGTGCGTTAAACGATAGCACGAATTGC +TAAACCTTCCGCAAGGCCATTTGATATAGTGGCCTTATTGAAGCACGACAACCAACTGGA +GGTAAAATTTATGAAATTCGAATGTATCAGCGATAACACCAAAAAATTTACTGTTGGCAA +AATTTACGATGTTCCGACTGAGCACGCAGAGCAAACCGTAGCTCTGACCGACGACACGGG +CCGCAACCGAATTGCAACCGTAACTCACAACGGTGAAGGTCTTCGCTGGAATAGCGGCGG +CACTAAGTTCGCAACGTTCGGCAAGAAGCGCAAGCGCACCTTCCGCGTCAACGGCAATGT +TGCAGCTAACAAGATCCATAACGTCAAGCCGTCGGAAGTTGACCGCAAGCCAGCGCTGAA +GTTTAAAGAGAAGGTGGATTTATTCAATCTTGCCGCCTCGCTTGTTCTCCTGGTCGCTGC +TATTTCGCTGCTTTCCATCATGTAATGCTAATGGGGAATCGACTCTGAACGGTTCCCCTT +TCTTTTGGAGAAAACACTATGCCAGACTTTTCTAACTGGAATAACGAGCCGCCATCATTT +CAGGAGTTGCTATTCTGCCTCCTGGTCCTGACATTATCTCTTAAGGGTGTTTTATGGCTA +CTATCATGACAGTAGAAGATGCAGCACGCGATGCAGTGGAAGGAATGCGCCCAAATACCT +CCAGAATAGCACACTACTACAAATCTGAGGTGTCGGCAGTGCAATTGGTCCACGAAATTT +TAAGGCTCCCACAAGTCGATTCAGCGCGCGTTGTGACGTGCTTAAAAAATTATTTTTGCA +TCACTATTAAAACGAATAGCACGAATTGCTAAAACCTATCAAGGGGAATACGCTATGATT +CCCCTACACCAACAAACGAGGAAGCGATCATGAAACACTTAATCTGCATTGAAGCGCCTA +ACGATCAATACACCCTGCATGGACTTGGTGTGTTCAAAGGTCACTACATTACCGCAGGAA +CTTACGATGCTCGTCGCGGCGATGGCGACCTAATGATTACGTCAAAAGAAGTAAATCCGT +ACATCATGCAGAATCTTGGCAATAACGAATATATGGCCTATGGCTGCAACGCGGTGTACA +AGCACGTTAAGATCCGCAAGCGTGTTGTGCGTGCATTCAAGAAGATTGCAATTAAATACT +GGAAAATGAGCAAGAAAGATGCCGGACGTTGGGCGCGCAACGTTGCAGATTCATACTTCT +ATCGTAACGGCGAATCCTGCTACTTCCTGATCGATGAACTTATGGAAAACTACGGTGGCG +ACTTCAGCCAGGGTAGCTTTGATGACTGGGCCAACTATGAGATCAGTTGCTGGTAATAGC +ACGAATTGCTAAAACTTGCTCAAGGGCATTTGTTAGAATGCCCTTCGTTGAGTTAAGCAA +CCAATCAGAGGAATAAATCATGGATAAAATCACAATTTGGGGCCAGACAATCAACCTGTT +TCTCGGCACGCGCCGAGTGGCAATCTTTGACTTTGACGGGACACTTAGCGATGGATCTGG +TCGACTTCACCTGCTGCCAACAAAGGATTTGCACTTGACTGAAAGCTGGTCTGAGTTTAA +CCGAGCGGCAATATTTGATAACCCAATCCAGAGCACGATCGATGTGATGAACTCTATGTT +TGCCGCTGGGTATCATGTGATCATTTTAACCGGGCGAAGTGATGAGGTGCGTTACGCATC +TGAGTTATGGCTTAAGCATCACGGCGCTCGATATGATTACTTAGTCATGCGACCGCATAC +CGACAACCGCAAAGACACGGTAATGAAAGAAGAGGCAGTGCGCGCTATCGGCATTGATAA +CATTCTTGCGGCTTGGGATGACTCAGTGAATATAATAAAAAAATTCAGAGATCTAGGGAT +AACCACATATCAGGTTTGTGAATATGCCTGTGATAGTCGAGAGGATTTAAATAGTCATGG +TGTCGATTGATAACAAATCAATGGTAAGAGAGTTATTTACTTATTCTGACGGCGTTCTGT +ATTGGAAGGCCAAATCATCTAAATACAGTAGAGCTAAAATAGGAGGCGCGGCAGGAAGCA +AGGATAAAGACGGATACATAATAATCAGAGTAAGAAACGAAACTAGAGGCGCTCACAGGC +TTGTATGGATATACCATAATGGCAAGATACCTGATGGAATGGAGGTAGACCATATGGATG +GAGACATAACAAACAATAGAATAGAAAACCTAAGATTGGTAACGAGAACCATAAATAACA +GGAATCAAAAAAAGAGATCTGATAACACAACCGGAGTATCCGGTGTAACTTTCATGAAAG +ATAGAGGAAAGTATAGGGCGCAAGTTAGAAACAAGAGACTCGGGCAGTTCGACACAATAG +AAGAGGCCGCCAAAGCAGTAAAGGATGAGCGGGATAGATTAGGTTTATTCACAAAAAGAC +ACGGGGTGTAAACATGAAAACAGCTATCATTTTAAACGGCGCACCTGGTGCGGGAAAGGA +CACTATCGGATGCATCCTGGCTGACACTTACGATCATGTAGCGCTACGCAGCTTCAAAGC +GCCAATGTTTGAGATTGCCCGAGCAATCCTGGGTGAGACTAATTTCGAGTATTTCATGTT +CTTGTATGAGGACCGTCGCTATAAAGAAGAGCCAGCGTCAATCCTGAACGGTAAAAGCCC +GCGCCAGTTTATGATCTGGATTAGCGAGGAGGTCATCAAGCCGCAGTTCGGAAATCGCTT +CTTCGGTATGCGAGCGGAAAGTAAGGTGAAAGAGTCGCATTCACTTTCGGTATTTACTGA +CGGTGGATTCAAAGACGAGATCTTGCAGATGATTGAAGGTGACATCCAGGTCAAGCTGTG +TCGAATCCATCGCAACGGTTGCAACTTTGACAACGACAGTCGCGACTATATCTATCTTGA +CGATATGATCGGGGTCAACGGTTATCAGGAGTGTGACTTCTTTTCTGTCGAAGGCCATCC +AGAAATTACCGCTCAGCACATAGCCGCCACGTTCATCAATAAATAGCACGAATTGCTAAA +ACGTCGGTGTGGTGATTTGATATAGTTACCTCATCGACAACGAAGAGAGAAAATCGAAAT +GATGGTATCAACTGATAAGTTTTTCACTTGCACCAAAACTTCTGAGGTATTCGAGCTGGT +TCATACTGACAACGGTGATTTCATGCATGACGGTTGCGACGCTTTCATTGAAGTGAAAGA +AAGCGACTATGACGACGGAGTTTATTACAACCCTGCGGTTAACACGCAGTTTTTTACCCC +GATCGAAGAGGAAGGAGAAGAGGCATGATCACGATTAACCTGTCAGATAAACAAGCGCGT +GAAATACTAGACACTATCGGAGAACAGCTTCACGTAAAAGGCGATACCGCTGAGATTCTT +AACCAGATCGAAAGACAGCTAACCCCTGTGTCGACGAATCAAGCTGAGTTCGCAGCATGG +AAAAGCGAACGCATCCTGCCAAATATCATCAAGGCATGGAAGCGCAAGCATAAAAAAGAA +ATCAACGTTGAGGATTTATTTACCGATGAATTAAGTCCTTCAAATGTTGCTCAATACCAG +TTGCGATACATGGAGTCGGTTTGCAATCAGGTTTTAGGTGTAAGTTTTTCATTCAAAGGT +GATAAATAATGTTCGGTTTAAGCGAAGCGGAGTGGAATGTTGTAAAGCGTGCCGCGAAAG +AATTAAACAAATTCGTCAGCGGAATGAAGAAAGAAGATCGGAAAAACGACAAGATTATGA +TTGACGTAATTTCGACTCACCATAAAAAGGTCGAACTACTCATTGACCGCTACAAATTTG +TCTGGACTGCCGGGTATATTGCAGGGCGCGTAGGTAACAAAGAGGGGGATTATGAATAAT +GGCCAATTTACCAAAGAAAGGCGATCAGGTTCGATGTGTCACTTCACGCAATGGTAATGC +TTTATCGGCGGGGTGCTTGTACGACGTAGAAAAAGTCAGTAAGTCAAAGAGGCTTGTATT +CGTGTACGGCGACGATGGAAATCTGCATGAGATTGATTACCCGCAGGATGTAACTAATGG +TCAATTCGAAATTAATGATTGACCTAAATCCCTGAGCGGTGATAGTATTAATCCCGTAGA +CAGACGAGGCGCAACTAAGCGCAACGCGTGAGACGATTCTCACACTTCCAGCTAACAAGC +TCGGTTGCATAGTGGTTAAGCAACGCCGCAGACCCGTAAGCGGCAACAATTCAAGAGGAT +TGCATAATGCAAAAAACTAAAGACGAATCAGTCAAAATTGAAATTAAAGTAACTCGCAAC +GGTGAAACCACTCGTTATAAAAAACGATTAAATCCTGGCGAGGCTGTTATTGGTCGCATT +GCTGGCGTTATGATTAAGGCGCAGGAAGATGAAGCGATTCAAAGTTAAATTAATTATTCG +AAAGATGGGAATGTTTTGCCAGTCGTGCAAGCAATCTTTCGAAGCTGAATTATCAGCAAC +CAGTCAGGATGAAGCCATCACGAAAGCAAAAAAACTTTCCGGCGCTAACCTTGACACTCA +CAAAATAAATATTGAATTAATCAAGGAGATTTAACATGACAATTTTTTTATTAATTATCG +CTGGTGTCATTATTTTTGGTGCTGGTTTGTTTGCTGGCTTCGCACTTGTGGCGGCAGCAA +TTGCGATGGACGCGAAGGATAAAACTGGTGTATGGCTGACCTACTCACCTAAGAAGGACC +AATGGGAAATGACTGGCGACCTTGCTCACTGCTATTCTAAAGCTAAGACCCACCCTAAAG +GCATTAAACGACGATTGTCGTGATGAACACTAACCCGCTCCGGCGGGTTTTTTTAT
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cpt_phageqc_annotation/test-data/AY216660.gff3 Fri Jun 17 13:00:50 2022 +0000 @@ -0,0 +1,315 @@ +##gff-version 3 +##sequence-region AY216660.2 1 48836 +AY216660.2 GbkToGff gene 40 576 . + . locus_tag=CPT-T1_001;ID=CPT-T1_001.gene; +AY216660.2 GbkToGff mRNA 40 576 . + . locus_tag=CPT-T1_001;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_001.mRNA;Parent=CPT-T1_001.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 40 43 . + . locus_tag=CPT-T1_001;regulatory_class=ribosome_binding_site;ID=CPT-T1_001.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_001.mRNA; +AY216660.2 GbkToGff CDS 52 576 . + 0 locus_tag=CPT-T1_001;codon_start=1;transl_table=11;product=terminase small subunit;translation=MSEPKNAPVVQGGNFKELYKKKFGTVLAKNRAMTPEQLFDLSVKYFEWAEDNAIKASESASFQGGVYESLVHKPRVFTWTGYRLFIGASEAAIIKWKREEEYSEVMEFVESVINEQKFQLAANGVINASFIGKDLGIDKPASINIENSSASASTVVATTEDAMKEAVNSILDML;note=Orf no. 54 see PMID: 14972552;ID=CPT-T1_001.CDS.1;Parent=CPT-T1_001.mRNA; +### +AY216660.2 GbkToGff gene 589 2184 . + . locus_tag=CPT-T1_002;ID=CPT-T1_002.gene; +AY216660.2 GbkToGff mRNA 589 2184 . + . locus_tag=CPT-T1_002;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_002.mRNA;Parent=CPT-T1_002.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 589 592 . + . locus_tag=CPT-T1_002;regulatory_class=ribosome_binding_site;ID=CPT-T1_002.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_002.mRNA; +AY216660.2 GbkToGff CDS 601 2184 . + 0 locus_tag=CPT-T1_002;codon_start=1;transl_table=11;product=terminase large subunit;translation=MGDLIMIQWEDLNATQKLAIKKMSEANFEKMIRIWFQLMQAQQFQPNWHHLYLCHEVEEIIAGRRGNTIFNVTPGSGKTEVFSIHLPVYAMLKCKKVRNLNVSFADSLVKRNSKRVREIISSNEFQELWPCKFGTSKDEEMQVLNEDGKVWFELISAAAGGRITGSRGGYMTPGFSGMVMLDDIDKPDDMFSKVKRERTHMLLKNTIRSRRMHNETPIIAIQQRLHAQDSTWFMMNGGMGIEFDQISIPALVTEEYGKTLPDWLQPYFERDVLSSEYVELDGVKHYSFWPSKESVHDLLALREADQYTFDSQYQQKPIALGGSVFNSEWWTYYGSSLDADEPDPGKYDYRFITADTAQKTGELNDYTVFCLWGKKNDKVYFIDGIRGKWEAPDMERQFTAFVNQAWRHNKSMGVLRKIYVEDKASGTGLIQNLRKKTPISITPLQRNKDKVTRAMDAQPVIKAGRVVLPEEHPMLAEIIAEHSAFTYDDTHPHDDIVDNFMDAANIELLTIDDPIERMKRLAGMVKR;note=Orf no. 53 see PMID: 14972552;ID=CPT-T1_002.CDS.1;Parent=CPT-T1_002.mRNA; +### +AY216660.2 GbkToGff gene 2230 3522 . + . locus_tag=CPT-T1_003;ID=CPT-T1_003.gene; +AY216660.2 GbkToGff mRNA 2230 23794 . + . locus_tag=CPT-T1_003;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_003.mRNA;Parent=CPT-T1_003.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 2230 2233 . + . locus_tag=CPT-T1_003;regulatory_class=ribosome_binding_site;ID=CPT-T1_003.Shine_Dalgarno_seqeunce.2;Parent=CPT-T1_003.mRNA; +AY216660.2 GbkToGff CDS 2239 3522 . + 0 locus_tag=CPT-T1_003;note=HHPred predicted structural similarity at 99%25 probability to phage T4 portal protein gp20 Protein Data Bank entry 3JA7 over most of protein%3B Orf no. 52 see PMID: 14972552;codon_start=1;transl_table=11;product=portal protein;translation=MKIVKHDGYNDIFNGGADGSPKPFFMSDASYHVGSFYNDNATAKRIVDVIPEEMVTAGFKMSGVKDEKEFKSLWDSYKLDSSLVDLLCWARLYGGAAMVAIIKDNRMLTSQAKPGAKLEGVRVYDRFAITVEKRVTNARSPRYGEPEIYKVSPGDNMQPYLIHHSRVFIADGERVAQQARKQNQGWGASVLNKSLIDAICDYDYCESLATQILRRKQQAVWKVKGLAEMCDDDDAQYAARLRLAQVDDNSGVGRAIGIDAETEEYDVLNSDISGVPEFLSSKMDRIVSLSGIHEIIIKNKNVGGVSASQNTALETFYKLVDRKREEDYRPLLEFLLPFIVDEEEWSIEFEPLSVPSKKEESEITKNNVESVTKAITEQIIDLEEARDTLRSIAPEFKLKDGNNINIREPEETTEPEPGLGEKLEDEN;ID=CPT-T1_003.CDS.1;Parent=CPT-T1_003.mRNA; +AY216660.2 GbkToGff gene 3496 4273 . + . locus_tag=CPT-T1_004;ID=CPT-T1_004.gene; +AY216660.2 GbkToGff mRNA 3496 4273 . + . locus_tag=CPT-T1_004;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_004.mRNA;Parent=CPT-T1_004.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 3496 3499 . + . locus_tag=CPT-T1_004;regulatory_class=ribosome_binding_site;ID=CPT-T1_004.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_004.mRNA; +AY216660.2 GbkToGff CDS 3512 4273 . + 0 locus_tag=CPT-T1_004;note=InterPro domain IPR006528,Orf no. 51 see PMID: 14972552;codon_start=1;transl_table=11;product=capsid morphogenesis protein;translation=MKINGVATQWRYPEMSERAMSRSLQDVAAKLTEKMRDELKPMKFDATDEEIDQTERSLLDYVESLIAPIIGSLSSVALTIYKFNSKQWLRIARNAGGKKNQAVMLLALIGPTAAESWYSGQYNLWRSQVATSIRKFAANMVTDFTDKLRAASGQGKSKDFVVELAKERFGIYRNWAKNRASGIVGTWNSRLMRQRIKDAGVSYYFWRGVMDLREREKHVRWEGKRIAVDSDHVFPGEEYNCRCWAVPDFSTGD;ID=CPT-T1_004.CDS.1;Parent=CPT-T1_004.mRNA; +AY216660.2 GbkToGff gene 4264 5388 . + . locus_tag=CPT-T1_005;ID=CPT-T1_005.gene; +AY216660.2 GbkToGff mRNA 4264 40736 . + . locus_tag=CPT-T1_005;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_005.mRNA;Parent=CPT-T1_005.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 4264 4268 . + . locus_tag=CPT-T1_005;regulatory_class=ribosome_binding_site;ID=CPT-T1_005.Shine_Dalgarno_seqeunce.2;Parent=CPT-T1_005.mRNA; +AY216660.2 GbkToGff CDS 4276 5388 . + 0 locus_tag=CPT-T1_005;note=HHPred predicted structural similarity at 72%25 probability to phage T4 prohead core protein protease gp21 Protein Data Bank entry 5JBL over predicted catalytic third of protein%3B Orf no. 50 see PMID: 14972552;codon_start=1;transl_table=11;product=capsid maturation protease;translation=MKAKQRFDSVKIKAHFDDNGFLVDRPIVARIGAQVYKTPHGDRVEFRPASEVFKQDSLQSFAGKPITVGHVTVTPQNAKDVVVGSCAGAGIASGVGVEVPLSIYSDYAISKAKAKEAGELSVGYTSVDIDKPGWGSNETGEYIFEEDMKQDEAPPEGWVRFDAVQTNIKVNHIALVFKGRAGIAKLNLDAEQEFPYDNNVQLTNEDKQMKKIKIDSVDVEVTEDVANHIEKLTAQIATIQGKADGFEAERDALKVKVDSLPELVKAEVEKQKADAAARAEVTAVAETAGVKHDGLDIKDVKIAVVKAMLDKDVSEKSDAYIDAMFDVAKDSDIMAIQRKAVKGDSIEGGKPEEKNDAAPVTPNSRLSKVM;ID=CPT-T1_005.CDS.1;Parent=CPT-T1_005.mRNA; +AY216660.2 GbkToGff gene 5389 5876 . + . locus_tag=CPT-T1_006;ID=CPT-T1_006.gene; +AY216660.2 GbkToGff mRNA 5389 5876 . + . locus_tag=CPT-T1_006;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_006.mRNA;Parent=CPT-T1_006.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 5389 5392 . + . locus_tag=CPT-T1_006;regulatory_class=ribosome_binding_site;ID=CPT-T1_006.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_006.mRNA; +AY216660.2 GbkToGff CDS 5400 5876 . + 0 locus_tag=CPT-T1_006;note=HHPred predicted structural similarity at 92%25 probability to phage TW1 Protein Data Bank Entry 5WK1 capsid stabilizing protein%2C equivalent to phage lambda gpD dec protein%2C over most of protein%3B Orf no. 49 see PMID: 14972552;codon_start=1;transl_table=11;product=capsid decoration protein;translation=MAQINASYQRDMAIALPGMVADTSKYNIDGACVVNEGDVLVGAAVQVVQAQAVDGHKLVKALTTGTTPYGVAIRSHWQTVNAQNQMIYEDGGAINVMTSGRVWMLSKSTEAPTFGSAVKLDVDGQEKSDGTIETTWTYAGGWTKYKDIQLVEVQLHQL;ID=CPT-T1_006.CDS.1;Parent=CPT-T1_006.mRNA; +AY216660.2 GbkToGff gene 5926 6705 . + . locus_tag=CPT-T1_007;ID=CPT-T1_007.gene; +AY216660.2 GbkToGff mRNA 5926 6705 . + . locus_tag=CPT-T1_007;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_007.mRNA;Parent=CPT-T1_007.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 5926 5929 . + . locus_tag=CPT-T1_007;regulatory_class=ribosome_binding_site;ID=CPT-T1_007.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_007.mRNA; +AY216660.2 GbkToGff CDS 5938 6705 . + 0 locus_tag=CPT-T1_007;note=InterPro domains IPR008964 and IPR003343%2C invasin/intimin cell-adhesion fragments superfamily%3B bacterial Ig-like domain-containing protein%3B Orf no. 48 see PMID: 14972552;codon_start=1;transl_table=11;product=hypothetical protein;translation=MAYENLMLRPACPGNLSDTSTYNIDGACVAQGDIEFGSAVQVVGIVDGVKVVTALSDGGTPYGIAFRSQYEHLSGKILDGEVCNVVSHGRVWALTSLDEAPSLFSKLQFGSGGVVTGGSGYAGWTFAGGFVKHEDGYIIEVRVKQNAFIVPPPPPPVVLVESATITTDKESPQPNNVTIQCVANALPANATDKTGKWSIDATNIATVNPDSGLVTPVGGEVVGDFNITWTANDASKTTATIAYRVEAVPTPEVDV;ID=CPT-T1_007.CDS.1;Parent=CPT-T1_007.mRNA; +AY216660.2 GbkToGff gene 6784 7755 . + . locus_tag=CPT-T1_008;ID=CPT-T1_008.gene; +AY216660.2 GbkToGff mRNA 6784 7755 . + . locus_tag=CPT-T1_008;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_008.mRNA;Parent=CPT-T1_008.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 6784 6787 . + . locus_tag=CPT-T1_008;regulatory_class=ribosome_binding_site;ID=CPT-T1_008.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_008.mRNA; +AY216660.2 GbkToGff CDS 6796 7755 . + 0 locus_tag=CPT-T1_008;codon_start=1;transl_table=11;product=major capsid protein;translation=MTTKKFDEADKSNVEMYLIQAGVKQDAAATMGIWTAQELHRIKSQSYEEDYPVGSALRVFPVTTELSPTDKTFEYMTFDKVGTAQIIADYTDDLPLVDALGTSEFGKVFRLGNAYLISIDEIKAGQATGRPLSTRKASACQLAHDQLVNRLVFKGSAPHKIVSVFNHPNITKITSGKWIDVSTMKPETAEAELTQAIETIETITRGQHRATNILIPPSMRKVLAIRMPETTMSYLDYFKSQNSGIEIDSIAELEDIDGAGTKGVLVYEKNPMNMSIEIPEAFNMLPAQPKDLHFKVPCTSKCTGLTIYRPMTIVLITGV;note=Orf no. 47 see PMID: 14972552;ID=CPT-T1_008.CDS.1;Parent=CPT-T1_008.mRNA; +AY216660.2 GbkToGff gene 7794 8093 . + . locus_tag=CPT-T1_009;ID=CPT-T1_009.gene; +AY216660.2 GbkToGff mRNA 7794 8093 . + . locus_tag=CPT-T1_009;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_009.mRNA;Parent=CPT-T1_009.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 7794 7797 . + . locus_tag=CPT-T1_009;regulatory_class=ribosome_binding_site;ID=CPT-T1_009.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_009.mRNA; +AY216660.2 GbkToGff CDS 7806 8093 . + 0 locus_tag=CPT-T1_009;codon_start=1;transl_table=11;product=hypothetical protein;translation=MAKEKTVVIVNVGVALQMFRLEDGSFAKVLPDEEVTLPASVLDLPGLRCLIAREEIEVKDDSATNRKIRAEMAKITKPDPWDKMSVKELEDGGEY;note=Orf no. 46 see PMID: 14972552;ID=CPT-T1_009.CDS.1;Parent=CPT-T1_009.mRNA; +AY216660.2 GbkToGff gene 8127 8548 . + . locus_tag=CPT-T1_010;ID=CPT-T1_010.gene; +AY216660.2 GbkToGff mRNA 8127 8548 . + . locus_tag=CPT-T1_010;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_010.mRNA;Parent=CPT-T1_010.gene; +AY216660.2 GbkToGff CDS 8138 8548 . + 0 locus_tag=CPT-T1_010;note=HHPred predicted structural similarity at 96%25 probability to Bsubtilis yqbG (myophage protein%2C see PMID 29279385) Protein Data Bank entry 1ZTS over most of protein%3B Orf no. 45 see PMID: 14972552;codon_start=1;transl_table=11;product=head-to-tail connector complex protein;translation=MNQETLIAVVEQMRKLVPALRKVPDETLYAWVEMAELFVCQKTFKDAYVKALALYALHLAFLDGALKGEDEDLESYSRRVTSFSLSGEFSQTFGEVTKNQSGDMMLSTPWGKMFEQLKARRRGRFALMTGLRGGCH;ID=CPT-T1_010.CDS.1;Parent=CPT-T1_010.mRNA; +AY216660.2 GbkToGff gene 8534 8919 . + . locus_tag=CPT-T1_011;ID=CPT-T1_011.gene; +AY216660.2 GbkToGff mRNA 8534 8919 . + . locus_tag=CPT-T1_011;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_011.mRNA;Parent=CPT-T1_011.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 8534 8538 . + . locus_tag=CPT-T1_011;regulatory_class=ribosome_binding_site;ID=CPT-T1_011.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_011.mRNA; +AY216660.2 GbkToGff CDS 8548 8919 . + 0 locus_tag=CPT-T1_011;note=HHPred predicted structural similarity at 96%25 probability to phage SPP1 gp15 Protein Data Bank entry 5A21 over most of protein%3B Orf no. 44 see PMID: 14972552;codon_start=1;transl_table=11;product=head-to-tail connector complex protein;translation=MNYSQIERMARKGVAFFTDPSRPMNLIKQGEYGYDENGFEIPPMEQVIPISGATRRPNAREIDGETIRASDILGIFNNDHEINEGDYIEIDGIRHVVVDARPVQASLEPVAYRPVLRRVSVGG;ID=CPT-T1_011.CDS.1;Parent=CPT-T1_011.mRNA; +AY216660.2 GbkToGff gene 8897 9355 . + . locus_tag=CPT-T1_012;ID=CPT-T1_012.gene; +AY216660.2 GbkToGff mRNA 8897 9355 . + . locus_tag=CPT-T1_012;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_012.mRNA;Parent=CPT-T1_012.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 8897 8901 . + . locus_tag=CPT-T1_012;regulatory_class=ribosome_binding_site;ID=CPT-T1_012.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_012.mRNA; +AY216660.2 GbkToGff CDS 8912 9355 . + 0 locus_tag=CPT-T1_012;codon_start=1;transl_table=11;product=hypothetical protein;translation=MANYQIRRFQGEIDAWINAAESTLEHAIEIFVRDVHDALVSRSPVDTGRFKGNWQITFNEIPNHALNRYDKTGGVVRGEEQAKTYGMFSRGGAITSVHFSNMLIYANALEYGHSQQAPSGVVGLVALRLRSYMADAIKQARRQQNAL;note=Orf no. 43 see PMID: 14972552;ID=CPT-T1_012.CDS.1;Parent=CPT-T1_012.mRNA; +AY216660.2 GbkToGff gene 9332 9743 . + . locus_tag=CPT-T1_013;ID=CPT-T1_013.gene; +AY216660.2 GbkToGff mRNA 9332 9743 . + . locus_tag=CPT-T1_013;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_013.mRNA;Parent=CPT-T1_013.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 9332 9336 . + . locus_tag=CPT-T1_013;regulatory_class=ribosome_binding_site;ID=CPT-T1_013.Shine_Dalgarno_seqeunce.2;Parent=CPT-T1_013.mRNA; +AY216660.2 GbkToGff CDS 9345 9743 . + 0 locus_tag=CPT-T1_013;note=HHPred predicted structural similarity at 96%25 probability to phage lambda minor tail protein U Protein Data Bank entry 3FZ2 over most of protein%3B Orf no. 42 see PMID: 14972552;codon_start=1;transl_table=11;product=minor tail protein;translation=MHYELSAAARAAFLSKYRDFPHYMENRNFTPPKDGGMWLRFNYIEGDTLYLSIDRKCKSYIAIVQIGVVFPPGSGVDEARLKAKEIADFFKDGKMLNVGYIFEGAIVHQIVKHESGWMIPVRFTVRVDTKET;ID=CPT-T1_013.CDS.1;Parent=CPT-T1_013.mRNA; +AY216660.2 GbkToGff gene 9733 10414 . + . locus_tag=CPT-T1_014;ID=CPT-T1_014.gene; +AY216660.2 GbkToGff mRNA 9733 10414 . + . locus_tag=CPT-T1_014;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_014.mRNA;Parent=CPT-T1_014.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 9733 9737 . + . locus_tag=CPT-T1_014;regulatory_class=ribosome_binding_site;ID=CPT-T1_014.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_014.mRNA; +AY216660.2 GbkToGff CDS 9746 10414 . + 0 locus_tag=CPT-T1_014;note=HHPred predicted structural similarity at 99%25 probability to phage lambda major tail protein V Protein Data Bank entry 2K4 over half of protein%3B Orf no. 41 see PMID: 14972552;codon_start=1;transl_table=11;product=major tail protein;translation=MHLPNGAQIFVETSRGVEVEATAITNAENPVATVASKGDLAKGDYVIVTQSTWAKMVSRVLIVTDAQETSITLAGIDTSDTLVFPAGGTMSFAKITGWTEIPCVQEIGQDGGEQQYYTYQCLSDDKEQQIPTFKSAVSLTYTFAHEFDNPIYPILRKLDSSGQVTAVRMYVPKASEMRMWAGILSFNDIPSTQVNEMETVELAVSLKGDFTFISSTLASPGA;ID=CPT-T1_014.CDS.1;Parent=CPT-T1_014.mRNA; +AY216660.2 GbkToGff gene 10516 10845 . + . locus_tag=CPT-T1_015;ID=CPT-T1_015.gene; +AY216660.2 GbkToGff mRNA 10516 10845 . + . locus_tag=CPT-T1_015;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_015.mRNA;Parent=CPT-T1_015.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 10516 10520 . + . locus_tag=CPT-T1_015;regulatory_class=ribosome_binding_site;ID=CPT-T1_015.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_015.mRNA; +AY216660.2 GbkToGff CDS 10528 10845 . + 0 locus_tag=CPT-T1_015;codon_start=1;transl_table=11;product=tape measure chaperone frameshift product;translation=MAKFNFVLGQLPDFKLPVTFTMPNGEDATIIFTVRHLSSKEVQDMYAKQGEMNDSDFITKIASGWNLEEEFNEENTRKLVQYYPSAAYNLTATYIKALAGHRAKN;ID=CPT-T1_015.CDS.1;Parent=CPT-T1_015.mRNA; +AY216660.2 GbkToGff gene 10516 11162 . + . locus_tag=CPT-T1_016;ID=CPT-T1_016.gene; +AY216660.2 GbkToGff mRNA 10516 11162 . + . locus_tag=CPT-T1_016;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_016.mRNA;Parent=CPT-T1_016.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 10516 10520 . + . locus_tag=CPT-T1_016;regulatory_class=ribosome_binding_site;ID=CPT-T1_016.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_016.mRNA; +AY216660.2 GbkToGff CDS 10528 10839 . + 0 locus_tag=CPT-T1_016;codon_start=1;transl_table=11;product=tape measure chaperone frameshift product;translation=MAKFNFVLGQLPDFKLPVTFTMPNGEDATIIFTVRHLSSKEVQDMYAKQGEMNDSDFITKIASGWNLEEEFNEENTRKLVQYYPSAAYNLTATYIKALAGHRAKKLKRAVYLLYQKPPTEEQLRSVGLSLSDYEDEEPETIIGDAEMVKAWNVFTSMLTQWRSSGAGAYGLDYNVLPMLFKIYKIEDEELALQDVRIMEAKALEMIAKQNN;note=Orf no. 40 see PMID: 14972552;ID=CPT-T1_016.CDS.1;Parent=CPT-T1_016.mRNA; +AY216660.2 GbkToGff CDS 10839 11162 . + 0 locus_tag=CPT-T1_016;codon_start=1;transl_table=11;product=tape measure chaperone frameshift product;translation=MAKFNFVLGQLPDFKLPVTFTMPNGEDATIIFTVRHLSSKEVQDMYAKQGEMNDSDFITKIASGWNLEEEFNEENTRKLVQYYPSAAYNLTATYIKALAGHRAKKLKRAVYLLYQKPPTEEQLRSVGLSLSDYEDEEPETIIGDAEMVKAWNVFTSMLTQWRSSGAGAYGLDYNVLPMLFKIYKIEDEELALQDVRIMEAKALEMIAKQNN;note=Orf no. 40 see PMID: 14972552;ID=CPT-T1_016.CDS.1;Parent=CPT-T1_016.mRNA; +AY216660.2 GbkToGff gene 11192 14076 . + . locus_tag=CPT-T1_017;ID=CPT-T1_017.gene; +AY216660.2 GbkToGff mRNA 11192 14076 . + . locus_tag=CPT-T1_017;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_017.mRNA;Parent=CPT-T1_017.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 11192 11197 . + . locus_tag=CPT-T1_017;regulatory_class=ribosome_binding_site;ID=CPT-T1_017.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_017.mRNA; +AY216660.2 GbkToGff CDS 11203 14076 . + 0 locus_tag=CPT-T1_017;codon_start=1;transl_table=11;product=tape measure protein;translation=MVDKVAGLSLDVDVSTVQRAVKSLKEFSKANDQAADSMGSLINESEVAKQKAKEHAEQLRRQRKEYEAVEKAIDPTVSKMERLKIASQQLDKLWQQGVVPDETFFRLGEMLDLQNAKLARSRAMLTEEGQAALQEAKAKEQAAVRSKAFMDALNGQVNAIGKTHAELMELKAAELGLSKEAAPLIAKLKDQGRAMNAAGISAGEYRQAMRMLPAQITDVVTSLASGMPVWMVAIQQGGQIKDSFGGIGNTFKVLLSYINPVTAGVGVLVGSLGILAKAGYDSYKSITDIQNALIETGGYAGVTAEELDSVSKKIAQTSNSTIGSIREIVTELASSGKYTREQIQNITKATAEWSASTGKSASQIISEFEKIASDPVKGLKKLNEQYNFLEKGQLTYIDTLSRTKGETEAVSEATKLFADVMEKRMKSIADNATPLEKMWSDIKQWASDAWGWVGDHTLGALNLIIDVVQGTVIQVKMILAKGDEYISNFIASAIKATQSLPGMSDFGADVLKEQENIVKSSRDNYDQLASDLDAINARVEKGEMGYIEAMRQRRTLEKQYSEETKEAIRKEAEEIEKRNRERNKQSKIVRSPTEQFDKELISLRAQLKVLQEHKEIGQKLSAQRKALFTTEATIAVLREASSKRQLSAEEKALLASQERVIELAKQKAEIGDQIVKQQQLNDLTDKSLKFVNEMTAATEQLNASRGLSTRDMERQAELAKITTDYINSGGSEGDEKLQNMIKAQNDYYAAEDAKRADWLAGAESAFADYGDAAMDMYGNVNEIASSALNGMSDMMVQFLTTGKANFEDFAKNIIGMIIKMIAQMVIFNTISGMMGGKTWSFAGGASSGASAASQATPTPAASVFRSVSSGGAAVSLAAAAGSVATSGFNASNSAPKVVNHSGGGTVVDVSGMEVKVDNGSDPRGISQGVEMMFKKMIRESCSQGGEVYNYIQEKTGG;note=Orf no. 38 see PMID: 14972552;ID=CPT-T1_017.CDS.1;Parent=CPT-T1_017.mRNA; +AY216660.2 GbkToGff gene 14067 14432 . + . locus_tag=CPT-T1_018;ID=CPT-T1_018.gene; +AY216660.2 GbkToGff mRNA 14067 14432 . + . locus_tag=CPT-T1_018;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_018.mRNA;Parent=CPT-T1_018.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 14067 14072 . + . locus_tag=CPT-T1_018;regulatory_class=ribosome_binding_site;ID=CPT-T1_018.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_018.mRNA; +AY216660.2 GbkToGff CDS 14079 14432 . + 0 locus_tag=CPT-T1_018;note=similar to lambda tail tip protein M UniProt ID P03737%3B Orf no. 37 see PMID: 14972552;codon_start=1;transl_table=11;product=tail tip protein;translation=MATLDTFGWCTQVQGGGGSLTTTNSDRSIQFGNGYMQLASSGFNTTRREYSVVYAGEDFMAVYDFCNSHRIKPFAWTPPDGKIGIWVVKPNSLGAKPVSRDVMEINVTFMEQFTSME;ID=CPT-T1_018.CDS.1;Parent=CPT-T1_018.mRNA; +AY216660.2 GbkToGff gene 14500 15294 . + . locus_tag=CPT-T1_019;ID=CPT-T1_019.gene; +AY216660.2 GbkToGff mRNA 14500 15294 . + . locus_tag=CPT-T1_019;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_019.mRNA;Parent=CPT-T1_019.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 14500 14503 . + . locus_tag=CPT-T1_019;regulatory_class=ribosome_binding_site;ID=CPT-T1_019.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_019.mRNA; +AY216660.2 GbkToGff CDS 14512 15294 . + 0 locus_tag=CPT-T1_019;note=similar to lambda tail tip protein L UniProt ID P03738%3B Orf no. 36 see PMID: 14972552;codon_start=1;transl_table=11;product=tail tip protein;translation=MSENKKLYDEESGKSLFHNCLQSLYPGEIITLIEVDGSKFGAQVYRFHGENIQYTPEEIMQAQQTGTLPPKEITFRGEKYGARPFGISGISFDSSGKATKPQLTVANIDSRVSAMIRAYNGLMQAKVTIWITQRELINSDGSIADGAYRKLVYYIERPNYVDKSVARFDLTSPYDMDGIMIPSRLTQSVCYFAQRGWYKTGKGCGYNGQNGYFDKDNNPVDDPSLDFCPGTVTACRLRFGANNELDFGGCAVASLQRKNQ;ID=CPT-T1_019.CDS.1;Parent=CPT-T1_019.mRNA; +AY216660.2 GbkToGff gene 15279 16025 . + . locus_tag=CPT-T1_020;ID=CPT-T1_020.gene; +AY216660.2 GbkToGff mRNA 15279 16025 . + . locus_tag=CPT-T1_020;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_020.mRNA;Parent=CPT-T1_020.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 15279 15282 . + . locus_tag=CPT-T1_020;regulatory_class=ribosome_binding_site;ID=CPT-T1_020.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_020.mRNA; +AY216660.2 GbkToGff CDS 15291 16025 . + 0 locus_tag=CPT-T1_020;note=similar to lambda tail tip protein K UniProt ID P03729%3B Orf no. 35 see PMID: 14972552;codon_start=1;transl_table=11;product=tail tip protein;translation=MISAKIKLEIMTHAQEEYPRECCGVVTQKGRVQKYHRIDNVHRDPENHFMMDAVQYACIEDDAESTTIAIVHSHTGDGATTLPSAHDTCMCNEMEVTWIIVSVPEGDMRFVKPEKLPLIGRPWSLGSFDCYGLVMAWHKEHGVELRDRRLNFEWWKPEYGINLYQDYYKQDGFVEIPDQNNPSFGDMVIMQIGQNVPVWNHAGIYLGDNQILHHAFGKLSRRDIYSGWYQDHTVLIVRHKDLKL;ID=CPT-T1_020.CDS.1;Parent=CPT-T1_020.mRNA; +AY216660.2 GbkToGff gene 16009 16621 . + . locus_tag=CPT-T1_021;ID=CPT-T1_021.gene; +AY216660.2 GbkToGff mRNA 16009 16621 . + . locus_tag=CPT-T1_021;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_021.mRNA;Parent=CPT-T1_021.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 16009 16012 . + . locus_tag=CPT-T1_021;regulatory_class=ribosome_binding_site;ID=CPT-T1_021.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_021.mRNA; +AY216660.2 GbkToGff CDS 16022 16621 . + 0 locus_tag=CPT-T1_021;note=single transmembrane domain predicted N-in and C-out%3B similar to lambda tail tip assembly protein I UniProt ID P03730%3B Orf no. 34 see PMID: 14972552;codon_start=1;transl_table=11;product=tail assembly protein;translation=MNDVKVIKLSGSLGRRFGVFHRYAVDSYPEAIRALSSQVDGFKEYMQSEVGSRSKFAIFVDGVNVGHHEEEKFKCAKEIRIVPIPTGSKTGGLFQVVLGAAIMVAAFYTGGASLALMGTMSSSLFMMGGAMVLGGVMQMISPQPGGANFEVQSSKNKPSYAFGGAVNTTAAGYPLPVPYGYRAGGGATFSAGSYAEDMS;ID=CPT-T1_021.CDS.1;Parent=CPT-T1_021.mRNA; +AY216660.2 GbkToGff gene 16688 20217 . + . locus_tag=CPT-T1_022;ID=CPT-T1_022.gene; +AY216660.2 GbkToGff mRNA 16688 20217 . + . locus_tag=CPT-T1_022;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_022.mRNA;Parent=CPT-T1_022.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 16688 16691 . + . locus_tag=CPT-T1_022;regulatory_class=ribosome_binding_site;ID=CPT-T1_022.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_022.mRNA; +AY216660.2 GbkToGff CDS 16699 20217 . + 0 locus_tag=CPT-T1_022;note=similar to phage lambda tip attachment protein J UniProt ID P03749%3B Orf no. 33 see PMID: 14972552;codon_start=1;transl_table=11;product=tail fiber;translation=MIQKVISGSKGGSQKPHNPVEMEDNLISINKIKILLAVSDGEIDETFSLKQLMFNSVPVQNEDGSFNFEGVKAEFRPGTQTQEYIKGMEDSSSEVTVNREVTTDNPYTISVTNKTLSAIRIKMFMPRGVRIESNGDKNGVRVEYEVQQAVDGGSFETVLTDVIEGKTMSGYDRSRRVNLPNFNNQVIFRVVRKTPDSNDSNVVDAIQVKSYAEVIDAKFRYPLTGLLFVEFDSKMFPNQLPTISIRKRWKIVNVPSNYDPESRTYNGNWDGTFKKAWTNNPAWVLYDLMINQRYGLDQKELGIAVDKWALYEAAQYCDQMVPDGKGGTEPRYLCDVIIQSQTDAYKVIRDICSIFRGMSFWNGESISVIIDRPREPAYIFTNDNVVNGDFSYTFASEKSMYTTCNVMFDDEQNMYQQDVEPVFDREATLRFGNNVTSITAIGCTRRSEANRRGRWILKTNLRSTTVNFATGLEGMIPTIGDVVAIADNFWSSNLTMNLSGRLLEVSGSQIFLPFRVDARAGDFIIVNKPDGKPVKRTISSVSADGKTIEVNIGFGFPVKPNTVFAIDRTDIALQQYVVTKIDKGDDDEEFTYKITAVEYDPNKYDEIDYGVNIDDRPTSIVEPDQIPRPKNVQVSSESRIVQGMSVETMIVSWDKVPYAVFYDVQWRKDNGNWQNVPQTANKEVYVEGIYAGNYQVRVRSVAGSGTTSGWSNIVAATLTGKQGEPGRPINLTATDDVVFGIRTKWGFSDGSGDTAYTELQQSPDGTVDNASLLSLIPYPQHEYYHSPMPGGNIVWYRVRTVDRIGNVSQWTDFVRGMASTNVDDIIGEISVDIENSPGYEWLVDNATDNAAQNSANAEAAIENALANDKDAIYMKKENGKRKAEYTKSLKLIADETQARVTAIEQLKASFGDQISASNSELREVIATETEALSREIDQLKAQIGDDIQASLTDIREVIATETEALSREIDQLKAQIGDDIQASLTDIREAIANETEARTQADLTLSARLGNNEAALAQKLDSWSNADSTGAMYGVKLGLKYNGQEYSAGMAMSLVGSGAAVKAQILFEASRFAIMTGMNGQTQYPFVVENGQVILSSAIIKNGFITNAMIGNFIQSNNYVFNQSGWRLDKGGTFENYGSDGEGAMKQTNTTISVRDASGRLRVQIGRLTGSW;ID=CPT-T1_022.CDS.1;Parent=CPT-T1_022.mRNA; +AY216660.2 GbkToGff gene 20251 20568 . + . locus_tag=CPT-T1_023;ID=CPT-T1_023.gene; +AY216660.2 GbkToGff mRNA 20251 20568 . + . locus_tag=CPT-T1_023;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_023.mRNA;Parent=CPT-T1_023.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 20251 20255 . + . locus_tag=CPT-T1_023;regulatory_class=ribosome_binding_site;ID=CPT-T1_023.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_023.mRNA; +AY216660.2 GbkToGff CDS 20263 20568 . + 0 locus_tag=CPT-T1_023;codon_start=1;transl_table=11;product=hypothetical protein;translation=MAYGISTWDANGVYNNYGIKPITVVGWNFLSAGQNSASFSYQVPPGMHVNYVISLDDGAISGPGRKIIASGNTITVTPTNSPGPNVYPSSNCYLIAYLEND;note=Orf no. 32 see PMID: 14972552;ID=CPT-T1_023.CDS.1;Parent=CPT-T1_023.mRNA; +AY216660.2 GbkToGff gene 20556 21257 . + . locus_tag=CPT-T1_024;ID=CPT-T1_024.gene; +AY216660.2 GbkToGff mRNA 20556 21257 . + . locus_tag=CPT-T1_024;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_024.mRNA;Parent=CPT-T1_024.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 20556 20559 . + . locus_tag=CPT-T1_024;regulatory_class=ribosome_binding_site;ID=CPT-T1_024.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_024.mRNA; +AY216660.2 GbkToGff CDS 20568 21257 . + 0 locus_tag=CPT-T1_024;note=InterPro domain IPR013750%3B GHMP kinase domain- containing protein%3B Orf no. 31 see PMID: 14972552;codon_start=1;transl_table=11;product=hypothetical protein;translation=MSYGAFIDVNGNPFITPLSTPFALYARGEIQSVNVSGSQVAERYVRIPTGVPVIAFCKTTNTQQGTALSAFTFRSGPNVGTVYIRGTNPANQSYTLTYYIFAIFEQSLPRWGMAIWDASGKLVLTNETKVLSDLVTIGTPGYAGGGLNIDTTLSGSYAVVPTILGNYQVVIGRLPTGQPIIGNSTAGSSCRYNGSTTRINAAATTAAGQIMNTTNNGNIITAIKTAAYD;ID=CPT-T1_024.CDS.1;Parent=CPT-T1_024.mRNA; +AY216660.2 GbkToGff gene 21279 21518 . - . locus_tag=CPT-T1_025;ID=CPT-T1_025.gene; +AY216660.2 GbkToGff mRNA 21279 21518 . - . locus_tag=CPT-T1_025;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_025.mRNA;Parent=CPT-T1_025.gene; +AY216660.2 GbkToGff CDS 21279 21506 . - 0 locus_tag=CPT-T1_025;codon_start=1;transl_table=11;product=hypothetical protein;translation=MKKLITIIAAAFILTGCSSMPERTCTAIYESGGAEYSVYVFGSKMRGKEMVLRAGYPFSFNYVSEKNFKSHDCSI;note=Orf no. 30 see PMID: 14972552;ID=CPT-T1_025.CDS.1;Parent=CPT-T1_025.mRNA; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 21515 21518 . - . locus_tag=CPT-T1_025;regulatory_class=ribosome_binding_site;ID=CPT-T1_025.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_025.mRNA; +AY216660.2 GbkToGff gene 21755 21906 . + . locus_tag=CPT-T1_026;ID=CPT-T1_026.gene; +AY216660.2 GbkToGff mRNA 21755 21906 . + . locus_tag=CPT-T1_026;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_026.mRNA;Parent=CPT-T1_026.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 21755 21758 . + . locus_tag=CPT-T1_026;regulatory_class=ribosome_binding_site;ID=CPT-T1_026.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_026.mRNA; +AY216660.2 GbkToGff CDS 21766 21906 . + 0 locus_tag=CPT-T1_026;codon_start=1;transl_table=11;product=hypothetical protein;translation=MIRQISIMYVQNLINLDSICRYLCISNKKRLQVLRNRQRIKIYLSH;ID=CPT-T1_026.CDS.1;Parent=CPT-T1_026.mRNA; +AY216660.2 GbkToGff gene 22020 23098 . + . locus_tag=CPT-T1_027;ID=CPT-T1_027.gene; +AY216660.2 GbkToGff mRNA 22020 23098 . + . locus_tag=CPT-T1_027;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_027.mRNA;Parent=CPT-T1_027.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 22020 22024 . + . locus_tag=CPT-T1_027;regulatory_class=ribosome_binding_site;ID=CPT-T1_027.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_027.mRNA; +AY216660.2 GbkToGff CDS 22034 23098 . + 0 locus_tag=CPT-T1_027;codon_start=1;transl_table=11;product=exodeoxyribonuclease VIII;translation=MFQVFTSSQLSNDEYHRNEGWASEYVSGSSLAEIYQTCPANWRFKKNETTKALEFGTQSHTNFESRDLFTATYARCPAPSEFKDLITSQAALAAKLKSFGLKGTSGKQYPDLIKMMVDCGEELNVQYLIELIAEAEARAEGKQLVDADKYDACMKMRAILEQNPDHEACINSETAQREISIFGEISGVKVKVRLDHLDYKENVPGRVLTGYDENGDPVFEDVIFPEALIITDFKTTMSANPLEFPRLAYNHGYYLKMALQHDLLRRAIQAGAFEGNFPEDIPIVVRLLAQEKKEPYIALAYRMTMEQIRIGRNQYISVVHTYKACSEMDVWPGYAGDASEIELETPSWVRYQNK;note=Orf no. 29 see PMID: 14972552;ID=CPT-T1_027.CDS.1;Parent=CPT-T1_027.mRNA; +AY216660.2 GbkToGff gene 23129 23820 . + . locus_tag=CPT-T1_028;ID=CPT-T1_028.gene; +AY216660.2 GbkToGff mRNA 23129 23820 . + . locus_tag=CPT-T1_028;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_028.mRNA;Parent=CPT-T1_028.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 23129 23133 . + . locus_tag=CPT-T1_028;regulatory_class=ribosome_binding_site;ID=CPT-T1_028.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_028.mRNA; +AY216660.2 GbkToGff CDS 23140 23820 . + 0 locus_tag=CPT-T1_028;note=InterPro domain IPR007499%3B Orf no. 28 see PMID: 14972552;codon_start=1;transl_table=11;product=recombinase;translation=MHLIHQSGEVKMQLSPETNEILPALFNARNKFAKAKKDAKNNHLKNSYATLDAMMAAVSPALTDNDIMILQSMLDTSTETTFHLETMLIHKSGQWAKFFMMMPIAKRDPQGVGSAMTYARRYSLAAALGISQSDDDAQLAVKSVKDWKKELDACEDIESLKDVWANAYRQTDTASKSIIQDHYNALKAKFEIGKARGIRPAQPEQKKQVEATSAKPVQSQSITNFE;ID=CPT-T1_028.CDS.1;Parent=CPT-T1_028.mRNA; +AY216660.2 GbkToGff gene 23854 24289 . + . locus_tag=CPT-T1_029;ID=CPT-T1_029.gene; +AY216660.2 GbkToGff mRNA 23854 24289 . + . locus_tag=CPT-T1_029;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_029.mRNA;Parent=CPT-T1_029.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 23854 23858 . + . locus_tag=CPT-T1_029;regulatory_class=ribosome_binding_site;ID=CPT-T1_029.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_029.mRNA; +AY216660.2 GbkToGff CDS 23867 24289 . + 0 locus_tag=CPT-T1_029;note=InterPro domain IPR012340,Orf no. 27 see PMID: 14972552;codon_start=1;transl_table=11;product=single-stranded DNA-binding protein;translation=MHIITGEIRKEPKILERNGGNTYIIELAESYKPRDGDREYTNYTFFFSDGGKPGLADWYREAFQVGRVISVSCETLKISSREHNGMIYNSLQAADFPKLVFSQRGQSNQQQRAPQQQQRSQQQSQPQPNQQSTFDDDIPF;ID=CPT-T1_029.CDS.1;Parent=CPT-T1_029.mRNA; +AY216660.2 GbkToGff gene 24351 26550 . - . locus_tag=CPT-T1_030;ID=CPT-T1_030.gene; +AY216660.2 GbkToGff mRNA 24351 26550 . - . locus_tag=CPT-T1_030;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_030.mRNA;Parent=CPT-T1_030.gene; +AY216660.2 GbkToGff CDS 24351 26537 . - 0 locus_tag=CPT-T1_030;codon_start=1;transl_table=11;product=hypothetical protein;translation=MALYRRGTASMDADGTVHGTDTKWKDQLALIRVGATIVFLEQPIKLAVISDIVSDTELKAISTDGQTAADGKYVILLNDSLTVNGLAQNVAETLRYYQSKETEIASALDIIADLDMDNLNNIVQEIKSNKSAAEAAQNQAELARDSANSARDESISIKNQTQQISDSAIGSINAAKDKAITNVQQKENSAVTHINSEEAAAIQAINDAKGDLSGYVNDAQTAAQTATSAKNDAQAARDAAVSAKDAAAVSAQEAQDAANSVNADNLLTKDGNLSGLADKEQSKKNLAVNRLNQPRGDLTEIYSNDDRTGFKLIVKDSGDWGAMTHDGSENKALGVNFGGTGGTTEEQARTSLKVYKLDRTNLGEKHLDSITGEGDGPGIYMQSSSALATASRGYPEATAGMLEVLPNGANGASACIQRFTPFTYLGTAPESGNSQNEYARAGRGTFYIRMKNGNNAKFSPWIPFQASSSGNVVSSPASNEKSSWVDYVNALSSQPSSLASYNVNSVGWVTAISVRHRNGQGDGSAFGFVIEDASMTSPHYKDVRLRKQTGAGQWQSTQVIWNTGNTTVDSNGFIKRASPIVDIFGNGSHRTNDESEGCTVERISTGEYLIRGCLSLNSDLAWGGVNGGIEIPKDINGQPILWVDYDVNPDGSLVIKTYHRTHDNAPSFARNHKDGYSDGDPIDIPSDVFVSVRVEMPNDSIYNKKVEECKRNHERMVSGEFVESLKNT;note=Orf no. 26 see PMID: 14972552;ID=CPT-T1_030.CDS.1;Parent=CPT-T1_030.mRNA; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 26546 26550 . - . locus_tag=CPT-T1_030;regulatory_class=ribosome_binding_site;ID=CPT-T1_030.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_030.mRNA; +AY216660.2 GbkToGff gene 26447 26600 . - . locus_tag=CPT-T1_031;ID=CPT-T1_031.gene; +AY216660.2 GbkToGff mRNA 26447 26600 . - . locus_tag=CPT-T1_031;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_031.mRNA;Parent=CPT-T1_031.gene; +AY216660.2 GbkToGff CDS 26447 26590 . - 0 locus_tag=CPT-T1_031;codon_start=1;transl_table=11;product=hypothetical protein;translation=MIKSLLSNSCYLLKEFILWLYIDAVLHQWMQTVRFTEPIQNGKISLL;note=Orf no. 25 see PMID: 14972552;ID=CPT-T1_031.CDS.1;Parent=CPT-T1_031.mRNA; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 26597 26600 . - . locus_tag=CPT-T1_031;regulatory_class=ribosome_binding_site;ID=CPT-T1_031.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_031.mRNA; +AY216660.2 GbkToGff gene 26638 27585 . - . locus_tag=CPT-T1_032;ID=CPT-T1_032.gene; +AY216660.2 GbkToGff mRNA 26638 27585 . - . locus_tag=CPT-T1_032;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_032.mRNA;Parent=CPT-T1_032.gene; +AY216660.2 GbkToGff CDS 26638 27573 . - 0 locus_tag=CPT-T1_032;codon_start=1;transl_table=11;product=DNA primase;translation=MNEEFMMFQKEDVLPYMKGLWREAFQSICGLPNNVFNKKHQPCPNCGGKDRFRWTDNLNTPGDGGAICNSCGNDSGIGWLMKLTGMPYSECVNILGRFLGKVPQEYIVKANKKARRTPVSGVNVMMAEHEAVMKVMERTEKRVNTPLSVFESLPTESFDVGIKRSEDGRESVFHTIPCQLVHEDGLDDEFCNILIIDEEGRESFYAKKYTSCSVAVTGKTEKAIYLCLNWIDAQHIAFHTKQEVWACFTPENLEMVAYRYKGDREVRVACEPSDKDTLYMADDRQLKIIIPNPGGYRSGMQAKLFSASDLL;note=alternative start codon to Orf no. 24 see PMID: 14972552;ID=CPT-T1_032.CDS.1;Parent=CPT-T1_032.mRNA; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 27582 27585 . - . locus_tag=CPT-T1_032;regulatory_class=ribosome_binding_site;ID=CPT-T1_032.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_032.mRNA; +AY216660.2 GbkToGff gene 27635 28098 . - . locus_tag=CPT-T1_033;ID=CPT-T1_033.gene; +AY216660.2 GbkToGff mRNA 27635 28098 . - . locus_tag=CPT-T1_033;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_033.mRNA;Parent=CPT-T1_033.gene; +AY216660.2 GbkToGff CDS 27635 28087 . - 0 locus_tag=CPT-T1_033;note=HHPred predicted structural similarity at 97%25 probability to phage P22 repression protein C2 Protein Data Bank entry 2R1J over most of protein and phage lambda repressor entry 3BDN%3BOrf no. 23 see PMID: 14972552;codon_start=1;transl_table=11;product=transcriptional regulator;translation=MSIQRIAESTGEIDKRHINGNNGTRRGKDKKPRQRCGFYIHKEETRAGLRARLDALIEYYGGPAACAKALKVSNQTVQGWKERNMISWQGAEAAHRAYRRQGCKGFRAAWLRFDLKFDGNGKCLEKRCKNKKFMRVVKREDIGTTNSIFS;ID=CPT-T1_033.CDS.1;Parent=CPT-T1_033.mRNA; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 28095 28098 . - . locus_tag=CPT-T1_033;regulatory_class=ribosome_binding_site;ID=CPT-T1_033.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_033.mRNA; +AY216660.2 GbkToGff gene 28168 30199 . + . locus_tag=CPT-T1_034;ID=CPT-T1_034.gene; +AY216660.2 GbkToGff mRNA 28168 30199 . + . locus_tag=CPT-T1_034;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_034.mRNA;Parent=CPT-T1_034.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 28168 28171 . + . locus_tag=CPT-T1_034;regulatory_class=ribosome_binding_site;ID=CPT-T1_034.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_034.mRNA; +AY216660.2 GbkToGff CDS 28181 30199 . + 0 locus_tag=CPT-T1_034;codon_start=1;transl_table=11;product=DNA helicase;translation=MTMNIKKQIALLGDDYIKRTQERFTVGEVVPYPYQVVAYAEIAKRLSNYEHPFFVKASVSAGKTIIFAMVAKQCQKMGLKMLVLARQGEIVDQDSEEIDNFGVTNSIFSASLGIKSCYFPIVVGSEGTVANGLDNELADFVPHVIGIDECHQVDWEDLAQAIEGKETMEQMRGEKGKIIMDGDIPLIGNDGKPLLGTKRSQYTIVIMEMMRRCKKVHGHDLRIFGMTGSEFRGVVPILVENPKALGFWRERVTDIDTNYLIEFGSVVPTIFGSTDGVHYDLDKFKASSEDGVQDFTEKDMKAMEDEILHDKSLTQRIMQMVAKKAEERNAVLITCAGVRHCKEAAAALPPGSTYAIITGDTDNKARKKILDDVRAGKIKYTFQVMALTTGVNVPNWDFSVILRKIGSLTLLIQLLGRGMRLLKSWQVAEGMVKQDHLVWDFAGTMDELGQLYFDPILEQAQFQKRFENGKDPKTCPKCGCVNSFYARRCVNVIDGERCDHFWTSQICEDQVDERTGKILVKGCGAENDVVARVCRCCDASLVDPNLKLSGKAYTKNDWYEVKNFEVTLTKNQKGIIYKYTLINDDGDEFKAYEKFFPESDSKICGTLWKTKGVLPHVSDPKMRRYFIGMKNAIKILQYSHHIAHPVRVTHRRNQKKEDIISRKDFGMEDIPE;note=Orf no. 22 see PMID: 14972552;ID=CPT-T1_034.CDS.1;Parent=CPT-T1_034.mRNA; +AY216660.2 GbkToGff gene 30181 30612 . + . locus_tag=CPT-T1_035;ID=CPT-T1_035.gene; +AY216660.2 GbkToGff mRNA 30181 30612 . + . locus_tag=CPT-T1_035;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_035.mRNA;Parent=CPT-T1_035.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 30181 30185 . + . locus_tag=CPT-T1_035;regulatory_class=ribosome_binding_site;ID=CPT-T1_035.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_035.mRNA; +AY216660.2 GbkToGff CDS 30196 30612 . + 0 locus_tag=CPT-T1_035;note=HHPred predicted structural similarity at 97%25 probability to B. subtilis recombination protein U/resolvase Protein Data Bank entry 1ZP7 over most of protein%3B Orf no. 21 see PMID: 14972552;codon_start=1;transl_table=11;product=Holliday junction resolvase;translation=MITDKGDYLEFYERDTSDTRKEDAHQVDCVSWLKYNFPHLLFWHTVNEGEKTITSALRDEQAGLLKGVSDFVILIGVNSRYPFAAIELKRVNKSGKGKASPVSDKQREFLQKVRERGGFSAVAYGFGQFKIAIYEMMK;ID=CPT-T1_035.CDS.1;Parent=CPT-T1_035.mRNA; +AY216660.2 GbkToGff gene 30669 31393 . + . locus_tag=CPT-T1_036;ID=CPT-T1_036.gene; +AY216660.2 GbkToGff mRNA 30669 31393 . + . locus_tag=CPT-T1_036;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_036.mRNA;Parent=CPT-T1_036.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 30669 30672 . + . locus_tag=CPT-T1_036;regulatory_class=ribosome_binding_site;ID=CPT-T1_036.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_036.mRNA; +AY216660.2 GbkToGff CDS 30680 31393 . + 0 locus_tag=CPT-T1_036;codon_start=1;transl_table=11;product=DNA adenine methyltransferase;translation=MKDFNDIETIDFAETGCSFTREAIASGGYYQALKTPTCKEISGRRYKGTNTPDAVRDLWSTPREVIAYLEGRYGKYDLDAAASEENKVCEKFYSQETNCLKRWWGKNKHVWLNPPYSRPDIFVKKAIEQMEHNNQIDMLLPADNSTAWFTEARQNAAEIIWIEADLTEDIDGNEYARSGRLAFISGETGKAVDGNNKGSVIFIMRELKEGEVQQTHYIPITSICPSVKNKRAKVRKV;note=Orf no. 20 see PMID: 14972552;ID=CPT-T1_036.CDS.1;Parent=CPT-T1_036.mRNA; +AY216660.2 GbkToGff gene 31377 31641 . + . locus_tag=CPT-T1_037;ID=CPT-T1_037.gene; +AY216660.2 GbkToGff mRNA 31377 31641 . + . locus_tag=CPT-T1_037;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_037.mRNA;Parent=CPT-T1_037.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 31377 31380 . + . locus_tag=CPT-T1_037;regulatory_class=ribosome_binding_site;ID=CPT-T1_037.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_037.mRNA; +AY216660.2 GbkToGff CDS 31393 31641 . + 0 locus_tag=CPT-T1_037;codon_start=1;transl_table=11;product=hypothetical protein;translation=MSEKMVPVKLTEQGLWLLYRATCCEIMERNGLTQDVIGCDLWEFTSSLDMSFDEIKNEYIENWPSIIQKDVEELKADTIVQH;note=alternative start codon to Orf no. 19 see PMID: 14972552;ID=CPT-T1_037.CDS.1;Parent=CPT-T1_037.mRNA; +AY216660.2 GbkToGff gene 31695 31917 . + . locus_tag=CPT-T1_038;ID=CPT-T1_038.gene; +AY216660.2 GbkToGff mRNA 31695 31917 . + . locus_tag=CPT-T1_038;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_038.mRNA;Parent=CPT-T1_038.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 31695 31698 . + . locus_tag=CPT-T1_038;regulatory_class=ribosome_binding_site;ID=CPT-T1_038.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_038.mRNA; +AY216660.2 GbkToGff CDS 31708 31917 . + 0 locus_tag=CPT-T1_038;codon_start=1;transl_table=11;product=hypothetical protein;translation=MARINANFFNIAQQSAKMAVHITNKQGGNFDWDIAMNFLKMSYYRCSVEEVEGFISDVEKLTNADKKAR;note=Orf no. 18 see PMID: 14972552;ID=CPT-T1_038.CDS.1;Parent=CPT-T1_038.mRNA; +AY216660.2 GbkToGff gene 31881 32167 . + . locus_tag=CPT-T1_039;ID=CPT-T1_039.gene; +AY216660.2 GbkToGff mRNA 31881 32167 . + . locus_tag=CPT-T1_039;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_039.mRNA;Parent=CPT-T1_039.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 31881 31884 . + . locus_tag=CPT-T1_039;regulatory_class=ribosome_binding_site;ID=CPT-T1_039.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_039.mRNA; +AY216660.2 GbkToGff CDS 31895 32167 . + 0 locus_tag=CPT-T1_039;codon_start=1;transl_table=11;product=hypothetical protein;translation=MLIKKQGKREVWEHAKECGISDDIALIAKYFDIKDVSIISNGKISFMEGMPRKMQRVPATPSLEFYREEGKRIERERKSTKNGKSSRLKY;ID=CPT-T1_039.CDS.1;Parent=CPT-T1_039.mRNA; +AY216660.2 GbkToGff gene 32099 32399 . + . locus_tag=CPT-T1_040;ID=CPT-T1_040.gene; +AY216660.2 GbkToGff mRNA 32099 32399 . + . locus_tag=CPT-T1_040;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_040.mRNA;Parent=CPT-T1_040.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 32099 32102 . + . locus_tag=CPT-T1_040;regulatory_class=ribosome_binding_site;ID=CPT-T1_040.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_040.mRNA; +AY216660.2 GbkToGff CDS 32112 32399 . + 0 locus_tag=CPT-T1_040;codon_start=1;transl_table=11;product=hypothetical protein;translation=MSEKENPQKTASLPGLNINADEYQAIWIGKKQVKQIPFSDWLPPDFVNVLCTIGIEQELHIGYYSPGRNSMMLEVDGKLVEFKSSDLGFWLKAVA;note=Orf no. 17 see PMID: 14972552;ID=CPT-T1_040.CDS.1;Parent=CPT-T1_040.mRNA; +AY216660.2 GbkToGff gene 32467 33611 . + . locus_tag=CPT-T1_041;ID=CPT-T1_041.gene; +AY216660.2 GbkToGff mRNA 32467 33611 . + . locus_tag=CPT-T1_041;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_041.mRNA;Parent=CPT-T1_041.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 32467 32470 . + . locus_tag=CPT-T1_041;regulatory_class=ribosome_binding_site;ID=CPT-T1_041.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_041.mRNA; +AY216660.2 GbkToGff CDS 32478 33611 . + 0 locus_tag=CPT-T1_041;note=HHPred predicted structural similarity at 99%25 probability to E. coli exonuclease SbcD Protein Data Bank entry 4LTY over two thirds of protein%3B Orf no. 16 see PMID: 14972552;codon_start=1;transl_table=11;product=exonuclease;translation=MSQAKITTEQLIEERMSGLTLREIAEKYGMHIRTVEARHAKLAKEGHFHGNEHVAKMVPEGFMVKGTSTMIDAEGNEKIRWVKTSVDNERLEVLMEKAREAFCSELPKAIPSESPDVSFDEDTLAMYPVFDLHIGALAHKHECGENYDTATAEKVMNGFFDYAVDKAPNSKNAVLVLGGDFLHYDSLESKTPASGHYLDSDSRYAKLVYVAIRSVRRAVSRMLEKHQVIDIKAISGNHDESGMVWLRAALAAFYEDEPRVNVDVSPAAMMMTSFGKTLIGYTHGHQMRKADTRLSVMATDFRKLFGQSDYVYTHSGHWHSQKITETNLGIDEVHGQLGSPDAYSANGGWRSQRQAAVIVYHKEFGEVGRFICRPEMF;ID=CPT-T1_041.CDS.1;Parent=CPT-T1_041.mRNA; +AY216660.2 GbkToGff gene 33673 34166 . + . locus_tag=CPT-T1_042;ID=CPT-T1_042.gene; +AY216660.2 GbkToGff mRNA 33673 34166 . + . locus_tag=CPT-T1_042;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_042.mRNA;Parent=CPT-T1_042.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 33673 33677 . + . locus_tag=CPT-T1_042;regulatory_class=ribosome_binding_site;ID=CPT-T1_042.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_042.mRNA; +AY216660.2 GbkToGff CDS 33684 34166 . + 0 locus_tag=CPT-T1_042;note=similar to phage T7 protein 3.8%3B InterPro domain IPR003615%3B Orf no. 15 see PMID: 14972552;codon_start=1;transl_table=11;product=HNH endonuclease;translation=MNWHEHYEYRDGVLYHKVKPCRRHDVNIGDVAGRVAKNGYHYVVHKNRPYKRSRVIWEMFNGEIPDGFVIDHLNHNATDDRIDNLECKPRRENMVNVKLRIDSTTGVTGVSRKRDNKWRAYITIMGKQKCKSFDTFEEACAQRIEWSVTHDFHPNHGGTY;ID=CPT-T1_042.CDS.1;Parent=CPT-T1_042.mRNA; +AY216660.2 GbkToGff gene 34226 34415 . + . locus_tag=CPT-T1_043;ID=CPT-T1_043.gene; +AY216660.2 GbkToGff mRNA 34226 34415 . + . locus_tag=CPT-T1_043;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_043.mRNA;Parent=CPT-T1_043.gene; +AY216660.2 GbkToGff CDS 34239 34415 . + 0 locus_tag=CPT-T1_043;codon_start=1;transl_table=11;product=hypothetical protein;translation=MKIVKCIRNDSKTLPFRVNQIYSVGYDFGGGLFEIYDGRGSAIQTPLNGHYLEFIEID;note=Orf no. 14 see PMID: 14972552;ID=CPT-T1_043.CDS.1;Parent=CPT-T1_043.mRNA; +AY216660.2 GbkToGff gene 34525 34749 . + . locus_tag=CPT-T1_044;ID=CPT-T1_044.gene; +AY216660.2 GbkToGff mRNA 34525 34749 . + . locus_tag=CPT-T1_044;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_044.mRNA;Parent=CPT-T1_044.gene; +AY216660.2 GbkToGff CDS 34534 34749 . + 0 locus_tag=CPT-T1_044;note=1 transmembrane domain%2C predicted N-out and C-in%3B Orf no. 13 see PMID: 14972552;codon_start=1;transl_table=11;product=pinholin class 2;translation=MKEFLTAATSSTGGASLVGAATGQLYIAGATFICFLLFGAWGAYWKYRDSKAIQEALNDGDLNKALKIRGR;ID=CPT-T1_044.CDS.1;Parent=CPT-T1_044.mRNA; +AY216660.2 GbkToGff gene 34739 35237 . + . locus_tag=CPT-T1_045;ID=CPT-T1_045.gene; +AY216660.2 GbkToGff mRNA 34739 35237 . + . locus_tag=CPT-T1_045;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_045.mRNA;Parent=CPT-T1_045.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 34739 34743 . + . locus_tag=CPT-T1_045;regulatory_class=ribosome_binding_site;ID=CPT-T1_045.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_045.mRNA; +AY216660.2 GbkToGff CDS 34749 35237 . + 0 locus_tag=CPT-T1_045;codon_start=1;transl_table=11;product=SAR endolysin;translation=MSLKNNVIGASIGAALTLTPTLLERIEGIEYEVYYDIAGVPTVCSGITGPDVIPGKKYTKRECDALLIKHIGVAQRYVDKKVKVDIPVTMRASLYSFTFNVGTGAFGSSTMLKLINQRKHKEACNQLWRWVYYYNPKTKKREVSRGIKNRRAEEYAYCVKEL;note=Orf no. 12 see PMID: 14972552;ID=CPT-T1_045.CDS.1;Parent=CPT-T1_045.mRNA; +AY216660.2 GbkToGff gene 35227 35638 . + . locus_tag=CPT-T1_046;ID=CPT-T1_046.gene; +AY216660.2 GbkToGff mRNA 35227 35638 . + . locus_tag=CPT-T1_046;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_046.mRNA;Parent=CPT-T1_046.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 35227 35230 . + . locus_tag=CPT-T1_046;regulatory_class=ribosome_binding_site;ID=CPT-T1_046.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_046.mRNA; +AY216660.2 GbkToGff CDS 35237 35638 . + 0 locus_tag=CPT-T1_046;note=PMID 30135120 shows molecular function of unimolecular spanin%3B Orf no. 11 see PMID: 14972552;codon_start=1;transl_table=11;product=u-spanin;translation=MKLKKTCIAITVAVGVISLSGCSTASALSGLLSDSPDVTAQVGAENTKQLAGVTAKADDKREVKVSDSNIGKIDSSVKKSVEVSTIQANTVNAESITVTKSGSWYDPVVCWILVFIVLLLFYFLIRKHEKKEA;ID=CPT-T1_046.CDS.1;Parent=CPT-T1_046.mRNA; +AY216660.2 GbkToGff gene 35761 36179 . - . locus_tag=CPT-T1_047;ID=CPT-T1_047.gene; +AY216660.2 GbkToGff mRNA 35761 36179 . - . locus_tag=CPT-T1_047;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_047.mRNA;Parent=CPT-T1_047.gene; +AY216660.2 GbkToGff CDS 35761 36168 . - 0 locus_tag=CPT-T1_047;note=HHPred predicted structural similarity at 88%25 probability to S. epidermidis RipR transcriptional regulator Protein Data Bank entry 3IWF over most of protein%3B Orf no. 10 see PMID: 14972552;codon_start=1;transl_table=11;product=HTH domain-containing protein;translation=MLLLLDLFRFCEGYDKYTRQHIAKFIYAHKESERFAKAAGMTRREFTSALSKEFCARCVTEGYLDCKGGFYWCKGKIKRPVMMKLMCIDGYNNRYTWEMMHIGEMSDEDLFGERRNIDRSERRIVRKAPAYERRI;ID=CPT-T1_047.CDS.1;Parent=CPT-T1_047.mRNA; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 36176 36179 . - . locus_tag=CPT-T1_047;regulatory_class=ribosome_binding_site;ID=CPT-T1_047.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_047.mRNA; +AY216660.2 GbkToGff gene 36173 37755 . - . locus_tag=CPT-T1_048;ID=CPT-T1_048.gene; +AY216660.2 GbkToGff mRNA 36173 37755 . - . locus_tag=CPT-T1_048;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_048.mRNA;Parent=CPT-T1_048.gene; +AY216660.2 GbkToGff CDS 36173 37741 . - 0 locus_tag=CPT-T1_048;note=HHPred predicted structural similarity at 95%25 probability to E. coli AAA ATPase ravA Protein Data Bank entry 3NBX over AAA domain of protein%3B Orf no. 9 see PMID: 14972552;codon_start=1;transl_table=11;product=putative ATPase;translation=MFNIKPKLNYQQIIEIANSTGVNPVAIAIRENSYGDSVSFWQDPIDINSGNDKFPLISLGGDNLVFEYAKAKAESVQFPVSSAYAHFIGCISAAMLGKFWVQYHGEEQPTALYMVISQPPSTGKSAINSAAITPMRAEIQRLNEERKKERIRLTSQLRQIEKEIKNDPKGNTTAALYEDKEKLEEKIKKMADIVFAVSDPTPEGLAKVAAVQGHFSVISDEATAINTLLGLTYGGSDKKSNSELILKAWDKNHMEVARSNQDNNLSLCPVGSICVIAQDETIKGIMDAGQRGIGVSERFLLVREEPLLGTRILCDENGDALYKEVDRGLVSKYYRLVHNIMKEDNVVLSVSRNAMRELNLARQAMEPDFAAGGKYSHSMLRGHLGKFDKHALRIASVLHTIKNWEGESPNRSNREIDLETMQEAIMIFNELSRTYLSSASAAGYAGDEAESRKLIDVITEIAKKNKGRAPIHSIVAKCRNVTPFNGQQKVAERIDSLLITLEEMNYTCRIDDIVFINPRLMG;ID=CPT-T1_048.CDS.1;Parent=CPT-T1_048.mRNA; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 37751 37755 . - . locus_tag=CPT-T1_048;regulatory_class=ribosome_binding_site;ID=CPT-T1_048.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_048.mRNA; +AY216660.2 GbkToGff gene 37741 38294 . - . locus_tag=CPT-T1_049;ID=CPT-T1_049.gene; +AY216660.2 GbkToGff mRNA 37741 38294 . - . locus_tag=CPT-T1_049;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_049.mRNA;Parent=CPT-T1_049.gene; +AY216660.2 GbkToGff CDS 37741 38280 . - 0 locus_tag=CPT-T1_049;note=InterPro domain IPR003615%3B similar to phage T7 protein 3.8%3B Orf no. 8 see PMID: 14972552;codon_start=1;transl_table=11;product=HNH endonuclease;translation=MKDELKYVSGRLYWKEWRIGRRRNLLAGTVNKKGYRSICFPGGVFEYAHRIVWKIHYGNIPEGMDVDHINHERDDNRIENLRLVTRQDNLRNKGVVSSNTGVMGVYWNKKTNRYTANITINKKTKHLGTFMTLDAAAKARKEAERLYGFHENHGSNSTFCKTRVPLTVYHSRRQLRSLL;ID=CPT-T1_049.CDS.1;Parent=CPT-T1_049.mRNA; +AY216660.2 GbkToGff gene 38277 38706 . - . locus_tag=CPT-T1_050;ID=CPT-T1_050.gene; +AY216660.2 GbkToGff mRNA 38277 38706 . - . locus_tag=CPT-T1_050;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_050.mRNA;Parent=CPT-T1_050.gene; +AY216660.2 GbkToGff CDS 38277 38693 . - 0 locus_tag=CPT-T1_050;note=HHPred predicted structural similarity at 88%25 probability to S. epidermidis RipR transcriptional regulator Protein Data Bank entry 3IWF over most of protein%3B Orf no. 7 see PMID: 14972552;codon_start=1;transl_table=11;product=hypothetical protein;translation=MKSIKLKCTSADKITGFEVNNLYKGRERYDDTREVKLKCGKYLKLEKHDELHIHGSDEIFFAKFTELKTKTLKCTGLDHRNPMKKSFKVGKRYQVESGRALGGVAGYIFDEDGCRWTLFREEVGFSIADGTTFESKYL;ID=CPT-T1_050.CDS.1;Parent=CPT-T1_050.mRNA; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 38702 38706 . - . locus_tag=CPT-T1_050;regulatory_class=ribosome_binding_site;ID=CPT-T1_050.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_050.mRNA; +AY216660.2 GbkToGff gene 38774 38994 . - . locus_tag=CPT-T1_051;ID=CPT-T1_051.gene; +AY216660.2 GbkToGff mRNA 38774 38994 . - . locus_tag=CPT-T1_051;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_051.mRNA;Parent=CPT-T1_051.gene; +AY216660.2 GbkToGff CDS 38774 38983 . - 0 locus_tag=CPT-T1_051;codon_start=1;transl_table=11;product=hypothetical protein;translation=MEQDNFWTRYFAALDAGLSSEWCIKVAYKEITLDEALGDMDMDAESEYDPNFELPGDDINEDVDDYIPW;note=Orf no. 6 see PMID: 14972552;ID=CPT-T1_051.CDS.1;Parent=CPT-T1_051.mRNA; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 38991 38994 . - . locus_tag=CPT-T1_051;regulatory_class=ribosome_binding_site;ID=CPT-T1_051.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_051.mRNA; +AY216660.2 GbkToGff gene 38987 39222 . - . locus_tag=CPT-T1_052;ID=CPT-T1_052.gene; +AY216660.2 GbkToGff mRNA 38987 39222 . - . locus_tag=CPT-T1_052;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_052.mRNA;Parent=CPT-T1_052.gene; +AY216660.2 GbkToGff CDS 38987 39211 . - 0 locus_tag=CPT-T1_052;codon_start=1;transl_table=11;product=hypothetical protein;translation=MSIKVENIIKHLNAKGRVFIKMDKSSGFISMTVTKTRNGNSVIGSVPGSRLINATDADVRATLEANSIYINSWG;note=Orf no. 5 see PMID: 14972552;ID=CPT-T1_052.CDS.1;Parent=CPT-T1_052.mRNA; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 39219 39222 . - . locus_tag=CPT-T1_052;regulatory_class=ribosome_binding_site;ID=CPT-T1_052.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_052.mRNA; +AY216660.2 GbkToGff gene 39289 39444 . - . locus_tag=CPT-T1_053;ID=CPT-T1_053.gene; +AY216660.2 GbkToGff mRNA 39289 39444 . - . locus_tag=CPT-T1_053;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_053.mRNA;Parent=CPT-T1_053.gene; +AY216660.2 GbkToGff CDS 39289 39432 . - 0 locus_tag=CPT-T1_053;codon_start=1;transl_table=11;product=hypothetical protein;translation=MIYVHTFYTGKFNSVKNVRVYDSRQKAMMQKVVLGGTIKECKVISEC;note=Orf no. 4 see PMID: 14972552;ID=CPT-T1_053.CDS.1;Parent=CPT-T1_053.mRNA; +AY216660.2 GbkToGff gene 39429 39758 . - . locus_tag=CPT-T1_054;ID=CPT-T1_054.gene; +AY216660.2 GbkToGff mRNA 39429 39758 . - . locus_tag=CPT-T1_054;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_054.mRNA;Parent=CPT-T1_054.gene; +AY216660.2 GbkToGff CDS 39429 39749 . - 0 locus_tag=CPT-T1_054;codon_start=1;transl_table=11;product=hypothetical protein;translation=MNHTYKITTKSPKINGSTVAALNNAAAIHEKNIMERVKAAVGRFYGINADIADSKRLFKYAPGHPYSRMVDIKHNKELVRIGSLSVDEFDHSINLVTAYQTWDGKK;note=Orf no. 3 see PMID: 14972552;ID=CPT-T1_054.CDS.1;Parent=CPT-T1_054.mRNA; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 39755 39758 . - . locus_tag=CPT-T1_054;regulatory_class=ribosome_binding_site;ID=CPT-T1_054.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_054.mRNA; +AY216660.2 GbkToGff gene 39766 39978 . - . locus_tag=CPT-T1_055;ID=CPT-T1_055.gene; +AY216660.2 GbkToGff mRNA 39766 39978 . - . locus_tag=CPT-T1_055;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_055.mRNA;Parent=CPT-T1_055.gene; +AY216660.2 GbkToGff CDS 39766 39966 . - 0 locus_tag=CPT-T1_055;codon_start=1;transl_table=11;product=hypothetical protein;translation=MSDNIYRVVAISRKTQKRVIAYMGSSAIEATDAFELLKNNEGFMNTFRVRLERLEPVIIDEARKLS;note=Orf no. 2 see PMID: 14972552;ID=CPT-T1_055.CDS.1;Parent=CPT-T1_055.mRNA; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 39973 39978 . - . locus_tag=CPT-T1_055;regulatory_class=ribosome_binding_site;ID=CPT-T1_055.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_055.mRNA; +AY216660.2 GbkToGff gene 39959 40342 . - . locus_tag=CPT-T1_056;ID=CPT-T1_056.gene; +AY216660.2 GbkToGff mRNA 39959 40342 . - . locus_tag=CPT-T1_056;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_056.mRNA;Parent=CPT-T1_056.gene; +AY216660.2 GbkToGff CDS 39959 40330 . - 0 locus_tag=CPT-T1_056;codon_start=1;transl_table=11;product=hypothetical protein;translation=MFKQFTDLDFSASSVIQTDEKVHVAIENIARKIHNKQEKAMIAALTAYYDVSDVMECVDRVTRVVDRLGASRLIDNDTGEVITQFNKPFMRTEPGSVAPCFVADYSITVNSFVADRVKEALYE;note=Orf no. 1 see PMID: 14972552;ID=CPT-T1_056.CDS.1;Parent=CPT-T1_056.mRNA; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 40339 40342 . - . locus_tag=CPT-T1_056;regulatory_class=ribosome_binding_site;ID=CPT-T1_056.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_056.mRNA; +AY216660.2 GbkToGff gene 41020 41606 . + . locus_tag=CPT-T1_057;ID=CPT-T1_057.gene; +AY216660.2 GbkToGff mRNA 41020 41606 . + . locus_tag=CPT-T1_057;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_057.mRNA;Parent=CPT-T1_057.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 41020 41024 . + . locus_tag=CPT-T1_057;regulatory_class=ribosome_binding_site;ID=CPT-T1_057.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_057.mRNA; +AY216660.2 GbkToGff CDS 41031 41606 . + 0 locus_tag=CPT-T1_057;codon_start=1;transl_table=11;product=hypothetical protein;translation=MSSYQSDAVQAAIKAAYEKAGVTVEQRPEAKVTDVIRAACDQLYGDGENTEFTFDANKMAEAAARKSMPDADEHDVAKGAESWLLGKTDEINEKFKSSFITPIVSRHFSKIGKSVKVSVTMNDEKLRVVTISVSDEEVPVKKRRSRKKVSLADCLDSFVPDVDDLEKGDVTVSTVRDLVRQMKAHIEKCGL;note=Orf no. 77 see PMID: 14972552;ID=CPT-T1_057.CDS.1;Parent=CPT-T1_057.mRNA; +AY216660.2 GbkToGff gene 41606 41945 . + . locus_tag=CPT-T1_058;ID=CPT-T1_058.gene; +AY216660.2 GbkToGff mRNA 41606 41945 . + . locus_tag=CPT-T1_058;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_058.mRNA;Parent=CPT-T1_058.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 41606 41610 . + . locus_tag=CPT-T1_058;regulatory_class=ribosome_binding_site;ID=CPT-T1_058.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_058.mRNA; +AY216660.2 GbkToGff CDS 41619 41945 . + 0 locus_tag=CPT-T1_058;codon_start=1;transl_table=11;product=hypothetical protein;translation=MFNIKPLTEAEKQAQAKQTENIQVIADALIGKRSIKINLDTVGQSFFTKGLDKYVINVKARDLVARIQKLNNQKLKLIKVEGNMCEIENLSAPDPNKWEITDVEFIVE;note=Orf no. 76 see PMID: 14972552;ID=CPT-T1_058.CDS.1;Parent=CPT-T1_058.mRNA; +AY216660.2 GbkToGff gene 42013 42254 . + . locus_tag=CPT-T1_059;ID=CPT-T1_059.gene; +AY216660.2 GbkToGff mRNA 42013 42254 . + . locus_tag=CPT-T1_059;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_059.mRNA;Parent=CPT-T1_059.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 42013 42016 . + . locus_tag=CPT-T1_059;regulatory_class=ribosome_binding_site;ID=CPT-T1_059.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_059.mRNA; +AY216660.2 GbkToGff CDS 42024 42254 . + 0 locus_tag=CPT-T1_059;codon_start=1;transl_table=11;product=hypothetical protein;translation=MSIVKNQQAIDSTNNNRFAIFITRDNKRFAVKAVPGGYKTYMEDNGKWVRCDNLANFLVWNADLQGFDDISTLIEE;note=Orf no. 75 see PMID: 14972552;ID=CPT-T1_059.CDS.1;Parent=CPT-T1_059.mRNA; +AY216660.2 GbkToGff gene 42247 42487 . + . locus_tag=CPT-T1_060;ID=CPT-T1_060.gene; +AY216660.2 GbkToGff mRNA 42247 42487 . + . locus_tag=CPT-T1_060;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_060.mRNA;Parent=CPT-T1_060.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 42247 42251 . + . locus_tag=CPT-T1_060;regulatory_class=ribosome_binding_site;ID=CPT-T1_060.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_060.mRNA; +AY216660.2 GbkToGff CDS 42260 42487 . + 0 locus_tag=CPT-T1_060;codon_start=1;transl_table=11;product=hypothetical protein;translation=MPRYSNLTQLTRVNGHMIPAKSTHYAMGAKHGLYFKWRGQWNFTVIRNFYIRVTGDDPQSVVENSIGDNKIEVLK;note=Orf no. 74 see PMID: 14972552;ID=CPT-T1_060.CDS.1;Parent=CPT-T1_060.mRNA; +AY216660.2 GbkToGff gene 42473 42594 . + . locus_tag=CPT-T1_061;ID=CPT-T1_061.gene; +AY216660.2 GbkToGff mRNA 42473 42594 . + . locus_tag=CPT-T1_061;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_061.mRNA;Parent=CPT-T1_061.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 42473 42477 . + . locus_tag=CPT-T1_061;regulatory_class=ribosome_binding_site;ID=CPT-T1_061.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_061.mRNA; +AY216660.2 GbkToGff CDS 42484 42594 . + 0 locus_tag=CPT-T1_061;codon_start=1;transl_table=11;product=hypothetical protein;translation=MNFNIIAFWSAVWFFCVGHVVVGIVIMLLLCAGAFE;note=single transmembrane domain predicted N-in and C-out%3BOrf no. 73 see PMID: 14972552;ID=CPT-T1_061.CDS.1;Parent=CPT-T1_061.mRNA; +AY216660.2 GbkToGff gene 42580 42764 . + . locus_tag=CPT-T1_062;ID=CPT-T1_062.gene; +AY216660.2 GbkToGff mRNA 42580 42764 . + . locus_tag=CPT-T1_062;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_062.mRNA;Parent=CPT-T1_062.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 42580 42583 . + . locus_tag=CPT-T1_062;regulatory_class=ribosome_binding_site;ID=CPT-T1_062.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_062.mRNA; +AY216660.2 GbkToGff CDS 42591 42764 . + 0 locus_tag=CPT-T1_062;codon_start=1;transl_table=11;product=hypothetical protein;translation=MMRILICMMAAVAMAILVVSGCGEARDSCHETGSQVTTFVMVGNVLLPITSNEITCE;note=Orf no. 72 see PMID: 14972552;ID=CPT-T1_062.CDS.1;Parent=CPT-T1_062.mRNA; +AY216660.2 GbkToGff gene 42824 43324 . + . locus_tag=CPT-T1_063;ID=CPT-T1_063.gene; +AY216660.2 GbkToGff mRNA 42824 43324 . + . locus_tag=CPT-T1_063;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_063.mRNA;Parent=CPT-T1_063.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 42824 42827 . + . locus_tag=CPT-T1_063;regulatory_class=ribosome_binding_site;ID=CPT-T1_063.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_063.mRNA; +AY216660.2 GbkToGff CDS 42836 43324 . + 0 locus_tag=CPT-T1_063;codon_start=1;transl_table=11;product=hypothetical protein;translation=MKIKLLSNGGYKGFTRDLEADPIVVDAVKCDSSTGGYRVKVDDLVKAGVYDLDYGLSVSPVFGPADFNEKDGTMFFFDWEVKANIKPRKVRLLSNGGYPMRPGYENRTFPVIVDFIGTTDNLVYVSHEQLKAVGFVGGMNKEALCFFHRCPEPIGIECELVY;note=Orf no. 71 see PMID: 14972552;ID=CPT-T1_063.CDS.1;Parent=CPT-T1_063.mRNA; +AY216660.2 GbkToGff gene 43385 43881 . + . locus_tag=CPT-T1_064;ID=CPT-T1_064.gene; +AY216660.2 GbkToGff mRNA 43385 43881 . + . locus_tag=CPT-T1_064;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_064.mRNA;Parent=CPT-T1_064.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 43385 43388 . + . locus_tag=CPT-T1_064;regulatory_class=ribosome_binding_site;ID=CPT-T1_064.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_064.mRNA; +AY216660.2 GbkToGff CDS 43396 43881 . + 0 locus_tag=CPT-T1_064;codon_start=1;transl_table=11;product=hypothetical protein;translation=MLKLKDIQFPVVFNTISCGKITCHSKDRATDSSFNECHPSIVGNLIELHNNHNPDNIPSLPYYVEGVGPGWKVGRSIFHAAKPEIKPALQCTQIENMPLSATLKGVQLDSESWIEITATPKTIEVHDDVVILLLHYGSFKHKTVSGEISIKRGTLVRYEVK;note=Orf no. 70 see PMID: 14972552;ID=CPT-T1_064.CDS.1;Parent=CPT-T1_064.mRNA; +AY216660.2 GbkToGff gene 43870 44030 . + . locus_tag=CPT-T1_065;ID=CPT-T1_065.gene; +AY216660.2 GbkToGff mRNA 43870 44030 . + . locus_tag=CPT-T1_065;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_065.mRNA;Parent=CPT-T1_065.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 43870 43874 . + . locus_tag=CPT-T1_065;regulatory_class=ribosome_binding_site;ID=CPT-T1_065.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_065.mRNA; +AY216660.2 GbkToGff CDS 43881 44030 . + 0 locus_tag=CPT-T1_065;codon_start=1;transl_table=11;product=hypothetical protein;translation=MTAWVLIILMSKGPDHVYMESQQSCNKAREVIAENKPFGYEVKTMCVKR;note=Orf no. 69 see PMID: 14972552;ID=CPT-T1_065.CDS.1;Parent=CPT-T1_065.mRNA; +AY216660.2 GbkToGff gene 44098 44485 . + . locus_tag=CPT-T1_066;ID=CPT-T1_066.gene; +AY216660.2 GbkToGff mRNA 44098 44485 . + . locus_tag=CPT-T1_066;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_066.mRNA;Parent=CPT-T1_066.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 44098 44103 . + . locus_tag=CPT-T1_066;regulatory_class=ribosome_binding_site;ID=CPT-T1_066.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_066.mRNA; +AY216660.2 GbkToGff CDS 44111 44485 . + 0 locus_tag=CPT-T1_066;codon_start=1;transl_table=11;product=hypothetical protein;translation=MKFECISDNTKKFTVGKIYDVPTEHAEQTVALTDDTGRNRIATVTHNGEGLRWNSGGTKFATFGKKRKRTFRVNGNVAANKIHNVKPSEVDRKPALKFKEKVDLFNLAASLVLLVAAISLLSIM;note=single transmembrane domain predicted N-in and C-out%3B Orf no. 68 see PMID: 14972552;ID=CPT-T1_066.CDS.1;Parent=CPT-T1_066.mRNA; +AY216660.2 GbkToGff regulatory 44493 44526 . + . regulatory_class=terminator%2C rho-independent;ID=AY216660.2.regulatory.16; +AY216660.2 GbkToGff gene 44527 44649 . + . locus_tag=CPT-T1_067;ID=CPT-T1_067.gene; +AY216660.2 GbkToGff mRNA 44527 44649 . + . locus_tag=CPT-T1_067;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_067.mRNA;Parent=CPT-T1_067.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 44527 44530 . + . locus_tag=CPT-T1_067;regulatory_class=ribosome_binding_site;ID=CPT-T1_067.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_067.mRNA; +AY216660.2 GbkToGff CDS 44539 44649 . + 0 locus_tag=CPT-T1_067;codon_start=1;transl_table=11;product=hypothetical protein;translation=MPDFSNWNNEPPSFQELLFCLLVLTLSLKGVLWLLS;note=single transmembrane domain predicted N-out and C-in%3B Orf no. 67 see PMID: 14972552;ID=CPT-T1_067.CDS.1;Parent=CPT-T1_067.mRNA; +AY216660.2 GbkToGff gene 44625 44852 . + . locus_tag=CPT-T1_068;ID=CPT-T1_068.gene; +AY216660.2 GbkToGff mRNA 44625 44852 . + . locus_tag=CPT-T1_068;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_068.mRNA;Parent=CPT-T1_068.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 44625 44628 . + . locus_tag=CPT-T1_068;regulatory_class=ribosome_binding_site;ID=CPT-T1_068.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_068.mRNA; +AY216660.2 GbkToGff CDS 44634 44852 . + 0 locus_tag=CPT-T1_068;codon_start=1;transl_table=11;product=hypothetical protein;translation=MATIMTVEDAARDAVEGMRPNTSRIAHYYKSEVSAVQLVHEILRLPQVDSARVVTCLKNYFCITIKTNSTNC;note=Orf no. 66 see PMID: 14972552;ID=CPT-T1_068.CDS.1;Parent=CPT-T1_068.mRNA; +AY216660.2 GbkToGff gene 44898 45356 . + . locus_tag=CPT-T1_069;ID=CPT-T1_069.gene; +AY216660.2 GbkToGff mRNA 44898 45356 . + . locus_tag=CPT-T1_069;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_069.mRNA;Parent=CPT-T1_069.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 44898 44901 . + . locus_tag=CPT-T1_069;regulatory_class=ribosome_binding_site;ID=CPT-T1_069.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_069.mRNA; +AY216660.2 GbkToGff CDS 44910 45356 . + 0 locus_tag=CPT-T1_069;codon_start=1;transl_table=11;product=hypothetical protein;translation=MKHLICIEAPNDQYTLHGLGVFKGHYITAGTYDARRGDGDLMITSKEVNPYIMQNLGNNEYMAYGCNAVYKHVKIRKRVVRAFKKIAIKYWKMSKKDAGRWARNVADSYFYRNGESCYFLIDELMENYGGDFSQGSFDDWANYEISCW;note=Orf no. 65 see PMID: 14972552;ID=CPT-T1_069.CDS.1;Parent=CPT-T1_069.mRNA; +AY216660.2 GbkToGff gene 45428 45970 . + . locus_tag=CPT-T1_070;ID=CPT-T1_070.gene; +AY216660.2 GbkToGff mRNA 45428 45970 . + . locus_tag=CPT-T1_070;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_070.mRNA;Parent=CPT-T1_070.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 45428 45431 . + . locus_tag=CPT-T1_070;regulatory_class=ribosome_binding_site;ID=CPT-T1_070.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_070.mRNA; +AY216660.2 GbkToGff CDS 45440 45970 . + 0 locus_tag=CPT-T1_070;note=HHPred 99 probability structural alignment to phage T4 polynucleotide kinase Protein Data bank entry 5UJ0 over most of protein%3B Orf no. 64 see PMID: 14972552%3B InterPro domain IPR023214;codon_start=1;transl_table=11;product=polynucleotide kinase PnkP;translation=MDKITIWGQTINLFLGTRRVAIFDFDGTLSDGSGRLHLLPTKDLHLTESWSEFNRAAIFDNPIQSTIDVMNSMFAAGYHVIILTGRSDEVRYASELWLKHHGARYDYLVMRPHTDNRKDTVMKEEAVRAIGIDNILAAWDDSVNIIKKFRDLGITTYQVCEYACDSREDLNSHGVD;ID=CPT-T1_070.CDS.1;Parent=CPT-T1_070.mRNA; +AY216660.2 GbkToGff gene 45941 46451 . + . locus_tag=CPT-T1_071;ID=CPT-T1_071.gene; +AY216660.2 GbkToGff mRNA 45941 46451 . + . locus_tag=CPT-T1_071;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_071.mRNA;Parent=CPT-T1_071.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 45941 45944 . + . locus_tag=CPT-T1_071;regulatory_class=ribosome_binding_site;ID=CPT-T1_071.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_071.mRNA; +AY216660.2 GbkToGff CDS 45957 46451 . + 0 locus_tag=CPT-T1_071;note=InterPro domains IPR001471%2C IPR003615%2C and IPR016177%3B similar to phage T7 protein 3.8%3B alternative in-frame start site proposed as T1 p63a%3B Orf no. 63 see PMID: 14972552;codon_start=1;transl_table=11;product=HNH endonuclease;translation=MVSIDNKSMVRELFTYSDGVLYWKAKSSKYSRAKIGGAAGSKDKDGYIIIRVRNETRGAHRLVWIYHNGKIPDGMEVDHMDGDITNNRIENLRLVTRTINNRNQKKRSDNTTGVSGVTFMKDRGKYRAQVRNKRLGQFDTIEEAAKAVKDERDRLGLFTKRHGV;ID=CPT-T1_071.CDS.1;Parent=CPT-T1_071.mRNA; +AY216660.2 GbkToGff gene 46444 47026 . + . locus_tag=CPT-T1_072;ID=CPT-T1_072.gene; +AY216660.2 GbkToGff mRNA 46444 47026 . + . locus_tag=CPT-T1_072;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_072.mRNA;Parent=CPT-T1_072.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 46444 46447 . + . locus_tag=CPT-T1_072;regulatory_class=ribosome_binding_site;ID=CPT-T1_072.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_072.mRNA; +AY216660.2 GbkToGff CDS 46454 47026 . + 0 locus_tag=CPT-T1_072;note=InterPro domain IPR027417%3B HHPred predicted structural similarity at 99%25 probability to phage T4 DNK Protein Data Bank Entry 1DEK%3B Orf no. 62 see PMID: 14972552;codon_start=1;transl_table=11;product=deoxynucleotide kinase;translation=MKTAIILNGAPGAGKDTIGCILADTYDHVALRSFKAPMFEIARAILGETNFEYFMFLYEDRRYKEEPASILNGKSPRQFMIWISEEVIKPQFGNRFFGMRAESKVKESHSLSVFTDGGFKDEILQMIEGDIQVKLCRIHRNGCNFDNDSRDYIYLDDMIGVNGYQECDFFSVEGHPEITAQHIAATFINK;ID=CPT-T1_072.CDS.1;Parent=CPT-T1_072.mRNA; +AY216660.2 GbkToGff gene 47085 47308 . + . locus_tag=CPT-T1_073;ID=CPT-T1_073.gene; +AY216660.2 GbkToGff mRNA 47085 47308 . + . locus_tag=CPT-T1_073;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_073.mRNA;Parent=CPT-T1_073.gene; +AY216660.2 GbkToGff CDS 47099 47308 . + 0 locus_tag=CPT-T1_073;codon_start=1;transl_table=11;product=hypothetical protein;translation=MMVSTDKFFTCTKTSEVFELVHTDNGDFMHDGCDAFIEVKESDYDDGVYYNPAVNTQFFTPIEEEGEEA;note=Orf no. 61 see PMID: 14972552;ID=CPT-T1_073.CDS.1;Parent=CPT-T1_073.mRNA; +AY216660.2 GbkToGff gene 47293 47649 . + . locus_tag=CPT-T1_074;ID=CPT-T1_074.gene; +AY216660.2 GbkToGff mRNA 47293 47649 . + . locus_tag=CPT-T1_074;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_074.mRNA;Parent=CPT-T1_074.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 47293 47297 . + . locus_tag=CPT-T1_074;regulatory_class=ribosome_binding_site;ID=CPT-T1_074.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_074.mRNA; +AY216660.2 GbkToGff CDS 47305 47649 . + 0 locus_tag=CPT-T1_074;codon_start=1;transl_table=11;product=hypothetical protein;translation=MITINLSDKQAREILDTIGEQLHVKGDTAEILNQIERQLTPVSTNQAEFAAWKSERILPNIIKAWKRKHKKEINVEDLFTDELSPSNVAQYQLRYMESVCNQVLGVSFSFKGDK;note=Orf no. 60 see PMID: 14972552;ID=CPT-T1_074.CDS.1;Parent=CPT-T1_074.mRNA; +AY216660.2 GbkToGff gene 47637 47879 . + . locus_tag=CPT-T1_075;ID=CPT-T1_075.gene; +AY216660.2 GbkToGff mRNA 47637 47879 . + . locus_tag=CPT-T1_075;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_075.mRNA;Parent=CPT-T1_075.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 47637 47640 . + . locus_tag=CPT-T1_075;regulatory_class=ribosome_binding_site;ID=CPT-T1_075.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_075.mRNA; +AY216660.2 GbkToGff CDS 47649 47879 . + 0 locus_tag=CPT-T1_075;codon_start=1;transl_table=11;product=hypothetical protein;translation=MFGLSEAEWNVVKRAAKELNKFVSGMKKEDRKNDKIMIDVISTHHKKVELLIDRYKFVWTAGYIAGRVGNKEGDYE;note=Orf no. 59 see PMID: 14972552;ID=CPT-T1_075.CDS.1;Parent=CPT-T1_075.mRNA; +AY216660.2 GbkToGff gene 47864 48082 . + . locus_tag=CPT-T1_076;ID=CPT-T1_076.gene; +AY216660.2 GbkToGff mRNA 47864 48082 . + . locus_tag=CPT-T1_076;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_076.mRNA;Parent=CPT-T1_076.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 47864 47868 . + . locus_tag=CPT-T1_076;regulatory_class=ribosome_binding_site;ID=CPT-T1_076.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_076.mRNA; +AY216660.2 GbkToGff CDS 47879 48082 . + 0 locus_tag=CPT-T1_076;codon_start=1;transl_table=11;product=hypothetical protein;translation=MANLPKKGDQVRCVTSRNGNALSAGCLYDVEKVSKSKRLVFVYGDDGNLHEIDYPQDVTNGQFEIND;note=Orf no. 58 see PMID: 14972552;ID=CPT-T1_076.CDS.1;Parent=CPT-T1_076.mRNA; +AY216660.2 GbkToGff gene 48235 48408 . + . locus_tag=CPT-T1_077;ID=CPT-T1_077.gene; +AY216660.2 GbkToGff mRNA 48235 48408 . + . locus_tag=CPT-T1_077;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_077.mRNA;Parent=CPT-T1_077.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 48235 48238 . + . locus_tag=CPT-T1_077;regulatory_class=ribosome_binding_site;ID=CPT-T1_077.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_077.mRNA; +AY216660.2 GbkToGff CDS 48247 48408 . + 0 locus_tag=CPT-T1_077;codon_start=1;transl_table=11;product=hypothetical protein;translation=MQKTKDESVKIEIKVTRNGETTRYKKRLNPGEAVIGRIAGVMIKAQEDEAIQS;note=Orf no. 57 see PMID: 14972552;ID=CPT-T1_077.CDS.1;Parent=CPT-T1_077.mRNA; +AY216660.2 GbkToGff gene 48377 48574 . + . locus_tag=CPT-T1_078;ID=CPT-T1_078.gene; +AY216660.2 GbkToGff mRNA 48377 48574 . + . locus_tag=CPT-T1_078;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_078.mRNA;Parent=CPT-T1_078.gene; +AY216660.2 GbkToGff CDS 48389 48574 . + 0 locus_tag=CPT-T1_078;codon_start=1;transl_table=11;product=hypothetical protein;translation=MKRFKVKLIIRKMGMFCQSCKQSFEAELSATSQDEAITKAKKLSGANLDTHKINIELIKEI;note=alternative start codon to Orf no. 56 see PMID: 14972552;ID=CPT-T1_078.CDS.1;Parent=CPT-T1_078.mRNA; +AY216660.2 GbkToGff gene 48564 48803 . + . locus_tag=CPT-T1_079;ID=CPT-T1_079.gene; +AY216660.2 GbkToGff mRNA 48564 48803 . + . locus_tag=CPT-T1_079;Notes=mRNA feature automatically generated by Gbk to GFF conversion;ID=CPT-T1_079.mRNA;Parent=CPT-T1_079.gene; +AY216660.2 GbkToGff Shine_Dalgarno_seqeunce 48564 48568 . + . locus_tag=CPT-T1_079;regulatory_class=ribosome_binding_site;ID=CPT-T1_079.Shine_Dalgarno_seqeunce.1;Parent=CPT-T1_079.mRNA; +AY216660.2 GbkToGff CDS 48576 48803 . + 0 locus_tag=CPT-T1_079;codon_start=1;transl_table=11;product=hypothetical protein;translation=MTIFLLIIAGVIIFGAGLFAGFALVAAAIAMDAKDKTGVWLTYSPKKDQWEMTGDLAHCYSKAKTHPKGIKRRLS;note=single transmembrane domain predicted N-out and C-in%3B Orf no. 55 see PMID: 14972552;ID=CPT-T1_079.CDS.1;Parent=CPT-T1_079.mRNA;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cpt_phageqc_annotation/test-data/PhageQC_Out.gff3 Fri Jun 17 13:00:50 2022 +0000 @@ -0,0 +1,185 @@ +##gff-version 3 +AY216660.2 feature gene 25 34 . + . note=Missing RBS;ID=CPT-T1_001.gene;Name= +AY216660.2 feature gene 574 583 . + . note=Missing RBS;ID=CPT-T1_002.gene;Name= +AY216660.2 feature gene 2215 2224 . + . note=Missing RBS;ID=CPT-T1_003.gene;Name= +AY216660.2 feature gene 3481 3490 . + . note=Missing RBS;ID=CPT-T1_004.gene;Name= +AY216660.2 feature gene 4249 4258 . + . note=Missing RBS;ID=CPT-T1_005.gene;Name= +AY216660.2 feature gene 5374 5383 . + . note=Missing RBS;ID=CPT-T1_006.gene;Name= +AY216660.2 feature gene 5911 5920 . + . note=Missing RBS;ID=CPT-T1_007.gene;Name= +AY216660.2 feature gene 6769 6778 . + . note=Missing RBS;ID=CPT-T1_008.gene;Name= +AY216660.2 feature gene 7779 7788 . + . note=Missing RBS;ID=CPT-T1_009.gene;Name= +AY216660.2 feature gene 8112 8121 . + . note=Missing RBS;ID=CPT-T1_010.gene;Name= +AY216660.2 feature gene 8519 8528 . + . note=Missing RBS;ID=CPT-T1_011.gene;Name= +AY216660.2 feature gene 8882 8891 . + . note=Missing RBS;ID=CPT-T1_012.gene;Name= +AY216660.2 feature gene 9317 9326 . + . note=Missing RBS;ID=CPT-T1_013.gene;Name= +AY216660.2 feature gene 9718 9727 . + . note=Missing RBS;ID=CPT-T1_014.gene;Name= +AY216660.2 feature gene 10501 10510 . + . note=Missing RBS;ID=CPT-T1_015.gene;Name= +AY216660.2 feature gene 10501 10510 . + . note=Missing RBS;ID=CPT-T1_016.gene;Name= +AY216660.2 feature gene 11177 11186 . + . note=Missing RBS;ID=CPT-T1_017.gene;Name= +AY216660.2 feature gene 14052 14061 . + . note=Missing RBS;ID=CPT-T1_018.gene;Name= +AY216660.2 feature gene 14485 14494 . + . note=Missing RBS;ID=CPT-T1_019.gene;Name= +AY216660.2 feature gene 15264 15273 . + . note=Missing RBS;ID=CPT-T1_020.gene;Name= +AY216660.2 feature gene 15994 16003 . + . note=Missing RBS;ID=CPT-T1_021.gene;Name= +AY216660.2 feature gene 16673 16682 . + . note=Missing RBS;ID=CPT-T1_022.gene;Name= +AY216660.2 feature gene 20236 20245 . + . note=Missing RBS;ID=CPT-T1_023.gene;Name= +AY216660.2 feature gene 20541 20550 . + . note=Missing RBS;ID=CPT-T1_024.gene;Name= +AY216660.2 feature gene 21524 21533 . - . note=Missing RBS;ID=CPT-T1_025.gene;Name= +AY216660.2 feature gene 21740 21749 . + . note=Missing RBS;ID=CPT-T1_026.gene;Name= +AY216660.2 feature gene 22005 22014 . + . note=Missing RBS;ID=CPT-T1_027.gene;Name= +AY216660.2 feature gene 23114 23123 . + . note=Missing RBS;ID=CPT-T1_028.gene;Name= +AY216660.2 feature gene 23839 23848 . + . note=Missing RBS;ID=CPT-T1_029.gene;Name= +AY216660.2 feature gene 26556 26565 . - . note=Missing RBS;ID=CPT-T1_030.gene;Name= +AY216660.2 feature gene 26606 26615 . - . note=Missing RBS;ID=CPT-T1_031.gene;Name= +AY216660.2 feature gene 27591 27600 . - . note=Missing RBS;ID=CPT-T1_032.gene;Name= +AY216660.2 feature gene 28104 28113 . - . note=Missing RBS;ID=CPT-T1_033.gene;Name= +AY216660.2 feature gene 28153 28162 . + . note=Missing RBS;ID=CPT-T1_034.gene;Name= +AY216660.2 feature gene 30166 30175 . + . note=Missing RBS;ID=CPT-T1_035.gene;Name= +AY216660.2 feature gene 30654 30663 . + . note=Missing RBS;ID=CPT-T1_036.gene;Name= +AY216660.2 feature gene 31362 31371 . + . note=Missing RBS;ID=CPT-T1_037.gene;Name= +AY216660.2 feature gene 31680 31689 . + . note=Missing RBS;ID=CPT-T1_038.gene;Name= +AY216660.2 feature gene 31866 31875 . + . note=Missing RBS;ID=CPT-T1_039.gene;Name= +AY216660.2 feature gene 32084 32093 . + . note=Missing RBS;ID=CPT-T1_040.gene;Name= +AY216660.2 feature gene 32452 32461 . + . note=Missing RBS;ID=CPT-T1_041.gene;Name= +AY216660.2 feature gene 33658 33667 . + . note=Missing RBS;ID=CPT-T1_042.gene;Name= +AY216660.2 feature gene 34211 34220 . + . note=Missing RBS;ID=CPT-T1_043.gene;Name= +AY216660.2 feature gene 34510 34519 . + . note=Missing RBS;ID=CPT-T1_044.gene;Name= +AY216660.2 feature gene 34724 34733 . + . note=Missing RBS;ID=CPT-T1_045.gene;Name= +AY216660.2 feature gene 35212 35221 . + . note=Missing RBS;ID=CPT-T1_046.gene;Name= +AY216660.2 feature gene 36185 36194 . - . note=Missing RBS;ID=CPT-T1_047.gene;Name= +AY216660.2 feature gene 37761 37770 . - . note=Missing RBS;ID=CPT-T1_048.gene;Name= +AY216660.2 feature gene 38300 38309 . - . note=Missing RBS;ID=CPT-T1_049.gene;Name= +AY216660.2 feature gene 38712 38721 . - . note=Missing RBS;ID=CPT-T1_050.gene;Name= +AY216660.2 feature gene 39000 39009 . - . note=Missing RBS;ID=CPT-T1_051.gene;Name= +AY216660.2 feature gene 39228 39237 . - . note=Missing RBS;ID=CPT-T1_052.gene;Name= +AY216660.2 feature gene 39450 39459 . - . note=Missing RBS;ID=CPT-T1_053.gene;Name= +AY216660.2 feature gene 39764 39773 . - . note=Missing RBS;ID=CPT-T1_054.gene;Name= +AY216660.2 feature gene 39984 39993 . - . note=Missing RBS;ID=CPT-T1_055.gene;Name= +AY216660.2 feature gene 40348 40357 . - . note=Missing RBS;ID=CPT-T1_056.gene;Name= +AY216660.2 feature gene 41005 41014 . + . note=Missing RBS;ID=CPT-T1_057.gene;Name= +AY216660.2 feature gene 41591 41600 . + . note=Missing RBS;ID=CPT-T1_058.gene;Name= +AY216660.2 feature gene 41998 42007 . + . note=Missing RBS;ID=CPT-T1_059.gene;Name= +AY216660.2 feature gene 42232 42241 . + . note=Missing RBS;ID=CPT-T1_060.gene;Name= +AY216660.2 feature gene 42458 42467 . + . note=Missing RBS;ID=CPT-T1_061.gene;Name= +AY216660.2 feature gene 42565 42574 . + . note=Missing RBS;ID=CPT-T1_062.gene;Name= +AY216660.2 feature gene 42809 42818 . + . note=Missing RBS;ID=CPT-T1_063.gene;Name= +AY216660.2 feature gene 43370 43379 . + . note=Missing RBS;ID=CPT-T1_064.gene;Name= +AY216660.2 feature gene 43855 43864 . + . note=Missing RBS;ID=CPT-T1_065.gene;Name= +AY216660.2 feature gene 44083 44092 . + . note=Missing RBS;ID=CPT-T1_066.gene;Name= +AY216660.2 feature gene 44512 44521 . + . note=Missing RBS;ID=CPT-T1_067.gene;Name= +AY216660.2 feature gene 44610 44619 . + . note=Missing RBS;ID=CPT-T1_068.gene;Name= +AY216660.2 feature gene 44883 44892 . + . note=Missing RBS;ID=CPT-T1_069.gene;Name= +AY216660.2 feature gene 45413 45422 . + . note=Missing RBS;ID=CPT-T1_070.gene;Name= +AY216660.2 feature gene 45926 45935 . + . note=Missing RBS;ID=CPT-T1_071.gene;Name= +AY216660.2 feature gene 46429 46438 . + . note=Missing RBS;ID=CPT-T1_072.gene;Name= +AY216660.2 feature gene 47070 47079 . + . note=Missing RBS;ID=CPT-T1_073.gene;Name= +AY216660.2 feature gene 47278 47287 . + . note=Missing RBS;ID=CPT-T1_074.gene;Name= +AY216660.2 feature gene 47622 47631 . + . note=Missing RBS;ID=CPT-T1_075.gene;Name= +AY216660.2 feature gene 47849 47858 . + . note=Missing RBS;ID=CPT-T1_076.gene;Name= +AY216660.2 feature gene 48220 48229 . + . note=Missing RBS;ID=CPT-T1_077.gene;Name= +AY216660.2 feature gene 48362 48371 . + . note=Missing RBS;ID=CPT-T1_078.gene;Name= +AY216660.2 feature gene 48549 48558 . + . note=Missing RBS;ID=CPT-T1_079.gene;Name= +AY216660.2 feature gene 2185 2238 . . . note=Excessive gap%2C 54 bases; +AY216660.2 feature gene 5877 5937 . . . note=Excessive gap%2C 61 bases; +AY216660.2 feature gene 6706 6795 . . . note=Excessive gap%2C 90 bases; +AY216660.2 feature gene 10415 10527 . . . note=Excessive gap%2C 113 bases; +AY216660.2 feature gene 14433 14511 . . . note=Excessive gap%2C 79 bases; +AY216660.2 feature gene 14424 14540 . + . note=Possible gene; +AY216660.2 feature Shine_Dalgarno_sequence 14424 14433 . + . Parent=<unknown id>; +AY216660.2 feature CDS 14439 14540 . + 0 Parent=<unknown id>; +AY216660.2 feature gene 14447 14451 . - . note=Possible gene; +AY216660.2 feature Shine_Dalgarno_sequence 14452 14461 . - . Parent=<unknown id>; +AY216660.2 feature CDS 14447 14524 . - 0 Parent=<unknown id>; +AY216660.2 feature gene 16622 16698 . . . note=Excessive gap%2C 77 bases; +AY216660.2 feature gene 21507 21765 . . . note=Excessive gap%2C 259 bases; +AY216660.2 feature gene 21907 22033 . . . note=Excessive gap%2C 127 bases; +AY216660.2 feature gene 24290 24350 . . . note=Excessive gap%2C 61 bases; +AY216660.2 feature gene 24286 24390 . + . note=Possible gene; +AY216660.2 feature Shine_Dalgarno_sequence 24286 24295 . + . Parent=<unknown id>; +AY216660.2 feature CDS 24301 24390 . + 0 Parent=<unknown id>; +AY216660.2 feature gene 27574 27634 . . . note=Excessive gap%2C 61 bases; +AY216660.2 feature gene 28088 28180 . . . note=Excessive gap%2C 93 bases; +AY216660.2 feature gene 30613 30679 . . . note=Excessive gap%2C 67 bases; +AY216660.2 feature gene 30629 30718 . + . note=Possible gene; +AY216660.2 feature Shine_Dalgarno_sequence 30629 30638 . + . Parent=<unknown id>; +AY216660.2 feature CDS 30644 30718 . + 0 Parent=<unknown id>; +AY216660.2 feature gene 31642 31707 . . . note=Excessive gap%2C 66 bases; +AY216660.2 feature gene 32400 32477 . . . note=Excessive gap%2C 78 bases; +AY216660.2 feature gene 32385 32492 . + . note=Possible gene; +AY216660.2 feature Shine_Dalgarno_sequence 32385 32394 . + . Parent=<unknown id>; +AY216660.2 feature CDS 32400 32492 . + 0 Parent=<unknown id>; +AY216660.2 feature gene 33612 33683 . . . note=Excessive gap%2C 72 bases; +AY216660.2 feature gene 34167 34238 . . . note=Excessive gap%2C 72 bases; +AY216660.2 feature gene 34416 34533 . . . note=Excessive gap%2C 118 bases; +AY216660.2 feature gene 35639 35760 . . . note=Excessive gap%2C 122 bases; +AY216660.2 feature gene 35674 35678 . - . note=Possible gene; +AY216660.2 feature Shine_Dalgarno_sequence 35679 35688 . - . Parent=<unknown id>; +AY216660.2 feature CDS 35674 35754 . - 0 Parent=<unknown id>; +AY216660.2 feature gene 35674 35678 . - . note=Possible gene; +AY216660.2 feature Shine_Dalgarno_sequence 35679 35688 . - . Parent=<unknown id>; +AY216660.2 feature CDS 35674 35766 . - 0 Parent=<unknown id>; +AY216660.2 feature gene 38694 38773 . . . note=Excessive gap%2C 80 bases; +AY216660.2 feature gene 38719 38814 . + . note=Possible gene; +AY216660.2 feature Shine_Dalgarno_sequence 38719 38728 . + . Parent=<unknown id>; +AY216660.2 feature CDS 38734 38814 . + 0 Parent=<unknown id>; +AY216660.2 feature gene 38725 38814 . + . note=Possible gene; +AY216660.2 feature Shine_Dalgarno_sequence 38725 38734 . + . Parent=<unknown id>; +AY216660.2 feature CDS 38740 38814 . + 0 Parent=<unknown id>; +AY216660.2 feature gene 39212 39288 . . . note=Excessive gap%2C 77 bases; +AY216660.2 feature gene 40331 41030 . . . note=Excessive gap%2C 700 bases; +AY216660.2 feature gene 40416 40420 . - . note=Possible gene; +AY216660.2 feature Shine_Dalgarno_sequence 40421 40430 . - . Parent=<unknown id>; +AY216660.2 feature CDS 40416 40496 . - 0 Parent=<unknown id>; +AY216660.2 feature gene 40416 40420 . - . note=Possible gene; +AY216660.2 feature Shine_Dalgarno_sequence 40421 40430 . - . Parent=<unknown id>; +AY216660.2 feature CDS 40416 40511 . - 0 Parent=<unknown id>; +AY216660.2 feature gene 40416 40420 . - . note=Possible gene; +AY216660.2 feature Shine_Dalgarno_sequence 40421 40430 . - . Parent=<unknown id>; +AY216660.2 feature CDS 40416 40541 . - 0 Parent=<unknown id>; +AY216660.2 feature gene 40416 40420 . - . note=Possible gene; +AY216660.2 feature Shine_Dalgarno_sequence 40421 40430 . - . Parent=<unknown id>; +AY216660.2 feature CDS 40416 40559 . - 0 Parent=<unknown id>; +AY216660.2 feature gene 40416 40420 . - . note=Possible gene; +AY216660.2 feature Shine_Dalgarno_sequence 40421 40430 . - . Parent=<unknown id>; +AY216660.2 feature CDS 40416 40595 . - 0 Parent=<unknown id>; +AY216660.2 feature gene 40416 40420 . - . note=Possible gene; +AY216660.2 feature Shine_Dalgarno_sequence 40421 40430 . - . Parent=<unknown id>; +AY216660.2 feature CDS 40416 40637 . - 0 Parent=<unknown id>; +AY216660.2 feature gene 40817 40921 . + . note=Possible gene; +AY216660.2 feature Shine_Dalgarno_sequence 40817 40826 . + . Parent=<unknown id>; +AY216660.2 feature CDS 40832 40921 . + 0 Parent=<unknown id>; +AY216660.2 feature gene 41946 42023 . . . note=Excessive gap%2C 78 bases; +AY216660.2 feature gene 42765 42835 . . . note=Excessive gap%2C 71 bases; +AY216660.2 feature gene 43325 43395 . . . note=Excessive gap%2C 71 bases; +AY216660.2 feature gene 44031 44110 . . . note=Excessive gap%2C 80 bases; +AY216660.2 feature gene 44486 44538 . . . note=Excessive gap%2C 53 bases; +AY216660.2 feature gene 44853 44909 . . . note=Excessive gap%2C 57 bases; +AY216660.2 feature gene 45357 45439 . . . note=Excessive gap%2C 83 bases; +AY216660.2 feature gene 45368 45372 . - . note=Possible gene; +AY216660.2 feature Shine_Dalgarno_sequence 45373 45382 . - . Parent=<unknown id>; +AY216660.2 feature CDS 45368 45445 . - 0 Parent=<unknown id>; +AY216660.2 feature gene 45368 45372 . - . note=Possible gene; +AY216660.2 feature Shine_Dalgarno_sequence 45373 45382 . - . Parent=<unknown id>; +AY216660.2 feature CDS 45368 45463 . - 0 Parent=<unknown id>; +AY216660.2 feature gene 45368 45372 . - . note=Possible gene; +AY216660.2 feature Shine_Dalgarno_sequence 45373 45382 . - . Parent=<unknown id>; +AY216660.2 feature CDS 45368 45466 . - 0 Parent=<unknown id>; +AY216660.2 feature gene 45368 45372 . - . note=Possible gene; +AY216660.2 feature Shine_Dalgarno_sequence 45373 45382 . - . Parent=<unknown id>; +AY216660.2 feature CDS 45368 45475 . - 0 Parent=<unknown id>; +AY216660.2 feature gene 45368 45372 . - . note=Possible gene; +AY216660.2 feature Shine_Dalgarno_sequence 45373 45382 . - . Parent=<unknown id>; +AY216660.2 feature CDS 45368 45478 . - 0 Parent=<unknown id>; +AY216660.2 feature gene 45368 45372 . - . note=Possible gene; +AY216660.2 feature Shine_Dalgarno_sequence 45373 45382 . - . Parent=<unknown id>; +AY216660.2 feature CDS 45368 45481 . - 0 Parent=<unknown id>; +AY216660.2 feature gene 47027 47098 . . . note=Excessive gap%2C 72 bases; +AY216660.2 feature gene 48083 48246 . . . note=Excessive gap%2C 164 bases; +AY216660.2 feature gene 48086 48090 . - . note=Possible gene; +AY216660.2 feature Shine_Dalgarno_sequence 48091 48100 . - . Parent=<unknown id>; +AY216660.2 feature CDS 48086 48169 . - 0 Parent=<unknown id>; +AY216660.2 feature gene 48160 48164 . - . note=Possible gene; +AY216660.2 feature Shine_Dalgarno_sequence 48165 48174 . - . Parent=<unknown id>; +AY216660.2 feature CDS 48160 48255 . - 0 Parent=<unknown id>; +AY216660.2 feature gene 10528 10844 . . . note=Excessive Overlap;ID=CPT-T1_015.gene;Name= +AY216660.2 feature gene 26447 26536 . . . note=Excessive Overlap;ID=CPT-T1_030.gene;Name= +AY216660.2 feature gene 32112 32166 . . . note=Excessive Overlap;ID=CPT-T1_039.gene;Name=
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cpt_phageqc_annotation/test-data/PhageQC_Out.html Fri Jun 17 13:00:50 2022 +0000 @@ -0,0 +1,1142 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <meta name="description" content=""> + <meta name="author" content=""> + <title>Phage QC on AY216660.2 - 76</title> + <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css"> + <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap-theme.min.css"> + + <style type="text/css"> +/* + * Base structure + */ + +/* Move down content because we have a fixed navbar that is 50px tall */ +body { + padding-top: 50px; +} + +h3:before { + display: block; + content: " "; + margin-top: -50px; + height: 50px; + visibility: hidden; +} + +/* + * Global add-ons + */ + +.sub-header { + padding-bottom: 10px; + border-bottom: 1px solid #eee; +} + +/* + * Top navigation + * Hide default border to remove 1px line. + */ +.navbar-fixed-top { + border: 0; +} + +/* + * Sidebar + */ + +/* Hide for mobile, show later */ +.sidebar { + display: none; +} +@media (min-width: 768px) { + .sidebar { + position: fixed; + top: 51px; + bottom: 0; + left: 0; + z-index: 1000; + display: block; + padding: 20px; + overflow-x: hidden; + overflow-y: auto; /* Scrollable contents if viewport is shorter than content. */ + background-color: #f5f5f5; + border-right: 1px solid #eee; + } +} + +/* Sidebar navigation */ +.nav-sidebar { + margin-right: -21px; /* 20px padding + 1px border */ + margin-bottom: 20px; + margin-left: -20px; +} +.nav-sidebar > li > a { + padding-right: 20px; + padding-left: 20px; +} +.nav-sidebar > .active > a, +.nav-sidebar > .active > a:hover, +.nav-sidebar > .active > a:focus { + color: #fff; + background-color: #428bca; +} + + +/* + * Main content + */ + +.main { + padding: 20px; +} +@media (min-width: 768px) { + .main { + padding-right: 40px; + padding-left: 40px; + } +} +.main .page-header { + margin-top: 0; +} + + +/* + * Placeholder dashboard ideas + */ + +.placeholders { + margin-bottom: 30px; + text-align: center; +} +.placeholders h4 { + margin-bottom: 0; +} +.placeholder { + margin-bottom: 20px; +} +.placeholder img { + display: inline-block; + border-radius: 50%; +} + +td.moron { + font-size: 150%; + padding: 0px; + color: gray; +} +.strand_emph { + text-decoration: underline; + color: black; +} + + </style> + <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> + <!--[if lt IE 9]> + <script src="//oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> + <script src="//oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> + <![endif]--> + </head> + <body> + + <nav class="navbar navbar-inverse navbar-fixed-top"> + <div class="container-fluid"> + <div class="navbar-header"> + <a class="navbar-brand" href="#">Phage QC on AY216660.2</a> + </div> + </div> + </nav> + + <div class="container-fluid"> + <div class="row"> + <div class="col-sm-3 col-md-2 sidebar"> + <ul class="nav nav-sidebar"> + <li><a href="#main"><b>Overview</b></a></li> + <li><a href="#bad_gene_starts"><b>Bad Gene Starts</b></a></li> + <li><a href="#missing_rbs"><small>Missing RBS</small></a></li> + <li><a href="#weird_starts"><small>Unusual Start Codons</small></a></li> + <li><a href="#excessive_gaps"><small>Excessive Gaps</small></a></li> + <li><a href="#excessive_overlap"><small>Excessive Overlaps</small></a></li> + <!--<li><a href="#coding_density"><small>Coding Density</small></a></li>--> + <li><a href="#antisense"><b>Antisense Genes</b></a></li> + <li><a href="#morons"><small>Possible Morons</small></a></li> + <li><a href="#annotations"><b>Annotation Issues</b></a></li> + <li><a href="#missing_product"><small>Missing Product Tags</small></a></li> + </ul> + </div> + <div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main" id="main"> + <div class="jumbotron"> + <div class="row"> + <div class="col-sm-7"> + <h1>Phage AY216660.2</h1> + <!--<h2>Score: 76/100</h2>--> + </div> + <!--<div class="col-sm-5"> + <table class="table table-striped"> + <thead> + <tr> + <th>Section</th> + <th>Score</th> + </tr> + </thead> + <tbody> + <tr><td>Missing RBS</td><td>0%</td></tr> + <tr><td>Excessive Gaps</td><td>76%</td></tr> + <tr><td>Excessive Overlap</td><td>76%</td></tr> + <tr><td>Coding Density Score</td><td>99%</td></tr> + <tr><td>Possible Morons</td><td>98%</td></tr> + <tr><td>Missing Product Tags</td><td>100%</td></tr> + </tbody> + </table> + </div>--> + </div> + </div> + + <h2 class="sub-header" id="bad_gene_starts">Gene Starts</h2> + <h3 id="missing_rbs">Genes missing RBS <small>0 / 79</small></h3> + <p>The following genes have issues with their RBS.</p> + <p> + Since you have not annotated any possible RBSs, this does not count off from your overall score. + </p> + <div class="table-responsive"> + <table class="table table-striped"> + <thead> + <tr> + <th>Feature Type</th> + <th>ID</th> + <th>Location</th> + <th>Error</th> + <th>Upstream (-15 .. -5)</th> + </tr> + </thead> + <tbody> + <tr> + <td>gene</td> + <td>CPT-T1_001.gene</td> + <td>40..576 [1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">taaatgttaa</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_002.gene</td> + <td>589..2184 [1]</td> + <td>Unannotated but valid RBS</td> + <td><span style="font-family:monospace">taacttt AGG </span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_003.gene</td> + <td>2230..3522 [1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">acggcccttt</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_004.gene</td> + <td>3496..4273 [1]</td> + <td>Unannotated but valid RBS</td> + <td><span style="font-family:monospace">cc GGAG ccgg</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_005.gene</td> + <td>4264..5388 [1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">tccagacttt</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_006.gene</td> + <td>5389..5876 [1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">agcaaagtaa</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_007.gene</td> + <td>5926..6705 [1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">tagtcctttt</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_008.gene</td> + <td>6784..7755 [1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">ttttttatta</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_009.gene</td> + <td>7794..8093 [1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">gtcccttttt</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_010.gene</td> + <td>8127..8548 [1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">agcgcctttt</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_011.gene</td> + <td>8534..8919 [1]</td> + <td>Unannotated but valid RBS</td> + <td><span style="font-family:monospace">atgac AGGA c</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_012.gene</td> + <td>8897..9355 [1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">atcgtccagt</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_013.gene</td> + <td>9332..9743 [1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">gcaatcaagc</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_014.gene</td> + <td>9733..10414 [1]</td> + <td>Unannotated but valid RBS</td> + <td><span style="font-family:monospace">tac GAG taga</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_015.gene</td> + <td>10516..10845 [1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">tgctatcaac</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_016.gene</td> + <td>10516..11162 [1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">tgctatcaac</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_017.gene</td> + <td>11192..14076 [1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">gttttttcgt</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_018.gene</td> + <td>14067..14432 [1]</td> + <td>Unannotated but valid RBS</td> + <td><span style="font-family:monospace">cattc AGGA a</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_019.gene</td> + <td>14500..15294 [1]</td> + <td>Unannotated but valid RBS</td> + <td><span style="font-family:monospace">gttgc AGGT a</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_020.gene</td> + <td>15279..16025 [1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">tgtcgcttca</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_021.gene</td> + <td>16009..16621 [1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">taatcgttcg</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_022.gene</td> + <td>16688..20217 [1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">ataaatagca</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_023.gene</td> + <td>20251..20568 [1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">atgccctttt</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_024.gene</td> + <td>20556..21257 [1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">cttaatagca</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_025.gene</td> + <td>21279..21518 [-1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">aatcacacta</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_026.gene</td> + <td>21755..21906 [1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">tgtatatcgt</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_027.gene</td> + <td>22020..23098 [1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">attcatcgta</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_028.gene</td> + <td>23129..23820 [1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">aaacaaataa</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_029.gene</td> + <td>23854..24289 [1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">tcgcccataa</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_030.gene</td> + <td>24351..26550 [-1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">cgtgctattt</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_031.gene</td> + <td>26447..26600 [-1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">tgcccattgc</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_032.gene</td> + <td>26638..27585 [-1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">cgcgtttttt</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_033.gene</td> + <td>27635..28098 [-1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">gcaaaaagtg</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_034.gene</td> + <td>28168..30199 [1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">gttacaacga</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_035.gene</td> + <td>30181..30612 [1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">caaagacttc</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_036.gene</td> + <td>30669..31393 [1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">atctcaccaa</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_037.gene</td> + <td>31377..31641 [1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">aaaacaaacg</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_038.gene</td> + <td>31695..31917 [1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">tcatagaaac</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_039.gene</td> + <td>31881..32167 [1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">cttcatctct</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_040.gene</td> + <td>32099..32399 [1]</td> + <td>Unannotated but valid RBS</td> + <td><span style="font-family:monospace"> GAG ttttacc</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_041.gene</td> + <td>32467..33611 [1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">tttcattatc</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_042.gene</td> + <td>33673..34166 [1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">ttttatagaa</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_043.gene</td> + <td>34226..34415 [1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">accacatcga</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_044.gene</td> + <td>34525..34749 [1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">gttcaaaaaa</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_045.gene</td> + <td>34739..35237 [1]</td> + <td>Unannotated but valid RBS</td> + <td><span style="font-family:monospace"> AGG cgcttaa</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_046.gene</td> + <td>35227..35638 [1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">acgcatattg</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_047.gene</td> + <td>35761..36179 [-1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">caatcctcga</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_048.gene</td> + <td>36173..37755 [-1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">tcacgccgtc</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_049.gene</td> + <td>37741..38294 [-1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">gacggcacaa</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_050.gene</td> + <td>38277..38706 [-1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">tcaagataac</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_051.gene</td> + <td>38774..38994 [-1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">tttacattaa</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_052.gene</td> + <td>38987..39222 [-1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">taccaaacaa</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_053.gene</td> + <td>39289..39444 [-1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">ggcatatcaa</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_054.gene</td> + <td>39429..39758 [-1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">tatcctgact</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_055.gene</td> + <td>39766..39978 [-1]</td> + <td>Unannotated but valid RBS</td> + <td><span style="font-family:monospace">tagc GGA tcg</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_056.gene</td> + <td>39959..40342 [-1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">acatcaacag</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_057.gene</td> + <td>41020..41606 [1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">tgtatattga</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_058.gene</td> + <td>41606..41945 [1]</td> + <td>Unannotated but valid RBS</td> + <td><span style="font-family:monospace">aaaatgt GGA </span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_059.gene</td> + <td>42013..42254 [1]</td> + <td>Unannotated but valid RBS</td> + <td><span style="font-family:monospace">ac GAG atacc</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_060.gene</td> + <td>42247..42487 [1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">tcagcacttt</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_061.gene</td> + <td>42473..42594 [1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">ggcgacaaca</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_062.gene</td> + <td>42580..42764 [1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">ttgctactgt</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_063.gene</td> + <td>42824..43324 [1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">ccatcgacaa</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_064.gene</td> + <td>43385..43881 [1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">acatcaacca</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_065.gene</td> + <td>43870..44030 [1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">actcttgtcc</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_066.gene</td> + <td>44098..44485 [1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">gcacgacaac</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_067.gene</td> + <td>44527..44649 [1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">gttccccttt</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_068.gene</td> + <td>44625..44852 [1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">gacattatct</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_069.gene</td> + <td>44898..45356 [1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">cctacaccaa</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_070.gene</td> + <td>45428..45970 [1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">ttaagcaacc</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_071.gene</td> + <td>45941..46451 [1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">gcctgtgata</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_072.gene</td> + <td>46444..47026 [1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">tcacaaaaag</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_073.gene</td> + <td>47085..47308 [1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">ctcatcgaca</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_074.gene</td> + <td>47293..47649 [1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">cccgatcgaa</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_075.gene</td> + <td>47637..47879 [1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">aagtttttca</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_076.gene</td> + <td>47864..48082 [1]</td> + <td>Unannotated but valid RBS</td> + <td><span style="font-family:monospace">cgt AGGT aac</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_077.gene</td> + <td>48235..48408 [1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">gcggcaacaa</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_078.gene</td> + <td>48377..48574 [1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">ctggcgttat</span></td> + </tr> + <tr> + <td>gene</td> + <td>CPT-T1_079.gene</td> + <td>48564..48803 [1]</td> + <td>No RBS annotated, None found</td> + <td><span style="font-family:monospace">atattgaatt</span></td> + </tr> + </tbody> + </table> + </div> + + <h3 id="weird_starts">Start Codon Usage</h3> + <p>This section covers genes with unusual start codons</p> + <div class="table-responsive"> + <table class="table table-striped"> + <thead> + <tr> + <th>Start Codon</th> + <th>Count</th> + </tr> + </thead> + <tbody> + <tr><td>ATG</td><td>74</td></tr> + <tr><td>GTG</td><td>3</td></tr> + <tr><td>TTG</td><td>2</td></tr> + </tbody> + </table> + </div> + + <div class="table-responsive"> + <table class="table table-striped"> + <thead> + <tr> + <th>Feature Type</th> + <th>ID</th> + <th>Location</th> + <th>Error</th> + </tr> + </thead> + <tbody> + </tbody> + </table> + </div> + + <h3 id="excessive_gaps">Intergenic Gaps</h3> + <p>Phage genomes are under pressure to maintain high coding density. Large intergenic gaps may be a sign of incorrect gene starts or missing genes.</p> + <div class="table-responsive"> + <table class="table table-striped"> + <thead> + <tr> + <th>Region</th> + <th>Size</th> + <th>Bounding Gene Transcription Direction</th> + <th>Message</th> + </tr> + </thead> + <tbody> + <tr> + <td>2184 .. 2238</td> + <td>54</td> + <td>→ →</td> + <td> + </td> + </tr> + <tr> + <td>5876 .. 5937</td> + <td>61</td> + <td>→ →</td> + <td> + </td> + </tr> + <tr> + <td>6705 .. 6795</td> + <td>90</td> + <td>→ →</td> + <td> + </td> + </tr> + <tr> + <td>10414 .. 10527</td> + <td>113</td> + <td>→ →</td> + <td> + </td> + </tr> + <tr> + <td>14432 .. 14511</td> + <td>79</td> + <td>→ →</td> + <td> + 2 ORFs found in this region + </td> + </tr> + <tr> + <td>16621 .. 16698</td> + <td>77</td> + <td>→ →</td> + <td> + </td> + </tr> + <tr> + <td>21506 .. 21765</td> + <td>259</td> + <td>→ →</td> + <td> + </td> + </tr> + <tr> + <td>21906 .. 22033</td> + <td>127</td> + <td>→ →</td> + <td> + </td> + </tr> + <tr> + <td>24289 .. 24350</td> + <td>61</td> + <td>→ →</td> + <td> + 1 ORFs found in this region + </td> + </tr> + <tr> + <td>27573 .. 27634</td> + <td>61</td> + <td>→ →</td> + <td> + </td> + </tr> + <tr> + <td>28087 .. 28180</td> + <td>93</td> + <td>→ →</td> + <td> + </td> + </tr> + <tr> + <td>30612 .. 30679</td> + <td>67</td> + <td>→ →</td> + <td> + 1 ORFs found in this region + </td> + </tr> + <tr> + <td>31641 .. 31707</td> + <td>66</td> + <td>→ →</td> + <td> + </td> + </tr> + <tr> + <td>32399 .. 32477</td> + <td>78</td> + <td>→ →</td> + <td> + 1 ORFs found in this region + </td> + </tr> + <tr> + <td>33611 .. 33683</td> + <td>72</td> + <td>→ →</td> + <td> + </td> + </tr> + <tr> + <td>34166 .. 34238</td> + <td>72</td> + <td>→ →</td> + <td> + </td> + </tr> + <tr> + <td>34415 .. 34533</td> + <td>118</td> + <td>→ →</td> + <td> + </td> + </tr> + <tr> + <td>35638 .. 35760</td> + <td>122</td> + <td>→ →</td> + <td> + 2 ORFs found in this region + </td> + </tr> + <tr> + <td>38693 .. 38773</td> + <td>80</td> + <td>→ →</td> + <td> + 2 ORFs found in this region + </td> + </tr> + <tr> + <td>39211 .. 39288</td> + <td>77</td> + <td>→ →</td> + <td> + </td> + </tr> + <tr> + <td>40330 .. 41030</td> + <td>700</td> + <td>→ →</td> + <td> + 7 ORFs found in this region + </td> + </tr> + <tr> + <td>41945 .. 42023</td> + <td>78</td> + <td>→ →</td> + <td> + </td> + </tr> + <tr> + <td>42764 .. 42835</td> + <td>71</td> + <td>→ →</td> + <td> + </td> + </tr> + <tr> + <td>43324 .. 43395</td> + <td>71</td> + <td>→ →</td> + <td> + </td> + </tr> + <tr> + <td>44030 .. 44110</td> + <td>80</td> + <td>→ →</td> + <td> + </td> + </tr> + <tr> + <td>44485 .. 44538</td> + <td>53</td> + <td>→ →</td> + <td> + </td> + </tr> + <tr> + <td>44852 .. 44909</td> + <td>57</td> + <td>→ →</td> + <td> + </td> + </tr> + <tr> + <td>45356 .. 45439</td> + <td>83</td> + <td>→ →</td> + <td> + 6 ORFs found in this region + </td> + </tr> + <tr> + <td>47026 .. 47098</td> + <td>72</td> + <td>→ →</td> + <td> + </td> + </tr> + <tr> + <td>48082 .. 48246</td> + <td>164</td> + <td>→ →</td> + <td> + 2 ORFs found in this region + </td> + </tr> + </tbody> + </table> + </div> + + <h3 id="excessive_overlap">Overlapping Genes </h3> + <p>Large gene overlaps may indicate an incorrect gene start or miscalled gene.</p> + <div class="table-responsive"> + <table class="table table-striped"> + <thead> + <tr> + <th>Feature A</th> + <th>Feature B</th> + <th>Shared Region</th> + <th>Overlap Length</th> + </tr> + </thead> + <tbody> + <tr> + <td>CPT-T1_015.gene ([10516:10845](+))</td> + <td>CPT-T1_016.gene ([10516:11162](+))</td> + <td>10527..10844</td> + <td>317 bp</td> + </tr> + <tr> + <td>CPT-T1_030.gene ([24351:26550](-))</td> + <td>CPT-T1_031.gene ([26447:26600](-))</td> + <td>26446..26536</td> + <td>90 bp</td> + </tr> + <tr> + <td>CPT-T1_039.gene ([31881:32167](+))</td> + <td>CPT-T1_040.gene ([32099:32399](+))</td> + <td>32111..32166</td> + <td>55 bp</td> + </tr> + </tbody> + </table> + </div> + <!--<h3 id="coding_density">Coding Density Issues <small>99 / 100</small></h3> + <div class="table-responsive"> + <p> + You have a coding density of 93 which scores + 99 / 100. Most genomes should be in the 90% to + 100% coding density range + </p> + </div>--> + + <h2 class="sub-header" id="antisense">Antisense Genes</h2> + <h3 id="morons">Possible Morons <small>78 / 79 (Doesn't count towards score)</small></h3> + <div class="table-responsive"> + <table class="table table-striped"> + <thead> + <tr> + <th>Feature</th> + <th>RBS</th> + <th>Surrounding Features</th> + </tr> + </thead> + <tbody> + <tr> + <td>CPT-T1_025.gene</td> + <td>No RBS Available</td> + <td class="moron"> + → + → + <span class="strand_emph">←</span> + → + → + </div> + </td> + </tr> + </tbody> + </table> + </div> + + + <h2 class="sub-header" id="annotations">Annotation Issues</h2> + <h3 id="missing_product">Missing Product Tags <small>79 / 79</small></h3> + <div class="table-responsive"> + <table class="table table-striped"> + <thead> + <tr> + <th>Feature</th> + <th>Qualifiers</th> + </tr> + </thead> + <tbody> + </tbody> + </table> + </div> + + + + + + </div> + </div> + </div> + + + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script> + </body> +</html>