Skip to content

Commit bd62ae2

Browse files
committed
Merge pull request #311 from lafita/cesymm
Import Internal Symmetry Code to BioJava #246
2 parents 6386177 + 6beb849 commit bd62ae2

21 files changed

+5368
-0
lines changed
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
package demo;
2+
3+
import java.io.IOException;
4+
import java.util.ArrayList;
5+
import java.util.List;
6+
7+
import org.biojava.nbio.structure.Atom;
8+
import org.biojava.nbio.structure.Structure;
9+
import org.biojava.nbio.structure.StructureException;
10+
import org.biojava.nbio.structure.StructureTools;
11+
import org.biojava.nbio.structure.align.multiple.MultipleAlignment;
12+
import org.biojava.nbio.structure.align.util.AtomCache;
13+
import org.biojava.nbio.structure.symmetry.gui.SymmetryDisplay;
14+
import org.biojava.nbio.structure.symmetry.internal.CESymmParameters;
15+
import org.biojava.nbio.structure.symmetry.internal.CESymmParameters.RefineMethod;
16+
import org.biojava.nbio.structure.symmetry.internal.CESymmParameters.SymmetryType;
17+
import org.biojava.nbio.structure.symmetry.internal.CeSymm;
18+
19+
/**
20+
* Quick demo of how to call CE-Symm programmatically.
21+
* Some examples of different symmetry types are proposed.
22+
*
23+
* @author Spencer Bliven
24+
* @author Aleix Lafita
25+
*
26+
*/
27+
public class DemoCeSymm {
28+
29+
public static void main(String[] args)
30+
throws IOException, StructureException {
31+
32+
/*
33+
* Some examples:
34+
*
35+
* CLOSED
36+
* 2-fold: 1hiv.A,
37+
* 3-fold: 4i4q, 4dou
38+
* 5-fold: 2jaj.A
39+
* 6-fold: 1u6d
40+
* 7-fold: 1jof.A
41+
* 8-fold: 1vzw, d1i4na_
42+
*
43+
* OPEN
44+
* ankyrin: 1n0r.A, 3ehq.A
45+
* leucine repeats: 2bnh.A, 3o6n
46+
* helical: 1d0b.A
47+
*
48+
* MULTIPLE AXES
49+
* dihedral: 4hhb, 1vym, 1hiv
50+
* hierarchical: 4gcr, 1ppr.O, 1hiv
51+
* monoclonal Ab: 4NZU
52+
*
53+
* - For more examples see the symmetry benchmark
54+
*/
55+
56+
//Set the name of the protein structure to analyze
57+
String name = "1u6d";
58+
List<Atom[]> atoms = new ArrayList<Atom[]>();
59+
60+
//Download the atoms
61+
AtomCache cache = new AtomCache();
62+
Structure s = cache.getStructure(name);
63+
Atom[] array = StructureTools.getRepresentativeAtomArray(s);
64+
atoms.add(array);
65+
66+
CeSymm ceSymm = new CeSymm();
67+
68+
//Choose some parameters
69+
CESymmParameters params = (CESymmParameters) ceSymm.getParameters();
70+
params.setRefineMethod(RefineMethod.SINGLE);
71+
params.setSymmetryType(SymmetryType.AUTO);
72+
params.setOptimization(true);
73+
params.setMultipleAxes(true);
74+
75+
//Run the alignment
76+
MultipleAlignment symmetry = ceSymm.align(atoms, params);
77+
78+
//Display the results in jmol
79+
SymmetryDisplay.display(symmetry, ceSymm.getSymmetryAxes());
80+
}
81+
82+
}
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
package org.biojava.nbio.structure.symmetry.gui;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
6+
import org.biojava.nbio.structure.Atom;
7+
import org.biojava.nbio.structure.Structure;
8+
import org.biojava.nbio.structure.StructureException;
9+
import org.biojava.nbio.structure.StructureTools;
10+
import org.biojava.nbio.structure.align.gui.AlignmentCalculationRunnable;
11+
import org.biojava.nbio.structure.align.gui.jmol.MultipleAlignmentJmol;
12+
import org.biojava.nbio.structure.align.multiple.MultipleAlignment;
13+
import org.biojava.nbio.structure.symmetry.internal.CESymmParameters;
14+
import org.biojava.nbio.structure.symmetry.internal.CeSymm;
15+
import org.slf4j.Logger;
16+
import org.slf4j.LoggerFactory;
17+
18+
/**
19+
* Calculates a symmetry analysis and displays the results.
20+
* Linked to the SymmetryGUI.
21+
* Does not generalize, uses CeSymm class directly to allow
22+
* for the symmetry axis recovery.
23+
*
24+
* @author Aleix Lafita
25+
*
26+
*/
27+
public class SymmetryCalc implements AlignmentCalculationRunnable {
28+
29+
private static final Logger logger =
30+
LoggerFactory.getLogger(SymmetryCalc.class);
31+
32+
boolean interrupted = false;
33+
34+
private String name;
35+
private Structure structure;
36+
private SymmetryGui parent;
37+
38+
/** Requests for a structure to analyze.
39+
*/
40+
public SymmetryCalc(SymmetryGui p, Structure s, String n) {
41+
parent = p;
42+
structure = s;
43+
name = n;
44+
}
45+
46+
@Override
47+
public void run() {
48+
49+
//The structure has been downloaded, now calculate the alignment ...
50+
CeSymm algorithm = parent.getSymmetryAlgorithm();
51+
CESymmParameters params = (CESymmParameters) algorithm.getParameters();
52+
53+
try {
54+
55+
List<Atom[]> atoms = new ArrayList<Atom[]>();
56+
atoms.add(StructureTools.getRepresentativeAtomArray(structure));
57+
58+
MultipleAlignment msa = algorithm.align(atoms);
59+
60+
List<String> names = new ArrayList<String>();
61+
for (int su=0; su<msa.size(); su++){
62+
names.add(name);
63+
}
64+
msa.getEnsemble().setStructureNames(names);
65+
66+
MultipleAlignmentJmol jmol =
67+
SymmetryDisplay.display(msa, algorithm.getSymmetryAxes());
68+
String title = jmol.getTitle();
69+
70+
if (params != null)
71+
title += " | OrderDetector=" + params.getOrderDetectorMethod()+
72+
" Refiner: "+params.getRefineMethod();
73+
jmol.setTitle(title);
74+
75+
} catch (StructureException e){
76+
logger.warn(e.getMessage());
77+
}
78+
parent.notifyCalcFinished();
79+
}
80+
81+
@Override
82+
public void interrupt() {
83+
interrupted = true;
84+
}
85+
86+
@Override
87+
public void cleanup() {
88+
89+
parent.notifyCalcFinished();
90+
parent = null;
91+
structure = null;
92+
}
93+
94+
@Override
95+
public void setNrCPUs(int useNrCPUs) {}
96+
}

0 commit comments

Comments
 (0)