2 - PRISM et les requêtes Python sur l'observatoire Virtuel

Le fil de ce forum est dédié aux fonctions d'observatoire virtuel comme Colibri, ou SAMP.
On trouvera ici des tutos.
Répondre
Wivona team
Messages : 9
Enregistré le : 15 août 2024, 17:37

2 - PRISM et les requêtes Python sur l'observatoire Virtuel

Message par Wivona team »

2.1 - L'Observatoire Virtuel
  • WikiPedia : https://fr.wikipedia.org/wiki/Observatoire_virtuel
    Un observatoire virtuel (OV) est une collection d’archives de données interactives et d’outils logiciels qui utilisent l’Internet pour bâtir un environnement de recherche scientifique dans lequel les programmes de recherche en astronomie pourront être conduits.
[ A compléter]

2.2 - Mise en Oeuvre de Python avec PRISM

PRISM dispose d'un répertoire de requêtes Python préenregistrées. Il n'est pas utile de savoir coder en Python pour les utiliser.
Python est un logiciel gratuit, facilement accessible, qui a rapidement supplante (Fortran), JAVA dans le milieu scientifique.

Python n'est pas installé avec PRISM. Il vous appartient de procéder vous-même à cette installation ainsi qu' à celle des modules complémentaires (Bibliothèques) pour l'astronomie ( NumPy, AstroPy, PyVo, Astroquery, ...).

Voici quelques exigences Fortes imposées par l'interface Python-PRISM:
  • - Seules les versions 3 de Python sont admises.
  • - Vous devez installer une version 32 bits de Python si vous utilisez la version 32 bits de PRISM.
    - Vous devez installer une version 64 bits de Python si vous utilisez la version 64 bits de PRISM.
  • - L'installation de la dernière version de Python pourrait être conflictuelle avec des bibliothèques non encore mises à jour.
Votre Anti-Virus peut se montrer tracassé par certains modules non signés... Il vérifiera!. SI votre source est officielle, ca devrait bien se terminer.
  • Installez Python de préférence pour tous les utilisateurs (il est plus facile à retrouver ensuite).
    Installez Python en respectant la procédure du site ( https://www.python.org/ ).
  • Installez les bibliothèques via une invite de commande dos : " pip install numpy astropy pyvo astroquery"
  • Localisez le fichier dll correspondant à votre installation (par exemple V3.12.5) et notez son chemin complet
    (ex: C:\Program Files\_Autres\Python\python312.dll)
  • Vous reporterez dans PRISM le chemin de la librairie Python et le numéro de version (ex: 3.12) sans la sous-version
    << Configuration/configuration générale de PRISM/Observatoire virtuel/Python/choix librairie Python >>
ConfigGenerale.jpg
  • Validez votre installation en allant dans le menu << outils/scripts Vo(Python) >> et tapez " Print(2+2) " dans la boite de dialogue du bas.
    Puis exécutez votre premier script en appuyant sur le bouton "executer script".
    FenetrePython.jpg
    Si le résultat est satisfaisant, découvrez comment vous pouvez reparamétrer ce script.
2.3 - Formation aux requêtes Python sur l' OV
  • PRISM dispose d'un répertoire de requêtes Python préenregistrées. Il n'est pas utile de savoir coder en Python pour les utiliser.
  • La communauté des utilisateurs PRISM peut vous aider à enrichir cette bibliothèque en proposant des scripts en reponse à ce fil.
    Comme Python est un (Puissant et rapide) langage interprété, vous pouvez lire la requête et voir si vous pouvez y changer des paramètres...
    C'est un début.
Autres liens pour pratiquer avec les modules complémentaires:
C_Help_Learn_Astropy-1__='https://learn.astropy.org/';
C_Help_Learn_Astropy-2__='https://learn.astropy.org/tutorials/';
C_Help_Learn_PyVo______='https://pyvo.readthedocs.io/en/latest/';
C_Help_Learn_AstroQuery_='https://astroquery.readthedocs.io/en/latest/';


[ A compléter]


2.4 - Utilisation des données locales dans les requêtes

PRISM transmet au moteur Python quelques données propres à l'installation locale. Ceci doit vous permettre d'écrire des scripts réutilisables par d'autres.
  • PrismPath.value : Fournit au script la racine du chemin d'accès vers les répertoires Prism utilisateur
  • Cdc_Ra.value : Fournit au script l'ascension droite du centre de la carte du ciel affichée dans PRISM en degrés décimaux
  • Cdc_Dec.value : Fournit au script la déclinaison du centre de la carte du ciel affichée dans PRISM en degrés décimaux
  • Signalez vos besoins sur ce fil...
[ A compléter]

2.5 - Utilisation des résultats des requêtes
  • Des exemples s(er)ont fournis pour montrer comment Python peut restituer à PRISM des résultats sous forme de:
    • Tables (Fichiers CSV, Fichier HTML, Tables FITS, VOTABLE)
    • Images FITS
    • Spectres
    • [ A compléter]
2.6 - A Noter
  • - Vous pouvez installer une version 64 bits de Python à coté d'une version 32 bits de Python. :geek:
    Mais PRISM32 et PRISM64 ne connaitront que le même chemin de DLL Python.
  • - Les versions de Python installées avec Conda ou MiniConda ne sont pas interdites, seulement non documentées :ugeek: .
    - Votre expertise et le résultat de vos tests nous intéressent sous forme de réponse à ce fil.
Rédigé par Jean-Paul GODARD (PI)
Wivona team
Messages : 9
Enregistré le : 15 août 2024, 17:37

2.7.1 Exemple de Requête Python Pour le catalogue des Nébuleuses Planétaires

Message par Wivona team »

# Requête Python pour le catalogue des Nébuleuses Planétaires confirmées
# Renaud SAVALLE (Obspm)
#
#Modules utilisés
from astroquery.vizier import Vizier
from astropy.io.votable import from_table

# pas de limites sur le nombre lignes
Vizier.ROW_LIMIT = -1

# V/84:Strasbourg-ESO Catalogue of Galactic Planetary Nebulae (Acker+, 1992)
#
catalogs = Vizier.get_catalogs('V/84') #Import des catalogues disponibles par astroquery.vizier
print(catalogs) # catalogues

# Dans le Print précédent: '13:V/84/pospn' with 9 column(s) and 347 row(s)
pospn=catalogs[13] #Selection du catalogue des NP(pn)

print(pospn.colnames) # Liste des colonnes disponibles

#Choix de colonnes
pospn.keep_columns(['Name','RAJ2000', 'DEJ2000']) # garde seulement ces 3 cols

# sauvegarde en VOT
file=str(PrismPath.value)+'pospn.vot' #Chemin complet vers la tête des répertoires utilisateurs dans PRISM
vot_pospn = from_table(pospn) #Extraction par astropy.io.votable
vot_pospn.to_xml(file) #Fichier écrit en Xml (Format Votable)

# Vous pouvez sauvegarder dans un autre format (Html, csv, ascii) en modifiant les 2 dernières lignes ou utiliser TopCat pour le faire.
#
#Edité par Jean-Paul GODARD (PI)
Modifié en dernier par Wivona team le 01 oct. 2024, 13:59, modifié 3 fois.
Wivona team
Messages : 9
Enregistré le : 15 août 2024, 17:37

2.7.2 Exemple de Requête Python pour obtenir une image

Message par Wivona team »

# Requête Python pour obtenir une image appartenant à une collection publiée via le protocole SIA
# Renaud SAVALLE (Obspm)
#
#Modules utilisés
import pycurl
import pyvo
from io import BytesIO

#Requête SIA pour obtenir la collection des images du serveur aux coordonnées indiquées
SIA_ACCESS_URL = "http://hla.stsci.edu/cgi-bin/hlaSIAP.cg ... tary=false&"
coords_deg=(83.82083333333331, -5.39)

sia_svc = pyvo.sia.SIAService(SIA_ACCESS_URL)
sia_results = sia_svc.search(coords_deg, (0.5, 0.5))

#l'Url de l'image est renvoyée
fits_file_url = sia_results[5].acref # URL de la 5ème (arbitraire) image
buffer = BytesIO()

#le fichier FITS retenu est transféré par 'CURL'
# Initialising the curl object
curl = pycurl.Curl()

# Setting the request URL, the user agent, and the buffer for the response
curl.setopt(pycurl.URL,fits_file_url)
curl.setopt(pycurl.WRITEDATA, buffer)
curl.setopt(pycurl.FOLLOWLOCATION, True)


curl.perform() # ne fonctionne pas dans collab
curl.close()

# Writing the buffer to the file
prism_path=PrismPath.value
fits_filename=f'{prism_path}..\Fits\image.fits' #Path Complet vers le reprtoire utilisateur contenant les Fits
with open(fits_filename, "wb") as f:
f.write(buffer.getbuffer())

#Les astronomes travaillent fits, mais PRISM sait convertir en JPG
#Edité par Jean-Paul GODARD (PI)
Wivona team
Messages : 9
Enregistré le : 15 août 2024, 17:37

2.7.3 Exemple de Requête Python Pour voir les intialisations PRISM

Message par Wivona team »

#Requête Python pour voir les initialisations faites par PRISM
# JP GODARD (Wivona)
#
# Test des variables issues de Prism
print( '*** Test des variables issues de Prism')
print('' )
print(PrismPath.value )
print( )
print( 'Ra =',Cdc_Ra.value)
print( 'Dec =',Cdc_Dec.value)
print( '***')
Marc DELDEM
Messages : 1277
Enregistré le : 20 juin 2009, 01:01

Re: 2 - PRISM et les requêtes Python sur l'observatoire Virtuel

Message par Marc DELDEM »

Bonsoir,

J'ai essayé les 2 scripts suivants (de ce fil de discussion) depuis Prism : Outils / Script VO puis "Charge script" et j'ai un fichier mon_script.py dans lequel j'ai recopié les exemples donnés ici :
Soit le script : # Requête Python pour le catalogue des Nébuleuses Planétaires confirmées
Soit le script : #Requête Python pour voir les initialisations faites par PRISM

Dans les 2 cas j'ai la même erreur quand j'exécute le script depuis Prism (bouton Exec Script) :

Code : Tout sélectionner

*** Test des variables issues de Prism

Traceback (most recent call last):
  File "<string>", line 7, in <module>
NameError: name 'PrismPath' is not defined
Ma config: Prism 32 bits (11.4.22.39) et python3.12 (32 bits aussi)

A noter que le script sur les nébuleuses planétaires fonctionnent dans sa première partie :

Code : Tout sélectionner

TableList with 15 tables:
	'0:V/84/main' with 12 column(s) and 1143 row(s) 
	'1:V/84/diam' with 9 column(s) and 1143 row(s) 
	'2:V/84/dist' with 7 column(s) and 3313 row(s) 
	'3:V/84/hbeta' with 4 column(s) and 991 row(s) 
	'4:V/84/intens' with 22 column(s) and 1046 row(s) 
	'5:V/84/iue' with 8 column(s) and 1715 row(s) 
	'6:V/84/iras' with 18 column(s) and 774 row(s) 
	'7:V/84/nir' with 12 column(s) and 365 row(s) 
	'8:V/84/radio' with 8 column(s) and 689 row(s) 
	'9:V/84/vel' with 14 column(s) and 614 row(s) 
	'10:V/84/cstar' with 17 column(s) and 692 row(s) 
	'11:V/84/notes' with 2 column(s) and 703 row(s) 
	'12:V/84/refs' with 2 column(s) and 872 row(s) 
	'13:V/84/pospn' with 9 column(s) and 347 row(s) 
	'14:V/84/notpn' with 8 column(s) and 330 row(s) 
['Name', 'n_PK', 'PK', 'RAJ2000', 'DEJ2000', 'GLON', 'GLAT', 'Class', 'OtherNames']
Traceback (most recent call last):
  File "<string>", line 25, in <module>
NameError: name 'PrismPath' is not defined
Donc je ne pense pas que le problème vienne de l'installation de Python et des modules annexes (numpy, astropy, pyvo, astroquery)

J'ai des connaissances en Python (niveau intermédiaire) mais j'avoue ne pas comprendre comment "PrismPath.value" peut-être compris par un script python sans aucun import de quoi que ce soit.

Alors après le problème sur ma machine c'est que j'ai plusieurs versions de Python qui cohabitent, plutôt des versions 64 bits et j'ai aussi Anaconda3.
Et dans le PATH j'ai des raccourcis sur une version Python qui n'est pas la version Python que Prism doit utiliser.

Donc si on peut juste me dire comme un script python peut comprendre "PrismPath.value" (où est-ce qu'il va chercher ça), c'est peut-être ça la clé de mon problème.

Marc
Répondre