|
33 | 33 | import org.biojava.nbio.structure.io.LocalPDBDirectory.ObsoleteBehavior; |
34 | 34 | import org.biojava.nbio.structure.io.MMCIFFileReader; |
35 | 35 | import org.biojava.nbio.structure.io.PDBFileReader; |
| 36 | +import org.biojava.nbio.structure.io.mmcif.MMcifParser; |
| 37 | +import org.biojava.nbio.structure.io.mmcif.SimpleMMcifConsumer; |
| 38 | +import org.biojava.nbio.structure.io.mmcif.SimpleMMcifParser; |
36 | 39 | import org.biojava.nbio.structure.io.util.FileDownloadUtils; |
37 | 40 | import org.biojava.nbio.structure.quaternary.io.BioUnitDataProviderFactory; |
38 | 41 | import org.biojava.nbio.structure.scop.*; |
39 | 42 | import org.biojava.nbio.core.util.InputStreamProvider; |
40 | 43 | import org.slf4j.Logger; |
41 | 44 | import org.slf4j.LoggerFactory; |
42 | 45 |
|
43 | | -import java.io.IOException; |
44 | | -import java.io.StringWriter; |
| 46 | +import java.io.*; |
45 | 47 | import java.net.URL; |
46 | 48 | import java.util.*; |
47 | 49 | import java.util.regex.Matcher; |
@@ -1048,19 +1050,50 @@ private Structure getStructureFromURL(URL url) throws IOException, StructureExce |
1048 | 1050 | chainId = queryS.substring(8); |
1049 | 1051 | } |
1050 | 1052 |
|
1051 | | - |
1052 | | - |
| 1053 | + if ( fullu.contains(".cif")) { |
| 1054 | + |
| 1055 | + // need to do mmcif parsing! |
| 1056 | + |
| 1057 | + InputStreamProvider prov = new InputStreamProvider(); |
| 1058 | + InputStream inStream = prov.getInputStream(url); |
| 1059 | + |
| 1060 | + MMcifParser parser = new SimpleMMcifParser(); |
| 1061 | + |
| 1062 | + SimpleMMcifConsumer consumer = new SimpleMMcifConsumer(); |
| 1063 | + consumer.setFileParsingParameters(params); |
| 1064 | + |
| 1065 | + |
| 1066 | + parser.addMMcifConsumer(consumer); |
| 1067 | + |
| 1068 | + try { |
| 1069 | + parser.parse(new BufferedReader(new InputStreamReader(inStream))); |
| 1070 | + } catch (IOException e){ |
| 1071 | + e.printStackTrace(); |
| 1072 | + } |
1053 | 1073 |
|
1054 | | - PDBFileReader reader = new PDBFileReader(path); |
1055 | | - reader.setFetchBehavior(fetchBehavior); |
1056 | | - reader.setObsoleteBehavior(obsoleteBehavior); |
| 1074 | + // now get the protein structure. |
| 1075 | + Structure cifStructure = consumer.getStructure(); |
| 1076 | + if (chainId == null) { |
| 1077 | + return StructureTools.getReducedStructure(cifStructure, -1); |
| 1078 | + } else { |
| 1079 | + return StructureTools.getReducedStructure(cifStructure, chainId); |
| 1080 | + } |
1057 | 1081 |
|
1058 | | - reader.setFileParsingParameters(params); |
1059 | | - Structure s = reader.getStructure(url); |
1060 | | - if (chainId == null) { |
1061 | | - return StructureTools.getReducedStructure(s, -1); |
1062 | 1082 | } else { |
1063 | | - return StructureTools.getReducedStructure(s, chainId); |
| 1083 | + |
| 1084 | + // pdb file based parsing |
| 1085 | + |
| 1086 | + PDBFileReader reader = new PDBFileReader(path); |
| 1087 | + reader.setFetchBehavior(fetchBehavior); |
| 1088 | + reader.setObsoleteBehavior(obsoleteBehavior); |
| 1089 | + |
| 1090 | + reader.setFileParsingParameters(params); |
| 1091 | + Structure s = reader.getStructure(url); |
| 1092 | + if (chainId == null) { |
| 1093 | + return StructureTools.getReducedStructure(s, -1); |
| 1094 | + } else { |
| 1095 | + return StructureTools.getReducedStructure(s, chainId); |
| 1096 | + } |
1064 | 1097 | } |
1065 | 1098 | } |
1066 | 1099 |
|
|
0 commit comments