small bug fix on EventBuilder. Need to convert to absolute timestamp for various type of digitizers
This commit is contained in:
parent
fd0e6d4e38
commit
0d9690b5ed
|
@ -1,5 +1,6 @@
|
||||||
#include "../ClassData.h"
|
#include "../ClassData.h"
|
||||||
#include "../MultiBuilder.h"
|
#include "../MultiBuilder.h"
|
||||||
|
#include "fsuReader.h"
|
||||||
|
|
||||||
#include "TROOT.h"
|
#include "TROOT.h"
|
||||||
#include "TSystem.h"
|
#include "TSystem.h"
|
||||||
|
@ -12,8 +13,8 @@
|
||||||
#define BUFFERFILL 0.1 // only 0.5 * MAXNData will be filled in memeory each time
|
#define BUFFERFILL 0.1 // only 0.5 * MAXNData will be filled in memeory each time
|
||||||
|
|
||||||
template<typename T> void swap(T * a, T *b );
|
template<typename T> void swap(T * a, T *b );
|
||||||
int partition(int arr[], int kaka[], TString file[], int start, int end);
|
int partition(int arr[], int kaka[], TString file[], unsigned int fileSize[], unsigned int numBlock[], int start, int end);
|
||||||
void quickSort(int arr[], int kaka[], TString file[], int start, int end);
|
void quickSort(int arr[], int kaka[], TString file[], unsigned int fileSize[], unsigned int numBlock[], int start, int end);
|
||||||
|
|
||||||
//^#############################################################
|
//^#############################################################
|
||||||
//^#############################################################
|
//^#############################################################
|
||||||
|
@ -69,6 +70,7 @@ int main(int argc, char **argv) {
|
||||||
int ID[nFile]; /// serial+ order*1000;
|
int ID[nFile]; /// serial+ order*1000;
|
||||||
int type[nFile];
|
int type[nFile];
|
||||||
unsigned int fileSize[nFile];
|
unsigned int fileSize[nFile];
|
||||||
|
unsigned int numBlock[nFile];
|
||||||
for( int i = 0; i < nFile; i++){
|
for( int i = 0; i < nFile; i++){
|
||||||
int snPos = inFileName[i].Index("_"); // first "_"
|
int snPos = inFileName[i].Index("_"); // first "_"
|
||||||
//snPos = inFileName[i].Index("_", snPos + 1);
|
//snPos = inFileName[i].Index("_", snPos + 1);
|
||||||
|
@ -78,7 +80,7 @@ int main(int argc, char **argv) {
|
||||||
TString typeStr = &inFileName[i][typePos+1];
|
TString typeStr = &inFileName[i][typePos+1];
|
||||||
typeStr.Resize(3);
|
typeStr.Resize(3);
|
||||||
|
|
||||||
printf("sn %d %s \n", sn, typeStr.Data());
|
//printf("sn %d %s \n", sn, typeStr.Data());
|
||||||
|
|
||||||
if( typeStr == "PHA" ) type[i] = DPPType::DPP_PHA_CODE;
|
if( typeStr == "PHA" ) type[i] = DPPType::DPP_PHA_CODE;
|
||||||
if( typeStr == "PSD" ) type[i] = DPPType::DPP_PSD_CODE;
|
if( typeStr == "PSD" ) type[i] = DPPType::DPP_PSD_CODE;
|
||||||
|
@ -97,14 +99,23 @@ int main(int argc, char **argv) {
|
||||||
}
|
}
|
||||||
fclose(temp);
|
fclose(temp);
|
||||||
|
|
||||||
|
FSUReader * reader = new FSUReader(inFileName[i].Data(), typeStr == "QDC" ? 64 : 16, false);
|
||||||
|
reader->ScanNumBlock(false);
|
||||||
|
numBlock[i] = reader->GetTotNumBlock();
|
||||||
|
fileSize[i] = reader->GetFileByteSize();
|
||||||
|
delete reader;
|
||||||
|
|
||||||
//printf("sn:%d, type:%d (%s), order:%d \n", sn, type[i], typeStr.Data(), order);
|
//printf("sn:%d, type:%d (%s), order:%d \n", sn, type[i], typeStr.Data(), order);
|
||||||
|
|
||||||
}
|
}
|
||||||
quickSort(&(ID[0]), &(type[0]), &(inFileName[0]), 0, nFile-1);
|
quickSort(&(ID[0]), &(type[0]), &(inFileName[0]), &(fileSize[0]), &(numBlock[0]), 0, nFile-1);
|
||||||
|
unsigned int totBlock = 0;
|
||||||
for( int i = 0 ; i < nFile; i++){
|
for( int i = 0 ; i < nFile; i++){
|
||||||
printf("%d | %6d | %3d | %30s | %u Bytes = %.2f MB\n", i, ID[i], type[i], inFileName[i].Data(), fileSize[i], fileSize[i]/1024./1024.);
|
printf("%d | %6d | %3d | %30s | %6u | %u Bytes = %.2f MB\n", i, ID[i], type[i], inFileName[i].Data(), numBlock[i], fileSize[i], fileSize[i]/1024./1024.);
|
||||||
|
totBlock += numBlock[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
printf("----- total number of block : %u.\n", totBlock);
|
||||||
|
|
||||||
//*======================================= Sort files in to group
|
//*======================================= Sort files in to group
|
||||||
std::vector<int> snList; // store the serial number of the group
|
std::vector<int> snList; // store the serial number of the group
|
||||||
|
@ -130,7 +141,7 @@ int main(int argc, char **argv) {
|
||||||
for( int i = 0; i < nGroup; i++){
|
for( int i = 0; i < nGroup; i++){
|
||||||
printf("............ Digi-%d \n", snList[i]);
|
printf("............ Digi-%d \n", snList[i]);
|
||||||
for( int j = 0; j< (int) fileList[i].size(); j++){
|
for( int j = 0; j< (int) fileList[i].size(); j++){
|
||||||
printf("%s | %d\n", fileList[i][j].Data(), typeList[i]);
|
printf(" %s | %d\n", fileList[i][j].Data(), typeList[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -235,6 +246,7 @@ int main(int argc, char **argv) {
|
||||||
}else{
|
}else{
|
||||||
inFileIndex[i] = -1;
|
inFileIndex[i] = -1;
|
||||||
printf("---- no more file for digi-%d.\n", snList[i]);
|
printf("---- no more file for digi-%d.\n", snList[i]);
|
||||||
|
fillFlag = false;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -275,6 +287,8 @@ int main(int argc, char **argv) {
|
||||||
int iData = data[i]->DataIndex[ch];
|
int iData = data[i]->DataIndex[ch];
|
||||||
int iLoop = data[i]->LoopIndex[ch];
|
int iLoop = data[i]->LoopIndex[ch];
|
||||||
|
|
||||||
|
if( iData < 0 ) continue;
|
||||||
|
|
||||||
if( (iLoop*MaxNData + iData) - (lastLoopIndex[i][ch]*MaxNData + lastDataIndex[i][ch]) > MaxNData * BUFFERFILL ) {
|
if( (iLoop*MaxNData + iData) - (lastLoopIndex[i][ch]*MaxNData + lastDataIndex[i][ch]) > MaxNData * BUFFERFILL ) {
|
||||||
fillFlag = false;
|
fillFlag = false;
|
||||||
}
|
}
|
||||||
|
@ -286,7 +300,7 @@ int main(int argc, char **argv) {
|
||||||
|
|
||||||
}
|
}
|
||||||
if( debug ){
|
if( debug ){
|
||||||
printf("%3d | agg : %d | %u | %s\n", snList[i], aggCount[i], data[i]->aggTime, fillFlag ? "cont. fill" : "break." );
|
printf(" %3d | agg : %d | %u | %s\n", snList[i], aggCount[i], data[i]->aggTime, fillFlag ? "cont. fill" : "break." );
|
||||||
//data[i]->PrintStat();
|
//data[i]->PrintStat();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -300,7 +314,7 @@ int main(int argc, char **argv) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mb->BuildEvents(0, 0, debug);
|
mb->BuildEvents(0, !traceOn, debug);
|
||||||
if( debug ) mb->PrintStat();
|
if( debug ) mb->PrintStat();
|
||||||
|
|
||||||
///----------- save to tree;
|
///----------- save to tree;
|
||||||
|
@ -344,7 +358,7 @@ int main(int argc, char **argv) {
|
||||||
|
|
||||||
}while(true);
|
}while(true);
|
||||||
|
|
||||||
if( timeWindow > 0 ){
|
if( timeWindow >= 0 ){
|
||||||
printf("------------------- build the last data\n");
|
printf("------------------- build the last data\n");
|
||||||
|
|
||||||
mb->BuildEvents(1, 0, debug);
|
mb->BuildEvents(1, 0, debug);
|
||||||
|
@ -386,7 +400,7 @@ int main(int argc, char **argv) {
|
||||||
|
|
||||||
tree->Write();
|
tree->Write();
|
||||||
|
|
||||||
printf("========================= finsihed.\n");
|
printf("========================= finished.\n");
|
||||||
printf("total events built = %llu(%llu)\n", evID + 1, tree->GetEntriesFast());
|
printf("total events built = %llu(%llu)\n", evID + 1, tree->GetEntriesFast());
|
||||||
printf("=======> saved to %s \n", outFileName.Data());
|
printf("=======> saved to %s \n", outFileName.Data());
|
||||||
|
|
||||||
|
@ -406,7 +420,7 @@ template<typename T> void swap(T * a, T *b ){
|
||||||
*a = temp;
|
*a = temp;
|
||||||
}
|
}
|
||||||
|
|
||||||
int partition(int arr[], int kaka[], TString file[], int start, int end){
|
int partition(int arr[], int kaka[], TString file[], unsigned int fileSize[], unsigned int numBlock[], int start, int end){
|
||||||
int pivot = arr[start];
|
int pivot = arr[start];
|
||||||
int count = 0;
|
int count = 0;
|
||||||
for (int i = start + 1; i <= end; i++) {
|
for (int i = start + 1; i <= end; i++) {
|
||||||
|
@ -417,6 +431,8 @@ int partition(int arr[], int kaka[], TString file[], int start, int end){
|
||||||
swap(&arr[pivotIndex], &arr[start]);
|
swap(&arr[pivotIndex], &arr[start]);
|
||||||
swap(&file[pivotIndex], &file[start]);
|
swap(&file[pivotIndex], &file[start]);
|
||||||
swap(&kaka[pivotIndex], &kaka[start]);
|
swap(&kaka[pivotIndex], &kaka[start]);
|
||||||
|
swap(&fileSize[pivotIndex], &fileSize[start]);
|
||||||
|
swap(&numBlock[pivotIndex], &numBlock[start]);
|
||||||
|
|
||||||
/// Sorting left and right parts of the pivot element
|
/// Sorting left and right parts of the pivot element
|
||||||
int i = start, j = end;
|
int i = start, j = end;
|
||||||
|
@ -429,18 +445,20 @@ int partition(int arr[], int kaka[], TString file[], int start, int end){
|
||||||
swap( &arr[ip], &arr[jm]);
|
swap( &arr[ip], &arr[jm]);
|
||||||
swap(&file[ip], &file[jm]);
|
swap(&file[ip], &file[jm]);
|
||||||
swap(&kaka[ip], &kaka[jm]);
|
swap(&kaka[ip], &kaka[jm]);
|
||||||
|
swap(&fileSize[ip], &fileSize[jm]);
|
||||||
|
swap(&numBlock[ip], &numBlock[jm]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return pivotIndex;
|
return pivotIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
void quickSort(int arr[], int kaka[], TString file[], int start, int end){
|
void quickSort(int arr[], int kaka[], TString file[], unsigned int fileSize[], unsigned int numBlock[], int start, int end){
|
||||||
/// base case
|
/// base case
|
||||||
if (start >= end) return;
|
if (start >= end) return;
|
||||||
/// partitioning the array
|
/// partitioning the array
|
||||||
int p = partition(arr, kaka, file, start, end);
|
int p = partition(arr, kaka, file, fileSize, numBlock, start, end);
|
||||||
/// Sorting the left part
|
/// Sorting the left part
|
||||||
quickSort(arr, kaka, file, start, p - 1);
|
quickSort(arr, kaka, file, fileSize, numBlock, start, p - 1);
|
||||||
/// Sorting the right part
|
/// Sorting the right part
|
||||||
quickSort(arr, kaka, file, p + 1, end);
|
quickSort(arr, kaka, file, fileSize, numBlock, p + 1, end);
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,7 +45,7 @@ DataReader : DataReaderScript.cpp ../ClassData.h MultiBuilder.o
|
||||||
@echo "--------- making DataReader"
|
@echo "--------- making DataReader"
|
||||||
$(CC) $(COPTS) -o DataReader DataReaderScript.cpp ../ClassData.h MultiBuilder.o
|
$(CC) $(COPTS) -o DataReader DataReaderScript.cpp ../ClassData.h MultiBuilder.o
|
||||||
|
|
||||||
EventBuilder : EventBuilder.cpp ../ClassData.h MultiBuilder.o
|
EventBuilder : EventBuilder.cpp ../ClassData.h MultiBuilder.o fsuReader.h
|
||||||
@echo "--------- making EventBuilder"
|
@echo "--------- making EventBuilder"
|
||||||
$(CC) $(COPTS) -o EventBuilder EventBuilder.cpp MultiBuilder.o $(ROOTLIBS)
|
$(CC) $(COPTS) -o EventBuilder EventBuilder.cpp MultiBuilder.o $(ROOTLIBS)
|
||||||
|
|
||||||
|
|
|
@ -3,10 +3,10 @@
|
||||||
class FSUReader{
|
class FSUReader{
|
||||||
|
|
||||||
public:
|
public:
|
||||||
FSUReader(std::string fileName, unsigned short numCh);
|
FSUReader(std::string fileName, unsigned short numCh, bool verbose = true);
|
||||||
~FSUReader();
|
~FSUReader();
|
||||||
|
|
||||||
void ScanNumBlock();
|
void ScanNumBlock(bool verbose = true);
|
||||||
int ReadNextBlock(bool fast = false, int verbose = 0);
|
int ReadNextBlock(bool fast = false, int verbose = 0);
|
||||||
int ReadBlock(unsigned int ID, int verbose = 0);
|
int ReadBlock(unsigned int ID, int verbose = 0);
|
||||||
|
|
||||||
|
@ -16,6 +16,8 @@ class FSUReader{
|
||||||
|
|
||||||
int GetDPPType() const{return DPPType;}
|
int GetDPPType() const{return DPPType;}
|
||||||
|
|
||||||
|
unsigned long GetFileByteSize() const {return inFileSize;}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
FILE * inFile;
|
FILE * inFile;
|
||||||
|
@ -38,7 +40,7 @@ class FSUReader{
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
inline FSUReader::FSUReader(std::string fileName, unsigned short numCh){
|
inline FSUReader::FSUReader(std::string fileName, unsigned short numCh, bool verbose){
|
||||||
|
|
||||||
inFile = fopen(fileName.c_str(), "r");
|
inFile = fopen(fileName.c_str(), "r");
|
||||||
|
|
||||||
|
@ -49,7 +51,7 @@ inline FSUReader::FSUReader(std::string fileName, unsigned short numCh){
|
||||||
|
|
||||||
fseek(inFile, 0L, SEEK_END);
|
fseek(inFile, 0L, SEEK_END);
|
||||||
inFileSize = ftell(inFile);
|
inFileSize = ftell(inFile);
|
||||||
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.);
|
||||||
fseek(inFile, 0L, SEEK_SET);
|
fseek(inFile, 0L, SEEK_SET);
|
||||||
filePos = 0;
|
filePos = 0;
|
||||||
|
|
||||||
|
@ -70,10 +72,10 @@ inline FSUReader::FSUReader(std::string fileName, unsigned short numCh){
|
||||||
std::string ext = fileName.substr(found + 1);
|
std::string ext = fileName.substr(found + 1);
|
||||||
|
|
||||||
if( ext.find("fsu") != std::string::npos ) {
|
if( ext.find("fsu") != std::string::npos ) {
|
||||||
printf("It is an raw data *.fsu format\n");
|
if(verbose) printf("It is an raw data *.fsu format\n");
|
||||||
}else{
|
}else{
|
||||||
chMask = atoi(ext.c_str());
|
chMask = atoi(ext.c_str());
|
||||||
printf("It is a splitted dual block data *.fsu.X format, dual channel mask : %d \n", chMask);
|
if(verbose) printf("It is a splitted dual block data *.fsu.X format, dual channel mask : %d \n", chMask);
|
||||||
}
|
}
|
||||||
|
|
||||||
//ScanNumBlock();
|
//ScanNumBlock();
|
||||||
|
@ -153,7 +155,7 @@ inline int FSUReader::ReadBlock(unsigned int ID, int verbose){
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void FSUReader::ScanNumBlock(){
|
inline void FSUReader::ScanNumBlock(bool verbose){
|
||||||
if( feof(inFile) ) return;
|
if( feof(inFile) ) return;
|
||||||
|
|
||||||
blockID = 0;
|
blockID = 0;
|
||||||
|
@ -166,11 +168,11 @@ inline void FSUReader::ScanNumBlock(){
|
||||||
while( ReadNextBlock(true) == 0 ){
|
while( ReadNextBlock(true) == 0 ){
|
||||||
blockPos.push_back(filePos);
|
blockPos.push_back(filePos);
|
||||||
blockID ++;
|
blockID ++;
|
||||||
printf("%u, %.2f%% %u/%lu\n\033[A\r", blockID, filePos*100./inFileSize, filePos, inFileSize);
|
if(verbose) printf("%u, %.2f%% %u/%lu\n\033[A\r", blockID, filePos*100./inFileSize, filePos, inFileSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
totNumBlock = blockID;
|
totNumBlock = blockID;
|
||||||
printf("\nScan complete: number of data Block : %lu\n", totNumBlock);
|
if(verbose) printf("\nScan complete: number of data Block : %lu\n", totNumBlock);
|
||||||
|
|
||||||
rewind(inFile);
|
rewind(inFile);
|
||||||
blockID = 0;
|
blockID = 0;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user