public static void assignOptions(ExtendOptionParser parser) {
   parser.addHeader("Result Reader Options", 1);
   parser
       .accepts("optresin", "Input result file")
       .withRequiredArg()
       .ofType(String.class)
       .defaultsTo("");
   parser
       .accepts("optresinformat", ResultFormat.getFormatHelp())
       .withOptionalArg()
       .ofType(Integer.class)
       .defaultsTo(-1);
 }
  public static void assignOptions(ExtendOptionParser parser, int level) {
    parser.addHeader("Result Clustering Options", level);
    parser
        .accepts(
            "clustermode",
            "The clustering mode. 0: No clustering. 1: Standard indel cluster. 2: Standard indel-inv cluster. 3. Standard cluster transloc")
        .withRequiredArg()
        .ofType(Integer.TYPE)
        .defaultsTo(0);
    parser
        .accepts(
            "closeref",
            "The max distance (reference) between two results to be considered at same cluster.")
        .withOptionalArg()
        .ofType(Long.class)
        .defaultsTo((long) 250000);
    parser
        .accepts(
            "closefrag",
            "The max distance (fragment) between two results to be considered at same cluster.")
        .withOptionalArg()
        .ofType(Long.class)
        .defaultsTo((long) 250000);
    parser
        .accepts("minmatch", "Min match to be consider as a valid partial map.")
        .withOptionalArg()
        .ofType(Integer.class)
        .defaultsTo(3);
    parser
        .accepts("maxtrim", "Maximum trim of a partial map. ")
        .withOptionalArg()
        .ofType(Integer.class)
        .defaultsTo(5);

    parser
        .accepts("trimear", "Error acceptable range.")
        .withOptionalArg()
        .ofType(Double.class)
        .defaultsTo(0.1);

    parser
        .accepts("match", "Score for one label match")
        .withOptionalArg()
        .ofType(Integer.class)
        .defaultsTo(5);
    parser
        .accepts("fpp", "False Positive Penalty")
        .withOptionalArg()
        .ofType(Integer.class)
        .defaultsTo(2);
    parser
        .accepts("fnp", "False Negative Penalty")
        .withOptionalArg()
        .ofType(Integer.class)
        .defaultsTo(2);

    parser
        .accepts("indelp", "Indel Penalty")
        .withOptionalArg()
        .ofType(Integer.class)
        .defaultsTo(10);
    parser
        .accepts("invp", "Inversion Penalty")
        .withOptionalArg()
        .ofType(Integer.class)
        .defaultsTo(30);
    parser
        .accepts("transp", "Translocation Penalty")
        .withOptionalArg()
        .ofType(Integer.class)
        .defaultsTo(50);
    parser
        .accepts("clusterlocalpenalty", "Local Penalty after clustering")
        .withOptionalArg()
        .ofType(Boolean.class)
        .defaultsTo(false);

    parser
        .accepts("minclusterscore", "Min cluster score.")
        .withOptionalArg()
        .ofType(Integer.class)
        .defaultsTo(30);
    parser
        .accepts("minconf", "Minimum confidence")
        .withOptionalArg()
        .ofType(Double.class)
        .defaultsTo(0.4);
    parser
        .accepts("minclusterfragratio", "Min clustered fragment ratio")
        .withOptionalArg()
        .ofType(Double.class)
        .defaultsTo(-1.0);
    parser
        .accepts("minclustersigratio", "Min clustered mapped signal ratio")
        .withOptionalArg()
        .ofType(Double.class)
        .defaultsTo(-1.0);
    parser
        .accepts("overlapcluster", "Allow overlapping clusters at results.")
        .withOptionalArg()
        .ofType(Boolean.class)
        .defaultsTo(true);
    parser
        .accepts("maxclusteritem", "Maximum items output. -1: no limit")
        .withOptionalArg()
        .ofType(Integer.class)
        .defaultsTo(1);
  }