-
Notifications
You must be signed in to change notification settings - Fork 121
/
LoadEMU.h
175 lines (142 loc) · 5.84 KB
/
LoadEMU.h
1
2
3
4
5
6
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
67
68
69
70
71
72
73
74
75
76
77
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
// Mantid Repository : https://github.com/mantidproject/mantid
//
// Copyright © 2010 ISIS Rutherford Appleton Laboratory UKRI,
// NScD Oak Ridge National Laboratory, European Spallation Source,
// Institut Laue - Langevin & CSNS, Institute of High Energy Physics, CAS
// SPDX - License - Identifier: GPL - 3.0 +
#pragma once
//---------------------------------------------------
// Includes
//---------------------------------------------------
#include "LoadANSTOEventFile.h"
#include "LoadANSTOHelper.h"
#include "MantidAPI/IFileLoader.h"
#include "MantidAPI/LogManager.h"
#include "MantidDataObjects/EventWorkspace.h"
#include "MantidGeometry/Instrument.h"
#include "MantidKernel/FileDescriptor.h"
#include "MantidKernel/NexusDescriptor.h"
#include "MantidNexus/NexusClasses.h"
namespace Mantid {
namespace DataHandling {
using ANSTO::EventVector_pt;
/*
Loads an ANSTO EMU event file and stores it in an event workspace.
@author Geish Miladinovic (ANSTO)
*/
template <typename FD> class LoadEMU : public API::IFileLoader<FD> {
protected:
using Base = API::IFileLoader<FD>;
// detailed init and exec code
void init(bool hdfLoader);
void exec(const std::string &hdfFile, const std::string &eventFile);
private:
using Base::exec;
using Base::init;
// region of intereset
std::vector<bool> createRoiVector(const std::string &seltubes,
const std::string &maskfile);
protected:
// load parameters from input file
void loadParameters(const std::string &hdfFile, API::LogManager &logm);
void loadEnvironParameters(const std::string &hdfFile, API::LogManager &logm);
// load the instrument definition and instrument parameters
void loadInstrument();
// create workspace
void createWorkspace(const std::string &title);
// dynamically update the neutronic position
void loadDetectorL2Values();
void updateNeutronicPostions(detid_t detID, double sampleAnalyser);
// load and log the Doppler parameters
void loadDopplerParameters(API::LogManager &logm);
// calibrate doppler phase
void calibrateDopplerPhase(const std::vector<size_t> &eventCounts,
const std::vector<EventVector_pt> &eventVectors);
void dopplerTimeToTOF(std::vector<EventVector_pt> &eventVectors,
double &minTOF, double &maxTOF);
// prepare event storage
void prepareEventStorage(ANSTO::ProgressTracker &prog,
const std::vector<size_t> &eventCounts,
std::vector<EventVector_pt> &eventVectors);
// set up the detector masks
void setupDetectorMasks(std::vector<bool> &roi);
// shared member variables
DataObjects::EventWorkspace_sptr m_localWorkspace;
std::vector<double> m_detectorL2;
int32_t m_datasetIndex;
std::string m_startRun;
// Doppler characteristics
double m_dopplerAmpl;
double m_dopplerFreq;
double m_dopplerPhase;
int32_t m_dopplerRun;
bool m_calibrateDoppler;
};
// Implemented the two classes explicitly rather than through specialization as
// the instantiation and linking did not behave consistently across platforms.
extern template class LoadEMU<Kernel::FileDescriptor>;
extern template class LoadEMU<Kernel::NexusDescriptor>;
/** LoadEMUTar : Loads a merged ANSTO EMU Hdf and event file into a workspace.
Required Properties:
<UL>
<LI> Filename - Name of and path to the input event file</LI>
<LI> OutputWorkspace - Name of the workspace which stores the data</LI>
</UL>
Optional Properties:
<UL>
<LI> Mask - The input filename of the mask data</LI>
<LI> SelectDetectorTubes - Range of detector tubes to be loaded</LI>
<LI> OverrideDopplerFrequency - Override the Doppler frequency (Hz)</LI>
<LI> OverrideDopplerPhase - Override the Doppler phase (degrees)</LI>
<LI> CalibrateDopplerPhase - Calibrate the Doppler phase prior to TOF</LI>
<LI> LoadAsRawDopplerTime - Save event time relative the Doppler</LI>
<LI> FilterByTimeStart - Only include events after the start time</LI>
<LI> FilterByTimeStop - Only include events before the stop time</LI>
</UL>
*/
class DLLExport LoadEMUTar : public LoadEMU<Kernel::FileDescriptor> {
public:
int version() const override;
const std::vector<std::string> seeAlso() const override;
const std::string category() const override;
const std::string name() const override;
const std::string summary() const override;
int confidence(Kernel::FileDescriptor &descriptor) const override;
private:
void exec() override;
void init() override;
};
/** LoadEMUHdf : Loads an ANSTO EMU Hdf and linked event file into a workspace.
Required Properties:
<UL>
<LI> Filename - Name of and path to the input event file</LI>
<LI> OutputWorkspace - Name of the workspace which stores the data</LI>
</UL>
Optional Properties:
<UL>
<LI> Mask - The input filename of the mask data</LI>
<LI> SelectDetectorTubes - Range of detector tubes to be loaded</LI>
<LI> OverrideDopplerFrequency - Override the Doppler frequency (Hz)</LI>
<LI> OverrideDopplerPhase - Override the Doppler phase (degrees)</LI>
<LI> CalibrateDopplerPhase - Calibrate the Doppler phase prior to TOF</LI>
<LI> LoadAsRawDopplerTime - Save event time relative the Doppler</LI>
<LI> FilterByTimeStart - Only include events after the start time</LI>
<LI> FilterByTimeStop - Only include events before the stop time</LI>
<LI> PathToBinaryEventFile - Rel or abs path to event file linked to hdf</LI>
<LI> SelectDataset - Select the linked event dataset</LI>
</UL>
*/
class DLLExport LoadEMUHdf : public LoadEMU<Kernel::NexusDescriptor> {
public:
int version() const override;
const std::vector<std::string> seeAlso() const override;
const std::string category() const override;
const std::string name() const override;
const std::string summary() const override;
int confidence(Kernel::NexusDescriptor &descriptor) const override;
private:
void exec() override;
void init() override;
};
} // namespace DataHandling
} // namespace Mantid