/* * Genoogle: Similar DNA Sequences Searching Engine and Tools. (http://genoogle.pih.bio.br) * Copyright (C) 2008,2009 Felipe Fernandes Albrecht (felipe.albrecht@gmail.com) * * For further information check the LICENSE file. */ package bio.pih.genoogle.io; import java.nio.ByteBuffer; import bio.pih.genoogle.io.proto.Io.StoredSequence; import com.google.protobuf.ByteString; /** * Some methods for various proposes. * * @author albrecht */ public final class Utils { public static int[] getEncodedSequenceAsArray(final StoredSequence storedSequence) { ByteString encodedSequence = storedSequence.getEncodedSequence(); byte[] byteArray = encodedSequence.toByteArray(); int[] ret = new int[byteArray.length / 4]; ByteBuffer.wrap(byteArray).asIntBuffer().get(ret); return ret; } public static String invert(final String s) { char[] cs = s.toCharArray(); char[] result = new char[s.length()]; int j = 0; int i = s.length() - 1; while (i >= 0) { result[j++] = cs[i--]; } return new String(result); } public static String sequenceComplement(final String seqString) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < seqString.length(); i++) { char base = seqString.charAt(i); char complement = Utils.getComplement(base); sb.append(complement); } return sb.toString(); } public static char getComplement(final char base) { switch (base) { case 'A': return 'T'; case 'T': return 'A'; case 'C': return 'G'; case 'G': return 'C'; case 'a': return 't'; case 't': return 'a'; case 'c': return 'g'; case 'g': return 'c'; // For especial bases. default: return 'A'; // throw new IllegalStateException(base + " is not a valid DNA base."); } } public static boolean isIn(final int begin, final int end, final int pos) { if ((pos >= begin) && (pos <= end)) { return true; } return false; } public static boolean contains(final int seq1Begin, final int seq1End, final int seq2Begin, final int seq2End) { if ((seq2Begin >= seq1Begin) && (seq2End <= seq1End)) { return true; } return false; } }