{"action":"created","issue":{"url":"https://api.github.com/repos/INCF/nineml/issues/72","labels_url":"https://api.github.com/repos/INCF/nineml/issues/72/labels{/name}","comments_url":"https://api.github.com/repos/INCF/nineml/issues/72/comments","events_url":"https://api.github.com/repos/INCF/nineml/issues/72/events","html_url":"https://github.com/INCF/nineml/issues/72","id":54654345,"number":72,"title":"Proposal for generic ConnectionRule syntax","user":{"login":"tclose","id":1054870,"avatar_url":"https://avatars.githubusercontent.com/u/1054870?v=3","gravatar_id":"","url":"https://api.github.com/users/tclose","html_url":"https://github.com/tclose","followers_url":"https://api.github.com/users/tclose/followers","following_url":"https://api.github.com/users/tclose/following{/other_user}","gists_url":"https://api.github.com/users/tclose/gists{/gist_id}","starred_url":"https://api.github.com/users/tclose/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tclose/subscriptions","organizations_url":"https://api.github.com/users/tclose/orgs","repos_url":"https://api.github.com/users/tclose/repos","events_url":"https://api.github.com/users/tclose/events{/privacy}","received_events_url":"https://api.github.com/users/tclose/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/INCF/nineml/labels/connectivity","name":"connectivity","color":"fbca04"},{"url":"https://api.github.com/repos/INCF/nineml/labels/dynamics","name":"dynamics","color":"5319e7"},{"url":"https://api.github.com/repos/INCF/nineml/labels/enhancement","name":"enhancement","color":"207de5"},{"url":"https://api.github.com/repos/INCF/nineml/labels/Priority","name":"Priority","color":"e11d21"},{"url":"https://api.github.com/repos/INCF/nineml/labels/standard%20extension","name":"standard extension","color":"bfd4f2"}],"state":"open","locked":false,"assignee":null,"milestone":{"url":"https://api.github.com/repos/INCF/nineml/milestones/3","html_url":"https://github.com/INCF/nineml/milestones/Version%202.0","labels_url":"https://api.github.com/repos/INCF/nineml/milestones/3/labels","id":827268,"number":3,"title":"Version 2.0","description":"","creator":{"login":"tclose","id":1054870,"avatar_url":"https://avatars.githubusercontent.com/u/1054870?v=3","gravatar_id":"","url":"https://api.github.com/users/tclose","html_url":"https://github.com/tclose","followers_url":"https://api.github.com/users/tclose/followers","following_url":"https://api.github.com/users/tclose/following{/other_user}","gists_url":"https://api.github.com/users/tclose/gists{/gist_id}","starred_url":"https://api.github.com/users/tclose/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tclose/subscriptions","organizations_url":"https://api.github.com/users/tclose/orgs","repos_url":"https://api.github.com/users/tclose/repos","events_url":"https://api.github.com/users/tclose/events{/privacy}","received_events_url":"https://api.github.com/users/tclose/received_events","type":"User","site_admin":false},"open_issues":22,"closed_issues":5,"state":"open","created_at":"2014-10-15T13:14:25Z","updated_at":"2015-04-04T01:48:24Z","due_on":null,"closed_at":null},"comments":10,"created_at":"2015-01-17T07:31:58Z","updated_at":"2015-04-04T09:07:22Z","closed_at":null,"body":"Since this is already written up in the v2.0 spec I sent around I will keep it short here (checkout my dev2.0 branch for the latest version with references to the related github issues). \r\n\r\nThe list of elements that would be valid within `ConnectionRule`\r\n* `ConnectCondition`\r\n* `SelectConnections`\r\n* `Alias`\r\n* `Constant`\r\n* `RandomVariable`\r\n* `Piecewise`\r\n\r\nof which only `ConnectCondition` and `SelectConnections` are specific to connection rules.\r\n\r\n`ConnectCondition` would contain a boolean math-inline expression, which determines whether a source and destination cell are \"provisionally\" connected (or non-provisionally if there isn't a `SelectConnections` element). The expression could be dependent on parameters of the `ConnectionRule` class, random variables, and properties and indices of the cells in the population class via ports. If `ConnectCondition` is not provided then all-to-all connections are connected.\r\n\r\nA subset of the provisionally connected connections (which would be all possible if `ConnectCondition` is not provided), can be selected via `SelectConnections` elements. Where a specific number (which can be derived from a random distribution) of connections are made either to a destination cell, from a source cell or in total. Connections can be placed in order of preference via a `Preference` expression, which evaluates to a real number and is sorted from lowest to highest. Otherwise if `Preference` is not provided the connections are chosen randomly from the provisionally connected connections. \r\n\r\nExplicit connections lists could be passed as a binary mask from a parameter straight into the `ConnectCondition`, although we would want to have sparse array support for external data files in place for this to be practical.\r\n\r\nMy thinking is that this should be generic enough to handle most connection rules, and more complex algorithms could be implemented via extensions if required. Let me know what you think.\r\n\r\n\r\n\r\n"},"comment":{"url":"https://api.github.com/repos/INCF/nineml/issues/comments/89532274","html_url":"https://github.com/INCF/nineml/issues/72#issuecomment-89532274","issue_url":"https://api.github.com/repos/INCF/nineml/issues/72","id":89532274,"user":{"login":"mdjurfeldt","id":3612425,"avatar_url":"https://avatars.githubusercontent.com/u/3612425?v=3","gravatar_id":"","url":"https://api.github.com/users/mdjurfeldt","html_url":"https://github.com/mdjurfeldt","followers_url":"https://api.github.com/users/mdjurfeldt/followers","following_url":"https://api.github.com/users/mdjurfeldt/following{/other_user}","gists_url":"https://api.github.com/users/mdjurfeldt/gists{/gist_id}","starred_url":"https://api.github.com/users/mdjurfeldt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mdjurfeldt/subscriptions","organizations_url":"https://api.github.com/users/mdjurfeldt/orgs","repos_url":"https://api.github.com/users/mdjurfeldt/repos","events_url":"https://api.github.com/users/mdjurfeldt/events{/privacy}","received_events_url":"https://api.github.com/users/mdjurfeldt/received_events","type":"User","site_admin":false},"created_at":"2015-04-04T09:07:22Z","updated_at":"2015-04-04T09:07:22Z","body":"A, sorry, I forgot one comment: Yes, CSA can be complex for\nnon-mathematicians.  It simply cannot be the only way to describe\nconnectivity.\n\nOn Sat, Apr 4, 2015 at 11:04 AM, Mikael Djurfeldt <mikael@djurfeldt.com>\nwrote:\n\n> On Sat, Apr 4, 2015 at 5:30 AM, Tom Close <notifications@github.com>\n> wrote:\n>\n>> I had a brief look at the 2012 CSA paper again (\n>> http://link.springer.com/article/10.1007%2Fs12021-012-9146-1) and\n>> reminded myself why I didn't think it would be a good fit for our purposes.\n>> If I understand it correctly (which I may not) all connections are built\n>> out of the following primitives (plus set and arithmetic operations)\n>>\n>>    - Random ρ ̄\n>>    - Disc mask D(r)\n>>    - Threshold θ\n>>    - Gaussian φ(σ,c)\n>>    - Sample ρ\n>>    - Block\n>>    - Random selection ρN\n>>    - Summing operator S\n>>\n>> which doesn't appear to cover all the cases we will need. For example,\n>> the distance based metric can't handle ellipse or box-shaped connectivity\n>> patterns (which appear frequently in our models in the lab), and the random\n>> selection operator cannot preference particular connections over others.\n>>\n> Hi Tom,\n>\n> I don't want to interfer in the committees discussion, but let me clarify\n> this a bit: The way I see CSA is as a promising approach to describe\n> connectivity rather than a standard with a definite set of operators---at\n> least currently.  What I did in the 2012 paper was to present the CSA\n> approach. In order to identify a core set of operators it will be necessary\n> to apply CSA to a broad range of models and also to listen to feedback from\n> people using CSA.  It wouldn't have made sense to try to imagine a closed\n> set of CSA operators without that actual hands-on experience with the\n> models.  Instead the paper shows, in the discussion, how new operators can\n> easily and naturally be defined to increase the expressiveness. Of course,\n> it will ultimately be possible to propose a core set of operators, though.\n> (As you surely understand, it wouldn't be a big deal to include\n> multivariate distributions and boxes are included given the right metric.)\n>\n> To summarize: Is CSA currently a well-constrained standard language to\n> express connectivity given a limited set of operators? No.  Could there be\n> such a language, based on CSA, in the future? Yes.\n>\n>> I also find the examples a little complex for non-mathematicians. For an\n>> example, have a look at the \"Patchy Connectivity\" section in the discussion\n>> of the paper. This example also appears to be defining the positions of the\n>> destination cells, which would make more sense for us to do within the\n>> population, so the mapping from CSA -> ConnectionRuleClass may not be\n>> all that clean either.\n>>\n> Not sure what you mean here, because one complex use of CSA shouldn't\n> really cast a shadow over CSA in general. What is important is how CSA\n> compares with other formalisms for the *same* examples, right?\n>\n> This example demonstrates how one can compute with geometry functions and\n> metrics to concisely describe complex geometry. It is also not necessarily\n> the only way to express this connectivity in CSA. Also, no, the example\n> does not define the positions of the destination cells. They are given by\n> the geometry function g-hat, which could be provided by the population\n> construct.\n>\n> Best regards,\n> Mikael\n> —\n>\n>> Reply to this email directly or view it on GitHub\n>> <https://github.com/INCF/nineml/issues/72#issuecomment-89493486>.\n>>\n>\n>\n"}}