Differences between revisions 3 and 4
Revision 3 as of 2016-01-04 14:11:23
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

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