public static void minimalDuplicationLength(String[] args) {

		if (args.length != 1) {
			System.out.println("Please call with exactly 1 argument");
			return;
		}
		final String ID = args[0];
		ExecutorService exec = Executors.newFixedThreadPool(Runtime
				.getRuntime().availableProcessors());
		System.out.println("Start with "
				+ Runtime.getRuntime().availableProcessors() + " threads");
		try {
			int[] fragmentLengths = { 150, 120, 80, 70, 60, 50, 40, 30, 20, 15,
					10, 8, 6, 4 };
			double[] percentageReadLengths = { 0.05, 0.1, 0.2 };
			int[] readLengths = { 30, 40, 50, 60, 70, 80, 90, 100, 200, 400 };
			for (final double p : percentageReadLengths) {
				for (final int readLength : readLengths) {
					for (final int i : fragmentLengths) {
						exec.submit(new Runnable() {
							@Override
							public void run() {
								try {
									testDetectability(readLength,
											(int) (readLength * p), i, ID + "_"
													+ i + "_" + p + "_"
													+ readLength);
								} catch (Exception e1) {
									e1.printStackTrace();
								}
								try {
									PrintWriter out = new PrintWriter(
											new BufferedWriter(new FileWriter(
													"output/" + ID + "_" + i
															+ "_" + p + "_"
															+ readLength
															+ "/log.txt", true)));
									out.println("Ran argos with:\tREAD_LENGTH\t"
											+ readLength
											+ "\tSTEP_SIZE\t"
											+ (int) (readLength * p)
											+ "\tFRAGMENT_SIZE\t"
											+ i
											+ "\tPercReadLen\t" + p + "\n");
									out.close();
								} catch (IOException e) {
									e.printStackTrace();
								}
							}
						});
					}
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			exec.shutdown();
		}

	}