Program Listing for File NuMagSANSlib_SpectralData2csv.h#
↰ Return to documentation for file (src/OutputData/SpectralData/NuMagSANSlib_SpectralData2csv.h)
#pragma once
#include "NuMagSANSlib_SpectralDataTable.h"
void write_spectral_csv(const std::string& folder, const SpectralComponent& comp, SpectralData* SpecData) {
unsigned int Nq = *SpecData->Nq;
auto columns = build_spectral_intensity_columns(SpecData, comp);
std::ofstream fout(folder + comp.name + ".csv");
fout << columns.front().name;
for (unsigned int col = 1; col < columns.size(); ++col)
fout << "," << columns[col].name;
fout << "\n";
for (unsigned int i = 0; i < Nq; ++i) {
fout << columns.front().data[i];
for (unsigned int col = 1; col < columns.size(); ++col)
fout << "," << columns[col].data[i];
fout << "\n";
}
}
void write_amplitude_csv(const std::string& folder, const SpectralComponent& comp, SpectralData* SpecData) {
unsigned int k_max = *SpecData->k_max;
std::vector<float> k_values;
auto columns = build_spectral_amplitude_columns(SpecData, comp, k_values);
std::ofstream fout(folder + comp.name + ".csv");
if (!fout.is_open()) {
LogSystem::write("Error opening amplitude file: " + std::string(comp.name));
return;
}
fout << columns.front().name;
for (unsigned int col = 1; col < columns.size(); ++col)
fout << "," << columns[col].name;
fout << "\n";
for (unsigned int k = 0; k <= k_max; ++k) {
fout << columns.front().data[k];
for (unsigned int col = 1; col < columns.size(); ++col)
fout << "," << columns[col].data[k];
fout << "\n";
}
}
void write2CSV_SpectralData(InputFileData* InputData, SpectralData* SpecData, int MagData_File_Index,
int StructData_File_Index = 0, int RotData_File_Index = 0) {
LogSystem::write("");
LogSystem::write("write spectral decomposition data to csv-files...");
std::string baseFolder = InputData->SANSDataFoldername + "/SANS_" + std::to_string(MagData_File_Index) + "/";
if (StructData_File_Index > 0) {
baseFolder += "StructData_" + std::to_string(StructData_File_Index) + "/";
}
if (RotData_File_Index > 0) {
baseFolder += "RotData_" + std::to_string(RotData_File_Index) + "/";
}
baseFolder += "AngularSpectrum/";
// mkdir(baseFolder.c_str(), 0777);
std::filesystem::create_directories(baseFolder);
// ================================
// Intensities
// ================================
std::string intensityFolder = baseFolder + "Intensities/";
// mkdir(intensityFolder.c_str(), 0777);
std::filesystem::create_directories(intensityFolder);
auto intensities = build_spectral_intensities(SpecData);
for (const auto& comp : intensities)
write_spectral_csv(intensityFolder, comp, SpecData);
// ================================
// Amplitudes
// ================================
std::string ampFolder = baseFolder + "Amplitudes/";
// mkdir(ampFolder.c_str(), 0777);
std::filesystem::create_directories(ampFolder);
auto amplitudes = build_spectral_amplitudes(SpecData);
for (const auto& comp : amplitudes)
write_amplitude_csv(ampFolder, comp, SpecData);
LogSystem::write("All spectral CSV files written successfully.");
}