BmnRoot 26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Loading...
Searching...
No Matches
CreateMapTof400_Run9.C
Go to the documentation of this file.
1/*
2 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
3 * Click nbfs://nbhost/SystemFileSystem/Templates/cFiles/main.c to edit this template
4 */
5
6/*
7 * File: CreateMapTof400_Run9.C
8 * Author: mikhailr
9 *
10 * Created on September 22, 2025, 3:02 PM
11 */
12
13#include "Riostream.h"
14#include "TString.h"
15
16#include <TMath.h>
17#include <fstream>
18#include <iostream>
19#include <sstream>
20#include <string>
21
22using namespace std;
23
24fstream ff, ffStrip;
25static const Int_t kNIt = 4;
26static const Int_t kNDet = 10;
27static const Int_t kNSlot = 23;
28
29UInt_t crate; // TTVXS Left side slot 12
31
33{
34 // Преобразуем UInt_t в шестнадцатеричную строку без префикса "0x",
35 // с ведущими нулями до 8 символов (чтобы всегда было 8 шестнадцатеричных цифр)
36 TString hexStr = TString::Format("%08X", hexValue);
37
38 // Формируем итоговую строку в формате "TDC72VHL-XXXX-XXXX.ini"
39 TString result = "TDC72VHL-" + hexStr(0, 4) + "-" + // первые 4 символа
40 hexStr(4, 4) + ".ini"; // следующие 4 символа
41
42 return result;
43}
44
45void FillInlList(std::string mappp)
46{
47 // 2. Fill Placement map
48 ff.open(mappp.c_str(), std::fstream::in | std::fstream::out | std::fstream::app);
49 if (ff.fail()) {
50 cerr << "2. Cannot open the file " << mappp << endl;
51 return;
52 }
53 for (Int_t i = 0; i < kNSlot; i++)
54 if (slot[i] != 0) {
55 ff << convertUIntToFilename(slot[i]).Data() << endl;
56 }
57 ff.close();
58}
59
60void FillPlacementMap(std::string mappp)
61{
62 // 2. Fill list of INL files
63 ff.open(mappp.c_str(), std::fstream::in | std::fstream::out | std::fstream::app);
64 if (ff.fail()) {
65 cerr << "2. Cannot open the file " << mappp << endl;
66 return;
67 }
68 for (Int_t i = 0; i < kNSlot; i++)
69 if (slot[i] != 0) {
70 ff << std::hex << std::setfill('0') << std::setw(8) << crate << '\t';
71 ff << std::dec << i << '\t';
72 ff << std::hex << std::setfill('0') << std::setw(8) << slot[i] << endl;
73 }
74 ff.close();
75}
76
78{
79 Int_t temp = static_cast<int>(number / 1000.);
80 return temp;
81}
82
84{
85 Int_t temp = static_cast<int>((number - GetSlot(number) * 1000.) / 100.);
86 return temp;
87}
88
90{
91 Int_t temp = static_cast<int>((number - GetSlot(number) * 1000. - GetCon(number) * 100.) / 10.);
92 return temp;
93}
94
96{
97 Int_t temp = static_cast<int>((number - GetSlot(number) * 1000. - GetCon(number) * 100. - GetDet(number) * 10.));
98 return temp;
99}
100
101void CreateMapTof400_Run9(std::string placementMapFile = "TOF400_PlaceMap_RUN9.txt",
102 std::string mapFile = "TOF400_StripMap_RUN9.txt",
103 std::string inlFile = "ListINLFiles_Run9.txt")
104{
105
106 //---------------------
107 // run 9
108
109 Int_t MapL[24] = {6, 9, 0, 3, 7, 10, 1, 4, 8, 11, 2, 5, 15, 12, 21, 18, 16, 13, 22, 19, 17, 14, 23, 20};
110 Int_t MapR[24] = {17, 14, 23, 20, 16, 13, 22, 19, 15, 12, 21, 18, 8, 11, 2, 5, 7, 10, 1, 4, 6, 9, 0, 3};
111
112 // for twisted
113 Int_t MapL_2[24] = {1, 14, 7, 4, 0, 13, 6, 3, 15, 12, 5, 2, 8, 11, 18, 21, 23, 10, 17, 20, 22, 9, 16, 19};
114 Int_t MapR_2[24] = {22, 9, 16, 19, 23, 10, 17, 20, 8, 11, 18, 21, 15, 12, 5, 2, 0, 13, 6, 3, 1, 14, 7, 4};
115
116 Int_t mapTwistDet[30];
117 for (Int_t i = 0; i < 30; i++) {
118 mapTwistDet[i] = 0;
119 if (i == 0 || i == 2 || i == 4 || i == 5 || i == 6 || i == 15 || i == 22 || i == 23 || i == 24 || i == 29)
120 mapTwistDet[i] = 1;
121 }
122
123 //--------------------------
124 // run 8/7/6
125 // Int_t MapR[24] = {3, 0, 9, 6, 4, 1, 10, 7, 5, 2, 11, 8, 18, 21, 12, 15, 19, 22, 13, 16, 20, 23, 14, 17};
126 // Int_t MapL[24] = {20, 23, 14, 17, 19, 22, 13, 16, 18, 21, 12, 15, 5, 2, 11, 8, 4, 1, 10, 7, 3, 0, 9, 6};
127
128 // old
129 // Int_t MapL[24] = {4, 1, 10, 7, 5, 2, 11, 8, 6, 3, 12, 9, 19, 22, 13, 16, 20, 23, 14, 17, 21, 0, 15, 18};
130 // Int_t MapR[24] = {21, 0, 15, 18, 20, 23, 14, 17, 19, 22, 13, 16, 6, 3, 12, 9, 5, 2, 11, 8, 4, 1, 10, 7};
131
132 // Crate 1 Left Side
133 crate = 0x0cd9141f; // TTVXS Left side slot 12
134 memset(slot, 0, sizeof(slot));
135
136 // Left crete #1
137 // box1 det 5-9 +++++
138 slot[4] = 0x06e9404b;
139 slot[5] = 0x06e9da9e;
140 slot[6] = 0x06e940b1;
141 slot[7] = 0x07a8deb2;
142 slot[8] = 0x06e9403e;
143 slot[9] = 0x06e9da86;
144 slot[10] = 0x076cae7a;
145 // box1 det 0-4 +++++
146 slot[14] = 0x06e9e4b0;
147 slot[15] = 0x076cae7b; // new
148 slot[16] = 0x076cad53;
149 slot[17] = 0x06e940be;
150 slot[18] = 0x076ccf5f;
151 slot[19] = 0x076ccf56;
152 slot[20] = 0x06e9da91;
153
154 // 1. Placement map
155 FillPlacementMap(placementMapFile);
156 FillInlList(inlFile);
157
158 Int_t Num = 14516;
159 cout << "Num = " << Num << endl;
160 cout << "GetSlot(Num) = " << GetSlot(Num) << " GetCon(Num) = " << GetCon(Num) << endl;
161 cout << "GetDet(Num) = " << GetDet(Num) << " GetSide(Num) = " << GetSide(Num) << endl;
162
163 // 1. Fill Strip Map
164 ffStrip.open(mapFile.c_str(), std::fstream::out);
165 if (ffStrip.fail()) {
166 cerr << "Cannot open the file " << mapFile << endl;
167 return;
168 }
169
170 // Left crete #1
171 // first number - slot 1-22, second number - connector (0 - 0..23, 1 - 24..47, 2 - 48..71
172 // third - detector , fourth - side (1,2 - L (Down) , 3,4 - R (Up))
173 Int_t MapDetL[kNDet][kNIt] = {
174 // coll1+++++++
175 {18204, 15103, 20102, 15201}, // det 0
176 {18014, 14013, 19012, 16011}, // det 1
177 {18124, 14223, 20022, 16121}, // det 2
178 {17234, 14133, 19132, 17031}, // det 3
179 {17144, 15043, 19242, 16241}, // det 4
180 // coll2+++++++
181 {9054, 5253, 8152, 5151}, // det 5
182 {9164, 6063, 8262, 5061}, // det 6
183 {9274, 6173, 8072, 4271}, // det 7
184 {10084, 6283, 7282, 4181}, // det 8
185 {10194, 7093, 7192, 4091}, // det 9
186 };
187
188 for (Int_t det = 0; det < kNDet; det++) {
189 for (Int_t i = 0; i < kNIt; i++) {
190 for (Int_t j = 0; j < 24; j++) {
191
192 /* cout << std::dec << "MapDet = " << MapDet[det][i] << "; Det = " << det << "; i = "
193 << i << "; j = " << j << "; slot = " << slot[GetSlot(MapDet[det][i])]
194 << "; chTDC = " << j + 24 * GetCon(MapDet[det][i]) << "; GetDet = " <<
195 GetDet(MapDet[det][i])
196 << "; GetSide = " << GetSide(MapDet[det][i]) << endl;
197 getchar();
198 */
199
200 ffStrip << std::hex << std::setfill('0') << std::setw(8) << slot[GetSlot(MapDetL[det][i])]
201 << std::setfill(' ') << '\t';
202 ffStrip << std::dec << j + 24 * GetCon(MapDetL[det][i]) << '\t';
203 ffStrip << GetDet(MapDetL[det][i]) << '\t';
204 Int_t ch = -1;
205 if (GetSide(MapDetL[det][i]) == 1 || GetSide(MapDetL[det][i]) == 2) {
206 ch = MapL[j];
207 if (mapTwistDet[det] == 1)
208 ch = MapL_2[j];
209 ffStrip << (ch + (GetSide(MapDetL[det][i]) - 1) * 24) << '\t';
210 // if (det < 5) ffStrip << 47 - (MapL[j] + (GetSide(MapDetL[det][i]) - 1)*24) << '\t';
211 // else ffStrip << MapL[j] + (GetSide(MapDetL[det][i]) - 1)*24 << '\t';
212 // ffStrip << MapL[j] + (GetSide(MapDet[det][i]) - 1)*24 << '\t';
213 ffStrip << 'R';
214 ffStrip << endl;
215 } else if (GetSide(MapDetL[det][i]) == 3 || GetSide(MapDetL[det][i]) == 4) {
216 ch = MapR[j];
217 if (mapTwistDet[det] == 1)
218 ch = MapR_2[j];
219 ffStrip << (ch + (GetSide(MapDetL[det][i]) - 3) * 24) << '\t';
220 // if (det < 5) ffStrip << 47 - (MapR[j] + (GetSide(MapDetL[det][i]) - 3)*24) << '\t';
221 // else ffStrip << MapR[j] + (GetSide(MapDetL[det][i]) - 3)*24 << '\t';
222 // ffStrip << MapR[j] + (GetSide(MapDet[det][i]) - 3)*24 << '\t';
223 ffStrip << 'L';
224 ffStrip << endl;
225 } else {
226 ffStrip << -1 << '\t';
227 // ffStrip << 'L';
228 ffStrip << endl;
229 }
230 }
231 }
232 }
233 ffStrip.close();
234
235 // ------------------------------------------------------------------------------------------------
236 // Crate #3 Box1 det 10-14, Box2 det 15-19
237 memset(slot, 0, sizeof(slot));
238 crate = 0x0a9ff045; // TTVXS slot 12
239
240 // box4 det 15-19 +++++
241 slot[4] = 0x0e7619ce;
242 slot[5] = 0x0e765cfa;
243 slot[6] = 0x0e75504a;
244 slot[7] = 0x0e7619cf;
245 slot[8] = 0x0e755014;
246 slot[9] = 0x0e755026;
247 slot[10] = 0x0e7619bc;
248 // box3 det 10-14 +++++
249 slot[14] = 0x0e75e9e1;
250 slot[15] = 0x0e765ced;
251 slot[16] = 0x0e7619bb;
252 slot[17] = 0x0e755038;
253 slot[18] = 0x0e75502f;
254 slot[19] = 0x0e755053;
255 slot[20] = 0x0e755041;
256
257 // 2. Fill Placement map
258 FillPlacementMap(placementMapFile);
259 FillInlList(inlFile);
260
261 // first number - slot 1-22, second number - connector (0 - 0..23, 1 - 24..47, 2 - 48..71
262 // third - detector , fourth - side (1,2 - L, 3,4 - R)
263 Int_t MapDetL2[kNDet][kNIt] = {
264 // Box1 det 10-14,
265 {20104, 16103, 18002, 14101}, // det 10
266 {20014, 16013, 18112, 14011}, // det 11
267 {19224, 17023, 17122, 15121}, // det 12
268 {19134, 16233, 17232, 15031}, // det 13
269 {19044, 15243, 18242, 14241}, // det 14
270 // box2 det 15-19
271 {9254, 10253, 8052, 5051}, // det 15
272 {9164, 6263, 7162, 4261}, // det 16
273 {10074, 6173, 7272, 5171}, // det 17
274 {10184, 6083, 8182, 4081}, // det 18
275 {9094, 5293, 8292, 4191}, // det 19
276 };
277
278 // 2. Fill Strip Map
279 ffStrip.open(mapFile.c_str(), std::fstream::in | std::fstream::out | std::fstream::app);
280 if (ffStrip.fail()) {
281 cerr << "2. Cannot open the file " << mapFile << endl;
282 return;
283 }
284
285 for (Int_t det = 0; det < kNDet; det++) {
286 for (Int_t i = 0; i < kNIt; i++) {
287 for (Int_t j = 0; j < 24; j++) {
288 /*
289 cout << std::dec << "MapDet = " << MapDet[det][i] << "; Det = " << det << "; i = " << i
290 << "; j = " << j << "; slot = " << slot[GetSlot(MapDet[det][i])]
291 << "; chTDC = " << j + 24 * GetCon(MapDet[det][i]) << "; GetDet = " <<
292 GetDet(MapDet[det][i])
293 << "; GetSide = " << GetSide(MapDet[det][i]) << endl;
294 getchar();
295 */
296
297 ffStrip << std::hex << std::setfill('0') << std::setw(8) << slot[GetSlot(MapDetL2[det][i])]
298 << std::setfill(' ') << '\t';
299 ffStrip << std::dec << j + 24 * GetCon(MapDetL2[det][i]) << '\t';
300 ffStrip << GetDet(MapDetL2[det][i]) + 10 << '\t';
301 Int_t ch = -1;
302 if (GetSide(MapDetL2[det][i]) == 1 || GetSide(MapDetL2[det][i]) == 2) {
303 ch = MapL[j];
304 if (mapTwistDet[GetDet(MapDetL2[det][i]) + 10] == 1)
305 ch = MapL_2[j];
306 ffStrip << (ch + (GetSide(MapDetL2[det][i]) - 1) * 24) << '\t';
307 // if (det >= 5) ffStrip << 47 - (MapL[j] + (GetSide(MapDetL2[det][i]) - 1)*24) << '\t';
308 // else ffStrip << MapL[j] + (GetSide(MapDetL2[det][i]) - 1)*24 << '\t';
309 // ffStrip << MapL[j] + (GetSide(MapDetL2[det][i]) - 1)*24 << '\t';
310 ffStrip << 'R';
311 ffStrip << endl;
312 } else if (GetSide(MapDetL2[det][i]) == 3 || GetSide(MapDetL2[det][i]) == 4) {
313 ch = MapR[j];
314 if (mapTwistDet[GetDet(MapDetL2[det][i]) + 10] == 1)
315 ch = MapR_2[j];
316 ffStrip << (ch + (GetSide(MapDetL2[det][i]) - 3) * 24) << '\t';
317 // if (det >= 5) ffStrip << 47 - (MapR[j] + (GetSide(MapDetL2[det][i]) - 3)*24) << '\t';
318 // else ffStrip << MapR[j] + (GetSide(MapDetL2[det][i]) - 3)*24 << '\t';
319 // ffStrip << MapR[j] + (GetSide(MapDetL2[det][i]) - 3)*24 << '\t';
320 ffStrip << 'L';
321 ffStrip << endl;
322 } else {
323 ffStrip << -1 << '\t';
324 // ffStrip << 'L';
325 ffStrip << endl;
326 }
327 }
328 }
329 }
330 ffStrip.close();
331
332 // ------------------------------------------------------------------------------------------------
333 // Crate #1 Box2 det 20-29
334 memset(slot, 0, sizeof(slot));
335 crate = 0xcd9687a; // TTVXS slot 12
336
337 // box2 det 24-29
338 slot[4] = 0x076caef6;
339 slot[5] = 0x06e9404a;
340 slot[6] = 0x076d180a;
341 slot[7] = 0x06e940b2;
342 slot[8] = 0x080c05e4;
343 slot[9] = 0x076d445b;
344 slot[10] = 0x07a96e8a;
345 // box2 det 20-24
346 slot[14] = 0x07a9fc6f;
347 slot[15] = 0x07a9b249;
348 slot[16] = 0x080bcc14;
349 slot[17] = 0x07a9b1d6;
350 slot[18] = 0x07a9e7d0;
351 slot[19] = 0x07a9fbf8;
352 slot[20] = 0x07a9eef2;
353
354 // 2. Fill Placement map
355 FillPlacementMap(placementMapFile);
356 FillInlList(inlFile);
357
358 // first number - slot 1-22, second number - connector (0 - 0..23, 1 - 24..47, 2 - 48..71
359 // third - detector , fourth - side (1,2 - L, 3,4 - R)
360 Int_t MapDetL3[kNDet][kNIt] = {
361 // Box1 det 20-24,
362 {20104, 18203, 17002, 14101}, // det 20
363 {20014, 18113, 16212, 15111}, // det 21
364 {19224, 18023, 16022, 14021}, // det 22
365 {19134, 17233, 16132, 14231}, // det 23
366 {19044, 17143, 15242, 15041}, // det 24
367 // box2 det 25-29
368 {10154, 6053, 8052, 4251}, // det 25
369 {10064, 5263, 8262, 4161}, // det 26
370 {9274, 6173, 7272, 4071}, // det 27
371 {9084, 6283, 8182, 5081}, // det 28
372 {9194, 7093, 7192, 5191}, // det 29
373 };
374
375 // 2. Fill Strip Map
376 ffStrip.open(mapFile.c_str(), std::fstream::in | std::fstream::out | std::fstream::app);
377 if (ffStrip.fail()) {
378 cerr << "2. Cannot open the file " << mapFile << endl;
379 return;
380 }
381
382 for (Int_t det = 0; det < kNDet; det++) {
383 for (Int_t i = 0; i < kNIt; i++) {
384 for (Int_t j = 0; j < 24; j++) {
385 /*
386 cout << std::dec << "MapDet = " << MapDet[det][i] << "; Det = " << det << "; i = " << i
387 << "; j = " << j << "; slot = " << slot[GetSlot(MapDet[det][i])]
388 << "; chTDC = " << j + 24 * GetCon(MapDet[det][i]) << "; GetDet = " <<
389 GetDet(MapDet[det][i])
390 << "; GetSide = " << GetSide(MapDet[det][i]) << endl;
391 getchar();
392 */
393
394 ffStrip << std::hex << std::setfill('0') << std::setw(8) << slot[GetSlot(MapDetL3[det][i])]
395 << std::setfill(' ') << '\t';
396 ffStrip << std::dec << j + 24 * GetCon(MapDetL3[det][i]) << '\t';
397 ffStrip << GetDet(MapDetL3[det][i]) + 20 << '\t';
398 Int_t ch = -1;
399 if (GetSide(MapDetL3[det][i]) == 1 || GetSide(MapDetL3[det][i]) == 2) {
400 ch = MapL[j];
401 if (mapTwistDet[GetDet(MapDetL2[det][i]) + 20] == 1)
402 ch = MapL_2[j];
403 ffStrip << (ch + (GetSide(MapDetL3[det][i]) - 1) * 24) << '\t';
404 // if (det >= 5) ffStrip << 47 - (MapL[j] + (GetSide(MapDetL3[det][i]) - 1)*24) << '\t';
405 // else ffStrip << MapL[j] + (GetSide(MapDetL3[det][i]) - 1)*24 << '\t';
406 // ffStrip << MapL[j] + (GetSide(MapDetL3[det][i]) - 1)*24 << '\t';
407 ffStrip << 'R';
408 ffStrip << endl;
409 } else if (GetSide(MapDetL3[det][i]) == 3 || GetSide(MapDetL3[det][i]) == 4) {
410 ch = MapR[j];
411 if (mapTwistDet[GetDet(MapDetL2[det][i]) + 20] == 1)
412 ch = MapR_2[j];
413 ffStrip << (ch + (GetSide(MapDetL3[det][i]) - 3) * 24) << '\t';
414 // if (det >= 5) ffStrip << 47 - (MapR[j] + (GetSide(MapDetL3[det][i]) - 3)*24) << '\t';
415 // else ffStrip << MapR[j] + (GetSide(MapDetL3[det][i]) - 3)*24 << '\t';
416 // ffStrip << MapR[j] + (GetSide(MapDetL3[det][i]) - 3)*24 << '\t';
417 ffStrip << 'L';
418 ffStrip << endl;
419 } else {
420 ffStrip << -1 << '\t';
421 // ffStrip << 'L';
422 ffStrip << endl;
423 }
424 }
425 }
426 }
427 ffStrip.close();
428}
Int_t GetSide(Int_t number)
TString convertUIntToFilename(UInt_t hexValue)
static const Int_t kNDet
void FillPlacementMap(std::string mappp)
fstream ffStrip
Int_t GetSlot(Int_t number)
void CreateMapTof400_Run9(std::string placementMapFile="TOF400_PlaceMap_RUN9.txt", std::string mapFile="TOF400_StripMap_RUN9.txt", std::string inlFile="ListINLFiles_Run9.txt")
static const Int_t kNIt
void FillInlList(std::string mappp)
Int_t GetCon(Int_t number)
fstream ff
Int_t GetDet(Int_t number)
UInt_t slot[kNSlot]
static const Int_t kNSlot
UInt_t crate
void memset(T *dest, T i, size_t num)
Copy to memory block [@dest, @dest+@num] num number of times the value of i of type @T with size @typ...
Definition L1Grid.h:27
int i
Definition P4_F32vec4.h:22
int Int_t
unsigned int UInt_t
const char * Data() const
static TString Format(const char *fmt,...)
Definition json.hpp:4446