[Major] remove histogram timing thread, make a new worker, move to a thread to fill histograms
This commit is contained in:
parent
55210083fc
commit
0a751eaab1
54
FSUDAQ.cpp
54
FSUDAQ.cpp
|
@ -36,7 +36,6 @@ FSUDAQ::FSUDAQ(QWidget *parent) : QMainWindow(parent){
|
||||||
scope = nullptr;
|
scope = nullptr;
|
||||||
digiSettings = nullptr;
|
digiSettings = nullptr;
|
||||||
singleHistograms = nullptr;
|
singleHistograms = nullptr;
|
||||||
histThread = nullptr;
|
|
||||||
onlineAnalyzer = nullptr;
|
onlineAnalyzer = nullptr;
|
||||||
runTimer = new QTimer();
|
runTimer = new QTimer();
|
||||||
breakAutoRepeat = true;
|
breakAutoRepeat = true;
|
||||||
|
@ -323,17 +322,6 @@ FSUDAQ::~FSUDAQ(){
|
||||||
|
|
||||||
if( scope ) delete scope;
|
if( scope ) delete scope;
|
||||||
|
|
||||||
if( histThread ){
|
|
||||||
|
|
||||||
if( !histThread->isStopped() ){
|
|
||||||
histThread->Stop();
|
|
||||||
histThread->quit();
|
|
||||||
histThread->wait();
|
|
||||||
}
|
|
||||||
|
|
||||||
delete histThread;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( singleHistograms ) delete singleHistograms;
|
if( singleHistograms ) delete singleHistograms;
|
||||||
|
|
||||||
if( onlineAnalyzer ) delete onlineAnalyzer;
|
if( onlineAnalyzer ) delete onlineAnalyzer;
|
||||||
|
@ -743,12 +731,6 @@ void FSUDAQ::OpenDigitizers(){
|
||||||
}
|
}
|
||||||
|
|
||||||
singleHistograms = new SingleSpectra(digi, nDigi, rawDataPath);
|
singleHistograms = new SingleSpectra(digi, nDigi, rawDataPath);
|
||||||
histThread = new TimingThread(this);
|
|
||||||
histThread->SetWaitTimeinSec(singleHistograms->GetMaxFillTime()/1000.);
|
|
||||||
connect(histThread, &TimingThread::timeUp, this, [=](){
|
|
||||||
if( singleHistograms == nullptr && !singleHistograms->IsFillHistograms()) return;
|
|
||||||
singleHistograms->FillHistograms();
|
|
||||||
});
|
|
||||||
|
|
||||||
LogMsg("====== <font style=\"color: blue;\"><b>" + QString("Done. Opened %1 digitizer(s).").arg(nDigi) + "</b></font> =====");
|
LogMsg("====== <font style=\"color: blue;\"><b>" + QString("Done. Opened %1 digitizer(s).").arg(nDigi) + "</b></font> =====");
|
||||||
|
|
||||||
|
@ -784,22 +766,12 @@ void FSUDAQ::CloseDigitizers(){
|
||||||
scalarThread->exit();
|
scalarThread->exit();
|
||||||
CleanUpScalar();
|
CleanUpScalar();
|
||||||
|
|
||||||
if( histThread){
|
|
||||||
histThread->Stop();
|
|
||||||
histThread->quit();
|
|
||||||
histThread->wait();
|
|
||||||
|
|
||||||
delete histThread;
|
|
||||||
histThread = nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( onlineAnalyzer ){
|
if( onlineAnalyzer ){
|
||||||
onlineAnalyzer->close();
|
onlineAnalyzer->close();
|
||||||
delete onlineAnalyzer;
|
delete onlineAnalyzer;
|
||||||
onlineAnalyzer = nullptr;
|
onlineAnalyzer = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if( singleHistograms ){
|
if( singleHistograms ){
|
||||||
singleHistograms->close();
|
singleHistograms->close();
|
||||||
delete singleHistograms;
|
delete singleHistograms;
|
||||||
|
@ -1054,6 +1026,9 @@ void FSUDAQ::OpenScalar(){
|
||||||
|
|
||||||
void FSUDAQ::UpdateScalar(){
|
void FSUDAQ::UpdateScalar(){
|
||||||
DebugPrint("%s", "FSUDAQ");
|
DebugPrint("%s", "FSUDAQ");
|
||||||
|
|
||||||
|
// printf("================== FSUDAQ::%s\n", __func__);
|
||||||
|
|
||||||
if( digi == nullptr ) return;
|
if( digi == nullptr ) return;
|
||||||
if( scalar == nullptr ) return;
|
if( scalar == nullptr ) return;
|
||||||
//if( !scalar->isVisible() ) return;
|
//if( !scalar->isVisible() ) return;
|
||||||
|
@ -1066,6 +1041,7 @@ void FSUDAQ::UpdateScalar(){
|
||||||
|
|
||||||
uint64_t totalFileSize = 0;
|
uint64_t totalFileSize = 0;
|
||||||
for( unsigned int iDigi = 0; iDigi < nDigi; iDigi++){
|
for( unsigned int iDigi = 0; iDigi < nDigi; iDigi++){
|
||||||
|
// printf("======== digi-%d\n", iDigi);
|
||||||
if( digi[iDigi]->IsBoardDisabled() ) continue;
|
if( digi[iDigi]->IsBoardDisabled() ) continue;
|
||||||
|
|
||||||
uint32_t acqStatus = digi[iDigi]->GetACQStatusFromMemory();
|
uint32_t acqStatus = digi[iDigi]->GetACQStatusFromMemory();
|
||||||
|
@ -1107,6 +1083,7 @@ void FSUDAQ::UpdateScalar(){
|
||||||
}
|
}
|
||||||
|
|
||||||
// digiMTX[iDigi].unlock();
|
// digiMTX[iDigi].unlock();
|
||||||
|
// printf("============= end of FSUDAQ::%s\n", __func__);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1181,7 +1158,7 @@ void FSUDAQ::StartACQ(){
|
||||||
}
|
}
|
||||||
lbScalarACQStatus->setText("<font style=\"color: green;\"><b>ACQ On</b></font>");
|
lbScalarACQStatus->setText("<font style=\"color: green;\"><b>ACQ On</b></font>");
|
||||||
|
|
||||||
if( singleHistograms != nullptr ) histThread->start();
|
if( singleHistograms != nullptr ) singleHistograms->startWork();
|
||||||
|
|
||||||
bnStartACQ->setEnabled(false);
|
bnStartACQ->setEnabled(false);
|
||||||
bnStartACQ->setStyleSheet("");
|
bnStartACQ->setStyleSheet("");
|
||||||
|
@ -1256,13 +1233,9 @@ void FSUDAQ::StopACQ(){
|
||||||
}
|
}
|
||||||
|
|
||||||
if( onlineAnalyzer ) onlineAnalyzer->StopThread();
|
if( onlineAnalyzer ) onlineAnalyzer->StopThread();
|
||||||
|
if( singleHistograms ) singleHistograms->stopWork();
|
||||||
|
|
||||||
|
|
||||||
if( singleHistograms && histThread->isRunning()){
|
|
||||||
histThread->Stop();
|
|
||||||
histThread->quit();
|
|
||||||
histThread->wait();
|
|
||||||
singleHistograms->ClearInternalDataCount();
|
|
||||||
}
|
|
||||||
lbScalarACQStatus->setText("<font style=\"color: red;\"><b>ACQ Off</b></font>");
|
lbScalarACQStatus->setText("<font style=\"color: red;\"><b>ACQ Off</b></font>");
|
||||||
|
|
||||||
bnStartACQ->setEnabled(true);
|
bnStartACQ->setEnabled(true);
|
||||||
|
@ -1755,19 +1728,14 @@ void FSUDAQ::OpenScope(){
|
||||||
}
|
}
|
||||||
|
|
||||||
if( digiSettings ) digiSettings->setEnabled(!onOff);
|
if( digiSettings ) digiSettings->setEnabled(!onOff);
|
||||||
|
|
||||||
if( singleHistograms ) {
|
if( singleHistograms ) {
|
||||||
if( onOff ) {
|
if( onOff ) {
|
||||||
histThread->start();
|
singleHistograms->startWork();
|
||||||
}else{
|
}else{
|
||||||
if( histThread->isRunning()){
|
singleHistograms->stopWork();
|
||||||
histThread->Stop();
|
|
||||||
histThread->quit();
|
|
||||||
histThread->wait();
|
|
||||||
singleHistograms->ClearInternalDataCount();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(scope, &Scope::UpdateScaler, this, &FSUDAQ::UpdateScalar);
|
connect(scope, &Scope::UpdateScaler, this, &FSUDAQ::UpdateScalar);
|
||||||
|
|
2
FSUDAQ.h
2
FSUDAQ.h
|
@ -194,7 +194,7 @@ private:
|
||||||
|
|
||||||
//@----- SingleSpectra
|
//@----- SingleSpectra
|
||||||
SingleSpectra * singleHistograms;
|
SingleSpectra * singleHistograms;
|
||||||
TimingThread * histThread;
|
// TimingThread * histThread;
|
||||||
|
|
||||||
//@----- Analyzer
|
//@----- Analyzer
|
||||||
Analyzer * onlineAnalyzer;
|
Analyzer * onlineAnalyzer;
|
||||||
|
|
|
@ -19,8 +19,6 @@ SingleSpectra::SingleSpectra(Digitizer ** digi, unsigned int nDigi, QString rawD
|
||||||
|
|
||||||
setWindowTitle("Single Histograms");
|
setWindowTitle("Single Histograms");
|
||||||
|
|
||||||
//setWindowFlags( this->windowFlags() & ~Qt::WindowCloseButtonHint );
|
|
||||||
|
|
||||||
//====== resize window if screen too small
|
//====== resize window if screen too small
|
||||||
QScreen * screen = QGuiApplication::primaryScreen();
|
QScreen * screen = QGuiApplication::primaryScreen();
|
||||||
QRect screenGeo = screen->geometry();
|
QRect screenGeo = screen->geometry();
|
||||||
|
@ -29,7 +27,6 @@ SingleSpectra::SingleSpectra(Digitizer ** digi, unsigned int nDigi, QString rawD
|
||||||
}else{
|
}else{
|
||||||
setGeometry(0, 0, 1000, 800);
|
setGeometry(0, 0, 1000, 800);
|
||||||
}
|
}
|
||||||
// setGeometry(0, 0, 1000, 800);
|
|
||||||
|
|
||||||
QWidget * layoutWidget = new QWidget(this);
|
QWidget * layoutWidget = new QWidget(this);
|
||||||
setCentralWidget(layoutWidget);
|
setCentralWidget(layoutWidget);
|
||||||
|
@ -174,11 +171,10 @@ SingleSpectra::SingleSpectra(Digitizer ** digi, unsigned int nDigi, QString rawD
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
QCheckBox * chkIsFillHistogram = new QCheckBox("Fill Histograms", this);
|
chkIsFillHistogram = new QCheckBox("Fill Histograms", this);
|
||||||
ctrlLayout->addWidget(chkIsFillHistogram, 0, 8);
|
ctrlLayout->addWidget(chkIsFillHistogram, 0, 8);
|
||||||
connect(chkIsFillHistogram, &QCheckBox::stateChanged, this, [=](int state){ fillHistograms = state;});
|
|
||||||
chkIsFillHistogram->setChecked(false);
|
chkIsFillHistogram->setChecked(false);
|
||||||
fillHistograms = false;
|
isFillingHistograms = false;
|
||||||
|
|
||||||
QLabel * lbSettingPath = new QLabel( settingPath , this);
|
QLabel * lbSettingPath = new QLabel( settingPath , this);
|
||||||
ctrlLayout->addWidget(lbSettingPath, 1, 0, 1, 6);
|
ctrlLayout->addWidget(lbSettingPath, 1, 0, 1, 6);
|
||||||
|
@ -237,10 +233,28 @@ SingleSpectra::SingleSpectra(Digitizer ** digi, unsigned int nDigi, QString rawD
|
||||||
ClearInternalDataCount();
|
ClearInternalDataCount();
|
||||||
|
|
||||||
|
|
||||||
|
workerThread = new QThread(this);
|
||||||
|
histWorker = new HistWorker(this);
|
||||||
|
timer = new QTimer(this);
|
||||||
|
|
||||||
|
histWorker->moveToThread(workerThread);
|
||||||
|
|
||||||
|
// Setup the timer to trigger every second
|
||||||
|
connect(timer, &QTimer::timeout, histWorker, &HistWorker::FillHistograms);
|
||||||
|
workerThread->start();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SingleSpectra::~SingleSpectra(){
|
SingleSpectra::~SingleSpectra(){
|
||||||
DebugPrint("%s", "SingleSpectra");
|
DebugPrint("%s", "SingleSpectra");
|
||||||
|
|
||||||
|
timer->stop();
|
||||||
|
|
||||||
|
if( workerThread->isRunning() ){
|
||||||
|
workerThread->quit();
|
||||||
|
workerThread->wait();
|
||||||
|
}
|
||||||
|
|
||||||
SaveSetting();
|
SaveSetting();
|
||||||
|
|
||||||
for( unsigned int i = 0; i < nDigi; i++ ){
|
for( unsigned int i = 0; i < nDigi; i++ ){
|
||||||
|
@ -309,82 +323,6 @@ void SingleSpectra::ChangeHistView(){
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SingleSpectra::FillHistograms(){
|
|
||||||
// DebugPrint("%s", "SingleSpectra");
|
|
||||||
if( !fillHistograms ) return;
|
|
||||||
|
|
||||||
timespec t0, t1;
|
|
||||||
|
|
||||||
QVector<int> randomDigiList = generateNonRepeatedCombination(nDigi);
|
|
||||||
|
|
||||||
// qDebug() << randomDigiList;
|
|
||||||
|
|
||||||
for( int i = 0; i < nDigi; i++){
|
|
||||||
int ID = randomDigiList[i];
|
|
||||||
|
|
||||||
QVector<int> randomChList = generateNonRepeatedCombination(digi[ID]->GetNumInputCh());
|
|
||||||
|
|
||||||
// qDebug() << randomChList;
|
|
||||||
|
|
||||||
// digiMTX[ID].lock();
|
|
||||||
|
|
||||||
// digi[ID]->GetData()->PrintAllData();
|
|
||||||
|
|
||||||
clock_gettime(CLOCK_REALTIME, &t0);
|
|
||||||
for( int k = 0; k < digi[ID]->GetNumInputCh(); k ++ ){
|
|
||||||
int ch = randomChList[k];
|
|
||||||
int lastIndex = digi[ID]->GetData()->GetDataIndex(ch);
|
|
||||||
// printf("--- ch %2d | last index %d \n", ch, lastIndex);
|
|
||||||
if( lastIndex < 0 ) continue;
|
|
||||||
|
|
||||||
int loopIndex = digi[ID]->GetData()->GetLoopIndex(ch);
|
|
||||||
|
|
||||||
int temp1 = lastIndex + loopIndex * digi[ID]->GetData()->GetDataSize();
|
|
||||||
int temp2 = lastFilledIndex[ID][ch] + loopFilledIndex[ID][ch] * digi[ID]->GetData()->GetDataSize() + 1;
|
|
||||||
|
|
||||||
// printf("loopIndx : %d | ID now : %d, ID old : %d \n", loopIndex, temp1, temp2);
|
|
||||||
|
|
||||||
if( temp1 <= temp2 ) continue;
|
|
||||||
|
|
||||||
if( temp1 - temp2 > digi[ID]->GetData()->GetDataSize() ) { //DefaultDataSize = 10k
|
|
||||||
temp2 = temp1 - digi[ID]->GetData()->GetDataSize();
|
|
||||||
lastFilledIndex[ID][ch] = lastIndex;
|
|
||||||
lastFilledIndex[ID][ch] = loopIndex - 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// printf("ch %d | regulated ID now %d new %d | last fill idx %d\n", ch, temp2, temp1, lastFilledIndex[ID][ch]);
|
|
||||||
|
|
||||||
for( int j = 0 ; j <= temp1 - temp2; j ++){
|
|
||||||
lastFilledIndex[ID][ch] ++;
|
|
||||||
if( lastFilledIndex[ID][ch] > digi[ID]->GetData()->GetDataSize() ) {
|
|
||||||
lastFilledIndex[ID][ch] = 0;
|
|
||||||
loopFilledIndex[ID][ch] ++;
|
|
||||||
}
|
|
||||||
|
|
||||||
uShort data = digi[ID]->GetData()->GetEnergy(ch, lastFilledIndex[ID][ch]);
|
|
||||||
|
|
||||||
// printf(" ch: %d, last fill idx : %d | %d \n", ch, lastFilledIndex[ID][ch], data);
|
|
||||||
|
|
||||||
hist[ID][ch]->Fill( data );
|
|
||||||
if( digi[i]->GetDPPType() == DPPTypeCode::DPP_PSD_CODE ){
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
if( histVisibility[ID][ch] ) hist[ID][ch]->UpdatePlot();
|
|
||||||
|
|
||||||
clock_gettime(CLOCK_REALTIME, &t1);
|
|
||||||
if( t1.tv_nsec - t0.tv_nsec + (t1.tv_sec - t0.tv_sec)*1e9 > maxFillTimePerDigi * 1e6 ) break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( hist2DVisibility[ID] ) hist2D[ID]->UpdatePlot();
|
|
||||||
// digiMTX[ID].unlock();
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void SingleSpectra::SaveSetting(){
|
void SingleSpectra::SaveSetting(){
|
||||||
DebugPrint("%s", "SingleSpectra");
|
DebugPrint("%s", "SingleSpectra");
|
||||||
|
|
||||||
|
|
145
SingleSpectra.h
145
SingleSpectra.h
|
@ -20,6 +20,7 @@
|
||||||
#include "Histogram1D.h"
|
#include "Histogram1D.h"
|
||||||
#include "Histogram2D.h"
|
#include "Histogram2D.h"
|
||||||
|
|
||||||
|
class HistWorker; //Forward decalration
|
||||||
|
|
||||||
//^====================================================
|
//^====================================================
|
||||||
//^====================================================
|
//^====================================================
|
||||||
|
@ -31,8 +32,8 @@ public:
|
||||||
~SingleSpectra();
|
~SingleSpectra();
|
||||||
|
|
||||||
void ClearInternalDataCount();
|
void ClearInternalDataCount();
|
||||||
void SetFillHistograms(bool onOff) { fillHistograms = onOff;}
|
// void SetFillHistograms(bool onOff) { fillHistograms = onOff;}
|
||||||
bool IsFillHistograms() const {return fillHistograms;}
|
// bool IsFillHistograms() const {return fillHistograms;}
|
||||||
|
|
||||||
void LoadSetting();
|
void LoadSetting();
|
||||||
void SaveSetting();
|
void SaveSetting();
|
||||||
|
@ -42,20 +43,39 @@ public:
|
||||||
|
|
||||||
QVector<int> generateNonRepeatedCombination(int size);
|
QVector<int> generateNonRepeatedCombination(int size);
|
||||||
|
|
||||||
public slots:
|
|
||||||
void FillHistograms();
|
|
||||||
void ChangeHistView();
|
|
||||||
|
|
||||||
private:
|
/// This should be private....
|
||||||
|
int lastFilledIndex[MaxNDigitizer][MaxNChannels];
|
||||||
|
int loopFilledIndex[MaxNDigitizer][MaxNChannels];
|
||||||
|
bool histVisibility[MaxNDigitizer][MaxNChannels];
|
||||||
|
bool hist2DVisibility[MaxNDigitizer];
|
||||||
|
unsigned short maxFillTimePerDigi;
|
||||||
|
|
||||||
|
bool isFillingHistograms;
|
||||||
|
Histogram1D * hist[MaxNDigitizer][MaxNChannels];
|
||||||
|
Histogram2D * hist2D[MaxNDigitizer];
|
||||||
|
|
||||||
Digitizer ** digi;
|
Digitizer ** digi;
|
||||||
unsigned short nDigi;
|
unsigned short nDigi;
|
||||||
|
|
||||||
Histogram1D * hist[MaxNDigitizer][MaxNChannels];
|
void startWork(){
|
||||||
Histogram2D * hist2D[MaxNDigitizer];
|
printf("timer start\n");
|
||||||
|
timer->start(maxFillTimeinMilliSec);
|
||||||
|
}
|
||||||
|
void stopWork(){
|
||||||
|
printf("timer stop\n");
|
||||||
|
timer->stop();
|
||||||
|
ClearInternalDataCount();
|
||||||
|
}
|
||||||
|
|
||||||
|
QCheckBox * chkIsFillHistogram;
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
// void FillHistograms();
|
||||||
|
void ChangeHistView();
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
bool histVisibility[MaxNDigitizer][MaxNChannels];
|
|
||||||
bool hist2DVisibility[MaxNDigitizer];
|
|
||||||
|
|
||||||
RComboBox * cbDivision;
|
RComboBox * cbDivision;
|
||||||
|
|
||||||
|
@ -66,17 +86,110 @@ private:
|
||||||
QGridLayout * histLayout;
|
QGridLayout * histLayout;
|
||||||
int oldBd, oldCh;
|
int oldBd, oldCh;
|
||||||
|
|
||||||
int lastFilledIndex[MaxNDigitizer][MaxNChannels];
|
|
||||||
int loopFilledIndex[MaxNDigitizer][MaxNChannels];
|
|
||||||
|
|
||||||
bool fillHistograms;
|
|
||||||
|
|
||||||
QString settingPath;
|
QString settingPath;
|
||||||
|
|
||||||
unsigned short maxFillTimeinMilliSec;
|
unsigned short maxFillTimeinMilliSec;
|
||||||
unsigned short maxFillTimePerDigi;
|
|
||||||
|
|
||||||
bool isSignalSlotActive;
|
bool isSignalSlotActive;
|
||||||
|
|
||||||
|
QThread * workerThread;
|
||||||
|
HistWorker * histWorker;
|
||||||
|
QTimer * timer;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//^#======================================================== HistWorker
|
||||||
|
class HistWorker : public QObject{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
HistWorker(SingleSpectra * parent): SS(parent){}
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void FillHistograms(){
|
||||||
|
|
||||||
|
// printf("%s | %d %d \n", __func__, SS->chkIsFillHistogram->checkState(), SS->isFillingHistograms);
|
||||||
|
if( SS->chkIsFillHistogram->checkState() == Qt::Unchecked ) return;
|
||||||
|
if( SS->isFillingHistograms) return;
|
||||||
|
|
||||||
|
SS->isFillingHistograms = true;
|
||||||
|
timespec t0, t1;
|
||||||
|
|
||||||
|
QVector<int> randomDigiList = SS->generateNonRepeatedCombination(SS->nDigi);
|
||||||
|
|
||||||
|
// qDebug() << randomDigiList;
|
||||||
|
|
||||||
|
for( int i = 0; i < SS->nDigi; i++){
|
||||||
|
int ID = randomDigiList[i];
|
||||||
|
|
||||||
|
QVector<int> randomChList = SS->generateNonRepeatedCombination(SS->digi[ID]->GetNumInputCh());
|
||||||
|
|
||||||
|
// qDebug() << randomChList;
|
||||||
|
// digiMTX[ID].lock();
|
||||||
|
// digi[ID]->GetData()->PrintAllData();
|
||||||
|
|
||||||
|
clock_gettime(CLOCK_REALTIME, &t0);
|
||||||
|
for( int k = 0; k < SS->digi[ID]->GetNumInputCh(); k ++ ){
|
||||||
|
int ch = randomChList[k];
|
||||||
|
int lastIndex = SS->digi[ID]->GetData()->GetDataIndex(ch);
|
||||||
|
if( lastIndex < 0 ) continue;
|
||||||
|
printf("--- ch %2d | last index %d \n", ch, lastIndex);
|
||||||
|
|
||||||
|
int loopIndex = SS->digi[ID]->GetData()->GetLoopIndex(ch);
|
||||||
|
|
||||||
|
int temp1 = lastIndex + loopIndex * SS->digi[ID]->GetData()->GetDataSize();
|
||||||
|
int temp2 = SS->lastFilledIndex[ID][ch] + SS->loopFilledIndex[ID][ch] * SS->digi[ID]->GetData()->GetDataSize() + 1;
|
||||||
|
|
||||||
|
// printf("loopIndx : %d | ID now : %d, ID old : %d \n", loopIndex, temp1, temp2);
|
||||||
|
|
||||||
|
if( temp1 <= temp2 ) continue;
|
||||||
|
|
||||||
|
if( temp1 - temp2 > SS->digi[ID]->GetData()->GetDataSize() ) { //DefaultDataSize = 10k
|
||||||
|
temp2 = temp1 - SS->digi[ID]->GetData()->GetDataSize();
|
||||||
|
SS->lastFilledIndex[ID][ch] = lastIndex;
|
||||||
|
SS->lastFilledIndex[ID][ch] = loopIndex - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// printf("ch %d | regulated ID now %d new %d | last fill idx %d\n", ch, temp2, temp1, lastFilledIndex[ID][ch]);
|
||||||
|
|
||||||
|
for( int j = 0 ; j <= temp1 - temp2; j ++){
|
||||||
|
SS->lastFilledIndex[ID][ch] ++;
|
||||||
|
if( SS->lastFilledIndex[ID][ch] > SS->digi[ID]->GetData()->GetDataSize() ) {
|
||||||
|
SS->lastFilledIndex[ID][ch] = 0;
|
||||||
|
SS->loopFilledIndex[ID][ch] ++;
|
||||||
|
}
|
||||||
|
|
||||||
|
uShort data = SS->digi[ID]->GetData()->GetEnergy(ch, SS->lastFilledIndex[ID][ch]);
|
||||||
|
|
||||||
|
// printf(" ch: %d, last fill idx : %d | %d \n", ch, lastFilledIndex[ID][ch], data);
|
||||||
|
|
||||||
|
SS->hist[ID][ch]->Fill( data );
|
||||||
|
if( SS->digi[i]->GetDPPType() == DPPTypeCode::DPP_PSD_CODE ){
|
||||||
|
uShort e2 = SS->digi[ID]->GetData()->GetEnergy2(ch, SS->lastFilledIndex[ID][ch]);
|
||||||
|
// printf("%u \n", e2);
|
||||||
|
SS->hist[ID][ch]->Fill( e2, 1);
|
||||||
|
}
|
||||||
|
SS->hist2D[ID]->Fill(ch, data);
|
||||||
|
}
|
||||||
|
if( SS->histVisibility[ID][ch] ) SS->hist[ID][ch]->UpdatePlot();
|
||||||
|
|
||||||
|
clock_gettime(CLOCK_REALTIME, &t1);
|
||||||
|
if( t1.tv_nsec - t0.tv_nsec + (t1.tv_sec - t0.tv_sec)*1e9 > SS->maxFillTimePerDigi * 1e6 ) break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( SS->hist2DVisibility[ID] ) SS->hist2D[ID]->UpdatePlot();
|
||||||
|
// digiMTX[ID].unlock();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
SS->isFillingHistograms = false;
|
||||||
|
emit workDone();
|
||||||
|
}
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void workDone();
|
||||||
|
|
||||||
|
private:
|
||||||
|
SingleSpectra * SS;
|
||||||
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
Loading…
Reference in New Issue
Block a user