/* * BioJava development code * * This code may be freely distributed and modified under the * terms of the GNU Lesser General Public Licence. This should * be distributed with the code. If you do not have a copy, * see: * * http://www.gnu.org/copyleft/lesser.html * * Copyright for this code is held jointly by the individual * authors. These should be listed in @author doc comments. * * For more information on the BioJava project and its aims, * or to join the biojava-l mailing list, visit the home page * at: * * http://www.biojava.org/ * */ package org.biojava.bio.chromatogram; import java.util.Map; import org.biojava.bio.symbol.AtomicSymbol; import org.biojava.bio.symbol.IllegalAlphabetException; import org.biojava.bio.symbol.IllegalSymbolException; import org.biojava.bio.symbol.SymbolList; import org.biojava.utils.SmallMap; /** * A basic chromatogram implementation which provides public mutators * for setting the various attributes of the chromatogram. *
* In general, new chromatogram implementations should be derived from * {@link AbstractChromatogram}, not this class, as it is generally * undesirable to allow the internal structures of a {@link Chromatogram} to be * manipulated externally. This class could still be useful, however, for * programatically generated "chromatograms". *
* * @author Rhett Sutphin (UI CBCB) * @author Matthew Pocock * @since 1.3 */ public class SimpleChromatogram extends AbstractChromatogram { /** Creates a new instance of SimpleChromatogram. */ public SimpleChromatogram() { super(); } /** * Set the DNA and OFFSETS symbol lists for the basecall alignment. Beware: * this method does no consistency checks to be sure that all the offsets * are valid indices into the trace arrays. * * @param dna a symbol list in the DNA alphabet that contains the base calls * for this chromatogram * @param offsets a symbol list in an integer or sub-integer alphabet that * contains the locations in the chromatogram for the bases called * indna
* @throws IllegalAlphabetException when the alphabets aren't as specified
* @throws IllegalArgumentException when the lists aren't the same length
*/
public void setSymbolLists(SymbolList dna, SymbolList offsets)
throws IllegalAlphabetException, IllegalArgumentException {
if (dna.length() != offsets.length())
throw new IllegalArgumentException("The SymbolLists must be the same length");
Map map = new SmallMap(2);
map.put(Chromatogram.DNA, dna);
map.put(Chromatogram.OFFSETS, offsets);
super.setBaseCallAlignment(super.createImmutableAlignment(map));
}
/**
* Sets the trace array for one of the DNA nucleotides. The provided
* array will not be copied, so any modifications to it will be
* reflected in calls to {@link #getTrace}.
*
* If you need to set a new set of traces whose length is different
* from the old set, you must call {@link #clearTraceValues} first,
* or you will provoke an IllegalArgumentException
.
*