File: PDBFileParserTest.java

package info (click to toggle)
biojava-live 1%3A1.7.1-8
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 55,160 kB
  • sloc: java: 180,820; xml: 6,908; sql: 510; makefile: 50
file content (192 lines) | stat: -rw-r--r-- 5,857 bytes parent folder | download | duplicates (5)
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);
	}

}