-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPositions_MARC0.py
More file actions
83 lines (65 loc) · 3.24 KB
/
Positions_MARC0.py
File metadata and controls
83 lines (65 loc) · 3.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
####################
# Positions of MARC0 by loading fiducials
# 20250122
#
####################
fidu = []
import csv
import numpy as np
with open('MARC0_6_Fiducial_solutions.csv', newline='') as csvfile:
reader = csv.reader(csvfile, delimiter=",")
for row in reader:
fidu.append(row)
flist = []
#[NumberOfFidu,[ProbeCS],[FiduCoord],[FitParams],creationdate]
for i in range(len(fidu)):
frow = [eval(fidu[i][j]) for j in range(len(fidu[0]))]
flistrow = [frow[0],[frow[1],frow[2],frow[3]],[frow[4],frow[5],frow[6]],[frow[7],frow[8],frow[9],frow[10],frow[11],frow[12]],frow[13]]
flist.append(flistrow)
# In MARC0_4,MARC0_5 and MARC0_6 only F2,F5,F6 are commonly accesilble, others, Fidu does not fit.
# Center of Magnet obtained from F2 and F5
Fidulst = ["F1","F2","F3","F4","F5","F6"]
Fidudict = {
"F1":1, "F2":2, "F3":3, "F4":4, "F5":5, "F6":6
}
Fidumiddledict = {
"F1":1, "F2":2, "F3":3, "F4":4, "F5":5, "F6":6
}
countR = [[flist[k][0] for k in range(len(fidu))].count(i+1) for i in range(6)] #count how often identical fiducial occurs in file (repeated measurements)
for i in range(6):
if countR[i]>0:
fidu_ProbeCS_2D = np.array([np.array([flist[j][2][0],flist[j][2][1]]) for j in range(len(flist)) if flist[j][0] == i+1])
fidu_fit2D = np.array([np.array([flist[j][3][1],flist[j][3][2]]) for j in range(len(flist)) if flist[j][0] == i+1])
fiduposlst = fidu_ProbeCS_2D+fidu_fit2D
#print(np.std(fiduposlst,axis=0))
#print(np.mean(fiduposlst,axis=0))
Fidudict[Fidulst[i]] = np.mean(fiduposlst,axis=0)
#fidu_ProbeCS_2 = np.array([flist[i][2][0],flist[i][2][1]])
#fidu_fit2D = np.array([flist[i][3][1],flist[i][3][2]])
#for j in range(2):
# fidupos2Dlst.append(fidu_ProbeCS_2D+fidu_fit2D)
# fidumeanpos = sum(np.array(fidupos2Dlst))/countR
# print(fidu_ProbeCS_2D+fidu_fit2D)
normF5F6=np.linalg.norm((Fidudict["F5"]-Fidudict["F6"]))
normF2F6=np.linalg.norm((Fidudict["F2"]-Fidudict["F6"]))
F56 = (Fidudict["F5"]-Fidudict["F6"])/normF5F6
F26 = (Fidudict["F2"]-Fidudict["F6"])/normF2F6
vM3 = np.array([-1.,0.])
print("pi/2-F5F6.F2F6",np.pi/2.-np.arccos(np.dot(np.transpose(F56),F26)))
print("deg F5F6.F2F6",180/np.pi*np.arccos(np.dot(np.transpose(F56),F26)))
print("pi/2-M3.F2F6",np.pi/2.-np.arccos(np.dot(np.transpose(vM3),F26)))
print("deg M3.F2F6",180/np.pi*np.arccos(np.dot(np.transpose(vM3),F26)))
print("M3.F5F6",np.arccos(np.dot(np.transpose(vM3),F56)))
print("deg M3.F5F6",180/np.pi*np.arccos(np.dot(np.transpose(vM3),F56)))
offset_magvolume = np.array([0,-197.5/2.])
offset_enter = np.array([-100,-147.3])
rot = np.array([[np.cos(np.pi/4),-np.sin(np.pi/4)],[ np.sin(np.pi/4),np.cos(np.pi/4)]])
rotinv = np.array([[np.cos(np.pi/4), np.sin(np.pi/4)],[-np.sin(np.pi/4),np.cos(np.pi/4)]])
for i in range(6):
if countR[i]>0:
Fidudict[Fidulst[i]] = Fidudict[Fidulst[i]] + offset_magvolume
Fidudict[Fidulst[i]] = np.matmul(rot,Fidudict[Fidulst[i]])
Fidudict[Fidulst[i]] = Fidudict[Fidulst[i]] + offset_enter
Fidumiddledict[Fidulst[i]] = np.matmul(rotinv,Fidudict[Fidulst[i]])
Center = .5*(Fidumiddledict["F2"]+Fidumiddledict["F5"])
#rot = np.array([[np.cos(np.pi/8),-np.sin(np.pi/8)],[np.sin(np.pi/8),np.cos(np.pi/8)]])