diff --git a/Aux/README.md b/Aux/README.md index 75d2a3b..8de12ad 100644 --- a/Aux/README.md +++ b/Aux/README.md @@ -2,6 +2,12 @@ This stores auxillary programs, mainly focus on reading the *.fsu file, For example, the fsuReader.h is a *.fsu reader. +# Need to Make + +```sh +make +``` + # fsuReader.h This declare the FSUReader class. it can be included as a header in a custom cpp file, or it can be loaded on cern root CLI (command line interface). @@ -14,8 +20,38 @@ This declare the FSUReader class. it can be included as a header in a custom cpp ``` The FSUReader can also read a fileList as a chain. -Inside the FSUReader, there is a Data Class (from ClassData.h). This is why we need to set the data Buffer size for the reader. The data buffer is a circular buffer, typically 10 to 600 should be enough. +Within the FSUReader, there exists a Data Class (defined in ClassData.h). This necessitates the specification of the data buffer size for the reader. The data buffer operates as a circular buffer, typically ranging from 10 to 600, which should be sufficient. -There is a std::vector in the FSUReader, in the ReadNextBlock(bool traceON = false, int verbose = 0, uShort saveData = 0), when saveData = 0, no data will be saved to the Hit vector, saveData = 1, no trace, and saveData = 2, with trace. Note that the Hit vector can be very memory demanding, especially with trace. +The ScanNumBlock() method not only scans the number of blocks (or aggregations) but also tallies the number of hits. -The ScanNumBlock() method scans number of block (or aggeragetion), and also extract the +The FSUReader includes a std::vector, which is utilized in the ReadNextBlock(bool traceON = false, int verbose = 0, uShort saveData = 0) function. When saveData = 0, no data is stored in the Hit vector; saveData = 1 excludes trace data, while saveData = 2 includes it. It's worth noting that the Hit vector can be quite memory-intensive, particularly when trace data is included. + +The pivotal method for the event builder is the ReadBatch(unsigned int batchSize, bool verbose) function. This method reads a large number of Hits (with a size of batchSize). It effectively reads twice the specified batchSize: the first batch is stored as hitList_A, and the second as hitList_B. By comparing the timestamps of hitList_A and hitList_B, sorting if necessary, the method ensures that both hitLists are time-sorted. It then outputs hitList_A and internally stores hitList_B. Subsequent calls to this method replace hitList_A with hitList_B, retrieve a new batch to serve as the new hitList_B, repeat the sorting process, and output hitList_A. + +Occasionally, the earliest timestamp of hitList_B precedes that of hitList_A. In such cases, increasing the batchSize resolves the issue, albeit at the cost of higher memory usage. Typically, a batchSize of 1 million should suffice. + +With this approach, it is guaranteed that the output hitList_A is always time-sorted (given the batchSize is big enough), thereby simplifying the event building process. + +# EvenBuilder.cpp + +This defines the EventBuilder. The arguments are + +```sh +./EventBuilder [timeWindow] [withTrace] [verbose] [batchSize] [inFile1] [inFile2] .... + timeWindow : in ns + withTrace : 0 for no trace, 1 for trace + verbose : > 0 for debug + batchSize : the size of hit in a batch + Output file name is contructed from inFile1 +``` + +as an example, + +```sh +/EventBuilder 0 0 0 1000000 '\ls -1 test_001*.fsu' + +``` + +# SettingsExplorer.cpp + +This defines the Setting explorer, the explorer takes the setting *bin file as argument. \ No newline at end of file