/* * Created on Mar 11, 2006 */ package org.seqcode.genome.sequence; import org.seqcode.gsebricks.verbs.Mapper; /** * @author tdanford */ public class ReverseComplement implements Mapper<String,String> { private Mapper<Character,Character> complement; public ReverseComplement() { complement = new DNAComplement(); } public ReverseComplement(Mapper<Character,Character> c) { complement = c; } /* (non-Javadoc) * @see org.seqcode.gsebricks.verbs.Filter#execute(null) */ public String execute(String str) { StringBuilder sb = new StringBuilder(); for(int i = str.length()-1; i >= 0; i--) { sb.append(complement.execute(str.charAt(i))); } return sb.toString(); } public static class DNAComplement implements Mapper<Character,Character> { public DNAComplement() {} /* (non-Javadoc) * @see org.seqcode.gsebricks.verbs.Mapper#execute(java.lang.Object) */ public Character execute(Character a) { switch(a.charValue()) { case 'a': return 't'; case 'A': return 'T'; case 't': return 'a'; case 'T': return 'A'; case 'g': return 'c'; case 'G': return 'C'; case 'c': return 'g'; case 'C': return 'G'; } return 'N'; } } }