{"action":"created","comment":{"url":"https://api.github.com/repos/OpenMS/OpenMS/pulls/comments/45296236","id":45296236,"diff_hunk":"@@ -0,0 +1,266 @@\n+// --------------------------------------------------------------------------\n+//                   OpenMS -- Open-Source Mass Spectrometry\n+// --------------------------------------------------------------------------\n+// Copyright The OpenMS Team -- Eberhard Karls University Tuebingen,\n+// ETH Zurich, and Freie Universitaet Berlin 2002-2015.\n+//\n+// This software is released under a three-clause BSD license:\n+//  * Redistributions of source code must retain the above copyright\n+//    notice, this list of conditions and the following disclaimer.\n+//  * Redistributions in binary form must reproduce the above copyright\n+//    notice, this list of conditions and the following disclaimer in the\n+//    documentation and/or other materials provided with the distribution.\n+//  * Neither the name of any author or any participating institution\n+//    may be used to endorse or promote products derived from this software\n+//    without specific prior written permission.\n+// For a full list of authors, refer to the file AUTHORS.\n+// --------------------------------------------------------------------------\n+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n+// ARE DISCLAIMED. IN NO EVENT SHALL ANY OF THE AUTHORS OR THE CONTRIBUTING\n+// INSTITUTIONS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n+// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n+// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;\n+// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n+// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR\n+// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n+// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n+//\n+// --------------------------------------------------------------------------\n+// $Maintainer: Timo Sachsenberg $\n+// $Authors: Timo Sachsenberg $\n+// --------------------------------------------------------------------------\n+\n+#include <OpenMS/KERNEL/StandardTypes.h>\n+#include <OpenMS/ANALYSIS/RNPXL/PScore.h>\n+#include <OpenMS/ANALYSIS/ID/AScore.h>\n+\n+#include <vector>\n+#include <map>\n+\n+using std::map;\n+using std::vector;\n+\n+namespace OpenMS\n+{\n+  vector<Size> PScore::calculateIntensityRankInMZWindow(const vector<double>& mz, const vector<double>& intensities, double mz_window = 100)\n+  {\n+    vector<Size> ranks;\n+    if (mz.empty())\n+    {\n+      return ranks;\n+    }\n+    ranks.reserve(mz.size());\n+\n+    const double half_window = mz_window / 2.0;\n+    for (Size p = 0; p < mz.size(); ++p)\n+    {\n+      const double m = mz[p];\n+      const double i = intensities[p];\n+\n+      // determine rank\n+      Size rank(0);\n+\n+      // count neighbors to the left that have higher intensity\n+      for (Int j = p - 1; j >= 0; --j)\n+      {\n+        if (mz[j] < m - half_window) break;\n+        if (intensities[j] > i) ++rank;\n+      }\n+\n+      // count neighbors to the right that have higher intensity\n+      for (Size j = p + 1; j < mz.size(); j++)\n+      {\n+        if (mz[j] > m + half_window) break;\n+        if (intensities[j] > i) ++rank;\n+      }\n+      ranks.push_back(rank);\n+    }\n+\n+    return ranks;\n+  }\n+\n+\n+  vector<vector<Size> > PScore::calculateRankMap(const PeakMap& peak_map, double mz_window)\n+  {\n+    vector<std::vector<Size> > rank_map;\n+    rank_map.reserve(peak_map.size());\n+    for (Size i = 0; i != peak_map.size(); ++i)\n+    {\n+      const PeakSpectrum& spec = peak_map[i];\n+      vector<double> mz;\n+      vector<double> intensities;\n+      for (Size j = 0; j != spec.size(); ++j)\n+      {\n+        mz.push_back(spec[j].getMZ());\n+        intensities.push_back(spec[j].getIntensity());\n+      }\n+      rank_map.push_back(calculateIntensityRankInMZWindow(mz, intensities, mz_window));\n+    }\n+    return rank_map;\n+  }\n+\n+  map<Size, PeakSpectrum > PScore::calculatePeakLevelSpectra(const PeakSpectrum& spec, const vector<Size>& ranks, Size min_level, Size max_level)\n+  {\n+    map<Size, MSSpectrum<Peak1D> > peak_level_spectra;\n+\n+    if (spec.empty()) return peak_level_spectra;\n+\n+    // loop over all peaks and associated ranks\n+    for (Size i = 0; i != ranks.size(); ++i)\n+    {\n+      // start at the highest (less restrictive) level\n+      for (Size j = max_level; j >= min_level; --j)\n+      {\n+        // if the current peak is annotated to have lower or equal rank then allowed for this peak level add it\n+        if (ranks[i] <= j)\n+        {\n+          peak_level_spectra[j].push_back(spec[i]);\n+        }\n+        else\n+        {\n+          // if the current peak has higher rank than the current level then all it is also to high for the lower levels\n+          break;\n+        }\n+      }\n+    }\n+    return peak_level_spectra;\n+  }\n+\n+  double PScore::computePScore(double fragment_mass_tolerance, bool fragment_mass_tolerance_unit_ppm, const map<Size, PeakSpectrum>& peak_level_spectra, const vector<RichPeakSpectrum> & theo_spectra, double mz_window)\n+  {\n+    AScore a_score_algorithm; // TODO: make the cumulative score function static\n+\n+    double best_pscore = 0.0;\n+\n+    for (vector<RichPeakSpectrum>::const_iterator theo_spectra_it = theo_spectra.begin(); theo_spectra_it != theo_spectra.end(); ++theo_spectra_it)\n+    {\n+      const RichPeakSpectrum& theo_spectrum = *theo_spectra_it;\n+\n+      // number of theoretical ions for current spectrum\n+      Size N = theo_spectrum.size();\n+\n+      for (map<Size, PeakSpectrum>::const_iterator l_it = peak_level_spectra.begin(); l_it != peak_level_spectra.end(); ++l_it)\n+      {\n+        const double level = static_cast<double>(l_it->first);\n+        const PeakSpectrum& exp_spectrum = l_it->second;\n+\n+        Size matched_peaks(0);\n+        for (RichPeakSpectrum::ConstIterator theo_peak_it = theo_spectrum.begin(); theo_peak_it != theo_spectrum.end(); ++theo_peak_it)\n+        {\n+          const double& theo_mz = theo_peak_it->getMZ();\n+\n+          double max_dist_dalton = fragment_mass_tolerance_unit_ppm ? theo_mz * fragment_mass_tolerance * 1e-6 : fragment_mass_tolerance;\n+\n+          // iterate over peaks in experimental spectrum in given fragment tolerance around theoretical peak\n+          Size index = exp_spectrum.findNearest(theo_mz);\n+          double exp_mz = exp_spectrum[index].getMZ();\n+\n+          // found peak match\n+          if (std::abs(theo_mz - exp_mz) < max_dist_dalton)\n+          {\n+            ++matched_peaks;\n+          }\n+        }\n+\n+        // compute p score as e.g. in the AScore implementation or Andromeda\n+        const double p = level / mz_window;\n+        const double pscore = -10.0 * log10(a_score_algorithm.computeCumulativeScore(N, matched_peaks, p));\n+        if (pscore > best_pscore)\n+        {\n+          best_pscore = pscore;\n+        }\n+      }\n+    }\n+\n+    return best_pscore;\n+  }\n+\n+  double PScore::computePScore(double fragment_mass_tolerance, bool fragment_mass_tolerance_unit_ppm, const map<Size, PeakSpectrum>& peak_level_spectra, const RichPeakSpectrum & theo_spectrum, double mz_window)\n+  {\n+    AScore a_score_algorithm; // TODO: make the cumulative score function static\n+\n+    double best_pscore = 0.0;\n+\n+    // number of theoretical ions for current spectrum\n+    Size N = theo_spectrum.size();\n+\n+    for (map<Size, PeakSpectrum>::const_iterator l_it = peak_level_spectra.begin(); l_it != peak_level_spectra.end(); ++l_it)\n+    {\n+      const double level = static_cast<double>(l_it->first);\n+      const PeakSpectrum& exp_spectrum = l_it->second;\n+\n+      Size matched_peaks(0);\n+      for (RichPeakSpectrum::ConstIterator theo_peak_it = theo_spectrum.begin(); theo_peak_it != theo_spectrum.end(); ++theo_peak_it)\n+      {\n+        const double& theo_mz = theo_peak_it->getMZ();\n+\n+        double max_dist_dalton = fragment_mass_tolerance_unit_ppm ? theo_mz * fragment_mass_tolerance * 1e-6 : fragment_mass_tolerance;\n+\n+        // iterate over peaks in experimental spectrum in given fragment tolerance around theoretical peak\n+        Size index = exp_spectrum.findNearest(theo_mz);\n+        double exp_mz = exp_spectrum[index].getMZ();\n+\n+        // found peak match\n+        if (std::abs(theo_mz - exp_mz) < max_dist_dalton)\n+        {\n+          ++matched_peaks;\n+        }\n+      }\n+\n+      // compute p score as e.g. in the AScore implementation or Andromeda\n+      const double p = level / mz_window;\n+      const double pscore = -10.0 * log10(a_score_algorithm.computeCumulativeScore(N, matched_peaks, p));\n+\n+      std::cout << \"level: \" << level << \" score: \" << pscore << \" matched peaks: \" << matched_peaks << std::endl;\n+      if (pscore > best_pscore)\n+      {\n+        best_pscore = pscore;\n+      }\n+    }\n+\n+    return best_pscore;\n+  }\n+\n+   double massCorrectionTerm(double mass)\n+   {\n+     return 0.024*(mass - 600);\n+   }\n+\n+   double cleavageCorrectionTerm(Size cleavages, bool consecutive_cleavage)\n+   {\n+     switch (cleavages)\n+     {\n+       case 0: return 53.2;\n+       case 1: return consecutive_cleavage ? 42.1 : 31.1;\n+       case 2: return 17.0;\n+       default: return 0;","path":"src/openms/source/ANALYSIS/RNPXL/PScore.cpp","position":238,"original_position":238,"commit_id":"8b7b3b98eef2699ebfe7ccd8e672da23c8a660de","original_commit_id":"8b7b3b98eef2699ebfe7ccd8e672da23c8a660de","user":{"login":"hroest","id":464014,"avatar_url":"https://avatars.githubusercontent.com/u/464014?v=3","gravatar_id":"","url":"https://api.github.com/users/hroest","html_url":"https://github.com/hroest","followers_url":"https://api.github.com/users/hroest/followers","following_url":"https://api.github.com/users/hroest/following{/other_user}","gists_url":"https://api.github.com/users/hroest/gists{/gist_id}","starred_url":"https://api.github.com/users/hroest/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hroest/subscriptions","organizations_url":"https://api.github.com/users/hroest/orgs","repos_url":"https://api.github.com/users/hroest/repos","events_url":"https://api.github.com/users/hroest/events{/privacy}","received_events_url":"https://api.github.com/users/hroest/received_events","type":"User","site_admin":false},"body":"same here?","created_at":"2015-11-19T03:37:21Z","updated_at":"2015-11-19T03:37:21Z","html_url":"https://github.com/OpenMS/OpenMS/pull/1698#discussion_r45296236","pull_request_url":"https://api.github.com/repos/OpenMS/OpenMS/pulls/1698","_links":{"self":{"href":"https://api.github.com/repos/OpenMS/OpenMS/pulls/comments/45296236"},"html":{"href":"https://github.com/OpenMS/OpenMS/pull/1698#discussion_r45296236"},"pull_request":{"href":"https://api.github.com/repos/OpenMS/OpenMS/pulls/1698"}}},"pull_request":{"url":"https://api.github.com/repos/OpenMS/OpenMS/pulls/1698","id":50252702,"html_url":"https://github.com/OpenMS/OpenMS/pull/1698","diff_url":"https://github.com/OpenMS/OpenMS/pull/1698.diff","patch_url":"https://github.com/OpenMS/OpenMS/pull/1698.patch","issue_url":"https://api.github.com/repos/OpenMS/OpenMS/issues/1698","number":1698,"state":"open","locked":false,"title":"[FEATURE] add HyperScore and PScore implementations","user":{"login":"timosachsenberg","id":5803621,"avatar_url":"https://avatars.githubusercontent.com/u/5803621?v=3","gravatar_id":"","url":"https://api.github.com/users/timosachsenberg","html_url":"https://github.com/timosachsenberg","followers_url":"https://api.github.com/users/timosachsenberg/followers","following_url":"https://api.github.com/users/timosachsenberg/following{/other_user}","gists_url":"https://api.github.com/users/timosachsenberg/gists{/gist_id}","starred_url":"https://api.github.com/users/timosachsenberg/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/timosachsenberg/subscriptions","organizations_url":"https://api.github.com/users/timosachsenberg/orgs","repos_url":"https://api.github.com/users/timosachsenberg/repos","events_url":"https://api.github.com/users/timosachsenberg/events{/privacy}","received_events_url":"https://api.github.com/users/timosachsenberg/received_events","type":"User","site_admin":false},"body":"added some commonly used PSM scores. Any suggestions how the PScore could be properly tested with little extra work?","created_at":"2015-11-10T13:22:28Z","updated_at":"2015-11-19T03:37:21Z","closed_at":null,"merged_at":null,"merge_commit_sha":"63f1fc6af8b420078f8f47ebe814a1b46137bf26","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/OpenMS/OpenMS/pulls/1698/commits","review_comments_url":"https://api.github.com/repos/OpenMS/OpenMS/pulls/1698/comments","review_comment_url":"https://api.github.com/repos/OpenMS/OpenMS/pulls/comments{/number}","comments_url":"https://api.github.com/repos/OpenMS/OpenMS/issues/1698/comments","statuses_url":"https://api.github.com/repos/OpenMS/OpenMS/statuses/8b7b3b98eef2699ebfe7ccd8e672da23c8a660de","head":{"label":"timosachsenberg:features/spectrum_scores","ref":"features/spectrum_scores","sha":"8b7b3b98eef2699ebfe7ccd8e672da23c8a660de","user":{"login":"timosachsenberg","id":5803621,"avatar_url":"https://avatars.githubusercontent.com/u/5803621?v=3","gravatar_id":"","url":"https://api.github.com/users/timosachsenberg","html_url":"https://github.com/timosachsenberg","followers_url":"https://api.github.com/users/timosachsenberg/followers","following_url":"https://api.github.com/users/timosachsenberg/following{/other_user}","gists_url":"https://api.github.com/users/timosachsenberg/gists{/gist_id}","starred_url":"https://api.github.com/users/timosachsenberg/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/timosachsenberg/subscriptions","organizations_url":"https://api.github.com/users/timosachsenberg/orgs","repos_url":"https://api.github.com/users/timosachsenberg/repos","events_url":"https://api.github.com/users/timosachsenberg/events{/privacy}","received_events_url":"https://api.github.com/users/timosachsenberg/received_events","type":"User","site_admin":false},"repo":{"id":16135228,"name":"OpenMS","full_name":"timosachsenberg/OpenMS","owner":{"login":"timosachsenberg","id":5803621,"avatar_url":"https://avatars.githubusercontent.com/u/5803621?v=3","gravatar_id":"","url":"https://api.github.com/users/timosachsenberg","html_url":"https://github.com/timosachsenberg","followers_url":"https://api.github.com/users/timosachsenberg/followers","following_url":"https://api.github.com/users/timosachsenberg/following{/other_user}","gists_url":"https://api.github.com/users/timosachsenberg/gists{/gist_id}","starred_url":"https://api.github.com/users/timosachsenberg/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/timosachsenberg/subscriptions","organizations_url":"https://api.github.com/users/timosachsenberg/orgs","repos_url":"https://api.github.com/users/timosachsenberg/repos","events_url":"https://api.github.com/users/timosachsenberg/events{/privacy}","received_events_url":"https://api.github.com/users/timosachsenberg/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/timosachsenberg/OpenMS","description":"The codebase of the OpenMS project","fork":true,"url":"https://api.github.com/repos/timosachsenberg/OpenMS","forks_url":"https://api.github.com/repos/timosachsenberg/OpenMS/forks","keys_url":"https://api.github.com/repos/timosachsenberg/OpenMS/keys{/key_id}","collaborators_url":"https://api.github.com/repos/timosachsenberg/OpenMS/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/timosachsenberg/OpenMS/teams","hooks_url":"https://api.github.com/repos/timosachsenberg/OpenMS/hooks","issue_events_url":"https://api.github.com/repos/timosachsenberg/OpenMS/issues/events{/number}","events_url":"https://api.github.com/repos/timosachsenberg/OpenMS/events","assignees_url":"https://api.github.com/repos/timosachsenberg/OpenMS/assignees{/user}","branches_url":"https://api.github.com/repos/timosachsenberg/OpenMS/branches{/branch}","tags_url":"https://api.github.com/repos/timosachsenberg/OpenMS/tags","blobs_url":"https://api.github.com/repos/timosachsenberg/OpenMS/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/timosachsenberg/OpenMS/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/timosachsenberg/OpenMS/git/refs{/sha}","trees_url":"https://api.github.com/repos/timosachsenberg/OpenMS/git/trees{/sha}","statuses_url":"https://api.github.com/repos/timosachsenberg/OpenMS/statuses/{sha}","languages_url":"https://api.github.com/repos/timosachsenberg/OpenMS/languages","stargazers_url":"https://api.github.com/repos/timosachsenberg/OpenMS/stargazers","contributors_url":"https://api.github.com/repos/timosachsenberg/OpenMS/contributors","subscribers_url":"https://api.github.com/repos/timosachsenberg/OpenMS/subscribers","subscription_url":"https://api.github.com/repos/timosachsenberg/OpenMS/subscription","commits_url":"https://api.github.com/repos/timosachsenberg/OpenMS/commits{/sha}","git_commits_url":"https://api.github.com/repos/timosachsenberg/OpenMS/git/commits{/sha}","comments_url":"https://api.github.com/repos/timosachsenberg/OpenMS/comments{/number}","issue_comment_url":"https://api.github.com/repos/timosachsenberg/OpenMS/issues/comments{/number}","contents_url":"https://api.github.com/repos/timosachsenberg/OpenMS/contents/{+path}","compare_url":"https://api.github.com/repos/timosachsenberg/OpenMS/compare/{base}...{head}","merges_url":"https://api.github.com/repos/timosachsenberg/OpenMS/merges","archive_url":"https://api.github.com/repos/timosachsenberg/OpenMS/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/timosachsenberg/OpenMS/downloads","issues_url":"https://api.github.com/repos/timosachsenberg/OpenMS/issues{/number}","pulls_url":"https://api.github.com/repos/timosachsenberg/OpenMS/pulls{/number}","milestones_url":"https://api.github.com/repos/timosachsenberg/OpenMS/milestones{/number}","notifications_url":"https://api.github.com/repos/timosachsenberg/OpenMS/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/timosachsenberg/OpenMS/labels{/name}","releases_url":"https://api.github.com/repos/timosachsenberg/OpenMS/releases{/id}","created_at":"2014-01-22T09:53:26Z","updated_at":"2015-05-08T08:24:01Z","pushed_at":"2015-11-17T14:12:55Z","git_url":"git://github.com/timosachsenberg/OpenMS.git","ssh_url":"git@github.com:timosachsenberg/OpenMS.git","clone_url":"https://github.com/timosachsenberg/OpenMS.git","svn_url":"https://github.com/timosachsenberg/OpenMS","homepage":null,"size":211568,"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":"develop"}},"base":{"label":"OpenMS:develop","ref":"develop","sha":"2fb0a586f5d5dfa471efee428556200c8c8390bc","user":{"login":"OpenMS","id":5994841,"avatar_url":"https://avatars.githubusercontent.com/u/5994841?v=3","gravatar_id":"","url":"https://api.github.com/users/OpenMS","html_url":"https://github.com/OpenMS","followers_url":"https://api.github.com/users/OpenMS/followers","following_url":"https://api.github.com/users/OpenMS/following{/other_user}","gists_url":"https://api.github.com/users/OpenMS/gists{/gist_id}","starred_url":"https://api.github.com/users/OpenMS/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/OpenMS/subscriptions","organizations_url":"https://api.github.com/users/OpenMS/orgs","repos_url":"https://api.github.com/users/OpenMS/repos","events_url":"https://api.github.com/users/OpenMS/events{/privacy}","received_events_url":"https://api.github.com/users/OpenMS/received_events","type":"Organization","site_admin":false},"repo":{"id":15763403,"name":"OpenMS","full_name":"OpenMS/OpenMS","owner":{"login":"OpenMS","id":5994841,"avatar_url":"https://avatars.githubusercontent.com/u/5994841?v=3","gravatar_id":"","url":"https://api.github.com/users/OpenMS","html_url":"https://github.com/OpenMS","followers_url":"https://api.github.com/users/OpenMS/followers","following_url":"https://api.github.com/users/OpenMS/following{/other_user}","gists_url":"https://api.github.com/users/OpenMS/gists{/gist_id}","starred_url":"https://api.github.com/users/OpenMS/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/OpenMS/subscriptions","organizations_url":"https://api.github.com/users/OpenMS/orgs","repos_url":"https://api.github.com/users/OpenMS/repos","events_url":"https://api.github.com/users/OpenMS/events{/privacy}","received_events_url":"https://api.github.com/users/OpenMS/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/OpenMS/OpenMS","description":"The codebase of the OpenMS project","fork":false,"url":"https://api.github.com/repos/OpenMS/OpenMS","forks_url":"https://api.github.com/repos/OpenMS/OpenMS/forks","keys_url":"https://api.github.com/repos/OpenMS/OpenMS/keys{/key_id}","collaborators_url":"https://api.github.com/repos/OpenMS/OpenMS/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/OpenMS/OpenMS/teams","hooks_url":"https://api.github.com/repos/OpenMS/OpenMS/hooks","issue_events_url":"https://api.github.com/repos/OpenMS/OpenMS/issues/events{/number}","events_url":"https://api.github.com/repos/OpenMS/OpenMS/events","assignees_url":"https://api.github.com/repos/OpenMS/OpenMS/assignees{/user}","branches_url":"https://api.github.com/repos/OpenMS/OpenMS/branches{/branch}","tags_url":"https://api.github.com/repos/OpenMS/OpenMS/tags","blobs_url":"https://api.github.com/repos/OpenMS/OpenMS/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/OpenMS/OpenMS/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/OpenMS/OpenMS/git/refs{/sha}","trees_url":"https://api.github.com/repos/OpenMS/OpenMS/git/trees{/sha}","statuses_url":"https://api.github.com/repos/OpenMS/OpenMS/statuses/{sha}","languages_url":"https://api.github.com/repos/OpenMS/OpenMS/languages","stargazers_url":"https://api.github.com/repos/OpenMS/OpenMS/stargazers","contributors_url":"https://api.github.com/repos/OpenMS/OpenMS/contributors","subscribers_url":"https://api.github.com/repos/OpenMS/OpenMS/subscribers","subscription_url":"https://api.github.com/repos/OpenMS/OpenMS/subscription","commits_url":"https://api.github.com/repos/OpenMS/OpenMS/commits{/sha}","git_commits_url":"https://api.github.com/repos/OpenMS/OpenMS/git/commits{/sha}","comments_url":"https://api.github.com/repos/OpenMS/OpenMS/comments{/number}","issue_comment_url":"https://api.github.com/repos/OpenMS/OpenMS/issues/comments{/number}","contents_url":"https://api.github.com/repos/OpenMS/OpenMS/contents/{+path}","compare_url":"https://api.github.com/repos/OpenMS/OpenMS/compare/{base}...{head}","merges_url":"https://api.github.com/repos/OpenMS/OpenMS/merges","archive_url":"https://api.github.com/repos/OpenMS/OpenMS/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/OpenMS/OpenMS/downloads","issues_url":"https://api.github.com/repos/OpenMS/OpenMS/issues{/number}","pulls_url":"https://api.github.com/repos/OpenMS/OpenMS/pulls{/number}","milestones_url":"https://api.github.com/repos/OpenMS/OpenMS/milestones{/number}","notifications_url":"https://api.github.com/repos/OpenMS/OpenMS/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/OpenMS/OpenMS/labels{/name}","releases_url":"https://api.github.com/repos/OpenMS/OpenMS/releases{/id}","created_at":"2014-01-09T10:15:13Z","updated_at":"2015-11-02T09:06:05Z","pushed_at":"2015-11-19T03:12:39Z","git_url":"git://github.com/OpenMS/OpenMS.git","ssh_url":"git@github.com:OpenMS/OpenMS.git","clone_url":"https://github.com/OpenMS/OpenMS.git","svn_url":"https://github.com/OpenMS/OpenMS","homepage":null,"size":236231,"stargazers_count":35,"watchers_count":35,"language":"C++","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":42,"mirror_url":null,"open_issues_count":356,"forks":42,"open_issues":356,"watchers":35,"default_branch":"develop"}},"_links":{"self":{"href":"https://api.github.com/repos/OpenMS/OpenMS/pulls/1698"},"html":{"href":"https://github.com/OpenMS/OpenMS/pull/1698"},"issue":{"href":"https://api.github.com/repos/OpenMS/OpenMS/issues/1698"},"comments":{"href":"https://api.github.com/repos/OpenMS/OpenMS/issues/1698/comments"},"review_comments":{"href":"https://api.github.com/repos/OpenMS/OpenMS/pulls/1698/comments"},"review_comment":{"href":"https://api.github.com/repos/OpenMS/OpenMS/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/OpenMS/OpenMS/pulls/1698/commits"},"statuses":{"href":"https://api.github.com/repos/OpenMS/OpenMS/statuses/8b7b3b98eef2699ebfe7ccd8e672da23c8a660de"}}}}