|
24 | 24 | #include <TRandom.h> |
25 | 25 | #include <TSystem.h> |
26 | 26 |
|
| 27 | +#include <chrono> |
27 | 28 | #include <fstream> |
28 | 29 | #include <map> |
29 | 30 | #include <string> |
| 31 | +#include <thread> |
30 | 32 | #include <vector> |
31 | 33 |
|
32 | 34 | namespace o2 |
33 | 35 | { |
34 | 36 | namespace fastsim |
35 | 37 | { |
36 | 38 |
|
37 | | -std::map<std::string, std::map<std::string, std::string>> GeometryContainer::parseTEnvConfiguration(std::string filename, std::vector<std::string>& layers) |
38 | | -{ |
39 | | - std::map<std::string, std::map<std::string, std::string>> configMap; |
40 | | - filename = gSystem->ExpandPathName(filename.c_str()); |
41 | | - TEnv env(filename.c_str()); |
42 | | - THashList* table = env.GetTable(); |
43 | | - layers.clear(); |
44 | | - for (int i = 0; i < table->GetEntries(); ++i) { |
45 | | - const std::string key = table->At(i)->GetName(); |
46 | | - // key should contain exactly one dot |
47 | | - if (key.find('.') == std::string::npos || key.find('.') != key.rfind('.')) { |
48 | | - LOG(fatal) << "Key " << key << " does not contain exactly one dot"; |
49 | | - continue; |
50 | | - } |
51 | | - const std::string firstPart = key.substr(0, key.find('.')); |
52 | | - if (std::find(layers.begin(), layers.end(), firstPart) == layers.end()) { |
53 | | - layers.push_back(firstPart); |
54 | | - } |
55 | | - } |
56 | | - env.Print(); |
57 | | - // Layers |
58 | | - for (const auto& layer : layers) { |
59 | | - LOG(info) << " Reading layer " << layer; |
60 | | - for (int i = 0; i < table->GetEntries(); ++i) { |
61 | | - const std::string key = table->At(i)->GetName(); |
62 | | - if (key.find(layer + ".") == 0) { |
63 | | - const std::string paramName = key.substr(key.find('.') + 1); |
64 | | - const std::string value = env.GetValue(key.c_str(), ""); |
65 | | - configMap[layer][paramName] = value; |
66 | | - } |
67 | | - } |
68 | | - } |
69 | | - return configMap; |
70 | | -} |
71 | | - |
72 | | -void GeometryContainer::init(o2::framework::InitContext& initContext) |
73 | | -{ |
74 | | - std::vector<std::string> detectorConfiguration; |
75 | | - const bool found = common::core::getTaskOptionValue(initContext, "on-the-fly-detector-geometry-provider", "detectorConfiguration", detectorConfiguration, false); |
76 | | - if (!found) { |
77 | | - LOG(fatal) << "Could not retrieve detector configuration from OnTheFlyDetectorGeometryProvider task."; |
78 | | - return; |
79 | | - } |
80 | | - LOG(info) << "Size of detector configuration: " << detectorConfiguration.size(); |
81 | | - for (const auto& configFile : detectorConfiguration) { |
82 | | - LOG(info) << "Detector geometry configuration file used: " << configFile; |
83 | | - addEntry(configFile); |
84 | | - } |
85 | | -} |
86 | | - |
87 | | -std::map<std::string, std::string> GeometryContainer::GeometryEntry::getConfiguration(const std::string& layerName) const |
88 | | -{ |
89 | | - auto it = mConfigurations.find(layerName); |
90 | | - if (it != mConfigurations.end()) { |
91 | | - return it->second; |
92 | | - } else { |
93 | | - LOG(fatal) << "Layer " << layerName << " not found in geometry configurations."; |
94 | | - return {}; |
95 | | - } |
96 | | -} |
97 | | - |
98 | | -std::string GeometryContainer::GeometryEntry::getValue(const std::string& layerName, const std::string& key, bool require) const |
99 | | -{ |
100 | | - auto layer = getConfiguration(layerName); |
101 | | - auto entry = layer.find(key); |
102 | | - if (entry != layer.end()) { |
103 | | - return layer.at(key); |
104 | | - } else if (require) { |
105 | | - LOG(fatal) << "Key " << key << " not found in layer " << layerName << " configurations."; |
106 | | - return ""; |
107 | | - } else { |
108 | | - return ""; |
109 | | - } |
110 | | -} |
111 | | - |
112 | 39 | // +-~-<*>-~-+-~-<*>-~-+-~-<*>-~-+-~-<*>-~-+-~-<*>-~-+-~-<*>-~-+-~-<*>-~-+-~-<*>-~-+ |
113 | 40 |
|
114 | 41 | DetLayer* FastTracker::AddLayer(TString name, float r, float z, float x0, float xrho, float resRPhi, float resZ, float eff, int type) |
@@ -169,106 +96,6 @@ void FastTracker::Print() |
169 | 96 | LOG(info) << "+-~-<*>-~-+-~-<*>-~-+-~-<*>-~-+-~-<*>-~-+-~-<*>-~-+-~-<*>-~-+-~-<*>-~-+"; |
170 | 97 | } |
171 | 98 |
|
172 | | -void FastTracker::AddSiliconALICE3v4(std::vector<float> pixelResolution) |
173 | | -{ |
174 | | - LOG(info) << " ALICE 3: Adding v4 tracking layers"; |
175 | | - float x0IT = 0.001; // 0.1% |
176 | | - float x0OT = 0.005; // 0.5% |
177 | | - float xrhoIB = 1.1646e-02; // 50 mum Si |
178 | | - float xrhoOT = 1.1646e-01; // 500 mum Si |
179 | | - float eff = 1.00; |
180 | | - |
181 | | - float resRPhiIT = pixelResolution[0]; |
182 | | - float resZIT = pixelResolution[1]; |
183 | | - float resRPhiOT = pixelResolution[2]; |
184 | | - float resZOT = pixelResolution[3]; |
185 | | - |
186 | | - AddLayer("bpipe0", 0.48, 250, 0.00042, 2.772e-02, 0.0f, 0.0f, 0.0f, 0); // 150 mum Be |
187 | | - AddLayer("ddd0", 0.5, 250, x0IT, xrhoIB, resRPhiIT, resZIT, eff, 1); |
188 | | - AddLayer("ddd1", 1.2, 250, x0IT, xrhoIB, resRPhiIT, resZIT, eff, 1); |
189 | | - AddLayer("ddd2", 2.5, 250, x0IT, xrhoIB, resRPhiIT, resZIT, eff, 1); |
190 | | - AddLayer("bpipe1", 5.7, 250, 0.0014, 9.24e-02, 0.0f, 0.0f, 0.0f, 0); // 500 mum Be |
191 | | - AddLayer("ddd3", 7., 250, x0OT, xrhoOT, resRPhiOT, resZOT, eff, 1); |
192 | | - AddLayer("ddd4", 10., 250, x0OT, xrhoOT, resRPhiOT, resZOT, eff, 1); |
193 | | - AddLayer("ddd5", 13., 250, x0OT, xrhoOT, resRPhiOT, resZOT, eff, 1); |
194 | | - AddLayer("ddd6", 16., 250, x0OT, xrhoOT, resRPhiOT, resZOT, eff, 1); |
195 | | - AddLayer("ddd7", 25., 250, x0OT, xrhoOT, resRPhiOT, resZOT, eff, 1); |
196 | | - AddLayer("ddd8", 40., 250, x0OT, xrhoOT, resRPhiOT, resZOT, eff, 1); |
197 | | - AddLayer("ddd9", 45., 250, x0OT, xrhoOT, resRPhiOT, resZOT, eff, 1); |
198 | | -} |
199 | | - |
200 | | -void FastTracker::AddSiliconALICE3v2(std::vector<float> pixelResolution) |
201 | | -{ |
202 | | - LOG(info) << "ALICE 3: Adding v2 tracking layers;"; |
203 | | - float x0IT = 0.001; // 0.1% |
204 | | - float x0OT = 0.01; // 1.0% |
205 | | - float xrhoIB = 2.3292e-02; // 100 mum Si |
206 | | - float xrhoOT = 2.3292e-01; // 1000 mum Si |
207 | | - float eff = 1.00; |
208 | | - |
209 | | - float resRPhiIT = pixelResolution[0]; |
210 | | - float resZIT = pixelResolution[1]; |
211 | | - float resRPhiOT = pixelResolution[2]; |
212 | | - float resZOT = pixelResolution[3]; |
213 | | - |
214 | | - AddLayer("bpipe0", 0.48, 250, 0.00042, 2.772e-02, 0.0f, 0.0f, 0.0f, 0); // 150 mum Be |
215 | | - AddLayer("B00", 0.5, 250, x0IT, xrhoIB, resRPhiIT, resZIT, eff, 1); |
216 | | - AddLayer("B01", 1.2, 250, x0IT, xrhoIB, resRPhiIT, resZIT, eff, 1); |
217 | | - AddLayer("B02", 2.5, 250, x0IT, xrhoIB, resRPhiIT, resZIT, eff, 1); |
218 | | - AddLayer("bpipe1", 3.7, 250, 0.0014, 9.24e-02, 0.0f, 0.0f, 0.0f, 0); // 500 mum Be |
219 | | - AddLayer("B03", 3.75, 250, x0OT, xrhoOT, resRPhiOT, resZOT, eff, 1); |
220 | | - AddLayer("B04", 7., 250, x0OT, xrhoOT, resRPhiOT, resZOT, eff, 1); |
221 | | - AddLayer("B05", 12., 250, x0OT, xrhoOT, resRPhiOT, resZOT, eff, 1); |
222 | | - AddLayer("B06", 20., 250, x0OT, xrhoOT, resRPhiOT, resZOT, eff, 1); |
223 | | - AddLayer("B07", 30., 250, x0OT, xrhoOT, resRPhiOT, resZOT, eff, 1); |
224 | | - AddLayer("B08", 45., 250, x0OT, xrhoOT, resRPhiOT, resZOT, eff, 1); |
225 | | - AddLayer("B09", 60., 250, x0OT, xrhoOT, resRPhiOT, resZOT, eff, 1); |
226 | | - AddLayer("B10", 80., 250, x0OT, xrhoOT, resRPhiOT, resZOT, eff, 1); |
227 | | -} |
228 | | - |
229 | | -void FastTracker::AddSiliconALICE3(float scaleX0VD, std::vector<float> pixelResolution) |
230 | | -{ |
231 | | - float x0Pipe0 = 0.001592; // 200 um AlBe |
232 | | - float x0VDL0 = 0.00076; // 30 um Si + 50 um glue + carbon foam 0.03% |
233 | | - float x0VDL1 = 0.00096; // 30 um Si + 50 um glue + carbon foam 0.05% |
234 | | - float x0VDL2 = 0.00167; // 30 um Si + 50 um glue + carbon foam 0.05% + 0.07% Be case |
235 | | - float x0Coldplate = 0.02f; // (1.5 mm Al2O3 2%) |
236 | | - float x0Pipe1 = 0.0023f; // 800 um Be |
237 | | - float x0OT = 0.01; // 1.0% |
238 | | - float x0iTOF = x0OT * 3.; |
239 | | - |
240 | | - float resRPhiVD = pixelResolution[0]; |
241 | | - float resZVD = pixelResolution[1]; |
242 | | - float resRPhiOT = pixelResolution[2]; |
243 | | - float resZOT = pixelResolution[3]; |
244 | | - |
245 | | - float xrhoPipe0 = 0; |
246 | | - float xrhoVDL0 = 0; |
247 | | - float xrhoVDL1 = 0; |
248 | | - float xrhoVDL2 = 0; |
249 | | - float xrhoColdplate = 0; |
250 | | - float xrhoPipe1 = 0; |
251 | | - float xrhoOT = 2.3292e-01; |
252 | | - float xrhoiTOF = 0.03; |
253 | | - float eff = 1.00; |
254 | | - |
255 | | - AddLayer("bpipe0", 0.48, 250, x0Pipe0, xrhoPipe0, 0.0f, 0.0f, 0.0f, 0); |
256 | | - AddLayer("B00", 0.5, 250, x0VDL0 * scaleX0VD, xrhoVDL0, resRPhiVD, resZVD, eff, 1); |
257 | | - AddLayer("B01", 1.2, 250, x0VDL1 * scaleX0VD, xrhoVDL1, resRPhiVD, resZVD, eff, 1); |
258 | | - AddLayer("B02", 2.5, 250, x0VDL2 * scaleX0VD, xrhoVDL2, resRPhiVD, resZVD, eff, 1); |
259 | | - AddLayer("coldplate", 2.6, 250, x0Coldplate, xrhoColdplate, 0.0f, 0.0f, 0.0f, 0); |
260 | | - AddLayer("bpipe1", 5.7, 250, x0Pipe1, xrhoPipe1, 0.0f, 0.0f, 0.0f, 0); |
261 | | - AddLayer("B03", 7., 250, x0OT, xrhoOT, resRPhiOT, resZOT, eff, 1); |
262 | | - AddLayer("B04", 9., 250, x0OT, xrhoOT, resRPhiOT, resZOT, eff, 1); |
263 | | - AddLayer("B05", 12., 250, x0OT, xrhoOT, resRPhiOT, resZOT, eff, 1); |
264 | | - AddLayer("iTOF", 19, 250, x0iTOF, xrhoiTOF, resRPhiOT, resZOT, eff, 0); |
265 | | - AddLayer("B06", 20., 250, x0OT, xrhoOT, resRPhiOT, resZOT, eff, 1); |
266 | | - AddLayer("B07", 30., 250, x0OT, xrhoOT, resRPhiOT, resZOT, eff, 1); |
267 | | - AddLayer("B08", 45., 250, x0OT, xrhoOT, resRPhiOT, resZOT, eff, 1); |
268 | | - AddLayer("B09", 60., 250, x0OT, xrhoOT, resRPhiOT, resZOT, eff, 1); |
269 | | - AddLayer("B10", 80., 250, x0OT, xrhoOT, resRPhiOT, resZOT, eff, 1); |
270 | | -} |
271 | | - |
272 | 99 | void FastTracker::AddTPC(float phiResMean, float zResMean) |
273 | 100 | { |
274 | 101 | LOG(info) << " Adding standard time projection chamber"; |
@@ -314,7 +141,7 @@ void FastTracker::AddTPC(float phiResMean, float zResMean) |
314 | 141 | } |
315 | 142 | } |
316 | 143 |
|
317 | | -void FastTracker::AddGenericDetector(GeometryContainer::GeometryEntry configMap, o2::ccdb::BasicCCDBManager* ccdbManager) |
| 144 | +void FastTracker::AddGenericDetector(o2::fastsim::GeometryEntry configMap, o2::ccdb::BasicCCDBManager* ccdbManager) |
318 | 145 | { |
319 | 146 | // Layers |
320 | 147 | for (const auto& layer : configMap.getLayerNames()) { |
|
0 commit comments