Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WIP: native implementation of fftfit #777

Open
wants to merge 12 commits into
base: master
Choose a base branch
from
5 changes: 3 additions & 2 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v2.3.0
rev: v3.2.0
hooks:
- id: check-yaml
- id: check-merge-conflict
- id: check-symlinks
- repo: https://github.com/psf/black
rev: 19.3b0
rev: 19.10b0
hooks:
- id: black
language_version: python3
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project, at least loosely, adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## Unreleased
### Added
- Now contains an implementation of FFTFIT in `pint.profile` (PR #777)

## [0.8.1] - 2021-01-07
## Fixed
- Right click to delete TOAs in pintk now works
Expand Down
344 changes: 344 additions & 0 deletions docs/examples/Example of parameter usage.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,344 @@
---
jupyter:
jupytext:
formats: ipynb,md
text_representation:
extension: .md
format_name: markdown
format_version: '1.2'
jupytext_version: 1.5.2
kernelspec:
display_name: Python 3
language: python
name: python3
---

# Example of parameter usage

```python jupyter={"outputs_hidden": false}
import pint.models.model_builder as mb
import pint.models.parameter as pp
import astropy.units as u
from astropy.coordinates.angles import Angle
import pytest
```

```python jupyter={"outputs_hidden": false}
model = mb.get_model("B1855+09_NANOGrav_dfg+12_TAI.par")
```

```python jupyter={"outputs_hidden": false}
print(model.params)
```

## Attributions in Parameters

```python jupyter={"outputs_hidden": false}
printed = []
for p in model.params:
par = getattr(model, p)
if type(par) in printed:
continue
print("Name ", par.name)
print("Type ", type(par))
print("Quantity ", par.quantity, type(par.quantity))
print("Value ", par.value)
print("units ", par.units)
print("Uncertainty ", par.uncertainty)
print("Uncertainty_value", par.uncertainty_value)
print("Summary ", par)
print("Parfile Style ", par.as_parfile_line())
print()
printed.append(type(par))
# Note JUMP and DMX is different.
```

## Making a parameter

```python jupyter={"outputs_hidden": false}
t = pp.floatParameter(name="TEST", value=100, units="Hz", uncertainty=0.03)
print(t)
```

```python jupyter={"outputs_hidden": false}
t2 = pp.floatParameter(name="TEST", value="200", units="Hz", uncertainty=".04")
print(t2)
```

```python jupyter={"outputs_hidden": false}
t3 = pp.floatParameter(
name="TEST", value=0.3 * u.kHz, units="Hz", uncertainty=4e-5 * u.kHz
)
print(t3)
print(t3.quantity)
print(t3.value)
print(t3.uncertainty)
print(t3.uncertainty_value)
```

## Change Parameter quantity of value

```python jupyter={"outputs_hidden": false}
par = model.F0
print(par)
par.quantity = 200
print("Quantity ", par.quantity, type(par.quantity))
print("Value ", par.value)
print(par)
```

```python jupyter={"outputs_hidden": false}
# Test F0
print(par)
par.value = 150
print("Quantity ", par.quantity, type(par.quantity))
print("Value ", par.value)
print(par)
```

```python jupyter={"outputs_hidden": false}
# Example for F0
print(par)
par.value = "100"
print("Quantity ", par.quantity, type(par.quantity))
print("Value ", par.value)
print(par)
```

```python jupyter={"outputs_hidden": false}
# Example for F0
print(par)
par.quantity = "300"
print("Quantity ", par.quantity, type(par.quantity))
print("Value ", par.value)
print(par)
```

```python jupyter={"outputs_hidden": false}
# Examle F0
par.quantity = 0.3 * u.kHz
print("Quantity ", par.quantity, type(par.quantity))
print("Value ", par.value)
print(par)
```

```python jupyter={"outputs_hidden": false}
try:
# Examle F0
print(par)
par.value = 100 * u.second # SET F0 to seconds as time.
print("Quantity ", par.quantity, type(par.quantity))
print("Value ", par.value)
print(par)
except u.UnitConversionError as e:
print("Exception raised:", e)
else:
raise ValueError("That was supposed to raise an exception!")
```

### For MJD parameters

```python jupyter={"outputs_hidden": false}
par = model.TZRMJD
print(par)
par.quantity = 54000
print("Quantity ", par.quantity, type(par.quantity))
print("Value ", par.value)
print(par)
par.quantity
```

```python jupyter={"outputs_hidden": false}
# Example for TZRMJD
par.quantity = "54001"
print("Quantity ", par.quantity, type(par.quantity))
print("Value ", par.value)
print(par)
par.quantity
```

```python jupyter={"outputs_hidden": false}
# Example for TZRMJD
par.value = 54002
print("Quantity ", par.quantity, type(par.quantity))
print("Value ", par.value)
print(par)
par.quantity
```

```python jupyter={"outputs_hidden": false}
# Example for TZRMJD
par.value = "54003"
print("Quantity ", par.quantity, type(par.quantity))
print("Value ", par.value)
print(par)
par.quantity
```

### For AngleParameters

```python jupyter={"outputs_hidden": false}
# Example for RAJ
par = model.RAJ
print(par)
par.quantity = 50
print("Quantity ", par.quantity, type(par.quantity))
print("Value ", par.value)
print(par)
par.quantity
```

```python jupyter={"outputs_hidden": false}
import astropy
```

```python jupyter={"outputs_hidden": false}
astropy.__version__
```

```python jupyter={"outputs_hidden": false}
Angle(50.0 * u.hourangle)
```

```python jupyter={"outputs_hidden": false}
# Example for RAJ
print(par)
par.quantity = 30.5
print("Quantity ", par.quantity, type(par.quantity))
print("Value ", par.value)
print(par)
par.quantity
```

```python jupyter={"outputs_hidden": false}
# Example for RAJ
print(par)
par.quantity = "20:30:00"
print("Quantity ", par.quantity, type(par.quantity))
print("Value ", par.value)
print(par)
par.quantity
```

```python jupyter={"outputs_hidden": false}
# Example for RAJ
print(par)
par.value = "20:05:0"
print("Quantity ", par.quantity, type(par.quantity))
print("Value ", par.value)
print(par)
par.quantity
```

```python jupyter={"outputs_hidden": false}
# Example for RAJ
print(par)
par.quantity = 30 * u.deg
print("Quantity ", par.quantity, type(par.quantity))
print("Quantity in deg", par.quantity.to(u.deg))
print("Value ", par.value)
print(par)
par.quantity
```

```python jupyter={"outputs_hidden": false}
# Example for RAJ
print(par)
par.value = 40 * u.rad
print("Quantity ", par.quantity, type(par.quantity))
print("Quantity in rad", par.quantity.to(u.rad))
print("Value ", par.value)
print(par)
par.quantity
```

Test for wrong unit

```python jupyter={"outputs_hidden": false}
# Example for RAJ
try:
print(par)
par.value = 40 * u.second # Here second is in the unit of time, not hourangle
print("Quantity ", par.quantity, type(par.quantity))
print("Quantity in rad", par.quantity.to(u.rad))
print("Value ", par.value)
print(par)
par.quantity
except u.UnitConversionError as e:
print("Exception raised:", e)
else:
raise ValueError("That was supposed to raise an exception!")
```

```python jupyter={"outputs_hidden": false}
try:
# Example for RAJ
print(par)
par.quantity = 30 * u.hour # Here hour is in the unit of time, not hourangle
print("Quantity ", par.quantity, type(par.quantity))
print("Quantity in deg", par.quantity.to(u.deg))
print("Value ", par.value)
print(par)
par.quantity
except u.UnitConversionError as e:
print("Exception raised:", e)
else:
raise ValueError("That was supposed to raise an exception!")
```

## Example for uncertainty

```python jupyter={"outputs_hidden": false}
par = model.F0
```


```python jupyter={"outputs_hidden": false}
# Example for F0
print(par.uncertainty)
print(par.uncertainty_value)
par.uncertainty = par.uncertainty_value / 1000.0 * u.kHz
print(par)
print(par.uncertainty)
```


```python jupyter={"outputs_hidden": false}
# Example for F0
par.uncertainty_value = 6e-13
print(par)
print(par.uncertainty)
```

```python jupyter={"outputs_hidden": false}
# Example for F0
par.uncertainty_value = 7e-16 * u.kHz
print(par)
print(par.uncertainty)
```

<!-- #region jupyter={"outputs_hidden": false} -->
## How do "prefix parameters" and "mask parameters" work?
<!-- #endregion -->

```python
cat = pp.prefixParameter(
parameter_type="float", name="CAT0", units=u.ml, long_double=True
)
```

```python
dir(cat)
```

```python
cat.is_prefix
```

```python
cat.index
```

```python

```
Loading