-
Notifications
You must be signed in to change notification settings - Fork 0
/
Calcul HiLo zebrafish.py
79 lines (66 loc) · 3.21 KB
/
Calcul HiLo zebrafish.py
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
import numpy as np
""" Calculs des différents paramètres pour le microscope HiLo, distance en mm"""
""" Les valeurs choisies sont actuellement celles du macro HiLo, mais elles seront modifiées au fil de la
progression du microscope """
# Objective
ObjectiveNA = 0.5
ObjectiveWorkingDistance = 3.5
ObjectiveNA = 1.0
ObjectiveWorkingDistance = 2
FocalOfLensHabituallyUsedWithObjective = 180
ObjectiveMagnification = 20
FocalObjective = FocalOfLensHabituallyUsedWithObjective/ObjectiveMagnification
ObjectiveDiameterEntrancePupil = 2*FocalObjective*ObjectiveNA
FocalOfTubeLens = 180
FieldNumber = 26.5
FieldNumber = 22
Magnification = FocalOfTubeLens/FocalObjective
ObjectiveMaximumFOV = FieldNumber/Magnification
# Camera
CameraDiagonal = 18.826
CameraMaximumFOV = CameraDiagonal/Magnification
CameraPixelSize = 6.5 # µm
# Suite objective
ObjectiveINV = ObjectiveNA*(ObjectiveMaximumFOV*0.5)
ObjectiveNAWithINV = ObjectiveINV/(ObjectiveDiameterEntrancePupil*0.5)
SourceMinAngleAtObjective = np.degrees(ObjectiveNAWithINV)
# Illuminator system, see "Code illuminateur.py, The last lens before objective is at this moment L1 but it will
# probably be the optotune lens"
L1Focal = 40
L1Diameter = 30
IlluminatorMagnification = 2.85714 # Determine with "Code illuminateur.py"
DistanceBetweenL1andObj = 120
# Source (Diffuser)
SourceDiameter = 3.15
SourceDiameterToFillEntrancePupil = ObjectiveDiameterEntrancePupil/IlluminatorMagnification
SourceDiameterAtEntrancePupil = SourceDiameter*IlluminatorMagnification
SourceMaxAngleAtObjective = np.degrees(np.sin(((L1Diameter-SourceDiameterAtEntrancePupil)/2)/DistanceBetweenL1andObj))
DiffuserNA = 1
# Fiber and Speckles
Wavelength = 488*10**-6
FiberRadius = 0.75
FiberNA = 0.5
AverageGrainSize = Wavelength/(2*FiberNA)
MaxGrainNumber = np.pi*(FiberRadius/AverageGrainSize)**2
# DistanceBetweenFiberDifuser = ?
# Resolution
IndexBetweenObjectiveAndSample = 1.333 # water
ResolutionLateralTheoretical = 1.22*Wavelength/ObjectiveNA
ResolutionAxialTheoretical = IndexBetweenObjectiveAndSample*(Wavelength/ObjectiveNA**2+ResolutionLateralTheoretical/(ObjectiveMagnification*ObjectiveNA))
print("FocalObjective = {} mm".format(FocalObjective),
"ObjectiveDiameterEntrancePupil = {} mm".format(ObjectiveDiameterEntrancePupil),
"Magnification = {}".format(Magnification),
"ObjectiveMaximumFOV = {} mm".format(ObjectiveMaximumFOV),
"CameraMaximumFOV = {} mm".format(CameraMaximumFOV),
"ObjectiveINV = {}".format(ObjectiveINV),
"ObjectiveNAWithINV = {}".format(ObjectiveNAWithINV),
"SourceMinAngleAtObjective = {}°".format(SourceMinAngleAtObjective),
"IlluminatorMagnification = {}".format(IlluminatorMagnification),
"SourceOriginalDiameterToFillEntrancePupil = {} mm".format(SourceDiameterToFillEntrancePupil),
"SourceDiameterAtEntrancePupil = {} mm".format(SourceDiameterAtEntrancePupil),
"SourceMaxAngleAtObjective = {}°".format(SourceMaxAngleAtObjective),
"AverageGrainSize = {} nm".format(AverageGrainSize*10**6),
"MaxGrainNumber = {}".format(MaxGrainNumber),
"ResolutionLateralTheoretical = {} µm".format(ResolutionLateralTheoretical*10**3),
"ResolutionAxialTheoretical = {} µm".format(ResolutionAxialTheoretical*10**3),
sep="\n")