import jalview.datamodel.AlignmentI;
import jalview.datamodel.Annotation;
import jalview.datamodel.ColumnSelection;
+import jalview.datamodel.DynamicData;
+import jalview.datamodel.DynamicData.DataType;
import jalview.datamodel.GraphLine;
+import jalview.datamodel.HiddenColumns;
import jalview.datamodel.HiddenSequences;
import jalview.datamodel.PDBEntry;
import jalview.datamodel.PDBEntry.Type;
import jalview.datamodel.SequenceGroup;
import jalview.datamodel.SequenceI;
-import jalview.gui.Desktop;
import jalview.schemes.ColourSchemeI;
import jalview.schemes.ColourSchemeProperty;
-import jalview.schemes.UserColourScheme;
import jalview.structure.StructureSelectionManager;
+import jalview.util.ColorUtils;
+import java.awt.Color;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
public class AnnotationFile
{
+ StringBuffer text;
+
+ SequenceI refSeq = null;
+
+ String refSeqId = null;
+
+ String[] StructModelHeader = null;
+
+ long nlinesread = 0;
+
+ String lastread = "";
+
+ /**
+ * used for resolving absolute references to resources relative to
+ * annotationFile location
+ */
+ String baseUri = "";
+
+ private static String GRAPHLINE = "GRAPHLINE", COMBINE = "COMBINE",
+ STRUCTMODEL = "STRUCTMODEL",
+ HEADER_STRUCT_MODEL = "HEADER_STRUCT_MODEL";
+
public AnnotationFile()
{
init();
return newline;
}
- StringBuffer text;
private void init()
{
*/
public class ViewDef
{
- public String viewname;
-
- public HiddenSequences hidseqs;
+ // TODO this class is not used - remove?
+ public final String viewname;
- public ColumnSelection hiddencols;
+ public final HiddenSequences hidseqs;
- public Vector visibleGroups;
+ public final HiddenColumns hiddencols;
- public Hashtable hiddenRepSeqs;
+ public final Hashtable hiddenRepSeqs;
- public ViewDef(String viewname, HiddenSequences hidseqs,
- ColumnSelection hiddencols, Hashtable hiddenRepSeqs)
+ public ViewDef(String vname, HiddenSequences hseqs,
+ HiddenColumns hcols, Hashtable hRepSeqs)
{
- this.viewname = viewname;
- this.hidseqs = hidseqs;
- this.hiddencols = hiddencols;
- this.hiddenRepSeqs = hiddenRepSeqs;
+ this.viewname = vname;
+ this.hidseqs = hseqs;
+ this.hiddencols = hcols;
+ this.hiddenRepSeqs = hRepSeqs;
}
}
*/
public String printAnnotations(AlignmentAnnotation[] annotations,
List<SequenceGroup> list, Hashtable properties,
- ColumnSelection cs, AlignmentI al, ViewDef view)
+ HiddenColumns cs,
+ AlignmentI al, ViewDef view)
{
if (view != null)
{
}
if (list == null)
{
- list = view.visibleGroups;
+ // list = view.visibleGroups;
}
if (cs == null)
{
if (cs != null && cs.hasHiddenColumns())
{
text.append("VIEW_HIDECOLS\t");
- List<int[]> hc = cs.getHiddenColumns();
+ List<int[]> hc = cs.getHiddenRegions();
boolean comma = false;
for (int[] r : hc)
{
return false;
}
- public void printGroups(List<SequenceGroup> list)
+ protected void printGroups(List<SequenceGroup> list)
{
SequenceI seqrep = null;
for (SequenceGroup sg : list)
if (sg.cs != null)
{
text.append("colour=");
- text.append(ColourSchemeProperty.getColourName(sg.cs));
+ text.append(ColourSchemeProperty.getColourName(sg.cs
+ .getColourScheme()));
text.append("\t");
if (sg.cs.getThreshold() != 0)
{
}
}
- SequenceI refSeq = null;
-
- String refSeqId = null;
public boolean annotateAlignmentView(AlignViewportI viewport,
String file, DataSourceType protocol)
{
ColumnSelection colSel = viewport.getColumnSelection();
+ HiddenColumns hidden = viewport.getAlignment().getHiddenColumns();
if (colSel == null)
{
colSel = new ColumnSelection();
}
- boolean rslt = readAnnotationFile(viewport.getAlignment(), colSel,
+ if (hidden == null)
+ {
+ hidden = new HiddenColumns();
+ }
+ boolean rslt = readAnnotationFile(viewport.getAlignment(), hidden,
file, protocol);
- if (rslt && (colSel.hasSelectedColumns() || colSel.hasHiddenColumns()))
+ if (rslt && (colSel.hasSelectedColumns() || hidden.hasHiddenColumns()))
{
viewport.setColumnSelection(colSel);
+ viewport.getAlignment().setHiddenColumns(hidden);
}
return rslt;
return readAnnotationFile(al, null, file, sourceType);
}
- public boolean readAnnotationFile(AlignmentI al, ColumnSelection colSel,
+ public boolean readAnnotationFile(AlignmentI al, HiddenColumns hidden,
String file, DataSourceType sourceType)
{
baseUri = "";
}
if (in != null)
{
- return parseAnnotationFrom(al, colSel, in);
+ return parseAnnotationFrom(al, hidden, in);
}
} catch (Exception ex)
return false;
}
- long nlinesread = 0;
- String lastread = "";
-
- /**
- * used for resolving absolute references to resources relative to
- * annotationFile location
- */
- String baseUri = "";
-
- private static String GRAPHLINE = "GRAPHLINE", COMBINE = "COMBINE",
- STRUCTMODEL = "STRUCTMODEL";
-
- public boolean parseAnnotationFrom(AlignmentI al, ColumnSelection colSel,
+ public boolean parseAnnotationFrom(AlignmentI al, HiddenColumns hidden,
BufferedReader in) throws Exception
{
nlinesread = 0;
modified = true;
continue;
}
- // else if (token.equalsIgnoreCase("VIEW_DEF"))
- // {
- // addOrSetView(al,st);
- // modified = true;
- // continue;
- // }
else if (token.equalsIgnoreCase("VIEW_SETREF"))
{
if (refSeq != null)
{
if (st.hasMoreTokens())
{
- if (colSel == null)
+ if (hidden == null)
{
- colSel = new ColumnSelection();
+ hidden = new HiddenColumns();
}
- parseHideCols(colSel, st.nextToken());
+ parseHideCols(hidden, st.nextToken());
}
modified = true;
continue;
}
if (sr != null)
{
- if (colSel == null)
+ if (hidden == null)
{
System.err
.println("Cannot process HIDE_INSERTIONS without an alignment view: Ignoring line: "
else
{
// consider deferring this till after the file has been parsed ?
- colSel.hideInsertionsFor(sr);
+ hidden.hideInsertionsFor(sr);
}
}
modified = true;
continue;
}
+ else if (token.equalsIgnoreCase(HEADER_STRUCT_MODEL))
+ {
+ int hSize = st.countTokens();
+ StructModelHeader = new String[hSize];
+ for (int x = 0; x < hSize; x++)
+ {
+ StructModelHeader[x] = st.nextToken();
+ }
+ continue;
+ }
else if (token.equalsIgnoreCase(STRUCTMODEL))
{
boolean failedtoadd = true;
- // expect
- // STRUCTMODEL <Query> <TemplateSeqId> <ModelFile> <FastaMappingFile>
- // <Confidence> <%.I.D>
- // <MatchStart> <MatchEnd> <Coverage> [<Other Information>]
+ // expects STRUCTMODEL <Query> <TemplateSeqId> <ModelFile>
+ // <FastaMappingFile>
String querySeqId = !st.hasMoreTokens() ? "" : st.nextToken();
SequenceI querySeq = al.findName(querySeqId);
if (st.hasMoreTokens()) {
}
else
{
- String tempId = st.nextToken();
- String fastaMapping = st.nextToken();
- String confidence = !st.hasMoreTokens() ? "" : 100
- * Double.valueOf(st.nextToken()) + "";
- String pid = !st.hasMoreTokens() ? "" : st.nextToken();
- String alignRange = !st.hasMoreTokens() ? "" : st.nextToken()
- + "-" + st.nextToken();
- String otherInfo = !st.hasMoreTokens() ? "" : st.nextToken();
- String coverage = "";
- if (add_structmodel(al, querySeq, refSeq, tempId,
- fastaMapping,
- alignRange, coverage,
- confidence, pid, otherInfo))
+ int tSize = st.countTokens() + 2;
+ String[] rowData = new String[tSize];
+ rowData[0] = querySeqId;
+ rowData[1] = refSeqId;
+ for (int x = 2; x < tSize; x++)
+ {
+ rowData[x] = st.nextToken();
+ }
+ if (processStructModel(al, querySeq, refSeq,
+ StructModelHeader, rowData, baseUri))
{
failedtoadd = false;
}
if (failedtoadd)
{
System.err
- .println("Need <Query> <TemplateSeqId> <ModelFile> <FastaMappingFile> <Confidence> <%.I.D> <MatchStart> <MatchEnd> <Coverage> [<Other Information>] as tab separated fields after"
- + STRUCTMODEL
- + ".\nNote: other information could be provided in html format ");
+ .println("Need minimum of <Query> <TemplateSeqId> <ModelFile> <FastaMappingFile> as tab separated fields after"
+ + STRUCTMODEL);
} else {
modified = true;
}
return modified;
}
+
/**
- * resolve a structural model and generate and add an alignment sequence for
- * it
+ * Resolve structural model to a reference sequence and register it to
+ * StructureSelectionManager
*
- * @param refSeq2
- * @param tempId
- * @param urlToModel
- * @param urlToPairwise
+ * @param al
+ * @param querySequence
+ * @param templateSeq
+ * @param structModelHeader
+ * @param structModelData
* @return true if model and sequence was added
*/
- private boolean add_structmodel(AlignmentI al, SequenceI querySequence,
+ static boolean processStructModel(AlignmentI al, SequenceI querySequence,
SequenceI templateSeq,
- String modelFile, String fastaFile, String aRange,
- String coverage, String confidence,
- String pid, String otherInfo)
+ String[] structModelHeader,
+ String[] structModelData, String baseUri)
{
String warningMessage = null;
boolean added = false;
try {
- String structureModelFile = resolveAbsolute(modelFile);
- String fastaMappingFile = resolveAbsolute(fastaFile.replaceAll(
- ".fasta.jal", ".fasta"));
+ String structureModelFile = resolveAbsolutePath(structModelData[2],
+ baseUri);
+ String fastaMappingFile = resolveAbsolutePath(structModelData[3],
+ baseUri);
// System.out.println("Model File >> " + structureModelFile);
// System.out.println("Fasta File >> " + fastaMappingFile);
- PDBEntry phyre2PDBEntry = new PDBEntry(modelFile, null, Type.FILE,
+ String modelName = StructureFile.safeName(structureModelFile);
+ PDBEntry phyre2PDBEntry = new PDBEntry(modelName, " ",
+ Type.PDB,
structureModelFile);
- String phyre2ModelDesc = generatePhyre2InfoHTMLTable(aRange,
- coverage, confidence, pid, otherInfo);
- phyre2PDBEntry.setProperty("PHYRE2_MODEL_INFO", phyre2ModelDesc);
+ List<DynamicData> phyreDD = generatePhyreDynamicDataList(
+ structModelHeader, structModelData);
+ phyre2PDBEntry.setProperty("DYNAMIC_DATA_PHYRE2", phyreDD);
templateSeq.getDatasetSequence().addPDBId(phyre2PDBEntry);
if (querySequence != null)
{
querySequence.getDatasetSequence().addPDBId(phyre2PDBEntry);
}
StructureSelectionManager ssm = StructureSelectionManager
- .getStructureSelectionManager(Desktop.instance);
+ .getStructureSelectionManager();
ssm.registerPhyre2Template(structureModelFile, fastaMappingFile);
added = true;
return added;
}
- private String generatePhyre2InfoHTMLTable(String aRange,
- String coverage, String confidence, String pid, String otherInfo)
+ static List<DynamicData> generatePhyreDynamicDataList(
+ String[] headerArray,
+ String[] dataArray)
{
- StringBuilder phyre2InfoBuilder = new StringBuilder();
- phyre2InfoBuilder.append("<html><table border=\"1\" width=100%>");
- phyre2InfoBuilder
- .append("<tr><td colspan=\"2\"><strong>Phyre2 Template Info</strong></td></tr>");
- if (aRange != null && !aRange.isEmpty())
- {
- phyre2InfoBuilder.append("<tr><td>").append("Aligned range")
- .append("</td><td>").append(aRange).append("</td></tr>");
- }
- if (coverage != null && !coverage.isEmpty())
- {
- phyre2InfoBuilder.append("<tr><td>").append("Coverage")
- .append("</td><td>").append(coverage).append("</td></tr>");
- }
- if (confidence != null && !confidence.isEmpty())
+
+ if (headerArray == null || dataArray == null)
{
- phyre2InfoBuilder.append("<tr><td>").append("Confidence")
- .append("</td><td>").append(confidence).append("</td></tr>");
+ throw new IllegalArgumentException(
+ "Header or data arrays must not be null");
}
- if (pid != null && !pid.isEmpty())
+
+ if (headerArray.length != dataArray.length)
{
- phyre2InfoBuilder.append("<tr><td>").append("%.i.d")
- .append("</td><td>").append(pid).append("</td></tr>");
+ throw new IllegalArgumentException(
+ "Header and data arrays must be of same lenght");
}
- if (otherInfo != null && !otherInfo.isEmpty())
+ List<DynamicData> dynamicDataList = new ArrayList<DynamicData>();
+ int x = 0;
+ for (String data : dataArray)
{
- phyre2InfoBuilder.append("<tr><td>").append("Other information")
- .append("</td><td>").append(otherInfo).append("</td></tr>");
+ // first four column should be hidden;
+ boolean show = (x > 4);
+ dynamicDataList.add(new DynamicData(headerArray[x], data, DataType.S,
+ "PHYRE2", show));
+ x++;
}
- phyre2InfoBuilder.append("</table></html>");
- return phyre2InfoBuilder.toString();
+ return dynamicDataList;
}
- private String resolveAbsolute(String relURI)
+ static String resolveAbsolutePath(String relURI, String _baseUri)
{
if (relURI.indexOf(":/") > -1 || relURI.startsWith("/")
- || "".equals(baseUri) || relURI.startsWith(baseUri))
+ || "".equals(_baseUri) || relURI.startsWith(_baseUri))
{
return relURI;
}
- return baseUri + relURI;
+ return _baseUri + relURI;
}
- private void parseHideCols(ColumnSelection colSel, String nextToken)
+ private void parseHideCols(HiddenColumns hidden, String nextToken)
{
StringTokenizer inval = new StringTokenizer(nextToken, ",");
while (inval.hasMoreTokens())
from = to = Integer.parseInt(range);
if (from >= 0)
{
- colSel.hideColumns(from, to);
+ hidden.hideColumns(from, to);
}
}
else
}
if (from > 0 && to >= from)
{
- colSel.hideColumns(from, to);
+ hidden.hideColumns(from, to);
}
}
}
Annotation parseAnnotation(String string, int graphStyle)
{
- boolean hasSymbols = (graphStyle == AlignmentAnnotation.NO_GRAPH); // don't
- // do the
- // glyph
- // test
- // if we
- // don't
- // want
- // secondary
- // structure
+ // don't do the glyph test if we don't want secondary structure
+ boolean hasSymbols = (graphStyle == AlignmentAnnotation.NO_GRAPH);
String desc = null, displayChar = null;
char ss = ' '; // secondaryStructure
float value = 0;
boolean parsedValue = false, dcset = false;
// find colour here
- java.awt.Color colour = null;
+ Color colour = null;
int i = string.indexOf("[");
int j = string.indexOf("]");
if (i > -1 && j > -1)
{
- UserColourScheme ucs = new UserColourScheme();
-
- colour = ucs.getColourFromString(string.substring(i + 1, j));
+ colour = ColorUtils.parseColourString(string.substring(i + 1,
+ j));
if (i > 0 && string.charAt(i - 1) == ',')
{
// clip the preceding comma as well
void colourAnnotations(AlignmentI al, String label, String colour)
{
- UserColourScheme ucs = new UserColourScheme(colour);
+ Color awtColour = ColorUtils.parseColourString(colour);
Annotation[] annotations;
for (int i = 0; i < al.getAlignmentAnnotation().length; i++)
{
{
if (annotations[j] != null)
{
- annotations[j].colour = ucs.findColour('A');
+ annotations[j].colour = awtColour;
}
}
}
SequenceGroup groupRef)
{
String group = st.nextToken();
- AlignmentAnnotation annotation = null, alannot[] = al
- .getAlignmentAnnotation();
- float value = new Float(st.nextToken()).floatValue();
+ AlignmentAnnotation[] alannot = al.getAlignmentAnnotation();
+ String nextToken = st.nextToken();
+ float value = 0f;
+ try
+ {
+ value = Float.valueOf(nextToken);
+ } catch (NumberFormatException e)
+ {
+ System.err.println("line " + nlinesread + ": Threshold '" + nextToken
+ + "' invalid, setting to zero");
+ }
String label = st.hasMoreTokens() ? st.nextToken() : null;
- java.awt.Color colour = null;
+ Color colour = null;
if (st.hasMoreTokens())
{
- UserColourScheme ucs = new UserColourScheme(st.nextToken());
- colour = ucs.findColour('A');
+ colour = ColorUtils.parseColourString(st.nextToken());
}
if (alannot != null)
{
}
}
}
- if (annotation == null)
- {
- return;
- }
}
void addGroup(AlignmentI al, StringTokenizer st)
if (sg != null)
{
String keyValue, key, value;
- ColourSchemeI def = sg.cs;
- sg.cs = null;
+ ColourSchemeI def = sg.getColourScheme();
while (st.hasMoreTokens())
{
keyValue = st.nextToken();
}
else if (key.equalsIgnoreCase("colour"))
{
- sg.cs = ColourSchemeProperty.getColour(al, value);
+ sg.cs.setColourScheme(ColourSchemeProperty
+ .getColourScheme(al, value));
}
else if (key.equalsIgnoreCase("pidThreshold"))
{
}
else if (key.equalsIgnoreCase("outlineColour"))
{
- sg.setOutlineColour(new UserColourScheme(value).findColour('A'));
+ sg.setOutlineColour(ColorUtils.parseColourString(value));
}
else if (key.equalsIgnoreCase("displayBoxes"))
{
}
else if (key.equalsIgnoreCase("textCol1"))
{
- sg.textColour = new UserColourScheme(value).findColour('A');
+ sg.textColour = ColorUtils.parseColourString(value);
}
else if (key.equalsIgnoreCase("textCol2"))
{
- sg.textColour2 = new UserColourScheme(value).findColour('A');
+ sg.textColour2 = ColorUtils.parseColourString(value);
}
else if (key.equalsIgnoreCase("textColThreshold"))
{
}
else if (key.equalsIgnoreCase("idColour"))
{
- // consider warning if colour doesn't resolve to a real colour
- sg.setIdColour((def = new UserColourScheme(value))
- .findColour('A'));
+ Color idColour = ColorUtils.parseColourString(value);
+ sg.setIdColour(idColour == null ? Color.black : idColour);
}
else if (key.equalsIgnoreCase("hide"))
{
}
sg.recalcConservation();
}
- if (sg.cs == null)
+ if (sg.getColourScheme() == null)
{
- sg.cs = def;
+ sg.setColourScheme(def);
}
}
}
return printAnnotations(viewport.isShowAnnotation() ? viewport
.getAlignment().getAlignmentAnnotation() : null, viewport
.getAlignment().getGroups(), viewport.getAlignment()
- .getProperties(), viewport.getColumnSelection(),
+ .getProperties(), viewport.getAlignment().getHiddenColumns(),
viewport.getAlignment(), null);
}