Skip to content
Snippets Groups Projects
setup.cpp 4.17 KiB
#include "setup.h"
#include "QDebug"
#include "QDir"
Setup::Setup(const QString initFile)
    : settingPath(initFile)
{
    readSetup();
    pixelateSphere();
}
void Setup::readSetup()
{
    QSettings settings(settingPath, QSettings::IniFormat);
    filePath = settings.value("File").toString();
//    filePath = ":/Data/Data/pulses.txt";
//    filePath = "/media/ming/DATA/projects/Postprocessing/simulation_2/pulses_with_pos_sort_by_time.txt";
    filePath = "/media/ming/DATA/projects/Postprocessing/simulation_3/pulses_with_pos_sort_by_time.txt";
    runID = settings.value("RunID").toString();
    outputDir = QDir(runID);

    settings.beginGroup("ImageSpace");
    R = settings.value("Radius").toDouble();
//    R = std::sqrt(13.6*13.6+30*30+0);
    R= 50;
    phiBins = settings.value("NPhiBins").toInt();
    phiMax = settings.value("PhiMax").toDouble();
    phiMax *= M_PI / 180;
    phiMin = settings.value("PhiMin").toDouble();
    phiMin *= M_PI / 180;
//    dphi = (phiMax - phiMin) / phiBins;
//    phiMax -= dphi / 2;
//    phiMin += dphi / 2;
    thetaBins = settings.value("NThetaBins").toInt();
    thetaMax = settings.value("ThetaMax").toDouble();
    thetaMax *= M_PI / 180;
    thetaMin = settings.value("ThetaMin").toDouble();
    thetaMin *= M_PI / 180;
//    dtheta = (thetaMax - thetaMin) / thetaBins;
//    thetaMax -= dtheta / 2;
//    thetaMin += dtheta / 2;
    settings.endGroup();

    settings.beginGroup("Channels");
    QStringList keys = settings.childKeys();
    foreach (QString key, keys) {
        channelSettings[QVariant(key).toInt()] = QVariant(settings.value(key)).value<Channel>();
    }
    settings.endGroup();

    settings.beginGroup("Rejections");
    energyCut = settings.value("EnergyCut").toBool();
    energyLow = settings.value("EnergyLowerThreshold").toDouble();
    energyUp = settings.value("EnergyUpperThreshold").toDouble();
    settings.endGroup();

    settings.beginGroup("Coincidence");
    timeWindow = settings.value("TimeWindow").toDouble();
    settings.endGroup();

}
void Setup::writeSetup(const QString path)
{
    QSettings settings(path, QSettings::IniFormat);
    settings.setValue("File", filePath);
    settings.setValue("RunID", runID);

    settings.beginGroup("ImageSpace");
    settings.setValue("Radius", R);
    settings.setValue("NPhiBins", phiBins);
    settings.setValue("PhiMin", std::round( phiMin * 180 / M_PI));
    settings.setValue("PhiMax", std::round( phiMax * 180 / M_PI));
    settings.setValue("ThetaMin", std::round( thetaMin * 180 / M_PI));
    settings.setValue("ThetaMax", std::round( thetaMax * 180 / M_PI));
    settings.setValue("NThetaBins", thetaBins);
    settings.endGroup();

    settings.beginGroup("Channels");
    for (auto it = channelSettings.constBegin();it != channelSettings.constEnd();it++){
        settings.setValue(QVariant(it.key()).toString(), QVariant::fromValue(it.value()));
    }
    settings.endGroup();

    settings.beginGroup("Rejections");
    settings.setValue("EnergyCut", energyCut);
    settings.setValue("EnergyLowerThreshold", energyLow);
    settings.setValue("EnergyUpperThreshold", energyUp);
    settings.endGroup();

    settings.beginGroup("Coincidence");
    settings.setValue("TimeWindow", timeWindow);
    settings.endGroup();
}

Setup::~Setup()
{
    qDebug() << "save settings to disk";
    writeSetup();
    qDebug() << "settings saved";
}
int Setup::pixelateSphere() {
    xbs = std::vector<std::vector<Vector3D>>(thetaBins, std::vector<Vector3D>(phiBins, Vector3D(0, 0, 0)));
    thetaBinCenters = std::vector<double>(thetaBins, 0);
    phiBinCenters = std::vector<double>(phiBins, 0);
    dphi = (phiMax - phiMin) / phiBins;
    dtheta = (thetaMax - thetaMin) / thetaBins;
    double phi;
    double theta = thetaMin + dtheta / 2;
    for (int i = 0; i < thetaBins; i++)
    {
        thetaBinCenters[i] = theta;
        phi = phiMin + dphi / 2;
        for (int j = 0; j < phiBins; j++)
        {
            if (i==0)
                phiBinCenters[j] = phi;
            xbs[i][j].X = R * std::cos(theta) * std::cos(phi);
            xbs[i][j].Y = R * std::cos(theta) * std::sin(phi);
            xbs[i][j].Z = R * std::sin(theta);
            phi += dphi;
        }
        theta += dtheta;
    }
    return 0;
}