{"action":"created","issue":{"url":"https://api.github.com/repos/acquaman/acquaman/issues/1703","labels_url":"https://api.github.com/repos/acquaman/acquaman/issues/1703/labels{/name}","comments_url":"https://api.github.com/repos/acquaman/acquaman/issues/1703/comments","events_url":"https://api.github.com/repos/acquaman/acquaman/issues/1703/events","html_url":"https://github.com/acquaman/acquaman/pull/1703","id":115395983,"number":1703,"title":"Pull Request: general ladder-type control","user":{"login":"helfrij","id":5216607,"avatar_url":"https://avatars.githubusercontent.com/u/5216607?v=3","gravatar_id":"","url":"https://api.github.com/users/helfrij","html_url":"https://github.com/helfrij","followers_url":"https://api.github.com/users/helfrij/followers","following_url":"https://api.github.com/users/helfrij/following{/other_user}","gists_url":"https://api.github.com/users/helfrij/gists{/gist_id}","starred_url":"https://api.github.com/users/helfrij/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/helfrij/subscriptions","organizations_url":"https://api.github.com/users/helfrij/orgs","repos_url":"https://api.github.com/users/helfrij/repos","events_url":"https://api.github.com/users/helfrij/events{/privacy}","received_events_url":"https://api.github.com/users/helfrij/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/acquaman/acquaman/labels/PR%20-%20Ready%20for%20Review","name":"PR - Ready for Review","color":"0052cc"}],"state":"open","locked":false,"assignee":{"login":"dretrex","id":602741,"avatar_url":"https://avatars.githubusercontent.com/u/602741?v=3","gravatar_id":"","url":"https://api.github.com/users/dretrex","html_url":"https://github.com/dretrex","followers_url":"https://api.github.com/users/dretrex/followers","following_url":"https://api.github.com/users/dretrex/following{/other_user}","gists_url":"https://api.github.com/users/dretrex/gists{/gist_id}","starred_url":"https://api.github.com/users/dretrex/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dretrex/subscriptions","organizations_url":"https://api.github.com/users/dretrex/orgs","repos_url":"https://api.github.com/users/dretrex/repos","events_url":"https://api.github.com/users/dretrex/events{/privacy}","received_events_url":"https://api.github.com/users/dretrex/received_events","type":"User","site_admin":false},"milestone":null,"comments":1,"created_at":"2015-11-05T23:07:19Z","updated_at":"2015-11-06T00:27:59Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/acquaman/acquaman/pulls/1703","html_url":"https://github.com/acquaman/acquaman/pull/1703","diff_url":"https://github.com/acquaman/acquaman/pull/1703.diff","patch_url":"https://github.com/acquaman/acquaman/pull/1703.patch"},"body":"The existing BioXASCarbonFilterFarmActuatorWindowControl (#1527) and the proposed diagnostic ladder control (#1689) seem to have some functionality in common:\r\n- are pseudomotors -- they translate feedback from a 'real' motor into new information.\r\n- have values based on a single control.\r\n- have enumerated values -- the value can be one of a set of discrete value options.\r\n\r\nIt would make both of these controls a little simpler (as well as any other controls with these properties) if there was a common ancestor that handled some of the tasks that each control has in common.\r\n\r\nSubclasses of this ancestor would be responsible for organizing and tracking their own value options, and would be required to provide:\r\n- createMoveAction(double)\r\n- updateValue()\r\n- generateEnumStates()\r\n- generateMoveEnumStates()\r\n- indexToControlSetpoint(int)\r\n\r\nI've implemented the ancestor as AMPseudoMotorLadderControl, and modified the existing BioXASCarbonFilterFarmActuatorWindowControl to inherit from it in this pull request.\r\n"},"comment":{"url":"https://api.github.com/repos/acquaman/acquaman/issues/comments/154243194","html_url":"https://github.com/acquaman/acquaman/pull/1703#issuecomment-154243194","issue_url":"https://api.github.com/repos/acquaman/acquaman/issues/1703","id":154243194,"user":{"login":"dretrex","id":602741,"avatar_url":"https://avatars.githubusercontent.com/u/602741?v=3","gravatar_id":"","url":"https://api.github.com/users/dretrex","html_url":"https://github.com/dretrex","followers_url":"https://api.github.com/users/dretrex/followers","following_url":"https://api.github.com/users/dretrex/following{/other_user}","gists_url":"https://api.github.com/users/dretrex/gists{/gist_id}","starred_url":"https://api.github.com/users/dretrex/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dretrex/subscriptions","organizations_url":"https://api.github.com/users/dretrex/orgs","repos_url":"https://api.github.com/users/dretrex/repos","events_url":"https://api.github.com/users/dretrex/events{/privacy}","received_events_url":"https://api.github.com/users/dretrex/received_events","type":"User","site_admin":false},"created_at":"2015-11-06T00:27:59Z","updated_at":"2015-11-06T00:27:59Z","body":"Overall, I think it looks good.  Definitely a good start.\r\n\r\nAs a pedantic detail, I would say that the name could be a bit more general.  To represent the abstraction, maybe something like `AMPseudoMotorEnumeratedControl` or something that showcases that this subclass is meant for enumerated pseudomotors.\r\n\r\nTime Estimate: 10 minutes"}}