Advertisement
Guest User

SeqIO

a guest
Mar 29th, 2012
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.28 KB | None | 0 0
  1. import org.biojava3.core.sequence.DNASequence;
  2. import org.biojava3.core.sequence.ProteinSequence;
  3. import org.biojava3.core.sequence.io.FastaReaderHelper;
  4. import org.biojava3.core.sequence.template.Sequence;
  5. import org.biojava3.sequencing.io.fastq.*;
  6.  
  7. import java.io.InputStream;
  8. import java.util.Iterator;
  9.  
  10. public class SeqIO {
  11.     public static final Class<DNASequence> DNA = DNASequence.class;
  12.     public static final Class<ProteinSequence> PROTEIN = ProteinSequence.class;
  13.    
  14.     public static final int FASTA = 0;
  15.     public static final int FASTQ_SANGER = 1;
  16.     public static final int FASTQ_SOLEXA = 2;
  17.  
  18.  
  19.     public static <S extends Sequence> Iterable<S> parse(InputStream is, int fileFormat, Class<S> seqType) throws Exception {
  20.         switch (fileFormat) {
  21.             case FASTA:
  22.                 if (seqType == DNA) {
  23.                     return (Iterable<S>) FastaReaderHelper.readFastaDNASequence(is);
  24.                 } else if (seqType == PROTEIN) {
  25.                     return (Iterable<S>) FastaReaderHelper.readFastaProteinSequence(is);
  26.                 } else {
  27.                     throw new IllegalArgumentException("Unsupported sequence type");
  28.                 }
  29.             case FASTQ_SANGER:
  30.                 if (seqType == DNA) {
  31.                     Iterable<Fastq> iter = new SangerFastqReader().read(is);
  32.                     return (Iterable<S>) new MappedIterable<Fastq, DNASequence>(iter.iterator()) {
  33.                         DNASequence mappingFunction(Fastq fq) {
  34.                             return FastqTools.createDNASequenceWithQualityScoresAndErrorProbabilities(fq);
  35.                         }
  36.                     };
  37.                 } else {
  38.                     throw new IllegalArgumentException("Unsupported sequence type");
  39.                 }
  40.             case FASTQ_SOLEXA:
  41.                 if (seqType == DNA) {
  42.                     Iterable<Fastq> iter = new SolexaFastqReader().read(is);
  43.                     return (Iterable<S>) new MappedIterable<Fastq, DNASequence>(iter.iterator()) {
  44.                         DNASequence mappingFunction(Fastq fq) {
  45.                             return FastqTools.createDNASequenceWithQualityScoresAndErrorProbabilities(fq);
  46.                         }
  47.                     };
  48.                 }
  49.              default:
  50.                  throw new IllegalArgumentException("Unsupported file format");
  51.         }
  52.     }
  53.  
  54.     // A wrapper for Iterable that maps a function over the wrapped iterable before returning results
  55.     private static abstract class MappedIterable<A,B> implements Iterable<B> {
  56.         private final Iterator<A> origIter;
  57.         abstract B mappingFunction(A a);
  58.        
  59.         MappedIterable(Iterator<A> originalIterator) {
  60.             origIter = originalIterator;
  61.         }
  62.        
  63.         public Iterator<B> iterator() {
  64.             return new Iterator<B>() {
  65.                 @Override
  66.                 public boolean hasNext() {
  67.                     return origIter.hasNext();
  68.                 }
  69.  
  70.                 @Override
  71.                 public B next() {
  72.                     return mappingFunction(origIter.next());
  73.                 }
  74.  
  75.                 @Override
  76.                 public void remove() {
  77.                     origIter.remove();
  78.                 }
  79.             };
  80.         }
  81.     }
  82.  
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement