diff --git a/Bin2Root.cpp b/Bin2Root.cpp index 26e4239..b10547b 100644 --- a/Bin2Root.cpp +++ b/Bin2Root.cpp @@ -18,8 +18,8 @@ inline unsigned int getTime_us(){ #define MAX_TRACE_LENGTH 2000 #define MAX_MULTI 100 -#define NMINARG 5 -#define debug 0 +#define NMINARG 4 +#define debug 0 // for > 1 number of hit to debug //^############################################################# //^############################################################# @@ -33,7 +33,7 @@ int main(int argc, char **argv) { printf("%s [timeWindow] [withTrace] [outFile] [inFile1] [inFile2] .... \n", argv[0]); printf(" timeWindow : in ns, -1 = no event building \n"); printf(" withTrace : 0 for no trace, 1 for trace \n"); - printf(" outFile : output file name\n"); + printf(" outFile : Automatics generated\n"); printf("\n"); printf(" Example: %s -1 0 '\\ls -1 *001*.bin' (no event build, no trace, no verbose)\n", argv[0]); printf(" %s 100 0 '\\ls -1 *001*.bin' (event build with 100 ns, no trace, no verbose)\n", argv[0]); @@ -47,20 +47,30 @@ int main(int argc, char **argv) { ///============= read input long timeWindow = atoi(argv[1]); bool traceOn = atoi(argv[2]); - TString outFileName = argv[3]; const int nFile = argc - NMINARG + 1; TString inFileName[nFile]; for( int i = 0 ; i < nFile ; i++){ inFileName[i] = argv[i + NMINARG -1];} /// Form outFileName; - // TString outFileName = inFileName[0]; - // int pos = outFileName.Last('/'); - // pos = outFileName.Index("_", pos+1); // find next "_" - // pos = outFileName.Index("_", pos+1); // find next "_" - // if( nFile == 1 ) pos = outFileName.Index("_", pos+1); // find next "_", S/N - // outFileName.Remove(pos); // remove the rest - // outFileName += "_" + ( timeWindow >= 0 ? std::to_string(timeWindow) : "single"); - // outFileName += ".root"; + int pos = inFileName[0].Last('_'); + TString outFileName = ""; + if( pos == -1 ) { + if( timeWindow < 0 ) { + outFileName ="temp_single.root"; + }else{ + outFileName = "temp_" + std::to_string(timeWindow) + ".root"; + } + }else{ + TString temp = inFileName[0]; + temp.Remove(0, pos+1); + temp.Remove(3); + outFileName = "run" + temp; + if( timeWindow < 0 ) { + outFileName +="_single.root"; + }else{ + outFileName += "_" + std::to_string(timeWindow) + ".root"; + } + } printf("-------> Out file name : %s \n", outFileName.Data()); printf("=========================================\n"); @@ -91,6 +101,7 @@ int main(int argc, char **argv) { unsigned short e[MAX_MULTI] = {0}; unsigned short e2[MAX_MULTI] = {0}; unsigned long long e_t[MAX_MULTI] = {0}; + unsigned short e_f[MAX_MULTI] = {0}; unsigned short traceLength[MAX_MULTI]; short trace[MAX_MULTI][MAX_TRACE_LENGTH]; @@ -103,6 +114,7 @@ int main(int argc, char **argv) { tree->Branch("e", e, "e[multi]/s"); tree->Branch("e2", e2, "e2[multi]/s"); tree->Branch("e_t", e_t, "e_t[multi]/l"); + tree->Branch("e_f", e_f, "e_f[multi]/s"); tree->Branch("traceLength", traceLength, "traceLength[multi]/s"); if( traceOn ) { @@ -142,7 +154,7 @@ int main(int argc, char **argv) { // //find earliest time group; t0 = -1; for( short i = 0; i < nFile; i++){ - if( debug ) printf("NNNN %d | ID: %lld, %lld, %lld \n", i, ID[i], reader[i].GetHitID(), reader[i].GetNumHit() ); + if( debug ) printf("NNNNNNNNNNNNNNN %d | ID: %lld, %lld, %lld \n", i, ID[i], reader[i].GetHitID(), reader[i].GetNumHit() ); if( ID[i] + 1 >= reader[i].GetNumHit()) continue; // if( ID[i] >= reader[i].GetHitID() ) reader[i].ReadBlock(); if( debug ) reader[i].data.Print(); @@ -156,23 +168,22 @@ int main(int argc, char **argv) { if( debug ) printf("First timestamp is %llu, file ID : %u\n", t0, g0); for( short i = 0; i < nFile; i++){ - short ig = (i + g0 ) % nFile; - if( ID[i] + 1 >= reader[ig].GetNumHit() ) continue; + if( ID[i] + 1 >= reader[i].GetNumHit() ) continue; if( timeWindow >= 0 ){ do{ - if( (long int)( reader[ig].data.TimeStamp - t0) <= timeWindow ){ - events.push_back(reader[ig].data); - ID[ig] ++; + if( (long int)( reader[i].data.TimeStamp - t0) <= timeWindow ){ + events.push_back(reader[i].data); + ID[i] ++; }else{ break; } - }while( reader[ig].ReadBlock() == 1 ); + }while( reader[i].ReadBlock() == 1 ); }else{ - events.push_back(reader[ig].data); - ID[ig] ++; - reader[ig].ReadBlock(); + events.push_back(reader[i].data); + ID[i] ++; + reader[i].ReadBlock(); } if( timeWindow < 0) break; @@ -203,7 +214,8 @@ int main(int argc, char **argv) { ch[p] = events[p].Channel; e[p] = events[p].Energy; e2[p] = events[p].Energy_short; - e_t[p] = events[p].TimeStamp; + e_t[p] = events[p].TimeStamp / 1000; + e_f[p] = events[p].TimeStamp % 1000; traceLength[p] = events[p].NSample; if( traceOn ){ @@ -235,6 +247,8 @@ int main(int argc, char **argv) { if( events.size() == 0 ) break; + if( debug > 1 && hitProcessed > debug ) break; + }while( nFileFinished < nFile ); tree->Write(); diff --git a/BinReader.h b/BinReader.h index e7a8ea9..d693a04 100644 --- a/BinReader.h +++ b/BinReader.h @@ -45,9 +45,9 @@ struct Data{ printf("header : 0x%X \n", Header); printf(" Board : %u , Channel : %u\n", BoardID, Channel); if( Header & 4 ) { - printf("Energy : %u, Energy2 : %u, TimeStamp : %lu ps\n", Energy, Energy_short, TimeStamp); + printf("Energy : %5u, Energy2 : %5u, TimeStamp : %16lu ps\n", Energy, Energy_short, TimeStamp); }else{ - printf("Energy : %u, TimeStamp : %lu ps\n", Energy, TimeStamp); + printf("Energy : %5u, TimeStamp : %16lu ps\n", Energy, TimeStamp); } printf(" Flag : 0x%X\n", Flags); if( (Header & 0x8 ) >= 1 ){ /// is waevform exist