|
Size: 15242
Comment:
|
← Revision 4 as of 2016-01-04 14:19:09 ⇥
Size: 15556
Comment:
|
| Deletions are marked like this. | Additions are marked like this. |
| Line 3: | Line 3: |
| Here are the MATLAB functions used to make sumfiles and nominals. Both functions need to be in the same directory to work. Dirty_SUMFILES_f.m is nested within Master_Sumfiles.m | Here are the MATLAB functions used to make sumfiles and nominals. Both functions need to be in the same directory to work. Dirty_SUMFILES_f.m is nested within Master_Sumfiles.m. Also, Master_Sumfiles.m is set up to put the sumfiles in the directory /Users/kdrozd/send/DS_DN_FILES/DIRTYSUMFILES and the nominals are set up to go to the directory /Users/kdrozd/send/DS_DN_FILES/DIRTYNOMINALS. Also, Master_Sumfiles.m is currently set up for Polycam. This can be changed by editing line 72. |
DirtySumfiles
Here are the MATLAB functions used to make sumfiles and nominals. Both functions need to be in the same directory to work. Dirty_SUMFILES_f.m is nested within Master_Sumfiles.m. Also, Master_Sumfiles.m is set up to put the sumfiles in the directory /Users/kdrozd/send/DS_DN_FILES/DIRTYSUMFILES and the nominals are set up to go to the directory /Users/kdrozd/send/DS_DN_FILES/DIRTYNOMINALS.
Also, Master_Sumfiles.m is currently set up for Polycam. This can be changed by editing line 72.
Master_Sumfiles.m
% Master_Sumfiles
% Made by Kristofer Drozd
% 09/10/15 updated 12/15/15
% distance_sc vecter - row vector contraining sc distance to LMRK
% BENNU2LMRK_mat - matrix where rows are VLM vectors
% camera - 1 letter string indicateing camera
% test_string - 1 string naming the test
% test_version - 1 string naming test version
% lmrkname - row vector of strings containing lmrkname naming scheme (use
% cells)
% res_name - row vector of strings containing resolution naming scheme (use
% cells)
% azimuth and zenith inputs are vectors (not strings)
function Kristofer = Master_Sumfiles(azimuth_sc, zenith_sc, azimuth_sun, zenith_sun, distance_sc_vec, BENNU2LMRK_mat, camera, test_string, test_version, lmrk_name, res_name)
distance_sc_vec = distance_sc_vec';
size_d = size(distance_sc_vec);
BENNU2LMRK_mat = BENNU2LMRK_mat';
size_m = size(BENNU2LMRK_mat);
camera = camera;
test_string = test_string;
test_version = test_version;
lmrk_name = lmrk_name;
res_name = res_name;
date = char(datetime('now'));
scazi = azimuth_sc;
sczen = zenith_sc;
sunazi = azimuth_sun;
sunzen = zenith_sun;
i = 3;
fprintf( 'Test - %s\n', test_string)
fprintf( 'Camera - %s\n', camera)
fprintf( 'Image Version - %s\n', test_version)
fprintf( 'Date - %s\n', date)
fprintf('\n')
fprintf( '| image_# | sc_azi | sc_zen | sun_azi | sun_zen | lmrk lat Elon | res_name res_# (cm) |\n')
fprintf( '|--------------------------------------------------------------------------------------------------------------------|\n')
for n = 1:size_m(2);
for azimuth_sc = scazi;
for zenith_sc = sczen;
for azimuth_sun = sunazi;
for zenith_sun = sunzen;
for b = 1:size_d(2);
BENNU2LMRK = BENNU2LMRK_mat(:,n);
distance_sc = distance_sc_vec(b);
i = i+1;
[ SCOBJ, CX, CY, CZ, SZ, lat, lon, res_numb] = Dirty_SUMFILES_f( BENNU2LMRK, azimuth_sc, zenith_sc, azimuth_sun, zenith_sun, distance_sc);
UTC = datetime(1993,07,31,12,0,0);
UTC = datestr(UTC, 'yyyy mmm dd HH:MM:SS.FFF');
tstring1 = sprintf('~/send/DS_DN_FILES/DIRTYSUMFILES/%s%s%s%s%s%04.0f.SUM', camera, test_version, test_string, char(lmrk_name(n)), char(res_name(b)), i);
tstring2 = sprintf('~/send/DS_DN_FILES/DIRTYNOMINALS/%s%s%s%s%s%04.0f.NOM', camera, test_version, test_string, char(lmrk_name(n)), char(res_name(b)), i);
fid1 = fopen(tstring1, 'w+');
fprintf( fid1, '%s%s%s%s%s%04.0f\n', camera, test_version, test_string, char(lmrk_name(n)), char(res_name(b)), i);
fprintf( fid1, '%s\n', UTC);
fprintf( fid1, ' 1024 1024 5 16383 NPX, NLN, THRSH\n');
fprintf( fid1, ' 0.6110000000D+03 0.5115000000D+03 0.5115000000D+03 MMFL, CTR\n');
if SCOBJ(1) < 0
fprintf( fid1, ' %0.10e', SCOBJ(1));
else
fprintf( fid1, ' %0.10e', SCOBJ(1));
end
if SCOBJ(2) < 0
fprintf( fid1, ' %0.10e', SCOBJ(2));
else
fprintf( fid1, ' %0.10e', SCOBJ(2));
end
if SCOBJ(3) < 0
fprintf( fid1, ' %0.10e SCOBJ\n', SCOBJ(3));
else
fprintf( fid1, ' %0.10e SCOBJ\n', SCOBJ(3));
end
if CX(1) < 0
fprintf( fid1, ' %0.10e', CX(1));
else
fprintf( fid1, ' %0.10e', CX(1));
end
if CX(2) < 0
fprintf( fid1, ' %0.10e', CX(2));
else
fprintf( fid1, ' %0.10e', CX(2));
end
if CX(3) < 0
fprintf( fid1, ' %0.10e CX\n', CX(3));
else
fprintf( fid1, ' %0.10e CX\n', CX(3));
end
if CY(1) < 0
fprintf( fid1, ' %0.10e', CY(1));
else
fprintf( fid1, ' %0.10e', CY(1));
end
if CY(2) < 0
fprintf( fid1, ' %0.10e', CY(2));
else
fprintf( fid1, ' %0.10e', CY(2));
end
if CY(3) < 0
fprintf( fid1, ' %0.10e CY\n', CY(3));
else
fprintf( fid1, ' %0.10e CY\n', CY(3));
end
if CZ(1) < 0
fprintf( fid1, ' %0.10e', CZ(1));
else
fprintf( fid1, ' %0.10e', CZ(1));
end
if CZ(2) < 0
fprintf( fid1, ' %0.10e', CZ(2));
else
fprintf( fid1, ' %0.10e', CZ(2));
end
if CZ(3) < 0
fprintf( fid1, ' %0.10e CZ\n', CZ(3));
else
fprintf( fid1, ' %0.10e CZ\n', CZ(3));
end
if SZ(1) < 0
fprintf( fid1, ' %0.10e', SZ(1));
else
fprintf( fid1, ' %0.10e', SZ(1));
end
if SZ(2) < 0
fprintf( fid1, ' %0.10e', SZ(2));
else
fprintf( fid1, ' %0.10e', SZ(2));
end
if SZ(3) < 0
fprintf( fid1, ' %0.10e SZ\n', SZ(3));
else
fprintf( fid1, ' %0.10e SZ\n', SZ(3));
end
fprintf( fid1, ' 117.64700 0.00000 0.00000 0.00000 117.64700 0.00000 K-MATRIX\n');
fprintf( fid1, ' 0.00000D+00 0.00000D+00 0.00000D+00 0.00000D+00 DISTORTION\n');
fprintf( fid1, ' 0.1000000000D+01 0.1000000000D+01 0.1000000000D+01 SIGMA_VSO\n');
fprintf( fid1, ' 0.1000000000D-02 0.1000000000D-02 0.1000000000D-02 SIGMA_PTG\n');
fprintf( fid1, 'LANDMARKS\n');
fprintf( fid1, 'LIMB FITS\n');
fprintf( fid1, 'END FILE\n');
fclose( fid1);
fid2 = fopen(tstring2, 'w+');
fprintf( fid2, '%s%s%s%s%s%04.0f\n', camera, test_version, test_string, char(lmrk_name(n)), char(res_name(b)), i);
fprintf( fid2, ' -0.9755099111D+00 0.2079443023D+00 -0.7169086808D-01 BOD_FRAME\n');
if SCOBJ(1) < 0
fprintf( fid2, ' %0.10e', SCOBJ(1));
else
fprintf( fid2, ' %0.10e', SCOBJ(1));
end
if SCOBJ(2) < 0
fprintf( fid2, ' %0.10e', SCOBJ(2));
else
fprintf( fid2, ' %0.10e', SCOBJ(2));
end
if SCOBJ(3) < 0
fprintf( fid2, ' %0.10e SCOBJ\n', SCOBJ(3));
else
fprintf( fid2, ' %0.10e SCOBJ\n', SCOBJ(3));
end
fprintf(fid2, ' 0.1000000000D+01 0.1000000000D+01 0.1000000000D+01 SIGMA_VSO\n');
if CX(1) < 0
fprintf( fid2, ' %0.10e', CX(1));
else
fprintf( fid2, ' %0.10e', CX(1));
end
if CX(2) < 0
fprintf( fid2, ' %0.10e', CX(2));
else
fprintf( fid2, ' %0.10e', CX(2));
end
if CX(3) < 0
fprintf( fid2, ' %0.10e CX\n', CX(3));
else
fprintf( fid2, ' %0.10e CX\n', CX(3));
end
if CY(1) < 0
fprintf( fid2, ' %0.10e', CY(1));
else
fprintf( fid2, ' %0.10e', CY(1));
end
if CY(2) < 0
fprintf( fid2, ' %0.10e', CY(2));
else
fprintf( fid2, ' %0.10e', CY(2));
end
if CY(3) < 0
fprintf( fid2, ' %0.10e CY\n', CY(3));
else
fprintf( fid2, ' %0.10e CY\n', CY(3));
end
if CZ(1) < 0
fprintf( fid2, ' %0.10e', CZ(1));
else
fprintf( fid2, ' %0.10e', CZ(1));
end
if CZ(2) < 0
fprintf( fid2, ' %0.10e', CZ(2));
else
fprintf( fid2, ' %0.10e', CZ(2));
end
if CZ(3) < 0
fprintf( fid2, ' %0.10e CZ\n', CZ(3));
else
fprintf( fid2, ' %0.10e CZ\n', CZ(3));
end
fprintf( fid2, ' 0.1000000000D-02 0.1000000000D-02 0.1000000000D-02 SIGMA_PTG\n');
fprintf( fid2, 'END FILE');
fclose('all');
fprintf('| %04.0f | %03.0f | %02.0f | %03.0f | %02.0f | %s %+07.3f %07.3f | %s %03.3f |\n', i , azimuth_sc, zenith_sc, azimuth_sun, zenith_sun, char(lmrk_name(n)), lat*180/pi, lon*180/pi, char(res_name(b)), res_numb*100000)
end
end
end
end
end
end
Kristofer = 'da bomb';
end
Dirty_SUMFILES_f.m
function [ SCOBJ, CX, CY, CZ, SZ, lat, lon, res_numb] = Dirty_Sumfiles( BENNU2LMRK, azimuth_sc, zenith_sc, azimuth_sun, zenith_sun, distance_sc )
% Important:
% azimuth and zenith angle inputs are in a NEZ (North, East, Zenith) frame
% centered on the landmark.
% Transforming the spherical cordinates of sc in NEZ frame to cartesian
% coordinates of sc in NEZ frame (km)
x_sc = distance_sc*sind(zenith_sc)*cosd(azimuth_sc);
y_sc = distance_sc*sind(zenith_sc)*sind(azimuth_sc);
z_sc = distance_sc*cosd(zenith_sc);
% Making the x coordinate negative so the frame becomes SEZ (km)
x_sc = -x_sc;
% Transformation matrix that transforms SEZ to BF
r = norm(BENNU2LMRK);
lat = acos(BENNU2LMRK(3)/r);
lon = atan2(BENNU2LMRK(2),BENNU2LMRK(1));
if lat > pi/2;
lat = -(lat - pi/2);
else
lat = pi/2 - lat;
end
if lon < 0;
lon = lon+2*pi;
else
lon = lon;
end
Qxx_mat = inv([ sin(lat)*cos(lon), sin(lat)*sin(lon), -cos(lat); ...
-sin(lon), cos(lon), 0; cos(lat)*cos(lon), cos(lat)*sin(lon),...
sin(lat) ]);
% Landmark to SC vector in BF calculation (km)
HOHO = Qxx_mat*[ x_sc; y_sc; z_sc];
% Calculating SC to landmark unit vector in BF frame (km)
CZ = [-HOHO(1) -HOHO(2) -HOHO(3)]/norm(HOHO);
% Creating pixel unit vector from SEZ to BF (km)
fro = (CZ(1)+CZ(2))/CZ(3);
froyo = [-1;-1;fro];
CX = froyo/norm(froyo);
% Transforming line unit vector from SEZ to BF (km)
CY = cross(CZ,CX);
CY = CY/norm(CY);
% Vector addition to get SCOBJ in BF with orgin at center of Bennu (km)
SCOBJ = HOHO + BENNU2LMRK;
% Transforming SCOBJ in BF with orgin at sc (km)
SCOBJ = -SCOBJ;
% Transforming the spherical cordinates of the sun in SEZ frame to cartesian
% coordinates of the sun in SEZ frame (km)
distance_sun = 149597871;
x_sun = distance_sun*sind(zenith_sun)*cosd(azimuth_sun);
y_sun = distance_sun*sind(zenith_sun)*sind(azimuth_sun);
z_sun = distance_sun*cosd(zenith_sun);
% Making the x coordinate negative so the frame becomes SEZ
x_sun = -x_sun;
% Landmark to Sun vector in BF calculation
Lugia = Qxx_mat*[ x_sun; y_sun; z_sun ];
% Vector addition to get Bennu center to sun vector
Ben2Sun = Lugia+BENNU2LMRK;
% Bennu center to sun unit vector
SZ = Ben2Sun/norm(Ben2Sun);
% Resolution number
res_numb = tan(0.0000135/2)*2*distance_sc;
end