new file: detector_geometry.dat new file: eloss_calculations/Eloss.py new file: eloss_calculations/alpha_lookup_20MeV.dat new file: eloss_calculations/alpha_lookup_6.0MeV.dat new file: eloss_calculations/make_eloss_table.C new file: eloss_calculations/proton_lookup_20MeV.dat new file: eloss_calculations/proton_lookup_6.0MeV.dat new file: grid_generate.py new file: shadowplay.py
56 lines
2.3 KiB
Python
56 lines
2.3 KiB
Python
import math
|
|
|
|
def wrap_phi(angle):
|
|
"""Wraps an angle to be between -180 and +180 degrees"""
|
|
return (angle + 180) % 360 - 180
|
|
|
|
# The name of the file you want to generate
|
|
filename = "detector_geometry.dat"
|
|
|
|
# Open the file in 'write' mode
|
|
with open(filename, "w") as f:
|
|
|
|
# --- 1. SX3 Geometry ---
|
|
f.write("=========================================================\n")
|
|
f.write(" SX3 BARREL AZIMUTHAL ANGLES (Degrees) \n")
|
|
f.write("=========================================================\n")
|
|
f.write(" Det ID | Strip 0 | Strip 1 | Strip 2 | Strip 3 | Det Center\n")
|
|
f.write("---------------------------------------------------------\n")
|
|
|
|
for det_id in range(12): # Assuming 12 barrel detectors
|
|
strips = []
|
|
for stripF in range(4):
|
|
stripF_rev = 3 - stripF
|
|
num = (2 * stripF_rev - 3) * 40.30
|
|
den = 8.0 * 88.0 * math.cos(math.radians(15.0))
|
|
beta_n = 15.0 + math.degrees(math.atan2(num, den))
|
|
phi_n = ((-det_id + 0.5) * 30.0 + beta_n) + 45.0
|
|
strips.append(wrap_phi(phi_n))
|
|
|
|
det_center = wrap_phi(((-det_id + 0.5) * 30.0 + 15.0) + 45.0)
|
|
f.write(f" {det_id:2d} | {strips[0]:6.2f} | {strips[1]:6.2f} | {strips[2]:6.2f} | {strips[3]:6.2f} | {det_center:6.2f}\n")
|
|
|
|
|
|
# --- 2. PC Wire Geometry ---
|
|
f.write("\n\n=========================================================\n")
|
|
f.write(" PROPORTIONAL COUNTER WIRE ANGLES (Degrees) \n")
|
|
f.write("=========================================================\n")
|
|
f.write(" Wire ID | Anode (-z) | Anode (+z) | Cathode (-z) | Cathode (+z)\n")
|
|
f.write("----------------------------------------------------------------\n")
|
|
|
|
k = 360.0 / 24.0
|
|
offset_a1 = -6*k - 3*k
|
|
offset_c1 = -4*k - 2*k - (360.0/48.0)
|
|
wireShift = 3
|
|
offset_a2 = offset_a1 + wireShift*k
|
|
offset_c2 = offset_c1 - wireShift*k
|
|
|
|
for i in range(24):
|
|
phi_a1 = wrap_phi(-k * i + offset_a1)
|
|
phi_a2 = wrap_phi(-k * i + offset_a2)
|
|
phi_c1 = wrap_phi(k * i + offset_c1)
|
|
phi_c2 = wrap_phi(k * i + offset_c2)
|
|
|
|
f.write(f" {i:2d} | {phi_a1:7.2f} | {phi_a2:7.2f} | {phi_c1:7.2f} | {phi_c2:7.2f}\n")
|
|
|
|
print(f"Success! The geometry lookup table has been saved to '{filename}'.") |