thyra 4.3.0__tar.gz → 4.3.1__tar.gz
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.
- {thyra-4.3.0 → thyra-4.3.1}/PKG-INFO +1 -1
- {thyra-4.3.0 → thyra-4.3.1}/pyproject.toml +1 -1
- {thyra-4.3.0 → thyra-4.3.1}/thyra/__init__.py +1 -1
- {thyra-4.3.0 → thyra-4.3.1}/thyra/readers/mzpeak/mzpeak_reader.py +77 -7
- {thyra-4.3.0 → thyra-4.3.1}/.gitignore +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/LICENSE +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/README.md +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/__main__.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/alignment/__init__.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/alignment/affine.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/alignment/teaching_points.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/config.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/convert.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/converters/__init__.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/converters/spatialdata/__init__.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/converters/spatialdata/_chunking.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/converters/spatialdata/base_spatialdata_converter.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/converters/spatialdata/converter.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/converters/spatialdata/csc_assembly.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/converters/spatialdata/fused_passes.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/converters/spatialdata/mobility_heatmap.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/converters/spatialdata/mobility_table.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/converters/spatialdata/msms_table.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/converters/spatialdata/optical_image.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/converters/spatialdata/root_attrs.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/converters/spatialdata/sibling_tables.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/converters/spatialdata/streaming_converter.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/converters/spatialdata/uns_assembler.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/core/__init__.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/core/base_converter.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/core/base_extractor.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/core/base_reader.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/core/conversion_state.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/core/drop_tally.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/core/frames.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/core/mass_axis.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/core/mobility.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/core/msms.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/core/registry.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/errors.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/metadata/__init__.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/metadata/constants.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/metadata/document.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/metadata/extractors/__init__.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/metadata/extractors/bruker_extractor.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/metadata/extractors/imzml_extractor.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/metadata/extractors/imzml_header_extractor.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/metadata/extractors/mzpeak_extractor.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/metadata/extractors/phi_extractor.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/metadata/extractors/solarix_extractor.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/metadata/extractors/waters_extractor.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/metadata/ontology/__init__.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/metadata/ontology/_ims.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/metadata/ontology/_ms.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/metadata/ontology/_uo.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/metadata/ontology/cache.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/metadata/ontology/dump_obo_files.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/metadata/personal_data.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/metadata/schema/__init__.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/metadata/schema/builder.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/metadata/schema/cli.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/metadata/schema/generate.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/metadata/schema/metaspace.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/metadata/schema/models.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/metadata/schema/msi_metadata.linkml.yaml +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/metadata/schema/msi_metadata_schema_v0_10.json +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/metadata/schema/store_io.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/metadata/schema/validate.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/metadata/schema/vocab.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/metadata/types.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/metadata/uns_compat.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/metadata/validator.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/preview.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/py.typed +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/readers/__init__.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/readers/bruker/__init__.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/readers/bruker/base_bruker_reader.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/readers/bruker/folder_structure.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/readers/bruker/mis_parser.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/readers/bruker/rapiflex/__init__.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/readers/bruker/rapiflex/rapiflex_reader.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/readers/bruker/solarix/__init__.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/readers/bruker/solarix/solarix_reader.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/readers/bruker/timstof/__init__.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/readers/bruker/timstof/sdk/__init__.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/readers/bruker/timstof/sdk/dll/LICENCE-BRUKER.txt +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/readers/bruker/timstof/sdk/dll/README.md +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/readers/bruker/timstof/sdk/dll/timsdata.dll +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/readers/bruker/timstof/sdk/dll/timsdata.so +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/readers/bruker/timstof/sdk/dll_manager.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/readers/bruker/timstof/sdk/platform_detector.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/readers/bruker/timstof/sdk/sdk_functions.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/readers/bruker/timstof/timstof_reader.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/readers/bruker/vendor_db.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/readers/imzml/__init__.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/readers/imzml/_pyimzml_compat.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/readers/imzml/header.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/readers/imzml/imzml_reader.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/readers/imzml/mobility_array.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/readers/mzpeak/__init__.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/readers/mzpeak/chunk_decoding.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/readers/phi/__init__.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/readers/phi/event_stream.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/readers/phi/mass_axis.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/readers/phi/phi_header.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/readers/phi/phi_reader.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/readers/waters/__init__.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/readers/waters/imaging_grid.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/readers/waters/instrument.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/readers/waters/lib/MLReader.dll +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/readers/waters/lib/MassLynxRaw.dll +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/readers/waters/lib/libMLReader.so +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/readers/waters/lib/libMassLynxRaw.so +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/readers/waters/masslynx_lib.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/readers/waters/waters_reader.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/resampling/__init__.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/resampling/axis_planner.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/resampling/binning.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/resampling/common_axis.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/resampling/constants.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/resampling/data_characteristics.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/resampling/decision_tree.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/resampling/gaps.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/resampling/instrument_detectors.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/resampling/interpolation.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/resampling/mass_axis/__init__.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/resampling/mass_axis/base_generator.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/resampling/mass_axis/fticr_generator.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/resampling/mass_axis/linear_generator.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/resampling/mass_axis/linear_tof_generator.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/resampling/mass_axis/orbitrap_generator.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/resampling/mass_axis/reflector_tof_generator.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/resampling/mass_axis/tof_generator.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/resampling/mobility_grid.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/resampling/strategies/__init__.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/resampling/strategies/base.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/resampling/strategies/nearest_neighbor.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/resampling/strategies/tic_preserving.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/resampling/tic.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/resampling/types.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/tools/__init__.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/tools/check_ontology.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/tools/make_example_data.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/utils/__init__.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/utils/bruker_exceptions.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/utils/imzml_coordinate_base.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/utils/logging_config.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/utils/pyimzml_direct.py +0 -0
- {thyra-4.3.0 → thyra-4.3.1}/thyra/utils/windows_paths.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: thyra
|
|
3
|
-
Version: 4.3.
|
|
3
|
+
Version: 4.3.1
|
|
4
4
|
Summary: A modern Python library for converting Mass Spectrometry Imaging (MSI) data into SpatialData/Zarr format - your portal to spatial omics
|
|
5
5
|
Project-URL: Homepage, https://github.com/M4i-Imaging-Mass-Spectrometry/thyra
|
|
6
6
|
Project-URL: Repository, https://github.com/M4i-Imaging-Mass-Spectrometry/thyra
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "thyra"
|
|
7
|
-
version = "4.3.
|
|
7
|
+
version = "4.3.1"
|
|
8
8
|
description = "A modern Python library for converting Mass Spectrometry Imaging (MSI) data into SpatialData/Zarr format - your portal to spatial omics"
|
|
9
9
|
authors = [{ name = "Theodoros Visvikis", email = "t.visvikis@maastrichtuniversity.nl" }]
|
|
10
10
|
maintainers = [{ name = "Theodoros Visvikis", email = "t.visvikis@maastrichtuniversity.nl" }]
|
|
@@ -186,6 +186,32 @@ def _lazy_pyarrow() -> Tuple[Any, Any]:
|
|
|
186
186
|
return pyarrow, pq
|
|
187
187
|
|
|
188
188
|
|
|
189
|
+
def _positions(column: Any) -> Tuple[NDArray[np.int64], NDArray[np.bool_]]:
|
|
190
|
+
"""Read one position column, keeping apart the scans that have none.
|
|
191
|
+
|
|
192
|
+
A null is a scan that belongs to no pixel. Cast straight to an integer
|
|
193
|
+
it becomes the smallest one there is, and the minimum of the column
|
|
194
|
+
would then put the origin of the grid at that scan.
|
|
195
|
+
|
|
196
|
+
Args:
|
|
197
|
+
column: The position column of the scans member, as pyarrow reads it.
|
|
198
|
+
|
|
199
|
+
Returns:
|
|
200
|
+
The positions as integers, 0 where there is none, and a mask that is
|
|
201
|
+
``True`` where the scan has a position.
|
|
202
|
+
"""
|
|
203
|
+
if column.null_count == len(column):
|
|
204
|
+
# Nothing to fill, and a column of the null type cannot be filled.
|
|
205
|
+
return np.zeros(len(column), dtype=np.int64), np.zeros(len(column), dtype=bool)
|
|
206
|
+
present = np.asarray(column.is_valid().to_numpy(), dtype=bool)
|
|
207
|
+
values = np.asarray(column.fill_null(0).to_numpy())
|
|
208
|
+
if values.dtype.kind == "f":
|
|
209
|
+
finite = np.isfinite(values)
|
|
210
|
+
present = present & finite
|
|
211
|
+
values = np.where(finite, values, 0)
|
|
212
|
+
return values.astype(np.int64), present
|
|
213
|
+
|
|
214
|
+
|
|
189
215
|
class MzPeakSpatialIndex(NamedTuple):
|
|
190
216
|
"""Everything about the archive that is one value per spectrum.
|
|
191
217
|
|
|
@@ -572,9 +598,13 @@ class MzPeakArchive:
|
|
|
572
598
|
(``scan_index``) and nothing promises the two members are ordered
|
|
573
599
|
alike.
|
|
574
600
|
|
|
601
|
+
A spectrum whose scan has a null position belongs to no pixel and is
|
|
602
|
+
left out, as a spectrum with no scan row is.
|
|
603
|
+
|
|
575
604
|
Raises:
|
|
576
|
-
|
|
577
|
-
carries no positioned spectra
|
|
605
|
+
ConversionRefused: If the archive is not an imaging acquisition,
|
|
606
|
+
carries no positioned spectra, or gives a scan one position
|
|
607
|
+
without the other.
|
|
578
608
|
"""
|
|
579
609
|
if self._spatial_index is not None:
|
|
580
610
|
return self._spatial_index
|
|
@@ -592,14 +622,36 @@ class MzPeakArchive:
|
|
|
592
622
|
columns=["source_index", x_column, y_column]
|
|
593
623
|
)
|
|
594
624
|
source = np.asarray(scans.column("source_index").to_numpy(), dtype=np.int64)
|
|
595
|
-
xs =
|
|
596
|
-
ys =
|
|
625
|
+
xs, has_x = _positions(scans.column(x_column))
|
|
626
|
+
ys, has_y = _positions(scans.column(y_column))
|
|
627
|
+
|
|
628
|
+
# The imaging profile sets both positions of a scan or neither. A
|
|
629
|
+
# scan that belongs to no pixel, a calibration scan for instance, has
|
|
630
|
+
# both null. One without the other places the scan nowhere.
|
|
631
|
+
half = has_x != has_y
|
|
632
|
+
if half.any():
|
|
633
|
+
raise ConversionRefused(
|
|
634
|
+
f"{self.path} gives {int(half.sum())} of {half.size} scans one "
|
|
635
|
+
f"position but not the other ({IMS_POSITION_X} without "
|
|
636
|
+
f"{IMS_POSITION_Y}, or the reverse). A scan on a pixel has "
|
|
637
|
+
f"both, and a scan on no pixel has neither."
|
|
638
|
+
)
|
|
639
|
+
placed = has_x & has_y
|
|
597
640
|
|
|
598
641
|
# One spectrum may own several scans; imaging acquisitions write one.
|
|
599
642
|
# Keeping the first per spectrum means a multi-scan file resolves to a
|
|
600
|
-
# single pixel rather than silently overwriting itself.
|
|
643
|
+
# single pixel rather than silently overwriting itself. A scan with a
|
|
644
|
+
# position goes before one without, so a spectrum is only unplaced
|
|
645
|
+
# when none of its scans is on a pixel.
|
|
646
|
+
first_placed = np.argsort(~placed, kind="stable")
|
|
647
|
+
source, xs, ys, placed = (
|
|
648
|
+
source[first_placed],
|
|
649
|
+
xs[first_placed],
|
|
650
|
+
ys[first_placed],
|
|
651
|
+
placed[first_placed],
|
|
652
|
+
)
|
|
601
653
|
_, first = np.unique(source, return_index=True)
|
|
602
|
-
source, xs, ys = source[first], xs[first], ys[first]
|
|
654
|
+
source, xs, ys, placed = source[first], xs[first], ys[first], placed[first]
|
|
603
655
|
|
|
604
656
|
spectrum_index, counts = self._read_point_counts()
|
|
605
657
|
order = np.argsort(spectrum_index, kind="stable")
|
|
@@ -618,10 +670,28 @@ class MzPeakArchive:
|
|
|
618
670
|
self.path.name,
|
|
619
671
|
)
|
|
620
672
|
spectrum_index, counts = spectrum_index[keep], counts[keep]
|
|
673
|
+
rows = np.array([lookup[int(s)] for s in spectrum_index], dtype=np.int64)
|
|
674
|
+
|
|
675
|
+
# A spectrum whose scan has no position belongs to no pixel. It is
|
|
676
|
+
# left out as an unacquired pixel is, and must not reach the minimum
|
|
677
|
+
# below, where it would set the origin of the grid.
|
|
678
|
+
on_pixel = placed[rows]
|
|
679
|
+
if not on_pixel.all():
|
|
680
|
+
logger.warning(
|
|
681
|
+
"%d of %d spectra in %s have no position and belong to no "
|
|
682
|
+
"pixel; they are left out",
|
|
683
|
+
int((~on_pixel).sum()),
|
|
684
|
+
on_pixel.size,
|
|
685
|
+
self.path.name,
|
|
686
|
+
)
|
|
687
|
+
spectrum_index, counts, rows = (
|
|
688
|
+
spectrum_index[on_pixel],
|
|
689
|
+
counts[on_pixel],
|
|
690
|
+
rows[on_pixel],
|
|
691
|
+
)
|
|
621
692
|
if spectrum_index.size == 0:
|
|
622
693
|
raise ConversionRefused(f"{self.path} contains no positioned spectra.")
|
|
623
694
|
|
|
624
|
-
rows = np.array([lookup[int(s)] for s in spectrum_index], dtype=np.int64)
|
|
625
695
|
raw = np.stack([xs[rows], ys[rows]], axis=1)
|
|
626
696
|
|
|
627
697
|
# Positions are 1-based in the reference archives, but the format
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|