Ver Fonte

correcting coords

Robb, Sofia há 7 anos atrás
pai
commit
fc2ebeee35
2 ficheiros alterados com 51 adições e 25 exclusões
  1. 7 1
      theme/blast_report.tpl.php
  2. 44 24
      theme/blast_report_alignment_row.tpl.php

+ 7 - 1
theme/blast_report.tpl.php

@@ -224,11 +224,17 @@ $no_hits = TRUE;
               $hit_img = generate_blast_hit_image($target_name, $Hsp_bit_score, $hit_hsps,
               $hit_img = generate_blast_hit_image($target_name, $Hsp_bit_score, $hit_hsps,
                                        $target_size, $query_size, $q_name, $hit_name_short);
                                        $target_size, $query_size, $q_name, $hit_name_short);
 
 
+
+              // get blast program
+              $blast_cmd_arr = explode(' ',trim($blast_job->blast_cmd));
+              $blast_cmd_program =  $blast_cmd_arr[0];
+
+
               // State what should be in the alignment row for theme_table() later.
               // State what should be in the alignment row for theme_table() later.
               $alignment_row = array(
               $alignment_row = array(
                 'data' => array(
                 'data' => array(
                   'arrow' => array(
                   'arrow' => array(
-                    'data' => theme('blast_report_alignment_row', array('HSPs' => $HSPs, 'hit_visualization' => $hit_img)),
+                    'data' => theme('blast_report_alignment_row', array('HSPs' => $HSPs, 'hit_visualization' => $hit_img, 'blast_program' => $blast_cmd_program)),
                     'colspan' => 5,
                     'colspan' => 5,
                   ),
                   ),
                 ),
                 ),

+ 44 - 24
theme/blast_report_alignment_row.tpl.php

@@ -49,32 +49,52 @@
         $coord_length = strlen($hsp['Hsp_hit-from']) + 3;
         $coord_length = strlen($hsp['Hsp_hit-from']) + 3;
         $coord_length = (strlen($hsp['Hsp_query-to']) + 3 > $coord_length) ? strlen($hsp['Hsp_query-to']) + 3 : $coord_length;
         $coord_length = (strlen($hsp['Hsp_query-to']) + 3 > $coord_length) ? strlen($hsp['Hsp_query-to']) + 3 : $coord_length;
 
 
+         // use blast program type to determine multiplier for coords
+         $query_multiplier = 1;
+         $hit_multiplier = 1;
+         // only need to do this when the query and sbj are of different types
+         if ($blast_program == 'tblastn'){
+           $hit_multiplier = 3;
+         } elseif ($blast_program == 'blastx'){
+           $query_multiplier = 3;
+         }
+
+         $h_from = $hsp['Hsp_hit-from'];
+         $h_to = $hsp['Hsp_hit-to'];
+         $q_from = $hsp['Hsp_query-from'];
+         $q_to = $hsp['Hsp_query-to'];
+         if ( $h_from > $h_to){
+           $h_to = $hsp['Hsp_hit-from'];
+           $h_from = $hsp['Hsp_hit-to'];
+         }
+         if ( $q_from > $q_to){
+           $q_to = $hsp['Hsp_query-from'];
+           $q_from = $hsp['Hsp_query-to'];
+         }
+
         // Now foreach chink determined above...
         // Now foreach chink determined above...
         foreach (array_keys($query) as $k) {
         foreach (array_keys($query) as $k) {
           // Determine the current coordinates.
           // Determine the current coordinates.
-          $coord['qstart'] = $hsp['Hsp_query-from'] + ($k * 60);
-          $coord['qstart'] = ($k == 0) ? $coord['qstart'] : $coord['qstart'];
-        
-          // code added to fix the range issue
-          // Cordinates can increase or decrease
-          if($hsp['Hsp_hit-from'] < $hsp['Hsp_hit-to']) {
-              $coord['hstart'] = $hsp['Hsp_hit-from'] + ($k * 60);    
-            }
-            else {
-              $coord['hstart'] = $hsp['Hsp_hit-from'] - ($k * 60);
-            }
-            $coord['qstop'] = $hsp['Hsp_query-from'] + (($k + 1) * 60) - 1;
-            $coord['qstop'] = ($coord['qstop'] > $hsp['Hsp_query-to']) ? $hsp['Hsp_query-to'] : $coord['qstop'];
-      
-            if ($hsp['Hsp_hit-from'] < $hsp['Hsp_hit-to']) {
-              $coord['hstop'] = $hsp['Hsp_hit-from'] + (($k + 1) * 60) - 1;
-              $coord['hstop'] = ($coord['hstop'] > $hsp['Hsp_hit-to']) ? $hsp['Hsp_hit-to'] : $coord['hstop'];
-          
-            }
-            else {
-              $coord['hstop'] = $hsp['Hsp_hit-from'] - (($k + 1) * 60) + 1;
-              $coord['hstop'] = ($coord['hstop'] < $hsp['Hsp_hit-to']) ? $hsp['Hsp_hit-to'] : $coord['hstop'];
-            }
+          $qgap_count = substr_count($query[$k],'-');
+          $hgap_count = substr_count($hit[$k],'-');
+          if($hsp['Hsp_query-frame'] >= 0){
+            $coord['qstart'] = ($k == 0) ? $q_from : $coord['qstop'] + 1;
+            $coord['qstop'] = $coord['qstart'] + strlen($query[$k]) * $query_multiplier - $qgap_count - 1;
+          }else{
+            $coord['qstart'] = ($k == 0) ? $q_to : $coord['qstop'] - 1;
+            $coord['qstop'] = $coord['qstart'] - strlen($query[$k]) * $query_multiplier - $qgap_count + 1;
+          }
+
+          if($hsp['Hsp_hit-frame'] >= 0){
+            $coord['hstart'] = ($k == 0) ? $h_from : $coord['hstop'] + 1;
+            $coord['hstop'] = $coord['hstart'] + strlen($hit[$k]) * $hit_multiplier - $hgap_count - 1;
+          }else{
+            $coord['hstart'] = ($k == 0) ? $h_to : $coord['hstop'] - 1;
+            $coord['hstop'] = $coord['hstart'] - strlen($hit[$k]) * $hit_multiplier - $hgap_count + 1;
+          }
+
+
+
           
           
             // Pad these coordinates to ensure columned display.
             // Pad these coordinates to ensure columned display.
             foreach ($coord as $ck => $val) {
             foreach ($coord as $ck => $val) {
@@ -109,4 +129,4 @@
   <?php
   <?php
     }
     }
   ?>
   ?>
-</div>
+</div>