322 lines
11 KiB
C++
322 lines
11 KiB
C++
#include "visualizationenlarge.h"
|
|
#include "ui_visualizationenlarge.h"
|
|
|
|
|
|
// variables for drawing the enlarged visulization view
|
|
float squareDim = 10;
|
|
|
|
int horizontalSliderValue = 50;
|
|
int horizontalSliderColorZeroValue = 0;
|
|
int manualColorZero = 0;
|
|
int manualColor = 0;
|
|
int colorScheme = 0;
|
|
int screenshotcounter = 1;
|
|
|
|
bool plotTopViewLog = false;
|
|
bool silderColorMoved = false;
|
|
bool useManualColor = false;
|
|
|
|
string workFolder;
|
|
|
|
VisualizationEnlarge::VisualizationEnlarge(QWidget *parent) :
|
|
QDialog(parent),
|
|
ui(new Ui::VisualizationEnlarge)
|
|
{
|
|
ui->setupUi(this);
|
|
setupRunGraph(ui->customPlot);
|
|
}
|
|
|
|
VisualizationEnlarge::~VisualizationEnlarge()
|
|
{
|
|
delete ui;
|
|
}
|
|
|
|
void VisualizationEnlarge::setSquareDimSize(float squareDimSize)
|
|
{
|
|
squareDim = squareDimSize;
|
|
}
|
|
|
|
void VisualizationEnlarge::sethorizontalSliderValue(int value)
|
|
{
|
|
horizontalSliderValue = value;
|
|
}
|
|
|
|
void VisualizationEnlarge::sethorizontalSliderColorZeroValue(int value)
|
|
{
|
|
horizontalSliderColorZeroValue = value;
|
|
}
|
|
|
|
|
|
void VisualizationEnlarge::setmanualColorZero(int value)
|
|
{
|
|
manualColorZero = value;
|
|
}
|
|
|
|
void VisualizationEnlarge::setmanualColor(int value)
|
|
{
|
|
manualColor = value;
|
|
}
|
|
|
|
void VisualizationEnlarge::setsilderColorMoved(bool value)
|
|
{
|
|
silderColorMoved = value;
|
|
}
|
|
|
|
void VisualizationEnlarge::setplotTopViewLog(bool value)
|
|
{
|
|
plotTopViewLog = value;
|
|
}
|
|
|
|
void VisualizationEnlarge::setuseManualColor(bool value)
|
|
{
|
|
useManualColor = value;
|
|
}
|
|
|
|
void VisualizationEnlarge::setColorScheme(int value)
|
|
{
|
|
colorScheme = value;
|
|
}
|
|
|
|
void VisualizationEnlarge::setWorkFolder(string text)
|
|
{
|
|
workFolder = text;
|
|
}
|
|
|
|
|
|
void VisualizationEnlarge::plotGraph(TH2F* data, int size, float squareDimSize)
|
|
{
|
|
setSquareDimSize(squareDimSize);
|
|
|
|
float entryWeight, maximumWeight;
|
|
float pixelsum;
|
|
|
|
QColor lightBlue = QColor (215, 237, 255);
|
|
|
|
ui->customPlot->clearPlottables();
|
|
ui->customPlot->plotLayout()->remove(ui->customPlot->plotLayout()->element(0,1));
|
|
|
|
int elementCount = ui->customPlot->plotLayout()->elementCount();
|
|
|
|
for(int i = 0; i < elementCount; i++)
|
|
{
|
|
if(qobject_cast<QCPLayoutGrid*>(ui->customPlot->plotLayout()->elementAt(i))) ui->customPlot->plotLayout()->removeAt(i);
|
|
}
|
|
ui->customPlot->plotLayout()->simplify();
|
|
|
|
QCPColorMap *colorMap = new QCPColorMap( ui->customPlot->xAxis, ui->customPlot->yAxis);
|
|
|
|
if (size == 500) colorMap->data()->setSize(500, 500);
|
|
if (size == 1000) colorMap->data()->setSize(1000, 1000);
|
|
if (size == 2000) colorMap->data()->setSize(1000, 1000);
|
|
if (size == 4000) colorMap->data()->setSize(1000, 1000);
|
|
colorMap->data()->setRange(QCPRange(-::squareDim/2./1000., ::squareDim/2./1000.), QCPRange(-::squareDim/2./1000., ::squareDim/2./1000.));
|
|
|
|
if (plotTopViewLog) colorMap->setDataScaleType(QCPAxis::stLogarithmic);
|
|
|
|
QCPColorScale *colorScale = new QCPColorScale(ui->customPlot);
|
|
|
|
colorScale->setType(QCPAxis::atRight);
|
|
colorMap->setColorScale(colorScale);
|
|
colorScale->axis()->setLabel("Neutron Hit Density");
|
|
|
|
colorScale->axis()->setSubTickPen(QPen(lightBlue));
|
|
colorScale->axis()->setTickPen(QPen(lightBlue));
|
|
colorScale->axis()->setTickLabelColor(lightBlue);
|
|
colorScale->axis()->setLabelColor(lightBlue);
|
|
|
|
QCPLayoutGrid *subLayout = new QCPLayoutGrid;
|
|
ui->customPlot->plotLayout()->addElement(0, 1, subLayout);
|
|
|
|
subLayout->setMargins(QMargins(10, 10, 10, 5));
|
|
subLayout->addElement(0, 0, colorScale);
|
|
|
|
ui->customPlot->plotLayout()->element(0,0)->setMaximumSize(997,997);
|
|
|
|
float minZ = 0;
|
|
|
|
if (plotTopViewLog) minZ = 1;
|
|
|
|
if (true)
|
|
{
|
|
if (size == 500)
|
|
{
|
|
for (int x=0; x<500; x+=1)
|
|
{
|
|
for (int y=0; y<500; y+=1)
|
|
{
|
|
colorMap->data()->setCell((int)x, (int)y, data->GetBinContent(x,y));
|
|
}
|
|
}
|
|
entryWeight = (data->GetEntries())/(500.*500.)*4.; maximumWeight = 1.* data->GetBinContent(data->GetMaximumBin());
|
|
}
|
|
if (size == 1000)
|
|
{
|
|
for (int x=0; x<1000; x+=1)
|
|
{
|
|
for (int y=0; y<1000; y+=1)
|
|
{
|
|
colorMap->data()->setCell((int)x, (int)y, data->GetBinContent(x,y));
|
|
}
|
|
}
|
|
entryWeight = (data->GetEntries())/(1000.*1000.)*4.; maximumWeight = 1.* data->GetBinContent(data->GetMaximumBin());
|
|
}
|
|
if (size == 2000)
|
|
{
|
|
for (int x=0; x<1000; x+=1)
|
|
{
|
|
for (int y=0; y<1000; y+=1)
|
|
{
|
|
pixelsum = 0;
|
|
for (int xadd=0; xadd<2; xadd+=1)
|
|
{
|
|
for (int yadd=0; yadd<2; yadd+=1)
|
|
{
|
|
pixelsum+=data->GetBinContent(2*x+xadd,2*y+yadd);
|
|
}
|
|
}
|
|
pixelsum = pixelsum/4.;
|
|
|
|
colorMap->data()->setCell((int)x, (int)y, pixelsum);
|
|
}
|
|
}
|
|
entryWeight = (data->GetEntries())/(1000.*1000.)*4.; maximumWeight = 1.* data->GetBinContent(data->GetMaximumBin());
|
|
}
|
|
|
|
if (size == 4000)
|
|
{
|
|
for (int x=0; x<1000; x+=1)
|
|
{
|
|
for (int y=0; y<1000; y+=1)
|
|
{
|
|
pixelsum = 0;
|
|
for (int xadd=0; xadd<4; xadd+=1)
|
|
{
|
|
for (int yadd=0; yadd<4; yadd+=1)
|
|
{
|
|
pixelsum+=data->GetBinContent(4*x+xadd,4*y+yadd);
|
|
}
|
|
}
|
|
pixelsum = pixelsum/16.;
|
|
|
|
colorMap->data()->setCell((int)x, (int)y, pixelsum);
|
|
}
|
|
}
|
|
entryWeight = (data->GetEntries())/(1000.*1000.)*4.; maximumWeight = 1.* data->GetBinContent(data->GetMaximumBin());
|
|
}
|
|
}
|
|
|
|
float colorscaleMax = (horizontalSliderValue*1.)/99.*maximumWeight;
|
|
if (colorscaleMax < 1) colorscaleMax = 1;
|
|
|
|
if (colorScheme==0) {colorMap->setGradient(QCPColorGradient::gpJet); colorScale->setGradient(QCPColorGradient::gpCold); }
|
|
if (colorScheme==1) {colorMap->setGradient(QCPColorGradient::gpNight); colorScale->setGradient(QCPColorGradient::gpNight); }
|
|
if (colorScheme==2) {colorMap->setGradient(QCPColorGradient::gpCold); colorScale->setGradient(QCPColorGradient::gpCold);}
|
|
if (colorScheme==3) {colorMap->setGradient(QCPColorGradient::gpThermal); colorScale->setGradient(QCPColorGradient::gpThermal);}
|
|
if (colorScheme==4) {colorMap->setGradient(QCPColorGradient::gpHot); colorScale->setGradient(QCPColorGradient::gpHot);}
|
|
if (colorScheme==5) {colorMap->setGradient(QCPColorGradient::gpPolar); colorScale->setGradient(QCPColorGradient::gpPolar);}
|
|
if (colorScheme==6) {colorMap->setGradient(QCPColorGradient::gpGrayscale); colorScale->setGradient(QCPColorGradient::gpGrayscale);}
|
|
|
|
colorMap->setInterpolate(true);
|
|
|
|
if (manualColorZero < minZ) { manualColorZero = minZ;}
|
|
|
|
if (!silderColorMoved)
|
|
{
|
|
if (entryWeight*1.1 < 5) {colorMap->setDataRange(QCPRange(minZ,5)); colorScale->setDataRange(QCPRange(minZ,5));}
|
|
else {colorMap->setDataRange(QCPRange(minZ,entryWeight*1.1)); colorScale->setDataRange(QCPRange(minZ,entryWeight*1.1));}
|
|
}
|
|
else
|
|
{
|
|
if (horizontalSliderColorZeroValue == 0) { colorMap->setDataRange(QCPRange( minZ , colorscaleMax )); colorScale->setDataRange(QCPRange(minZ,colorscaleMax));}
|
|
else { colorMap->setDataRange(QCPRange( (horizontalSliderColorZeroValue*1.)/99.*colorscaleMax , colorscaleMax )); colorScale->setDataRange(QCPRange((horizontalSliderColorZeroValue*1.)/99.*colorscaleMax,colorscaleMax));}
|
|
}
|
|
|
|
if (useManualColor)
|
|
{
|
|
colorMap->setDataRange(QCPRange( manualColorZero,manualColor ));
|
|
colorScale->setDataRange(QCPRange(manualColorZero,manualColor));
|
|
}
|
|
|
|
ui->customPlot->rescaleAxes();
|
|
ui->customPlot->replot();
|
|
}
|
|
|
|
void VisualizationEnlarge::setupRunGraph(QCustomPlot *customPlot)
|
|
{
|
|
//QColor lightBlue = QColor ( 234 , 246 , 255);
|
|
QColor lightBlue = QColor ( 215 , 237 , 255);
|
|
QColor someBlue = QColor ( 0 , 88 , 156);
|
|
customPlot->setBackground(someBlue);
|
|
customPlot->axisRect()->setBackground(Qt::white);
|
|
customPlot->xAxis->setTickLabelColor(lightBlue);
|
|
customPlot->yAxis->setTickLabelColor(lightBlue);
|
|
customPlot->xAxis->setLabelColor(lightBlue);
|
|
customPlot->yAxis->setLabelColor(lightBlue);
|
|
customPlot->xAxis->setBasePen(QPen(lightBlue));
|
|
customPlot->xAxis->setSubTickPen(QPen(lightBlue));
|
|
customPlot->yAxis->setTickPen(QPen(lightBlue));
|
|
customPlot->yAxis->setBasePen(QPen(lightBlue));
|
|
customPlot->yAxis->setSubTickPen(QPen(lightBlue));
|
|
customPlot->setInteractions(QCP::iRangeDrag|QCP::iRangeZoom);
|
|
|
|
QCPColorMap *colorMap = new QCPColorMap(customPlot->xAxis,customPlot->yAxis);
|
|
customPlot->axisRect()->setupFullAxesBox(true);
|
|
customPlot->xAxis->setLabel("x [m]");
|
|
customPlot->yAxis->setLabel("y [m]");
|
|
|
|
colorMap->data()->setSize(500, 500);
|
|
colorMap->data()->setRange(QCPRange(-::squareDim/2./1000., ::squareDim/2./1000.), QCPRange(-::squareDim/2./1000., ::squareDim/2./1000.));
|
|
|
|
colorMap->setGradient(QCPColorGradient::gpJet);
|
|
colorMap->rescaleDataRange(true);
|
|
QCPRange dataR = colorMap->dataRange(); dataR*=2;
|
|
colorMap->setDataRange(dataR);
|
|
|
|
QCPColorScale *colorScale = new QCPColorScale(ui->customPlot);
|
|
ui->customPlot->plotLayout()->addElement(0, 1, colorScale);
|
|
colorScale->setType(QCPAxis::atRight);
|
|
colorMap->setColorScale(colorScale);
|
|
colorScale->axis()->setLabel("Neutron Flux");
|
|
|
|
ui->customPlot->plotLayout()->element(0,0)->setMaximumSize(997,997);
|
|
|
|
colorScale->axis()->setSubTickPen(QPen(lightBlue));
|
|
colorScale->axis()->setTickPen(QPen(lightBlue));
|
|
colorScale->axis()->setTickLabelColor(lightBlue);
|
|
colorScale->axis()->setLabelColor(lightBlue);
|
|
|
|
colorScale->setDataRange(dataR);
|
|
|
|
customPlot->rescaleAxes();
|
|
|
|
customPlot->replot();
|
|
}
|
|
|
|
//void VisualizationEnlarge::setFocus(MainWindow* wF)
|
|
//{
|
|
//
|
|
//}
|
|
|
|
|
|
void VisualizationEnlarge::on_pushButtonPNG_toggled(bool checked)
|
|
{
|
|
//originalPixmap.save(QString::fromStdString(workFolder)+fileName, format.toAscii());
|
|
}
|
|
|
|
void VisualizationEnlarge::on_pushButtonPNG_clicked()
|
|
{
|
|
QScreen *screen = QGuiApplication::primaryScreen();
|
|
|
|
QPixmap originalPixmap;
|
|
|
|
originalPixmap = screen->grabWindow(ui->customPlot->winId());
|
|
|
|
QString fileName = QString::fromStdString(workFolder)+"/neutronHitDensityExport_"+QString::number(screenshotcounter)+".png";
|
|
|
|
if (!originalPixmap.save(fileName))
|
|
{
|
|
QMessageBox::warning(this, tr("Save Error"), tr("The image could not be saved to \"%1\".").arg(QDir::toNativeSeparators(fileName)));
|
|
}
|
|
screenshotcounter++;
|
|
}
|