%% function plotSensingMatrix(opt,sigAC,probeNames, mPrb, cPrbNames, % driveNames, mDrv, cDrvNames, noiseAC) % % Plot a sensing matrix of specified probes and drives. % % === Inputs === % % opt: Optickle instance. % % sigAC: Output of tickle. tickle has to be called with only one frequency % point. [Nprb*Ndrv] % % probeNames: A cell array of probe names. % % mPrb: A matrix of size [length(probeNames)*length(cPrbNames)]. % This matrix is used to convert from normal probes to compound % probes. % % cPrbNames: A cell array of compound probe names. % % driveNames: A cell array of drive names. % % mDrv: A matrix of size [length(driveNames)*length(cDrvNames)]. % This matrix is used to convert from normal drives to compound % drives. % % cDrvNames: A cell array of compound drive names. % % noiseAC (optional): noise matrix ( Nprb x Naf ) function mSens = plotSensingMatrixWithSign(opt,sigAC,probeNames, mPrb, cPrbNames, driveNames, mDrv, cDrvNames, noiseAC) %% test=0; if test probeNames={'REFL_1I','REFL_1Q','REFL_2I','REFL_2Q'}; mPrb=[1,0,0,0;0,1,1,0]; cPrbNames={'REFL_1I','Some shit'}; driveNames={'PRM','BS','ETMX','ETMY'}; mDrv=[1,0,0,0;0,1,0,0;0,0,1,1;0,0,1,-1]; cDrvNames={'PRM','BS','CARM','DARM'}; end %% try probeNames; catch probeNames=getProbeName(opt); mPrb = eye(length(probeNames)); cPrbNames=probeNames; end try driveNames; catch driveNames=getDriveNames(opt); mDrv = eye(length(driveNames)); cDrvNames=driveNames; end normNoise = 1; try noiseAC; catch normNoise = 0; end %% Complex sensing matrix iPrb=cellfun(@(x)getProbeNum(opt,x),probeNames); iDrv=getDriveNumbers(opt,driveNames); sigACr=sigAC(iPrb,iDrv); if normNoise %Avoid division by zero for blocked PDs noiseACr = noiseAC(iPrb); noiseACr(find(noiseACr == 0)) = 100; %Invert noiseAC noiseInv = diag(1./noiseACr); sigACr = noiseInv * sigACr; end mSens=mPrb*sigACr*mDrv'; %% %mSens = (mSens'*diag(exp(-i*mean(angle(mSens),2))))'; mSensSign = sign(cos(angle(mSens))); mSens = abs(mSens).* mSensSign; %% Plot Nprb=length(cPrbNames); Ndrv=length(cDrvNames); ax=axes(); %Make grid for ii=0:Nprb line([0,Ndrv],[ii,ii]); end for ii=0:Ndrv line([ii,ii],[0,Nprb]); end set(ax, 'XLim',[0,Ndrv],'YLim',[0,Nprb]); set(ax,'XTick',[0.5:Ndrv-0.5], 'YTick', [0.5:Nprb-0.5]); set(ax,'XTickLabel',cDrvNames,'YTickLabel',cPrbNames,'FontSize',16); for ii=1:Nprb for jj=1:Ndrv text(jj-0.5,ii-0.5,num2str(mSens(ii,jj), '%5.1e'), 'HorizontalAlignment','center','FontSize',16); end end if normNoise title('Noise Normalized Sensing Matrix [1/m/sqrt(Hz)]','FontSize',16); else title('Sensing Matrix [W/m]','FontSize',20); end