blast_report.tpl.php 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. <?php
  2. /**
  3. * Display the results of a BLAST job execution
  4. *
  5. * Variables Available in this template:
  6. * $xml_filename: The full path & filename of XML file containing the BLAST results
  7. */
  8. ?>
  9. <!-- JQuery controlling display of the alignment information (hidden by default) -->
  10. <script type="text/javascript">
  11. $(document).ready(function(){
  12. // Hide the alignment rows in the table
  13. // (ie: all rows not labelled with the class "result-summary" which contains the tabular
  14. // summary of the hit)
  15. $("#blast_report tr:not(.result-summary)").hide();
  16. $("#blast_report tr:first-child").show();
  17. // When a results summary row is clicked then show the next row in the table
  18. // which should be corresponding the alignment information
  19. $("#blast_report tr.result-summary").click(function(){
  20. $(this).next("tr").toggle();
  21. $(this).find(".arrow").toggleClass("up");
  22. });
  23. });
  24. </script>
  25. <p><strong>Download</strong>:
  26. <a href="<?php print '../../' . $html_filename; ?>">HTML</a>,
  27. <a href="<?php print '../../' . $tsv_filename; ?>">Tab-Delimited</a>,
  28. <a href="<?php print '../../' . $xml_filename; ?>">XML</a>
  29. </p>
  30. <p>The following table summarizes the results of your BLAST. To see additional information
  31. about each hit including the alignment, click on that row in the table to expand it.</p>
  32. <?php
  33. // Load the XML file
  34. $xml = simplexml_load_file($xml_filename);
  35. /**
  36. * We are using the drupal table theme functionality to create this listing
  37. * @see theme_table() for additional documentation
  38. */
  39. if ($xml) {
  40. // Specify the header of the table
  41. $header = array(
  42. 'number' => array('data' => '#', 'class' => array('number')),
  43. 'query' => array('data' => 'Query Name', 'class' => array('query')),
  44. 'hit' => array('data' => 'Hit Name', 'class' => array('hit')),
  45. 'evalue' => array('data' => 'E-Value', 'class' => array('evalue')),
  46. 'arrow-col' => array('data' => '', 'class' => array('arrow-col'))
  47. );
  48. $rows = array();
  49. $count = 0;
  50. // Parse the BLAST XML to generate the rows of the table
  51. // where each hit results in two rows in the table: 1) A summary of the query/hit and
  52. // significance and 2) additional information including the alignment
  53. foreach($xml->{'BlastOutput_iterations'}->children() as $iteration) {
  54. foreach($iteration->{'Iteration_hits'}->children() as $hit) {
  55. if (is_object($hit)) {
  56. $count +=1;
  57. $zebra_class = ($count % 2 == 0) ? 'even' : 'odd';
  58. // SUMMARY ROW
  59. $hit_name = $hit->Hit_id;
  60. $score = $hit->{'Hit_hsps'}->{'Hsp'}->{'Hsp_score'};
  61. $evalue = $hit->{'Hit_hsps'}->{'Hsp'}->{'Hsp_evalue'};
  62. $query_name = $iteration->{'Iteration_query-def'};
  63. $row = array(
  64. 'data' => array(
  65. 'number' => array('data' => $count, 'class' => array('number')),
  66. 'query' => array('data' => $query_name, 'class' => array('query')),
  67. 'hit' => array('data' => $hit_name, 'class' => array('hit')),
  68. 'evalue' => array('data' => $evalue, 'class' => array('evalue')),
  69. 'arrow-col' => array('data' => '<div class="arrow"></div>', 'class' => array('arrow-col'))
  70. ),
  71. 'class' => array('result-summary')
  72. );
  73. $rows[] = $row;
  74. // ALIGNMENT ROW (collapsed by default)
  75. // Process HSPs
  76. $HSPs = array();
  77. foreach ($hit->{'Hit_hsps'}->children() as $hsp_xml) {
  78. $HSPs[] = (array) $hsp_xml;
  79. }
  80. $row = array(
  81. 'data' => array(
  82. 'number' => '',
  83. 'query' => array(
  84. 'data' => theme('blast_report_alignment_row', array('HSPs' => $HSPs)),
  85. 'colspan' => 4,
  86. )
  87. ),
  88. 'class' => array('alignment-row', $zebra_class),
  89. 'no_striping' => TRUE
  90. );
  91. $rows[] = $row;
  92. }
  93. }
  94. }
  95. print theme('table', array(
  96. 'header' => $header,
  97. 'rows' => $rows,
  98. 'attributes' => array('id' => 'blast_report'),
  99. ));
  100. }
  101. else {
  102. drupal_set_title('BLAST: Error Encountered');
  103. print '<p>We encountered an error and are unable to load your BLAST results.</p>';
  104. }
  105. ?>