Compare commits

..

No commits in common. "8a0503629c4ba622b00333f15a97662d1bdd5651" and "1af2bd4ce9462630245ed207dba69b9ef61ca124" have entirely different histories.

4 changed files with 38 additions and 84 deletions

View File

@ -49,13 +49,10 @@ public:
colorScale->setType(QCPAxis::atRight); colorScale->setType(QCPAxis::atRight);
colorMap->setColorScale(colorScale); colorMap->setColorScale(colorScale);
QCPColorGradient color; QCPColorGradient color;
color.setNanHandling(QCPColorGradient::NanHandling::nhNanColor);
color.setNanColor(QColor("white"));
color.clearColorStops(); color.clearColorStops();
// color.setColorStopAt( 0.0, QColor("white" )); color.setColorStopAt( 0.0, QColor("white" ));
color.setColorStopAt( 0.0, QColor("purple" )); color.setColorStopAt( 0.000001, QColor("purple" ));
color.setColorStopAt( 0.2, QColor("blue")); color.setColorStopAt( 0.2, QColor("blue"));
color.setColorStopAt( 0.4, QColor("cyan")); color.setColorStopAt( 0.4, QColor("cyan"));
color.setColorStopAt( 0.6, QColor("green")); color.setColorStopAt( 0.6, QColor("green"));
@ -194,18 +191,16 @@ public:
void SetChannelMap(bool onOff, int tickStep = 1) { isChannelMap = onOff; this->tickStep = tickStep;} void SetChannelMap(bool onOff, int tickStep = 1) { isChannelMap = onOff; this->tickStep = tickStep;}
void UpdatePlot(){ void UpdatePlot(){
// QCPColorGradient color; QCPColorGradient color;
// color.clearColorStops(); color.clearColorStops();
// color.setNanColor(QColor("white")); color.setColorStopAt( 0.0, QColor("white" ));
// // color.setColorStopAt( 0.0, QColor("white" )); color.setColorStopAt( 1.0/entry[1][1], QColor("purple" ));
// // color.setColorStopAt( 1.0/entry[1][1], QColor("purple" )); color.setColorStopAt( 0.2, QColor("blue"));
// color.setColorStopAt( 0.0, QColor("purple" )); color.setColorStopAt( 0.4, QColor("cyan"));
// color.setColorStopAt( 0.2, QColor("blue")); color.setColorStopAt( 0.6, QColor("green"));
// color.setColorStopAt( 0.4, QColor("cyan")); color.setColorStopAt( 0.8, QColor("yellow"));
// color.setColorStopAt( 0.6, QColor("green")); color.setColorStopAt( 1.0, QColor("red"));
// color.setColorStopAt( 0.8, QColor("yellow")); colorMap->setGradient(color);
// color.setColorStopAt( 1.0, QColor("red"));
// colorMap->setGradient(color);
colorMap->rescaleDataRange(); colorMap->rescaleDataRange();
@ -314,12 +309,6 @@ inline void Histogram2D::Rebin(int xbin, double xmin, double xmax, int ybin, do
colorMap->data()->setSize(xBin, yBin); colorMap->data()->setSize(xBin, yBin);
colorMap->data()->setRange(QCPRange(xMin, xMax), QCPRange(yMin, yMax)); colorMap->data()->setRange(QCPRange(xMin, xMax), QCPRange(yMin, yMax));
for( int i = 0; i < xBin; i++){
for( int j = 0; j < yBin; j++){
colorMap->data()->setCell(i, j, NAN);
}
}
if( isChannelMap ){ if( isChannelMap ){
QCPAxis * xAxis = colorMap->keyAxis(); QCPAxis * xAxis = colorMap->keyAxis();
xAxis->ticker()->setTickCount(xbin/tickStep); xAxis->ticker()->setTickCount(xbin/tickStep);

View File

@ -1,9 +1,11 @@
#include "SingleSpectra.h" #include "SingleSpectra.h"
#include <QValueAxis> #include <QValueAxis>
#include <QRandomGenerator>
#include <QGroupBox> #include <QGroupBox>
#include <QStandardItemModel> #include <QStandardItemModel>
#include <QLabel> #include <QLabel>
#include <QRandomGenerator>
SingleSpectra::SingleSpectra(Digitizer ** digi, unsigned int nDigi, QString rawDataPath, QMainWindow * parent) : QMainWindow(parent){ SingleSpectra::SingleSpectra(Digitizer ** digi, unsigned int nDigi, QString rawDataPath, QMainWindow * parent) : QMainWindow(parent){
DebugPrint("%s", "SingleSpectra"); DebugPrint("%s", "SingleSpectra");
@ -11,8 +13,7 @@ SingleSpectra::SingleSpectra(Digitizer ** digi, unsigned int nDigi, QString rawD
this->nDigi = nDigi; this->nDigi = nDigi;
this->rawDataPath = rawDataPath; this->rawDataPath = rawDataPath;
maxFillTimeinMilliSec = 1000; maxFillTimeinMilliSec = 500;
maxFillTimePerDigi = maxFillTimeinMilliSec/nDigi;
isSignalSlotActive = true; isSignalSlotActive = true;
@ -204,52 +205,47 @@ void SingleSpectra::FillHistograms(){
// DebugPrint("%s", "SingleSpectra"); // DebugPrint("%s", "SingleSpectra");
if( !fillHistograms ) return; if( !fillHistograms ) return;
unsigned short maxFillTimePerDigi = maxFillTimeinMilliSec/nDigi;
timespec t0, t1; timespec t0, t1;
QVector<int> randomDigiList = generateNonRepeatedCombination(nDigi);
for( int i = 0; i < nDigi; i++){ for( int i = 0; i < nDigi; i++){
int ID = randomDigiList[i];
QVector<int> randomChList = generateNonRepeatedCombination(digi[ID]->GetNumInputCh()); digiMTX[i].lock();
digiMTX[ID].lock();
clock_gettime(CLOCK_REALTIME, &t0); clock_gettime(CLOCK_REALTIME, &t0);
for( int k = 0; k < digi[ID]->GetNumInputCh(); k ++ ){ for( int ch = 0; ch < digi[i]->GetNumInputCh(); ch ++ ){
int ch = randomChList[k]; int lastIndex = digi[i]->GetData()->GetDataIndex(ch);
int lastIndex = digi[ID]->GetData()->GetDataIndex(ch);
if( lastIndex < 0 ) continue; if( lastIndex < 0 ) continue;
int loopIndex = digi[ID]->GetData()->GetLoopIndex(ch); int loopIndex = digi[i]->GetData()->GetLoopIndex(ch);
int temp1 = lastIndex + loopIndex * digi[ID]->GetData()->GetDataSize(); int temp1 = lastIndex + loopIndex * digi[i]->GetData()->GetDataSize();
int temp2 = lastFilledIndex[ID][ch] + loopFilledIndex[ID][ch] * digi[ID]->GetData()->GetDataSize(); int temp2 = lastFilledIndex[i][ch] + loopFilledIndex[i][ch] * digi[i]->GetData()->GetDataSize();
// printf("%d |%d %d \n", ch, temp2, temp1); // printf("%d |%d %d \n", ch, temp2, temp1);
if( temp1 <= temp2 ) continue; if( temp1 <= temp2 ) continue;
if( temp1 - temp2 > digi[ID]->GetData()->GetDataSize() ) { //DefaultDataSize = 10k if( temp1 - temp2 > digi[i]->GetData()->GetDataSize() ) { //DefaultDataSize = 10k
temp2 = temp1 - digi[ID]->GetData()->GetDataSize(); temp2 = temp1 - digi[i]->GetData()->GetDataSize();
lastFilledIndex[ID][ch] = lastIndex; lastFilledIndex[i][ch] = lastIndex;
lastFilledIndex[ID][ch] = loopIndex - 1; lastFilledIndex[i][ch] = loopIndex - 1;
} }
for( int j = 0 ; j <= temp1 - temp2; j ++){ for( int j = 0 ; j <= temp1 - temp2; j ++){
lastFilledIndex[ID][ch] ++; lastFilledIndex[i][ch] ++;
if( lastFilledIndex[ID][ch] > digi[ID]->GetData()->GetDataSize() ) { if( lastFilledIndex[i][ch] > digi[i]->GetData()->GetDataSize() ) {
lastFilledIndex[ID][ch] = 0; lastFilledIndex[i][ch] = 0;
loopFilledIndex[ID][ch] ++; loopFilledIndex[i][ch] ++;
} }
hist[ID][ch]->Fill( digi[ID]->GetData()->GetEnergy(ch, lastFilledIndex[ID][ch])); hist[i][ch]->Fill( digi[i]->GetData()->GetEnergy(ch, lastFilledIndex[i][ch]));
hist2D[ID]->Fill(ch, digi[ID]->GetData()->GetEnergy(ch, lastFilledIndex[ID][ch])); hist2D[i]->Fill(ch, digi[i]->GetData()->GetEnergy(ch, lastFilledIndex[i][ch]));
} }
if( histVisibility[ID][ch] ) hist[ID][ch]->UpdatePlot(); if( histVisibility[i][ch] ) hist[i][ch]->UpdatePlot();
if( hist2DVisibility[ID] ) hist2D[ID]->UpdatePlot(); if( hist2DVisibility[i] ) hist2D[i]->UpdatePlot();
clock_gettime(CLOCK_REALTIME, &t1); clock_gettime(CLOCK_REALTIME, &t1);
if( t1.tv_nsec - t0.tv_nsec + (t1.tv_sec - t0.tv_sec)*1e9 > maxFillTimePerDigi * 1e6 ) break; if( t1.tv_nsec - t0.tv_nsec + (t1.tv_sec - t0.tv_sec)*1e9 > maxFillTimePerDigi * 1e6 ) break;
} }
digiMTX[ID].unlock(); digiMTX[i].unlock();
} }
} }
@ -344,14 +340,3 @@ void SingleSpectra::LoadSetting(){
} }
} }
QVector<int> SingleSpectra::generateNonRepeatedCombination(int size) {
QVector<int> combination;
for (int i = 0; i < size; ++i) combination.append(i);
for (int i = 0; i < size - 1; ++i) {
int j = QRandomGenerator::global()->bounded(i, size);
combination.swapItemsAt(i, j);
}
return combination;
}

View File

@ -10,8 +10,6 @@
#include <QLineEdit> #include <QLineEdit>
#include <QGridLayout> #include <QGridLayout>
#include <QGroupBox> #include <QGroupBox>
#include <QVector>
#include <QRandomGenerator>
#include "macro.h" #include "macro.h"
#include "ClassDigitizer.h" #include "ClassDigitizer.h"
@ -40,8 +38,6 @@ public:
void SetMaxFillTime(unsigned short milliSec) { maxFillTimeinMilliSec = milliSec;} void SetMaxFillTime(unsigned short milliSec) { maxFillTimeinMilliSec = milliSec;}
unsigned short GetMaxFillTime() const {return maxFillTimeinMilliSec;}; unsigned short GetMaxFillTime() const {return maxFillTimeinMilliSec;};
QVector<int> generateNonRepeatedCombination(int size);
public slots: public slots:
void FillHistograms(); void FillHistograms();
void ChangeHistView(); void ChangeHistView();
@ -74,7 +70,6 @@ private:
QString rawDataPath; QString rawDataPath;
unsigned short maxFillTimeinMilliSec; unsigned short maxFillTimeinMilliSec;
unsigned short maxFillTimePerDigi;
bool isSignalSlotActive; bool isSignalSlotActive;

View File

@ -1,28 +1,13 @@
#include "FSUDAQ.h"
#include <QApplication> #include <QApplication>
#include <QMessageBox> #include <QMessageBox>
#include <QProcess> #include <QProcess>
#include <QPushButton> #include <QPushButton>
#include <QFile> #include <QFile>
#include "FSUDAQ.h"
#include <QObject>
#include <QDebug>
class CustomApplication : public QApplication{
public:
CustomApplication(int &argc, char **argv) : QApplication(argc, argv) {}
protected:
bool notify(QObject *receiver, QEvent *event) override{
qDebug() << "Event:" << event->type() << "Receiver:" << receiver;
return QApplication::notify(receiver, event);
}
};
int main(int argc, char *argv[]){ int main(int argc, char *argv[]){
QApplication a(argc, argv);
CustomApplication a(argc, argv);
bool isLock = false; bool isLock = false;
int pid = 0; int pid = 0;