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