Wednesday, August 9, 2017

JPL Toolkit in Python ctypes per utenti Windows

Molto brevemente, non utilizzando abitualmente Windows sono poco esperto nell'uso dei compilatori per C e C++ in quest'ambiente operativo. Tuttavia, siccome la maggior parte degli utenti desktop usa Windows, mi dispiace non poter fornire anche a loro qualche utile suggerimento.

Per avere una dll compilata direttamente dai sorgenti del toolkit, consiglio l'installazione preventiva di:

  1. Python 32 bit, direttamente dal sito python.org
  2. il compilatore VC per Python,
  3. che si puo' ottenere seguendo le istruzioni di questo sito. Io ho installato il Python 2.7.13 per cui la versione più adatta è la 9.0. Dopo l'installazione rendete accessibile il path al compilatore modificando le variabili di ambiente per puntare il compilatore in linea di comando cl.exe. Questo si trova nella directory "C:\Users\\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\VC\bin", che bisognerà aggiungere alla variabile di ambiente PATH.

  4. Suggerisco caldamente di installare Spicepy di Andrew Annex,
  5. già citato qualche post fa, perchè consente di compilare automaticamente la dll desiderata durante l'installazione. Per come fare leggete con attenzione le istruzioni sul sito GitHub. Io ho preferito fare il download del file zip, decomprimerlo sul mio desktop, lanciare python setup.py install e attendere la compilazione. Trovate la dll desiderata nella sottodirectory SpicyPy-master\spicypy\utils, con il nome cspice.dll, copiatela nella directory di lavoro in cui, se avete seguito le mie precedenti istruzioni, dovreste avere tutti i file necessari. Ad ogni buon conto provo a riepilogarli:

    • de421.bsp o analoghi
    • naif0012.tls
    • trueepoch.tf
    • __init__.py (file vuoto)
    • jpltoolkit.py o come avete preferito chiamarlo
    • tools.py (piccola raccoltà di utilità di calendario e trigonometriche
    • testjpl.py (anche qui, il nome che preferite) che contiene i test della libreria

Naturalmente le chiamate saranno fatte alla .dll anzichè alla .so, ma la sintassi, per il resto, è perfettamente identica a quella degli script che ho scritto in linux mint

Una piccola raccomandazione, nella fretta ho dimenticato che al termine del lavoro bisogna fare l'unload dei kernel, altrimenti rimangono sospesi in memoria. Per facilitare le cose, vi ripubblico il file di test completo, cosi' come l'ho scritto in precedenza

Per prima cosa, nel file che gestisce la libreria (jpltoolkit.py) scrivete:

import ctypes as ct
ct.shared_lib = ct.CDLL('.\cspice.dll')

al posto di :

import ctypes as ct
ct.shared_lib = ct.CDLL('./libcspice.so')

A seguire il file di test completo:

from tools import *
import jpltoolkit as jpl

lista = ["SUN", "MOON", "MERCURY", "VENUS", "MARS",
         "JUPITER_BARYCENTER", "SATURN_BARYCENTER", "URANUS_BARYCENTER",
         "NEPTUNE_BARYCENTER", "PLUTO_BARYCENTER"]

# kernels load
jpl.furnsh_c('./de421.bsp')
jpl.furnsh_c('./naif0012.tls')
jpl.furnsh_c('./trueepoch.tf')

# calculate geocentric equatorial and equatorial coordinates
timestring = "2017-08-08T10:13:00"
ref = "MYTRUEEPOCH"
abcorr = "NONE"

print "equatorial coordinates (earthtrueeopch)"
for i in lista:
    target = i
    observer = "EARTH"
    # first equatorial
    xyz = jpl.spkezr_c(target, ref, timestring, abcorr, observer)
    x = xyz[0]; y = xyz[1]; z = xyz[2]
    rec_vector = (x,y,z)
    result = jpl.recrad_c(rec_vector)
    print "recrad", i, result[0], ddd2dms(result[1] * jpl.dpr_c()), ddd2dms(result[2] * jpl.dpr_c())
print
jpl.unload_c('./trueepoch.tf')
jpl.unload_c('./naif0012.tls')
jpl.unload_c('./de421.bsp')

Notate che ho corretto alcune cose, in particolare l'unload finale dei kernel

Come ho già affermato, non sono un esperto di windows, ma se doveste avere problemi, cercherò di esservi d'aiuto. Alla prossima

Aggiornamento

Ho fatto diverse prove con la dll compilata da spiceypy in vari ambienti operativi. Riesco a farla funzionare, al momento, solo con Python 32 bit. In alcuni casi non sono riuscito a compilare spiceypy in modo efficace con la procedura python setup.py install ma ho avuto successo con pip install spiceypy. Se avete problemi provate questo secondo metodo. La cspice.dll si trova dentro la directory C:\Python27\Lib\site-packages\spiceypy-2.0.1.dev0-py2.7.egg\spiceypy\utils

.

No comments:

Post a Comment

How to create a virtual linux machine with qemu under Debian or Ubuntu with near native graphics performance

It's been a long time since my latest post. I know, I'm lazy. But every now and then I like to publish something that other people c...