/*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8)
- * Copyright (C) 2012 J Procter, AM Waterhouse, LM Lui, J Engelhardt, G Barton, M Clamp, S Searle
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.0b1)
+ * Copyright (C) 2014 The Jalview Authors
*
* This file is part of Jalview.
*
* PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with Jalview. If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
*/
package jalview.ext.jmol;
public void superposeStructures(AlignmentI[] _alignment,
int[] _refStructure, ColumnSelection[] _hiddenCols)
{
+ assert (_alignment.length == _refStructure.length && _alignment.length != _hiddenCols.length);
+
String[] files = getPdbFile();
+ // check to see if we are still waiting for Jmol files
+ long starttime=System.currentTimeMillis();
+ boolean waiting=true;
+ do {
+ waiting=false;
+ for (String file:files)
+ {
+ try {
+ // HACK - in Jalview 2.8 this call may not be threadsafe so we catch
+ // every possible exception
+ StructureMapping[] sm = ssm.getMapping(file);
+ if (sm == null || sm.length == 0)
+ {
+ waiting = true;
+ }
+ } catch (Exception x)
+ {
+ waiting = true;
+ } catch (Error q)
+ {
+ waiting = true;
+ }
+ }
+ // we wait around for a reasonable time before we give up
+ } while (waiting && System.currentTimeMillis()<(10000+1000*files.length+starttime));
+ if (waiting)
+ {
+ System.err.println("RUNTIME PROBLEM: Jmol seems to be taking a long time to process all the structures.");
+ return;
+ }
StringBuffer selectioncom = new StringBuffer();
- assert (_alignment.length == _refStructure.length && _alignment.length != _hiddenCols.length);
+ // In principle - nSeconds specifies the speed of animation for each
+ // superposition - but is seems to behave weirdly, so we don't specify it.
+ String nSeconds = " ";
+ if (files.length > 10)
+ {
+ nSeconds = " 0.00001 ";
+ }
+ else
+ {
+ nSeconds = " " + (2.0 / files.length) + " ";
+ // if (nSeconds).substring(0,5)+" ";
+ }
+ // see JAL-1345 - should really automatically turn off the animation for
+ // large numbers of structures, but Jmol doesn't seem to allow that.
+ nSeconds = " ";
// union of all aligned positions are collected together.
for (int a = 0; a < _alignment.length; a++)
{
// RACE CONDITION - getMapping only returns Jmol loaded filenames once
// Jmol callback has completed.
if (mapping == null || mapping.length < 1)
- continue;
-
+ {
+ throw new Error("Implementation error - Jmol seems to be still working on getting its data - report at http://issues.jalview.org/browse/JAL-1016");
+ }
int lastPos = -1;
for (int s = 0; s < sequence[pdbfnum].length; s++)
{
}
}
}
+
+ // TODO: consider bailing if nmatched less than 4 because superposition
+ // not
+ // well defined.
+ // TODO: refactor superposable position search (above) from jmol selection
+ // construction (below)
+
String[] selcom = new String[files.length];
int nmatched = 0;
// generate select statements to select regions to superimpose structures
}
}
}
- // TODO: consider bailing if nmatched less than 4 because superposition
- // not
- // well defined.
- // TODO: refactor superposable position search (above) from jmol selection
- // construction (below)
for (int pdbfnum = 0; pdbfnum < files.length; pdbfnum++)
{
if (pdbfnum == refStructure)
command.append(chainNames[pdbfnum]);
command.append(") against reference (");
command.append(chainNames[refStructure]);
- command.append(")\";\ncompare ");
+ command.append(")\";\ncompare "+nSeconds);
command.append("{");
command.append(1 + pdbfnum);
command.append(".1} {");