SND@LHC Software
Loading...
Searching...
No Matches
sndConfiguration.cxx
Go to the documentation of this file.
1#include "sndConfiguration.h"
2
3#include <cmath>
4#include <iostream>
5#include <stdexcept>
6
7#include "Scifi.h"
8#include "MuFilter.h"
9
10snd::Configuration::Configuration(Option option, Scifi *scifi_geometry, MuFilter *muon_filter_geometry, bool is_MC) : is_mc(is_MC)
11{
12 // Parameters from geometry
13 scifi_n_stations = scifi_geometry->GetConfParI("Scifi/nscifi");
14 scifi_boards_per_plane = scifi_geometry->GetConfParI("Scifi/nmats");
15 scifi_n_channels_per_plane = scifi_geometry->GetConfParI("Scifi/nsipm_channels") * scifi_geometry->GetConfParI("Scifi/nmats") * scifi_geometry->GetConfParI("Scifi/nsipm_mat");
16 scifi_fiber_lenght = scifi_geometry->GetConfParF("Scifi/fiber_length");
17 scifi_centroid_error_x = scifi_geometry->GetConfParF("Scifi/channel_width");
18 scifi_centroid_error_y = scifi_geometry->GetConfParF("Scifi/channel_width");
19 scifi_centroid_error_z = scifi_geometry->GetConfParF("Scifi/channel_height");
20
21 veto_n_stations = muon_filter_geometry->GetConfParI("MuFilter/NVetoPlanes");
22 veto_bar_per_station = muon_filter_geometry->GetConfParI("MuFilter/NVetoBars");
23
24 us_n_stations = muon_filter_geometry->GetConfParI("MuFilter/NUpstreamPlanes");
25 us_bar_per_station = muon_filter_geometry->GetConfParI("MuFilter/NUpstreamBars");
26 us_n_sipm_per_bar = muon_filter_geometry->GetConfParI("MuFilter/UpstreamnSiPMs") * muon_filter_geometry->GetConfParI("MuFilter/UpstreamnSides");
28 us_bar_length = muon_filter_geometry->GetConfParF("MuFilter/UpstreamBarX");
29 us_signal_speed = muon_filter_geometry->GetConfParF("MuFilter/VandUpPropSpeed");
30 us_centroid_error_x = 3.;//estimate based on PMU data, no time calibration
31 us_centroid_error_y = muon_filter_geometry->GetConfParF("MuFilter/UpstreamBarY") / std::sqrt(12);
32 us_centroid_error_z = muon_filter_geometry->GetConfParF("MuFilter/UpstreamBarZ");
33
34 ds_n_stations = muon_filter_geometry->GetConfParI("MuFilter/NDownstreamPlanes");
35 ds_bar_per_station = muon_filter_geometry->GetConfParI("MuFilter/NDownstreamBars");
36 ds_hor_spatial_resolution_x = muon_filter_geometry->GetConfParF("MuFilter/DownstreamBarX") / std::sqrt(12);
37 ds_hor_spatial_resolution_y = muon_filter_geometry->GetConfParF("MuFilter/DownstreamBarY") / std::sqrt(12);
38 ds_hor_spatial_resolution_z = muon_filter_geometry->GetConfParF("MuFilter/DownstreamBarZ") / std::sqrt(12);
39 ds_ver_spatial_resolution_x = muon_filter_geometry->GetConfParF("MuFilter/DownstreamBarX_ver") / std::sqrt(12);
40 ds_ver_spatial_resolution_y = muon_filter_geometry->GetConfParF("MuFilter/DownstreamBarY_ver") / std::sqrt(12);
41 ds_ver_spatial_resolution_z = muon_filter_geometry->GetConfParF("MuFilter/DownstreamBarZ_ver") / std::sqrt(12);
42
43 // Common parameters not present in geometry
45 scifi_min_timestamp = std::nan("");
46 scifi_max_timestamp = std::nan("");
47 us_min_timestamp = std::nan("");
48 us_max_timestamp = std::nan("");
50 us_qdc_to_gev = 0.0151;
52
53 // Ad hoc parameters not present in geometry
54 if (option == Option::ti18_2024_2025)
55 {
59 scifi_qdc_to_gev = 0.14;
60
61 scifi_x_min = -50.0;
62 scifi_x_max = 0.0;
63 scifi_y_min = 10.0;
64 scifi_y_max = 60.0;
65 scifi_z_min = 280.0;
66 scifi_z_max = 360.0;
67
68 us_x_min = -80.0;
69 us_x_max = 0.0;
70 us_y_min = 0.0;
71 us_y_max = 80.0;
72 us_z_min = 370.0;
73 us_z_max = 480.0;
74
76
79 }
80
81 else if (option == Option::ti18_2022_2023)
82 {
86 scifi_qdc_to_gev = 0.14;
87 scifi_x_min = -50.0;
88 scifi_x_max = 0.0;
89 scifi_y_min = 10.0;
90 scifi_y_max = 60.0;
91 scifi_z_min = 280.0;
92 scifi_z_max = 360.0;
93
94 us_x_min = -80.0;
95 us_x_max = 0.0;
96 us_y_min = 0.0;
97 us_y_max = 80.0;
98 us_z_min = 370.0;
99 us_z_max = 480.0;
100
102
103 scifi_min_timestamp = -0.5;
105 }
106
107 else if (option == Option::test_beam_2023)
108 {
112 scifi_qdc_to_gev = 0.053; // mirrors
113
114 scifi_x_min = -47.0;
115 scifi_x_max = -27.0;
116 scifi_y_min = 35.0;
117 scifi_y_max = 55.0;
118 scifi_z_min = 310.0;
119 scifi_z_max = 360.0;
120 scifi_min_timestamp = -0.5;
122
123 us_x_min = -80.0;
124 us_x_max = 5.0;
125 us_y_min = 10.0;
126 us_y_max = 80.0;
127 us_z_min = 370.0;
128 us_z_max = 480.0;
129 us_min_timestamp = -0.5;
130 us_max_timestamp = 3.0;
131
133 }
134 else if (option == Option::test_beam_2024)
135 {
139 scifi_qdc_to_gev = 0.14;
140
141 scifi_x_min = -47.0;
142 scifi_x_max = -27.0;
143 scifi_y_min = 35.0;
144 scifi_y_max = 55.0;
145 scifi_z_min = 310.0;
146 scifi_z_max = 380.0;
147
148 us_x_min = std::nan("");
149 us_x_max = std::nan("");
150 us_y_min = std::nan("");
151 us_y_max = std::nan("");
152 us_z_min = std::nan("");
153 us_z_max = std::nan("");
154
156 }
157 else
158 {
159 throw std::invalid_argument("Unknown configuration option");
160 }
161}
162
164{
165 if (run_number >= 100841 && run_number <= 100985) {
166 std::cout << "Choosing option >>>>>>>>>>\t test_beam_2024 \t<<<<<<<<<<" <<std::endl;
168 }
169 else if (run_number >= 100238 && run_number <= 100679) {
170 std::cout << "Choosing option >>>>>>>>>>\t test_beam_2023 \t<<<<<<<<<<" <<std::endl;
172 }
173 else if (run_number >= 7357 && run_number <= 12792) {
174 std::cout << "Choosing option >>>>>>>>>>\t ti18_2024_2025 \t<<<<<<<<<<" <<std::endl;
176 }
177 else if (run_number >= 4361 && run_number <= 7356){
178 std::cout << "Choosing option >>>>>>>>>>\t ti18_2022_2023 \t<<<<<<<<<<" <<std::endl;
180 }
181 else
182 {
183 throw std::invalid_argument("Run number does not match any configuration option");
184 }
185}
Float_t GetConfParF(TString name)
Definition MuFilter.h:46
Int_t GetConfParI(TString name)
Definition MuFilter.h:47
Definition Scifi.h:20
Float_t GetConfParF(TString name)
Definition Scifi.h:50
Int_t GetConfParI(TString name)
Definition Scifi.h:51
static Option GetOption(int run_number)
Configuration(Option option, Scifi *scifi_geometry, MuFilter *muon_filter_geometry, bool is_MC=false)