9#include "MantidGeometry/DllConfig.h"
16#include "MantidTypes/Core/DateAndTime.h"
23#include <unordered_set>
39 std::map<std::pair<std::string, const IComponent *>, std::shared_ptr<XMLInstrumentParameter>>;
52 std::string
type()
const override {
return "Instrument"; }
54 Instrument(
const std::shared_ptr<const Instrument> &instr,
const std::shared_ptr<ParameterMap> &map);
62 bool hasSource()
const;
63 bool hasSample()
const;
71 bool isMonitor(
const detid_t &detector_id)
const;
72 bool isMonitor(
const std::set<detid_t> &detector_ids)
const;
78 std::vector<IDetector_const_sptr> getDetectors(
const std::vector<detid_t> &det_ids)
const;
81 std::vector<IDetector_const_sptr> getDetectors(
const std::set<detid_t> &det_ids)
const;
94 void markAsDetectorIncomplete(
const IDetector *);
95 void markAsDetectorFinalize();
100 void markAsMonitorIncomplete(
IDetector const *);
105 void removeDetectorIncomplete(
IDetector const *);
106 void removeDetectorFinalize();
112 std::vector<detid_t> getDetectorIDs(
bool skipMonitors =
false)
const;
114 std::vector<detid_t> getMonitorIDs()
const;
116 std::size_t getNumberDetectors(
bool skipMonitors =
false)
const;
120 void getDetectorsInBank(std::vector<IDetector_const_sptr> &dets,
const IComponent &comp)
const;
121 void getDetectorsInBank(std::vector<IDetector_const_sptr> &dets,
const std::string &bankName)
const;
122 std::set<detid_t> getDetectorIDsInBank(
const std::string &bankName)
const;
125 void getBoundingBox(
BoundingBox &assemblyBox)
const override;
128 std::shared_ptr<const std::vector<IObjComponent_const_sptr>> getPlottable()
const;
131 std::shared_ptr<const IComponent> getComponentByID(
const IComponent *
id)
const;
134 std::vector<std::shared_ptr<const IComponent>> getAllComponentsWithName(
const std::string &cname)
const;
152 void setDefaultView(
const std::string &type);
160 using CompAssembly::getChild;
163 std::shared_ptr<const Instrument> baseInstrument()
const;
167 std::shared_ptr<ParameterMap> getParameterMap()
const;
176 void setValidFromDate(
const Types::Core::DateAndTime &val);
184 std::shared_ptr<const Instrument> getPhysicalInstrument()
const;
185 void setPhysicalInstrument(std::unique_ptr<Instrument>);
187 void getInstrumentParameters(
double &l1,
Kernel::V3D &beamline,
double &beamline_norm,
Kernel::V3D &samplePos)
const;
189 void saveNexus(Nexus::File *file,
const std::string &
group)
const;
190 void loadNexus(Nexus::File *file,
const std::string &
group);
192 void setFilename(
const std::string &filename);
193 const std::string &getFilename()
const;
194 void setXmlText(
const std::string &XmlText);
195 const std::string &getXmlText()
const;
198 void setReferenceFrame(std::shared_ptr<ReferenceFrame> frame);
200 std::shared_ptr<const ReferenceFrame> getReferenceFrame()
const;
207 ContainsState containsRectDetectors()
const;
210 return findDetectorsOfType<RectangularDetector>();
212 std::vector<GridDetector_const_sptr>
findGridDetectors()
const {
return findDetectorsOfType<GridDetector>(); }
214 bool isMonitorViaIndex(
const size_t index)
const;
216 std::shared_ptr<ParameterMap> makeLegacyParameterMap()
const;
218 bool isEmptyInstrument()
const;
220 void parseTreeAndCacheBeamline();
221 std::pair<std::unique_ptr<ComponentInfo>, std::unique_ptr<DetectorInfo>>
223 std::pair<std::unique_ptr<ComponentInfo>, std::unique_ptr<DetectorInfo>> makeBeamlineNew(
ParameterMap &
pmap)
const;
229 void saveDetectorSetInfoToNexus(Nexus::File *file,
const std::vector<detid_t> &detIDs)
const;
233 void addInstrumentChildrenToQueue(std::queue<IComponent_const_sptr> &queue)
const;
234 bool addAssemblyChildrenToQueue(std::queue<IComponent_const_sptr> &queue,
IComponent_const_sptr component)
const;
236 std::queue<IComponent_const_sptr> compQueue;
237 addInstrumentChildrenToQueue(compQueue);
239 std::vector<std::shared_ptr<const T>> detectors;
243 while (!compQueue.empty()) {
244 comp = compQueue.front();
247 if (!validateComponentProperties(comp))
250 if (
auto const detector = std::dynamic_pointer_cast<const T>(comp)) {
251 detectors.push_back(detector);
254 addAssemblyChildrenToQueue(compQueue, comp);
264 void appendPlottable(
const CompAssembly &ca, std::vector<IObjComponent_const_sptr> &lst)
const;
266 std::pair<std::unique_ptr<ComponentInfo>, std::unique_ptr<DetectorInfo>>
276 detid_t const &
id()
const {
return std::get<0>(*
this); }
278 bool const &
isMonitor()
const {
return std::get<2>(*
this); }
288 bool m_isFinalized{
true};
293 if (isFinalized() && !empty()) {
296 throw std::runtime_error(
"minID() called on non-finalized or empty DetectorCache");
300 if (isFinalized() && !empty()) {
303 throw std::runtime_error(
"maxID() called on non-finalized or empty DetectorCache");
306 DetectorCache::iterator lower_bound(
detid_t id);
307 DetectorCache::const_iterator lower_bound(
detid_t id)
const;
308 DetectorCache::iterator find(
detid_t id);
309 DetectorCache::const_iterator find(
detid_t id)
const;
315 return m_instr->isFinalized();
317 return m_detectorCache.isFinalized();
377 std::shared_ptr<const DetectorInfo> m_detectorInfo{
nullptr};
380 std::shared_ptr<const ComponentInfo> m_componentInfo{
nullptr};
383 bool m_isPhysicalInstrument{
false};
385namespace Conversion {
388 const double offset);
391 const std::vector<detid_t> &detectors,
392 const std::map<detid_t, double> &offsets);
395 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::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
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)