org.biojava.bio.chromatogram.graphic
Class ChromatogramGraphic

java.lang.Object
  extended by org.biojava.bio.chromatogram.graphic.ChromatogramGraphic
All Implemented Interfaces:
Cloneable

public class ChromatogramGraphic
extends Object
implements Cloneable

Encapsulates a configurable method for drawing a Chromatogram into a graphics context.

Since:
1.3
Author:
Rhett Sutphin (UI CBCB), Matthew Pocock

Nested Class Summary
static class ChromatogramGraphic.Option
          A typesafe enumeration of the options available for configuring the behavior of a ChromatogramGraphic instance.
 
Field Summary
protected  boolean callboxesValid
          Flag for call boxes.
protected  Map colors
          The map containing the colors for drawing traces.
protected  boolean drawableCallboxesValid
          Flag for drawable call boxes.
protected  Map fillColors
          The map containing the fill colors for callboxes.
protected  Map options
          The map containing the ChromatogramGraphic.Options and values for this instance.
protected  boolean subpathsValid
          Flag for subpaths.
 
Constructor Summary
ChromatogramGraphic()
          Default constructor with no Chromatogram.
ChromatogramGraphic(Chromatogram c)
          Creates a new ChromatogramGraphic, initially displaying the given chromatogram.
 
Method Summary
 Object clone()
          Performs a partial deep copy and invalidates regenerable structures.
 void drawTo(Graphics2D g2)
          Draws the chromatogram onto the provided graphics context.
protected  void generateCallboxes()
          Precomputes the Rectangle2Ds that are the in-memory representation of the callboxes.
protected  void generateDrawableCallboxes(AffineTransform shapeTx)
          Precomputes the callboxes in screen coordinates.
protected  void generateSubpaths()
          Precomputes the GeneralPaths used to draw the traces.
 Color getBaseColor(Symbol b)
          Returns the color that will be used to draw the trace for the given DNA symbol.
 Color getBaseFillColor(Symbol b)
          Returns the color that will be used to fill in the callboxes for calls with the given symbol.
 Rectangle2D getCallboxBounds(int index)
          Returns the screen-coordinate bounds of the callbox for a given call.
 Rectangle2D getCallboxBounds(int index, boolean boundsOnScreen)
          Returns the bounds of the callbox for a given call.
 int getCallboxCount()
          Returns the number of callboxes, regenerating them if necessary.
 int getCallContaining(float x)
          Synonym for getCallContaining(float, boolean) with pointOnScreen=true.
 int getCallContaining(float x, boolean xOnScreen)
          Same as getCallContaining(Point2D, boolean), except that only the x-coordinate of the point is specified.
 int getCallContaining(Point2D point)
          Synonym for getCallContaining(Point2D, boolean) with pointOnScreen=true.
 int getCallContaining(Point2D point, boolean pointOnScreen)
          Returns the 0-based index of the call containing a given point.
 Chromatogram getChromatogram()
          Accessor for the in-use chromatogram.
 float getFloatOption(ChromatogramGraphic.Option opt)
          Helper method for converting a Number-valued option into a float primitive.
 int getHeight()
          Returns the height of the whole graphic (in pixels).
 float getHorizontalScale()
          Returns the in-use horizontal scale factor.
 int getIntOption(ChromatogramGraphic.Option opt)
          Helper method for converting a Number-valued option into an int primitive.
 AffineTransform getInvTransform()
          Returns a new AffineTransform describing the transformation from output space to chromatogram space.
 Object getOption(ChromatogramGraphic.Option opt)
          Returns the current value for the specified option.
 int getRenderedWidth()
          Returns the width of the graphic as it will be rendered.
 int getRenderedWidth(float horizontalScale)
          Returns the width of the graphic as it would be rendered with the specified horizontal scale.
 AffineTransform getTransform()
          Returns a new AffineTransform describing the transformation from chromatogram coordinates to output coordinates.
 void getTransformAndConcat(AffineTransform target)
          Concatenates the chromatogram-to-output transform to the provided given AffineTransform.
 float getVerticalScale()
          Returns the in use vertical scale factor.
 int getWidth()
          Returns the width of the whole graphic (in pixels).
 boolean optionIsTrue(ChromatogramGraphic.Option opt)
          Helper method for converting a Boolean-valued option into a boolean primitive.
 void setBaseColor(Symbol b, Color c)
          Maps a color to a DNA symbol.
 void setChromatogram(Chromatogram c)
          Sets the chromatogram to draw.
 void setHeight(int h)
          Sets the height (in pixels).
 void setHorizontalScale(float hs)
          Sets the horizontal scale (proportional).
 void setOption(ChromatogramGraphic.Option opt, Object value)
          Sets a new value for the specified option.
 void setVerticalScale(float vs)
          Sets the vertical scale (proportional).
 void setWidth(int w)
          Sets the width of the whole graphic (in pixels).
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

subpathsValid

protected boolean subpathsValid
Flag for subpaths.


callboxesValid

protected boolean callboxesValid
Flag for call boxes.


drawableCallboxesValid

protected boolean drawableCallboxesValid
Flag for drawable call boxes.


options

protected Map options
The map containing the ChromatogramGraphic.Options and values for this instance.


colors

protected Map colors
The map containing the colors for drawing traces. Keys are DNA Symbols.


fillColors

protected Map fillColors
The map containing the fill colors for callboxes. Keys are DNA Symbols.

Constructor Detail

ChromatogramGraphic

public ChromatogramGraphic()
Default constructor with no Chromatogram.


ChromatogramGraphic

public ChromatogramGraphic(Chromatogram c)
Creates a new ChromatogramGraphic, initially displaying the given chromatogram.

Parameters:
c - the Chromomatogram to display
Method Detail

generateSubpaths

protected void generateSubpaths()
Precomputes the GeneralPaths used to draw the traces.


generateCallboxes

protected void generateCallboxes()
Precomputes the Rectangle2Ds that are the in-memory representation of the callboxes. These rectangles are used for drawing (via generateDrawableCallboxes) as well as queries (e.g., getCallContaining(java.awt.geom.Point2D, boolean)).


generateDrawableCallboxes

protected void generateDrawableCallboxes(AffineTransform shapeTx)
Precomputes the callboxes in screen coordinates.

Parameters:
shapeTx - the transform to apply to the callboxes to move them into screen space.

getChromatogram

public Chromatogram getChromatogram()
Accessor for the in-use chromatogram.

Returns:
the chromatogram that a call to drawTo(java.awt.Graphics2D) will draw

setChromatogram

public void setChromatogram(Chromatogram c)
Sets the chromatogram to draw.

Parameters:
c - the new chromatogram
See Also:
ChromatogramGraphic.Option.WIDTH_IS_AUTHORITATIVE, ChromatogramGraphic.Option.HEIGHT_IS_AUTHORITATIVE

getWidth

public int getWidth()
Returns the width of the whole graphic (in pixels).

Returns:
the width

getHeight

public int getHeight()
Returns the height of the whole graphic (in pixels).

Returns:
the height

getHorizontalScale

public float getHorizontalScale()
Returns the in-use horizontal scale factor. The "units" of this value are (trace samples) / pixel. For example, a horizontal scale of 1.0 means that there will be one pixel horizontally for each trace sample.

Returns:
the horizontal scale

getVerticalScale

public float getVerticalScale()
Returns the in use vertical scale factor. The "units" of this value are (trace value bins) / pixel. For example, a vertical scale of 1.0 means that there will be one pixel vertically for each value in the range [0, getChromatogram().getMax()].

Returns:
the vertical scale

getRenderedWidth

public int getRenderedWidth()
Returns the width of the graphic as it will be rendered. This means that the ChromatogramGraphic.Option.FROM_TRACE_SAMPLE and ChromatogramGraphic.Option.TO_TRACE_SAMPLE bounds are taken into account.

Returns:
the rendered width

getRenderedWidth

public int getRenderedWidth(float horizontalScale)
Returns the width of the graphic as it would be rendered with the specified horizontal scale. The ChromatogramGraphic.Option.FROM_TRACE_SAMPLE and ChromatogramGraphic.Option.TO_TRACE_SAMPLE bounds are taken into account.

Parameters:
horizontalScale - the horizontal scale
Returns:
the rendered width at that scale

setHeight

public void setHeight(int h)
Sets the height (in pixels). This will also change the vertical scale.

Parameters:
h - the desired height in pixels
See Also:
ChromatogramGraphic.Option.HEIGHT_IS_AUTHORITATIVE

setVerticalScale

public void setVerticalScale(float vs)
Sets the vertical scale (proportional). This will also change the height.

Parameters:
vs - the desired vertical scale. See getVerticalScale() for semantics.
See Also:
ChromatogramGraphic.Option.HEIGHT_IS_AUTHORITATIVE

setWidth

public void setWidth(int w)
Sets the width of the whole graphic (in pixels). This will also change the horizontal scale.

Parameters:
w - the desired width in pixels
See Also:
ChromatogramGraphic.Option.WIDTH_IS_AUTHORITATIVE

setHorizontalScale

public void setHorizontalScale(float hs)
Sets the horizontal scale (proportional). This will also change the width.

Parameters:
hs - the desired vertical scale. See getHorizontalScale() for semantics.
See Also:
ChromatogramGraphic.Option.WIDTH_IS_AUTHORITATIVE

getBaseColor

public Color getBaseColor(Symbol b)
Returns the color that will be used to draw the trace for the given DNA symbol.

Parameters:
b - the symbol
Returns:
the color, or null if none is set

getBaseFillColor

public Color getBaseFillColor(Symbol b)
Returns the color that will be used to fill in the callboxes for calls with the given symbol.

Parameters:
b - the symbol
Returns:
the color, or null if none is set

setBaseColor

public void setBaseColor(Symbol b,
                         Color c)
Maps a color to a DNA symbol. The color as specified will be used for to draw the trace for the symbol (if any). The fill color for calls to the symbol will be derived from the trace color.

Parameters:
b - the symbol
c - the color

getCallboxCount

public int getCallboxCount()
Returns the number of callboxes, regenerating them if necessary. This should almost always equal getChromatogram().getSequenceLength()

Returns:
the number of callboxes

getCallboxBounds

public Rectangle2D getCallboxBounds(int index)
Returns the screen-coordinate bounds of the callbox for a given call.

Parameters:
index - the callbox for which to get the bounds 0-based
Returns:
a Rectangle2D giving the bounds of the call box

getCallboxBounds

public Rectangle2D getCallboxBounds(int index,
                                    boolean boundsOnScreen)
Returns the bounds of the callbox for a given call.

Parameters:
index - the callbox for which to get the bounds 0-based.
boundsOnScreen - determines the coordinate system of the returned bounds
Returns:
the bounds of the callbox in screen coordinates if boundsOnScreen is true, otherwise the bounds of the callbox in chromatogram coordinates

getCallContaining

public int getCallContaining(Point2D point,
                             boolean pointOnScreen)
Returns the 0-based index of the call containing a given point. The point may be either in screen space or chromatogram space, scale-wise. If the point is in screen space, the caller must translate the point such that if it is, for instance, from a mouse click, a click on the upper-left corner of the graphic would be (0,0).

Parameters:
point - the point to search for
pointOnScreen - if true, the point will be treated as though it is in screen space. Otherwise, it will be considered to be in chromatogram space.
Returns:
the 0-based index of the callbox which contains the point

getCallContaining

public int getCallContaining(Point2D point)
Synonym for getCallContaining(Point2D, boolean) with pointOnScreen=true.

Parameters:
point - the Point2D to search with
Returns:
the call containing this point

getCallContaining

public int getCallContaining(float x,
                             boolean xOnScreen)
Same as getCallContaining(Point2D, boolean), except that only the x-coordinate of the point is specified.

Parameters:
x - the x-coordinate to search for
xOnScreen - whether the coordinate in screen space or chromatogram space
Returns:
the index of the call containing the position x

getCallContaining

public int getCallContaining(float x)
Synonym for getCallContaining(float, boolean) with pointOnScreen=true.

Parameters:
x - the x-coordinate to search for
Returns:
the index of the call containing the position x

getTransform

public AffineTransform getTransform()
Returns a new AffineTransform describing the transformation from chromatogram coordinates to output coordinates.


getTransformAndConcat

public void getTransformAndConcat(AffineTransform target)
Concatenates the chromatogram-to-output transform to the provided given AffineTransform.


getInvTransform

public AffineTransform getInvTransform()
Returns a new AffineTransform describing the transformation from output space to chromatogram space. Should be much more efficient than getTransform().createInverse()


drawTo

public void drawTo(Graphics2D g2)
Draws the chromatogram onto the provided graphics context.

Parameters:
g2 - the Graphics2D to draw to

setOption

public void setOption(ChromatogramGraphic.Option opt,
                      Object value)
Sets a new value for the specified option. Be sure that the value is appropriate per the documentation, or you'll induce a ClassCastException somewhere else.

Parameters:
opt - Option to set
value - new value for the option
See Also:
ChromatogramGraphic.Option

getOption

public Object getOption(ChromatogramGraphic.Option opt)
Returns the current value for the specified option.

See Also:
ChromatogramGraphic.Option

optionIsTrue

public boolean optionIsTrue(ChromatogramGraphic.Option opt)
                     throws ClassCastException
Helper method for converting a Boolean-valued option into a boolean primitive.

Parameters:
opt - the ChromatogramGraphic.Option to convert
Returns:
true if the option is enabled
Throws:
ClassCastException - when the option isn't Boolean-valued

getFloatOption

public float getFloatOption(ChromatogramGraphic.Option opt)
                     throws ClassCastException
Helper method for converting a Number-valued option into a float primitive.

Parameters:
opt - the ChromatogramGraphic.Option to convert
Throws:
ClassCastException - when the option isn't Number-valued

getIntOption

public int getIntOption(ChromatogramGraphic.Option opt)
                 throws ClassCastException
Helper method for converting a Number-valued option into an int primitive.

Parameters:
opt - the ChromatogramGraphic.Option to convert
Throws:
ClassCastException - when the option isn't Number-valued

clone

public Object clone()
Performs a partial deep copy and invalidates regenerable structures.

Overrides:
clone in class Object
Returns:
an Object that is castable to ChromatogramGraphic