Browse Source

Merge branch '7.x-3.x' into all-contributors/add-dsenalik

Stephen Ficklin 3 years ago
parent
commit
157bd73ea0
100 changed files with 1911 additions and 455 deletions
  1. 46 0
      .all-contributorsrc
  2. 136 0
      .github/workflows/phpunit-tests.yml
  3. 0 86
      .travis.yml
  4. 64 61
      README.md
  5. 1 1
      composer.json
  6. 3 3
      docs/contributing/governance.rst
  7. 17 3
      docs/contributing/pull_requests.rst
  8. 1 0
      docs/dev_guide.rst
  9. BIN
      docs/dev_guide/CI.create-badge.png
  10. 165 0
      docs/dev_guide/CI.rst
  11. 3 3
      docs/dev_guide/chado.rst
  12. 3 3
      docs/dev_guide/custom_data_loader.rst
  13. 18 18
      docs/dev_guide/custom_field.rst
  14. 1 1
      docs/dev_guide/custom_field/ajax_custom_formatter.rst
  15. 16 16
      docs/dev_guide/custom_field/create_instance.rst
  16. 7 7
      docs/dev_guide/custom_field/custom_formatter.rst
  17. 3 3
      docs/dev_guide/custom_field/custom_widget.rst
  18. 16 16
      docs/dev_guide/custom_field/manual_field_creation.rst
  19. 3 3
      docs/dev_guide/custom_field/select_vocab_terms.rst
  20. 3 3
      docs/dev_guide/custom_web_services.rst
  21. 2 2
      docs/dev_guide/data_structures.rst
  22. 2 2
      docs/dev_guide/exporting_field_settings.rst
  23. 1 1
      docs/dev_guide/introduction.rst
  24. 1 0
      docs/extensions.rst
  25. 12 0
      docs/extensions/administrative.rst
  26. 12 0
      docs/extensions/breeding.rst
  27. 5 1
      docs/extensions/data_input.rst
  28. 0 8
      docs/extensions/in_development.rst
  29. 1 1
      docs/extensions/module_rating.rst
  30. 1 1
      docs/extensions/search.rst
  31. 16 0
      docs/extensions/visualization.rst
  32. 1 1
      docs/user_guide/bulk_loader.rst
  33. 2 2
      docs/user_guide/content_types/configuring_page_display.rst
  34. 1 1
      docs/user_guide/content_types/field_loading.rst
  35. 11 17
      docs/user_guide/example_genomics/func_annots/setup.rst
  36. BIN
      docs/user_guide/example_genomics/func_annots/setup2.png
  37. BIN
      docs/user_guide/example_genomics/genomes_genes.1.png
  38. BIN
      docs/user_guide/example_genomics/genomes_genes.5.png
  39. BIN
      docs/user_guide/example_genomics/genomes_genes.6.png
  40. BIN
      docs/user_guide/example_genomics/genomes_genes.7.png
  41. BIN
      docs/user_guide/example_genomics/genomes_genes.8.png
  42. BIN
      docs/user_guide/example_genomics/genomes_genes.9.png
  43. 79 22
      docs/user_guide/example_genomics/genomes_genes.rst
  44. 1 1
      docs/user_guide/example_genomics/organisms.rst
  45. 8 9
      docs/user_guide/example_genomics/pub_import.rst
  46. 1 1
      docs/user_guide/install_tripal/custom_theme.rst
  47. 1 1
      docs/user_guide/install_tripal/drupal_home.rst
  48. 1 1
      docs/user_guide/install_tripal/server_setup.rst
  49. 1 1
      docs/user_guide/install_tripal/upgrade_from_tripal2.rst
  50. 1 1
      docs/user_guide/job_management.rst
  51. 1 1
      docs/user_guide/searching/search_api.rst
  52. 1 1
      legacy/tripal_analysis/tripal_analysis.info
  53. 1 1
      legacy/tripal_analysis/tripal_analysis.views_default.inc
  54. 1 1
      legacy/tripal_contact/tripal_contact.info
  55. 1 1
      legacy/tripal_contact/tripal_contact.views_default.inc
  56. 1 1
      legacy/tripal_core/api/tripal_core.chado_nodes.api.inc
  57. 2 2
      legacy/tripal_core/api/tripal_core.chado_nodes.properties.api.inc
  58. 2 2
      legacy/tripal_core/api/tripal_core.chado_nodes.relationships.api.inc
  59. 1 1
      legacy/tripal_core/tripal_core.info
  60. 1 1
      legacy/tripal_cv/tripal_cv.info
  61. 1 1
      legacy/tripal_db/tripal_db.info
  62. 1 1
      legacy/tripal_feature/includes/tripal_feature.delete.inc
  63. 1 1
      legacy/tripal_feature/theme/templates/tripal_feature_alignments.tpl.php
  64. 1 1
      legacy/tripal_feature/tripal_feature.info
  65. 1 2
      legacy/tripal_feature/tripal_feature.module
  66. 1 1
      legacy/tripal_featuremap/tripal_featuremap.info
  67. 1 1
      legacy/tripal_featuremap/tripal_featuremap.views_default.inc
  68. 1 1
      legacy/tripal_genetic/tripal_genetic.info
  69. 1 1
      legacy/tripal_genetic/tripal_genetic.views_default.inc
  70. 1 1
      legacy/tripal_library/tripal_library.info
  71. 1 1
      legacy/tripal_library/tripal_library.views_default.inc
  72. 1 1
      legacy/tripal_natural_diversity/tripal_natural_diversity.info
  73. 1 1
      legacy/tripal_organism/includes/tripal_organism.chado_node.inc
  74. 1 1
      legacy/tripal_organism/tripal_organism.info
  75. 1 1
      legacy/tripal_phenotype/tripal_phenotype.info
  76. 1 1
      legacy/tripal_phenotype/tripal_phenotype.views_default.inc
  77. 129 110
      legacy/tripal_phylogeny/theme/js/tripal_phylogeny.js
  78. 2 2
      legacy/tripal_phylogeny/tripal_phylogeny.drush.inc
  79. 1 1
      legacy/tripal_phylogeny/tripal_phylogeny.info
  80. 1 1
      legacy/tripal_project/tripal_project.info
  81. 1 1
      legacy/tripal_project/tripal_project.views_default.inc
  82. 1 1
      legacy/tripal_pub/includes/tripal_pub.admin.inc
  83. 1 1
      legacy/tripal_pub/includes/tripal_pub.chado_node.inc
  84. 1 1
      legacy/tripal_pub/tripal_pub.info
  85. 0 3
      legacy/tripal_pub/tripal_pub.module
  86. 1 1
      legacy/tripal_stock/tripal_stock.info
  87. 1 1
      legacy/tripal_stock/tripal_stock.module
  88. 1 1
      legacy/tripal_stock/tripal_stock.views_default.inc
  89. 1 1
      legacy/tripal_views/tripal_views.info
  90. 41 0
      tests/tripal_chado/data/empty_landmarks.fasta
  91. 499 0
      tests/tripal_chado/data/gff_duplicate_ids.gff
  92. 4 0
      tests/tripal_chado/data/gff_invalidstartend.gff
  93. 6 0
      tests/tripal_chado/data/gff_phase.gff
  94. 6 0
      tests/tripal_chado/data/gff_phase_invalid_character.gff
  95. 6 0
      tests/tripal_chado/data/gff_phase_invalid_number.gff
  96. 493 0
      tests/tripal_chado/data/gff_protein_generation.gff
  97. 4 0
      tests/tripal_chado/data/gff_rightarrow_id.gff
  98. 5 0
      tests/tripal_chado/data/gff_score.gff
  99. 5 0
      tests/tripal_chado/data/gff_seqid_invalid_character.gff
  100. 6 0
      tests/tripal_chado/data/gff_strand.gff

+ 46 - 0
.all-contributorsrc

@@ -158,6 +158,52 @@
         "code",
         "code",
         "question"
         "question"
       ]
       ]
+    },
+    {
+      "login": "par12005",
+      "name": "par12005",
+      "avatar_url": "https://avatars0.githubusercontent.com/u/38262122?v=4",
+      "profile": "https://github.com/par12005",
+      "contributions": [
+        "code",
+        "question"
+      ]
+    },
+    {
+      "login": "srobb1",
+      "name": "Sofia Robb",
+      "avatar_url": "https://avatars0.githubusercontent.com/u/1072991?v=4",
+      "profile": "http://sofiarobb.com",
+      "contributions": [
+        "code"
+      ]
+    },
+    {
+      "login": "katherynbuble",
+      "name": "katherynbuble",
+      "avatar_url": "https://avatars3.githubusercontent.com/u/59714566?v=4",
+      "profile": "https://github.com/katherynbuble",
+      "contributions": [
+        "code"
+      ]
+    },
+    {
+      "login": "risharde",
+      "name": "risharde",
+      "avatar_url": "https://avatars3.githubusercontent.com/u/33866403?v=4",
+      "profile": "https://github.com/risharde",
+      "contributions": [
+        "code"
+      ]
+    },
+    {
+      "login": "pgrimaud",
+      "name": "Pierre Grimaud",
+      "avatar_url": "https://avatars1.githubusercontent.com/u/1866496?v=4",
+      "profile": "https://github.com/pgrimaud",
+      "contributions": [
+        "doc"
+      ]
     }
     }
   ],
   ],
   "contributorsPerLine": 7,
   "contributorsPerLine": 7,

+ 136 - 0
.github/workflows/phpunit-tests.yml

@@ -0,0 +1,136 @@
+# Run our PHPUnit tests
+name: PHPUnit-Tests
+
+# Controls when the action will run.
+# Run this workflow every time a new commit is pushed to your repository
+on: [push, pull_request]
+
+# A workflow run is made up of one or more jobs that can run sequentially or in parallel
+jobs:
+  # This workflow contains a single job called "build"
+  run-tests:
+    # The type of runner that the job will run on
+    runs-on: ubuntu-latest
+    # Matrix Build for this job.
+    strategy:
+      matrix:
+        php-versions: ['7.1', '7.2']
+    # Name the matrix build so we can tell them apart.
+    name: PHPUnit Testing of Tripal Core (PHP ${{ matrix.php-versions }})
+
+    # Service containers to run with `run-tests`
+    services:
+      # Label used to access the service container
+      postgres:
+        # Docker Hub image
+        image: postgres
+        env:
+          POSTGRES_USER: postgres
+          POSTGRES_PASSWORD: dbpass
+          POSTGRES_DB: test_db
+        # Set health checks to wait until postgres has started
+        options: >-
+          --health-cmd pg_isready
+          --health-interval 10s
+          --health-timeout 5s
+          --health-retries 5
+        ports:
+          # Maps tcp port 5432 on service container to the host
+          - 5432:5432
+
+    # Steps represent a sequence of tasks that will be executed as part of the job
+    steps:
+      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
+      - name: Checkout Repository
+        uses: actions/checkout@v2
+      # Sets up the PHP environment for PHP 7.2
+      - name: Setup PHP
+        uses: shivammathur/setup-php@v2
+        with:
+          php-version: ${{ matrix.php-versions }}
+          # Install extensions for PHP-PostgreSQL
+          extensions: mbstring, intl, php-pgsql, php-gd, php-xml
+          # Increase memory limit to 2G
+          ini-values: memory_limit=2G
+          # Enable xdebug for coverage reporting
+          coverage: xdebug
+          # Install composer and phpunit globally.
+          tools: composer, phpunit
+      # Install Drush 8.x globally
+      # NOTE: `drush` is not available without the full path.
+      #       I tried adding it to the path but that broke other things.
+      - name: Install Drush
+        run: |
+          composer global require "drush/drush:~8"
+          /home/runner/.composer/vendor/bin/drush --version
+      # Install Drupal and Drupal module dependencies for Tripal.
+      # It also patches Drupal.
+      - name: Install Drupal
+        env:
+          DRUSH: "/home/runner/.composer/vendor/bin/drush"
+          DRUPAL_ROOT: "/home/runner/work/drupal"
+          POSTGRES_CONNECTION_STRING: 'pgsql://postgres:dbpass@localhost:5432/test_db'
+          ACCOUNT_NAME: tripaladmin
+          ACCOUNT_PASS: somereallysecurepassword
+        run: |
+          echo "==> Downloading Drupal"
+          cd /home/runner/work
+          $DRUSH dl drupal-7 -y
+          mv drupal-7* drupal
+          echo "==> Installing Drupal"
+          cd $DRUPAL_ROOT
+          $DRUSH si -y --root=$DRUPAL_ROOT \
+                --db-url=$POSTGRES_CONNECTION_STRING \
+                --account-name=$ACCOUNT_NAME \
+                --account-pass=$ACCOUNT_PASS \
+                --site-mail=admin@example.com \
+                --site-name=Tripal3
+          echo "==> Downloading dependencies"
+          $DRUSH dl -y views ctools entity redirect date ds field_group field_group_table
+          echo "==> Enabling Dependencies"
+          $DRUSH en -y views ctools entity redirect date ds field_group field_group_table
+          echo "==> Apply Drupal Patch"
+          cd $DRUPAL_ROOT
+          wget --no-check-certificate https://drupal.org/files/drupal.pgsql-bytea.27.patch
+          patch -p1 < drupal.pgsql-bytea.27.patch
+      # Install Tripal, Chado and prepares the Drupal/Chado databases
+      # Also patches views.
+      - name: Install Tripal
+        env:
+          DRUSH: "/home/runner/.composer/vendor/bin/drush"
+          DRUPAL_ROOT: "/home/runner/work/drupal"
+          POSTGRES_CONNECTION_STRING: 'pgsql://postgres:dbpass@localhost:5432/test_db'
+          ACCOUNT_NAME: tripaladmin
+          ACCOUNT_PASS: somereallysecurepassword
+        run: |
+          echo "==> Move Tripal into the Drupal modules directory"
+          ls /home/runner/work/tripal/tripal
+          cp -R /home/runner/work/tripal/tripal $DRUPAL_ROOT/sites/all/modules
+          echo "==> Apply Views Patch"
+          cd $DRUPAL_ROOT/sites/all/modules/views
+          patch -p1 < ../tripal/tripal_chado_views/views-sql-compliant-three-tier-naming-1971160-30.patch
+          echo "==> Install Tripal"
+          cd $DRUPAL_ROOT
+          $DRUSH en -y tripal tripal_chado tripal_chado_views tripal_ws tripal_ds
+          echo "==> Install Chado"
+          $DRUSH eval "module_load_include('inc', 'tripal_chado', 'includes/tripal_chado.install'); tripal_chado_load_drush_submit('Install Chado v1.3');"
+          $DRUSH trp-run-jobs --username=$ACCOUNT_NAME
+          echo "==> Prepare Chado"
+          $DRUSH eval "module_load_include('inc', 'tripal_chado', 'includes/setup/tripal_chado.setup'); tripal_chado_prepare_drush_submit();"
+          $DRUSH trp-run-jobs --username=$ACCOUNT_NAME
+      # Runs the PHPUnit tests.
+      # https://github.com/mheap/phpunit-github-actions-printer is used
+      # to report PHPUnit fails in a meaningful way to github in PRs.
+      - name: PHPUnit Tests
+        env:
+          DRUSH: "/home/runner/.composer/vendor/bin/drush"
+          DRUPAL_ROOT: "/home/runner/work/drupal"
+          POSTGRES_CONNECTION_STRING: 'pgsql://postgres:dbpass@localhost:5432/test_db'
+          ACCOUNT_NAME: tripaladmin
+          ACCOUNT_PASS: somereallysecurepassword
+        run: |
+          cd $DRUPAL_ROOT/sites/all/modules/tripal
+          composer require --dev mheap/phpunit-github-actions-printer
+          composer update
+          cp tests/.travis.env tests/.env
+          ./vendor/bin/phpunit --printer mheap\\GithubActionsReporter\\Printer

+ 0 - 86
.travis.yml

@@ -1,86 +0,0 @@
-language: php
-
-services:
-  - docker
-  - postgresql
-
-sudo: required
-
-php:
-  - 7.1
-  - 7.2
-#  PHP 7.3 is not yet supported (issue: https://www.drupal.org/project/drupal/issues/3012308)
-#  - 7.3
-
-env:
-  - BASE_URL="http://127.0.0.1:8080"
-
-install:
-  - composer global require "drush/drush:~8"
-
-before_script:
-  - docker pull statonlab/tripal2
-  - psql -c "create database test_db encoding 'utf-8';" -U postgres
-  - psql -c "alter role postgres with password 'dbpass';" -U postgres
-  - cd ..
-
-  # Set additional environment variables
-  - export PATH="$HOME/.config/composer/vendor/bin:$PATH"
-  - export DRUPAL_ROOT="$(pwd)/drupal"
-
-  # Download and install Drupal
-  - drush dl drupal-7 -y
-  - mv drupal-7* drupal
-  - cd drupal
-  # Run the php server
-  - php -S 127.0.0.1:8080 &
-  - drush si -y --db-url='pgsql://postgres:dbpass@localhost:5432/test_db'
-                --account-name='admin'
-                --account-pass='admin_pass'
-                --site-mail='admin@example.com'
-                --site-name='Tripal 3'
-
-  # Download Dependencies
-  - drush dl -y field_group, field_group_table, field_formatter_class, field_formatter_settings, ctools, date, devel,
-                ds, link, entity, libraries, redirect, token, uuid, jquery_update, views, webform
-
-  # Enable dependencies
-  - drush en -y field_group, field_group_table, field_formatter_class, field_formatter_settings, ctools, date, devel,
-              ds, link, entity, libraries, redirect, token uuid, jquery_update, views, webform
-
-  # up memory limit of PHP
-  - echo "memory_limit=2G" >> ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/travis.ini
-
-
-script:
-  # Link our repo to the modules directory
-  - mv ../tripal sites/all/modules/tripal
-
-  # Run a docker container with tripal 2 pre-installed
-  - docker run -it -d --rm --name tripal2 -v "$(pwd)/sites/all/modules/tripal":/tripal statonlab/tripal2
-
-  # Apply patches
-  - wget --no-check-certificate https://drupal.org/files/drupal.pgsql-bytea.27.patch
-  - patch -p1 < drupal.pgsql-bytea.27.patch
-  - cd sites/all/modules/views
-  - patch -p1 < ../tripal/tripal_chado_views/views-sql-compliant-three-tier-naming-1971160-30.patch
-  - cd ../tripal
-
-  # Install Tripal
-  - drush en -y tripal tripal_chado tripal_chado_views tripal_ds tripal_ws
-  - drush eval "module_load_include('inc', 'tripal_chado', 'includes/tripal_chado.install'); tripal_chado_load_drush_submit('Install Chado v1.3');"
-  - drush trp-run-jobs --username=admin
-
-  # Prepare Chado
-  - drush eval "module_load_include('inc', 'tripal_chado', 'includes/setup/tripal_chado.setup'); tripal_chado_prepare_drush_submit();"
-  - drush trp-run-jobs --username=admin
-
-  # Run PHPUnit tests
-  - composer update
-  - cp tests/.travis.env tests/.env
-  - ./vendor/bin/phpunit
-
-  # Test Tripal v2 to v3 upgrade steps
-  - docker exec -it tripal2 drush pm-disable tripal_core -y
-  - docker exec -it tripal2 bash -c "rm -rf /modules/tripal && ln -s /tripal /modules/tripal"
-  - docker exec -it tripal2 drush en -y tripal

+ 64 - 61
README.md

@@ -1,4 +1,4 @@
-[![7.x-3.x Build Status](https://travis-ci.org/tripal/tripal.svg?branch=7.x-3.x)](https://travis-ci.org/tripal/tripal)
+![PHPUnit Tests](https://github.com/tripal/tripal/workflows/PHPUnit%20Tests/badge.svg)
 [![All Contributors](https://img.shields.io/badge/all_contributors-14-orange.svg?style=flat-square)](#contributors)
 [![All Contributors](https://img.shields.io/badge/all_contributors-14-orange.svg?style=flat-square)](#contributors)
 [![Documentation Status](https://readthedocs.org/projects/tripal/badge/?version=latest)](https://tripal.readthedocs.io/en/latest/?badge=latest)
 [![Documentation Status](https://readthedocs.org/projects/tripal/badge/?version=latest)](https://tripal.readthedocs.io/en/latest/?badge=latest)
 
 
@@ -7,76 +7,74 @@
 
 
 ![alt tag](https://raw.githubusercontent.com/tripal/tripal/7.x-3.x/tripal/theme/images/tripal_logo.png)
 ![alt tag](https://raw.githubusercontent.com/tripal/tripal/7.x-3.x/tripal/theme/images/tripal_logo.png)
 
 
-Tripal is a toolkit for constructing online biological (genetics, genomics, breeding, etc.) community databases, and Tripal is a member of the [GMOD](http://www.gmod.org) family of tools. **Tripal v3** provides integration with the [GMOD Chado database](http://gmod.org/wiki/Chado_-_Getting_Started) by default.
-
-Genetics, genomics, breeding, and other biological data are increasingly complicated and time-consuming to publish online for others to search, browse and make discoveries with. Tripal provides a framework to reduce the complexity of creating such a site, and provides access to a community of similar groups that share community-standards. The users of Tripal are encouraged to interact to address questions and learn the best practices for sharing, storing, and visualizing complex biological data.
-
-The primary goals of Tripal are to:
-1.	Provide a framework for creating sites that allow display, search, and visualization of biological data, including genetics, genomics, and breeding data;
-2.	Use community-derived standards and ontologies to facilitate continuity between sites and foster collaboration and sharing;
-3.	Provide an out-of-the-box setup for a genomics site to put new genome assemblies and annotations online; and
-4.	Provide Application Programming Interfaces (APIs) to support customized displays, look-and-feel, and new functionality.
-
-
-# Features
-The following major features
-are available in Tripal v3.
-
-* Tripal v3's design is centered around controlled vocabularies and ontologies. 
-  This allows for greater integration with the semantic web and will help
-  support data exchange between Tripal sites.
-* RESTful web services.  Tripal v3 introduces RESTful web services for Tripal.
-  The resources provided by these web services uses JSON-LD and WC3 Hydra 
-  vocabulary to deliver content. 
-* Tripal v3 introduces new content pages. In older versions of Tripal all 
-  content was provided via Drupal "nodes".  Now content is delivered using
-  new content types (e.g. gene, genetic_marker, organism, germplasm, etc.)
-  and the site admin controls which content types are available on the site. 
-* Chado support:
-  * Tripal v3 represents a major redesign from previous versions.  Previously,
-    Chado was the only storage backend supported. Tripal v3 provides by default
-    support for Chado, but also sports a new design that affords integration of
-    other storage backends (including noSQL options).  
-  * A Chado v1.2 or v1.3 installer
-  * Data loaders for ontologies (controlled vocabularies), GFF files, and 
-    FASTA files, publications (from PubMed and AGIRCOLA). 
-  * Generic Bulk Data Loader Modules allows for creation of custom loaders 
-    without programming (requires an understanding of Chado). 
-  * Supports creation of materialized views for faster data queries.
+Welcome to the home of Tripal Development! If you are thinking to yourself "What is Tripal?", head over to [our website, Tripal.info](http://tripal.info/).
 
 
+# Current Status
 
 
-# Required Dependencies
-* Drupal: 
-  * Drupal 7.x
-  * Drupal core modules: Search, Path and PHP modules.
-  * Drupal contributed modules: 
-    * [Views](http://drupal.org/project/views)
-    * [Entity API](http://drupal.org/project/entity)
-* PostgreSQL
-* PHP 5.5+
-* UNIX/Linux
+ - Recommended Version: ![GitHub release (latest by date)](https://img.shields.io/github/v/release/tripal/tripal?color=brightgreen)
+ - Development:
+    - [![Tripal 3](https://img.shields.io/badge/dev-7.x--3.x-yellow)](https://github.com/tripal/tripal): Focus is on bug fixes
+    - [![Tripal 4](https://img.shields.io/badge/dev-7.x--4.x-yellow)](https://github.com/tripal/t4d8): Full upgrade to Drupal 8/9 (development in [T4D8 Repository](https://github.com/tripal/t4d8)).
+ - Tripal ![Tripal 1.x](https://img.shields.io/badge/unsupported-7.x--1.x-red) and ![Tripal 2.x](https://img.shields.io/badge/unsupported-7.x--2.x-red) are no longer supported by the Project Management Committee, although we will accept community submitted fixes for Tripal 2.x.
+
+ # Resources
+
+  - For information on **how to use Tripal** through the Administrative Interface: [Tripal Users Guide](https://tripal.readthedocs.io/en/latest/user_guide.html)
+  - For help **extending Tripal** or understanding how it works: [Tripal Developers Guide](https://tripal.readthedocs.io/en/latest/dev_guide.html)
+  - To check if another group already developed the functionality you need: [Listing of **Available Extension Modules**](https://tripal.readthedocs.io/en/latest/extensions.html)
+  - Tripal is developed by a world-wide community! See the [description of our **Governance Structure**](https://tripal.readthedocs.io/en/latest/contributing/governance.html)
+  - If you are the head of a research group looking to fund Tripal Development: [Guide to **Funding Proposal** Development](https://tripal.readthedocs.io/en/latest/contributing/funding.html)
+  - For how to **install Tripal**, follow the instructions in the online Tripal User's Guide for [Tripal v2](https://tripal.info/tutorials/v2.x/installation) or [Tripal v3](https://tripal.readthedocs.io/en/latest/user_guide.html).
+  - For how to **upgrade from Tripal 2 to Tripal 3**, follow the [Upgrade Instructions](https://tripal.readthedocs.io/en/latest/user_guide/install_tripal/upgrade_from_tripal2.html) in the Tripal v3 User's Guide.
+
+# Contribution
 
 
+Looking to contribute? That's Amazing -Welcome!!! Here's a quick run-down to get you started:
 
 
-# Installation
-Please follow the instructions in the online Tripal User's Guide for [Tripal v2](https://tripal.info/tutorials/v2.x/installation) or [Tripal v3](https://tripal.readthedocs.io/en/latest/user_guide.html).
+ - We welcome all contributions!
+ - This github issue queue is open to: bug reports, usability concerns, performance issues, site administration or development questions, data storage discussions, etc.
+ - We ask that questions/concerns/bugs with **extension modules** be addressed in their respective repositories (including those under the Tripal organization).
+ - For **feature request**, please open an issue with detailed use cases and description. We would love to help you design a generic solution for the community whether it belongs in Tripal Core or an Extension module! Please wait to submit a PR until the Project Management Committee (PMC) indicates it is generally applicable and should be included in Core.
+ - For **potential bugs or concerns**, please open an issue being as descriptive as possible. Screenshots and steps to reproduce will help us, help you! If you know how to fix the issue, feel free to submit a pull request (PR) linked to the issue!
+ - For **documentation** contributions, click the "Edit on Github" link at the top of the page you want to improve! [Instructions for our flavour of ReadtheDocs can be found on ReadtheDocs](https://tripal.readthedocs.io/en/latest/contributing/documentation.html).
+ - See our quickstart if you need help on how to submit a PR: [ReadtheDocs, how to create a PR](https://tripal.readthedocs.io/en/latest/contributing/pull_requests.html#how-to-create-a-pr).
+ - Click on issues > New Issue for helpful issue templates.
+ - For Tripal 4 (Drupal 8/9), see the [T4D8 repository](https://github.com/tripal/t4d8).
 
 
+For more detailed guidelines see our [full Contribution Documentation](https://tripal.readthedocs.io/en/latest/contributing/pull_requests.html)!
 
 
-# Upgrade from Tripal v2.x to v3.x
-Please follow the [Upgrade Instructions](https://tripal.readthedocs.io/en/latest/user_guide/install_tripal/upgrade_from_tripal2.html) in the Tripal v3 User's Guide
 
 
+# Github Communication Tips
 
 
-# Customization
-Tripal can be used “as is” but also allows for complete customization.
-PHP-based template files are provided for all data types to allow for 
-precise customizations as required by the community. A well-developed 
-Tripal API provides a uniform set of variables and functions for 
-accessing any and all data within the Chado database. See the Tripal 3.x
-Developer's Handbook for additional details.
+ - Don’t be afraid to mention people (@username) who are knowledgeable on the topic or invested. We are academics and overcommitted, it’s too easy for issues to go unanswered: don’t give up on us!
+ - Likewise, don’t be shy about bumping an issue if no one responds after a few days. Balancing responsibilities is hard.
+ - Want to get more involved? Issues marked with “Good beginner issue” are a good place to start if you want to try your hand at submitting a PR.
+ - Everyone is encouraged/welcome to comment on the issue queue! Tell us if you
+     - are experiencing the same problem
+     - have tried a suggested fix
+     - know of a potential solution or work-around
+     - have an opinion, idea or feedback of any kind!
+ - Be kind when interacting with others on Github! (see Code of Conduct below for further guidelines). We want to foster a welcoming, inclusive community!
+     - Constructive criticism is welcome and encouraged but should be worded such that it is helpful :-) Direct criticism towards the idea or solution rather than the person and focus on alternatives or improvements.
 
 
+# Code of Conduct
+
+Be nice! If that’s insufficient, Tripal community defers to https://www.contributor-covenant.org/
+
+# Required Dependencies
+* Drupal:
+  * Drupal 7.x
+  * Drupal core modules: Search, Path and PHP modules.
+  * Drupal contributed modules:
+    * [Views](http://drupal.org/project/views)
+    * [Entity API](http://drupal.org/project/entity)
+* PostgreSQL 9.3 or higher (9.5 required for Chado 1.2 to 1.3 upgrade)
+* PHP 5.5+
+* UNIX/Linux
 
 
 # Development Testing
 # Development Testing
 
 
-To run PHP unit tests on your local system, run `composer install` to install developer-specific requirements.  Next, create a `.env` file in your `/Tests/` directory that defines the `DRUPAL_ROOT` variable, for example 
+To run PHP unit tests on your local system, run `composer install` to install developer-specific requirements.  Next, create a `.env` file in your `/Tests/` directory that defines the `DRUPAL_ROOT` variable, for example
 
 
 ```
 ```
 DRUPAL_ROOT=/var/www/html
 DRUPAL_ROOT=/var/www/html
@@ -85,7 +83,7 @@ Then run PHPUnit from your root Tripal directory.
 
 
 PHPUnit tests will also be run in the Travis CI build.
 PHPUnit tests will also be run in the Travis CI build.
 
 
-Read our [testing guidelines](tests/README.md)
+Read our [testing guidelines](https://tripal.readthedocs.io/en/latest/contributing/tests.html).
 
 
 ## Contributors
 ## Contributors
 
 
@@ -115,6 +113,11 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
   </tr>
   </tr>
   <tr>
   <tr>
     <td align="center"><a href="http://www.vcru.wisc.edu/simonlab/sdata/software/index.html"><img src="https://avatars3.githubusercontent.com/u/8419404?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Douglas Senalik</b></sub></a><br /><a href="https://github.com/tripal/tripal/commits?author=dsenalik" title="Code">💻</a> <a href="#question-dsenalik" title="Answering Questions">💬</a></td>
     <td align="center"><a href="http://www.vcru.wisc.edu/simonlab/sdata/software/index.html"><img src="https://avatars3.githubusercontent.com/u/8419404?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Douglas Senalik</b></sub></a><br /><a href="https://github.com/tripal/tripal/commits?author=dsenalik" title="Code">💻</a> <a href="#question-dsenalik" title="Answering Questions">💬</a></td>
+    <td align="center"><a href="https://github.com/par12005"><img src="https://avatars0.githubusercontent.com/u/38262122?v=4" width="100px;" alt=""/><br /><sub><b>par12005</b></sub></a><br /><a href="https://github.com/tripal/tripal/commits?author=par12005" title="Code">💻</a> <a href="#question-par12005" title="Answering Questions">💬</a></td>
+    <td align="center"><a href="http://sofiarobb.com"><img src="https://avatars0.githubusercontent.com/u/1072991?v=4" width="100px;" alt=""/><br /><sub><b>Sofia Robb</b></sub></a><br /><a href="https://github.com/tripal/tripal/commits?author=srobb1" title="Code">💻</a></td>
+    <td align="center"><a href="https://github.com/katherynbuble"><img src="https://avatars3.githubusercontent.com/u/59714566?v=4" width="100px;" alt=""/><br /><sub><b>katherynbuble</b></sub></a><br /><a href="https://github.com/tripal/tripal/commits?author=katherynbuble" title="Code">💻</a></td>
+    <td align="center"><a href="https://github.com/risharde"><img src="https://avatars3.githubusercontent.com/u/33866403?v=4" width="100px;" alt=""/><br /><sub><b>risharde</b></sub></a><br /><a href="https://github.com/tripal/tripal/commits?author=risharde" title="Code">💻</a></td>
+    <td align="center"><a href="https://github.com/pgrimaud"><img src="https://avatars1.githubusercontent.com/u/1866496?v=4" width="100px;" alt=""/><br /><sub><b>Pierre Grimaud</b></sub></a><br /><a href="https://github.com/tripal/tripal/commits?author=pgrimaud" title="Documentation">📖</a></td>
   </tr>
   </tr>
 </table>
 </table>
 
 
@@ -123,4 +126,4 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
 
 
 <!-- ALL-CONTRIBUTORS-LIST:END -->
 <!-- ALL-CONTRIBUTORS-LIST:END -->
 
 
-This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!
+This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!

+ 1 - 1
composer.json

@@ -1,5 +1,5 @@
 {
 {
-  "name": "tripal",
+  "name": "tripal/tripal",
   "description": "Tripal is an toolkit to facilitate construction of online genomic, genetic (and other biological) websites.",
   "description": "Tripal is an toolkit to facilitate construction of online genomic, genetic (and other biological) websites.",
   "require-dev": {
   "require-dev": {
     "doctrine/instantiator": "1.0.*",
     "doctrine/instantiator": "1.0.*",

+ 3 - 3
docs/contributing/governance.rst

@@ -24,7 +24,7 @@ These are developers who are extending Tripal. Extension contributors are encour
 
 
 Core Code Contributors
 Core Code Contributors
 ------------------------
 ------------------------
-Core Code Contributors are active members of the Tripal community who make suggestions to improve and/or contribute code to Tripal Core. Core Code Contributors are encouraged to submit pull requests to the Tripal core and attend monthly user calls. For more information, see the `Guidelines for Contributing to Tripal core <https://tripal.readthedocs.io/en/latest/dev_guide/contributing/pull_requests.html>`_.
+Core Code Contributors are active members of the Tripal community who make suggestions to improve and/or contribute code to Tripal Core. Core Code Contributors are encouraged to submit pull requests to the Tripal core and attend monthly user calls. For more information, see the `Guidelines for Contributing to Tripal core <https://tripal.readthedocs.io/en/latest/contributing/pull_requests.html>`_.
 
 
 Responsibilities include:
 Responsibilities include:
  - Monitor Tripal core issue queue.
  - Monitor Tripal core issue queue.
@@ -39,7 +39,7 @@ Responsibilities include:
  - Monitor Tripal core issue queue.
  - Monitor Tripal core issue queue.
  - Review and merge pull requests.
  - Review and merge pull requests.
 
 
-See the `guidelines for contributors <https://tripal.readthedocs.io/en/latest/dev_guide/contributing/pull_requests.html>`_ for more details.
+See the `guidelines for contributors <https://tripal.readthedocs.io/en/latest/contributing/pull_requests.html>`_ for more details.
 
 
 The Tripal Project Management Committee (PMC)
 The Tripal Project Management Committee (PMC)
 ------------------------------------------------
 ------------------------------------------------
@@ -55,7 +55,7 @@ Responsibilities include:
      - designing a module-specific REST API,
      - designing a module-specific REST API,
      - new technologies or libraries used by the core code.
      - new technologies or libraries used by the core code.
  - Avoid feature bloat; judge what contributions benefit many versus those that are specific to the needs of the contributor.
  - Avoid feature bloat; judge what contributions benefit many versus those that are specific to the needs of the contributor.
- - Final approval of submitting guidelines (see `guidelines for contribution <https://tripal.readthedocs.io/en/latest/dev_guide/contributing.html>`_).
+ - Final approval of submitting guidelines (see `guidelines for contribution <https://tripal.readthedocs.io/en/latest/contributing/pull_requests.html>`_).
  - Set coding standards.
  - Set coding standards.
  - Ensure Tripal remains generic and useful to a wide range of groups.
  - Ensure Tripal remains generic and useful to a wide range of groups.
 
 

+ 17 - 3
docs/contributing/pull_requests.rst

@@ -63,7 +63,7 @@ The goal of this document is to make it easy for **A)** contributors to make pul
 - PRs that address a specific issue **must** link to the related issue page.
 - PRs that address a specific issue **must** link to the related issue page.
     - In almost every case, there should be an issue for a PR.  This allows feedback and discussion before the coding happens.  Not grounds to reject, but encourage users to create issues at start of their PR.  Better late than never :).
     - In almost every case, there should be an issue for a PR.  This allows feedback and discussion before the coding happens.  Not grounds to reject, but encourage users to create issues at start of their PR.  Better late than never :).
 - Each PR **must** be tested/approved by at least 1 contributor, if approved, a "trusted committer" will merge the PR.
 - Each PR **must** be tested/approved by at least 1 contributor, if approved, a "trusted committer" will merge the PR.
-    - Testers **should** describe how the testing was performed if applicable (allows others to replicate the test).    
+    - Testers **should** describe how the testing was performed if applicable (allows others to replicate the test).
     - While Tripal's review body is small, the code review must be a thorough functional test.
     - While Tripal's review body is small, the code review must be a thorough functional test.
     - At the Project Management Committee's (PMC) discretion, a PR may be subject to a non-functional review.  Generally these are small and obvious commits.
     - At the Project Management Committee's (PMC) discretion, a PR may be subject to a non-functional review.  Generally these are small and obvious commits.
     - Tripal's guiding philosophy is to encourage open contribution.  With this in mind, committers should **work with contributors** to resolve issues in their PRs.  PRs that will not be merged should be closed, **transparently citing** the reason for closure.  In an ideal world, features that would be closed are discouraged at the **issue phase** before the code is written!
     - Tripal's guiding philosophy is to encourage open contribution.  With this in mind, committers should **work with contributors** to resolve issues in their PRs.  PRs that will not be merged should be closed, **transparently citing** the reason for closure.  In an ideal world, features that would be closed are discouraged at the **issue phase** before the code is written!
@@ -81,9 +81,23 @@ The goal of this document is to make it easy for **A)** contributors to make pul
 - PRs for new feature should remain open until adequately discussed (see guidelines below) and approved by a vote (all members of the PMC must vote in favour).
 - PRs for new feature should remain open until adequately discussed (see guidelines below) and approved by a vote (all members of the PMC must vote in favour).
 
 
 
 
-.. note::
+How to create a PR
+^^^^^^^^^^^^^^^^^^^^^
+
+There are great instructions on creating a PR on `Digital Ocean: How To Create a Pull Request on GitHub <https://www.digitalocean.com/community/tutorials/how-to-create-a-pull-request-on-github>`_.
+
+**The tl;dr version:**
+
+1. `Fork the repository <https://docs.github.com/en/github/getting-started-with-github/fork-a-repo>`_ or `update an existing fork <https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/syncing-a-fork>`_
+2. `Clone <https://docs.github.com/en/github/creating-cloning-and-archiving-repositories/cloning-a-repository>`_ the fork
+3. `Create a branch <https://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging>`_ specific to your change: ``[issue\_number]-[tripal\_version]-[short\_description]``
+4. Make your changes, `committing <https://git-scm.com/docs/git-commit#_examples>`_ often with useful commit messages.
+5. `Push <https://git-scm.com/docs/git-push#_examples>`_ your changes to your fork.
+6. `Create a PR by going to your fork <https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/creating-a-pull-request-from-a-fork>`_: target should be ``tripal:7.x-3.x``. For specifics, see guidelines above.
+
+.. note:
 
 
-  If you need more instructions creating a pull request, see for example the `KnowPulse workflow <https://knowpulse.readthedocs.io/en/latest/developer_docs/dev_workflow.html#workflow>`_
+  If you are a `committer <>`_, you can clone the Tripal repository directly with no need to create or maintain a fork. Please make sure you are always creating new branches off of ``7.x-3.x`` and that you have pulled all recent changes to ``7.x-3.x`` before creating a new branch.
 
 
 How PRs and Issues are Handled
 How PRs and Issues are Handled
 ------------------------------
 ------------------------------

+ 1 - 0
docs/dev_guide.rst

@@ -15,5 +15,6 @@ Developer's Guide
    dev_guide/exporting_field_settings
    dev_guide/exporting_field_settings
    dev_guide/custom_data_loader
    dev_guide/custom_data_loader
    dev_guide/custom_web_services
    dev_guide/custom_web_services
+   dev_guide/CI
    dev_guide/rtd
    dev_guide/rtd
    dev_guide/tutorials
    dev_guide/tutorials

BIN
docs/dev_guide/CI.create-badge.png


+ 165 - 0
docs/dev_guide/CI.rst

@@ -0,0 +1,165 @@
+
+Continuous Integration
+========================
+
+Continuous integration refers to an active code base where multiple developers are integrating their changes continuously into a single cohesive project. One of the biggest keys to making continuous integration work is testing before integrating! Tripal Test Suite makes developing tests using PHPUnit much easier and this tutorial will show you how to ensure those tests are run every time you push to GitHub!
+
+Using GitHub Workflows
+------------------------
+
+First, what is a GitHub Workflow? From GitHub, "a workflow is a configurable automated process made up of one or more jobs". I like to think of it as configuring a bioinformatics pipeline. For the purposes of this tutorial, we are telling GitHub how to execute our PHPUnit tests automatically.
+
+You can learn more about `GitHub Action Workflows from GitHub directly <https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/introduction-to-github-actions>`_. We will cover it breifly here specifically for Tripal PHPUnit testing but the official tutorial is still recommended.
+
+Telling GitHub about your workflow
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+This is as simple as creating your workflow file in the right place. You want to create a new file named `phpunit.yml` at `.github/workflows/` in your repository. GitHub will automatically know this file describes a workflow and will execute the workflow based on the configuration you provide.
+
+Configuring a workflow to run PHPUnit tests
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+All configuration will be done in the file created in step 1.
+
+First we provide the name, when we want to run the workflow (i.e. on push and PRs) and the basic structure of a workflow:
+
+.. code-block:: yaml
+
+  name: PHPUnit
+
+  # Controls when the workflow will run.
+  # Run this workflow every time a new commit is pushed to your repository
+  on: [push, pull_request]
+
+  jobs:
+    # This key is the name of the job.
+    run-tests:
+      # The type of system that the job will run on.
+      runs-on: ubuntu-latest
+
+
+We want our tests to be run twice, one for PHP 7.1 and another for PHP 7.1. This is done by specifing a matrix build which can be done as follows:
+
+.. code-block:: yaml
+
+  jobs:
+    # This key is the name of the job.
+    run-tests:
+      # The type of system that the job will run on.
+      runs-on: ubuntu-latest
+
+      # Matrix Build for this job.
+      strategy:
+        matrix:
+          php-versions: ['7.1', '7.2']
+
+      # Name the matrix build so we can tell them apart.
+      name: PHPUnit Testing (PHP ${{ matrix.php-versions }})
+
+We also want to tell GitHub to setup a PostgreSQL server for us. This is done using services:
+
+.. code-block:: yaml
+
+  jobs:
+    # This key is the name of the job.
+    run-tests:
+      # The type of system that the job will run on.
+      runs-on: ubuntu-latest
+
+      # Service containers to run with `run-tests`
+      services:
+        # Label used to access the service container
+        postgres:
+          # Docker Hub image
+          image: postgres
+          env:
+            POSTGRES_USER: tripaladmin
+            POSTGRES_PASSWORD: somesupersecurepassword
+            POSTGRES_DB: testdb
+          # Set health checks to wait until postgres has started
+          options: >-
+            --health-cmd pg_isready
+            --health-interval 10s
+            --health-timeout 5s
+            --health-retries 5
+          ports:
+            # Maps tcp port 5432 on service container to the host
+            - 5432:5432
+
+Finally we can actually tell GitHub what steps we want to run using this beautiful container we have setup! We want to:
+
+.. code-block:: yaml
+
+  jobs:
+    # This key is the name of the job.
+    run-tests:
+      # The type of system that the job will run on.
+      runs-on: ubuntu-latest
+
+      steps:
+      # 1) Checkout the repository and setup workspace.
+      - uses: actions/checkout@v2
+
+      # 2) Setup PHP according to the version passed in.
+      - name: Setup PHP
+        uses: shivammathur/setup-php@v2
+        with:
+          php-version: ${{ matrix.php-versions }}
+          extensions: mbstring, intl, php-pgsql, php-gd, php-xml
+          ini-values: memory_limit=2G
+          coverage: xdebug
+          tools: composer, phpunit
+
+      # 3) Install Drush/Drupal/Tripal
+      - name: Setup Drush, Drupal 7.x, Tripal 3.x
+        id: tripalsetup
+        uses: tripal/setup-tripal-action@7.x-3.x-1.0
+        with:
+          postgres_user: tripaladmin
+          postgres_pass: somesupersecurepassword
+          postgres_db: testdb
+
+      # 4) Install Tripal Extension Module.
+      - name: Install Tripal Extension Module
+        id: installextension
+        env:
+          DRUSH: ${{ steps.tripalsetup.outputs.drush_path }}
+          DRUPAL_ROOT: ${{ steps.tripalsetup.outputs.drupal_root }}
+        run: |
+          mkdir -p $DRUPAL_ROOT/sites/all/modules/example_module
+          cp -R * $DRUPAL_ROOT/sites/all/modules/example_module
+          cd $DRUPAL_ROOT
+          $DRUSH en -y example_module
+
+      # 5) Runs the PHPUnit tests.
+      # https://github.com/mheap/phpunit-github-actions-printer is used
+      # to report PHPUnit fails in a meaningful way to github in PRs.
+      - name: PHPUnit Tests
+        env:
+          DRUSH: ${{ steps.tripalsetup.outputs.drush_path }}
+          DRUPAL_ROOT: ${{ steps.tripalsetup.outputs.drupal_root }}
+        run: |
+          cd $DRUPAL_ROOT/sites/all/modules/example_module
+          composer require --dev mheap/phpunit-github-actions-printer --quiet
+          composer update --quiet
+          ./vendor/bin/phpunit --printer mheap\\GithubActionsReporter\\Printer
+
+In step 4 above, I have provided an example of what installing your extension module might look like. The run section will need to be modified according to your module and should include downloading and installing any dependencies, applying any patches and installing your module. If your tests require configuration then that should also be included here.
+
+In step 5 we run our PHPUnit tests! All you need to change here is the directory name for your module. The `mheap\\GithubActionsReporter\\Printer` will ensure any errors reported by PHPUnit are shown on your PR and Action summary.
+
+All steps before step 4 should be generic for any extension module! You can find the full configuration file on the `README of the SetupTripalAction <https://github.com/tripal/setup-tripal-action#usage>`_.
+
+Checking your Action
+----------------------
+
+Everytime you push commits to your repository and when you create a pull request, your action will be run. Thus to test your action, commit your phpunit.yml file created above to trigger the GitHub action. Then click on "Actions" at the top of your repository to see it in progress.
+
+If you created a pull request, you will see your workflow action in the checks section at the bottom of your pull request. From here you can click on Details to see the full running of the job.
+
+Adding the Badge to your README
+---------------------------------
+
+Click on Actions at the top of your repository, then click on one of the PHPUnit jobs which have already been submitted. This brings you to the job summary page where you will see a button with three dots in the top right corner. Click on this and then "Create status badge" to get the markdown to add to your README.
+
+.. image:: CI.create-badge.png

+ 3 - 3
docs/dev_guide/chado.rst

@@ -11,7 +11,7 @@ The Chado Query API
 
 
 Provides an API for querying of chado including inserting, updating, deleting and selecting from specific chado tables. There is also a generic function, ``chado_query()``, to execute and SQL statement on chado. It is ideal to use these functions to interact with chado in order to keep your module compatible with both local & external chado databases. Furthermore, it ensures connection to the chado database is taken care of for you.
 Provides an API for querying of chado including inserting, updating, deleting and selecting from specific chado tables. There is also a generic function, ``chado_query()``, to execute and SQL statement on chado. It is ideal to use these functions to interact with chado in order to keep your module compatible with both local & external chado databases. Furthermore, it ensures connection to the chado database is taken care of for you.
 
 
-Generic Queries to a specifc chado table
+Generic Queries to a specific chado table
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
 
 Selecting Records
 Selecting Records
@@ -222,8 +222,8 @@ To check the existence of a specific table and column, you can use the following
 
 
       [ do your query, etc. here ]
       [ do your query, etc. here ]
 
 
-    } else { [warn the admin using tripal_repot_error()] }
-  } else { [warn the admin using tripal_repot_error()] }
+    } else { [warn the admin using tripal_report_error()] }
+  } else { [warn the admin using tripal_report_error()] }
 
 
 Checking the Schema Version
 Checking the Schema Version
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

+ 3 - 3
docs/dev_guide/custom_data_loader.rst

@@ -331,7 +331,7 @@ To import data into Chado we will use the Tripal API. After splitting each line
     // We want to provide a progress report to the end-user so that they:
     // We want to provide a progress report to the end-user so that they:
     // 1) Recognize that the loader is not hung if running a large file, but is
     // 1) Recognize that the loader is not hung if running a large file, but is
     //    executing
     //    executing
-    // 2) Provides some indicatation for how long the file will take to load.
+    // 2) Provides some indication for how long the file will take to load.
     //
     //
     // Here we'll get the size of the file and tell the TripalImporter how
     // Here we'll get the size of the file and tell the TripalImporter how
     // many "items" we have to process (in this case bytes of the file).
     // many "items" we have to process (in this case bytes of the file).
@@ -369,7 +369,7 @@ To import data into Chado we will use the Tripal API. After splitting each line
 
 
       // Using the name of the feature from the file, see if we can find a
       // Using the name of the feature from the file, see if we can find a
       // record in the feature table of Chado that matches.  Note: in reality
       // record in the feature table of Chado that matches.  Note: in reality
-      // the feature table of Chado has a unique contraint on the uniquename,
+      // the feature table of Chado has a unique constraint on the uniquename,
       // organism_id and type_id columns of the feature table.  So, to ensure
       // organism_id and type_id columns of the feature table.  So, to ensure
       // we find a single record ideally we should include the organism_id and
       // we find a single record ideally we should include the organism_id and
       // type_id in our filter and that would require more widgets on our form!
       // type_id in our filter and that would require more widgets on our form!
@@ -450,7 +450,7 @@ In the code above we consider a byte as an item, and when all bytes from a file
 
 
 Testing Importers
 Testing Importers
 ------------------
 ------------------
-Unit Testing is a critically important component of any software project. You should always strive to write tests for your software.  Tripal provides unit testing using the ``phpunit`` testing framework. The Tripal Test Suite provides a strategy for adding tests for your new Importer.  It will automatically set up and bootstrap Drupal and Tripal for your testing environment, as well as provide database transactions for your tests, and factories to quickly generate data.  We will use the Tripal Test Suite to provide unit testing for our ``ExampelImporter``.
+Unit Testing is a critically important component of any software project. You should always strive to write tests for your software.  Tripal provides unit testing using the ``phpunit`` testing framework. The Tripal Test Suite provides a strategy for adding tests for your new Importer.  It will automatically set up and bootstrap Drupal and Tripal for your testing environment, as well as provide database transactions for your tests, and factories to quickly generate data.  We will use the Tripal Test Suite to provide unit testing for our ``ExampleImporter``.
 
 
 .. note::
 .. note::
   Before continuing, please install and configure Tripal Test Suite.
   Before continuing, please install and configure Tripal Test Suite.

+ 18 - 18
docs/dev_guide/custom_field.rst

@@ -5,24 +5,24 @@ The most common way that new content will be added to an existing site is by cre
 
 
 By default Tripal v3 provides many fields for display of Chado data. However, you may find that these fields do not display data as you want, or you want to display data that the current fields do not already provide. This section of the Handbook describes how to create new fields that are integrated into the display, search and exchange abilities of both Drupal and Tripal.
 By default Tripal v3 provides many fields for display of Chado data. However, you may find that these fields do not display data as you want, or you want to display data that the current fields do not already provide. This section of the Handbook describes how to create new fields that are integrated into the display, search and exchange abilities of both Drupal and Tripal.
 
 
-If you are already familiar with Drupal fields you may be aware of the API functions and hooks that Drupal provides.  However, for the quantity of fields needed to support biological data, the Drupal API hooks quickly become overwhelming.  Additionally, documentation for fields in the Drupal API can someitmes be difficult to discover when first working with fields.   Therefore, Tripal provides several new PHP classes to simplify creation of fields and to consolidate all functionality into one easy to find set of files.  To develop new fields you should be somewhat familar working with PHP's Object-Oriented Classes. The new classes provided by Tripal are these:
-
-
-+----------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| Class Name           | Description                                                                                                                                                                                                               |
-+----------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| TripalField          | The TripalField class provides the basic information about a new field. It provides loaders for extracting data from the database and functions for querying data managed by the field.                                   |
-+----------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| TripalFieldWidget    | The TripalFieldWidget class provides the necessary form elements when editing and Entity to allow the end-user to edit the value of the field (if desired). It provides the necessary validators and submittor functions. |
-+----------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| TripalFieldFormatter | The TripalFieldFormatter class provides the visualization of the field when viewed on the page.                                                                                                                           |
-+----------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| ChadoField           | The ChadoField class extends the TripalField class and provides the necessary settings to allow the field to map entities to data in Chado                                                                                |
-+----------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| ChadoFieldWidget     | Extends the TripalFieldWidget class but currently provides no additional functionality. Use this class when working with Chado data to ensure future backwards compatibility.                                             |
-+----------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| ChadoFieldFormatter  | Extends the TriplFieldFormatter class but currently provides no additional functionality. Use this class when working with Chado data to ensure future backwards compatibility.                                           |
-+----------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+If you are already familiar with Drupal fields you may be aware of the API functions and hooks that Drupal provides.  However, for the quantity of fields needed to support biological data, the Drupal API hooks quickly become overwhelming.  Additionally, documentation for fields in the Drupal API can sometimes be difficult to discover when first working with fields.   Therefore, Tripal provides several new PHP classes to simplify creation of fields and to consolidate all functionality into one easy to find set of files.  To develop new fields you should be somewhat familiar working with PHP's Object-Oriented Classes. The new classes provided by Tripal are these:
+
+
++----------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| Class Name           | Description                                                                                                                                                                                                              |
++----------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| TripalField          | The TripalField class provides the basic information about a new field. It provides loaders for extracting data from the database and functions for querying data managed by the field.                                  |
++----------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| TripalFieldWidget    | The TripalFieldWidget class provides the necessary form elements when editing an Entity to allow the end-user to edit the value of the field (if desired). It provides the necessary validators and submitter functions. |
++----------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| TripalFieldFormatter | The TripalFieldFormatter class provides the visualization of the field when viewed on the page.                                                                                                                          |
++----------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| ChadoField           | The ChadoField class extends the TripalField class and provides the necessary settings to allow the field to map entities to data in Chado                                                                               |
++----------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| ChadoFieldWidget     | Extends the TripalFieldWidget class but currently provides no additional functionality. Use this class when working with Chado data to ensure future backwards compatibility.                                            |
++----------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| ChadoFieldFormatter  | Extends the TriplFieldFormatter class but currently provides no additional functionality. Use this class when working with Chado data to ensure future backwards compatibility.                                          |
++----------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 
 
 
 
 
 

+ 1 - 1
docs/dev_guide/custom_field/ajax_custom_formatter.rst

@@ -36,7 +36,7 @@ The selector has specified that wrapper, and the AJAX callback function ``exampl
       $selected = isset($form_state['values']['featuremap_select']);
       $selected = isset($form_state['values']['featuremap_select']);
     }
     }
 
 
-    // We need to provide a container for Dupal AJAX to replace.
+    // We need to provide a container for Drupal AJAX to replace.
     // Here we use a fieldset with a set ID which we can refer to below.
     // Here we use a fieldset with a set ID which we can refer to below.
     $form['rendered_maps'] = [
     $form['rendered_maps'] = [
       '#type' => 'fieldset',
       '#type' => 'fieldset',

+ 16 - 16
docs/dev_guide/custom_field/create_instance.rst

@@ -2,14 +2,14 @@ Attach Fields to Content Types
 ==============================
 ==============================
 In summary, creation of a new field requires creation of three classes that inherit from the ``TripalField``, ``TripalFieldWidget`` and ``TripalFieldFormatter`` base classes.  If the fields are created correctly and placed in the ``includes/TripalFields`` directory of your module then Tripal will automatically find them.  However, the field is not yet attached to any content type. They must be attached.  Fields can be attached programmatically or via the online Drupal interface by a site admin. 
 In summary, creation of a new field requires creation of three classes that inherit from the ``TripalField``, ``TripalFieldWidget`` and ``TripalFieldFormatter`` base classes.  If the fields are created correctly and placed in the ``includes/TripalFields`` directory of your module then Tripal will automatically find them.  However, the field is not yet attached to any content type. They must be attached.  Fields can be attached programmatically or via the online Drupal interface by a site admin. 
 
 
-The hook_bundle_field_info() function
+The hook_bundle_fields_info() function
 -------------------------------------
 -------------------------------------
- The three TripalField classes simply define how the field will function, but Drupal does not yet know about the field.  The ``hook_bundle_field_info`` function tells Drupal about your field. It must be implemented in a custom Drupal module, and provides an array that tells Drupal about the fields and the classes to use for the field.  Suppose we were creating a field named ``obi__genus`` which displays the Genus for a species and we have a custom module named ``tripal_org2``.  The hook function would be named ``tripal_org2_bundle_field_info()``:
+ The three TripalField classes simply define how the field will function, but Drupal does not yet know about the field.  The ``hook_bundle_fields_info`` function tells Drupal about your field. It must be implemented in a custom Drupal module, and provides an array that tells Drupal about the fields and the classes to use for the field.  Suppose we were creating a field named ``obi__genus`` which displays the Genus for a species and we have a custom module named ``tripal_org2``.  The hook function would be named ``tripal_org2_bundle_fields_info()``:
 
 
 .. code-block:: php
 .. code-block:: php
   :linenos:
   :linenos:
 
 
-  function tripal_org2_bundle_field_info($entity_type, $bundle) {
+  function tripal_org2_bundle_fields_info($entity_type, $bundle) {
     $info = [];
     $info = [];
     
     
     // Make sure this bundle is an organism (OBI:0100026) then we'll attach our 
     // Make sure this bundle is an organism (OBI:0100026) then we'll attach our 
@@ -38,15 +38,15 @@ This function receives as its second argument the ``$bundle`` object. This is th
 
 
 The settings indicate the field name, the field type, the cardinality (how many values are allowed), any default settings and the storage type.  Because we expect our data to come from Chado we set the ``field_chado_storage`` as the type.  The ``locked`` setting is set to FALSE indicating that Drupal will allow the field to be deleted if the site developer desires.
 The settings indicate the field name, the field type, the cardinality (how many values are allowed), any default settings and the storage type.  Because we expect our data to come from Chado we set the ``field_chado_storage`` as the type.  The ``locked`` setting is set to FALSE indicating that Drupal will allow the field to be deleted if the site developer desires.
 
 
-When the site administrator navigates to **Administer > Structure > Tripal Content Types**, clicks on a content type, and then the **manage fields** tab, a link appears at the top titled **Checkfor new fields**.  When that link is clicked, this hook function is called.
+When the site administrator navigates to **Administer > Structure > Tripal Content Types**, clicks on a content type, and then the **manage fields** tab, a link appears at the top titled **Check for new fields**.  When that link is clicked, this hook function is called.
 
 
 Programmatically Attaching Fields
 Programmatically Attaching Fields
 ---------------------------------
 ---------------------------------
-You probably want to programmatically attach fields to content types if your have existing data that you know should be made available. For example, an organism always has a genus and only one genus.  If we have a field that displays the genus for an organism then we will want it automatically attached on installation of our module.  We can do this programmatically using two hook functions: ``hook_bundle_field_info()`` and ``hook_bundle_instance_info()``.  Both functions are required to attach a field to a content type. 
+You probably want to programmatically attach fields to content types if your have existing data that you know should be made available. For example, an organism always has a genus and only one genus.  If we have a field that displays the genus for an organism then we will want it automatically attached on installation of our module.  We can do this programmatically using two hook functions: ``hook_bundle_fields_info()`` and ``hook_bundle_instances_info()``.  Both functions are required to attach a field to a content type. 
 
 
-The hook_bundle_instance_info() function.
+The hook_bundle_instances_info() function.
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-The previous hook tells Drupal that our field exists and is allowed to be connected to the organism bundle.  Next we need to create an actual instance of this field for the bundle.  We do this with the ``hook_bundle_instance_info()`` function.  The format is the same as the previous hook but the info array is different.  For example:
+The previous hook tells Drupal that our field exists and is allowed to be connected to the organism bundle.  Next we need to create an actual instance of this field for the bundle.  We do this with the ``hook_bundle_instances_info()`` function.  The format is the same as the previous hook but the info array is different.  For example:
 
 
 .. code-block:: php
 .. code-block:: php
   :linenos:
   :linenos:
@@ -106,11 +106,11 @@ Unique to this info array are the settings related to Chado.  Because we expect
  - ``auto_attach``:  set this to TRUE if you want the field to automatically be added to an entity when it is generated for viewing.  Set it to FALSE to allow the field to be added via AJAX. For fields that require time to load setting to FALSE is preferred. 
  - ``auto_attach``:  set this to TRUE if you want the field to automatically be added to an entity when it is generated for viewing.  Set it to FALSE to allow the field to be added via AJAX. For fields that require time to load setting to FALSE is preferred. 
  
  
 .. note::
 .. note::
-  A base table is one that contains the primary records to which ancilliary data (e.g. properties, cross references, CV terms, publications, contacts, etc) are associated via linker tables. For example some base tables include: ``feature``, ``organism``, ``stock``, ``library``, etc.).  The ``base_table`` and ``chado_table`` will always be the same when you are mapping a field to data in a column in a base table. If your field maps data to a "linker" table where ancilliary data is stored then the ``chado_table`` will be the linker table.
+  A base table is one that contains the primary records to which ancillary data (e.g. properties, cross references, CV terms, publications, contacts, etc) are associated via linker tables. For example some base tables include: ``feature``, ``organism``, ``stock``, ``library``, etc.).  The ``base_table`` and ``chado_table`` will always be the same when you are mapping a field to data in a column in a base table. If your field maps data to a "linker" table where ancillary data is stored then the ``chado_table`` will be the linker table.
 
 
-Notice as well that the ``display`` and ``widget`` sections list the name of our TripalEntityWidget and TripalEntityFormatter calsses respectively.  This tells drupal to use our widget and formatter classes by default.
+Notice as well that the ``display`` and ``widget`` sections list the name of our TripalEntityWidget and TripalEntityFormatter classes respectively.  This tells drupal to use our widget and formatter classes by default.
 
 
-When the site administrator navigates to **Administer > Structure > Tripal Content Types**, clicks on a content type, and then the **manage fields** tab, a link appears at the top titled **Checkfor new fields**.  When that link is clicked, this hook function is called.  
+When the site administrator navigates to **Administer > Structure > Tripal Content Types**, clicks on a content type, and then the **manage fields** tab, a link appears at the top titled **Check for new fields**.  When that link is clicked, this hook function is called.  
 
 
 .. note::
 .. note::
 
 
@@ -118,21 +118,21 @@ When the site administrator navigates to **Administer > Structure > Tripal Conte
   
   
 Allowing Manual Attachment of Fields
 Allowing Manual Attachment of Fields
 ------------------------------------
 ------------------------------------
-Not all fields are created equal.  Some field can be added by the site developer to a bundle and some cannot.  When the ``TripalField`` class is implemented for a class the ``$no_ui`` parameter is set to indicate if a field can be added via the web interface or not.  See the :doc:`manual_field_creation` page for more details. But in short the following setting does not allow a field to be added using the web interface
+Not all fields are created equal.  Some fields can be added by the site developer to a bundle and some cannot.  When the ``TripalField`` class is implemented for a class the ``$no_ui`` parameter is set to indicate if a field can be added via the web interface or not.  See the :doc:`manual_field_creation` page for more details. But in short the following setting does not allow a field to be added using the web interface
 
 
 .. code-block::  php
 .. code-block::  php
 
 
- public static $no_ui = FALSE;
+ public static $no_ui = TRUE;
  
  
 The following setting will allow the field to be added:
 The following setting will allow the field to be added:
 
 
 .. code-block::  php
 .. code-block::  php
 
 
- public static $no_ui = TRUE;
+ public static $no_ui = FALSE;
 
 
-Next, we must let Drupal know that our field exists.  We do this by adding an entry to the ``$info`` array of in the ``hook_bundle_field_info()`` function described above.  This lets Drupal know about our field. However, because we are not programmatically creating an instance of the field on a content type, but allowing the user to create them we do not need to implement the ``hook_bundle_instance_info()`` function. Instead, we must implement the ``hook_bundle_create_user_field()``.  This function is called when the user attempts to add our new field to a bundle.  One field that comes with Tripal is the ``chado_linker__prop`` field.  Most Chado base tables have an associated property table (e.g. ``organismprop``, ``featureprop``, ``stockprop``, etc). By default, the ``tripal_chado`` module automatically adds this field to all bundles that have existing properties. It adds a new instance for every property type.  However, new properties can be added to bundle, and the site admin may want to add those properties via the user interface rather. Therefore, this field has the ``$no_ui`` set to TRUE and uses the  ``hook_bundle_create_user_field()`` to create the new field instance for the user.
+Next, we must let Drupal know that our field exists.  We do this by adding an entry to the ``$info`` array in the ``hook_bundle_fields_info()`` function described above.  This lets Drupal know about our field. However, because we are not programmatically creating an instance of the field on a content type, but allowing the user to create them we do not need to implement the ``hook_bundle_instances_info()`` function. Instead, we must implement ``hook_bundle_create_user_field()``.  This function is called when the user attempts to add our new field to a bundle.  One field that comes with Tripal is the ``chado_linker__prop`` field.  Most Chado base tables have an associated property table (e.g. ``organismprop``, ``featureprop``, ``stockprop``, etc). By default, the ``tripal_chado`` module automatically adds this field to all bundles that have existing properties. It adds a new instance for every property type.  However, new properties can be added to bundle, and the site admin may want to add those properties via the user interface rather. Therefore, this field has the ``$no_ui`` set to TRUE and uses the  ``hook_bundle_create_user_field()`` to create the new field instance for the user.
 
 
-The following code is a snippet from the ``tripal_chado_bundle_create_user_field`` function of the ``tripal_chado`` module. Note that it uses the ``field_create_field`` function and the ``field_create_instance`` functions directly.  The arrays passed to these functions are identical to the ``$info`` arrays of both the ``hook_bundle_field_info`` and ``hook_bundle_instance_info`` functions described above.
+The following code is a snippet from the ``tripal_chado_bundle_create_user_field`` function of the ``tripal_chado`` module. Note that it uses the ``field_create_field`` function and the ``field_create_instance`` functions directly.  The arrays passed to these functions are identical to the ``$info`` arrays of both the ``hook_bundle_fields_info`` and ``hook_bundle_instances_info`` functions described above.
 
 
 .. code-block:: php
 .. code-block:: php
   :linenos:
   :linenos:
@@ -218,6 +218,6 @@ The following code is a snippet from the ``tripal_chado_bundle_create_user_field
 
 
 .. note::
 .. note::
   
   
-  It is possible to have a field that is both programmtically attached to some content types but is also allowed to be attached to another content type by the site admin using the web interface. To do this, programmatically add the field to the content types using the ``hook_bundle_instance_info`` function and also implement the ``hook_bundle_create_user_field`` function to support manual adding.
+  It is possible to have a field that is both programmatically attached to some content types but is also allowed to be attached to another content type by the site admin using the web interface. To do this, programmatically add the field to the content types using the ``hook_bundle_instances_info`` function and also implement the ``hook_bundle_create_user_field`` function to support manual adding.
   
   
  
  

+ 7 - 7
docs/dev_guide/custom_field/custom_formatter.rst

@@ -64,11 +64,11 @@ You may recall that the ``$items`` array structure is the same as that created b
 
 
 Because our organisms are also published entities we want to link to their respective pages each time an organism is displayed.  Because the ``value`` array has an element named ``entity`` we know that this item is published.  Lines 5-6 of the ``view()`` function shown above use this information to create a clickable link to the organism page.   Finally, the ``$element`` argument is set to provide content of type ``markup``.  This ``$element`` array is a `Drupal renderable array <https://www.drupal.org/docs/7/api/render-arrays/render-arrays-overview>`_.
 Because our organisms are also published entities we want to link to their respective pages each time an organism is displayed.  Because the ``value`` array has an element named ``entity`` we know that this item is published.  Lines 5-6 of the ``view()`` function shown above use this information to create a clickable link to the organism page.   Finally, the ``$element`` argument is set to provide content of type ``markup``.  This ``$element`` array is a `Drupal renderable array <https://www.drupal.org/docs/7/api/render-arrays/render-arrays-overview>`_.
 
 
-Lastly, notice the element named ``chado-feature__organsim_id``.  This element is at the same level as the ``value`` element.  This data is meant to be used internally by the field. It maps this fields values to the appropriate table in Chado where the data is stored.  
+Lastly, notice the element named ``chado-feature__organism_id``.  This element is at the same level as the ``value`` element.  This data is meant to be used internally by the field. It maps this fields values to the appropriate table in Chado where the data is stored.  
 
 
 .. warning:: 
 .. warning:: 
 
 
-  You should never show the user any data that is outside of ``value`` element.  Remember that your field can be shown by other viewers, including web services.  By ensuring that data in the ``value`` element is mean to be displayed we ensure that information on the web page, web services, or any othe future form of display is always consistent.
+  You should never show the user any data that is outside of ``value`` element.  Remember that your field can be shown by other viewers, including web services.  By ensuring that data in the ``value`` element is mean to be displayed we ensure that information on the web page, web services, or any other future form of display is always consistent.
 
 
 In summary, the following should be observed when processing the ``$items`` array for viewing:
 In summary, the following should be observed when processing the ``$items`` array for viewing:
 
 
@@ -81,11 +81,11 @@ In summary, the following should be observed when processing the ``$items`` arra
 
 
 .. warning::
 .. warning::
 
 
-  You should never have SQL statments or any API calls that retreive data in the foramter ``view()`` function. The formatter should strictly format data for viewing.
+  You should never have SQL statements or any API calls that retrieve data in the formatter ``view()`` function. The formatter should strictly format data for viewing.
   
   
 Creating Pagers
 Creating Pagers
 ~~~~~~~~~~~~~~~
 ~~~~~~~~~~~~~~~
-The example shown in the previous section was for a field that will always only contain a single element.  However some fields may contain a large number of elements.  Consider an mRNA and it's relationships to subfeatures: exons, 5' UTRs, 3'UTRs, CDS, etc.).  A large mRNA can have many relationships.  Alternatively, consider the case where a genentic map content type may have a field that lists all of the markers on the map.  Such a list could become extremely long on the page.  In these cases it may be best to only list a few items at a time and to provide a pager to let the user cycle through the items.  An example of a pager added to the bottom of relationships is shown in the example below.
+The example shown in the previous section was for a field that will always only contain a single element.  However some fields may contain a large number of elements.  Consider an mRNA and it's relationships to subfeatures: exons, 5' UTRs, 3'UTRs, CDS, etc.).  A large mRNA can have many relationships.  Alternatively, consider the case where a genetic map content type may have a field that lists all of the markers on the map.  Such a list could become extremely long on the page.  In these cases it may be best to only list a few items at a time and to provide a pager to let the user cycle through the items.  An example of a pager added to the bottom of relationships is shown in the example below.
 
 
 .. image:: custom_formatter.pager.1.png
 .. image:: custom_formatter.pager.1.png
 
 
@@ -130,9 +130,9 @@ Now that we have a pager, it has been setup for AJAX and we know the current pag
       '#markup' => $content . $pager,
       '#markup' => $content . $pager,
     );
     );
     
     
-The settingsForm() Funtion.
+The settingsForm() Function.
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
-Sometimes you may want to provide some control to the site developer for the formatter.  For example, the ``sbo__relationship_formater`` allows the site developer to customize the title that appears above the table that houses relationships and the text the appears if there are no relationships.  By default the title is "Relationships" and the empty text indicates there are no relationships. Both are a bit too generic.  The ``settingsForm()`` function allows you to provide a Drupal form for the field that appears on the **Administer > Strucutre > Tripal Content Types** on any content type's **manage display** page:
+Sometimes you may want to provide some control to the site developer for the formatter.  For example, the ``sbo__relationship_formatter`` allows the site developer to customize the title that appears above the table that houses relationships and the text the appears if there are no relationships.  By default the title is "Relationships" and the empty text indicates there are no relationships. Both are a bit too generic.  The ``settingsForm()`` function allows you to provide a Drupal form for the field that appears on the **Administer > Structure > Tripal Content Types** on any content type's **manage display** page:
 
 
 .. image:: custom_formatter.settings.1.png
 .. image:: custom_formatter.settings.1.png
 
 
@@ -162,7 +162,7 @@ The form shown in the screenshot above is provided by the ``settingsForm()`` fun
   
   
 The form is typical of any form.  Note, however that the ``#default_value`` is set using the current settings values.
 The form is typical of any form.  Note, however that the ``#default_value`` is set using the current settings values.
 
 
-A settings form is useful but it only works when Drupal knows what settings you want for your field.  You must provide the settings names (e.g. "title" and "empty" in this case) when you  attach your field to a given content type (i.e. bundle).  You tell Drupal to attach this field to a content type using the ``hook_bundle_instance_info`` function.  See 
+A settings form is useful but it only works when Drupal knows what settings you want for your field.  You must provide the settings names (e.g. "title" and "empty" in this case) when you  attach your field to a given content type (i.e. bundle).  You tell Drupal to attach this field to a content type using the ``hook_bundle_instances_info`` function.  See 
 the :doc:`create_instance` to learn more about this function.  Briefly, the ``display`` section of the info array for the ``sbo__relationship`` field contains the following settings for the ``display``:
 the :doc:`create_instance` to learn more about this function.  Briefly, the ``display`` section of the info array for the ``sbo__relationship`` field contains the following settings for the ``display``:
 
 
 .. code-block:: php
 .. code-block:: php

+ 3 - 3
docs/dev_guide/custom_field/custom_widget.rst

@@ -108,7 +108,7 @@ For our ``obi__organism`` example, the drop-down returns the chado organism_id o
     }
     }
   }
   }
 
 
-But what do you do if the record you want to link to via foreign key constraint doesn't yet exist? Luckily the Chado Storage API has a solution for this as well. Consider the example of the ``sbo__relationship_widget``. When this widget is on the create form for a given content type, we will first need to create the base record before we can create a relationship to it. This is done by setting the values you do know (e.g. ``chado-feature__type_id`` and ``chado-feature__object_id``) but nnot setting the column mapping to the base record. The Chado Storage API will then fill it in automatically once the base record is created.
+But what do you do if the record you want to link to via foreign key constraint doesn't yet exist? Luckily the Chado Storage API has a solution for this as well. Consider the example of the ``sbo__relationship_widget``. When this widget is on the create form for a given content type, we will first need to create the base record before we can create a relationship to it. This is done by setting the values you do know (e.g. ``chado-feature__type_id`` and ``chado-feature__object_id``) but not setting the column mapping to the base record. The Chado Storage API will then fill it in automatically once the base record is created.
 
 
 .. code-block:: php
 .. code-block:: php
 
 
@@ -135,7 +135,7 @@ But what do you do if the record you want to link to via foreign key constraint
       // Set all chado fields to their values.
       // Set all chado fields to their values.
     }
     }
     // Otherwise, maybe we are creating the entity...
     // Otherwise, maybe we are creating the entity...
-    // The storage API should handle this case and automagically add the key in // once the chado record is created... so all we need to do is set the
+    // The storage API should handle this case and automatically add the key in // once the chado record is created... so all we need to do is set the
     // other columns.
     // other columns.
     elseif ($subject_name && $object_id && $type_id) {
     elseif ($subject_name && $object_id && $type_id) {
       $form_state['values'][$field_name][$langcode][$delta]['value'] = 'value must be set but is not used';
       $form_state['values'][$field_name][$langcode][$delta]['value'] = 'value must be set but is not used';
@@ -150,4 +150,4 @@ But what do you do if the record you want to link to via foreign key constraint
 
 
 Drupal typically does not provide a submit hook for fields because, as mentioned above, saving should be done by the storage backend. However, the TripalField provides a ``TripalFieldWidget::submit()`` to allow for behind-the-scenes actions to occur. This function should never be used for updates, deletes or inserts for the Chado table associated with the field as these actions should be handled by the storage backend.
 Drupal typically does not provide a submit hook for fields because, as mentioned above, saving should be done by the storage backend. However, the TripalField provides a ``TripalFieldWidget::submit()`` to allow for behind-the-scenes actions to occur. This function should never be used for updates, deletes or inserts for the Chado table associated with the field as these actions should be handled by the storage backend.
 
 
-However, it is permissible to perform inserts, updates or deletions within Chado using this function.  Those operations can be performed if needed but on other tables not directly associated with the field. An example is the ``chado.feature_synonym`` table.  The ``chado_linker__synonym`` field allows the user to provide a brand new synonynm and it must add it to the chado.synonym table prior to the record in the chado.feature_synonym table.
+However, it is permissible to perform inserts, updates or deletions within Chado using this function.  Those operations can be performed if needed but on other tables not directly associated with the field. An example is the ``chado.feature_synonym`` table.  The ``chado_linker__synonym`` field allows the user to provide a brand new synonym and it must add it to the chado.synonym table prior to the record in the chado.feature_synonym table.

+ 16 - 16
docs/dev_guide/custom_field/manual_field_creation.rst

@@ -60,15 +60,15 @@ As described in the section titled Tripal Data Structures, fields that are attac
 .. code-block:: php
 .. code-block:: php
 
 
   
   
-  // Provide a list of instance specific settings. These can be access within
+  // Provide a list of instance specific settings. These can be accessed within
   // the instanceSettingsForm.  When the instanceSettingsForm is submitted
   // the instanceSettingsForm.  When the instanceSettingsForm is submitted
-  // then Drupal with automatically change these settings for the instance.
+  // then Drupal will automatically change these settings for the instance.
   // It is recommended to put settings at the instance level whenever possible.
   // It is recommended to put settings at the instance level whenever possible.
   // If you override this variable in a child class be sure to replicate the
   // If you override this variable in a child class be sure to replicate the
   // term_name, term_vocab, term_accession and term_fixed keys as these are
   // term_name, term_vocab, term_accession and term_fixed keys as these are
   // required for all TripalFields.
   // required for all TripalFields.
   public static $default_instance_settings  = array(
   public static $default_instance_settings  = array(
-    // The short name for the vocabulary (e.g. shcema, SO, GO, PATO, etc.).
+    // The short name for the vocabulary (e.g. schema, SO, GO, PATO, etc.).
     'term_vocabulary' => 'OBI',
     'term_vocabulary' => 'OBI',
     // The name of the term.
     // The name of the term.
     'term_name' => 'organism',
     'term_name' => 'organism',
@@ -113,7 +113,7 @@ Sometimes a field is meant to provide a visualization or some other functionalit
 
 
   
   
   // A boolean specifying that the field will not contain any data. This
   // A boolean specifying that the field will not contain any data. This
-  // should exclude the field from web serivces or downloads.  An example
+  // should exclude the field from web services or downloads.  An example
   // could be a quick search field that appears on the page that redirects
   // could be a quick search field that appears on the page that redirects
   // the user but otherwise provides no data.
   // the user but otherwise provides no data.
 
 
@@ -121,12 +121,12 @@ Sometimes a field is meant to provide a visualization or some other functionalit
   public static $no_data = FALSE;
   public static $no_data = FALSE;
 
 
 
 
-  .. note::
-  Be sure to only set this to TRUE when you are absolutely certain the contents would not be needed in web services.  Tripal was designed so that what appears on the page will always appear in web services.  Aside form the formatting we see on the website, the content should be the same.
+.. note::
+  Be sure to only set this to TRUE when you are absolutely certain the contents would not be needed in web services.  Tripal was designed so that what appears on the page will always appear in web services.  Aside from the formatting we see on the website, the content should be the same.
 
 
 Finally, the last item in our Class variables is the **download_formatters**.  Tripal provides an API that allows tools to group entities into data collections.  Data collections are like "baskets" or "shopping carts".   Entities that are in data collections can be downloaded into files.  If your field is compatible with specific file downloaders you can specify those here.  A file downloader is a special TripalFieldDownloader class that "speaks" certain file formats.  Tripal, by default, provides the TripalTabDownloader (for tab-delimited files), the TripalCSVDownloader (for CSV files), a TripalNucFASTADownloader for creating nucleotide FASTA files and a TripalProteinFASTADownloader for protein FASTA files.   If your field is compatible with any of these formatters you can specify them in the following array:
 Finally, the last item in our Class variables is the **download_formatters**.  Tripal provides an API that allows tools to group entities into data collections.  Data collections are like "baskets" or "shopping carts".   Entities that are in data collections can be downloaded into files.  If your field is compatible with specific file downloaders you can specify those here.  A file downloader is a special TripalFieldDownloader class that "speaks" certain file formats.  Tripal, by default, provides the TripalTabDownloader (for tab-delimited files), the TripalCSVDownloader (for CSV files), a TripalNucFASTADownloader for creating nucleotide FASTA files and a TripalProteinFASTADownloader for protein FASTA files.   If your field is compatible with any of these formatters you can specify them in the following array:
 
 
-.. .. code-block::
+.. code-block::
 
 
   // Indicates the download formats for this field.  The list must be the
   // Indicates the download formats for this field.  The list must be the
   // name of a child class of the TripalFieldDownloader.
   // name of a child class of the TripalFieldDownloader.
@@ -156,7 +156,7 @@ Because this is a ChadoField and the TripalChado module supports this field and
 
 
     $record = $entity->chado_record;
     $record = $entity->chado_record;
 
 
-Having the record helps tremendously.  Our **obi__organism** field is meant to be attached to genomic feature content types (e.g. genes, mRNA, etc.), germplasm, etc.  Therefore, the entity will be a record of one of those types. In the case of a genomic feature, these come from the **feature** table of Chado.  In the case of a germplam, these records come from the **stock** table of Chado.  Both of these records have an **organism_id** field which is a foreign key to the organism table where we find out details about the organism.
+Having the record helps tremendously.  Our **obi__organism** field is meant to be attached to genomic feature content types (e.g. genes, mRNA, etc.), germplasm, etc.  Therefore, the entity will be a record of one of those types. In the case of a genomic feature, these come from the **feature** table of Chado.  In the case of germplasm, these records come from the **stock** table of Chado.  Both of these records have an **organism_id** field which is a foreign key to the organism table where we find out details about the organism.
 
 
 Before we set the values for our field, we need a little bit more information.  Remember that all field instances have settings?   The Tripal Chado module also populates for us the name of the Chado table and the column that this field maps to.  Our obi__organism field can be used for multiple Bundles.  A gene bundle would map to the **feature** table of Chado and a germplasm Bundle would map to the **stock** table.  We need to know what table and column this field is mapping to:  We can get that from the instance object of the class and its settings:
 Before we set the values for our field, we need a little bit more information.  Remember that all field instances have settings?   The Tripal Chado module also populates for us the name of the Chado table and the column that this field maps to.  Our obi__organism field can be used for multiple Bundles.  A gene bundle would map to the **feature** table of Chado and a germplasm Bundle would map to the **stock** table.  We need to know what table and column this field is mapping to:  We can get that from the instance object of the class and its settings:
 
 
@@ -186,7 +186,7 @@ Now, let's plan how we want our values to appear in our field.  The organism rec
     $infraspecific_type_term = tripal_get_chado_semweb_term('organism', 'type_id');
     $infraspecific_type_term = tripal_get_chado_semweb_term('organism', 'type_id');
 
 
 
 
-Notice that for our organism fields we can easily get the ontology terms for them using the API function **tripal_get_chado_semweb_term**.  You will also notice a **label_term** variable.  Sometimes a user may want to see the full name of the organism and not pieces of it in various elements.  Therefore, we will provide a label in our list of values that will concatenate the full organism name.  This field is not in our organism table so we hard-code the term 'rdfs:lable' which is a term from the Resource Data Framework Schema vocabulary that defines a label.
+Notice that for our organism fields we can easily get the ontology terms for them using the API function **tripal_get_chado_semweb_term**.  You will also notice a **label_term** variable.  Sometimes a user may want to see the full name of the organism and not pieces of it in various elements.  Therefore, we will provide a label in our list of values that will concatenate the full organism name.  This field is not in our organism table so we hard-code the term 'rdfs:label' which is a term from the Resource Data Framework Schema vocabulary that defines a label.
 
 
 Next, let's initialize our field's value to be empty.  When setting a field value we must do so in the entity object that got passed into our load function.  The entity is an object and it stores values using the names of the fields.  The following code sets an empty record for our field:
 Next, let's initialize our field's value to be empty.  When setting a field value we must do so in the entity object that got passed into our load function.  The entity is an object and it stores values using the names of the fields.  The following code sets an empty record for our field:
 
 
@@ -198,7 +198,7 @@ Next, let's initialize our field's value to be empty.  When setting a field valu
     );
     );
 
 
 
 
-Notice that our field has some sub elements. The first is 'und'.  This element corresponds to the "language" of the text.  Drupal supports mulitple spoken languages and wants to know the language of text we provide.  For Tripal fields we always use 'und' meaning 'undefined'.   The next element is the delta index number.  Field have a cardinality, or in other words they can have multiple values.  For every value we add we increment that index, always starting at zero.  The last element is our 'value' element and it is here where we put our element. You may notice that our **delta** index is hard coded to 0.  This is because an entity can only always have one organism that it is associated with.  We will never have more than one.
+Notice that our field has some sub elements. The first is 'und'.  This element corresponds to the "language" of the text.  Drupal supports multiple spoken languages and wants to know the language of text we provide.  For Tripal fields we always use 'und' meaning 'undefined'.   The next element is the delta index number.  Fields have a cardinality, or in other words they can have multiple values.  For every value we add we increment that index, always starting at zero.  The last element is our 'value' element and it is here where we put our element. You may notice that our **delta** index is hard coded to 0.  This is because an entity can only always have one organism that it is associated with.  We will never have more than one.
 
 
 Now that we've got some preliminary values and we've initialized our value array we can start adding values!  Before we do though, let's double check that we have a record.  If we don't have a record for this entity, we can't get a value.
 Now that we've got some preliminary values and we've initialized our value array we can start adding values!  Before we do though, let's double check that we have a record.  If we don't have a record for this entity, we can't get a value.
 
 
@@ -222,7 +222,7 @@ We can easily get all of the values we need from this organism object.   We can
 
 
 .. code-block:: php 
 .. code-block:: php 
 
 
-      $label = tripal_replace_chado_tokens($string, $organism);
+      $label = chado_replace_tokens($string, $organism);
       $entity->{$field_name}['und'][0]['value'] = array(
       $entity->{$field_name}['und'][0]['value'] = array(
         $label_term => $label,
         $label_term => $label,
         $genus_term => $organism->genus,
         $genus_term => $organism->genus,
@@ -278,7 +278,7 @@ We do this because anything in the 'value' element is intended for the end-user.
 
 
   1.  Does the user need this value?  If yes, put it in the 'value' element.
   1.  Does the user need this value?  If yes, put it in the 'value' element.
   2.  Does Tripal need the value when writing back to the Chado table?  If yes, put it as a hidden element.
   2.  Does Tripal need the value when writing back to the Chado table?  If yes, put it as a hidden element.
-  3.  Does the user need to see the value an will this same value need to be written to the table?  If yes, then you have to put the value in both places.
+  3.  Does the user need to see the value and will this same value need to be written to the table?  If yes, then you have to put the value in both places.
 
 
 For our **obi__organism** field it is for entities with records in the **feature, stock, library**, etc. tables. Those tables only have an **organism_id** to represent the organism.  So, that's the database column this field is supporting.  We therefore, need to put that field as a hidden field, and all the others are just helpful to the user and don't get saved in the feature, stock or library tables. So, those go in the values array.
 For our **obi__organism** field it is for entities with records in the **feature, stock, library**, etc. tables. Those tables only have an **organism_id** to represent the organism.  So, that's the database column this field is supporting.  We therefore, need to put that field as a hidden field, and all the others are just helpful to the user and don't get saved in the feature, stock or library tables. So, those go in the values array.
 
 
@@ -392,9 +392,9 @@ The code above generates and returns an associative array that provides metadata
       'type' => 'xs:complexType',
       'type' => 'xs:complexType',
       'elements' => array(
       'elements' => array(
 
 
-Notice the value for $field_term variable was easily obtained by calling the $this->getFieldTermID function and all of the terms for the elements were obtained using the chado_get_semweb_term function which maps table columns in the Chado database schema to ontology terms.  The operations key indicates which search filter operations are supported for the field as a whole.  For this example these include 'eq' (for equals), 'contains' and 'starts' (for starts with).   The field is sortable and searchable so those values are set to TRUE.   Later, we weill learn how to implement the sorting, searching and filtering that the field will support.  For now we know we want them so we set the values accordingly.  Additionally, the field allows updating so 'readonly' is set to FALSE.   By convention, the 'type' of a field follows the XML data types for simple types (https://www.w3schools.com/xml/schema_simple.asp) and Complex types (https://www.w3schools.com/xml/schema_complex.asp) that have multiple elements.  Because our obi__organism field has subelements  and is not a single value, the field type is 'xs:complexType'.
+Notice the value for $field_term variable was easily obtained by calling the $this->getFieldTermID function and all of the terms for the elements were obtained using the chado_get_semweb_term function which maps table columns in the Chado database schema to ontology terms.  The operations key indicates which search filter operations are supported for the field as a whole.  For this example these include 'eq' (for equals), 'contains' and 'starts' (for starts with).   The field is sortable and searchable so those values are set to TRUE.   Later, we will learn how to implement the sorting, searching and filtering that the field will support.  For now we know we want them so we set the values accordingly.  Additionally, the field allows updating so 'readonly' is set to FALSE.   By convention, the 'type' of a field follows the XML data types for simple types (https://www.w3schools.com/xml/schema_simple.asp) and Complex types (https://www.w3schools.com/xml/schema_complex.asp) that have multiple elements.  Because our obi__organism field has subelements  and is not a single value, the field type is 'xs:complexType'.
 
 
-The array keys just mentioned fully describe our field to Drupal and Tripal.  Next we will define the sub elements in the same way, and these go in the 'elements' key.  First, we will describe the label.  Our obi__oranganism field provides a handly label element that concatenates the genus, species and infraspecific name into one simple string.  Therefore, we need to describe this element in the same way we described the field itself.  In the code below that the key is set to 'rdfs:label' (which is the controlled vocabulary term for a label) and that the child keys are the same as for the field.
+The array keys just mentioned fully describe our field to Drupal and Tripal.  Next we will define the sub elements in the same way, and these go in the 'elements' key.  First, we will describe the label.  Our obi__organism field provides a handy label element that concatenates the genus, species and infraspecific name into one simple string.  Therefore, we need to describe this element in the same way we described the field itself.  In the code below that the key is set to 'rdfs:label' (which is the controlled vocabulary term for a label) and that the child keys are the same as for the field.
 
 
 .. code-block:: php
 .. code-block:: php
 
 
@@ -412,7 +412,7 @@ The array keys just mentioned fully describe our field to Drupal and Tripal.  Ne
             'required' => FALSE,
             'required' => FALSE,
           ),
           ),
 
 
-Notice that our field will allow searching, provides a variety of search filter options, is sortable and defines the type as 'xs:string'.  The remaing elements follow the same pattern.  As another example, here is the genus element:
+Notice that our field will allow searching, provides a variety of search filter options, is sortable and defines the type as 'xs:string'.  The remaining elements follow the same pattern.  As another example, here is the genus element:
 
 
 .. code-block:: php
 .. code-block:: php
 
 
@@ -494,7 +494,7 @@ As described above in the elementInfo function section, some fields and elements
       }
       }
     }
     }
 
 
-The code above is how the field tells Drupal and Tripal how to find and filter the records that this field corresponds to.  First, we retreive the field alias and operators:and as with the load and elementInfo functions we get the controlled vocabulary terms for our field and field elements:
+The code above is how the field tells Drupal and Tripal how to find and filter the records that this field corresponds to.  First, we retrieve the field alias and operators, and as with the load and elementInfo functions we get the controlled vocabulary terms for our field and field elements:
 
 
 
 
 .. code-block:: php
 .. code-block:: php

+ 3 - 3
docs/dev_guide/custom_field/select_vocab_terms.rst

@@ -4,7 +4,7 @@ Selecting Vocabulary Terms
 Ontologies: what and why?
 Ontologies: what and why?
 -------------------------
 -------------------------
 
 
-Tripal 3 requires all bundles and fields to be associated with a Controlled Vocabulary (CV). CVs are dictionaries of defined terms (CV terms) that make data machine-accessible, ensuring uniform terms are used across experiments, organisms and websites. Without CVterms, our scientific knowledge might be split by "dialects". Plant biologists might study temperature stress, while animal biologists study heat shock. Each group might benefit from the knowledge of the other, but they use a different vocabulary to describe the same thing, creating challenges for data discovery and exchange. CV terms make this easier not just for people, but especially for machines. Ontologies take this a step further. Where CVs are controlled lists of CVterms, ontologies are a controlled language, that include heirarchical relationships of terms.
+Tripal 3 requires all bundles and fields to be associated with a Controlled Vocabulary (CV). CVs are dictionaries of defined terms (CV terms) that make data machine-accessible, ensuring uniform terms are used across experiments, organisms and websites. Without CVterms, our scientific knowledge might be split by "dialects". Plant biologists might study temperature stress, while animal biologists study heat shock. Each group might benefit from the knowledge of the other, but they use a different vocabulary to describe the same thing, creating challenges for data discovery and exchange. CV terms make this easier not just for people, but especially for machines. Ontologies take this a step further. Where CVs are controlled lists of CVterms, ontologies are a controlled language, that include hierarchical relationships of terms.
 
 
 Tripal leverages vocabularies to make use of the `Semantic Web <https://en.wikipedia.org/wiki/Semantic_Web>`_. Every bundle and field defined in Tripal will be associated with a CVterm. Therefore, it is important to find community developed terms.  The `EMBL EBI Ontology Lookup Service <http://www.ebi.ac.uk/ols/index>`_ provides an easy location to search for and identify terms.  When choosing terms for new Bundles and Fields, think carefully about the terms you will use to describe your objects. Selecting the proper CV term that best describes the data may be the most challenging part of creating custom Bundles and Fields!
 Tripal leverages vocabularies to make use of the `Semantic Web <https://en.wikipedia.org/wiki/Semantic_Web>`_. Every bundle and field defined in Tripal will be associated with a CVterm. Therefore, it is important to find community developed terms.  The `EMBL EBI Ontology Lookup Service <http://www.ebi.ac.uk/ols/index>`_ provides an easy location to search for and identify terms.  When choosing terms for new Bundles and Fields, think carefully about the terms you will use to describe your objects. Selecting the proper CV term that best describes the data may be the most challenging part of creating custom Bundles and Fields!
 
 
@@ -27,7 +27,7 @@ Consider the term for `organism <http://www.ebi.ac.uk/ols/ontologies/obi/terms?i
 
 
 .. figure:: select_vocab_terms.1.organism.png
 .. figure:: select_vocab_terms.1.organism.png
 
 
-Notice how the teal box (the **short name**) is OBI, and the orange box contains the **full accession**, OBI:0100026 which includes but the **short name** and the unique term **accession** value.  Unfortunately, the OLS does not indicate the **namespace** terms.   So, as a rule we will use the short name converted to lower case.  Before using this term in a Tripal Bundle or Field you may need to insert this term into Chado.  You can do so in your custom module cude using the **tripal_insert_cvterm** function. The following provides a demonstration:
+Notice how the teal box (the **short name**) is OBI, and the orange box contains the **full accession**, OBI:0100026 which includes but the **short name** and the unique term **accession** value.  Unfortunately, the OLS does not indicate the **namespace** terms.   So, as a rule we will use the short name converted to lower case.  Before using this term in a Tripal Bundle or Field you may need to insert this term into Chado.  You can do so in your custom module code using the **tripal_insert_cvterm** function. The following provides a demonstration:
 
 
 .. code-block:: php
 .. code-block:: php
 
 
@@ -104,7 +104,7 @@ Some ontologies are b into sub-ontologies. This includes the Gene Ontology (GO).
 .. figure:: select_vocab_terms.3.go.png
 .. figure:: select_vocab_terms.3.go.png
 
 
 
 
-Case 4: Ontologies with muliptle short names
+Case 4: Ontologies with multiple short names
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 
 The EDAM ontology builds its term accessions using different short names instead of the ontology. Consider the EDAM term for `Sequence <http://www.ebi.ac.uk/ols/ontologies/edam/terms?iri=http%3A%2F%2Fedamontology.org%2Fdata_2044>`_. The teal box is EDAM, the orange box is data:2044, and there is no **namespace**.
 The EDAM ontology builds its term accessions using different short names instead of the ontology. Consider the EDAM term for `Sequence <http://www.ebi.ac.uk/ols/ontologies/edam/terms?iri=http%3A%2F%2Fedamontology.org%2Fdata_2044>`_. The teal box is EDAM, the orange box is data:2044, and there is no **namespace**.

+ 3 - 3
docs/dev_guide/custom_web_services.rst

@@ -10,7 +10,7 @@ New in Tripal v3 are `RESTful web services <https://en.wikipedia.org/wiki/Repres
 
 
 Tripal v3 has been redesigned from Tripal v2 to be fully organized around controlled vocabularies.  All data made available via Tripal is expected to be described by the terms of a controlled vocabulary or ontology.  For example, all content types in Tripal are assigned a controlled vocabulary term that describes what the content is.  Additionally, each field of data attached to a content type also is described using a controlled vocabulary term.  If a field provides more than just a single data value (i.e. it provides a list or nested structured array of data of key/value pairs) then each of the keys for those pairs must also be a controlled vocabulary term.  This requirement allows Tripal to fully describe the data it houses to any other Tripal site and any other script or service that can read the web services.  As long as the client application understands the vocabulary term it will understand the meaning of the data.  Using controlled vocabulary terms to describe all data allows a Tripal site to participate in the `Semantic Web <https://en.wikipedia.org/wiki/Semantic_Web>`_. 
 Tripal v3 has been redesigned from Tripal v2 to be fully organized around controlled vocabularies.  All data made available via Tripal is expected to be described by the terms of a controlled vocabulary or ontology.  For example, all content types in Tripal are assigned a controlled vocabulary term that describes what the content is.  Additionally, each field of data attached to a content type also is described using a controlled vocabulary term.  If a field provides more than just a single data value (i.e. it provides a list or nested structured array of data of key/value pairs) then each of the keys for those pairs must also be a controlled vocabulary term.  This requirement allows Tripal to fully describe the data it houses to any other Tripal site and any other script or service that can read the web services.  As long as the client application understands the vocabulary term it will understand the meaning of the data.  Using controlled vocabulary terms to describe all data allows a Tripal site to participate in the `Semantic Web <https://en.wikipedia.org/wiki/Semantic_Web>`_. 
 
 
-Finally, the Tripal RESTful services are meant to be discoverable.  In some cases, when a web services is designed, the only way to understand the structure of it and the operations that it provides are for a programmer to read online documentation for the service before she can write the client application.  However, to better support automatic data discovery without human intervention by a client the Tripal web services have been designed to be discoverable.  To this end, Tripal uses the  `Hyrda Core Vocabulary <https://www.hydra-cg.com/spec/latest/core/>`_ specification.  It fully describes all of the services, their operations, and the resulting value.  A client application that understands the Hydra language can therefore learn  to use the web service without human intervention.  However, in practice, its a good idea to continue to provide online documentation for humans.  And this User's Guide :doc:`provides those instructions </user_guide/web_services>` for the default Tripal content service.  
+Finally, the Tripal RESTful services are meant to be discoverable.  In some cases, when a web services is designed, the only way to understand the structure of it and the operations that it provides are for a programmer to read online documentation for the service before she can write the client application.  However, to better support automatic data discovery without human intervention by a client the Tripal web services have been designed to be discoverable.  To this end, Tripal uses the  `Hydra Core Vocabulary <https://www.hydra-cg.com/spec/latest/core/>`_ specification.  It fully describes all of the services, their operations, and the resulting value.  A client application that understands the Hydra language can therefore learn  to use the web service without human intervention.  However, in practice, its a good idea to continue to provide online documentation for humans.  And this User's Guide :doc:`provides those instructions </user_guide/web_services>` for the default Tripal content service.  
 
 
 This documentation provides instructions to construct your own custom web services and making that service available through Tripal's existing web service infrastructure.  This will enable your web service to be discoverable and to provide a consistent experience to end-users.  Before proceeding with the following instructions, please review the **Structure of a Web Service Response** section on the User's Guide :doc:`Web Services page </user_guide/web_services>`.
 This documentation provides instructions to construct your own custom web services and making that service available through Tripal's existing web service infrastructure.  This will enable your web service to be discoverable and to provide a consistent experience to end-users.  Before proceeding with the following instructions, please review the **Structure of a Web Service Response** section on the User's Guide :doc:`Web Services page </user_guide/web_services>`.
 
 
@@ -141,7 +141,7 @@ Notice currently all this function does is call the parent getDocumentation func
 
 
 In the above array, notice the @id is URL that represents a unique identifier for the class.   The @type will always be 'hydra:Class' because we are documenting a resource.  Then there is information about the class defined using the 'hydra:title' and 'hydra:description'.  The 'subclassOf' is always set to 'hydra:Resource'.  Next is the list of supported operations for this resource.  Remember, in our design we only want to support the GET operation for our Jobs service, so just like in the example above, the method we will support is GET.  The key/value pairs for the GET method are described using Hydra terms.  
 In the above array, notice the @id is URL that represents a unique identifier for the class.   The @type will always be 'hydra:Class' because we are documenting a resource.  Then there is information about the class defined using the 'hydra:title' and 'hydra:description'.  The 'subclassOf' is always set to 'hydra:Resource'.  Next is the list of supported operations for this resource.  Remember, in our design we only want to support the GET operation for our Jobs service, so just like in the example above, the method we will support is GET.  The key/value pairs for the GET method are described using Hydra terms.  
 
 
-For our services we need to provide the information to Tripal so that it can generate these Hydra JSON arrays that document our service.  Tripal provides some easy API functions to help with this.  The firt is the **addDoc** member function.  This function will take as input the class details, operations and properties necessary to generate the documentation for our class.  First, lets use this function to document our Jobs Collection resource.  Below is sample code that will do this for us.
+For our services we need to provide the information to Tripal so that it can generate these Hydra JSON arrays that document our service.  Tripal provides some easy API functions to help with this.  The first is the **addDoc** member function.  This function will take as input the class details, operations and properties necessary to generate the documentation for our class.  First, lets use this function to document our Jobs Collection resource.  Below is sample code that will do this for us.
 
 
 
 
 .. code-block:: php
 .. code-block:: php
@@ -290,7 +290,7 @@ Now, because we have instantiated a TripalWebServiceCollection object it can han
 
 
         $this->resource->initPager($num_records, $limit, $page);
         $this->resource->initPager($num_records, $limit, $page);
 
 
-Lastly, we need to add our "members" of the collection.  These are the jobs from our query.  The following for loop iterates through alll of our jobs and creates new member objects that are added to our collection:
+Lastly, we need to add our "members" of the collection.  These are the jobs from our query.  The following for loop iterates through all of our jobs and creates new member objects that are added to our collection:
 
 
 .. code-block:: php
 .. code-block:: php
 
 

+ 2 - 2
docs/dev_guide/data_structures.rst

@@ -1,7 +1,7 @@
 Tripal Data Structures
 Tripal Data Structures
 =======================
 =======================
 
 
-This page explains the relationships between Entity types, Bundles (content type), Entities and Fields. These are data structures provided by Drupal that Tripal v3 uses to expose biological content through your Drupal site, and to provide flexibility in site customization.  It is important to understand these terms and their relationships before developing new modules or custom functionlaity.   A quick summary of these Drupal data structures are as follows:
+This page explains the relationships between Entity types, Bundles (content type), Entities and Fields. These are data structures provided by Drupal that Tripal v3 uses to expose biological content through your Drupal site, and to provide flexibility in site customization.  It is important to understand these terms and their relationships before developing new modules or custom functionality.   A quick summary of these Drupal data structures are as follows:
 
 
 * Entity:  a discrete data record.  Entities are most commonly are seen as "pages" on a Drupal web site.
 * Entity:  a discrete data record.  Entities are most commonly are seen as "pages" on a Drupal web site.
 * Field:  an "atomic" piece of ancillary data that describes, defines or expands the entity.  Common fields include the name of an entity, a "body" of descriptive text, etc.
 * Field:  an "atomic" piece of ancillary data that describes, defines or expands the entity.  Common fields include the name of an entity, a "body" of descriptive text, etc.
@@ -9,7 +9,7 @@ This page explains the relationships between Entity types, Bundles (content type
 * Entity Type:  despite the confusing name, an entity type is simply a group of bundles that are somehow related.  Drupal provides a "Node" Entity type that includes the Page and Article bundles.  All of the Tripal bundles (content types) belong to the TripalEntity Entity type.
 * Entity Type:  despite the confusing name, an entity type is simply a group of bundles that are somehow related.  Drupal provides a "Node" Entity type that includes the Page and Article bundles.  All of the Tripal bundles (content types) belong to the TripalEntity Entity type.
 
 
 
 
-The following figure describes the heirarchical relationship between Drupal Entity types (e.g. Node) in comparison with TripalEntity entity types (e.g. Chromosome, Germplasm, etc.).
+The following figure describes the hierarchical relationship between Drupal Entity types (e.g. Node) in comparison with TripalEntity entity types (e.g. Chromosome, Germplasm, etc.).
 
 
 
 
 .. figure:: /_images/dev_guide/data_structures/Terminology-Diagram.png
 .. figure:: /_images/dev_guide/data_structures/Terminology-Diagram.png

+ 2 - 2
docs/dev_guide/exporting_field_settings.rst

@@ -56,7 +56,7 @@ Configuring the bundle fields
 
 
 To begin, let's quickly configure a bundle.  Navigate to the structure of your site and select Analysis (**Admin ->Structure -> Tripal Content -> Analysis -> Manage Fields**).  Scroll to the bottom and add a new field of type File, with a machine name of ``field_fasta_file‎``, and click **Save**. Be sure to change the **Allowed extensions** parameter to accept ``.fasta``, otherwise, it will only allow `.txt` files to be uploaded.  You may also want to increase the file size limit, as the default 2MB can be too small for many FASTA files.
 To begin, let's quickly configure a bundle.  Navigate to the structure of your site and select Analysis (**Admin ->Structure -> Tripal Content -> Analysis -> Manage Fields**).  Scroll to the bottom and add a new field of type File, with a machine name of ``field_fasta_file‎``, and click **Save**. Be sure to change the **Allowed extensions** parameter to accept ``.fasta``, otherwise, it will only allow `.txt` files to be uploaded.  You may also want to increase the file size limit, as the default 2MB can be too small for many FASTA files.
 
 
-We now have to pick a CV term for our field.  Because we are providing a FASTA file field, we can use a term such as FASTA `(SWO:0000142 <https://www.ebi.ac.uk/ols/ontologies/ero/terms?iri=http%3A%2F%2Fwww.ebi.ac.uk%2Fefo%2Fswo%2FSWO_0000142>`_.  Please see  :ref:`adding_a_cvterm` for help loading a term.  Once the term is in our DB, we can assign it to this field.
+We now have to pick a CV term for our field.  Because we are providing a FASTA file field, we can use a term such as FASTA (`SWO:0000142 <https://www.ebi.ac.uk/ols/ontologies/ero/terms?iri=http%3A%2F%2Fwww.ebi.ac.uk%2Fefo%2Fswo%2FSWO_0000142>`_).  Please see  :ref:`adding_a_cvterm` for help loading a term.  Once the term is in our DB, we can assign it to this field.
 
 
 
 
 .. image:: ./exporting_field_settings.1.assign_term.png
 .. image:: ./exporting_field_settings.1.assign_term.png
@@ -111,7 +111,7 @@ Go to our target site, all we need to do is download and unpack the ``.tar`` fil
 
 
 The field should now appear when you go to create a new analysis on your target site.  To check for yourself, create a new Analysis with dummy information: you'll be able to upload a file for the new file field.
 The field should now appear when you go to create a new analysis on your target site.  To check for yourself, create a new Analysis with dummy information: you'll be able to upload a file for the new file field.
 
 
-Unfortunately, the field still gets imported **disabled** due to Tripal preference, so we have to go to the display settings on our target site and enable the tripal pane/field.
+Unfortunately, the field still gets imported **disabled** due to Tripal preference, so we have to go to the display settings on our target site and enable the Tripal pane/field.
 
 
 
 
 .. image:: ./exporting_field_settings.6.png
 .. image:: ./exporting_field_settings.6.png

+ 1 - 1
docs/dev_guide/introduction.rst

@@ -24,7 +24,7 @@ To use Chado for data storage:
 * Knowledge of Chado and relationships between tables (at least tables where data of interest is stored).
 * Knowledge of Chado and relationships between tables (at least tables where data of interest is stored).
 * An idea how data is stored in Chado (or a willingness to ask questions)
 * An idea how data is stored in Chado (or a willingness to ask questions)
 
 
-Things that will make your Tripal development experience postive, fun and rewarding:
+Things that will make your Tripal development experience positive, fun and rewarding:
 
 
 * A desire to write code that can be re-used and shared by other groups
 * A desire to write code that can be re-used and shared by other groups
 * A desire to share your work with others to support other the Tripal community members.
 * A desire to share your work with others to support other the Tripal community members.

+ 1 - 0
docs/extensions.rst

@@ -8,6 +8,7 @@ The below modules are Tripal 3 compatible and grouped roughly by category:
 
 
    extensions/administrative
    extensions/administrative
    extensions/analysis
    extensions/analysis
+   extensions/breeding
    extensions/data_input
    extensions/data_input
    extensions/developer
    extensions/developer
    extensions/3rd_party
    extensions/3rd_party

+ 12 - 0
docs/extensions/administrative.rst

@@ -3,6 +3,18 @@ Administrative
 
 
 The following modules provide support to Tripal site administrators.
 The following modules provide support to Tripal site administrators.
 
 
+Private BioData
+-----------------
+
+.. image:: https://tripal.readthedocs.io/en/7.x-3.x/_images/Tripal-Gold.png
+  :target: https://tripal.readthedocs.io/en/7.x-3.x/extensions/module_rating.html#Gold
+  :alt: Tripal Rating: Gold
+  
+Make individual pages private while others of the same Tripal Content Type remain public! This module provides an additional permission, [Content type]: View Private Content for each Tripal Content Type and a TripalField to indicate which exact pages should be private.
+
+`Documentation <https://github.com/tripal/private_biodata/blob/master/README.md>`__
+`Repository <https://github.com/tripal/private_biodata>`__
+
 Tripal Alchemist
 Tripal Alchemist
 -----------------
 -----------------
 
 

+ 12 - 0
docs/extensions/breeding.rst

@@ -0,0 +1,12 @@
+Breeding
+===================
+
+The following modules provide support for managing breeding data.
+
+BIMS
+--------------------------
+
+A module for an online breeding management system which allows breeders to store, manage, archive and analyze their public or private breeding program data.
+
+`Documentation <https://gitlab.com/mainlabwsu/bims/blob/master/README.md>`__
+`Repository <https://gitlab.com/mainlabwsu/bims>`__

+ 5 - 1
docs/extensions/data_input.rst

@@ -6,6 +6,10 @@ The following modules provide interfaces for collection and/or loading of biolog
 Genotype Loader
 Genotype Loader
 ----------------
 ----------------
 
 
+.. image:: https://tripal.readthedocs.io/en/7.x-3.x/_images/Tripal-Gold.png
+  :target: https://tripal.readthedocs.io/en/7.x-3.x/extensions/module_rating.html#Gold
+  :alt: Tripal Rating: Gold
+  
 A Drush-based loader for VCF files that follows the genotype storage rules outline by ND genotypes. It has been optimized to handle very large files and supports customization of ontology terms used.
 A Drush-based loader for VCF files that follows the genotype storage rules outline by ND genotypes. It has been optimized to handle very large files and supports customization of ontology terms used.
 
 
 `Documentation <https://genotypes-loader.readthedocs.io/en/latest/>`__
 `Documentation <https://genotypes-loader.readthedocs.io/en/latest/>`__
@@ -14,7 +18,7 @@ A Drush-based loader for VCF files that follows the genotype storage rules outli
 Mainlab Chado Loader
 Mainlab Chado Loader
 ---------------------
 ---------------------
 
 
-MCL (Mainlab Chado Loader) is a module that enables users to upload their biological data to Chado database schema. Users are required to transfer their biological data into various types of data template files. MCL, then, uploads these data template files into a chado schema.
+MCL (Mainlab Chado Loader) is a module that enables users to upload their biological data to Chado database schema. Users are required to transfer their biological data into various types of data template files. MCL, then, uploads these data template files into a Chado schema.
 
 
 `Documentation <https://gitlab.com/mainlabwsu/mcl/blob/master/README.md>`__
 `Documentation <https://gitlab.com/mainlabwsu/mcl/blob/master/README.md>`__
 `Repository <https://gitlab.com/mainlabwsu/mcl>`__
 `Repository <https://gitlab.com/mainlabwsu/mcl>`__

+ 0 - 8
docs/extensions/in_development.rst

@@ -5,14 +5,6 @@ In Development
 The following modules are not yet ready for production or not fully Tripal 3 compatible.
 The following modules are not yet ready for production or not fully Tripal 3 compatible.
 
 
 
 
-TripalMap
------------
-
-TripalMap MapViewer module displays map data stored in Chado. MapViewer provides interfaces to view all linkage groups of a map, choose a linkage group and zoom in to a specific region of a linkage group, compare maps that share the same markers and change colors of markers/QTL. The interface can be integrated into Tripal map page and hyperlinked to/from any Tripal page that are displayed in maps (marker, QTL, heritable morphological marker and/or gene). The admin page allows site developers some flexibility in the display pattern.
-
-`Documentation <https://gitlab.com/mainlabwsu/tripal_map/blob/master/README.md>`__
-`Repository <https://gitlab.com/mainlabwsu/tripal_map>`__
-
 Tripal Apollo
 Tripal Apollo
 --------------
 --------------
 
 

+ 1 - 1
docs/extensions/module_rating.rst

@@ -23,7 +23,7 @@ Silver
 
 
 - Follows basic Drupal Coding standards; specifically, `code format <https://www.drupal.org/docs/develop/standards/coding-standards>`_ and `API documentation <https://www.drupal.org/docs/develop/standards/api-documentation-and-comment-standards#drupal>`_.
 - Follows basic Drupal Coding standards; specifically, `code format <https://www.drupal.org/docs/develop/standards/coding-standards>`_ and `API documentation <https://www.drupal.org/docs/develop/standards/api-documentation-and-comment-standards#drupal>`_.
 - Uses Tripal API functions. Specifically, it should use the
 - Uses Tripal API functions. Specifically, it should use the
-    - Chado Query API for querying chado (if using chado as the storage system). (`API <http://api.tripal.info/api/tripal/tripal_chado%21api%21tripal_chado.query.api.inc/group/tripal_chado_query_api/3.x>`_, :doc:`Tutorial <../dev_guide/chado>`)
+    - Chado Query API for querying Chado (if using Chado as the storage system). (`API <http://api.tripal.info/api/tripal/tripal_chado%21api%21tripal_chado.query.api.inc/group/tripal_chado_query_api/3.x>`_, :doc:`Tutorial <../dev_guide/chado>`)
     - Tripal Jobs API for long running processes. (`API  <http://api.tripal.info/api/tripal/tripal%21api%21tripal.jobs.api.inc/group/tripal_jobs_api/3.x>`_)
     - Tripal Jobs API for long running processes. (`API  <http://api.tripal.info/api/tripal/tripal%21api%21tripal.jobs.api.inc/group/tripal_jobs_api/3.x>`_)
     - TripalField class to add data to pages (Tripal3). (:doc:`Tutorial <../dev_guide/custom_field>`)
     - TripalField class to add data to pages (Tripal3). (:doc:`Tutorial <../dev_guide/custom_field>`)
 - Provides ways to customize the module (e.g. drush options, field/formatter settings, admin UI).
 - Provides ways to customize the module (e.g. drush options, field/formatter settings, admin UI).

+ 1 - 1
docs/extensions/search.rst

@@ -28,7 +28,7 @@ The Tripal ElasticSearch module allows you to easily manage the indexing and dis
 Tripal MegaSearch
 Tripal MegaSearch
 ---------------------
 ---------------------
 
 
-Tripal MegaSearch is a tool for downloading biological data stored in a Tripal/Chado database. The module was designed to be generic and flexible so it can be used on most Tripal sites. Site administrators may choose from 1) a set of predefined materialized views or 2) chado base tables as the data source to serve data. If neither data source is desired, developers may create their own materialized views and serve them through Tripal MegaSearch via a flexible dynamic query form. This form allows filters to be added dynamically and combined using 'AND/OR' operators. The filters correspond to the underlying data source columns so the user can filter data on each column.
+Tripal MegaSearch is a tool for downloading biological data stored in a Tripal/Chado database. The module was designed to be generic and flexible so it can be used on most Tripal sites. Site administrators may choose from 1) a set of predefined materialized views or 2) Chado base tables as the data source to serve data. If neither data source is desired, developers may create their own materialized views and serve them through Tripal MegaSearch via a flexible dynamic query form. This form allows filters to be added dynamically and combined using 'AND/OR' operators. The filters correspond to the underlying data source columns so the user can filter data on each column.
 
 
 `Documentation <https://gitlab.com/mainlabwsu/tripal_megasearch/blob/master/README.md>`__
 `Documentation <https://gitlab.com/mainlabwsu/tripal_megasearch/blob/master/README.md>`__
 `Repository <https://gitlab.com/mainlabwsu/tripal_megasearch>`__
 `Repository <https://gitlab.com/mainlabwsu/tripal_megasearch>`__

+ 16 - 0
docs/extensions/visualization.rst

@@ -6,6 +6,10 @@ The following modules provide specialized displays for Tripal content types.
 Analyzed Phenotypes
 Analyzed Phenotypes
 --------------------
 --------------------
 
 
+.. image:: https://tripal.readthedocs.io/en/7.x-3.x/_images/Tripal-Gold.png
+  :target: https://tripal.readthedocs.io/en/7.x-3.x/extensions/module_rating.html#Gold
+  :alt: Tripal Rating: Gold
+
 This module provides support and visualization for partially analyzed data stored in a modified GMOD Chado schema. It is meant to support large scale phenotypic data through backwards compatible improvements to the Chado schema including the addition of a project and stock foreign key to the existing phenotype table, optimized queries and well-chosen indexes.
 This module provides support and visualization for partially analyzed data stored in a modified GMOD Chado schema. It is meant to support large scale phenotypic data through backwards compatible improvements to the Chado schema including the addition of a project and stock foreign key to the existing phenotype table, optimized queries and well-chosen indexes.
 
 
 `Documentation <https://analyzedphenotypes.readthedocs.io/en/latest/index.html>`__
 `Documentation <https://analyzedphenotypes.readthedocs.io/en/latest/index.html>`__
@@ -30,6 +34,10 @@ Mainlab Tripal Data Display contains a set of Drupal/PHP templates that organize
 ND Genotypes
 ND Genotypes
 -------------
 -------------
 
 
+.. image:: https://tripal.readthedocs.io/en/7.x-3.x/_images/Tripal-Gold.png
+  :target: https://tripal.readthedocs.io/en/7.x-3.x/extensions/module_rating.html#Gold
+  :alt: Tripal Rating: Gold
+
 This module provides support and visualization of genotypic data stored in a modified GMOD Chado schema. The 3.x branch of this module represents a shift towards support for large scale genotypic datasets through backwards compatible improvements to the Chado schema including a new gathering table for genotypes (genotype_call) modeled after the Chado phenotype table, optimized queries and well-chosen indexes.
 This module provides support and visualization of genotypic data stored in a modified GMOD Chado schema. The 3.x branch of this module represents a shift towards support for large scale genotypic datasets through backwards compatible improvements to the Chado schema including a new gathering table for genotypes (genotype_call) modeled after the Chado phenotype table, optimized queries and well-chosen indexes.
 
 
 `Documentation <https://nd-genotypes.readthedocs.io/en/latest/>`__
 `Documentation <https://nd-genotypes.readthedocs.io/en/latest/>`__
@@ -51,3 +59,11 @@ This module provides additional fields for use with Tripal 3. The current versio
 
 
 `Documentation <https://github.com/tripal/trpfancy_fields/blob/master/README.md>`__
 `Documentation <https://github.com/tripal/trpfancy_fields/blob/master/README.md>`__
 `Repository <https://github.com/tripal/trpfancy_fields>`__
 `Repository <https://github.com/tripal/trpfancy_fields>`__
+
+TripalMap
+-----------
+
+TripalMap MapViewer module displays map data stored in Chado. MapViewer provides interfaces to view all linkage groups of a map, choose a linkage group and zoom in to a specific region of a linkage group, compare maps that share the same markers and change colors of markers/QTL. The interface can be integrated into Tripal map page and hyperlinked to/from any Tripal page that are displayed in maps (marker, QTL, heritable morphological marker and/or gene). The admin page allows site developers some flexibility in the display pattern.
+
+`Documentation <https://gitlab.com/mainlabwsu/tripal_map/blob/master/README.md>`__
+`Repository <https://gitlab.com/mainlabwsu/tripal_map>`__

+ 1 - 1
docs/user_guide/bulk_loader.rst

@@ -316,7 +316,7 @@ Once complete, return to the search form, find a *Fragaria* species that has bee
 Sharing Your Templates with Others
 Sharing Your Templates with Others
 ----------------------------------
 ----------------------------------
 
 
-Now that our template for loading organisms with NCBI Taxonomy IDs is completed we can share our template loader with anyone else that has a Tripal-based site.  To do this we simply export the template in text format, place it in a text file or directly in an email and send to a collaborator for import into their site.  To do this, navigate to **Tripal → Chado Data Loaders → Buik Loader** and click the **Tempalate** tab at the top.  Here we find a table of all the tempaltes we have created.  We should see our template named **NCBI Taxonomy Importer** (taxid, genus, species).  In the far right colum is a link to export that template.  Licking that link will redirect you to a page where the template is provided in a serialized PHP array.
+Now that our template for loading organisms with NCBI Taxonomy IDs is completed we can share our template loader with anyone else that has a Tripal-based site.  To do this we simply export the template in text format, place it in a text file or directly in an email and send to a collaborator for import into their site.  To do this, navigate to **Tripal → Chado Data Loaders → Buik Loader** and click the **Tempalate** tab at the top.  Here we find a table of all the templates we have created.  We should see our template named **NCBI Taxonomy Importer** (taxid, genus, species).  In the far right colum is a link to export that template.  Licking that link will redirect you to a page where the template is provided in a serialized PHP array.
 
 
 .. image:: ./bulk_loader.13.png
 .. image:: ./bulk_loader.13.png
 
 

+ 2 - 2
docs/user_guide/content_types/configuring_page_display.rst

@@ -1,6 +1,6 @@
 Configuring Page Layout
 Configuring Page Layout
 =======================
 =======================
-This is one of the many new exciting features of Tripal v3. Integration with Drupal Fields has gone to a whole new level. Site builders have unprecendented control over the display of each piece of data through the administrative user interface. Previously, site builders were required to edit PHP template files to change the order, grouping or wording of content.
+This is one of the many new exciting features of Tripal v3. Integration with Drupal Fields has gone to a whole new level. Site builders have unprecedented control over the display of each piece of data through the administrative user interface. Previously, site builders were required to edit PHP template files to change the order, grouping or wording of content.
 
 
 You can configure the display of a given Tripal Content Type by navigating to **Structure → Tripal Content Types** and then selecting the **Manage Display** link beside the content type you would like to configure.
 You can configure the display of a given Tripal Content Type by navigating to **Structure → Tripal Content Types** and then selecting the **Manage Display** link beside the content type you would like to configure.
 
 
@@ -15,7 +15,7 @@ The Manage Display User Interface lists each Drupal Field in the order they will
 Rearranging Fields
 Rearranging Fields
 ------------------
 ------------------
 
 
-To rearrange the fields within a Tripal pane, simply drag them into the order you would like them. For example, the description is currently within the Summary table --it makes much more sense for it to be below the table but still within the summary. To do this, simply drag the description field to the bottom of the summary table and then move it in one level as shown in the following screenshot. Then click the **Save** button at the botton to save the changes.
+To rearrange the fields within a Tripal pane, simply drag them into the order you would like them. For example, the description is currently within the Summary table --it makes much more sense for it to be below the table but still within the summary. To do this, simply drag the description field to the bottom of the summary table and then move it in one level as shown in the following screenshot. Then click the **Save** button at the bottom to save the changes.
 
 
 .. image:: configuring_page_display.3.rearrange.png
 .. image:: configuring_page_display.3.rearrange.png
 
 

+ 1 - 1
docs/user_guide/content_types/field_loading.rst

@@ -23,4 +23,4 @@ Depending on the number of fields for your content type and the amount of data t
 
 
 .. note::
 .. note::
  
  
-  You can control AJAX loading and hiding of empty fields differently for each conent type.
+  You can control AJAX loading and hiding of empty fields differently for each content type.

+ 11 - 17
docs/user_guide/example_genomics/func_annots/setup.rst

@@ -3,41 +3,37 @@ Module Setup
 .. note::
 .. note::
 
 
   Remember you must set the ``$DRUPAL_HOME`` environment variable if you want to cut-and-paste the commands below. See :doc:`../../install_tripal/drupal_home`
   Remember you must set the ``$DRUPAL_HOME`` environment variable if you want to cut-and-paste the commands below. See :doc:`../../install_tripal/drupal_home`
-  
-  
-For this example we will be load functional data for our gene. To do this we will use the Blast, KEGG, and InterPro extension modules. However, these extension modules are not part of the "core" Tripal package but are available as separate extensions.  Anyone may create extensions for Tripal.  These extensions are useful for genomic data and therefore are included in this tutorial. 
+
+
+For this example we will be load functional data for our gene. To do this we will use the Blast, KEGG, and InterPro extension modules. However, these extension modules are not part of the "core" Tripal package but are available as separate extensions.  Anyone may create extensions for Tripal.  These extensions are useful for genomic data and therefore are included in this tutorial.
 
 
 To download these modules:
 To download these modules:
 
 
   ::
   ::
-  
-    cd $DRUPAL_HOME    
+
+    cd $DRUPAL_HOME
     drush pm-download tripal_analysis_blast
     drush pm-download tripal_analysis_blast
-    drush pm-download tripal_analysis_kegg
     drush pm-download tripal_analysis_interpro
     drush pm-download tripal_analysis_interpro
 
 
 Now, enable these extension modules:
 Now, enable these extension modules:
 
 
   ::
   ::
-  
+
     drush pm-enable tripal_analysis_blast
     drush pm-enable tripal_analysis_blast
     drush pm-enable tripal_analysis_interpro
     drush pm-enable tripal_analysis_interpro
-    drush pm-enable tripal_analysis_kegg
 
 
 For this example, we will use the following files which are available for downloading:
 For this example, we will use the following files which are available for downloading:
 
 
 - `Citrus_sinensis-orange1.1g015632m.g.iprscan.xml <http://www.gmod.org/mediawiki/images/0/0c/Citrus_sinensis-orange1.1g015632m.g.iprscan.xml>`_
 - `Citrus_sinensis-orange1.1g015632m.g.iprscan.xml <http://www.gmod.org/mediawiki/images/0/0c/Citrus_sinensis-orange1.1g015632m.g.iprscan.xml>`_
-- `Citrus_sinensis-orange1.1g015632m.g.KEGG.heir.tar.gz <http://www.gmod.org/mediawiki/images/1/13/Citrus_sinensis-orange1.1g015632m.g.KEGG.heir.tar.gz>`_
 - `Blastx_citrus_sinensis-orange1.1g015632m.g.fasta.0_vs_uniprot_sprot.fasta.out <http://www.gmod.org/mediawiki/images/e/e8/Blastx_citrus_sinensis-orange1.1g015632m.g.fasta.0_vs_uniprot_sprot.fasta.out>`_
 - `Blastx_citrus_sinensis-orange1.1g015632m.g.fasta.0_vs_uniprot_sprot.fasta.out <http://www.gmod.org/mediawiki/images/e/e8/Blastx_citrus_sinensis-orange1.1g015632m.g.fasta.0_vs_uniprot_sprot.fasta.out>`_
 - `Blastx_citrus_sinensis-orange1.1g015632m.g.fasta.0_vs_nr.out <http://www.gmod.org/mediawiki/images/2/24/Blastx_citrus_sinensis-orange1.1g015632m.g.fasta.0_vs_nr.out>`_
 - `Blastx_citrus_sinensis-orange1.1g015632m.g.fasta.0_vs_nr.out <http://www.gmod.org/mediawiki/images/2/24/Blastx_citrus_sinensis-orange1.1g015632m.g.fasta.0_vs_nr.out>`_
 
 
 Download these files to the ```$DRUPAL_HOME/sites/default/files``` directory. To do so quickly run these commands:
 Download these files to the ```$DRUPAL_HOME/sites/default/files``` directory. To do so quickly run these commands:
 
 
   ::
   ::
-  
+
     cd $DRUPAL_HOME/sites/default/files
     cd $DRUPAL_HOME/sites/default/files
     wget http://www.gmod.org/mediawiki/images/0/0c/Citrus_sinensis-orange1.1g015632m.g.iprscan.xml
     wget http://www.gmod.org/mediawiki/images/0/0c/Citrus_sinensis-orange1.1g015632m.g.iprscan.xml
-    wget http://www.gmod.org/mediawiki/images/1/13/Citrus_sinensis-orange1.1g015632m.g.KEGG.heir.tar.gz
     wget http://www.gmod.org/mediawiki/images/e/e8/Blastx_citrus_sinensis-orange1.1g015632m.g.fasta.0_vs_uniprot_sprot.fasta.out
     wget http://www.gmod.org/mediawiki/images/e/e8/Blastx_citrus_sinensis-orange1.1g015632m.g.fasta.0_vs_uniprot_sprot.fasta.out
     wget http://www.gmod.org/mediawiki/images/2/24/Blastx_citrus_sinensis-orange1.1g015632m.g.fasta.0_vs_nr.out
     wget http://www.gmod.org/mediawiki/images/2/24/Blastx_citrus_sinensis-orange1.1g015632m.g.fasta.0_vs_nr.out
 
 
@@ -45,23 +41,22 @@ Each of these modules provides new fields for both the **gene** and **mRNA** con
 
 
 .. image:: setup1.png
 .. image:: setup1.png
 
 
-Next, we need to position the new field. Using the skills you learned in the :doc:`../../content_types/configuring_page_display` Create three new **Tripal Panes** named:
+Next, we need to position the new field. Using the skills you learned in the :doc:`../../content_types/configuring_page_display` Create two new **Tripal Panes** named:
 
 
 - Blast Results
 - Blast Results
 - Protein Domains
 - Protein Domains
-- KEGG Pathways
 
 
 Be sure to:
 Be sure to:
 
 
-- Place the three new fields into each pane respectively 
-- Move the Panes out of the **disabled** section. 
+- Place the new fields into each pane respectively
+- Move the Panes out of the **disabled** section.
 - Set the label for each field to **Hidden**.
 - Set the label for each field to **Hidden**.
 
 
 The following shows an example of this layout:
 The following shows an example of this layout:
 
 
 .. image:: setup2.png
 .. image:: setup2.png
 
 
-The fields are now ready for display once data is added!  
+The fields are now ready for display once data is added!
 
 
 .. note::
 .. note::
 
 
@@ -70,4 +65,3 @@ The fields are now ready for display once data is added!
 .. note::
 .. note::
 
 
   Anytime you install a Tripal v3 extension module you should check for new fields, and then place those fields in the layout.  Extension modules often will not do this for you because they do not assume you want these new fields.
   Anytime you install a Tripal v3 extension module you should check for new fields, and then place those fields in the layout.  Extension modules often will not do this for you because they do not assume you want these new fields.
-  

BIN
docs/user_guide/example_genomics/func_annots/setup2.png


BIN
docs/user_guide/example_genomics/genomes_genes.1.png


BIN
docs/user_guide/example_genomics/genomes_genes.5.png


BIN
docs/user_guide/example_genomics/genomes_genes.6.png


BIN
docs/user_guide/example_genomics/genomes_genes.7.png


BIN
docs/user_guide/example_genomics/genomes_genes.8.png


BIN
docs/user_guide/example_genomics/genomes_genes.9.png


+ 79 - 22
docs/user_guide/example_genomics/genomes_genes.rst

@@ -26,9 +26,13 @@ Enter the following:
 
 
   "File", "Upload the file name Citrus_sinensis-orange1.1g015632m.g.gff3"
   "File", "Upload the file name Citrus_sinensis-orange1.1g015632m.g.gff3"
   "Analysis", "Whole Genome Assembly and Annotation of Citrus sinensis"
   "Analysis", "Whole Genome Assembly and Annotation of Citrus sinensis"
-  "Organism", "Citrus sinensis"
+  "Existing Organism", "Citrus sinensis"
+  "Landmark Type", "supercontig"
   "All other options", "leave as default"
   "All other options", "leave as default"
 
 
+.. note::
+    The Landmark Type is provided for this demo GFF3 file because the chromosome is not defined in the file, only the genomic features on the chromosomes.  The landmark type is not needed if the GFF3 file has the chromosomes (scaffolds or contigs) defined in the GFF3 file.
+
 Finally, click the Import GFF3 file button. You'll notice a job was submitted to the jobs subsystem. Now, to complete the process we need the job to run. We'll do this manually:
 Finally, click the Import GFF3 file button. You'll notice a job was submitted to the jobs subsystem. Now, to complete the process we need the job to run. We'll do this manually:
 
 
 ::
 ::
@@ -39,27 +43,54 @@ You should see output similar to the following:
 
 
 ::
 ::
 
 
-  Tripal Job Launcher
-  Running as user 'administrator'
-  -------------------
-  2018-06-29 18:00:50: There are 1 jobs queued.
-  2018-06-29 18:00:50: Job ID 8.
-  2018-06-29 18:00:50: Calling: tripal_run_importer(12)
-
-  Running 'Chado GFF3 File Loader' importer
-  NOTE: Loading of file is performed using a database transaction.
-  If it fails or is terminated prematurely then all insertions and
-  updates are rolled back and will not be found in the database
+    2020-10-02 21:53:18
+    Tripal Job Launcher
+    Running as user 'admin'
+    -------------------
+    2020-10-02 21:53:18: There are 1 jobs queued.
+    2020-10-02 21:53:18: Job ID 1310.
+    2020-10-02 21:53:18: Calling: tripal_run_importer(123)
+
+    Running 'Chado GFF3 File Loader' importer
+    NOTE: Loading of file is performed using a database transaction.
+    If it fails or is terminated prematurely then all insertions and
+    updates are rolled back and will not be found in the database
+
+    Opening /var/www/html/sites/default/files/tripal/users/1/Citrus_sinensis-orange1.1g015632m.g.gff3
+    Opening temporary cache file: /tmp/TripalGFF3Import_aUgoru
+    Step  1 of 26: Caching GFF3 file...
+    Step  2 of 26: Find existing landmarks...
+    Step  3 of 26: Insert new landmarks (if needed)...
+    Step  4 of 26: Find missing proteins...
+    Step  5 of 26: Add missing proteins to list of features...
+    Step  6 of 26: Find existing features...
+    Step  7 of 26: Clear attributes of existing features...
+    Step  8 of 26: Processing 135 features...
+    Step  9 of 26: Get new feature IDs...
+    Step 10 of 26: Insert locations...
+    Step 11 of 26: Associate parents and children...
+    Step 12 of 26: Calculate child ranks...
+    Step 13 of 26: Add child-parent relationships...
+    Step 14 of 26: Insert properties...
+    Step 15 of 26: Find synonyms (aliases)...
+    Step 16 of 26: Insert new synonyms (aliases)...
+    Step 17 of 26: Insert feature synonyms (aliases)...
+    Step 18 of 26: Find cross references...
+    Step 19 of 26: Insert new cross references...
+    Step 20 of 26: Get new cross references IDs...
+    Step 21 of 26: Insert feature cross references...
+    Step 22 of 26: Insert feature ontology terms...
+    Step 23 of 26: Insert 'derives_from' relationships...
+    Step 24 of 26: Insert Targets...
+    Step 25 of 26: Associate features with analysis....
+    Step 26 of 26: Adding sequences data (Skipped: none available)...
+
+    Done.
+    Committing Transaction...
+
+    Remapping Chado Controlled vocabularies to Tripal Terms...
+    Done.
 
 
-  Opening /var/www/html/sites/default/files/tripal/users/1/Citrus_sinensis-orange1.1g015632m.g.gff3
-  Percent complete: 100.00%. Memory: 32,211,360 bytes.
-  Adding protein sequences if CDS exist and no proteins in GFF...
-  Setting ranks of children...
-
-  Done.
-
-  Remapping Chado Controlled vocabularies to Tripal Terms...
-  Done.
 
 
 .. note::
 .. note::
 
 
@@ -160,7 +191,7 @@ Now the scaffold sequence and mRNA sequences are loaded!
   It is not required to load the mRNA sequences as those can be derived from their alignments with the scaffold sequence. However, in Chado the **feature** table has a **residues** column. Therefore, it is best practice to load the sequence when possible.
   It is not required to load the mRNA sequences as those can be derived from their alignments with the scaffold sequence. However, in Chado the **feature** table has a **residues** column. Therefore, it is best practice to load the sequence when possible.
 
 
 Creating Gene Pages
 Creating Gene Pages
-----------------------
+-------------------
 Now that we've loaded our feature data, we must publish them. This is different than when we manually created our Organism and Analysis pages.  Using the GFF and FASTA loaders we imported our data into Chado, but currently there are no published pages for this data that we loaded.  To publish these genomic features, navigating to Structure → Tripal Content Types and click the link titled Publish Chado Content.  The following page appears:
 Now that we've loaded our feature data, we must publish them. This is different than when we manually created our Organism and Analysis pages.  Using the GFF and FASTA loaders we imported our data into Chado, but currently there are no published pages for this data that we loaded.  To publish these genomic features, navigating to Structure → Tripal Content Types and click the link titled Publish Chado Content.  The following page appears:
 
 
 .. image:: genomes_genes.3.png
 .. image:: genomes_genes.3.png
@@ -221,3 +252,29 @@ Next find an mRNA page to view.  Remember when we loaded our FASTA file for mRNA
 - We associated the Phytozome accession with the features using a regular expression when importing the FASTA file.
 - We associated the Phytozome accession with the features using a regular expression when importing the FASTA file.
 
 
 All data that appears on the page is derived from the GFF file and the FASTA  files we loaded.
 All data that appears on the page is derived from the GFF file and the FASTA  files we loaded.
+
+
+Customizing Transcripts on Gene Pages
+-------------------------------------
+By default the gene pages provided by Tripal will have a link in the sidebar table of contents named **Transcripts** and when clicked a table appears that lists all of the transcripts (or mRNA) that belong to the gene.  The user can click to view more information about each published transcript.
+
+.. image:: genomes_genes.6.png
+
+Sometimes however, more than just a listing of transcripts is desired on a gene page.  You can customize the information that is presented about each transcript by navigating to the gene content type at  **Structure → Tripal Content Types** and clicking **mange fields** in the **Gene** row.  This page allows you to customize the way fields are displayed on the gene page.  Scroll down the page to the **Transcript** row and click the **edit** button.  The following page should appear.
+
+.. image:: genomes_genes.7.png
+
+Open the field set titled **Transcript (mRNA) Field Selection** to view a table that lists all of the available fields for a transcript.
+
+.. image:: genomes_genes.8.png
+
+On this page you can check the boxes next to the field that you want to show for a transcript on the gene page.  For this example, we will select the fields **Name**, **Identifier**, **Resource Type**, **Anotations**, and **Sequences** (they may not be in this order on your own site). You can control the order in which fields will be shown by dragging them using the crosshairs icon next to each one.  Scroll to the bottom of the page and click the **Save Settings** button.
+
+Next return to the gene page, reload it, and click on the **Transcripts** link. Now you are provided a select box with the transcript names. When a transcript is selected, the pane below will populate with the fields that you selected when editing in the Transcript field.
+
+.. image:: genomes_genes.9.png
+
+You can return to the Transcript field edit page under the Gene content  type at any time to add, remove or change the order of fields that appear for the transcript.
+
+.. note::
+    Transcripts on a gene page can only be customized if all of them are published. If not, the default table listing is shown.

+ 1 - 1
docs/user_guide/example_genomics/organisms.rst

@@ -44,7 +44,7 @@ Tripal makes it easy to import additional information about any organisms within
 
 
 .. image:: organisms.taxonomy_loader.png
 .. image:: organisms.taxonomy_loader.png
 
 
-Click the checbox beside the 'Import taxonomy for existing species' and click Submit.  Now run the submitted job:
+Click the checkbox beside the 'Import taxonomy for existing species' and click Submit.  Now run the submitted job:
 
 
 ::
 ::
 
 

+ 8 - 9
docs/user_guide/example_genomics/pub_import.rst

@@ -3,7 +3,7 @@ Importing Publications
 .. note::
 .. note::
 
 
   Remember you must set the ``$DRUPAL_HOME`` environment variable if you want to cut-and-paste the commands below. See :doc:`../install_tripal/drupal_home`
   Remember you must set the ``$DRUPAL_HOME`` environment variable if you want to cut-and-paste the commands below. See :doc:`../install_tripal/drupal_home`
-  
+
 Tripal provides an interface for automatically and manually adding publications.
 Tripal provides an interface for automatically and manually adding publications.
 
 
 Manually Adding a Publication
 Manually Adding a Publication
@@ -64,7 +64,7 @@ Now, save this importer. You should see that we have one importer in the list:
 
 
 .. image:: pub_import.4.png
 .. image:: pub_import.4.png
 
 
-We can use this importer to load all  publications related to Citrus sinensis from PubMed into our database (how to load these will be shown later). However, what if new publications are added? We would like this importer to be run monthly so that we can automatically add new publications as they become available. But we do not need to try to reload these 760 every time the loader runs each month. We will create a new importer that only finds publications within the last 30 days. To do this, click the link New Importer. Now, add the following criteria:
+We can use this importer to load all  publications related to <i>Citrus sinensis</i> from PubMed into our database (how to load these will be shown later). However, what if new publications are added? We would like this importer to be run monthly so that we can automatically add new publications as they become available. But we do not need to try to reload the same publications every time the loader runs each month. We will create a new importer that only finds publications within the last 30 days. To do this, click the link New Importer. Now, add the following criteria:
 
 
 .. csv-table::
 .. csv-table::
   :header: "Field Name", "Value"
   :header: "Field Name", "Value"
@@ -142,14 +142,14 @@ Import from the USDA National Agricultural Library
 The instructions for the Tripal publication importer described previously use the the NCBI PubMed database. However, you can also import publications from the USDA National Agriculture Library (AGRICOLA). However, to use this repository a few software dependences are required.  These include:
 The instructions for the Tripal publication importer described previously use the the NCBI PubMed database. However, you can also import publications from the USDA National Agriculture Library (AGRICOLA). However, to use this repository a few software dependences are required.  These include:
 
 
 - The `YAZ library <https://www.indexdata.com/resources/software/yaz/>`_
 - The `YAZ library <https://www.indexdata.com/resources/software/yaz/>`_
-- `PHP support for YAZ <https://www.php.net/manual/en/book.yaz.php>`_  
+- `PHP support for YAZ <https://www.php.net/manual/en/book.yaz.php>`_
 
 
-The following instructions are to install the necessary dependencies on an Ubuntu 18.04 LTS.   
+The following instructions are to install the necessary dependencies on an Ubuntu 18.04 LTS.
 
 
 First install yaz, the yaz development library and the php development library:
 First install yaz, the yaz development library and the php development library:
 
 
 .. code-block:: bash
 .. code-block:: bash
- 
+
   sudo apt-get install yaz libyaz5-dev php-dev
   sudo apt-get install yaz libyaz5-dev php-dev
 
 
 
 
@@ -157,10 +157,10 @@ Next update the PECL tool and install the PHP yaz library:
 
 
 
 
 .. code-block:: bash
 .. code-block:: bash
-  
+
   sudo pecl channel-update pecl.php.net
   sudo pecl channel-update pecl.php.net
   sudo pecl install yaz
   sudo pecl install yaz
-  
+
 Next, edit the `php.ini` files.  On Ubuntu 18.04 there are two PHP files:
 Next, edit the `php.ini` files.  On Ubuntu 18.04 there are two PHP files:
 
 
 - `/etc/php/7.2/cli/php.ini`
 - `/etc/php/7.2/cli/php.ini`
@@ -175,8 +175,7 @@ Add the following line to each file:
 Finally, restart the web server so that it picks up the changes to the `php.ini` file.
 Finally, restart the web server so that it picks up the changes to the `php.ini` file.
 
 
 .. code-block:: bash
 .. code-block:: bash
-  
+
   sudo service apache2 restart
   sudo service apache2 restart
 
 
 You can now import publications from Agricola using the same interface as with PubMed.
 You can now import publications from Agricola using the same interface as with PubMed.
-

+ 1 - 1
docs/user_guide/install_tripal/custom_theme.rst

@@ -7,7 +7,7 @@ Drupal makes it easy to change the look-and-feel of your site by providing Theme
 
 
 Customizing a Theme
 Customizing a Theme
 -------------------
 -------------------
-If you want to make customizations to the theme you should create your own sub theme.  A sub theme borrows from an existing **base theme** (e.g. Bartik) and allows you to make your customizations.  Thus, when updates for a theme are released you can easily upgrade your base theme without losing your changes.   To create a sub theme, follow the instructions on the `Creating a sub-theme page <https://www.drupal.org/docs/7/theming/creating-a-sub-theme>`_ on the Drupal website.  Alternatively, completely custom themes do not borrow from any othe theme, you can create your own full-blown theme by following the `Themeing instructions <https://www.drupal.org/docs/7/theming>`_ at the Drupal website.
+If you want to make customizations to the theme you should create your own sub theme.  A sub theme borrows from an existing **base theme** (e.g. Bartik) and allows you to make your customizations.  Thus, when updates for a theme are released you can easily upgrade your base theme without losing your changes.   To create a sub theme, follow the instructions on the `Creating a sub-theme page <https://www.drupal.org/docs/7/theming/creating-a-sub-theme>`_ on the Drupal website.  Alternatively, completely custom themes do not borrow from any other theme, you can create your own full-blown theme by following the `Theming instructions <https://www.drupal.org/docs/7/theming>`_ at the Drupal website.
 
 
 .. note::
 .. note::
 
 

+ 1 - 1
docs/user_guide/install_tripal/drupal_home.rst

@@ -1,6 +1,6 @@
 DRUPAL_HOME Variable
 DRUPAL_HOME Variable
 ====================
 ====================
-An important convention in this document is the use of the ``$DRUPAL_HOME`` environment variable.  If you are new to UNIX/Linux you can learn about environment variables `here <https://www.tutorialspoint.com/unix/unix-environment.htm>`_.  Drupal is a necessary depenency of Tripal.  The setup and installation sections describe how to install Drupal.  If you follow the instructions exactly as described in this User's Guide you will install Drupal into ``/var/www/html``. However, some may desire to install Drupal elsewhere.  To ensure that all command-line examples in this guide can be cut-and-pasted you **must** set the ``$DRUPAL_HOME`` variable.  You can set the variable in the following way:
+An important convention in this document is the use of the ``$DRUPAL_HOME`` environment variable.  If you are new to UNIX/Linux you can learn about environment variables `here <https://www.tutorialspoint.com/unix/unix-environment.htm>`_.  Drupal is a necessary dependency of Tripal.  The setup and installation sections describe how to install Drupal.  If you follow the instructions exactly as described in this User's Guide you will install Drupal into ``/var/www/html``. However, some may desire to install Drupal elsewhere.  To ensure that all command-line examples in this guide can be cut-and-pasted you **must** set the ``$DRUPAL_HOME`` variable.  You can set the variable in the following way:
 
 
   .. code-block:: bash
   .. code-block:: bash
 
 

+ 1 - 1
docs/user_guide/install_tripal/server_setup.rst

@@ -6,7 +6,7 @@ Before installation of Tripal, a web server must be configured and ready, and Tr
 1. A UNIX-based server (e.g. Ubuntu Linux or CentOS are the most popularly used).
 1. A UNIX-based server (e.g. Ubuntu Linux or CentOS are the most popularly used).
 2. Web server software. The `Apache web server <https://httpd.apache.org/>`_ is most commonly used.
 2. Web server software. The `Apache web server <https://httpd.apache.org/>`_ is most commonly used.
 3. `PHP <http://php.net/>`_ version 5.6 or higher (the most recent version is recommended).
 3. `PHP <http://php.net/>`_ version 5.6 or higher (the most recent version is recommended).
-4. `PostgreSQL <https://www.postgresql.org/>`_ 9.3 or higher
+4. `PostgreSQL <https://www.postgresql.org/>`_ 9.3 or higher (9.5 required for Chado 1.2 to 1.3 upgrade)
 5. `Drush <http://www.drush.org/en/master/>`_ 7 or higher
 5. `Drush <http://www.drush.org/en/master/>`_ 7 or higher
 6. `Drupal <https://www.drupal.org/>`_ 7.
 6. `Drupal <https://www.drupal.org/>`_ 7.
 
 

+ 1 - 1
docs/user_guide/install_tripal/upgrade_from_tripal2.rst

@@ -50,7 +50,7 @@ Step 1: Upgrade Tripal
 
 
   .. code-block:: bash
   .. code-block:: bash
 
 
-    drush pm-download tripal-7.x-3.1
+    drush pm-download tripal-7.x-3.5
 
 
 5. Enable the tripal module
 5. Enable the tripal module
 
 

+ 1 - 1
docs/user_guide/job_management.rst

@@ -6,7 +6,7 @@ Job Management (Tripal Daemon)
   Remember you must set the $DRUPAL_HOME environment variable to cut-and-paste the commands below. See see :doc:`./install_tripal/drupal_home`
   Remember you must set the $DRUPAL_HOME environment variable to cut-and-paste the commands below. See see :doc:`./install_tripal/drupal_home`
 
 
 
 
-The Tripal Daemon module is meant to provide a simple means of creating a robust command-line-driven, fully bootstrapped PHP Daemon. It uses the PHP-Daemon (https://github.com/shaneharter/PHP-Daemon) Library to create the Daemon (via the Libraries API) in order to not re-invent the wheel. It allows you to execute Jobs submitted to Tripal without using cron.  It provides a faster user experience for running jobs.  Prior to Tripal v3, the Tripal Daemon module was an extension module. It was integrated into the core Tripal pacakge.
+The Tripal Daemon module is meant to provide a simple means of creating a robust command-line-driven, fully bootstrapped PHP Daemon. It uses the PHP-Daemon (https://github.com/shaneharter/PHP-Daemon) Library to create the Daemon (via the Libraries API) in order to not re-invent the wheel. It allows you to execute Jobs submitted to Tripal without using cron.  It provides a faster user experience for running jobs.  Prior to Tripal v3, the Tripal Daemon module was an extension module. It was integrated into the core Tripal package.
 
 
 Features
 Features
 --------
 --------

+ 1 - 1
docs/user_guide/searching/search_api.rst

@@ -32,7 +32,7 @@ This tutorial covers using a basic Drupal database storage backend for your sear
 .. figure:: ./search_api.2.png
 .. figure:: ./search_api.2.png
 
 
 
 
-Before proceeding, consider deleting the "Default node index". We don't need it.  Next, click the **Add Server link**.  We are configuring a basic drupal database seach server we do not need to install any third-part software or set-up an external server. Instead, fill out the configuration form to tell the Search API to use its own database to store the search index.  Give this server the name "Drupal Database" and select "Database service" from the **Service Class** drop down.  In the **Database Service** section, select  "Search on parts of a word." If the search is slow due to this feature, then it is an indicator that your site should use a different service class (ie: Elastic Search or Apache Solr). Click "Create Server" to finish configuring the Search backend.
+Before proceeding, consider deleting the "Default node index". We don't need it.  Next, click the **Add Server link**.  We are configuring a basic drupal database search server we do not need to install any third-part software or set-up an external server. Instead, fill out the configuration form to tell the Search API to use its own database to store the search index.  Give this server the name "Drupal Database" and select "Database service" from the **Service Class** drop down.  In the **Database Service** section, select  "Search on parts of a word." If the search is slow due to this feature, then it is an indicator that your site should use a different service class (ie: Elastic Search or Apache Solr). Click "Create Server" to finish configuring the Search backend.
 
 
 
 
 .. figure:: ./search_api.3.png
 .. figure:: ./search_api.3.png

+ 1 - 1
legacy/tripal_analysis/tripal_analysis.info

@@ -3,7 +3,7 @@ description = Supports the companalyses tables of Chado by providing pages for v
 core = 7.x
 core = 7.x
 project = tripal
 project = tripal
 package = Tripal v2 Legacy
 package = Tripal v2 Legacy
-version = 7.x-3.1
+version = 7.x-3.5
 configure = admin/tripal/legacy/tripal_analysis/configuration
 configure = admin/tripal/legacy/tripal_analysis/configuration
 
 
 dependencies[] = tripal_core
 dependencies[] = tripal_core

+ 1 - 1
legacy/tripal_analysis/tripal_analysis.views_default.inc

@@ -38,7 +38,7 @@ function tripal_analysis_views_default_views() {
 function tripal_analysis_defaultvalue_user_analysis() {
 function tripal_analysis_defaultvalue_user_analysis() {
 
 
   // As a shortcut, currently I am copying the admin view and then tweaking it
   // As a shortcut, currently I am copying the admin view and then tweaking it
-  // In thie future this should be replaced by a views export
+  // In the future this should be replaced by a views export
   $view = tripal_analysis_defaultvalue_admin_analysis();
   $view = tripal_analysis_defaultvalue_admin_analysis();
 
 
   // change some view admin stuff
   // change some view admin stuff

+ 1 - 1
legacy/tripal_contact/tripal_contact.info

@@ -3,7 +3,7 @@ description = Supports the contact tables of Chado by providing pages for viewin
 core = 7.x
 core = 7.x
 project = tripal
 project = tripal
 package = Tripal v2 Legacy
 package = Tripal v2 Legacy
-version = 7.x-3.1
+version = 7.x-3.5
 
 
 dependencies[] = tripal_core
 dependencies[] = tripal_core
 dependencies[] = tripal_chado_views
 dependencies[] = tripal_chado_views

+ 1 - 1
legacy/tripal_contact/tripal_contact.views_default.inc

@@ -37,7 +37,7 @@ function tripal_contact_views_default_views() {
 function tripal_contact_defaultvalue_user_contacts() {
 function tripal_contact_defaultvalue_user_contacts() {
 
 
   // As a shortcut, currently I am copying the admin view and then tweaking it
   // As a shortcut, currently I am copying the admin view and then tweaking it
-  // In thie future this should be replaced by a views export
+  // In the future this should be replaced by a views export
   $view = tripal_contact_defaultview_admin_contacts();
   $view = tripal_contact_defaultview_admin_contacts();
 
 
   // change some view admin stuff
   // change some view admin stuff

+ 1 - 1
legacy/tripal_core/api/tripal_core.chado_nodes.api.inc

@@ -774,7 +774,7 @@ function chado_node_sync_form_submit($form, $form_state) {
  *   sync.
  *   sync.
  * @param $organism_id
  * @param $organism_id
  *   Optional: Limit the list of records to be synced to only those that
  *   Optional: Limit the list of records to be synced to only those that
- *   are associated with this organism_id. If the record is not assocaited
+ *   are associated with this organism_id. If the record is not associated
  *   with an organism then this field is not needed.
  *   with an organism then this field is not needed.
  * @param $types
  * @param $types
  *   Optional: Limit the list of records to be synced to only those that
  *   Optional: Limit the list of records to be synced to only those that

+ 2 - 2
legacy/tripal_core/api/tripal_core.chado_nodes.properties.api.inc

@@ -178,7 +178,7 @@ function chado_add_node_form_properties(&$form, &$form_state, $details) {
   // make sure the property table exists before proceeding.
   // make sure the property table exists before proceeding.
   if (!chado_table_exists($details['property_table'])) {
   if (!chado_table_exists($details['property_table'])) {
     drupal_set_message("Cannot add property elements to the form. The property table, '" .
     drupal_set_message("Cannot add property elements to the form. The property table, '" .
-      $details['property_table'] . "', does not exists", "error");
+      $details['property_table'] . "', does not exist", "error");
     tripal_report_error('tcprops_form', TRIPAL_ERROR,
     tripal_report_error('tcprops_form', TRIPAL_ERROR,
       "Cannot add property elements to the form. The property table, '%name', cannot be found.",
       "Cannot add property elements to the form. The property table, '%name', cannot be found.",
       ['%name' => $details['property_table']]);
       ['%name' => $details['property_table']]);
@@ -203,7 +203,7 @@ function chado_add_node_form_properties(&$form, &$form_state, $details) {
     $result = chado_select_record('cv', ['cv_id'], ['name' => $details['cv_name']]);
     $result = chado_select_record('cv', ['cv_id'], ['name' => $details['cv_name']]);
     if (count($result) == 0) {
     if (count($result) == 0) {
       drupal_set_message("Cannot add property elements to the form. The CV name, '" .
       drupal_set_message("Cannot add property elements to the form. The CV name, '" .
-        $details['cv_name'] . "', does not exists", "error");
+        $details['cv_name'] . "', does not exist", "error");
       tripal_report_error('tcprops_form', TRIPAL_ERROR,
       tripal_report_error('tcprops_form', TRIPAL_ERROR,
         "Cannot add property elements to the form. The CV named, '%name', cannot be found.",
         "Cannot add property elements to the form. The CV named, '%name', cannot be found.",
         ['%name' => $details['cv_name']]);
         ['%name' => $details['cv_name']]);

+ 2 - 2
legacy/tripal_core/api/tripal_core.chado_nodes.relationships.api.inc

@@ -155,7 +155,7 @@ function chado_add_node_form_relationships(&$form, &$form_state, $details) {
   // make sure the relationship table exists before proceeding.
   // make sure the relationship table exists before proceeding.
   if (!chado_table_exists($details['relationship_table'])) {
   if (!chado_table_exists($details['relationship_table'])) {
     drupal_set_message("Cannot add relationship elements to the form. The relationship table, '" .
     drupal_set_message("Cannot add relationship elements to the form. The relationship table, '" .
-      $details['relationship_table'] . "', does not exists", "error");
+      $details['relationship_table'] . "', does not exist", "error");
     tripal_report_error('tcrel_form', TRIPAL_ERROR, "Cannot add relationship elements to the form.
     tripal_report_error('tcrel_form', TRIPAL_ERROR, "Cannot add relationship elements to the form.
       The relationship table, '%name', cannot be found.", ['%name' => $details['relationship_table']]);
       The relationship table, '%name', cannot be found.", ['%name' => $details['relationship_table']]);
     return;
     return;
@@ -167,7 +167,7 @@ function chado_add_node_form_relationships(&$form, &$form_state, $details) {
     $result = chado_select_record('cv', ['cv_id'], ['name' => $details['cv_name']]);
     $result = chado_select_record('cv', ['cv_id'], ['name' => $details['cv_name']]);
     if (count($result) == 0) {
     if (count($result) == 0) {
       drupal_set_message("Cannot add relationship elements to the form. The CV name, '" .
       drupal_set_message("Cannot add relationship elements to the form. The CV name, '" .
-        $details['cv_name'] . "', does not exists", "error");
+        $details['cv_name'] . "', does not exist", "error");
       tripal_report_error('tcrel_form', TRIPAL_ERROR, "Cannot add relationship elements to the form.
       tripal_report_error('tcrel_form', TRIPAL_ERROR, "Cannot add relationship elements to the form.
         The CV named, '%name', cannot be found.", ['%name' => $details['cv_name']]);
         The CV named, '%name', cannot be found.", ['%name' => $details['cv_name']]);
       return;
       return;

+ 1 - 1
legacy/tripal_core/tripal_core.info

@@ -3,7 +3,7 @@ description = Provides support for all Tripal modules and includes the Tripal AP
 core = 7.x
 core = 7.x
 project = tripal
 project = tripal
 package = Tripal v2 Legacy
 package = Tripal v2 Legacy
-version = 7.x-3.1
+version = 7.x-3.5
 configure = admin/tripal
 configure = admin/tripal
 
 
 stylesheets[all][] = theme/css/tripal_core.css
 stylesheets[all][] = theme/css/tripal_core.css

+ 1 - 1
legacy/tripal_cv/tripal_cv.info

@@ -3,7 +3,7 @@ description = Supports the Controlled Vocabulary (CV) tables of Chado by providi
 core = 7.x
 core = 7.x
 project = tripal
 project = tripal
 package = Tripal v2 Legacy
 package = Tripal v2 Legacy
-version = 7.x-3.1
+version = 7.x-3.5
 configure = admin/tripal/vocab
 configure = admin/tripal/vocab
 
 
 dependencies[] = tripal_core
 dependencies[] = tripal_core

+ 1 - 1
legacy/tripal_db/tripal_db.info

@@ -3,7 +3,7 @@ description = Supports the database cross-reference tables of Chado by providing
 core = 7.x
 core = 7.x
 project = tripal
 project = tripal
 package = Tripal v2 Legacy
 package = Tripal v2 Legacy
-version = 7.x-3.1
+version = 7.x-3.5
 configure = admin/tripal/legacy/tripal_db
 configure = admin/tripal/legacy/tripal_db
 
 
 dependencies[] = tripal_core
 dependencies[] = tripal_core

+ 1 - 1
legacy/tripal_feature/includes/tripal_feature.delete.inc

@@ -24,7 +24,7 @@ function tripal_feature_delete_form() {
   $form['is_unique'] = [
   $form['is_unique'] = [
     '#title' => t('Names are Unique Names'),
     '#title' => t('Names are Unique Names'),
     '#type' => 'checkbox',
     '#type' => 'checkbox',
-    '#description' => t('Select this checbox if the names listed in the feature
+    '#description' => t('Select this checkbox if the names listed in the feature
       names box above are the unique name of the feature rather than the human readable names.'),
       names box above are the unique name of the feature rather than the human readable names.'),
   ];
   ];
   $cv = tripal_get_cv(['name' => 'sequence']);
   $cv = tripal_get_cv(['name' => 'sequence']);

+ 1 - 1
legacy/tripal_feature/theme/templates/tripal_feature_alignments.tpl.php

@@ -27,7 +27,7 @@
 *
 *
 * Alignment context #2:
 * Alignment context #2:
 * ---------------------
 * ---------------------
-* If the feature for this node is the child in the alignment relationsips,
+* If the feature for this node is the child in the alignment relationships,
 * then those alignments are available in this variable:
 * then those alignments are available in this variable:
 * 
 * 
 *   $feature->featureloc->feature_id;
 *   $feature->featureloc->feature_id;

+ 1 - 1
legacy/tripal_feature/tripal_feature.info

@@ -3,7 +3,7 @@ description = Supports the sequence (feature) tables of Chado by providing pages
 core = 7.x
 core = 7.x
 project = tripal
 project = tripal
 package = Tripal v2 Legacy
 package = Tripal v2 Legacy
-version = 7.x-3.1
+version = 7.x-3.5
 
 
 stylesheets[all][] = theme/css/tripal_feature.css
 stylesheets[all][] = theme/css/tripal_feature.css
 scripts[]          = theme/js/tripal_feature.js
 scripts[]          = theme/js/tripal_feature.js

+ 1 - 2
legacy/tripal_feature/tripal_feature.module

@@ -307,8 +307,7 @@ function tripal_feature_theme($existing, $type, $theme, $path) {
   return $items;
   return $items;
 }
 }
 /**
 /**
- * Implements hook_job_describe_args() in order to describe the various feature jobs
- * to the tripal jobs interface.
+ * Implements hook_job_describe_args()
  *
  *
  * @ingroup tripal_legacy_feature
  * @ingroup tripal_legacy_feature
  */
  */

+ 1 - 1
legacy/tripal_featuremap/tripal_featuremap.info

@@ -3,7 +3,7 @@ description = Supports the map tables of Chado by providing pages for viewing an
 core = 7.x
 core = 7.x
 project = tripal
 project = tripal
 package = Tripal v2 Legacy
 package = Tripal v2 Legacy
-version = 7.x-3.1
+version = 7.x-3.5
 
 
 dependencies[] = tripal_core
 dependencies[] = tripal_core
 dependencies[] = tripal_chado_views
 dependencies[] = tripal_chado_views

+ 1 - 1
legacy/tripal_featuremap/tripal_featuremap.views_default.inc

@@ -35,7 +35,7 @@ function tripal_featuremap_views_default_views() {
 function tripal_featuremap_defaultvalue_user_featuremaps() {
 function tripal_featuremap_defaultvalue_user_featuremaps() {
 
 
   // As a shortcut, currently I am copying the admin view and then tweaking it
   // As a shortcut, currently I am copying the admin view and then tweaking it
-  // In thie future this should be replaced by a views export
+  // In the future this should be replaced by a views export
   $view = tripal_featuremap_defaultview_admin_featuremaps();
   $view = tripal_featuremap_defaultview_admin_featuremaps();
 
 
   // change some view admin stuff
   // change some view admin stuff

+ 1 - 1
legacy/tripal_genetic/tripal_genetic.info

@@ -3,7 +3,7 @@ description = Supports the genetic tables of Chado by providing pages for viewin
 core = 7.x
 core = 7.x
 project = tripal
 project = tripal
 package = Tripal v2 Legacy
 package = Tripal v2 Legacy
-version = 7.x-3.1
+version = 7.x-3.5
 
 
 dependencies[] = tripal_core
 dependencies[] = tripal_core
 dependencies[] = tripal_chado_views
 dependencies[] = tripal_chado_views

+ 1 - 1
legacy/tripal_genetic/tripal_genetic.views_default.inc

@@ -35,7 +35,7 @@ function tripal_genetic_views_default_views() {
 function tripal_genetic_defaultvalue_user_genotypes() {
 function tripal_genetic_defaultvalue_user_genotypes() {
 
 
   // As a shortcut, currently I am copying the admin view and then tweaking it
   // As a shortcut, currently I am copying the admin view and then tweaking it
-  // In thie future this should be replaced by a views export
+  // In the future this should be replaced by a views export
   $view = tripal_genetic_defaultviews_admin_genotypes();
   $view = tripal_genetic_defaultviews_admin_genotypes();
 
 
   // change some view admin stuff
   // change some view admin stuff

+ 1 - 1
legacy/tripal_library/tripal_library.info

@@ -3,7 +3,7 @@ description = Supports the library tables of Chado by providing pages for viewin
 core = 7.x
 core = 7.x
 project = tripal
 project = tripal
 package = Tripal v2 Legacy
 package = Tripal v2 Legacy
-version = 7.x-3.1
+version = 7.x-3.5
 
 
 dependencies[] = tripal_core
 dependencies[] = tripal_core
 dependencies[] = tripal_chado_views
 dependencies[] = tripal_chado_views

+ 1 - 1
legacy/tripal_library/tripal_library.views_default.inc

@@ -35,7 +35,7 @@ function tripal_library_views_default_views() {
 function tripal_library_defaultvalue_user_library() {
 function tripal_library_defaultvalue_user_library() {
 
 
   // As a shortcut, currently I am copying the admin view and then tweaking it
   // As a shortcut, currently I am copying the admin view and then tweaking it
-  // In thie future this should be replaced by a views export
+  // In the future this should be replaced by a views export
   $view = tripal_library_admin_defaultviews_library();
   $view = tripal_library_admin_defaultviews_library();
 
 
   // change some view admin stuff
   // change some view admin stuff

+ 1 - 1
legacy/tripal_natural_diversity/tripal_natural_diversity.info

@@ -3,7 +3,7 @@ description = Supports the natural diversity (ND) tables of Chado by providing p
 core = 7.x
 core = 7.x
 project = tripal
 project = tripal
 package = Tripal v2 Legacy
 package = Tripal v2 Legacy
-version = 7.x-3.1
+version = 7.x-3.5
 
 
 dependencies[] = tripal_core
 dependencies[] = tripal_core
 dependencies[] = tripal_chado_views
 dependencies[] = tripal_chado_views

+ 1 - 1
legacy/tripal_organism/includes/tripal_organism.chado_node.inc

@@ -688,7 +688,7 @@ function tripal_organism_node_presave($node) {
     case 'chado_organism':
     case 'chado_organism':
       // when syncing the details are not present in the $node object
       // when syncing the details are not present in the $node object
       // as they are when submitted via the form.  Therefore, if we do
       // as they are when submitted via the form.  Therefore, if we do
-      // not see any field values from the form, we assume this fucntion
+      // not see any field values from the form, we assume this function
       // is being called for syncing, so we must set the title accordingly
       // is being called for syncing, so we must set the title accordingly
       if (property_exists($node, 'genus')) {
       if (property_exists($node, 'genus')) {
         $node->title = $node->genus . " " . $node->species;
         $node->title = $node->genus . " " . $node->species;

+ 1 - 1
legacy/tripal_organism/tripal_organism.info

@@ -3,7 +3,7 @@ description = Supports the organism tables of Chado by providing pages for viewi
 core = 7.x
 core = 7.x
 project = tripal
 project = tripal
 package = Tripal v2 Legacy
 package = Tripal v2 Legacy
-version = 7.x-3.1
+version = 7.x-3.5
 configure = admin/tripal/legacy/tripal_organism
 configure = admin/tripal/legacy/tripal_organism
 
 
 stylesheets[all][] = theme/css/tripal_organism.css
 stylesheets[all][] = theme/css/tripal_organism.css

+ 1 - 1
legacy/tripal_phenotype/tripal_phenotype.info

@@ -3,7 +3,7 @@ description = Supports the phenotype tables of Chado by providing pages for view
 core = 7.x
 core = 7.x
 project = tripal
 project = tripal
 package = Tripal v2 Legacy
 package = Tripal v2 Legacy
-version = 7.x-3.1
+version = 7.x-3.5
 
 
 dependencies[] = tripal_core
 dependencies[] = tripal_core
 dependencies[] = tripal_chado_views
 dependencies[] = tripal_chado_views

+ 1 - 1
legacy/tripal_phenotype/tripal_phenotype.views_default.inc

@@ -35,7 +35,7 @@ function tripal_phenotype_views_default_views() {
 function tripal_phenotype_defaultvalue_user_phenotypes() {
 function tripal_phenotype_defaultvalue_user_phenotypes() {
 
 
   // As a shortcut, currently I am copying the admin view and then tweaking it
   // As a shortcut, currently I am copying the admin view and then tweaking it
-  // In thie future this should be replaced by a views export
+  // In the future this should be replaced by a views export
   $view = tripal_phenotype_defaultview_admin_phenotypes();
   $view = tripal_phenotype_defaultview_admin_phenotypes();
 
 
   // change some view admin stuff
   // change some view admin stuff

+ 129 - 110
legacy/tripal_phylogeny/theme/js/tripal_phylogeny.js

@@ -2,129 +2,148 @@
 
 
 (function ($) {
 (function ($) {
 
 
-  var height = 0; // will be dynamically sized
+  "use strict";
 
 
-  $(document).ready( function () {
+  // Will be dynamically sized.
+  var height = 0;
 
 
-    // Callback function to determine node size.
-    var nodeSize = function(d) {
-      var size;
-      if (d.cvterm_name == "phylo_root") {
-        size = treeOptions['root_node_size']; 
-      }
-      if (d.cvterm_name == "phylo_interior") {
-        size = treeOptions['interior_node_size']; 
-      }
-      if (d.cvterm_name == "phylo_leaf") {
-        size = treeOptions['leaf_node_size']; 
-      }
-      return size;
+  // Store our function as a property of Drupal.behaviors.
+  Drupal.behaviors.TripalPhylotree = {
+    attach: function (context, settings) {
+
+      // Retrieve the data for this tree.
+      var data_url = Drupal.settings.tripal_chado.phylotree_url;
+      $.getJSON(data_url, function(treeData) {
+        phylogeny_display_data(treeData);
+        $('.phylogram-ajax-loader').hide();
+      });
     }
     }
+  }
 
 
-    // Callback function to determine the node color.
-    var organismColor = function(d) {
-      var color = null;
-      if (d.genus) {
-        color = organismColors[d.genus + ' ' + d.species];
-      }
-      if (color) { 
-        return color; 
-      }
-      else { 
-        return 'grey'; 
-      }
-    };
+  // Callback function to determine node size.
+  var phylogeny_node_size = function(d) {
+    var size;
+    var tree_options = Drupal.settings.tripal_chado.tree_options;
+    if (d.cvterm_name == "phylo_root") {
+      size = tree_options['root_node_size'];
+    }
+    if (d.cvterm_name == "phylo_interior") {
+      size = tree_options['interior_node_size'];
+    }
+    if (d.cvterm_name == "phylo_leaf") {
+      size = tree_options['leaf_node_size'];
+    }
+    return size;
+  }
 
 
-    // Callback for mouseover event on graph node d.
-    var nodeMouseOver = function(d) {
-      var el = $(this);
-      el.attr('cursor', 'pointer');
-      var circle = el.find('circle');
-      // highlight in yellow no matter if leaf or interior node
-      circle.attr('fill', 'yellow');
-      if(!d.children) {
-        // only leaf nodes have descriptive text
-        var txt = el.find('text');
-        txt.attr('font-weight', 'bold');
-      }
-    };
-    
-    // Callback for mouseout event on graph node d.
-    var nodeMouseOut = function(d) {
-      var el = $(this);
-      el.attr('cursor', 'default');
-      var circle = el.find('circle');
-      if(!d.children) {
-        // restore the color based on organism id for leaf nodes
-        circle.attr('fill', organismColor(d));
-        var txt = el.find('text');
-        txt.attr('font-weight', 'normal');
+  // Callback function to determine the node color.
+  var phylogeny_organism_color = function(d) {
+    var organism_color = Drupal.settings.tripal_chado.org_colors;
+    var color = null;
+
+    if (d.fo_genus) {
+      color = organism_color[d.fo_organism_id];
+    }
+    if (color) {
+      return color;
+    }
+    else {
+      return 'grey';
+    }
+  };
+
+  // Callback for mouseover event on graph node d.
+  var phylogeny_node_mouse_over = function(d) {
+    var el = $(this);
+    el.attr('cursor', 'pointer');
+    var circle = el.find('circle');
+    // highlight in yellow no matter if leaf or interior node
+    circle.attr('fill', 'yellow');
+    if(!d.children) {
+      // only leaf nodes have descriptive text
+      var txt = el.find('text');
+      txt.attr('font-weight', 'bold');
+    }
+  };
+
+  // Callback for mouseout event on graph node d.
+  var phylogeny_node_mouse_out = function(d) {
+    var el = $(this);
+    el.attr('cursor', 'default');
+    var circle = el.find('circle');
+    if(!d.children) {
+      // restore the color based on organism id for leaf nodes
+      circle.attr('fill', phylogeny_organism_color(d));
+      var txt = el.find('text');
+      txt.attr('font-weight', 'normal');
+    }
+    else {
+      // restore interior nodes to white
+      circle.attr('fill', 'white');
+    }
+  };
+
+  // Callback for mousedown/click event on graph node d.
+  var phylogeny_node_mouse_down = function(d) {
+    var el = $(this);
+    var title = (! d.children ) ? d.name : 'interior node ' + d.phylonode_id;
+
+    if(d.children) {
+      // interior node
+      if(d.phylonode_id) {
       }
       }
       else {
       else {
-        // restore interior nodes to white
-        circle.attr('fill', 'white');
+        // this shouldn't happen but ok
       }
       }
-    };
-    
-    // Callback for mousedown/click event on graph node d.
-    var nodeMouseDown = function(d) {
-      var el = $(this);
-      var title = (! d.children ) ? d.name : 'interior node ' + d.phylonode_id;
+    }
+    else {
+      if(d.feature_eid) {
+        window.location.href = baseurl + '/bio_data/' + d.feature_eid;
 
 
-      if(d.children) {
-        // interior node
-        if(d.phylonode_id) {
-        }
-        else {
-          // this shouldn't happen but ok
-        }
+        return;
       }
       }
-      else {
-        // If this node is not associated with a feature but it has an 
-        // organism node then this is a taxonomic node and we want to
-        // link it to the organism page.
-        if (!d.feature_id && d.organism_node_id) {
-          window.location.replace(baseurl + '/node/' + d.organism_node_id);
-        }
-        // leaf node
+      // If this node is not associated with a feature but it has an
+      // organism node then this is a taxonomic node and we want to
+      // link it to the organism page.
+      if (!d.feature_id && d.organism_nid) {
+        window.location.replace(baseurl + '/node/' + d.organism_nid);
+      }
+      if (!d.feature_id && d.organism_eid) {
+        window.location.replace(baseurl + '/bio_data/' + d.organism_eid);
       }
       }
-    };
+      // leaf node
+    }
+  };
 
 
-    // AJAX function for retrieving the tree data.
-    $.getJSON(phylotreeDataURL, function(treeData) {
-      displayData(treeData);
-      $('.phylogram-ajax-loader').hide();
+  // Creates the tree using the d3.phylogram.js library.
+  function phylogeny_display_data(treeData) {
+    var height = phylogeny_graph_height(treeData);
+    var tree_options = Drupal.settings.tripal_chado.tree_options;
+    d3.phylogram.build('#phylogram', treeData, {
+      'width' : tree_options['phylogram_width'],
+      'height' : height,
+      'fill' : phylogeny_organism_color,
+      'size' : phylogeny_node_size,
+      'nodeMouseOver' : phylogeny_node_mouse_over,
+      'nodeMouseOut' : phylogeny_node_mouse_out,
+      'nodeMouseDown' : phylogeny_node_mouse_down,
+      'skipTicks' : tree_options['skipTicks']
     });
     });
+  }
 
 
-    // Creates the tree using the d3.phylogram.js library.
-    function displayData(treeData) {
-      height = graphHeight(treeData);
-      d3.phylogram.build('#phylogram', treeData, {
-        'width' : treeOptions['phylogram_width'],
-        'height' : height,
-        'fill' : organismColor,
-        'size' : nodeSize,
-        'nodeMouseOver' : nodeMouseOver,
-        'nodeMouseOut' : nodeMouseOut,
-        'nodeMouseDown' : nodeMouseDown,
-        'skipTicks' : treeOptions['skipTicks']
-      });
-    }
-
-    /* graphHeight() generate graph height based on leaf nodes */
-    function graphHeight(data) {
-      function countLeafNodes(node) {
-        if(! node.children) {
-          return 1;
-        }
-        var ct = 0;
-        node.children.forEach( function(child) {
-          ct+= countLeafNodes(child);
-        });
-        return ct;
+  /* graphHeight() generate graph height based on leaf nodes */
+  function phylogeny_graph_height(data) {
+    function count_leaf_nodes(node) {
+      if(! node.children) {
+        return 1;
       }
       }
-      var leafNodeCt = countLeafNodes(data);
-      return 22 * leafNodeCt;
+      var ct = 0;
+      node.children.forEach( function(child) {
+        ct+= count_leaf_nodes(child);
+      });
+      return ct;
     }
     }
-  });
-})(jQuery);
+    var leafNodeCt = count_leaf_nodes(data);
+    return 22 * leafNodeCt;
+  }
+})(jQuery);

+ 2 - 2
legacy/tripal_phylogeny/tripal_phylogeny.drush.inc

@@ -184,7 +184,7 @@ function drush_tripal_phylogeny_trp_update_phylotree() {
       $options['phylotree_id'] = $phylotree[0]->phylotree_id;
       $options['phylotree_id'] = $phylotree[0]->phylotree_id;
     }
     }
     else {
     else {
-      drush_print('A phylotree record with this name does not exists.');
+      drush_print('A phylotree record with this name does not exist.');
     }
     }
   }
   }
 
 
@@ -234,7 +234,7 @@ function drush_tripal_phylogeny_trp_delete_phylotree() {
       $options['phylotree_id'] = $phylotree[0]->phylotree_id;
       $options['phylotree_id'] = $phylotree[0]->phylotree_id;
     }
     }
     else {
     else {
-      drush_print('A phylotree record with this name does not exists.');
+      drush_print('A phylotree record with this name does not exist.');
     }
     }
   }
   }
 
 

+ 1 - 1
legacy/tripal_phylogeny/tripal_phylogeny.info

@@ -3,7 +3,7 @@ description = Supports the phylogeny tables of Chado by providing pages for view
 core = 7.x
 core = 7.x
 project = tripal_phylogeny
 project = tripal_phylogeny
 package = Tripal v2 Legacy
 package = Tripal v2 Legacy
-version = 7.x-3.1
+version = 7.x-3.5
 dependencies[] = tripal_core
 dependencies[] = tripal_core
 dependencies[] = tripal_cv
 dependencies[] = tripal_cv
 dependencies[] = tripal_db
 dependencies[] = tripal_db

+ 1 - 1
legacy/tripal_project/tripal_project.info

@@ -3,7 +3,7 @@ description = Supports the project tables of Chado by providing pages for viewin
 core = 7.x
 core = 7.x
 project = tripal
 project = tripal
 package = Tripal v2 Legacy
 package = Tripal v2 Legacy
-version = 7.x-3.1
+version = 7.x-3.5
 configure = admin/tripal/legacy/tripal_project
 configure = admin/tripal/legacy/tripal_project
 
 
 dependencies[] = tripal_core
 dependencies[] = tripal_core

+ 1 - 1
legacy/tripal_project/tripal_project.views_default.inc

@@ -35,7 +35,7 @@ function tripal_project_views_default_views() {
 function tripal_project_defaultvalue_user_projects() {
 function tripal_project_defaultvalue_user_projects() {
 
 
   // As a shortcut, currently I am copying the admin view and then tweaking it
   // As a shortcut, currently I am copying the admin view and then tweaking it
-  // In thie future this should be replaced by a views export
+  // In the future this should be replaced by a views export
   $view = tripal_project_defaultview_admin_projects();
   $view = tripal_project_defaultview_admin_projects();
 
 
   // change some view admin stuff
   // change some view admin stuff

+ 1 - 1
legacy/tripal_pub/includes/tripal_pub.admin.inc

@@ -127,7 +127,7 @@ function tripal_pub_admin() {
     '#type' => 'select',
     '#type' => 'select',
     '#title' => t('Publication Type'),
     '#title' => t('Publication Type'),
     '#options' => $pub_types,
     '#options' => $pub_types,
-    '#description' => t('Please set a default publiation type used for manual entry of a new
+    '#description' => t('Please set a default publication type used for manual entry of a new
       publication.  This is useful in the event that someone is manually adding the same
       publication.  This is useful in the event that someone is manually adding the same
       publication type repetitively'),
       publication type repetitively'),
     '#default_value' => $d_type_id,
     '#default_value' => $d_type_id,

+ 1 - 1
legacy/tripal_pub/includes/tripal_pub.chado_node.inc

@@ -1270,7 +1270,7 @@ function tripal_pub_node_presave($node) {
     case 'chado_pub':
     case 'chado_pub':
       // when syncing the details are not present in the $node object
       // when syncing the details are not present in the $node object
       // as they are when submitted via the form.  Therefore, if we do
       // as they are when submitted via the form.  Therefore, if we do
-      // not see any field values from the form, we assume this fucntion
+      // not see any field values from the form, we assume this function
       // is being called for syncing, so we must set the title accordingly
       // is being called for syncing, so we must set the title accordingly
       if (property_exists($node, 'title')) {
       if (property_exists($node, 'title')) {
         // do nothing, the title is set
         // do nothing, the title is set

+ 1 - 1
legacy/tripal_pub/tripal_pub.info

@@ -3,7 +3,7 @@ description = Supports the pub (publication) tables of Chado by providing pages
 core = 7.x
 core = 7.x
 project = tripal
 project = tripal
 package = Tripal v2 Legacy
 package = Tripal v2 Legacy
-version = 7.x-3.1
+version = 7.x-3.5
 
 
 stylesheets[all][] = theme/css/tripal_pub.css
 stylesheets[all][] = theme/css/tripal_pub.css
 
 

+ 0 - 3
legacy/tripal_pub/tripal_pub.module

@@ -305,9 +305,6 @@ function tripal_pub_form_alter(&$form, &$form_state, $form_id) {
 /**
 /**
  * Implements hook_job_describe_args().
  * Implements hook_job_describe_args().
  *
  *
- * @param $callback
- * @param $args
- *
  * @ingroup tripal_legacy_pub
  * @ingroup tripal_legacy_pub
  */
  */
 function tripal_pub_job_describe_args($callback, $args) {
 function tripal_pub_job_describe_args($callback, $args) {

+ 1 - 1
legacy/tripal_stock/tripal_stock.info

@@ -3,7 +3,7 @@ description = Supports the stock tables of Chado by providing pages for viewing,
 core = 7.x
 core = 7.x
 project = tripal
 project = tripal
 package = Tripal v2 Legacy
 package = Tripal v2 Legacy
-version = 7.x-3.1
+version = 7.x-3.5
 
 
 dependencies[] = tripal_core
 dependencies[] = tripal_core
 dependencies[] = tripal_chado_views
 dependencies[] = tripal_chado_views

+ 1 - 1
legacy/tripal_stock/tripal_stock.module

@@ -320,7 +320,7 @@ function tripal_stock_match_stocks_page($id) {
   if (!$url_alias) {
   if (!$url_alias) {
     $url_alias = '/stock/[genus]/[species]/[type]/[uniquename]';
     $url_alias = '/stock/[genus]/[species]/[type]/[uniquename]';
   }
   }
-  $url_alias = preg_replace('/^\//', '', $url_alias); // remove any preceeding forward slash
+  $url_alias = preg_replace('/^\//', '', $url_alias); // remove any preceding forward slash
   if (preg_match('/^stock\//', $url_alias)) {
   if (preg_match('/^stock\//', $url_alias)) {
     drupal_goto($id);
     drupal_goto($id);
   }
   }

+ 1 - 1
legacy/tripal_stock/tripal_stock.views_default.inc

@@ -35,7 +35,7 @@ function tripal_stock_views_default_views() {
 function tripal_stock_defaultvalue_user_stocks() {
 function tripal_stock_defaultvalue_user_stocks() {
 
 
   // As a shortcut, currently I am copying the admin view and then tweaking it
   // As a shortcut, currently I am copying the admin view and then tweaking it
-  // In thie future this should be replaced by a views export
+  // In the future this should be replaced by a views export
   $view = tripal_stock_defaultview_admin_stocks();
   $view = tripal_stock_defaultview_admin_stocks();
 
 
   // change some view admin stuff
   // change some view admin stuff

+ 1 - 1
legacy/tripal_views/tripal_views.info

@@ -3,4 +3,4 @@ description = Deprecated-- no longer provides any functionality. See Tripal Chad
 core = 7.x
 core = 7.x
 project = tripal
 project = tripal
 package = Tripal v2 Legacy
 package = Tripal v2 Legacy
-version = 7.x-3.1
+version = 7.x-3.5

+ 41 - 0
tests/tripal_chado/data/empty_landmarks.fasta

@@ -0,0 +1,41 @@
+>Contig10036
+
+>Contig1
+
+>Contig0
+
+>Contig100
+
+>Contig10022
+
+>Contig10023
+
+>Contig10035
+
+>Contig1001
+
+>Contig10012
+
+>Contig1002
+
+>Contig10026
+
+>Contig10018
+
+>Contig1003
+
+>Contig10030
+
+>Contig10
+
+>Contig10011
+
+>Contig10005
+
+>Contig10002
+
+>Contig1000
+
+>Contig10000
+
+>Contig10001

+ 499 - 0
tests/tripal_chado/data/gff_duplicate_ids.gff

@@ -0,0 +1,499 @@
+##gff-version 3
+Contig0	FRAEX38873_v2	gene	16315	44054	.	+	.	ID=FRAEX38873_v2_000000010;Name=FRAEX38873_v2_000000010;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	16315	44054	.	+	.	ID=FRAEX38873_v2_000000010.1;Parent=FRAEX38873_v2_000000010;Name=FRAEX38873_v2_000000010.1;biotype=protein_coding;AED=0.05
+Contig0	FRAEX38873_v2	five_prime_UTR	16315	16557	.	+	.	ID=FRAEX38873_v2_000000010.1.5utr1;Parent=FRAEX38873_v2_000000010.1
+Contig0	FRAEX38873_v2	exon	16315	16967	.	+	.	ID=FRAEX38873_v2_000000010.1.exon1;Parent=FRAEX38873_v2_000000010.1
+Contig0	FRAEX38873_v2	CDS	16558	16967	.	+	0	ID=FRAEX38873_v2_000000010.1.cds1;Parent=FRAEX38873_v2_000000010.1
+Contig0	FRAEX38873_v2	exon	22028	22195	.	+	.	ID=FRAEX38873_v2_000000010.1.exon2;Parent=FRAEX38873_v2_000000010.1
+Contig0	FRAEX38873_v2	CDS	22028	22195	.	+	1	ID=FRAEX38873_v2_000000010.1.cds2;Parent=FRAEX38873_v2_000000010.1
+Contig0	FRAEX38873_v2	exon	22363	22449	.	+	.	ID=FRAEX38873_v2_000000010.1.exon3;Parent=FRAEX38873_v2_000000010.1
+Contig0	FRAEX38873_v2	CDS	22363	22449	.	+	1	ID=FRAEX38873_v2_000000010.1.cds3;Parent=FRAEX38873_v2_000000010.1
+Contig0	FRAEX38873_v2	exon	28015	28060	.	+	.	ID=FRAEX38873_v2_000000010.1.exon4;Parent=FRAEX38873_v2_000000010.1
+Contig0	FRAEX38873_v2	CDS	28015	28060	.	+	1	ID=FRAEX38873_v2_000000010.1.cds4;Parent=FRAEX38873_v2_000000010.1
+Contig0	FRAEX38873_v2	exon	28659	28735	.	+	.	ID=FRAEX38873_v2_000000010.1.exon5;Parent=FRAEX38873_v2_000000010.1
+Contig0	FRAEX38873_v2	CDS	28659	28735	.	+	0	ID=FRAEX38873_v2_000000010.1.cds5;Parent=FRAEX38873_v2_000000010.1
+Contig0	FRAEX38873_v2	exon	29763	29922	.	+	.	ID=FRAEX38873_v2_000000010.1.exon6;Parent=FRAEX38873_v2_000000010.1
+Contig0	FRAEX38873_v2	CDS	29763	29922	.	+	1	ID=FRAEX38873_v2_000000010.1.cds6;Parent=FRAEX38873_v2_000000010.1
+Contig0	FRAEX38873_v2	exon	31370	31438	.	+	.	ID=FRAEX38873_v2_000000010.1.exon7;Parent=FRAEX38873_v2_000000010.1
+Contig0	FRAEX38873_v2	CDS	31370	31438	.	+	0	ID=FRAEX38873_v2_000000010.1.cds7;Parent=FRAEX38873_v2_000000010.1
+Contig0	FRAEX38873_v2	exon	32937	32996	.	+	.	ID=FRAEX38873_v2_000000010.1.exon8;Parent=FRAEX38873_v2_000000010.1
+Contig0	FRAEX38873_v2	CDS	32937	32996	.	+	0	ID=FRAEX38873_v2_000000010.1.cds8;Parent=FRAEX38873_v2_000000010.1
+Contig0	FRAEX38873_v2	exon	42580	42666	.	+	.	ID=FRAEX38873_v2_000000010.1.exon9;Parent=FRAEX38873_v2_000000010.1
+Contig0	FRAEX38873_v2	CDS	42580	42666	.	+	0	ID=FRAEX38873_v2_000000010.1.cds9;Parent=FRAEX38873_v2_000000010.1
+Contig0	FRAEX38873_v2	CDS	43421	43696	.	+	0	ID=FRAEX38873_v2_000000010.1.cds10;Parent=FRAEX38873_v2_000000010.1
+Contig0	FRAEX38873_v2	exon	43421	44054	.	+	.	ID=FRAEX38873_v2_000000010.1.exon10;Parent=FRAEX38873_v2_000000010.1
+Contig0	FRAEX38873_v2	three_prime_UTR	43697	44054	.	+	.	ID=FRAEX38873_v2_000000010.1.3utr1;Parent=FRAEX38873_v2_000000010.1
+Contig0	FRAEX38873_v2	mRNA	16315	44054	.	+	.	ID=FRAEX38873_v2_000000010.2;Parent=FRAEX38873_v2_000000010;Name=FRAEX38873_v2_000000010.2;biotype=protein_coding;AED=0.05
+Contig0	FRAEX38873_v2	five_prime_UTR	16315	16557	.	+	.	ID=FRAEX38873_v2_000000010.2.5utr1;Parent=FRAEX38873_v2_000000010.2
+Contig0	FRAEX38873_v2	exon	16315	16967	.	+	.	ID=FRAEX38873_v2_000000010.2.exon1;Parent=FRAEX38873_v2_000000010.2
+Contig0	FRAEX38873_v2	CDS	16558	16967	.	+	0	ID=FRAEX38873_v2_000000010.2.cds1;Parent=FRAEX38873_v2_000000010.2
+Contig0	FRAEX38873_v2	exon	22028	22195	.	+	.	ID=FRAEX38873_v2_000000010.2.exon2;Parent=FRAEX38873_v2_000000010.2
+Contig0	FRAEX38873_v2	CDS	22028	22195	.	+	1	ID=FRAEX38873_v2_000000010.2.cds2;Parent=FRAEX38873_v2_000000010.2
+Contig0	FRAEX38873_v2	exon	22363	22449	.	+	.	ID=FRAEX38873_v2_000000010.2.exon3;Parent=FRAEX38873_v2_000000010.2
+Contig0	FRAEX38873_v2	CDS	22363	22449	.	+	1	ID=FRAEX38873_v2_000000010.2.cds3;Parent=FRAEX38873_v2_000000010.2
+Contig0	FRAEX38873_v2	exon	26908	26953	.	+	.	ID=FRAEX38873_v2_000000010.2.exon4;Parent=FRAEX38873_v2_000000010.2
+Contig0	FRAEX38873_v2	CDS	26908	26953	.	+	1	ID=FRAEX38873_v2_000000010.2.cds4;Parent=FRAEX38873_v2_000000010.2
+Contig0	FRAEX38873_v2	exon	28659	28735	.	+	.	ID=FRAEX38873_v2_000000010.2.exon5;Parent=FRAEX38873_v2_000000010.2
+Contig0	FRAEX38873_v2	CDS	28659	28735	.	+	0	ID=FRAEX38873_v2_000000010.2.cds5;Parent=FRAEX38873_v2_000000010.2
+Contig0	FRAEX38873_v2	exon	29763	29922	.	+	.	ID=FRAEX38873_v2_000000010.2.exon6;Parent=FRAEX38873_v2_000000010.2
+Contig0	FRAEX38873_v2	CDS	29763	29922	.	+	1	ID=FRAEX38873_v2_000000010.2.cds6;Parent=FRAEX38873_v2_000000010.2
+Contig0	FRAEX38873_v2	exon	31370	31438	.	+	.	ID=FRAEX38873_v2_000000010.2.exon7;Parent=FRAEX38873_v2_000000010.2
+Contig0	FRAEX38873_v2	CDS	31370	31438	.	+	0	ID=FRAEX38873_v2_000000010.2.cds7;Parent=FRAEX38873_v2_000000010.2
+Contig0	FRAEX38873_v2	exon	32937	32996	.	+	.	ID=FRAEX38873_v2_000000010.2.exon8;Parent=FRAEX38873_v2_000000010.2
+Contig0	FRAEX38873_v2	CDS	32937	32996	.	+	0	ID=FRAEX38873_v2_000000010.2.cds8;Parent=FRAEX38873_v2_000000010.2
+Contig0	FRAEX38873_v2	exon	42580	42666	.	+	.	ID=FRAEX38873_v2_000000010.2.exon9;Parent=FRAEX38873_v2_000000010.2
+Contig0	FRAEX38873_v2	CDS	42580	42666	.	+	0	ID=FRAEX38873_v2_000000010.2.cds9;Parent=FRAEX38873_v2_000000010.2
+Contig0	FRAEX38873_v2	CDS	43421	43696	.	+	0	ID=FRAEX38873_v2_000000010.2.cds10;Parent=FRAEX38873_v2_000000010.2
+Contig0	FRAEX38873_v2	exon	43421	44054	.	+	.	ID=FRAEX38873_v2_000000010.2.exon10;Parent=FRAEX38873_v2_000000010.2
+Contig0	FRAEX38873_v2	three_prime_UTR	43697	44054	.	+	.	ID=FRAEX38873_v2_000000010.2.3utr1;Parent=FRAEX38873_v2_000000010.2
+Contig0	FRAEX38873_v2	gene	45916	53476	.	+	.	ID=FRAEX38873_v2_000000020;Name=FRAEX38873_v2_000000020;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	45916	53476	.	+	.	ID=FRAEX38873_v2_000000020.1;Parent=FRAEX38873_v2_000000020;Name=FRAEX38873_v2_000000020.1;biotype=protein_coding;AED=0.08
+Contig0	FRAEX38873_v2	five_prime_UTR	45916	46433	.	+	.	ID=FRAEX38873_v2_000000020.1.5utr1;Parent=FRAEX38873_v2_000000020.1
+Contig0	FRAEX38873_v2	exon	45916	46847	.	+	.	ID=FRAEX38873_v2_000000020.1.exon1;Parent=FRAEX38873_v2_000000020.1
+Contig0	FRAEX38873_v2	CDS	46434	46847	.	+	0	ID=FRAEX38873_v2_000000020.1.cds1;Parent=FRAEX38873_v2_000000020.1
+Contig0	FRAEX38873_v2	exon	47209	47281	.	+	.	ID=FRAEX38873_v2_000000020.1.exon2;Parent=FRAEX38873_v2_000000020.1
+Contig0	FRAEX38873_v2	CDS	47209	47281	.	+	0	ID=FRAEX38873_v2_000000020.1.cds2;Parent=FRAEX38873_v2_000000020.1
+Contig0	FRAEX38873_v2	exon	47796	47872	.	+	.	ID=FRAEX38873_v2_000000020.1.exon3;Parent=FRAEX38873_v2_000000020.1
+Contig0	FRAEX38873_v2	CDS	47796	47872	.	+	2	ID=FRAEX38873_v2_000000020.1.cds3;Parent=FRAEX38873_v2_000000020.1
+Contig0	FRAEX38873_v2	exon	48530	48618	.	+	.	ID=FRAEX38873_v2_000000020.1.exon4;Parent=FRAEX38873_v2_000000020.1
+Contig0	FRAEX38873_v2	CDS	48530	48618	.	+	0	ID=FRAEX38873_v2_000000020.1.cds4;Parent=FRAEX38873_v2_000000020.1
+Contig0	FRAEX38873_v2	exon	50337	50534	.	+	.	ID=FRAEX38873_v2_000000020.1.exon5;Parent=FRAEX38873_v2_000000020.1
+Contig0	FRAEX38873_v2	CDS	50337	50534	.	+	1	ID=FRAEX38873_v2_000000020.1.cds5;Parent=FRAEX38873_v2_000000020.1
+Contig0	FRAEX38873_v2	exon	51434	51638	.	+	.	ID=FRAEX38873_v2_000000020.1.exon6;Parent=FRAEX38873_v2_000000020.1
+Contig0	FRAEX38873_v2	CDS	51434	51638	.	+	1	ID=FRAEX38873_v2_000000020.1.cds6;Parent=FRAEX38873_v2_000000020.1
+Contig0	FRAEX38873_v2	exon	51733	51900	.	+	.	ID=FRAEX38873_v2_000000020.1.exon7;Parent=FRAEX38873_v2_000000020.1
+Contig0	FRAEX38873_v2	CDS	51733	51900	.	+	0	ID=FRAEX38873_v2_000000020.1.cds7;Parent=FRAEX38873_v2_000000020.1
+Contig0	FRAEX38873_v2	exon	52088	52255	.	+	.	ID=FRAEX38873_v2_000000020.1.exon8;Parent=FRAEX38873_v2_000000020.1
+Contig0	FRAEX38873_v2	CDS	52088	52255	.	+	0	ID=FRAEX38873_v2_000000020.1.cds8;Parent=FRAEX38873_v2_000000020.1
+Contig0	FRAEX38873_v2	exon	52441	52631	.	+	.	ID=FRAEX38873_v2_000000020.1.exon9;Parent=FRAEX38873_v2_000000020.1
+Contig0	FRAEX38873_v2	CDS	52441	52631	.	+	0	ID=FRAEX38873_v2_000000020.1.cds9;Parent=FRAEX38873_v2_000000020.1
+Contig0	FRAEX38873_v2	CDS	53104	53239	.	+	1	ID=FRAEX38873_v2_000000020.1.cds10;Parent=FRAEX38873_v2_000000020.1
+Contig0	FRAEX38873_v2	exon	53104	53476	.	+	.	ID=FRAEX38873_v2_000000020.1.exon10;Parent=FRAEX38873_v2_000000020.1
+Contig0	FRAEX38873_v2	three_prime_UTR	53240	53476	.	+	.	ID=FRAEX38873_v2_000000020.1.3utr1;Parent=FRAEX38873_v2_000000020.1
+Contig0	FRAEX38873_v2	gene	63686	68825	.	+	.	ID=FRAEX38873_v2_000000030;Name=FRAEX38873_v2_000000030;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	63686	68825	.	+	.	ID=FRAEX38873_v2_000000030.1;Parent=FRAEX38873_v2_000000030;Name=FRAEX38873_v2_000000030.1;biotype=protein_coding;AED=0.06
+Contig0	FRAEX38873_v2	five_prime_UTR	63686	63916	.	+	.	ID=FRAEX38873_v2_000000030.1.5utr1;Parent=FRAEX38873_v2_000000030.1
+Contig0	FRAEX38873_v2	exon	63686	63916	.	+	.	ID=FRAEX38873_v2_000000030.1.exon1;Parent=FRAEX38873_v2_000000030.1
+Contig0	FRAEX38873_v2	five_prime_UTR	64847	64877	.	+	.	ID=FRAEX38873_v2_000000030.1.5utr2;Parent=FRAEX38873_v2_000000030.1
+Contig0	FRAEX38873_v2	exon	64847	65279	.	+	.	ID=FRAEX38873_v2_000000030.1.exon2;Parent=FRAEX38873_v2_000000030.1
+Contig0	FRAEX38873_v2	CDS	64878	65279	.	+	0	ID=FRAEX38873_v2_000000030.1.cds1;Parent=FRAEX38873_v2_000000030.1
+Contig0	FRAEX38873_v2	exon	65656	66087	.	+	.	ID=FRAEX38873_v2_000000030.1.exon3;Parent=FRAEX38873_v2_000000030.1
+Contig0	FRAEX38873_v2	CDS	65656	66087	.	+	0	ID=FRAEX38873_v2_000000030.1.cds2;Parent=FRAEX38873_v2_000000030.1
+Contig0	FRAEX38873_v2	exon	67124	67682	.	+	.	ID=FRAEX38873_v2_000000030.1.exon4;Parent=FRAEX38873_v2_000000030.1
+Contig0	FRAEX38873_v2	CDS	67124	67682	.	+	0	ID=FRAEX38873_v2_000000030.1.cds3;Parent=FRAEX38873_v2_000000030.1
+Contig0	FRAEX38873_v2	CDS	68192	68487	.	+	2	ID=FRAEX38873_v2_000000030.1.cds4;Parent=FRAEX38873_v2_000000030.1
+Contig0	FRAEX38873_v2	exon	68192	68825	.	+	.	ID=FRAEX38873_v2_000000030.1.exon5;Parent=FRAEX38873_v2_000000030.1
+Contig0	FRAEX38873_v2	three_prime_UTR	68488	68825	.	+	.	ID=FRAEX38873_v2_000000030.1.3utr1;Parent=FRAEX38873_v2_000000030.1
+Contig0	FRAEX38873_v2	gene	72275	74436	.	+	.	ID=FRAEX38873_v2_000000040;Name=FRAEX38873_v2_000000040;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	72275	74436	.	+	.	ID=FRAEX38873_v2_000000040.1;Parent=FRAEX38873_v2_000000040;Name=FRAEX38873_v2_000000040.1;biotype=protein_coding;AED=0.29
+Contig0	FRAEX38873_v2	five_prime_UTR	72275	73387	.	+	.	ID=FRAEX38873_v2_000000040.1.5utr1;Parent=FRAEX38873_v2_000000040.1
+Contig0	FRAEX38873_v2	exon	72275	74436	.	+	.	ID=FRAEX38873_v2_000000040.1.exon1;Parent=FRAEX38873_v2_000000040.1
+Contig0	FRAEX38873_v2	CDS	73388	74179	.	+	0	ID=FRAEX38873_v2_000000040.1.cds1;Parent=FRAEX38873_v2_000000040.1
+Contig0	FRAEX38873_v2	three_prime_UTR	74180	74436	.	+	.	ID=FRAEX38873_v2_000000040.1.3utr1;Parent=FRAEX38873_v2_000000040.1
+Contig0	FRAEX38873_v2	gene	75752	79300	.	-	.	ID=FRAEX38873_v2_000000050;Name=FRAEX38873_v2_000000050;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	75752	79300	.	-	.	ID=FRAEX38873_v2_000000050.1;Parent=FRAEX38873_v2_000000050;Name=FRAEX38873_v2_000000050.1;biotype=protein_coding;AED=0.20
+Contig0	FRAEX38873_v2	exon	75752	75801	.	-	.	ID=FRAEX38873_v2_000000050.1.exon1;Parent=FRAEX38873_v2_000000050.1
+Contig0	FRAEX38873_v2	CDS	75752	75801	.	-	2	ID=FRAEX38873_v2_000000050.1.cds1;Parent=FRAEX38873_v2_000000050.1
+Contig0	FRAEX38873_v2	exon	75882	75989	.	-	.	ID=FRAEX38873_v2_000000050.1.exon2;Parent=FRAEX38873_v2_000000050.1
+Contig0	FRAEX38873_v2	CDS	75882	75989	.	-	2	ID=FRAEX38873_v2_000000050.1.cds2;Parent=FRAEX38873_v2_000000050.1
+Contig0	FRAEX38873_v2	CDS	78905	78980	.	-	0	ID=FRAEX38873_v2_000000050.1.cds3;Parent=FRAEX38873_v2_000000050.1
+Contig0	FRAEX38873_v2	exon	78905	79300	.	-	.	ID=FRAEX38873_v2_000000050.1.exon3;Parent=FRAEX38873_v2_000000050.1
+Contig0	FRAEX38873_v2	five_prime_UTR	78981	79300	.	-	.	ID=FRAEX38873_v2_000000050.1.5utr1;Parent=FRAEX38873_v2_000000050.1
+Contig0	FRAEX38873_v2	gene	89196	92835	.	-	.	ID=FRAEX38873_v2_000000060;Name=FRAEX38873_v2_000000060;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	89196	92835	.	-	.	ID=FRAEX38873_v2_000000060.1;Parent=FRAEX38873_v2_000000060;Name=FRAEX38873_v2_000000060.1;biotype=protein_coding;AED=0.05
+Contig0	FRAEX38873_v2	three_prime_UTR	89196	89440	.	-	.	ID=FRAEX38873_v2_000000060.1.3utr1;Parent=FRAEX38873_v2_000000060.1
+Contig0	FRAEX38873_v2	exon	89196	89704	.	-	.	ID=FRAEX38873_v2_000000060.1.exon1;Parent=FRAEX38873_v2_000000060.1
+Contig0	FRAEX38873_v2	CDS	89441	89704	.	-	0	ID=FRAEX38873_v2_000000060.1.cds1;Parent=FRAEX38873_v2_000000060.1
+Contig0	FRAEX38873_v2	exon	90998	91063	.	-	.	ID=FRAEX38873_v2_000000060.1.exon2;Parent=FRAEX38873_v2_000000060.1
+Contig0	FRAEX38873_v2	CDS	90998	91063	.	-	0	ID=FRAEX38873_v2_000000060.1.cds2;Parent=FRAEX38873_v2_000000060.1
+Contig0	FRAEX38873_v2	exon	91160	91263	.	-	.	ID=FRAEX38873_v2_000000060.1.exon3;Parent=FRAEX38873_v2_000000060.1
+Contig0	FRAEX38873_v2	CDS	91160	91263	.	-	2	ID=FRAEX38873_v2_000000060.1.cds3;Parent=FRAEX38873_v2_000000060.1
+Contig0	FRAEX38873_v2	exon	91341	91414	.	-	.	ID=FRAEX38873_v2_000000060.1.exon4;Parent=FRAEX38873_v2_000000060.1
+Contig0	FRAEX38873_v2	CDS	91341	91414	.	-	1	ID=FRAEX38873_v2_000000060.1.cds4;Parent=FRAEX38873_v2_000000060.1
+Contig0	FRAEX38873_v2	CDS	92448	92515	.	-	0	ID=FRAEX38873_v2_000000060.1.cds5;Parent=FRAEX38873_v2_000000060.1
+Contig0	FRAEX38873_v2	exon	92448	92835	.	-	.	ID=FRAEX38873_v2_000000060.1.exon5;Parent=FRAEX38873_v2_000000060.1
+Contig0	FRAEX38873_v2	five_prime_UTR	92516	92835	.	-	.	ID=FRAEX38873_v2_000000060.1.5utr1;Parent=FRAEX38873_v2_000000060.1
+Contig0	FRAEX38873_v2	gene	118798	128417	.	+	.	ID=FRAEX38873_v2_000000070;Name=FRAEX38873_v2_000000070;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	118798	128417	.	+	.	ID=FRAEX38873_v2_000000070.1;Parent=FRAEX38873_v2_000000070;Name=FRAEX38873_v2_000000070.1;biotype=protein_coding;AED=0.11
+Contig0	FRAEX38873_v2	five_prime_UTR	118798	118942	.	+	.	ID=FRAEX38873_v2_000000070.1.5utr1;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	exon	118798	119147	.	+	.	ID=FRAEX38873_v2_000000070.1.exon1;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	CDS	118943	119147	.	+	0	ID=FRAEX38873_v2_000000070.1.cds1;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	exon	121518	121632	.	+	.	ID=FRAEX38873_v2_000000070.1.exon2;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	CDS	121518	121632	.	+	2	ID=FRAEX38873_v2_000000070.1.cds2;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	exon	121886	121943	.	+	.	ID=FRAEX38873_v2_000000070.1.exon3;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	CDS	121886	121943	.	+	1	ID=FRAEX38873_v2_000000070.1.cds3;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	exon	122067	122084	.	+	.	ID=FRAEX38873_v2_000000070.1.exon4;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	CDS	122067	122084	.	+	0	ID=FRAEX38873_v2_000000070.1.cds4;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	exon	124103	124364	.	+	.	ID=FRAEX38873_v2_000000070.1.exon5;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	CDS	124103	124364	.	+	0	ID=FRAEX38873_v2_000000070.1.cds5;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	exon	124651	124757	.	+	.	ID=FRAEX38873_v2_000000070.1.exon6;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	CDS	124651	124757	.	+	2	ID=FRAEX38873_v2_000000070.1.cds6;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	exon	124840	124900	.	+	.	ID=FRAEX38873_v2_000000070.1.exon7;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	CDS	124840	124900	.	+	0	ID=FRAEX38873_v2_000000070.1.cds7;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	exon	125828	125906	.	+	.	ID=FRAEX38873_v2_000000070.1.exon8;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	CDS	125828	125906	.	+	2	ID=FRAEX38873_v2_000000070.1.cds8;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	exon	126420	126460	.	+	.	ID=FRAEX38873_v2_000000070.1.exon9;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	CDS	126420	126460	.	+	1	ID=FRAEX38873_v2_000000070.1.cds9;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	exon	127064	127109	.	+	.	ID=FRAEX38873_v2_000000070.1.exon10;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	CDS	127064	127109	.	+	2	ID=FRAEX38873_v2_000000070.1.cds10;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	exon	127267	127361	.	+	.	ID=FRAEX38873_v2_000000070.1.exon11;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	CDS	127267	127361	.	+	1	ID=FRAEX38873_v2_000000070.1.cds11;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	exon	127572	127675	.	+	.	ID=FRAEX38873_v2_000000070.1.exon12;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	CDS	127572	127675	.	+	2	ID=FRAEX38873_v2_000000070.1.cds12;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	exon	127859	127906	.	+	.	ID=FRAEX38873_v2_000000070.1.exon13;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	CDS	127859	127906	.	+	0	ID=FRAEX38873_v2_000000070.1.cds13;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	CDS	128055	128111	.	+	0	ID=FRAEX38873_v2_000000070.1.cds14;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	exon	128055	128417	.	+	.	ID=FRAEX38873_v2_000000070.1.exon14;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	three_prime_UTR	128112	128417	.	+	.	ID=FRAEX38873_v2_000000070.1.3utr1;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	gene	129359	134016	.	-	.	ID=FRAEX38873_v2_000000080;Name=FRAEX38873_v2_000000080;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	129359	134016	.	-	.	ID=FRAEX38873_v2_000000080.1;Parent=FRAEX38873_v2_000000080;Name=FRAEX38873_v2_000000080.1;biotype=protein_coding;AED=0.14
+Contig0	FRAEX38873_v2	three_prime_UTR	129359	129666	.	-	.	ID=FRAEX38873_v2_000000080.1.3utr1;Parent=FRAEX38873_v2_000000080.1
+Contig0	FRAEX38873_v2	exon	129359	129771	.	-	.	ID=FRAEX38873_v2_000000080.1.exon1;Parent=FRAEX38873_v2_000000080.1
+Contig0	FRAEX38873_v2	CDS	129667	129771	.	-	0	ID=FRAEX38873_v2_000000080.1.cds1;Parent=FRAEX38873_v2_000000080.1
+Contig0	FRAEX38873_v2	exon	131117	131191	.	-	.	ID=FRAEX38873_v2_000000080.1.exon2;Parent=FRAEX38873_v2_000000080.1
+Contig0	FRAEX38873_v2	CDS	131117	131191	.	-	0	ID=FRAEX38873_v2_000000080.1.cds2;Parent=FRAEX38873_v2_000000080.1
+Contig0	FRAEX38873_v2	exon	131367	131513	.	-	.	ID=FRAEX38873_v2_000000080.1.exon3;Parent=FRAEX38873_v2_000000080.1
+Contig0	FRAEX38873_v2	CDS	131367	131513	.	-	0	ID=FRAEX38873_v2_000000080.1.cds3;Parent=FRAEX38873_v2_000000080.1
+Contig0	FRAEX38873_v2	exon	131702	131836	.	-	.	ID=FRAEX38873_v2_000000080.1.exon4;Parent=FRAEX38873_v2_000000080.1
+Contig0	FRAEX38873_v2	CDS	131702	131836	.	-	0	ID=FRAEX38873_v2_000000080.1.cds4;Parent=FRAEX38873_v2_000000080.1
+Contig0	FRAEX38873_v2	exon	131927	132055	.	-	.	ID=FRAEX38873_v2_000000080.1.exon5;Parent=FRAEX38873_v2_000000080.1
+Contig0	FRAEX38873_v2	CDS	131927	132055	.	-	0	ID=FRAEX38873_v2_000000080.1.cds5;Parent=FRAEX38873_v2_000000080.1
+Contig0	FRAEX38873_v2	exon	133449	133547	.	-	.	ID=FRAEX38873_v2_000000080.1.exon6;Parent=FRAEX38873_v2_000000080.1
+Contig0	FRAEX38873_v2	CDS	133449	133547	.	-	0	ID=FRAEX38873_v2_000000080.1.cds6;Parent=FRAEX38873_v2_000000080.1
+Contig0	FRAEX38873_v2	CDS	133681	133875	.	-	0	ID=FRAEX38873_v2_000000080.1.cds7;Parent=FRAEX38873_v2_000000080.1
+Contig0	FRAEX38873_v2	exon	133681	134016	.	-	.	ID=FRAEX38873_v2_000000080.1.exon7;Parent=FRAEX38873_v2_000000080.1
+Contig0	FRAEX38873_v2	five_prime_UTR	133876	134016	.	-	.	ID=FRAEX38873_v2_000000080.1.5utr1;Parent=FRAEX38873_v2_000000080.1
+Contig0	FRAEX38873_v2	gene	165045	168925	.	-	.	ID=FRAEX38873_v2_000000090;Name=FRAEX38873_v2_000000090;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	165045	168925	.	-	.	ID=FRAEX38873_v2_000000090.1;Parent=FRAEX38873_v2_000000090;Name=FRAEX38873_v2_000000090.1;biotype=protein_coding;AED=0.11
+Contig0	FRAEX38873_v2	three_prime_UTR	165045	165419	.	-	.	ID=FRAEX38873_v2_000000090.1.3utr1;Parent=FRAEX38873_v2_000000090.1
+Contig0	FRAEX38873_v2	exon	165045	165640	.	-	.	ID=FRAEX38873_v2_000000090.1.exon1;Parent=FRAEX38873_v2_000000090.1
+Contig0	FRAEX38873_v2	CDS	165420	165640	.	-	2	ID=FRAEX38873_v2_000000090.1.cds1;Parent=FRAEX38873_v2_000000090.1
+Contig0	FRAEX38873_v2	CDS	167803	167896	.	-	0	ID=FRAEX38873_v2_000000090.1.cds2;Parent=FRAEX38873_v2_000000090.1
+Contig0	FRAEX38873_v2	exon	167803	167908	.	-	.	ID=FRAEX38873_v2_000000090.1.exon2;Parent=FRAEX38873_v2_000000090.1
+Contig0	FRAEX38873_v2	five_prime_UTR	167897	167908	.	-	.	ID=FRAEX38873_v2_000000090.1.5utr1;Parent=FRAEX38873_v2_000000090.1
+Contig0	FRAEX38873_v2	five_prime_UTR	168842	168925	.	-	.	ID=FRAEX38873_v2_000000090.1.5utr2;Parent=FRAEX38873_v2_000000090.1
+Contig0	FRAEX38873_v2	exon	168842	168925	.	-	.	ID=FRAEX38873_v2_000000090.1.exon3;Parent=FRAEX38873_v2_000000090.1
+Contig0	FRAEX38873_v2	gene	176386	185885	.	-	.	ID=FRAEX38873_v2_000000100;Name=FRAEX38873_v2_000000100;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	176386	184897	.	-	.	ID=FRAEX38873_v2_000000100.1;Parent=FRAEX38873_v2_000000100;Name=FRAEX38873_v2_000000100.1;biotype=protein_coding;AED=0.11
+Contig0	FRAEX38873_v2	three_prime_UTR	176386	176809	.	-	.	ID=FRAEX38873_v2_000000100.1.3utr1;Parent=FRAEX38873_v2_000000100.1
+Contig0	FRAEX38873_v2	exon	176386	177384	.	-	.	ID=FRAEX38873_v2_000000100.1.exon1;Parent=FRAEX38873_v2_000000100.1
+Contig0	FRAEX38873_v2	CDS	176810	177384	.	-	2	ID=FRAEX38873_v2_000000100.1.cds1;Parent=FRAEX38873_v2_000000100.1
+Contig0	FRAEX38873_v2	exon	178546	178950	.	-	.	ID=FRAEX38873_v2_000000100.1.exon2;Parent=FRAEX38873_v2_000000100.1
+Contig0	FRAEX38873_v2	CDS	178546	178950	.	-	2	ID=FRAEX38873_v2_000000100.1.cds2;Parent=FRAEX38873_v2_000000100.1
+Contig0	FRAEX38873_v2	CDS	184536	184536	.	-	0	ID=FRAEX38873_v2_000000100.1.cds3;Parent=FRAEX38873_v2_000000100.1
+Contig0	FRAEX38873_v2	exon	184536	184766	.	-	.	ID=FRAEX38873_v2_000000100.1.exon3;Parent=FRAEX38873_v2_000000100.1
+Contig0	FRAEX38873_v2	five_prime_UTR	184537	184766	.	-	.	ID=FRAEX38873_v2_000000100.1.5utr1;Parent=FRAEX38873_v2_000000100.1
+Contig0	FRAEX38873_v2	five_prime_UTR	184839	184897	.	-	.	ID=FRAEX38873_v2_000000100.1.5utr2;Parent=FRAEX38873_v2_000000100.1
+Contig0	FRAEX38873_v2	exon	184839	184897	.	-	.	ID=FRAEX38873_v2_000000100.1.exon4;Parent=FRAEX38873_v2_000000100.1
+Contig0	FRAEX38873_v2	mRNA	176386	185885	.	-	.	ID=FRAEX38873_v2_000000100.2;Parent=FRAEX38873_v2_000000100;Name=FRAEX38873_v2_000000100.2;biotype=protein_coding;AED=0.08
+Contig0	FRAEX38873_v2	three_prime_UTR	176386	176809	.	-	.	ID=FRAEX38873_v2_000000100.2.3utr1;Parent=FRAEX38873_v2_000000100.2
+Contig0	FRAEX38873_v2	exon	176386	177384	.	-	.	ID=FRAEX38873_v2_000000100.2.exon1;Parent=FRAEX38873_v2_000000100.2
+Contig0	FRAEX38873_v2	CDS	176810	177384	.	-	2	ID=FRAEX38873_v2_000000100.2.cds1;Parent=FRAEX38873_v2_000000100.2
+Contig0	FRAEX38873_v2	exon	178546	178950	.	-	.	ID=FRAEX38873_v2_000000100.2.exon2;Parent=FRAEX38873_v2_000000100.2
+Contig0	FRAEX38873_v2	CDS	178546	178950	.	-	2	ID=FRAEX38873_v2_000000100.2.cds2;Parent=FRAEX38873_v2_000000100.2
+Contig0	FRAEX38873_v2	exon	184536	184766	.	-	.	ID=FRAEX38873_v2_000000100.2.exon3;Parent=FRAEX38873_v2_000000100.2
+Contig0	FRAEX38873_v2	CDS	184536	184766	.	-	2	ID=FRAEX38873_v2_000000100.2.cds3;Parent=FRAEX38873_v2_000000100.2
+Contig0	FRAEX38873_v2	exon	185580	185598	.	-	.	ID=FRAEX38873_v2_000000100.2.exon4;Parent=FRAEX38873_v2_000000100.2
+Contig0	FRAEX38873_v2	CDS	185580	185598	.	-	0	ID=FRAEX38873_v2_000000100.2.cds4;Parent=FRAEX38873_v2_000000100.2
+Contig0	FRAEX38873_v2	CDS	185708	185710	.	-	0	ID=FRAEX38873_v2_000000100.2.cds5;Parent=FRAEX38873_v2_000000100.2
+Contig0	FRAEX38873_v2	exon	185708	185885	.	-	.	ID=FRAEX38873_v2_000000100.2.exon5;Parent=FRAEX38873_v2_000000100.2
+Contig0	FRAEX38873_v2	five_prime_UTR	185711	185885	.	-	.	ID=FRAEX38873_v2_000000100.2.5utr1;Parent=FRAEX38873_v2_000000100.2
+Contig0	FRAEX38873_v2	gene	197856	201412	.	+	.	ID=FRAEX38873_v2_000000110;Name=FRAEX38873_v2_000000110;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	197856	201412	.	+	.	ID=FRAEX38873_v2_000000110.1;Parent=FRAEX38873_v2_000000110;Name=FRAEX38873_v2_000000110.1;biotype=protein_coding;AED=0.25
+Contig0	FRAEX38873_v2	five_prime_UTR	197856	198080	.	+	.	ID=FRAEX38873_v2_000000110.1.5utr1;Parent=FRAEX38873_v2_000000110.1
+Contig0	FRAEX38873_v2	exon	197856	198080	.	+	.	ID=FRAEX38873_v2_000000110.1.exon1;Parent=FRAEX38873_v2_000000110.1
+Contig0	FRAEX38873_v2	five_prime_UTR	200136	200234	.	+	.	ID=FRAEX38873_v2_000000110.1.5utr2;Parent=FRAEX38873_v2_000000110.1
+Contig0	FRAEX38873_v2	exon	200136	200297	.	+	.	ID=FRAEX38873_v2_000000110.1.exon2;Parent=FRAEX38873_v2_000000110.1
+Contig0	FRAEX38873_v2	CDS	200235	200297	.	+	0	ID=FRAEX38873_v2_000000110.1.cds1;Parent=FRAEX38873_v2_000000110.1
+Contig0	FRAEX38873_v2	CDS	200402	201241	.	+	0	ID=FRAEX38873_v2_000000110.1.cds2;Parent=FRAEX38873_v2_000000110.1
+Contig0	FRAEX38873_v2	exon	200402	201412	.	+	.	ID=FRAEX38873_v2_000000110.1.exon3;Parent=FRAEX38873_v2_000000110.1
+Contig0	FRAEX38873_v2	three_prime_UTR	201242	201412	.	+	.	ID=FRAEX38873_v2_000000110.1.3utr1;Parent=FRAEX38873_v2_000000110.1
+Contig0	FRAEX38873_v2	mRNA	197944	201412	.	+	.	ID=FRAEX38873_v2_000000110.2;Parent=FRAEX38873_v2_000000110;Name=FRAEX38873_v2_000000110.2;biotype=protein_coding;AED=0.22
+Contig0	FRAEX38873_v2	five_prime_UTR	197944	198080	.	+	.	ID=FRAEX38873_v2_000000110.2.5utr1;Parent=FRAEX38873_v2_000000110.2
+Contig0	FRAEX38873_v2	exon	197944	198080	.	+	.	ID=FRAEX38873_v2_000000110.2.exon1;Parent=FRAEX38873_v2_000000110.2
+Contig0	FRAEX38873_v2	five_prime_UTR	198245	198313	.	+	.	ID=FRAEX38873_v2_000000110.2.5utr2;Parent=FRAEX38873_v2_000000110.2
+Contig0	FRAEX38873_v2	exon	198245	198313	.	+	.	ID=FRAEX38873_v2_000000110.2.exon2;Parent=FRAEX38873_v2_000000110.2
+Contig0	FRAEX38873_v2	five_prime_UTR	200136	200234	.	+	.	ID=FRAEX38873_v2_000000110.2.5utr3;Parent=FRAEX38873_v2_000000110.2
+Contig0	FRAEX38873_v2	exon	200136	200297	.	+	.	ID=FRAEX38873_v2_000000110.2.exon3;Parent=FRAEX38873_v2_000000110.2
+Contig0	FRAEX38873_v2	CDS	200235	200297	.	+	0	ID=FRAEX38873_v2_000000110.2.cds1;Parent=FRAEX38873_v2_000000110.2
+Contig0	FRAEX38873_v2	CDS	200402	201241	.	+	0	ID=FRAEX38873_v2_000000110.2.cds2;Parent=FRAEX38873_v2_000000110.2
+Contig0	FRAEX38873_v2	exon	200402	201412	.	+	.	ID=FRAEX38873_v2_000000110.2.exon4;Parent=FRAEX38873_v2_000000110.2
+Contig0	FRAEX38873_v2	three_prime_UTR	201242	201412	.	+	.	ID=FRAEX38873_v2_000000110.2.3utr1;Parent=FRAEX38873_v2_000000110.2
+Contig0	FRAEX38873_v2	gene	201866	204067	.	-	.	ID=FRAEX38873_v2_000000120;Name=FRAEX38873_v2_000000120;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	201866	204067	.	-	.	ID=FRAEX38873_v2_000000120.1;Parent=FRAEX38873_v2_000000120;Name=FRAEX38873_v2_000000120.1;biotype=protein_coding;AED=0.10
+Contig0	FRAEX38873_v2	three_prime_UTR	201866	202177	.	-	.	ID=FRAEX38873_v2_000000120.1.3utr1;Parent=FRAEX38873_v2_000000120.1
+Contig0	FRAEX38873_v2	exon	201866	204067	.	-	.	ID=FRAEX38873_v2_000000120.1.exon1;Parent=FRAEX38873_v2_000000120.1
+Contig0	FRAEX38873_v2	CDS	202178	203926	.	-	0	ID=FRAEX38873_v2_000000120.1.cds1;Parent=FRAEX38873_v2_000000120.1
+Contig0	FRAEX38873_v2	five_prime_UTR	203927	204067	.	-	.	ID=FRAEX38873_v2_000000120.1.5utr1;Parent=FRAEX38873_v2_000000120.1
+Contig0	FRAEX38873_v2	gene	210661	211405	.	-	.	ID=FRAEX38873_v2_000000130;Name=FRAEX38873_v2_000000130;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	210661	211405	.	-	.	ID=FRAEX38873_v2_000000130.1;Parent=FRAEX38873_v2_000000130;Name=FRAEX38873_v2_000000130.1;biotype=protein_coding;AED=0.28
+Contig0	FRAEX38873_v2	three_prime_UTR	210661	211000	.	-	.	ID=FRAEX38873_v2_000000130.1.3utr1;Parent=FRAEX38873_v2_000000130.1
+Contig0	FRAEX38873_v2	exon	210661	211405	.	-	.	ID=FRAEX38873_v2_000000130.1.exon1;Parent=FRAEX38873_v2_000000130.1
+Contig0	FRAEX38873_v2	CDS	211001	211321	.	-	0	ID=FRAEX38873_v2_000000130.1.cds1;Parent=FRAEX38873_v2_000000130.1
+Contig0	FRAEX38873_v2	five_prime_UTR	211322	211405	.	-	.	ID=FRAEX38873_v2_000000130.1.5utr1;Parent=FRAEX38873_v2_000000130.1
+Contig0	FRAEX38873_v2	gene	228263	228775	.	-	.	ID=FRAEX38873_v2_000000140;Name=FRAEX38873_v2_000000140;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	228263	228775	.	-	.	ID=FRAEX38873_v2_000000140.1;Parent=FRAEX38873_v2_000000140;Name=FRAEX38873_v2_000000140.1;biotype=protein_coding;AED=0.70
+Contig0	FRAEX38873_v2	three_prime_UTR	228263	228401	.	-	.	ID=FRAEX38873_v2_000000140.1.3utr1;Parent=FRAEX38873_v2_000000140.1
+Contig0	FRAEX38873_v2	exon	228263	228775	.	-	.	ID=FRAEX38873_v2_000000140.1.exon1;Parent=FRAEX38873_v2_000000140.1
+Contig0	FRAEX38873_v2	CDS	228402	228692	.	-	0	ID=FRAEX38873_v2_000000140.1.cds1;Parent=FRAEX38873_v2_000000140.1
+Contig0	FRAEX38873_v2	five_prime_UTR	228693	228775	.	-	.	ID=FRAEX38873_v2_000000140.1.5utr1;Parent=FRAEX38873_v2_000000140.1
+Contig0	FRAEX38873_v2	gene	230835	231128	.	-	.	ID=FRAEX38873_v2_000000150;Name=FRAEX38873_v2_000000150;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	230835	231128	.	-	.	ID=FRAEX38873_v2_000000150.1;Parent=FRAEX38873_v2_000000150;Name=FRAEX38873_v2_000000150.1;biotype=protein_coding;AED=0.48
+Contig0	FRAEX38873_v2	exon	230835	231128	.	-	.	ID=FRAEX38873_v2_000000150.1.exon1;Parent=FRAEX38873_v2_000000150.1
+Contig0	FRAEX38873_v2	CDS	230835	231128	.	-	0	ID=FRAEX38873_v2_000000150.1.cds1;Parent=FRAEX38873_v2_000000150.1
+Contig0	FRAEX38873_v2	gene	235265	235558	.	-	.	ID=FRAEX38873_v2_000000160;Name=FRAEX38873_v2_000000160;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	235265	235558	.	-	.	ID=FRAEX38873_v2_000000160.1;Parent=FRAEX38873_v2_000000160;Name=FRAEX38873_v2_000000160.1;biotype=protein_coding;AED=0.48
+Contig0	FRAEX38873_v2	exon	235265	235558	.	-	.	ID=FRAEX38873_v2_000000160.1.exon1;Parent=FRAEX38873_v2_000000160.1
+Contig0	FRAEX38873_v2	CDS	235265	235558	.	-	0	ID=FRAEX38873_v2_000000160.1.cds1;Parent=FRAEX38873_v2_000000160.1
+Contig0	FRAEX38873_v2	gene	248105	248755	.	-	.	ID=FRAEX38873_v2_000000170;Name=FRAEX38873_v2_000000170;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	248105	248755	.	-	.	ID=FRAEX38873_v2_000000170.1;Parent=FRAEX38873_v2_000000170;Name=FRAEX38873_v2_000000170.1;biotype=protein_coding;AED=0.75
+Contig0	FRAEX38873_v2	three_prime_UTR	248105	248368	.	-	.	ID=FRAEX38873_v2_000000170.1.3utr1;Parent=FRAEX38873_v2_000000170.1
+Contig0	FRAEX38873_v2	exon	248105	248755	.	-	.	ID=FRAEX38873_v2_000000170.1.exon1;Parent=FRAEX38873_v2_000000170.1
+Contig0	FRAEX38873_v2	CDS	248369	248662	.	-	0	ID=FRAEX38873_v2_000000170.1.cds1;Parent=FRAEX38873_v2_000000170.1
+Contig0	FRAEX38873_v2	five_prime_UTR	248663	248755	.	-	.	ID=FRAEX38873_v2_000000170.1.5utr1;Parent=FRAEX38873_v2_000000170.1
+Contig0	FRAEX38873_v2	gene	253226	255815	.	-	.	ID=FRAEX38873_v2_000000180;Name=FRAEX38873_v2_000000180;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	253226	255815	.	-	.	ID=FRAEX38873_v2_000000180.1;Parent=FRAEX38873_v2_000000180;Name=FRAEX38873_v2_000000180.1;biotype=protein_coding;AED=0.57
+Contig0	FRAEX38873_v2	three_prime_UTR	253226	253381	.	-	.	ID=FRAEX38873_v2_000000180.1.3utr1;Parent=FRAEX38873_v2_000000180.1
+Contig0	FRAEX38873_v2	exon	253226	253719	.	-	.	ID=FRAEX38873_v2_000000180.1.exon1;Parent=FRAEX38873_v2_000000180.1
+Contig0	FRAEX38873_v2	CDS	253382	253719	.	-	2	ID=FRAEX38873_v2_000000180.1.cds1;Parent=FRAEX38873_v2_000000180.1
+Contig0	FRAEX38873_v2	exon	254174	254225	.	-	.	ID=FRAEX38873_v2_000000180.1.exon2;Parent=FRAEX38873_v2_000000180.1
+Contig0	FRAEX38873_v2	CDS	254174	254225	.	-	0	ID=FRAEX38873_v2_000000180.1.cds2;Parent=FRAEX38873_v2_000000180.1
+Contig0	FRAEX38873_v2	CDS	255429	255656	.	-	0	ID=FRAEX38873_v2_000000180.1.cds3;Parent=FRAEX38873_v2_000000180.1
+Contig0	FRAEX38873_v2	exon	255429	255815	.	-	.	ID=FRAEX38873_v2_000000180.1.exon3;Parent=FRAEX38873_v2_000000180.1
+Contig0	FRAEX38873_v2	five_prime_UTR	255657	255815	.	-	.	ID=FRAEX38873_v2_000000180.1.5utr1;Parent=FRAEX38873_v2_000000180.1
+Contig0	FRAEX38873_v2	gene	261216	262013	.	+	.	ID=FRAEX38873_v2_000000190;Name=FRAEX38873_v2_000000190;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	261216	262013	.	+	.	ID=FRAEX38873_v2_000000190.1;Parent=FRAEX38873_v2_000000190;Name=FRAEX38873_v2_000000190.1;biotype=protein_coding;AED=0.20
+Contig0	FRAEX38873_v2	five_prime_UTR	261216	261298	.	+	.	ID=FRAEX38873_v2_000000190.1.5utr1;Parent=FRAEX38873_v2_000000190.1
+Contig0	FRAEX38873_v2	exon	261216	261647	.	+	.	ID=FRAEX38873_v2_000000190.1.exon1;Parent=FRAEX38873_v2_000000190.1
+Contig0	FRAEX38873_v2	CDS	261299	261601	.	+	0	ID=FRAEX38873_v2_000000190.1.cds1;Parent=FRAEX38873_v2_000000190.1
+Contig0	FRAEX38873_v2	three_prime_UTR	261602	261647	.	+	.	ID=FRAEX38873_v2_000000190.1.3utr1;Parent=FRAEX38873_v2_000000190.1
+Contig0	FRAEX38873_v2	exon	261953	262013	.	+	.	ID=FRAEX38873_v2_000000190.1.exon2;Parent=FRAEX38873_v2_000000190.1
+Contig0	FRAEX38873_v2	three_prime_UTR	261953	262013	.	+	.	ID=FRAEX38873_v2_000000190.1.3utr2;Parent=FRAEX38873_v2_000000190.1
+Contig0	FRAEX38873_v2	gene	263066	263703	.	+	.	ID=FRAEX38873_v2_000000200;Name=FRAEX38873_v2_000000200;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	263066	263703	.	+	.	ID=FRAEX38873_v2_000000200.1;Parent=FRAEX38873_v2_000000200;Name=FRAEX38873_v2_000000200.1;biotype=protein_coding;AED=0.32
+Contig0	FRAEX38873_v2	five_prime_UTR	263066	263238	.	+	.	ID=FRAEX38873_v2_000000200.1.5utr1;Parent=FRAEX38873_v2_000000200.1
+Contig0	FRAEX38873_v2	exon	263066	263703	.	+	.	ID=FRAEX38873_v2_000000200.1.exon1;Parent=FRAEX38873_v2_000000200.1
+Contig0	FRAEX38873_v2	CDS	263239	263502	.	+	0	ID=FRAEX38873_v2_000000200.1.cds1;Parent=FRAEX38873_v2_000000200.1
+Contig0	FRAEX38873_v2	three_prime_UTR	263503	263703	.	+	.	ID=FRAEX38873_v2_000000200.1.3utr1;Parent=FRAEX38873_v2_000000200.1
+Contig0	FRAEX38873_v2	gene	271640	273575	.	-	.	ID=FRAEX38873_v2_000000210;Name=FRAEX38873_v2_000000210;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	271640	273575	.	-	.	ID=FRAEX38873_v2_000000210.1;Parent=FRAEX38873_v2_000000210;Name=FRAEX38873_v2_000000210.1;biotype=protein_coding;AED=0.13
+Contig0	FRAEX38873_v2	three_prime_UTR	271640	271832	.	-	.	ID=FRAEX38873_v2_000000210.1.3utr1;Parent=FRAEX38873_v2_000000210.1
+Contig0	FRAEX38873_v2	exon	271640	272636	.	-	.	ID=FRAEX38873_v2_000000210.1.exon1;Parent=FRAEX38873_v2_000000210.1
+Contig0	FRAEX38873_v2	CDS	271833	272636	.	-	0	ID=FRAEX38873_v2_000000210.1.cds1;Parent=FRAEX38873_v2_000000210.1
+Contig0	FRAEX38873_v2	exon	272794	272887	.	-	.	ID=FRAEX38873_v2_000000210.1.exon2;Parent=FRAEX38873_v2_000000210.1
+Contig0	FRAEX38873_v2	CDS	272794	272887	.	-	1	ID=FRAEX38873_v2_000000210.1.cds2;Parent=FRAEX38873_v2_000000210.1
+Contig0	FRAEX38873_v2	exon	272999	273177	.	-	.	ID=FRAEX38873_v2_000000210.1.exon3;Parent=FRAEX38873_v2_000000210.1
+Contig0	FRAEX38873_v2	CDS	272999	273177	.	-	0	ID=FRAEX38873_v2_000000210.1.cds3;Parent=FRAEX38873_v2_000000210.1
+Contig0	FRAEX38873_v2	CDS	273487	273543	.	-	0	ID=FRAEX38873_v2_000000210.1.cds4;Parent=FRAEX38873_v2_000000210.1
+Contig0	FRAEX38873_v2	exon	273487	273575	.	-	.	ID=FRAEX38873_v2_000000210.1.exon4;Parent=FRAEX38873_v2_000000210.1
+Contig0	FRAEX38873_v2	five_prime_UTR	273544	273575	.	-	.	ID=FRAEX38873_v2_000000210.1.5utr1;Parent=FRAEX38873_v2_000000210.1
+Contig0	FRAEX38873_v2	gene	279346	283969	.	+	.	ID=FRAEX38873_v2_000000220;Name=FRAEX38873_v2_000000220;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	279346	283969	.	+	.	ID=FRAEX38873_v2_000000220.1;Parent=FRAEX38873_v2_000000220;Name=FRAEX38873_v2_000000220.1;biotype=protein_coding;AED=0.55
+Contig0	FRAEX38873_v2	five_prime_UTR	279346	279523	.	+	.	ID=FRAEX38873_v2_000000220.1.5utr1;Parent=FRAEX38873_v2_000000220.1
+Contig0	FRAEX38873_v2	exon	279346	279755	.	+	.	ID=FRAEX38873_v2_000000220.1.exon1;Parent=FRAEX38873_v2_000000220.1
+Contig0	FRAEX38873_v2	CDS	279524	279755	.	+	0	ID=FRAEX38873_v2_000000220.1.cds1;Parent=FRAEX38873_v2_000000220.1
+Contig0	FRAEX38873_v2	exon	279908	279999	.	+	.	ID=FRAEX38873_v2_000000220.1.exon2;Parent=FRAEX38873_v2_000000220.1
+Contig0	FRAEX38873_v2	CDS	279908	279999	.	+	2	ID=FRAEX38873_v2_000000220.1.cds2;Parent=FRAEX38873_v2_000000220.1
+Contig0	FRAEX38873_v2	exon	282975	283427	.	+	.	ID=FRAEX38873_v2_000000220.1.exon3;Parent=FRAEX38873_v2_000000220.1
+Contig0	FRAEX38873_v2	CDS	282975	283427	.	+	0	ID=FRAEX38873_v2_000000220.1.cds3;Parent=FRAEX38873_v2_000000220.1
+Contig0	FRAEX38873_v2	exon	283909	283969	.	+	.	ID=FRAEX38873_v2_000000220.1.exon4;Parent=FRAEX38873_v2_000000220.1
+Contig0	FRAEX38873_v2	three_prime_UTR	283909	283969	.	+	.	ID=FRAEX38873_v2_000000220.1.3utr1;Parent=FRAEX38873_v2_000000220.1
+Contig0	FRAEX38873_v2	gene	284046	285215	.	+	.	ID=FRAEX38873_v2_000000230;Name=FRAEX38873_v2_000000230;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	284046	285215	.	+	.	ID=FRAEX38873_v2_000000230.1;Parent=FRAEX38873_v2_000000230;Name=FRAEX38873_v2_000000230.1;biotype=protein_coding;AED=0.39
+Contig0	FRAEX38873_v2	five_prime_UTR	284046	284157	.	+	.	ID=FRAEX38873_v2_000000230.1.5utr1;Parent=FRAEX38873_v2_000000230.1
+Contig0	FRAEX38873_v2	exon	284046	284461	.	+	.	ID=FRAEX38873_v2_000000230.1.exon1;Parent=FRAEX38873_v2_000000230.1
+Contig0	FRAEX38873_v2	CDS	284158	284461	.	+	0	ID=FRAEX38873_v2_000000230.1.cds1;Parent=FRAEX38873_v2_000000230.1
+Contig0	FRAEX38873_v2	CDS	284849	285144	.	+	2	ID=FRAEX38873_v2_000000230.1.cds2;Parent=FRAEX38873_v2_000000230.1
+Contig0	FRAEX38873_v2	exon	284849	285215	.	+	.	ID=FRAEX38873_v2_000000230.1.exon2;Parent=FRAEX38873_v2_000000230.1
+Contig0	FRAEX38873_v2	three_prime_UTR	285145	285215	.	+	.	ID=FRAEX38873_v2_000000230.1.3utr1;Parent=FRAEX38873_v2_000000230.1
+Contig0	FRAEX38873_v2	gene	289856	300640	.	+	.	ID=FRAEX38873_v2_000000240;Name=FRAEX38873_v2_000000240;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	289856	300640	.	+	.	ID=FRAEX38873_v2_000000240.1;Parent=FRAEX38873_v2_000000240;Name=FRAEX38873_v2_000000240.1;biotype=protein_coding;AED=0.02
+Contig0	FRAEX38873_v2	five_prime_UTR	289856	289891	.	+	.	ID=FRAEX38873_v2_000000240.1.5utr1;Parent=FRAEX38873_v2_000000240.1
+Contig0	FRAEX38873_v2	exon	289856	290154	.	+	.	ID=FRAEX38873_v2_000000240.1.exon1;Parent=FRAEX38873_v2_000000240.1
+Contig0	FRAEX38873_v2	CDS	289892	290154	.	+	0	ID=FRAEX38873_v2_000000240.1.cds1;Parent=FRAEX38873_v2_000000240.1
+Contig0	FRAEX38873_v2	exon	290751	292395	.	+	.	ID=FRAEX38873_v2_000000240.1.exon2;Parent=FRAEX38873_v2_000000240.1
+Contig0	FRAEX38873_v2	CDS	290751	292395	.	+	1	ID=FRAEX38873_v2_000000240.1.cds2;Parent=FRAEX38873_v2_000000240.1
+Contig0	FRAEX38873_v2	exon	292887	294320	.	+	.	ID=FRAEX38873_v2_000000240.1.exon3;Parent=FRAEX38873_v2_000000240.1
+Contig0	FRAEX38873_v2	CDS	292887	294320	.	+	0	ID=FRAEX38873_v2_000000240.1.cds3;Parent=FRAEX38873_v2_000000240.1
+Contig0	FRAEX38873_v2	exon	295204	295520	.	+	.	ID=FRAEX38873_v2_000000240.1.exon4;Parent=FRAEX38873_v2_000000240.1
+Contig0	FRAEX38873_v2	CDS	295204	295520	.	+	0	ID=FRAEX38873_v2_000000240.1.cds4;Parent=FRAEX38873_v2_000000240.1
+Contig0	FRAEX38873_v2	exon	296465	298200	.	+	.	ID=FRAEX38873_v2_000000240.1.exon5;Parent=FRAEX38873_v2_000000240.1
+Contig0	FRAEX38873_v2	CDS	296465	298200	.	+	1	ID=FRAEX38873_v2_000000240.1.cds5;Parent=FRAEX38873_v2_000000240.1
+Contig0	FRAEX38873_v2	exon	298835	298980	.	+	.	ID=FRAEX38873_v2_000000240.1.exon6;Parent=FRAEX38873_v2_000000240.1
+Contig0	FRAEX38873_v2	CDS	298835	298980	.	+	2	ID=FRAEX38873_v2_000000240.1.cds6;Parent=FRAEX38873_v2_000000240.1
+Contig0	FRAEX38873_v2	exon	299052	299203	.	+	.	ID=FRAEX38873_v2_000000240.1.exon7;Parent=FRAEX38873_v2_000000240.1
+Contig0	FRAEX38873_v2	CDS	299052	299203	.	+	0	ID=FRAEX38873_v2_000000240.1.cds7;Parent=FRAEX38873_v2_000000240.1
+Contig0	FRAEX38873_v2	exon	299402	299564	.	+	.	ID=FRAEX38873_v2_000000240.1.exon8;Parent=FRAEX38873_v2_000000240.1
+Contig0	FRAEX38873_v2	CDS	299402	299564	.	+	1	ID=FRAEX38873_v2_000000240.1.cds8;Parent=FRAEX38873_v2_000000240.1
+Contig0	FRAEX38873_v2	exon	299777	299880	.	+	.	ID=FRAEX38873_v2_000000240.1.exon9;Parent=FRAEX38873_v2_000000240.1
+Contig0	FRAEX38873_v2	CDS	299777	299880	.	+	0	ID=FRAEX38873_v2_000000240.1.cds9;Parent=FRAEX38873_v2_000000240.1
+Contig0	FRAEX38873_v2	exon	300001	300092	.	+	.	ID=FRAEX38873_v2_000000240.1.exon10;Parent=FRAEX38873_v2_000000240.1
+Contig0	FRAEX38873_v2	CDS	300001	300092	.	+	1	ID=FRAEX38873_v2_000000240.1.cds10;Parent=FRAEX38873_v2_000000240.1
+Contig0	FRAEX38873_v2	CDS	300207	300283	.	+	2	ID=FRAEX38873_v2_000000240.1.cds11;Parent=FRAEX38873_v2_000000240.1
+Contig0	FRAEX38873_v2	exon	300207	300640	.	+	.	ID=FRAEX38873_v2_000000240.1.exon11;Parent=FRAEX38873_v2_000000240.1
+Contig0	FRAEX38873_v2	three_prime_UTR	300284	300640	.	+	.	ID=FRAEX38873_v2_000000240.1.3utr1;Parent=FRAEX38873_v2_000000240.1
+Contig0	FRAEX38873_v2	gene	306586	309862	.	+	.	ID=FRAEX38873_v2_000000250;Name=FRAEX38873_v2_000000250;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	306586	309800	.	+	.	ID=FRAEX38873_v2_000000250.1;Parent=FRAEX38873_v2_000000250;Name=FRAEX38873_v2_000000250.1;biotype=protein_coding;AED=0.27
+Contig0	FRAEX38873_v2	five_prime_UTR	306586	306613	.	+	.	ID=FRAEX38873_v2_000000250.1.5utr1;Parent=FRAEX38873_v2_000000250.1
+Contig0	FRAEX38873_v2	exon	306586	306754	.	+	.	ID=FRAEX38873_v2_000000250.1.exon1;Parent=FRAEX38873_v2_000000250.1
+Contig0	FRAEX38873_v2	CDS	306614	306754	.	+	0	ID=FRAEX38873_v2_000000250.1.cds1;Parent=FRAEX38873_v2_000000250.1
+Contig0	FRAEX38873_v2	exon	307399	307434	.	+	.	ID=FRAEX38873_v2_000000250.1.exon2;Parent=FRAEX38873_v2_000000250.1
+Contig0	FRAEX38873_v2	CDS	307399	307434	.	+	0	ID=FRAEX38873_v2_000000250.1.cds2;Parent=FRAEX38873_v2_000000250.1
+Contig0	FRAEX38873_v2	exon	307540	307590	.	+	.	ID=FRAEX38873_v2_000000250.1.exon3;Parent=FRAEX38873_v2_000000250.1
+Contig0	FRAEX38873_v2	CDS	307540	307590	.	+	0	ID=FRAEX38873_v2_000000250.1.cds3;Parent=FRAEX38873_v2_000000250.1
+Contig0	FRAEX38873_v2	exon	307859	307947	.	+	.	ID=FRAEX38873_v2_000000250.1.exon4;Parent=FRAEX38873_v2_000000250.1
+Contig0	FRAEX38873_v2	CDS	307859	307947	.	+	0	ID=FRAEX38873_v2_000000250.1.cds4;Parent=FRAEX38873_v2_000000250.1
+Contig0	FRAEX38873_v2	exon	308179	308254	.	+	.	ID=FRAEX38873_v2_000000250.1.exon5;Parent=FRAEX38873_v2_000000250.1
+Contig0	FRAEX38873_v2	CDS	308179	308254	.	+	1	ID=FRAEX38873_v2_000000250.1.cds5;Parent=FRAEX38873_v2_000000250.1
+Contig0	FRAEX38873_v2	exon	308354	308557	.	+	.	ID=FRAEX38873_v2_000000250.1.exon6;Parent=FRAEX38873_v2_000000250.1
+Contig0	FRAEX38873_v2	CDS	308354	308557	.	+	0	ID=FRAEX38873_v2_000000250.1.cds6;Parent=FRAEX38873_v2_000000250.1
+Contig0	FRAEX38873_v2	exon	309244	309315	.	+	.	ID=FRAEX38873_v2_000000250.1.exon7;Parent=FRAEX38873_v2_000000250.1
+Contig0	FRAEX38873_v2	CDS	309244	309315	.	+	0	ID=FRAEX38873_v2_000000250.1.cds7;Parent=FRAEX38873_v2_000000250.1
+Contig0	FRAEX38873_v2	CDS	309508	309558	.	+	0	ID=FRAEX38873_v2_000000250.1.cds8;Parent=FRAEX38873_v2_000000250.1
+Contig0	FRAEX38873_v2	exon	309508	309800	.	+	.	ID=FRAEX38873_v2_000000250.1.exon8;Parent=FRAEX38873_v2_000000250.1
+Contig0	FRAEX38873_v2	three_prime_UTR	309559	309800	.	+	.	ID=FRAEX38873_v2_000000250.1.3utr1;Parent=FRAEX38873_v2_000000250.1
+Contig0	FRAEX38873_v2	mRNA	307307	309862	.	+	.	ID=FRAEX38873_v2_000000250.2;Parent=FRAEX38873_v2_000000250;Name=FRAEX38873_v2_000000250.2;biotype=protein_coding;AED=0.19
+Contig0	FRAEX38873_v2	five_prime_UTR	307307	307434	.	+	.	ID=FRAEX38873_v2_000000250.2.5utr1;Parent=FRAEX38873_v2_000000250.2
+Contig0	FRAEX38873_v2	exon	307307	307434	.	+	.	ID=FRAEX38873_v2_000000250.2.exon1;Parent=FRAEX38873_v2_000000250.2
+Contig0	FRAEX38873_v2	five_prime_UTR	307540	307584	.	+	.	ID=FRAEX38873_v2_000000250.2.5utr2;Parent=FRAEX38873_v2_000000250.2
+Contig0	FRAEX38873_v2	exon	307540	307590	.	+	.	ID=FRAEX38873_v2_000000250.2.exon2;Parent=FRAEX38873_v2_000000250.2
+Contig0	FRAEX38873_v2	CDS	307585	307590	.	+	0	ID=FRAEX38873_v2_000000250.2.cds1;Parent=FRAEX38873_v2_000000250.2
+Contig0	FRAEX38873_v2	exon	307859	307947	.	+	.	ID=FRAEX38873_v2_000000250.2.exon3;Parent=FRAEX38873_v2_000000250.2
+Contig0	FRAEX38873_v2	CDS	307859	307947	.	+	0	ID=FRAEX38873_v2_000000250.2.cds2;Parent=FRAEX38873_v2_000000250.2
+Contig0	FRAEX38873_v2	exon	308179	308254	.	+	.	ID=FRAEX38873_v2_000000250.2.exon4;Parent=FRAEX38873_v2_000000250.2
+Contig0	FRAEX38873_v2	CDS	308179	308254	.	+	1	ID=FRAEX38873_v2_000000250.2.cds3;Parent=FRAEX38873_v2_000000250.2
+Contig0	FRAEX38873_v2	exon	308354	308557	.	+	.	ID=FRAEX38873_v2_000000250.2.exon5;Parent=FRAEX38873_v2_000000250.2
+Contig0	FRAEX38873_v2	CDS	308354	308557	.	+	0	ID=FRAEX38873_v2_000000250.2.cds4;Parent=FRAEX38873_v2_000000250.2
+Contig0	FRAEX38873_v2	exon	309244	309315	.	+	.	ID=FRAEX38873_v2_000000250.2.exon6;Parent=FRAEX38873_v2_000000250.2
+Contig0	FRAEX38873_v2	CDS	309244	309315	.	+	0	ID=FRAEX38873_v2_000000250.2.cds5;Parent=FRAEX38873_v2_000000250.2
+Contig0	FRAEX38873_v2	CDS	309508	309558	.	+	0	ID=FRAEX38873_v2_000000250.2.cds6;Parent=FRAEX38873_v2_000000250.2
+Contig0	FRAEX38873_v2	exon	309508	309862	.	+	.	ID=FRAEX38873_v2_000000250.2.exon7;Parent=FRAEX38873_v2_000000250.2
+Contig0	FRAEX38873_v2	three_prime_UTR	309559	309862	.	+	.	ID=FRAEX38873_v2_000000250.2.3utr1;Parent=FRAEX38873_v2_000000250.2
+Contig0	FRAEX38873_v2	gene	313406	317128	.	+	.	ID=FRAEX38873_v2_000000260;Name=FRAEX38873_v2_000000260;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	313406	317128	.	+	.	ID=FRAEX38873_v2_000000260.1;Parent=FRAEX38873_v2_000000260;Name=FRAEX38873_v2_000000260.1;biotype=protein_coding;AED=0.45
+Contig0	FRAEX38873_v2	five_prime_UTR	313406	313509	.	+	.	ID=FRAEX38873_v2_000000260.1.5utr1;Parent=FRAEX38873_v2_000000260.1
+Contig0	FRAEX38873_v2	exon	313406	313675	.	+	.	ID=FRAEX38873_v2_000000260.1.exon1;Parent=FRAEX38873_v2_000000260.1
+Contig0	FRAEX38873_v2	CDS	313510	313675	.	+	0	ID=FRAEX38873_v2_000000260.1.cds1;Parent=FRAEX38873_v2_000000260.1
+Contig0	FRAEX38873_v2	CDS	316630	316805	.	+	2	ID=FRAEX38873_v2_000000260.1.cds2;Parent=FRAEX38873_v2_000000260.1
+Contig0	FRAEX38873_v2	exon	316630	317128	.	+	.	ID=FRAEX38873_v2_000000260.1.exon2;Parent=FRAEX38873_v2_000000260.1
+Contig0	FRAEX38873_v2	three_prime_UTR	316806	317128	.	+	.	ID=FRAEX38873_v2_000000260.1.3utr1;Parent=FRAEX38873_v2_000000260.1
+Contig0	FRAEX38873_v2	gene	325103	327250	.	+	.	ID=FRAEX38873_v2_000000270;Name=FRAEX38873_v2_000000270;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	325103	327250	.	+	.	ID=FRAEX38873_v2_000000270.1;Parent=FRAEX38873_v2_000000270;Name=FRAEX38873_v2_000000270.1;biotype=protein_coding;AED=0.00
+Contig0	FRAEX38873_v2	five_prime_UTR	325103	325176	.	+	.	ID=FRAEX38873_v2_000000270.1.5utr1;Parent=FRAEX38873_v2_000000270.1
+Contig0	FRAEX38873_v2	exon	325103	325330	.	+	.	ID=FRAEX38873_v2_000000270.1.exon1;Parent=FRAEX38873_v2_000000270.1
+Contig0	FRAEX38873_v2	CDS	325177	325330	.	+	0	ID=FRAEX38873_v2_000000270.1.cds1;Parent=FRAEX38873_v2_000000270.1
+Contig0	FRAEX38873_v2	CDS	325782	327013	.	+	2	ID=FRAEX38873_v2_000000270.1.cds2;Parent=FRAEX38873_v2_000000270.1
+Contig0	FRAEX38873_v2	exon	325782	327250	.	+	.	ID=FRAEX38873_v2_000000270.1.exon2;Parent=FRAEX38873_v2_000000270.1
+Contig0	FRAEX38873_v2	three_prime_UTR	327014	327250	.	+	.	ID=FRAEX38873_v2_000000270.1.3utr1;Parent=FRAEX38873_v2_000000270.1
+Contig0	FRAEX38873_v2	gene	336569	343134	.	+	.	ID=FRAEX38873_v2_000000280;Name=FRAEX38873_v2_000000280;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	336569	343134	.	+	.	ID=FRAEX38873_v2_000000280.1;Parent=FRAEX38873_v2_000000280;Name=FRAEX38873_v2_000000280.1;biotype=protein_coding;AED=0.04
+Contig0	FRAEX38873_v2	five_prime_UTR	336569	336819	.	+	.	ID=FRAEX38873_v2_000000280.1.5utr1;Parent=FRAEX38873_v2_000000280.1
+Contig0	FRAEX38873_v2	exon	336569	336898	.	+	.	ID=FRAEX38873_v2_000000280.1.exon1;Parent=FRAEX38873_v2_000000280.1
+Contig0	FRAEX38873_v2	CDS	336820	336898	.	+	0	ID=FRAEX38873_v2_000000280.1.cds1;Parent=FRAEX38873_v2_000000280.1
+Contig0	FRAEX38873_v2	exon	336986	337271	.	+	.	ID=FRAEX38873_v2_000000280.1.exon2;Parent=FRAEX38873_v2_000000280.1
+Contig0	FRAEX38873_v2	CDS	336986	337271	.	+	2	ID=FRAEX38873_v2_000000280.1.cds2;Parent=FRAEX38873_v2_000000280.1
+Contig0	FRAEX38873_v2	CDS	342615	342747	.	+	1	ID=FRAEX38873_v2_000000280.1.cds3;Parent=FRAEX38873_v2_000000280.1
+Contig0	FRAEX38873_v2	exon	342615	343134	.	+	.	ID=FRAEX38873_v2_000000280.1.exon3;Parent=FRAEX38873_v2_000000280.1
+Contig0	FRAEX38873_v2	three_prime_UTR	342748	343134	.	+	.	ID=FRAEX38873_v2_000000280.1.3utr1;Parent=FRAEX38873_v2_000000280.1
+Contig0	FRAEX38873_v2	gene	349836	351647	.	+	.	ID=FRAEX38873_v2_000000290;Name=FRAEX38873_v2_000000290;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	349836	351647	.	+	.	ID=FRAEX38873_v2_000000290.1;Parent=FRAEX38873_v2_000000290;Name=FRAEX38873_v2_000000290.1;biotype=protein_coding;AED=0.85
+Contig0	FRAEX38873_v2	five_prime_UTR	349836	350421	.	+	.	ID=FRAEX38873_v2_000000290.1.5utr1;Parent=FRAEX38873_v2_000000290.1
+Contig0	FRAEX38873_v2	exon	349836	351647	.	+	.	ID=FRAEX38873_v2_000000290.1.exon1;Parent=FRAEX38873_v2_000000290.1
+Contig0	FRAEX38873_v2	CDS	350422	351516	.	+	0	ID=FRAEX38873_v2_000000290.1.cds1;Parent=FRAEX38873_v2_000000290.1
+Contig0	FRAEX38873_v2	three_prime_UTR	351517	351647	.	+	.	ID=FRAEX38873_v2_000000290.1.3utr1;Parent=FRAEX38873_v2_000000290.1
+Contig0	FRAEX38873_v2	gene	367466	370664	.	+	.	ID=FRAEX38873_v2_000000300;Name=FRAEX38873_v2_000000300;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	367466	370664	.	+	.	ID=FRAEX38873_v2_000000300.1;Parent=FRAEX38873_v2_000000300;Name=FRAEX38873_v2_000000300.1;biotype=protein_coding;AED=0.23
+Contig0	FRAEX38873_v2	five_prime_UTR	367466	367927	.	+	.	ID=FRAEX38873_v2_000000300.1.5utr1;Parent=FRAEX38873_v2_000000300.1
+Contig0	FRAEX38873_v2	exon	367466	370664	.	+	.	ID=FRAEX38873_v2_000000300.1.exon1;Parent=FRAEX38873_v2_000000300.1
+Contig0	FRAEX38873_v2	CDS	367928	370072	.	+	0	ID=FRAEX38873_v2_000000300.1.cds1;Parent=FRAEX38873_v2_000000300.1
+Contig0	FRAEX38873_v2	three_prime_UTR	370073	370664	.	+	.	ID=FRAEX38873_v2_000000300.1.3utr1;Parent=FRAEX38873_v2_000000300.1
+Contig0	FRAEX38873_v2	gene	374320	378838	.	+	.	ID=FRAEX38873_v2_000000310;Name=FRAEX38873_v2_000000310;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	374320	378838	.	+	.	ID=FRAEX38873_v2_000000310.1;Parent=FRAEX38873_v2_000000310;Name=FRAEX38873_v2_000000310.1;biotype=protein_coding;AED=0.22
+Contig0	FRAEX38873_v2	five_prime_UTR	374320	374451	.	+	.	ID=FRAEX38873_v2_000000310.1.5utr1;Parent=FRAEX38873_v2_000000310.1
+Contig0	FRAEX38873_v2	exon	374320	374451	.	+	.	ID=FRAEX38873_v2_000000310.1.exon1;Parent=FRAEX38873_v2_000000310.1
+Contig0	FRAEX38873_v2	five_prime_UTR	374648	374696	.	+	.	ID=FRAEX38873_v2_000000310.1.5utr2;Parent=FRAEX38873_v2_000000310.1
+Contig0	FRAEX38873_v2	exon	374648	374699	.	+	.	ID=FRAEX38873_v2_000000310.1.exon2;Parent=FRAEX38873_v2_000000310.1
+Contig0	FRAEX38873_v2	CDS	374697	374699	.	+	0	ID=FRAEX38873_v2_000000310.1.cds1;Parent=FRAEX38873_v2_000000310.1
+Contig0	FRAEX38873_v2	exon	375750	375827	.	+	.	ID=FRAEX38873_v2_000000310.1.exon3;Parent=FRAEX38873_v2_000000310.1
+Contig0	FRAEX38873_v2	CDS	375750	375827	.	+	0	ID=FRAEX38873_v2_000000310.1.cds2;Parent=FRAEX38873_v2_000000310.1
+Contig0	FRAEX38873_v2	exon	376157	376181	.	+	.	ID=FRAEX38873_v2_000000310.1.exon4;Parent=FRAEX38873_v2_000000310.1
+Contig0	FRAEX38873_v2	CDS	376157	376181	.	+	0	ID=FRAEX38873_v2_000000310.1.cds3;Parent=FRAEX38873_v2_000000310.1
+Contig0	FRAEX38873_v2	exon	376276	376308	.	+	.	ID=FRAEX38873_v2_000000310.1.exon5;Parent=FRAEX38873_v2_000000310.1
+Contig0	FRAEX38873_v2	CDS	376276	376308	.	+	2	ID=FRAEX38873_v2_000000310.1.cds4;Parent=FRAEX38873_v2_000000310.1
+Contig0	FRAEX38873_v2	exon	376434	376555	.	+	.	ID=FRAEX38873_v2_000000310.1.exon6;Parent=FRAEX38873_v2_000000310.1
+Contig0	FRAEX38873_v2	CDS	376434	376555	.	+	2	ID=FRAEX38873_v2_000000310.1.cds5;Parent=FRAEX38873_v2_000000310.1
+Contig0	FRAEX38873_v2	exon	376632	376717	.	+	.	ID=FRAEX38873_v2_000000310.1.exon7;Parent=FRAEX38873_v2_000000310.1
+Contig0	FRAEX38873_v2	CDS	376632	376717	.	+	0	ID=FRAEX38873_v2_000000310.1.cds6;Parent=FRAEX38873_v2_000000310.1
+Contig0	FRAEX38873_v2	exon	377359	377400	.	+	.	ID=FRAEX38873_v2_000000310.1.exon8;Parent=FRAEX38873_v2_000000310.1
+Contig0	FRAEX38873_v2	CDS	377359	377400	.	+	1	ID=FRAEX38873_v2_000000310.1.cds7;Parent=FRAEX38873_v2_000000310.1
+Contig0	FRAEX38873_v2	exon	377588	377811	.	+	.	ID=FRAEX38873_v2_000000310.1.exon9;Parent=FRAEX38873_v2_000000310.1
+Contig0	FRAEX38873_v2	CDS	377588	377811	.	+	1	ID=FRAEX38873_v2_000000310.1.cds8;Parent=FRAEX38873_v2_000000310.1
+Contig0	FRAEX38873_v2	exon	378043	378293	.	+	.	ID=FRAEX38873_v2_000000310.1.exon10;Parent=FRAEX38873_v2_000000310.1
+Contig0	FRAEX38873_v2	CDS	378043	378293	.	+	2	ID=FRAEX38873_v2_000000310.1.cds9;Parent=FRAEX38873_v2_000000310.1
+Contig0	FRAEX38873_v2	CDS	378457	378549	.	+	0	ID=FRAEX38873_v2_000000310.1.cds10;Parent=FRAEX38873_v2_000000310.1
+Contig0	FRAEX38873_v2	exon	378457	378838	.	+	.	ID=FRAEX38873_v2_000000310.1.exon11;Parent=FRAEX38873_v2_000000310.1
+Contig0	FRAEX38873_v2	three_prime_UTR	378550	378838	.	+	.	ID=FRAEX38873_v2_000000310.1.3utr1;Parent=FRAEX38873_v2_000000310.1
+Contig0	FRAEX38873_v2	gene	379298	386285	.	-	.	ID=FRAEX38873_v2_000000320;Name=FRAEX38873_v2_000000320;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	379298	386285	.	-	.	ID=FRAEX38873_v2_000000320.1;Parent=FRAEX38873_v2_000000320;Name=FRAEX38873_v2_000000320.1;biotype=protein_coding;AED=0.11
+Contig0	FRAEX38873_v2	three_prime_UTR	379298	379570	.	-	.	ID=FRAEX38873_v2_000000320.1.3utr1;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	exon	379298	379892	.	-	.	ID=FRAEX38873_v2_000000320.1.exon1;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	CDS	379571	379892	.	-	1	ID=FRAEX38873_v2_000000320.1.cds1;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	exon	380300	380610	.	-	.	ID=FRAEX38873_v2_000000320.1.exon2;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	CDS	380300	380610	.	-	0	ID=FRAEX38873_v2_000000320.1.cds2;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	exon	380774	381706	.	-	.	ID=FRAEX38873_v2_000000320.1.exon3;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	CDS	380774	381706	.	-	0	ID=FRAEX38873_v2_000000320.1.cds3;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	exon	382272	382599	.	-	.	ID=FRAEX38873_v2_000000320.1.exon4;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	CDS	382272	382599	.	-	1	ID=FRAEX38873_v2_000000320.1.cds4;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	exon	383023	383147	.	-	.	ID=FRAEX38873_v2_000000320.1.exon5;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	CDS	383023	383147	.	-	0	ID=FRAEX38873_v2_000000320.1.cds5;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	exon	383256	383321	.	-	.	ID=FRAEX38873_v2_000000320.1.exon6;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	CDS	383256	383321	.	-	0	ID=FRAEX38873_v2_000000320.1.cds6;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	exon	383431	383498	.	-	.	ID=FRAEX38873_v2_000000320.1.exon7;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	CDS	383431	383498	.	-	2	ID=FRAEX38873_v2_000000320.1.cds7;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	exon	383605	383686	.	-	.	ID=FRAEX38873_v2_000000320.1.exon8;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	CDS	383605	383686	.	-	0	ID=FRAEX38873_v2_000000320.1.cds8;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	exon	383757	383870	.	-	.	ID=FRAEX38873_v2_000000320.1.exon9;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	CDS	383757	383870	.	-	0	ID=FRAEX38873_v2_000000320.1.cds9;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	exon	384022	384122	.	-	.	ID=FRAEX38873_v2_000000320.1.exon10;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	CDS	384022	384122	.	-	2	ID=FRAEX38873_v2_000000320.1.cds10;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	exon	384257	384346	.	-	.	ID=FRAEX38873_v2_000000320.1.exon11;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	CDS	384257	384346	.	-	2	ID=FRAEX38873_v2_000000320.1.cds11;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	CDS	384703	384925	.	-	0	ID=FRAEX38873_v2_000000320.1.cds12;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	exon	384703	385178	.	-	.	ID=FRAEX38873_v2_000000320.1.exon12;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	five_prime_UTR	384926	385178	.	-	.	ID=FRAEX38873_v2_000000320.1.5utr1;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	five_prime_UTR	385944	386050	.	-	.	ID=FRAEX38873_v2_000000320.1.5utr2;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	exon	385944	386050	.	-	.	ID=FRAEX38873_v2_000000320.1.exon13;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	five_prime_UTR	386150	386285	.	-	.	ID=FRAEX38873_v2_000000320.1.5utr3;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	exon	386150	386285	.	-	.	ID=FRAEX38873_v2_000000320.1.exon14;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	gene	389676	393575	.	-	.	ID=FRAEX38873_v2_000000330;Name=FRAEX38873_v2_000000330;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	389676	393575	.	-	.	ID=FRAEX38873_v2_000000330.1;Parent=FRAEX38873_v2_000000330;Name=FRAEX38873_v2_000000330.1;biotype=protein_coding;AED=0.49
+Contig0	FRAEX38873_v2	three_prime_UTR	389676	389834	.	-	.	ID=FRAEX38873_v2_000000330.1.3utr1;Parent=FRAEX38873_v2_000000330.1
+Contig0	FRAEX38873_v2	exon	389676	390443	.	-	.	ID=FRAEX38873_v2_000000330.1.exon1;Parent=FRAEX38873_v2_000000330.1
+Contig0	FRAEX38873_v2	CDS	389835	390443	.	-	0	ID=FRAEX38873_v2_000000330.1.cds1;Parent=FRAEX38873_v2_000000330.1
+Contig0	FRAEX38873_v2	exon	390560	390721	.	-	.	ID=FRAEX38873_v2_000000330.1.exon2;Parent=FRAEX38873_v2_000000330.1
+Contig0	FRAEX38873_v2	CDS	390560	390721	.	-	0	ID=FRAEX38873_v2_000000330.1.cds2;Parent=FRAEX38873_v2_000000330.1
+Contig0	FRAEX38873_v2	exon	390855	391154	.	-	.	ID=FRAEX38873_v2_000000330.1.exon3;Parent=FRAEX38873_v2_000000330.1
+Contig0	FRAEX38873_v2	CDS	390855	391154	.	-	0	ID=FRAEX38873_v2_000000330.1.cds3;Parent=FRAEX38873_v2_000000330.1
+Contig0	FRAEX38873_v2	exon	392493	392846	.	-	.	ID=FRAEX38873_v2_000000330.1.exon4;Parent=FRAEX38873_v2_000000330.1
+Contig0	FRAEX38873_v2	CDS	392493	392846	.	-	0	ID=FRAEX38873_v2_000000330.1.cds4;Parent=FRAEX38873_v2_000000330.1
+Contig0	FRAEX38873_v2	CDS	393492	393494	.	-	0	ID=FRAEX38873_v2_000000330.1.cds5;Parent=FRAEX38873_v2_000000330.1
+Contig0	FRAEX38873_v2	exon	393492	393575	.	-	.	ID=FRAEX38873_v2_000000330.1.exon5;Parent=FRAEX38873_v2_000000330.1
+Contig0	FRAEX38873_v2	five_prime_UTR	393495	393575	.	-	.	ID=FRAEX38873_v2_000000330.1.5utr1;Parent=FRAEX38873_v2_000000330.1
+Contig0	FRAEX38873_v2	gene	401885	403554	.	-	.	ID=FRAEX38873_v2_000000340;Name=FRAEX38873_v2_000000340;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	401885	403554	.	-	.	ID=FRAEX38873_v2_000000340.1;Parent=FRAEX38873_v2_000000340;Name=FRAEX38873_v2_000000340.1;biotype=protein_coding;AED=0.41
+Contig0	FRAEX38873_v2	three_prime_UTR	401885	402134	.	-	.	ID=FRAEX38873_v2_000000340.1.3utr1;Parent=FRAEX38873_v2_000000340.1
+Contig0	FRAEX38873_v2	exon	401885	402833	.	-	.	ID=FRAEX38873_v2_000000340.1.exon1;Parent=FRAEX38873_v2_000000340.1
+Contig0	FRAEX38873_v2	CDS	402135	402833	.	-	0	ID=FRAEX38873_v2_000000340.1.cds1;Parent=FRAEX38873_v2_000000340.1
+Contig0	FRAEX38873_v2	CDS	402920	403228	.	-	0	ID=FRAEX38873_v2_000000340.1.cds2;Parent=FRAEX38873_v2_000000340.1
+Contig0	FRAEX38873_v2	exon	402920	403247	.	-	.	ID=FRAEX38873_v2_000000340.1.exon2;Parent=FRAEX38873_v2_000000340.1
+Contig0	FRAEX38873_v2	five_prime_UTR	403229	403247	.	-	.	ID=FRAEX38873_v2_000000340.1.5utr1;Parent=FRAEX38873_v2_000000340.1
+Contig0	FRAEX38873_v2	five_prime_UTR	403332	403554	.	-	.	ID=FRAEX38873_v2_000000340.1.5utr2;Parent=FRAEX38873_v2_000000340.1
+Contig0	FRAEX38873_v2	exon	403332	403554	.	-	.	ID=FRAEX38873_v2_000000340.1.exon3;Parent=FRAEX38873_v2_000000340.1
+Contig0	FRAEX38873_v2	gene	410367	413565	.	-	.	ID=FRAEX38873_v2_000000350;Name=FRAEX38873_v2_000000350;biotype=protein_coding
+Contig0	FRAEX38873_v2	gene	410367	413565	.	-	.	ID=FRAEX38873_v2_000000350;Name=FRAEX38873_v2_000000350;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	410367	413565	.	-	.	ID=FRAEX38873_v2_000000350.1;Parent=FRAEX38873_v2_000000350;Name=FRAEX38873_v2_000000350.1;biotype=protein_coding;AED=0.78
+Contig0	FRAEX38873_v2	three_prime_UTR	410367	410597	.	-	.	ID=FRAEX38873_v2_000000350.1.3utr1;Parent=FRAEX38873_v2_000000350.1
+Contig0	FRAEX38873_v2	exon	410367	410617	.	-	.	ID=FRAEX38873_v2_000000350.1.exon1;Parent=FRAEX38873_v2_000000350.1
+Contig0	FRAEX38873_v2	CDS	410598	410617	.	-	2	ID=FRAEX38873_v2_000000350.1.cds1;Parent=FRAEX38873_v2_000000350.1
+Contig0	FRAEX38873_v2	exon	410691	410784	.	-	.	ID=FRAEX38873_v2_000000350.1.exon2;Parent=FRAEX38873_v2_000000350.1
+Contig0	FRAEX38873_v2	CDS	410691	410784	.	-	0	ID=FRAEX38873_v2_000000350.1.cds2;Parent=FRAEX38873_v2_000000350.1

+ 4 - 0
tests/tripal_chado/data/gff_invalidstartend.gff

@@ -0,0 +1,4 @@
+##gff-version 3
+Contig0	FRAEX38873_v2	gene	44054	16315	.	+	.	ID=FRAEX38873_v2_000000010;Name=FRAEX38873_v2_000000010;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	16315	44054	.	+	.	ID=FRAEX38873_v2_000000010.1;Parent=FRAEX38873_v2_000000010;Name=FRAEX38873_v2_000000010.1;biotype=protein_coding;AED=0.05
+Contig0	FRAEX38873_v2	polypeptide	16315	44054	.	+	.	ID=FRAEX38873_v2_000000010.1.3_test_protein;Parent=FRAEX38873_v2_000000010.1

+ 6 - 0
tests/tripal_chado/data/gff_phase.gff

@@ -0,0 +1,6 @@
+##gff-version 3
+Contig0	FRAEX38873_v2	gene	16315	44054	.	+	.	ID=FRAEX38873_v2_000000010;Name=FRAEX38873_v2_000000010;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	16315	44054	.	+	.	ID=FRAEX38873_v2_000000010.1;Parent=FRAEX38873_v2_000000010;Name=FRAEX38873_v2_000000010.1;biotype=protein_coding;AED=0.05
+Contig0	FRAEX38873_v2	five_prime_UTR	16315	16557	.	+	.	ID=FRAEX38873_v2_000000010.1.5utr1;Parent=FRAEX38873_v2_000000010.1
+Contig0	FRAEX38873_v2	exon	16315	16967	.	+	.	ID=FRAEX38873_v2_000000010.1.exon1;Parent=FRAEX38873_v2_000000010.1
+Contig0	FRAEX38873_v2	CDS	16558	16967	.	+	1	ID=FRAEX38873_v2_000000010.1.cds1;Parent=FRAEX38873_v2_000000010.1

+ 6 - 0
tests/tripal_chado/data/gff_phase_invalid_character.gff

@@ -0,0 +1,6 @@
+##gff-version 3
+Contig0	FRAEX38873_v2	gene	16315	44054	.	+	.	ID=FRAEX38873_v2_000000010;Name=FRAEX38873_v2_000000010;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	16315	44054	.	+	.	ID=FRAEX38873_v2_000000010.1;Parent=FRAEX38873_v2_000000010;Name=FRAEX38873_v2_000000010.1;biotype=protein_coding;AED=0.05
+Contig0	FRAEX38873_v2	five_prime_UTR	16315	16557	.	+	.	ID=FRAEX38873_v2_000000010.1.5utr1;Parent=FRAEX38873_v2_000000010.1
+Contig0	FRAEX38873_v2	exon	16315	16967	.	+	.	ID=FRAEX38873_v2_000000010.1.exon1;Parent=FRAEX38873_v2_000000010.1
+Contig0	FRAEX38873_v2	CDS	16558	16967	.	+	a	ID=FRAEX38873_v2_000000010.1.cds1;Parent=FRAEX38873_v2_000000010.1

+ 6 - 0
tests/tripal_chado/data/gff_phase_invalid_number.gff

@@ -0,0 +1,6 @@
+##gff-version 3
+Contig0	FRAEX38873_v2	gene	16315	44054	.	+	.	ID=FRAEX38873_v2_000000010;Name=FRAEX38873_v2_000000010;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	16315	44054	.	+	.	ID=FRAEX38873_v2_000000010.1;Parent=FRAEX38873_v2_000000010;Name=FRAEX38873_v2_000000010.1;biotype=protein_coding;AED=0.05
+Contig0	FRAEX38873_v2	five_prime_UTR	16315	16557	.	+	.	ID=FRAEX38873_v2_000000010.1.5utr1;Parent=FRAEX38873_v2_000000010.1
+Contig0	FRAEX38873_v2	exon	16315	16967	.	+	.	ID=FRAEX38873_v2_000000010.1.exon1;Parent=FRAEX38873_v2_000000010.1
+Contig0	FRAEX38873_v2	CDS	16558	16967	.	+	3	ID=FRAEX38873_v2_000000010.1.cds1;Parent=FRAEX38873_v2_000000010.1

+ 493 - 0
tests/tripal_chado/data/gff_protein_generation.gff

@@ -0,0 +1,493 @@
+##gff-version 3
+Contig0	FRAEX38873_v2	gene	16315	44054	.	+	.	ID=FRAEX38873_v2_000000010;Name=FRAEX38873_v2_000000010;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	16315	44054	.	+	.	ID=FRAEX38873_v2_000000010.1;Parent=FRAEX38873_v2_000000010;Name=FRAEX38873_v2_000000010.1;biotype=protein_coding;AED=0.05
+Contig0	FRAEX38873_v2	five_prime_UTR	16315	16557	.	+	.	ID=FRAEX38873_v2_000000010.1.5utr1;Parent=FRAEX38873_v2_000000010.1
+Contig0	FRAEX38873_v2	exon	16315	16967	.	+	.	ID=FRAEX38873_v2_000000010.1.exon1;Parent=FRAEX38873_v2_000000010.1
+Contig0	FRAEX38873_v2	CDS	16558	16967	.	+	0	ID=FRAEX38873_v2_000000010.1.cds1;Parent=FRAEX38873_v2_000000010.1
+Contig0	FRAEX38873_v2	exon	22028	22195	.	+	.	ID=FRAEX38873_v2_000000010.1.exon2;Parent=FRAEX38873_v2_000000010.1
+Contig0	FRAEX38873_v2	CDS	22028	22195	.	+	1	ID=FRAEX38873_v2_000000010.1.cds2;Parent=FRAEX38873_v2_000000010.1
+Contig0	FRAEX38873_v2	exon	22363	22449	.	+	.	ID=FRAEX38873_v2_000000010.1.exon3;Parent=FRAEX38873_v2_000000010.1
+Contig0	FRAEX38873_v2	CDS	22363	22449	.	+	1	ID=FRAEX38873_v2_000000010.1.cds3;Parent=FRAEX38873_v2_000000010.1
+Contig0	FRAEX38873_v2	exon	28015	28060	.	+	.	ID=FRAEX38873_v2_000000010.1.exon4;Parent=FRAEX38873_v2_000000010.1
+Contig0	FRAEX38873_v2	CDS	28015	28060	.	+	1	ID=FRAEX38873_v2_000000010.1.cds4;Parent=FRAEX38873_v2_000000010.1
+Contig0	FRAEX38873_v2	exon	28659	28735	.	+	.	ID=FRAEX38873_v2_000000010.1.exon5;Parent=FRAEX38873_v2_000000010.1
+Contig0	FRAEX38873_v2	CDS	28659	28735	.	+	0	ID=FRAEX38873_v2_000000010.1.cds5;Parent=FRAEX38873_v2_000000010.1
+Contig0	FRAEX38873_v2	exon	29763	29922	.	+	.	ID=FRAEX38873_v2_000000010.1.exon6;Parent=FRAEX38873_v2_000000010.1
+Contig0	FRAEX38873_v2	CDS	29763	29922	.	+	1	ID=FRAEX38873_v2_000000010.1.cds6;Parent=FRAEX38873_v2_000000010.1
+Contig0	FRAEX38873_v2	exon	31370	31438	.	+	.	ID=FRAEX38873_v2_000000010.1.exon7;Parent=FRAEX38873_v2_000000010.1
+Contig0	FRAEX38873_v2	CDS	31370	31438	.	+	0	ID=FRAEX38873_v2_000000010.1.cds7;Parent=FRAEX38873_v2_000000010.1
+Contig0	FRAEX38873_v2	exon	32937	32996	.	+	.	ID=FRAEX38873_v2_000000010.1.exon8;Parent=FRAEX38873_v2_000000010.1
+Contig0	FRAEX38873_v2	CDS	32937	32996	.	+	0	ID=FRAEX38873_v2_000000010.1.cds8;Parent=FRAEX38873_v2_000000010.1
+Contig0	FRAEX38873_v2	exon	42580	42666	.	+	.	ID=FRAEX38873_v2_000000010.1.exon9;Parent=FRAEX38873_v2_000000010.1
+Contig0	FRAEX38873_v2	CDS	42580	42666	.	+	0	ID=FRAEX38873_v2_000000010.1.cds9;Parent=FRAEX38873_v2_000000010.1
+Contig0	FRAEX38873_v2	CDS	43421	43696	.	+	0	ID=FRAEX38873_v2_000000010.1.cds10;Parent=FRAEX38873_v2_000000010.1
+Contig0	FRAEX38873_v2	exon	43421	44054	.	+	.	ID=FRAEX38873_v2_000000010.1.exon10;Parent=FRAEX38873_v2_000000010.1
+Contig0	FRAEX38873_v2	three_prime_UTR	43697	44054	.	+	.	ID=FRAEX38873_v2_000000010.1.3utr1;Parent=FRAEX38873_v2_000000010.1
+Contig0	FRAEX38873_v2	mRNA	16315	44054	.	+	.	ID=FRAEX38873_v2_000000010.2;Parent=FRAEX38873_v2_000000010;Name=FRAEX38873_v2_000000010.2;biotype=protein_coding;AED=0.05
+Contig0	FRAEX38873_v2	five_prime_UTR	16315	16557	.	+	.	ID=FRAEX38873_v2_000000010.2.5utr1;Parent=FRAEX38873_v2_000000010.2
+Contig0	FRAEX38873_v2	exon	16315	16967	.	+	.	ID=FRAEX38873_v2_000000010.2.exon1;Parent=FRAEX38873_v2_000000010.2
+Contig0	FRAEX38873_v2	CDS	16558	16967	.	+	0	ID=FRAEX38873_v2_000000010.2.cds1;Parent=FRAEX38873_v2_000000010.2
+Contig0	FRAEX38873_v2	exon	22028	22195	.	+	.	ID=FRAEX38873_v2_000000010.2.exon2;Parent=FRAEX38873_v2_000000010.2
+Contig0	FRAEX38873_v2	CDS	22028	22195	.	+	1	ID=FRAEX38873_v2_000000010.2.cds2;Parent=FRAEX38873_v2_000000010.2
+Contig0	FRAEX38873_v2	exon	22363	22449	.	+	.	ID=FRAEX38873_v2_000000010.2.exon3;Parent=FRAEX38873_v2_000000010.2
+Contig0	FRAEX38873_v2	CDS	22363	22449	.	+	1	ID=FRAEX38873_v2_000000010.2.cds3;Parent=FRAEX38873_v2_000000010.2
+Contig0	FRAEX38873_v2	exon	26908	26953	.	+	.	ID=FRAEX38873_v2_000000010.2.exon4;Parent=FRAEX38873_v2_000000010.2
+Contig0	FRAEX38873_v2	CDS	26908	26953	.	+	1	ID=FRAEX38873_v2_000000010.2.cds4;Parent=FRAEX38873_v2_000000010.2
+Contig0	FRAEX38873_v2	exon	28659	28735	.	+	.	ID=FRAEX38873_v2_000000010.2.exon5;Parent=FRAEX38873_v2_000000010.2
+Contig0	FRAEX38873_v2	CDS	28659	28735	.	+	0	ID=FRAEX38873_v2_000000010.2.cds5;Parent=FRAEX38873_v2_000000010.2
+Contig0	FRAEX38873_v2	exon	29763	29922	.	+	.	ID=FRAEX38873_v2_000000010.2.exon6;Parent=FRAEX38873_v2_000000010.2
+Contig0	FRAEX38873_v2	CDS	29763	29922	.	+	1	ID=FRAEX38873_v2_000000010.2.cds6;Parent=FRAEX38873_v2_000000010.2
+Contig0	FRAEX38873_v2	exon	31370	31438	.	+	.	ID=FRAEX38873_v2_000000010.2.exon7;Parent=FRAEX38873_v2_000000010.2
+Contig0	FRAEX38873_v2	CDS	31370	31438	.	+	0	ID=FRAEX38873_v2_000000010.2.cds7;Parent=FRAEX38873_v2_000000010.2
+Contig0	FRAEX38873_v2	exon	32937	32996	.	+	.	ID=FRAEX38873_v2_000000010.2.exon8;Parent=FRAEX38873_v2_000000010.2
+Contig0	FRAEX38873_v2	CDS	32937	32996	.	+	0	ID=FRAEX38873_v2_000000010.2.cds8;Parent=FRAEX38873_v2_000000010.2
+Contig0	FRAEX38873_v2	exon	42580	42666	.	+	.	ID=FRAEX38873_v2_000000010.2.exon9;Parent=FRAEX38873_v2_000000010.2
+Contig0	FRAEX38873_v2	CDS	42580	42666	.	+	0	ID=FRAEX38873_v2_000000010.2.cds9;Parent=FRAEX38873_v2_000000010.2
+Contig0	FRAEX38873_v2	CDS	43421	43696	.	+	0	ID=FRAEX38873_v2_000000010.2.cds10;Parent=FRAEX38873_v2_000000010.2
+Contig0	FRAEX38873_v2	exon	43421	44054	.	+	.	ID=FRAEX38873_v2_000000010.2.exon10;Parent=FRAEX38873_v2_000000010.2
+Contig0	FRAEX38873_v2	three_prime_UTR	43697	44054	.	+	.	ID=FRAEX38873_v2_000000010.2.3utr1;Parent=FRAEX38873_v2_000000010.2
+Contig0	FRAEX38873_v2	gene	45916	53476	.	+	.	ID=FRAEX38873_v2_000000020;Name=FRAEX38873_v2_000000020;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	45916	53476	.	+	.	ID=FRAEX38873_v2_000000020.1;Parent=FRAEX38873_v2_000000020;Name=FRAEX38873_v2_000000020.1;biotype=protein_coding;AED=0.08
+Contig0	FRAEX38873_v2	five_prime_UTR	45916	46433	.	+	.	ID=FRAEX38873_v2_000000020.1.5utr1;Parent=FRAEX38873_v2_000000020.1
+Contig0	FRAEX38873_v2	exon	45916	46847	.	+	.	ID=FRAEX38873_v2_000000020.1.exon1;Parent=FRAEX38873_v2_000000020.1
+Contig0	FRAEX38873_v2	CDS	46434	46847	.	+	0	ID=FRAEX38873_v2_000000020.1.cds1;Parent=FRAEX38873_v2_000000020.1
+Contig0	FRAEX38873_v2	exon	47209	47281	.	+	.	ID=FRAEX38873_v2_000000020.1.exon2;Parent=FRAEX38873_v2_000000020.1
+Contig0	FRAEX38873_v2	CDS	47209	47281	.	+	0	ID=FRAEX38873_v2_000000020.1.cds2;Parent=FRAEX38873_v2_000000020.1
+Contig0	FRAEX38873_v2	exon	47796	47872	.	+	.	ID=FRAEX38873_v2_000000020.1.exon3;Parent=FRAEX38873_v2_000000020.1
+Contig0	FRAEX38873_v2	CDS	47796	47872	.	+	2	ID=FRAEX38873_v2_000000020.1.cds3;Parent=FRAEX38873_v2_000000020.1
+Contig0	FRAEX38873_v2	exon	48530	48618	.	+	.	ID=FRAEX38873_v2_000000020.1.exon4;Parent=FRAEX38873_v2_000000020.1
+Contig0	FRAEX38873_v2	CDS	48530	48618	.	+	0	ID=FRAEX38873_v2_000000020.1.cds4;Parent=FRAEX38873_v2_000000020.1
+Contig0	FRAEX38873_v2	exon	50337	50534	.	+	.	ID=FRAEX38873_v2_000000020.1.exon5;Parent=FRAEX38873_v2_000000020.1
+Contig0	FRAEX38873_v2	CDS	50337	50534	.	+	1	ID=FRAEX38873_v2_000000020.1.cds5;Parent=FRAEX38873_v2_000000020.1
+Contig0	FRAEX38873_v2	exon	51434	51638	.	+	.	ID=FRAEX38873_v2_000000020.1.exon6;Parent=FRAEX38873_v2_000000020.1
+Contig0	FRAEX38873_v2	CDS	51434	51638	.	+	1	ID=FRAEX38873_v2_000000020.1.cds6;Parent=FRAEX38873_v2_000000020.1
+Contig0	FRAEX38873_v2	exon	51733	51900	.	+	.	ID=FRAEX38873_v2_000000020.1.exon7;Parent=FRAEX38873_v2_000000020.1
+Contig0	FRAEX38873_v2	CDS	51733	51900	.	+	0	ID=FRAEX38873_v2_000000020.1.cds7;Parent=FRAEX38873_v2_000000020.1
+Contig0	FRAEX38873_v2	exon	52088	52255	.	+	.	ID=FRAEX38873_v2_000000020.1.exon8;Parent=FRAEX38873_v2_000000020.1
+Contig0	FRAEX38873_v2	CDS	52088	52255	.	+	0	ID=FRAEX38873_v2_000000020.1.cds8;Parent=FRAEX38873_v2_000000020.1
+Contig0	FRAEX38873_v2	exon	52441	52631	.	+	.	ID=FRAEX38873_v2_000000020.1.exon9;Parent=FRAEX38873_v2_000000020.1
+Contig0	FRAEX38873_v2	CDS	52441	52631	.	+	0	ID=FRAEX38873_v2_000000020.1.cds9;Parent=FRAEX38873_v2_000000020.1
+Contig0	FRAEX38873_v2	CDS	53104	53239	.	+	1	ID=FRAEX38873_v2_000000020.1.cds10;Parent=FRAEX38873_v2_000000020.1
+Contig0	FRAEX38873_v2	exon	53104	53476	.	+	.	ID=FRAEX38873_v2_000000020.1.exon10;Parent=FRAEX38873_v2_000000020.1
+Contig0	FRAEX38873_v2	three_prime_UTR	53240	53476	.	+	.	ID=FRAEX38873_v2_000000020.1.3utr1;Parent=FRAEX38873_v2_000000020.1
+Contig0	FRAEX38873_v2	gene	63686	68825	.	+	.	ID=FRAEX38873_v2_000000030;Name=FRAEX38873_v2_000000030;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	63686	68825	.	+	.	ID=FRAEX38873_v2_000000030.1;Parent=FRAEX38873_v2_000000030;Name=FRAEX38873_v2_000000030.1;biotype=protein_coding;AED=0.06
+Contig0	FRAEX38873_v2	five_prime_UTR	63686	63916	.	+	.	ID=FRAEX38873_v2_000000030.1.5utr1;Parent=FRAEX38873_v2_000000030.1
+Contig0	FRAEX38873_v2	exon	63686	63916	.	+	.	ID=FRAEX38873_v2_000000030.1.exon1;Parent=FRAEX38873_v2_000000030.1
+Contig0	FRAEX38873_v2	five_prime_UTR	64847	64877	.	+	.	ID=FRAEX38873_v2_000000030.1.5utr2;Parent=FRAEX38873_v2_000000030.1
+Contig0	FRAEX38873_v2	exon	64847	65279	.	+	.	ID=FRAEX38873_v2_000000030.1.exon2;Parent=FRAEX38873_v2_000000030.1
+Contig0	FRAEX38873_v2	CDS	64878	65279	.	+	0	ID=FRAEX38873_v2_000000030.1.cds1;Parent=FRAEX38873_v2_000000030.1
+Contig0	FRAEX38873_v2	exon	65656	66087	.	+	.	ID=FRAEX38873_v2_000000030.1.exon3;Parent=FRAEX38873_v2_000000030.1
+Contig0	FRAEX38873_v2	CDS	65656	66087	.	+	0	ID=FRAEX38873_v2_000000030.1.cds2;Parent=FRAEX38873_v2_000000030.1
+Contig0	FRAEX38873_v2	exon	67124	67682	.	+	.	ID=FRAEX38873_v2_000000030.1.exon4;Parent=FRAEX38873_v2_000000030.1
+Contig0	FRAEX38873_v2	CDS	67124	67682	.	+	0	ID=FRAEX38873_v2_000000030.1.cds3;Parent=FRAEX38873_v2_000000030.1
+Contig0	FRAEX38873_v2	CDS	68192	68487	.	+	2	ID=FRAEX38873_v2_000000030.1.cds4;Parent=FRAEX38873_v2_000000030.1
+Contig0	FRAEX38873_v2	exon	68192	68825	.	+	.	ID=FRAEX38873_v2_000000030.1.exon5;Parent=FRAEX38873_v2_000000030.1
+Contig0	FRAEX38873_v2	three_prime_UTR	68488	68825	.	+	.	ID=FRAEX38873_v2_000000030.1.3utr1;Parent=FRAEX38873_v2_000000030.1
+Contig0	FRAEX38873_v2	gene	72275	74436	.	+	.	ID=FRAEX38873_v2_000000040;Name=FRAEX38873_v2_000000040;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	72275	74436	.	+	.	ID=FRAEX38873_v2_000000040.1;Parent=FRAEX38873_v2_000000040;Name=FRAEX38873_v2_000000040.1;biotype=protein_coding;AED=0.29
+Contig0	FRAEX38873_v2	five_prime_UTR	72275	73387	.	+	.	ID=FRAEX38873_v2_000000040.1.5utr1;Parent=FRAEX38873_v2_000000040.1
+Contig0	FRAEX38873_v2	exon	72275	74436	.	+	.	ID=FRAEX38873_v2_000000040.1.exon1;Parent=FRAEX38873_v2_000000040.1
+Contig0	FRAEX38873_v2	CDS	73388	74179	.	+	0	ID=FRAEX38873_v2_000000040.1.cds1;Parent=FRAEX38873_v2_000000040.1
+Contig0	FRAEX38873_v2	three_prime_UTR	74180	74436	.	+	.	ID=FRAEX38873_v2_000000040.1.3utr1;Parent=FRAEX38873_v2_000000040.1
+Contig0	FRAEX38873_v2	gene	75752	79300	.	-	.	ID=FRAEX38873_v2_000000050;Name=FRAEX38873_v2_000000050;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	75752	79300	.	-	.	ID=FRAEX38873_v2_000000050.1;Parent=FRAEX38873_v2_000000050;Name=FRAEX38873_v2_000000050.1;biotype=protein_coding;AED=0.20
+Contig0	FRAEX38873_v2	exon	75752	75801	.	-	.	ID=FRAEX38873_v2_000000050.1.exon1;Parent=FRAEX38873_v2_000000050.1
+Contig0	FRAEX38873_v2	CDS	75752	75801	.	-	2	ID=FRAEX38873_v2_000000050.1.cds1;Parent=FRAEX38873_v2_000000050.1
+Contig0	FRAEX38873_v2	exon	75882	75989	.	-	.	ID=FRAEX38873_v2_000000050.1.exon2;Parent=FRAEX38873_v2_000000050.1
+Contig0	FRAEX38873_v2	CDS	75882	75989	.	-	2	ID=FRAEX38873_v2_000000050.1.cds2;Parent=FRAEX38873_v2_000000050.1
+Contig0	FRAEX38873_v2	CDS	78905	78980	.	-	0	ID=FRAEX38873_v2_000000050.1.cds3;Parent=FRAEX38873_v2_000000050.1
+Contig0	FRAEX38873_v2	exon	78905	79300	.	-	.	ID=FRAEX38873_v2_000000050.1.exon3;Parent=FRAEX38873_v2_000000050.1
+Contig0	FRAEX38873_v2	five_prime_UTR	78981	79300	.	-	.	ID=FRAEX38873_v2_000000050.1.5utr1;Parent=FRAEX38873_v2_000000050.1
+Contig0	FRAEX38873_v2	gene	89196	92835	.	-	.	ID=FRAEX38873_v2_000000060;Name=FRAEX38873_v2_000000060;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	89196	92835	.	-	.	ID=FRAEX38873_v2_000000060.1;Parent=FRAEX38873_v2_000000060;Name=FRAEX38873_v2_000000060.1;biotype=protein_coding;AED=0.05
+Contig0	FRAEX38873_v2	three_prime_UTR	89196	89440	.	-	.	ID=FRAEX38873_v2_000000060.1.3utr1;Parent=FRAEX38873_v2_000000060.1
+Contig0	FRAEX38873_v2	exon	89196	89704	.	-	.	ID=FRAEX38873_v2_000000060.1.exon1;Parent=FRAEX38873_v2_000000060.1
+Contig0	FRAEX38873_v2	CDS	89441	89704	.	-	0	ID=FRAEX38873_v2_000000060.1.cds1;Parent=FRAEX38873_v2_000000060.1
+Contig0	FRAEX38873_v2	exon	90998	91063	.	-	.	ID=FRAEX38873_v2_000000060.1.exon2;Parent=FRAEX38873_v2_000000060.1
+Contig0	FRAEX38873_v2	CDS	90998	91063	.	-	0	ID=FRAEX38873_v2_000000060.1.cds2;Parent=FRAEX38873_v2_000000060.1
+Contig0	FRAEX38873_v2	exon	91160	91263	.	-	.	ID=FRAEX38873_v2_000000060.1.exon3;Parent=FRAEX38873_v2_000000060.1
+Contig0	FRAEX38873_v2	CDS	91160	91263	.	-	2	ID=FRAEX38873_v2_000000060.1.cds3;Parent=FRAEX38873_v2_000000060.1
+Contig0	FRAEX38873_v2	exon	91341	91414	.	-	.	ID=FRAEX38873_v2_000000060.1.exon4;Parent=FRAEX38873_v2_000000060.1
+Contig0	FRAEX38873_v2	CDS	91341	91414	.	-	1	ID=FRAEX38873_v2_000000060.1.cds4;Parent=FRAEX38873_v2_000000060.1
+Contig0	FRAEX38873_v2	CDS	92448	92515	.	-	0	ID=FRAEX38873_v2_000000060.1.cds5;Parent=FRAEX38873_v2_000000060.1
+Contig0	FRAEX38873_v2	exon	92448	92835	.	-	.	ID=FRAEX38873_v2_000000060.1.exon5;Parent=FRAEX38873_v2_000000060.1
+Contig0	FRAEX38873_v2	five_prime_UTR	92516	92835	.	-	.	ID=FRAEX38873_v2_000000060.1.5utr1;Parent=FRAEX38873_v2_000000060.1
+Contig0	FRAEX38873_v2	gene	118798	128417	.	+	.	ID=FRAEX38873_v2_000000070;Name=FRAEX38873_v2_000000070;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	118798	128417	.	+	.	ID=FRAEX38873_v2_000000070.1;Parent=FRAEX38873_v2_000000070;Name=FRAEX38873_v2_000000070.1;biotype=protein_coding;AED=0.11
+Contig0	FRAEX38873_v2	five_prime_UTR	118798	118942	.	+	.	ID=FRAEX38873_v2_000000070.1.5utr1;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	exon	118798	119147	.	+	.	ID=FRAEX38873_v2_000000070.1.exon1;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	CDS	118943	119147	.	+	0	ID=FRAEX38873_v2_000000070.1.cds1;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	exon	121518	121632	.	+	.	ID=FRAEX38873_v2_000000070.1.exon2;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	CDS	121518	121632	.	+	2	ID=FRAEX38873_v2_000000070.1.cds2;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	exon	121886	121943	.	+	.	ID=FRAEX38873_v2_000000070.1.exon3;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	CDS	121886	121943	.	+	1	ID=FRAEX38873_v2_000000070.1.cds3;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	exon	122067	122084	.	+	.	ID=FRAEX38873_v2_000000070.1.exon4;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	CDS	122067	122084	.	+	0	ID=FRAEX38873_v2_000000070.1.cds4;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	exon	124103	124364	.	+	.	ID=FRAEX38873_v2_000000070.1.exon5;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	CDS	124103	124364	.	+	0	ID=FRAEX38873_v2_000000070.1.cds5;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	exon	124651	124757	.	+	.	ID=FRAEX38873_v2_000000070.1.exon6;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	CDS	124651	124757	.	+	2	ID=FRAEX38873_v2_000000070.1.cds6;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	exon	124840	124900	.	+	.	ID=FRAEX38873_v2_000000070.1.exon7;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	CDS	124840	124900	.	+	0	ID=FRAEX38873_v2_000000070.1.cds7;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	exon	125828	125906	.	+	.	ID=FRAEX38873_v2_000000070.1.exon8;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	CDS	125828	125906	.	+	2	ID=FRAEX38873_v2_000000070.1.cds8;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	exon	126420	126460	.	+	.	ID=FRAEX38873_v2_000000070.1.exon9;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	CDS	126420	126460	.	+	1	ID=FRAEX38873_v2_000000070.1.cds9;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	exon	127064	127109	.	+	.	ID=FRAEX38873_v2_000000070.1.exon10;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	CDS	127064	127109	.	+	2	ID=FRAEX38873_v2_000000070.1.cds10;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	exon	127267	127361	.	+	.	ID=FRAEX38873_v2_000000070.1.exon11;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	CDS	127267	127361	.	+	1	ID=FRAEX38873_v2_000000070.1.cds11;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	exon	127572	127675	.	+	.	ID=FRAEX38873_v2_000000070.1.exon12;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	CDS	127572	127675	.	+	2	ID=FRAEX38873_v2_000000070.1.cds12;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	exon	127859	127906	.	+	.	ID=FRAEX38873_v2_000000070.1.exon13;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	CDS	127859	127906	.	+	0	ID=FRAEX38873_v2_000000070.1.cds13;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	CDS	128055	128111	.	+	0	ID=FRAEX38873_v2_000000070.1.cds14;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	exon	128055	128417	.	+	.	ID=FRAEX38873_v2_000000070.1.exon14;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	three_prime_UTR	128112	128417	.	+	.	ID=FRAEX38873_v2_000000070.1.3utr1;Parent=FRAEX38873_v2_000000070.1
+Contig0	FRAEX38873_v2	gene	129359	134016	.	-	.	ID=FRAEX38873_v2_000000080;Name=FRAEX38873_v2_000000080;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	129359	134016	.	-	.	ID=FRAEX38873_v2_000000080.1;Parent=FRAEX38873_v2_000000080;Name=FRAEX38873_v2_000000080.1;biotype=protein_coding;AED=0.14
+Contig0	FRAEX38873_v2	three_prime_UTR	129359	129666	.	-	.	ID=FRAEX38873_v2_000000080.1.3utr1;Parent=FRAEX38873_v2_000000080.1
+Contig0	FRAEX38873_v2	exon	129359	129771	.	-	.	ID=FRAEX38873_v2_000000080.1.exon1;Parent=FRAEX38873_v2_000000080.1
+Contig0	FRAEX38873_v2	CDS	129667	129771	.	-	0	ID=FRAEX38873_v2_000000080.1.cds1;Parent=FRAEX38873_v2_000000080.1
+Contig0	FRAEX38873_v2	exon	131117	131191	.	-	.	ID=FRAEX38873_v2_000000080.1.exon2;Parent=FRAEX38873_v2_000000080.1
+Contig0	FRAEX38873_v2	CDS	131117	131191	.	-	0	ID=FRAEX38873_v2_000000080.1.cds2;Parent=FRAEX38873_v2_000000080.1
+Contig0	FRAEX38873_v2	exon	131367	131513	.	-	.	ID=FRAEX38873_v2_000000080.1.exon3;Parent=FRAEX38873_v2_000000080.1
+Contig0	FRAEX38873_v2	CDS	131367	131513	.	-	0	ID=FRAEX38873_v2_000000080.1.cds3;Parent=FRAEX38873_v2_000000080.1
+Contig0	FRAEX38873_v2	exon	131702	131836	.	-	.	ID=FRAEX38873_v2_000000080.1.exon4;Parent=FRAEX38873_v2_000000080.1
+Contig0	FRAEX38873_v2	CDS	131702	131836	.	-	0	ID=FRAEX38873_v2_000000080.1.cds4;Parent=FRAEX38873_v2_000000080.1
+Contig0	FRAEX38873_v2	exon	131927	132055	.	-	.	ID=FRAEX38873_v2_000000080.1.exon5;Parent=FRAEX38873_v2_000000080.1
+Contig0	FRAEX38873_v2	CDS	131927	132055	.	-	0	ID=FRAEX38873_v2_000000080.1.cds5;Parent=FRAEX38873_v2_000000080.1
+Contig0	FRAEX38873_v2	exon	133449	133547	.	-	.	ID=FRAEX38873_v2_000000080.1.exon6;Parent=FRAEX38873_v2_000000080.1
+Contig0	FRAEX38873_v2	CDS	133449	133547	.	-	0	ID=FRAEX38873_v2_000000080.1.cds6;Parent=FRAEX38873_v2_000000080.1
+Contig0	FRAEX38873_v2	CDS	133681	133875	.	-	0	ID=FRAEX38873_v2_000000080.1.cds7;Parent=FRAEX38873_v2_000000080.1
+Contig0	FRAEX38873_v2	exon	133681	134016	.	-	.	ID=FRAEX38873_v2_000000080.1.exon7;Parent=FRAEX38873_v2_000000080.1
+Contig0	FRAEX38873_v2	five_prime_UTR	133876	134016	.	-	.	ID=FRAEX38873_v2_000000080.1.5utr1;Parent=FRAEX38873_v2_000000080.1
+Contig0	FRAEX38873_v2	gene	165045	168925	.	-	.	ID=FRAEX38873_v2_000000090;Name=FRAEX38873_v2_000000090;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	165045	168925	.	-	.	ID=FRAEX38873_v2_000000090.1;Parent=FRAEX38873_v2_000000090;Name=FRAEX38873_v2_000000090.1;biotype=protein_coding;AED=0.11
+Contig0	FRAEX38873_v2	three_prime_UTR	165045	165419	.	-	.	ID=FRAEX38873_v2_000000090.1.3utr1;Parent=FRAEX38873_v2_000000090.1
+Contig0	FRAEX38873_v2	exon	165045	165640	.	-	.	ID=FRAEX38873_v2_000000090.1.exon1;Parent=FRAEX38873_v2_000000090.1
+Contig0	FRAEX38873_v2	CDS	165420	165640	.	-	2	ID=FRAEX38873_v2_000000090.1.cds1;Parent=FRAEX38873_v2_000000090.1
+Contig0	FRAEX38873_v2	CDS	167803	167896	.	-	0	ID=FRAEX38873_v2_000000090.1.cds2;Parent=FRAEX38873_v2_000000090.1
+Contig0	FRAEX38873_v2	exon	167803	167908	.	-	.	ID=FRAEX38873_v2_000000090.1.exon2;Parent=FRAEX38873_v2_000000090.1
+Contig0	FRAEX38873_v2	five_prime_UTR	167897	167908	.	-	.	ID=FRAEX38873_v2_000000090.1.5utr1;Parent=FRAEX38873_v2_000000090.1
+Contig0	FRAEX38873_v2	five_prime_UTR	168842	168925	.	-	.	ID=FRAEX38873_v2_000000090.1.5utr2;Parent=FRAEX38873_v2_000000090.1
+Contig0	FRAEX38873_v2	exon	168842	168925	.	-	.	ID=FRAEX38873_v2_000000090.1.exon3;Parent=FRAEX38873_v2_000000090.1
+Contig0	FRAEX38873_v2	gene	176386	185885	.	-	.	ID=FRAEX38873_v2_000000100;Name=FRAEX38873_v2_000000100;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	176386	184897	.	-	.	ID=FRAEX38873_v2_000000100.1;Parent=FRAEX38873_v2_000000100;Name=FRAEX38873_v2_000000100.1;biotype=protein_coding;AED=0.11
+Contig0	FRAEX38873_v2	three_prime_UTR	176386	176809	.	-	.	ID=FRAEX38873_v2_000000100.1.3utr1;Parent=FRAEX38873_v2_000000100.1
+Contig0	FRAEX38873_v2	exon	176386	177384	.	-	.	ID=FRAEX38873_v2_000000100.1.exon1;Parent=FRAEX38873_v2_000000100.1
+Contig0	FRAEX38873_v2	CDS	176810	177384	.	-	2	ID=FRAEX38873_v2_000000100.1.cds1;Parent=FRAEX38873_v2_000000100.1
+Contig0	FRAEX38873_v2	exon	178546	178950	.	-	.	ID=FRAEX38873_v2_000000100.1.exon2;Parent=FRAEX38873_v2_000000100.1
+Contig0	FRAEX38873_v2	CDS	178546	178950	.	-	2	ID=FRAEX38873_v2_000000100.1.cds2;Parent=FRAEX38873_v2_000000100.1
+Contig0	FRAEX38873_v2	CDS	184536	184536	.	-	0	ID=FRAEX38873_v2_000000100.1.cds3;Parent=FRAEX38873_v2_000000100.1
+Contig0	FRAEX38873_v2	exon	184536	184766	.	-	.	ID=FRAEX38873_v2_000000100.1.exon3;Parent=FRAEX38873_v2_000000100.1
+Contig0	FRAEX38873_v2	five_prime_UTR	184537	184766	.	-	.	ID=FRAEX38873_v2_000000100.1.5utr1;Parent=FRAEX38873_v2_000000100.1
+Contig0	FRAEX38873_v2	five_prime_UTR	184839	184897	.	-	.	ID=FRAEX38873_v2_000000100.1.5utr2;Parent=FRAEX38873_v2_000000100.1
+Contig0	FRAEX38873_v2	exon	184839	184897	.	-	.	ID=FRAEX38873_v2_000000100.1.exon4;Parent=FRAEX38873_v2_000000100.1
+Contig0	FRAEX38873_v2	mRNA	176386	185885	.	-	.	ID=FRAEX38873_v2_000000100.2;Parent=FRAEX38873_v2_000000100;Name=FRAEX38873_v2_000000100.2;biotype=protein_coding;AED=0.08
+Contig0	FRAEX38873_v2	three_prime_UTR	176386	176809	.	-	.	ID=FRAEX38873_v2_000000100.2.3utr1;Parent=FRAEX38873_v2_000000100.2
+Contig0	FRAEX38873_v2	exon	176386	177384	.	-	.	ID=FRAEX38873_v2_000000100.2.exon1;Parent=FRAEX38873_v2_000000100.2
+Contig0	FRAEX38873_v2	CDS	176810	177384	.	-	2	ID=FRAEX38873_v2_000000100.2.cds1;Parent=FRAEX38873_v2_000000100.2
+Contig0	FRAEX38873_v2	exon	178546	178950	.	-	.	ID=FRAEX38873_v2_000000100.2.exon2;Parent=FRAEX38873_v2_000000100.2
+Contig0	FRAEX38873_v2	CDS	178546	178950	.	-	2	ID=FRAEX38873_v2_000000100.2.cds2;Parent=FRAEX38873_v2_000000100.2
+Contig0	FRAEX38873_v2	exon	184536	184766	.	-	.	ID=FRAEX38873_v2_000000100.2.exon3;Parent=FRAEX38873_v2_000000100.2
+Contig0	FRAEX38873_v2	CDS	184536	184766	.	-	2	ID=FRAEX38873_v2_000000100.2.cds3;Parent=FRAEX38873_v2_000000100.2
+Contig0	FRAEX38873_v2	exon	185580	185598	.	-	.	ID=FRAEX38873_v2_000000100.2.exon4;Parent=FRAEX38873_v2_000000100.2
+Contig0	FRAEX38873_v2	CDS	185580	185598	.	-	0	ID=FRAEX38873_v2_000000100.2.cds4;Parent=FRAEX38873_v2_000000100.2
+Contig0	FRAEX38873_v2	CDS	185708	185710	.	-	0	ID=FRAEX38873_v2_000000100.2.cds5;Parent=FRAEX38873_v2_000000100.2
+Contig0	FRAEX38873_v2	exon	185708	185885	.	-	.	ID=FRAEX38873_v2_000000100.2.exon5;Parent=FRAEX38873_v2_000000100.2
+Contig0	FRAEX38873_v2	five_prime_UTR	185711	185885	.	-	.	ID=FRAEX38873_v2_000000100.2.5utr1;Parent=FRAEX38873_v2_000000100.2
+Contig0	FRAEX38873_v2	gene	197856	201412	.	+	.	ID=FRAEX38873_v2_000000110;Name=FRAEX38873_v2_000000110;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	197856	201412	.	+	.	ID=FRAEX38873_v2_000000110.1;Parent=FRAEX38873_v2_000000110;Name=FRAEX38873_v2_000000110.1;biotype=protein_coding;AED=0.25
+Contig0	FRAEX38873_v2	five_prime_UTR	197856	198080	.	+	.	ID=FRAEX38873_v2_000000110.1.5utr1;Parent=FRAEX38873_v2_000000110.1
+Contig0	FRAEX38873_v2	exon	197856	198080	.	+	.	ID=FRAEX38873_v2_000000110.1.exon1;Parent=FRAEX38873_v2_000000110.1
+Contig0	FRAEX38873_v2	five_prime_UTR	200136	200234	.	+	.	ID=FRAEX38873_v2_000000110.1.5utr2;Parent=FRAEX38873_v2_000000110.1
+Contig0	FRAEX38873_v2	exon	200136	200297	.	+	.	ID=FRAEX38873_v2_000000110.1.exon2;Parent=FRAEX38873_v2_000000110.1
+Contig0	FRAEX38873_v2	CDS	200235	200297	.	+	0	ID=FRAEX38873_v2_000000110.1.cds1;Parent=FRAEX38873_v2_000000110.1
+Contig0	FRAEX38873_v2	CDS	200402	201241	.	+	0	ID=FRAEX38873_v2_000000110.1.cds2;Parent=FRAEX38873_v2_000000110.1
+Contig0	FRAEX38873_v2	exon	200402	201412	.	+	.	ID=FRAEX38873_v2_000000110.1.exon3;Parent=FRAEX38873_v2_000000110.1
+Contig0	FRAEX38873_v2	three_prime_UTR	201242	201412	.	+	.	ID=FRAEX38873_v2_000000110.1.3utr1;Parent=FRAEX38873_v2_000000110.1
+Contig0	FRAEX38873_v2	mRNA	197944	201412	.	+	.	ID=FRAEX38873_v2_000000110.2;Parent=FRAEX38873_v2_000000110;Name=FRAEX38873_v2_000000110.2;biotype=protein_coding;AED=0.22
+Contig0	FRAEX38873_v2	five_prime_UTR	197944	198080	.	+	.	ID=FRAEX38873_v2_000000110.2.5utr1;Parent=FRAEX38873_v2_000000110.2
+Contig0	FRAEX38873_v2	exon	197944	198080	.	+	.	ID=FRAEX38873_v2_000000110.2.exon1;Parent=FRAEX38873_v2_000000110.2
+Contig0	FRAEX38873_v2	five_prime_UTR	198245	198313	.	+	.	ID=FRAEX38873_v2_000000110.2.5utr2;Parent=FRAEX38873_v2_000000110.2
+Contig0	FRAEX38873_v2	exon	198245	198313	.	+	.	ID=FRAEX38873_v2_000000110.2.exon2;Parent=FRAEX38873_v2_000000110.2
+Contig0	FRAEX38873_v2	five_prime_UTR	200136	200234	.	+	.	ID=FRAEX38873_v2_000000110.2.5utr3;Parent=FRAEX38873_v2_000000110.2
+Contig0	FRAEX38873_v2	exon	200136	200297	.	+	.	ID=FRAEX38873_v2_000000110.2.exon3;Parent=FRAEX38873_v2_000000110.2
+Contig0	FRAEX38873_v2	CDS	200235	200297	.	+	0	ID=FRAEX38873_v2_000000110.2.cds1;Parent=FRAEX38873_v2_000000110.2
+Contig0	FRAEX38873_v2	CDS	200402	201241	.	+	0	ID=FRAEX38873_v2_000000110.2.cds2;Parent=FRAEX38873_v2_000000110.2
+Contig0	FRAEX38873_v2	exon	200402	201412	.	+	.	ID=FRAEX38873_v2_000000110.2.exon4;Parent=FRAEX38873_v2_000000110.2
+Contig0	FRAEX38873_v2	three_prime_UTR	201242	201412	.	+	.	ID=FRAEX38873_v2_000000110.2.3utr1;Parent=FRAEX38873_v2_000000110.2
+Contig0	FRAEX38873_v2	gene	201866	204067	.	-	.	ID=FRAEX38873_v2_000000120;Name=FRAEX38873_v2_000000120;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	201866	204067	.	-	.	ID=FRAEX38873_v2_000000120.1;Parent=FRAEX38873_v2_000000120;Name=FRAEX38873_v2_000000120.1;biotype=protein_coding;AED=0.10
+Contig0	FRAEX38873_v2	three_prime_UTR	201866	202177	.	-	.	ID=FRAEX38873_v2_000000120.1.3utr1;Parent=FRAEX38873_v2_000000120.1
+Contig0	FRAEX38873_v2	exon	201866	204067	.	-	.	ID=FRAEX38873_v2_000000120.1.exon1;Parent=FRAEX38873_v2_000000120.1
+Contig0	FRAEX38873_v2	CDS	202178	203926	.	-	0	ID=FRAEX38873_v2_000000120.1.cds1;Parent=FRAEX38873_v2_000000120.1
+Contig0	FRAEX38873_v2	five_prime_UTR	203927	204067	.	-	.	ID=FRAEX38873_v2_000000120.1.5utr1;Parent=FRAEX38873_v2_000000120.1
+Contig0	FRAEX38873_v2	gene	210661	211405	.	-	.	ID=FRAEX38873_v2_000000130;Name=FRAEX38873_v2_000000130;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	210661	211405	.	-	.	ID=FRAEX38873_v2_000000130.1;Parent=FRAEX38873_v2_000000130;Name=FRAEX38873_v2_000000130.1;biotype=protein_coding;AED=0.28
+Contig0	FRAEX38873_v2	three_prime_UTR	210661	211000	.	-	.	ID=FRAEX38873_v2_000000130.1.3utr1;Parent=FRAEX38873_v2_000000130.1
+Contig0	FRAEX38873_v2	exon	210661	211405	.	-	.	ID=FRAEX38873_v2_000000130.1.exon1;Parent=FRAEX38873_v2_000000130.1
+Contig0	FRAEX38873_v2	CDS	211001	211321	.	-	0	ID=FRAEX38873_v2_000000130.1.cds1;Parent=FRAEX38873_v2_000000130.1
+Contig0	FRAEX38873_v2	five_prime_UTR	211322	211405	.	-	.	ID=FRAEX38873_v2_000000130.1.5utr1;Parent=FRAEX38873_v2_000000130.1
+Contig0	FRAEX38873_v2	gene	228263	228775	.	-	.	ID=FRAEX38873_v2_000000140;Name=FRAEX38873_v2_000000140;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	228263	228775	.	-	.	ID=FRAEX38873_v2_000000140.1;Parent=FRAEX38873_v2_000000140;Name=FRAEX38873_v2_000000140.1;biotype=protein_coding;AED=0.70
+Contig0	FRAEX38873_v2	three_prime_UTR	228263	228401	.	-	.	ID=FRAEX38873_v2_000000140.1.3utr1;Parent=FRAEX38873_v2_000000140.1
+Contig0	FRAEX38873_v2	exon	228263	228775	.	-	.	ID=FRAEX38873_v2_000000140.1.exon1;Parent=FRAEX38873_v2_000000140.1
+Contig0	FRAEX38873_v2	CDS	228402	228692	.	-	0	ID=FRAEX38873_v2_000000140.1.cds1;Parent=FRAEX38873_v2_000000140.1
+Contig0	FRAEX38873_v2	five_prime_UTR	228693	228775	.	-	.	ID=FRAEX38873_v2_000000140.1.5utr1;Parent=FRAEX38873_v2_000000140.1
+Contig0	FRAEX38873_v2	gene	230835	231128	.	-	.	ID=FRAEX38873_v2_000000150;Name=FRAEX38873_v2_000000150;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	230835	231128	.	-	.	ID=FRAEX38873_v2_000000150.1;Parent=FRAEX38873_v2_000000150;Name=FRAEX38873_v2_000000150.1;biotype=protein_coding;AED=0.48
+Contig0	FRAEX38873_v2	exon	230835	231128	.	-	.	ID=FRAEX38873_v2_000000150.1.exon1;Parent=FRAEX38873_v2_000000150.1
+Contig0	FRAEX38873_v2	CDS	230835	231128	.	-	0	ID=FRAEX38873_v2_000000150.1.cds1;Parent=FRAEX38873_v2_000000150.1
+Contig0	FRAEX38873_v2	gene	235265	235558	.	-	.	ID=FRAEX38873_v2_000000160;Name=FRAEX38873_v2_000000160;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	235265	235558	.	-	.	ID=FRAEX38873_v2_000000160.1;Parent=FRAEX38873_v2_000000160;Name=FRAEX38873_v2_000000160.1;biotype=protein_coding;AED=0.48
+Contig0	FRAEX38873_v2	exon	235265	235558	.	-	.	ID=FRAEX38873_v2_000000160.1.exon1;Parent=FRAEX38873_v2_000000160.1
+Contig0	FRAEX38873_v2	CDS	235265	235558	.	-	0	ID=FRAEX38873_v2_000000160.1.cds1;Parent=FRAEX38873_v2_000000160.1
+Contig0	FRAEX38873_v2	gene	248105	248755	.	-	.	ID=FRAEX38873_v2_000000170;Name=FRAEX38873_v2_000000170;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	248105	248755	.	-	.	ID=FRAEX38873_v2_000000170.1;Parent=FRAEX38873_v2_000000170;Name=FRAEX38873_v2_000000170.1;biotype=protein_coding;AED=0.75
+Contig0	FRAEX38873_v2	three_prime_UTR	248105	248368	.	-	.	ID=FRAEX38873_v2_000000170.1.3utr1;Parent=FRAEX38873_v2_000000170.1
+Contig0	FRAEX38873_v2	exon	248105	248755	.	-	.	ID=FRAEX38873_v2_000000170.1.exon1;Parent=FRAEX38873_v2_000000170.1
+Contig0	FRAEX38873_v2	CDS	248369	248662	.	-	0	ID=FRAEX38873_v2_000000170.1.cds1;Parent=FRAEX38873_v2_000000170.1
+Contig0	FRAEX38873_v2	five_prime_UTR	248663	248755	.	-	.	ID=FRAEX38873_v2_000000170.1.5utr1;Parent=FRAEX38873_v2_000000170.1
+Contig0	FRAEX38873_v2	gene	253226	255815	.	-	.	ID=FRAEX38873_v2_000000180;Name=FRAEX38873_v2_000000180;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	253226	255815	.	-	.	ID=FRAEX38873_v2_000000180.1;Parent=FRAEX38873_v2_000000180;Name=FRAEX38873_v2_000000180.1;biotype=protein_coding;AED=0.57
+Contig0	FRAEX38873_v2	three_prime_UTR	253226	253381	.	-	.	ID=FRAEX38873_v2_000000180.1.3utr1;Parent=FRAEX38873_v2_000000180.1
+Contig0	FRAEX38873_v2	exon	253226	253719	.	-	.	ID=FRAEX38873_v2_000000180.1.exon1;Parent=FRAEX38873_v2_000000180.1
+Contig0	FRAEX38873_v2	CDS	253382	253719	.	-	2	ID=FRAEX38873_v2_000000180.1.cds1;Parent=FRAEX38873_v2_000000180.1
+Contig0	FRAEX38873_v2	exon	254174	254225	.	-	.	ID=FRAEX38873_v2_000000180.1.exon2;Parent=FRAEX38873_v2_000000180.1
+Contig0	FRAEX38873_v2	CDS	254174	254225	.	-	0	ID=FRAEX38873_v2_000000180.1.cds2;Parent=FRAEX38873_v2_000000180.1
+Contig0	FRAEX38873_v2	CDS	255429	255656	.	-	0	ID=FRAEX38873_v2_000000180.1.cds3;Parent=FRAEX38873_v2_000000180.1
+Contig0	FRAEX38873_v2	exon	255429	255815	.	-	.	ID=FRAEX38873_v2_000000180.1.exon3;Parent=FRAEX38873_v2_000000180.1
+Contig0	FRAEX38873_v2	five_prime_UTR	255657	255815	.	-	.	ID=FRAEX38873_v2_000000180.1.5utr1;Parent=FRAEX38873_v2_000000180.1
+Contig0	FRAEX38873_v2	gene	261216	262013	.	+	.	ID=FRAEX38873_v2_000000190;Name=FRAEX38873_v2_000000190;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	261216	262013	.	+	.	ID=FRAEX38873_v2_000000190.1;Parent=FRAEX38873_v2_000000190;Name=FRAEX38873_v2_000000190.1;biotype=protein_coding;AED=0.20
+Contig0	FRAEX38873_v2	five_prime_UTR	261216	261298	.	+	.	ID=FRAEX38873_v2_000000190.1.5utr1;Parent=FRAEX38873_v2_000000190.1
+Contig0	FRAEX38873_v2	exon	261216	261647	.	+	.	ID=FRAEX38873_v2_000000190.1.exon1;Parent=FRAEX38873_v2_000000190.1
+Contig0	FRAEX38873_v2	CDS	261299	261601	.	+	0	ID=FRAEX38873_v2_000000190.1.cds1;Parent=FRAEX38873_v2_000000190.1
+Contig0	FRAEX38873_v2	three_prime_UTR	261602	261647	.	+	.	ID=FRAEX38873_v2_000000190.1.3utr1;Parent=FRAEX38873_v2_000000190.1
+Contig0	FRAEX38873_v2	exon	261953	262013	.	+	.	ID=FRAEX38873_v2_000000190.1.exon2;Parent=FRAEX38873_v2_000000190.1
+Contig0	FRAEX38873_v2	three_prime_UTR	261953	262013	.	+	.	ID=FRAEX38873_v2_000000190.1.3utr2;Parent=FRAEX38873_v2_000000190.1
+Contig0	FRAEX38873_v2	gene	263066	263703	.	+	.	ID=FRAEX38873_v2_000000200;Name=FRAEX38873_v2_000000200;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	263066	263703	.	+	.	ID=FRAEX38873_v2_000000200.1;Parent=FRAEX38873_v2_000000200;Name=FRAEX38873_v2_000000200.1;biotype=protein_coding;AED=0.32
+Contig0	FRAEX38873_v2	five_prime_UTR	263066	263238	.	+	.	ID=FRAEX38873_v2_000000200.1.5utr1;Parent=FRAEX38873_v2_000000200.1
+Contig0	FRAEX38873_v2	exon	263066	263703	.	+	.	ID=FRAEX38873_v2_000000200.1.exon1;Parent=FRAEX38873_v2_000000200.1
+Contig0	FRAEX38873_v2	CDS	263239	263502	.	+	0	ID=FRAEX38873_v2_000000200.1.cds1;Parent=FRAEX38873_v2_000000200.1
+Contig0	FRAEX38873_v2	three_prime_UTR	263503	263703	.	+	.	ID=FRAEX38873_v2_000000200.1.3utr1;Parent=FRAEX38873_v2_000000200.1
+Contig0	FRAEX38873_v2	gene	271640	273575	.	-	.	ID=FRAEX38873_v2_000000210;Name=FRAEX38873_v2_000000210;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	271640	273575	.	-	.	ID=FRAEX38873_v2_000000210.1;Parent=FRAEX38873_v2_000000210;Name=FRAEX38873_v2_000000210.1;biotype=protein_coding;AED=0.13
+Contig0	FRAEX38873_v2	three_prime_UTR	271640	271832	.	-	.	ID=FRAEX38873_v2_000000210.1.3utr1;Parent=FRAEX38873_v2_000000210.1
+Contig0	FRAEX38873_v2	exon	271640	272636	.	-	.	ID=FRAEX38873_v2_000000210.1.exon1;Parent=FRAEX38873_v2_000000210.1
+Contig0	FRAEX38873_v2	CDS	271833	272636	.	-	0	ID=FRAEX38873_v2_000000210.1.cds1;Parent=FRAEX38873_v2_000000210.1
+Contig0	FRAEX38873_v2	exon	272794	272887	.	-	.	ID=FRAEX38873_v2_000000210.1.exon2;Parent=FRAEX38873_v2_000000210.1
+Contig0	FRAEX38873_v2	CDS	272794	272887	.	-	1	ID=FRAEX38873_v2_000000210.1.cds2;Parent=FRAEX38873_v2_000000210.1
+Contig0	FRAEX38873_v2	exon	272999	273177	.	-	.	ID=FRAEX38873_v2_000000210.1.exon3;Parent=FRAEX38873_v2_000000210.1
+Contig0	FRAEX38873_v2	CDS	272999	273177	.	-	0	ID=FRAEX38873_v2_000000210.1.cds3;Parent=FRAEX38873_v2_000000210.1
+Contig0	FRAEX38873_v2	CDS	273487	273543	.	-	0	ID=FRAEX38873_v2_000000210.1.cds4;Parent=FRAEX38873_v2_000000210.1
+Contig0	FRAEX38873_v2	exon	273487	273575	.	-	.	ID=FRAEX38873_v2_000000210.1.exon4;Parent=FRAEX38873_v2_000000210.1
+Contig0	FRAEX38873_v2	five_prime_UTR	273544	273575	.	-	.	ID=FRAEX38873_v2_000000210.1.5utr1;Parent=FRAEX38873_v2_000000210.1
+Contig0	FRAEX38873_v2	gene	279346	283969	.	+	.	ID=FRAEX38873_v2_000000220;Name=FRAEX38873_v2_000000220;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	279346	283969	.	+	.	ID=FRAEX38873_v2_000000220.1;Parent=FRAEX38873_v2_000000220;Name=FRAEX38873_v2_000000220.1;biotype=protein_coding;AED=0.55
+Contig0	FRAEX38873_v2	five_prime_UTR	279346	279523	.	+	.	ID=FRAEX38873_v2_000000220.1.5utr1;Parent=FRAEX38873_v2_000000220.1
+Contig0	FRAEX38873_v2	exon	279346	279755	.	+	.	ID=FRAEX38873_v2_000000220.1.exon1;Parent=FRAEX38873_v2_000000220.1
+Contig0	FRAEX38873_v2	CDS	279524	279755	.	+	0	ID=FRAEX38873_v2_000000220.1.cds1;Parent=FRAEX38873_v2_000000220.1
+Contig0	FRAEX38873_v2	exon	279908	279999	.	+	.	ID=FRAEX38873_v2_000000220.1.exon2;Parent=FRAEX38873_v2_000000220.1
+Contig0	FRAEX38873_v2	CDS	279908	279999	.	+	2	ID=FRAEX38873_v2_000000220.1.cds2;Parent=FRAEX38873_v2_000000220.1
+Contig0	FRAEX38873_v2	exon	282975	283427	.	+	.	ID=FRAEX38873_v2_000000220.1.exon3;Parent=FRAEX38873_v2_000000220.1
+Contig0	FRAEX38873_v2	CDS	282975	283427	.	+	0	ID=FRAEX38873_v2_000000220.1.cds3;Parent=FRAEX38873_v2_000000220.1
+Contig0	FRAEX38873_v2	exon	283909	283969	.	+	.	ID=FRAEX38873_v2_000000220.1.exon4;Parent=FRAEX38873_v2_000000220.1
+Contig0	FRAEX38873_v2	three_prime_UTR	283909	283969	.	+	.	ID=FRAEX38873_v2_000000220.1.3utr1;Parent=FRAEX38873_v2_000000220.1
+Contig0	FRAEX38873_v2	gene	284046	285215	.	+	.	ID=FRAEX38873_v2_000000230;Name=FRAEX38873_v2_000000230;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	284046	285215	.	+	.	ID=FRAEX38873_v2_000000230.1;Parent=FRAEX38873_v2_000000230;Name=FRAEX38873_v2_000000230.1;biotype=protein_coding;AED=0.39
+Contig0	FRAEX38873_v2	five_prime_UTR	284046	284157	.	+	.	ID=FRAEX38873_v2_000000230.1.5utr1;Parent=FRAEX38873_v2_000000230.1
+Contig0	FRAEX38873_v2	exon	284046	284461	.	+	.	ID=FRAEX38873_v2_000000230.1.exon1;Parent=FRAEX38873_v2_000000230.1
+Contig0	FRAEX38873_v2	CDS	284158	284461	.	+	0	ID=FRAEX38873_v2_000000230.1.cds1;Parent=FRAEX38873_v2_000000230.1
+Contig0	FRAEX38873_v2	CDS	284849	285144	.	+	2	ID=FRAEX38873_v2_000000230.1.cds2;Parent=FRAEX38873_v2_000000230.1
+Contig0	FRAEX38873_v2	exon	284849	285215	.	+	.	ID=FRAEX38873_v2_000000230.1.exon2;Parent=FRAEX38873_v2_000000230.1
+Contig0	FRAEX38873_v2	three_prime_UTR	285145	285215	.	+	.	ID=FRAEX38873_v2_000000230.1.3utr1;Parent=FRAEX38873_v2_000000230.1
+Contig0	FRAEX38873_v2	gene	289856	300640	.	+	.	ID=FRAEX38873_v2_000000240;Name=FRAEX38873_v2_000000240;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	289856	300640	.	+	.	ID=FRAEX38873_v2_000000240.1;Parent=FRAEX38873_v2_000000240;Name=FRAEX38873_v2_000000240.1;biotype=protein_coding;AED=0.02
+Contig0	FRAEX38873_v2	five_prime_UTR	289856	289891	.	+	.	ID=FRAEX38873_v2_000000240.1.5utr1;Parent=FRAEX38873_v2_000000240.1
+Contig0	FRAEX38873_v2	exon	289856	290154	.	+	.	ID=FRAEX38873_v2_000000240.1.exon1;Parent=FRAEX38873_v2_000000240.1
+Contig0	FRAEX38873_v2	CDS	289892	290154	.	+	0	ID=FRAEX38873_v2_000000240.1.cds1;Parent=FRAEX38873_v2_000000240.1
+Contig0	FRAEX38873_v2	exon	290751	292395	.	+	.	ID=FRAEX38873_v2_000000240.1.exon2;Parent=FRAEX38873_v2_000000240.1
+Contig0	FRAEX38873_v2	CDS	290751	292395	.	+	1	ID=FRAEX38873_v2_000000240.1.cds2;Parent=FRAEX38873_v2_000000240.1
+Contig0	FRAEX38873_v2	exon	292887	294320	.	+	.	ID=FRAEX38873_v2_000000240.1.exon3;Parent=FRAEX38873_v2_000000240.1
+Contig0	FRAEX38873_v2	CDS	292887	294320	.	+	0	ID=FRAEX38873_v2_000000240.1.cds3;Parent=FRAEX38873_v2_000000240.1
+Contig0	FRAEX38873_v2	exon	295204	295520	.	+	.	ID=FRAEX38873_v2_000000240.1.exon4;Parent=FRAEX38873_v2_000000240.1
+Contig0	FRAEX38873_v2	CDS	295204	295520	.	+	0	ID=FRAEX38873_v2_000000240.1.cds4;Parent=FRAEX38873_v2_000000240.1
+Contig0	FRAEX38873_v2	exon	296465	298200	.	+	.	ID=FRAEX38873_v2_000000240.1.exon5;Parent=FRAEX38873_v2_000000240.1
+Contig0	FRAEX38873_v2	CDS	296465	298200	.	+	1	ID=FRAEX38873_v2_000000240.1.cds5;Parent=FRAEX38873_v2_000000240.1
+Contig0	FRAEX38873_v2	exon	298835	298980	.	+	.	ID=FRAEX38873_v2_000000240.1.exon6;Parent=FRAEX38873_v2_000000240.1
+Contig0	FRAEX38873_v2	CDS	298835	298980	.	+	2	ID=FRAEX38873_v2_000000240.1.cds6;Parent=FRAEX38873_v2_000000240.1
+Contig0	FRAEX38873_v2	exon	299052	299203	.	+	.	ID=FRAEX38873_v2_000000240.1.exon7;Parent=FRAEX38873_v2_000000240.1
+Contig0	FRAEX38873_v2	CDS	299052	299203	.	+	0	ID=FRAEX38873_v2_000000240.1.cds7;Parent=FRAEX38873_v2_000000240.1
+Contig0	FRAEX38873_v2	exon	299402	299564	.	+	.	ID=FRAEX38873_v2_000000240.1.exon8;Parent=FRAEX38873_v2_000000240.1
+Contig0	FRAEX38873_v2	CDS	299402	299564	.	+	1	ID=FRAEX38873_v2_000000240.1.cds8;Parent=FRAEX38873_v2_000000240.1
+Contig0	FRAEX38873_v2	exon	299777	299880	.	+	.	ID=FRAEX38873_v2_000000240.1.exon9;Parent=FRAEX38873_v2_000000240.1
+Contig0	FRAEX38873_v2	CDS	299777	299880	.	+	0	ID=FRAEX38873_v2_000000240.1.cds9;Parent=FRAEX38873_v2_000000240.1
+Contig0	FRAEX38873_v2	exon	300001	300092	.	+	.	ID=FRAEX38873_v2_000000240.1.exon10;Parent=FRAEX38873_v2_000000240.1
+Contig0	FRAEX38873_v2	CDS	300001	300092	.	+	1	ID=FRAEX38873_v2_000000240.1.cds10;Parent=FRAEX38873_v2_000000240.1
+Contig0	FRAEX38873_v2	CDS	300207	300283	.	+	2	ID=FRAEX38873_v2_000000240.1.cds11;Parent=FRAEX38873_v2_000000240.1
+Contig0	FRAEX38873_v2	exon	300207	300640	.	+	.	ID=FRAEX38873_v2_000000240.1.exon11;Parent=FRAEX38873_v2_000000240.1
+Contig0	FRAEX38873_v2	three_prime_UTR	300284	300640	.	+	.	ID=FRAEX38873_v2_000000240.1.3utr1;Parent=FRAEX38873_v2_000000240.1
+Contig0	FRAEX38873_v2	gene	306586	309862	.	+	.	ID=FRAEX38873_v2_000000250;Name=FRAEX38873_v2_000000250;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	306586	309800	.	+	.	ID=FRAEX38873_v2_000000250.1;Parent=FRAEX38873_v2_000000250;Name=FRAEX38873_v2_000000250.1;biotype=protein_coding;AED=0.27
+Contig0	FRAEX38873_v2	five_prime_UTR	306586	306613	.	+	.	ID=FRAEX38873_v2_000000250.1.5utr1;Parent=FRAEX38873_v2_000000250.1
+Contig0	FRAEX38873_v2	exon	306586	306754	.	+	.	ID=FRAEX38873_v2_000000250.1.exon1;Parent=FRAEX38873_v2_000000250.1
+Contig0	FRAEX38873_v2	CDS	306614	306754	.	+	0	ID=FRAEX38873_v2_000000250.1.cds1;Parent=FRAEX38873_v2_000000250.1
+Contig0	FRAEX38873_v2	exon	307399	307434	.	+	.	ID=FRAEX38873_v2_000000250.1.exon2;Parent=FRAEX38873_v2_000000250.1
+Contig0	FRAEX38873_v2	CDS	307399	307434	.	+	0	ID=FRAEX38873_v2_000000250.1.cds2;Parent=FRAEX38873_v2_000000250.1
+Contig0	FRAEX38873_v2	exon	307540	307590	.	+	.	ID=FRAEX38873_v2_000000250.1.exon3;Parent=FRAEX38873_v2_000000250.1
+Contig0	FRAEX38873_v2	CDS	307540	307590	.	+	0	ID=FRAEX38873_v2_000000250.1.cds3;Parent=FRAEX38873_v2_000000250.1
+Contig0	FRAEX38873_v2	exon	307859	307947	.	+	.	ID=FRAEX38873_v2_000000250.1.exon4;Parent=FRAEX38873_v2_000000250.1
+Contig0	FRAEX38873_v2	CDS	307859	307947	.	+	0	ID=FRAEX38873_v2_000000250.1.cds4;Parent=FRAEX38873_v2_000000250.1
+Contig0	FRAEX38873_v2	exon	308179	308254	.	+	.	ID=FRAEX38873_v2_000000250.1.exon5;Parent=FRAEX38873_v2_000000250.1
+Contig0	FRAEX38873_v2	CDS	308179	308254	.	+	1	ID=FRAEX38873_v2_000000250.1.cds5;Parent=FRAEX38873_v2_000000250.1
+Contig0	FRAEX38873_v2	exon	308354	308557	.	+	.	ID=FRAEX38873_v2_000000250.1.exon6;Parent=FRAEX38873_v2_000000250.1
+Contig0	FRAEX38873_v2	CDS	308354	308557	.	+	0	ID=FRAEX38873_v2_000000250.1.cds6;Parent=FRAEX38873_v2_000000250.1
+Contig0	FRAEX38873_v2	exon	309244	309315	.	+	.	ID=FRAEX38873_v2_000000250.1.exon7;Parent=FRAEX38873_v2_000000250.1
+Contig0	FRAEX38873_v2	CDS	309244	309315	.	+	0	ID=FRAEX38873_v2_000000250.1.cds7;Parent=FRAEX38873_v2_000000250.1
+Contig0	FRAEX38873_v2	CDS	309508	309558	.	+	0	ID=FRAEX38873_v2_000000250.1.cds8;Parent=FRAEX38873_v2_000000250.1
+Contig0	FRAEX38873_v2	exon	309508	309800	.	+	.	ID=FRAEX38873_v2_000000250.1.exon8;Parent=FRAEX38873_v2_000000250.1
+Contig0	FRAEX38873_v2	three_prime_UTR	309559	309800	.	+	.	ID=FRAEX38873_v2_000000250.1.3utr1;Parent=FRAEX38873_v2_000000250.1
+Contig0	FRAEX38873_v2	mRNA	307307	309862	.	+	.	ID=FRAEX38873_v2_000000250.2;Parent=FRAEX38873_v2_000000250;Name=FRAEX38873_v2_000000250.2;biotype=protein_coding;AED=0.19
+Contig0	FRAEX38873_v2	five_prime_UTR	307307	307434	.	+	.	ID=FRAEX38873_v2_000000250.2.5utr1;Parent=FRAEX38873_v2_000000250.2
+Contig0	FRAEX38873_v2	exon	307307	307434	.	+	.	ID=FRAEX38873_v2_000000250.2.exon1;Parent=FRAEX38873_v2_000000250.2
+Contig0	FRAEX38873_v2	five_prime_UTR	307540	307584	.	+	.	ID=FRAEX38873_v2_000000250.2.5utr2;Parent=FRAEX38873_v2_000000250.2
+Contig0	FRAEX38873_v2	exon	307540	307590	.	+	.	ID=FRAEX38873_v2_000000250.2.exon2;Parent=FRAEX38873_v2_000000250.2
+Contig0	FRAEX38873_v2	CDS	307585	307590	.	+	0	ID=FRAEX38873_v2_000000250.2.cds1;Parent=FRAEX38873_v2_000000250.2
+Contig0	FRAEX38873_v2	exon	307859	307947	.	+	.	ID=FRAEX38873_v2_000000250.2.exon3;Parent=FRAEX38873_v2_000000250.2
+Contig0	FRAEX38873_v2	CDS	307859	307947	.	+	0	ID=FRAEX38873_v2_000000250.2.cds2;Parent=FRAEX38873_v2_000000250.2
+Contig0	FRAEX38873_v2	exon	308179	308254	.	+	.	ID=FRAEX38873_v2_000000250.2.exon4;Parent=FRAEX38873_v2_000000250.2
+Contig0	FRAEX38873_v2	CDS	308179	308254	.	+	1	ID=FRAEX38873_v2_000000250.2.cds3;Parent=FRAEX38873_v2_000000250.2
+Contig0	FRAEX38873_v2	exon	308354	308557	.	+	.	ID=FRAEX38873_v2_000000250.2.exon5;Parent=FRAEX38873_v2_000000250.2
+Contig0	FRAEX38873_v2	CDS	308354	308557	.	+	0	ID=FRAEX38873_v2_000000250.2.cds4;Parent=FRAEX38873_v2_000000250.2
+Contig0	FRAEX38873_v2	exon	309244	309315	.	+	.	ID=FRAEX38873_v2_000000250.2.exon6;Parent=FRAEX38873_v2_000000250.2
+Contig0	FRAEX38873_v2	CDS	309244	309315	.	+	0	ID=FRAEX38873_v2_000000250.2.cds5;Parent=FRAEX38873_v2_000000250.2
+Contig0	FRAEX38873_v2	CDS	309508	309558	.	+	0	ID=FRAEX38873_v2_000000250.2.cds6;Parent=FRAEX38873_v2_000000250.2
+Contig0	FRAEX38873_v2	exon	309508	309862	.	+	.	ID=FRAEX38873_v2_000000250.2.exon7;Parent=FRAEX38873_v2_000000250.2
+Contig0	FRAEX38873_v2	three_prime_UTR	309559	309862	.	+	.	ID=FRAEX38873_v2_000000250.2.3utr1;Parent=FRAEX38873_v2_000000250.2
+Contig0	FRAEX38873_v2	gene	313406	317128	.	+	.	ID=FRAEX38873_v2_000000260;Name=FRAEX38873_v2_000000260;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	313406	317128	.	+	.	ID=FRAEX38873_v2_000000260.1;Parent=FRAEX38873_v2_000000260;Name=FRAEX38873_v2_000000260.1;biotype=protein_coding;AED=0.45
+Contig0	FRAEX38873_v2	five_prime_UTR	313406	313509	.	+	.	ID=FRAEX38873_v2_000000260.1.5utr1;Parent=FRAEX38873_v2_000000260.1
+Contig0	FRAEX38873_v2	exon	313406	313675	.	+	.	ID=FRAEX38873_v2_000000260.1.exon1;Parent=FRAEX38873_v2_000000260.1
+Contig0	FRAEX38873_v2	CDS	313510	313675	.	+	0	ID=FRAEX38873_v2_000000260.1.cds1;Parent=FRAEX38873_v2_000000260.1
+Contig0	FRAEX38873_v2	CDS	316630	316805	.	+	2	ID=FRAEX38873_v2_000000260.1.cds2;Parent=FRAEX38873_v2_000000260.1
+Contig0	FRAEX38873_v2	exon	316630	317128	.	+	.	ID=FRAEX38873_v2_000000260.1.exon2;Parent=FRAEX38873_v2_000000260.1
+Contig0	FRAEX38873_v2	three_prime_UTR	316806	317128	.	+	.	ID=FRAEX38873_v2_000000260.1.3utr1;Parent=FRAEX38873_v2_000000260.1
+Contig0	FRAEX38873_v2	gene	325103	327250	.	+	.	ID=FRAEX38873_v2_000000270;Name=FRAEX38873_v2_000000270;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	325103	327250	.	+	.	ID=FRAEX38873_v2_000000270.1;Parent=FRAEX38873_v2_000000270;Name=FRAEX38873_v2_000000270.1;biotype=protein_coding;AED=0.00
+Contig0	FRAEX38873_v2	five_prime_UTR	325103	325176	.	+	.	ID=FRAEX38873_v2_000000270.1.5utr1;Parent=FRAEX38873_v2_000000270.1
+Contig0	FRAEX38873_v2	exon	325103	325330	.	+	.	ID=FRAEX38873_v2_000000270.1.exon1;Parent=FRAEX38873_v2_000000270.1
+Contig0	FRAEX38873_v2	CDS	325177	325330	.	+	0	ID=FRAEX38873_v2_000000270.1.cds1;Parent=FRAEX38873_v2_000000270.1
+Contig0	FRAEX38873_v2	CDS	325782	327013	.	+	2	ID=FRAEX38873_v2_000000270.1.cds2;Parent=FRAEX38873_v2_000000270.1
+Contig0	FRAEX38873_v2	exon	325782	327250	.	+	.	ID=FRAEX38873_v2_000000270.1.exon2;Parent=FRAEX38873_v2_000000270.1
+Contig0	FRAEX38873_v2	three_prime_UTR	327014	327250	.	+	.	ID=FRAEX38873_v2_000000270.1.3utr1;Parent=FRAEX38873_v2_000000270.1
+Contig0	FRAEX38873_v2	gene	336569	343134	.	+	.	ID=FRAEX38873_v2_000000280;Name=FRAEX38873_v2_000000280;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	336569	343134	.	+	.	ID=FRAEX38873_v2_000000280.1;Parent=FRAEX38873_v2_000000280;Name=FRAEX38873_v2_000000280.1;biotype=protein_coding;AED=0.04
+Contig0	FRAEX38873_v2	five_prime_UTR	336569	336819	.	+	.	ID=FRAEX38873_v2_000000280.1.5utr1;Parent=FRAEX38873_v2_000000280.1
+Contig0	FRAEX38873_v2	exon	336569	336898	.	+	.	ID=FRAEX38873_v2_000000280.1.exon1;Parent=FRAEX38873_v2_000000280.1
+Contig0	FRAEX38873_v2	CDS	336820	336898	.	+	0	ID=FRAEX38873_v2_000000280.1.cds1;Parent=FRAEX38873_v2_000000280.1
+Contig0	FRAEX38873_v2	exon	336986	337271	.	+	.	ID=FRAEX38873_v2_000000280.1.exon2;Parent=FRAEX38873_v2_000000280.1
+Contig0	FRAEX38873_v2	CDS	336986	337271	.	+	2	ID=FRAEX38873_v2_000000280.1.cds2;Parent=FRAEX38873_v2_000000280.1
+Contig0	FRAEX38873_v2	CDS	342615	342747	.	+	1	ID=FRAEX38873_v2_000000280.1.cds3;Parent=FRAEX38873_v2_000000280.1
+Contig0	FRAEX38873_v2	exon	342615	343134	.	+	.	ID=FRAEX38873_v2_000000280.1.exon3;Parent=FRAEX38873_v2_000000280.1
+Contig0	FRAEX38873_v2	three_prime_UTR	342748	343134	.	+	.	ID=FRAEX38873_v2_000000280.1.3utr1;Parent=FRAEX38873_v2_000000280.1
+Contig0	FRAEX38873_v2	gene	349836	351647	.	+	.	ID=FRAEX38873_v2_000000290;Name=FRAEX38873_v2_000000290;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	349836	351647	.	+	.	ID=FRAEX38873_v2_000000290.1;Parent=FRAEX38873_v2_000000290;Name=FRAEX38873_v2_000000290.1;biotype=protein_coding;AED=0.85
+Contig0	FRAEX38873_v2	five_prime_UTR	349836	350421	.	+	.	ID=FRAEX38873_v2_000000290.1.5utr1;Parent=FRAEX38873_v2_000000290.1
+Contig0	FRAEX38873_v2	exon	349836	351647	.	+	.	ID=FRAEX38873_v2_000000290.1.exon1;Parent=FRAEX38873_v2_000000290.1
+Contig0	FRAEX38873_v2	CDS	350422	351516	.	+	0	ID=FRAEX38873_v2_000000290.1.cds1;Parent=FRAEX38873_v2_000000290.1
+Contig0	FRAEX38873_v2	three_prime_UTR	351517	351647	.	+	.	ID=FRAEX38873_v2_000000290.1.3utr1;Parent=FRAEX38873_v2_000000290.1
+Contig0	FRAEX38873_v2	gene	367466	370664	.	+	.	ID=FRAEX38873_v2_000000300;Name=FRAEX38873_v2_000000300;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	367466	370664	.	+	.	ID=FRAEX38873_v2_000000300.1;Parent=FRAEX38873_v2_000000300;Name=FRAEX38873_v2_000000300.1;biotype=protein_coding;AED=0.23
+Contig0	FRAEX38873_v2	five_prime_UTR	367466	367927	.	+	.	ID=FRAEX38873_v2_000000300.1.5utr1;Parent=FRAEX38873_v2_000000300.1
+Contig0	FRAEX38873_v2	exon	367466	370664	.	+	.	ID=FRAEX38873_v2_000000300.1.exon1;Parent=FRAEX38873_v2_000000300.1
+Contig0	FRAEX38873_v2	CDS	367928	370072	.	+	0	ID=FRAEX38873_v2_000000300.1.cds1;Parent=FRAEX38873_v2_000000300.1
+Contig0	FRAEX38873_v2	three_prime_UTR	370073	370664	.	+	.	ID=FRAEX38873_v2_000000300.1.3utr1;Parent=FRAEX38873_v2_000000300.1
+Contig0	FRAEX38873_v2	gene	374320	378838	.	+	.	ID=FRAEX38873_v2_000000310;Name=FRAEX38873_v2_000000310;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	374320	378838	.	+	.	ID=FRAEX38873_v2_000000310.1;Parent=FRAEX38873_v2_000000310;Name=FRAEX38873_v2_000000310.1;biotype=protein_coding;AED=0.22
+Contig0	FRAEX38873_v2	five_prime_UTR	374320	374451	.	+	.	ID=FRAEX38873_v2_000000310.1.5utr1;Parent=FRAEX38873_v2_000000310.1
+Contig0	FRAEX38873_v2	exon	374320	374451	.	+	.	ID=FRAEX38873_v2_000000310.1.exon1;Parent=FRAEX38873_v2_000000310.1
+Contig0	FRAEX38873_v2	five_prime_UTR	374648	374696	.	+	.	ID=FRAEX38873_v2_000000310.1.5utr2;Parent=FRAEX38873_v2_000000310.1
+Contig0	FRAEX38873_v2	exon	374648	374699	.	+	.	ID=FRAEX38873_v2_000000310.1.exon2;Parent=FRAEX38873_v2_000000310.1
+Contig0	FRAEX38873_v2	CDS	374697	374699	.	+	0	ID=FRAEX38873_v2_000000310.1.cds1;Parent=FRAEX38873_v2_000000310.1
+Contig0	FRAEX38873_v2	exon	375750	375827	.	+	.	ID=FRAEX38873_v2_000000310.1.exon3;Parent=FRAEX38873_v2_000000310.1
+Contig0	FRAEX38873_v2	CDS	375750	375827	.	+	0	ID=FRAEX38873_v2_000000310.1.cds2;Parent=FRAEX38873_v2_000000310.1
+Contig0	FRAEX38873_v2	exon	376157	376181	.	+	.	ID=FRAEX38873_v2_000000310.1.exon4;Parent=FRAEX38873_v2_000000310.1
+Contig0	FRAEX38873_v2	CDS	376157	376181	.	+	0	ID=FRAEX38873_v2_000000310.1.cds3;Parent=FRAEX38873_v2_000000310.1
+Contig0	FRAEX38873_v2	exon	376276	376308	.	+	.	ID=FRAEX38873_v2_000000310.1.exon5;Parent=FRAEX38873_v2_000000310.1
+Contig0	FRAEX38873_v2	CDS	376276	376308	.	+	2	ID=FRAEX38873_v2_000000310.1.cds4;Parent=FRAEX38873_v2_000000310.1
+Contig0	FRAEX38873_v2	exon	376434	376555	.	+	.	ID=FRAEX38873_v2_000000310.1.exon6;Parent=FRAEX38873_v2_000000310.1
+Contig0	FRAEX38873_v2	CDS	376434	376555	.	+	2	ID=FRAEX38873_v2_000000310.1.cds5;Parent=FRAEX38873_v2_000000310.1
+Contig0	FRAEX38873_v2	exon	376632	376717	.	+	.	ID=FRAEX38873_v2_000000310.1.exon7;Parent=FRAEX38873_v2_000000310.1
+Contig0	FRAEX38873_v2	CDS	376632	376717	.	+	0	ID=FRAEX38873_v2_000000310.1.cds6;Parent=FRAEX38873_v2_000000310.1
+Contig0	FRAEX38873_v2	exon	377359	377400	.	+	.	ID=FRAEX38873_v2_000000310.1.exon8;Parent=FRAEX38873_v2_000000310.1
+Contig0	FRAEX38873_v2	CDS	377359	377400	.	+	1	ID=FRAEX38873_v2_000000310.1.cds7;Parent=FRAEX38873_v2_000000310.1
+Contig0	FRAEX38873_v2	exon	377588	377811	.	+	.	ID=FRAEX38873_v2_000000310.1.exon9;Parent=FRAEX38873_v2_000000310.1
+Contig0	FRAEX38873_v2	CDS	377588	377811	.	+	1	ID=FRAEX38873_v2_000000310.1.cds8;Parent=FRAEX38873_v2_000000310.1
+Contig0	FRAEX38873_v2	exon	378043	378293	.	+	.	ID=FRAEX38873_v2_000000310.1.exon10;Parent=FRAEX38873_v2_000000310.1
+Contig0	FRAEX38873_v2	CDS	378043	378293	.	+	2	ID=FRAEX38873_v2_000000310.1.cds9;Parent=FRAEX38873_v2_000000310.1
+Contig0	FRAEX38873_v2	CDS	378457	378549	.	+	0	ID=FRAEX38873_v2_000000310.1.cds10;Parent=FRAEX38873_v2_000000310.1
+Contig0	FRAEX38873_v2	exon	378457	378838	.	+	.	ID=FRAEX38873_v2_000000310.1.exon11;Parent=FRAEX38873_v2_000000310.1
+Contig0	FRAEX38873_v2	three_prime_UTR	378550	378838	.	+	.	ID=FRAEX38873_v2_000000310.1.3utr1;Parent=FRAEX38873_v2_000000310.1
+Contig0	FRAEX38873_v2	gene	379298	386285	.	-	.	ID=FRAEX38873_v2_000000320;Name=FRAEX38873_v2_000000320;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	379298	386285	.	-	.	ID=FRAEX38873_v2_000000320.1;Parent=FRAEX38873_v2_000000320;Name=FRAEX38873_v2_000000320.1;biotype=protein_coding;AED=0.11
+Contig0	FRAEX38873_v2	three_prime_UTR	379298	379570	.	-	.	ID=FRAEX38873_v2_000000320.1.3utr1;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	exon	379298	379892	.	-	.	ID=FRAEX38873_v2_000000320.1.exon1;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	CDS	379571	379892	.	-	1	ID=FRAEX38873_v2_000000320.1.cds1;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	exon	380300	380610	.	-	.	ID=FRAEX38873_v2_000000320.1.exon2;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	CDS	380300	380610	.	-	0	ID=FRAEX38873_v2_000000320.1.cds2;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	exon	380774	381706	.	-	.	ID=FRAEX38873_v2_000000320.1.exon3;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	CDS	380774	381706	.	-	0	ID=FRAEX38873_v2_000000320.1.cds3;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	exon	382272	382599	.	-	.	ID=FRAEX38873_v2_000000320.1.exon4;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	CDS	382272	382599	.	-	1	ID=FRAEX38873_v2_000000320.1.cds4;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	exon	383023	383147	.	-	.	ID=FRAEX38873_v2_000000320.1.exon5;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	CDS	383023	383147	.	-	0	ID=FRAEX38873_v2_000000320.1.cds5;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	exon	383256	383321	.	-	.	ID=FRAEX38873_v2_000000320.1.exon6;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	CDS	383256	383321	.	-	0	ID=FRAEX38873_v2_000000320.1.cds6;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	exon	383431	383498	.	-	.	ID=FRAEX38873_v2_000000320.1.exon7;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	CDS	383431	383498	.	-	2	ID=FRAEX38873_v2_000000320.1.cds7;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	exon	383605	383686	.	-	.	ID=FRAEX38873_v2_000000320.1.exon8;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	CDS	383605	383686	.	-	0	ID=FRAEX38873_v2_000000320.1.cds8;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	exon	383757	383870	.	-	.	ID=FRAEX38873_v2_000000320.1.exon9;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	CDS	383757	383870	.	-	0	ID=FRAEX38873_v2_000000320.1.cds9;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	exon	384022	384122	.	-	.	ID=FRAEX38873_v2_000000320.1.exon10;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	CDS	384022	384122	.	-	2	ID=FRAEX38873_v2_000000320.1.cds10;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	exon	384257	384346	.	-	.	ID=FRAEX38873_v2_000000320.1.exon11;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	CDS	384257	384346	.	-	2	ID=FRAEX38873_v2_000000320.1.cds11;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	CDS	384703	384925	.	-	0	ID=FRAEX38873_v2_000000320.1.cds12;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	exon	384703	385178	.	-	.	ID=FRAEX38873_v2_000000320.1.exon12;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	five_prime_UTR	384926	385178	.	-	.	ID=FRAEX38873_v2_000000320.1.5utr1;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	five_prime_UTR	385944	386050	.	-	.	ID=FRAEX38873_v2_000000320.1.5utr2;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	exon	385944	386050	.	-	.	ID=FRAEX38873_v2_000000320.1.exon13;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	five_prime_UTR	386150	386285	.	-	.	ID=FRAEX38873_v2_000000320.1.5utr3;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	exon	386150	386285	.	-	.	ID=FRAEX38873_v2_000000320.1.exon14;Parent=FRAEX38873_v2_000000320.1
+Contig0	FRAEX38873_v2	gene	389676	393575	.	-	.	ID=FRAEX38873_v2_000000330;Name=FRAEX38873_v2_000000330;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	389676	393575	.	-	.	ID=FRAEX38873_v2_000000330.1;Parent=FRAEX38873_v2_000000330;Name=FRAEX38873_v2_000000330.1;biotype=protein_coding;AED=0.49
+Contig0	FRAEX38873_v2	three_prime_UTR	389676	389834	.	-	.	ID=FRAEX38873_v2_000000330.1.3utr1;Parent=FRAEX38873_v2_000000330.1
+Contig0	FRAEX38873_v2	exon	389676	390443	.	-	.	ID=FRAEX38873_v2_000000330.1.exon1;Parent=FRAEX38873_v2_000000330.1
+Contig0	FRAEX38873_v2	CDS	389835	390443	.	-	0	ID=FRAEX38873_v2_000000330.1.cds1;Parent=FRAEX38873_v2_000000330.1
+Contig0	FRAEX38873_v2	exon	390560	390721	.	-	.	ID=FRAEX38873_v2_000000330.1.exon2;Parent=FRAEX38873_v2_000000330.1
+Contig0	FRAEX38873_v2	CDS	390560	390721	.	-	0	ID=FRAEX38873_v2_000000330.1.cds2;Parent=FRAEX38873_v2_000000330.1
+Contig0	FRAEX38873_v2	exon	390855	391154	.	-	.	ID=FRAEX38873_v2_000000330.1.exon3;Parent=FRAEX38873_v2_000000330.1
+Contig0	FRAEX38873_v2	CDS	390855	391154	.	-	0	ID=FRAEX38873_v2_000000330.1.cds3;Parent=FRAEX38873_v2_000000330.1
+Contig0	FRAEX38873_v2	exon	392493	392846	.	-	.	ID=FRAEX38873_v2_000000330.1.exon4;Parent=FRAEX38873_v2_000000330.1
+Contig0	FRAEX38873_v2	CDS	392493	392846	.	-	0	ID=FRAEX38873_v2_000000330.1.cds4;Parent=FRAEX38873_v2_000000330.1
+Contig0	FRAEX38873_v2	CDS	393492	393494	.	-	0	ID=FRAEX38873_v2_000000330.1.cds5;Parent=FRAEX38873_v2_000000330.1
+Contig0	FRAEX38873_v2	exon	393492	393575	.	-	.	ID=FRAEX38873_v2_000000330.1.exon5;Parent=FRAEX38873_v2_000000330.1
+Contig0	FRAEX38873_v2	five_prime_UTR	393495	393575	.	-	.	ID=FRAEX38873_v2_000000330.1.5utr1;Parent=FRAEX38873_v2_000000330.1
+Contig0	FRAEX38873_v2	gene	401885	403554	.	-	.	ID=FRAEX38873_v2_000000340;Name=FRAEX38873_v2_000000340;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	401885	403554	.	-	.	ID=FRAEX38873_v2_000000340.1;Parent=FRAEX38873_v2_000000340;Name=FRAEX38873_v2_000000340.1;biotype=protein_coding;AED=0.41
+Contig0	FRAEX38873_v2	three_prime_UTR	401885	402134	.	-	.	ID=FRAEX38873_v2_000000340.1.3utr1;Parent=FRAEX38873_v2_000000340.1
+Contig0	FRAEX38873_v2	exon	401885	402833	.	-	.	ID=FRAEX38873_v2_000000340.1.exon1;Parent=FRAEX38873_v2_000000340.1
+Contig0	FRAEX38873_v2	CDS	402135	402833	.	-	0	ID=FRAEX38873_v2_000000340.1.cds1;Parent=FRAEX38873_v2_000000340.1
+Contig0	FRAEX38873_v2	CDS	402920	403228	.	-	0	ID=FRAEX38873_v2_000000340.1.cds2;Parent=FRAEX38873_v2_000000340.1
+Contig0	FRAEX38873_v2	exon	402920	403247	.	-	.	ID=FRAEX38873_v2_000000340.1.exon2;Parent=FRAEX38873_v2_000000340.1
+Contig0	FRAEX38873_v2	five_prime_UTR	403229	403247	.	-	.	ID=FRAEX38873_v2_000000340.1.5utr1;Parent=FRAEX38873_v2_000000340.1
+Contig0	FRAEX38873_v2	five_prime_UTR	403332	403554	.	-	.	ID=FRAEX38873_v2_000000340.1.5utr2;Parent=FRAEX38873_v2_000000340.1
+Contig0	FRAEX38873_v2	exon	403332	403554	.	-	.	ID=FRAEX38873_v2_000000340.1.exon3;Parent=FRAEX38873_v2_000000340.1
+Contig0	FRAEX38873_v2	gene	410367	413565	.	-	.	ID=FRAEX38873_v2_000000350;Name=FRAEX38873_v2_000000350;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	410367	413565	.	-	.	ID=FRAEX38873_v2_000000350.1;Parent=FRAEX38873_v2_000000350;Name=FRAEX38873_v2_000000350.1;biotype=protein_coding;AED=0.78

+ 4 - 0
tests/tripal_chado/data/gff_rightarrow_id.gff

@@ -0,0 +1,4 @@
+##gff-version 3
+Contig0	FRAEX38873_v2	gene	16315	44054	.	+	.	ID=>FRAEX38873_v2_000000010;Name=FRAEX38873_v2_000000010;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	16315	44054	.	+	.	ID=FRAEX38873_v2_000000010.1;Parent=FRAEX38873_v2_000000010;Name=FRAEX38873_v2_000000010.1;biotype=protein_coding;AED=0.05
+Contig0	FRAEX38873_v2	polypeptide	16315	44054	.	+	.	ID=FRAEX38873_v2_000000010.1.3_test_protein;Parent=FRAEX38873_v2_000000010.1

+ 5 - 0
tests/tripal_chado/data/gff_score.gff

@@ -0,0 +1,5 @@
+##gff-version 3
+Contig0	FRAEX38873_v2	gene	16315	44054	2	+	.	ID=FRAEX38873_v2_000000010;Name=FRAEX38873_v2_000000010;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	16315	44054	2.5	+	.	ID=FRAEX38873_v2_000000010.1;Parent=FRAEX38873_v2_000000010;Name=FRAEX38873_v2_000000010.1;biotype=protein_coding;AED=0.05
+Contig0	FRAEX38873_v2	mRNA	16315	44054	-2.5	+	.	ID=FRAEX38873_v2_000000010.2;Parent=FRAEX38873_v2_000000010;Name=FRAEX38873_v2_000000010.2;biotype=protein_coding;AED=0.05
+Contig0	FRAEX38873_v2	polypeptide	16315	44054	.	+	.	ID=FRAEX38873_v2_000000010.1.3_test_protein;Parent=FRAEX38873_v2_000000010.1

+ 5 - 0
tests/tripal_chado/data/gff_seqid_invalid_character.gff

@@ -0,0 +1,5 @@
+##gff-version 3
+Contig'0	FRAEX38873_v2	gene	16315	44054	.	+	.	ID=FRAEX38873_v2_000000010;Name=FRAEX38873_v2_000000010;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	16315	44054	.	+	.	ID=FRAEX38873_v2_000000010.1;Parent=FRAEX38873_v2_000000010;Name=FRAEX38873_v2_000000010.1;biotype=protein_coding;AED=0.05
+Contig0	FRAEX38873_v2	polypeptide	16315	44054	.	+	.	ID=FRAEX38873_v2_000000010.1.3_test_protein;Parent=FRAEX38873_v2_000000010.1
+Contig0	FRAEX38873_v2	gene	16315	44054	.	+	.	ID=FRAEX38873_v2_000000011;Name=FRAEX38873_v2_000000010;biotype=protein_coding

+ 6 - 0
tests/tripal_chado/data/gff_strand.gff

@@ -0,0 +1,6 @@
+##gff-version 3
+Contig0	FRAEX38873_v2	gene	16315	44054	1	+	.	ID=FRAEX38873_v2_000000010;Name=FRAEX38873_v2_000000010;biotype=protein_coding
+Contig0	FRAEX38873_v2	mRNA	16315	44054	2	-	.	ID=FRAEX38873_v2_000000010.1;Parent=FRAEX38873_v2_000000010;Name=FRAEX38873_v2_000000010.1;biotype=protein_coding;AED=0.05
+Contig0	FRAEX38873_v2	mRNA	16315	44054	3	.	.	ID=FRAEX38873_v2_000000010.2;Parent=FRAEX38873_v2_000000010;Name=FRAEX38873_v2_000000010.2;biotype=protein_coding;AED=0.05
+Contig0	FRAEX38873_v2	mRNA	16315	44054	4	?	.	ID=FRAEX38873_v2_000000010.3;Parent=FRAEX38873_v2_000000010;Name=FRAEX38873_v2_000000010.3;biotype=protein_coding;AED=0.05
+Contig0	FRAEX38873_v2	polypeptide	16315	44054	.	+	.	ID=FRAEX38873_v2_000000010.1.3_test_protein;Parent=FRAEX38873_v2_000000010.1

Some files were not shown because too many files changed in this diff