Skip to content

Commit

Permalink
fix #350 (#354)
Browse files Browse the repository at this point in the history
* fix indentation

* remove verbosity option from the help, it is now handled by the config

* add get_uniq_id function to make unique ID on the fly for spread features that can shre identical IDs

* add splice3 and splice5 level3 features

* fix #350 / use push in infosequential instead of omniscient for Push-L3-omiscient-3: level3 - Use Unique ID even for CDS to avoid confusion in location and level3 checks - remove strand when cloning L3 to create a l2

---------

Co-authored-by: Jacques Dainat <jacques.dainat@ird.fr>
  • Loading branch information
Juke34 and Juke34 committed Apr 25, 2023
1 parent f07ca0b commit 02d2023
Show file tree
Hide file tree
Showing 12 changed files with 1,982 additions and 1,929 deletions.
5 changes: 0 additions & 5 deletions bin/agat_convert_sp_gxf2gxf.pl
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
my $config = get_agat_config();
my $start_run = time();
my $opt_gfffile;
my $opt_verbose = 1;
my $opt_output;
my $opt_help;

Expand Down Expand Up @@ -99,10 +98,6 @@ =head1 OPTIONS
String - Input GTF/GFF file. Compressed file with .gz extension is accepted.
=item B<-v>
Integer - Verbose option. To modify verbosity. Default is 1. 0 is quiet, 2 and 3 are increasing verbosity.
=item B<-o> or B<--output>
String - Output GFF file. If no output file is specified, the output will be
Expand Down
56 changes: 31 additions & 25 deletions lib/AGAT/OmniscientI.pm
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ use Exporter;
use Term::ProgressBar;
use AGAT::AGAT;
use AGAT::OmniscientTool;
use AGAT::OmniscientO;
use AGAT::Levels;
use AGAT::Utilities;
use AGAT::BioperlGFF;
Expand Down Expand Up @@ -448,7 +449,10 @@ sub slurp_gff3_file_JD {
dual_print ($log, file_text_line({ string => " done in ".(time() - $previous_time)." seconds", char => "-" }), $verbose );
$check_cpt++; $previous_time = time();
}

my $out =prepare_gffout();
print_omniscient( {omniscient => \%omniscient,
output => $out
} );
if( $config->{check_l2_linked_to_l3} ) {
#Check relationship between l3 and l2
dual_print ($log, file_text_line({ string => "Check$check_cpt: l2 linked to l3", char => "-", prefix => "\n" }), $verbose );
Expand Down Expand Up @@ -690,9 +694,9 @@ sub manage_one_feature{
# get Parent #
#GFF case
if($feature->has_tag('Parent')){
$parent = $feature->_tag_value('Parent');
$locusTAGvalue = $parent;
_save_common_tag_value_top_feature($feature, $locusTAG_uniq, 'level2');
$parent = $feature->_tag_value('Parent');
$locusTAGvalue = $parent;
_save_common_tag_value_top_feature($feature, $locusTAG_uniq, 'level2');
}

#GTF case
Expand Down Expand Up @@ -874,7 +878,7 @@ sub manage_one_feature{
#######################

# case were locus already met before (feature are spread within the file), we link the L3 to the last l2 of this locus.
if( exists_keys($locusTAG_uniq, ('level2', lc($locusTAGvalue) ) ) ){
if( $locusTAGvalue and exists_keys($locusTAG_uniq, ('level2', lc($locusTAGvalue) ) ) ){
dual_print ($log, "Complex case L3 1 !!!\n", $verbose) if ($debug);
$last_l2_f = @{$locusTAG_uniq->{'level2'}{lc($locusTAGvalue)}}[$#{$locusTAG_uniq->{'level2'}{lc($locusTAGvalue)}}];
$l2_id = $last_l2_f->_tag_value('ID');
Expand Down Expand Up @@ -920,7 +924,6 @@ sub manage_one_feature{
# We don't play this game only if we decided finally to take the same parent
# value as previous feature
if ($play_this_game){

create_or_replace_tag($feature,'Parent',$l2_id); #modify Parent To keep only one

#############
Expand Down Expand Up @@ -954,10 +957,9 @@ sub manage_one_feature{
$last_l1_f->primary_tag('gene');
}

#push( @{$infoSequential->{'locus'}{lc($l1_id)}{lc($l2_id)}{'level3'}}, $feature );
#$infoSequential->{'id'}{lc($l2_id)} = $l2_id;
push( @{$infoSequential->{'locus'}{lc($l1_id)}{lc($l2_id)}{'level3'}}, $feature );
$infoSequential->{'id'}{lc($l2_id)} = $l2_id;
dual_print ($log, "::::::::::Push-L3-omiscient-3: level3 ".$primary_tag." || ".lc($l2_id)." == ".$feature->gff_string."\n", $verbose) if ($debug);
push (@{$omniscient->{"level3"}{$primary_tag}{lc($l2_id)}}, $feature);
return $l2_id, $last_l1_f, $last_l2_f, $feature, $feature, $lastL1_new; #### STOP HERE AND RETURN
}
}
Expand Down Expand Up @@ -1868,14 +1870,14 @@ sub _check_all_level3_locations{

foreach my $type_l3 (keys %{$hash_omniscient->{'level3'}}){
foreach my $id_l2 (keys %{$hash_omniscient->{'level3'}{$type_l3}}){
if(! exists_keys($hash_omniscient,('other','level', 'skip_merge_l3', $type_l3) ) ){
if( exists_keys($hash_omniscient,('level3', $type_l3, $id_l2) ) ){
#CONDITION ? EVALUATE_IF_CONDITION_WAS_TRUE : EVALUATE_IF_CONDITION_WAS_FALSE
my $method;
exists_keys($hash_omniscient,('other', 'level', 'spread', $type_l3) ) ? $method = "adjacent" : $method = "all";
$nb_merged = merge_features( $hash_omniscient, 'level3', $type_l3, $id_l2, $method, $log);
}
}
if(! exists_keys($hash_omniscient,('other','level', 'skip_merge_l3', $type_l3) ) ){
if( exists_keys($hash_omniscient,('level3', $type_l3, $id_l2) ) ){
#CONDITION ? EVALUATE_IF_CONDITION_WAS_TRUE : EVALUATE_IF_CONDITION_WAS_FALSE
my $method;
exists_keys($hash_omniscient,('other', 'level', 'spread', $type_l3) ) ? $method = "adjacent" : $method = "all";
$nb_merged = merge_features( $hash_omniscient, 'level3', $type_l3, $id_l2, $method, $log);
}
}
}
if($nb_merged){
$resume_cases{$type_l3}+=$nb_merged;
Expand Down Expand Up @@ -2083,8 +2085,8 @@ sub _check_exons{
if(! $feature_example){
$feature_example=$l3_feature;
}

push @{$list_location_NoExon_tmp}, [[$l3_feature->_tag_value('ID')] ,int($l3_feature->start), int($l3_feature->end)]; #list of all feature that has been checked in overlap mode
my $IDunique = get_uniq_id($hash_omniscient, $l3_feature); # be safe in case of spread feature that might have same ID
push @{$list_location_NoExon_tmp}, [[$IDunique] ,int($l3_feature->start), int($l3_feature->end)]; #list of all feature that has been checked in overlap mode
}
}
}
Expand Down Expand Up @@ -2575,19 +2577,20 @@ sub merge_features{
# ==========
# ========= <-
# To avoid rare case like this one we need to skip consumed feature that can be not consecutive.
if( exists_keys( \%skip_because_consumed, (lc($l3_feature->_tag_value("ID"))) ) ){
my $IDunique = get_uniq_id($hash_omniscient, $l3_feature); # to be safe with spread feature sharing same ID
if( exists_keys( \%skip_because_consumed, (lc($IDunique)) ) ){
next;
}

foreach my $l3_feature_next (@sorted_features){

my $IDunique_next = get_uniq_id($hash_omniscient, $l3_feature_next);# to be safe with spread feature sharing same ID
#Check if adjacent
if ($method eq "adjacent"){
if ( $l3_feature->end()+1 == $l3_feature_next->start() ){ #locations are consecutives consecutive
my $message = "Features adjacents we merge them:\n".$l3_feature->gff_string()."\n".$l3_feature_next->gff_string()."\n";
dual_print($log, $message, 0); #print log only
$l3_feature->end($l3_feature_next->end());
$skip_because_consumed{lc($l3_feature_next->_tag_value("ID"))}++; # Save consumed feature ID
$l3_feature->end($l3_feature_next->end()) if ($l3_feature_next->end() > $l3_feature->end());
$skip_because_consumed{lc($IDunique_next)}++; # Save consumed feature ID
$modification_occured++;
}
#if after we stop
Expand All @@ -2599,8 +2602,8 @@ sub merge_features{
if ( ($l3_feature_next->start() <= $l3_feature->end()+1) and ($l3_feature_next->end()+1 >= $l3_feature->start() ) ){ #it overlaps or are consecutive/adjacent
my $message = "Features adjacents we merge them:\n".$l3_feature->gff_string()."\n".$l3_feature_next->gff_string()."\n";
dual_print($log, $message, 0); #print log only
$l3_feature->end($l3_feature_next->end());
$skip_because_consumed{lc($l3_feature_next->_tag_value("ID"))}++; # Save consumed feature ID
$l3_feature->end($l3_feature_next->end()) if ($l3_feature_next->end() > $l3_feature->end());
$skip_because_consumed{lc($IDunique_next)}++; # Save consumed feature ID
$modification_occured++;
}
#if after we stop
Expand Down Expand Up @@ -2896,6 +2899,9 @@ sub _check_sequential{ # Goes through from L3 to l1
$must_create_l2=1;
$feature_l2 = clone($infoSequential->{'locus'}{$locusNameHIS}{$bucket}{'level3'}[0]);#create a copy of the first mRNA feature;

# remove strand if any
$feature_l2->frame(".");

#manage primary tag
my $primary_tag_l2='RNA';
foreach my $feature_L3 (@{$infoSequential->{'locus'}{$locusNameHIS}{$bucket}{'level3'}} ){
Expand Down
18 changes: 16 additions & 2 deletions lib/AGAT/OmniscientTool.pm
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ remove_shortest_isoforms check_gene_overlap_at_level3 gather_and_sort_l1_by_seq_
gather_and_sort_l1_by_seq_id_for_l1type collect_l1_info_sorted_by_seqid_and_location
remove_l1_and_relatives remove_l2_and_relatives remove_l3_and_relatives get_longest_cds_start_end
check_mrna_positions check_features_overlap initialize_omni_from
create_omniscient get_cds_from_l2 merge_overlap_loci );
create_omniscient get_cds_from_l2 merge_overlap_loci get_uniq_id );

sub import {
AGAT::OmniscientTool->export_to_level(1, @_); # to be able to load the EXPORT functions when direct call; (normal case)
Expand Down Expand Up @@ -607,7 +607,7 @@ sub merge_overlap_loci{
my $kept_l2 = shift @$commons; # first is the one we append
my $id_l2 = lc($kept_l2->_tag_value('ID'));
foreach my $common (@{$commons}){
$resume_identic++;
$resume_identic++;
my @list_tag_l2 = $common->get_all_tags();
foreach my $tag (@list_tag_l2){
create_or_append_tag($kept_l2, "merged_".$tag ,$common->get_tag_values($tag));
Expand Down Expand Up @@ -2916,6 +2916,20 @@ return $result
# |+----------------------------------------------------+|
# +------------------------------------------------------+

# secure way to get ID because if spread feature e.g. CDS the ID can be share by multiple feature
sub get_uniq_id {
my ($hash_omniscient, $feature) = @_;

my $id;
if ( exists_keys($hash_omniscient,('other', 'level', 'spread', lc($feature->primary_tag()) ) ) )
{
$id = $feature->_tag_value('ID')."_".$feature->start()."_".$feature->end();
}
else {
$id = $feature->_tag_value('ID');
}
return $id;
}
# +------------------------------------------------------+
# |+----------------------------------------------------+|
# || Info from id/feature ||
Expand Down
2 changes: 2 additions & 0 deletions share/feature_levels.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,8 @@ level3:
pseudogenic_exon: 1
selenocysteine: 1
sig_peptide: exon
splice3 : intron
splice5 : intron
start_codon: exon
stop_codon: exon
stop_codon_read_through: exon
Expand Down
2 changes: 1 addition & 1 deletion t/gff_syntax.t
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

use strict;
use warnings;
use Test::More tests => 44;
use Test::More tests => 45;

=head1 DESCRIPTION
Expand Down
1 change: 1 addition & 0 deletions t/gff_syntax/README
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ This is an explanations of the different test files used to check the GFF3 parse
scaffold_1 AUGUSTUS transcript 3211 5134 0.7 + . anno1.g20064.t1
42: No attribute tag in L1; No attribute tag in L2; No attribute tag in L3; Single value in 9th column (GFF1)
43: Issue 290 - level3 features (exons CDS) directly attached to the gene, while it exists an mRNA feature. The mRNA feature is also attached to the gene.
44: Issue 350 - Exonerate output - No L2, ID only for L1.

/!\ If only level3 features are defined, and no locus tag present (see test 26), the tool cannot deal with it. I will create by default one umbrella level1, or if you on attribute as uniq locus ID, It will create a l1 for each feature => If only exon or only CDS features so the result will be fine, but if there are two different features that has to be linked together (two CDS or a CDS and a signal peptide as in the test case 26) , the tool will not perform properly.

Expand Down
16 changes: 16 additions & 0 deletions t/gff_syntax/in/44_test.gff
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
ptg000001l exonerate:protein2genome:local gene 13733550 13734381 1150 - . gene_id 1 ; sequence XP_021634939.1 ; gene_orientation +
ptg000001l exonerate:protein2genome:local cds 13734028 13734381 . - .
ptg000001l exonerate:protein2genome:local exon 13734028 13734381 . - . insertions 0 ; deletions 0
ptg000001l exonerate:protein2genome:local splice5 13734026 13734027 . - . intron_id 1 ; splice_site "GT"
ptg000001l exonerate:protein2genome:local intron 13733971 13734027 . - . intron_id 1
ptg000001l exonerate:protein2genome:local splice3 13733971 13733972 . - . intron_id 0 ; splice_site "AG"
ptg000001l exonerate:protein2genome:local cds 13733550 13733970 . - .
ptg000001l exonerate:protein2genome:local exon 13733550 13733970 . - . insertions 0 ; deletions 0 ; frameshifts 1
ptg000001l exonerate:protein2genome:local gene 6876023 6876853 1131 - . gene_id 2 ; sequence XP_021634939.1 ; gene_orientation +
ptg000001l exonerate:protein2genome:local cds 6876500 6876853 . - .
ptg000001l exonerate:protein2genome:local exon 6876500 6876853 . - . insertions 0 ; deletions 0
ptg000001l exonerate:protein2genome:local splice5 6876498 6876499 . - . intron_id 1 ; splice_site "GT"
ptg000001l exonerate:protein2genome:local intron 6876443 6876499 . - . intron_id 1
ptg000001l exonerate:protein2genome:local splice3 6876443 6876444 . - . intron_id 0 ; splice_site "AG"
ptg000001l exonerate:protein2genome:local cds 6876023 6876442 . - .
ptg000001l exonerate:protein2genome:local exon 6876023 6876442 . - . insertions 0 ; deletions 0
8 changes: 4 additions & 4 deletions t/gff_syntax/out/42_correct_output.gff
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
##gff-version 3
# GFF1 only one value as attribute
scaffold_5 JGI gene 42603 45653 . + 0 ID=nbis-gene-2;common_tag=geneB
scaffold_5 JGI mRNA 42603 45653 . + 0 ID=nbis-rna-2;Parent=nbis-gene-2;common_tag=geneB
scaffold_5 JGI gene 42603 45653 . + . ID=nbis-gene-2;common_tag=geneB
scaffold_5 JGI mRNA 42603 45653 . + . ID=nbis-rna-2;Parent=nbis-gene-2;common_tag=geneB
scaffold_5 JGI exon 42603 43344 . + 0 ID=geneB;Parent=nbis-rna-2;common_tag=geneB
scaffold_5 JGI exon 43530 43531 . + 0 ID=nbis-exon-3;Parent=nbis-rna-2;common_tag=geneB
scaffold_5 JGI exon 43569 45653 . + 0 ID=nbis-exon-4;Parent=nbis-rna-2;common_tag=geneB
Expand All @@ -10,8 +10,8 @@ scaffold_5 JGI CDS 43530 43531 . + 2 ID=nbis-cds-5;Parent=nbis-rna-2;common_tag=
scaffold_5 JGI CDS 43569 45653 . + 0 ID=nbis-cds-6;Parent=nbis-rna-2;common_tag=geneB
scaffold_5 JGI start_codon 42603 42605 . + 0 ID=nbis-start_codon-2;Parent=nbis-rna-2;common_tag=geneB
scaffold_5 JGI stop_codon 45651 45653 . + 0 ID=nbis-stop_codon-2;Parent=nbis-rna-2;common_tag=geneB
scaffold_5 JGI gene 442603 445653 . + 0 ID=nbis-gene-1;common_tag=geneA
scaffold_5 JGI mRNA 442603 445653 . + 0 ID=nbis-rna-1;Parent=nbis-gene-1;common_tag=geneA
scaffold_5 JGI gene 442603 445653 . + . ID=nbis-gene-1;common_tag=geneA
scaffold_5 JGI mRNA 442603 445653 . + . ID=nbis-rna-1;Parent=nbis-gene-1;common_tag=geneA
scaffold_5 JGI exon 442603 443344 . + 0 ID=geneA;Parent=nbis-rna-1;common_tag=geneA
scaffold_5 JGI exon 443530 443531 . + 0 ID=nbis-exon-1;Parent=nbis-rna-1;common_tag=geneA
scaffold_5 JGI exon 443569 445653 . + 0 ID=nbis-exon-2;Parent=nbis-rna-1;common_tag=geneA
Expand Down
19 changes: 19 additions & 0 deletions t/gff_syntax/out/44_correct_output.gff
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
##gff-version 3
ptg000001l exonerate:protein2genome:local gene 6876023 6876853 1131 - . ID=2;gene_id=2;gene_orientation=+;sequence=XP_021634939.1
ptg000001l exonerate:protein2genome:local mRNA 6876023 6876853 . - . ID=nbis-rna-2;Parent=2
ptg000001l exonerate:protein2genome:local exon 6876023 6876442 . - . ID=exon-4;Parent=nbis-rna-2;deletions=0;insertions=0
ptg000001l exonerate:protein2genome:local exon 6876500 6876853 . - . ID=exon-3;Parent=nbis-rna-2;deletions=0;insertions=0
ptg000001l exonerate:protein2genome:local cds 6876023 6876442 . - . ID=cds-4;Parent=nbis-rna-2
ptg000001l exonerate:protein2genome:local cds 6876500 6876853 . - . ID=cds-3;Parent=nbis-rna-2
ptg000001l exonerate:protein2genome:local intron 6876443 6876499 . - . ID=nbis-intron-2;Parent=nbis-rna-2;intron_id=1
ptg000001l exonerate:protein2genome:local splice3 6876443 6876444 . - . ID=splice3-2;Parent=nbis-rna-2;intron_id=0;splice_site=AG
ptg000001l exonerate:protein2genome:local splice5 6876498 6876499 . - . ID=splice5-2;Parent=nbis-rna-2;intron_id=1;splice_site=GT
ptg000001l exonerate:protein2genome:local gene 13733550 13734381 1150 - . ID=1;gene_id=1;gene_orientation=+;sequence=XP_021634939.1
ptg000001l exonerate:protein2genome:local mRNA 13733550 13734381 . - . ID=nbis-rna-1;Parent=1
ptg000001l exonerate:protein2genome:local exon 13733550 13733970 . - . ID=exon-2;Parent=nbis-rna-1;deletions=0;frameshifts=1;insertions=0
ptg000001l exonerate:protein2genome:local exon 13734028 13734381 . - . ID=exon-1;Parent=nbis-rna-1;deletions=0;insertions=0
ptg000001l exonerate:protein2genome:local cds 13733550 13733970 . - . ID=cds-2;Parent=nbis-rna-1
ptg000001l exonerate:protein2genome:local cds 13734028 13734381 . - . ID=cds-1;Parent=nbis-rna-1
ptg000001l exonerate:protein2genome:local intron 13733971 13734027 . - . ID=nbis-intron-1;Parent=nbis-rna-1;intron_id=1
ptg000001l exonerate:protein2genome:local splice3 13733971 13733972 . - . ID=splice3-1;Parent=nbis-rna-1;intron_id=0;splice_site=AG
ptg000001l exonerate:protein2genome:local splice5 13734026 13734027 . - . ID=splice5-1;Parent=nbis-rna-1;intron_id=1;splice_site=GT
16 changes: 8 additions & 8 deletions t/gff_syntax/out/8_correct_output.gff
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
##gff-version 3
Tob1_contig1 Prodigal:2.60 gene 476 670 . - 0 ID=nbis-gene-1;locus_tag=Tob1_00001;product=hypothetical protein
Tob1_contig1 Prodigal:2.60 mRNA 476 670 . - 0 ID=nbis-rna-1;Parent=nbis-gene-1;locus_tag=Tob1_00001;product=hypothetical protein
Tob1_contig1 Prodigal:2.60 gene 476 670 . - . ID=nbis-gene-1;locus_tag=Tob1_00001;product=hypothetical protein
Tob1_contig1 Prodigal:2.60 mRNA 476 670 . - . ID=nbis-rna-1;Parent=nbis-gene-1;locus_tag=Tob1_00001;product=hypothetical protein
Tob1_contig1 Prodigal:2.60 exon 476 670 . - . ID=nbis-exon-1;Parent=nbis-rna-1;locus_tag=Tob1_00001;product=hypothetical protein
Tob1_contig1 Prodigal:2.60 CDS 476 670 . - 0 ID=Tob1_00001;Parent=nbis-rna-1;locus_tag=Tob1_00001;product=hypothetical protein
Tob1_contig1 Prodigal:2.60 gene 34266 35222 . + 0 ID=nbis-gene-2;locus_tag=Tob1_00024;product=hypothetical protein
Tob1_contig1 Prodigal:2.60 mRNA 34266 35222 . + 0 ID=nbis-rna-2;Parent=nbis-gene-2;locus_tag=Tob1_00024;product=hypothetical protein
Tob1_contig1 Prodigal:2.60 gene 34266 35222 . + . ID=nbis-gene-2;locus_tag=Tob1_00024;product=hypothetical protein
Tob1_contig1 Prodigal:2.60 mRNA 34266 35222 . + . ID=nbis-rna-2;Parent=nbis-gene-2;locus_tag=Tob1_00024;product=hypothetical protein
Tob1_contig1 Prodigal:2.60 exon 34266 35222 . + . ID=nbis-exon-2;Parent=nbis-rna-2;locus_tag=Tob1_00024;product=hypothetical protein
Tob1_contig1 Prodigal:2.60 CDS 34266 35222 . + 0 ID=Tob1_00024;Parent=nbis-rna-2;locus_tag=Tob1_00024;product=hypothetical protein
Tob1_contig1 SignalP:4.1 sig_peptide 34266 34298 . + 0 ID=sig_peptide-1;Parent=nbis-rna-2;inference=ab initio prediction:SignalP:4.1;note=predicted cleavage at residue 33;product=putative signal peptide
Tob1_contig1 Prodigal:2.60 gene 35267 37444 . - 0 ID=nbis-gene-3;locus_tag=Tob1_00025
Tob1_contig1 Prodigal:2.60 mRNA 35267 37444 . - 0 ID=nbis-rna-3;Parent=nbis-gene-3;locus_tag=Tob1_00025
Tob1_contig1 Prodigal:2.60 gene 35267 37444 . - . ID=nbis-gene-3;locus_tag=Tob1_00025
Tob1_contig1 Prodigal:2.60 mRNA 35267 37444 . - . ID=nbis-rna-3;Parent=nbis-gene-3;locus_tag=Tob1_00025
Tob1_contig1 Prodigal:2.60 exon 35267 37444 . - . ID=nbis-exon-3;Parent=nbis-rna-3;locus_tag=Tob1_00025
Tob1_contig1 Prodigal:2.60 CDS 35267 37444 . - 0 ID=Tob1_00025;Parent=nbis-rna-3;locus_tag=Tob1_00025
Tob1_contig1 SignalP:4.1 sig_peptide 37420 37444 . - 0 ID=sig_peptide-2;Parent=nbis-rna-3;inference=ab initio prediction:SignalP:4.1;note=predicted cleavage at residue 25;product=putative signal peptide
Tob1_contig1 Prodigal:2.60 gene 38304 39338 . - 0 ID=nbis-gene-4;locus_tag=Tob1_00026
Tob1_contig1 Prodigal:2.60 mRNA 38304 39338 . - 0 ID=nbis-rna-4;Parent=nbis-gene-4;locus_tag=Tob1_00026
Tob1_contig1 Prodigal:2.60 gene 38304 39338 . - . ID=nbis-gene-4;locus_tag=Tob1_00026
Tob1_contig1 Prodigal:2.60 mRNA 38304 39338 . - . ID=nbis-rna-4;Parent=nbis-gene-4;locus_tag=Tob1_00026
Tob1_contig1 Prodigal:2.60 exon 38304 39338 . - . ID=nbis-exon-4;Parent=nbis-rna-4;locus_tag=Tob1_00026
Tob1_contig1 Prodigal:2.60 CDS 38304 39338 . - 0 ID=Tob1_00026;Parent=nbis-rna-4;locus_tag=Tob1_00026

0 comments on commit 02d2023

Please sign in to comment.