*/
package jalview.ext.jmol;
+import java.util.Locale;
+
import jalview.datamodel.AlignmentAnnotation;
import jalview.datamodel.Annotation;
import jalview.datamodel.PDBEntry;
import org.jmol.modelset.ModelSet;
import org.jmol.viewer.Viewer;
-import MCview.Atom;
-import MCview.PDBChain;
-import MCview.Residue;
+import com.stevesoft.pat.Regex;
+
+import mc_view.Atom;
+import mc_view.PDBChain;
+import mc_view.Residue;
/**
* Import and process files with Jmol for file like PDB, mmCIF
{
Viewer viewer = null;
+ private boolean alphaFoldModel;
+
public JmolParser(boolean immediate, Object inFile,
DataSourceType sourceType) throws IOException
{
// }
// ;
// instead, we distinguish .cif from non-.cif by filename
- setStructureFileType(getDataName().toLowerCase().endsWith(".cif")
+ setStructureFileType(getDataName().toLowerCase(Locale.ROOT).endsWith(".cif")
? PDBEntry.Type.MMCIF.toString()
: "PDB");
* see http://wiki.jmol.org/index.php/Jmol_Application
*/
- viewer = (Viewer) JmolViewer.allocateViewer(null, null, null, null,
- null, "-x -o -n", this);
+ viewer = JalviewJmolBinding.getJmolData(this);
// ensure the 'new' (DSSP) not 'old' (Ramachandran) SS method is used
viewer.setBooleanProperty("defaultStructureDSSP", true);
} catch (ClassCastException x)
}
return viewer;
}
+
+ public static Regex getNewAlphafoldValidator()
+ {
+ Regex validator = new Regex("(AF-[A-Z]+[0-9]+[A-Z0-9]+-F1)");
+ validator.setIgnoreCase(true);
+ return validator;
+ }
+ PDBEntry.Type jmolFiletype=null;
+ /**
+ * resolve a jmol filetype string and update the jmolFiletype field accordingly
+ * @param jmolIdentifiedFileType
+ * @return true if filetype was identified as MMCIF, PDB
+ */
+ public boolean updateFileType(String jmolIdentifiedFileType)
+ {
+ if (jmolIdentifiedFileType == null
+ || jmolIdentifiedFileType.trim().equals(""))
+ {
+ return false;
+ }
+ if ("mmcif".equalsIgnoreCase(jmolIdentifiedFileType)) {
+ jmolFiletype = PDBEntry.Type.MMCIF;
+ return true;
+ }
+ if ("pdb".equalsIgnoreCase(jmolIdentifiedFileType))
+ {
+ jmolFiletype = PDBEntry.Type.PDB;
+ return true;
+ }
+ return false;
+ }
+
public void transformJmolModelToJalview(ModelSet ms) throws IOException
{
try
{
+ Regex alphaFold = getNewAlphafoldValidator();
String lastID = "";
List<SequenceI> rna = new ArrayList<SequenceI>();
List<SequenceI> prot = new ArrayList<SequenceI>();
PDBChain tmpchain;
String pdbId = (String) ms.getInfo(0, "title");
-
+ boolean isMMCIF = false;
+ String jmolFileType_String = (String) ms.getInfo(0, "fileType");
+ if (updateFileType(jmolFileType_String))
+ {
+ setStructureFileType(jmolFiletype.toString());
+ }
+
+ isMMCIF = PDBEntry.Type.MMCIF.equals(jmolFiletype);
+
if (pdbId == null)
{
setId(safeName(getDataName()));
{
setId(pdbId);
setPDBIdAvailable(true);
+ alphaFoldModel = alphaFold.search(pdbId) && isMMCIF;
+
}
List<Atom> significantAtoms = convertSignificantAtoms(ms);
for (Atom tmpatom : significantAtoms)
{
- try
+ if (tmpatom.resNumIns.trim().equals(lastID))
+ {
+ // phosphorylated protein - seen both CA and P..
+ continue;
+ }
+ tmpchain = findChain(tmpatom.chain);
+ if (tmpchain != null)
{
- tmpchain = findChain(tmpatom.chain);
- if (tmpatom.resNumIns.trim().equals(lastID))
- {
- // phosphorylated protein - seen both CA and P..
- continue;
- }
tmpchain.atoms.addElement(tmpatom);
- } catch (Exception e)
+ } else
{
- tmpchain = new PDBChain(getId(), tmpatom.chain);
+ String tempFString=null;
+ if (isAlphafoldModel())
+ {
+ tempFString = "Alphafold Reliability";
+ }
+
+ tmpchain = new PDBChain(getId(), tmpatom.chain,tempFString);
getChains().add(tmpchain);
tmpchain.atoms.addElement(tmpatom);
}
}
}
+ private boolean isAlphafoldModel()
+ {
+ return alphaFoldModel;
+ }
+
private List<Atom> convertSignificantAtoms(ModelSet ms)
{
List<Atom> significantAtoms = new ArrayList<Atom>();
/**
* Helper method that adds an AlignmentAnnotation for secondary structure to
- * the sequence, provided at least one secondary structure prediction has been
+ * the sequence, provided at least one secondary structure assignment has been
* made
*
* @param modelTitle