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
public abstract class AbstractChromatogram extends Object implements Chromatogram
A basic, abstract implementation ofChromatogram. Provides protected setters so that subclasses may set the value of the various properties of a chromatogram. Chromatograms should be created usingChromatogramFactoryor 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 Constructor Description AbstractChromatogram()Create a new AbstractChromatogram.
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected voidclearTraces()Sets the trace data structures to null.protected AlignmentcreateImmutableAlignment(Map labelsToSymLists)A factory method for creating new immutable alignments, particularly for use as base call alignments.protected SymbolListcreateImmutableSymbolList(Alphabet alpha, List syms)A factory method for creating new symbol lists with a given alphabet.AlignmentgetBaseCalls()Return the total number of base calls.intgetMax()Gets the max intensity from all the traces.intgetMax(AtomicSymbol nucleotide)Gets the max intensity on the trace for the specified nucleotide.intgetSequenceLength()Return the sequence length.intgetSignificantBits()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.intgetTraceLength()Returns the length of the trace of the Chromatogram.protected static int[]reverse(int[] src)Utility method for reversing an int[] array.ChromatogramreverseComplement()Returns a newChromatogramrepresenting the reverse complement of this one.protected SymbolListreverseComplementBaseCallList(Object label)Return a symbol list containing the reverse complement of the base call data for the given label.protected AlignmentreverseComplementBaseCalls()Returns a new base call alignment that is the reverse complement of one in this chromatogram.protected abstract AbstractChromatogramreverseComplementInstance()Returns a new instance of this AbstractChromatogram subclass for use inreverseComplement().protected voidsetBaseCallAlignment(Alignment align)Provides the list of base calls.protected voidsetBits(int bits)Sets the number of significant bits in the trace samples.protected voidsetTrace(AtomicSymbol nuc, int[] trace, int maxVal)Provides the trace samples for a particular nucleotide.
-
-
-
Constructor Detail
-
AbstractChromatogram
public AbstractChromatogram()
Create a new AbstractChromatogram.
-
-
Method Detail
-
getTrace
public int[] getTrace(AtomicSymbol nucleotide) throws IllegalSymbolException
Description copied from interface:ChromatogramReturns 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()ints long.- Specified by:
getTracein 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- ifnucleotideisn't in the DNA alphabet
-
getTraceLength
public int getTraceLength()
Description copied from interface:ChromatogramReturns the length of the trace of the Chromatogram.- Specified by:
getTraceLengthin interfaceChromatogram- Returns:
- the number of samples in the trace
- See Also:
Chromatogram.getTrace(AtomicSymbol)
-
getMax
public int getMax()
Description copied from interface:ChromatogramGets 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:
getMaxin interfaceChromatogram- Returns:
- the max intensity
-
getMax
public int getMax(AtomicSymbol nucleotide) throws IllegalSymbolException
Description copied from interface:ChromatogramGets the max intensity on the trace for the specified nucleotide.- Specified by:
getMaxin 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
public Alignment getBaseCalls()
Return the total number of base calls.- Specified by:
getBaseCallsin interfaceChromatogram- Returns:
- the total number of base calls
-
getSequenceLength
public int getSequenceLength()
Return the sequence length.- Specified by:
getSequenceLengthin interfaceChromatogram- Returns:
- the sequence length
-
getSignificantBits
public int getSignificantBits()
Return the number of significant bits.- Specified by:
getSignificantBitsin 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:
Chromatogram.getBaseCalls()
-
clearTraces
protected final void 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
protected final void setBits(int bits) throws IllegalArgumentException
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- whenbitsis negative
-
reverseComplementInstance
protected abstract AbstractChromatogram reverseComplementInstance()
Returns a new instance of this AbstractChromatogram subclass for use inreverseComplement().- Returns:
- a reverse-complemented AbstractChromatogram
-
reverseComplement
public Chromatogram reverseComplement()
Description copied from interface:ChromatogramReturns a newChromatogramrepresenting 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:
reverseComplementin interfaceChromatogram- Returns:
- a new chromatogram that is the reverse complement of this one
-
reverseComplementBaseCalls
protected Alignment 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
Alignmentthat is the reverse complement of the one in the current chromatogram
-
reverseComplementBaseCallList
protected SymbolList reverseComplementBaseCallList(Object label)
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
IntegerAlphabetfor 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- theAlphabetfor 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- aMapwhose 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
protected static final int[] reverse(int[] src)
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
-
-