This commit is contained in:
Ryan Tang 2023-01-13 17:35:37 -05:00
parent 82623988ab
commit 2c0dc7d625
5 changed files with 61 additions and 48 deletions

View File

@ -82,7 +82,7 @@ std::string Digitizer2Gen::ReadValue(const char * parameter, bool verbose = fals
if (ret != CAEN_FELib_Success) { if (ret != CAEN_FELib_Success) {
return ErrorMsg(__func__); return ErrorMsg(__func__);
}else{ }else{
if( verbose ) printf("%s : %s\n", parameter, retValue.c_str()); if( verbose ) printf("%-45s : %s\n", parameter, retValue);
} }
return retValue; return retValue;
} }
@ -152,6 +152,10 @@ int Digitizer2Gen::OpenDigitizer(const char * url){
printf(" ADC rate : %d Msps, ch2ns : %d ns\n", adcRate, ch2ns); printf(" ADC rate : %d Msps, ch2ns : %d ns\n", adcRate, ch2ns);
printf(" Channels : %d\n", nChannels); printf(" Channels : %d\n", nChannels);
ReadValue("/par/InputRange", true);
ReadValue("/par/InputType", true);
ReadValue("/par/Zin", true);
///SendCommand("/cmd/reset"); ///SendCommand("/cmd/reset");
return 0; return 0;
@ -218,7 +222,6 @@ void Digitizer2Gen::SetPHADataFormat(unsigned short dataFormat){
{ \"name\" : \"CHANNEL\", \"type\" : \"U8\" }, \ { \"name\" : \"CHANNEL\", \"type\" : \"U8\" }, \
{ \"name\" : \"TIMESTAMP\", \"type\" : \"U64\" }, \ { \"name\" : \"TIMESTAMP\", \"type\" : \"U64\" }, \
{ \"name\" : \"FINE_TIMESTAMP\", \"type\" : \"U16\" }, \ { \"name\" : \"FINE_TIMESTAMP\", \"type\" : \"U16\" }, \
{ \"name\" : \"TIMESTAMP_NS\", \"type\" : \"U64\" }, \
{ \"name\" : \"ENERGY\", \"type\" : \"U16\" }, \ { \"name\" : \"ENERGY\", \"type\" : \"U16\" }, \
{ \"name\" : \"ANALOG_PROBE_1\", \"type\" : \"I32\", \"dim\" : 1 }, \ { \"name\" : \"ANALOG_PROBE_1\", \"type\" : \"I32\", \"dim\" : 1 }, \
{ \"name\" : \"ANALOG_PROBE_2\", \"type\" : \"I32\", \"dim\" : 1 }, \ { \"name\" : \"ANALOG_PROBE_2\", \"type\" : \"I32\", \"dim\" : 1 }, \
@ -357,7 +360,6 @@ int Digitizer2Gen::ReadData(){
&evt->channel, &evt->channel,
&evt->timestamp, &evt->timestamp,
&evt->fine_timestamp, &evt->fine_timestamp,
&evt->timestamp_ns,
&evt->energy, &evt->energy,
evt->analog_probes[0], evt->analog_probes[0],
evt->analog_probes[1], evt->analog_probes[1],
@ -521,8 +523,21 @@ void Digitizer2Gen::SaveDataToFile(){
void Digitizer2Gen::ProgramPHA(bool testPulse){ void Digitizer2Gen::ProgramPHA(bool testPulse){
if( !isConnected ) return ; if( !isConnected ) return ;
// Channel enable // Acquistion
WriteValue("/par/StartSource" , "SWcmd | SINedge");
WriteValue("/par/TrgOutMode", "Disabled");
WriteValue("/par/GPIOMode", "Disabled");
WriteValue("/par/SyncOutMode", "Disabled");
WriteValue("/par/RunDelay", "0"); // ns, that is for sync time with multi board
WriteValue("/par/IOlevel", "NIM");
WriteValue("/par/EnStatEvents", "1");
// Channel setting
//WriteValue("/ch/0..63/par/EventTriggerSource", "GlobalTriggerSource");
WriteValue("/ch/0..63/par/EventTriggerSource", "ChSelfTrigger");
WriteValue("/ch/0..63/par/ChEnable" , "true"); WriteValue("/ch/0..63/par/ChEnable" , "true");
WriteValue("/ch/0..63/par/DCOffset" , "10"); /// 10%
WriteValue("/ch/0..63/par/WaveSaving" , "Always");
// Global trigger configuration // Global trigger configuration
if( testPulse ) { if( testPulse ) {
@ -536,13 +551,12 @@ void Digitizer2Gen::ProgramPHA(bool testPulse){
} }
// Wave configuration // Wave configuration
WriteValue("/ch/0..63/par/WaveTriggerSource" , "ChSelfTrigger"); //WriteValue("/ch/0..63/par/WaveTriggerSource" , "ChSelfTrigger"); // EventTriggerSource enought
WriteValue("/ch/0..63/par/ChRecordLengthS" , "512"); /// 4096 ns WriteValue("/ch/0..63/par/ChRecordLengthS" , "512"); /// 4096 ns
WriteValue("/ch/0..63/par/ChPreTriggerS" , "125"); /// 1000 ns WriteValue("/ch/0..63/par/ChPreTriggerS" , "125"); /// 1000 ns
WriteValue("/ch/0..63/par/WaveResolution" , "RES8"); /// 8 ns WriteValue("/ch/0..63/par/WaveResolution" , "RES8"); /// 8 ns
WriteValue("/ch/0..63/par/DCOffset" , "10"); /// 10%
WriteValue("/ch/0..63/par/WaveAnalogProbe0" , "ADCInput"); WriteValue("/ch/0..63/par/WaveAnalogProbe0" , "ADCInput");
WriteValue("/ch/0..63/par/WaveAnalogProbe1" , "EnergyFilterMinusBaseline"); WriteValue("/ch/0..63/par/WaveAnalogProbe1" , "EnergyFilterMinusBaseline");
WriteValue("/ch/0..63/par/WaveDigitalProbe0" , "Trigger"); WriteValue("/ch/0..63/par/WaveDigitalProbe0" , "Trigger");
@ -550,9 +564,6 @@ void Digitizer2Gen::ProgramPHA(bool testPulse){
WriteValue("/ch/0..63/par/WaveDigitalProbe2" , "TimeFilterArmed"); WriteValue("/ch/0..63/par/WaveDigitalProbe2" , "TimeFilterArmed");
WriteValue("/ch/0..63/par/WaveDigitalProbe3" , "EnergyFilterPeakReady"); WriteValue("/ch/0..63/par/WaveDigitalProbe3" , "EnergyFilterPeakReady");
// Event configuration
//WriteValue("/ch/0..63/par/EventTriggerSource", "GlobalTriggerSource");
WriteValue("/ch/0..63/par/EventTriggerSource", "ChSelfTrigger");
// Filter parameters // Filter parameters
WriteValue("/ch/0..63/par/TimeFilterRiseTimeS" , "10"); // 80 ns WriteValue("/ch/0..63/par/TimeFilterRiseTimeS" , "10"); // 80 ns
@ -573,15 +584,6 @@ void Digitizer2Gen::ProgramPHA(bool testPulse){
WriteValue("/ch/0..63/par/EnergyFilterLFLimitation" , "Off"); WriteValue("/ch/0..63/par/EnergyFilterLFLimitation" , "Off");
// Other Setting
WriteValue("/par/TrgOutMode", "SwTrg");
WriteValue("/par/IOlevel", "NIM");
ret = CAEN_FELib_SetValue(handle, "/par/EnStatEvents", "true");
if( ret != CAEN_FELib_Success){
ErrorMsg("Enable stats");
}
} }
void Digitizer2Gen::ReadDigitizerSettings(){ void Digitizer2Gen::ReadDigitizerSettings(){

17
Event.h
View File

@ -17,7 +17,6 @@ class Event {
uint16_t energy; // 16 bit uint16_t energy; // 16 bit
uint64_t timestamp; // 48 bit uint64_t timestamp; // 48 bit
uint16_t fine_timestamp; // 16 bit uint16_t fine_timestamp; // 16 bit
uint64_t timestamp_ns; // 51 bit fine_timestamp not included
uint16_t flags_low_priority; // 12 bit uint16_t flags_low_priority; // 12 bit
uint16_t flags_high_priority; // 8 bit uint16_t flags_high_priority; // 8 bit
size_t traceLenght; // 64 bit size_t traceLenght; // 64 bit
@ -38,6 +37,18 @@ class Event {
uint32_t n_events; uint32_t n_events;
Event(){ Event(){
Init();
}
~Event(){
ClearMemory();
}
void Init(){
channel = 0;
energy = 0;
timestamp = 0;
fine_timestamp = 0;
analog_probes[0] = NULL; analog_probes[0] = NULL;
analog_probes[1] = NULL; analog_probes[1] = NULL;
digital_probes[0] = NULL; digital_probes[0] = NULL;
@ -47,10 +58,6 @@ class Event {
data = NULL; data = NULL;
} }
~Event(){
ClearMemory();
}
void ClearMemory(){ void ClearMemory(){
if( data != NULL ) delete data; if( data != NULL ) delete data;

View File

@ -33,6 +33,9 @@ class SolReader {
void ScanNumBlock(); void ScanNumBlock();
unsigned int GetNumBlock() {return numBlock;} unsigned int GetNumBlock() {return numBlock;}
unsigned int GetTotalNumBlock() {return totNumBlock;}
unsigned int GetFilePos() {return filePos;}
unsigned int GetFileSize() {return inFileSize;}
Event * evt; Event * evt;
@ -73,7 +76,7 @@ inline void SolReader::OpenFile(std::string fileName){
inline int SolReader::ReadBlock(int opt = 0){ inline int SolReader::ReadBlock(int opt = 0){
if( inFile == NULL ) return -1; if( inFile == NULL ) return -1;
if( feof(inFile) ) return -1; if( feof(inFile) ) return -1;
if( inFileSize < filePos) return -1; if( filePos >= inFileSize) return -1;
fread(&blockStart, 2, 1, inFile); fread(&blockStart, 2, 1, inFile);
@ -173,6 +176,8 @@ void SolReader::ScanNumBlock(){
if( inFile == NULL ) return; if( inFile == NULL ) return;
if( feof(inFile) ) return; if( feof(inFile) ) return;
numBlock = 0;
while( ReadBlock(1) == 0){ while( ReadBlock(1) == 0){
//printf("%u, traceLen %lu, %u/%u\n", numBlock, evt->traceLenght, filePos, inFileSize); //printf("%u, traceLen %lu, %u/%u\n", numBlock, evt->traceLenght, filePos, inFileSize);
} }

View File

@ -5,14 +5,18 @@ void script(){
SolReader * reader = new SolReader("haha_000.sol"); SolReader * reader = new SolReader("haha_000.sol");
Event * evt = reader->evt; Event * evt = reader->evt;
printf("----------file size: %u Byte\n", reader->GetFileSize());
reader->ScanNumBlock(); reader->ScanNumBlock();
for( int i = 0; i < 2; i++){ for( int i = 0; i < reader->GetTotalNumBlock() ; i++){
printf("########### nBlock : %u\n", reader->GetNumBlock()); printf("########################## nBlock : %u, %u/%u\n", reader->GetNumBlock(),
reader->GetFilePos(),
reader->GetFileSize());
reader->ReadBlock(); reader->ReadBlock();
evt->PrintAll(); evt->PrintAll();
reader->evt->PrintAllTrace(); //evt->PrintAllTrace();
} }

View File

@ -49,7 +49,7 @@ int main(int argc, char* argv[]){
printf("%s\n", digi->GetPath(parHandle).c_str()); printf("%s\n", digi->GetPath(parHandle).c_str());
*/ */
//digi->ReadDigitizerSettings(); digi->ReadDigitizerSettings();
digi->SetPHADataFormat(0); digi->SetPHADataFormat(0);
@ -60,37 +60,31 @@ int main(int argc, char* argv[]){
digi->StartACQ(); digi->StartACQ();
timespec t0, t1; timespec t0, t1;
clock_gettime(CLOCK_REALTIME, &t0); clock_gettime(CLOCK_REALTIME, &t0);
for( int i = 0; i < 20; i++){
usleep(100000); for( int i = 0; i < 30; i++){
//usleep(100000);
int ret = digi->ReadData(); int ret = digi->ReadData();
//digi->ReadValue("/ch/4/par/SelfTrgRate", true);
//if( i% 2 == 0 ) printf("0x%X \n", atoi(digi->ReadValue("/par/AcquisitionStatus").c_str()) & 0x3F ); //if( i% 2 == 0 ) printf("0x%X \n", atoi(digi->ReadValue("/par/AcquisitionStatus").c_str()) & 0x3F );
if( ret == CAEN_FELib_Success){ if( ret == CAEN_FELib_Success){
//digi->evt.PrintAll();
//digi->evt.PrintTrace();
//printf("0x%016lX \n", *(digi->evt.GetWord1()));
//printf("0x%016lX \n", *(digi->evt.GetWord2()));
//printf("0x%016lX \n", *(digi->evt.GetWord3()));
//printf("0x%016lX \n", *(digi->evt.GetWord4()));
digi->SaveDataToFile(); digi->SaveDataToFile();
if( digi->evt->channel == 63 ) { //if( digi->evt->channel == 63 ) {
//if( i % 10 == 0 ) { //if( i % 63 == 0 ) {
clock_gettime(CLOCK_REALTIME, &t1); clock_gettime(CLOCK_REALTIME, &t1);
printf("%5d | t1-t0 : %10ld\n", i, t1.tv_nsec-t0.tv_nsec); printf("%5d | t1-t0 : %10ld\n", i, t1.tv_nsec-t0.tv_nsec);
t0 = t1; t0 = t1;
//digi->ReadStat(); // //digi->ReadStat();
//digi->PrintStat(); // //digi->PrintStat();
//}
}
}else{ }else{
printf("something wrong when ReadData() | ret = %d \n", ret); printf("something wrong when ReadData() | ret = %d \n", ret);
digi->ErrorMsg("ReadData()"); digi->ErrorMsg("ReadData()");
@ -99,7 +93,8 @@ int main(int argc, char* argv[]){
} }
digi->StopACQ(); digi->StopACQ();
//digi->ReadStat();
digi->ReadStat();
digi->PrintStat(); digi->PrintStat();