package aliview.sequences;
import java.util.Arrays;
import org.apache.log4j.Logger;
import aliview.AminoAcid;
import aliview.NucleotideUtilities;
public final class SequenceUtils {
private static final Logger logger = Logger.getLogger(SequenceUtils.class);
public static final byte GAP_SYMBOL = (byte) '-';
public static int TYPE_AMINO_ACID = 0;
public static int TYPE_NUCLEIC_ACID = 1;
public static int TYPE_UNKNOWN = 2;
public static int id_counter;
public static byte[] createGapByteArray(int length) {
byte[] byteSeq = new byte[length];
Arrays.fill(byteSeq, SequenceUtils.GAP_SYMBOL);
return byteSeq;
}
public static int createID() {
// logger.info("create ID=" + id_counter);
id_counter ++;
return id_counter;
}
public static int countExactNucleotideOverlap(Sequence seq1, Sequence seq2) {
int nExactOverlap = 0;
int nDifferentOverlap = 0;
for(int n = 0; n < seq1.getLength(); n++){
if(NucleotideUtilities.isAtLeastOneGap(seq1.getBaseAtPos(n),seq2.getBaseAtPos(n))){
// Nothing to do
}else{
if(NucleotideUtilities.baseValFromBase(seq1.getBaseAtPos(n)) == NucleotideUtilities.baseValFromBase(seq2.getBaseAtPos(n))){
nExactOverlap ++;
}
else{
nDifferentOverlap ++;
}
}
}
return nExactOverlap;
}
public static boolean isSeqResiduesIdentical(Sequence seq1, Sequence seq2) {
if(seq1.getLength() != seq2.getLength()){
return false;
}
for(int n = 0; n < seq1.getLength(); n++){
if(Character.toLowerCase(seq1.getCharAtPos(n)) != Character.toLowerCase(seq2.getCharAtPos(n))){
return false;
}
}
return true;
}
public static int countDifferentNucleotideOverlap(Sequence seq1, Sequence seq2) {
int nExactOverlap = 0;
int nDifferentOverlap = 0;
for(int n = 0; n < seq1.getLength(); n++){
if(NucleotideUtilities.isAtLeastOneGap(seq1.getBaseAtPos(n),seq2.getBaseAtPos(n))){
// Nothing to do
}else{
if(NucleotideUtilities.baseValFromBase(seq1.getBaseAtPos(n)) == NucleotideUtilities.baseValFromBase(seq2.getBaseAtPos(n))){
nExactOverlap ++;
}
else{
nDifferentOverlap ++;
}
}
}
return nDifferentOverlap;
}
public static int countDifferentAminoAcidOverlap(Sequence seq1, Sequence seq2) {
int nExactOverlap = 0;
int nDifferentOverlap = 0;
for(int n = 0; n < seq1.getLength(); n++){
if(AminoAcid.isGap(seq1.getBaseAtPos(n)) || AminoAcid.isGap(seq2.getBaseAtPos(n))){
// nothing to do
}else{
if(AminoAcid.getAminoAcidFromByte(seq1.getBaseAtPos(n)) == AminoAcid.getAminoAcidFromByte(seq2.getBaseAtPos(n))){
nExactOverlap ++;
}
else{
nDifferentOverlap ++;
}
}
}
return nDifferentOverlap;
}
public static int countExactAminoAcidOverlap(Sequence seq1, Sequence seq2) {
int nExactOverlap = 0;
int nDifferentOverlap = 0;
for(int n = 0; n < seq1.getLength(); n++){
if(AminoAcid.isGap(seq1.getBaseAtPos(n)) || AminoAcid.isGap(seq2.getBaseAtPos(n))){
// nothing to do
}else{
if(AminoAcid.getAminoAcidFromByte(seq1.getBaseAtPos(n)) == AminoAcid.getAminoAcidFromByte(seq2.getBaseAtPos(n))){
nExactOverlap ++;
}
else{
nDifferentOverlap ++;
}
}
}
return nExactOverlap;
}
}