## org.biojava.bio.chromatogram.graphic
Class ChromatogramGraphic

    java.lang.Object
      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.Option`s 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 `Rectangle2D`s 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 `GeneralPath`s 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.Option`s 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 `GeneralPath`s used to draw the traces.

### generateCallboxes

    protected void generateCallboxes()

  Precomputes the `Rectangle2D`s 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