From 4f807333f1609acda698880f0fbd25deb338132f Mon Sep 17 00:00:00 2001 From: Anthony Bradley Date: Thu, 19 May 2016 18:16:59 -0700 Subject: [PATCH] Added a new reduced encoder to produce the reduced format of the data. --- .../org/rcsb/mmtf/encoder/ReducedEncoder.java | 190 ++++++++++++++++++ 1 file changed, 190 insertions(+) create mode 100644 mmtf-encoder/src/main/java/org/rcsb/mmtf/encoder/ReducedEncoder.java diff --git a/mmtf-encoder/src/main/java/org/rcsb/mmtf/encoder/ReducedEncoder.java b/mmtf-encoder/src/main/java/org/rcsb/mmtf/encoder/ReducedEncoder.java new file mode 100644 index 0000000..889e1e5 --- /dev/null +++ b/mmtf-encoder/src/main/java/org/rcsb/mmtf/encoder/ReducedEncoder.java @@ -0,0 +1,190 @@ +package org.rcsb.mmtf.encoder; + +import java.util.ArrayList; +import java.util.List; + +import org.rcsb.mmtf.api.StructureDataInterface; +import org.rcsb.mmtf.dataholders.MmtfStructure; + +/** + * Convert a full format of the file to a reduced format. + * @author Anthony Bradley + * + */ +public class ReducedEncoder { + + private static MmtfStructure mmtfStructure; + + private static final String CALPHA_NAME = "CA"; + private static final String CARBON_ELEMENT = "C"; + private static final String PHOSPHATE_NAME = "P"; + private static final String PHOSPHATE_ELEMENT = "P"; + + /** + * Constructor to implement the reduced encoder of the {@link StructureDataInterface}. + * @param structureDataInterface the input {@link StructureDataInterface} + */ + public ReducedEncoder(StructureDataInterface structureDataInterface) { + // First convert to a reduced data type + structureDataInterface = ReducedEncoder.getReduced(structureDataInterface); + // Now just apply the default encoder on top of it + DefaultEncoder defaultEncoder = new DefaultEncoder(structureDataInterface); + setMmtfStructure(defaultEncoder.getMmtfEncodedStructure()); + } + + + /** + * Get the reduced form of the input {@link StructureDataInterface}. + * @param structureDataInterface the input {@link StructureDataInterface} + * @return the reduced form of the {@link StructureDataInterface} as another {@link StructureDataInterface} + */ + public static StructureDataInterface getReduced(StructureDataInterface structureDataInterface) { + // The transmission of the data goes through this + AdapterToStructureData adapterToStructureData = new AdapterToStructureData(); + adapterToStructureData.initStructure(structureDataInterface.getNumBonds(), structureDataInterface.getNumAtoms(), structureDataInterface.getNumGroups(), + structureDataInterface.getNumChains(), structureDataInterface.getNumModels(), structureDataInterface.getStructureId()); + // Add the header and crystallographic information + adapterToStructureData.setXtalInfo(structureDataInterface.getSpaceGroup(), structureDataInterface.getUnitCell()); + adapterToStructureData.setHeaderInfo(structureDataInterface.getRfree(), structureDataInterface.getRfree(),structureDataInterface.getResolution(), + structureDataInterface.getTitle(), structureDataInterface.getDepositionDate(), structureDataInterface.getReleaseDate(), structureDataInterface.getExperimentalMethods()); + // Transfer the bioassembly info + for(int i=0; i indicesToAdd = getIndicesToAdd(structureDataInterface, groupType, chainType); + // If there's an atom to add in this group - add it + if(indicesToAdd.size()>0){ + adapterToStructureData.setGroupInfo(structureDataInterface.getGroupName(groupType), structureDataInterface.getGroupIds()[groupCounter], + structureDataInterface.getInsCodes()[groupCounter], structureDataInterface.getGroupChemCompType(groupType), structureDataInterface.getGroupAtomCharges(groupType).length, + structureDataInterface.getGroupBondOrders(groupType).length, structureDataInterface.getGroupSingleLetterCode(groupType), structureDataInterface.getGroupSequenceIndices()[groupCounter], + structureDataInterface.getSecStructList()[groupCounter]); + numGroups++; + } + for(int l=0; l1 && indicesToAdd.size()==structureDataInterface.getGroupBondOrders(groupType).length){ + for(int l=0; l getIndicesToAdd(StructureDataInterface structureDataInterface, int groupType, + String chainType) { + // The list to return + List outList = new ArrayList<>(); + // Get chain type + if(chainType.equals("polymer")){ + for(int i=0; i