Skip to content

Commit 255b4c8

Browse files
authored
Merge pull request biojava#684 from pwrose/master
Implemented reading of mmCIF 5.0 changes in the _pdbx_database_status
2 parents dbdc477 + bb563fa commit 255b4c8

9 files changed

Lines changed: 2464 additions & 9 deletions

File tree

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,18 @@ public void newStructSite(StructSite site) {
310310
public void newEntityPoly(EntityPoly entityPoly) {
311311

312312

313+
}
314+
315+
@Override
316+
public void newPdbxAuditRevisionHistory(PdbxAuditRevisionHistory history) {
317+
// TODO Auto-generated method stub
318+
319+
}
320+
321+
@Override
322+
public void newPdbxDatabaseStatus(PdbxDatabaseStatus status) {
323+
// TODO Auto-generated method stub
324+
313325
}
314326
}
315327

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@ public interface MMcifConsumer {
6868
public void newStructRefSeqDif(StructRefSeqDif sref);
6969
public void newStructSite(StructSite sref);
7070
public void newStructSiteGen(StructSiteGen sref);
71+
public void newPdbxAuditRevisionHistory(PdbxAuditRevisionHistory history);
72+
public void newPdbxDatabaseStatus(PdbxDatabaseStatus status);
7173
public void newPdbxPolySeqScheme(PdbxPolySeqScheme ppss);
7274
public void newPdbxNonPolyScheme(PdbxNonPolyScheme ppss);
7375
public void newPdbxEntityNonPoly(PdbxEntityNonPoly pen);

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,4 +259,16 @@ public FileParsingParameters getFileParsingParameters() {
259259
public Map<String,List<MetalBondDistance>> getDefinitions(){
260260
return definitions;
261261
}
262+
263+
@Override
264+
public void newPdbxAuditRevisionHistory(PdbxAuditRevisionHistory history) {
265+
// TODO Auto-generated method stub
266+
267+
}
268+
269+
@Override
270+
public void newPdbxDatabaseStatus(PdbxDatabaseStatus status) {
271+
// TODO Auto-generated method stub
272+
273+
}
262274
}

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

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,10 @@
7979
import org.biojava.nbio.structure.io.mmcif.model.EntitySrcNat;
8080
import org.biojava.nbio.structure.io.mmcif.model.EntitySrcSyn;
8181
import org.biojava.nbio.structure.io.mmcif.model.Exptl;
82+
import org.biojava.nbio.structure.io.mmcif.model.PdbxAuditRevisionHistory;
8283
import org.biojava.nbio.structure.io.mmcif.model.PdbxChemCompDescriptor;
8384
import org.biojava.nbio.structure.io.mmcif.model.PdbxChemCompIdentifier;
85+
import org.biojava.nbio.structure.io.mmcif.model.PdbxDatabaseStatus;
8486
import org.biojava.nbio.structure.io.mmcif.model.PdbxEntityNonPoly;
8587
import org.biojava.nbio.structure.io.mmcif.model.PdbxNonPolyScheme;
8688
import org.biojava.nbio.structure.io.mmcif.model.PdbxPolySeqScheme;
@@ -1413,6 +1415,68 @@ public void newDatabasePDBrev(DatabasePDBrev dbrev) {
14131415

14141416
structure.setPDBHeader(header);
14151417
}
1418+
1419+
@Override
1420+
public void newPdbxAuditRevisionHistory(PdbxAuditRevisionHistory history) {
1421+
1422+
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd",Locale.US);
1423+
PDBHeader header = structure.getPDBHeader();
1424+
1425+
if ( header == null) {
1426+
header = new PDBHeader();
1427+
}
1428+
1429+
// first entry in revision history is the release date
1430+
if (history.getOrdinal().equals("1")){
1431+
try {
1432+
Date releaseDate = dateFormat.parse(history.getRevision_date());
1433+
// TODO uncomment when setRelDate method has been implemented
1434+
// header.setRelDate(releaseDate));
1435+
} catch (ParseException e){
1436+
logger.warn("Could not parse date string '{}', release date will be unavailable", history.getRevision_date());
1437+
}
1438+
} else {
1439+
// all other dates are revision dates;
1440+
// since this method may be called multiple times,
1441+
// the last revision date will "stick"
1442+
try {
1443+
Date revisionDate = dateFormat.parse(history.getRevision_date());
1444+
header.setModDate(revisionDate);
1445+
} catch (ParseException e){
1446+
logger.warn("Could not parse date string '{}', revision date will be unavailable", history.getRevision_date());
1447+
}
1448+
}
1449+
1450+
structure.setPDBHeader(header);
1451+
}
1452+
1453+
@Override
1454+
public void newPdbxDatabaseStatus(PdbxDatabaseStatus status) {
1455+
1456+
// the deposition date field is only available in mmCIF 5.0
1457+
1458+
if (status.getRecvd_initial_deposition_date() == null) {
1459+
// skip this method for older mmCIF versions
1460+
return;
1461+
}
1462+
1463+
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd",Locale.US);
1464+
PDBHeader header = structure.getPDBHeader();
1465+
1466+
if (header == null) {
1467+
header = new PDBHeader();
1468+
}
1469+
1470+
// first entry in revision history is the release date
1471+
try {
1472+
Date depositionDate = dateFormat.parse(status.getRecvd_initial_deposition_date());
1473+
header.setDepDate(depositionDate);
1474+
} catch (ParseException e){
1475+
logger.warn("Could not parse date string '{}', deposition date will be unavailable", status.getRecvd_initial_deposition_date());
1476+
}
1477+
1478+
structure.setPDBHeader(header);
1479+
}
14161480

14171481
@Override
14181482
public void newDatabasePDBremark(DatabasePDBremark remark) {

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

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,10 @@
5959
import org.biojava.nbio.structure.io.mmcif.model.EntitySrcSyn;
6060
import org.biojava.nbio.structure.io.mmcif.model.Exptl;
6161
import org.biojava.nbio.structure.io.mmcif.model.IgnoreField;
62+
import org.biojava.nbio.structure.io.mmcif.model.PdbxAuditRevisionHistory;
6263
import org.biojava.nbio.structure.io.mmcif.model.PdbxChemCompDescriptor;
6364
import org.biojava.nbio.structure.io.mmcif.model.PdbxChemCompIdentifier;
65+
import org.biojava.nbio.structure.io.mmcif.model.PdbxDatabaseStatus;
6466
import org.biojava.nbio.structure.io.mmcif.model.PdbxEntityNonPoly;
6567
import org.biojava.nbio.structure.io.mmcif.model.PdbxNonPolyScheme;
6668
import org.biojava.nbio.structure.io.mmcif.model.PdbxPolySeqScheme;
@@ -641,22 +643,30 @@ private void endLineChecks(String category,List<String> loopFields, List<String>
641643

642644
triggerNewDatabasePDBrev(dbrev);
643645

644-
} else if ( category.equals("_database_PDB_rev_record")){
646+
} else if ( category.equals("_database_PDB_rev_record")) {
645647
DatabasePdbrevRecord dbrev = (DatabasePdbrevRecord) buildObject(
646648
DatabasePdbrevRecord.class.getName(),
647649
loopFields, lineData, loopWarnings);
648650

649651
triggerNewDatabasePDBrevRecord(dbrev);
650652

651-
// MMCIF version 5 dates
652-
} else if ( category.equals("_pdbx_database_status")){
653-
// TODO
653+
// MMCIF version 5 dates
654+
} else if ( category.equals("_pdbx_audit_revision_history")) {
655+
PdbxAuditRevisionHistory history = (PdbxAuditRevisionHistory) buildObject(
656+
PdbxAuditRevisionHistory.class.getName(),
657+
loopFields, lineData, loopWarnings);
654658

655-
// MMCIF version 5 dates
656-
} else if ( category.equals("_pdbx_audit_revision_history")){
657-
// TODO
658-
659-
}else if ( category.equals("_database_PDB_remark")){
659+
triggerNewPdbxAuditRevisionHistory(history);
660+
661+
// MMCIF version 5 dates
662+
} else if ( category.equals("_pdbx_database_status")) {
663+
PdbxDatabaseStatus status = (PdbxDatabaseStatus) buildObject(
664+
PdbxDatabaseStatus.class.getName(),
665+
loopFields, lineData, loopWarnings);
666+
667+
triggerNewPdbxDatabaseStatus(status);
668+
669+
}else if ( category.equals("_database_PDB_remark")) {
660670
DatabasePDBremark remark = (DatabasePDBremark) buildObject(
661671
DatabasePDBremark.class.getName(),
662672
loopFields, lineData, loopWarnings);
@@ -1110,6 +1120,19 @@ private void triggerNewAuditAuthor(AuditAuthor aa){
11101120
c.newAuditAuthor(aa);
11111121
}
11121122
}
1123+
1124+
private void triggerNewPdbxAuditRevisionHistory(PdbxAuditRevisionHistory history) {
1125+
for(MMcifConsumer c : consumers){
1126+
c.newPdbxAuditRevisionHistory(history);
1127+
}
1128+
}
1129+
1130+
private void triggerNewPdbxDatabaseStatus(PdbxDatabaseStatus status) {
1131+
for(MMcifConsumer c : consumers){
1132+
c.newPdbxDatabaseStatus(status);
1133+
}
1134+
}
1135+
11131136
private void triggerNewDatabasePDBrev(DatabasePDBrev dbrev){
11141137
for(MMcifConsumer c : consumers){
11151138
c.newDatabasePDBrev(dbrev);
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package org.biojava.nbio.structure.io.mmcif.model;
2+
3+
/**
4+
* Bean to hold data for _pdbx_audit_revision_history mmCIF category.
5+
*
6+
* @author Peter Rose
7+
* @since 5.0
8+
*/
9+
public class PdbxAuditRevisionHistory extends AbstractBean {
10+
private String ordinal;
11+
private String data_content_type;
12+
private String major_revision;
13+
private String minor_revision;
14+
private String revision_date;
15+
16+
public String getOrdinal() {
17+
return ordinal;
18+
}
19+
public void setOrdinal(String ordinal) {
20+
this.ordinal = ordinal;
21+
}
22+
public String getData_content_type() {
23+
return data_content_type;
24+
}
25+
public void setData_content_type(String data_content_type) {
26+
this.data_content_type = data_content_type;
27+
}
28+
public String getMajor_revision() {
29+
return major_revision;
30+
}
31+
public void setMajor_revision(String major_revision) {
32+
this.major_revision = major_revision;
33+
}
34+
public String getMinor_revision() {
35+
return minor_revision;
36+
}
37+
public void setMinor_revision(String minor_revision) {
38+
this.minor_revision = minor_revision;
39+
}
40+
public String getRevision_date() {
41+
return revision_date;
42+
}
43+
public void setRevision_date(String revision_date) {
44+
this.revision_date = revision_date;
45+
}
46+
}
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
package org.biojava.nbio.structure.io.mmcif.model;
2+
3+
/**
4+
* Bean to hold data for _pdbx_database_status mmCIF category.
5+
*
6+
* @author Peter Rose
7+
* @since 5.0
8+
*/
9+
public class PdbxDatabaseStatus extends AbstractBean {
10+
private String status_code;
11+
private String entry_id;
12+
private String recvd_initial_deposition_date;
13+
private String deposit_site;
14+
private String process_site;
15+
private String SG_entry;
16+
private String pdb_format_compatible;
17+
private String status_code_mr;
18+
private String status_code_sf;
19+
private String status_code_cs;
20+
21+
public String getStatus_code() {
22+
return status_code;
23+
}
24+
public void setStatus_code(String status_code) {
25+
this.status_code = status_code;
26+
}
27+
public String getEntry_id() {
28+
return entry_id;
29+
}
30+
public void setEntry_id(String entry_id) {
31+
this.entry_id = entry_id;
32+
}
33+
public String getRecvd_initial_deposition_date() {
34+
return recvd_initial_deposition_date;
35+
}
36+
public void setRecvd_initial_deposition_date(String recvd_initial_deposition_date) {
37+
this.recvd_initial_deposition_date = recvd_initial_deposition_date;
38+
}
39+
public String getDeposit_site() {
40+
return deposit_site;
41+
}
42+
public void setDeposit_site(String deposit_site) {
43+
this.deposit_site = deposit_site;
44+
}
45+
public String getProcess_site() {
46+
return process_site;
47+
}
48+
public void setProcess_site(String process_site) {
49+
this.process_site = process_site;
50+
}
51+
public String getSG_entry() {
52+
return SG_entry;
53+
}
54+
public void setSG_entry(String sG_entry) {
55+
SG_entry = sG_entry;
56+
}
57+
public String getPdb_format_compatible() {
58+
return pdb_format_compatible;
59+
}
60+
public void setPdb_format_compatible(String pdb_format_compatible) {
61+
this.pdb_format_compatible = pdb_format_compatible;
62+
}
63+
public String getStatus_code_mr() {
64+
return status_code_mr;
65+
}
66+
public void setStatus_code_mr(String status_code_mr) {
67+
this.status_code_mr = status_code_mr;
68+
}
69+
public String getStatus_code_sf() {
70+
return status_code_sf;
71+
}
72+
public void setStatus_code_sf(String status_code_sf) {
73+
this.status_code_sf = status_code_sf;
74+
}
75+
public String getStatus_code_cs() {
76+
return status_code_cs;
77+
}
78+
public void setStatus_code_cs(String status_code_cs) {
79+
this.status_code_cs = status_code_cs;
80+
}
81+
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package org.biojava.nbio.structure.io.mmcif;
2+
3+
import static org.junit.Assert.*;
4+
5+
import java.io.IOException;
6+
import java.io.InputStream;
7+
import java.text.ParseException;
8+
import java.text.SimpleDateFormat;
9+
import java.util.Date;
10+
import java.util.Locale;
11+
12+
import org.biojava.nbio.structure.Structure;
13+
import org.biojava.nbio.structure.io.FileParsingParameters;
14+
import org.biojava.nbio.structure.io.MMCIFFileReader;
15+
import org.junit.Test;
16+
17+
public class TestMmcifV5Changes {
18+
19+
/**
20+
* Test date related changes in mmCIF 5.0 format
21+
* @throws IOException
22+
* @throws ParseException
23+
*/
24+
25+
@Test
26+
public void testReleaseDate() throws IOException, ParseException {
27+
Structure s = getStructure("/1stp_v50.cif");
28+
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd",Locale.US);
29+
Date releaseDate = dateFormat.parse("1992-10-15");
30+
// TODO uncomment the following line once getRelDate has been implemented
31+
// assertEquals(releaseDate, s.getPDBHeader().getRelDate());
32+
}
33+
34+
@Test
35+
public void testDepositionDate() throws IOException, ParseException {
36+
Structure s = getStructure("/1stp_v50.cif");
37+
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd",Locale.US);
38+
Date depositionDate = dateFormat.parse("1992-03-12");
39+
assertEquals(depositionDate, s.getPDBHeader().getDepDate());
40+
41+
}
42+
43+
@Test
44+
public void testRevisionDate() throws IOException, ParseException {
45+
Structure s = getStructure("/1stp_v50.cif");
46+
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd",Locale.US);
47+
Date depositionDate = dateFormat.parse("2011-07-13");
48+
assertEquals(depositionDate, s.getPDBHeader().getModDate());
49+
50+
}
51+
52+
private Structure getStructure(String fileName) throws IOException{
53+
InputStream inStream = this.getClass().getResourceAsStream(fileName);
54+
assertNotNull(inStream);
55+
56+
MMCIFFileReader reader = new MMCIFFileReader();
57+
58+
return reader.getStructure(inStream) ;
59+
}
60+
}

0 commit comments

Comments
 (0)