Documentation of libsbsdig » History » Version 115
Eric Fuchey, 04/06/2023 11:08 AM
1 | 1 | Eric Fuchey | h1. Documentation of libsbsdig |
---|---|---|---|
2 | |||
3 | 70 | Eric Fuchey | {{toc}} |
4 | |||
5 | 36 | Eric Fuchey | This page concerns the new version of libsbsdig which is currently being developped. The documentation for the old version of libsbsdig has been saved at: |
6 | https://redmine.jlab.org/projects/sbs-software/wiki/Old_Doc_libsbsdig |
||
7 | |||
8 | 1 | Eric Fuchey | h2. Overview |
9 | |||
10 | 112 | Eric Fuchey | This page is maintained by the UConn group (Eric Fuchey + Andrew Puckett). |
11 | 113 | Eric Fuchey | -As of February 14, 2020 is specific to the sbsdig_lw branch of libsbsdig on github.- |
12 | 108 | Eric Fuchey | As of April 2022, those instructions also apply to the master branch of libsbsdig on github. |
13 | 1 | Eric Fuchey | |
14 | h2. Purpose |
||
15 | |||
16 | 52 | Eric Fuchey | This page documents the libsbsdig code, which purpose is to process the Monte Carlo simulations of the SBS experiments produced by G4SBS [https://hallaweb.jlab.org/wiki/index.php/Documentation_of_g4sbs] to produce ADCs or TDCs. |
17 | 37 | Eric Fuchey | It is a standalone program which can run with a limited number of outputs (see section on usage). |
18 | 52 | Eric Fuchey | These produce files which can be analyzed with SBS-offline [https://hallaweb.jlab.org/wiki/index.php/Documentation_of_SBS-offline]. |
19 | 1 | Eric Fuchey | |
20 | h2. Getting the code and building the program |
||
21 | |||
22 | h3. Prerequisites |
||
23 | |||
24 | 54 | Eric Fuchey | * Working ROOT [https://root.cern.ch/drupal/] installation. ROOT 6 is strongly recommended. |
25 | * Working G4SBS [https://hallaweb.jlab.org/wiki/index.php/Documentation_of_g4sbs] installation. |
||
26 | 1 | Eric Fuchey | |
27 | h3. Downloading the repository |
||
28 | |||
29 | 104 | Eric Fuchey | h4. for simple users |
30 | |||
31 | 1 | Eric Fuchey | The code is hosted on a github repository owned by JLab. To clone via ssh (preferred method on JLab batch farm), do: |
32 | 5 | Eric Fuchey | |
33 | 1 | Eric Fuchey | bq. git clone git@github.com:JeffersonLab/libsbsdig.git |
34 | |||
35 | For this method to work, the ssh public key on the machine where you want to get the code must be added to your github account (see [https://help.github.com/articles/generating-ssh-keys/ Guide] to generating ssh keys and adding to your github.com account.) |
||
36 | |||
37 | 113 | Eric Fuchey | Cloning the repository defaults to the "master" branch. |
38 | 110 | Eric Fuchey | As of April, 25th, 2022, the most up-to-date version of the code and the databases is located on the *master* branch. |
39 | 113 | Eric Fuchey | -As of August, 18th, 2020, the master branch still contains the old version of the code.- |
40 | 110 | Eric Fuchey | -Beware that the current version of libsbsdig is not on the "master" branch, but on the "sbsdig_lw".- |
41 | 71 | Eric Fuchey | |
42 | 104 | Eric Fuchey | * Have an individual github account. |
43 | * On github.com: Fork the JeffersonLab libsbsdig to your account. Setup to “watch” Jlab libsbsdig |
||
44 | * git clone git@github.com:GithubUserName/libsbsdig.git (This is ssh access). |
||
45 | ** This will be the “origin” remote repo; |
||
46 | ** Create your own branch: git checkout –b NewBranchName |
||
47 | * git remote –add upstream git@github.com:JeffersonLab/libsbsdig.git |
||
48 | ** This will be the “upstream” remote repo |
||
49 | 1 | Eric Fuchey | * You can pull ( or fetch/merge) changes from the upstream (Jefferson Lab) repo. |
50 | * You can push commits in your branch to the origin (Personal Github) repo and then make pull requests. |
||
51 | 108 | Eric Fuchey | |
52 | 109 | Eric Fuchey | The most up-to-date version of the code is now available on the master branch. |
53 | 36 | Eric Fuchey | -To obtain the new version of the code currently being developped on the "sbsdig_lw" branch, do:- |
54 | 109 | Eric Fuchey | -bq. git checkout sbsdig_lw- |
55 | 1 | Eric Fuchey | |
56 | h3. Building and installing the library |
||
57 | |||
58 | 92 | Eric Fuchey | Create a "build" directory that is parallel to the "libsbsdig" source directory (this is not strictly required, but the build directory must be separate from the "libsbsdig" directory in any case). |
59 | 2 | Eric Fuchey | You also need to have setup an installation path e.g. /path/to/libsbsdig-install |
60 | 93 | Eric Fuchey | For instance, you can create it parallel to your libsbsdig directory (with the mkdir command), even though it is not strictly required |
61 | |||
62 | 2 | Eric Fuchey | *NB*: similarly to the build directory, the /path/to/libsbsdig-install directory shall '''not''' be the same as the source directory! |
63 | _The following instructions assume that "build" is parallel to "libsbsdig":_ |
||
64 | 9 | Eric Fuchey | If successful, the libsbsdig library and several other files and folders will be created in the "build" and the "install" directory. |
65 | 1 | Eric Fuchey | |
66 | 2 | Eric Fuchey | To build and install, the procedure needs to be completed. From scratch: |
67 | |||
68 | bq. mkdir build |
||
69 | cd build |
||
70 | cmake -DCMAKE_INSTALL_PREFIX=/path/to/libsbsdig-install ../libsbsdig |
||
71 | make install |
||
72 | 1 | Eric Fuchey | |
73 | 3 | Eric Fuchey | Then, the following line should be added in the OS login configuration file to take advantage of this functionality: |
74 | 91 | Eric Fuchey | * source /path/to/libsbsdig-install/bin/sbsdigenv.sh (or source /path/to/libsbsdig-install/bin/sbsdigenv.csh on the batch farm) |
75 | 1 | Eric Fuchey | |
76 | 13 | Eric Fuchey | h2. How to use the digitization library |
77 | 1 | Eric Fuchey | |
78 | 37 | Eric Fuchey | When sbsdig is installed in your machine, you can run the program using up to 4 arguments: |
79 | 1 | Eric Fuchey | |
80 | 98 | Eric Fuchey | bq. sbsdig db_gmn_conf.dat gmn13.5_elastic_ex.txt 100000 |
81 | 33 | Eric Fuchey | |
82 | 1 | Eric Fuchey | These arguments have to come in this sequence, and while not all arguments are mandatory to provide, one cannot skip an argument unless they want to skip all following arguments. |
83 | 78 | Eric Fuchey | *The first argument is a database containing the list of detectors to digitize, and the parameters for the digitization. An example of such parameters is attached (db_gmn_conf.dat) |
84 | *The second argument is a list of "signal" files to digitize. It is mandatory to provide. An example is provided in the files attached. |
||
85 | 105 | Eric Fuchey | This file contains a list of input files for the program to run on. Hence, it has to contain g4sbs files that you have permission to modify. |
86 | 115 | Eric Fuchey | This file may also optionally contain the input for background superimposition (see next section). |
87 | *The third argument is the number of events to process. It has a default value of "-1" (=2^64-1) so it can be left unprovided. |
||
88 | 1 | Eric Fuchey | |
89 | |||
90 | h2. Input files documentation |
||
91 | 115 | Eric Fuchey | |
92 | h3. List of data files |
||
93 | |||
94 | This file must contain the list of "signal" files first. In case one wants to add a background file, the list of signal files should be ended with the following line: |
||
95 | |||
96 | bq. endlist |
||
97 | |||
98 | Then the background information can be added: |
||
99 | |||
100 | bq. gmn13.5_beambkgdhistos.root 100000000 30.e-5 0 |
||
101 | |||
102 | with: 1st parameter name of the file where the histograms are stored; 2nd parameter: total number of background events generated; 3rd parameter: beam current in A; 4th is a flag to switch on or off the digitization of the PMT detectors background. |
||
103 | |||
104 | |||
105 | 79 | Eric Fuchey | |
106 | 80 | Eric Fuchey | h3. Configuration file |
107 | 1 | Eric Fuchey | |
108 | 81 | Eric Fuchey | This part describes the expected parameters for the configuration file (first argument for sbsdig). |
109 | 114 | Eric Fuchey | These parameters are presented as follows: name (expected type) |
110 | 1 | Eric Fuchey | |
111 | 81 | Eric Fuchey | * Rseed (int): seed for random number generator |
112 | * TriggerJitter (float): global trigger jitter for all detectors in ns |
||
113 | 1 | Eric Fuchey | |
114 | 81 | Eric Fuchey | * detectors_list (strings, may take several arguments): list of detectors to digitize |
115 | Currently implemented: |
||
116 | hcal (hadron calorimeter, "pmt" type detector) |
||
117 | bbps (Big Bite calorimeter preshower, "pmt" type detector) |
||
118 | bbsh (Big Bite calorimeter shower, "pmt" type detector) |
||
119 | grinch (BigBite GRINCH cherenkov, "pmt" type detector) |
||
120 | bbhodo (BigBite timing hodoscope, "pmt" type detector) |
||
121 | 1 | Eric Fuchey | bbgem (BigBite GEM tracker, "gem" type detector) |
122 | 96 | Eric Fuchey | ecal (GEp electromagnetic calorimeter, "pmt" type detector) |
123 | cdet (coordinate detector for GEp electron arm, "pmt" type detector) |
||
124 | ft (GEp front tracker, "gem" type detector) |
||
125 | fpp1 (GEp focal plane polarimeter 1, "gem" type detector) |
||
126 | fpp2 (GEp focal plane polarimeter 2, "gem" type detector) |
||
127 | 89 | Eric Fuchey | |
128 | GEnRP detectors being added... |
||
129 | 79 | Eric Fuchey | |
130 | 88 | Eric Fuchey | h4. Parameters for "pmt" type detector (name "det") |
131 | 83 | Eric Fuchey | |
132 | 88 | Eric Fuchey | * NChan_det (int) number of PMTs |
133 | * gatewidth_det (float) size of the data acquisition window in ns |
||
134 | * gain_det (float) PMT gain |
||
135 | * ped_det (float) channel pedestal mean |
||
136 | * pedsigma_det (channel) channel pedestal sigma |
||
137 | * trigoffset_det (float) trigger offset to have the signal centered properly around zero |
||
138 | * ADCconv_det (float) fC/ADC channels conversion factor |
||
139 | * ADCbits_det (int) number of bits to store the ADC value |
||
140 | * TDCconv_det (float) ns/TDC channels conversion factor |
||
141 | * TDCbits_det (int) number of bits to store the TDC value |
||
142 | * sigmapulse_det (float) full width half max of PMT pulse |
||
143 | 84 | Eric Fuchey | |
144 | 86 | Eric Fuchey | h4. Parameters for "gem" type detector (of name "detgem") |
145 | 1 | Eric Fuchey | |
146 | 97 | Eric Fuchey | * NPlanes_detgem (int): number of GEM modules x number of readout planes (usually 2) included in the tracker; |
147 | 1 | Eric Fuchey | * gatewidth_detgem (float): size data acquisition window for the in ns; |
148 | 97 | Eric Fuchey | * nlayers_detgem (int): number of GEM layers (ensemble of GEM modules at a same z) |
149 | * detgem_layer_z (array of floats): z value of each layer (should match number of layers); |
||
150 | 95 | Eric Fuchey | * layer_detgem (int): layer to which the plane/module/readout belongs; _array needs to be same size as NPlanes_detgem_ |
151 | 90 | Eric Fuchey | * nstrips_detgem (array of ints): number of strips for each plane/module/readout; _array needs to be same size as NPlanes_detgem_ |
152 | * offset_detgem (array of floats): geometrical offset in transport coordinate for each plane/module in meters (alternatively x, y); _array needs to be same size as NPlanes_detgem_ |
||
153 | * RO_angle_detgem (array of floats): angle of readout in degrees, with respect to transport coordinate x; _array needs to be same size as NPlanes_detgem_ |
||
154 | * triggeroffset_detgem (array of floats): trigger offsets for all planes in ns _array needs to equal to NPlanes_detgem/2_ |
||
155 | * ZsupThr_detgem (float): zero suppression threshold for GEMs in ADC channels; |
||
156 | * commonmode_array_detgem (float or array of floats) "common mode" (APV pedestal) value/array for BBGEMs in ADC channels; one can provide only one value which will be used for all strips or an array of values for a more realistic simulation |
||
157 | 82 | Eric Fuchey | |
158 | 1 | Eric Fuchey | h2. Root output documentation |
159 | 39 | Eric Fuchey | |
160 | The new digitization library will expand the TTree object from the input file to add ADC and TDC values. |
||
161 | 55 | Eric Fuchey | The input tree structure from G4SBS has already been described in detail in the G4SBS documentation [https://hallaweb.jlab.org/wiki/index.php/Documentation_of_g4sbs#ROOT_Tree_Structure]. |
162 | 56 | Eric Fuchey | The basic idea is that for each detector in the input tree, a set of branches will be added. |
163 | |||
164 | There are several types of detectors in G4SBS (GEM, CAL, RICH), but there is not always a defined extension for a G4SBS detector type. |
||
165 | (NB: I'm voluntarilly omitting ECAL, |
||
166 | For the purpose of the digitization, it is more convenient to define the following types of detectors: |
||
167 | * GEM: GEM trackers. Corresponds unambiguously to GEM detector type in G4SBS. Read out by MPD (sampling ADC) modules. |
||
168 | * Cher: Cherenkov detectors (example: GRINCH). Corresponds unambiguously to RICH detector type in G4SBS. Read out by TDC modules (with optional ADCs). |
||
169 | * Scint: Scintillator timing detectors (example: Timing Hodoscope). Corresponds to CAL detector type in G4SBS. Read out by TDC modules (with optional ADCs). |
||
170 | * Cal: Calorimeter (example: BBPS, BBSH). Corresponds to CAL detector type in G4SBS. Read out by ADC modules. |
||
171 | * HCal: Hadron Calorimeter. Corresponds to CAL detector type in G4SBS. Read out by FADC (sampling ADC) modules with TDCs. |
||
172 | 57 | Eric Fuchey | |
173 | 99 | Eric Fuchey | h4. Data structure extension for "Cal" detector types: |
174 | 57 | Eric Fuchey | |
175 | * nchan (int): number of channels (firing?) |
||
176 | 66 | Eric Fuchey | * chan (std::vector<int>) channel number |
177 | 57 | Eric Fuchey | * adc (std::vector<int>) unencoded pedestal subtracted ADC value |
178 | |||
179 | 100 | Eric Fuchey | h4. Data structure extension for "Scint", "Cher" detector types: |
180 | 57 | Eric Fuchey | |
181 | * nchan (int): number of channels (firing?) |
||
182 | 66 | Eric Fuchey | * chan (std::vector<int>) channel number |
183 | 57 | Eric Fuchey | * adc (std::vector<int>) unencoded pedestal subtracted ADC value |
184 | * tdc_l (std::vector<int>) unencoded leading TDC value |
||
185 | * tdc_t (std::vector<int>) unencoded trailing TDC value |
||
186 | |||
187 | 101 | Eric Fuchey | h4. Data structure extension for "FADC" (HCal) detector types: |
188 | 57 | Eric Fuchey | |
189 | 67 | Eric Fuchey | * nchan (int): number of channels (firing?) |
190 | 102 | Eric Fuchey | * chan (std::vector<int>) channel number |
191 | 101 | Eric Fuchey | * samp (std::vector<int>) sample number |
192 | * adc (std::vector<int>) unencoded pedestal subtracted ADC values for individual samples |
||
193 | 1 | Eric Fuchey | * tdc (std::vector<int>) unencoded TDC value (optional: only for HCal at the moment) |
194 | 100 | Eric Fuchey | |
195 | 1 | Eric Fuchey | h4. Data structure extension for "GEMs" detector types: |
196 | |||
197 | 79 | Eric Fuchey | * nstrips (int) number of strips (firing?) |
198 | 66 | Eric Fuchey | * module (std::vector<int>) module number |
199 | 103 | Eric Fuchey | * strips (std::vector<int>) strip number |
200 | 1 | Eric Fuchey | * samp (std::vector<int>) sample number |
201 | 104 | Eric Fuchey | * adc (std::vector<int>) unencoded pedestal subtracted ADC values for individual samples |