Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
A
artoa4argo
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
argoTools
artoa4argo
Commits
815ff64b
Commit
815ff64b
authored
1 year ago
by
oboebel
Browse files
Options
Downloads
Patches
Plain Diff
New tracking method Singel Source plus Topography tracking.
parent
eec86061
No related branches found
Branches containing commit
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
artoa.ini
+13
-8
13 additions, 8 deletions
artoa.ini
plugins/tracking/SiSoTopo.m
+213
-29
213 additions, 29 deletions
plugins/tracking/SiSoTopo.m
with
226 additions
and
37 deletions
artoa.ini
+
13
−
8
View file @
815ff64b
%
ARTOA
ini
file
for
dimes
first
three
floats
%
ARTOA
ini
file
for
dimes
first
three
floats
[files]
[files]
%-soundsourcefile
C:\MyData\RAFOS\HAFOS.soso
-soundsourcefile
C:\MyData\RAFOS\HAFOS.soso
-soundsourcefile
C:\MyData\RAFOS\TESTwithOFFSETS.soso
%-soundsourcefile
C:\MyData\RAFOS\TESTwithOFFSETS.soso
-floatfile
..\HAFOS.flo
%
not
used
in
artoa4
yet
-floatfile
..\HAFOS.flo
%
not
used
in
artoa4
yet
-bathyfile
..\HAFOS.prj
%
not
used
in
artoa4
yet
-bathyfile
..\HAFOS.prj
%
not
used
in
artoa4
yet
-etopo
C:\MyData\TOPO\etopo1_ice_c.flt
-etopo
C:\MyData\TOPO\etopo1_ice_c.flt
-floatProfiles
\\smb.isibhv.dmawi.de\projects\argoAWI\data\apex_analysis\mat\nemo_data.mat
-trackingContours
C:\MyData\ARTOA\contours_Grid5000_Step50.mat
[directory]
[directory]
-interim
C:\MyData\RAFOS
\
-interim
C:\MyData\RAFOS
\
-rfb
C:\MyData\RAFOS
\
-rfb
C:\MyData\RAFOS
\
-soundsource
C:\MyData\RAFOS
\
-soundsource
C:\MyData\RAFOS
\
-ancillary
C:\MyData\ARTOA
\
%
the
following
parameters
are
not
yet
used
in
artoa4
%
the
following
parameters
are
not
yet
used
in
artoa4
-argos
..
-argos
..
-rft
..
-rft
..
...
@@ -23,6 +27,7 @@
...
@@ -23,6 +27,7 @@
-surface
-surface
-ric
C:\MyData\RAFOS
\
-ric
C:\MyData\RAFOS
\
[filemask]
[filemask]
-interim
*.itm
-interim
*.itm
-rfb
*.rfb
-rfb
*.rfb
...
...
This diff is collapsed.
Click to expand it.
plugins/tracking/SiSoTopo.m
+
213
−
29
View file @
815ff64b
function
[
positions
,
clockError
]
=
SiSoTopo
(
pData
,
pSoundsourcePositions
,
pCombinationDetails
,
pStartEndPosition
)
function
[
positions
,
clockError
]
=
SiSoTopo
_v2
(
pData
,
pSoundsourcePositions
,
pCombinationDetails
,
pStartEndPosition
)
%MYTRACKINGMETHOD A sample function to write your own tracking algorithms
%MYTRACKINGMETHOD A sample function to write your own tracking algorithms
%
%
% Parameters:
% Parameters:
plo
% pData (struct):
% pData (struct):
% Data structured by soundsource. The toa is already corrected
% Data structured by soundsource. The toa is already corrected
% (e.g. doppler correction etc.)
% (e.g. doppler correction etc.)
...
@@ -21,6 +21,8 @@ function [positions, clockError] = SiSoTopo(pData, pSoundsourcePositions, pCombi
...
@@ -21,6 +21,8 @@ function [positions, clockError] = SiSoTopo(pData, pSoundsourcePositions, pCombi
% clockError (double):
% clockError (double):
% The estimated clock error.
% The estimated clock error.
global
artoaConfig
;
global
artoaDataInput
;
%% Get reference position and all soundsource names that are involved
%% Get reference position and all soundsource names that are involved
referencePosition
=
cellfun
(
@
str2double
,
strsplit
(
pCombinationDetails
.
referencePosition
{
1
}));
referencePosition
=
cellfun
(
@
str2double
,
strsplit
(
pCombinationDetails
.
referencePosition
{
1
}));
soundsourceNames
=
strsplit
(
pCombinationDetails
.
soundsources
{
1
});
soundsourceNames
=
strsplit
(
pCombinationDetails
.
soundsources
{
1
});
...
@@ -31,40 +33,215 @@ pCombinationDetails
...
@@ -31,40 +33,215 @@ pCombinationDetails
pSoundsourcePositions
pSoundsourcePositions
%% Return NaN because this is a sample
%% Return NaN because this is a sample
positions
=
NaN
(
size
(
pData
.
(
soundsourceNames
{
1
})
.
date
,
1
),
2
);
positions
=
NaN
(
size
(
pData
.
(
soundsourceNames
{
1
})
.
date
,
1
),
2
);
clockError
=
[];
clockError
=
NaN
(
size
(
pData
.
(
soundsourceNames
{
1
})
.
date
,
1
),
1
);
%% Additional data needed
%%% addpath('C:\Users\oboebel\Documents\MATLAB\FloatTools\lib\utils\seawater_library') % for pressure to depth conversion
%%% wurde nach %%%%% C:\Users\oboebel\Documents\MATLAB\artoa4\lib\vendor\seawater_library verschoben
% the topography file with contour lines
% % %
% load('C:\Users\oboebel\Documents\MATLAB\artoa4development\tools\contours_Grid5000_Step50.mat')
% replaced by next line
load
(
artoaConfig
.
files
.
trackingContours
)
% get the corresponding profile depth. Profile depths are spaced by 10
% days. To match daily rafos fixes, we use linear interpolation in-between
% to obtain daily pressure readings. NOte: the is intended for un-grounded
% floats. Grounded floats will actually have daily bottom pressure
% readings. This might be queried by comparing the depth readings in the
% RAFOS data block with the BOTTOM block pressure readings.
% global artoaDataInput
% profileInfo = artoaDataInput.rfb.PROFILE_DEPTH
% profilePressure = profileInfo(:,8)
% profileID = profileInfo(:,1)
% now the pressure date and the distance date need to be matched.
%--> interpolate profile pressures based on distance dates
% this needs to be recoded in line with artoa4 structure, rfb structure,
% and apex to profile data, currently hard coded to 8882
%load('C:\Users\oboebel\Documents\MATLAB\artoa4development\floatdata.mat')
% % % load('\\smb.isibhv.dmawi.de\projects\argoAWI\data\apex_analysis\mat\nemo_data.mat')
floatProfilesAll
=
load
(
artoaConfig
.
files
.
floatProfiles
);
% added link from local nemo_data.mat to \\smb.isibhv.dmawi.de\projects\argoAWI\data\apex_analysis\mat\nemo_data.mat'
[
floatProfileDataSingle
,
index2Float
]
=
nemo
.
float
.
find
(
floatProfilesAll
.
nemo_data
,
artoaDataInput
.
rfb
.
FLOAT
.
floatname
);
profileNumbers
=
1
:
size
(
floatProfileDataSingle
,
2
)
launchposition
=
artoaDataInput
.
rfb
.
FLOAT
.
launchpos
;
% % % %%% 8882
% % % index2Float = 4;
% % % profileNumbers = 1:77;
% % % launchposition = [-74.5704, -29.1891]; % plot the launch position % hardcoded, to be adjusted
% % % %%% 8885
% % % index2Float = 6;
% % % profileNumbers = 1:36;
% % % launchposition = [-74.5704, -29.1891]; % dummy, achtung, falsche werte
% % % %%% 9223
% % % index2Float = 22;
% % % profileNumbers = 1:36;
% % % launchposition = [-70, -8.]; % plot the launch position % hardcoded, to be adjusted
cutOff
=
1995
;
% dbar, if maxPressure less, float is considered grounded (black points), otherwise plot red points
%%% Future: add pop-up dialog to modify parameters if wanted.
% all data is loaded, here we go:
% control plots %%
% control plots %%
figure
figure
(
2
)
lati
=
[
-
78
-
60
]
lati
=
[
-
75
-
72
];
% Markus Floats --> move to popup
loni
=
[
-
70
0
]
loni
=
[
-
42
-
20
];
h
=
axesm
(
'MapProjection'
,
'stereo'
,
'MapLatLimit'
,
lati
,
'MapLonLimit'
,
loni
,
'Frame'
,
'on'
,
'Grid'
,
'on'
)
MapHandle
=
worldmap
(
lati
,
loni
);
lati
=
[
-
75
-
60
];
% Neumayer Floats
loni
=
[
-
35
-
5
];
% plot the map
h
=
axesm
(
'MapProjection'
,
'stereo'
,
'MapLatLimit'
,
lati
,
'MapLonLimit'
,
loni
,
'Frame'
,
'on'
,
'Grid'
,
'on'
);
load
(
'C:\Users\oboebel\Documents\MATLAB\CPTCMAP\WeddellContours.mat'
)
MapHandle
=
worldmap
(
lati
,
loni
);
hold
on
;
helper
=
fliplr
(
cArray
{
3
}
'
);
latMap
=
helper
(:,
1
);
% % prepare the map
lonMap
=
helper
(:,
2
);
% helper = fliplr(cArray{3}');
plotm
(
latMap
,
lonMap
)
% index 3 = 2000m , then upwards in 50m increments
% latMap = helper(:,1);
hold
on
% lonMap = helper(:,2);
% hold on
% program uses only first selected sound source
centerSoSo
=
pSoundsourcePositions
.
W18a
sourceName
=
pCombinationDetails
.
soundsources
;
distance
=
[
pData
.
W18a
.
distance
{:}]
'
;
sourceName
=
sourceName
{
1
}
distance
=
distance
/
60
/
1.852
%--> distence in arch length
[
token
,
remain
]
=
strtok
(
sourceName
,
' '
);
sourceName
=
token
;
for
i
=
1
:
length
(
distance
)
title
(
sourceName
)
[
lat
,
lon
]
=
scircle1
(
centerSoSo
(
1
),
centerSoSo
(
2
),
distance
(
i
))
%plotm(lat,lon,'r');
plotm
(
launchposition
(
1
),
launchposition
(
2
),
'ko'
)
% plot the launch position % hardcoded, to be adjusted
[
xi
,
yi
]
=
polyxpoly
(
latMap
,
lonMap
,
lat
,
lon
);
% hier muss die zum Druck passende latMap lonMap verwendung finden.
plotm
(
xi
,
yi
,
'xk'
)
eval
([
'centerSoSo = pSoundsourcePositions.'
,
sourceName
])
drawnow
plotm
(
centerSoSo
(
1
),
centerSoSo
(
2
),
'ob'
,
'MarkerSize'
,
10
)
eval
([
'distanceVar = [pData.'
,
sourceName
,
'.distance{:}]'
]);
% these are the distances from the TOA, calculated on the fly by artoa4
distanceVar
=
distanceVar
'
;
distanceVar
=
distanceVar
/
60
/
1.852
;
%--> distence in arch length
eval
([
'pongDate = [pData.'
,
sourceName
,
'.date{:}]'
]);
pongDate
=
fliplr
(
rd2dmy
(
pongDate
'
));
pongDate
=
datetime
((
pongDate
));
% this is the array of pong dates
startDate
=
pongDate
(
1
);
for
i
=
1
:
length
(
profileNumbers
)
% % % profileData = nemo_data{index2Float}{i}.PROFILE_DATA;
profileData
=
floatProfileDataSingle
{
i
}
.
PROFILE_DATA
;
pressureMax
(
i
,
1
)
=
profileData
(
1
,
7
);
depthMax
(
i
,
1
)
=
sw_dpth
(
pressureMax
(
i
,
1
),
centerSoSo
(
1
));
% temperatureMax(i,1) = profileData(1,5);
profileTech
=
floatProfileDataSingle
{
i
}
.
PROFILE_TECHNICAL_DATA
;
pressureMaxTime
(
i
,
1
)
=
datetime
(
profileTech
.
xmit_ascent_start_time
);
% this is when the pofile started
profileNumber
(
i
,
1
)
=
profileTech
.
xmit_profile_number
;
end
if
~
pCombinationDetails
.
backwardTracking
;
currentRefPosition
=
pCombinationDetails
.
referencePosition
;
elseif
pCombinationDetails
.
backwardTracking
currentRefPosition
=
pCombinationDetails
.
referencePositionEnd
;
end
currentRefPosition
=
cell2mat
(
currentRefPosition
);
[
token
,
remain
]
=
strtok
(
currentRefPosition
,
' '
);
currentRefPosition
=
[
str2num
(
token
),
str2num
(
remain
)]
hp_select
=
plotm
(
currentRefPosition
(
1
),
currentRefPosition
(
2
),
'k*'
);
textm
(
currentRefPosition
(
1
),
currentRefPosition
(
2
),
' refPos'
);
x
=
datenum
(
pressureMaxTime
)
;
% the profile timestamps
v
=
depthMax
;
% the profile depths at the profile timestamps
xq
=
datenum
(
pongDate
);
% the RAFOS timestamps
vq
=
interp1
(
x
,
v
,
xq
);
% the interpolated profile depths at the RAFOS timestamps
pongDepth
=
vq
;
%figure(3) % pongDepth only covers the period of this sound source
x
=
datenum
(
pressureMaxTime
)
;
% the profile timestamps
v
=
pressureMax
;
% the profile depths at the profile timestamps
xq
=
datenum
(
pongDate
);
% the RAFOS timestamps
vq
=
interp1
(
x
,
v
,
xq
);
% the interpolated profile depths at the RAFOS timestamps
% plot(x,v,'o'); hold on
% plot(xq,vq,'-')
% ylabel('pressure [dbar]')
% plot( get(gca,'Xlim')', [cutOff cutOff]')
for
i
=
1
:
length
(
distanceVar
)
% loop over all distances / received pongs
[
lat
,
lon
]
=
scircle1
(
centerSoSo
(
1
),
centerSoSo
(
2
),
distanceVar
(
i
));
figure
(
2
)
% plotm(lat,lon,'r');
% find the contour fitting to this depth - latMap, lon Map
currentDepth
=
pongDepth
(
i
);
currentDate
=
pongDate
(
i
);
if
~
isnan
(
currentDepth
)
% currentDepth = sw_dpth(currentDepth,centerSoSo(1));
helper
=
abs
(
abs
(
contourLevels
)
-
currentDepth
);
index2contour
=
find
(
min
(
abs
(
helper
))
==
helper
)
;
% this is the contour closes to the current position
helper
=
fliplr
(
cArray
{
index2contour
}
'
);
latMap
=
helper
(:,
1
);
lonMap
=
helper
(:,
2
);
index
=
(
latMap
>
-
68
)
|
(
latMap
<
-
74.6
)
|
(
lonMap
<
-
60
);
latMap
(
index
)
=
NaN
;
lonMap
(
index
)
=
NaN
;
figure
(
2
)
plotm
(
latMap
(
2
:
end
),
lonMap
(
2
:
end
),
'k:'
,
'MarkerSize'
,
1
)
% plot the contour line
[
xi
,
yi
]
=
polyxpoly
(
latMap
,
lonMap
,
lat
,
lon
);
% P1 = polyshape(latMap,lonMap)
% P2 = polyshape(lat,lon)
% C = intersect(P1,P2)
% xi = C(1)
% yi = C(2)
if
~
isempty
(
xi
)
% continue/plot only if intersection exists
hp_temp
=
plotm
(
xi
,
yi
,
'.'
,
'MarkerSize'
,
10
,
'Color'
,[
.
6
.
6
.
6
]);
% all potential positions in grey
[
ARCLEN
,
AZ
]
=
distance
(
currentRefPosition
(
1
),
currentRefPosition
(
2
),
xi
,
yi
);
% chose nearest Neighbor
indexNearby
=
find
(
ARCLEN
==
min
(
ARCLEN
))
;
xi
=
xi
(
indexNearby
);
yi
=
yi
(
indexNearby
);
% currentRefPosition = [xi,yi];
hp_select
=
plotm
(
xi
,
yi
,
'.'
,
'MarkerSize'
,
10
,
'Color'
,[
.
6
.
6
.
6
]);
% overplot the closest position
[
i
length
(
distanceVar
)
currentDepth
xi
yi
];
if
currentDepth
>
sw_dpth
(
cutOff
,
centerSoSo
(
1
))
% float touches bottom; cutoff[dbar]=1995, cutoff[m]=1965
set
(
hp_select
,
'color'
,
'r'
);
% float did touch bottom.
else
if
~
pCombinationDetails
.
backwardTracking
;
% ergo forward tracking
% if currentDate < (startDate+360) % parking depth nominally 2000m
if
currentDate
<
(
startDate
)
% parking depth nominally 2000m
set
(
hp_select
,
'color'
,
'k'
);
else
% parking depth nominally 800m
set
(
hp_select
,
'color'
,
'g'
);
end
elseif
pCombinationDetails
.
backwardTracking
;
% ergo backward tracking
if
currentDate
>=
(
startDate
)
%
set
(
hp_select
,
'color'
,
'g'
);
else
% parking depth nominally 800m % der Teil hier ist noch unlogisch und muss überarbeitet werden
set
(
hp_select
,
'color'
,
'g'
);
end
end
end
positions
(
i
,:)
=
[
xi
,
yi
];
% see line 34
clockError
(
i
,:)
=
0
;
delete
(
hp_temp
)
% check if profile label shall be added
helper
=
find
(
abs
(
datenum
(
currentDate
)
-
x
)
<=
2
);
%0.75 current Pong date is within a day of profile date
if
~
isempty
(
helper
)
textm
(
xi
,
yi
,
num2str
(
profileNumber
(
helper
)),
'HorizontalAlignment'
,
'left'
,
'VerticalAlignment'
,
'bottom'
)
end
end
drawnow
pause
end
end
end
if
1
==
2
exportgraphics
(
gcf
,
'C:\MyData\APEX\8882.pdf'
,
'Append'
,
true
)
end
...
@@ -72,3 +249,10 @@ end
...
@@ -72,3 +249,10 @@ end
end
end
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment