All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.biojava.nbio.structure.Site Maven / Gradle / Ivy

There is a newer version: 7.1.3
Show newest version
/*
 *
 * This code may be freely distributed and modified under the
 * terms of the GNU Lesser General Public Licence.  This should
 * be distributed with the code.  If you do not have a copy,
 * see:
 *
 *      http://www.gnu.org/copyleft/lesser.html
 *
 * Copyright for this code is held jointly by the individual
 * authors.  These should be listed in @author doc comments.
 *
 * For more information on the BioJava project and its aims,
 * or to join the biojava-l mailing list, visit the home page
 * at:
 *
 *      http://www.biojava.org/
 *
 */

package org.biojava.nbio.structure;

import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

/**
 * Holds the data of sites presented in PDB files. 
* Example from the PDB flatfile: *
	SITE     1 AC1  3 GLY A  65  CYS A  67  HOH A 180
	SITE     1 AC2 10 HIS C  37  ALA C  39  THR C 152  LEU C 153
	SITE     2 AC2 10 HIS D  37  ALA D  39  THR D 152  LEU D 153
	SITE     3 AC2 10 SER D 154  GOL D 172
	
* @author Amr ALHOSSARY * @author Jules Jacobsen */ public class Site implements PDBRecord, Comparable { private static final long serialVersionUID = -4577047072916341237L; private static final String lineEnd = System.getProperty("line.separator"); private String siteID = ""; private List groups = new ArrayList<>(); //variables for REMARK 800 private String evCode = ""; private String description = ""; public Site() { } public Site(String siteID, List groups) { this.siteID = siteID; this.groups = groups; } @Override public String toString() { StringBuilder stringBuilder = new StringBuilder("SITE "); stringBuilder.append(siteID).append(" ").append(groups.size()).append(" "); for (Group group : groups) { // 012345678910 //'ARG H 221A ' String groupString = String.format("%s %s", group.getPDBName(), group.getResidueNumber().toPDB()); stringBuilder.append(groupString); } stringBuilder.append(lineEnd); return stringBuilder.toString(); } @Override public String toPDB() { StringBuffer buffer = new StringBuffer(); toPDB(buffer); return buffer.toString(); } @Override public void toPDB(StringBuffer buf) { if (groups == null || groups.size() < 1) { return; } //SITE 1 CAT 3 HIS H 57 ASP H 102 SER H 195 //SITE 1 AC1 6 ARG H 221A LYS H 224 HOH H 403 HOH H 460 //SITE 2 AC1 6 HOH H 464 HOH H 497 // ^ ^ ^ // cont# id group size //max 4 groups per line //counters for tracking where we are int seqNum = 0; int groupsWritten = 0; int groupNum = 0; //new StringBuilder for adding the groups to StringBuilder stringBuilder = new StringBuilder(); while (groupsWritten < groups.size()) { StringBuilder groupsString = new StringBuilder(); for (int i = 0; i < 4 && groupsWritten < groups.size(); i++) { Group group = groups.get(groupNum); // Make sure the pdbName is formatted as 3 width string. String groupString = String.format(Locale.UK, "%3s %s", group.getPDBName(), group.getResidueNumber().toPDB()); groupsWritten++; groupNum++; if (i == 3 || groupsWritten == groups.size()) { // groupString = groupString.trim(); groupString.replaceFirst("\\s+$", ""); // remove only trailing whitespace. } groupsString.append(groupString); } stringBuilder.append(String.format(Locale.UK, "SITE %3d %3s %2d %-62s", seqNum + 1, siteID, groups.size(), groupsString.toString())); //iterate the line counter, add the end of line character seqNum++; stringBuilder.append(lineEnd); } buf.append(stringBuilder); } /** * Appends the REMARK 800 section pertaining to the site onto the end of the * StringBuffer provided. * * For example in pdb 1a4w: * REMARK 800 SITE_IDENTIFIER: CAT * REMARK 800 EVIDENCE_CODE: UNKNOWN * REMARK 800 SITE_DESCRIPTION: ACTIVE SITE * * @param stringBuffer */ public void remark800toPDB(StringBuffer stringBuffer) { //REMARK 800 SITE_IDENTIFIER: CAT //REMARK 800 EVIDENCE_CODE: UNKNOWN //REMARK 800 SITE_DESCRIPTION: ACTIVE SITE stringBuffer.append(String.format(Locale.UK, "REMARK 800 SITE_IDENTIFIER: %-52s%s", siteID, lineEnd)); stringBuffer.append(String.format(Locale.UK, "REMARK 800 EVIDENCE_CODE: %-54s%s", evCode, lineEnd)); stringBuffer.append(String.format(Locale.UK, "REMARK 800 SITE_DESCRIPTION: %-51s%s", description, lineEnd)); } /** * Provides REMARK 800 section pertaining to the site as a string. * * For example in pdb 1a4w: * REMARK 800 SITE_IDENTIFIER: CAT * REMARK 800 EVIDENCE_CODE: UNKNOWN * REMARK 800 SITE_DESCRIPTION: ACTIVE SITE * * */ public String remark800toPDB() { StringBuffer stringBuffer = new StringBuffer(); remark800toPDB(stringBuffer); return stringBuffer.toString(); } /** * @param siteID the siteID to set * e.g. CAT, AC1, AC2... */ public void setSiteID(String siteID) { this.siteID = siteID; } /** * @return the siteID * e.g. CAT, AC1, AC2... */ public String getSiteID() { return siteID; } /** * @return the groups */ public List getGroups() { return groups; } /** * @param residues the groups to set */ public void setGroups(List residues) { this.groups = residues; } /** * gets the REMARK 800 description of the site * @return description */ public String getDescription() { return description; } /** * sets the REMARK 800 description of the site */ public void setDescription(String description) { this.description = description; } /** * gets the REMARK 800 EVIDENCE CODE for the site. * @return evidence code */ public String getEvCode() { return evCode; } /** * sets the REMARK 800 EVIDENCE CODE for the site. */ public void setEvCode(String evCode) { this.evCode = evCode; } @Override public boolean equals(Object obj) { if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } final Site other = (Site) obj; if ((this.siteID == null) ? (other.siteID != null) : !this.siteID.equals(other.siteID)) { return false; } if (this.groups != other.groups && (this.groups == null || !this.groups.equals(other.groups))) { return false; } if ((this.evCode == null) ? (other.evCode != null) : !this.evCode.equals(other.evCode)) { return false; } if ((this.description == null) ? (other.description != null) : !this.description.equals(other.description)) { return false; } return true; } @Override public int hashCode() { int hash = 5; hash = 37 * hash + (this.siteID != null ? this.siteID.hashCode() : 0); hash = 37 * hash + (this.groups != null ? this.groups.hashCode() : 0); hash = 37 * hash + (this.evCode != null ? this.evCode.hashCode() : 0); hash = 37 * hash + (this.description != null ? this.description.hashCode() : 0); return hash; } @Override public int compareTo(Site other) { return this.toString().compareTo(other.toString()); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy