# schupy -- A python package for modeling and analyzing Schumann resonances

schupy is an open-source python package aimed at modeling and analyzing Schumann resonances (SRs), the global electromagnetic resonances of the Earth-ionosphere cavity resonator in the lowest part of the extremely low frequency band (<100 Hz).

## Usage

#### `forward_tdte` function
The `forward_tdte` function of schupy uses the analytical solution of the 2-D telegraph equation (TDTE) obtained for uniform cavity and is able to determine SRs generated by an arbitrary number of sources located in given positions and returns the theoretical power spectral density of the field components for an arbitrarily located observing station. The sources can be either pointsources or extended ones with a specified size.

The function takes the following arguments:

| Name        | Type           | Description  |  Unit | Default value |
| ------------- |:-------------:| ------------- | ------------ |  ---------- |
| `s_lat` | LIST | Geographical latitude(s) of the source(s) | deg |
| `s_lon` | LIST | Geographical longitude(s) of the source(s) | deg |
| `s_int` | LIST | Intensiti(es) of the source(s) | C^2 km^2 s^-1 |
| `m_lat` | FLOAT | Geographical latitude of the observing station | deg |
| `m_lon` | FLOAT | Geographical longitude of the observing station | deg |
| `freq` | LIST | Field components are calculated on these frequencies | Hz |
| `radius` | FLOAT | Radius of the extended sources (0 in the case of pointsource(s)) | Mm | 0 |
| `n` | INT | Maximal order of Legendre-polynomials to sum |  | 500 |
| `mapshow` | BOOL | Sets whether to show a map of the sources and the station or not |  | False |
| `mapsave` | BOOL | Sets whether to save the map of the sources and the station or not |  | False |
| `mapfilename` | STR | Name of the file to save the map into |  | schupy_map.png
| `plotshow` | BOOL | Sets whether to plot the power spectral densities or not |  | False |

| Name        | Type           | Description  |  Default value | Possible values |
| ------------- |:-------------:| ------------- | ------------ |  ---------- |
| `h` | STRING | Method of calculating complex ionospheric heights | mushtak | mushtak, kulak |
| `ret` | STRING | Returned field components | all | all, Er, Btheta, Bphi |

By setting the `radius` value to any number grater than zero, the user can model extended sources with randomly distributed pointsources inside a circle having the given radius, whose intensities sum up to the given `s_int`.

By specifying `h` the user can choose the preferred method of calculating complex ionospheric heights. The two methods are described in:
*V. C. Mushtak and E. R. Williams (2002): Elf propagation parameters for uniform models of the earth-ionosphere waveguide, Journal of Atmospheric and Solar-Terrestrial Physics, 64.*
and in: 
*A. Kulak and J. Mlynarczyk (2013): Elf propagation parameters for the ground-ionosphere waveguide with finite ground conductivity, IEEE Transactions on Antennas and Propagation, 61.*.

schupy can visualize the specified sources and observing station on a world map. The station is shown as a rectangle while the sources are indicated by circles whose sizes are proportional to their intensities. Visualization relies on the `cartopy` package: https://scitools.org.uk/cartopy/docs/latest/

The function plots and returns the following quantities at the location of the given observing station:
 - `Er`: the vertical component of the electric field
 - `Btheta`: the N-S component of the magnetic field measured by E-W orianted magnetic coils 
 - `Bphi`: the E-W component of the magnetic field measured by N-S orianted magnetic coils

 
An exaple to how to run the function:
~~~~
import schupy as sp
import numpy as np

source_latitudes = [10.0, 0.0, 0.0]
source_longitudes = [10.0, -80.0, 110.0]
source_intensities = [1e5, 8e4, 7e4]
frequencies = np.arange(5, 30, 0.1)
obs_latitude = 47.6
obs_longitude = 16.7

sp.forward_tdte(source_latitudes, source_longitudes, source_intensities, obs_latitude, obs_longitude, frequencies, h='mushtak', ret='Bphi', radius = 0, mapshow = False, mapsave = False, plotshow = True)
~~~~
 


## Acknowledgement

The schupy package is developed by G. Dalya, T. Bozoki, K. Kapas, J. Takatsy, E. Pracser and G. Satori. Please send your questions and comments to `dalyag@caesar.elte.hu`. If you use the Schupy package for your research, please cite our paper:

@article{BOZOKI2019105144,
title = "Modeling Schumann resonances with schupy",
journal = "Journal of Atmospheric and Solar-Terrestrial Physics",
volume = "196",
pages = "105144",
year = "2019",
issn = "1364-6826",
doi = "https://doi.org/10.1016/j.jastp.2019.105144",
url = "http://www.sciencedirect.com/science/article/pii/S1364682619304134",
author = "Tamás Bozoki and Erno Pracser and Gabriella Satori and Gergely Dalya and Kornel Kapas and Janos Takatsy",
keywords = "Schumann resonances, Earth-ionosphere cavity, Numerical model, Python package",
abstract = "Schupy is an open-source python package aimed at modeling and analyzing Schumann resonances (SRs), the global electromagnetic resonances of the Earth-ionosphere cavity resonator in the lowest part of the extremely low frequency band (<100 Hz). Its very-first function forward_tdte applies the solution of the 2-D telegraph equation introduced recently by Prácser et al. (2019) for a uniform cavity and is able to determine theoretical SR spectra for arbitrary source-observer configurations. It can be applied for both modeling extraordinarily large SR-transients or “background” SRs excited by incoherently superimposed lightning strokes within an extended source region. Three short studies are presented which might be important for SR related research. With the forward_tdte function our aim is to provide a medium complexity numerical background for the interpretation of SR observations. We would like to encourage the community to join our project in developing open-source analyzing capacities for SR research as part of the schupy package."
}

