Skip to content

Commit

Permalink
Merge pull request #128 from spedas/Pre-release-v1.3
Browse files Browse the repository at this point in the history
Release v1.3
  • Loading branch information
ericthewizard committed Jan 26, 2022
2 parents 7bea9c1 + da7af0d commit c5079b0
Show file tree
Hide file tree
Showing 21 changed files with 90 additions and 49 deletions.
2 changes: 1 addition & 1 deletion LICENSE.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
Copyright (c) 2017, THEMIS group, Space Sciences Laboratory, UC Berkeley.
Copyright (c) 2017-2022 UC Regents, unless otherwise indicated

All rights reserved.

Expand Down
10 changes: 5 additions & 5 deletions docs/source/geopack.rst
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ The routines in this module can be used to calculate Tsyganenko magnetic field m
Tsyganenko 89 (T89)
-----------------------------

.. autofunction:: pyspedas.tt89
.. autofunction:: pyspedas.geopack.tt89

T89 Example
^^^^^^^^^^^^
Expand All @@ -31,7 +31,7 @@ T89 Example
Tsyganenko 96 (T96)
-----------------------------

.. autofunction:: pyspedas.tt96
.. autofunction:: pyspedas.geopack.tt96

T96 Example
^^^^^^^^^^^^
Expand Down Expand Up @@ -63,7 +63,7 @@ T96 Example
Tsyganenko 2001 (T01)
-----------------------------

.. autofunction:: pyspedas.tt01
.. autofunction:: pyspedas.geopack.tt01

T01 Example
^^^^^^^^^^^^
Expand Down Expand Up @@ -95,7 +95,7 @@ T01 Example
Tsyganenko-Sitnov 2004 (TS04)
-----------------------------

.. autofunction:: pyspedas.tts04
.. autofunction:: pyspedas.geopack.tts04

TS04 Example
^^^^^^^^^^^^
Expand Down Expand Up @@ -128,7 +128,7 @@ Solar Wind Parameters
-----------------------------
To generate the "parmod" variable using Dst and solar wind data, use the `get_tsy_params` routine.

.. autofunction:: pyspedas.get_tsy_params
.. autofunction:: pyspedas.geopack.get_tsy_params.get_tsy_params

get_tsy_params Example
^^^^^^^^^^^^
Expand Down
6 changes: 4 additions & 2 deletions docs/source/twins.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@ Two Wide-Angle Imaging Neutral-Atom Spectrometers (TWINS) Mission
========================================================================
The routines in this module can be used to load data from the Two Wide-Angle Imaging Neutral-Atom Spectrometers (TWINS) Mission mission.

Energetic Neutral Atom (ENA) imager
----------------------------------------------------------
.. autofunction:: pyspedas.twins.imager


Lyman-alpha Detector (LAD)
----------------------------------------------------------
Expand All @@ -22,8 +26,6 @@ Example
:class: imgborder




Ephemeris
----------------------------------------------------------
.. autofunction:: pyspedas.twins.ephemeris
Expand Down
2 changes: 1 addition & 1 deletion pyspedas/analysis/tdpwrspc.py
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,6 @@ def tdpwrspc(varname, newname=None, nboxpoints=256, nshiftpoints=128,
options(newname, 'spec', True)
options(newname, 'ylog', True)
options(newname, 'zlog', True)
options(newname, 'Colormap', 'jet')
options(newname, 'Colormap', 'spedas')
# options(newname, 'yrange', [0.01, 16])
return newname
44 changes: 40 additions & 4 deletions pyspedas/hapi/hapi.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@

import warnings
from time import sleep
from pyspedas import time_double
from pytplot import get_data, store_data, options
Expand Down Expand Up @@ -70,6 +70,9 @@ def hapi(trange=None, server=None, dataset=None, parameters='', suffix='',
print('Error, no trange specified')
return

if isinstance(parameters, list):
parameters = ','.join(parameters)

opts = {'logging': False}
data, hapi_metadata = load_hapi(server, dataset, parameters, trange[0], trange[1], **opts)

Expand All @@ -78,23 +81,42 @@ def hapi(trange=None, server=None, dataset=None, parameters='', suffix='',
# loop through the parameters in this dataset
params = hapi_metadata['parameters']

for param in params:
for param in params[1:]:
spec = False
param_name = param.get('name')
print('Loading ' + param_name)

# load the data only for this parameter
try:
data, hapi_metadata = load_hapi(server, dataset, param_name, trange[0], trange[1], **opts)
with warnings.catch_warnings():
warnings.simplefilter("ignore", category=ResourceWarning)
data, hapi_metadata = load_hapi(server, dataset, param_name, trange[0], trange[1], **opts)
except:
breakpoint()
print('Error! 95')
continue

timestamps = [datapoint[0] for datapoint in data]
unixtimes = [time_double(timestamp.decode('utf-8')) for timestamp in timestamps]

param_type = hapi_metadata['parameters'][1].get('type')

if param_type is None:
param_type = 'double'

data_size = hapi_metadata['parameters'][1].get('size')

if data_size is None:
single_line = True

try:
single_line = isinstance(data[0][1], np.float64)
if param_type == 'double':
single_line = isinstance(data[0][1], np.float64)
elif param_type == 'integer':
single_line = isinstance(data[0][1], np.int32)
except IndexError:
breakpoint()
print('Error! 103')
continue

if single_line:
Expand All @@ -103,6 +125,8 @@ def hapi(trange=None, server=None, dataset=None, parameters='', suffix='',
try:
data_out = np.zeros((len(data), len(data[0][1])))
except TypeError:
print('Error! 112')
breakpoint()
continue

for idx, datapoint in enumerate(data):
Expand All @@ -113,6 +137,18 @@ def hapi(trange=None, server=None, dataset=None, parameters='', suffix='',

data_out = data_out.squeeze()

# check for fill values
fill_value = hapi_metadata['parameters'][1].get('fill')
if fill_value is not None:
if param_type == 'double':
fill_value = float(fill_value)
data_out[data_out == fill_value] = np.nan
elif param_type == 'integer':
# NaN is only floating point, so we replace integer fill
# values with 0 instead of NaN
fill_value = int(fill_value)
data_out[data_out == fill_value] = 0

bins = param.get('bins')

if bins is not None:
Expand Down
16 changes: 8 additions & 8 deletions pyspedas/mms/dsp/mms_dsp_set_metadata.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,53 +38,53 @@ def mms_dsp_set_metadata(probe, data_rate, level, suffix=''):
options('mms'+str(this_probe)+'_'+instrument+'_bpsd_scm1_'+this_dr+'_'+this_lvl+suffix, 'spec', True)
options('mms'+str(this_probe)+'_'+instrument+'_bpsd_scm1_'+this_dr+'_'+this_lvl+suffix, 'ylog', True)
options('mms'+str(this_probe)+'_'+instrument+'_bpsd_scm1_'+this_dr+'_'+this_lvl+suffix, 'zlog', True)
options('mms'+str(this_probe)+'_'+instrument+'_bpsd_scm1_'+this_dr+'_'+this_lvl+suffix, 'Colormap', 'jet')
options('mms'+str(this_probe)+'_'+instrument+'_bpsd_scm1_'+this_dr+'_'+this_lvl+suffix, 'Colormap', 'spedas')
if 'mms'+str(this_probe)+'_'+instrument+'_bpsd_scm2_'+this_dr+'_'+this_lvl+suffix in tvars:
options('mms'+str(this_probe)+'_'+instrument+'_bpsd_scm2_'+this_dr+'_'+this_lvl+suffix, 'ytitle', 'MMS'+str(this_probe)+' DSP BPSD SCM2 [Hz]')
options('mms'+str(this_probe)+'_'+instrument+'_bpsd_scm2_'+this_dr+'_'+this_lvl+suffix, 'ztitle', 'nT^2/Hz')
options('mms'+str(this_probe)+'_'+instrument+'_bpsd_scm2_'+this_dr+'_'+this_lvl+suffix, 'spec', True)
options('mms'+str(this_probe)+'_'+instrument+'_bpsd_scm2_'+this_dr+'_'+this_lvl+suffix, 'ylog', True)
options('mms'+str(this_probe)+'_'+instrument+'_bpsd_scm2_'+this_dr+'_'+this_lvl+suffix, 'zlog', True)
options('mms'+str(this_probe)+'_'+instrument+'_bpsd_scm2_'+this_dr+'_'+this_lvl+suffix, 'Colormap', 'jet')
options('mms'+str(this_probe)+'_'+instrument+'_bpsd_scm2_'+this_dr+'_'+this_lvl+suffix, 'Colormap', 'spedas')
if 'mms'+str(this_probe)+'_'+instrument+'_bpsd_scm3_'+this_dr+'_'+this_lvl+suffix in tvars:
options('mms'+str(this_probe)+'_'+instrument+'_bpsd_scm3_'+this_dr+'_'+this_lvl+suffix, 'ytitle', 'MMS'+str(this_probe)+' DSP BPSD SCM3 [Hz]')
options('mms'+str(this_probe)+'_'+instrument+'_bpsd_scm3_'+this_dr+'_'+this_lvl+suffix, 'ztitle', 'nT^2/Hz')
options('mms'+str(this_probe)+'_'+instrument+'_bpsd_scm3_'+this_dr+'_'+this_lvl+suffix, 'spec', True)
options('mms'+str(this_probe)+'_'+instrument+'_bpsd_scm3_'+this_dr+'_'+this_lvl+suffix, 'ylog', True)
options('mms'+str(this_probe)+'_'+instrument+'_bpsd_scm3_'+this_dr+'_'+this_lvl+suffix, 'zlog', True)
options('mms'+str(this_probe)+'_'+instrument+'_bpsd_scm3_'+this_dr+'_'+this_lvl+suffix, 'Colormap', 'jet')
options('mms'+str(this_probe)+'_'+instrument+'_bpsd_scm3_'+this_dr+'_'+this_lvl+suffix, 'Colormap', 'spedas')
if 'mms'+str(this_probe)+'_'+instrument+'_bpsd_omni_'+this_dr+'_'+this_lvl+suffix in tvars:
options('mms'+str(this_probe)+'_'+instrument+'_bpsd_omni_'+this_dr+'_'+this_lvl+suffix, 'ytitle', 'MMS'+str(this_probe)+' DSP BPSD [Hz]')
options('mms'+str(this_probe)+'_'+instrument+'_bpsd_omni_'+this_dr+'_'+this_lvl+suffix, 'ztitle', 'nT^2/Hz')
options('mms'+str(this_probe)+'_'+instrument+'_bpsd_omni_'+this_dr+'_'+this_lvl+suffix, 'spec', True)
options('mms'+str(this_probe)+'_'+instrument+'_bpsd_omni_'+this_dr+'_'+this_lvl+suffix, 'ylog', True)
options('mms'+str(this_probe)+'_'+instrument+'_bpsd_omni_'+this_dr+'_'+this_lvl+suffix, 'zlog', True)
options('mms'+str(this_probe)+'_'+instrument+'_bpsd_omni_'+this_dr+'_'+this_lvl+suffix, 'Colormap', 'jet')
options('mms'+str(this_probe)+'_'+instrument+'_bpsd_omni_'+this_dr+'_'+this_lvl+suffix, 'Colormap', 'spedas')
if 'mms'+str(this_probe)+'_'+instrument+'_epsd_omni'+suffix in tvars:
options('mms'+str(this_probe)+'_'+instrument+'_epsd_omni'+suffix, 'ytitle', 'MMS'+str(this_probe)+' DSP EPSD [Hz]')
options('mms'+str(this_probe)+'_'+instrument+'_epsd_omni'+suffix, 'ztitle', '(V/m)^2/Hz')
options('mms'+str(this_probe)+'_'+instrument+'_epsd_omni'+suffix, 'spec', True)
options('mms'+str(this_probe)+'_'+instrument+'_epsd_omni'+suffix, 'ylog', True)
options('mms'+str(this_probe)+'_'+instrument+'_epsd_omni'+suffix, 'zlog', True)
options('mms'+str(this_probe)+'_'+instrument+'_epsd_omni'+suffix, 'Colormap', 'jet')
options('mms'+str(this_probe)+'_'+instrument+'_epsd_omni'+suffix, 'Colormap', 'spedas')
if 'mms'+str(this_probe)+'_'+instrument+'_epsd_x'+suffix in tvars:
options('mms'+str(this_probe)+'_'+instrument+'_epsd_x'+suffix, 'ytitle', 'MMS'+str(this_probe)+' DSP EPSD-X [Hz]')
options('mms'+str(this_probe)+'_'+instrument+'_epsd_x'+suffix, 'ztitle', '(V/m)^2/Hz')
options('mms'+str(this_probe)+'_'+instrument+'_epsd_x'+suffix, 'spec', True)
options('mms'+str(this_probe)+'_'+instrument+'_epsd_x'+suffix, 'ylog', True)
options('mms'+str(this_probe)+'_'+instrument+'_epsd_x'+suffix, 'zlog', True)
options('mms'+str(this_probe)+'_'+instrument+'_epsd_x'+suffix, 'Colormap', 'jet')
options('mms'+str(this_probe)+'_'+instrument+'_epsd_x'+suffix, 'Colormap', 'spedas')
if 'mms'+str(this_probe)+'_'+instrument+'_epsd_y'+suffix in tvars:
options('mms'+str(this_probe)+'_'+instrument+'_epsd_y'+suffix, 'ytitle', 'MMS'+str(this_probe)+' DSP EPSD-Y [Hz]')
options('mms'+str(this_probe)+'_'+instrument+'_epsd_y'+suffix, 'ztitle', '(V/m)^2/Hz')
options('mms'+str(this_probe)+'_'+instrument+'_epsd_y'+suffix, 'spec', True)
options('mms'+str(this_probe)+'_'+instrument+'_epsd_y'+suffix, 'ylog', True)
options('mms'+str(this_probe)+'_'+instrument+'_epsd_y'+suffix, 'zlog', True)
options('mms'+str(this_probe)+'_'+instrument+'_epsd_y'+suffix, 'Colormap', 'jet')
options('mms'+str(this_probe)+'_'+instrument+'_epsd_y'+suffix, 'Colormap', 'spedas')
if 'mms'+str(this_probe)+'_'+instrument+'_epsd_z'+suffix in tvars:
options('mms'+str(this_probe)+'_'+instrument+'_epsd_z'+suffix, 'ytitle', 'MMS'+str(this_probe)+' DSP EPSD-Z [Hz]')
options('mms'+str(this_probe)+'_'+instrument+'_epsd_z'+suffix, 'ztitle', '(V/m)^2/Hz')
options('mms'+str(this_probe)+'_'+instrument+'_epsd_z'+suffix, 'spec', True)
options('mms'+str(this_probe)+'_'+instrument+'_epsd_z'+suffix, 'ylog', True)
options('mms'+str(this_probe)+'_'+instrument+'_epsd_z'+suffix, 'zlog', True)
options('mms'+str(this_probe)+'_'+instrument+'_epsd_z'+suffix, 'Colormap', 'jet')
options('mms'+str(this_probe)+'_'+instrument+'_epsd_z'+suffix, 'Colormap', 'spedas')
2 changes: 1 addition & 1 deletion pyspedas/mms/eis/mms_eis_omni.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ def mms_eis_omni(probe, species='proton', datatype='extof', suffix='', data_unit
options(prefix + species_str + '_' + data_units + '_omni' + suffix, 'ztitle', units_label)
options(prefix + species_str + '_' + data_units + '_omni' + suffix, 'ytitle', 'MMS' + probe + ' ' + datatype + ' ' + species + ' Energy [keV]')
options(prefix + species_str + '_' + data_units + '_omni' + suffix, 'yrange', [14, 45])
options(prefix + species_str + '_' + data_units + '_omni' + suffix, 'Colormap', 'jet')
options(prefix + species_str + '_' + data_units + '_omni' + suffix, 'Colormap', 'spedas')

# create new variable with omni energy limits
energy_minus = get_data(prefix + species_str + '_t0_energy_dminus' + suffix)
Expand Down
4 changes: 2 additions & 2 deletions pyspedas/mms/eis/mms_eis_pad.py
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ def mms_eis_pad(scopes=['0', '1', '2', '3', '4', '5'], probe='1', level='l2',
options(new_name, 'ylog', False)
options(new_name, 'zlog', True)
options(new_name, 'spec', True)
options(new_name, 'Colormap', 'jet')
options(new_name, 'Colormap', 'spedas')
options(new_name, 'ztitle', units_label)
options(new_name, 'ytitle', 'MMS' + str(probe_id) + ' ' + datatype_id + ' PA (deg)')
out_vars.append(new_name)
Expand Down Expand Up @@ -191,7 +191,7 @@ def mms_eis_pad(scopes=['0', '1', '2', '3', '4', '5'], probe='1', level='l2',
options(new_name, 'ylog', False)
options(new_name, 'zlog', True)
options(new_name, 'spec', True)
options(new_name, 'Colormap', 'jet')
options(new_name, 'Colormap', 'spedas')
options(new_name, 'ztitle', units_label)
options(new_name, 'ytitle', 'MMS' + str(probe_id) + ' ' + datatype_id + ' PA (deg)')
out_vars.append(new_name)
Expand Down
2 changes: 1 addition & 1 deletion pyspedas/mms/eis/mms_eis_pad_spinavg.py
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ def mms_eis_pad_spinavg(scopes=['0','1','2','3','4','5'], probe='1',
options(newname, 'ylog', False)
options(newname, 'zlog', True)
options(newname, 'spec', True)
options(newname, 'Colormap', 'jet')
options(newname, 'Colormap', 'spedas')
options(newname, 'ztitle', units_label)
options(newname, 'ytitle', 'MMS' + str(probe) + ' ' + datatype + ' spin PAD (deg)')
out_vars.append(newname)
Expand Down
9 changes: 6 additions & 3 deletions pyspedas/mms/eis/mms_eis_set_metadata.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@



from pyspedas import tnames
from pytplot import options

Expand Down Expand Up @@ -29,3 +26,9 @@ def mms_eis_set_metadata(tplotnames, data_rate='srvy', datatype='extof', suffix=
# options(tnames('*_extof_alpha_flux_omni*'), 'yrange', [80, 650]) # removed in the latest files as of 3 Aug 2021
options(tnames('*_extof_helium_flux_omni*'), 'yrange', [80, 650])
options(tnames('*_extof_oxygen_flux_omni*'), 'yrange', [145, 950])
options(tnames('*_extof_proton_flux_omni*'), 'x_interp', True)
options(tnames('*_extof_proton_flux_omni*'), 'y_interp', True)
options(tnames('*_extof_helium_flux_omni*'), 'x_interp', True)
options(tnames('*_extof_helium_flux_omni*'), 'y_interp', True)
options(tnames('*_extof_oxygen_flux_omni*'), 'x_interp', True)
options(tnames('*_extof_oxygen_flux_omni*'), 'y_interp', True)
2 changes: 1 addition & 1 deletion pyspedas/mms/eis/mms_eis_spec_combine_sc.py
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ def mms_eis_spec_combine_sc(
options(new_name, 'ylog', True)
options(new_name, 'zlog', True)
options(new_name, 'spec', True)
options(new_name, 'Colormap', 'jet')
options(new_name, 'Colormap', 'spedas')
options(new_name, 'ztitle', units_label)
options(new_name, 'ytitle', ' \\ '.join(['mms'+probe_string, _species.upper(), 'Energy [keV]']))
out_vars.append(new_name)
Expand Down
2 changes: 1 addition & 1 deletion pyspedas/mms/eis/mms_eis_spin_avg.py
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ def mms_eis_spin_avg(probe='1', species='proton', data_units='flux', datatype='e
options(this_scope + '_spin', 'spec', True)
options(this_scope + '_spin', 'ylog', True)
options(this_scope + '_spin', 'zlog', True)
options(this_scope + '_spin', 'Colormap', 'jet')
options(this_scope + '_spin', 'Colormap', 'spedas')
out_vars.append(this_scope + '_spin')
return out_vars
else:
Expand Down
2 changes: 1 addition & 1 deletion pyspedas/mms/feeps/mms_feeps_omni.py
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,7 @@ def mms_feeps_omni(eyes, probe='1', datatype='electron', data_units='intensity',
options('mms'+probe+'_epd_feeps_'+data_rate+'_'+level+'_'+datatype+'_'+data_units+'_omni'+suffix, 'spec', True)
options('mms'+probe+'_epd_feeps_'+data_rate+'_'+level+'_'+datatype+'_'+data_units+'_omni'+suffix, 'ylog', True)
options('mms'+probe+'_epd_feeps_'+data_rate+'_'+level+'_'+datatype+'_'+data_units+'_omni'+suffix, 'zlog', True)
options('mms'+probe+'_epd_feeps_'+data_rate+'_'+level+'_'+datatype+'_'+data_units+'_omni'+suffix, 'Colormap', 'jet')
options('mms'+probe+'_epd_feeps_'+data_rate+'_'+level+'_'+datatype+'_'+data_units+'_omni'+suffix, 'Colormap', 'spedas')
options('mms'+probe+'_epd_feeps_'+data_rate+'_'+level+'_'+datatype+'_'+data_units+'_omni'+suffix, 'ztitle', units_label)
options('mms'+probe+'_epd_feeps_'+data_rate+'_'+level+'_'+datatype+'_'+data_units+'_omni'+suffix, 'ytitle', 'MMS' + str(probe) + ' ' + datatype + ' (keV)')
out_vars.append('mms'+probe+'_epd_feeps_'+data_rate+'_'+level+'_'+datatype+'_'+data_units+'_omni'+suffix)
Expand Down
2 changes: 1 addition & 1 deletion pyspedas/mms/feeps/mms_feeps_pad.py
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ def mms_feeps_pad(bin_size=16.3636, probe='1', energy=[70, 600], level='l2', suf
options(new_name, 'ylog', False)
options(new_name, 'zlog', True)
options(new_name, 'spec', True)
options(new_name, 'Colormap', 'jet')
options(new_name, 'Colormap', 'spedas')
options(new_name, 'ztitle', units_label)
options(new_name, 'ytitle', 'MMS' + str(probe) + ' ' + datatype + ' PA (deg)')

Expand Down
2 changes: 1 addition & 1 deletion pyspedas/mms/feeps/mms_feeps_pad_spinavg.py
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ def mms_feeps_pad_spinavg(probe='1', data_units='intensity', datatype='electron'
options(var_name + '_spin' + suffix, 'spec', True)
options(var_name + '_spin' + suffix, 'ylog', False)
options(var_name + '_spin' + suffix, 'zlog', True)
options(var_name + '_spin' + suffix, 'Colormap', 'jet')
options(var_name + '_spin' + suffix, 'Colormap', 'spedas')
options(var_name + '_spin' + suffix, 'ztitle', units_label)
options(var_name + '_spin' + suffix, 'ytitle', 'MMS' + str(probe) + ' ' + datatype + ' PA (deg)')

Expand Down
2 changes: 1 addition & 1 deletion pyspedas/mms/feeps/mms_feeps_spin_avg.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ def mms_feeps_spin_avg(probe='1', data_units='intensity', datatype='electron', d
options(var_name + '_spin' + suffix, 'ylog', True)
options(var_name + '_spin' + suffix, 'zlog', True)
options(var_name + '_spin' + suffix, 'yrange', [lower_en, 600.0])
options(var_name + '_spin' + suffix, 'Colormap', 'jet')
options(var_name + '_spin' + suffix, 'Colormap', 'spedas')
options(var_name + '_spin' + suffix, 'ztitle', units_label)
options(var_name + '_spin' + suffix, 'ytitle', 'MMS' + str(probe) + ' ' + datatype + ' (keV)')

Expand Down

0 comments on commit c5079b0

Please sign in to comment.