public static void main(String[] args) {

    WorkflowProperties props = new WorkflowProperties();
    File inputFile =
        args.length > 0
            ? new File(args[0])
            : new File(props.getDirectory(), "s288c_mata_1_plus.segments");

    try {
      DifferentialSegments dsegs = new DifferentialSegments(inputFile);

      Collection<DifferentialKey> keys = dsegs.differentialRegions(0, 1);
      System.out.println(DifferentialKey.header());
      for (DifferentialKey key : keys) {
        System.out.println(key.toString());
      }

      System.out.println(String.format("# Regions: " + keys.size()));

    } catch (IOException e) {
      e.printStackTrace();
    }
  }
  public static void main(String[] args) {

    BackgroundEstimation estimation = new BolstadEMBackgroundEstimation();
    // BackgroundEstimation estimation = new UniformBackgroundEstimation();

    String key = args[0];

    WorkflowProperties props = new WorkflowProperties();
    File fplus = new File(props.getDirectory(), String.format("%s_plus.raw", key));
    File fminus = new File(props.getDirectory(), String.format("%s_negative.raw", key));

    // LogTransform transform = LogTransform.NONE;
    LogTransform transform = LogTransform.LOG_TO_EXP;

    BackgroundRemoval norm = new BackgroundRemoval(estimation, transform);

    try {
      System.out.println(String.format("Loading: %s", fplus.getName()));
      norm.load(new WorkflowDataLoader(fplus));
      System.out.println(String.format("Loading: %s", fminus.getName()));
      norm.load(new WorkflowDataLoader(fminus));

      WorkflowIndexing indexing = props.getIndexing(key);

      System.out.println(String.format("Removing background..."));
      norm.removeBackground();

      Filter<ProbeLine, ProbeLine> plus =
          new Filter<ProbeLine, ProbeLine>() {
            public ProbeLine execute(ProbeLine p) {
              return p.strand.equals("+") ? p : null;
            }
          };
      Filter<ProbeLine, ProbeLine> minus =
          new Filter<ProbeLine, ProbeLine>() {
            public ProbeLine execute(ProbeLine p) {
              return p.strand.equals("-") ? p : null;
            }
          };

      System.out.println(String.format("Outputting background-removed results..."));
      File plusOut = new File(props.getDirectory(), String.format("%s_plus.corrected", key));
      File minusOut = new File(props.getDirectory(), String.format("%s_negative.corrected", key));

      outputProbes(new FilterIterator<ProbeLine, ProbeLine>(plus, norm.iterator()), plusOut);
      System.out.println(String.format("\t%s", plusOut.getAbsolutePath()));

      outputProbes(new FilterIterator<ProbeLine, ProbeLine>(minus, norm.iterator()), minusOut);
      System.out.println(String.format("\t%s", minusOut.getAbsolutePath()));

    } catch (IOException e) {
      e.printStackTrace();
    }
  }