forked from yihuai-gao/CommandCenter
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathStabilityPowerSweepMeasurements.m
154 lines (150 loc) · 3.65 KB
/
StabilityPowerSweepMeasurements.m
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
% Loading relevant hardware
hwp = Drivers.APTMotor.instance(27002771, [0, 360]);
apd1 = Drivers.Counter.instance('APD1', 'CounterSync');
ard = Drivers.ArduinoServo.instance('localhost', 2);
pm = Drivers.PM100.instance();
hwp.home;
while hwp.Moving
pause(0.1)
end
%%
% Calibrate the laser power
Blue_sweep = linspace(0, 180, 180); % filter wheel angle
Green_sweep = linspace(1, 30, 60); % mW (OD 2)
Res_hwp_sweep = linspace(0, 360, 360); % half wave plate angle
blue_power = NaN(1, length(Blue_sweep));
green_power = NaN(1, length(Green_sweep));
res_power = NaN(1, length(Res_hwp_sweep));
%% Blue
ard.angle = 0;
pm.set_wavelength(450);
b = 1;
for Blue = Blue_sweep
ard.angle = Blue;
blue_power(b) = pm.get_power('MW')*1000; % uW
pause(0.1);
b = b + 1;
end
figure()
plot(Blue_sweep, blue_power)
xlabel('Filter Wheel Angle / deg')
ylabel('Blue Laser Power / uW')
%% Green
pm.set_wavelength(515);
laser = Sources.Cobolt_PB.instance();
%laser.set_armed(true);
%laser.on;
g = 1;
for Green = Green_sweep
laser.set_power(Green);
pause(0.1)
green_power(g) = pm.get_power('MW')*1000;
g = g + 1;
end
figure()
plot(Green_sweep, green_power)
xlabel('Power at Laser Source / mW')
ylabel('Green Laser Power / uW')
%% Resonant
pm.set_wavelength(619);
r = 1;
res_laser = Sources.Msquared.instance();
%%
for Res = Res_hwp_sweep
hwp.move(Res);
while hwp.Moving
pause(0.1)
end
res_power(r) = pm.get_power('MW')*1000;
r = r + 1;
end
figure()
plot(Res_hwp_sweep, res_power)
xlabel('Half Waveplate Angle / deg')
ylabel('Resonant Laser Power / uW')
%% Power Sweep
% Setting sweep variables
Blue_sweep = linspace(10, 50, 5); % filter wheel angle
Green_sweep = linspace(5, 15, 5); % mW
Res_hwp_sweep = linspace(86, 136, 5); % half wave plate angle
%%
% Setting Counter
apd1.dwell = 0.01;
apd1.update_rate = 0.001;
apd1.WindowMax = 10;
%% Blue Laser Power Sweep
r = 1;
for Res_hwp = Res_hwp_sweep
hwp.move(Res_hwp);
while hwp.Moving
pause(0.1)
end
b = 1;
for Blue = Blue_sweep
ard.angle = Blue;
pause(50)
Counts_blue(b, r).yData = double(apd1.singleShot(apd1.dwell, 5000000));
figure()
histogram(Counts_blue(b, r).yData*apd1.dwell*1e-3, 'Binwidth', 1)
b = b + 1;
end
r = r + 1;
end
%% Green laser power sweep
laser = Sources.Cobolt_PB.instance();
r = 1;
for Res_hwp = Res_hwp_sweep
hwp.move(Res_hwp);
while hwp.Moving
pause(0.1)
end
g = 1;
for Green = Green_sweep
laser.set_power(Green);
pause(50)
Counts_green(g, r).yData = double(apd1.singleShot(apd1.dwell, 500000));
figure()
hist(Counts_green(g, r).yData*apd1.dwell*1e-3)
g = g + 1;
end
r = r + 1;
end
%% Green Fluorescence
g = 1;
for Green = Green_sweep
laser.set_power(Green);
pause(50)
Counts_green_only(g).yData = double(apd1.singleShot(apd1.dwell, 500000));
figure()
histogram(Counts_green_only(g).yData*apd1.dwell*1e-3, 'BinWidth', 1)
g = g + 1;
end
%% Resonant excitation only
r = 1;
for Res_hwp = Res_hwp_sweep
hwp.move(Res_hwp);
while hwp.Moving
pause(0.1)
end
pause(50)
Counts_res(r).yData = double(apd1.singleShot(apd1.dwell, 500000));
figure()
histogram(Counts_res(r).yData*apd1.dwell*1e-3, 'BinWidth', 1)
set(gca, 'Yscale', 'log')
r = r + 1;
end
%% Blue fluorescence
b = 1;
for Blue = Blue_sweep
ard.angle = Blue;
pause(50)
Counts_blue_only(b).yData = double(apd1.singleShot(apd1.dwell, 100000));
figure()
histogram(Counts_blue_only(b).yData*apd1.dwell*1e-3, 'BinWidth', 1)
b = b + 1;
end
%%
apd1.delete;
ard.delete;
hwp.delete;
pm.delete;