All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.hfg.bio.seq.SeqQualityScores Maven / Gradle / Ivy

There is a newer version: 20240423
Show newest version
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; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy