added min+fine_timestamo data format
This commit is contained in:
parent
876ae26450
commit
937bed699a
|
@ -462,11 +462,21 @@ void Digitizer2Gen::SetDataFormat(unsigned short dataFormat){
|
||||||
]");
|
]");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( dataFormat == DataFormat::MiniWithFineTime ){
|
||||||
|
ret = CAEN_FELib_SetReadDataFormat(ep_handle,
|
||||||
|
"[ \
|
||||||
|
{ \"name\" : \"CHANNEL\", \"type\" : \"U8\" }, \
|
||||||
|
{ \"name\" : \"TIMESTAMP\", \"type\" : \"U64\" }, \
|
||||||
|
{ \"name\" : \"ENERGY\", \"type\" : \"U16\" } \
|
||||||
|
]");
|
||||||
|
}
|
||||||
|
|
||||||
if( dataFormat == DataFormat::Minimum ){
|
if( dataFormat == DataFormat::Minimum ){
|
||||||
ret = CAEN_FELib_SetReadDataFormat(ep_handle,
|
ret = CAEN_FELib_SetReadDataFormat(ep_handle,
|
||||||
"[ \
|
"[ \
|
||||||
{ \"name\" : \"CHANNEL\", \"type\" : \"U8\" }, \
|
{ \"name\" : \"CHANNEL\", \"type\" : \"U8\" }, \
|
||||||
{ \"name\" : \"TIMESTAMP\", \"type\" : \"U64\" }, \
|
{ \"name\" : \"TIMESTAMP\", \"type\" : \"U64\" }, \
|
||||||
|
{ \"name\" : \"FINE_TIMESTAMP\", \"type\" : \"U16\" }, \
|
||||||
{ \"name\" : \"ENERGY\", \"type\" : \"U16\" } \
|
{ \"name\" : \"ENERGY\", \"type\" : \"U16\" } \
|
||||||
]");
|
]");
|
||||||
}
|
}
|
||||||
|
@ -547,6 +557,17 @@ void Digitizer2Gen::SetDataFormat(unsigned short dataFormat){
|
||||||
]");
|
]");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( dataFormat == DataFormat::MiniWithFineTime ){
|
||||||
|
ret = CAEN_FELib_SetReadDataFormat(ep_handle,
|
||||||
|
"[ \
|
||||||
|
{ \"name\" : \"CHANNEL\", \"type\" : \"U8\" }, \
|
||||||
|
{ \"name\" : \"TIMESTAMP\", \"type\" : \"U64\" }, \
|
||||||
|
{ \"name\" : \"FINE_TIMESTAMP\", \"type\" : \"U16\" }, \
|
||||||
|
{ \"name\" : \"ENERGY\", \"type\" : \"U16\" }, \
|
||||||
|
{ \"name\" : \"ENERGY_SHORT\", \"type\" : \"U16\" } \
|
||||||
|
]");
|
||||||
|
}
|
||||||
|
|
||||||
if( dataFormat == DataFormat::Minimum ){
|
if( dataFormat == DataFormat::Minimum ){
|
||||||
ret = CAEN_FELib_SetReadDataFormat(ep_handle,
|
ret = CAEN_FELib_SetReadDataFormat(ep_handle,
|
||||||
"[ \
|
"[ \
|
||||||
|
@ -771,6 +792,26 @@ int Digitizer2Gen::ReadData(){
|
||||||
|
|
||||||
hit->isTraceAllZero = true;
|
hit->isTraceAllZero = true;
|
||||||
|
|
||||||
|
}else if( hit->dataType == DataFormat::MiniWithFineTime){
|
||||||
|
if( FPGAType == DPPType::PHA ){
|
||||||
|
ret = CAEN_FELib_ReadData(ep_handle, 100,
|
||||||
|
&hit->channel,
|
||||||
|
&hit->timestamp,
|
||||||
|
&hit->fine_timestamp,
|
||||||
|
&hit->energy
|
||||||
|
);
|
||||||
|
}else{
|
||||||
|
ret = CAEN_FELib_ReadData(ep_handle, 100,
|
||||||
|
&hit->channel,
|
||||||
|
&hit->timestamp,
|
||||||
|
&hit->fine_timestamp,
|
||||||
|
&hit->energy,
|
||||||
|
&hit->energy_short
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
hit->isTraceAllZero = true;
|
||||||
|
|
||||||
}else if( hit->dataType == DataFormat::Minimum){
|
}else if( hit->dataType == DataFormat::Minimum){
|
||||||
if( FPGAType == DPPType::PHA ){
|
if( FPGAType == DPPType::PHA ){
|
||||||
ret = CAEN_FELib_ReadData(ep_handle, 100,
|
ret = CAEN_FELib_ReadData(ep_handle, 100,
|
||||||
|
@ -788,6 +829,7 @@ int Digitizer2Gen::ReadData(){
|
||||||
}
|
}
|
||||||
|
|
||||||
hit->isTraceAllZero = true;
|
hit->isTraceAllZero = true;
|
||||||
|
|
||||||
}else if( hit->dataType == DataFormat::Raw){
|
}else if( hit->dataType == DataFormat::Raw){
|
||||||
ret = CAEN_FELib_ReadData(ep_handle, 100, hit->data, &hit->dataSize, &hit->n_events );
|
ret = CAEN_FELib_ReadData(ep_handle, 100, hit->data, &hit->dataSize, &hit->n_events );
|
||||||
//printf("data size: %lu byte\n", evt.dataSize);
|
//printf("data size: %lu byte\n", evt.dataSize);
|
||||||
|
@ -858,6 +900,7 @@ void Digitizer2Gen::SaveDataToFile(){
|
||||||
fwrite(hit->digital_probes[1], hit->traceLenght, 1, outFile);
|
fwrite(hit->digital_probes[1], hit->traceLenght, 1, outFile);
|
||||||
fwrite(hit->digital_probes[2], hit->traceLenght, 1, outFile);
|
fwrite(hit->digital_probes[2], hit->traceLenght, 1, outFile);
|
||||||
fwrite(hit->digital_probes[3], hit->traceLenght, 1, outFile);
|
fwrite(hit->digital_probes[3], hit->traceLenght, 1, outFile);
|
||||||
|
|
||||||
}else if( hit->dataType == DataFormat::OneTrace){
|
}else if( hit->dataType == DataFormat::OneTrace){
|
||||||
fwrite(&dataStartIndetifier, 2, 1, outFile);
|
fwrite(&dataStartIndetifier, 2, 1, outFile);
|
||||||
fwrite(&hit->channel, 1, 1, outFile);
|
fwrite(&hit->channel, 1, 1, outFile);
|
||||||
|
@ -870,6 +913,7 @@ void Digitizer2Gen::SaveDataToFile(){
|
||||||
fwrite(&hit->traceLenght, 8, 1, outFile);
|
fwrite(&hit->traceLenght, 8, 1, outFile);
|
||||||
fwrite(&hit->analog_probes_type[0], 1, 1, outFile);
|
fwrite(&hit->analog_probes_type[0], 1, 1, outFile);
|
||||||
fwrite(hit->analog_probes[0], hit->traceLenght*4, 1, outFile);
|
fwrite(hit->analog_probes[0], hit->traceLenght*4, 1, outFile);
|
||||||
|
|
||||||
}else if( hit->dataType == DataFormat::NoTrace ){
|
}else if( hit->dataType == DataFormat::NoTrace ){
|
||||||
fwrite(&dataStartIndetifier, 2, 1, outFile);
|
fwrite(&dataStartIndetifier, 2, 1, outFile);
|
||||||
fwrite(&hit->channel, 1, 1, outFile);
|
fwrite(&hit->channel, 1, 1, outFile);
|
||||||
|
@ -879,12 +923,22 @@ void Digitizer2Gen::SaveDataToFile(){
|
||||||
fwrite(&hit->fine_timestamp, 2, 1, outFile);
|
fwrite(&hit->fine_timestamp, 2, 1, outFile);
|
||||||
fwrite(&hit->flags_high_priority, 1, 1, outFile);
|
fwrite(&hit->flags_high_priority, 1, 1, outFile);
|
||||||
fwrite(&hit->flags_low_priority, 2, 1, outFile);
|
fwrite(&hit->flags_low_priority, 2, 1, outFile);
|
||||||
|
|
||||||
|
}else if( hit->dataType == DataFormat::MiniWithFineTime ){
|
||||||
|
fwrite(&dataStartIndetifier, 2, 1, outFile);
|
||||||
|
fwrite(&hit->channel, 1, 1, outFile);
|
||||||
|
fwrite(&hit->energy, 2, 1, outFile);
|
||||||
|
if( FPGAType == DPPType::PSD ) fwrite(&hit->energy_short, 2, 1, outFile);
|
||||||
|
fwrite(&hit->timestamp, 6, 1, outFile);
|
||||||
|
fwrite(&hit->fine_timestamp, 2, 1, outFile);
|
||||||
|
|
||||||
}else if( hit->dataType == DataFormat::Minimum ){
|
}else if( hit->dataType == DataFormat::Minimum ){
|
||||||
fwrite(&dataStartIndetifier, 2, 1, outFile);
|
fwrite(&dataStartIndetifier, 2, 1, outFile);
|
||||||
fwrite(&hit->channel, 1, 1, outFile);
|
fwrite(&hit->channel, 1, 1, outFile);
|
||||||
fwrite(&hit->energy, 2, 1, outFile);
|
fwrite(&hit->energy, 2, 1, outFile);
|
||||||
if( FPGAType == DPPType::PSD ) fwrite(&hit->energy_short, 2, 1, outFile);
|
if( FPGAType == DPPType::PSD ) fwrite(&hit->energy_short, 2, 1, outFile);
|
||||||
fwrite(&hit->timestamp, 6, 1, outFile);
|
fwrite(&hit->timestamp, 6, 1, outFile);
|
||||||
|
|
||||||
}else if( hit->dataType == DataFormat::Raw){
|
}else if( hit->dataType == DataFormat::Raw){
|
||||||
fwrite(&dataStartIndetifier, 2, 1, outFile);
|
fwrite(&dataStartIndetifier, 2, 1, outFile);
|
||||||
fwrite(&hit->dataSize, 8, 1, outFile);
|
fwrite(&hit->dataSize, 8, 1, outFile);
|
||||||
|
|
1
Hit.h
1
Hit.h
|
@ -241,6 +241,7 @@ class Hit {
|
||||||
case DataFormat::ALL : printf("============= Type : ALL\n"); break;
|
case DataFormat::ALL : printf("============= Type : ALL\n"); break;
|
||||||
case DataFormat::OneTrace : printf("============= Type : OneTrace\n"); break;
|
case DataFormat::OneTrace : printf("============= Type : OneTrace\n"); break;
|
||||||
case DataFormat::NoTrace : printf("============= Type : NoTrace\n"); break;
|
case DataFormat::NoTrace : printf("============= Type : NoTrace\n"); break;
|
||||||
|
case DataFormat::MiniWithFineTime : printf("============= Type : Min with FineTimestamp\n"); break;
|
||||||
case DataFormat::Minimum : printf("============= Type : Minimum\n"); break;
|
case DataFormat::Minimum : printf("============= Type : Minimum\n"); break;
|
||||||
case DataFormat::Raw : printf("============= Type : Raw\n"); return; break;
|
case DataFormat::Raw : printf("============= Type : Raw\n"); return; break;
|
||||||
default : return;
|
default : return;
|
||||||
|
|
51
SolReader.h
51
SolReader.h
|
@ -31,15 +31,17 @@ class SolReader {
|
||||||
~SolReader();
|
~SolReader();
|
||||||
|
|
||||||
void OpenFile(std::string fileName);
|
void OpenFile(std::string fileName);
|
||||||
int ReadNextBlock(int opt = 0); // opt = 0, noraml, 1, fast
|
int ReadNextBlock(int isSkip = 0); // opt = 0, noraml, 1, fast
|
||||||
int ReadBlock(unsigned int index);
|
int ReadBlock(unsigned int index, bool verbose = false);
|
||||||
|
|
||||||
void ScanNumBlock();
|
void ScanNumBlock();
|
||||||
|
|
||||||
unsigned int GetNumBlock() {return numBlock;}
|
bool IsEndOfFile() const {return (filePos >= inFileSize ? true : false);}
|
||||||
unsigned int GetTotalNumBlock() {return totNumBlock;}
|
unsigned int GetBlockID() const {return numBlock - 1;}
|
||||||
unsigned int GetFilePos() {return filePos;}
|
unsigned int GetNumBlock() const {return numBlock;}
|
||||||
unsigned int GetFileSize() {return inFileSize;}
|
unsigned int GetTotalNumBlock() const {return totNumBlock;}
|
||||||
|
unsigned int GetFilePos() const {return filePos;}
|
||||||
|
unsigned int GetFileSize() const {return inFileSize;}
|
||||||
|
|
||||||
void RewindFile();
|
void RewindFile();
|
||||||
|
|
||||||
|
@ -86,21 +88,23 @@ inline void SolReader::OpenFile(std::string fileName){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int SolReader::ReadBlock(unsigned int index){
|
inline int SolReader::ReadBlock(unsigned int index, bool verbose){
|
||||||
if( isScanned == false) return -1;
|
if( isScanned == false) return -1;
|
||||||
if( index >= totNumBlock )return -1;
|
if( index >= totNumBlock )return -1;
|
||||||
fseek(inFile, 0L, SEEK_SET);
|
fseek(inFile, 0L, SEEK_SET);
|
||||||
|
|
||||||
printf("-----------%u, %u\n", index, blockPos[index]);
|
if( verbose ) printf("Block index: %u, File Pos: %u byte\n", index, blockPos[index]);
|
||||||
|
|
||||||
fseek(inFile, blockPos[index], SEEK_CUR);
|
fseek(inFile, blockPos[index], SEEK_CUR);
|
||||||
|
|
||||||
|
filePos = blockPos[index];
|
||||||
|
|
||||||
numBlock = index;
|
numBlock = index;
|
||||||
|
|
||||||
return ReadNextBlock();
|
return ReadNextBlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int SolReader::ReadNextBlock(int opt){
|
inline int SolReader::ReadNextBlock(int isSkip){
|
||||||
if( inFile == NULL ) return -1;
|
if( inFile == NULL ) return -1;
|
||||||
if( feof(inFile) ) return -1;
|
if( feof(inFile) ) return -1;
|
||||||
if( filePos >= inFileSize) return -1;
|
if( filePos >= inFileSize) return -1;
|
||||||
|
@ -119,7 +123,7 @@ inline int SolReader::ReadNextBlock(int opt){
|
||||||
hit->DPPType = ((blockStartIdentifier >> 4) & 0xF) == 0 ? DPPType::PHA : DPPType::PSD;
|
hit->DPPType = ((blockStartIdentifier >> 4) & 0xF) == 0 ? DPPType::PHA : DPPType::PSD;
|
||||||
|
|
||||||
if( hit->dataType == DataFormat::ALL){
|
if( hit->dataType == DataFormat::ALL){
|
||||||
if( opt == 0 ){
|
if( isSkip == 0 ){
|
||||||
fread(&hit->channel, 1, 1, inFile);
|
fread(&hit->channel, 1, 1, inFile);
|
||||||
fread(&hit->energy, 2, 1, inFile);
|
fread(&hit->energy, 2, 1, inFile);
|
||||||
if( hit->DPPType == DPPType::PSD ) fread(&hit->energy_short, 2, 1, inFile);
|
if( hit->DPPType == DPPType::PSD ) fread(&hit->energy_short, 2, 1, inFile);
|
||||||
|
@ -137,7 +141,7 @@ inline int SolReader::ReadNextBlock(int opt){
|
||||||
fseek(inFile, hit->DPPType == DPPType::PHA ? 31 : 33, SEEK_CUR);
|
fseek(inFile, hit->DPPType == DPPType::PHA ? 31 : 33, SEEK_CUR);
|
||||||
}
|
}
|
||||||
fread(&hit->traceLenght, 8, 1, inFile);
|
fread(&hit->traceLenght, 8, 1, inFile);
|
||||||
if( opt == 0){
|
if( isSkip == 0){
|
||||||
fread(hit->analog_probes_type, 2, 1, inFile);
|
fread(hit->analog_probes_type, 2, 1, inFile);
|
||||||
fread(hit->digital_probes_type, 4, 1, inFile);
|
fread(hit->digital_probes_type, 4, 1, inFile);
|
||||||
fread(hit->analog_probes[0], hit->traceLenght*4, 1, inFile);
|
fread(hit->analog_probes[0], hit->traceLenght*4, 1, inFile);
|
||||||
|
@ -149,8 +153,9 @@ inline int SolReader::ReadNextBlock(int opt){
|
||||||
}else{
|
}else{
|
||||||
fseek(inFile, 6 + hit->traceLenght*(12), SEEK_CUR);
|
fseek(inFile, 6 + hit->traceLenght*(12), SEEK_CUR);
|
||||||
}
|
}
|
||||||
|
|
||||||
}else if( hit->dataType == DataFormat::OneTrace){
|
}else if( hit->dataType == DataFormat::OneTrace){
|
||||||
if( opt == 0 ){
|
if( isSkip == 0 ){
|
||||||
fread(&hit->channel, 1, 1, inFile);
|
fread(&hit->channel, 1, 1, inFile);
|
||||||
fread(&hit->energy, 2, 1, inFile);
|
fread(&hit->energy, 2, 1, inFile);
|
||||||
if( hit->DPPType == DPPType::PSD ) fread(&hit->energy_short, 2, 1, inFile);
|
if( hit->DPPType == DPPType::PSD ) fread(&hit->energy_short, 2, 1, inFile);
|
||||||
|
@ -162,14 +167,15 @@ inline int SolReader::ReadNextBlock(int opt){
|
||||||
fseek(inFile, hit->DPPType == DPPType::PHA ? 14 : 16, SEEK_CUR);
|
fseek(inFile, hit->DPPType == DPPType::PHA ? 14 : 16, SEEK_CUR);
|
||||||
}
|
}
|
||||||
fread(&hit->traceLenght, 8, 1, inFile);
|
fread(&hit->traceLenght, 8, 1, inFile);
|
||||||
if( opt == 0){
|
if( isSkip == 0){
|
||||||
fread(&hit->analog_probes_type[0], 1, 1, inFile);
|
fread(&hit->analog_probes_type[0], 1, 1, inFile);
|
||||||
fread(hit->analog_probes[0], hit->traceLenght*4, 1, inFile);
|
fread(hit->analog_probes[0], hit->traceLenght*4, 1, inFile);
|
||||||
}else{
|
}else{
|
||||||
fseek(inFile, 1 + hit->traceLenght*4, SEEK_CUR);
|
fseek(inFile, 1 + hit->traceLenght*4, SEEK_CUR);
|
||||||
}
|
}
|
||||||
|
|
||||||
}else if( hit->dataType == DataFormat::NoTrace){
|
}else if( hit->dataType == DataFormat::NoTrace){
|
||||||
if( opt == 0 ){
|
if( isSkip == 0 ){
|
||||||
fread(&hit->channel, 1, 1, inFile);
|
fread(&hit->channel, 1, 1, inFile);
|
||||||
fread(&hit->energy, 2, 1, inFile);
|
fread(&hit->energy, 2, 1, inFile);
|
||||||
if( hit->DPPType == DPPType::PSD ) fread(&hit->energy_short, 2, 1, inFile);
|
if( hit->DPPType == DPPType::PSD ) fread(&hit->energy_short, 2, 1, inFile);
|
||||||
|
@ -180,8 +186,20 @@ inline int SolReader::ReadNextBlock(int opt){
|
||||||
}else{
|
}else{
|
||||||
fseek(inFile, hit->DPPType == DPPType::PHA ? 14 : 16, SEEK_CUR);
|
fseek(inFile, hit->DPPType == DPPType::PHA ? 14 : 16, SEEK_CUR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}else if( hit->dataType == DataFormat::MiniWithFineTime){
|
||||||
|
if( isSkip == 0 ){
|
||||||
|
fread(&hit->channel, 1, 1, inFile);
|
||||||
|
fread(&hit->energy, 2, 1, inFile);
|
||||||
|
if( hit->DPPType == DPPType::PSD ) fread(&hit->energy_short, 2, 1, inFile);
|
||||||
|
fread(&hit->timestamp, 6, 1, inFile);
|
||||||
|
fread(&hit->fine_timestamp, 2, 1, inFile);
|
||||||
|
}else{
|
||||||
|
fseek(inFile, hit->DPPType == DPPType::PHA ? 11 : 13, SEEK_CUR);
|
||||||
|
}
|
||||||
|
|
||||||
}else if( hit->dataType == DataFormat::Minimum){
|
}else if( hit->dataType == DataFormat::Minimum){
|
||||||
if( opt == 0 ){
|
if( isSkip == 0 ){
|
||||||
fread(&hit->channel, 1, 1, inFile);
|
fread(&hit->channel, 1, 1, inFile);
|
||||||
fread(&hit->energy, 2, 1, inFile);
|
fread(&hit->energy, 2, 1, inFile);
|
||||||
if( hit->DPPType == DPPType::PSD ) fread(&hit->energy_short, 2, 1, inFile);
|
if( hit->DPPType == DPPType::PSD ) fread(&hit->energy_short, 2, 1, inFile);
|
||||||
|
@ -189,9 +207,10 @@ inline int SolReader::ReadNextBlock(int opt){
|
||||||
}else{
|
}else{
|
||||||
fseek(inFile, hit->DPPType == DPPType::PHA ? 9 : 11, SEEK_CUR);
|
fseek(inFile, hit->DPPType == DPPType::PHA ? 9 : 11, SEEK_CUR);
|
||||||
}
|
}
|
||||||
|
|
||||||
}else if( hit->dataType == DataFormat::Raw){
|
}else if( hit->dataType == DataFormat::Raw){
|
||||||
fread(&hit->dataSize, 8, 1, inFile);
|
fread(&hit->dataSize, 8, 1, inFile);
|
||||||
if( opt == 0){
|
if( isSkip == 0){
|
||||||
fread(hit->data, hit->dataSize, 1, inFile);
|
fread(hit->data, hit->dataSize, 1, inFile);
|
||||||
}else{
|
}else{
|
||||||
fseek(inFile, hit->dataSize, SEEK_CUR);
|
fseek(inFile, hit->dataSize, SEEK_CUR);
|
||||||
|
|
|
@ -198,10 +198,11 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent){
|
||||||
cbAutoRun->setEnabled(false);
|
cbAutoRun->setEnabled(false);
|
||||||
|
|
||||||
cbDataFormat = new QComboBox(this);
|
cbDataFormat = new QComboBox(this);
|
||||||
cbDataFormat->addItem("Everything", 0);
|
cbDataFormat->addItem("Everything", DataFormat::ALL);
|
||||||
cbDataFormat->addItem("1 trace", 1);
|
cbDataFormat->addItem("1 trace", DataFormat::OneTrace);
|
||||||
cbDataFormat->addItem("No trace", 2);
|
cbDataFormat->addItem("No trace", DataFormat::NoTrace);
|
||||||
cbDataFormat->addItem("Minimum", 3);
|
cbDataFormat->addItem("Minimum", DataFormat::Minimum);
|
||||||
|
cbDataFormat->addItem("Min + fineTimestamp", DataFormat::MiniWithFineTime);
|
||||||
cbDataFormat->setCurrentIndex(3);
|
cbDataFormat->setCurrentIndex(3);
|
||||||
cbDataFormat->setEnabled(false);
|
cbDataFormat->setEnabled(false);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user