catm-python-lib
Loading...
Searching...
No Matches
catm.py
Go to the documentation of this file.
1"""!
2@file catm.py
3@version 1
4@author Fumitaka ENDO
5@date 2025-01-28T12:05:12+09:00
6@brief CATM readout pad generation package
7"""
8import numpy as np
9from .basepad import TReadoutPadArray
10from .basepad import generate_oblong_4_polygon
11from .basepad import generate_regular_n_polygon
12import argparse
13
14def get_beam_tpc_array():
15 """!
16 @brief get beam tpc pad array
17 @detail pad length withou gap = 5. number of pad = 22 (11 x 2)
18 @return beam tpc pad array (TReadoutPadArray)
19 """
20 base_padinfo = generate_regular_n_polygon(3, 4.74, 90, False)
21
22 pad = TReadoutPadArray()
23 pad.add_basepad(base_padinfo)
24 PADDISTANCE = 5
25 gid = 0
26
27 for i in range(11):
28 pad.add_pads([i*PADDISTANCE/2-12.5, -99, PADDISTANCE/np.sqrt(3)/2*((i-1)%2)-2.886751345948129-255], 0, 0, 180*((i-1)%2), 0, gid)
29 pad.id = gid
30 gid += 1
31 for i in range(11):
32 pad.add_pads([(i)*PADDISTANCE/2-12.5, -99, PADDISTANCE/np.sqrt(3)/2*((i)%2) + np.sqrt(3)*PADDISTANCE/2-2.886751345948129-255], 0, 0, 180*((i)%2), 0, gid)
33 pad.id = gid
34 gid += 1
35
36 return pad
37
38def get_recoil_tpc_array():
39 """!
40 @brief get recoil tpc pad array
41 @detail pad length withou gap = 7. number of pad = 4048 ( (23x2) x 88 )
42 @return recoil tpc pad array (TReadoutPadArray)
43 """
44 base_padinfo = generate_regular_n_polygon(3, 6.9133974596, 90, False)
45
46 pad = TReadoutPadArray()
47 pad.add_basepad(base_padinfo)
48 PADDISTANCE = 7
49 gid = 0
50 zoffset = -152.25
51
52 for j in range(44):
53
54 for i in range(23):
55 h = PADDISTANCE*np.sqrt(3)/2
56 if i%2 == 0:
57 x = -i*h -h/3
58 else:
59 x = -i*h -h/3 -h/3
60
61 pad.add_pads([x, -99, PADDISTANCE*j + zoffset], 0, 0, -90*((-1)**i), 0, gid)
62 pad.id = gid
63 gid += 1
64
65 for i in range(23):
66 h = PADDISTANCE*np.sqrt(3)/2
67 if i%2 == 0:
68 x = -i*h - h*2/3
69 else:
70 x = -i*h - h/3
71 pad.add_pads([x, -99, PADDISTANCE/2+PADDISTANCE*j + zoffset], 0, 0, -90*((-1)**(i+1)), 0, gid)
72 pad.id = gid
73 gid += 1
74
75 for j in range(44):
76 for i in range(23):
77 h = PADDISTANCE*np.sqrt(3)/2
78 if i%2 == 0:
79 x = i*h + h/3
80 else:
81 x = i*h + h*2/3
82
83 pad.add_pads([x, -99, PADDISTANCE*j + zoffset], 0, 0, -90*((-1)**(i+1)), 0, gid)
84 pad.id = gid
85 gid += 1
86
87 for i in range(23):
88 h = PADDISTANCE*np.sqrt(3)/2
89 if i%2 == 0:
90 x = i*h + h*2/3
91 else:
92 x = i*h + h/3
93 pad.add_pads([x, -99, PADDISTANCE/2+PADDISTANCE*j + zoffset], 0, 0, -90*((-1)**(i)), 0, gid)
94 pad.id = gid
95 gid += 1
96
97 return pad
98
99def get_ssd_array():
100 """!
101 @brief get ssd pad array
102 @return ssd pad array (TReadoutPadArray)
103 """
104 base_padinfo = generate_oblong_4_polygon(90.6/8, 90.6,'yz',False)
105
106 pad = TReadoutPadArray()
107 pad.add_basepad(base_padinfo)
108 gid = 0
109
110 for i in range(8):
111 pad.add_pads([-255 , 54, -42.55 + 90.6/8*i - 90.6/2 ], 0, 0, 0, 0, gid)
112 pad.id = gid
113 gid += 1
114 for i in range(8):
115 pad.add_pads([-255 , 54, 65.45 + 90.6/8*i - 90.6/2 ], 0, 0, 0, 0, gid)
116 pad.id = gid
117 gid += 1
118 for i in range(8):
119 pad.add_pads([-255 , 54, 168.45 + 90.6/8*i - 90.6/2 ], 0, 0, 0, 0, gid)
120 pad.id = gid
121 gid += 1
122
123 for i in range(8):
124 pad.add_pads([-255 , -54, -42.55 + 90.6/8*i - 90.6/2 ], 0, 0, 0, 0, gid)
125 pad.id = gid
126 gid += 1
127 for i in range(8):
128 pad.add_pads([-255 , -54, 65.45 + 90.6/8*i - 90.6/2 ], 0, 0, 0, 0, gid)
129 pad.id = gid
130 gid += 1
131 for i in range(8):
132 pad.add_pads([-255 , -54, 168.45 + 90.6/8*i - 90.6/2 ], 0, 0, 0, 0, gid)
133 pad.id = gid
134 gid += 1
135
136 for i in range(8):
137 pad.add_pads([255 , 54, -42.55 + 90.6/8*i - 90.6/2 ], 0, 0, 0, 0, gid)
138 pad.id = gid
139 gid += 1
140 for i in range(8):
141 pad.add_pads([255 , 54, 65.45 + 90.6/8*i - 90.6/2 ], 0, 0, 0, 0, gid)
142 pad.id = gid
143 gid += 1
144 for i in range(8):
145 pad.add_pads([255 , 54, 168.45 + 90.6/8*i - 90.6/2 ], 0, 0, 0, 0, gid)
146 pad.id = gid
147 gid += 1
148
149 for i in range(8):
150 pad.add_pads([255 , -54, -42.55 + 90.6/8*i - 90.6/2 ], 0, 0, 0, 0, gid)
151 pad.id = gid
152 gid += 1
153 for i in range(8):
154 pad.add_pads([255 , -54, 65.45 + 90.6/8*i - 90.6/2 ], 0, 0, 0, 0, gid)
155 pad.id = gid
156 gid += 1
157 for i in range(8):
158 pad.add_pads([255 , -54, 168.45 + 90.6/8*i - 90.6/2 ], 0, 0, 0, 0, gid)
159 pad.id = gid
160 gid += 1
161
162 return pad
163
164def check_pad_view():
165 """!
166 @brief check each pad configuration
167
168 @details draw pad alignment using matplotlib
169
170 CLI argument:
171 @arg -pad select detector (beam tpc, recoil tpc, ssd). default is recoil-tpc
172 @arg -plane select draw plane. default is xz
173 """
174 parser = argparse.ArgumentParser()
175 parser.add_argument("-pad", help="pad type (beam-tpc or recoil-tpc or ssd) default = recoil-tpc", type=str, default="recoil-tpc")
176 parser.add_argument("-plane", help="choose draw plane. default = xz", type=str, default="xz")
177
178 args = parser.parse_args()
179 pad_name: str = args.pad
180 plane: str = args.plane
181
182 if pad_name == 'recoil-tpc':
183 pad_array = get_recoil_tpc_array()
184
185 elif pad_name == 'beam-tpc':
186 pad_array = get_beam_tpc_array()
187
188 elif pad_name == 'ssd':
189 pad_array = get_ssd_array()
190
191 else:
192 print('experiment number does not exist')
193
194 if pad_array is not None:
195 pad_array.show_pads(plane)
pad information array
Definition basepad.py:112