Package org.biojava.bio.chromatogram
Class AbstractChromatogram
java.lang.Object
org.biojava.bio.chromatogram.AbstractChromatogram
- All Implemented Interfaces:
Chromatogram
- Direct Known Subclasses:
ABIFChromatogram
,SCF
,SimpleChromatogram
A basic, abstract implementation of
Chromatogram
. Provides
protected setters so that subclasses may set the value of the various
properties of a chromatogram.
Chromatograms should be created using ChromatogramFactory
or a
parser for a particular file format.- Since:
- 1.3
- Author:
- Rhett Sutphin (UI CBCB), Matthew Pocock
-
Field Summary
Fields inherited from interface org.biojava.bio.chromatogram.Chromatogram
DNA, OFFSETS
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected final void
Sets the trace data structures to null.protected Alignment
createImmutableAlignment
(Map labelsToSymLists) A factory method for creating new immutable alignments, particularly for use as base call alignments.protected SymbolList
createImmutableSymbolList
(Alphabet alpha, List syms) A factory method for creating new symbol lists with a given alphabet.Return the total number of base calls.int
getMax()
Gets the max intensity from all the traces.int
getMax
(AtomicSymbol nucleotide) Gets the max intensity on the trace for the specified nucleotide.int
Return the sequence length.int
Return the number of significant bits.int[]
getTrace
(AtomicSymbol nucleotide) Returns an array containing the intensities of the sampled waveform representing the chromatogram trace for basenucleotide
.int
Returns the length of the trace of the Chromatogram.protected static final int[]
reverse
(int[] src) Utility method for reversing an int[] array.Returns a newChromatogram
representing the reverse complement of this one.protected SymbolList
Return a symbol list containing the reverse complement of the base call data for the given label.protected Alignment
Returns a new base call alignment that is the reverse complement of one in this chromatogram.protected abstract AbstractChromatogram
Returns a new instance of this AbstractChromatogram subclass for use inreverseComplement()
.protected final void
setBaseCallAlignment
(Alignment align) Provides the list of base calls.protected final void
setBits
(int bits) Sets the number of significant bits in the trace samples.protected final void
setTrace
(AtomicSymbol nuc, int[] trace, int maxVal) Provides the trace samples for a particular nucleotide.
-
Constructor Details
-
AbstractChromatogram
public AbstractChromatogram()Create a new AbstractChromatogram.
-
-
Method Details
-
getTrace
Description copied from interface:Chromatogram
Returns an array containing the intensities of the sampled waveform representing the chromatogram trace for basenucleotide
. This may be a reference the actual internal representation of the samples, so callers must not modify it.The resulting array for each nucleotide must be
Chromatogram.getTraceLength()
int
s long.- Specified by:
getTrace
in interfaceChromatogram
- Parameters:
nucleotide
- the trace to examine. Must be the symbol for A, C, G, or T as provided byDNATools
- Returns:
- an array of integers representing the values of a particular chromatogram trace.
- Throws:
IllegalSymbolException
- ifnucleotide
isn't in the DNA alphabet
-
getTraceLength
Description copied from interface:Chromatogram
Returns the length of the trace of the Chromatogram.- Specified by:
getTraceLength
in interfaceChromatogram
- Returns:
- the number of samples in the trace
- See Also:
-
getMax
Description copied from interface:Chromatogram
Gets the max intensity from all the traces. Must be equivalent to the max of callingChromatogram.getMax(AtomicSymbol)
on each of the four non-ambiguous DNA nucleotides.- Specified by:
getMax
in interfaceChromatogram
- Returns:
- the max intensity
-
getMax
Description copied from interface:Chromatogram
Gets the max intensity on the trace for the specified nucleotide.- Specified by:
getMax
in interfaceChromatogram
- Parameters:
nucleotide
- the trace to examine. Must be a concrete (non-ambiguous) nucleotide from the DNA alphabet- Returns:
- the max intensity
- Throws:
IllegalSymbolException
- when the nucleotide isn't from the DNA alphabet
-
getBaseCalls
Return the total number of base calls.- Specified by:
getBaseCalls
in interfaceChromatogram
- Returns:
- the total number of base calls
-
getSequenceLength
Return the sequence length.- Specified by:
getSequenceLength
in interfaceChromatogram
- Returns:
- the sequence length
-
getSignificantBits
Return the number of significant bits.- Specified by:
getSignificantBits
in interfaceChromatogram
- Returns:
- the significant bits
-
setBaseCallAlignment
protected final void setBaseCallAlignment(Alignment align) throws IllegalAlphabetException, IllegalArgumentException, NoSuchElementException Provides the list of base calls.- Parameters:
align
- the base call alignment- Throws:
NoSuchElementException
- when align doesn't contain alignments with the required DNA and OFFSETS labelsIllegalArgumentException
- the lists in align aren't all the same length.IllegalAlphabetException
- if the required lists don't have the correct alphabets. See the documentation ofChromatogram.getBaseCalls()
for details.- See Also:
-
clearTraces
Sets the trace data structures to null. If a subclass needs to replace the traces with new traces of a different length, this method must be called first to avoid provoking an IllegalArgumentException from setTrace due to a length mismatch. -
setTrace
protected final void setTrace(AtomicSymbol nuc, int[] trace, int maxVal) throws IllegalArgumentException, IllegalSymbolException Provides the trace samples for a particular nucleotide.- Parameters:
nuc
- A DNA nucleotidetrace
- the trace samples themselvesmaxVal
- the maximum value in the trace array. If this value isInteger.MIN_VALUE
, this method will do a linear search of trace to determine the max.- Throws:
IllegalArgumentException
- when trace.length is different from any of the existing (non-null) tracesIllegalSymbolException
- when nuc is not a concrete DNA nucleotide
-
setBits
Sets the number of significant bits in the trace samples.- Parameters:
bits
- a non-negative integer indicating the number of significant bits in each trace sample- Throws:
IllegalArgumentException
- whenbits
is negative
-
reverseComplementInstance
Returns a new instance of this AbstractChromatogram subclass for use inreverseComplement()
.- Returns:
- a reverse-complemented AbstractChromatogram
-
reverseComplement
Description copied from interface:Chromatogram
Returns a newChromatogram
representing the reverse complement of this one.Implementors should copy the metadata about the chromatogram (i.e., base calls) as is appropriate to their formats.
- Specified by:
reverseComplement
in interfaceChromatogram
- Returns:
- a new chromatogram that is the reverse complement of this one
-
reverseComplementBaseCalls
Returns a new base call alignment that is the reverse complement of one in this chromatogram. This is achieved by callingreverseComplementBaseCallList(java.lang.Object)
for each label in the current base call alignment. When that method returns null, no list will appear in reverse complement base call alignment with the null-provoking label. For this reason, subclasses are encouraged to overridereverseComplementBaseCallList(java.lang.Object)
to handle any additional per-base metadata that they store.This implementation should be safely inheritable for all chromatogram implementations, unless one just doesn't want base calls on its reverse complement output. If this is the case, it should override this method to return null.
- Returns:
- a new
Alignment
that is the reverse complement of the one in the current chromatogram
-
reverseComplementBaseCallList
Return a symbol list containing the reverse complement of the base call data for the given label. The returned list will be stored in the reverse complement's base call alignment under the same label.Implementation note: subclasses which do not use an
IntegerAlphabet
for their offsets lists must override this method, at least for the case wherelabel ==
.Chromatogram.OFFSETS
- Parameters:
label
- the label Object- Returns:
- an appropriately reverse-complemented SymbolList, or null if the label is unhandled.
-
createImmutableSymbolList
protected SymbolList createImmutableSymbolList(Alphabet alpha, List syms) throws IllegalSymbolException, ClassCastException A factory method for creating new symbol lists with a given alphabet. The default implementation should be fine for nearly all cases, but the option is given in case a developer wishes to use a more memory efficient implementation.- Parameters:
alpha
- theAlphabet
for the new listsyms
- the symbols to put in the new list- Returns:
- a new immutable SymbolList containing all the given symbols using the given Alphabet
- Throws:
IllegalSymbolException
- when alpha and syms are incompatibleClassCastException
- when any object in syms isn't a Symbol
-
createImmutableAlignment
protected Alignment createImmutableAlignment(Map labelsToSymLists) throws IllegalArgumentException, ClassCastException A factory method for creating new immutable alignments, particularly for use as base call alignments. The default implementation should be fine for nearly all cases.- Parameters:
labelsToSymLists
- aMap
whose keys are desired labels for the alignment and whose values are the SymbolLists. All the SymbolLists must be the same length.- Returns:
- a new Alignment
- Throws:
IllegalArgumentException
- if the lists aren't all the same lengthClassCastException
- if any of the values in the map aren't SymbolLists
-
reverse
Utility method for reversing an int[] array. Visible for subclass use.- Parameters:
src
- the source array- Returns:
- an array of the same length containing all values in src in reverse order
-