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