From b9ee31b64c9de5302c7edf9e6a52ccec3f11a955 Mon Sep 17 00:00:00 2001 From: efischer Date: Fri, 18 Feb 2022 17:28:24 -0600 Subject: [PATCH] Do new filtering before matching --- out/artifacts/TCellSim_jar/TCellSim.jar | Bin 1573568 -> 1574256 bytes src/main/java/Simulator.java | 44 +++++++++++++++++++++--- 2 files changed, 39 insertions(+), 5 deletions(-) diff --git a/out/artifacts/TCellSim_jar/TCellSim.jar b/out/artifacts/TCellSim_jar/TCellSim.jar index e6c75dedce2cff079713a9c3362f2a1dc89ddc04..705ce0adef8e50bd97fe54eddf0f5879cb87608a 100644 GIT binary patch delta 30350 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 E|Ij^g`Tzg` diff --git a/src/main/java/Simulator.java b/src/main/java/Simulator.java index 0471e1b..c3b83c8 100644 --- a/src/main/java/Simulator.java +++ b/src/main/java/Simulator.java @@ -194,6 +194,16 @@ public class Simulator { filterByOccupancyThreshold(graph, lowThreshold, highThreshold); if(verbose){System.out.println("Over- and under-weight edges set to 0.0");} + //Filter by overlap size + if(verbose){System.out.println("Eliminating edges with weights much less than occupancy values");} + filterByOverlapSize(graph, alphaWellCounts, betaWellCounts); + if(verbose){System.out.println("Edges with weights much less than occupancy values set to 0.0");} + + //Filter by relative occupancy + if(verbose){System.out.println("Eliminating edges between vertices of massively different occupancy");} + filterByRelativeOccupancy(graph, alphaWellCounts, betaWellCounts); + if(verbose){System.out.println("Edges between vertices of massively different occupancy set to 0.0");} + /** * This is where the maximum weighted matching is found @@ -666,6 +676,35 @@ public class Simulator { } } + //Remove edges for pairs with large occupancy discrepancy + private static void filterByRelativeOccupancy(SimpleWeightedGraph graph, + Map alphaWellCounts, + Map betaWellCounts) { + for (DefaultWeightedEdge e : graph.edgeSet()) { + Integer alphaOcc = alphaWellCounts.get(graph.getEdgeSource(e)); + Integer betaOcc = betaWellCounts.get(graph.getEdgeTarget(e)); + //Adjust this to something cleverer later + if (Math.abs(alphaOcc - betaOcc) >= 20) { + graph.setEdgeWeight(e, 0.0); + } + } + } + + //Remove edges for pairs where overlap size is significantly lower than the well occupancy + private static void filterByOverlapSize(SimpleWeightedGraph graph, + Map alphaWellCounts, + Map betaWellCounts) { + for (DefaultWeightedEdge e : graph.edgeSet()) { + Integer alphaOcc = alphaWellCounts.get(graph.getEdgeSource(e)); + Integer betaOcc = betaWellCounts.get(graph.getEdgeTarget(e)); + //Adjust this to something cleverer later + Integer min = alphaOcc > betaOcc ? betaOcc : alphaOcc; + if (min - graph.getEdgeWeight(e) >= 15) { + graph.setEdgeWeight(e, 0.0); + } + } + } + private static Map makePeptideToPeptideMap(List cells, int keyPeptideIndex, int valuePeptideIndex){ Map keyPeptideToValuePeptideMap = new HashMap<>(); @@ -693,9 +732,4 @@ public class Simulator { return inverse; } - private static int bigDecimalComparator(BigDecimal bd, Integer i) { - return bd.compareTo(BigDecimal.valueOf(i)); - } - - }