Skip to content

Commit 6a2eaa0

Browse files
committed
Refactoring of Structure ssbonds interface, as described in #341
1 parent 3e17e69 commit 6a2eaa0

File tree

13 files changed

+260
-269
lines changed

13 files changed

+260
-269
lines changed

biojava-integrationtest/src/test/java/org/biojava/nbio/structure/test/StructureTest.java

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ public static void setUp() throws IOException {
5454
PDBFileParser pdbpars = new PDBFileParser();
5555
FileParsingParameters params = new FileParsingParameters();
5656
params.setAlignSeqRes(true);
57+
params.setCreateAtomBonds(true);
5758
pdbpars.setFileParsingParameters(params);
5859

5960
structure = pdbpars.parsePDBFile(inStream) ;
@@ -125,27 +126,38 @@ public void testReadPDBFile() throws Exception {
125126
public void testSSBondParsing() throws Exception {
126127
assertNotNull(structure);
127128

128-
List<SSBond> ssbonds = structure.getSSBonds();
129+
List<Bond> ssbonds = structure.getSSBonds();
129130
assertEquals("did not find the correct nr of SSBonds ",3,ssbonds.size());
130131

131132
String pdb1 = "SSBOND 1 CYS A 5 CYS A 55";
132133
String pdb2 = "SSBOND 2 CYS A 14 CYS A 38";
133134

134-
SSBond bond1 = ssbonds.get(0);
135+
Bond bond1 = ssbonds.get(0);
136+
assertDisulfideBond("A", "A", 5, 55, bond1);
135137

136-
String b1 = bond1.toPDB();
138+
Bond bond2 = ssbonds.get(1);
139+
assertDisulfideBond("A", "A", 14, 38, bond2);
137140

138-
assertTrue("PDB representation incorrect",pdb1.equals(b1.trim()));
139-
assertTrue("not right resnum1 " , bond1.getResnum1().equals("5"));
140-
assertTrue("not right resnum2 " , bond1.getResnum2().equals("55"));
141+
List<SSBondImpl> list = SSBondImpl.getSsBondListFromBondList(ssbonds);
141142

142-
SSBond bond2 = ssbonds.get(1);
143-
String b2 = bond2.toPDB();
144-
assertTrue("not right resnum1 " , bond2.getResnum1().equals("14"));
145-
assertTrue("not right resnum2 " , bond2.getResnum2().equals("38"));
146-
assertTrue("PDB representation incorrect",pdb2.equals(b2.trim()));
143+
//System.out.println(list.get(0).toPDB());
144+
assertEquals("PDB representation incorrect", pdb1, list.get(0).toPDB().trim());
145+
146+
//System.out.println(list.get(1).toPDB());
147+
assertEquals("PDB representation incorrect", pdb2, list.get(1).toPDB().trim());
147148

148149
}
150+
151+
private void assertDisulfideBond(String expectedChainId1, String expectedChainId2, int expectedResSerial1, int expectedResSerial2, Bond bond) {
152+
String chainId1 = bond.getAtomA().getGroup().getChainId();
153+
String chainId2 = bond.getAtomB().getGroup().getChainId();
154+
ResidueNumber resNum1 = bond.getAtomA().getGroup().getResidueNumber();
155+
ResidueNumber resNum2 = bond.getAtomB().getGroup().getResidueNumber();
156+
assertEquals("disulfide bond first chain id failed ", expectedChainId1, chainId1);
157+
assertEquals("disulfide bond second chain id failed ", expectedChainId2, chainId2);
158+
assertEquals("disulfide bond failed first residue number failed ", new ResidueNumber(expectedChainId1, expectedResSerial1, null), resNum1);
159+
assertEquals("disulfide bond failed second residue number failed ", new ResidueNumber(expectedChainId2, expectedResSerial2, null), resNum2);
160+
}
149161

150162
/**
151163
* Tests that standard amino acids are working properly

biojava-integrationtest/src/test/java/org/biojava/nbio/structure/test/Test1o2f.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package org.biojava.nbio.structure.test;
22

33
import org.biojava.nbio.structure.Chain;
4-
import org.biojava.nbio.structure.Group;
54
import org.biojava.nbio.structure.Structure;
65
import org.biojava.nbio.structure.StructureIO;
76
import org.biojava.nbio.structure.align.util.AtomCache;

biojava-integrationtest/src/test/java/org/biojava/nbio/structure/test/ecod/EcodParseTest.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
package org.biojava.nbio.structure.test.ecod;
2222

2323
import java.io.IOException;
24-
import java.util.Arrays;
2524
import java.util.List;
2625

2726
import org.biojava.nbio.structure.Atom;

biojava-structure/src/main/java/org/biojava/nbio/structure/BondImpl.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,7 @@ public String toString() {
194194
return "Bond [atomA=" + atomA + ", atomB=" + atomB + ", bondOrder="
195195
+ bondOrder + "]";
196196
}
197-
197+
198+
198199

199200
}

biojava-structure/src/main/java/org/biojava/nbio/structure/SSBond.java

Lines changed: 0 additions & 102 deletions
This file was deleted.

biojava-structure/src/main/java/org/biojava/nbio/structure/SSBondImpl.java

Lines changed: 48 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
package org.biojava.nbio.structure;
2525

2626
import java.io.Serializable;
27+
import java.util.ArrayList;
28+
import java.util.List;
2729

2830
/**
2931
* A simple bean to store disulfide bridge information, the SSBOND records in the PDB files.
@@ -35,7 +37,7 @@
3537
* @author Andreas Prlic
3638
*
3739
*/
38-
public class SSBondImpl implements PDBRecord, Serializable, Cloneable, SSBond {
40+
public class SSBondImpl implements PDBRecord, Serializable, Cloneable {
3941

4042
private static final long serialVersionUID = -8663681100691188647L;
4143

@@ -88,33 +90,29 @@ public void toPDB(StringBuffer buf){
8890

8991
buf.append("SSBOND ");
9092
buf.append(String.format("%3d", serNum));
91-
buf.append(String.format(" CYS %s %4s%1s ",chainID1,resnum1,insCode1));
92-
buf.append(String.format(" CYS %s %4s%1s ",chainID2,resnum2,insCode2));
93+
buf.append(String.format(" CYS %s %4s%1s ", chainID1, resnum1, insCode1));
94+
buf.append(String.format(" CYS %s %4s%1s ", chainID2, resnum2, insCode2));
95+
9396
}
9497

9598

96-
@Override
9799
public String getInsCode1() {
98100
return insCode1;
99101
}
100102

101-
@Override
102103
public void setInsCode1(String insCode1) {
103104
this.insCode1 = insCode1;
104105
}
105106

106-
@Override
107107
public String getInsCode2() {
108108
return insCode2;
109109
}
110110

111-
@Override
112111
public void setInsCode2(String insCode2) {
113112
this.insCode2 = insCode2;
114113
}
115114

116115

117-
@Override
118116
public int getSerNum() {
119117
return serNum;
120118
}
@@ -123,7 +121,6 @@ public int getSerNum() {
123121
*
124122
* @param serNum
125123
*/
126-
@Override
127124
public void setSerNum(int serNum) {
128125
this.serNum = serNum;
129126
}
@@ -138,39 +135,32 @@ public SSBondImpl clone() {
138135
return nbond;
139136
}
140137

141-
@Override
142138
public String getChainID1() {
143139
return chainID1;
144140
}
145-
@Override
146141
public void setChainID1(String chainID1) {
147142
this.chainID1 = chainID1;
148143
}
149-
@Override
150144
public String getChainID2() {
151145
return chainID2;
152146
}
153-
@Override
154147
public void setChainID2(String chainID2) {
155148
this.chainID2 = chainID2;
156149
}
157150

158151

159-
@Override
160152
public String getResnum1() {
161153
return resnum1;
162154
}
163-
@Override
155+
164156
public void setResnum1(String resnum1) {
165157
this.resnum1 = resnum1;
166158
}
167159

168160

169-
@Override
170161
public String getResnum2() {
171162
return resnum2;
172163
}
173-
@Override
174164
public void setResnum2(String resnum2) {
175165
this.resnum2 = resnum2;
176166
}
@@ -254,4 +244,45 @@ public boolean equals(Object obj) {
254244
return false;
255245
return true;
256246
}
247+
248+
public static List<SSBondImpl> getSsBondListFromBondList(List<Bond> bonds) {
249+
List<SSBondImpl> l = new ArrayList<>();
250+
for (int i=0; i<bonds.size(); i++) {
251+
SSBondImpl ssbond = toSsBond(bonds.get(i));
252+
ssbond.setSerNum(i + 1);
253+
l.add(ssbond);
254+
}
255+
return l;
256+
}
257+
258+
/**
259+
* Converts the given {@link Bond} object into a {@link SSBondImpl}.
260+
*
261+
* @return
262+
* @throws IllegalArgumentException if this Bond is not between two CYS residues
263+
*/
264+
public static SSBondImpl toSsBond(Bond bond) {
265+
266+
if (!bond.getAtomA().getGroup().getPDBName().equals("CYS") ||
267+
!bond.getAtomB().getGroup().getPDBName().equals("CYS") ) {
268+
269+
throw new IllegalArgumentException("Trying to create a SSBond from a Bond between 2 groups that are not CYS");
270+
}
271+
272+
SSBondImpl ssbond = new SSBondImpl();
273+
ssbond.setChainID1(bond.getAtomA().getGroup().getChainId());
274+
ssbond.setChainID2(bond.getAtomB().getGroup().getChainId());
275+
ssbond.setResnum1(String.valueOf(bond.getAtomA().getGroup().getResidueNumber().getSeqNum()));
276+
ssbond.setResnum2(String.valueOf(bond.getAtomB().getGroup().getResidueNumber().getSeqNum()));
277+
278+
Character iCode1 = bond.getAtomA().getGroup().getResidueNumber().getInsCode();
279+
if (iCode1 == null) iCode1 = ' ';
280+
Character iCode2 = bond.getAtomB().getGroup().getResidueNumber().getInsCode();
281+
if (iCode2 == null) iCode2 = ' ';
282+
283+
ssbond.setInsCode1(String.valueOf(iCode1));
284+
ssbond.setInsCode2(String.valueOf(iCode2));
285+
286+
return ssbond;
287+
}
257288
}

biojava-structure/src/main/java/org/biojava/nbio/structure/Structure.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -586,25 +586,25 @@ public Chain getChainByPDB(String chainId, int modelnr)
586586
public void setJournalArticle(JournalArticle journalArticle);
587587

588588
/**
589-
* Get the list of SSBonds as they have been defined in the PDB files
589+
* Get the list of disulfide Bonds as they have been defined in the PDB files
590590
*
591-
* @return a list of SSBonds
591+
* @return a list of Bonds
592592
*/
593-
public List<SSBond> getSSBonds();
593+
public List<Bond> getSSBonds();
594594

595595
/**
596596
* Set the list of SSBonds for this structure
597597
*
598598
* @param ssbonds
599599
*/
600-
public void setSSBonds(List<SSBond> ssbonds);
600+
public void setSSBonds(List<Bond> ssbonds);
601601

602602
/**
603-
* Add a single SSBond to this structure
603+
* Add a single disulfide Bond to this structure
604604
*
605605
* @param ssbond
606606
*/
607-
public void addSSBond(SSBond ssbond);
607+
public void addSSBond(Bond ssbond);
608608

609609
/**
610610
* Set the the header information for this PDB file

0 commit comments

Comments
 (0)