import charite.christo.strap.StrapProtein;
import charite.christo.protein.ProteinParser;
import charite.christo.protein.Protein;
import charite.christo.ChUtils;
import charite.christo.ByteArray;
import java.util.ArrayList;
import java.io.File;
import static java.lang.System.*;
/*
java DemoProteinParser2 hs_EscherichiaColi.pdb
Imagine your protein files have a format which is not supported by STRAP.
This demo explains, how a protein parser can be implemented and used.
The text is given in charite.christo.ByteArray. It has similar
features like java.lang.String or StringBuffer, but is faster and
keeps a reference of the positions of line ends. The byte array may
be longer than the valid text. The valid text starts at index
getBegin() and ends at getEnd().
*/
public class DemoProteinParser2 {
public static void main(String argv[]) {
out.println("This is the protein file parsed with the built-in parsers ");
final StrapProtein p1= StrapProtein.newInstance(new java.io.File(argv[0]));
out.println("p1.getResidueType()="+p1.getResidueTypeAsString());
/* Create a protein object */
final StrapProtein p2=new StrapProtein();
/* Reads the text of the file given by the first command line parameter */
/* Evaluates the text and set the amino acid sequence in the protein object */
final long options=0;
p2.setName("p2");
p2.parse(ChUtils.readBytes(new File(argv[0])),new ProteinParser[]{new MyParser()},options);
/* Check the amino acid sequence */
out.println("\nThis is the same protein file parsed with the self-made parser");
out.println("p2.getResidueType()="+p2.getResidueTypeAsString());
exit(0);
}
static class MyParser implements ProteinParser {
/* This is the self-made parser. It is rather stupid. */
/* Irrespectively of the contents of the protein file text it sets the same amino acid sequence. */
public boolean parse(Protein p, long options, ByteArray byteArray) {
final int ends[]=byteArray.getLineEnds();
final int begin=byteArray.getBegin();
final int end=byteArray.getEnd();
final byte[] text=byteArray.getBytes();
out.println(" The text contains "+(end-begin)+" characters and "+ends.length+" lines.");
p.setResidueType("HelloWorld");
/* By returning true it indicates that parsing was successful, */
/* False would say that it is the wrong protein file type for this parser. */
return true;
}
}
}