Skip to content

Commit b7aa1ba

Browse files
committed
Now actually testing something, test doesn't pass yet
1 parent d4fa2af commit b7aa1ba

File tree

3 files changed

+48
-10
lines changed

3 files changed

+48
-10
lines changed

biojava-structure/src/main/java/org/biojava/nbio/structure/io/MMCIFFileTools.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,20 @@
1111
import org.biojava.nbio.structure.Group;
1212
import org.biojava.nbio.structure.GroupType;
1313
import org.biojava.nbio.structure.Structure;
14+
import org.biojava.nbio.structure.io.mmcif.SimpleMMcifParser;
1415
import org.biojava.nbio.structure.io.mmcif.model.AtomSite;
1516
import org.slf4j.Logger;
1617
import org.slf4j.LoggerFactory;
1718

19+
/**
20+
* Some tools for mmCIF file writing.
21+
*
22+
* See http://www.iucr.org/__data/assets/pdf_file/0019/22618/cifguide.pdf
23+
*
24+
*
25+
* @author duarte_j
26+
*
27+
*/
1828
public class MMCIFFileTools {
1929

2030
private static final Logger logger = LoggerFactory.getLogger(MMCIFFileTools.class);
@@ -32,7 +42,7 @@ public class MMCIFFileTools {
3242
public static final String MMCIF_DEFAULT_VALUE = ".";
3343

3444
/**
35-
* The header appearing at the beginning of a mmCIF file
45+
* The header appearing at the beginning of a mmCIF file. A "block code" can be added to it of no more than 32 chars.
3646
*/
3747
public static final String MMCIF_TOP_HEADER = "data_";
3848

@@ -47,7 +57,7 @@ public class MMCIFFileTools {
4757
public static String toLoopMmCifHeaderString(String categoryName, String className) throws ClassNotFoundException {
4858
StringBuilder str = new StringBuilder();
4959

50-
str.append("loop_"+newline);
60+
str.append(SimpleMMcifParser.LOOP_START+newline);
5161

5262
Class<?> c = Class.forName(className);
5363

@@ -73,6 +83,8 @@ public static String toMMCIF(List<Object> list) {
7383
sb.append(toSingleLineMmCifString(o, sizes));
7484
}
7585

86+
sb.append(SimpleMMcifParser.LOOP_END+newline);
87+
7688
return sb.toString();
7789
}
7890

biojava-structure/src/main/java/org/biojava/nbio/structure/io/mmcif/SimpleMMcifParser.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,15 @@
2323

2424
import org.biojava.nbio.structure.Structure;
2525
import org.biojava.nbio.structure.io.MMCIFFileReader;
26+
import org.biojava.nbio.structure.io.MMCIFFileTools;
2627
import org.biojava.nbio.structure.io.StructureIOFile;
2728
import org.biojava.nbio.structure.io.mmcif.model.*;
2829
import org.biojava.nbio.structure.jama.Matrix;
2930
import org.slf4j.Logger;
3031
import org.slf4j.LoggerFactory;
3132

3233
import javax.vecmath.Matrix4d;
34+
3335
import java.io.BufferedReader;
3436
import java.io.IOException;
3537
import java.io.InputStream;
@@ -238,8 +240,8 @@ public void parse(BufferedReader buf)
238240
if ( pos < 0 ) {
239241
// looks like a chem_comp file
240242
// line should start with data, otherwise something is wrong!
241-
if (! line.startsWith("data_")){
242-
logger.warn("this does not look like a valid MMcif file! The first line should be data_1XYZ, but is " + line);
243+
if (! line.startsWith(MMCIFFileTools.MMCIF_TOP_HEADER)){
244+
logger.warn("This does not look like a valid MMcif file! The first line should start with 'data_', but is '" + line+"'");
243245
triggerDocumentEnd();
244246
return;
245247
}

biojava-structure/src/test/java/org/biojava/nbio/structure/io/TestMMCIFWriting.java

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,19 @@
22

33
import static org.junit.Assert.*;
44

5+
import java.io.BufferedReader;
6+
import java.io.File;
7+
import java.io.FileReader;
58
import java.io.FileWriter;
69
import java.io.IOException;
710

811
import org.biojava.nbio.structure.Structure;
912
import org.biojava.nbio.structure.StructureException;
1013
import org.biojava.nbio.structure.StructureIO;
1114
import org.biojava.nbio.structure.align.util.AtomCache;
15+
import org.biojava.nbio.structure.io.mmcif.MMcifParser;
16+
import org.biojava.nbio.structure.io.mmcif.SimpleMMcifConsumer;
17+
import org.biojava.nbio.structure.io.mmcif.SimpleMMcifParser;
1218
import org.junit.Test;
1319

1420
public class TestMMCIFWriting {
@@ -25,17 +31,35 @@ public void test1SMT() throws IOException, StructureException {
2531
params.setAlignSeqRes(true);
2632
cache.setFileParsingParams(params);
2733

28-
Structure sCif = StructureIO.getStructure("1SMT");
34+
Structure originalStruct = StructureIO.getStructure("1SMT");
35+
36+
File outputFile = File.createTempFile("biojava_testing_", ".cif");
2937

30-
assertNotNull(sCif);
3138

32-
33-
FileConvert fc = new FileConvert(sCif);
39+
FileConvert fc = new FileConvert(originalStruct);
3440

35-
FileWriter fw = new FileWriter("/home/jose/test.cif");
36-
//System.out.println(fc.toMmCif());
41+
FileWriter fw = new FileWriter(outputFile);
3742
fw.write(fc.toMMCIF());
3843
fw.close();
44+
45+
46+
MMcifParser parser = new SimpleMMcifParser();
47+
48+
SimpleMMcifConsumer consumer = new SimpleMMcifConsumer();
49+
50+
FileParsingParameters fileParsingParams = new FileParsingParameters();
51+
fileParsingParams.setAlignSeqRes(true);
52+
53+
consumer.setFileParsingParameters(fileParsingParams);
54+
55+
parser.addMMcifConsumer(consumer);
56+
57+
parser.parse(new BufferedReader(new FileReader(outputFile)));
58+
59+
Structure readStruct = consumer.getStructure();
60+
61+
assertEquals(originalStruct.getChains().size(), readStruct.getChains().size());
62+
3963
}
4064

4165
}

0 commit comments

Comments
 (0)