diff --git a/playground/java/src/org/broadinstitute/sting/indels/IndexedSequence.java b/playground/java/src/org/broadinstitute/sting/indels/IndexedSequence.java new file mode 100755 index 000000000..424e0f4ca --- /dev/null +++ b/playground/java/src/org/broadinstitute/sting/indels/IndexedSequence.java @@ -0,0 +1,95 @@ +package org.broadinstitute.sting.indels; + +import java.util.ArrayList; +import java.util.Hashtable; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.Map.Entry; + +public class IndexedSequence implements Iterable>> { + private Map > m_locs; + private String m_seq; + private int m_K; + + public IndexedSequence(String seq, int K) { + m_locs = new Hashtable >(); + m_seq = new String(seq); + m_K = K; + Iterator iter = new KmerCodeIterator(seq, K); + int offset = 0; + while ( iter.hasNext() ) { + Short k = iter.next(); + List offset_list = m_locs.get(k); + if ( offset_list == null ) { + offset_list = new ArrayList(); + m_locs.put(k,offset_list); + } + offset_list.add(offset++); + } + } + + public Iterator>> iterator() { + return m_locs.entrySet().iterator(); + } + + public int length() { return m_seq.length(); } + + public List getOffsets(short k) { return m_locs.get(k); } + + String getSequence() { return m_seq; } + + public int getK() { return m_K; } + + public static void testMe() { + String s = "ACCGTGCGGGCACCTGC"; + int K = 3; + IndexedSequence is = new IndexedSequence(s,K); + System.out.println("Sequence: "+ s); + System.out.print(" "); + for ( int i= 0 ; i < s.length() ; i++ ) { + if ( i % 10 == 0 ) System.out.print(i/10); + else System.out.print(' '); + } + System.out.println(); + System.out.print(" "); + for ( int i= 0 ; i < s.length() ; i++ ) System.out.print(i%10); + System.out.println(); + System.out.println(); + + System.out.println("Indexing with K="+K+":"); + + Set< Map.Entry > > data = is.m_locs.entrySet(); + for ( Map.Entry > e : data ) { +// System.out.print("("+e.getKey()+") "); + System.out.print(kmerToString(e.getKey().shortValue(),K)); + System.out.print("-->"); + for ( Integer offset : e.getValue() ) { + System.out.print(" "+offset.toString()); + } + System.out.println(); + } + } + + private static String kmerToString(short code, int K) { + StringBuffer b = new StringBuffer(K); + for ( int i = 0 ; i < K ; i++ ) { + char c='N'; + switch( code & 0x3 ) { + case 0 : c = 'A' ; break; + case 1 : c = 'C' ; break; + case 2 : c = 'G' ; break; + case 3 : c = 'T' ; break; + } + b.append(c); + code >>= 2; + } + return b.reverse().toString(); + } + + public static void main(String argv[]) { + testMe(); + } + +}