arvi 0.1.20__py3-none-any.whl → 0.1.22__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- arvi/config.py +33 -4
- arvi/simbad_wrapper.py +1 -1
- arvi/timeseries.py +95 -6
- {arvi-0.1.20.dist-info → arvi-0.1.22.dist-info}/METADATA +1 -1
- {arvi-0.1.20.dist-info → arvi-0.1.22.dist-info}/RECORD +8 -8
- {arvi-0.1.20.dist-info → arvi-0.1.22.dist-info}/LICENSE +0 -0
- {arvi-0.1.20.dist-info → arvi-0.1.22.dist-info}/WHEEL +0 -0
- {arvi-0.1.20.dist-info → arvi-0.1.22.dist-info}/top_level.txt +0 -0
arvi/config.py
CHANGED
|
@@ -1,3 +1,20 @@
|
|
|
1
|
+
from pathlib import Path
|
|
2
|
+
import configparser
|
|
3
|
+
from pprint import pprint
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def get_config_path():
|
|
7
|
+
return Path.home() / '.config' / 'arvi.ini'
|
|
8
|
+
|
|
9
|
+
def get_config():
|
|
10
|
+
config = configparser.ConfigParser()
|
|
11
|
+
if (path := get_config_path()).exists():
|
|
12
|
+
config.read(path)
|
|
13
|
+
return config
|
|
14
|
+
|
|
15
|
+
def save_config(config):
|
|
16
|
+
config.write(get_config_path().open('w'))
|
|
17
|
+
|
|
1
18
|
|
|
2
19
|
def instancer(cls):
|
|
3
20
|
return cls()
|
|
@@ -14,23 +31,35 @@ class config:
|
|
|
14
31
|
'check_internet': False,
|
|
15
32
|
# make all DACE requests without using a .dacerc file
|
|
16
33
|
'request_as_public': False,
|
|
17
|
-
# username for DACE servers
|
|
18
|
-
'username': 'desousaj',
|
|
19
34
|
# debug
|
|
20
35
|
'debug': False,
|
|
21
36
|
}
|
|
22
|
-
# all, for now
|
|
23
37
|
__setters = list(__conf.keys())
|
|
24
38
|
|
|
39
|
+
__user_config = get_config()
|
|
40
|
+
|
|
25
41
|
def __getattr__(self, name):
|
|
26
42
|
if name in ('__custom_documentations__', ):
|
|
27
43
|
# return {'return_self': 'help!'}
|
|
28
44
|
return {}
|
|
29
45
|
|
|
46
|
+
if self.__user_config.has_option('config', name):
|
|
47
|
+
self.__conf[name] = self.__user_config.get('config', name)
|
|
48
|
+
|
|
30
49
|
return self.__conf[name]
|
|
31
50
|
|
|
32
51
|
def __setattr__(self, name, value):
|
|
33
52
|
if name in config.__setters:
|
|
34
53
|
self.__conf[name] = value
|
|
35
54
|
else:
|
|
36
|
-
|
|
55
|
+
if 'config' not in self.__user_config:
|
|
56
|
+
self.__user_config.add_section('config')
|
|
57
|
+
self.__user_config.set('config', name, value)
|
|
58
|
+
save_config(self.__user_config)
|
|
59
|
+
# raise NameError(f"unknown configuration name '{name}'")
|
|
60
|
+
|
|
61
|
+
def show(self):
|
|
62
|
+
if 'config' in self.__user_config:
|
|
63
|
+
pprint(self.__conf | dict(self.__user_config['config']))
|
|
64
|
+
else:
|
|
65
|
+
pprint(self.__conf)
|
arvi/simbad_wrapper.py
CHANGED
|
@@ -45,7 +45,7 @@ def run_query(query):
|
|
|
45
45
|
url = 'http://simbad.u-strasbg.fr/simbad/sim-tap/sync'
|
|
46
46
|
data = dict(query=query, request='doQuery', lang='ADQL', format='text/plain', phase='run')
|
|
47
47
|
try:
|
|
48
|
-
response = requests.post(url, data=data, timeout=
|
|
48
|
+
response = requests.post(url, data=data, timeout=2)
|
|
49
49
|
except requests.ReadTimeout as err:
|
|
50
50
|
raise IndexError(err)
|
|
51
51
|
except requests.ConnectionError as err:
|
arvi/timeseries.py
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import os
|
|
2
2
|
from dataclasses import dataclass, field
|
|
3
3
|
from typing import Union
|
|
4
|
-
from functools import partial, partialmethod
|
|
4
|
+
from functools import lru_cache, partial, partialmethod
|
|
5
5
|
from glob import glob
|
|
6
6
|
import warnings
|
|
7
7
|
from copy import deepcopy
|
|
@@ -713,6 +713,89 @@ class RV:
|
|
|
713
713
|
if instruments == ['ESPRESSO']:
|
|
714
714
|
from .instrument_specific import divide_ESPRESSO
|
|
715
715
|
divide_ESPRESSO(s)
|
|
716
|
+
elif instruments == ['HARPS']:
|
|
717
|
+
from .instrument_specific import divide_HARPS
|
|
718
|
+
divide_HARPS(s)
|
|
719
|
+
|
|
720
|
+
if kwargs.get('do_adjust_means', False):
|
|
721
|
+
s.adjust_means()
|
|
722
|
+
|
|
723
|
+
return s
|
|
724
|
+
|
|
725
|
+
@classmethod
|
|
726
|
+
@lru_cache(maxsize=10)
|
|
727
|
+
def from_KOBE_file(cls, star, **kwargs):
|
|
728
|
+
assert 'KOBE' in star, f'{star} is not a KOBE star?'
|
|
729
|
+
import requests
|
|
730
|
+
from requests.auth import HTTPBasicAuth
|
|
731
|
+
from io import BytesIO
|
|
732
|
+
import tarfile
|
|
733
|
+
from astropy.io import fits
|
|
734
|
+
from .config import config
|
|
735
|
+
|
|
736
|
+
try:
|
|
737
|
+
config.kobe_password
|
|
738
|
+
except KeyError:
|
|
739
|
+
logger.error('please set arvi.config.kobe_password')
|
|
740
|
+
return
|
|
741
|
+
|
|
742
|
+
tar = None
|
|
743
|
+
fits_file = f'{star}_RVs.fits'
|
|
744
|
+
resp = requests.get(f'https://kobe.caha.es/internal/fitsfiles/{fits_file}',
|
|
745
|
+
auth=HTTPBasicAuth('kobeteam', config.kobe_password))
|
|
746
|
+
|
|
747
|
+
if resp.status_code != 200:
|
|
748
|
+
# something went wrong, try to extract the file by downloading the
|
|
749
|
+
# full tar.gz archive
|
|
750
|
+
|
|
751
|
+
logger.warning(f'could not find "{fits_file}" on server, trying to download full archive')
|
|
752
|
+
resp = requests.get('https://kobe.caha.es/internal/fitsfiles.tar.gz',
|
|
753
|
+
auth=HTTPBasicAuth('kobeteam', config.kobe_password))
|
|
754
|
+
|
|
755
|
+
if resp.status_code != 200:
|
|
756
|
+
logger.error(f'KOBE file not found for {star}')
|
|
757
|
+
return
|
|
758
|
+
|
|
759
|
+
tar = tarfile.open(fileobj=BytesIO(resp.content))
|
|
760
|
+
|
|
761
|
+
if fits_file not in tar.getnames():
|
|
762
|
+
logger.error(f'KOBE file not found for {star}')
|
|
763
|
+
return
|
|
764
|
+
|
|
765
|
+
hdul = fits.open(tar.extractfile(fits_file))
|
|
766
|
+
|
|
767
|
+
else:
|
|
768
|
+
# found the file on the server, read it directly
|
|
769
|
+
hdul = fits.open(BytesIO(resp.content))
|
|
770
|
+
|
|
771
|
+
s = cls(star, _child=True)
|
|
772
|
+
|
|
773
|
+
s.time = hdul[1].data['BJD']
|
|
774
|
+
|
|
775
|
+
s.vrad = hdul[1].data['RVc']
|
|
776
|
+
s.svrad = hdul[1].data['eRVc']
|
|
777
|
+
s.vrad_preNZP = hdul[1].data['RVd']
|
|
778
|
+
s.vrad_preNZP_err = hdul[1].data['eRVd']
|
|
779
|
+
|
|
780
|
+
s.drift = hdul[1].data['drift']
|
|
781
|
+
s.drift_err = hdul[1].data['e_drift']
|
|
782
|
+
|
|
783
|
+
s.nzp = hdul[1].data['NZP']
|
|
784
|
+
s.nzp_err = hdul[1].data['eNZP']
|
|
785
|
+
|
|
786
|
+
s.berv = hdul[1].data['BERV']
|
|
787
|
+
|
|
788
|
+
s.mask = np.full_like(s.time, True, dtype=bool)
|
|
789
|
+
s.instruments = ['CARMENES']
|
|
790
|
+
|
|
791
|
+
# so meta!
|
|
792
|
+
setattr(s, 'CARMENES', s)
|
|
793
|
+
|
|
794
|
+
s._kobe_result = hdul[1].data
|
|
795
|
+
|
|
796
|
+
if tar is not None:
|
|
797
|
+
tar.close()
|
|
798
|
+
hdul.close()
|
|
716
799
|
|
|
717
800
|
return s
|
|
718
801
|
|
|
@@ -1699,15 +1782,19 @@ class RV:
|
|
|
1699
1782
|
d = np.c_[
|
|
1700
1783
|
_s.time, _s.vrad, _s.svrad,
|
|
1701
1784
|
_s.fwhm, _s.fwhm_err,
|
|
1702
|
-
_s.rhk, _s.rhk_err,
|
|
1703
1785
|
_s.bispan, _s.bispan_err,
|
|
1786
|
+
_s.contrast, _s.contrast_err,
|
|
1787
|
+
_s.rhk, _s.rhk_err,
|
|
1788
|
+
_s.berv,
|
|
1704
1789
|
]
|
|
1705
1790
|
else:
|
|
1706
1791
|
d = np.c_[
|
|
1707
1792
|
_s.mtime, _s.mvrad, _s.msvrad,
|
|
1708
1793
|
_s.fwhm[_s.mask], _s.fwhm_err[_s.mask],
|
|
1709
|
-
_s.rhk[_s.mask], _s.rhk_err[_s.mask],
|
|
1710
1794
|
_s.bispan[_s.mask], _s.bispan_err[_s.mask],
|
|
1795
|
+
_s.contrast[_s.mask], _s.contrast_err[_s.mask],
|
|
1796
|
+
_s.rhk[_s.mask], _s.rhk_err[_s.mask],
|
|
1797
|
+
_s.berv[_s.mask],
|
|
1711
1798
|
]
|
|
1712
1799
|
if not save_nans:
|
|
1713
1800
|
if np.isnan(d).any():
|
|
@@ -1718,9 +1805,11 @@ class RV:
|
|
|
1718
1805
|
logger.warning(f'masking {nan_mask.sum()} observations with NaN in indicators')
|
|
1719
1806
|
|
|
1720
1807
|
header = '\t'.join(['bjd', 'vrad', 'svrad',
|
|
1721
|
-
'fwhm', '
|
|
1722
|
-
'
|
|
1723
|
-
'
|
|
1808
|
+
'fwhm', 'sig_fwhm',
|
|
1809
|
+
'bispan', 'sig_bispan',
|
|
1810
|
+
'contrast', 'sig_contrast',
|
|
1811
|
+
'rhk', 'sig_rhk',
|
|
1812
|
+
'berv',
|
|
1724
1813
|
])
|
|
1725
1814
|
header += '\n'
|
|
1726
1815
|
header += '\t'.join(['-' * len(c) for c in header.strip().split('\t')])
|
|
@@ -3,7 +3,7 @@ arvi/__init__.py,sha256=r3oaMVwQCjNTd6odg-ga9IRncn54i7tawZrIrvSRQOo,1012
|
|
|
3
3
|
arvi/ariadne_wrapper.py,sha256=YvilopJa9T4NwPcj3Nah_U8smSeSAU5-HYZMb_GJ-BQ,2232
|
|
4
4
|
arvi/berv.py,sha256=eKnpuPC1w45UrUEyFRbs9F9j3bXz3kxYzNXbnRgvFQM,17596
|
|
5
5
|
arvi/binning.py,sha256=jbemJ-bM3aqoOsqMo_OhWt_co-JAQ0nhdG_GpTsrRsw,15403
|
|
6
|
-
arvi/config.py,sha256=
|
|
6
|
+
arvi/config.py,sha256=W-v8NNhRd_PROu0wCMilXmOhYcju4xbUalugd5u7SRU,1881
|
|
7
7
|
arvi/dace_wrapper.py,sha256=ml0xC_KR-oXwEo6ysODzfpx-eP7VNbxURZSns31WbK4,18196
|
|
8
8
|
arvi/extra_data.py,sha256=WEEaYeLh52Zdv0uyHO72Ys5MWS3naTAP4wJV2BJ1mbk,2551
|
|
9
9
|
arvi/gaia_wrapper.py,sha256=icm3LJjG9pjP47_bM30NFyocUQO3X3SHS5yQ-Dwcr5w,4653
|
|
@@ -16,11 +16,11 @@ arvi/plots.py,sha256=WUm-sqN0aZTNXvE1kYpvmHTW9QPWqSCpKhNjwaqxjEk,29628
|
|
|
16
16
|
arvi/programs.py,sha256=C0Fbldjf-QEZYYJp5wBKP3h7zraD0O2mJC7Su967STg,4607
|
|
17
17
|
arvi/reports.py,sha256=ayPdZ4HZO9iCDdnADQ18gQPJh79o-1UYG7TYkvm9Lrc,4051
|
|
18
18
|
arvi/setup_logger.py,sha256=pBzaRTn0hntozjbaRVx0JIbWGuENkvYUApa6uB-FsRo,279
|
|
19
|
-
arvi/simbad_wrapper.py,sha256=
|
|
19
|
+
arvi/simbad_wrapper.py,sha256=iAAwEMcr1Hgu6lnDctmaCC1TLPCB8yAfHG0wxh9K9C8,5791
|
|
20
20
|
arvi/spectra.py,sha256=pTAWSW4vk96DWRQ-6l5mNJHUhiAyaPR-QDjZdOT6Ak0,7489
|
|
21
21
|
arvi/stats.py,sha256=ilzzGL9ew-SyVa9eEdrYCpD3DliOAwhoNUg9LIlHjzU,2583
|
|
22
22
|
arvi/stellar.py,sha256=veuL_y9kJvvApU_jqYQqP3EkcRnQffTc8Us6iT5UrFI,3790
|
|
23
|
-
arvi/timeseries.py,sha256=
|
|
23
|
+
arvi/timeseries.py,sha256=IYv_9qTuvxMQWK8As1xRM1_X-ZAxisz1FRCydG2-900,74264
|
|
24
24
|
arvi/translations.py,sha256=FBF_2OrpMQBG4GtV4_UOspiaxetiGCY7TQFcwZMMVuQ,838
|
|
25
25
|
arvi/utils.py,sha256=ihQcYvk_ix52CW8fVP16CKTVEamGU5gPNRneVcgDrWc,6534
|
|
26
26
|
arvi/data/info.svg,sha256=0IMI6W-eFoTD8acnury79WJJakpBwLa4qKS4JWpsXiI,489
|
|
@@ -29,8 +29,8 @@ arvi/data/obs_affected_blue_cryostat_issues.dat,sha256=z4AK17xfz8tGTDv1FjRvQFnio
|
|
|
29
29
|
arvi/data/extra/HD86226_PFS1.rdb,sha256=vfAozbrKHM_j8dYkCBJsuHyD01KEM1asghe2KInwVao,3475
|
|
30
30
|
arvi/data/extra/HD86226_PFS2.rdb,sha256=F2P7dB6gVyzCglUjNheB0hIHVClC5RmARrGwbrY1cfo,4114
|
|
31
31
|
arvi/data/extra/metadata.json,sha256=C69hIw6CohyES6BI9vDWjxwSz7N4VOYX0PCgjXtYFmU,178
|
|
32
|
-
arvi-0.1.
|
|
33
|
-
arvi-0.1.
|
|
34
|
-
arvi-0.1.
|
|
35
|
-
arvi-0.1.
|
|
36
|
-
arvi-0.1.
|
|
32
|
+
arvi-0.1.22.dist-info/LICENSE,sha256=6JfQgl7SpM55t0EHMFNMnNh-AdkpGW25MwMiTnhdWQg,1068
|
|
33
|
+
arvi-0.1.22.dist-info/METADATA,sha256=J__w4ZE5d8POUPhA7vd_zoLkyxY-62ddCGZ0r3bJXf8,1852
|
|
34
|
+
arvi-0.1.22.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
|
|
35
|
+
arvi-0.1.22.dist-info/top_level.txt,sha256=4EeiKDVLD45ztuflTGfQ3TU8GVjJg5Y95xS5XjI-utU,5
|
|
36
|
+
arvi-0.1.22.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|