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(); } }