|
@@ -422,7 +422,11 @@ function tripal_feature_load_gff3($gff_file, $organism_id, $analysis_id,
|
|
|
// check to see if we have FASTA section, if so then set the variable
|
|
|
// to start parsing
|
|
|
if (preg_match('/^##FASTA/i', $line)) {
|
|
|
- tripal_feature_load_gff_fasta($fh, $interval, $num_read, $intv_read, $line_num);
|
|
|
+ if($remove) {
|
|
|
+ // we're done because this is a delete operation so break out of the loop.
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ tripal_feature_load_gff3_fasta($fh, $interval, $num_read, $intv_read, $line_num);
|
|
|
continue;
|
|
|
}
|
|
|
// if the ##sequence-region line is present then we want to add a new feature
|
|
@@ -604,17 +608,16 @@ function tripal_feature_load_gff3($gff_file, $organism_id, $analysis_id,
|
|
|
// all types. If not we'll error out. This test is only necessary if
|
|
|
// if the landmark and the uniquename are different. If they are the same
|
|
|
// then this is the information for the landmark
|
|
|
- if (strcmp($landmark, $attr_uniquename) != 0 ) {
|
|
|
+ if (!$remove and strcmp($landmark, $attr_uniquename) != 0 ) {
|
|
|
$select = array(
|
|
|
'organism_id' => $organism_id,
|
|
|
'uniquename' => $landmark,
|
|
|
);
|
|
|
$columns = array('count(*) as num_landmarks');
|
|
|
$options = array('statement_name' => 'sel_feature_numland');
|
|
|
- $count = tripal_core_chado_select('feature', $columns, $select, $options);
|
|
|
-
|
|
|
- if (!$count or $count[0]->num_landmarks == 0) {
|
|
|
- watchdog('T_gff3_loader', "The landmark '%landmark' cannot be found for this organism. ".
|
|
|
+ $count = tripal_core_chado_select('feature', $columns, $select, $options);
|
|
|
+ if (!$count or count($count) == 0 or $count[0]->num_landmarks == 0) {
|
|
|
+ watchdog('T_gff3_loader', "The landmark '%landmark' cannot be found for this organism (" . $organism->genus . " " . $organism->species . ") " .
|
|
|
"Please add the landmark and then retry the import of this GFF3 ".
|
|
|
"file", array('%landmark' => $landmark), WATCHDOG_ERROR);
|
|
|
return '';
|
|
@@ -699,127 +702,10 @@ function tripal_feature_load_gff3($gff_file, $organism_id, $analysis_id,
|
|
|
// add parent relationships
|
|
|
if (array_key_exists('Parent', $tags)) {
|
|
|
tripal_feature_load_gff3_parents($feature, $cvterm, $tags['Parent'], $organism_id, $fmin);
|
|
|
- }
|
|
|
-
|
|
|
+ }
|
|
|
// add target relationships
|
|
|
if (array_key_exists('Target', $tags)) {
|
|
|
- // format is: "target_id start end [strand]", where strand is optional and may be "+" or "-"
|
|
|
- $matched = preg_match('/^(.*?)\s+(\d+)\s+(\d+)(\s+[\+|\-])*$/', trim($tags['Target'][0]), $matches);
|
|
|
-
|
|
|
- // the organism and type of the target may also be specified as an attribute. If so, then get that
|
|
|
- // information
|
|
|
- $gff_target_organism = array_key_exists('target_organism', $tags) ? $tags['target_organism'][0] : '';
|
|
|
- $gff_target_type = array_key_exists('target_type', $tags) ? $tags['target_type'][0] : '';
|
|
|
-
|
|
|
- // if we have matches and the Target is in the correct format then load the alignment
|
|
|
- if ($matched) {
|
|
|
- $target_feature = $matches[1];
|
|
|
- $start = $matches[2];
|
|
|
- $end = $matches[3];
|
|
|
- // if we have an optional strand, convert it to a numeric value.
|
|
|
- if ($matches[4]) {
|
|
|
- if (preg_match('/^\+$/', trim($matches[4]))) {
|
|
|
- $target_strand = 1;
|
|
|
- }
|
|
|
- elseif (preg_match('/^\-$/', trim($matches[4]))) {
|
|
|
- $target_strand = -1;
|
|
|
- }
|
|
|
- else {
|
|
|
- $target_strand = 0;
|
|
|
- }
|
|
|
- }
|
|
|
- else {
|
|
|
- $target_strand = 0;
|
|
|
- }
|
|
|
-
|
|
|
- $target_fmin = $start - 1;
|
|
|
- $target_fmax = $end;
|
|
|
- if ($end < $start) {
|
|
|
- $target_fmin = $end - 1;
|
|
|
- $target_fmax = $start;
|
|
|
- }
|
|
|
-
|
|
|
- // default the target organism to be the value passed into the function, but if the GFF
|
|
|
- // file species the target organism then use that instead.
|
|
|
- $t_organism_id = $target_organism_id;
|
|
|
- if ($gff_target_organism) {
|
|
|
- // get the genus and species
|
|
|
- $success = preg_match('/^(.*?):(.*?)$/', $gff_target_organism, $matches);
|
|
|
- if ($success) {
|
|
|
- $values = array(
|
|
|
- 'genus' => $matches[1],
|
|
|
- 'species' => $matches[2],
|
|
|
- );
|
|
|
- $options = array('statement_name' => 'sel_organism_gesp');
|
|
|
- $torganism = tripal_core_chado_select('organism', array('organism_id'), $values, $options);
|
|
|
- if (count($torganism) == 1) {
|
|
|
- $t_organism_id = $torganism[0]->organism_id;
|
|
|
- }
|
|
|
- else {
|
|
|
- watchdog('T_gff3_loader', "Cannot find organism for target %target.",
|
|
|
- array('%target' => $gff_target_organism), WATCHDOG_WARNING);
|
|
|
- $t_organism_id = '';
|
|
|
- }
|
|
|
- }
|
|
|
- else {
|
|
|
- watchdog('T_gff3_loader', "The target_organism attribute is improperly formatted: %target.
|
|
|
- It should be target_organism=genus:species.",
|
|
|
- array('%target' => $gff_target_organism), WATCHDOG_WARNING);
|
|
|
- $t_organism_id = '';
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // default the target type to be the value passed into the function, but if the GFF file
|
|
|
- // species the target type then use that instead
|
|
|
- $t_type_id = '';
|
|
|
- if ($target_type) {
|
|
|
- $values = array(
|
|
|
- 'name' => $target_type,
|
|
|
- 'cv_id' => array(
|
|
|
- 'name' => 'sequence',
|
|
|
- )
|
|
|
- );
|
|
|
- $options = array('statement_name' => 'sel_cvterm_nacv');
|
|
|
- $type = tripal_core_chado_select('cvterm', array('cvterm_id'), $values, $options);
|
|
|
- if (count($type) == 1) {
|
|
|
- $t_type_id = $type[0]->cvterm_id;
|
|
|
- }
|
|
|
- else {
|
|
|
- watchdog('T_gff3_loader', "The target type does not exist in the sequence ontology: %type. ",
|
|
|
- array('%type' => $target_type), WATCHDOG_ERROR);
|
|
|
- exit;
|
|
|
- }
|
|
|
- }
|
|
|
- if ($gff_target_type) {
|
|
|
- $values = array(
|
|
|
- 'name' => $gff_target_type,
|
|
|
- 'cv_id' => array(
|
|
|
- 'name' => 'sequence',
|
|
|
- )
|
|
|
- );
|
|
|
- $options = array('statement_name' => 'sel_cvterm_nacv');
|
|
|
- $type = tripal_core_chado_select('cvterm', array('cvterm_id'), $values, $options);
|
|
|
- if (count($type) == 1) {
|
|
|
- $t_type_id = $type[0]->cvterm_id;
|
|
|
- }
|
|
|
- else {
|
|
|
- watchdog('T_gff3_loader', "The target_type attribute does not exist in the sequence ontology: %type. ",
|
|
|
- array('%type' => $gff_target_type), WATCHDOG_WARNING);
|
|
|
- $t_type_id = '';
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // we want to add a featureloc record that uses the target feature as the srcfeature (landmark)
|
|
|
- // and the landmark as the feature.
|
|
|
- tripal_feature_load_gff3_featureloc($feature, $organism, $target_feature, $target_fmin,
|
|
|
- $target_fmax, $target_strand, $phase, $attr_fmin_partial, $attr_fmax_partial, $attr_residue_info,
|
|
|
- $attr_locgroup, $t_type_id, $t_organism_id, $create_target, TRUE);
|
|
|
- }
|
|
|
- // the target attribute is not correctly formatted
|
|
|
- else {
|
|
|
- watchdog('T_gff3_loader', "Could not add 'Target' alignment as it is improperly formatted: '%target'",
|
|
|
- array('%target' => $tags['Target'][0]), WATCHDOG_ERROR);
|
|
|
- }
|
|
|
+ tripal_feature_load_gff3_target($feature, $tags, $target_organism_id, $target_type, $create_target, $attr_locgroup);
|
|
|
}
|
|
|
// add gap information. This goes in simply as a property
|
|
|
if (array_key_exists('Gap', $tags)) {
|
|
@@ -833,16 +719,13 @@ function tripal_feature_load_gff3($gff_file, $organism_id, $analysis_id,
|
|
|
tripal_feature_load_gff3_property($feature, 'Note', $value);
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
// add the Derives_from relationship (e.g. polycistronic genes).
|
|
|
if (array_key_exists('Derives_from', $tags)) {
|
|
|
tripal_feature_load_gff3_derives_from($feature, $tags['Derives_from'][0], $organism);
|
|
|
}
|
|
|
-
|
|
|
// add in the GFF3_source dbxref so that GBrowse can find the feature using the source column
|
|
|
$source_ref = array('GFF_source:' . $source);
|
|
|
tripal_feature_load_gff3_dbxref($feature, $source_ref);
|
|
|
-
|
|
|
// add any additional attributes
|
|
|
if ($attr_others) {
|
|
|
foreach ($attr_others as $tag_name => $values) {
|
|
@@ -856,88 +739,90 @@ function tripal_feature_load_gff3($gff_file, $organism_id, $analysis_id,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- print "\nSetting ranks of children...\n";
|
|
|
-
|
|
|
- // get features in a relationship that are also children of an alignment
|
|
|
- $sql = "SELECT DISTINCT F.feature_id, F.organism_id, F.type_id,
|
|
|
- F.uniquename, FL.strand
|
|
|
- FROM tripal_gff_temp TGT
|
|
|
- INNER JOIN feature F ON TGT.feature_id = F.feature_id
|
|
|
- INNER JOIN feature_relationship FR ON FR.object_id = TGT.feature_id
|
|
|
- INNER JOIN cvterm CVT ON CVT.cvterm_id = FR.type_id
|
|
|
- INNER JOIN featureloc FL ON FL.feature_id = F.feature_id
|
|
|
- WHERE CVT.name = 'part_of'";
|
|
|
- $parents = chado_query($sql);
|
|
|
-
|
|
|
- // build and prepare the SQL for selecting the children relationship
|
|
|
- $sql = "SELECT DISTINCT FR.feature_relationship_id, FL.fmin, FR.rank
|
|
|
- FROM feature_relationship FR
|
|
|
- INNER JOIN featureloc FL on FL.feature_id = FR.subject_id";
|
|
|
- if (!$connection) {
|
|
|
- $sql .= "WHERE FR.object_id = %d ".
|
|
|
- "ORDER BY FL.fmin ASC ";
|
|
|
- }
|
|
|
- else {
|
|
|
- $sql = "PREPARE sel_gffchildren (int) AS " . $sql . " WHERE FR.object_id = \$1 ORDER BY FL.fmin ASC";
|
|
|
- }
|
|
|
- if (!tripal_core_is_sql_prepared('sel_gffchildren')) {
|
|
|
- $success = tripal_core_chado_prepare('sel_gffchildren', $sql, array('int'));
|
|
|
- if (!$success) {
|
|
|
- watchdog("T_gff3_loader", "Cannot prepare statement 'sel_gffchildren' and cannot set children ranks.",
|
|
|
- array(), WATCHDOG_WARNING);
|
|
|
- return 0;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // now set the rank of any parent/child relationships. The order is based
|
|
|
- // on the fmin. The start rank is 1. This allows features with other
|
|
|
- // relationships to be '0' (the default), and doesn't interfer with the
|
|
|
- // ordering defined here.
|
|
|
- while ($parent = db_fetch_object($parents)) {
|
|
|
+ if (!$remove) {
|
|
|
+ print "\nSetting ranks of children...\n";
|
|
|
|
|
|
- // get the children
|
|
|
- if ($connection) {
|
|
|
- $result = chado_query('EXECUTE sel_gffchildren (%d)', $parent->feature_id);
|
|
|
+ // get features in a relationship that are also children of an alignment
|
|
|
+ $sql = "SELECT DISTINCT F.feature_id, F.organism_id, F.type_id,
|
|
|
+ F.uniquename, FL.strand
|
|
|
+ FROM tripal_gff_temp TGT
|
|
|
+ INNER JOIN feature F ON TGT.feature_id = F.feature_id
|
|
|
+ INNER JOIN feature_relationship FR ON FR.object_id = TGT.feature_id
|
|
|
+ INNER JOIN cvterm CVT ON CVT.cvterm_id = FR.type_id
|
|
|
+ INNER JOIN featureloc FL ON FL.feature_id = F.feature_id
|
|
|
+ WHERE CVT.name = 'part_of'";
|
|
|
+ $parents = chado_query($sql);
|
|
|
+
|
|
|
+ // build and prepare the SQL for selecting the children relationship
|
|
|
+ $sql = "SELECT DISTINCT FR.feature_relationship_id, FL.fmin, FR.rank
|
|
|
+ FROM feature_relationship FR
|
|
|
+ INNER JOIN featureloc FL on FL.feature_id = FR.subject_id";
|
|
|
+ if (!$connection) {
|
|
|
+ $sql .= "WHERE FR.object_id = %d ".
|
|
|
+ "ORDER BY FL.fmin ASC ";
|
|
|
}
|
|
|
else {
|
|
|
- $result = chado_query($sql, $parent->feature_id);
|
|
|
+ $sql = "PREPARE sel_gffchildren (int) AS " . $sql . " WHERE FR.object_id = \$1 ORDER BY FL.fmin ASC";
|
|
|
}
|
|
|
-
|
|
|
- // build an array of the children
|
|
|
- $children = array();
|
|
|
- while ($child = db_fetch_object($result)) {
|
|
|
- $children[] = $child;
|
|
|
+ if (!tripal_core_is_sql_prepared('sel_gffchildren')) {
|
|
|
+ $success = tripal_core_chado_prepare('sel_gffchildren', $sql, array('int'));
|
|
|
+ if (!$success) {
|
|
|
+ watchdog("T_gff3_loader", "Cannot prepare statement 'sel_gffchildren' and cannot set children ranks.",
|
|
|
+ array(), WATCHDOG_WARNING);
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- // the children list comes sorted in ascending fmin
|
|
|
- // but if the parent is on the reverse strand we need to
|
|
|
- // reverse the order of the children.
|
|
|
- if ($parent->strand == -1) {
|
|
|
- arsort($children);
|
|
|
- }
|
|
|
-
|
|
|
- // first set the ranks to a negative number so that we don't
|
|
|
- // get a duplicate error message when we try to change any of them
|
|
|
- $rank = -1;
|
|
|
- foreach ($children as $child) {
|
|
|
- $match = array('feature_relationship_id' => $child->feature_relationship_id);
|
|
|
- $options = array('statement_name' => 'upd_featurerelationship_rank');
|
|
|
- $values = array('rank' => $rank);
|
|
|
- tripal_core_chado_update('feature_relationship', $match, $values, $options);
|
|
|
- $rank--;
|
|
|
- }
|
|
|
- // now set the rank correctly. The rank should start at 0.
|
|
|
- $rank = 0;
|
|
|
- foreach ($children as $child) {
|
|
|
- $match = array('feature_relationship_id' => $child->feature_relationship_id);
|
|
|
- $options = array('statement_name' => 'upd_featurerelationship_rank');
|
|
|
- $values = array('rank' => $rank);
|
|
|
- //print "Was: " . $child->rank . " now $rank ($parent->strand)\n" ;
|
|
|
- tripal_core_chado_update('feature_relationship', $match, $values, $options);
|
|
|
- $rank++;
|
|
|
+ // now set the rank of any parent/child relationships. The order is based
|
|
|
+ // on the fmin. The start rank is 1. This allows features with other
|
|
|
+ // relationships to be '0' (the default), and doesn't interfer with the
|
|
|
+ // ordering defined here.
|
|
|
+ while ($parent = db_fetch_object($parents)) {
|
|
|
+
|
|
|
+ // get the children
|
|
|
+ if ($connection) {
|
|
|
+ $result = chado_query('EXECUTE sel_gffchildren (%d)', $parent->feature_id);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ $result = chado_query($sql, $parent->feature_id);
|
|
|
+ }
|
|
|
+
|
|
|
+ // build an array of the children
|
|
|
+ $children = array();
|
|
|
+ while ($child = db_fetch_object($result)) {
|
|
|
+ $children[] = $child;
|
|
|
+ }
|
|
|
+
|
|
|
+ // the children list comes sorted in ascending fmin
|
|
|
+ // but if the parent is on the reverse strand we need to
|
|
|
+ // reverse the order of the children.
|
|
|
+ if ($parent->strand == -1) {
|
|
|
+ arsort($children);
|
|
|
+ }
|
|
|
+
|
|
|
+ // first set the ranks to a negative number so that we don't
|
|
|
+ // get a duplicate error message when we try to change any of them
|
|
|
+ $rank = -1;
|
|
|
+ foreach ($children as $child) {
|
|
|
+ $match = array('feature_relationship_id' => $child->feature_relationship_id);
|
|
|
+ $options = array('statement_name' => 'upd_featurerelationship_rank');
|
|
|
+ $values = array('rank' => $rank);
|
|
|
+ tripal_core_chado_update('feature_relationship', $match, $values, $options);
|
|
|
+ $rank--;
|
|
|
+ }
|
|
|
+ // now set the rank correctly. The rank should start at 0.
|
|
|
+ $rank = 0;
|
|
|
+ foreach ($children as $child) {
|
|
|
+ $match = array('feature_relationship_id' => $child->feature_relationship_id);
|
|
|
+ $options = array('statement_name' => 'upd_featurerelationship_rank');
|
|
|
+ $values = array('rank' => $rank);
|
|
|
+ //print "Was: " . $child->rank . " now $rank ($parent->strand)\n" ;
|
|
|
+ tripal_core_chado_update('feature_relationship', $match, $values, $options);
|
|
|
+ $rank++;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
// commit the transaction
|
|
|
if ($use_transaction) {
|
|
|
tripal_db_commit_transaction();
|
|
@@ -1830,7 +1715,7 @@ function tripal_feature_load_gff3_property($feature, $property, $value) {
|
|
|
/*
|
|
|
*
|
|
|
*/
|
|
|
-function tripal_feature_load_gff_fasta($fh, $interval, &$num_read, &$intv_read, &$line_num) {
|
|
|
+function tripal_feature_load_gff3_fasta($fh, $interval, &$num_read, &$intv_read, &$line_num) {
|
|
|
print "Loading FASTA sequences\n";
|
|
|
$residues = '';
|
|
|
$sql = "
|
|
@@ -1909,4 +1794,127 @@ function tripal_feature_load_gff_fasta($fh, $interval, &$num_read, &$intv_read,
|
|
|
$options = array('statement_name' => 'upd_feature_re');
|
|
|
tripal_core_chado_update('feature', $match, $values, $options);
|
|
|
}
|
|
|
+}
|
|
|
+
|
|
|
+/*
|
|
|
+ *
|
|
|
+ */
|
|
|
+function tripal_feature_load_gff3_target($feature, $tags, $target_organism_id, $target_type, $create_target, $attr_locgroup) {
|
|
|
+ // format is: "target_id start end [strand]", where strand is optional and may be "+" or "-"
|
|
|
+ $matched = preg_match('/^(.*?)\s+(\d+)\s+(\d+)(\s+[\+|\-])*$/', trim($tags['Target'][0]), $matches);
|
|
|
+
|
|
|
+ // the organism and type of the target may also be specified as an attribute. If so, then get that
|
|
|
+ // information
|
|
|
+ $gff_target_organism = array_key_exists('target_organism', $tags) ? $tags['target_organism'][0] : '';
|
|
|
+ $gff_target_type = array_key_exists('target_type', $tags) ? $tags['target_type'][0] : '';
|
|
|
+
|
|
|
+ // if we have matches and the Target is in the correct format then load the alignment
|
|
|
+ if ($matched) {
|
|
|
+ $target_feature = $matches[1];
|
|
|
+ $start = $matches[2];
|
|
|
+ $end = $matches[3];
|
|
|
+ // if we have an optional strand, convert it to a numeric value.
|
|
|
+ if ($matches[4]) {
|
|
|
+ if (preg_match('/^\+$/', trim($matches[4]))) {
|
|
|
+ $target_strand = 1;
|
|
|
+ }
|
|
|
+ elseif (preg_match('/^\-$/', trim($matches[4]))) {
|
|
|
+ $target_strand = -1;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ $target_strand = 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ $target_strand = 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ $target_fmin = $start - 1;
|
|
|
+ $target_fmax = $end;
|
|
|
+ if ($end < $start) {
|
|
|
+ $target_fmin = $end - 1;
|
|
|
+ $target_fmax = $start;
|
|
|
+ }
|
|
|
+
|
|
|
+ // default the target organism to be the value passed into the function, but if the GFF
|
|
|
+ // file species the target organism then use that instead.
|
|
|
+ $t_organism_id = $target_organism_id;
|
|
|
+ if ($gff_target_organism) {
|
|
|
+ // get the genus and species
|
|
|
+ $success = preg_match('/^(.*?):(.*?)$/', $gff_target_organism, $matches);
|
|
|
+ if ($success) {
|
|
|
+ $values = array(
|
|
|
+ 'genus' => $matches[1],
|
|
|
+ 'species' => $matches[2],
|
|
|
+ );
|
|
|
+ $options = array('statement_name' => 'sel_organism_gesp');
|
|
|
+ $torganism = tripal_core_chado_select('organism', array('organism_id'), $values, $options);
|
|
|
+ if (count($torganism) == 1) {
|
|
|
+ $t_organism_id = $torganism[0]->organism_id;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ watchdog('T_gff3_loader', "Cannot find organism for target %target.",
|
|
|
+ array('%target' => $gff_target_organism), WATCHDOG_WARNING);
|
|
|
+ $t_organism_id = '';
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ watchdog('T_gff3_loader', "The target_organism attribute is improperly formatted: %target.
|
|
|
+ It should be target_organism=genus:species.",
|
|
|
+ array('%target' => $gff_target_organism), WATCHDOG_WARNING);
|
|
|
+ $t_organism_id = '';
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // default the target type to be the value passed into the function, but if the GFF file
|
|
|
+ // species the target type then use that instead
|
|
|
+ $t_type_id = '';
|
|
|
+ if ($target_type) {
|
|
|
+ $values = array(
|
|
|
+ 'name' => $target_type,
|
|
|
+ 'cv_id' => array(
|
|
|
+ 'name' => 'sequence',
|
|
|
+ )
|
|
|
+ );
|
|
|
+ $options = array('statement_name' => 'sel_cvterm_nacv');
|
|
|
+ $type = tripal_core_chado_select('cvterm', array('cvterm_id'), $values, $options);
|
|
|
+ if (count($type) == 1) {
|
|
|
+ $t_type_id = $type[0]->cvterm_id;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ watchdog('T_gff3_loader', "The target type does not exist in the sequence ontology: %type. ",
|
|
|
+ array('%type' => $target_type), WATCHDOG_ERROR);
|
|
|
+ exit;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if ($gff_target_type) {
|
|
|
+ $values = array(
|
|
|
+ 'name' => $gff_target_type,
|
|
|
+ 'cv_id' => array(
|
|
|
+ 'name' => 'sequence',
|
|
|
+ )
|
|
|
+ );
|
|
|
+ $options = array('statement_name' => 'sel_cvterm_nacv');
|
|
|
+ $type = tripal_core_chado_select('cvterm', array('cvterm_id'), $values, $options);
|
|
|
+ if (count($type) == 1) {
|
|
|
+ $t_type_id = $type[0]->cvterm_id;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ watchdog('T_gff3_loader', "The target_type attribute does not exist in the sequence ontology: %type. ",
|
|
|
+ array('%type' => $gff_target_type), WATCHDOG_WARNING);
|
|
|
+ $t_type_id = '';
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // we want to add a featureloc record that uses the target feature as the srcfeature (landmark)
|
|
|
+ // and the landmark as the feature.
|
|
|
+ tripal_feature_load_gff3_featureloc($feature, $organism, $target_feature, $target_fmin,
|
|
|
+ $target_fmax, $target_strand, $phase, $attr_fmin_partial, $attr_fmax_partial, $attr_residue_info,
|
|
|
+ $attr_locgroup, $t_type_id, $t_organism_id, $create_target, TRUE);
|
|
|
+ }
|
|
|
+ // the target attribute is not correctly formatted
|
|
|
+ else {
|
|
|
+ watchdog('T_gff3_loader', "Could not add 'Target' alignment as it is improperly formatted: '%target'",
|
|
|
+ array('%target' => $tags['Target'][0]), WATCHDOG_ERROR);
|
|
|
+ }
|
|
|
}
|