added SetOptimalAggOrg() for QDC. This is the key for taking trace
This commit is contained in:
parent
64dfac3ee2
commit
b73505695e
|
@ -31,6 +31,7 @@ void Digitizer::Initalization(){
|
||||||
ADCFullSize = 0;
|
ADCFullSize = 0;
|
||||||
tick2ns = 0;
|
tick2ns = 0;
|
||||||
BoardInfo = {};
|
BoardInfo = {};
|
||||||
|
MemorySizekSample = 0;
|
||||||
|
|
||||||
regChannelMask = 0xFFFF;
|
regChannelMask = 0xFFFF;
|
||||||
VMEBaseAddress = 0;
|
VMEBaseAddress = 0;
|
||||||
|
@ -65,6 +66,7 @@ void Digitizer::Reset(){
|
||||||
|
|
||||||
void Digitizer::PrintBoard (){
|
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("Connected to Model %s with handle %d using %s\n", BoardInfo.ModelName, handle, LinkType == CAEN_DGTZ_USB ? "USB" : "Optical Link");
|
||||||
|
printf(" Family Name : %s \n", familyName.c_str());
|
||||||
printf(" Sampling rate : %.1f MHz = %.1f ns \n", 1000./tick2ns, tick2ns);
|
printf(" Sampling rate : %.1f MHz = %.1f ns \n", 1000./tick2ns, tick2ns);
|
||||||
printf("No. of Input Channels : %d \n", NumInputCh);
|
printf("No. of Input Channels : %d \n", NumInputCh);
|
||||||
printf(" No. of Reg Channels : %d, mask : 0x%X\n", NumRegChannel, regChannelMask);
|
printf(" No. of Reg Channels : %d, mask : 0x%X\n", NumRegChannel, regChannelMask);
|
||||||
|
@ -73,6 +75,7 @@ void Digitizer::PrintBoard (){
|
||||||
printf(" ADC bit : \e[33m%d\e[0m, %d = 0x%X\n", ADCbits, ADCFullSize, ADCFullSize);
|
printf(" ADC bit : \e[33m%d\e[0m, %d = 0x%X\n", ADCbits, ADCFullSize, ADCFullSize);
|
||||||
printf(" ROC FPGA Release : %s\n", BoardInfo.ROC_FirmwareRel);
|
printf(" ROC FPGA Release : %s\n", BoardInfo.ROC_FirmwareRel);
|
||||||
printf(" AMC FPGA Release : %s\n", BoardInfo.AMC_FirmwareRel);
|
printf(" AMC FPGA Release : %s\n", BoardInfo.AMC_FirmwareRel);
|
||||||
|
printf(" Channle Memeory Size : %u kSample\n", MemorySizekSample);
|
||||||
}
|
}
|
||||||
|
|
||||||
int Digitizer::OpenDigitizer(int boardID, int portID, bool program, bool verbose){
|
int Digitizer::OpenDigitizer(int boardID, int portID, bool program, bool verbose){
|
||||||
|
@ -138,6 +141,13 @@ int Digitizer::OpenDigitizer(int boardID, int portID, bool program, bool verbose
|
||||||
default : tick2ns = 4.0; break;
|
default : tick2ns = 4.0; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
switch(BoardInfo.FamilyCode){
|
||||||
|
case CAEN_DGTZ_XX740_FAMILY_CODE: familyName = "740 family"; break;
|
||||||
|
case CAEN_DGTZ_XX730_FAMILY_CODE: familyName = "730 family"; break;
|
||||||
|
case CAEN_DGTZ_XX725_FAMILY_CODE: familyName = "725 family"; break;
|
||||||
|
default: familyName = "not supported"; break;
|
||||||
|
}
|
||||||
|
|
||||||
data = new Data(NumInputCh);
|
data = new Data(NumInputCh);
|
||||||
data->tick2ns = tick2ns;
|
data->tick2ns = tick2ns;
|
||||||
data->boardSN = BoardInfo.SerialNumber;
|
data->boardSN = BoardInfo.SerialNumber;
|
||||||
|
@ -146,6 +156,17 @@ int Digitizer::OpenDigitizer(int boardID, int portID, bool program, bool verbose
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint32_t boardInfo = GetSettingFromMemory(DPP::BoardInfo_R);
|
||||||
|
uint32_t haha = ((boardInfo >> 8 ) & 0xFF);
|
||||||
|
printf("------- 0x%08X = %u \n", boardInfo, haha);
|
||||||
|
switch(haha) {
|
||||||
|
case 0x01 : MemorySizekSample = 640; break;
|
||||||
|
case 0x02 : MemorySizekSample = 192; break;
|
||||||
|
case 0x08 : MemorySizekSample = 5242; break;
|
||||||
|
case 0x10 : MemorySizekSample = 1536; break;
|
||||||
|
default: MemorySizekSample = 192; break;
|
||||||
|
}
|
||||||
|
|
||||||
///====================== Check DPP firmware revision
|
///====================== Check DPP firmware revision
|
||||||
sscanf(BoardInfo.AMC_FirmwareRel, "%d", &DPPType);
|
sscanf(BoardInfo.AMC_FirmwareRel, "%d", &DPPType);
|
||||||
data->DPPType = DPPType;
|
data->DPPType = DPPType;
|
||||||
|
@ -1278,3 +1299,39 @@ void Digitizer::SetBits(Reg address, unsigned int bitValue, unsigned int bitLeng
|
||||||
if( ret != 0 ) ErrorMsg(__func__);
|
if( ret != 0 ) ErrorMsg(__func__);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Digitizer::SetOptimialAggOrg(){
|
||||||
|
|
||||||
|
if( DPPType != DPPTypeCode::DPP_QDC_CODE ) {
|
||||||
|
printf("%s | this method only support QDC board.\n", __func__);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t EventAgg = ReadRegister(DPP::QDC::NumberEventsPerAggregate, 0);
|
||||||
|
uint32_t chMask = ReadRegister(DPP::QDC::GroupEnableMask);
|
||||||
|
uint32_t RecordLen = ReadRegister(DPP::QDC::RecordLength_R, 0);
|
||||||
|
|
||||||
|
uint32_t AggRead = ReadRegister(DPP::MaxAggregatePerBlockTransfer);
|
||||||
|
uint32_t boardCfg = ReadRegister(DPP::BoardConfiguration);
|
||||||
|
uint32_t aggOrgan = ReadRegister(DPP::AggregateOrganization);
|
||||||
|
|
||||||
|
bool Ex = ((boardCfg >> 17) & 0x1);
|
||||||
|
bool traceOn = ((boardCfg >> 16) & 0x1);
|
||||||
|
|
||||||
|
printf("=================================== Setting related to Buffer\n");
|
||||||
|
printf(" agg. orgainzation (bit) : 0x%X \n", aggOrgan);
|
||||||
|
printf(" Channel Mask : %04X \n", chMask);
|
||||||
|
printf("Max number of Agg per Readout : %u \n", AggRead);
|
||||||
|
printf(" is Extra enabed : %u \n", Ex );
|
||||||
|
printf(" is Record wave : %u \n", traceOn );
|
||||||
|
printf(" Event / Agg : %u \n", EventAgg );
|
||||||
|
printf(" Record Length (bit) : %u = %u sample = %u ns\n", RecordLen, RecordLen*8, RecordLen*8*16);
|
||||||
|
printf("==============================================================\n");
|
||||||
|
|
||||||
|
int eventSize = 2 + traceOn * RecordLen * 8; // sample
|
||||||
|
double maxAggOrg = log2( MemorySizekSample * 1024 / eventSize );
|
||||||
|
printf(" max Agg. Org. should be less than %.2f\n", maxAggOrg);
|
||||||
|
|
||||||
|
uint32_t aggOrg = std::floor(maxAggOrg);
|
||||||
|
WriteRegister(DPP::AggregateOrganization, aggOrg);
|
||||||
|
|
||||||
|
}
|
|
@ -36,6 +36,9 @@ class Digitizer{
|
||||||
int ModelType; /// VME or DT
|
int ModelType; /// VME or DT
|
||||||
unsigned int ADCFullSize; /// pow(2, ADCbits) - 1
|
unsigned int ADCFullSize; /// pow(2, ADCbits) - 1
|
||||||
float tick2ns; /// channel to ns
|
float tick2ns; /// channel to ns
|
||||||
|
unsigned int MemorySizekSample; /// channel Memory size in kSample
|
||||||
|
std::string familyName;
|
||||||
|
|
||||||
CAEN_DGTZ_BoardInfo_t BoardInfo;
|
CAEN_DGTZ_BoardInfo_t BoardInfo;
|
||||||
|
|
||||||
//^----- adjustable parameters
|
//^----- adjustable parameters
|
||||||
|
@ -144,6 +147,8 @@ class Digitizer{
|
||||||
std::string GetAMCVersion() const {return BoardInfo.AMC_FirmwareRel;}
|
std::string GetAMCVersion() const {return BoardInfo.AMC_FirmwareRel;}
|
||||||
CAEN_DGTZ_ConnectionType GetLinkType() const {return LinkType;}
|
CAEN_DGTZ_ConnectionType GetLinkType() const {return LinkType;}
|
||||||
int GetErrorCode() const {return ret;}
|
int GetErrorCode() const {return ret;}
|
||||||
|
unsigned int GetChMemSizekSample() const {return MemorySizekSample;}
|
||||||
|
std::string GetFamilyName() const {return familyName;}
|
||||||
|
|
||||||
//^================ Setting
|
//^================ Setting
|
||||||
Reg FindRegister(uint32_t address);
|
Reg FindRegister(uint32_t address);
|
||||||
|
@ -185,6 +190,8 @@ class Digitizer{
|
||||||
bool IsDualTrace_PHA() {return ( (GetSettingFromMemory(DPP::BoardConfiguration) >> 11) & 0x1 );}
|
bool IsDualTrace_PHA() {return ( (GetSettingFromMemory(DPP::BoardConfiguration) >> 11) & 0x1 );}
|
||||||
bool IsRecordTrace() {return ( (GetSettingFromMemory(DPP::BoardConfiguration) >> 16) & 0x1 );}
|
bool IsRecordTrace() {return ( (GetSettingFromMemory(DPP::BoardConfiguration) >> 16) & 0x1 );}
|
||||||
|
|
||||||
|
void SetOptimialAggOrg();
|
||||||
|
|
||||||
//QDC read recordLength
|
//QDC read recordLength
|
||||||
uint32_t ReadQDCRecordLength() {
|
uint32_t ReadQDCRecordLength() {
|
||||||
returnData = ReadRegister(DPP::QDC::RecordLength_R);
|
returnData = ReadRegister(DPP::QDC::RecordLength_R);
|
||||||
|
|
|
@ -85,10 +85,20 @@ DigiSettingsPanel::DigiSettingsPanel(Digitizer ** digi, unsigned int nDigi, QStr
|
||||||
SetUpInfo("ROC version ", digi[ID]->GetROCVersion(), infoLayout[ID], 2, 2);
|
SetUpInfo("ROC version ", digi[ID]->GetROCVersion(), infoLayout[ID], 2, 2);
|
||||||
SetUpInfo("AMC version ", digi[ID]->GetAMCVersion(), infoLayout[ID], 2, 4);
|
SetUpInfo("AMC version ", digi[ID]->GetAMCVersion(), infoLayout[ID], 2, 4);
|
||||||
|
|
||||||
|
SetUpInfo("Family Code ", digi[ID]->GetFamilyName(), infoLayout[ID], 3, 0);
|
||||||
|
|
||||||
|
QString memStr;
|
||||||
|
unsigned int memSize = digi[ID]->GetChMemSizekSample();
|
||||||
|
if( memSize < 1024 ){
|
||||||
|
memStr = QString::number( memSize ) + " kSample";
|
||||||
|
}else{
|
||||||
|
memStr = QString::number( memSize/1024., 'f', 1 ) + " MSample";
|
||||||
|
}
|
||||||
|
SetUpInfo("Ch. Mem. Size ", memStr.toStdString() , infoLayout[ID], 3, 2);
|
||||||
|
|
||||||
uint32_t boardInfo = digi[ID]->GetSettingFromMemory(DPP::BoardInfo_R);
|
uint32_t boardInfo = digi[ID]->GetSettingFromMemory(DPP::BoardInfo_R);
|
||||||
SetUpInfo("Family Code ", (boardInfo & 0xFF) == 0x0E ? "725 Family" : "730 Family", infoLayout[ID], 3, 0);
|
printf("----------- boardInfo : 0x%08X \n", boardInfo);
|
||||||
SetUpInfo("Ch. Mem. Size ", ((boardInfo >> 8 ) & 0xFF) == 0x01 ? "640 kSample" : "5.12 MSample", infoLayout[ID], 3, 2);
|
SetUpInfo("Board Type ", ((boardInfo >> 16) & 0xFF) == 0x10 ? "16-ch VME" : "8-ch Bd.", infoLayout[ID], 3, 4);
|
||||||
SetUpInfo("Board Type ", ((boardInfo >> 16) & 0xFF) == 0x10 ? "16-ch VME" : "DT, NIM, or 8-ch VME", infoLayout[ID], 3, 4);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user