{"action":"created","comment":{"url":"https://api.github.com/repos/BlueBrain/Brion/pulls/comments/45742351","id":45742351,"diff_hunk":"@@ -0,0 +1,263 @@\n+\n+/* Copyright (c) 2013-2015, EPFL/Blue Brain Project\n+ *                          Juan Hernando <jhernando@fi.upm.es>\n+ *\n+ * This file is part of Brion <https://github.com/BlueBrain/Brion>\n+ *\n+ * This library is free software; you can redistribute it and/or modify it under\n+ * the terms of the GNU Lesser General Public License version 3.0 as published\n+ * by the Free Software Foundation.\n+ *\n+ * This library is distributed in the hope that it will be useful, but WITHOUT\n+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n+ * FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more\n+ * details.\n+ *\n+ * You should have received a copy of the GNU Lesser General Public License\n+ * along with this library; if not, write to the Free Software Foundation, Inc.,\n+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\n+ */\n+\n+#include \"morphology.h\"\n+\n+#include <brion/morphology.h>\n+#include <brion/circuit.h>\n+\n+#include <lunchbox/log.h>\n+\n+#include <bitset>\n+\n+#include <math.h>\n+\n+namespace brain\n+{\n+\n+namespace\n+{\n+    void nullDeleter( const brion::Morphology* ) {}\n+}\n+\n+class Morphology::Impl\n+{\n+public:\n+    boost::shared_ptr< const brion::Morphology > _morphology;\n+\n+    brion::Vector4fsPtr _points;\n+    brion::Vector2isPtr _sections;\n+    brion::SectionTypesPtr _types;\n+    brion::Vector2isPtr _apicals;\n+\n+    bool _isGlobal;\n+    brion::Vector3f _somaPosition;\n+\n+    Impl( const boost::shared_ptr< const brion::Morphology >& morphology,\n+          const brion::MorphologyRepairStage stage )\n+        : _morphology( morphology )\n+        , _points( morphology->readPoints( stage ))\n+        , _sections( morphology->readSections( stage ))\n+        , _types( morphology->readSectionTypes( ))\n+        , _apicals( morphology->readApicals( ))\n+        , _isGlobal( false )\n+        , _somaPosition( brion::Vector3f::ZERO ) // the soma is assumed to be\n+                                                 // centered at the 0, 0, 0\n+    {\n+    }\n+\n+    brion::uint32_ts getSectionIDs( const brion::SectionTypes& types ) const\n+    {\n+        std::bitset< brion::SECTION_APICAL_DENDRITE > bits;\n+        for( brion::SectionTypes::const_iterator i = types.begin();\n+             i != types.end(); ++i )\n+        {\n+            bits[size_t( *i )] = true;\n+        }\n+\n+        brion::uint32_ts result;\n+        for( uint32_t i = 0; i != _types->size(); ++i )\n+        {\n+            const brion::SectionType type = ( *_types )[i];\n+            if( type > brion::SECTION_APICAL_DENDRITE + 1 )\n+                LBWARN << \"Unknown section type \" << int(type) << std::endl;\n+            else\n+                if( bits[size_t( type )] )\n+                    result.push_back( i );\n+        }\n+        return result;\n+    }\n+\n+    brion::Vector4fs getSectionSamples( const size_t sectionID,\n+                                        const brion::floats& points ) const\n+    {\n+        // If the section is the soma return directly the soma position.\n+        if(( *_types )[sectionID] == brion::SECTION_SOMA )\n+        {\n+            brion::Vector4fs result;\n+            for( size_t i = 0; i != points.size(); ++i )\n+                result.push_back( _somaPosition );\n+            return result;\n+        }\n+\n+        const size_t start = ( *_sections )[sectionID][0];\n+        const size_t end = sectionID == _sections->size() - 1 ?\n+            _points->size() : ( *_sections )[sectionID + 1][0];\n+\n+        brion::Vector4fs result;\n+\n+        if( end <= start )\n+        {\n+            LBWARN << \"Trying to sample broken morphology or empty section \"\n+                   << sectionID << std::endl;\n+            return result;\n+        }\n+        // Dealing with the degenerate case of single point sections\n+        if( start + 1 == end )\n+            for( size_t i = 0; i != points.size(); ++i)\n+                result.push_back(( *_points )[start] );\n+\n+        // Computing the accumulated length at each segment of the section\n+        brion::floats accumLengths;\n+        accumLengths.push_back(0);\n+        for( size_t i = start; i != end - 1; ++i )\n+        {\n+            const brion::Vector4f& segmentStart = ( *_points )[i];\n+            const brion::Vector4f& segmentEnd = ( *_points )[i + 1];\n+            accumLengths.push_back( accumLengths.back() +\n+                                    ( segmentEnd - segmentStart ).length( ));\n+        }\n+        const float totalLength = accumLengths.back();\n+\n+        for( brion::floats::const_iterator i = points.begin();\n+             i != points.end(); ++i )\n+        {\n+            // Finding the segment the requested sampling position falls in\n+            float length = std::max( 0.f, std::min( 1.f, *i )) * totalLength;\n+            size_t index = 0;\n+            while( accumLengths[index + 1] < length &&\n+                   index < accumLengths.size() - 1 )\n+                ++index;\n+\n+            // Interpolating the point\n+            const float alpha = ( length - accumLengths[index] ) /\n+                              ( accumLengths[index + 1] - accumLengths[index] );\n+            const brion::Vector4f sample =\n+                ( *_points )[start + index + 1] * alpha +\n+                ( *_points )[start + index] * (1 - alpha );\n+            result.push_back( sample );\n+        }\n+\n+        return result;\n+    }\n+\n+    void transform( const brion::Matrix4f& transformation )\n+    {\n+        brion::Vector4fs& points = *_points;\n+        #pragma omp parallel for\n+        for( size_t i = 0; i < _points->size(); ++i)\n+        {\n+            brion::Vector4f& p = points[i];\n+            const brion::Vector3f pp = transformation * p.get_sub_vector< 3 >();\n+            p.get_sub_vector< 3 >() = pp;\n+        }\n+        _somaPosition = transformation * _somaPosition;\n+    }\n+};\n+\n+Morphology::Morphology( const std::string& source,\n+                        const brion::MorphologyRepairStage stage )\n+    : _impl( new Impl( brion::MorphologyPtr( new brion::Morphology( source )),\n+                       stage ))\n+{\n+}\n+\n+Morphology::Morphology( const brion::Morphology& morphology ,\n+                        const brion::MorphologyRepairStage stage )\n+    : _impl( new Impl( boost::shared_ptr< const brion::Morphology >(\n+                           &morphology, nullDeleter ),\n+                       stage ))\n+{\n+}\n+\n+Morphology::Morphology( const brion::MorphologyPtr& morphology,\n+                        const brion::MorphologyRepairStage stage )\n+    : _impl( new Impl( morphology, stage ))\n+{\n+}\n+\n+Morphology::~Morphology()\n+{\n+    delete _impl;\n+}\n+\n+const brion::Vector4fs& Morphology::getPoints() const\n+{\n+    return *_impl->_points;\n+}\n+\n+const brion::Vector2is& Morphology::getSections() const\n+{\n+    return *_impl->_sections;\n+}\n+\n+const brion::SectionTypes& Morphology::getSectionTypes() const\n+{\n+    return *_impl->_types;\n+}\n+\n+const brion::Vector2is& Morphology::getApicals() const\n+{\n+    return *_impl->_apicals;\n+}\n+\n+brion::uint32_ts Morphology::getSectionIDs(\n+    const brion::SectionTypes& types ) const\n+{\n+    return _impl->getSectionIDs( types );\n+}\n+\n+brion::Vector4fs Morphology::getSectionSamples(\n+    const size_t sectionID, const brion::floats& points ) const\n+{\n+    return _impl->getSectionSamples( sectionID, points );\n+}\n+\n+void Morphology::transform( const brion::Circuit& circuit, const uint32_t gid )\n+{\n+    if( _impl->_isGlobal )\n+        throw std::logic_error(\n+            \"Trying to transform an already transformed morphology\" );\n+\n+    brion::GIDSet set;\n+    set.insert( gid );\n+\n+    const brion::NeuronMatrix& data = circuit.get(\n+        set, brion::NEURON_POSITION_X | brion::NEURON_POSITION_Y |\n+             brion::NEURON_POSITION_Z | brion::NEURON_ROTATION );\n+\n+    brion::Matrix4f matrix( brion::Matrix4f::IDENTITY );\n+    matrix.rotate( boost::lexical_cast< float >( data[0][3] ) * ( M_PI/180.0f ),\n+                   brion::Vector3f( 0, 1, 0 ));\n+    matrix.set_translation(\n+        brion::Vector3f( boost::lexical_cast< float >( data[0][0] ),","path":"brain/morphology.cpp","position":240,"original_position":240,"commit_id":"9034b966d212a2413ed800e565fe8634386ed120","original_commit_id":"9034b966d212a2413ed800e565fe8634386ed120","user":{"login":"bilgili","id":1157568,"avatar_url":"https://avatars.githubusercontent.com/u/1157568?v=3","gravatar_id":"","url":"https://api.github.com/users/bilgili","html_url":"https://github.com/bilgili","followers_url":"https://api.github.com/users/bilgili/followers","following_url":"https://api.github.com/users/bilgili/following{/other_user}","gists_url":"https://api.github.com/users/bilgili/gists{/gist_id}","starred_url":"https://api.github.com/users/bilgili/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bilgili/subscriptions","organizations_url":"https://api.github.com/users/bilgili/orgs","repos_url":"https://api.github.com/users/bilgili/repos","events_url":"https://api.github.com/users/bilgili/events{/privacy}","received_events_url":"https://api.github.com/users/bilgili/received_events","type":"User","site_admin":false},"body":"throw needed ?","created_at":"2015-11-24T14:37:35Z","updated_at":"2015-11-24T14:37:35Z","html_url":"https://github.com/BlueBrain/Brion/pull/29#discussion_r45742351","pull_request_url":"https://api.github.com/repos/BlueBrain/Brion/pulls/29","_links":{"self":{"href":"https://api.github.com/repos/BlueBrain/Brion/pulls/comments/45742351"},"html":{"href":"https://github.com/BlueBrain/Brion/pull/29#discussion_r45742351"},"pull_request":{"href":"https://api.github.com/repos/BlueBrain/Brion/pulls/29"}}},"pull_request":{"url":"https://api.github.com/repos/BlueBrain/Brion/pulls/29","id":51233409,"html_url":"https://github.com/BlueBrain/Brion/pull/29","diff_url":"https://github.com/BlueBrain/Brion/pull/29.diff","patch_url":"https://github.com/BlueBrain/Brion/pull/29.patch","issue_url":"https://api.github.com/repos/BlueBrain/Brion/issues/29","number":29,"state":"open","locked":false,"title":"Additions required by Fivox","user":{"login":"hernando","id":791427,"avatar_url":"https://avatars.githubusercontent.com/u/791427?v=3","gravatar_id":"","url":"https://api.github.com/users/hernando","html_url":"https://github.com/hernando","followers_url":"https://api.github.com/users/hernando/followers","following_url":"https://api.github.com/users/hernando/following{/other_user}","gists_url":"https://api.github.com/users/hernando/gists{/gist_id}","starred_url":"https://api.github.com/users/hernando/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hernando/subscriptions","organizations_url":"https://api.github.com/users/hernando/orgs","repos_url":"https://api.github.com/users/hernando/repos","events_url":"https://api.github.com/users/hernando/events{/privacy}","received_events_url":"https://api.github.com/users/hernando/received_events","type":"User","site_admin":false},"body":"","created_at":"2015-11-19T15:04:13Z","updated_at":"2015-11-24T14:37:35Z","closed_at":null,"merged_at":null,"merge_commit_sha":"ee79f1ac8928462df01a6999236d4462f28cf030","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/BlueBrain/Brion/pulls/29/commits","review_comments_url":"https://api.github.com/repos/BlueBrain/Brion/pulls/29/comments","review_comment_url":"https://api.github.com/repos/BlueBrain/Brion/pulls/comments{/number}","comments_url":"https://api.github.com/repos/BlueBrain/Brion/issues/29/comments","statuses_url":"https://api.github.com/repos/BlueBrain/Brion/statuses/9034b966d212a2413ed800e565fe8634386ed120","head":{"label":"hernando:fivox","ref":"fivox","sha":"9034b966d212a2413ed800e565fe8634386ed120","user":{"login":"hernando","id":791427,"avatar_url":"https://avatars.githubusercontent.com/u/791427?v=3","gravatar_id":"","url":"https://api.github.com/users/hernando","html_url":"https://github.com/hernando","followers_url":"https://api.github.com/users/hernando/followers","following_url":"https://api.github.com/users/hernando/following{/other_user}","gists_url":"https://api.github.com/users/hernando/gists{/gist_id}","starred_url":"https://api.github.com/users/hernando/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hernando/subscriptions","organizations_url":"https://api.github.com/users/hernando/orgs","repos_url":"https://api.github.com/users/hernando/repos","events_url":"https://api.github.com/users/hernando/events{/privacy}","received_events_url":"https://api.github.com/users/hernando/received_events","type":"User","site_admin":false},"repo":{"id":36439822,"name":"Brion","full_name":"hernando/Brion","owner":{"login":"hernando","id":791427,"avatar_url":"https://avatars.githubusercontent.com/u/791427?v=3","gravatar_id":"","url":"https://api.github.com/users/hernando","html_url":"https://github.com/hernando","followers_url":"https://api.github.com/users/hernando/followers","following_url":"https://api.github.com/users/hernando/following{/other_user}","gists_url":"https://api.github.com/users/hernando/gists{/gist_id}","starred_url":"https://api.github.com/users/hernando/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hernando/subscriptions","organizations_url":"https://api.github.com/users/hernando/orgs","repos_url":"https://api.github.com/users/hernando/repos","events_url":"https://api.github.com/users/hernando/events{/privacy}","received_events_url":"https://api.github.com/users/hernando/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/hernando/Brion","description":"Blue Brain C++ File IO Library","fork":true,"url":"https://api.github.com/repos/hernando/Brion","forks_url":"https://api.github.com/repos/hernando/Brion/forks","keys_url":"https://api.github.com/repos/hernando/Brion/keys{/key_id}","collaborators_url":"https://api.github.com/repos/hernando/Brion/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/hernando/Brion/teams","hooks_url":"https://api.github.com/repos/hernando/Brion/hooks","issue_events_url":"https://api.github.com/repos/hernando/Brion/issues/events{/number}","events_url":"https://api.github.com/repos/hernando/Brion/events","assignees_url":"https://api.github.com/repos/hernando/Brion/assignees{/user}","branches_url":"https://api.github.com/repos/hernando/Brion/branches{/branch}","tags_url":"https://api.github.com/repos/hernando/Brion/tags","blobs_url":"https://api.github.com/repos/hernando/Brion/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/hernando/Brion/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/hernando/Brion/git/refs{/sha}","trees_url":"https://api.github.com/repos/hernando/Brion/git/trees{/sha}","statuses_url":"https://api.github.com/repos/hernando/Brion/statuses/{sha}","languages_url":"https://api.github.com/repos/hernando/Brion/languages","stargazers_url":"https://api.github.com/repos/hernando/Brion/stargazers","contributors_url":"https://api.github.com/repos/hernando/Brion/contributors","subscribers_url":"https://api.github.com/repos/hernando/Brion/subscribers","subscription_url":"https://api.github.com/repos/hernando/Brion/subscription","commits_url":"https://api.github.com/repos/hernando/Brion/commits{/sha}","git_commits_url":"https://api.github.com/repos/hernando/Brion/git/commits{/sha}","comments_url":"https://api.github.com/repos/hernando/Brion/comments{/number}","issue_comment_url":"https://api.github.com/repos/hernando/Brion/issues/comments{/number}","contents_url":"https://api.github.com/repos/hernando/Brion/contents/{+path}","compare_url":"https://api.github.com/repos/hernando/Brion/compare/{base}...{head}","merges_url":"https://api.github.com/repos/hernando/Brion/merges","archive_url":"https://api.github.com/repos/hernando/Brion/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/hernando/Brion/downloads","issues_url":"https://api.github.com/repos/hernando/Brion/issues{/number}","pulls_url":"https://api.github.com/repos/hernando/Brion/pulls{/number}","milestones_url":"https://api.github.com/repos/hernando/Brion/milestones{/number}","notifications_url":"https://api.github.com/repos/hernando/Brion/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/hernando/Brion/labels{/name}","releases_url":"https://api.github.com/repos/hernando/Brion/releases{/id}","created_at":"2015-05-28T13:23:07Z","updated_at":"2015-05-28T13:23:07Z","pushed_at":"2015-11-24T13:57:46Z","git_url":"git://github.com/hernando/Brion.git","ssh_url":"git@github.com:hernando/Brion.git","clone_url":"https://github.com/hernando/Brion.git","svn_url":"https://github.com/hernando/Brion","homepage":"http://bluebrain.github.io/","size":277,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"BlueBrain:master","ref":"master","sha":"d1f9c43927bee4c0f3c88cdcc06d52515b9efc5e","user":{"login":"BlueBrain","id":1479142,"avatar_url":"https://avatars.githubusercontent.com/u/1479142?v=3","gravatar_id":"","url":"https://api.github.com/users/BlueBrain","html_url":"https://github.com/BlueBrain","followers_url":"https://api.github.com/users/BlueBrain/followers","following_url":"https://api.github.com/users/BlueBrain/following{/other_user}","gists_url":"https://api.github.com/users/BlueBrain/gists{/gist_id}","starred_url":"https://api.github.com/users/BlueBrain/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/BlueBrain/subscriptions","organizations_url":"https://api.github.com/users/BlueBrain/orgs","repos_url":"https://api.github.com/users/BlueBrain/repos","events_url":"https://api.github.com/users/BlueBrain/events{/privacy}","received_events_url":"https://api.github.com/users/BlueBrain/received_events","type":"Organization","site_admin":false},"repo":{"id":35547993,"name":"Brion","full_name":"BlueBrain/Brion","owner":{"login":"BlueBrain","id":1479142,"avatar_url":"https://avatars.githubusercontent.com/u/1479142?v=3","gravatar_id":"","url":"https://api.github.com/users/BlueBrain","html_url":"https://github.com/BlueBrain","followers_url":"https://api.github.com/users/BlueBrain/followers","following_url":"https://api.github.com/users/BlueBrain/following{/other_user}","gists_url":"https://api.github.com/users/BlueBrain/gists{/gist_id}","starred_url":"https://api.github.com/users/BlueBrain/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/BlueBrain/subscriptions","organizations_url":"https://api.github.com/users/BlueBrain/orgs","repos_url":"https://api.github.com/users/BlueBrain/repos","events_url":"https://api.github.com/users/BlueBrain/events{/privacy}","received_events_url":"https://api.github.com/users/BlueBrain/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/BlueBrain/Brion","description":"Blue Brain C++ File IO Library","fork":false,"url":"https://api.github.com/repos/BlueBrain/Brion","forks_url":"https://api.github.com/repos/BlueBrain/Brion/forks","keys_url":"https://api.github.com/repos/BlueBrain/Brion/keys{/key_id}","collaborators_url":"https://api.github.com/repos/BlueBrain/Brion/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/BlueBrain/Brion/teams","hooks_url":"https://api.github.com/repos/BlueBrain/Brion/hooks","issue_events_url":"https://api.github.com/repos/BlueBrain/Brion/issues/events{/number}","events_url":"https://api.github.com/repos/BlueBrain/Brion/events","assignees_url":"https://api.github.com/repos/BlueBrain/Brion/assignees{/user}","branches_url":"https://api.github.com/repos/BlueBrain/Brion/branches{/branch}","tags_url":"https://api.github.com/repos/BlueBrain/Brion/tags","blobs_url":"https://api.github.com/repos/BlueBrain/Brion/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/BlueBrain/Brion/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/BlueBrain/Brion/git/refs{/sha}","trees_url":"https://api.github.com/repos/BlueBrain/Brion/git/trees{/sha}","statuses_url":"https://api.github.com/repos/BlueBrain/Brion/statuses/{sha}","languages_url":"https://api.github.com/repos/BlueBrain/Brion/languages","stargazers_url":"https://api.github.com/repos/BlueBrain/Brion/stargazers","contributors_url":"https://api.github.com/repos/BlueBrain/Brion/contributors","subscribers_url":"https://api.github.com/repos/BlueBrain/Brion/subscribers","subscription_url":"https://api.github.com/repos/BlueBrain/Brion/subscription","commits_url":"https://api.github.com/repos/BlueBrain/Brion/commits{/sha}","git_commits_url":"https://api.github.com/repos/BlueBrain/Brion/git/commits{/sha}","comments_url":"https://api.github.com/repos/BlueBrain/Brion/comments{/number}","issue_comment_url":"https://api.github.com/repos/BlueBrain/Brion/issues/comments{/number}","contents_url":"https://api.github.com/repos/BlueBrain/Brion/contents/{+path}","compare_url":"https://api.github.com/repos/BlueBrain/Brion/compare/{base}...{head}","merges_url":"https://api.github.com/repos/BlueBrain/Brion/merges","archive_url":"https://api.github.com/repos/BlueBrain/Brion/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/BlueBrain/Brion/downloads","issues_url":"https://api.github.com/repos/BlueBrain/Brion/issues{/number}","pulls_url":"https://api.github.com/repos/BlueBrain/Brion/pulls{/number}","milestones_url":"https://api.github.com/repos/BlueBrain/Brion/milestones{/number}","notifications_url":"https://api.github.com/repos/BlueBrain/Brion/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/BlueBrain/Brion/labels{/name}","releases_url":"https://api.github.com/repos/BlueBrain/Brion/releases{/id}","created_at":"2015-05-13T12:33:49Z","updated_at":"2015-06-15T16:00:33Z","pushed_at":"2015-11-24T13:57:47Z","git_url":"git://github.com/BlueBrain/Brion.git","ssh_url":"git@github.com:BlueBrain/Brion.git","clone_url":"https://github.com/BlueBrain/Brion.git","svn_url":"https://github.com/BlueBrain/Brion","homepage":"http://bluebrain.github.io/","size":300,"stargazers_count":1,"watchers_count":1,"language":"C++","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":7,"mirror_url":null,"open_issues_count":2,"forks":7,"open_issues":2,"watchers":1,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/BlueBrain/Brion/pulls/29"},"html":{"href":"https://github.com/BlueBrain/Brion/pull/29"},"issue":{"href":"https://api.github.com/repos/BlueBrain/Brion/issues/29"},"comments":{"href":"https://api.github.com/repos/BlueBrain/Brion/issues/29/comments"},"review_comments":{"href":"https://api.github.com/repos/BlueBrain/Brion/pulls/29/comments"},"review_comment":{"href":"https://api.github.com/repos/BlueBrain/Brion/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/BlueBrain/Brion/pulls/29/commits"},"statuses":{"href":"https://api.github.com/repos/BlueBrain/Brion/statuses/9034b966d212a2413ed800e565fe8634386ed120"}}}}