コード例 #1
0
ファイル: Driver.java プロジェクト: smirarab/global
  public static void run(
      String infile,
      String outfile,
      String statsOutFile,
      String distanceMeasureString,
      String gapScalingFactorMultipliersString) {

    // testing
    // System.out.println ("zallstring that I heard in Driver.java: |" +
    // gapScalingFactorMultipliersString + "|");

    double[] gapScalingFactorMultipliers =
        parseGapScalingFactorMultipliersString(gapScalingFactorMultipliersString);
    Sequence[] seqs = Parser.parseMSA(infile);

    // arg - to satisfy compiler
    double[][] distances = new double[0][0];

    DistanceWithGapMethod distance = getDistanceWithGapMethod(distanceMeasureString);

    // unfortunately, for cache get/set - no easy way of outputting
    // to stats file if logdet distance error occurred??
    // so just output to STDOUT
    if (distance instanceof GappedDistance) {
      GappedDistance gappedDistance = (GappedDistance) distance;
      // do this cache set only once per all GSFM settings
      gappedDistance.cacheSetSimpleDistanceMatrices(seqs);
      // rerun for all gsfm settings as necessary
      for (int i = 0; i < gapScalingFactorMultipliers.length; i++) {
        double gsfm = gapScalingFactorMultipliers[i];

        // testing
        // System.out.println (gsfm);

        String gsfmOutfile = outfile + GSFM_FILENAME_DELIMITER + (new Double(gsfm)).toString();
        String gsfmStatsOutfile =
            statsOutFile + GSFM_FILENAME_DELIMITER + (new Double(gsfm)).toString();

        // change printwriter to new filename
        changePrintWriter(gsfmStatsOutfile);

        distances = gappedDistance.cacheGetDistanceMatrix(gsfm);
        Writer.writePhylipDistanceMatrix(seqs, distances, gsfmOutfile);

        flushAndClosePrintWriter();
      }
    }
    // LATER ADD IN PARAMETERIZING PASS IN MULTIPLE GAP OPEN/EXTEND
    // PARAMETER COSTS FOR AFFINE DISTANCES
    else if (distance instanceof AffineDistance) {
      // parse out rest of parameters from distanceMeasureString
      GapPenalties gapPenalties = parseAffineDistanceMeasureStringParameters(distanceMeasureString);

      AffineDistance affineDistance = (AffineDistance) distance;
      // do this cache set only once per all GSFM settings
      affineDistance.cacheSetSimpleDistanceMatrices(seqs);
      // rerun for all gsfm settings as necessary
      // affine distance params
      // concatenated onto affine distance name
      for (int i = 0; i < gapScalingFactorMultipliers.length; i++) {
        double gsfm = gapScalingFactorMultipliers[i];

        String gsfmOutfile = outfile + GSFM_FILENAME_DELIMITER + (new Double(gsfm)).toString();
        String gsfmStatsOutfile =
            statsOutFile + GSFM_FILENAME_DELIMITER + (new Double(gsfm)).toString();

        // WARNING - MUST MUST MUST have this set
        // appropriately for both gsfm AND affine penalties!!!
        // change printwriter to new filename
        changePrintWriter(gsfmStatsOutfile);

        distances =
            affineDistance.cacheGetDistanceMatrix(
                gsfm, gapPenalties.gapOpenPenalty, gapPenalties.gapExtendPenalty);
        Writer.writePhylipDistanceMatrix(seqs, distances, gsfmOutfile);

        flushAndClosePrintWriter();
      }
    } else { // no caching of simple distances for non-gapped distance methods
      if ((gapScalingFactorMultipliers.length != 1) || (gapScalingFactorMultipliers[0] != 0.0)) {
        printUsage();
        System.exit(1);
      }

      String gsfmFilenameSuffix = GSFM_FILENAME_DELIMITER + gapScalingFactorMultipliers[0];

      // change printwriter to filename
      changePrintWriter(statsOutFile + gsfmFilenameSuffix);

      distances = distance.getDistanceMatrix(seqs);
      Writer.writePhylipDistanceMatrix(seqs, distances, outfile + gsfmFilenameSuffix);

      flushAndClosePrintWriter();
    }
  }