« Previous -
Version 69/246
(diff) -
Next » -
Current version
Etienne Pallier, 03/23/2015 09:50 am
Wiki¶
DEPOT SVN¶
(cliquer sur l'onglet Dépôt)
- URL du dépôt : https://usvn-chemcam.irap.omp.eu/repo/c-spec-hk/trunk/
- Administration du dépôt : https://usvn-chemcam.irap.omp.eu
- Administrateur : Etienne Pallier
- Groupes : * grp-admin-chemcam : Admin du dépot CHEMCAM (RW sur racine). * grp-chemcam : Les développeurs de CHEMCAM (RW sur branches). * On peut également créer un groupe grp-readonly-chemcam (et mettre les droits en read-only sur tout le projet)
- Ajout d'utilisateurs
- On peut ajouter des utilisateurs extérieurs via l'interface web, puis les ajouter dans les groupes (en tant que "Utilisateurs affectés").
- Dans le cas des utilisateurs IRAP, il faut qu'ils se connectent une première fois sur https://usvn-idems.irap.omp.eu avec leur login/mdp IRAP avant de pouvoir être affectés dans les groupes du repository.
- Dashboard : le dashboard du projet est https://usvn-chemcam.irap.omp.eu (=interface de gestion des utilisateurs, groupes et droits d'accès sur le repo, et également navigateur/explorateur du repo)
- Accès : Le repo SVN est accessible depuis partout dans le monde (svn-over-https only), la racine du repo est https://usvn-chemcam.irap.omp.eu/repo/chemcam/
- TODO: passer sur SourceSup : https://sourcesup.renater.fr, https://sourcesup.cru.fr/
SPECIFICATIONS¶
Schéma de connexion¶
PcEGSE <==RJ45==> EGSE <==serial==> ChemCam
ChemCam (garde tous les spectres en RAM) : serial==> BU (Body Unit) <== MU (Mast Unit)
- MU : fait les tirs
- BU : analyse les spectres
SOH (Spectra O? HK)
Types d’observations¶
(sur la ligne DOLIBS modifier controlWord)
Bit # Bit Value Fonction si activé
----- --------- ------------------
0 1 Do focus : effectuer une focalisation (voir focusAlgorithm)
1 2 Pre dark spectra : acquisition d’un spectre dark AVANT les tirs
2 4 Post dark spectra : acquisition d’un spectre dark APRES les tirs
3 8 Enable laser : effectuer un (des) tir(s) laser (voir Nshots) (sinon, c'est un DARK)
4 16 Collect spectra : acquisition de spectre pendant les tirs
5 32 BS
=> 25 = 1+8+16 = tir avec laser
=> 17 = 1+0+16 = tir sans laser (DARK)
Bits 0 et 1 pas utilisés !!! :
Le mode (Bit0 ET Bit1 activés) ne fait pas des darks after et before satisfaisant donc on le fait séparément en faisant un spectre sans enable laser,
ce qui génère tous ces spectres avec un controlWord =17 dans la liste.
Fichier spectre¶
Suite d'intensités pour chaque canal (dans l'ordre 0, 1, 2, 3, ... 6444)
A représenter sur axe
- X : channel number, assimilable à longueur d'onde : 0 à 6444
- Y : intensité
Si fichier DARK, alors intensités (à peu près) constantes (toutes égales) :
=> donne le bruit de fond de l'instrument, puisque on a zero lumière
Stratégie de développement¶
Prendre le last stack only
Lire fichier *_spect.TXT et *_SOH.TXT associé (celui qui est juste avant, < 5mn avant)
1 fich/jour
Methods to write :
findSOH(liste des *SOH.TXT du jour, spect.TXT)
=> convertit les noms SOH en timestamps, trouve le SOH qui est juste avant le spect.TXT (< 5mn avant)
findDARK(liste des *spect.TXT (dark), le spect.TXT pour lequel on veut le dark)
=> retourne le fichier dark qui est juste après (<5mn) (mais, peut être before...)
=> regarde un peu autour (avant et après)
findAutofocus(...)
=> *_afocus.TXT (juste prendre son nom, pas son contenu), qui est AVANT
EXEMPLE DE FICHIER RESULTAT (LOG) A OBTENIR (1 par jour)¶
data_Feb25_2014_5
firstfile = Feb25_161115_2014_spect.TXT
lastfile = Feb25_162059_2014_spect.TXT
id, SPECT_file, SOH_file,
// from *_SOH.TXT file :
nbStacks // Nb de stacks (indiqué par le nb occurences de "mast SOH" qui indique le début d'un nouveau stack) - Prendre seulement les HK du LAST stack
temp_laser_min(degC), temp_laser_max(degC), // prendre min et max des 4 HK_Temp_Laser_1-4
temp_spect(C), // Spectrometer_Temp
pm(cnts), // Motor_Position
// from *_spect.TXT file :
dist(mm), // distance to target distToTarget
nshots, // (Nshots) ajouter ici "nshots_real" car le laser fait parfois plus de shots que prévu (erreur) (lire 1ère ligne pour savoir le nb de col)
controlWord, // 25 = tir avec laser, 17 = tir sans laser (DARK)
data_mean, // moyenne des data \ nbshots reels (= intensité moyenne ?) (à lire from >>>>>Begin Processed Spectral Data<<<<<)
dark_file, // remplacer par dark_file_before, dark_file_after (file name)
mean_spect_value - dark // (= data_mean - ???)
// Liste des fichiers *_spect.TXT associés avec leurs paramètres HK (trouvés dans *_SOH.TXT) :
id, SPECT_file, SOH_file, nbStacks, temp_laser_min, temp_laser_max, temp_spect, pm, dist(mm), nshots, controlWord, data_mean, dark_file_before, dark_file_after, mean_spect_value - dark
1 Feb25_161115_2014_spect.TXT 161055 nbStacks 4.25 5.44 30.15 5499 3000 10 25 677.39 161142 dark_file_after 50.28
2 (D)Feb25_161142_2014_spect.TXT 161132 4.29 5.48 30.15 5499 3000 10 17 627.11 - 627.11
3 Feb25_161243_2014_spect.TXT 161210 4.29 5.33 30.15 5444 2951 10 25 649.07 161307 19.72
4 Feb25_161307_2014_spect.TXT 161257 4.25 5.55 30.15 5444 3000 10 17 629.35 - 629.35
5 Feb25_161339_2014_spect.TXT 161329 4.25 5.59 30.15 5454 2959 10 25 674.78 161404 43.76
6 Feb25_161404_2014_spect.TXT 161353 4.29 5.52 30.15 5454 3000 10 17 631.02 - 631.02
7 Feb25_161435_2014_spect.TXT 161425 4.21 5.55 30.15 5463 2967 10 25 693.77 161500 60.76
8 Feb25_161500_2014_spect.TXT 161450 4.33 5.59 30.15 5463 3000 10 17 633.01 - 633.01
9 Feb25_161532_2014_spect.TXT 161521 4.29 5.59 30.15 5473 2975 10 25 703.08 161556 68.71
10 Feb25_161556_2014_spect.TXT 161546 4.36 5.52 30.15 5473 3000 10 17 634.36 - 634.36
11 Feb25_161646_2014_spect.TXT 161636 4.33 5.63 30.15 5482 2983 10 25 702.22 161711 67.98
12 Feb25_161711_2014_spect.TXT 161701 4.33 5.59 30.15 5482 3000 10 17 634.24 - 634.24
13 Feb25_161743_2014_spect.TXT 161733 4.36 5.55 30.15 5493 2992 10 25 695.08 161808 58.88
14 Feb25_161808_2014_spect.TXT 161757 4.36 5.55 30.15 5493 3000 10 17 636.20 - 636.20
15 Feb25_161840_2014_spect.TXT 161829 4.40 5.59 30.15 5502 3000 10 25 683.94 161905 46.74
16 Feb25_161905_2014_spect.TXT 161854 4.40 5.59 30.15 5502 3000 10 17 637.20 - 637.20
17 Feb25_161937_2014_spect.TXT 161926 4.40 5.59 30.15 5513 3009 10 25 675.67 162002 37.24
18 Feb25_162002_2014_spect.TXT 161951 4.44 5.59 30.15 5513 3000 10 17 638.43 - 638.43
19 Feb25_162034_2014_spect.TXT 162023 4.36 5.63 30.15 5522 3017 10 25 663.56 162059 24.10
20 (D) Feb25_162059_2014_spect.TXT 162048 4.40 5.63 30.15 5522 3000 10 17 639.46 - 639.46
CAS EXCEPTIONNELS à traiter (Exceptions)¶
- NoDataFileFoundException : pas de fichier (ni Spectre ni SOH) dans le dossier DATA/
- MalformedFileException : fichier (Spectre ou SOH) avec format incorrect
- UnknownCaseException : Cas inconnu ; par exemple, controlWord ni 17 (DARK) ni 25 (PAS DARK) !!!
- noSOHFileFoundForSpectraFileException : pas de fichier SOH (HK) trouvé pour un fichier Spectra (data)
INSTALLATION ET TESTS¶
Prérequis : Python 2.7
Sur Mac (Machine de développement)¶
Avec Macport, pour que la version 2.7 soit bien la version par défaut quand on tape "python" :
sudo port select --set python python27
$ which python
/opt/local/bin/python
$ python --version
Python 2.7.9
Mettre à jour MacPort :
sudo port -v selfupdate
sudo port upgrade outdated
Sur CentOS 6.5 (serveur de production)¶
(fait le 19/3/15 sur le pc-EGSE Chemcam ; cf fiche wiki du pc-EGSE Chemcam : http://planetowiki.irap.omp.eu/do/view/Computers/PcChemcam2Tour)
Par défaut, Cent0S 6.5 propose Python 2.6
(Voir l'installation de Python 2.7 faite sur le pc-EGSE Chemcam : http://planetowiki.irap.omp.eu/do/view/Computers/PcChemcam2Tour#Installation_de_Python_2_7)
cd /home/vx/C-SPEC-HK/
svn co https://usvn-chemcam.irap.omp.eu/repo/c-spec-hk/trunk c-spec-hk-svn
cd c-spec-hk-svn/
Tests Unitaires et Fonctionnels¶
Depuis la racine du projet :
py27 c_spec_hk_TEST.py
---------------------------------------------------------------------- Ran 14 tests in 5.833s OK
Tests de Performance (Benchmark)¶
$ py27 c_spec_hk.py -t ...Executing main program... Testing execution time of several methods All times are in SECONDS Testing _extractSpectraFileNamesIndexedAndOrdered(dataFileNames) method called from a function time_extractSpectraFileNamesIndexedAndOrdered() (takes about 0.0008" on a MacBookPro 11.1) : 0.000790863037109 Testing _extractSpectraFileNamesIndexedAndOrdered(dataFileNames) method called directly (takes about 0.00012" on a MacBookPro 11.1) : 0.000117941689491 Testing getLogInfosForDay(day,spectraFilesForTheDay) method called directly (takes about 0.06" on a MacBookPro 11.1) : 0.0429699897766 Testing main method createAllLogFiles(True) called directly (takes about 2.8" on a MacBookPro 11.1) : test/DATASET/UC0_NOMINAL/LOGS/20110223 test/DATASET/UC0_NOMINAL/LOGS/20130223 test/DATASET/UC0_NOMINAL/LOGS/20140123 test/DATASET/UC0_NOMINAL/LOGS/20140223 test/DATASET/UC0_NOMINAL/LOGS/20140225 test/DATASET/UC0_NOMINAL/LOGS/20140226 test/DATASET/UC0_NOMINAL/LOGS/20150223 Log files created in test/DATASET/UC0_NOMINAL/LOGS/ : total 56 drwxrwxr-x 2 vx vx 4096 19 mars 16:39 20110223 -rw-rw-r-- 1 vx vx 471 19 mars 16:39 2011_0223_logs.csv drwxrwxr-x 2 vx vx 4096 19 mars 16:39 20130223 -rw-rw-r-- 1 vx vx 471 19 mars 16:39 2013_0223_logs.csv drwxrwxr-x 2 vx vx 4096 19 mars 16:39 20140123 -rw-rw-r-- 1 vx vx 471 19 mars 16:39 2014_0123_logs.csv drwxrwxr-x 2 vx vx 4096 19 mars 16:39 20140223 -rw-rw-r-- 1 vx vx 471 19 mars 16:39 2014_0223_logs.csv drwxrwxr-x 2 vx vx 4096 19 mars 16:39 20140225 -rw-rw-r-- 1 vx vx 2849 19 mars 16:39 2014_0225_logs.csv drwxrwxr-x 2 vx vx 4096 19 mars 16:39 20140226 -rw-rw-r-- 1 vx vx 474 19 mars 16:39 2014_0226_logs.csv drwxrwxr-x 2 vx vx 4096 19 mars 16:39 20150223 -rw-rw-r-- 1 vx vx 471 19 mars 16:39 2015_0223_logs.csv 1.91459012032 Average time per day : 0.273513 *** finished TIMING ***
TESTS FAITS AVEC PYTHON 2.6
1) Test de Benchmark
$ ./c_spec_hk.py -t
...Executing main program... Testing execution time of several methods All times are in SECONDS Testing _extractSpectraFileNamesIndexedAndOrdered(dataFileNames) method called from a function time_extractSpectraFileNamesIndexedAndOrdered() (takes about 0.0008" on a MacBookPro 11.1) : 0.00105306601524 Testing _extractSpectraFileNamesIndexedAndOrdered(dataFileNames) method called directly (takes about 0.00012" on a MacBookPro 11.1) : 0.000152537894249 Testing getLogInfosForDay(day,spectraFilesForTheDay) method called directly (takes about 0.06" on a MacBookPro 11.1) : 0.0518409013748 Testing main method createAllLogFiles(True) called directly (takes about 2.8" on a MacBookPro 11.1) : test/DATASET/UC0_NOMINAL/LOGS/20110223 test/DATASET/UC0_NOMINAL/LOGS/20130223 test/DATASET/UC0_NOMINAL/LOGS/20140123 test/DATASET/UC0_NOMINAL/LOGS/20140223 test/DATASET/UC0_NOMINAL/LOGS/20140225 test/DATASET/UC0_NOMINAL/LOGS/20140226 test/DATASET/UC0_NOMINAL/LOGS/20150223 Log files created in test/DATASET/UC0_NOMINAL/LOGS/ : total 56 drwxrwxr-x 3 vx vx 4096 19 mars 14:01 20110223 -rw-rw-r-- 1 vx vx 471 19 mars 14:01 2011_0223_logs.csv drwxrwxr-x 3 vx vx 4096 19 mars 14:01 20130223 -rw-rw-r-- 1 vx vx 471 19 mars 14:01 2013_0223_logs.csv drwxrwxr-x 3 vx vx 4096 19 mars 14:01 20140123 -rw-rw-r-- 1 vx vx 471 19 mars 14:01 2014_0123_logs.csv drwxrwxr-x 3 vx vx 4096 19 mars 14:01 20140223 -rw-rw-r-- 1 vx vx 471 19 mars 14:01 2014_0223_logs.csv drwxrwxr-x 3 vx vx 4096 19 mars 14:01 20140225 -rw-rw-r-- 1 vx vx 2849 19 mars 14:01 2014_0225_logs.csv drwxrwxr-x 3 vx vx 4096 19 mars 14:01 20140226 -rw-rw-r-- 1 vx vx 474 19 mars 14:01 2014_0226_logs.csv drwxrwxr-x 3 vx vx 4096 19 mars 14:01 20150223 -rw-rw-r-- 1 vx vx 471 19 mars 14:01 2015_0223_logs.csv 2.33647012711 Average time per day : 0.333781 *** finished TIMING ***
2) Execution des TESTS
cd test/
$ python premiertest.py
... ---------------------------------------------------------------------- Ran 3 tests in 0.000s OK
$ python c_spec_hk_TEST.py
... ====================================================================== ---------------------------------------------------------------------- Ran 14 tests in 6.742s OK
EXECUTION¶
A. EXECUTING TESTS¶
(pour s'assurer que tout va bien)
1) en mode ligne de commande¶
cd test/
./chemcamSpectraOrganize_TEST.py
Voici le genre d'affichage attendu si tout va bien :
Log files created in SPECTRA/LOGS/ :
total 56
-rwxrwxrwx 1 epallier staff 533 10 mar 12:04 2011_0223_logs.txt
-rwxrwxrwx 1 epallier staff 533 10 mar 12:04 2013_0223_logs.txt
-rwxrwxrwx 1 epallier staff 533 10 mar 12:04 2014_0123_logs.txt
-rwxrwxrwx 1 epallier staff 533 10 mar 12:04 2014_0223_logs.txt
-rwxrwxrwx 1 epallier staff 3630 10 mar 12:04 2014_0225_logs.txt
-rwxrwxrwx 1 epallier staff 533 10 mar 12:04 2014_0226_logs.txt
-rwxrwxrwx 1 epallier staff 533 10 mar 12:04 2015_0223_logs.txt
createAllLogFiles(True) execution time : 3.223165 seconds
TestFunctionalTests() finished
.
TestFunctionalTests() finished
.
TestParseArgs() finished
.
TestUnitTests() finished
.
TestUnitTests() finished
.
TestUnitTests() finished
.
TestUnitTests() finished
.
--------------------------
Ran 7 tests in 5.869s
OK
2) Depuis Eclipse¶
Ouvrir la console adaptée : Window / Show View / PyUnit
clic-droit sur test/chemcamSpectraOrganize_TEST.py
Run As / Python unit-test
B. EXECUTING MAIN SCRIPT¶
1) In Command line mode¶
a) Pour voir l'aide :
./c-hk.py -h
b) Speed testing (benchmark)
./c-hk.py -t
You should get this kind of display results (run on a Macbook Pro 11.1, end 2013, 2.8Ghz Intel Dual Core i7, RAM 16Go) :
$ ./c-hk.py -t
Testing execution time of several methods
Testing _extractSpectraFileNamesIndexedAndOrdered(dataFileNames) method called from a function time_extractSpectraFileNamesIndexedAndOrdered() (takes about 0.0008" on a MacBookPro 11.1) :
0.000821402072906
Testing _extractSpectraFileNamesIndexedAndOrdered(dataFileNames) method called directly (takes about 0.00012" on a MacBookPro 11.1) :
0.000123869013786
Testing getLogInfosForDay(day,spectraFilesForTheDay) method called directly (takes about 0.06" on a MacBookPro 11.1) :
0.0619421958923
Testing main method createAllLogFiles(True) called directly (takes about 2.8" on a MacBookPro 11.1) :
Log files created in test/SPECTRA/LOGS/ :
total 56
-rwxrwxrwx 1 epallier staff 533 10 mar 14:51 2011_0223_logs.txt
-rwxrwxrwx 1 epallier staff 533 10 mar 14:51 2013_0223_logs.txt
-rwxrwxrwx 1 epallier staff 533 10 mar 14:51 2014_0123_logs.txt
-rwxrwxrwx 1 epallier staff 533 10 mar 14:51 2014_0223_logs.txt
-rwxrwxrwx 1 epallier staff 3630 10 mar 14:51 2014_0225_logs.txt
-rwxrwxrwx 1 epallier staff 533 10 mar 14:51 2014_0226_logs.txt
-rwxrwxrwx 1 epallier staff 533 10 mar 14:51 2015_0223_logs.txt
2.76413011551
finished TIMING
c) Pour faire un test avec les données d'échantillon fournies :
./c-hk.py -p 'test/SPECTRA' -i 'DATA' -o 'LOGS'
Exemple d'affichage attendu :
path is "test/SPECTRA"
inputDataDir is "DATA"
ouputLogDir is "LOGS"
Log files created in test/SPECTRA/LOGS/ :
total 56
-rwxrwxrwx 1 epallier staff 533 10 mar 12:14 2011_0223_logs.txt
-rwxrwxrwx 1 epallier staff 533 10 mar 12:14 2013_0223_logs.txt
-rwxrwxrwx 1 epallier staff 533 10 mar 12:14 2014_0123_logs.txt
-rwxrwxrwx 1 epallier staff 533 10 mar 12:14 2014_0223_logs.txt
-rwxrwxrwx 1 epallier staff 3630 10 mar 12:14 2014_0225_logs.txt
-rwxrwxrwx 1 epallier staff 533 10 mar 12:14 2014_0226_logs.txt
-rwxrwxrwx 1 epallier staff 533 10 mar 12:14 2015_0223_logs.txt
2) Depuis Eclipse¶
clic-droit sur cc_spectra_HK_extract.py
Run As / Python Run
Type d'affichage attendu :
path is "test/SPECTRA"
inputDataDir is "DATA"
ouputLogDir is "LOGS"
Log files created in test/SPECTRA/LOGS/ :
total 56
-rwxrwxrwx 1 epallier staff 533 Mar 10 12:17 2011_0223_logs.txt
-rwxrwxrwx 1 epallier staff 533 Mar 10 12:17 2013_0223_logs.txt
-rwxrwxrwx 1 epallier staff 533 Mar 10 12:17 2014_0123_logs.txt
-rwxrwxrwx 1 epallier staff 533 Mar 10 12:17 2014_0223_logs.txt
-rwxrwxrwx 1 epallier staff 3630 Mar 10 12:17 2014_0225_logs.txt
-rwxrwxrwx 1 epallier staff 533 Mar 10 12:17 2014_0226_logs.txt
-rwxrwxrwx 1 epallier staff 533 Mar 10 12:17 2015_0223_logs.txt
DAILY WORKFLOW¶
1) Voici la structure de fichiers réalisée sur le pc-EGSE :¶
Les nouveaux fichiers de données produits lors des tirs de Chemcam sont automatiquement placés dans /home/vx/data/ (au fur et à mesure des tirs)
Ils sont ensuite déplacés dans /home/vx/EQM_DATA/AAAAMMJJ/DATA/ lorsqu'ils ont été traités
Les fichiers de LOG (relation spectre => HK) créés sont placés directment dans /home/vx/EQM_DATA/AAAAMMJJ/
- /home/vx/data/ : données d'origine restant à traiter (spectres et HK), provenant directement de la manip - /home/vx/EQM_DATA/ : données traitées (spectres, HK, et fichiers logs produits) - AAAAMMJJ/ : un dossier par jour - les fichiers logs produits (CSV) - DATA/ : les données d'origine (spectres et HK)
2) WORKFLOW¶
Ce workflow devrait normalement fonctionner dans tous les cas de figure (démarrage n'importe quand, en début de journée ou en cours de journée, ou même reprise après un crash brutal...)
Démarrage automatique du workflow à partir du Démarrage du pc-EGSE
1) Faire tourner le traitement sur TOUS les fichiers présents dans le dossier /home/vx/data/ (SAUF les fichiers du jour J, s'il y en a...)
Les fichiers LOGS produits sont placés automatiquement dans le dossier correspondant à leur jour /home/vx/EQM_DATA/AAAAMMJJ/
(AAAA année en 4 chiffres, MM mois en deux chiffres et JJ jour du mois en deux chiffres)
2) Déplacer TOUS les fichiers de /home/vx/data/ dans leur dossier correspondant /home/vx/EQM_DATA/AAAAMMJJ/DATA/ (SAUF les fichiers du jour J, s'il y en a...)
3) (Every 5 seconds) : pour les fichiers du jour J
S'il existe au moins un fichier dans /home/vx/data/, faire tourner le traitement sur TOUS les fichiers présents
LE FICHIER LOG produit (un seul pour le jour J) est placé automatiquement dans le dossier correspondant à son jour (J) /home/vx/EQM_DATA/AAAAMMJJ/
Attention : on ne déplace pas les fichiers dans leur dossier correspondant /home/vx/EQM_DATA/AAAAMMJJ/DATA/ ; cela sera fait au prochain démarrage du workflow) ; cela permet d'avoir un fichier LOG qui se complète au fur et à mesure de la journée
Il faudrait quand meme les COPIER (cp) (mais pas les DEPLACER (mv))
OPTIMISATION : Exécution SSI le nb de fichiers du repertoire DATA/ a changé (tenir à jour un fichier contenant le nb de files)
Fin du workflow à l'extinction du pc-EGSE