From 75c78715610f8c0c752b976c3bc56eea03eef41e Mon Sep 17 00:00:00 2001 From: toshinagata1964 Date: Tue, 26 Jul 2011 15:54:43 +0000 Subject: [PATCH] Create New Parameter menu command is implemented. MoleculePrepareMDArena() is implmeneted in Molecule.c. Crash in RubyDialogFrame.cpp (sizeOfString) was fixed. git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/molby/trunk@79 a2be9bc6-48de-4e38-9406-05402d4bc13c --- Documents/etc/tutorial_5_01.png | Bin 35699 -> 38420 bytes Documents/src/doc_source.html | 7 +++ MolLib/MainView.h | 1 + MolLib/Molecule.c | 120 ++++++++++++++++++++++++++++++++++++++++ MolLib/Molecule.h | 2 + MolLib/Ruby_bind/ruby_md.c | 21 +++++++ wxSources/MoleculeView.cpp | 9 +++ wxSources/MyApp.cpp | 2 +- wxSources/MyApp.h | 2 +- wxSources/MyDocument.cpp | 109 ++++++++++++++++++++++++++++++------ wxSources/RubyDialogFrame.cpp | 10 ++-- 11 files changed, 261 insertions(+), 22 deletions(-) diff --git a/Documents/etc/tutorial_5_01.png b/Documents/etc/tutorial_5_01.png index 955ea3dfe50b0f1f1a0e04ffdd19802cc0867a14..1d937cf051f73cb6b117ae4238d7eb037543ec31 100644 GIT binary patch literal 38420 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 l+|J_9~#t|E>1hpyUpVP&4^vkt))ox5bfCC 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 literal 35699 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 table. The table is on the left side of the model window.

+

+Suppose we want to modify some properties of this molecule. This is ethyl benzoate, which has been built by (1) first creating benzene, and (2) then replacing one of the hydrogen with "COOCH2CH3". Of course there is nothing wrong with this molecule. However, when we look at the property table, we can point out several points that can be improved. First, the names of the atoms are so simple that we cannot guess which atom is what unless we carefully look at the table. Second, some of the atoms have the same name (like "C1" of atoms 0 and 11). Third, the "residue" name is only "RES" that is not informative. Fourth, the residue number (shown in the number after the residue name "RES") changes between the benzene ring and the carbonyl atom, however it should be more logical to assign the "benzoyl" (i.e. "C6H5CO") group as one residue and the ethoxy group as another. We will learn how to edit these points on the property table. +

+

2. Editing the atom property

+

+ +

diff --git a/MolLib/MainView.h b/MolLib/MainView.h index 3bdf663..e6b5861 100755 --- a/MolLib/MainView.h +++ b/MolLib/MainView.h @@ -241,6 +241,7 @@ STUB IntGroup *MainViewCallback_getTableSelection(MainView *mview); STUB void MainViewCallback_showTable(MainView *mview); STUB void MainViewCallback_hideTable(MainView *mview); STUB void MainViewCallback_ensureVisible(MainView *mview, int row); +STUB void MainViewCallback_startEditText(MainView *mview, int row, int column); /* Register the type definition */ //extern void MainView_register(PyObject *module); diff --git a/MolLib/Molecule.c b/MolLib/Molecule.c index 49d354e..3681bc3 100755 --- a/MolLib/Molecule.c +++ b/MolLib/Molecule.c @@ -3932,6 +3932,126 @@ MoleculeDump(Molecule *mol) } } +#pragma mark ====== MD support (including modification of Molecule) ====== + +/* Call md_prepare for the MDArena. If MDArena has not been created, a new arena is created. + If something goes wrong, returns 1 (for missing parameters) or -1 (more serious error). + If retmsg is not NULL, a message describing the problem is returned there. This message + must be free'd by the caller. */ +int +MoleculePrepareMDArena(Molecule *mol, int check_only, char **retmsg) +{ + const char *msg; + Int nangles, *angles, ndihedrals, *dihedrals, nimpropers, *impropers; + Int missing = 0; + IntGroup *ig1, *ig2, *ig3; + MDArena *arena = mol->arena; + + if (arena == NULL) { + md_arena_new(mol); + arena = mol->arena; + } else if (arena->xmol != mol) + md_arena_set_molecule(arena, mol); + + arena->is_initialized = 0; + + /* Rebuild the tables */ + ig1 = ig2 = ig3 = NULL; + nangles = MoleculeFindMissingAngles(mol, &angles); + ndihedrals = MoleculeFindMissingDihedrals(mol, &dihedrals); + nimpropers = MoleculeFindMissingImpropers(mol, &impropers); + if (nangles > 0) { + ig1 = IntGroupNewWithPoints(mol->nangles, nangles, -1); + MolActionCreateAndPerform(mol, gMolActionAddAngles, nangles * 3, angles, ig1); + free(angles); + IntGroupRelease(ig1); + } + if (ndihedrals > 0) { + ig2 = IntGroupNewWithPoints(mol->ndihedrals, ndihedrals, -1); + MolActionCreateAndPerform(mol, gMolActionAddDihedrals, ndihedrals * 4, dihedrals, ig2); + free(dihedrals); + IntGroupRelease(ig2); + } + if (nimpropers > 0) { + ig3 = IntGroupNewWithPoints(mol->nimpropers, nimpropers, -1); + MolActionCreateAndPerform(mol, gMolActionAddImpropers, nimpropers * 4, impropers, ig3); + free(impropers); + IntGroupRelease(ig3); + } + + /* Prepare parameters and internal information */ + msg = md_prepare(arena, check_only); + + /* Some parameters are missing? */ + if (msg != NULL) { + if (strstr(msg, "parameter") != NULL && strstr(msg, "missing") != NULL) + missing = 1; + else { + if (retmsg != NULL) + asprintf(retmsg, "cannot initialize for MD: %s", msg); + return -1; + } + } + + /* The local parameter list is updated */ + { + Int parType, idx; + if (mol->par == NULL) + mol->par = ParameterNew(); + for (parType = kFirstParType; parType <= kLastParType; parType++) { + /* Delete global and undefined parameters */ + UnionPar *up, *upbuf; + Int nparams, count; + ig1 = IntGroupNew(); + for (idx = 0; (up = ParameterGetUnionParFromTypeAndIndex(mol->par, parType, idx)) != NULL; idx++) { + if (up->bond.src != 0) + IntGroupAdd(ig1, idx, 1); + } + if (IntGroupGetCount(ig1) > 0) + MolActionCreateAndPerform(mol, gMolActionDeleteParameters, parType, ig1); + IntGroupRelease(ig1); + /* Copy global and undefined parameters from arena and insert to mol->par */ + nparams = ParameterGetCountForType(arena->par, parType); + if (nparams == 0) + continue; + upbuf = (UnionPar *)calloc(sizeof(UnionPar), nparams); + ig1 = IntGroupNew(); + ig2 = IntGroupNew(); + for (idx = 0; (up = ParameterGetUnionParFromTypeAndIndex(arena->par, parType, idx)) != NULL; idx++) { + if (up->bond.src > 0) + IntGroupAdd(ig1, idx, 1); /* Global parameter */ + else if (up->bond.src < 0) + IntGroupAdd(ig2, idx, 1); /* Undefined parameter */ + } + if ((count = IntGroupGetCount(ig1)) > 0) { + /* Insert global parameters (at the top) */ + ParameterCopy(arena->par, parType, upbuf, ig1); + ig3 = IntGroupNewWithPoints(0, count, -1); + MolActionCreateAndPerform(mol, gMolActionAddParameters, parType, ig3, count, upbuf); + IntGroupRelease(ig3); + } + if ((count = IntGroupGetCount(ig2)) > 0) { + /* Insert undefined parameters (at the bottom) */ + ParameterCopy(arena->par, parType, upbuf, ig2); + idx = ParameterGetCountForType(mol->par, parType); + ig3 = IntGroupNewWithPoints(idx, count, -1); + MolActionCreateAndPerform(mol, gMolActionAddParameters, parType, ig3, count, upbuf); + IntGroupRelease(ig3); + } + IntGroupRelease(ig2); + IntGroupRelease(ig1); + free(upbuf); + } + mol->needsMDRebuild = 0; /* We know the "modified" parameters are consistent with the MDArena */ + } + + if (missing) { + if (retmsg != NULL) + *retmsg = strdup(msg); + return 1; + } else return 0; +} + #pragma mark ====== Serialize ====== Molecule * diff --git a/MolLib/Molecule.h b/MolLib/Molecule.h index 76b24ef..febe533 100755 --- a/MolLib/Molecule.h +++ b/MolLib/Molecule.h @@ -350,6 +350,8 @@ int MoleculeWriteToDcdFile(Molecule *mp, const char *fname, char *errbuf, int er int MoleculeWriteToTepFile(Molecule *mp, const char *fname, char *errbuf, int errbufsize); void MoleculeDump(Molecule *mol); +int MoleculePrepareMDArena(Molecule *mol, int check_only, char **retmsg); + char *MoleculeSerialize(Molecule *mp, Int *outLength, Int *timep); Molecule *MoleculeDeserialize(const char *data, Int length, Int *timep); diff --git a/MolLib/Ruby_bind/ruby_md.c b/MolLib/Ruby_bind/ruby_md.c index 099706f..6eb55c4 100644 --- a/MolLib/Ruby_bind/ruby_md.c +++ b/MolLib/Ruby_bind/ruby_md.c @@ -161,6 +161,26 @@ static VALUE s_MDArena_Prepare(int argc, VALUE *argv, VALUE self) { MDArena *arena; + Int check_only = 0, status; + char *msg; + VALUE fval; + Data_Get_Struct(self, MDArena, arena); + rb_scan_args(argc, argv, "01", &fval); + if (RTEST(fval)) + check_only = 1; + status = MoleculePrepareMDArena(arena->xmol, check_only, &msg); + if (status < 0) { + /* Exception object is created first to have a chance to do free(msg) */ + VALUE exval = rb_exc_new2(rb_eMolbyError, msg); + free(msg); + rb_exc_raise(exval); + } else if (status > 0) { + free(msg); + return Qnil; + } else return self; + +#if 0 + MDArena *arena; Molecule *mol; const char *msg; Int nangles, *angles, ndihedrals, *dihedrals, nimpropers, *impropers; @@ -267,6 +287,7 @@ s_MDArena_Prepare(int argc, VALUE *argv, VALUE self) if (missing) return Qnil; else return self; +#endif } /* diff --git a/wxSources/MoleculeView.cpp b/wxSources/MoleculeView.cpp index 6cf0201..cfee3e4 100755 --- a/wxSources/MoleculeView.cpp +++ b/wxSources/MoleculeView.cpp @@ -1232,3 +1232,12 @@ MainViewCallback_ensureVisible(MainView *mview, int row) if (listctrl != NULL) listctrl->EnsureVisible(row); } + +void +MainViewCallback_startEditText(MainView *mview, int row, int column) +{ + MyListCtrl *listctrl = s_MyListCtrlFromMainView(mview); + if (listctrl != NULL) + listctrl->StartEditText(row, column); +} + diff --git a/wxSources/MyApp.cpp b/wxSources/MyApp.cpp index f4ef1f4..77b854c 100755 --- a/wxSources/MyApp.cpp +++ b/wxSources/MyApp.cpp @@ -353,7 +353,7 @@ MyApp::CreateMenuBar(int kind, wxMenu **out_file_history_menu, wxMenu **out_edit create_parameter_menu->Append(myMenuID_CreateNewDihedralParameter, _T("Dihedral")); create_parameter_menu->Append(myMenuID_CreateNewImproperParameter, _T("Improper")); create_parameter_menu->Append(myMenuID_CreateNewVdwPairParameter, _T("Vdw Pair")); - create_parameter_menu->Append(myMenuID_CreateNewVdwOffsetParameter, _T("Vdw Offset")); + create_parameter_menu->Append(myMenuID_CreateNewVdwCutoffParameter, _T("Vdw Cutoff")); edit_menu->Append(myMenuID_CreateNewAtom, _T("Create New Atom\tCtrl-I")); edit_menu->Append(myMenuID_CreateNewParameter, _T("Create New Parameter"), create_parameter_menu); edit_menu->AppendSeparator(); diff --git a/wxSources/MyApp.h b/wxSources/MyApp.h index 32cdb02..e2630fd 100755 --- a/wxSources/MyApp.h +++ b/wxSources/MyApp.h @@ -56,7 +56,7 @@ enum { myMenuID_CreateNewDihedralParameter = 110, myMenuID_CreateNewImproperParameter = 111, myMenuID_CreateNewVdwPairParameter = 112, - myMenuID_CreateNewVdwOffsetParameter = 113, + myMenuID_CreateNewVdwCutoffParameter = 113, myMenuID_AddHydrogen = 114, myMenuID_AddHydrogenSp3 = 115, myMenuID_AddHydrogenSp2 = 116, diff --git a/wxSources/MyDocument.cpp b/wxSources/MyDocument.cpp index da11306..896b0d1 100755 --- a/wxSources/MyDocument.cpp +++ b/wxSources/MyDocument.cpp @@ -74,7 +74,7 @@ BEGIN_EVENT_TABLE(MyDocument, wxDocument) EVT_MENU(wxID_CUT, MyDocument::OnCut) EVT_MENU(wxID_DELETE, MyDocument::OnDelete) EVT_MENU(myMenuID_CreateNewAtom, MyDocument::OnCreateNewAtom) - EVT_MENU_RANGE(myMenuID_CreateNewVdwParameter, myMenuID_CreateNewVdwOffsetParameter, MyDocument::OnCreateNewParameter) + EVT_MENU_RANGE(myMenuID_CreateNewVdwParameter, myMenuID_CreateNewVdwCutoffParameter, MyDocument::OnCreateNewParameter) EVT_MENU(wxID_SELECTALL, MyDocument::OnSelectAll) EVT_MENU(myMenuID_SelectFragment, MyDocument::OnSelectFragment) EVT_MENU(myMenuID_SelectReverse, MyDocument::OnSelectReverse) @@ -503,41 +503,118 @@ MyDocument::OnDelete(wxCommandEvent& event) void MyDocument::OnCreateNewAtom(wxCommandEvent &event) { - int idx; + Int idx, i, j, row; + char name[6]; IntGroup *ig = MoleculeGetSelection(mol); MainView *mview = GetMainView(); + Atom *ap, arec; + if (mview == NULL) return; - MainViewCallback_selectTable(mview, kMainViewAtomTableIndex); + + /* Make an atom name "Cxxx" */ + for (i = 0; i < 1000; i++) { + sprintf(name, "C%03d", i); + for (j = 0, ap = mol->atoms; j < mol->natoms; j++, ap = ATOM_NEXT(ap)) { + if (strncmp(ap->aname, name, 4) == 0) + break; + } + if (j >= mol->natoms) + break; + } + memset(&arec, 0, sizeof(arec)); + strncpy(arec.aname, name, 4); + arec.type = AtomTypeEncodeToUInt("c3"); + arec.element[0] = 'C'; + arec.atomicNumber = 6; + arec.weight = WeightForAtomicNumber(6); + arec.occupancy = 1.0; + if (ig != NULL && IntGroupGetCount(ig) > 0) { idx = IntGroupGetEndPoint(ig, IntGroupGetIntervalCount(ig) - 1); } else { idx = mol->natoms; } - MolActionCreateAndPerform(mol, SCRIPT_ACTION("si"), "create_atom", "", idx); + + if (MolActionCreateAndPerform(mol, gMolActionAddAnAtom, &arec, idx, &idx) != 0) + return; + + /* Show the atom table and select the newly created atom */ + MainViewCallback_selectTable(mview, kMainViewAtomTableIndex); ig = IntGroupNewWithPoints(idx, 1, -1); MoleculeSetSelection(mol, ig); IntGroupRelease(ig); - MainViewCallback_setNeedsDisplay(mview, 1); - MainViewCallback_reloadTableData(mview); - MainViewCallback_ensureVisible(mview, MainView_indexToTableRow(mview, idx)); + MainView_refreshTable(mview); + row = MainView_indexToTableRow(mview, idx); +/* MainViewCallback_ensureVisible(mview, row); */ /* Invoked from startEditText */ + MainViewCallback_startEditText(mview, row, 1); } void MyDocument::OnCreateNewParameter(wxCommandEvent &event) { -/* int uid = event.GetId(); - const char *type; + int uid = event.GetId(); + Int parType, n; + UnionPar ubuf; IntGroup *ig; + UInt ctype = AtomTypeEncodeToUInt("C"); + Double cweight = WeightForAtomicNumber(6); + memset(&ubuf, 0, sizeof(ubuf)); + ubuf.bond.src = -1; /* Undefined */ switch (uid) { - case myMenuID_CreateNewVdwParameter: type = "td"; break; - case myMenuID_AddHydrogenSp2: type = "tr"; break; - case myMenuID_AddHydrogenLinear: type = "li"; break; - case myMenuID_AddHydrogenPyramidal: type = "py"; break; - case myMenuID_AddHydrogenBent: type = "be"; break; - default: return; + case myMenuID_CreateNewVdwParameter: + parType = kVdwParType; + ubuf.vdw.type1 = ctype; + ubuf.vdw.atomicNumber = 6; + ubuf.vdw.weight = cweight; + break; + case myMenuID_CreateNewBondParameter: + parType = kBondParType; + ubuf.bond.type1 = ubuf.bond.type2 = ctype; + break; + case myMenuID_CreateNewAngleParameter: + parType = kAngleParType; + ubuf.angle.type1 = ubuf.angle.type2 = ubuf.angle.type3 = ctype; + break; + case myMenuID_CreateNewDihedralParameter: + parType = kDihedralParType; + ubuf.torsion.type1 = ubuf.torsion.type2 = ubuf.torsion.type3 = ubuf.torsion.type4 = ctype; + break; + case myMenuID_CreateNewImproperParameter: + parType = kImproperParType; + ubuf.torsion.type1 = ubuf.torsion.type2 = ubuf.torsion.type3 = ubuf.torsion.type4 = ctype; + break; + case myMenuID_CreateNewVdwPairParameter: + parType = kVdwPairParType; + ubuf.vdwp.type1 = ubuf.vdwp.type2 = ctype; + break; + case myMenuID_CreateNewVdwCutoffParameter: + parType = kVdwCutoffParType; + ubuf.vdwcutoff.n1 = ubuf.vdwcutoff.n2 = ctype; + break; + default: + return; + } + if (mol->par == NULL) { + char *errmsg; + if (MoleculePrepareMDArena(mol, 1, &errmsg) < 0) { + MyAppCallback_messageBox(errmsg, "MM/MD Setup Error", 1, 3); + free(errmsg); + return; + } + } + n = ParameterGetCountForType(mol->par, parType); + ig = IntGroupNewWithPoints(n, 1, -1); + MolActionCreateAndPerform(mol, gMolActionAddParameters, parType, ig, 1, &ubuf); + if (ParameterGetCountForType(mol->par, parType) == n + 1) { + /* Successful creation of the parameter */ + MainView *mview = GetMainView(); + Int row; + MainViewCallback_selectTable(mview, kMainViewParameterTableIndex); + MainView_refreshTable(mview); + row = ParameterTableGetRowFromTypeAndIndex(mol->par, parType, n); + MainViewCallback_startEditText(mview, row, 1); } - */ } void diff --git a/wxSources/RubyDialogFrame.cpp b/wxSources/RubyDialogFrame.cpp index 11385bd..b41cfcf 100644 --- a/wxSources/RubyDialogFrame.cpp +++ b/wxSources/RubyDialogFrame.cpp @@ -610,20 +610,22 @@ RubyDialogCallback_sizeOfString(RDItem *item, const char *s) RDSize size; wxCoord w, h, descent, leading; wxPaintDC dc((wxWindow *)item); - int len = strlen(s); - const char *s1, *s2; + int len; + const char *s1, *s2, *sfin; size.width = size.height = 0; s1 = (s == NULL || s[0] == 0 ? " " : s); + len = strlen(s1); + sfin = s1 + len; while (1) { s2 = strchr(s1, '\n'); if (s2 == NULL) - s2 = s + len; + s2 = sfin; wxString str(s1, wxConvUTF8, s2 - s1); dc.GetTextExtent(str, &w, &h, &descent, &leading); if (size.width < w) size.width = w; size.height += h + descent + leading; - if (s2 == s + len) + if (s2 >= sfin) break; s1 = s2 + 1; } -- 2.11.0