tested boardSetting GUI, now need to read all setting from Digitizer

This commit is contained in:
carina@hades 2022-09-16 17:53:57 -04:00
parent 354efc39b8
commit db7814b193
12 changed files with 622 additions and 270 deletions

View File

@ -26,6 +26,7 @@ class Data{
uint32_t BufferSize; uint32_t BufferSize;
unsigned short NumEvents[MaxNChannels]; unsigned short NumEvents[MaxNChannels];
unsigned long TotNumEvents[MaxNChannels];
unsigned long long Timestamp[MaxNChannels][MaxNData]; unsigned long long Timestamp[MaxNChannels][MaxNData];
unsigned short Energy[MaxNChannels][MaxNData]; unsigned short Energy[MaxNChannels][MaxNData];
unsigned short Energy2[MaxNChannels][MaxNData]; /// in PSD, Energy = Qshort, Energy2 = Qlong unsigned short Energy2[MaxNChannels][MaxNData]; /// in PSD, Energy = Qshort, Energy2 = Qlong
@ -52,8 +53,9 @@ class Data{
void SaveBuffer(const char * fileName); void SaveBuffer(const char * fileName);
void DecodeBuffer(int verbose = 0); void DecodeBuffer(int verbose = 0);
void DecodeBuffer(char * buffer, int verbose = 0); void DecodeBuffer(char * buffer, int verbose = 0); // for outside data
void PrintStat();
protected: protected:
@ -78,6 +80,7 @@ class Data{
inline Data::Data(){ inline Data::Data(){
buffer = NULL; buffer = NULL;
for ( int i = 0; i < MaxNChannels; i++) TotNumEvents[i] = 0;
ClearData(); ClearData();
SaveWaveformToMemory = false; SaveWaveformToMemory = false;
nw = 0; nw = 0;
@ -104,7 +107,7 @@ inline void Data::AllocateMemory(){
inline void Data::FreeMemory(){ inline void Data::FreeMemory(){
printf("======= Free memory\n"); printf("======= Free memory\n");
if( buffer != NULL ) delete buffer; //if( buffer != NULL ) delete buffer;
} }
inline void Data::ClearData(){ inline void Data::ClearData(){
@ -148,6 +151,14 @@ inline void Data::SaveBuffer(const char * fileName){
fclose(haha); fclose(haha);
} }
inline void Data::PrintStat(){
for(int i = 0; i < MaxNChannels; i++){
printf("%2d | %6d | %6lu\n", i, NumEvents[i], TotNumEvents[i]);
}
}
inline void Data::DecodeBuffer(char * buffer, int verbose){ inline void Data::DecodeBuffer(char * buffer, int verbose){
this->buffer = buffer; this->buffer = buffer;
DecodeBuffer(verbose); DecodeBuffer(verbose);
@ -161,6 +172,10 @@ inline void Data::DecodeBuffer(int verbose){
return; return;
} }
if( nByte == 0 ) {
return;
}
nw = 0; nw = 0;
do{ do{
@ -180,7 +195,7 @@ inline void Data::DecodeBuffer(int verbose){
unsigned int AggCounter = ReadBuffer(nw, verbose); unsigned int AggCounter = ReadBuffer(nw, verbose);
if( verbose >= 2 ) printf("Agg Counter : %d \n", AggCounter); if( verbose >= 2 ) printf("Agg Counter : %d \n", AggCounter);
for( int chMask = 0; chMask < 8 ; chMask ++ ){ for( int chMask = 0; chMask < MaxNChannels/2 ; chMask ++ ){
if( ((ChannelMask >> chMask) & 0x1 ) == 0 ) continue; if( ((ChannelMask >> chMask) & 0x1 ) == 0 ) continue;
if( verbose >= 2 ) printf("---------------------- Dual Channel Block : %d, nw : %d\n", chMask *2, nw); if( verbose >= 2 ) printf("---------------------- Dual Channel Block : %d, nw : %d\n", chMask *2, nw);
@ -289,8 +304,6 @@ inline int Data::DecodePHADualChannelBlock(unsigned int ChannelMask, int verbose
int channel = ChannelMask*2 + channelTag; int channel = ChannelMask*2 + channelTag;
if( verbose >= 2 ) printf("ch : %d, timeStamp0 %u \n", channel, timeStamp0); if( verbose >= 2 ) printf("ch : %d, timeStamp0 %u \n", channel, timeStamp0);
NumEvents[channel] ++;
//TODO Skip //TODO Skip
///===== read waveform ///===== read waveform
if( SaveWaveformToMemory ) { if( SaveWaveformToMemory ) {
@ -346,7 +359,7 @@ inline int Data::DecodePHADualChannelBlock(unsigned int ChannelMask, int verbose
unsigned long long extTimeStamp = 0; unsigned long long extTimeStamp = 0;
if( extra2Option == 0 || extra2Option == 2 ) extTimeStamp = (extra2 >> 15); if( extra2Option == 0 || extra2Option == 2 ) extTimeStamp = (extra2 >> 15);
unsigned long long timeStamp = (extTimeStamp << 32) ; unsigned long long timeStamp = (extTimeStamp << 30) ;
timeStamp = timeStamp + timeStamp0; timeStamp = timeStamp + timeStamp0;
nw = nw +1 ; word = ReadBuffer(nw, verbose); nw = nw +1 ; word = ReadBuffer(nw, verbose);
@ -360,7 +373,7 @@ inline int Data::DecodePHADualChannelBlock(unsigned int ChannelMask, int verbose
printf("PileUp : %d , extra : 0x%03x, energy : %d \n", pileUp, extra, energy); printf("PileUp : %d , extra : 0x%03x, energy : %d \n", pileUp, extra, energy);
printf(" lost event : %d \n", ((extra >> 0) & 0x1) ); printf(" lost event : %d \n", ((extra >> 0) & 0x1) );
printf(" roll-over : %d \n", ((extra >> 1) & 0x1) ); printf(" roll-over : %d (fake event)\n", ((extra >> 1) & 0x1) );
printf(" fake-event : %d \n", ((extra >> 3) & 0x1) ); printf(" fake-event : %d \n", ((extra >> 3) & 0x1) );
printf(" input sat. : %d \n", ((extra >> 4) & 0x1) ); printf(" input sat. : %d \n", ((extra >> 4) & 0x1) );
printf(" lost trg : %d \n", ((extra >> 5) & 0x1) ); printf(" lost trg : %d \n", ((extra >> 5) & 0x1) );
@ -372,8 +385,13 @@ inline int Data::DecodePHADualChannelBlock(unsigned int ChannelMask, int verbose
} }
if( verbose >= 1 ) printf("%4d | ch : %2d, PileUp : %d , energy : %d, roll-Over: %d, timestamp : %llu, triggerAt : %d, nSample : %d\n", if( rollOver == 0 ) {
NumEvents[channel], channel, pileUp, energy, rollOver, timeStamp, triggerAtSample, nSample ); NumEvents[channel] ++;
TotNumEvents[channel] ++;
}
if( verbose >= 1 ) printf("%4d | ch : %2d, PileUp : %d , energy : %d, roll-Over: %d, timestamp : %llu, triggerAt : %d, nSample : %d, %f\n",
NumEvents[channel], channel, pileUp, energy, rollOver, timeStamp, triggerAtSample, nSample , timeStamp * 4. / 1e9);
Energy[channel][NumEvents[channel]] = energy; Energy[channel][NumEvents[channel]] = energy;
Timestamp[channel][NumEvents[channel]] = timeStamp; Timestamp[channel][NumEvents[channel]] = timeStamp;
@ -477,9 +495,6 @@ inline int Data::DecodePSDDualChannelBlock(unsigned int ChannelMask, int verbose
int channel = ChannelMask*2 + channelTag; int channel = ChannelMask*2 + channelTag;
if( verbose >= 2 ) printf("ch : %d, timeStamp %u \n", channel, timeStamp0); if( verbose >= 2 ) printf("ch : %d, timeStamp %u \n", channel, timeStamp0);
NumEvents[channel] ++;
///===== read waveform ///===== read waveform
if( SaveWaveformToMemory ) { if( SaveWaveformToMemory ) {
tempWaveform1.clear(); tempWaveform1.clear();
@ -534,7 +549,7 @@ inline int Data::DecodePSDDualChannelBlock(unsigned int ChannelMask, int verbose
unsigned long long extTimeStamp = 0; unsigned long long extTimeStamp = 0;
if( extraOption == 0 || extraOption == 2 ) extTimeStamp = (extra >> 15); if( extraOption == 0 || extraOption == 2 ) extTimeStamp = (extra >> 15);
unsigned long long timeStamp = (extTimeStamp << 32) ; unsigned long long timeStamp = (extTimeStamp << 30) ;
timeStamp = timeStamp + timeStamp0; timeStamp = timeStamp + timeStamp0;
nw = nw +1 ; word = ReadBuffer(nw, verbose); nw = nw +1 ; word = ReadBuffer(nw, verbose);
@ -542,6 +557,11 @@ inline int Data::DecodePSDDualChannelBlock(unsigned int ChannelMask, int verbose
unsigned int Qshort = (word & 0x7FFF); unsigned int Qshort = (word & 0x7FFF);
bool isEnergyCorrect = ((word >> 15) & 0x1); bool isEnergyCorrect = ((word >> 15) & 0x1);
if( isEnergyCorrect == 1 ) {
NumEvents[channel] ++;
TotNumEvents[channel] ++;
}
if( verbose >= 2 ) printf("extra : 0x%08x, Qshort : %d, Qlong : %d \n", extra, Qshort, Qlong); if( verbose >= 2 ) printf("extra : 0x%08x, Qshort : %d, Qlong : %d \n", extra, Qshort, Qlong);
if( verbose >= 1 ) printf("ch : %2d, Qshort : %d, Qlong : %d, timestamp : %llu\n", if( verbose >= 1 ) printf("ch : %2d, Qshort : %d, Qlong : %d, timestamp : %llu\n",

View File

@ -33,7 +33,7 @@ Digitizer::Digitizer(){
Digitizer::Digitizer(int boardID, int portID, bool verbose){ Digitizer::Digitizer(int boardID, int portID, bool verbose){
Digitizer(); Digitizer();
OpenDigitizer(boardID, portID, verbose); OpenDigitizer(boardID, portID, true, verbose);
} }
Digitizer::~Digitizer(){ Digitizer::~Digitizer(){
@ -47,7 +47,17 @@ void Digitizer::Reset(){
if( ret != 0 ) ErrorMsg("Reset"); if( ret != 0 ) ErrorMsg("Reset");
} }
int Digitizer::OpenDigitizer(int boardID, int portID, bool verbose){ void Digitizer::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 Digitizer::OpenDigitizer(int boardID, int portID, bool program, bool verbose){
this->boardID = boardID; this->boardID = boardID;
this->portID = portID; this->portID = portID;
@ -172,7 +182,7 @@ int Digitizer::OpenDigitizer(int boardID, int portID, bool verbose){
ErrorMsg("end of OpenDigitizer"); ErrorMsg("end of OpenDigitizer");
if( isConnected ) { if( isConnected && program) {
ProgramBoard(); ProgramBoard();
} }
@ -188,7 +198,7 @@ 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(); //data->FreeMemory();
return ret; return ret;
} }
@ -327,7 +337,9 @@ void Digitizer::ReadData(){
} }
ret = CAEN_DGTZ_ReadData(handle, CAEN_DGTZ_SLAVE_TERMINATED_READOUT_MBLT, data->buffer, &(data->nByte)); ret = CAEN_DGTZ_ReadData(handle, CAEN_DGTZ_SLAVE_TERMINATED_READOUT_MBLT, data->buffer, &(data->nByte));
printf("Read Buffer size %d byte \n", data->nByte); uint32_t EventSize = ReadRegister(Register::DPP::EventSize); // Is it as same as data->nByte?
printf("Read Buffer size %d byte, Event Size : %d byte \n", data->nByte, EventSize);
if (ret || data->nByte == 0) { if (ret || data->nByte == 0) {
ErrorMsg("ReadData"); ErrorMsg("ReadData");
return; return;
@ -493,13 +505,10 @@ void Digitizer::SetDPPAlgorithmControl(uint32_t bit, int ch){
} }
unsigned int Digitizer::ReadBits(uint32_t address, unsigned int bitLength, unsigned int bitSmallestPos, int ch ){ unsigned int Digitizer::ReadBits(uint32_t address, unsigned int bitLength, unsigned int bitSmallestPos, int ch ){
uint32_t bit ;
uint32_t bitmask = (uint(pow(2, bitLength)-1) << bitSmallestPos);
int tempCh = ch; int tempCh = ch;
if (ch < 0 && address < 0x8000 ) tempCh = 0; /// take ch-0 if (ch < 0 && address < 0x8000 ) tempCh = 0; /// take ch-0
bit = ReadRegister(address, tempCh); uint32_t bit = ReadRegister(address, tempCh);
///printf("bit : 0x%x, bitmask : 0x%x \n", bit, bitmask); bit = (bit >> bitSmallestPos ) & uint(pow(2, bitLength)-1);
bit = (bit & ~bitmask);
return bit; return bit;
} }

View File

@ -28,7 +28,7 @@ class Digitizer{
void Reset(); void Reset();
int OpenDigitizer(int boardID, int portID = 0, 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();
///=================Settings ///=================Settings
@ -61,6 +61,7 @@ class Digitizer{
//void SetBoardID(unsigned int ID) {WriteRegister(Register::DPP::BoardID, ID)); //void SetBoardID(unsigned int ID) {WriteRegister(Register::DPP::BoardID, ID));
///================ Get Settings ///================ Get Settings
std::string GetModelName() {return BoardInfo.ModelName;}
int GetSerialNumber() {return BoardInfo.SerialNumber;} int GetSerialNumber() {return BoardInfo.SerialNumber;}
int GetChannelMask() {return channelMask;} int GetChannelMask() {return channelMask;}
bool GetChannelOnOff(unsigned ch) {return (channelMask & ( 1 << ch) );} bool GetChannelOnOff(unsigned ch) {return (channelMask & ( 1 << ch) );}
@ -69,6 +70,10 @@ 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;}
CAEN_DGTZ_ConnectionType GetLinkType() {return LinkType;}
int GetADCBits() {return BoardInfo.ADC_NBits;}
std::string GetROCVersion() {return BoardInfo.ROC_FirmwareRel;}
std::string GetAMCVersion() {return BoardInfo.AMC_FirmwareRel;}
int GetChTemperature(int ch) ; int GetChTemperature(int ch) ;
@ -85,6 +90,7 @@ 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);}
void PrintBoard();
void PrintACQStatue(); void PrintACQStatue();
///================ ACQ control ///================ ACQ control

View File

@ -5,7 +5,7 @@ DigitizerPHA::DigitizerPHA(){
} }
DigitizerPHA::DigitizerPHA(int boardID, int portID, bool verbose){ DigitizerPHA::DigitizerPHA(int boardID, int portID, bool verbose){
OpenDigitizer(boardID, portID, verbose); OpenDigitizer(boardID, portID, true, verbose);
} }
DigitizerPHA::~DigitizerPHA(){ DigitizerPHA::~DigitizerPHA(){
@ -15,7 +15,7 @@ DigitizerPHA::~DigitizerPHA(){
int DigitizerPHA::ProgramBoard(){ int DigitizerPHA::ProgramBoard(){
ret = CAEN_DGTZ_Reset(handle); ret = CAEN_DGTZ_Reset(handle);
printf("======== program board\n"); printf("======== program board PHA\n");
ret = CAEN_DGTZ_WriteRegister(handle, Register::DPP::RecordLength_G + 0x7000, 625); ret = CAEN_DGTZ_WriteRegister(handle, Register::DPP::RecordLength_G + 0x7000, 625);
ret = CAEN_DGTZ_WriteRegister(handle, Register::DPP::BoardConfiguration, 0x4E8115); ret = CAEN_DGTZ_WriteRegister(handle, Register::DPP::BoardConfiguration, 0x4E8115);
@ -32,7 +32,7 @@ int DigitizerPHA::ProgramBoard(){
ret = CAEN_DGTZ_SetRunSynchronizationMode(handle, CAEN_DGTZ_RUN_SYNC_Disabled); ret = CAEN_DGTZ_SetRunSynchronizationMode(handle, CAEN_DGTZ_RUN_SYNC_Disabled);
if( ret != 0 ) { printf("==== set board error.\n"); return 0;} if( ret != 0 ) { printf("==== set board error.\n"); return 0;}
printf("======== program Channels\n"); printf("======== program Channels PHA\n");
ret |= CAEN_DGTZ_WriteRegister(handle, Register::DPP::PHA::DecayTime + 0x7000 , 5000 ); ret |= CAEN_DGTZ_WriteRegister(handle, Register::DPP::PHA::DecayTime + 0x7000 , 5000 );
ret |= CAEN_DGTZ_WriteRegister(handle, Register::DPP::PHA::TrapezoidFlatTop + 0x7000 , 0x62 ); ret |= CAEN_DGTZ_WriteRegister(handle, Register::DPP::PHA::TrapezoidFlatTop + 0x7000 , 0x62 );
@ -48,9 +48,9 @@ int DigitizerPHA::ProgramBoard(){
ret |= CAEN_DGTZ_WriteRegister(handle, Register::DPP::ChannelDCOffset + 0x7000 , 0xEEEE ); ret |= CAEN_DGTZ_WriteRegister(handle, Register::DPP::ChannelDCOffset + 0x7000 , 0xEEEE );
ret |= CAEN_DGTZ_WriteRegister(handle, Register::DPP::PreTrigger + 0x7000 , 124 ); ret |= CAEN_DGTZ_WriteRegister(handle, Register::DPP::PreTrigger + 0x7000 , 124 );
ret |= CAEN_DGTZ_WriteRegister(handle, Register::DPP::InputDynamicRange + 0x7000 , 0x1 ); ret |= CAEN_DGTZ_WriteRegister(handle, Register::DPP::InputDynamicRange + 0x7000 , 0x0 );
ret |= CAEN_DGTZ_WriteRegister(handle, Register::DPP::NumberEventsPerAggregate_G + 0x7000, 1000); ret |= CAEN_DGTZ_WriteRegister(handle, Register::DPP::NumberEventsPerAggregate_G + 0x7000, 100);
ret |= CAEN_DGTZ_WriteRegister(handle, Register::DPP::AggregateOrganization, 0); ret |= CAEN_DGTZ_WriteRegister(handle, Register::DPP::AggregateOrganization, 0);
ret |= CAEN_DGTZ_WriteRegister(handle, Register::DPP::MaxAggregatePerBlockTransfer, 40); ret |= CAEN_DGTZ_WriteRegister(handle, Register::DPP::MaxAggregatePerBlockTransfer, 40);
ret |= CAEN_DGTZ_WriteRegister(handle, Register::DPP::DPPAlgorithmControl + 0x7000, 0xe30200f); ret |= CAEN_DGTZ_WriteRegister(handle, Register::DPP::DPPAlgorithmControl + 0x7000, 0xe30200f);
@ -163,14 +163,16 @@ double DigitizerPHA::GetSetting(Setting::PHA settingName, int ch){
switch(settingName){ switch(settingName){
/// board setting /// board setting
case Setting::PHA::AutoDataFlush_board_bool: temp = ReadBits(Register::DPP::BoardConfiguration, 1, 0); value = temp; break; case Setting::PHA::AutoDataFlush_board_bool: temp = ReadBits(Register::DPP::BoardConfiguration, 1, 0); value = temp; break;
case Setting::PHA::DualTrace_board_bool: temp = ReadBits(Register::DPP::BoardConfiguration, 1, 11); value = temp; break; case Setting::PHA::DecimateWaveForm_board_bool: temp = ReadBits(Register::DPP::BoardConfiguration, 1, 1); value = temp; break;
case Setting::PHA::AnalogProbe1_board_2bit: temp = ReadBits(Register::DPP::BoardConfiguration, 2, 12); value = temp; break; case Setting::PHA::TriggerPropapation_board_bool: temp = ReadBits(Register::DPP::BoardConfiguration, 1, 2); value = temp; break;
case Setting::PHA::AnalogProbe2_board_2bit: temp = ReadBits(Register::DPP::BoardConfiguration, 2, 14); value = temp; break; case Setting::PHA::DualTrace_board_bool: temp = ReadBits(Register::DPP::BoardConfiguration, 1, 11); value = temp; break;
case Setting::PHA::WavefromRecording_board_bool: temp = ReadBits(Register::DPP::BoardConfiguration, 1, 16); value = temp; break; case Setting::PHA::AnalogProbe1_board_2bit: temp = ReadBits(Register::DPP::BoardConfiguration, 2, 12); value = temp; break;
case Setting::PHA::EnableExtra2Word_board_bool: temp = ReadBits(Register::DPP::BoardConfiguration, 1, 17); value = temp; break; case Setting::PHA::AnalogProbe2_board_2bit: temp = ReadBits(Register::DPP::BoardConfiguration, 2, 14); value = temp; break;
case Setting::PHA::EnergyRecording_board_bool: temp = ReadBits(Register::DPP::BoardConfiguration, 1, 19); value = temp; break; case Setting::PHA::WavefromRecording_board_bool: temp = ReadBits(Register::DPP::BoardConfiguration, 1, 16); value = temp; break;
case Setting::PHA::VirtualProbe_board_4bit: temp = ReadBits(Register::DPP::BoardConfiguration, 4, 20); value = temp; break; case Setting::PHA::EnableExtra2Word_board_bool: temp = ReadBits(Register::DPP::BoardConfiguration, 1, 17); value = temp; break;
case Setting::PHA::EnergyRecording_board_bool: temp = ReadBits(Register::DPP::BoardConfiguration, 1, 19); value = temp; break;
case Setting::PHA::VirtualProbe_board_4bit: temp = ReadBits(Register::DPP::BoardConfiguration, 4, 20); value = temp; break;
/// DPP Algorithm Control 1 /// DPP Algorithm Control 1
case Setting::PHA::TrapazoidRescaling_5bit: temp = ReadBits(Register::DPP::DPPAlgorithmControl, 5, 0, ch); value = temp; break; case Setting::PHA::TrapazoidRescaling_5bit: temp = ReadBits(Register::DPP::DPPAlgorithmControl, 5, 0, ch); value = temp; break;
@ -311,18 +313,18 @@ void DigitizerPHA::PrintBoardConfiguration(){
printf(" Bit[20:23] = %d = Digital Virtual probe 1 : ", ((value[0] >> 20) & 0x7 )); printf(" Bit[20:23] = %d = Digital Virtual probe 1 : ", ((value[0] >> 20) & 0x7 ));
switch (((value[0] >> 20) & 0xF )) { switch (((value[0] >> 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"); 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"); case 2: printf("”Peak Run”, starts with the trigger and last for the whole event\n");break;
case 3: printf("”Pileup”, shows where a pileup event occurred\n"); case 3: printf("”Pileup”, shows where a pileup event occurred\n");break;
case 4: printf("”Peaking”, shows where the energy is calculated\n"); case 4: printf("”Peaking”, shows where the energy is calculated\n");break;
case 5: printf("”TRG Validation Win”, digital input showing the trigger validation acceptance window TVAW\n"); case 5: printf("”TRG Validation Win”, digital input showing the trigger validation acceptance window TVAW\n");break;
case 6: printf("”Baseline freeze”, shows where the algorithm stops calculating the baseline and its value is frozen\n"); case 6: printf("”Baseline freeze”, shows where the algorithm stops calculating the baseline and its value is frozen\n");break;
case 7: printf("”TRG Holdoff”, shows the trigger holdoff parameter\n"); case 7: printf("”TRG Holdoff”, shows the trigger holdoff parameter\n");break;
case 8: printf("”TRG Validation”, shows the trigger validation signal TRG_VAL \n"); case 8: printf("”TRG Validation”, shows the trigger validation signal TRG_VAL \n");break;
case 9: printf("”Acq Busy”, this is 1 when the board is busy (saturated input signal or full memory board) or there is a veto\n"); case 9: printf("”Acq Busy”, this is 1 when the board is busy (saturated input signal or full memory board) or there is a veto\n");break;
case 10: printf("”Zero Cross. Win.”, shows the RT Discrimination Width\n"); case 10: printf("”Zero Cross. Win.”, shows the RT Discrimination Width\n");break;
case 11: printf("”Ext TRG”, shows the external trigger, when available\n"); 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"); 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[0] >> 26) & 0x7 ));
if( ((value[0] >> 26) & 0x7 ) == 0 ) { if( ((value[0] >> 26) & 0x7 ) == 0 ) {

View File

@ -33,12 +33,16 @@ enum MenuIdentifiers{
}; };
///make static members ///make static members
Digitizer ** MainWindow::digi = NULL; Digitizer ** MainWindow::digi = NULL;
DigitizerPHA ** MainWindow::pha = NULL;
DigitizerPSD ** MainWindow::psd = NULL;
TGTextEdit * MainWindow::teLog = NULL; TGTextEdit * MainWindow::teLog = NULL;
TRootEmbeddedCanvas * MainWindow::fEcanvas = NULL; TRootEmbeddedCanvas * MainWindow::fEcanvas = NULL;
MainWindow::MainWindow(const TGWindow *p,UInt_t w,UInt_t h) { MainWindow::MainWindow(const TGWindow *p,UInt_t w,UInt_t h) {
nDigi = 0; nDigi = 0;
nPSD = 0;
nPHA = 0;
/// Create a main frame /// Create a main frame
fMain = new TGMainFrame(p,w,h); fMain = new TGMainFrame(p,w,h);
@ -82,6 +86,12 @@ MainWindow::MainWindow(const TGWindow *p,UInt_t w,UInt_t h) {
bOpenDigitizers->Connect("Clicked()","MainWindow",this,"DetectDigitizer()"); bOpenDigitizers->Connect("Clicked()","MainWindow",this,"DetectDigitizer()");
hframe->AddFrame(bOpenDigitizers, uniLayoutHints); hframe->AddFrame(bOpenDigitizers, uniLayoutHints);
///================= Start Run
TGTextButton *bStartRun = new TGTextButton(hframe,"Start Run"); hframe->AddFrame(bStartRun, uniLayoutHints);
///================= Stop Run
TGTextButton *bStopRun = new TGTextButton(hframe,"Stop Run"); hframe->AddFrame(bStopRun, uniLayoutHints);
///================= signal Channel group ///================= signal Channel group
TGGroupFrame * group1 = new TGGroupFrame(hframe, "Single Channel", kHorizontalFrame); TGGroupFrame * group1 = new TGGroupFrame(hframe, "Single Channel", kHorizontalFrame);
hframe->AddFrame(group1 ); hframe->AddFrame(group1 );
@ -120,8 +130,10 @@ 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_BOARD_SETTINGS); HandleMenu(M_BOARD_SETTINGS);
HandleMenu(M_CH_SETTING); //HandleMenu(M_CH_SETTING);
} }
MainWindow::~MainWindow() { MainWindow::~MainWindow() {
@ -159,20 +171,34 @@ void MainWindow::HandleMenu(Int_t id){
case M_DIGITIZER_SCAN:{ case M_DIGITIZER_SCAN:{
printf("============= detect digitizers \n"); printf("============= detect digitizers \n");
//DetectDigitizer(); DetectDigitizer();
printf("============= Connect %d digitizers...\n", nDigi); printf("============= Connect %d digitizers...\n", nDigi);
if( nDigi > 0 ) { if( nDigi > 0 ) {
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);
if( DPPType[i] == V1730_DPP_PSD_CODE ) { if( DPPType[i] == V1730_DPP_PSD_CODE ) {
digi[i] = new DigitizerPSD(boardID[i], portID[i]); digi[i] = new DigitizerPSD(boardID[i], portID[i]);
printf("Open as PSD\n");
}else if( DPPType[i] == V1730_DPP_PHA_CODE ){ }else if( DPPType[i] == V1730_DPP_PHA_CODE ){
digi[i] = new DigitizerPHA(boardID[i], portID[i]); digi[i] = new DigitizerPHA(boardID[i], portID[i]);
printf("Open as PHA\n");
}else{ }else{
digi[i] = new Digitizer(boardID[i], portID[i]); digi[i] = new Digitizer(boardID[i], portID[i]);
printf("Open as Ordinary Digitizer\n");
} }
} }
} }
}break; }break;
///========================= File Open ///========================= File Open
@ -251,6 +277,8 @@ void MainWindow::DetectDigitizer(){
boardID.push_back(board); boardID.push_back(board);
serialNum.push_back(dig->GetSerialNumber()); serialNum.push_back(dig->GetSerialNumber());
dig->CloseDigitizer(); dig->CloseDigitizer();
if( dig->GetDPPType() == V1730_DPP_PHA_CODE ) nPHA ++;
if( dig->GetDPPType() == V1730_DPP_PSD_CODE ) nPSD ++;
} }
} }
} }
@ -259,6 +287,8 @@ void MainWindow::DetectDigitizer(){
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]); printf("port: %d, board: %d, DPP Type : %d \n", portID[i], boardID[i], DPPType[i]);
} }
printf("Number of PHA : %d \n", nPHA);
printf("Number of PSD : %d \n", nPSD);
} }
@ -281,9 +311,6 @@ Double_t standardPulse(Double_t *x, Double_t * par){
void MainWindow::GoodBye(){ void MainWindow::GoodBye(){
if( nDigi > 0 && digi != NULL) {
for(int i = 0; i < nDigi ; i++) digi[0]->CloseDigitizer();
}
printf("----- bye bye ---- \n"); printf("----- bye bye ---- \n");
gApplication->Terminate(0); gApplication->Terminate(0);

View File

@ -44,12 +44,15 @@ private:
//TGTextButton *bStopRun; //TGTextButton *bStopRun;
//TGTextButton *bFitTrace; //TGTextButton *bFitTrace;
int nDigi; unsigned short nDigi;
vector<int> DPPType; vector<int> DPPType;
vector<int> portID; vector<int> portID;
vector<int> boardID; vector<int> boardID;
vector<int> serialNum; vector<int> serialNum;
static Digitizer ** digi; static Digitizer ** digi;
unsigned short nPHA, nPSD;
static DigitizerPHA ** pha;
static DigitizerPSD ** psd;
BoardSetting * boardSetting; BoardSetting * boardSetting;
ChannelSetting * channelSetting; ChannelSetting * channelSetting;

View File

@ -192,6 +192,8 @@ namespace Setting{
enum PHA{ enum PHA{
/// board setting /// board setting
AutoDataFlush_board_bool, AutoDataFlush_board_bool,
DecimateWaveForm_board_bool,
TriggerPropapation_board_bool,
DualTrace_board_bool, DualTrace_board_bool,
AnalogProbe1_board_2bit, AnalogProbe1_board_2bit,
AnalogProbe2_board_2bit, AnalogProbe2_board_2bit,

View File

@ -10,43 +10,63 @@
#include "boardSetting.h" #include "boardSetting.h"
TString boardSettingName[NUM_BOARD_INFO] = { "Model", TString boardSettingName[NUM_BOARD_INFO] = { "Model",
"Board Info", "DPP Type",
"Link Type", "Link Type",
"Serial Number", "Serial Number",
"Number of channels", "Number of channels",
"Sampling rate", "Sampling rate",
"ADC bit", "ADC bit",
"ROC version", "ROC version",
"AMC version" "AMC version"
}; };
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->digi = digi; this->digi = digi;
gClient->GetColorByName("red", red);
gClient->GetColorByName("blue", blue);
fMain = new TGMainFrame(p,w,h); fMain = new TGMainFrame(p,w,h);
fMain->SetWindowName("Board Settings "); fMain->SetWindowName("Board Settings ");
fMain->Connect("CloseWindow()", "BoardSetting", this, "CloseWindow()"); fMain->Connect("CloseWindow()", "BoardSetting", this, "CloseWindow()");
TGLayoutHints * layoutHints = new TGLayoutHints(kLHintsCenterX | kLHintsCenterY, 5,5,3,3); /// left, right, top, bottom TGLayoutHints * layoutHints = new TGLayoutHints(kLHintsCenterX | kLHintsCenterY, 5,5,3,3); /// left, right, top, bottom
TGVerticalFrame * vframe = new TGVerticalFrame(fMain); fMain->AddFrame(vframe, layoutHints); TGVerticalFrame * vframe = new TGVerticalFrame(fMain); fMain->AddFrame(vframe, layoutHints);
///==========Module choose ///==========Module choose
TGHorizontalFrame *hframe0 = new TGHorizontalFrame(vframe, w, 50 ); vframe->AddFrame(hframe0, layoutHints); TGHorizontalFrame *hframe0 = new TGHorizontalFrame(vframe, w, 50 ); vframe->AddFrame(hframe0, layoutHints);
TGLabel * lb0 = new TGLabel(hframe0, "Board ID :"); hframe0->AddFrame(lb0, layoutHints); TGLabel * lb0 = new TGLabel(hframe0, "Board ID :"); hframe0->AddFrame(lb0, layoutHints);
boardIDEntry = new TGNumberEntry(hframe0, 0, 0, 0, TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative); boardIDEntry = new TGNumberEntry(hframe0, 0, 0, 0, TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative); hframe0->AddFrame(boardIDEntry, new TGLayoutHints(kLHintsCenterX , 5, 5, 3, 4));
hframe0->AddFrame(boardIDEntry, new TGLayoutHints(kLHintsCenterX , 5, 5, 3, 4));
boardIDEntry->SetWidth(50); boardIDEntry->SetWidth(50);
boardIDEntry->SetLimits(TGNumberFormat::kNELLimitMinMax, 0, nBoard); boardIDEntry->SetLimits(TGNumberFormat::kNELLimitMinMax, 0, nBoard-1);
boardIDEntry->Connect("Modified()", "BoardSetting", this, "ChangeBoard()"); boardIDEntry->Connect("Modified()", "BoardSetting", this, "ChangeBoard()");
if( nBoard <= 1 ) boardIDEntry->SetState(false); if( nBoard <= 1 ) boardIDEntry->SetState(false);
int boardID = boardIDEntry->GetNumber(); int boardID = boardIDEntry->GetNumber();
///- Board Failure status
TGLabel * lbPLLStatus = new TGLabel(hframe0, "PLL status :"); hframe0->AddFrame(lbPLLStatus, layoutHints);
enPLLStatus = new TGTextEntry(hframe0, ""); hframe0->AddFrame(enPLLStatus, layoutHints);
enPLLStatus->SetEnabled(false);
enPLLStatus->Resize(50, 20);
TGLabel * lbTempStatus = new TGLabel(hframe0, "Temp status :"); hframe0->AddFrame(lbTempStatus, layoutHints);
enTempStatus = new TGTextEntry(hframe0, ""); hframe0->AddFrame(enTempStatus, layoutHints);
enTempStatus->SetEnabled(false);
enTempStatus->Resize(50, 20);
TGLabel * lbADCPwrStatus = new TGLabel(hframe0, "ADC Power :"); hframe0->AddFrame(lbADCPwrStatus, layoutHints);
enADCPwrStatus = new TGTextEntry(hframe0, ""); hframe0->AddFrame(enADCPwrStatus, layoutHints);
enADCPwrStatus->SetEnabled(false);
enADCPwrStatus->Resize(50, 20);
TGTextButton * bSoftwareReset = new TGTextButton(hframe0, "Reset default Settings"); hframe0->AddFrame(bSoftwareReset, layoutHints);
TGTextButton * bSoftwareClear = new TGTextButton(hframe0, "Clear Buffer"); hframe0->AddFrame(bSoftwareClear, layoutHints);
///============ fixed info ///============ fixed info
TGHorizontalFrame * hframeInfo = new TGHorizontalFrame(vframe); vframe->AddFrame(hframeInfo, new TGLayoutHints(kLHintsExpandX)); TGHorizontalFrame * hframeInfo = new TGHorizontalFrame(vframe); vframe->AddFrame(hframeInfo, new TGLayoutHints(kLHintsExpandX));
@ -66,8 +86,6 @@ BoardSetting::BoardSetting(const TGWindow *p, UInt_t w, UInt_t h, Digitizer ** d
entry[i] = new TGTextEntry(hframe[i], new TGTextBuffer(1)); hframe[i]->AddFrame(entry[i], new TGLayoutHints(kLHintsRight, 5,5,3,4)); entry[i] = new TGTextEntry(hframe[i], new TGTextBuffer(1)); hframe[i]->AddFrame(entry[i], new TGLayoutHints(kLHintsRight, 5,5,3,4));
entry[i]->SetEnabled(false); entry[i]->SetEnabled(false);
entry[i]->SetText( Form("0x%x", 0) );
} }
///========= Board Configure ///========= Board Configure
@ -75,24 +93,24 @@ BoardSetting::BoardSetting(const TGWindow *p, UInt_t w, UInt_t h, Digitizer ** d
TGVerticalFrame * vBdCfg = new TGVerticalFrame(gBdCfg); gBdCfg->AddFrame(vBdCfg); TGVerticalFrame * vBdCfg = new TGVerticalFrame(gBdCfg); gBdCfg->AddFrame(vBdCfg);
TGHorizontalFrame * hframeBdCfg1 = new TGHorizontalFrame(vBdCfg); vBdCfg->AddFrame(hframeBdCfg1, layoutHints); TGHorizontalFrame * hframeBdCfg1 = new TGHorizontalFrame(vBdCfg); vBdCfg->AddFrame(hframeBdCfg1, layoutHints);
TGCheckButton * bAutoDataFlush = new TGCheckButton(hframeBdCfg1, "Auto Data Flush", 1); hframeBdCfg1->AddFrame(bAutoDataFlush, layoutHints); bAutoDataFlush = new TGCheckButton(hframeBdCfg1, "Auto Data Flush", 1); hframeBdCfg1->AddFrame(bAutoDataFlush, layoutHints);
bAutoDataFlush->SetState(kButtonDown); bAutoDataFlush->SetState(kButtonUp);
bAutoDataFlush->Connect("Clicked()", "BoardSetting", this, "SetAutoDataFlush()"); bAutoDataFlush->Connect("Clicked()", "BoardSetting", this, "SetAutoDataFlush()");
TGCheckButton * bDecimateWF = new TGCheckButton(hframeBdCfg1, "Decimate WaveForm", 1); hframeBdCfg1->AddFrame(bDecimateWF, layoutHints); bDecimateWF = new TGCheckButton(hframeBdCfg1, "Decimate WaveForm", 1); hframeBdCfg1->AddFrame(bDecimateWF, layoutHints);
bDecimateWF->SetState(kButtonUp); bDecimateWF->SetState(kButtonUp);
bDecimateWF->Connect("Clicked()", "BoardSetting", this, "SetDecimateWF()"); bDecimateWF->Connect("Clicked()", "BoardSetting", this, "SetDecimateWF()");
TGCheckButton * bWFRecord = new TGCheckButton(hframeBdCfg1, "Record WaveFrom", 1); hframeBdCfg1->AddFrame(bWFRecord, layoutHints); bWFRecord = new TGCheckButton(hframeBdCfg1, "Record WaveFrom", 1); hframeBdCfg1->AddFrame(bWFRecord, layoutHints);
bWFRecord->SetState(kButtonDown); bWFRecord->SetState(kButtonUp);
bWFRecord->Connect("Clicked()", "BoardSetting", this, "SetWaveFormRecord()"); bWFRecord->Connect("Clicked()", "BoardSetting", this, "SetWaveFormRecord()");
TGCheckButton * bTrigPropa = new TGCheckButton(hframeBdCfg1, "Trigger Propagation (coincidence) ", 1); hframeBdCfg1->AddFrame(bTrigPropa, layoutHints); bTrigPropa = new TGCheckButton(hframeBdCfg1, "Trigger Propagation (coincidence) ", 1); hframeBdCfg1->AddFrame(bTrigPropa, layoutHints);
bTrigPropa->SetState(kButtonUp); bTrigPropa->SetState(kButtonUp);
bTrigPropa->Connect("Clicked()", "BoardSetting", this, "SetTriggerPropagation()"); bTrigPropa->Connect("Clicked()", "BoardSetting", this, "SetTriggerPropagation()");
TGCheckButton * bExtrac2 = new TGCheckButton(hframeBdCfg1, "Enable Extra2 word", 1); hframeBdCfg1->AddFrame(bExtrac2, layoutHints); bExtrac2 = new TGCheckButton(hframeBdCfg1, "Enable Extra2 word", 1); hframeBdCfg1->AddFrame(bExtrac2, layoutHints);
bExtrac2->SetState(kButtonDown); bExtrac2->SetState(kButtonUp);
bExtrac2->Connect("Clicked()", "BoardSetting", this, "SetEnableExtra2()"); bExtrac2->Connect("Clicked()", "BoardSetting", this, "SetEnableExtra2()");
TGHorizontalFrame * hframeBdCfg2 = new TGHorizontalFrame(vBdCfg); vBdCfg->AddFrame(hframeBdCfg2, layoutHints); TGHorizontalFrame * hframeBdCfg2 = new TGHorizontalFrame(vBdCfg); vBdCfg->AddFrame(hframeBdCfg2, layoutHints);
@ -170,7 +188,7 @@ BoardSetting::BoardSetting(const TGWindow *p, UInt_t w, UInt_t h, Digitizer ** d
///"FanSpeed Control", ///"FanSpeed Control",
TGLabel * lbFanCtrl = new TGLabel(hframeBdCfg3, "Fan Speed Control", kHorizontalFrame); hframeBdCfg3->AddFrame(lbFanCtrl, layoutHints ); TGLabel * lbFanCtrl = new TGLabel(hframeBdCfg3, "Fan Speed Control", kHorizontalFrame); hframeBdCfg3->AddFrame(lbFanCtrl, layoutHints );
TGComboBox * cbFanCtrl = new TGComboBox(hframeBdCfg3, "",1); hframeBdCfg3->AddFrame(cbFanCtrl, layoutHints); cbFanCtrl = new TGComboBox(hframeBdCfg3, "",1); hframeBdCfg3->AddFrame(cbFanCtrl, layoutHints);
cbFanCtrl->EnableTextInput(false); cbFanCtrl->EnableTextInput(false);
cbFanCtrl->AddEntry("Slow/Auto",0x30); cbFanCtrl->AddEntry("Slow/Auto",0x30);
cbFanCtrl->AddEntry("Fast", 0x38); cbFanCtrl->AddEntry("Fast", 0x38);
@ -180,10 +198,11 @@ BoardSetting::BoardSetting(const TGWindow *p, UInt_t w, UInt_t h, Digitizer ** d
///========== ACQ control ///========== ACQ control
TGGroupFrame * gAcqCtrl = new TGGroupFrame(vframe, "ACQ Control", kHorizontalFrame); vframe->AddFrame(gAcqCtrl , new TGLayoutHints(kLHintsExpandX)); TGGroupFrame * gAcqCtrl = new TGGroupFrame(vframe, "ACQ Control", kHorizontalFrame); vframe->AddFrame(gAcqCtrl , new TGLayoutHints(kLHintsExpandX));
TGVerticalFrame * vAcqCtrl = new TGVerticalFrame(gAcqCtrl); gAcqCtrl->AddFrame(vAcqCtrl); TGVerticalFrame * vAcqCtrl = new TGVerticalFrame(gAcqCtrl); gAcqCtrl->AddFrame(vAcqCtrl);
TGHorizontalFrame * hfAcqCtrl = new TGHorizontalFrame(vAcqCtrl); vAcqCtrl->AddFrame(hfAcqCtrl, layoutHints); TGHorizontalFrame * hfAcqCtrl = new TGHorizontalFrame(vAcqCtrl); vAcqCtrl->AddFrame(hfAcqCtrl, layoutHints);
TGLabel * lbAcqMode = new TGLabel(hfAcqCtrl, "ACQ Mode"); hfAcqCtrl->AddFrame(lbAcqMode, layoutHints); TGLabel * lbAcqMode = new TGLabel(hfAcqCtrl, "ACQ Mode"); hfAcqCtrl->AddFrame(lbAcqMode, layoutHints);
TGComboBox * cbAcqMode = new TGComboBox(hfAcqCtrl, "ACQ Mode", 1); hfAcqCtrl->AddFrame(cbAcqMode, layoutHints); cbAcqMode = new TGComboBox(hfAcqCtrl, "ACQ Mode", 1); hfAcqCtrl->AddFrame(cbAcqMode, layoutHints);
cbAcqMode->EnableTextInput(false); cbAcqMode->EnableTextInput(false);
cbAcqMode->AddEntry("Software", 0); cbAcqMode->AddEntry("Software", 0);
cbAcqMode->AddEntry("S-IN / GPI", 1); cbAcqMode->AddEntry("S-IN / GPI", 1);
@ -192,24 +211,36 @@ BoardSetting::BoardSetting(const TGWindow *p, UInt_t w, UInt_t h, Digitizer ** d
cbAcqMode->Select(0); cbAcqMode->Select(0);
cbAcqMode->Resize(100, 20); cbAcqMode->Resize(100, 20);
TGCheckButton * bAcqArm = new TGCheckButton(hfAcqCtrl, "ACQ Start/Arm", 1); hfAcqCtrl->AddFrame(bAcqArm, layoutHints); bAcqArm = new TGCheckButton(hfAcqCtrl, "ACQ Start/Arm", 1); hfAcqCtrl->AddFrame(bAcqArm, layoutHints);
bAcqArm->SetState(kButtonUp); bAcqArm->SetState(kButtonUp);
//bAcqArm->Connect("Clicked()", "BoardSetting", this, "SetAutoDataFlush()"); //bAcqArm->Connect("Clicked()", "BoardSetting", this, "SetAutoDataFlush()");
TGLabel * lbPLLref = new TGLabel(hfAcqCtrl, "PLL Ref."); hfAcqCtrl->AddFrame(lbPLLref, layoutHints); TGLabel * lbPLLref = new TGLabel(hfAcqCtrl, "PLL Ref."); hfAcqCtrl->AddFrame(lbPLLref, layoutHints);
TGComboBox * cbPLLref = new TGComboBox(hfAcqCtrl, "PLL Ref.", 1); hfAcqCtrl->AddFrame(cbPLLref, layoutHints); cbPLLref = new TGComboBox(hfAcqCtrl, "PLL Ref.", 1); hfAcqCtrl->AddFrame(cbPLLref, layoutHints);
cbPLLref->EnableTextInput(false); cbPLLref->EnableTextInput(false);
cbPLLref->AddEntry("internal", 0); cbPLLref->AddEntry("internal", 0);
cbPLLref->AddEntry("external", 1); cbPLLref->AddEntry("external", 1);
cbPLLref->Select(0); cbPLLref->Select(0);
cbPLLref->Resize(100, 20); cbPLLref->Resize(100, 20);
TGHorizontalFrame * hfAcqCtrl2 = new TGHorizontalFrame(vAcqCtrl); vAcqCtrl->AddFrame(hfAcqCtrl2, layoutHints);
TGCheckButton * bSWTrigger = new TGCheckButton(hfAcqCtrl2, "Software Trigger", 1); hfAcqCtrl2->AddFrame(bSWTrigger, layoutHints);
bSWTrigger->SetState(kButtonUp);
TGCheckButton * bSWClockSync = new TGCheckButton(hfAcqCtrl2, "Software Clock Sync", 1); hfAcqCtrl2->AddFrame(bSWClockSync, layoutHints);
bSWClockSync->SetState(kButtonUp);
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->SetWidth(60);
numRunStartStopDelay->SetLimits(TGNumberFormat::kNELLimitMinMax, 0, 0x0FF);
///========= Trigger Configure ///========= Trigger Configure
TGGroupFrame * gTRGCfg = new TGGroupFrame(vframe, "Trigger Configure", kHorizontalFrame); vframe->AddFrame(gTRGCfg, new TGLayoutHints(kLHintsExpandX)); TGGroupFrame * gTRGCfg = new TGGroupFrame(vframe, "Trigger Configure", kHorizontalFrame); vframe->AddFrame(gTRGCfg, new TGLayoutHints(kLHintsExpandX));
TGVerticalFrame * vTRGCfg = new TGVerticalFrame(gTRGCfg); gTRGCfg->AddFrame(vTRGCfg, new TGLayoutHints(kLHintsExpandX)); TGVerticalFrame * vTRGCfg = new TGVerticalFrame(gTRGCfg); gTRGCfg->AddFrame(vTRGCfg, new TGLayoutHints(kLHintsExpandX));
///--- various type of triggers
///--- varioustype of triggers
TGHorizontalFrame * hframeTRGCfg = new TGHorizontalFrame(vTRGCfg); vTRGCfg->AddFrame(hframeTRGCfg, new TGLayoutHints(kLHintsCenterY, 2,2,2,2)); TGHorizontalFrame * hframeTRGCfg = new TGHorizontalFrame(vTRGCfg); vTRGCfg->AddFrame(hframeTRGCfg, new TGLayoutHints(kLHintsCenterY, 2,2,2,2));
TGVerticalFrame * vTRGType = new TGVerticalFrame(hframeTRGCfg); hframeTRGCfg->AddFrame(vTRGType, new TGLayoutHints(kLHintsCenterX , 5, 5, 3, 4)); TGVerticalFrame * vTRGType = new TGVerticalFrame(hframeTRGCfg); hframeTRGCfg->AddFrame(vTRGType, new TGLayoutHints(kLHintsCenterX , 5, 5, 3, 4));
@ -228,21 +259,18 @@ BoardSetting::BoardSetting(const TGWindow *p, UInt_t w, UInt_t h, Digitizer ** d
///"Global Trigger Mask", ///"Global Trigger Mask",
TGLabel * lbGbTRGMsk = new TGLabel(vTRGType, "Global Trigger Mask"); vTRGType->AddFrame(lbGbTRGMsk, new TGLayoutHints(kLHintsRight | kLHintsCenterY , 5, 5, 3, 4)); TGLabel * lbGbTRGMsk = new TGLabel(vTRGType, "Global Trigger Mask"); vTRGType->AddFrame(lbGbTRGMsk, new TGLayoutHints(kLHintsRight | kLHintsCenterY , 5, 5, 3, 4));
TGCheckButton * cbGbTRGMskCh[8];
for( int i = 0; i < 8; i++){ for( int i = 0; i < 8; i++){
cbGbTRGMskCh[i] = new TGCheckButton(vTRGMsk[i], ""); vTRGMsk[i]->AddFrame(cbGbTRGMskCh[i], new TGLayoutHints(kLHintsCenterX , 5, 5, 3, 4)); cbGbTRGMskCh[i] = new TGCheckButton(vTRGMsk[i], ""); vTRGMsk[i]->AddFrame(cbGbTRGMskCh[i], new TGLayoutHints(kLHintsCenterX , 5, 5, 3, 4));
} }
///"Trigger Validation Mask", ///"Trigger Validation Mask",
TGLabel * lbTRGValMsk = new TGLabel(vTRGType, "Trigger Validation Mask"); vTRGType->AddFrame(lbTRGValMsk, new TGLayoutHints(kLHintsRight | kLHintsCenterY , 5, 5, 3, 4)); TGLabel * lbTRGValMsk = new TGLabel(vTRGType, "Trigger Validation Mask"); vTRGType->AddFrame(lbTRGValMsk, new TGLayoutHints(kLHintsRight | kLHintsCenterY , 5, 5, 3, 4));
TGCheckButton * cbTRGValMskCh[8];
for( int i = 0; i < 8; i++){ for( int i = 0; i < 8; i++){
cbTRGValMskCh[i] = new TGCheckButton(vTRGMsk[i], ""); vTRGMsk[i]->AddFrame(cbTRGValMskCh[i], new TGLayoutHints(kLHintsCenterX , 5, 5, 3, 4)); cbTRGValMskCh[i] = new TGCheckButton(vTRGMsk[i], ""); vTRGMsk[i]->AddFrame(cbTRGValMskCh[i], new TGLayoutHints(kLHintsCenterX , 5, 5, 3, 4));
} }
///"Front Panel TRG-OUT Enable Mask", ///"Front Panel TRG-OUT Enable Mask",
TGLabel * lbTRGOUTMsk = new TGLabel(vTRGType, "TRG-OUT Mask"); vTRGType->AddFrame(lbTRGOUTMsk, new TGLayoutHints(kLHintsRight | kLHintsCenterY , 5, 5, 3, 4)); TGLabel * lbTRGOUTMsk = new TGLabel(vTRGType, "TRG-OUT Mask"); vTRGType->AddFrame(lbTRGOUTMsk, new TGLayoutHints(kLHintsRight | kLHintsCenterY , 5, 5, 3, 4));
TGCheckButton * cbTRGOUTMskCh[8];
for( int i = 0; i < 8; i++){ for( int i = 0; i < 8; i++){
cbTRGOUTMskCh[i] = new TGCheckButton(vTRGMsk[i], ""); vTRGMsk[i]->AddFrame(cbTRGOUTMskCh[i], new TGLayoutHints(kLHintsCenterX , 5, 5, 3, 4)); cbTRGOUTMskCh[i] = new TGCheckButton(vTRGMsk[i], ""); vTRGMsk[i]->AddFrame(cbTRGOUTMskCh[i], new TGLayoutHints(kLHintsCenterX , 5, 5, 3, 4));
} }
@ -261,14 +289,14 @@ BoardSetting::BoardSetting(const TGWindow *p, UInt_t w, UInt_t h, Digitizer ** d
numMajorCoinWin = new TGNumberEntry(vTRGMsk2, 0, 0, 0, TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative); vTRGMsk2->AddFrame(numMajorCoinWin); numMajorCoinWin = new TGNumberEntry(vTRGMsk2, 0, 0, 0, TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative); vTRGMsk2->AddFrame(numMajorCoinWin);
numMajorCoinWin->Resize(70, 20); numMajorCoinWin->Resize(70, 20);
TGComboBox * cbTRGMODE = new TGComboBox(vTRGMsk2, "TRG MODE",1); vTRGMsk2->AddFrame(cbTRGMODE); cbTRGMODE = new TGComboBox(vTRGMsk2, "TRG MODE",1); vTRGMsk2->AddFrame(cbTRGMODE);
cbTRGMODE->EnableTextInput(false); cbTRGMODE->EnableTextInput(false);
cbTRGMODE->AddEntry("OR", 0); cbTRGMODE->AddEntry("OR", 0);
cbTRGMODE->AddEntry("AND", 1); cbTRGMODE->AddEntry("AND", 1);
cbTRGMODE->AddEntry("Majority", 2); cbTRGMODE->AddEntry("Majority", 2);
cbTRGMODE->Resize(70, 20); cbTRGMODE->Resize(70, 20);
cbTRGMODE->Select(0); cbTRGMODE->Select(0);
TGComboBox * cbTRGOUTMODE = new TGComboBox(vTRGMsk2, "TRG MODE",1); vTRGMsk2->AddFrame(cbTRGOUTMODE); cbTRGOUTMODE = new TGComboBox(vTRGMsk2, "TRG MODE",1); vTRGMsk2->AddFrame(cbTRGOUTMODE);
cbTRGOUTMODE->EnableTextInput(false); cbTRGOUTMODE->EnableTextInput(false);
cbTRGOUTMODE->AddEntry("OR", 0); cbTRGOUTMODE->AddEntry("OR", 0);
cbTRGOUTMODE->AddEntry("AND", 1); cbTRGOUTMODE->AddEntry("AND", 1);
@ -291,11 +319,11 @@ BoardSetting::BoardSetting(const TGWindow *p, UInt_t w, UInt_t h, Digitizer ** d
TGLabel * lbLVDSTrigger = new TGLabel(vTRGMsk4, "LVDS"); vTRGMsk4->AddFrame(lbLVDSTrigger, layoutHints); TGLabel * lbLVDSTrigger = new TGLabel(vTRGMsk4, "LVDS"); vTRGMsk4->AddFrame(lbLVDSTrigger, layoutHints);
TGLabel * lbdummy1 = new TGLabel(vTRGMsk4, "Trg."); vTRGMsk4->AddFrame(lbdummy1, layoutHints); TGLabel * lbdummy1 = new TGLabel(vTRGMsk4, "Trg."); vTRGMsk4->AddFrame(lbdummy1, layoutHints);
TGCheckButton * bGLBLVDSTrigger = new TGCheckButton(vTRGMsk4, "", 1); vTRGMsk4->AddFrame(bGLBLVDSTrigger, layoutHints); bGLBLVDSTrigger = new TGCheckButton(vTRGMsk4, "", 1); vTRGMsk4->AddFrame(bGLBLVDSTrigger, layoutHints);
bGLBLVDSTrigger->SetState(kButtonUp); bGLBLVDSTrigger->SetState(kButtonUp);
vTRGMsk4->AddFrame(lbdummy0, layoutHints); vTRGMsk4->AddFrame(lbdummy0, layoutHints);
TGCheckButton * bTRGOUTLVDSTrigger = new TGCheckButton(vTRGMsk4, "", 1); vTRGMsk4->AddFrame(bTRGOUTLVDSTrigger, layoutHints); bTRGOUTLVDSTrigger = new TGCheckButton(vTRGMsk4, "", 1); vTRGMsk4->AddFrame(bTRGOUTLVDSTrigger, layoutHints);
bTRGOUTLVDSTrigger->SetState(kButtonUp); bTRGOUTLVDSTrigger->SetState(kButtonUp);
@ -303,11 +331,11 @@ BoardSetting::BoardSetting(const TGWindow *p, UInt_t w, UInt_t h, Digitizer ** d
TGLabel * lbExtTrigger = new TGLabel(vTRGMsk5, "Ext."); vTRGMsk5->AddFrame(lbExtTrigger, layoutHints); TGLabel * lbExtTrigger = new TGLabel(vTRGMsk5, "Ext."); vTRGMsk5->AddFrame(lbExtTrigger, layoutHints);
TGLabel * lbdummy2 = new TGLabel(vTRGMsk5, "Trg."); vTRGMsk5->AddFrame(lbdummy2, layoutHints); TGLabel * lbdummy2 = new TGLabel(vTRGMsk5, "Trg."); vTRGMsk5->AddFrame(lbdummy2, layoutHints);
TGCheckButton * bGLBExtTrigger = new TGCheckButton(vTRGMsk5, "", 1); vTRGMsk5->AddFrame(bGLBExtTrigger, layoutHints); bGLBExtTrigger = new TGCheckButton(vTRGMsk5, "", 1); vTRGMsk5->AddFrame(bGLBExtTrigger, layoutHints);
bGLBExtTrigger->SetState(kButtonUp); bGLBExtTrigger->SetState(kButtonUp);
TGCheckButton * bTRGExtTrigger = new TGCheckButton(vTRGMsk5, "", 1); vTRGMsk5->AddFrame(bTRGExtTrigger, layoutHints); bTRGExtTrigger = new TGCheckButton(vTRGMsk5, "", 1); vTRGMsk5->AddFrame(bTRGExtTrigger, layoutHints);
bTRGExtTrigger->SetState(kButtonUp); bTRGExtTrigger->SetState(kButtonUp);
TGCheckButton * bTRGOUTExtTrigger = new TGCheckButton(vTRGMsk5, "", 1); vTRGMsk5->AddFrame(bTRGOUTExtTrigger, layoutHints); bTRGOUTExtTrigger = new TGCheckButton(vTRGMsk5, "", 1); vTRGMsk5->AddFrame(bTRGOUTExtTrigger, layoutHints);
bTRGExtTrigger->SetState(kButtonUp); bTRGExtTrigger->SetState(kButtonUp);
@ -315,23 +343,23 @@ BoardSetting::BoardSetting(const TGWindow *p, UInt_t w, UInt_t h, Digitizer ** d
TGLabel * lbSWTrigger = new TGLabel(vTRGMsk6, "Software"); vTRGMsk6->AddFrame(lbSWTrigger, layoutHints); TGLabel * lbSWTrigger = new TGLabel(vTRGMsk6, "Software"); vTRGMsk6->AddFrame(lbSWTrigger, layoutHints);
TGLabel * lbdummy3 = new TGLabel(vTRGMsk6, "Trg."); vTRGMsk6->AddFrame(lbdummy3, layoutHints); TGLabel * lbdummy3 = new TGLabel(vTRGMsk6, "Trg."); vTRGMsk6->AddFrame(lbdummy3, layoutHints);
TGCheckButton * bGLBSoftwareTrigger = new TGCheckButton(vTRGMsk6, "", 1); vTRGMsk6->AddFrame(bGLBSoftwareTrigger, layoutHints); bGLBSoftwareTrigger = new TGCheckButton(vTRGMsk6, "", 1); vTRGMsk6->AddFrame(bGLBSoftwareTrigger, layoutHints);
bGLBSoftwareTrigger->SetState(kButtonDown); bGLBSoftwareTrigger->SetState(kButtonDown);
TGCheckButton * bTRGSoftwareTrigger = new TGCheckButton(vTRGMsk6, "", 1); vTRGMsk6->AddFrame(bTRGSoftwareTrigger, layoutHints); bTRGSoftwareTrigger = new TGCheckButton(vTRGMsk6, "", 1); vTRGMsk6->AddFrame(bTRGSoftwareTrigger, layoutHints);
bTRGSoftwareTrigger->SetState(kButtonDown); bTRGSoftwareTrigger->SetState(kButtonDown);
TGCheckButton * bTRGOUTSoftwareTrigger = new TGCheckButton(vTRGMsk6, "", 1); vTRGMsk6->AddFrame(bTRGOUTSoftwareTrigger, layoutHints); bTRGOUTSoftwareTrigger = new TGCheckButton(vTRGMsk6, "", 1); vTRGMsk6->AddFrame(bTRGOUTSoftwareTrigger, layoutHints);
bTRGOUTSoftwareTrigger->SetState(kButtonDown); bTRGOUTSoftwareTrigger->SetState(kButtonDown);
TGHorizontalFrame * hframeTRGCfg2 = new TGHorizontalFrame(vTRGCfg); vTRGCfg->AddFrame(hframeTRGCfg2, new TGLayoutHints(kLHintsCenterY | kLHintsRight, 2,2,2,2)); TGHorizontalFrame * hframeTRGCfg2 = new TGHorizontalFrame(vTRGCfg); vTRGCfg->AddFrame(hframeTRGCfg2, new TGLayoutHints(kLHintsCenterY | kLHintsRight, 2,2,2,2));
TGCheckButton * bTRGValMskLVSDGLB = new TGCheckButton(hframeTRGCfg2, "LVSD Global Trg. Valid", 1); hframeTRGCfg2->AddFrame(bTRGValMskLVSDGLB, new TGLayoutHints(kLHintsCenterY , 5, 5, 3, 4)); bTRGValMskLVSDGLB = new TGCheckButton(hframeTRGCfg2, "LVSD Global Trg. Valid", 1); hframeTRGCfg2->AddFrame(bTRGValMskLVSDGLB, new TGLayoutHints(kLHintsCenterY , 5, 5, 3, 4));
TGCheckButton * bTRGValMskLVSDLCL = new TGCheckButton(hframeTRGCfg2, "LVSD Local Trg. Valid", 1); hframeTRGCfg2->AddFrame(bTRGValMskLVSDLCL, new TGLayoutHints(kLHintsCenterY , 5, 5, 3, 4)); bTRGValMskLVSDLCL = new TGCheckButton(hframeTRGCfg2, "LVSD Local Trg. Valid", 1); hframeTRGCfg2->AddFrame(bTRGValMskLVSDLCL, new TGLayoutHints(kLHintsCenterY , 5, 5, 3, 4));
///"Disable External Trigger", ///"Disable External Trigger",
TGCheckButton * bEnableExtTRG = new TGCheckButton(hframeTRGCfg2, "Enable Ext. Trigger", 1); hframeTRGCfg2->AddFrame(bEnableExtTRG, new TGLayoutHints(kLHintsCenterY , 5, 5, 3, 4)); bEnableExtTRG = new TGCheckButton(hframeTRGCfg2, "Enable Ext. Trigger", 1); hframeTRGCfg2->AddFrame(bEnableExtTRG, new TGLayoutHints(kLHintsCenterY , 5, 5, 3, 4));
///"Extended Veto Delay", ///"Extended Veto Delay",
TGLabel * lbExtendVetoDelay = new TGLabel(hframeTRGCfg2, "Extended Veto Delay"); hframeTRGCfg2->AddFrame(lbExtendVetoDelay, new TGLayoutHints(kLHintsCenterY , 5, 5, 3, 4)); TGLabel * lbExtendVetoDelay = new TGLabel(hframeTRGCfg2, "Extended Veto Delay"); hframeTRGCfg2->AddFrame(lbExtendVetoDelay, new TGLayoutHints(kLHintsCenterY , 5, 5, 3, 4));
TGNumberEntry * numExtendVetoDelay = new TGNumberEntry(hframeTRGCfg2, 0, 0, 0, TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative); hframeTRGCfg2->AddFrame(numExtendVetoDelay, new TGLayoutHints(kLHintsCenterY , 5, 5, 3, 4)); numExtendVetoDelay = new TGNumberEntry(hframeTRGCfg2, 0, 0, 0, TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative); hframeTRGCfg2->AddFrame(numExtendVetoDelay, new TGLayoutHints(kLHintsCenterY , 5, 5, 3, 4));
numExtendVetoDelay->Resize(70, 17); numExtendVetoDelay->Resize(70, 17);
@ -343,19 +371,35 @@ BoardSetting::BoardSetting(const TGWindow *p, UInt_t w, UInt_t h, Digitizer ** d
TGHorizontalFrame * hframeFrontIOCtrl = new TGHorizontalFrame(vFrontIOCtrl); vFrontIOCtrl->AddFrame(hframeFrontIOCtrl, new TGLayoutHints(kLHintsCenterY, 5,5,3,4)); TGHorizontalFrame * hframeFrontIOCtrl = new TGHorizontalFrame(vFrontIOCtrl); vFrontIOCtrl->AddFrame(hframeFrontIOCtrl, new TGLayoutHints(kLHintsCenterY, 5,5,3,4));
TGLabel * lbLEMOIO = new TGLabel(hframeFrontIOCtrl, "LEMO I/O"); hframeFrontIOCtrl->AddFrame(lbLEMOIO, new TGLayoutHints(kLHintsCenterY , 5, 5, 3, 4)); TGLabel * lbLEMOIO = new TGLabel(hframeFrontIOCtrl, "LEMO I/O"); hframeFrontIOCtrl->AddFrame(lbLEMOIO, new TGLayoutHints(kLHintsCenterY , 5, 5, 3, 4));
TGComboBox * cbLEMOIO = new TGComboBox(hframeFrontIOCtrl, "",1); hframeFrontIOCtrl->AddFrame(cbLEMOIO, new TGLayoutHints(kLHintsCenterY , 5, 5, 3, 4)); cbLEMOIO = new TGComboBox(hframeFrontIOCtrl, "",1); hframeFrontIOCtrl->AddFrame(cbLEMOIO, new TGLayoutHints(kLHintsCenterY , 5, 5, 3, 4));
cbLEMOIO->EnableTextInput(false); cbLEMOIO->EnableTextInput(false);
cbLEMOIO->AddEntry("NIM", 0); cbLEMOIO->AddEntry("NIM", 0);
cbLEMOIO->AddEntry("TTL", 1); cbLEMOIO->AddEntry("TTL", 1);
cbLEMOIO->Select(0); cbLEMOIO->Select(0);
cbLEMOIO->Resize(50, 20); cbLEMOIO->Resize(50, 20);
TGCheckButton * bTRGOUTImp= new TGCheckButton(hframeFrontIOCtrl, "TRG-OUT high impe.", 1); hframeFrontIOCtrl->AddFrame(bTRGOUTImp, layoutHints); ///use 0x811C, bit:[14:19], 6bits
TGLabel * lbTRGOUTMODE2 = new TGLabel(hframeFrontIOCtrl, "TRG-OUT Mode"); hframeFrontIOCtrl->AddFrame(lbTRGOUTMODE2, new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 5, 5, 3, 4));
cbTRGOUTmode = new TGComboBox(hframeFrontIOCtrl, "",1); hframeFrontIOCtrl->AddFrame(cbTRGOUTmode, new TGLayoutHints(kLHintsCenterY , 5, 5, 3, 4));
cbTRGOUTmode->EnableTextInput(false);
cbTRGOUTmode->AddEntry("force TRG-OUT is 0", 0x08000);
cbTRGOUTmode->AddEntry("force TRG-OUT is 1", 0x0C000);
cbTRGOUTmode->AddEntry("Trigger", 0x00000);
cbTRGOUTmode->AddEntry("Channel Probe", 0x20000);
cbTRGOUTmode->AddEntry("S-IN", 0x30000);
cbTRGOUTmode->AddEntry("RUN", 0x10000);
cbTRGOUTmode->AddEntry("Sync Clock", 0x50000);
cbTRGOUTmode->AddEntry("Clock Phase", 0x90000);
cbTRGOUTmode->AddEntry("BUSY/UNLOCK", 0xD0000);
cbTRGOUTmode->Select(0);
cbTRGOUTmode->Resize(160, 20);
bTRGOUTImp = new TGCheckButton(hframeFrontIOCtrl, "TRG-OUT high impe.", 1); hframeFrontIOCtrl->AddFrame(bTRGOUTImp, layoutHints);
bTRGOUTImp->SetState(kButtonUp); bTRGOUTImp->SetState(kButtonUp);
TGHorizontalFrame * hframeFrontIOCtrl1 = new TGHorizontalFrame(vFrontIOCtrl); vFrontIOCtrl->AddFrame(hframeFrontIOCtrl1, new TGLayoutHints(kLHintsCenterY , 5,5,3,4)); TGHorizontalFrame * hframeFrontIOCtrl1 = new TGHorizontalFrame(vFrontIOCtrl); vFrontIOCtrl->AddFrame(hframeFrontIOCtrl1, new TGLayoutHints(kLHintsCenterY , 5,5,3,4));
TGLabel * lbTRGINCtrl = new TGLabel(hframeFrontIOCtrl1, "TRG-IN control"); hframeFrontIOCtrl1->AddFrame(lbTRGINCtrl, new TGLayoutHints(kLHintsCenterY | kLHintsLeft , 5, 5, 3, 4)); TGLabel * lbTRGINCtrl = new TGLabel(hframeFrontIOCtrl1, "TRG-IN control"); hframeFrontIOCtrl1->AddFrame(lbTRGINCtrl, new TGLayoutHints(kLHintsCenterY | kLHintsLeft , 5, 5, 3, 4));
TGComboBox * cbTRGINCtrl = new TGComboBox(hframeFrontIOCtrl1, "",1); hframeFrontIOCtrl1->AddFrame(cbTRGINCtrl, new TGLayoutHints(kLHintsCenterY | kLHintsCenterX, 5, 5, 3, 4)); cbTRGINCtrl = new TGComboBox(hframeFrontIOCtrl1, "",1); hframeFrontIOCtrl1->AddFrame(cbTRGINCtrl, new TGLayoutHints(kLHintsCenterY | kLHintsCenterX, 5, 5, 3, 4));
cbTRGINCtrl->EnableTextInput(false); cbTRGINCtrl->EnableTextInput(false);
cbTRGINCtrl->AddEntry("trigger sync with the edge of the TRIG-IN", 0); cbTRGINCtrl->AddEntry("trigger sync with the edge of the TRIG-IN", 0);
cbTRGINCtrl->AddEntry("trigger sync with the whole TRIG-IN", 1); cbTRGINCtrl->AddEntry("trigger sync with the whole TRIG-IN", 1);
@ -363,57 +407,20 @@ BoardSetting::BoardSetting(const TGWindow *p, UInt_t w, UInt_t h, Digitizer ** d
cbTRGINCtrl->Resize(250, 20); cbTRGINCtrl->Resize(250, 20);
TGLabel * lbTRGINMezzanines = new TGLabel(hframeFrontIOCtrl1, "TRG-IN to Mezzanines"); hframeFrontIOCtrl1->AddFrame(lbTRGINMezzanines, new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 5, 5, 3, 4)); TGLabel * lbTRGINMezzanines = new TGLabel(hframeFrontIOCtrl1, "TRG-IN to Mezzanines"); hframeFrontIOCtrl1->AddFrame(lbTRGINMezzanines, new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 5, 5, 3, 4));
TGComboBox * cbTRGINMezzanines = new TGComboBox(hframeFrontIOCtrl1, "",1); hframeFrontIOCtrl1->AddFrame(cbTRGINMezzanines, new TGLayoutHints(kLHintsCenterY | kLHintsCenterX, 5, 5, 3, 4)); cbTRGINMezzanines = new TGComboBox(hframeFrontIOCtrl1, "",1); hframeFrontIOCtrl1->AddFrame(cbTRGINMezzanines, new TGLayoutHints(kLHintsCenterY | kLHintsCenterX, 5, 5, 3, 4));
cbTRGINMezzanines->EnableTextInput(false); cbTRGINMezzanines->EnableTextInput(false);
cbTRGINMezzanines->AddEntry("Trigger local is sync with TRG-IN", 0); cbTRGINMezzanines->AddEntry("Trigger local is sync with TRG-IN", 0);
cbTRGINMezzanines->AddEntry("TRG-IN send to mezzanines (no delay)", 1); cbTRGINMezzanines->AddEntry("TRG-IN send to mezzanines (no delay)", 1);
cbTRGINMezzanines->Select(0); cbTRGINMezzanines->Select(0);
cbTRGINMezzanines->Resize(200, 20); cbTRGINMezzanines->Resize(200, 20);
//TODO Combine them into 1
TGHorizontalFrame * hframeFrontIOCtrl3 = new TGHorizontalFrame(vFrontIOCtrl); vFrontIOCtrl->AddFrame(hframeFrontIOCtrl3, new TGLayoutHints(kLHintsCenterY, 5,5,3,4));
TGLabel * lbTRGOUTMODE2 = new TGLabel(hframeFrontIOCtrl3, "TRG-OUT Mode"); hframeFrontIOCtrl3->AddFrame(lbTRGOUTMODE2, new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 5, 5, 3, 4));
TGComboBox * cbTRGOUTmode = new TGComboBox(hframeFrontIOCtrl3, "",1); hframeFrontIOCtrl3->AddFrame(cbTRGOUTmode, new TGLayoutHints(kLHintsCenterY , 5, 5, 3, 4));
cbTRGOUTmode->EnableTextInput(false);
cbTRGOUTmode->AddEntry("TRG-OUT is mode-select", 0);
cbTRGOUTmode->AddEntry("TRG-OUT is forced", 1);
cbTRGOUTmode->Select(0);
cbTRGOUTmode->Resize(160, 20);
TGComboBox * cbForceTRGOUT = new TGComboBox(hframeFrontIOCtrl3, "",1); hframeFrontIOCtrl3->AddFrame(cbForceTRGOUT, new TGLayoutHints(kLHintsCenterY , 5, 5, 3, 4));
cbForceTRGOUT->EnableTextInput(false);
cbForceTRGOUT->AddEntry("force TRG-OUT is 0", 0);
cbForceTRGOUT->AddEntry("force TRG-OUT is 1", 1);
cbForceTRGOUT->Select(0);
cbForceTRGOUT->Resize(150, 20);
TGComboBox * cbTRGOUTmodeSelec = new TGComboBox(hframeFrontIOCtrl3, "",1); hframeFrontIOCtrl3->AddFrame(cbTRGOUTmodeSelec, new TGLayoutHints(kLHintsCenterY , 5, 5, 3, 4));
cbTRGOUTmodeSelec->EnableTextInput(false);
cbTRGOUTmodeSelec->AddEntry("Trigger", 0);
cbTRGOUTmodeSelec->AddEntry("Motherboard Probe", 1);
cbTRGOUTmodeSelec->AddEntry("Channel Probe", 2);
cbTRGOUTmodeSelec->AddEntry("S-IN", 3);
cbTRGOUTmodeSelec->Select(0);
cbTRGOUTmodeSelec->Resize(150, 20);
TGComboBox * cbTRGOUTMotherProbe = new TGComboBox(hframeFrontIOCtrl3, "",1); hframeFrontIOCtrl3->AddFrame(cbTRGOUTMotherProbe, new TGLayoutHints(kLHintsCenterY , 5, 5, 3, 4));
cbTRGOUTMotherProbe->EnableTextInput(false);
cbTRGOUTMotherProbe->AddEntry("RUN", 0);
cbTRGOUTMotherProbe->AddEntry("Sync Clock", 1);
cbTRGOUTMotherProbe->AddEntry("Clock Phase", 2);
cbTRGOUTMotherProbe->AddEntry("BUSY/UNLOCK", 3);
cbTRGOUTMotherProbe->Select(0);
cbTRGOUTMotherProbe->Resize(100, 20);
///"Front Panel LVDS IO New Features", ///"Front Panel LVDS IO New Features",
///"LVDS IO Data", ///"LVDS IO Data",
///"Analog Monitor Mode ///"Analog Monitor Mode
TGHorizontalFrame * hframeFrontIOCtrl4 = new TGHorizontalFrame(vFrontIOCtrl); vFrontIOCtrl->AddFrame(hframeFrontIOCtrl4, new TGLayoutHints(kLHintsCenterY, 5,5,3,2)); TGHorizontalFrame * hframeFrontIOCtrl2 = new TGHorizontalFrame(vFrontIOCtrl); vFrontIOCtrl->AddFrame(hframeFrontIOCtrl2, new TGLayoutHints(kLHintsCenterY, 5,5,3,2));
TGLabel * lbAnaMonitor = new TGLabel(hframeFrontIOCtrl4, "Analog Monitor Mode (MON/Sigma)"); hframeFrontIOCtrl4->AddFrame(lbAnaMonitor, new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 5, 5, 3, 2)); TGLabel * lbAnaMonitor = new TGLabel(hframeFrontIOCtrl2, "Analog Monitor Mode (MON/Sigma)"); hframeFrontIOCtrl2->AddFrame(lbAnaMonitor, new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 5, 5, 3, 2));
TGComboBox * cbAnaMonitor = new TGComboBox(hframeFrontIOCtrl4, "",1); hframeFrontIOCtrl4->AddFrame(cbAnaMonitor, new TGLayoutHints(kLHintsCenterY , 5, 5, 3, 2)); cbAnaMonitor = new TGComboBox(hframeFrontIOCtrl2, "",1); hframeFrontIOCtrl2->AddFrame(cbAnaMonitor, new TGLayoutHints(kLHintsCenterY , 5, 5, 3, 2));
cbAnaMonitor->EnableTextInput(false); cbAnaMonitor->EnableTextInput(false);
cbAnaMonitor->AddEntry("Trigger Majority", 0); cbAnaMonitor->AddEntry("Trigger Majority", 0);
cbAnaMonitor->AddEntry("Test", 1); cbAnaMonitor->AddEntry("Test", 1);
@ -421,16 +428,20 @@ BoardSetting::BoardSetting(const TGWindow *p, UInt_t w, UInt_t h, Digitizer ** d
cbAnaMonitor->AddEntry("Voltage Level", 4); cbAnaMonitor->AddEntry("Voltage Level", 4);
cbAnaMonitor->Select(0); cbAnaMonitor->Select(0);
cbAnaMonitor->Resize(150, 20); cbAnaMonitor->Resize(150, 20);
cbAnaMonitor->Connect("Changed()", "BoardSetting", this, "SetAnalogMonitorMode()");
cbAnaMonitor->Connect("Changed()", "ChannelSetting", this, "ChangePolarity()"); //Example to call other class
///"Buffer Occupancy Gain ///"Buffer Occupancy Gain
TGLabel * lbBufferOccpGain = new TGLabel(hframeFrontIOCtrl4, "Buffer Occupancy Gain"); hframeFrontIOCtrl4->AddFrame(lbBufferOccpGain, new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 5, 5, 3, 2)); TGLabel * lbBufferOccpGain = new TGLabel(hframeFrontIOCtrl2, "Buffer Occupancy Gain"); hframeFrontIOCtrl2->AddFrame(lbBufferOccpGain, new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 5, 5, 3, 2));
TGNumberEntry * numBufferOccpGain = new TGNumberEntry(hframeFrontIOCtrl4, 0, 0, 0, TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative); hframeFrontIOCtrl4->AddFrame(numBufferOccpGain, new TGLayoutHints(kLHintsCenterY , 5, 5, 3, 2)); numBufferOccpGain = new TGNumberEntry(hframeFrontIOCtrl2, 0, 0, 0, TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative); hframeFrontIOCtrl2->AddFrame(numBufferOccpGain, new TGLayoutHints(kLHintsCenterY , 5, 5, 3, 2));
numBufferOccpGain->SetState(false);
numBufferOccpGain->Resize(70, 17); numBufferOccpGain->Resize(70, 17);
/** //TODO check is VME model
///"Readout Control", ///"Readout Control",
TGGroupFrame * gReadoutCtrl = new TGGroupFrame(vframe, "ReadOut Control", kHorizontalFrame); vframe->AddFrame(gReadoutCtrl ); TGGroupFrame * gReadoutCtrl = new TGGroupFrame(vframe, "ReadOut Control", kHorizontalFrame); vframe->AddFrame(gReadoutCtrl, new TGLayoutHints(kLHintsExpandX) );
TGVerticalFrame * vReadoutCtrl = new TGVerticalFrame(gReadoutCtrl); gReadoutCtrl->AddFrame(vReadoutCtrl, new TGLayoutHints(kLHintsCenterX , 5, 5, 3, 4)); TGVerticalFrame * vReadoutCtrl = new TGVerticalFrame(gReadoutCtrl); gReadoutCtrl->AddFrame(vReadoutCtrl);
TGHorizontalFrame * hReadoutCtrl = new TGHorizontalFrame(vReadoutCtrl); vReadoutCtrl->AddFrame(hReadoutCtrl, new TGLayoutHints(kLHintsCenterY, 5,5,3,4)); TGHorizontalFrame * hReadoutCtrl = new TGHorizontalFrame(vReadoutCtrl); vReadoutCtrl->AddFrame(hReadoutCtrl, new TGLayoutHints(kLHintsCenterY, 5,5,3,4));
TGLabel * lbVMEInterruptLevel = new TGLabel(hReadoutCtrl, "VME Interrupt Level"); hReadoutCtrl->AddFrame(lbVMEInterruptLevel, new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 5, 5, 3, 4)); TGLabel * lbVMEInterruptLevel = new TGLabel(hReadoutCtrl, "VME Interrupt Level"); hReadoutCtrl->AddFrame(lbVMEInterruptLevel, new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 5, 5, 3, 4));
@ -447,28 +458,37 @@ BoardSetting::BoardSetting(const TGWindow *p, UInt_t w, UInt_t h, Digitizer ** d
TGCheckButton * bVMEAlogn64Mode= new TGCheckButton(hReadoutCtrl, "64-bit aligned", 1); hReadoutCtrl->AddFrame(bVMEAlogn64Mode, layoutHints); TGCheckButton * bVMEAlogn64Mode= new TGCheckButton(hReadoutCtrl, "64-bit aligned", 1); hReadoutCtrl->AddFrame(bVMEAlogn64Mode, layoutHints);
bVMEAlogn64Mode->SetState(kButtonUp); bVMEAlogn64Mode->SetState(kButtonUp);
TGCheckButton * bVMEBaseAddRelocation= new TGCheckButton(hReadoutCtrl, "VME baase addr. relocation", 1); hReadoutCtrl->AddFrame(bVMEBaseAddRelocation, layoutHints);
bVMEBaseAddRelocation->SetState(kButtonUp);
*/
///"Readout Status" TGHorizontalFrame * hReadoutCtrl2 = new TGHorizontalFrame(vReadoutCtrl); vReadoutCtrl->AddFrame(hReadoutCtrl2, new TGLayoutHints(kLHintsCenterY, 5,5,3,4));
//TGCheckButton * bVMEBaseAddRelocation= new TGCheckButton(hReadoutCtrl, "VME baase addr. relocation", 1); hReadoutCtrl->AddFrame(bVMEBaseAddRelocation, layoutHints);
//bVMEBaseAddRelocation->SetState(kButtonUp);
//Need Relocation address
TGCheckButton * bInteruptReleaseMode= new TGCheckButton(hReadoutCtrl2, "Interrupt Release on Acknowldge", 1); hReadoutCtrl2->AddFrame(bInteruptReleaseMode, layoutHints);
bInteruptReleaseMode->SetState(kButtonUp);
TGCheckButton * bEnableExtendedBlockTransfer= new TGCheckButton(hReadoutCtrl2, "Enable Extended Block Transfer", 1); hReadoutCtrl2->AddFrame(bEnableExtendedBlockTransfer, layoutHints);
bEnableExtendedBlockTransfer->SetState(kButtonUp);
///==========="Readout Status"
TGGroupFrame * gReadoutStatus = new TGGroupFrame(hRow, "Readout Status", kHorizontalFrame); hRow->AddFrame(gReadoutStatus, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 5) ); TGGroupFrame * gReadoutStatus = new TGGroupFrame(hRow, "Readout Status", kHorizontalFrame); hRow->AddFrame(gReadoutStatus, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 5) );
TGVerticalFrame * vReadoutStatus = new TGVerticalFrame(gReadoutStatus); gReadoutStatus->AddFrame(vReadoutStatus, new TGLayoutHints(kLHintsExpandY , 5, 5, 3, 2)); TGVerticalFrame * vReadoutStatus = new TGVerticalFrame(gReadoutStatus); gReadoutStatus->AddFrame(vReadoutStatus, new TGLayoutHints(kLHintsExpandY , 5, 5, 3, 2));
TGTextEntry * txtEventReady = new TGTextEntry(vReadoutStatus, new TGTextBuffer(1)); vReadoutStatus->AddFrame(txtEventReady, new TGLayoutHints(kLHintsRight, 5,5,3,3)); TGTextEntry * txtEventReady = new TGTextEntry(vReadoutStatus, new TGTextBuffer(1)); vReadoutStatus->AddFrame(txtEventReady, new TGLayoutHints(kLHintsRight, 5,5,6,6));
txtEventReady->SetEnabled(false); txtEventReady->SetEnabled(false);
txtEventReady->SetText( "Event Ready" ); txtEventReady->SetText( "Event Ready" );
txtEventReady->SetTextColor(kGreen); txtEventReady->SetTextColor(blue);
TGTextEntry * txtBusError = new TGTextEntry(vReadoutStatus, new TGTextBuffer(1)); vReadoutStatus->AddFrame(txtBusError, new TGLayoutHints(kLHintsRight, 5,5,3,3)); TGTextEntry * txtBusError = new TGTextEntry(vReadoutStatus, new TGTextBuffer(1)); vReadoutStatus->AddFrame(txtBusError, new TGLayoutHints(kLHintsRight, 5,5,6,6));
txtBusError->SetEnabled(false); txtBusError->SetEnabled(false);
txtBusError->SetText( "no Bus Error" ); txtBusError->SetText( "no Bus Error" );
txtBusError->SetTextColor(kGreen); txtBusError->SetTextColor(blue);
TGTextEntry * txtVMEFIFO = new TGTextEntry(vReadoutStatus, new TGTextBuffer(1)); vReadoutStatus->AddFrame(txtVMEFIFO, new TGLayoutHints(kLHintsRight, 5,5,3,3)); TGTextEntry * txtVMEFIFO = new TGTextEntry(vReadoutStatus, new TGTextBuffer(1)); vReadoutStatus->AddFrame(txtVMEFIFO, new TGLayoutHints(kLHintsRight, 5,5,6,6));
txtVMEFIFO->SetEnabled(false); txtVMEFIFO->SetEnabled(false);
txtVMEFIFO->SetText( "VME FIFO EMPTY" ); txtVMEFIFO->SetText( "VME FIFO EMPTY" );
txtVMEFIFO->SetTextColor(kGreen); txtVMEFIFO->SetTextColor(blue);
///===== LVSD ///===== LVSD
@ -476,10 +496,8 @@ BoardSetting::BoardSetting(const TGWindow *p, UInt_t w, UInt_t h, Digitizer ** d
TGLabel * lbLVSD = new TGLabel(hframeLVSD, "LVSD Control is not impletmented."); hframeLVSD->AddFrame(lbLVSD, new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 5, 5, 3, 2)); TGLabel * lbLVSD = new TGLabel(hframeLVSD, "LVSD Control is not impletmented."); hframeLVSD->AddFrame(lbLVSD, new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 5, 5, 3, 2));
///==================== Read digitizer Setting ///==================== Read digitizer Setting
ReadDigitizerSetting(); ChangeBoard();
fMain->MapSubwindows(); fMain->MapSubwindows();
fMain->Resize(fMain->GetDefaultSize()); fMain->Resize(fMain->GetDefaultSize());
@ -491,14 +509,75 @@ BoardSetting::~BoardSetting(){
isOpened = false; isOpened = false;
delete boardIDEntry; //delete boardIDEntry;
//for( int i = 0; i < NUM_BOARD_INFO; i++) delete entry[i];
//
//for( int i = 0; i < nDigi; i++) digi[i] = NULL;
//delete [] entry; /*
delete enPLLStatus;
delete enTempStatus;
delete enADCPwrStatus;
/// board settings
delete bAutoDataFlush;
delete bDecimateWF;
delete bWFRecord;
delete bTrigPropa;
delete bExtrac2;
delete bDualTrace; delete bDualTrace;
delete cbAP1; delete cbAP1;
delete cbAP2; delete cbAP2; /// for ComboBox for analog probe 2
delete cbDP; delete cbDP;
delete cbAggOrg;
delete numAggBLT; /// number of Agg pre Block transfer
delete cbFanCtrl;
/// ACQ control
delete cbAcqMode;
delete bAcqArm;
delete cbPLLref;
/// Trigger control
delete cbGbTRGMskCh[8];
delete cbTRGValMskCh[8];
delete cbTRGOUTMskCh[8];
delete numMajorCoinWin;
delete cbTRGMODE;
delete cbTRGOUTMODE;
delete GlbMajorLevel;
delete TRGMajorLevel;
delete TRGOUTMajorLevel;
delete bGLBLVDSTrigger;
delete bTRGOUTLVDSTrigger;
delete bGLBExtTrigger;
delete bTRGExtTrigger;
delete bTRGOUTExtTrigger;
delete bGLBSoftwareTrigger;
delete bTRGSoftwareTrigger;
delete bTRGOUTSoftwareTrigger;
delete bTRGValMskLVSDGLB;
delete bTRGValMskLVSDLCL;
delete bEnableExtTRG;
delete numExtendVetoDelay;
/// Front Panel IO Control
delete cbLEMOIO;
delete cbTRGOUTmode;
delete bTRGOUTImp;
delete cbTRGINCtrl;
delete cbTRGINMezzanines;
delete cbAnaMonitor;
delete numBufferOccpGain;
*/
/// fMain must be delete last; /// fMain must be delete last;
fMain->Cleanup(); fMain->Cleanup();
@ -506,13 +585,82 @@ BoardSetting::~BoardSetting(){
} }
void BoardSetting::ReadDigitizerSetting(){
}
void BoardSetting::ChangeBoard(){ void BoardSetting::ChangeBoard(){
int boardID = boardIDEntry->GetNumber(); int boardID = boardIDEntry->GetNumber();
if( digi == NULL ) {
printf("no didgitizers\n");
}else{
digi[boardID]->PrintBoard();
}
for( int i = 0; i < NUM_BOARD_INFO; i++){
switch (i) {
case 0 : entry[i]->SetText( Form("%s", (digi[boardID]->GetModelName()).c_str()) ); break;
case 1 :
switch (digi[boardID]->GetDPPType()){
case V1724_DPP_PHA_CODE: entry[i]->SetText("DPP-PHA "); break;
case V1720_DPP_CI_CODE : entry[i]->SetText("DPP-CI"); break;
case V1720_DPP_PSD_CODE: entry[i]->SetText("DPP-PSD "); break;
case V1751_DPP_PSD_CODE: entry[i]->SetText("DPP-PSD "); break;
case V1751_DPP_ZLE_CODE: entry[i]->SetText("DPP-ZLE "); break;
case V1743_DPP_CI_CODE: entry[i]->SetText("DPP-PSD "); break;
case V1740_DPP_QDC_CODE: entry[i]->SetText("DPP-QDC "); break;
case V1730_DPP_PSD_CODE: entry[i]->SetText("DPP-PSD "); break;
case V1730_DPP_PHA_CODE: entry[i]->SetText("DPP-PHA "); break;
case V1730_DPP_ZLE_CODE: entry[i]->SetText("DPP-ZLE "); break;
case V1730_DPP_DAW_CODE: entry[i]->SetText("DPP-DAW "); break;
}
break;
case 2 : entry[i]->SetText( Form("%s", digi[boardID]->GetLinkType() == CAEN_DGTZ_USB ? "USB" : "Optical Link") ); break;
case 3 : entry[i]->SetText( Form("%d", digi[boardID]->GetSerialNumber() ) ); break;
case 4 : entry[i]->SetText( Form("%d", digi[boardID]->GetNChannel() ) ); break;
case 5 : entry[i]->SetText( Form("%0.f MHz = %.1f ns", 1000/digi[boardID]->GetCh2ns(), digi[boardID]->GetCh2ns()) ); break;
case 6 : entry[i]->SetText( Form("%d", digi[boardID]->GetADCBits() ) ); break;
case 7 : entry[i]->SetText( Form("%s", (digi[boardID]->GetROCVersion()).c_str() ) ); break;
case 8 : entry[i]->SetText( Form("%s", (digi[boardID]->GetAMCVersion()).c_str() ) ); break;
}
}
///================ Board Failure Status
if( digi[boardID]->GetDPPType() == V1730_DPP_PHA_CODE ) {
pha = dynamic_cast<DigitizerPHA*> (digi[boardID]);
unsigned int temp = pha->ReadRegister(Register::BoardFailureStatus);
if( (temp & 0x10) == 0 ) {
enPLLStatus->SetText( "OK" ); enPLLStatus->SetTextColor(1);
}else{
enPLLStatus->SetText( "Lost Lock" ); enPLLStatus->SetTextColor(red);
}
if( (temp & 0x20) == 0 ) {
enTempStatus->SetText( "OK" ); enTempStatus->SetTextColor(1);
}else{
enTempStatus->SetText( "Failure" ); enTempStatus->SetTextColor(red);
}
if( (temp & 0x40) == 0 ) {
enADCPwrStatus->SetText( "OK" ); enADCPwrStatus->SetTextColor(1);
}else{
enADCPwrStatus->SetText( "Failure" ); enADCPwrStatus->SetTextColor(red);
}
pha->PrintBoardConfiguration();
bAutoDataFlush->SetState( pha->GetSetting(Setting::PHA::AutoDataFlush_board_bool) == 1.0 ? kButtonDown : kButtonUp );
bDecimateWF->SetState( pha->GetSetting(Setting::PHA::DecimateWaveForm_board_bool) == 1.0 ? kButtonDown : kButtonUp );
bWFRecord->SetState( pha->GetSetting(Setting::PHA::WavefromRecording_board_bool) == 1.0? kButtonDown : kButtonUp );
bTrigPropa->SetState( pha->GetSetting(Setting::PHA::TriggerPropapation_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);
}
return; return;
} }
@ -561,3 +709,16 @@ void BoardSetting::SetAggregateOrganization(){
void BoardSetting::SetReadOutAggregate(){ void BoardSetting::SetReadOutAggregate(){
printf("========== SetReadOutAggregate, %d \n", (int) numAggBLT->GetNumber()); printf("========== SetReadOutAggregate, %d \n", (int) numAggBLT->GetNumber());
} }
void BoardSetting::SetAnalogMonitorMode(){
printf("========== SetAnalogMonitorMode, %d \n", cbAnaMonitor->GetSelected());
if( cbAnaMonitor->GetSelected() == 3) {
numBufferOccpGain->SetState(true);
}else{
numBufferOccpGain->SetState(false);
}
}
void BoardSetting::SoftwareReset(){
}

View File

@ -18,30 +18,89 @@ class BoardSetting{
private: private:
TGMainFrame * fMain; TGMainFrame * fMain;
Pixel_t red, blue;
TGNumberEntry * boardIDEntry; TGNumberEntry * boardIDEntry;
TGTextEntry * entry[NUM_BOARD_INFO]; TGTextEntry * entry[NUM_BOARD_INFO];
int nDigi;
Digitizer ** digi; Digitizer ** digi;
DigitizerPHA * pha;
/// board failure status
TGTextEntry * enPLLStatus;
TGTextEntry * enTempStatus;
TGTextEntry * enADCPwrStatus;
/// board settings
TGCheckButton * bAutoDataFlush;
TGCheckButton * bDecimateWF;
TGCheckButton * bWFRecord;
TGCheckButton * bTrigPropa;
TGCheckButton * bExtrac2;
TGCheckButton * bDualTrace; TGCheckButton * bDualTrace;
TGComboBox * cbAP1; TGComboBox * cbAP1;
TGComboBox * cbAP2; /// for ComboBox for analog probe 2 TGComboBox * cbAP2; /// for ComboBox for analog probe 2
TGComboBox * cbDP; TGComboBox * cbDP;
TGComboBox * cbAggOrg; TGComboBox * cbAggOrg;
TGNumberEntry * numAggBLT; /// number of Agg pre Block transfer TGNumberEntry * numAggBLT; /// number of Agg pre Block transfer
TGComboBox * cbFanCtrl;
/// ACQ control
TGComboBox * cbAcqMode;
TGCheckButton * bAcqArm;
TGComboBox * cbPLLref;
/// Trigger control
TGCheckButton * cbGbTRGMskCh[8];
TGCheckButton * cbTRGValMskCh[8];
TGCheckButton * cbTRGOUTMskCh[8];
TGNumberEntry * numMajorCoinWin; TGNumberEntry * numMajorCoinWin;
TGComboBox * cbTRGMODE;
TGComboBox * cbTRGOUTMODE;
TGNumberEntry * GlbMajorLevel; TGNumberEntry * GlbMajorLevel;
TGNumberEntry * TRGMajorLevel; TGNumberEntry * TRGMajorLevel;
TGNumberEntry * TRGOUTMajorLevel; TGNumberEntry * TRGOUTMajorLevel;
TGCheckButton * bGLBLVDSTrigger;
TGCheckButton * bTRGOUTLVDSTrigger;
TGCheckButton * bGLBExtTrigger;
TGCheckButton * bTRGExtTrigger;
TGCheckButton * bTRGOUTExtTrigger;
TGCheckButton * bGLBSoftwareTrigger;
TGCheckButton * bTRGSoftwareTrigger;
TGCheckButton * bTRGOUTSoftwareTrigger;
TGCheckButton * bTRGValMskLVSDGLB;
TGCheckButton * bTRGValMskLVSDLCL;
TGCheckButton * bEnableExtTRG;
TGNumberEntry * numExtendVetoDelay;
/// Front Panel IO Control
TGComboBox * cbLEMOIO;
TGComboBox * cbTRGOUTmode;
TGCheckButton * bTRGOUTImp;
TGComboBox * cbTRGINCtrl;
TGComboBox * cbTRGINMezzanines;
TGComboBox * cbAnaMonitor;
TGNumberEntry * numBufferOccpGain;
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);
virtual ~BoardSetting(); virtual ~BoardSetting();
void CloseWindow() { printf("close BoardSetting window\n"); delete this; } void CloseWindow() {
printf("close BoardSetting window\n");
for( int i = 0; i < nDigi; i++) digi[i] = NULL;
delete this;
}
void ChangeBoard(); void ChangeBoard();
///=== Board Configure ///=== Board Configure
@ -54,11 +113,12 @@ class BoardSetting{
void SetAnalogProbe1(); void SetAnalogProbe1();
void SetAnalogProbe2(); void SetAnalogProbe2();
void SetDigitalProbe(); void SetDigitalProbe();
void SoftwareReset();
void SetAggregateOrganization(); void SetAggregateOrganization();
void SetReadOutAggregate(); void SetReadOutAggregate();
void ReadDigitizerSetting(); void SetAnalogMonitorMode();
bool isOpened; bool isOpened;

View File

@ -10,75 +10,29 @@
#include "channelSetting.h" #include "channelSetting.h"
//TODO set MAX
///------------------------------------------------ NAME, DIGI, unit ... MAX
TString settingName[NUM_CHANNEL_SETTING][3] = {{"Record Length", "3", "us"},
{"Events / Aggregate", "4", ""},
{"Pre-Trigger Length", "3", "us"},
{"Trigger Threshold", "5", "LSD"},
{"Trigger Holdoff Width", "3", "us"},
{"DPP Algorithm Control", "8", ""},
{"Channel DC offset", "2", "%"},
{"Temperature", "2", "C"},
{"Veto Width", "3", "us"},
{"Trigger Filter Smoothing", "3", "smp"},
{"Input Rising Time", "3", "ns"},
{"Trapezoid Rise Time", "4", "ns"},
{"Trapezoid Flat Top", "4", "ns"},
{"Peaking Time", "4", "ns"},
{"Decay Time", "4", "us"},
{"Rise Time Valid. Win.", "4", "us"},
{"Peak Holdoff", "4", "ns"},
{"Shaped Trigger Width", "4", "us"},
{"DPP Algorithm Control 2", "8", ""},
{"Fine Gain", "3", ""}
};
///const uint32_t RecordLength_G = 0x1020; /// R/W
///const uint32_t InputDynamicRange = 0x1028; /// R/W
///const uint32_t NumberEventsPerAggregate_G = 0x1034; /// R/W
///const uint32_t PreTrigger = 0x1038; /// R/W
///const uint32_t TriggerThreshold = 0x106C; /// R/W
///const uint32_t TriggerHoldOffWidth = 0x1074; /// R/W
///const uint32_t DPPAlgorithmControl = 0x1080; /// R/W
///const uint32_t ChannelDCOffset = 0x1098; /// R/W
///const uint32_t ChannelADCTemperature = 0x10A8; /// R
///const uint32_t VetoWidth = 0x10D4; /// R/W
/// const uint32_t RCCR2SmoothingFactor = 0x1054; /// R/W Trigger Filter smoothing, triggerSmoothingFactor
/// const uint32_t InputRiseTime = 0x1058; /// R/W OK
/// const uint32_t TrapezoidRiseTime = 0x105C; /// R/W OK
/// const uint32_t TrapezoidFlatTop = 0x1060; /// R/W OK
/// const uint32_t PeakingTime = 0x1064; /// R/W OK
/// const uint32_t DecayTime = 0x1068; /// R/W OK
/// const uint32_t RiseTimeValidationWindow = 0x1070; /// R/W OK
/// const uint32_t PeakHoldOff = 0x1078; /// R/W OK
/// const uint32_t ShapedTriggerWidth = 0x1084; /// R/W not sure
/// const uint32_t DPPAlgorithmControl2_G = 0x10A0; /// R/W OK
/// const uint32_t FineGain = 0x10C4; /// R/W OK
ChannelSetting::ChannelSetting(const TGWindow *p, UInt_t w, UInt_t h, Digitizer ** digi, int nDigi){ ChannelSetting::ChannelSetting(const TGWindow *p, UInt_t w, UInt_t h, Digitizer ** digi, int nDigi){
this->digi = digi; this->digi = digi;
Pixel_t red, green;
gClient->GetColorByName("red", red);
gClient->GetColorByName("green", green);
fMain = new TGMainFrame(p,w,h); fMain = new TGMainFrame(p,w,h);
fMain->SetWindowName("Channel Settings "); fMain->SetWindowName("Channel Settings ");
fMain->Connect("CloseWindow()", "ChannelSetting", this, "CloseWindow()"); fMain->Connect("CloseWindow()", "ChannelSetting", this, "CloseWindow()");
TGLayoutHints * layoutHints = new TGLayoutHints(kLHintsCenterX | kLHintsCenterY, 5,5,3,3); /// left, right, top, bottom TGLayoutHints * layoutHints = new TGLayoutHints(kLHintsCenterX | kLHintsCenterY, 5,5,3,3); /// left, right, top, bottom
TGLayoutHints * layoutHintsR = new TGLayoutHints(kLHintsRight, 5,5,6,5); /// left, right, top, bottom
TGVerticalFrame * vframe = new TGVerticalFrame(fMain); TGVerticalFrame * vframe = new TGVerticalFrame(fMain);
fMain->AddFrame(vframe, new TGLayoutHints(kLHintsCenterX, 2,2,2,2)); fMain->AddFrame(vframe, new TGLayoutHints(kLHintsCenterX, 2,2,2,2));
TGHorizontalFrame *hframe0 = new TGHorizontalFrame(vframe, w, 50 ); vframe->AddFrame(hframe0, new TGLayoutHints(kLHintsCenterX, 2,2,2,2));
///==========Board choose ///==========Board choose
TGHorizontalFrame *hframe0 = new TGHorizontalFrame(vframe, w, 50 ); TGLabel * lb0 = new TGLabel(hframe0, "Module ID :"); hframe0->AddFrame(lb0, new TGLayoutHints(kLHintsCenterX | kLHintsCenterY, 5, 5, 3, 4));
vframe->AddFrame(hframe0, new TGLayoutHints(kLHintsCenterX, 2,2,2,2)); boardIDEntry = new TGNumberEntry(hframe0, 0, 0, 0, TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative); hframe0->AddFrame(boardIDEntry, new TGLayoutHints(kLHintsCenterX , 5, 5, 3, 4));
TGLabel * lb0 = new TGLabel(hframe0, "Module ID :");
hframe0->AddFrame(lb0, new TGLayoutHints(kLHintsCenterX | kLHintsCenterY, 5, 5, 3, 4));
boardIDEntry = new TGNumberEntry(hframe0, 0, 0, 0, TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative);
boardIDEntry->SetWidth(50); boardIDEntry->SetWidth(50);
boardIDEntry->SetLimits(TGNumberFormat::kNELLimitMinMax, 0, nDigi); boardIDEntry->SetLimits(TGNumberFormat::kNELLimitMinMax, 0, nDigi);
boardIDEntry->Connect("Modified()", "ChannelSetting", this, "ChangeBoard()"); boardIDEntry->Connect("Modified()", "ChannelSetting", this, "ChangeBoard()");
@ -86,26 +40,38 @@ ChannelSetting::ChannelSetting(const TGWindow *p, UInt_t w, UInt_t h, Digitizer
NChannel = 16 ;// digi[0]->GetNChannel(); NChannel = 16 ;// digi[0]->GetNChannel();
hframe0->AddFrame(boardIDEntry, new TGLayoutHints(kLHintsCenterX , 5, 5, 3, 4)); TGLabel * lb1 = new TGLabel(hframe0, "Channel :"); hframe0->AddFrame(lb1, new TGLayoutHints(kLHintsCenterX | kLHintsCenterY, 5, 5, 3, 4));
TGLabel * lb1 = new TGLabel(hframe0, "Channel :");
hframe0->AddFrame(lb1, new TGLayoutHints(kLHintsCenterX | kLHintsCenterY, 5, 5, 3, 4));
chIDEntry = new TGNumberEntry(hframe0, 0, 0, 0, TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative); chIDEntry = new TGNumberEntry(hframe0, 0, 0, 0, TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative);
chIDEntry->SetWidth(50); chIDEntry->SetWidth(50);
chIDEntry->SetLimits(TGNumberFormat::kNELLimitMinMax, 0, NChannel-1); chIDEntry->SetLimits(TGNumberFormat::kNELLimitMinMax, 0, NChannel-1);
chIDEntry->Connect("Modified()", "ChannelSetting", this, "ChangeCh()"); chIDEntry->Connect("Modified()", "ChannelSetting", this, "ChangeCh()");
hframe0->AddFrame(chIDEntry, new TGLayoutHints(kLHintsCenterX , 5, 5, 3, 4)); hframe0->AddFrame(chIDEntry, new TGLayoutHints(kLHintsCenterX , 5, 5, 3, 4));
///const uint32_t ChannelADCTemperature = 0x10A8; /// R
TGLabel * lbTemp = new TGLabel(hframe0, "Temperature [C] :"); hframe0->AddFrame(lbTemp, new TGLayoutHints(kLHintsCenterX | kLHintsCenterY, 5, 5, 3, 4));
TGTextEntry * eTemp = new TGTextEntry(hframe0, new TGTextBuffer(1)); hframe0->AddFrame(eTemp, new TGLayoutHints(kLHintsRight, 5,5,3,4));
eTemp->SetEnabled(false);
eTemp->SetText( "0" );
eTemp->Resize(50,20);
int boardID = boardIDEntry->GetNumber(); int boardID = boardIDEntry->GetNumber();
int ch = chIDEntry->GetNumber(); int ch = chIDEntry->GetNumber();
int width = 80; int width = 80;
TGGroupFrame * gfInput = new TGGroupFrame(vframe, "Input / Trigger", kHorizontalFrame); vframe->AddFrame(gfInput, new TGLayoutHints(kLHintsExpandX));
TGVerticalFrame * vfInput = new TGVerticalFrame(gfInput); gfInput->AddFrame(vfInput); TGHorizontalFrame *hframe1 = new TGHorizontalFrame(vframe, w, 50 ); vframe->AddFrame(hframe1, new TGLayoutHints(kLHintsCenterX, 2,2,2,2));
TGHorizontalFrame * hfInput1 = new TGHorizontalFrame(vfInput); vfInput->AddFrame(hfInput1, layoutHints);
///================== Input Setting
TGGroupFrame * gfInput = new TGGroupFrame(hframe1, "Input / Misc.", kHorizontalFrame); hframe1->AddFrame(gfInput, new TGLayoutHints(kLHintsExpandY));
TGHorizontalFrame * hfInput = new TGHorizontalFrame(gfInput); gfInput->AddFrame(hfInput);
TGVerticalFrame * vfInput1 = new TGVerticalFrame(hfInput); hfInput->AddFrame(vfInput1);
TGVerticalFrame * vfInput2 = new TGVerticalFrame(hfInput); hfInput->AddFrame(vfInput2);
///----------- on/off ///----------- on/off
TGLabel * lbOnOff = new TGLabel(hfInput1, "On/Off"); hfInput1->AddFrame(lbOnOff, new TGLayoutHints( kLHintsCenterY, 5, 5, 3, 4)); TGLabel * lbOnOff = new TGLabel(vfInput1, "On/Off"); vfInput1->AddFrame(lbOnOff, layoutHintsR);
cbOnOff = new TGComboBox(hfInput1); hfInput1->AddFrame(cbOnOff, new TGLayoutHints(kLHintsCenterY, 5,5,3,4)); cbOnOff = new TGComboBox(vfInput2); vfInput2->AddFrame(cbOnOff, layoutHints);
cbOnOff->AddEntry("ON", 1); cbOnOff->AddEntry("ON", 1);
cbOnOff->AddEntry("off", 0); cbOnOff->AddEntry("off", 0);
cbOnOff->Resize(width, 20); cbOnOff->Resize(width, 20);
@ -114,8 +80,8 @@ ChannelSetting::ChannelSetting(const TGWindow *p, UInt_t w, UInt_t h, Digitizer
///----------- Polarity ///----------- Polarity
TGLabel * lbPol = new TGLabel(hfInput1, "Polarity");hfInput1->AddFrame(lbPol, new TGLayoutHints( kLHintsCenterY, 5, 5, 3, 4)); TGLabel * lbPol = new TGLabel(vfInput1, "Polarity");vfInput1->AddFrame(lbPol, layoutHintsR);
cbPolarity = new TGComboBox(hfInput1); hfInput1->AddFrame(cbPolarity, new TGLayoutHints(kLHintsCenterY, 5,5,3,4)); cbPolarity = new TGComboBox(vfInput2); vfInput2->AddFrame(cbPolarity, layoutHints);
cbPolarity->AddEntry("Positive +", 1); cbPolarity->AddEntry("Positive +", 1);
cbPolarity->AddEntry("Negative -", 0); cbPolarity->AddEntry("Negative -", 0);
cbPolarity->Resize(width, 20); cbPolarity->Resize(width, 20);
@ -124,18 +90,125 @@ ChannelSetting::ChannelSetting(const TGWindow *p, UInt_t w, UInt_t h, Digitizer
///---------- Input Dynamic Range ///---------- Input Dynamic Range
TGLabel * lbInputDynamicRange = new TGLabel(hfInput1, "Input Range");hfInput1->AddFrame(lbInputDynamicRange, new TGLayoutHints( kLHintsCenterY, 5, 5, 3, 4)); TGLabel * lbInputDynamicRange = new TGLabel(vfInput1, "Input Range");vfInput1->AddFrame(lbInputDynamicRange, layoutHintsR);
cbInputDynamicRange = new TGComboBox(hfInput1); hfInput1->AddFrame(cbInputDynamicRange, new TGLayoutHints(kLHintsCenterY, 5,5,3,4)); cbInputDynamicRange = new TGComboBox(vfInput2); vfInput2->AddFrame(cbInputDynamicRange, layoutHints);
cbInputDynamicRange->AddEntry("2.0 Vpp", 0); cbInputDynamicRange->AddEntry("2.0 Vpp", 0);
cbInputDynamicRange->AddEntry("0.5 Vpp", 1); cbInputDynamicRange->AddEntry("0.5 Vpp", 1);
cbInputDynamicRange->Resize(width, 20); cbInputDynamicRange->Resize(width, 20);
cbInputDynamicRange->Select(0); cbInputDynamicRange->Select(0);
///---------- Record Length ///---------- Record Length
TGLabel * lbRecordLength = new TGLabel(hfInput1, "Record Length");hfInput1->AddFrame(lbRecordLength, new TGLayoutHints( kLHintsCenterY, 5, 5, 3, 4)); TGLabel * lbRecordLength = new TGLabel(vfInput1, "Record Length [ns]"); vfInput1->AddFrame(lbRecordLength, layoutHintsR);
//TGNumberEntry* entry = new TGNumberEntry(hfInput1, temp, 0, 0, digi, TGNumberFormat::kNEANonNegative); TGNumberEntry* numRecordLength = new TGNumberEntry(vfInput2, 20000, 0, 0, TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative); vfInput2->AddFrame(numRecordLength, layoutHints);
// entry[i]->Resize(width, 20); numRecordLength->Resize(width, 20);
///const uint32_t PreTrigger = 0x1038; /// R/W
TGLabel * lbPreTrigger = new TGLabel(vfInput1, "Pre trigger [ns]"); vfInput1->AddFrame(lbPreTrigger, layoutHintsR);
TGNumberEntry* numPreTrigger = new TGNumberEntry(vfInput2, 2000, 0, 0, TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative); vfInput2->AddFrame(numPreTrigger, layoutHints);
numPreTrigger->Resize(width, 20);
///const uint32_t NumberEventsPerAggregate_G = 0x1034; /// R/W,
TGLabel * lbEventAgg = new TGLabel(vfInput1, "Events / Aggregate"); vfInput1->AddFrame(lbEventAgg, layoutHintsR);
TGNumberEntry* numEventAgg = new TGNumberEntry(vfInput2, 512, 0, 0, TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative); vfInput2->AddFrame(numEventAgg, layoutHints);
numEventAgg->Resize(width, 20);
///================== Trigger Settings
TGGroupFrame * gfTrigger = new TGGroupFrame(hframe1, "Trigger", kHorizontalFrame); hframe1->AddFrame(gfTrigger, new TGLayoutHints(kLHintsExpandY));
TGHorizontalFrame * hfTrigger = new TGHorizontalFrame(gfTrigger); gfTrigger->AddFrame(hfTrigger);
TGVerticalFrame * vfTrigger1 = new TGVerticalFrame(hfTrigger); hfTrigger->AddFrame(vfTrigger1);
TGVerticalFrame * vfTrigger2 = new TGVerticalFrame(hfTrigger); hfTrigger->AddFrame(vfTrigger2);
///const uint32_t TriggerThreshold = 0x106C; /// R/W
TGLabel * lbTriggerThreshold = new TGLabel(vfTrigger1, "Trigger Threshold [LSB]"); vfTrigger1->AddFrame(lbTriggerThreshold, layoutHintsR);
TGNumberEntry* numTriggerThreshold = new TGNumberEntry(vfTrigger2, 100, 0, 0, TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative); vfTrigger2->AddFrame(numTriggerThreshold, layoutHints);
numTriggerThreshold->Resize(width, 20);
///const uint32_t TriggerHoldOffWidth = 0x1074; /// R/W
TGLabel * lbTriggerHoldOff = new TGLabel(vfTrigger1, "Trigger Holdoff [ns]"); vfTrigger1->AddFrame(lbTriggerHoldOff, layoutHintsR);
TGNumberEntry* numTriggerHoldOff = new TGNumberEntry(vfTrigger2, 20000, 0, 0, TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative); vfTrigger2->AddFrame(numTriggerHoldOff, layoutHints);
numTriggerHoldOff->Resize(width, 20);
///const uint32_t ChannelDCOffset = 0x1098; /// R/W
TGLabel * lbDCOffset = new TGLabel(vfTrigger1, "DC offset [%]"); vfTrigger1->AddFrame(lbDCOffset, layoutHintsR);
TGNumberEntry* numDCOffset = new TGNumberEntry(vfTrigger2, 20, 0, 0, TGNumberFormat::kNESRealTwo, TGNumberFormat::kNEANonNegative); vfTrigger2->AddFrame(numDCOffset, layoutHints);
numDCOffset->Resize(width, 20);
///const uint32_t RCCR2SmoothingFactor = 0x1054; /// R/W Trigger Filter smoothing, triggerSmoothingFactor
TGLabel * lbTriggerSmoothing = new TGLabel(vfTrigger1, "Trigger Smoothing"); vfTrigger1->AddFrame(lbTriggerSmoothing, layoutHintsR);
TGComboBox* cbTriggerSmoothing = new TGComboBox(vfTrigger2); vfTrigger2->AddFrame(cbTriggerSmoothing, layoutHints);
cbTriggerSmoothing->AddEntry("disable", 0);
cbTriggerSmoothing->AddEntry("2 samples", 1);
cbTriggerSmoothing->AddEntry("4 samples", 2);
cbTriggerSmoothing->AddEntry("8 samples", 4);
cbTriggerSmoothing->AddEntry("16 samples", 8);
cbTriggerSmoothing->AddEntry("32 samples", 16);
cbTriggerSmoothing->AddEntry("64 samples", 32);
cbTriggerSmoothing->AddEntry("128 samples", 0x3F);
cbTriggerSmoothing->Select(16);
cbTriggerSmoothing->Resize(width, 20);
///const uint32_t InputRiseTime = 0x1058; /// R/W OK
TGLabel * lbInputRiseTime = new TGLabel(vfTrigger1, "Input rise time [ns]"); vfTrigger1->AddFrame(lbInputRiseTime, layoutHintsR);
TGNumberEntry* numInputRiseTime = new TGNumberEntry(vfTrigger2, 96, 0, 0, TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative); vfTrigger2->AddFrame(numInputRiseTime, layoutHints);
numInputRiseTime->Resize(width, 20);
///const uint32_t RiseTimeValidationWindow = 0x1070; /// R/W OK
TGLabel * lbRiseTimeValidWin = new TGLabel(vfTrigger1, "Rise Time Val. Win. [ns]"); vfTrigger1->AddFrame(lbRiseTimeValidWin, layoutHintsR);
TGNumberEntry* numRiseTimeValidWin = new TGNumberEntry(vfTrigger2, 20, 0, 0, TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative); vfTrigger2->AddFrame(numRiseTimeValidWin, layoutHints);
numRiseTimeValidWin->Resize(width, 20);
///const uint32_t ShapedTriggerWidth = 0x1084; /// R/W not sure
///const uint32_t VetoWidth = 0x10D4; /// R/W
///const uint32_t FineGain = 0x10C4; /// R/W OK
///================== Trapezoid Settings
TGGroupFrame * gfTrap = new TGGroupFrame(hframe1, "Trapazoid", kHorizontalFrame); hframe1->AddFrame(gfTrap, new TGLayoutHints(kLHintsExpandY));
TGHorizontalFrame * hfTrap = new TGHorizontalFrame(gfTrap); gfTrap->AddFrame(hfTrap);
TGVerticalFrame * vfTrap1 = new TGVerticalFrame(hfTrap); hfTrap->AddFrame(vfTrap1);
TGVerticalFrame * vfTrap2 = new TGVerticalFrame(hfTrap); hfTrap->AddFrame(vfTrap2);
///const uint32_t TrapezoidRiseTime = 0x105C; /// R/W OK
TGLabel * lbTrapRiseTime = new TGLabel(vfTrap1, "Rise time [ns]"); vfTrap1->AddFrame(lbTrapRiseTime, layoutHintsR);
TGNumberEntry* numTrapRiseTime = new TGNumberEntry(vfTrap2, 96, 0, 0, TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative); vfTrap2->AddFrame(numTrapRiseTime, layoutHints);
numTrapRiseTime->Resize(width, 20);
///const uint32_t TrapezoidFlatTop = 0x1060; /// R/W OK
TGLabel * lbTrapFlatTop = new TGLabel(vfTrap1, "Flat Top [ns]"); vfTrap1->AddFrame(lbTrapFlatTop, layoutHintsR);
TGNumberEntry* numTrapFlatTop = new TGNumberEntry(vfTrap2, 96, 0, 0, TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative); vfTrap2->AddFrame(numTrapFlatTop, layoutHints);
numTrapFlatTop->Resize(width, 20);
///const uint32_t DecayTime = 0x1068; /// R/W OK
TGLabel * lbDecay = new TGLabel(vfTrap1, "Decay [ns]"); vfTrap1->AddFrame(lbDecay, layoutHintsR);
TGNumberEntry* numDecay = new TGNumberEntry(vfTrap2, 96, 0, 0, TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative); vfTrap2->AddFrame(numDecay, layoutHints);
numDecay->Resize(width, 20);
///const uint32_t PeakingTime = 0x1064; /// R/W OK
TGLabel * lbPeaking = new TGLabel(vfTrap1, "Peaking [ns]"); vfTrap1->AddFrame(lbPeaking, layoutHintsR);
TGNumberEntry* numPeaking = new TGNumberEntry(vfTrap2, 96, 0, 0, TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative); vfTrap2->AddFrame(numPeaking, layoutHints);
numPeaking->Resize(width, 20);
///const uint32_t PeakHoldOff = 0x1078; /// R/W OK
TGLabel * lbPeakHoldOff = new TGLabel(vfTrap1, "Peaking Holdoff [ns]"); vfTrap1->AddFrame(lbPeakHoldOff, layoutHintsR);
TGNumberEntry* numPeakHoldOff = new TGNumberEntry(vfTrap2, 96, 0, 0, TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative); vfTrap2->AddFrame(numPeakHoldOff, layoutHints);
numPeakHoldOff->Resize(width, 20);
///================== const uint32_t DPPAlgorithmControl = 0x1080; /// R/W
TGGroupFrame * gfDPPCtrl = new TGGroupFrame(vframe, "DPP Algorithm Control", kHorizontalFrame); vframe->AddFrame(gfDPPCtrl, new TGLayoutHints(kLHintsExpandX));
TGVerticalFrame * vfDPPCtrl = new TGVerticalFrame(gfDPPCtrl); gfDPPCtrl->AddFrame(vfDPPCtrl);
TGHorizontalFrame * hfDPPCtrl1 = new TGHorizontalFrame(vfDPPCtrl); vfDPPCtrl->AddFrame(hfDPPCtrl1, layoutHints);
///================== const uint32_t DPPAlgorithmControl2_G = 0x10A0; /// R/W OK
TGGroupFrame * gfDPPCtrl2 = new TGGroupFrame(vframe, "DPP Algorithm Control 2", kHorizontalFrame); vframe->AddFrame(gfDPPCtrl2, new TGLayoutHints(kLHintsExpandX));
TGVerticalFrame * vfDPPCtrl2 = new TGVerticalFrame(gfDPPCtrl2); gfDPPCtrl2->AddFrame(vfDPPCtrl2);
TGHorizontalFrame * hfDPPCtrl21 = new TGHorizontalFrame(vfDPPCtrl2); vfDPPCtrl2->AddFrame(hfDPPCtrl21, layoutHints);
/*
///----- all other ///----- all other
TGHorizontalFrame *hframe[NUM_CHANNEL_SETTING]; TGHorizontalFrame *hframe[NUM_CHANNEL_SETTING];
TGLabel * lb[NUM_CHANNEL_SETTING]; TGLabel * lb[NUM_CHANNEL_SETTING];
@ -166,7 +239,7 @@ ChannelSetting::ChannelSetting(const TGWindow *p, UInt_t w, UInt_t h, Digitizer
hframe[i]->AddFrame(lb[i], new TGLayoutHints(kLHintsRight | kLHintsCenterY, 5, 5, 3, 4)); hframe[i]->AddFrame(lb[i], new TGLayoutHints(kLHintsRight | kLHintsCenterY, 5, 5, 3, 4));
} }
*/
fMain->MapSubwindows(); fMain->MapSubwindows();
fMain->Resize(fMain->GetDefaultSize()); fMain->Resize(fMain->GetDefaultSize());
@ -184,10 +257,6 @@ ChannelSetting::~ChannelSetting(){
delete cbInputDynamicRange; delete cbInputDynamicRange;
delete cbPolarity; delete cbPolarity;
for ( int i = 0; i < NUM_CHANNEL_SETTING; i++){
delete entry[i];
}
/// fMain must be delete last; /// fMain must be delete last;
fMain->Cleanup(); fMain->Cleanup();
delete fMain; delete fMain;
@ -205,11 +274,6 @@ void ChannelSetting::ChangeCh(){
//pixie->GetChannelPolarity(boardID, ch) ? cbPolarity->Select(1) : cbPolarity->Select(0); //pixie->GetChannelPolarity(boardID, ch) ? cbPolarity->Select(1) : cbPolarity->Select(0);
//pixie->GetChannelTraceOnOff(boardID, ch) ? cbTraceOnOff->Select(1) : cbTraceOnOff->Select(0); //pixie->GetChannelTraceOnOff(boardID, ch) ? cbTraceOnOff->Select(1) : cbTraceOnOff->Select(0);
for( int i = 0 ; i < NUM_CHANNEL_SETTING; i++){
double temp = 0 ;//pixie->GetChannelSetting(settingName[i][0].Data(), boardID, ch, false);
entry[i]->SetNumber(temp );
}
} }
void ChannelSetting::ChangeOnOff(){ void ChannelSetting::ChangeOnOff(){
short boardID = boardIDEntry->GetNumber(); short boardID = boardIDEntry->GetNumber();
@ -223,6 +287,8 @@ void ChannelSetting::ChangePolarity(){
short ch = chIDEntry->GetNumber(); short ch = chIDEntry->GetNumber();
int val = cbPolarity->GetSelected(); int val = cbPolarity->GetSelected();
printf("------------- testing from BoardSetting\n");
//pixie->SetChannelPositivePolarity(val, boardID, ch); //pixie->SetChannelPositivePolarity(val, boardID, ch);
//pixie->SaveSettings(pixie->GetSettingFile(boardIDEntry->GetNumber())); //pixie->SaveSettings(pixie->GetSettingFile(boardIDEntry->GetNumber()));
} }
@ -230,7 +296,6 @@ void ChannelSetting::ChangePolarity(){
void ChannelSetting::ChangeID(int id){ void ChannelSetting::ChangeID(int id){
short boardID = boardIDEntry->GetNumber(); short boardID = boardIDEntry->GetNumber();
short ch = chIDEntry->GetNumber(); short ch = chIDEntry->GetNumber();
double val = entry[id]->GetNumber();
//pixie->SetChannelSetting(settingName[id][0].Data(), val, boardID, ch, 1); //pixie->SetChannelSetting(settingName[id][0].Data(), val, boardID, ch, 1);
//pixie->SaveSettings(pixie->GetSettingFile(boardIDEntry->GetNumber())); //pixie->SaveSettings(pixie->GetSettingFile(boardIDEntry->GetNumber()));

View File

@ -9,8 +9,6 @@
#include "ClassDigitizer.h" #include "ClassDigitizer.h"
#include "macro.h" #include "macro.h"
#define NUM_CHANNEL_SETTING 20
class TGWindow; class TGWindow;
class TGMainFrame; class TGMainFrame;
@ -24,8 +22,6 @@ class ChannelSetting{
TGComboBox * cbPolarity; TGComboBox * cbPolarity;
TGComboBox * cbInputDynamicRange; TGComboBox * cbInputDynamicRange;
TGNumberEntry * entry[NUM_CHANNEL_SETTING];
Digitizer ** digi; Digitizer ** digi;
int NChannel; int NChannel;

View File

@ -37,6 +37,7 @@ int main(int argc, char* argv[]){
pha->ReadData(); pha->ReadData();
data->SaveBuffer("test.bin"); data->SaveBuffer("test.bin");
data->DecodeBuffer(1); data->DecodeBuffer(1);
data->PrintStat();
data->ClearData(); data->ClearData();
} }