001    package calhoun.analysis.crf.io;
002    
003    import java.io.IOException;
004    import java.util.ArrayList;
005    import java.util.List;
006    import java.util.Map;
007    
008    import calhoun.analysis.crf.features.supporting.phylogenetic.RootedBinaryPhylogeneticTree;
009    import calhoun.util.Assert;
010    import calhoun.util.FileUtil;
011    
012    public class AlignmentTree implements InputComponentIO {
013            private static final long serialVersionUID = 760405914814389112L;
014    
015            String component;
016    
017            public List<String> getComponentNames() {
018                    List<String> ret = new ArrayList();
019                    ret.add(component);
020                    return ret;
021            }
022    
023            public void readInputSequences(String location, List<Map<String, InputSequence<?>>> inputs) throws IOException {
024                    Assert.a(inputs.size() > 0, "AlignmentTree can't be the first input.");
025    
026                    // Read the tree from the file
027                    String[] contents = FileUtil.readFile(location).split("\n");
028                    
029                    RootedBinaryPhylogeneticTree tree = new RootedBinaryPhylogeneticTree(contents[0]);
030    
031                    // Add it into every input sequence
032                    for(Map<String, InputSequence<?>> input : inputs) {
033                            input.put(component, new MultipleAlignmentInputSequence(contents[1].trim(), tree));
034                    }
035            }
036    
037            public void writeInputSequences(String location, List<? extends Map<String, ? extends InputSequence<?>>> inputComponents) throws IOException {
038                    MultipleAlignmentInputSequence alignment = (MultipleAlignmentInputSequence) inputComponents.get(0).get(component);
039                    String tree = alignment.getTree().newick();
040                    FileUtil.writeFile(location, tree);
041            }
042    
043            /**
044             * @return Returns the header.
045             */
046            public String getComponent() {
047                    return component;
048            }
049            /**
050             * @param header The header to set.
051             */
052            public void setComponent(String header) {
053                    this.component = header;
054            }
055    }