diff --git a/src/main/java/Plate.java b/src/main/java/Plate.java index b81a140..c790be8 100644 --- a/src/main/java/Plate.java +++ b/src/main/java/Plate.java @@ -166,6 +166,8 @@ public class Plate { Map> sequencesAndMisreads = new HashMap<>(); //Map of all sequences read. Keys are sequences, values are associated SequenceRecords Map sequenceMap = new LinkedHashMap<>(); + //get list of all distinct, real sequences + String[] realSequences = assayWells(sIndices).toArray(new String[0]); for (int well = 0; well < size; well++) { for (String[] cell: wells.get(well)) { for (int sIndex: sIndices) { @@ -201,8 +203,8 @@ public class Plate { String wrongSequence; do{ //get a random real sequence that's been read from the plate before - int index = rand.nextInt(sequencesAndMisreads.size()); - wrongSequence = sequencesAndMisreads.keySet().toArray(new String[0])[index]; + int index = rand.nextInt(realSequences.length); + wrongSequence = realSequences[index]; //make sure it's not accidentally the *right* sequence //Also that it's not a wrong sequence already in the misread list } while(currentSequence.equals(wrongSequence) || sequencesAndMisreads.get(currentSequence).contains(wrongSequence)); @@ -240,6 +242,18 @@ public class Plate { return sequenceMap; } + private HashSet assayWells(int[] indices) { + HashSet allSequences = new HashSet<>(); + for (List well: wells) { + for (String[] cell: well) { + for(int index: indices) { + allSequences.add(cell[index]); + } + } + } + return allSequences; + } + public String getSourceFileName() { return sourceFile; }