ソースを参照

Fixed KEGG bug with loading new files

spficklin 13 年 前
コミット
651bb01b83
1 ファイル変更31 行追加21 行削除
  1. 31 21
      tripal_analysis_kegg/tripal_analysis_kegg.module

+ 31 - 21
tripal_analysis_kegg/tripal_analysis_kegg.module

@@ -236,17 +236,18 @@ function chado_analysis_kegg_form ($node){
 	);
    $form['kegg']['keggjob'] = array(
       '#type' => 'checkbox',
-      '#title' => t('Submit a job to parse the kegg output into analysisfeatureprop table'),
-      '#description' => t('Note: features associated with the KAAS results must '.
+      '#title' => t('Submit a job to parse the kegg output into Chado'),
+      '#description' => t('Note: features used in the KAAS analysis must '.
                           'exist in chado before parsing the file. Otherwise, KEGG '.
                           'results that cannot be linked to a feature will be '.
                           'discarded.'),
    );
-   $form['kegg']['keggkeywordjob'] = array(
+/*   $form['kegg']['keggkeywordjob'] = array(
       '#type' => 'checkbox',
       '#title' => t('Submit a job to extract keywords from the KEGG html output'),
       '#description' => t('Note: KEGG results are only searchable after keywords are extracted. Do not run this twice if you have already done so.'),
 	);
+*/
    return $form;
 }
 /**
@@ -280,11 +281,12 @@ function chado_analysis_kegg_insert($node){
 */
 function chado_analysis_kegg_submit_job($node){
    global $user;
+   global $base_url;
 
    if($node->keggjob) {
       $job_args[0] = $node->analysis_id;
       $job_args[1] = $node->hierfile;
-      $job_args[2] = base_path();
+      $job_args[2] = $base_url;
       $job_args[3] = $node->query_re;
       $job_args[4] = $node->query_type;
       $job_args[5] = $node->query_uniquename;
@@ -329,7 +331,7 @@ function chado_analysis_kegg_update($node){
    tripal_analysis_update_property($node->analysis_id,'analysis_kegg_query_uniquename',$node->query_uniquename,1);	
 
      
-   // Add a job if the user wants to parse the html output
+   // Add a job if the user wants to parse the output
    chado_analysis_kegg_submit_job($node);
 }
 /*******************************************************************************
@@ -401,13 +403,16 @@ function tripal_analysis_kegg_parseHierFile ($analysis_id, $hierfile, $base_path
    $total_files = count(glob($hierdir . '/*.*'));
    print "There are $total_files keg file(s).\n";
    $interval = intval($total_files * 0.01);
+   if($interval > 1){
+      $interval = 1;
+   }
    $no_file = 0;
 
-   // Remove the analysis feature this analysis
+   // Remove the analysis features for this analysis
    // we will rebuild them from just this parsing
    $select =  array('analysis_id' => $analysis_id);
    if(!tripal_core_chado_delete('analysisfeature',$select)){
-      print "ERROR: Cannot prepare the analysis for adding features\n";
+      print "ERROR: Unable to clear previous results.\n";
       exit;
    }
 
@@ -418,7 +423,7 @@ function tripal_analysis_kegg_parseHierFile ($analysis_id, $hierfile, $base_path
          if ($no_file % $interval == 0) {
             $percentage = (int) ($no_file / $total_files * 100);
             tripal_job_set_progress($job_id, $percentage);
-            print $percentage."% ";
+            print $percentage."%\r";
          }
          $no_file ++;
          
@@ -428,10 +433,10 @@ function tripal_analysis_kegg_parseHierFile ($analysis_id, $hierfile, $base_path
 
          # add the item to the database
          if(count($results) > 0){
-            //------------------------------------------------------
-            // Insert into analysisprop table
-            //------------------------------------------------------
-            // Remove the property if it already exists we'll replace it
+            print "Loading results for '$heirarchy'\n";
+            // We want to insert the KEGG heirarchy results into the
+            // analysisprop table. We insert a separate record for each 
+            // heirarchy.  But we need to clear out any prevous results first.
             $sql = "DELETE
                     FROM {analysisprop}
                     WHERE analysis_id = %d
@@ -454,6 +459,10 @@ function tripal_analysis_kegg_parseHierFile ($analysis_id, $hierfile, $base_path
                     INNER JOIN CV ON CVT.cv_id = CV.cv_id
                     WHERE CV.name = 'tripal' AND CVT.name = '%s'";
          	$brite_cvterm_id = db_result(db_query($sql, $heirarchy)); 
+            if(!$brite_cvterm_id){
+               print "ERROR: Cannot find cvterm for '$heirarchy'.\n";
+               exit; 
+            }
 
             // convert the array to text for saving in the database
          	// Replace all single quote as HTML code before insert
@@ -467,7 +476,10 @@ function tripal_analysis_kegg_parseHierFile ($analysis_id, $hierfile, $base_path
             $sql = "INSERT INTO {analysisprop} (analysis_id, type_id, value) 
                     VALUES (%d, %d,'$content')";   
             
-            db_query($sql, $analysis_id, $brite_cvterm_id);
+            if(!db_query($sql, $analysis_id, $brite_cvterm_id)){
+               print "ERROR: Cannot add '$heirarchy' results to the database.\n";
+               exit;
+            }
             tripal_db_set_active($previous_db); // Use drupal database
 
             
@@ -533,13 +545,12 @@ function tripal_analysis_kegg_parse_kegg_file ($file, &$heirarchy, $analysis_id,
 
       // the first line of the file provides the BRITE heirarchy name
       if(preg_match("/#.*nbsp;\s(.*)<\/h2>$/",$line,$matches)){
-         // For each BRITE heirarchy file we'll add an analysisprop where we'll
-         // store the report.  If the CVTerm doesn't exist then add it.
          $heirarchy = $matches[1];
+         // get the CVterm for the heirarchy.  If it doesn't exist then add it
          $select = array('name' => $heirarchy,'cv_id' => array('name' => 'tripal'));
          $cvt_arr = tripal_core_chado_select('cvterm',array('cvterm_id'),$select);
          if (count($cvt_arr) == 0) {
-            tripal_add_cvterms($type, "KEGG BRITE term: $type");
+            tripal_add_cvterms($heirarchy, "KEGG BRITE term: $heirarchy");
             $cvt_arr = tripal_core_chado_select('cvterm',array('cvterm_id'),$select);
          }
          $heirarchy_id = $cvt_arr[0]->cvterm_id;
@@ -702,11 +713,11 @@ function tripal_analysis_kegg_check_line_handle_feature($query_re,
 
       if(count($feature_arr) > 1){
 		   print "Ambiguous: '$feature' matches more than one feature and is being skipped.\n";
-			continue;
+			return;
       }
       if(count($feature_arr) == 0){
-			print "Failed: '$feature' cannot find a matching feature in the database.\n";
-         continue;
+			print "Failed: '$feature' cannot find a matching feature in the databasef.  RE: $query_re; LINE: $fname\n";
+         return;
       }
       $feature_id = $feature_arr[0]->feature_id;
 
@@ -723,8 +734,7 @@ function tripal_analysis_kegg_check_line_handle_feature($query_re,
 
          // Add link to each matched feature
          if($nid){
-            $value = preg_replace("/^(.*?)(;\s*\<a)/","<a id=\"tripal_kegg_feature_links\" target=\"_blank\" href=\"".url("node/$nid")."\">"."$1"."</a>"."$2",$value);
-
+            $value = preg_replace("/^(.*?)(;\s*\<a)/","<a id=\"tripal_kegg_feature_links\" target=\"_blank\" href=\"$base_path/node/$nid\">"."$1"."</a>"."$2",$value);
          }
          // if we have a feature match then add this to our results array
          return $value;