Skip to content
Snippets Groups Projects
Commit a715ada3 authored by Tor-Einar Skog's avatar Tor-Einar Skog
Browse files

Added test page for model descriptions

Minor display change in detail template
parent aa857eed
No related branches found
No related tags found
No related merge requests found
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
</ul> </ul>
<div class="tab-content"> <div class="tab-content">
<div id="modelDescription" class="tab-pane fade in active"> <div id="modelDescription" class="tab-pane fade in active">
{{model.description|safe| linebreaks}} {{model.description|safe}}
</div> </div>
<div id="warningStatusInterpretation" class="tab-pane fade"> <div id="warningStatusInterpretation" class="tab-pane fade">
{{model.warning_status_interpretation|safe| linebreaks}} {{model.warning_status_interpretation|safe| linebreaks}}
......
{% extends "base.html" %}
{% comment %}
#
# Copyright (c) 2014 NIBIO <http://www.nibio.no/>.
#
# This file is part of VIPSWeb.
# VIPSWeb is free software: you can redistribute it and/or modify
# it under the terms of the NIBIO Open Source License as published by
# NIBIO, either version 1 of the License, or (at your option) any
# later version.
#
# VIPSWeb is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# NIBIO Open Source License for more details.
#
# You should have received a copy of the NIBIO Open Source License
# along with VIPSWeb. If not, see <http://www.nibio.no/licenses/>.
#
{% endcomment %}
{% load i18n %}
{% block title%}Model output test - {% trans "Models" %}{%endblock%}
{% block content %}
<div class="col-md-3">&nbsp;</div>
<div class="col-md-9">
<h1>Model output test</h1>
<ul class="nav nav-tabs">
<li class="active"><a data-toggle="tab" href="#modelDescription">{% trans "Description" %}</a></li>
<li><a data-toggle="tab" href="#warningStatusInterpretation">{% trans "Interpretation of warning status" %}</a></li>
<li><a data-toggle="tab" href="#modelUsage">{% trans "Technical usage" %}</a></li>
<li><a data-toggle="tab" href="#modelSampleConfig">{% trans "Sample configuration" %}</a></li>
</ul>
<div class="tab-content">
<div id="modelDescription" class="tab-pane fade in active">
<h2>Epleskurv <i>(Venturia inaequalis)</i></h2>
[BILDE]
<p>Foto: R. Langnes</p>
<h3>Modellbeskrivelse</h3>
<p>Soppen som gir epleskurv overvintrar som askosporar i gamalt bladverk på bakken.
Han kan også overvintra som mycel og konidiesporar på årsskot og knoppar, men det
har som regel lite å seia i godt stelte frukthagar. Askosporane vert kasta i regn
og kan infisere nye blad, skot og frukter når tilhøva ligg til rette for det.
Epleskurvvarslinga er i hovudsak basert på to modellar, der den eine omfattar
tilhøve for å få infeksjon. Den andre omfattar modning og spreiing av askosporar
frå gamle blad på bakken og viser kor mykje sporar som vert spreidd til ulike
tider i sesongen og døgnet. Parametrane som vert brukt i epleskurvvarslinga er
timeverdiar av temperatur (Tm/Tmf), nedbør (RR) og bladfukt (Bt/Btf/Btff). </p>
<h3>Infeksjonsmodell</h3>
<p>Det må vera fuktige blad, skot eller frukter i eit visst tidsrom for at sporane
til skurvsoppen skal kunne infisere, og kor raskt infeksjonen skjer er avhengig
av temperaturen. Det er såkalla bladfuktsensorar som indikerer kor lenge bladverket
er fuktig. Infeksjonstabellen, ofte kalla Mills' tabell, viser kor lang tid det
tar før dei første sporane har infisert ved ulike temperaturar. Ved optimal temperatur,
16 - 22 °C, tar det 6 timar.</p>
<p>Infeksjonsfaren vert uttrykt ved hjelp av ein akkumulert verdi i form av eit tal større
enn null. Talet aukar for kvar time med bladfukt. Når talet for infeksjonsfare passerer
90, vert varselindikatoren gul (mogleg fare). Når talet passerer 100, vert varselindikatoren
raud - eit symbol på infeksjonsfare. Viss det har vore tørt i 8 timar, vert infeksjonsfaren
nullstilt. Men viss det er tørt i mindre enn 8 timar mellom to infeksjonsperiodar, vert
timane med bladfukt i dei to periodane lagt saman når infeksjonsfaren vert rekna ut.</p>
<h3>Sporemodningsmodell</h3>
<p>I USA er det utarbeida ein modell for askosporemodning som er tilpassa norske tilhøve.
Modninga er ein funksjon av akkumulert varmesum (sum graddagar [døgngrader], basistemperaturen
er 0°C) frå ein bestemt startdato (= når dei første sporane er modne) og reknar ut kor
lenge det er fare for infeksjon av askosporar. Ved lange periodar utan nedbør eller langvarig
nattedogg (meir enn 7 dagar) vil akkumuleringa av døgngrader stansa. Døgngradeakkumuleringa vil
starta igjen så snart det vert registrert nedbør. Mange eller lange periodar utan nedbør vil
føre til ei forlenging av sesongen for infeksjon av askosporar.</p>
<h3>RIMpro</h3>
<p>I tillegg presenterer VIPS epleskurvvarsling frå RIMpro som er utvikla og vert levert av Marc
Trapman, Bio Fruit Advies, Nederland. Dette er ei ekstern teneste, men baserer seg på klimadata
frå stasjonane til Landbruksmeteorologisk teneste. </p>
<h3>Tolking av varsel</h3>
<ul>
<li>Grøne boksar vil seia at det ikkje har vore tilhøve for infeksjon av epleskurv gjeldande dag.</li>
<li>Gule boksar vil seia at ein kan forventa eit skurvvarsel i løpet av dei næraste timane viss vêrstasjonen fortset å registrere bladfukt.</li>
<li>Raude boksar vil seia at det har vore tilhøve for skurvinfeksjon inneverande dag.</li>
</ul>
[Figur 1. Skjermdump av varsel]
<p>Den blå streken viser prosent sporemodning, og når denne når 100%, er sesongen over og det
vil ikkje bli gitt fleire varsel inneverande sesong. Den blå linja er akkumulert
infeksjonsrisiko, og når denne passerer 90 og 100 vil bakgrunnen verta tilsvarande gul eller raud.</p>
<p>Tabell 1. Infeksjonsrisiko basert på smittepress og sort.</p>
<table class="table">
<thead>
<tr>
<th>&nbsp;</th>
<th colspan="3" style="text-align: center;">Resistens hos sorten</th>
</tr>
<tr>
<th>Skurvangrep året før</th>
<th>Sterk</th>
<th>Middels</th>
<th>Svak</th>
</tr>
</thead>
<tbody>
<tr>
<td style="font-weight: bold;">Lite</td>
<td>Låg</td>
<td>Låg</td>
<td>Middels</td>
</tr>
<tr>
<td style="font-weight: bold;">Middels</td>
<td>Låg</td>
<td>Middels</td>
<td>Høg</td>
</tr>
<tr>
<td style="font-weight: bold;">Mykje</td>
<td>Middels</td>
<td>Høg</td>
<td>Svært høg</td>
</tr>
</tbody>
</table>
<h3>Varslingssesong – oppstart og avslutning av varsel»</h3>
<p>Starttidspunkt: Grøn spiss i tidlegblomstrande eplesortar (til dømes Gravenstein og Summerred).
Sluttidspunkt: Etter enda primærsesong (når modninga av askosporar har nådd 100%)</p>
<h3>Utprøving og validering av modellen</h3>
<h4>Nasjonalt</h4>
<p>Nesten kvart år sidan 1989 har sporekasting av epleskurv gjennom sesongen blitt registrert av
sporefeller plassert i ein eplehage på Ås. Vi har hatt liknande registreringar for nokre andre
lokalitetar i Noreg også. Sporefellene har gitt data som viser når sporekastinga startar om
våren, under kva vêrtilhøve sporane vert kasta, og når primærsesongen er slutt. Ein modell
for sporemodning publisert i USA (Gadoury og MacHardy, 1982) er validert basert på data frå
denne sporefella, og ein justert versjon av modellen tilpassa norske tilhøve er publisert
(Stensvand et al. 2005). Seinare vart ulike modellar for modning og spreiing av askosporar
hos pæreskurvsoppen (Venturia pyrina) undersøkt med data frå Noreg, Belgia og Frankrike
(Eikemo et al. 2011), og den best tilpassa modellen var den som vi i dag brukar for epleskurv.
Utfordringa med pæreskurv er at såkalla greinskurv, der soppen overvintrar som mycel og
konidiesporar i årsskota, er langt viktigare enn for epleskurv. Spreiing av konidiar frå
greinskurv varer gjerne lengre utover i vekstsesongen enn spreiing av askosporar frå det gamle bladverket på bakken.</p>
<h4>Internasjonalt</h4>
<p>RIMpro er det verktøyet som er mest nytta internasjonalt i varsling av epleskurv. RIMpro er
basert på den same litteraturen som nemnt over, og vert årleg validert og revidert basert på ny forsking. </p>
<h3>Referanser</h3>
<ul class="literatureReference">
<li>Eikemo, H., Gadoury, D.M., Spotts, R.A., Villalta, O., Creemers, P., Seem, R.C. & Stensvand, A. 2011. Evaluation of six models to estimate ascospore maturation in Venturia pyrina. Plant Disease 95:279-28</li>
<li>Gadoury, D. M., and MacHardy, W. E. 1982. A model to estimate the maturity of ascospores of Venturia inaequalis. Phytopathology 72:901-904.4.</li>
<li>Stensvand, A., Eikemo, H., Gadoury, D.M. & Seem, R.C. 2005. Use of a rainfall frequency threshold to adjust a degree-day model of ascospore maturity of Venturia inaequalis. Plant Disease 89):198-202.</li>
</ul>
<h3>Kontaktpersonar</h3>
<p>Håvard Eikemo - haavard.eikemo@nibio.no<br/>
Arne Stensvand - arne.stensvand@nibio.no </p>
<h3>Lenker til mer informasjon</h3>
<ul>
<li><a href="http://leksikon.nibio.no/vieworganism.php?organismId=1_598" target="new">Epleskurv i plantevernleksikonet</a></li>
<li><a href="http://www.rimpro.eu/" target="new">RIMpro</a></li>
</ul>
</div>
<div id="warningStatusInterpretation" class="tab-pane fade">
TEST
</div>
<div id="modelUsage" class="tab-pane fade">
TEST
</div>
<div id="modelSampleConfig" class="tab-pane fade">
<pre>
TEST
</pre>
</div>
</div>
</div>
{% endblock %}
\ No newline at end of file
...@@ -29,6 +29,7 @@ urlpatterns = patterns('forecasts.views', ...@@ -29,6 +29,7 @@ urlpatterns = patterns('forecasts.views',
#url(r'^(?P<forecast_id>\d+)/$', cache_page(60 * 15)(views.detail), name='detail'), #url(r'^(?P<forecast_id>\d+)/$', cache_page(60 * 15)(views.detail), name='detail'),
url(r'^(?P<forecast_id>\d+)/$', (views.detail), name='detail'), url(r'^(?P<forecast_id>\d+)/$', (views.detail), name='detail'),
url(r'^(?P<forecast_id>\d+)/(?P<latest_days>\d+)/$', (views.detail_latest_days), name='detail_latest_days'), url(r'^(?P<forecast_id>\d+)/(?P<latest_days>\d+)/$', (views.detail_latest_days), name='detail_latest_days'),
url(r'^models/test/$', views.models_detail_test, name='models_detail_test'),
url(r'^models/(?P<model_id>\w+)/$', views.models_detail, name='models_detail'), url(r'^models/(?P<model_id>\w+)/$', views.models_detail, name='models_detail'),
url(r'^models/js/modelLocalNames.js', cache_page(60 * 30)(views.model_local_names_js), name='model_local_names_js'), url(r'^models/js/modelLocalNames.js', cache_page(60 * 30)(views.model_local_names_js), name='model_local_names_js'),
url(r'^models/$', views.models_index, name='models_index'), url(r'^models/$', views.models_index, name='models_index'),
......
...@@ -79,6 +79,10 @@ def models_detail(request, model_id): ...@@ -79,6 +79,10 @@ def models_detail(request, model_id):
context = {'model': model} context = {'model': model}
return render(request, 'models/detail.html', context) return render(request, 'models/detail.html', context)
def models_detail_test(request):
context = {}
return render(request, 'models/detail_test.html', context)
# Serving models' local names for the forecast Map # Serving models' local names for the forecast Map
def model_local_names_js(request): def model_local_names_js(request):
models_local_names = Model.get_models_local_names_as_json() models_local_names = Model.get_models_local_names_as_json()
......
...@@ -44,7 +44,7 @@ var initMap = function(geoJSON, container, mapAttribution) ...@@ -44,7 +44,7 @@ var initMap = function(geoJSON, container, mapAttribution)
// center to correct map projection) // center to correct map projection)
var view = new ol.View({ var view = new ol.View({
center: ol.proj.transform([10,65], 'EPSG:4326', map.getView().getProjection().getCode()), center: ol.proj.transform([10,65], 'EPSG:4326', map.getView().getProjection().getCode()),
zoom: 1, zoom: 8,
maxZoom: 8 maxZoom: 8
}); });
map.setView(view); map.setView(view);
...@@ -60,7 +60,7 @@ var initMap = function(geoJSON, container, mapAttribution) ...@@ -60,7 +60,7 @@ var initMap = function(geoJSON, container, mapAttribution)
}), }),
stroke: new ol.style.Stroke({ stroke: new ol.style.Stroke({
color: '#ff00ff', color: '#ff00ff',
width: 8 width: 2
}), }),
image: new ol.style.Circle({ image: new ol.style.Circle({
radius: 7, radius: 7,
...@@ -75,6 +75,21 @@ var initMap = function(geoJSON, container, mapAttribution) ...@@ -75,6 +75,21 @@ var initMap = function(geoJSON, container, mapAttribution)
dataProjection: 'EPSG:4326', dataProjection: 'EPSG:4326',
featureProjection: map.getView().getProjection().getCode() featureProjection: map.getView().getProjection().getCode()
}); });
// TODO: Convert small areas to points on large scale views
/**
for(var i in drawnfeatures)
{
console.log(drawnfeatures[i].getGeometryName());
var geome = drawnfeatures[i];
if(geome.getGeometry() instanceof ol.geom.Polygon)
{
console.log(geome.getGeometry().getArea());
}
}
console.log(drawnfeatures);
*/
//featureOverlay.clear(true); //featureOverlay.clear(true);
featureOverlay.getSource().addFeatures(drawnfeatures); featureOverlay.getSource().addFeatures(drawnfeatures);
featureOverlay.setMap(map); featureOverlay.setMap(map);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment