9#include "MantidGeometry/DllConfig.h"
16#include "MantidTypes/Core/DateAndTime.h"
23#include <unordered_set>
40 std::map<std::pair<std::string, const IComponent *>, std::shared_ptr<XMLInstrumentParameter>>;
53 std::string
type()
const override {
return "Instrument"; }
55 Instrument(
const std::shared_ptr<const Instrument> &instr,
const std::shared_ptr<ParameterMap> &map);
63 bool hasSource()
const;
64 bool hasSample()
const;
72 bool isMonitor(
const detid_t &detector_id)
const;
73 bool isMonitor(
const std::set<detid_t> &detector_ids)
const;
79 std::vector<IDetector_const_sptr> getDetectors(
const std::vector<detid_t> &det_ids)
const;
82 std::vector<IDetector_const_sptr> getDetectors(
const std::set<detid_t> &det_ids)
const;
95 void markAsDetectorIncomplete(
const IDetector *);
96 void markAsDetectorFinalize();
101 void markAsMonitorIncomplete(
IDetector const *);
106 void removeDetectorIncomplete(
IDetector const *);
107 void removeDetectorFinalize();
113 std::vector<detid_t> getDetectorIDs(
bool skipMonitors =
false)
const;
115 std::vector<detid_t> getMonitorIDs()
const;
117 std::size_t getNumberDetectors(
bool skipMonitors =
false)
const;
121 void getDetectorsInBank(std::vector<IDetector_const_sptr> &dets,
const IComponent &comp)
const;
122 void getDetectorsInBank(std::vector<IDetector_const_sptr> &dets,
const std::string &bankName)
const;
123 std::set<detid_t> getDetectorIDsInBank(
const std::string &bankName)
const;
126 void getBoundingBox(
BoundingBox &assemblyBox)
const override;
129 std::shared_ptr<const std::vector<IObjComponent_const_sptr>> getPlottable()
const;
132 std::shared_ptr<const IComponent> getComponentByID(
const IComponent *
id)
const;
135 std::vector<std::shared_ptr<const IComponent>> getAllComponentsWithName(
const std::string &cname)
const;
145 const std::map<std::string, std::string> &
getLogfileUnit()
const {
return m_logfileUnit; }
154 void setDefaultView(
const std::string &type);
162 using CompAssembly::getChild;
165 std::shared_ptr<const Instrument> baseInstrument()
const;
169 std::shared_ptr<ParameterMap> getParameterMap()
const;
178 void setValidFromDate(
const Types::Core::DateAndTime &val);
186 std::shared_ptr<const Instrument> getPhysicalInstrument()
const;
187 void setPhysicalInstrument(std::unique_ptr<Instrument>);
189 void getInstrumentParameters(
double &l1,
Kernel::V3D &beamline,
double &beamline_norm,
Kernel::V3D &samplePos)
const;
191 void saveNexus(Nexus::File *file,
const std::string &
group)
const;
192 void loadNexus(Nexus::File *file,
const std::string &
group);
194 void setFilename(
const std::string &filename);
195 const std::string &getFilename()
const;
196 void setXmlText(
const std::string &XmlText);
197 const std::string &getXmlText()
const;
200 void setReferenceFrame(std::shared_ptr<ReferenceFrame> frame);
202 std::shared_ptr<const ReferenceFrame> getReferenceFrame()
const;
209 ContainsState containsRectDetectors()
const;
212 return findDetectorsOfType<RectangularDetector>();
214 std::vector<GridDetector_const_sptr>
findGridDetectors()
const {
return findDetectorsOfType<GridDetector>(); }
216 bool isMonitorViaIndex(
const size_t index)
const;
219 std::vector<std::pair<size_t, std::shared_ptr<Parameter>>> legacyParameters()
const;
221 bool isEmptyInstrument()
const;
223 void parseTreeAndCacheBeamline();
224 std::pair<std::unique_ptr<ComponentInfo>, std::unique_ptr<DetectorInfo>>
226 std::pair<std::unique_ptr<ComponentInfo>, std::unique_ptr<DetectorInfo>> makeBeamlineNew(
ParameterMap &
pmap)
const;
229 size_t getMemorySize()
const;
235 void saveDetectorSetInfoToNexus(Nexus::File *file,
const std::vector<detid_t> &detIDs)
const;
239 void addInstrumentChildrenToQueue(std::queue<IComponent_const_sptr> &queue)
const;
240 bool addAssemblyChildrenToQueue(std::queue<IComponent_const_sptr> &queue,
IComponent_const_sptr component)
const;
242 std::queue<IComponent_const_sptr> compQueue;
243 addInstrumentChildrenToQueue(compQueue);
245 std::vector<std::shared_ptr<const T>> detectors;
249 while (!compQueue.empty()) {
250 comp = compQueue.front();
253 if (!validateComponentProperties(comp))
256 if (
auto const detector = std::dynamic_pointer_cast<const T>(comp)) {
257 detectors.push_back(detector);
260 addAssemblyChildrenToQueue(compQueue, comp);
270 void appendPlottable(
const CompAssembly &ca, std::vector<IObjComponent_const_sptr> &lst)
const;
272 std::pair<std::unique_ptr<ComponentInfo>, std::unique_ptr<DetectorInfo>>
282 detid_t const &
id()
const {
return std::get<0>(*
this); }
284 bool const &
isMonitor()
const {
return std::get<2>(*
this); }
294 bool m_isFinalized{
true};
299 if (isFinalized() && !empty()) {
302 throw std::runtime_error(
"minID() called on non-finalized or empty DetectorCache");
306 if (isFinalized() && !empty()) {
309 throw std::runtime_error(
"maxID() called on non-finalized or empty DetectorCache");
312 DetectorCache::iterator lower_bound(
detid_t id);
313 DetectorCache::const_iterator lower_bound(
detid_t id)
const;
314 DetectorCache::iterator find(
detid_t id);
315 DetectorCache::const_iterator find(
detid_t id)
const;
321 return m_instr->isFinalized();
323 return m_detectorCache.isFinalized();
383 std::shared_ptr<const DetectorInfo> m_detectorInfo{
nullptr};
386 std::shared_ptr<const ComponentInfo> m_componentInfo{
nullptr};
389 bool m_isPhysicalInstrument{
false};
391namespace Conversion {
394 const double offset);
397 const std::vector<detid_t> &detectors,
398 const std::map<detid_t, double> &offsets);
401 const double offset,
const double binWidth);
std::map< DeltaEMode::Type, std::string > index
A simple structure that defines an axis-aligned cuboid shaped bounding box for a geometrical object.
Class for Assembly of geometric components.
ComponentInfo : Provides a component centric view on to the instrument.
Geometry::DetectorInfo is an intermediate step towards a DetectorInfo that is part of Instrument-2....
base class for Geometric IComponent
Interface class for detector objects.
InstrumentVisitor : Visitor for components with access to Info wrapping features.
std::string m_filename
Path to the original IDF .xml file that was loaded for this instrument.
const InstrumentParameterCache & getLogfileCache() const
std::string m_defaultViewAxis
Stores from which side the instrument will be viewed from, initially in the instrument viewer,...
std::string m_xmlText
Contents of the IDF .xml file that was loaded for this instrument.
std::vector< GridDetector_const_sptr > findGridDetectors() const
ContainsState
To determine whether the instrument contains elements of some type.
std::shared_ptr< const Instrument > m_instr
Pointer to the "real" instrument, for parametrized Instrument.
std::string m_defaultView
Stores the default type of the instrument view: 3D or one of the "unwrapped".
std::map< std::string, std::string > m_logfileUnit
Store units used by users to specify angles in IDFs and associated parameter files.
Instrument & operator=(const Instrument &)
Private copy assignment operator.
std::vector< RectangularDetector_const_sptr > findRectDetectors() const
std::map< std::string, std::string > & getLogfileUnit()
Get information about the units used for parameters described in the IDF and associated parameter fil...
Types::Core::DateAndTime m_ValidTo
the date at which the instrument definition is no longer valid.
const std::map< std::string, std::string > & getLogfileUnit() const
const std::string & getDefaultView() const
Get the default type of the instrument view.
const std::string & getDefaultAxis() const
Retrieves from which side the instrument to be viewed from when the instrument viewer first starts,...
std::string type() const override
String description of the type of component.
Types::Core::DateAndTime getValidFromDate() const
std::shared_ptr< const Instrument > m_physicalInstrument
Pointer to the physical instrument, where this differs from the 'neutronic' one (indirect geometry)
std::shared_ptr< ParameterMap > m_map_nonconst
Non-const pointer to the parameter map.
InstrumentParameterCache m_logfileCache
To store info about the parameters defined in IDF.
void setValidToDate(const Types::Core::DateAndTime &val)
Set the date at which the instrument definition is no longer valid.
void setDefaultViewAxis(const std::string &axis)
Retrieves from which side the instrument to be viewed from when the instrument viewer first starts,...
std::vector< std::shared_ptr< const T > > findDetectorsOfType() const
std::shared_ptr< ReferenceFrame > m_referenceFrame
Pointer to the reference frame object.
InstrumentParameterCache & getLogfileCache()
Get information about the parameters described in the instrument definition file and associated param...
Types::Core::DateAndTime m_ValidFrom
the date from which the instrument definition begins to be valid.
Types::Core::DateAndTime getValidToDate() const
Parameter map iterator typedef.
Base class for parameters of an instrument.
ReferenceFrame : Holds reference frame information from the geometry description file.
This class is used to store information about parameters in XML instrument definition files and instr...
MANTID_GEOMETRY_DLL double calculateDIFCCorrection(const double l1, const double l2, const double twoTheta, const double offset, const double binWidth)
MANTID_GEOMETRY_DLL double tofToDSpacingFactor(const double l1, const double l2, const double twoTheta, const double offset)
Calculate and return conversion factor from tof to d-spacing.
std::shared_ptr< const IComponent > IComponent_const_sptr
Typdef of a shared pointer to a const IComponent.
std::map< std::pair< std::string, const IComponent * >, std::shared_ptr< XMLInstrumentParameter > > InstrumentParameterCache
Convenience typedef.
std::shared_ptr< const Mantid::Geometry::IDetector > IDetector_const_sptr
Shared pointer to IDetector (const version)
Helper class which provides the Collimation Length for SANS instruments.
int32_t detid_t
Typedef for a detector ID.
std::map< detid_t, Geometry::IDetector_const_sptr > detid2det_map
Typedef of a map from detector ID to detector shared pointer.
Generate a tableworkspace to store the calibration results.
Tuple which holds detector-IDs and pointers to detector components, and monitor flags.
bool const & isMonitor() const
IDetector_const_sptr const & detector() const
detid_t const & id() const
DetectorCacheEntry(detid_t id, IDetector_const_sptr det, bool isMonitorFlag)
void setIsMonitor(bool flag)
A vector of DetectorCacheEntry, which holds the detector cache This is implemented as a vector rather...
std::unordered_set< IDetector const * > m_toRemove
void setFinalized(bool const flag=true)