EventBuilder2 can accept *.fsu.ts files
This commit is contained in:
parent
6da09f6232
commit
bfd5f38def
|
@ -29,7 +29,7 @@ struct FileInfo {
|
||||||
void CalOrder(){ ID = ORDERSHIFT * SN + order; }
|
void CalOrder(){ ID = ORDERSHIFT * SN + order; }
|
||||||
|
|
||||||
void Print(){
|
void Print(){
|
||||||
printf(" %10lu | %3d | %50s | %2d | %6lu | %u Bytes = %.2f MB\n",
|
printf(" %10lu | %3d | %50s | %2d | %6lu | %10u Bytes = %.2f MB\n",
|
||||||
ID, DPPType, fileName.c_str(), tick2ns, hitCount, fileSize, fileSize/1024./1024.);
|
ID, DPPType, fileName.c_str(), tick2ns, hitCount, fileSize, fileSize/1024./1024.);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -106,48 +106,82 @@ int main(int argc, char **argv) {
|
||||||
printf("===================================== Load the files\n");
|
printf("===================================== Load the files\n");
|
||||||
|
|
||||||
//check if all input files is ts file;
|
//check if all input files is ts file;
|
||||||
// bool isTSFiles = false;
|
bool isTSFiles = false;
|
||||||
// int count = 0;
|
int count = 0;
|
||||||
// for( int i = 0; i < nFile; i++){
|
for( int i = 0; i < nFile; i++){
|
||||||
// FILE * temp = fopen(inFileName[i].Data(), "r");
|
FILE * temp = fopen(inFileName[i].Data(), "r");
|
||||||
// uint32_t header;
|
uint32_t header;
|
||||||
// size_t dummy = fread(&header, 4, 1, temp);
|
fread(&header, 4, 1, temp);
|
||||||
// if( (header >> 24) != 0xAA ){ count++; }
|
if( (header >> 24) == 0xAA ) count++;
|
||||||
// }
|
}
|
||||||
// if( count == nFile ) isTSFiles = true;
|
if( count == nFile ) isTSFiles = true;
|
||||||
|
|
||||||
///============= sorting file by the serial number & order
|
|
||||||
std::vector<FileInfo> fileInfo;
|
std::vector<FileInfo> fileInfo;
|
||||||
|
|
||||||
FSUReader ** reader = new FSUReader*[nFile];
|
if( !isTSFiles ){
|
||||||
// file name format is expName_runID_SN_DPP_tick2ns_order.fsu
|
printf("######### All files are not time-sorted files\n");
|
||||||
for( int i = 0; i < nFile; i++){
|
|
||||||
printf("Processing %s (%d/%d) ..... \n", inFileName[i].Data(), i+1, nFile);
|
|
||||||
reader[i] = new FSUReader(inFileName[i].Data(), 1, false);
|
|
||||||
if( !reader[i]->isOpen() ) continue;
|
|
||||||
|
|
||||||
reader[i]->ScanNumBlock(false, 2);
|
///============= sorting file by the serial number & order
|
||||||
|
FSUReader ** reader = new FSUReader*[nFile];
|
||||||
|
// file name format is expName_runID_SN_DPP_tick2ns_order.fsu
|
||||||
|
for( int i = 0; i < nFile; i++){
|
||||||
|
printf("Processing %s (%d/%d) ..... \n", inFileName[i].Data(), i+1, nFile);
|
||||||
|
reader[i] = new FSUReader(inFileName[i].Data(), 1, false);
|
||||||
|
if( !reader[i]->isOpen() ) continue;
|
||||||
|
|
||||||
|
reader[i]->ScanNumBlock(false, 2);
|
||||||
|
|
||||||
|
std::string outFileName = reader[i]->SaveHit2NewFile(tempFolder);
|
||||||
|
|
||||||
|
FileInfo tempInfo;
|
||||||
|
tempInfo.fileName = outFileName;
|
||||||
|
tempInfo.readerID = i;
|
||||||
|
tempInfo.SN = reader[i]->GetSN();
|
||||||
|
tempInfo.hitCount = reader[i]->GetHitCount();
|
||||||
|
tempInfo.fileSize = reader[i]->GetTSFileSize();
|
||||||
|
tempInfo.tick2ns = reader[i]->GetTick2ns();
|
||||||
|
tempInfo.DPPType = reader[i]->GetDPPType();
|
||||||
|
tempInfo.order = reader[i]->GetFileOrder();
|
||||||
|
tempInfo.CalOrder();
|
||||||
|
|
||||||
|
tempInfo.t0 = reader[i]->GetHit(0).timestamp;
|
||||||
|
|
||||||
|
fileInfo.push_back(tempInfo);
|
||||||
|
|
||||||
|
delete reader[i];
|
||||||
|
}
|
||||||
|
delete [] reader;
|
||||||
|
|
||||||
|
}else{
|
||||||
|
|
||||||
|
printf("######### All files are time sorted files\n");
|
||||||
|
|
||||||
|
FSUTSReader ** reader = new FSUTSReader*[nFile];
|
||||||
|
// file name format is expName_runID_SN_DPP_tick2ns_order.fsu
|
||||||
|
for( int i = 0; i < nFile; i++){
|
||||||
|
printf("Processing %s (%d/%d) ..... \n", inFileName[i].Data(), i+1, nFile);
|
||||||
|
reader[i] = new FSUTSReader(inFileName[i].Data(), false);
|
||||||
|
|
||||||
|
reader[i]->ScanFile(0);
|
||||||
|
|
||||||
std::string outFileName = reader[i]->SaveHit2NewFile(tempFolder);
|
FileInfo tempInfo;
|
||||||
|
tempInfo.fileName = inFileName[i].Data();
|
||||||
|
tempInfo.readerID = i;
|
||||||
|
tempInfo.SN = reader[i]->GetSN();
|
||||||
|
tempInfo.hitCount = reader[i]->GetNumHit();
|
||||||
|
tempInfo.fileSize = reader[i]->GetFileByteSize();
|
||||||
|
tempInfo.order = reader[i]->GetFileOrder();
|
||||||
|
tempInfo.CalOrder();
|
||||||
|
|
||||||
FileInfo tempInfo;
|
tempInfo.t0 = reader[i]->GetT0();;
|
||||||
tempInfo.fileName = outFileName;
|
|
||||||
tempInfo.readerID = i;
|
|
||||||
tempInfo.SN = reader[i]->GetSN();
|
|
||||||
tempInfo.hitCount = reader[i]->GetHitCount();
|
|
||||||
tempInfo.fileSize = reader[i]->GetTSFileSize();
|
|
||||||
tempInfo.tick2ns = reader[i]->GetTick2ns();
|
|
||||||
tempInfo.DPPType = reader[i]->GetDPPType();
|
|
||||||
tempInfo.order = reader[i]->GetFileOrder();
|
|
||||||
tempInfo.CalOrder();
|
|
||||||
|
|
||||||
tempInfo.t0 = reader[i]->GetHit(0).timestamp;
|
fileInfo.push_back(tempInfo);
|
||||||
|
|
||||||
|
delete reader[i];
|
||||||
|
}
|
||||||
|
delete [] reader;
|
||||||
|
|
||||||
fileInfo.push_back(tempInfo);
|
|
||||||
|
|
||||||
delete reader[i];
|
|
||||||
}
|
}
|
||||||
delete [] reader;
|
|
||||||
|
|
||||||
std::sort(fileInfo.begin(), fileInfo.end(), [](const FileInfo& a, const FileInfo& b) {
|
std::sort(fileInfo.begin(), fileInfo.end(), [](const FileInfo& a, const FileInfo& b) {
|
||||||
return a.ID < b.ID;
|
return a.ID < b.ID;
|
||||||
|
|
|
@ -26,7 +26,7 @@ struct FileInfo {
|
||||||
void CalOrder(){ ID = ORDERSHIFT * SN + order; }
|
void CalOrder(){ ID = ORDERSHIFT * SN + order; }
|
||||||
|
|
||||||
void Print(){
|
void Print(){
|
||||||
printf("%6d | %3d | %30s | %2d | %6lu | %u Bytes = %.2f MB\n",
|
printf("%6d | %3d | %50s | %2d | %6lu | %10u Bytes = %.2f MB\n",
|
||||||
ID, DPPType, fileName.Data(), tick2ns, hitCount, fileSize, fileSize/1024./1024.);
|
ID, DPPType, fileName.Data(), tick2ns, hitCount, fileSize, fileSize/1024./1024.);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -15,23 +15,25 @@ class FSUTSReader{
|
||||||
|
|
||||||
public:
|
public:
|
||||||
FSUTSReader();
|
FSUTSReader();
|
||||||
FSUTSReader(std::string fileName, int verbose = true);
|
FSUTSReader(std::string fileName, int verbose = 1);
|
||||||
~FSUTSReader();
|
~FSUTSReader();
|
||||||
|
|
||||||
void OpenFile(std::string fileName, int verbose = true);
|
void OpenFile(std::string fileName, int verbose = 1);
|
||||||
bool isOpen() const{return inFile == nullptr ? false : true;}
|
bool isOpen() const{return inFile == nullptr ? false : true;}
|
||||||
|
|
||||||
void ScanFile(int verbose = true);
|
void ScanFile(int verbose = 1);
|
||||||
int ReadNextHit(bool withTrace = true, int verbose = 0);
|
int ReadNextHit(bool withTrace = true, int verbose = 0);
|
||||||
int ReadHitAt(unsigned int ID, bool withTrace = true, int verbose = 0);
|
int ReadHitAt(unsigned int ID, bool withTrace = true, int verbose = 0);
|
||||||
|
|
||||||
unsigned int GetHitID() const{return hitIndex;}
|
unsigned int GetHitID() const {return hitIndex;}
|
||||||
unsigned long GetNumHit() const{ return numHit;}
|
unsigned long GetNumHit() const {return numHit;}
|
||||||
|
|
||||||
std::string GetFileName() const{return fileName;}
|
std::string GetFileName() const {return fileName;}
|
||||||
unsigned long GetFileByteSize() const {return inFileSize;}
|
unsigned long GetFileByteSize() const {return inFileSize;}
|
||||||
int GetSN() const{return sn;}
|
int GetFileOrder() const {return order;}
|
||||||
|
uShort GetSN() const {return sn;}
|
||||||
|
ullong GetT0() const {return t0;}
|
||||||
|
|
||||||
Hit* GetHit() const{return hit;}
|
Hit* GetHit() const{return hit;}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -43,12 +45,15 @@ class FSUTSReader{
|
||||||
unsigned int filePos;
|
unsigned int filePos;
|
||||||
unsigned long numHit;
|
unsigned long numHit;
|
||||||
|
|
||||||
ushort sn;
|
uShort sn;
|
||||||
|
int order;
|
||||||
|
|
||||||
Hit* hit;
|
Hit* hit;
|
||||||
unsigned int hitIndex;
|
unsigned int hitIndex;
|
||||||
std::vector<unsigned int> hitStartPos;
|
std::vector<unsigned int> hitStartPos;
|
||||||
|
|
||||||
|
unsigned long long t0;
|
||||||
|
|
||||||
uint32_t header;
|
uint32_t header;
|
||||||
size_t dummy;
|
size_t dummy;
|
||||||
|
|
||||||
|
@ -85,6 +90,24 @@ inline void FSUTSReader::OpenFile(std::string fileName, int verbose){
|
||||||
|
|
||||||
this->fileName = fileName;
|
this->fileName = fileName;
|
||||||
|
|
||||||
|
std::string fileNameNoExt;
|
||||||
|
size_t found = fileName.find_last_of(".fsu.ts");
|
||||||
|
size_t found2 = fileName.find_last_of('/');
|
||||||
|
if( found2 == std::string::npos ){
|
||||||
|
fileNameNoExt = fileName.substr(0, found-7);
|
||||||
|
}else{
|
||||||
|
fileNameNoExt = fileName.substr(found2+1, found-7);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Split the string by underscores
|
||||||
|
std::istringstream iss(fileNameNoExt);
|
||||||
|
std::vector<std::string> tokens;
|
||||||
|
std::string token;
|
||||||
|
|
||||||
|
while (std::getline(iss, token, '_')) { tokens.push_back(token); }
|
||||||
|
sn = atoi(tokens[2].c_str());
|
||||||
|
order = atoi(tokens[5].c_str());
|
||||||
|
|
||||||
fseek(inFile, 0L, SEEK_END);
|
fseek(inFile, 0L, SEEK_END);
|
||||||
inFileSize = ftell(inFile);
|
inFileSize = ftell(inFile);
|
||||||
if(verbose) printf("###### %s | file size : %ld Byte = %.2f MB\n", fileName.c_str() , inFileSize, inFileSize/1024./1024.);
|
if(verbose) printf("###### %s | file size : %ld Byte = %.2f MB\n", fileName.c_str() , inFileSize, inFileSize/1024./1024.);
|
||||||
|
@ -178,6 +201,8 @@ inline void FSUTSReader::ScanFile(int verbose){
|
||||||
while( ReadNextHit(false, verbose-1) == 0 ){ // no trace
|
while( ReadNextHit(false, verbose-1) == 0 ){ // no trace
|
||||||
hitStartPos.push_back(filePos);
|
hitStartPos.push_back(filePos);
|
||||||
|
|
||||||
|
if( hitIndex == 0 ) t0 = hit->timestamp;
|
||||||
|
|
||||||
if(verbose > 1 ) printf("hitIndex : %u, Pos : %u - %u\n" , hitIndex, hitStartPos[hitIndex], hitStartPos[hitIndex+1]);
|
if(verbose > 1 ) printf("hitIndex : %u, Pos : %u - %u\n" , hitIndex, hitStartPos[hitIndex], hitStartPos[hitIndex+1]);
|
||||||
|
|
||||||
if(verbose) printf(" %u, %.2f%% %u/%lu\n\033[A\r", hitIndex, filePos*100./inFileSize, filePos, inFileSize);
|
if(verbose) printf(" %u, %.2f%% %u/%lu\n\033[A\r", hitIndex, filePos*100./inFileSize, filePos, inFileSize);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user