files modified for Bayes benchmark
[IRC.git] / Robust / src / Benchmarks / SingleTM / Genome / Genome.java
1 public class Genome extends Thread {
2   int geneLength;
3   int segmentLength;
4   int minNumSegment;
5   int numThread;
6
7   int threadid;
8
9   // add segments, random, etc to member variables
10   // include in constructor
11   // allows for passing in thread run function
12   Random randomPtr;
13   Gene genePtr;
14   Segments segmentsPtr;
15   Sequencer sequencerPtr;
16
17   Genome(String x[]) {
18     parseCmdLine(x);
19     if(numThread == 0) {
20       numThread = 1;
21     }
22
23     randomPtr = new Random();
24     randomPtr.random_alloc();
25     randomPtr.random_seed(0);
26
27     genePtr = new Gene(geneLength);
28     genePtr.create(randomPtr);
29
30     segmentsPtr = new Segments(segmentLength, minNumSegment);
31     segmentsPtr.create(genePtr, randomPtr);
32
33     sequencerPtr = new Sequencer(geneLength, segmentLength, segmentsPtr);
34   }
35
36   Genome(int myThreadid, int myGeneLength, int mySegLength, int myMinNumSegs, int myNumThread, Random myRandomPtr, Gene myGenePtr, Segments mySegmentsPtr, Sequencer mySequencerPtr) {
37     threadid = myThreadid;
38     geneLength = myGeneLength;
39     segmentLength = mySegLength;
40     minNumSegment = myMinNumSegs;
41     numThread = myNumThread;
42
43     randomPtr = myRandomPtr;
44     genePtr = myGenePtr;
45     segmentsPtr = mySegmentsPtr;
46     sequencerPtr = mySequencerPtr;
47   }
48
49   public void parseCmdLine(String args[]) {
50     int i = 0;
51     String arg;
52     while (i < args.length && args[i].startsWith("-")) {
53       arg = args[i++];
54       //check options
55       if(arg.equals("-g")) {
56         if(i < args.length) {
57           this.geneLength = new Integer(args[i++]).intValue();
58         }
59       } else if(arg.equals("-s")) {
60         if(i < args.length) {
61           this.segmentLength = new Integer(args[i++]).intValue();
62         }
63       } else if(arg.equals("-n")) {
64         if(i < args.length) {
65           this.minNumSegment = new Integer(args[i++]).intValue();
66         }
67       } else if(arg.equals("-t")) {
68         if(i < args.length) {
69           this.numThread = new Integer(args[i++]).intValue();
70         }
71       } 
72     }
73
74   }
75
76   public void run() {
77     Barrier.enterBarrier();
78     Sequencer.run(threadid, numThread, randomPtr, sequencerPtr); 
79     Barrier.enterBarrier();
80   }
81
82   public static void main(String x[]){
83
84     System.out.print("Creating gene and segments... ");
85     Genome g = new Genome(x);
86
87     System.out.println("done.");
88     System.out.println("Gene length     = " + g.genePtr.length);
89     System.out.println("Segment length  = " + g.segmentsPtr.length);
90     System.out.println("Number segments = " + g.segmentsPtr.contentsPtr.size());
91     System.out.println("Number threads  = " + g.numThread);
92
93
94     Barrier.setBarrier(g.numThread);
95
96     /* Create and Start Threads */
97
98     String gene = g.genePtr.contents;
99     Genome[] gn = new Genome[g.numThread];
100
101     for(int i = 1; i<g.numThread; i++) {
102       gn[i] = new Genome(i, g.geneLength, g.segmentLength, g.minNumSegment, g.numThread, g.randomPtr, g.genePtr, g.segmentsPtr, g.sequencerPtr);
103     }
104
105     System.out.print("Sequencing gene... ");    
106
107     for(int i = 1; i<g.numThread; i++) {
108       gn[i].start();
109     }
110
111     Barrier.enterBarrier();
112     Sequencer.run(0, g.numThread, g.randomPtr, g.sequencerPtr); 
113     Barrier.enterBarrier();
114
115
116     System.out.println("done.");
117
118     /* Check result */
119     {
120       String sequence = g.sequencerPtr.sequence;
121       boolean result = (gene.compareTo(sequence) == 0) ? true:false;
122       System.out.println("Sequence matches gene: " + (result ? "yes" : "no"));
123       //DEBUG
124       //if (result) {
125       // System.out.println("gene     = " + gene);
126       // System.out.println("sequence = " + sequence);
127       //}
128     }
129
130   }
131 }