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
23 us_n_stations = muon_filter_geometry->GetConfParI("MuFilter/NUpstreamPlanes");
24 us_bar_per_station = muon_filter_geometry->GetConfParI("MuFilter/NUpstreamBars");
25 us_n_sipm_per_bar = muon_filter_geometry->GetConfParI("MuFilter/UpstreamnSiPMs") * muon_filter_geometry->GetConfParI("MuFilter/UpstreamnSides");
27 us_bar_length = muon_filter_geometry->GetConfParF("MuFilter/UpstreamBarX");
28 us_signal_speed = muon_filter_geometry->GetConfParF("MuFilter/VandUpPropSpeed");
29 us_centroid_error_x = 3.;//estimate based on PMU data, no time calibration
30 us_centroid_error_y = muon_filter_geometry->GetConfParF("MuFilter/UpstreamBarY") / std::sqrt(12);
31 us_centroid_error_z = muon_filter_geometry->GetConfParF("MuFilter/UpstreamBarZ");
32
33 ds_n_stations = muon_filter_geometry->GetConfParI("MuFilter/NDownstreamPlanes");
34 ds_hor_spatial_resolution_x = muon_filter_geometry->GetConfParF("MuFilter/DownstreamBarX") / std::sqrt(12);
35 ds_hor_spatial_resolution_y = muon_filter_geometry->GetConfParF("MuFilter/DownstreamBarY") / std::sqrt(12);
36 ds_hor_spatial_resolution_z = muon_filter_geometry->GetConfParF("MuFilter/DownstreamBarZ") / std::sqrt(12);
37 ds_ver_spatial_resolution_x = muon_filter_geometry->GetConfParF("MuFilter/DownstreamBarX_ver") / std::sqrt(12);
38 ds_ver_spatial_resolution_y = muon_filter_geometry->GetConfParF("MuFilter/DownstreamBarY_ver") / std::sqrt(12);
39 ds_ver_spatial_resolution_z = muon_filter_geometry->GetConfParF("MuFilter/DownstreamBarZ_ver") / std::sqrt(12);
40
41 // Common parameters not present in geometry
42 scifi_min_timestamp = std::nan("");
43 scifi_max_timestamp = std::nan("");
44 us_min_timestamp = std::nan("");
45 us_max_timestamp = std::nan("");
47 us_qdc_to_gev = 0.0151;
49
50 // Ad hoc parameters not present in geometry
51 if (option == Option::ti18_2024_2025)
52 {
56 scifi_qdc_to_gev = 0.14;
57
58 scifi_x_min = -50.0;
59 scifi_x_max = 0.0;
60 scifi_y_min = 10.0;
61 scifi_y_max = 60.0;
62 scifi_z_min = 280.0;
63 scifi_z_max = 360.0;
64
65 us_x_min = -80.0;
66 us_x_max = 0.0;
67 us_y_min = 0.0;
68 us_y_max = 80.0;
69 us_z_min = 370.0;
70 us_z_max = 480.0;
71
73
76 }
77
78 else if (option == Option::ti18_2022_2023)
79 {
83 scifi_qdc_to_gev = 0.14;
84 scifi_x_min = -50.0;
85 scifi_x_max = 0.0;
86 scifi_y_min = 10.0;
87 scifi_y_max = 60.0;
88 scifi_z_min = 280.0;
89 scifi_z_max = 360.0;
90
91 us_x_min = -80.0;
92 us_x_max = 0.0;
93 us_y_min = 0.0;
94 us_y_max = 80.0;
95 us_z_min = 370.0;
96 us_z_max = 480.0;
97
99
100 scifi_min_timestamp = -0.5;
102 }
103
104 else if (option == Option::test_beam_2023)
105 {
109 scifi_qdc_to_gev = 0.053; // mirrors
110
111 scifi_x_min = -47.0;
112 scifi_x_max = -27.0;
113 scifi_y_min = 35.0;
114 scifi_y_max = 55.0;
115 scifi_z_min = 310.0;
116 scifi_z_max = 360.0;
117 scifi_min_timestamp = -0.5;
119
120 us_x_min = -80.0;
121 us_x_max = 5.0;
122 us_y_min = 10.0;
123 us_y_max = 80.0;
124 us_z_min = 370.0;
125 us_z_max = 480.0;
126 us_min_timestamp = -0.5;
127 us_max_timestamp = 3.0;
128
130 }
131 else if (option == Option::test_beam_2024)
132 {
136 scifi_qdc_to_gev = 0.14;
137
138 scifi_x_min = -47.0;
139 scifi_x_max = -27.0;
140 scifi_y_min = 35.0;
141 scifi_y_max = 55.0;
142 scifi_z_min = 310.0;
143 scifi_z_max = 380.0;
144
145 us_x_min = std::nan("");
146 us_x_max = std::nan("");
147 us_y_min = std::nan("");
148 us_y_max = std::nan("");
149 us_z_min = std::nan("");
150 us_z_max = std::nan("");
151
153 }
154 else
155 {
156 throw std::invalid_argument("Unknown configuration option");
157 }
158}
159
161{
162 if (run_number >= 100841 && run_number <= 100985) {
163 std::cout << "Choosing option >>>>>>>>>>\t test_beam_2024 \t<<<<<<<<<<" <<std::endl;
165 }
166 else if (run_number >= 100238 && run_number <= 100679) {
167 std::cout << "Choosing option >>>>>>>>>>\t test_beam_2023 \t<<<<<<<<<<" <<std::endl;
169 }
170 else if (run_number >= 7357 && run_number <= 12792) {
171 std::cout << "Choosing option >>>>>>>>>>\t ti18_2024_2025 \t<<<<<<<<<<" <<std::endl;
173 }
174 else if (run_number >= 4361 && run_number <= 7356){
175 std::cout << "Choosing option >>>>>>>>>>\t ti18_2022_2023 \t<<<<<<<<<<" <<std::endl;
177 }
178 else
179 {
180 throw std::invalid_argument("Run number does not match any configuration option");
181 }
182}
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)