diff --git a/lib/AGAT/OmniscientI.pm b/lib/AGAT/OmniscientI.pm index 00aacc9f..3b81e951 100644 --- a/lib/AGAT/OmniscientI.pm +++ b/lib/AGAT/OmniscientI.pm @@ -1706,14 +1706,21 @@ sub _check_l2_linked_to_l3{ #L3 linked directly to L1 my $has_l1_feature = undef; my $id_l2_to_replace = undef; - foreach my $tag_l1 (keys %{$hash_omniscient->{'level1'}}){ # primary_tag_key_level1 = gene or repeat etc... + + # ------------ Check for L1 features ------------ + # Check if we have one l1 with that ID among all L1/tag tuples + foreach my $tag_l1 (keys %{$hash_omniscient->{'level1'}}){ if( exists_keys ($hash_omniscient, ('level1', $tag_l1, $id_l2))){ # case where it's linked by parent/ID attribute $has_l1_feature = $hash_omniscient->{"level1"}{$tag_l1}{$id_l2}; + last; } - else{ + } + # No l1_feature found yet, let's check if one L1 feature with the common tag + if (! $has_l1_feature){ + foreach my $tag_l1 (sort {$a cmp $b} keys %{$hash_omniscient->{'level1'}}){ if(! $common_tag_in_l1 ){ $common_tag_in_l1 = _create_hash_common_tag_l1($hash_omniscient); } # fill it (only once) because will be needed @@ -1724,19 +1731,22 @@ sub _check_l2_linked_to_l3{ #check if we have the tag foreach my $l3_feature (@{$hash_omniscient->{'level3'}{$tag_l3}{$id_l2}}){ + print "fefe ".$l3_feature->gff_string()."\n"; if($l3_feature->has_tag($tag) ) { - + print "has_tag $tag\n"; # case where it's linked by comon_tag attribute if (exists_keys($common_tag_in_l1,( $tag, lc($l3_feature->_tag_value($tag)) ) ) ){ + print "exists_keys\n"; if($#{$common_tag_in_l1->{$tag}{lc($l3_feature->_tag_value($tag))}} == 0){ my $id = $common_tag_in_l1->{$tag}{lc($l3_feature->_tag_value($tag))}[0]->{'id'}; my $ptag = $common_tag_in_l1->{$tag}{lc($l3_feature->_tag_value($tag))}[0]->{'ptag'}; $has_l1_feature = $hash_omniscient->{'level1'}{$ptag}{$id}; $id_l2_to_replace = $l3_feature->_tag_value('Parent'); + print "goes into it !!!! $id_l2_to_replace \n"; last; } else{ - dual_print($log, "\n\nSeveral potential L1 parent with comnon tag $tag with value ".lc($l3_feature->_tag_value($tag)).". We do not use any\n", 0); + dual_print($log, "\n\nSeveral potential L1 parent with comnon tag $tag with value ".lc($l3_feature->_tag_value($tag)).". We do not use any\n", $verbose); } } } @@ -1744,77 +1754,84 @@ sub _check_l2_linked_to_l3{ } } } + } - if ($has_l1_feature){ - - my $l1_ID = $has_l1_feature->_tag_value('ID'); - my $has_gemoma_l2=undef; - foreach my $tag_l2 (keys %{$hash_omniscient->{'level2'}}){ - if ( exists_keys($hash_omniscient,("level2", $tag_l2, lc($l1_ID))) ) { - # HERE we have seen there is a L2. We want to use it and modify it Only - # in case of GeMoMa issue #290 - # to make the difference we check that no level3 feature is attached to the detected l2 - $has_gemoma_l2=$tag_l2; - foreach my $l2_feature ( @{$hash_omniscient->{'level2'}{$tag_l2}{lc($l1_ID)} } ){ - foreach my $tag_l3 (sort {$a cmp $b} keys %{$hash_omniscient->{'level3'}}){ - if ( exists_keys($hash_omniscient,("level3", $tag_l3, lc($l2_feature->_tag_value('ID')))) ) { - # Level3 features was attached to the L2, we cannot play the GeMoMa case - # otherwise interfer with other cases (level_missing.t tests testF, testB2 and gff_syntax.t 37_test.gff) - $has_gemoma_l2=undef; - } + # l1_feature found + if ($has_l1_feature){ + + my $l1_ID = $has_l1_feature->_tag_value('ID'); + my $has_gemoma_l2=undef; + foreach my $tag_l2 (keys %{$hash_omniscient->{'level2'}}){ + if ( exists_keys($hash_omniscient,("level2", $tag_l2, lc($l1_ID))) ) { + # HERE we have seen there is a L2. We want to use it and modify it Only + # in case of GeMoMa issue #290 + # to make the difference we check that no level3 feature is attached to the detected l2 + $has_gemoma_l2=$tag_l2; + foreach my $l2_feature ( @{$hash_omniscient->{'level2'}{$tag_l2}{lc($l1_ID)} } ){ + foreach my $tag_l3 (sort {$a cmp $b} keys %{$hash_omniscient->{'level3'}}){ + if ( exists_keys($hash_omniscient,("level3", $tag_l3, lc($l2_feature->_tag_value('ID')))) ) { + # Level3 features was attached to the L2, we cannot play the GeMoMa case + # otherwise interfer with other cases (level_missing.t tests testF, testB2 and gff_syntax.t 37_test.gff) + $has_gemoma_l2=undef; } } } } + } - my $l2_feature; - if (! $has_gemoma_l2) { - #create a copy of the first mRNA feature; - my $primary_tag_l2; - if (exists_keys($hash_omniscient,("level3",'cds', $id_l2) ) ){ - $primary_tag_l2 = 'mRNA'; - } # guess mRNA - else{ $primary_tag_l2 = 'RNA' ;} #we cannot guess - $l2_feature = clean_clone( { omniscient => $hash_omniscient, - feature => $has_l1_feature, - new_primary_tag => $primary_tag_l2 - } ); - - } else { - $l2_feature = @{$hash_omniscient->{"level2"}{$has_gemoma_l2}{lc($l1_ID)}}[0]; - $id_l2_to_replace = $has_l1_feature->_tag_value('ID'); - delete $mRNAGeneLink->{lc($l2_feature->_tag_value('ID'))} - } + my $l2_feature; + if (! $has_gemoma_l2) { + #create a copy of the first mRNA feature; + my $primary_tag_l2; + if (exists_keys($hash_omniscient,("level3",'cds', $id_l2) ) ){ + $primary_tag_l2 = 'mRNA'; + } # guess mRNA + else{ $primary_tag_l2 = 'RNA' ;} #we cannot guess + + # Use a L3 feature as template (better as L1 see bug #441) + $l2_feature = clean_clone( { omniscient => $hash_omniscient, + feature => $hash_omniscient->{"level3"}{$tag_l3}{$id_l2}[0], + new_primary_tag => $primary_tag_l2, + new_id => $hash_omniscient->{"level3"}{$tag_l3}{$id_l2}[0]->_tag_value('Parent') + } ); + + } else { + $l2_feature = @{$hash_omniscient->{"level2"}{$has_gemoma_l2}{lc($l1_ID)}}[0]; + $id_l2_to_replace = $has_l1_feature->_tag_value('ID'); + delete $mRNAGeneLink->{lc($l2_feature->_tag_value('ID'))} + } - #Modify parent L2 (and L1 id if necessary) - create_or_replace_tag($l2_feature,'Parent', $l1_ID); #modify ID to replace by parent value - create_or_replace_tag($l2_feature,'ID', $id_l2_to_replace) if ($id_l2_to_replace); #modify ID to replace by parent value - check_level2_positions($hash_omniscient, $l2_feature); - - if ( exists_keys ($hashID,('uid', lc($id_l2) ) ) ){ #the easiest is to modifiy the gene id - - my $new_l1id = _check_uniq_id_feature($hash_omniscient, $hashID, $has_l1_feature); # to check if ID was already in used by level1 feature - create_or_replace_tag($l2_feature,'Parent', $new_l1id); #modify ID to replace by parent value - my $primary_tag_l1 =$has_l1_feature->primary_tag(); - $hash_omniscient->{"level1"}{lc($primary_tag_l1)}{lc($new_l1id)} = delete $hash_omniscient->{"level1"}{lc($primary_tag_l1)}{lc($l1_ID)}; # now save it in omniscient - #fill the $mRNAGeneLink hash - $mRNAGeneLink->{ $id_l2 } = $new_l1id; - if ($has_gemoma_l2){ - $hash_omniscient->{'level2'}{lc($l2_feature->primary_tag)}{lc($new_l1id)} = delete $hash_omniscient->{'level2'}{lc($l2_feature->primary_tag)}{lc($l1_ID)}; - } - else { - push(@{$hash_omniscient->{"level2"}{lc($l2_feature->primary_tag)}{lc($new_l1id)}}, $l2_feature); - } + #Modify parent L2 (and L1 id if necessary) + create_or_replace_tag($l2_feature,'Parent', $l1_ID); #modify ID to replace by parent value + create_or_replace_tag($l2_feature,'ID', $id_l2_to_replace) if ($id_l2_to_replace); #modify ID to replace by parent value + check_level2_positions($hash_omniscient, $l2_feature); + + if ( exists_keys ($hashID,('uid', lc($id_l2) ) ) ){ #the easiest is to modifiy the gene id + + my $new_l1id = _check_uniq_id_feature($hash_omniscient, $hashID, $has_l1_feature); # to check if ID was already in used by level1 feature + create_or_replace_tag($l2_feature,'Parent', $new_l1id); #modify ID to replace by parent value + my $primary_tag_l1 =$has_l1_feature->primary_tag(); + $hash_omniscient->{"level1"}{lc($primary_tag_l1)}{lc($new_l1id)} = delete $hash_omniscient->{"level1"}{lc($primary_tag_l1)}{lc($l1_ID)}; # now save it in omniscient + #fill the $mRNAGeneLink hash + $mRNAGeneLink->{ $id_l2 } = $new_l1id; + if ($has_gemoma_l2){ + $hash_omniscient->{'level2'}{lc($l2_feature->primary_tag)}{lc($new_l1id)} = delete $hash_omniscient->{'level2'}{lc($l2_feature->primary_tag)}{lc($l1_ID)}; } - else{ - #fill the $mRNAGeneLink hash - $mRNAGeneLink->{ $id_l2 } = $l1_ID; # Always need to keep track about l2->l1, else the method _check_l2_linked_to_l3 will recreate a l1 thinking this relationship is not fill - push(@{$hash_omniscient->{"level2"}{lc($l2_feature->primary_tag)}{lc($l1_ID)}}, $l2_feature); + else { + push(@{$hash_omniscient->{"level2"}{lc($l2_feature->primary_tag)}{lc($new_l1id)}}, $l2_feature); } - dual_print($log, "L3 was directly linked to L1. Corrected by creating the intermediate L2 feature from L1 feature:\n".$l2_feature->gff_string()."\n", 0); - last } + else{ + #fill the $mRNAGeneLink hash + $mRNAGeneLink->{ $id_l2 } = $l1_ID; # Always need to keep track about l2->l1, else the method _check_l2_linked_to_l3 will recreate a l1 thinking this relationship is not fill + push(@{$hash_omniscient->{"level2"}{lc($l2_feature->primary_tag)}{lc($l1_ID)}}, $l2_feature); + } + dual_print($log, "L3 had a L1 feature but no L2 feature. Corrected by creating the intermediate L2 feature:\n".$l2_feature->gff_string()."\nUsing this feature template:\n".$hash_omniscient->{"level3"}{$tag_l3}{$id_l2}[0]->gff_string()."\n", $verbose); + last } + + + # ------------ No L1 features found ------------ # it was not previous case (L3 linked directly to L1) if (! exists_keys($mRNAGeneLink,($id_l2 ) ) ) { # ---- start fill L2 ---- diff --git a/lib/AGAT/OmniscientTool.pm b/lib/AGAT/OmniscientTool.pm index c7cdb46a..aa2be4e2 100644 --- a/lib/AGAT/OmniscientTool.pm +++ b/lib/AGAT/OmniscientTool.pm @@ -1269,17 +1269,21 @@ sub clean_clone{ $cloned_feature->source_tag("AGAT"); # clean score $cloned_feature->score("."); + # new primary tag + $cloned_feature->primary_tag($new_primary_tag) if $new_primary_tag; # clean attributes if ($clean_attributes){ my @tags = $cloned_feature->get_all_tags(); foreach my $tag (@tags){ - if (lc($tag) ne "id" and lc($tag) ne "parent" and lc($tag) ne "gene_id" and lc($tag) ne "transcript_id"){ + if ( lc($tag) ne "id" and lc($tag) ne "parent" and lc($tag) ne "gene_id" and lc($tag) ne "transcript_id" ){ + $cloned_feature->remove_tag($tag); + } + if ( (lc($tag) eq "parent" or lc($tag) eq "transcript_id") and exists_keys($omniscient,("other","level","level1", lc($cloned_feature->primary_tag()) ) ) ){ # transcript_id and Parent attributes have to be removed for level1 feature anyway. $cloned_feature->remove_tag($tag); } } } - # new primary tag - $cloned_feature->primary_tag($new_primary_tag) if $new_primary_tag; + # remove Parent attribute if level1 if ($omniscient){ if ($cloned_feature->has_tag("Parent")){ diff --git a/t/gff_other.t b/t/gff_other.t index 8a729202..63b8c230 100644 --- a/t/gff_other.t +++ b/t/gff_other.t @@ -2,7 +2,7 @@ use strict; use warnings; -use Test::More tests => 5; +use Test::More tests => 6; =head1 DESCRIPTION @@ -80,4 +80,16 @@ system("$script --gff $input_folder/issue389.gff -o $pathtmp 2>&1 1>/dev/null"); #run test ok( system("diff $pathtmp $correct_output") == 0, "issue389 check"); -unlink $pathtmp; \ No newline at end of file +unlink $pathtmp; + +# --------- Issue 441 transccipt_id used for GTF while L2 L1 created from L3 with isoforms ---- +$script = $script_prefix."bin/agat_convert_sp_gxf2gxf.pl"; +$correct_output = "$output_folder/issue441.gtf"; + +system("$script_agat config --expose --output_format gtf 2>&1 1>/dev/null"); +system("$script --g $input_folder/issue441.gtf -o $pathtmp 2>&1 1>/dev/null"); + +ok( system("diff $pathtmp $correct_output") == 0, "issue441 check"); + +unlink $pathtmp; +unlink $config; \ No newline at end of file diff --git a/t/gff_other/in/issue441.gtf b/t/gff_other/in/issue441.gtf new file mode 100644 index 00000000..8ecedd0e --- /dev/null +++ b/t/gff_other/in/issue441.gtf @@ -0,0 +1,16 @@ +Scaffold170 maker exon 2883887 2884591 . + . transcript_id "GBI_15721-RE"; gene_id "GBI_15721"; gene_name "GBI_15721"; +Scaffold170 maker exon 2885735 2885878 . + . transcript_id "GBI_15721-RE"; gene_id "GBI_15721"; gene_name "GBI_15721"; +Scaffold170 maker exon 2885953 2886162 . + . transcript_id "GBI_15721-RE"; gene_id "GBI_15721"; gene_name "GBI_15721"; +Scaffold170 maker exon 2886451 2886531 . + . transcript_id "GBI_15721-RE"; gene_id "GBI_15721"; gene_name "GBI_15721"; +Scaffold170 maker exon 2887224 2888594 . + . transcript_id "GBI_15721-RE"; gene_id "GBI_15721"; gene_name "GBI_15721"; +Scaffold170 maker CDS 2884322 2884591 . + 0 transcript_id "GBI_15721-RE"; gene_id "GBI_15721"; gene_name "GBI_15721"; +Scaffold170 maker CDS 2885735 2885878 . + 0 transcript_id "GBI_15721-RE"; gene_id "GBI_15721"; gene_name "GBI_15721"; +Scaffold170 maker CDS 2885953 2886162 . + 0 transcript_id "GBI_15721-RE"; gene_id "GBI_15721"; gene_name "GBI_15721"; +Scaffold170 maker CDS 2886451 2886531 . + 0 transcript_id "GBI_15721-RE"; gene_id "GBI_15721"; gene_name "GBI_15721"; +Scaffold170 maker CDS 2887224 2887376 . + 0 transcript_id "GBI_15721-RE"; gene_id "GBI_15721"; gene_name "GBI_15721"; +Scaffold170 maker exon 2887524 2887566 . + . transcript_id "GBI_15721-RF"; gene_id "GBI_15721"; gene_name "GBI_15721"; +Scaffold170 maker exon 2887651 2887775 . + . transcript_id "GBI_15721-RF"; gene_id "GBI_15721"; gene_name "GBI_15721"; +Scaffold170 maker exon 2887917 2888009 . + . transcript_id "GBI_15721-RF"; gene_id "GBI_15721"; gene_name "GBI_15721"; +Scaffold170 maker CDS 2887524 2887566 . + 0 transcript_id "GBI_15721-RF"; gene_id "GBI_15721"; gene_name "GBI_15721"; +Scaffold170 maker CDS 2887651 2887775 . + 2 transcript_id "GBI_15721-RF"; gene_id "GBI_15721"; gene_name "GBI_15721"; +Scaffold170 maker CDS 2887917 2888009 . + 0 transcript_id "GBI_15721-RF"; gene_id "GBI_15721"; gene_name "GBI_15721"; diff --git a/t/gff_other/out/issue441.gtf b/t/gff_other/out/issue441.gtf new file mode 100644 index 00000000..0abfef70 --- /dev/null +++ b/t/gff_other/out/issue441.gtf @@ -0,0 +1,23 @@ +##gtf-version X +# GFF-like GTF i.e. not checked against any GTF specification. Conversion based on GFF input, standardised by AGAT. +Scaffold170 AGAT gene 2883887 2888594 . + . gene_id "GBI_15721"; transcript_id "GBI_15721-RE"; ID "GBI_15721"; gene_name "GBI_15721"; +Scaffold170 AGAT mRNA 2883887 2888594 . + . gene_id "GBI_15721"; transcript_id "GBI_15721-RE"; ID "GBI_15721-RE"; Parent "GBI_15721"; gene_name "GBI_15721"; +Scaffold170 maker exon 2883887 2884591 . + . gene_id "GBI_15721"; transcript_id "GBI_15721-RE"; ID "agat-exon-1"; Parent "GBI_15721-RE"; gene_name "GBI_15721"; +Scaffold170 maker exon 2885735 2885878 . + . gene_id "GBI_15721"; transcript_id "GBI_15721-RE"; ID "agat-exon-2"; Parent "GBI_15721-RE"; gene_name "GBI_15721"; +Scaffold170 maker exon 2885953 2886162 . + . gene_id "GBI_15721"; transcript_id "GBI_15721-RE"; ID "agat-exon-3"; Parent "GBI_15721-RE"; gene_name "GBI_15721"; +Scaffold170 maker exon 2886451 2886531 . + . gene_id "GBI_15721"; transcript_id "GBI_15721-RE"; ID "agat-exon-4"; Parent "GBI_15721-RE"; gene_name "GBI_15721"; +Scaffold170 maker exon 2887224 2888594 . + . gene_id "GBI_15721"; transcript_id "GBI_15721-RE"; ID "agat-exon-5"; Parent "GBI_15721-RE"; gene_name "GBI_15721"; +Scaffold170 maker CDS 2884322 2884591 . + 0 gene_id "GBI_15721"; transcript_id "GBI_15721-RE"; ID "agat-cds-1"; Parent "GBI_15721-RE"; gene_name "GBI_15721"; +Scaffold170 maker CDS 2885735 2885878 . + 0 gene_id "GBI_15721"; transcript_id "GBI_15721-RE"; ID "agat-cds-2"; Parent "GBI_15721-RE"; gene_name "GBI_15721"; +Scaffold170 maker CDS 2885953 2886162 . + 0 gene_id "GBI_15721"; transcript_id "GBI_15721-RE"; ID "agat-cds-3"; Parent "GBI_15721-RE"; gene_name "GBI_15721"; +Scaffold170 maker CDS 2886451 2886531 . + 0 gene_id "GBI_15721"; transcript_id "GBI_15721-RE"; ID "agat-cds-4"; Parent "GBI_15721-RE"; gene_name "GBI_15721"; +Scaffold170 maker CDS 2887224 2887376 . + 0 gene_id "GBI_15721"; transcript_id "GBI_15721-RE"; ID "agat-cds-5"; Parent "GBI_15721-RE"; gene_name "GBI_15721"; +Scaffold170 AGAT five_prime_UTR 2883887 2884321 . + . gene_id "GBI_15721"; transcript_id "GBI_15721-RE"; ID "agat-five_prime_utr-1"; Parent "GBI_15721-RE"; gene_name "GBI_15721"; +Scaffold170 AGAT three_prime_UTR 2887377 2888594 . + . gene_id "GBI_15721"; transcript_id "GBI_15721-RE"; ID "agat-three_prime_utr-1"; Parent "GBI_15721-RE"; gene_name "GBI_15721"; +Scaffold170 AGAT mRNA 2887524 2888009 . + . gene_id "GBI_15721"; transcript_id "GBI_15721-RF"; ID "GBI_15721-RF"; Parent "GBI_15721"; gene_name "GBI_15721"; +Scaffold170 maker exon 2887524 2887566 . + . gene_id "GBI_15721"; transcript_id "GBI_15721-RF"; ID "agat-exon-6"; Parent "GBI_15721-RF"; gene_name "GBI_15721"; +Scaffold170 maker exon 2887651 2887775 . + . gene_id "GBI_15721"; transcript_id "GBI_15721-RF"; ID "agat-exon-7"; Parent "GBI_15721-RF"; gene_name "GBI_15721"; +Scaffold170 maker exon 2887917 2888009 . + . gene_id "GBI_15721"; transcript_id "GBI_15721-RF"; ID "agat-exon-8"; Parent "GBI_15721-RF"; gene_name "GBI_15721"; +Scaffold170 maker CDS 2887524 2887566 . + 0 gene_id "GBI_15721"; transcript_id "GBI_15721-RF"; ID "agat-cds-6"; Parent "GBI_15721-RF"; gene_name "GBI_15721"; +Scaffold170 maker CDS 2887651 2887775 . + 2 gene_id "GBI_15721"; transcript_id "GBI_15721-RF"; ID "agat-cds-7"; Parent "GBI_15721-RF"; gene_name "GBI_15721"; +Scaffold170 maker CDS 2887917 2888009 . + 0 gene_id "GBI_15721"; transcript_id "GBI_15721-RF"; ID "agat-cds-8"; Parent "GBI_15721-RF"; gene_name "GBI_15721"; diff --git a/t/gff_syntax/out/37_correct_output.gff b/t/gff_syntax/out/37_correct_output.gff index da2c35f9..eec46277 100644 --- a/t/gff_syntax/out/37_correct_output.gff +++ b/t/gff_syntax/out/37_correct_output.gff @@ -7,12 +7,12 @@ xfSc0000000 protein_coding CDS 8675 8697 . - 2 ID=agat-cds-5;Parent=BL03703_cuf1 xfSc0000000 protein_coding CDS 9847 10147 . - 0 ID=agat-cds-4;Parent=BL03703_cuf1;exon_number=1;gene_id=BL03703;gene_name=CHRND;oldID=BlTCONS00149301;status=both;transcript_id=BL03703_cuf1 xfSc0000000 AGAT five_prime_UTR 10148 10149 . - . ID=agat-five_prime_utr-1;Parent=BL03703_cuf1;exon_number=1;gene_id=BL03703;gene_name=CHRND;oldID=BlTCONS00149301;status=both;transcript_id=BL03703_cuf1 xfSc0000000 AGAT three_prime_UTR 7096 8674 . - . ID=agat-three_prime_utr-1;Parent=BL03703_cuf1;exon_number=1;gene_id=BL03703;gene_name=CHRND;oldID=BlTCONS00149301;status=both;transcript_id=BL03703_cuf1 -xfSc0000000 AGAT mRNA 12803 13319 . - . ID=BL03703_evm0;Parent=BL03703;exon_number=1;gene_id=BL03703;gene_name=CHRND;oldID=BlTCONS00149301;status=both;transcript_id=BL03703_cuf1 +xfSc0000000 AGAT mRNA 12803 13319 . - . ID=BL03703_evm0;Parent=BL03703;exon_number=1;gene_id=BL03703;gene_name=CHRND;oldID=Blg02918.0;status=both;transcript_id=BL03703_evm0 xfSc0000000 protein_coding exon 12803 13024 . - . ID=agat-exon-3;Parent=BL03703_evm0;exon_number=2;gene_id=BL03703;gene_name=CHRND;oldID=Blg02918.0;status=both;transcript_id=BL03703_evm0 xfSc0000000 protein_coding exon 13283 13319 . - . ID=agat-exon-2;Parent=BL03703_evm0;exon_number=1;gene_id=BL03703;gene_name=CHRND;oldID=Blg02918.0;status=both;transcript_id=BL03703_evm0 xfSc0000000 protein_coding CDS 12803 13024 . - 2 ID=agat-cds-3;Parent=BL03703_evm0;exon_number=2;gene_id=BL03703;gene_name=CHRND;oldID=Blg02918.0;status=both;transcript_id=BL03703_evm0 xfSc0000000 protein_coding CDS 13283 13319 . - 0 ID=agat-cds-2;Parent=BL03703_evm0;exon_number=1;gene_id=BL03703;gene_name=CHRND;oldID=Blg02918.0;status=both;transcript_id=BL03703_evm0 -xfSc0000000 AGAT RNA 7096 9184 . - . ID=BL03703_cuf0;Parent=BL03703;exon_number=1;gene_id=BL03703;gene_name=CHRND;oldID=BlTCONS00149301;status=both;transcript_id=BL03703_cuf1 +xfSc0000000 AGAT RNA 7096 9184 . - . ID=BL03703_cuf0;Parent=BL03703;exon_number=1;gene_id=BL03703;gene_name=CHRND;oldID=BlTCONS00149300;status=both;transcript_id=BL03703_cuf0 xfSc0000000 protein_coding exon 7096 9184 . - . ID=agat-exon-4;Parent=BL03703_cuf0;exon_number=1;gene_id=BL03703;gene_name=CHRND;oldID=BlTCONS00149300;status=both;transcript_id=BL03703_cuf0 xfSc0000437 AGAT gene 3712 3937 . - . ID=BL03702;exon_number=2;gene_id=BL03702;gene_name=AHR;oldID=Blg03689.3;status=both;transcript_id=BL03702_evm3 xfSc0000437 AGAT mRNA 3712 3937 . - . ID=BL03702_evm3;Parent=BL03702;exon_number=2;gene_id=BL03702;gene_name=AHR;oldID=Blg03689.3;status=both;transcript_id=BL03702_evm3 diff --git a/t/scripts_output/out/agat_sp_kraken_assess_liftover_1.gff b/t/scripts_output/out/agat_sp_kraken_assess_liftover_1.gff index 569abf0d..b5aef8d9 100644 --- a/t/scripts_output/out/agat_sp_kraken_assess_liftover_1.gff +++ b/t/scripts_output/out/agat_sp_kraken_assess_liftover_1.gff @@ -1,6 +1,6 @@ ##gff-version 3 scaffold_823 AGAT gene 105596 142103 . + . ID=PP1S9_164V6;kraken_mapped=partial;gene_id=PP1S9_164V6;protein_id=PP1S9_164V6.1;transcript_id=PP1S9_164V6.1 -scaffold_823 AGAT mRNA 105596 129298 . + . ID=transcript:PP1S9_164V6.2;Parent=PP1S9_164V6;kraken_mapped=100.00%25;description=Mapped at 100.00%25;gene_id=PP1S9_164V6;protein_id=PP1S9_164V6.1;transcript_id=PP1S9_164V6.1 +scaffold_823 AGAT mRNA 105596 129298 . + . ID=transcript:PP1S9_164V6.2;Parent=PP1S9_164V6;kraken_mapped=100.00%25;description=Mapped at 100.00%25;gene_id=PP1S9_164V6;protein_id=PP1S9_164V6.2;transcript_id=PP1S9_164V6.2 scaffold_823 jgi exon 105596 105903 . + . ID=PP1S9_164V6.2.exon1;Parent=transcript:PP1S9_164V6.2;kraken_mapped=TRUE;Name=PP1S9_164V6.2.exon1;constitutive=0;ensembl_end_phase=2;ensembl_phase=0;exon_id=PP1S9_164V6.2.exon1;gene_id=PP1S9_164V6;rank=1;transcript_id=PP1S9_164V6.2 scaffold_823 jgi exon 106102 106323 . + . ID=PP1S9_164V6.2.exon2;Parent=transcript:PP1S9_164V6.2;kraken_mapped=TRUE;Name=PP1S9_164V6.2.exon2;constitutive=0;ensembl_end_phase=2;ensembl_phase=2;exon_id=PP1S9_164V6.2.exon2;gene_id=PP1S9_164V6;rank=2;transcript_id=PP1S9_164V6.2 scaffold_823 jgi exon 106856 107014 . + . ID=PP1S9_164V6.2.exon3;Parent=transcript:PP1S9_164V6.2;kraken_mapped=TRUE;Name=PP1S9_164V6.2.exon3;constitutive=0;ensembl_end_phase=2;ensembl_phase=2;exon_id=PP1S9_164V6.2.exon3;gene_id=PP1S9_164V6;rank=3;transcript_id=PP1S9_164V6.2