Skip to content
Snippets Groups Projects
Commit ef138db2 authored by Gagik Vardanyan's avatar Gagik Vardanyan
Browse files

Re #18868 better way of reading data from raw array

parent 34d0263c
No related merge requests found
...@@ -46,9 +46,7 @@ private: ...@@ -46,9 +46,7 @@ private:
void init() override; void init() override;
void exec() override; void exec() override;
void loadDataDetails(NeXus::NXEntry&); void loadDataScan();
void loadDataScan(NeXus::NXEntry&);
void loadDetectorScan(NeXus::NXEntry&);
void loadStaticInstrument(); void loadStaticInstrument();
void loadMovingInstrument(); void loadMovingInstrument();
void loadMetadata(); void loadMetadata();
......
...@@ -73,11 +73,7 @@ void LoadILLDiffraction::exec() { ...@@ -73,11 +73,7 @@ void LoadILLDiffraction::exec() {
m_fileName = getPropertyValue("Filename"); m_fileName = getPropertyValue("Filename");
// open the root node loadDataScan();
NXRoot dataRoot(m_fileName);
NXEntry firstEntry = dataRoot.openFirstEntry();
loadDataScan(firstEntry);
m_progress->report("Loaded data scan"); m_progress->report("Loaded data scan");
//loadMetadata(); //loadMetadata();
...@@ -90,20 +86,22 @@ void LoadILLDiffraction::exec() { ...@@ -90,20 +86,22 @@ void LoadILLDiffraction::exec() {
/** /**
* Load the data scan * Load the data scan
*/ */
void LoadILLDiffraction::loadDataScan(NXEntry &firstEntry) { void LoadILLDiffraction::loadDataScan() {
std::string instName = firstEntry.getString("instrument/name"); // open the root node
NXRoot dataRoot(m_fileName);
NXEntry firstEntry = dataRoot.openFirstEntry();
m_numberScanPoints = firstEntry.getInt("data_scan/total_steps"); m_numberScanPoints = firstEntry.getInt("data_scan/total_steps");
// read in the actual data // read in the actual data
NXData dataGroup = firstEntry.openNXData("data_scan/detector_data"); NXData dataGroup = firstEntry.openNXData("data_scan/detector_data");
NXInt data = dataGroup.openIntData(); NXUInt data = dataGroup.openUIntData();
data.load(); data.load();
m_numberDetectorsRead = data.dim1(); m_numberDetectorsRead = data.dim1();
resolveInstrument(instName); resolveInstrument(firstEntry.getString("instrument/name"));
// read the scanned variables // read the scanned variables
NXInt scannedVar = firstEntry.openNXInt( NXInt scannedVar = firstEntry.openNXInt(
...@@ -145,13 +143,14 @@ void LoadILLDiffraction::loadDataScan(NXEntry &firstEntry) { ...@@ -145,13 +143,14 @@ void LoadILLDiffraction::loadDataScan(NXEntry &firstEntry) {
// Assign detector counts // Assign detector counts
for (int i = 1; i <= data.dim1(); ++i) { for (int i = 1; i <= data.dim1(); ++i) {
for (int j = 0; j < data.dim0(); ++j) { for (int j = 0; j < data.dim0(); ++j) {
double y = double(data()[j * data.dim1() + i - 1]); unsigned int y = data(j, i - 1);
m_outWorkspace->mutableY(i)[j] = y; m_outWorkspace->mutableY(i)[j] = y;
m_outWorkspace->mutableE(i)[j] = sqrt(y); m_outWorkspace->mutableE(i)[j] = sqrt(y);
} }
m_outWorkspace->mutableX(i) = xAxis; m_outWorkspace->mutableX(i) = xAxis;
} }
dataRoot.close();
loadStaticInstrument(); loadStaticInstrument();
} }
...@@ -185,21 +184,6 @@ void LoadILLDiffraction::resolveInstrument(const std::string &inst) { ...@@ -185,21 +184,6 @@ void LoadILLDiffraction::resolveInstrument(const std::string &inst) {
throw std::runtime_error("Unknown resolution mode for instrument " + throw std::runtime_error("Unknown resolution mode for instrument " +
inst); inst);
} }
} else if (inst == "D4") {
switch (m_numberDetectorsRead) {
m_numberDetectorsActual = m_numberDetectorsRead;
case 576: {
m_instName = "D4a";
break;
}
case 1152: {
m_instName = "D4b";
break;
}
default:
throw std::runtime_error("Unknown resolution mode for instrument " +
inst);
}
} else { } else {
m_instName = inst; m_instName = inst;
m_numberDetectorsActual = m_numberDetectorsRead; m_numberDetectorsActual = m_numberDetectorsRead;
......
...@@ -480,6 +480,8 @@ typedef NXDataSetTyped<double> NXDouble; ...@@ -480,6 +480,8 @@ typedef NXDataSetTyped<double> NXDouble;
typedef NXDataSetTyped<char> NXChar; typedef NXDataSetTyped<char> NXChar;
/// The size_t dataset type /// The size_t dataset type
typedef NXDataSetTyped<std::size_t> NXSize; typedef NXDataSetTyped<std::size_t> NXSize;
/// The size_t dataset type
typedef NXDataSetTyped<unsigned int> NXUInt;
//-------------------- classes --------------------------// //-------------------- classes --------------------------//
...@@ -866,6 +868,10 @@ public: ...@@ -866,6 +868,10 @@ public:
NXFloat openFloatData() { return openData<float>(); } NXFloat openFloatData() { return openData<float>(); }
/// Opens data of int type /// Opens data of int type
NXInt openIntData() { return openData<int>(); } NXInt openIntData() { return openData<int>(); }
/// Opens data of size type
NXSize openSizeData() { return openData<std::size_t>(); }
/// Opens data of unsigned int type
NXUInt openUIntData() { return openData<unsigned int>(); }
}; };
/** Implements NXdetector Nexus class. /** Implements NXdetector Nexus class.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment