\documentclass[a4paper, 12pt]{article}

\input{setup}

\begin{document}


DOCUMENTATION UTILISATEUR \\
PHYTOCLUST SOFTWARE \\

Marjorie ROSCIAN, avril-sep 2018

\newpage
\tableofcontents

\newpage
\section{Pré-requis \& Configuration}

Ce programme a été codé sous Python 3.5 sur Ubuntu 16.04 et dans l'IDE Pycharm version 2018.2. Ce programme nécessite d'avoir R sur l'ordinateur. Pour créer ce programme, la version de R 3.4.4 a été utilisée. \\

Librairies Python utilisées :\\
\begin{table}[H]
\centering
\begin{tabular}{|c c|}
\hline
Packages & Version \\
\hline
pip & 10.0.1\\
setuptools & 40.2.0\\
\hline
matplotlib & 2.2.3 \\
math & \\
numpy & 1.15.1\\
pandas & 0.23.4\\
PyQt5 & 5.10.1\\
rpy2 & 2.9.4\\
scikit-learn & 0.19.2\\
scipy & 1.1.0\\
seaborn & 0.9.0\\
\hline
\end{tabular}
\end{table}

Librairies R utilisées :\\
\begin{table}[H]
\centering
\begin{tabular}{|c c|}
\hline
Packages & Version \\
\hline
base & \\
utils & \\
\hline
stats & 3.4.4\\
fda & 2.4.8\\
mclust & 5.4.1 \\
\hline
\end{tabular}
\end{table}


\section{Structure du programme}

\includegraphics[scale=0.8]{structureprojet}

3 modules composent le projet. Le premier module, nommé Analysis contient tous les fichiers utiles au clustering depuis importation des données jusqu'à l'affichage des graphiques à la fin. Dans ce module, on trouvera un fichier principal, MainExecution.py ainsi que 2 fichiers comportant toutes les fonctions de calculs. En supplément, on pourra utiliser des fichiers données test, DonneesTest et DonneesTestBIS à condition d'avoir les données CSV correspondantes. On trouvera aussi deux fonctions séparées, FourierBasis et FourierValues qui ne servent qu'en cas d'incompatibilité entre R et Python.\\
Le second module, Interface, contient tous les fichiers nécessaires à la génération d'une interface graphique en utilisant un Controller pour chaque fenêtre, présents dans le fichier Controller. Les fichiers graphiques (PhytoClusSoft et FinalTable) sont créés sous QtDesigner et sont ensuite importés dans le module. L'index gère le lancement de l'interface graphique en connexion avec le MainExecution du module 1.
Le dernier module contient le fichier d'analyse d'images qui doit être relié à l'index et au MainExecution pour qu'il s'exécute dans le logiciel.\\

Cette structure doit pouvoir évoluer en conservant la connexion entre le fichier du programme MainExecution.py et son interface Index.py, et Controller.py, même en modifiant l'un ou l'autre.

\section{Interface graphique}

L'interface graphique est une fenêtre créée sous QtDesigner. Elle comprend 2 boutons de choix du type de fichiers CSV à traiter, un bouton pour charger le fichier, un autre pour charger le dossier d'imaes et un dernier pour lancer l'analyse. Chacune des fonctions associées au clique sur un des boutons est implémentée dans le fichier Controller.py. \\

\begin{center}
\includegraphics[scale=0.5]{CaptureGraphique}
\end{center}


\section{Fichiers clés}

Dans le module1, le fichier MainExecution.py contient toute l'information nécessaire à l'éxécution du code. Il est composé de deux fonctions : main\_exe\_4prof et main\_exe\_5prof.\\
Chaucune d'elle assure le déroulement du programme pour un type de fichier CSV.\\
La fonction main\_exe\_4prof gère l'éxécution du programme pour un fichier contenant les colonnes : ID FWS SWS FLO FLR Curvature. La seconde gère le programme pour un fichier de type : ID FWS SWS FLY FLO FLR Curvature. \\
Les deux autres fichiers du module contiennent les fonctions de calculs qui seront utilisées dans le fichier MainExecution et seront détaillées plus loin dans la partie Fonctions.\\

Dans le module2, le fichier Controller.py permet de définir les fonctions d'activation des boutons de l'interface graphique. Le fichier Index.py gère l'activation de l'interface graphique.\\

Dans le module3, le fichier ImageProcessing.py permet le traitement des images. Ce fichier devra être lié à l'interface graphique lorsque le programme de traitement aura été automatisé.\\


\section{Fonctions}

Pour les détails de chacune des fonctions, voir les doc string associés à chacune d'elles.

\subsection{Module1: AnthoRPlytoClus.py}

Ce fichier contient 2 fonctions inspirées de celles d'Anthony Malkassian sous R.\\

La fonction \textbf{data\_to\_function()} automatise le passage des profils dans une base de Fourier et permet de ne récupérer que les coefficients de Fourier de chaque profil pour chacune des cellules. 
Les paramètres de la fonction sont : la matrice des profils, le nombre de bases, et le nombre de profils à traiter.\\
Attention, le nombre de bases doit être un nombre impair. \\
Le résultat est une matrice contenant tous les coefficients de Fourier pour tous les profils et toutes les cellules.\\

La fonction \textbf{dist\_inv()} compare deux vecteurs et retourne la plus petite distance entre les deux vecteurs ou le premier et l'inverse du second. \\ Elle est utilisée pour calculer la distance invariante par orientation et faisait partie des fonctions programmées par Anthony.\\
Les paramètre
s sont les deux vecteurs à comparer. \\
Le résultat retourne la distance minimale entre les deux configurations possibles.


\subsection{Module1 : FunctionUtils.py}

Ce fichier contient 6 fonctions servant à automatiser le traitement. 
La première \textbf{remove\_id\_column()} permet de supprimer la 1ère colonne du fichier pour toutes les cellules. La variable d'entrée et la matrice brute des données. \\

La fonction \textbf{norm\_coeff()} normalise les coefficients selon la méthode définie par Anthony Malkassian dans sa thèse.\\

La fonction \textbf{center\_coeff()} centre chaque coefficient. \\

La fonction \textbf{sort\_each\_profil()} tri les profils et les isoles en 5 sous matrices. Les variables d'entrée sont la matrice des coefficients pour tous les profils, le nombre de bases pour chaque profil et le nombre de profil à traiter. Le résultat est un array avec 5 array séparés.\\

La fonction \textbf{pca\_norm} normalise les coefficients de Fourier pr la racine carée de la première valeur propre de l'ACP.\\

La fonction \textbf{area} calcule l'aire sous le profil. Cette valeur sert de descripteur et est utilisée pour visualiser les données sous forme de cytogramme 

\subsection{Module1: DonneesTest.py}

Ce fichier contient une seule fonction : \textbf{donnees()}. \\

Cette fonction va chercher des fichier csv d'espèces déjà sélectionnées et construit une matrice qui est utilisée comme fichier test de 4 groupes. \\

Idem pour le fichier DonneesTestBIS.py avec 8 à 10 groupes.

\subsection{Module2: Controller.py}

Ce fichier contient 2 classes. La première contrôle l'exécution et les fonctionnalités de la fenêtre principale et la seconde contrôle l'affichage et les fonctionnalités du tableau d'affichage final. 
Dans la première classe, ControlMain, la fonction \textbf{init()} gère le lancement de la fenêtre principale. \\

La fonction \textbf{loadCSV()} ne prend pas de variable en entrée. Elle permet de parcourir l'ordinateur pour chercher un fichier CSV et charger le chemin d'accès ainsi que le nom du fichier.\\

La fonction \textbf{loadPicture()} permet de charger un chemin d'accès au dossier d'images et ne prend pas de variable en entrée.\\

Pour sélectionner le type de configuration de la machine, c'est à dire 4 ou 5 profils, les boutons sont activés par une fonction \textbf{run4prof()} ou \textbf{run5prof()} qui retourne True quand le bouton est cliqué. \\

La fonction \textbf{getint()} permet d'afficher la fenêtre de dialogue qui demande à l'utilisateur de choisir le nombre de groupe correspondant au critère du BIC observé.\\

Dans la seconde classe, ControlTable, on trouve 4 fonctions.\\

La fonction \textbf{init()} permet l'affichage de base du tableau.\\

La fonction \textbf{sendtoDataBase()} pourra, quand le programme sera validé, envoyer les résultats du tableaux dans la base de données.\\

La fonction \textbf{close()} activera la fermeture du tableau.\\

La fonction \textbf{fillTable()} prend le tableau de statistiques en entrée et retourne les résultats dans l'affichage graphique. \\




\end{document}