X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fproject%2FJalview2XML.java;h=0ec8b97287732eb8b101744c74e8cbb1f1b8bd62;hb=b5667f39acdf309cd92881b73edfda591e0acaf4;hp=0d2ec68210e7a41f7039e141b588ef61446d9252;hpb=6853a22b51420bcea0fe12932d8850ffb30d9844;p=jalview.git diff --git a/src/jalview/project/Jalview2XML.java b/src/jalview/project/Jalview2XML.java index 0d2ec68..0ec8b97 100644 --- a/src/jalview/project/Jalview2XML.java +++ b/src/jalview/project/Jalview2XML.java @@ -39,6 +39,7 @@ import jalview.datamodel.Alignment; import jalview.datamodel.AlignmentAnnotation; import jalview.datamodel.AlignmentI; import jalview.datamodel.GraphLine; +import jalview.datamodel.HiddenMarkovModel; import jalview.datamodel.PDBEntry; import jalview.datamodel.Point; import jalview.datamodel.RnaViewerModel; @@ -71,6 +72,7 @@ import jalview.gui.TreePanel; import jalview.io.BackupFiles; import jalview.io.DataSourceType; import jalview.io.FileFormat; +import jalview.io.HMMFile; import jalview.io.NewickFile; import jalview.math.Matrix; import jalview.math.MatrixI; @@ -212,6 +214,8 @@ public class Jalview2XML private static final String RNA_PREFIX = "rna_"; + private static final String HMMER_PREFIX = "hmmer_"; + private static final String UTF_8 = "UTF-8"; /** @@ -1050,6 +1054,9 @@ public class Jalview2XML jseq.getFeatures().add(features); } + /* + * save PDB entries for sequence + */ if (jdatasq.getAllPDBEntries() != null) { Enumeration en = jdatasq.getAllPDBEntries().elements(); @@ -1142,6 +1149,11 @@ public class Jalview2XML saveRnaViewers(jout, jseq, jds, viewIds, ap, storeDS); + if (jds.hasHMMProfile()) + { + saveHmmerProfile(jout, jseq, jds); + } + // jms.addJSeq(jseq); object.getJSeq().add(jseq); } @@ -1374,7 +1386,7 @@ public class Jalview2XML jGroup.setTextCol2(sg.textColour2.getRGB()); jGroup.setTextColThreshold(sg.thresholdTextColour); jGroup.setShowUnconserved(sg.getShowNonconserved()); - jGroup.setIgnoreGapsinConsensus(sg.getIgnoreGapsConsensus()); + jGroup.setIgnoreGapsinConsensus(sg.isIgnoreGapsConsensus()); jGroup.setShowConsensusHistogram(sg.isShowConsensusHistogram()); jGroup.setShowSequenceLogo(sg.isShowSequenceLogo()); jGroup.setNormaliseSequenceLogo(sg.isNormaliseSequenceLogo()); @@ -1686,7 +1698,39 @@ public class Jalview2XML } return object; } + /** + * Saves the HMMER profile associated with the sequence as a file in the jar, + * in HMMER format, and saves the name of the file as a child element of the + * XML sequence element + * + * @param jout + * @param xmlSeq + * @param seq + */ + protected void saveHmmerProfile(JarOutputStream jout, JSeq xmlSeq, + SequenceI seq) + { + HiddenMarkovModel profile = seq.getHMM(); + if (profile == null) + { + warn("Want to save HMM profile for " + seq.getName() + + " but none found"); + return; + } + HMMFile hmmFile = new HMMFile(profile); + String hmmAsString = hmmFile.print(); + String jarEntryName = HMMER_PREFIX + nextCounter(); + try + { + writeJarEntry(jout, jarEntryName, hmmAsString.getBytes()); + xmlSeq.setHmmerProfile(jarEntryName); + } catch (IOException e) + { + warn("Error saving HMM profile: " + e.getMessage()); + } + } + /** * Writes PCA viewer attributes and computed values to an XML model object and * adds it to the JalviewModel. Any exceptions are reported by logging. @@ -2080,9 +2124,8 @@ public class Jalview2XML } else if (!matchedFile.equals(pdbentry.getFile())) { - Cache.log.warn( - "Probably lost some PDB-Sequence mappings for this structure file (which apparently has same PDB Entry code): " - + pdbentry.getFile()); + warn("Probably lost some PDB-Sequence mappings for this structure file (which apparently has same PDB Entry code): " + + pdbentry.getFile()); } // record the // file so we @@ -2582,7 +2625,7 @@ public class Jalview2XML } else { - jalview.bin.Cache.log.debug("reusing DseqFor ID"); + debug("reusing DseqFor ID"); } // mp.setMappingChoice(mpc); @@ -3499,7 +3542,7 @@ public class Jalview2XML } // adds feature to datasequence's feature set (since Jalview 2.10) - al.getSequenceAt(i).addSequenceFeature(sf); + alignmentSeq.addSequenceFeature(sf); } } if (vamsasSeqs.get(i).getDBRef().size() > 0) @@ -3563,16 +3606,25 @@ public class Jalview2XML .getStructureSelectionManager(Desktop.instance) .registerPDBEntry(entry); // adds PDBEntry to datasequence's set (since Jalview 2.10) - if (al.getSequenceAt(i).getDatasetSequence() != null) + if (alignmentSeq.getDatasetSequence() != null) { - al.getSequenceAt(i).getDatasetSequence().addPDBId(entry); + alignmentSeq.getDatasetSequence().addPDBId(entry); } else { - al.getSequenceAt(i).addPDBId(entry); + alignmentSeq.addPDBId(entry); } } } + + /* + * load any HMMER profile + */ + String hmmJarFile = jseqs[i].getHmmerProfile(); + if (hmmJarFile != null && jprovider != null) + { + loadHmmerProfile(jprovider, hmmJarFile, alignmentSeq); + } } } // end !multipleview @@ -4047,6 +4099,31 @@ public class Jalview2XML } /** + * Loads a HMMER profile from a file stored in the project, and associates it + * with the specified sequence + * + * @param jprovider + * @param hmmJarFile + * @param seq + */ + protected void loadHmmerProfile(jarInputStreamProvider jprovider, + String hmmJarFile, SequenceI seq) + { + try + { + String hmmFile = copyJarEntry(jprovider, hmmJarFile, "hmm", null); + HMMFile parser = new HMMFile(hmmFile, DataSourceType.FILE); + HiddenMarkovModel hmmModel = parser.getHMM(); + hmmModel = new HiddenMarkovModel(hmmModel, seq); + seq.setHMM(hmmModel); + } catch (IOException e) + { + warn("Error loading HMM profile for " + seq.getName() + ": " + + e.getMessage()); + } + } + + /** * Instantiate and link any saved RNA (Varna) viewers. The state of the Varna * panel is restored from separate jar entries, two (gapped and trimmed) per * sequence and secondary structure. @@ -5431,10 +5508,7 @@ public class Jalview2XML String id = object.getViewport().get(0).getSequenceSetId(); if (skipList.containsKey(id)) { - if (Cache.log != null && Cache.log.isDebugEnabled()) - { - Cache.log.debug("Skipping seuqence set id " + id); - } + debug("Skipping sequence set id " + id); return true; } return false; @@ -5892,7 +5966,6 @@ public class Jalview2XML jmap.setTo(djs); incompleteSeqs.put(sqid, djs); seqRefIds.put(sqid, djs); - } jalview.bin.Cache.log.debug("about to recurse on addDBRefs."); addDBRefs(djs, ms); @@ -6076,7 +6149,7 @@ public class Jalview2XML } else { - Cache.log.debug("Ignoring " + jvobj.getClass() + " (ID = " + id); + debug("Ignoring " + jvobj.getClass() + " (ID = " + id); } } } @@ -6550,7 +6623,10 @@ public class Jalview2XML maxcol = new Color(Integer.parseInt(colourModel.getRGB(), 16)); } catch (Exception e) { - Cache.log.warn("Couldn't parse out graduated feature color.", e); + if (Cache.log != null) + { + Cache.log.warn("Couldn't parse out graduated feature color.", e); + } } NoValueColour noCol = colourModel.getNoValueColour();