find Digi-XXX.bin for initial when opening digitizer

This commit is contained in:
splitPoleDAQ 2023-05-02 15:43:05 -04:00
parent 9783cc0edf
commit c345fdbea5
3 changed files with 78 additions and 64 deletions

View File

@ -284,8 +284,9 @@ int Digitizer::ProgramBoard(){
int Digitizer::ProgramPHABoard(){
printf("========Digitizer::%s\n", __func__);
ret = CAEN_DGTZ_Reset(handle);
printf("======== program board PHA\n");
ret = CAEN_DGTZ_WriteRegister(handle, DPP::RecordLength_G + 0x7000, 62);
ret = CAEN_DGTZ_WriteRegister(handle, DPP::BoardConfiguration, 0x0F8915); /// has Extra2, dual trace, input and trap-baseline
@ -302,8 +303,6 @@ int Digitizer::ProgramPHABoard(){
ret = CAEN_DGTZ_SetRunSynchronizationMode(handle, CAEN_DGTZ_RUN_SYNC_Disabled);
if( ret != 0 ) { printf("==== set board error.\n"); return 0;}
printf("======== program Channels PHA\n");
uint32_t address;
@ -330,8 +329,6 @@ int Digitizer::ProgramPHABoard(){
if( ret != 0 ) { printf("==== set channels error.\n"); return 0;}
printf("End of program board and channels\n");
isSettingFilledinMemeory = false; /// unlock the ReadAllSettingsFromBoard();
ReadAllSettingsFromBoard();
@ -555,7 +552,7 @@ void Digitizer::ReadAllSettingsFromBoard(bool force){
if( AcqRun ) return;
if( isSettingFilledinMemeory && !force) return;
printf("===== %s \n", __func__);
printf("===== Digitizer::%s \n", __func__);
/// board setting
for( int p = 0; p < (int) RegisterDPPList.size(); p++){
@ -581,37 +578,44 @@ void Digitizer::ReadAllSettingsFromBoard(bool force){
}
}
isSettingFilledinMemeory = true;
printf("---------------------- end of %s \n", __func__);
}
void Digitizer::ProgramSettingsToBoard(){
if( !isConnected ) return;
if( isDummy ) return;
if( !isConnected || isDummy ) return;
printf("========== %s \n", __func__);
Reg haha;
/// board setting
for( int p = 0; p < (int) RegisterDPPList[p]; p++){
if( RegisterDPPList[p].GetType() == RW::ReadONLY) continue;
haha = RegisterDPPList[p];
WriteRegister(haha, GetSettingFromMemory(haha), -1, false);
usleep(100 * 1000);
for( int p = 0; p < (int) RegisterDPPList.size(); p++){
if( RegisterDPPList[p].GetType() == RW::ReadWrite) {
haha = RegisterDPPList[p];
WriteRegister(haha, GetSettingFromMemory(haha), -1, false);
usleep(1 * 1000);
}
}
/// Channels Setting
for( int ch = 0; ch < NChannel; ch ++){
if( DPPType == V1730_DPP_PHA_CODE ){
for( int p = 0; p < (int) RegisterPHAList[p]; p++){
if( RegisterPHAList[p].GetType() == RW::ReadONLY) continue;
haha = RegisterPHAList[p];
WriteRegister(haha, GetSettingFromMemory(haha, ch), ch, false);
usleep(100 * 1000);
for( int p = 0; p < (int) RegisterPHAList.size(); p++){
if( RegisterPHAList[p].GetType() == RW::ReadWrite ){
haha = RegisterPHAList[p];
WriteRegister(haha, GetSettingFromMemory(haha, ch), ch, false);
usleep(1 * 1000);
}
}
}
if( DPPType == V1730_DPP_PSD_CODE ){
for( int p = 0; p < (int) RegisterPSDList[p]; p++){
if( RegisterPSDList[p].GetType() == RW::ReadONLY) continue;
haha = RegisterPHAList[p];
WriteRegister(haha, GetSettingFromMemory(haha, ch), ch, false);
usleep(100 * 1000);
for( int p = 0; p < (int) RegisterPSDList.size(); p++){
if( RegisterPSDList[p].GetType() == RW::ReadWrite){
haha = RegisterPHAList[p];
WriteRegister(haha, GetSettingFromMemory(haha, ch), ch, false);
usleep(1 * 1000);
}
}
}
}

View File

@ -1229,21 +1229,21 @@ void DigiSettingsPanel::SaveSetting(int opt){
QDir dir(rawDataPath);
if( !dir.exists() ) dir.mkpath(".");
QString filePath = QFileDialog::getSaveFileName(this, "Save Settings File", rawDataPath, opt == 0 ? "Data file (*.dat)" : "Text file (*.txt)");
QString filePath = QFileDialog::getSaveFileName(this, "Save Settings File", rawDataPath, opt == 0 ? "Binary (*.bin)" : "Text file (*.txt)");
if (!filePath.isEmpty()) {
QFileInfo fileInfo(filePath);
QString ext = fileInfo.suffix();
if( opt == 0 ){
if( ext == "") filePath += ".dat";
if( ext == "") filePath += ".bin";
digi[ID]->SaveAllSettingsAsBin(filePath.toStdString().c_str());
leSaveFilePath[ID]->setText(filePath + " | update constantly");
leSaveFilePath[ID]->setText(filePath + " | dynamic update");
}
if( opt == 1 ){
if( ext == "") filePath += ".txt";
digi[ID]->SaveAllSettingsAsText(filePath.toStdString().c_str());
leSaveFilePath[ID]->setText(filePath);
leSaveFilePath[ID]->setText(filePath + " | not loadable!!");
}
SendLogMsg("Saved setting file <b>" + filePath + "</b>.");
@ -1256,7 +1256,7 @@ void DigiSettingsPanel::LoadSetting(){
QFileDialog fileDialog(this);
fileDialog.setDirectory(rawDataPath);
fileDialog.setFileMode(QFileDialog::ExistingFile);
fileDialog.setNameFilter("Data file (*.dat);;");
fileDialog.setNameFilter("Binary (*.bin);;");
int result = fileDialog.exec();
if( ! (result == QDialog::Accepted) ) return;
@ -1265,12 +1265,12 @@ void DigiSettingsPanel::LoadSetting(){
QString fileName = fileDialog.selectedFiles().at(0);
leSaveFilePath[ID]->setText(fileName);
if( digi[ID]->LoadSettingBinaryToMemory(fileName.toStdString().c_str()) ){
if( digi[ID]->LoadSettingBinaryToMemory(fileName.toStdString().c_str()) == 0 ){
SendLogMsg("Loaded settings file " + fileName + " for Digi-" + QString::number(digi[ID]->GetSerialNumber()));
leSaveFilePath[ID]->setText(fileName + " | dynamic update");
digi[ID]->ProgramSettingsToBoard();
UpdatePanelFromMemory();
}else{
SendLogMsg("Fail to Loaded settings file " + fileName + " for Digi-" + QString::number(digi[ID]->GetSerialNumber()));
}

View File

@ -161,33 +161,6 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent){
programSettingsFilePath = QDir::current().absolutePath() + "/programSettings.txt";
LoadProgramSettings();
{
scalar = new QMainWindow(this);
scalar->setWindowTitle("Scalar");
QScrollArea * scopeScroll = new QScrollArea(scalar);
scalar->setCentralWidget(scopeScroll);
scopeScroll->setWidgetResizable(true);
scopeScroll->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
QWidget * layoutWidget = new QWidget(scalar);
scopeScroll->setWidget(layoutWidget);
scalarLayout = new QGridLayout(layoutWidget);
scalarLayout->setSpacing(0);
scalarLayout->setAlignment(Qt::AlignTop);
leTrigger = nullptr;
leAccept = nullptr;
lbLastUpdateTime = nullptr;
lbScalarACQStatus = nullptr;
scalarThread = new TimingThread();
connect(scalarThread, &TimingThread::timeUp, this, &MainWindow::UpdateScalar);
}
//=========== disable widget
WaitForDigitizersOpen(true);
@ -373,15 +346,30 @@ void MainWindow::OpenDigitizers(){
readDataThread = new ReadDataThread * [nDigi];
for( unsigned int i = 0; i < nDigi; i++){
digi[i] = new Digitizer(portList[i].first, portList[i].second);
//TODO === load settings
digi[i]->Reset();
digi[i]->ProgramPHABoard();
///============== load settings
QString fileName = rawDataPath + "/Digi-" + QString::number(digi[i]->GetSerialNumber()) + ".bin";
QFile file(fileName);
if( !file.open(QIODevice::Text | QIODevice::ReadOnly) ) {
LogMsg("<b>" + fileName + "</b> not found. Program predefined PHA settings."); //TODO, PSD?
digi[i]->ProgramPHABoard();
}else{
LogMsg("Found <b>" + fileName + "</b> for digitizer settings.");
if( digi[i]->LoadSettingBinaryToMemory(fileName.toStdString().c_str()) == 0 ){
LogMsg("Loaded settings file " + fileName + " for Digi-" + QString::number(digi[i]->GetSerialNumber()));
digi[i]->ProgramSettingsToBoard();
}else{
LogMsg("Fail to Loaded settings file " + fileName + " for Digi-" + QString::number(digi[i]->GetSerialNumber()));
}
}
readDataThread[i] = new ReadDataThread(digi[i], i);
connect(readDataThread[i], &ReadDataThread::sendMsg, this, &MainWindow::LogMsg);
}
digi[0]->SaveAllSettingsAsText("setting.txt");
LogMsg(QString("Done. Opened %1 digitizer(s).").arg(nDigi));
WaitForDigitizersOpen(false);
@ -413,8 +401,6 @@ void MainWindow::CloseDigitizers(){
for(unsigned int i = 0; i < nDigi; i ++){
digi[i]->CloseDigitizer();
delete digi[i];
digi[i] = nullptr;
delete readDataThread[i];
}
delete [] digi;
@ -448,6 +434,30 @@ void MainWindow::WaitForDigitizersOpen(bool onOff){
//***************************************************************
void MainWindow::SetupScalar(){
scalar = new QMainWindow(this);
scalar->setWindowTitle("Scalar");
QScrollArea * scopeScroll = new QScrollArea(scalar);
scalar->setCentralWidget(scopeScroll);
scopeScroll->setWidgetResizable(true);
scopeScroll->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
QWidget * layoutWidget = new QWidget(scalar);
scopeScroll->setWidget(layoutWidget);
scalarLayout = new QGridLayout(layoutWidget);
scalarLayout->setSpacing(0);
scalarLayout->setAlignment(Qt::AlignTop);
leTrigger = nullptr;
leAccept = nullptr;
lbLastUpdateTime = nullptr;
lbScalarACQStatus = nullptr;
scalarThread = new TimingThread();
connect(scalarThread, &TimingThread::timeUp, this, &MainWindow::UpdateScalar);
scalar->setGeometry(0, 0, 10 + nDigi * 180, 110 + MaxNChannels * 20);
if( lbLastUpdateTime == nullptr ){