Icon representing a recipe

Recipe: Scoremod Pre-Alpha

created by man_the_stan

Profile


Name
Scoremod Pre-Alpha
ID
108613
Shared with
Public
Parent
None
Children
Created on
March 23, 2024 at 22:27 PM UTC
Updated on
March 23, 2024 at 22:28 PM UTC
Description

Easily change/reset score importances and enable/disable filters

Best for


Code


--[[ Scoremod Pre-Alpha release TODO: Add the ability to save/load at least two different sets of parameter values RESET... button should give the option to reset sliders to current values vs default values (currently just reverts all to default) Type & signature annotations Version-aware reuse of code between recipes --]] if not _scoremod_data then _scoremod_data = { origParams = {}, paramNames = { "Clash", "BackboneHBond", "SidechainHBond", "Packing", "Hiding", "Pairwise", "Density", "!FiltersDisabled", "!WigglePower" }, ---@param str string # parameter name (with optional "!" prefix to disable "Importance" suffixing) ---@param prefix string ---|"'Get'" # Get function (takes no arguments) ---|"'Set'" # Set function (takes a single argument) ---@return string paramFcn paramFcn = function(str, prefix) return prefix .. (string.byte(str) == 33 and string.sub(str, 2) or (str .. "Importance")) end, wiggleLetterToNum = function(str) return str == "l" and 1 or str == "m" and 2 or str == "h" and 3 or 0 end, wiggleNumToLetter = function(num) return select(num + 1, "a", "l", "m", "h") end } for _, str in ipairs(_scoremod_data.paramNames) do _scoremod_data.origParams[str] = behavior[_scoremod_data.paramFcn(str, "Get")]() end _scoremod_data.CreateDialog = function(paramNames, params, show) paramNames = paramNames and paramNames or _scoremod_data.paramNames params = params and params or {} local dia = dialog.CreateDialog("Scoremod") dia.ImportanceLabel = dialog.AddLabel("Importance Parameters") for _, str in ipairs(paramNames) do --[[if str == "!SetFiltersDisabledbled" then dia[str] = dialog.AddCheckbox("Disable filters", params[str] and params[str] or behavior.GetFiltersDisabled()) elseif str == "!WigglePower" then dia[str] = dialog.AddSlider("Wiggle power (0=auto)", 0, behavior.HighPowerAllowed() and 3 or 2, 0, _scoremod_data.wiggleLetterToNum(params[str] and params[str] or behavior.GetWigglePower())) else --]] if string.byte(str) ~= 33 then dia[str] = dialog.AddSlider(str, params[str] and params[str] or behavior[_scoremod_data.paramFcn(str, "Get")](), 0, str == "Clash" and 1 or 3, 2) end end dia.OtherLabel = dialog.AddLabel("Other parameters") dia["!FiltersDisabled"] = dialog.AddCheckbox("Disable filters", params["!FiltersDisabled"] and params["!FiltersDisabled"] or behavior.GetFiltersDisabled()) dia["!WigglePower"] = dialog.AddSlider("Wig pwr (0=auto)", _scoremod_data.wiggleLetterToNum(params["!WigglePower"] and params["!WigglePower"] or behavior.GetWigglePower()), 0, behavior.HighPowerAllowed() and 3 or 2, 0) dia.Apply = dialog.AddButton("Apply", 3) dia.Set = dialog.AddButton("Set", 2) dia.Reset = dialog.AddButton("Reset...", 1) dia.Cancel = dialog.AddButton("Cancel", 0) if show then return dialog.Show(dia) else return dia end end ---@param resp integer _scoremod_data.HandleDialogResponse = function(resp, params, dia) if resp == 1 then -- Reset; TODO for _, str in ipairs(_scoremod_data.paramNames) do if string.byte(str) ~= 33 then -- behavior[_scoremod_data.paramFcn(str, "Set")](1.00) params[str] = 1.00 elseif str == "!WigglePower" then -- behavior.SetWigglePower("a") params[str] = "a" else -- behavior.SetFiltersDisabled(false) -- TODO params[str] = false end -- if scoremod_data.origParams[str] then -- behavior[_scoremod_data.paramFcn(str, "Set")](_scoremod_data.origParams[str]) -- end end return true, params elseif resp == 2 or resp == 3 then -- Set/Apply if not dia then for str, val in pairs(params) do if string.byte(str) ~= 95 then -- print(_scoremod_data.paramFcn(str, "Set")) behavior[_scoremod_data.paramFcn(str, "Set")](val) end end else for _, str in ipairs(_scoremod_data.paramNames) do if dia[str] then local val = str == "!WigglePower" and _scoremod_data.wiggleNumToLetter(dia[str].value) or dia[str].value behavior[_scoremod_data.paramFcn(str, "Set")](val) end end end return resp==3, params else -- Cancel return nil, params end end _scoremod_data.GatherDialogValues = function(dia) local ret = {} for _, str in ipairs(_scoremod_data.paramNames) do if dia[str] then ret[str] = str == "!WigglePower" and _scoremod_data.wiggleNumToLetter(dia[str].value) or dia[str].value end -- TODO: else? end return ret end end -- TODO: Presets? do local params, dontExit repeat local dia = _scoremod_data.CreateDialog(nil, params) local resp = dialog.Show(dia) params = _scoremod_data.GatherDialogValues(dia) for k,v in pairs(params) do print(k,v) end dontExit, params = _scoremod_data.HandleDialogResponse(resp, params) until not dontExit end

Comments