com.hfg.bio.seq.SeqQualityScores Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of com_hfg Show documentation
Show all versions of com_hfg Show documentation
com.hfg xml, html, svg, and bioinformatics utility library
package com.hfg.bio.seq;
import java.util.Arrays;
import com.hfg.exception.ProgrammingException;
import com.hfg.util.StringBuilderPlus;
//------------------------------------------------------------------------------
/**
Container for sequence quality scores.
@author J. Alex Taylor, hairyfatguy.com
*/
//------------------------------------------------------------------------------
// com.hfg Library
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// J. Alex Taylor, President, Founder, CEO, COO, CFO, OOPS hairyfatguy.com
// [email protected]
//------------------------------------------------------------------------------
public class SeqQualityScores implements Cloneable
{
private SeqQualityScoreScheme mScheme;
private String mQualityString;
private short[] mQualityScores;
private static final String sQualityChars = "!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~";
private static SeqQualityScoreScheme sDefaultScheme = SeqQualityScoreScheme.sanger;
//###########################################################################
// CONSTRUCTORS
//###########################################################################
//---------------------------------------------------------------------------
public SeqQualityScores(String inEncodedQualityString)
{
this(inEncodedQualityString, sDefaultScheme);
}
//---------------------------------------------------------------------------
public SeqQualityScores(String inEncodedQualityString, SeqQualityScoreScheme inScheme)
{
mQualityString = inEncodedQualityString;
mScheme = inScheme;
}
//---------------------------------------------------------------------------
public SeqQualityScores(short[] inQualityScores)
{
this(inQualityScores, sDefaultScheme);
}
//---------------------------------------------------------------------------
public SeqQualityScores(short[] inQualityScores, SeqQualityScoreScheme inScheme)
{
mQualityScores = inQualityScores;
mScheme = inScheme;
}
//###########################################################################
// PUBLIC METHODS
//###########################################################################
//--------------------------------------------------------------------------
@Override
public SeqQualityScores clone()
{
SeqQualityScores theClone;
try
{
theClone = (SeqQualityScores) super.clone();
}
catch (CloneNotSupportedException e)
{
throw new ProgrammingException(e);
}
theClone.mQualityScores = Arrays.copyOfRange(mQualityScores, 0, mQualityScores.length);
return theClone;
}
//---------------------------------------------------------------------------
public SeqQualityScoreScheme getScheme()
{
return mScheme;
}
//---------------------------------------------------------------------------
@Override
public String toString()
{
return getEncodedQualityString();
}
//---------------------------------------------------------------------------
public String getEncodedQualityString()
{
if (null == mQualityString
&& mQualityScores != null)
{
mQualityString = encodeScores(mQualityScores);
}
return mQualityString;
}
//---------------------------------------------------------------------------
public short[] getQualityScores()
{
if (null == mQualityScores
&& mQualityString != null)
{
mQualityScores = decodeScores(mQualityString);
}
return mQualityScores;
}
//---------------------------------------------------------------------------
private static String encodeScores(short[] inScores)
{
StringBuilderPlus buffer = new StringBuilderPlus();
for (short score : inScores)
{
buffer.append(sQualityChars.charAt(score));
}
return buffer.toString();
}
//---------------------------------------------------------------------------
private static short[] decodeScores(String inScoreString)
{
short[] scores = new short[inScoreString.length()];
for (int index = 0; index < inScoreString.length(); index++)
{
char scoreChar = inScoreString.charAt(index);
scores[index] = (short) sQualityChars.indexOf(scoreChar);
}
return scores;
}
}