private void initialiseResidueRenderSettings(PrimaryStructure primaryStructure) { if (primaryStructure.ResidueNames == null || primaryStructure.ResidueNames.Count == 0 || primaryStructure.ResidueIDs == null || primaryStructure.ResidueIDs.Count == 0) { return; } // initialise the residue render settings for the molecule if (selectedMolecule.RenderSettings.EnabledResidueNames == null) { selectedMolecule.RenderSettings.EnabledResidueNames = new HashSet <string>(primaryStructure.ResidueNames); } if (selectedMolecule.RenderSettings.CustomResidueNames == null) { selectedMolecule.RenderSettings.CustomResidueNames = new HashSet <string>(); } if (selectedMolecule.RenderSettings.EnabledResidueIDs == null) { selectedMolecule.RenderSettings.EnabledResidueIDs = new HashSet <int>(primaryStructure.ResidueIDs); } if (selectedMolecule.RenderSettings.CustomResidueRenderSettings == null) { selectedMolecule.RenderSettings.CustomResidueRenderSettings = new Dictionary <int, ResidueRenderSettings>(); } }
public void Initialise(string residueName, MoleculeRenderSettings settings, PrimaryStructure primaryStructure, SaveCustomResidueSettingsDelegate saveCustomResidueSettings, ResidueRenderSettingsUpdated settingsUpdatedCallback, ClosedResidueSettingsPanel onClose) { this.residueName = residueName; this.moleculeRenderSettings = settings; this.primaryStructure = primaryStructure; this.saveCustomResidueSettings = saveCustomResidueSettings; this.settingsUpdatedCallback = settingsUpdatedCallback; this.onClose = onClose; ResidueNameInformationText.text = "Showing residue IDs for " + residueName; residueIDs = primaryStructure.GetResidueIDs(new List <String>() { residueName }).ToList(); residueIDs.Sort(); renderResidueIDButtons(); allResiduesEnabled = true; foreach (int residueID in residueIDs) { if (!moleculeRenderSettings.EnabledResidueIDs.Contains(residueID)) { allResiduesEnabled = false; break; } } updateToggleResidueButtonText(); residueIDsPanel.SetActive(true); }
public static void RaiseMoleculeLoaded(int moleculeID, string name, PrimaryStructure primaryStructure) { if (OnMoleculeLoaded != null) { OnMoleculeLoaded(moleculeID, name, primaryStructure); } }
private void showResidueNamesPanel(MoleculeRenderSettings renderSettings, PrimaryStructure primaryStructure) { residueNamesPanel.Initialise(renderSettings, primaryStructure, updateMoleculeRender); if (primaryStructure.ResidueNames == null || primaryStructure.ResidueNames.Count == 0 || primaryStructure.ResidueIDs == null || primaryStructure.ResidueIDs.Count == 0) { residueNamesPanelGO.gameObject.SetActive(false); } else { residueNamesPanelGO.gameObject.SetActive(true); } }
public void SetPrimaryStructure(int moleculeID, PrimaryStructure primaryStructure) { if (primaryStructures == null) { primaryStructures = new Dictionary <int, PrimaryStructure>(); } if (!primaryStructures.ContainsKey(moleculeID)) { primaryStructures.Add(moleculeID, primaryStructure); } else { primaryStructures[moleculeID] = primaryStructure; } }
public void Initialise(MoleculeRenderSettings moleculeRenderSettings, PrimaryStructure primaryStructure, ResidueRenderSettingsUpdated settingsUpdatedCallback) { this.moleculeRenderSettings = moleculeRenderSettings; this.primaryStructure = primaryStructure; this.settingsUpdatedCallback = settingsUpdatedCallback; residueNames = primaryStructure.ResidueNames.ToList(); residueNames.Sort(); renderResidueNameButtons(); allResiduesEnabled = false; if (this.moleculeRenderSettings.EnabledResidueNames != null && residueNameButtons.Count == this.moleculeRenderSettings.EnabledResidueNames.Count) { allResiduesEnabled = true; } updateToggleResidueButtonText(); residueNamesPanel.SetActive(true); }
public void Initialise(int id, PrimaryStructure primaryStructure, MoleculeRenderSettings renderSettings) { if (primaryStructure == null) { return; } this.ID = id; this.PrimaryStructure = primaryStructure; this.renderSettings = renderSettings; this.frameNumber = null; try { secondaryStructure = SecondaryStructure.CreateFromPrimaryStructure(primaryStructure, Settings.StrideExecutablePath, Settings.TmpFilePath); } catch (Exception ex) { Debug.Log("Error Parsing Secondary Structure from Structure File: " + ex.Message); buildSecondaryStructureTrajectory = false; } moleculeBox.gameObject.SetActive(renderSettings.ShowSimulationBox); boundingBox = new BoundingBox(primaryStructure, true); moleculeRender.transform.position = new Vector3(-1 * boundingBox.Centre.x, -1 * boundingBox.Centre.y, -1 * boundingBox.Centre.z); this.transform.position = new Vector3(boundingBox.Centre.x, boundingBox.Centre.y, boundingBox.Centre.z); if (renderSettings.ShowSimulationBox) { moleculeBox.Build(boundingBox); } primaryStructureRenderer.Initialise(primaryStructure); secondaryStructureRenderer.Initialise(primaryStructure); moleculeInput.enabled = false; autoRotateEnabled = false; AutoRotateSpeed = 0f; }
public void UpdateSelectedMolecule() { if (isActiveAndEnabled) { selectedMolecule = molecules.GetSelected(); if (selectedMolecule != null) { selectedMoleculeText.text = "Modifying settings for molecule - " + selectedMolecule.FileName; if (primaryStructures.ContainsKey(selectedMolecule.ID)) { PrimaryStructure primaryStructure = primaryStructures[selectedMolecule.ID]; initialiseResidueRenderSettings(primaryStructure); showResidueNamesPanel(selectedMolecule.RenderSettings, primaryStructure); } } else { selectedMoleculeText.text = "< no molecule selected >"; } } }
public void Initialise(PrimaryStructure structure) { primaryStructure = structure; }
public void MoleculeLoaded(int id, string name, PrimaryStructure primaryStructure) { moleculeSettingsPanel.MoleculeLoaded(id, name, primaryStructure.Title, primaryStructure.AtomCount(), primaryStructure.ResidueCount()); elementsSettingsPanel.SetModelElements(id, primaryStructure.ElementNames); residuesSettingsPanel.SetPrimaryStructure(id, primaryStructure); }
public void Initialise(PrimaryStructure primaryStructure) { this.primaryStructure = primaryStructure; //structureCache = new Dictionary<string, Mesh>(); initialised = true; }
// Loads and renders a molecule using a structure file path and render settings public IEnumerator LoadMoleculeStructure(int moleculeID, string filePath, MoleculeRenderSettings settings) { if (molecules.ContainsKey(moleculeID)) { MoleculeEvents.RaiseShowMessage("Error Loading Molecule: already loaded", true); MoleculeEvents.RaiseOnMoleculeLoadFailed(moleculeID); yield break; } if (loadingStructure) { MoleculeEvents.RaiseShowMessage("Can't Load Molecule: another molecule currently loading", true); MoleculeEvents.RaiseOnMoleculeLoadFailed(moleculeID); yield break; } var watch = System.Diagnostics.Stopwatch.StartNew(); MoleculeEvents.RaiseShowMessage("Loading Structure File: " + filePath, false); loadingStructure = true; int oldAtomMeshQuality = generalSettings.MeshQuality; Debug.Log("Loading structure"); PrimaryStructure primaryStructure = null; string loadException = null; Thread thread = new Thread(() => { try { if (filePath.EndsWith(".gro")) { primaryStructure = GROStructureParser.GetStructure(filePath); } else if (filePath.EndsWith(".xyz")) { primaryStructure = XYZStructureParser.GetStructure(filePath); } else if (filePath.EndsWith(".pdb")) { primaryStructure = PDBStructureParser.GetPrimaryStructure(filePath); } } catch (FileParseException ex) { loadException = ex.Message; } }); thread.Start(); while (thread.IsAlive) { yield return(null); } Debug.Log("Finished Loading structure"); if (loadException != null) { Debug.Log("Error Loading Structure File: " + loadException); MoleculeEvents.RaiseShowMessage("Error Loading Structure File: " + loadException, true); MoleculeEvents.RaiseOnMoleculeLoadFailed(moleculeID); loadingStructure = false; yield break; } watch.Stop(); MoleculeEvents.RaiseShowMessage("Structure File Load Complete [" + watch.ElapsedMilliseconds + "ms]", false); yield return(null); if (primaryStructure != null) { GameObject moleculeGO = GameObject.Instantiate(MoleculePrefab); moleculeGO.transform.parent = this.transform; moleculeGO.SetActive(true); Molecule molecule = moleculeGO.GetComponent <Molecule>(); molecule.Initialise(moleculeID, primaryStructure, settings); molecule.AutoRotateSpeed = generalSettings.AutoRotateSpeed; molecule.SetInputSensitivity(generalSettings.MoleculeInputSensitivity); molecule.SetSpaceNavigatorControlEnabled(generalSettings.SpaceNavigatorMoleculeControlEnabled); molecules.Add(moleculeID, molecule); // check to see if the meshQuality needs to change given the new primary structure updateMeshQuality(); molecule.SetRenderSettings(settings); yield return(StartCoroutine(molecule.Render(generalSettings.MeshQuality))); MoleculeEvents.RaiseMoleculeLoaded(moleculeID, Path.GetFileName(filePath), primaryStructure); } if (oldAtomMeshQuality != generalSettings.MeshQuality) { reRenderMolecules(); } SaveCurrentMoleculeTransformAsDefault(moleculeID); loadingStructure = false; }
// Loads a molecule trajectory. Will only work if molecule is already loaded public IEnumerator LoadMoleculeTrajectory(int moleculeID, string filePath) { if (!molecules.ContainsKey(moleculeID)) { MoleculeEvents.RaiseShowMessage("Can't load molecule trajectory. No molecule found.", true); yield break; } if (loadingTrajectory) { MoleculeEvents.RaiseShowMessage("Can't Load Trajectory: another trajectory currently loading", true); yield break; } PrimaryStructure primaryStructure = molecules[moleculeID].PrimaryStructure; int atomCount = loadTrajectoryAtomCount(filePath); if (atomCount != primaryStructure.AtomCount()) { MoleculeEvents.RaiseShowMessage("Trajectory atom count [" + atomCount + " doesn't match loaded structure atom count [" + primaryStructure.AtomCount() + "]", true); yield break; } MoleculeEvents.RaiseShowMessage("Loading trajectory. Please wait", false); loadingTrajectory = true; PrimaryStructureTrajectory trajectory = null; string loadException = null; Thread thread = new Thread(() => { try { int startFrame = 0; int frameFrequency = 1; int frameCount = Settings.MaxTrajectoryFrames; if (filePath.EndsWith(".xtc")) { trajectory = XTCTrajectoryParser.GetTrajectory(filePath, startFrame, frameCount, frameFrequency); } else if (filePath.EndsWith(".dcd")) { trajectory = DCDTrajectoryParser.GetTrajectory(filePath, startFrame, frameCount, frameFrequency); } else if (filePath.EndsWith(".gro")) { trajectory = GROTrajectoryParser.GetTrajectory(filePath, startFrame, frameCount, frameFrequency); } } catch (FileParseException ex) { loadException = ex.Message; } }); thread.Start(); while (thread.IsAlive) { yield return(null); } if (loadException != null) { MoleculeEvents.RaiseShowMessage("Error Loading Trajectory File: " + loadException, true); loadingTrajectory = false; yield break; } if (trajectory != null) { molecules[moleculeID].SetTrajectory(trajectory); MoleculeEvents.RaiseTrajectoryLoaded(moleculeID, filePath, trajectory.FrameCount()); } loadingTrajectory = false; }