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);
        }
コード例 #3
0
 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);
        }
コード例 #7
0
        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;
 }
コード例 #10
0
 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;
        }