75 std::map<MzIntegrationParams::MzIntegrationParams::BinningType, QString>::const_iterator
79 [text](
const std::pair<MzIntegrationParams::BinningType, QString> &pair) {
80 return pair.second == text;
84 return the_iterator_const->first;
103 int bin_size_divisor,
105 bool remove_zero_val_data_points,
138 return mz_integration_params_p;
153 return initialization_result;
162 bool binning_type_set =
false;
163 bool decimal_places_set =
false;
164 bool bin_size_model_set =
false;
165 bool bin_size_divisor_set =
false;
166 bool remove_zero_data_points_set =
false;
168 QStringList string_list = text.split(
"\n");
170 for(
int iter = 0; iter < string_list.size(); ++iter)
172 QString iter_string = string_list.at(iter);
176 if(iter_string.contains(
"Binning type:"))
179 binning_type_set =
true;
181 else if(iter_string.contains(
"Bin size model:"))
184 bin_size_model_set =
true;
186 else if(iter_string.contains(
"Bin size divisor:"))
189 bin_size_divisor_set =
true;
191 else if(iter_string.contains(
"Decimal places:"))
194 decimal_places_set =
true;
196 else if(iter_string.contains(
"Remove 0-val data points:"))
198 remove_zero_data_points_set =
true;
209 if(bin_size_model_set)
211 if(bin_size_divisor_set)
213 if(decimal_places_set)
216 if(remove_zero_data_points_set)
219 return initialization_result;
227 int bin_size_divisor,
229 bool remove_zero_val_data_points,
263 if(
static_cast<bool>(initialization_results &
267 if(
static_cast<bool>(initialization_results &
271 if(
static_cast<bool>(initialization_results &
275 if(
static_cast<bool>(initialization_results &
457 errors += (
m_smallestMz == std::numeric_limits<double>::max() ? 1 : 0);
462 errors += (
m_greatestMz == std::numeric_limits<double>::min() ? 1 : 0);
467 qCritical() <<
"The m/z integration parameters are invalid.";
477 return (
m_smallestMz < std::numeric_limits<double>::max()) &&
488 std::vector<double> bins;
504 qFatal(
"Programming error. This kind of binning is not supported.");
517 std::vector<double> bins;
549 qFatal() <<
"Programming error. The MzIntegrationParams::BinningLogic is not valid, cannot "
552 qDebug() <<
"Binning logic:" <<
toString();
608 std::vector<double> bins;
619 double previous_mz_bin = first_mz;
621 bins.push_back(previous_mz_bin);
630 while(previous_mz_bin <= last_mz)
656 current_mz = previous_mz_bin +
m_binSizeModel->delta(previous_mz_bin);
667 double current_rounded_mz =
680 if(current_rounded_mz == previous_mz_bin)
692 bins.push_back(current_rounded_mz);
695 previous_mz_bin = current_rounded_mz;
701 QString fileName =
"/tmp/massSpecArbitraryBins.txt-at-" +
702 QDateTime::currentDateTime().toString(
"yyyyMMdd-HH-mm-ss");
704 qDebug() <<
"Writing the list of bins setup in the "
705 "mass spectrum in file "
708 QFile file(fileName);
709 file.open(QIODevice::WriteOnly);
711 QTextStream fileStream(&file);
713 for(
auto &&bin : bins)
714 fileStream << QString(
"%1\n").arg(bin, 0,
'f', 10);
739 std::vector<double> bins;
741 if(mass_spectrum_csp->size() < 2)
748 local_mass_spectrum.
sortMz();
762 double start_mz_in = min_mz;
768 std::vector<pappso::DataPoint>::const_iterator it = local_mass_spectrum.begin();
770 double prev_mz = it->x;
777 while(it != local_mass_spectrum.end())
779 double next_mz = it->x;
784 double step = next_mz - prev_mz;
785 end_mz_out = start_mz_in + step;
796 bins.push_back(start_mz_in);
799 start_mz_in = end_mz_out;
810 QString fileName =
"/tmp/massSpecDataBasedBins.txt";
812 qDebug() <<
"Writing the list of bins setup in the "
813 "mass spectrum in file "
816 QFile file(fileName);
817 file.open(QIODevice::WriteOnly);
819 QTextStream fileStream(&file);
821 for(
auto &&bin : m_bins)
822 fileStream << QString(
"[%1-%2]\n")
823 .arg(bin.startMzIn, 0,
'f', 10)
824 .arg(bin.endMzOut, 0,
'f', 10);
829 qDebug() <<
"elements."
830 <<
"starting with mz" << m_bins.front().startMzIn <<
"ending with mz"
831 << m_bins.back().endMzOut;
847 for(
int iter = 0; iter < offset; ++iter)
848 offset_lead += spacer;
850 QString text = offset_lead;
851 text +=
"m/z integration parameters:\n";
853 QString new_lead = QString(
"%1%2").arg(offset_lead).arg(spacer);
857 text.append(QString::asprintf(
"Smallest (first) m/z: %.6f\n",
m_smallestMz));
861 text.append(QString::asprintf(
"Greatest (last) m/z: %.6f\n",
m_greatestMz));
868 text.append(
"Binning logic:\n");
876 text.append(QString(
"Bin size model: %1\n").arg(
m_binSizeModel->toString()));
895 text.append(QString(
"Bin size model: %1\n").arg(
m_binSizeModel->toString()));
909 qDebug() <<
"registerJsConstructor for MzIntegrationParams to QJSEngine.";
913 qWarning() <<
"Cannot register class: engine is null";
919 enumObject = engine->newObject();
921 enumObject.setProperty(
"dataBased",
923 enumObject.setProperty(
"arbitrary",
925 engine->globalObject().setProperty(
"BinningType", enumObject);
927 enumObject = engine->newObject();
928 enumObject.setProperty(
930 enumObject.setProperty(
931 "fromSettingsBinSizeModelPartial",
933 enumObject.setProperty(
934 "fromSettingsBinSizeModelFull",
936 enumObject.setProperty(
"fromSettingsFull",
938 engine->globalObject().setProperty(
"InitializationResult", enumObject);
941 QJSValue jsMetaObject = engine->newQMetaObject(&MzIntegrationParams::staticMetaObject);
942 engine->globalObject().setProperty(
"MzIntegrationParams", jsMetaObject);
Class to represent a mass spectrum.
void sortMz()
Sort the DataPoint instances of this spectrum.
The MzIntegrationParams class provides the parameters definining how m/z !
void binSizeDivisorChanged()
int getDecimalPlaces() const
@ REMOVE_ZERO_DATA_POINTS
Q_INVOKABLE MzIntegrationParams(QObject *parent=nullptr)
Q_INVOKABLE void updateGreatestMz(double value)
int getBinSizeDivisor() const
BinningType m_binningType
Q_INVOKABLE InitializationResult initialize(const QString &text)
void setBinSizeModel(pappso::PrecisionPtr bin_size_model_p)
void setBinSizeDivisor(int divisor)
std::vector< double > createArbitraryBins()
void setGreatestMz(double value)
void setSmallestMz(double value)
bool isRemoveZeroValDataPoints() const
double getSmallestMz() const
pappso::PrecisionPtr m_binSizeModel
Q_INVOKABLE bool isValid() const
BinningType getBinningType() const
pappso::PrecisionPtr getBinSizeModel() const
Q_INVOKABLE bool hasValidMzRange() const
@ DATA_BASED
binning based on mass spectral data
@ ARBITRARY
binning based on arbitrary bin size value
void decimalPlacesChanged()
static void registerJsConstructor(QJSEngine *engine)
void removeZeroValDataPointsChanged()
Q_INVOKABLE void updateSmallestMz(double value)
void binningTypeChanged()
Q_INVOKABLE MzIntegrationParams * clone(QObject *parent=nullptr) const
Q_INVOKABLE void setMzValues(double smallest, double greatest)
bool m_removeZeroValDataPoints
void setBinningType(BinningType binningType)
Q_INVOKABLE void reset()
Reset the instance to default values.
std::vector< double > createDataBasedBins(pappso::MassSpectrumCstSPtr massSpectrum)
Q_INVOKABLE QString toString() const
void setDecimalPlaces(int decimal_places)
Q_INVOKABLE std::vector< double > createBins()
void setRemoveZeroValDataPoints(bool removeOrNot=true)
virtual ~MzIntegrationParams()
double getGreatestMz() const
static PrecisionPtr getResInstance(pappso_double value)
get a resolution precision pointer
static PrecisionPtr fromString(const QString &str)
get a precision pointer from a string
static PrecisionPtr getPpmInstance(pappso_double value)
get a ppm precision pointer
static int zeroDecimalsInValue(pappso_double value)
0.11 would return 0 (no empty decimal) 2.001 would return 2 1000.0001254 would return 3
tries to keep as much as possible monoisotopes, removing any possible C13 peaks and changes multichar...
MzIntegrationParams::BinningType getBinningTypeFromString(const QString &text)
std::map< MzIntegrationParams::BinningType, QString > binningTypeMap
Map relating the BinningType to a textual representation.
std::shared_ptr< const MassSpectrum > MassSpectrumCstSPtr
const PrecisionBase * PrecisionPtr