@Option( help = "Input sequences (output the intersecting sequences rather than a new GFF file)", optional = true) public void setSeqs(File f) throws FileNotFoundException, ChangeVetoException, NoSuchElementException, BioException { this.seqsFile = f; this.seqDB = new HashSequenceDB(); for (SequenceIterator si = RichSequence.IOTools.readFastaDNA(new BufferedReader(new FileReader(f)), null); si.hasNext(); ) { seqDB.addSequence(si.nextSequence()); } }
public void main(String[] args) throws BioException, IOException { if (count.length != args.length) { System.err.println("The number of counts and output file arguments does not match!"); System.exit(1); } OutputStream[] outputStreams; if ((args != null) && (args.length > 0)) { outputStreams = new OutputStream[args.length]; for (int i = 0; i < args.length; i++) { outputStreams[i] = new BufferedOutputStream(new FileOutputStream(args[i])); } } else { outputStreams = new OutputStream[] {System.out}; } RichSequenceIterator seqIterator = RichSequence.IOTools.readFastaDNA(new BufferedReader(new FileReader(seqFile)), null); List<Sequence> seqs = new ArrayList<Sequence>(); while (seqIterator.hasNext()) { seqs.add(seqIterator.nextSequence()); } List<List<Sequence>> chosenSeqs = new ArrayList<List<Sequence>>(); if (!sampleWithReplacement) { for (int c : count) { List<Sequence> cseqs = new ArrayList<Sequence>(); chosenSeqs.add(cseqs); while (c > 0) { int randSeqIndex = random.nextInt(seqs.size()); cseqs.add(seqs.remove(randSeqIndex)); c--; } } } else if (sampleWithReplacement || (length > 0)) { /* * if you want to sample from sequences with replacement * or if the wanted length is specified */ for (int c : count) { int i = 0; List<Sequence> cseqs = new ArrayList<Sequence>(); chosenSeqs.add(cseqs); while (c > 0) { Sequence randomSeq = seqs.get(random.nextInt(seqs.size())); if (length > 0) { int startPos = random.nextInt(1 + randomSeq.length() - length); cseqs.add( new SimpleSequence( randomSeq.subList(startPos, startPos + length), null, randomSeq.getName() + "_" + i++, Annotation.EMPTY_ANNOTATION)); } else { cseqs.add(randomSeq); } c--; } } } int i = 0; for (List<Sequence> seqList : chosenSeqs) { for (Sequence seq : seqList) { Sequence s; if (uniqueNames) { s = new SimpleSequence( seq.subList(1, seq.length()), null, seq.getName() + "_" + i, Annotation.EMPTY_ANNOTATION); } else { s = seq; } RichSequence.IOTools.writeFasta(outputStreams[i], s, null); outputStreams[i].flush(); } i++; } seqs = null; }