diff --git a/qos/+data_taking/+public/+scripts/singleQubitBringup.m b/qos/+data_taking/+public/+scripts/singleQubitBringup.m index 51d499a..9555e89 100644 --- a/qos/+data_taking/+public/+scripts/singleQubitBringup.m +++ b/qos/+data_taking/+public/+scripts/singleQubitBringup.m @@ -61,7 +61,7 @@ % r_fr, the qubit dip frequency, it's exact value changes with qubit state and readout power, % the value of r_fr is just a reference frequency for automatic % routines, a close value is sufficient. - setQSettings('r_fr',readoutFreqs(ii),qNames{ii}); + setQSettings('r_fr',readoutFreqs(ii),qNames{ii}); % also set r_freq is the frequency of the readout pulse, it is slightly % different than the qubit dip frequency after optimization, but at the beginning of the % meausrement, set it to the qubit dip frequency is OK. @@ -120,12 +120,12 @@ %% s21_01('qubit','q2','freq',[],'notes','','gui',true,'save',true); %% -ramsey('qubit','q9','mode','dp',... % available modes are: df01, dp and dz - 'time',[0:50:30e3],'detuning',[2]*1e6,... - 'dataTyp','P','notes','','gui',true,'save',true); +ramsey('qubit','q9_1k','mode','dp',... % available modes are: df01, dp and dz + 'time',[0:10:2e3],'detuning',[0]*1e6,... + 'dataTyp','P','phaseOffset',pi/2,'notes','','gui',true,'save',true); %% -spin_echo('qubit','q8','mode','dp',... % available modes are: df01, dp and dz - 'time',[0:50:30e3],'detuning',[1]*1e6,... +spin_echo('qubit','q9_1','mode','dp',... % available modes are: df01, dp and dz + 'time',[0:50:30e3],'detuning',[2]*1e6,... 'notes','','gui',true,'save',true); %% T1_1('qubit','q3','biasAmp',[0],'biasDelay',20,'time',[0:100:10e3],... @@ -149,10 +149,10 @@ 'gui',true,'save',true) %% % delayTime = [[0:1:20],[21:2:50],[51:5:100],[101:10:500],[501:50:3000]]; -delayTime = [0:20:2e3]; -zPulseRipple('qubit','q8',... +delayTime = [-300:10:2e3]; +zPulseRipple('qubit','q9_1k',... 'delayTime',delayTime,... - 'zAmp',2e4,'gui',true,'save',true); + 'zAmp',3e3,'gui',true,'save',true); %% state = '|0>-i|1>'; data = singleQStateTomo('qubit','q2','reps',2,'state',state); @@ -187,7 +187,8 @@ tuneup.xyGateAmpTuner('qubit',q,'gateTyp','X','AE',true,'gui',true,'save','askMe'); tuneup.iq2prob_01('qubit',q,'numSamples',1e4,'gui',true,'save','askMe'); %% fully auto callibration -qubits = {'q7','q8'}; +% qubits = {'q7','q8'}; +qubits = {'q9_1k'}; for ii = 1:numel(qubits) q = qubits{ii}; setQSettings('r_avg',2000,q); diff --git a/qos/+data_taking/+public/+xmon/ramsey.m b/qos/+data_taking/+public/+xmon/ramsey.m index 81d3cf6..2c1f66b 100644 --- a/qos/+data_taking/+public/+xmon/ramsey.m +++ b/qos/+data_taking/+public/+xmon/ramsey.m @@ -6,7 +6,7 @@ % dz: detune by z detune pulse % % <_o_> = ramsey('qubit',_c&o_,'mode',m... -% 'time',[_i_],'detuning',<_f_>,... +% 'time',[_i_],'detuning',<_f_>,'phaseOffset',<_f_>,... % 'notes',<_c_>,'gui',<_b_>,'save',<_b_>) % _f_: float % _i_: integer @@ -24,19 +24,19 @@ import qes.util.processArgs import data_taking.public.xmon.* - args = processArgs(varargin,{'mode', 'df01','dataTyp','P',... + args = processArgs(varargin,{'mode', 'df01','dataTyp','P','phaseOffset',0,... 'gui',false,'notes','','detuning',0,'save',true}); switch args.mode case 'df01' - e = ramsey_df01('qubit',args.qubit,'dataTyp',args.dataTyp,... + e = ramsey_df01('qubit',args.qubit,'dataTyp',args.dataTyp,'phaseOffset',args.phaseOffset,... 'time',args.time,'detuning',args.detuning,... 'notes',args.notes,'gui',args.gui,'save',args.save); case 'dp' - e = ramsey_dp('qubit',args.qubit,'dataTyp',args.dataTyp,... + e = ramsey_dp('qubit',args.qubit,'dataTyp',args.dataTyp,'phaseOffset',args.phaseOffset,... 'time',args.time,'detuning',args.detuning,... 'notes',args.notes,'gui',args.gui,'save',args.save); case 'dz' - e = ramsey_dz('qubit',args.qubit,'dataTyp',args.dataTyp,... + e = ramsey_dz('qubit',args.qubit,'dataTyp',args.dataTyp,'phaseOffset',args.phaseOffset,... 'time',args.time,'detuning',args.detuning,... 'notes',args.notes,'gui',args.gui,'save',args.save); otherwise diff --git a/qos/+data_taking/+public/+xmon/ramsey_df01.m b/qos/+data_taking/+public/+xmon/ramsey_df01.m index ce9b830..55cae19 100644 --- a/qos/+data_taking/+public/+xmon/ramsey_df01.m +++ b/qos/+data_taking/+public/+xmon/ramsey_df01.m @@ -2,7 +2,7 @@ % ramsey: ramsey oscillation, detune by detuning iq frequency(sideband frequency) % % <_o_> = ramsey_df01('qubit',_c&o_,... -% 'time',[_i_],'detuning',<[_f_]>,... +% 'time',[_i_],'detuning',<[_f_]>,'phaseOffset',<_f_>,... % 'dataTyp',<'_c_'>,... % S21 or P % 'notes',<_c_>,'gui',<_b_>,'save',<_b_>) % _f_: float @@ -23,7 +23,7 @@ import sqc.* import sqc.op.physical.* - args = util.processArgs(varargin,{'dataTyp','P','detuning',0,'gui',false,'notes','','save',true}); + args = util.processArgs(varargin,{'phaseOffset',0,'dataTyp','P','detuning',0,'gui',false,'notes','','save',true}); q = data_taking.public.util.getQubits(args,{'qubit'}); X2 = gate.X2p(q); @@ -41,9 +41,11 @@ throw(MException('QOS_ramsey_df01:unrcognizedDataTyp','unrecognized dataTyp %s, available dataTyp options are P and S21.', args.dataTyp)); end + X2_ = copy(X2); + X2.phase = args.phaseOffset; function procFactory(delay) I.ln = delay; - proc = X2*I*X2; + proc = X2_*I*X2; proc.Run(); R.delay = proc.length; end diff --git a/qos/+data_taking/+public/+xmon/ramsey_dp.m b/qos/+data_taking/+public/+xmon/ramsey_dp.m index b973a4f..de03a45 100644 --- a/qos/+data_taking/+public/+xmon/ramsey_dp.m +++ b/qos/+data_taking/+public/+xmon/ramsey_dp.m @@ -3,7 +3,7 @@ % detune by changing the second pi/2 pulse tracking frame % % <_o_> = ramsey_dp('qubit',_c&o_,... -% 'time',[_i_],'detuning',<[_f_]>,... +% 'time',[_i_],'detuning',<[_f_]>,'phaseOffset',<_f_>,... % 'dataTyp',<'_c_'>,... % S21 or P % 'notes',<_c_>,'gui',<_b_>,'save',<_b_>) % _f_: float @@ -24,7 +24,7 @@ import sqc.* import sqc.op.physical.* - args = util.processArgs(varargin,{'dataTyp','P','gui',false,'notes','','detuning',0,'save',true}); + args = util.processArgs(varargin,{'phaseOffset',0,'dataTyp','P','gui',false,'notes','','detuning',0,'save',true}); q = data_taking.public.util.getQubits(args,{'qubit'}); X2 = op.XY2p(q,0); @@ -50,7 +50,7 @@ X2_ = copy(X2); function procFactory(delay) I.ln = delay; - X2.phase = -2*pi*detuning.val*delay/daSamplingRate; + X2.phase = -2*pi*detuning.val*delay/daSamplingRate+args.phaseOffset; proc = X2_*I*X2; proc.Run(); R.delay = proc.length; diff --git a/qos/+data_taking/+public/+xmon/ramsey_dz.m b/qos/+data_taking/+public/+xmon/ramsey_dz.m index c9f97df..7bdf187 100644 --- a/qos/+data_taking/+public/+xmon/ramsey_dz.m +++ b/qos/+data_taking/+public/+xmon/ramsey_dz.m @@ -2,7 +2,7 @@ % ramsey_dz: ramsey oscillation, detune by z detune pulse % % <_o_> = ramsey_dz('qubit',_c&o_,... -% 'time',[_i_],'detuning',<[_f_]>,... +% 'time',[_i_],'detuning',<[_f_]>,'phaseOffset',<_f_>,... % 'dataTyp',<'_c_'>,... % S21 or P % 'notes',<_c_>,'gui',<_b_>,'save',<_b_>) % _f_: float @@ -24,7 +24,7 @@ import sqc.* import sqc.op.physical.* - args = util.processArgs(varargin,{'detuning',0,'dataTyp','P',... + args = util.processArgs(varargin,{'phaseOffset',0,'detuning',0,'dataTyp','P',... 'gui',false,'notes','','detuning',0,'save',true}); q = data_taking.public.util.getQubits(args,{'qubit'}); @@ -44,9 +44,11 @@ 'unrecognized dataTyp %s, available dataTyp options are P and S21.', args.dataTyp)); end + X2_ = copy(X2); + X2.phase = args.phaseOffset; function procFactory(delay) I.ln = delay; - proc = X2*I*X2; + proc = X2_*I*X2; proc.Run(); R.delay = proc.length; end diff --git a/qos/+data_taking/+public/+xmon/zPulseRipple.m b/qos/+data_taking/+public/+xmon/zPulseRipple.m index 3e40ba2..9d32eb4 100644 --- a/qos/+data_taking/+public/+xmon/zPulseRipple.m +++ b/qos/+data_taking/+public/+xmon/zPulseRipple.m @@ -21,6 +21,8 @@ import qes.* import sqc.* import sqc.op.physical.* + + Z_LENGTH = 10000; args = util.processArgs(varargin,{'dataTyp','P','gui',false,'notes','','detuning',0,'save',true}); q = data_taking.public.util.getQubits(args,{'qubit'}); @@ -29,17 +31,25 @@ Y2 = gate.Y2p(q); I1 = gate.I(q); I2 = gate.I(q); - Z = op.zRect(q); - Z.ln = 6000; - Z.amp = args.zAmp; + if args.zAmp ~= 0 + Z = op.zRect(q); + Z.ln = Z_LENGTH; + Z.amp = args.zAmp; + else + Z = gate.I(q); + Z.ln = Z_LENGTH; + end + R = measure.resonatorReadout_ss(q); R.state = 2; maxDelayTime = max(args.delayTime); function procFactory(delay) - I1.ln = delay; + % I1.ln = delay; + I1.ln = Z_LENGTH+delay; I2.ln = maxDelayTime - delay; - proc = Z*I1*X2*I2*Y2; + % proc = Z*I1*X2*I2*Y2; + proc = Z.*(I1*X2*I2*Y2); % now minus delay is allowed proc.Run(); R.delay = proc.length; end diff --git a/qos/+qes/+hwdriver/+sync/@awg/SendWave.m b/qos/+qes/+hwdriver/+sync/@awg/SendWave.m index 1f2aa6a..7a7347a 100644 --- a/qos/+qes/+hwdriver/+sync/@awg/SendWave.m +++ b/qos/+qes/+hwdriver/+sync/@awg/SendWave.m @@ -233,8 +233,19 @@ function SendWave(obj,WaveformObj) % SendWave(...); setChnlOutputDelay(...,200); % Run(..); % now delay is 100*4 ns, not 200*4 ns, % 200*4 ns will be the delay amount of next Run. - % this is a da driver bug, might be corrected in a future version. + % this is a da driver bug, might be corrected in a future version. + +% persistent ax; +% if isempty(ax) +% h = figure(); +% ax = axes('parent',h); +% end + if WaveformObj.iq + +% hold(ax,'on'); +% plot(ax,WaveformData{1}(1:50));plot(ax,WaveformData{2}(1:50)); +% obj.interfaceobj.setChnlOutputDelay(WaveformObj.awgchnl(1),output_delay_count(1)); obj.interfaceobj.setChnlOutputDelay(WaveformObj.awgchnl(2),output_delay_count(2)); obj.interfaceobj.SendWave(WaveformObj.awgchnl(1),WaveformData{1}); diff --git a/qos/+toolbox/+data_tool/+fitting/+scripts/sinDecayFit.m b/qos/+toolbox/+data_tool/+fitting/+scripts/sinDecayFit.m new file mode 100644 index 0000000..571c7fd --- /dev/null +++ b/qos/+toolbox/+data_tool/+fitting/+scripts/sinDecayFit.m @@ -0,0 +1,154 @@ +% data: x, y + + LeastOscN = 15; + [A,B,C,D,freq,td,ci] = toolbox.data_tool.fitting.sinDecayFit_auto(x,y); + h = figure('Position',[0,0,1000,500],'Color',[1,1,1]); + plot(x,y,'bo','MarkerSize',10,'MarkerEdgeColor','b','MarkerFaceColor','b'); + hold on; + if ischar(A) + disp(A); + xlabel('t','FontSize',28); + ylabel('P','FontSize',28); + set(gcf,'Color',[1,1,1]); + set(gca,'LineWidth',2,'FontSize',24); + title('automatic fitting failed','FontSize',16); + else + home; + disp('Formula: A +B*(exp(-t/td).*(sin(2*pi*freq*t+D)+C))'); + fprintf('A = %f B = %f C = %f D = %f freq = %f td = %fnS\n ',A,B,C,D,freq,td); + fprintf('Confidence interval(95%%): A = [%f,%f] B = [%f,%f] C = [%f,%f] D = [%f,%f] freq = [%f,%f] td = [%f,%f]nS\n ',ci(1,1),ci(1,2),ci(2,1),ci(2,2),ci(3,1),ci(3,2),ci(4,1),ci(4,2),ci(5,1),ci(5,2),ci(6,1),ci(6,2)); + fprintf('Unit of f: 1/(unit of t); Unit of td: unit of t'); + L = length(x); + step = (x(end)-x(1))/L/50; % 50 times sampling density + xf = x(1):step:x(end); + yf = toolbox.data_tool.fitting.SinusoidalDecayTilt([A, B,C,D,freq,td],xf); + + plot(xf,yf,'r-','LineWidth',2); + legend('data','fit'); + xlabel('t','FontSize',28); + ylabel('P','FontSize',28); + title(['Frequency: ',num2str(freq*1000,'%3.1f'),' 1/(unit of t); td: ',num2str(td,'%4.1f'),' (unit of t)'],'FontSize',16); + set(gcf,'Color',[1,1,1]); + set(gca,'LineWidth',2,'FontSize',24); + end + + button = questdlg('If this automatic fitting failed, you may try fitting by helping me to find the proper initial values for the parameters:'); + if strcmp(button,'Yes') + close(h); + h = figure('Position',[0,0,1000,500],'Color',[1,1,1]); + plot(x,y,'b-o','MarkerSize',8,'MarkerEdgeColor','b','MarkerFaceColor','b'); + title('Waiting... Adjust the figure for good eye sight if needed.','Color','b','FontSize',16); + pause(3); + title('What is the y value of the oscillation after full decay, click to indicate, only Y value is important.','FontSize',16); + [xi,A0] = ginput(1); + title('What is the oscillation amplitude at time zero, click two points to indicate, only Y values are important.','FontSize',16); + [xi,yi] = ginput(2); + B0 = abs(yi(1)-yi(2)); + title('What is the oscillation period, click two points to indicate, only X values are important.','FontSize',16); + [xi,yi] = ginput(2); + T = abs(xi(1)-xi(2)); + freq0 = 1/T; + title('After what time duration the oscillation decayed to 0.37 of the maximum amplitude, click two points to indicate, only X values are important.','FontSize',16); + [xi,yi] = ginput(2); + T = abs(xi(1)-xi(2)); + if T > 0 + td0 = T; + else + td0 = []; + end + close(h); + choice = questdlg('Choose fit mode:', ... + 'Fit mode', ... + 'Varied frequency Exp','Constant frequency Gaussian','Constant frequency Exp','Constant frequency Exp'); + % Handle response + switch choice + case 'Constant frequency Exp' + [A, B,C,D,freq,td,ci] = toolbox.data_tool.fitting.sinDecayFitTilt(x,y,... + A0,[0.9*A0,1.1*A0],... + 0.5*B0,[0.3*B0,0.7*B0],... + 0.5,[0.3,0.7],... + pi/2,[-pi,pi],... + freq0,[0.7*freq0,1.4*freq0],... + td0,[0.7*td0,1.4*td0]); +% [B,C,D,freq,td,ci] = toolbox.data_tool.fitting.sinDecayFit_m(x,y,... +% 0.5*B0,[0.3*B0,0.7*B0],... +% A0/(0.5*B0),sort([0.7*A0/(0.5*B0),1.4*A0/(0.5*B0)]),... +% pi/2,[-pi,pi],... +% freq0,[0.7*freq0,1.4*freq0],... +% td0,[0.7*td0,1.4*td0]); + if ischar(A) + disp(A); + else + home; + disp('Formula: A +B*(exp(-t/td).*(sin(2*pi*freq*t+D)+C))'); + fprintf('B = %f C = %f D = %f freq = %f td = %fnS\n ',B,C,D,freq,td); + fprintf('Confidence interval(95%%): B = [%f,%f] C = [%f,%f] D = [%f,%f] freq = [%f,%f] td = [%f,%f]nS\n ',... + ci(1,1),ci(1,2),ci(2,1),ci(2,2),ci(3,1),ci(3,2),ci(4,1),ci(4,2),ci(5,1),ci(5,2)); + fprintf('Unit of f: 1/(unit of t); Unit of td: unit of t'); + h = figure('Position',[0,0,1000,500],'Color',[1,1,1]); + L = length(x); + step = (x(end)-x(1))/L/50; % 50 times sampling density + xf = x(1):step:x(end); + yf = toolbox.data_tool.fitting.SinusoidalDecayTilt([A,B,C,D,freq,td],xf); + plot(x,y,'bo','MarkerSize',10,'MarkerEdgeColor','b','MarkerFaceColor','b'); + hold on; + plot(xf,yf,'r-','LineWidth',2); + legend('data','fit'); + xlabel('t','FontSize',28); + ylabel('P','FontSize',28); + title(['Frequency: ',num2str(freq*1000,'%3.1f'),' 1/(unit of t); td: ',num2str(td,'%4.1f'),' (unit of t)'],'FontSize',16); + set(gcf,'Color',[1,1,1]); + set(gca,'LineWidth',2,'FontSize',24); + end + case 'Constant frequency Gaussian' + [A,B,C,D,freq,td,ci] = SinDecayFit_G(x,y,LeastOscN,freq0,td0,A0,B0); + if ischar(A) + disp(A); + else + home; + disp('Formula: A +B*(exp(-t/td).*(sin(2*pi*freq*t+D)+C))'); + fprintf('A = %f B = %f C = %f D = %f freq = %f td = %fnS\n ',A,B,C,D,freq,td); + fprintf('Confidence interval(95%%): A = [%f,%f] B = [%f,%f] C = [%f,%f] D = [%f,%f] freq = [%f,%f] td = [%f,%f]nS\n ',ci(1,1),ci(1,2),ci(2,1),ci(2,2),ci(3,1),ci(3,2),ci(4,1),ci(4,2),ci(5,1),ci(5,2),ci(6,1),ci(6,2)); + fprintf('Unit of f: 1/(unit of t); Unit of td: unit of t'); + h = figure('Position',[0,0,1000,500],'Color',[1,1,1]); + L = length(x); + step = (x(end)-x(1))/L/50; % 50 times sampling density + xf = x(1):step:x(end); + yf = SinusoidalDecay_G([A,B,C,D,freq,td],xf); + plot(x,y,'bo','MarkerSize',10,'MarkerEdgeColor','b','MarkerFaceColor','b'); + hold on; + plot(xf,yf,'r-','LineWidth',2); + legend('data','fit'); + xlabel('t','FontSize',28); + ylabel('P','FontSize',28); + title(['Frequency: ',num2str(freq*1000,'%3.1f'),' 1/(unit of t); td: ',num2str(td,'%4.1f'),' (unit of t)'],'FontSize',16); + set(gcf,'Color',[1,1,1]); + set(gca,'LineWidth',2,'FontSize',24); + end + case 'Varied frequency' + [A,B,C,D,freq,td,varf,ci] = SinDecayFit_varf(x,y,LeastOscN,freq0,td0,A0,B0); + if ischar(A) + disp(A); + else + home; + disp('Formula: A +B*(exp(-t/td).*(sin(2*pi*(freq+varf*t)*t+D)+C))'); + fprintf('A = %f B = %f C = %f D = %f freq = %f varf = %f td = %fnS\n ',A,B,C,D,freq,varf,td); + fprintf('Confidence interval(95%%): A = [%f,%f] B = [%f,%f] C = [%f,%f] D = [%f,%f] freq = [%f,%f] varf = [%f,%f] td = [%f,%f]nS\n ',ci(1,1),ci(1,2),ci(2,1),ci(2,2),ci(3,1),ci(3,2),ci(4,1),ci(4,2),ci(5,1),ci(5,2),ci(7,1),ci(7,2),ci(6,1),ci(6,2)); + fprintf('Unit of f: 1/(unit of t); Unit of td: unit of t'); + h = figure('Position',[0,0,1000,500],'Color',[1,1,1]); + L = length(x); + step = (x(end)-x(1))/L/50; % 50 times sampling density + xf = x(1):step:x(end); + yf = SinusoidalDecay_varf([A,B,C,D,freq,td,varf],xf,xf(1)); + plot(x,y,'bo','MarkerSize',10,'MarkerEdgeColor','b','MarkerFaceColor','b'); + hold on; + plot(xf,yf,'r-','LineWidth',2); + legend('data','fit'); + xlabel('t','FontSize',28); + ylabel('P','FontSize',28); + title(['Frequency: ',num2str(freq*1000,'%3.1f'),' 1/(unit of t); td: ',num2str(td,'%4.1f'),' (unit of t)'],'FontSize',16); + set(gcf,'Color',[1,1,1]); + set(gca,'LineWidth',2,'FontSize',24); + end + end + end \ No newline at end of file diff --git a/qos/+toolbox/+data_tool/+fitting/SinusoidalDecayNoTilt.m b/qos/+toolbox/+data_tool/+fitting/SinusoidalDecayNoTilt.m new file mode 100644 index 0000000..8daa12a --- /dev/null +++ b/qos/+toolbox/+data_tool/+fitting/SinusoidalDecayNoTilt.m @@ -0,0 +1,12 @@ +function [P]=SinusoidalDecayNoTilt(Coefficients,t) +% Sinusoidal Decay +% +% Yulin Wu, SC5,IoP,CAS. wuyulin@ssc.iphy.ac.cn/mail4ywu@gmail.com +% $Revision: 1.0 $ $Date: 2012/03/28 $ + +B = Coefficients(1); +C = Coefficients(2); +D = Coefficients(3); +freq = Coefficients(4); +td = Coefficients(5); +P = B*(exp(-(t/td)).*(sin(2*pi*freq*t+D)+C)); \ No newline at end of file diff --git a/qos/+toolbox/+data_tool/+fitting/SinusoidalDecayTilt.m b/qos/+toolbox/+data_tool/+fitting/SinusoidalDecayTilt.m new file mode 100644 index 0000000..3ef36be --- /dev/null +++ b/qos/+toolbox/+data_tool/+fitting/SinusoidalDecayTilt.m @@ -0,0 +1,20 @@ +function [P]=SinusoidalDecayTilt(Coefficients,t) +% Sinusoidal Decay +% Parameter estimation: +% A: value of P at large x: P(end) or mean(P(end-##,end)) +% B: max(P) - min(P) +% C: A - (max(P) + min(P))/2 +% D: 0 +% freq: use fft to detect +% td: ... +% +% Yulin Wu, SC5,IoP,CAS. wuyulin@ssc.iphy.ac.cn/mail4ywu@gmail.com +% $Revision: 1.0 $ $Date: 2012/03/28 $ + +A = Coefficients(1); +B = Coefficients(2); +C = Coefficients(3); +D = Coefficients(4); +freq = Coefficients(5); +td = Coefficients(6); +P = A +B*(exp(-t/td).*(sin(2*pi*freq*t+D)+C)); \ No newline at end of file diff --git a/qos/+toolbox/+data_tool/+fitting/sinDecayFit.m b/qos/+toolbox/+data_tool/+fitting/sinDecayFit.m index c5cff1d..71bb4bd 100644 --- a/qos/+toolbox/+data_tool/+fitting/sinDecayFit.m +++ b/qos/+toolbox/+data_tool/+fitting/sinDecayFit.m @@ -1,4 +1,10 @@ -function [A,B,C,D,freq,td,varargout] = sinDecayFit(t,P,A0,B0,C0,D0,freq0,td0) +function [A,B,C,D,freq,td,varargout] = sinDecayFit(t,P,... + A0,ABnd,... + B0,BBnd,... + C0,CBnd,... + D0,DBnd,... + freq0,freqBnd,... + td0,tdBnd) % SinDecayFit fits curve P = P(t) with a Sinusoidal Decay function: % P = A +B*(exp(-t/td)*(sin(2*pi*freq*t+D)+C)); % @@ -14,8 +20,11 @@ Coefficients(4) = D0; Coefficients(5) = freq0; Coefficients(6) = td0; +lb = [ABnd(1),BBnd(1),CBnd(1),DBnd(1),freqBnd(1),tdBnd(1)]; +ub = [ABnd(2),BBnd(2),CBnd(2),DBnd(2),freqBnd(2),tdBnd(2)]; + for ii = 1:3 - [Coefficients,~,residual,~,~,~,J] = lsqcurvefit(@SinusoidalDecay,Coefficients,t,P); + [Coefficients,~,residual,~,~,~,J] = lsqcurvefit(@SinusoidalDecay,Coefficients,t,P,lb,ub); end A = Coefficients(1); B = Coefficients(2); @@ -47,4 +56,6 @@ D = Coefficients(4); freq = Coefficients(5); td = Coefficients(6); -P = A +B*(exp(-t/td).*(sin(2*pi*freq*t+D)+C)); \ No newline at end of file +P = A +B*(exp(-t/td).*(sin(2*pi*freq*t+D)+C)); + + diff --git a/qos/+toolbox/+data_tool/+fitting/sinDecayFit_m.m b/qos/+toolbox/+data_tool/+fitting/sinDecayFitNoTilt.m similarity index 76% rename from qos/+toolbox/+data_tool/+fitting/sinDecayFit_m.m rename to qos/+toolbox/+data_tool/+fitting/sinDecayFitNoTilt.m index a4546c8..b169536 100644 --- a/qos/+toolbox/+data_tool/+fitting/sinDecayFit_m.m +++ b/qos/+toolbox/+data_tool/+fitting/sinDecayFitNoTilt.m @@ -1,4 +1,4 @@ -function [B,C,D,freq,td,varargout] = sinDecayFit_m(t,P,... +function [B,C,D,freq,td,varargout] = sinDecayFitNoTilt(t,P,... B0,BBnd,... C0,CBnd,... D0,DBnd,... @@ -22,9 +22,8 @@ lb = [BBnd(1),CBnd(1),DBnd(1),freqBnd(1),tdBnd(1)]; ub = [BBnd(2),CBnd(2),DBnd(2),freqBnd(2),tdBnd(2)]; -for ii = 1:3 - [Coefficients,~,residual,~,~,~,J] = lsqcurvefit(@SinusoidalDecay,Coefficients,t,P,lb,ub); -end +[Coefficients,~,residual,~,~,~,J] = lsqcurvefit(@SinusoidalDecay,Coefficients,t,P,lb,ub); + B = Coefficients(1); C = Coefficients(2); D = Coefficients(3); @@ -34,16 +33,8 @@ varargout{1} = nlparci(Coefficients,residual,'jacobian',J); end - function [P]=SinusoidalDecay(Coefficients,t) % Sinusoidal Decay -% Parameter estimation: -% A: value of P at large x: P(end) or mean(P(end-##,end)) -% B: max(P) - min(P) -% C: A - (max(P) + min(P))/2 -% D: 0 -% freq: use fft to detect -% td: ... % % Yulin Wu, SC5,IoP,CAS. wuyulin@ssc.iphy.ac.cn/mail4ywu@gmail.com % $Revision: 1.0 $ $Date: 2012/03/28 $ diff --git a/qos/+toolbox/+data_tool/+fitting/sinDecayFitTilt.m b/qos/+toolbox/+data_tool/+fitting/sinDecayFitTilt.m new file mode 100644 index 0000000..1fdcd03 --- /dev/null +++ b/qos/+toolbox/+data_tool/+fitting/sinDecayFitTilt.m @@ -0,0 +1,61 @@ +function [A,B,C,D,freq,td,varargout] = sinDecayFitTilt(t,P,... + A0,ABnd,... + B0,BBnd,... + C0,CBnd,... + D0,DBnd,... + freq0,freqBnd,... + td0,tdBnd) +% SinDecayFit fits curve P = P(t) with a Sinusoidal Decay function: +% P = A +B*(exp(-t/td)*(sin(2*pi*freq*t+D)+C)); +% +% varargout{1}: ci, 6 by 2 matrix, ci(5,1) is the lower bound of 'freq', +% ci(6,2) is the upper bound of 'td',... +% +% Yulin Wu, SC5,IoP,CAS. mail4ywu@gmail.com +% $Revision: 1.1 $ $Date: 2012/10/18 $ + +Coefficients(1) = A0; +Coefficients(2) = B0; +Coefficients(3) = C0; +Coefficients(4) = D0; +Coefficients(5) = freq0; +Coefficients(6) = td0; +lb = [ABnd(1),BBnd(1),CBnd(1),DBnd(1),freqBnd(1),tdBnd(1)]; +ub = [ABnd(2),BBnd(2),CBnd(2),DBnd(2),freqBnd(2),tdBnd(2)]; + +for ii = 1:3 + [Coefficients,~,residual,~,~,~,J] = lsqcurvefit(@SinusoidalDecay,Coefficients,t,P,lb,ub); +end +A = Coefficients(1); +B = Coefficients(2); +C = Coefficients(3); +D = Coefficients(4); +freq = Coefficients(5); +td = Coefficients(6); +if nargout > 6 + varargout{1} = nlparci(Coefficients,residual,'jacobian',J); +end + + +function [P]=SinusoidalDecay(Coefficients,t) +% Sinusoidal Decay +% Parameter estimation: +% A: value of P at large x: P(end) or mean(P(end-##,end)) +% B: max(P) - min(P) +% C: A - (max(P) + min(P))/2 +% D: 0 +% freq: use fft to detect +% td: ... +% +% Yulin Wu, SC5,IoP,CAS. wuyulin@ssc.iphy.ac.cn/mail4ywu@gmail.com +% $Revision: 1.0 $ $Date: 2012/03/28 $ + +A = Coefficients(1); +B = Coefficients(2); +C = Coefficients(3); +D = Coefficients(4); +freq = Coefficients(5); +td = Coefficients(6); +P = A +B*(exp(-t/td).*(sin(2*pi*freq*t+D)+C)); + + diff --git a/qos/+toolbox/+data_tool/+fitting/sinDecayFit_auto.m b/qos/+toolbox/+data_tool/+fitting/sinDecayFit_auto.m index 053b4ad..0a0744e 100644 --- a/qos/+toolbox/+data_tool/+fitting/sinDecayFit_auto.m +++ b/qos/+toolbox/+data_tool/+fitting/sinDecayFit_auto.m @@ -1,4 +1,4 @@ -function [A,B,C,D,freq,td,varargout] = sinDecayFit(t,P,varargin) +function [A,B,C,D,freq,td,varargout] = sinDecayFit_auto(t,P,varargin) % SinDecayFit fits curve P = P(t) with a Sinusoidal Decay function: % P = A +B*(exp(-t/td)*(sin(2*pi*freq*t+D)+C)); % t unit should be nano-second. diff --git a/qos/+toolbox/+data_tool/+fitting/spcFitPoly.m b/qos/+toolbox/+data_tool/+fitting/spcFitPoly.m new file mode 100644 index 0000000..8b38a82 --- /dev/null +++ b/qos/+toolbox/+data_tool/+fitting/spcFitPoly.m @@ -0,0 +1,25 @@ +function p = spcFitPoly(x,y,z,order) +% +% export spctrum data with DataViever + +nr = length(x); +nc = length(y); +z(isnan(z))=mean(z(~isnan(z))); +f01 = NaN(1,nr); +for ii = 1:nr + [~,ind] = max(z(ii,:)); + f01(ii) = y(ind); +end +figure(); +imagesc(x,y,z.'); +hold on; +plot(x,f01,'r+'); +set(gca,'YDir','normal'); + +p = polyfit(x,f01,order); + +xf = linspace(x(1),x(end),50); +yf = polyval(p,xf); +plot(xf,yf,'r'); + +end \ No newline at end of file diff --git a/qos/+toolbox/+data_tool/Manual_Fitting.m b/qos/+toolbox/+data_tool/Manual_Fitting.m deleted file mode 100644 index df2f145..0000000 --- a/qos/+toolbox/+data_tool/Manual_Fitting.m +++ /dev/null @@ -1,428 +0,0 @@ -function Manual_Fitting(x,y) -% do curve fitting by manually tunning parameters - -% Copyright 2016 Yulin Wu, USTC -% mail4ywu@gmail.com/mail4ywu@icloud.com - - if numel(x) ~= numel(y) - error('x y size not match.'); - end - if numel(x) < 2 - error('scalar data.'); - end - if ~isreal(x) || ~isreal(y) - error('can not do fitting for complex data.'); - end - - system = lower(system_dependent('getos')); - if any([strfind(system, 'microsoft windows xp'),... - strfind(system, 'microsoft windows Vista'),... - strfind(system, 'microsoft windows 7'),... - strfind(system, 'microsoft windows server 2008'),... - strfind(system, 'microsoft windows server 2003')]) - InfoDispHeight = 5; % characters - SelectDataUILn = 30; - panelpossize = [0,0,250,40]; - elseif any([strfind(system, 'microsoft windows 10'),... - strfind(system, 'microsoft windows server 10'),... - strfind(system, 'microsoft windows server 2012')]) - InfoDispHeight = 6; % characters - SelectDataUILn = 35; - panelpossize = [0,0,300,40]; - else - InfoDispHeight = 5; % characters - SelectDataUILn = 30; % characters - panelpossize = [0,0,250,40]; % characters - end - - BkGrndColor = [0.941 0.941 0.941]; - handles.mainwin = figure('Units','characters','MenuBar','none',... - 'ToolBar','none','NumberTitle','off','Name','QES | Manual Curve Fitting',... - 'Resize','off','HandleVisibility','callback','Color',BkGrndColor,... - 'DockControls','off'); - ParentUnitOrig = get(handles.mainwin,'Units'); - set(handles.mainwin,'Units','characters'); - ParentPosOrig = get(handles.mainwin,'Position'); - set(handles.mainwin,'Position',[ParentPosOrig(1),ParentPosOrig(2),panelpossize(3),panelpossize(4)]); - set(handles.mainwin,'Units',ParentUnitOrig); % restore to original units. - movegui(handles.mainwin,'center'); - - handles.basepanel=uipanel(... - 'Parent',handles.mainwin,... - 'Units','characters',... - 'Position',panelpossize,... - 'backgroundColor',BkGrndColor,... - 'Title','',... - 'BorderType','none',... - 'HandleVisibility','callback',... - 'visible','on',... - 'Tag','parameterpanel','DeleteFcn',{}); - - pos = [11,0.8,15,4]; - pos(1) = 12; - pos(3) = 120; - pos(2) = 4; - pos(4) = 35; - handles.mainax = axes('Parent',handles.basepanel,'Visible','on','HandleVisibility','callback',... - 'HitTest','off','XTick',[],'YTick',[],'Box','on','Units','characters',... - 'Position',pos); - ND = numel(x); - if ND < 30 - MarkerSize = 21; - elseif ND < 50 - MarkerSize = 18; - elseif ND < 150 - MarkerSize = 15; - elseif ND < 300 - MarkerSize = 12; - elseif ND < 600 - MarkerSize = 9; - elseif ND < 1200 - MarkerSize = 6; - else - MarkerSize = 3; - end - plot(handles.mainax,x,y,'.b','MarkerSize',MarkerSize); - xlabel(handles.mainax,'x'); - ylabel(handles.mainax,'y'); - - pos(1) = pos(1)+pos(3)+4; - pos(2) = pos(2)+pos(4)-1; - pos(3) = 17; - pos(4) = 1.1; - handles.FitFcnTitle = uicontrol('Parent',handles.basepanel,'Style','text','string','Fit fcn:',... - 'FontSize',10,'FontUnits','points','HorizontalAlignment','Left','Units','characters','Position',pos); - - pos(1) = pos(1)+pos(3)+1; - pos(2) = pos(2)-0.3; - pos(3) = 94; - pos(4) = 1.5; - handles.FitFcnEdtBox = uicontrol('Parent',handles.basepanel,'Style','edit','string',... - 'fit function, e.g.: y = p1*sin(x/p2+p3)+p4*x+p5, p1,...,p5 are parameters to fit',... - 'FontSize',10,'FontUnits','points','FontAngle','oblique','ForegroundColor',[0.5,0.5,1],... - 'BackgroundColor',[0.9,1,0.8],'HorizontalAlignment','Left','Units','characters','Position',pos,... - 'Callback',{@FitFcnChanged}); - - SliderBackGroundColor = [0.7,0.8,1]; - MAX_NUM_PARAMETERS = 7; - %% P1 - pos = get(handles.FitFcnTitle,'Position'); - pos(2) = pos(2)-2; - handles.P1Title = uicontrol('Parent',handles.basepanel,'Style','text','string','P1:0.5','Visible','off',... - 'FontSize',10,'FontUnits','points','HorizontalAlignment','Left','Units','characters','Position',pos); - - pos_lb(1) = pos(1)+pos(3)+1; - pos_lb(2) = pos(2)-0.3; - pos_lb(3) = 12; - pos_lb(4) = 1.5; - handles.P1LB = uicontrol('Parent',handles.basepanel,'Style','edit','string','0','Visible','off',... - 'FontSize',10,'FontUnits','points','FontAngle','oblique','ForegroundColor',[0.5,0.5,1],... - 'BackgroundColor',[0.9,1,0.8],'HorizontalAlignment','Left','Units','characters','Position',pos_lb); - - pos_ub = pos_lb; - pos_ub(1) = pos_lb(1)+pos_lb(3)+1+69; - pos_ub(3) = 12; - handles.P1UB = uicontrol('Parent',handles.basepanel,'Style','edit','string','1','Visible','off',... - 'FontSize',10,'FontUnits','points','FontAngle','oblique','ForegroundColor',[0.5,0.5,1],... - 'BackgroundColor',[0.9,1,0.8],'HorizontalAlignment','Left','Units','characters','Position',pos_ub); - - pos_sld = pos_lb; - pos_sld(1) = pos_lb(1)+pos_lb(3)+1; - pos_sld(3) = pos_ub(1)-1-pos_sld(1); - handles.P1SLD = uicontrol('Parent',handles.basepanel,'Style','slider','Max',1,'Min',0,'Visible','off',... - 'BackgroundColor',SliderBackGroundColor,'Units','characters','Position',pos_sld,'Value',0.5); - - %% P2 - pos = get(handles.P1Title,'Position'); - pos(2) = pos(2)-2; - handles.P2Title = uicontrol('Parent',handles.basepanel,'Style','text','string','P2:0.5','Visible','off',... - 'FontSize',10,'FontUnits','points','HorizontalAlignment','Left','Units','characters','Position',pos); - - pos_lb(1) = pos(1)+pos(3)+1; - pos_lb(2) = pos(2)-0.3; - pos_lb(3) = 12; - pos_lb(4) = 1.5; - handles.P2LB = uicontrol('Parent',handles.basepanel,'Style','edit','string','0','Visible','off',... - 'FontSize',10,'FontUnits','points','FontAngle','oblique','ForegroundColor',[0.5,0.5,1],... - 'BackgroundColor',[0.9,1,0.8],'HorizontalAlignment','Left','Units','characters','Position',pos_lb); - - pos_ub = pos_lb; - pos_ub(1) = pos_lb(1)+pos_lb(3)+1+69; - pos_ub(3) = 12; - handles.P2UB = uicontrol('Parent',handles.basepanel,'Style','edit','string','1','Visible','off',... - 'FontSize',10,'FontUnits','points','FontAngle','oblique','ForegroundColor',[0.5,0.5,1],... - 'BackgroundColor',[0.9,1,0.8],'HorizontalAlignment','Left','Units','characters','Position',pos_ub); - - pos_sld = pos_lb; - pos_sld(1) = pos_lb(1)+pos_lb(3)+1; - pos_sld(3) = pos_ub(1)-1-pos_sld(1); - handles.P2SLD = uicontrol('Parent',handles.basepanel,'Style','slider','Max',1,'Min',0,'Visible','off',... - 'BackgroundColor',SliderBackGroundColor,'Units','characters','Position',pos_sld,'Value',0.5); - - %% P3 - pos = get(handles.P2Title,'Position'); - pos(2) = pos(2)-2; - handles.P3Title = uicontrol('Parent',handles.basepanel,'Style','text','string','P3:0.5','Visible','off',... - 'FontSize',10,'FontUnits','points','HorizontalAlignment','Left','Units','characters','Position',pos); - - pos_lb(1) = pos(1)+pos(3)+1; - pos_lb(2) = pos(2)-0.3; - pos_lb(3) = 12; - pos_lb(4) = 1.5; - handles.P3LB = uicontrol('Parent',handles.basepanel,'Style','edit','string','0','Visible','off',... - 'FontSize',10,'FontUnits','points','FontAngle','oblique','ForegroundColor',[0.5,0.5,1],... - 'BackgroundColor',[0.9,1,0.8],'HorizontalAlignment','Left','Units','characters','Position',pos_lb); - - pos_ub = pos_lb; - pos_ub(1) = pos_lb(1)+pos_lb(3)+1+69; - pos_ub(3) = 12; - handles.P3UB = uicontrol('Parent',handles.basepanel,'Style','edit','string','1','Visible','off',... - 'FontSize',10,'FontUnits','points','FontAngle','oblique','ForegroundColor',[0.5,0.5,1],... - 'BackgroundColor',[0.9,1,0.8],'HorizontalAlignment','Left','Units','characters','Position',pos_ub); - - pos_sld = pos_lb; - pos_sld(1) = pos_lb(1)+pos_lb(3)+1; - pos_sld(3) = pos_ub(1)-1-pos_sld(1); - handles.P3SLD = uicontrol('Parent',handles.basepanel,'Style','slider','Max',1,'Min',0,'Visible','off',... - 'BackgroundColor',SliderBackGroundColor,'Units','characters','Position',pos_sld,'Value',0.5); - - %% P4 - pos = get(handles.P3Title,'Position'); - pos(2) = pos(2)-2; - handles.P4Title = uicontrol('Parent',handles.basepanel,'Style','text','string','P4:0.5','Visible','off',... - 'FontSize',10,'FontUnits','points','HorizontalAlignment','Left','Units','characters','Position',pos); - - pos_lb(1) = pos(1)+pos(3)+1; - pos_lb(2) = pos(2)-0.3; - pos_lb(3) = 12; - pos_lb(4) = 1.5; - handles.P4LB = uicontrol('Parent',handles.basepanel,'Style','edit','string','0','Visible','off',... - 'FontSize',10,'FontUnits','points','FontAngle','oblique','ForegroundColor',[0.5,0.5,1],... - 'BackgroundColor',[0.9,1,0.8],'HorizontalAlignment','Left','Units','characters','Position',pos_lb); - - pos_ub = pos_lb; - pos_ub(1) = pos_lb(1)+pos_lb(3)+1+69; - pos_ub(3) = 12; - handles.P4UB = uicontrol('Parent',handles.basepanel,'Style','edit','string','1','Visible','off',... - 'FontSize',10,'FontUnits','points','FontAngle','oblique','ForegroundColor',[0.5,0.5,1],... - 'BackgroundColor',[0.9,1,0.8],'HorizontalAlignment','Left','Units','characters','Position',pos_ub); - - pos_sld = pos_lb; - pos_sld(1) = pos_lb(1)+pos_lb(3)+1; - pos_sld(3) = pos_ub(1)-1-pos_sld(1); - handles.P4SLD = uicontrol('Parent',handles.basepanel,'Style','slider','Max',1,'Min',0,'Visible','off',... - 'BackgroundColor',SliderBackGroundColor,'Units','characters','Position',pos_sld,'Value',0.5); - - %% P5 - pos = get(handles.P4Title,'Position'); - pos(2) = pos(2)-2; - handles.P5Title = uicontrol('Parent',handles.basepanel,'Style','text','string','P5:0.5','Visible','off',... - 'FontSize',10,'FontUnits','points','HorizontalAlignment','Left','Units','characters','Position',pos); - - pos_lb(1) = pos(1)+pos(3)+1; - pos_lb(2) = pos(2)-0.3; - pos_lb(3) = 12; - pos_lb(4) = 1.5; - handles.P5LB = uicontrol('Parent',handles.basepanel,'Style','edit','string','0','Visible','off',... - 'FontSize',10,'FontUnits','points','FontAngle','oblique','ForegroundColor',[0.5,0.5,1],... - 'BackgroundColor',[0.9,1,0.8],'HorizontalAlignment','Left','Units','characters','Position',pos_lb); - - pos_ub = pos_lb; - pos_ub(1) = pos_lb(1)+pos_lb(3)+1+69; - pos_ub(3) = 12; - handles.P5UB = uicontrol('Parent',handles.basepanel,'Style','edit','string','1','Visible','off',... - 'FontSize',10,'FontUnits','points','FontAngle','oblique','ForegroundColor',[0.5,0.5,1],... - 'BackgroundColor',[0.9,1,0.8],'HorizontalAlignment','Left','Units','characters','Position',pos_ub); - - pos_sld = pos_lb; - pos_sld(1) = pos_lb(1)+pos_lb(3)+1; - pos_sld(3) = pos_ub(1)-1-pos_sld(1); - handles.P5SLD = uicontrol('Parent',handles.basepanel,'Style','slider','Max',1,'Min',0,'Visible','off',... - 'BackgroundColor',SliderBackGroundColor,'Units','characters','Position',pos_sld,'Value',0.5); - - - %% P6 - pos = get(handles.P5Title,'Position'); - pos(2) = pos(2)-2; - handles.P6Title = uicontrol('Parent',handles.basepanel,'Style','text','string','P6:0.5','Visible','off',... - 'FontSize',10,'FontUnits','points','HorizontalAlignment','Left','Units','characters','Position',pos); - - pos_lb(1) = pos(1)+pos(3)+1; - pos_lb(2) = pos(2)-0.3; - pos_lb(3) = 12; - pos_lb(4) = 1.5; - handles.P6LB = uicontrol('Parent',handles.basepanel,'Style','edit','string','0','Visible','off',... - 'FontSize',10,'FontUnits','points','FontAngle','oblique','ForegroundColor',[0.5,0.5,1],... - 'BackgroundColor',[0.9,1,0.8],'HorizontalAlignment','Left','Units','characters','Position',pos_lb); - - pos_ub = pos_lb; - pos_ub(1) = pos_lb(1)+pos_lb(3)+1+69; - pos_ub(3) = 12; - handles.P6UB = uicontrol('Parent',handles.basepanel,'Style','edit','string','1','Visible','off',... - 'FontSize',10,'FontUnits','points','FontAngle','oblique','ForegroundColor',[0.5,0.5,1],... - 'BackgroundColor',[0.9,1,0.8],'HorizontalAlignment','Left','Units','characters','Position',pos_ub); - - pos_sld = pos_lb; - pos_sld(1) = pos_lb(1)+pos_lb(3)+1; - pos_sld(3) = pos_ub(1)-1-pos_sld(1); - handles.P6SLD = uicontrol('Parent',handles.basepanel,'Style','slider','Max',1,'Min',0,'Visible','off',... - 'BackgroundColor',SliderBackGroundColor,'Units','characters','Position',pos_sld,'Value',0.5); - - %% P7 - pos = get(handles.P6Title,'Position'); - pos(2) = pos(2)-2; - handles.P7Title = uicontrol('Parent',handles.basepanel,'Style','text','string','P7:0.5','Visible','off',... - 'FontSize',10,'FontUnits','points','HorizontalAlignment','Left','Units','characters','Position',pos); - - pos_lb(1) = pos(1)+pos(3)+1; - pos_lb(2) = pos(2)-0.3; - pos_lb(3) = 12; - pos_lb(4) = 1.5; - handles.P7LB = uicontrol('Parent',handles.basepanel,'Style','edit','string','0','Visible','off',... - 'FontSize',10,'FontUnits','points','FontAngle','oblique','ForegroundColor',[0.5,0.5,1],... - 'BackgroundColor',[0.9,1,0.8],'HorizontalAlignment','Left','Units','characters','Position',pos_lb); - - pos_ub = pos_lb; - pos_ub(1) = pos_lb(1)+pos_lb(3)+1+69; - pos_ub(3) = 12; - handles.P7UB = uicontrol('Parent',handles.basepanel,'Style','edit','string','1','Visible','off',... - 'FontSize',10,'FontUnits','points','FontAngle','oblique','ForegroundColor',[0.5,0.5,1],... - 'BackgroundColor',[0.9,1,0.8],'HorizontalAlignment','Left','Units','characters','Position',pos_ub); - - pos_sld = pos_lb; - pos_sld(1) = pos_lb(1)+pos_lb(3)+1; - pos_sld(3) = pos_ub(1)-1-pos_sld(1); - handles.P7SLD = uicontrol('Parent',handles.basepanel,'Style','slider','Max',1,'Min',0,'Visible','off',... - 'BackgroundColor',SliderBackGroundColor,'Units','characters','Position',pos_sld,'Value',0.5); - - function FitFcnChanged(src,evnt) - handles.FitFcn = []; - FitFcnStr = get(handles.FitFcnEdtBox,'String'); - FitFcnStr = regexprep(FitFcnStr,'[Yy]\s*=\s*',''); - if isempty(strfind(FitFcnStr,'x')) - msgbox('Incorrect fitting function format.','modal'); - return; - end - FitFcnStr = regexprep(FitFcnStr,'@\s*\(\s*x\s*\)\s*','@(x)'); - idx = strfind(FitFcnStr,'@(x)'); - if isempty(idx) - FitFcnStr = ['@(x)',FitFcnStr]; - else - FitFcnStr = FitFcnStr(idx:end); - end - FitFcnStr = strtrim(FitFcnStr); - [startIdx,endIndex] = regexpi(FitFcnStr,'[Pp]\d+'); - if any(endIndex - startIdx > 1) - msgbox('Incorrect fitting function format, parameters with more than one digit index(e.g., p20) are not allowed.','modal'); - return; - end - NP = numel(startIdx); - PIdx = NaN*ones(1,NP); - for ii = 1:NP - PIdx(ii) = str2double(FitFcnStr(startIdx(ii)+1)); - end - PIdx = sort(unique(PIdx)); - NP = numel(PIdx); - if NP > MAX_NUM_PARAMETERS - msgbox(['Maximum number of fitting paprameters is ',num2str(MAX_NUM_PARAMETERS,'%0.0f'),... - ', found ', num2str(NP,'%0.0f'),' in the given fitting function.'],'modal'); - return; - end - for ii = 1:NP - FitFcnStr = strrep(FitFcnStr,['P',num2str(PIdx(ii),'%0.0f')],['p',num2str(ii,'%0.0f')]); - FitFcnStr = strrep(FitFcnStr,['p',num2str(PIdx(ii),'%0.0f')],['p',num2str(ii,'%0.0f')]); - end - - fcnheader = '@(x'; - for ii = 1:NP - fcnheader = [fcnheader,',p',num2str(ii,'%0.0f')]; - end - fcnheader = [fcnheader,')']; - try - handles.FitFcn = str2func(strrep(FitFcnStr,'@(x)',fcnheader)); - set(handles.FitFcnEdtBox,'String',regexprep(FitFcnStr,'@\(x(,\w+){0,}\)','y = ')); - catch - msgbox('Incorrect fitting function format.','modal'); - return; - end - set(handles.P1Title,'Visible','off'); - set(handles.P1LB,'Visible','off'); - set(handles.P1UB,'Visible','off'); - set(handles.P1SLD,'Visible','off'); - - set(handles.P2Title,'Visible','off'); - set(handles.P2LB,'Visible','off'); - set(handles.P2UB,'Visible','off'); - set(handles.P2SLD,'Visible','off'); - - set(handles.P3Title,'Visible','off'); - set(handles.P3LB,'Visible','off'); - set(handles.P3UB,'Visible','off'); - set(handles.P3SLD,'Visible','off'); - - set(handles.P4Title,'Visible','off'); - set(handles.P4LB,'Visible','off'); - set(handles.P4UB,'Visible','off'); - set(handles.P4SLD,'Visible','off'); - - set(handles.P5Title,'Visible','off'); - set(handles.P5LB,'Visible','off'); - set(handles.P5UB,'Visible','off'); - set(handles.P5SLD,'Visible','off'); - - set(handles.P6Title,'Visible','off'); - set(handles.P6LB,'Visible','off'); - set(handles.P6UB,'Visible','off'); - set(handles.P6SLD,'Visible','off'); - - set(handles.P7Title,'Visible','off'); - set(handles.P7LB,'Visible','off'); - set(handles.P7UB,'Visible','off'); - set(handles.P7SLD,'Visible','off'); - - for ii = 1:NP - if ii == 1 - set(handles.P1Title,'Visible','on','string','P1:0.5'); - set(handles.P1LB,'Visible','on','string','0'); - set(handles.P1UB,'Visible','on','string','1'); - set(handles.P1SLD,'Visible','on','Max',1,'Min',0,'Value',0.5); - end - if ii == 2 - set(handles.P2Title,'Visible','on','string','P2:0.5'); - set(handles.P2LB,'Visible','on','string','0'); - set(handles.P2UB,'Visible','on','string','1'); - set(handles.P2SLD,'Visible','on','Max',1,'Min',0,'Value',0.5); - end - if ii == 3 - set(handles.P3Title,'Visible','on','string','P3:0.5'); - set(handles.P3LB,'Visible','on','string','0'); - set(handles.P3UB,'Visible','on','string','1'); - set(handles.P3SLD,'Visible','on','Max',1,'Min',0,'Value',0.5); - end - if ii == 4 - set(handles.P4Title,'Visible','on','string','P4:0.5'); - set(handles.P4LB,'Visible','on','string','0'); - set(handles.P4UB,'Visible','on','string','1'); - set(handles.P4SLD,'Visible','on','Max',1,'Min',0,'Value',0.5); - end - if ii == 5 - set(handles.P5Title,'Visible','on','string','P5:0.5'); - set(handles.P5LB,'Visible','on','string','0'); - set(handles.P5UB,'Visible','on','string','1'); - set(handles.P5SLD,'Visible','on','Max',1,'Min',0,'Value',0.5); - end - if ii == 6 - set(handles.P6Title,'Visible','on','string','P6:0.5'); - set(handles.P6LB,'Visible','on','string','0'); - set(handles.P6UB,'Visible','on','string','1'); - set(handles.P6SLD,'Visible','on','Max',1,'Min',0,'Value',0.5); - end - if ii == 7 - set(handles.P7Title,'Visible','on','string','P7:0.5'); - set(handles.P7LB,'Visible','on','string','0'); - set(handles.P7UB,'Visible','on','string','1'); - set(handles.P7SLD,'Visible','on','Max',1,'Min',0,'Value',0.5); - end - end - end -end \ No newline at end of file diff --git a/qos/Untitled.m b/qos/Untitled.m index 3e22f81..7fcb0e9 100644 --- a/qos/Untitled.m +++ b/qos/Untitled.m @@ -1,36 +1,2 @@ -%% -spectroscopy1_zpa('qubit',qNames{1},... -'biasAmp',[-3e4:2000:3e4],'driveFreq',[4.7e9:2e6:5.23e9],... -'dataTyp','S21','gui',true,'save',true); -%% -spectroscopy1_zpa('qubit',qNames{2},... -'biasAmp',[-3e4:2000:3e4],'driveFreq',[4.2e9:2e6:4.9e9],... -'dataTyp','S21','gui',true,'save',true); -%% -spectroscopy1_zpa('qubit',qNames{3},... -'biasAmp',[-3e4:2000:3e4],'driveFreq',[4.6e9:2e6:5.3e9],... -'dataTyp','S21','gui',true,'save',true); -%% -spectroscopy1_zpa('qubit',qNames{4},... -'biasAmp',[-3e4:2000:3e4],'driveFreq',[4.4e9:1e6:4.8e9],... -'dataTyp','S21','gui',true,'save',true); -%% -spectroscopy1_zpa('qubit',qNames{5},... -'biasAmp',[-3e4:2000:3e4],'driveFreq',[4.5e9:1e6:5.35e9],... -'dataTyp','S21','gui',true,'save',true); -%% -spectroscopy1_zpa('qubit',qNames{6},... -'biasAmp',[-3e4:2000:3e4],'driveFreq',[4.2e9:2e6:4.85e9],... -'dataTyp','S21','gui',true,'save',true); -%% -spectroscopy1_zpa('qubit',qNames{7},... -'biasAmp',[-3e4:2000:3e4],'driveFreq',[4.7e9:2e6:5.3e9],... -'dataTyp','S21','gui',true,'save',true); -%% -spectroscopy1_zpa('qubit',qNames{8},... -'biasAmp',[-3e4:2000:3e4],'driveFreq',[4.6e9:2e6:4.8e9],... -'dataTyp','S21','gui',true,'save',true); -%% -spectroscopy1_zpa('qubit',qNames{9},... -'biasAmp',[-3e4:2000:3e4],'driveFreq',[4.5e9:2e6:5.3e9],... -'dataTyp','S21','gui',true,'save',true); \ No newline at end of file +tuneup.xyGateAmpTuner('qubit',q,'gateTyp','X/2','AE',true,'gui',true,'save','askMe'); + diff --git a/qos/Untitled2.m b/qos/Untitled2.m new file mode 100644 index 0000000..a45e7a3 --- /dev/null +++ b/qos/Untitled2.m @@ -0,0 +1,59 @@ +for kk = 1:10 + +qubits = {'q9_1'}; +for ii = 1:numel(qubits) + q = qubits{ii}; + setQSettings('r_avg',2000,q); + tuneup.correctf01byRamsey('qubit',q,'gui',true,'save',true); + tuneup.xyGateAmpTuner('qubit',q,'gateTyp','X','AE',false,'gui',true,'save',true); + tuneup.iq2prob_01('qubit',q,'numSamples',1e4,'gui',true,'save',true); + XYGate ={'X','X/2'}; + for jj = 1:numel(XYGate) + tuneup.xyGateAmpTuner('qubit',q,'gateTyp',XYGate{jj},'AE',true,'AENumPi',21,'gui',true,'save',true); + end +end + +setQSettings('r_avg',10000,'q9_1'); + +delayTime = [000:10:2e3]; +zPulseRipple('qubit','q9_1',... + 'delayTime',delayTime,... + 'zAmp',0e3,'gui',true,'save',true); + + +delayTime = [000:10:2e3]; +zPulseRipple('qubit','q9_1',... + 'delayTime',delayTime,... + 'zAmp',1e3,'gui',true,'save',true); + +end + +for kk = 1:10 + +qubits = {'q9_1'}; +for ii = 1:numel(qubits) + q = qubits{ii}; + setQSettings('r_avg',2000,q); + tuneup.correctf01byRamsey('qubit',q,'gui',true,'save',true); + tuneup.xyGateAmpTuner('qubit',q,'gateTyp','X','AE',false,'gui',true,'save',true); + tuneup.iq2prob_01('qubit',q,'numSamples',1e4,'gui',true,'save',true); + XYGate ={'X','X/2'}; + for jj = 1:numel(XYGate) + tuneup.xyGateAmpTuner('qubit',q,'gateTyp',XYGate{jj},'AE',true,'AENumPi',21,'gui',true,'save',true); + end +end + +setQSettings('r_avg',10000,'q9_1'); + +delayTime = [000:10:1e3]; +zPulseRipple('qubit','q9_1',... + 'delayTime',delayTime,... + 'zAmp',0e3,'gui',true,'save',true); + + +delayTime = [000:10:1e3]; +zPulseRipple('qubit','q9_1',... + 'delayTime',delayTime,... + 'zAmp',1e3,'gui',true,'save',true); + +end \ No newline at end of file diff --git a/qos/log.txt b/qos/log.txt index 0cdc6fe..3af9a0a 100644 --- a/qos/log.txt +++ b/qos/log.txt @@ -2969,3 +2969,69 @@ 01-Aug-2017 16:45:49 ip:10.0.1.106 data:3 01-Aug-2017 16:45:49 ip:10.0.1.162 data:3 01-Aug-2017 16:45:49 ip:10.0.2.6 data:3 +02-Aug-2017 11:17:38 ip:10.0.2.12 data:7 +02-Aug-2017 11:17:38 ip:10.0.2.10 data:8 +02-Aug-2017 11:17:38 ip:10.0.1.103 data:7 +02-Aug-2017 11:17:39 ip:10.0.1.107 data:7 +02-Aug-2017 11:17:39 ip:10.0.1.102 data:11 +02-Aug-2017 11:17:39 ip:10.0.1.104 data:7 +02-Aug-2017 11:17:40 ip:10.0.1.1 data:8 +02-Aug-2017 11:17:40 ip:10.0.1.101 data:4 +02-Aug-2017 11:17:40 ip:10.0.1.106 data:4 +02-Aug-2017 11:17:40 ip:10.0.1.162 data:4 +02-Aug-2017 11:17:41 ip:10.0.2.6 data:4 +02-Aug-2017 11:20:45 ip:10.0.2.12 data:8 +02-Aug-2017 11:20:46 ip:10.0.2.10 data:9 +02-Aug-2017 11:20:46 ip:10.0.1.103 data:8 +02-Aug-2017 11:20:46 ip:10.0.1.107 data:8 +02-Aug-2017 11:20:47 ip:10.0.1.102 data:12 +02-Aug-2017 11:20:47 ip:10.0.1.104 data:8 +02-Aug-2017 11:20:47 ip:10.0.1.1 data:9 +02-Aug-2017 11:20:48 ip:10.0.1.101 data:5 +02-Aug-2017 11:20:48 ip:10.0.1.106 data:5 +02-Aug-2017 11:20:48 ip:10.0.1.162 data:5 +02-Aug-2017 11:20:49 ip:10.0.2.6 data:5 +09-Aug-2017 12:21:18 ip:10.0.2.12 data:3 +09-Aug-2017 12:21:18 ip:10.0.2.10 data:3 +09-Aug-2017 12:21:19 ip:10.0.1.103 data:3 +09-Aug-2017 12:21:19 ip:10.0.1.107 data:4 +09-Aug-2017 12:21:20 ip:10.0.1.102 data:3 +09-Aug-2017 12:21:21 ip:10.0.1.104 data:3 +09-Aug-2017 12:21:21 ip:10.0.1.1 data:3 +09-Aug-2017 12:21:22 ip:10.0.1.101 data:3 +09-Aug-2017 12:21:22 ip:10.0.1.106 data:3 +09-Aug-2017 12:21:23 ip:10.0.1.162 data:3 +09-Aug-2017 12:21:23 ip:10.0.2.6 data:3 +12-Aug-2017 18:18:22 ip:10.0.2.12 data:33 +12-Aug-2017 18:18:22 ip:10.0.2.10 data:35 +12-Aug-2017 18:18:23 ip:10.0.1.103 data:38 +12-Aug-2017 18:18:23 ip:10.0.1.107 data:39 +12-Aug-2017 18:18:24 ip:10.0.1.102 data:38 +12-Aug-2017 18:18:24 ip:10.0.1.104 data:34 +12-Aug-2017 18:18:25 ip:10.0.1.1 data:32 +12-Aug-2017 18:18:25 ip:10.0.1.101 data:33 +12-Aug-2017 18:18:26 ip:10.0.1.106 data:32 +12-Aug-2017 18:18:26 ip:10.0.1.162 data:34 +12-Aug-2017 18:18:27 ip:10.0.2.6 data:4 +12-Aug-2017 18:19:32 ip:10.0.2.12 data:34 +12-Aug-2017 18:19:33 ip:10.0.2.10 data:36 +12-Aug-2017 18:19:33 ip:10.0.1.103 data:39 +12-Aug-2017 18:19:33 ip:10.0.1.107 data:40 +12-Aug-2017 18:19:33 ip:10.0.1.102 data:39 +12-Aug-2017 18:19:34 ip:10.0.1.104 data:35 +12-Aug-2017 18:19:34 ip:10.0.1.1 data:33 +12-Aug-2017 18:19:34 ip:10.0.1.101 data:35 +12-Aug-2017 18:19:34 ip:10.0.1.106 data:33 +12-Aug-2017 18:19:35 ip:10.0.1.162 data:35 +12-Aug-2017 18:19:35 ip:10.0.2.6 data:5 +12-Aug-2017 19:15:52 ip:10.0.2.12 data:36 +12-Aug-2017 19:15:53 ip:10.0.2.10 data:38 +12-Aug-2017 19:15:53 ip:10.0.1.103 data:41 +12-Aug-2017 19:15:54 ip:10.0.1.107 data:42 +12-Aug-2017 19:15:54 ip:10.0.1.102 data:41 +12-Aug-2017 19:15:55 ip:10.0.1.104 data:37 +12-Aug-2017 19:15:55 ip:10.0.1.1 data:35 +12-Aug-2017 19:15:56 ip:10.0.1.101 data:37 +12-Aug-2017 19:15:56 ip:10.0.1.106 data:35 +12-Aug-2017 19:15:56 ip:10.0.1.162 data:37 +12-Aug-2017 19:15:57 ip:10.0.2.6 data:7