{"action":"created","comment":{"url":"https://api.github.com/repos/mantidproject/mantid/pulls/comments/104897936","pull_request_review_id":25751947,"id":104897936,"diff_hunk":"@@ -128,66 +160,102 @@ void DetectorInfo::clearMaskFlags() {\n /// Set the absolute position of the detector with given index. Not thread safe.\n void DetectorInfo::setPosition(const size_t index,\n                                const Kernel::V3D &position) {\n-  const auto &det = getDetector(index);\n-  using namespace Geometry::ComponentHelper;\n-  TransformType positionType = Absolute;\n-  moveComponent(det, *m_pmap, position, positionType);\n+  m_detectorInfo.setPosition(index, Kernel::toVector3d(position));\n }\n \n /// Set the absolute rotation of the detector with given index. Not thread safe.\n void DetectorInfo::setRotation(const size_t index,\n                                const Kernel::Quat &rotation) {\n-  const auto &det = getDetector(index);\n-  using namespace Geometry::ComponentHelper;\n-  TransformType rotationType = Absolute;\n-  rotateComponent(det, *m_pmap, rotation, rotationType);\n+  m_detectorInfo.setRotation(index, Kernel::toQuaterniond(rotation));\n }\n \n-/** Set the absolute position of the component `comp`. Not thread safe.\n+/** Set the absolute position of the component `comp`.\n  *\n  * This may or may not be a detector. Even if it is not a detector it will\n- * typically still influence detector positions. */\n+ * typically still influence detector positions. Note that this method will be\n+ * removed once ComponentInfo::setPosition is available. */\n void DetectorInfo::setPosition(const Geometry::IComponent &comp,\n                                const Kernel::V3D &pos) {\n-  using namespace Geometry::ComponentHelper;\n-  TransformType positionType = Absolute;\n-  moveComponent(comp, *m_pmap, pos, positionType);\n-\n-  if (!dynamic_cast<const Geometry::Detector *>(&comp)) {\n+  if (const auto *det = dynamic_cast<const Geometry::Detector *>(&comp)) {\n+    const auto index = indexOf(det->getID());\n+    setPosition(index, pos);\n+  } else {\n+    // This will go badly wrong if the parameter map in the component is not\n+    // identical to ours, but there does not seem to be a way to check?\n+    const auto oldPos = comp.getPos();\n+    using namespace Geometry::ComponentHelper;\n+    TransformType positionType = Absolute;\n+    moveComponent(comp, *m_pmap, pos, positionType);\n     // If comp is a detector cached positions stay valid. In all other cases\n     // (higher level in instrument tree, or other leaf component such as sample\n     // or source) we flush all cached positions.\n-    if (m_source)\n-      m_sourcePos = m_source->getPos();\n-    if (m_sample)\n-      m_samplePos = m_sample->getPos();\n+    const auto &detIndices = getAssemblyDetectorIndices(comp);\n+    if (detIndices.size() == 0 || detIndices.size() == size()) {\n+      // Update only if comp is not a bank (not detectors) or the full\n+      // instrument (all detectors). The should make this thread-safe for\n+      // practical purposes such as moving each bank in a separate thread.\n+      if (m_source)\n+        m_sourcePos = m_source->getPos();\n+      if (m_sample)\n+        m_samplePos = m_sample->getPos();\n+      if (m_source && m_sample)\n+        m_L1 = m_sourcePos.distance(m_samplePos);\n+    }\n     // Detector positions are currently not cached, the cached pointers to\n     // detectors stay valid. Once we store positions in DetectorInfo we need to\n     // update detector positions here.\n+    const auto delta = toVector3d(pos - oldPos);\n+    for (const auto index : detIndices) {\n+      m_detectorInfo.setPosition(index, m_detectorInfo.position(index) + delta);\n+    }\n   }\n }\n \n-/** Set the absolute rotation of the component `comp`. Not thread safe.\n+/** Set the absolute rotation of the component `comp`.\n  *\n  * This may or may not be a detector. Even if it is not a detector it will\n- * typically still influence detector positions rotations. */\n+ * typically still influence detector positions rotations. Note that this method\n+ * will be removed once ComponentInfo::setRotation is available. */\n void DetectorInfo::setRotation(const Geometry::IComponent &comp,\n                                const Kernel::Quat &rot) {\n-  using namespace Geometry::ComponentHelper;\n-  TransformType rotationType = Absolute;\n-  rotateComponent(comp, *m_pmap, rot, rotationType);\n-\n-  if (!dynamic_cast<const Geometry::Detector *>(&comp)) {\n+  if (const auto *det = dynamic_cast<const Geometry::Detector *>(&comp)) {\n+    const auto index = indexOf(det->getID());\n+    setRotation(index, rot);\n+  } else {\n+    // This will go badly wrong if the parameter map in the component is not\n+    // identical to ours, but there does not seem to be a way to check?\n+    const auto pos = toVector3d(comp.getPos());\n+    auto invOldRot = comp.getRotation();\n+    invOldRot.inverse();\n+    const auto delta = toQuaterniond(rot * invOldRot).normalized();\n+    using namespace Geometry::ComponentHelper;\n+    TransformType rotationType = Absolute;\n+    rotateComponent(comp, *m_pmap, rot, rotationType);\n     // If comp is a detector cached positions and rotations stay valid. In all\n-    // other cases/ (higher level in instrument tree, or other leaf component\n+    // other cases (higher level in instrument tree, or other leaf component\n     // such as sample or source) we flush all cached positions and rotations.\n-    if (m_source)\n-      m_sourcePos = m_source->getPos();\n-    if (m_sample)\n-      m_samplePos = m_sample->getPos();\n+    const auto &detIndices = getAssemblyDetectorIndices(comp);\n+    if (detIndices.size() == 0 || detIndices.size() == size()) {","path":"Framework/API/src/DetectorInfo.cpp","position":167,"original_position":224,"commit_id":"20f13e1ab98498c3d6cf9ab4f3cf61982ebb6730","original_commit_id":"f9bf15dec1547634a9d5900076be35985ca6ff0b","user":{"login":"ianbush","id":7047413,"avatar_url":"https://avatars0.githubusercontent.com/u/7047413?v=3","gravatar_id":"","url":"https://api.github.com/users/ianbush","html_url":"https://github.com/ianbush","followers_url":"https://api.github.com/users/ianbush/followers","following_url":"https://api.github.com/users/ianbush/following{/other_user}","gists_url":"https://api.github.com/users/ianbush/gists{/gist_id}","starred_url":"https://api.github.com/users/ianbush/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ianbush/subscriptions","organizations_url":"https://api.github.com/users/ianbush/orgs","repos_url":"https://api.github.com/users/ianbush/repos","events_url":"https://api.github.com/users/ianbush/events{/privacy}","received_events_url":"https://api.github.com/users/ianbush/received_events","type":"User","site_admin":false},"body":"I really do not know if this is the case for any instruments - but you could imagine it being the case for a component with a monitor and a sample (as an example).\r\n\r\nI will take a look at a few IDFs to re-assure myself that this is not the case.","created_at":"2017-03-08T11:27:26Z","updated_at":"2017-03-08T11:27:26Z","html_url":"https://github.com/mantidproject/mantid/pull/18906#discussion_r104897936","pull_request_url":"https://api.github.com/repos/mantidproject/mantid/pulls/18906","_links":{"self":{"href":"https://api.github.com/repos/mantidproject/mantid/pulls/comments/104897936"},"html":{"href":"https://github.com/mantidproject/mantid/pull/18906#discussion_r104897936"},"pull_request":{"href":"https://api.github.com/repos/mantidproject/mantid/pulls/18906"}}},"pull_request":{"url":"https://api.github.com/repos/mantidproject/mantid/pulls/18906","id":106731684,"html_url":"https://github.com/mantidproject/mantid/pull/18906","diff_url":"https://github.com/mantidproject/mantid/pull/18906.diff","patch_url":"https://github.com/mantidproject/mantid/pull/18906.patch","issue_url":"https://api.github.com/repos/mantidproject/mantid/issues/18906","number":18906,"state":"open","locked":false,"title":"Store positions and rotations of detectors in DetectorInfo","user":{"login":"SimonHeybrock","id":12912489,"avatar_url":"https://avatars2.githubusercontent.com/u/12912489?v=3","gravatar_id":"","url":"https://api.github.com/users/SimonHeybrock","html_url":"https://github.com/SimonHeybrock","followers_url":"https://api.github.com/users/SimonHeybrock/followers","following_url":"https://api.github.com/users/SimonHeybrock/following{/other_user}","gists_url":"https://api.github.com/users/SimonHeybrock/gists{/gist_id}","starred_url":"https://api.github.com/users/SimonHeybrock/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SimonHeybrock/subscriptions","organizations_url":"https://api.github.com/users/SimonHeybrock/orgs","repos_url":"https://api.github.com/users/SimonHeybrock/repos","events_url":"https://api.github.com/users/SimonHeybrock/events{/privacy}","received_events_url":"https://api.github.com/users/SimonHeybrock/received_events","type":"User","site_admin":false},"body":"**Do not merge, this is for review only**\r\n\r\nThis PR moves position and rotation information of detectors into `DetectorInfo`.\r\n\r\n- Position/rotation changes are no longer stored in the `ParameterMap` (except for non-detector components).\r\n- Positions/rotations of detectors are updated when a parent rotation is changed. Thus, moving components is now more costly than it used to be. In turn, getting positions of detectors is now much cheaper.\r\n- Files are kept compatible by creating a \"legacy-style\" `ParameterMap` including position and rotation updates for saving.\r\n- Extraction of position/rotation information is done initially when loading an instrument (from IDF or from a parameter string of a processed Nexus file). As a consequence, loading is now more expensive.\r\n- `CompareWorkspaces` now uses `DetectorInfo::isEquivalent` when comparing instruments. Since the internals of position and rotation math have changed slight differences are possible. The tolerance has been set to 1e-9m.\r\n\r\nMinor fixed/changes:\r\n- Update cached L1 in `DetectorInfo` when components are moved or rotated.\r\n- Don't use `twoTheta` for monitors in `LoadDspacemap`.\r\n- `MoveInstrumentComponent` now ignores changes for `RectangularDetectorPIxel` and prints a warning. Previously parameters where added to the `ParameterMap` but took no effect, since `RectangularDetectorPixel::getRelativePos()` ignores parameters in the map.\r\n\r\n\r\n**To test:**\r\n\r\n- Exceptionally thorough code review.\r\n- Make sure files a backward and forward compatible. Change positions and rotations on multiple levels of the instrument. Save and reload. To saving in released Mantid build and loading in build based on this PR, and vice versa.\r\n\r\nTODO: Find more ways we can manually verify this (please suggest).\r\n\r\nFixes #18659.\r\nFixes #19001 (remove copy-on-write of `ParameterMap` in `ExperimentInfo`, see issue for details).\r\nFixes #19011.\r\n\r\nThis is mostly an internal change (the old Python interface is still available). Release notes have been updated for the minor change #19011.\r\n\r\n---\r\n\r\n#### Reviewer ####\r\n\r\nPlease comment on the following ([full description](http://www.mantidproject.org/Individual_Ticket_Testing)):\r\n\r\n##### Code Review #####\r\n\r\n- [ ] Is the code of an acceptable quality?\r\n- [ ] Does the code conform to the [coding standards](http://www.mantidproject.org/Coding_Standards)? Is it well structured with small focussed classes/methods/functions?\r\n- [ ] Are there unit/system tests in place? Are the unit tests small and test the a class in isolation?\r\n- [ ] If there are changes in the release notes then do they describe the changes appropriately?\r\n\r\n##### Functional Tests #####\r\n\r\n- [ ] Do changes function as described? Add comments below that describe the tests performed?\r\n- [ ] How do the changes handle unexpected situations, e.g. bad input?\r\n- [ ] Has the relevant documentation been added/updated?\r\n- [ ] Is user-facing documentation written in a user-friendly manner?\r\n- [ ] Has developer documentation been updated if required?\r\n\r\n- Does everything look good? Comment with the ship it emoji but don't merge. A member of `@mantidproject/gatekeepers` will take care of it.\r\n","created_at":"2017-02-17T13:21:14Z","updated_at":"2017-03-08T11:27:26Z","closed_at":null,"merged_at":null,"merge_commit_sha":"5dfbf63fc7744cc1bc4a5b7f73ed2edaa6e75761","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/mantidproject/mantid/pulls/18906/commits","review_comments_url":"https://api.github.com/repos/mantidproject/mantid/pulls/18906/comments","review_comment_url":"https://api.github.com/repos/mantidproject/mantid/pulls/comments{/number}","comments_url":"https://api.github.com/repos/mantidproject/mantid/issues/18906/comments","statuses_url":"https://api.github.com/repos/mantidproject/mantid/statuses/20f13e1ab98498c3d6cf9ab4f3cf61982ebb6730","head":{"label":"mantidproject:18659_positions_in_DetectorInfo","ref":"18659_positions_in_DetectorInfo","sha":"20f13e1ab98498c3d6cf9ab4f3cf61982ebb6730","user":{"login":"mantidproject","id":671496,"avatar_url":"https://avatars3.githubusercontent.com/u/671496?v=3","gravatar_id":"","url":"https://api.github.com/users/mantidproject","html_url":"https://github.com/mantidproject","followers_url":"https://api.github.com/users/mantidproject/followers","following_url":"https://api.github.com/users/mantidproject/following{/other_user}","gists_url":"https://api.github.com/users/mantidproject/gists{/gist_id}","starred_url":"https://api.github.com/users/mantidproject/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mantidproject/subscriptions","organizations_url":"https://api.github.com/users/mantidproject/orgs","repos_url":"https://api.github.com/users/mantidproject/repos","events_url":"https://api.github.com/users/mantidproject/events{/privacy}","received_events_url":"https://api.github.com/users/mantidproject/received_events","type":"Organization","site_admin":false},"repo":{"id":2594116,"name":"mantid","full_name":"mantidproject/mantid","owner":{"login":"mantidproject","id":671496,"avatar_url":"https://avatars3.githubusercontent.com/u/671496?v=3","gravatar_id":"","url":"https://api.github.com/users/mantidproject","html_url":"https://github.com/mantidproject","followers_url":"https://api.github.com/users/mantidproject/followers","following_url":"https://api.github.com/users/mantidproject/following{/other_user}","gists_url":"https://api.github.com/users/mantidproject/gists{/gist_id}","starred_url":"https://api.github.com/users/mantidproject/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mantidproject/subscriptions","organizations_url":"https://api.github.com/users/mantidproject/orgs","repos_url":"https://api.github.com/users/mantidproject/repos","events_url":"https://api.github.com/users/mantidproject/events{/privacy}","received_events_url":"https://api.github.com/users/mantidproject/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/mantidproject/mantid","description":"Main repository for Mantid code","fork":false,"url":"https://api.github.com/repos/mantidproject/mantid","forks_url":"https://api.github.com/repos/mantidproject/mantid/forks","keys_url":"https://api.github.com/repos/mantidproject/mantid/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mantidproject/mantid/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mantidproject/mantid/teams","hooks_url":"https://api.github.com/repos/mantidproject/mantid/hooks","issue_events_url":"https://api.github.com/repos/mantidproject/mantid/issues/events{/number}","events_url":"https://api.github.com/repos/mantidproject/mantid/events","assignees_url":"https://api.github.com/repos/mantidproject/mantid/assignees{/user}","branches_url":"https://api.github.com/repos/mantidproject/mantid/branches{/branch}","tags_url":"https://api.github.com/repos/mantidproject/mantid/tags","blobs_url":"https://api.github.com/repos/mantidproject/mantid/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mantidproject/mantid/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mantidproject/mantid/git/refs{/sha}","trees_url":"https://api.github.com/repos/mantidproject/mantid/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mantidproject/mantid/statuses/{sha}","languages_url":"https://api.github.com/repos/mantidproject/mantid/languages","stargazers_url":"https://api.github.com/repos/mantidproject/mantid/stargazers","contributors_url":"https://api.github.com/repos/mantidproject/mantid/contributors","subscribers_url":"https://api.github.com/repos/mantidproject/mantid/subscribers","subscription_url":"https://api.github.com/repos/mantidproject/mantid/subscription","commits_url":"https://api.github.com/repos/mantidproject/mantid/commits{/sha}","git_commits_url":"https://api.github.com/repos/mantidproject/mantid/git/commits{/sha}","comments_url":"https://api.github.com/repos/mantidproject/mantid/comments{/number}","issue_comment_url":"https://api.github.com/repos/mantidproject/mantid/issues/comments{/number}","contents_url":"https://api.github.com/repos/mantidproject/mantid/contents/{+path}","compare_url":"https://api.github.com/repos/mantidproject/mantid/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mantidproject/mantid/merges","archive_url":"https://api.github.com/repos/mantidproject/mantid/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mantidproject/mantid/downloads","issues_url":"https://api.github.com/repos/mantidproject/mantid/issues{/number}","pulls_url":"https://api.github.com/repos/mantidproject/mantid/pulls{/number}","milestones_url":"https://api.github.com/repos/mantidproject/mantid/milestones{/number}","notifications_url":"https://api.github.com/repos/mantidproject/mantid/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mantidproject/mantid/labels{/name}","releases_url":"https://api.github.com/repos/mantidproject/mantid/releases{/id}","deployments_url":"https://api.github.com/repos/mantidproject/mantid/deployments","created_at":"2011-10-17T19:07:38Z","updated_at":"2017-03-01T10:18:22Z","pushed_at":"2017-03-08T11:25:49Z","git_url":"git://github.com/mantidproject/mantid.git","ssh_url":"git@github.com:mantidproject/mantid.git","clone_url":"https://github.com/mantidproject/mantid.git","svn_url":"https://github.com/mantidproject/mantid","homepage":"www.mantidproject.org","size":412517,"stargazers_count":50,"watchers_count":50,"language":"C++","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":42,"mirror_url":null,"open_issues_count":1694,"forks":42,"open_issues":1694,"watchers":50,"default_branch":"master"}},"base":{"label":"mantidproject:master","ref":"master","sha":"f7d8e309b6920f5b081330d2f9ffe13921c382e8","user":{"login":"mantidproject","id":671496,"avatar_url":"https://avatars3.githubusercontent.com/u/671496?v=3","gravatar_id":"","url":"https://api.github.com/users/mantidproject","html_url":"https://github.com/mantidproject","followers_url":"https://api.github.com/users/mantidproject/followers","following_url":"https://api.github.com/users/mantidproject/following{/other_user}","gists_url":"https://api.github.com/users/mantidproject/gists{/gist_id}","starred_url":"https://api.github.com/users/mantidproject/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mantidproject/subscriptions","organizations_url":"https://api.github.com/users/mantidproject/orgs","repos_url":"https://api.github.com/users/mantidproject/repos","events_url":"https://api.github.com/users/mantidproject/events{/privacy}","received_events_url":"https://api.github.com/users/mantidproject/received_events","type":"Organization","site_admin":false},"repo":{"id":2594116,"name":"mantid","full_name":"mantidproject/mantid","owner":{"login":"mantidproject","id":671496,"avatar_url":"https://avatars3.githubusercontent.com/u/671496?v=3","gravatar_id":"","url":"https://api.github.com/users/mantidproject","html_url":"https://github.com/mantidproject","followers_url":"https://api.github.com/users/mantidproject/followers","following_url":"https://api.github.com/users/mantidproject/following{/other_user}","gists_url":"https://api.github.com/users/mantidproject/gists{/gist_id}","starred_url":"https://api.github.com/users/mantidproject/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mantidproject/subscriptions","organizations_url":"https://api.github.com/users/mantidproject/orgs","repos_url":"https://api.github.com/users/mantidproject/repos","events_url":"https://api.github.com/users/mantidproject/events{/privacy}","received_events_url":"https://api.github.com/users/mantidproject/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/mantidproject/mantid","description":"Main repository for Mantid code","fork":false,"url":"https://api.github.com/repos/mantidproject/mantid","forks_url":"https://api.github.com/repos/mantidproject/mantid/forks","keys_url":"https://api.github.com/repos/mantidproject/mantid/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mantidproject/mantid/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mantidproject/mantid/teams","hooks_url":"https://api.github.com/repos/mantidproject/mantid/hooks","issue_events_url":"https://api.github.com/repos/mantidproject/mantid/issues/events{/number}","events_url":"https://api.github.com/repos/mantidproject/mantid/events","assignees_url":"https://api.github.com/repos/mantidproject/mantid/assignees{/user}","branches_url":"https://api.github.com/repos/mantidproject/mantid/branches{/branch}","tags_url":"https://api.github.com/repos/mantidproject/mantid/tags","blobs_url":"https://api.github.com/repos/mantidproject/mantid/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mantidproject/mantid/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mantidproject/mantid/git/refs{/sha}","trees_url":"https://api.github.com/repos/mantidproject/mantid/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mantidproject/mantid/statuses/{sha}","languages_url":"https://api.github.com/repos/mantidproject/mantid/languages","stargazers_url":"https://api.github.com/repos/mantidproject/mantid/stargazers","contributors_url":"https://api.github.com/repos/mantidproject/mantid/contributors","subscribers_url":"https://api.github.com/repos/mantidproject/mantid/subscribers","subscription_url":"https://api.github.com/repos/mantidproject/mantid/subscription","commits_url":"https://api.github.com/repos/mantidproject/mantid/commits{/sha}","git_commits_url":"https://api.github.com/repos/mantidproject/mantid/git/commits{/sha}","comments_url":"https://api.github.com/repos/mantidproject/mantid/comments{/number}","issue_comment_url":"https://api.github.com/repos/mantidproject/mantid/issues/comments{/number}","contents_url":"https://api.github.com/repos/mantidproject/mantid/contents/{+path}","compare_url":"https://api.github.com/repos/mantidproject/mantid/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mantidproject/mantid/merges","archive_url":"https://api.github.com/repos/mantidproject/mantid/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mantidproject/mantid/downloads","issues_url":"https://api.github.com/repos/mantidproject/mantid/issues{/number}","pulls_url":"https://api.github.com/repos/mantidproject/mantid/pulls{/number}","milestones_url":"https://api.github.com/repos/mantidproject/mantid/milestones{/number}","notifications_url":"https://api.github.com/repos/mantidproject/mantid/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mantidproject/mantid/labels{/name}","releases_url":"https://api.github.com/repos/mantidproject/mantid/releases{/id}","deployments_url":"https://api.github.com/repos/mantidproject/mantid/deployments","created_at":"2011-10-17T19:07:38Z","updated_at":"2017-03-01T10:18:22Z","pushed_at":"2017-03-08T11:25:49Z","git_url":"git://github.com/mantidproject/mantid.git","ssh_url":"git@github.com:mantidproject/mantid.git","clone_url":"https://github.com/mantidproject/mantid.git","svn_url":"https://github.com/mantidproject/mantid","homepage":"www.mantidproject.org","size":412517,"stargazers_count":50,"watchers_count":50,"language":"C++","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":42,"mirror_url":null,"open_issues_count":1694,"forks":42,"open_issues":1694,"watchers":50,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/mantidproject/mantid/pulls/18906"},"html":{"href":"https://github.com/mantidproject/mantid/pull/18906"},"issue":{"href":"https://api.github.com/repos/mantidproject/mantid/issues/18906"},"comments":{"href":"https://api.github.com/repos/mantidproject/mantid/issues/18906/comments"},"review_comments":{"href":"https://api.github.com/repos/mantidproject/mantid/pulls/18906/comments"},"review_comment":{"href":"https://api.github.com/repos/mantidproject/mantid/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/mantidproject/mantid/pulls/18906/commits"},"statuses":{"href":"https://api.github.com/repos/mantidproject/mantid/statuses/20f13e1ab98498c3d6cf9ab4f3cf61982ebb6730"}}}}
{"actor":{"display_login":"ianbush"}}