Java tutorial
/* * Copyright (C) 2012 Michigan State University <rdpstaff at msu.edu> * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package edu.msu.cme.rdp.classifier.train.validation.crossvalidate; import edu.msu.cme.rdp.classifier.cli.CmdOptions; import edu.msu.cme.rdp.classifier.train.validation.NBClassifier; import edu.msu.cme.rdp.classifier.train.validation.leaveoneout.LeaveOneOutTesterMain; import static edu.msu.cme.rdp.classifier.train.validation.leaveoneout.LeaveOneOutTesterMain.LENGTH_DESC; import static edu.msu.cme.rdp.classifier.train.validation.leaveoneout.LeaveOneOutTesterMain.LENGTH_LONG_OPT; import static edu.msu.cme.rdp.classifier.train.validation.leaveoneout.LeaveOneOutTesterMain.LENGTH_SHORT_OPT; import static edu.msu.cme.rdp.classifier.train.validation.leaveoneout.LeaveOneOutTesterMain.OUTFILE_DESC; import static edu.msu.cme.rdp.classifier.train.validation.leaveoneout.LeaveOneOutTesterMain.OUTFILE_LONG_OPT; import static edu.msu.cme.rdp.classifier.train.validation.leaveoneout.LeaveOneOutTesterMain.OUTFILE_SHORT_OPT; import static edu.msu.cme.rdp.classifier.train.validation.leaveoneout.LeaveOneOutTesterMain.QUERYFILE_DESC; import static edu.msu.cme.rdp.classifier.train.validation.leaveoneout.LeaveOneOutTesterMain.QUERYFILE_LONG_OPT; import static edu.msu.cme.rdp.classifier.train.validation.leaveoneout.LeaveOneOutTesterMain.QUERYFILE_SHORT_OPT; import static edu.msu.cme.rdp.classifier.train.validation.leaveoneout.LeaveOneOutTesterMain.TRAIN_SEQFILE_DESC; import static edu.msu.cme.rdp.classifier.train.validation.leaveoneout.LeaveOneOutTesterMain.TRAIN_SEQFILE_LONG_OPT; import static edu.msu.cme.rdp.classifier.train.validation.leaveoneout.LeaveOneOutTesterMain.TRAIN_SEQFILE_SHORT_OPT; import static edu.msu.cme.rdp.classifier.train.validation.leaveoneout.LeaveOneOutTesterMain.TRAIN_TAXONFILE_DESC; import static edu.msu.cme.rdp.classifier.train.validation.leaveoneout.LeaveOneOutTesterMain.TRAIN_TAXONFILE_LONG_OPT; import static edu.msu.cme.rdp.classifier.train.validation.leaveoneout.LeaveOneOutTesterMain.TRAIN_TAXONFILE_SHORT_OPT; import java.io.File; import java.io.IOException; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.HelpFormatter; import org.apache.commons.cli.Option; import org.apache.commons.cli.Options; import org.apache.commons.cli.ParseException; import org.apache.commons.cli.PosixParser; /** * * @author wangqion */ public class CrossValidateMain { private static Options options = new Options(); static { options.addOption(new Option(TRAIN_SEQFILE_SHORT_OPT, TRAIN_SEQFILE_LONG_OPT, true, TRAIN_SEQFILE_DESC)); options.addOption( new Option(TRAIN_TAXONFILE_SHORT_OPT, TRAIN_TAXONFILE_LONG_OPT, true, TRAIN_TAXONFILE_DESC)); options.addOption(new Option(OUTFILE_SHORT_OPT, OUTFILE_LONG_OPT, true, OUTFILE_DESC)); options.addOption(new Option(LENGTH_SHORT_OPT, LENGTH_LONG_OPT, true, LENGTH_DESC)); options.addOption(new Option(CmdOptions.MIN_BOOTSTRAP_WORDS_SHORT_OPT, CmdOptions.MIN_BOOTSTRAP_WORDS_LONG_OPT, true, CmdOptions.MIN_WORDS_DESC)); options.addOption("f", "fraction", true, "fraction of the complete set as test set, default is 0.1"); options.addOption("r", "rdmRank", true, "if specified, random select a fraction of taxa at the given rank, " + "and use all the sequence assigned to the selected taxa as test set. If rank is not specified, " + "a fraction of sequences will be selected from the source file to use as test set"); } /** * This is the main method for cross validation test. * @param args * @throws IOException */ public static void main(String[] args) throws IOException { String tax_file = null; String source_file = null; String out_file = null; Integer partialLength = null; // default is full length float fraction = 0.1f; String rdmSelectedRank = null; int min_bootstrap_words = NBClassifier.MIN_BOOTSTRSP_WORDS; try { CommandLine line = new PosixParser().parse(options, args); if (line.hasOption(TRAIN_TAXONFILE_SHORT_OPT)) { tax_file = line.getOptionValue(TRAIN_TAXONFILE_SHORT_OPT); } else { throw new ParseException("Taxonomy file must be specified"); } if (line.hasOption(TRAIN_SEQFILE_SHORT_OPT)) { source_file = line.getOptionValue(TRAIN_SEQFILE_SHORT_OPT); } else { throw new ParseException("Source training fasta file must be specified"); } if (line.hasOption(OUTFILE_SHORT_OPT)) { out_file = line.getOptionValue(OUTFILE_SHORT_OPT); } else { throw new ParseException("Output file must be specified"); } if (line.hasOption(LENGTH_SHORT_OPT)) { ; partialLength = new Integer(line.getOptionValue(LENGTH_SHORT_OPT)); } if (line.hasOption("fraction")) { fraction = Float.parseFloat(line.getOptionValue("fraction")); } if (line.hasOption("rdmRank")) { rdmSelectedRank = line.getOptionValue("rdmRank"); } if (line.hasOption(CmdOptions.MIN_BOOTSTRAP_WORDS_SHORT_OPT)) { min_bootstrap_words = Integer .parseInt(line.getOptionValue(CmdOptions.MIN_BOOTSTRAP_WORDS_SHORT_OPT)); if (min_bootstrap_words < NBClassifier.MIN_BOOTSTRSP_WORDS) { throw new IllegalArgumentException( min_bootstrap_words + " must be at least " + NBClassifier.MIN_BOOTSTRSP_WORDS); } } } catch (ParseException ex) { new HelpFormatter().printHelp(120, "CrossValidateMain", "", options, "", true); return; } boolean useSeed = true; // use seed for random number generator CrossValidate theObj = new CrossValidate(); theObj.runTest(new File(tax_file), new File(source_file), new File(out_file), rdmSelectedRank, fraction, partialLength, useSeed, min_bootstrap_words); } }