ATLAS Offline Software
idx.h
Go to the documentation of this file.
1 /*
2 Copyright (C) 2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #ifndef TRIGT2BEAMSPOT_IDX_H
6 #define TRIGT2BEAMSPOT_IDX_H
7 
8 #include <cstdint> //for int8_t
9 namespace PESA{
10 
11 // Ordering of the monomials in Bx, By, tx, ty powers,
12 // array indices correspond to power of those variables
13 constexpr std::int8_t g_order[3][3][3][3] = {
14 
15 {
16  {{ 0, 1, 2 }, // Bx**0, By**0, tx**0, ty**0..ty**2
17  { 3, 4, -1 }, // Bx**0, By**0, tx**1, ty**0..ty**2
18  { 5, -1, -1 }}, // Bx**0, By**0, tx**2, ty**0..ty**2
19 
20  {{ 6, 7, -1 }, // Bx**0, By**1, tx**0, ty**0..ty**2
21  { 8, -1, -1 }, // Bx**0, By**1, tx**1, ty**0..ty**2
22  { -1, -1, -1 }}, // Bx**0, By**1, tx**2, ty**0..ty**2
23 
24  {{ 9, -1, -1 }, // Bx**0, By**2, tx**0, ty**0..ty**2
25  { -1, -1, -1 }, // Bx**0, By**2, tx**1, ty**0..ty**2
26  { -1, -1, -1 }}, // Bx**0, By**2, tx**2, ty**0..ty**2
27 },
28 
29 {
30  {{ 10, 11, -1 }, // Bx**1, By**0, tx**0, ty**0..ty**2
31  { 12, -1, -1 }, // Bx**1, By**0, tx**1, ty**0..ty**2
32  { -1, -1, -1 }}, // Bx**1, By**0, tx**2, ty**0..ty**2
33 
34  {{ 13, -1, -1 }, // Bx**1, By**1, tx**0, ty**0..ty**2
35  { -1, -1, -1 }, // Bx**1, By**1, tx**1, ty**0..ty**2
36  { -1, -1, -1 }}, // Bx**1, By**1, tx**2, ty**0..ty**2
37 
38  {{ -1, -1, -1 }, // Bx**1, By**2, tx**0, ty**0..ty**2
39  { -1, -1, -1 }, // Bx**1, By**2, tx**1, ty**0..ty**2
40  { -1, -1, -1 }}, // Bx**1, By**2, tx**2, ty**0..ty**2
41 },
42 
43 {
44  {{ 14, -1, -1 }, // Bx**2, By**0, tx**0, ty**0..ty**2
45  { -1, -1, -1 }, // Bx**2, By**0, tx**1, ty**0..ty**2
46  { -1, -1, -1 }}, // Bx**2, By**0, tx**2, ty**0..ty**2
47 
48  {{ -1, -1, -1 }, // Bx**2, By**1, tx**0, ty**0..ty**2
49  { -1, -1, -1 }, // Bx**2, By**1, tx**1, ty**0..ty**2
50  { -1, -1, -1 }}, // Bx**2, By**1, tx**2, ty**0..ty**2
51 
52  {{ -1, -1, -1 }, // Bx**2, By**2, tx**0, ty**0..ty**2
53  { -1, -1, -1 }, // Bx**2, By**2, tx**1, ty**0..ty**2
54  { -1, -1, -1 }}, // Bx**2, By**2, tx**2, ty**0..ty**2
55 }
56 };
57 
58 // number of possible combinations of all powers,
59 // 15 is for squares, 1 for log
60 constexpr unsigned g_size = 15 + 1;
61 
62 // Ordering of the monomials in omegax, omegay powers,
63 // array indices correspond to power of those variables
64 constexpr std::int8_t g_order2[3][3] = {
65  { 0, 1, 2 }, // Bx**0, By**0, tx**0, ty**0..ty**2
66  { 3, 4, -1 }, // Bx**0, By**0, tx**1, ty**0..ty**2
67  { 5, -1, -1 }, // Bx**0, By**0, tx**2, ty**0..ty**2
68 };
69 
70 // number of possible combinations of omega powers
71 constexpr unsigned g_size2 = 6;
72 
73 constexpr unsigned nbins =
74  // two extra bins to count number of tracks and beam_size*n_tracks
75  g_size*g_size2 // all polynomial coefficients
76  + 1 // Sum(z0)
77  + 1 // Sum(z0**2)
78  + 1 // Sum(1)
79  + 1 // Sum(beam_size)
80  ;
81 
82 
83 
84 template<unsigned Bx, unsigned By, unsigned tx, unsigned ty, unsigned ox, unsigned oy>
85 consteval int idx()
86 {
87  constexpr int i1 = g_order[Bx][By][tx][ty];
88  constexpr int i2 = g_order2[ox][oy];
89  static_assert(i1 >= 0 && i2 >= 0, "idx(): invalid power combination");
90  return i1 * g_size2 + i2;
91 }
92 
93 
94 } // namespace
95 
96 
97 #endif
PESA::idx
consteval int idx()
Definition: idx.h:85
PESA::nbins
constexpr unsigned nbins
Definition: idx.h:73
PESA
Local tools.
Definition: idx.h:9
PESA::g_size2
constexpr unsigned g_size2
Definition: idx.h:71
PESA::g_order2
constexpr std::int8_t g_order2[3][3]
Definition: idx.h:64
PESA::g_order
constexpr std::int8_t g_order[3][3][3][3]
Definition: idx.h:13
TileDCSDataPlotter.tx
tx
Definition: TileDCSDataPlotter.py:880
PESA::g_size
constexpr unsigned g_size
Definition: idx.h:60