tested boardSetting GUI, now need to read all setting from Digitizer
This commit is contained in:
parent
354efc39b8
commit
db7814b193
46
ClassData.h
46
ClassData.h
|
@ -26,6 +26,7 @@ class Data{
|
|||
uint32_t BufferSize;
|
||||
|
||||
unsigned short NumEvents[MaxNChannels];
|
||||
unsigned long TotNumEvents[MaxNChannels];
|
||||
unsigned long long Timestamp[MaxNChannels][MaxNData];
|
||||
unsigned short Energy[MaxNChannels][MaxNData];
|
||||
unsigned short Energy2[MaxNChannels][MaxNData]; /// in PSD, Energy = Qshort, Energy2 = Qlong
|
||||
|
@ -52,8 +53,9 @@ class Data{
|
|||
void SaveBuffer(const char * fileName);
|
||||
|
||||
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:
|
||||
|
||||
|
@ -78,6 +80,7 @@ class Data{
|
|||
inline Data::Data(){
|
||||
|
||||
buffer = NULL;
|
||||
for ( int i = 0; i < MaxNChannels; i++) TotNumEvents[i] = 0;
|
||||
ClearData();
|
||||
SaveWaveformToMemory = false;
|
||||
nw = 0;
|
||||
|
@ -104,7 +107,7 @@ inline void Data::AllocateMemory(){
|
|||
|
||||
inline void Data::FreeMemory(){
|
||||
printf("======= Free memory\n");
|
||||
if( buffer != NULL ) delete buffer;
|
||||
//if( buffer != NULL ) delete buffer;
|
||||
}
|
||||
|
||||
inline void Data::ClearData(){
|
||||
|
@ -148,6 +151,14 @@ inline void Data::SaveBuffer(const char * fileName){
|
|||
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){
|
||||
this->buffer = buffer;
|
||||
DecodeBuffer(verbose);
|
||||
|
@ -161,6 +172,10 @@ inline void Data::DecodeBuffer(int verbose){
|
|||
return;
|
||||
}
|
||||
|
||||
if( nByte == 0 ) {
|
||||
return;
|
||||
}
|
||||
|
||||
nw = 0;
|
||||
|
||||
do{
|
||||
|
@ -180,7 +195,7 @@ inline void Data::DecodeBuffer(int verbose){
|
|||
unsigned int AggCounter = ReadBuffer(nw, verbose);
|
||||
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( 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;
|
||||
if( verbose >= 2 ) printf("ch : %d, timeStamp0 %u \n", channel, timeStamp0);
|
||||
|
||||
NumEvents[channel] ++;
|
||||
|
||||
//TODO Skip
|
||||
///===== read waveform
|
||||
if( SaveWaveformToMemory ) {
|
||||
|
@ -346,7 +359,7 @@ inline int Data::DecodePHADualChannelBlock(unsigned int ChannelMask, int verbose
|
|||
unsigned long long extTimeStamp = 0;
|
||||
if( extra2Option == 0 || extra2Option == 2 ) extTimeStamp = (extra2 >> 15);
|
||||
|
||||
unsigned long long timeStamp = (extTimeStamp << 32) ;
|
||||
unsigned long long timeStamp = (extTimeStamp << 30) ;
|
||||
timeStamp = timeStamp + timeStamp0;
|
||||
|
||||
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(" 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(" input sat. : %d \n", ((extra >> 4) & 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",
|
||||
NumEvents[channel], channel, pileUp, energy, rollOver, timeStamp, triggerAtSample, nSample );
|
||||
if( rollOver == 0 ) {
|
||||
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;
|
||||
Timestamp[channel][NumEvents[channel]] = timeStamp;
|
||||
|
@ -477,9 +495,6 @@ inline int Data::DecodePSDDualChannelBlock(unsigned int ChannelMask, int verbose
|
|||
int channel = ChannelMask*2 + channelTag;
|
||||
if( verbose >= 2 ) printf("ch : %d, timeStamp %u \n", channel, timeStamp0);
|
||||
|
||||
|
||||
NumEvents[channel] ++;
|
||||
|
||||
///===== read waveform
|
||||
if( SaveWaveformToMemory ) {
|
||||
tempWaveform1.clear();
|
||||
|
@ -534,7 +549,7 @@ inline int Data::DecodePSDDualChannelBlock(unsigned int ChannelMask, int verbose
|
|||
unsigned long long extTimeStamp = 0;
|
||||
if( extraOption == 0 || extraOption == 2 ) extTimeStamp = (extra >> 15);
|
||||
|
||||
unsigned long long timeStamp = (extTimeStamp << 32) ;
|
||||
unsigned long long timeStamp = (extTimeStamp << 30) ;
|
||||
timeStamp = timeStamp + timeStamp0;
|
||||
|
||||
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);
|
||||
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 >= 1 ) printf("ch : %2d, Qshort : %d, Qlong : %d, timestamp : %llu\n",
|
||||
|
|
|
@ -33,7 +33,7 @@ Digitizer::Digitizer(){
|
|||
|
||||
Digitizer::Digitizer(int boardID, int portID, bool verbose){
|
||||
Digitizer();
|
||||
OpenDigitizer(boardID, portID, verbose);
|
||||
OpenDigitizer(boardID, portID, true, verbose);
|
||||
}
|
||||
|
||||
Digitizer::~Digitizer(){
|
||||
|
@ -47,7 +47,17 @@ void Digitizer::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->portID = portID;
|
||||
|
@ -172,7 +182,7 @@ int Digitizer::OpenDigitizer(int boardID, int portID, bool verbose){
|
|||
|
||||
ErrorMsg("end of OpenDigitizer");
|
||||
|
||||
if( isConnected ) {
|
||||
if( isConnected && program) {
|
||||
ProgramBoard();
|
||||
}
|
||||
|
||||
|
@ -188,7 +198,7 @@ int Digitizer::CloseDigitizer(){
|
|||
ret = CAEN_DGTZ_SWStopAcquisition(handle);
|
||||
ret |= CAEN_DGTZ_CloseDigitizer(handle);
|
||||
|
||||
data->FreeMemory();
|
||||
//data->FreeMemory();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -327,7 +337,9 @@ void Digitizer::ReadData(){
|
|||
}
|
||||
|
||||
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) {
|
||||
ErrorMsg("ReadData");
|
||||
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 ){
|
||||
uint32_t bit ;
|
||||
uint32_t bitmask = (uint(pow(2, bitLength)-1) << bitSmallestPos);
|
||||
int tempCh = ch;
|
||||
if (ch < 0 && address < 0x8000 ) tempCh = 0; /// take ch-0
|
||||
bit = ReadRegister(address, tempCh);
|
||||
///printf("bit : 0x%x, bitmask : 0x%x \n", bit, bitmask);
|
||||
bit = (bit & ~bitmask);
|
||||
uint32_t bit = ReadRegister(address, tempCh);
|
||||
bit = (bit >> bitSmallestPos ) & uint(pow(2, bitLength)-1);
|
||||
return bit;
|
||||
}
|
||||
|
||||
|
|
|
@ -28,7 +28,7 @@ class Digitizer{
|
|||
|
||||
|
||||
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();
|
||||
|
||||
///=================Settings
|
||||
|
@ -61,6 +61,7 @@ class Digitizer{
|
|||
//void SetBoardID(unsigned int ID) {WriteRegister(Register::DPP::BoardID, ID));
|
||||
|
||||
///================ Get Settings
|
||||
std::string GetModelName() {return BoardInfo.ModelName;}
|
||||
int GetSerialNumber() {return BoardInfo.SerialNumber;}
|
||||
int GetChannelMask() {return channelMask;}
|
||||
bool GetChannelOnOff(unsigned ch) {return (channelMask & ( 1 << ch) );}
|
||||
|
@ -69,6 +70,10 @@ class Digitizer{
|
|||
int GetHandle() {return handle;}
|
||||
bool GetConnectionStatus() {return isConnected;}
|
||||
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) ;
|
||||
|
||||
|
@ -85,6 +90,7 @@ class Digitizer{
|
|||
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);}
|
||||
|
||||
void PrintBoard();
|
||||
void PrintACQStatue();
|
||||
|
||||
///================ ACQ control
|
||||
|
|
|
@ -5,7 +5,7 @@ DigitizerPHA::DigitizerPHA(){
|
|||
}
|
||||
|
||||
DigitizerPHA::DigitizerPHA(int boardID, int portID, bool verbose){
|
||||
OpenDigitizer(boardID, portID, verbose);
|
||||
OpenDigitizer(boardID, portID, true, verbose);
|
||||
}
|
||||
|
||||
DigitizerPHA::~DigitizerPHA(){
|
||||
|
@ -15,7 +15,7 @@ DigitizerPHA::~DigitizerPHA(){
|
|||
int DigitizerPHA::ProgramBoard(){
|
||||
|
||||
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::BoardConfiguration, 0x4E8115);
|
||||
|
@ -32,7 +32,7 @@ int DigitizerPHA::ProgramBoard(){
|
|||
ret = CAEN_DGTZ_SetRunSynchronizationMode(handle, CAEN_DGTZ_RUN_SYNC_Disabled);
|
||||
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::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::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::MaxAggregatePerBlockTransfer, 40);
|
||||
ret |= CAEN_DGTZ_WriteRegister(handle, Register::DPP::DPPAlgorithmControl + 0x7000, 0xe30200f);
|
||||
|
@ -164,6 +164,8 @@ double DigitizerPHA::GetSetting(Setting::PHA settingName, int ch){
|
|||
switch(settingName){
|
||||
/// board setting
|
||||
case Setting::PHA::AutoDataFlush_board_bool: temp = ReadBits(Register::DPP::BoardConfiguration, 1, 0); value = temp; break;
|
||||
case Setting::PHA::DecimateWaveForm_board_bool: temp = ReadBits(Register::DPP::BoardConfiguration, 1, 1); value = temp; break;
|
||||
case Setting::PHA::TriggerPropapation_board_bool: temp = ReadBits(Register::DPP::BoardConfiguration, 1, 2); value = temp; break;
|
||||
case Setting::PHA::DualTrace_board_bool: temp = ReadBits(Register::DPP::BoardConfiguration, 1, 11); value = temp; break;
|
||||
case Setting::PHA::AnalogProbe1_board_2bit: temp = ReadBits(Register::DPP::BoardConfiguration, 2, 12); value = temp; break;
|
||||
case Setting::PHA::AnalogProbe2_board_2bit: temp = ReadBits(Register::DPP::BoardConfiguration, 2, 14); value = temp; break;
|
||||
|
@ -311,18 +313,18 @@ void DigitizerPHA::PrintBoardConfiguration(){
|
|||
printf(" Bit[20:23] = %d = Digital Virtual probe 1 : ", ((value[0] >> 20) & 0x7 ));
|
||||
switch (((value[0] >> 20) & 0xF )) {
|
||||
case 0: printf("Peaking, shows where the energy is calculated; \n"); break;
|
||||
case 1: printf("”Armed”, digital input showing where the RC‐CR2 crosses the Threshold\n");
|
||||
case 2: printf("”Peak Run”, starts with the trigger and last for the whole event\n");
|
||||
case 3: printf("”Pile‐up”, shows where a pile‐up event occurred\n");
|
||||
case 4: printf("”Peaking”, shows where the energy is calculated\n");
|
||||
case 5: printf("”TRG Validation Win”, digital input showing the trigger validation acceptance window TVAW\n");
|
||||
case 6: printf("”Baseline freeze”, shows where the algorithm stops calculating the baseline and its value is frozen\n");
|
||||
case 7: printf("”TRG Holdoff”, shows the trigger hold‐off parameter\n");
|
||||
case 8: printf("”TRG Validation”, shows the trigger validation signal TRG_VAL \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");
|
||||
case 10: printf("”Zero Cross. Win.”, shows the RT Discrimination Width\n");
|
||||
case 11: printf("”Ext TRG”, shows the external trigger, when available\n");
|
||||
case 12: printf("”Busy”, shows when the memory board is full.\n");
|
||||
case 1: printf("”Armed”, digital input showing where the RC‐CR2 crosses the Threshold\n"); break;
|
||||
case 2: printf("”Peak Run”, starts with the trigger and last for the whole event\n");break;
|
||||
case 3: printf("”Pile‐up”, shows where a pile‐up event occurred\n");break;
|
||||
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");break;
|
||||
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 hold‐off parameter\n");break;
|
||||
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");break;
|
||||
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");break;
|
||||
case 12: printf("”Busy”, shows when the memory board is full.\n");break;
|
||||
}
|
||||
printf(" Bit[26:28] = %d = Digital Virtual probe 2 : ", ((value[0] >> 26) & 0x7 ));
|
||||
if( ((value[0] >> 26) & 0x7 ) == 0 ) {
|
||||
|
|
37
FSUDAQ.cpp
37
FSUDAQ.cpp
|
@ -33,12 +33,16 @@ enum MenuIdentifiers{
|
|||
};
|
||||
///make static members
|
||||
Digitizer ** MainWindow::digi = NULL;
|
||||
DigitizerPHA ** MainWindow::pha = NULL;
|
||||
DigitizerPSD ** MainWindow::psd = NULL;
|
||||
TGTextEdit * MainWindow::teLog = NULL;
|
||||
TRootEmbeddedCanvas * MainWindow::fEcanvas = NULL;
|
||||
|
||||
MainWindow::MainWindow(const TGWindow *p,UInt_t w,UInt_t h) {
|
||||
|
||||
nDigi = 0;
|
||||
nPSD = 0;
|
||||
nPHA = 0;
|
||||
|
||||
/// Create a main frame
|
||||
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()");
|
||||
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
|
||||
TGGroupFrame * group1 = new TGGroupFrame(hframe, "Single Channel", kHorizontalFrame);
|
||||
hframe->AddFrame(group1 );
|
||||
|
@ -120,8 +130,10 @@ MainWindow::MainWindow(const TGWindow *p,UInt_t w,UInt_t h) {
|
|||
|
||||
LogMsg("Ready to run.");
|
||||
|
||||
HandleMenu(M_DIGITIZER_SCAN);
|
||||
|
||||
HandleMenu(M_BOARD_SETTINGS);
|
||||
HandleMenu(M_CH_SETTING);
|
||||
//HandleMenu(M_CH_SETTING);
|
||||
|
||||
}
|
||||
MainWindow::~MainWindow() {
|
||||
|
@ -159,20 +171,34 @@ void MainWindow::HandleMenu(Int_t id){
|
|||
case M_DIGITIZER_SCAN:{
|
||||
|
||||
printf("============= detect digitizers \n");
|
||||
//DetectDigitizer();
|
||||
DetectDigitizer();
|
||||
printf("============= Connect %d digitizers...\n", nDigi);
|
||||
|
||||
if( nDigi > 0 ) {
|
||||
|
||||
digi = new Digitizer * [nDigi];
|
||||
|
||||
//pha = new DigitizerPHA * [nPHA];
|
||||
//psd = new DigitizerPHA * [nPSD];
|
||||
//
|
||||
//iPHA = 0;
|
||||
//iPSD = 0;
|
||||
|
||||
for( int i = 0; i < nDigi; i++){
|
||||
printf("------------ %d \n", i);
|
||||
if( DPPType[i] == V1730_DPP_PSD_CODE ) {
|
||||
digi[i] = new DigitizerPSD(boardID[i], portID[i]);
|
||||
printf("Open as PSD\n");
|
||||
}else if( DPPType[i] == V1730_DPP_PHA_CODE ){
|
||||
digi[i] = new DigitizerPHA(boardID[i], portID[i]);
|
||||
printf("Open as PHA\n");
|
||||
}else{
|
||||
digi[i] = new Digitizer(boardID[i], portID[i]);
|
||||
printf("Open as Ordinary Digitizer\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}break;
|
||||
|
||||
///========================= File Open
|
||||
|
@ -251,6 +277,8 @@ void MainWindow::DetectDigitizer(){
|
|||
boardID.push_back(board);
|
||||
serialNum.push_back(dig->GetSerialNumber());
|
||||
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++){
|
||||
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(){
|
||||
|
||||
if( nDigi > 0 && digi != NULL) {
|
||||
for(int i = 0; i < nDigi ; i++) digi[0]->CloseDigitizer();
|
||||
}
|
||||
printf("----- bye bye ---- \n");
|
||||
|
||||
gApplication->Terminate(0);
|
||||
|
|
5
FSUDAQ.h
5
FSUDAQ.h
|
@ -44,12 +44,15 @@ private:
|
|||
//TGTextButton *bStopRun;
|
||||
//TGTextButton *bFitTrace;
|
||||
|
||||
int nDigi;
|
||||
unsigned short nDigi;
|
||||
vector<int> DPPType;
|
||||
vector<int> portID;
|
||||
vector<int> boardID;
|
||||
vector<int> serialNum;
|
||||
static Digitizer ** digi;
|
||||
unsigned short nPHA, nPSD;
|
||||
static DigitizerPHA ** pha;
|
||||
static DigitizerPSD ** psd;
|
||||
|
||||
BoardSetting * boardSetting;
|
||||
ChannelSetting * channelSetting;
|
||||
|
|
|
@ -192,6 +192,8 @@ namespace Setting{
|
|||
enum PHA{
|
||||
/// board setting
|
||||
AutoDataFlush_board_bool,
|
||||
DecimateWaveForm_board_bool,
|
||||
TriggerPropapation_board_bool,
|
||||
DualTrace_board_bool,
|
||||
AnalogProbe1_board_2bit,
|
||||
AnalogProbe2_board_2bit,
|
||||
|
|
373
boardSetting.cpp
373
boardSetting.cpp
|
@ -10,7 +10,7 @@
|
|||
#include "boardSetting.h"
|
||||
|
||||
TString boardSettingName[NUM_BOARD_INFO] = { "Model",
|
||||
"Board Info",
|
||||
"DPP Type",
|
||||
"Link Type",
|
||||
"Serial Number",
|
||||
"Number of channels",
|
||||
|
@ -22,31 +22,51 @@ TString boardSettingName[NUM_BOARD_INFO] = { "Model",
|
|||
|
||||
BoardSetting::BoardSetting(const TGWindow *p, UInt_t w, UInt_t h, Digitizer ** digi, int nBoard){
|
||||
|
||||
this->nDigi = nBoard;
|
||||
this->digi = digi;
|
||||
|
||||
gClient->GetColorByName("red", red);
|
||||
gClient->GetColorByName("blue", blue);
|
||||
|
||||
fMain = new TGMainFrame(p,w,h);
|
||||
fMain->SetWindowName("Board Settings ");
|
||||
fMain->Connect("CloseWindow()", "BoardSetting", this, "CloseWindow()");
|
||||
|
||||
TGLayoutHints * layoutHints = new TGLayoutHints(kLHintsCenterX | kLHintsCenterY, 5,5,3,3); /// left, right, top, bottom
|
||||
|
||||
TGVerticalFrame * vframe = new TGVerticalFrame(fMain); fMain->AddFrame(vframe, layoutHints);
|
||||
|
||||
|
||||
///==========Module choose
|
||||
TGHorizontalFrame *hframe0 = new TGHorizontalFrame(vframe, w, 50 ); vframe->AddFrame(hframe0, layoutHints);
|
||||
|
||||
TGLabel * lb0 = new TGLabel(hframe0, "Board ID :"); hframe0->AddFrame(lb0, layoutHints);
|
||||
boardIDEntry = new TGNumberEntry(hframe0, 0, 0, 0, TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative);
|
||||
hframe0->AddFrame(boardIDEntry, new TGLayoutHints(kLHintsCenterX , 5, 5, 3, 4));
|
||||
boardIDEntry = new TGNumberEntry(hframe0, 0, 0, 0, TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative); hframe0->AddFrame(boardIDEntry, new TGLayoutHints(kLHintsCenterX , 5, 5, 3, 4));
|
||||
|
||||
boardIDEntry->SetWidth(50);
|
||||
boardIDEntry->SetLimits(TGNumberFormat::kNELLimitMinMax, 0, nBoard);
|
||||
boardIDEntry->SetLimits(TGNumberFormat::kNELLimitMinMax, 0, nBoard-1);
|
||||
boardIDEntry->Connect("Modified()", "BoardSetting", this, "ChangeBoard()");
|
||||
if( nBoard <= 1 ) boardIDEntry->SetState(false);
|
||||
|
||||
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
|
||||
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]->SetEnabled(false);
|
||||
entry[i]->SetText( Form("0x%x", 0) );
|
||||
|
||||
}
|
||||
|
||||
///========= 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);
|
||||
TGHorizontalFrame * hframeBdCfg1 = new TGHorizontalFrame(vBdCfg); vBdCfg->AddFrame(hframeBdCfg1, layoutHints);
|
||||
|
||||
TGCheckButton * bAutoDataFlush = new TGCheckButton(hframeBdCfg1, "Auto Data Flush", 1); hframeBdCfg1->AddFrame(bAutoDataFlush, layoutHints);
|
||||
bAutoDataFlush->SetState(kButtonDown);
|
||||
bAutoDataFlush = new TGCheckButton(hframeBdCfg1, "Auto Data Flush", 1); hframeBdCfg1->AddFrame(bAutoDataFlush, layoutHints);
|
||||
bAutoDataFlush->SetState(kButtonUp);
|
||||
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->Connect("Clicked()", "BoardSetting", this, "SetDecimateWF()");
|
||||
|
||||
TGCheckButton * bWFRecord = new TGCheckButton(hframeBdCfg1, "Record WaveFrom", 1); hframeBdCfg1->AddFrame(bWFRecord, layoutHints);
|
||||
bWFRecord->SetState(kButtonDown);
|
||||
bWFRecord = new TGCheckButton(hframeBdCfg1, "Record WaveFrom", 1); hframeBdCfg1->AddFrame(bWFRecord, layoutHints);
|
||||
bWFRecord->SetState(kButtonUp);
|
||||
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->Connect("Clicked()", "BoardSetting", this, "SetTriggerPropagation()");
|
||||
|
||||
TGCheckButton * bExtrac2 = new TGCheckButton(hframeBdCfg1, "Enable Extra2 word", 1); hframeBdCfg1->AddFrame(bExtrac2, layoutHints);
|
||||
bExtrac2->SetState(kButtonDown);
|
||||
bExtrac2 = new TGCheckButton(hframeBdCfg1, "Enable Extra2 word", 1); hframeBdCfg1->AddFrame(bExtrac2, layoutHints);
|
||||
bExtrac2->SetState(kButtonUp);
|
||||
bExtrac2->Connect("Clicked()", "BoardSetting", this, "SetEnableExtra2()");
|
||||
|
||||
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",
|
||||
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->AddEntry("Slow/Auto",0x30);
|
||||
cbFanCtrl->AddEntry("Fast", 0x38);
|
||||
|
@ -180,10 +198,11 @@ BoardSetting::BoardSetting(const TGWindow *p, UInt_t w, UInt_t h, Digitizer ** d
|
|||
///========== ACQ control
|
||||
TGGroupFrame * gAcqCtrl = new TGGroupFrame(vframe, "ACQ Control", kHorizontalFrame); vframe->AddFrame(gAcqCtrl , new TGLayoutHints(kLHintsExpandX));
|
||||
TGVerticalFrame * vAcqCtrl = new TGVerticalFrame(gAcqCtrl); gAcqCtrl->AddFrame(vAcqCtrl);
|
||||
|
||||
TGHorizontalFrame * hfAcqCtrl = new TGHorizontalFrame(vAcqCtrl); vAcqCtrl->AddFrame(hfAcqCtrl, 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->AddEntry("Software", 0);
|
||||
cbAcqMode->AddEntry("S-IN / GPI", 1);
|
||||
|
@ -192,23 +211,35 @@ BoardSetting::BoardSetting(const TGWindow *p, UInt_t w, UInt_t h, Digitizer ** d
|
|||
cbAcqMode->Select(0);
|
||||
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->Connect("Clicked()", "BoardSetting", this, "SetAutoDataFlush()");
|
||||
|
||||
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->AddEntry("internal", 0);
|
||||
cbPLLref->AddEntry("external", 1);
|
||||
cbPLLref->Select(0);
|
||||
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
|
||||
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));
|
||||
|
||||
|
||||
///--- various type of triggers
|
||||
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));
|
||||
|
@ -228,21 +259,18 @@ BoardSetting::BoardSetting(const TGWindow *p, UInt_t w, UInt_t h, Digitizer ** d
|
|||
|
||||
///"Global Trigger Mask",
|
||||
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++){
|
||||
cbGbTRGMskCh[i] = new TGCheckButton(vTRGMsk[i], ""); vTRGMsk[i]->AddFrame(cbGbTRGMskCh[i], new TGLayoutHints(kLHintsCenterX , 5, 5, 3, 4));
|
||||
}
|
||||
|
||||
///"Trigger Validation Mask",
|
||||
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++){
|
||||
cbTRGValMskCh[i] = new TGCheckButton(vTRGMsk[i], ""); vTRGMsk[i]->AddFrame(cbTRGValMskCh[i], new TGLayoutHints(kLHintsCenterX , 5, 5, 3, 4));
|
||||
}
|
||||
|
||||
///"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));
|
||||
TGCheckButton * cbTRGOUTMskCh[8];
|
||||
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));
|
||||
}
|
||||
|
@ -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->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->AddEntry("OR", 0);
|
||||
cbTRGMODE->AddEntry("AND", 1);
|
||||
cbTRGMODE->AddEntry("Majority", 2);
|
||||
cbTRGMODE->Resize(70, 20);
|
||||
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->AddEntry("OR", 0);
|
||||
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 * 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);
|
||||
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);
|
||||
|
||||
|
||||
|
@ -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 * 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);
|
||||
TGCheckButton * bTRGExtTrigger = new TGCheckButton(vTRGMsk5, "", 1); vTRGMsk5->AddFrame(bTRGExtTrigger, layoutHints);
|
||||
bTRGExtTrigger = new TGCheckButton(vTRGMsk5, "", 1); vTRGMsk5->AddFrame(bTRGExtTrigger, layoutHints);
|
||||
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);
|
||||
|
||||
|
||||
|
@ -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 * 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);
|
||||
TGCheckButton * bTRGSoftwareTrigger = new TGCheckButton(vTRGMsk6, "", 1); vTRGMsk6->AddFrame(bTRGSoftwareTrigger, layoutHints);
|
||||
bTRGSoftwareTrigger = new TGCheckButton(vTRGMsk6, "", 1); vTRGMsk6->AddFrame(bTRGSoftwareTrigger, layoutHints);
|
||||
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);
|
||||
|
||||
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));
|
||||
TGCheckButton * bTRGValMskLVSDLCL = new TGCheckButton(hframeTRGCfg2, "LVSD Local Trg. Valid", 1); hframeTRGCfg2->AddFrame(bTRGValMskLVSDLCL, 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));
|
||||
bTRGValMskLVSDLCL = new TGCheckButton(hframeTRGCfg2, "LVSD Local Trg. Valid", 1); hframeTRGCfg2->AddFrame(bTRGValMskLVSDLCL, new TGLayoutHints(kLHintsCenterY , 5, 5, 3, 4));
|
||||
|
||||
///"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",
|
||||
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);
|
||||
|
||||
|
||||
|
@ -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));
|
||||
|
||||
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->AddEntry("NIM", 0);
|
||||
cbLEMOIO->AddEntry("TTL", 1);
|
||||
cbLEMOIO->Select(0);
|
||||
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);
|
||||
|
||||
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));
|
||||
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->AddEntry("trigger sync with the edge of the TRIG-IN", 0);
|
||||
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);
|
||||
|
||||
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->AddEntry("Trigger local is sync with TRG-IN", 0);
|
||||
cbTRGINMezzanines->AddEntry("TRG-IN send to mezzanines (no delay)", 1);
|
||||
cbTRGINMezzanines->Select(0);
|
||||
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",
|
||||
///"LVDS IO Data",
|
||||
|
||||
///"Analog Monitor Mode
|
||||
TGHorizontalFrame * hframeFrontIOCtrl4 = new TGHorizontalFrame(vFrontIOCtrl); vFrontIOCtrl->AddFrame(hframeFrontIOCtrl4, 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));
|
||||
TGComboBox * cbAnaMonitor = new TGComboBox(hframeFrontIOCtrl4, "",1); hframeFrontIOCtrl4->AddFrame(cbAnaMonitor, 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(hframeFrontIOCtrl2, "Analog Monitor Mode (MON/Sigma)"); hframeFrontIOCtrl2->AddFrame(lbAnaMonitor, new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 5, 5, 3, 2));
|
||||
cbAnaMonitor = new TGComboBox(hframeFrontIOCtrl2, "",1); hframeFrontIOCtrl2->AddFrame(cbAnaMonitor, new TGLayoutHints(kLHintsCenterY , 5, 5, 3, 2));
|
||||
cbAnaMonitor->EnableTextInput(false);
|
||||
cbAnaMonitor->AddEntry("Trigger Majority", 0);
|
||||
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->Select(0);
|
||||
cbAnaMonitor->Resize(150, 20);
|
||||
cbAnaMonitor->Connect("Changed()", "BoardSetting", this, "SetAnalogMonitorMode()");
|
||||
cbAnaMonitor->Connect("Changed()", "ChannelSetting", this, "ChangePolarity()"); //Example to call other class
|
||||
|
||||
///"Buffer Occupancy Gain
|
||||
TGLabel * lbBufferOccpGain = new TGLabel(hframeFrontIOCtrl4, "Buffer Occupancy Gain"); hframeFrontIOCtrl4->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));
|
||||
TGLabel * lbBufferOccpGain = new TGLabel(hframeFrontIOCtrl2, "Buffer Occupancy Gain"); hframeFrontIOCtrl2->AddFrame(lbBufferOccpGain, new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 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);
|
||||
|
||||
/**
|
||||
//TODO check is VME model
|
||||
///"Readout Control",
|
||||
TGGroupFrame * gReadoutCtrl = new TGGroupFrame(vframe, "ReadOut Control", kHorizontalFrame); vframe->AddFrame(gReadoutCtrl );
|
||||
TGVerticalFrame * vReadoutCtrl = new TGVerticalFrame(gReadoutCtrl); gReadoutCtrl->AddFrame(vReadoutCtrl, new TGLayoutHints(kLHintsCenterX , 5, 5, 3, 4));
|
||||
TGGroupFrame * gReadoutCtrl = new TGGroupFrame(vframe, "ReadOut Control", kHorizontalFrame); vframe->AddFrame(gReadoutCtrl, new TGLayoutHints(kLHintsExpandX) );
|
||||
TGVerticalFrame * vReadoutCtrl = new TGVerticalFrame(gReadoutCtrl); gReadoutCtrl->AddFrame(vReadoutCtrl);
|
||||
|
||||
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));
|
||||
|
@ -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);
|
||||
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) );
|
||||
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->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->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->SetText( "VME FIFO EMPTY" );
|
||||
txtVMEFIFO->SetTextColor(kGreen);
|
||||
txtVMEFIFO->SetTextColor(blue);
|
||||
|
||||
|
||||
///===== 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));
|
||||
|
||||
|
||||
|
||||
///==================== Read digitizer Setting
|
||||
ReadDigitizerSetting();
|
||||
|
||||
ChangeBoard();
|
||||
|
||||
fMain->MapSubwindows();
|
||||
fMain->Resize(fMain->GetDefaultSize());
|
||||
|
@ -491,14 +509,75 @@ BoardSetting::~BoardSetting(){
|
|||
|
||||
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 cbAP1;
|
||||
delete cbAP2;
|
||||
delete cbAP2; /// for ComboBox for analog probe 2
|
||||
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->Cleanup();
|
||||
|
@ -506,12 +585,81 @@ BoardSetting::~BoardSetting(){
|
|||
|
||||
}
|
||||
|
||||
void BoardSetting::ReadDigitizerSetting(){
|
||||
void BoardSetting::ChangeBoard(){
|
||||
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);
|
||||
|
||||
}
|
||||
|
||||
void BoardSetting::ChangeBoard(){
|
||||
int boardID = boardIDEntry->GetNumber();
|
||||
|
||||
return;
|
||||
}
|
||||
|
@ -561,3 +709,16 @@ void BoardSetting::SetAggregateOrganization(){
|
|||
void BoardSetting::SetReadOutAggregate(){
|
||||
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(){
|
||||
|
||||
}
|
||||
|
|
|
@ -18,30 +18,89 @@ class BoardSetting{
|
|||
private:
|
||||
TGMainFrame * fMain;
|
||||
|
||||
Pixel_t red, blue;
|
||||
|
||||
TGNumberEntry * boardIDEntry;
|
||||
|
||||
TGTextEntry * entry[NUM_BOARD_INFO];
|
||||
|
||||
int nDigi;
|
||||
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;
|
||||
TGComboBox * cbAP1;
|
||||
TGComboBox * cbAP2; /// for ComboBox for analog probe 2
|
||||
TGComboBox * cbDP;
|
||||
|
||||
TGComboBox * cbAggOrg;
|
||||
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;
|
||||
TGComboBox * cbTRGMODE;
|
||||
TGComboBox * cbTRGOUTMODE;
|
||||
|
||||
TGNumberEntry * GlbMajorLevel;
|
||||
TGNumberEntry * TRGMajorLevel;
|
||||
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:
|
||||
BoardSetting(const TGWindow *p, UInt_t w, UInt_t h, Digitizer ** digi, int nBoard);
|
||||
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();
|
||||
|
||||
///=== Board Configure
|
||||
|
@ -54,11 +113,12 @@ class BoardSetting{
|
|||
void SetAnalogProbe1();
|
||||
void SetAnalogProbe2();
|
||||
void SetDigitalProbe();
|
||||
void SoftwareReset();
|
||||
|
||||
void SetAggregateOrganization();
|
||||
void SetReadOutAggregate();
|
||||
|
||||
void ReadDigitizerSetting();
|
||||
void SetAnalogMonitorMode();
|
||||
|
||||
bool isOpened;
|
||||
|
||||
|
|
|
@ -10,75 +10,29 @@
|
|||
|
||||
#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){
|
||||
|
||||
this->digi = digi;
|
||||
|
||||
Pixel_t red, green;
|
||||
gClient->GetColorByName("red", red);
|
||||
gClient->GetColorByName("green", green);
|
||||
|
||||
fMain = new TGMainFrame(p,w,h);
|
||||
fMain->SetWindowName("Channel Settings ");
|
||||
fMain->Connect("CloseWindow()", "ChannelSetting", this, "CloseWindow()");
|
||||
|
||||
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);
|
||||
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
|
||||
TGHorizontalFrame *hframe0 = new TGHorizontalFrame(vframe, w, 50 );
|
||||
vframe->AddFrame(hframe0, new TGLayoutHints(kLHintsCenterX, 2,2,2,2));
|
||||
|
||||
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);
|
||||
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); hframe0->AddFrame(boardIDEntry, new TGLayoutHints(kLHintsCenterX , 5, 5, 3, 4));
|
||||
boardIDEntry->SetWidth(50);
|
||||
boardIDEntry->SetLimits(TGNumberFormat::kNELLimitMinMax, 0, nDigi);
|
||||
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();
|
||||
|
||||
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->SetWidth(50);
|
||||
chIDEntry->SetLimits(TGNumberFormat::kNELLimitMinMax, 0, NChannel-1);
|
||||
chIDEntry->Connect("Modified()", "ChannelSetting", this, "ChangeCh()");
|
||||
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 ch = chIDEntry->GetNumber();
|
||||
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 * hfInput1 = new TGHorizontalFrame(vfInput); vfInput->AddFrame(hfInput1, layoutHints);
|
||||
|
||||
TGHorizontalFrame *hframe1 = new TGHorizontalFrame(vframe, w, 50 ); vframe->AddFrame(hframe1, new TGLayoutHints(kLHintsCenterX, 2,2,2,2));
|
||||
|
||||
///================== 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
|
||||
TGLabel * lbOnOff = new TGLabel(hfInput1, "On/Off"); hfInput1->AddFrame(lbOnOff, new TGLayoutHints( kLHintsCenterY, 5, 5, 3, 4));
|
||||
cbOnOff = new TGComboBox(hfInput1); hfInput1->AddFrame(cbOnOff, new TGLayoutHints(kLHintsCenterY, 5,5,3,4));
|
||||
TGLabel * lbOnOff = new TGLabel(vfInput1, "On/Off"); vfInput1->AddFrame(lbOnOff, layoutHintsR);
|
||||
cbOnOff = new TGComboBox(vfInput2); vfInput2->AddFrame(cbOnOff, layoutHints);
|
||||
cbOnOff->AddEntry("ON", 1);
|
||||
cbOnOff->AddEntry("off", 0);
|
||||
cbOnOff->Resize(width, 20);
|
||||
|
@ -114,8 +80,8 @@ ChannelSetting::ChannelSetting(const TGWindow *p, UInt_t w, UInt_t h, Digitizer
|
|||
|
||||
|
||||
///----------- Polarity
|
||||
TGLabel * lbPol = new TGLabel(hfInput1, "Polarity");hfInput1->AddFrame(lbPol, new TGLayoutHints( kLHintsCenterY, 5, 5, 3, 4));
|
||||
cbPolarity = new TGComboBox(hfInput1); hfInput1->AddFrame(cbPolarity, new TGLayoutHints(kLHintsCenterY, 5,5,3,4));
|
||||
TGLabel * lbPol = new TGLabel(vfInput1, "Polarity");vfInput1->AddFrame(lbPol, layoutHintsR);
|
||||
cbPolarity = new TGComboBox(vfInput2); vfInput2->AddFrame(cbPolarity, layoutHints);
|
||||
cbPolarity->AddEntry("Positive +", 1);
|
||||
cbPolarity->AddEntry("Negative -", 0);
|
||||
cbPolarity->Resize(width, 20);
|
||||
|
@ -124,18 +90,125 @@ ChannelSetting::ChannelSetting(const TGWindow *p, UInt_t w, UInt_t h, Digitizer
|
|||
|
||||
|
||||
///---------- Input Dynamic Range
|
||||
TGLabel * lbInputDynamicRange = new TGLabel(hfInput1, "Input Range");hfInput1->AddFrame(lbInputDynamicRange, new TGLayoutHints( kLHintsCenterY, 5, 5, 3, 4));
|
||||
cbInputDynamicRange = new TGComboBox(hfInput1); hfInput1->AddFrame(cbInputDynamicRange, new TGLayoutHints(kLHintsCenterY, 5,5,3,4));
|
||||
TGLabel * lbInputDynamicRange = new TGLabel(vfInput1, "Input Range");vfInput1->AddFrame(lbInputDynamicRange, layoutHintsR);
|
||||
cbInputDynamicRange = new TGComboBox(vfInput2); vfInput2->AddFrame(cbInputDynamicRange, layoutHints);
|
||||
cbInputDynamicRange->AddEntry("2.0 Vpp", 0);
|
||||
cbInputDynamicRange->AddEntry("0.5 Vpp", 1);
|
||||
cbInputDynamicRange->Resize(width, 20);
|
||||
cbInputDynamicRange->Select(0);
|
||||
|
||||
///---------- Record Length
|
||||
TGLabel * lbRecordLength = new TGLabel(hfInput1, "Record Length");hfInput1->AddFrame(lbRecordLength, new TGLayoutHints( kLHintsCenterY, 5, 5, 3, 4));
|
||||
//TGNumberEntry* entry = new TGNumberEntry(hfInput1, temp, 0, 0, digi, TGNumberFormat::kNEANonNegative);
|
||||
// entry[i]->Resize(width, 20);
|
||||
TGLabel * lbRecordLength = new TGLabel(vfInput1, "Record Length [ns]"); vfInput1->AddFrame(lbRecordLength, layoutHintsR);
|
||||
TGNumberEntry* numRecordLength = new TGNumberEntry(vfInput2, 20000, 0, 0, TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative); vfInput2->AddFrame(numRecordLength, layoutHints);
|
||||
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
|
||||
TGHorizontalFrame *hframe[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));
|
||||
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
fMain->MapSubwindows();
|
||||
fMain->Resize(fMain->GetDefaultSize());
|
||||
|
@ -184,10 +257,6 @@ ChannelSetting::~ChannelSetting(){
|
|||
delete cbInputDynamicRange;
|
||||
delete cbPolarity;
|
||||
|
||||
for ( int i = 0; i < NUM_CHANNEL_SETTING; i++){
|
||||
delete entry[i];
|
||||
}
|
||||
|
||||
/// fMain must be delete last;
|
||||
fMain->Cleanup();
|
||||
delete fMain;
|
||||
|
@ -205,11 +274,6 @@ void ChannelSetting::ChangeCh(){
|
|||
//pixie->GetChannelPolarity(boardID, ch) ? cbPolarity->Select(1) : cbPolarity->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(){
|
||||
short boardID = boardIDEntry->GetNumber();
|
||||
|
@ -223,6 +287,8 @@ void ChannelSetting::ChangePolarity(){
|
|||
short ch = chIDEntry->GetNumber();
|
||||
int val = cbPolarity->GetSelected();
|
||||
|
||||
printf("------------- testing from BoardSetting\n");
|
||||
|
||||
//pixie->SetChannelPositivePolarity(val, boardID, ch);
|
||||
//pixie->SaveSettings(pixie->GetSettingFile(boardIDEntry->GetNumber()));
|
||||
}
|
||||
|
@ -230,7 +296,6 @@ void ChannelSetting::ChangePolarity(){
|
|||
void ChannelSetting::ChangeID(int id){
|
||||
short boardID = boardIDEntry->GetNumber();
|
||||
short ch = chIDEntry->GetNumber();
|
||||
double val = entry[id]->GetNumber();
|
||||
|
||||
//pixie->SetChannelSetting(settingName[id][0].Data(), val, boardID, ch, 1);
|
||||
//pixie->SaveSettings(pixie->GetSettingFile(boardIDEntry->GetNumber()));
|
||||
|
|
|
@ -9,8 +9,6 @@
|
|||
#include "ClassDigitizer.h"
|
||||
#include "macro.h"
|
||||
|
||||
#define NUM_CHANNEL_SETTING 20
|
||||
|
||||
class TGWindow;
|
||||
class TGMainFrame;
|
||||
|
||||
|
@ -24,8 +22,6 @@ class ChannelSetting{
|
|||
TGComboBox * cbPolarity;
|
||||
TGComboBox * cbInputDynamicRange;
|
||||
|
||||
TGNumberEntry * entry[NUM_CHANNEL_SETTING];
|
||||
|
||||
Digitizer ** digi;
|
||||
int NChannel;
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user