String Map K Mer Assignment

From CSE231 Wiki
Revision as of 06:32, 15 November 2022 by Cosgroved (talk | contribs) (→‎KMerUtils)
Jump to navigation Jump to search

Group Assignment

This is a group assignment.

Code To Investigate

Java Util Concurrent

ConcurrentHashMap

StringKMers

The following method should be useful as you build the assignment.

String toString(byte[] sequence, int offset, int kMerLength)

	/**
	 * Stores the information from the given sequence into a String. For example, if
	 * you had the sequence, "ACCTGTCAAAA" and you called this method with an offset
	 * of 1 and a k of 4, it would return "CCTG".
	 * 
	 * @param sequence the sequence of nucleobases to draw the bytes from
	 * @param offset   the offset for where to start looking for bytes
	 * @param k        the length of the k-mer to make a String for
	 * @return a String representation of the k-mer at the desired position
	 */
	public static String toString(byte[] sequence, int offset, int k) {
		return new String(sequence, offset, k, StandardCharsets.UTF_8);
	}

KMerCounts

interface KMerCount

class StringMapKMerCount
class ByteArrayRangeMapKMerCount

Code To Implement

StringHashMapKMerCounter

class: StringHashMapKMerCounter.java Java.png
methods: parse
package: kmer.group.stringmap
source folder: student/src/main/java

method: public KMerCount parse(List<byte[]> sequences, int k) Sequential.svg (sequential implementation only)

In this completely sequential implementation, you will have to write the parse method. The method takes in a list of arrays of bytes and a k-mer length. It should return an instance of MapKMerCount(which takes in a map), a class provided to you which does exactly what its name suggests. In order to implement this method, we recommend taking a look at the KMerUtils class and more specifically the toString method, which converts a given byte array into a String in order to make it compatible with the String HashMap.

parse should go through the amount of possible k-mers for every byte array in the list of sequences. As it goes through the bytes in the array, use the KMerUtils.toString() method to create a string to use for the HashMap. The map should take in a String as the key and an Integer as the value. We recommend using the map.compute() method and reviewing how to use lambdas.

StringConcurrentHashMapKMerCounter

class: StringConcurrentHashMapKMerCounter.java Java.png
methods: parse
package: kmer.group.stringmap
source folder: student/src/main/java

method: public KMerCount parse(List<byte[]> sequences, int k) Parallel.svg (parallel implementation required)

This implementation will make your sequential String HashMap implementation into a parallel one. To do so, you will be making use of Java’s atomic version of a HashMap: a ConcurrentHashMap. Like before, you will be need to complete the parse method. You can choose to finish this method with a forall loop or a finish/async approach, which is completely up to you.


Testing Your Solution

Correctness

class: KMerWarmupTestSuite.java Junit.png
package: kmer.group
source folder: testing/src/test/java