add more board setting readout, not tested

This commit is contained in:
carina@hades 2022-09-19 12:46:27 -04:00
parent db7814b193
commit bd5cd4e1f5
8 changed files with 239 additions and 81 deletions

View File

@ -95,23 +95,12 @@ int Digitizer::OpenDigitizer(int boardID, int portID, bool program, bool verbose
ADCbits = BoardInfo.ADC_NBits; ADCbits = BoardInfo.ADC_NBits;
ADCFullSize = (unsigned int)( pow(2, ADCbits) -1 ); ADCFullSize = (unsigned int)( pow(2, ADCbits) -1 );
if( verbose) { if( verbose) PrintBoard();
printf("Connected to Model %s with handle %d using %s\n", BoardInfo.ModelName, handle, LinkType == CAEN_DGTZ_USB ? "USB" : "Optical Link");
printf("Sampling rate : %.0f MHz = %.1f ns \n", 1000/ch2ns, ch2ns);
printf("Number of Channels : %d = 0x%X\n", NChannel, channelMask);
printf("SerialNumber :\e[1m\e[33m %d\e[0m\n", BoardInfo.SerialNumber);
printf("ADC bit is \e[33m%d\e[0m, %d = 0x%x\n", ADCbits, ADCFullSize, ADCFullSize);
printf("ROC FPGA Release is %s\n", BoardInfo.ROC_FirmwareRel);
printf("AMC FPGA Release is %s\n", BoardInfo.AMC_FirmwareRel);
}
int DPPType;
sscanf(BoardInfo.AMC_FirmwareRel, "%d", &DPPType); sscanf(BoardInfo.AMC_FirmwareRel, "%d", &DPPType);
if (DPPType < 128) { if (DPPType < 128 && verbose) printf("This digitizer does not have DPP-PHA firmware\n");
if( verbose) printf("This digitizer does not have DPP-PHA firmware\n");
}
data->DPPType = DPPType;
//SetBoardID(BoardInfo.SerialNumber); //SetBoardID(BoardInfo.SerialNumber);
} }
} }
@ -538,6 +527,24 @@ int Digitizer::GetChTemperature(int ch){
return temp[0]; return temp[0];
} }
uint32_t Digitizer::PrintRegister(uint32_t address, std::string msg){
if( !isConnected ) return 0 ;
printf("\e[33m----------------------------------------------------\n");
printf("------------ %s = 0x%x \n", msg.c_str(), address);
printf("----------------------------------------------------\e[0m\n");
uint32_t * value = new uint32_t[1];
CAEN_DGTZ_ReadRegister(handle, (uint32_t) Register::BoardConfiguration, value);
printf(" %*s 32 28 24 20 16 12 8 4 0\n", msg.length(), "");
printf(" %*s | | | | | | | | |\n", msg.length(), "");
printf(" %*s", msg.length(), "");
cout << " : 0b" << bitset<32>(value[0]) << endl;
printf(" %*s : 0x%x\n", msg.length(), msg.c_str(), value[0]);
return value[0];
}
void Digitizer::PrintACQStatue(){ void Digitizer::PrintACQStatue(){
if( !isConnected ) return; if( !isConnected ) return;
unsigned int status = ReadRegister(Register::DPP::AcquisitionStatus); unsigned int status = ReadRegister(Register::DPP::AcquisitionStatus);

View File

@ -90,6 +90,8 @@ class Digitizer{
unsigned int ReadBits(uint32_t address, unsigned int bitLength, unsigned int bitSmallestPos, int ch = -1 ); unsigned int ReadBits(uint32_t address, unsigned int bitLength, unsigned int bitSmallestPos, int ch = -1 );
unsigned int GetDPPAlgorithmControl(int ch = -1) {return ReadRegister(Register::DPP::DPPAlgorithmControl, ch);} unsigned int GetDPPAlgorithmControl(int ch = -1) {return ReadRegister(Register::DPP::DPPAlgorithmControl, ch);}
uint32_t PrintRegister(uint32_t address, std::string msg);
void PrintBoard(); void PrintBoard();
void PrintACQStatue(); void PrintACQStatue();

View File

@ -107,6 +107,15 @@ void DigitizerPHA::SetSetting(Setting::PHA settingName, float value, int ch){
case Setting::PHA::PLLClockSource_bool: input = value; SetBits(Register::DPP::AcquisitionControl, input, 1, 6); break; case Setting::PHA::PLLClockSource_bool: input = value; SetBits(Register::DPP::AcquisitionControl, input, 1, 6); break;
case Setting::PHA::VetoInForTRGOUT_bool: input = value; SetBits(Register::DPP::AcquisitionControl, input, 1, 12); break; case Setting::PHA::VetoInForTRGOUT_bool: input = value; SetBits(Register::DPP::AcquisitionControl, input, 1, 12); break;
/// Trigger Validation Mask
case Setting::PHA::TriggerValidationMask_8bit: input = value; SetBits(Register::DPP::TriggerValidationMask, input, 8, 0); break;
case Setting::PHA::TriggerValidationOperation_2bit: input = value; SetBits(Register::DPP::TriggerValidationMask, input, 2, 8); break;
case Setting::PHA::TriggerValidationMajority_3bit: input = value; SetBits(Register::DPP::TriggerValidationMask, input, 3, 10); break;
case Setting::PHA::ExternalTrigger_bool: input = value; SetBits(Register::DPP::TriggerValidationMask, input, 1, 30); break;
case Setting::PHA::SoftwareTrigger_bool: input = value; SetBits(Register::DPP::TriggerValidationMask, input, 1, 31); break;
case Setting::PHA::RunStartStopDelay_8bit: input = value; WriteRegister(Register::DPP::RunStartStopDelay, input); break;
/// Registers /// Registers
case Setting::PHA::RecordLength_G_ns: input = value / 8 / ch2ns; WriteRegister(Register::DPP::RecordLength_G, input, ch) ; break; case Setting::PHA::RecordLength_G_ns: input = value / 8 / ch2ns; WriteRegister(Register::DPP::RecordLength_G, input, ch) ; break;
case Setting::PHA::PreTriggerLength_ns: input = value / 4 / ch2ns; WriteRegister(Register::DPP::PreTrigger, input, ch) ; break; case Setting::PHA::PreTriggerLength_ns: input = value / 4 / ch2ns; WriteRegister(Register::DPP::PreTrigger, input, ch) ; break;
@ -148,6 +157,9 @@ void DigitizerPHA::SetSetting(Setting::PHA settingName, float value, int ch){
case Setting::PHA::RiseTimeValidationWindow_ns: input = value / ch2ns; WriteRegister(Register::DPP::PHA::RiseTimeValidationWindow, input, ch); break; case Setting::PHA::RiseTimeValidationWindow_ns: input = value / ch2ns; WriteRegister(Register::DPP::PHA::RiseTimeValidationWindow, input, ch); break;
/// Others
//case Setting::PHA::FanSpeedControl_bool: input = value; WriteRegister(Register::DPP::PHA::FanSpeedControl, input); break;
} }
ErrorMsg("PHA-" + std::to_string(settingName) ); ErrorMsg("PHA-" + std::to_string(settingName) );
@ -204,6 +216,15 @@ double DigitizerPHA::GetSetting(Setting::PHA settingName, int ch){
case Setting::PHA::PLLClockSource_bool: temp = ReadBits(Register::DPP::AcquisitionControl, 1, 6); value = temp; break; case Setting::PHA::PLLClockSource_bool: temp = ReadBits(Register::DPP::AcquisitionControl, 1, 6); value = temp; break;
case Setting::PHA::VetoInForTRGOUT_bool: temp = ReadBits(Register::DPP::AcquisitionControl, 1, 12); value = temp; break; case Setting::PHA::VetoInForTRGOUT_bool: temp = ReadBits(Register::DPP::AcquisitionControl, 1, 12); value = temp; break;
/// Trigger Validation Mask
case Setting::PHA::TriggerValidationMask_8bit: temp = ReadBits(Register::DPP::TriggerValidationMask, 8, 0); value = temp; break;
case Setting::PHA::TriggerValidationOperation_2bit: temp = ReadBits(Register::DPP::TriggerValidationMask, 2, 8); value = temp; break;
case Setting::PHA::TriggerValidationMajority_3bit: temp = ReadBits(Register::DPP::TriggerValidationMask, 3, 10); value = temp; break;
case Setting::PHA::ExternalTrigger_bool: temp = ReadBits(Register::DPP::TriggerValidationMask, 1, 30); value = temp; break;
case Setting::PHA::SoftwareTrigger_bool: temp = ReadBits(Register::DPP::TriggerValidationMask, 1, 31); value = temp; break;
case Setting::PHA::RunStartStopDelay_8bit: temp = ReadRegister(Register::DPP::RunStartStopDelay); value = temp & 0xFF; break;
/// Registers /// Registers
case Setting::PHA::RecordLength_G_ns: temp = ReadRegister(Register::DPP::RecordLength_G , ch); value = temp * 8 * ch2ns;break; case Setting::PHA::RecordLength_G_ns: temp = ReadRegister(Register::DPP::RecordLength_G , ch); value = temp * 8 * ch2ns;break;
case Setting::PHA::PreTriggerLength_ns: temp = ReadRegister(Register::DPP::PreTrigger , ch); value = temp * 4 * ch2ns;break; case Setting::PHA::PreTriggerLength_ns: temp = ReadRegister(Register::DPP::PreTrigger , ch); value = temp * 4 * ch2ns;break;
@ -243,6 +264,9 @@ double DigitizerPHA::GetSetting(Setting::PHA settingName, int ch){
case Setting::PHA::EnergyFineGain_16bit: temp = ReadRegister(Register::DPP::PHA::FineGain , ch); value = temp; break; case Setting::PHA::EnergyFineGain_16bit: temp = ReadRegister(Register::DPP::PHA::FineGain , ch); value = temp; break;
case Setting::PHA::RiseTimeValidationWindow_ns: temp = ReadRegister(Register::DPP::PHA::RiseTimeValidationWindow , ch); value = temp * ch2ns; break; case Setting::PHA::RiseTimeValidationWindow_ns: temp = ReadRegister(Register::DPP::PHA::RiseTimeValidationWindow , ch); value = temp * ch2ns; break;
/// Others
case Setting::PHA::FanSpeedControl_bool: temp = ReadRegister(Register::DPP::FanSpeedControl); value = temp & 0x8; break;
} }
return value; return value;
@ -274,44 +298,35 @@ void DigitizerPHA::AutoSetTrapezoidRescalingAndFindGate(double gain, int ch){
ErrorMsg("PHA-AutoSetTrapezoidRescalingAndFindGate"); ErrorMsg("PHA-AutoSetTrapezoidRescalingAndFindGate");
} }
void DigitizerPHA::PrintBoardConfiguration(){ void DigitizerPHA::PrintBoardConfiguration(){
if( !isConnected ) return; if( !isConnected ) return;
printf("\e[33m================================================\n"); uint32_t value = PrintRegister(Register::DPP::BoardConfiguration, "Board Configuration");
printf("================ Setting for Board \n");
printf("================================================\e[0m\n");
uint32_t * value = new uint32_t[1];
CAEN_DGTZ_ReadRegister(handle, (uint32_t) Register::BoardConfiguration, value);
printf(" 32 28 24 20 16 12 8 4 0\n");
printf(" | | | | | | | | |\n");
cout <<" Board Configuration : 0b" << bitset<32>(value[0]) << endl;
printf(" : 0x%x\n", value[0]);
printf(" Bit[ 0] = %d = Auto Data Flush \n", value[0] & 0x1); printf(" Bit[ 0] = %d = Auto Data Flush \n", value & 0x1);
printf(" Bit[ 1] = %d = Decimated waveform \n", (value[0] >> 1) & 0x1 ); printf(" Bit[ 1] = %d = Decimated waveform \n", (value >> 1) & 0x1 );
printf(" Bit[ 2] = %d = Trigger propagation \n", (value[0] >> 2) & 0x1 ); printf(" Bit[ 2] = %d = Trigger propagation \n", (value >> 2) & 0x1 );
printf(" Bit[ 3:10] = %d = must be 001 0001 0 = 22 \n", (value[0] >> 3) & 0xFF ); printf(" Bit[ 3:10] = %d = must be 001 0001 0 = 22 \n", (value >> 3) & 0xFF );
printf(" Bit[ 11] = %d = Dual Trace \n", (value[0] >> 11) & 0x1 ); printf(" Bit[ 11] = %d = Dual Trace \n", (value >> 11) & 0x1 );
printf(" Bit[12:13] = %d = Analog probe 1 : ",((value[0] >> 12) & 0x3 )); printf(" Bit[12:13] = %d = Analog probe 1 : ",((value >> 12) & 0x3 ));
switch ( ((value[0] >> 12) & 0x3 ) ){ switch ( ((value >> 12) & 0x3 ) ){
case 0 : printf("input\n"); break; case 0 : printf("input\n"); break;
case 1 : printf("RC-CR (1st derivative)\n");break; case 1 : printf("RC-CR (1st derivative)\n");break;
case 2 : printf("RC-CR2 (2nd derivative)\n"); break; case 2 : printf("RC-CR2 (2nd derivative)\n"); break;
case 3 : printf("Trapezoid \n"); break; case 3 : printf("Trapezoid \n"); break;
} }
printf(" Bit[14:15] = %d = Analog probe 2 : ", ((value[0] >> 14) & 0x3 )); printf(" Bit[14:15] = %d = Analog probe 2 : ", ((value >> 14) & 0x3 ));
switch ( ((value[0] >> 14) & 0x3 ) ){ switch ( ((value >> 14) & 0x3 ) ){
case 0 : printf("input\n"); break; case 0 : printf("input\n"); break;
case 1 : printf("Threshold\n"); break; case 1 : printf("Threshold\n"); break;
case 2 : printf("Trapezoid - Baseline\n"); break; case 2 : printf("Trapezoid - Baseline\n"); break;
case 3 : printf("baseline.\n"); break; case 3 : printf("baseline.\n"); break;
} }
printf(" Bit[ 16] = %d = WaveForm Recording \n",((value[0] >> 16) & 0x1 ) ); printf(" Bit[ 16] = %d = WaveForm Recording \n",((value >> 16) & 0x1 ) );
printf(" Bit[ 17] = %d = Extras 2 word enable \n", ((value[0] >> 17) & 0x1 )); printf(" Bit[ 17] = %d = Extras 2 word enable \n", ((value >> 17) & 0x1 ));
printf(" Bit[ 18] = %d = Record Time Stamp \n", ((value[0] >> 18) & 0x1 )); printf(" Bit[ 18] = %d = Record Time Stamp \n", ((value >> 18) & 0x1 ));
printf(" Bit[ 19] = %d = Record Energy \n", ((value[0] >> 19) & 0x1 )); printf(" Bit[ 19] = %d = Record Energy \n", ((value >> 19) & 0x1 ));
printf(" Bit[20:23] = %d = Digital Virtual probe 1 : ", ((value[0] >> 20) & 0x7 )); printf(" Bit[20:23] = %d = Digital Virtual probe 1 : ", ((value >> 20) & 0x7 ));
switch (((value[0] >> 20) & 0xF )) { switch (((value >> 20) & 0xF )) {
case 0: printf("Peaking, shows where the energy is calculated; \n"); break; case 0: printf("Peaking, shows where the energy is calculated; \n"); break;
case 1: printf("”Armed”, digital input showing where the RCCR2 crosses the Threshold\n"); break; case 1: printf("”Armed”, digital input showing where the RCCR2 crosses the Threshold\n"); break;
case 2: printf("”Peak Run”, starts with the trigger and last for the whole event\n");break; case 2: printf("”Peak Run”, starts with the trigger and last for the whole event\n");break;
@ -326,14 +341,89 @@ void DigitizerPHA::PrintBoardConfiguration(){
case 11: printf("”Ext TRG”, shows the external trigger, when available\n");break; case 11: printf("”Ext TRG”, shows the external trigger, when available\n");break;
case 12: printf("”Busy”, shows when the memory board is full.\n");break; case 12: printf("”Busy”, shows when the memory board is full.\n");break;
} }
printf(" Bit[26:28] = %d = Digital Virtual probe 2 : ", ((value[0] >> 26) & 0x7 )); printf(" Bit[26:28] = %d = Digital Virtual probe 2 : ", ((value >> 26) & 0x7 ));
if( ((value[0] >> 26) & 0x7 ) == 0 ) { if( ((value >> 26) & 0x7 ) == 0 ) {
printf("Trigger\n"); printf("Trigger\n");
}else{ }else{
printf("Reserved\n"); printf("Reserved\n");
} }
} }
void DigitizerPHA::PrintACQControl(){
if( !isConnected ) return;
uint32_t value = PrintRegister(Register::AcquisitionControl, "ACQ COntrol");
///==== Start Stop Mode
printf(" Bit[1:0] = %d = Start/Stop Mode (", value & 0x3);
switch (value & 0x3){
case 0 : printf("Software controlled)\n"); break;
case 1 : printf("S-IN controlled)\n"); break;
case 2 : printf("1st trigger controlled)\n"); break;
case 3 : printf("LVDS controlled)\n"); break;
}
///==== ACQ Start/Arm
printf(" Bit[ 2] = %d = Start/Arm (%s)", value & 0x4, (value & 0x4) == 0 ? "STOP" : "RUN" );
printf(" Bit[ 6] = %d = PLL Ref. Clock (%s)", value & 0x40, (value & 0x40) == 0 ? "Internal" : "External" );
printf(" Bit[ 8] = %d = LVDS I/O Busy Enable (%s)", value & 0x100, (value & 0x100) == 0 ? "Disabled" : "Enabled" );
printf(" Bit[ 8] = %d = LVDS I/O Veto Enable (%s)", value & 0x200, (value & 0x200) == 0 ? "Disabled" : "Enabled" );
printf(" Bit[ 12] = %d = Veto-in as veto for TRG-OUT (%s)", value & 0x1000, (value & 0x1000) == 0 ? "not used" : "used" );
}
void DigitizerPHA::PrintGlobalTriggerMask(){
if( !isConnected ) return;
uint32_t value = PrintRegister(Register::DPP::GlobalTriggerMask, "Global Trigger Mask");
printf(" Bit[ 7:0] = 0x%x = Enabled Paired Channel", value & 0xff );
printf(" Bit[23:20] = %.0f ns = Majority Coincidence Window", (( value >> 20 ) & 0xf) * 4 * ch2ns );
printf(" Bit[26:24] = %d = Majority Level", (( value >> 24 ) & 0x7) );
printf(" Bit[ 29] = %d = LVDS Trigger(%s)", (( value >> 29 ) & 0x1), (( value >> 29 ) & 0x1) == 0 ? "disabled" : "enabled" );
printf(" Bit[ 30] = %d = External Trigger(%s)", (( value >> 30 ) & 0x1), (( value >> 30 ) & 0x1) == 0 ? "disabled" : "enabled" );
printf(" Bit[ 31] = %d = Software Trigger(%s)", (( value >> 31 ) & 0x1), (( value >> 31 ) & 0x1) == 0 ? "disabled" : "enabled" );
}
void DigitizerPHA::PrintFrontPanelTRIGOUTEnableMask(){
if( !isConnected ) return;
uint32_t value = PrintRegister(Register::DPP::FrontPanelTRGOUTEnableMask, "Front Panel TRG-OUT Mask");
}
void DigitizerPHA::PrintFrontPanelIOControl(){
if( !isConnected ) return;
uint32_t value = PrintRegister(Register::DPP::FrontPanelIOControl, "Front Panel I/O Control");
}
void DigitizerPHA::PrintTriggerValidationMask(){
if( !isConnected ) return;
uint32_t value = PrintRegister(Register::DPP::TriggerValidationMask, "Trigger Validation Mask");
}
void DigitizerPHA::PrintBoardInfoRegister(){
if( !isConnected ) return;
uint32_t value = PrintRegister(Register::DPP::BoardInfo, "Board Info");
}
void DigitizerPHA::PrintBoardFailureState(){
if( !isConnected ) return;
uint32_t value = PrintRegister(Register::DPP::BoardFailureStatus, "Board Failure State");
}
void DigitizerPHA::PrintReadoutControl(){
if( !isConnected ) return;
uint32_t value = PrintRegister(Register::DPP::ReadoutControl, "Readout Control");
}
void DigitizerPHA::PrintReadoutStatu(){
if( !isConnected ) return;
uint32_t value = PrintRegister(Register::DPP::ReadoutStatus, "Readout Status");
}
void DigitizerPHA::PrintChannelSettingFromDigitizer(int ch){ void DigitizerPHA::PrintChannelSettingFromDigitizer(int ch){
if( !isConnected ) return; if( !isConnected ) return;
printf("\e[33m================================================\n"); printf("\e[33m================================================\n");

View File

@ -77,10 +77,17 @@ class DigitizerPHA : public Digitizer {
unsigned int GetTriggerThreshold(unsigned int ch) {return ReadRegister(Register::DPP::PHA::TriggerThreshold, ch);} unsigned int GetTriggerThreshold(unsigned int ch) {return ReadRegister(Register::DPP::PHA::TriggerThreshold, ch);}
void PrintBoardConfiguration(); void PrintBoardConfiguration();
void PrintChannelSettingFromDigitizer(int ch); void PrintACQControl();
void PrintGlobalTriggerMask();
void PrintFrontPanelTRIGOUTEnableMask();
void PrintFrontPanelIOControl();
void PrintTriggerValidationMask();
void PrintBoardInfoRegister();
void PrintBoardFailureState();
void PrintReadoutControl();
void PrintReadoutStatu();
void PrintChannelSettingFromDigitizer(int ch); ///inlcluded DPP Algorithm Control 1, 2
}; };

View File

@ -69,6 +69,10 @@ MainWindow::MainWindow(const TGWindow *p,UInt_t w,UInt_t h) {
fMenuDigitizers->Connect("Activated(Int_t)", "MainWindow", this, "HandleMenu(Int_t)"); fMenuDigitizers->Connect("Activated(Int_t)", "MainWindow", this, "HandleMenu(Int_t)");
fMenuBar->AddPopup("&Digitizers", fMenuDigitizers, new TGLayoutHints(kLHintsTop | kLHintsLeft, 0, 4, 0, 0)); fMenuBar->AddPopup("&Digitizers", fMenuDigitizers, new TGLayoutHints(kLHintsTop | kLHintsLeft, 0, 4, 0, 0));
fMenuDigitizers->DisableEntry( M_TRIGGER_SUMMARY);
fMenuDigitizers->DisableEntry( M_BOARD_SETTINGS);
fMenuDigitizers->DisableEntry( M_CH_SETTING);
fMenuUtility = new TGPopupMenu(gClient->GetRoot()); fMenuUtility = new TGPopupMenu(gClient->GetRoot());
fMenuUtility->AddEntry("Plot Channels Rate", M_SHOW_CHANNELS_RATE); fMenuUtility->AddEntry("Plot Channels Rate", M_SHOW_CHANNELS_RATE);
fMenuDigitizers->AddSeparator(); fMenuDigitizers->AddSeparator();
@ -130,9 +134,9 @@ MainWindow::MainWindow(const TGWindow *p,UInt_t w,UInt_t h) {
LogMsg("Ready to run."); LogMsg("Ready to run.");
HandleMenu(M_DIGITIZER_SCAN); //HandleMenu(M_DIGITIZER_SCAN);
//
HandleMenu(M_BOARD_SETTINGS); //HandleMenu(M_BOARD_SETTINGS);
//HandleMenu(M_CH_SETTING); //HandleMenu(M_CH_SETTING);
} }
@ -170,7 +174,7 @@ void MainWindow::HandleMenu(Int_t id){
///========================= Scan digitizers ///========================= Scan digitizers
case M_DIGITIZER_SCAN:{ case M_DIGITIZER_SCAN:{
printf("============= detect digitizers \n"); LogMsg("============= detect digitizers \n");
DetectDigitizer(); DetectDigitizer();
printf("============= Connect %d digitizers...\n", nDigi); printf("============= Connect %d digitizers...\n", nDigi);
@ -197,6 +201,11 @@ void MainWindow::HandleMenu(Int_t id){
printf("Open as Ordinary Digitizer\n"); printf("Open as Ordinary Digitizer\n");
} }
} }
//fMenuDigitizers->EnableEntry( M_TRIGGER_SUMMARY);
fMenuDigitizers->EnableEntry( M_BOARD_SETTINGS);
fMenuDigitizers->EnableEntry( M_CH_SETTING);
} }
}break; }break;
@ -215,27 +224,16 @@ void MainWindow::HandleMenu(Int_t id){
}break; }break;
case M_CH_SETTING:{ ///========================= Channel setting
if( channelSetting == NULL ) { case M_CH_SETTING:
channelSetting = new ChannelSetting(gClient->GetRoot(), 600, 600, digi, nDigi); channelSetting = new ChannelSetting(gClient->GetRoot(), 600, 600, digi, nDigi);
}else{ break;
//if( !channelSetting->isOpened ) {
channelSetting = new ChannelSetting(gClient->GetRoot(), 600, 600, digi, nDigi);
//}
}
}break;
///========================= 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);
}else{ break;
//if( !boardSetting->isOpened ) {
boardSetting = new BoardSetting(gClient->GetRoot(), 600, 600, digi, nDigi);
//}
}
}break;
///========================= Program setting ///========================= Program setting
case M_PROGRAM_SETTINGS:{ case M_PROGRAM_SETTINGS:{
LogMsg("[Program settings] Not impelmented"); LogMsg("[Program settings] Not impelmented");
@ -283,12 +281,12 @@ void MainWindow::DetectDigitizer(){
} }
} }
printf("========== found %d digitizer \n", nDigi); LogMsg(Form("========== found %d digitizer \n", nDigi));
for( int i = 0 ; i < nDigi ; i++){ for( int i = 0 ; i < nDigi ; i++){
printf("port: %d, board: %d, DPP Type : %d \n", portID[i], boardID[i], DPPType[i]); LogMsg(Form("port: %d, board: %d, DPP Type : %d \n", portID[i], boardID[i], DPPType[i]));
} }
printf("Number of PHA : %d \n", nPHA); LogMsg(Form("Number of PHA : %d \n", nPHA));
printf("Number of PSD : %d \n", nPSD); LogMsg(Form("Number of PSD : %d \n", nPSD));
} }
@ -328,9 +326,13 @@ void MainWindow::LogMsg(TString msg){
int minute = ltm->tm_min; int minute = ltm->tm_min;
int secound = ltm->tm_sec; int secound = ltm->tm_sec;
teLog->AddLine(Form("[%4d-%02d-%02d %02d:%02d:%02d] ", year, month, day, hour, minute, secound) + msg); TString outMsg = Form("[%4d-%02d-%02d %02d:%02d:%02d] ", year, month, day, hour, minute, secound) + msg;
teLog->AddLine(outMsg);
printf("%s", outMsg.Data());
teLog->LineDown(); teLog->LineDown();
teLog->ShowBottom(); teLog->ShowBottom();
} }
//############################################ //############################################

View File

@ -232,6 +232,15 @@ namespace Setting{
PLLClockSource_bool, PLLClockSource_bool,
VetoInForTRGOUT_bool, VetoInForTRGOUT_bool,
/// Trigger Validation Mask
TriggerValidationMask_8bit,
TriggerValidationOperation_2bit,
TriggerValidationMajority_3bit,
ExternalTrigger_bool,
SoftwareTrigger_bool,
RunStartStopDelay_8bit,
/// Registers /// Registers
RecordLength_G_ns, RecordLength_G_ns,
PreTriggerLength_ns, PreTriggerLength_ns,
@ -254,7 +263,10 @@ namespace Setting{
PeakingTime_ns, PeakingTime_ns,
PeakingHoldOff_ns, PeakingHoldOff_ns,
EnergyFineGain_16bit, EnergyFineGain_16bit,
RiseTimeValidationWindow_ns RiseTimeValidationWindow_ns,
/// Others
FanSpeedControl_bool
}; };

View File

@ -180,7 +180,7 @@ BoardSetting::BoardSetting(const TGWindow *p, UInt_t w, UInt_t h, Digitizer ** d
cbAggOrg->Select(0); cbAggOrg->Select(0);
cbAggOrg->Connect("Changed()", "BoardSetting", this, "SetAggregateOrganization()"); cbAggOrg->Connect("Changed()", "BoardSetting", this, "SetAggregateOrganization()");
TGLabel * lbAggBLT = new TGLabel(hframeBdCfg3, "Aggregate pre Readout"); hframeBdCfg3->AddFrame(lbAggBLT, layoutHints); TGLabel * lbAggBLT = new TGLabel(hframeBdCfg3, "MAx. Aggregate pre Readout"); hframeBdCfg3->AddFrame(lbAggBLT, layoutHints);
numAggBLT = new TGNumberEntry(hframeBdCfg3, 0, 0, 0, TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative); hframeBdCfg3->AddFrame(numAggBLT, layoutHints); numAggBLT = new TGNumberEntry(hframeBdCfg3, 0, 0, 0, TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative); hframeBdCfg3->AddFrame(numAggBLT, layoutHints);
numAggBLT->SetWidth(60); numAggBLT->SetWidth(60);
numAggBLT->SetLimits(TGNumberFormat::kNELLimitMinMax, 0, 0x3FF); numAggBLT->SetLimits(TGNumberFormat::kNELLimitMinMax, 0, 0x3FF);
@ -225,14 +225,14 @@ BoardSetting::BoardSetting(const TGWindow *p, UInt_t w, UInt_t h, Digitizer ** d
TGHorizontalFrame * hfAcqCtrl2 = new TGHorizontalFrame(vAcqCtrl); vAcqCtrl->AddFrame(hfAcqCtrl2, layoutHints); TGHorizontalFrame * hfAcqCtrl2 = new TGHorizontalFrame(vAcqCtrl); vAcqCtrl->AddFrame(hfAcqCtrl2, layoutHints);
TGCheckButton * bSWTrigger = new TGCheckButton(hfAcqCtrl2, "Software Trigger", 1); hfAcqCtrl2->AddFrame(bSWTrigger, layoutHints); bSWTrigger = new TGTextButton(hfAcqCtrl2, "Send Software Trigger"); hfAcqCtrl2->AddFrame(bSWTrigger, layoutHints);
bSWTrigger->SetState(kButtonUp); //bSWTrigger->Connect("Clicked()", "BoardSetting", this, "SetAutoDataFlush()");
TGCheckButton * bSWClockSync = new TGCheckButton(hfAcqCtrl2, "Software Clock Sync", 1); hfAcqCtrl2->AddFrame(bSWClockSync, layoutHints); bSWClockSync = new TGTextButton(hfAcqCtrl2, "Send Software Clock Sync"); hfAcqCtrl2->AddFrame(bSWClockSync, layoutHints);
bSWClockSync->SetState(kButtonUp); //bSWClockSync->Connect("Clicked()", "BoardSetting", this, "SetAutoDataFlush()");
TGLabel * lbRunStartStopDelay = new TGLabel(hfAcqCtrl2, "Run/Start/Stop Delay [ns]"); hfAcqCtrl2->AddFrame(lbRunStartStopDelay, layoutHints); TGLabel * lbRunStartStopDelay = new TGLabel(hfAcqCtrl2, "Run/Start/Stop Delay [ns]"); hfAcqCtrl2->AddFrame(lbRunStartStopDelay, layoutHints);
TGNumberEntry * numRunStartStopDelay = new TGNumberEntry(hfAcqCtrl2, 0, 0, 0, TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative); hfAcqCtrl2->AddFrame(numRunStartStopDelay, layoutHints); numRunStartStopDelay = new TGNumberEntry(hfAcqCtrl2, 0, 0, 0, TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative); hfAcqCtrl2->AddFrame(numRunStartStopDelay, layoutHints);
numRunStartStopDelay->SetWidth(60); numRunStartStopDelay->SetWidth(60);
numRunStartStopDelay->SetLimits(TGNumberFormat::kNELLimitMinMax, 0, 0x0FF); numRunStartStopDelay->SetLimits(TGNumberFormat::kNELLimitMinMax, 0, 0x0FF);
@ -658,9 +658,42 @@ void BoardSetting::ChangeBoard(){
bExtrac2->SetState( pha->GetSetting(Setting::PHA::EnableExtra2Word_board_bool) == 1.0? kButtonDown : kButtonUp); bExtrac2->SetState( pha->GetSetting(Setting::PHA::EnableExtra2Word_board_bool) == 1.0? kButtonDown : kButtonUp);
bDualTrace->SetState( pha->GetSetting(Setting::PHA::DualTrace_board_bool) == 1.0? kButtonDown : kButtonUp); bDualTrace->SetState( pha->GetSetting(Setting::PHA::DualTrace_board_bool) == 1.0? kButtonDown : kButtonUp);
cbAP1->Select( pha->GetSetting(Setting::PHA::AnalogProbe1_board_2bit) );
cbAP2->Select( pha->GetSetting(Setting::PHA::AnalogProbe2_board_2bit) );
cbDP->Select( pha->GetSetting(Setting::PHA::VirtualProbe_board_4bit) );
cbAggOrg->Select( pha->GetSetting(Setting::PHA::AggregateOrganization_board_3bit) );
numAggBLT->SetNumber( pha->GetSetting(Setting::PHA::MaxAggregatePreBlockTransfer_board_10bit) );
cbFanCtrl->Select( pha->GetSetting(Setting::PHA::FanSpeedControl_bool) );
pha->PrintACQControl();
cbAcqMode->Select( pha->GetSetting(Setting::PHA::StartStopMode_2bit));
bAcqArm->SetState( pha->GetSetting(Setting::PHA::StartStopACQ_bool) == 1.0 ? kButtonDown : kButtonUp);
cbPLLref->Select( pha->GetSetting(Setting::PHA::PLLClockSource_bool));
numRunStartStopDelay->SetNumber( pha->GetSetting(Setting::PHA::RunStartStopDelay_8bit));
/// Global Trigger Mask
pha = NULL; ///unlink the pointer
}else if( digi[boardID]->GetDPPType() == V1730_DPP_PSD_CODE ) {
}else{ ///========== disable all others
bAutoDataFlush->SetEditable(false);
} }
return; return;
} }

View File

@ -27,6 +27,7 @@ class BoardSetting{
int nDigi; int nDigi;
Digitizer ** digi; Digitizer ** digi;
DigitizerPHA * pha; DigitizerPHA * pha;
DigitizerPSD * psd;
/// board failure status /// board failure status
TGTextEntry * enPLLStatus; TGTextEntry * enPLLStatus;
@ -52,6 +53,10 @@ class BoardSetting{
TGCheckButton * bAcqArm; TGCheckButton * bAcqArm;
TGComboBox * cbPLLref; TGComboBox * cbPLLref;
TGTextButton * bSWTrigger;
TGTextButton * bSWClockSync;
TGNumberEntry * numRunStartStopDelay;
/// Trigger control /// Trigger control
TGCheckButton * cbGbTRGMskCh[8]; TGCheckButton * cbGbTRGMskCh[8];
TGCheckButton * cbTRGValMskCh[8]; TGCheckButton * cbTRGValMskCh[8];