-
- public static int findPair(SequenceFeature[] pairs,int indice){
- for(int i=0; i<pairs.length; i++){
- if(pairs[i].getBegin()==indice){
- return pairs[i].getEnd();
- }
- }
- return -1;
- }
-
- /**
- * Method to calculate a 'base pair consensus row', very similar
- * to nucleotide consensus but takes into account a given structure
- * @param sequences
- * @param start
- * @param end
- * @param result
- * @param profile
- * @param rnaStruc
- */
- public static final void calculate(SequenceI[] sequences, int start,
- int end, Hashtable[] result, boolean profile, AlignmentAnnotation rnaStruc){
- System.out.println("StructureFrequency.calculate");
- Hashtable residueHash;
- String maxResidue;
- char[] seq, struc=rnaStruc.getRNAStruc().toCharArray();
- SequenceFeature[] rna =rnaStruc._rnasecstr;
- char c,s,cEnd;
- int count,nonGap=0,i,bpEnd=-1,j,jSize = sequences.length;
- int[] values = new int[255];
- float percentage;
-
- /*for(int x=(rna.length-1); x>=0; x--){
- System.out.println("BP-"+((rna.length-1)-x)+" "+rna[x].getBegin()+","+rna[x].getEnd()+" "+rna[x].getFeatureGroup());
- }*/
-
-
- for (i = start; i < end; i++) //foreach column
- {
- residueHash = new Hashtable();
- maxResidue="-";
- values = new int[255];
- bpEnd=-1;
-
- s = struc[i];
- if (s == '.' || s == ' ')
- {
- s = '-';
- }
-
- if(s != '('){
- values['-']++;
- }
- else
- {
- for (j = 0; j < jSize; j++) //foreach row
- {
- if (sequences[j]==null)
- {
- System.err.println("WARNING: Consensus skipping null sequence - possible race condition.");
- continue;
- }
- seq = sequences[j].getSequence();
-
- if (seq.length > i)
- {
- c = seq[i];
-
- //standard representation for gaps in sequence and structure
- if (c == '.' || c == ' ')
- {
- c = '-';
- }
-
- if (c == '-')
- {
- values['-']++;
- continue;
- }
- //if(s == '('){
- //bpEnd=rna[(rna.length-1-nonGap)].getEnd();
- bpEnd=findPair(rna,i);
- cEnd=seq[bpEnd];
- //System.out.println(i+","+bpEnd);
- if(checkBpType(c,cEnd)){
- values['H']++; //H means it's a helix (structured)
- }
- maxResidue="H";
- //}
- }
- }
- nonGap++;
- }
- //UPDATE this for new values
- //if (profile)
- //{
- // residueHash.put(PROFILE, new int[][]
- // { values, new int[]
- // { jSize, nongap } });
- // }
-
-
- count=values['H'];
-
- residueHash.put(MAXCOUNT, new Integer(count));
- residueHash.put(MAXRESIDUE, maxResidue);
-
- percentage = ((float) count * 100) / (float) jSize;
- residueHash.put(PID_GAPS, new Float(percentage));
-
- //percentage = ((float) count * 100) / (float) nongap;
- //residueHash.put(PID_NOGAPS, new Float(percentage));
- if(result[i]==null){
- result[i] = residueHash;
- }
- if(bpEnd>0){
- result[bpEnd]=residueHash;
- }
- }
- }