Implement filtering for wells with anomalous read counts

This commit is contained in:
eugenefischer
2022-09-29 15:50:57 -05:00
parent 097590cf21
commit ec6713a1c0

View File

@@ -69,6 +69,12 @@ public class Simulator implements GraphModificationFunctions {
if(verbose){System.out.println("Remaining alpha sequence count: " + alphaSequences.size());}
if(verbose){System.out.println("Remaining beta sequence count: " + betaSequences.size());}
}
if (realSequenceCollisionRate > 0.0) {
if(verbose){System.out.println("Removing wells with anomalous read counts from sequence records");}
filterWellsByReadCount(alphaSequences);
filterWellsByReadCount(betaSequences);
if(verbose){System.out.println("Wells with anomalous read counts removed from sequence records");}
}
//construct the graph. For simplicity, going to make
if(verbose){System.out.println("Making vertex maps");}
@@ -673,6 +679,23 @@ public class Simulator implements GraphModificationFunctions {
}
}
public static void filterWellsByReadCount(Map<String, SequenceRecord> sequences) {
for (String k: sequences.keySet()) {
//If a sequence has read count R and appears in W wells, then on average its read count in each
//well should be R/W. Delete any wells where the read count is less than R/2W.
Integer threshold = sequences.get(k).getReadCount() / (2 * sequences.get(k).getOccupancy());
List<Integer> noise = new ArrayList<>();
for (Integer well: sequences.get(k).getWells()) {
if (sequences.get(k).getReadCount(well) < threshold) {
noise.add(well);
}
}
for (Integer well: noise) {
sequences.get(k).deleteWell(well);
}
}
}
private static Map<String, String> makeSequenceToSequenceMap(List<String[]> cells, int keySequenceIndex,
int valueSequenceIndex){
Map<String, String> keySequenceToValueSequenceMap = new HashMap<>();