bool MZTrafoModel::train( const CalibrationData& cd, MODELTYPE md, bool use_RANSAC, double rt_left /*= -std::numeric_limits<double>::max()*/, double rt_right /*= std::numeric_limits<double>::max() */ ) { std::vector<double> obs_mz; std::vector<double> theo_mz; std::vector<double> weights; const CalibrationData* p_cd; CalibrationData cdm; Size i, ie; // CalibrationData's start-to-end interval if (cd.getNrOfGroups() > 0) // we have lock mass traces { // this is extra work, since we need to collect peak groups and compute the median cdm = cd.median(rt_left, rt_right); p_cd = &cdm; i = 0; ie = cdm.size(); } else { i = std::distance(cd.begin(), lower_bound(cd.begin(), cd.end(), rt_left, RichPeak2D::RTLess())); ie = std::distance(cd.begin(), upper_bound(cd.begin(), cd.end(), rt_right, RichPeak2D::RTLess())); p_cd = &cd; } for (Size j = i; j != ie; ++j) { obs_mz.push_back(p_cd->getError(j)); // could be ppm or [Th], depending on cd::use_ppm_ theo_mz.push_back(p_cd->getRefMZ(j)); weights.push_back(p_cd->getWeight(j)); } this->rt_ = (rt_left + rt_right) / 2; return (train(obs_mz, theo_mz, weights, md, use_RANSAC)); }
bool InputDevice::SetCalibration(const CalibrationData& data) { bool ok = true; CalibrationData::const_iterator y = data.begin(); for (; y != data.end(); ++y) { const CalibrationElement& calibration = *y; ElementArray::iterator x = element_array_.begin(); for (; x != element_array_.end(); ++x) { InputElement* _element = *x; if (_element->GetName() == calibration.first) { ok &= _element->SetCalibration(calibration.second); } } } return (ok); }