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>
This commit is contained in:
Dirk Hohndel 2012-11-11 10:36:46 +01:00
parent 4c3dfee446
commit 7c09991876
3 changed files with 11 additions and 2 deletions

6
dive.c
View file

@ -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

3
dive.h
View file

@ -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;

View file

@ -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");