tested the QDC data acquistion using internal pulse. good
This commit is contained in:
parent
739fa105c5
commit
c95673c697
232
ClassData.h
232
ClassData.h
|
@ -373,6 +373,11 @@ inline void Data::DecodeBuffer(bool fastDecode, int verbose){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for( int ch = 0; ch < MaxNChannels; ch ++) {
|
||||||
|
NumEventsDecoded[ch] = 0;
|
||||||
|
NumNonPileUpDecoded[ch] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
if( nByte == 0 ) return;
|
if( nByte == 0 ) return;
|
||||||
nw = 0;
|
nw = 0;
|
||||||
|
|
||||||
|
@ -395,6 +400,7 @@ inline void Data::DecodeBuffer(bool fastDecode, int verbose){
|
||||||
switch(BoardID){
|
switch(BoardID){
|
||||||
case 0x8 : DPPType = DPPType::DPP_PSD_CODE; break;
|
case 0x8 : DPPType = DPPType::DPP_PSD_CODE; break;
|
||||||
case 0xB : DPPType = DPPType::DPP_PHA_CODE; break;
|
case 0xB : DPPType = DPPType::DPP_PHA_CODE; break;
|
||||||
|
case 0x7 : DPPType = DPPType::DPP_QDC_CODE; break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -404,16 +410,11 @@ inline void Data::DecodeBuffer(bool fastDecode, int verbose){
|
||||||
|
|
||||||
nw = nw + 1;
|
nw = nw + 1;
|
||||||
unsigned int bdAggTimeTag = ReadBuffer(nw, verbose);
|
unsigned int bdAggTimeTag = ReadBuffer(nw, verbose);
|
||||||
if( verbose >= 2 ) printf("Agg Counter : %u \n", bdAggTimeTag);
|
if( verbose >= 2 ) printf("Agg Time Tag : %u \n", bdAggTimeTag);
|
||||||
|
|
||||||
for( int ch = 0; ch < MaxNChannels; ch ++) {
|
|
||||||
NumEventsDecoded[ch] = 0;
|
|
||||||
NumNonPileUpDecoded[ch] = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
for( int chMask = 0; chMask < 8 ; chMask ++ ){ // the max numnber of RegChannel is 8 for PHA, PSD, QDC
|
for( int chMask = 0; chMask < 8 ; chMask ++ ){ // the max numnber of RegChannel is 8 for PHA, PSD, QDC
|
||||||
if( ((ChannelMask >> chMask) & 0x1 ) == 0 ) continue;
|
if( ((ChannelMask >> chMask) & 0x1 ) == 0 ) continue;
|
||||||
if( verbose >= 2 ) printf("==================== Dual/Group Channel Block, ch Mask : %d, nw : %d\n", chMask *2, nw);
|
if( verbose >= 2 ) printf("==================== Dual/Group Channel Block, ch Mask : 0x%X, nw : %d\n", chMask *2, nw);
|
||||||
|
|
||||||
if( DPPType == DPPType::DPP_PHA_CODE ) {
|
if( DPPType == DPPType::DPP_PHA_CODE ) {
|
||||||
if ( DecodePHADualChannelBlock(chMask, fastDecode, verbose) < 0 ) break;
|
if ( DecodePHADualChannelBlock(chMask, fastDecode, verbose) < 0 ) break;
|
||||||
|
@ -435,6 +436,8 @@ inline void Data::DecodeBuffer(bool fastDecode, int verbose){
|
||||||
|
|
||||||
///Calculate trigger rate and first and last Timestamp
|
///Calculate trigger rate and first and last Timestamp
|
||||||
for(int ch = 0; ch < MaxNChannels; ch++){
|
for(int ch = 0; ch < MaxNChannels; ch++){
|
||||||
|
if( ch > numInputCh ) continue;
|
||||||
|
|
||||||
if( NumEventsDecoded[ch] > 0 ) {
|
if( NumEventsDecoded[ch] > 0 ) {
|
||||||
// printf("%s | ch %d | %d %d \n", __func__, ch, LoopIndex[ch], DataIndex[ch]);
|
// printf("%s | ch %d | %d %d \n", __func__, ch, LoopIndex[ch], DataIndex[ch]);
|
||||||
IsNotRollOverFakeAgg = true;
|
IsNotRollOverFakeAgg = true;
|
||||||
|
@ -510,6 +513,7 @@ inline int Data::DecodePHADualChannelBlock(unsigned int ChannelMask, bool fastDe
|
||||||
unsigned int nSample = 0; /// wave form;
|
unsigned int nSample = 0; /// wave form;
|
||||||
unsigned int nEvents = 0;
|
unsigned int nEvents = 0;
|
||||||
unsigned int extra2Option = 0;
|
unsigned int extra2Option = 0;
|
||||||
|
bool hasWaveForm = false;
|
||||||
bool hasExtra2 = false;
|
bool hasExtra2 = false;
|
||||||
bool hasDualTrace = 0 ;
|
bool hasDualTrace = 0 ;
|
||||||
if( hasFormatInfo ){
|
if( hasFormatInfo ){
|
||||||
|
@ -604,56 +608,58 @@ inline int Data::DecodePHADualChannelBlock(unsigned int ChannelMask, bool fastDe
|
||||||
if( fastDecode ){
|
if( fastDecode ){
|
||||||
nw += nSample/2;
|
nw += nSample/2;
|
||||||
}else{
|
}else{
|
||||||
for( unsigned int wi = 0; wi < nSample/2; wi++){
|
if( hasWaveForm ){
|
||||||
nw = nw +1 ; word = ReadBuffer(nw, verbose-2);
|
for( unsigned int wi = 0; wi < nSample/2; wi++){
|
||||||
///The CAEN manual is wrong, the bit [31:16] is anaprobe 1
|
nw = nw +1 ; word = ReadBuffer(nw, verbose-2);
|
||||||
bool isTrigger1 = (( word >> 31 ) & 0x1 );
|
///The CAEN manual is wrong, the bit [31:16] is anaprobe 1
|
||||||
bool dp1 = (( word >> 30 ) & 0x1 );
|
bool isTrigger1 = (( word >> 31 ) & 0x1 );
|
||||||
unsigned short wave1 = (( word >> 16) & 0x3FFF);
|
bool dp1 = (( word >> 30 ) & 0x1 );
|
||||||
short trace1 = 0;
|
unsigned short wave1 = (( word >> 16) & 0x3FFF);
|
||||||
if( wave1 & 0x2000){
|
short trace1 = 0;
|
||||||
trace1 = static_cast<short>(~wave1 + 1 + 0x3FFF);
|
if( wave1 & 0x2000){
|
||||||
trace1 = - trace1;
|
trace1 = static_cast<short>(~wave1 + 1 + 0x3FFF);
|
||||||
}else{
|
trace1 = - trace1;
|
||||||
trace1 = static_cast<short>(wave1);
|
|
||||||
}
|
|
||||||
|
|
||||||
///The CAEN manual is wrong, the bit [31:16] is anaprobe 2
|
|
||||||
bool isTrigger0 = (( word >> 15 ) & 0x1 );
|
|
||||||
bool dp0 = (( word >> 14 ) & 0x1 );
|
|
||||||
unsigned short wave0 = ( word & 0x3FFF);
|
|
||||||
short trace0 = 0;
|
|
||||||
if( wave0 & 0x2000){
|
|
||||||
trace0 = static_cast<short>(~wave0 + 1 + 0x3FFF);
|
|
||||||
trace0 = - trace0;
|
|
||||||
}else{
|
|
||||||
trace0 = static_cast<short>(wave0);
|
|
||||||
}
|
|
||||||
|
|
||||||
if( hasDualTrace ){
|
|
||||||
tempWaveform1.push_back(trace1);
|
|
||||||
tempWaveform2.push_back(trace0);
|
|
||||||
tempDigiWaveform1.push_back(dp1);
|
|
||||||
tempDigiWaveform2.push_back(dp0);
|
|
||||||
}else{
|
|
||||||
tempWaveform1.push_back(trace1);
|
|
||||||
tempWaveform1.push_back(trace0);
|
|
||||||
tempDigiWaveform1.push_back(dp1);
|
|
||||||
tempDigiWaveform1.push_back(dp0);
|
|
||||||
}
|
|
||||||
|
|
||||||
if( isTrigger0 == 1 ) triggerAtSample = 2*wi ;
|
|
||||||
if( isTrigger1 == 1 ) triggerAtSample = 2*wi + 1;
|
|
||||||
|
|
||||||
if( verbose >= 4 ){
|
|
||||||
if( !hasDualTrace ){
|
|
||||||
printf("%4d| %5d, %d, %d \n", 2*wi, trace0, dp0, isTrigger0);
|
|
||||||
printf("%4d| %5d, %d, %d \n", 2*wi+1, trace1, dp1, isTrigger1);
|
|
||||||
}else{
|
}else{
|
||||||
printf("%4d| %5d, %5d | %d, %d | %d %d\n", wi, trace0, trace1, dp0, dp1, isTrigger0, isTrigger1);
|
trace1 = static_cast<short>(wave1);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
///The CAEN manual is wrong, the bit [31:16] is anaprobe 2
|
||||||
|
bool isTrigger0 = (( word >> 15 ) & 0x1 );
|
||||||
|
bool dp0 = (( word >> 14 ) & 0x1 );
|
||||||
|
unsigned short wave0 = ( word & 0x3FFF);
|
||||||
|
short trace0 = 0;
|
||||||
|
if( wave0 & 0x2000){
|
||||||
|
trace0 = static_cast<short>(~wave0 + 1 + 0x3FFF);
|
||||||
|
trace0 = - trace0;
|
||||||
|
}else{
|
||||||
|
trace0 = static_cast<short>(wave0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if( hasDualTrace ){
|
||||||
|
tempWaveform1.push_back(trace1);
|
||||||
|
tempWaveform2.push_back(trace0);
|
||||||
|
tempDigiWaveform1.push_back(dp1);
|
||||||
|
tempDigiWaveform2.push_back(dp0);
|
||||||
|
}else{
|
||||||
|
tempWaveform1.push_back(trace1);
|
||||||
|
tempWaveform1.push_back(trace0);
|
||||||
|
tempDigiWaveform1.push_back(dp1);
|
||||||
|
tempDigiWaveform1.push_back(dp0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if( isTrigger0 == 1 ) triggerAtSample = 2*wi ;
|
||||||
|
if( isTrigger1 == 1 ) triggerAtSample = 2*wi + 1;
|
||||||
|
|
||||||
|
if( verbose >= 4 ){
|
||||||
|
if( !hasDualTrace ){
|
||||||
|
printf("%4d| %5d, %d, %d \n", 2*wi, trace0, dp0, isTrigger0);
|
||||||
|
printf("%4d| %5d, %d, %d \n", 2*wi+1, trace1, dp1, isTrigger1);
|
||||||
|
}else{
|
||||||
|
printf("%4d| %5d, %5d | %d, %d | %d %d\n", wi, trace0, trace1, dp0, dp1, isTrigger0, isTrigger1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
unsigned long long extTimeStamp = 0;
|
unsigned long long extTimeStamp = 0;
|
||||||
unsigned int extra2 = 0;
|
unsigned int extra2 = 0;
|
||||||
|
@ -708,7 +714,7 @@ inline int Data::DecodePHADualChannelBlock(unsigned int ChannelMask, bool fastDe
|
||||||
TotNumNonPileUpEvents[channel] ++;
|
TotNumNonPileUpEvents[channel] ++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( !fastDecode ) {
|
if( !fastDecode && hasWaveForm) {
|
||||||
if( hasDualTrace ){
|
if( hasDualTrace ){
|
||||||
Waveform1[channel][DataIndex[channel]] = tempWaveform1;
|
Waveform1[channel][DataIndex[channel]] = tempWaveform1;
|
||||||
Waveform2[channel][DataIndex[channel]] = tempWaveform2;
|
Waveform2[channel][DataIndex[channel]] = tempWaveform2;
|
||||||
|
@ -836,31 +842,33 @@ inline int Data::DecodePSDDualChannelBlock(unsigned int ChannelMask, bool fastDe
|
||||||
if( fastDecode ){
|
if( fastDecode ){
|
||||||
nw += nSample/2;
|
nw += nSample/2;
|
||||||
}else{
|
}else{
|
||||||
for( unsigned int wi = 0; wi < nSample/2; wi++){
|
if( hasWaveForm ){
|
||||||
nw = nw +1 ; word = ReadBuffer(nw, verbose-4);
|
for( unsigned int wi = 0; wi < nSample/2; wi++){
|
||||||
bool dp2b = (( word >> 31 ) & 0x1 );
|
nw = nw +1 ; word = ReadBuffer(nw, verbose-4);
|
||||||
bool dp1b = (( word >> 30 ) & 0x1 );
|
bool dp2b = (( word >> 31 ) & 0x1 );
|
||||||
unsigned short waveb = (( word >> 16) & 0x3FFF);
|
bool dp1b = (( word >> 30 ) & 0x1 );
|
||||||
|
unsigned short waveb = (( word >> 16) & 0x3FFF);
|
||||||
bool dp2a = (( word >> 15 ) & 0x1 );
|
|
||||||
bool dp1a = (( word >> 14 ) & 0x1 );
|
bool dp2a = (( word >> 15 ) & 0x1 );
|
||||||
unsigned short wavea = ( word & 0x3FFF);
|
bool dp1a = (( word >> 14 ) & 0x1 );
|
||||||
|
unsigned short wavea = ( word & 0x3FFF);
|
||||||
if( hasDualTrace ){
|
|
||||||
tempWaveform1.push_back(wavea);
|
if( hasDualTrace ){
|
||||||
tempWaveform2.push_back(waveb);
|
tempWaveform1.push_back(wavea);
|
||||||
}else{
|
tempWaveform2.push_back(waveb);
|
||||||
tempWaveform1.push_back(wavea);
|
}else{
|
||||||
tempWaveform1.push_back(waveb);
|
tempWaveform1.push_back(wavea);
|
||||||
}
|
tempWaveform1.push_back(waveb);
|
||||||
tempDigiWaveform1.push_back(dp1a);
|
}
|
||||||
tempDigiWaveform1.push_back(dp1b);
|
tempDigiWaveform1.push_back(dp1a);
|
||||||
tempDigiWaveform2.push_back(dp2a);
|
tempDigiWaveform1.push_back(dp1b);
|
||||||
tempDigiWaveform2.push_back(dp2b);
|
tempDigiWaveform2.push_back(dp2a);
|
||||||
|
tempDigiWaveform2.push_back(dp2b);
|
||||||
if( verbose >= 3 ){
|
|
||||||
printf("%4d| %5d, %d, %d \n", 2*wi, wavea, dp1a, dp2a);
|
if( verbose >= 3 ){
|
||||||
printf("%4d| %5d, %d, %d \n", 2*wi+1, waveb, dp1b, dp2b);
|
printf("%4d| %5d, %d, %d \n", 2*wi, wavea, dp1a, dp2a);
|
||||||
|
printf("%4d| %5d, %d, %d \n", 2*wi+1, waveb, dp1b, dp2b);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -902,7 +910,7 @@ inline int Data::DecodePSDDualChannelBlock(unsigned int ChannelMask, bool fastDe
|
||||||
TotNumNonPileUpEvents[channel] ++;
|
TotNumNonPileUpEvents[channel] ++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( !fastDecode ) {
|
if( !fastDecode && hasWaveForm) {
|
||||||
if( hasDualTrace ){
|
if( hasDualTrace ){
|
||||||
Waveform1[channel][DataIndex[channel]] = tempWaveform1;
|
Waveform1[channel][DataIndex[channel]] = tempWaveform1;
|
||||||
Waveform2[channel][DataIndex[channel]] = tempWaveform2;
|
Waveform2[channel][DataIndex[channel]] = tempWaveform2;
|
||||||
|
@ -942,7 +950,7 @@ inline int Data::DecodeQDCGroupedChannelBlock(unsigned int ChannelMask, bool fas
|
||||||
if( (word >> 31) != 1 ) return 0;
|
if( (word >> 31) != 1 ) return 0;
|
||||||
|
|
||||||
unsigned int aggSize = ( word & 0x3FFFFF ) ;
|
unsigned int aggSize = ( word & 0x3FFFFF ) ;
|
||||||
if( verbose >= 2 ) printf(" size : %d \n", aggSize);
|
if( verbose >= 2 ) printf(" Group agg. size : %d words\n", aggSize);
|
||||||
|
|
||||||
unsigned int nEvents = 0;
|
unsigned int nEvents = 0;
|
||||||
nw = nw + 1; word = ReadBuffer(nw, verbose);
|
nw = nw + 1; word = ReadBuffer(nw, verbose);
|
||||||
|
@ -952,7 +960,7 @@ inline int Data::DecodeQDCGroupedChannelBlock(unsigned int ChannelMask, bool fas
|
||||||
bool hasExtra = ( (word >> 28 ) & 0x1 );
|
bool hasExtra = ( (word >> 28 ) & 0x1 );
|
||||||
bool hasTimeStamp = ( (word >> 29 ) & 0x1 );
|
bool hasTimeStamp = ( (word >> 29 ) & 0x1 );
|
||||||
bool hasEnergy = ( (word >> 30 ) & 0x1 );
|
bool hasEnergy = ( (word >> 30 ) & 0x1 );
|
||||||
if( (word >> 31 ) != 1 ) return 0;
|
if( (word >> 31 ) != 0 ) return 0;
|
||||||
|
|
||||||
if( verbose >= 2 ) {
|
if( verbose >= 2 ) {
|
||||||
printf("Charge : %d, Time: %d, Wave : %d, Extra: %d\n", hasEnergy, hasTimeStamp, hasWaveForm, hasExtra);
|
printf("Charge : %d, Time: %d, Wave : %d, Extra: %d\n", hasEnergy, hasTimeStamp, hasWaveForm, hasExtra);
|
||||||
|
@ -973,12 +981,9 @@ inline int Data::DecodeQDCGroupedChannelBlock(unsigned int ChannelMask, bool fas
|
||||||
nw = nw +1 ; word = ReadBuffer(nw, verbose);
|
nw = nw +1 ; word = ReadBuffer(nw, verbose);
|
||||||
unsigned int timeStamp0 = (word & 0xFFFFFFFF);
|
unsigned int timeStamp0 = (word & 0xFFFFFFFF);
|
||||||
if( verbose >= 2 ) printf("timeStamp %u \n", timeStamp0);
|
if( verbose >= 2 ) printf("timeStamp %u \n", timeStamp0);
|
||||||
|
|
||||||
// bool channelTag = ((word >> 31) & 0x1);
|
|
||||||
// int channel = ChannelMask*2 + channelTag;
|
|
||||||
|
|
||||||
///===== read waveform
|
///===== read waveform
|
||||||
if( !fastDecode ) {
|
if( !fastDecode && hasWaveForm ) {
|
||||||
tempWaveform1.clear();
|
tempWaveform1.clear();
|
||||||
tempDigiWaveform1.clear();
|
tempDigiWaveform1.clear();
|
||||||
tempDigiWaveform2.clear();
|
tempDigiWaveform2.clear();
|
||||||
|
@ -989,27 +994,29 @@ inline int Data::DecodeQDCGroupedChannelBlock(unsigned int ChannelMask, bool fas
|
||||||
if( fastDecode ){
|
if( fastDecode ){
|
||||||
nw += nSample/2;
|
nw += nSample/2;
|
||||||
}else{
|
}else{
|
||||||
for( unsigned int wi = 0; wi < nSample/2; wi++){
|
if( hasWaveForm ){
|
||||||
nw = nw +1 ; word = ReadBuffer(nw, verbose-4);
|
for( unsigned int wi = 0; wi < nSample/2; wi++){
|
||||||
|
nw = nw +1 ; word = ReadBuffer(nw, verbose-4);
|
||||||
|
|
||||||
tempWaveform1.push_back(( word & 0xFFF));
|
tempWaveform1.push_back(( word & 0xFFF));
|
||||||
tempWaveform1.push_back((( word >> 16) & 0xFFF));
|
tempWaveform1.push_back((( word >> 16) & 0xFFF));
|
||||||
|
|
||||||
tempDigiWaveform1.push_back((( word >> 12 ) & 0x1 )); //Gate
|
tempDigiWaveform1.push_back((( word >> 12 ) & 0x1 )); //Gate
|
||||||
tempDigiWaveform1.push_back((( word >> 28 ) & 0x1 ));
|
tempDigiWaveform1.push_back((( word >> 28 ) & 0x1 ));
|
||||||
|
|
||||||
tempDigiWaveform2.push_back((( word >> 13 ) & 0x1 )); //Trigger
|
tempDigiWaveform2.push_back((( word >> 13 ) & 0x1 )); //Trigger
|
||||||
tempDigiWaveform2.push_back((( word >> 29 ) & 0x1 ));
|
tempDigiWaveform2.push_back((( word >> 29 ) & 0x1 ));
|
||||||
|
|
||||||
tempDigiWaveform3.push_back((( word >> 14 ) & 0x1 )); //Triger Hold Off
|
tempDigiWaveform3.push_back((( word >> 14 ) & 0x1 )); //Triger Hold Off
|
||||||
tempDigiWaveform3.push_back((( word >> 30 ) & 0x1 ));
|
tempDigiWaveform3.push_back((( word >> 30 ) & 0x1 ));
|
||||||
|
|
||||||
tempDigiWaveform4.push_back((( word >> 15 ) & 0x1 )); //Over-Threshold
|
tempDigiWaveform4.push_back((( word >> 15 ) & 0x1 )); //Over-Threshold
|
||||||
tempDigiWaveform4.push_back((( word >> 31 ) & 0x1 ));
|
tempDigiWaveform4.push_back((( word >> 31 ) & 0x1 ));
|
||||||
|
|
||||||
if( verbose >= 3 ){
|
if( verbose >= 3 ){
|
||||||
printf("%4d| %5d, %d, %d, %d, %d \n", 2*wi, (word & 0xFFF) , (( word >> 12 ) & 0x1 ), (( word >> 13 ) & 0x1 ), (( word >> 14 ) & 0x1 ), (( word >> 15 ) & 0x1 ));
|
printf("%4d| %5d, %d, %d, %d, %d \n", 2*wi, (word & 0xFFF) , (( word >> 12 ) & 0x1 ), (( word >> 13 ) & 0x1 ), (( word >> 14 ) & 0x1 ), (( word >> 15 ) & 0x1 ));
|
||||||
printf("%4d| %5d, %d, %d, %d, %d \n", 2*wi+1, (( word >> 16) & 0xFFF), (( word >> 28 ) & 0x1 ), (( word >> 29 ) & 0x1 ), (( word >> 30 ) & 0x1 ), (( word >> 31 ) & 0x1 ));
|
printf("%4d| %5d, %d, %d, %d, %d \n", 2*wi+1, (( word >> 16) & 0xFFF), (( word >> 28 ) & 0x1 ), (( word >> 29 ) & 0x1 ), (( word >> 30 ) & 0x1 ), (( word >> 31 ) & 0x1 ));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1022,13 +1029,14 @@ inline int Data::DecodeQDCGroupedChannelBlock(unsigned int ChannelMask, bool fas
|
||||||
extra = word;
|
extra = word;
|
||||||
baseline = (word & 0xFFF);
|
baseline = (word & 0xFFF);
|
||||||
extTimeStamp = (word >> 16);
|
extTimeStamp = (word >> 16);
|
||||||
|
if( verbose >= 2 ) printf("extra : 0x%lx, baseline : %d\n", extra, baseline);
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long long timeStamp = (extTimeStamp << 31) ;
|
unsigned long long timeStamp = (extTimeStamp << 31) ;
|
||||||
timeStamp = timeStamp + timeStamp0;
|
timeStamp = timeStamp + timeStamp0;
|
||||||
|
|
||||||
nw = nw +1 ; word = ReadBuffer(nw, verbose);
|
nw = nw +1 ; word = ReadBuffer(nw, verbose);
|
||||||
unsigned int energy = (( word >> 16) & 0xFFFF);
|
unsigned int energy = ( word & 0xFFFF);
|
||||||
bool pileup = ((word >> 27) & 0x1);
|
bool pileup = ((word >> 27) & 0x1);
|
||||||
bool OverRange = ((word >> 26)& 0x1);
|
bool OverRange = ((word >> 26)& 0x1);
|
||||||
unsigned short subCh = ((word >> 28)& 0xF);
|
unsigned short subCh = ((word >> 28)& 0xF);
|
||||||
|
@ -1050,7 +1058,7 @@ inline int Data::DecodeQDCGroupedChannelBlock(unsigned int ChannelMask, bool fas
|
||||||
TotNumNonPileUpEvents[channel] ++;
|
TotNumNonPileUpEvents[channel] ++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( !fastDecode ) {
|
if( !fastDecode && hasWaveForm) {
|
||||||
Waveform1[channel][DataIndex[channel]] = tempWaveform1;
|
Waveform1[channel][DataIndex[channel]] = tempWaveform1;
|
||||||
DigiWaveform1[channel][DataIndex[channel]] = tempDigiWaveform1;
|
DigiWaveform1[channel][DataIndex[channel]] = tempDigiWaveform1;
|
||||||
DigiWaveform2[channel][DataIndex[channel]] = tempDigiWaveform2;
|
DigiWaveform2[channel][DataIndex[channel]] = tempDigiWaveform2;
|
||||||
|
@ -1058,15 +1066,13 @@ inline int Data::DecodeQDCGroupedChannelBlock(unsigned int ChannelMask, bool fas
|
||||||
DigiWaveform4[channel][DataIndex[channel]] = tempDigiWaveform4;
|
DigiWaveform4[channel][DataIndex[channel]] = tempDigiWaveform4;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( verbose == 1 ) printf("ch : %2d, energy : %d, timestamp : %llu\n", channel, energy, timeStamp);
|
||||||
if( verbose >= 2 ) printf("extra : 0x%lx, baseline : %d\n", extra, baseline);
|
if( verbose > 1 ) printf("ch : %2d, energy : %d, timestamp : %llu, pileUp : %d, OverRange : %d\n", channel, energy, timeStamp, pileup, OverRange);
|
||||||
|
|
||||||
if( verbose >= 1 ) printf("ch : %2d, energy : %d, timestamp : %llu\n",
|
if( verbose == 1) printf("Decoded : %d, total : %ld \n", NumEventsDecoded[channel], TotNumNonPileUpEvents[channel]);
|
||||||
channel, energy, timeStamp);
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return nw;
|
return nw;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -361,13 +361,18 @@ int Digitizer::ProgramBoard_QDC(){
|
||||||
void Digitizer::StartACQ(){
|
void Digitizer::StartACQ(){
|
||||||
if ( AcqRun ) return;
|
if ( AcqRun ) return;
|
||||||
|
|
||||||
unsigned int bufferSize = CalByteForBuffer();
|
unsigned int bufferSize = 0;
|
||||||
if( bufferSize > 160 * 1024 * 1024 ){
|
if( DPPType == V1730_DPP_PHA_CODE ){
|
||||||
printf("============= buffer size bigger than 160 MB (%u)\n", bufferSize );
|
bufferSize = CalByteForBuffer();
|
||||||
//return;
|
if( bufferSize > 160 * 1024 * 1024 ){
|
||||||
|
printf("============= buffer size bigger than 160 MB (%u)\n", bufferSize );
|
||||||
|
//return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if( DPPType == V1730_DPP_PSD_CODE) bufferSize = 160 * 1024 * 1024; //TODO allocate 80 MB for PSD
|
if( DPPType == V1730_DPP_PSD_CODE) bufferSize = 160 * 1024 * 1024; //TODO allocate 160 MB for PSD
|
||||||
|
if( DPPType == V1740_DPP_QDC_CODE) bufferSize = 160 * 1024 * 1024; //TODO allocate 160 MB for QDC
|
||||||
|
|
||||||
|
|
||||||
data->AllocateMemory(bufferSize);
|
data->AllocateMemory(bufferSize);
|
||||||
ret = CAEN_DGTZ_SWStartAcquisition(handle);
|
ret = CAEN_DGTZ_SWStartAcquisition(handle);
|
||||||
|
|
|
@ -2381,7 +2381,6 @@ void DigiSettingsPanel::SetUpBoard_QDC(){
|
||||||
SetUpComboBoxBit(cbAnaProbe1[ID], "Ana. Probe ", bdCfgLayout[ID], 3, 0, DPP::Bit_BoardConfig::ListAnaProbe_QDC, DPP::BoardConfiguration, DPP::Bit_BoardConfig::AnalogProbe1, 1, 0);
|
SetUpComboBoxBit(cbAnaProbe1[ID], "Ana. Probe ", bdCfgLayout[ID], 3, 0, DPP::Bit_BoardConfig::ListAnaProbe_QDC, DPP::BoardConfiguration, DPP::Bit_BoardConfig::AnalogProbe1, 1, 0);
|
||||||
SetUpComboBoxBit(cbExtTriggerMode[ID], "Ext. Trig. Mode ", bdCfgLayout[ID], 4, 0, DPP::Bit_BoardConfig::ListExtTriggerMode_QDC, DPP::BoardConfiguration, DPP::Bit_BoardConfig::ExtTriggerMode_QDC, 1, 0);
|
SetUpComboBoxBit(cbExtTriggerMode[ID], "Ext. Trig. Mode ", bdCfgLayout[ID], 4, 0, DPP::Bit_BoardConfig::ListExtTriggerMode_QDC, DPP::BoardConfiguration, DPP::Bit_BoardConfig::ExtTriggerMode_QDC, 1, 0);
|
||||||
|
|
||||||
SetUpSpinBox(sbRecordLength_QDC[ID], "Record Length [ns] ", bdCfgLayout[ID], 5, 0, DPP::QDC::RecordLength, -1, true);
|
|
||||||
SetUpSpinBox(sbEventPreAgg_QDC[ID], "Event pre Agg. ", bdCfgLayout[ID], 6, 0, DPP::QDC::NumberEventsPerAggregate, -1, true);
|
SetUpSpinBox(sbEventPreAgg_QDC[ID], "Event pre Agg. ", bdCfgLayout[ID], 6, 0, DPP::QDC::NumberEventsPerAggregate, -1, true);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2451,13 +2450,14 @@ void DigiSettingsPanel::SetUpChannel_QDC(){
|
||||||
QGridLayout * inputLayout = new QGridLayout(inputBox);
|
QGridLayout * inputLayout = new QGridLayout(inputBox);
|
||||||
inputLayout->setSpacing(2);
|
inputLayout->setSpacing(2);
|
||||||
|
|
||||||
SetUpSpinBox(sbPreTrigger[ID][numGroup], "Pre-Trigger [ns] : ", inputLayout, 1, 0, DPP::QDC::PreTrigger);
|
SetUpSpinBox(sbRecordLength[ID][numGroup], "Record Length [ns] : ", inputLayout, 1, 0, DPP::QDC::RecordLength, -1, true);
|
||||||
SetUpSpinBox(sbDCOffset[ID][numGroup], "DC Offset [%] : ", inputLayout, 1, 2, DPP::QDC::DCOffset);
|
SetUpSpinBox(sbPreTrigger[ID][numGroup], "Pre-Trigger [ns] : ", inputLayout, 1, 2, DPP::QDC::PreTrigger);
|
||||||
SetUpComboBoxBit(cbPolarity[ID][numGroup], "Polarity : ", inputLayout, 2, 0, DPP::QDC::Bit_DPPAlgorithmControl::ListPolarity, DPP::QDC::DPPAlgorithmControl, DPP::QDC::Bit_DPPAlgorithmControl::Polarity);
|
SetUpSpinBox(sbDCOffset[ID][numGroup], "DC Offset [%] : ", inputLayout, 2, 0, DPP::QDC::DCOffset);
|
||||||
SetUpComboBoxBit(cbRCCR2Smoothing[ID][numGroup], "Input Smoothing : ", inputLayout, 2, 2, DPP::QDC::Bit_DPPAlgorithmControl::ListInputSmoothingFactor, DPP::QDC::DPPAlgorithmControl, DPP::QDC::Bit_DPPAlgorithmControl::InputSmoothingFactor);
|
SetUpComboBoxBit(cbPolarity[ID][numGroup], "Polarity : ", inputLayout, 2, 2, DPP::QDC::Bit_DPPAlgorithmControl::ListPolarity, DPP::QDC::DPPAlgorithmControl, DPP::QDC::Bit_DPPAlgorithmControl::Polarity);
|
||||||
|
|
||||||
SetUpSpinBox(sbFixedBaseline[ID][numGroup], "Fixed Baseline : ", inputLayout, 3, 0, DPP::QDC::FixedBaseline);
|
SetUpSpinBox(sbFixedBaseline[ID][numGroup], "Fixed Baseline : ", inputLayout, 4, 0, DPP::QDC::FixedBaseline);
|
||||||
SetUpComboBoxBit(cbBaseLineAvg[ID][numGroup], "Baseline Avg. : ", inputLayout, 3, 2, DPP::QDC::Bit_DPPAlgorithmControl::ListBaselineAvg, DPP::QDC::DPPAlgorithmControl, DPP::QDC::Bit_DPPAlgorithmControl::BaselineAvg);
|
SetUpComboBoxBit(cbBaseLineAvg[ID][numGroup], "Baseline Avg. : ", inputLayout, 4, 2, DPP::QDC::Bit_DPPAlgorithmControl::ListBaselineAvg, DPP::QDC::DPPAlgorithmControl, DPP::QDC::Bit_DPPAlgorithmControl::BaselineAvg);
|
||||||
|
SetUpComboBoxBit(cbRCCR2Smoothing[ID][numGroup], "Input Smoothing : ", inputLayout, 3, 0, DPP::QDC::Bit_DPPAlgorithmControl::ListInputSmoothingFactor, DPP::QDC::DPPAlgorithmControl, DPP::QDC::Bit_DPPAlgorithmControl::InputSmoothingFactor);
|
||||||
|
|
||||||
connect(cbBaseLineAvg[ID][numGroup], &RComboBox::currentIndexChanged, this, [=](){
|
connect(cbBaseLineAvg[ID][numGroup], &RComboBox::currentIndexChanged, this, [=](){
|
||||||
sbFixedBaseline[ID][numGroup]->setEnabled( cbBaseLineAvg[ID][numGroup]->currentData().toInt() == 0);
|
sbFixedBaseline[ID][numGroup]->setEnabled( cbBaseLineAvg[ID][numGroup]->currentData().toInt() == 0);
|
||||||
|
@ -2465,7 +2465,7 @@ void DigiSettingsPanel::SetUpChannel_QDC(){
|
||||||
|
|
||||||
/// DC offset
|
/// DC offset
|
||||||
QGroupBox * dcWidget = new QGroupBox("Fine DC offset [LSB]",inputBox);
|
QGroupBox * dcWidget = new QGroupBox("Fine DC offset [LSB]",inputBox);
|
||||||
inputLayout->addWidget(dcWidget, 4, 0, 1, 4);
|
inputLayout->addWidget(dcWidget, 5, 0, 1, 4);
|
||||||
|
|
||||||
QGridLayout * dcLayout = new QGridLayout(dcWidget);
|
QGridLayout * dcLayout = new QGridLayout(dcWidget);
|
||||||
dcLayout->setSpacing(2);
|
dcLayout->setSpacing(2);
|
||||||
|
@ -2595,11 +2595,11 @@ void DigiSettingsPanel::SetUpChannel_QDC(){
|
||||||
SetUpSpinBox(sbShortGate[ID][numGroup], "Gate Width [ns] : ", qdcLayout, 0, 0, DPP::QDC::GateWidth);
|
SetUpSpinBox(sbShortGate[ID][numGroup], "Gate Width [ns] : ", qdcLayout, 0, 0, DPP::QDC::GateWidth);
|
||||||
SetUpSpinBox(sbGateOffset[ID][numGroup], "Gate Offset [ns] : ", qdcLayout, 0, 2, DPP::QDC::GateOffset);
|
SetUpSpinBox(sbGateOffset[ID][numGroup], "Gate Offset [ns] : ", qdcLayout, 0, 2, DPP::QDC::GateOffset);
|
||||||
|
|
||||||
SetUpCheckBox(chkOverthreshold[ID][numGroup], "Enable OverThreshold Width ", qdcLayout, 1, 1, DPP::QDC::DPPAlgorithmControl, DPP::QDC::Bit_DPPAlgorithmControl::OverThresholdWitdhEnable);
|
//SetUpCheckBox(chkOverthreshold[ID][numGroup], "Enable OverThreshold Width ", qdcLayout, 1, 1, DPP::QDC::DPPAlgorithmControl, DPP::QDC::Bit_DPPAlgorithmControl::OverThresholdWitdhEnable);
|
||||||
SetUpSpinBox(sbOverThresholdWidth[ID][numGroup], "OverThreshold Width [ns] : ", qdcLayout, 1, 2, DPP::QDC::OverThresholdWidth);
|
//SetUpSpinBox(sbOverThresholdWidth[ID][numGroup], "OverThreshold Width [ns] : ", qdcLayout, 1, 2, DPP::QDC::OverThresholdWidth);
|
||||||
|
|
||||||
SetUpCheckBox(chkChargePedestal[ID][numGroup], "Enable Charge Pedes.", qdcLayout, 2, 1, DPP::QDC::DPPAlgorithmControl, DPP::QDC::Bit_DPPAlgorithmControl::ChargePedestal);
|
SetUpCheckBox(chkChargePedestal[ID][numGroup], "Enable Charge Pedes.", qdcLayout, 1, 1, DPP::QDC::DPPAlgorithmControl, DPP::QDC::Bit_DPPAlgorithmControl::ChargePedestal);
|
||||||
SetUpComboBoxBit(cbChargeSensitivity[ID][numGroup], "Charge Sen. : ", qdcLayout, 2, 2, DPP::QDC::Bit_DPPAlgorithmControl::ListChargeSensitivity, DPP::QDC::DPPAlgorithmControl, DPP::QDC::Bit_DPPAlgorithmControl::ChargeSensitivity);
|
SetUpComboBoxBit(cbChargeSensitivity[ID][numGroup], "Charge Sen. : ", qdcLayout, 1, 2, DPP::QDC::Bit_DPPAlgorithmControl::ListChargeSensitivity, DPP::QDC::DPPAlgorithmControl, DPP::QDC::Bit_DPPAlgorithmControl::ChargeSensitivity);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2610,10 +2610,10 @@ void DigiSettingsPanel::SetUpChannel_QDC(){
|
||||||
QGridLayout * otherLayout = new QGridLayout(otherBox);
|
QGridLayout * otherLayout = new QGridLayout(otherBox);
|
||||||
otherLayout->setSpacing(2);
|
otherLayout->setSpacing(2);
|
||||||
|
|
||||||
SetUpCheckBox(chkTestPule[ID][numGroup], "Int. Test Pulse", otherLayout, 1, 1, DPP::QDC::DPPAlgorithmControl, DPP::QDC::Bit_DPPAlgorithmControl::InternalTestPulse);
|
SetUpCheckBox(chkTestPule[ID][numGroup], "Int. Test Pulse", otherLayout, 0, 1, DPP::QDC::DPPAlgorithmControl, DPP::QDC::Bit_DPPAlgorithmControl::InternalTestPulse);
|
||||||
SetUpComboBoxBit(cbTestPulseRate[ID][numGroup], "Test Pulse Rate : ", otherLayout, 1, 2, DPP::QDC::Bit_DPPAlgorithmControl::ListTestPulseRate, DPP::QDC::DPPAlgorithmControl, DPP::QDC::Bit_DPPAlgorithmControl::TestPulseRate);
|
SetUpComboBoxBit(cbTestPulseRate[ID][numGroup], "Test Pulse Rate : ", otherLayout, 1, 0, DPP::QDC::Bit_DPPAlgorithmControl::ListTestPulseRate, DPP::QDC::DPPAlgorithmControl, DPP::QDC::Bit_DPPAlgorithmControl::TestPulseRate);
|
||||||
|
|
||||||
SetUpSpinBox(sbNumEventAgg[ID][numGroup], "Event pre Agg. : ", otherLayout, 2, 2, DPP::QDC::NumberEventsPerAggregate);
|
SetUpSpinBox(sbNumEventAgg[ID][numGroup], "Event pre Agg. : ", otherLayout, 0, 2, DPP::QDC::NumberEventsPerAggregate);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2679,14 +2679,16 @@ void DigiSettingsPanel::SetUpChannel_QDC(){
|
||||||
if( ch == 0 ){
|
if( ch == 0 ){
|
||||||
|
|
||||||
QLabel * lb2 = new QLabel("DC offset [%]", this); lb2->setAlignment(Qt::AlignHCenter); tabLayout->addWidget(lb2, 0, 2);
|
QLabel * lb2 = new QLabel("DC offset [%]", this); lb2->setAlignment(Qt::AlignHCenter); tabLayout->addWidget(lb2, 0, 2);
|
||||||
QLabel * lb4 = new QLabel("Pre-Trigger [ns]", this); lb4->setAlignment(Qt::AlignHCenter); tabLayout->addWidget(lb4, 0, 4);
|
QLabel * lb3 = new QLabel("Record Length [ns]", this); lb3->setAlignment(Qt::AlignHCenter); tabLayout->addWidget(lb3, 0, 4);
|
||||||
QLabel * lb6 = new QLabel("Polarity", this); lb6->setAlignment(Qt::AlignHCenter); tabLayout->addWidget(lb6, 0, 6);
|
QLabel * lb4 = new QLabel("Pre-Trigger [ns]", this); lb4->setAlignment(Qt::AlignHCenter); tabLayout->addWidget(lb4, 0, 6);
|
||||||
QLabel * lb7 = new QLabel("Input Smoothing", this); lb7->setAlignment(Qt::AlignHCenter); tabLayout->addWidget(lb7, 0, 8);
|
QLabel * lb6 = new QLabel("Polarity", this); lb6->setAlignment(Qt::AlignHCenter); tabLayout->addWidget(lb6, 0, 8);
|
||||||
|
QLabel * lb7 = new QLabel("Input Smoothing", this); lb7->setAlignment(Qt::AlignHCenter); tabLayout->addWidget(lb7, 0, 10);
|
||||||
}
|
}
|
||||||
SetUpSpinBox(sbDCOffset[ID][ch], "", tabLayout, ch + 1, 1, DPP::QDC::DCOffset, ch);
|
SetUpSpinBox(sbDCOffset[ID][ch], "", tabLayout, ch + 1, 1, DPP::QDC::DCOffset, ch);
|
||||||
SetUpSpinBox(sbPreTrigger[ID][ch], "", tabLayout, ch + 1, 3, DPP::QDC::PreTrigger, ch);
|
SetUpSpinBox(sbRecordLength[ID][ch], "", tabLayout, ch + 1, 3, DPP::QDC::RecordLength, ch);
|
||||||
SetUpComboBoxBit(cbPolarity[ID][ch], "", tabLayout, ch + 1, 5, DPP::QDC::Bit_DPPAlgorithmControl::ListPolarity, DPP::QDC::DPPAlgorithmControl, DPP::QDC::Bit_DPPAlgorithmControl::Polarity, 1, ch);
|
SetUpSpinBox(sbPreTrigger[ID][ch], "", tabLayout, ch + 1, 5, DPP::QDC::PreTrigger, ch);
|
||||||
SetUpComboBoxBit(cbRCCR2Smoothing[ID][ch], "", tabLayout, ch + 1, 7, DPP::QDC::Bit_DPPAlgorithmControl::ListInputSmoothingFactor, DPP::QDC::DPPAlgorithmControl, DPP::QDC::Bit_DPPAlgorithmControl::InputSmoothingFactor, 1, ch);
|
SetUpComboBoxBit(cbPolarity[ID][ch], "", tabLayout, ch + 1, 7, DPP::QDC::Bit_DPPAlgorithmControl::ListPolarity, DPP::QDC::DPPAlgorithmControl, DPP::QDC::Bit_DPPAlgorithmControl::Polarity, 1, ch);
|
||||||
|
SetUpComboBoxBit(cbRCCR2Smoothing[ID][ch], "", tabLayout, ch + 1, 9, DPP::QDC::Bit_DPPAlgorithmControl::ListInputSmoothingFactor, DPP::QDC::DPPAlgorithmControl, DPP::QDC::Bit_DPPAlgorithmControl::InputSmoothingFactor, 1, ch);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( i == 1 ){
|
if ( i == 1 ){
|
||||||
|
@ -2772,7 +2774,7 @@ void DigiSettingsPanel::SetUpChannel_QDC(){
|
||||||
tabLayout->setSpacing(2);
|
tabLayout->setSpacing(2);
|
||||||
tabLayout->setAlignment(Qt::AlignTop | Qt::AlignLeft);
|
tabLayout->setAlignment(Qt::AlignTop | Qt::AlignLeft);
|
||||||
|
|
||||||
QLabel * lb0 = new QLabel("Ch.", this); lb0->setAlignment(Qt::AlignHCenter); tabLayout->addWidget(lb0, 0, 0);
|
QLabel * lb0 = new QLabel("Grp.", this); lb0->setAlignment(Qt::AlignHCenter); tabLayout->addWidget(lb0, 0, 0);
|
||||||
|
|
||||||
for( int ch = 0; ch < digi[ID]->GetNumRegChannels(); ch++){
|
for( int ch = 0; ch < digi[ID]->GetNumRegChannels(); ch++){
|
||||||
QLabel * chid = new QLabel(QString::number(ch), this);
|
QLabel * chid = new QLabel(QString::number(ch), this);
|
||||||
|
@ -2789,7 +2791,7 @@ void DigiSettingsPanel::SetUpChannel_QDC(){
|
||||||
|
|
||||||
SetUpComboBoxBit(cbTrigMode[ID][ch], "", tabLayout, ch + 1, 1, DPP::QDC::Bit_DPPAlgorithmControl::ListTrigMode, DPP::QDC::DPPAlgorithmControl, DPP::QDC::Bit_DPPAlgorithmControl::TriggerMode, 1, ch);
|
SetUpComboBoxBit(cbTrigMode[ID][ch], "", tabLayout, ch + 1, 1, DPP::QDC::Bit_DPPAlgorithmControl::ListTrigMode, DPP::QDC::DPPAlgorithmControl, DPP::QDC::Bit_DPPAlgorithmControl::TriggerMode, 1, ch);
|
||||||
SetUpSpinBox(sbTriggerHoldOff[ID][ch], "", tabLayout, ch + 1, 3, DPP::QDC::TriggerHoldOffWidth, ch);
|
SetUpSpinBox(sbTriggerHoldOff[ID][ch], "", tabLayout, ch + 1, 3, DPP::QDC::TriggerHoldOffWidth, ch);
|
||||||
SetUpSpinBox(sbShapedTrigWidth[ID][ch], "", tabLayout, ch + 1, 4, DPP::QDC::TRGOUTWidth, ch);
|
SetUpSpinBox(sbShapedTrigWidth[ID][ch], "", tabLayout, ch + 1, 5, DPP::QDC::TRGOUTWidth, ch);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2838,10 +2840,12 @@ void DigiSettingsPanel::SetUpChannel_QDC(){
|
||||||
}
|
}
|
||||||
|
|
||||||
if( i == 2 ){
|
if( i == 2 ){
|
||||||
|
if( ch == 0 ){
|
||||||
|
QLabel * lb0 = new QLabel("Event pre Agg.", this); lb0->setAlignment(Qt::AlignHCenter); tabLayout->addWidget(lb0, 0, 6);
|
||||||
|
}
|
||||||
SetUpCheckBox(chkDisableSelfTrigger[ID][ch], "Disable Self Trigger ", tabLayout, ch+1, 1, DPP::QDC::DPPAlgorithmControl, DPP::QDC::Bit_DPPAlgorithmControl::DisableSelfTrigger, ch);
|
SetUpCheckBox(chkDisableSelfTrigger[ID][ch], "Disable Self Trigger ", tabLayout, ch+1, 1, DPP::QDC::DPPAlgorithmControl, DPP::QDC::Bit_DPPAlgorithmControl::DisableSelfTrigger, ch);
|
||||||
SetUpCheckBox(chkDisableTriggerHysteresis[ID][ch], "Disbale Trig. Hysteresis ", tabLayout, ch+1, 3, DPP::QDC::DPPAlgorithmControl, DPP::QDC::Bit_DPPAlgorithmControl::DisableTriggerHysteresis, ch, 2);
|
SetUpCheckBox(chkDisableTriggerHysteresis[ID][ch], "Disbale Trig. Hysteresis ", tabLayout, ch+1, 3, DPP::QDC::DPPAlgorithmControl, DPP::QDC::Bit_DPPAlgorithmControl::DisableTriggerHysteresis, ch, 2);
|
||||||
SetUpSpinBox(sbNumEventAgg[ID][ch], "Event pre Agg. : ", tabLayout, ch+1, 5, DPP::QDC::NumberEventsPerAggregate, ch);
|
SetUpSpinBox(sbNumEventAgg[ID][ch], "", tabLayout, ch+1, 5, DPP::QDC::NumberEventsPerAggregate, ch);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2856,7 +2860,8 @@ void DigiSettingsPanel::SetUpChannel_QDC(){
|
||||||
QTabWidget * trapTab = new QTabWidget(this);
|
QTabWidget * trapTab = new QTabWidget(this);
|
||||||
trapLayout->addWidget(trapTab);
|
trapLayout->addWidget(trapTab);
|
||||||
|
|
||||||
QStringList tabName = {"Common Settings", "OverThreshold"};
|
//QStringList tabName = {"Common Settings", "OverThreshold"};
|
||||||
|
QStringList tabName = {"Common Settings"};
|
||||||
|
|
||||||
const int nTab = tabName.count();
|
const int nTab = tabName.count();
|
||||||
|
|
||||||
|
@ -2870,7 +2875,7 @@ void DigiSettingsPanel::SetUpChannel_QDC(){
|
||||||
tabLayout->setSpacing(2);
|
tabLayout->setSpacing(2);
|
||||||
tabLayout->setAlignment(Qt::AlignTop | Qt::AlignLeft);
|
tabLayout->setAlignment(Qt::AlignTop | Qt::AlignLeft);
|
||||||
|
|
||||||
QLabel * lb0 = new QLabel("Ch.", this); lb0->setAlignment(Qt::AlignHCenter); tabLayout->addWidget(lb0, 0, 0);
|
QLabel * lb0 = new QLabel("Grp.", this); lb0->setAlignment(Qt::AlignHCenter); tabLayout->addWidget(lb0, 0, 0);
|
||||||
|
|
||||||
for( int ch = 0; ch < digi[ID]->GetNumRegChannels(); ch++){
|
for( int ch = 0; ch < digi[ID]->GetNumRegChannels(); ch++){
|
||||||
|
|
||||||
|
@ -2893,15 +2898,15 @@ void DigiSettingsPanel::SetUpChannel_QDC(){
|
||||||
SetUpCheckBox(chkChargePedestal[ID][ch], "Enable Charge Pedes.", tabLayout, ch + 1, 7, DPP::QDC::DPPAlgorithmControl, DPP::QDC::Bit_DPPAlgorithmControl::ChargePedestal, ch);
|
SetUpCheckBox(chkChargePedestal[ID][ch], "Enable Charge Pedes.", tabLayout, ch + 1, 7, DPP::QDC::DPPAlgorithmControl, DPP::QDC::Bit_DPPAlgorithmControl::ChargePedestal, ch);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( i == 1 ){
|
// if ( i == 1 ){
|
||||||
if( ch == 0 ){
|
// if( ch == 0 ){
|
||||||
QLabel * lb1 = new QLabel("CFD Delay [ns]", this); lb1->setAlignment(Qt::AlignHCenter); tabLayout->addWidget(lb1, 0, 2);
|
// QLabel * lb1 = new QLabel("OverThreshold Width [ns]", this); lb1->setAlignment(Qt::AlignHCenter); tabLayout->addWidget(lb1, 0, 2);
|
||||||
}
|
// }
|
||||||
|
|
||||||
SetUpCheckBox(chkOverthreshold[ID][ch], "Enable OverThreshold Width ", tabLayout, ch + 1, 1, DPP::QDC::DPPAlgorithmControl, DPP::QDC::Bit_DPPAlgorithmControl::OverThresholdWitdhEnable, ch);
|
|
||||||
SetUpSpinBox(sbOverThresholdWidth[ID][ch], "", tabLayout, ch + 1, 3, DPP::QDC::OverThresholdWidth, ch);
|
|
||||||
|
|
||||||
}
|
// SetUpCheckBox(chkOverthreshold[ID][ch], "Enable OverThreshold Width ", tabLayout, ch + 1, 1, DPP::QDC::DPPAlgorithmControl, DPP::QDC::Bit_DPPAlgorithmControl::OverThresholdWitdhEnable, ch);
|
||||||
|
// SetUpSpinBox(sbOverThresholdWidth[ID][ch], "", tabLayout, ch + 1, 3, DPP::QDC::OverThresholdWidth, ch);
|
||||||
|
|
||||||
|
// }
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2927,7 +2932,7 @@ void DigiSettingsPanel::SetUpChannel_QDC(){
|
||||||
tabLayout->setSpacing(2);
|
tabLayout->setSpacing(2);
|
||||||
tabLayout->setAlignment(Qt::AlignTop | Qt::AlignLeft);
|
tabLayout->setAlignment(Qt::AlignTop | Qt::AlignLeft);
|
||||||
|
|
||||||
QLabel * lb0 = new QLabel("Ch.", this); lb0->setAlignment(Qt::AlignHCenter); tabLayout->addWidget(lb0, 0, 0);
|
QLabel * lb0 = new QLabel("Grp.", this); lb0->setAlignment(Qt::AlignHCenter); tabLayout->addWidget(lb0, 0, 0);
|
||||||
|
|
||||||
for( int ch = 0; ch < digi[ID]->GetNumRegChannels(); ch++){
|
for( int ch = 0; ch < digi[ID]->GetNumRegChannels(); ch++){
|
||||||
QLabel * chid = new QLabel(QString::number(ch), this);
|
QLabel * chid = new QLabel(QString::number(ch), this);
|
||||||
|
@ -3254,11 +3259,6 @@ void DigiSettingsPanel::UpdatePanelFromMemory(){
|
||||||
|
|
||||||
//*======================================== QDC only
|
//*======================================== QDC only
|
||||||
if( digi[ID]->GetDPPType() == V1740_DPP_QDC_CODE ){
|
if( digi[ID]->GetDPPType() == V1740_DPP_QDC_CODE ){
|
||||||
uint32_t recordLength = digi[ID]->GetSettingFromMemory(DPP::QDC::RecordLength);
|
|
||||||
|
|
||||||
printf("QDC::RecordLenght: %d = %.0f ns \n", recordLength, (recordLength & 0x1FFF)*DPP::QDC::RecordLength.GetPartialStep() * digi[ID]->GetTick2ns());
|
|
||||||
sbRecordLength_QDC[ID]->setValue((recordLength & 0x1FFF)* DPP::QDC::RecordLength.GetPartialStep() * digi[ID]->GetTick2ns());
|
|
||||||
|
|
||||||
uint32_t eventPreAgg = digi[ID]->GetSettingFromMemory(DPP::QDC::NumberEventsPerAggregate);
|
uint32_t eventPreAgg = digi[ID]->GetSettingFromMemory(DPP::QDC::NumberEventsPerAggregate);
|
||||||
sbEventPreAgg_QDC[ID]->setValue(eventPreAgg & 0x3FF);
|
sbEventPreAgg_QDC[ID]->setValue(eventPreAgg & 0x3FF);
|
||||||
}
|
}
|
||||||
|
@ -3676,6 +3676,7 @@ void DigiSettingsPanel::SyncAllChannelsTab_QDC(){
|
||||||
|
|
||||||
if( !enableSignalSlot ) return;
|
if( !enableSignalSlot ) return;
|
||||||
|
|
||||||
|
SyncSpinBox(sbRecordLength);
|
||||||
SyncSpinBox(sbPreTrigger);
|
SyncSpinBox(sbPreTrigger);
|
||||||
SyncSpinBox(sbDCOffset);
|
SyncSpinBox(sbDCOffset);
|
||||||
SyncSpinBox(sbTriggerHoldOff);
|
SyncSpinBox(sbTriggerHoldOff);
|
||||||
|
@ -3683,11 +3684,11 @@ void DigiSettingsPanel::SyncAllChannelsTab_QDC(){
|
||||||
SyncSpinBox(sbNumEventAgg);
|
SyncSpinBox(sbNumEventAgg);
|
||||||
SyncSpinBox(sbShortGate);
|
SyncSpinBox(sbShortGate);
|
||||||
SyncSpinBox(sbGateOffset);
|
SyncSpinBox(sbGateOffset);
|
||||||
SyncSpinBox(sbOverThresholdWidth);
|
//SyncSpinBox(sbOverThresholdWidth);
|
||||||
|
|
||||||
SyncCheckBox(chkDisableSelfTrigger);
|
SyncCheckBox(chkDisableSelfTrigger);
|
||||||
SyncCheckBox(chkDisableTriggerHysteresis);
|
SyncCheckBox(chkDisableTriggerHysteresis);
|
||||||
SyncCheckBox(chkOverthreshold);
|
//SyncCheckBox(chkOverthreshold);
|
||||||
SyncCheckBox(chkChargePedestal);
|
SyncCheckBox(chkChargePedestal);
|
||||||
SyncCheckBox(chkTestPule);
|
SyncCheckBox(chkTestPule);
|
||||||
|
|
||||||
|
@ -3748,6 +3749,7 @@ void DigiSettingsPanel::UpdateSettings_QDC(){
|
||||||
|
|
||||||
for(int grp = 0; grp < digi[ID]->GetNumRegChannels(); grp ++){
|
for(int grp = 0; grp < digi[ID]->GetNumRegChannels(); grp ++){
|
||||||
|
|
||||||
|
UpdateSpinBox(sbRecordLength[ID][grp], DPP::QDC::RecordLength, grp);
|
||||||
UpdateSpinBox(sbPreTrigger[ID][grp], DPP::QDC::PreTrigger, grp);
|
UpdateSpinBox(sbPreTrigger[ID][grp], DPP::QDC::PreTrigger, grp);
|
||||||
UpdateSpinBox(sbDCOffset[ID][grp], DPP::QDC::DCOffset, grp);
|
UpdateSpinBox(sbDCOffset[ID][grp], DPP::QDC::DCOffset, grp);
|
||||||
UpdateSpinBox(sbTriggerHoldOff[ID][grp], DPP::QDC::TriggerHoldOffWidth, grp);
|
UpdateSpinBox(sbTriggerHoldOff[ID][grp], DPP::QDC::TriggerHoldOffWidth, grp);
|
||||||
|
@ -3755,7 +3757,7 @@ void DigiSettingsPanel::UpdateSettings_QDC(){
|
||||||
UpdateSpinBox(sbNumEventAgg[ID][grp], DPP::QDC::NumberEventsPerAggregate, grp);
|
UpdateSpinBox(sbNumEventAgg[ID][grp], DPP::QDC::NumberEventsPerAggregate, grp);
|
||||||
UpdateSpinBox(sbShortGate[ID][grp], DPP::QDC::GateWidth, grp);
|
UpdateSpinBox(sbShortGate[ID][grp], DPP::QDC::GateWidth, grp);
|
||||||
UpdateSpinBox(sbGateOffset[ID][grp], DPP::QDC::GateOffset, grp);
|
UpdateSpinBox(sbGateOffset[ID][grp], DPP::QDC::GateOffset, grp);
|
||||||
UpdateSpinBox(sbOverThresholdWidth[ID][grp], DPP::QDC::OverThresholdWidth, grp);
|
//UpdateSpinBox(sbOverThresholdWidth[ID][grp], DPP::QDC::OverThresholdWidth, grp);
|
||||||
|
|
||||||
uint32_t dpp = digi[ID]->GetSettingFromMemory(DPP::QDC::DPPAlgorithmControl, grp);
|
uint32_t dpp = digi[ID]->GetSettingFromMemory(DPP::QDC::DPPAlgorithmControl, grp);
|
||||||
|
|
||||||
|
@ -3768,7 +3770,7 @@ void DigiSettingsPanel::UpdateSettings_QDC(){
|
||||||
|
|
||||||
chkDisableSelfTrigger[ID][grp]->setChecked( Digitizer::ExtractBits(dpp, DPP::QDC::Bit_DPPAlgorithmControl::DisableSelfTrigger) );
|
chkDisableSelfTrigger[ID][grp]->setChecked( Digitizer::ExtractBits(dpp, DPP::QDC::Bit_DPPAlgorithmControl::DisableSelfTrigger) );
|
||||||
chkDisableTriggerHysteresis[ID][grp]->setChecked( Digitizer::ExtractBits(dpp, DPP::QDC::Bit_DPPAlgorithmControl::DisableTriggerHysteresis) );
|
chkDisableTriggerHysteresis[ID][grp]->setChecked( Digitizer::ExtractBits(dpp, DPP::QDC::Bit_DPPAlgorithmControl::DisableTriggerHysteresis) );
|
||||||
chkOverthreshold[ID][grp]->setChecked( Digitizer::ExtractBits(dpp, DPP::QDC::Bit_DPPAlgorithmControl::OverThresholdWitdhEnable) );
|
//chkOverthreshold[ID][grp]->setChecked( Digitizer::ExtractBits(dpp, DPP::QDC::Bit_DPPAlgorithmControl::OverThresholdWitdhEnable) );
|
||||||
chkChargePedestal[ID][grp]->setChecked( Digitizer::ExtractBits(dpp, DPP::QDC::Bit_DPPAlgorithmControl::ChargePedestal));
|
chkChargePedestal[ID][grp]->setChecked( Digitizer::ExtractBits(dpp, DPP::QDC::Bit_DPPAlgorithmControl::ChargePedestal));
|
||||||
chkTestPule[ID][grp]->setChecked( Digitizer::ExtractBits(dpp, DPP::QDC::Bit_DPPAlgorithmControl::InternalTestPulse));
|
chkTestPule[ID][grp]->setChecked( Digitizer::ExtractBits(dpp, DPP::QDC::Bit_DPPAlgorithmControl::InternalTestPulse));
|
||||||
|
|
||||||
|
|
|
@ -270,7 +270,6 @@ private:
|
||||||
|
|
||||||
//------------------- QDC
|
//------------------- QDC
|
||||||
RComboBox * cbExtTriggerMode[MaxNDigitizer];
|
RComboBox * cbExtTriggerMode[MaxNDigitizer];
|
||||||
RSpinBox * sbRecordLength_QDC[MaxNDigitizer];
|
|
||||||
RSpinBox * sbEventPreAgg_QDC[MaxNDigitizer];
|
RSpinBox * sbEventPreAgg_QDC[MaxNDigitizer];
|
||||||
|
|
||||||
//...... reuse varaible
|
//...... reuse varaible
|
||||||
|
@ -280,8 +279,8 @@ private:
|
||||||
//Trig Hold off with -> sbTriggerHoldOff
|
//Trig Hold off with -> sbTriggerHoldOff
|
||||||
//Trig out width -> sbShapedTrigWidth
|
//Trig out width -> sbShapedTrigWidth
|
||||||
|
|
||||||
QCheckBox * chkOverthreshold[MaxNDigitizer][MaxRegChannel+1];
|
//QCheckBox * chkOverthreshold[MaxNDigitizer][MaxRegChannel+1]; //TODO need firmware version 4.25 & 135.17
|
||||||
RSpinBox * sbOverThresholdWidth[MaxNDigitizer][MaxRegChannel + 1];
|
//RSpinBox * sbOverThresholdWidth[MaxNDigitizer][MaxRegChannel + 1];
|
||||||
RSpinBox * sbSubChOffset[MaxNDigitizer][MaxRegChannel + 1][8];
|
RSpinBox * sbSubChOffset[MaxNDigitizer][MaxRegChannel + 1][8];
|
||||||
RSpinBox * sbSubChThreshold[MaxNDigitizer][MaxRegChannel + 1][8];
|
RSpinBox * sbSubChThreshold[MaxNDigitizer][MaxRegChannel + 1][8];
|
||||||
QLabel * lbSubCh[MaxNDigitizer][8];
|
QLabel * lbSubCh[MaxNDigitizer][8];
|
||||||
|
|
|
@ -786,6 +786,7 @@ namespace DPP {
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace QDC { // Register already grouped in channel. and there no control for indiviual channel except the Fine DC offset and threshold, so it is like no group
|
namespace QDC { // Register already grouped in channel. and there no control for indiviual channel except the Fine DC offset and threshold, so it is like no group
|
||||||
|
const Reg RecordLength ("Record Length" , 0x1024, RW::ReadWrite, false, 0x1FFF, 1); /// R/W
|
||||||
const Reg GateWidth ("GateWidth" , 0x1030, RW::ReadWrite, false, 0xFFF, 1); /// R/W
|
const Reg GateWidth ("GateWidth" , 0x1030, RW::ReadWrite, false, 0xFFF, 1); /// R/W
|
||||||
const Reg GateOffset ("GateOfset" , 0x1034, RW::ReadWrite, false, 0xFF, 1); /// R/W
|
const Reg GateOffset ("GateOfset" , 0x1034, RW::ReadWrite, false, 0xFF, 1); /// R/W
|
||||||
const Reg FixedBaseline ("FixedBaseline" , 0x1038, RW::ReadWrite, false, 0xFFF, -1); /// R/W
|
const Reg FixedBaseline ("FixedBaseline" , 0x1038, RW::ReadWrite, false, 0xFFF, -1); /// R/W
|
||||||
|
@ -793,11 +794,11 @@ namespace DPP {
|
||||||
const Reg DPPAlgorithmControl ("DPPAlgorithmControl" , 0x1040, RW::ReadWrite, false, {}); /// R/W
|
const Reg DPPAlgorithmControl ("DPPAlgorithmControl" , 0x1040, RW::ReadWrite, false, {}); /// R/W
|
||||||
const Reg TriggerHoldOffWidth ("Trigger Hold-off width" , 0x1074, RW::ReadWrite, false, 0xFFFF, 1); /// R/W
|
const Reg TriggerHoldOffWidth ("Trigger Hold-off width" , 0x1074, RW::ReadWrite, false, 0xFFFF, 1); /// R/W
|
||||||
const Reg TRGOUTWidth ("Trigger out width" , 0x1078, RW::ReadWrite, false, 0xFFFF, 1); /// R/W
|
const Reg TRGOUTWidth ("Trigger out width" , 0x1078, RW::ReadWrite, false, 0xFFFF, 1); /// R/W
|
||||||
const Reg OverThresholdWidth ("Over Threshold width" , 0x107C, RW::ReadWrite, false, 0xFFFF, 1); /// R/W
|
//const Reg OverThresholdWidth ("Over Threshold width" , 0x107C, RW::ReadWrite, false, 0xFFFF, 1); /// R/W // need firmware version 4.25 & 135.17
|
||||||
const Reg GroupStatus_R ("Group Status" , 0x1088, RW::ReadONLY, false, {}); /// R/
|
const Reg GroupStatus_R ("Group Status" , 0x1088, RW::ReadONLY, false, {}); /// R/
|
||||||
const Reg AMCFirmwareRevision_R ("AMC firmware version" , 0x108C, RW::ReadONLY, false, {}); /// R/
|
const Reg AMCFirmwareRevision_R ("AMC firmware version" , 0x108C, RW::ReadONLY, false, {}); /// R/
|
||||||
const Reg DCOffset ("DC offset" , 0x1098, RW::ReadWrite, false, 0xFFFF, -1); /// R/W
|
const Reg DCOffset ("DC offset" , 0x1098, RW::ReadWrite, false, 0xFFFF, -1); /// R/W
|
||||||
const Reg ChannelMask ("Channel Group Mask" , 0x10A8, RW::ReadWrite, false, 0xFF, 1); /// R/W
|
const Reg SubChannelMask ("SubChannel Mask" , 0x10A8, RW::ReadWrite, false, 0xFF, 1); /// R/W
|
||||||
const Reg DCOffset_LowCh ("DC offset for low ch." , 0x10C0, RW::ReadWrite, false, 0xFFFFFFFF, -1); /// R/W
|
const Reg DCOffset_LowCh ("DC offset for low ch." , 0x10C0, RW::ReadWrite, false, 0xFFFFFFFF, -1); /// R/W
|
||||||
const Reg DCOffset_HighCh ("DC offset for high ch." , 0x10C4, RW::ReadWrite, false, 0xFFFFFFFF, -1); /// R/W
|
const Reg DCOffset_HighCh ("DC offset for high ch." , 0x10C4, RW::ReadWrite, false, 0xFFFFFFFF, -1); /// R/W
|
||||||
const Reg TriggerThreshold_sub0 ("Trigger Threshold sub0" , 0x10D0, RW::ReadWrite, false, 0xFFF, -1); /// R/W
|
const Reg TriggerThreshold_sub0 ("Trigger Threshold sub0" , 0x10D0, RW::ReadWrite, false, 0xFFF, -1); /// R/W
|
||||||
|
@ -811,14 +812,13 @@ namespace DPP {
|
||||||
|
|
||||||
|
|
||||||
const Reg NumberEventsPerAggregate ("Number of Events per Aggregate", 0x8020, RW::ReadWrite, false, 0x3FF, 1); /// R/W
|
const Reg NumberEventsPerAggregate ("Number of Events per Aggregate", 0x8020, RW::ReadWrite, false, 0x3FF, 1); /// R/W
|
||||||
const Reg RecordLength ("Record Length" , 0x8024, RW::ReadWrite, false, 0x1FFF, 1); /// R/W
|
|
||||||
const Reg GroupEnableMask ("Group Enable Mask" , 0x8120, RW::ReadWrite, false, 0xFF, 1); /// R/W
|
const Reg GroupEnableMask ("Group Enable Mask" , 0x8120, RW::ReadWrite, false, 0xFF, 1); /// R/W
|
||||||
|
|
||||||
namespace Bit_DPPAlgorithmControl {
|
namespace Bit_DPPAlgorithmControl {
|
||||||
const std::pair<unsigned short, unsigned short> ChargeSensitivity = {3, 0} ; /// length, smallest pos
|
const std::pair<unsigned short, unsigned short> ChargeSensitivity = {3, 0} ; /// length, smallest pos
|
||||||
const std::pair<unsigned short, unsigned short> InternalTestPulse = {1, 4};
|
const std::pair<unsigned short, unsigned short> InternalTestPulse = {1, 4};
|
||||||
const std::pair<unsigned short, unsigned short> TestPulseRate = {2, 5};
|
const std::pair<unsigned short, unsigned short> TestPulseRate = {2, 5};
|
||||||
const std::pair<unsigned short, unsigned short> OverThresholdWitdhEnable = {1, 7};
|
//const std::pair<unsigned short, unsigned short> OverThresholdWitdhEnable = {1, 7}; ///need firmware version 4.25 & 135.17
|
||||||
const std::pair<unsigned short, unsigned short> ChargePedestal = {1, 8};
|
const std::pair<unsigned short, unsigned short> ChargePedestal = {1, 8};
|
||||||
const std::pair<unsigned short, unsigned short> InputSmoothingFactor = {3, 12};
|
const std::pair<unsigned short, unsigned short> InputSmoothingFactor = {3, 12};
|
||||||
const std::pair<unsigned short, unsigned short> Polarity = {1, 16};
|
const std::pair<unsigned short, unsigned short> Polarity = {1, 16};
|
||||||
|
@ -926,6 +926,7 @@ const std::vector<Reg> RegisterChannelList_PSD = {
|
||||||
};
|
};
|
||||||
|
|
||||||
const std::vector<Reg> RegisterChannelList_QDC = {
|
const std::vector<Reg> RegisterChannelList_QDC = {
|
||||||
|
DPP::QDC::RecordLength,
|
||||||
DPP::QDC::GateWidth,
|
DPP::QDC::GateWidth,
|
||||||
DPP::QDC::GateOffset,
|
DPP::QDC::GateOffset,
|
||||||
DPP::QDC::FixedBaseline,
|
DPP::QDC::FixedBaseline,
|
||||||
|
@ -933,11 +934,11 @@ const std::vector<Reg> RegisterChannelList_QDC = {
|
||||||
DPP::QDC::DPPAlgorithmControl,
|
DPP::QDC::DPPAlgorithmControl,
|
||||||
DPP::QDC::TriggerHoldOffWidth,
|
DPP::QDC::TriggerHoldOffWidth,
|
||||||
DPP::QDC::TRGOUTWidth,
|
DPP::QDC::TRGOUTWidth,
|
||||||
DPP::QDC::OverThresholdWidth,
|
//DPP::QDC::OverThresholdWidth,
|
||||||
DPP::QDC::GroupStatus_R,
|
DPP::QDC::GroupStatus_R,
|
||||||
DPP::QDC::AMCFirmwareRevision_R,
|
DPP::QDC::AMCFirmwareRevision_R,
|
||||||
DPP::QDC::DCOffset,
|
DPP::QDC::DCOffset,
|
||||||
DPP::QDC::ChannelMask,
|
DPP::QDC::SubChannelMask,
|
||||||
DPP::QDC::DCOffset_LowCh,
|
DPP::QDC::DCOffset_LowCh,
|
||||||
DPP::QDC::DCOffset_HighCh,
|
DPP::QDC::DCOffset_HighCh,
|
||||||
DPP::QDC::TriggerThreshold_sub0,
|
DPP::QDC::TriggerThreshold_sub0,
|
||||||
|
@ -1024,7 +1025,6 @@ const std::vector<Reg> RegisterBoardList_QDC = {
|
||||||
DPP::BoardConfiguration ,
|
DPP::BoardConfiguration ,
|
||||||
DPP::AggregateOrganization,
|
DPP::AggregateOrganization,
|
||||||
DPP::QDC::NumberEventsPerAggregate,
|
DPP::QDC::NumberEventsPerAggregate,
|
||||||
DPP::QDC::RecordLength ,
|
|
||||||
DPP::AcquisitionControl,
|
DPP::AcquisitionControl,
|
||||||
DPP::AcquisitionStatus_R,
|
DPP::AcquisitionStatus_R,
|
||||||
DPP::SoftwareTrigger_W,
|
DPP::SoftwareTrigger_W,
|
||||||
|
|
55
test.cpp
55
test.cpp
|
@ -28,20 +28,62 @@ int main(int argc, char* argv[]){
|
||||||
|
|
||||||
|
|
||||||
Digitizer * digi = new Digitizer(0, 2, false, true);
|
Digitizer * digi = new Digitizer(0, 2, false, true);
|
||||||
|
digi->Reset();
|
||||||
|
digi->WriteRegister(DPP::SoftwareClear_W, 1);
|
||||||
|
|
||||||
|
digi->WriteRegister(DPP::QDC::RecordLength, 6000/16, -1);
|
||||||
|
digi->WriteRegister(DPP::QDC::GateWidth, 100/16, -1);
|
||||||
|
digi->WriteRegister(DPP::QDC::GateOffset, 0, -1);
|
||||||
|
digi->WriteRegister(DPP::QDC::FixedBaseline, 0, -1);
|
||||||
|
digi->WriteRegister(DPP::QDC::PreTrigger, 1000/16, -1);
|
||||||
|
//digi->WriteRegister(DPP::QDC::DPPAlgorithmControl, 0x300112); // with test pulse
|
||||||
|
digi->WriteRegister(DPP::QDC::DPPAlgorithmControl, 0x300102); // No test pulse
|
||||||
|
digi->WriteRegister(DPP::QDC::TriggerHoldOffWidth, 100/16, -1);
|
||||||
|
digi->WriteRegister(DPP::QDC::TRGOUTWidth, 100/16, -1);
|
||||||
|
//digi->WriteRegister(DPP::QDC::OverThresholdWidth, 100/16, -1);
|
||||||
|
//digi->WriteRegister(DPP::QDC::DCOffset, 100/16, -1);
|
||||||
|
digi->WriteRegister(DPP::QDC::SubChannelMask, 0xFF, -1);
|
||||||
|
|
||||||
|
digi->WriteRegister(DPP::QDC::TriggerThreshold_sub0, 100, -1);
|
||||||
|
digi->WriteRegister(DPP::QDC::TriggerThreshold_sub1, 100, -1);
|
||||||
|
digi->WriteRegister(DPP::QDC::TriggerThreshold_sub2, 100, -1);
|
||||||
|
digi->WriteRegister(DPP::QDC::TriggerThreshold_sub3, 100, -1);
|
||||||
|
digi->WriteRegister(DPP::QDC::TriggerThreshold_sub4, 100, -1);
|
||||||
|
digi->WriteRegister(DPP::QDC::TriggerThreshold_sub5, 100, -1);
|
||||||
|
digi->WriteRegister(DPP::QDC::TriggerThreshold_sub6, 100, -1);
|
||||||
|
digi->WriteRegister(DPP::QDC::TriggerThreshold_sub7, 100, -1);
|
||||||
|
|
||||||
|
|
||||||
|
digi->WriteRegister(DPP::BoardConfiguration, 0xC0110);
|
||||||
|
digi->WriteRegister(DPP::AggregateOrganization, 0x0);
|
||||||
|
digi->WriteRegister(DPP::QDC::NumberEventsPerAggregate, 0x7FF);
|
||||||
|
digi->WriteRegister(DPP::AcquisitionControl, 0x0);
|
||||||
|
digi->WriteRegister(DPP::GlobalTriggerMask, 0x0);
|
||||||
|
digi->WriteRegister(DPP::FrontPanelTRGOUTEnableMask, 0x0);
|
||||||
|
digi->WriteRegister(DPP::FrontPanelIOControl, 0x0);
|
||||||
|
digi->WriteRegister(DPP::QDC::GroupEnableMask, 0xFF);
|
||||||
|
digi->WriteRegister(DPP::MaxAggregatePerBlockTransfer, 0x3FF);
|
||||||
|
|
||||||
|
|
||||||
|
digi->WriteRegister(DPP::QDC::DPPAlgorithmControl, 0x300112, 0); // with pulse for grp 0
|
||||||
|
|
||||||
|
digi->WriteRegister(DPP::BoardID, 0x7);
|
||||||
|
|
||||||
|
// digi->PrintSettingFromMemory();
|
||||||
|
|
||||||
Data * data = digi->GetData();
|
Data * data = digi->GetData();
|
||||||
|
|
||||||
data->ClearData();
|
data->ClearData();
|
||||||
|
|
||||||
|
data->PrintStat();
|
||||||
|
|
||||||
|
|
||||||
digi->StartACQ();
|
digi->StartACQ();
|
||||||
|
|
||||||
|
for( int i = 0; i < 10; i ++ ){
|
||||||
for( int i = 0; i < 9; i ++ ){
|
|
||||||
usleep(1000*1000);
|
usleep(1000*1000);
|
||||||
digi->ReadData();
|
digi->ReadData();
|
||||||
data->DecodeBuffer(false, 200);
|
data->DecodeBuffer(false, 0);
|
||||||
data->PrintStat();
|
data->PrintStat();
|
||||||
|
|
||||||
//data->SaveData();
|
//data->SaveData();
|
||||||
|
@ -82,8 +124,6 @@ int main(int argc, char* argv[]){
|
||||||
|
|
||||||
//dig[2]->ReadRegister(DPP::QDC::RecordLength, 0, 0, "");
|
//dig[2]->ReadRegister(DPP::QDC::RecordLength, 0, 0, "");
|
||||||
|
|
||||||
/******************
|
|
||||||
|
|
||||||
Data * data = dig[0]->GetData();
|
Data * data = dig[0]->GetData();
|
||||||
data->ClearData();
|
data->ClearData();
|
||||||
|
|
||||||
|
@ -206,10 +246,9 @@ int main(int argc, char* argv[]){
|
||||||
delete dig[i];
|
delete dig[i];
|
||||||
}
|
}
|
||||||
delete [] dig;
|
delete [] dig;
|
||||||
|
*/
|
||||||
/*********************/
|
|
||||||
|
|
||||||
/**////##################### Demo for loading and change setting without open a digitizer
|
////##################### Demo for loading and change setting without open a digitizer
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Digitizer * dig = new Digitizer();
|
Digitizer * dig = new Digitizer();
|
||||||
|
|
Loading…
Reference in New Issue
Block a user