demo.DemoShowValidationResults Maven / Gradle / Ivy
/*
* BioJava development code
*
* 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/
*
* created at Sep 18, 2013
* Author: ap3
*/
package demo;
import org.biojava.nbio.structure.Structure;
import org.biojava.nbio.structure.align.gui.jmol.StructureAlignmentJmol;
import org.biojava.nbio.structure.StructureIO;
import org.biojava.nbio.structure.validation.*;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;
import java.io.InputStream;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.List;
import java.util.zip.GZIPInputStream;
public class DemoShowValidationResults {
public static void main(String[] args){
//String pdbId ="3zjr";
String pdbId ="3vtq";
showPdbValidation(pdbId);
}
private static void showPdbValidation(String pdbId) {
try {
JAXBContext ctx = JAXBContext.newInstance(new Class[] {WwPDBValidationInformation.class});
Unmarshaller um = ctx.createUnmarshaller();
InputStream inStream = new GZIPInputStream(DemoShowValidationResults.class.getResourceAsStream("/"+pdbId+"-valdata.xml.gz"));
WwPDBValidationInformation validationReport = (WwPDBValidationInformation) um.unmarshal(inStream);
Entry entry = validationReport.getEntry();
System.out.println(pdbId + " " + entry.getPDBRevisionNumber() +
"\t Rfree: " + entry.getDCCRfree() +
"\t Clashscore " + entry.getClashscore() +
"\t % Ramachandran outliers: " + entry.getPercentRamaOutliers() +
"\t % RSRC outliers: " + entry.getPercentRSRZOutliers() );
StructureAlignmentJmol jmolPanel = new StructureAlignmentJmol();
Structure s = StructureIO.getStructure(pdbId);
jmolPanel.setStructure(s);
jmolPanel.evalString("select *; color grey ; cartoon off ; ");
for (ModelledSubgroup subgroup: validationReport.getModelledSubgroup()) {
List clashes = subgroup.getClash();
String chainId = subgroup.getChain();
//String resname = subgroup.getResname();
String iCode = subgroup.getIcode();
BigInteger resnum = subgroup.getResnum();
//String altcode = subgroup.getAltcode();
String pos = resnum.toString() ;
if ( iCode !=null && iCode.length()>0 && (! iCode.equals(" ")))
pos +="^" + iCode;
pos +=":" + chainId;
BigDecimal base = new BigDecimal(0.5);
for (Clash clash : clashes){
String clashatom = clash.getAtom();
BigDecimal clashmag = clash.getClashmag();
// pos1 icode A chain X should become:
// 1^A:X
// [MET]508:A.CA/1 #3918
// insertion code: [ASP]1^A:A.CA/1 #2
String clashj = pos + "." + clashatom;
String jmols = " select " + clashj + "; color red; spacefill " + (base.add(clashmag)) + ";" ;
System.out.println(jmols + " " + clashmag);
jmolPanel.evalString(jmols);
}
for (AngleOutlier angleout : subgroup.getAngleOutlier()) {
String atom0 = angleout.getAtom0();
String atom1 = angleout.getAtom1();
String atom2 = angleout.getAtom2();
String anglej = "select " + pos + "." + atom0+"," +pos+"." + atom1 +"," + pos +"." + atom2+"; color wireframe blue; wireframe 0.5;";
//System.out.println(anglej);
jmolPanel.evalString(anglej);
}
for (BondOutlier bondout : subgroup.getBondOutlier()){
String atom0 = bondout.getAtom0();
String atom1 = bondout.getAtom1();
String bondj = "select " + pos + "." + atom0+"," +pos+"." + atom1 +"; color wireframe green; wireframe 0.5;";
jmolPanel.evalString(bondj);
}
}
} catch (Exception e){
e.printStackTrace();
}
}
}