Analysis Software
Documentation for sPHENIX simulation software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
InttMapping.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file InttMapping.cc
1 #include "InttMapping.h"
2 #include "InttFelixMap.h"
3 
6 
7 #include <Event/packet.h>
8 
9 #include <utility> // for pair
10 
11 const std::map<int, int> InttNameSpace::Packet_Id =
12  {
13  {3001, 0},
14  {3002, 1},
15  {3003, 2},
16  {3004, 3},
17  {3005, 4},
18  {3006, 5},
19  {3007, 6},
20  {3008, 7},
21 };
22 
24 {
25  packetid -= 3001;
26 
27  if (packetid < 0)
28  {
29  return 8;
30  }
31  if (packetid > 7)
32  {
33  return 8;
34  }
35 
36  return packetid;
37 }
38 
39 struct InttNameSpace::RawData_s InttNameSpace::RawFromPacket(int const _i, int const _n, Packet* _p)
40 {
41  struct RawData_s s;
42 
43  if (!_p)
44  {
45  return s;
46  }
47 
48  // s.felix_server = _i;
49  std::map<int, int>::const_iterator itr = Packet_Id.find(_i);
50  s.felix_server = itr != Packet_Id.end() ? itr->second : -1;
51  s.felix_channel = _p->iValue(_n, "FEE");
52  s.chip = (_p->iValue(_n, "CHIP_ID") + 25) % 26;
53  s.channel = _p->iValue(_n, "CHANNEL_ID");
54 
55  return s;
56 }
57 
59 {
61  s.felix_channel = h->get_fee();
62  s.chip = (h->get_chip_id() + 25) % 26;
63  s.channel = h->get_channel_id();
64 }
65 
66 struct InttNameSpace::Online_s InttNameSpace::ToOnline(struct Offline_s const& _s)
67 {
68  struct Online_s s;
69  int n_ldr = _s.layer < 5 ? 12 : 16;
70 
71  s.lyr = _s.layer - 3;
72  // s.ldr = (7 * n_ldr / 4 - _s.ladder_phi + (_s.layer % 2 ? n_ldr - 1 : 0)) % n_ldr;
73  s.ldr = (7 * n_ldr / 4 - _s.ladder_phi) % n_ldr;
74 
75  s.arm = _s.ladder_z / 2;
76  switch (_s.ladder_z)
77  {
78  case 1:
79  s.chp = _s.strip_y + 13 * (_s.strip_x < 128);
80  break;
81 
82  case 0:
83  s.chp = _s.strip_y + 13 * (_s.strip_x < 128) + 5;
84  break;
85 
86  case 2:
87  s.chp = 12 - _s.strip_y + 13 * !(_s.strip_x < 128);
88  break;
89 
90  case 3:
91  s.chp = 4 - _s.strip_y + 13 * !(_s.strip_x < 128);
92  break;
93 
94  default:
95  break;
96  }
97 
98  s.chn = (_s.strip_x < 128) ? _s.strip_x : 255 - _s.strip_x;
99 
100  return s;
101 }
102 
103 struct InttNameSpace::Offline_s InttNameSpace::ToOffline(struct Online_s const& _s)
104 {
105  struct Offline_s s;
106  int n_ldr = _s.lyr < 2 ? 12 : 16;
107 
108  s.layer = _s.lyr + 3;
109  //--s.ladder_phi = (7 * n_ldr / 4 - _s.ldr + (_s.lyr % 2 ? 0 : n_ldr - 1)) % n_ldr;
110  s.ladder_phi = (7 * n_ldr / 4 - _s.ldr) % n_ldr;
111 
112  s.ladder_z = 2 * _s.arm + (_s.chp % 13 < 5);
113  switch (s.ladder_z)
114  {
115  case 1:
116  s.strip_y = _s.chp % 13;
117  break;
118 
119  case 0:
120  s.strip_y = _s.chp % 13 - 5;
121  break;
122 
123  case 2:
124  s.strip_y = 12 - (_s.chp % 13);
125  break;
126 
127  case 3:
128  s.strip_y = 4 - (_s.chp % 13);
129  break;
130 
131  default:
132  break;
133  }
134 
135  s.strip_x = (_s.arm == (_s.chp / 13)) ? 255 - _s.chn : _s.chn;
136 
137  return s;
138 }
139 
140 struct InttNameSpace::RawData_s InttNameSpace::ToRawData(struct Online_s const& _s)
141 {
142  struct RawData_s s;
143 
145  s.chip = _s.chp;
146  s.channel = _s.chn;
147 
148  return s;
149 }
150 
151 struct InttNameSpace::Online_s InttNameSpace::ToOnline(struct RawData_s const& _s)
152 {
153  struct Online_s s;
154 
156  s.chp = _s.chip;
157  s.chn = _s.channel;
158 
159  return s;
160 }
161 
162 struct InttNameSpace::RawData_s InttNameSpace::ToRawData(struct Offline_s const& _s)
163 {
164  return ToRawData(ToOnline(_s));
165 }
166 
167 struct InttNameSpace::Offline_s InttNameSpace::ToOffline(struct RawData_s const& _s)
168 {
169  return ToOffline(ToOnline(_s));
170 }
171 
173 {
174  if (lhs.felix_server != rhs.felix_server)
175  {
176  return lhs.felix_server < rhs.felix_server;
177  }
178  if (lhs.felix_channel != rhs.felix_channel)
179  {
180  return lhs.felix_channel < rhs.felix_channel;
181  }
182  if (lhs.chip != rhs.chip)
183  {
184  return lhs.chip < rhs.chip;
185  }
186  if (lhs.channel != rhs.channel)
187  {
188  return lhs.channel < rhs.channel;
189  }
190 
191  return false;
192 }
193 
195 {
196  if (lhs.lyr != rhs.lyr)
197  {
198  return lhs.lyr < rhs.lyr;
199  }
200  if (lhs.ldr != rhs.ldr)
201  {
202  return lhs.ldr < rhs.ldr;
203  }
204  if (lhs.arm != rhs.arm)
205  {
206  return lhs.arm < rhs.arm;
207  }
208  if (lhs.chp != rhs.chp)
209  {
210  return lhs.chp < rhs.chp;
211  }
212  if (lhs.chn != rhs.chn)
213  {
214  return lhs.chn < rhs.chn;
215  }
216 
217  return false;
218 }
219 
221 {
222  if (lhs.layer != rhs.layer)
223  {
224  return lhs.layer < rhs.layer;
225  }
226  if (lhs.ladder_phi != rhs.ladder_phi)
227  {
228  return lhs.ladder_phi < rhs.ladder_phi;
229  }
230  if (lhs.ladder_z != rhs.ladder_z)
231  {
232  return lhs.ladder_z < rhs.ladder_z;
233  }
234  if (lhs.strip_x != rhs.strip_x)
235  {
236  return lhs.strip_x < rhs.strip_x;
237  }
238  if (lhs.strip_y != rhs.strip_y)
239  {
240  return lhs.strip_y < rhs.strip_y;
241  }
242 
243  return false;
244 }
245 
246 // Eigen::Affine3d InttNameSpace::GetTransform(TTree* tree, struct InttNameSpace::Offline_s const& _s)
247 //{
248 // Eigen::Affine3d t;
249 //
250 // if(!tree)return t;
251 //
252 // TBranch* b = tree->GetBranch("transform");
253 // if(!b)return t;
254 //
255 // ROOT::Math::Transform3D** m = (ROOT::Math::Transform3D**)b->GetAddress();
256 // if(!m)return t;
257 //
258 // Int_t i = _s.ladder_phi;
259 // switch(_s.layer)
260 // {
261 // case 3:
262 // i += 0;
263 // break;
264 //
265 // case 4:
266 // i += 12;
267 // break;
268 //
269 // case 5:
270 // i += 24;
271 // break;
272 //
273 // case 6:
274 // i += 40;
275 // break;
276 //
277 // default:
278 // break;
279 // }
280 // i *= 4;
281 // i += _s.ladder_z;
282 //
283 // tree->GetEntry(i);
284 // (*m)->GetTransformMatrix(t);
285 //
286 // //Debugging
287 // TBranch* b_ = tree->GetBranch("hitsetkey");
288 // if(!b_)return t;
289 //
290 // Int_t* k_ = (Int_t*)b_->GetAddress();
291 // if(!k_)return t;
292 //
293 // std::cout << "hitsetkey: " << *k_ << std::endl;
294 // std::cout << "entry: " << i << std::endl;
295 //
296 // return t;
297 // }
298 //
299 // Eigen::Vector4d InttNameSpace::GetLocalPos(struct InttNameSpace::Offline_s const& _s)
300 //{
301 // Eigen::Vector4d u = {0.0, 0.0, 0.0, 1.0};
302 //
303 // //strip_y corresponds to z in local frame of sensor
304 // u(2) = (2.0 * _s.strip_y + 1.0) / ((_s.ladder_z % 2) ? 10.0 : 16.0) - 0.5;
305 // u(2) *= (_s.ladder_z % 2) ? 100.0 : 128.0;
306 //
307 // //strip_x corresponds to x in local frame of sensor
308 // u(0) = (2.0 * _s.strip_x + 1.0) / 512.0 - 0.5;
309 // u(0) *= 19.968;
310 //
311 // //Offset by ladder thickness (to be implemented)
312 // u(1) = 0.0;
313 //
314 // return u;
315 // }
316 
318 {
319  if (lhs.felix_server != rhs.felix_server)
320  {
321  return false;
322  }
323  if (lhs.felix_channel != rhs.felix_channel)
324  {
325  return false;
326  }
327  if (lhs.chip != rhs.chip)
328  {
329  return false;
330  }
331  if (lhs.channel != rhs.channel)
332  {
333  return false;
334  }
335 
336  return true;
337 }
338 
340 {
341  if (lhs.lyr != rhs.lyr)
342  {
343  return false;
344  }
345  if (lhs.ldr != rhs.ldr)
346  {
347  return false;
348  }
349  if (lhs.arm != rhs.arm)
350  {
351  return false;
352  }
353  if (lhs.chp != rhs.chp)
354  {
355  return false;
356  }
357  if (lhs.chn != rhs.chn)
358  {
359  return false;
360  }
361 
362  return true;
363 }
364 
366 {
367  if (lhs.layer != rhs.layer)
368  {
369  return false;
370  }
371  if (lhs.ladder_phi != rhs.ladder_phi)
372  {
373  return false;
374  }
375  if (lhs.ladder_z != rhs.ladder_z)
376  {
377  return false;
378  }
379  if (lhs.strip_x != rhs.strip_x)
380  {
381  return false;
382  }
383  if (lhs.strip_y != rhs.strip_y)
384  {
385  return false;
386  }
387 
388  return true;
389 }
390 
392 {
393  return !(lhs == rhs);
394 }
395 
397 {
398  return !(lhs == rhs);
399 }
400 
402 {
403  return !(lhs == rhs);
404 }
405 
407 {
408  if (lhs.felix_server != rhs.felix_server)
409  {
410  return lhs.felix_server < rhs.felix_server;
411  }
412  if (lhs.felix_channel != rhs.felix_channel)
413  {
414  return lhs.felix_channel < rhs.felix_channel;
415  }
416  if (lhs.chip != rhs.chip)
417  {
418  return lhs.chip < rhs.chip;
419  }
420  if (lhs.channel != rhs.channel)
421  {
422  return lhs.channel < rhs.channel;
423  }
424 
425  return false;
426 }
427 
429 {
430  if (lhs.lyr != rhs.lyr)
431  {
432  return lhs.lyr < rhs.lyr;
433  }
434  if (lhs.ldr != rhs.ldr)
435  {
436  return lhs.ldr < rhs.ldr;
437  }
438  if (lhs.arm != rhs.arm)
439  {
440  return lhs.arm < rhs.arm;
441  }
442  if (lhs.chp != rhs.chp)
443  {
444  return lhs.chp < rhs.chp;
445  }
446  if (lhs.chn != rhs.chn)
447  {
448  return lhs.chn < rhs.chn;
449  }
450 
451  return false;
452 }
453 
455 {
456  if (lhs.layer != rhs.layer)
457  {
458  return lhs.layer < rhs.layer;
459  }
460  if (lhs.ladder_phi != rhs.ladder_phi)
461  {
462  return lhs.ladder_phi < rhs.ladder_phi;
463  }
464  if (lhs.ladder_z != rhs.ladder_z)
465  {
466  return lhs.ladder_z < rhs.ladder_z;
467  }
468  if (lhs.strip_x != rhs.strip_x)
469  {
470  return lhs.strip_x < rhs.strip_x;
471  }
472  if (lhs.strip_y != rhs.strip_y)
473  {
474  return lhs.strip_y < rhs.strip_y;
475  }
476 
477  return false;
478 }
479 
481 {
482  return rhs < lhs;
483 }
484 
486 {
487  return rhs < lhs;
488 }
489 
491 {
492  return rhs < lhs;
493 }
494 
496 {
497  return !(lhs < rhs);
498 }
499 
501 {
502  return !(lhs < rhs);
503 }
504 
506 {
507  return !(lhs < rhs);
508 }
509 
511 {
512  return !(lhs > rhs);
513 }
514 
516 {
517  return !(lhs > rhs);
518 }
519 
521 {
522  return !(lhs > rhs);
523 }