snapshot
This commit is contained in:
parent
82623988ab
commit
2c0dc7d625
|
@ -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
17
Event.h
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
10
script.C
10
script.C
|
@ -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();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
31
test.cpp
31
test.cpp
|
@ -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();
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user