59 const bool CombineMatchingPeaks =
getProperty(
"CombineMatchingPeaks");
62 if (LHSWorkspace->getInstrument()->getName() != RHSWorkspace->getInstrument()->getName()) {
63 g_log.
warning(
"The two input workspaces do not appear to come from data "
64 "take on the same instrument");
66 if (LHSWorkspace->sample().getName() != RHSWorkspace->sample().getName()) {
67 g_log.
warning(
"The two input workspaces do not appear to relate to the same sample");
73 const int rhs_n_peaks = RHSWorkspace->getNumberPeaks();
82 std::vector<Kernel::V3D> rhsModVectors;
83 std::vector<Kernel::V3D> lhsModVectors;
86 for (
int i = 0; i < 3; ++i) {
87 const auto modVecR = RHSWorkspace->sample().getOrientedLattice().getModVec(i);
89 if (!(modVecR[0] == 0 && modVecR[1] == 0 && modVecR[2] == 0)) {
90 rhsModVectors.push_back(modVecR);
92 const auto modVecL = LHSWorkspace->sample().getOrientedLattice().getModVec(i);
93 if (!(modVecL[0] == 0 && modVecL[1] == 0 && modVecL[2] == 0)) {
94 lhsModVectors.push_back(modVecL);
99 std::remove_copy_if(rhsModVectors.begin(), rhsModVectors.end(), back_inserter(lhsModVectors),
101 return lhsModVectors.end() != std::find(lhsModVectors.begin(), lhsModVectors.end(), modVec);
105 if (lhsModVectors.size() > 3) {
106 g_log.
warning(
"There are too many modulation vectors. Using vectors from "
111 for (
size_t i = 0; i < lhsModVectors.size(); ++i) {
113 output->mutableSample().getOrientedLattice().setModVec1(lhsModVectors[i]);
115 output->mutableSample().getOrientedLattice().setModVec2(lhsModVectors[i]);
117 output->mutableSample().getOrientedLattice().setModVec3(lhsModVectors[i]);
121 }
catch (std::runtime_error &e) {
122 g_log.
error() <<
"Failed to combine modulation vectors with the following "
128 if (!CombineMatchingPeaks) {
131 for (
int i = 0; i < rhs_n_peaks; i++) {
132 output->addPeak(RHSWorkspace->getPeak(i));
141 const int lhs_n_peaks = LHSWorkspace->getNumberPeaks();
142 std::vector<V3D> q_vectors;
143 for (
int i = 0; i < lhs_n_peaks; i++)
144 q_vectors.emplace_back(LHSWorkspace->getPeak(i).getQSampleFrame());
148 for (
int j = 0; j < rhs_n_peaks; j++) {
154 for (
int i = 0; i < lhs_n_peaks; i++) {
164 output->addPeak(currentPeak);