py-lfkit 0.1.4__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.
- lfkit/__init__.py +19 -0
- lfkit/_version.py +24 -0
- lfkit/api/__init__.py +0 -0
- lfkit/api/corrections.py +308 -0
- lfkit/api/lumfunc.py +914 -0
- lfkit/corrections/__init__.py +0 -0
- lfkit/corrections/color_anchors.py +176 -0
- lfkit/corrections/filters.py +185 -0
- lfkit/corrections/kcorrect_backend.py +149 -0
- lfkit/corrections/kcorrect_from_color.py +111 -0
- lfkit/corrections/kcorrect_grids.py +242 -0
- lfkit/corrections/poggianti1997.py +386 -0
- lfkit/corrections/responses.py +183 -0
- lfkit/cosmo/__init__.py +0 -0
- lfkit/cosmo/cosmology.py +211 -0
- lfkit/data/demo_catalogs/fake_magnitude_limited_catalog.csv +201 -0
- lfkit/data/kcorrect/grids/kcorrect__bessell__z0.0000_4.0__Nz801__bsnone.npz +0 -0
- lfkit/data/kcorrect/grids/kcorrect__decam__z0.0000_4.0__Nz801__bsnone.npz +0 -0
- lfkit/data/kcorrect/grids/kcorrect__sdss__z0.0000_4.0__Nz801__bsnone.npz +0 -0
- lfkit/data/kcorrect/grids/kcorrect__subaru_suprimecam__z0.0000_4.0__Nz801__bsnone.npz +0 -0
- lfkit/data/poggianti1997/__init__.py +0 -0
- lfkit/data/poggianti1997/ecorr.csv +603 -0
- lfkit/data/poggianti1997/filters.csv +516 -0
- lfkit/data/poggianti1997/kcorr.csv +490 -0
- lfkit/data/poggianti1997/kcorrv.csv +37 -0
- lfkit/data/poggianti1997/sed.csv +295 -0
- lfkit/photometry/__init__.py +0 -0
- lfkit/photometry/catalog_completeness.py +381 -0
- lfkit/photometry/lf_integrals.py +500 -0
- lfkit/photometry/lf_parameter_models.py +386 -0
- lfkit/photometry/lf_redshift_density.py +238 -0
- lfkit/photometry/luminosities.py +426 -0
- lfkit/photometry/luminosity_function.py +707 -0
- lfkit/photometry/magnitudes.py +214 -0
- lfkit/utils/__init__.py +0 -0
- lfkit/utils/download_poggianti97_data.py +70 -0
- lfkit/utils/evaluators.py +104 -0
- lfkit/utils/interpolation.py +216 -0
- lfkit/utils/io.py +240 -0
- lfkit/utils/types.py +27 -0
- lfkit/utils/units.py +160 -0
- lfkit/utils/validators.py +63 -0
- py_lfkit-0.1.4.dist-info/METADATA +94 -0
- py_lfkit-0.1.4.dist-info/RECORD +47 -0
- py_lfkit-0.1.4.dist-info/WHEEL +5 -0
- py_lfkit-0.1.4.dist-info/licenses/LICENSE +21 -0
- py_lfkit-0.1.4.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
"""Response / filter-curve utilities for kcorrect.
|
|
2
|
+
|
|
3
|
+
This module handles:
|
|
4
|
+
- discovering where kcorrect response .dat files live
|
|
5
|
+
- listing and validating available responses
|
|
6
|
+
- writing new response .dat files in kcorrect format (for custom surveys)
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
import inspect
|
|
12
|
+
from functools import lru_cache
|
|
13
|
+
from pathlib import Path
|
|
14
|
+
from typing import Iterable
|
|
15
|
+
|
|
16
|
+
import numpy as np
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
@lru_cache(maxsize=8)
|
|
20
|
+
def discover_response_dir_auto() -> Path:
|
|
21
|
+
"""Locate the kcorrect response directory (AUTO discovery), cached.
|
|
22
|
+
|
|
23
|
+
Strategy:
|
|
24
|
+
1) Probe a Kcorrect instance for common directory attributes.
|
|
25
|
+
2) Fallback: search inside installed kcorrect package for ``*.dat`` files.
|
|
26
|
+
|
|
27
|
+
Returns:
|
|
28
|
+
Path to a directory containing ``*.dat`` response files.
|
|
29
|
+
|
|
30
|
+
Raises:
|
|
31
|
+
FileNotFoundError: If no response directory can be found.
|
|
32
|
+
"""
|
|
33
|
+
try:
|
|
34
|
+
import kcorrect.kcorrect as kk # local import to avoid heavy import at module load
|
|
35
|
+
|
|
36
|
+
kc = kk.Kcorrect(responses=["sdss_r0"])
|
|
37
|
+
for attr in (
|
|
38
|
+
"response_dir",
|
|
39
|
+
"responses_dir",
|
|
40
|
+
"response_dirname",
|
|
41
|
+
"filters_dir",
|
|
42
|
+
"filter_dir",
|
|
43
|
+
"response_path",
|
|
44
|
+
):
|
|
45
|
+
if hasattr(kc, attr):
|
|
46
|
+
p = Path(getattr(kc, attr))
|
|
47
|
+
if p.exists():
|
|
48
|
+
return p
|
|
49
|
+
except Exception:
|
|
50
|
+
pass
|
|
51
|
+
|
|
52
|
+
try:
|
|
53
|
+
import kcorrect as _kcorrect_pkg # type: ignore
|
|
54
|
+
except Exception as e:
|
|
55
|
+
raise FileNotFoundError(
|
|
56
|
+
"Could not import kcorrect to discover response directory automatically."
|
|
57
|
+
) from e
|
|
58
|
+
|
|
59
|
+
base = Path(_kcorrect_pkg.__file__).resolve().parent
|
|
60
|
+
candidates = [
|
|
61
|
+
base,
|
|
62
|
+
base / "data",
|
|
63
|
+
base / "responses",
|
|
64
|
+
base / "response",
|
|
65
|
+
base / "filters",
|
|
66
|
+
]
|
|
67
|
+
|
|
68
|
+
for c in candidates:
|
|
69
|
+
if c.exists() and any(c.glob("*.dat")):
|
|
70
|
+
return c
|
|
71
|
+
|
|
72
|
+
dats = list(base.rglob("*.dat"))
|
|
73
|
+
if not dats:
|
|
74
|
+
raise FileNotFoundError(
|
|
75
|
+
"Could not locate kcorrect response .dat files automatically. "
|
|
76
|
+
"Pass response_dir=... explicitly."
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
# choose the most common parent directory among *.dat files
|
|
80
|
+
from collections import Counter
|
|
81
|
+
|
|
82
|
+
parent = Counter([p.parent for p in dats]).most_common(1)[0][0]
|
|
83
|
+
return Path(parent)
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def _normalize_response_dir_key(response_dir: str | Path | None) -> str:
|
|
87
|
+
if response_dir is None:
|
|
88
|
+
return "__AUTO__"
|
|
89
|
+
return str(Path(response_dir).resolve())
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
@lru_cache(maxsize=32)
|
|
93
|
+
def _cached_available_responses(response_dir_key: str) -> tuple[str, ...]:
|
|
94
|
+
"""Cached list of available responses for a directory key."""
|
|
95
|
+
if response_dir_key == "__AUTO__":
|
|
96
|
+
rdir = discover_response_dir_auto()
|
|
97
|
+
else:
|
|
98
|
+
rdir = Path(response_dir_key)
|
|
99
|
+
|
|
100
|
+
if not rdir.exists():
|
|
101
|
+
raise FileNotFoundError(f"response_dir does not exist: {rdir}")
|
|
102
|
+
|
|
103
|
+
return tuple(sorted(p.stem for p in rdir.glob("*.dat")))
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
def list_available_responses(response_dir: str | Path | None = None) -> list[str]:
|
|
107
|
+
"""List available kcorrect response (filter) names."""
|
|
108
|
+
key = _normalize_response_dir_key(response_dir)
|
|
109
|
+
return list(_cached_available_responses(key))
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
def require_responses(
|
|
113
|
+
responses: Iterable[str],
|
|
114
|
+
response_dir: str | Path | None = None,
|
|
115
|
+
) -> None:
|
|
116
|
+
"""Validate that requested response names exist in response_dir (or AUTO)."""
|
|
117
|
+
key = _normalize_response_dir_key(response_dir)
|
|
118
|
+
avail = set(_cached_available_responses(key))
|
|
119
|
+
missing = [str(r) for r in responses if str(r) not in avail]
|
|
120
|
+
if missing:
|
|
121
|
+
example = sorted(list(avail))[:25]
|
|
122
|
+
raise ValueError(
|
|
123
|
+
f"Missing kcorrect responses: {missing}. Example available: {example} ..."
|
|
124
|
+
)
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
def kcorrect_supports_response_dir() -> bool:
|
|
128
|
+
"""Return True if installed kcorrect.Kcorrect supports response_dir=..."""
|
|
129
|
+
try:
|
|
130
|
+
import kcorrect.kcorrect as kk
|
|
131
|
+
|
|
132
|
+
sig = inspect.signature(kk.Kcorrect)
|
|
133
|
+
return "response_dir" in sig.parameters
|
|
134
|
+
except Exception:
|
|
135
|
+
return False
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
def write_kcorrect_response(
|
|
139
|
+
*,
|
|
140
|
+
name: str,
|
|
141
|
+
wave_angst: np.ndarray,
|
|
142
|
+
throughput: np.ndarray,
|
|
143
|
+
out_dir: str | Path,
|
|
144
|
+
normalize: bool = True,
|
|
145
|
+
) -> str:
|
|
146
|
+
"""Write a kcorrect-compatible response file.
|
|
147
|
+
|
|
148
|
+
Args:
|
|
149
|
+
name: Response name (file will be {name}.dat).
|
|
150
|
+
wave_angst: Wavelength array in Å.
|
|
151
|
+
throughput: Dimensionless throughput (0..1).
|
|
152
|
+
out_dir: Output directory to write the .dat file into.
|
|
153
|
+
normalize: If True, normalize throughput to max=1.
|
|
154
|
+
|
|
155
|
+
Returns:
|
|
156
|
+
The response name (same as input name).
|
|
157
|
+
"""
|
|
158
|
+
wave_A = np.asarray(wave_angst, float)
|
|
159
|
+
thr = np.asarray(throughput, float)
|
|
160
|
+
|
|
161
|
+
if wave_A.ndim != 1 or thr.ndim != 1:
|
|
162
|
+
raise ValueError("wave_angst and throughput must be 1D arrays.")
|
|
163
|
+
if wave_A.size != thr.size:
|
|
164
|
+
raise ValueError("wave_angst and throughput must have same length.")
|
|
165
|
+
if wave_A.size < 10:
|
|
166
|
+
raise ValueError("Response curve must contain >=10 points.")
|
|
167
|
+
|
|
168
|
+
order = np.argsort(wave_A)
|
|
169
|
+
wave_A = wave_A[order]
|
|
170
|
+
thr = thr[order]
|
|
171
|
+
|
|
172
|
+
thr = np.clip(thr, 0.0, None)
|
|
173
|
+
if normalize and thr.max() > 0:
|
|
174
|
+
thr = thr / thr.max()
|
|
175
|
+
|
|
176
|
+
out_dir = Path(out_dir)
|
|
177
|
+
out_dir.mkdir(parents=True, exist_ok=True)
|
|
178
|
+
out_path = out_dir / f"{name}.dat"
|
|
179
|
+
|
|
180
|
+
header = "# kcorrect response file\n# wavelength [Angstrom] throughput\n"
|
|
181
|
+
|
|
182
|
+
np.savetxt(out_path, np.column_stack([wave_A, thr]), header=header)
|
|
183
|
+
return str(name)
|
lfkit/cosmo/__init__.py
ADDED
|
File without changes
|
lfkit/cosmo/cosmology.py
ADDED
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
"""Cosmology utilities for LFKit.
|
|
2
|
+
|
|
3
|
+
This module provides wrappers around PyCCL cosmology
|
|
4
|
+
objects and background calculations.
|
|
5
|
+
|
|
6
|
+
It standardizes how cosmology instances are created and how
|
|
7
|
+
lookback time is computed, ensuring consistent behavior across LFKit.
|
|
8
|
+
|
|
9
|
+
All returned quantities are NumPy arrays of dtype float.
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
from __future__ import annotations
|
|
13
|
+
|
|
14
|
+
from typing import TYPE_CHECKING, Any
|
|
15
|
+
|
|
16
|
+
import numpy as np
|
|
17
|
+
from numpy.typing import ArrayLike, NDArray
|
|
18
|
+
import pyccl as ccl
|
|
19
|
+
|
|
20
|
+
if TYPE_CHECKING:
|
|
21
|
+
Cosmology = ccl.Cosmology
|
|
22
|
+
else:
|
|
23
|
+
Cosmology = object
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
__all__ = (
|
|
27
|
+
"C_KM_S",
|
|
28
|
+
"cosmo_object",
|
|
29
|
+
"lookback_time_gyr",
|
|
30
|
+
"luminosity_distance_mpc",
|
|
31
|
+
"comoving_distance_mpc",
|
|
32
|
+
"distance_modulus",
|
|
33
|
+
"differential_comoving_volume",
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
C_KM_S = 299792.458
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def cosmo_object(
|
|
40
|
+
*,
|
|
41
|
+
instance: Cosmology | None = None,
|
|
42
|
+
**params: Any,
|
|
43
|
+
) -> Cosmology:
|
|
44
|
+
"""Return a PyCCL cosmology object.
|
|
45
|
+
|
|
46
|
+
This function provides a standardized way to obtain a
|
|
47
|
+
``pyccl.Cosmology`` instance within LFKit.
|
|
48
|
+
|
|
49
|
+
Behavior:
|
|
50
|
+
1. If ``instance`` is provided, it is returned unchanged.
|
|
51
|
+
2. Else if cosmological parameters are provided, a new
|
|
52
|
+
``ccl.Cosmology`` is constructed using those parameters.
|
|
53
|
+
3. Else, a default ``ccl.CosmologyVanillaLCDM`` is returned.
|
|
54
|
+
|
|
55
|
+
Args:
|
|
56
|
+
instance: Pre-built ``ccl.Cosmology`` object.
|
|
57
|
+
**params: Cosmological parameters passed directly to
|
|
58
|
+
``ccl.Cosmology(**params)``.
|
|
59
|
+
|
|
60
|
+
Returns:
|
|
61
|
+
A PyCCL cosmology object.
|
|
62
|
+
|
|
63
|
+
Raises:
|
|
64
|
+
ValueError: If both ``instance`` and cosmological parameters
|
|
65
|
+
are provided.
|
|
66
|
+
"""
|
|
67
|
+
if instance is not None:
|
|
68
|
+
if params:
|
|
69
|
+
raise ValueError("Pass instance OR parameters, not both.")
|
|
70
|
+
return instance
|
|
71
|
+
|
|
72
|
+
if params:
|
|
73
|
+
return ccl.Cosmology(**params)
|
|
74
|
+
|
|
75
|
+
return ccl.CosmologyVanillaLCDM()
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def lookback_time_gyr(
|
|
79
|
+
cosmo_obj: Cosmology,
|
|
80
|
+
z: ArrayLike,
|
|
81
|
+
) -> NDArray[np.float64]:
|
|
82
|
+
"""Compute lookback time in gigayears.
|
|
83
|
+
|
|
84
|
+
This function evaluates the cosmological lookback time using
|
|
85
|
+
PyCCL background calculations.
|
|
86
|
+
|
|
87
|
+
Args:
|
|
88
|
+
cosmo_obj: A PyCCL cosmology object.
|
|
89
|
+
z: Redshift value or array-like of redshift values.
|
|
90
|
+
|
|
91
|
+
Returns:
|
|
92
|
+
NumPy array of lookback time values in gigayears.
|
|
93
|
+
"""
|
|
94
|
+
z = np.asarray(z, dtype=float)
|
|
95
|
+
a = 1.0 / (1.0 + z)
|
|
96
|
+
return np.asarray(ccl.background.lookback_time(cosmo_obj, a), dtype=float)
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
def luminosity_distance_mpc(
|
|
100
|
+
cosmo_obj: Cosmology,
|
|
101
|
+
z: ArrayLike,
|
|
102
|
+
) -> NDArray[np.float64]:
|
|
103
|
+
"""Compute luminosity distance in megaparsecs.
|
|
104
|
+
|
|
105
|
+
Args:
|
|
106
|
+
cosmo_obj: A PyCCL cosmology object.
|
|
107
|
+
z: Redshift value or array-like of redshift values.
|
|
108
|
+
|
|
109
|
+
Returns:
|
|
110
|
+
NumPy array of luminosity distances in Mpc.
|
|
111
|
+
"""
|
|
112
|
+
z = np.asarray(z, dtype=float)
|
|
113
|
+
a = 1.0 / (1.0 + z)
|
|
114
|
+
return np.asarray(ccl.luminosity_distance(cosmo_obj, a), dtype=float)
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
def comoving_distance_mpc(
|
|
118
|
+
cosmo_obj: Cosmology,
|
|
119
|
+
z: ArrayLike,
|
|
120
|
+
) -> NDArray[np.float64]:
|
|
121
|
+
"""Compute comoving radial distance in megaparsecs.
|
|
122
|
+
|
|
123
|
+
This follows the same explicit ``c / H(z)`` integral structure
|
|
124
|
+
used in the old code, rather than relying on a compact shortcut.
|
|
125
|
+
|
|
126
|
+
Args:
|
|
127
|
+
cosmo_obj: A PyCCL cosmology object.
|
|
128
|
+
z: Redshift value or array-like of redshift values.
|
|
129
|
+
|
|
130
|
+
Returns:
|
|
131
|
+
NumPy array of comoving radial distances in Mpc.
|
|
132
|
+
"""
|
|
133
|
+
z = np.asarray(z, dtype=float)
|
|
134
|
+
|
|
135
|
+
h = float(cosmo_obj["h"])
|
|
136
|
+
omega_m = float(cosmo_obj["Omega_c"] + cosmo_obj["Omega_b"])
|
|
137
|
+
omega_l = 1.0 - omega_m
|
|
138
|
+
|
|
139
|
+
h0 = 100.0 * h # km/s/Mpc
|
|
140
|
+
|
|
141
|
+
hubble_distance = C_KM_S / h0
|
|
142
|
+
ez = np.sqrt(omega_m * (1.0 + z) ** 3 + omega_l)
|
|
143
|
+
|
|
144
|
+
distance = np.zeros_like(z, dtype=float)
|
|
145
|
+
integrand = hubble_distance / ez
|
|
146
|
+
|
|
147
|
+
for i in range(len(z)):
|
|
148
|
+
distance[i] = np.trapezoid(integrand[: i + 1], z[: i + 1])
|
|
149
|
+
|
|
150
|
+
return distance
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
def distance_modulus(
|
|
154
|
+
cosmo_obj: Cosmology,
|
|
155
|
+
z: ArrayLike,
|
|
156
|
+
h: float | None = None,
|
|
157
|
+
) -> NDArray[np.float64]:
|
|
158
|
+
"""Compute distance modulus.
|
|
159
|
+
|
|
160
|
+
If ``h`` is provided, this uses the same convention as the old code:
|
|
161
|
+
|
|
162
|
+
``mu = 5 log10(d_L * h) + 25``
|
|
163
|
+
|
|
164
|
+
Args:
|
|
165
|
+
cosmo_obj: A PyCCL cosmology object.
|
|
166
|
+
z: Redshift value or array-like of redshift values.
|
|
167
|
+
h: Optional dimensionless Hubble parameter used to rescale the
|
|
168
|
+
luminosity distance before computing the modulus.
|
|
169
|
+
|
|
170
|
+
Returns:
|
|
171
|
+
NumPy array of distance modulus values.
|
|
172
|
+
"""
|
|
173
|
+
d_l = luminosity_distance_mpc(cosmo_obj, z)
|
|
174
|
+
if h is not None:
|
|
175
|
+
d_l = d_l * h
|
|
176
|
+
return np.asarray(5.0 * np.log10(d_l) + 25.0, dtype=float)
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
def differential_comoving_volume(
|
|
180
|
+
cosmo_obj: Cosmology,
|
|
181
|
+
z: ArrayLike,
|
|
182
|
+
frac_sky: float = 1.0,
|
|
183
|
+
) -> NDArray[np.float64]:
|
|
184
|
+
"""Compute differential comoving volume per unit redshift.
|
|
185
|
+
|
|
186
|
+
This follows the same structure as the old code:
|
|
187
|
+
|
|
188
|
+
``dV/dz = 4 pi f_sky chi(z)^2 c / H(z)``
|
|
189
|
+
|
|
190
|
+
Args:
|
|
191
|
+
cosmo_obj: A PyCCL cosmology object.
|
|
192
|
+
z: Redshift value or array-like of redshift values.
|
|
193
|
+
frac_sky: Fraction of sky covered by the survey.
|
|
194
|
+
|
|
195
|
+
Returns:
|
|
196
|
+
NumPy array of differential comoving volume values in
|
|
197
|
+
Mpc^3 per unit redshift.
|
|
198
|
+
"""
|
|
199
|
+
z = np.asarray(z, dtype=float)
|
|
200
|
+
|
|
201
|
+
h = float(cosmo_obj["h"])
|
|
202
|
+
omega_m = float(cosmo_obj["Omega_c"] + cosmo_obj["Omega_b"])
|
|
203
|
+
omega_l = 1.0 - omega_m
|
|
204
|
+
|
|
205
|
+
h0 = 100.0 * h # km/s/Mpc
|
|
206
|
+
|
|
207
|
+
chi = comoving_distance_mpc(cosmo_obj, z)
|
|
208
|
+
hz = h0 * np.sqrt(omega_m * (1.0 + z) ** 3 + omega_l)
|
|
209
|
+
|
|
210
|
+
prefactor = 4.0 * np.pi * frac_sky
|
|
211
|
+
return np.asarray(prefactor * C_KM_S * chi**2 / hz, dtype=float)
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
galaxy_id,ra_deg,dec_deg,z,m_app,band
|
|
2
|
+
fake-00000,32.55866171428779,28.188907002334165,0.01876110100369656,15.589552641209139,r
|
|
3
|
+
fake-00001,322.9320236027851,29.074684885897476,0.035718375057593205,15.51682132593073,r
|
|
4
|
+
fake-00002,10.439821153608992,-12.706305270725684,0.03702736702929397,15.674277516818826,r
|
|
5
|
+
fake-00003,86.69810089481294,14.02520984627497,0.037136606525340024,15.62062138214073,r
|
|
6
|
+
fake-00004,51.4878750599886,14.999012276116117,0.046673223135847895,15.944906380178335,r
|
|
7
|
+
fake-00005,279.6364586491987,-9.210428321217073,0.054520941849653934,16.435849281958593,r
|
|
8
|
+
fake-00006,71.35352179664324,-22.567813508146738,0.059520866895652044,16.046517557140955,r
|
|
9
|
+
fake-00007,327.8297617671187,-27.543182382856813,0.06212648128680224,16.27673000694812,r
|
|
10
|
+
fake-00008,236.25685415789644,16.640587651750714,0.06344363707687149,15.35206855336005,r
|
|
11
|
+
fake-00009,13.018575778090637,-0.6180154909856461,0.07938026260998855,16.264122198346048,r
|
|
12
|
+
fake-00010,1.9547402863321661,29.13241016969557,0.08594253476396863,16.068394289448463,r
|
|
13
|
+
fake-00011,18.596850125183614,-2.1015926283808173,0.1084486999077019,16.201104108744886,r
|
|
14
|
+
fake-00012,218.13306395318196,28.675018744430414,0.110488742156468,16.343007493241185,r
|
|
15
|
+
fake-00013,288.5334519093895,-5.305439868356407,0.11430340398616018,16.575289975543914,r
|
|
16
|
+
fake-00014,85.87901542585985,17.620929033598355,0.11715695432301368,17.04368748620109,r
|
|
17
|
+
fake-00015,305.78718345230624,-24.910843661290077,0.12207104398630293,16.311233572685676,r
|
|
18
|
+
fake-00016,20.60349845517374,3.3277026082658345,0.12241533499320316,16.789820628564502,r
|
|
19
|
+
fake-00017,288.34698731100343,18.123587219143452,0.12470524496266415,16.63364660809952,r
|
|
20
|
+
fake-00018,334.00635486202094,25.48210003319332,0.13304953158983646,16.774072789390623,r
|
|
21
|
+
fake-00019,277.959023677577,19.354985437045897,0.1382117256875169,17.291336556051437,r
|
|
22
|
+
fake-00020,251.3234822323094,-27.781756367929546,0.1392051319511778,17.1385278197845,r
|
|
23
|
+
fake-00021,301.6728787159379,-7.637859521595949,0.14629078750780838,17.48723953700004,r
|
|
24
|
+
fake-00022,14.454467836943913,-27.078091661168923,0.15042702352341322,17.004502227110738,r
|
|
25
|
+
fake-00023,72.64155985885994,-23.44306253312652,0.15608193956966837,16.867957657878367,r
|
|
26
|
+
fake-00024,44.97252455003151,10.518337720049047,0.16245522288389957,17.091610559540957,r
|
|
27
|
+
fake-00025,181.63115646947514,12.79549177870189,0.16460659134921124,17.274264451105562,r
|
|
28
|
+
fake-00026,268.267726198384,16.423240965097577,0.17630545549507867,17.35438256839901,r
|
|
29
|
+
fake-00027,226.80426404750352,21.92739288333977,0.17635842777191235,16.913504145234853,r
|
|
30
|
+
fake-00028,306.4071959142966,14.365888108590593,0.17689641590834682,17.329359088374137,r
|
|
31
|
+
fake-00029,55.87667727879272,18.052295526397923,0.1819837847505958,17.4211124542854,r
|
|
32
|
+
fake-00030,264.46359309665814,-27.062177410603244,0.1912514022286704,18.299850593940214,r
|
|
33
|
+
fake-00031,69.49493671280547,-15.927890973522086,0.1924083367831479,18.085145512216048,r
|
|
34
|
+
fake-00032,97.47315047440809,7.313866402514746,0.1936044955603819,17.13941614609369,r
|
|
35
|
+
fake-00033,255.5656910212694,21.48751827748939,0.2019134170499861,17.40455221593107,r
|
|
36
|
+
fake-00034,352.87372256352546,-29.72999250362045,0.2058833029226016,17.024384335028724,r
|
|
37
|
+
fake-00035,220.15569815174504,0.8777605269809885,0.20869777469016765,17.351912330133686,r
|
|
38
|
+
fake-00036,19.620113396866415,10.637243961863831,0.21300563255889446,17.702545297990156,r
|
|
39
|
+
fake-00037,221.87122917391181,-28.223562652283206,0.22035961169768573,18.070217973380316,r
|
|
40
|
+
fake-00038,15.246198568860155,-5.918666546796725,0.22332928670770952,17.41530052145709,r
|
|
41
|
+
fake-00039,318.2924560920542,23.73809288302181,0.23547091731029995,17.530810058219245,r
|
|
42
|
+
fake-00040,255.44818263622346,10.296768531351523,0.2416200623438414,17.05228612312066,r
|
|
43
|
+
fake-00041,62.32602471210116,-15.740498198364161,0.24375725220034214,17.76205027075003,r
|
|
44
|
+
fake-00042,33.019562096711304,21.16686777791476,0.2478907609453789,17.476184616099825,r
|
|
45
|
+
fake-00043,66.07196239691483,-9.118114595429141,0.25081240410632405,17.683062784614,r
|
|
46
|
+
fake-00044,352.8097846395093,21.200680268643566,0.26535576065523975,17.660402206553066,r
|
|
47
|
+
fake-00045,165.08183128505632,-12.063380932865668,0.2800221253705521,18.030420517827277,r
|
|
48
|
+
fake-00046,282.2691414029069,5.419215052988939,0.2804140789238845,17.450727943858567,r
|
|
49
|
+
fake-00047,229.10700315879967,-6.183595935129955,0.28395464916490815,17.575124984825862,r
|
|
50
|
+
fake-00048,206.06873398510945,-13.510496954695979,0.2883879881797555,18.861923530206145,r
|
|
51
|
+
fake-00049,52.24689167941789,23.193453730312154,0.29675498425676483,17.718303360938197,r
|
|
52
|
+
fake-00050,340.5688032809142,-18.74437908363052,0.31459845777544726,17.893001930316252,r
|
|
53
|
+
fake-00051,108.48334770529846,-24.911304525854213,0.322328013948209,18.965216237344166,r
|
|
54
|
+
fake-00052,208.08619769071518,-9.484383687260378,0.3263852541368283,19.362597635777924,r
|
|
55
|
+
fake-00053,251.9193400520638,13.058348858494053,0.32770103907935333,17.94336054982717,r
|
|
56
|
+
fake-00054,233.7239358883112,18.445896358576903,0.33396745859573923,18.260344154504644,r
|
|
57
|
+
fake-00055,338.61398749038665,29.92460220400589,0.34466820276841986,18.56883131758148,r
|
|
58
|
+
fake-00056,53.438036371220875,-12.218276579330105,0.34484683150617584,19.055321912258847,r
|
|
59
|
+
fake-00057,183.00698584089915,-5.52348293212307,0.35311044367699046,18.150309326757043,r
|
|
60
|
+
fake-00058,145.45238066667574,-21.790723318222422,0.35619222738674117,18.426604297725262,r
|
|
61
|
+
fake-00059,170.70074261374253,4.492315777382014,0.3593765717423535,18.801706848082123,r
|
|
62
|
+
fake-00060,42.918309431188064,29.854802235775033,0.36879938608597307,18.732011321983656,r
|
|
63
|
+
fake-00061,48.27405955419552,12.052860607239511,0.3717006166945085,18.463453492267554,r
|
|
64
|
+
fake-00062,100.10719648125266,5.712770424802304,0.37408838273927647,18.560766649939897,r
|
|
65
|
+
fake-00063,109.69365735389927,-6.45785442469236,0.3792851707511128,18.153383572686614,r
|
|
66
|
+
fake-00064,154.045156925286,24.91792561713329,0.38171630324462885,18.563768377390694,r
|
|
67
|
+
fake-00065,219.95551693318617,-0.1850042321790335,0.38595557167864364,18.575603135930262,r
|
|
68
|
+
fake-00066,228.4664822705747,-21.93798520121631,0.38739528245903126,18.757430118990438,r
|
|
69
|
+
fake-00067,148.2519227708053,-8.077292208051992,0.3977321761844008,18.533850795904637,r
|
|
70
|
+
fake-00068,147.16191939433097,-25.969999869133986,0.4025348426760145,18.91708530030669,r
|
|
71
|
+
fake-00069,78.34626961090632,-17.881257738673106,0.4045671068376371,19.116516469015416,r
|
|
72
|
+
fake-00070,211.79024942724297,-28.93987314000527,0.4227750673964561,18.904553752406574,r
|
|
73
|
+
fake-00071,114.13472807420564,-2.803205009990195,0.43188590207454336,19.016252006396957,r
|
|
74
|
+
fake-00072,12.981540339850932,8.07241589710783,0.4405570065585346,18.95200261639835,r
|
|
75
|
+
fake-00073,150.62401589646973,-9.402452257265534,0.45084705018149396,18.980412338375444,r
|
|
76
|
+
fake-00074,170.6877630324613,-4.777093709683373,0.45124964883677166,18.72965865265899,r
|
|
77
|
+
fake-00075,81.21343255351596,27.552556370674555,0.4513975177963021,19.093645524914116,r
|
|
78
|
+
fake-00076,206.08485592396164,15.117787294494931,0.454652697359715,18.963496779432095,r
|
|
79
|
+
fake-00077,203.67788415549154,2.451398216697074,0.4634152590548141,19.76925238923063,r
|
|
80
|
+
fake-00078,252.7207851997337,-12.927547493290486,0.4710992710459076,19.621125682273135,r
|
|
81
|
+
fake-00079,233.2614535924356,23.819807926379713,0.4936003651136839,19.30204724733981,r
|
|
82
|
+
fake-00080,234.87590034757136,-15.894172987160431,0.496149086032317,18.910645001746857,r
|
|
83
|
+
fake-00081,113.83709465665552,-10.479436168999376,0.5048108085830254,18.824456564163846,r
|
|
84
|
+
fake-00082,283.4755999149434,24.54388886537691,0.5241907173323734,19.709673763306824,r
|
|
85
|
+
fake-00083,197.6919780958846,1.772523317104342,0.5277655014036151,19.39904531432772,r
|
|
86
|
+
fake-00084,155.31055026476045,14.539076965078602,0.5296936931865112,19.48281905684554,r
|
|
87
|
+
fake-00085,225.36449313878055,5.444687649825967,0.5302107834580736,18.706221045085297,r
|
|
88
|
+
fake-00086,129.83664040209155,9.206352540569709,0.5322653433049422,19.649587789307187,r
|
|
89
|
+
fake-00087,184.58612805843296,-12.037002509110465,0.5323046377630055,19.484187219657237,r
|
|
90
|
+
fake-00088,265.2140478535993,-15.517676302400226,0.537662896604524,18.95764510961073,r
|
|
91
|
+
fake-00089,319.10503922053476,-10.650459169880085,0.5409259679330966,19.19406194314749,r
|
|
92
|
+
fake-00090,331.580591026269,-20.67350615499465,0.5447401875511085,19.466279100014585,r
|
|
93
|
+
fake-00091,181.3078530659157,22.458861917448445,0.5459592660957249,19.397080231211426,r
|
|
94
|
+
fake-00092,187.29904130660486,-13.005184004993156,0.5523737849019972,19.30125031672683,r
|
|
95
|
+
fake-00093,287.95334787498115,3.6893636648630768,0.5561097728906246,19.38162169888916,r
|
|
96
|
+
fake-00094,113.20224902791246,17.518465508482443,0.5596339039991509,19.343098252695007,r
|
|
97
|
+
fake-00095,301.45765044422467,17.029446562542812,0.5653979944351707,19.506533927844668,r
|
|
98
|
+
fake-00096,177.89099274627245,-3.6968244849484266,0.5687714154182114,19.980860525646122,r
|
|
99
|
+
fake-00097,41.70842076069662,-1.4245614847964605,0.5706044853103277,18.574383709845907,r
|
|
100
|
+
fake-00098,25.94129294625973,29.68210493610149,0.573452387257775,19.40046316582396,r
|
|
101
|
+
fake-00099,303.1175559742067,10.475848618741443,0.5760888622088611,19.554957676128566,r
|
|
102
|
+
fake-00100,20.004450086476044,18.878306587072963,0.5839410899620513,19.625798710111734,r
|
|
103
|
+
fake-00101,101.02011700811613,24.153238153153914,0.5891234136974108,19.411009452643384,r
|
|
104
|
+
fake-00102,120.2868145805565,17.255390173760354,0.5939413232818799,18.943847978227605,r
|
|
105
|
+
fake-00103,62.27800026897376,-18.889239302785946,0.5978490749009775,19.687624118546225,r
|
|
106
|
+
fake-00104,113.00161312871612,3.730244024254332,0.6062432823730026,20.207483833467066,r
|
|
107
|
+
fake-00105,267.3693240210308,-23.88635056112731,0.6229179837857403,19.12481228633064,r
|
|
108
|
+
fake-00106,5.285823681625477,9.175327593839903,0.6274414488598744,19.979715992795303,r
|
|
109
|
+
fake-00107,297.7824328274471,27.32096569126866,0.62960015894113,19.569857447900205,r
|
|
110
|
+
fake-00108,308.35728848684096,0.7639238580066787,0.668759486783015,19.795209974267486,r
|
|
111
|
+
fake-00109,134.01416634895733,-4.021650427933969,0.6693030108114687,19.449942695699125,r
|
|
112
|
+
fake-00110,55.30064366182853,-27.84943491491021,0.6699558965488434,19.703538471929846,r
|
|
113
|
+
fake-00111,216.3025468602291,27.58647133975322,0.6702744385758652,20.276657672539315,r
|
|
114
|
+
fake-00112,43.08212011136196,-23.819838952190473,0.6728682612861212,20.03405639332633,r
|
|
115
|
+
fake-00113,131.3709699881709,-27.535254401709185,0.6754565212870421,20.444875466751686,r
|
|
116
|
+
fake-00114,345.03450512435006,-15.236003309703692,0.6826309667126147,20.2739118586505,r
|
|
117
|
+
fake-00115,358.36721013010936,-26.068173964897056,0.6868020231839436,20.028921035600074,r
|
|
118
|
+
fake-00116,277.9577608876508,-2.6929294552942595,0.6903563823275297,20.497001856451543,r
|
|
119
|
+
fake-00117,111.94614357147583,0.965268075426744,0.6992712870408562,20.06860855794264,r
|
|
120
|
+
fake-00118,247.5594176997933,-11.245803058284965,0.70146275624347,20.211675507519416,r
|
|
121
|
+
fake-00119,253.94629157424458,-26.942371045506835,0.7050765830061553,19.829449062056497,r
|
|
122
|
+
fake-00120,139.62301025891392,-23.3039779050464,0.7092970408914773,19.96975517681343,r
|
|
123
|
+
fake-00121,230.71990845101737,-6.929737320604314,0.7131894348628859,19.714494678047178,r
|
|
124
|
+
fake-00122,3.8619521912434474,-26.36829295040783,0.7232655219098038,20.336085190788438,r
|
|
125
|
+
fake-00123,75.26075709680693,11.891383536594805,0.7564975204359073,19.67746022392296,r
|
|
126
|
+
fake-00124,189.031789068214,-17.57876750851128,0.7600362858114772,20.37412900262645,r
|
|
127
|
+
fake-00125,58.95046953298652,-11.87570587298169,0.7616806349552572,20.038415393463104,r
|
|
128
|
+
fake-00126,59.72647243555211,-6.3524533693141505,0.765314800800703,20.525737964158132,r
|
|
129
|
+
fake-00127,301.06954459808566,-5.003422015851127,0.7761994928959908,20.410269700056478,r
|
|
130
|
+
fake-00128,356.087880966098,-29.90035753951197,0.7833174558502357,20.805192039809295,r
|
|
131
|
+
fake-00129,200.14899409024142,-23.275777740078148,0.7947129352833631,20.456224831770975,r
|
|
132
|
+
fake-00130,302.0651031174168,21.765873824452683,0.7973769031696356,19.65777634915842,r
|
|
133
|
+
fake-00131,356.5157991574581,-29.92601624928551,0.7976806525250051,20.185414795960295,r
|
|
134
|
+
fake-00132,50.97451988475889,0.49004134877250527,0.8005331129895912,19.806689171805726,r
|
|
135
|
+
fake-00133,161.36842077156638,-0.6298796095675141,0.8011725193445182,20.03729332197187,r
|
|
136
|
+
fake-00134,141.32617770309116,-10.01435033936173,0.8053995245306612,20.75948675227579,r
|
|
137
|
+
fake-00135,28.817742112626608,-4.120378791213022,0.8070786536721872,20.458392127408118,r
|
|
138
|
+
fake-00136,271.91886220610803,16.834868251595058,0.8099657107173759,19.998688374065708,r
|
|
139
|
+
fake-00137,156.16044983613347,20.472222372897384,0.8221696497302208,19.922305484409776,r
|
|
140
|
+
fake-00138,168.95769630854446,-14.379087395084998,0.8228282543585209,20.29039155860299,r
|
|
141
|
+
fake-00139,54.242270572766465,-10.650573541936211,0.8386212463425058,19.89618207134707,r
|
|
142
|
+
fake-00140,65.13359480311253,-15.451028818300037,0.839867954580643,20.090448121376316,r
|
|
143
|
+
fake-00141,326.5573039762374,-1.208195966936092,0.8426514892347919,20.442057053022886,r
|
|
144
|
+
fake-00142,16.073672030740397,10.995501459528775,0.8433154713826764,20.73900036001062,r
|
|
145
|
+
fake-00143,83.82682257973426,-16.304827472194766,0.8491468005653388,20.56335288818212,r
|
|
146
|
+
fake-00144,105.1413589132302,-10.155855476708,0.8630993250992047,19.58539220989541,r
|
|
147
|
+
fake-00145,176.4711152645711,25.823077055349028,0.8661609175816147,20.501933291477222,r
|
|
148
|
+
fake-00146,211.12026228532653,-27.085842609182514,0.8696076272097758,20.42966238452063,r
|
|
149
|
+
fake-00147,177.58439130623998,-2.3538236856260264,0.8751235910013903,20.563723551272044,r
|
|
150
|
+
fake-00148,30.28152044047753,12.69348249580667,0.8962669655303024,21.03904901575279,r
|
|
151
|
+
fake-00149,87.72028346005688,-20.972759306551556,0.8986796375053409,19.757390912767498,r
|
|
152
|
+
fake-00150,303.6918185145148,-27.15755879967109,0.9008435431537696,20.278140498746918,r
|
|
153
|
+
fake-00151,229.53193217224526,-21.707677701688155,0.9121244107015948,20.720342272918522,r
|
|
154
|
+
fake-00152,233.69365804833876,25.129391611840973,0.9126382405039,19.96125769375506,r
|
|
155
|
+
fake-00153,241.27317192648778,-29.444413090732596,0.91575624536852,21.03921624285226,r
|
|
156
|
+
fake-00154,274.64508685423044,-18.70068151131889,0.9203486403250704,20.663031688556618,r
|
|
157
|
+
fake-00155,20.919053419721042,-28.12298922590133,0.9246905153820119,20.841211955565996,r
|
|
158
|
+
fake-00156,131.97901857574047,-23.362231946267805,0.9286947942120757,20.354998646943944,r
|
|
159
|
+
fake-00157,194.22987669420434,7.208957197697776,0.9310076977815963,20.845359717466856,r
|
|
160
|
+
fake-00158,121.84433398703737,-15.501665475654853,0.9362763615177766,20.94747591267198,r
|
|
161
|
+
fake-00159,304.0123943833871,4.152723025840608,0.9367135757192956,20.656091452285338,r
|
|
162
|
+
fake-00160,173.7261030914258,5.411722965967569,0.9390675469161417,20.66239542125845,r
|
|
163
|
+
fake-00161,276.7059322053765,20.96611998538674,0.9414549204278405,20.68081506969727,r
|
|
164
|
+
fake-00162,306.72558607722084,-29.715516425287564,0.942838868836632,20.28740342884963,r
|
|
165
|
+
fake-00163,181.7249338452593,21.202167560542005,0.945416523279575,20.544221710141844,r
|
|
166
|
+
fake-00164,327.43880779368595,7.14714518561844,0.9464400092275447,20.544964192998204,r
|
|
167
|
+
fake-00165,211.364618593313,-20.235390833702546,0.9676695854211942,20.783660902135146,r
|
|
168
|
+
fake-00166,306.09874758013984,16.376243288117042,0.9718192517565191,21.009288796795577,r
|
|
169
|
+
fake-00167,122.61268641294873,21.329492507435145,0.9786842577525812,20.30512138183417,r
|
|
170
|
+
fake-00168,179.57410507133469,-14.744190974750563,0.9890863197922877,20.65629980990538,r
|
|
171
|
+
fake-00169,191.30797476164798,25.127620854160853,0.9932873897912857,21.22836992962909,r
|
|
172
|
+
fake-00170,37.79269772258541,-2.732554182080531,0.9948810946711726,20.45331552072999,r
|
|
173
|
+
fake-00171,143.47890241255462,6.205467259999288,0.9974497943275716,20.431753964103905,r
|
|
174
|
+
fake-00172,330.2415621186034,29.078972017058618,0.9990240798286383,20.794000780110146,r
|
|
175
|
+
fake-00173,227.09960653130727,-8.307835281648039,1.0003891636602893,21.021891112796126,r
|
|
176
|
+
fake-00174,63.90236967730829,18.78956074920677,1.0008870533088265,20.731507992384806,r
|
|
177
|
+
fake-00175,121.98802881945778,-10.896052930292422,1.0255496571891176,21.249108332749024,r
|
|
178
|
+
fake-00176,68.97708347857194,17.95281133448946,1.0293709980699268,21.09249025899659,r
|
|
179
|
+
fake-00177,8.936327447486114,6.04403513175855,1.031731524694545,21.09257237544193,r
|
|
180
|
+
fake-00178,333.8857650614496,-17.018658286475915,1.0507288285965826,21.034323700181275,r
|
|
181
|
+
fake-00179,161.35463817247373,-5.158434372645817,1.0700430641454446,21.697519840955565,r
|
|
182
|
+
fake-00180,110.71262607148302,-10.9418619381863,1.0710959468433476,20.813329443110536,r
|
|
183
|
+
fake-00181,215.45178896078517,-25.313496415178168,1.0728141343734152,20.18764372081075,r
|
|
184
|
+
fake-00182,2.633204265485629,-28.20991379401815,1.0732015012404572,21.451208104806124,r
|
|
185
|
+
fake-00183,100.08795837629297,-9.211280675569144,1.0764313184893224,20.736538813885574,r
|
|
186
|
+
fake-00184,253.09204765160132,-28.857951130950806,1.0840968518871716,20.95106461988433,r
|
|
187
|
+
fake-00185,228.15711830493467,-20.070734545093497,1.0912110219420523,21.38693627104578,r
|
|
188
|
+
fake-00186,353.45014111531276,13.510999251052127,1.1000540957137535,20.38668068230072,r
|
|
189
|
+
fake-00187,223.32877547689586,12.485474141015274,1.1108929408683885,20.532348506949454,r
|
|
190
|
+
fake-00188,171.9021145059838,14.31482318744296,1.1128503367298361,20.414101478810068,r
|
|
191
|
+
fake-00189,274.11572274624274,-10.970809732201275,1.1238918483582663,20.71974120603635,r
|
|
192
|
+
fake-00190,325.1980339070591,23.40116742706173,1.1248076491351973,21.153471804039427,r
|
|
193
|
+
fake-00191,259.45054081860656,5.6298328817068555,1.1260134814202296,21.185577606031263,r
|
|
194
|
+
fake-00192,346.75604047777665,-22.43841949520241,1.1439502801329964,21.13590352042009,r
|
|
195
|
+
fake-00193,281.52186146574377,-21.37688031266795,1.1506854637573198,20.55853350360133,r
|
|
196
|
+
fake-00194,312.04851777429354,11.58572561578209,1.1546582208139222,20.25256766529105,r
|
|
197
|
+
fake-00195,41.07746562610939,-19.623363813475315,1.1613365815967098,21.093691400052204,r
|
|
198
|
+
fake-00196,263.66886107776355,0.4375620949225989,1.1633198890437915,20.91356057899252,r
|
|
199
|
+
fake-00197,158.43193182985272,29.50646855572264,1.165130649029935,21.243127098172096,r
|
|
200
|
+
fake-00198,199.1173688680591,-29.75954371599963,1.1709905984477396,21.339834797294525,r
|
|
201
|
+
fake-00199,235.47686741364842,-29.005211886146583,1.190926921226446,21.18231505402518,r
|
|
Binary file
|
|
Binary file
|
|
File without changes
|