small modification of Hit.h and SolReader.h

This commit is contained in:
Ryan Tang 2024-04-05 12:17:13 -04:00
parent b673dcd700
commit 79a8fc548b
2 changed files with 37 additions and 18 deletions

View File

@ -31,7 +31,7 @@ class SolReader {
~SolReader();
void OpenFile(std::string fileName);
int ReadNextBlock(int isSkip = 0); // opt = 0, noraml, 1, fast
int ReadNextBlock(bool fastRead = false, bool debug = false);
int ReadBlock(unsigned int index, bool verbose = false);
void ScanNumBlock();
@ -104,7 +104,7 @@ inline int SolReader::ReadBlock(unsigned int index, bool verbose){
return ReadNextBlock();
}
inline int SolReader::ReadNextBlock(int isSkip){
inline int SolReader::ReadNextBlock(bool fastRead, bool debug){
if( inFile == NULL ) return -1;
if( feof(inFile) ) return -1;
if( filePos >= inFileSize) return -1;
@ -122,8 +122,13 @@ inline int SolReader::ReadNextBlock(int isSkip){
hit->dataType = blockStartIdentifier & 0xF;
hit->DPPType = ((blockStartIdentifier >> 4) & 0xF) == 0 ? DPPType::PHA : DPPType::PSD;
if( debug ) {
printf(" DPP Type : %s \n", hit->DPPType.c_str());
printf(" Data Type : %d \n", hit->dataType);
}
if( hit->dataType == DataFormat::ALL){
if( isSkip == 0 ){
if( !fastRead ){
fread(&hit->channel, 1, 1, inFile);
fread(&hit->energy, 2, 1, inFile);
if( hit->DPPType == DPPType::PSD ) fread(&hit->energy_short, 2, 1, inFile);
@ -141,7 +146,7 @@ inline int SolReader::ReadNextBlock(int isSkip){
fseek(inFile, hit->DPPType == DPPType::PHA ? 31 : 33, SEEK_CUR);
}
fread(&hit->traceLenght, 8, 1, inFile);
if( isSkip == 0){
if( !fastRead ){
fread(hit->analog_probes_type, 2, 1, inFile);
fread(hit->digital_probes_type, 4, 1, inFile);
fread(hit->analog_probes[0], hit->traceLenght*4, 1, inFile);
@ -155,7 +160,7 @@ inline int SolReader::ReadNextBlock(int isSkip){
}
}else if( hit->dataType == DataFormat::OneTrace){
if( isSkip == 0 ){
if( !fastRead ){
fread(&hit->channel, 1, 1, inFile);
fread(&hit->energy, 2, 1, inFile);
if( hit->DPPType == DPPType::PSD ) fread(&hit->energy_short, 2, 1, inFile);
@ -167,7 +172,7 @@ inline int SolReader::ReadNextBlock(int isSkip){
fseek(inFile, hit->DPPType == DPPType::PHA ? 14 : 16, SEEK_CUR);
}
fread(&hit->traceLenght, 8, 1, inFile);
if( isSkip == 0){
if( !fastRead ){
fread(&hit->analog_probes_type[0], 1, 1, inFile);
fread(hit->analog_probes[0], hit->traceLenght*4, 1, inFile);
}else{
@ -175,7 +180,7 @@ inline int SolReader::ReadNextBlock(int isSkip){
}
}else if( hit->dataType == DataFormat::NoTrace){
if( isSkip == 0 ){
if( !fastRead ){
fread(&hit->channel, 1, 1, inFile);
fread(&hit->energy, 2, 1, inFile);
if( hit->DPPType == DPPType::PSD ) fread(&hit->energy_short, 2, 1, inFile);
@ -188,7 +193,7 @@ inline int SolReader::ReadNextBlock(int isSkip){
}
}else if( hit->dataType == DataFormat::MiniWithFineTime){
if( isSkip == 0 ){
if( !fastRead ){
fread(&hit->channel, 1, 1, inFile);
fread(&hit->energy, 2, 1, inFile);
if( hit->DPPType == DPPType::PSD ) fread(&hit->energy_short, 2, 1, inFile);
@ -199,7 +204,7 @@ inline int SolReader::ReadNextBlock(int isSkip){
}
}else if( hit->dataType == DataFormat::Minimum){
if( isSkip == 0 ){
if( !fastRead ){
fread(&hit->channel, 1, 1, inFile);
fread(&hit->energy, 2, 1, inFile);
if( hit->DPPType == DPPType::PSD ) fread(&hit->energy_short, 2, 1, inFile);
@ -210,15 +215,21 @@ inline int SolReader::ReadNextBlock(int isSkip){
}else if( hit->dataType == DataFormat::Raw){
fread(&hit->dataSize, 8, 1, inFile);
if( isSkip == 0){
if( !fastRead ){
fread(hit->data, hit->dataSize, 1, inFile);
}else{
fseek(inFile, hit->dataSize, SEEK_CUR);
}
}
numBlock ++;
filePos = ftell(inFile);
if( debug ) {
hit->PrintAll();
printf(" file Pos : %u/%u\n", filePos, inFileSize);
}
return 0;
}

24
Hit.h
View File

@ -271,14 +271,22 @@ class Hit {
}
}
void PrintAllTrace(){
for(unsigned short i = 0; i < (unsigned short)traceLenght; i++){
printf("%4d| %6d %6d %1d %1d %1d %1d\n", i, analog_probes[0][i],
analog_probes[1][i],
digital_probes[0][i],
digital_probes[1][i],
digital_probes[2][i],
digital_probes[3][i]);
void PrintTrace(){
printf("---------- trace length : %zu\n", traceLenght);
if( dataType == DataFormat::OneTrace ){
for(unsigned short i = 0; i < (unsigned short)traceLenght; i++){
printf("%4d| %6d\n", i, analog_probes[0][i]);
}
}
if( dataType == DataFormat::ALL){
for(unsigned short i = 0; i < (unsigned short)traceLenght; i++){
printf("%4d| %6d %6d %1d %1d %1d %1d\n", i, analog_probes[0][i],
analog_probes[1][i],
digital_probes[0][i],
digital_probes[1][i],
digital_probes[2][i],
digital_probes[3][i]);
}
}
}