Découvrir le langage Julia au travers d'applications associées aux détecteurs Infra-Rouge de CAGIRE".
Présentation le 6 Juin 2017 à 11H00 salle Lyot Hervé Valentin
Présentation JULIA (Applications CAGIRE) Hervé Valentin06/06/2017
Extraits et exemples d’utilisation du langage « Julia » pour la réalisation d’outils nécessaires à l’optimisation des réglages et à la caractérisation de détecteurs CMOS utilisés dans la caméra Infra-Rouge CAGIRE
2
Présentation JULIA (Applications CAGIRE) Hervé Valentin
I. Cheminement personnel vers Julia1. Bancs de mesures (C++, Java)2. Analyse (Excel, R)3. Pourquoi Julia ?
II. Informations générales1. Objectif2. Vitesse3. Concision4. La compilation à la volée : LLVM JIT5. Bibliothèques préexistantes6. Le cœur du langage7. Installation8. La console Julia : REPL9. Atom (EDI)10. Eclipse11. Jupyter
III. Le langage1. Boîte à outils2. Programmation orientée objet
1. Les concepts (Héritage, …)2. Les classes (type)3. Les attributs4. Les méthodes5. Les constructeurs6. Instanciation
3. Modules4. Paquetages (Packages)5. Bibliothèques graphiques6. Interface avec le C (C++) ou le Fortran7. Parallélisme
IV. Acquisition des images FITS avec le détecteur CMOS1. Visite guidée du programme2. Classe ImageH2RG
1. Quelques attributs2. Quelques méthodes associées
3. Classe AcquisitionRampeSimple1. Quelques attributs2. Quelques méthodes associées
V. ConclusionVI. Livres et liens utiles
Plan
06/06/2017 3
Présentation JULIA (Applications CAGIRE) Hervé Valentin
• Bancs de mesures (C++, Java)• Pilotage de matériel de bancs d’optiques
• Platines motorisées• Obturateurs• Monochromateurs• Roues à filtres
• Acquisitions de données• Cellules photoélectriques• Acquisition d’images FITS (Caméra)• Température
• Mise en forme des données• Fichiers CSV
• Analyse (Excel, R)• Analyse de données• Propagation d’incertitudes (R)
• Pourquoi Julia ?• OO• Vitesse• V0.3.1 → V0.5.2
Cheminement personnel vers Julia
06/06/2017 4
Présentation JULIA (Applications CAGIRE) Hervé Valentin
• Objectif :“The following quote is from the development team of Julia—Jeff Bezanson, StefanKarpinski, Viral Shah, and Alan Edelman:We are greedy: we want more.We want a language that's open source, with a liberal license. We want the speed of C with the dynamism of Ruby. We want a language that's homoiconic, with true macros like Lisp, but with obvious, familiar mathematical notation like Matlab. We want something as usable for general programming as Python, as easy for statistics as R, as natural for string processing as Perl, as powerful for linear algebra as Matlab, as good at gluing programs together as the shell. Something that is dirt simple to learn, yet keeps the most serious hackers happy. We want it interactive and we want it compiled.(Did we mention it should be as fast as C?)”
Informations générales
06/06/2017 5
Présentation JULIA (Applications CAGIRE) Hervé Valentin
• Vitesse (https://julialang.org/benchmarks/) :
Informations générales
06/06/2017 6
Présentation JULIA (Applications CAGIRE) Hervé Valentin
• Concision (https://zestedesavoir.com/articles/78/a-la-decouverte-de-julia/#4-et-cest-performant) :
Informations générales
06/06/2017 7
Présentation JULIA (Applications CAGIRE) Hervé Valentin
• La compilation à la volée : LLVM JIT• À chaque fois que l'utilisateur entre du code dans l'interpréteur, ce dernier est compilé et
exécuté sous forme de code machine.
• Bibliothèques préexistantes• Julia utilise des bibliothèques préexistantes pour certaines fonctionnalités :
• « libuv » (la bibliothèque derrière Node.js) pour la gestion des entrées et sorties de manière asynchrone ;
• « BLAS » et « LAPACK » pour l'algèbre linéaire ;• « FFTW » pour les transformées de Fourier ;• « libmojibake » pour la gestion de l'Unicode ;• « openlibm » (une implémentation générique de la bibliothèque mathématique C) ;• « openspecfun » pour les fonctions spéciales ;• « libosxunwind » pour les stacktraces sous OS X.
• Le cœur du langage :• Il est écrit en C, et l’analyseur syntaxique (parser) en LISP.• La quasi-intégralité de la bibliothèque standard est écrite directement en Julia.
• Installation :• A partir du site : https://julialang.org/• Pour les systèmes : Windows, Linux, Mac
Informations générales
06/06/2017 8
Présentation JULIA (Applications CAGIRE) Hervé Valentin
• La console Julia : REPL• Atom (Juno) (http://junolab.org/)
Informations générales
06/06/2017 9
Présentation JULIA (Applications CAGIRE) Hervé Valentin
• Eclipse (pas encore)• Jupyter (Notebook) https://jupyter.org/
Informations générales
06/06/2017 10
Présentation JULIA (Applications CAGIRE) Hervé Valentin
• Int8, UInt8, Int16, UInt16, Int32, UInt32, Int64, UInt64 (par défaut dépend du système d’exploitation) • Float16, Float32, Float64• BigInt, BigFloat• Any, Number, Real …• Dates• Chaînes de caractères (String)• Complexes• Tuple• Dict• Expressions régulières• Operateurs (sont des fonctions)• Variables unicodes
Le langage - Boîte à outils
06/06/2017
ou
11
Présentation JULIA (Applications CAGIRE) Hervé Valentin
• Boucles• Fonctions• Fonctions mathématiques (airy, bessel, fft …)• Tâches (Tasks : « produce », « consume » … pour
l’état d’avancement d’une tâche)• TCP Sockets• Parallélisme• Exceptions (try / catch …)• Méta-programmation (Metaprogramming)• Analyse des performances « @time »• Fonctions de tests• Débuggeur « @debug », « @step »…
Le langage - Boîte à outils
06/06/2017 12
Présentation JULIA (Applications CAGIRE) Hervé Valentin
• Les concepts (Héritage, …) • Les classes (types composites)• Les attributs (publics)• Les constructeurs• Instanciation• Les méthodes
Le langage - Programmation orientée objet
06/06/2017 13
Présentation JULIA (Applications CAGIRE) Hervé Valentin
• Un module sert à créer une bibliothèque (ex. « BibliothequeFITS.jl »)• Il commence par le mot clef « module » et se termine par « end »• Il déclare si nécessaire l’utilisation des paquetages ou d’autres bibliothèques (modules) par le mot
clef « using »• Il peut contenir l’appel d’un fichier par le mot clef « include » ex. include("fichier1.jl")• Il peut contenir la définition de constantes• Il peut contenir la définition des classes• Il peut contenir la définition des méthodes• Le mot chef « export » permet de rendre public les constantes, les classes et les méthodes
Le langage - Modules
06/06/2017 14
Présentation JULIA (Applications CAGIRE) Hervé Valentin
• Pkg.add(‘’Measurements’’)• Pkg.update()• Pkg.status()
• using Measurements
• Il existe des packages pour appeler du code Python, Java, R, et donc les bibliothèques disponibles dans tous ces langages !!!
• Utilisation personnelle de : DataFrames, Gadfly, Cairo (conflits), Pyplot (conflits), Optim, Jump, Cubature, FITSIO (difficultés d’installation), Distributions, ...
• Liste des paquetages et état de leur développement : http://pkg.julialang.org/
• Groupes ou communautés :• Optimisation (http://www.juliaopt.org/)• Astronomie (https://juliaastro.github.io/)• …
Le langage - Paquetages (Packages)
06/06/2017 15
Présentation JULIA (Applications CAGIRE) Hervé Valentin
• Gadfly (Grammar of graphics)• Pyplot (Python matplotlib)• Winston (Matlab)• Gaston (Gnuplot)• ASCIIPlots• Plotly (Graphiques en ligne)• Plots (Utilisation complète des
bibliothèques citées ci-dessus)
Le langage - Bibliothèques graphiques
06/06/2017 16
Présentation JULIA (Applications CAGIRE) Hervé Valentin
• Fonction en C compilée dans une bibliothèque bar.dll (ou libbar.so)
• Appel dans Julia :
• Du Julia peut être appelé dans du C, C++, Python, C# …
Le langage - Interface avec le C (C++) ou le Fortran
06/06/2017 17
Présentation JULIA (Applications CAGIRE) Hervé Valentin
• Julia est conçu pour intégrer le parallélisme et le calcul distribué (la mémoire partagée est en cours de développement).
• « julia -p n » #Lance le REPL sur le nième processeurs• Des fichiers séparés peuvent être chargés sur plusieurs processeurs et le
programme principal permet de les contrôler tous :« julia -p 2 -L file1.jl -L file2.jl main.jl »
• On peut ajouter à la connaissance de Julia un processeur :• « addprocs(3) » => équivalent à : julia -p 4• « nprocs() » => 4 Confirmation de la présence de 4 processeurs
• Exécution d’un calcul sur un processeur• r = remotecall(2, randn, 5)• fetch(r) ;# => [0.094615,0.339905,0.422061,0.790972,0.552309 ]
• « DistributedArrays » (Paquetage à charger depuis V0.4.0)• …
Le langage - Parallélisme
06/06/2017 18
Présentation JULIA (Applications CAGIRE) Hervé Valentin
• Contexte et ObjectifRéglage du détecteur• Dynamique• Bruit de lecture• Diaphonie (inter-pixels, inter-voies)• …
Caractérisation• Bruit de lecture (Bruit CDS)• Non-linéarité (pour 2048 x 2048 pixels)• Facteur de conversion (e- / pcd)• Cosmétique• Diaphonie (inter-pixels, inter-voies)• RQE• …
Utilitaires• 32 méthodes de traitement d’images avec les
pixels de références• Images à double échantillonnage corrélé (CDS)• …
Acquisition des images FITS avec le détecteur CMOS
06/06/2017 19
Présentation JULIA (Applications CAGIRE) Hervé Valentin
• Classe ImageH2RGQuelques attributs• image::Array{Float32,2}• pxlRefGauche::Array{Float32,2}• pxlRefDroit::Array{Float32,2}• pxlRefHaut::Array{Float32,2}• pxlRefBas::Array{Float32,2}
Le constructeur• Function ImageH2RG…
Quelques méthodes associées• corrigeImageFitsDesPixelsDeReference2b(…)• getPxlDeLaVoie(…)• getEcartTypeVoie(…)• Visualise(…)• …
Acquisition des images FITS avec le détecteur CMOS
06/06/2017 20
Présentation JULIA (Applications CAGIRE) Hervé Valentin
• Classe ImageH2RGQuelques attributs• image::Array{Float32,2}• pxlRefGauche::Array{Float32,2}• pxlRefDroit::Array{Float32,2}• pxlRefHaut::Array{Float32,2}• pxlRefBas::Array{Float32,2}
Le constructeur• Function ImageH2RG…
Quelques méthodes associées• corrigeImageFitsDesPixelsDeReference2b(…)• getPxlDeLaVoie(…)• getEcartTypeVoie(…)• Visualise(…)• …
Acquisition des images FITS avec le détecteur CMOS
06/06/2017 21
Présentation JULIA (Applications CAGIRE) Hervé Valentin
• Classe ImageH2RGInstanciation
Chargement d’un attribut d’un autre type composite(ici, le résultat d’un calcul)
Acquisition des images FITS avec le détecteur CMOS
06/06/2017 22
Présentation JULIA (Applications CAGIRE) Hervé Valentin
• Classe AcquisitionRampeSimpleQuelques attributs• nomFichierCAG::String• dfAcquisitionsCAG::DataFrame• nbDeFichiersFits::Int64• tableauDesImagesH2RG::Vector{ImageH2RG}• listeDesTempsDAcquisitionJulien::Vector{Float64}• listeDesTemperaturesDetecteur::Vector{Float64}• …
Le constructeur• Function AcquisitionRampeSimple…
Quelques méthodes associées• recupDFAcquisitionsSimpleCAG(…)• chargeLesImagesFITSEtLesInfosDeLAcquisition(…)• analyseDesImagesFITSSaufPxlDeRefDeLAcquisition(…)• corrigeImagesFitsDesPixelsDeReference(…)• getTableauDesValeursDUnPixel(…)• …
Acquisition des images FITS avec le détecteur CMOS
06/06/2017 23
Présentation JULIA (Applications CAGIRE) Hervé Valentin
• Classe AcquisitionRampeSimpleQuelques attributs• nomFichierCAG::String• dfAcquisitionsCAG::DataFrame• nbDeFichiersFits::Int64• tableauDesImagesH2RG::Vector{ImageH2RG}• listeDesTempsDAcquisitionJulien::Vector{Float64}• listeDesTemperaturesDetecteur::Vector{Float64}• …
Acquisition des images FITS avec le détecteur CMOS
06/06/2017 24
Présentation JULIA (Applications CAGIRE) Hervé Valentin
• Classe AcquisitionRampeSimpleLe constructeur• Function AcquisitionRampeSimple…(ici, le début du constructeur)
Acquisition des images FITS avec le détecteur CMOS
06/06/2017 25
Présentation JULIA (Applications CAGIRE) Hervé Valentin
• Classe AcquisitionRampeSimpleQuelques méthodes associées• recupDFAcquisitionsSimpleCAG(…)
• chargeLesImagesFITSEtLesInfosDeLAcquisition(…)
• analyseDesImagesFITSSaufPxlDeRefDeLAcquisition(…)• corrigeImagesFitsDesPixelsDeReference(…)• getTableauDesValeursDUnPixel(…)• …
Acquisition des images FITS avec le détecteur CMOS
06/06/2017 26
Présentation JULIA (Applications CAGIRE) Hervé Valentin
• Classe AcquisitionRampeSimpleQuelques méthodes associées• traceEtEnregistreFichierPlotFenetreTotalePDF(…)• …
Acquisition des images FITS avec le détecteur CMOS
06/06/2017 27
• Visite guidée du programme
Présentation JULIA (Applications CAGIRE) Hervé Valentin
Acquisition des images FITS avec le détecteur CMOS
06/06/2017 28
Charger une « AcquisitionRampeSimple » à partir du fichier « CAG »
Analyse statistique de chacune des images FITS (dont moyenne et médiane)
Ajuste un polynôme à la moyenne de chaque image de l’acquisition (idem pour la médiane)
Ajuste un polynôme à chaque pixel (ici, 100 pxl x 100 pxl)
Génère une « DataFrame » contenant les informations des polynômes de chaque pixel
Enregistre la « DataFrame » dans un fichier « CSV »
Trace l’histogramme des coefficients d’ordre 2 des polynômes
Enregistre le tracé dans un fichier « PDF »
Présentation JULIA (Applications CAGIRE) Hervé Valentin
Points faibles :Communauté réduiteInstabilité de l’installation des paquetages1 seul IDEEcriture des paquetages ni complète ni optimale pour la vitessePour l’instant pas de création d’exécutable
Points forts :Concision et performancePromesse à plus long termeSupporte le Python, le Fortran, le C, bientôt le C++
Pour étayer mon avis :Parallélisme à testerDébogueur à utiliserMieux tester les paquetagesMacros LISP (Macros qui créent du code Julia)
Conclusion
06/06/2017 29
Présentation JULIA (Applications CAGIRE) Hervé Valentin
Livres :Julia for Data Science : Anshul JoshiJulia Cookbook : Jalem Raj RohitGetting Started with Julia :Ivo BalbaertMastering Julia : Malcolm Sherringtonhttps://www.packtpub.com
• Site officiel du langage : https://julialang.org/• Atom (Juno) : http://junolab.org/• JuliaBloggers : http://www.juliabloggers.com/• Zeste de savoir : https://zestedesavoir.com/articles/78/a-la-decouverte-de-julia/• Liste de paquetages : http://pkg.julialang.org/• …
Livres et liens utiles
06/06/2017 30
Photos : © S. Chastanet O.M.P
Merci pour votre attention
Présentation JULIA (Applications CAGIRE) Hervé Valentin06/06/2017 31
Présentation JULIA (Applications CAGIRE) Hervé Valentin06/06/2017 32