*/
package jalview.datamodel;
+import jalview.analysis.Rna;
+import jalview.analysis.SecStrConsensus.SimpleBP;
+import jalview.analysis.WUSSParseException;
+
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Map;
import java.util.Map.Entry;
-import jalview.analysis.Rna;
-import jalview.analysis.SecStrConsensus.SimpleBP;
-import jalview.analysis.WUSSParseException;
-
/**
* DOCUMENT ME!
*
public char charAt(int index)
{
return ((index + offset < 0) || (index + offset) >= max
- || annotations[index + offset] == null || (annotations[index
- + offset].secondaryStructure < ' ') ? ' '
- : annotations[index + offset].secondaryStructure);
+ || annotations[index + offset] == null
+ || (annotations[index + offset].secondaryStructure <= ' ') ? ' '
+ : annotations[index + offset].displayCharacter == null
+ || annotations[index + offset].displayCharacter
+ .length() == 0 ? annotations[index + offset].secondaryStructure
+ : annotations[index + offset].displayCharacter
+ .charAt(0));
}
@Override
for (int i = offset; i < mx; i++)
{
- string[i] = (annotations[i] == null || (annotations[i].secondaryStructure < 32)) ? ' '
- : annotations[i].secondaryStructure;
+ string[i] = (annotations[i] == null || (annotations[i].secondaryStructure <= 32)) ? ' '
+ : (annotations[i].displayCharacter == null
+ || annotations[i].displayCharacter.length() == 0 ? annotations[i].secondaryStructure
+ : annotations[i].displayCharacter.charAt(0));
}
return new String(string);
}
{
if (annotations[i] != null)
{
- annotations[i].displayCharacter = "X";
+ annotations[i].displayCharacter = "";
}
}
}
*/
package jalview.gui;
-import jalview.bin.Cache;
-import jalview.datamodel.ColumnSelection;
-import jalview.datamodel.SequenceGroup;
-import jalview.datamodel.SequenceI;
-import jalview.structure.SecondaryStructureListener;
-import jalview.structure.SelectionListener;
-import jalview.structure.SelectionSource;
-import jalview.structure.StructureSelectionManager;
-import jalview.structure.VamsasSource;
-import jalview.util.ShiftList;
-
import java.awt.BorderLayout;
import java.awt.Color;
import java.util.ArrayList;
import javax.swing.JInternalFrame;
import javax.swing.JSplitPane;
-
-import jalview.bin.Cache;
-import jalview.util.MessageManager;
-import jalview.util.ShiftList;
+import javax.swing.event.InternalFrameAdapter;
+import javax.swing.event.InternalFrameEvent;
import fr.orsay.lri.varna.VARNAPanel;
import fr.orsay.lri.varna.exceptions.ExceptionFileFormatOrSyntax;
import fr.orsay.lri.varna.models.rna.ModeleBase;
import fr.orsay.lri.varna.models.rna.RNA;
+import jalview.bin.Cache;
+import jalview.datamodel.ColumnSelection;
+import jalview.datamodel.SequenceGroup;
+import jalview.datamodel.SequenceI;
+import jalview.structure.SecondaryStructureListener;
+import jalview.structure.SelectionListener;
+import jalview.structure.SelectionSource;
+import jalview.structure.StructureSelectionManager;
+import jalview.structure.VamsasSource;
+import jalview.util.MessageManager;
+import jalview.util.ShiftList;
+
public class AppVarna extends JInternalFrame implements
InterfaceVARNAListener, SelectionListener,
SecondaryStructureListener// implements
// System.out.println(ssm.toString());
ssm.addStructureViewerListener(this);
ssm.addSelectionListener(this);
+ addInternalFrameListener(new InternalFrameAdapter()
+ {
+ @Override
+ public void internalFrameClosed(InternalFrameEvent evt)
+ {
+ close();
+ }
+ });
+
}
public void initVarna()
}
+ /**
+ * Tidy up as necessary when the viewer panel is closed
+ */
+ protected void close()
+ {
+ /*
+ * Deregister as a listener, to free references to this object
+ */
+ if (ssm != null)
+ {
+ ssm.removeStructureViewerListener(AppVarna.this, null);
+ ssm.removeSelectionListener(AppVarna.this);
+ }
+ }
+
}
final SequenceI[][] seqsArray = allseqs.toArray(new SequenceI[allseqs
.size()][]);
String newViewId = viewerData.getKey();
- new ChimeraViewFrame(chimeraSessionFile, af.alignPanel, pdbArray,
+ ChimeraViewFrame cvf = new ChimeraViewFrame(chimeraSessionFile,
+ af.alignPanel, pdbArray,
seqsArray, colourByChimera, colourBySequence, newViewId);
+ cvf.setSize(data.getWidth(), data.getHeight());
+ cvf.setLocation(data.getX(), data.getY());
}
/**
*/
package jalview.io;
-import java.util.StringTokenizer;
-import java.util.Vector;
-
-import javax.swing.JOptionPane;
-import javax.swing.SwingUtilities;
-
import jalview.api.ComplexAlignFile;
import jalview.datamodel.AlignmentI;
import jalview.datamodel.ColumnSelection;
import jalview.structure.StructureSelectionManager;
import jalview.util.MessageManager;
+import java.util.StringTokenizer;
+import java.util.Vector;
+
+import javax.swing.JOptionPane;
+import javax.swing.SwingUtilities;
+
public class FileLoader implements Runnable
{
String file;
if ((al != null) && (al.getHeight() > 0))
{
+ // construct and register dataset sequences
for (SequenceI sq : al.getSequences())
{
while (sq.getDatasetSequence() != null)
{
for (PDBEntry pdbe : sq.getPDBId())
{
+ // register PDB entries with desktop's structure selection
+ // manager
StructureSelectionManager.getStructureSelectionManager(
Desktop.instance).registerPDBEntry(pdbe);
}
}
}
+
if (viewport != null)
{
+ // append to existing alignment
viewport.addAlignment(al, title);
}
else
{
- if (!protocol.equals(AppletFormatAdapter.PASTE))
- {
- alignFrame.setFileName(file, format);
- }
+ // otherwise construct the alignFrame
+
if (source instanceof ComplexAlignFile)
{
ColumnSelection colSel = ((ComplexAlignFile) source)
ColourSchemeI cs = ((ComplexAlignFile) source)
.getColourScheme();
alignFrame = new AlignFrame(al, hiddenSeqs, colSel,
- AlignFrame.DEFAULT_WIDTH,
- AlignFrame.DEFAULT_HEIGHT);
+ AlignFrame.DEFAULT_WIDTH, AlignFrame.DEFAULT_HEIGHT);
alignFrame.getViewport().setShowSequenceFeatures(
showSeqFeatures);
alignFrame = new AlignFrame(al, AlignFrame.DEFAULT_WIDTH,
AlignFrame.DEFAULT_HEIGHT);
}
+ }
+ // add metadata and update ui
+ if (!protocol.equals(AppletFormatAdapter.PASTE))
+ {
+ alignFrame.setFileName(file, format);
+ }
- alignFrame.statusBar.setText(MessageManager.formatMessage(
- "label.successfully_loaded_file", new String[]
- { title }));
+ alignFrame.statusBar.setText(MessageManager.formatMessage(
+ "label.successfully_loaded_file", new String[]
+ { title }));
- if (raiseGUI)
- {
- // add the window to the GUI
- // note - this actually should happen regardless of raiseGUI
- // status in Jalview 3
- // TODO: define 'virtual desktop' for benefit of headless scripts
- // that perform queries to find the 'current working alignment'
- Desktop.addInternalFrame(alignFrame, title,
- AlignFrame.DEFAULT_WIDTH, AlignFrame.DEFAULT_HEIGHT);
- }
+ if (raiseGUI)
+ {
+ // add the window to the GUI
+ // note - this actually should happen regardless of raiseGUI
+ // status in Jalview 3
+ // TODO: define 'virtual desktop' for benefit of headless scripts
+ // that perform queries to find the 'current working alignment'
+ Desktop.addInternalFrame(alignFrame, title,
+ AlignFrame.DEFAULT_WIDTH, AlignFrame.DEFAULT_HEIGHT);
+ }
- try
- {
- alignFrame.setMaximum(jalview.bin.Cache.getDefault(
- "SHOW_FULLSCREEN", false));
- } catch (java.beans.PropertyVetoException ex)
- {
- }
+ try
+ {
+ alignFrame.setMaximum(jalview.bin.Cache.getDefault(
+ "SHOW_FULLSCREEN", false));
+ } catch (java.beans.PropertyVetoException ex)
+ {
}
}
else
FormatAdapter.PASTE));
// test for consistency in io
- StockholmFileTest.testAlignmentEquivalence(al, al_new);
+ StockholmFileTest.testAlignmentEquivalence(al, al_new, false);
return;
} catch (Exception e)
{
AppletFormatAdapter.PASTE, PhylipFile.FILE_DESC);
assertNotNull("Couldn't parse reimported alignment data.", al_input);
- StockholmFileTest.testAlignmentEquivalence(al, al_input);
+ StockholmFileTest.testAlignmentEquivalence(al, al_input, false);
}
}
\ No newline at end of file
"Identify routine could not recognise output generated by '"
+ ioformat + "' writer",
ioformat.equals(identifyoutput));
- testAlignmentEquivalence(al, al_input);
+ testAlignmentEquivalence(al, al_input, false);
int numaliannot = 0, numsqswithali = 0;
for (AlignmentAnnotation ala : al_input.getAlignmentAnnotation())
{
* @param al_input
* 'secondary' or generated alignment from some datapreserving
* transformation
+ * @param ignoreFeatures
+ * when true, differences in seuqence feature annotation are ignored.
*/
public static void testAlignmentEquivalence(AlignmentI al,
- AlignmentI al_input)
+ AlignmentI al_input, boolean ignoreFeatures)
{
assertNotNull("Original alignment was null", al);
assertNotNull("Generated alignment was null", al_input);
+ " are not equal", ss_original.equals(ss_new));
assertTrue(
- "Sequence Features were not equivalent",
- (seq_original[i].getSequenceFeatures() == null && seq_new[in]
+ "Sequence Features were not equivalent"
+ + (ignoreFeatures ? " ignoring." : ""),
+ ignoreFeatures
+ || (seq_original[i].getSequenceFeatures() == null && seq_new[in]
.getSequenceFeatures() == null)
|| (seq_original[i].getSequenceFeatures() != null && seq_new[in]
.getSequenceFeatures() != null));
FormatAdapter.PASTE));
// test for consistency in io
- StockholmFileTest.testAlignmentEquivalence(al, al_new);
+ StockholmFileTest.testAlignmentEquivalence(al, al_new, true);
return;
} catch (Exception e)
{
FormatAdapter.PASTE));
// test for consistency in io
- StockholmFileTest.testAlignmentEquivalence(al, al_new);
+ StockholmFileTest.testAlignmentEquivalence(al, al_new, false);
return;
} catch (Exception e)
{
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
+import jalview.datamodel.AlignmentAnnotation;
+import jalview.datamodel.AlignmentI;
+import jalview.gui.Jalview2XML;
+import jalview.io.AnnotationFile;
+import jalview.io.FormatAdapter;
+import jalview.io.StockholmFileTest;
+import jalview.ws.jws2.Jws2Discoverer;
+import jalview.ws.jws2.RNAalifoldClient;
+import jalview.ws.jws2.SequenceAnnotationWSClient;
+import jalview.ws.jws2.jabaws2.Jws2Instance;
+import jalview.ws.params.AutoCalcSetting;
import java.awt.Component;
import java.util.ArrayList;
import javax.swing.JMenuItem;
import org.junit.AfterClass;
+import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import compbio.metadata.WrongParameterException;
-import jalview.datamodel.AlignmentI;
-import jalview.gui.Jalview2XML;
-import jalview.io.AnnotationFile;
-import jalview.io.FormatAdapter;
-import jalview.io.StockholmFileTest;
-import jalview.ws.jws2.Jws2Discoverer;
-import jalview.ws.jws2.RNAalifoldClient;
-import jalview.ws.jws2.SequenceAnnotationWSClient;
-import jalview.ws.jws2.jabaws2.Jws2Instance;
-import jalview.ws.params.AutoCalcSetting;
-
public class RNAStructExportImport
{
- public static String testseqs = "examples/unfolded_RF00031.aln";
+ public static String testseqs = "examples/RF00031_folded.stk";
public static Jws2Discoverer disc;
assertNotNull("Couldn't load test data ('" + testseqs + "')", af);
+ // remove any existing annotation
+ List<AlignmentAnnotation> aal = new ArrayList<AlignmentAnnotation>();
+ for (AlignmentAnnotation rna : af.getViewport().getAlignment()
+ .getAlignmentAnnotation())
+ {
+ if (rna.isRNA())
+ {
+ aal.add(rna);
+ }
+ }
+ for (AlignmentAnnotation rna : aal)
+ {
+ af.getViewport().getAlignment().deleteAnnotation(rna);
+ }
+ af.getViewport().alignmentChanged(af.alignPanel); // why is af.alignPanel
+ // public?
}
@AfterClass
}
@Test
+ public void testRNAAliFoldValidStructure()
+ {
+
+ alifoldClient = new RNAalifoldClient(rnaalifoldws, af, null, null);
+
+ af.getViewport().getCalcManager().startWorker(alifoldClient);
+
+ do
+ {
+ try
+ {
+ Thread.sleep(50);
+ } catch (InterruptedException x)
+ {
+ }
+ ;
+ } while (af.getViewport().getCalcManager().isWorking());
+
+ AlignmentI orig_alig = af.getViewport().getAlignment();
+ for (AlignmentAnnotation aa:orig_alig.getAlignmentAnnotation())
+ {
+ if (alifoldClient.involves(aa))
+ {
+ if (aa.isRNA())
+ {
+ Assert.assertTrue("Did not create valid structure from RNAALiFold prediction", aa.isValidStruc());
+ }
+ }
+ }
+ }
+
+ @Test
public void testRNAStructExport()
{
FormatAdapter.PASTE));
// test for consistency in io
- StockholmFileTest.testAlignmentEquivalence(al, al_new);
+ StockholmFileTest.testAlignmentEquivalence(al, al_new, false);
return;
} catch (Exception e)
{