/** Initialize unit conversion helper * This method is interface to internal initialize method, which actually takes all parameters UnitConversion helper needs from * targetWSDescr class * @param targetWSDescr -- the class which contains all information about target workspace including energy transfer mode, number of dimensions, input workspace etc. * @param unitsTo -- the ID of the units conversion helper would help to convert to * @param forceViaTOF -- force to perform unit conversion via TOF even if quick conversion exist (by default, false) * */ void UnitsConversionHelper::initialize(const MDWSDescription &targetWSDescr, const std::string &unitsTo, bool forceViaTOF) { // obtain input workspace units API::MatrixWorkspace_const_sptr inWS2D = targetWSDescr.getInWS(); if (!inWS2D) throw(std::runtime_error("UnitsConversionHelper::initialize Should not be " "able to call this function when workpsace is " "undefined")); API::NumericAxis *pAxis = dynamic_cast<API::NumericAxis *>(inWS2D->getAxis(0)); if (!pAxis) throw(std::invalid_argument( "Cannot retrieve numeric X axis from the input workspace: " + inWS2D->name())); std::string unitsFrom = inWS2D->getAxis(0)->unit()->unitID(); // get detectors positions and other data needed for units conversion: if (!(targetWSDescr.m_PreprDetTable)) throw std::runtime_error("MDWSDescription does not have a detector table"); int Emode = (int)targetWSDescr.getEMode(); this->initialize(unitsFrom, unitsTo, targetWSDescr.m_PreprDetTable, Emode, forceViaTOF); }
void MDTransfNoQ::initialize(const MDWSDescription &ConvParams) { // get pointer to the positions of the detectors std::vector<Kernel::V3D> const &DetDir = ConvParams.m_PreprDetTable->getColVector<Kernel::V3D>("DetDirections"); m_Det = &DetDir[0]; // // get min and max values defined by the algorithm. ConvParams.getMinMax(m_DimMin, m_DimMax); m_NMatrixDim = getNMatrixDimensions(Kernel::DeltaEMode::Undefined, ConvParams.getInWS()); m_AddDimCoordinates = ConvParams.getAddCoord(); API::NumericAxis *pXAx; this->getAxes(ConvParams.getInWS(), pXAx, m_YAxis); }
void UnitsConversionHelper::initialize(const MDWSDescription &TWSD, const std::string &units_to) { // obtain input workspace units API::MatrixWorkspace_const_sptr inWS2D = TWSD.getInWS(); if(!inWS2D.get()){ throw(std::logic_error("UnitsConversionHelper::initialize Should not be able to call this function when workpsace is undefined")); } API::NumericAxis *pAxis = dynamic_cast<API::NumericAxis *>(inWS2D->getAxis(0)); if(!pAxis){ std::string ERR = "can not retrieve numeric X axis from the input workspace: "+inWS2D->name(); throw(std::invalid_argument(ERR)); } pSourceWSUnit = inWS2D->getAxis(0)->unit(); if(!pSourceWSUnit){ throw(std::logic_error(" can not retrieve source workspace units from the source workspace's numeric axis")); } // Check how input workspace units relate to the units requested UnitCnvrsn = analyzeUnitsConversion(pSourceWSUnit->unitID(),units_to); // get units class, requested by ChildAlgorithm pTargetUnit = Kernel::UnitFactory::Instance().create(units_to); if(!pTargetUnit){ throw(std::logic_error(" can not retrieve target unit from the units factory")); } // get detectors positions and other data needed for units conversion: pTwoTheta = &(TWSD.getDetectors()->getTwoTheta()); pL2 = &(TWSD.getDetectors()->getL2()); L1 = TWSD.getDetectors()->getL1(); // get efix efix = TWSD.getEi(); emode = (int)TWSD.getEMode(); }