31#include <boost/container/flat_set.hpp>
32#include <boost/math/special_functions/round.hpp>
48 useAlgorithm(
"SCDCalibratePanels", 2);
49 deprecatedDate(
"2025-05-27");
61 std::vector<std::pair<std::string, bool>> criteria{{
"BankName",
true}};
62 peaksWs->sort(criteria);
68 std::vector<Peak> &peaks = peaksWs->getPeaks();
69 auto it = std::remove_if(peaks.begin(), peaks.end(), [edge, &compInfo](
const Peak &pk) {
70 return edgePixel(compInfo, pk.getBankName(), pk.getCol(), pk.getRow(), edge);
72 peaks.erase(it, peaks.end());
76 auto nPeaks =
static_cast<int>(peaksWs->getNumberPeaks());
80 bool snapPanels =
getProperty(
"CalibrateSNAPPanels");
87 boost::container::flat_set<string> MyBankNames;
88 boost::container::flat_set<string> MyPanels;
90 MyPanels.insert(
"East");
91 MyPanels.insert(
"West");
92 int maxRecurseDepth = 4;
95 for (
int num = 1; num < 64; ++num) {
97 std::ostringstream mess;
98 mess <<
"bank" << num;
102 MyBankNames.insert(mess.str());
107 for (
int i = 0; i < nPeaks; ++i) {
108 std::string bankName = peaksWs->getPeak(i).getBankName();
109 if (bankName !=
"None")
110 MyBankNames.insert(bankName);
114 std::vector<std::string> fit_workspaces(MyBankNames.size() + MyPanels.size(),
"fit_");
115 std::vector<std::string> parameter_workspaces(MyBankNames.size() + MyPanels.size(),
"params_");
116 int bankAndPanelCount = 0;
117 for (
const auto &MyPanel : MyPanels) {
118 fit_workspaces[bankAndPanelCount] += MyPanel;
119 parameter_workspaces[bankAndPanelCount] += MyPanel;
123 findL2(MyPanels, peaksWs);
125 double delta = results->
cell<
double>(4, 1);
126 g_log.
notice() <<
"For west rotation change det_arc1 " <<
delta <<
" degrees\n";
127 results = AnalysisDataService::Instance().retrieveWS<
ITableWorkspace>(
"params_East");
129 g_log.
notice() <<
"For east rotation change det_arc2 " <<
delta <<
" degrees\n";
132 for (
const auto &MyBankName : MyBankNames) {
133 fit_workspaces[bankAndPanelCount] += MyBankName;
134 parameter_workspaces[bankAndPanelCount] += MyBankName;
138 findL2(MyBankNames, peaksWs);
142 for (
int j = bankAndPanelCount - 1; j >= 0; j--) {
143 if (!AnalysisDataService::Instance().doesExist(fit_workspaces[j]))
144 fit_workspaces.erase(fit_workspaces.begin() + j);
145 if (!AnalysisDataService::Instance().doesExist(parameter_workspaces[j]))
146 parameter_workspaces.erase(parameter_workspaces.begin() + j);
152 parameter_workspaces.emplace_back(
"params_L1");
153 fit_workspaces.emplace_back(
"fit_L1");
157 parameter_workspaces.emplace_back(
"params_T0");
158 fit_workspaces.emplace_back(
"fit_T0");
160 std::sort(parameter_workspaces.begin(), parameter_workspaces.end());
161 std::sort(fit_workspaces.begin(), fit_workspaces.end());
164 auto groupAlg = AlgorithmManager::Instance().createUnmanaged(
"GroupWorkspaces");
165 groupAlg->initialize();
166 groupAlg->setProperty(
"InputWorkspaces", parameter_workspaces);
167 groupAlg->setProperty(
"OutputWorkspace",
"Fit_Parameters");
170 groupAlg = AlgorithmManager::Instance().createUnmanaged(
"GroupWorkspaces");
171 groupAlg->initialize();
172 groupAlg->setProperty(
"InputWorkspaces", fit_workspaces);
173 groupAlg->setProperty(
"OutputWorkspace",
"Fit_Residuals");
180 for (
int i = 0; i < nPeaks; i++) {
185 }
catch (
const std::exception &exc) {
186 g_log.
notice() <<
"Problem in applying calibration to peak " << i <<
" : " << exc.what() <<
"\n";
195 string DetCalFileName =
getProperty(
"DetCalFilename");
196 API::Run &run = peaksWs->mutableRun();
209 ColWksp->setInstrument(inst2);
212 RowWksp->setInstrument(inst2);
215 TofWksp->setInstrument(inst2);
216 OrientedLattice lattice = peaksWs->mutableSample().getOrientedLattice();
219 peaksWs->sort(criteria);
221 for (
int i = 0; i < static_cast<int>(MyBankNames.size()); ++i) {
223 const std::string &bankName = *std::next(MyBankNames.begin(), i);
224 size_t k = bankName.find_last_not_of(
"0123456789");
226 if (k < bankName.length())
227 bank = boost::lexical_cast<int>(bankName.substr(k + 1));
228 ColWksp->getSpectrum(i).setSpectrumNo(
specnum_t(bank));
229 RowWksp->getSpectrum(i).setSpectrumNo(
specnum_t(bank));
230 TofWksp->getSpectrum(i).setSpectrumNo(
specnum_t(bank));
231 auto &ColX = ColWksp->mutableX(i);
232 auto &ColY = ColWksp->mutableY(i);
233 auto &RowX = RowWksp->mutableX(i);
234 auto &RowY = RowWksp->mutableY(i);
235 auto &TofX = TofWksp->mutableX(i);
236 auto &TofY = TofWksp->mutableY(i);
238 for (
int j = 0; j < nPeaks; j++) {
239 Peak peak = peaksWs->getPeak(j);
244 ColX[icount] = peak.
getCol();
245 ColY[icount] = theoretical.
getCol();
246 RowX[icount] = peak.
getRow();
247 RowY[icount] = theoretical.
getRow();
248 TofX[icount] = peak.
getTOF();
249 TofY[icount] = theoretical.
getTOF();
270 save->setProperty(
"InputWorkspace", outputWS);
271 save->setProperty(
"FileName", outputFile);
286 std::ostringstream fun_str;
287 fun_str <<
"name=SCDPanelErrors,Workspace=" << peaksWs->getName() <<
",Bank=moderator";
288 std::ostringstream tie_str;
289 tie_str <<
"XShift=0.0,YShift=0.0,XRotate=0.0,YRotate=0.0,ZRotate=0.0,"
290 "ScaleWidth=1.0,ScaleHeight=1.0,T0Shift ="
292 fitL1_alg->setPropertyValue(
"Function", fun_str.str());
293 fitL1_alg->setProperty(
"Ties", tie_str.str());
294 fitL1_alg->setProperty(
"InputWorkspace", L1WS);
295 fitL1_alg->setProperty(
"CreateOutput",
true);
296 fitL1_alg->setProperty(
"Output",
"fit");
297 fitL1_alg->executeAsChildAlg();
298 std::string fitL1Status = fitL1_alg->getProperty(
"OutputStatus");
299 double chisqL1 = fitL1_alg->getProperty(
"OutputChi2overDoF");
301 AnalysisDataService::Instance().addOrReplace(
"fit_L1", fitL1);
303 AnalysisDataService::Instance().addOrReplace(
"params_L1", paramsL1);
304 double deltaL1 = paramsL1->getRef<
double>(
"Value", 2);
306 com.
moveDetector(0.0, 0.0, deltaL1, 0.0, 0.0, 0.0, 1.0, 1.0,
"moderator", peaksWs);
307 g_log.
notice() <<
"L1 = " << -peaksWs->getInstrument()->getSource()->getPos().Z() <<
" " << fitL1Status
308 <<
" Chi2overDoF " << chisqL1 <<
"\n";
322 std::ostringstream fun_str;
323 fun_str <<
"name=SCDPanelErrors,Workspace=" << peaksWs->getName() <<
",Bank=none";
324 std::ostringstream tie_str;
325 tie_str <<
"XShift=0.0,YShift=0.0,ZShift=0.0,XRotate=0.0,YRotate=0.0,ZRotate=0.0,"
326 "ScaleWidth=1.0,ScaleHeight=1.0";
327 fitT0_alg->setPropertyValue(
"Function", fun_str.str());
328 fitT0_alg->setProperty(
"Ties", tie_str.str());
329 fitT0_alg->setProperty(
"InputWorkspace", T0WS);
330 fitT0_alg->setProperty(
"CreateOutput",
true);
331 fitT0_alg->setProperty(
"Output",
"fit");
333 fitT0_alg->setProperty(
"Minimizer",
"Simplex");
334 fitT0_alg->setProperty(
"MaxIterations", 1000);
335 fitT0_alg->executeAsChildAlg();
336 std::string fitT0Status = fitT0_alg->getProperty(
"OutputStatus");
337 double chisqT0 = fitT0_alg->getProperty(
"OutputChi2overDoF");
339 AnalysisDataService::Instance().addOrReplace(
"fit_T0", fitT0);
341 AnalysisDataService::Instance().addOrReplace(
"params_T0", paramsT0);
342 mT0 = paramsT0->getRef<
double>(
"Value", 8);
343 API::Run &run = peaksWs->mutableRun();
346 if (run.hasProperty(
"T0")) {
349 run.addProperty<
double>(
"T0",
mT0 + oldT0,
true);
350 g_log.
notice() <<
"T0 = " <<
mT0 <<
" " << fitT0Status <<
" Chi2overDoF " << chisqT0 <<
"\n";
351 for (
int i = 0; i < peaksWs->getNumberPeaks(); i++) {
366 g_log.
error(
"Can't locate CalculateUMatrix algorithm");
377 peaksWs->sample().hasOrientedLattice()) {
382 alpha = latt.
alpha();
384 gamma = latt.
gamma();
386 ub_alg->setProperty(
"PeaksWorkspace", peaksWs);
387 ub_alg->setProperty(
"a", a);
388 ub_alg->setProperty(
"b", b);
389 ub_alg->setProperty(
"c", c);
390 ub_alg->setProperty(
"alpha", alpha);
391 ub_alg->setProperty(
"beta", beta);
392 ub_alg->setProperty(
"gamma", gamma);
393 ub_alg->executeAsChildAlg();
397 alg->setPropertyValue(
"PeaksWorkspace", peaksWs->getName());
398 alg->setProperty(
"Tolerance", 0.15);
399 alg->executeAsChildAlg();
400 int numIndexed = alg->getProperty(
"NumIndexed");
402 g_log.
notice() << peaksWs->sample().getOrientedLattice().getUB() <<
"\n";
416 boost::container::flat_set<string> &AllBankName,
double T0,
417 const string &filename) {
419 if (filename.empty())
422 g_log.
notice() <<
"Saving DetCal file in " << filename <<
"\n";
425 const size_t number_spectra = instrument->getNumberDetectors();
428 wksp->setInstrument(instrument);
429 wksp->rebuildSpectraMapping(
true );
432 std::vector<string> banknames(AllBankName.begin(), AllBankName.end());
436 alg->setProperty(
"InputWorkspace", wksp);
437 alg->setProperty(
"Filename", filename);
438 alg->setProperty(
"TimeOffset", T0);
439 alg->setProperty(
"BankNames", banknames);
440 alg->executeAsChildAlg();
445 "Workspace of Indexed Peaks");
447 auto mustBePositive = std::make_shared<BoundedValidator<double>>();
448 mustBePositive->setLower(0.0);
451 "Lattice Parameter a (Leave empty to use lattice constants "
452 "in peaks workspace)");
454 "Lattice Parameter b (Leave empty to use lattice constants "
455 "in peaks workspace)");
457 "Lattice Parameter c (Leave empty to use lattice constants "
458 "in peaks workspace)");
460 "Lattice Parameter alpha in degrees (Leave empty to use "
461 "lattice constants in peaks workspace)");
463 "Lattice Parameter beta in degrees (Leave empty to use "
464 "lattice constants in peaks workspace)");
466 "Lattice Parameter gamma in degrees (Leave empty to use "
467 "lattice constants in peaks workspace)");
468 declareProperty(
"ChangeL1",
true,
"Change the L1(source to sample) distance");
471 "Change the height and width of the "
472 "detectors. Implemented only for "
473 "RectangularDetectors.");
475 declareProperty(
"EdgePixels", 0,
"Remove peaks that are at pixels this close to edge. ");
476 declareProperty(
"CalibrateBanks",
true,
"Calibrate the panels of the banks.");
478 "Calibrate the 3 X 3 panels of the "
482 const std::vector<std::string> detcalExts{
".DetCal",
".Det_Cal"};
484 std::make_unique<FileProperty>(
"DetCalFilename",
"SCDCalibrate.DetCal",
FileProperty::Save, detcalExts),
485 "Path to an ISAW-style .detcal file to save.");
488 "Path to an Mantid .xml description(for LoadParameterFile) file to "
492 "Path to a NeXus file comparing calculated and theoretical "
493 "column of each peak.");
496 "Path to a NeXus file comparing calculated and theoretical "
497 "row of each peak.");
500 "Path to a NeXus file comparing calculated and theoretical "
501 "TOF of each peak.");
503 const string OUTPUTS(
"Outputs");
512 ostream <<
" <parameter name =\"" <<
name <<
"\"><value val=\"" <<
value <<
"\" /> </parameter>\n";
517 if (FileName.empty())
520 g_log.
notice() <<
"Saving parameter file as " << FileName <<
"\n";
523 ofstream oss3(FileName.c_str());
524 oss3 <<
"<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n";
526 oss3 <<
" <parameter-file instrument=\"" << instrument.
getName() <<
"\" valid-from=\""
527 <<
pmap->instrumentMetadata().validFromDate().toISO8601String() <<
"\">\n";
530 for (
auto bankName : AllBankNames) {
531 if (instrument.
getName().compare(
"CORELLI") == 0.0)
532 bankName.append(
"/sixteenpack");
533 oss3 <<
"<component-link name=\"" << bankName <<
"\">\n";
536 Quat relRot = bank->getRelativeRot();
544 V3D pos1 = bank->getRelativePos();
549 vector<double> oldScalex =
pmap->getDouble(bank->getName(),
string(
"scalex"));
550 vector<double> oldScaley =
pmap->getDouble(bank->getName(),
string(
"scaley"));
553 if (!oldScalex.empty())
558 if (!oldScaley.empty())
563 oss3 << R
"( <parameter name ="scalex"><value val=")" << scalex << "\" /> </parameter>\n";
564 oss3 << R
"( <parameter name ="scaley"><value val=")" << scaley << "\" /> </parameter>\n";
565 oss3 <<
"</component-link>\n";
571 oss3 <<
"<component-link name=\"" << source->getName() <<
"\">\n";
572 V3D sourceRelPos = source->getRelativePos();
577 oss3 <<
"</component-link>\n";
578 oss3 <<
"</parameter-file>\n";
590 for (
int bankIndex = 0; bankIndex < static_cast<int>(MyBankNames.size()); ++bankIndex) {
592 const std::string &iBank = *std::next(MyBankNames.begin(), bankIndex);
593 const std::string bankName =
"__PWS_" + iBank;
595 AnalysisDataService::Instance().addOrReplace(bankName, local);
596 std::vector<Peak> &localPeaks = local->getPeaks();
597 auto lit = std::remove_if(localPeaks.begin(), localPeaks.end(), [&iBank](
const Peak &pk) {
598 std::string name = pk.getBankName();
599 IComponent_const_sptr det = pk.getInstrument()->getComponentByName(name);
600 if (det && iBank.substr(0, 4) !=
"bank") {
601 IComponent_const_sptr parent = det->getParent();
603 IComponent_const_sptr grandparent = parent->getParent();
605 name = grandparent->getName();
610 return name != iBank;
612 localPeaks.erase(lit, localPeaks.end());
614 int nBankPeaks = local->getNumberPeaks();
615 if (nBankPeaks < 6) {
616 g_log.
notice() <<
"Too few peaks for " << iBank <<
"\n";
623 auto &outSpec = q3DWS->getSpectrum(0);
624 auto &yVec = outSpec.mutableY();
625 auto &eVec = outSpec.mutableE();
626 auto &xVec = outSpec.mutableX();
629 for (
int i = 0; i < nBankPeaks; i++) {
639 for (
int j = 0; j < 3; j++) {
653 std::ostringstream fun_str;
654 fun_str <<
"name=SCDPanelErrors,Workspace=" + bankName <<
",Bank=" << iBank;
655 fit_alg->setPropertyValue(
"Function", fun_str.str());
656 std::ostringstream tie_str;
657 tie_str <<
"ScaleWidth=1.0,ScaleHeight=1.0,T0Shift =" <<
mT0;
658 fit_alg->setProperty(
"Ties", tie_str.str());
659 fit_alg->setProperty(
"InputWorkspace", q3DWS);
660 fit_alg->setProperty(
"CreateOutput",
true);
661 fit_alg->setProperty(
"Output",
"fit");
662 fit_alg->executeAsChildAlg();
663 std::string fitStatus = fit_alg->getProperty(
"OutputStatus");
664 double fitChisq = fit_alg->getProperty(
"OutputChi2overDoF");
665 g_log.
notice() << iBank <<
" " << fitStatus <<
" Chi2overDoF " << fitChisq <<
"\n";
667 AnalysisDataService::Instance().addOrReplace(
"fit_" + iBank, fitWS);
669 AnalysisDataService::Instance().addOrReplace(
"params_" + iBank, paramsWS);
670 double xShift = paramsWS->getRef<
double>(
"Value", 0);
671 double yShift = paramsWS->getRef<
double>(
"Value", 1);
672 double zShift = paramsWS->getRef<
double>(
"Value", 2);
673 double xRotate = paramsWS->getRef<
double>(
"Value", 3);
674 double yRotate = paramsWS->getRef<
double>(
"Value", 4);
675 double zRotate = paramsWS->getRef<
double>(
"Value", 5);
676 double scaleWidth = 1.0;
677 double scaleHeight = 1.0;
680 std::shared_ptr<const Geometry::RectangularDetector> rectDet =
681 std::dynamic_pointer_cast<const Geometry::RectangularDetector>(comp);
682 if (rectDet && changeSize) {
690 fit2_alg->setPropertyValue(
"Function", fun_str.str());
691 std::ostringstream tie_str2;
692 tie_str2 <<
"XShift=" << xShift <<
",YShift=" << yShift <<
",ZShift=" << zShift <<
",XRotate=" << xRotate
693 <<
",YRotate=" << yRotate <<
",ZRotate=" << zRotate <<
",T0Shift =" <<
mT0;
694 fit2_alg->setProperty(
"Ties", tie_str2.str());
695 fit2_alg->setProperty(
"InputWorkspace", q3DWS);
696 fit2_alg->setProperty(
"CreateOutput",
true);
697 fit2_alg->setProperty(
"Output",
"fit");
698 fit2_alg->executeAsChildAlg();
699 std::string fit2Status = fit2_alg->getProperty(
"OutputStatus");
700 double fit2Chisq = fit2_alg->getProperty(
"OutputChi2overDoF");
701 g_log.
notice() << iBank <<
" " << fit2Status <<
" Chi2overDoF " << fit2Chisq <<
"\n";
702 fitWS = fit2_alg->getProperty(
"OutputWorkspace");
703 AnalysisDataService::Instance().addOrReplace(
"fit_" + iBank, fitWS);
704 paramsWS = fit2_alg->getProperty(
"OutputParameters");
705 AnalysisDataService::Instance().addOrReplace(
"params_" + iBank, paramsWS);
706 scaleWidth = paramsWS->getRef<
double>(
"Value", 6);
707 scaleHeight = paramsWS->getRef<
double>(
"Value", 7);
709 AnalysisDataService::Instance().remove(bankName);
711 det.
moveDetector(xShift, yShift, zShift, xRotate, yRotate, zRotate, scaleWidth, scaleHeight, iBank, peaksWs);
#define DECLARE_ALGORITHM(classname)
double value
The value of the point.
#define PARALLEL_START_INTERRUPT_REGION
Begins a block to skip processing is the algorithm has been interupted Note the end of the block if n...
#define PARALLEL_CRITICAL(name)
#define PARALLEL_END_INTERRUPT_REGION
Ends a block to skip processing is the algorithm has been interupted Note the start of the block if n...
#define PARALLEL_FOR_IF(condition)
Empty definitions - to enable set your complier to enable openMP.
#define PRAGMA_OMP(expression)
#define PARALLEL_CHECK_INTERRUPT_REGION
Adds a check after a Parallel region to see if it was interupted.
void declareProperty(std::unique_ptr< Kernel::Property > p, const std::string &doc="") override
Add a property to the list of managed properties.
TypedValue getProperty(const std::string &name) const override
Get the value of a property.
virtual std::shared_ptr< Algorithm > createChildAlgorithm(const std::string &name, const double startProgress=-1., const double endProgress=-1., const bool enableLogging=true, const int &version=-1)
Create a Child Algorithm.
@ OptionalSave
to specify a file to write to but an empty string is
@ Save
to specify a file to write to, the file may or may not exist
ITableWorkspace is an implementation of Workspace in which the data are organised in columns of same ...
T & cell(size_t row, size_t col)
Get the reference to the element in row row and column col.
bool hasProperty(const std::string &name) const
Does the property exist on the object.
HeldType getPropertyValueAsType(const std::string &name) const
Get the value of a property as the given TYPE.
This class stores information regarding an experimental run as a series of log entries.
A property class for workspaces.
SCDCalibratePanels calibrates instrument parameters for Rectangular Detectors.
void saveXmlFile(const std::string &FileName, const boost::container::flat_set< std::string > &AllBankNames, const Geometry::Instrument &instrument) const
Saves the new instrument to an xml file that can be used with the LoadParameterFile Algorithm.
void init() override
Virtual method - must be overridden by concrete algorithm.
const std::string name() const override
function to return a name of the algorithm, must be overridden in all algorithms
void findT0(int nPeaks, const DataObjects::PeaksWorkspace_sptr &peaksWs)
Function to optimize T0.
void findL2(boost::container::flat_set< std::string > MyBankNames, const DataObjects::PeaksWorkspace_sptr &peaksWs)
Function to optimize L2.
int version() const override
Algorithm's version for identification overriding a virtual method.
void saveIsawDetCal(std::shared_ptr< Geometry::Instrument > &instrument, boost::container::flat_set< std::string > &AllBankName, double T0, const std::string &filename)
Really this is the operator SaveIsawDetCal but only the results of the given banks are saved.
void findU(const DataObjects::PeaksWorkspace_sptr &peaksWs)
Function to calculate U.
void exec() override
Virtual method - must be overridden by concrete algorithm.
void saveNexus(const std::string &outputFile, const API::MatrixWorkspace_sptr &outputWS)
save workspaces
void findL1(int nPeaks, const DataObjects::PeaksWorkspace_sptr &peaksWs)
Function to optimize L1.
const std::string category() const override
Algorithm's category for identification overriding a virtual method.
void moveDetector(double x, double y, double z, double rotx, double roty, double rotz, double scalex, double scaley, std::string detname, const API::Workspace_sptr &inputW) const
Move detectors with parameters.
double getIntensity() const override
Return the integrated peak intensity.
double getSigmaIntensity() const override
Return the error on the integrated peak intensity.
Mantid::Kernel::V3D getHKL() const override
Return the HKL vector.
double getBinCount() const override
Return the # of counts in the bin at its peak.
Mantid::Kernel::Matrix< double > getGoniometerMatrix() const override
Get the goniometer rotation matrix at which this peak was measured.
Structure describing a single-crystal peak.
int getCol() const override
For RectangularDetectors only, returns the column (x) of the pixel of the detector or -1 if not found...
Geometry::Instrument_const_sptr getInstrument() const
Return a shared ptr to the instrument for this peak.
int getRow() const override
For RectangularDetectors only, returns the row (y) of the pixel of the detector or -1 if not found.
void setWavelength(double wavelength) override
Set the incident wavelength of the neutron.
double getL1() const override
Return the L1 flight path length (source to sample), in meters.
double getTOF() const override
Calculate the time of flight (in microseconds) of the neutrons for this peak, using the geometry of t...
double getL2() const override
Return the L2 flight path length (sample to detector), in meters.
const std::string & getBankName() const
Find the name of the bank that is the parent of the detector.
void setInstrument(const Geometry::Instrument_const_sptr &inst)
Set the instrument (and save the source/sample pos).
double getScattering() const override
Calculate the scattering angle of the peak
std::shared_ptr< const IComponent > getComponentByName(const std::string &cname, int nlevels=0) const override
Returns a pointer to the first component of assembly encountered with the given name.
ComponentInfo : Provides a component centric view on to the instrument.
std::string getName() const override
Get the IComponent name.
IComponent_const_sptr getSource() const
Gets a pointer to the source.
std::shared_ptr< ParameterMap > getParameterMap() const
Pointer to the NOT const ParameterMap holding the parameters of the modified instrument components.
Class to implement UB matrix.
const Kernel::DblMatrix & getUB() const
Get the UB matrix.
double alpha() const
Get lattice parameter.
double a(int nd) const
Get lattice parameter a1-a3 as function of index (0-2)
double c() const
Get lattice parameter.
double beta() const
Get lattice parameter.
double b() const
Get lattice parameter.
double gamma() const
Get lattice parameter.
Exception for when an item is not found in a collection.
void setPropertyGroup(const std::string &name, const std::string &group)
Set the group for a given property.
void notice(const std::string &msg)
Logs at notice level.
void error(const std::string &msg)
Logs at error level.
std::vector< double > getEulerAngles(const std::string &convention) const
Calculate the Euler angles that are equivalent to this Quaternion.
static T & Instance()
Return a reference to the Singleton instance, creating it if it does not already exist Creation is do...
void initialize(const double &_l1, const int &_emode, const UnitParametersMap ¶ms)
Initialize the unit to perform conversion using singleToTof() and singleFromTof()
double singleFromTOF(const double tof) const override
Convert a single tof value to this unit.
constexpr double X() const noexcept
Get x.
constexpr double Y() const noexcept
Get y.
constexpr double Z() const noexcept
Get z.
std::shared_ptr< IAlgorithm > IAlgorithm_sptr
shared pointer to Mantid::API::IAlgorithm
std::shared_ptr< ITableWorkspace > ITableWorkspace_sptr
shared pointer to Mantid::API::ITableWorkspace
std::shared_ptr< MatrixWorkspace > MatrixWorkspace_sptr
shared pointer to the matrix workspace base class
void writeXmlParameter(ofstream &ostream, const string &name, const double value)
std::shared_ptr< PeaksWorkspace > PeaksWorkspace_sptr
Typedef for a shared pointer to a peaks workspace.
std::shared_ptr< Workspace2D > Workspace2D_sptr
shared pointer to Mantid::DataObjects::Workspace2D
std::unique_ptr< T > create(const P &parent, const IndexArg &indexArg, const HistArg &histArg)
This is the create() method that all the other create() methods call.
std::shared_ptr< const IComponent > IComponent_const_sptr
Typdef of a shared pointer to a const IComponent.
std::shared_ptr< ParameterMap > ParameterMap_sptr
ParameterMap shared pointer typedef.
std::shared_ptr< const Instrument > Instrument_const_sptr
Shared pointer to an const instrument object.
std::shared_ptr< Instrument > Instrument_sptr
Shared pointer to an instrument object.
std::enable_if< std::is_pointer< Arg >::value, bool >::type threadSafe(Arg workspace)
Thread-safety check Checks the workspace to ensure it is suitable for multithreaded access.
int32_t specnum_t
Typedef for a spectrum Number.
constexpr double EMPTY_DBL() noexcept
Returns what we consider an "empty" double within a property.
Generate a tableworkspace to store the calibration results.
adjust instrument component position and orientation
: detector size scale at y-direction
@ InOut
Both an input & output workspace.