documentation
This commit is contained in:
@@ -0,0 +1,473 @@
|
||||
{% extends 'scanner/base.html' %}
|
||||
{% load i18n %}
|
||||
{% block columns %}{% endblock %}
|
||||
|
||||
{% block styles %}
|
||||
{{ block.super }}
|
||||
<link rel="stylesheet" href="/static/css/doc_database.css">
|
||||
<link rel="stylesheet" href="/static/css/doc_calibration.css">
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="doc-wrapper">
|
||||
|
||||
<!-- ─── En-tête ─── -->
|
||||
<header class="doc-header">
|
||||
<div class="doc-header-inner">
|
||||
<div class="doc-header-icon" style="background: linear-gradient(135deg, var(--accent-teal), var(--accent-blue));">
|
||||
<i class="fas fa-crosshairs"></i>
|
||||
</div>
|
||||
<div>
|
||||
<h1 class="doc-title">{% trans "Calibration du scanner" %}</h1>
|
||||
<p class="doc-subtitle">{% trans "Procédure, organisation de l'écran et commandes disponibles" %}</p>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<!-- ─── Navigation latérale ─── -->
|
||||
<nav class="doc-sidenav" id="sidenav">
|
||||
<p class="nav-section-label">{% trans "Navigation" %}</p>
|
||||
<a href="#section-intro" class="nav-link active"><i class="fas fa-info-circle"></i> {% trans "Présentation" %}</a>
|
||||
<a href="#section-screen" class="nav-link"> <i class="fas fa-desktop"></i> {% trans "Organisation écran" %}</a>
|
||||
<a href="#section-left" class="nav-link nav-sub"><i class="fas fa-arrows-alt"></i> {% trans "Panneau gauche" %}</a>
|
||||
<a href="#section-center" class="nav-link nav-sub"><i class="fas fa-video"></i> {% trans "Centre — vidéo live" %}</a>
|
||||
<a href="#section-right" class="nav-link nav-sub"><i class="fas fa-sliders-h"></i> {% trans "Panneau droit" %}</a>
|
||||
<a href="#section-centering" class="nav-link nav-sub-2"><i class="fas fa-dot-circle"></i> {% trans "Centrage" %}</a>
|
||||
<a href="#section-base" class="nav-link nav-sub-2"><i class="fas fa-map-pin"></i> {% trans "Définir la base" %}</a>
|
||||
</nav>
|
||||
|
||||
<!-- ─── Contenu principal ─── -->
|
||||
<main class="doc-content">
|
||||
|
||||
<!-- ============================================================ -->
|
||||
<!-- SECTION 1 : Présentation -->
|
||||
<!-- ============================================================ -->
|
||||
<section class="doc-section" id="section-intro">
|
||||
<div class="section-header">
|
||||
<span class="section-badge badge-teal">{% trans "Prérequis" %}</span>
|
||||
<h2><i class="fas fa-crosshairs"></i> {% trans "Calibration" %}</h2>
|
||||
<p class="section-desc">
|
||||
{% trans "La calibration est indispensable au fonctionnement du scanner." %}<br>
|
||||
<i class="fas fa-exclamation-triangle w3-text-red"></i> {% trans "Affichage des logs en bas de page" %}
|
||||
</p>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<!-- Pourquoi calibrer -->
|
||||
<div class="info-card card-accent-teal">
|
||||
<div class="card-icon"><i class="fas fa-bullseye"></i></div>
|
||||
<div class="card-body">
|
||||
<h4>{% trans "Objectifs" %}</h4>
|
||||
<ul class="doc-list">
|
||||
<li>
|
||||
<i class="fas fa-camera text-blue"></i>
|
||||
{% trans "Pointer l'axe de la caméra dans l'axe du tube." %}
|
||||
</li>
|
||||
<li>
|
||||
<i class="fas fa-crop-alt text-cyan"></i>
|
||||
{% trans "Recadrer l'image pour porter l'origine du suivi des planaires au centre du tube." %}
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Avantage recadrage -->
|
||||
<div class="info-card card-accent-green">
|
||||
<div class="card-icon"><i class="fas fa-compress-arrows-alt"></i></div>
|
||||
<div class="card-body">
|
||||
<h4>{% trans "Avantage du recadrage" %}</h4>
|
||||
<ul class="doc-list">
|
||||
<li>
|
||||
<i class="fas fa-hdd text-green"></i>
|
||||
{% trans "Réduit la taille des images stockées." %}
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- IMPORTANT : base de départ -->
|
||||
<div class="info-row">
|
||||
<div class="info-card card-accent-red full-width">
|
||||
<div class="card-icon"><i class="fas fa-exclamation-triangle"></i></div>
|
||||
<div class="card-body">
|
||||
<h4>{% trans "IMPORTANT — Avant toute manipulation" %} <span class="badge-important">{% trans "IMPORTANT" %}</span></h4>
|
||||
<p>{% trans "Pour tout multi-puits, trouver la base de départ avant de commencer." %}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- ============================================================ -->
|
||||
<!-- SECTION 2 : Organisation de l'écran -->
|
||||
<!-- ============================================================ -->
|
||||
<section class="doc-section" id="section-screen">
|
||||
<div class="section-header">
|
||||
<span class="section-badge badge-blue">{% trans "Interface" %}</span>
|
||||
<h2><i class="fas fa-desktop"></i> {% trans "Organisation de l'écran" %}</h2>
|
||||
<p class="section-desc">{% trans "L'écran de calibration est divisé en trois zones fonctionnelles." %}</p>
|
||||
</div>
|
||||
|
||||
<!-- Schéma des 3 zones -->
|
||||
<div class="screen-layout">
|
||||
<div class="screen-zone zone-left">
|
||||
<i class="fas fa-arrows-alt"></i>
|
||||
<span>{% trans "Déplacements" %}</span>
|
||||
</div>
|
||||
<div class="screen-zone zone-center">
|
||||
<i class="fas fa-video"></i>
|
||||
<span>{% trans "Vidéo live" %}</span>
|
||||
</div>
|
||||
<div class="screen-zone zone-right">
|
||||
<i class="fas fa-sliders-h"></i>
|
||||
<span>{% trans "Commandes" %}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- ─── Panneau GAUCHE ─── -->
|
||||
<div class="subsection" id="section-left">
|
||||
<h3 class="subsection-title">
|
||||
<i class="fas fa-arrow-left"></i> {% trans "Panneau gauche — Déplacements caméra" %}
|
||||
</h3>
|
||||
|
||||
<div class="info-row">
|
||||
<!-- Sélection & vitesse -->
|
||||
<div class="info-card card-accent-indigo">
|
||||
<div class="card-icon"><i class="fas fa-exchange-alt"></i></div>
|
||||
<div class="card-body">
|
||||
<h4>{% trans "Sélection & vitesse" %}</h4>
|
||||
<ul class="doc-list">
|
||||
<li><i class="fas fa-th"></i> {% trans "Changer de multi-puits" %}</li>
|
||||
<li><i class="fas fa-tachometer-alt"></i> {% trans "Modifier la vitesse (mm/mn)" %}</li>
|
||||
<li><i class="fas fa-ruler-horizontal"></i> {% trans "Modifier le pas de déplacement (mm)" %}</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Manœuvre manuelle -->
|
||||
<div class="info-card card-accent-blue">
|
||||
<div class="card-icon"><i class="fas fa-gamepad"></i></div>
|
||||
<div class="card-body">
|
||||
<h4>{% trans "Manœuvre manuelle" %}</h4>
|
||||
<ul class="doc-list">
|
||||
<li>
|
||||
<i class="fas fa-arrows-alt"></i>
|
||||
{% trans "Déplacement" %}
|
||||
<div class="tag-list inline">
|
||||
<span class="tag tag-blue">±X</span>
|
||||
<span class="tag tag-blue">±Y</span>
|
||||
</div>
|
||||
</li>
|
||||
<li><i class="fas fa-save"></i> {% trans "Sauver la position courante" %}</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Déplacement puit à puit -->
|
||||
<div class="info-card card-accent-cyan">
|
||||
<div class="card-icon"><i class="fas fa-step-forward"></i></div>
|
||||
<div class="card-body">
|
||||
<h4>{% trans "Navigation puit à puit" %}</h4>
|
||||
<ul class="doc-list">
|
||||
<li><i class="fas fa-arrow-right text-cyan"></i> {% trans "Boutons de déplacement puit à puit" %}</li>
|
||||
<li><i class="fas fa-compress-arrows-alt text-cyan"></i> {% trans "Bouton centrage manuel" %}</li>
|
||||
<li><i class="fas fa-magic text-cyan"></i> {% trans "Bouton calibrage automatique" %}</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Sous-section : Définir la base -->
|
||||
<div class="sub-subsection" id="section-base">
|
||||
<h4 class="table-title">
|
||||
<i class="fas fa-map-pin"></i>
|
||||
{% trans "Définir la base" %}
|
||||
<span class="badge-important">{% trans "IMPORTANT" %}</span>
|
||||
</h4>
|
||||
|
||||
<div class="info-row">
|
||||
<!-- Création en BDD -->
|
||||
<div class="info-card card-accent-orange">
|
||||
<div class="card-icon"><i class="fas fa-database"></i></div>
|
||||
<div class="card-body">
|
||||
<h4>{% trans "À la création du multi-puits en base" %}</h4>
|
||||
<ul class="doc-list">
|
||||
<li>
|
||||
<i class="fas fa-map-marker-alt text-orange"></i>
|
||||
{% trans "Fixe la base par défaut en" %} <code>(50, 50)</code>
|
||||
</li>
|
||||
<li>
|
||||
<i class="fas fa-calculator text-orange"></i>
|
||||
{% trans "Calcule et enregistre toutes les positions des puits dans" %}
|
||||
<code>scanner.wellposition</code>
|
||||
<p class="task-desc">
|
||||
<i class="fas fa-bolt text-green"></i>
|
||||
{% trans "Permet de gagner du temps au centrage manuel ou automatique." %}
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Donnée positions générées -->
|
||||
<div class="info-card card-accent-yellow">
|
||||
<div class="card-icon"><i class="fas fa-sync-alt"></i></div>
|
||||
<div class="card-body">
|
||||
<h4>
|
||||
{% trans "Positions générées" %} — <code>scanner.multiwell</code>
|
||||
<span class="badge-important">{% trans "ATTENTION" %}</span>
|
||||
</h4>
|
||||
<ul class="doc-list">
|
||||
<li>
|
||||
<i class="fas fa-check-circle text-green"></i>
|
||||
{% trans "À la création : donnée fixée à" %} <strong>{% trans "Oui" %}</strong>
|
||||
</li>
|
||||
<li>
|
||||
<i class="fas fa-times-circle text-red"></i>
|
||||
{% trans "Non → efface" %} <code>WellPosition</code>
|
||||
{% trans "et recalcule toutes les positions" %}
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Bouton Définir la base -->
|
||||
<div class="info-row">
|
||||
<div class="info-card card-accent-blue full-width">
|
||||
<div class="card-icon"><i class="fas fa-flag-checkered"></i></div>
|
||||
<div class="card-body">
|
||||
<h4>{% trans "Bouton « Définir la base »" %}</h4>
|
||||
<ul class="doc-list">
|
||||
<li>
|
||||
<i class="fas fa-map-marker text-blue"></i>
|
||||
{% trans "Fixe la base aux coordonnées" %} <code>(X, Y)</code> {% trans "courantes" %}
|
||||
</li>
|
||||
<li>
|
||||
<i class="fas fa-redo text-blue"></i>
|
||||
{% trans "Recalcule toutes les positions des puits dans" %} <code>scanner.wellposition</code>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Sous-section : Centrage -->
|
||||
<div class="sub-subsection" id="section-centering">
|
||||
<h4 class="table-title">
|
||||
<i class="fas fa-dot-circle"></i>
|
||||
{% trans "Centrage manuel / automatique" %}
|
||||
<span class="badge-important">{% trans "ATTENTION" %}</span>
|
||||
</h4>
|
||||
|
||||
<div class="info-row">
|
||||
<!-- Conditions -->
|
||||
<div class="info-card card-accent-purple">
|
||||
<div class="card-icon"><i class="fas fa-lightbulb"></i></div>
|
||||
<div class="card-body">
|
||||
<h4>{% trans "Conditions requises" %}</h4>
|
||||
<ul class="doc-list">
|
||||
<li>
|
||||
<i class="fas fa-sun text-yellow"></i>
|
||||
{% trans "Éclairage important des puits — éviter les ombres." %}
|
||||
</li>
|
||||
<li>
|
||||
<i class="fas fa-toggle-on text-blue"></i>
|
||||
{% trans "Actif uniquement si Debug" %} <strong>{% trans "ET" %}</strong> {% trans "Recadrage activés (commandes à droite)." %}
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Indicateurs visuels -->
|
||||
<div class="info-card card-accent-indigo">
|
||||
<div class="card-icon"><i class="fas fa-circle-notch"></i></div>
|
||||
<div class="card-body">
|
||||
<h4>{% trans "Indicateurs visuels de centrage" %}</h4>
|
||||
<ul class="doc-list">
|
||||
<li>
|
||||
<i class="fas fa-circle" style="color:#f85149;"></i>
|
||||
<strong class="text-red">{% trans "Cercle rouge" %}</strong>
|
||||
— {% trans "déplacement centre" %} <code>< 20 px</code>
|
||||
</li>
|
||||
<li>
|
||||
<i class="fas fa-circle" style="color:#e3b341;"></i>
|
||||
<strong style="color:var(--accent-yellow);">{% trans "Cercle jaune" %}</strong>
|
||||
— {% trans "au plus près" %} <code>< 5 px</code>
|
||||
</li>
|
||||
<li>
|
||||
<i class="fas fa-circle" style="color:#3fb950;"></i>
|
||||
<strong class="text-green">{% trans "Cercle vert" %}</strong>
|
||||
— {% trans "centré" %}
|
||||
</li>
|
||||
</ul>
|
||||
<!-- Barre visuelle des seuils -->
|
||||
<div class="center-bar">
|
||||
<div class="cb-seg cb-red">
|
||||
<span>< 20 px</span>
|
||||
</div>
|
||||
<div class="cb-seg cb-yellow">
|
||||
<span>< 5 px</span>
|
||||
</div>
|
||||
<div class="cb-seg cb-green">
|
||||
<span>{% trans "OK" %}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- ─── CENTRE ─── -->
|
||||
<div class="subsection" id="section-center">
|
||||
<h3 class="subsection-title">
|
||||
<i class="fas fa-video"></i> {% trans "Centre — Vidéo live" %}
|
||||
</h3>
|
||||
<div class="info-row">
|
||||
<div class="info-card card-accent-teal full-width">
|
||||
<div class="card-icon"><i class="fas fa-film"></i></div>
|
||||
<div class="card-body">
|
||||
<h4>{% trans "Flux vidéo en temps réel" %}</h4>
|
||||
<p>{% trans "Affiche le flux caméra en direct, avec ou sans recadrage selon l'état de la commande." %}</p>
|
||||
<div class="tag-list">
|
||||
<span class="tag tag-teal">{% trans "Recadrage actif" %}</span>
|
||||
<span class="tag tag-gray">{% trans "Image pleine" %}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- ─── PANNEAU DROIT ─── -->
|
||||
<div class="subsection" id="section-right">
|
||||
<h3 class="subsection-title">
|
||||
<i class="fas fa-arrow-right"></i> {% trans "Panneau droit — Commandes" %}
|
||||
</h3>
|
||||
|
||||
<div class="info-row">
|
||||
<!-- Navigation rapide -->
|
||||
<div class="info-card card-accent-blue">
|
||||
<div class="card-icon"><i class="fas fa-location-arrow"></i></div>
|
||||
<div class="card-body">
|
||||
<h4>{% trans "Navigation rapide" %}</h4>
|
||||
<ul class="doc-list">
|
||||
<li><i class="fas fa-home text-blue"></i> {% trans "Déplacer à l'origine (0, 0)" %}</li>
|
||||
<li><i class="fas fa-map-pin text-blue"></i> {% trans "Aller à la base du multi-puits" %}</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Bascules -->
|
||||
<div class="info-card card-accent-indigo">
|
||||
<div class="card-icon"><i class="fas fa-toggle-on"></i></div>
|
||||
<div class="card-body">
|
||||
<h4>{% trans "Bascules" %}</h4>
|
||||
<ul class="doc-list">
|
||||
<li>
|
||||
<i class="fas fa-bug text-purple"></i>
|
||||
{% trans "Debug" %}
|
||||
<div class="tag-list inline">
|
||||
<span class="tag tag-green">{% trans "Oui" %}</span>
|
||||
<span class="tag tag-gray">{% trans "Non" %}</span>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<i class="fas fa-ruler-combined text-purple"></i>
|
||||
{% trans "Tracer axes" %}
|
||||
<div class="tag-list inline">
|
||||
<span class="tag tag-green">{% trans "Oui" %}</span>
|
||||
<span class="tag tag-gray">{% trans "Non" %}</span>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<i class="fas fa-crop-alt text-purple"></i>
|
||||
{% trans "Recadrage" %}
|
||||
<div class="tag-list inline">
|
||||
<span class="tag tag-green">{% trans "Oui" %}</span>
|
||||
<span class="tag tag-gray">{% trans "Non" %}</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="info-row">
|
||||
<!-- Rayon de recadrage -->
|
||||
<div class="info-card card-accent-cyan">
|
||||
<div class="card-icon"><i class="fas fa-circle-notch"></i></div>
|
||||
<div class="card-body">
|
||||
<h4>{% trans "Rayon de recadrage" %}</h4>
|
||||
<p>{% trans "Ajuster le recadrage en pixels." %}</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Durée test -->
|
||||
<div class="info-card card-accent-orange">
|
||||
<div class="card-icon"><i class="fas fa-stopwatch"></i></div>
|
||||
<div class="card-body">
|
||||
<h4>{% trans "Durée entre puits" %}</h4>
|
||||
<p>{% trans "Durée de pause entre chaque puit lors du test du circuit." %}</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Tester le circuit -->
|
||||
<div class="info-card card-accent-green">
|
||||
<div class="card-icon"><i class="fas fa-route"></i></div>
|
||||
<div class="card-body">
|
||||
<h4>{% trans "Tester le circuit" %}</h4>
|
||||
<p>{% trans "Vérifier les déplacements en parcourant automatiquement tous les puits." %}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- ARRÊT -->
|
||||
<div class="info-row">
|
||||
<div class="info-card card-accent-red full-width">
|
||||
<div class="card-icon"><i class="fas fa-hand-paper"></i></div>
|
||||
<div class="card-body">
|
||||
<h4>
|
||||
{% trans "ARRÊT" %}
|
||||
<span class="badge-important">{% trans "URGENCE" %}</span>
|
||||
</h4>
|
||||
<div class="alert-box">
|
||||
<i class="fas fa-stop-circle"></i>
|
||||
{% trans "Stoppe immédiatement tout mouvement du scanner." %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div><!-- end section-right -->
|
||||
</section><!-- end section-screen -->
|
||||
|
||||
</main>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block js_footer %}
|
||||
{{ block.super }}
|
||||
<script>
|
||||
/* Mise en évidence du lien actif dans la navigation latérale */
|
||||
(function () {
|
||||
const links = document.querySelectorAll('.nav-link');
|
||||
const sections = document.querySelectorAll('[id^="section-"]');
|
||||
|
||||
const observer = new IntersectionObserver(
|
||||
(entries) => {
|
||||
entries.forEach(entry => {
|
||||
if (entry.isIntersecting) {
|
||||
links.forEach(l => l.classList.remove('active'));
|
||||
const target = document.querySelector(`.nav-link[href="#${entry.target.id}"]`);
|
||||
if (target) target.classList.add('active');
|
||||
}
|
||||
});
|
||||
},
|
||||
{ rootMargin: '-10% 0px -80% 0px' }
|
||||
);
|
||||
|
||||
sections.forEach(s => observer.observe(s));
|
||||
})();
|
||||
</script>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,541 @@
|
||||
{% extends 'scanner/base.html' %}
|
||||
{% load i18n %}
|
||||
{% block columns %}{% endblock %}
|
||||
|
||||
{% block styles %}
|
||||
{{ block.super }}
|
||||
<link rel="stylesheet" href="/static/css/doc_database.css">
|
||||
<link rel="stylesheet" href="/static/css/doc_calibration.css>
|
||||
<link rel="stylesheet" href="/static/css/doc_experiments.css">
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="doc-wrapper">
|
||||
|
||||
<!-- ─── En-tête ─── -->
|
||||
<header class="doc-header">
|
||||
<div class="doc-header-inner">
|
||||
<div class="doc-header-icon" style="background: linear-gradient(135deg, var(--accent-green), var(--accent-teal));">
|
||||
<i class="fas fa-flask"></i>
|
||||
</div>
|
||||
<div>
|
||||
<h1 class="doc-title">{% trans "Démarrer des expériences" %}</h1>
|
||||
<p class="doc-subtitle">{% trans "Sessions, expériences, configurations et import CSV — interface Administration Django" %}</p>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<!-- ─── Navigation latérale ─── -->
|
||||
<nav class="doc-sidenav" id="sidenav">
|
||||
<p class="nav-section-label">{% trans "Navigation" %}</p>
|
||||
<a href="#section-intro" class="nav-link active"><i class="fas fa-info-circle"></i> {% trans "Présentation" %}</a>
|
||||
<a href="#section-workflow" class="nav-link"> <i class="fas fa-random"></i> {% trans "Ordre de création" %}</a>
|
||||
<a href="#section-session" class="nav-link"> <i class="fas fa-play-circle"></i> {% trans "Session" %}</a>
|
||||
<a href="#section-session-data" class="nav-link nav-sub"><i class="fas fa-table"></i> {% trans "Données" %}</a>
|
||||
<a href="#section-session-tasks" class="nav-link nav-sub"><i class="fas fa-clock"></i> {% trans "Tâches périodiques" %}</a>
|
||||
<a href="#section-experiment" class="nav-link"> <i class="fas fa-vial"></i> {% trans "Expérience" %}</a>
|
||||
<a href="#section-exp-data" class="nav-link nav-sub"><i class="fas fa-table"></i> {% trans "Données" %}</a>
|
||||
<a href="#section-exp-create" class="nav-link nav-sub"><i class="fas fa-magic"></i> {% trans "Création automatique" %}</a>
|
||||
<a href="#section-metrics" class="nav-link nav-sub"><i class="fas fa-chart-line"></i> {% trans "Métriques" %}</a>
|
||||
<a href="#section-config" class="nav-link"> <i class="fas fa-cog"></i> {% trans "Configuration puits" %}</a>
|
||||
<a href="#section-csv" class="nav-link"> <i class="fas fa-file-csv"></i> {% trans "Import CSV" %}</a>
|
||||
</nav>
|
||||
|
||||
<!-- ─── Contenu principal ─── -->
|
||||
<main class="doc-content">
|
||||
|
||||
<!-- ============================================================ -->
|
||||
<!-- SECTION 1 : Présentation -->
|
||||
<!-- ============================================================ -->
|
||||
<section class="doc-section" id="section-intro">
|
||||
<div class="section-header">
|
||||
<span class="section-badge badge-green">{% trans "Administration Django" %}</span>
|
||||
<h2><i class="fas fa-flask"></i> {% trans "Démarrer des expériences" %}</h2>
|
||||
<p class="section-desc">
|
||||
{% trans "C'est l'interface Administration Django qui est chargée de créer les données." %}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="info-row">
|
||||
<div class="info-card card-accent-green full-width">
|
||||
<div class="card-icon"><i class="fas fa-th-large"></i></div>
|
||||
<div class="card-body">
|
||||
<h4>{% trans "Principe général" %}</h4>
|
||||
<ul class="doc-list">
|
||||
<li>
|
||||
<i class="fas fa-link text-green"></i>
|
||||
{% trans "Une expérience est toujours affectée à un multi-puits." %}
|
||||
</li>
|
||||
<li>
|
||||
<i class="fas fa-th text-green"></i>
|
||||
{% trans "Il y a 4 emplacements multi-puits, donc" %}
|
||||
<strong>{% trans "4 expériences maximum par session." %}</strong>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- ============================================================ -->
|
||||
<!-- SECTION 2 : Ordre de création -->
|
||||
<!-- ============================================================ -->
|
||||
<section class="doc-section" id="section-workflow">
|
||||
<div class="section-header">
|
||||
<span class="section-badge badge-blue">{% trans "Workflow" %}</span>
|
||||
<h2><i class="fas fa-random"></i> {% trans "Ordre de création" %}</h2>
|
||||
<p class="section-desc">{% trans "Les deux approches sont équivalentes — au choix." %}</p>
|
||||
</div>
|
||||
|
||||
<div class="info-row">
|
||||
<!-- Option A -->
|
||||
<div class="info-card card-accent-indigo">
|
||||
<div class="card-icon"><i class="fas fa-list-ol"></i></div>
|
||||
<div class="card-body">
|
||||
<h4><i class="fas fa-play-circle text-indigo"></i> {% trans "Option A — Session en premier" %}</h4>
|
||||
<ol class="doc-steps">
|
||||
<li><i class="fas fa-plus-circle"></i> {% trans "Créer la session" %}</li>
|
||||
<li><i class="fas fa-vial"></i> {% trans "Créer les expériences (4 maxi)" %}</li>
|
||||
<li><i class="fas fa-link"></i> {% trans "Revenir sur la session et ajouter les expériences" %}</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Option B -->
|
||||
<div class="info-card card-accent-blue">
|
||||
<div class="card-icon"><i class="fas fa-list-ol"></i></div>
|
||||
<div class="card-body">
|
||||
<h4><i class="fas fa-vial text-blue"></i> {% trans "Option B — Expériences en premier" %}</h4>
|
||||
<ol class="doc-steps">
|
||||
<li><i class="fas fa-vial"></i> {% trans "Créer les expériences" %}</li>
|
||||
<li><i class="fas fa-plus-circle"></i> {% trans "Créer la session" %}</li>
|
||||
<li><i class="fas fa-link"></i> {% trans "Ajouter les expériences à la session" %}</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- ============================================================ -->
|
||||
<!-- SECTION 3 : Session -->
|
||||
<!-- ============================================================ -->
|
||||
<section class="doc-section" id="section-session">
|
||||
<div class="section-header">
|
||||
<span class="section-badge badge-purple">scanner_session</span>
|
||||
<h2><i class="fas fa-play-circle"></i> {% trans "Session" %}</h2>
|
||||
</div>
|
||||
|
||||
<!-- Données importantes -->
|
||||
<div class="sub-subsection" id="section-session-data">
|
||||
<h4 class="table-title">
|
||||
<i class="fas fa-table"></i> {% trans "Données importantes" %}
|
||||
</h4>
|
||||
<div class="info-row">
|
||||
<div class="info-card card-accent-purple">
|
||||
<div class="card-icon"><i class="fas fa-id-card"></i></div>
|
||||
<div class="card-body">
|
||||
<h4>{% trans "Identification" %}</h4>
|
||||
<ul class="doc-list">
|
||||
<li><i class="fas fa-heading text-purple"></i> {% trans "Titre" %}</li>
|
||||
<li><i class="fas fa-user text-purple"></i> {% trans "Auteur" %}</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Expériences de la session -->
|
||||
<div class="info-card card-accent-indigo">
|
||||
<div class="card-icon"><i class="fas fa-layer-group"></i></div>
|
||||
<div class="card-body">
|
||||
<h4>{% trans "Expériences d'une session" %}</h4>
|
||||
<p>{% trans "Ajouter les expériences à la suite dans l'inline" %} <code>scanner_sessionexperiment</code>.</p>
|
||||
<div class="tag-list">
|
||||
<span class="tag tag-blue">{% trans "4 maximum" %}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Tâches périodiques -->
|
||||
<div class="sub-subsection" id="section-session-tasks">
|
||||
<h4 class="table-title">
|
||||
<i class="fas fa-clock"></i> {% trans "Options tâches périodiques" %}
|
||||
</h4>
|
||||
<div class="info-row">
|
||||
<div class="info-card card-accent-orange">
|
||||
<div class="card-icon"><i class="fas fa-file-export"></i></div>
|
||||
<div class="card-body">
|
||||
<h4>{% trans "Date d'exportation" %}</h4>
|
||||
<p>{% trans "Crée une tâche différée pour exporter automatiquement les images et vidéos à la date choisie." %}</p>
|
||||
<div class="tag-list">
|
||||
<span class="tag tag-orange">export_session</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-card card-accent-teal">
|
||||
<div class="card-icon"><i class="fas fa-calendar-alt"></i></div>
|
||||
<div class="card-body">
|
||||
<h4>{% trans "Date du balayage" %}</h4>
|
||||
<p>{% trans "Planifie le déclenchement du balayage de la session à une date ultérieure." %}</p>
|
||||
<div class="tag-list">
|
||||
<span class="tag tag-teal">scanning_session</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- ============================================================ -->
|
||||
<!-- SECTION 4 : Expérience -->
|
||||
<!-- ============================================================ -->
|
||||
<section class="doc-section" id="section-experiment">
|
||||
<div class="section-header">
|
||||
<span class="section-badge badge-green">scanner_experiment</span>
|
||||
<h2><i class="fas fa-vial"></i> {% trans "Expérience" %}</h2>
|
||||
</div>
|
||||
|
||||
<!-- Données -->
|
||||
<div class="sub-subsection" id="section-exp-data">
|
||||
<h4 class="table-title"><i class="fas fa-table"></i> {% trans "Données" %}</h4>
|
||||
<div class="info-row">
|
||||
<div class="info-card card-accent-green">
|
||||
<div class="card-icon"><i class="fas fa-id-card"></i></div>
|
||||
<div class="card-body">
|
||||
<h4>{% trans "Identification" %}</h4>
|
||||
<ul class="doc-list">
|
||||
<li><i class="fas fa-heading text-green"></i> {% trans "Titre" %}</li>
|
||||
<li><i class="fas fa-user text-green"></i> {% trans "Auteur" %}</li>
|
||||
<li><i class="fas fa-comment-alt text-green"></i> {% trans "Commentaires" %}</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-card card-accent-red">
|
||||
<div class="card-icon"><i class="fas fa-exclamation-circle"></i></div>
|
||||
<div class="card-body">
|
||||
<h4>{% trans "Paramètres critiques" %} <span class="badge-important">{% trans "IMPORTANT" %}</span></h4>
|
||||
<ul class="doc-list">
|
||||
<li>
|
||||
<i class="fas fa-th text-red"></i>
|
||||
{% trans "Choix du multi-puits" %}
|
||||
</li>
|
||||
<li>
|
||||
<i class="fas fa-stopwatch text-red"></i>
|
||||
{% trans "Durée de la prise de vue (secondes)" %}
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Création automatique -->
|
||||
<div class="sub-subsection" id="section-exp-create">
|
||||
<h4 class="table-title">
|
||||
<i class="fas fa-magic"></i> {% trans "Fonctionnement à la création" %}
|
||||
</h4>
|
||||
<div class="info-row">
|
||||
<!-- experimentwell -->
|
||||
<div class="info-card card-accent-blue">
|
||||
<div class="card-icon"><i class="fas fa-circle-notch"></i></div>
|
||||
<div class="card-body">
|
||||
<h4>{% trans "Création/MAJ" %} <code>scanner.experimentwell</code></h4>
|
||||
<ul class="doc-list">
|
||||
<li>
|
||||
<i class="fas fa-plus text-blue"></i>
|
||||
{% trans "Création de chaque puit individuel." %}
|
||||
</li>
|
||||
<li>
|
||||
<i class="fas fa-check-circle text-green"></i>
|
||||
{% trans "Par défaut, tous les puits sont actifs." %}
|
||||
</li>
|
||||
</ul>
|
||||
<div class="alert-box alert-info">
|
||||
<i class="fas fa-info-circle"></i>
|
||||
{% trans "Il est possible d'ignorer le balayage d'un ou plusieurs puits au choix." %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- experimentconfig -->
|
||||
<div class="info-card card-accent-cyan">
|
||||
<div class="card-icon"><i class="fas fa-sliders-h"></i></div>
|
||||
<div class="card-body">
|
||||
<h4>{% trans "Création/MAJ" %} <code>planarian.experimentconfig</code></h4>
|
||||
<p>{% trans "Paramètres d'une expérience PlanarianScanner." %}</p>
|
||||
<ul class="doc-list">
|
||||
<li>
|
||||
<i class="fas fa-user-cog text-cyan"></i>
|
||||
{% trans "Créé depuis Django admin" %}
|
||||
</li>
|
||||
<li>
|
||||
<i class="fas fa-file-csv text-cyan"></i>
|
||||
{% trans "Ou import CSV depuis l'admin" %}
|
||||
</li>
|
||||
<li>
|
||||
<i class="fas fa-pencil-alt text-muted"></i>
|
||||
<em>{% trans "Données descriptives supplémentaires (à définir)" %}</em>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Métriques -->
|
||||
<div class="sub-subsection" id="section-metrics">
|
||||
<h4 class="table-title">
|
||||
<i class="fas fa-chart-line"></i>
|
||||
{% trans "Intégration métriques EthoVision XT + comportementales" %}
|
||||
</h4>
|
||||
|
||||
<!-- Métriques par frame -->
|
||||
<h5 class="metrics-group-title">
|
||||
<i class="fas fa-film"></i> {% trans "Métriques par frame" %}
|
||||
</h5>
|
||||
<div class="info-row">
|
||||
<div class="info-card card-accent-blue metrics-card">
|
||||
<div class="card-icon"><i class="fas fa-running"></i></div>
|
||||
<div class="card-body">
|
||||
<h4>{% trans "Mobilité" %}</h4>
|
||||
<div class="metric-tags">
|
||||
<span class="tag tag-blue">velocity</span>
|
||||
<span class="tag tag-blue">distance</span>
|
||||
<span class="tag tag-blue">moving</span>
|
||||
<span class="tag tag-blue">mobility_state</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-card card-accent-orange metrics-card">
|
||||
<div class="card-icon"><i class="fas fa-border-style"></i></div>
|
||||
<div class="card-body">
|
||||
<h4>{% trans "Thigmotaxie" %}</h4>
|
||||
<div class="metric-tags">
|
||||
<span class="tag tag-orange">dist_to_wall_mm</span>
|
||||
<span class="tag tag-orange">near_wall</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-card card-accent-yellow metrics-card">
|
||||
<div class="card-icon"><i class="fas fa-sun"></i></div>
|
||||
<div class="card-body">
|
||||
<h4>{% trans "Phototaxie" %}</h4>
|
||||
<div class="metric-tags">
|
||||
<span class="tag tag-yellow">dist_to_light_mm</span>
|
||||
<span class="tag tag-yellow">heading_to_light_deg</span>
|
||||
<span class="tag tag-yellow">fleeing_light</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-card card-accent-green metrics-card">
|
||||
<div class="card-icon"><i class="fas fa-utensils"></i></div>
|
||||
<div class="card-body">
|
||||
<h4>{% trans "Chimiotaxie" %}</h4>
|
||||
<div class="metric-tags">
|
||||
<span class="tag tag-green">dist_to_food_mm</span>
|
||||
<span class="tag tag-green">heading_to_food_deg</span>
|
||||
<span class="tag tag-green">approaching_food</span>
|
||||
<span class="tag tag-green">in_food_zone</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-card card-accent-purple metrics-card">
|
||||
<div class="card-icon"><i class="fas fa-users"></i></div>
|
||||
<div class="card-body">
|
||||
<h4>{% trans "Social" %}</h4>
|
||||
<div class="metric-tags">
|
||||
<span class="tag tag-purple">nearest_neighbour_mm</span>
|
||||
<span class="tag tag-purple">in_avoid_zone</span>
|
||||
<span class="tag tag-purple">in_aggreg_zone</span>
|
||||
<span class="tag tag-purple">chem_repulsion_level</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Métriques résumé -->
|
||||
<h5 class="metrics-group-title" style="margin-top:20px;">
|
||||
<i class="fas fa-clipboard-list"></i> {% trans "Métriques résumé (summary)" %}
|
||||
</h5>
|
||||
<div class="info-row">
|
||||
<div class="info-card card-accent-blue metrics-card">
|
||||
<div class="card-icon"><i class="fas fa-running"></i></div>
|
||||
<div class="card-body">
|
||||
<h4>{% trans "Mobilité" %}</h4>
|
||||
<div class="metric-tags">
|
||||
<span class="tag tag-blue">movedCenter_pointTotal_mm</span>
|
||||
<span class="tag tag-blue">velocity_mean_mm_s</span>
|
||||
<span class="tag tag-blue">{% trans "durations par état" %}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-card card-accent-orange metrics-card">
|
||||
<div class="card-icon"><i class="fas fa-border-style"></i></div>
|
||||
<div class="card-body">
|
||||
<h4>{% trans "Thigmotaxie" %}</h4>
|
||||
<div class="metric-tags">
|
||||
<span class="tag tag-orange">thigmotaxis_pct_time_near_wall</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-card card-accent-yellow metrics-card">
|
||||
<div class="card-icon"><i class="fas fa-sun"></i></div>
|
||||
<div class="card-body">
|
||||
<h4>{% trans "Phototaxie" %}</h4>
|
||||
<div class="metric-tags">
|
||||
<span class="tag tag-yellow">photo_pct_time_fleeing</span>
|
||||
<span class="tag tag-yellow">photo_mean_dist_mm</span>
|
||||
<span class="tag tag-yellow">photo_latency_s</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-card card-accent-green metrics-card">
|
||||
<div class="card-icon"><i class="fas fa-utensils"></i></div>
|
||||
<div class="card-body">
|
||||
<h4>{% trans "Chimiotaxie" %}</h4>
|
||||
<div class="metric-tags">
|
||||
<span class="tag tag-green">chemo_pct_time_approaching</span>
|
||||
<span class="tag tag-green">chemo_pct_time_in_zone</span>
|
||||
<span class="tag tag-green">chemo_latency_s</span>
|
||||
<span class="tag tag-green">chemo_mean_dist_mm</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-card card-accent-purple metrics-card">
|
||||
<div class="card-icon"><i class="fas fa-users"></i></div>
|
||||
<div class="card-body">
|
||||
<h4>{% trans "Social" %}</h4>
|
||||
<div class="metric-tags">
|
||||
<span class="tag tag-purple">social_pct_time_avoiding</span>
|
||||
<span class="tag tag-purple">social_pct_time_aggregating</span>
|
||||
<span class="tag tag-purple">social_mean_nn_mm</span>
|
||||
<span class="tag tag-purple">social_contact_events</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- ============================================================ -->
|
||||
<!-- SECTION 5 : Configuration des puits -->
|
||||
<!-- ============================================================ -->
|
||||
<section class="doc-section" id="section-config">
|
||||
<div class="section-header">
|
||||
<span class="section-badge badge-teal">{% trans "Interface Scanner" %}</span>
|
||||
<h2><i class="fas fa-cog"></i> {% trans "Configuration des expériences" %}</h2>
|
||||
<p class="section-desc">{% trans "Sélectionner l'expérience et le puit à modifier pour compléter la fiche." %}</p>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-card card-accent-teal full-width">
|
||||
<div class="card-icon"><i class="fas fa-edit"></i></div>
|
||||
<div class="card-body">
|
||||
<h4>{% trans "Procédure" %}</h4>
|
||||
<ol class="doc-steps">
|
||||
<li><i class="fas fa-mouse-pointer"></i> {% trans "Sélectionner l'expérience dans la liste" %}</li>
|
||||
<li><i class="fas fa-circle"></i> {% trans "Sélectionner le puit à modifier" %}</li>
|
||||
<li><i class="fas fa-pen"></i> {% trans "Compléter la fiche de configuration" %}</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- ============================================================ -->
|
||||
<!-- SECTION 6 : Import CSV -->
|
||||
<!-- ============================================================ -->
|
||||
<section class="doc-section" id="section-csv">
|
||||
<div class="section-header">
|
||||
<span class="section-badge badge-orange">{% trans "Import" %}</span>
|
||||
<h2><i class="fas fa-file-csv"></i> {% trans "Importer des configurations depuis CSV" %}</h2>
|
||||
</div>
|
||||
|
||||
<div class="info-row">
|
||||
<!-- Menu gauche -->
|
||||
<div class="info-card card-accent-indigo">
|
||||
<div class="card-icon"><i class="fas fa-bars"></i></div>
|
||||
<div class="card-body">
|
||||
<h4>{% trans "Menu gauche" %}</h4>
|
||||
<ol class="doc-steps">
|
||||
<li><i class="fas fa-play-circle"></i> {% trans "Sélectionner la session" %}</li>
|
||||
<li><i class="fas fa-check-square"></i> {% trans "Cocher l'expérience souhaitée" %}</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Zone de dépôt -->
|
||||
<div class="info-card card-accent-blue">
|
||||
<div class="card-icon"><i class="fas fa-cloud-upload-alt"></i></div>
|
||||
<div class="card-body">
|
||||
<h4>{% trans "Zone d'import" %}</h4>
|
||||
<ol class="doc-steps">
|
||||
<li><i class="fas fa-file-csv"></i> {% trans "Glisser-déposer le fichier CSV" %}</li>
|
||||
<li><i class="fas fa-upload"></i> {% trans "Cliquer sur Importer" %}</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Astuce CSV -->
|
||||
<div class="info-row">
|
||||
<div class="info-card card-accent-yellow full-width">
|
||||
<div class="card-icon"><i class="fas fa-lightbulb"></i></div>
|
||||
<div class="card-body">
|
||||
<h4>{% trans "Astuce — Générer le template CSV depuis Django admin" %}</h4>
|
||||
<ol class="doc-steps">
|
||||
<li>
|
||||
<i class="fas fa-th-list"></i>
|
||||
{% trans "Aller dans" %}
|
||||
<strong>{% trans "Planarian › Configurations des expériences" %}</strong>
|
||||
</li>
|
||||
<li>
|
||||
<i class="fas fa-check-square"></i>
|
||||
{% trans "Cocher le puit de l'expérience ou un groupe d'expériences" %}
|
||||
</li>
|
||||
<li>
|
||||
<i class="fas fa-bolt"></i>
|
||||
{% trans "Action :" %} <strong>{% trans "Exporter un template CSV…" %}</strong>
|
||||
</li>
|
||||
<li>
|
||||
<i class="fas fa-download"></i>
|
||||
{% trans "Vérifier l'emplacement du fichier téléchargé (dossier Download)." %}
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
</main>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block js_footer %}
|
||||
{{ block.super }}
|
||||
<script>
|
||||
/* Mise en évidence du lien actif dans la navigation latérale */
|
||||
(function () {
|
||||
const links = document.querySelectorAll('.nav-link');
|
||||
const sections = document.querySelectorAll('[id^="section-"]');
|
||||
|
||||
const observer = new IntersectionObserver(
|
||||
(entries) => {
|
||||
entries.forEach(entry => {
|
||||
if (entry.isIntersecting) {
|
||||
links.forEach(l => l.classList.remove('active'));
|
||||
const target = document.querySelector(`.nav-link[href="#${entry.target.id}"]`);
|
||||
if (target) target.classList.add('active');
|
||||
}
|
||||
});
|
||||
},
|
||||
{ rootMargin: '-10% 0px -80% 0px' }
|
||||
);
|
||||
|
||||
sections.forEach(s => observer.observe(s));
|
||||
})();
|
||||
</script>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,22 @@
|
||||
{% extends 'scanner/base.html' %}
|
||||
{% load i18n %}
|
||||
{% block columns %}{% endblock %}
|
||||
|
||||
{% block styles %}
|
||||
{{ block.super }}
|
||||
<link rel="stylesheet" href="/static/css/doc_database.css">
|
||||
<link rel="stylesheet" href="/static/css/doc_calibration.css>
|
||||
<link rel="stylesheet" href="/static/css/doc_experiments.css">
|
||||
<link rel="stylesheet" href="/static/css/doc_scanning.css">
|
||||
<link rel="stylesheet" href="/static/css/doc_results.css">
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block js_footer %}
|
||||
{{ block.super }}
|
||||
|
||||
</script>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,204 @@
|
||||
{% extends 'scanner/base.html' %}
|
||||
{% load i18n %}
|
||||
{% block columns %}{% endblock %}
|
||||
|
||||
{% block styles %}
|
||||
{{ block.super }}
|
||||
<link rel="stylesheet" href="/static/css/doc_database.css">
|
||||
<link rel="stylesheet" href="/static/css/doc_calibration.css>
|
||||
<link rel="stylesheet" href="/static/css/doc_experiments.css">
|
||||
<link rel="stylesheet" href="/static/css/doc_scanning.css">
|
||||
<link rel="stylesheet" href="/static/css/doc_results.css">
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="doc-wrapper">
|
||||
|
||||
<!-- ─── En-tête ─── -->
|
||||
<header class="doc-header">
|
||||
<div class="doc-header-inner">
|
||||
<div class="doc-header-icon" style="background: linear-gradient(135deg, var(--accent-green), var(--accent-blue));">
|
||||
<i class="fas fa-chart-bar"></i>
|
||||
</div>
|
||||
<div>
|
||||
<h1 class="doc-title">{% trans "Exploiter les résultats" %}</h1>
|
||||
<p class="doc-subtitle">{% trans "Export CSV des métriques par session, expérience et planaire" %}</p>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<!-- ─── Navigation latérale ─── -->
|
||||
<nav class="doc-sidenav" id="sidenav">
|
||||
<p class="nav-section-label">{% trans "Navigation" %}</p>
|
||||
<a href="#section-intro" class="nav-link active"><i class="fas fa-info-circle"></i> {% trans "Présentation" %}</a>
|
||||
<a href="#section-left" class="nav-link"> <i class="fas fa-bars"></i> {% trans "Menu gauche" %}</a>
|
||||
<a href="#section-export" class="nav-link nav-sub"><i class="fas fa-server"></i> {% trans "Export serveur" %}</a>
|
||||
<a href="#section-right" class="nav-link"> <i class="fas fa-download"></i> {% trans "Partie droite" %}</a>
|
||||
<a href="#section-generate" class="nav-link nav-sub"><i class="fas fa-file-csv"></i> {% trans "Générer le CSV" %}</a>
|
||||
</nav>
|
||||
|
||||
<!-- ─── Contenu principal ─── -->
|
||||
<main class="doc-content">
|
||||
|
||||
<!-- ============================================================ -->
|
||||
<!-- SECTION 1 : Présentation -->
|
||||
<!-- ============================================================ -->
|
||||
<section class="doc-section" id="section-intro">
|
||||
<div class="section-header">
|
||||
<span class="section-badge badge-green">{% trans "Export CSV" %}</span>
|
||||
<h2><i class="fas fa-chart-bar"></i> {% trans "Exploiter les résultats des expériences" %}</h2>
|
||||
<p class="section-desc">{% trans "Les métriques de suivi des planaires sont exportables au format CSV depuis l'interface Scanner." %}</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- ============================================================ -->
|
||||
<!-- SECTION 2 : Menu gauche -->
|
||||
<!-- ============================================================ -->
|
||||
<section class="doc-section" id="section-left">
|
||||
<div class="section-header">
|
||||
<span class="section-badge badge-blue">{% trans "Sélection" %}</span>
|
||||
<h2><i class="fas fa-bars"></i> {% trans "Menu gauche" %}</h2>
|
||||
</div>
|
||||
|
||||
<div class="info-row">
|
||||
<div class="info-card card-accent-indigo">
|
||||
<div class="card-icon"><i class="fas fa-mouse-pointer"></i></div>
|
||||
<div class="card-body">
|
||||
<h4>{% trans "Sélection" %}</h4>
|
||||
<ol class="doc-steps">
|
||||
<li><i class="fas fa-play-circle"></i> {% trans "Sélectionner la session" %}</li>
|
||||
<li><i class="fas fa-check-square"></i> {% trans "Cocher l'expérience souhaitée" %}</li>
|
||||
<li><i class="fas fa-file-export"></i> {% trans "Cliquer sur Exporter les métriques de l'expérience" %}</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Export serveur -->
|
||||
<div class="sub-subsection" id="section-export">
|
||||
<h4 class="table-title">
|
||||
<i class="fas fa-server"></i> {% trans "Export côté serveur" %}
|
||||
<span class="badge-important">{% trans "ATTENTION" %}</span>
|
||||
</h4>
|
||||
|
||||
<div class="info-row">
|
||||
<!-- Durée -->
|
||||
<div class="info-card card-accent-orange">
|
||||
<div class="card-icon"><i class="fas fa-hourglass-half"></i></div>
|
||||
<div class="card-body">
|
||||
<h4>{% trans "Durée variable" %}</h4>
|
||||
<div class="alert-box" style="margin-bottom:0;">
|
||||
<i class="fas fa-exclamation-triangle"></i>
|
||||
{% trans "La procédure peut être longue selon le nombre de planaires à suivre." %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Tâche de fond -->
|
||||
<div class="info-card card-accent-blue">
|
||||
<div class="card-icon"><i class="fas fa-cogs"></i></div>
|
||||
<div class="card-body">
|
||||
<h4>{% trans "Tâche de fond" %}</h4>
|
||||
<p>{% trans "Le service est exécuté en arrière-plan (Celery)." %}</p>
|
||||
<div class="tag-list">
|
||||
<span class="tag tag-blue">export_session</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Emplacement fichiers -->
|
||||
<div class="info-row">
|
||||
<div class="info-card card-accent-teal full-width">
|
||||
<div class="card-icon"><i class="fas fa-folder-open"></i></div>
|
||||
<div class="card-body">
|
||||
<h4>{% trans "Emplacement des fichiers sur le serveur" %}</h4>
|
||||
<div class="path-block">
|
||||
<i class="fas fa-hdd"></i>
|
||||
<code>/home/rpi4/export/csv/*.csv</code>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- ============================================================ -->
|
||||
<!-- SECTION 3 : Partie droite — téléchargement client -->
|
||||
<!-- ============================================================ -->
|
||||
<section class="doc-section" id="section-right">
|
||||
<div class="section-header">
|
||||
<span class="section-badge badge-green">{% trans "Téléchargement" %}</span>
|
||||
<h2><i class="fas fa-download"></i> {% trans "Partie droite — Téléchargement client" %}</h2>
|
||||
</div>
|
||||
|
||||
<div class="sub-subsection" id="section-generate">
|
||||
<div class="info-row">
|
||||
<!-- Sélections -->
|
||||
<div class="info-card card-accent-indigo">
|
||||
<div class="card-icon"><i class="fas fa-sliders-h"></i></div>
|
||||
<div class="card-body">
|
||||
<h4>{% trans "Paramètres" %}</h4>
|
||||
<ul class="doc-list">
|
||||
<li>
|
||||
<i class="fas fa-circle text-teal"></i>
|
||||
{% trans "Choisir le puit" %}
|
||||
</li>
|
||||
<li>
|
||||
<i class="fas fa-hashtag text-indigo"></i>
|
||||
{% trans "Choisir l'index du planaire" %}
|
||||
<p class="task-desc">
|
||||
<i class="fas fa-info-circle"></i>
|
||||
{% trans "Le nombre de planaires est défini dans" %}
|
||||
<em>{% trans "Paramètres d'une expérience" %}</em>.
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Bouton Générer -->
|
||||
<div class="info-card card-accent-green">
|
||||
<div class="card-icon"><i class="fas fa-file-download"></i></div>
|
||||
<div class="card-body">
|
||||
<h4>{% trans "Bouton Générer" %}</h4>
|
||||
<p>{% trans "Télécharge le fichier CSV directement sur le poste client." %}</p>
|
||||
<div class="alert-box alert-info">
|
||||
<i class="fas fa-hourglass-half"></i>
|
||||
{% trans "La procédure peut être longue." %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
</main>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block js_footer %}
|
||||
{{ block.super }}
|
||||
<script>
|
||||
/* Mise en évidence du lien actif dans la navigation latérale */
|
||||
(function () {
|
||||
const links = document.querySelectorAll('.nav-link');
|
||||
const sections = document.querySelectorAll('[id^="section-"]');
|
||||
|
||||
const observer = new IntersectionObserver(
|
||||
(entries) => {
|
||||
entries.forEach(entry => {
|
||||
if (entry.isIntersecting) {
|
||||
links.forEach(l => l.classList.remove('active'));
|
||||
const target = document.querySelector(`.nav-link[href="#${entry.target.id}"]`);
|
||||
if (target) target.classList.add('active');
|
||||
}
|
||||
});
|
||||
},
|
||||
{ rootMargin: '-10% 0px -80% 0px' }
|
||||
);
|
||||
|
||||
sections.forEach(s => observer.observe(s));
|
||||
})();
|
||||
</script>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,266 @@
|
||||
{% extends 'scanner/base.html' %}
|
||||
{% load i18n %}
|
||||
{% block columns %}{% endblock %}
|
||||
|
||||
{% block styles %}
|
||||
{{ block.super }}
|
||||
<link rel="stylesheet" href="/static/css/doc_database.css">
|
||||
<link rel="stylesheet" href="/static/css/doc_calibration.css>
|
||||
<link rel="stylesheet" href="/static/css/doc_experiments.css">
|
||||
<link rel="stylesheet" href="/static/css/doc_scanning.css">
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="doc-wrapper">
|
||||
|
||||
<!-- ─── En-tête ─── -->
|
||||
<header class="doc-header">
|
||||
<div class="doc-header-inner">
|
||||
<div class="doc-header-icon" style="background: linear-gradient(135deg, var(--accent-indigo), var(--accent-purple));">
|
||||
<i class="fas fa-route"></i>
|
||||
</div>
|
||||
<div>
|
||||
<h1 class="doc-title">{% trans "Balayage des puits" %}</h1>
|
||||
<p class="doc-subtitle">{% trans "Lancement, suivi et procédure en cas d'arrêt" %}</p>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<!-- ─── Navigation latérale ─── -->
|
||||
<nav class="doc-sidenav" id="sidenav">
|
||||
<p class="nav-section-label">{% trans "Navigation" %}</p>
|
||||
<a href="#section-intro" class="nav-link active"><i class="fas fa-info-circle"></i> {% trans "Présentation" %}</a>
|
||||
<a href="#section-cmd" class="nav-link"> <i class="fas fa-gamepad"></i> {% trans "Commandes" %}</a>
|
||||
<a href="#section-start" class="nav-link nav-sub"><i class="fas fa-play"></i> {% trans "Lancer le balayage" %}</a>
|
||||
<a href="#section-stop" class="nav-link nav-sub"><i class="fas fa-stop"></i> {% trans "Arrêt" %}</a>
|
||||
<a href="#section-recover" class="nav-link"> <i class="fas fa-undo-alt"></i> {% trans "Procédure après arrêt" %}</a>
|
||||
<a href="#section-reduct" class="nav-link nav-sub"><i class="fas fa-database"></i> ReductStore</a>
|
||||
</nav>
|
||||
|
||||
<!-- ─── Contenu principal ─── -->
|
||||
<main class="doc-content">
|
||||
|
||||
<!-- ============================================================ -->
|
||||
<!-- SECTION 1 : Présentation -->
|
||||
<!-- ============================================================ -->
|
||||
<section class="doc-section" id="section-intro">
|
||||
<div class="section-header">
|
||||
<span class="section-badge badge-indigo">{% trans "Balayage" %}</span>
|
||||
<h2><i class="fas fa-route"></i> {% trans "Balayage des puits" %}</h2>
|
||||
</div>
|
||||
|
||||
<div class="info-row">
|
||||
<div class="info-card card-accent-indigo">
|
||||
<div class="card-icon"><i class="fas fa-crop-alt"></i></div>
|
||||
<div class="card-body">
|
||||
<h4>{% trans "Recadrage forcé" %}</h4>
|
||||
<p>{% trans "Le balayage force toujours le recadrage de l'image." %}</p>
|
||||
<p>{% trans "Le balayage est disponible quand la session est marquée ACTIVE" %}</p>
|
||||
<div class="alert-box alert-info">
|
||||
<i class="fas fa-info-circle"></i>
|
||||
{% trans "Les boutons Axes et Recadrer sont affichés à titre indicatif uniquement." %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- ============================================================ -->
|
||||
<!-- SECTION 2 : Commandes -->
|
||||
<!-- ============================================================ -->
|
||||
<section class="doc-section" id="section-cmd">
|
||||
<div class="section-header">
|
||||
<span class="section-badge badge-blue">{% trans "Interface" %}</span>
|
||||
<h2><i class="fas fa-gamepad"></i> {% trans "Commandes importantes" %}</h2>
|
||||
</div>
|
||||
|
||||
<!-- Lancer le balayage -->
|
||||
<div class="sub-subsection" id="section-start">
|
||||
<h4 class="table-title">
|
||||
<i class="fas fa-play"></i> {% trans "Lancer le balayage" %}
|
||||
</h4>
|
||||
<div class="info-row">
|
||||
<div class="info-card card-accent-green full-width">
|
||||
<div class="card-icon"><i class="fas fa-play-circle"></i></div>
|
||||
<div class="card-body">
|
||||
<ul class="doc-list">
|
||||
<li>
|
||||
<i class="fas fa-shoe-prints text-green"></i>
|
||||
{% trans "Suivi pas à pas de tous les puits de la session." %}
|
||||
</li>
|
||||
<li>
|
||||
<i class="fas fa-terminal text-green"></i>
|
||||
{% trans "Les logs s'affichent en bas de l'écran en temps réel." %}
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- ARRÊT -->
|
||||
<div class="sub-subsection" id="section-stop">
|
||||
<h4 class="table-title">
|
||||
<i class="fas fa-stop"></i> {% trans "ARRÊT" %}
|
||||
<span class="badge-important">{% trans "ATTENTION" %}</span>
|
||||
</h4>
|
||||
<div class="info-row">
|
||||
<div class="info-card card-accent-green">
|
||||
<div class="card-icon"><i class="fas fa-images"></i></div>
|
||||
<div class="card-body">
|
||||
<h4><i class="fas fa-check-circle text-green"></i> {% trans "Images" %}</h4>
|
||||
<p>{% trans "Les images capturées jusqu'à l'arrêt seront enregistrées." %}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info-card card-accent-red">
|
||||
<div class="card-icon"><i class="fas fa-chart-line"></i></div>
|
||||
<div class="card-body">
|
||||
<h4><i class="fas fa-times-circle text-red"></i> {% trans "Données" %}</h4>
|
||||
<p>{% trans "Les données de suivi ne seront pas enregistrées." %}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- ============================================================ -->
|
||||
<!-- SECTION 3 : Procédure après arrêt -->
|
||||
<!-- ============================================================ -->
|
||||
<section class="doc-section" id="section-recover">
|
||||
<div class="section-header">
|
||||
<span class="section-badge badge-red">{% trans "Récupération" %}</span>
|
||||
<h2><i class="fas fa-undo-alt"></i> {% trans "Procédure en cas d'arrêt" %}</h2>
|
||||
</div>
|
||||
|
||||
<!-- Étapes Django -->
|
||||
<div class="info-row">
|
||||
<div class="info-card card-accent-orange full-width">
|
||||
<div class="card-icon"><i class="fas fa-redo-alt"></i></div>
|
||||
<div class="card-body">
|
||||
<h4>{% trans "Réinitialiser la session" %}</h4>
|
||||
<ol class="doc-steps">
|
||||
<li>
|
||||
<i class="fas fa-trash-alt text-red"></i>
|
||||
{% trans "Supprimer la session en cours depuis l'administration Django." %}
|
||||
</li>
|
||||
<li>
|
||||
<i class="fas fa-plus-circle text-green"></i>
|
||||
{% trans "Créer une nouvelle session." %}
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- ReductStore — superadmin -->
|
||||
<div class="sub-subsection" id="section-reduct">
|
||||
<h4 class="table-title">
|
||||
<i class="fas fa-database"></i>
|
||||
{% trans "Nettoyage ReductStore" %}
|
||||
<span class="badge-superadmin">superadmin</span>
|
||||
</h4>
|
||||
|
||||
<div class="info-row">
|
||||
<div class="info-card card-accent-red full-width">
|
||||
<div class="card-icon"><i class="fas fa-exclamation-triangle"></i></div>
|
||||
<div class="card-body">
|
||||
<h4>{% trans "Accès ReductStore" %}</h4>
|
||||
<a href="http://192.168.1.200:8383/ui/dashboard" target="_blank" class="access-link">
|
||||
192.168.1.200:8383/ui/dashboard <i class="fas fa-external-link-alt"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="info-row">
|
||||
<!-- Bucket camera -->
|
||||
<div class="info-card card-accent-cyan">
|
||||
<div class="card-icon"><i class="fas fa-images"></i></div>
|
||||
<div class="card-body">
|
||||
<h4>
|
||||
{% trans "Bucket" %} <code>camera</code>
|
||||
</h4>
|
||||
<ol class="doc-steps">
|
||||
<li>
|
||||
<i class="fas fa-search"></i>
|
||||
{% trans "Localiser les entrées correspondant aux UUIDs des expériences." %}
|
||||
</li>
|
||||
<li>
|
||||
<i class="fas fa-trash-alt text-red"></i>
|
||||
{% trans "Supprimer les UUIDs des expériences concernées." %}
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Bucket planarian_metrics -->
|
||||
<div class="info-card card-accent-green">
|
||||
<div class="card-icon"><i class="fas fa-chart-line"></i></div>
|
||||
<div class="card-body">
|
||||
<h4>
|
||||
{% trans "Bucket" %} <code>planarian_metrics</code>
|
||||
</h4>
|
||||
<ol class="doc-steps">
|
||||
<li>
|
||||
<i class="fas fa-tag"></i>
|
||||
{% trans "Repérer les enregistrements dont le label correspond aux UUIDs." %}
|
||||
</li>
|
||||
<li>
|
||||
<i class="fas fa-trash-alt text-red"></i>
|
||||
{% trans "Supprimer ces enregistrements." %}
|
||||
</li>
|
||||
</ol>
|
||||
<div class="tag-list" style="margin-top:10px;">
|
||||
<span class="tag tag-gray">label: uuid</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Résumé visuel uuid -->
|
||||
<div class="info-row">
|
||||
<div class="info-card card-accent-yellow full-width">
|
||||
<div class="card-icon"><i class="fas fa-key"></i></div>
|
||||
<div class="card-body">
|
||||
<h4>{% trans "Identifier les UUIDs à supprimer" %}</h4>
|
||||
<p>{% trans "Les UUIDs des expériences sont visibles dans l'administration Django, dans la session supprimée ou dans les logs affichés pendant le balayage." %}</p>
|
||||
<div class="uuid-example">
|
||||
<i class="fas fa-fingerprint"></i>
|
||||
<code>3-HD-A4</code>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
</main>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block js_footer %}
|
||||
{{ block.super }}
|
||||
<script>
|
||||
/* Mise en évidence du lien actif dans la navigation latérale */
|
||||
(function () {
|
||||
const links = document.querySelectorAll('.nav-link');
|
||||
const sections = document.querySelectorAll('[id^="section-"]');
|
||||
|
||||
const observer = new IntersectionObserver(
|
||||
(entries) => {
|
||||
entries.forEach(entry => {
|
||||
if (entry.isIntersecting) {
|
||||
links.forEach(l => l.classList.remove('active'));
|
||||
const target = document.querySelector(`.nav-link[href="#${entry.target.id}"]`);
|
||||
if (target) target.classList.add('active');
|
||||
}
|
||||
});
|
||||
},
|
||||
{ rootMargin: '-10% 0px -80% 0px' }
|
||||
);
|
||||
|
||||
sections.forEach(s => observer.observe(s));
|
||||
})();
|
||||
</script>
|
||||
{% endblock %}
|
||||
Reference in New Issue
Block a user