/** * Create the output workspace in the right shape. * @param inWS : Input workspace for dimensionality * @param pbins : User provided binning * @param logger : Logging object * @return */ MDHistoWorkspace_sptr createShapedOutput(IMDHistoWorkspace const *const inWS, std::vector<std::vector<double>> pbins, Logger &logger) { const size_t nDims = inWS->getNumDims(); std::vector<Mantid::Geometry::IMDDimension_sptr> dimensions(nDims); for (size_t i = 0; i < nDims; ++i) { IMDDimension_const_sptr inDim = inWS->getDimension(i); auto outDim = boost::make_shared<MDHistoDimension>(inDim.get()); // Apply dimensions as inputs. if (i < pbins.size() && integrationBinning(pbins[i])) { auto binning = pbins[i]; outDim->setRange( 1 /*single bin*/, static_cast<Mantid::coord_t>(binning.front()) /*min*/, static_cast<Mantid::coord_t>( binning.back()) /*max*/); // Set custom min, max and nbins. } else if (i < pbins.size() && similarBinning(pbins[i])) { auto binning = pbins[i]; Mantid::coord_t pMin = static_cast<Mantid::coord_t>(binning.front()); Mantid::coord_t pMax = static_cast<Mantid::coord_t>(binning.back()); size_t numberOfBins; setMinMaxBins(pMin, pMax, numberOfBins, inDim, logger); outDim->setRange(numberOfBins, static_cast<Mantid::coord_t>(pMin) /*min*/, static_cast<Mantid::coord_t>( pMax) /*max*/); // Set custom min, max and nbins. } dimensions[i] = outDim; } return boost::make_shared<MDHistoWorkspace>(dimensions); }
bool MDGeometryBuilderXML<CheckDimensionPolicy>::addZDimension( IMDDimension_const_sptr dimension) const { bool bAdded = false; if (dimension.get() != NULL) { applyPolicyChecking(dimension); addOrdinaryDimension(dimension); m_spZDimension = dimension; m_changed = true; bAdded = true; } return bAdded; }
bool MDGeometryBuilderXML<CheckDimensionPolicy>::addOrdinaryDimension( IMDDimension_const_sptr dimensionToAdd) const { bool bAdded = false; // Addition fails by default. if (dimensionToAdd.get() != NULL) { CompareIMDDimension_const_sptr comparitor(dimensionToAdd); DimensionContainerType::iterator location = std::find_if( m_vecDimensions.begin(), m_vecDimensions.end(), comparitor); if (location == m_vecDimensions.end()) { m_vecDimensions.push_back(dimensionToAdd); bAdded = true; m_changed = true; } } return bAdded; }