testing with digitizers

This commit is contained in:
carina@hades 2022-09-26 16:47:20 -04:00
parent 995b19a262
commit f8ddccdac8
9 changed files with 193 additions and 211 deletions

View File

@ -1,13 +1,28 @@
#include "ClassDigitizer.h" #include "ClassDigitizer.h"
Digitizer::Digitizer(){ Digitizer::Digitizer(){
Initalization();
}
Digitizer::Digitizer(int boardID, int portID, bool program, bool verbose){
Initalization();
OpenDigitizer(boardID, portID, program, verbose);
}
Digitizer::~Digitizer(){
delete data;
CloseDigitizer();
}
void Digitizer::Initalization(){
portID = -1; portID = -1;
boardID = -1; boardID = -1;
handle = -1; handle = -1;
NChannel = 0; NChannel = 0;
ADCbits = 1; ADCbits = 1;
DPPType = 0; DPPType = 0;
DPPTypeStr = "";
ADCFullSize = 0; ADCFullSize = 0;
ch2ns = 0; ch2ns = 0;
BoardInfo = {}; BoardInfo = {};
@ -28,18 +43,7 @@ Digitizer::Digitizer(){
ret = -1; ret = -1;
isConnected = false; isConnected = false;
AcqRun = false; AcqRun = false;
}
Digitizer::Digitizer(int boardID, int portID, bool verbose){
Digitizer();
OpenDigitizer(boardID, portID, true, verbose);
}
Digitizer::~Digitizer(){
CloseDigitizer();
delete data;
} }
void Digitizer::Reset(){ void Digitizer::Reset(){
@ -106,23 +110,22 @@ int Digitizer::OpenDigitizer(int boardID, int portID, bool program, bool verbose
///====================== Check DPP firmware revision ///====================== Check DPP firmware revision
sscanf(BoardInfo.AMC_FirmwareRel, "%d", &DPPType); sscanf(BoardInfo.AMC_FirmwareRel, "%d", &DPPType);
switch (DPPType){
case V1724_DPP_PHA_CODE: DPPTypeStr = "DPP-PHA x724"; break;
case V1720_DPP_CI_CODE : DPPTypeStr = "DPP-CI x720"; break;
case V1720_DPP_PSD_CODE: DPPTypeStr = "DPP-PSD x720"; break;
case V1751_DPP_PSD_CODE: DPPTypeStr = "DPP-PSD x751"; break;
case V1751_DPP_ZLE_CODE: DPPTypeStr = "DPP-ZLE x751"; break;
case V1743_DPP_CI_CODE: DPPTypeStr = "DPP-PSD x743"; break;
case V1740_DPP_QDC_CODE: DPPTypeStr = "DPP-QDC x740"; break;
case V1730_DPP_PSD_CODE: DPPTypeStr = "DPP-PSD x730"; break;
case V1730_DPP_PHA_CODE: DPPTypeStr = "DPP-PHA x730"; break;
case V1730_DPP_ZLE_CODE: DPPTypeStr = "DPP-ZLE x730"; break;
case V1730_DPP_DAW_CODE: DPPTypeStr = "DPP-DAW x730"; break;
}
if (DPPType >= 0x80 && verbose) { if (DPPType >= 0x80 && verbose) {
printf("\t==== This digitizer has a DPP firmware!\n"); printf("\t==== This digitizer has a DPP firmware!\n");
printf("\e[32m"); printf("\e[32m\t %s \e[0m", DPPTypeStr.c_str());
switch (DPPType){
case V1724_DPP_PHA_CODE: printf("\tDPP-PHA for x724 boards \n"); break;
case V1720_DPP_CI_CODE : printf("\tDPP-CI for x720 boards \n"); break;
case V1720_DPP_PSD_CODE: printf("\tDPP-PSD for x720 boards \n"); break;
case V1751_DPP_PSD_CODE: printf("\tDPP-PSD for x751 boards \n"); break;
case V1751_DPP_ZLE_CODE: printf("\tDPP-ZLE for x751 boards \n"); break;
case V1743_DPP_CI_CODE: printf("\tDPP-PSD for x743 boards \n"); break;
case V1740_DPP_QDC_CODE: printf("\tDPP-QDC for x740 boards \n"); break;
case V1730_DPP_PSD_CODE: printf("\tDPP-PSD for x730 boards \n"); break;
case V1730_DPP_PHA_CODE: printf("\tDPP-PHA for x730 boards \n"); break;
case V1730_DPP_ZLE_CODE: printf("\tDPP-ZLE for x730 boards \n"); break;
case V1730_DPP_DAW_CODE: printf("\tDPP-DAW for x730 boards \n"); break;
}
printf("\e[0m");
} }
///======================= Check virtual probe ///======================= Check virtual probe
@ -187,8 +190,6 @@ int Digitizer::CloseDigitizer(){
ret = CAEN_DGTZ_SWStopAcquisition(handle); ret = CAEN_DGTZ_SWStopAcquisition(handle);
ret |= CAEN_DGTZ_CloseDigitizer(handle); ret |= CAEN_DGTZ_CloseDigitizer(handle);
//data->FreeMemory();
return ret; return ret;
} }
@ -356,19 +357,19 @@ void Digitizer::WriteRegister(uint32_t address, uint32_t value, int ch ){
uint32_t Digitizer::ReadRegister(uint32_t address, int ch, string str ){ uint32_t Digitizer::ReadRegister(uint32_t address, int ch, string str ){
if( !isConnected ) return 0; if( !isConnected ) return 0;
uint32_t * Data = new uint32_t[NChannel]; uint32_t * data = new uint32_t[NChannel];
if( address < 0x8000) { if( address < 0x8000) {
if( ch < 0 ) { if( ch < 0 ) {
ret = CAEN_DGTZ_ReadRegister(handle, address + 0x7000, Data); ret = CAEN_DGTZ_ReadRegister(handle, address + 0x7000, data);
}else{ }else{
ret = CAEN_DGTZ_ReadRegister(handle, address + (ch << 8), Data); ret = CAEN_DGTZ_ReadRegister(handle, address + (ch << 8), data);
} }
}else{ }else{
ret = CAEN_DGTZ_ReadRegister(handle, address, Data); ret = CAEN_DGTZ_ReadRegister(handle, address, data);
} }
ErrorMsg("ReadRegister:" + std::to_string(address)); ErrorMsg("ReadRegister:" + std::to_string(address));
if( str != "" ) printf("%s : 0x%x \n", str.c_str(), Data[0]); if( str != "" ) printf("%s : 0x%08x \n", str.c_str(), data[0]);
return Data[0]; return data[0];
} }
void Digitizer::SetChannelMask(uint32_t mask){ void Digitizer::SetChannelMask(uint32_t mask){
@ -534,7 +535,7 @@ uint32_t Digitizer::PrintRegister(uint32_t address, std::string msg){
printf("----------------------------------------------------\e[0m\n"); printf("----------------------------------------------------\e[0m\n");
uint32_t * value = new uint32_t[1]; uint32_t * value = new uint32_t[1];
CAEN_DGTZ_ReadRegister(handle, (uint32_t) Register::BoardConfiguration, value); CAEN_DGTZ_ReadRegister(handle, address, value);
printf(" %*s 32 28 24 20 16 12 8 4 0\n", (int) msg.length(), ""); printf(" %*s 32 28 24 20 16 12 8 4 0\n", (int) msg.length(), "");
printf(" %*s | | | | | | | | |\n", (int) msg.length(), ""); printf(" %*s | | | | | | | | |\n", (int) msg.length(), "");
printf(" %*s", (int) msg.length(), ""); printf(" %*s", (int) msg.length(), "");
@ -640,7 +641,7 @@ void Digitizer::CreateAndSaveSettingBinary(string fileName){
SaveSettingEditByteByRegister(Register::DPP::AMCFirmwareRevision, ch); SaveSettingEditByteByRegister(Register::DPP::AMCFirmwareRevision, ch);
SaveSettingEditByteByRegister(Register::DPP::VetoWidth, ch); SaveSettingEditByteByRegister(Register::DPP::VetoWidth, ch);
if( DPPType == 0x8B ) { /// DPP-PHA if( DPPType == V1730_DPP_PHA_CODE ) { /// DPP-PHA
SaveSettingEditByteByRegister(Register::DPP::PHA::TriggerThreshold, ch); SaveSettingEditByteByRegister(Register::DPP::PHA::TriggerThreshold, ch);
SaveSettingEditByteByRegister(Register::DPP::PHA::RCCR2SmoothingFactor, ch); SaveSettingEditByteByRegister(Register::DPP::PHA::RCCR2SmoothingFactor, ch);
SaveSettingEditByteByRegister(Register::DPP::PHA::RiseTimeValidationWindow, ch); SaveSettingEditByteByRegister(Register::DPP::PHA::RiseTimeValidationWindow, ch);
@ -657,6 +658,24 @@ void Digitizer::CreateAndSaveSettingBinary(string fileName){
SaveSettingEditByteByRegister(Register::DPP::PHA::DPPAlgorithmControl2_G, ch); SaveSettingEditByteByRegister(Register::DPP::PHA::DPPAlgorithmControl2_G, ch);
SaveSettingEditByteByRegister(Register::DPP::PHA::FineGain, ch); SaveSettingEditByteByRegister(Register::DPP::PHA::FineGain, ch);
} }
if( DPPType == V1730_DPP_PSD_CODE ) { /// DPP-PSD
SaveSettingEditByteByRegister(Register::DPP::PSD::CFDSetting, ch);
SaveSettingEditByteByRegister(Register::DPP::PSD::ForcedDataFlush, ch);
SaveSettingEditByteByRegister(Register::DPP::PSD::ChargeZeroSuppressionThreshold, ch);
SaveSettingEditByteByRegister(Register::DPP::PSD::ShortGateWidth, ch);
SaveSettingEditByteByRegister(Register::DPP::PSD::LongGateWidth, ch);
SaveSettingEditByteByRegister(Register::DPP::PSD::GateOffset, ch);
SaveSettingEditByteByRegister(Register::DPP::PSD::TriggerThreshold, ch);
SaveSettingEditByteByRegister(Register::DPP::PSD::FixedBaseline, ch);
SaveSettingEditByteByRegister(Register::DPP::PSD::TriggerLatency, ch);
SaveSettingEditByteByRegister(Register::DPP::PSD::ShapedTriggerWidth, ch);
SaveSettingEditByteByRegister(Register::DPP::PSD::TriggerHoldOffWidth, ch);
SaveSettingEditByteByRegister(Register::DPP::PSD::ThresholdForPSDCut, ch);
SaveSettingEditByteByRegister(Register::DPP::PSD::PurGapThreshold, ch);
SaveSettingEditByteByRegister(Register::DPP::PSD::DPPAlgorithmControl2_G, ch);
SaveSettingEditByteByRegister(Register::DPP::PSD::EarlyBaselineFreeze, ch);
}
} }
} }

View File

@ -23,10 +23,10 @@ class Digitizer{
public: public:
Digitizer(); Digitizer();
Digitizer(int boardID, int portID = 0, bool verbose = false); Digitizer(int boardID, int portID = 0, bool program = false, bool verbose = false);
~Digitizer(); ~Digitizer();
void Initalization();
void Reset(); void Reset();
int OpenDigitizer(int boardID, int portID = 0, bool program = false, bool verbose = false);/// portID is for optical link for using PCIe card, from 0, 1, 2, 3 int OpenDigitizer(int boardID, int portID = 0, bool program = false, bool verbose = false);/// portID is for optical link for using PCIe card, from 0, 1, 2, 3
int CloseDigitizer(); int CloseDigitizer();
@ -70,6 +70,7 @@ class Digitizer{
int GetHandle() {return handle;} int GetHandle() {return handle;}
bool GetConnectionStatus() {return isConnected;} bool GetConnectionStatus() {return isConnected;}
int GetDPPType() {return DPPType;} int GetDPPType() {return DPPType;}
std::string GetDPPTypeString() {return DPPTypeStr;}
CAEN_DGTZ_ConnectionType GetLinkType() {return LinkType;} CAEN_DGTZ_ConnectionType GetLinkType() {return LinkType;}
int GetADCBits() {return BoardInfo.ADC_NBits;} int GetADCBits() {return BoardInfo.ADC_NBits;}
std::string GetROCVersion() {return BoardInfo.ROC_FirmwareRel;} std::string GetROCVersion() {return BoardInfo.ROC_FirmwareRel;}
@ -126,6 +127,7 @@ class Digitizer{
int NChannel; /// number of channel int NChannel; /// number of channel
int ADCbits; /// ADC bit int ADCbits; /// ADC bit
int DPPType; /// DPP verion int DPPType; /// DPP verion
std::string DPPTypeStr; /// DPP type in string
unsigned int ADCFullSize; /// pow(2, ADCbits) - 1 unsigned int ADCFullSize; /// pow(2, ADCbits) - 1
float ch2ns; /// channel to ns float ch2ns; /// channel to ns
CAEN_DGTZ_BoardInfo_t BoardInfo; CAEN_DGTZ_BoardInfo_t BoardInfo;

View File

@ -5,6 +5,8 @@ DigitizerPHA::DigitizerPHA(){
} }
DigitizerPHA::DigitizerPHA(int boardID, int portID, bool verbose){ DigitizerPHA::DigitizerPHA(int boardID, int portID, bool verbose){
Initalization();
DPPType = V1730_DPP_PHA_CODE;
OpenDigitizer(boardID, portID, true, verbose); OpenDigitizer(boardID, portID, true, verbose);
} }

View File

@ -6,7 +6,9 @@ DigitizerPSD::DigitizerPSD(){
} }
DigitizerPSD::DigitizerPSD(int boardID, int portID){ DigitizerPSD::DigitizerPSD(int boardID, int portID){
OpenDigitizer(boardID, portID); Initalization();
DPPType = V1730_DPP_PSD_CODE;
OpenDigitizer(boardID, portID, true, false);
} }
DigitizerPSD::~DigitizerPSD(){ DigitizerPSD::~DigitizerPSD(){

View File

@ -88,7 +88,7 @@ MainWindow::MainWindow(const TGWindow *p,UInt_t w,UInt_t h) {
fMain->AddFrame(hframe, new TGLayoutHints(kLHintsCenterX,2,2,2,2)); fMain->AddFrame(hframe, new TGLayoutHints(kLHintsCenterX,2,2,2,2));
///================= Open digitizers ///================= Open digitizers
TGTextButton *bOpenDigitizers = new TGTextButton(hframe,"Open Digitizers"); bOpenDigitizers = new TGTextButton(hframe,"Open Digitizers");
bOpenDigitizers->Connect("Clicked()","MainWindow",this,"OpenDigitizers()"); bOpenDigitizers->Connect("Clicked()","MainWindow",this,"OpenDigitizers()");
hframe->AddFrame(bOpenDigitizers, uniLayoutHints); hframe->AddFrame(bOpenDigitizers, uniLayoutHints);
@ -140,7 +140,7 @@ MainWindow::MainWindow(const TGWindow *p,UInt_t w,UInt_t h) {
// //
//HandleMenu(M_BOARD_SETTINGS); //HandleMenu(M_BOARD_SETTINGS);
//HandleMenu(M_CH_SETTING_PHA); //HandleMenu(M_CH_SETTING_PHA);
HandleMenu(M_CH_SETTING_PSD); //HandleMenu(M_CH_SETTING_PSD);
} }
MainWindow::~MainWindow() { MainWindow::~MainWindow() {
@ -214,16 +214,9 @@ void MainWindow::HandleMenu(Int_t id){
///========================= Board setting ///========================= Board setting
case M_BOARD_SETTINGS:{ case M_BOARD_SETTINGS:{
if( boardSetting == NULL ) { boardSetting = new BoardSetting(gClient->GetRoot(), 600, 600, digi, nDigi);
boardSetting = new BoardSetting(gClient->GetRoot(), 600, 600, digi, nDigi); boardSetting->Connect("LogMsg(char*)", "MainWindow", this, "LogMsg(char*)");
boardSetting->Connect("LogMsg(char*)", "MainWindow", this, "LogMsg(char*)"); boardSetting->Connect("Haha(Int_t)", "MainWindow", this, "OpenChannelSetting(Int_t)");
boardSetting->Connect("Haha(Int_t)", "MainWindow", this, "OpenChannelSetting(Int_t)");
}else{
if ( boardSetting->IsOpen() == false ){
boardSetting = new BoardSetting(gClient->GetRoot(), 600, 600, digi, nDigi);
//boardSetting->Connect("BdLogMsg(TString)", "MainWindow", this, "LogMsg(TString)");
}
}
}break; }break;
///========================= Program setting ///========================= Program setting
@ -287,27 +280,19 @@ void MainWindow::OpenDigitizers(){
digi = new Digitizer * [nDigi]; digi = new Digitizer * [nDigi];
//pha = new DigitizerPHA * [nPHA];
//psd = new DigitizerPHA * [nPSD];
//
//iPHA = 0;
//iPSD = 0;
for( int i = 0; i < nDigi; i++){ for( int i = 0; i < nDigi; i++){
printf("------------ %d \n", i); printf("------------ %d \n", i);
if( DPPType[i] == V1730_DPP_PSD_CODE ) { digi[i] = new Digitizer(boardID[i], portID[i], false, false); // TODO basic board program
digi[i] = new DigitizerPSD(boardID[i], portID[i]); LogMsg(Form("%2d, Serial number : %3d opened (%s, %s)", i, digi[i]->GetSerialNumber(),
printf("Open as PSD\n"); digi[i]->GetDPPTypeString().c_str(),
}else if( DPPType[i] == V1730_DPP_PHA_CODE ){ digi[i]->GetModelName().c_str()));
digi[i] = new DigitizerPHA(boardID[i], portID[i]);
printf("Open as PHA\n");
}else{
digi[i] = new Digitizer(boardID[i], portID[i]);
printf("Open as Ordinary Digitizer\n");
}
digi[i]->CreateAndSaveSettingBinary("setting_" + to_string(digi[i]->GetSerialNumber()) + ".bin"); digi[i]->CreateAndSaveSettingBinary("setting_" + to_string(digi[i]->GetSerialNumber()) + ".bin");
} }
fMenuDigitizers->DisableEntry( M_DIGITIZER_OPEN);
bOpenDigitizers->SetEnabled(false);
} }
} }
@ -341,15 +326,15 @@ void MainWindow::OpenChannelSetting(Int_t boardID){
printf("#### %s \n", __func__); printf("#### %s \n", __func__);
//if( digi[boardID]->GetDPPType() == V1730_DPP_PHA_CODE ){ if( digi[boardID]->GetDPPType() == V1730_DPP_PHA_CODE ){
// channelSettingPHA = new ChannelSettingPHA(gClient->GetRoot(), 600, 600, digi, nDigi, boardID); channelSettingPHA = new ChannelSettingPHA(gClient->GetRoot(), 600, 600, digi, nDigi, boardID);
// channelSettingPHA->Connect("LogMsg(char*)", "MainWindow", this, "LogMsg(char*)"); channelSettingPHA->Connect("LogMsg(char*)", "MainWindow", this, "LogMsg(char*)");
//} }
//if( digi[boardID]->GetDPPType() == V1730_DPP_PSD_CODE ){ if( digi[boardID]->GetDPPType() == V1730_DPP_PSD_CODE ){
channelSettingPSD = new ChannelSettingPSD(gClient->GetRoot(), 600, 600, digi, nDigi, boardID); channelSettingPSD = new ChannelSettingPSD(gClient->GetRoot(), 600, 600, digi, nDigi, boardID);
channelSettingPSD->Connect("LogMsg(char*)", "MainWindow", this, "LogMsg(char*)"); channelSettingPSD->Connect("LogMsg(char*)", "MainWindow", this, "LogMsg(char*)");
//} }
} }
void MainWindow::LogMsg(char * msg){ void MainWindow::LogMsg(char * msg){

View File

@ -44,6 +44,8 @@ private:
//TGTextButton *bStartRun; //TGTextButton *bStartRun;
//TGTextButton *bStopRun; //TGTextButton *bStopRun;
//TGTextButton *bFitTrace; //TGTextButton *bFitTrace;
TGTextButton *bOpenDigitizers;
unsigned short nDigi; unsigned short nDigi;
vector<int> DPPType; vector<int> DPPType;

View File

@ -20,31 +20,6 @@ TString boardSettingName[NUM_BOARD_INFO] = { "Model",
"AMC version" "AMC version"
}; };
Pixel_t BoardSetting::red = 0;
Pixel_t BoardSetting::blue = 0;
TGNumberEntry * BoardSetting::boardIDEntry = NULL;
Digitizer ** BoardSetting::digi = NULL;
TGTextEntry * BoardSetting::txtACQStatus = NULL;
TGTextEntry * BoardSetting::txtACQEventReady = NULL;
TGTextEntry * BoardSetting::txtACQEventFull = NULL;
TGTextEntry * BoardSetting::txtACQClockSource = NULL;
TGTextEntry * BoardSetting::txtACQPLLLock = NULL;
TGTextEntry * BoardSetting::txtACQChDown = NULL;
TGTextEntry * BoardSetting::txtACQSIN = NULL;
TGTextEntry * BoardSetting::txtACQTRIGIN = NULL;
TGTextEntry * BoardSetting::txtACQBoardReady = NULL;
TGTextEntry * BoardSetting::txtACQTemp0 = NULL;
TGTextEntry * BoardSetting::txtACQTemp1 = NULL;
TGTextEntry * BoardSetting::txtACQTemp2 = NULL;
TGTextEntry * BoardSetting::txtACQTemp3 = NULL;
TGTextEntry * BoardSetting::txtEventReady = NULL;
TGTextEntry * BoardSetting::txtBusError = NULL;
TGTextEntry * BoardSetting::txtVMEFIFO = NULL;
bool BoardSetting::isOpened = false;
BoardSetting::BoardSetting(const TGWindow *p, UInt_t w, UInt_t h, Digitizer ** digi, int nBoard){ BoardSetting::BoardSetting(const TGWindow *p, UInt_t w, UInt_t h, Digitizer ** digi, int nBoard){
this->nDigi = nBoard; this->nDigi = nBoard;
@ -235,6 +210,11 @@ BoardSetting::BoardSetting(const TGWindow *p, UInt_t w, UInt_t h, Digitizer ** d
bOpenChannelSetting->SetHeight(40); bOpenChannelSetting->SetHeight(40);
bOpenChannelSetting->Connect("Clicked()", "BoardSetting", this, "OpenChannelSetting()"); bOpenChannelSetting->Connect("Clicked()", "BoardSetting", this, "OpenChannelSetting()");
TGTextButton * bUpdateStatus = new TGTextButton(hRow0, "Update Status"); hRow0->AddFrame(bUpdateStatus, new TGLayoutHints( kLHintsExpandX | kLHintsExpandY, 5, 0, 5, 0));
bUpdateStatus->SetHeight(40);
bUpdateStatus->Connect("Clicked()", "BoardSetting", this, "ReadStatus()");
TGHorizontalFrame * hRow1 = new TGHorizontalFrame(vframe); vframe->AddFrame(hRow1, new TGLayoutHints( kLHintsExpandX)); TGHorizontalFrame * hRow1 = new TGHorizontalFrame(vframe); vframe->AddFrame(hRow1, new TGLayoutHints( kLHintsExpandX));
{///========= Board Configure {///========= Board Configure
@ -419,9 +399,7 @@ BoardSetting::BoardSetting(const TGWindow *p, UInt_t w, UInt_t h, Digitizer ** d
bSWClockSync = new TGTextButton(hAcqCtrl_c, "Send Software Clock Sync Signal"); hAcqCtrl_c->AddFrame(bSWClockSync, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY)); bSWClockSync = new TGTextButton(hAcqCtrl_c, "Send Software Clock Sync Signal"); hAcqCtrl_c->AddFrame(bSWClockSync, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY));
bSWClockSync->Connect("Clicked()", "BoardSetting", this, "SendSoftwareClockSyncSignal()"); bSWClockSync->Connect("Clicked()", "BoardSetting", this, "SendSoftwareClockSyncSignal()");
bSWClockSync->Resize(250, 20); bSWClockSync->Resize(250, 20);
} }
{///========= Trigger Configure {///========= Trigger Configure
@ -694,10 +672,8 @@ BoardSetting::BoardSetting(const TGWindow *p, UInt_t w, UInt_t h, Digitizer ** d
isOpened = true; isOpened = true;
///Setup thread ///Setup thread
readStatusThread = new TThread("readStatus", ReadStatus, (void *) 1); ///readStatusThread = new TThread("readStatus", ReadStatus, (void *) 1);
if( digi != NULL ) readStatusThread->Run(); ///if( digi != NULL ) readStatusThread->Run();
isOpened = true;
} }
BoardSetting::~BoardSetting(){ BoardSetting::~BoardSetting(){
@ -706,10 +682,10 @@ BoardSetting::~BoardSetting(){
printf("close BoardSetting window\n"); printf("close BoardSetting window\n");
for( int i = 0; i < nDigi; i++) digi[i] = 0; //for( int i = 0; i < nDigi; i++) digi[i] = 0;
//pha = 0; //pha = 0;
//psd = 0; //psd = 0;
//delete readStatusThread;
fMain->Cleanup(); fMain->Cleanup();
delete fMain; delete fMain;
@ -720,64 +696,74 @@ void BoardSetting::LogMsg(TString msg){
Emit("LogMsg(char*)", msg.Data()); Emit("LogMsg(char*)", msg.Data());
} }
void * BoardSetting::ReadStatus(void * ptr){ void BoardSetting::ReadStatus(){
if( digi == NULL ) return 0; if( digi == NULL ) return;
int pauseTime = 1000; /// msec
int boardID = boardIDEntry->GetNumber(); int boardID = boardIDEntry->GetNumber();
if( digi[boardID]->GetDPPType() == V1730_DPP_PHA_CODE ) { /// ACQ Status
digi[boardID]->PrintRegister(Register::DPP::AcquisitionStatus, "ACQ Status");
uint32_t temp = digi[boardID]->ReadRegister(Register::DPP::AcquisitionStatus);
//pha = dynamic_cast<DigitizerPHA*> (digi[boardID]); txtACQStatus ->SetText( ((temp >> 2) & 0x1) == 0 ? "ACQ is stopped" : "ACQ is Running", false); txtACQStatus->SetTextColor( ((temp >> 2) & 0x1) == 0 ? 1 : blue);
txtACQEventReady ->SetText( ((temp >> 3) & 0x1) == 0 ? "no Event" : "Has Events", false); txtACQEventReady->SetTextColor( ((temp >> 3) & 0x1) == 0 ? 1 : blue);
//while( digi[boardID]->isACQRunning() == false ){ txtACQEventFull ->SetText( ((temp >> 4) & 0x1) == 0 ? "no channel FULL" : "a channel FULL", false); txtACQEventFull->SetTextColor( ((temp >> 4) & 0x1) == 0 ? 1 : red);
while( isOpened ){ txtACQClockSource->SetText( ((temp >> 5) & 0x1) == 0 ? "Internal Clock" : "External Clock", false); txtACQClockSource->SetTextColor( ((temp >> 5) & 0x1) == 0 ? 1 : blue);
txtACQPLLLock ->SetText( ((temp >> 7) & 0x1) == 0 ? "PLL no lock" : "PLL locked", false); txtACQPLLLock->SetTextColor( ((temp >> 7) & 0x1) == 0 ? 1 : blue);
printf("=========== %s for PHA\n", __func__); txtACQBoardReady ->SetText( ((temp >> 8) & 0x1) == 0 ? "Board NOT Ready (PLL & ADCs are NOT sync)" : "Board Ready (PLL & ADCs are sync)", false);
/// ACQ Status txtACQBoardReady->SetTextColor( ((temp >> 8) & 0x1) == 0 ? red : 1);
uint32_t temp = digi[boardID]->ReadRegister(Register::DPP::AcquisitionStatus); txtACQChDown ->SetText( ((temp >> 19) & 0x1) == 0 ? "Channels are ON" : "Channels ShutDown", false);
txtACQChDown->SetTextColor( ((temp >> 19) & 0x1) == 0 ? 1 : red);
txtACQStatus ->SetText( ((temp >> 2) & 0x1) == 0 ? "ACQ is stopped" : "ACQ is Running", false); txtACQStatus->SetTextColor( ((temp >> 2) & 0x1) == 0 ? 1 : blue); txtACQSIN ->SetText( ((temp >> 15) & 0x1) == 0 ? "S-IN = 0" : "S-IN = 1", false); txtACQSIN->SetTextColor( ((temp >> 15) & 0x1) == 0 ? 1 : blue);
txtACQEventReady ->SetText( ((temp >> 3) & 0x1) == 0 ? "no Event" : "Has Events", false); txtACQEventReady->SetTextColor( ((temp >> 3) & 0x1) == 0 ? 1 : blue); txtACQTRIGIN ->SetText( ((temp >> 16) & 0x1) == 0 ? "TRG-IN = 0" : "TRG-IN = 1", false); txtACQTRIGIN->SetTextColor( ((temp >> 16) & 0x1) == 0 ? 1 : blue);
txtACQEventFull ->SetText( ((temp >> 4) & 0x1) == 0 ? "no channel FULL" : "a channel FULL", false); txtACQEventFull->SetTextColor( ((temp >> 4) & 0x1) == 0 ? 1 : red);
txtACQClockSource->SetText( ((temp >> 5) & 0x1) == 0 ? "Internal Clock" : "External Clock", false); txtACQClockSource->SetTextColor( ((temp >> 5) & 0x1) == 0 ? 1 : blue); txtACQTemp0->SetText( ((temp >> 20) & 0x1) == 0 ? "< 70" : "> 70", false); txtACQTemp0->SetTextColor( ((temp >> 20) & 0x1) == 0 ? 1 : red);
txtACQPLLLock ->SetText( ((temp >> 7) & 0x1) == 0 ? "PLL no lock" : "PLL locked", false); txtACQPLLLock->SetTextColor( ((temp >> 7) & 0x1) == 0 ? 1 : blue); txtACQTemp1->SetText( ((temp >> 21) & 0x1) == 0 ? "< 70" : "> 70", false); txtACQTemp1->SetTextColor( ((temp >> 21) & 0x1) == 0 ? 1 : red);
txtACQBoardReady ->SetText( ((temp >> 8) & 0x1) == 0 ? "Board NOT Ready (PLL & ADCs are NOT sync)" : "Board Ready (PLL & ADCs are sync)", false); txtACQTemp2->SetText( ((temp >> 22) & 0x1) == 0 ? "< 70" : "> 70", false); txtACQTemp2->SetTextColor( ((temp >> 22) & 0x1) == 0 ? 1 : red);
txtACQBoardReady->SetTextColor( ((temp >> 8) & 0x1) == 0 ? red : 1); txtACQTemp3->SetText( ((temp >> 23) & 0x1) == 0 ? "< 70" : "> 70", false); txtACQTemp3->SetTextColor( ((temp >> 23) & 0x1) == 0 ? 1 : red);
txtACQChDown ->SetText( ((temp >> 19) & 0x1) == 0 ? "Channels are ON" : "Channels ShutDown", false);
txtACQChDown->SetTextColor( ((temp >> 19) & 0x1) == 0 ? 1 : red); /// Redaout Status
txtACQSIN ->SetText( ((temp >> 15) & 0x1) == 0 ? "S-IN = 0" : "S-IN = 1", false); txtACQSIN->SetTextColor( ((temp >> 15) & 0x1) == 0 ? 1 : blue); digi[boardID]->PrintRegister(Register::DPP::ReadoutStatus, "Readout Status");
txtACQTRIGIN ->SetText( ((temp >> 16) & 0x1) == 0 ? "TRG-IN = 0" : "TRG-IN = 1", false); txtACQTRIGIN->SetTextColor( ((temp >> 16) & 0x1) == 0 ? 1 : blue); temp = digi[boardID]->ReadRegister(Register::DPP::ReadoutStatus);
if( (temp & 0x1) == 1 ){
txtACQTemp0->SetText( ((temp >> 20) & 0x1) == 0 ? "< 70" : "> 70", false); txtACQTemp0->SetTextColor( ((temp >> 20) & 0x1) == 0 ? 1 : red); txtEventReady->SetText( "Event Ready" , false); txtEventReady->SetTextColor(blue);
txtACQTemp1->SetText( ((temp >> 21) & 0x1) == 0 ? "< 70" : "> 70", false); txtACQTemp1->SetTextColor( ((temp >> 21) & 0x1) == 0 ? 1 : red); }else{
txtACQTemp2->SetText( ((temp >> 22) & 0x1) == 0 ? "< 70" : "> 70", false); txtACQTemp2->SetTextColor( ((temp >> 22) & 0x1) == 0 ? 1 : red); txtEventReady->SetText( "No Data Ready" , false); txtEventReady->SetTextColor(red);
txtACQTemp3->SetText( ((temp >> 23) & 0x1) == 0 ? "< 70" : "> 70", false); txtACQTemp3->SetTextColor( ((temp >> 23) & 0x1) == 0 ? 1 : red);
/// Redaout Status
temp = digi[boardID]->ReadRegister(Register::DPP::ReadoutStatus);
if( (temp & 0x1) == 1 ){
txtEventReady->SetText( "Event Ready" , false); txtEventReady->SetTextColor(blue);
}else{
txtEventReady->SetText( "No Data Ready" , false); txtEventReady->SetTextColor(red);
}
if( (( temp >> 2 ) & 0x1 ) == 0 ){
txtBusError->SetText( "no Bus Error", false ); txtBusError->SetTextColor(blue);
}else{
txtBusError->SetText( "Bus Error", false ); txtBusError->SetTextColor(red);
}
if( (( temp >> 3 ) & 0x1 ) == 0 ){
txtVMEFIFO->SetText( "VME FIFO NOT EMPTY", false ); txtVMEFIFO->SetTextColor(red);
}else{
txtVMEFIFO->SetText( "VME FIFO EMPTY", false ); txtVMEFIFO->SetTextColor(red);
}
usleep(pauseTime*1000);
}
} }
if( (( temp >> 2 ) & 0x1 ) == 0 ){
txtBusError->SetText( "no Bus Error", false ); txtBusError->SetTextColor(blue);
}else{
txtBusError->SetText( "Bus Error", false ); txtBusError->SetTextColor(red);
}
if( (( temp >> 3 ) & 0x1 ) == 0 ){
txtVMEFIFO->SetText( "VME FIFO NOT EMPTY", false ); txtVMEFIFO->SetTextColor(red);
}else{
txtVMEFIFO->SetText( "VME FIFO EMPTY", false ); txtVMEFIFO->SetTextColor(red);
}
///================ Board Failure Status
digi[boardID]->PrintRegister(Register::DPP::BoardFailureStatus, "Board Fail");
temp = digi[boardID]->ReadRegister(Register::DPP::BoardFailureStatus, -1, "Board Fail");
if( ((temp >> 4) & 0x1) == 0 ) {
enPLLStatus->SetText( "OK" , false); enPLLStatus->SetTextColor(1);
}else{
enPLLStatus->SetText( "Lost Lock" , false); enPLLStatus->SetTextColor(red);
}
if( ((temp >> 5) & 0x1) == 0 ) {
enTempStatus->SetText( "OK" , false); enTempStatus->SetTextColor(1);
}else{
enTempStatus->SetText( "Failure" , false); enTempStatus->SetTextColor(red);
}
if( ((temp >> 6) & 0x1) == 0 ) {
enADCPwrStatus->SetText( "OK", false); enADCPwrStatus->SetTextColor(1);
}else{
enADCPwrStatus->SetText( "Failure", false); enADCPwrStatus->SetTextColor(red);
}
} }
void BoardSetting::ChangeBoard(){ void BoardSetting::ChangeBoard(){
@ -789,7 +775,6 @@ void BoardSetting::ChangeBoard(){
} }
int boardID = boardIDEntry->GetNumber(); int boardID = boardIDEntry->GetNumber();
digi[boardID]->PrintBoard();
for( int i = 0; i < NUM_BOARD_INFO; i++){ for( int i = 0; i < NUM_BOARD_INFO; i++){
switch (i) { switch (i) {
@ -821,28 +806,6 @@ void BoardSetting::ChangeBoard(){
} }
} }
///================ Board Failure Status
unsigned int tempBits;
tempBits = digi[boardID]->ReadRegister(Register::BoardFailureStatus);
if( (tempBits & 0x10) == 0 ) {
enPLLStatus->SetText( "OK" , false); enPLLStatus->SetTextColor(1);
}else{
enPLLStatus->SetText( "Lost Lock" , false); enPLLStatus->SetTextColor(red);
}
if( (tempBits & 0x20) == 0 ) {
enTempStatus->SetText( "OK (<70)" , false); enTempStatus->SetTextColor(1);
}else{
enTempStatus->SetText( "Failure" , false); enTempStatus->SetTextColor(red);
}
if( (tempBits & 0x40) == 0 ) {
enADCPwrStatus->SetText( "OK", false); enADCPwrStatus->SetTextColor(1);
}else{
enADCPwrStatus->SetText( "Failure", false); enADCPwrStatus->SetTextColor(red);
}
cbAggOrg->Select( digi[boardID]->ReadRegister(Register::DPP::AggregateOrganization) , false); cbAggOrg->Select( digi[boardID]->ReadRegister(Register::DPP::AggregateOrganization) , false);
numAggBLT->SetNumber( digi[boardID]->ReadRegister(Register::DPP::MaxAggregatePerBlockTransfer) , false); numAggBLT->SetNumber( digi[boardID]->ReadRegister(Register::DPP::MaxAggregatePerBlockTransfer) , false);
cbFanCtrl->Select( digi[boardID]->ReadRegister(Register::DPP::FanSpeedControl) , false); cbFanCtrl->Select( digi[boardID]->ReadRegister(Register::DPP::FanSpeedControl) , false);
@ -852,10 +815,12 @@ void BoardSetting::ChangeBoard(){
cbAnaMonitor->Select( digi[boardID]->ReadRegister(Register::DPP::AnalogMonitorMode) & 0x7 , false); cbAnaMonitor->Select( digi[boardID]->ReadRegister(Register::DPP::AnalogMonitorMode) & 0x7 , false);
numBufferOccpGain->SetNumber( digi[boardID]->ReadRegister(Register::DPP::BufferOccupancyGain) & 0xf, false); numBufferOccpGain->SetNumber( digi[boardID]->ReadRegister(Register::DPP::BufferOccupancyGain) & 0xf, false);
ReadStatus();
/// ACQ Control /// ACQ Control
//digi[boardID]->PrintRegister(Register::DPP::AcquisitionControl, "AcquisitionControl"); //digi[boardID]->PrintRegister(Register::DPP::AcquisitionControl, "AcquisitionControl");
tempBits = digi[boardID]->ReadRegister(Register::DPP::AcquisitionControl); uint32_t tempBits = digi[boardID]->ReadRegister(Register::DPP::AcquisitionControl);
cbAcqMode->Select( tempBits & 0x3 , false); cbAcqMode->Select( tempBits & 0x3 , false);
bAcqArm->SetState( ((tempBits >> 2) & 0x1) ? kButtonDown : kButtonUp, false); bAcqArm->SetState( ((tempBits >> 2) & 0x1) ? kButtonDown : kButtonUp, false);
cbPLLref->Select( ((tempBits >> 6) & 0x1), false); cbPLLref->Select( ((tempBits >> 6) & 0x1), false);

View File

@ -22,14 +22,14 @@ class BoardSetting{
private: private:
TGMainFrame * fMain; TGMainFrame * fMain;
static Pixel_t red, blue; Pixel_t red, blue;
static TGNumberEntry * boardIDEntry; TGNumberEntry * boardIDEntry;
TGTextEntry * entry[NUM_BOARD_INFO]; TGTextEntry * entry[NUM_BOARD_INFO];
int nDigi; int nDigi;
static Digitizer ** digi; Digitizer ** digi;
/// board failure status /// board failure status
TGTextEntry * enPLLStatus; TGTextEntry * enPLLStatus;
@ -61,19 +61,19 @@ class BoardSetting{
TGNumberEntry * numRunStartStopDelay; TGNumberEntry * numRunStartStopDelay;
/// ACQ Status /// ACQ Status
static TGTextEntry * txtACQStatus; TGTextEntry * txtACQStatus;
static TGTextEntry * txtACQEventReady; TGTextEntry * txtACQEventReady;
static TGTextEntry * txtACQEventFull; TGTextEntry * txtACQEventFull;
static TGTextEntry * txtACQClockSource; TGTextEntry * txtACQClockSource;
static TGTextEntry * txtACQPLLLock; TGTextEntry * txtACQPLLLock;
static TGTextEntry * txtACQChDown; TGTextEntry * txtACQChDown;
static TGTextEntry * txtACQSIN; TGTextEntry * txtACQSIN;
static TGTextEntry * txtACQTRIGIN; TGTextEntry * txtACQTRIGIN;
static TGTextEntry * txtACQBoardReady; TGTextEntry * txtACQBoardReady;
static TGTextEntry * txtACQTemp0; TGTextEntry * txtACQTemp0;
static TGTextEntry * txtACQTemp1; TGTextEntry * txtACQTemp1;
static TGTextEntry * txtACQTemp2; TGTextEntry * txtACQTemp2;
static TGTextEntry * txtACQTemp3; TGTextEntry * txtACQTemp3;
/// Trigger control /// Trigger control
TGCheckButton * cbGbTRGMskCh[8]; TGCheckButton * cbGbTRGMskCh[8];
@ -118,13 +118,12 @@ class BoardSetting{
TGCheckButton * bEnableExtendedBlockTransfer; TGCheckButton * bEnableExtendedBlockTransfer;
/// Redaout Status /// Redaout Status
static TGTextEntry * txtEventReady; TGTextEntry * txtEventReady;
static TGTextEntry * txtBusError; TGTextEntry * txtBusError;
static TGTextEntry * txtVMEFIFO; TGTextEntry * txtVMEFIFO;
bool isOpened;
TThread * readStatusThread;
static bool isOpened;
static void * ReadStatus(void * ptr); /// thread.
public: public:
BoardSetting(const TGWindow *p, UInt_t w, UInt_t h, Digitizer ** digi, int nBoard); BoardSetting(const TGWindow *p, UInt_t w, UInt_t h, Digitizer ** digi, int nBoard);
@ -134,12 +133,14 @@ class BoardSetting{
void CloseWindow() { delete this;} void CloseWindow() { delete this;}
void ChangeBoard(); void ChangeBoard();
void ReadStatus();
///=== Button ///=== Button
void ResetSettingToDefault(); void ResetSettingToDefault();
void ClearBuffer(); void ClearBuffer();
void OpenChannelSetting(); void OpenChannelSetting();
///=== Board Configure ///=== Board Configure
void SetBoardConfiguration(); void SetBoardConfiguration();

View File

@ -5,18 +5,22 @@
int main(int argc, char* argv[]){ int main(int argc, char* argv[]){
/**************/ /**************/
const int nBoard = 1;
const int nBoard = 3;
Digitizer **dig = new Digitizer *[nBoard]; Digitizer **dig = new Digitizer *[nBoard];
for( int i = 0 ; i < nBoard; i++){ for( int i = 0 ; i < nBoard; i++){
int board = i % 3; int board = i % 3;
int port = i/3; int port = i/3;
dig[i] = new DigitizerPHA(board, port, true); dig[i] = new Digitizer(board, port, false, true);
dig[i]->CreateAndSaveSettingBinary("setting_" + to_string(dig[i]->GetSerialNumber()) + ".bin"); dig[i]->CreateAndSaveSettingBinary("setting_" + to_string(dig[i]->GetSerialNumber()) + ".bin");
//dig[i].OpenSettingBinary("setting_" + to_string(dig[i].GetSerialNumber()) + ".bin"); //dig[i].OpenSettingBinary("setting_" + to_string(dig[i].GetSerialNumber()) + ".bin");
} }
/*
DigitizerPHA * pha = dynamic_cast<DigitizerPHA*> (dig[0]); DigitizerPHA * pha = dynamic_cast<DigitizerPHA*> (dig[0]);
pha->ProgramBoard(); pha->ProgramBoard();
pha->PrintBoardConfiguration(); pha->PrintBoardConfiguration();