/// Fills possibleHKLs with all HKLs from the supplied PeaksWorkspace. void PredictPeaks::fillPossibleHKLsUsingPeaksWorkspace( const PeaksWorkspace_sptr &peaksWorkspace, std::vector<V3D> &possibleHKLs) const { possibleHKLs.clear(); possibleHKLs.reserve(peaksWorkspace->getNumberPeaks()); bool roundHKL = getProperty("RoundHKL"); /* Q is at the end multiplied with the factor determined in the * constructor (-1 for crystallography, 1 otherwise). So to avoid * "flippling HKLs" when it's not required, the HKLs of the input * workspace are also multiplied by the factor that is appropriate * for the convention stored in the workspace. */ double peaks_q_convention_factor = get_factor_for_q_convention(peaksWorkspace->getConvention()); for (int i = 0; i < static_cast<int>(peaksWorkspace->getNumberPeaks()); ++i) { IPeak &p = peaksWorkspace->getPeak(i); // Get HKL from that peak V3D hkl = p.getHKL() * peaks_q_convention_factor; if (roundHKL) hkl.round(); possibleHKLs.push_back(hkl); } // for each hkl in the workspace }
/// Assigns the supplied peaks to the proper UniqueReflection. Peaks for which /// the reflection family can not be found are ignored. void UniqueReflectionCollection::addObservations( const std::vector<Peak> &peaks) { for (auto const &peak : peaks) { V3D hkl = peak.getHKL(); hkl.round(); auto reflection = m_reflections.find(m_pointgroup->getReflectionFamily(hkl)); if (reflection != m_reflections.end()) { (*reflection).second.addPeak(peak); } } }
/// Fills possibleHKLs with all HKLs from the supplied PeaksWorkspace. void PredictPeaks::fillPossibleHKLsUsingPeaksWorkspace( const PeaksWorkspace_sptr &peaksWorkspace, std::vector<V3D> &possibleHKLs) const { possibleHKLs.clear(); possibleHKLs.reserve(peaksWorkspace->getNumberPeaks()); bool roundHKL = getProperty("RoundHKL"); for (int i = 0; i < static_cast<int>(peaksWorkspace->getNumberPeaks()); ++i) { IPeak &p = peaksWorkspace->getPeak(i); // Get HKL from that peak V3D hkl = p.getHKL(); if (roundHKL) hkl.round(); possibleHKLs.push_back(hkl); } // for each hkl in the workspace }
/** * @brief SortHKL::getUniqueReflections * * This method returns a map that contains a UniqueReflection- * object with 0 to n Peaks each. The key of the map is the * reflection index all peaks are equivalent to. * * @param peaks :: Vector of peaks to assign. * @param cell :: UnitCell to use for calculation of possible reflections. * @return Map of unique reflections. */ std::map<V3D, UniqueReflection> SortHKL::getUniqueReflections(const std::vector<Peak> &peaks, const UnitCell &cell) const { ReflectionCondition_sptr centering = getCentering(); PointGroup_sptr pointGroup = getPointgroup(); std::pair<double, double> dLimits = getDLimits(peaks, cell); std::map<V3D, UniqueReflection> uniqueReflectionInRange = getPossibleUniqueReflections(cell, dLimits, pointGroup, centering); for (auto const &peak : peaks) { V3D hkl = peak.getHKL(); hkl.round(); uniqueReflectionInRange.at(pointGroup->getReflectionFamily(hkl)) .addPeak(peak); } return uniqueReflectionInRange; }