snapshot, MaxNData = 100, MaxNEvent = 30, bug in OnlineEventBuilder
This commit is contained in:
parent
31a19f41ec
commit
d9034fd8b1
35
Analyser.cpp
35
Analyser.cpp
|
@ -35,6 +35,7 @@ Analyzer::~Analyzer(){
|
||||||
}
|
}
|
||||||
|
|
||||||
void Analyzer::StartThread(){
|
void Analyzer::StartThread(){
|
||||||
|
for( unsigned int i = 0; i < nDigi; i++) oeb[i]->ClearEvents();
|
||||||
buildTimerThread->start();
|
buildTimerThread->start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -56,17 +57,16 @@ void Analyzer::SetUpCanvas(){
|
||||||
h1 = new Histogram1D("testing", "x", 400, 0, 4000, this);
|
h1 = new Histogram1D("testing", "x", 400, 0, 4000, this);
|
||||||
layout->addWidget(h1, 0, 1);
|
layout->addWidget(h1, 0, 1);
|
||||||
|
|
||||||
std::random_device rd;
|
// std::random_device rd;
|
||||||
std::mt19937 gen(rd());
|
// std::mt19937 gen(rd());
|
||||||
std::normal_distribution<double> distribution(2000.0, 1000);
|
// std::normal_distribution<double> distribution(2000.0, 1000);
|
||||||
for( int i = 0; i < 1000 ; i++ ){
|
// for( int i = 0; i < 1000 ; i++ ){
|
||||||
double x = distribution(gen);
|
// double x = distribution(gen);
|
||||||
double y = distribution(gen);
|
// double y = distribution(gen);
|
||||||
h2->Fill(x, y);
|
// h2->Fill(x, y);
|
||||||
h1->Fill(x);
|
// h1->Fill(x);
|
||||||
}
|
// }
|
||||||
|
// h1->UpdatePlot();
|
||||||
h1->UpdatePlot();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -74,7 +74,7 @@ void Analyzer::UpdateHistograms(){
|
||||||
|
|
||||||
//Set with digitizer to be event build
|
//Set with digitizer to be event build
|
||||||
digiMTX[0].lock();
|
digiMTX[0].lock();
|
||||||
oeb[0]->BuildEvents(100, false);
|
oeb[0]->BuildEvents(100, true);
|
||||||
digiMTX[0].unlock();
|
digiMTX[0].unlock();
|
||||||
|
|
||||||
//============ Get events, and do analysis
|
//============ Get events, and do analysis
|
||||||
|
@ -92,15 +92,18 @@ void Analyzer::UpdateHistograms(){
|
||||||
std::vector<dataPoint> event = oeb[0]->events[i];
|
std::vector<dataPoint> event = oeb[0]->events[i];
|
||||||
|
|
||||||
for( int k = 0; k < (int) event.size(); k++ ){
|
for( int k = 0; k < (int) event.size(); k++ ){
|
||||||
if( event[k].ch == 3 ) e1 = event[k].energy;
|
if( event[k].ch == 9 ) e1 = event[k].energy;
|
||||||
if( event[k].ch == 4 ) e2 = event[k].energy;
|
if( event[k].ch == 10 ) e2 = event[k].energy;
|
||||||
}
|
}
|
||||||
|
|
||||||
h2->Fill(e1, e2);
|
h2->Fill(e1, e2);
|
||||||
|
h1->Fill(e1);
|
||||||
//h1->Fill(e1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
h2->UpdatePlot();
|
h2->UpdatePlot();
|
||||||
|
h1->UpdatePlot();
|
||||||
|
|
||||||
|
h2->PrintCutEntry();
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
57
ClassData.h
57
ClassData.h
|
@ -14,7 +14,7 @@
|
||||||
#include "CAENDigitizerType.h"
|
#include "CAENDigitizerType.h"
|
||||||
#include "macro.h"
|
#include "macro.h"
|
||||||
|
|
||||||
#define MaxNData 10000 /// store 10k events per channels
|
#define MaxNData 50 /// store 10k events per channels
|
||||||
|
|
||||||
class Data{
|
class Data{
|
||||||
|
|
||||||
|
@ -37,8 +37,10 @@ class Data{
|
||||||
/// store data for event building and deduce the trigger rate.
|
/// store data for event building and deduce the trigger rate.
|
||||||
//it is a circular memory
|
//it is a circular memory
|
||||||
bool IsNotRollOverFakeAgg;
|
bool IsNotRollOverFakeAgg;
|
||||||
|
|
||||||
int LoopIndex[MaxNChannels]; /// number of loop in the circular memory
|
int LoopIndex[MaxNChannels]; /// number of loop in the circular memory
|
||||||
int DataIndex[MaxNChannels];
|
int DataIndex[MaxNChannels];
|
||||||
|
|
||||||
unsigned long long Timestamp[MaxNChannels][MaxNData]; /// 47 bit
|
unsigned long long Timestamp[MaxNChannels][MaxNData]; /// 47 bit
|
||||||
unsigned short fineTime[MaxNChannels][MaxNData]; /// 10 bits, in unit of ch2ns / 1000 = ps
|
unsigned short fineTime[MaxNChannels][MaxNData]; /// 10 bits, in unit of ch2ns / 1000 = ps
|
||||||
unsigned short Energy[MaxNChannels][MaxNData]; /// 15 bit
|
unsigned short Energy[MaxNChannels][MaxNData]; /// 15 bit
|
||||||
|
@ -68,7 +70,7 @@ class Data{
|
||||||
|
|
||||||
void PrintStat() const;
|
void PrintStat() const;
|
||||||
|
|
||||||
void PrintAllData() const;
|
void PrintAllData(bool tableMode = true) const;
|
||||||
|
|
||||||
//^================= Saving data
|
//^================= Saving data
|
||||||
bool OpenSaveFile(std::string fileNamePrefix); // return false when fail
|
bool OpenSaveFile(std::string fileNamePrefix); // return false when fail
|
||||||
|
@ -84,6 +86,7 @@ class Data{
|
||||||
unsigned int nw;
|
unsigned int nw;
|
||||||
//bool SaveWaveToMemory;
|
//bool SaveWaveToMemory;
|
||||||
|
|
||||||
|
|
||||||
///for temperary
|
///for temperary
|
||||||
std::vector<short> tempWaveform1;
|
std::vector<short> tempWaveform1;
|
||||||
std::vector<short> tempWaveform2;
|
std::vector<short> tempWaveform2;
|
||||||
|
@ -225,6 +228,8 @@ inline void Data::SaveData(){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( outFile == nullptr ) return;
|
||||||
|
|
||||||
if( outFileSize > (unsigned int) MaxSaveFileSize){
|
if( outFileSize > (unsigned int) MaxSaveFileSize){
|
||||||
FinishedOutFilesSize += ftell(outFile);
|
FinishedOutFilesSize += ftell(outFile);
|
||||||
CloseSaveFile();
|
CloseSaveFile();
|
||||||
|
@ -263,14 +268,44 @@ inline void Data::PrintStat() const{
|
||||||
printf("---+--------+-----------+-----------+----------\n");
|
printf("---+--------+-----------+-----------+----------\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void Data::PrintAllData() const{
|
inline void Data::PrintAllData(bool tableMode) const{
|
||||||
printf("============================= Print Data\n");
|
printf("============================= Print Data\n");
|
||||||
for( int ch = 0; ch < MaxNChannels ; ch++){
|
|
||||||
if( DataIndex[ch] < 0 ) continue;
|
if( tableMode ){
|
||||||
printf("------------ ch : %d, DataIndex : %d, loop : %d\n", ch, DataIndex[ch], LoopIndex[ch]);
|
int entry = 0;
|
||||||
for( int ev = 0; ev <= (LoopIndex[ch] > 0 ? MaxNData : DataIndex[ch]) ; ev++){
|
|
||||||
if( DPPType == V1730_DPP_PHA_CODE ) printf("%4d, %5u, %15llu, %5u \n", ev, Energy[ch][ev], Timestamp[ch][ev], fineTime[ch][ev]);
|
int MaxEntry = 0;
|
||||||
if( DPPType == V1730_DPP_PSD_CODE ) printf("%4d, %5u, %5u, %15llu, %5u \n", ev, Energy[ch][ev], Energy2[ch][ev], Timestamp[ch][ev], fineTime[ch][ev]);
|
printf("%4s|", "");
|
||||||
|
for( int ch = 0; ch < MaxNChannels; ch++){
|
||||||
|
if( LoopIndex[ch] > 0 ) {
|
||||||
|
MaxEntry = MaxNData-1;
|
||||||
|
}else{
|
||||||
|
if( DataIndex[ch] > MaxEntry ) MaxEntry = DataIndex[ch];
|
||||||
|
}
|
||||||
|
if( DataIndex[ch] < 0 ) continue;
|
||||||
|
printf(" %5s-%02d,%-9d |", "ch", ch, DataIndex[ch]);
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
|
||||||
|
do{
|
||||||
|
printf("%4d|", entry );
|
||||||
|
for( int ch = 0; ch < MaxNChannels; ch++){
|
||||||
|
if( DataIndex[ch] < 0 ) continue;
|
||||||
|
printf(" %5d,%12lld |", Energy[ch][entry], Timestamp[ch][entry]);
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
entry ++;
|
||||||
|
}while(entry <= MaxEntry);
|
||||||
|
|
||||||
|
}else{
|
||||||
|
for( int ch = 0; ch < MaxNChannels ; ch++){
|
||||||
|
if( DataIndex[ch] < 0 ) continue;
|
||||||
|
printf("------------ ch : %d, DataIndex : %d, loop : %d\n", ch, DataIndex[ch], LoopIndex[ch]);
|
||||||
|
for( int ev = 0; ev <= (LoopIndex[ch] > 0 ? MaxNData : DataIndex[ch]) ; ev++){
|
||||||
|
if( DPPType == V1730_DPP_PHA_CODE ) printf("%4d, %5u, %15llu, %5u \n", ev, Energy[ch][ev], Timestamp[ch][ev], fineTime[ch][ev]);
|
||||||
|
if( DPPType == V1730_DPP_PSD_CODE ) printf("%4d, %5u, %5u, %15llu, %5u \n", ev, Energy[ch][ev], Energy2[ch][ev], Timestamp[ch][ev], fineTime[ch][ev]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -616,7 +651,7 @@ inline int Data::DecodePHADualChannelBlock(unsigned int ChannelMask, bool fastDe
|
||||||
|
|
||||||
if( rollOver == 0 ) { // non-time roll over fake event
|
if( rollOver == 0 ) { // non-time roll over fake event
|
||||||
DataIndex[channel] ++;
|
DataIndex[channel] ++;
|
||||||
if( DataIndex[channel] > MaxNData ) {
|
if( DataIndex[channel] >= MaxNData ) {
|
||||||
LoopIndex[channel] ++;
|
LoopIndex[channel] ++;
|
||||||
DataIndex[channel] = 0;
|
DataIndex[channel] = 0;
|
||||||
}
|
}
|
||||||
|
@ -803,7 +838,7 @@ inline int Data::DecodePSDDualChannelBlock(unsigned int ChannelMask, bool fastDe
|
||||||
|
|
||||||
if( isEnergyCorrect == 0 ) {
|
if( isEnergyCorrect == 0 ) {
|
||||||
DataIndex[channel] ++;
|
DataIndex[channel] ++;
|
||||||
if( DataIndex[channel] > MaxNData ) {
|
if( DataIndex[channel] >= MaxNData ) {
|
||||||
LoopIndex[channel] ++;
|
LoopIndex[channel] ++;
|
||||||
DataIndex[channel] = 0;
|
DataIndex[channel] = 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -183,7 +183,6 @@ int main(int argc, char **argv) {
|
||||||
Data * data = new Data();
|
Data * data = new Data();
|
||||||
data->DPPType = typeCat[0][0];
|
data->DPPType = typeCat[0][0];
|
||||||
data->boardSN = idCat[0];
|
data->boardSN = idCat[0];
|
||||||
data->SetSaveWaveToMemory(true);
|
|
||||||
|
|
||||||
///============= Main Loop
|
///============= Main Loop
|
||||||
haha = fopen(inFileName[0], "r");
|
haha = fopen(inFileName[0], "r");
|
||||||
|
|
|
@ -766,6 +766,8 @@ void MainWindow::UpdateScalar(){
|
||||||
if( scalar == nullptr ) return;
|
if( scalar == nullptr ) return;
|
||||||
//if( !scalar->isVisible() ) return;
|
//if( !scalar->isVisible() ) return;
|
||||||
|
|
||||||
|
digi[0]->GetData()->PrintAllData();
|
||||||
|
|
||||||
lbLastUpdateTime->setText("Last update: " + QDateTime::currentDateTime().toString("MM.dd hh:mm:ss"));
|
lbLastUpdateTime->setText("Last update: " + QDateTime::currentDateTime().toString("MM.dd hh:mm:ss"));
|
||||||
|
|
||||||
//printf("----------------------\n");
|
//printf("----------------------\n");
|
||||||
|
@ -826,6 +828,8 @@ void MainWindow::StartACQ(){
|
||||||
readDataThread[i]->SetSaveData(chkSaveData->isChecked());
|
readDataThread[i]->SetSaveData(chkSaveData->isChecked());
|
||||||
LogMsg("Digi-" + QString::number(digi[i]->GetSerialNumber()) + " is starting ACQ." );
|
LogMsg("Digi-" + QString::number(digi[i]->GetSerialNumber()) + " is starting ACQ." );
|
||||||
digi[i]->WriteRegister(DPP::SoftwareClear_W, 1);
|
digi[i]->WriteRegister(DPP::SoftwareClear_W, 1);
|
||||||
|
digi[i]->GetData()->ClearData();
|
||||||
|
|
||||||
digi[i]->StartACQ();
|
digi[i]->StartACQ();
|
||||||
readDataThread[i]->start();
|
readDataThread[i]->start();
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,8 @@ class Histogram1D : public QCustomPlot{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
Histogram1D(QString title, QString xLabel, int xbin, double xmin, double xmax, QWidget * parent = nullptr) : QCustomPlot(parent){
|
Histogram1D(QString title, QString xLabel, int xbin, double xmin, double xmax, QWidget * parent = nullptr) : QCustomPlot(parent){
|
||||||
|
|
||||||
|
for( int i = 0; i < 3; i ++) txt[i] = nullptr;
|
||||||
Rebin(xbin, xmin, xmax);
|
Rebin(xbin, xmin, xmax);
|
||||||
|
|
||||||
xAxis->setLabel(xLabel);
|
xAxis->setLabel(xLabel);
|
||||||
|
@ -50,10 +52,10 @@ public:
|
||||||
txt[i]->position->setType(QCPItemPosition::ptAxisRectRatio);
|
txt[i]->position->setType(QCPItemPosition::ptAxisRectRatio);
|
||||||
txt[i]->position->setCoords(0.1, 0.1 + 0.1*i);;
|
txt[i]->position->setCoords(0.1, 0.1 + 0.1*i);;
|
||||||
txt[i]->setFont(QFont("Helvetica", 9));
|
txt[i]->setFont(QFont("Helvetica", 9));
|
||||||
if( i == 0 ) txt[i]->setText("Under Flow : 0");
|
|
||||||
if( i == 1 ) txt[i]->setText("Total Entry : 0");
|
|
||||||
if( i == 2 ) txt[i]->setText("Over Flow : 0");
|
|
||||||
}
|
}
|
||||||
|
txt[0]->setText("Under Flow : 0");
|
||||||
|
txt[1]->setText("Total Entry : 0");
|
||||||
|
txt[2]->setText("Over Flow : 0");
|
||||||
|
|
||||||
usingMenu = false;
|
usingMenu = false;
|
||||||
|
|
||||||
|
@ -122,6 +124,9 @@ public:
|
||||||
lineEdit[i] = new QLineEdit(&dialog);
|
lineEdit[i] = new QLineEdit(&dialog);
|
||||||
layout.addRow(nameList[i] + " : ", lineEdit[i]);
|
layout.addRow(nameList[i] + " : ", lineEdit[i]);
|
||||||
}
|
}
|
||||||
|
lineEdit[0]->setText(QString::number(xBin));
|
||||||
|
lineEdit[1]->setText(QString::number(xMin));
|
||||||
|
lineEdit[2]->setText(QString::number(xMax));
|
||||||
|
|
||||||
QLabel * msg = new QLabel(&dialog);
|
QLabel * msg = new QLabel(&dialog);
|
||||||
msg->setStyleSheet("color:red;");
|
msg->setStyleSheet("color:red;");
|
||||||
|
@ -212,6 +217,9 @@ public:
|
||||||
underFlow = 0;
|
underFlow = 0;
|
||||||
overFlow = 0;
|
overFlow = 0;
|
||||||
|
|
||||||
|
if( txt[0] ) txt[0]->setText("Under Flow : 0");
|
||||||
|
if( txt[1] ) txt[1]->setText("Total Entry : 0");
|
||||||
|
if( txt[2] ) txt[2]->setText("Over Flow : 0");
|
||||||
}
|
}
|
||||||
|
|
||||||
void Fill(double value){
|
void Fill(double value){
|
||||||
|
|
215
Histogram2D.h
215
Histogram2D.h
|
@ -19,20 +19,20 @@ class Histogram2D : public QCustomPlot{
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Histogram2D(QString title, QString xLabel, QString yLabel, int xbin, double xmin, double xmax, int ybin, double ymin, double ymax, QWidget * parent = nullptr) : QCustomPlot(parent){
|
Histogram2D(QString title, QString xLabel, QString yLabel, int xbin, double xmin, double xmax, int ybin, double ymin, double ymax, QWidget * parent = nullptr) : QCustomPlot(parent){
|
||||||
xMin = xmin;
|
|
||||||
xMax = xmax;
|
for( int i = 0; i < 3; i ++ ){
|
||||||
yMin = ymin;
|
for( int j = 0; j < 3; j ++ ){
|
||||||
yMax = ymax;
|
box[i][j] = nullptr;
|
||||||
xBin = xbin;
|
txt[i][j] = nullptr;
|
||||||
yBin = ybin;
|
}
|
||||||
|
}
|
||||||
|
|
||||||
axisRect()->setupFullAxesBox(true);
|
axisRect()->setupFullAxesBox(true);
|
||||||
xAxis->setLabel(xLabel);
|
xAxis->setLabel(xLabel);
|
||||||
yAxis->setLabel(yLabel);
|
yAxis->setLabel(yLabel);
|
||||||
|
|
||||||
colorMap = new QCPColorMap(xAxis, yAxis);
|
colorMap = new QCPColorMap(xAxis, yAxis);
|
||||||
colorMap->data()->setSize(xBin, yBin);
|
Rebin(xbin, xmin, xmax, ybin, ymin, ymax);
|
||||||
colorMap->data()->setRange(QCPRange(xMin, xMax), QCPRange(yMin, yMax));
|
|
||||||
colorMap->setInterpolate(false);
|
colorMap->setInterpolate(false);
|
||||||
|
|
||||||
QCPTextElement *titleEle = new QCPTextElement(this, title, QFont("sans", 12));
|
QCPTextElement *titleEle = new QCPTextElement(this, title, QFont("sans", 12));
|
||||||
|
@ -52,8 +52,6 @@ public:
|
||||||
color.setColorStopAt( 1.0, QColor("yellow"));
|
color.setColorStopAt( 1.0, QColor("yellow"));
|
||||||
colorMap->setGradient(color);
|
colorMap->setGradient(color);
|
||||||
|
|
||||||
cutList.clear();
|
|
||||||
|
|
||||||
double xPosStart = 0.02;
|
double xPosStart = 0.02;
|
||||||
double xPosStep = 0.07;
|
double xPosStep = 0.07;
|
||||||
double yPosStart = 0.02;
|
double yPosStart = 0.02;
|
||||||
|
@ -61,7 +59,6 @@ public:
|
||||||
|
|
||||||
for( int i = 0; i < 3; i ++ ){
|
for( int i = 0; i < 3; i ++ ){
|
||||||
for( int j = 0; j < 3; j ++ ){
|
for( int j = 0; j < 3; j ++ ){
|
||||||
entry[i][j] = 0;
|
|
||||||
box[i][j] = new QCPItemRect(this);
|
box[i][j] = new QCPItemRect(this);
|
||||||
|
|
||||||
box[i][j]->topLeft->setType(QCPItemPosition::ptAxisRectRatio);
|
box[i][j]->topLeft->setType(QCPItemPosition::ptAxisRectRatio);
|
||||||
|
@ -79,6 +76,9 @@ public:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cutList.clear();
|
||||||
|
cutEntryList.clear();
|
||||||
|
|
||||||
rescaleAxes();
|
rescaleAxes();
|
||||||
|
|
||||||
usingMenu = false;
|
usingMenu = false;
|
||||||
|
@ -91,6 +91,7 @@ public:
|
||||||
line->setPen(QPen(Qt::gray, 1, Qt::DashLine));
|
line->setPen(QPen(Qt::gray, 1, Qt::DashLine));
|
||||||
line->setVisible(false);
|
line->setVisible(false);
|
||||||
|
|
||||||
|
isBusy = false;
|
||||||
|
|
||||||
connect(this, &QCustomPlot::mouseMove, this, [=](QMouseEvent *event){
|
connect(this, &QCustomPlot::mouseMove, this, [=](QMouseEvent *event){
|
||||||
double x = xAxis->pixelToCoord(event->pos().x());
|
double x = xAxis->pixelToCoord(event->pos().x());
|
||||||
|
@ -112,9 +113,11 @@ public:
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(this, &QCustomPlot::mousePress, this, [=](QMouseEvent * event){
|
connect(this, &QCustomPlot::mousePress, this, [=](QMouseEvent * event){
|
||||||
|
|
||||||
if (event->button() == Qt::LeftButton && !usingMenu && !isDrawCut){
|
if (event->button() == Qt::LeftButton && !usingMenu && !isDrawCut){
|
||||||
setSelectionRectMode(QCP::SelectionRectMode::srmZoom);
|
setSelectionRectMode(QCP::SelectionRectMode::srmZoom);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (event->button() == Qt::LeftButton && isDrawCut){
|
if (event->button() == Qt::LeftButton && isDrawCut){
|
||||||
|
|
||||||
oldMouseX = xAxis->pixelToCoord(event->pos().x());
|
oldMouseX = xAxis->pixelToCoord(event->pos().x());
|
||||||
|
@ -140,7 +143,8 @@ public:
|
||||||
QAction * a1 = menu->addAction("UnZoom");
|
QAction * a1 = menu->addAction("UnZoom");
|
||||||
QAction * a2 = menu->addAction("Clear hist.");
|
QAction * a2 = menu->addAction("Clear hist.");
|
||||||
QAction * a3 = menu->addAction("Toggle Stat.");
|
QAction * a3 = menu->addAction("Toggle Stat.");
|
||||||
QAction * a4 = menu->addAction("Create a Cut");
|
QAction * a4 = menu->addAction("Rebin (clear histogram)");
|
||||||
|
QAction * a5 = menu->addAction("Create a Cut");
|
||||||
if( numCut > 0 ) {
|
if( numCut > 0 ) {
|
||||||
menu->addSeparator();
|
menu->addSeparator();
|
||||||
menu->addAction("Add/Edit names to Cuts");
|
menu->addAction("Add/Edit names to Cuts");
|
||||||
|
@ -179,16 +183,21 @@ public:
|
||||||
usingMenu = false;
|
usingMenu = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( selectedAction == a4 ){
|
if( selectedAction == a4){
|
||||||
|
rightMouseClickRebin();
|
||||||
|
usingMenu = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( selectedAction == a5 ){
|
||||||
tempCut.clear();
|
tempCut.clear();
|
||||||
tempCutID ++;
|
tempCutID ++;
|
||||||
isDrawCut= true;
|
isDrawCut= true;
|
||||||
usingMenu = false;
|
usingMenu = false;
|
||||||
numCut ++;
|
numCut ++;
|
||||||
qDebug() << "#### Create Cut Plottable count : " << plottableCount() << ", numCut :" << numCut << ", " << lastPlottableID;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if( selectedAction && selectedAction->text().contains("Delete ") ){
|
if( selectedAction && numCut > 0 && selectedAction->text().contains("Delete ") ){
|
||||||
|
|
||||||
QString haha = selectedAction->text();
|
QString haha = selectedAction->text();
|
||||||
int index1 = haha.indexOf("-");
|
int index1 = haha.indexOf("-");
|
||||||
int index2 = haha.indexOf("[");
|
int index2 = haha.indexOf("[");
|
||||||
|
@ -204,6 +213,7 @@ public:
|
||||||
cutTextIDList[cutID] = -1;
|
cutTextIDList[cutID] = -1;
|
||||||
plottableIDList[cutID] = -1;
|
plottableIDList[cutID] = -1;
|
||||||
cutNameList[cutID] = "";
|
cutNameList[cutID] = "";
|
||||||
|
cutEntryList[cutID] = -1;
|
||||||
|
|
||||||
for( int i = cutID + 1; i < cutTextIDList.count() ; i++){
|
for( int i = cutID + 1; i < cutTextIDList.count() ; i++){
|
||||||
cutTextIDList[i] --;
|
cutTextIDList[i] --;
|
||||||
|
@ -211,21 +221,19 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
if( numCut == 0 ){
|
if( numCut == 0 ){
|
||||||
|
tempCutID = -1;
|
||||||
|
lastPlottableID = -1;
|
||||||
cutList.clear();
|
cutList.clear();
|
||||||
cutIDList.clear();
|
cutIDList.clear();
|
||||||
cutTextIDList.clear();
|
cutTextIDList.clear();
|
||||||
plottableIDList.clear();
|
plottableIDList.clear();
|
||||||
cutNameList.clear();
|
cutNameList.clear();
|
||||||
|
cutEntryList.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
qDebug() << "================= delete Cut-" << cutID;
|
|
||||||
qDebug() << " cutIDList " << cutIDList ;
|
|
||||||
qDebug() << "plottableIDList " << plottableIDList << ", " << plottableCount();
|
|
||||||
qDebug() << " cutTextIDList " << cutTextIDList << ", " << itemCount();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if( selectedAction && selectedAction->text().contains("Clear all Cuts") ){
|
if( selectedAction && numCut > 0 && selectedAction->text().contains("Clear all Cuts") ){
|
||||||
numCut = 0;
|
numCut = 0;
|
||||||
tempCutID = -1;
|
tempCutID = -1;
|
||||||
lastPlottableID = -1;
|
lastPlottableID = -1;
|
||||||
|
@ -241,10 +249,11 @@ public:
|
||||||
cutTextIDList.clear();
|
cutTextIDList.clear();
|
||||||
plottableIDList.clear();
|
plottableIDList.clear();
|
||||||
cutNameList.clear();
|
cutNameList.clear();
|
||||||
|
cutEntryList.clear();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if( selectedAction && selectedAction->text().contains("Add/Edit names to Cuts") ){
|
if( selectedAction && numCut > 0 && selectedAction->text().contains("Add/Edit names to Cuts") ){
|
||||||
|
|
||||||
QDialog dialog(this);
|
QDialog dialog(this);
|
||||||
dialog.setWindowTitle("Add/Edit name of cuts ");
|
dialog.setWindowTitle("Add/Edit name of cuts ");
|
||||||
|
@ -266,12 +275,6 @@ public:
|
||||||
replot();
|
replot();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// QDialogButtonBox buttonBox(QDialogButtonBox::Cancel, Qt::Horizontal, &dialog);
|
|
||||||
// layout.addRow(&buttonBox);
|
|
||||||
|
|
||||||
// QObject::connect(&buttonBox, &QDialogButtonBox::rejected, [&]() { dialog.reject();});
|
|
||||||
|
|
||||||
dialog.exec();
|
dialog.exec();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -289,7 +292,8 @@ public:
|
||||||
plottableIDList.push_back(plottableCount() -1 );
|
plottableIDList.push_back(plottableCount() -1 );
|
||||||
|
|
||||||
cutNameList.push_back("Cut-" + QString::number(cutList.count()));
|
cutNameList.push_back("Cut-" + QString::number(cutList.count()));
|
||||||
//QCPItemText is not a plottable
|
cutEntryList.push_back(0);
|
||||||
|
|
||||||
QCPItemText * text = new QCPItemText(this);
|
QCPItemText * text = new QCPItemText(this);
|
||||||
text->setText(cutNameList.last());
|
text->setText(cutNameList.last());
|
||||||
text->position->setCoords(tempCut[0].rx(), tempCut[0].ry());
|
text->position->setCoords(tempCut[0].rx(), tempCut[0].ry());
|
||||||
|
@ -302,10 +306,10 @@ public:
|
||||||
cutList.push_back(tempCut);
|
cutList.push_back(tempCut);
|
||||||
cutIDList.push_back(tempCutID);
|
cutIDList.push_back(tempCutID);
|
||||||
|
|
||||||
qDebug() << "----------- end of create cut";
|
// qDebug() << "----------- end of create cut";
|
||||||
qDebug() << " cutIDList " << cutIDList ;
|
// qDebug() << " cutIDList " << cutIDList ;
|
||||||
qDebug() << "plottableIDList " << plottableIDList << ", " << plottableCount();
|
// qDebug() << "plottableIDList " << plottableIDList << ", " << plottableCount();
|
||||||
qDebug() << " cutTextIDList " << cutTextIDList << ", " << itemCount();
|
// qDebug() << " cutTextIDList " << cutTextIDList << ", " << itemCount();
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -316,14 +320,37 @@ public:
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//^===================================
|
||||||
|
|
||||||
|
void Rebin(int xbin, double xmin, double xmax, int ybin, double ymin, double ymax){
|
||||||
|
xMin = xmin;
|
||||||
|
xMax = xmax;
|
||||||
|
yMin = ymin;
|
||||||
|
yMax = ymax;
|
||||||
|
xBin = xbin;
|
||||||
|
yBin = ybin;
|
||||||
|
|
||||||
|
colorMap->data()->clear();
|
||||||
|
colorMap->data()->setSize(xBin, yBin);
|
||||||
|
colorMap->data()->setRange(QCPRange(xMin, xMax), QCPRange(yMin, yMax));
|
||||||
|
|
||||||
|
for( int i = 0; i < 3; i ++){
|
||||||
|
for( int j = 0; j < 3; j ++){
|
||||||
|
entry[i][j] = 0;
|
||||||
|
if( txt[i][j] ) txt[i][j]->setText("0");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
void UpdatePlot(){
|
void UpdatePlot(){
|
||||||
colorMap->rescaleDataRange();
|
colorMap->rescaleDataRange();
|
||||||
rescaleAxes();
|
//rescaleAxes();
|
||||||
replot();
|
replot();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Clear(){
|
void Clear(){
|
||||||
colorMap->data()->clear();
|
|
||||||
for( int i = 0; i < 3; i ++){
|
for( int i = 0; i < 3; i ++){
|
||||||
for( int j = 0; j < 3; j ++){
|
for( int j = 0; j < 3; j ++){
|
||||||
entry[i][j] = 0;
|
entry[i][j] = 0;
|
||||||
|
@ -334,6 +361,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
void Fill(double x, double y){
|
void Fill(double x, double y){
|
||||||
|
if( isBusy ) return;
|
||||||
int xIndex, yIndex;
|
int xIndex, yIndex;
|
||||||
colorMap->data()->coordToCell(x, y, &xIndex, &yIndex);
|
colorMap->data()->coordToCell(x, y, &xIndex, &yIndex);
|
||||||
//printf("%f, %d %d| %f, %d %d\n", x, xIndex, xBin, y, yIndex, yBin);
|
//printf("%f, %d %d| %f, %d %d\n", x, xIndex, xBin, y, yIndex, yBin);
|
||||||
|
@ -350,6 +378,11 @@ public:
|
||||||
if( xk == 1 && yk == 1 ) {
|
if( xk == 1 && yk == 1 ) {
|
||||||
double value = colorMap->data()->cell(xIndex, yIndex);
|
double value = colorMap->data()->cell(xIndex, yIndex);
|
||||||
colorMap->data()->setCell(xIndex, yIndex, value + 1);
|
colorMap->data()->setCell(xIndex, yIndex, value + 1);
|
||||||
|
|
||||||
|
for( int i = 0; i < cutList.count(); i++){
|
||||||
|
if( cutList[i].isEmpty() ) continue;
|
||||||
|
if( cutList[i].containsPoint(QPointF(x,y), Qt::OddEvenFill) ) cutEntryList[i] ++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -378,10 +411,19 @@ public:
|
||||||
}
|
}
|
||||||
replot();
|
replot();
|
||||||
|
|
||||||
qDebug() << "Plottable count : " << plottableCount() << ", cutList.count :" << cutList.count() << ", cutID :" << lastPlottableID;
|
//qDebug() << "Plottable count : " << plottableCount() << ", cutList.count :" << cutList.count() << ", cutID :" << lastPlottableID;
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<QPolygonF> GetCutList() const{return cutList;} // this list may contain empty element
|
QList<QPolygonF> GetCutList() const{return cutList;} // this list may contain empty element
|
||||||
|
QList<int> GetCutEntryList() const{ return cutEntryList;}
|
||||||
|
void PrintCutEntry() const{
|
||||||
|
if( numCut == 0 ) return;
|
||||||
|
printf("=============== There are %d cuts.\n", numCut);
|
||||||
|
for( int i = 0; i < cutList.count(); i++){
|
||||||
|
if( cutList[i].isEmpty() ) continue;
|
||||||
|
printf("%10s | %d \n", cutNameList[i].toStdString().c_str(), cutEntryList[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
double xMin, xMax, yMin, yMax;
|
double xMin, xMax, yMin, yMax;
|
||||||
|
@ -407,10 +449,111 @@ private:
|
||||||
QList<int> cutTextIDList;
|
QList<int> cutTextIDList;
|
||||||
QList<int> plottableIDList;
|
QList<int> plottableIDList;
|
||||||
QList<QString> cutNameList;
|
QList<QString> cutNameList;
|
||||||
|
QList<int> cutEntryList;
|
||||||
|
|
||||||
QCPItemLine * line;
|
QCPItemLine * line;
|
||||||
double oldMouseX = 0.0, oldMouseY = 0.0;
|
double oldMouseX = 0.0, oldMouseY = 0.0;
|
||||||
|
|
||||||
|
bool isBusy;
|
||||||
|
|
||||||
|
//^======================== Right Mouse click action
|
||||||
|
void rightMouseClickRebin(){
|
||||||
|
QDialog dialog(this);
|
||||||
|
dialog.setWindowTitle("Rebin histogram");
|
||||||
|
|
||||||
|
QFormLayout layout(&dialog);
|
||||||
|
|
||||||
|
QLabel * info = new QLabel(&dialog);
|
||||||
|
info->setStyleSheet("color:red;");
|
||||||
|
info->setText("This will also clear histogram!!");
|
||||||
|
layout.addRow(info);
|
||||||
|
|
||||||
|
QStringList nameListX = {"Num. x-Bin", "x-Min", "x-Max"};
|
||||||
|
QLineEdit* lineEditX[3];
|
||||||
|
for (int i = 0; i < 3; ++i) {
|
||||||
|
lineEditX[i] = new QLineEdit(&dialog);
|
||||||
|
layout.addRow(nameListX[i] + " : ", lineEditX[i]);
|
||||||
|
}
|
||||||
|
lineEditX[0]->setText(QString::number(xBin));
|
||||||
|
lineEditX[1]->setText(QString::number(xMin));
|
||||||
|
lineEditX[2]->setText(QString::number(xMax));
|
||||||
|
|
||||||
|
QStringList nameListY = {"Num. y-Bin", "y-Min", "y-Max"};
|
||||||
|
QLineEdit* lineEditY[3];
|
||||||
|
for (int i = 0; i < 3; ++i) {
|
||||||
|
lineEditY[i] = new QLineEdit(&dialog);
|
||||||
|
layout.addRow(nameListY[i] + " : ", lineEditY[i]);
|
||||||
|
}
|
||||||
|
lineEditY[0]->setText(QString::number(yBin));
|
||||||
|
lineEditY[1]->setText(QString::number(yMin));
|
||||||
|
lineEditY[2]->setText(QString::number(yMax));
|
||||||
|
|
||||||
|
QLabel * msg = new QLabel(&dialog);
|
||||||
|
msg->setStyleSheet("color:red;");
|
||||||
|
layout.addRow(msg);
|
||||||
|
|
||||||
|
QDialogButtonBox buttonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, &dialog);
|
||||||
|
layout.addRow(&buttonBox);
|
||||||
|
|
||||||
|
double number[3][2];
|
||||||
|
|
||||||
|
QObject::connect(&buttonBox, &QDialogButtonBox::accepted, [&]() {
|
||||||
|
int OKcount = 0;
|
||||||
|
bool conversionOk = true;
|
||||||
|
for( int i = 0; i < 3; i++ ){
|
||||||
|
number[i][0] = lineEditX[i]->text().toDouble(&conversionOk);
|
||||||
|
if( conversionOk ){
|
||||||
|
OKcount++;
|
||||||
|
}else{
|
||||||
|
msg->setText(nameListX[i] + " is invalid.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for( int i = 0; i < 3; i++ ){
|
||||||
|
number[i][1] = lineEditY[i]->text().toDouble(&conversionOk);
|
||||||
|
if( conversionOk ){
|
||||||
|
OKcount++;
|
||||||
|
}else{
|
||||||
|
msg->setText(nameListY[i] + " is invalid.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if( OKcount == 6 ) {
|
||||||
|
if( number[0][0] <= 0 ) {
|
||||||
|
msg->setText( nameListX[0] + " is zero or negative" );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if( number[0][0] <= 0 ) {
|
||||||
|
msg->setText( nameListX[0] + " is zero or negative" );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( number[2][0] > number[1][0] && number[2][1] > number[1][1] ) {
|
||||||
|
dialog.accept();
|
||||||
|
}else{
|
||||||
|
if( number[2][0] > number[1][0] ){
|
||||||
|
msg->setText(nameListX[2] + " is smaller than " + nameListX[1]);
|
||||||
|
}
|
||||||
|
if( number[2][1] > number[1][1] ){
|
||||||
|
msg->setText(nameListY[2] + " is smaller than " + nameListY[1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
QObject::connect(&buttonBox, &QDialogButtonBox::rejected, [&]() { dialog.reject();});
|
||||||
|
|
||||||
|
if( dialog.exec() == QDialog::Accepted ){
|
||||||
|
isBusy = true;
|
||||||
|
Rebin((int)number[0][0], number[1][0], number[2][0], (int)number[0][1], number[1][1], number[2][1]);
|
||||||
|
rescaleAxes();
|
||||||
|
UpdatePlot();
|
||||||
|
isBusy = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
|
@ -7,6 +7,15 @@ OnlineEventBuilder::OnlineEventBuilder(Digitizer * digi){
|
||||||
data = digi->GetData();
|
data = digi->GetData();
|
||||||
nCh = digi->GetNChannels();
|
nCh = digi->GetNChannels();
|
||||||
|
|
||||||
|
ClearEvents();
|
||||||
|
}
|
||||||
|
|
||||||
|
OnlineEventBuilder::~OnlineEventBuilder(){
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void OnlineEventBuilder::ClearEvents(){
|
||||||
eventIndex = -1;
|
eventIndex = -1;
|
||||||
for( int i = 0; i < MaxNEvent; i++ ) events[i].clear();
|
for( int i = 0; i < MaxNEvent; i++ ) events[i].clear();
|
||||||
|
|
||||||
|
@ -19,12 +28,6 @@ OnlineEventBuilder::OnlineEventBuilder(Digitizer * digi){
|
||||||
earlistCh = -1;
|
earlistCh = -1;
|
||||||
|
|
||||||
nExhaushedCh = 0;
|
nExhaushedCh = 0;
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
OnlineEventBuilder::~OnlineEventBuilder(){
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnlineEventBuilder::FindEarlistTimeAndCh(){
|
void OnlineEventBuilder::FindEarlistTimeAndCh(){
|
||||||
|
@ -79,19 +82,23 @@ void OnlineEventBuilder::BuildEvents(unsigned short timeWindow, bool verbose){
|
||||||
|
|
||||||
eventbuilt = 0;
|
eventbuilt = 0;
|
||||||
|
|
||||||
|
data->PrintAllData();
|
||||||
|
|
||||||
//======= Start building event
|
//======= Start building event
|
||||||
do{
|
do{
|
||||||
|
|
||||||
eventIndex ++;
|
eventIndex ++;
|
||||||
if( eventIndex >= MaxNEvent ) eventIndex = 0;
|
if( eventIndex >= MaxNEvent ) eventIndex = 0;
|
||||||
|
|
||||||
|
events[eventIndex].clear();
|
||||||
|
|
||||||
eventbuilt ++;
|
eventbuilt ++;
|
||||||
|
|
||||||
unsigned long long dT =0;
|
unsigned long long dT =0;
|
||||||
dataPoint dp = {0, 0, 0};
|
dataPoint dp = {0, 0, 0};
|
||||||
for( unsigned int i = 0; i < nCh; i++){
|
for( unsigned int i = 0; i < nCh; i++){
|
||||||
int ch = (i + earlistCh ) % nCh;
|
int ch = (i + earlistCh ) % nCh;
|
||||||
|
//printf("------ %d | %d | %d | %d\n", ch, data->DataIndex[ch], nextIndex[ch], chExhaused[ch]);
|
||||||
if( chExhaused[ch] ) continue;
|
if( chExhaused[ch] ) continue;
|
||||||
if( nextIndex[ch] > data->DataIndex[ch]) {
|
if( nextIndex[ch] > data->DataIndex[ch]) {
|
||||||
nExhaushedCh ++;
|
nExhaushedCh ++;
|
||||||
|
@ -103,7 +110,7 @@ void OnlineEventBuilder::BuildEvents(unsigned short timeWindow, bool verbose){
|
||||||
|
|
||||||
unsigned long long time = data->Timestamp[ch][nextIndex[ch]];
|
unsigned long long time = data->Timestamp[ch][nextIndex[ch]];
|
||||||
|
|
||||||
if( time - earlistTime < timeWindow ){
|
if( time >= earlistTime && (time - earlistTime < timeWindow) ){
|
||||||
dp.ch = ch;
|
dp.ch = ch;
|
||||||
dp.energy = data->Energy[ch][nextIndex[ch]];
|
dp.energy = data->Energy[ch][nextIndex[ch]];
|
||||||
dp.timeStamp = time;
|
dp.timeStamp = time;
|
||||||
|
@ -127,21 +134,23 @@ void OnlineEventBuilder::BuildEvents(unsigned short timeWindow, bool verbose){
|
||||||
FindEarlistTimeAndCh();
|
FindEarlistTimeAndCh();
|
||||||
|
|
||||||
if( verbose ){
|
if( verbose ){
|
||||||
printf(">>>>>>>>>>>>>>>>>>>>>>>>> Event ID : %ld\n", eventIndex);
|
printf(">>>>>>>>>>>>>>>>>>>>>>>>> Event ID : %ld, multiplicity : %ld\n", eventIndex, events[eventIndex].size());
|
||||||
for( int i = 0; i <(int) events[eventIndex].size(); i++){
|
for( int i = 0; i <(int) events[eventIndex].size(); i++){
|
||||||
printf("%02d | %5d %llu \n", events[eventIndex][i].ch, events[eventIndex][i].energy, events[eventIndex][i].timeStamp);
|
int chxxx = events[eventIndex][i].ch;
|
||||||
|
printf("%02d | %d | %5d %llu \n", chxxx, nextIndex[chxxx], events[eventIndex][i].energy, events[eventIndex][i].timeStamp);
|
||||||
}
|
}
|
||||||
|
|
||||||
if( nExhaushedCh == nCh ) {
|
if( nExhaushedCh == nCh ) {
|
||||||
printf("######################### no more event to be built\n");
|
printf("######################### no more event to be built\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
printf("----- next ch : %d, next earlist Time : %llu \n", earlistCh, earlistTime);
|
printf("----- next ch : %d, next earlist Time : %llu.\n", earlistCh, earlistTime);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if( latestTime - earlistTime <= timeWindow ) {
|
if( latestTime - earlistTime <= timeWindow ) {
|
||||||
if( verbose ) {
|
if( verbose ) {
|
||||||
printf("######################### left over data for next build\n");
|
printf("######################### left over data for next build, latesTime : %llu.\n", latestTime);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,7 +14,7 @@ Use another class to hold the event data and methods.
|
||||||
#include "macro.h"
|
#include "macro.h"
|
||||||
#include "ClassDigitizer.h"
|
#include "ClassDigitizer.h"
|
||||||
|
|
||||||
#define MaxNEvent 10000
|
#define MaxNEvent 30
|
||||||
|
|
||||||
struct dataPoint{
|
struct dataPoint{
|
||||||
unsigned short ch;
|
unsigned short ch;
|
||||||
|
@ -28,6 +28,7 @@ public:
|
||||||
OnlineEventBuilder(Digitizer * digi);
|
OnlineEventBuilder(Digitizer * digi);
|
||||||
~OnlineEventBuilder();
|
~OnlineEventBuilder();
|
||||||
|
|
||||||
|
void ClearEvents();
|
||||||
void BuildEvents(unsigned short timeWindow, bool verbose = false);
|
void BuildEvents(unsigned short timeWindow, bool verbose = false);
|
||||||
|
|
||||||
long eventIndex;
|
long eventIndex;
|
||||||
|
|
10
Scope.cpp
10
Scope.cpp
|
@ -240,7 +240,7 @@ void Scope::StartScope(){
|
||||||
for( unsigned int iDigi = 0; iDigi < nDigi; iDigi ++){
|
for( unsigned int iDigi = 0; iDigi < nDigi; iDigi ++){
|
||||||
|
|
||||||
traceOn[iDigi] = digi[iDigi]->IsRecordTrace(); //remember setting
|
traceOn[iDigi] = digi[iDigi]->IsRecordTrace(); //remember setting
|
||||||
|
digi[iDigi]->GetData()->ClearData();
|
||||||
digi[iDigi]->SetBits(DPP::BoardConfiguration, DPP::Bit_BoardConfig::RecordTrace, 1, -1);
|
digi[iDigi]->SetBits(DPP::BoardConfiguration, DPP::Bit_BoardConfig::RecordTrace, 1, -1);
|
||||||
digi[iDigi]->StartACQ();
|
digi[iDigi]->StartACQ();
|
||||||
|
|
||||||
|
@ -330,15 +330,15 @@ void Scope::UpdateScope(){
|
||||||
if( digi[ID]->GetDPPType() == V1730_DPP_PHA_CODE ) {
|
if( digi[ID]->GetDPPType() == V1730_DPP_PHA_CODE ) {
|
||||||
for( int i = 0; i < (int) (data->Waveform1[ch][index]).size() ; i++ ) {
|
for( int i = 0; i < (int) (data->Waveform1[ch][index]).size() ; i++ ) {
|
||||||
points[0].append(QPointF(ch2ns * i * factor, (data->Waveform1[ch][index])[i]));
|
points[0].append(QPointF(ch2ns * i * factor, (data->Waveform1[ch][index])[i]));
|
||||||
points[1].append(QPointF(ch2ns * i * factor, (data->Waveform2[ch][index])[i]));
|
if( i < (int) data->Waveform2[ch][index].size() ) points[1].append(QPointF(ch2ns * i * factor, (data->Waveform2[ch][index])[i]));
|
||||||
points[2].append(QPointF(ch2ns * i * factor, (data->DigiWaveform1[ch][index])[i] * 1000));
|
if( i < (int) data->DigiWaveform1[ch][index].size() ) points[2].append(QPointF(ch2ns * i * factor, (data->DigiWaveform1[ch][index])[i] * 1000));
|
||||||
points[3].append(QPointF(ch2ns * i * factor, (data->DigiWaveform2[ch][index])[i] * 1000 + 500));
|
if( i < (int) data->DigiWaveform2[ch][index].size() ) points[3].append(QPointF(ch2ns * i * factor, (data->DigiWaveform2[ch][index])[i] * 1000 + 500));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if( digi[ID]->GetDPPType() == V1730_DPP_PSD_CODE ) {
|
if( digi[ID]->GetDPPType() == V1730_DPP_PSD_CODE ) {
|
||||||
for( int i = 0; i < (int) (data->DigiWaveform1[ch][index]).size() ; i++ ) {
|
for( int i = 0; i < (int) (data->DigiWaveform1[ch][index]).size() ; i++ ) {
|
||||||
if( i < (int) data->Waveform1[ch][index].size() ) points[0].append(QPointF(ch2ns * i * factor, (data->Waveform1[ch][index])[i]));
|
points[0].append(QPointF(ch2ns * i * factor, (data->Waveform1[ch][index])[i]));
|
||||||
if( i < (int) data->Waveform2[ch][index].size() ) points[1].append(QPointF(ch2ns * i * factor, (data->Waveform2[ch][index])[i]));
|
if( i < (int) data->Waveform2[ch][index].size() ) points[1].append(QPointF(ch2ns * i * factor, (data->Waveform2[ch][index])[i]));
|
||||||
if( i < (int) data->DigiWaveform1[ch][index].size() ) points[2].append(QPointF(ch2ns * i, (data->DigiWaveform1[ch][index])[i] * 1000));
|
if( i < (int) data->DigiWaveform1[ch][index].size() ) points[2].append(QPointF(ch2ns * i, (data->DigiWaveform1[ch][index])[i] * 1000));
|
||||||
if( i < (int) data->DigiWaveform2[ch][index].size() ) points[3].append(QPointF(ch2ns * i, (data->DigiWaveform2[ch][index])[i] * 1000 + 500));
|
if( i < (int) data->DigiWaveform2[ch][index].size() ) points[3].append(QPointF(ch2ns * i, (data->DigiWaveform2[ch][index])[i] * 1000 + 500));
|
||||||
|
|
7
test.cpp
7
test.cpp
|
@ -48,10 +48,11 @@ int main(int argc, char* argv[]){
|
||||||
OnlineEventBuilder * eb = new OnlineEventBuilder( dig[0] );
|
OnlineEventBuilder * eb = new OnlineEventBuilder( dig[0] );
|
||||||
|
|
||||||
Data * data = dig[0]->GetData();
|
Data * data = dig[0]->GetData();
|
||||||
|
data->ClearData();
|
||||||
|
|
||||||
data->OpenSaveFile("haha");
|
// data->OpenSaveFile("haha");
|
||||||
|
|
||||||
printf("################# DPP Type : %d , %s\n", data->DPPType, data->DPPTypeStr.c_str());
|
// printf("################# DPP Type : %d , %s\n", data->DPPType, data->DPPTypeStr.c_str());
|
||||||
|
|
||||||
dig[0]->StartACQ();
|
dig[0]->StartACQ();
|
||||||
|
|
||||||
|
@ -66,6 +67,7 @@ int main(int argc, char* argv[]){
|
||||||
// int index = data->NumEventsDecoded[0];
|
// int index = data->NumEventsDecoded[0];
|
||||||
// printf("-------------- %ld \n", data->Waveform1[0][index].size());
|
// printf("-------------- %ld \n", data->Waveform1[0][index].size());
|
||||||
|
|
||||||
|
data->PrintAllData();
|
||||||
eb->BuildEvents(100);
|
eb->BuildEvents(100);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -73,7 +75,6 @@ int main(int argc, char* argv[]){
|
||||||
dig[0]->StopACQ();
|
dig[0]->StopACQ();
|
||||||
|
|
||||||
|
|
||||||
data->PrintAllData();
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user