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