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.
Files changed (47) hide show
  1. lfkit/__init__.py +19 -0
  2. lfkit/_version.py +24 -0
  3. lfkit/api/__init__.py +0 -0
  4. lfkit/api/corrections.py +308 -0
  5. lfkit/api/lumfunc.py +914 -0
  6. lfkit/corrections/__init__.py +0 -0
  7. lfkit/corrections/color_anchors.py +176 -0
  8. lfkit/corrections/filters.py +185 -0
  9. lfkit/corrections/kcorrect_backend.py +149 -0
  10. lfkit/corrections/kcorrect_from_color.py +111 -0
  11. lfkit/corrections/kcorrect_grids.py +242 -0
  12. lfkit/corrections/poggianti1997.py +386 -0
  13. lfkit/corrections/responses.py +183 -0
  14. lfkit/cosmo/__init__.py +0 -0
  15. lfkit/cosmo/cosmology.py +211 -0
  16. lfkit/data/demo_catalogs/fake_magnitude_limited_catalog.csv +201 -0
  17. lfkit/data/kcorrect/grids/kcorrect__bessell__z0.0000_4.0__Nz801__bsnone.npz +0 -0
  18. lfkit/data/kcorrect/grids/kcorrect__decam__z0.0000_4.0__Nz801__bsnone.npz +0 -0
  19. lfkit/data/kcorrect/grids/kcorrect__sdss__z0.0000_4.0__Nz801__bsnone.npz +0 -0
  20. lfkit/data/kcorrect/grids/kcorrect__subaru_suprimecam__z0.0000_4.0__Nz801__bsnone.npz +0 -0
  21. lfkit/data/poggianti1997/__init__.py +0 -0
  22. lfkit/data/poggianti1997/ecorr.csv +603 -0
  23. lfkit/data/poggianti1997/filters.csv +516 -0
  24. lfkit/data/poggianti1997/kcorr.csv +490 -0
  25. lfkit/data/poggianti1997/kcorrv.csv +37 -0
  26. lfkit/data/poggianti1997/sed.csv +295 -0
  27. lfkit/photometry/__init__.py +0 -0
  28. lfkit/photometry/catalog_completeness.py +381 -0
  29. lfkit/photometry/lf_integrals.py +500 -0
  30. lfkit/photometry/lf_parameter_models.py +386 -0
  31. lfkit/photometry/lf_redshift_density.py +238 -0
  32. lfkit/photometry/luminosities.py +426 -0
  33. lfkit/photometry/luminosity_function.py +707 -0
  34. lfkit/photometry/magnitudes.py +214 -0
  35. lfkit/utils/__init__.py +0 -0
  36. lfkit/utils/download_poggianti97_data.py +70 -0
  37. lfkit/utils/evaluators.py +104 -0
  38. lfkit/utils/interpolation.py +216 -0
  39. lfkit/utils/io.py +240 -0
  40. lfkit/utils/types.py +27 -0
  41. lfkit/utils/units.py +160 -0
  42. lfkit/utils/validators.py +63 -0
  43. py_lfkit-0.1.4.dist-info/METADATA +94 -0
  44. py_lfkit-0.1.4.dist-info/RECORD +47 -0
  45. py_lfkit-0.1.4.dist-info/WHEEL +5 -0
  46. py_lfkit-0.1.4.dist-info/licenses/LICENSE +21 -0
  47. 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)
File without changes
@@ -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
File without changes