X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=forester%2Fjava%2Fsrc%2Forg%2Fforester%2Fmsa%2FBasicMsa.java;h=dc383c9b0397d62a06c31e73ef316f17cf8613c1;hb=e6ea1a1dcb0a9b96cad1bc08c3b80a6f876344d2;hp=395a16d1ca5b5bfc35d1008b0c718d8392168955;hpb=ca9937e02d1d293eee015765ecb8564e563f591c;p=jalview.git diff --git a/forester/java/src/org/forester/msa/BasicMsa.java b/forester/java/src/org/forester/msa/BasicMsa.java index 395a16d..dc383c9 100644 --- a/forester/java/src/org/forester/msa/BasicMsa.java +++ b/forester/java/src/org/forester/msa/BasicMsa.java @@ -175,15 +175,18 @@ public class BasicMsa implements Msa { case FASTA: writeToFasta( w ); break; + case NEXUS: + writeToNexus( w ); + break; default: throw new RuntimeException( "unknown format " + format ); } } - private int determineMaxIdLength() { - int max = 0; + private short determineMaxIdLength() { + short max = 0; for( int row = 0; row < getNumberOfSequences(); ++row ) { - final int l = getIdentifier( row ).length(); + final short l = ( short ) getIdentifier( row ).length(); if ( l > max ) { max = l; } @@ -195,10 +198,39 @@ public class BasicMsa implements Msa { SequenceWriter.writeSeqs( asSequenceList(), w, SEQ_FORMAT.FASTA, 100 ); } + private void writeToNexus( final Writer w ) throws IOException { + final int max = determineMaxIdLength() + 1; + w.write( "Begin Data;" ); + w.write( ForesterUtil.LINE_SEPARATOR ); + w.write( " Dimensions NTax=" + getNumberOfSequences() ); + w.write( " NChar=" + getLength() ); + w.write( ";" ); + w.write( ForesterUtil.LINE_SEPARATOR ); + w.write( " Format DataType=Protein Interleave=No gap=-;" ); + w.write( ForesterUtil.LINE_SEPARATOR ); + w.write( " Matrix" ); + w.write( ForesterUtil.LINE_SEPARATOR ); + for( int row = 0; row < getNumberOfSequences(); ++row ) { + final Sequence seq = getSequence( row ); + final String s = seq.getMolecularSequenceAsString(); + w.write( " " ); + w.write( ForesterUtil.pad( getIdentifier( row ).replace( ' ', '_' ), max, ' ', false ).toString() ); + w.write( " " ); + w.write( s ); + w.write( ForesterUtil.LINE_SEPARATOR ); + } + w.write( " ;" ); + w.write( ForesterUtil.LINE_SEPARATOR ); + w.write( "End;" ); + w.write( ForesterUtil.LINE_SEPARATOR ); + } + private void writeToPhylip( final Writer w ) throws IOException { final int max = determineMaxIdLength() + 1; + w.write( getNumberOfSequences() + " " + getLength() ); + w.write( ForesterUtil.LINE_SEPARATOR ); for( int row = 0; row < getNumberOfSequences(); ++row ) { - w.write( ForesterUtil.pad( getIdentifier( row ), max, ' ', false ).toString() ); + w.write( ForesterUtil.pad( getIdentifier( row ).replace( ' ', '_' ), max, ' ', false ).toString() ); for( int col = 0; col < getLength(); ++col ) { w.write( getResidueAt( row, col ) ); }