Cotrans: Difference between revisions
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 | 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.