X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=test%2Fjalview%2Fanalysis%2FDnaAlignmentGenerator.java;fp=test%2Fjalview%2Fanalysis%2FDnaAlignmentGenerator.java;h=59a08bec13696edf3aa25a39adf46cd83f494597;hb=285b51fa6f49054040c72dfb2a64db637dc05c79;hp=0000000000000000000000000000000000000000;hpb=1d21f595873869193bd4821e1af9c4eb56c5f158;p=jalview.git diff --git a/test/jalview/analysis/DnaAlignmentGenerator.java b/test/jalview/analysis/DnaAlignmentGenerator.java new file mode 100644 index 0000000..59a08be --- /dev/null +++ b/test/jalview/analysis/DnaAlignmentGenerator.java @@ -0,0 +1,78 @@ +package jalview.analysis; + +import java.util.Random; + +/** + * Generates a random Fasta format DNA alignment for given sequence length and + * count. + * + * @author gmcarstairs + * + */ +public class DnaAlignmentGenerator +{ + private static final char GAP = '-'; + + private static final char[] BASES = new char[] + { 'G', 'T', 'C', 'A', GAP }; + + private Random random; + + /** + * Given args for sequence length and count, output a DNA 'alignment' where + * each position is a random choice from 'GTCA-'. + * + * @param args + * the width (base count) and height (sequence count) to generate + * plus an integer random seed value + */ + public static void main(String[] args) + { + int width = Integer.parseInt(args[0]); + int height = Integer.parseInt(args[1]); + long randomSeed = Long.valueOf(args[2]); + new DnaAlignmentGenerator().generate(width, height, randomSeed); + } + + /** + * Outputs a DNA 'alignment' of given width and height, where each position is + * a random choice from 'GTCA-'. + * + * @param width + * @param height + * @param randomSeed + */ + private void generate(int width, int height, long randomSeed) + { + random = new Random(randomSeed); + for (int seqno = 0; seqno < height; seqno++) + { + generateSequence(seqno + 1, width); + } + } + + /** + * Outputs a DNA 'sequence' of given length, with some random gaps included. + * + * @param seqno + * @param length + */ + private void generateSequence(int seqno, int length) + { + System.out.println(">SEQ" + seqno); + StringBuilder seq = new StringBuilder(length); + + /* + * Loop till we've output 'length' real bases (excluding gaps) + */ + for (int count = 0 ; count < length ; ) { + char c = BASES[random.nextInt(Integer.MAX_VALUE) % 5]; + seq.append(c); + if (c != GAP) + { + count++; + } + } + System.out.println(seq.toString()); + } +}