LoadILLTOF2.h 3.68 KB
Newer Older
1
2
3
4
5
#ifndef MANTID_DATAHANDLING_LOADILLTOF2_H_
#define MANTID_DATAHANDLING_LOADILLTOF2_H_

#include "MantidAPI/IFileLoader.h"
#include "MantidNexus/NexusClasses.h"
6
#include "MantidDataHandling/LoadHelper.h"
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include "MantidGeometry/IDTypes.h"

namespace Mantid {
namespace DataHandling {
/**
 Loads an ILL IN4/5/6 nexus file into a Mantid workspace.

 Copyright © 2016 ISIS Rutherford Appleton Laboratory, NScD Oak Ridge
 National Laboratory & European Spallation Source

 This file is part of Mantid.

 Mantid is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation; either version 3 of the License, or
 (at your option) any later version.

 Mantid is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with this program.  If not, see <http://www.gnu.org/licenses/>.

 File change history is stored at: <https://github.com/mantidproject/mantid>
 Code Documentation is available at: <http://doxygen.mantidproject.org>
 */
class DLLExport LoadILLTOF2 : public API::IFileLoader<Kernel::NexusDescriptor> {
public:
  /// Constructor
  LoadILLTOF2();
  /// Algorithm's name
  const std::string name() const override { return "LoadILLTOF"; }
  /// Summary of algorithms purpose
  const std::string summary() const override {
    return "Loads an ILL TOF NeXus file.";
  }

  /// Algorithm's version
  int version() const override { return 2; }
  /// Algorithm's category for identification
  const std::string category() const override { return "DataHandling\\Nexus"; }

  /// Returns a confidence value that this algorithm can load a file
  int confidence(Kernel::NexusDescriptor &descriptor) const override;

private:
  const static std::vector<std::string> SUPPORTED_INSTRUMENTS;

  // Initialisation code
  void init() override;
  // Execution code
  void exec() override;

  void loadInstrumentDetails(NeXus::NXEntry &);
  std::vector<std::vector<int>> getMonitorInfo(NeXus::NXEntry &firstEntry);
  void initWorkSpace(NeXus::NXEntry &entry,
                     const std::vector<std::vector<int>> &);
  void initInstrumentSpecific();
67
  void addAllNexusFieldsAsProperties(const std::string &filename);
68
69
70
71
72
73
74
75
  void addEnergyToRun();
  void addFacility();
  void addPulseInterval();

  void loadTimeDetails(NeXus::NXEntry &entry);
  void
  loadDataIntoTheWorkSpace(NeXus::NXEntry &entry,
                           const std::vector<std::vector<int>> &);
76
77
  void loadSpectra(size_t &spec, const size_t numberOfMonitors, const size_t numberOfTubes,
                   const std::vector<Mantid::detid_t> &detectorIDs, NeXus::NXInt data,
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
                   Mantid::API::Progress progress);

  void runLoadInstrument();

  /// Calculate error for y
  static double calculateError(double in) { return sqrt(in); }

  API::MatrixWorkspace_sptr m_localWorkspace;

  std::string m_instrumentName = ""; ///< Name of the instrument
  std::string m_instrumentPath = ""; ///< Name of the instrument path

  // Variables describing the data in the detector
  size_t m_numberOfTubes = 0;         // number of tubes - X
  size_t m_numberOfPixelsPerTube = 0; // number of pixels per tube - Y
  size_t m_numberOfChannels = 0;      // time channels - Z
  size_t m_numberOfHistograms = 0;

  /* Values parsed from the nexus file */
  double m_wavelength = 0;
  double m_channelWidth = 0;
  double m_timeOfFlightDelay = 0;

  LoadHelper m_loader;
};

} // namespace DataHandling
} // namespace Mantid

#endif /*MANTID_DATAHANDLING_LOADILLTOF2_H_*/