First attempt at command line arguments
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
import org.apache.commons.cli.*;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Scanner;
|
||||
import java.util.InputMismatchException;
|
||||
@@ -11,33 +13,85 @@ public class UserInterface {
|
||||
static int input;
|
||||
static boolean quit = false;
|
||||
|
||||
public static void main(String args[]) {
|
||||
while(!quit) {
|
||||
System.out.println("\nALPHA/BETA T-CELL RECEPTOR MATCHING SIMULATOR");
|
||||
System.out.println("Please select an option:");
|
||||
System.out.println("1) Generate a population of distinct cells");
|
||||
System.out.println("2) Generate a sample plate of T cells");
|
||||
System.out.println("3) Simulate CDR3 alpha/beta T cell matching");
|
||||
System.out.println("4) Simulate CDR3/CDR1 T cell matching");
|
||||
System.out.println("5) Acknowledgements");
|
||||
System.out.println("0) Exit");
|
||||
public static void main(String[] args) {
|
||||
|
||||
if(args.length != 0){
|
||||
Options options = new Options();
|
||||
Option matchCDR3 = Option.builder("m")
|
||||
.longOpt("match")
|
||||
.desc("Match CDR3s. Requires a cell sample file and any number of plate files.")
|
||||
.build();
|
||||
options.addOption(matchCDR3);
|
||||
Option inputCells = Option.builder("c")
|
||||
.longOpt("cellfile")
|
||||
.hasArg()
|
||||
.argName("file")
|
||||
.desc("The cell sample file used for matching")
|
||||
.required().build();
|
||||
options.addOption(inputCells);
|
||||
Option lowThresh = Option.builder("low")
|
||||
.hasArg()
|
||||
.argName("number")
|
||||
.desc("Sets the minimum occupancy overlap to attempt matching")
|
||||
.required().build();
|
||||
options.addOption(lowThresh);
|
||||
Option highThresh = Option.builder("high")
|
||||
.hasArg()
|
||||
.argName("number")
|
||||
.desc("Sets the maximum occupancy overlap to attempt matching")
|
||||
.required().build();
|
||||
options.addOption(highThresh);
|
||||
Option inputPlates = Option.builder("p")
|
||||
.longOpt("platefiles")
|
||||
.hasArgs()
|
||||
.desc("Plate files to match")
|
||||
.required().build();
|
||||
options.addOption(inputPlates);
|
||||
|
||||
CommandLineParser parser = new DefaultParser();
|
||||
try {
|
||||
input = sc.nextInt();
|
||||
switch(input){
|
||||
case 1 -> makeCells();
|
||||
case 2 -> makePlate();
|
||||
case 3 -> matchCells();
|
||||
case 4 -> matchCellsExpanded();
|
||||
case 5 -> acknowledge();
|
||||
case 0 -> quit = true;
|
||||
default -> throw new InputMismatchException("Invalid input.");
|
||||
CommandLine line = parser.parse(options, args);
|
||||
if(line.hasOption("m")){
|
||||
String cellFile = line.getOptionValue("c");
|
||||
Integer lowThreshold = Integer.valueOf(line.getOptionValue(lowThresh));
|
||||
Integer highThreshold = Integer.valueOf(line.getOptionValue(highThresh));
|
||||
for(String plate: line.getOptionValues("p")) {
|
||||
matchCDR3s(cellFile, plate, lowThreshold, highThreshold);
|
||||
}
|
||||
}
|
||||
}catch(InputMismatchException ex){
|
||||
System.out.println(ex);
|
||||
sc.next();
|
||||
}
|
||||
catch (ParseException exp) {
|
||||
System.err.println("Parsing failed. Reason: " + exp.getMessage());
|
||||
}
|
||||
}
|
||||
sc.close();
|
||||
else {
|
||||
while (!quit) {
|
||||
System.out.println("\nALPHA/BETA T-CELL RECEPTOR MATCHING SIMULATOR");
|
||||
System.out.println("Please select an option:");
|
||||
System.out.println("1) Generate a population of distinct cells");
|
||||
System.out.println("2) Generate a sample plate of T cells");
|
||||
System.out.println("3) Simulate CDR3 alpha/beta T cell matching");
|
||||
System.out.println("4) Simulate CDR3/CDR1 T cell matching");
|
||||
System.out.println("5) Acknowledgements");
|
||||
System.out.println("0) Exit");
|
||||
try {
|
||||
input = sc.nextInt();
|
||||
switch (input) {
|
||||
case 1 -> makeCells();
|
||||
case 2 -> makePlate();
|
||||
case 3 -> matchCells();
|
||||
case 4 -> matchCellsCDR1();
|
||||
case 5 -> acknowledge();
|
||||
case 0 -> quit = true;
|
||||
default -> throw new InputMismatchException("Invalid input.");
|
||||
}
|
||||
} catch (InputMismatchException ex) {
|
||||
System.out.println(ex);
|
||||
sc.next();
|
||||
}
|
||||
}
|
||||
sc.close();
|
||||
}
|
||||
}
|
||||
|
||||
private static void makeCells() {
|
||||
@@ -68,6 +122,22 @@ public class UserInterface {
|
||||
writer.writeCellsToFile();
|
||||
}
|
||||
|
||||
private static void makeCells(String filename, Integer numCells, Integer cdr1Freq){
|
||||
CellSample sample = Simulator.generateCellSample(numCells, cdr1Freq);
|
||||
CellFileWriter writer = new CellFileWriter(filename, sample);
|
||||
writer.writeCellsToFile();
|
||||
}
|
||||
|
||||
private static void makePlate(String cellFile, String filename, Double stdDev,
|
||||
Integer numWells, Integer numSections,
|
||||
Integer[] concentrations, Double dropOutRate){
|
||||
CellFileReader cellReader = new CellFileReader(cellFile);
|
||||
Plate samplePlate = new Plate(numWells, dropOutRate, concentrations, stdDev);
|
||||
samplePlate.fillWells(cellReader.getFilename(), cellReader.getCells());
|
||||
PlateFileWriter writer = new PlateFileWriter(filename, samplePlate);
|
||||
writer.writePlateFile();
|
||||
}
|
||||
|
||||
//method to output a CSV of
|
||||
private static void makePlate() {
|
||||
String cellFile = null;
|
||||
@@ -149,6 +219,30 @@ public class UserInterface {
|
||||
writer.writePlateFile();
|
||||
}
|
||||
|
||||
private static void matchCDR3s(String cellFile, String plateFile, Integer lowThreshold, Integer highThreshold){
|
||||
CellFileReader cellReader = new CellFileReader(cellFile);
|
||||
PlateFileReader plateReader = new PlateFileReader(plateFile);
|
||||
Plate plate = new Plate(plateReader.getFilename(), plateReader.getWells());
|
||||
if (cellReader.getCells().size() == 0){
|
||||
System.exit(0);
|
||||
}
|
||||
else if(plate.getWells().size() == 0){
|
||||
System.exit(0);
|
||||
|
||||
}
|
||||
else{
|
||||
if(highThreshold >= plate.getSize()){
|
||||
highThreshold = plate.getSize() - 1;
|
||||
}
|
||||
List<Integer[]> cells = cellReader.getCells();
|
||||
MatchingResult results = Simulator.matchCDR3s(cells, plate, lowThreshold, highThreshold, false);
|
||||
//result writer
|
||||
MatchingFileWriter writer = new MatchingFileWriter(null, results);
|
||||
writer.writeErrorRateToTerminal();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private static void matchCells() {
|
||||
String filename = null;
|
||||
String cellFile = null;
|
||||
@@ -192,14 +286,14 @@ public class UserInterface {
|
||||
highThreshold = plate.getSize() - 1;
|
||||
}
|
||||
List<Integer[]> cells = cellReader.getCells();
|
||||
MatchingResult results = Simulator.matchCDR3s(cells, plate, lowThreshold, highThreshold);
|
||||
MatchingResult results = Simulator.matchCDR3s(cells, plate, lowThreshold, highThreshold, true);
|
||||
//result writer
|
||||
MatchingFileWriter writer = new MatchingFileWriter(filename, results);
|
||||
writer.writeResultsToFile();
|
||||
}
|
||||
}
|
||||
|
||||
public static void matchCellsExpanded(){
|
||||
public static void matchCellsCDR1(){
|
||||
/*
|
||||
The idea here is that we'll get the CDR3 alpha/beta matches first. Then we'll try to match CDR3s to CDR1s by
|
||||
looking at the top two matches for each CDR3. If CDR3s in the same cell simply swap CDR1s, we assume a correct
|
||||
@@ -276,7 +370,7 @@ public class UserInterface {
|
||||
highThresholdCDR1 = plate.getSize() - 1;
|
||||
}
|
||||
List<Integer[]> cells = cellReader.getCells();
|
||||
MatchingResult preliminaryResults = Simulator.matchCDR3s(cells, plate, lowThresholdCDR3, highThresholdCDR3);
|
||||
MatchingResult preliminaryResults = Simulator.matchCDR3s(cells, plate, lowThresholdCDR3, highThresholdCDR3, true);
|
||||
MatchingResult[] results = Simulator.matchCDR1s(cells, plate, lowThresholdCDR1,
|
||||
highThresholdCDR1, preliminaryResults);
|
||||
MatchingFileWriter writer = new MatchingFileWriter(filename + "_FirstPass", results[0]);
|
||||
|
||||
Reference in New Issue
Block a user