NAME

Bio::Tk::HitDisplay - Frame-based widget for displaying Fasta or Blast hits/HSPs with optional text annotation

SYNOPSIS

use Bio::Tk::HitDisplay;
...
$hds = $parent->HitDisplay(?options?);

DESCRIPTION

HitDisplay is a Frame-based widget which contains a Canvas. When provided with a list of data structures, each representing a hit of a query sequence to a database, it draws:

  • A scale

    This is marked in residues (aa for a protein query, nt for a nucleic acid query)

  • The query sequence

    Represented as a single green line

  • Database hits

    A line for each Fasta hit, or a group of lines for each Blast hit (one per HSP)

The coordinates of the hits/HSPs on the subject sequence (i.e. the sequence in the database) are indicated below the ends of each line.

The HitDisplay delegates all standard options to the Canvas contained within it. The non-standard options for HitDisplay are:

-hitdata => \@hitdata

The structure of each element of this list is quite complex. They are normally generated from object(s) representing Blast or Fasta hits e.g.

Bio::PSU::IO::Blast::Hit
Bio::PSU::IO::Fasta::Hit

by their respective adapters

Bio::PSU::IO::Blast::HitAdapter
Bio::PSU::IO::Fasta::HitAdapter

This is normally hidden, unless you want to go and look.

Each element is a reference to a hash containing the following keys and values:

          { q_id     => 'query id',
	    s_id     => 'subject id',
	    expect   => 'expect value',
	    score    => 'percentage identity',
	    overlap  => 'length of hit',
	    q_len    => 'query length',
	    s_len    => 'subject length',
	    data     => \@data,
            text     => "Some text",
            callback => $callback }

@data is a list of references to lists, each of which contains the coordinates of a single Fasta hit or Blast HSP on both the query and subject sequences. Each innermost list contains 4 values; the start and end coordinates on the query sequence (indices 0 and 1) and the start and end coordinates on the subject sequence (indices 2 and 3). A Blast hit with 3 HSPs will look like this:

[ [ q_start1, q_end1, s_start1, s_end1 ],
  [ q_start2, q_end2, s_start2, s_end2 ],
  [ q_start3, q_end3, s_start3, s_end3 ] ]

The text field may contain any text which should be associated with that hit e.g. a more detailed account of the result or of the subject sequence. The display of this text is bound to a right mouse button click on the subject id in the canvas window. The text will appear just below the hit with one click and a subsequent click will hide it again.

The callback is a code reference which, if defined, will be bound to a left mouse button click on the subject id in the canvas window.

-hitcolours => \%colourhash

The hits or HSPs will be colour-coded according to percentage identity according to the key->value pairs in the colourhash. The default values are:

          { 90 => 'red',
	    80 => 'orange',
	    60 => 'gold',
	    40 => 'yellow' }

This indicates that hits where the query is >= 90% identical to the subject will be red, >= 80% will be orange etc. The hash supplied to -hitcolours will override the defaults.

-interval => integer >= 10

This defines the vertical spacing between hit lines on the canvas. The minimum (and default) value is 10.

Mouse bindings provided:

  • Vertical scrolling

    Wheel-mouse support is provided by binding buttons 4 and 5 to vertical scrolling (standard Z-axis mapping under XFree86 on Linux).

  • Panning

    Holding down the middle mouse button while dragging will pan the canvas in all directions

  • Display/hide all text annotations

    Double-clicking the left mouse button within the canvas will display all text annotations, while double-clicking with the right button will hide them. This is slow at the moment, with more than about 20 hits.

Possible improvements:

  • Speed up opening/closing all text annotations at once

  • Items other than text between the hits

  • Make more of the canvas configurable

    Mouse bindings should be made configurable. Perhaps the canvas items making up each hit should be given a unique tag

METHODS

Interaction with this widget should generally be by means of the standard Perl/Tk options. Internal methods are documented below.

AUTHOR

Keith James (kdj@sanger.ac.uk)

ACKNOWLEDGEMENTS

See Bio::PSU.pod

COPYRIGHT

Copyright (C) 2000 Keith James. All Rights Reserved.

DISCLAIMER

This module is provided "as is" without warranty of any kind. It may redistributed under the same conditions as Perl itself.

Populate

Title   : Populate
Usage   : N/A
Function: Standard composite Frame-based widget setup.
        : See 'man Tk::composite' for details
Returns : Nothing
Args    : Hash reference

draw_align

Title   : draw_align
Usage   : N/A
Function: Draws hit text, line and coords for the hits
Returns : Nothing
Args    : Canvas, hitdata hash reference, left margin for text,
        : x coord for lines, y coord for lines, interval between
        : sets of lines (representing 1 Fasta hit or 1+ Blast
        : HSPs), hitcolours hash reference

h_line

Title   : h_line
Usage   : N/A
Function: Draws a single hit/HSP line with the subject coords
        : below it
Returns : Nothing
Args    : Canvas, hit hash reference, x coord for line,
        : y coord for line, line width, line colour

draw_scale

Title   : draw_scale
Usage   : N/A
Function: Draws scale alongside line representing query
        : sequence
Returns : Nothing
Args    : Canvas, hit hash reference, left margin for text
        : x coord for line, y coord for line

deannotate_hit

Title   : deannotate_hit
Usage   : N/A
Function: Reverses the effect of annotate_hit
Returns : Nothing
Args    : Canvas, text item (subject id), text to be inserted
        : in gap, interval between hits

annotate_hit

Title   : annotate_hit
Usage   : N/A
Function: Displays hit annotation below a hit line by shuffling
        : all canvas elements down the canvas and placing the
        : annotation text in the gap
Returns : Nothing
Args    : Canvas, text item (subject id), text to be inserted
        : in gap, interval between hits