db_id)); $db_name = $parser->displayname; $is_genbank = $parser->genbank_style; $regex_hit_id = $parser->regex_hit_id; $regex_hit_def = $parser->regex_hit_def; $regex_hit_accession = $parser->regex_hit_accession; // set default if regular expressions have not been specified if(!$regex_hit_id){ $regex_hit_id = '/^(.*?)\s.*$/'; } else { $regex_hit_id = '/'.$regex_hit_id.'/'; } if(!$regex_hit_def){ $regex_hit_def = '/^.*?\s(.*)$/'; } else { $regex_hit_def = '/'.$regex_hit_def.'/'; } if(!$regex_hit_accession){ $regex_hit_accession = '/^(.*?)\s.*$/'; } else { $regex_hit_accession = '/'.$regex_hit_accession.'/'; } $html_out .= "

$db_name

"; // Load the file. This XML file should be an extract // of the original XML file with only a single iteration. // An iteration is essentially all the hits for a single // query sequence. $xml_output = simplexml_load_string($xml_string); $iteration = ''; // new XML file parser has added the feature name within tags. if ($xml_output->getName() == 'Iteration') { foreach ($xml_output->children() as $xml_tag) { if ($xml_tag->getName() == 'Iteration_query-def') { // Here we show the feature name again to check if we pull the correct data $html_out .= "Query: $xml_tag
"; } else if ($xml_tag->getName() == 'Iteration_hits') { $iteration = $xml_tag; } } // This is for the file parsed by the old parser } else { $iteration = $xml_output; } // now run through the blast hits/hsps of this iteration // and generate the rows of the table foreach($iteration->children() as $hits){ $best_evalue = 0; foreach($hits->children() as $hit){ $best_evalue = 0; $element_name = $hit->getName(); if($element_name == 'Hit_id'){ // if parsing "name, acc, desc" from three tags (1/3) if ($is_genbank) { $hit_name = $hit; } } else if($element_name == 'Hit_def'){ if($is_genbank){ $description = $hit; } else { $accession = preg_replace($regex_hit_accession,"$1",$hit); $hit_name = preg_replace($regex_hit_id,"$1",$hit); $description = preg_replace($regex_hit_def,"$1",$hit); } } else if($element_name == 'Hit_accession'){ // if parsing "name, acc, desc" from three tags (3/3) if ($is_genbank){ $accession = $hit; } // now run through each HSP for this hit } } $html_out .= "

$hit_name
"; $html_out .= "$accession
"; $html_out .= "$description
"; $hsp_html_out = ''; } return $html_out; } /******************************************************************************* * Parse Blast XML Output file into analysisfeatureprop table */ function tripal_analysis_blast_parseXMLFile ($analysis_id, $blastdb, $blastfile, $no_parsed, $blastfile_ext, $query_re, $query_type, $query_uniquename, $is_concat,$job_id,$is_concat) { // Prepare log $filename = preg_replace("/.*\/(.*)/", "$1", $blastfile); $logfile = file_directory_path() . "/tripal/tripal_analysis_blast/load_$filename.log"; $log = fopen($logfile, 'a'); // append parsing results to log file // If user input a file (e.g. blast.xml) if (is_file($blastfile)) { tripal_analysis_blast_parseXML($analysis_id, $blastdb, $blastfile, $no_parsed, $blastfile_ext, $query_re, $query_type, $query_uniquename, $job_id,1,$log,$is_concat); } // Otherwise, $blastfile is a directory. Iterate through all xml files in it else { if(!$blastfile_ext){ $blastfile_ext = 'xml'; } $dir_handle = @opendir($blastfile) or die("Unable to open $blastfile"); $pattern = sql_regcase($blastfile . "/*.$blastfile_ext"); $total_files = count(glob($pattern)); print "$total_files file(s) to be parsed.\n"; $interval = intval($total_files * 0.01); $no_file = 0; // Parsing all files in the directory while ($file = readdir($dir_handle)) { if(preg_match("/^.*\.$blastfile_ext/i",$file)){ tripal_analysis_blast_parseXML($analysis_id, $blastdb, "$blastfile/$file", $no_parsed, $blastfile_ext, $query_re, $query_type, $query_uniquename, $job_id,0,$log); // Set job status if ($no_file % $interval == 0) { $percentage = (int) (($no_file / $total_files) * 100); tripal_job_set_progress($job_id, $percentage); print $percentage."% "; } } $no_file ++; } } print "Done.\nSuccessful and failed entries have been saved in the log file:\n $logfile\n"; fwrite($log, "\n"); fclose($log); return; } /******************************************************************************** * */ function tripal_analysis_blast_parseXML($analysis_id, $blastdb, $blastfile, $no_parsed, $blastfile_ext, $query_re, $query_type, $query_uniquename, $job_id,$set_progress,$log,$is_concat){ // Parsing started print "Parsing File:".$blastfile." ...\n"; fwrite($log, date("D M j G:i:s Y").". Loading $blastfile\n"); if ($no_parsed == 'all') { print "Parsing all hits...\n"; } else { print "Parsing top $no_parsed hits...\n"; } // Get cvterm_id for 'analysis_blast_output_iteration_hits' which is required // for inserting into the analysisfeatureprop table $previous_db = tripal_db_set_active('chado'); // use chado database $sql = "SELECT CVT.cvterm_id ". "FROM {cvterm} CVT ". " INNER JOIN {cv} ON cv.cv_id = CVT.cv_id ". "WHERE CVT.name = 'analysis_blast_output_iteration_hits' ". " AND CV.name = 'tripal'"; $type_id = db_result(db_query($sql)); // Load the XML file. if (!is_readable($blastfile)) { exit("Could not open the XML file '$blastfile'. Check that file exists and that permissions are correct.\n"); } // if the file is a set of concatenated files then we want to split it up // and run each one individually if($is_concat){ // generate a temporary file name $temp = tempnam(sys_get_temp_dir(),'blast_'); print "Blast XML file is concatenated. Breaking apart and parsing each individually: $temp\n"; $out_fh = fopen($temp,"w"); // run through the lines of the XML file $in_fh = fopen($blastfile,"r"); while(!feof($in_fh)){ $line = fgets($in_fh); $line = trim($line); if(!$line){ continue; } fwrite($out_fh,"$line\n"); // if the line begins a set of blast output XML then parse the // preceeding set. if(preg_match("/<\/BlastOutput>/",$line)){ // close the temp file fclose($out_fh); // now parse this new temp file tripal_analysis_blast_parseXML($analysis_id, $blastdb, $temp, $no_parsed, $blastfile_ext, $query_re, $query_type, $query_uniquename, $job_id,$set_progress,$log,0); // reopen the file for the next set of results $out_fh = fopen($temp,"w"); } } fclose($in_fh); return; } $blastoutput = simplexml_load_file($blastfile); if(!$blastoutput){ exit("Could not read the XML file '$blastfile'. Check that the XML file is not corrupted.\n"); } $no_iterations = 0; foreach($blastoutput->children() as $tmp) { if ($tmp->getName() == 'BlastOutput_iterations') { foreach($tmp->children() as $itr) { if ($itr->getName() == 'Iteration') { $no_iterations ++; } } } } print "$no_iterations iterations to be processed.\n"; $interval = intval($no_iterations * 0.01); $idx_iterations = 0; foreach ($blastoutput->children() as $blastoutput_tags) { if ($blastoutput_tags->getName() == 'BlastOutput_iterations') { foreach($blastoutput_tags->children() as $iterations) { if ($iterations->getName() == 'Iteration') { // Set job status $idx_iterations ++; if ($set_progress and $idx_iterations % $interval == 0) { $percentage = (int) (($idx_iterations / $no_iterations) * 100); tripal_job_set_progress($job_id, $percentage); print $percentage."% "; } // now run through the blast hits/hsps of this iteration // and generate the rows of the table $feature_id = 0; foreach($iterations->children() as $iteration_tags) { // Match chado feature uniquename with // and get the feature_id $featurenaem_xml = ''; if($iteration_tags->getName() == 'Iteration_query-def'){ // If the Iteration_query-def in the format provided by the // user's regular expression if ($query_re and preg_match("/$query_re/", $iteration_tags, $matches)) { $feature = $matches[1]; } // If not in above format then pull up to the first space else { if (preg_match('/^(.*?)\s.*$/', $iteration_tags, $matches)) { $feature = $matches[1]; } // if no match up to the first space then just use the entire string else { $feature = $iteration_tags; } } if(!$feature and $query_re){ print "ERROR: cannot find feature for $iteration_tags using the regular expression: $query_re\n"; exit; } // now find the feature in chado $select = array(); if($query_uniquename){ $select['uniquename'] = $feature; } else { $select['name'] = $feature; } if($query_type){ $select['type_id'] = array( 'cv_id' => array( 'name' => 'sequence' ), 'name' => $query_type, ); } $feature_arr = tripal_core_chado_select('feature',array('feature_id'),$select); if(count($feature_arr) > 1){ fwrite($log, "Ambiguous: '$feature' matches more than one feature and is being skipped.\n"); continue; } if(count($feature_arr) == 0){ fwrite($log, "Failed: '$feature' cannot find a matching feature in the database.\n"); continue; } $feature_id = $feature_arr[0]->feature_id; fwrite($log, "Matched: '$feature' => feature id:".$feature_id); $featurename_xml = $iteration_tags->asXML(); } // Insert Iteration_hits into analysisfeatureprop and analysisfeature tables else if($iteration_tags->getName() == 'Iteration_hits'){ if ($feature_id) { // Make sure this iteration doesn't exist in analysisfeatureprop. If it does, update but not insert $sql = "SELECT analysisfeatureprop_id FROM {analysisfeatureprop} AFP ". "INNER JOIN analysisfeature AF ON AF.analysisfeature_id = AFP.analysisfeature_id ". "WHERE feature_id=%d ". "AND analysis_id=%d ". "AND type_id=%d "; $result = db_query($sql, $feature_id, $analysis_id, $type_id); $analysisfeatureprop = db_fetch_object($result); $xml_content = "\n".$featurename_xml."\n"; // parse all hits if ($no_parsed == 'all') { $xml_content .= $iteration_tags->asXML(); // parse only top hits } else { $counter = 0; $xml_content .= "\n"; foreach ($iteration_tags->children() As $hit) { if ($counter < $no_parsed) { $xml_content .= $hit->asXML(); } else { break; } $counter ++; } $xml_content .= ""; } $xml_content .= "\n"; // If this Iteration_hits already exists, update it if ($analysisfeatureprop) { $sql = "UPDATE {analysisfeatureprop} ". "SET value = '%s' ". "WHERE analysisfeatureprop_id = %d "; db_query($sql, $xml_content, $analysisfeatureprop->analysisfeatureprop_id); fwrite($log, " (Update)\n"); // write to log // Otherwise, insert the Iteration_hits into analysisfeature and analysisfeatureprop tables } else { //------------------------------------------------------ // Insert into analysisfeature table //------------------------------------------------------ $sql = "INSERT INTO {analysisfeature} (feature_id, analysis_id) ". "VALUES (%d, %d)"; db_query ($sql, $feature_id, $analysis_id); // Get the newly inserted analysisfeature_id $sql = "SELECT analysisfeature_id FROM {analysisfeature} WHERE feature_id = %d AND analysis_id = %d"; $analysisfeature_id = db_result(db_query($sql, $feature_id, $analysis_id)); //------------------------------------------------------ // Insert into analysisfeatureprop table //------------------------------------------------------ $sql = "INSERT INTO {analysisfeatureprop} (analysisfeature_id, type_id, value, rank)". "VALUES (%d, %d, '%s', %d)"; db_query($sql, $analysisfeature_id, $type_id, $xml_content, '0'); fwrite($log, " (Insert)\n"); // write to log } } } } } } } } tripal_db_set_active ($previous_db); // Use drupal database } /******************************************************************************** * */ function tripal_analysis_blast_get_result_object($xml_string,$db,$max,$feature_id, $analysis) { $blast_object = new stdClass(); // Get the parser using db_id $sql = "SELECT * FROM {tripal_analysis_blast} WHERE db_id = %d"; $parser = db_fetch_object(db_query($sql, $db->db_id)); $db_name = $parser->displayname; $is_genbank = $parser->genbank_style; $regex_hit_id = $parser->regex_hit_id; $regex_hit_def = $parser->regex_hit_def; $regex_hit_accession = $parser->regex_hit_accession; // set default if regular expressions have not been specified if(!$regex_hit_id){ $regex_hit_id = '/^(.*?)\s.*$/'; } else { $regex_hit_id = '/'.$regex_hit_id.'/'; } if(!$regex_hit_def){ $regex_hit_def = '/^.*?\s(.*)$/'; } else { $regex_hit_def = '/'.$regex_hit_def.'/'; } if(!$regex_hit_accession){ $regex_hit_accession = '/^(.*?)\s.*$/'; } else { $regex_hit_accession = '/'.$regex_hit_accession.'/'; } // Get analysis information $blast_object->analysis = $analysis; $blast_object->db = $db; if (!$db_name) { $blast_object->title = $analysis->name; } else { $blast_object->title = $db_name; } // Find node id for the analysis $ana_nid = db_result(db_query("SELECT nid FROM {chado_analysis} WHERE analysis_id = %d", $analysis->analysis_id)); $analysis->nid = $ana_nid; // Load the file. This XML file should be an extract // of the original XML file with only a single iteration. // An iteration is essentially all the hits for a single // query sequence. $xml_output = simplexml_load_string($xml_string); $iteration = ''; // new XML file parser has added the feature name within tags. if ($xml_output->getName() == 'Iteration') { foreach ($xml_output->children() as $xml_tag) { if ($xml_tag->getName() == 'Iteration_query-def') { // Here we show the feature name again to check if we pull the correct data $blast_object->xml_tag = $xml_tag; } else if ($xml_tag->getName() == 'Iteration_hits') { $iteration = $xml_tag; } } // This is for the file parsed by the old parser } else { $iteration = $xml_output; } $number_hits = 0; foreach($iteration->children() as $hits){ $number_hits ++; } // add the links for updating blast info using Ajax $blast_object->max = $max; $blast_object->number_hits = $number_hits; $blast_object->feature_id = $feature_id; $hits_array = array(); $hit_count = 0; foreach($iteration->children() as $hits){ $hsp_array = array(); $counter = 0; foreach($hits->children() as $hit){ $best_evalue = 0; $best_identity = 0; $best_len = 0; $element_name = $hit->getName(); if($element_name == 'Hit_id'){ // if parsing "name, acc, desc" from three tags (1/3) if ($is_genbank) { $hit_name = $hit; } } else if($element_name == 'Hit_def'){ if($is_genbank){ $description = $hit; } else { $accession = preg_replace($regex_hit_accession,"$1",$hit); $hit_name = preg_replace($regex_hit_id,"$1",$hit); $description = preg_replace($regex_hit_def,"$1",$hit); } } else if($element_name == 'Hit_accession'){ // if parsing "name, acc, desc" from three tags (3/3) if ($is_genbank){ $accession = $hit; } // now run through each HSP for this hit } else if($element_name == 'Hit_hsps'){ foreach($hit->children() as $hsp){ foreach($hsp->children() as $hsp_info){ $element_name = $hsp_info->getName(); if($element_name == 'Hsp_num'){ $hsp_num = $hsp_info; } if($element_name == 'Hsp_bit-score'){ $hsp_bit_score = $hsp_info; } if($element_name == 'Hsp_score'){ $hsp_score = $hsp_info; } if($element_name == 'Hsp_evalue'){ $hsp_evalue = $hsp_info; // use the first evalue for this set of HSPs // as the best evalue. This get's shown as // info for the overall match. if(!$best_evalue){ $best_evalue = $hsp_evalue; } } if($element_name == 'Hsp_query-from'){ $hsp_query_from = $hsp_info; } if($element_name == 'Hsp_query-to'){ $hsp_query_to = $hsp_info; } if($element_name == 'Hsp_hit-from'){ $hsp_hit_from = $hsp_info; } if($element_name == 'Hsp_hit-to'){ $hsp_hit_to = $hsp_info; } if($element_name == 'Hsp_query-frame'){ $hsp_query_frame = $hsp_info; } if($element_name == 'Hsp_identity'){ $hsp_identity = $hsp_info; // use the first evalue for this set of HSPs // as the best evalue. This get's shown as // info for the overall match. if(!$best_identity){ $best_identity = $hsp_identity; } } if($element_name == 'Hsp_positive'){ $hsp_positive = $hsp_info; } if($element_name == 'Hsp_align-len'){ $hsp_align_len = $hsp_info; // use the first evalue for this set of HSPs // as the best evalue. This get's shown as // info for the overall match. if(!$best_len){ $best_len = $hsp_align_len; } } if($element_name == 'Hsp_qseq'){ $hsp_qseq = $hsp_info; } if($element_name == 'Hsp_hseq'){ $hsp_hseq = $hsp_info; } if($element_name == 'Hsp_midline'){ $hsp_midline = $hsp_info; } } $hsp_content = array(); $hsp_content['hsp_num'] = $hsp_num; $hsp_content['bit_score'] = $hsp_bit_score; $hsp_content['score'] = $hsp_score; $hsp_content['evalue'] = $hsp_evalue; $hsp_content['query_frame'] = $hsp_query_frame; $hsp_content['qseq'] = $hsp_qseq; $hsp_content['midline'] = $hsp_midline; $hsp_content['hseq'] = $hsp_hseq; $hsp_content['hit_from'] = $hsp_hit_from; $hsp_content['hit_to'] = $hsp_hit_to; $hsp_content['identity'] = $hsp_identity; $hsp_content['align_len'] = $hsp_align_len; $hsp_content['positive'] = $hsp_positive; $hsp_content['query_from'] = $hsp_query_from; $hsp_content['query_to'] = $hsp_query_to; $hsp_array[$counter] = $hsp_content; $counter ++; } } } $arrowr_url = url(drupal_get_path('theme', 'tripal')."/images/arrow_r.png"); $hits_array[$hit_count]['arrowr_url'] = $arrowr_url; $hits_array[$hit_count]['accession'] = $accession; $hits_array[$hit_count]['hit_name'] = $hit_name; if($accession && $db->urlprefix){ $hits_array[$hit_count]['hit_url'] = "$db->urlprefix$accession"; } else { // Test if this is another feature in the database $sql = "SELECT feature_id FROM {feature} WHERE uniquename = '%s'"; $previous_db = db_set_active('chado'); $hit_feature_id = db_result(db_query($sql, $hit_name)); db_set_active($previous_db); // If it is, add link to that feature if ($hit_feature_id) { $hits_array[$hit_count]['hit_url'] = "ID$hit_feature_id"; } } $hits_array[$hit_count]['best_evalue'] = $best_evalue; $percent_identity = number_format($best_identity/$best_len*100, 2); $hits_array[$hit_count]['percent_identity'] = $percent_identity; $hits_array[$hit_count]['description'] = $description; $hits_array[$hit_count]['hsp'] = $hsp_array; $hit_count ++; // if we've hit the maximum number of hits then return if($max > 0 && $hit_count >= $max){ break; } } $blast_object->hits_array = $hits_array; return $blast_object; } /******************************************************************************** * Parse the best hit to generate the best hit homology report */ function tripal_analysis_blast_parse_best_hit ($analysis_id) { // Select all features for this blast analysis, and save them to the 'featureSet' array $sql = "SELECT feature_id FROM {analysisfeature} AF WHERE analysis_id = %d"; $previous_db = tripal_db_set_active('chado'); $result = db_query($sql, $analysis_id); $featureSet = array (); $counter = 0; while ($feature = db_fetch_object($result)) { $featureSet [$counter] = $feature->feature_id; $counter ++; } // Get analysis information including 'Time', 'Name', and 'DB Settings' $sql = "SELECT value, name, to_char(timeexecuted, 'MM-DD-YYYY') AS time FROM {analysis} A INNER JOIN {analysisprop} AP ON A.analysis_id = AP.analysis_id WHERE A.analysis_id = %d AND type_id= (SELECT cvterm_id FROM {cvterm} WHERE name = 'analysis_blast_settings')"; $analysis = db_fetch_object(db_query($sql, $analysis_id)); // Parse the blast settings $blastsettings = explode("|", $analysis->value); $db_id = $blastsettings [0]; // Get the xml description parser using db_id tripal_db_set_active($previous_db); $sql = "SELECT * FROM {tripal_analysis_blast} WHERE db_id = %d"; $parser = db_fetch_object(db_query($sql, $db_id)); $db_name = $parser->displayname; $is_genbank = $parser->genbank_style; $regex_hit_id = $parser->regex_hit_id; $regex_hit_def = $parser->regex_hit_def; $regex_hit_accession = $parser->regex_hit_accession; // set default description parser if regular expressions have not been specified if(!$regex_hit_id){ $regex_hit_id = '/^(.*?)\s.*$/'; } else { $regex_hit_id = '/'.$regex_hit_id.'/'; } if(!$regex_hit_def){ $regex_hit_def = '/^.*?\s(.*)$/'; } else { $regex_hit_def = '/'.$regex_hit_def.'/'; } if(!$regex_hit_accession){ $regex_hit_accession = '/^(.*?)\s.*$/'; } else { $regex_hit_accession = '/'.$regex_hit_accession.'/'; } $interval = intval($counter * 0.01); for ($i = 0; $i < $counter; $i ++) { if ($i !=0 && $i % $interval == 0) { $percentage = (int) ($i / $counter * 100); tripal_job_set_progress($job_id, $percentage); print $percentage."% "; } $sql = "SELECT value FROM {analysisfeatureprop} AFP INNER JOIN {analysisfeature} AF ON AFP.analysisfeature_id = AF.analysisfeature_id WHERE analysis_id = %d AND feature_id = %d AND type_id = (SELECT cvterm_id FROM cvterm WHERE name='analysis_blast_output_iteration_hits' AND cv_id = (SELECT cv_id FROM cv WHERE name='tripal'))"; $previous_db = tripal_db_set_active('chado'); $xml_output = simplexml_load_string(db_result(db_query($sql, $analysis_id, $featureSet[$i]))); $iteration = ''; // new XML file parser has added the feature name within tags. if ($xml_output->getName() == 'Iteration') { $query = ""; foreach ($xml_output->children() as $xml_tag) { if ($xml_tag->getName() == 'Iteration_query-def') { // Here we show the feature name again to check if we pull the correct data $query = $xml_tag; } else if ($xml_tag->getName() == 'Iteration_hits') { $iteration = $xml_tag; } } // This is for the file parsed by the old parser } else { $iteration = $xml_output; } $number_hits = 0; foreach($iteration->children() as $hits){ $number_hits ++; } $query = explode(" ", $query) ; $query = $query [0]; if ($number_hits == 0) { continue; } // now run through the blast hits/hsps of this iteration // and generate the rows of the table foreach($iteration->children() as $hits){ $hit_count++; foreach($hits->children() as $hit){ $best_evalue = 0; $best_identity = 0; $best_len = 0; $element_name = $hit->getName(); if($element_name == 'Hit_id'){ // if parsing "name, acc, desc" from three tags (1/3) if ($is_genbank) { $hit_name = $hit; } } else if($element_name == 'Hit_def'){ if($is_genbank){ $description = $hit; } else { $accession = preg_replace($regex_hit_accession,"$1",$hit); $hit_name = preg_replace($regex_hit_id,"$1",$hit); $description = preg_replace($regex_hit_def,"$1",$hit); } } else if($element_name == 'Hit_accession'){ // if parsing "name, acc, desc" from three tags (3/3) if ($is_genbank){ $accession = $hit; } // now run through each HSP for this hit } else if($element_name == 'Hit_hsps'){ foreach($hit->children() as $hsp){ foreach($hsp->children() as $hsp_info){ $element_name = $hsp_info->getName(); if($element_name == 'Hsp_num'){ $hsp_num = $hsp_info; } if($element_name == 'Hsp_bit-score'){ $hsp_bit_score = $hsp_info; } if($element_name == 'Hsp_score'){ $hsp_score = $hsp_info; } if($element_name == 'Hsp_evalue'){ $hsp_evalue = $hsp_info; // use the first evalue for this set of HSPs // as the best evalue. This get's shown as // info for the overall match. if(!$best_evalue){ $best_evalue = $hsp_evalue; } } if($element_name == 'Hsp_query-from'){ $hsp_query_from = $hsp_info; } if($element_name == 'Hsp_query-to'){ $hsp_query_to = $hsp_info; } if($element_name == 'Hsp_hit-from'){ $hsp_hit_from = $hsp_info; } if($element_name == 'Hsp_hit-to'){ $hsp_hit_to = $hsp_info; } if($element_name == 'Hsp_query-frame'){ $hsp_query_frame = $hsp_info; } if($element_name == 'Hsp_identity'){ $hsp_identity = $hsp_info; // use the first evalue for this set of HSPs // as the best evalue. This get's shown as // info for the overall match. if(!$best_identity){ $best_identity = $hsp_identity; } } if($element_name == 'Hsp_positive'){ $hsp_positive = $hsp_info; } if($element_name == 'Hsp_align-len'){ $hsp_align_len = $hsp_info; // use the first evalue for this set of HSPs // as the best evalue. This get's shown as // info for the overall match. if(!$best_len){ $best_len = $hsp_align_len; } } if($element_name == 'Hsp_qseq'){ $hsp_qseq = $hsp_info; } if($element_name == 'Hsp_hseq'){ $hsp_hseq = $hsp_info; } if($element_name == 'Hsp_midline'){ $hsp_midline = $hsp_info; } } } } } // Get analysisfeature_id $sql = "SELECT analysisfeature_id FROM {analysisfeature} WHERE analysis_id = %d AND feature_id = %d"; $af_id = db_result(db_query($sql, $analysis_id, $featureSet[$i])); // Get type_id $sql = "SELECT cvterm_id FROM {cvterm} WHERE name = '%s' AND cv_id = (SELECT cv_id FROM {cv} WHERE name = 'tripal')"; $type_id = db_result(db_query($sql, 'analysis_blast_besthit_query')); $sql_test ="SELECT analysisfeatureprop_id FROM {analysisfeatureprop} WHERE analysisfeature_id = $af_id AND type_id = %d"; $test_afpid = db_result(db_query($sql_test, $type_id)); //Insert only if this blast query not exists. if (!$test_afpid) { $afp_sql = "INSERT INTO {analysisfeatureprop} (analysisfeature_id, type_id, value, rank) VALUES (%d, %d, '%s', 0)"; //$query; db_query($afp_sql, $af_id, $type_id, $query); //$hit_name; $type_id = db_result(db_query($sql, 'analysis_blast_besthit_match')); db_query($afp_sql, $af_id, $type_id, $hit_name); //$description; $type_id = db_result(db_query($sql, 'analysis_blast_besthit_description')); db_query($afp_sql, $af_id, $type_id, $description); //$best_evalue; $type_id = db_result(db_query($sql, 'analysis_blast_besthit_evalue')); $e_digit = explode("e-", $best_evalue); if (count($e_digit) == 2) { $evalue_shown = number_format($e_digit [0],1); $best_evalue = $evalue_shown."e-".$e_digit[1]; } db_query($afp_sql, $af_id, $type_id, $best_evalue); //$best_identity; $type_id = db_result(db_query($sql, 'analysis_blast_besthit_identity')); $percent_identity = number_format($best_identity/$best_len*100, 1); db_query($afp_sql, $af_id, $type_id, $percent_identity); //$best_len; $type_id = db_result(db_query($sql, 'analysis_blast_besthit_length')); db_query($afp_sql, $af_id, $type_id, $best_len); // Otherwise, update all instead } else { $afp_sql = "UPDATE {analysisfeatureprop} SET analysisfeature_id = %d, type_id = %d, value = '%s', rank = 0 WHERE analysisfeatureprop_id = %d"; //$query; db_query($afp_sql, $af_id, $type_id, $query, $test_afpid); //$hit_name; $type_id = db_result(db_query($sql, 'analysis_blast_besthit_match')); $test_afpid = db_result(db_query($sql_test, $type_id)); db_query($afp_sql, $af_id, $type_id, $hit_name, $test_afpid); //$description; $type_id = db_result(db_query($sql, 'analysis_blast_besthit_description')); $test_afpid = db_result(db_query($sql_test, $type_id)); db_query($afp_sql, $af_id, $type_id, $description, $test_afpid); //$best_evalue; $type_id = db_result(db_query($sql, 'analysis_blast_besthit_evalue')); $test_afpid = db_result(db_query($sql_test, $type_id)); $e_digit = explode("e-", $best_evalue); if (count($e_digit) == 2) { $evalue_shown = number_format($e_digit [0],1); $best_evalue = $evalue_shown."e-".$e_digit[1]; } db_query($afp_sql, $af_id, $type_id, $best_evalue, $test_afpid); //$best_identity; $type_id = db_result(db_query($sql, 'analysis_blast_besthit_identity')); $test_afpid = db_result(db_query($sql_test, $type_id)); $percent_identity = number_format($best_identity/$best_len*100, 1); db_query($afp_sql, $af_id, $type_id, $percent_identity, $test_afpid); //$best_len; $type_id = db_result(db_query($sql, 'analysis_blast_besthit_length')); $test_afpid = db_result(db_query($sql_test, $type_id)); db_query($afp_sql, $af_id, $type_id, $best_len, $test_afpid); } tripal_db_set_active($previous_db); break; } } print "100%\n"; return; }