/*
* BioJava development code
*
* This code may be freely distributed and modified under the
* terms of the GNU Lesser General Public Licence. This should
* be distributed with the code. If you do not have a copy,
* see:
*
* http://www.gnu.org/copyleft/lesser.html
*
* Copyright for this code is held jointly by the individual
* authors. These should be listed in @author doc comments.
*
* For more information on the BioJava project and its aims,
* or to join the biojava-l mailing list, visit the home page
* at:
*
* http://www.biojava.org/
*
*/
package org.biojava.nbio.phylo;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.LinkedHashMap;
import org.biojava.nbio.core.sequence.MultipleSequenceAlignment;
import org.biojava.nbio.core.sequence.ProteinSequence;
import org.biojava.nbio.core.sequence.compound.AminoAcidCompound;
import org.biojava.nbio.core.sequence.compound.AminoAcidCompoundSet;
import org.biojava.nbio.core.sequence.io.FastaReader;
import org.biojava.nbio.core.sequence.io.FastaWriter;
import org.biojava.nbio.core.sequence.io.GenericFastaHeaderParser;
import org.biojava.nbio.core.sequence.io.ProteinSequenceCreator;
import org.biojava.nbio.core.sequence.io.template.FastaHeaderFormatInterface;
import org.forester.msa.Msa;
import org.junit.Test;
import static org.junit.Assert.*;
/**
* Test the BioJava-forester wrapper methods.
*
* @author Aleix Lafita
*
*/
public class TestForesterWrapper {
@Test
public void testMSAconversion() throws Exception {
// Load the msa FASTA file into a BioJava MSA object
InputStream inStream = TestForesterWrapper.class
.getResourceAsStream("/1u6d_symm.fasta");
FastaReader<ProteinSequence, AminoAcidCompound> fastaReader =
new FastaReader<ProteinSequence, AminoAcidCompound>(
inStream,
new GenericFastaHeaderParser<ProteinSequence, AminoAcidCompound>(),
new ProteinSequenceCreator(AminoAcidCompoundSet
.getAminoAcidCompoundSet()));
LinkedHashMap<String, ProteinSequence> proteinSequences = fastaReader
.process();
inStream.close();
MultipleSequenceAlignment<ProteinSequence, AminoAcidCompound> msa =
new MultipleSequenceAlignment<ProteinSequence, AminoAcidCompound>();
String expected = "";
for (ProteinSequence proteinSequence : proteinSequences.values()) {
msa.addAlignedSequence(proteinSequence);
expected += ">" + proteinSequence.getOriginalHeader() + "\n"
+ proteinSequence.toString() + "\n";
}
// Convert the biojava MSA to a FASTA String
OutputStream os = new ByteArrayOutputStream();
FastaWriter<ProteinSequence, AminoAcidCompound> fastaW =
new FastaWriter<ProteinSequence, AminoAcidCompound>(os,
msa.getAlignedSequences(),
new FastaHeaderFormatInterface<ProteinSequence, AminoAcidCompound>() {
@Override
public String getHeader(ProteinSequence sequence) {
return sequence.getAccession().toString();
};
});
fastaW.process();
String biojava = os.toString();
// Convert the biojava MSA to a forester Msa
Msa fMsa = ForesterWrapper.convert(msa);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < fMsa.getNumberOfSequences(); i++) {
sb.append(">" + fMsa.getIdentifier(i) + "\n");
sb.append(fMsa.getSequenceAsString(i) + "\n");
}
String forester = sb.toString();
// Assert that all FASTA files are equal
assertEquals(expected, biojava);
assertEquals(expected, forester);
}
}