From 6faeaf7c9bb91403bcfd0f71786a3156c1717e7b Mon Sep 17 00:00:00 2001 From: "Ryan@SOLARIS_testStation" Date: Tue, 20 Aug 2024 12:22:26 -0400 Subject: [PATCH] add Toggle line display on histogram 1D --- Histogram1D.h | 79 ++++++++++++++++++++++++++++++++++++----------- SingleSpectra.cpp | 6 ++-- 2 files changed, 65 insertions(+), 20 deletions(-) diff --git a/Histogram1D.h b/Histogram1D.h index 1993061..323a9dd 100644 --- a/Histogram1D.h +++ b/Histogram1D.h @@ -15,6 +15,8 @@ public: // DebugPrint("%s", "Histogram1D"); isLogY = false; + for( int i = 0; i < MaxNHist; i++ ) showHist[i] = true; + for( int i = 0; i < 3; i ++) txt[i] = nullptr; nData = 1; Rebin(xbin, xmin, xmax); @@ -86,12 +88,15 @@ public: QAction * a1 = menu.addAction("UnZoom"); QAction * a5 = menu.addAction("Set/UnSet Log-y"); + QAction * a6 = nullptr; + if( nData > 1 ) a6 = menu.addAction("Toggle lines display"); QAction * a2 = menu.addAction("Clear hist."); QAction * a3 = menu.addAction("Toggle Stat."); QAction * a4 = menu.addAction("Rebin (clear histogram)"); //TODO fitGuass QAction *selectedAction = menu.exec(event->globalPosition().toPoint()); + //*========================================== UnZoom if( selectedAction == a1 ){ xAxis->setRangeLower(xMin); xAxis->setRangeUpper(xMax); @@ -101,11 +106,13 @@ public: usingMenu = false; } + //*========================================== Clear Hist if( selectedAction == a2 ){ Clear(); usingMenu = false; } + //*========================================== Toggle Stat. if( selectedAction == a3 ){ for( int i = 0; i < 3; i++){ txt[i]->setVisible( !txt[i]->visible()); @@ -113,6 +120,7 @@ public: replot(); usingMenu = false; } + //*========================================== Rebin if( selectedAction == a4 ){ QDialog dialog(this); dialog.setWindowTitle("Rebin histogram"); @@ -145,25 +153,25 @@ public: double number[3]; QObject::connect(&buttonBox, &QDialogButtonBox::accepted, [&]() { - int OKcount = 0; - bool conversionOk = true; - for( int i = 0; i < 3; i++ ){ - number[i] = lineEdit[i]->text().toDouble(&conversionOk); - if( conversionOk ){ - OKcount++; - }else{ - msg->setText(nameList[i] + " is invalid."); - return; - } + int OKcount = 0; + bool conversionOk = true; + for( int i = 0; i < 3; i++ ){ + number[i] = lineEdit[i]->text().toDouble(&conversionOk); + if( conversionOk ){ + OKcount++; + }else{ + msg->setText(nameList[i] + " is invalid."); + return; } + } - if( OKcount == 3 ) { - if( number[2] > number[1] ) { - dialog.accept(); - }else{ - msg->setText(nameList[2] + " is smaller than " + nameList[1]); - } + if( OKcount == 3 ) { + if( number[2] > number[1] ) { + dialog.accept(); + }else{ + msg->setText(nameList[2] + " is smaller than " + nameList[1]); } + } }); QObject::connect(&buttonBox, &QDialogButtonBox::rejected, [&]() { dialog.reject();}); @@ -174,8 +182,38 @@ public: } } - if( selectedAction == a5 ){ + //*========================================== Toggle line Display + if( selectedAction == a6 ){ + QDialog dialog(this); + dialog.setWindowTitle("Toggle lines Display"); + + QFormLayout layout(&dialog); + + QCheckBox ** cbline = new QCheckBox *[nData]; + for( int i = 0; i < nData; i++ ){ + cbline[i] = new QCheckBox(graph(i)->name(), &dialog); + layout.addRow(cbline[i]); + if( showHist[i] ) cbline[i]->setChecked(true); + } + + QDialogButtonBox buttonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, &dialog); + layout.addRow(&buttonBox); + + QObject::connect(&buttonBox, &QDialogButtonBox::accepted, [&]() { + for( int i = 0; i < nData; i++ ){ + showHist[i] = cbline[i]->isChecked(); + } + dialog.accept(); + }); + QObject::connect(&buttonBox, &QDialogButtonBox::rejected, [&]() { dialog.reject();}); + + if( dialog.exec() == QDialog::Accepted ){ + UpdatePlot(); + } + } + //*========================================== Set Log y + if( selectedAction == a5 ){ if( !isLogY ){ this->yAxis->setScaleType(QCPAxis::stLogarithmic); isLogY = true; @@ -211,7 +249,10 @@ public: void UpdatePlot(){ DebugPrint("%s", "Histogram1D"); - for( int ID = 0 ; ID < nData; ID ++) graph(ID)->setData(xList, yList[ID]); + for( int ID = 0 ; ID < nData; ID ++) { + graph(ID)->setVisible(showHist[ID]); + graph(ID)->setData(xList, yList[ID]); + } xAxis->setRangeLower(xMin); xAxis->setRangeUpper(xMax); yAxis->setRangeLower(0); @@ -324,6 +365,8 @@ private: bool usingMenu; + bool showHist[MaxNHist]; + }; diff --git a/SingleSpectra.cpp b/SingleSpectra.cpp index c1b91de..346af9f 100644 --- a/SingleSpectra.cpp +++ b/SingleSpectra.cpp @@ -212,7 +212,7 @@ SingleSpectra::SingleSpectra(Digitizer ** digi, unsigned int nDigi, QString rawD if( i < nDigi ) { hist[i][j] = new Histogram1D("Digi-" + QString::number(digi[i]->GetSerialNumber()) +", Ch-" + QString::number(j), "Raw Energy [ch]", nBin, eMin, eMax); if( digi[i]->GetDPPType() == DPPTypeCode::DPP_PSD_CODE ){ - hist[i][j]->AddDataList("Long Energy", Qt::green); + hist[i][j]->AddDataList("Short Energy", Qt::green); } }else{ hist[i][j] = nullptr; @@ -367,7 +367,9 @@ void SingleSpectra::FillHistograms(){ hist[ID][ch]->Fill( data ); if( digi[i]->GetDPPType() == DPPTypeCode::DPP_PSD_CODE ){ - hist[ID][ch]->Fill( digi[ID]->GetData()->GetEnergy2(ch, lastFilledIndex[ID][ch]), 1); + uShort e2 = digi[ID]->GetData()->GetEnergy2(ch, lastFilledIndex[ID][ch]); + // printf("%u \n", e2); + hist[ID][ch]->Fill( e2, 1); } hist2D[ID]->Fill(ch, data); }