Mantid
Loading...
Searching...
No Matches
LoadILLSANS.h
Go to the documentation of this file.
1// Mantid Repository : https://github.com/mantidproject/mantid
2//
3// Copyright © 2013 ISIS Rutherford Appleton Laboratory UKRI,
4// NScD Oak Ridge National Laboratory, European Spallation Source,
5// Institut Laue - Langevin & CSNS, Institute of High Energy Physics, CAS
6// SPDX - License - Identifier: GPL - 3.0 +
7#pragma once
8
10#include "MantidDataHandling/DllConfig.h"
13
14#include <H5Cpp.h>
15
16namespace Mantid {
17namespace DataHandling {
18
22class MANTID_DATAHANDLING_DLL LoadILLSANS : public API::IFileLoader<Nexus::NexusDescriptor> {
23public:
25 const std::string name() const override;
26 const std::string summary() const override;
27 int version() const override;
28 const std::vector<std::string> seeAlso() const override { return {"LoadNexus"}; }
29 const std::string category() const override;
31 int confidence(Nexus::NexusDescriptor &descriptor) const override;
32
33private:
34 enum MultichannelType { TOF, KINETIC, SCAN };
39 double shiftLeft;
40 double shiftRight;
41 double shiftUp;
42 double shiftDown;
43 void operator>>(std::ostream &strm) {
44 strm << "DetectorPosition : "
45 << "distanceSampleRear = " << distanceSampleRear << ", "
46 << "distanceSampleBottomTop = " << distanceSampleBottomTop << ", "
47 << "distanceSampleRightLeft = " << distanceSampleRightLeft << ", "
48 << "shiftLeft = " << shiftLeft << ", "
49 << "shiftRight = " << shiftRight << ", "
50 << "shiftUp = " << shiftUp << ", "
51 << "shiftDown = " << shiftDown << '\n';
52 }
53 };
54
55 void init() override;
56 void exec() override;
57 void applySensitivityMap();
58 void setInstrumentName(const Nexus::NXEntry &, const std::string &);
59 DetectorPosition getDetectorPositionD33(const Nexus::NXEntry &, const std::string &);
60
61 void initWorkSpace(Nexus::NXEntry &, const std::string &);
62 void initWorkSpaceD11B(Nexus::NXEntry &, const std::string &);
63 void initWorkSpaceD22B(Nexus::NXEntry &, const std::string &);
64 void initWorkSpaceD33(Nexus::NXEntry &, const std::string &);
65 void initWorkSpaceD16(Nexus::NXEntry &, const std::string &);
66 void createEmptyWorkspace(const size_t, const size_t, const MultichannelType type = MultichannelType::TOF);
67 void getDataDimensions(const Nexus::NXInt &data, size_t &numberOfChannels, size_t &numberOfTubes,
68 size_t &numberOfPixelsPerTube);
69 size_t loadDataFromMonitors(Nexus::NXEntry &firstEntry, size_t firstIndex = 0,
70 const MultichannelType type = MultichannelType::TOF);
71 size_t loadDataFromD16ScanMonitors(const Nexus::NXEntry &firstEntry, size_t firstIndex,
72 const std::vector<double> &binning);
73 size_t loadDataFromTubes(Nexus::NXInt const &, const std::vector<double> &, size_t,
74 const MultichannelType type = MultichannelType::TOF);
75 void runLoadInstrument();
76 void moveDetectorsD33(const DetectorPosition &);
77 void moveDetectorDistance(double distance, const std::string &componentName);
78 void moveDetectorHorizontal(double, const std::string &);
79 void moveDetectorVertical(double, const std::string &);
80 void loadMetaData(const Nexus::NXEntry &, const std::string &);
81 std::string getInstrumentFilePath(const std::string &) const;
82 void rotateInstrument(double, const std::string &);
83 void placeD16(double, double, const std::string &);
84 void adjustTOF();
85 void moveSource();
86 void getMonitorIndices(const std::string &);
87
88 std::string m_instrumentName;
89 std::vector<std::string> m_supportedInstruments;
91 std::vector<double> m_defaultBinning;
92 std::string m_resMode;
93 bool m_isTOF;
94 double m_sourcePos;
97 std::vector<size_t> m_monitorIndices;
98
99 void setFinalProperties(const std::string &filename);
100 std::vector<double> getVariableTimeBinning(const Nexus::NXEntry &, const std::string &, const Nexus::NXInt &,
101 const Nexus::NXFloat &) const;
102 std::vector<double> getOmegaBinning(const Nexus::NXEntry &entry, const std::string &address) const;
103};
104
105} // namespace DataHandling
106} // namespace Mantid
std::string name
Definition Run.cpp:60
Defines an interface to an algorithm that loads a file so that it can take part in the automatic sele...
Definition IFileLoader.h:19
LoadILLSANS; supports D11, D22 and D33 (TOF/monochromatic)
Definition LoadILLSANS.h:22
bool m_isTOF
TOF or monochromatic flag.
Definition LoadILLSANS.h:93
void initWorkSpaceD16(Nexus::NXEntry &, const std::string &)
double m_sourcePos
Source Z (for D33 TOF)
Definition LoadILLSANS.h:94
const std::vector< std::string > seeAlso() const override
Function to return all of the seeAlso (these are not validated) algorithms related to this algorithm....
Definition LoadILLSANS.h:28
size_t m_numberOfMonitors
Number of monitors in this instrument.
Definition LoadILLSANS.h:96
std::vector< double > m_defaultBinning
the default x-axis binning
Definition LoadILLSANS.h:91
std::vector< std::string > m_supportedInstruments
List of supported instruments.
Definition LoadILLSANS.h:89
API::MatrixWorkspace_sptr m_localWorkspace
to-be output workspace
Definition LoadILLSANS.h:90
std::vector< size_t > m_monitorIndices
Indices for monitor data in scanned variables table.
Definition LoadILLSANS.h:97
bool m_isD16Omega
Data comes from a D16 omega scan flag.
Definition LoadILLSANS.h:95
std::string m_instrumentName
Name of the instrument.
Definition LoadILLSANS.h:88
std::string m_resMode
Resolution mode for D11 and D22.
Definition LoadILLSANS.h:92
Templated class implementation of NXDataSet.
Implements NXentry Nexus class.
std::shared_ptr< MatrixWorkspace > MatrixWorkspace_sptr
shared pointer to the matrix workspace base class
Helper class which provides the Collimation Length for SANS instruments.