Skip to content

Commit

Permalink
[FIX] use MS2 spec for quant purity, return purity=1 for empty window…
Browse files Browse the repository at this point in the history
…, fix ppm bug
  • Loading branch information
jpfeuffer committed Mar 18, 2024
1 parent 7d9c40f commit 09f02c4
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 7 deletions.
15 changes: 10 additions & 5 deletions src/openms/source/ANALYSIS/ID/PrecursorPurity.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
// $Authors: Eugen Netz $
// --------------------------------------------------------------------------

#include "OpenMS/METADATA/InstrumentSettings.h"
#include <OpenMS/ANALYSIS/ID/PrecursorPurity.h>
#include <OpenMS/CONCEPT/Constants.h>
#include <OpenMS/CONCEPT/LogStream.h>
Expand All @@ -23,8 +24,8 @@ namespace OpenMS
{
const auto& ms2_spec = exp[ms2_spec_idx];
const auto& precursor_spec = exp[precursor_spec_idx];
std::vector<double> purities(ms2_spec.getPrecursors().size(), 0.0);
if (precursor_spec.empty()) return purities;
std::vector<double> purities(ms2_spec.getPrecursors().size(), 1.0);
if (precursor_spec.empty()) return purities; // TODO fail instead?

Size precursor_idx = 0;
for (const auto& precursor_info : ms2_spec.getPrecursors())
Expand All @@ -37,9 +38,14 @@ namespace OpenMS
// the actual boundary values
const double strict_lower_mz = precursor_info.getMZ() - precursor_info.getIsolationWindowLowerOffset();
const double strict_upper_mz = precursor_info.getMZ() + precursor_info.getIsolationWindowUpperOffset();
if (strict_lower_mz == strict_upper_mz)
{
return purities;
}

const double fuzzy_lower_mz = strict_lower_mz - Math::getPPM(strict_lower_mz, max_precursor_isotope_deviation);
const double fuzzy_upper_mz = strict_upper_mz + Math::getPPM(strict_upper_mz, max_precursor_isotope_deviation);
const double dev_ppm = max_precursor_isotope_deviation / 1e6;
const double fuzzy_lower_mz = strict_lower_mz * (1 - dev_ppm);
const double fuzzy_upper_mz = strict_upper_mz * (1 + dev_ppm);

// first find the actual precursor peak
Size precursor_peak_idx = precursor_spec.findNearest(precursor_info.getMZ());
Expand Down Expand Up @@ -197,7 +203,6 @@ namespace OpenMS
const auto& ms2_spec = exp[ms2_spec_idx];
const auto& precursor_spec = exp[precursor_spec_idx];
const auto& next_ms1_spec = exp[next_ms1_spec_idx];
const auto& precursor_info = ms2_spec.getPrecursors()[0];
// compute purity of preceding ms1 scan
std::vector<double> early_scan_purity = computeSingleScanPrecursorPurities(ms2_spec_idx, precursor_spec_idx, exp, max_precursor_isotope_deviation);
std::vector<double> late_scan_purity = computeSingleScanPrecursorPurities(ms2_spec_idx, next_ms1_spec_idx, exp, max_precursor_isotope_deviation);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ namespace OpenMS
int a_rows = (int)A.rows();
int a_cols = (int)A.cols();

if (a_rows != b.size())
if (a_rows != (int) b.size())
{
throw Exception::InvalidParameter(__FILE__, __LINE__, OPENMS_PRETTY_FUNCTION, "NNSL::solve() #rows of A does not match #rows of b !");
}
Expand Down
2 changes: 1 addition & 1 deletion src/topp/IsobaricWorkflow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -256,7 +256,7 @@ class TOPPIsobaricWorkflow :
if (has_ms3)
{
// TODO double-check that this is the correct way to compute the purity for MS3. Currently purities are very low.
std::vector<double> quant_purities = PrecursorPurity::computeSingleScanPrecursorPurities(quant_spec_idx, ms1_spec_idx, exp, max_precursor_isotope_deviation);
std::vector<double> quant_purities = PrecursorPurity::computeSingleScanPrecursorPurities(quant_spec_idx, id_spec_idx, exp, max_precursor_isotope_deviation);
// average over all precursors
quant_purity = std::accumulate(quant_purities.begin(), quant_purities.end(), 0.0) / quant_purities.size();
}
Expand Down

0 comments on commit 09f02c4

Please sign in to comment.