initial commit

This commit is contained in:
2026-08-07 15:56:42 +09:00
commit 91ad25aca9
1012 changed files with 159314 additions and 0 deletions
+82
View File
@@ -0,0 +1,82 @@
%OMNY Load positions from Orchestra scan file
function [ p ] = orchestra( p )
import beamline.*
import utils.*
if isempty(p.positions_file)
error('OMNY positions file is not specified. Please check p.positions_file in your template.')
end
if ~isfield(p,'angular_correction_setup') || isempty(p.angular_correction_setup)
error('p.angular_correction_setup is not specified. Please check p.angular_correction_setup in your template.')
end
if isfield(p,'omny_interferometer')
error(' p.omny_interferometer is not supported, use p.angular_correction_setup')
end
if ~isfield(p.detector,'burst_frames')||isempty(p.detector.burst_frames)
p.detector.burst_frames = 1;
end
switch lower(p.angular_correction_setup)
case 'omny'
p. orchestra.laser_height=-10.0e-3; % Height of horizontal laser beam on the sphere compared to pin tip (only for p.fromspec='opos_angle', 13.5e-3 for OMNI (not fully tested, better with opos than opos_angle), -10.0e-3 for OMNY)
p. orchestra.mirrdis=-9.0e-3; % Distance mirror-pin tip (only for p.fromspec='opos_angle', 22.0e-3 for OMNI (not fully tested, better with opos than opos_angle), -9.0e-3 for OMNY)
p. orchestra.beam_separation=7.5e-3; % Distance mirror-pin tip (only for p.fromspec='opos_angle', 13.0e-3 for OMNI (not fully tested, better with opos than opos_angle), 7.5e-3 for OMNY)
apply_correction = true;
case 'flomni'
p. orchestra.laser_height=-13.5e-3; % Height of horizontal laser beam on the sphere compared to pin tip (only for p.fromspec='opos_angle', 13.5e-3 for OMNI (not fully tested, better with opos than opos_angle), -10.0e-3 for OMNY)
p. orchestra.mirrdis=-17.4e-3; % Distance mirror-pin tip (only for p.fromspec='opos_angle', 22.0e-3 for OMNI (not fully tested, better with opos than opos_angle), -9.0e-3 for OMNY)
p. orchestra.beam_separation=-16e-3; % Distance mirror-pin tip (only for p.fromspec='opos_angle', 13.0e-3 for OMNI (not fully tested, better with opos than opos_angle), 7.5e-3 for OMNY)
apply_correction = true;
case {'lamni', 'none'}
apply_correction = false;
otherwise
error('Wrong p.angular_correction_setup, choose from ''omny'', ''flomni'',''lamni'',''none'' ')
end
for ii = 1:length(p.scan_number)
p.scan.is_cont = true; % So that burst data is prepared normally rather than integrated
if ~exist(sprintf(p.positions_file,p.scan_number(ii)), 'file' )
error('Missing OMNY specs file %s', sprintf(p.positions_file,p.scan_number(ii)))
end
out_orch = read_omny_pos(sprintf(p.positions_file,p.scan_number(ii)));
if ~isfield(out_orch,'Average_y_st_fzp') || ~isfield(out_orch,'Average_x_st_fzp')
out_orch.Average_y_st_fzp = out_orch.Average_y;
out_orch.Average_x_st_fzp = out_orch.Average_x;
end
if ~isfield(out_orch, 'Average_rotz_st')
apply_correction =false;
end
if ~apply_correction
if isfield(out_orch, 'Average_y_st_fzp')
positions_real = [out_orch.Average_y_st_fzp*1e-6 out_orch.Average_x_st_fzp*1e-6];
else % outdated position format
positions_real = [out_orch.Average_y*1e-6 out_orch.Average_x*1e-6];
end
else
deltax = p.orchestra.laser_height*out_orch.Average_rotz_st*1e-6/p.orchestra.beam_separation; % p.orchestra.beam_separation: separation between two laser beams for angular measurement
% p.orchestra.laser_height: height of horizontal laser beam on the sphere compared to pin tip
deltay = p.orchestra.mirrdis*out_orch.Average_rotz_st*1e-6/p.orchestra.beam_separation; % p.orchestra.beam_separation: separation between two laser beams for angular measurement
% p.orchestra.mirrdis dist mirror-pin tip
posx = out_orch.Average_x_st_fzp*1e-6 - deltax;
posy = out_orch.Average_y_st_fzp*1e-6 - deltay;
positions_real = [posy posx];
end
p.numpts(ii) = size(positions_real,1)*p.detector.burst_frames;
positions_tmp = zeros(p.numpts(ii), 2);
positions_tmp(:,1) = reshape(repmat(positions_real(:,1)',[p.detector.burst_frames 1]),[],1);
positions_tmp(:,2) = reshape(repmat(positions_real(:,2)',[p.detector.burst_frames 1]),[],1);
p.positions_real = [p.positions_real ; positions_tmp];
%size(p.positions_real)
end
end