-
Notifications
You must be signed in to change notification settings - Fork 122
/
PoldiTruncateData.h
77 lines (58 loc) · 2.81 KB
/
PoldiTruncateData.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
// Mantid Repository : https://github.com/mantidproject/mantid
//
// Copyright © 2014 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
#include "MantidAPI/Algorithm.h"
#include "MantidKernel/System.h"
#include "MantidSINQ/PoldiUtilities/PoldiAbstractChopper.h"
namespace Mantid {
namespace Poldi {
/** PoldiTruncateData :
POLDI data time bin count and width are directly connected to the
chopper rotation speed. In the raw data, there are some additional
bins at the end of each spectrum. These extra bins should not contain
any data. If there are more than just a few extra counts in those bins,
something is wrong with the measurement.
This algorithm checks these extra bins (if present) and outputs
a table with the counts in each bin summed over all spectra.
Then these extra bins are removed, so data analysis can carry on properly.
@author Michael Wedel, Paul Scherrer Institut - SINQ
@date 11/06/2014
*/
class DLLExport PoldiTruncateData : public API::Algorithm {
public:
PoldiTruncateData();
virtual ~PoldiTruncateData() = default;
const std::string name() const override { return "PoldiTruncateData"; }
int version() const override;
const std::string category() const override;
const std::string summary() const override;
size_t getCalculatedBinCount();
size_t getActualBinCount();
protected:
void setChopperFromWorkspace(const API::MatrixWorkspace_const_sptr &workspace);
void setChopper(PoldiAbstractChopper_sptr chopper);
void setTimeBinWidthFromWorkspace(const API::MatrixWorkspace_const_sptr &workspace);
void setTimeBinWidth(double timeBinWidth);
void setActualBinCount(size_t actualBinCount);
double getMaximumTimeValue(size_t calculatedBinCount);
double getMinimumExtraTimeValue(size_t calculatedBinCount);
API::MatrixWorkspace_sptr getCroppedWorkspace(const API::MatrixWorkspace_sptr &workspace);
API::MatrixWorkspace_sptr getExtraCountsWorkspace(const API::MatrixWorkspace_sptr &workspace);
API::MatrixWorkspace_sptr getWorkspaceBelowX(const API::MatrixWorkspace_sptr &workspace, double x);
API::MatrixWorkspace_sptr getWorkspaceAboveX(const API::MatrixWorkspace_sptr &workspace, double x);
API::Algorithm_sptr getCropAlgorithmForWorkspace(const API::MatrixWorkspace_sptr &workspace);
API::MatrixWorkspace_sptr getOutputWorkspace(const API::Algorithm_sptr &algorithm);
API::MatrixWorkspace_sptr getSummedSpectra(const API::MatrixWorkspace_sptr &workspace);
PoldiAbstractChopper_sptr m_chopper;
double m_timeBinWidth;
size_t m_actualBinCount;
private:
void init() override;
void exec() override;
};
} // namespace Poldi
} // namespace Mantid