From 3b091f3a320ebf4d8ed9cd29398d458dd8a6bea8 Mon Sep 17 00:00:00 2001 From: jorainer Date: Fri, 22 Apr 2022 15:50:18 +0200 Subject: [PATCH] fix: mzML export - Don't export/write header variables with missing values (issue #266). --- DESCRIPTION | 2 +- NEWS | 5 +++++ src/RcppPwiz.cpp | 11 ++++++----- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index d0f15dd21..bdaa406e6 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -2,7 +2,7 @@ Package: mzR Type: Package Title: parser for netCDF, mzXML, mzData and mzML and mzIdentML files (mass spectrometry data) -Version: 2.29.5 +Version: 2.29.6 Author: Bernd Fischer, Steffen Neumann, Laurent Gatto, Qiang Kou, Johannes Rainer Authors@R: c( person("Steffen", "Neumann", email="sneumann@ipb-halle.de", role=c("aut","cre")), diff --git a/NEWS b/NEWS index f45eb3a02..d65a09f81 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,8 @@ +CHANGES IN VERSION 2.27.6 +------------------------- + o Only export certain spectra header parameters if their values are not NA. + Closes #266. + CHANGES IN VERSION 2.27.5 ------------------------- o `peaks` method for pwiz backend sets colnames on returned matrices. diff --git a/src/RcppPwiz.cpp b/src/RcppPwiz.cpp index 0ae3dd423..d4ce21ba0 100644 --- a/src/RcppPwiz.cpp +++ b/src/RcppPwiz.cpp @@ -725,9 +725,9 @@ void RcppPwiz::addSpectrumList(MSData& msd, Spectrum& spct = *spectrumList->spectra[i]; spct.set(MS_ms_level, msLevel[i]); // centroided - if (centroided[i] != NA_LOGICAL && centroided[i] == TRUE) + if (!Rcpp::LogicalVector::is_na(centroided[i]) && centroided[i] == TRUE) spct.set(MS_centroid_spectrum); - if (centroided[i] != NA_LOGICAL && centroided[i] == FALSE) + if (!Rcpp::LogicalVector::is_na(centroided[i]) && centroided[i] == FALSE) spct.set(MS_profile_spectrum); // [X] polarity if (polarity[i] == 0) @@ -765,12 +765,13 @@ void RcppPwiz::addSpectrumList(MSData& msd, if (!Rcpp::StringVector::is_na(filterString[i])) spct_scan.set(MS_filter_string, filterString[i]); - if (ionMobilityDriftTime[i] != NA_REAL) + if (!Rcpp::NumericVector::is_na(ionMobilityDriftTime[i])) spct_scan.set(MS_ion_mobility_drift_time, ionMobilityDriftTime[i], UO_millisecond); // scanWindow - if (scanWindowLowerLimit[i] != NA_REAL && scanWindowUpperLimit[i] != NA_REAL) { + if (!Rcpp::NumericVector::is_na(scanWindowLowerLimit[i]) && + !Rcpp::NumericVector::is_na(scanWindowUpperLimit[i])) { spct_scan.scanWindows.push_back(ScanWindow(scanWindowLowerLimit[i], scanWindowUpperLimit[i], MS_m_z)); } // MSn - precursor: @@ -804,7 +805,7 @@ void RcppPwiz::addSpectrumList(MSData& msd, prec.spectrumID = spectrumId[precursor_idx]; } // isolation window - if (isolationWindowTargetMZ[i] != NA_REAL) { + if (!Rcpp::NumericVector::is_na(isolationWindowTargetMZ[i])) { prec.isolationWindow.set(MS_isolation_window_target_m_z, isolationWindowTargetMZ[i]); prec.isolationWindow.set(MS_isolation_window_lower_offset, isolationWindowLowerOffset[i]); prec.isolationWindow.set(MS_isolation_window_upper_offset, isolationWindowUpperOffset[i]);