001 package calhoun.analysis.crf.test;
002
003 import java.util.List;
004
005 import org.apache.commons.logging.Log;
006 import org.apache.commons.logging.LogFactory;
007
008 import calhoun.analysis.crf.Conrad;
009 import calhoun.analysis.crf.ModelManager;
010 import calhoun.analysis.crf.io.TrainingSequence;
011 import calhoun.analysis.crf.io.CompositeInput.LegacyInputHandler;
012 import calhoun.analysis.crf.solver.StandardOptimizer;
013 import calhoun.util.AbstractTestCase;
014
015 public class CRFTest extends AbstractTestCase {
016 private static final Log log = LogFactory.getLog(CRFTest.class);
017
018 public void testFullCycle() throws Exception {
019 // Create and train the CRF
020 Conrad crf = ZeroOrderManager.getCRF();
021 List<? extends TrainingSequence<?>> data = crf.getInputHandler().readTrainingData("test/input/zeroOrderTest.txt");
022 assertEquals(data.size(),3);
023
024 crf.train(data);
025 // Write the trained model out to a file and read it back in again.
026
027 log.info(crf.printWeights());
028 crf.test(data, "test/working/zeroOrderPredicted.txt");
029 assertFilesMatch("test/output/zeroOrderPredicted.txt", "test/working/zeroOrderPredicted.txt");
030 //log.info(results);
031 }
032
033 public void testSpringConfig() throws Exception {
034 Conrad c = new Conrad("test/input/configTest.xml");
035 ModelManager cm = c.getModel();
036 assertEquals(7, cm.getNumStates());
037 assertEquals("exon1", cm.getStateName(1));
038 LegacyInputHandler seq = (LegacyInputHandler) c.getInputHandler();
039 assertNotNull(seq);
040 StandardOptimizer opt = (StandardOptimizer) c.getOptimizer();
041 assertEquals(1, opt.getMaxIters());
042 }
043
044 public void testToolkitMainSeparateTraining() throws Exception {
045 // Create and train the CRF
046 Conrad.main(new String[] {"trainFeatures", "test/input/zeroOrderLBFGS.xml", "test/input/zeroOrderTest.txt", "test/working/zeroModelSep.ser"});
047 Conrad.main(new String[] {"trainWeights", "test/working/zeroModelSep.ser", "test/input/zeroOrderTest.txt", "test/working/zeroModelSep2.ser"});
048 Conrad.main(new String[] {"test", "test/working/zeroModelSep2.ser", "test/input/zeroOrderTest.txt", "test/working/zeroOrderSepMainPredicted.txt"});
049 }
050
051 }