1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192
|
/*
* BioJava development code
*
* This code may be freely distributed and modified under the
* terms of the GNU Lesser General Public Licence. This should
* be distributed with the code. If you do not have a copy,
* see:
*
* http://www.gnu.org/copyleft/lesser.html
*
* Copyright for this code is held jointly by the individual
* authors. These should be listed in @author doc comments.
*
* For more information on the BioJava project and its aims,
* or to join the biojava-l mailing list, visit the home page
* at:
*
* http://www.biojava.org/
*
* Created on Jun 10, 2007
*
*/
package org.biojava.bio.structure;
import java.io.BufferedReader;
import java.io.StringReader;
import java.util.Map;
import org.biojava.bio.structure.io.PDBFileParser;
import junit.framework.TestCase;
public class PDBFileParserTest extends TestCase {
PDBFileParser parser;
public static final String newline = System.getProperty("line.separator");
protected void setUp(){
parser = new PDBFileParser();
}
/** parse the remark lines and return the resolution
*
* @param fakeFile
* @return the resolution as a Float or null if no resolution found
* @throws Exception
*/
private Object testREMARK2Parsing(String fakeFile) throws Exception{
BufferedReader br = new BufferedReader(new StringReader(fakeFile));
Object resolution = null;
Structure s = parser.parsePDBFile(br);
Map<String, Object> m = s.getHeader();
resolution = m.get("resolution");
return resolution;
}
public void test2LetterResidueName() {
try {
// from 1a4w:
String t =
"HETATM 2242 NA NA 541 5.845 -14.122 30.560 0.88 23.48 "+newline+
"HETATM 2243 NA NA 542 18.411 -16.475 38.464 0.88 24.77 "+newline;
BufferedReader br = new BufferedReader(new StringReader(t));
Structure s = parser.parsePDBFile(br);
String pdb = s.toPDB();
assertEquals("two letter residue names are not dealt with correctly! ",t,pdb);
} catch (Exception e){
fail(e.getMessage());
}
}
private void compareString(String t, String pdb){
for (int i =0 ; i < t.length() ; i++){
System.out.println(">"+t.charAt(i)+":"+ pdb.charAt(i)+"<");
if ( Character.toUpperCase(t.charAt(i)) != Character.toUpperCase(pdb.charAt(i))){
break;
}
}
}
public void testCorrectFloatingPointDisplay() {
// from 1a4w:
String t =
"ATOM 1 N ASP L 1A 11.095 19.341 20.188 1.00 30.14 "+newline+
"ATOM 2 CA ASP L 1A 10.070 18.634 19.379 1.00 28.34 "+newline+
"ATOM 3 C ASP L 1A 9.846 17.102 19.503 1.00 26.08 "+newline+
"ATOM 4 O ASP L 1A 8.744 16.584 19.162 1.00 23.47 "+newline+
"ATOM 5 CB ASP L 1A 10.255 18.858 17.853 1.00 37.55 "+newline+
"ATOM 6 CG ASP L 1A 8.836 19.264 17.401 1.00 42.76 "+newline+
"ATOM 7 OD1 ASP L 1A 8.058 19.292 18.400 1.00 44.03 "+newline+
"ATOM 8 OD2 ASP L 1A 8.616 19.668 16.244 1.00 46.88 "+newline+
"ATOM 9 N CYS L 1 10.835 16.440 20.113 1.00 23.72 "+newline+
"ATOM 10 CA CYS L 1 10.769 14.970 20.210 1.00 20.89 "+newline+
"ATOM 11 C CYS L 1 9.580 14.524 21.006 1.00 18.64 "+newline+
"ATOM 12 O CYS L 1 9.110 15.220 21.912 1.00 19.03 "+newline+
"ATOM 13 CB CYS L 1 12.117 14.468 20.771 1.00 21.77 "+newline+
"ATOM 14 SG CYS L 1 12.247 14.885 22.538 1.00 20.55 "+newline;
BufferedReader br = new BufferedReader(new StringReader(t));
try {
Structure s = parser.parsePDBFile(br);
String pdb = s.toPDB();
assertTrue("the created PDB file does not match the input file", pdb.equals(t));
} catch (Exception e){
fail(e.getMessage());
}
}
public void testPDBHeader(){
String t =
"HEADER COMPLEX (SERINE PROTEASE/INHIBITORS) 06-FEB-98 1A4W "+newline+
"TITLE CRYSTAL STRUCTURES OF THROMBIN WITH THIAZOLE-CONTAINING "+newline+
"TITLE 2 INHIBITORS: PROBES OF THE S1' BINDING SITE "+newline+
"EXPDTA X-RAY DIFFRACTION "+newline+
"REMARK 2 RESOLUTION. 2.00 ANGSTROMS. "+newline;
BufferedReader br = new BufferedReader(new StringReader(t));
try {
Structure s = parser.parsePDBFile(br);
String pdb = s.toPDB();
//compareString(t, pdb);
// we ignore the case here, since the month FEB is written as Feb, which should be ok...
assertTrue("the created header does not match the PDB file" ,pdb.equalsIgnoreCase(t));
} catch (Exception e){
fail(e.getMessage());
}
}
public void testREMARK200() {
// test that the resolution is only read from REMARK 2 lines
String w1 = "REMARK 200 RESOLUTION RANGE HIGH (A) : 1.20"+newline+
"REMARK 200 RESOLUTION RANGE LOW (A) : 20.00"+
"REMARK 200 RESOLUTION9.9 ANGSTROMS."; // this line could give wrong resolution info, but it should not be parsed;
boolean parsingOK = true;
String errorMsg = "";
try {
Object resolution = testREMARK2Parsing(w1);
assertEquals(resolution,null);
} catch (Exception e){
parsingOK = false;
//e.printStackTrace();
errorMsg = e.getMessage();
}
assertEquals("parsing failed with error " + errorMsg, parsingOK, true);
}
public void testREMARK2(){
String w2 =
"REMARK 2 "+newline+
"REMARK 2 RESOLUTION. 1.2 ANGSTROMS."; // the correct line
boolean parsingOK = true;
String errorMsg = "";
try {
Object resolution = testREMARK2Parsing(w2);
assertEquals(resolution,new Float(1.2));
} catch (Exception e){
parsingOK = false;
//e.printStackTrace();
errorMsg = e.getMessage();
}
assertEquals("parsing failed with error " + errorMsg, parsingOK, true);
}
}
|