Skip to content

Commit e5cfa6b

Browse files
committed
Add Demo for CeSymm
1 parent 05c6c35 commit e5cfa6b

File tree

3 files changed

+170
-17
lines changed

3 files changed

+170
-17
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 = "1hiv.A";
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);
77+
78+
//Display the results in jmol
79+
SymmetryDisplay.display(symmetry, ceSymm.getSymmetryAxes());
80+
}
81+
82+
}
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
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.StructureException;
9+
import org.biojava.nbio.structure.align.multiple.MultipleAlignment;
10+
import org.biojava.nbio.structure.align.multiple.util.MultipleAlignmentWriter;
11+
import org.biojava.nbio.structure.align.util.AtomCache;
12+
import org.biojava.nbio.structure.symmetry.internal.CESymmParameters;
13+
import org.biojava.nbio.structure.symmetry.internal.CESymmParameters.RefineMethod;
14+
import org.biojava.nbio.structure.symmetry.internal.CESymmParameters.SymmetryType;
15+
import org.biojava.nbio.structure.symmetry.internal.CeSymm;
16+
17+
/**
18+
* Quick demo of how to call CE-Symm programmatically.
19+
* Some examples of different symmetry types are proposed.
20+
*
21+
* @author Spencer Bliven
22+
* @author Aleix Lafita
23+
*
24+
*/
25+
public class DemoCeSymm {
26+
27+
public static void main(String[] args)
28+
throws IOException, StructureException {
29+
30+
/*
31+
* Some examples:
32+
*
33+
* CLOSED
34+
* 2-fold: 1hiv.A,
35+
* 3-fold: 4i4q, 4dou
36+
* 5-fold: 2jaj.A
37+
* 6-fold: 1u6d
38+
* 7-fold: 1jof.A
39+
* 8-fold: 1vzw, d1i4na_
40+
*
41+
* OPEN
42+
* ankyrin: 1n0r.A, 3ehq.A
43+
* leucine repeats: 2bnh.A, 3o6n
44+
* helical: 1d0b.A
45+
*
46+
* MULTIPLE AXES
47+
* dihedral: 4hhb, 1vym
48+
* hierarchical: 4gcr, 1ppr.O, 1hiv
49+
* monoclonal Ab: 4NZU
50+
*
51+
* - For more examples see the symmetry benchmark
52+
*/
53+
54+
//Set the name of the protein structure to analyze
55+
String name = "4F88";
56+
List<Atom[]> atoms = new ArrayList<Atom[]>();
57+
58+
//Download the atoms
59+
AtomCache cache = new AtomCache();
60+
Atom[] ca = cache.getAtoms(name);
61+
atoms.add(ca);
62+
63+
CeSymm ceSymm = new CeSymm();
64+
65+
//Choose some parameters
66+
CESymmParameters params = (CESymmParameters) ceSymm.getParameters();
67+
params.setRefineMethod(RefineMethod.SINGLE);
68+
params.setSymmetryType(SymmetryType.AUTO);
69+
params.setOptimization(true);
70+
params.setMultipleAxes(true);
71+
72+
//Run the alignment
73+
MultipleAlignment symmetry = ceSymm.align(atoms);
74+
75+
//Display the results in FatCat format
76+
System.out.println(MultipleAlignmentWriter.toFatCat(symmetry));
77+
}
78+
79+
}

biojava-structure/src/main/java/org/biojava/nbio/structure/symmetry/internal/CeSymm.java

Lines changed: 9 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -26,21 +26,12 @@
2626
import org.biojava.nbio.structure.align.multiple.MultipleAlignmentEnsemble;
2727
import org.biojava.nbio.structure.align.multiple.MultipleAlignmentEnsembleImpl;
2828
import org.biojava.nbio.structure.align.multiple.util.MultipleAlignmentScorer;
29-
import org.biojava.nbio.structure.symmetry.internal.CESymmParameters.RefineMethod;
30-
import org.biojava.nbio.structure.symmetry.internal.CESymmParameters.SymmetryType;
31-
import org.biojava.nbio.structure.symmetry.internal.SymmetryAxes;
32-
import org.biojava.nbio.structure.symmetry.internal.OrderDetectionFailedException;
33-
import org.biojava.nbio.structure.symmetry.internal.OrderDetector;
34-
import org.biojava.nbio.structure.symmetry.internal.SequenceFunctionOrderDetector;
35-
import org.biojava.nbio.structure.symmetry.internal.OpenRefiner;
36-
import org.biojava.nbio.structure.symmetry.internal.Refiner;
37-
import org.biojava.nbio.structure.symmetry.internal.RefinerFailedException;
38-
import org.biojava.nbio.structure.symmetry.internal.SingleRefiner;
39-
import org.biojava.nbio.structure.symmetry.internal.SymmOptimizer;
4029
import org.biojava.nbio.structure.align.util.AFPChainScorer;
4130
import org.biojava.nbio.structure.align.util.AtomCache;
4231
import org.biojava.nbio.structure.align.util.RotationAxis;
4332
import org.biojava.nbio.structure.jama.Matrix;
33+
import org.biojava.nbio.structure.symmetry.internal.CESymmParameters.RefineMethod;
34+
import org.biojava.nbio.structure.symmetry.internal.CESymmParameters.SymmetryType;
4435
import org.biojava.nbio.structure.symmetry.utils.SymmetryTools;
4536
import org.slf4j.Logger;
4637
import org.slf4j.LoggerFactory;
@@ -278,7 +269,6 @@ public AFPChain align(Atom[] ca10, Atom[] ca2O, Object param)
278269
cols = ca2.length;
279270

280271
if( rows == 0 || cols == 0) {
281-
logger.warn("Aligning empty structure");
282272
throw new StructureException("Aligning empty structure");
283273
}
284274

@@ -376,16 +366,17 @@ public AFPChain align(Atom[] ca10, Atom[] ca2O, Object param)
376366
try {
377367
switch (type){
378368
case CLOSE:
379-
refiner = new SingleRefiner();
380369
if (order == 1) return afpChain;
370+
refiner = new SingleRefiner();
381371
break;
382372
default: //case OPEN
383373
refiner = new OpenRefiner();
384374
break;
385375
}
376+
386377
afpChain = refiner.refine(afpAlignments, ca1, order);
387378
refined = true;
388-
379+
389380
} catch (RefinerFailedException e) {
390381
logger.warn("Could not refine structure!");
391382
return afpChain;
@@ -523,7 +514,8 @@ public MultipleAlignment align(List<Atom[]> atomArrays, Object param)
523514
this.params = (CESymmParameters) param;
524515

525516
//If the multiple axes is called, run iterative version
526-
if (params.isMultipleAxes()){
517+
if (params.isMultipleAxes() &&
518+
params.getRefineMethod() != RefineMethod.NOT_REFINED){
527519
CeSymmIterative iterative = new CeSymmIterative(params);
528520
MultipleAlignment result = iterative.execute(atomArrays.get(0));
529521
axes = iterative.getSymmetryAxes();
@@ -567,9 +559,9 @@ public MultipleAlignment align(List<Atom[]> atomArrays, Object param)
567559
executor.shutdown();
568560

569561
} catch (InterruptedException e) {
570-
e.printStackTrace();
562+
logger.warn("Optimization failed!");
571563
} catch (ExecutionException e) {
572-
e.printStackTrace();
564+
logger.warn("Optimization failed!");
573565
}
574566
}
575567
} else {

0 commit comments

Comments
 (0)