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

DirtySumfiles (last edited 2016-01-04 14:19:09 by KristoferDrozd)