Skip to content
Snippets Groups Projects
setup.cpp 3.78 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";

    settings.beginGroup("ImageSpace");
//    R = settings.value("Radius").toDouble();
    R = std::sqrt(3.6*3.6+10*10+0);
    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()
{
    QSettings settings(QDir::currentPath() + "/test.ini", QSettings::IniFormat);
    settings.setValue("File", filePath);

    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.resize(thetaBins, std::vector<Vector3D>(phiBins, Vector3D(0, 0, 0)));
    thetaBinCenters.resize(thetaBins, 0);
    phiBinCenters.resize(phiBins, 0);
    double phi = phiMin;
    double theta = thetaMin;
    for (int i = 0; i < thetaBins; i++)
    {
        thetaBinCenters[i] = theta;
        phi = phiMin;
        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;
}