File: ProbShared2.java

package info (click to toggle)
bbmap 39.20%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 26,024 kB
  • sloc: java: 312,743; sh: 18,099; python: 5,247; ansic: 2,074; perl: 96; makefile: 39; xml: 38
file content (75 lines) | stat: -rwxr-xr-x 1,766 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package fun;

import java.util.HashSet;
import java.util.Random;

import dna.AminoAcid;

public class ProbShared2 {

	public static void main(String args[]){
		int k=Integer.parseInt(args[0]);
		int len1=Integer.parseInt(args[1]);
		int len2=Integer.parseInt(args[2]);
		int rounds=Integer.parseInt(args[3]);
		
		System.out.println("Probability:   "+simulate(k, len1, len2, rounds));
	}
	
	static double simulate(int k, int len1, int len2, int rounds){
		int successes=0;
		final HashSet<Long> set=new HashSet<Long>();
		for(int i=0; i<rounds; i++){
			successes+=simulateOnePair(k, len1, len2, set);
		}
		return successes/(double)rounds;
	}
	
	static int simulateOnePair(int k, int len1, int len2, HashSet<Long> set){
		set.clear();
		
		final int shift=2*k;
		final long mask=(shift>63 ? -1L : ~((-1L)<<shift));
		long kmer=0;
		int len=0;
		
		byte[] bases=randomSequence(len2);
		
		for(int i=0; i<bases.length; i++){
			byte b=bases[i];
			long x=baseToNumber[b];
			kmer=((kmer<<2)|x)&mask;
			if(x<0){len=0;}else{len++;}
			if(len>=k){
				set.add(kmer);
			}
		}
		
		bases=randomSequence(len1);
		
		for(int i=0; i<bases.length; i++){
			byte b=bases[i];
			long x=baseToNumber[b];
			kmer=((kmer<<2)|x)&mask;
			if(x<0){len=0;}else{len++;}
			if(len>=k){
				if(set.contains(kmer)){return 1;}
			}
		}
		return 0;
	}
	
	static byte[] randomSequence(int len){
		byte[] array=new byte[len];
		for(int i=0; i<len; i++){
			int number=randy.nextInt(4);
			array[i]=AminoAcid.numberToBase[number];
		}
		return array;
	}
	
	static final Random randy=new Random();
	static final byte[] numberToBase=AminoAcid.numberToBase;
	static final byte[] baseToNumber=AminoAcid.baseToNumber;
	
}