brkraw 0.5.6__py3-none-any.whl → 0.5.7__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.
- brkraw/__init__.py +1 -1
- brkraw/apps/addon/dependencies.py +84 -8
- brkraw/apps/hook/core.py +21 -2
- brkraw/apps/loader/core.py +3 -6
- brkraw/apps/loader/info/scan.yaml +4 -0
- brkraw/apps/loader/info/study.yaml +2 -2
- brkraw/cli/commands/convert.py +12 -3
- brkraw/cli/commands/hook.py +14 -1
- brkraw/cli/commands/info.py +1 -1
- brkraw/cli/commands/prune.py +1 -1
- brkraw/cli/utils.py +11 -3
- brkraw/resolver/affine.py +28 -2
- {brkraw-0.5.6.dist-info → brkraw-0.5.7.dist-info}/METADATA +3 -3
- {brkraw-0.5.6.dist-info → brkraw-0.5.7.dist-info}/RECORD +17 -17
- {brkraw-0.5.6.dist-info → brkraw-0.5.7.dist-info}/WHEEL +0 -0
- {brkraw-0.5.6.dist-info → brkraw-0.5.7.dist-info}/entry_points.txt +0 -0
- {brkraw-0.5.6.dist-info → brkraw-0.5.7.dist-info}/licenses/LICENSE +0 -0
brkraw/__init__.py
CHANGED
|
@@ -17,11 +17,23 @@ RULE_KEYS = {"info_spec", "metadata_spec", "converter_hook"}
|
|
|
17
17
|
_SPEC_EXTS = (".yaml", ".yml")
|
|
18
18
|
|
|
19
19
|
|
|
20
|
-
def warn_dependencies(
|
|
20
|
+
def warn_dependencies(
|
|
21
|
+
target: Path,
|
|
22
|
+
*,
|
|
23
|
+
kind: str,
|
|
24
|
+
root: Optional[Union[str, Path]],
|
|
25
|
+
ignore_rules_dir: Optional[Path] = None,
|
|
26
|
+
ignore_specs_dir: Optional[Path] = None,
|
|
27
|
+
) -> bool:
|
|
21
28
|
paths = config_core.paths(root=root)
|
|
22
29
|
warned = False
|
|
23
30
|
if kind == "spec":
|
|
24
|
-
used_by_rules = rules_using_spec(
|
|
31
|
+
used_by_rules = rules_using_spec(
|
|
32
|
+
target,
|
|
33
|
+
paths.rules_dir,
|
|
34
|
+
root=paths.root,
|
|
35
|
+
ignore_dir=ignore_rules_dir,
|
|
36
|
+
)
|
|
25
37
|
if used_by_rules:
|
|
26
38
|
logger.warning(
|
|
27
39
|
"Spec %s is referenced by rules: %s",
|
|
@@ -29,7 +41,11 @@ def warn_dependencies(target: Path, *, kind: str, root: Optional[Union[str, Path
|
|
|
29
41
|
", ".join(sorted(used_by_rules)),
|
|
30
42
|
)
|
|
31
43
|
warned = True
|
|
32
|
-
included_by = specs_including_spec(
|
|
44
|
+
included_by = specs_including_spec(
|
|
45
|
+
target,
|
|
46
|
+
paths.specs_dir,
|
|
47
|
+
ignore_dir=ignore_specs_dir,
|
|
48
|
+
)
|
|
33
49
|
if included_by:
|
|
34
50
|
logger.warning(
|
|
35
51
|
"Spec %s is included by: %s",
|
|
@@ -54,12 +70,34 @@ def warn_dependencies(target: Path, *, kind: str, root: Optional[Union[str, Path
|
|
|
54
70
|
return warned
|
|
55
71
|
|
|
56
72
|
|
|
57
|
-
def
|
|
73
|
+
def _is_under(path: Path, base: Optional[Path]) -> bool:
|
|
74
|
+
if base is None:
|
|
75
|
+
return False
|
|
76
|
+
try:
|
|
77
|
+
path.relative_to(base)
|
|
78
|
+
except ValueError:
|
|
79
|
+
return False
|
|
80
|
+
return True
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
def rules_using_spec(
|
|
84
|
+
target: Union[str, Path],
|
|
85
|
+
rules_dir: Path,
|
|
86
|
+
*,
|
|
87
|
+
root: Optional[Union[str, Path]] = None,
|
|
88
|
+
ignore_dir: Optional[Path] = None,
|
|
89
|
+
) -> Set[str]:
|
|
58
90
|
used_by: Set[str] = set()
|
|
59
91
|
if not rules_dir.exists():
|
|
60
92
|
return used_by
|
|
93
|
+
if isinstance(target, Path):
|
|
94
|
+
target_path = target.resolve()
|
|
95
|
+
else:
|
|
96
|
+
target_path = None
|
|
61
97
|
files = list(rules_dir.rglob("*.yaml")) + list(rules_dir.rglob("*.yml"))
|
|
62
98
|
for path in files:
|
|
99
|
+
if _is_under(path, ignore_dir):
|
|
100
|
+
continue
|
|
63
101
|
data = yaml.safe_load(path.read_text(encoding="utf-8"))
|
|
64
102
|
if not isinstance(data, dict):
|
|
65
103
|
continue
|
|
@@ -70,17 +108,46 @@ def rules_using_spec(spec_name: str, rules_dir: Path) -> Set[str]:
|
|
|
70
108
|
if not isinstance(item, dict):
|
|
71
109
|
continue
|
|
72
110
|
use = item.get("use")
|
|
73
|
-
if isinstance(use, str)
|
|
111
|
+
if not isinstance(use, str):
|
|
112
|
+
continue
|
|
113
|
+
if target_path is None:
|
|
114
|
+
if Path(use).name == str(target):
|
|
115
|
+
used_by.add(path.name)
|
|
116
|
+
continue
|
|
117
|
+
if root is None:
|
|
118
|
+
continue
|
|
119
|
+
version = item.get("version") if isinstance(item.get("version"), str) else None
|
|
120
|
+
try:
|
|
121
|
+
resolved = resolve_spec_reference(
|
|
122
|
+
use,
|
|
123
|
+
category=key,
|
|
124
|
+
version=version,
|
|
125
|
+
root=root,
|
|
126
|
+
)
|
|
127
|
+
except Exception:
|
|
128
|
+
continue
|
|
129
|
+
if resolved.resolve() == target_path:
|
|
74
130
|
used_by.add(path.name)
|
|
75
131
|
return used_by
|
|
76
132
|
|
|
77
133
|
|
|
78
|
-
def specs_including_spec(
|
|
134
|
+
def specs_including_spec(
|
|
135
|
+
target: Union[str, Path],
|
|
136
|
+
specs_dir: Path,
|
|
137
|
+
*,
|
|
138
|
+
ignore_dir: Optional[Path] = None,
|
|
139
|
+
) -> Set[str]:
|
|
79
140
|
included_by: Set[str] = set()
|
|
80
141
|
if not specs_dir.exists():
|
|
81
142
|
return included_by
|
|
143
|
+
if isinstance(target, Path):
|
|
144
|
+
target_path = target.resolve()
|
|
145
|
+
else:
|
|
146
|
+
target_path = None
|
|
82
147
|
files = list(specs_dir.rglob("*.yaml")) + list(specs_dir.rglob("*.yml"))
|
|
83
148
|
for path in files:
|
|
149
|
+
if _is_under(path, ignore_dir):
|
|
150
|
+
continue
|
|
84
151
|
data = yaml.safe_load(path.read_text(encoding="utf-8"))
|
|
85
152
|
if not isinstance(data, dict):
|
|
86
153
|
continue
|
|
@@ -92,8 +159,17 @@ def specs_including_spec(spec_name: str, specs_dir: Path) -> Set[str]:
|
|
|
92
159
|
include_list = [include]
|
|
93
160
|
elif isinstance(include, list) and all(isinstance(item, str) for item in include):
|
|
94
161
|
include_list = include
|
|
95
|
-
|
|
96
|
-
|
|
162
|
+
for item in include_list:
|
|
163
|
+
inc_path = Path(item)
|
|
164
|
+
if not inc_path.is_absolute():
|
|
165
|
+
inc_path = (path.parent / inc_path).resolve()
|
|
166
|
+
if target_path is None:
|
|
167
|
+
if inc_path.name == str(target):
|
|
168
|
+
included_by.add(path.name)
|
|
169
|
+
break
|
|
170
|
+
elif inc_path == target_path:
|
|
171
|
+
included_by.add(path.name)
|
|
172
|
+
break
|
|
97
173
|
return included_by
|
|
98
174
|
|
|
99
175
|
|
brkraw/apps/hook/core.py
CHANGED
|
@@ -150,12 +150,18 @@ def uninstall_hook(
|
|
|
150
150
|
"transforms": [],
|
|
151
151
|
}
|
|
152
152
|
root_path = config_core.resolve_root(root)
|
|
153
|
+
namespace = entry.get("namespace") if isinstance(entry, dict) else None
|
|
153
154
|
for kind in ("specs", "pruner_specs", "rules", "transforms"):
|
|
154
155
|
for relpath in entry.get(kind, []) if isinstance(entry, dict) else []:
|
|
155
156
|
target_path = root_path / relpath
|
|
156
157
|
if not target_path.exists():
|
|
157
158
|
continue
|
|
158
|
-
if _has_dependencies(
|
|
159
|
+
if _has_dependencies(
|
|
160
|
+
target_path,
|
|
161
|
+
kind,
|
|
162
|
+
root=root_path,
|
|
163
|
+
namespace=namespace,
|
|
164
|
+
) and not force:
|
|
159
165
|
raise RuntimeError("Dependencies found; use --force to remove.")
|
|
160
166
|
target_path.unlink()
|
|
161
167
|
removed[kind].append(relpath)
|
|
@@ -587,9 +593,22 @@ def _has_dependencies(
|
|
|
587
593
|
kind: str,
|
|
588
594
|
*,
|
|
589
595
|
root: Optional[Union[str, Path]],
|
|
596
|
+
namespace: Optional[str] = None,
|
|
590
597
|
) -> bool:
|
|
591
598
|
try:
|
|
592
|
-
|
|
599
|
+
ignore_rules_dir = None
|
|
600
|
+
ignore_specs_dir = None
|
|
601
|
+
if namespace:
|
|
602
|
+
paths = config_core.paths(root=root)
|
|
603
|
+
ignore_rules_dir = paths.rules_dir / namespace
|
|
604
|
+
ignore_specs_dir = paths.specs_dir / namespace
|
|
605
|
+
return addon_deps.warn_dependencies(
|
|
606
|
+
target,
|
|
607
|
+
kind=_kind_to_remove(kind),
|
|
608
|
+
root=root,
|
|
609
|
+
ignore_rules_dir=ignore_rules_dir,
|
|
610
|
+
ignore_specs_dir=ignore_specs_dir,
|
|
611
|
+
)
|
|
593
612
|
except Exception:
|
|
594
613
|
return False
|
|
595
614
|
|
brkraw/apps/loader/core.py
CHANGED
|
@@ -565,7 +565,6 @@ class BrukerLoader:
|
|
|
565
565
|
|
|
566
566
|
if scope == 'scan':
|
|
567
567
|
if not as_dict:
|
|
568
|
-
config_core.configure_logging(root=base, stream=sys.stdout)
|
|
569
568
|
text = format_info_tables(
|
|
570
569
|
{"Scan(s)": scan_info},
|
|
571
570
|
width=width,
|
|
@@ -574,7 +573,7 @@ class BrukerLoader:
|
|
|
574
573
|
scan_transpose=scan_transpose,
|
|
575
574
|
float_decimals=float_decimals,
|
|
576
575
|
)
|
|
577
|
-
|
|
576
|
+
print(text)
|
|
578
577
|
return None
|
|
579
578
|
return scan_info
|
|
580
579
|
|
|
@@ -586,19 +585,17 @@ class BrukerLoader:
|
|
|
586
585
|
|
|
587
586
|
if scope == 'study':
|
|
588
587
|
if not as_dict:
|
|
589
|
-
config_core.configure_logging(root=base, stream=sys.stdout)
|
|
590
588
|
text = format_info_tables(
|
|
591
589
|
study_info,
|
|
592
590
|
width=width,
|
|
593
591
|
float_decimals=float_decimals,
|
|
594
592
|
)
|
|
595
|
-
|
|
593
|
+
print(text)
|
|
596
594
|
return None
|
|
597
595
|
return study_info
|
|
598
596
|
|
|
599
597
|
study_info['Scan(s)'] = scan_info
|
|
600
598
|
if not as_dict:
|
|
601
|
-
config_core.configure_logging(root=base, stream=sys.stdout)
|
|
602
599
|
text = format_info_tables(
|
|
603
600
|
study_info,
|
|
604
601
|
width=width,
|
|
@@ -607,7 +604,7 @@ class BrukerLoader:
|
|
|
607
604
|
scan_transpose=scan_transpose,
|
|
608
605
|
float_decimals=float_decimals,
|
|
609
606
|
)
|
|
610
|
-
|
|
607
|
+
print(text)
|
|
611
608
|
return None
|
|
612
609
|
return study_info
|
|
613
610
|
|
|
@@ -5,7 +5,7 @@ study:
|
|
|
5
5
|
description: "Study-level info mapping for Bruker datasets."
|
|
6
6
|
category: "info_spec"
|
|
7
7
|
transforms_source: "transform.py"
|
|
8
|
-
Study.
|
|
8
|
+
Study.Operator:
|
|
9
9
|
sources:
|
|
10
10
|
- file: subject
|
|
11
11
|
key: SUBJECT_referral
|
|
@@ -91,7 +91,7 @@ scan:
|
|
|
91
91
|
description: "Scan-level fallback info mapping for Bruker datasets."
|
|
92
92
|
category: "info_spec"
|
|
93
93
|
transforms_source: "transform.py"
|
|
94
|
-
Study.
|
|
94
|
+
Study.Operator:
|
|
95
95
|
sources:
|
|
96
96
|
- file: visu_pars
|
|
97
97
|
key: VisuStudyReferringPhysician
|
brkraw/cli/commands/convert.py
CHANGED
|
@@ -12,7 +12,7 @@ import logging
|
|
|
12
12
|
import os
|
|
13
13
|
import re
|
|
14
14
|
from pathlib import Path
|
|
15
|
-
from typing import Any, Mapping, Optional, Dict, List, Tuple, cast, get_args
|
|
15
|
+
from typing import Any, Mapping, Optional, Dict, List, Tuple, Sequence, cast, get_args
|
|
16
16
|
|
|
17
17
|
import numpy as np
|
|
18
18
|
from brkraw.cli.utils import load
|
|
@@ -387,6 +387,8 @@ def cmd_convert(args: argparse.Namespace) -> int:
|
|
|
387
387
|
for path in output_paths:
|
|
388
388
|
reserved_paths.add(path)
|
|
389
389
|
|
|
390
|
+
_ensure_output_dirs(output_paths)
|
|
391
|
+
|
|
390
392
|
sidecar_meta = None
|
|
391
393
|
if args.sidecar:
|
|
392
394
|
sidecar_meta = loader.get_metadata(
|
|
@@ -397,12 +399,10 @@ def cmd_convert(args: argparse.Namespace) -> int:
|
|
|
397
399
|
|
|
398
400
|
if args.no_convert:
|
|
399
401
|
for path in output_paths:
|
|
400
|
-
path.parent.mkdir(parents=True, exist_ok=True)
|
|
401
402
|
_write_sidecar(path, sidecar_meta)
|
|
402
403
|
total_written += 1
|
|
403
404
|
else:
|
|
404
405
|
for path, obj in zip(output_paths, nii_list):
|
|
405
|
-
path.parent.mkdir(parents=True, exist_ok=True)
|
|
406
406
|
obj.to_filename(str(path))
|
|
407
407
|
logger.info("Wrote NIfTI: %s", path)
|
|
408
408
|
total_written += 1
|
|
@@ -713,6 +713,15 @@ def _parse_hook_args(values: List[str]) -> Dict[str, Dict[str, Any]]:
|
|
|
713
713
|
return parsed
|
|
714
714
|
|
|
715
715
|
|
|
716
|
+
def _ensure_output_dirs(paths: Sequence[Path]) -> None:
|
|
717
|
+
for path in paths:
|
|
718
|
+
try:
|
|
719
|
+
path.parent.mkdir(parents=True, exist_ok=True)
|
|
720
|
+
except OSError as exc:
|
|
721
|
+
logger.error("Failed to create output directory %s: %s", path.parent, exc)
|
|
722
|
+
raise
|
|
723
|
+
|
|
724
|
+
|
|
716
725
|
def _uses_counter_tag(
|
|
717
726
|
*,
|
|
718
727
|
layout_template: Optional[str],
|
brkraw/cli/commands/hook.py
CHANGED
|
@@ -274,7 +274,8 @@ def cmd_preset(args: argparse.Namespace) -> int:
|
|
|
274
274
|
return 2
|
|
275
275
|
preset = _infer_hook_preset(entry)
|
|
276
276
|
payload = {"hooks": {args.target: preset}}
|
|
277
|
-
|
|
277
|
+
normalized = _normalize_yaml_payload(payload)
|
|
278
|
+
text = yaml.safe_dump(normalized, sort_keys=False)
|
|
278
279
|
if args.output:
|
|
279
280
|
Path(args.output).expanduser().write_text(text, encoding="utf-8")
|
|
280
281
|
logger.info("Wrote preset: %s", args.output)
|
|
@@ -283,6 +284,18 @@ def cmd_preset(args: argparse.Namespace) -> int:
|
|
|
283
284
|
return 0
|
|
284
285
|
|
|
285
286
|
|
|
287
|
+
def _normalize_yaml_payload(value: Any) -> Any:
|
|
288
|
+
if isinstance(value, Path):
|
|
289
|
+
return str(value)
|
|
290
|
+
if dataclasses.is_dataclass(value) and not isinstance(value, type):
|
|
291
|
+
return _normalize_yaml_payload(dataclasses.asdict(value))
|
|
292
|
+
if isinstance(value, dict):
|
|
293
|
+
return {key: _normalize_yaml_payload(item) for key, item in value.items()}
|
|
294
|
+
if isinstance(value, (list, tuple, set)):
|
|
295
|
+
return [_normalize_yaml_payload(item) for item in value]
|
|
296
|
+
return value
|
|
297
|
+
|
|
298
|
+
|
|
286
299
|
def register(subparsers: argparse._SubParsersAction) -> None: # type: ignore[name-defined]
|
|
287
300
|
hook_parser = subparsers.add_parser(
|
|
288
301
|
"hook",
|
brkraw/cli/commands/info.py
CHANGED
brkraw/cli/commands/prune.py
CHANGED
|
@@ -97,7 +97,7 @@ def register(subparsers: argparse._SubParsersAction) -> None: # type: ignore[na
|
|
|
97
97
|
"--output",
|
|
98
98
|
dest="output",
|
|
99
99
|
type=str,
|
|
100
|
-
help="Output zip path (default:
|
|
100
|
+
help="Output zip path (default: ./<root_name>.zip when omitted).",
|
|
101
101
|
)
|
|
102
102
|
prune_parser.add_argument(
|
|
103
103
|
"--no-validate",
|
brkraw/cli/utils.py
CHANGED
|
@@ -7,6 +7,7 @@ from __future__ import annotations
|
|
|
7
7
|
|
|
8
8
|
import itertools
|
|
9
9
|
import logging
|
|
10
|
+
import sys
|
|
10
11
|
import threading
|
|
11
12
|
import time
|
|
12
13
|
from contextlib import contextmanager
|
|
@@ -26,7 +27,7 @@ def spinner(prefix: str = "Loading") -> Iterator[None]:
|
|
|
26
27
|
Yields:
|
|
27
28
|
None.
|
|
28
29
|
"""
|
|
29
|
-
if logger.isEnabledFor(logging.DEBUG):
|
|
30
|
+
if logger.isEnabledFor(logging.DEBUG) or not sys.stdout.isatty():
|
|
30
31
|
yield
|
|
31
32
|
return
|
|
32
33
|
|
|
@@ -35,7 +36,11 @@ def spinner(prefix: str = "Loading") -> Iterator[None]:
|
|
|
35
36
|
|
|
36
37
|
def run() -> None:
|
|
37
38
|
while not stop_event.is_set():
|
|
38
|
-
|
|
39
|
+
try:
|
|
40
|
+
print(f"\r{prefix} {next(seq)}", end="", flush=True)
|
|
41
|
+
except BrokenPipeError:
|
|
42
|
+
stop_event.set()
|
|
43
|
+
break
|
|
39
44
|
time.sleep(0.08)
|
|
40
45
|
|
|
41
46
|
thread = threading.Thread(target=run, daemon=True)
|
|
@@ -45,7 +50,10 @@ def spinner(prefix: str = "Loading") -> Iterator[None]:
|
|
|
45
50
|
finally:
|
|
46
51
|
stop_event.set()
|
|
47
52
|
thread.join()
|
|
48
|
-
|
|
53
|
+
try:
|
|
54
|
+
print("\r" + " " * (len(prefix) + 2) + "\r", end="", flush=True)
|
|
55
|
+
except BrokenPipeError:
|
|
56
|
+
pass
|
|
49
57
|
|
|
50
58
|
|
|
51
59
|
def load(path, *, prefix: str = "Loading") -> BrukerLoader:
|
brkraw/resolver/affine.py
CHANGED
|
@@ -412,11 +412,37 @@ def resolve_matvec_and_shape(visu_pars,
|
|
|
412
412
|
shape = np.append(shape, _num_slices)
|
|
413
413
|
extent = np.append(extent, _num_slices * _slice_thickness)
|
|
414
414
|
else:
|
|
415
|
-
|
|
415
|
+
spack_slices = visu_pars.get("VisuCoreSlicePacksSlices")
|
|
416
|
+
spack_count: Optional[int] = None
|
|
417
|
+
if spack_slices is not None:
|
|
418
|
+
spack_arr = np.asarray(spack_slices)
|
|
419
|
+
if spack_arr.ndim >= 1:
|
|
420
|
+
spack_count = int(spack_arr.shape[0])
|
|
421
|
+
if spack_count == 0:
|
|
422
|
+
spack_count = None
|
|
423
|
+
|
|
424
|
+
def _select_pack_row(arr: np.ndarray, *, width: int, name: str) -> np.ndarray:
|
|
425
|
+
arr = np.asarray(arr, dtype=float)
|
|
426
|
+
if arr.ndim == 1:
|
|
427
|
+
if arr.size != width:
|
|
428
|
+
raise ValueError(f"{name} has shape {arr.shape}, expected ({width},)")
|
|
429
|
+
return arr
|
|
430
|
+
if arr.ndim != 2 or arr.shape[1] != width:
|
|
431
|
+
raise ValueError(f"{name} has shape {arr.shape}, expected (*, {width})")
|
|
432
|
+
if spack_count is None or spack_count == 1:
|
|
433
|
+
return arr[0, :]
|
|
434
|
+
if spack_idx < 0 or spack_idx >= arr.shape[0]:
|
|
435
|
+
raise IndexError(
|
|
436
|
+
f"spack_idx out of range for {name}: {spack_idx} (entries: {arr.shape[0]})"
|
|
437
|
+
)
|
|
438
|
+
return arr[spack_idx, :]
|
|
439
|
+
|
|
440
|
+
_rotate = _select_pack_row(rotate, width=9, name="VisuCoreOrientation")
|
|
441
|
+
_origin = _select_pack_row(origin, width=3, name="VisuCorePosition")
|
|
416
442
|
row = _rotate[0:3]
|
|
417
443
|
col = _rotate[3:6]
|
|
418
444
|
slc = _rotate[6:9]
|
|
419
|
-
vec = np.squeeze(
|
|
445
|
+
vec = np.squeeze(_origin)
|
|
420
446
|
|
|
421
447
|
rot = np.column_stack([row, col, slc])
|
|
422
448
|
resols = extent / shape
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: brkraw
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.7
|
|
4
4
|
Summary: Toolkit for loading Bruker Paravision datasets, mapping metadata, and exporting NIfTI
|
|
5
5
|
Project-URL: Homepage, https://brkraw.github.io
|
|
6
6
|
Maintainer-email: SungHo Lee <shlee@unc.edu>
|
|
@@ -49,7 +49,7 @@ Description-Content-Type: text/markdown
|
|
|
49
49
|
|
|
50
50
|
A modular toolkit for Bruker MRI raw-data handling.
|
|
51
51
|
|
|
52
|
-
BrkRaw (v0.5.
|
|
52
|
+
BrkRaw (v0.5.7) converts raw data into standardized, neuroimaging-ready
|
|
53
53
|
datasets, with extensible rules/specs and plugin hooks.
|
|
54
54
|
|
|
55
55
|
- Documentation: [brkraw.github.io](https://brkraw.github.io/)
|
|
@@ -70,7 +70,7 @@ If you use BrkRaw in your research, please cite it.
|
|
|
70
70
|
@software{brkraw,
|
|
71
71
|
author = {Lee, Sung-Ho and Devenyi, Gabriel A. and Ban, Woomi and Shih, Yen-Yu Ian},
|
|
72
72
|
title = {BrkRaw: A modular toolkit for Bruker MRI raw-data handling},
|
|
73
|
-
version = {0.5.
|
|
73
|
+
version = {0.5.7},
|
|
74
74
|
doi = {10.5281/zenodo.3818614},
|
|
75
75
|
url = {https://github.com/BrkRaw/brkraw},
|
|
76
76
|
note = {Documentation: https://brkraw.github.io},
|
|
@@ -1,39 +1,39 @@
|
|
|
1
|
-
brkraw/__init__.py,sha256=
|
|
1
|
+
brkraw/__init__.py,sha256=6LifbJIia8iXJ8kuTt4Naq-0aVQREIB0dG0MKf-i72s,210
|
|
2
2
|
brkraw/api/__init__.py,sha256=y7ZSFdF2uZK5e6ExGt3CQGg-DD5fmT0WouQiplSbwsA,3858
|
|
3
3
|
brkraw/api/types.py,sha256=s11MIkHApOeREQZeIbx1zXz5R4WtYaBIVXD4s47Vnoc,672
|
|
4
4
|
brkraw/apps/__init__.py,sha256=sEdA1SrY-Vu0xU1ct5Eab7vX-_IFMDip2j3FdSQVT58,170
|
|
5
5
|
brkraw/apps/addon/__init__.py,sha256=fUR1QNwiaqSbkMIkPxLjKC7mJifR6HhrM8TO7lTo7Mg,531
|
|
6
6
|
brkraw/apps/addon/core.py,sha256=xVlTElgOHNnoy3avNoeOudOvQSDzvuVsmGq9IVKNINc,659
|
|
7
|
-
brkraw/apps/addon/dependencies.py,sha256=
|
|
7
|
+
brkraw/apps/addon/dependencies.py,sha256=C1DliuLCptgEE8-Lcg7GkQaZD9aDc80y1Fj1JPHiLvo,16037
|
|
8
8
|
brkraw/apps/addon/installation.py,sha256=LeciuHv_5ENg3OjzKClgIMAg3mYs8h3VUvFXmX6_Nao,18144
|
|
9
9
|
brkraw/apps/addon/io.py,sha256=bjgwl0T1tsL02aAJtScLw3fnh2PfOlmK5aGAQj6WF8Y,413
|
|
10
10
|
brkraw/apps/hook/__init__.py,sha256=W3xf6VmPZkVtQMwnYIrl626fnlck6bO20St0C45tMNY,398
|
|
11
|
-
brkraw/apps/hook/core.py,sha256=
|
|
11
|
+
brkraw/apps/hook/core.py,sha256=C_EF_Z5k1-owG46DtEzp7SL9Db3mnbIzB1gKZBM6Owo,21327
|
|
12
12
|
brkraw/apps/loader/__init__.py,sha256=ih3YNHm2JQpR_5bWNpKwzVImXg4rl6eK8C_40texwr0,101
|
|
13
|
-
brkraw/apps/loader/core.py,sha256=
|
|
13
|
+
brkraw/apps/loader/core.py,sha256=FKc-ux2_zo413jNA3ENoB_xWq8eX05a-cy1Idrguw7o,22196
|
|
14
14
|
brkraw/apps/loader/formatter.py,sha256=oiGO942bZMZODxI8kgYE0gdX4FLjwaZTquvZN3yGeeU,9315
|
|
15
15
|
brkraw/apps/loader/helper.py,sha256=dujao_UH8C6aeZQ-GCTwCleoa-ZkrIDYSKlgwSN6gwA,34574
|
|
16
16
|
brkraw/apps/loader/types.py,sha256=MzQOQCZ0HLfBqUMvXaSEi53OdI9u-ZCozAcjdod2apY,6248
|
|
17
17
|
brkraw/apps/loader/info/__init__.py,sha256=1tWVkBakwf3LZK-FwsMrt10fkkdz9cWw1j-Y4Dk6Lio,164
|
|
18
18
|
brkraw/apps/loader/info/scan.py,sha256=omq7d00huVNY2ClMwkEclWWe2a8P3AZV42Xy0vG7YUk,2837
|
|
19
|
-
brkraw/apps/loader/info/scan.yaml,sha256=
|
|
19
|
+
brkraw/apps/loader/info/scan.yaml,sha256=0LzH5AawmIiQ_3PTkwn9qeEp3xqndMDKBXnOWzXAypo,1787
|
|
20
20
|
brkraw/apps/loader/info/study.py,sha256=0_5gUlDOd5xsmXaYF9pyhwUKsq3-oCZ5SMvH6RqlPp4,2743
|
|
21
|
-
brkraw/apps/loader/info/study.yaml,sha256=
|
|
21
|
+
brkraw/apps/loader/info/study.yaml,sha256=2-O24oQtQzgenjC1lPIdCd5FgEv2j4q4qXPitsdf424,3711
|
|
22
22
|
brkraw/apps/loader/info/transform.py,sha256=gXYtIlbAwaLZX1K7jRFgFAJRG9D-zqlLQ-89BJOhuxM,2558
|
|
23
23
|
brkraw/cli/__init__.py,sha256=Z97T007Iut9FMPWTRa7MDcUhd9uQhhQ0qmRJ1H4owlw,89
|
|
24
24
|
brkraw/cli/hook_args.py,sha256=B2CKdSmZqSoQaBW4SMtjCXLLheDt-NJ1VwgvGp4Mtzw,2625
|
|
25
25
|
brkraw/cli/main.py,sha256=OC6BBvSMTZdXz6tdArt163qfvDsldkAXLZ8osBFShFs,4086
|
|
26
|
-
brkraw/cli/utils.py,sha256=
|
|
26
|
+
brkraw/cli/utils.py,sha256=wEN2Paehe11-Ho-jwg_KRewKhEnDM7sRMvKWCHgAGU4,1564
|
|
27
27
|
brkraw/cli/commands/__init__.py,sha256=PHh4jqD7i0aL8W8hXThczKcT4xsNZiXanBxOH5IOW5I,36
|
|
28
28
|
brkraw/cli/commands/addon.py,sha256=ctPJ6h_SPFovT1EY6iY-Fyrhfcu0Lo3oCvDz52YsKNM,11179
|
|
29
29
|
brkraw/cli/commands/cache.py,sha256=wyGjM7WjIW8jcwRoEoUpSdlnzCLUTcozpan2KEG8i5Q,2254
|
|
30
30
|
brkraw/cli/commands/config.py,sha256=qWj4yPNDeikLmONZw8-g1C098t-2oGCExJtam-fb6Pk,6480
|
|
31
|
-
brkraw/cli/commands/convert.py,sha256=
|
|
32
|
-
brkraw/cli/commands/hook.py,sha256=
|
|
33
|
-
brkraw/cli/commands/info.py,sha256=
|
|
31
|
+
brkraw/cli/commands/convert.py,sha256=uB0Qp1SViXdJKJvGE60cFDIRV5s4EJB2Gr472nRPP-E,32092
|
|
32
|
+
brkraw/cli/commands/hook.py,sha256=1EYQHl-P_dPHpPBY5XUKgajI9lc9oi6fsIBj13xvzEQ,12431
|
|
33
|
+
brkraw/cli/commands/info.py,sha256=9V6Qlp57Pg4qEaSjW8w6EpW8Orm-5lzdRm5po8qsglQ,2239
|
|
34
34
|
brkraw/cli/commands/init.py,sha256=4LC0XHmZsGGozoNq2vlGBF6Y1MtbK77Ub7wVbwo9ACc,6957
|
|
35
35
|
brkraw/cli/commands/params.py,sha256=LtYgXdffJ4PuXb5FMcRQhvHpRlFN28MIkpd0UMNx9-Y,3159
|
|
36
|
-
brkraw/cli/commands/prune.py,sha256=
|
|
36
|
+
brkraw/cli/commands/prune.py,sha256=z1RDbw8wECtJrvuP1f9LOooI822a5dz1yCLqWz_rMww,8805
|
|
37
37
|
brkraw/cli/commands/session.py,sha256=t77PyNZpQoXxpszpqiKsOsKfLg9woXBJA_yinVhuEVk,12299
|
|
38
38
|
brkraw/core/__init__.py,sha256=9UPOF5mtjZdGgjQ6-JJJs-eg8CGl4BuV7flGDWKgCBg,218
|
|
39
39
|
brkraw/core/cache.py,sha256=oF6MOIrywGUrU9l8OweoBVww5ZSqv9BtALjNaPnr59Q,2324
|
|
@@ -56,7 +56,7 @@ brkraw/default/rules/00_default.yaml,sha256=a4PZOR0oam0ziZqLsvaQZqwoDu-uXbPVdxJc
|
|
|
56
56
|
brkraw/default/specs/metadata_dicom.yaml,sha256=grrwGOBIIEUJPTs6vktWydnEsvBTjbgwez0190Q8ma0,4295
|
|
57
57
|
brkraw/default/specs/metadata_transforms.py,sha256=illM4MKwwz-6PPKLrIno5lba1f5zKC8y09PAR5gCH1o,2383
|
|
58
58
|
brkraw/resolver/__init__.py,sha256=2vz8b135CA4aebHUHSc2Hgtc3Ko2-qbdAxfTnUtTeGk,84
|
|
59
|
-
brkraw/resolver/affine.py,sha256=
|
|
59
|
+
brkraw/resolver/affine.py,sha256=wpCEnOjauYEecWlmSZqY-_ebeZTcN1zsmdKYZPO2Owc,21034
|
|
60
60
|
brkraw/resolver/datatype.py,sha256=a1bqsGibtnRGGiPKAGbkXj1-Tyjmk52pUPgXM8F2px8,2522
|
|
61
61
|
brkraw/resolver/fid.py,sha256=SXglNSD6hFK7pAoHrUvuNbCYPgIAvbRdh6PACp7Oz7g,2847
|
|
62
62
|
brkraw/resolver/helpers.py,sha256=BpL-zpbtGae6n-XQOmD5qP7KrD5HFnElzAD3bcBq0J4,1029
|
|
@@ -85,8 +85,8 @@ brkraw/specs/remapper/validator.py,sha256=R-Pib4MCgUVYAvAAoFR04bF-j7TDaePj-jGaxO
|
|
|
85
85
|
brkraw/specs/rules/__init__.py,sha256=oF1ury9vxTYMlTgz9Yo9um8jRAzaJeTMwjAcDLV-KOE,214
|
|
86
86
|
brkraw/specs/rules/logic.py,sha256=PbcvkyTjGKJn5CLg_V5QgnWNKirAqRrV3e1YVRx8FyQ,9092
|
|
87
87
|
brkraw/specs/rules/validator.py,sha256=AHS-r-E0HGHxwhhU48nCyS6LQvllQCgXLS_NDXBm3-k,3508
|
|
88
|
-
brkraw-0.5.
|
|
89
|
-
brkraw-0.5.
|
|
90
|
-
brkraw-0.5.
|
|
91
|
-
brkraw-0.5.
|
|
92
|
-
brkraw-0.5.
|
|
88
|
+
brkraw-0.5.7.dist-info/METADATA,sha256=_ZnDJuPxq8GeszcdNfWXfZGV1njLBdI_muXN9-DoJmc,3058
|
|
89
|
+
brkraw-0.5.7.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
90
|
+
brkraw-0.5.7.dist-info/entry_points.txt,sha256=fdCNXyFoqRsPYXXizC_LS44B9Myjr1dH2tewvtcIN-E,493
|
|
91
|
+
brkraw-0.5.7.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
92
|
+
brkraw-0.5.7.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|