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 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
- raise NameError(f"unknown configuration name '{name}'")
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=5)
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', 'sfwhm',
1722
- 'rhk', 'srhk',
1723
- 'bispan', 'sbispan'
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')])
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: arvi
3
- Version: 0.1.20
3
+ Version: 0.1.22
4
4
  Summary: The Automated RV Inspector
5
5
  Author-email: João Faria <joao.faria@unige.ch>
6
6
  License: MIT
@@ -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=ftqR38bV-zohTynPguiKSp4kSHPjiqJwEi-u6dFrFwk,1047
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=f6QYrMN0KzBH9KhdrUR5w6ZK00EoRIYr3Z9jS4CzP_s,5791
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=OVxzJSopPNmE47HRn7hQO_2SQdEpVU1OvR1VV8C1DM0,71307
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.20.dist-info/LICENSE,sha256=6JfQgl7SpM55t0EHMFNMnNh-AdkpGW25MwMiTnhdWQg,1068
33
- arvi-0.1.20.dist-info/METADATA,sha256=wScAhfEK59QQD1OdPPhv-NHAdYjQznKOPebHA5XVmRQ,1852
34
- arvi-0.1.20.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
35
- arvi-0.1.20.dist-info/top_level.txt,sha256=4EeiKDVLD45ztuflTGfQ3TU8GVjJg5Y95xS5XjI-utU,5
36
- arvi-0.1.20.dist-info/RECORD,,
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