Skip to content

Commit db3432c

Browse files
committed
issue #13
1 parent a40a334 commit db3432c

File tree

2 files changed

+59
-53
lines changed

2 files changed

+59
-53
lines changed

examples/examples_2023_release/introductory_tutorial.ipynb

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -280,18 +280,13 @@
280280
"name": "stdout",
281281
"output_type": "stream",
282282
"text": [
283-
"3%, 3%, 3%, 3%, 3%, 3%, 3% ...\n"
283+
"3%\n"
284284
]
285285
}
286286
],
287287
"source": [
288288
"#NBVAL_CHECK_OUTPUT\n",
289-
"print(\n",
290-
" \", \".join(\n",
291-
" [f\"{100*err:1.0f}%\" for err in entry_pp.measurements[0].systematic_norm_err[:7]]\n",
292-
" ),\n",
293-
" \"...\",\n",
294-
")"
289+
"print(f\"{100*entry_pp.measurements[0].systematic_norm_err:1.0f}%\" )"
295290
]
296291
},
297292
{
@@ -1187,9 +1182,9 @@
11871182
],
11881183
"metadata": {
11891184
"kernelspec": {
1190-
"display_name": "Python 3 (ipykernel)",
1185+
"display_name": "Python (exft)",
11911186
"language": "python",
1192-
"name": "python3"
1187+
"name": "exft"
11931188
},
11941189
"language_info": {
11951190
"codemirror_mode": {

src/exfor_tools/distribution.py

Lines changed: 55 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,10 @@ class Distribution:
3737
y_errs (list): List of y error arrays.
3838
y_err_labels (str): Labels for y errors.
3939
rows (int): Number of data points.
40-
statistical_err (np.ndarray): Statistical errors.
41-
systematic_offset_err (np.ndarray): Systematic offset errors.
42-
systematic_norm_err (np.ndarray): Systematic normalization errors.
40+
statistical_err (float): Statistical errors.
41+
systematic_offset_err (float): Systematic offset errors.
42+
systematic_norm_err (float): Systematic normalization errors.
43+
other_fields (dict): any other optional fields,
4344
"""
4445

4546
def __init__(
@@ -52,8 +53,9 @@ def __init__(
5253
x_err: np.ndarray,
5354
y: np.ndarray,
5455
statistical_err: np.ndarray,
55-
systematic_norm_err: np.ndarray,
56-
systematic_offset_err: np.ndarray,
56+
systematic_norm_err: float,
57+
systematic_offset_err: float,
58+
other_fields: dict = {},
5759
xbounds=(-np.inf, np.inf),
5860
):
5961
"""
@@ -76,10 +78,12 @@ def __init__(
7678
Array of y values.
7779
statistical_err: np.ndarray
7880
Statistical errors.
79-
systematic_norm_err: np.ndarray
80-
Systematic normalization errors.
81-
systematic_offset_err: np.ndarray
82-
Systematic offset errors.
81+
systematic_norm_err: float
82+
Systematic normalization error
83+
systematic_offset_err: float
84+
Systematic offset error
85+
other_fields: dict
86+
any other optional fields,
8387
xbounds: tuple, optional
8488
Bounds for x values. Defaults to (-np.inf, np.inf).
8589
"""
@@ -103,9 +107,10 @@ def __init__(
103107

104108
self.notes = []
105109

106-
self.statistical_err = statistical_err[sort_by_x]
107-
self.systematic_norm_err = systematic_norm_err[sort_by_x]
108-
self.systematic_offset_err = systematic_offset_err[sort_by_x]
110+
self.statistical_err = statistical_err
111+
self.systematic_norm_err = systematic_norm_err
112+
self.systematic_offset_err = systematic_offset_err
113+
self.other_fields = other_fields
109114

110115
@classmethod
111116
def parse_errs_and_init(
@@ -205,6 +210,7 @@ def parse_errs_and_init(
205210
statistical_err,
206211
systematic_norm_err,
207212
systematic_offset_err,
213+
other_fields={label: field for label, field in zip(y_err_labels, y_errs)},
208214
xbounds=xbounds,
209215
)
210216

@@ -272,29 +278,24 @@ def determine_error_categories(
272278
err = y_errs[index]
273279
ratio = err / y
274280
if np.allclose(err, err[0]):
275-
systematic_offset_err.append(err)
276-
else:
277-
systematic_norm_err.append(ratio)
281+
systematic_offset_err.append(err[0])
282+
elif np.allclose(ratio, ratio[0]):
283+
systematic_norm_err.append(ratio[0])
278284

279285
if systematic_norm_err == []:
280-
systematic_norm_err = [np.zeros((rows))]
286+
systematic_norm_err = 0
281287
if systematic_offset_err == []:
282-
systematic_offset_err = [np.zeros((rows))]
283-
284-
systematic_norm_err = np.array(systematic_norm_err)
285-
systematic_offset_err = np.array(systematic_offset_err)
288+
systematic_offset_err = 0
286289

287290
if systematic_err_treatment == "independent":
288-
systematic_offset_err = np.sqrt(np.sum(systematic_offset_err**2, axis=0))
289-
systematic_norm_err = np.sqrt(np.sum(systematic_norm_err**2, axis=0))
291+
systematic_offset_err = np.sqrt(np.sum(np.array(systematic_offset_err)**2))
292+
systematic_norm_err = np.sqrt(np.sum(np.array(systematic_norm_err)**2))
290293
else:
291294
raise ValueError(
292295
f"Unknown systematic_err_treatment option: {systematic_err_treatment}"
293296
)
294297

295298
assert statistical_err.shape == (rows,)
296-
assert systematic_norm_err.shape == (rows,)
297-
assert systematic_offset_err.shape == (rows,)
298299

299300
return (
300301
statistical_err,
@@ -348,6 +349,7 @@ def parse_errs_and_init(
348349
d.statistical_err,
349350
d.systematic_norm_err,
350351
d.systematic_offset_err,
352+
d.other_fields,
351353
)
352354

353355
@classmethod
@@ -430,13 +432,11 @@ def to_dataframe(self, citation: str = "") -> pd.DataFrame:
430432
data["data"]["x_err"] = self.x_err.tolist()
431433

432434
if not np.allclose(self.systematic_norm_err, 0):
433-
data["data"][
434-
"systematic_normalization_error"
435-
] = self.systematic_norm_err.tolist()
435+
data["data"]["systematic_normalization_error"] = float(
436+
self.systematic_norm_err
437+
)
436438
if not np.allclose(self.systematic_offset_err, 0):
437-
data["data"][
438-
"systematic_offset_error"
439-
] = self.systematic_offset_err.tolist()
439+
data["data"]["systematic_offset_error"] = float(self.systematic_offset_err)
440440

441441
return pd.DataFrame([data])
442442

@@ -462,16 +462,21 @@ def from_dataframe(cls, dataframe: pd.DataFrame):
462462
x_err = np.zeros_like(x)
463463

464464
if "systematic_normalization_error" in row["data"]:
465-
systematic_norm_err = np.array(
465+
systematic_norm_err = float(
466466
row["data"]["systematic_normalization_error"]
467467
)
468468
else:
469-
systematic_norm_err = np.zeros_like(y)
469+
systematic_norm_err = 0
470470

471471
if "systematic_offset_error" in row["data"]:
472-
systematic_offset_err = np.array(row["data"]["systematic_offset_error"])
472+
systematic_offset_err = float(row["data"]["systematic_offset_error"])
473473
else:
474-
systematic_offset_err = np.zeros_like(y)
474+
systematic_offset_err = 0
475+
476+
other_fields = {}
477+
if "other_fields" in row["data"]:
478+
for key, field in row["data"]["other_fields"]:
479+
other_fields[key] = np.array(field)
475480

476481
measurements.append(
477482
cls(
@@ -485,6 +490,7 @@ def from_dataframe(cls, dataframe: pd.DataFrame):
485490
statistical_err,
486491
systematic_norm_err,
487492
systematic_offset_err,
493+
other_fields,
488494
)
489495
)
490496
return measurements
@@ -548,6 +554,7 @@ def parse_errs_and_init(
548554
d.statistical_err,
549555
d.systematic_norm_err,
550556
d.systematic_offset_err,
557+
d.other_fields,
551558
)
552559

553560
@classmethod
@@ -731,13 +738,11 @@ def to_dataframe(self, citation: str = "") -> pd.DataFrame:
731738
data["data"]["x_err"] = self.x_err.tolist()
732739

733740
if not np.allclose(self.systematic_norm_err, 0):
734-
data["data"][
735-
"systematic_normalization_error"
736-
] = self.systematic_norm_err.tolist()
741+
data["data"]["systematic_normalization_error"] = float(
742+
self.systematic_norm_err
743+
)
737744
if not np.allclose(self.systematic_offset_err, 0):
738-
data["data"][
739-
"systematic_offset_error"
740-
] = self.systematic_offset_err.tolist()
745+
data["data"]["systematic_offset_error"] = float(self.systematic_offset_err)
741746

742747
return pd.DataFrame([data])
743748

@@ -764,16 +769,16 @@ def from_dataframe(cls, dataframe: pd.DataFrame):
764769
x_err = np.zeros_like(x)
765770

766771
if "systematic_normalization_error" in row["data"]:
767-
systematic_norm_err = np.array(
772+
systematic_norm_err = float(
768773
row["data"]["systematic_normalization_error"]
769774
)
770775
else:
771-
systematic_norm_err = np.zeros_like(y)
776+
systematic_norm_err = 0
772777

773778
if "systematic_offset_error" in row["data"]:
774-
systematic_offset_err = np.array(row["data"]["systematic_offset_error"])
779+
systematic_offset_err = float(row["data"]["systematic_offset_error"])
775780
else:
776-
systematic_offset_err = np.zeros_like(y)
781+
systematic_offset_err = 0
777782

778783
if (
779784
"ex_energy" in row
@@ -788,6 +793,11 @@ def from_dataframe(cls, dataframe: pd.DataFrame):
788793
Ex_err = 0.0
789794
Ex_units = "MeV"
790795

796+
other_fields = {}
797+
if "other_fields" in row["data"]:
798+
for key, field in row["data"]["other_fields"]:
799+
other_fields[key] = np.array(field)
800+
791801
measurements.append(
792802
AngularDistribution(
793803
energy,
@@ -806,6 +816,7 @@ def from_dataframe(cls, dataframe: pd.DataFrame):
806816
statistical_err,
807817
systematic_norm_err,
808818
systematic_offset_err,
819+
other_fields,
809820
)
810821
)
811822

0 commit comments

Comments
 (0)