Skip to content

Commit 8977eda

Browse files
committed
fmt and fix ex energy parsing
1 parent 1ae65c1 commit 8977eda

File tree

3 files changed

+14
-26
lines changed

3 files changed

+14
-26
lines changed

src/exfor_tools/distribution.py

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -552,18 +552,10 @@ def to_json(self, citation: str = "") -> str:
552552
return json.dumps(data, indent=4)
553553

554554
@classmethod
555-
def from_json(cls, json_data: list):
556-
"""
557-
Constructs a list of AngularDistribution objects from JSON data.
558-
Parameters:
559-
json_data: list
560-
A list of dictionaries containing the JSON data.
561-
Returns:
562-
list:
563-
A list of AngularDistribution objects.
564-
"""
555+
def from_json(cls, json_file):
556+
data = json.load(json_file)
565557
measurements = []
566-
for measurement in json_data:
558+
for measurement in data:
567559
subentry = measurement["EXFORAccessionNumber"]
568560
quantity = data_types_json.get(measurement["type"], "unknown")
569561
x_units = measurement["data"]["angle-units"]

src/exfor_tools/exfor_entry.py

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,23 @@
33
"""
44

55
import numpy as np
6-
7-
from x4i3.exfor_reactions import X4Reaction
86
from x4i3.exfor_column_parsing import (
97
errorSuffix,
108
resolutionFWSuffix,
119
resolutionHWSuffix,
1210
)
13-
from .db import __EXFOR_DB__
11+
from x4i3.exfor_reactions import X4Reaction
1412

15-
from .parsing import quantity_matches, quantity_symbols
16-
from .distribution import AngularDistribution
1713
from . import reaction as rxn
14+
from .db import __EXFOR_DB__
15+
from .distribution import AngularDistribution
16+
from .parsing import quantity_matches, quantity_symbols
1817

1918

2019
def attempt_parse_subentry(MeasurementClass, *args, **kwargs):
2120
failed_parses = {}
2221
measurements = []
22+
measurements = MeasurementClass.parse_subentry(*args, **kwargs)
2323
try:
2424
measurements = MeasurementClass.parse_subentry(*args, **kwargs)
2525
except Exception as e:
@@ -92,7 +92,6 @@ def extract_err_analysis(common_subent):
9292

9393

9494
class ExforEntry:
95-
9695
def __init__(
9796
self,
9897
entry: str,
@@ -173,7 +172,6 @@ def __init__(
173172
self.failed_parses = {}
174173

175174
for key, data_set in entry_datasets.items():
176-
177175
if not isinstance(data_set.reaction[0], X4Reaction):
178176
# TODO handle ReactionCombinations
179177
continue
@@ -189,7 +187,6 @@ def __init__(
189187
and filter_subentries(data_set, **filter_kwargs)
190188
and rxn.is_match(self.reaction, data_set, self.vocal)
191189
):
192-
193190
measurements, failed_parses = attempt_parse_subentry(
194191
MeasurementClass,
195192
key[1],

src/exfor_tools/parsing.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
from functools import reduce
22

33
import numpy as np
4-
54
from x4i3.exfor_column_parsing import (
65
X4ColumnParser,
76
X4IndependentColumnPair,
7+
X4MissingErrorColumnPair,
88
angDistUnits,
99
angleParserList,
1010
baseDataKeys,
@@ -19,10 +19,8 @@
1919
resolutionFWSuffix,
2020
resolutionHWSuffix,
2121
variableSuffix,
22-
X4MissingErrorColumnPair,
2322
)
2423

25-
2624
# these are the supported quantities at the moment
2725
quantity_matches = {
2826
"dXS/dA": [["DA"], ["PAR", "DA"]],
@@ -113,7 +111,6 @@ def parse_differential_data(
113111
# parse errors
114112
xs_err = []
115113
for label in data_error_columns:
116-
117114
# parse error column
118115
err_parser = X4ColumnParser(
119116
match_labels=reduce(
@@ -162,10 +159,12 @@ def parse_ex_energy(data_set):
162159
if missing_Ex:
163160
return Ex, Ex, None
164161

165-
if Ex[0][-3:] == "-CM":
166-
raise NotImplementedError("Incident energy in CM frame!")
167-
168162
Ex_err = reduce(condenseColumn, [c.getError(data_set) for c in energyExParserList])
163+
missing_Ex_err = np.all([a is None for a in Ex_err[2:]])
164+
if missing_Ex_err:
165+
Ex_err = np.zeros_like(Ex)
166+
return Ex, Ex_err, Ex_units
167+
169168
if Ex_err[1] != Ex_units:
170169
raise ValueError(
171170
f"Inconsistent units for Ex and Ex error: {Ex_units} and {Ex_err[1]}"

0 commit comments

Comments
 (0)