Mercurial > repos > rliterman > csp2
comparison CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/opt/bbmap-39.01-1/current/icecream/PolymerTrimmer.java @ 68:5028fdace37b
planemo upload commit 2e9511a184a1ca667c7be0c6321a36dc4e3d116d
author | jpayne |
---|---|
date | Tue, 18 Mar 2025 16:23:26 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
67:0e9998148a16 | 68:5028fdace37b |
---|---|
1 package icecream; | |
2 | |
3 public class PolymerTrimmer { | |
4 | |
5 public static boolean parse(String arg, String a, String b){ | |
6 if(a.equalsIgnoreCase("minPolymer")){ | |
7 minPolymer=Integer.parseInt(b); | |
8 }else if(a.equalsIgnoreCase("minFraction")){ | |
9 float f=Float.parseFloat(b); | |
10 setMinFraction(f); | |
11 }else if(a.equalsIgnoreCase("polyerror")){ | |
12 float f=Float.parseFloat(b); | |
13 setMinFraction(1-f); | |
14 }else{ | |
15 return false; | |
16 } | |
17 return true; | |
18 } | |
19 | |
20 public static int testLeft(byte[] bases, char symbol){return testLeft(bases, (byte)symbol);} | |
21 | |
22 public static int testLeft(byte[] bases, byte symbol){ | |
23 float score=0; | |
24 float max=0; | |
25 int maxPos=-1; | |
26 for(int i=0; i<bases.length && score>=minScore; i++){ | |
27 byte b=bases[i]; | |
28 if(b==symbol){ | |
29 score++; | |
30 if(score>max){ | |
31 max=score; | |
32 maxPos=i; | |
33 } | |
34 }else{ | |
35 score-=penalty; | |
36 } | |
37 } | |
38 int trim=maxPos+1; | |
39 return (trim<minPolymer ? 0 : trim); | |
40 } | |
41 | |
42 public static int testRight(byte[] bases, char symbol){return testRight(bases, (byte)symbol);} | |
43 | |
44 public static int testRight(byte[] bases, byte symbol){ | |
45 float score=0; | |
46 float max=0; | |
47 int maxPos=bases.length; | |
48 for(int i=bases.length-1; i>=0 && score>=minScore; i--){ | |
49 byte b=bases[i]; | |
50 if(b==symbol){ | |
51 score++; | |
52 if(score>max){ | |
53 max=score; | |
54 maxPos=i; | |
55 } | |
56 }else{ | |
57 score-=penalty; | |
58 } | |
59 } | |
60 int trim=bases.length-maxPos; | |
61 return (trim<minPolymer ? 0 : trim); | |
62 } | |
63 | |
64 public static void setMinFraction(float f){ | |
65 assert(f>=0 && f<=1) : f; | |
66 minFraction=f; | |
67 penalty=(f>=1 ? 99 : ((1f/(1-minFraction))-1)); | |
68 minScore=(f>=1 ? 0 : -4*penalty); | |
69 } | |
70 | |
71 static int minPolymer=5; | |
72 private static float minFraction=0.8f; | |
73 private static float penalty=(1f/(1-minFraction))-1; | |
74 private static float minScore=-4*penalty; | |
75 | |
76 } |