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 aChromatogram
into a graphics context.- Since:
- 1.3
- Author:
- Rhett Sutphin (UI CBCB), Matthew Pocock
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
ChromatogramGraphic.Option
A typesafe enumeration of the options available for configuring the behavior of aChromatogramGraphic
instance.
-
Field Summary
Fields Modifier and Type Field Description 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 theChromatogramGraphic.Option
s and values for this instance.protected boolean
subpathsValid
Flag for subpaths.
-
Constructor Summary
Constructors Constructor Description ChromatogramGraphic()
Default constructor with no Chromatogram.ChromatogramGraphic(Chromatogram c)
Creates a newChromatogramGraphic
, initially displaying the given chromatogram.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description 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 theRectangle2D
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 theGeneralPath
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 forgetCallContaining(float, boolean)
withpointOnScreen
=true.int
getCallContaining(float x, boolean xOnScreen)
Same asgetCallContaining(Point2D, boolean)
, except that only the x-coordinate of the point is specified.int
getCallContaining(Point2D point)
Synonym forgetCallContaining(Point2D, boolean)
withpointOnScreen
=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 aNumber
-valued option into afloat
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 aNumber
-valued option into anint
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 aBoolean
-valued option into aboolean
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).
-
-
-
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 theChromatogramGraphic.Option
s and values for this instance.
-
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 newChromatogramGraphic
, initially displaying the given chromatogram.- Parameters:
c
- the Chromomatogram to display
-
-
Method Detail
-
generateSubpaths
protected void generateSubpaths()
Precomputes theGeneralPath
s used to draw the traces.
-
generateCallboxes
protected void generateCallboxes()
Precomputes theRectangle2D
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 theChromatogramGraphic.Option.FROM_TRACE_SAMPLE
andChromatogramGraphic.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. TheChromatogramGraphic.Option.FROM_TRACE_SAMPLE
andChromatogramGraphic.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. SeegetVerticalScale()
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. SeegetHorizontalScale()
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 symbolc
- the color
-
getCallboxCount
public int getCallboxCount()
Returns the number of callboxes, regenerating them if necessary. This should almost always equalgetChromatogram().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 forpointOnScreen
- 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 forgetCallContaining(Point2D, boolean)
withpointOnScreen
=true.- Parameters:
point
- the Point2D to search with- Returns:
- the call containing this point
-
getCallContaining
public int getCallContaining(float x, boolean xOnScreen)
Same asgetCallContaining(Point2D, boolean)
, except that only the x-coordinate of the point is specified.- Parameters:
x
- the x-coordinate to search forxOnScreen
- 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 forgetCallContaining(float, boolean)
withpointOnScreen
=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 thangetTransform().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 setvalue
- 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 aBoolean
-valued option into aboolean
primitive.- Parameters:
opt
- theChromatogramGraphic.Option
to convert- Returns:
- true if the option is enabled
- Throws:
ClassCastException
- when the option isn'tBoolean
-valued
-
getFloatOption
public float getFloatOption(ChromatogramGraphic.Option opt) throws ClassCastException
Helper method for converting aNumber
-valued option into afloat
primitive.- Parameters:
opt
- theChromatogramGraphic.Option
to convert- Throws:
ClassCastException
- when the option isn'tNumber
-valued
-
getIntOption
public int getIntOption(ChromatogramGraphic.Option opt) throws ClassCastException
Helper method for converting aNumber
-valued option into anint
primitive.- Parameters:
opt
- theChromatogramGraphic.Option
to convert- Throws:
ClassCastException
- when the option isn'tNumber
-valued
-
-