package dna; import java.util.Arrays; public class MotifProbsN extends Motif { public static void main(String args[]){ String s1="ATN"; String s2="CTATGCCCATCTGATGGCATGAGGATGAA"; // if(args.length>0){s1=args[0];} // if(args.length>1){s2=args[1];} MotifProbsN m=makeMotif("Exon Stops MP3", 10, 3, 3); System.out.println("Made motif "+m.name); String source=s2; int x=m.countExact(source); System.out.println(x+" matches."); byte[] sbytes=source.getBytes(); for(int i=0; i\t%.5f", p, m.normalize(p))); } } public static MotifProbsN makeMotif(String name_, int length_, int center_, int n_){ Matrix mat=Matrix.get(name_); assert(mat!=null) : "\nCan't find '"+name_+"' in:\n"+Matrix.keys()+"\n\n"; float[][] sub=mat.subGrid(center_, length_); // System.out.println("Found "+name+":\n"+Arrays.toString(sub[preLen])); assert(sub[0].length==(1<<(2*n_))); MotifProbsN r=new MotifProbsN(name_, sub, center_, n_); Matrix percentMatrix=null; try { percentMatrix=Matrix.get(name_+", "+r.length+", "+r.center); } catch (Exception e) { // TODO Auto-generated catch block // System.out.println("\nIgnoring missing percentMatrix:\n"+e); } if(percentMatrix!=null){ r.percentile=percentMatrix.grid[0]; } // r.percentile=percentTable.get(name); return r; } public MotifProbsN(String name_, float[][] p, int cen, int n){ super(name_, p.length, cen); N=n; chunk=new byte[N]; baseProb=Motif.baseProbN[N]; probs=p; importance=positionImportance(probs); adjustForBaseProb(probs, baseProb); double pmin=1, pmax=1; double sum=0; for(int i=0; i>(2*(N-1))]); // pmax*=probs[i][x]*4; //TODO Note the .25; could be an empirical inverse probability, but that causes complications // pmin*=probs[i][y]*4; pmax*=probs[i][x]; pmin*=probs[i][y]; // pmax*=Math.pow(probs[i][x], 1+importance[i]); // pmin*=Math.pow(probs[i][y], 1+importance[i]); // pmax*=(probs[i][x]+(matrixAvg*importance[i]*.1f)); // pmin*=(probs[i][y]+(matrixAvg*importance[i]*.1f)); } maxProb=(float)pmax; minProb=(float)pmin; invProbDif=1f/(maxProb-minProb); invLength=1f/(length); commonLetters=sb.toString(); lettersUpper=commonLetters.toUpperCase().getBytes(); lettersLower=commonLetters.toLowerCase().getBytes(); numbers=new byte[commonLetters.length()]; numbersExtended=new byte[commonLetters.length()]; for(int i=0; isource.length){return false;} for(int i=0; isource.length){return minProb;} float r=1; for(int i=0; ibaseProb.length){return minProb;} // float p1=(probs[i][n]+(matrixAvg*importance[i]*.1f)); // float p1=(float)Math.pow(probs[i][n], 1+importance[i]); //Note: Assumes (A,C,G,T) only. float p1=probs[i][n]; //Note: Assumes (A,C,G,T) only. // float p2=invBaseProb2[n]; // float p2=4; //TODO // // r=r*p1*p2; r=r*p1; } return r; } public float[] positionImportance(float[][] rawProbs){ float[] base=baseProb; float[] out=new float[rawProbs.length]; double maxSum=0; for(int i=0; imaxSum){ maxSum=sum; } } for(int i=0; i