32
Découvrir le langage Julia au travers d'applicaons associées aux détecteurs Infra-Rouge de CAGIRE". Présentaon le 6 Juin 2017 à 11H00 salle Lyot Hervé Valenn

Découvrir le langage Julia au travers d'applications ... · Découvrir le langage Julia au travers d'applications associées aux détecteurs Infra-Rouge de CAGIRE". Présentation

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Découvrir le langage Julia au travers d'applications ... · Découvrir le langage Julia au travers d'applications associées aux détecteurs Infra-Rouge de CAGIRE". Présentation

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

Page 2: Découvrir le langage Julia au travers d'applications ... · Découvrir le langage Julia au travers d'applications associées aux détecteurs Infra-Rouge de CAGIRE". Présentation

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

Page 3: Découvrir le langage Julia au travers d'applications ... · Découvrir le langage Julia au travers d'applications associées aux détecteurs Infra-Rouge de CAGIRE". Présentation

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

Page 4: Découvrir le langage Julia au travers d'applications ... · Découvrir le langage Julia au travers d'applications associées aux détecteurs Infra-Rouge de CAGIRE". Présentation

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

Page 5: Découvrir le langage Julia au travers d'applications ... · Découvrir le langage Julia au travers d'applications associées aux détecteurs Infra-Rouge de CAGIRE". Présentation

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

Page 6: Découvrir le langage Julia au travers d'applications ... · Découvrir le langage Julia au travers d'applications associées aux détecteurs Infra-Rouge de CAGIRE". Présentation

Présentation JULIA (Applications CAGIRE) Hervé Valentin

• Vitesse (https://julialang.org/benchmarks/) :

Informations générales

06/06/2017 6

Page 7: Découvrir le langage Julia au travers d'applications ... · Découvrir le langage Julia au travers d'applications associées aux détecteurs Infra-Rouge de CAGIRE". Présentation

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

Page 8: Découvrir le langage Julia au travers d'applications ... · Découvrir le langage Julia au travers d'applications associées aux détecteurs Infra-Rouge de CAGIRE". Présentation

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

Page 9: Découvrir le langage Julia au travers d'applications ... · Découvrir le langage Julia au travers d'applications associées aux détecteurs Infra-Rouge de CAGIRE". Présentation

Présentation JULIA (Applications CAGIRE) Hervé Valentin

• La console Julia : REPL• Atom (Juno) (http://junolab.org/)

Informations générales

06/06/2017 9

Page 10: Découvrir le langage Julia au travers d'applications ... · Découvrir le langage Julia au travers d'applications associées aux détecteurs Infra-Rouge de CAGIRE". Présentation

Présentation JULIA (Applications CAGIRE) Hervé Valentin

• Eclipse (pas encore)• Jupyter (Notebook) https://jupyter.org/

Informations générales

06/06/2017 10

Page 11: Découvrir le langage Julia au travers d'applications ... · Découvrir le langage Julia au travers d'applications associées aux détecteurs Infra-Rouge de CAGIRE". Présentation

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

Page 12: Découvrir le langage Julia au travers d'applications ... · Découvrir le langage Julia au travers d'applications associées aux détecteurs Infra-Rouge de CAGIRE". Présentation

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

Page 13: Découvrir le langage Julia au travers d'applications ... · Découvrir le langage Julia au travers d'applications associées aux détecteurs Infra-Rouge de CAGIRE". Présentation

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

Page 14: Découvrir le langage Julia au travers d'applications ... · Découvrir le langage Julia au travers d'applications associées aux détecteurs Infra-Rouge de CAGIRE". Présentation

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

Page 15: Découvrir le langage Julia au travers d'applications ... · Découvrir le langage Julia au travers d'applications associées aux détecteurs Infra-Rouge de CAGIRE". Présentation

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

Page 16: Découvrir le langage Julia au travers d'applications ... · Découvrir le langage Julia au travers d'applications associées aux détecteurs Infra-Rouge de CAGIRE". Présentation

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

Page 17: Découvrir le langage Julia au travers d'applications ... · Découvrir le langage Julia au travers d'applications associées aux détecteurs Infra-Rouge de CAGIRE". Présentation

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

Page 18: Découvrir le langage Julia au travers d'applications ... · Découvrir le langage Julia au travers d'applications associées aux détecteurs Infra-Rouge de CAGIRE". Présentation

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

Page 19: Découvrir le langage Julia au travers d'applications ... · Découvrir le langage Julia au travers d'applications associées aux détecteurs Infra-Rouge de CAGIRE". Présentation

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

Page 20: Découvrir le langage Julia au travers d'applications ... · Découvrir le langage Julia au travers d'applications associées aux détecteurs Infra-Rouge de CAGIRE". Présentation

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

Page 21: Découvrir le langage Julia au travers d'applications ... · Découvrir le langage Julia au travers d'applications associées aux détecteurs Infra-Rouge de CAGIRE". Présentation

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

Page 22: Découvrir le langage Julia au travers d'applications ... · Découvrir le langage Julia au travers d'applications associées aux détecteurs Infra-Rouge de CAGIRE". Présentation

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

Page 23: Découvrir le langage Julia au travers d'applications ... · Découvrir le langage Julia au travers d'applications associées aux détecteurs Infra-Rouge de CAGIRE". Présentation

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

Page 24: Découvrir le langage Julia au travers d'applications ... · Découvrir le langage Julia au travers d'applications associées aux détecteurs Infra-Rouge de CAGIRE". Présentation

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

Page 25: Découvrir le langage Julia au travers d'applications ... · Découvrir le langage Julia au travers d'applications associées aux détecteurs Infra-Rouge de CAGIRE". Présentation

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

Page 26: Découvrir le langage Julia au travers d'applications ... · Découvrir le langage Julia au travers d'applications associées aux détecteurs Infra-Rouge de CAGIRE". Présentation

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

Page 27: Découvrir le langage Julia au travers d'applications ... · Découvrir le langage Julia au travers d'applications associées aux détecteurs Infra-Rouge de CAGIRE". Présentation

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

Page 28: Découvrir le langage Julia au travers d'applications ... · Découvrir le langage Julia au travers d'applications associées aux détecteurs Infra-Rouge de CAGIRE". Présentation

• 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 »

Page 29: Découvrir le langage Julia au travers d'applications ... · Découvrir le langage Julia au travers d'applications associées aux détecteurs Infra-Rouge de CAGIRE". Présentation

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

Page 30: Découvrir le langage Julia au travers d'applications ... · Découvrir le langage Julia au travers d'applications associées aux détecteurs Infra-Rouge de CAGIRE". Présentation

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

Page 31: Découvrir le langage Julia au travers d'applications ... · Découvrir le langage Julia au travers d'applications associées aux détecteurs Infra-Rouge de CAGIRE". Présentation

Photos : © S. Chastanet O.M.P

Merci pour votre attention

Présentation JULIA (Applications CAGIRE) Hervé Valentin06/06/2017 31

Page 32: Découvrir le langage Julia au travers d'applications ... · Découvrir le langage Julia au travers d'applications associées aux détecteurs Infra-Rouge de CAGIRE". Présentation

Présentation JULIA (Applications CAGIRE) Hervé Valentin06/06/2017 32