plotwindow.cpp 13.09 KiB
#include "plotwindow.h"
#include <QDebug>
#include <QDateTime>
QPlotWindow::QPlotWindow(QWidget *parent, const Setup* config_, PlotData* plotdata_)
: QMainWindow(parent),
config(config_),
ui(new Ui::PlotWindow),
plotdata(plotdata_)
{
ui->setupUi(this);
ui->imageCanvas->setID(1);
ui->spectrumCanvas->setID(2);
// hide asic and channel boxes
// for image and spectrum canvas
ui->imageCanvas->hideBoxes();
ui->spectrumCanvas->hideBoxes();
ui->LGCanvas->setID(3);
ui->HGCanvas->setID(4);
connect(ui->actionStart, &QAction::triggered, this, &QPlotWindow::handleStart);
connect(ui->actionPause, &QAction::triggered, this, &QPlotWindow::handlePause);
connect(ui->actionStop, &QAction::triggered, this, &QPlotWindow::handleStop);
connect(ui->actionUnzoom, &QAction::triggered, this, &QPlotWindow::handleUnzoom);
connect(ui->actionClearAll, &QAction::triggered, this, &QPlotWindow::handleClear);
connect(ui->imageCanvas, &QCustomCanvas::canvasZoomedout, this, &QPlotWindow::handleUnzoom);
connect(ui->spectrumCanvas, &QCustomCanvas::canvasZoomedout, this, &QPlotWindow::handleUnzoom);
connect(ui->imageCanvas, &QCustomCanvas::canvasCleared, this, &QPlotWindow::handleClear);
connect(ui->spectrumCanvas, &QCustomCanvas::canvasCleared, this, &QPlotWindow::handleClear);
connect(ui->imageCanvas, &QCustomCanvas::canvasSaved2Image, this, &QPlotWindow::handleScreenshot);
connect(ui->spectrumCanvas, &QCustomCanvas::canvasSaved2Image, this, &QPlotWindow::handleScreenshot);
connect(ui->imageCanvas, &QCustomCanvas::canvasSaved2Txt, this, &QPlotWindow::handleSave2txt);
connect(ui->spectrumCanvas, &QCustomCanvas::canvasSaved2Txt, this, &QPlotWindow::handleSave2txt);
connect(ui->LGCanvas, &QCustomCanvas::canvasZoomedout, this, &QPlotWindow::handleUnzoom);
connect(ui->HGCanvas, &QCustomCanvas::canvasZoomedout, this, &QPlotWindow::handleUnzoom);
connect(ui->LGCanvas, &QCustomCanvas::canvasCleared, this, &QPlotWindow::handleClear);
connect(ui->HGCanvas, &QCustomCanvas::canvasCleared, this, &QPlotWindow::handleClear);
connect(ui->LGCanvas, &QCustomCanvas::canvasSaved2Image, this, &QPlotWindow::handleScreenshot);
connect(ui->HGCanvas, &QCustomCanvas::canvasSaved2Image, this, &QPlotWindow::handleScreenshot);
connect(ui->LGCanvas, &QCustomCanvas::canvasSaved2Txt, this, &QPlotWindow::handleSave2txt);
connect(ui->HGCanvas, &QCustomCanvas::canvasSaved2Txt, this, &QPlotWindow::handleSave2txt);
connect(ui->LGCanvas, &QCustomCanvas::asicChanged, this, &QPlotWindow::handleAsicChanged);
connect(ui->LGCanvas, &QCustomCanvas::channelChanged, this, &QPlotWindow::handleChannelChanged);
connect(ui->HGCanvas, &QCustomCanvas::asicChanged, this, &QPlotWindow::handleAsicChanged);
connect(ui->HGCanvas, &QCustomCanvas::channelChanged, this, &QPlotWindow::handleChannelChanged);
// draw image
ui->imageCanvas->Canvas()->cd();
plotdata->mMutex.lock();
plotdata->drawImage();
plotdata->drawCountsLabel();
plotdata->mMutex.unlock();
ui->imageCanvas->Canvas()->Modified();
ui->imageCanvas->Canvas()->Update();
// draw spectrum
ui->spectrumCanvas->Canvas()->cd();
plotdata->mMutex.lock();
plotdata->drawSpectrum();
plotdata->mMutex.unlock();
ui->spectrumCanvas->Canvas()->Modified();
ui->spectrumCanvas->Canvas()->Update();
// draw LG spectrum
ui->LGCanvas->Canvas()->cd();
plotdata->mMutex.lock();
plotdata->drawLGspectrum(LGAsicID, LGChannelID);
plotdata->mMutex.unlock();
ui->LGCanvas->Canvas()->Modified();
ui->LGCanvas->Canvas()->Update();
// draw HG spectrum
ui->HGCanvas->Canvas()->cd();
plotdata->mMutex.lock();
plotdata->drawHGspectrum(HGAsicID, HGChannelID);
plotdata->mMutex.unlock();
ui->HGCanvas->Canvas()->Modified();
ui->HGCanvas->Canvas()->Update();
}
QPlotWindow::~QPlotWindow()
{
delete ui;
}
void QPlotWindow::handleStart(){
emit runStarted();
ui->statusbar->showMessage("Running.");
}
void QPlotWindow::handlePause()
{
emit runPaused();
ui->statusbar->showMessage("Paused.");
}
void QPlotWindow::handleStop()
{
emit runStopped();
ui->statusbar->showMessage("Stopped.");
}
void QPlotWindow::handleUnzoom(int id)
{
if (id==0)
{
plotdata->unZoomImage();
plotdata->unZoomSpectrum();
// TODO
plotdata->unZoomLG(LGAsicID, LGChannelID);
plotdata->unZoomHG(HGAsicID, HGChannelID);
}
else if (id == ui->imageCanvas->getID())
{
plotdata->unZoomImage();
}
else if (id ==ui->spectrumCanvas->getID())
{
plotdata->unZoomSpectrum();
}
else if (id ==ui->LGCanvas->getID())
{
plotdata->unZoomLG(LGAsicID, LGChannelID);
}
else if (id ==ui->HGCanvas->getID())
{
plotdata->unZoomHG(HGAsicID, HGChannelID);
}
}
void QPlotWindow::reopen()
{
ui->imageCanvas->Canvas()->cd();
ui->imageCanvas->Canvas()->Modified();
ui->imageCanvas->Canvas()->Update();
ui->spectrumCanvas->Canvas()->cd();
ui->spectrumCanvas->Canvas()->Modified();
ui->spectrumCanvas->Canvas()->Update();
ui->LGCanvas->Canvas()->cd();
ui->LGCanvas->Canvas()->Modified();
ui->LGCanvas->Canvas()->Update();
ui->HGCanvas->Canvas()->cd();
ui->HGCanvas->Canvas()->Modified();
ui->HGCanvas->Canvas()->Update();
}
void QPlotWindow::changeEvent(QEvent *e)
{
if(e->type() == QEvent::WindowStateChange){
QWindowStateChangeEvent *event = static_cast<QWindowStateChangeEvent *>(e);
if((event->oldState() & Qt::WindowMaximized)||
(event->oldState() & Qt::WindowMinimized)||
(event->oldState() & Qt::WindowNoState &&
this->windowState() == Qt::WindowMaximized)){
if(ui->imageCanvas->Canvas()){
ui->imageCanvas->Canvas()->Resize();
ui->imageCanvas->Canvas()->Update();
}
if(ui->spectrumCanvas->Canvas()){
ui->spectrumCanvas->Canvas()->Resize();
ui->spectrumCanvas->Canvas()->Update();
}
}
}
}
void QPlotWindow::redraw()
{
plotdata->mMutex.lock();
ui->imageCanvas->Canvas()->cd();
std::string strtmp = "Total counts: " + std::to_string(plotdata->counts);
plotdata->getCountsText()->SetText(0.7, 0.92, strtmp.c_str());
ui->imageCanvas->Canvas()->Modified();
ui->imageCanvas->Canvas()->Update();
ui->spectrumCanvas->Canvas()->cd();
ui->spectrumCanvas->Canvas()->Modified();
ui->spectrumCanvas->Canvas()->Update();
ui->LGCanvas->Canvas()->cd();
ui->LGCanvas->Canvas()->Modified();
ui->LGCanvas->Canvas()->Update();
ui->HGCanvas->Canvas()->cd();
ui->HGCanvas->Canvas()->Modified();
ui->HGCanvas->Canvas()->Update();
plotdata->mMutex.unlock();
}
void QPlotWindow::handleClear(int id){
if (id==0){
qDebug() << "Clear all";
plotdata->clearAll();
}
else if (id ==ui->imageCanvas->getID()) {
qDebug() << "Clear image";
plotdata->clearImage();
}
else if (id ==ui->spectrumCanvas->getID()) {
qDebug() << "Clear spectrum";
plotdata->clearSpectrum();
}
else if (id == ui->LGCanvas->getID())
{
qDebug() << "Clear LG spectrum";
// plotdata->clearLGSpectrum();
}
else if (id == ui->HGCanvas->getID())
{
qDebug() << "Clear HG spectrum";
// plotdata->clearHGSpectrum();
}
}
void QPlotWindow::handleScreenshot(int id){
QCustomCanvas* canvas;
QString key;
QDateTime dateTime = QDateTime::currentDateTime();
QString currentDateTime = dateTime.toString("yyyy-MM-dd-HH-mm-ss");
QString fileName;
if (id==0){
qDebug() << "Save all";
handleScreenshot(ui->imageCanvas->getID());
handleScreenshot(ui->spectrumCanvas->getID());
handleScreenshot(ui->LGCanvas->getID());
handleScreenshot(ui->HGCanvas->getID());
}
else if (id ==ui->imageCanvas->getID()) {
key = "Image";
canvas = ui->imageCanvas;
fileName = config->outputDir.absolutePath() + QString("/Screenshot-%1-%2.png").arg(key, currentDateTime);
}
else if (id ==ui->spectrumCanvas->getID()) {
key = "Coincidence-Spectrum";
canvas = ui->spectrumCanvas;
fileName = config->outputDir.absolutePath() + QString("/Screenshot-%1-%2.png").arg(key, currentDateTime);
}
else if (id ==ui->LGCanvas->getID()) {
key = "LG-Spectrum";
canvas = ui->LGCanvas;
fileName = config->outputDir.absolutePath() +
QString("/Screenshot-%1-%2-ASIC-%3-Channel-%4.png").arg(key, currentDateTime,
QString::number(LGAsicID), QString::number(LGChannelID));
}
else if (id ==ui->HGCanvas->getID()) {
key = "HG-Spectrum";
canvas = ui->HGCanvas;
fileName = config->outputDir.absolutePath() +
QString("/Screenshot-%1-%2-ASIC-%3-Channel-%4.png").arg(key, currentDateTime,
QString::number(HGAsicID), QString::number(HGChannelID));
}
else
return;
qDebug() << QString("Save %1").arg(key);
plotdata->mMutex.lock();
canvas->Canvas()->SaveAs(fileName.toLocal8Bit().constData());
plotdata->mMutex.unlock();
ui->statusbar->showMessage(QString("%1 saved to: %2").arg(key, fileName));
}
void QPlotWindow::handleSave2txt(int id){
QDateTime dateTime = QDateTime::currentDateTime();
QString currentDateTime = dateTime.toString("yyyy-MM-dd-HH-mm-ss");
if (id==0){
qDebug() << "Save all";
}
else if (id == ui->imageCanvas->getID()) {
qDebug() << "Save image to txt";
QString fileName = config->outputDir.absolutePath() + QString("/Image-%1.txt").arg(currentDateTime);
plotdata->saveImage2txt(fileName.toStdString());
ui->statusbar->showMessage(QString("Image saved to: %1").arg(fileName));
}
else if (id == ui->spectrumCanvas->getID()) {
qDebug() << "Save coincidence spectrum to txt";
QString fileName = config->outputDir.absolutePath() + QString("/Coincidence-Spectrum-%1.txt").arg(currentDateTime);
plotdata->saveSpectrum2txt(fileName.toStdString());
ui->statusbar->showMessage(QString("Spectrum saved to: %1").arg(fileName));
}
else if (id == ui->LGCanvas->getID()) {
qDebug() << "Save LG spectrum to txt";
QString fileName = config->outputDir.absolutePath() +
QString("/LG-Spectrum-%1-ASIC-%2-Channel-%3.txt").arg(currentDateTime,
QString::number(LGAsicID), QString::number(LGChannelID));
plotdata->saveLGSpectrum2txt(fileName.toStdString(), LGAsicID, LGChannelID);
ui->statusbar->showMessage(QString("LG Spectrum saved to: %1").arg(fileName));
}
else if (id == ui->HGCanvas->getID()) {
qDebug() << "Save HG spectrum to txt";
QString fileName = config->outputDir.absolutePath() +
QString("/HG-Spectrum-%1-ASIC-%2-Channel-%3.txt").arg(currentDateTime,
QString::number(HGAsicID), QString::number(HGChannelID));
plotdata->saveHGSpectrum2txt(fileName.toStdString(), HGAsicID, HGChannelID);
ui->statusbar->showMessage(QString("LG Spectrum saved to: %1").arg(fileName));
}
}
void QPlotWindow::handleAsicChanged(int id)
{
if (id == ui->LGCanvas->getID())
{
if (ui->LGCanvas->getAsicID() == LGAsicID)
return;
LGAsicID = ui->LGCanvas->getAsicID();
switchLGHG(id);
}
else if (id == ui->HGCanvas->getID())
{
if (ui->HGCanvas->getAsicID() == HGAsicID)
return;
HGAsicID = ui->HGCanvas->getAsicID();
switchLGHG(id);
}
}
void QPlotWindow::handleChannelChanged(int id)
{
if (id == ui->LGCanvas->getID())
{
if (ui->LGCanvas->getChannelID() == LGChannelID)
return;
LGChannelID = ui->LGCanvas->getChannelID();
switchLGHG(id);
}
else if (id == ui->HGCanvas->getID())
{
if (ui->HGCanvas->getChannelID() == HGChannelID)
return;
HGChannelID = ui->HGCanvas->getChannelID();
switchLGHG(id);
}
}
void QPlotWindow::switchLGHG(int id)
{
QCustomCanvas* canvas;
if (id == ui->LGCanvas->getID())
canvas = ui->LGCanvas;
else if (id == ui->HGCanvas->getID())
canvas = ui->HGCanvas;
else
return;
// redraw
plotdata->mMutex.lock();
canvas->Canvas()->cd();
canvas->Canvas()->Clear(); // clear canvas
// draw new spectrum
// TODO
if (id == ui->LGCanvas->getID())
{
qDebug() << QString("Draw LG ASIC-%1, Channel-%2").arg(LGAsicID, LGChannelID);
plotdata->drawLGspectrum(LGAsicID, LGChannelID);
}
else if (id == ui->HGCanvas->getID())
{
qDebug() << QString("Draw HG ASIC-%1, Channel-%2").arg(HGAsicID, HGChannelID);
plotdata->drawHGspectrum(HGAsicID, HGChannelID);
}
canvas->Canvas()->Modified();
canvas->Canvas()->Update();
plotdata->mMutex.unlock();
}