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 }