diff --git a/CHANGELOG.md b/CHANGELOG.md
index d9a581c..3aa6897 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -42,4 +42,13 @@ All notable changes to this project will be documented in this file, following t
- Added package info for the codec project
- Improved docs and refactoring of test names
+## v0.2.2 - 2016-07-05
+### Changed
+ - Refactored the generation of Bioassemblies
+ - Refactored generateGroupMap to generateGroupList
+ - Update to the serialization module - only construct object mapper once
+
+### Added
+ - getBioassemblyName added to the API - return the BioassemblyName as a string.
+ - Tests for EncoderUtils
diff --git a/README.md b/README.md
index fbbfd9c..15ef746 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
[![Build Status](https://travis-ci.org/rcsb/mmtf-java.svg?branch=master)](https://travis-ci.org/rcsb/mmtf-java)
[![Coverage Status](https://coveralls.io/repos/github/rcsb/mmtf-java/badge.svg?branch=master)](https://coveralls.io/github/rcsb/mmtf-java?branch=master)
[![Dependency Status](https://www.versioneye.com/user/projects/56feb8e5fcd19a0039f1553c/badge.svg?style=flat)](https://www.versioneye.com/user/projects/56feb8e5fcd19a0039f1553c)
-[![Version](http://img.shields.io/badge/version-0.2.1-blue.svg?style=flat)](https://github.com/rcsb/mmtf-java/) [![License](http://img.shields.io/badge/license-Apache 2.0-blue.svg?style=flat)](https://github.com/rcsb/mmtf-java/blob/master/LICENSE.txt)
+[![Version](http://img.shields.io/badge/version-0.2.2-blue.svg?style=flat)](https://github.com/rcsb/mmtf-java/) [![License](http://img.shields.io/badge/license-Apache 2.0-blue.svg?style=flat)](https://github.com/rcsb/mmtf-java/blob/master/LICENSE.txt)
@@ -16,12 +16,12 @@ The alpha release is available on Maven central.
org.rcsb
mmtf-codec
- 0.2.1
+ 0.2.2
org.rcsb
mmtf-api
- 0.2.1
+ 0.2.2
```
diff --git a/mmtf-api/src/main/java/org/rcsb/mmtf/api/StructureDataInterface.java b/mmtf-api/src/main/java/org/rcsb/mmtf/api/StructureDataInterface.java
index e7fffa5..1d38cff 100644
--- a/mmtf-api/src/main/java/org/rcsb/mmtf/api/StructureDataInterface.java
+++ b/mmtf-api/src/main/java/org/rcsb/mmtf/api/StructureDataInterface.java
@@ -216,10 +216,17 @@ public interface StructureDataInterface {
/**
* Returns the number of transformations in a given bioassembly.
* @param bioassemblyIndex an integer specifying the bioassembly index (zero indexed).
- * @return an integer specifying of transformations in a given bioassembly.
+ * @return an integer specifying the number of transformations in a given bioassembly.
*/
int getNumTransInBioassembly(int bioassemblyIndex);
+ /**
+ * Returns the name of the transformation for a bioassembly.
+ * @param bioassemblyIndex an integer specifying the bioassembly index (zero indexed).
+ * @return a string specifying the name of a given bioassembly.
+ */
+ String getBioassemblyName(int bioassemblyIndex);
+
/**
* Returns the list of chain indices for the given transformation for the given bioassembly.
* @param bioassemblyIndex an integer specifying the bioassembly index (zero indexed).
diff --git a/mmtf-codec/src/main/java/org/rcsb/mmtf/decoder/GenericDecoder.java b/mmtf-codec/src/main/java/org/rcsb/mmtf/decoder/GenericDecoder.java
index 5182cc4..57951d4 100644
--- a/mmtf-codec/src/main/java/org/rcsb/mmtf/decoder/GenericDecoder.java
+++ b/mmtf-codec/src/main/java/org/rcsb/mmtf/decoder/GenericDecoder.java
@@ -474,4 +474,9 @@ public double[][] getNcsOperatorList() {
return ncsOperMatrixList;
}
+ @Override
+ public String getBioassemblyName(int bioassemblyIndex) {
+ return bioAssembly.get(bioassemblyIndex).getName();
+ }
+
}
diff --git a/mmtf-codec/src/main/java/org/rcsb/mmtf/encoder/AdapterToStructureData.java b/mmtf-codec/src/main/java/org/rcsb/mmtf/encoder/AdapterToStructureData.java
index 32fa8ba..83ef8ec 100644
--- a/mmtf-codec/src/main/java/org/rcsb/mmtf/encoder/AdapterToStructureData.java
+++ b/mmtf-codec/src/main/java/org/rcsb/mmtf/encoder/AdapterToStructureData.java
@@ -528,20 +528,17 @@ public void setAtomInfo(String atomName, int serialNumber, char alternativeLocat
@Override
public void setBioAssemblyTrans(int bioAssemblyIndex, int[] chainIndices, double[] transform, String name) {
BioAssemblyData bioAssemblyData;
- List bioAssemblyTranList;
if (bioAssembly.size()>bioAssemblyIndex) {
- bioAssemblyTranList = bioAssembly.get(bioAssemblyIndex).getTransformList();
+ bioAssemblyData = bioAssembly.get(bioAssemblyIndex);
}
else{
- bioAssemblyData = new BioAssemblyData();
- bioAssemblyTranList = new ArrayList<>();
- bioAssemblyData.setTransformList(bioAssemblyTranList);
+ bioAssemblyData = new BioAssemblyData(name);
bioAssembly.add(bioAssemblyData);
}
BioAssemblyTransformation bioAssemblyTrans = new BioAssemblyTransformation();
bioAssemblyTrans.setChainIndexList(chainIndices);
bioAssemblyTrans.setMatrix(transform);
- bioAssemblyTranList.add(bioAssemblyTrans);
+ bioAssemblyData.getTransformList().add(bioAssemblyTrans);
}
@Override
@@ -610,4 +607,9 @@ public double[][] getNcsOperatorList() {
return ncsOperMatrixList;
}
+ @Override
+ public String getBioassemblyName(int bioassemblyIndex) {
+ return bioAssembly.get(bioassemblyIndex).getName();
+ }
+
}
diff --git a/mmtf-codec/src/main/java/org/rcsb/mmtf/encoder/EncoderUtils.java b/mmtf-codec/src/main/java/org/rcsb/mmtf/encoder/EncoderUtils.java
index 77b68f3..b0dfd0d 100644
--- a/mmtf-codec/src/main/java/org/rcsb/mmtf/encoder/EncoderUtils.java
+++ b/mmtf-codec/src/main/java/org/rcsb/mmtf/encoder/EncoderUtils.java
@@ -33,7 +33,7 @@ public class EncoderUtils {
* @param structureDataInterface the input interface
* @return a list of all the groups in the molecule
*/
- public static Group[] generateGroupMap(StructureDataInterface structureDataInterface) {
+ public static Group[] generateGroupList(StructureDataInterface structureDataInterface) {
int[] groupTypeIndices = structureDataInterface.getGroupTypeIndices();
if(groupTypeIndices.length==0){
return new Group[0];
@@ -59,31 +59,37 @@ public static Group[] generateGroupMap(StructureDataInterface structureDataInter
/**
* Find the bioassembly information as a list from the {@link StructureDataInterface}.
* @param structureDataInterface the interface from where to find the data
- * @return a list of bioassembly information
+ * @return a list of bioassembly information to be stored in the MMTF data structure.
*/
public static List generateBioassemblies(StructureDataInterface structureDataInterface) {
int numBioassemblies = structureDataInterface.getNumBioassemblies();
List outList = new ArrayList<>();
for (int i=0; i transformList = new ArrayList<>();
- bioAssemblyData.setTransformList(transformList);
+ BioAssemblyData bioassembly = new BioAssemblyData(structureDataInterface.getBioassemblyName(i));
+ outList.add(bioassembly);
int numTrans = structureDataInterface.getNumTransInBioassembly(i);
for (int j=0; j bioAssemblyData = new ArrayList<>();
+ BioAssemblyData bioAssemblyOne = new BioAssemblyData("1");
+ bioAssemblyData.add(bioAssemblyOne);
+ List bioAssemblyOneTransforms = new ArrayList<>();
+ BioAssemblyTransformation bioassOneTransOne = new BioAssemblyTransformation();
+ bioassOneTransOne.setChainIndexList(new int[]{1,2,3,4});
+ bioassOneTransOne.setMatrix(new double[]{1.0,2.0,3.0,4.0});
+ bioAssemblyOneTransforms.add(bioassOneTransOne);
+ BioAssemblyTransformation bioassOneTransTwo = new BioAssemblyTransformation();
+ bioassOneTransTwo.setChainIndexList(new int[]{5,7,11});
+ bioassOneTransTwo.setMatrix(new double[]{5.0,2.0,8.0,4.0});
+ bioAssemblyOneTransforms.add(bioassOneTransTwo);
+ bioAssemblyOne.setTransformList(bioAssemblyOneTransforms);
+ AdapterToStructureData adapterToStructureData = new AdapterToStructureData();
+ adapterToStructureData.initStructure(0,0,0,0,0,"DUMMY");
+ for (int i=0; i< bioAssemblyData.size(); i++){
+ for (int j=0; j< bioAssemblyData.get(i).getTransformList().size();j++)
+ adapterToStructureData.setBioAssemblyTrans(i,
+ bioAssemblyData.get(i).getTransformList().get(j).getChainIndexList(),
+ bioAssemblyData.get(i).getTransformList().get(j).getMatrix(),
+ bioAssemblyData.get(i).getName());
+ }
+ List generateBioass = EncoderUtils.generateBioassemblies(adapterToStructureData);
+ assertEquals(bioAssemblyData.get(0).getName(), generateBioass.get(0).getName());
+ assertArrayEquals(bioAssemblyData.get(0).getTransformList().get(0).getChainIndexList(),
+ generateBioass.get(0).getTransformList().get(0).getChainIndexList());
+ assertArrayEquals(bioAssemblyData.get(0).getTransformList().get(0).getMatrix(),
+ generateBioass.get(0).getTransformList().get(0).getMatrix(),0.0);
+ }
+
+ /**
+ * Test that the entity type can be retrieved from a chain index
+ */
+ @Test
+ public void testGetEntityType() {
+ StructureDataInterface structureDataInterface = getDefaultFullData();
+ assertEquals(EncoderUtils.getTypeFromChainId(structureDataInterface, 0),"polymer");
+ assertEquals(EncoderUtils.getTypeFromChainId(structureDataInterface, 1),"non-polymer");
+ assertEquals(EncoderUtils.getTypeFromChainId(structureDataInterface, 2),"non-polymer");
+ assertEquals(EncoderUtils.getTypeFromChainId(structureDataInterface, 3),"non-polymer");
+ assertEquals(EncoderUtils.getTypeFromChainId(structureDataInterface, 4),"non-polymer");
+ assertEquals(EncoderUtils.getTypeFromChainId(structureDataInterface, 5),"water");
+ }
+
+ /**
+ * Test that the entityList can be generated correctly.
+ */
+ @Test
+ public void testGenerateEntityList() {
+ StructureDataInterface structureDataInterface = getDefaultFullData();
+ Entity[] entities = EncoderUtils.generateEntityList(structureDataInterface);
+ assertEquals(entities.length, 4);
+ assertArrayEquals(entities[0].getChainIndexList(), new int[] {0});
+ assertArrayEquals(entities[1].getChainIndexList(), new int[] {1});
+ assertArrayEquals(entities[2].getChainIndexList(), new int[] {2,3,4});
+ assertArrayEquals(entities[3].getChainIndexList(), new int[] {5});
+
+ assertEquals(entities[0].getDescription(),"BROMODOMAIN ADJACENT TO ZINC FINGER DOMAIN PROTEIN 2B");
+ assertEquals(entities[1].getDescription(),"4-FLUOROBENZAMIDOXIME");
+ assertEquals(entities[2].getDescription(),"METHANOL");
+ assertEquals(entities[3].getDescription(),"water");
+
+
+ assertEquals(entities[0].getSequence(),"SMSVKKPKRDDSKDLALCSMILTEMETHEDAWPFLLPVNLKLVPGYKKVIKKPMDFSTIREKLSSGQYPNLETFALDVRLVFDNCETFNEDDSDIGRAGHNMRKYFEKKWTDTFKVS");
+ assertEquals(entities[1].getSequence(),"");
+ assertEquals(entities[2].getSequence(),"");
+ assertEquals(entities[3].getSequence(),"");
+
+ assertEquals(entities[0].getType(),"polymer");
+ assertEquals(entities[1].getType(),"non-polymer");
+ assertEquals(entities[2].getType(),"non-polymer");
+ assertEquals(entities[3].getType(),"water");
+
+ }
+
+ /**
+ * Test that the groupList can be generated correctly
+ */
+ @Test
+ public void testGenerateGroupMap() {
+ StructureDataInterface structureDataInterface = getDefaultFullData();
+ Group[] groupList = EncoderUtils.generateGroupList(structureDataInterface);
+ assertEquals(groupList.length, 29);
+ }
+
+ /**
+ * Get the default data for the full format.
+ * @return a {@link StructureDataInterface} for the full data.
+ */
+ private StructureDataInterface getDefaultFullData() {
+ ClassLoader classLoader = getClass().getClassLoader();
+ Path inFile = Paths.get(classLoader.getResource("mmtf/4cup.mmtf").getFile());
+ try {
+ return new GenericDecoder(ReaderUtils.getDataFromFile(inFile));
+ } catch (IOException e) {
+ e.printStackTrace();
+ throw new RuntimeException();
+ }
+ }
+
+ private void testOutput(byte[] encodeByteArr, int codecId) {
+ assertArrayEquals(encodeByteArr, new OptionParser(codecId, 0, 0).getHeader());
+ }
+}
diff --git a/mmtf-serialization/src/main/java/org/rcsb/mmtf/dataholders/BioAssemblyData.java b/mmtf-serialization/src/main/java/org/rcsb/mmtf/dataholders/BioAssemblyData.java
index 5d0fcbf..330e8c8 100644
--- a/mmtf-serialization/src/main/java/org/rcsb/mmtf/dataholders/BioAssemblyData.java
+++ b/mmtf-serialization/src/main/java/org/rcsb/mmtf/dataholders/BioAssemblyData.java
@@ -1,6 +1,7 @@
package org.rcsb.mmtf.dataholders;
import java.io.Serializable;
+import java.util.ArrayList;
import java.util.List;
/**
@@ -23,6 +24,22 @@ public class BioAssemblyData implements Serializable {
/** The name of the Bioassembly. Can be user defined. */
private String name;
+ /**
+ * Constructor setting the name and initialising an empty transform list.
+ * @param name the name of this {@link BioAssemblyData} object
+ */
+ public BioAssemblyData(String name) {
+ transformList = new ArrayList();
+ this.name = name;
+ }
+
+ /**
+ * Constructor without setting the name.
+ */
+ public BioAssemblyData() {
+ transformList = new ArrayList();
+ }
+
/**
* Gets the list of transforms.
*
diff --git a/mmtf-serialization/src/main/java/org/rcsb/mmtf/serialization/MessagePackSerialization.java b/mmtf-serialization/src/main/java/org/rcsb/mmtf/serialization/MessagePackSerialization.java
index de6dccb..6fd344b 100644
--- a/mmtf-serialization/src/main/java/org/rcsb/mmtf/serialization/MessagePackSerialization.java
+++ b/mmtf-serialization/src/main/java/org/rcsb/mmtf/serialization/MessagePackSerialization.java
@@ -17,11 +17,22 @@
*/
public class MessagePackSerialization implements MmtfStructureSerializationInterface {
+ private ObjectMapper objectMapper;
+
+ /**
+ * Constructor for the {@link MessagePackSerialization} class.
+ * Generates {@link ObjectMapper} and sets to include non-null.
+ */
+ public MessagePackSerialization() {
+ objectMapper = new ObjectMapper(new MessagePackFactory());
+ objectMapper.setSerializationInclusion(Include.NON_NULL);
+ }
+
@Override
public MmtfStructure deserialize(InputStream inputStream){
MmtfStructure mmtfBean = null;
try {
- mmtfBean = new ObjectMapper(new MessagePackFactory()).readValue(inputStream, MmtfStructure.class);
+ mmtfBean = objectMapper.readValue(inputStream, MmtfStructure.class);
} catch (IOException e) {
e.printStackTrace();
}
@@ -30,8 +41,6 @@ public MmtfStructure deserialize(InputStream inputStream){
@Override
public void serialize(MmtfStructure mmtfStructure, OutputStream outputStream) {
- ObjectMapper objectMapper = new ObjectMapper(new MessagePackFactory());
- objectMapper.setSerializationInclusion(Include.NON_NULL);
try {
objectMapper.writeValue(outputStream, mmtfStructure);
} catch (IOException e) {
diff --git a/pom.xml b/pom.xml
index 44d72db..7f72b2c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -90,7 +90,7 @@
maven-jar-plugin
- 3.0.1
+ 3.0.2
maven-scm-plugin
@@ -98,7 +98,7 @@
maven-source-plugin
- 3.0.0
+ 3.0.1
maven-failsafe-plugin
@@ -309,7 +309,7 @@
com.versioneye
versioneye-maven-plugin
- 3.9.2
+ 3.10.0