Project

General

Profile

Documentation of libsbsdig » History » Version 36

Eric Fuchey, 08/18/2020 10:05 PM

1 1 Eric Fuchey
h1. Documentation of libsbsdig
2
3 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:
4
5
https://redmine.jlab.org/projects/sbs-software/wiki/Old_Doc_libsbsdig
6
7 1 Eric Fuchey
h2. Overview
8
9 36 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.
10 1 Eric Fuchey
11
h2. Purpose
12
13
This page documents the libsbsdig code, which purpose is to transform the output data from [https://hallaweb.jlab.org/wiki/index.php/Documentation_of_g4sbs G4SBS] to digital values such as ADCs or TDCs.
14
These produce files which can be analyzed with [https://hallaweb.jlab.org/wiki/index.php/Documentation_of_SBS-offline SBS-offline].
15
16
h2. Getting the code and building the program
17
18
h3. Prerequisites
19
20
*Working [https://root.cern.ch/drupal/ ROOT] installation. '''libsbsdig is compatible with ROOT version 5 and ROOT version 6'''. '''''ROOT 6 is strongly recommended'''''
21 36 Eric Fuchey
*Working [https://hallaweb.jlab.org/wiki/index.php/Documentation_of_g4sbs G4SBS] installation. 
22 1 Eric Fuchey
23
h3. Downloading the repository
24
25
The code is hosted on a github repository owned by JLab. To clone via ssh (preferred method on JLab batch farm), do: 
26 5 Eric Fuchey
27 1 Eric Fuchey
bq. git clone git@github.com:JeffersonLab/libsbsdig.git
28
29
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.)
30
31 36 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'''.
32
To obtain the new version of the code currently being developped on the "sbsdig_lw" branch, do
33
34
bq. git checkout sbsdig_lw
35 1 Eric Fuchey
36
h3. Building and installing the library
37
38 2 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 "SBS-offline" directory in any case). 
39
You also need to have setup an installation path e.g. /path/to/libsbsdig-install
40
*NB*: similarly to the build directory, the /path/to/libsbsdig-install directory shall '''not''' be the same as the source directory!
41
_The following instructions assume that "build" is parallel to "libsbsdig":_
42 9 Eric Fuchey
If successful, the libsbsdig library and several other files and folders will be created in the "build" and the "install" directory.
43 1 Eric Fuchey
44 2 Eric Fuchey
To build and install, the procedure needs to be completed. From scratch:
45
46
bq. mkdir build
47
cd build
48
cmake -DCMAKE_INSTALL_PREFIX=/path/to/libsbsdig-install ../libsbsdig
49
make install
50 1 Eric Fuchey
51 3 Eric Fuchey
Then, the following line should be added in the OS login configuration file to take advantage of this functionality:
52
* source /path/to/libsbsdig-install/bin/sbsdigenv.sh (or source /path/to/g4sbs_install/bin/sbsdigenv.csh on the batch farm)
53 1 Eric Fuchey
54 31 Eric Fuchey
h2. How to use the digitization library
55 13 Eric Fuchey
56 35 Eric Fuchey
Working example scripts using the SBS-offline are available in the SBS-offline repository 
57
in the replay directory.
58
An example of script is replay_diggmn_test.C
59
60 1 Eric Fuchey
61 30 Eric Fuchey
h2. Root output documentation
62 1 Eric Fuchey
63 15 Eric Fuchey
For each detector, several structures are stored under the form of an ensemble of vectors of integers and doubles.
64
There are three types of structures:
65 24 Eric Fuchey
* the "trackmchits" storing the information of the Monte Carlo track intercepting the detector; 
66
* the "simhits" storing the true energy deposits and corresponding number of photoelectrons for each g4sbs hit processed by libsbsdig;
67
* the "hits", storing the adc and tdc information;
68 15 Eric Fuchey
69 30 Eric Fuchey
h3. "trackmchit" structure
70 16 Eric Fuchey
71 32 Eric Fuchey
The full name of such variables for a given detector is <detector_full_name>.trackmchit.<varname>, where <varname> can be:
72
73 26 Eric Fuchey
* nhits (int): number of entries stored for this structure and this detector
74 23 Eric Fuchey
* source (std::vector<short>): type of file where the MC track comes from (0 if signal, >0 if background)
75
* trid (std::vector<short>): track ID in G4SBS (mostly useful to distinguish primary tracks)
76
* pid  (std::vector<int>): track PDG PID
77 26 Eric Fuchey
* xhit (std::vector<double>) estimated point of intercept of the track at the detector surface, projected in the dispersive direction x (transport coordinates)
78
* yhit (std::vector<double>) estimated point of intercept of the track at the detector surface, projected in the non-dispersive direction y (transport coordinate)
79 1 Eric Fuchey
* thit (std::vector<double>) estimated time of intercept of the track at the detector surface
80
* e (std::vector<double>) track total energy
81 26 Eric Fuchey
* weight (std::vector<double>) weight of the event from which the track is issued (not implemented yet)
82 1 Eric Fuchey
83 32 Eric Fuchey
For the GEMs, the full track info is stored (but the intersect points with each of the GEM layers aren't).
84 1 Eric Fuchey
85 32 Eric Fuchey
The full name of such variables for a given detector is <detector_full_name>.mctrack.<varname>, where <varname> can be:
86
87
88 26 Eric Fuchey
mctrack_ntracks (int) number of tracks stored
89
* source (std::vector<short>): type of file where the MC track comes from (0 if signal, >0 if background)
90
* trid (std::vector<short>): track ID in G4SBS (mostly useful to distinguish primary tracks)
91
* pid  (std::vector<int>): track PDG PID
92
* x (std::vector<double>): track position x at z = 0 (transport coordinates)
93
* y (std::vector<double>): track position y at z = 0 (transport coordinates)
94
* t (std::vector<double>): track time  at z = 0
95
* p (std::vector<double>): track momentum
96
* dx (std::vector<double>): track slope projected in the dispersive direction x (transport coordinates)
97
* dy (std::vector<double>): track slope projected in the non-dispersive direction y (transport coordinates)
98
* xv (std::vector<double>): track vertex x at target (if applicable)
99
* yv (std::vector<double>): track vertex y at target (if applicable)
100
* zv (std::vector<double>): track vertex z at target (if applicable)
101
* pxv (std::vector<double>): track momentum x at target (if applicable)
102
* pyv (std::vector<double>): track momentum y at target (if applicable)
103
* pzv (std::vector<double>): track momentum z at target (if applicable)
104
* weight (std::vector<double>) weight of the event from which the track is issued (not implemented yet)
105
106 30 Eric Fuchey
h3. "simhit" structure
107 1 Eric Fuchey
108 32 Eric Fuchey
The full name of such variables for a given detector is <detector_full_name>.simhit.<varname>, where <varname> can be:
109
110 27 Eric Fuchey
* nhits (int) number of entries stored for this structure and this detector
111 24 Eric Fuchey
* src (std::vector<short>): type of file where the sim hit comes from (0 if signal, >0 if background)
112
* trid (std::vector<short>): ID of track responsible of hit in G4SBS (n. i. y.)
113
* pid (std::vector<int>): PDG PID of track responsible of hit in G4SBS (n. i. y.)
114
* chan (std::vector<short>): channel number in which the hit is recorded
115 1 Eric Fuchey
* edep (std::vector<double>): energy deposit recorded in g4sbs (in GeV)
116 24 Eric Fuchey
* npe (std::vector<int>): recorded or estimated number of photoelectrons detected
117 27 Eric Fuchey
* time (std::vector<double>): time of hit as recorded by g4sbs
118 24 Eric Fuchey
* t_lead(std::vector<double>): estimated time when the pulse rises over threshold (for detectors with TDCs) 
119
* t_trail(std::vector<double>): estimated time when the pulse falls under threshold (for detectors with TDCs) 
120 18 Eric Fuchey
121 1 Eric Fuchey
Note: 
122
for calorimeters without TDCs, t_lead and t_trail are not applicable and will not be stored;
123
for cherenkov detectors, edep is not applicable and will not be stored;
124 27 Eric Fuchey
125
The structure above is valid for all detectors except GEMs. The structure for GEMs sim hits is:
126
127
* nhits (UInt_t) number of entries stored for this structure and this detector
128
* src (std::vector<short>): type of file where the sim hit comes from (0 if signal, >0 if background)
129
* trid (std::vector<short>): ID of track responsible of hit in G4SBS (n. i. y.)
130
* pid (std::vector<int>): PDG PID of track responsible of hit in G4SBS (n. i. y.)
131
* plane (std::vector<short>): layer number of the GEM in which the hit is recorded
132
* module (std::vector<short>): module number of the GEM in whcih the hit is recorded
133
* edep (std::vector<double>): energy deposit recorded in g4sbs (in GeV)
134
* time (std::vector<double>): time of hit as recorded by g4sbs
135 28 Eric Fuchey
* xpos (std::vector<double>): x position of hit in GEM module (transport coordinates)
136
* ypos (std::vector<double>): y position of hit in GEM module (transport coordinates)
137
* px (std::vector<double>): x momentum of the track in transport coordinates
138
* py (std::vector<double>): y momentum of the track in transport coordinates
139
* pz (std::vector<double>): z momentum of the track in transport coordinates
140 29 Eric Fuchey
* sizex (std::vector<short>): number of strips on the x readout that receive _any_ signal from the GEM avalanche
141
* sizey (std::vector<short>): number of strips on the y readout that receive _any_ signal from the GEM avalanche
142
* startx (std::vector<short>): lowest x strip number that receive _any_ signal from the GEM avalanche
143
* starty (std::vector<short>): lowest y strip number that receive _any_ signal from the GEM avalanche
144 27 Eric Fuchey
145 29 Eric Fuchey
Notes: 
146
- the 4 last variables should be interpreted as such: the GEM avalanche will spread from strip #startx(y) to strip #startx(y)+sizex(y)
147
- the reconstructed hit size (i.e. after analysis/clustering) should not be expected to be the same as sizex (since strips receiving the slightest signals are counted in).
148 27 Eric Fuchey
149 1 Eric Fuchey
h3. "hit" structure
150 32 Eric Fuchey
151
The full name of such variables for a given detector is <detector_full_name>.hit.<varname>, where <varname> can be:
152 20 Eric Fuchey
153 25 Eric Fuchey
* nhits (int) number of entries for this structure and this detector
154
* chan (std::vector<short>) channel number in which the hit is recorded
155
* dataword (std::vector<unsigned int>) encoded data word containing the ADC/TDC; may also store headers (useful for simulation decoding)
156
* adc (std::vector<int>) unencoded pedestal subtracted ADC value
157
* tdc_l (std::vector<int>) unencoded leading TDC value
158
* tdc_t (std::vector<int>) unencoded trailing TDC value
159 1 Eric Fuchey
160 34 Eric Fuchey
Note: when a "header" is stored in dataword, the channel number stored is -1. 
161 33 Eric Fuchey
162
*Particular case of detector read out by sampling ADCs (GEMs MPDs, HCal FADCs):
163 25 Eric Fuchey
In this case, storing each sample with the structure about would be too inefficient in terms of disk space. Hence, for this very specific case, we use vectors of evectors
164
 
165
* nsamps (std::vector<unsigned int>) number of ADC samples (number of elements in vector samps_adc, see note below)
166
* samps_adc (std::vector<vector<int> >) unencoded pedestal subtracted ADC values (samps_adc[i][j] = sample j for hit i)
167
* datawords (std::vector<vector<unsigned int> >) datawords containing the encoded GEMs. 
168
169
_Note_: for both MPDs and FADCs, two ADC values are encoded in a single 32 bits words. that means the actual number of ADC samples (nsamps) is twice the number elements in vector datawords. The number of elements in vector datawords is stored in variable dataword.