Cotrans: Difference between revisions

From SPEDAS Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
Line 1: Line 1:
Both the IDL spedas and the python pyspedas contain routines for coordinate transformations in the following systems: GSE, GSM, SM, GEI, GEO, MAG, J2000.
Both the IDL spedas and the python pyspedas contain routines for coordinate transformations in the following systems: GSE, GSM, SM, GEI, GEO, MAG, J2000.


Below, we compare IDL code to python code using some of these cotrans functions, including the IGRF-13 model.
Below, we compare IDL code to python code using some of these cotrans functions.


== IDL code: SPEDAS ==
== Basic cotrans functions ==
 
Use the basic cotrans functions to compute the direction of Earth's magnetic axis in GEO, using the IGRF model, and some other vectors.
 
=== IDL code: SPEDAS ===


<pre>
<pre>
Line 18: Line 22:
cdipdir_vect,transpose(t1.year[*]),transpose(t1.doy[*]),gd1,gd2,gd3
cdipdir_vect,transpose(t1.year[*]),transpose(t1.doy[*]),gd1,gd2,gd3
print, gd1,gd2,gd3
print, gd1,gd2,gd3
; Compute sun direction in GEI system
; Compute sun direction in GEI system.
csundir_vect,transpose(t1.year[*]),transpose(t1.doy[*]),transpose(t1.hour[*]),transpose(t1.min[*]),transpose(t1.sec[*]),gst,slong,sra,sdec,obliq
csundir_vect,transpose(t1.year[*]),transpose(t1.doy[*]),transpose(t1.hour[*]),transpose(t1.min[*]),transpose(t1.sec[*]),gst,slong,sra,sdec,obliq
print,gst,slong,sra,sdec,obliq
print,gst,slong,sra,sdec,obliq
Line 60: Line 64:
</pre>
</pre>


== Python code: pySPEDAS ==
=== Python code: pySPEDAS ===


<pre>
<pre>
Line 104: Line 108:
  array([ 257.6291215 ,  -7.93937951,    0.92928139,  872.39913086, -479.89947926]))
  array([ 257.6291215 ,  -7.93937951,    0.92928139,  872.39913086, -479.89947926]))


</pre>
== Transform data from MAG to GEO. ==
=== IDL code: SPEDAS ===
<pre>
</pre>
=== Python code: pySPEDAS ===
<pre>
</pre>
== Daisy chain transformations. ==
Both IDL and python contain the following functions for transformations between coordinate systems:
subGEI2GSE, subGSE2GEI
subGSE2GSM, subGSM2GSE
subGSM2SM, subSM2GSM
subGEI2GEO, subGEO2GEI
subGEO2MAG, subMAG2GEO
subGEI2J2000, subJ20002GEI
These functions can be daisy chained.
=== IDL code: SPEDAS ===
<pre>
</pre>
=== Python code: pySPEDAS ===
<pre>
</pre>
</pre>

Revision as of 21:12, 26 August 2020

Both the IDL spedas and the python pyspedas contain routines for coordinate transformations in the following systems: GSE, GSM, SM, GEI, GEO, MAG, J2000.

Below, we compare IDL code to python code using some of these cotrans functions.

Basic cotrans functions

Use the basic cotrans functions to compute the direction of Earth's magnetic axis in GEO, using the IGRF model, and some other vectors.

IDL code: SPEDAS

; Compile contrans library
cotrans_lib
; Define some data
d = [[245.0, -102.0, 251.0], [775.0, 10.0, -10], [121.0, 545.0, -1.0], [304.65, -205.3, 856.1], [464.34, -561.55, -356.22]]
; Define times
t = [1577112800, 1577308800, 1577598800, 1577608800, 1577998800]
t0 = time_string(t)
t1 = time_struct(t0)
print, t0
; Compute direction of Earth's magnetic axis in GEO, using the IGRF model. 
cdipdir_vect,transpose(t1.year[*]),transpose(t1.doy[*]),gd1,gd2,gd3
print, gd1,gd2,gd3
; Compute sun direction in GEI system.
csundir_vect,transpose(t1.year[*]),transpose(t1.doy[*]),transpose(t1.hour[*]),transpose(t1.min[*]),transpose(t1.sec[*]),gst,slong,sra,sdec,obliq
print,gst,slong,sra,sdec,obliq
; Compute GEI to GSE transformation.
tgeigse_vect,transpose(t1.year[*]),transpose(t1.doy[*]),transpose(t1.hour[*]),transpose(t1.min[*]),transpose(t1.sec[*]),transpose(d[0, *]),transpose(d[1, *]),transpose(d[2, *]),xgse,ygse,zgse
print,xgse,ygse,zgse
; Compute GSE to GSM transformation.
tgsegsm_vect,transpose(t1.year[*]),transpose(t1.doy[*]),transpose(t1.hour[*]),transpose(t1.min[*]),transpose(t1.sec[*]),transpose(d[0, *]),transpose(d[1, *]),transpose(d[2, *]),xgsm,ygsm,zgsm
print,xgsm,ygsm,zgsm

IDL results:


IDL> print, t0
2019-12-23/14:53:20
2019-12-25/21:20:00
2019-12-29/05:53:20
2019-12-29/08:40:00
2020-01-02/21:00:00
IDL> print, gd1,gd2,gd3
    0.0486864    0.0486846    0.0486811    0.0486811    0.0486776
    -0.156116    -0.156111    -0.156101    -0.156101    -0.156091
     0.986538     0.986539     0.986541     0.986541     0.986542
IDL> print,gst,slong,sra,sdec,obliq
      5.50119     0.944179      3.24176      3.97097     0.994296
      4.73823      4.77856      4.83825      4.84031      4.92061
      4.74045      4.78439      4.84933      4.85157      4.93861
    -0.408904    -0.408101    -0.405626    -0.405513    -0.399712
     0.409047     0.409047     0.409047     0.409047     0.409047
IDL> print,xgse,ygse,zgse
    0.0618591      45.9846     -480.516     -112.061      738.670
      245.080      773.652      182.717      321.559      318.591
      270.862     -13.1524     -217.683      867.127     -103.484
IDL> print,xgsm,ygsm,zgsm
      245.000      775.000      121.000      304.650      464.340
     -83.8585      11.7033      545.000     -118.216     -460.356
      257.629     -7.93938     0.929342      872.399     -479.899

Python code: pySPEDAS


from cotrans_lib import *
d = [[245.0, -102.0, 251.0], [775.0, 10.0, -10], [121.0, 545.0, -1.0], [304.65, -205.3, 856.1], [464.34, -561.55, -356.22]]
t = [1577112800, 1577308800, 1577598800, 1577608800, 1577998800]
a = cdipdir_vect(t)
b = csundir_vect(t)
gse = tgeigse_vect(t, d)
gsm = tgsegsm_vect(t, d)

Results:


a
Out[2]: 
(array([0.04868638, 0.04868462, 0.0486811 , 0.0486811 , 0.04867761]),
 array([-0.15611589, -0.15611097, -0.15610113, -0.15610113, -0.15609089]),
 array([0.98653812, 0.98653899, 0.98654072, 0.98654072, 0.98654251]))

b
Out[3]: 
(array([5.50118781, 0.94417896, 3.24175902, 3.9709706 , 0.9942959 ]),
 array([4.73823063, 4.77856341, 4.83825495, 4.84031354, 4.92060693]),
 array([4.74044499, 4.78438591, 4.84932932, 4.85156629, 4.93861416]),
 array([-0.40890358, -0.40810141, -0.40562582, -0.40551314, -0.39971157]),
 array([0.4090472 , 0.40904719, 0.40904716, 0.40904716, 0.40904714]))

gse
Out[4]: 
(array([ 6.17328386e-02,  4.59847513e+01, -4.80515919e+02, -1.12061112e+02, 7.38670168e+02]),
 array([245.07961052, 773.65200071, 182.71689404, 321.55872916, 318.59101371]),
 array([ 270.86155264,  -13.15235508, -217.68322895,  867.12698798, -103.48369801]))

gsm
Out[5]: 
(array([245.  , 775.  , 121.  , 304.65, 464.34]),
 array([ -83.85842685,   11.70325822,  545.00012517, -118.21614302, -460.35592829]),
 array([ 257.6291215 ,   -7.93937951,    0.92928139,  872.39913086, -479.89947926]))

Transform data from MAG to GEO.

IDL code: SPEDAS


Python code: pySPEDAS


Daisy chain transformations.

Both IDL and python contain the following functions for transformations between coordinate systems: subGEI2GSE, subGSE2GEI subGSE2GSM, subGSM2GSE subGSM2SM, subSM2GSM subGEI2GEO, subGEO2GEI subGEO2MAG, subMAG2GEO subGEI2J2000, subJ20002GEI

These functions can be daisy chained.

IDL code: SPEDAS


Python code: pySPEDAS