From 373a5e02f997047e13c4bb2f5ae7525405dde88e Mon Sep 17 00:00:00 2001 From: efischer Date: Thu, 24 Feb 2022 16:03:49 -0600 Subject: [PATCH] Refactor to make CellSample class more self-contained --- src/main/java/CellSample.java | 27 +++++++++++++++++++++++++ src/main/java/CommandLineInterface.java | 2 +- src/main/java/InteractiveInterface.java | 2 +- src/main/java/Simulator.java | 24 ---------------------- 4 files changed, 29 insertions(+), 26 deletions(-) diff --git a/src/main/java/CellSample.java b/src/main/java/CellSample.java index 333590f..cfb8c0b 100644 --- a/src/main/java/CellSample.java +++ b/src/main/java/CellSample.java @@ -1,10 +1,37 @@ +import java.util.ArrayList; +import java.util.Collections; import java.util.List; +import java.util.stream.IntStream; public class CellSample { private List cells; private Integer cdr1Freq; + public CellSample(Integer numDistinctCells, Integer cdr1Freq){ + this.cdr1Freq = cdr1Freq; + List numbersCDR3 = new ArrayList<>(); + List numbersCDR1 = new ArrayList<>(); + Integer numDistCDR3s = 2 * numDistinctCells + 1; + IntStream.range(1, numDistCDR3s + 1).forEach(i -> numbersCDR3.add(i)); + IntStream.range(numDistCDR3s + 1, numDistCDR3s + 1 + (numDistCDR3s / cdr1Freq) + 1).forEach(i -> numbersCDR1.add(i)); + Collections.shuffle(numbersCDR3); + Collections.shuffle(numbersCDR1); + + //Each cell represented by 4 values + //two CDR3s, and two CDR1s. First two values are CDR3s (alpha, beta), second two are CDR1s (alpha, beta) + List distinctCells = new ArrayList<>(); + for(int i = 0; i < numbersCDR3.size() - 1; i = i + 2){ + Integer tmpCDR3a = numbersCDR3.get(i); + Integer tmpCDR3b = numbersCDR3.get(i+1); + Integer tmpCDR1a = numbersCDR1.get(i % numbersCDR1.size()); + Integer tmpCDR1b = numbersCDR1.get((i+1) % numbersCDR1.size()); + Integer[] tmp = {tmpCDR3a, tmpCDR3b, tmpCDR1a, tmpCDR1b}; + distinctCells.add(tmp); + } + this.cells = distinctCells; + } + public CellSample(List cells, Integer cdr1Freq){ this.cells = cells; this.cdr1Freq = cdr1Freq; diff --git a/src/main/java/CommandLineInterface.java b/src/main/java/CommandLineInterface.java index 554e1c1..0c527b1 100644 --- a/src/main/java/CommandLineInterface.java +++ b/src/main/java/CommandLineInterface.java @@ -288,7 +288,7 @@ public class CommandLineInterface { //for calling from command line public static void makeCells(String filename, Integer numCells, Integer cdr1Freq){ - CellSample sample = Simulator.generateCellSample(numCells, cdr1Freq); + CellSample sample = new CellSample(numCells, cdr1Freq); CellFileWriter writer = new CellFileWriter(filename, sample); writer.writeCellsToFile(); } diff --git a/src/main/java/InteractiveInterface.java b/src/main/java/InteractiveInterface.java index 597551e..90b388f 100644 --- a/src/main/java/InteractiveInterface.java +++ b/src/main/java/InteractiveInterface.java @@ -74,7 +74,7 @@ public class InteractiveInterface { System.out.println(ex); sc.next(); } - CellSample sample = Simulator.generateCellSample(numCells, cdr1Freq); + CellSample sample = new CellSample(numCells, cdr1Freq); assert filename != null; System.out.println("Writing cells to file"); CellFileWriter writer = new CellFileWriter(filename, sample); diff --git a/src/main/java/Simulator.java b/src/main/java/Simulator.java index 42379c9..f804234 100644 --- a/src/main/java/Simulator.java +++ b/src/main/java/Simulator.java @@ -23,30 +23,6 @@ public class Simulator implements GraphModificationFunctions { private static final int cdr1AlphaIndex = 2; private static final int cdr1BetaIndex = 3; - public static CellSample generateCellSample(Integer numDistinctCells, Integer cdr1Freq) { - //In real T cells, CDR1s have about one third the diversity of CDR3s - List numbersCDR3 = new ArrayList<>(); - List numbersCDR1 = new ArrayList<>(); - Integer numDistCDR3s = 2 * numDistinctCells + 1; - IntStream.range(1, numDistCDR3s + 1).forEach(i -> numbersCDR3.add(i)); - IntStream.range(numDistCDR3s + 1, numDistCDR3s + 1 + (numDistCDR3s / cdr1Freq) + 1).forEach(i -> numbersCDR1.add(i)); - Collections.shuffle(numbersCDR3); - Collections.shuffle(numbersCDR1); - - //Each cell represented by 4 values - //two CDR3s, and two CDR1s. First two values are CDR3s (alpha, beta), second two are CDR1s (alpha, beta) - List distinctCells = new ArrayList<>(); - for(int i = 0; i < numbersCDR3.size() - 1; i = i + 2){ - Integer tmpCDR3a = numbersCDR3.get(i); - Integer tmpCDR3b = numbersCDR3.get(i+1); - Integer tmpCDR1a = numbersCDR1.get(i % numbersCDR1.size()); - Integer tmpCDR1b = numbersCDR1.get((i+1) % numbersCDR1.size()); - Integer[] tmp = {tmpCDR3a, tmpCDR3b, tmpCDR1a, tmpCDR1b}; - distinctCells.add(tmp); - } - return new CellSample(distinctCells, cdr1Freq); - } - //Make the graph needed for matching CDR3s public static GraphWithMapData makeGraph(List distinctCells, Plate samplePlate, boolean verbose) { Instant start = Instant.now();