void MDHistoToWorkspace2D::recurseData(IMDHistoWorkspace_sptr inWS, Workspace2D_sptr outWS, size_t currentDim, coord_t *pos) { boost::shared_ptr<const IMDDimension> dim = inWS->getDimension(currentDim); if (currentDim == rank - 1) { MantidVec &Y = outWS->dataY(currentSpectra); for (unsigned int j = 0; j < dim->getNBins(); j++) { pos[currentDim] = dim->getX(j); Y[j] = inWS->getSignalAtCoord( pos, static_cast<Mantid::API::MDNormalization>(0)); } MantidVec &E = outWS->dataE(currentSpectra); // MSVC compiler can't figure out the correct overload with out the function // cast on sqrt std::transform(Y.begin(), Y.end(), E.begin(), (double (*)(double))std::sqrt); std::vector<double> xData; for (unsigned int i = 0; i < dim->getNBins(); i++) { xData.push_back(dim->getX(i)); } outWS->setX(currentSpectra, xData); outWS->getSpectrum(currentSpectra) ->setSpectrumNo(static_cast<specid_t>(currentSpectra)); currentSpectra++; } else { // recurse deeper for (int i = 0; i < static_cast<int>(dim->getNBins()); i++) { pos[currentDim] = dim->getX(i); recurseData(inWS, outWS, currentDim + 1, pos); } } }