5@date 2025-01-28T12:05:12+09:00
6@brief CATM readout pad generation package
9from .basepad
import TReadoutPadArray
10from .basepad
import generate_oblong_4_polygon
11from .basepad
import generate_regular_n_polygon
14def get_beam_tpc_array():
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)
20 base_padinfo = generate_regular_n_polygon(3, 4.74, 90,
False)
23 pad.add_basepad(base_padinfo)
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)
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)
38def get_recoil_tpc_array():
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)
44 base_padinfo = generate_regular_n_polygon(3, 6.9133974596, 90,
False)
47 pad.add_basepad(base_padinfo)
55 h = PADDISTANCE*np.sqrt(3)/2
61 pad.add_pads([x, -99, PADDISTANCE*j + zoffset], 0, 0, -90*((-1)**i), 0, gid)
66 h = PADDISTANCE*np.sqrt(3)/2
71 pad.add_pads([x, -99, PADDISTANCE/2+PADDISTANCE*j + zoffset], 0, 0, -90*((-1)**(i+1)), 0, gid)
77 h = PADDISTANCE*np.sqrt(3)/2
83 pad.add_pads([x, -99, PADDISTANCE*j + zoffset], 0, 0, -90*((-1)**(i+1)), 0, gid)
88 h = PADDISTANCE*np.sqrt(3)/2
93 pad.add_pads([x, -99, PADDISTANCE/2+PADDISTANCE*j + zoffset], 0, 0, -90*((-1)**(i)), 0, gid)
101 @brief get ssd pad array
102 @return ssd pad array (TReadoutPadArray)
104 base_padinfo = generate_oblong_4_polygon(90.6/8, 90.6,
'yz',
False)
107 pad.add_basepad(base_padinfo)
111 pad.add_pads([-255 , 54, -42.55 + 90.6/8*i - 90.6/2 ], 0, 0, 0, 0, gid)
115 pad.add_pads([-255 , 54, 65.45 + 90.6/8*i - 90.6/2 ], 0, 0, 0, 0, gid)
119 pad.add_pads([-255 , 54, 168.45 + 90.6/8*i - 90.6/2 ], 0, 0, 0, 0, gid)
124 pad.add_pads([-255 , -54, -42.55 + 90.6/8*i - 90.6/2 ], 0, 0, 0, 0, gid)
128 pad.add_pads([-255 , -54, 65.45 + 90.6/8*i - 90.6/2 ], 0, 0, 0, 0, gid)
132 pad.add_pads([-255 , -54, 168.45 + 90.6/8*i - 90.6/2 ], 0, 0, 0, 0, gid)
137 pad.add_pads([255 , 54, -42.55 + 90.6/8*i - 90.6/2 ], 0, 0, 0, 0, gid)
141 pad.add_pads([255 , 54, 65.45 + 90.6/8*i - 90.6/2 ], 0, 0, 0, 0, gid)
145 pad.add_pads([255 , 54, 168.45 + 90.6/8*i - 90.6/2 ], 0, 0, 0, 0, gid)
150 pad.add_pads([255 , -54, -42.55 + 90.6/8*i - 90.6/2 ], 0, 0, 0, 0, gid)
154 pad.add_pads([255 , -54, 65.45 + 90.6/8*i - 90.6/2 ], 0, 0, 0, 0, gid)
158 pad.add_pads([255 , -54, 168.45 + 90.6/8*i - 90.6/2 ], 0, 0, 0, 0, gid)
166 @brief check each pad configuration
168 @details draw pad alignment using matplotlib
171 @arg -pad select detector (beam tpc, recoil tpc, ssd). default is recoil-tpc
172 @arg -plane select draw plane. default is xz
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")
178 args = parser.parse_args()
179 pad_name: str = args.pad
180 plane: str = args.plane
182 if pad_name ==
'recoil-tpc':
183 pad_array = get_recoil_tpc_array()
185 elif pad_name ==
'beam-tpc':
186 pad_array = get_beam_tpc_array()
188 elif pad_name ==
'ssd':
189 pad_array = get_ssd_array()
192 print(
'experiment number does not exist')
194 if pad_array
is not None:
195 pad_array.show_pads(plane)