Program Listing for File NuMagSANSlib_SANSData2csv.h#

↰ Return to documentation for file (src/OutputData/SANSData/NuMagSANSlib_SANSData2csv.h)

#pragma once

#include "NuMagSANSlib_SANSDataTable.h"

void writeCSV(const std::string& filename, unsigned long length, const std::vector<Column>& columns) {
    std::ofstream fout(filename);
    if (!fout.is_open()) {
        throw std::runtime_error("Could not open file: " + filename);
    }

    // Header
    for (size_t i = 0; i < columns.size(); ++i) {
        fout << columns[i].name;
        if (i < columns.size() - 1)
            fout << ",";
    }
    fout << "\n";

    // Data
    for (unsigned long n = 0; n < length; ++n) {
        for (size_t i = 0; i < columns.size(); ++i) {
            fout << columns[i].data[n];
            if (i < columns.size() - 1)
                fout << ",";
        }
        fout << "\n";
    }

    fout.close();
}

void write2CSVtable_ScatteringData(InputFileData* InputData, ScatteringData* SANSData, int MagData_File_Index,
                                   int StructData_File_Index = 0, int RotData_File_Index = 0) {
    LogSystem::write("");
    LogSystem::write("write scattering data to csv-files...");

    std::string target_foldername = InputData->SANSDataFoldername + "/SANS_" + std::to_string(MagData_File_Index) + "/";

    if (StructData_File_Index > 0) {
        target_foldername += "StructData_" + std::to_string(StructData_File_Index) + "/";
    }

    if (RotData_File_Index > 0) {
        target_foldername += "RotData_" + std::to_string(RotData_File_Index) + "/";
    }

    // mkdir(target_foldername.c_str(), 0777);
    std::filesystem::create_directories(target_foldername);

    // ------------------- SANS2D -------------------
    if (InputData->output_fourier_correlation_matrix_flag || any_active(InputData->OutFlags.SANS2D)) {
        unsigned long L = (*SANSData->N_q) * (*SANSData->N_theta);

        auto columns = build_SANS2D_columns(InputData, SANSData);

        writeCSV(target_foldername + "SANS2D.csv", L, columns);

        LogSystem::write("SANS2D finished...");
    }

    // ------------------- SANS1D -------------------
    if (any_active(InputData->OutFlags.SANS1D)) {
        auto columns = build_SANS1D_columns(InputData, SANSData);

        writeCSV(target_foldername + "SANS1D.csv", (*SANSData->N_q), columns);

        LogSystem::write("SANS1D finished...");
    }

    // ------------------- Corr1D -------------------
    if (any_active(InputData->OutFlags.Corr1D) || any_active(InputData->OutFlags.PairDist1D)) {
        auto columns = build_Corr1D_columns(InputData, SANSData);

        writeCSV(target_foldername + "Corr1D.csv", (*SANSData->N_r), columns);

        LogSystem::write("Corr1D finished...");
    }

    // ------------------- Corr2D -------------------
    if (any_active(InputData->OutFlags.Corr2D)) {
        unsigned long L = (*SANSData->N_r) * (*SANSData->N_alpha);

        auto columns = build_Corr2D_columns(InputData, SANSData);

        writeCSV(target_foldername + "Corr2D.csv", L, columns);

        LogSystem::write("Corr2D finished...");
    }
}