Browse Source

periodic checkin

Stephen Ficklin 4 năm trước cách đây
mục cha
commit
70ca9bb46e
1 tập tin đã thay đổi với 216 bổ sung380 xóa
  1. 216 380
      tripal_chado/includes/TripalImporter/GFF3Importer.inc

+ 216 - 380
tripal_chado/includes/TripalImporter/GFF3Importer.inc

@@ -207,6 +207,10 @@ class GFF3Importer extends TripalImporter {
    */
   private $synonym_lookup = [];
 
+  /**
+   * Maps parents to their children and contains the ranks of the children.
+   */
+  private $parent_lookup = [];
   /**
    * An array that stores CVterms that have been looked up so we don't have
    * to do the database query every time.
@@ -653,7 +657,7 @@ class GFF3Importer extends TripalImporter {
     $this->loadFeatureLocs();
 
     $this->logMessage("Step 5: Loading 'derives_from' (gene/CDS) relationships...");
-    //$this->loadDerivesFroms();
+    $this->loadDerivesFrom();
 
     $this->logMessage("Step 6: Loading properties...                             ");
     $this->loadFeatureProps();
@@ -669,15 +673,19 @@ class GFF3Importer extends TripalImporter {
     $this->findDbxrefs();
     $this->logMessage("Step 8b: Loading cross references...                      ");
     $this->loadDbxrefs();
-    $this->logMessage("Step 8c: Loading feature cross references...              ");
+    $this->logMessage("Step 8c: Retrieving loaded cross references...            ");
+    $this->findDbxrefs();
+    $this->logMessage("Step 8d: Loading feature cross references...              ");
     $this->loadFeatureDbxrefs();
 
-
     $this->logMessage("Step 9: Loading feature ontology terms...                 ");
     $this->loadFeatureCVterms();
 
+    $this->logMessage("Step 10: Associate child-parent relationships...          ");
+    $this->findChildRanks();
+    $this->loadParents();
+
     /*
-      strcmp($tag_name, 'Parent') != 0 and
       strcmp($tag_name, 'Target') != 0 and
       strcmp($tag_name, 'Gap') != 0 and
       strcmp($tag_name, 'Derives_from') != 0 and
@@ -1073,8 +1081,12 @@ class GFF3Importer extends TripalImporter {
       );
     }
 
-    $ret['derives_from'] = $attr_derives;
-    if (count($ret['derives_from']) > 1) {
+    // Add the derives from entry.
+    $ret['derives_from'] = '';
+    if (count($attr_derives) == 1) {
+      $ret['derives_from'] = $attr_derives[0];
+    }
+    if (count($attr_derives) > 1) {
       throw new Exception(t('Each feature can only have one "Derives_from" attribute. The feature %uniquename has more than one: %derives',
         [
           '%uniquename' => $ret['uniquename'],
@@ -1089,9 +1101,7 @@ class GFF3Importer extends TripalImporter {
 
     $ret['organism_id'] = $attr_organism->getValue('organism_id');
     $ret['properties'] = $attr_others;
-    if ($attr_parent) {
-      $ret['Parent'] = $attr_parent;
-    }
+    $ret['parent'] = $attr_parent;
 
     return $ret;
   }
@@ -1537,11 +1547,9 @@ class GFF3Importer extends TripalImporter {
 
       // If we've reached the size of the batch then let's do the insert.
       if ($i == $batch_size or $total == $num_features) {
-
-        // Insert the batch.
-        $sql = rtrim($sql, ",\n");
-        $sql = $init_sql . $sql;
         if (count($args) > 0) {
+          $sql = rtrim($sql, ",\n");
+          $sql = $init_sql . $sql;
           $last_id = chado_query($sql, $args, ['return' => Database::RETURN_INSERT_ID]);
           $this->assignFeatureIDs($batch_features);
         }
@@ -1600,18 +1608,17 @@ class GFF3Importer extends TripalImporter {
 
     $init_sql = "INSERT INTO {featureprop} (feature_id, type_id, value, rank) VALUES\n";
     $i = 0;
-    $total = 0;
     $j = 0;
+    $total = 0;
     $batch_num = 1;
     $sql = '';
     $args = [];
     foreach ($this->features as $uniquename => $feature) {
+      $total++;
 
       // Only do an insert if this feature doesn't already exist in the databse.
       if (!$this->doesFeatureAlreadyExist($feature)) {
         $i++;
-        $total++;
-
         $this->ensureFeatureIsLoaded($feature);
 
         // Iterate through all of the properties of this feature.
@@ -1626,25 +1633,84 @@ class GFF3Importer extends TripalImporter {
             $args[":rank_$j"] = $rank;
           }
         }
-        // If we've reached the size of the batch then let's do the insert.
-        if ($i == $batch_size or $total == $num_features) {
-
-          // Insert the batch.
+      }
+      // If we've reached the size of the batch then let's do the insert.
+      if ($i == $batch_size or $total == $num_features) {
+        if (count($args) > 0) {
           $sql = rtrim($sql, ",\n");
           $sql = $init_sql . $sql;
-          if (count($args) > 0) {
-            $last_id = chado_query($sql, $args, ['return' => Database::RETURN_INSERT_ID]);
-          }
-          $this->setItemsHandled($batch_num);
-          $batch_num++;
+          $last_id = chado_query($sql, $args, ['return' => Database::RETURN_INSERT_ID]);
+        }
+        $this->setItemsHandled($batch_num);
+        $batch_num++;
 
-          // Now reset all of the varables for the next batch.
-          $sql = '';
-          $i = 0;
-          $j = 0;
-          $args = [];
+        // Now reset all of the varables for the next batch.
+        $sql = '';
+        $i = 0;
+        $j = 0;
+        $args = [];
+      }
+    }
+  }
+  /**
+   *
+   */
+  private function loadParents(){
+    $batch_size = 100;
+    $num_parents = count(array_keys($this->parent_lookup));
+    $num_batches = (int) ($num_parents / $batch_size) + 1;
+
+    $this->setItemsHandled(0);
+    $this->setTotalItems($num_batches);
+
+    // Get the 'part_of' cvterm
+    $type_id = $this->getCvtermID('part_of');
+
+    $init_sql = "INSERT INTO {feature_relationship} (subject_id, object_id, type_id, rank) VALUES\n";
+    $i = 0;
+    $j = 0;
+    $total = 0;
+    $batch_num = 1;
+    $sql = '';
+    $args = [];
+    foreach ($this->parent_lookup as $parent => $children) {
+      $total++;
+
+      // If the feature already exists in the database don't update its
+      // children.
+      $parent_feature = $this->features[$parent];
+      if (!$this->doesFeatureAlreadyExist($parent_feature)) {
+        $i++;
+        $this->ensureFeatureIsLoaded($parent_feature);
+
+        $rank = 0;
+        foreach ($children as $start => $feature_id) {
+          $j++;
+          $sql .= "(:subject_id_$j, :object_id_$j, :type_id_$j, :rank_$j),\n";
+          $args[":subject_id_$j"] = $feature_id;
+          $args[":object_id_$j"] = $this->features[$parent]['feature_id'];
+          $args[":type_id_$j"] = $type_id;
+          $args[":rank_$j"] = $rank;
+          $rank++;
         }
       }
+
+      // If we've reached the size of the batch then let's do the insert.
+      if ($i == $batch_size or $total == $num_parents) {
+        if (count($args) > 0) {
+          $sql = rtrim($sql, ",\n");
+          $sql = $init_sql . $sql;
+          $last_id = chado_query($sql, $args, ['return' => Database::RETURN_INSERT_ID]);
+        }
+        $this->setItemsHandled($batch_num);
+        $batch_num++;
+
+        // Now reset all of the varables for the next batch.
+        $sql = '';
+        $i = 0;
+        $j = 0;
+        $args = [];
+      }
     }
   }
 
@@ -1705,13 +1771,31 @@ class GFF3Importer extends TripalImporter {
     }
   }
 
+  /**
+   * Calculates ranks for all of the children of each feature.
+   *
+   * This function should not be executed until after features are loaded
+   * into the database and we have feature_ids for all of them.
+   */
+  private function findChildRanks() {
+    // Iterate through parent-child relationships and set the ranks.
+    foreach ($this->features as $uniquename => $feature) {
+      if ($feature['parent']) {
+        // place features in order that they appear by their start coordinates.
+        $parent = $feature['parent'];
+        $start = $feature['start'];
+        $this->parent_lookup[$parent][$start] = $feature['feature_id'];
+      }
+    }
+  }
+
   /**
    *
    */
   private function loadDbxrefs() {
     $batch_size = 1000;
-    $num_features = count(array_keys($this->dbxref_lookup));
-    $num_batches = (int) ($num_features / $batch_size) + 1;
+    $num_dbxrefs = count(array_keys($this->dbxref_lookup));
+    $num_batches = (int) ($num_dbxrefs / $batch_size) + 1;
 
     $this->setItemsHandled(0);
     $this->setTotalItems($num_batches);
@@ -1736,12 +1820,10 @@ class GFF3Importer extends TripalImporter {
       }
 
       // If we've reached the size of the batch then let's do the insert.
-      if ($i == $batch_size or $total == $num_features) {
-
-        // Insert the batch.
-        $sql = rtrim($sql, ",\n");
-        $sql = $init_sql . $sql;
+      if ($i == $batch_size or $total == $num_dbxrefs) {
         if (count($args) > 0) {
+          $sql = rtrim($sql, ",\n");
+          $sql = $init_sql . $sql;
           $last_id = chado_query($sql, $args, ['return' => Database::RETURN_INSERT_ID]);
         }
         $this->setItemsHandled($batch_num);
@@ -1768,21 +1850,19 @@ class GFF3Importer extends TripalImporter {
     $this->setTotalItems($num_batches);
 
     // Don't need to use placeholders for this insert since we are only using integers.
-
     $init_sql = "INSERT INTO {feature_dbxref} (feature_id, dbxref_id) VALUES \n";
     $i = 0;
-    $total = 0;
     $j = 0;
+    $total = 0;
     $batch_num = 1;
     $sql = '';
     $args = [];
     foreach ($this->features as $uniquename => $feature) {
+      $total++;
 
       // Only do an insert if this feature doesn't already exist in the databse.
       if (!$this->doesFeatureAlreadyExist($feature)) {
         $i++;
-        $total++;
-
         $this->ensureFeatureIsLoaded($feature);
 
         // Iterate through all of the dbxrefs of this feature.
@@ -1792,22 +1872,23 @@ class GFF3Importer extends TripalImporter {
           $args[":feature_id_$j"] = $feature['feature_id'];
           $args[":dbxref_id_$j"] = $this->dbxref_lookup[$index]['dbxref_id'];
         }
-        // If we've reached the size of the batch then let's do the insert.
-        if ($i == $batch_size or $total == $num_features) {
+      }
 
-          // Insert the batch.
+      // If we've reached the size of the batch then let's do the insert.
+      if ($i == $batch_size or $total == $num_features) {
+        if (count($args) > 0) {
           $sql = rtrim($sql, ",\n");
           $sql = $init_sql . $sql;
           $last_id = chado_query($sql, $args, ['return' => Database::RETURN_INSERT_ID]);
-          $this->setItemsHandled($batch_num);
-          $batch_num++;
-
-          // Now reset all of the varables for the next batch.
-          $sql = '';
-          $i = 0;
-          $j = 0;
-          $args = [];
         }
+        $this->setItemsHandled($batch_num);
+        $batch_num++;
+
+        // Now reset all of the varables for the next batch.
+        $sql = '';
+        $i = 0;
+        $j = 0;
+        $args = [];
       }
     }
   }
@@ -1833,12 +1914,11 @@ class GFF3Importer extends TripalImporter {
     $sql = '';
     $args = [];
     foreach ($this->features as $uniquename => $feature) {
+      $total++;
 
       // Only do an insert if this feature doesn't already exist in the databse.
       if (!$this->doesFeatureAlreadyExist($feature)) {
         $i++;
-        $total++;
-
         $this->ensureFeatureIsLoaded($feature);
 
         // Iterate through all of the dbxrefs of this feature.
@@ -1849,22 +1929,23 @@ class GFF3Importer extends TripalImporter {
           $args[":cvterm_id_$j"] = $this->cvterm_lookup[$index];
           $args[":pub_id_$j"] = $this->null_pub->pub_id;
         }
-        // If we've reached the size of the batch then let's do the insert.
-        if ($i == $batch_size or $total == $num_features) {
-          if (count($args) > 0) {
-            $sql = rtrim($sql, ",\n");
-            $sql = $init_sql . $sql;
-            $last_id = chado_query($sql, $args, ['return' => Database::RETURN_INSERT_ID]);
-          }
-          $this->setItemsHandled($batch_num);
-          $batch_num++;
+      }
 
-          // Now reset all of the varables for the next batch.
-          $sql = '';
-          $i = 0;
-          $j = 0;
-          $args = [];
+      // If we've reached the size of the batch then let's do the insert.
+      if ($i == $batch_size or $total == $num_features) {
+        if (count($args) > 0) {
+          $sql = rtrim($sql, ",\n");
+          $sql = $init_sql . $sql;
+          $last_id = chado_query($sql, $args, ['return' => Database::RETURN_INSERT_ID]);
         }
+        $this->setItemsHandled($batch_num);
+        $batch_num++;
+
+        // Now reset all of the varables for the next batch.
+        $sql = '';
+        $i = 0;
+        $j = 0;
+        $args = [];
       }
     }
   }
@@ -1872,107 +1953,57 @@ class GFF3Importer extends TripalImporter {
   /**
    *
    */
-  private function loadDerivesFroms() {
-    $batch_size = 1000;
+  private function loadDerivesFrom() {
+    $batch_size = 100;
     $num_features = count(array_keys($this->features));
     $num_batches = (int) ($num_features / $batch_size) + 1;
 
     $this->setItemsHandled(0);
     $this->setTotalItems($num_batches);
 
-    $init_sql = "
-      INSERT INTO {feature_relationship}
-        (subject_id, object_id, type_id, rank)
-      VALUES\n";
+    // Get the 'derives_from' cvterm
+    $type_id = $this->getCvtermID('derives_from');
 
-    $count = 0;
+    $init_sql = "INSERT INTO {feature_relationship} (subject_id, object_id, type_id, rank) VALUES\n";
+    $i = 0;
+    $j = 0;
+    $total = 0;
     $batch_num = 1;
-    $rows = [];
+    $sql = '';
     $args = [];
-    $derives_id = $this->getCvtermID('derives_from');
-
-    foreach ($this->features as $uniquename => $subject) {
-      if (!$this->doesFeatureAlreadyExist($subject)) {
-        $count++;
-
-        $this->ensureFeatureIsLoaded($subject);
-        if (!empty($subject['derives_from'])) {
-
-          $object = $subject['derives_from'][0];
-          if (array_key_exists($object, $this->features)) {
-            $this->ensureFeatureIsLoaded($this->features[$object]);
-            $object_id = $this->features[$object]['feature_id'];
-          }
-          elseif (array_key_exists($object, $this->landmarks)) {
-            $this->ensureFeatureIsLoaded($this->landmarks[$object]);
-            $object_id = $this->landmarks[$object]['feature_id'];
-          }
-          else {
-            // Derives_from cannot be found in either features or landmarks, so
-            // we need to get the feature id from the database if it exists.
-            $result = chado_select_record('feature', ['type_id'], [
-              'organism_id' => $subject['organism_id'],
-              'uniquename' => $object,
-            ]);
-
-            if (count($result) > 1) {
-              $this->logMessage('Cannot find feature type for "%object" in derives_from relationship. Multiple matching features exist with this uniquename.',
-                ['%object' => $object], TRIPAL_WARNING);
-              continue;
-            }
-            elseif (count($result) == 0) {
-              $this->logMessage('Cannot find feature type for "%object" in derives_from relationship.',
-                ['%object' => $object], TRIPAL_WARNING);
-              continue;
-            }
-
-            $type_id = $result->type_id;
-            $ofeature = chado_select_record('feature', ['feature_id'], [
-              'organism_id' => $subject['organism_id'],
-              'uniquename' => $object,
-              'type_id' => $type_id,
-            ]);
-            if (count($ofeature) == 0) {
-              $this->logMessage("Could not add 'Derives_from' relationship for %uniquename and %object. Object feature, '%object', cannot be found.",
-                [
-                  '%uniquename' => $uniquename,
-                  '%object' => $object,
-                ], TRIPAL_ERROR);
-              continue;
-            }
-
-            $object_id = $ofeature[0]->feature_id;
-          }
-
-          $rows[] = "(:subject_id_$count, :object_id_$count, $derives_id, 0)";
-          $args[":subject_id_$count"] = $subject['feature_id'];
-          $args[":object_id_$count"] = $object_id;
-
-          if ($count == $batch_size) {
-            $batch_num++;
+    foreach ($this->features as $uniquename => $feature) {
+      $total++;
 
-            if (count($rows) > 0) {
-              $sql = $init_sql . implode(",\n", $rows);
-              chado_query($sql, $args, array('return' => Database::RETURN_INSERT_ID));
-            }
-            $this->setItemsHandled($batch_num);
+      // Only do an insert if this feature doesn't already exist in the databse.
+      if (!$this->doesFeatureAlreadyExist($feature)) {
+        $i++;
+        $this->ensureFeatureIsLoaded($feature);
 
-            $rows = [];
-            $args = [];
-            $count = 0;
-          }
+        if ($feature['derives_from']) {
+          $object_id = $this->features[$feature['derives_from']]['feature_id'];
+          $sql .= "(:subject_id_$i, :object_id_$i, :type_id_$i, 0),\n";
+          $args[":subject_id_$i"] = $feature['feature_id'];
+          $args[":object_id_$i"] = $object_id;
+          $args[":type_id_$i"] = $type_id;
         }
       }
-    }
 
-    if ($count > 0) {
-      $batch_num++;
-      if (count($rows) > 0) {
-        $sql = $init_sql . implode(",\n", $rows);
-        chado_query($sql, $args, array('return' => Database::RETURN_INSERT_ID));
-      }
+      // If we've reached the size of the batch then let's do the insert.
+      if ($i == $batch_size or $total == $num_features) {
+        if (count($args) > 0) {
+          $sql = rtrim($sql, ",\n");
+          $sql = $init_sql . $sql;
+          $last_id = chado_query($sql, $args, ['return' => Database::RETURN_INSERT_ID]);
+        }
+        $this->setItemsHandled($batch_num);
+        $batch_num++;
 
-      $this->setItemsHandled($batch_num);
+        // Now reset all of the varables for the next batch.
+        $sql = '';
+        $i = 0;
+        $j = 0;
+        $args = [];
+      }
     }
   }
 
@@ -1997,11 +2028,11 @@ class GFF3Importer extends TripalImporter {
     $sql = '';
     $args = [];
     foreach ($this->features as $uniquename => $feature) {
+      $total++;
 
       // Only do an insert if this feature doesn't already exist in the databse.
       if (!$this->doesFeatureAlreadyExist($feature)) {
         $i++;
-
         $this->ensureFeatureIsLoaded($feature);
 
         // Get the rank of this feature by ordering all of the other
@@ -2024,23 +2055,22 @@ class GFF3Importer extends TripalImporter {
         $args[":strand_$i"] = $feature['strand'];
         $args[":phase_$i"] = $feature['phase'] ? $feature['phase'] : NULL;
         $args[":rank_$i"] = $rank;
+      }
 
-
-        // If we've reached the size of the batch then let's do the insert.
-        if ($i == $batch_size or $total == $num_features) {
-
-          // Insert the batch.
+      // If we've reached the size of the batch then let's do the insert.
+      if ($i == $batch_size or $total == $num_features) {
+        if (count($args) > 0) {
           $sql = rtrim($sql, ",\n");
           $sql = $init_sql . $sql;
           $last_id = chado_query($sql, $args, ['return' => Database::RETURN_INSERT_ID]);
-          $this->setItemsHandled($batch_num);
-          $batch_num++;
-
-          // Now reset all of the varables for the next batch.
-          $sql = '';
-          $i = 0;
-          $args = [];
         }
+        $this->setItemsHandled($batch_num);
+        $batch_num++;
+
+        // Now reset all of the varables for the next batch.
+        $sql = '';
+        $i = 0;
+        $args = [];
       }
     }
   }
@@ -2139,11 +2169,9 @@ class GFF3Importer extends TripalImporter {
 
       // If we've reached the size of the batch then let's do the insert.
       if ($i == $batch_size or $total == $num_synonyms) {
-
-        // Insert the batch.
-        $sql = rtrim($sql, ",\n");
-        $sql = $init_sql . $sql;
         if (count($args) > 0) {
+          $sql = rtrim($sql, ",\n");
+          $sql = $init_sql . $sql;
           chado_query($sql, $args, ['return' => Database::RETURN_INSERT_ID]);
         }
         $this->setItemsHandled($batch_num);
@@ -2178,12 +2206,11 @@ class GFF3Importer extends TripalImporter {
     $batch_num = 1;
     $args = [];
     foreach ($this->features as $uniquename => $feature) {
+      $total++;
 
       // Only do an insert if this feature doesn't already exist in the databse.
       if (!$this->doesFeatureAlreadyExist($feature)) {
         $i++;
-        $total++;
-
         $this->ensureFeatureIsLoaded($feature);
 
         // Handle all of the synonyms for this feature.
@@ -2195,23 +2222,23 @@ class GFF3Importer extends TripalImporter {
           $args[":feature_id_$j"] = $feature['feature_id'];
           $args[":pub_id_$j"] = $this->null_pub->pub_id;
         }
+      }
 
-        // If we've reached the size of the batch then let's do the insert.
-        if ($i == $batch_size or $total == $num_features) {
-          if (count($args) > 0) {
-            $sql = rtrim($sql, ",\n");
-            $sql = $init_sql . $sql;
-            $last_id = chado_query($sql, $args, ['return' => Database::RETURN_INSERT_ID]);
-          }
-          $this->setItemsHandled($batch_num);
-          $batch_num++;
-
-          // Now reset all of the varables for the next batch.
-          $sql = '';
-          $i = 0;
-          $j = 0;
-          $args = [];
+      // If we've reached the size of the batch then let's do the insert.
+      if ($i == $batch_size or $total == $num_features) {
+        if (count($args) > 0) {
+          $sql = rtrim($sql, ",\n");
+          $sql = $init_sql . $sql;
+          $last_id = chado_query($sql, $args, ['return' => Database::RETURN_INSERT_ID]);
         }
+        $this->setItemsHandled($batch_num);
+        $batch_num++;
+
+        // Now reset all of the varables for the next batch.
+        $sql = '';
+        $i = 0;
+        $j = 0;
+        $args = [];
       }
     }
   }
@@ -2924,7 +2951,7 @@ class GFF3Importer extends TripalImporter {
    *
    * @ingroup gff3_loader
    */
-  private function loadDerivesFrom($feature, $cvterm, $object,
+  private function loadDerivesFromOld($feature, $cvterm, $object,
                                    $organism, $fmin, $fmax) {
 
     $type = $cvterm->name;
@@ -3019,197 +3046,6 @@ class GFF3Importer extends TripalImporter {
     }
   }
 
-  /**
-   * Load the parents for a gff3 feature
-   *
-   * @param $feature
-   * @param $cvterm
-   * @param $parents
-   * @param $organism_id
-   * @param $fmin
-   *
-   * @ingroup gff3_loader
-   */
-  private function loadParents($feature, $cvterm, $parents,
-                               $organism_id, $strand, $phase, $fmin, $fmax) {
-
-    $uname = $feature->getValue('uniquename');
-    $type = $cvterm->name;
-    $rel_type = 'part_of';
-    $relcvterm = $this->getCvterm($rel_type);
-    if (!$relcvterm) {
-      throw new Exception(t("Cannot find the term, 'part_of', from the sequence ontology. This term is used for associating parent and children features. Please check that the ontology is fully imported."));
-    }
-
-    // Iterate through the parents in the list.
-    foreach ($parents as $parent) {
-      // Get the parent cvterm.
-      $values = [
-        'organism_id' => $organism_id,
-        'uniquename' => $parent,
-      ];
-      $result = chado_select_record('tripal_gff_temp', ['type_name'], $values);
-      if (count($result) == 0) {
-        $this->logMessage("Cannot find parent: %parent.", ['%parent' => $parent], TRIPAL_WARNING);
-        return '';
-      }
-      $parent_type = $result[0]->type_name;
-
-      // try to find the parent
-      $parentcvterm = $this->getCvterm($parent_type);
-      $values = [
-        'organism_id' => $organism_id,
-        'uniquename' => $parent,
-        'type_id' => $parentcvterm->cvterm_id,
-      ];
-      $result = chado_select_record('feature', ['feature_id'], $values);
-      $parent_feature = $result[0];
-
-      // if the parent exists then add the relationship otherwise print error and skip
-      if ($parent_feature) {
-
-        // check to see if the relationship already exists
-        $values = [
-          'object_id' => $parent_feature->feature_id,
-          'subject_id' => $feature->getID(),
-          'type_id' => $relcvterm->cvterm_id,
-        ];
-        $rel = chado_select_record('feature_relationship', ['*'], $values);
-
-        if (count($rel) > 0) {
-        }
-        else {
-          // the relationship doesn't already exist, so add it.
-          $values = [
-            'subject_id' => $feature->getID(),
-            'object_id' => $parent_feature->feature_id,
-            'type_id' => $relcvterm->cvterm_id,
-          ];
-          $result = chado_insert_record('feature_relationship', $values, array(
-            'skip_validation' => TRUE,
-          ));
-          if (!$result) {
-            $this->logMessage("Failed to insert feature relationship '$uname' ($type) $rel_type '$parent' ($parent_type).",
-              [], TRIPAL_WARNING);
-          }
-        }
-
-        // If this feature is a CDS and now that we know the parent we can
-        // add it to the tripal_gffcds_temp table for later lookup.
-        if ($type == 'CDS') {
-          $values = [
-            'feature_id' => $feature->getID(),
-            'parent_id' => $parent_feature->feature_id,
-            'fmin' => $fmin,
-            'fmax' => $fmax,
-            'strand' => $strand,
-          ];
-          if (isset($phase)) {
-            $values['phase'] = $phase;
-          }
-          $result = chado_insert_record('tripal_gffcds_temp', $values, array(
-            'skip_validation' => TRUE,
-          ));
-          if (!$result) {
-            throw new Exception(t("Cound not save record in temporary CDS table, Cannot continue.", []));
-            exit;
-          }
-        }
-      }
-      else {
-        $this->logMessage("Cannot establish relationship '$uname' ($type) $rel_type '$parent' ($parent_type): Cannot find the parent.",
-          [], TRIPAL_WARNING);
-      }
-    }
-  }
-
-
-  /**
-   * Load the cvterms for a feature.
-   *
-   * Assumes there is a dbxref.accession matching a cvterm.name
-   *
-   * @param $feature
-   * @param $dbxrefs
-   *
-   * @ingroup gff3_loader
-   */
-  private function loadOntology($feature, $dbxrefs) {
-
-    // iterate through each of the dbxrefs
-    foreach ($dbxrefs as $dbxref) {
-
-      // get the database name from the reference.  If it doesn't exist then create one.
-      $ref = explode(":", $dbxref);
-      $dbname = trim($ref[0]);
-      $accession = trim($ref[1]);
-
-      // first look for the database name
-      $db = chado_select_record('db', ['db_id'], ['name' => "DB:$dbname"]);
-      if (sizeof($db) == 0) {
-        // now look for the name without the 'DB:' prefix.
-        $db = chado_select_record('db', ['db_id'], ['name' => "$dbname"]);
-        if (sizeof($db) == 0) {
-          $this->logMessage("Database, $dbname, is not present. Cannot associate term: $dbname:$accession.", [], TRIPAL_WARNING);
-          continue;
-        }
-      }
-      $db = $db[0];
-
-      // now check to see if the accession exists
-      $dbxref = chado_select_record('dbxref', ['dbxref_id'],
-        ['accession' => $accession, 'db_id' => $db->db_id]);
-      if (sizeof($dbxref) == 0) {
-        $this->logMessage("Accession, $accession is missing for reference: $dbname:$accession.", [], TRIPAL_WARNING);
-        continue;
-      }
-      $dbxref = $dbxref[0];
-
-      // now check to see if the cvterm exists
-      $cvterm = chado_select_record('cvterm', ['cvterm_id'], [
-        'dbxref_id' => $dbxref->dbxref_id,
-      ]);
-      // if it doesn't exist in the cvterm table, look for an alternate id
-      if (sizeof($cvterm) == 0) {
-        $cvterm = chado_select_record('cvterm_dbxref', ['cvterm_id'], [
-          'dbxref_id' => $dbxref->dbxref_id,
-        ]);
-        if (sizeof($cvterm) == 0) {
-          $this->logMessage("CV Term is missing for reference: $dbname:$accession.", [], TRIPAL_WARNING);
-          continue;
-        }
-      }
-      $cvterm = $cvterm[0];
-
-
-      // check to see if this feature cvterm already exists
-      $fcvt = chado_select_record('feature_cvterm', ['feature_cvterm_id'],
-        [
-          'cvterm_id' => $cvterm->cvterm_id,
-          'feature_id' => $feature->getID(),
-        ]);
-
-      // now associate this feature with the cvterm if it doesn't already exist
-      if (sizeof($fcvt) == 0) {
-        $values = [
-          'cvterm_id' => $cvterm->cvterm_id,
-          'feature_id' => $feature->getID(),
-          'pub_id' => [
-            'uniquename' => 'null',
-          ],
-        ];
-        $success = chado_insert_record('feature_cvterm', $values, array(
-          'skip_validation' => TRUE,
-        ));
-
-        if (!$success) {
-          $this->logMessage("Failed to insert ontology term: $dbname:$accession.", [], TRIPAL_WARNING);
-          continue;
-        }
-      }
-    }
-  }
-
   /**
    * Create the feature record & link it to it's analysis
    *