/// <summary> /// Handle a click on a link to a 3D structure & open in Vida /// If clicked from an XtraGrid give the user a range of options for the data /// to be exported. If clicked from a HTML page give limited options. /// </summary> /// <param name="mtName"></param> /// <param name="mcName"></param> /// <param name="url"></param> public void ClickFunction( string mtName, string mcName, string url) { ResultsFormatter fmtr = null; ResultsField rfld = null; //DataRowMx dr; StringMx sx; StreamWriter sw; int markedCount = 0; string densityMapUrl = null; string target = null; _currentMetaTable = mtName; _currentPdbColumnName = mcName; IncludeElectronDensityPyMol.Checked = false; MetaTable mt = MetaTableCollection.Get(mtName); if (mt == null) { return; } MetaColumn mc = mt.GetMetaColumnByName(mcName); if (mc == null) { return; } _xRay2Request = Lex.Contains(mtName, "XRay2"); // newer XRay2 database table? _urlFileName = Path.GetFileName(url); // extract file name from url QueryManager qm = ClickFunctions.CurrentClickQueryManager; if (qm != null) { Query q = qm.Query; ResultsFormat rf = qm.ResultsFormat; fmtr = qm.ResultsFormatter; rfld = rf.GetResultsField(mc); if (rfld == null) { return; } QueryTable qt = q.GetQueryTableByNameWithException(mtName); _qcProtein = qt.GetQueryColumnByNameWithException(mcName); if (_xRay2Request) // newer XRay2 database { string mapUrl = ""; if (mcName == "ALIGNED_SPLIT_COMPLEX_URL") { mapUrl = "ALIGNED_SPLIT_MAP_URL"; } else if (mcName == "ALIGNED_FULL_COMPLEX_URL") { mapUrl = "ALIGNED_FULL_MAP_URL"; } else if (mcName == "ORIGINAL_PDB_URL") { mapUrl = "ORIGINAL_MAP_URL"; } //{ mapUrl = "ORIGINAL_MAP_URL"; } _qcDensity = qt.GetQueryColumnByName(mapUrl); //("ALIGNED_SPLIT_MAP_URL"); if (_qcDensity != null && !_qcDensity.Selected) { _qcDensity = null; } _qcTarget = qt.GetQueryColumnByName("primary_gene_name_alias"); if (_qcTarget != null && !_qcTarget.Selected) { _qcTarget = null; } } if (_qcDensity != null) { // if there is a density map url located in the density column, enable the PyMol CheckEdit DataRowMx dr = qm.DataTable.Rows[qm.MoleculeGrid.LastMouseDownCellInfo.DataRowIndex]; densityMapUrl = Lex.ToString(dr[_qcDensity.VoPosition]); } else { // user did not select the map column, try to retrieve the XRay1 or Xray2 density map url fromt he metatable densityMapUrl = _xRay2Request ? GetXray2DensityMapUrl(url, qt.MetaTable.Name, mcName) : GetXray1DensityMapUrl(url, qt.MetaTable.Name); } // default checkbox to false so user does not load electron density maps everytime, since these take // extra time to load. IncludeElectronDensityPyMol.Checked = false; IncludeElectronDensityPyMol.Enabled = !string.IsNullOrEmpty(densityMapUrl); if (_qcProtein == null && _qcDensity == null) { throw new Exception("Neither the PDB nor the MAP column is selected in the query"); } markedCount = fmtr.MarkedRowCount; int unmarkedCount = fmtr.UnmarkedRowCount; if (markedCount == 0 || unmarkedCount == 0) // if no specific selection assume user wants single structure { ExportSingle.Checked = true; FileName.Text = _urlFileName; } else { ExportMarked.Checked = true; // assume wants marked structures } ExportMarked.Enabled = true; } else // simple setup for click from HTML display { ExportSingle.Checked = true; ExportMarked.Enabled = false; FileName.Text = _urlFileName; densityMapUrl = GetXray2DensityMapUrl(url, _currentMetaTable, mcName); target = GetTarget(url, _currentMetaTable, mcName); ////IncludeProtein.Enabled = IncludeElectronDensityEnabled = false; ////if (Lex.Eq(mcName, "bsl_xray_cmplx_url")) //// IncludeProtein.Checked = true; ////else if (Lex.Eq(mcName, "bsl_xray_edensity_url")) //// IncludeElectronDensityChecked = true; } if (mcName == "ALIGNED_SPLIT_MAP_URL" || mcName == "ALIGNED_FULL_MAP_URL" || mcName == "ORIGINAL_MAP_URL") // not viewable fileds { DisablePymol(); DisableMoe(); ExportToFile.Enabled = ExportToFile.Checked = true; } else if (mcName == "ALIGNED_FULL_COMPLEX_URL" || mcName == "ORIGINAL_PDB_URL" || mcName == "ALIGNED_SPLIT_COMPLEX_URL") // viewable by PyMol { EnableMoe(); EnablePymol(); ExportToFile.Enabled = true; ExportToFile.Checked = false; } else //everything else should be viewable by MOE { EnableMoe(); DisablePymol(); ExportToFile.Enabled = true; ExportToFile.Checked = false; } DialogResult dlgRslt = ShowDialog(SessionManager.ActiveForm); if (dlgRslt == DialogResult.Cancel) { return; } bool exportSingle = ExportSingle.Checked; bool exportMarked = !exportSingle; if (!IncludeElectronDensityPyMol.Checked) { densityMapUrl = null; } if (exportMarked) // see if reasonable count if exporting marked rows { string msg; if (markedCount == 0) { msg = "No rows have been marked for export"; MessageBoxMx.Show(msg, "Mobius", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } if (markedCount > 10) { msg = markedCount + " structures have been selected out export.\n" + "Are you sure these are the structures you want to export?"; dlgRslt = MessageBoxMx.Show(msg, "Mobius", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question); if (dlgRslt != DialogResult.Yes) { return; } } } // Export to PyMol (Schrodinger) - Collab with Paul Sprengeler and Ken Schwinn // Relavant Files: // 1. Plugin: CorpView.py (in Mobius config dir) // 2. Script: CorpView.pml - Runs the plugin and then passes in the .csv file (in Mobius config dir) // Expected content (note: <csv-file-name> gets replaced): // import pymol // pluginLocation = 'C:\Progra~1\PyMOL\PyMOL\modules\pmg_tk\startup\CorpView.py' // cmd.do('run ' + pluginLocation) // cmd.do('lv_create_environment') // cmd.do('lv_import_mobius <csv-file-name>') // cmd.do('lv_destroy_environment') // 3. Csv file: PyMolBatchLoad.csv - Csv file in format expected by plugin (in Mobius temp dir) if (ExportToPyMol.Checked) { ExportToPyMolMethod(url, densityMapUrl, target, qm); } else if (ExportToMOE.Checked) // Export to MOE { ExportToMOEMethod(url, qm, fmtr, rfld); } else { ExportToFilesMethod(url, qm, fmtr, rfld); } }