import charite.christo.strap.StrapProtein;
import static java.lang.System.*;
/*
  java  DemoProtein_gaps_advanced
  It shows how residue positions of the gapped sequence are converted
  to residue indices of the ungapped sequence and vice-versa.
*/
public class DemoProtein_gaps_advanced {
    public static void main(String argv[]) {
        final StrapProtein p= new StrapProtein();
        p.setName("myName");
        p.setGappedSequence("AS   DFG");
        final int nColumns=p.getMaxColumn()+1;
        out.println("the gapped sequence has a length of "+nColumns);
        final int nRes=p.countResidues();
        out.println("the number of residues is  "+nRes);
        out.println();
        out.println("getGappedSequence()="+p.getGappedSequenceAsString());
        out.println();
        out.println("You can obtain the gap and column for each residue");
        out.println("In a sequence without gaps the residue gap is zero at each position and ");
        out.println("the residue column equals to the residue index.");
        out.println("The gap values indicate the amount of white space left from a residue.");
        out.println("getResidueGap()="+concat(p.getResidueGap(),nRes));
        out.println("getResidueColumn()="+concat(p.getResidueColumn(),nRes));
        out.println("getResidueColumn(2)="+p.getResidueColumn(2));
        out.println("return value of -1 in case of invalid indices: p.getResidueColumn(9)="+p.getResidueColumn(9));
        out.println();
        out.println("You can convert columns into residue indices");
        out.println("But what happens when the specified position has a gap and not a letter");
        out.println("as is the case for  position 3?");
        out.println("column2nextIndex(3)="+p.column2nextIndex(3));
        out.println("column2thisOrPreviousIndex(3)="+p.column2thisOrPreviousIndex(3));
        out.println("But p.column2index(3)="+p.column2index(3));
        out.println();
        out.println("You can get all values as an array:");
        out.println("columns2indices()="+concat(p.columns2indices(),nColumns));
        out.println("column2nextIndex()="+concat(p.columns2nextIndices(),nColumns));
    }
    /* print the first num fields of the array */
    private static StringBuffer concat(int ii[],int num) {
        final StringBuffer sb=new StringBuffer();
        for(int i=0;i<Math.min(num,ii.length);i++) {
            sb.append(ii[i]).append(" ");
        }
        return sb;
    }
}