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;
}