fix some bugs

This commit is contained in:
carina@hades 2022-10-06 15:49:08 -04:00
parent 8fa455925b
commit 44527bba49
10 changed files with 169 additions and 83 deletions

View File

@ -102,9 +102,9 @@ inline void Data::AllocateMemory(){
delete buffer; delete buffer;
//TODO calculate Suitable buffer size //TODO calculate Suitable buffer size
BufferSize = 1000000; /// 1M byte BufferSize = 1* 1024* 1024; /// 10M byte
buffer = (char *) malloc( BufferSize); buffer = (char *) malloc( BufferSize);
printf("Allocated %d byte for buffer \n", BufferSize); printf("Allocated %d (%lu) byte for buffer \n", BufferSize, sizeof(buffer));
///for( int i = 0 ; i < MaxNChannels ; i++ ) Events[i] = (CAEN_DGTZ_DPP_PHA_Event_t *) malloc( BufferSize); ///for( int i = 0 ; i < MaxNChannels ; i++ ) Events[i] = (CAEN_DGTZ_DPP_PHA_Event_t *) malloc( BufferSize);
///printf("Allocated %d byte for Events for each channel \n", BufferSize); ///printf("Allocated %d byte for Events for each channel \n", BufferSize);

View File

@ -363,24 +363,35 @@ void Digitizer::WriteRegister(uint32_t registerAddress, uint32_t value, int ch )
if( ch < 0 ){ if( ch < 0 ){
for( int i = 0; i < NChannel/2; i++){ for( int i = 0; i < NChannel/2; i++){
ret = CAEN_DGTZ_WriteRegister(handle, registerAddress + 4*i, value); ret = CAEN_DGTZ_WriteRegister(handle, registerAddress + 4*i, value);
SaveSettingToFile(registerAddress, value, i); ReadRegister(registerAddress, i);
} }
}else{ }else{
ret = CAEN_DGTZ_WriteRegister(handle, registerAddress + 4*(ch/2), value); ret = CAEN_DGTZ_WriteRegister(handle, registerAddress + 4*(ch/2), value);
SaveSettingToFile(registerAddress, value, ch); ReadRegister(registerAddress, ch);
} }
}else if( registerAddress < 0x8000){ }else if( registerAddress < 0x8000){
if( ch < 0 ) { if( ch < 0 ) {
ret = CAEN_DGTZ_WriteRegister(handle, registerAddress + 0x7000, value); ret = CAEN_DGTZ_WriteRegister(handle, registerAddress + 0x7000, value);
for( int i = 0; i < NChannel; i++) SaveSettingToFile(value, registerAddress, i); for( int i = 0; i < NChannel; i++) ReadRegister(registerAddress, i);
}else{ }else{
ret = CAEN_DGTZ_WriteRegister(handle, registerAddress + (ch<<8), value); ret = CAEN_DGTZ_WriteRegister(handle, registerAddress + (ch<<8), value);
SaveSettingToFile(registerAddress, value, ch); ReadRegister(registerAddress, ch);
} }
}else{ }else{
ret = CAEN_DGTZ_WriteRegister(handle, registerAddress, value); ret = CAEN_DGTZ_WriteRegister(handle, registerAddress, value);
SaveSettingToFile(registerAddress, value); ReadRegister(registerAddress);
} }
/// for grouped address
if( registerAddress == Register::DPP::RecordLength_G ||
registerAddress == Register::DPP::NumberEventsPerAggregate_G ||
registerAddress == Register::DPP::PHA::DPPAlgorithmControl2_G ||
registerAddress == Register::DPP::PSD::DPPAlgorithmControl2_G ||
registerAddress == Register::DPP::TriggerValidationMask_G
){
ReadRegister(registerAddress, ch + (ch%2 == 1 ? -1 : +1));
}
ErrorMsg("WriteRegister:" + std::to_string(registerAddress)); ErrorMsg("WriteRegister:" + std::to_string(registerAddress));
} }
@ -400,7 +411,7 @@ uint32_t Digitizer::ReadRegister(uint32_t registerAddress, int ch, string str ){
uint32_t data[1]; uint32_t data[1];
ret = CAEN_DGTZ_ReadRegister(handle, actualAddress, data); ret = CAEN_DGTZ_ReadRegister(handle, actualAddress, data);
SaveSettingToFile(registerAddress, data[0], ch); if( ret == 0 ) SaveSettingToFile(registerAddress, data[0], ch);
ErrorMsg("ReadRegister:" + std::to_string(registerAddress)); ErrorMsg("ReadRegister:" + std::to_string(registerAddress));
if( str != "" ) printf("%s : 0x%04X(0x%04X) is 0x%08X \n", str.c_str(), actualAddress, registerAddress, data[0]); if( str != "" ) printf("%s : 0x%04X(0x%04X) is 0x%08X \n", str.c_str(), actualAddress, registerAddress, data[0]);
return data[0]; return data[0];
@ -649,6 +660,9 @@ int Digitizer::ProgramPHABoard(){
printf("End of program board and channels\n"); printf("End of program board and channels\n");
isSettingFilledinMemeory = false;
FillAllSettings();
return ret; return ret;
} }

View File

@ -222,8 +222,8 @@ MainWindow::MainWindow(const TGWindow *p,UInt_t w,UInt_t h) {
//HandleMenu(M_BOARD_SETTINGS); //HandleMenu(M_BOARD_SETTINGS);
//HandleMenu(M_CH_SETTING_PHA); //HandleMenu(M_CH_SETTING_PHA);
//HandleMenu(M_CH_SETTING_PSD); //HandleMenu(M_CH_SETTING_PSD);
//HandleMenu(M_REGISTER_SETTING); HandleMenu(M_REGISTER_SETTING);
HandleMenu(M_TRIGGER_SUMMARY); //HandleMenu(M_TRIGGER_SUMMARY);
gAnaTrace1 = new TGraph(); gAnaTrace1 = new TGraph();
gAnaTrace2 = new TGraph(); gAnaTrace2 = new TGraph();
@ -403,6 +403,7 @@ void MainWindow::OpenDigitizers(){
fMenuDigitizers->DisableEntry( M_DIGITIZER_OPEN); fMenuDigitizers->DisableEntry( M_DIGITIZER_OPEN);
fMenuDigitizers->EnableEntry( M_LOAD_SETTINGS); fMenuDigitizers->EnableEntry( M_LOAD_SETTINGS);
fMenuDigitizers->EnableEntry( M_TRIGGER_SUMMARY); fMenuDigitizers->EnableEntry( M_TRIGGER_SUMMARY);
fMenuDigitizers->EnableEntry( M_REGISTER_SETTING);
bOpenDigitizers->SetEnabled(false); bOpenDigitizers->SetEnabled(false);
bStartRun->SetEnabled(true); bStartRun->SetEnabled(true);
@ -433,8 +434,9 @@ void MainWindow::ChangeBoard(){
void MainWindow::GoodBye(){ void MainWindow::GoodBye(){
printf("----- bye bye ---- \n"); for( int i = 0; i < nDigi; i++) digi[i]->CloseDigitizer();
printf("----- bye bye ---- \n");
gApplication->Terminate(0); gApplication->Terminate(0);
} }
@ -444,6 +446,7 @@ void MainWindow::StartRun(){
if( digi == NULL) return; if( digi == NULL) return;
for( int bd = 0; bd < nDigi; bd++){ for( int bd = 0; bd < nDigi; bd++){
hChannel[bd]->Reset();
for( int ch = 0; ch < MaxNChannels; ch++){ for( int ch = 0; ch < MaxNChannels; ch++){
hEnergy[bd][ch]->Reset(); hEnergy[bd][ch]->Reset();
} }

View File

@ -695,11 +695,14 @@ BoardSetting::~BoardSetting(){
printf("close BoardSetting window\n"); printf("close BoardSetting window\n");
for( int i = 0; i < nDigi; i++) digi[i] = 0; //for( int i = 0; i < nDigi; i++) digi[i] = 0;
//pha = 0; //pha = 0;
//psd = 0; //psd = 0;
//delete readStatusThread; //delete readStatusThread;
delete boardIDEntry;
for(int i = 0; i < NUM_BOARD_INFO; i++) delete entry[i];
fMain->Cleanup(); fMain->Cleanup();
delete fMain; delete fMain;
@ -716,7 +719,7 @@ void BoardSetting::ReadStatus(){
/// ACQ Status /// ACQ Status
///digi[boardID]->PrintRegister(Register::DPP::AcquisitionStatus, "ACQ Status"); ///digi[boardID]->PrintRegister(Register::DPP::AcquisitionStatus, "ACQ Status");
uint32_t temp = digi[boardID]->ReadRegister(Register::DPP::AcquisitionStatus_R); uint32_t temp = digi[boardID]->GetSettingFromMemory(Register::DPP::AcquisitionStatus_R);
txtACQStatus ->SetText( ((temp >> 2) & 0x1) == 0 ? "ACQ is stopped" : "ACQ is Running", false); txtACQStatus->SetTextColor( ((temp >> 2) & 0x1) == 0 ? 1 : blue); txtACQStatus ->SetText( ((temp >> 2) & 0x1) == 0 ? "ACQ is stopped" : "ACQ is Running", false); txtACQStatus->SetTextColor( ((temp >> 2) & 0x1) == 0 ? 1 : blue);
txtACQEventReady ->SetText( ((temp >> 3) & 0x1) == 0 ? "no Event" : "Has Events", false); txtACQEventReady->SetTextColor( ((temp >> 3) & 0x1) == 0 ? 1 : blue); txtACQEventReady ->SetText( ((temp >> 3) & 0x1) == 0 ? "no Event" : "Has Events", false); txtACQEventReady->SetTextColor( ((temp >> 3) & 0x1) == 0 ? 1 : blue);
@ -737,7 +740,7 @@ void BoardSetting::ReadStatus(){
/// Redaout Status /// Redaout Status
///digi[boardID]->PrintRegister(Register::DPP::ReadoutStatus, "Readout Status"); ///digi[boardID]->PrintRegister(Register::DPP::ReadoutStatus, "Readout Status");
temp = digi[boardID]->ReadRegister(Register::DPP::ReadoutStatus_R); temp = digi[boardID]->GetSettingFromMemory(Register::DPP::ReadoutStatus_R);
if( (temp & 0x1) == 1 ){ if( (temp & 0x1) == 1 ){
txtEventReady->SetText( "Event Ready" , false); txtEventReady->SetTextColor(blue); txtEventReady->SetText( "Event Ready" , false); txtEventReady->SetTextColor(blue);
}else{ }else{
@ -758,7 +761,7 @@ void BoardSetting::ReadStatus(){
///================ Board Failure Status ///================ Board Failure Status
///digi[boardID]->PrintRegister(Register::DPP::BoardFailureStatus, "Board Fail"); ///digi[boardID]->PrintRegister(Register::DPP::BoardFailureStatus, "Board Fail");
temp = digi[boardID]->ReadRegister(Register::DPP::BoardFailureStatus_R); temp = digi[boardID]->GetSettingFromMemory(Register::DPP::BoardFailureStatus_R);
if( ((temp >> 4) & 0x1) == 0 ) { if( ((temp >> 4) & 0x1) == 0 ) {
enPLLStatus->SetText( "OK" , false); enPLLStatus->SetTextColor(1); enPLLStatus->SetText( "OK" , false); enPLLStatus->SetTextColor(1);
}else{ }else{
@ -819,36 +822,36 @@ void BoardSetting::ChangeBoard(){
} }
} }
cbAggOrg->Select( digi[boardID]->ReadRegister(Register::DPP::AggregateOrganization) , false); cbAggOrg->Select( digi[boardID]->GetSettingFromMemory(Register::DPP::AggregateOrganization) , false);
numAggBLT->SetNumber( digi[boardID]->ReadRegister(Register::DPP::MaxAggregatePerBlockTransfer) , false); numAggBLT->SetNumber( digi[boardID]->GetSettingFromMemory(Register::DPP::MaxAggregatePerBlockTransfer) , false);
if( digi[boardID]->GetNChannel() == 8 ){ if( digi[boardID]->GetNChannel() == 8 ){
///FAN Speed control only for desktop version ///FAN Speed control only for desktop version
cbFanCtrl->SetEnabled(true); cbFanCtrl->SetEnabled(true);
cbFanCtrl->Select( digi[boardID]->ReadRegister(Register::DPP::FanSpeedControl) , false); cbFanCtrl->Select( digi[boardID]->GetSettingFromMemory(Register::DPP::FanSpeedControl) , false);
}else{ }else{
cbFanCtrl->SetEnabled(false); cbFanCtrl->SetEnabled(false);
cbFanCtrl->Select( 0 , false); cbFanCtrl->Select( 0 , false);
} }
numRunStartStopDelay->SetNumber( digi[boardID]->ReadRegister(Register::DPP::RunStartStopDelay), false); numRunStartStopDelay->SetNumber( digi[boardID]->GetSettingFromMemory(Register::DPP::RunStartStopDelay), false);
bEnableExtTRG->SetState( (digi[boardID]->ReadRegister(Register::DPP::DisableExternalTrigger) & 0x1) ? kButtonDown : kButtonUp, false); bEnableExtTRG->SetState( (digi[boardID]->GetSettingFromMemory(Register::DPP::DisableExternalTrigger) & 0x1) ? kButtonDown : kButtonUp, false);
///numExtendVetoDelay->SetNumber( digi[boardID]->ReadRegister(Register::DPP::ExtendedVetoDelay) , false); ///numExtendVetoDelay->SetNumber( digi[boardID]->GetSettingFromMemory(Register::DPP::ExtendedVetoDelay) , false);
cbAnaMonitor->Select( digi[boardID]->ReadRegister(Register::DPP::AnalogMonitorMode) & 0x7 , false); cbAnaMonitor->Select( digi[boardID]->GetSettingFromMemory(Register::DPP::AnalogMonitorMode) & 0x7 , false);
numBufferOccpGain->SetNumber( digi[boardID]->ReadRegister(Register::DPP::BufferOccupancyGain) & 0xf, false); numBufferOccpGain->SetNumber( digi[boardID]->GetSettingFromMemory(Register::DPP::BufferOccupancyGain) & 0xf, false);
ReadStatus(); ReadStatus();
/// ACQ Control /// ACQ Control
//digi[boardID]->PrintRegister(Register::DPP::AcquisitionControl, "AcquisitionControl"); //digi[boardID]->PrintRegister(Register::DPP::AcquisitionControl, "AcquisitionControl");
uint32_t tempBits = digi[boardID]->ReadRegister(Register::DPP::AcquisitionControl); uint32_t tempBits = digi[boardID]->GetSettingFromMemory(Register::DPP::AcquisitionControl);
cbAcqMode->Select( tempBits & 0x3 , false); cbAcqMode->Select( tempBits & 0x3 , false);
bAcqArm->SetState( ((tempBits >> 2) & 0x1) ? kButtonDown : kButtonUp, false); bAcqArm->SetState( ((tempBits >> 2) & 0x1) ? kButtonDown : kButtonUp, false);
cbPLLref->Select( ((tempBits >> 6) & 0x1), false); cbPLLref->Select( ((tempBits >> 6) & 0x1), false);
/// Global Trigger Mask /// Global Trigger Mask
tempBits = digi[boardID]->ReadRegister(Register::DPP::GlobalTriggerMask); tempBits = digi[boardID]->GetSettingFromMemory(Register::DPP::GlobalTriggerMask);
for( int i = 0; i < 8; i++){ for( int i = 0; i < 8; i++){
cbGbTRGMskCh[i]->SetState( ((tempBits >> i ) & 0x1) == 0 ? kButtonUp : kButtonDown , false); cbGbTRGMskCh[i]->SetState( ((tempBits >> i ) & 0x1) == 0 ? kButtonUp : kButtonDown , false);
} }
@ -858,7 +861,7 @@ void BoardSetting::ChangeBoard(){
bGLBSoftwareTrigger->SetState( (( tempBits >> 31) & 0x1 ) == 0 ? kButtonUp : kButtonDown, false); bGLBSoftwareTrigger->SetState( (( tempBits >> 31) & 0x1 ) == 0 ? kButtonUp : kButtonDown, false);
/// Trigger Validation Mask /// Trigger Validation Mask
tempBits = digi[boardID]->ReadRegister(Register::DPP::TriggerValidationMask_G); tempBits = digi[boardID]->GetSettingFromMemory(Register::DPP::TriggerValidationMask_G);
for( int i = 0; i < 8; i++){ for( int i = 0; i < 8; i++){
cbTRGValMskCh[i]->SetState( ((tempBits >> i ) & 0x1) == 0 ? kButtonUp : kButtonDown , false); cbTRGValMskCh[i]->SetState( ((tempBits >> i ) & 0x1) == 0 ? kButtonUp : kButtonDown , false);
} }
@ -868,7 +871,7 @@ void BoardSetting::ChangeBoard(){
bTRGSoftwareTrigger->SetState( (( tempBits >> 31) & 0x1 ) == 0 ? kButtonUp : kButtonDown, false); bTRGSoftwareTrigger->SetState( (( tempBits >> 31) & 0x1 ) == 0 ? kButtonUp : kButtonDown, false);
/// Front Panel TRG-OUT Enable Mask , PHA = PSD only for bit[19:0] /// Front Panel TRG-OUT Enable Mask , PHA = PSD only for bit[19:0]
tempBits = digi[boardID]->ReadRegister(Register::DPP::FrontPanelTRGOUTEnableMask); tempBits = digi[boardID]->GetSettingFromMemory(Register::DPP::FrontPanelTRGOUTEnableMask);
for( int i = 0; i < 8; i++){ for( int i = 0; i < 8; i++){
cbTRGOUTMskCh[i]->SetState( ((tempBits >> i ) & 0x1) == 0 ? kButtonUp : kButtonDown, false ); cbTRGOUTMskCh[i]->SetState( ((tempBits >> i ) & 0x1) == 0 ? kButtonUp : kButtonDown, false );
} }
@ -878,7 +881,7 @@ void BoardSetting::ChangeBoard(){
bTRGOUTSoftwareTrigger->SetState( (( tempBits >> 30) & 0x1 ) == 0 ? kButtonUp : kButtonDown, false); bTRGOUTSoftwareTrigger->SetState( (( tempBits >> 30) & 0x1 ) == 0 ? kButtonUp : kButtonDown, false);
/// Front Panel I/O Control, PHA = PSD only for bit[19:0] /// Front Panel I/O Control, PHA = PSD only for bit[19:0]
tempBits = digi[boardID]->ReadRegister(Register::DPP::FrontPanelIOControl); tempBits = digi[boardID]->GetSettingFromMemory(Register::DPP::FrontPanelIOControl);
cbLEMOIO->Select( tempBits & 0x1 , false); cbLEMOIO->Select( tempBits & 0x1 , false);
if( ((tempBits >> 1) & 0x1 ) == 0 ) { if( ((tempBits >> 1) & 0x1 ) == 0 ) {
cbTRGOUTmode->Select( 2 , false); cbTRGOUTmode->Select( 2 , false);
@ -889,7 +892,7 @@ void BoardSetting::ChangeBoard(){
cbTRGINMezzanines->Select( (tempBits >> 11) & 0x1 , false); cbTRGINMezzanines->Select( (tempBits >> 11) & 0x1 , false);
/// Readout Control /// Readout Control
tempBits = digi[boardID]->ReadRegister(Register::DPP::ReadoutControl); tempBits = digi[boardID]->GetSettingFromMemory(Register::DPP::ReadoutControl);
cbVMEInterrupLevel->Select( tempBits & 0x3 , false); cbVMEInterrupLevel->Select( tempBits & 0x3 , false);
bOpticalLinkInterrupt->SetState( (( tempBits >> 3 ) & 0x1 ) == 0 ? kButtonUp : kButtonDown, false) ; bOpticalLinkInterrupt->SetState( (( tempBits >> 3 ) & 0x1 ) == 0 ? kButtonUp : kButtonDown, false) ;
bEventAligned->SetState( (( tempBits >> 4 ) & 0x1 ) == 0 ? kButtonUp : kButtonDown, false) ; bEventAligned->SetState( (( tempBits >> 4 ) & 0x1 ) == 0 ? kButtonUp : kButtonDown, false) ;
@ -939,7 +942,7 @@ void BoardSetting::ChangeBoard(){
/// Board Configuration /// Board Configuration
//digi[boardID]->PrintRegister(Register::DPP::BoardConfiguration, "BoardConfiguration"); //digi[boardID]->PrintRegister(Register::DPP::BoardConfiguration, "BoardConfiguration");
tempBits = digi[boardID]->ReadRegister(Register::DPP::BoardConfiguration); tempBits = digi[boardID]->GetSettingFromMemory(Register::DPP::BoardConfiguration);
bAutoDataFlush->SetState( (tempBits & 0x1) ? kButtonDown : kButtonUp, false); bAutoDataFlush->SetState( (tempBits & 0x1) ? kButtonDown : kButtonUp, false);
bDecimateWF->SetState( ((tempBits >> 1) & 0x1) ? kButtonDown : kButtonUp, false ); bDecimateWF->SetState( ((tempBits >> 1) & 0x1) ? kButtonDown : kButtonUp, false );
@ -997,7 +1000,7 @@ void BoardSetting::ChangeBoard(){
cbDP2->AddEntry("Baseline freeze", 6); cbDP2->AddEntry("Baseline freeze", 6);
cbDP2->AddEntry("Trigger", 7); cbDP2->AddEntry("Trigger", 7);
tempBits = digi[boardID]->ReadRegister(Register::DPP::BoardConfiguration); tempBits = digi[boardID]->GetSettingFromMemory(Register::DPP::BoardConfiguration);
bAutoDataFlush->SetState( (tempBits & 0x1) ? kButtonDown : kButtonUp, false); bAutoDataFlush->SetState( (tempBits & 0x1) ? kButtonDown : kButtonUp, false);
bTrigPropa->SetState( ((tempBits >> 2) & 0x1) ? kButtonDown : kButtonUp, false ); bTrigPropa->SetState( ((tempBits >> 2) & 0x1) ? kButtonDown : kButtonUp, false );
@ -1323,7 +1326,7 @@ void BoardSetting::ReadData(){
if( digi == NULL ) return; if( digi == NULL ) return;
int boardID = boardIDEntry->GetNumber(); int boardID = boardIDEntry->GetNumber();
uint32_t temp = digi[boardID]->ReadRegister(Register::DPP::ReadoutStatus_R); uint32_t temp = digi[boardID]->GetSettingFromMemory(Register::DPP::ReadoutStatus_R);
if( (temp & 0x1) == 0 ) { if( (temp & 0x1) == 0 ) {
printf("No data. \n"); printf("No data. \n");
return; return;

View File

@ -115,6 +115,7 @@ ChannelSettingPHA::ChannelSettingPHA(const TGWindow *p, UInt_t w, UInt_t h, Digi
TGLabel * lbEventAgg = new TGLabel(vfInput1, "Events / Aggregate"); vfInput1->AddFrame(lbEventAgg, layoutHintsR); TGLabel * lbEventAgg = new TGLabel(vfInput1, "Events / Aggregate"); vfInput1->AddFrame(lbEventAgg, layoutHintsR);
numEventAgg = new TGNumberEntry(vfInput2, 512, 0, 0, TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative); vfInput2->AddFrame(numEventAgg, layoutHints); numEventAgg = new TGNumberEntry(vfInput2, 512, 0, 0, TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative); vfInput2->AddFrame(numEventAgg, layoutHints);
numEventAgg->Resize(width, 20); numEventAgg->Resize(width, 20);
numEventAgg->SetLimits(TGNumberFormat::kNELLimitMinMax, 0, 511);
numEventAgg->Connect("Modified()", "ChannelSettingPHA", this, "SetEventAggregate()"); numEventAgg->Connect("Modified()", "ChannelSettingPHA", this, "SetEventAggregate()");
///const uint32_t ChannelDCOffset = 0x1098; /// R/W ///const uint32_t ChannelDCOffset = 0x1098; /// R/W
@ -491,29 +492,29 @@ void ChannelSettingPHA::ChangeCh(){
LogMsg(Form("Read Channel %d Setting", (int)chIDEntry->GetNumber())); LogMsg(Form("Read Channel %d Setting", (int)chIDEntry->GetNumber()));
cbOnOff->Select( (digi[boardID]->GetChannelMask() >> ch) & 0x1, false); /// don't emit signal cbOnOff->Select( (digi[boardID]->GetChannelMask() >> ch) & 0x1, false); /// don't emit signal
cbInputDynamicRange->Select( digi[boardID]->ReadRegister(Register::DPP::InputDynamicRange, ch), false); cbInputDynamicRange->Select( digi[boardID]->GetSettingFromMemory(Register::DPP::InputDynamicRange, ch), false);
numRecordLength->SetNumber( digi[boardID]->ReadRegister(Register::DPP::RecordLength_G, ch) * 8 * ch2ns, false); numRecordLength->SetNumber( digi[boardID]->GetSettingFromMemory(Register::DPP::RecordLength_G, ch) * 8 * ch2ns, false);
numPreTrigger->SetNumber( digi[boardID]->ReadRegister(Register::DPP::PreTrigger, ch) * 4 * ch2ns, false); numPreTrigger->SetNumber( digi[boardID]->GetSettingFromMemory(Register::DPP::PreTrigger, ch) * 4 * ch2ns, false);
numEventAgg->SetNumber( digi[boardID]->ReadRegister(Register::DPP::NumberEventsPerAggregate_G, ch), false); numEventAgg->SetNumber( digi[boardID]->GetSettingFromMemory(Register::DPP::NumberEventsPerAggregate_G, ch), false);
uint32_t temp = digi[boardID]->ReadRegister(Register::DPP::ChannelDCOffset, ch); uint32_t temp = digi[boardID]->GetSettingFromMemory(Register::DPP::ChannelDCOffset, ch);
numDCOffset->SetNumber( 1.0 - temp * 1.0/0xFFFF , false); numDCOffset->SetNumber( 1.0 - temp * 1.0/0xFFFF , false);
eTemp->SetText(Form("%d C", digi[boardID]->ReadRegister(Register::DPP::ChannelADCTemperature_R, ch)), false); eTemp->SetText(Form("%d C", digi[boardID]->GetSettingFromMemory(Register::DPP::ChannelADCTemperature_R, ch)), false);
numTriggerThreshold->SetNumber( digi[boardID]->ReadRegister(Register::DPP::PHA::TriggerThreshold, ch), false); numTriggerThreshold->SetNumber( digi[boardID]->GetSettingFromMemory(Register::DPP::PHA::TriggerThreshold, ch), false);
numTriggerHoldOff ->SetNumber( digi[boardID]->ReadRegister(Register::DPP::PHA::TriggerHoldOffWidth, ch) * 4 * ch2ns, false); numTriggerHoldOff ->SetNumber( digi[boardID]->GetSettingFromMemory(Register::DPP::PHA::TriggerHoldOffWidth, ch) * 4 * ch2ns, false);
cbTriggerSmoothing ->Select( digi[boardID]->ReadRegister(Register::DPP::PHA::RCCR2SmoothingFactor, ch), false); cbTriggerSmoothing ->Select( digi[boardID]->GetSettingFromMemory(Register::DPP::PHA::RCCR2SmoothingFactor, ch), false);
numInputRiseTime ->SetNumber( digi[boardID]->ReadRegister(Register::DPP::PHA::InputRiseTime, ch) * 4 * ch2ns, false); numInputRiseTime ->SetNumber( digi[boardID]->GetSettingFromMemory(Register::DPP::PHA::InputRiseTime, ch) * 4 * ch2ns, false);
numRiseTimeValidWin->SetNumber( digi[boardID]->ReadRegister(Register::DPP::PHA::RiseTimeValidationWindow, ch) * ch2ns, false); numRiseTimeValidWin->SetNumber( digi[boardID]->GetSettingFromMemory(Register::DPP::PHA::RiseTimeValidationWindow, ch) * ch2ns, false);
numTrapRiseTime->SetNumber( digi[boardID]->ReadRegister(Register::DPP::PHA::TrapezoidRiseTime, ch) * 4 * ch2ns, false); numTrapRiseTime->SetNumber( digi[boardID]->GetSettingFromMemory(Register::DPP::PHA::TrapezoidRiseTime, ch) * 4 * ch2ns, false);
numTrapFlatTop->SetNumber( digi[boardID]->ReadRegister(Register::DPP::PHA::TrapezoidFlatTop, ch) * 4 * ch2ns, false); numTrapFlatTop->SetNumber( digi[boardID]->GetSettingFromMemory(Register::DPP::PHA::TrapezoidFlatTop, ch) * 4 * ch2ns, false);
numDecay->SetNumber( digi[boardID]->ReadRegister(Register::DPP::PHA::DecayTime, ch) * 4 * ch2ns, false); numDecay->SetNumber( digi[boardID]->GetSettingFromMemory(Register::DPP::PHA::DecayTime, ch) * 4 * ch2ns, false);
numPeaking->SetNumber( digi[boardID]->ReadRegister(Register::DPP::PHA::PeakingTime, ch) * 4 * ch2ns, false); numPeaking->SetNumber( digi[boardID]->GetSettingFromMemory(Register::DPP::PHA::PeakingTime, ch) * 4 * ch2ns, false);
numPeakHoldOff->SetNumber( digi[boardID]->ReadRegister(Register::DPP::PHA::PeakHoldOff, ch) * 4 * ch2ns, false); numPeakHoldOff->SetNumber( digi[boardID]->GetSettingFromMemory(Register::DPP::PHA::PeakHoldOff, ch) * 4 * ch2ns, false);
temp = digi[boardID]->ReadRegister(Register::DPP::DPPAlgorithmControl, ch); temp = digi[boardID]->GetSettingFromMemory(Register::DPP::DPPAlgorithmControl, ch);
numTrapScale->SetNumber( temp & 0x3F, false ); numTrapScale->SetNumber( temp & 0x3F, false );
cbDecimation->Select( ( (temp >> 8) & 0x3), false); cbDecimation->Select( ( (temp >> 8) & 0x3), false);
cbDecimationGain->Select( ( (temp >> 10) & 0x3), false); cbDecimationGain->Select( ( (temp >> 10) & 0x3), false);
@ -525,7 +526,7 @@ void ChannelSettingPHA::ChangeCh(){
cbRollOver->Select( ( (temp >> 26) & 0x1), false); cbRollOver->Select( ( (temp >> 26) & 0x1), false);
cbPileUp->Select( ( (temp >> 27) & 0x1), false); cbPileUp->Select( ( (temp >> 27) & 0x1), false);
temp = digi[boardID]->ReadRegister(Register::DPP::PHA::DPPAlgorithmControl2_G, ch); temp = digi[boardID]->GetSettingFromMemory(Register::DPP::PHA::DPPAlgorithmControl2_G, ch);
if( (((temp >> 2)) & 0x1 ) == 1 ){ if( (((temp >> 2)) & 0x1 ) == 1 ){
cbLocalShapedTrigger->Select( (temp & 0x3), false); cbLocalShapedTrigger->Select( (temp & 0x3), false);
}else{ }else{
@ -687,8 +688,6 @@ void ChannelSettingPHA::ChangeAStep(TGNumberEntry * numEntry, unsigned short ste
void ChannelSettingPHA::SetRecordLength() {printf("=== %s\n", __func__); ChangeAStep(numRecordLength, 8, Register::DPP::RecordLength_G); } void ChannelSettingPHA::SetRecordLength() {printf("=== %s\n", __func__); ChangeAStep(numRecordLength, 8, Register::DPP::RecordLength_G); }
void ChannelSettingPHA::SetPreTrigger() {printf("=== %s\n", __func__); ChangeAStep(numPreTrigger, 4, Register::DPP::PreTrigger);} void ChannelSettingPHA::SetPreTrigger() {printf("=== %s\n", __func__); ChangeAStep(numPreTrigger, 4, Register::DPP::PreTrigger);}
void ChannelSettingPHA::SetEventAggregate() {printf("=== %s\n", __func__); ChangeAStep(numEventAgg, 1, Register::DPP::NumberEventsPerAggregate_G);}
void ChannelSettingPHA::SetTriggerThreshold(){printf("=== %s\n", __func__); ChangeAStep(numTriggerThreshold, 1, Register::DPP::PHA::TriggerThreshold); }
void ChannelSettingPHA::SetTriggerHoldOff() {printf("=== %s\n", __func__); ChangeAStep(numTriggerHoldOff, 4, Register::DPP::PHA::TriggerHoldOffWidth);} void ChannelSettingPHA::SetTriggerHoldOff() {printf("=== %s\n", __func__); ChangeAStep(numTriggerHoldOff, 4, Register::DPP::PHA::TriggerHoldOffWidth);}
void ChannelSettingPHA::SetInputRiseTime() {printf("=== %s\n", __func__); ChangeAStep(numInputRiseTime, 4, Register::DPP::PHA::InputRiseTime);} void ChannelSettingPHA::SetInputRiseTime() {printf("=== %s\n", __func__); ChangeAStep(numInputRiseTime, 4, Register::DPP::PHA::InputRiseTime);}
void ChannelSettingPHA::SetRiseTimeValidWin(){printf("=== %s\n", __func__); ChangeAStep(numRiseTimeValidWin, 1, Register::DPP::PHA::RiseTimeValidationWindow);} void ChannelSettingPHA::SetRiseTimeValidWin(){printf("=== %s\n", __func__); ChangeAStep(numRiseTimeValidWin, 1, Register::DPP::PHA::RiseTimeValidationWindow);}
@ -698,6 +697,26 @@ void ChannelSettingPHA::SetDecay() {printf("=== %s\n", __func__); Chan
void ChannelSettingPHA::SetPeaking() {printf("=== %s\n", __func__); ChangeAStep(numPeaking, 4, Register::DPP::PHA::PeakingTime);} void ChannelSettingPHA::SetPeaking() {printf("=== %s\n", __func__); ChangeAStep(numPeaking, 4, Register::DPP::PHA::PeakingTime);}
void ChannelSettingPHA::SetPeakHoldOff() {printf("=== %s\n", __func__); ChangeAStep(numPeakHoldOff, 4, Register::DPP::PHA::PeakHoldOff);} void ChannelSettingPHA::SetPeakHoldOff() {printf("=== %s\n", __func__); ChangeAStep(numPeakHoldOff, 4, Register::DPP::PHA::PeakHoldOff);}
void ChannelSettingPHA::SetEventAggregate() {
printf("=== %s\n", __func__);
if ( digi == NULL ) return;
short boardID = boardIDEntry->GetNumber();
short ch = chIDEntry->GetNumber();
unsigned int temp = numEventAgg->GetNumber();
if( digi != NULL ) digi[boardID]->WriteRegister(Register::DPP::NumberEventsPerAggregate_G, temp , ch);
}
void ChannelSettingPHA::SetTriggerThreshold(){
printf("=== %s\n", __func__);
if ( digi == NULL ) return;
short boardID = boardIDEntry->GetNumber();
short ch = chIDEntry->GetNumber();
unsigned int temp = numTriggerThreshold->GetNumber();
if( digi != NULL ) digi[boardID]->WriteRegister(Register::DPP::PHA::TriggerThreshold, temp , ch);
}
void ChannelSettingPHA::SetDCOffset(){ void ChannelSettingPHA::SetDCOffset(){
printf("=== %s\n", __func__); printf("=== %s\n", __func__);
if ( digi == NULL ) return; if ( digi == NULL ) return;

View File

@ -86,7 +86,7 @@ RegisterSetting::RegisterSetting(const TGWindow *p, UInt_t w, UInt_t h, Digitize
for( int i = 0; i < ( digi == NULL ? MaxNChannels : digi[boardID]->GetNChannel() ); i++){ for( int i = 0; i < ( digi == NULL ? MaxNChannels : digi[boardID]->GetNChannel() ); i++){
lbCh[i] = new TGLabel(vframe0, Form("%02d", i)); vframe0->AddFrame(lbCh[i], new TGLayoutHints(kLHintsRight, 5,5,3,2)); lbCh[i] = new TGLabel(vframe0, Form("%02d", i)); vframe0->AddFrame(lbCh[i], new TGLayoutHints(kLHintsRight, 5,5,4,2));
txtValueHex[i] = new TGTextEntry(vframe1, ""); vframe1->AddFrame(txtValueHex[i], kaka); txtValueHex[i] = new TGTextEntry(vframe1, ""); vframe1->AddFrame(txtValueHex[i], kaka);
txtValueHex[i]->Resize(100,20); txtValueHex[i]->Resize(100,20);
@ -295,7 +295,18 @@ void RegisterSetting::UpdateRegister(){
uint32_t address = cbName->GetSelected(); uint32_t address = cbName->GetSelected();
txtAddress->SetText(Form("0x%04X", address), false); txtAddress->SetText(Form("0x%04X", address), false);
if( digi == NULL ) return; if( address == 0 || digi == NULL ) {
for( int ch = 0; ch < MaxNChannels; ch++){
txtValueHex[ch]->SetText("", false);
txtValueDec[ch]->SetText("", false);
txtValueUnit[ch]->SetText("", false);
txtValueHex[ch]->SetEnabled(false);
txtValueDec[ch]->SetEnabled(false);
}
return;
}
int boardID = boardIDEntry->GetNumber(); int boardID = boardIDEntry->GetNumber();
///check is the register readable ///check is the register readable
@ -303,7 +314,6 @@ void RegisterSetting::UpdateRegister(){
int type = haha.back(); int type = haha.back();
if( address >= 0x8000 ) { if( address >= 0x8000 ) {
bSetALLChannel->SetState(kButtonDown);
bSetALLChannel->SetEnabled(false); bSetALLChannel->SetEnabled(false);
for( int ch = 0; ch < digi[boardID]->GetNChannel(); ch++){ for( int ch = 0; ch < digi[boardID]->GetNChannel(); ch++){
txtValueHex[ch]->SetText("", false); txtValueHex[ch]->SetText("", false);
@ -336,20 +346,32 @@ void RegisterSetting::UpdateRegister(){
txtValueHex[0]->SetEnabled(true); txtValueHex[0]->SetEnabled(true);
txtValueDec[0]->SetEnabled(true); txtValueDec[0]->SetEnabled(true);
} }
} }
}else{ }else{
EButtonState bState = bSetALLChannel->GetState();
//printf("========= %d \n", bState);
bSetALLChannel->SetEnabled(true); /// this will also set the buttonUP bSetALLChannel->SetEnabled(true); /// this will also set the buttonUP
if( bState == kButtonDisabled) bState = kButtonUp;
bSetALLChannel->SetState(bState);
if( type == 87){ /// 'W' if( type == 87){ /// 'W'
for( int ch = 0; ch < digi[boardID]->GetNChannel(); ch++){ for( int ch = 0; ch < digi[boardID]->GetNChannel(); ch++){
txtValueHex[ch]->SetText("Register", false); txtValueHex[ch]->SetText("Register", false);
txtValueDec[ch]->SetText("WRITE", false); txtValueDec[ch]->SetText("WRITE", false);
txtValueUnit[ch]->SetText("ONLY", false); txtValueUnit[ch]->SetText("ONLY", false);
if( bState == kButtonUp ){
txtValueHex[ch]->SetEnabled(true); txtValueHex[ch]->SetEnabled(true);
txtValueDec[ch]->SetEnabled(true); txtValueDec[ch]->SetEnabled(true);
} }
}
if( bState == kButtonDown ){
txtValueHex[0]->SetEnabled(true);
txtValueDec[0]->SetEnabled(true);
}
}else{ }else{
for( int ch = 0; ch < digi[boardID]->GetNChannel(); ch++){ for( int ch = 0; ch < digi[boardID]->GetNChannel(); ch++){
if (type == 82 ){ /// Read only if (type == 82 ){ /// Read only
@ -377,6 +399,7 @@ void RegisterSetting::UpdateRegister(){
} }
} }
} }
} }
} }

View File

@ -45,6 +45,9 @@ class RegisterSetting{
void SetTxtValueUnit(uint32_t address, int ch); void SetTxtValueUnit(uint32_t address, int ch);
///TThread * thread;
///static bool updateFlag;
public: public:
RegisterSetting(const TGWindow *p, UInt_t w, UInt_t h, Digitizer ** digi, int nBoard, uint32_t address); RegisterSetting(const TGWindow *p, UInt_t w, UInt_t h, Digitizer ** digi, int nBoard, uint32_t address);
virtual ~RegisterSetting(); virtual ~RegisterSetting();

View File

@ -81,7 +81,7 @@ long get_time(){
int main(int argc, char* argv[]){ int main(int argc, char* argv[]){
const int nBoard = 2; const int nBoard = 1;
Digitizer **dig = new Digitizer *[nBoard]; Digitizer **dig = new Digitizer *[nBoard];
for( int i = 0 ; i < nBoard; i++){ for( int i = 0 ; i < nBoard; i++){
@ -106,6 +106,7 @@ int main(int argc, char* argv[]){
//dig[0]->WriteRegister(Register::DPP::TriggerValidationMask_G, 0x600, 3); //dig[0]->WriteRegister(Register::DPP::TriggerValidationMask_G, 0x600, 3);
//dig[0]->WriteRegister(Register::DPP::Scratch, 0x12345678); //dig[0]->WriteRegister(Register::DPP::Scratch, 0x12345678);
dig[0]->ReadRegister(Register::DPP::PHA::TriggerThreshold, 0, "A0");
//dig[0]->ReadRegister(Register::DPP::RecordLength_G, 0, "A0"); //dig[0]->ReadRegister(Register::DPP::RecordLength_G, 0, "A0");
//dig[0]->ReadRegister(Register::DPP::RecordLength_G, 3, "A0"); //dig[0]->ReadRegister(Register::DPP::RecordLength_G, 3, "A0");
//dig[0]->ReadRegister(Register::DPP::DPPAlgorithmControl, 0, "A1"); //dig[0]->ReadRegister(Register::DPP::DPPAlgorithmControl, 0, "A1");
@ -114,16 +115,17 @@ int main(int argc, char* argv[]){
//dig[0]->ReadRegister(Register::DPP::TriggerValidationMask_G, 3, "A3"); //dig[0]->ReadRegister(Register::DPP::TriggerValidationMask_G, 3, "A3");
//dig[0]->ReadRegister(Register::DPP::Scratch); //dig[0]->ReadRegister(Register::DPP::Scratch);
printf(" ======== %u \n", dig[0]->GetSettingFromMemory(Register::DPP::RecordLength_G, 0)); printf(" ======== %u \n", dig[0]->GetSettingFromMemory(Register::DPP::PHA::TriggerThreshold, 0));
printf(" ======== %u \n", dig[0]->GetSettingFromMemory(Register::DPP::RecordLength_G, 3)); //printf(" ======== %u \n", dig[0]->GetSettingFromMemory(Register::DPP::RecordLength_G, 0));
//printf(" ======== %u \n", dig[0]->GetSettingFromMemory(Register::DPP::RecordLength_G, 3));
//printf(" ======== %u \n", dig[0]->GetSettingFromMemory(Register::DPP::DPPAlgorithmControl, 0)); //printf(" ======== %u \n", dig[0]->GetSettingFromMemory(Register::DPP::DPPAlgorithmControl, 0));
//printf(" ======== %u \n", dig[0]->GetSettingFromMemory(Register::DPP::TriggerValidationMask_G, 1)); //printf(" ======== %u \n", dig[0]->GetSettingFromMemory(Register::DPP::TriggerValidationMask_G, 1));
//printf(" ======== %u \n", dig[0]->GetSettingFromMemory(Register::DPP::TriggerValidationMask_G, 2)); //printf(" ======== %u \n", dig[0]->GetSettingFromMemory(Register::DPP::TriggerValidationMask_G, 2));
//printf(" ======== %u \n", dig[0]->GetSettingFromMemory(Register::DPP::TriggerValidationMask_G, 3)); //printf(" ======== %u \n", dig[0]->GetSettingFromMemory(Register::DPP::TriggerValidationMask_G, 3));
//printf(" ======== %u \n", dig[0]->GetSettingFromMemory(Register::DPP::Scratch)); //printf(" ======== %u \n", dig[0]->GetSettingFromMemory(Register::DPP::Scratch));
printf("////// %u \n", dig[0]->ReadSettingFromFile(Register::DPP::RecordLength_G, 0)); //printf("////// %u \n", dig[0]->ReadSettingFromFile(Register::DPP::RecordLength_G, 0));
printf("////// %u \n", dig[0]->ReadSettingFromFile(Register::DPP::RecordLength_G, 3)); //printf("////// %u \n", dig[0]->ReadSettingFromFile(Register::DPP::RecordLength_G, 3));
//dig[0]->ReadSettingFromFile(Register::DPP::DPPAlgorithmControl, 0); //dig[0]->ReadSettingFromFile(Register::DPP::DPPAlgorithmControl, 0);
//dig[0]->ReadSettingFromFile(Register::DPP::TriggerValidationMask_G, 1); //dig[0]->ReadSettingFromFile(Register::DPP::TriggerValidationMask_G, 1);
//dig[0]->ReadSettingFromFile(Register::DPP::TriggerValidationMask_G, 2); //dig[0]->ReadSettingFromFile(Register::DPP::TriggerValidationMask_G, 2);
@ -133,13 +135,15 @@ int main(int argc, char* argv[]){
//dig[0]->PrintSettingFromMemory(); //dig[0]->PrintSettingFromMemory();
dig[1]->LoadSettingBinary("setting_323.bin"); //dig[1]->LoadSettingBinary("setting_323.bin");
//
//printf(" ======== %u \n", dig[1]->GetSettingFromMemory(Register::DPP::RecordLength_G, 0));
//printf(" ======== %u \n", dig[1]->GetSettingFromMemory(Register::DPP::RecordLength_G, 3));
//
//printf("////// %u \n", dig[1]->ReadSettingFromFile(Register::DPP::RecordLength_G, 0));
//printf("////// %u \n", dig[1]->ReadSettingFromFile(Register::DPP::RecordLength_G, 3));
printf(" ======== %u \n", dig[1]->GetSettingFromMemory(Register::DPP::RecordLength_G, 0));
printf(" ======== %u \n", dig[1]->GetSettingFromMemory(Register::DPP::RecordLength_G, 3));
printf("////// %u \n", dig[1]->ReadSettingFromFile(Register::DPP::RecordLength_G, 0));
printf("////// %u \n", dig[1]->ReadSettingFromFile(Register::DPP::RecordLength_G, 3));
/** /**
///============================ Get Data ///============================ Get Data
TApplication * app = new TApplication("app", &argc, argv); TApplication * app = new TApplication("app", &argc, argv);

View File

@ -13,8 +13,11 @@ Digitizer ** TriggerSummary::digi = NULL;
int TriggerSummary::nDigi = 0; int TriggerSummary::nDigi = 0;
bool TriggerSummary::updateFlag = true; bool TriggerSummary::updateFlag = true;
TGTextEntry * TriggerSummary::txtTrigger[MaxNBoards][MaxNChannels] = {NULL}; TGTextEntry * TriggerSummary::txtTrigger[MaxNBoards][MaxNChannels] = {NULL};
TGTextEntry * TriggerSummary::txtThresholdValue[MaxNBoards][MaxNChannels] = {NULL};
TGTextEntry * TriggerSummary::txtThreshold[MaxNBoards][MaxNChannels] = {NULL}; TGTextEntry * TriggerSummary::txtThreshold[MaxNBoards][MaxNChannels] = {NULL};
TGNumberEntry * TriggerSummary::numUpdateTime = NULL; TGNumberEntry * TriggerSummary::numUpdateTime = NULL;
unsigned short TriggerSummary::value[MaxNBoards][MaxNChannels] = {0};
TriggerSummary::TriggerSummary(const TGWindow *p, UInt_t w, UInt_t h, Digitizer ** digi, int nBoard){ TriggerSummary::TriggerSummary(const TGWindow *p, UInt_t w, UInt_t h, Digitizer ** digi, int nBoard){
@ -39,31 +42,39 @@ TriggerSummary::TriggerSummary(const TGWindow *p, UInt_t w, UInt_t h, Digitizer
TGVerticalFrame * vframe0 = new TGVerticalFrame(gBD[bd]); gBD[bd]->AddFrame(vframe0, new TGLayoutHints(kLHintsCenterX, 0, 0, 0, 0)); TGVerticalFrame * vframe0 = new TGVerticalFrame(gBD[bd]); gBD[bd]->AddFrame(vframe0, new TGLayoutHints(kLHintsCenterX, 0, 0, 0, 0));
TGVerticalFrame * vframe1 = new TGVerticalFrame(gBD[bd]); gBD[bd]->AddFrame(vframe1, new TGLayoutHints(kLHintsCenterX, 0, 0, 0, 0)); TGVerticalFrame * vframe1 = new TGVerticalFrame(gBD[bd]); gBD[bd]->AddFrame(vframe1, new TGLayoutHints(kLHintsCenterX, 0, 0, 0, 0));
TGVerticalFrame * vframe2 = new TGVerticalFrame(gBD[bd]); gBD[bd]->AddFrame(vframe2, new TGLayoutHints(kLHintsCenterX, 0, 0, 0, 0)); TGVerticalFrame * vframe2 = new TGVerticalFrame(gBD[bd]); gBD[bd]->AddFrame(vframe2, new TGLayoutHints(kLHintsCenterX, 0, 0, 0, 0));
TGVerticalFrame * vframe3 = new TGVerticalFrame(gBD[bd]); gBD[bd]->AddFrame(vframe3, new TGLayoutHints(kLHintsCenterX, 0, 0, 0, 0));
TGLabel * lbCh0 = new TGLabel(vframe0, "ch"); vframe0->AddFrame(lbCh0, new TGLayoutHints(kLHintsCenterY, 0,5,3,2)); TGLabel * lbCh0 = new TGLabel(vframe0, "ch"); vframe0->AddFrame(lbCh0, new TGLayoutHints(kLHintsCenterY, 0,5,3,2));
TGLabel * lbTrigger = new TGLabel(vframe1, "Trig.[Hz]"); vframe1->AddFrame(lbTrigger, new TGLayoutHints(kLHintsCenterY, 5,5,3,2)); TGLabel * lbTrigger = new TGLabel(vframe1, "Trig.[Hz]"); vframe1->AddFrame(lbTrigger, new TGLayoutHints(kLHintsCenterY, 5,5,3,2));
TGLabel * lbThreshold = new TGLabel(vframe2, "Thres."); vframe2->AddFrame(lbThreshold, new TGLayoutHints(kLHintsCenterY, 5,5,3,2)); TGLabel * lbThreshold = new TGLabel(vframe2, "Thres."); vframe2->AddFrame(lbThreshold, new TGLayoutHints(kLHintsCenterY, 5,5,3,2));
TGLabel * lbdummy = new TGLabel(vframe3, ""); vframe3->AddFrame(lbdummy, new TGLayoutHints(kLHintsCenterY, 5,5,3,2));
for( int ch = 0; ch < (digi == NULL ? MaxNChannels: digi[bd]->GetNChannel()); ch++){ for( int ch = 0; ch < (digi == NULL ? MaxNChannels: digi[bd]->GetNChannel()); ch++){
lbCh[bd][ch] = new TGLabel(vframe0, Form("%02d", ch)); vframe0->AddFrame(lbCh[bd][ch], new TGLayoutHints(kLHintsCenterY, 0,5,3,2)); lbCh[bd][ch] = new TGLabel(vframe0, Form("%02d", ch)); vframe0->AddFrame(lbCh[bd][ch], new TGLayoutHints(kLHintsCenterY, 0,5,4,2));
txtTrigger[bd][ch] = new TGTextEntry(vframe1, ""); vframe1->AddFrame(txtTrigger[bd][ch], kaka); txtTrigger[bd][ch] = new TGTextEntry(vframe1, ""); vframe1->AddFrame(txtTrigger[bd][ch], kaka);
txtTrigger[bd][ch]->Resize(50,20); txtTrigger[bd][ch]->Resize(50,20);
txtTrigger[bd][ch]->SetEnabled(false); txtTrigger[bd][ch]->SetEnabled(false);
txtTrigger[bd][ch]->SetAlignment(kTextRight); txtTrigger[bd][ch]->SetAlignment(kTextRight);
txtThreshold[bd][ch] = new TGTextEntry(vframe2, ""); vframe2->AddFrame(txtThreshold[bd][ch], kaka); txtThresholdValue[bd][ch] = new TGTextEntry(vframe2, ""); vframe2->AddFrame(txtThresholdValue[bd][ch], kaka);
txtThresholdValue[bd][ch]->Resize(50,20);
txtThresholdValue[bd][ch]->SetEnabled(false);
txtThresholdValue[bd][ch]->SetAlignment(kTextRight);
value[bd][ch] = 0;
if( digi != NULL ){
if( digi[bd]->GetDPPType() == V1730_DPP_PSD_CODE ) value[bd][ch] = digi[bd]->GetSettingFromMemory(Register::DPP::PSD::TriggerThreshold, ch);
if( digi[bd]->GetDPPType() == V1730_DPP_PHA_CODE ) value[bd][ch] = digi[bd]->GetSettingFromMemory(Register::DPP::PHA::TriggerThreshold, ch);
}
txtThresholdValue[bd][ch]->SetText(Form("%d", value[bd][ch]), false);
txtThreshold[bd][ch] = new TGTextEntry(vframe3, ""); vframe3->AddFrame(txtThreshold[bd][ch], kaka);
txtThreshold[bd][ch]->Resize(50,20); txtThreshold[bd][ch]->Resize(50,20);
txtThreshold[bd][ch]->SetAlignment(kTextRight); txtThreshold[bd][ch]->SetAlignment(kTextRight);
txtThreshold[bd][ch]->Connect("ReturnPressed()", "TriggerSummary", this, "SetThreshold()"); txtThreshold[bd][ch]->Connect("ReturnPressed()", "TriggerSummary", this, "SetThreshold()");
value[bd][ch] = 0;
if( digi != NULL ){
if( digi[bd]->GetDPPType() == V1730_DPP_PSD_CODE ) value[bd][ch] = digi[bd]->ReadRegister(Register::DPP::PSD::TriggerThreshold, ch);
if( digi[bd]->GetDPPType() == V1730_DPP_PHA_CODE ) value[bd][ch] = digi[bd]->ReadRegister(Register::DPP::PHA::TriggerThreshold, ch);
}
txtThreshold[bd][ch]->SetText(Form("%d", value[bd][ch]), false); txtThreshold[bd][ch]->SetText(Form("%d", value[bd][ch]), false);
} }
} }
@ -96,6 +107,7 @@ TriggerSummary::~TriggerSummary(){
for(int i = 0; i < nDigi; i++){ for(int i = 0; i < nDigi; i++){
for(int j = 0; j < MaxNChannels; j++){ for(int j = 0; j < MaxNChannels; j++){
delete txtTrigger[i][j]; delete txtTrigger[i][j];
delete txtThresholdValue[i][j];
delete txtThreshold[i][j]; delete txtThreshold[i][j];
} }
} }
@ -103,7 +115,7 @@ TriggerSummary::~TriggerSummary(){
delete numUpdateTime; delete numUpdateTime;
updateFlag = false; updateFlag = false;
usleep(1000 * 1000); //usleep(500 * 1000);
///delete thread; /// Don;t delete the thread, otherwise, thread will not run after close and reopen. ///delete thread; /// Don;t delete the thread, otherwise, thread will not run after close and reopen.
@ -114,15 +126,19 @@ TriggerSummary::~TriggerSummary(){
void * TriggerSummary::UpdateTriggerRate(void * ptr){ void * TriggerSummary::UpdateTriggerRate(void * ptr){
while( updateFlag){ while( updateFlag){
///printf("==================== %s\n", __func__);
for( int bd = 0; bd < nDigi; bd++){ for( int bd = 0; bd < nDigi; bd++){
for( int ch = 0; ch < digi[bd]->GetNChannel(); ch++){ for( int ch = 0; ch < digi[bd]->GetNChannel(); ch++){
txtTrigger[bd][ch]->SetText(Form("%.2f", digi[bd]->GetData()->TriggerRate[ch])); txtTrigger[bd][ch]->SetText(Form("%.2f", digi[bd]->GetData()->TriggerRate[ch]));
value[bd][ch] = digi[bd]->GetSettingFromMemory(Register::DPP::PHA::TriggerThreshold, ch);
txtThresholdValue[bd][ch]->SetText(Form("%d", value[bd][ch]), false);
} }
} }
usleep(numUpdateTime->GetNumber() * 1000); usleep(numUpdateTime->GetNumber() * 1000);
} }
return 0;
} }
void TriggerSummary::SetThreshold(){ void TriggerSummary::SetThreshold(){
@ -139,17 +155,17 @@ void TriggerSummary::SetThreshold(){
digi[bd]->WriteRegister(Register::DPP::PSD::TriggerThreshold, haha, ch); digi[bd]->WriteRegister(Register::DPP::PSD::TriggerThreshold, haha, ch);
value[bd][ch] = digi[bd]->ReadRegister(Register::DPP::PSD::TriggerThreshold, ch); value[bd][ch] = digi[bd]->GetSettingFromMemory(Register::DPP::PSD::TriggerThreshold, ch);
} }
if( digi[bd]->GetDPPType() == V1730_DPP_PHA_CODE ) { if( digi[bd]->GetDPPType() == V1730_DPP_PHA_CODE ) {
digi[bd]->WriteRegister(Register::DPP::PHA::TriggerThreshold, haha, ch); digi[bd]->WriteRegister(Register::DPP::PHA::TriggerThreshold, haha, ch);
value[bd][ch] = digi[bd]->ReadRegister(Register::DPP::PHA::TriggerThreshold, ch); value[bd][ch] = digi[bd]->GetSettingFromMemory(Register::DPP::PHA::TriggerThreshold, ch);
} }
txtThreshold[bd][ch]->SetText(Form("%d", value[bd][ch]), false); txtThresholdValue[bd][ch]->SetText(Form("%d", value[bd][ch]), false);
} }
} }
} }

View File

@ -23,13 +23,14 @@ class TriggerSummary{
static Digitizer ** digi; static Digitizer ** digi;
static TGTextEntry * txtTrigger[MaxNBoards][MaxNChannels]; static TGTextEntry * txtTrigger[MaxNBoards][MaxNChannels];
static TGTextEntry * txtThresholdValue[MaxNBoards][MaxNChannels];
static TGTextEntry * txtThreshold[MaxNBoards][MaxNChannels]; static TGTextEntry * txtThreshold[MaxNBoards][MaxNChannels];
TThread * thread; TThread * thread;
static bool updateFlag; static bool updateFlag;
static TGNumberEntry * numUpdateTime; static TGNumberEntry * numUpdateTime;
unsigned short value[MaxNBoards][MaxNChannels]; static unsigned short value[MaxNBoards][MaxNChannels];
public: public:
TriggerSummary(const TGWindow *p, UInt_t w, UInt_t h, Digitizer ** digi, int nBoard); TriggerSummary(const TGWindow *p, UInt_t w, UInt_t h, Digitizer ** digi, int nBoard);