[PATCH] Use actual min and max temperatures in statistics.

Henrik Brautaset Aronsen subsurface at henrik.synth.no
Thu Jan 24 05:51:12 PST 2013


Meh, I need to consider the watertemp property if there are no samples with
temperature as well.  No time for that now, I'll look at it when I'm back
home in a few hours.

In the mean time, feel free to comment my questions or other aspects of the
patch :)

Henrik

On Thu, Jan 24, 2013 at 2:08 PM, <subsurface at henrik.synth.no> wrote:

> From: Henrik Brautaset Aronsen <subsurface at henrik.synth.no>
>
> The statistics page only used each dive's "watertemp" attribute,
> regardless of actual higher/lower temperatures in the samples.  By
> finding the actual max/min temperatures, the statistics page utilize
> more "real" data, and look better even on single dives.
>
> Signed-off-by: Henrik Brautaset Aronsen <subsurface at henrik.synth.no>
> ---
>
>
> This works, but we might consider structuring this differently (or not):
>
> * Should maxtemp and mintemp be on the dive, and not on the divecomputer?
>
> * Should parsing of min/maxtemp be done somewhere else thanin entry()?
>
> Henrik
>
>
>  dive.h       |  2 +-
>  parse-xml.c  |  6 ++++++
>  statistics.c | 24 +++++++++++++++++-------
>  3 files changed, 24 insertions(+), 8 deletions(-)
>
> diff --git a/dive.h b/dive.h
> index fc82f5e..16a7caa 100644
> --- a/dive.h
> +++ b/dive.h
> @@ -265,7 +265,7 @@ struct divecomputer {
>         timestamp_t when;
>         duration_t duration, surfacetime;
>         depth_t maxdepth, meandepth;
> -       temperature_t airtemp, watertemp;
> +       temperature_t airtemp, watertemp, mintemp, maxtemp;
>         pressure_t surface_pressure;
>         int salinity; // kg per 10000 l
>         const char *model;
> diff --git a/parse-xml.c b/parse-xml.c
> index 85b1c53..eb89a56 100644
> --- a/parse-xml.c
> +++ b/parse-xml.c
> @@ -1271,6 +1271,12 @@ static void entry(const char *name, char *buf)
>         }
>         if (cur_sample) {
>                 try_to_fill_sample(cur_sample, name, buf);
> +               if (cur_dive && cur_sample->temperature.mkelvin) {
> +                       if (cur_dive->dc.maxtemp.mkelvin == 0 ||
> cur_sample->temperature.mkelvin > cur_dive->dc.maxtemp.mkelvin)
> +                               cur_dive->dc.maxtemp =
> cur_sample->temperature;
> +                       if (cur_dive->dc.mintemp.mkelvin == 0 ||
> cur_sample->temperature.mkelvin < cur_dive->dc.mintemp.mkelvin)
> +                               cur_dive->dc.mintemp =
> cur_sample->temperature;
> +               }
>                 return;
>         }
>         if (cur_dc) {
> diff --git a/statistics.c b/statistics.c
> index 1050b39..77afcef 100644
> --- a/statistics.c
> +++ b/statistics.c
> @@ -109,7 +109,7 @@ static char * get_time_string(int seconds, int
> maxdays);
>
>  static void process_dive(struct dive *dp, stats_t *stats)
>  {
> -       int old_tt, sac_time = 0;
> +       int old_tt, sac_time, mean_temp = 0;
>         const char *unit;
>
>         old_tt = stats->total_time.seconds;
> @@ -122,12 +122,22 @@ static void process_dive(struct dive *dp, stats_t
> *stats)
>                 stats->max_depth.mm = dp->dc.maxdepth.mm;
>         if (stats->min_depth.mm == 0 || dp->dc.maxdepth.mm < stats->
> min_depth.mm)
>                 stats->min_depth.mm = dp->dc.maxdepth.mm;
> -       if (dp->dc.watertemp.mkelvin) {
> -               if (stats->min_temp == 0 || dp->dc.watertemp.mkelvin <
> stats->min_temp)
> -                       stats->min_temp = dp->dc.watertemp.mkelvin;
> -               if (dp->dc.watertemp.mkelvin > stats->max_temp)
> -                       stats->max_temp = dp->dc.watertemp.mkelvin;
> -               stats->combined_temp +=
> get_temp_units(dp->dc.watertemp.mkelvin, &unit);
> +
> +       if (dp->dc.mintemp.mkelvin) {
> +               if (stats->min_temp == 0 || dp->dc.mintemp.mkelvin <
> stats->min_temp)
> +                       stats->min_temp = dp->dc.mintemp.mkelvin;
> +       }
> +       if (dp->dc.maxtemp.mkelvin) {
> +               if (stats->max_temp == 0 || dp->dc.maxtemp.mkelvin >
> stats->max_temp)
> +                       stats->max_temp = dp->dc.maxtemp.mkelvin;
> +       }
> +       if (dp->dc.mintemp.mkelvin || dp->dc.maxtemp.mkelvin) {
> +               mean_temp = dp->dc.mintemp.mkelvin;
> +               if (mean_temp)
> +                       mean_temp = (mean_temp + dp->dc.maxtemp.mkelvin) /
> 2;
> +               else
> +                       mean_temp = dp->dc.maxtemp.mkelvin;
> +               stats->combined_temp += get_temp_units(mean_temp, &unit);
>                 stats->combined_count++;
>         }
>
> --
> 1.7.11.5
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.hohndel.org/pipermail/subsurface/attachments/20130124/a5e29e7e/attachment-0001.html>


More information about the subsurface mailing list