Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
82 changes: 82 additions & 0 deletions biojava-structure-gui/src/main/java/demo/DemoCeSymm.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
package demo;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.biojava.nbio.structure.Atom;
import org.biojava.nbio.structure.Structure;
import org.biojava.nbio.structure.StructureException;
import org.biojava.nbio.structure.StructureTools;
import org.biojava.nbio.structure.align.multiple.MultipleAlignment;
import org.biojava.nbio.structure.align.util.AtomCache;
import org.biojava.nbio.structure.symmetry.gui.SymmetryDisplay;
import org.biojava.nbio.structure.symmetry.internal.CESymmParameters;
import org.biojava.nbio.structure.symmetry.internal.CESymmParameters.RefineMethod;
import org.biojava.nbio.structure.symmetry.internal.CESymmParameters.SymmetryType;
import org.biojava.nbio.structure.symmetry.internal.CeSymm;

/**
* Quick demo of how to call CE-Symm programmatically.
* Some examples of different symmetry types are proposed.
*
* @author Spencer Bliven
* @author Aleix Lafita
*
*/
public class DemoCeSymm {

public static void main(String[] args)
throws IOException, StructureException {

/*
* Some examples:
*
* CLOSED
* 2-fold: 1hiv.A,
* 3-fold: 4i4q, 4dou
* 5-fold: 2jaj.A
* 6-fold: 1u6d
* 7-fold: 1jof.A
* 8-fold: 1vzw, d1i4na_
*
* OPEN
* ankyrin: 1n0r.A, 3ehq.A
* leucine repeats: 2bnh.A, 3o6n
* helical: 1d0b.A
*
* MULTIPLE AXES
* dihedral: 4hhb, 1vym, 1hiv
* hierarchical: 4gcr, 1ppr.O, 1hiv
* monoclonal Ab: 4NZU
*
* - For more examples see the symmetry benchmark
*/

//Set the name of the protein structure to analyze
String name = "1u6d";
List<Atom[]> atoms = new ArrayList<Atom[]>();

//Download the atoms
AtomCache cache = new AtomCache();
Structure s = cache.getStructure(name);
Atom[] array = StructureTools.getRepresentativeAtomArray(s);
atoms.add(array);

CeSymm ceSymm = new CeSymm();

//Choose some parameters
CESymmParameters params = (CESymmParameters) ceSymm.getParameters();
params.setRefineMethod(RefineMethod.SINGLE);
params.setSymmetryType(SymmetryType.AUTO);
params.setOptimization(true);
params.setMultipleAxes(true);

//Run the alignment
MultipleAlignment symmetry = ceSymm.align(atoms, params);

//Display the results in jmol
SymmetryDisplay.display(symmetry, ceSymm.getSymmetryAxes());
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
package org.biojava.nbio.structure.symmetry.gui;

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

import org.biojava.nbio.structure.Atom;
import org.biojava.nbio.structure.Structure;
import org.biojava.nbio.structure.StructureException;
import org.biojava.nbio.structure.StructureTools;
import org.biojava.nbio.structure.align.gui.AlignmentCalculationRunnable;
import org.biojava.nbio.structure.align.gui.jmol.MultipleAlignmentJmol;
import org.biojava.nbio.structure.align.multiple.MultipleAlignment;
import org.biojava.nbio.structure.symmetry.internal.CESymmParameters;
import org.biojava.nbio.structure.symmetry.internal.CeSymm;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
* Calculates a symmetry analysis and displays the results.
* Linked to the SymmetryGUI.
* Does not generalize, uses CeSymm class directly to allow
* for the symmetry axis recovery.
*
* @author Aleix Lafita
*
*/
public class SymmetryCalc implements AlignmentCalculationRunnable {

private static final Logger logger =
LoggerFactory.getLogger(SymmetryCalc.class);

boolean interrupted = false;

private String name;
private Structure structure;
private SymmetryGui parent;

/** Requests for a structure to analyze.
*/
public SymmetryCalc(SymmetryGui p, Structure s, String n) {
parent = p;
structure = s;
name = n;
}

@Override
public void run() {

//The structure has been downloaded, now calculate the alignment ...
CeSymm algorithm = parent.getSymmetryAlgorithm();
CESymmParameters params = (CESymmParameters) algorithm.getParameters();

try {

List<Atom[]> atoms = new ArrayList<Atom[]>();
atoms.add(StructureTools.getRepresentativeAtomArray(structure));

MultipleAlignment msa = algorithm.align(atoms);

List<String> names = new ArrayList<String>();
for (int su=0; su<msa.size(); su++){
names.add(name);
}
msa.getEnsemble().setStructureNames(names);

MultipleAlignmentJmol jmol =
SymmetryDisplay.display(msa, algorithm.getSymmetryAxes());
String title = jmol.getTitle();

if (params != null)
title += " | OrderDetector=" + params.getOrderDetectorMethod()+
" Refiner: "+params.getRefineMethod();
jmol.setTitle(title);

} catch (StructureException e){
logger.warn(e.getMessage());
}
parent.notifyCalcFinished();
}

@Override
public void interrupt() {
interrupted = true;
}

@Override
public void cleanup() {

parent.notifyCalcFinished();
parent = null;
structure = null;
}

@Override
public void setNrCPUs(int useNrCPUs) {}
}
Loading