| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769 | <?phpfunction tripal_analysis_unigene_init(){   // Add style sheet   drupal_add_css(drupal_get_path('theme', 'tripal').'/css/tripal_analysis_unigene.css');}/****/function tripal_analysis_unigene_node_info() {	$nodes = array();	$nodes['chado_analysis_unigene'] = array(      'name' => t('Analysis: Unigene'),      'module' => 'chado_analysis_unigene',      'description' => t('A unigene assembly constructed from transcriptomic reads.'),      'has_title' => FALSE,      'title_label' => t('Analysis: Unigene'),      'has_body' => FALSE,      'body_label' => t('Unigene Analysis Description'),      'locked' => TRUE	);	return $nodes;}/******************************************************************************* * Set the permission types that the chado module uses.  Essentially we * want permissionis that protect creation, editing and deleting of chado * data objects */function tripal_analysis_unigene_perm(){   return array(      'access chado_analysis_unigene content',      'create chado_analysis_unigene content',      'delete chado_analysis_unigene content',      'edit chado_analysis_unigene content',   );}/******************************************************************************* *  The following function proves access control for users trying to *  perform actions on data managed by this module */function chado_analysis_unigene_access($op, $node, $account){   if ($op == 'create') {      return user_access('create chado_analysis_unigene content', $account);   }   if ($op == 'update') {      if (user_access('edit chado_analysis_unigene content', $account)) {         return TRUE;      }   }   if ($op == 'delete') {      if (user_access('delete chado_analysis_unigene content', $account)) {         return TRUE;      }   }   if ($op == 'view') {      if (user_access('access chado_analysis_unigene content', $account)) {         return TRUE;      }   }   return FALSE;}/****/function chado_analysis_unigene_form ($node){   $unigene = $node->analysis->tripal_analysis_unigene;   // set the form defaults   $unigene_name = $node->unigene_name;   if(!$unigene_name){      $unigene_name = $unigene->unigene_name;   }   $num_reads = $node->num_reads;   if(!$num_reads){      $num_reads = $unigene->num_reads;   }   $avg_length = $node->avg_length;   if(!$avg_length){      $avg_length = $unigene->avg_length;   }   $num_clusters = $node->num_clusters;   if(!$num_clusters){      $num_clusters = $unigene->num_clusters;   }   $num_contigs = $node->num_contigs;   if(!$num_contigs){      $num_contigs = $unigene->num_contigs;   }   $num_singlets = $node->num_singlets;   if(!$num_singlets){      $num_singlets = $unigene->num_singlets;   }   // add in the default fields for an analysis   $form = chado_analysis_form($node);	$form['unigene_name'] = array(      '#title' => t('Unigene Name'),      '#type' => 'textfield',      '#required' => TRUE,      '#description' => t('A distinct name used to identify this unigene'),      '#default_value' => $unigene_name,	);	$form['num_reads'] = array(      '#title' => t('Number of Reads'),      '#type' => 'textfield',      '#required' => FALSE,      '#description' => t('Provide the number of reads, after filtering that were used for input into the assembly'),      '#default_value' => $num_reads,	);	$form['avg_length'] = array(      '#title' => t('Average Contig Length'),      '#type' => 'textfield',      '#required' => FALSE,      '#description' => t('Provide the average contig length.'),      '#default_value' => $avg_length,	);	$form['num_clusters'] = array(      '#title' => t('Number of Clusters'),      '#type' => 'textfield',      '#required' => FALSE,      '#description' => t('Provide the number of clusters generated by the asssembly if a clustering mechanism was used for unigene constructions'),      '#default_value' => $num_clusters,	);	$form['num_contigs'] = array(      '#title' => t('Number of Contigs'),      '#type' => 'textfield',      '#required' => FALSE,      '#description' => t('Provide the number of contigs generated by the assembly'),      '#default_value' => $num_contigs,	);	$form['num_singlets'] = array(      '#title' => t('Number of Singlets'),      '#type' => 'textfield',      '#required' => FALSE,      '#description' => t('Provide the number of singlets remaining in the assembly'),      '#default_value' => $num_singlets,	);   return $form;}/****/function chado_analysis_unigene_insert($node){   // insert the analysis   chado_analysis_insert($node);   // add the unigene name as a property of the anslysis   tripal_analysis_insert_property($node->analysis->analysis_id,'analysis_type','tripal_analysis_unigene');	   tripal_analysis_insert_property($node->analysis->analysis_id,'analysis_unigene_name',$node->unigene_name);	   tripal_analysis_insert_property($node->analysis->analysis_id,'analysis_unigene_num_contigs',$node->num_contigs);	   tripal_analysis_insert_property($node->analysis->analysis_id,'analysis_unigene_num_reads',$node->num_reads);	   tripal_analysis_insert_property($node->analysis->analysis_id,'analysis_unigene_avg_length',$node->avg_length);   tripal_analysis_insert_property($node->analysis->analysis_id,'analysis_unigene_num_clusters',$node->num_clusters);	   tripal_analysis_insert_property($node->analysis->analysis_id,'analysis_unigene_num_singlets',$node->num_clusters);	}/****/function chado_analysis_unigene_update($node){   chado_analysis_update($node);    tripal_analysis_update_property($node->analysis_id,'analysis_unigene_name',$node->unigene_name,1);   tripal_analysis_update_property($node->analysis_id,'analysis_unigene_num_contigs',$node->num_contigs,1);   tripal_analysis_update_property($node->analysis_id,'analysis_unigene_num_reads',$node->num_reads,1);   tripal_analysis_update_property($node->analysis_id,'analysis_unigene_avg_length',$node->avg_length,1);   tripal_analysis_update_property($node->analysis_id,'analysis_unigene_num_clusters',$node->num_clusters,1);   tripal_analysis_update_property($node->analysis_id,'analysis_unigene_num_singlets',$node->num_singlets,1);   }/****/function chado_analysis_unigene_delete($node){  chado_analysis_delete($node);}/****/function chado_analysis_unigene_view ($node, $teaser = FALSE, $page = FALSE) {   // use drupal's default node view:   $node = node_prepare($node, $teaser);   return $node;}/****/function chado_analysis_unigene_load($node){   // load the default set of analysis fields	$additions = chado_analysis_load($node);   // create some variables for easier lookup   $analysis = $additions->analysis;   $analysis_id = $analysis->analysis_id;   // add in the properties   $unigene_name = tripal_analysis_get_property($analysis_id,'analysis_unigene_name');   $num_contigs  = tripal_analysis_get_property($analysis_id,'analysis_unigene_num_contigs');   $num_reads    = tripal_analysis_get_property($analysis_id,'analysis_unigene_num_reads');   $avg_length   = tripal_analysis_get_property($analysis_id,'analysis_unigene_avg_length');   $num_clusters = tripal_analysis_get_property($analysis_id,'analysis_unigene_num_clusters');   $num_singlets = tripal_analysis_get_property($analysis_id,'analysis_unigene_num_singlets');   $analysis->tripal_analysis_unigene->unigene_name = $unigene_name->value;   $analysis->tripal_analysis_unigene->num_contigs = $num_contigs->value;   $analysis->tripal_analysis_unigene->num_reads = $num_reads->value;   $analysis->tripal_analysis_unigene->avg_length = $avg_length->value;   $analysis->tripal_analysis_unigene->num_clusters = $num_clusters->value;   $analysis->tripal_analysis_unigene->num_singlets = $num_singlets->value;   // add in organism information using the materialized view   $sql = "SELECT * FROM {organism_unigene_mview} OUM ".          "  INNER JOIN {organism} O on OUM.organism_id = O.organism_id ".          "WHERE OUM.analysis_id = %d ".          "ORDER BY O.genus, O.species";   $previous_db = tripal_db_set_active('chado');  // use chado database   $organisms = db_query($sql,$analysis_id);   tripal_db_set_active($previous_db);  // now use drupal database   while($organism = db_fetch_object($organisms)){      $sql = "SELECT nid FROM {chado_organism} WHERE organism_id = %d";      $c_org = db_fetch_object(db_query($sql,$organism->organism_id));      $organism->nid = $c_org->nid;      $analysis->tripal_analysis_unigene->organisms[] = $organism;   }   return $additions;}/******************************************************************************* * tripal_analysis_unigene_nodeapi() * HOOK: Implementation of hook_nodeapi() * Display unigene results for allowed node types */function tripal_analysis_unigene_nodeapi(&$node, $op, $teaser, $page) {   switch ($op) {      case 'view':         // Find out which node types for showing the unigene         $types_to_show = variable_get('tripal_analysis_unigene_setting',            array('chado_feature','chado_organism'));         // Abort if this node is not one of the types we should show.         if (in_array($node->type, $types_to_show, TRUE)) {            // Add unigene to the content item if it's not a teaser            if ($teaser) {               return '';            }         	            // add the alignment to the feature search indexing            if($node->build_mode == NODE_BUILD_SEARCH_INDEX){               $node->content['tripal_analysis_unigene_index_version'] = array(						'#value' => theme('tripal_analysis_unigene_search_index',$node),						'#weight' => 4,               );            } else if ($node->build_mode == NODE_BUILD_SEARCH_RESULT) {               $node->content['tripal_analysis_unigene_index_version'] = array(						'#value' => theme('tripal_analysis_unigene_search_result',$node),						'#weight' => 4,               );            } else {               if(strcmp($node->type,'chado_organism')==0){                  $node->content['tripal_organism_unigenes'] = array(					   	'#value' => theme('tripal_organism_unigenes', $node),						'#weight' => 4                  );               }               if(strcmp($node->type,'chado_feature')==0){                  $node->content['tripal_feature_unigenes'] = array(					   	'#value' => theme('tripal_feature_unigenes', $node),						'#weight' => 4                  );               }            }         }      break;      }}/************************************************************************ *  We need to let drupal know about our theme functions and their arguments. *  We create theme functions to allow users of the module to customize the *  look and feel of the output generated in this module */function tripal_analysis_unigene_theme () {   return array(      'tripal_analysis_unigene_search_index' => array (         'arguments' => array('node'),      ),      'tripal_analysis_unigene_search_result' => array (         'arguments' => array('node'),      ),      'tripal_organism_unigenes' => array (         'arguments' => array('node'=> null),         'template' => 'tripal_organism_unigenes',      ),      'tripal_feature_unigenes' => array (         'arguments' => array('node'=> null),         'template' => 'tripal_feature_unigenes',      ),      'tripal_analysis_unigene_base' => array (         'arguments' => array('node'=> null),         'template' => 'tripal_analysis_unigene_base',      ),   );}/******************************************************************************* *   */function tripal_analysis_unigene_preprocess_tripal_organism_unigenes(&$variables){   $node = $variables['node'];   $organism = $node->organism;   $unigenes = tripal_analysis_unigene_load_organism_unigenes($organism);   $node->organism->tripal_analysis_unigene->unigenes =  $unigenes;}/******************************************************************************* *   */function tripal_analysis_unigene_preprocess_tripal_feature_unigenes(&$variables){   $node = $variables['node'];   $feature = $node->feature;   $unigenes = tripal_analysis_unigene_load_feature_unigenes($feature);   $node->feature->tripal_analysis_unigene->unigenes =  $unigenes;}/************************************************************************ *  This function is an extension of the chado_feature_view by providing *  the markup for the feature object THAT WILL BE INDEXED. */function theme_tripal_analysis_unigene_search_index ($node) {   $feature = $node->feature;   $obj_feature = tripal_analysis_unigene_get_alignments($feature);   $alignments = $obj_feature->alignments;   $content = "<strong>";   if(count($alignments) > 0){      // iterate through each alignment      foreach ($alignments as $result){         // EST alignments in chado use an EST_match type to map ESTs to         // contigs and a rank to indicate the major srcfeature.         // We don't want to show EST_matches on the alignment view         // since that doesn't make much sense to the end user.  If this         // is an EST_match and the feature is an EST then we want to show         // the contig in the alignments.  The contig name is part of the         // uniquename in the EST_match         if($node->feature->cvname == 'EST' && $result->cvname == 'EST_match'){            $sql = "SELECT srcfeature_id ".                   "FROM {featureloc} ".                   "WHERE feature_id = $result->feature_id ".                   "ORDER BY rank";            $previous_db = tripal_db_set_active ('chado');            $contig_fid = db_result(db_query($sql));            $sql = "SELECT name FROM {feature} WHERE feature_id = $contig_fid";            $contig_name = db_result(db_query($sql));            tripal_db_set_active($previous_db);            $sql = "SELECT nid ".                   "FROM {chado_feature} ".                   "WHERE feature_id = $contig_fid";            $contig_nid = db_result(db_query($sql));            // Check if the EST exists as a drupal node. If yes, add a link to            // it. If no, just show the name            if ($contig_nid != 0) {               $sql = "SELECT nid FROM {node} WHERE nid=$contig_nid";               $node_exists = db_result(db_query($sql));            }            $content .= "$contig_name " ;         }         elseif($node->feature->cvname == 'contig' && $result->cvname == 'EST_match'){            $sql = "SELECT vid ".                   "FROM {node} ".                   "WHERE title = '$result->feature_name'".                   "ORDER BY vid DESC";            // since the feature name is also the node title we can look it up            $est_node = db_fetch_object(db_query($sql));            $content .= "$result->feature_name ";         }         else {            $content .= "$result->cvname $result->feature_name ";         }      }   }   $content .= "</strong>";   return $content;}/************************************************************************ *  This function is an extension of the chado_feature_view by providing *  the markup for the feature object to show on a search result page. */function theme_tripal_analysis_unigene_search_result ($node) {   $feature = $node->feature;   $obj_feature = tripal_analysis_unigene_get_alignments($feature);   $alignments = $obj_feature->alignments;   $content = "<strong>";   if(count($alignments) > 0){      // iterate through each alignment      foreach ($alignments as $result){         // EST alignments in chado use an EST_match type to map ESTs to         // contigs and a rank to indicate the major srcfeature.         // We don't want to show EST_matches on the alignment view         // since that doesn't make much sense to the end user.  If this         // is an EST_match and the feature is an EST then we want to show         // the contig in the alignments.  The contig name is part of the         // uniquename in the EST_match         if($node->feature->cvname == 'EST' && $result->cvname == 'EST_match'){            $sql = "SELECT srcfeature_id ".                   "FROM {featureloc} ".                   "WHERE feature_id = $result->feature_id ".                   "ORDER BY rank";            $previous_db = tripal_db_set_active ('chado');            $contig_fid = db_result(db_query($sql));            $sql = "SELECT name FROM {feature} WHERE feature_id = $contig_fid";            $contig_name = db_result(db_query($sql));            tripal_db_set_active($previous_db);            $sql = "SELECT nid ".                   "FROM {chado_feature} ".                   "WHERE feature_id = $contig_fid";            $contig_nid = db_result(db_query($sql));            // Check if the EST exists as a drupal node. If yes, add a link to            // it. If no, just show the name            if ($contig_nid != 0) {               $sql = "SELECT nid FROM {node} WHERE nid=$contig_nid";               $node_exists = db_result(db_query($sql));            }            $content .= "Alignment to contig $contig_name. " ;         }         elseif($node->feature->cvname == 'contig' && $result->cvname == 'EST_match'){            $sql = "SELECT vid ".                   "FROM {node} ".                   "WHERE title = '$result->feature_name'".                   "ORDER BY vid DESC";            // since the feature name is also the node title we can look it up            $est_node = db_fetch_object(db_query($sql));            $content .= "Aligned EST: $result->feature_name ";         }         else {            $content .= "Aligned $result->cvname: $result->feature_name ";         }      }   }   $content .= "</strong>";   return $content;}/******************************************************************************* * tripal_analysis_unigene_results () * Prepare unigene result for the feature shown on the page */function theme_tripal_analysis_unigene_feature_alignments($node) {   $feature = $node->feature;   $obj_feature = tripal_analysis_unigene_get_alignments($feature);   $alignments = $obj_feature->alignments;   if(count($alignments) > 0){      $content = "<div id=\"tripal_analysis_unigene_box\" class=\"tripal_unigene-info-box\">";      // we're showing contig alignments in GBrowse so create a link here for      // that if this feature is a contig      if($node->feature->cvname == 'contig'){         $content .= "<div class=\"tripal_expandableBox\">".                     "  <h3>ESTs in this contig</h3>".                     "</div>";         $content .= "<div class=\"tripal_expandableBoxContent\">";      } else {         $content .= "<div class=\"tripal_expandableBox\">".                     "  <h3>Alignments</h3>".                     "</div>";         $content .= "<div class=\"tripal_expandableBoxContent\">";      }      $content .= "".         "<table class=\"tripal_table_horz\">".         "  <tr>".         "    <th>Type</th>".         "    <th>Feature</th>".         "    <th align=\"right\">Position</th>".         "  </tr>";      // iterate through each alignment      foreach ($alignments as $result){         // EST alignments in chado use an EST_match type to map ESTs to         // contigs and a rank to indicate the major srcfeature.         // We don't want to show EST_matches on the alignment view         // since that doesn't make much sense to the end user.  If this         // is an EST_match and the feature is an EST then we want to show         // the contig in the alignments.  The contig name is part of the         // uniquename in the EST_match         if($node->feature->cvname == 'EST' && $result->cvname == 'EST_match'){            $sql = "SELECT srcfeature_id ".                   "FROM {featureloc} ".                   "WHERE feature_id = $result->feature_id ".                   "ORDER BY rank";            $previous_db = tripal_db_set_active ('chado');            $contig_fid = db_result(db_query($sql));            $sql = "SELECT name FROM {feature} WHERE feature_id = $contig_fid";            $contig_name = db_result(db_query($sql));            tripal_db_set_active($previous_db);            $sql = "SELECT nid ".                   "FROM {chado_feature} ".                   "WHERE feature_id = $contig_fid";            $contig_nid = db_result(db_query($sql));            // Check if the EST exists as a drupal node. If yes, add a link to            // it. If no, just show the name            if ($contig_nid != 0) {               $sql = "SELECT nid FROM {node} WHERE nid=$contig_nid";               $node_exists = db_result(db_query($sql));            }            $content .=              "<tr>".              "  <td>Contig</td>".              "  <td>";            if ($node_exists != 0) {               $content .= "<a href=\"".url("node/$contig_nid")."\">".              	     	   "$contig_name</a>";            } else {               $content .= $contig_name;            }            $content .=              "  </td>".              "  <td align=\"right\">".            number_format($result->fmin).                   "-".            number_format($result->fmax).              "  </td>".              "</tr>";         }         elseif($node->feature->cvname == 'contig' &&         $result->cvname == 'EST_match'){            $sql = "SELECT vid ".                   "FROM {node} ".                   "WHERE title = '$result->feature_name'".                   "ORDER BY vid DESC";            // since the feature name is also the node title we can look it up            $est_node = db_fetch_object(db_query($sql));            $content .=              "<tr>".              "  <td>EST</td>".              "  <td>";            //Check if the EST exists as a drupal node before adding a hyperlink            if ($est_node->vid != 0) {               $content .=               	 "<a href=\"".url("node/$est_node->vid")."\">".               $result->feature_name.              	 "</a>";            } else {               $content .= $result->feature_name;            }            $content .=              "  </td>".              "  <td align=\"right\">".            number_format($result->fmin).                   "-".            number_format($result->fmax).              "  </td>".              "</tr>";         }         else {            $content .= "".              "<tr>".              "  <td>$result->cvname</td>".              "  <td>$result->feature_name</td>".              "  <td align=\"right\">$result->fmin</td>".              "  <td align=\"right\">$result->fmax</td>".              "  <td align=\"right\">$result->strand</td>".              "</tr>";         }      }      $content .= "</table>";      /* if this is a contig then get the alignment       if($node->feature->cvname == 'contig'){       // get the directory prefix       $prefix = preg_replace("/^(\d*)\d{3}$/","$1",$node->feature_id);       if(!$prefix){       $prefix = '0';       }       $data_url = variable_get('chado_feature_data_url','sites/default/files/data');       $fh = fopen("$data_url/misc/$prefix/$node->feature->feature_id/alignment.txt", 'r');       if($fh){       $content .= "<b>Alignment:</b><div class=\"tripal_feature_assembly_alignment\"><pre>";       while(!feof($fh)){       $content .= fgets($fh);       }       $content .="</pre></div>";       }       fclose($fh);       }       */      $content .= "</div></div>";   }   return $content;}/*********************************************************************************/function tripal_analysis_unigene_get_alignments($map) {   // get the alignments for this feature   $sql = "SELECT F.name as feature_name, FL.fmin, FL.fmax, FL.strand, ".          "  FL.phase, CVT.name as cvname, F.feature_id, F.uniquename, ".          "  FL.featureloc_id ".          "FROM {featureloc} FL ".          "  INNER JOIN Feature F ON F.feature_id = FL.feature_id ".          "  INNER JOIN Cvterm CVT ON CVT.cvterm_id = F.type_id ".          "WHERE srcfeature_id = %d AND ".          "  NOT(CVT.name = 'match' or CVT.name = 'match_part') ".          "ORDER BY FL.fmin, FL.fmax";   $previous_db = tripal_db_set_active('chado');   $results = db_query($sql,$map->feature_id);   $alignments = array();   $i=0;   while($subfeature = db_fetch_object($results)){      $alignments[$i++] = $subfeature;   }   $additions->alignments = $alignments;   /* get the GO Terms    $sql = "SELECT DISTINCT * FROM {go_results_mview} ".    "WHERE feature_id = %d";    $results = db_query($sql,$map->feature_id);    $go_terms = array();    $i=0;    while($term = db_fetch_object($results)){    $go_terms[$i++] = $term;    }    $additions->go_terms = $go_terms;    // get the feature properties    $sql = "SELECT FP.value,FP.rank,CVT.name,CVT.definition ".    "FROM {featureprop} FP".    "  INNER JOIN Cvterm CVT ".    "    ON FP.type_id = CVT.cvterm_id ".    "WHERE feature_id = %d";    $results = db_query($sql,$map->feature_id);    $properties = array();    $i=0;    while($property = db_fetch_object($results)){    $properties[$i++] = $property;    }    $additions->properties = $properties;    */   tripal_db_set_active($previous_db);   return $additions;}/**************************************************************************/   function tripal_analysis_unigene_load_organism_unigenes($organism){   // get information about this assemblies and add it to the items in this node   $sql = "SELECT * FROM {organism_unigene_mview} OUM ".          "  INNER JOIN {analysis} A  ON A.analysis_id = OUM.analysis_id ".          "WHERE OUM.organism_id = %d ".          "ORDER BY A.timeexecuted DESC";   $previous_db = tripal_db_set_active('chado');  // use chado database   $results = db_query($sql,$organism->organism_id);   tripal_db_set_active($previous_db);  // now use drupal database   $unigenes = array();   $i=0;   $sql = "SELECT nid FROM {chado_analysis} WHERE analysis_id = %d";   while($unigene = db_fetch_object($results)){      $analysis_id = $unigene->analysis_id;      $c_node = db_fetch_object(db_query($sql,$analysis_id));      if($c_node){           $unigene->nid = $c_node->nid;      }      // add in the properties      $unigene_name = tripal_analysis_get_property($analysis_id,'analysis_unigene_name');      $num_contigs  = tripal_analysis_get_property($analysis_id,'analysis_unigene_num_contigs');      $num_reads    = tripal_analysis_get_property($analysis_id,'analysis_unigene_num_reads');      $num_clusters = tripal_analysis_get_property($analysis_id,'analysis_unigene_num_clusters');      $num_singlets = tripal_analysis_get_property($analysis_id,'analysis_unigene_num_singlets');            $unigene->unigene_name = $unigene_name->value;      $unigene->num_reads = $num_reads->value;      $unigene->num_clusters = $num_clusters->value;      $unigene->num_contigs = $num_contigs->value;           $unigene->num_singlets = $num_singlets->value;      $unigenes[$i++] = $unigene;   }   return $unigenes;}/**************************************************************************/   function tripal_analysis_unigene_load_feature_unigenes($feature){   // first get all the unigene analyses for this organism   $sql = "SELECT * FROM {organism_unigene_mview} OUM ".          "  INNER JOIN {analysis} A  ON A.analysis_id = OUM.analysis_id ".          "WHERE OUM.organism_id = %d ".          "ORDER BY A.timeexecuted DESC";   $previous_db = tripal_db_set_active('chado');  // use chado database   $results = db_query($sql,$feature->organism_id->organism_id);   tripal_db_set_active($previous_db);  // now use drupal database   // iterate through the unigenes and find those that use this feature   $unigenes = array();   $i=0;   $sql = "SELECT nid FROM {chado_analysis} WHERE analysis_id = %d";   while($unigene = db_fetch_object($results)){      $analysis_id = $unigene->analysis_id;      // check if this feature is present in the unigene      $values = array(         'feature_id' => $feature->feature_id,         'analysis_id' => $analysis_id,      );      $hasFeature = tripal_core_chado_select('analysisfeatureprop',array('*'),$values);            // if the feature is present then get information about it      if(sizeof($hasFeature) > 0){         // see if there is a drupal node for this unigene         $c_node = db_fetch_object(db_query($sql,$analysis_id));         if($c_node){              $unigene->nid = $c_node->nid;         }         // add in the properties         $unigene_name = tripal_analysis_get_property($analysis_id,'analysis_unigene_name');         $singlet = tripal_core_get_property('analysisfeature',$analysis_id,'singlet','tripal');                         $unigene->unigene_name = $unigene_name->value;             $unigene->singlet = $num_singlets->value;         $unigenes[$i++] = $unigene;      }   }   return $unigenes;}/******************************************************************************* * Tripal Unigene administrative setting form. This function is called by * tripal_analysis module which asks for an admin form to show on the page */function tripal_analysis_unigene_get_settings() {   // Get an array of node types with internal names as keys   $options = node_get_types('names');   // Add 'chado_feature' to allowed content types for showing unigene results   $allowedoptions ['chado_feature'] = "Show 'ESTs in this contig' on feature pages";   $allowedoptions ['chado_organism'] = "Show assemblies on organism pages";   $form['description'] = array(       '#type' => 'item',       '#value' => t("This option allows user to display the unigene assembly ".          "information. For contigs, this would include an alignment and for ".          "organisms this would be a list of assemblies. Check the box to ".          "enable the display of unigene information. Uncheck to disable."),		 '#weight' => 0,   );   $form['tripal_analysis_unigene_setting'] = array(      '#type' => 'checkboxes',      '#options' => $allowedoptions,      '#default_value'=>variable_get('tripal_analysis_unigene_setting',array()),   );   $settings->form = $form;   $settings->title = "Tripal Unigene";   return $settings;}
 |