28#include "MantidBeamline/ComponentInfo.h"
29#include "MantidBeamline/DetectorInfo.h"
30#include "MantidBeamline/SpectrumInfo.h"
42#include "MantidTypes/SpectrumDefinition.h"
44#include <boost/algorithm/string.hpp>
45#include <boost/lexical_cast.hpp>
46#include <boost/regex.hpp>
115 }
catch (std::exception &) {
120 std::ostringstream out;
123 const auto instName = inst->getName();
124 out <<
"Instrument: ";
125 if (!instName.empty()) {
126 out << instName <<
" (" << inst->getValidFromDate().toFormattedString(
"%Y-%b-%d") <<
" to "
127 << inst->getValidToDate().toFormattedString(
"%Y-%b-%d") <<
")";
128 const auto instFilename = inst->getFilename();
129 if (!instFilename.empty()) {
130 out <<
"Instrument from: " << instFilename;
140 for (
auto const &itFilename : paramFileVector) {
141 out <<
"Parameters from: " << itFilename;
147 std::string msgNA =
"not available";
148 if (runStart.empty())
152 out <<
"Run start: " << runStart <<
"\n";
153 out <<
"Run end: " << runEnd <<
"\n";
155 if (this->
sample().hasOrientedLattice()) {
157 out <<
"Sample: a " << std::fixed << std::setprecision(1) << latt.
a() <<
", b " << latt.
b() <<
", c " << latt.
c();
158 out <<
"; alpha " << std::fixed << std::setprecision(0) << latt.
alpha() <<
", beta " << latt.
beta() <<
", gamma "
169 if (numDets != detInfo.
size())
170 throw std::runtime_error(
"ExperimentInfo: size mismatch between "
171 "DetectorInfo and number of detectors in "
187 if (
sptr_instrument != (instr->isParametrized() ? instr->baseInstrument() : instr)) {
190 if (instr->isParametrized()) {
195 m_parmap = std::make_shared<ParameterMap>(*instr->getParameterMap());
198 m_parmap = std::make_shared<ParameterMap>();
245 RTP() : radius(0.0), haveRadius(false), theta(0.0), phi(0.0) {}
252struct ParameterValue {
254 : info(paramInfo), runData(run) {}
257 if (info.m_logfileID.empty())
258 return boost::lexical_cast<double>(info.m_value);
260 const TimeROI *roi = &runData.getTimeROI();
261 return info.createParamValue(runData.getTimeSeriesProperty<
double>(info.m_logfileID), roi);
264 operator int() {
return boost::lexical_cast<int>(info.m_value); }
266 if (boost::iequals(info.m_value,
"true"))
268 else if (boost::iequals(info.m_value,
"yes"))
284bool isScaleParameter(
const std::string &
name) {
return (
name ==
"scalex" ||
name ==
"scaley"); }
286bool isRedundantPosOrRot(
const std::string &
name) {
288 return (
name.size() == 4) &&
292template <
class T> T getParam(
const std::string ¶mType,
const std::string ¶mValue) {
293 const std::string
name =
"dummy";
295 param->fromString(paramValue);
296 return param->value<T>();
302 if (componentInfo.
hasParent(compIndex)) {
303 const auto parentIndex = componentInfo.
parent(compIndex);
314 if (componentInfo.
hasParent(compIndex)) {
315 const auto parentIndex = componentInfo.
parent(compIndex);
322 const std::string ¶mName,
double factor) {
325 if (paramName ==
"scalex")
343 const auto &runData =
run();
354 const auto instrument = parInstrument->baseInstrument();
355 const auto ¶mInfoFromIDF = instrument->getLogfileCache();
357 std::map<const IComponent *, RTP> rtpParams;
367 for (
const auto &item : paramInfoFromIDF) {
368 const auto ¶mInfo = item.second;
372 const std::string ¶mN = paramInfo->m_paramName;
378 if (paramN.compare(1, 9,
"-position") == 0) {
379 auto &rtpValues = rtpParams[paramInfo->m_component];
382 double value = ParameterValue(*paramInfo, runData);
383 if (paramN.compare(0, 1,
"r") == 0) {
384 rtpValues.radius =
value;
385 rtpValues.haveRadius =
true;
386 }
else if (paramN.compare(0, 1,
"t") == 0)
387 rtpValues.theta =
value;
388 else if (paramN.compare(0, 1,
"p") == 0)
389 rtpValues.phi =
value;
390 if (rtpValues.haveRadius) {
392 pos.
spherical(rtpValues.radius, rtpValues.theta, rtpValues.phi);
398 }
catch (std::exception &exc) {
399 g_log.
information() <<
"Unable to add component parameter '" << paramN <<
"'. Error: " << exc.what();
403 for (
const auto &item : paramMapForPosAndRot) {
404 if (isPositionParameter(item.second->name())) {
405 const auto newRelPos = item.second->value<
V3D>();
406 updatePosition(compInfo, item.first, newRelPos);
407 }
else if (isRotationParameter(item.second->name())) {
408 const auto newRelRot = item.second->value<
Quat>();
409 updateRotation(compInfo, item.first, newRelRot);
416 for (
const auto &item : paramMap) {
417 if (isScaleParameter(item.second->name()))
418 adjustPositionsFromScaleFactor(compInfo, item.first, item.second->name(), item.second->value<
double>());
450 SpectrumDefinition specDef;
451 for (
const auto detID : detIDs) {
454 specDef.add(detIndex);
455 }
catch (std::out_of_range &) {
471 throw std::runtime_error(
"ExperimentInfo::updateCachedDetectorGrouping: "
472 "Cannot update -- grouping information not "
509 return m_run.access();
540 if (logName.empty()) {
541 throw std::invalid_argument(
"ExperimentInfo::getLog - No instrument parameter named \"" + log +
542 "\". Cannot access full log name");
565 if (logName.empty()) {
566 throw std::invalid_argument(
"ExperimentInfo::getLog - No instrument parameter named \"" + log +
567 "\". Cannot access full log name");
578 const Run &thisRun =
run();
607 static const char *emodeTag =
"deltaE-mode";
608 std::string emodeStr;
609 if (
run().hasProperty(emodeTag)) {
613 emodeStr = param->asString();
648 const std::vector<std::string> ¶meterNames)
const {
650 for (
auto ¶meterName : parameterNames) {
653 efixed = par->value<
double>();
655 std::vector<double> efixedVec = detector->getNumberParameter(parameterName);
656 if (efixedVec.empty()) {
657 int detid = detector->getID();
659 efixedVec = detectorSingle->getNumberParameter(parameterName);
661 if (!efixedVec.empty()) {
667 std::ostringstream os;
668 os <<
"ExperimentInfo::getEFixed - Indirect mode efixed requested but "
669 "detector has no Efixed parameter attached. ID="
670 << detector->getID();
671 throw std::runtime_error(os.str());
687 for (
auto ¶meterName : {
"Ei",
"EnergyRequested",
"EnergyEstimate"}) {
694 throw std::runtime_error(
"Experiment logs do not contain an Ei "
695 "value. Have you run GetEi?");
700 throw std::runtime_error(
"ExperimentInfo::getEFixed - Indirect mode "
701 "efixed requested without a valid detector.");
704 throw std::runtime_error(
"ExperimentInfo::getEFixed - EFixed requested for "
705 "elastic mode, don't know what to do!");
713 pmap.addDouble(det.get(),
"Efixed",
value);
729 }
catch (std::runtime_error &) {
732 date = Types::Core::DateAndTime::getCurrentTime().toISO8601String();
748 }
catch (std::runtime_error &) {
765 }
catch (std::runtime_error &) {
786 return m_parmap->mutableDetectorInfo();
823 [](
char i) { return i == 1; })) {
826 [](
char i) { return i == 1; })) {
828#pragma omp parallel for
829 for (int64_t i = 0; i < size; ++i) {
849 if (spectrumDefinitions) {
850 m_spectrumInfo = std::make_unique<Beamline::SpectrumInfo>(std::move(spectrumDefinitions));
865 return compInfo.
name(compInfo.
root());
894 size_t specIndex = 0;
895 for (
const auto detID : detIDs) {
898 SpectrumDefinition specDef;
899 specDef.add(detIndex);
901 m_spectrumInfo->setSpectrumDefinition(specIndex, std::move(specDef));
919 if (saveLegacyInstrument) {
920 instrument->saveNexus(file,
"instrument");
933 bool saveLogs)
const {
937 instrument->saveNexus(file,
"instrument");
951 if (sampleVersion == 0) {
954 file->openGroup(
"sample",
"NXsample");
969 if (sampleVersion == 0) {
972 file->openGroup(
"sample",
"NXsample");
982 std::string ¶meterStr,
const std::string &prefix) {
999 std::string ¶meterStr) {
1017 std::string ¶meterStr) {
1020 file->openGroup(
"instrument",
"NXinstrument");
1023 std::string instrumentName;
1024 std::string instrumentXml;
1049 file->openGroup(
"instrument",
"NXinstrument");
1052 std::string instrumentName;
1053 std::string instrumentXml;
1070 std::string &instrumentXml) {
1072 file->readData(
"name", instrumentName);
1075 file->openGroup(
"instrument_xml",
"NXnote");
1076 file->readData(
"data", instrumentXml);
1079 g_log.
debug(std::string(
"Unable to load instrument_xml: ") + ex.what());
1093 std::string &instrumentXml) {
1097 std::string instrumentFilename;
1098 if (!instrumentXml.empty()) {
1102 instrumentFilename = nxFilename;
1103 g_log.
debug() <<
"Using instrument IDF XML text contained in nexus file.\n";
1113 if (!instrumentXml.empty() && !instrumentName.empty()) {
1119 if (InstrumentDataService::Instance().doesExist(instrumentNameMangled)) {
1121 instr = InstrumentDataService::Instance().retrieve(instrumentNameMangled);
1131 instr->parseTreeAndCacheBeamline();
1134 InstrumentDataService::Instance().add(instrumentNameMangled, instr);
1150 }
catch (std::exception &e) {
1151 g_log.
error() <<
"Error loading instrument IDF file: " << filename <<
".\n";
1165 file->openGroup(
"instrument_parameter_map",
"NXnote");
1166 file->readData(
"data", parameterStr);
1169 g_log.
debug(std::string(
"Unable to load instrument_parameter_map: ") + ex.what());
1170 g_log.
information(
"Parameter map entry missing from NeXus file. Continuing without it.");
1194 const std::string visibilityKey =
"visible:";
1196 for (
auto itr = splitter.
begin(); itr !=
iend; ++itr) {
1198 if (tokens.
count() < 4)
1200 std::string comp_name = tokens[0];
1205 if (comp_name.find(
"detID:") != std::string::npos) {
1206 int detID = std::stoi(comp_name.substr(6));
1209 g_log.
warning() <<
"Cannot find detector " << detID <<
'\n';
1215 g_log.
warning() <<
"Cannot find component " << comp_name <<
'\n';
1222 std::string paramValue = tokens[3];
1223 auto size =
static_cast<int>(tokens.
count());
1224 for (
int i = 4; i < size; i++)
1225 paramValue +=
";" + tokens[i];
1226 const auto ¶mType = tokens[1];
1227 const auto ¶mName = tokens[2];
1228 auto ¶mVisibility = tokens[size - 1];
1229 if (paramVisibility.find(visibilityKey) > paramVisibility.size())
1230 paramVisibility =
"true";
1233 paramVisibility.substr(paramVisibility.find(visibilityKey) + visibilityKey.size(), paramVisibility.size());
1234 paramValue.erase(paramValue.find(visibilityKey) - 1, paramValue.size());
1236 const auto paramDescr = std::string(
"");
1237 if (paramName ==
"masked") {
1238 auto value = getParam<bool>(paramType, paramValue);
1241 const auto componentIndex = compInfo.indexOf(comp->
getComponentID());
1242 if (!compInfo.isDetector(componentIndex)) {
1243 throw std::runtime_error(
"Found masking for a non-detector "
1244 "component. This is not possible");
1250 }
else if (isPositionParameter(paramName)) {
1255 const auto newRelPos = getParam<V3D>(paramType, paramValue);
1256 updatePosition(compInfo, comp, newRelPos);
1257 }
else if (isRotationParameter(paramName)) {
1262 const auto newRelRot = getParam<Quat>(paramType, paramValue);
1263 updateRotation(compInfo, comp, newRelRot);
1264 }
else if (!isRedundantPosOrRot(paramName)) {
1267 if (isScaleParameter(paramName))
1268 adjustPositionsFromScaleFactor(compInfo, comp, paramName, getParam<double>(paramType, paramValue));
1279 if (paramType ==
"fitting") {
1280 std::string fittingFunction;
1284 const auto firstComma = paramValue.find(
',');
1285 if (firstComma != std::string::npos) {
1286 const auto secondComma = paramValue.find(
',', firstComma + 1);
1287 if (secondComma != std::string::npos) {
1289 fittingFunction = paramValue.substr(firstComma + 1, secondComma - firstComma - 1);
1291 const auto firstNonSpace = fittingFunction.find_first_not_of(
" \t");
1292 if (firstNonSpace != std::string::npos) {
1293 const auto lastNonSpace = fittingFunction.find_last_not_of(
" \t");
1294 fittingFunction = fittingFunction.substr(firstNonSpace, lastNonSpace - firstNonSpace + 1);
1297 fittingFunction.clear();
1300 if (!fittingFunction.empty()) {
1301 pmap.addFittingParameter(comp, paramName, fittingFunction, paramValue, ¶mDescr, paramVisibility);
1303 pmap.add(paramType, comp, paramName, paramValue, ¶mDescr, paramVisibility);
1306 pmap.add(paramType, comp, paramName, paramValue, ¶mDescr, paramVisibility);
1325 const std::string &category = paramInfo.
m_type;
1326 ParameterValue paramValue(paramInfo,
1329 const std::string *pDescription =
nullptr;
1332 std::string pVisible =
"true";
1337 if (
name ==
"masked") {
1338 bool value(paramValue);
1344 throw std::runtime_error(
"Found masking for a non-detector component. This is not possible");
1350 }
else if (
name ==
"x" ||
name ==
"y" ||
name ==
"z") {
1352 }
else if (
name ==
"rot" ||
name ==
"rotx" ||
name ==
"roty" ||
name ==
"rotz") {
1355 }
else if (category ==
"fitting") {
1356 std::ostringstream str;
1367 }
else if (category ==
"string") {
1369 }
else if (category ==
"bool") {
1371 }
else if (category ==
"int") {
1389IPropertyManager::getValue<Mantid::API::ExperimentInfo_sptr>(
const std::string &
name)
const {
1394 std::string message =
1395 "Attempt to assign property " +
name +
" to incorrect type. Expected shared_ptr<ExperimentInfo>.";
1396 throw std::runtime_error(message);
1402IPropertyManager::getValue<Mantid::API::ExperimentInfo_const_sptr>(
const std::string &
name)
const {
1405 return prop->operator()();
1407 std::string message =
1408 "Attempt to assign property " +
name +
" to incorrect type. Expected const shared_ptr<ExperimentInfo>.";
1409 throw std::runtime_error(message);
double value
The value of the point.
std::map< DeltaEMode::Type, std::string > index
Mantid::Kernel::Quat(ComponentInfo::* rotation)(const size_t) const
This class is shared by a few Workspace types and holds information related to a particular experimen...
void loadEmbeddedInstrumentInfoNexus(Nexus::File *file, std::string &instrumentName, std::string &instrumentXml)
Attempt to load instrument embedded in Nexus file. *file must have instrument group open.
Geometry::DetectorInfo & mutableDetectorInfo()
Return a non-const reference to the DetectorInfo object.
Run & mutableRun()
Writable version of the run object.
Kernel::cow_ptr< Sample > m_sample
The information on the sample environment.
const SpectrumInfo & spectrumInfo() const
Return a reference to the SpectrumInfo object.
std::shared_ptr< Geometry::ParameterMap > m_parmap
Parameters modifying the base instrument.
ExperimentInfo()
Default constructor.
void setInstumentFromXML(const std::string &nxFilename, std::string &instrumentName, std::string &instrumentXml)
Set the instrument given the name and XML leading from IDF file if XML string is empty.
Geometry::ComponentInfo & mutableComponentInfo()
const Geometry::DetectorInfo & detectorInfo() const
Return a const reference to the DetectorInfo object.
virtual ExperimentInfo * cloneExperimentInfo() const
Clone us.
std::unordered_map< detid_t, size_t > m_det2group
Detector grouping information.
double getEFixed(const detid_t detID) const
Easy access to the efixed value for this run & detector ID.
void readParameterMap(const std::string ¶meterStr)
Populate the parameter map given a string.
virtual void populateIfNotLoaded() const
Called as the first operation of most public methods.
void invalidateSpectrumDefinition(const size_t index)
Notifies the ExperimentInfo that a spectrum definition has changed.
void saveExperimentInfoNexus(Nexus::File *file, bool saveLegacyInstrument=true) const
Saves this experiment description to the open NeXus file.
size_t numberOfDetectorGroups() const
Returns the number of detector groups.
void updateSpectrumDefinitionIfNecessary(const size_t index) const
std::string getAvailableWorkspaceStartDate() const
Return workspace start date as a formatted string (strftime, as returned by Types::Core::DateAndTime)...
std::string loadInstrumentXML(const std::string &filename)
Loads the contents of a file and returns the string The file is assumed to be an IDF,...
virtual ~ExperimentInfo()
Virtual destructor.
virtual void updateCachedDetectorGrouping(const size_t index) const
Update detector grouping for spectrum with given index.
void cacheDefaultDetectorGrouping() const
Sets up a default detector grouping.
std::mutex m_spectrumInfoMutex
void copyExperimentInfoFrom(const ExperimentInfo *other)
Copy everything from the given experiment object.
const Run & run() const
Run details object access.
std::string getInstrumentName() const
Return the name of the instrument from the ComponentInfo object.
void loadSampleAndLogInfoNexus(Nexus::File *file, std::string const &prefix)
Load the sample and log info from an open NeXus file.
const Geometry::ParameterMap & constInstrumentParameters() const
Const version.
Geometry::Instrument_const_sptr getInstrument() const
Returns the parameterized instrument.
Kernel::DeltaEMode::Type getEMode() const
Returns the emode for this run.
std::unique_ptr< Beamline::SpectrumInfo > m_spectrumInfo
void loadExperimentInfoNexus(std::string const &nxFilename, Nexus::File *file, std::string ¶meterStr, std::string const &prefix)
const Sample & sample() const
Sample accessors.
void setEFixed(const detid_t detID, const double value)
Set the efixed value for a given detector ID.
double getEFixedGivenEMode(const std::shared_ptr< const Geometry::IDetector > &detector, const Kernel::DeltaEMode::Type emode) const
Easy access to the efixed value for this run & detector.
double getEFixedForIndirect(const std::shared_ptr< const Geometry::IDetector > &detector, const std::vector< std::string > ¶meterNames) const
const std::string toString() const
Returns a string description of the object.
const Geometry::ParameterMap & instrumentParameters() const
Returns the set of parameters modifying the base instrument (const-version)
int getRunNumber() const
Utility method to get the run number.
std::string getAvailableWorkspaceEndDate() const
Return workspace end date as a formatted string (strftime style, as returned by Kernel::DateAdnTime) ...
const Geometry::ComponentInfo & componentInfo() const
std::string getWorkspaceStartDate() const
Returns the start date for this experiment (or current time if no info available)
void setInstrument(const Geometry::Instrument_const_sptr &instr)
Instrument accessors.
std::unique_ptr< SpectrumInfo > m_spectrumInfoWrapper
void setSharedRun(Kernel::cow_ptr< Run > run)
Set the run object. Use in particular to clear run without copying old run.
void setDetectorGrouping(const size_t index, const std::set< detid_t > &detIDs) const
Sets the detector grouping for the spectrum with the given index.
Kernel::cow_ptr< Run > sharedRun()
Return the cow ptr of the run.
ExperimentInfo & operator=(const ExperimentInfo &)
Implements the copy assignment operator.
void setSpectrumDefinitions(Kernel::cow_ptr< std::vector< SpectrumDefinition > > spectrumDefinitions)
Sets the SpectrumDefinition for all spectra.
void populateWithParameter(Geometry::ParameterMap ¶mMap, Geometry::ParameterMap ¶mMapForPosAndRot, const std::string &name, const Geometry::XMLInstrumentParameter ¶mInfo, const Run &runData)
Fill with given instrument parameter.
std::vector< char > m_spectrumDefinitionNeedsUpdate
double getLogAsSingleValue(const std::string &log) const
Access a single value from a log for this experiment.
SpectrumInfo & mutableSpectrumInfo()
Return a non-const reference to the SpectrumInfo object.
void loadInstrumentParametersNexus(Nexus::File *file, std::string ¶meterStr)
Load instrument parameters from an open Nexus file in Instrument group if found there.
void setNumberOfDetectorGroups(const size_t count) const
Sets the number of detector groups.
Sample & mutableSample()
Writable version of the sample object.
Geometry::Instrument_const_sptr sptr_instrument
The base (unparametrized) instrument.
void loadInstrumentInfoNexus(const std::string &nxFilename, Nexus::File *file, std::string ¶meterStr)
Load the instrument from an open NeXus file.
void populateInstrumentParameters()
Add parameters to the instrument parameter map that are defined in instrument definition file or para...
Kernel::Property * getLog(const std::string &log) const
Access a log for this experiment.
void invalidateAllSpectrumDefinitions()
Sets flags for all spectrum definitions indicating that they need to be updated.
Kernel::cow_ptr< Run > m_run
The run information.
static std::string getInstrumentFilename(const std::string &instrumentName, const std::string &date="")
Get the IDF using the instrument name and date.
const Types::Core::DateAndTime endTime() const
Return the run end time.
bool hasProperty(const std::string &name) const
Does the property exist on the object.
const Types::Core::DateAndTime startTime() const
Return the run start time.
Kernel::Property * getProperty(const std::string &name) const
Returns the named property as a pointer.
double getPropertyAsSingleValue(const std::string &name, Kernel::Math::StatisticType statistic=Kernel::Math::Mean) const
Returns a property as a single double value from its name.
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.
void saveNexus(Nexus::File *file, const std::string &group, bool keepOpen=false) const override
Save the run to a NeXus file with a given group name.
void loadNexus(Nexus::File *file, const std::string &group, const std::string &prefix, bool keepOpen=false) override
Load the run from a NeXus file with a given group name.
This class stores information about the sample used in particular run.
int loadNexus(Nexus::File *file, const std::string &group)
Load the object from an open NeXus file.
void saveNexus(Nexus::File *file, const std::string &group) const
Save the object to an open NeXus file.
const Geometry::OrientedLattice & getOrientedLattice() const
Get a reference to the sample's OrientedLattice.
API::SpectrumInfo is an intermediate step towards a SpectrumInfo that is part of Instrument-2....
const Kernel::cow_ptr< std::vector< SpectrumDefinition > > & sharedSpectrumDefinitions() const
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.
bool hasParent(const size_t componentIndex) const
void setRotation(size_t componentIndex, const Kernel::Quat &newRotation)
size_t parent(const size_t componentIndex) const
Kernel::Quat rotation(const size_t componentIndex) const
Kernel::V3D position(const size_t componentIndex) const
size_t indexOf(Geometry::IComponent const *id) const
const std::string & name(const size_t componentIndex) const
void setPosition(size_t componentIndex, const Kernel::V3D &newPosition)
Geometry::DetectorInfo is an intermediate step towards a DetectorInfo that is part of Instrument-2....
void setMasked(const size_t index, bool masked)
Set the mask flag of the detector with given index. Not thread safe.
size_t indexOf(const detid_t id) const
Returns the index of the detector with the given detector ID.
size_t size() const
Returns the size of the DetectorInfo, i.e., the number of detectors in the instrument.
base class for Geometric IComponent
virtual ComponentID getComponentID() const =0
Returns the ComponentID - a unique identifier of the component.
Creates an instrument data from a XML instrument description file.
std::shared_ptr< Instrument > parseXML(Kernel::ProgressBase *progressReporter)
Parse XML contents.
std::string getMangledName()
Handle used in the singleton constructor for instrument file should append the value file sha-1 check...
std::size_t getNumberDetectors(bool skipMonitors=false) const
std::shared_ptr< const Instrument > baseInstrument() const
Pointer to the 'real' instrument, for parametrized instruments.
IDetector_const_sptr getDetector(const detid_t &detector_id) const
Gets a pointer to the detector from its ID Note that for getting the detector associated with a spect...
Class to implement UB matrix.
static std::shared_ptr< Instrument > createInstrument(const std::shared_ptr< const Instrument > &base, const std::shared_ptr< ParameterMap > &map)
Create a parameterized instrument from the given base and ParameterMap.
static std::shared_ptr< Parameter > create(const std::string &className, const std::string &name, const std::string &visible="true")
Creates an instance of a parameter.
const std::vector< std::string > & getParameterFilenames() const
Returns a list of all the parameter files loaded.
bool contains(const IComponent *comp, const std::string &name, const std::string &type="") const
Does the named parameter exist for the given component and type (std::string version)
void addInt(const IComponent *comp, const std::string &name, const std::string &value, const std::string *const pDescription=nullptr, const std::string &pVisible="true")
Adds an int value to the parameter map.
void addPositionCoordinate(const IComponent *comp, const std::string &name, const double value, const std::string *const pDescription=nullptr)
Create or adjust "pos" parameter for a component.
std::shared_ptr< Parameter > getRecursive(const IComponent *comp, const std::string &name, const std::string &type="") const
Use get() recursively to see if can find param in all parents of comp and given type (std::string ver...
static const std::string & rot()
std::string getString(const IComponent *comp, const std::string &name, bool recursive=false) const
Return the value of a parameter as a string.
void addString(const IComponent *comp, const std::string &name, const std::string &value, const std::string *const pDescription=nullptr, const std::string &pVisible="true")
Adds a std::string value to the parameter map.
void addDouble(const IComponent *comp, const std::string &name, const std::string &value, const std::string *const pDescription=nullptr, const std::string &pVisible="true")
Adds a double value to the parameter map.
static const std::string & pos()
Return string to be used in the map.
void addRotationParam(const IComponent *comp, const std::string &name, const double deg, const std::string *const pDescription=nullptr)
Create or adjust "rot" parameter for a component.
void addFittingParameter(const IComponent *comp, const std::string &name, const std::string &fittingFunction, const std::string &value, const std::string *const pDescription=nullptr, const std::string &pVisible="true")
Add a fitting parameter.
void addV3D(const IComponent *comp, const std::string &name, const std::string &value, const std::string *const pDescription=nullptr)
Adds a Kernel::V3D value to the parameter map.
void addBool(const IComponent *comp, const std::string &name, const std::string &value, const std::string *const pDescription=nullptr, const std::string &pVisible="true")
Adds a bool value to the parameter map.
std::shared_ptr< Parameter > get(const IComponent *comp, const std::string &name, const std::string &type="") const
Get a parameter with a given name and type (std::string version)
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.
This class is used to store information about parameters in XML instrument definition files and instr...
const Geometry::IComponent * m_component
value from the log value
const std::string m_value
rather then extracting value from logfile,
const std::string m_type
type of the data, e.g. int, double or string
const std::string m_description
if present, contains help string, describing the parameter
const std::string m_visible
if present, describes whether the parameter shall be visible in InstrumentViewer
std::shared_ptr< Kernel::Interpolation > m_interpolation
evaluating the formula
const std::string m_fittingFunction
specific to fitting parameter
std::string m_penaltyFactor
parameter specify lower and upper bound in that order
const std::string m_formula
specify fitting function
const std::string m_resultUnit
expected result (output) unit from
const std::vector< std::string > m_constraint
specific to fitting
const std::string m_tie
specific to fitting parameter specify any tie
const std::string m_formulaUnit
formula to use for setting this parameter
Exception for when an item is not found in a collection.
The Logger class is in charge of the publishing messages from the framework through various channels.
void debug(const std::string &msg)
Logs at debug level.
void error(const std::string &msg)
Logs at error level.
void warning(const std::string &msg)
Logs at warning level.
void information(const std::string &msg)
Logs at information level.
The concrete, templated class for properties.
Base class for properties.
virtual std::string value() const =0
Returns the value of the property as a string.
void rotate(V3D &) const
Rotate a vector.
Iterator begin()
Iterator referring to first element in the container.
@ TOK_IGNORE_EMPTY
ignore empty tokens
@ TOK_TRIM
remove leading and trailing whitespace from tokens
Iterator end()
Iterator referring to the past-the-end element in the container.
std::size_t count() const
Get the total number of tokens.
TimeROI : Object that holds information about when the time measurement was active.
void spherical(const double R, const double theta, const double phi) noexcept
Sets the vector position based on spherical coordinates.
Implements a copy on write data template.
Class that provides for a standard Nexus exception.
std::shared_ptr< const ExperimentInfo > ExperimentInfo_const_sptr
Shared pointer to const ExperimentInfo.
Kernel::Logger g_log("ExperimentInfo")
static logger object
std::shared_ptr< ExperimentInfo > ExperimentInfo_sptr
Shared pointer to ExperimentInfo.
MANTID_API_DLL void applyRectangularDetectorScaleToComponentInfo(Geometry::ComponentInfo &componentInfo, Geometry::IComponent *componentId, const double scaleX, const double scaleY)
Helpers for resizing RectangularDetectors.
std::shared_ptr< Parameter > Parameter_sptr
Typedef for the shared pointer.
std::shared_ptr< const Mantid::Geometry::IDetector > IDetector_const_sptr
Shared pointer to IDetector (const version)
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.
MANTID_KERNEL_DLL std::string strip(const std::string &A)
strip pre/post spaces
MANTID_KERNEL_DLL std::string loadFile(const std::string &filename)
Loads the entire contents of a text file into a string.
int convert(const std::string &A, T &out)
Convert a string into a number.
int32_t detid_t
Typedef for a detector ID.
Generate a tableworkspace to store the calibration results.
std::string to_string(const wide_integer< Bits, Signed > &n)
static Type fromString(const std::string &modeStr)
Returns the emode from the given string.
Type
Define the available energy transfer modes It is important to assign enums proper numbers,...