diff options
author | Dirk Hohndel <dirk@hohndel.org> | 2012-11-11 10:36:46 +0100 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2012-11-11 10:36:46 +0100 |
commit | 7c09991876ef8b34bda6f5615a37f99e1b476b18 (patch) | |
tree | cea814dea546805424406cc2f9525f5b287c6bf2 | |
parent | 4c3dfee446eda061f862e1fdcce93b54a066feff (diff) | |
download | subsurface-7c09991876ef8b34bda6f5615a37f99e1b476b18.tar.gz |
Trim the dive to exclude surface time at beginning and end
We don't change any of the samples, we just don't plot (or consider for
dive time / mean calculations) the samples at the beginning or end of the
dive that are less than a certain threshold under water. Right now that's
an arbitrary 75cm which seems to Do The Right Thing(tm) for the dives I
tried this with - but I'm happy to look at other values if this causes
problems for people with dive computers I do not have access to.
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r-- | dive.c | 6 | ||||
-rw-r--r-- | dive.h | 3 | ||||
-rw-r--r-- | profile.c | 4 |
3 files changed, 11 insertions, 2 deletions
@@ -449,10 +449,10 @@ struct dive *fixup_dive(struct dive *dive) lastindex = index; lastpressure = pressure; - if (lastdepth) + if (lastdepth > SURFACE_THRESHOLD) end = time; - if (depth) { + if (depth > SURFACE_THRESHOLD) { if (start < 0) start = lasttime; if (depth > maxdepth) @@ -479,6 +479,8 @@ struct dive *fixup_dive(struct dive *dive) lastdepth = depth; lasttime = time; } + dive->start = start; + dive->end = end; /* if all the samples for a cylinder have pressure data that * is basically equidistant throw out the sample cylinder pressure * information but make sure we still have a valid start and end @@ -261,6 +261,7 @@ struct dive { tripflag_t tripflag; dive_trip_t *divetrip; int selected; + int start, end; timestamp_t when; char *location; char *notes; @@ -296,6 +297,8 @@ static inline int depth_to_mbar(int depth, struct dive *dive) return depth / 10.0 * specific_weight + surface_pressure + 0.5; } +#define SURFACE_THRESHOLD 750 /* somewhat arbitrary: only below 75cm is it really diving */ + /* this is a global spot for a temporary dive structure that we use to * be able to edit a dive without unintended side effects */ extern struct dive edit_dive; @@ -1704,6 +1704,10 @@ static struct plot_info *create_plot_info(struct dive *dive, int nr_samples, str int delay = 0; struct sample *sample = dive_sample+i; + if (sample->time.seconds < dive->start || sample->time.seconds > dive->end) { + pi_idx--; + continue; + } entry = pi->entry + i + pi_idx; while (ceil_ev && ceil_ev->time.seconds <= sample->time.seconds) { struct event *next_ceil_ev = get_next_event(ceil_ev->next, "ceiling"); |