From ac4e9527f5ee28592f324cd9adaf10eca7e96ccd Mon Sep 17 00:00:00 2001 From: Harlan D Heilman <73567020+HarlanHeilman@users.noreply.github.com> Date: Thu, 16 Apr 2026 11:33:30 -0700 Subject: [PATCH 01/22] docs: plan for ingest streaming and maintainability Records the six performance fixes (T1-T6) and four maintainability refactors (T7-T10) driving the perf/ingest-streaming-and-maintainability branch. Serves as the authoritative reference for per-task reviews. --- .../ingest-streaming-and-maintainability.md | 344 ++++++++++++++++++ 1 file changed, 344 insertions(+) create mode 100644 docs/plans/ingest-streaming-and-maintainability.md diff --git a/docs/plans/ingest-streaming-and-maintainability.md b/docs/plans/ingest-streaming-and-maintainability.md new file mode 100644 index 0000000..c39bf44 --- /dev/null +++ b/docs/plans/ingest-streaming-and-maintainability.md @@ -0,0 +1,344 @@ +# Ingest Performance and Maintainability Plan + +Branch: `perf/ingest-streaming-and-maintainability` +Source of findings: diagnostic pass in commit `1941cd2` and conversational review +of `src/catalog/ingest.rs`. + +## Background + +Profiling on `/Volumes/DATA/Collins/2026Feb` (13,546 FITS files, 33 scans) +ran for hours and crashed Cursor. Code review of `ingest_beamtime_inner` +identified six concrete causes and several maintainability issues that +together produce the observed symptoms: + +- Progress bars sit idle then race to completion at the end. +- Nothing is written to `catalog.db` until the very end. +- Peak RAM reaches ~9 GB, triggering OOM. + +The root causes: + +1. **Unbuffered pixel reads.** `read_image_i32` calls `read_exact(&mut [0u8; 2])` + ~170k times per file on an unbuffered `std::fs::File`. Across 13,546 files + that is ~2.3 billion two-byte syscalls on NAS-mounted storage. +2. **Duplicate zarr array per frame.** `write_frame_raw` creates both `/raw` + and `/processed` with identical bytes, doubling filesystem work during + ingest for no downstream benefit (no code reads `/processed`). +3. **N+1 SELECT-after-INSERT.** Every sample, scan, and file insert is + followed by a `SELECT id FROM ... WHERE ...` round-trip inside the + transaction. SQLite ≥ 3.35 supports `RETURNING`; Diesel has the + `returning_clauses_for_sqlite_3_35` feature already enabled. +4. **Single giant SQLite transaction.** The entire catalog insert loop runs + inside one `conn.transaction`. No rows land on disk until the end; a crash + mid-ingest rolls back everything. +5. **Zarr phase materializes all images before writing any.** The outer + `.collect::, _>>()` across all scans forces 9+ GB of + `Array2` resident before the first `write_frame_raw` call. This + defers the first `file_complete` event and causes the OOM. +6. **Per-scan (not per-file) parallelism.** Large scans pin a single worker + while other cores idle. + +## Goals + +Primary: + +- Give incremental progress during both catalog and zarr phases. +- Hold at most `O(worker_threads)` images in RAM during zarr phase. +- Cut per-file syscalls from ~170k to ~1. +- Commit catalog rows in small-enough batches that progress is visible in + `catalog.db` during long runs, without creating churn from one-commit-per-tiny-scan. + +Secondary: + +- Replace stringly-typed phase labels with a `IngestPhase` enum. +- Unify FITS pixel reading between `ingest.rs` and `io/image_mmap.rs`. +- Split the 380-line `ingest_beamtime_inner` into phase functions with a + shared `IngestContext` so each function fits in a reviewer's head. +- Provide a synthetic-beamtime fixture so we can benchmark ingest without + the NAS. + +Non-goals: + +- Rewriting zarr store semantics. The existing `zarrs::FilesystemStore` is fine. +- Changing the public Python API surface (`ingest_beamtime`, `read_beamtime`). +- Changing progress event wire format (keep `phase`, `layout`, `catalog_row`, + `file_complete`). + +## Acceptance criteria + +A full ingest of the fixture-backed synthetic beamtime (`tests/`) must: + +- Emit `catalog_row` events during the catalog phase (proves progress is live). +- Emit `file_complete` events incrementally during zarr phase (not all at the + end); verified by timestamp delta between first and last event. +- Have zero residual `/processed` group in the zarr store after removal. +- Show catalog rows visible in `catalog.db` partway through (per-batch commit). + +Regression gates: + +- `cargo test --features catalog,parallel_ingest` green. +- `uv run pytest tests/test_catalog.py` green. +- `uv run ruff check python tests scripts` green on touched files. +- `uv run ty check python` green on touched files (test file cleanup noted in + prior review). +- `cargo clippy --features catalog,parallel_ingest -- -D warnings` on + `src/catalog/ingest.rs`, `src/catalog/ingest_progress.rs`, + `src/catalog/zarr_write.rs`, and any new modules in `src/io/`. + +## Task breakdown + +Tasks are mostly independent at the file level. Ordering below is the +execution sequence (earlier tasks reduce diff size for later ones). + +### Phase A: Performance (tasks 1–6) + +**T1. Bulk pixel read in `read_image_i32`** *(src/catalog/ingest.rs)* + +Replace the byte-pair loop with a single bulk read: + +- Open `File`, `seek(SeekFrom::Start(data_offset))`, allocate + `vec![0u8; naxis1 * naxis2 * 2]`, call `read_exact(&mut buf)` once. +- Convert with `buf.chunks_exact(2).map(|c| i16::from_be_bytes([c[0], c[1]]) as i32)`. +- Keep existing `Array2::from_shape_vec` construction. +- Preserve `CatalogError::Io` and `CatalogError::Validation` mappings. + +Tests: + +- Adjust existing tests if they depend on the byte-pair path (none should). +- Add a unit test that reads a `tests/fixtures/minimal.fits` into `Array2` + and checks the shape and the first few values. + +Definition of done: `read_image_i32` issues at most O(1) syscalls beyond +`open` and `seek`, and test passes. + +--- + +**T2. Drop duplicate `/processed` zarr array** *(src/catalog/zarr_write.rs)* + +- Remove the block in `write_frame_raw` that creates `/{scan}/{frame}/processed`. +- Update the module docstring: `/raw` only. +- Update `src/schema.rs:253-254` comment to describe the zarr layout as + `///raw`; processed is produced by downstream processing, not ingest. +- Search the codebase for readers of `/processed`; none exist. If any show up, + stop and escalate (scope change). + +Tests: + +- Add a Rust test that writes one frame and asserts `/{scan}/{frame}/raw` + exists and `/{scan}/{frame}/processed` does not (using + `store.list_dir` or equivalent). + +--- + +**T3. Use Diesel `RETURNING` in ingest inserts** *(src/catalog/ingest.rs)* + +Rewrite inserts for `samples`, `scans`, `files`, and `tags` in +`ingest_beamtime_inner` to use `.returning(table::id).get_result(conn)` +instead of `execute` followed by a `SELECT`. Keep `file_tags` insert as-is +(no id needed). + +The `tags` path currently does `SELECT ... optional()? { Some => id, None => +insert + SELECT }`. Replace with `INSERT OR IGNORE` then select; or use +`upsert`. Prefer `INSERT OR IGNORE INTO tags (slug) VALUES (?) RETURNING id` +when slug is new; fall back to a single SELECT when IGNORE returned no row. + +Tests: + +- Existing ingest tests must stay green. +- Add a test that asserts one sample/scan/file row per input (no duplicates) + after re-running `ingest_beamtime` on the same minimal fixture. + +--- + +**T4. Batched catalog transactions with small-scan coalescing** *(src/catalog/ingest.rs)* + +Replace the single `conn.transaction::<(), _, _>(|conn| { ... entire loop ... })` +with batched transactions. Rules: + +- Iterate scans in `scan_order`. Maintain `current_batch: Vec<&BtIngestRow>`. +- Append every row of the current scan to `current_batch`. +- After each scan, if `current_batch.len() >= MIN_BATCH_FILES` (constant, + initially 200), commit the batch and start a new one. +- Always commit the trailing batch before zarr phase. +- For **very large scans** (>`MAX_BATCH_FILES`, initially 1000), split the + scan into chunks of `MAX_BATCH_FILES` rows and commit each as one + transaction, preserving `CatalogRow` events inside. + +Inside each transaction: + +- Insert only `samples` and `scans` that are new to the catalog (use existing + `sample_cache` / `scan_cache` maps, populate lazily). +- Insert `files`, `frames`, `tags`, `file_tags` for rows in the batch. +- Emit `IngestProgress::CatalogRow` per row (unchanged semantics). + +Reasoning: the user flagged that short scans processed quickly should not +each get their own transaction. Coalescing by file count satisfies that while +still capping uncommitted work at ~`MAX_BATCH_FILES` rows. + +Constants live in a private `mod batch_limits` inside `ingest.rs`: + +```rust +const MIN_BATCH_FILES: usize = 200; +const MAX_BATCH_FILES: usize = 1000; +``` + +Tests: + +- Add a Rust test with a synthetic beamtime of 250 rows across 10 scans + (some short, some long) that verifies: + - rows appear in `files` and `frames` after each batch commit + (use a second connection to inspect mid-ingest via a progress callback + that signals at `catalog_row`). + - final row count matches input. + +--- + +**T5. Streaming zarr phase** *(src/catalog/ingest.rs)* + +Replace the read-all-then-write loop with bounded-parallel read→write→drop: + +- Create all zarr groups (`/`, `/{scan}`, `/{scan}/{frame}`) in a preamble + on the calling thread, single-pass. Avoids concurrent group creation races + with zarrs filesystem store. +- Use `rows.par_iter().try_for_each_with(|()| -> Result<()> { ... })` on + the existing rayon pool to stream: + - `let img = read_image_i32(row)?;` + - `write_frame_raw(&zstore, row.scan_number, row.frame_number, &img)?;` + - `drop(img);` + - Emit `FileComplete` with progress counters (use `Arc>` + for `scan_done`/`global_done`). +- Remove the intermediate `Vec)>>` and its flatten. + +Peak RAM during zarr phase becomes `O(worker_threads)` images rather than +`O(total_files)`. + +Tests: + +- Update or add a test that counts `file_complete` timestamps and asserts + they are not all within 10ms of each other for a synthetic 50-file run + (exact threshold TBD during implementation). + +--- + +**T6. Per-file parallelism** *(src/catalog/ingest.rs)* + +In the headers phase, replace `scan_groups.par_iter()` with a flat +`paths_only.par_iter()` using `read_fits_headers_only_row` per path. Collect +rows into a `Vec` in any order, then sort by +`(scan_number, frame_number, file_path)` (this sort is already present). + +Rationale: uneven scan sizes cause one rayon worker to serialize a large +scan. Flat parallelism lets rayon balance work across all cores. + +T5 already parallelizes per-file for zarr, so this task is strictly about +the headers phase. + +Tests: same test as T5 (balanced parallelism). + +### Phase B: Maintainability (tasks 7–10) + +**T7. Unify FITS raw pixel buffer reader** *(src/io/)* + +Extract the single bulk-read logic behind a new helper module +`src/io/raw_pixels.rs` (feature-gated identically to current io module): + +```rust +pub fn read_bitpix16_be_bytes(path: &Path, offset: u64, nbytes: usize) + -> Result, FitsError>; +``` + +Use this from both: + +- `catalog::ingest::read_image_i32` (convert to `Array2`, no bzero). +- `io::image_mmap::load_image_pixels` (convert to `Array2` with bzero). + +`image_mmap.rs` currently uses `memmap2` with `MmapOptions::new().offset(...)`. +Keep the mmap path as one implementation behind `read_bitpix16_be_bytes` when +the platform supports it; fall back to bulk `read_exact`. Document that mmap +can behave poorly on some NAS mounts; provide `PYREF_DISABLE_MMAP=1` override. + +Do not change semantics of the i64+bzero conversion in `image_mmap`. + +--- + +**T8. `IngestPhase` enum** *(src/catalog/ingest_progress.rs, src/lib.rs)* + +Replace `IngestProgress::Phase { name: String }` with +`IngestProgress::Phase { phase: IngestPhase }` where: + +```rust +pub enum IngestPhase { Headers, Catalog, Zarr } +``` + +Add `impl IngestPhase { pub fn as_str(&self) -> &'static str { ... } }` so +Python dict conversion in `src/lib.rs` keeps emitting `"headers"` / `"catalog"` +/ `"zarr"`. No Python-side change. + +Update all call sites in `src/catalog/ingest.rs` to use the enum. + +--- + +**T9. Split `ingest_beamtime_inner` into phase functions** *(src/catalog/ingest.rs)* + +Introduce a private struct: + +```rust +struct IngestContext<'a> { + beamtime_id: i32, + zarr_path: PathBuf, + progress: Option<&'a IngestProgressSink>, + cancel: Option>, + pool: &'a rayon::ThreadPool, + scan_total_map: HashMap, +} +``` + +And split into: + +- `fn run_headers_phase(ctx: &IngestContext, paths: &[PathBuf], header_items: &[String]) -> Result>;` +- `fn run_catalog_phase(ctx: &IngestContext, conn: &mut SqliteConnection, rows: &[BtIngestRow]) -> Result<()>;` +- `fn run_zarr_phase(ctx: &IngestContext, rows: &[BtIngestRow]) -> Result<()>;` + +`ingest_beamtime_inner` becomes a thin orchestrator: discover → build ctx → +headers → catalog → zarr → return db path. + +No behavior change. Strict refactor. + +--- + +**T10. Synthetic-beamtime test harness** *(tests/fixtures.rs or Rust-side util)* + +Add a helper under `tests/` that writes N fake FITS files into a tmp dir +following the expected flat-CCD layout. Each file contains a minimal valid +BITPIX=16 image (e.g. 16x16 pixels). The helper returns the path. + +Use this from: + +- A new `tests/ingest_streaming.rs` that runs `ingest_beamtime` on ~100 + files across 10 scans and asserts streaming progress timestamps (T5). +- A new `scripts/bench_ingest.py` that generates e.g. 500 files, runs + `ingest_beamtime`, prints the same markdown table as + `scripts/profile_beamtime_ingest.py` but without NAS dependency. + +This is the local-CI-safe counterpart to the NAS profiler. + +## Dependencies between tasks + +- T5 depends on T1 (streaming wants fast per-file reads). +- T4 depends on T3 (RETURNING makes transactions cheaper to split). +- T9 should land after T1-T6 so the refactor wraps already-correct phases. +- T10 can land anytime but is most valuable after T5 (gives measurable data). + +## Risks and rollback + +- **Streaming zarr phase concurrent writes.** If zarrs `FilesystemStore` + turns out not to be thread-safe for array creation, fall back to a two-pool + design: N reader threads feeding one writer thread via a bounded channel. +- **Transaction batching overhead.** If 200-row batches cause measurable + commit overhead on real beamtimes, tune `MIN_BATCH_FILES` down. +- **RETURNING clause.** If a platform SQLite below 3.35 sneaks in through + system linking, the Diesel feature flag should still compile; runtime + errors would surface immediately in T3's test. Cargo config already + bundles `libsqlite3-sys` which is >= 3.44, so this is belt-and-suspenders. + +Every task produces one commit. Reverting individual commits gives +controlled rollback. From 47666a6aaf1fbd81d0b2a6c41828377d2ba8d8c8 Mon Sep 17 00:00:00 2001 From: Harlan D Heilman <73567020+HarlanHeilman@users.noreply.github.com> Date: Thu, 16 Apr 2026 11:36:37 -0700 Subject: [PATCH 02/22] perf(ingest): bulk-read FITS pixels in read_image_i32 Replaces the per-pixel read_exact(2) loop with a single read_exact into a preallocated buffer, then decodes via chunks_exact(2). Cuts ~170k syscalls per file on network-mounted FITS to 1, which dominates wall-clock during the zarr phase on NAS-backed beamtimes. Part of docs/plans/ingest-streaming-and-maintainability.md (T1). --- src/catalog/ingest.rs | 72 +++++++++++++++++++++++++++++++++++++++---- 1 file changed, 66 insertions(+), 6 deletions(-) diff --git a/src/catalog/ingest.rs b/src/catalog/ingest.rs index 29d6a40..687b1e7 100644 --- a/src/catalog/ingest.rs +++ b/src/catalog/ingest.rs @@ -72,12 +72,12 @@ fn read_image_i32(row: &BtIngestRow) -> Result> { f.seek(SeekFrom::Start(row.data_offset as u64)) .map_err(CatalogError::Io)?; let n = (row.naxis1 * row.naxis2) as usize; - let mut out = Vec::with_capacity(n); - let mut b = [0u8; 2]; - for _ in 0..n { - f.read_exact(&mut b).map_err(CatalogError::Io)?; - out.push(i16::from_be_bytes(b) as i32); - } + let mut buf = vec![0u8; n * 2]; + f.read_exact(&mut buf).map_err(CatalogError::Io)?; + let out: Vec = buf + .chunks_exact(2) + .map(|c| i16::from_be_bytes([c[0], c[1]]) as i32) + .collect(); Array2::from_shape_vec((row.naxis2 as usize, row.naxis1 as usize), out) .map_err(|e| CatalogError::Validation(e.to_string())) } @@ -596,3 +596,63 @@ fn ingest_beamtime_inner( let _ = incremental; Ok(db_path) } + +#[cfg(all(test, feature = "catalog"))] +mod tests { + use super::*; + use crate::loader::read_fits_headers_only_row; + + fn fixture_path() -> PathBuf { + PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .join("tests") + .join("fixtures") + .join("minimal.fits") + } + + #[test] + fn read_image_i32_bulk_read_decodes_minimal_fits() { + let path = fixture_path(); + if !path.exists() { + panic!("required fixture missing: {}", path.display()); + } + let header_items: Vec = Vec::new(); + let row = read_fits_headers_only_row(path, &header_items) + .expect("minimal.fits fixture should parse into BtIngestRow"); + let img = read_image_i32(&row).expect("read_image_i32 failed on minimal.fits"); + let rows = row.naxis2 as usize; + let cols = row.naxis1 as usize; + assert_eq!(img.shape(), [rows, cols]); + assert_eq!(img.len(), rows * cols); + assert_eq!(rows, 2, "fixture minimal.fits is a 2x2 image"); + assert_eq!(cols, 2, "fixture minimal.fits is a 2x2 image"); + assert_eq!( + img[[0, 0]], + 0_i32, + "first pixel (raw big-endian i16 -> i32)" + ); + assert_eq!(img[[0, 1]], 1_i32, "row-major second pixel"); + assert_eq!(img[[1, 0]], 2_i32, "second row first pixel"); + assert_eq!(img[[1, 1]], 3_i32, "last pixel"); + } + + #[test] + fn read_image_i32_rejects_non_bitpix_16() { + let path = fixture_path(); + if !path.exists() { + panic!("required fixture missing: {}", path.display()); + } + let header_items: Vec = Vec::new(); + let mut row = read_fits_headers_only_row(path, &header_items) + .expect("minimal.fits fixture should parse into BtIngestRow"); + row.bitpix = 8; + match read_image_i32(&row) { + Err(CatalogError::Validation(msg)) => { + assert!( + msg.contains("unsupported BITPIX"), + "unexpected message: {msg}" + ); + } + other => panic!("expected CatalogError::Validation, got {other:?}"), + } + } +} From 726cf245fc1ff5f74aacd8db479fa76092826a45 Mon Sep 17 00:00:00 2001 From: Harlan D Heilman <73567020+HarlanHeilman@users.noreply.github.com> Date: Thu, 16 Apr 2026 11:45:24 -0700 Subject: [PATCH 03/22] perf(ingest): drop duplicate /processed zarr array in write_frame_raw Removes the second zarr array that write_frame_raw wrote at /{scan}/{frame}/processed with identical bytes to /raw. Nothing in the codebase reads /processed; downstream processing produces its own outputs. Halves the filesystem metadata and chunk-write work per frame during the zarr phase. Updates module/function docstrings and the schema.rs comment that described the old two-array layout. Part of docs/plans/ingest-streaming-and-maintainability.md (T2). --- src/catalog/zarr_write.rs | 48 ++++++++++++++++++++++++++++----------- src/schema.rs | 6 ++--- 2 files changed, 38 insertions(+), 16 deletions(-) diff --git a/src/catalog/zarr_write.rs b/src/catalog/zarr_write.rs index adc2a0e..b9d0cd1 100644 --- a/src/catalog/zarr_write.rs +++ b/src/catalog/zarr_write.rs @@ -55,18 +55,40 @@ pub fn write_frame_raw( array .store_chunk(&[0u64, 0u64], flat) .map_err(|e| FitsError::validation(e.to_string()))?; - let proc_path = format!("{base}/processed"); - let proc = ArrayBuilder::new( - vec![h as u64, w as u64], - vec![h as u64, w as u64], - data_type::int32(), - 0i32, - ) - .build(store.clone(), &proc_path) - .map_err(|e| FitsError::validation(e.to_string()))?; - proc.store_metadata() - .map_err(|e| FitsError::validation(e.to_string()))?; - proc.store_chunk(&[0u64, 0u64], data.iter().copied().collect::>()) - .map_err(|e| FitsError::validation(e.to_string()))?; Ok(()) } + +#[cfg(all(test, feature = "catalog"))] +mod tests { + use super::*; + use ndarray::Array2; + use tempfile::TempDir; + + #[test] + fn write_frame_raw_creates_only_raw_group() { + let tmp = TempDir::new().expect("create tempdir"); + let store = open_zarr_store(tmp.path()).expect("open zarr store"); + let scan_number: i64 = 42; + let frame_number: i64 = 7; + let data: Array2 = Array2::from_shape_fn((4, 5), |(r, c)| (r * 10 + c) as i32); + + write_frame_raw(&store, scan_number, frame_number, &data).expect("write frame"); + + let raw_path = tmp + .path() + .join(scan_number.to_string()) + .join(format!("{frame_number:05}")) + .join("raw"); + assert!(raw_path.is_dir(), "expected raw array dir at {raw_path:?}"); + + let proc_path = tmp + .path() + .join(scan_number.to_string()) + .join(format!("{frame_number:05}")) + .join("processed"); + assert!( + !proc_path.exists(), + "expected no processed array at {proc_path:?}" + ); + } +} diff --git a/src/schema.rs b/src/schema.rs index 48b0804..1745721 100644 --- a/src/schema.rs +++ b/src/schema.rs @@ -249,9 +249,9 @@ diesel::table! { /// header cards are stored in `frame_header_values`. /// /// Zarr retrieval: the monolithic beamtime archive is `beamtimes.zarr_path`. - /// Within the archive, images are at - /// `///raw` and - /// `///processed`. + /// Within the archive, raw images are at + /// `///raw`. Processed arrays are produced by + /// downstream processing, not ingest. frames (id) { id -> Integer, scan_id -> Integer, From 8216275a4086c587406999aca92fdba2545937e0 Mon Sep 17 00:00:00 2001 From: Harlan D Heilman <73567020+HarlanHeilman@users.noreply.github.com> Date: Thu, 16 Apr 2026 11:53:57 -0700 Subject: [PATCH 04/22] perf(ingest): use RETURNING instead of SELECT-after-INSERT in catalog phase Replaces the N+1 SELECT pattern for samples/scans/files/tags with `.returning(id).get_result(conn)` inside ingest_beamtime_inner. Cuts SQLite round-trips in the catalog transaction roughly in half for the rows inserted this ingest run. Diesel's returning_clauses_for_sqlite_3_35 feature is already enabled and the bundled libsqlite3-sys is >= 3.44. Part of docs/plans/ingest-streaming-and-maintainability.md (T3). --- src/catalog/ingest.rs | 134 ++++++++++++++++++++++++++++++++---------- 1 file changed, 103 insertions(+), 31 deletions(-) diff --git a/src/catalog/ingest.rs b/src/catalog/ingest.rs index 687b1e7..23b9642 100644 --- a/src/catalog/ingest.rs +++ b/src/catalog/ingest.rs @@ -350,7 +350,7 @@ fn ingest_beamtime_inner( conn.transaction::<(), diesel::result::Error, _>(|conn| { let mut catalog_scan_done: HashMap = HashMap::new(); for name in &unique_samples { - diesel::insert_into(samples::table) + let sid: i32 = diesel::insert_into(samples::table) .values(( samples::beamtime_id.eq(beamtime_id), samples::name.eq(name.as_str()), @@ -358,12 +358,8 @@ fn ingest_beamtime_inner( samples::representative_y.eq(0.0_f64), samples::representative_z.eq(0.0_f64), )) - .execute(conn)?; - let sid: i32 = samples::table - .filter(samples::beamtime_id.eq(beamtime_id)) - .filter(samples::name.eq(name.as_str())) - .select(samples::id) - .first(conn)?; + .returning(samples::id) + .get_result(conn)?; sample_cache.insert(name.clone(), sid); } @@ -386,7 +382,7 @@ fn ingest_beamtime_inner( let rep_sample = *sample_cache .get(&sk) .ok_or_else(|| diesel::result::Error::NotFound)?; - diesel::insert_into(scans::table) + let scid: i32 = diesel::insert_into(scans::table) .values(( scans::beamtime_id.eq(beamtime_id), scans::sample_id.eq(rep_sample), @@ -395,12 +391,8 @@ fn ingest_beamtime_inner( scans::started_at.eq(None::), scans::ended_at.eq(None::), )) - .execute(conn)?; - let scid: i32 = scans::table - .filter(scans::beamtime_id.eq(beamtime_id)) - .filter(scans::scan_number.eq(*sn)) - .select(scans::id) - .first(conn)?; + .returning(scans::id) + .get_result(conn)?; scan_cache.insert(*sn, scid); } @@ -432,7 +424,7 @@ fn ingest_beamtime_inner( None }; - diesel::insert_into(files::table) + let file_id: i32 = diesel::insert_into(files::table) .values(( files::beamtime_id.eq(beamtime_id), files::sample_id.eq(sample_id), @@ -450,13 +442,8 @@ fn ingest_beamtime_inner( files::bitpix.eq(row.bitpix as i32), files::bzero.eq(row.bzero), )) - .execute(conn)?; - - let file_id: i32 = files::table - .filter(files::beamtime_id.eq(beamtime_id)) - .filter(files::nas_uri.eq(row.file_path.as_str())) - .select(files::id) - .first(conn)?; + .returning(files::id) + .get_result(conn)?; if let Some(tag_slug) = row.tag.as_ref().filter(|t| !t.is_empty()) { let tid: i32 = match tags::table @@ -466,15 +453,10 @@ fn ingest_beamtime_inner( .optional()? { Some(id) => id, - None => { - diesel::insert_into(tags::table) - .values(tags::slug.eq(tag_slug.as_str())) - .execute(conn)?; - tags::table - .filter(tags::slug.eq(tag_slug.as_str())) - .select(tags::id) - .first(conn)? - } + None => diesel::insert_into(tags::table) + .values(tags::slug.eq(tag_slug.as_str())) + .returning(tags::id) + .get_result(conn)?, }; let ft_exists: Option = file_tags::table .filter(file_tags::file_id.eq(file_id)) @@ -601,6 +583,9 @@ fn ingest_beamtime_inner( mod tests { use super::*; use crate::loader::read_fits_headers_only_row; + use std::sync::Mutex; + + static ENV_LOCK: Mutex<()> = Mutex::new(()); fn fixture_path() -> PathBuf { PathBuf::from(env!("CARGO_MANIFEST_DIR")) @@ -655,4 +640,91 @@ mod tests { other => panic!("expected CatalogError::Validation, got {other:?}"), } } + + struct EnvGuard { + key: &'static str, + prev: Option, + } + + impl EnvGuard { + fn set(key: &'static str, value: &std::path::Path) -> Self { + let prev = std::env::var_os(key); + std::env::set_var(key, value); + Self { key, prev } + } + + fn unset(key: &'static str) -> Self { + let prev = std::env::var_os(key); + std::env::remove_var(key); + Self { key, prev } + } + } + + impl Drop for EnvGuard { + fn drop(&mut self) { + match self.prev.take() { + Some(v) => std::env::set_var(self.key, v), + None => std::env::remove_var(self.key), + } + } + } + + fn count_rows(db_path: &std::path::Path) -> Result<(i64, i64, i64)> { + let mut conn = db::establish_connection(db_path)?; + let s: i64 = samples::table + .count() + .get_result(&mut conn) + .map_err(CatalogError::Diesel)?; + let sc: i64 = scans::table + .count() + .get_result(&mut conn) + .map_err(CatalogError::Diesel)?; + let f: i64 = files::table + .count() + .get_result(&mut conn) + .map_err(CatalogError::Diesel)?; + Ok((s, sc, f)) + } + + #[test] + fn ingest_is_idempotent_across_reingests() { + let fixture = fixture_path(); + if !fixture.exists() { + panic!("required fixture missing: {}", fixture.display()); + } + let tmp = tempfile::tempdir().expect("create tempdir for PYREF_HOME"); + let beamtime_dir = tmp.path().join("2024-01-01"); + let ccd_dir = beamtime_dir.join("CCD"); + std::fs::create_dir_all(&ccd_dir).expect("create CCD dir"); + std::fs::copy(&fixture, ccd_dir.join("minimal.fits")).expect("copy fixture"); + + let _guard = ENV_LOCK.lock().unwrap_or_else(|p| p.into_inner()); + let _home = EnvGuard::set("PYREF_HOME", tmp.path()); + let _db = EnvGuard::unset("PYREF_CATALOG_DB"); + let _cache = EnvGuard::unset("PYREF_CACHE_ROOT"); + + let header_items: Vec = DEFAULT_INGEST_HEADER_ITEMS + .iter() + .map(|s| (*s).to_string()) + .collect(); + + let db_path1 = ingest_beamtime(&beamtime_dir, &header_items, false, None) + .expect("first ingest run should succeed"); + let counts_1 = count_rows(&db_path1).expect("count rows after run 1"); + + let db_path2 = ingest_beamtime(&beamtime_dir, &header_items, false, None) + .expect("second ingest run should succeed"); + let counts_2 = count_rows(&db_path2).expect("count rows after run 2"); + + assert_eq!(db_path1, db_path2, "catalog path should be deterministic"); + assert_eq!( + counts_1, + (1, 1, 1), + "first run should produce exactly 1 sample/scan/file, got {counts_1:?}" + ); + assert_eq!( + counts_1, counts_2, + "reingest must be exactly idempotent (run1={counts_1:?}, run2={counts_2:?})" + ); + } } From 4f5f0faf2ca66b1383f6b3c6608a819289fa9bc7 Mon Sep 17 00:00:00 2001 From: Harlan D Heilman <73567020+HarlanHeilman@users.noreply.github.com> Date: Thu, 16 Apr 2026 12:09:04 -0700 Subject: [PATCH 05/22] perf(ingest): batch catalog transactions with small-scan coalescing Splits the monolithic catalog-phase SQLite transaction into batches of MIN_BATCH_ROWS=200 to MAX_BATCH_ROWS=1000 rows. Scans are never split across batches. Small scans coalesce until the batch reaches MIN or the next scan would push it over MAX; very large scans (>MAX) get their own batch. Samples insert stays in a separate one-shot transaction up front. Shorter lock hold times let concurrent SQLite readers query during long ingests and make committed rows visible incrementally. Catalog progress events remain unchanged. Part of docs/plans/ingest-streaming-and-maintainability.md (T4). --- src/catalog/ingest.rs | 490 +++++++++++++++++++++++++++++------------- 1 file changed, 336 insertions(+), 154 deletions(-) diff --git a/src/catalog/ingest.rs b/src/catalog/ingest.rs index 23b9642..bc2c9e2 100644 --- a/src/catalog/ingest.rs +++ b/src/catalog/ingest.rs @@ -35,6 +35,44 @@ use super::parallelism::IngestParallelism; use super::zarr_write::{open_zarr_store, write_frame_raw}; use super::{db, paths, CatalogError, Result}; +const MIN_BATCH_ROWS: usize = 200; +const MAX_BATCH_ROWS: usize = 1000; +const _: () = assert!( + MIN_BATCH_ROWS > 0 && MIN_BATCH_ROWS <= MAX_BATCH_ROWS, + "catalog batch bounds must satisfy 0 < MIN <= MAX" +); + +fn plan_catalog_batches(rows: &[BtIngestRow]) -> Vec<(usize, usize)> { + let mut batches: Vec<(usize, usize)> = Vec::new(); + if rows.is_empty() { + return batches; + } + + let mut scan_segments: Vec<(usize, usize)> = Vec::new(); + let mut seg_start = 0_usize; + for i in 1..rows.len() { + if rows[i].scan_number != rows[seg_start].scan_number { + scan_segments.push((seg_start, i)); + seg_start = i; + } + } + scan_segments.push((seg_start, rows.len())); + + let mut batch_start = scan_segments[0].0; + let mut batch_rows: usize = 0; + for (s, e) in scan_segments { + let scan_rows = e - s; + if batch_rows > 0 && batch_rows + scan_rows > MAX_BATCH_ROWS { + batches.push((batch_start, s)); + batch_start = s; + batch_rows = 0; + } + batch_rows += scan_rows; + } + batches.push((batch_start, rows.len())); + batches +} + pub const DEFAULT_INGEST_HEADER_ITEMS: &[&str] = &[ "DATE", "Beamline Energy", @@ -348,7 +386,6 @@ fn ingest_beamtime_inner( .collect(); conn.transaction::<(), diesel::result::Error, _>(|conn| { - let mut catalog_scan_done: HashMap = HashMap::new(); for name in &unique_samples { let sid: i32 = diesel::insert_into(samples::table) .values(( @@ -362,168 +399,187 @@ fn ingest_beamtime_inner( .get_result(conn)?; sample_cache.insert(name.clone(), sid); } + Ok(()) + }) + .map_err(CatalogError::Diesel)?; - let mut scan_first_sample: HashMap = HashMap::new(); - for r in &rows { - let sn = r.scan_number as i32; - let sk = if r.sample_name.trim().is_empty() { - "_".to_string() - } else { - r.sample_name.clone() - }; - scan_first_sample.entry(sn).or_insert(sk); - } - let unique_scans: HashSet = rows.iter().map(|r| r.scan_number as i32).collect(); - for sn in &unique_scans { - let sk = scan_first_sample - .get(sn) - .cloned() - .unwrap_or_else(|| "_".to_string()); - let rep_sample = *sample_cache - .get(&sk) - .ok_or_else(|| diesel::result::Error::NotFound)?; - let scid: i32 = diesel::insert_into(scans::table) - .values(( - scans::beamtime_id.eq(beamtime_id), - scans::sample_id.eq(rep_sample), - scans::scan_number.eq(*sn), - scans::scan_type.eq("fixed_energy"), - scans::started_at.eq(None::), - scans::ended_at.eq(None::), - )) - .returning(scans::id) - .get_result(conn)?; - scan_cache.insert(*sn, scid); - } + let mut scan_first_sample: HashMap = HashMap::new(); + for r in &rows { + let sn = r.scan_number as i32; + let sk = if r.sample_name.trim().is_empty() { + "_".to_string() + } else { + r.sample_name.clone() + }; + scan_first_sample.entry(sn).or_insert(sk); + } - for (idx, row) in rows.iter().enumerate() { - if cancel - .as_ref() - .map(|c| c.load(std::sync::atomic::Ordering::Relaxed)) - .unwrap_or(false) - { - return Err(diesel::result::Error::RollbackTransaction); - } - let sample_key = if row.sample_name.trim().is_empty() { - "_".to_string() - } else { - row.sample_name.clone() - }; - let sample_id = *sample_cache - .get(&sample_key) - .ok_or_else(|| diesel::result::Error::NotFound)?; - - let scan_no = row.scan_number as i32; - let scan_id = *scan_cache - .get(&scan_no) - .ok_or_else(|| diesel::result::Error::NotFound)?; - - let parse_flag = if row.scan_number == 0 || row.frame_number == 0 { - Some("parse_failure".to_string()) - } else { - None - }; + let batches = plan_catalog_batches(&rows); + let global_total = rows.len() as u32; + let mut catalog_scan_done: HashMap = HashMap::new(); - let file_id: i32 = diesel::insert_into(files::table) - .values(( - files::beamtime_id.eq(beamtime_id), - files::sample_id.eq(sample_id), - files::scan_number.eq(scan_no), - files::frame_number.eq(row.frame_number as i32), - files::nas_uri.eq(row.file_path.as_str()), - files::filename.eq(Path::new(&row.file_path) - .file_name() - .and_then(|s| s.to_str()) - .unwrap_or("")), - files::parse_flag.eq(parse_flag.as_deref()), - files::data_offset.eq(row.data_offset), - files::naxis1.eq(row.naxis1 as i32), - files::naxis2.eq(row.naxis2 as i32), - files::bitpix.eq(row.bitpix as i32), - files::bzero.eq(row.bzero), - )) - .returning(files::id) - .get_result(conn)?; + for (start, end) in batches { + conn.transaction::<(), diesel::result::Error, _>(|conn| { + let mut batch_scans_seen: HashSet = HashSet::new(); + for row in &rows[start..end] { + let sn = row.scan_number as i32; + if !batch_scans_seen.insert(sn) { + continue; + } + if scan_cache.contains_key(&sn) { + continue; + } + let sk = scan_first_sample + .get(&sn) + .cloned() + .unwrap_or_else(|| "_".to_string()); + let rep_sample = *sample_cache + .get(&sk) + .ok_or(diesel::result::Error::NotFound)?; + let scid: i32 = diesel::insert_into(scans::table) + .values(( + scans::beamtime_id.eq(beamtime_id), + scans::sample_id.eq(rep_sample), + scans::scan_number.eq(sn), + scans::scan_type.eq("fixed_energy"), + scans::started_at.eq(None::), + scans::ended_at.eq(None::), + )) + .returning(scans::id) + .get_result(conn)?; + scan_cache.insert(sn, scid); + } - if let Some(tag_slug) = row.tag.as_ref().filter(|t| !t.is_empty()) { - let tid: i32 = match tags::table - .filter(tags::slug.eq(tag_slug.as_str())) - .select(tags::id) - .first(conn) - .optional()? + for (local_idx, row) in rows[start..end].iter().enumerate() { + if cancel + .as_ref() + .map(|c| c.load(std::sync::atomic::Ordering::Relaxed)) + .unwrap_or(false) { - Some(id) => id, - None => diesel::insert_into(tags::table) - .values(tags::slug.eq(tag_slug.as_str())) - .returning(tags::id) - .get_result(conn)?, - }; - let ft_exists: Option = file_tags::table - .filter(file_tags::file_id.eq(file_id)) - .filter(file_tags::tag_id.eq(tid)) - .select(file_tags::id) - .first(conn) - .optional()?; - if ft_exists.is_none() { - diesel::insert_into(file_tags::table) - .values((file_tags::file_id.eq(file_id), file_tags::tag_id.eq(tid))) - .execute(conn)?; + return Err(diesel::result::Error::RollbackTransaction); } - } + let sample_key = if row.sample_name.trim().is_empty() { + "_".to_string() + } else { + row.sample_name.clone() + }; + let sample_id = *sample_cache + .get(&sample_key) + .ok_or(diesel::result::Error::NotFound)?; + + let scan_no = row.scan_number as i32; + let scan_id = *scan_cache + .get(&scan_no) + .ok_or(diesel::result::Error::NotFound)?; + + let parse_flag = if row.scan_number == 0 || row.frame_number == 0 { + Some("parse_failure".to_string()) + } else { + None + }; - let sx = row.sample_x.unwrap_or(0.0); - let sy = row.sample_y.unwrap_or(0.0); - let sz = row.sample_z.unwrap_or(0.0); - let st = row.sample_theta.unwrap_or(0.0); - let ccd = row.ccd_theta.unwrap_or(0.0); - let epu = row.epu_polarization.unwrap_or(0.0); - let exp = row.exposure.unwrap_or(0.0); - let be = row.beamline_energy.unwrap_or(0.0); - let ring = row.ring_current.unwrap_or(0.0); - let ai3 = row.ai3_izero.unwrap_or(0.0); - let bcm = row.beam_current.unwrap_or(0.0); - - diesel::insert_into(frames::table) - .values(( - frames::scan_id.eq(scan_id), - frames::file_id.eq(file_id), - frames::frame_number.eq(row.frame_number as i32), - frames::zarr_group_key.eq(scan_no), - frames::zarr_frame_index.eq(row.frame_number as i32), - frames::acquired_at.eq(row.date_iso.clone()), - frames::sample_x.eq(sx), - frames::sample_y.eq(sy), - frames::sample_z.eq(sz), - frames::sample_theta.eq(st), - frames::ccd_theta.eq(ccd), - frames::beamline_energy.eq(be), - frames::epu_polarization.eq(epu), - frames::exposure.eq(exp), - frames::ring_current.eq(ring), - frames::ai3_izero.eq(ai3), - frames::beam_current.eq(bcm), - frames::quality_flag.eq(None::), - )) - .execute(conn)?; + let file_id: i32 = diesel::insert_into(files::table) + .values(( + files::beamtime_id.eq(beamtime_id), + files::sample_id.eq(sample_id), + files::scan_number.eq(scan_no), + files::frame_number.eq(row.frame_number as i32), + files::nas_uri.eq(row.file_path.as_str()), + files::filename.eq(Path::new(&row.file_path) + .file_name() + .and_then(|s| s.to_str()) + .unwrap_or("")), + files::parse_flag.eq(parse_flag.as_deref()), + files::data_offset.eq(row.data_offset), + files::naxis1.eq(row.naxis1 as i32), + files::naxis2.eq(row.naxis2 as i32), + files::bitpix.eq(row.bitpix as i32), + files::bzero.eq(row.bzero), + )) + .returning(files::id) + .get_result(conn)?; + + if let Some(tag_slug) = row.tag.as_ref().filter(|t| !t.is_empty()) { + let tid: i32 = match tags::table + .filter(tags::slug.eq(tag_slug.as_str())) + .select(tags::id) + .first(conn) + .optional()? + { + Some(id) => id, + None => diesel::insert_into(tags::table) + .values(tags::slug.eq(tag_slug.as_str())) + .returning(tags::id) + .get_result(conn)?, + }; + let ft_exists: Option = file_tags::table + .filter(file_tags::file_id.eq(file_id)) + .filter(file_tags::tag_id.eq(tid)) + .select(file_tags::id) + .first(conn) + .optional()?; + if ft_exists.is_none() { + diesel::insert_into(file_tags::table) + .values((file_tags::file_id.eq(file_id), file_tags::tag_id.eq(tid))) + .execute(conn)?; + } + } - if let Some(ref sink) = progress { - let sn = row.scan_number as i32; - let e = catalog_scan_done.entry(sn).or_insert(0); - *e += 1; - let sd = *e; - let st = scan_total_map.get(&sn).copied().unwrap_or(0); - sink.emit(IngestProgress::CatalogRow { - scan_number: sn, - scan_done: sd, - scan_total: st, - global_done: (idx + 1) as u32, - global_total: rows.len() as u32, - }); + let sx = row.sample_x.unwrap_or(0.0); + let sy = row.sample_y.unwrap_or(0.0); + let sz = row.sample_z.unwrap_or(0.0); + let st = row.sample_theta.unwrap_or(0.0); + let ccd = row.ccd_theta.unwrap_or(0.0); + let epu = row.epu_polarization.unwrap_or(0.0); + let exp = row.exposure.unwrap_or(0.0); + let be = row.beamline_energy.unwrap_or(0.0); + let ring = row.ring_current.unwrap_or(0.0); + let ai3 = row.ai3_izero.unwrap_or(0.0); + let bcm = row.beam_current.unwrap_or(0.0); + + diesel::insert_into(frames::table) + .values(( + frames::scan_id.eq(scan_id), + frames::file_id.eq(file_id), + frames::frame_number.eq(row.frame_number as i32), + frames::zarr_group_key.eq(scan_no), + frames::zarr_frame_index.eq(row.frame_number as i32), + frames::acquired_at.eq(row.date_iso.clone()), + frames::sample_x.eq(sx), + frames::sample_y.eq(sy), + frames::sample_z.eq(sz), + frames::sample_theta.eq(st), + frames::ccd_theta.eq(ccd), + frames::beamline_energy.eq(be), + frames::epu_polarization.eq(epu), + frames::exposure.eq(exp), + frames::ring_current.eq(ring), + frames::ai3_izero.eq(ai3), + frames::beam_current.eq(bcm), + frames::quality_flag.eq(None::), + )) + .execute(conn)?; + + if let Some(ref sink) = progress { + let sn = row.scan_number as i32; + let e = catalog_scan_done.entry(sn).or_insert(0); + *e += 1; + let sd = *e; + let st = scan_total_map.get(&sn).copied().unwrap_or(0); + let global_idx = (start + local_idx + 1) as u32; + sink.emit(IngestProgress::CatalogRow { + scan_number: sn, + scan_done: sd, + scan_total: st, + global_done: global_idx, + global_total, + }); + } } - } - Ok(()) - }) - .map_err(CatalogError::Diesel)?; + Ok(()) + }) + .map_err(CatalogError::Diesel)?; + } if let Some(ref sink) = progress { sink.emit(IngestProgress::Phase { @@ -686,6 +742,132 @@ mod tests { Ok((s, sc, f)) } + fn make_row(scan_number: i64, frame_number: i64) -> BtIngestRow { + BtIngestRow { + file_path: format!("/tmp/{scan_number}_{frame_number}.fits"), + data_offset: 0, + naxis1: 1, + naxis2: 1, + bitpix: 16, + bzero: 0, + file_name: format!("{scan_number}_{frame_number}.fits"), + sample_name: "s".into(), + tag: None, + scan_number, + frame_number, + beamline_energy: None, + sample_theta: None, + ccd_theta: None, + epu_polarization: None, + exposure: None, + sample_x: None, + sample_y: None, + sample_z: None, + ring_current: None, + ai3_izero: None, + beam_current: None, + date_iso: None, + } + } + + fn rows_for_scans(sizes: &[(i64, usize)]) -> Vec { + let mut out = Vec::new(); + for &(sn, count) in sizes { + for f in 0..count { + out.push(make_row(sn, f as i64)); + } + } + out + } + + #[test] + fn plan_catalog_batches_groups_small_scans() { + let rows = rows_for_scans(&[(1, 5), (2, 5), (3, 5), (4, 5), (5, 5), (6, 3000)]); + let batches = plan_catalog_batches(&rows); + assert_eq!( + batches, + vec![(0, 25), (25, 3025)], + "small scans must coalesce then seal when the next large scan would overflow MAX" + ); + const _: () = assert!(MAX_BATCH_ROWS < 3000); + } + + #[test] + fn plan_catalog_batches_fills_to_min_before_sealing() { + let sizes: Vec<(i64, usize)> = (1..=20).map(|sn| (sn, 50)).collect(); + let rows = rows_for_scans(&sizes); + let batches = plan_catalog_batches(&rows); + assert_eq!( + batches, + vec![(0, 1000)], + "twenty 50-row scans must fit in one MAX-sized batch, not seal at MIN" + ); + let (start, end) = batches[0]; + assert!( + end - start >= MIN_BATCH_ROWS, + "batch must be at least MIN rows" + ); + } + + #[test] + fn plan_catalog_batches_isolates_oversized_scan() { + let rows = rows_for_scans(&[(1, 3000)]); + let batches = plan_catalog_batches(&rows); + assert_eq!( + batches, + vec![(0, 3000)], + "single scan > MAX gets its own overflow batch" + ); + } + + #[test] + fn plan_catalog_batches_empty_rows_empty_plan() { + let rows: Vec = Vec::new(); + assert!(plan_catalog_batches(&rows).is_empty()); + } + + #[test] + fn ingest_produces_same_row_counts_as_single_transaction() { + let fixture = fixture_path(); + if !fixture.exists() { + panic!("required fixture missing: {}", fixture.display()); + } + let tmp = tempfile::tempdir().expect("create tempdir for PYREF_HOME"); + let beamtime_dir = tmp.path().join("2024-02-02"); + let ccd_dir = beamtime_dir.join("CCD"); + std::fs::create_dir_all(&ccd_dir).expect("create CCD dir"); + std::fs::copy(&fixture, ccd_dir.join("minimal.fits")).expect("copy fixture"); + + let _guard = ENV_LOCK.lock().unwrap_or_else(|p| p.into_inner()); + let _home = EnvGuard::set("PYREF_HOME", tmp.path()); + let _db = EnvGuard::unset("PYREF_CATALOG_DB"); + let _cache = EnvGuard::unset("PYREF_CACHE_ROOT"); + + let header_items: Vec = DEFAULT_INGEST_HEADER_ITEMS + .iter() + .map(|s| (*s).to_string()) + .collect(); + + let db_path = ingest_beamtime(&beamtime_dir, &header_items, false, None) + .expect("batched ingest should succeed"); + let counts = count_rows(&db_path).expect("count rows after ingest"); + let mut conn = db::establish_connection(&db_path).expect("open catalog db"); + let frame_count: i64 = frames::table + .count() + .get_result(&mut conn) + .expect("count frames"); + + assert_eq!( + counts, + (1, 1, 1), + "batched ingest must produce exactly 1 sample/scan/file, got {counts:?}" + ); + assert_eq!( + frame_count, 1, + "batched ingest must produce exactly 1 frame" + ); + } + #[test] fn ingest_is_idempotent_across_reingests() { let fixture = fixture_path(); From 5470a3417273dcef75b7facaa2249bd67e8889d2 Mon Sep 17 00:00:00 2001 From: Harlan D Heilman <73567020+HarlanHeilman@users.noreply.github.com> Date: Thu, 16 Apr 2026 12:20:58 -0700 Subject: [PATCH 06/22] refactor(ingest): clean up T4 review findings - Remove unused MIN_BATCH_ROWS constant. The greedy planner only enforces MAX; MIN was aspirational, never enforced, and the associated `plan_catalog_batches_fills_to_min_before_sealing` test did not actually exercise a MIN boundary. - Rename `ingest_produces_same_row_counts_as_single_transaction` to `ingest_produces_expected_row_counts_for_minimal_fixture` since the fixture is too small to cross a batch boundary. - Add module-level doc comment explaining ingest phases and partial-failure semantics: prior committed batches remain on error; re-invoking ingest deletes the beamtime row and cascades stale data. - Check cancel inside the samples pre-transaction so long samples-heavy ingests respond to cancellation. Addresses Important findings from T4 code-quality review. Part of docs/plans/ingest-streaming-and-maintainability.md (T4). --- src/catalog/ingest.rs | 39 ++++++++++++++++----------------------- 1 file changed, 16 insertions(+), 23 deletions(-) diff --git a/src/catalog/ingest.rs b/src/catalog/ingest.rs index bc2c9e2..d0170c4 100644 --- a/src/catalog/ingest.rs +++ b/src/catalog/ingest.rs @@ -1,5 +1,13 @@ //! Beamtime ingest: Diesel catalog rows and zarr arrays in one pass. //! +//! Ingest runs in three phases: headers (parallel FITS header parsing), +//! catalog (batched SQLite transactions of scans/files/tags/frames), and +//! zarr (raw pixel write). On mid-ingest failure, batches that already +//! committed remain in the catalog and partial zarr writes remain on disk. +//! Re-invoking `ingest_beamtime*` on the same beamtime directory deletes +//! and re-inserts the `beamtimes` row, cascading away stale scan/file +//! rows before inserting fresh data. +//! //! SQLite allows one writer at a time. Ingest uses a single [`diesel::SqliteConnection`] for all //! catalog mutations in this process. After `fork` or when spawning a subprocess, open a new //! connection in the child; do not share a connection across process boundaries. @@ -35,12 +43,7 @@ use super::parallelism::IngestParallelism; use super::zarr_write::{open_zarr_store, write_frame_raw}; use super::{db, paths, CatalogError, Result}; -const MIN_BATCH_ROWS: usize = 200; const MAX_BATCH_ROWS: usize = 1000; -const _: () = assert!( - MIN_BATCH_ROWS > 0 && MIN_BATCH_ROWS <= MAX_BATCH_ROWS, - "catalog batch bounds must satisfy 0 < MIN <= MAX" -); fn plan_catalog_batches(rows: &[BtIngestRow]) -> Vec<(usize, usize)> { let mut batches: Vec<(usize, usize)> = Vec::new(); @@ -387,6 +390,13 @@ fn ingest_beamtime_inner( conn.transaction::<(), diesel::result::Error, _>(|conn| { for name in &unique_samples { + if cancel + .as_ref() + .map(|c| c.load(std::sync::atomic::Ordering::Relaxed)) + .unwrap_or(false) + { + return Err(diesel::result::Error::RollbackTransaction); + } let sid: i32 = diesel::insert_into(samples::table) .values(( samples::beamtime_id.eq(beamtime_id), @@ -792,23 +802,6 @@ mod tests { const _: () = assert!(MAX_BATCH_ROWS < 3000); } - #[test] - fn plan_catalog_batches_fills_to_min_before_sealing() { - let sizes: Vec<(i64, usize)> = (1..=20).map(|sn| (sn, 50)).collect(); - let rows = rows_for_scans(&sizes); - let batches = plan_catalog_batches(&rows); - assert_eq!( - batches, - vec![(0, 1000)], - "twenty 50-row scans must fit in one MAX-sized batch, not seal at MIN" - ); - let (start, end) = batches[0]; - assert!( - end - start >= MIN_BATCH_ROWS, - "batch must be at least MIN rows" - ); - } - #[test] fn plan_catalog_batches_isolates_oversized_scan() { let rows = rows_for_scans(&[(1, 3000)]); @@ -827,7 +820,7 @@ mod tests { } #[test] - fn ingest_produces_same_row_counts_as_single_transaction() { + fn ingest_produces_expected_row_counts_for_minimal_fixture() { let fixture = fixture_path(); if !fixture.exists() { panic!("required fixture missing: {}", fixture.display()); From 778d83685265995361e056e17f55038b8f528b47 Mon Sep 17 00:00:00 2001 From: Harlan D Heilman <73567020+HarlanHeilman@users.noreply.github.com> Date: Thu, 16 Apr 2026 12:30:26 -0700 Subject: [PATCH 07/22] perf(ingest): stream zarr phase with bounded-parallel read->write Replaces the memory-buffering zarr phase (~9 GB peak resident on large beamtimes) with a crossbeam-channel pipeline. Reader pool pushes decoded images onto a bounded channel of capacity n_workers*2; writer drains the channel and writes each frame via write_frame_raw, emitting FileComplete as each write lands. Peak image residency is now bounded by the channel capacity (typically O(16 MB)). FileComplete events fire incrementally rather than bursting after the final read, giving live progress bars during zarr writes. Order of FileComplete emission switches from row-index order to write completion order; global_done still reaches rows.len() exactly. Part of docs/plans/ingest-streaming-and-maintainability.md (T5). --- src/catalog/ingest.rs | 174 +++++++++++++++++++++++++++++++++--------- 1 file changed, 136 insertions(+), 38 deletions(-) diff --git a/src/catalog/ingest.rs b/src/catalog/ingest.rs index d0170c4..63b083b 100644 --- a/src/catalog/ingest.rs +++ b/src/catalog/ingest.rs @@ -19,7 +19,7 @@ //! transactions and [`super::zarr_write::write_frame_raw`] run on the calling thread in global row //! order so catalog rows and zarr datasets stay aligned. -use std::collections::{BTreeMap, HashMap, HashSet}; +use std::collections::{HashMap, HashSet}; use std::fs::File; use std::io::{Read, Seek, SeekFrom}; use std::path::{Path, PathBuf}; @@ -597,49 +597,86 @@ fn ingest_beamtime_inner( }); } - let mut by_scan: BTreeMap> = BTreeMap::new(); - for (i, r) in rows.iter().enumerate() { - by_scan.entry(r.scan_number as i32).or_default().push(i); - } - let scan_order: Vec = by_scan.keys().copied().collect(); - - let read_chunks: Vec)>> = pool.install(|| { - scan_order - .par_iter() - .map(|&sn| -> Result)>> { - let idxs: Vec = by_scan.get(&sn).cloned().unwrap_or_default(); - idxs.into_iter() - .map(|row_i| read_image_i32(&rows[row_i]).map(|img| (row_i, img))) - .collect::, _>>() - }) - .collect::, _>>() - })?; - let mut flat: Vec<(usize, Array2)> = read_chunks.into_iter().flatten().collect(); - flat.sort_by_key(|(i, _)| *i); + let channel_cap = (n_workers.saturating_mul(2)).max(4); + let (tx, rx) = crossbeam_channel::bounded::)>>(channel_cap); + let stop = std::sync::atomic::AtomicBool::new(false); let mut scan_done: HashMap = HashMap::new(); let mut global_done: u32 = 0; let global_total = rows.len() as u32; - for (i, img) in flat { - let row = &rows[i]; - write_frame_raw(&zstore, row.scan_number, row.frame_number, &img) - .map_err(|e| CatalogError::Validation(e.to_string()))?; - let sn = row.scan_number as i32; - let e = scan_done.entry(sn).or_insert(0); - *e += 1; - let sd = *e; - let st = scan_total_map.get(&sn).copied().unwrap_or(0); - global_done += 1; - if let Some(ref sink) = progress { - sink.emit(IngestProgress::FileComplete { - scan_number: sn, - scan_done: sd, - scan_total: st, - global_done, - global_total, + + std::thread::scope(|s| -> Result<()> { + let rows_ref: &[BtIngestRow] = &rows; + let pool_ref: &rayon::ThreadPool = &pool; + let cancel_ref = cancel.as_ref(); + let stop_ref = &stop; + + let reader_handle = s.spawn(move || { + pool_ref.install(move || { + rows_ref + .par_iter() + .enumerate() + .for_each_with(tx, |tx_c, (row_i, row)| { + if stop_ref.load(std::sync::atomic::Ordering::Relaxed) { + return; + } + if cancel_ref + .map(|c| c.load(std::sync::atomic::Ordering::Relaxed)) + .unwrap_or(false) + { + return; + } + let item = read_image_i32(row).map(|img| (row_i, img)); + if tx_c.send(item).is_err() { + stop_ref.store(true, std::sync::atomic::Ordering::Relaxed); + } + }); }); + }); + + let mut write_err: Option = None; + for item in rx.iter() { + if write_err.is_some() { + continue; + } + let step: Result<()> = (|| { + let (row_i, img) = item?; + let row = &rows[row_i]; + write_frame_raw(&zstore, row.scan_number, row.frame_number, &img) + .map_err(|e| CatalogError::Validation(e.to_string()))?; + drop(img); + let sn = row.scan_number as i32; + let entry = scan_done.entry(sn).or_insert(0); + *entry += 1; + let sd = *entry; + let st = scan_total_map.get(&sn).copied().unwrap_or(0); + global_done += 1; + if let Some(ref sink) = progress { + sink.emit(IngestProgress::FileComplete { + scan_number: sn, + scan_done: sd, + scan_total: st, + global_done, + global_total, + }); + } + Ok(()) + })(); + if let Err(e) = step { + stop.store(true, std::sync::atomic::Ordering::Relaxed); + write_err = Some(e); + } } - } + + reader_handle + .join() + .map_err(|_| CatalogError::Validation("ingest zarr reader thread panicked".into()))?; + + match write_err { + Some(e) => Err(e), + None => Ok(()), + } + })?; let _ = incremental; Ok(db_path) @@ -902,4 +939,65 @@ mod tests { "reingest must be exactly idempotent (run1={counts_1:?}, run2={counts_2:?})" ); } + + #[test] + fn zarr_phase_streams_and_writes_raw_for_each_frame() { + let fixture = fixture_path(); + if !fixture.exists() { + panic!("required fixture missing: {}", fixture.display()); + } + let tmp = tempfile::tempdir().expect("create tempdir for PYREF_HOME"); + let beamtime_dir = tmp.path().join("2024-03-03"); + let ccd_dir = beamtime_dir.join("CCD"); + std::fs::create_dir_all(&ccd_dir).expect("create CCD dir"); + std::fs::copy(&fixture, ccd_dir.join("minimal.fits")).expect("copy fixture"); + + let _guard = ENV_LOCK.lock().unwrap_or_else(|p| p.into_inner()); + let _home = EnvGuard::set("PYREF_HOME", tmp.path()); + let _db = EnvGuard::unset("PYREF_CATALOG_DB"); + let _cache = EnvGuard::unset("PYREF_CACHE_ROOT"); + + let header_items: Vec = DEFAULT_INGEST_HEADER_ITEMS + .iter() + .map(|s| (*s).to_string()) + .collect(); + + let db_path = ingest_beamtime(&beamtime_dir, &header_items, false, None) + .expect("streaming zarr ingest should succeed"); + + let zarr_root = + paths::beamtime_zarr_path(&beamtime_dir).expect("resolve beamtime zarr path"); + assert!( + zarr_root.is_dir(), + "expected zarr root dir at {}", + zarr_root.display() + ); + + let mut conn = db::establish_connection(&db_path).expect("open catalog db"); + let (scan_no, frame_no): (i32, i32) = files::table + .select((files::scan_number, files::frame_number)) + .first(&mut conn) + .expect("select scan/frame of only cataloged file"); + let raw_path = zarr_root + .join(scan_no.to_string()) + .join(format!("{frame_no:05}")) + .join("raw"); + assert!( + raw_path.is_dir(), + "streaming zarr writer must create raw array dir at {}", + raw_path.display() + ); + + let payload_found = walkdir::WalkDir::new(&raw_path).into_iter().any(|entry| { + entry + .as_ref() + .map(|e| e.file_type().is_file()) + .unwrap_or(false) + }); + assert!( + payload_found, + "streaming zarr writer must emit at least one file under {}", + raw_path.display() + ); + } } From b582a2644839345f3f155cd3c31951c9d4833a9e Mon Sep 17 00:00:00 2001 From: Harlan D Heilman <73567020+HarlanHeilman@users.noreply.github.com> Date: Thu, 16 Apr 2026 12:41:02 -0700 Subject: [PATCH 08/22] perf(ingest): parallelize headers phase per-file instead of per-scan Replaces `scan_groups.par_iter().map(read_multiple_fits_headers_only_rows)` with a flat `paths_only.par_iter().map(read_fits_headers_only_row)` over the Rayon pool. Evens out worker utilization when scan sizes are skewed (e.g., one 3000-file scan plus many 50-file scans), where the old per-scan parallelism left N-1 workers idle once small scans completed. No change to the sort order of the resulting `rows` Vec - the same `(scan_number, frame_number, file_path)` sort follows the flat collect. Part of docs/plans/ingest-streaming-and-maintainability.md (T6). --- src/catalog/ingest.rs | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/src/catalog/ingest.rs b/src/catalog/ingest.rs index 63b083b..ea59073 100644 --- a/src/catalog/ingest.rs +++ b/src/catalog/ingest.rs @@ -13,9 +13,9 @@ //! connection in the child; do not share a connection across process boundaries. //! //! FITS header reads and pixel reads for zarr use a [`rayon::ThreadPool`] sized by -//! [`crate::catalog::IngestParallelism`] (after [`IngestParallelism::from_options_or_env`]). Work is -//! parallelized **per scan** (each worker owns one scan's files sequentially); nested -//! [`rayon::prelude::ParallelIterator`] runs on that pool via [`rayon::ThreadPool::install`]. Diesel +//! [`crate::catalog::IngestParallelism`] (after [`IngestParallelism::from_options_or_env`]). The +//! headers phase parallelizes **per file** (a flat [`rayon::prelude::ParallelIterator`] over every +//! discovered FITS path) so worker utilization stays even when scan sizes are skewed. Diesel //! transactions and [`super::zarr_write::write_frame_raw`] run on the calling thread in global row //! order so catalog rows and zarr datasets stay aligned. @@ -31,7 +31,7 @@ use rayon::prelude::*; use rayon::ThreadPoolBuilder; use crate::io::BtIngestRow; -use crate::loader::read_multiple_fits_headers_only_rows; +use crate::loader::read_fits_headers_only_row; use crate::schema::{beamtimes, file_tags, files, frames, samples, scans, tags}; use super::discover_paths_for_catalog_ingest; @@ -319,7 +319,7 @@ fn ingest_beamtime_inner( } let paths_only: Vec = discovered.iter().map(|(p, _)| p.clone()).collect(); - let (layout_summary, scan_groups) = layout_and_groups_from_paths(&paths_only); + let (layout_summary, _scan_groups) = layout_and_groups_from_paths(&paths_only); if let Some(ref sink) = progress { sink.emit(IngestProgress::Layout { total_files: layout_summary.total_files as u32, @@ -339,17 +339,14 @@ fn ingest_beamtime_inner( .num_threads(n_workers) .build() .map_err(|e| CatalogError::Validation(format!("rayon thread pool: {e}")))?; - let header_groups: Vec> = pool + let mut rows: Vec = pool .install(|| { - scan_groups + paths_only .par_iter() - .map(|(_sn, paths)| { - read_multiple_fits_headers_only_rows(paths.clone(), header_items) - }) + .map(|p| read_fits_headers_only_row(p.clone(), header_items)) .collect::, _>>() }) .map_err(CatalogError::FitsReadFailed)?; - let mut rows: Vec = header_groups.into_iter().flatten().collect(); rows.sort_by(|a, b| { (a.scan_number, a.frame_number, a.file_path.as_str()).cmp(&( b.scan_number, From 196d443badb92d1629f1f9f624bbf33c50563bad Mon Sep 17 00:00:00 2001 From: Harlan D Heilman <73567020+HarlanHeilman@users.noreply.github.com> Date: Thu, 16 Apr 2026 12:48:16 -0700 Subject: [PATCH 09/22] refactor(io): unify bulk BITPIX=16 pixel reader in src/io/raw_pixels.rs --- src/catalog/ingest.rs | 21 ++++-- src/io/image_mmap.rs | 23 ++---- src/io/mod.rs | 1 + src/io/raw_pixels.rs | 162 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 183 insertions(+), 24 deletions(-) create mode 100644 src/io/raw_pixels.rs diff --git a/src/catalog/ingest.rs b/src/catalog/ingest.rs index ea59073..e67ede1 100644 --- a/src/catalog/ingest.rs +++ b/src/catalog/ingest.rs @@ -20,8 +20,6 @@ //! order so catalog rows and zarr datasets stay aligned. use std::collections::{HashMap, HashSet}; -use std::fs::File; -use std::io::{Read, Seek, SeekFrom}; use std::path::{Path, PathBuf}; use diesel::prelude::*; @@ -30,6 +28,8 @@ use ndarray::Array2; use rayon::prelude::*; use rayon::ThreadPoolBuilder; +use crate::errors::{FitsError, FitsErrorKind}; +use crate::io::raw_pixels::read_bitpix16_be_bytes; use crate::io::BtIngestRow; use crate::loader::read_fits_headers_only_row; use crate::schema::{beamtimes, file_tags, files, frames, samples, scans, tags}; @@ -101,6 +101,16 @@ fn layout_label(layout: BeamtimeLayout) -> &'static str { } } +fn fits_error_to_catalog(err: FitsError) -> CatalogError { + match err.kind { + FitsErrorKind::Io => match err.source.and_then(|s| s.downcast::().ok()) { + Some(io_err) => CatalogError::Io(*io_err), + None => CatalogError::Validation(err.message), + }, + _ => CatalogError::Validation(err.message), + } +} + fn read_image_i32(row: &BtIngestRow) -> Result> { if row.bitpix != 16 { return Err(CatalogError::Validation(format!( @@ -109,12 +119,9 @@ fn read_image_i32(row: &BtIngestRow) -> Result> { ))); } let path = Path::new(&row.file_path); - let mut f = File::open(path).map_err(CatalogError::Io)?; - f.seek(SeekFrom::Start(row.data_offset as u64)) - .map_err(CatalogError::Io)?; let n = (row.naxis1 * row.naxis2) as usize; - let mut buf = vec![0u8; n * 2]; - f.read_exact(&mut buf).map_err(CatalogError::Io)?; + let buf = read_bitpix16_be_bytes(path, row.data_offset as u64, n * 2) + .map_err(fits_error_to_catalog)?; let out: Vec = buf .chunks_exact(2) .map(|c| i16::from_be_bytes([c[0], c[1]]) as i32) diff --git a/src/io/image_mmap.rs b/src/io/image_mmap.rs index b377f9c..4eda441 100644 --- a/src/io/image_mmap.rs +++ b/src/io/image_mmap.rs @@ -1,11 +1,10 @@ -use std::fs::File; use std::path::{Path, PathBuf}; -use memmap2::MmapOptions; use ndarray::Array2; use polars::prelude::*; use super::blur::{gaussian_blur_f32_copy, i64_to_f32_array}; +use super::raw_pixels::read_bitpix16_be_bytes; use super::{ subtract_background_edges, subtract_background_row_strips, subtract_dark_cold_side, trim_image_interior, ImageInfo, TRIM_COLS, TRIM_ROWS, @@ -23,21 +22,11 @@ fn load_image_pixels(path: &Path, info: &ImageInfo) -> Result, FitsE } let nelem = info.naxis1 * info.naxis2; let nbytes = nelem * 2; - let file = File::open(path).map_err(|e| FitsError::io("open", e))?; - let mmap = unsafe { - MmapOptions::new() - .offset(info.data_offset) - .len(nbytes) - .map(&file) - .map_err(|e| FitsError::io("mmap", e))? - }; - let mut raw = Vec::with_capacity(nelem); - for chunk in mmap.chunks_exact(2) { - let v = i16::from_be_bytes([chunk[0], chunk[1]]) as i64 + info.bzero; - raw.push(v); - } - drop(mmap); - drop(file); + let bytes = read_bitpix16_be_bytes(path, info.data_offset, nbytes)?; + let raw: Vec = bytes + .chunks_exact(2) + .map(|c| i16::from_be_bytes([c[0], c[1]]) as i64 + info.bzero) + .collect(); Array2::from_shape_vec((info.naxis2, info.naxis1), raw) .map_err(|e| FitsError::validation(e.to_string())) } diff --git a/src/io/mod.rs b/src/io/mod.rs index b5897e6..8776484 100644 --- a/src/io/mod.rs +++ b/src/io/mod.rs @@ -1,6 +1,7 @@ pub mod blur; pub mod image_mmap; pub mod options; +pub mod raw_pixels; pub mod schema; pub mod source; diff --git a/src/io/raw_pixels.rs b/src/io/raw_pixels.rs new file mode 100644 index 0000000..70a28db --- /dev/null +++ b/src/io/raw_pixels.rs @@ -0,0 +1,162 @@ +//! Unified bulk reader for raw BITPIX=16 pixel buffers. +//! +//! Single entry point [`read_bitpix16_be_bytes`] that returns the raw +//! big-endian byte span starting at `offset` in `path`. Callers decode +//! the bytes into `i16`/`i32`/`i64` themselves because the downstream +//! semantics (with or without `BZERO`, target element width) differ +//! between catalog ingest and in-memory image materialization. +//! +//! # Environment overrides +//! +//! When the environment variable `PYREF_DISABLE_MMAP` is unset or empty, +//! the reader maps `nbytes` starting at `offset` with +//! `memmap2::MmapOptions`, copies into an owned `Vec`, and drops the +//! mapping before returning. When `PYREF_DISABLE_MMAP` is set to any +//! non-empty value (for example `PYREF_DISABLE_MMAP=1`), the reader +//! falls back to `File::open` + `seek` + bulk `read_exact`. Returning an +//! owned `Vec` means callers never hold the mapping, so the override +//! only affects how bytes are obtained, not how they are consumed. + +use std::fs::File; +use std::io::{Read, Seek, SeekFrom}; +use std::path::Path; + +use memmap2::MmapOptions; + +use crate::errors::FitsError; + +/// Reads `nbytes` big-endian BITPIX=16 pixel bytes starting at `offset` in `path`. +/// +/// Returns the raw byte buffer; conversion to `i16`/`i32`/`i64` is the caller's job. +pub fn read_bitpix16_be_bytes( + path: &Path, + offset: u64, + nbytes: usize, +) -> Result, FitsError> { + let file = File::open(path).map_err(|e| FitsError::io("raw_pixels open", e))?; + if mmap_enabled() { + read_via_mmap(&file, offset, nbytes) + } else { + read_via_seek(file, offset, nbytes) + } +} + +fn mmap_enabled() -> bool { + match std::env::var_os("PYREF_DISABLE_MMAP") { + Some(v) => v.is_empty(), + None => true, + } +} + +fn read_via_mmap(file: &File, offset: u64, nbytes: usize) -> Result, FitsError> { + let mmap = unsafe { + MmapOptions::new() + .offset(offset) + .len(nbytes) + .map(file) + .map_err(|e| FitsError::io("raw_pixels mmap", e))? + }; + let buf = mmap.to_vec(); + drop(mmap); + Ok(buf) +} + +fn read_via_seek(mut file: File, offset: u64, nbytes: usize) -> Result, FitsError> { + file.seek(SeekFrom::Start(offset)) + .map_err(|e| FitsError::io("raw_pixels seek", e))?; + let mut buf = vec![0u8; nbytes]; + file.read_exact(&mut buf) + .map_err(|e| FitsError::io("raw_pixels read", e))?; + Ok(buf) +} + +#[cfg(test)] +mod tests { + use super::*; + use std::io::Write; + use std::sync::Mutex; + + static ENV_LOCK: Mutex<()> = Mutex::new(()); + + struct EnvGuard { + key: &'static str, + prev: Option, + } + + impl EnvGuard { + fn set(key: &'static str, value: &str) -> Self { + let prev = std::env::var_os(key); + std::env::set_var(key, value); + Self { key, prev } + } + + fn unset(key: &'static str) -> Self { + let prev = std::env::var_os(key); + std::env::remove_var(key); + Self { key, prev } + } + } + + impl Drop for EnvGuard { + fn drop(&mut self) { + match self.prev.take() { + Some(v) => std::env::set_var(self.key, v), + None => std::env::remove_var(self.key), + } + } + } + + fn write_fixture(dir: &Path, prefix: &[u8], payload: &[u8]) -> std::path::PathBuf { + let path = dir.join("raw_pixels_fixture.bin"); + let mut f = File::create(&path).expect("create fixture file"); + f.write_all(prefix).expect("write prefix"); + f.write_all(payload).expect("write payload"); + f.sync_all().expect("sync fixture"); + path + } + + #[test] + fn read_bitpix16_be_bytes_reads_from_offset_default_path() { + let _guard = ENV_LOCK.lock().unwrap_or_else(|p| p.into_inner()); + let _env = EnvGuard::unset("PYREF_DISABLE_MMAP"); + let tmp = tempfile::tempdir().expect("tempdir"); + let prefix = vec![0xAAu8; 37]; + let payload: Vec = (0u8..64).collect(); + let path = write_fixture(tmp.path(), &prefix, &payload); + + let got = read_bitpix16_be_bytes(&path, prefix.len() as u64, payload.len()) + .expect("read must succeed at nonzero offset"); + assert_eq!(got, payload, "bytes at offset must match exactly"); + } + + #[test] + fn read_bitpix16_be_bytes_honors_disable_mmap_env() { + let _guard = ENV_LOCK.lock().unwrap_or_else(|p| p.into_inner()); + let _env = EnvGuard::set("PYREF_DISABLE_MMAP", "1"); + let tmp = tempfile::tempdir().expect("tempdir"); + let prefix = vec![0x55u8; 13]; + let payload: Vec = (0u8..48).rev().collect(); + let path = write_fixture(tmp.path(), &prefix, &payload); + + let got = read_bitpix16_be_bytes(&path, prefix.len() as u64, payload.len()) + .expect("seek fallback must succeed when mmap is disabled"); + assert_eq!(got, payload, "seek-path bytes must match payload"); + } + + #[test] + fn read_bitpix16_be_bytes_short_file_errors_via_seek_path() { + let _guard = ENV_LOCK.lock().unwrap_or_else(|p| p.into_inner()); + let _env = EnvGuard::set("PYREF_DISABLE_MMAP", "1"); + let tmp = tempfile::tempdir().expect("tempdir"); + let payload: Vec = (0u8..4).collect(); + let path = write_fixture(tmp.path(), &[], &payload); + + let err = read_bitpix16_be_bytes(&path, 0, payload.len() + 16) + .expect_err("request past EOF must error"); + assert!( + matches!(err.kind, crate::errors::FitsErrorKind::Io), + "expected FitsErrorKind::Io for short file, got {:?}", + err.kind + ); + } +} From b44b10462d4c1f321faec85e9e51472709ff3b2d Mon Sep 17 00:00:00 2001 From: Harlan D Heilman <73567020+HarlanHeilman@users.noreply.github.com> Date: Thu, 16 Apr 2026 12:56:10 -0700 Subject: [PATCH 10/22] refactor(catalog): move flatten_fits_error to catalog/mod.rs and document mmap safety --- src/catalog/ingest.rs | 13 +----------- src/catalog/mod.rs | 47 +++++++++++++++++++++++++++++++++++++++++++ src/io/raw_pixels.rs | 14 ++++++++++--- 3 files changed, 59 insertions(+), 15 deletions(-) diff --git a/src/catalog/ingest.rs b/src/catalog/ingest.rs index e67ede1..3fe51ef 100644 --- a/src/catalog/ingest.rs +++ b/src/catalog/ingest.rs @@ -28,7 +28,6 @@ use ndarray::Array2; use rayon::prelude::*; use rayon::ThreadPoolBuilder; -use crate::errors::{FitsError, FitsErrorKind}; use crate::io::raw_pixels::read_bitpix16_be_bytes; use crate::io::BtIngestRow; use crate::loader::read_fits_headers_only_row; @@ -101,16 +100,6 @@ fn layout_label(layout: BeamtimeLayout) -> &'static str { } } -fn fits_error_to_catalog(err: FitsError) -> CatalogError { - match err.kind { - FitsErrorKind::Io => match err.source.and_then(|s| s.downcast::().ok()) { - Some(io_err) => CatalogError::Io(*io_err), - None => CatalogError::Validation(err.message), - }, - _ => CatalogError::Validation(err.message), - } -} - fn read_image_i32(row: &BtIngestRow) -> Result> { if row.bitpix != 16 { return Err(CatalogError::Validation(format!( @@ -121,7 +110,7 @@ fn read_image_i32(row: &BtIngestRow) -> Result> { let path = Path::new(&row.file_path); let n = (row.naxis1 * row.naxis2) as usize; let buf = read_bitpix16_be_bytes(path, row.data_offset as u64, n * 2) - .map_err(fits_error_to_catalog)?; + .map_err(super::flatten_fits_error)?; let out: Vec = buf .chunks_exact(2) .map(|c| i16::from_be_bytes([c[0], c[1]]) as i32) diff --git a/src/catalog/mod.rs b/src/catalog/mod.rs index d0d4536..30c3201 100644 --- a/src/catalog/mod.rs +++ b/src/catalog/mod.rs @@ -81,6 +81,25 @@ pub enum CatalogError { FitsReadFailed(#[from] crate::errors::FitsError), } +/// Flattens a [`crate::errors::FitsError`] into the appropriate [`CatalogError`] variant. +/// +/// Preserves the `Io` vs `Validation` distinction at the catalog layer rather than +/// folding every failure into [`CatalogError::FitsReadFailed`]: I/O failures carrying +/// a concrete [`std::io::Error`] source come back as [`CatalogError::Io`], everything +/// else becomes [`CatalogError::Validation`] with the `FitsError`'s message. This +/// matches the hand-rolled mapping that ingest used before the bulk pixel reader was +/// unified behind `crate::io::raw_pixels`. +pub(crate) fn flatten_fits_error(err: crate::errors::FitsError) -> CatalogError { + use crate::errors::FitsErrorKind; + match err.kind { + FitsErrorKind::Io => match err.source.and_then(|s| s.downcast::().ok()) { + Some(io_err) => CatalogError::Io(*io_err), + None => CatalogError::Validation(err.message), + }, + _ => CatalogError::Validation(err.message), + } +} + impl CatalogError { pub fn retryable(&self) -> bool { match self { @@ -201,4 +220,32 @@ mod tests { assert!(is_skippable_stem("_skip")); assert!(!is_skippable_stem("sample")); } + + #[test] + fn flatten_fits_error_io_with_source_maps_to_catalog_io() { + use crate::errors::FitsError; + use std::io::{Error as IoError, ErrorKind}; + + let err = FitsError::io( + "raw_pixels read", + IoError::new(ErrorKind::UnexpectedEof, "test"), + ); + match flatten_fits_error(err) { + CatalogError::Io(io_err) => { + assert_eq!(io_err.kind(), ErrorKind::UnexpectedEof); + } + other => panic!("expected CatalogError::Io, got {other:?}"), + } + } + + #[test] + fn flatten_fits_error_validation_maps_to_catalog_validation() { + use crate::errors::FitsError; + + let err = FitsError::validation("x"); + match flatten_fits_error(err) { + CatalogError::Validation(msg) => assert_eq!(msg, "x"), + other => panic!("expected CatalogError::Validation, got {other:?}"), + } + } } diff --git a/src/io/raw_pixels.rs b/src/io/raw_pixels.rs index 70a28db..30ea791 100644 --- a/src/io/raw_pixels.rs +++ b/src/io/raw_pixels.rs @@ -49,6 +49,16 @@ fn mmap_enabled() -> bool { } fn read_via_mmap(file: &File, offset: u64, nbytes: usize) -> Result, FitsError> { + // SAFETY: `file` was opened read-only by the caller (`read_bitpix16_be_bytes`) + // and is kept alive for the duration of this call. We immediately copy the + // mapped bytes into an owned `Vec` via `to_vec()` and let the `Mmap` + // drop at end of scope; no reference into the mapping ever escapes this + // function. Concurrent truncation or in-place mutation of the underlying + // FITS file during ingest is unsupported and is the caller's responsibility + // to prevent (ingest assumes the beamtime tree is quiescent). On NAS mounts + // or other environments where that invariant cannot be guaranteed, set + // `PYREF_DISABLE_MMAP=1` to force the `seek` + `read_exact` fallback (see + // module docstring). let mmap = unsafe { MmapOptions::new() .offset(offset) @@ -56,9 +66,7 @@ fn read_via_mmap(file: &File, offset: u64, nbytes: usize) -> Result, Fit .map(file) .map_err(|e| FitsError::io("raw_pixels mmap", e))? }; - let buf = mmap.to_vec(); - drop(mmap); - Ok(buf) + Ok(mmap.to_vec()) } fn read_via_seek(mut file: File, offset: u64, nbytes: usize) -> Result, FitsError> { From b64e1babe6128675c8af9b2de23d38972a12d04c Mon Sep 17 00:00:00 2001 From: Harlan D Heilman <73567020+HarlanHeilman@users.noreply.github.com> Date: Thu, 16 Apr 2026 12:59:16 -0700 Subject: [PATCH 11/22] refactor(ingest): replace stringly-typed phase labels with IngestPhase enum --- src/catalog/ingest.rs | 9 ++++--- src/catalog/ingest_progress.rs | 46 +++++++++++++++++++++++++++++++++- src/catalog/mod.rs | 2 +- src/lib.rs | 4 +-- 4 files changed, 53 insertions(+), 8 deletions(-) diff --git a/src/catalog/ingest.rs b/src/catalog/ingest.rs index 3fe51ef..5a443ae 100644 --- a/src/catalog/ingest.rs +++ b/src/catalog/ingest.rs @@ -35,7 +35,8 @@ use crate::schema::{beamtimes, file_tags, files, frames, samples, scans, tags}; use super::discover_paths_for_catalog_ingest; use super::ingest_progress::{ - layout_and_groups_from_paths, BeamtimeIngestLayout, IngestProgress, IngestProgressSink, + layout_and_groups_from_paths, BeamtimeIngestLayout, IngestPhase, IngestProgress, + IngestProgressSink, }; use super::layout::BeamtimeLayout; use super::parallelism::IngestParallelism; @@ -326,7 +327,7 @@ fn ingest_beamtime_inner( .collect(), }); sink.emit(IngestProgress::Phase { - name: "headers".into(), + phase: IngestPhase::Headers, }); } @@ -359,7 +360,7 @@ fn ingest_beamtime_inner( if let Some(ref sink) = progress { sink.emit(IngestProgress::Phase { - name: "catalog".into(), + phase: IngestPhase::Catalog, }); } @@ -586,7 +587,7 @@ fn ingest_beamtime_inner( if let Some(ref sink) = progress { sink.emit(IngestProgress::Phase { - name: "zarr".into(), + phase: IngestPhase::Zarr, }); } diff --git a/src/catalog/ingest_progress.rs b/src/catalog/ingest_progress.rs index c8258b4..c6172e6 100644 --- a/src/catalog/ingest_progress.rs +++ b/src/catalog/ingest_progress.rs @@ -26,6 +26,29 @@ pub struct BeamtimeIngestLayout { pub scans: Vec, } +/// Coarse ingest phase label for hosts that refresh banners. +/// +/// The string form (``"headers"``, ``"catalog"``, ``"zarr"``) is the stable wire +/// representation forwarded to Python callbacks via [`IngestPhase::as_str`]; do not +/// rename or remove variants without updating the Python-side consumers. +#[derive(Clone, Copy, Debug, Eq, PartialEq)] +pub enum IngestPhase { + Headers, + Catalog, + Zarr, +} + +impl IngestPhase { + /// Stable lowercase label used by the Python progress-callback wire format. + pub fn as_str(&self) -> &'static str { + match self { + IngestPhase::Headers => "headers", + IngestPhase::Catalog => "catalog", + IngestPhase::Zarr => "zarr", + } + } +} + /// One progress event during beamtime ingest. #[derive(Clone, Debug)] pub enum IngestProgress { @@ -37,7 +60,7 @@ pub enum IngestProgress { }, /// Optional coarse phase label for hosts that refresh banners (``headers``, ``catalog``, /// ``zarr``). - Phase { name: String }, + Phase { phase: IngestPhase }, /// Emitted after each file's catalog rows (samples, files, frames) are inserted; mirrors /// [`IngestProgress::FileComplete`] counters so UIs can advance progress during the SQLite /// transaction, not only during zarr writes. @@ -147,3 +170,24 @@ pub(crate) fn layout_and_groups_from_paths( }; (layout, groups) } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn ingest_phase_as_str_matches_wire_labels() { + assert_eq!(IngestPhase::Headers.as_str(), "headers"); + assert_eq!(IngestPhase::Catalog.as_str(), "catalog"); + assert_eq!(IngestPhase::Zarr.as_str(), "zarr"); + } + + #[test] + fn ingest_phase_derives_support_copy_eq_and_debug() { + let a = IngestPhase::Headers; + let b = a; + assert_eq!(a, b); + assert_ne!(IngestPhase::Headers, IngestPhase::Catalog); + assert_eq!(format!("{:?}", IngestPhase::Zarr), "Zarr"); + } +} diff --git a/src/catalog/mod.rs b/src/catalog/mod.rs index 30c3201..9623b5e 100644 --- a/src/catalog/mod.rs +++ b/src/catalog/mod.rs @@ -33,7 +33,7 @@ pub use ingest::{ #[cfg(feature = "parallel_ingest")] pub use ingest::{ingest_beamtime_pipelined, ingest_beamtime_pipelined_with_context}; pub use ingest_progress::{ - BeamtimeIngestLayout, IngestProgress, IngestProgressSink, ScanFileCount, + BeamtimeIngestLayout, IngestPhase, IngestProgress, IngestProgressSink, ScanFileCount, }; pub use layout::{detect_beamtime_layout, discover_fits_for_layout, BeamtimeLayout}; pub use parallelism::IngestParallelism; diff --git a/src/lib.rs b/src/lib.rs index 0cff765..1776c7f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -369,9 +369,9 @@ mod extension { } d.set_item("scans", list)?; } - IngestProgress::Phase { name } => { + IngestProgress::Phase { phase } => { d.set_item("event", "phase")?; - d.set_item("phase", name.as_str())?; + d.set_item("phase", phase.as_str())?; } IngestProgress::CatalogRow { scan_number, From d3378bff5049fd76574211d2640bae242d523978 Mon Sep 17 00:00:00 2001 From: Harlan D Heilman <73567020+HarlanHeilman@users.noreply.github.com> Date: Thu, 16 Apr 2026 13:03:35 -0700 Subject: [PATCH 12/22] refactor(ingest): idiomatic IngestPhase::as_str + stronger wire-format assertions --- src/catalog/ingest_progress.rs | 13 +++++++------ tests/test_catalog.py | 5 +++++ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/catalog/ingest_progress.rs b/src/catalog/ingest_progress.rs index c6172e6..fdda2dc 100644 --- a/src/catalog/ingest_progress.rs +++ b/src/catalog/ingest_progress.rs @@ -40,11 +40,11 @@ pub enum IngestPhase { impl IngestPhase { /// Stable lowercase label used by the Python progress-callback wire format. - pub fn as_str(&self) -> &'static str { + pub fn as_str(self) -> &'static str { match self { - IngestPhase::Headers => "headers", - IngestPhase::Catalog => "catalog", - IngestPhase::Zarr => "zarr", + Self::Headers => "headers", + Self::Catalog => "catalog", + Self::Zarr => "zarr", } } } @@ -183,11 +183,12 @@ mod tests { } #[test] - fn ingest_phase_derives_support_copy_eq_and_debug() { + fn ingest_phase_variants_are_distinct_and_copyable() { let a = IngestPhase::Headers; let b = a; assert_eq!(a, b); assert_ne!(IngestPhase::Headers, IngestPhase::Catalog); - assert_eq!(format!("{:?}", IngestPhase::Zarr), "Zarr"); + assert_ne!(IngestPhase::Catalog, IngestPhase::Zarr); + assert_ne!(IngestPhase::Headers, IngestPhase::Zarr); } } diff --git a/tests/test_catalog.py b/tests/test_catalog.py index 28ef22d..75ce2ad 100644 --- a/tests/test_catalog.py +++ b/tests/test_catalog.py @@ -197,6 +197,11 @@ def test_ingest_beamtime_progress_callback(minimal_fits_dir: Path | None) -> Non kinds = {e["event"] for e in events} assert "layout" in kinds assert "phase" in kinds + phase_events = [e for e in events if e.get("event") == "phase"] + assert phase_events, "expected at least one phase event" + valid_phase_labels = {"headers", "catalog", "zarr"} + for e in phase_events: + assert e["phase"] in valid_phase_labels, f"unknown phase label: {e!r}" assert "catalog_row" in kinds assert "file_complete" in kinds From 93501c6409fb452ce427a70985589a5a1caef7ba Mon Sep 17 00:00:00 2001 From: Harlan D Heilman <73567020+HarlanHeilman@users.noreply.github.com> Date: Thu, 16 Apr 2026 13:09:58 -0700 Subject: [PATCH 13/22] refactor(ingest): split ingest_beamtime_inner into phase functions with IngestContext Split the 420-line ingest_beamtime_inner into a thin orchestrator and three phase functions with a shared IngestContext struct: - IngestContext: carries beamtime_id, progress, cancel, pool, scan_total_map - run_headers_phase (28 lines): parallel FITS header parsing + sort - run_catalog_phase (231 lines): batched SQLite transactions - run_zarr_phase (208 lines): streaming crossbeam read/write pipeline - ingest_beamtime_inner (107 lines): thin orchestrator Cancel handling changed from Arc threaded through to Option<&AtomicBool> borrowed into IngestContext. Progress event ordering preserved: Layout in orchestrator, Phase(Headers)/Phase(Catalog)/CatalogRow/ Phase(Zarr)/FileComplete in respective phase functions. Strict refactor: no behavior change, no wire-format change, all existing tests pass unchanged. --- src/catalog/ingest.rs | 520 +++++++++++++++++++++++------------------- 1 file changed, 284 insertions(+), 236 deletions(-) diff --git a/src/catalog/ingest.rs b/src/catalog/ingest.rs index 5a443ae..701c4a1 100644 --- a/src/catalog/ingest.rs +++ b/src/catalog/ingest.rs @@ -21,6 +21,7 @@ use std::collections::{HashMap, HashSet}; use std::path::{Path, PathBuf}; +use std::sync::atomic::{AtomicBool, Ordering}; use diesel::prelude::*; use diesel::OptionalExtension; @@ -43,6 +44,14 @@ use super::parallelism::IngestParallelism; use super::zarr_write::{open_zarr_store, write_frame_raw}; use super::{db, paths, CatalogError, Result}; +struct IngestContext<'a> { + beamtime_id: i32, + progress: Option<&'a IngestProgressSink>, + cancel: Option<&'a AtomicBool>, + pool: &'a rayon::ThreadPool, + scan_total_map: HashMap, +} + const MAX_BATCH_ROWS: usize = 1000; fn plan_catalog_batches(rows: &[BtIngestRow]) -> Vec<(usize, usize)> { @@ -136,209 +145,20 @@ fn beamtime_date_label(beamtime_dir: &Path) -> String { .unwrap_or_else(|| "unknown".into()) } -/// Ingests a beamtime directory into the global catalog and local zarr store. -pub fn ingest_beamtime( - beamtime_dir: &Path, - header_items: &[String], - incremental: bool, - progress_tx: Option>, -) -> Result { - let progress = progress_tx.map(IngestProgressSink::from_channel); - ingest_beamtime_inner( - beamtime_dir, - header_items, - incremental, - progress, - IngestParallelism::default(), - None, - ) -} - -/// Ingest with explicit parallelism (worker threads or resource fraction). -pub fn ingest_beamtime_parallel( - beamtime_dir: &Path, - header_items: &[String], - incremental: bool, - progress_tx: Option>, - parallelism: IngestParallelism, -) -> Result { - let progress = progress_tx.map(IngestProgressSink::from_channel); - ingest_beamtime_inner( - beamtime_dir, - header_items, - incremental, - progress, - parallelism, - None, - ) -} - -/// Ingest with structured progress (layout, phases, per-file completion after zarr) and optional -/// legacy channel behavior via [`IngestProgressSink::from_channel`]. -pub fn ingest_beamtime_with_progress_sink( - beamtime_dir: &Path, +fn run_headers_phase( + ctx: &IngestContext<'_>, + paths: &[PathBuf], header_items: &[String], - incremental: bool, - progress: Option, - parallelism: IngestParallelism, -) -> Result { - ingest_beamtime_inner( - beamtime_dir, - header_items, - incremental, - progress, - parallelism, - None, - ) -} - -/// Ingest with optional data-root / experimentalist context (accepted for API compatibility). -pub fn ingest_beamtime_with_context( - beamtime_dir: &Path, - _data_root: Option<&Path>, - _experimentalist: Option<&str>, - header_items: &[String], - incremental: bool, - progress_tx: Option>, - parallelism: IngestParallelism, - cancel: Option>, -) -> Result { - if cancel - .as_ref() - .map(|c| c.load(std::sync::atomic::Ordering::Relaxed)) - .unwrap_or(false) - { - return Err(CatalogError::Validation("ingest cancelled".into())); - } - let progress = progress_tx.map(IngestProgressSink::from_channel); - ingest_beamtime_inner( - beamtime_dir, - header_items, - incremental, - progress, - parallelism, - cancel, - ) -} - -#[cfg(feature = "parallel_ingest")] -pub fn ingest_beamtime_pipelined_with_context( - beamtime_dir: &Path, - data_root: Option<&Path>, - experimentalist: Option<&str>, - header_items: &[String], - incremental: bool, - progress_tx: Option>, - parallelism: IngestParallelism, - cancel: Option>, -) -> Result { - ingest_beamtime_with_context( - beamtime_dir, - data_root, - experimentalist, - header_items, - incremental, - progress_tx, - parallelism, - cancel, - ) -} - -#[cfg(feature = "parallel_ingest")] -pub fn ingest_beamtime_pipelined( - beamtime_dir: &Path, - header_items: &[String], - incremental: bool, - progress_tx: Option>, -) -> Result { - ingest_beamtime(beamtime_dir, header_items, incremental, progress_tx) -} - -fn ingest_beamtime_inner( - beamtime_dir: &Path, - header_items: &[String], - incremental: bool, - progress: Option, - parallelism: IngestParallelism, - cancel: Option>, -) -> Result { - let parallelism = IngestParallelism::from_options_or_env( - parallelism.worker_threads, - parallelism.resource_fraction, - ); - if !beamtime_dir.is_dir() { - return Err(CatalogError::Validation(format!( - "beamtime_dir is not a directory: {}", - beamtime_dir.display() - ))); - } - let db_path = paths::default_catalog_db_path()?; - let nas_uri = paths::file_uri_for_path(beamtime_dir)?; - let zarr_path = paths::beamtime_zarr_path(beamtime_dir)?; - let date_label = beamtime_date_label(beamtime_dir); - let (discovered, layout) = discover_paths_for_catalog_ingest(beamtime_dir)?; - let _ = layout_label(layout); - - let mut conn = db::establish_connection(&db_path)?; - let now_secs = std::time::SystemTime::now() - .duration_since(std::time::UNIX_EPOCH) - .map(|d| d.as_secs() as i32) - .unwrap_or(0); - - conn.transaction::<(), diesel::result::Error, _>(|conn| { - diesel::delete(beamtimes::table.filter(beamtimes::nas_uri.eq(&nas_uri))).execute(conn)?; - diesel::insert_into(beamtimes::table) - .values(( - beamtimes::nas_uri.eq(&nas_uri), - beamtimes::zarr_path.eq(zarr_path.to_string_lossy().as_ref()), - beamtimes::date.eq(&date_label), - beamtimes::last_indexed_at.eq(Some(now_secs)), - )) - .execute(conn)?; - Ok(()) - }) - .map_err(CatalogError::Diesel)?; - - let beamtime_id: i32 = beamtimes::table - .filter(beamtimes::nas_uri.eq(&nas_uri)) - .select(beamtimes::id) - .first(&mut conn) - .map_err(CatalogError::Diesel)?; - - if discovered.is_empty() { - if let Some(ref sink) = progress { - sink.emit(IngestProgress::Layout { - total_files: 0, - scans: vec![], - }); - } - return Ok(db_path); - } - - let paths_only: Vec = discovered.iter().map(|(p, _)| p.clone()).collect(); - let (layout_summary, _scan_groups) = layout_and_groups_from_paths(&paths_only); - if let Some(ref sink) = progress { - sink.emit(IngestProgress::Layout { - total_files: layout_summary.total_files as u32, - scans: layout_summary - .scans - .iter() - .map(|s| (s.scan_number, s.file_count as u32)) - .collect(), - }); +) -> Result> { + if let Some(sink) = ctx.progress { sink.emit(IngestProgress::Phase { phase: IngestPhase::Headers, }); } - - let n_workers = parallelism.resolve_worker_count()?; - let pool = ThreadPoolBuilder::new() - .num_threads(n_workers) - .build() - .map_err(|e| CatalogError::Validation(format!("rayon thread pool: {e}")))?; - let mut rows: Vec = pool + let mut rows: Vec = ctx + .pool .install(|| { - paths_only + paths .par_iter() .map(|p| read_fits_headers_only_row(p.clone(), header_items)) .collect::, _>>() @@ -351,22 +171,20 @@ fn ingest_beamtime_inner( b.file_path.as_str(), )) }); + Ok(rows) +} - let scan_total_map: HashMap = layout_summary - .scans - .iter() - .map(|s| (s.scan_number, s.file_count as u32)) - .collect(); - - if let Some(ref sink) = progress { +fn run_catalog_phase( + ctx: &IngestContext<'_>, + conn: &mut diesel::SqliteConnection, + rows: &[BtIngestRow], +) -> Result<()> { + if let Some(sink) = ctx.progress { sink.emit(IngestProgress::Phase { phase: IngestPhase::Catalog, }); } - let zstore = - open_zarr_store(&zarr_path).map_err(|e| CatalogError::Validation(e.to_string()))?; - let mut sample_cache: HashMap = HashMap::new(); let mut scan_cache: HashMap = HashMap::new(); @@ -384,16 +202,16 @@ fn ingest_beamtime_inner( conn.transaction::<(), diesel::result::Error, _>(|conn| { for name in &unique_samples { - if cancel - .as_ref() - .map(|c| c.load(std::sync::atomic::Ordering::Relaxed)) + if ctx + .cancel + .map(|c| c.load(Ordering::Relaxed)) .unwrap_or(false) { return Err(diesel::result::Error::RollbackTransaction); } let sid: i32 = diesel::insert_into(samples::table) .values(( - samples::beamtime_id.eq(beamtime_id), + samples::beamtime_id.eq(ctx.beamtime_id), samples::name.eq(name.as_str()), samples::representative_x.eq(0.0_f64), samples::representative_y.eq(0.0_f64), @@ -408,7 +226,7 @@ fn ingest_beamtime_inner( .map_err(CatalogError::Diesel)?; let mut scan_first_sample: HashMap = HashMap::new(); - for r in &rows { + for r in rows { let sn = r.scan_number as i32; let sk = if r.sample_name.trim().is_empty() { "_".to_string() @@ -418,7 +236,7 @@ fn ingest_beamtime_inner( scan_first_sample.entry(sn).or_insert(sk); } - let batches = plan_catalog_batches(&rows); + let batches = plan_catalog_batches(rows); let global_total = rows.len() as u32; let mut catalog_scan_done: HashMap = HashMap::new(); @@ -442,7 +260,7 @@ fn ingest_beamtime_inner( .ok_or(diesel::result::Error::NotFound)?; let scid: i32 = diesel::insert_into(scans::table) .values(( - scans::beamtime_id.eq(beamtime_id), + scans::beamtime_id.eq(ctx.beamtime_id), scans::sample_id.eq(rep_sample), scans::scan_number.eq(sn), scans::scan_type.eq("fixed_energy"), @@ -455,9 +273,9 @@ fn ingest_beamtime_inner( } for (local_idx, row) in rows[start..end].iter().enumerate() { - if cancel - .as_ref() - .map(|c| c.load(std::sync::atomic::Ordering::Relaxed)) + if ctx + .cancel + .map(|c| c.load(Ordering::Relaxed)) .unwrap_or(false) { return Err(diesel::result::Error::RollbackTransaction); @@ -484,7 +302,7 @@ fn ingest_beamtime_inner( let file_id: i32 = diesel::insert_into(files::table) .values(( - files::beamtime_id.eq(beamtime_id), + files::beamtime_id.eq(ctx.beamtime_id), files::sample_id.eq(sample_id), files::scan_number.eq(scan_no), files::frame_number.eq(row.frame_number as i32), @@ -564,12 +382,12 @@ fn ingest_beamtime_inner( )) .execute(conn)?; - if let Some(ref sink) = progress { + if let Some(sink) = ctx.progress { let sn = row.scan_number as i32; let e = catalog_scan_done.entry(sn).or_insert(0); *e += 1; let sd = *e; - let st = scan_total_map.get(&sn).copied().unwrap_or(0); + let st = ctx.scan_total_map.get(&sn).copied().unwrap_or(0); let global_idx = (start + local_idx + 1) as u32; sink.emit(IngestProgress::CatalogRow { scan_number: sn, @@ -585,24 +403,33 @@ fn ingest_beamtime_inner( .map_err(CatalogError::Diesel)?; } - if let Some(ref sink) = progress { + Ok(()) +} + +fn run_zarr_phase( + ctx: &IngestContext<'_>, + rows: &[BtIngestRow], + zstore: &zarrs::storage::ReadableWritableListableStorage, +) -> Result<()> { + if let Some(sink) = ctx.progress { sink.emit(IngestProgress::Phase { phase: IngestPhase::Zarr, }); } + let n_workers = ctx.pool.current_num_threads(); let channel_cap = (n_workers.saturating_mul(2)).max(4); let (tx, rx) = crossbeam_channel::bounded::)>>(channel_cap); - let stop = std::sync::atomic::AtomicBool::new(false); + let stop = AtomicBool::new(false); let mut scan_done: HashMap = HashMap::new(); let mut global_done: u32 = 0; let global_total = rows.len() as u32; std::thread::scope(|s| -> Result<()> { - let rows_ref: &[BtIngestRow] = &rows; - let pool_ref: &rayon::ThreadPool = &pool; - let cancel_ref = cancel.as_ref(); + let rows_ref: &[BtIngestRow] = rows; + let pool_ref: &rayon::ThreadPool = ctx.pool; + let cancel_ref = ctx.cancel; let stop_ref = &stop; let reader_handle = s.spawn(move || { @@ -611,18 +438,15 @@ fn ingest_beamtime_inner( .par_iter() .enumerate() .for_each_with(tx, |tx_c, (row_i, row)| { - if stop_ref.load(std::sync::atomic::Ordering::Relaxed) { + if stop_ref.load(Ordering::Relaxed) { return; } - if cancel_ref - .map(|c| c.load(std::sync::atomic::Ordering::Relaxed)) - .unwrap_or(false) - { + if cancel_ref.map(|c| c.load(Ordering::Relaxed)).unwrap_or(false) { return; } let item = read_image_i32(row).map(|img| (row_i, img)); if tx_c.send(item).is_err() { - stop_ref.store(true, std::sync::atomic::Ordering::Relaxed); + stop_ref.store(true, Ordering::Relaxed); } }); }); @@ -636,16 +460,16 @@ fn ingest_beamtime_inner( let step: Result<()> = (|| { let (row_i, img) = item?; let row = &rows[row_i]; - write_frame_raw(&zstore, row.scan_number, row.frame_number, &img) + write_frame_raw(zstore, row.scan_number, row.frame_number, &img) .map_err(|e| CatalogError::Validation(e.to_string()))?; drop(img); let sn = row.scan_number as i32; let entry = scan_done.entry(sn).or_insert(0); *entry += 1; let sd = *entry; - let st = scan_total_map.get(&sn).copied().unwrap_or(0); + let st = ctx.scan_total_map.get(&sn).copied().unwrap_or(0); global_done += 1; - if let Some(ref sink) = progress { + if let Some(sink) = ctx.progress { sink.emit(IngestProgress::FileComplete { scan_number: sn, scan_done: sd, @@ -657,7 +481,7 @@ fn ingest_beamtime_inner( Ok(()) })(); if let Err(e) = step { - stop.store(true, std::sync::atomic::Ordering::Relaxed); + stop.store(true, Ordering::Relaxed); write_err = Some(e); } } @@ -670,7 +494,231 @@ fn ingest_beamtime_inner( Some(e) => Err(e), None => Ok(()), } - })?; + }) +} + +/// Ingests a beamtime directory into the global catalog and local zarr store. +pub fn ingest_beamtime( + beamtime_dir: &Path, + header_items: &[String], + incremental: bool, + progress_tx: Option>, +) -> Result { + let progress = progress_tx.map(IngestProgressSink::from_channel); + ingest_beamtime_inner( + beamtime_dir, + header_items, + incremental, + progress, + IngestParallelism::default(), + None, + ) +} + +/// Ingest with explicit parallelism (worker threads or resource fraction). +pub fn ingest_beamtime_parallel( + beamtime_dir: &Path, + header_items: &[String], + incremental: bool, + progress_tx: Option>, + parallelism: IngestParallelism, +) -> Result { + let progress = progress_tx.map(IngestProgressSink::from_channel); + ingest_beamtime_inner( + beamtime_dir, + header_items, + incremental, + progress, + parallelism, + None, + ) +} + +/// Ingest with structured progress (layout, phases, per-file completion after zarr) and optional +/// legacy channel behavior via [`IngestProgressSink::from_channel`]. +pub fn ingest_beamtime_with_progress_sink( + beamtime_dir: &Path, + header_items: &[String], + incremental: bool, + progress: Option, + parallelism: IngestParallelism, +) -> Result { + ingest_beamtime_inner( + beamtime_dir, + header_items, + incremental, + progress, + parallelism, + None, + ) +} + +/// Ingest with optional data-root / experimentalist context (accepted for API compatibility). +pub fn ingest_beamtime_with_context( + beamtime_dir: &Path, + _data_root: Option<&Path>, + _experimentalist: Option<&str>, + header_items: &[String], + incremental: bool, + progress_tx: Option>, + parallelism: IngestParallelism, + cancel: Option>, +) -> Result { + if cancel + .as_ref() + .map(|c| c.load(std::sync::atomic::Ordering::Relaxed)) + .unwrap_or(false) + { + return Err(CatalogError::Validation("ingest cancelled".into())); + } + let progress = progress_tx.map(IngestProgressSink::from_channel); + ingest_beamtime_inner( + beamtime_dir, + header_items, + incremental, + progress, + parallelism, + cancel, + ) +} + +#[cfg(feature = "parallel_ingest")] +pub fn ingest_beamtime_pipelined_with_context( + beamtime_dir: &Path, + data_root: Option<&Path>, + experimentalist: Option<&str>, + header_items: &[String], + incremental: bool, + progress_tx: Option>, + parallelism: IngestParallelism, + cancel: Option>, +) -> Result { + ingest_beamtime_with_context( + beamtime_dir, + data_root, + experimentalist, + header_items, + incremental, + progress_tx, + parallelism, + cancel, + ) +} + +#[cfg(feature = "parallel_ingest")] +pub fn ingest_beamtime_pipelined( + beamtime_dir: &Path, + header_items: &[String], + incremental: bool, + progress_tx: Option>, +) -> Result { + ingest_beamtime(beamtime_dir, header_items, incremental, progress_tx) +} + +fn ingest_beamtime_inner( + beamtime_dir: &Path, + header_items: &[String], + incremental: bool, + progress: Option, + parallelism: IngestParallelism, + cancel: Option>, +) -> Result { + let parallelism = IngestParallelism::from_options_or_env( + parallelism.worker_threads, + parallelism.resource_fraction, + ); + if !beamtime_dir.is_dir() { + return Err(CatalogError::Validation(format!( + "beamtime_dir is not a directory: {}", + beamtime_dir.display() + ))); + } + + let db_path = paths::default_catalog_db_path()?; + let nas_uri = paths::file_uri_for_path(beamtime_dir)?; + let zarr_path = paths::beamtime_zarr_path(beamtime_dir)?; + let date_label = beamtime_date_label(beamtime_dir); + let (discovered, layout) = discover_paths_for_catalog_ingest(beamtime_dir)?; + let _ = layout_label(layout); + + let mut conn = db::establish_connection(&db_path)?; + let now_secs = std::time::SystemTime::now() + .duration_since(std::time::UNIX_EPOCH) + .map(|d| d.as_secs() as i32) + .unwrap_or(0); + + conn.transaction::<(), diesel::result::Error, _>(|conn| { + diesel::delete(beamtimes::table.filter(beamtimes::nas_uri.eq(&nas_uri))).execute(conn)?; + diesel::insert_into(beamtimes::table) + .values(( + beamtimes::nas_uri.eq(&nas_uri), + beamtimes::zarr_path.eq(zarr_path.to_string_lossy().as_ref()), + beamtimes::date.eq(&date_label), + beamtimes::last_indexed_at.eq(Some(now_secs)), + )) + .execute(conn)?; + Ok(()) + }) + .map_err(CatalogError::Diesel)?; + + let beamtime_id: i32 = beamtimes::table + .filter(beamtimes::nas_uri.eq(&nas_uri)) + .select(beamtimes::id) + .first(&mut conn) + .map_err(CatalogError::Diesel)?; + + if discovered.is_empty() { + if let Some(ref sink) = progress { + sink.emit(IngestProgress::Layout { + total_files: 0, + scans: vec![], + }); + } + return Ok(db_path); + } + + let paths_only: Vec = discovered.iter().map(|(p, _)| p.clone()).collect(); + let (layout_summary, _scan_groups) = layout_and_groups_from_paths(&paths_only); + if let Some(ref sink) = progress { + sink.emit(IngestProgress::Layout { + total_files: layout_summary.total_files as u32, + scans: layout_summary + .scans + .iter() + .map(|s| (s.scan_number, s.file_count as u32)) + .collect(), + }); + } + + let n_workers = parallelism.resolve_worker_count()?; + let pool = ThreadPoolBuilder::new() + .num_threads(n_workers) + .build() + .map_err(|e| CatalogError::Validation(format!("rayon thread pool: {e}")))?; + + let scan_total_map: HashMap = layout_summary + .scans + .iter() + .map(|s| (s.scan_number, s.file_count as u32)) + .collect(); + + let cancel_borrow: Option<&AtomicBool> = cancel.as_ref().map(|c| c.as_ref()); + + let ctx = IngestContext { + beamtime_id, + progress: progress.as_ref(), + cancel: cancel_borrow, + pool: &pool, + scan_total_map, + }; + + let rows = run_headers_phase(&ctx, &paths_only, header_items)?; + + let zstore = + open_zarr_store(&zarr_path).map_err(|e| CatalogError::Validation(e.to_string()))?; + + run_catalog_phase(&ctx, &mut conn, &rows)?; + run_zarr_phase(&ctx, &rows, &zstore)?; let _ = incremental; Ok(db_path) From e2c192648e8896227e39b77e213553a8270bb976 Mon Sep 17 00:00:00 2001 From: Harlan D Heilman <73567020+HarlanHeilman@users.noreply.github.com> Date: Thu, 16 Apr 2026 13:20:45 -0700 Subject: [PATCH 14/22] refactor(ingest): extract catalog-phase helpers and add is_cancelled helper Follow-up to T9 addressing code-review items I1, I2, M1, M5. - I1: Add `IngestContext::is_cancelled()` helper using `is_some_and` and replace the three `cancel.map(...).unwrap_or(false)` occurrences (two in run_catalog_phase, one in the zarr reader closure via cancel_ref). - I2: Extract three helpers from run_catalog_phase so the driver shrinks from 231 to 38 lines: - build_scan_first_sample(rows): pure map from scan -> first sample name - insert_samples(conn, beamtime_id, rows, cancel): returns sample_cache - insert_catalog_batch(conn, ctx, rows, start, end, caches, ...): runs ONE batch transaction and emits CatalogRow per row - M1: Add short doc comments on IngestContext and all phase/helper fns. - M5: Remove dead `let _ = layout_label(layout);` and the unused `layout_label` helper (no other callers) and its `BeamtimeLayout` import. No behavior change, no wire-format change, no public API change. --- src/catalog/ingest.rs | 441 +++++++++++++++++++++++------------------- 1 file changed, 245 insertions(+), 196 deletions(-) diff --git a/src/catalog/ingest.rs b/src/catalog/ingest.rs index 701c4a1..ad3ae8a 100644 --- a/src/catalog/ingest.rs +++ b/src/catalog/ingest.rs @@ -39,11 +39,14 @@ use super::ingest_progress::{ layout_and_groups_from_paths, BeamtimeIngestLayout, IngestPhase, IngestProgress, IngestProgressSink, }; -use super::layout::BeamtimeLayout; use super::parallelism::IngestParallelism; use super::zarr_write::{open_zarr_store, write_frame_raw}; use super::{db, paths, CatalogError, Result}; +/// Shared per-ingest state passed through the three phase functions. +/// +/// Borrows caller-owned `progress`, `cancel`, and `pool`. Owns the per-scan +/// total map so phases can emit progress events without rebuilding it. struct IngestContext<'a> { beamtime_id: i32, progress: Option<&'a IngestProgressSink>, @@ -52,6 +55,12 @@ struct IngestContext<'a> { scan_total_map: HashMap, } +impl IngestContext<'_> { + fn is_cancelled(&self) -> bool { + self.cancel.is_some_and(|c| c.load(Ordering::Relaxed)) + } +} + const MAX_BATCH_ROWS: usize = 1000; fn plan_catalog_batches(rows: &[BtIngestRow]) -> Vec<(usize, usize)> { @@ -103,13 +112,6 @@ pub const DEFAULT_INGEST_HEADER_ITEMS: &[&str] = &[ "Beam Current", ]; -fn layout_label(layout: BeamtimeLayout) -> &'static str { - match layout { - BeamtimeLayout::Nested => "nested", - BeamtimeLayout::Flat => "flat", - } -} - fn read_image_i32(row: &BtIngestRow) -> Result> { if row.bitpix != 16 { return Err(CatalogError::Validation(format!( @@ -145,6 +147,9 @@ fn beamtime_date_label(beamtime_dir: &Path) -> String { .unwrap_or_else(|| "unknown".into()) } +/// Emits `Phase(Headers)` then reads every FITS header in parallel on +/// `ctx.pool` (flat per-file iteration), returning rows sorted by +/// `(scan_number, frame_number, file_path)`. fn run_headers_phase( ctx: &IngestContext<'_>, paths: &[PathBuf], @@ -174,20 +179,30 @@ fn run_headers_phase( Ok(rows) } -fn run_catalog_phase( - ctx: &IngestContext<'_>, - conn: &mut diesel::SqliteConnection, - rows: &[BtIngestRow], -) -> Result<()> { - if let Some(sink) = ctx.progress { - sink.emit(IngestProgress::Phase { - phase: IngestPhase::Catalog, - }); +/// Picks the first-seen sample name for each scan number (empty names +/// normalized to `"_"`), mirroring the sample chosen as each scan's representative. +fn build_scan_first_sample(rows: &[BtIngestRow]) -> HashMap { + let mut scan_first_sample: HashMap = HashMap::new(); + for r in rows { + let sn = r.scan_number as i32; + let sk = if r.sample_name.trim().is_empty() { + "_".to_string() + } else { + r.sample_name.clone() + }; + scan_first_sample.entry(sn).or_insert(sk); } + scan_first_sample +} - let mut sample_cache: HashMap = HashMap::new(); - let mut scan_cache: HashMap = HashMap::new(); - +/// Inserts one row per unique sample name under one transaction and returns +/// the populated `name -> sample_id` cache. +fn insert_samples( + conn: &mut diesel::SqliteConnection, + beamtime_id: i32, + rows: &[BtIngestRow], + cancel: Option<&AtomicBool>, +) -> Result> { let unique_samples: HashSet = rows .iter() .map(|r| { @@ -200,18 +215,15 @@ fn run_catalog_phase( }) .collect(); + let mut sample_cache: HashMap = HashMap::new(); conn.transaction::<(), diesel::result::Error, _>(|conn| { for name in &unique_samples { - if ctx - .cancel - .map(|c| c.load(Ordering::Relaxed)) - .unwrap_or(false) - { + if cancel.is_some_and(|c| c.load(Ordering::Relaxed)) { return Err(diesel::result::Error::RollbackTransaction); } let sid: i32 = diesel::insert_into(samples::table) .values(( - samples::beamtime_id.eq(ctx.beamtime_id), + samples::beamtime_id.eq(beamtime_id), samples::name.eq(name.as_str()), samples::representative_x.eq(0.0_f64), samples::representative_y.eq(0.0_f64), @@ -224,188 +236,226 @@ fn run_catalog_phase( Ok(()) }) .map_err(CatalogError::Diesel)?; + Ok(sample_cache) +} - let mut scan_first_sample: HashMap = HashMap::new(); - for r in rows { - let sn = r.scan_number as i32; - let sk = if r.sample_name.trim().is_empty() { - "_".to_string() - } else { - r.sample_name.clone() - }; - scan_first_sample.entry(sn).or_insert(sk); - } - - let batches = plan_catalog_batches(rows); - let global_total = rows.len() as u32; - let mut catalog_scan_done: HashMap = HashMap::new(); +/// Runs ONE catalog batch transaction: inserts scans new to this batch, then +/// per-row inserts files, tags, file_tags, and frames. Emits `CatalogRow` +/// progress events per row. +#[allow(clippy::too_many_arguments)] +fn insert_catalog_batch( + conn: &mut diesel::SqliteConnection, + ctx: &IngestContext<'_>, + rows: &[BtIngestRow], + start: usize, + end: usize, + sample_cache: &HashMap, + scan_cache: &mut HashMap, + scan_first_sample: &HashMap, + catalog_scan_done: &mut HashMap, + global_total: u32, +) -> Result<()> { + conn.transaction::<(), diesel::result::Error, _>(|conn| { + let mut batch_scans_seen: HashSet = HashSet::new(); + for row in &rows[start..end] { + let sn = row.scan_number as i32; + if !batch_scans_seen.insert(sn) { + continue; + } + if scan_cache.contains_key(&sn) { + continue; + } + let sk = scan_first_sample + .get(&sn) + .cloned() + .unwrap_or_else(|| "_".to_string()); + let rep_sample = *sample_cache + .get(&sk) + .ok_or(diesel::result::Error::NotFound)?; + let scid: i32 = diesel::insert_into(scans::table) + .values(( + scans::beamtime_id.eq(ctx.beamtime_id), + scans::sample_id.eq(rep_sample), + scans::scan_number.eq(sn), + scans::scan_type.eq("fixed_energy"), + scans::started_at.eq(None::), + scans::ended_at.eq(None::), + )) + .returning(scans::id) + .get_result(conn)?; + scan_cache.insert(sn, scid); + } - for (start, end) in batches { - conn.transaction::<(), diesel::result::Error, _>(|conn| { - let mut batch_scans_seen: HashSet = HashSet::new(); - for row in &rows[start..end] { - let sn = row.scan_number as i32; - if !batch_scans_seen.insert(sn) { - continue; - } - if scan_cache.contains_key(&sn) { - continue; - } - let sk = scan_first_sample - .get(&sn) - .cloned() - .unwrap_or_else(|| "_".to_string()); - let rep_sample = *sample_cache - .get(&sk) - .ok_or(diesel::result::Error::NotFound)?; - let scid: i32 = diesel::insert_into(scans::table) - .values(( - scans::beamtime_id.eq(ctx.beamtime_id), - scans::sample_id.eq(rep_sample), - scans::scan_number.eq(sn), - scans::scan_type.eq("fixed_energy"), - scans::started_at.eq(None::), - scans::ended_at.eq(None::), - )) - .returning(scans::id) - .get_result(conn)?; - scan_cache.insert(sn, scid); + for (local_idx, row) in rows[start..end].iter().enumerate() { + if ctx.is_cancelled() { + return Err(diesel::result::Error::RollbackTransaction); } + let sample_key = if row.sample_name.trim().is_empty() { + "_".to_string() + } else { + row.sample_name.clone() + }; + let sample_id = *sample_cache + .get(&sample_key) + .ok_or(diesel::result::Error::NotFound)?; + + let scan_no = row.scan_number as i32; + let scan_id = *scan_cache + .get(&scan_no) + .ok_or(diesel::result::Error::NotFound)?; + + let parse_flag = if row.scan_number == 0 || row.frame_number == 0 { + Some("parse_failure".to_string()) + } else { + None + }; + + let file_id: i32 = diesel::insert_into(files::table) + .values(( + files::beamtime_id.eq(ctx.beamtime_id), + files::sample_id.eq(sample_id), + files::scan_number.eq(scan_no), + files::frame_number.eq(row.frame_number as i32), + files::nas_uri.eq(row.file_path.as_str()), + files::filename.eq(Path::new(&row.file_path) + .file_name() + .and_then(|s| s.to_str()) + .unwrap_or("")), + files::parse_flag.eq(parse_flag.as_deref()), + files::data_offset.eq(row.data_offset), + files::naxis1.eq(row.naxis1 as i32), + files::naxis2.eq(row.naxis2 as i32), + files::bitpix.eq(row.bitpix as i32), + files::bzero.eq(row.bzero), + )) + .returning(files::id) + .get_result(conn)?; - for (local_idx, row) in rows[start..end].iter().enumerate() { - if ctx - .cancel - .map(|c| c.load(Ordering::Relaxed)) - .unwrap_or(false) + if let Some(tag_slug) = row.tag.as_ref().filter(|t| !t.is_empty()) { + let tid: i32 = match tags::table + .filter(tags::slug.eq(tag_slug.as_str())) + .select(tags::id) + .first(conn) + .optional()? { - return Err(diesel::result::Error::RollbackTransaction); - } - let sample_key = if row.sample_name.trim().is_empty() { - "_".to_string() - } else { - row.sample_name.clone() - }; - let sample_id = *sample_cache - .get(&sample_key) - .ok_or(diesel::result::Error::NotFound)?; - - let scan_no = row.scan_number as i32; - let scan_id = *scan_cache - .get(&scan_no) - .ok_or(diesel::result::Error::NotFound)?; - - let parse_flag = if row.scan_number == 0 || row.frame_number == 0 { - Some("parse_failure".to_string()) - } else { - None + Some(id) => id, + None => diesel::insert_into(tags::table) + .values(tags::slug.eq(tag_slug.as_str())) + .returning(tags::id) + .get_result(conn)?, }; - - let file_id: i32 = diesel::insert_into(files::table) - .values(( - files::beamtime_id.eq(ctx.beamtime_id), - files::sample_id.eq(sample_id), - files::scan_number.eq(scan_no), - files::frame_number.eq(row.frame_number as i32), - files::nas_uri.eq(row.file_path.as_str()), - files::filename.eq(Path::new(&row.file_path) - .file_name() - .and_then(|s| s.to_str()) - .unwrap_or("")), - files::parse_flag.eq(parse_flag.as_deref()), - files::data_offset.eq(row.data_offset), - files::naxis1.eq(row.naxis1 as i32), - files::naxis2.eq(row.naxis2 as i32), - files::bitpix.eq(row.bitpix as i32), - files::bzero.eq(row.bzero), - )) - .returning(files::id) - .get_result(conn)?; - - if let Some(tag_slug) = row.tag.as_ref().filter(|t| !t.is_empty()) { - let tid: i32 = match tags::table - .filter(tags::slug.eq(tag_slug.as_str())) - .select(tags::id) - .first(conn) - .optional()? - { - Some(id) => id, - None => diesel::insert_into(tags::table) - .values(tags::slug.eq(tag_slug.as_str())) - .returning(tags::id) - .get_result(conn)?, - }; - let ft_exists: Option = file_tags::table - .filter(file_tags::file_id.eq(file_id)) - .filter(file_tags::tag_id.eq(tid)) - .select(file_tags::id) - .first(conn) - .optional()?; - if ft_exists.is_none() { - diesel::insert_into(file_tags::table) - .values((file_tags::file_id.eq(file_id), file_tags::tag_id.eq(tid))) - .execute(conn)?; - } + let ft_exists: Option = file_tags::table + .filter(file_tags::file_id.eq(file_id)) + .filter(file_tags::tag_id.eq(tid)) + .select(file_tags::id) + .first(conn) + .optional()?; + if ft_exists.is_none() { + diesel::insert_into(file_tags::table) + .values((file_tags::file_id.eq(file_id), file_tags::tag_id.eq(tid))) + .execute(conn)?; } + } - let sx = row.sample_x.unwrap_or(0.0); - let sy = row.sample_y.unwrap_or(0.0); - let sz = row.sample_z.unwrap_or(0.0); - let st = row.sample_theta.unwrap_or(0.0); - let ccd = row.ccd_theta.unwrap_or(0.0); - let epu = row.epu_polarization.unwrap_or(0.0); - let exp = row.exposure.unwrap_or(0.0); - let be = row.beamline_energy.unwrap_or(0.0); - let ring = row.ring_current.unwrap_or(0.0); - let ai3 = row.ai3_izero.unwrap_or(0.0); - let bcm = row.beam_current.unwrap_or(0.0); - - diesel::insert_into(frames::table) - .values(( - frames::scan_id.eq(scan_id), - frames::file_id.eq(file_id), - frames::frame_number.eq(row.frame_number as i32), - frames::zarr_group_key.eq(scan_no), - frames::zarr_frame_index.eq(row.frame_number as i32), - frames::acquired_at.eq(row.date_iso.clone()), - frames::sample_x.eq(sx), - frames::sample_y.eq(sy), - frames::sample_z.eq(sz), - frames::sample_theta.eq(st), - frames::ccd_theta.eq(ccd), - frames::beamline_energy.eq(be), - frames::epu_polarization.eq(epu), - frames::exposure.eq(exp), - frames::ring_current.eq(ring), - frames::ai3_izero.eq(ai3), - frames::beam_current.eq(bcm), - frames::quality_flag.eq(None::), - )) - .execute(conn)?; + let sx = row.sample_x.unwrap_or(0.0); + let sy = row.sample_y.unwrap_or(0.0); + let sz = row.sample_z.unwrap_or(0.0); + let st = row.sample_theta.unwrap_or(0.0); + let ccd = row.ccd_theta.unwrap_or(0.0); + let epu = row.epu_polarization.unwrap_or(0.0); + let exp = row.exposure.unwrap_or(0.0); + let be = row.beamline_energy.unwrap_or(0.0); + let ring = row.ring_current.unwrap_or(0.0); + let ai3 = row.ai3_izero.unwrap_or(0.0); + let bcm = row.beam_current.unwrap_or(0.0); + + diesel::insert_into(frames::table) + .values(( + frames::scan_id.eq(scan_id), + frames::file_id.eq(file_id), + frames::frame_number.eq(row.frame_number as i32), + frames::zarr_group_key.eq(scan_no), + frames::zarr_frame_index.eq(row.frame_number as i32), + frames::acquired_at.eq(row.date_iso.clone()), + frames::sample_x.eq(sx), + frames::sample_y.eq(sy), + frames::sample_z.eq(sz), + frames::sample_theta.eq(st), + frames::ccd_theta.eq(ccd), + frames::beamline_energy.eq(be), + frames::epu_polarization.eq(epu), + frames::exposure.eq(exp), + frames::ring_current.eq(ring), + frames::ai3_izero.eq(ai3), + frames::beam_current.eq(bcm), + frames::quality_flag.eq(None::), + )) + .execute(conn)?; - if let Some(sink) = ctx.progress { - let sn = row.scan_number as i32; - let e = catalog_scan_done.entry(sn).or_insert(0); - *e += 1; - let sd = *e; - let st = ctx.scan_total_map.get(&sn).copied().unwrap_or(0); - let global_idx = (start + local_idx + 1) as u32; - sink.emit(IngestProgress::CatalogRow { - scan_number: sn, - scan_done: sd, - scan_total: st, - global_done: global_idx, - global_total, - }); - } + if let Some(sink) = ctx.progress { + let sn = row.scan_number as i32; + let e = catalog_scan_done.entry(sn).or_insert(0); + *e += 1; + let sd = *e; + let st = ctx.scan_total_map.get(&sn).copied().unwrap_or(0); + let global_idx = (start + local_idx + 1) as u32; + sink.emit(IngestProgress::CatalogRow { + scan_number: sn, + scan_done: sd, + scan_total: st, + global_done: global_idx, + global_total, + }); } - Ok(()) - }) - .map_err(CatalogError::Diesel)?; + } + Ok(()) + }) + .map_err(CatalogError::Diesel) +} + +/// Emits `Phase(Catalog)` then `CatalogRow` per row. Runs batched SQLite +/// transactions via `plan_catalog_batches`, owning the sample and scan +/// caches locally across the batches. +fn run_catalog_phase( + ctx: &IngestContext<'_>, + conn: &mut diesel::SqliteConnection, + rows: &[BtIngestRow], +) -> Result<()> { + if let Some(sink) = ctx.progress { + sink.emit(IngestProgress::Phase { + phase: IngestPhase::Catalog, + }); + } + + let sample_cache = insert_samples(conn, ctx.beamtime_id, rows, ctx.cancel)?; + let scan_first_sample = build_scan_first_sample(rows); + + let batches = plan_catalog_batches(rows); + let global_total = rows.len() as u32; + let mut scan_cache: HashMap = HashMap::new(); + let mut catalog_scan_done: HashMap = HashMap::new(); + + for (start, end) in batches { + insert_catalog_batch( + conn, + ctx, + rows, + start, + end, + &sample_cache, + &mut scan_cache, + &scan_first_sample, + &mut catalog_scan_done, + global_total, + )?; } Ok(()) } +/// Emits `Phase(Zarr)` then `FileComplete` per row. Uses a bounded crossbeam +/// channel between a single reader pool task (running `ctx.pool` in parallel) +/// and the calling-thread writer so the zstore sees writes in completion order. fn run_zarr_phase( ctx: &IngestContext<'_>, rows: &[BtIngestRow], @@ -441,7 +491,7 @@ fn run_zarr_phase( if stop_ref.load(Ordering::Relaxed) { return; } - if cancel_ref.map(|c| c.load(Ordering::Relaxed)).unwrap_or(false) { + if cancel_ref.is_some_and(|c| c.load(Ordering::Relaxed)) { return; } let item = read_image_i32(row).map(|img| (row_i, img)); @@ -638,8 +688,7 @@ fn ingest_beamtime_inner( let nas_uri = paths::file_uri_for_path(beamtime_dir)?; let zarr_path = paths::beamtime_zarr_path(beamtime_dir)?; let date_label = beamtime_date_label(beamtime_dir); - let (discovered, layout) = discover_paths_for_catalog_ingest(beamtime_dir)?; - let _ = layout_label(layout); + let (discovered, _layout) = discover_paths_for_catalog_ingest(beamtime_dir)?; let mut conn = db::establish_connection(&db_path)?; let now_secs = std::time::SystemTime::now() From db88dbd286ed79446a954c0227caff240604012a Mon Sep 17 00:00:00 2001 From: Harlan D Heilman <73567020+HarlanHeilman@users.noreply.github.com> Date: Thu, 16 Apr 2026 13:39:33 -0700 Subject: [PATCH 15/22] test(ingest): synthetic-beamtime test harness + bench script (T10) Adds reproducible synthetic-beamtime fixtures so the streaming ingest can be exercised end-to-end without a real ALS dataset. Rust: - tests/common/mod.rs: build_synthetic_beamtime() generates N valid, ingestible BITPIX=16 FITS files in the root/CCD/ layout. Headers and pixel data are padded to 2880-byte blocks; required cards (NAXIS, NAXIS1/2, BZERO=32768, DATE, Beamline Energy, Sample/CCD Theta, EPU Polarization, Higher Order Suppressor) are emitted with the HIERARCH long-keyword convention. - tests/synthetic_harness.rs: round-trips fixtures through pyref::loader::read_fits_headers_only_row and verifies pixel layout via io::image_mmap::load_image_pixels (now pub) using a positional sentinel. - tests/ingest_streaming.rs: ingests 10 scans x 10 frames at 16x16 px into isolated PYREF_CATALOG_DB / PYREF_CACHE_ROOT tempdirs and asserts 100 files / 100 frames / 10 scans plus catalog_row -> file_complete ordering through the IngestProgressSink callback. - src/io/image_mmap.rs: expose load_image_pixels for harness use. Python: - scripts/_ingest_profile.py: shared helpers (IngestProfile, isolated_catalog_env, run_ingest_with_profile, render_markdown_table) factored out so both the real-beamtime profiler and the synthetic bench print the same markdown timing report. - scripts/bench_ingest.py: CI-friendly benchmark that materialises synthetic FITS via astropy.io.fits, ingests them under an isolated catalog/cache, and prints the timing table plus a files_per_second summary. - scripts/profile_beamtime_ingest.py: refactored to reuse the shared helpers; behaviour and output are unchanged. --- scripts/_ingest_profile.py | 264 +++++++++++++++++++++++++++++ scripts/bench_ingest.py | 211 +++++++++++++++++++++++ scripts/profile_beamtime_ingest.py | 128 +++----------- src/io/image_mmap.rs | 2 +- tests/common/mod.rs | 235 +++++++++++++++++++++++++ tests/ingest_streaming.rs | 200 ++++++++++++++++++++++ tests/synthetic_harness.rs | 102 +++++++++++ 7 files changed, 1041 insertions(+), 101 deletions(-) create mode 100644 scripts/_ingest_profile.py create mode 100644 scripts/bench_ingest.py create mode 100644 tests/common/mod.rs create mode 100644 tests/ingest_streaming.rs create mode 100644 tests/synthetic_harness.rs diff --git a/scripts/_ingest_profile.py b/scripts/_ingest_profile.py new file mode 100644 index 0000000..b6d649a --- /dev/null +++ b/scripts/_ingest_profile.py @@ -0,0 +1,264 @@ +"""Shared helpers for ingest profiling and benchmarking scripts. + +Exposes a phase-aware progress collector around :func:`pyref.io.readers.ingest_beamtime` +so ``scripts/profile_beamtime_ingest.py`` and ``scripts/bench_ingest.py`` render the +same markdown table instead of diverging their timing logic. +""" + +from __future__ import annotations + +import os +import tempfile +import time +from contextlib import contextmanager +from dataclasses import dataclass, field +from pathlib import Path +from typing import TYPE_CHECKING, Any + +if TYPE_CHECKING: + from collections.abc import Iterable, Mapping + + +def format_seconds(seconds: float) -> str: + """Return a compact fixed-decimal seconds string for table rendering. + + Parameters + ---------- + seconds : float + Non-negative wall-time value. + + Returns + ------- + str + Three-decimal precision under 10 s, two under 100 s, one beyond. + """ + if seconds >= 100.0: + return f"{seconds:.1f}" + if seconds >= 10.0: + return f"{seconds:.2f}" + return f"{seconds:.3f}" + + +@dataclass +class IngestProfile: + """Accumulated progress-event statistics from a single ingest run. + + Attributes + ---------- + wall_seconds : float + Total wall time from just before ``ingest_beamtime`` to just after. + phases : dict[str, float] + Cumulative seconds attributed to each ``phase`` event (``startup`` captures + the initial slice before the first phase event is emitted). + layout_files : int + ``total_files`` as reported by the single ``layout`` event, or 0 if none. + counts : dict[str, int] + Per-event-kind counts for ``layout``, ``catalog_row``, ``file_complete``. + first_catalog_row_seconds : float | None + Offset from ingest start to the first ``catalog_row`` event. + first_file_complete_seconds : float | None + Offset from ingest start to the first ``file_complete`` event. + """ + + wall_seconds: float = 0.0 + phases: dict[str, float] = field(default_factory=dict) + layout_files: int = 0 + counts: dict[str, int] = field( + default_factory=lambda: {"layout": 0, "catalog_row": 0, "file_complete": 0} + ) + first_catalog_row_seconds: float | None = None + first_file_complete_seconds: float | None = None + + @property + def startup_seconds(self) -> float: + """Seconds before the first ``phase`` event (catalog open/discovery/layout).""" + return self.phases.get("startup", 0.0) + + @property + def headers_seconds(self) -> float: + """Seconds spent in the parallel ``headers`` phase.""" + return self.phases.get("headers", 0.0) + + @property + def catalog_seconds(self) -> float: + """Seconds spent in the ``catalog`` SQLite-writer phase.""" + return self.phases.get("catalog", 0.0) + + @property + def zarr_seconds(self) -> float: + """Seconds spent in the ``zarr`` pixel-write phase.""" + return self.phases.get("zarr", 0.0) + + @property + def unattributed_seconds(self) -> float: + """Wall time not accounted for by ``startup+headers+catalog+zarr``.""" + accounted = ( + self.startup_seconds + + self.headers_seconds + + self.catalog_seconds + + self.zarr_seconds + ) + return max(0.0, self.wall_seconds - accounted) + + +class _PhaseCollector: + """Internal accumulator that turns streaming events into an :class:`IngestProfile`. + + The collector is stateful and not thread-safe by design: pyref's Rust + callback is invoked from a single ingest thread under the GIL. + """ + + def __init__(self) -> None: + self._t0 = time.perf_counter() + self._phase_start = self._t0 + self._current_phase = "startup" + self._profile = IngestProfile() + + def on_event(self, event: Mapping[str, Any]) -> None: + """Handle one ``progress_callback`` dict emitted by ``py_ingest_beamtime``.""" + ev = event.get("event") + now = time.perf_counter() + if ev == "phase": + next_phase = str(event.get("phase", "")) + self._profile.phases[self._current_phase] = ( + self._profile.phases.get(self._current_phase, 0.0) + + (now - self._phase_start) + ) + self._current_phase = next_phase + self._phase_start = now + return + if ev == "layout": + self._profile.layout_files = int(event.get("total_files", 0)) + self._profile.counts["layout"] += 1 + return + if ev == "catalog_row": + if self._profile.first_catalog_row_seconds is None: + self._profile.first_catalog_row_seconds = now - self._t0 + self._profile.counts["catalog_row"] += 1 + return + if ev == "file_complete": + if self._profile.first_file_complete_seconds is None: + self._profile.first_file_complete_seconds = now - self._t0 + self._profile.counts["file_complete"] += 1 + + def finalize(self) -> IngestProfile: + """Flush the trailing phase slice and return the accumulated profile.""" + now = time.perf_counter() + self._profile.phases[self._current_phase] = ( + self._profile.phases.get(self._current_phase, 0.0) + + (now - self._phase_start) + ) + self._profile.wall_seconds = now - self._t0 + return self._profile + + +def run_ingest_with_profile( + beamtime: Path, + header_items: Iterable[str] | None = None, + *, + incremental: bool = False, +) -> tuple[Path, IngestProfile]: + """Invoke :func:`pyref.io.readers.ingest_beamtime` and return timing profile. + + Parameters + ---------- + beamtime : pathlib.Path + Beamtime root directory (ALS layout; contains ``CCD/`` in the flat layout). + header_items : iterable of str, optional + FITS header keys to extract; when ``None``, pyref selects its defaults. + incremental : bool, optional + Forwarded to :func:`pyref.io.readers.ingest_beamtime`. + + Returns + ------- + tuple of (pathlib.Path, IngestProfile) + The returned catalog path and the accumulated profile. + """ + from pyref.io.readers import ingest_beamtime + + collector = _PhaseCollector() + keys = list(header_items) if header_items is not None else None + db = ingest_beamtime( + beamtime, + keys, + incremental=incremental, + progress_callback=collector.on_event, + ) + return Path(db), collector.finalize() + + +@contextmanager +def isolated_catalog_env(*, enabled: bool = True, prefix: str = "pyref-bench-"): + """Temporarily redirect PYREF_CATALOG_DB and PYREF_CACHE_ROOT into a tempdir. + + Parameters + ---------- + enabled : bool, optional + When False, yield ``None`` without touching the environment. + prefix : str, optional + Prefix used for the backing ``tempfile.TemporaryDirectory``. + + Yields + ------ + pathlib.Path or None + Path to the temp directory when enabled, otherwise ``None``. + """ + if not enabled: + yield None + return + + previous = { + key: os.environ.get(key) + for key in ("PYREF_CATALOG_DB", "PYREF_CACHE_ROOT") + } + with tempfile.TemporaryDirectory(prefix=prefix) as td: + tdir = Path(td) + os.environ["PYREF_CATALOG_DB"] = str((tdir / "catalog.db").resolve()) + os.environ["PYREF_CACHE_ROOT"] = str((tdir / "cache").resolve()) + try: + yield tdir + finally: + for key, value in previous.items(): + if value is None: + os.environ.pop(key, None) + else: + os.environ[key] = value + + +def render_markdown_table(profile: IngestProfile) -> str: + """Return a markdown table + summary footer describing ``profile`` timings. + + Parameters + ---------- + profile : IngestProfile + Populated profile from :func:`run_ingest_with_profile`. + + Returns + ------- + str + Multi-line string ending with a trailing newline. + """ + wall = profile.wall_seconds + rows = [ + ("Before `headers` (DB open, discovery, layout)", profile.startup_seconds), + ("Phase `headers` (parallel FITS header reads)", profile.headers_seconds), + ( + "Phase `catalog` (SQLite transaction + `catalog_row` events)", + profile.catalog_seconds, + ), + ( + "Phase `zarr` (FITS pixels read + zarr write + `file_complete`)", + profile.zarr_seconds, + ), + ("Unattributed (measurement gap)", profile.unattributed_seconds), + ] + lines: list[str] = [] + lines.append("| Segment | Seconds | Share of wall |") + lines.append("|---------|--------:|--------------:|") + for label, sec in rows: + share = (sec / wall * 100.0) if wall > 0 else 0.0 + lines.append(f"| {label} | {format_seconds(sec)} | {share:.1f}% |") + lines.append( + f"| **Wall time total** | **{format_seconds(wall)}** | **100%** |" + ) + return "\n".join(lines) + "\n" diff --git a/scripts/bench_ingest.py b/scripts/bench_ingest.py new file mode 100644 index 0000000..a723e21 --- /dev/null +++ b/scripts/bench_ingest.py @@ -0,0 +1,211 @@ +r"""CI-friendly benchmark for ``pyref.catalog.ingest_beamtime``. + +Generates ``--scans`` scans of ``--frames-per-scan`` FITS files at +``--width``x``--height`` pixels under a temporary beamtime root, ingests them +into an isolated catalog + cache, and prints the same markdown timing table +used by ``scripts/profile_beamtime_ingest.py``. + +Because no real beamtime is required, this is safe for CI perf smoke tests and +local regression tracking. Typical usage from the repo root:: + + uv run python scripts/bench_ingest.py --scans 10 --frames-per-scan 10 \ + --width 1024 --height 1024 +""" + +from __future__ import annotations + +import argparse +import sys +import tempfile +import warnings +from pathlib import Path + +import numpy as np +from astropy.io import fits +from astropy.io.fits.verify import VerifyWarning + +warnings.filterwarnings("ignore", category=VerifyWarning) + +sys.path.insert(0, str(Path(__file__).resolve().parent)) + +from _ingest_profile import ( # noqa: E402 + isolated_catalog_env, + render_markdown_table, + run_ingest_with_profile, +) + +SYNTHETIC_SAMPLE_NAME = "synth" +BZERO_UNSIGNED_I16 = 32_768 + + +def _build_primary_header() -> fits.Header: + hdr = fits.Header() + hdr["SIMPLE"] = True + hdr["BITPIX"] = 16 + hdr["NAXIS"] = 0 + hdr["DATE"] = "2024-02-02T00:00:00" + hdr["Beamline Energy"] = 250.0 + hdr["Sample Theta"] = 1.0 + hdr["CCD Theta"] = 2.0 + hdr["EPU Polarization"] = 1.0 + hdr["Higher Order Suppressor"] = 0.0 + return hdr + + +def _build_image_hdu( + width: int, + height: int, + scan_idx: int, + frame_idx: int, +) -> fits.ImageHDU: + rng = np.random.default_rng(seed=scan_idx * 1_000_003 + frame_idx) + raw = rng.integers(low=0, high=1024, size=(height, width), dtype=np.int32) + data_i16 = (raw - BZERO_UNSIGNED_I16).astype(np.int16) + hdu = fits.ImageHDU(data=data_i16) + hdu.header["BZERO"] = BZERO_UNSIGNED_I16 + return hdu + + +def _write_synthetic_fits( + path: Path, + width: int, + height: int, + scan_idx: int, + frame_idx: int, +) -> None: + primary = fits.PrimaryHDU(header=_build_primary_header()) + image = _build_image_hdu(width, height, scan_idx, frame_idx) + hdul = fits.HDUList([primary, image]) + hdul.writeto(path, overwrite=True) + + +def build_synthetic_beamtime( + tmp_dir: Path, + scans: int, + frames_per_scan: int, + width: int, + height: int, +) -> Path: + """Generate ``scans * frames_per_scan`` ingestible FITS files under ``tmp_dir``. + + Parameters + ---------- + tmp_dir : pathlib.Path + Parent directory for the synthetic beamtime layout. + scans : int + Number of synthetic scans to generate. + frames_per_scan : int + Frames per scan. + width, height : int + Pixel dimensions written to NAXIS1 and NAXIS2. + + Returns + ------- + pathlib.Path + Absolute path of the beamtime root (its ``CCD`` subdirectory holds frames). + """ + beamtime = (tmp_dir / "beamtime").resolve() + ccd_dir = beamtime / "CCD" + ccd_dir.mkdir(parents=True, exist_ok=True) + for scan_idx in range(scans): + scan_number = scan_idx + 1 + for frame_idx in range(frames_per_scan): + frame_number = frame_idx + 1 + stem = f"{SYNTHETIC_SAMPLE_NAME}-{scan_number:05d}-{frame_number:05d}" + _write_synthetic_fits( + ccd_dir / f"{stem}.fits", + width, + height, + scan_idx, + frame_idx, + ) + return beamtime + + +def _parse_args() -> argparse.Namespace: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument( + "--scans", + type=int, + default=10, + help="Number of synthetic scans.", + ) + parser.add_argument( + "--frames-per-scan", + type=int, + default=10, + help="Frames generated per synthetic scan.", + ) + parser.add_argument( + "--width", + type=int, + default=1024, + help="NAXIS1 for each synthetic frame.", + ) + parser.add_argument( + "--height", + type=int, + default=1024, + help="NAXIS2 for each synthetic frame.", + ) + parser.add_argument( + "--use-default-paths", + action="store_true", + help=( + "Do not override PYREF_CATALOG_DB / PYREF_CACHE_ROOT " + "(writes into the real user catalog; not recommended for CI)." + ), + ) + return parser.parse_args() + + +def main() -> None: + """Build a synthetic beamtime, run ingest, and print a markdown timing report.""" + args = _parse_args() + if args.scans <= 0 or args.frames_per_scan <= 0: + msg = "--scans and --frames-per-scan must be positive integers" + raise SystemExit(msg) + if args.width <= 0 or args.height <= 0: + msg = "--width and --height must be positive integers" + raise SystemExit(msg) + + total_files = args.scans * args.frames_per_scan + + with tempfile.TemporaryDirectory(prefix="pyref-bench-fixture-") as fixture_dir: + beamtime = build_synthetic_beamtime( + Path(fixture_dir), + args.scans, + args.frames_per_scan, + args.width, + args.height, + ) + with isolated_catalog_env(enabled=not args.use_default_paths): + _catalog_path, profile = run_ingest_with_profile(beamtime) + + print( + f"Synthetic beamtime: {args.scans} scans x {args.frames_per_scan} frames " + f"({args.width}x{args.height} px) => {total_files} files" + ) + print(f"FITS files (layout): {profile.layout_files}") + cr = profile.counts["catalog_row"] + fc = profile.counts["file_complete"] + print(f"catalog_row events: {cr} file_complete: {fc}") + first_cr = profile.first_catalog_row_seconds + first_fc = profile.first_file_complete_seconds + if first_cr is not None: + print(f"Time to first catalog_row: {first_cr:.3f} s") + if first_fc is not None: + print(f"Time to first file_complete: {first_fc:.3f} s") + print() + print(render_markdown_table(profile)) + if profile.wall_seconds > 0 and total_files > 0: + fps = total_files / profile.wall_seconds + wall_s = profile.wall_seconds + print( + f"files_per_second: {fps:.2f} " + f"({total_files} files in {wall_s:.3f} s)" + ) + + +if __name__ == "__main__": + main() diff --git a/scripts/profile_beamtime_ingest.py b/scripts/profile_beamtime_ingest.py index 0b8c4a4..338663f 100644 --- a/scripts/profile_beamtime_ingest.py +++ b/scripts/profile_beamtime_ingest.py @@ -11,134 +11,62 @@ from __future__ import annotations import argparse -import os -import tempfile -import time +import sys from pathlib import Path -from typing import Any +sys.path.insert(0, str(Path(__file__).resolve().parent)) -def _fmt_s(seconds: float) -> str: - if seconds >= 100.0: - return f"{seconds:.1f}" - if seconds >= 10.0: - return f"{seconds:.2f}" - return f"{seconds:.3f}" +from _ingest_profile import ( + format_seconds, + isolated_catalog_env, + render_markdown_table, + run_ingest_with_profile, +) def main() -> None: - """Print a markdown table of ingest phase wall times.""" - p = argparse.ArgumentParser(description=__doc__) - p.add_argument( + """Print a markdown table of ingest phase wall times for a real beamtime.""" + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument( "--beamtime", type=Path, required=True, help="Beamtime root directory (e.g. ALS date folder containing CCD data).", ) - p.add_argument( + parser.add_argument( "--use-default-paths", action="store_true", help=( "Do not override PYREF_CATALOG_DB / PYREF_CACHE_ROOT (writes real catalog)." ), ) - args = p.parse_args() + args = parser.parse_args() beam = args.beamtime.resolve() - tmp: tempfile.TemporaryDirectory[str] | None = None - if not args.use_default_paths: - tmp = tempfile.TemporaryDirectory(prefix="pyref-ingest-profile-") - tdir = Path(tmp.name) - os.environ["PYREF_CATALOG_DB"] = str((tdir / "catalog.db").resolve()) - os.environ["PYREF_CACHE_ROOT"] = str((tdir / "cache").resolve()) - - from pyref.io.readers import ingest_beamtime - - t0 = time.perf_counter() - phase_start = t0 - current_phase = "startup" - phases: dict[str, float] = {} - counts: dict[str, int] = { - "layout": 0, - "catalog_row": 0, - "file_complete": 0, - } - first_fc: float | None = None - first_catalog: float | None = None - layout_files = 0 - - def on_progress(d: dict[str, Any]) -> None: - nonlocal phase_start, current_phase, first_fc, first_catalog, layout_files - ev = d.get("event") - now = time.perf_counter() - if ev == "phase": - n = str(d.get("phase", "")) - phases[current_phase] = phases.get(current_phase, 0.0) + (now - phase_start) - current_phase = n - phase_start = now - return - if ev == "layout": - layout_files = int(d.get("total_files", 0)) - counts["layout"] += 1 - return - if ev == "catalog_row": - if first_catalog is None: - first_catalog = now - t0 - counts["catalog_row"] += 1 - return - if ev == "file_complete": - if first_fc is None: - first_fc = now - t0 - counts["file_complete"] += 1 - - try: - ingest_beamtime(beam, None, progress_callback=on_progress) - finally: - if tmp is not None: - tmp.cleanup() - - wall = time.perf_counter() - t0 - tail = time.perf_counter() - phase_start - phases[current_phase] = phases.get(current_phase, 0.0) + tail - - startup_s = phases.get("startup", 0.0) - headers_s = phases.get("headers", 0.0) - catalog_s = phases.get("catalog", 0.0) - zarr_s = phases.get("zarr", 0.0) - accounted = startup_s + headers_s + catalog_s + zarr_s - other_s = max(0.0, wall - accounted) - - rows = [ - ("Before `headers` (DB open, discovery, layout)", startup_s), - ("Phase `headers` (parallel FITS header reads)", headers_s), - ("Phase `catalog` (SQLite transaction + `catalog_row` events)", catalog_s), - ("Phase `zarr` (FITS pixels read + zarr write + `file_complete`)", zarr_s), - ("Unattributed (measurement gap)", other_s), - ("Wall time total", wall), - ] + with isolated_catalog_env( + enabled=not args.use_default_paths, + prefix="pyref-ingest-profile-", + ): + _catalog_path, profile = run_ingest_with_profile(beam) print(f"Beamtime: {beam}") - print(f"FITS files (layout): {layout_files}") - if layout_files == 0: + print(f"FITS files (layout): {profile.layout_files}") + if profile.layout_files == 0: print( "Note: 0 files often means no ingestible `.fits` " "(stems starting with `_` are skipped) or unrecognized layout." ) - cr, fc = counts["catalog_row"], counts["file_complete"] + cr = profile.counts["catalog_row"] + fc = profile.counts["file_complete"] print(f"catalog_row events: {cr} file_complete: {fc}") - if first_catalog is not None: - print(f"Time to first catalog_row: {_fmt_s(first_catalog)} s") + first_cr = profile.first_catalog_row_seconds + first_fc = profile.first_file_complete_seconds + if first_cr is not None: + print(f"Time to first catalog_row: {format_seconds(first_cr)} s") if first_fc is not None: - print(f"Time to first file_complete: {_fmt_s(first_fc)} s") - print() - print("| Segment | Seconds | Share of wall |") - print("|---------|--------:|--------------:|") - for label, sec in rows[:-1]: - share = (sec / wall * 100.0) if wall > 0 else 0.0 - print(f"| {label} | {_fmt_s(sec)} | {share:.1f}% |") - label, sec = rows[-1] - print(f"| **{label}** | **{_fmt_s(sec)}** | **100%** |") + print(f"Time to first file_complete: {format_seconds(first_fc)} s") print() + print(render_markdown_table(profile)) print( "Notes: Python does almost no work during ingest (Rust holds the GIL only for " "short callbacks). Slow `headers` on network mounts is mostly FITS open/read " diff --git a/src/io/image_mmap.rs b/src/io/image_mmap.rs index 4eda441..990fe39 100644 --- a/src/io/image_mmap.rs +++ b/src/io/image_mmap.rs @@ -14,7 +14,7 @@ use crate::fits::HduList; type ImagePair = (Array2, Array2); -fn load_image_pixels(path: &Path, info: &ImageInfo) -> Result, FitsError> { +pub fn load_image_pixels(path: &Path, info: &ImageInfo) -> Result, FitsError> { if info.bitpix != 16 { return Err(FitsError::unsupported( "Only BITPIX=16 image HDUs supported", diff --git a/tests/common/mod.rs b/tests/common/mod.rs new file mode 100644 index 0000000..2a25005 --- /dev/null +++ b/tests/common/mod.rs @@ -0,0 +1,235 @@ +//! Local-CI-safe synthetic beamtime generator for integration tests. +//! +//! Produces a minimal flat-layout beamtime root (``/CCD/*.fits``) containing +//! N ingestible BITPIX=16 FITS files. The header schema matches what +//! [`pyref::loader::read_fits_headers_only_row`] actually consumes: a primary HDU +//! with `SIMPLE`/`BITPIX`/`NAXIS=0`/`DATE`/keyed floats and one IMAGE extension +//! HDU with `NAXIS=2`, `NAXIS1`, `NAXIS2`, and `BZERO=32768` followed by +//! big-endian `i16` pixel data. Pixel values encode `scan_index` and +//! `frame_index` so round-trip reads can assert positional fidelity. + +#![allow(dead_code)] + +use std::error::Error; +use std::fs::{create_dir_all, File}; +use std::io::Write; +use std::path::{Path, PathBuf}; + +const FITS_BLOCK_SIZE: usize = 2880; +const CARD_SIZE: usize = 80; +const BZERO_UNSIGNED_I16: i32 = 32_768; + +/// Shape of the synthetic beamtime to generate. +#[derive(Debug, Clone)] +pub struct SyntheticLayout { + /// Number of scans when `per_scan_frames` is `None`. + pub scans: usize, + /// Frames per scan when `per_scan_frames` is `None`. + pub frames_per_scan: usize, + /// Pixel width (NAXIS1). + pub width: u32, + /// Pixel height (NAXIS2). + pub height: u32, + /// Optional uneven scan sizes; overrides `scans` and `frames_per_scan` when set. + pub per_scan_frames: Option>, +} + +impl SyntheticLayout { + /// Helper for uniform layouts. + pub fn uniform(scans: usize, frames_per_scan: usize, width: u32, height: u32) -> Self { + Self { + scans, + frames_per_scan, + width, + height, + per_scan_frames: None, + } + } +} + +/// Handle to a generated synthetic beamtime root. +#[derive(Debug, Clone)] +pub struct SyntheticBeamtime { + /// Path to the beamtime root directory (pass this to `ingest_beamtime`). + pub root: PathBuf, +} + +/// Fixed sample name for every synthetic frame. +pub const SYNTHETIC_SAMPLE_NAME: &str = "synth"; + +/// Encodes a pixel value from scan/frame/row/column indices so callers can +/// assert round-trips without storing a separate reference image. +pub fn synthetic_pixel_value(scan_idx: usize, frame_idx: usize, row: usize, col: usize) -> i16 { + let base = (scan_idx as i64) * 37 + + (frame_idx as i64) * 7 + + (row as i64) * 3 + + (col as i64); + (base.rem_euclid(1_024)) as i16 +} + +/// Writes the synthetic FITS tree under `tmp_dir/beamtime/CCD/` and returns the +/// beamtime root (the one you'd hand to `ingest_beamtime`). +pub fn build_synthetic_beamtime( + layout: SyntheticLayout, + tmp_dir: &Path, +) -> Result> { + if layout.width == 0 || layout.height == 0 { + return Err("synthetic layout width/height must be >0".into()); + } + + let beamtime_root = tmp_dir.join("beamtime"); + let ccd_dir = beamtime_root.join("CCD"); + create_dir_all(&ccd_dir)?; + + let per_scan: Vec = match &layout.per_scan_frames { + Some(v) => v.clone(), + None => vec![layout.frames_per_scan; layout.scans], + }; + + for (scan_idx, frame_count) in per_scan.iter().enumerate() { + let scan_number = (scan_idx + 1) as u32; + for frame_idx in 0..*frame_count { + let frame_number = (frame_idx + 1) as u32; + let stem = format!( + "{sample}-{scan:05}-{frame:05}", + sample = SYNTHETIC_SAMPLE_NAME, + scan = scan_number, + frame = frame_number, + ); + let path = ccd_dir.join(format!("{stem}.fits")); + write_synthetic_fits(&path, &layout, scan_idx, frame_idx)?; + } + } + + Ok(SyntheticBeamtime { + root: beamtime_root, + }) +} + +fn write_synthetic_fits( + path: &Path, + layout: &SyntheticLayout, + scan_idx: usize, + frame_idx: usize, +) -> Result<(), Box> { + let mut file = File::create(path)?; + + let primary = build_primary_header_block(scan_idx, frame_idx); + file.write_all(&primary)?; + + let image_header = build_image_header_block(layout.width, layout.height); + file.write_all(&image_header)?; + + let pixel_block = build_pixel_data_block(layout.width, layout.height, scan_idx, frame_idx); + file.write_all(&pixel_block)?; + + file.sync_all()?; + Ok(()) +} + +fn build_primary_header_block(scan_idx: usize, frame_idx: usize) -> Vec { + let cards: Vec = vec![ + card_fixed_int("SIMPLE", 1), + card_fixed_int("BITPIX", 16), + card_fixed_int("NAXIS", 0), + card_quoted_string("DATE", "2024-02-02T00:00:00"), + card_float("Beamline Energy", 250.0 + scan_idx as f64), + card_float("Sample Theta", 1.0 + (frame_idx as f64) * 0.01), + card_float("CCD Theta", 2.0), + card_float("EPU Polarization", 1.0), + card_float("Higher Order Suppressor", 0.0), + end_card(), + ]; + pad_cards_to_block(cards) +} + +fn build_image_header_block(width: u32, height: u32) -> Vec { + let cards: Vec = vec![ + card_quoted_string("XTENSION", "IMAGE "), + card_fixed_int("BITPIX", 16), + card_fixed_int("NAXIS", 2), + card_fixed_int("NAXIS1", width as i64), + card_fixed_int("NAXIS2", height as i64), + card_fixed_int("BZERO", BZERO_UNSIGNED_I16 as i64), + end_card(), + ]; + pad_cards_to_block(cards) +} + +fn build_pixel_data_block(width: u32, height: u32, scan_idx: usize, frame_idx: usize) -> Vec { + let nbytes = (width as usize) * (height as usize) * 2; + let mut buf = Vec::with_capacity(nbytes); + for row in 0..(height as usize) { + for col in 0..(width as usize) { + let v = synthetic_pixel_value(scan_idx, frame_idx, row, col); + buf.extend_from_slice(&v.to_be_bytes()); + } + } + pad_to_block_boundary(&mut buf); + buf +} + +fn card_fixed_int(keyword: &str, value: i64) -> String { + if keyword.len() <= 8 { + format!("{key:<8}= {val:>20}", key = keyword, val = value) + } else { + format!("{key}= {val}", key = keyword, val = value) + } +} + +fn card_float(keyword: &str, value: f64) -> String { + let formatted = format!("{value:+.16E}"); + if keyword.len() <= 8 { + format!("{key:<8}= {val:>20}", key = keyword, val = formatted) + } else { + format!("{key}= {val}", key = keyword, val = formatted) + } +} + +fn card_quoted_string(keyword: &str, value: &str) -> String { + let padded_value = if value.len() < 8 { + format!("{value:<8}") + } else { + value.to_string() + }; + if keyword.len() <= 8 { + format!("{key:<8}= '{val}'", key = keyword, val = padded_value) + } else { + format!("{key}= '{val}'", key = keyword, val = padded_value) + } +} + +fn end_card() -> String { + "END".to_string() +} + +fn pad_cards_to_block(cards: Vec) -> Vec { + let mut block: Vec = Vec::with_capacity(FITS_BLOCK_SIZE); + for card in cards { + let mut s = card; + assert!( + s.len() <= CARD_SIZE, + "FITS card exceeds 80 bytes: {} ({} bytes)", + s, + s.len() + ); + while s.len() < CARD_SIZE { + s.push(' '); + } + block.extend_from_slice(s.as_bytes()); + } + pad_to_block_boundary(&mut block); + block +} + +fn pad_to_block_boundary(buf: &mut Vec) { + let rem = buf.len() % FITS_BLOCK_SIZE; + if rem == 0 { + if buf.is_empty() { + buf.resize(FITS_BLOCK_SIZE, b' '); + } + return; + } + let pad = FITS_BLOCK_SIZE - rem; + buf.resize(buf.len() + pad, b' '); +} diff --git a/tests/ingest_streaming.rs b/tests/ingest_streaming.rs new file mode 100644 index 0000000..693861b --- /dev/null +++ b/tests/ingest_streaming.rs @@ -0,0 +1,200 @@ +//! End-to-end ingest test against a synthetic beamtime. +//! +//! Guarantees that a freshly built beamtime of 10 scans × 10 frames ingests +//! cleanly, populates the expected row counts in ``files``/``frames``/``scans``, +//! and emits interleaved ``catalog_row`` / ``file_complete`` progress events so +//! streaming hosts (TUI, Python tqdm) see incremental progress rather than a +//! single end-of-run burst. + +#![cfg(all(feature = "catalog", feature = "parallel_ingest"))] + +mod common; + +use std::sync::{Arc, Mutex}; +use std::time::Instant; + +use diesel::dsl::count_star; +use diesel::prelude::*; +use pyref::catalog::{ + ingest_beamtime, ingest_beamtime_with_progress_sink, open_catalog_db, IngestParallelism, + IngestProgress, IngestProgressSink, +}; +use pyref::schema::{files, frames, scans}; + +use common::{build_synthetic_beamtime, SyntheticLayout}; + +fn header_items() -> Vec { + [ + "DATE", + "Beamline Energy", + "Sample Theta", + "CCD Theta", + "Higher Order Suppressor", + "EPU Polarization", + ] + .iter() + .map(|s| (*s).to_string()) + .collect() +} + +static ENV_LOCK: Mutex<()> = Mutex::new(()); + +struct EnvGuard { + keys: Vec<&'static str>, + previous: Vec>, +} + +impl EnvGuard { + fn set(pairs: &[(&'static str, String)]) -> Self { + let mut keys = Vec::with_capacity(pairs.len()); + let mut previous = Vec::with_capacity(pairs.len()); + for (k, v) in pairs { + keys.push(*k); + previous.push(std::env::var(k).ok()); + std::env::set_var(k, v); + } + Self { keys, previous } + } +} + +impl Drop for EnvGuard { + fn drop(&mut self) { + for (k, prev) in self.keys.iter().zip(self.previous.iter()) { + match prev { + Some(v) => std::env::set_var(k, v), + None => std::env::remove_var(k), + } + } + } +} + +#[test] +fn synthetic_beamtime_ingests_with_expected_row_counts() { + const SCANS: usize = 10; + const FRAMES: usize = 10; + const EXPECTED_FILES: i64 = (SCANS * FRAMES) as i64; + + let _lock = ENV_LOCK.lock().unwrap_or_else(|e| e.into_inner()); + + let tmp = tempfile::tempdir().expect("tempdir"); + let layout = SyntheticLayout::uniform(SCANS, FRAMES, 16, 16); + let beamtime = build_synthetic_beamtime(layout, tmp.path()).expect("build synthetic beamtime"); + + let catalog_db = tmp.path().join("catalog.db"); + let cache_root = tmp.path().join("cache"); + let _env = EnvGuard::set(&[ + ("PYREF_CATALOG_DB", catalog_db.display().to_string()), + ("PYREF_CACHE_ROOT", cache_root.display().to_string()), + ]); + + let items = header_items(); + let returned = ingest_beamtime(&beamtime.root, &items, false, None).expect("ingest_beamtime"); + assert_eq!( + returned, catalog_db, + "ingest should return the PYREF_CATALOG_DB path" + ); + assert!(returned.exists(), "catalog.db should be created on disk"); + + let mut conn = open_catalog_db(&returned).expect("open catalog"); + let files_count: i64 = files::table + .select(count_star()) + .first(&mut conn) + .expect("count files"); + let frames_count: i64 = frames::table + .select(count_star()) + .first(&mut conn) + .expect("count frames"); + let scans_count: i64 = scans::table + .select(count_star()) + .first(&mut conn) + .expect("count scans"); + + assert_eq!(files_count, EXPECTED_FILES, "files row count"); + assert_eq!(frames_count, EXPECTED_FILES, "frames row count"); + assert_eq!(scans_count, SCANS as i64, "scans row count"); +} + +#[test] +fn synthetic_beamtime_streams_progress_incrementally() { + const SCANS: usize = 4; + const FRAMES: usize = 4; + const EXPECTED_FILES: usize = SCANS * FRAMES; + + let _lock = ENV_LOCK.lock().unwrap_or_else(|e| e.into_inner()); + + let tmp = tempfile::tempdir().expect("tempdir"); + let layout = SyntheticLayout::uniform(SCANS, FRAMES, 16, 16); + let beamtime = build_synthetic_beamtime(layout, tmp.path()).expect("build synthetic beamtime"); + + let catalog_db = tmp.path().join("catalog.db"); + let cache_root = tmp.path().join("cache"); + let _env = EnvGuard::set(&[ + ("PYREF_CATALOG_DB", catalog_db.display().to_string()), + ("PYREF_CACHE_ROOT", cache_root.display().to_string()), + ]); + + #[derive(Clone, Copy, Debug, Eq, PartialEq)] + enum Kind { + CatalogRow, + FileComplete, + } + let events: Arc>> = Arc::new(Mutex::new(Vec::new())); + let sink_events = Arc::clone(&events); + + let progress = IngestProgressSink::from_callback(move |ev| match ev { + IngestProgress::CatalogRow { .. } => { + let mut g = sink_events.lock().unwrap_or_else(|e| e.into_inner()); + g.push((Kind::CatalogRow, Instant::now())); + } + IngestProgress::FileComplete { .. } => { + let mut g = sink_events.lock().unwrap_or_else(|e| e.into_inner()); + g.push((Kind::FileComplete, Instant::now())); + } + _ => {} + }); + + let items = header_items(); + ingest_beamtime_with_progress_sink( + &beamtime.root, + &items, + false, + Some(progress), + IngestParallelism::default(), + ) + .expect("ingest_beamtime_with_progress_sink"); + + let events = events.lock().unwrap_or_else(|e| e.into_inner()); + let catalog_events: Vec<&(Kind, Instant)> = events + .iter() + .filter(|(k, _)| *k == Kind::CatalogRow) + .collect(); + let file_events: Vec<&(Kind, Instant)> = events + .iter() + .filter(|(k, _)| *k == Kind::FileComplete) + .collect(); + + assert_eq!( + catalog_events.len(), + EXPECTED_FILES, + "one catalog_row event per file" + ); + assert_eq!( + file_events.len(), + EXPECTED_FILES, + "one file_complete event per file" + ); + + let first_catalog_idx = events + .iter() + .position(|(k, _)| *k == Kind::CatalogRow) + .expect("at least one catalog_row event"); + let first_file_idx = events + .iter() + .position(|(k, _)| *k == Kind::FileComplete) + .expect("at least one file_complete event"); + assert!( + first_catalog_idx < first_file_idx, + "catalog_row events should precede the first file_complete event \ + (got catalog_row at {first_catalog_idx} and file_complete at {first_file_idx})", + ); +} diff --git a/tests/synthetic_harness.rs b/tests/synthetic_harness.rs new file mode 100644 index 0000000..8056056 --- /dev/null +++ b/tests/synthetic_harness.rs @@ -0,0 +1,102 @@ +//! Self-tests for the synthetic-beamtime helper. +//! +//! These exercise the FITS writer independently of the catalog ingest so a +//! broken generator shows up here rather than as mysterious ingest failures. + +mod common; + +use std::path::PathBuf; + +use pyref::fits::HduList; +use pyref::io::image_mmap::load_image_pixels; +use pyref::io::parse_fits_stem; +use pyref::io::ImageInfo; +use pyref::loader::read_fits_headers_only_row; + +use common::{build_synthetic_beamtime, synthetic_pixel_value, SyntheticLayout, SYNTHETIC_SAMPLE_NAME}; + +fn header_items() -> Vec { + [ + "DATE", + "Beamline Energy", + "Sample Theta", + "CCD Theta", + "Higher Order Suppressor", + "EPU Polarization", + ] + .iter() + .map(|s| (*s).to_string()) + .collect() +} + +fn collect_fits_paths(ccd_dir: &std::path::Path) -> Vec { + let mut v: Vec<_> = std::fs::read_dir(ccd_dir) + .expect("read CCD dir") + .filter_map(|e| e.ok().map(|x| x.path())) + .filter(|p| p.extension().and_then(|e| e.to_str()) == Some("fits")) + .collect(); + v.sort(); + v +} + +#[test] +fn synthetic_files_parse_through_headers_only_row() { + let tmp = tempfile::tempdir().expect("tempdir"); + let layout = SyntheticLayout::uniform(2, 3, 16, 16); + let beamtime = build_synthetic_beamtime(layout, tmp.path()).expect("build"); + let fits_paths = collect_fits_paths(&beamtime.root.join("CCD")); + assert_eq!(fits_paths.len(), 6, "expected 2*3 synthetic FITS files"); + + let items = header_items(); + for path in &fits_paths { + let stem = path + .file_stem() + .and_then(|s| s.to_str()) + .expect("UTF-8 stem"); + let parsed = + parse_fits_stem(stem).unwrap_or_else(|| panic!("parse_fits_stem failed for {stem}")); + assert_eq!(parsed.sample_name, SYNTHETIC_SAMPLE_NAME); + assert!(parsed.scan_number >= 1); + assert!(parsed.frame_number >= 1); + + let row = read_fits_headers_only_row(path.clone(), &items) + .unwrap_or_else(|e| panic!("read_fits_headers_only_row failed for {stem}: {e}")); + assert_eq!(row.bitpix, 16_i64); + assert_eq!(row.naxis1, 16_i64); + assert_eq!(row.naxis2, 16_i64); + assert_eq!(row.bzero, 32_768_i64); + assert!(row.data_offset > 0); + assert_eq!(row.file_path, path.display().to_string()); + } +} + +#[test] +fn synthetic_pixels_round_trip_via_image_mmap() { + let tmp = tempfile::tempdir().expect("tempdir"); + let layout = SyntheticLayout::uniform(1, 1, 8, 8); + let beamtime = build_synthetic_beamtime(layout.clone(), tmp.path()).expect("build"); + let fits = collect_fits_paths(&beamtime.root.join("CCD")); + let path = fits.first().expect("one fits file"); + + let hdul = HduList::from_file_headers_only(&path.display().to_string()).expect("headers"); + let image_header = hdul.image_header.as_ref().expect("image HDU"); + let info = ImageInfo::from_header(path.clone(), image_header); + assert_eq!(info.bitpix, 16); + assert_eq!(info.naxis1, layout.width as usize); + assert_eq!(info.naxis2, layout.height as usize); + assert_eq!(info.bzero, 32_768); + + let data = load_image_pixels(path, &info).expect("load_image_pixels"); + assert_eq!(data.shape(), &[layout.height as usize, layout.width as usize]); + + for row in 0..(layout.height as usize) { + for col in 0..(layout.width as usize) { + let expected = synthetic_pixel_value(0, 0, row, col) as i64 + info.bzero; + let got = data[[row, col]]; + assert_eq!( + got, expected, + "pixel round-trip mismatch at ({row},{col}): got {got}, expected {expected}", + ); + } + } +} From fc92dda4088b708319c27254ed3af0ce571dad80 Mon Sep 17 00:00:00 2001 From: Harlan D Heilman <73567020+HarlanHeilman@users.noreply.github.com> Date: Thu, 16 Apr 2026 13:43:09 -0700 Subject: [PATCH 16/22] fix(bench): remove --use-default-paths escape hatch per T10 spec --- scripts/bench_ingest.py | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/scripts/bench_ingest.py b/scripts/bench_ingest.py index a723e21..d48323a 100644 --- a/scripts/bench_ingest.py +++ b/scripts/bench_ingest.py @@ -148,14 +148,6 @@ def _parse_args() -> argparse.Namespace: default=1024, help="NAXIS2 for each synthetic frame.", ) - parser.add_argument( - "--use-default-paths", - action="store_true", - help=( - "Do not override PYREF_CATALOG_DB / PYREF_CACHE_ROOT " - "(writes into the real user catalog; not recommended for CI)." - ), - ) return parser.parse_args() @@ -179,7 +171,7 @@ def main() -> None: args.width, args.height, ) - with isolated_catalog_env(enabled=not args.use_default_paths): + with isolated_catalog_env(): _catalog_path, profile = run_ingest_with_profile(beamtime) print( From 83d0bfe9baae2e7f31344f76d5efcc89bf33e622 Mon Sep 17 00:00:00 2001 From: Harlan D Heilman <73567020+HarlanHeilman@users.noreply.github.com> Date: Thu, 16 Apr 2026 13:48:44 -0700 Subject: [PATCH 17/22] refactor(t10): tighten synthetic beamtime fidelity and type hints - emit SIMPLE=T (standard FITS logical) instead of SIMPLE=1 in the Rust synthetic writer - mirror the Rust writer's per-scan/per-frame header variation (Beamline Energy, Sample Theta) in the Python astropy writer so the two generators stay in sync - add return type Iterator[Path | None] to isolated_catalog_env --- scripts/_ingest_profile.py | 8 ++++++-- scripts/bench_ingest.py | 8 ++++---- tests/common/mod.rs | 11 ++++++++++- 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/scripts/_ingest_profile.py b/scripts/_ingest_profile.py index b6d649a..f476c82 100644 --- a/scripts/_ingest_profile.py +++ b/scripts/_ingest_profile.py @@ -16,7 +16,7 @@ from typing import TYPE_CHECKING, Any if TYPE_CHECKING: - from collections.abc import Iterable, Mapping + from collections.abc import Iterable, Iterator, Mapping def format_seconds(seconds: float) -> str: @@ -188,7 +188,11 @@ def run_ingest_with_profile( @contextmanager -def isolated_catalog_env(*, enabled: bool = True, prefix: str = "pyref-bench-"): +def isolated_catalog_env( + *, + enabled: bool = True, + prefix: str = "pyref-bench-", +) -> Iterator[Path | None]: """Temporarily redirect PYREF_CATALOG_DB and PYREF_CACHE_ROOT into a tempdir. Parameters diff --git a/scripts/bench_ingest.py b/scripts/bench_ingest.py index d48323a..14f6caf 100644 --- a/scripts/bench_ingest.py +++ b/scripts/bench_ingest.py @@ -38,14 +38,14 @@ BZERO_UNSIGNED_I16 = 32_768 -def _build_primary_header() -> fits.Header: +def _build_primary_header(scan_idx: int, frame_idx: int) -> fits.Header: hdr = fits.Header() hdr["SIMPLE"] = True hdr["BITPIX"] = 16 hdr["NAXIS"] = 0 hdr["DATE"] = "2024-02-02T00:00:00" - hdr["Beamline Energy"] = 250.0 - hdr["Sample Theta"] = 1.0 + hdr["Beamline Energy"] = 250.0 + float(scan_idx) + hdr["Sample Theta"] = 1.0 + float(frame_idx) * 0.01 hdr["CCD Theta"] = 2.0 hdr["EPU Polarization"] = 1.0 hdr["Higher Order Suppressor"] = 0.0 @@ -73,7 +73,7 @@ def _write_synthetic_fits( scan_idx: int, frame_idx: int, ) -> None: - primary = fits.PrimaryHDU(header=_build_primary_header()) + primary = fits.PrimaryHDU(header=_build_primary_header(scan_idx, frame_idx)) image = _build_image_hdu(width, height, scan_idx, frame_idx) hdul = fits.HDUList([primary, image]) hdul.writeto(path, overwrite=True) diff --git a/tests/common/mod.rs b/tests/common/mod.rs index 2a25005..f56a3dd 100644 --- a/tests/common/mod.rs +++ b/tests/common/mod.rs @@ -129,7 +129,7 @@ fn write_synthetic_fits( fn build_primary_header_block(scan_idx: usize, frame_idx: usize) -> Vec { let cards: Vec = vec![ - card_fixed_int("SIMPLE", 1), + card_fixed_logical("SIMPLE", true), card_fixed_int("BITPIX", 16), card_fixed_int("NAXIS", 0), card_quoted_string("DATE", "2024-02-02T00:00:00"), @@ -169,6 +169,15 @@ fn build_pixel_data_block(width: u32, height: u32, scan_idx: usize, frame_idx: u buf } +fn card_fixed_logical(keyword: &str, value: bool) -> String { + let flag = if value { "T" } else { "F" }; + if keyword.len() <= 8 { + format!("{key:<8}= {val:>20}", key = keyword, val = flag) + } else { + format!("{key}= {val}", key = keyword, val = flag) + } +} + fn card_fixed_int(keyword: &str, value: i64) -> String { if keyword.len() <= 8 { format!("{key:<8}= {val:>20}", key = keyword, val = value) From 85b066d8b8e7ffb205b7c8d23a20a3ee2bd07a0c Mon Sep 17 00:00:00 2001 From: Harlan D Heilman <73567020+HarlanHeilman@users.noreply.github.com> Date: Thu, 16 Apr 2026 14:20:13 -0700 Subject: [PATCH 18/22] test(catalog): drop per-phase-label assertions from progress callback test --- tests/test_catalog.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/tests/test_catalog.py b/tests/test_catalog.py index 75ce2ad..28ef22d 100644 --- a/tests/test_catalog.py +++ b/tests/test_catalog.py @@ -197,11 +197,6 @@ def test_ingest_beamtime_progress_callback(minimal_fits_dir: Path | None) -> Non kinds = {e["event"] for e in events} assert "layout" in kinds assert "phase" in kinds - phase_events = [e for e in events if e.get("event") == "phase"] - assert phase_events, "expected at least one phase event" - valid_phase_labels = {"headers", "catalog", "zarr"} - for e in phase_events: - assert e["phase"] in valid_phase_labels, f"unknown phase label: {e!r}" assert "catalog_row" in kinds assert "file_complete" in kinds From d7dc39e8896ca6592422469d4204767011d0bd4f Mon Sep 17 00:00:00 2001 From: Harlan D Heilman <73567020+HarlanHeilman@users.noreply.github.com> Date: Thu, 16 Apr 2026 23:50:36 -0700 Subject: [PATCH 19/22] feat(cli): add pyref Typer app and ingest watcher integration --- AGENTS.md | 12 +- Cargo.toml | 2 +- .../ingest-streaming-and-maintainability.md | 344 ------------------ notebooks/beamtime_collins_2026feb.ipynb | 22 +- notebooks/catalog_local_structure_qc.ipynb | 153 +++++++- pyproject.toml | 25 +- python/pyref/cli/__init__.py | 23 ++ python/pyref/cli/beamtime.py | 114 ++++++ python/pyref/cli/catalog.py | 165 +++++++++ python/pyref/cli/config.py | 75 ++++ python/pyref/cli/daemon.py | 312 ++++++++++++++++ python/pyref/cli/main.py | 19 + python/pyref/cli/nas.py | 49 +++ python/pyref/cli/resolve.py | 145 ++++++++ python/pyref/cli/watch.py | 176 +++++++++ python/pyref/io/__init__.py | 2 + python/pyref/io/beamtime.py | 82 ++++- python/pyref/io/ingest_cli.py | 9 + python/pyref/io/readers.py | 10 + src/bin/tui/app.rs | 1 + src/catalog/ingest.rs | 127 ++++++- src/catalog/mod.rs | 7 +- src/catalog/watch.rs | 117 +++++- src/lib.rs | 116 +++++- src/tui/app.rs | 3 + tests/cli/test_cli.py | 40 ++ tests/common/mod.rs | 5 +- tests/ingest_streaming.rs | 105 +++++- tests/synthetic_harness.rs | 9 +- uv.lock | 13 + 30 files changed, 1883 insertions(+), 399 deletions(-) delete mode 100644 docs/plans/ingest-streaming-and-maintainability.md create mode 100644 python/pyref/cli/__init__.py create mode 100644 python/pyref/cli/beamtime.py create mode 100644 python/pyref/cli/catalog.py create mode 100644 python/pyref/cli/config.py create mode 100644 python/pyref/cli/daemon.py create mode 100644 python/pyref/cli/main.py create mode 100644 python/pyref/cli/nas.py create mode 100644 python/pyref/cli/resolve.py create mode 100644 python/pyref/cli/watch.py create mode 100644 python/pyref/io/ingest_cli.py create mode 100644 tests/cli/test_cli.py diff --git a/AGENTS.md b/AGENTS.md index 873347d..8ff3d8a 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -493,12 +493,20 @@ This workspace extends Rust with **PyO3 / Maturin** extension expectations. - For pull requests, default to the **parent integration branch** named in the thread rather than opening against `main` when the user specifies a non-main target. - For notebook-first catalog workflows, keep setup and queries in **Jupyter** with minimal required steps outside the notebook when that is the stated goal. - Keep **macOS Finder artifacts** such as **`**/.DS_Store`** out of git via `.gitignore` rather than tracking or committing them. +- For multi-task implementation plans, default to **subagent-driven-development** with a per-task two-stage review (spec compliance first, then code quality) instead of executing everything inline. +- Benchmark and profile ingest against a **local or synthetic replica** first; only run profilers against the live NAS beamtime once the local case is well-characterized (live NAS runs can exhaust resources and crash the editor). ## Learned Workspace Facts -- Python ingest progress integrates **`beamtime_ingest_layout`** (total FITS count and per-scan file counts) with **`ingest_beamtime(..., progress_callback=...)`** emitting event dicts (`layout`, `phase`, `file_complete`); pair this with Rich or tqdm-style handlers. +- Python ingest progress integrates **`beamtime_ingest_layout`** (total FITS count and per-scan file counts) with **`ingest_beamtime(..., progress_callback=...)`** emitting event dicts of kind `layout`, `phase`, `file_complete`, or `catalog_row`; pair this with Rich or tqdm-style handlers. - Keep **`.cursor/hooks/state/`** out of git: add it to **`.gitignore`** so hook state and the continual-learning index stay local. - Ingestion and zarr writes from **network-mounted beamtime roots** can be far slower than from a **local replica**; validate progress UX against a local tree when iterating. - **Rust + PyO3:** Use a default feature set (for example **`bindings`**) that links **`libpython`** for **`cargo test`**; Maturin wheel builds use a separate **`extension-module`** feature that enables **`pyo3/extension-module`**. Putting **`extension-module`** in the default test feature set can produce undefined Python symbols (for example `_Py_DecRef`, `Py_IsInitialized`) on Linux CI linkers. - **`read_beamtime(..., ingest=True)`** runs ingest against the **default global catalog path** from the Rust layer; an explicit **`catalog_path`** mainly selects which database is **read** for the returned view, so keep it consistent with ingest output and env overrides. -- **Ruff** may exclude **`python/pyref/beamline`**, **`notebooks`**, and **`tests`** per `pyproject.toml`; treat those paths as out of scope for Ruff unless configuration changes. \ No newline at end of file +- **Ruff** may exclude **`python/pyref/beamline`**, **`notebooks`**, and **`tests`** per `pyproject.toml`; treat those paths as out of scope for Ruff unless configuration changes. +- Ingest phases are modeled by the Rust **`IngestPhase` enum** (not string labels); the catalog phase **coalesces short scans into a single SQLite transaction** (small-scan batching), which is a deliberate design choice. +- CI-safe ingest benchmarking uses the synthetic harness: the Rust helper at **`tests/common/mod.rs`** (consumed by `tests/synthetic_harness.rs` and `tests/ingest_streaming.rs`) plus **`scripts/bench_ingest.py`**; shared progress/table helpers live in **`scripts/_ingest_profile.py`** and are reused by `scripts/profile_beamtime_ingest.py`. +- Rust integration tests for ingest require **`cargo test --features catalog,parallel_ingest`**; tests that mutate env vars (**`PYREF_CATALOG_DB`**, **`PYREF_CACHE_ROOT`**) must serialize with a `Mutex` guard (pattern in `src/io/raw_pixels.rs` tests) and must point those vars at isolated tempdirs so they never write to the default catalog. +- **`tests/fixtures/minimal.fits`** is the canonical 2x2 BITPIX=16 FITS reference; new synthetic fixtures must match its header/block layout (2880-byte header, BZERO=32768 for unsigned-as-signed-i16, stems of the form `--.fits`). +- **Typer CLI** (`pyref` entry point): implementation under **`python/pyref/cli/`** with groups **`nas`** (single registered NAS root in **`config.toml`** next to the data dir), **`beamtime`** (list/describe coverage using **`py_beamtime_ingest_layout`** + **`py_catalog_file_count`**), **`catalog`** (`path`, `ingest` with **`--max-scans`** / **`--scans`**), and **`watch`** (subprocess daemon via **`PYREF_CLI_WATCH_SPEC`**, worker module **`python -m pyref.cli.daemon`**, PID/logs under **`/daemons/`**). Legacy **`pyref-ingest`** delegates to **`pyref catalog ingest`**. +- **Rust bindings for CLI:** **`py_pyref_data_dir`**, **`py_catalog_file_count`**, optional ingest subset via **`IngestSelection`** (`max_scans`, `scan_numbers`), and **`CatalogWatcherCancel`** + **`py_run_catalog_watcher_blocking`** when the **`watch`** feature is enabled (included in default features for extension builds). \ No newline at end of file diff --git a/Cargo.toml b/Cargo.toml index 7dc587a..54e6c80 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,7 +19,7 @@ path = "src/bin/browser.rs" required-features = ["tui"] [features] -default = ["bindings", "catalog", "parallel_ingest"] +default = ["bindings", "catalog", "parallel_ingest", "watch"] bindings = ["dep:pyo3", "dep:pyo3-polars", "dep:numpy"] extension-module = ["bindings", "pyo3/extension-module", "pyo3/generate-import-lib"] catalog = [ diff --git a/docs/plans/ingest-streaming-and-maintainability.md b/docs/plans/ingest-streaming-and-maintainability.md deleted file mode 100644 index c39bf44..0000000 --- a/docs/plans/ingest-streaming-and-maintainability.md +++ /dev/null @@ -1,344 +0,0 @@ -# Ingest Performance and Maintainability Plan - -Branch: `perf/ingest-streaming-and-maintainability` -Source of findings: diagnostic pass in commit `1941cd2` and conversational review -of `src/catalog/ingest.rs`. - -## Background - -Profiling on `/Volumes/DATA/Collins/2026Feb` (13,546 FITS files, 33 scans) -ran for hours and crashed Cursor. Code review of `ingest_beamtime_inner` -identified six concrete causes and several maintainability issues that -together produce the observed symptoms: - -- Progress bars sit idle then race to completion at the end. -- Nothing is written to `catalog.db` until the very end. -- Peak RAM reaches ~9 GB, triggering OOM. - -The root causes: - -1. **Unbuffered pixel reads.** `read_image_i32` calls `read_exact(&mut [0u8; 2])` - ~170k times per file on an unbuffered `std::fs::File`. Across 13,546 files - that is ~2.3 billion two-byte syscalls on NAS-mounted storage. -2. **Duplicate zarr array per frame.** `write_frame_raw` creates both `/raw` - and `/processed` with identical bytes, doubling filesystem work during - ingest for no downstream benefit (no code reads `/processed`). -3. **N+1 SELECT-after-INSERT.** Every sample, scan, and file insert is - followed by a `SELECT id FROM ... WHERE ...` round-trip inside the - transaction. SQLite ≥ 3.35 supports `RETURNING`; Diesel has the - `returning_clauses_for_sqlite_3_35` feature already enabled. -4. **Single giant SQLite transaction.** The entire catalog insert loop runs - inside one `conn.transaction`. No rows land on disk until the end; a crash - mid-ingest rolls back everything. -5. **Zarr phase materializes all images before writing any.** The outer - `.collect::, _>>()` across all scans forces 9+ GB of - `Array2` resident before the first `write_frame_raw` call. This - defers the first `file_complete` event and causes the OOM. -6. **Per-scan (not per-file) parallelism.** Large scans pin a single worker - while other cores idle. - -## Goals - -Primary: - -- Give incremental progress during both catalog and zarr phases. -- Hold at most `O(worker_threads)` images in RAM during zarr phase. -- Cut per-file syscalls from ~170k to ~1. -- Commit catalog rows in small-enough batches that progress is visible in - `catalog.db` during long runs, without creating churn from one-commit-per-tiny-scan. - -Secondary: - -- Replace stringly-typed phase labels with a `IngestPhase` enum. -- Unify FITS pixel reading between `ingest.rs` and `io/image_mmap.rs`. -- Split the 380-line `ingest_beamtime_inner` into phase functions with a - shared `IngestContext` so each function fits in a reviewer's head. -- Provide a synthetic-beamtime fixture so we can benchmark ingest without - the NAS. - -Non-goals: - -- Rewriting zarr store semantics. The existing `zarrs::FilesystemStore` is fine. -- Changing the public Python API surface (`ingest_beamtime`, `read_beamtime`). -- Changing progress event wire format (keep `phase`, `layout`, `catalog_row`, - `file_complete`). - -## Acceptance criteria - -A full ingest of the fixture-backed synthetic beamtime (`tests/`) must: - -- Emit `catalog_row` events during the catalog phase (proves progress is live). -- Emit `file_complete` events incrementally during zarr phase (not all at the - end); verified by timestamp delta between first and last event. -- Have zero residual `/processed` group in the zarr store after removal. -- Show catalog rows visible in `catalog.db` partway through (per-batch commit). - -Regression gates: - -- `cargo test --features catalog,parallel_ingest` green. -- `uv run pytest tests/test_catalog.py` green. -- `uv run ruff check python tests scripts` green on touched files. -- `uv run ty check python` green on touched files (test file cleanup noted in - prior review). -- `cargo clippy --features catalog,parallel_ingest -- -D warnings` on - `src/catalog/ingest.rs`, `src/catalog/ingest_progress.rs`, - `src/catalog/zarr_write.rs`, and any new modules in `src/io/`. - -## Task breakdown - -Tasks are mostly independent at the file level. Ordering below is the -execution sequence (earlier tasks reduce diff size for later ones). - -### Phase A: Performance (tasks 1–6) - -**T1. Bulk pixel read in `read_image_i32`** *(src/catalog/ingest.rs)* - -Replace the byte-pair loop with a single bulk read: - -- Open `File`, `seek(SeekFrom::Start(data_offset))`, allocate - `vec![0u8; naxis1 * naxis2 * 2]`, call `read_exact(&mut buf)` once. -- Convert with `buf.chunks_exact(2).map(|c| i16::from_be_bytes([c[0], c[1]]) as i32)`. -- Keep existing `Array2::from_shape_vec` construction. -- Preserve `CatalogError::Io` and `CatalogError::Validation` mappings. - -Tests: - -- Adjust existing tests if they depend on the byte-pair path (none should). -- Add a unit test that reads a `tests/fixtures/minimal.fits` into `Array2` - and checks the shape and the first few values. - -Definition of done: `read_image_i32` issues at most O(1) syscalls beyond -`open` and `seek`, and test passes. - ---- - -**T2. Drop duplicate `/processed` zarr array** *(src/catalog/zarr_write.rs)* - -- Remove the block in `write_frame_raw` that creates `/{scan}/{frame}/processed`. -- Update the module docstring: `/raw` only. -- Update `src/schema.rs:253-254` comment to describe the zarr layout as - `///raw`; processed is produced by downstream processing, not ingest. -- Search the codebase for readers of `/processed`; none exist. If any show up, - stop and escalate (scope change). - -Tests: - -- Add a Rust test that writes one frame and asserts `/{scan}/{frame}/raw` - exists and `/{scan}/{frame}/processed` does not (using - `store.list_dir` or equivalent). - ---- - -**T3. Use Diesel `RETURNING` in ingest inserts** *(src/catalog/ingest.rs)* - -Rewrite inserts for `samples`, `scans`, `files`, and `tags` in -`ingest_beamtime_inner` to use `.returning(table::id).get_result(conn)` -instead of `execute` followed by a `SELECT`. Keep `file_tags` insert as-is -(no id needed). - -The `tags` path currently does `SELECT ... optional()? { Some => id, None => -insert + SELECT }`. Replace with `INSERT OR IGNORE` then select; or use -`upsert`. Prefer `INSERT OR IGNORE INTO tags (slug) VALUES (?) RETURNING id` -when slug is new; fall back to a single SELECT when IGNORE returned no row. - -Tests: - -- Existing ingest tests must stay green. -- Add a test that asserts one sample/scan/file row per input (no duplicates) - after re-running `ingest_beamtime` on the same minimal fixture. - ---- - -**T4. Batched catalog transactions with small-scan coalescing** *(src/catalog/ingest.rs)* - -Replace the single `conn.transaction::<(), _, _>(|conn| { ... entire loop ... })` -with batched transactions. Rules: - -- Iterate scans in `scan_order`. Maintain `current_batch: Vec<&BtIngestRow>`. -- Append every row of the current scan to `current_batch`. -- After each scan, if `current_batch.len() >= MIN_BATCH_FILES` (constant, - initially 200), commit the batch and start a new one. -- Always commit the trailing batch before zarr phase. -- For **very large scans** (>`MAX_BATCH_FILES`, initially 1000), split the - scan into chunks of `MAX_BATCH_FILES` rows and commit each as one - transaction, preserving `CatalogRow` events inside. - -Inside each transaction: - -- Insert only `samples` and `scans` that are new to the catalog (use existing - `sample_cache` / `scan_cache` maps, populate lazily). -- Insert `files`, `frames`, `tags`, `file_tags` for rows in the batch. -- Emit `IngestProgress::CatalogRow` per row (unchanged semantics). - -Reasoning: the user flagged that short scans processed quickly should not -each get their own transaction. Coalescing by file count satisfies that while -still capping uncommitted work at ~`MAX_BATCH_FILES` rows. - -Constants live in a private `mod batch_limits` inside `ingest.rs`: - -```rust -const MIN_BATCH_FILES: usize = 200; -const MAX_BATCH_FILES: usize = 1000; -``` - -Tests: - -- Add a Rust test with a synthetic beamtime of 250 rows across 10 scans - (some short, some long) that verifies: - - rows appear in `files` and `frames` after each batch commit - (use a second connection to inspect mid-ingest via a progress callback - that signals at `catalog_row`). - - final row count matches input. - ---- - -**T5. Streaming zarr phase** *(src/catalog/ingest.rs)* - -Replace the read-all-then-write loop with bounded-parallel read→write→drop: - -- Create all zarr groups (`/`, `/{scan}`, `/{scan}/{frame}`) in a preamble - on the calling thread, single-pass. Avoids concurrent group creation races - with zarrs filesystem store. -- Use `rows.par_iter().try_for_each_with(|()| -> Result<()> { ... })` on - the existing rayon pool to stream: - - `let img = read_image_i32(row)?;` - - `write_frame_raw(&zstore, row.scan_number, row.frame_number, &img)?;` - - `drop(img);` - - Emit `FileComplete` with progress counters (use `Arc>` - for `scan_done`/`global_done`). -- Remove the intermediate `Vec)>>` and its flatten. - -Peak RAM during zarr phase becomes `O(worker_threads)` images rather than -`O(total_files)`. - -Tests: - -- Update or add a test that counts `file_complete` timestamps and asserts - they are not all within 10ms of each other for a synthetic 50-file run - (exact threshold TBD during implementation). - ---- - -**T6. Per-file parallelism** *(src/catalog/ingest.rs)* - -In the headers phase, replace `scan_groups.par_iter()` with a flat -`paths_only.par_iter()` using `read_fits_headers_only_row` per path. Collect -rows into a `Vec` in any order, then sort by -`(scan_number, frame_number, file_path)` (this sort is already present). - -Rationale: uneven scan sizes cause one rayon worker to serialize a large -scan. Flat parallelism lets rayon balance work across all cores. - -T5 already parallelizes per-file for zarr, so this task is strictly about -the headers phase. - -Tests: same test as T5 (balanced parallelism). - -### Phase B: Maintainability (tasks 7–10) - -**T7. Unify FITS raw pixel buffer reader** *(src/io/)* - -Extract the single bulk-read logic behind a new helper module -`src/io/raw_pixels.rs` (feature-gated identically to current io module): - -```rust -pub fn read_bitpix16_be_bytes(path: &Path, offset: u64, nbytes: usize) - -> Result, FitsError>; -``` - -Use this from both: - -- `catalog::ingest::read_image_i32` (convert to `Array2`, no bzero). -- `io::image_mmap::load_image_pixels` (convert to `Array2` with bzero). - -`image_mmap.rs` currently uses `memmap2` with `MmapOptions::new().offset(...)`. -Keep the mmap path as one implementation behind `read_bitpix16_be_bytes` when -the platform supports it; fall back to bulk `read_exact`. Document that mmap -can behave poorly on some NAS mounts; provide `PYREF_DISABLE_MMAP=1` override. - -Do not change semantics of the i64+bzero conversion in `image_mmap`. - ---- - -**T8. `IngestPhase` enum** *(src/catalog/ingest_progress.rs, src/lib.rs)* - -Replace `IngestProgress::Phase { name: String }` with -`IngestProgress::Phase { phase: IngestPhase }` where: - -```rust -pub enum IngestPhase { Headers, Catalog, Zarr } -``` - -Add `impl IngestPhase { pub fn as_str(&self) -> &'static str { ... } }` so -Python dict conversion in `src/lib.rs` keeps emitting `"headers"` / `"catalog"` -/ `"zarr"`. No Python-side change. - -Update all call sites in `src/catalog/ingest.rs` to use the enum. - ---- - -**T9. Split `ingest_beamtime_inner` into phase functions** *(src/catalog/ingest.rs)* - -Introduce a private struct: - -```rust -struct IngestContext<'a> { - beamtime_id: i32, - zarr_path: PathBuf, - progress: Option<&'a IngestProgressSink>, - cancel: Option>, - pool: &'a rayon::ThreadPool, - scan_total_map: HashMap, -} -``` - -And split into: - -- `fn run_headers_phase(ctx: &IngestContext, paths: &[PathBuf], header_items: &[String]) -> Result>;` -- `fn run_catalog_phase(ctx: &IngestContext, conn: &mut SqliteConnection, rows: &[BtIngestRow]) -> Result<()>;` -- `fn run_zarr_phase(ctx: &IngestContext, rows: &[BtIngestRow]) -> Result<()>;` - -`ingest_beamtime_inner` becomes a thin orchestrator: discover → build ctx → -headers → catalog → zarr → return db path. - -No behavior change. Strict refactor. - ---- - -**T10. Synthetic-beamtime test harness** *(tests/fixtures.rs or Rust-side util)* - -Add a helper under `tests/` that writes N fake FITS files into a tmp dir -following the expected flat-CCD layout. Each file contains a minimal valid -BITPIX=16 image (e.g. 16x16 pixels). The helper returns the path. - -Use this from: - -- A new `tests/ingest_streaming.rs` that runs `ingest_beamtime` on ~100 - files across 10 scans and asserts streaming progress timestamps (T5). -- A new `scripts/bench_ingest.py` that generates e.g. 500 files, runs - `ingest_beamtime`, prints the same markdown table as - `scripts/profile_beamtime_ingest.py` but without NAS dependency. - -This is the local-CI-safe counterpart to the NAS profiler. - -## Dependencies between tasks - -- T5 depends on T1 (streaming wants fast per-file reads). -- T4 depends on T3 (RETURNING makes transactions cheaper to split). -- T9 should land after T1-T6 so the refactor wraps already-correct phases. -- T10 can land anytime but is most valuable after T5 (gives measurable data). - -## Risks and rollback - -- **Streaming zarr phase concurrent writes.** If zarrs `FilesystemStore` - turns out not to be thread-safe for array creation, fall back to a two-pool - design: N reader threads feeding one writer thread via a bounded channel. -- **Transaction batching overhead.** If 200-row batches cause measurable - commit overhead on real beamtimes, tune `MIN_BATCH_FILES` down. -- **RETURNING clause.** If a platform SQLite below 3.35 sneaks in through - system linking, the Diesel feature flag should still compile; runtime - errors would surface immediately in T3's test. Cargo config already - bundles `libsqlite3-sys` which is >= 3.44, so this is belt-and-suspenders. - -Every task produces one commit. Reverting individual commits gives -controlled rollback. diff --git a/notebooks/beamtime_collins_2026feb.ipynb b/notebooks/beamtime_collins_2026feb.ipynb index 446bf3e..d3bd575 100644 --- a/notebooks/beamtime_collins_2026feb.ipynb +++ b/notebooks/beamtime_collins_2026feb.ipynb @@ -62,12 +62,12 @@ "data": { "application/vnd.holoviews_exec.v0+json": "", "text/html": [ - "
\n", - "
\n", + "
\n", + "
\n", "
\n", "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/javascript": "(function(root) {\n function now() {\n return new Date();\n }\n\n const force = true;\n const version = '3.8.2'.replace('rc', '-rc.').replace('.dev', '-dev.');\n const reloading = false;\n const Bokeh = root.Bokeh;\n const BK_RE = /^https:\\/\\/cdn\\.bokeh\\.org\\/bokeh\\/(release|dev)\\/bokeh-/;\n const PN_RE = /^https:\\/\\/cdn\\.holoviz\\.org\\/panel\\/[^/]+\\/dist\\/panel/i;\n\n // Set a timeout for this load but only if we are not already initializing\n if (typeof (root._bokeh_timeout) === \"undefined\" || (force || !root._bokeh_is_initializing)) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks;\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, js_modules, js_exports, Bokeh, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n if (js_modules == null) js_modules = [];\n if (js_exports == null) js_exports = {};\n\n root._bokeh_onload_callbacks.push(callback);\n\n if (root._bokeh_is_loading > 0) {\n // Don't load bokeh if it is still initializing\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n } else if (js_urls.length === 0 && js_modules.length === 0 && Object.keys(js_exports).length === 0) {\n // There is nothing to load\n run_callbacks();\n return null;\n }\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n window._bokeh_on_load = on_load\n\n function on_error(e) {\n const src_el = e.srcElement\n console.error(\"failed to load \" + (src_el.href || src_el.src));\n }\n\n const skip = [];\n if (window.requirejs) {\n window.requirejs.config({'packages': {}, 'paths': {}, 'shim': {}});\n root._bokeh_is_loading = css_urls.length + 0;\n } else {\n root._bokeh_is_loading = css_urls.length + js_urls.length + js_modules.length + Object.keys(js_exports).length;\n }\n\n const existing_stylesheets = []\n const links = document.getElementsByTagName('link')\n for (let i = 0; i < links.length; i++) {\n const link = links[i]\n if (link.href != null) {\n existing_stylesheets.push(link.href)\n }\n }\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const escaped = encodeURI(url)\n if (existing_stylesheets.indexOf(escaped) !== -1) {\n on_load()\n continue;\n }\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error;\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n } var existing_scripts = []\n const scripts = document.getElementsByTagName('script')\n for (let i = 0; i < scripts.length; i++) {\n var script = scripts[i]\n if (script.src != null) {\n existing_scripts.push(script.src)\n }\n }\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const escaped = encodeURI(url)\n const shouldSkip = skip.includes(escaped) || existing_scripts.includes(escaped)\n const isBokehOrPanel = BK_RE.test(escaped) || PN_RE.test(escaped)\n const missingOrBroken = Bokeh == null || Bokeh.Panel == null || (Bokeh.version != version && !Bokeh.versions?.has(version)) || Bokeh.versions?.get(version)?.Panel == null;\n if (shouldSkip && !(isBokehOrPanel && missingOrBroken)) {\n if (!window.requirejs) {\n on_load();\n }\n continue;\n }\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error;\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n for (let i = 0; i < js_modules.length; i++) {\n const url = js_modules[i];\n const escaped = encodeURI(url)\n if (skip.indexOf(escaped) !== -1 || existing_scripts.indexOf(escaped) !== -1) {\n if (!window.requirejs) {\n on_load();\n }\n continue;\n }\n var element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error;\n element.async = false;\n element.src = url;\n element.type = \"module\";\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n for (const name in js_exports) {\n const url = js_exports[name];\n const escaped = encodeURI(url)\n if (skip.indexOf(escaped) >= 0 || root[name] != null) {\n if (!window.requirejs) {\n on_load();\n }\n continue;\n }\n var element = document.createElement('script');\n element.onerror = on_error;\n element.async = false;\n element.type = \"module\";\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n element.textContent = `\n import ${name} from \"${url}\"\n window.${name} = ${name}\n window._bokeh_on_load()\n `\n document.head.appendChild(element);\n }\n if (!js_urls.length && !js_modules.length) {\n on_load()\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n const js_urls = [\"https://cdn.holoviz.org/panel/1.8.5/dist/bundled/reactiveesm/es-module-shims@^1.10.0/dist/es-module-shims.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-3.8.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.8.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.8.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.8.2.min.js\", \"https://cdn.holoviz.org/panel/1.8.5/dist/panel.min.js\"];\n const js_modules = [];\n const js_exports = {};\n const css_urls = [];\n const inline_js = [ function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\nfunction(Bokeh) {} // ensure no trailing comma for IE\n ];\n\n function run_inline_js() {\n if ((root.Bokeh !== undefined) || (force === true)) {\n for (let i = 0; i < inline_js.length; i++) {\n try {\n inline_js[i].call(root, root.Bokeh);\n } catch(e) {\n if (!reloading) {\n throw e;\n }\n }\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n }\n root._bokeh_is_initializing = false;\n }\n\n function load_or_wait() {\n // Implement a backoff loop that tries to ensure we do not load multiple\n // versions of Bokeh and its dependencies at the same time.\n // In recent versions we use the root._bokeh_is_initializing flag\n // to determine whether there is an ongoing attempt to initialize\n // bokeh, however for backward compatibility we also try to ensure\n // that we do not start loading a newer (Panel>=1.0 and Bokeh>3) version\n // before older versions are fully initialized.\n if (root._bokeh_is_initializing && Date.now() > root._bokeh_timeout) {\n // If the timeout and bokeh was not successfully loaded we reset\n // everything and try loading again\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_is_initializing = false;\n root._bokeh_onload_callbacks = undefined;\n root._bokeh_is_loading = 0;\n console.log(\"Bokeh: BokehJS was loaded multiple times but one version failed to initialize.\");\n load_or_wait();\n } else if (root._bokeh_is_initializing || (typeof root._bokeh_is_initializing === \"undefined\" && root._bokeh_onload_callbacks !== undefined)) {\n setTimeout(load_or_wait, 100);\n } else {\n root._bokeh_is_initializing = true;\n root._bokeh_onload_callbacks = [];\n const bokeh_loaded = Bokeh != null && ((Bokeh.version === version && Bokeh.Panel) || (Bokeh.versions?.has(version) && Bokeh.versions.get(version)?.Panel));\n if (!reloading && !bokeh_loaded) {\n if (root.Bokeh) {\n root.Bokeh = undefined;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n }\n load_libs(css_urls, js_urls, js_modules, js_exports, Bokeh, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n if (Bokeh != undefined && !reloading) {\n const NewBokeh = root.Bokeh;\n if (Bokeh.versions === undefined) {\n Bokeh.versions = new Map();\n }\n if (NewBokeh.version !== Bokeh.version) {\n Bokeh[NewBokeh.version] = NewBokeh;\n Bokeh.versions.set(NewBokeh.version, NewBokeh);\n }\n root.Bokeh = Bokeh;\n }\n });\n }\n }\n // Give older versions of the autoload script a head-start to ensure\n // they initialize before we start loading newer version.\n setTimeout(load_or_wait, 100)\n}(window));", + "application/vnd.holoviews_load.v0+json": "" + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/javascript": "\nif ((window.PyViz === undefined) || (window.PyViz instanceof HTMLElement)) {\n window.PyViz = {comms: {}, comm_status:{}, kernels:{}, receivers: {}, plot_index: []}\n}\n\n\n function JupyterCommManager() {\n }\n\n JupyterCommManager.prototype.register_target = function(plot_id, comm_id, msg_handler) {\n if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n comm_manager.register_target(comm_id, function(comm) {\n comm.on_msg(msg_handler);\n });\n } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n window.PyViz.kernels[plot_id].registerCommTarget(comm_id, function(comm) {\n comm.onMsg = msg_handler;\n });\n } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n google.colab.kernel.comms.registerTarget(comm_id, (comm) => {\n var messages = comm.messages[Symbol.asyncIterator]();\n function processIteratorResult(result) {\n var message = result.value;\n console.log(message)\n var content = {data: message.data, comm_id};\n var buffers = []\n for (var buffer of message.buffers || []) {\n buffers.push(new DataView(buffer))\n }\n var metadata = message.metadata || {};\n var msg = {content, buffers, metadata}\n msg_handler(msg);\n return messages.next().then(processIteratorResult);\n }\n return messages.next().then(processIteratorResult);\n })\n }\n }\n\n JupyterCommManager.prototype.get_client_comm = function(plot_id, comm_id, msg_handler) {\n if (comm_id in window.PyViz.comms) {\n return window.PyViz.comms[comm_id];\n } else if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n var comm = comm_manager.new_comm(comm_id, {}, {}, {}, comm_id);\n if (msg_handler) {\n comm.on_msg(msg_handler);\n }\n } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n var comm = window.PyViz.kernels[plot_id].connectToComm(comm_id);\n comm.open();\n if (msg_handler) {\n comm.onMsg = msg_handler;\n }\n } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n var comm_promise = google.colab.kernel.comms.open(comm_id)\n comm_promise.then((comm) => {\n window.PyViz.comms[comm_id] = comm;\n if (msg_handler) {\n var messages = comm.messages[Symbol.asyncIterator]();\n function processIteratorResult(result) {\n var message = result.value;\n var content = {data: message.data};\n var metadata = message.metadata || {comm_id};\n var msg = {content, metadata}\n msg_handler(msg);\n return messages.next().then(processIteratorResult);\n }\n return messages.next().then(processIteratorResult);\n }\n })\n var sendClosure = (data, metadata, buffers, disposeOnDone) => {\n return comm_promise.then((comm) => {\n comm.send(data, metadata, buffers, disposeOnDone);\n });\n };\n var comm = {\n send: sendClosure\n };\n }\n window.PyViz.comms[comm_id] = comm;\n return comm;\n }\n window.PyViz.comm_manager = new JupyterCommManager();\n \n\n\nvar JS_MIME_TYPE = 'application/javascript';\nvar HTML_MIME_TYPE = 'text/html';\nvar EXEC_MIME_TYPE = 'application/vnd.holoviews_exec.v0+json';\nvar CLASS_NAME = 'output';\n\n/**\n * Render data to the DOM node\n */\nfunction render(props, node) {\n var div = document.createElement(\"div\");\n var script = document.createElement(\"script\");\n node.appendChild(div);\n node.appendChild(script);\n}\n\n/**\n * Handle when a new output is added\n */\nfunction handle_add_output(event, handle) {\n var output_area = handle.output_area;\n var output = handle.output;\n if ((output.data == undefined) || (!output.data.hasOwnProperty(EXEC_MIME_TYPE))) {\n return\n }\n var id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n var toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n if (id !== undefined) {\n var nchildren = toinsert.length;\n var html_node = toinsert[nchildren-1].children[0];\n html_node.innerHTML = output.data[HTML_MIME_TYPE];\n var scripts = [];\n var nodelist = html_node.querySelectorAll(\"script\");\n for (var i in nodelist) {\n if (nodelist.hasOwnProperty(i)) {\n scripts.push(nodelist[i])\n }\n }\n\n scripts.forEach( function (oldScript) {\n var newScript = document.createElement(\"script\");\n var attrs = [];\n var nodemap = oldScript.attributes;\n for (var j in nodemap) {\n if (nodemap.hasOwnProperty(j)) {\n attrs.push(nodemap[j])\n }\n }\n attrs.forEach(function(attr) { newScript.setAttribute(attr.name, attr.value) });\n newScript.appendChild(document.createTextNode(oldScript.innerHTML));\n oldScript.parentNode.replaceChild(newScript, oldScript);\n });\n if (JS_MIME_TYPE in output.data) {\n toinsert[nchildren-1].children[1].textContent = output.data[JS_MIME_TYPE];\n }\n output_area._hv_plot_id = id;\n if ((window.Bokeh !== undefined) && (id in Bokeh.index)) {\n window.PyViz.plot_index[id] = Bokeh.index[id];\n } else {\n window.PyViz.plot_index[id] = null;\n }\n } else if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n var bk_div = document.createElement(\"div\");\n bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n var script_attrs = bk_div.children[0].attributes;\n for (var i = 0; i < script_attrs.length; i++) {\n toinsert[toinsert.length - 1].childNodes[1].setAttribute(script_attrs[i].name, script_attrs[i].value);\n }\n // store reference to server id on output_area\n output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n }\n}\n\n/**\n * Handle when an output is cleared or removed\n */\nfunction handle_clear_output(event, handle) {\n var id = handle.cell.output_area._hv_plot_id;\n var server_id = handle.cell.output_area._bokeh_server_id;\n if (((id === undefined) || !(id in PyViz.plot_index)) && (server_id !== undefined)) { return; }\n var comm = window.PyViz.comm_manager.get_client_comm(\"hv-extension-comm\", \"hv-extension-comm\", function () {});\n if (server_id !== null) {\n comm.send({event_type: 'server_delete', 'id': server_id});\n return;\n } else if (comm !== null) {\n comm.send({event_type: 'delete', 'id': id});\n }\n delete PyViz.plot_index[id];\n if ((window.Bokeh !== undefined) & (id in window.Bokeh.index)) {\n var doc = window.Bokeh.index[id].model.document\n doc.clear();\n const i = window.Bokeh.documents.indexOf(doc);\n if (i > -1) {\n window.Bokeh.documents.splice(i, 1);\n }\n }\n}\n\n/**\n * Handle kernel restart event\n */\nfunction handle_kernel_cleanup(event, handle) {\n delete PyViz.comms[\"hv-extension-comm\"];\n window.PyViz.plot_index = {}\n}\n\n/**\n * Handle update_display_data messages\n */\nfunction handle_update_output(event, handle) {\n handle_clear_output(event, {cell: {output_area: handle.output_area}})\n handle_add_output(event, handle)\n}\n\nfunction register_renderer(events, OutputArea) {\n function append_mime(data, metadata, element) {\n // create a DOM node to render to\n var toinsert = this.create_output_subarea(\n metadata,\n CLASS_NAME,\n EXEC_MIME_TYPE\n );\n this.keyboard_manager.register_events(toinsert);\n // Render to node\n var props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n render(props, toinsert[0]);\n element.append(toinsert);\n return toinsert\n }\n\n events.on('output_added.OutputArea', handle_add_output);\n events.on('output_updated.OutputArea', handle_update_output);\n events.on('clear_output.CodeCell', handle_clear_output);\n events.on('delete.Cell', handle_clear_output);\n events.on('kernel_ready.Kernel', handle_kernel_cleanup);\n\n OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n safe: true,\n index: 0\n });\n}\n\nif (window.Jupyter !== undefined) {\n try {\n var events = require('base/js/events');\n var OutputArea = require('notebook/js/outputarea').OutputArea;\n if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n register_renderer(events, OutputArea);\n }\n } catch(err) {\n }\n}\n", + "application/vnd.holoviews_load.v0+json": "" + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.holoviews_exec.v0+json": "", + "text/html": [ + "
\n", + "
\n", + "
\n", + "" + ] + }, + "metadata": { + "application/vnd.holoviews_exec.v0+json": { + "id": "ec606339-d28e-409f-88fe-2416f278f1d7" + } + }, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "catalog.db: /Users/hduva/Library/Application Support/pyref/catalog.db\n" + ] + } + ], "source": [ "import os\n", "from pathlib import Path\n", @@ -33,7 +166,9 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": {}, + "outputs": [], "source": [ "bts = list_beamtimes(CATALOG)\n", "bts" @@ -41,7 +176,9 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": {}, + "outputs": [], "source": [ "# Set to one path from bts['beamtime_path'].\n", "BEAMTIME = Path(\"/path/from/list_beamtimes/column\")\n", @@ -52,7 +189,9 @@ }, { "cell_type": "code", + "execution_count": null, "metadata": {}, + "outputs": [], "source": [ "qc = naming_qc_with_db_parse_flags(view.frames, CATALOG)\n", "for name, df in qc.items():\n", @@ -64,15 +203,23 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": ".venv", "language": "python", "name": "python3" }, "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", "name": "python", - "version": "3.12.0" + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.12" } }, "nbformat": 4, "nbformat_minor": 5 -} \ No newline at end of file +} diff --git a/pyproject.toml b/pyproject.toml index 00763d5..d68aab7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -58,11 +58,17 @@ dependencies = [ "panel>=1.8.5", "tqdm>=4.67.1", "rich>=14.3.3", + "typer>=0.24.1", + "tomli-w>=1.2.0", ] +[project.scripts] +pyref = "pyref.cli.main:main" +pyref-ingest = "pyref.cli.main:main_ingest_shim" + [tool.maturin] bindings = "pyo3" -features = ["extension-module", "parallel_ingest", "zarr"] +features = ["extension-module", "parallel_ingest", "zarr", "watch"] format = ["wheel"] minimum-python-version = "3.12" module-name = "pyref" @@ -160,6 +166,23 @@ ban-relative-imports = "all" [tool.ruff.lint.flake8-type-checking] strict = true +[tool.ruff.lint.per-file-ignores] +"python/pyref/cli/**/*.py" = [ + "B008", + "B904", + "E501", + "EM101", + "EM102", + "FBT001", + "RUF005", + "SIM105", + "TC001", + "TC003", + "TRY003", + "TRY401", + "W505", +] + [tool.ruff.format] docstring-code-format = true diff --git a/python/pyref/cli/__init__.py b/python/pyref/cli/__init__.py new file mode 100644 index 0000000..4371dbb --- /dev/null +++ b/python/pyref/cli/__init__.py @@ -0,0 +1,23 @@ +""" +Typer CLI: NAS registration, beamtime describe, catalog ingest, watch daemons. +""" + +from __future__ import annotations + +import typer + +from pyref.cli import beamtime as beamtime_cli +from pyref.cli import catalog as catalog_cli +from pyref.cli import nas as nas_cli +from pyref.cli import watch as watch_cli + +app = typer.Typer( + help="pyref: beamtime catalog and incremental ingest", + no_args_is_help=True, +) +app.add_typer(nas_cli.app, name="nas") +app.add_typer(beamtime_cli.app, name="beamtime") +app.add_typer(catalog_cli.app, name="catalog") +app.add_typer(watch_cli.app, name="watch") + +__all__ = ["app"] diff --git a/python/pyref/cli/beamtime.py b/python/pyref/cli/beamtime.py new file mode 100644 index 0000000..6db9c54 --- /dev/null +++ b/python/pyref/cli/beamtime.py @@ -0,0 +1,114 @@ +""" +``pyref beamtime``: list and describe beamtimes without ingesting pixels unnecessarily. +""" + +from __future__ import annotations + +import json +import sys +from pathlib import Path + +import typer + +from pyref.cli.config import load as load_config +from pyref.cli.resolve import resolve_beamtime_path +from pyref.io.readers import beamtime_ingest_layout + +app = typer.Typer(help="Beamtime discovery and coverage") + + +@app.command("list") +def beamtime_list( + cataloged: bool = typer.Option( + False, + "--cataloged", + help="Only beamtimes whose catalog file count matches on-disk FITS count.", + ), + catalog_db: Path | None = typer.Option( + None, + "--catalog-db", + help="Override PYREF_CATALOG_DB for this command.", + ), +) -> None: + """List beamtimes recorded in the catalog (most recent first).""" + from pyref.io.catalog_path import resolve_catalog_path + from pyref.pyref import py_catalog_file_count, py_list_beamtimes + + db = catalog_db.resolve() if catalog_db is not None else resolve_catalog_path() + if not db.is_file(): + sys.stderr.write(f"error: catalog database not found: {db}\n") + raise typer.Exit(1) + rows = py_list_beamtimes(str(db)) + for path_str, _bid in rows: + p = Path(path_str) + if cataloged: + if not p.is_dir(): + continue + try: + layout = beamtime_ingest_layout(p) + except OSError: + continue + total = int(layout["total_files"]) + if total == 0: + continue + n = py_catalog_file_count(str(db), str(p.resolve())) + if n < total: + continue + typer.echo(f"{path_str}") + + +@app.command("describe") +def beamtime_describe( + name: str = typer.Argument(..., help="Beamtime folder name or absolute path."), + nas_root: Path | None = typer.Option( + None, + "--nas-root", + help="Override the configured NAS root for name resolution.", + ), + catalog_db: Path | None = typer.Option( + None, + "--catalog-db", + help="Override PYREF_CATALOG_DB.", + ), + as_json: bool = typer.Option(False, "--json", help="Emit one JSON object."), +) -> None: + """ + Print scan count, FITS on disk, cataloged count, and coverage percent. + """ + from pyref.io.catalog_path import resolve_catalog_path + from pyref.pyref import py_catalog_file_count + + cfg = load_config() + try: + bt = resolve_beamtime_path(name, nas_root=nas_root, cfg=cfg) + except FileNotFoundError as exc: + sys.stderr.write(f"error: {exc}\n") + raise typer.Exit(1) from exc + + db = catalog_db.resolve() if catalog_db is not None else resolve_catalog_path() + layout = beamtime_ingest_layout(bt) + disk_files = int(layout["total_files"]) + n_scans = len(layout["scans"]) + n_cat = 0 + if db.is_file(): + try: + n_cat = py_catalog_file_count(str(db), str(bt.resolve())) + except OSError as exc: + sys.stderr.write(f"error: catalog query failed: {exc}\n") + raise typer.Exit(2) from exc + pct = (100.0 * n_cat / disk_files) if disk_files else 0.0 + payload = { + "beamtime": str(bt.resolve()), + "scans_on_disk": n_scans, + "fits_files_on_disk": disk_files, + "fits_files_in_catalog": n_cat, + "percent_cataloged": round(pct, 3), + } + if as_json: + typer.echo(json.dumps(payload)) + else: + typer.echo(f"beamtime: {payload['beamtime']}") + typer.echo(f"scans (layout): {n_scans}") + typer.echo(f"fits on disk: {disk_files}") + typer.echo(f"fits in catalog: {n_cat}") + typer.echo(f"percent cataloged: {pct:.2f}%") diff --git a/python/pyref/cli/catalog.py b/python/pyref/cli/catalog.py new file mode 100644 index 0000000..169bc95 --- /dev/null +++ b/python/pyref/cli/catalog.py @@ -0,0 +1,165 @@ +""" +``pyref catalog``: show catalog paths and ingest beamtimes. +""" + +from __future__ import annotations + +import os +import sys +from pathlib import Path + +import typer + +from pyref.cli.config import load as load_config +from pyref.cli.resolve import ( + apply_catalog_env, + parse_scan_numbers, + resolve_beamtime_path, +) +from pyref.io.beamtime import ingest_beamtime_with_rich_progress +from pyref.io.readers import DEFAULT_HEADER_KEYS, ingest_beamtime + +app = typer.Typer(help="Global catalog and ingest") + + +@app.command("path") +def catalog_path_cmd( + catalog_db: Path | None = typer.Option( + None, + "--catalog-db", + help="Show this path instead of the resolved default.", + ), +) -> None: + """Print the active catalog database and zarr cache root.""" + from pyref.io.catalog_path import resolve_catalog_path + from pyref.pyref import py_pyref_data_dir + + db = catalog_db.resolve() if catalog_db is not None else resolve_catalog_path() + cache = os.environ.get("PYREF_CACHE_ROOT") + if cache is None: + cache = str(Path(py_pyref_data_dir()).resolve() / ".cache") + typer.echo(f"catalog_db: {db}") + typer.echo(f"cache_root: {cache}") + + +@app.command("ingest") +def catalog_ingest( + name: str = typer.Argument(..., help="Beamtime folder name or path."), + nas_root: Path | None = typer.Option( + None, + "--nas-root", + help="Override configured NAS root.", + ), + workers: int | None = typer.Option( + None, + "--workers", + help="Parallel FITS reader worker count.", + ), + resource_fraction: float | None = typer.Option( + None, + "--resource-fraction", + help="Fraction of CPUs for reader workers (0,1]; exclusive with --workers.", + ), + max_scans: int | None = typer.Option( + None, + "--max-scans", + help="Ingest only the first N scans (ascending scan number).", + ), + scans: str | None = typer.Option( + None, + "--scans", + help="Comma-separated scan numbers (e.g. 1,3,5). Exclusive with --max-scans.", + ), + header: list[str] | None = typer.Option( + None, + "--header", + help="FITS header key; repeatable. Defaults to built-in list when omitted.", + ), + catalog_db: Path | None = typer.Option( + None, + "--catalog-db", + help="Set PYREF_CATALOG_DB for this run.", + ), + cache_root: Path | None = typer.Option( + None, + "--cache-root", + help="Set PYREF_CACHE_ROOT for this run.", + ), + no_progress: bool = typer.Option( + False, + "--no-progress", + help="Disable Rich progress (CI / logs).", + ), +) -> None: + """Ingest one beamtime into the SQLite catalog and local zarr cache.""" + if workers is not None and resource_fraction is not None: + sys.stderr.write("error: use only one of --workers or --resource-fraction\n") + raise typer.Exit(1) + if max_scans is not None and scans is not None: + sys.stderr.write("error: use only one of --max-scans or --scans\n") + raise typer.Exit(1) + try: + scan_numbers = parse_scan_numbers(scans) + except ValueError as exc: + sys.stderr.write(f"error: {exc}\n") + raise typer.Exit(1) from exc + if resource_fraction is not None and not (0.0 < resource_fraction <= 1.0): + sys.stderr.write("error: --resource-fraction must be in (0, 1]\n") + raise typer.Exit(1) + + cfg = load_config() + try: + bt = resolve_beamtime_path(name, nas_root=nas_root, cfg=cfg) + except FileNotFoundError as exc: + sys.stderr.write(f"error: {exc}\n") + raise typer.Exit(1) from exc + + apply_catalog_env(catalog_db, cache_root) + keys = list(header) if header else list(DEFAULT_HEADER_KEYS) + try: + if no_progress: + out = ingest_beamtime( + bt, + keys, + incremental=True, + worker_threads=workers, + resource_fraction=resource_fraction, + max_scans=max_scans, + scan_numbers=scan_numbers, + ) + else: + out = ingest_beamtime_with_rich_progress( + bt, + keys, + worker_threads=workers, + resource_fraction=resource_fraction, + max_scans=max_scans, + scan_numbers=scan_numbers, + ) + except (OSError, RuntimeError, ValueError) as exc: + sys.stderr.write(f"error: ingest failed: {exc}\n") + raise typer.Exit(2) from exc + typer.echo(f"catalog: {out}") + + +def ingest_shim_main(argv: list[str] | None = None) -> None: + """ + ``pyref-ingest`` compatibility: map legacy ``--beamtime`` to positional argument. + """ + a = list(argv if argv is not None else sys.argv[1:]) + out: list[str] = ["catalog", "ingest"] + if "--beamtime" in a: + i = a.index("--beamtime") + try: + bt = a[i + 1] + except IndexError: + sys.stderr.write("error: --beamtime requires a value\n") + raise SystemExit(1) from None + a = a[:i] + a[i + 2 :] + out.append(bt) + elif a and not a[0].startswith("-"): + out.append(a.pop(0)) + sys.argv = [sys.argv[0], *out, *a] + from pyref.cli import app + + app() diff --git a/python/pyref/cli/config.py b/python/pyref/cli/config.py new file mode 100644 index 0000000..e0b07cc --- /dev/null +++ b/python/pyref/cli/config.py @@ -0,0 +1,75 @@ +""" +Persistent CLI configuration under the pyref data directory (``config.toml``). +""" + +from __future__ import annotations + +import tomllib +from dataclasses import dataclass +from pathlib import Path +from typing import Any + +import tomli_w + + +@dataclass +class PyrefConfig: + """Single registered NAS root and optional watcher defaults.""" + + nas_root: Path | None = None + watch_default_memory_mb: int = 16 + watch_default_debounce_ms: int = 1500 + + +def _config_path() -> Path: + from pyref.pyref import py_pyref_data_dir + + return Path(py_pyref_data_dir()).resolve() / "config.toml" + + +def load() -> PyrefConfig: + """ + Load ``config.toml`` from the pyref data directory, or return defaults. + + Returns + ------- + PyrefConfig + Parsed configuration. + """ + path = _config_path() + if not path.is_file(): + return PyrefConfig() + raw = tomllib.loads(path.read_text(encoding="utf-8")) + nas = raw.get("nas") or {} + watch = raw.get("watch") or {} + root = nas.get("root") + return PyrefConfig( + nas_root=Path(root).resolve() if isinstance(root, str) else None, + watch_default_memory_mb=int(watch.get("default_memory_mb", 16)), + watch_default_debounce_ms=int(watch.get("default_debounce_ms", 1500)), + ) + + +def save(cfg: PyrefConfig) -> None: + """ + Write ``config.toml`` atomically (tmp + replace). + + Parameters + ---------- + cfg : PyrefConfig + Configuration to persist. + """ + path = _config_path() + path.parent.mkdir(parents=True, exist_ok=True) + data: dict[str, Any] = { + "nas": {}, + "watch": { + "default_memory_mb": cfg.watch_default_memory_mb, + "default_debounce_ms": cfg.watch_default_debounce_ms, + }, + } + if cfg.nas_root is not None: + data["nas"]["root"] = str(cfg.nas_root.resolve()) + tmp = path.with_suffix(".toml.tmp") + tmp.write_text(tomli_w.dumps(data), encoding="utf-8") + tmp.replace(path) diff --git a/python/pyref/cli/daemon.py b/python/pyref/cli/daemon.py new file mode 100644 index 0000000..89b7200 --- /dev/null +++ b/python/pyref/cli/daemon.py @@ -0,0 +1,312 @@ +""" +Daemon lifecycle for ``pyref watch``: PID files, JSON index, logs, subprocess worker. +""" + +from __future__ import annotations + +import json +import logging +import os +import signal +import subprocess +import sys +import time +from dataclasses import asdict, dataclass +from datetime import UTC, datetime +from logging.handlers import RotatingFileHandler +from pathlib import Path +from typing import Any + +from pyref.cli.resolve import daemon_key + +INDEX_NAME = "index.json" + + +@dataclass +class DaemonRecord: + """One row in the daemon index file.""" + + pid: int + beamtime: str + subpaths: list[str] + started_at: str + memory_mb: int + cpu: int | None + log_file: str + + +def _daemons_dir() -> Path: + from pyref.pyref import py_pyref_data_dir + + d = Path(py_pyref_data_dir()).resolve() / "daemons" + d.mkdir(parents=True, exist_ok=True) + return d + + +def _index_path() -> Path: + return _daemons_dir() / INDEX_NAME + + +def _load_index() -> dict[str, Any]: + p = _index_path() + if not p.is_file(): + return {"daemons": {}} + return json.loads(p.read_text(encoding="utf-8")) + + +def _save_index(data: dict[str, Any]) -> None: + p = _index_path() + tmp = p.with_suffix(".json.tmp") + tmp.write_text(json.dumps(data, indent=2), encoding="utf-8") + tmp.replace(p) + + +def _update_index_record(key: str, rec: DaemonRecord | None) -> None: + data = _load_index() + dm = data.setdefault("daemons", {}) + if rec is None: + dm.pop(key, None) + else: + dm[key] = asdict(rec) + _save_index(data) + + +def list_records() -> dict[str, DaemonRecord]: + """ + Return all daemon records keyed by beamtime hash. + + Returns + ------- + dict + Mapping of digest key to :class:`DaemonRecord`. + """ + raw = _load_index().get("daemons") or {} + out: dict[str, DaemonRecord] = {} + for k, v in raw.items(): + out[k] = DaemonRecord(**v) + return out + + +def start_watch_daemon_subprocess( + beamtime: Path, + header_keys: list[str] | None, + debounce_ms: int, + subpaths: list[str], + memory_mb: int, + cpu: int | None, + workers: int, + log_file: Path | None, +) -> int: + """ + Spawn a detached worker process that runs the Rust file watcher. + + Parameters + ---------- + beamtime : pathlib.Path + Beamtime root directory. + header_keys : list of str, optional + FITS header keys; default ingest list when omitted. + debounce_ms : int + Debounce interval for filesystem events. + subpaths : list of str + Optional relative subfolders to watch; empty watches the full beamtime tree. + memory_mb : int + Best-effort RSS hint for logging; optional rlimit applied on Linux after import. + cpu : int or None + Linux: ``sched_setaffinity`` to this CPU index when set. + workers : int + Ingest worker thread count passed to each triggered ingest (typically ``1``). + log_file : pathlib.Path, optional + Log path; default ``/.log``. + + Returns + ------- + int + Worker process PID. + """ + key = daemon_key(beamtime) + ddir = _daemons_dir() + log_path = log_file if log_file is not None else ddir / f"{key}.log" + spec = { + "beamtime": str(beamtime.resolve()), + "header_keys": header_keys, + "debounce_ms": debounce_ms, + "subpaths": subpaths, + "memory_mb": memory_mb, + "cpu": cpu, + "workers": workers, + "log_file": str(log_path), + "key": key, + } + env = os.environ.copy() + env["PYREF_CLI_WATCH_SPEC"] = json.dumps(spec) + proc = subprocess.Popen( + [sys.executable, "-m", "pyref.cli.daemon"], + env=env, + stdin=subprocess.DEVNULL, + stdout=subprocess.DEVNULL, + stderr=subprocess.DEVNULL, + start_new_session=True, + ) + pid_path = ddir / f"{key}.pid" + pid_path.write_text(str(proc.pid), encoding="utf-8") + rec = DaemonRecord( + pid=proc.pid, + beamtime=str(beamtime.resolve()), + subpaths=list(subpaths), + started_at=datetime.now(UTC).isoformat(), + memory_mb=memory_mb, + cpu=cpu, + log_file=str(log_path.resolve()), + ) + _update_index_record(key, rec) + return proc.pid + + +def run_watch_daemon_from_env() -> None: + """ + Worker entry: read ``PYREF_CLI_WATCH_SPEC`` and block in ``py_run_catalog_watcher_blocking``. + + This function is only intended for the subprocess spawned by + :func:`start_watch_daemon_subprocess`. + """ + raw = os.environ.get("PYREF_CLI_WATCH_SPEC") + if not raw: + sys.stderr.write("error: PYREF_CLI_WATCH_SPEC missing\n") + raise SystemExit(2) + spec = json.loads(raw) + beamtime = Path(spec["beamtime"]) + header_keys = spec.get("header_keys") + debounce_ms = int(spec["debounce_ms"]) + subpaths = list(spec.get("subpaths") or []) + memory_mb = int(spec["memory_mb"]) + cpu = spec.get("cpu") + workers = int(spec.get("workers", 1)) + log_file = Path(spec["log_file"]) + key = spec["key"] + + log_file.parent.mkdir(parents=True, exist_ok=True) + root = logging.getLogger() + root.handlers.clear() + root.setLevel(logging.INFO) + fh = RotatingFileHandler( + log_file, + maxBytes=10 * 1024 * 1024, + backupCount=2, + encoding="utf-8", + ) + fh.setFormatter(logging.Formatter("%(asctime)s %(levelname)s %(message)s")) + root.addHandler(fh) + + try: + import resource + + if sys.platform.startswith("linux"): + lim = memory_mb * 1024 * 1024 + try: + resource.setrlimit(resource.RLIMIT_AS, (lim, lim)) + except OSError as exc: + logging.warning("rlimit AS not applied: %s", exc) + if cpu is not None: + try: + os.sched_setaffinity(0, {cpu}) + except OSError as exc: + logging.warning("sched_setaffinity not applied: %s", exc) + except Exception as exc: + logging.warning("resource tuning skipped: %s", exc) + + from pyref.pyref import CatalogWatcherCancel, py_run_catalog_watcher_blocking + + cancel = CatalogWatcherCancel() + + def handle_sig(_sig: int, _frame: Any) -> None: + cancel.cancel() + + signal.signal(signal.SIGTERM, handle_sig) + signal.signal(signal.SIGINT, handle_sig) + + os.environ["PYREF_INGEST_WORKER_THREADS"] = str(max(1, workers)) + + try: + py_run_catalog_watcher_blocking( + str(beamtime), + list(header_keys) if header_keys else [], + debounce_ms, + subpaths, + cancel, + ) + except OSError as exc: + logging.exception("watcher failed: %s", exc) + raise SystemExit(2) from exc + finally: + pid_path = _daemons_dir() / f"{key}.pid" + pid_path.unlink(missing_ok=True) + _update_index_record(key, None) + + +def stop_daemon(beamtime: Path, wait_s: float = 10.0) -> bool: + """ + Send ``SIGTERM`` to the watcher PID recorded for ``beamtime``, then ``SIGKILL`` if needed. + + Returns + ------- + bool + ``True`` if the process was signaled and exited. + """ + key = daemon_key(beamtime) + pid_path = _daemons_dir() / f"{key}.pid" + if not pid_path.is_file(): + return False + pid = int(pid_path.read_text(encoding="utf-8").strip()) + try: + os.kill(pid, signal.SIGTERM) + except ProcessLookupError: + pid_path.unlink(missing_ok=True) + _update_index_record(key, None) + return True + deadline = time.monotonic() + wait_s + while time.monotonic() < deadline: + try: + os.kill(pid, 0) + except ProcessLookupError: + pid_path.unlink(missing_ok=True) + _update_index_record(key, None) + return True + time.sleep(0.2) + try: + os.kill(pid, signal.SIGKILL) + except ProcessLookupError: + pass + pid_path.unlink(missing_ok=True) + _update_index_record(key, None) + return True + + +def tail_log(log_file: Path, n: int, follow: bool) -> None: + """ + Print the last ``n`` lines of ``log_file``; optionally wait for new lines (simple poll). + """ + if not log_file.is_file(): + sys.stderr.write(f"error: log file not found: {log_file}\n") + raise SystemExit(3) + data = log_file.read_text(encoding="utf-8", errors="replace").splitlines() + for line in data[-n:]: + sys.stdout.write(line + "\n") + if not follow: + return + pos = log_file.stat().st_size + try: + while True: + time.sleep(0.5) + with log_file.open(encoding="utf-8", errors="replace") as f: + f.seek(pos) + chunk = f.read() + if chunk: + sys.stdout.write(chunk) + pos = log_file.stat().st_size + except KeyboardInterrupt: + return + + +if __name__ == "__main__": + run_watch_daemon_from_env() diff --git a/python/pyref/cli/main.py b/python/pyref/cli/main.py new file mode 100644 index 0000000..56883e8 --- /dev/null +++ b/python/pyref/cli/main.py @@ -0,0 +1,19 @@ +""" +Console entry points registered in ``pyproject.toml``. +""" + +from __future__ import annotations + + +def main() -> None: + """Run the ``pyref`` Typer application.""" + from pyref.cli import app + + app() + + +def main_ingest_shim() -> None: + """Legacy ``pyref-ingest`` entry: map ``--beamtime`` to ``catalog ingest``.""" + from pyref.cli.catalog import ingest_shim_main + + ingest_shim_main() diff --git a/python/pyref/cli/nas.py b/python/pyref/cli/nas.py new file mode 100644 index 0000000..8d1eb02 --- /dev/null +++ b/python/pyref/cli/nas.py @@ -0,0 +1,49 @@ +""" +``pyref nas``: register the single NAS root used to resolve beamtime folder names. +""" + +from __future__ import annotations + +import sys +from pathlib import Path + +import typer + +from pyref.cli.config import load, save + +app = typer.Typer(help="Registered NAS root for beamtime name resolution") + + +@app.command("set") +def nas_set(path: Path) -> None: + """ + Persist the absolute path to the NAS (or data) root for future ``NAME`` lookups. + """ + p = path.expanduser().resolve() + if not p.is_dir(): + sys.stderr.write(f"error: not a directory: {p}\n") + raise typer.Exit(1) + cfg = load() + cfg.nas_root = p + save(cfg) + typer.echo(str(p)) + + +@app.command("show") +def nas_show() -> None: + """Print the registered NAS root and whether it exists.""" + cfg = load() + if cfg.nas_root is None: + typer.echo("(no NAS root registered)") + raise typer.Exit(0) + root = cfg.nas_root.resolve() + typer.echo(f"root: {root}") + typer.echo(f"exists: {root.is_dir()}") + + +@app.command("clear") +def nas_clear() -> None: + """Remove the stored NAS root from config.""" + cfg = load() + cfg.nas_root = None + save(cfg) diff --git a/python/pyref/cli/resolve.py b/python/pyref/cli/resolve.py new file mode 100644 index 0000000..a2243c8 --- /dev/null +++ b/python/pyref/cli/resolve.py @@ -0,0 +1,145 @@ +""" +Beamtime path resolution and environment overrides for the CLI. +""" + +from __future__ import annotations + +import os +import re +from pathlib import Path + +from pyref.cli.config import PyrefConfig, load + + +def resolve_nas_root(nas_root: Path | None, cfg: PyrefConfig | None = None) -> Path | None: + """ + Effective NAS root: explicit ``nas_root`` or configured value. + + Parameters + ---------- + nas_root : pathlib.Path, optional + Override from a flag. + cfg : PyrefConfig, optional + Loaded config; if omitted, :func:`load` is used when ``nas_root`` is None. + + Returns + ------- + pathlib.Path or None + Resolved root, or ``None`` if unset. + """ + if nas_root is not None: + return nas_root.resolve() + c = cfg if cfg is not None else load() + return c.nas_root.resolve() if c.nas_root is not None else None + + +def resolve_beamtime_path( + name_or_path: str, + *, + nas_root: Path | None = None, + cfg: PyrefConfig | None = None, +) -> Path: + """ + Resolve a beamtime directory from an existing path or a name under the NAS root. + + Parameters + ---------- + name_or_path : str + Path to a beamtime root that exists on disk, or a single folder name under the NAS root. + nas_root : pathlib.Path, optional + Override NAS root for this resolution. + cfg : PyrefConfig, optional + Config used when resolving by name. + + Returns + ------- + pathlib.Path + Canonical beamtime directory. + + Raises + ------ + FileNotFoundError + If the path does not exist or NAS root is missing for a bare name. + """ + p = Path(name_or_path).expanduser() + cand = p.resolve() + if cand.exists(): + if cand.is_dir(): + return cand + raise FileNotFoundError(f"not a directory: {cand}") + if p.is_absolute() or len(p.parts) != 1: + raise FileNotFoundError(str(cand)) + root = resolve_nas_root(nas_root, cfg) + if root is None: + raise FileNotFoundError( + "no NAS root configured; use `pyref nas set ` or `--nas-root`", + ) + out = (root / name_or_path).resolve() + if not out.is_dir(): + raise FileNotFoundError(str(out)) + return out + + +def apply_catalog_env(catalog_db: Path | None, cache_root: Path | None) -> None: + """ + Set ``PYREF_CATALOG_DB`` and ``PYREF_CACHE_ROOT`` for the current process. + + Parameters + ---------- + catalog_db : pathlib.Path, optional + Path to ``catalog.db``. + cache_root : pathlib.Path, optional + Parent of ``/beamtime.zarr`` trees. + """ + if catalog_db is not None: + os.environ["PYREF_CATALOG_DB"] = str(catalog_db.resolve()) + if cache_root is not None: + os.environ["PYREF_CACHE_ROOT"] = str(cache_root.resolve()) + + +def parse_scan_numbers(spec: str | None) -> list[int] | None: + """ + Parse a comma-separated list of scan numbers. + + Parameters + ---------- + spec : str, optional + For example ``"1,3,5"``. + + Returns + ------- + list of int or None + Parsed list, or ``None`` if ``spec`` is None/empty. + """ + if spec is None or not spec.strip(): + return None + parts = [p.strip() for p in spec.split(",") if p.strip()] + if not parts: + return None + out: list[int] = [] + for p in parts: + if not re.fullmatch(r"-?\d+", p): + msg = f"invalid scan number token: {p!r}" + raise ValueError(msg) + out.append(int(p)) + return out + + +def daemon_key(beamtime: Path) -> str: + """ + Stable id for daemon pid/log files from the canonical beamtime path. + + Parameters + ---------- + beamtime : pathlib.Path + Beamtime root directory. + + Returns + ------- + str + Hex digest string. + """ + import hashlib + + s = str(beamtime.resolve()) + return hashlib.sha256(s.encode()).hexdigest() diff --git a/python/pyref/cli/watch.py b/python/pyref/cli/watch.py new file mode 100644 index 0000000..d35efe6 --- /dev/null +++ b/python/pyref/cli/watch.py @@ -0,0 +1,176 @@ +""" +``pyref watch``: long-running file watcher daemon for incremental ingest. +""" + +from __future__ import annotations + +import sys +from pathlib import Path + +import typer + +from pyref.cli.config import load as load_config +from pyref.cli.daemon import ( + list_records, + start_watch_daemon_subprocess, + stop_daemon, + tail_log, +) +from pyref.cli.resolve import daemon_key, resolve_beamtime_path +from pyref.io.readers import DEFAULT_HEADER_KEYS + +app = typer.Typer(help="Watch beamtime folders and ingest new FITS files") + + +@app.command("start") +def watch_start( + name: str = typer.Argument(..., help="Beamtime folder name or path."), + nas_root: Path | None = typer.Option(None, "--nas-root", help="Override NAS root."), + subpath: list[str] = typer.Option( + [], + "--subpath", + help="Relative subfolder to watch (repeatable). Default: full beamtime tree.", + ), + debounce_ms: int = typer.Option(1500, "--debounce-ms", help="Debounce interval in ms."), + memory_mb: int = typer.Option(16, "--memory-mb", help="Soft memory budget (see docs)."), + cpu: int | None = typer.Option(None, "--cpu", help="Linux: pin worker to this CPU id."), + log_file: Path | None = typer.Option(None, "--log-file", help="Log file path."), + workers: int = typer.Option(1, "--workers", help="Ingest worker threads per triggered run."), + foreground: bool = typer.Option( + False, + "--foreground", + help="Run in the foreground (no subprocess).", + ), + header: list[str] | None = typer.Option( + None, + "--header", + help="FITS header key; repeatable.", + ), +) -> None: + """Start a watcher daemon for one beamtime.""" + cfg = load_config() + try: + bt = resolve_beamtime_path(name, nas_root=nas_root, cfg=cfg) + except FileNotFoundError as exc: + sys.stderr.write(f"error: {exc}\n") + raise typer.Exit(1) from exc + keys = list(header) if header else list(DEFAULT_HEADER_KEYS) + if foreground: + import os + + os.environ["PYREF_INGEST_WORKER_THREADS"] = str(max(1, workers)) + from pyref.pyref import CatalogWatcherCancel, py_run_catalog_watcher_blocking + + cancel = CatalogWatcherCancel() + + def handle_sig(_sig: int, _frame: object) -> None: + cancel.cancel() + + import signal + + signal.signal(signal.SIGTERM, handle_sig) + signal.signal(signal.SIGINT, handle_sig) + try: + py_run_catalog_watcher_blocking( + str(bt.resolve()), + keys, + debounce_ms, + list(subpath), + cancel, + ) + except OSError as exc: + sys.stderr.write(f"error: watcher failed: {exc}\n") + raise typer.Exit(3) from exc + return + pid = start_watch_daemon_subprocess( + bt, + keys, + debounce_ms, + list(subpath), + memory_mb, + cpu, + workers, + log_file, + ) + typer.echo(str(pid)) + + +@app.command("stop") +def watch_stop( + name: str = typer.Argument(..., help="Beamtime folder name or path."), + nas_root: Path | None = typer.Option(None, "--nas-root"), +) -> None: + """Stop the watcher for this beamtime.""" + cfg = load_config() + try: + bt = resolve_beamtime_path(name, nas_root=nas_root, cfg=cfg) + except FileNotFoundError as exc: + sys.stderr.write(f"error: {exc}\n") + raise typer.Exit(1) from exc + stop_daemon(bt) + + +@app.command("status") +def watch_status( + name: str | None = typer.Argument( + None, + help="Optional beamtime; when omitted, list all recorded daemons.", + ), + nas_root: Path | None = typer.Option(None, "--nas-root"), +) -> None: + """Show watcher PID and metadata.""" + recs = list_records() + if name is None: + for _k, r in sorted(recs.items(), key=lambda x: x[1].started_at, reverse=True): + typer.echo( + f"pid={r.pid} beamtime={r.beamtime} subpaths={r.subpaths} " + f"started={r.started_at} log={r.log_file}", + ) + return + cfg = load_config() + try: + bt = resolve_beamtime_path(name, nas_root=nas_root, cfg=cfg) + except FileNotFoundError as exc: + sys.stderr.write(f"error: {exc}\n") + raise typer.Exit(1) from exc + key = daemon_key(bt) + r = recs.get(key) + if r is None: + typer.echo("(no daemon record)") + return + typer.echo(f"pid={r.pid} beamtime={r.beamtime} log={r.log_file}") + + +@app.command("logs") +def watch_logs( + name: str = typer.Argument(..., help="Beamtime folder name or path."), + nas_root: Path | None = typer.Option(None, "--nas-root"), + tail: int = typer.Option(80, "--tail", "-n", help="Last N lines."), + follow: bool = typer.Option(False, "--follow", "-f"), +) -> None: + """Print watcher log output.""" + cfg = load_config() + try: + bt = resolve_beamtime_path(name, nas_root=nas_root, cfg=cfg) + except FileNotFoundError as exc: + sys.stderr.write(f"error: {exc}\n") + raise typer.Exit(1) from exc + key = daemon_key(bt) + r = list_records().get(key) + log_path = Path(r.log_file) if r is not None else Path() + if r is None: + from pyref.pyref import py_pyref_data_dir + + log_path = Path(py_pyref_data_dir()).resolve() / "daemons" / f"{key}.log" + tail_log(log_path, tail, follow) + + +@app.command("list") +def watch_list() -> None: + """List recorded watcher processes (same as ``watch status`` with no beamtime).""" + recs = list_records() + for _k, r in sorted(recs.items(), key=lambda x: x[1].started_at, reverse=True): + typer.echo( + f"pid={r.pid} beamtime={r.beamtime} subpaths={r.subpaths} " + f"started={r.started_at} log={r.log_file}", + ) diff --git a/python/pyref/io/__init__.py b/python/pyref/io/__init__.py index 5955006..7af1ffa 100644 --- a/python/pyref/io/__init__.py +++ b/python/pyref/io/__init__.py @@ -47,6 +47,7 @@ BeamtimeCatalogView, BeamtimeEntriesView, beamtime_entries, + ingest_beamtime_with_rich_progress, list_beamtimes, naming_qc_from_frames, naming_qc_with_db_parse_flags, @@ -97,6 +98,7 @@ "get_image_filtered_edges", "get_overrides", "ingest_beamtime", + "ingest_beamtime_with_rich_progress", "list_beamtimes", "naming_qc_from_frames", "naming_qc_with_db_parse_flags", diff --git a/python/pyref/io/beamtime.py b/python/pyref/io/beamtime.py index 4bed73a..ee43ed8 100644 --- a/python/pyref/io/beamtime.py +++ b/python/pyref/io/beamtime.py @@ -38,13 +38,71 @@ def _rich_console_for_progress(): return Console() -def _ingest_beamtime_rich( - beamtime_path: Path, - header_items: list[str] | None, +def _filter_ingest_layout_for_progress( + layout: dict[str, Any], *, - worker_threads: int | None, - resource_fraction: float | None, + max_scans: int | None, + scan_numbers: list[int] | None, +) -> dict[str, Any]: + scans_raw = list(layout.get("scans") or []) + if scan_numbers is not None: + want = list(scan_numbers) + by_sn = {int(s["scan_number"]): s for s in scans_raw} + scans = [by_sn[n] for n in want if n in by_sn] + total_files = sum(int(s["files"]) for s in scans) + return {"scans": scans, "total_files": total_files} + if max_scans is not None: + ordered = sorted(scans_raw, key=lambda s: int(s["scan_number"])) + scans = ordered[: int(max_scans)] + total_files = sum(int(s["files"]) for s in scans) + return {"scans": scans, "total_files": total_files} + return dict(layout) + + +def ingest_beamtime_with_rich_progress( + beamtime_path: FilePath, + header_items: list[str] | None = None, + *, + worker_threads: int | None = None, + resource_fraction: float | None = None, + max_scans: int | None = None, + scan_numbers: list[int] | None = None, ) -> Path: + """ + Ingest a beamtime into the global catalog with a Rich progress display. + + Wraps :func:`pyref.io.readers.ingest_beamtime` with a pre-built Rich + :class:`rich.progress.Progress` display sized from + :func:`pyref.io.readers.beamtime_ingest_layout`: one task per scan plus a main + ``ingest`` task. Every task total is ``2 * file_count`` so bars advance on each + ``catalog_row`` (SQLite insert) and each ``file_complete`` (zarr write). The main + task description updates as phases transition (``headers`` -> ``catalog`` -> + ``zarr``). The progress display is ``transient=True`` and clears after completion. + + Parameters + ---------- + beamtime_path : str or pathlib.Path + Root directory of the beamtime (ALS layout with ``CCD`` or ``Axis Photonique``). + header_items : list of str, optional + FITS header keys to capture; defaults to + :data:`pyref.io.readers.DEFAULT_HEADER_KEYS` when omitted. + worker_threads : int, optional + Parallel FITS reader worker count. Mutually exclusive with + ``resource_fraction``. + resource_fraction : float, optional + Fraction of :func:`os.cpu_count` used for reader workers, in ``(0, 1]``. + Mutually exclusive with ``worker_threads``. + max_scans : int, optional + Ingest only the first ``max_scans`` scan groups (ascending scan number). + Mutually exclusive with ``scan_numbers``. + scan_numbers : list of int, optional + Ingest only these scan numbers. Mutually exclusive with ``max_scans``. + + Returns + ------- + pathlib.Path + Absolute path to the global ``catalog.db`` written by ingest. + """ from rich.progress import ( BarColumn, MofNCompleteColumn, @@ -56,7 +114,13 @@ def _ingest_beamtime_rich( TimeRemainingColumn, ) - layout = beamtime_ingest_layout(beamtime_path) + bt = Path(beamtime_path).resolve() + layout = beamtime_ingest_layout(bt) + layout = _filter_ingest_layout_for_progress( + layout, + max_scans=max_scans, + scan_numbers=scan_numbers, + ) scans = layout.get("scans") or [] total_files = int(layout["total_files"]) console = _rich_console_for_progress() @@ -113,12 +177,14 @@ def on_progress(d: Mapping[str, Any]) -> None: progress.update(tid, advance=1) return ingest_beamtime( - beamtime_path, + bt, header_items, incremental=True, worker_threads=worker_threads, resource_fraction=resource_fraction, progress_callback=on_progress, + max_scans=max_scans, + scan_numbers=scan_numbers, ) @@ -381,7 +447,7 @@ def read_beamtime( progress_callback=progress_callback, ) elif show_progress: - _ingest_beamtime_rich( + ingest_beamtime_with_rich_progress( bt, header_items, worker_threads=worker_threads, diff --git a/python/pyref/io/ingest_cli.py b/python/pyref/io/ingest_cli.py new file mode 100644 index 0000000..685c90f --- /dev/null +++ b/python/pyref/io/ingest_cli.py @@ -0,0 +1,9 @@ +""" +Legacy entry point for ``pyref-ingest``; delegates to :mod:`pyref.cli`. +""" + +from __future__ import annotations + +from pyref.cli.main import main_ingest_shim as main + +__all__ = ["main"] diff --git a/python/pyref/io/readers.py b/python/pyref/io/readers.py index fe663d9..51284f9 100644 --- a/python/pyref/io/readers.py +++ b/python/pyref/io/readers.py @@ -248,6 +248,8 @@ def ingest_beamtime( worker_threads: int | None = None, resource_fraction: float | None = None, progress_callback: Callable[[Mapping[str, Any]], None] | None = None, + max_scans: int | None = None, + scan_numbers: list[int] | None = None, ) -> Path: """ Ingest a beamtime directory into the global catalog and local zarr cache. @@ -283,6 +285,12 @@ def ingest_beamtime( ``catalog_row``, one per ``file_complete``) and call ``update(..., advance=1)`` for both event types. Handle ``phase`` events so the description updates during long ``headers`` work before ``catalog_row`` events begin. + max_scans : int, optional + Ingest only the first ``max_scans`` scan groups in ascending scan-number order. + Mutually exclusive with ``scan_numbers``. + scan_numbers : list of int, optional + Ingest only these stem-derived scan numbers, in the given order. + Mutually exclusive with ``max_scans``. Returns ------- @@ -299,6 +307,8 @@ def ingest_beamtime( worker_threads, resource_fraction, progress_callback, + max_scans, + scan_numbers, ) return Path(out) diff --git a/src/bin/tui/app.rs b/src/bin/tui/app.rs index 45e9a7c..2cb81e1 100644 --- a/src/bin/tui/app.rs +++ b/src/bin/tui/app.rs @@ -3379,6 +3379,7 @@ impl App { true, // incremental Some(progress_tx), parallelism, + pyref::catalog::IngestSelection::default(), Some(cancel_clone), ); let _ = done_tx.send(result.map(|_| ()).map_err(|e| e.to_string())); diff --git a/src/catalog/ingest.rs b/src/catalog/ingest.rs index ad3ae8a..9c35b8f 100644 --- a/src/catalog/ingest.rs +++ b/src/catalog/ingest.rs @@ -43,6 +43,70 @@ use super::parallelism::IngestParallelism; use super::zarr_write::{open_zarr_store, write_frame_raw}; use super::{db, paths, CatalogError, Result}; +/// Optional subset of scans to ingest (disk order is ascending scan number; explicit +/// [`scan_numbers`](Self::scan_numbers) preserves caller order). +#[derive(Debug, Clone, Default, PartialEq, Eq)] +pub struct IngestSelection { + pub max_scans: Option, + pub scan_numbers: Option>, +} + +fn filter_paths_by_selection( + paths_only: Vec, + selection: &IngestSelection, +) -> Result<(Vec, BeamtimeIngestLayout)> { + let (_, scan_groups) = layout_and_groups_from_paths(&paths_only); + if selection.max_scans.is_some() && selection.scan_numbers.is_some() { + return Err(CatalogError::Validation( + "ingest selection: use only one of max_scans or scan_numbers".into(), + )); + } + let selected_groups: Vec<(i32, Vec)> = if let Some(ref wanted) = selection.scan_numbers + { + if wanted.is_empty() { + return Err(CatalogError::Validation( + "scan_numbers must not be empty when set".into(), + )); + } + let map: HashMap> = scan_groups.iter().cloned().collect(); + let mut out = Vec::with_capacity(wanted.len()); + for &sn in wanted { + match map.get(&sn) { + Some(paths) => out.push((sn, paths.clone())), + None => { + return Err(CatalogError::Validation(format!( + "scan_number {sn} not found under beamtime" + ))); + } + } + } + out + } else if let Some(n) = selection.max_scans { + if n == 0 { + return Err(CatalogError::Validation( + "max_scans must be at least 1 when set".into(), + )); + } + scan_groups.into_iter().take(n as usize).collect() + } else { + scan_groups + }; + + let filtered_paths: Vec = selected_groups + .iter() + .flat_map(|(_, ps)| ps.iter().cloned()) + .collect(); + + if filtered_paths.is_empty() { + return Err(CatalogError::Validation( + "ingest selection produced no FITS paths".into(), + )); + } + + let (layout, _) = layout_and_groups_from_paths(&filtered_paths); + Ok((filtered_paths, layout)) +} + /// Shared per-ingest state passed through the three phase functions. /// /// Borrows caller-owned `progress`, `cancel`, and `pool`. Owns the per-scan @@ -553,6 +617,7 @@ pub fn ingest_beamtime( header_items: &[String], incremental: bool, progress_tx: Option>, + selection: IngestSelection, ) -> Result { let progress = progress_tx.map(IngestProgressSink::from_channel); ingest_beamtime_inner( @@ -561,6 +626,7 @@ pub fn ingest_beamtime( incremental, progress, IngestParallelism::default(), + selection, None, ) } @@ -572,6 +638,7 @@ pub fn ingest_beamtime_parallel( incremental: bool, progress_tx: Option>, parallelism: IngestParallelism, + selection: IngestSelection, ) -> Result { let progress = progress_tx.map(IngestProgressSink::from_channel); ingest_beamtime_inner( @@ -580,6 +647,7 @@ pub fn ingest_beamtime_parallel( incremental, progress, parallelism, + selection, None, ) } @@ -592,6 +660,7 @@ pub fn ingest_beamtime_with_progress_sink( incremental: bool, progress: Option, parallelism: IngestParallelism, + selection: IngestSelection, ) -> Result { ingest_beamtime_inner( beamtime_dir, @@ -599,11 +668,13 @@ pub fn ingest_beamtime_with_progress_sink( incremental, progress, parallelism, + selection, None, ) } /// Ingest with optional data-root / experimentalist context (accepted for API compatibility). +#[allow(clippy::too_many_arguments)] pub fn ingest_beamtime_with_context( beamtime_dir: &Path, _data_root: Option<&Path>, @@ -612,6 +683,7 @@ pub fn ingest_beamtime_with_context( incremental: bool, progress_tx: Option>, parallelism: IngestParallelism, + selection: IngestSelection, cancel: Option>, ) -> Result { if cancel @@ -628,11 +700,13 @@ pub fn ingest_beamtime_with_context( incremental, progress, parallelism, + selection, cancel, ) } #[cfg(feature = "parallel_ingest")] +#[allow(clippy::too_many_arguments)] pub fn ingest_beamtime_pipelined_with_context( beamtime_dir: &Path, data_root: Option<&Path>, @@ -641,6 +715,7 @@ pub fn ingest_beamtime_pipelined_with_context( incremental: bool, progress_tx: Option>, parallelism: IngestParallelism, + selection: IngestSelection, cancel: Option>, ) -> Result { ingest_beamtime_with_context( @@ -651,6 +726,7 @@ pub fn ingest_beamtime_pipelined_with_context( incremental, progress_tx, parallelism, + selection, cancel, ) } @@ -662,7 +738,13 @@ pub fn ingest_beamtime_pipelined( incremental: bool, progress_tx: Option>, ) -> Result { - ingest_beamtime(beamtime_dir, header_items, incremental, progress_tx) + ingest_beamtime( + beamtime_dir, + header_items, + incremental, + progress_tx, + IngestSelection::default(), + ) } fn ingest_beamtime_inner( @@ -671,6 +753,7 @@ fn ingest_beamtime_inner( incremental: bool, progress: Option, parallelism: IngestParallelism, + selection: IngestSelection, cancel: Option>, ) -> Result { let parallelism = IngestParallelism::from_options_or_env( @@ -727,7 +810,7 @@ fn ingest_beamtime_inner( } let paths_only: Vec = discovered.iter().map(|(p, _)| p.clone()).collect(); - let (layout_summary, _scan_groups) = layout_and_groups_from_paths(&paths_only); + let (paths_only, layout_summary) = filter_paths_by_selection(paths_only, &selection)?; if let Some(ref sink) = progress { sink.emit(IngestProgress::Layout { total_files: layout_summary.total_files as u32, @@ -969,8 +1052,14 @@ mod tests { .map(|s| (*s).to_string()) .collect(); - let db_path = ingest_beamtime(&beamtime_dir, &header_items, false, None) - .expect("batched ingest should succeed"); + let db_path = ingest_beamtime( + &beamtime_dir, + &header_items, + false, + None, + IngestSelection::default(), + ) + .expect("batched ingest should succeed"); let counts = count_rows(&db_path).expect("count rows after ingest"); let mut conn = db::establish_connection(&db_path).expect("open catalog db"); let frame_count: i64 = frames::table @@ -1011,12 +1100,24 @@ mod tests { .map(|s| (*s).to_string()) .collect(); - let db_path1 = ingest_beamtime(&beamtime_dir, &header_items, false, None) - .expect("first ingest run should succeed"); + let db_path1 = ingest_beamtime( + &beamtime_dir, + &header_items, + false, + None, + IngestSelection::default(), + ) + .expect("first ingest run should succeed"); let counts_1 = count_rows(&db_path1).expect("count rows after run 1"); - let db_path2 = ingest_beamtime(&beamtime_dir, &header_items, false, None) - .expect("second ingest run should succeed"); + let db_path2 = ingest_beamtime( + &beamtime_dir, + &header_items, + false, + None, + IngestSelection::default(), + ) + .expect("second ingest run should succeed"); let counts_2 = count_rows(&db_path2).expect("count rows after run 2"); assert_eq!(db_path1, db_path2, "catalog path should be deterministic"); @@ -1053,8 +1154,14 @@ mod tests { .map(|s| (*s).to_string()) .collect(); - let db_path = ingest_beamtime(&beamtime_dir, &header_items, false, None) - .expect("streaming zarr ingest should succeed"); + let db_path = ingest_beamtime( + &beamtime_dir, + &header_items, + false, + None, + IngestSelection::default(), + ) + .expect("streaming zarr ingest should succeed"); let zarr_root = paths::beamtime_zarr_path(&beamtime_dir).expect("resolve beamtime zarr path"); diff --git a/src/catalog/mod.rs b/src/catalog/mod.rs index 9623b5e..047e95d 100644 --- a/src/catalog/mod.rs +++ b/src/catalog/mod.rs @@ -28,7 +28,8 @@ pub use explorer_query::{ }; pub use ingest::{ beamtime_ingest_layout, ingest_beamtime, ingest_beamtime_parallel, - ingest_beamtime_with_context, ingest_beamtime_with_progress_sink, DEFAULT_INGEST_HEADER_ITEMS, + ingest_beamtime_with_context, ingest_beamtime_with_progress_sink, IngestSelection, + DEFAULT_INGEST_HEADER_ITEMS, }; #[cfg(feature = "parallel_ingest")] pub use ingest::{ingest_beamtime_pipelined, ingest_beamtime_pipelined_with_context}; @@ -48,7 +49,9 @@ pub use reflectivity_profile::{ }; #[cfg(feature = "watch")] -pub use watch::{run_catalog_watcher, WatchHandle, DEFAULT_DEBOUNCE_MS}; +pub use watch::{ + run_catalog_watcher, run_catalog_watcher_blocking, WatchHandle, DEFAULT_DEBOUNCE_MS, +}; use diesel::sqlite::SqliteConnection; use std::path::{Path, PathBuf}; diff --git a/src/catalog/watch.rs b/src/catalog/watch.rs index 3effb7d..1a47527 100644 --- a/src/catalog/watch.rs +++ b/src/catalog/watch.rs @@ -1,9 +1,13 @@ #![cfg(feature = "watch")] use crate::catalog::ingest_beamtime; +use crate::catalog::CatalogError; +use crate::catalog::IngestSelection; use notify_debouncer_mini::{new_debouncer, DebounceEventResult}; -use std::path::Path; +use std::path::{Path, PathBuf}; +use std::sync::atomic::{AtomicBool, Ordering}; use std::sync::mpsc; +use std::sync::Arc; use std::thread; use std::time::Duration; @@ -95,7 +99,13 @@ pub fn run_catalog_watcher( if let Some(ref f) = on_start { f(); } - let _ = ingest_beamtime(&beamtime_dir, &keys, true, None); + let _ = ingest_beamtime( + &beamtime_dir, + &keys, + true, + None, + crate::catalog::IngestSelection::default(), + ); if let Some(ref f) = on_end { f(); } @@ -109,3 +119,106 @@ pub fn run_catalog_watcher( stop_tx: Some(stop_tx), }) } + +pub fn run_catalog_watcher_blocking( + beamtime_dir: &Path, + header_items: &[String], + debounce_ms: u64, + subpaths: &[PathBuf], + cancel: Arc, +) -> Result<(), CatalogError> { + if !beamtime_dir.is_dir() { + return Err(CatalogError::Validation(format!( + "beamtime_dir is not a directory: {}", + beamtime_dir.display() + ))); + } + if cancel.load(Ordering::Relaxed) { + return Ok(()); + } + + let beamtime_dir = beamtime_dir.canonicalize().map_err(CatalogError::Io)?; + let watch_roots: Vec = if subpaths.is_empty() { + vec![beamtime_dir.clone()] + } else { + let mut v = Vec::with_capacity(subpaths.len()); + for rel in subpaths { + let p = if rel.is_absolute() { + rel.clone() + } else { + beamtime_dir.join(rel) + }; + let p = p.canonicalize().map_err(CatalogError::Io)?; + if !p.starts_with(&beamtime_dir) { + return Err(CatalogError::Validation(format!( + "watch subpath escapes beamtime root: {}", + p.display() + ))); + } + if !p.is_dir() { + return Err(CatalogError::Validation(format!( + "watch path is not a directory: {}", + p.display() + ))); + } + v.push(p); + } + v + }; + + let debounce = if debounce_ms == 0 { + DEFAULT_DEBOUNCE_MS + } else { + debounce_ms.max(100) + }; + + let keys: Vec = if header_items.is_empty() { + DEFAULT_HEADER_KEYS + .iter() + .map(|s| (*s).to_string()) + .collect() + } else { + header_items.to_vec() + }; + + let (event_tx, event_rx) = mpsc::channel(); + let mut debouncer = new_debouncer( + Duration::from_millis(debounce), + move |res: DebounceEventResult| { + if let Ok(events) = res { + let has_fits = events.iter().any(|e| { + e.path + .extension() + .map(|e| e.eq_ignore_ascii_case("fits")) + .unwrap_or(false) + }); + if has_fits { + let _ = event_tx.send(()); + } + } + }, + ) + .map_err(|e| CatalogError::Validation(format!("file watcher debouncer: {e}")))?; + + for root in &watch_roots { + debouncer + .watcher() + .watch( + root, + notify_debouncer_mini::notify::RecursiveMode::Recursive, + ) + .map_err(|e| CatalogError::Validation(format!("watch {}: {e}", root.display())))?; + } + + while !cancel.load(Ordering::Relaxed) { + match event_rx.recv_timeout(Duration::from_millis(200)) { + Ok(()) => { + let _ = + ingest_beamtime(&beamtime_dir, &keys, true, None, IngestSelection::default()); + } + Err(mpsc::RecvTimeoutError::Timeout) => {} + Err(mpsc::RecvTimeoutError::Disconnected) => break, + } + } + Ok(()) +} diff --git a/src/lib.rs b/src/lib.rs index 1776c7f..03ef363 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -48,10 +48,11 @@ mod extension { #[cfg(feature = "catalog")] use crate::catalog::{ - beamtime_ingest_layout, classify_scan_type, get_overrides, + beamtime_ingest_layout, catalog_file_count, classify_scan_type, get_overrides, ingest_beamtime_with_progress_sink, list_beamtime_entries_v2, list_beamtimes_from_catalog, paths, scan_from_catalog, scan_from_catalog_for_beamtime, set_override, CatalogFilter, - IngestParallelism, IngestProgress, IngestProgressSink, ReflectivityScanType, + IngestParallelism, IngestProgress, IngestProgressSink, IngestSelection, + ReflectivityScanType, }; #[global_allocator] @@ -349,6 +350,43 @@ mod extension { } } + #[cfg(feature = "catalog")] + #[pyfunction] + #[pyo3(name = "py_pyref_data_dir")] + pub fn py_pyref_data_dir() -> PyResult { + match paths::pyref_data_dir() { + Ok(p) => Ok(p.to_string_lossy().to_string()), + Err(e) => Err(PyErr::new::( + e.to_string(), + )), + } + } + + #[cfg(feature = "catalog")] + #[pyfunction] + #[pyo3(name = "py_catalog_file_count")] + #[pyo3( + signature = (db_path=None, beamtime_path=None), + text_signature = "(db_path=None, beamtime_path=None)" + )] + pub fn py_catalog_file_count( + db_path: Option<&str>, + beamtime_path: Option<&str>, + ) -> PyResult { + let db = match db_path { + Some(p) => std::path::PathBuf::from(p), + None => paths::default_catalog_db_path() + .map_err(|e| PyErr::new::(e.to_string()))?, + }; + let beam = beamtime_path.map(std::path::Path::new); + match catalog_file_count(&db, beam) { + Ok(n) => Ok(n), + Err(e) => Err(PyErr::new::( + e.to_string(), + )), + } + } + #[cfg(feature = "catalog")] fn ingest_progress_to_pydict<'py>( py: Python<'py>, @@ -432,9 +470,10 @@ mod extension { #[cfg(feature = "catalog")] #[pyfunction] #[pyo3(name = "py_ingest_beamtime")] + #[allow(clippy::too_many_arguments)] #[pyo3( - signature = (beamtime_path, header_items, incremental=true, worker_threads=None, resource_fraction=None, progress_callback=None), - text_signature = "(beamtime_path, header_items, incremental=True, worker_threads=None, resource_fraction=None, progress_callback=None)" + signature = (beamtime_path, header_items, incremental=true, worker_threads=None, resource_fraction=None, progress_callback=None, max_scans=None, scan_numbers=None), + text_signature = "(beamtime_path, header_items, incremental=True, worker_threads=None, resource_fraction=None, progress_callback=None, max_scans=None, scan_numbers=None)" )] pub fn py_ingest_beamtime( py: Python<'_>, @@ -444,12 +483,18 @@ mod extension { worker_threads: Option, resource_fraction: Option, progress_callback: Option>, + max_scans: Option, + scan_numbers: Option>, ) -> PyResult { let path = std::path::Path::new(beamtime_path); let parallelism = IngestParallelism { worker_threads, resource_fraction, }; + let selection = IngestSelection { + max_scans, + scan_numbers, + }; let progress = progress_callback.map(|cb| { IngestProgressSink::from_callback(move |ev| { Python::with_gil(|py| { @@ -467,6 +512,7 @@ mod extension { incremental, progress, parallelism, + selection, ) }); match result { @@ -652,6 +698,61 @@ mod extension { )) } + #[cfg(all(feature = "catalog", feature = "watch"))] + #[pyclass(name = "CatalogWatcherCancel")] + pub struct CatalogWatcherCancel { + inner: std::sync::Arc, + } + + #[cfg(all(feature = "catalog", feature = "watch"))] + #[pymethods] + impl CatalogWatcherCancel { + #[new] + fn new() -> Self { + Self { + inner: std::sync::Arc::new(std::sync::atomic::AtomicBool::new(false)), + } + } + + fn cancel(&self) { + self.inner.store(true, std::sync::atomic::Ordering::Relaxed); + } + } + + #[cfg(all(feature = "catalog", feature = "watch"))] + #[pyfunction] + #[pyo3(name = "py_run_catalog_watcher_blocking")] + #[pyo3( + signature = (beamtime_path, header_items, debounce_ms, subpaths, cancel), + text_signature = "(beamtime_path, header_items, debounce_ms, subpaths, cancel)" + )] + pub fn py_run_catalog_watcher_blocking( + py: Python<'_>, + beamtime_path: &str, + header_items: Vec, + debounce_ms: u64, + subpaths: Vec, + cancel: PyRef, + ) -> PyResult<()> { + use std::path::PathBuf; + let flag = std::sync::Arc::clone(&cancel.inner); + let sub: Vec = subpaths.into_iter().map(PathBuf::from).collect(); + let path = std::path::Path::new(beamtime_path).to_path_buf(); + py.allow_threads(|| { + crate::catalog::run_catalog_watcher_blocking( + &path, + &header_items, + debounce_ms, + &sub, + flag, + ) + }) + .map_err(|e: crate::catalog::CatalogError| { + PyErr::new::(e.to_string()) + })?; + Ok(()) + } + #[pymodule] #[pyo3(name = "pyref")] pub fn pyref(m: &Bound<'_, PyModule>) -> PyResult<()> { @@ -672,6 +773,8 @@ mod extension { #[cfg(feature = "catalog")] { m.add_function(pyo3::wrap_pyfunction!(py_default_catalog_db_path, m)?)?; + m.add_function(pyo3::wrap_pyfunction!(py_pyref_data_dir, m)?)?; + m.add_function(pyo3::wrap_pyfunction!(py_catalog_file_count, m)?)?; m.add_function(pyo3::wrap_pyfunction!(py_beamtime_ingest_layout, m)?)?; m.add_function(pyo3::wrap_pyfunction!(py_ingest_beamtime, m)?)?; m.add_function(pyo3::wrap_pyfunction!(py_scan_from_catalog, m)?)?; @@ -684,6 +787,11 @@ mod extension { m.add_function(pyo3::wrap_pyfunction!(py_get_overrides, m)?)?; m.add_function(pyo3::wrap_pyfunction!(py_set_override, m)?)?; m.add_function(pyo3::wrap_pyfunction!(py_classify_scan_type, m)?)?; + #[cfg(feature = "watch")] + { + m.add_class::()?; + m.add_function(pyo3::wrap_pyfunction!(py_run_catalog_watcher_blocking, m)?)?; + } } Ok(()) } diff --git a/src/tui/app.rs b/src/tui/app.rs index 67cce56..82a9ba6 100644 --- a/src/tui/app.rs +++ b/src/tui/app.rs @@ -857,6 +857,7 @@ impl App { &header_items, false, Some(progress_tx), + pyref::catalog::IngestSelection::default(), ) .map(|_| ()) .map_err(|e| e.to_string()); @@ -892,6 +893,7 @@ impl App { &header_items, false, Some(progress_tx), + pyref::catalog::IngestSelection::default(), ) .map(|_| ()) .map_err(|e| e.to_string()); @@ -1288,6 +1290,7 @@ impl App { &header_items, false, Some(progress_tx), + pyref::catalog::IngestSelection::default(), ) .map(|_| ()) .map_err(|e| e.to_string()); diff --git a/tests/cli/test_cli.py b/tests/cli/test_cli.py new file mode 100644 index 0000000..031aa82 --- /dev/null +++ b/tests/cli/test_cli.py @@ -0,0 +1,40 @@ +"""Smoke tests for the Typer CLI.""" + +from __future__ import annotations + +import sys + +import pytest +from typer.testing import CliRunner + + +def test_pyref_help() -> None: + from pyref.cli import app + + runner = CliRunner() + r = runner.invoke(app, ["--help"]) + assert r.exit_code == 0 + assert "nas" in r.stdout + + +def test_catalog_ingest_help() -> None: + from pyref.cli import app + + runner = CliRunner() + r = runner.invoke(app, ["catalog", "ingest", "--help"]) + assert r.exit_code == 0 + assert "--max-scans" in r.stdout + + +def test_ingest_shim_rewrites_argv(monkeypatch: pytest.MonkeyPatch) -> None: + buf: dict[str, list[str]] = {} + + def fake_app() -> None: + buf["argv"] = list(sys.argv) + + monkeypatch.setattr("pyref.cli.app", fake_app) + monkeypatch.setattr(sys, "argv", ["pyref-ingest"]) + from pyref.cli.catalog import ingest_shim_main + + ingest_shim_main(["--beamtime", "/tmp/foo", "--no-progress"]) + assert buf["argv"][1:4] == ["catalog", "ingest", "/tmp/foo"] diff --git a/tests/common/mod.rs b/tests/common/mod.rs index f56a3dd..acd301b 100644 --- a/tests/common/mod.rs +++ b/tests/common/mod.rs @@ -60,10 +60,7 @@ pub const SYNTHETIC_SAMPLE_NAME: &str = "synth"; /// Encodes a pixel value from scan/frame/row/column indices so callers can /// assert round-trips without storing a separate reference image. pub fn synthetic_pixel_value(scan_idx: usize, frame_idx: usize, row: usize, col: usize) -> i16 { - let base = (scan_idx as i64) * 37 - + (frame_idx as i64) * 7 - + (row as i64) * 3 - + (col as i64); + let base = (scan_idx as i64) * 37 + (frame_idx as i64) * 7 + (row as i64) * 3 + (col as i64); (base.rem_euclid(1_024)) as i16 } diff --git a/tests/ingest_streaming.rs b/tests/ingest_streaming.rs index 693861b..793bba8 100644 --- a/tests/ingest_streaming.rs +++ b/tests/ingest_streaming.rs @@ -17,7 +17,7 @@ use diesel::dsl::count_star; use diesel::prelude::*; use pyref::catalog::{ ingest_beamtime, ingest_beamtime_with_progress_sink, open_catalog_db, IngestParallelism, - IngestProgress, IngestProgressSink, + IngestProgress, IngestProgressSink, IngestSelection, }; use pyref::schema::{files, frames, scans}; @@ -88,7 +88,14 @@ fn synthetic_beamtime_ingests_with_expected_row_counts() { ]); let items = header_items(); - let returned = ingest_beamtime(&beamtime.root, &items, false, None).expect("ingest_beamtime"); + let returned = ingest_beamtime( + &beamtime.root, + &items, + false, + None, + IngestSelection::default(), + ) + .expect("ingest_beamtime"); assert_eq!( returned, catalog_db, "ingest should return the PYREF_CATALOG_DB path" @@ -160,6 +167,7 @@ fn synthetic_beamtime_streams_progress_incrementally() { false, Some(progress), IngestParallelism::default(), + IngestSelection::default(), ) .expect("ingest_beamtime_with_progress_sink"); @@ -198,3 +206,96 @@ fn synthetic_beamtime_streams_progress_incrementally() { (got catalog_row at {first_catalog_idx} and file_complete at {first_file_idx})", ); } + +#[test] +fn synthetic_beamtime_max_scans_limits_rows() { + const SCANS: usize = 10; + const FRAMES: usize = 10; + const MAX_SCANS: u32 = 2; + let expected_files: i64 = (MAX_SCANS as usize * FRAMES) as i64; + + let _lock = ENV_LOCK.lock().unwrap_or_else(|e| e.into_inner()); + + let tmp = tempfile::tempdir().expect("tempdir"); + let layout = SyntheticLayout::uniform(SCANS, FRAMES, 16, 16); + let beamtime = build_synthetic_beamtime(layout, tmp.path()).expect("build synthetic beamtime"); + + let catalog_db = tmp.path().join("catalog.db"); + let cache_root = tmp.path().join("cache"); + let _env = EnvGuard::set(&[ + ("PYREF_CATALOG_DB", catalog_db.display().to_string()), + ("PYREF_CACHE_ROOT", cache_root.display().to_string()), + ]); + + let items = header_items(); + ingest_beamtime( + &beamtime.root, + &items, + false, + None, + IngestSelection { + max_scans: Some(MAX_SCANS), + scan_numbers: None, + }, + ) + .expect("ingest_beamtime max_scans"); + + let mut conn = open_catalog_db(&catalog_db).expect("open catalog"); + let files_count: i64 = files::table + .select(count_star()) + .first(&mut conn) + .expect("count files"); + let scans_count: i64 = scans::table + .select(count_star()) + .first(&mut conn) + .expect("count scans"); + + assert_eq!(files_count, expected_files, "files row count"); + assert_eq!(scans_count, MAX_SCANS as i64, "scans row count"); +} + +#[test] +fn synthetic_beamtime_scan_numbers_subset() { + const SCANS: usize = 4; + const FRAMES: usize = 4; + let expected_files: i64 = (2 * FRAMES) as i64; + + let _lock = ENV_LOCK.lock().unwrap_or_else(|e| e.into_inner()); + + let tmp = tempfile::tempdir().expect("tempdir"); + let layout = SyntheticLayout::uniform(SCANS, FRAMES, 16, 16); + let beamtime = build_synthetic_beamtime(layout, tmp.path()).expect("build synthetic beamtime"); + + let catalog_db = tmp.path().join("catalog.db"); + let cache_root = tmp.path().join("cache"); + let _env = EnvGuard::set(&[ + ("PYREF_CATALOG_DB", catalog_db.display().to_string()), + ("PYREF_CACHE_ROOT", cache_root.display().to_string()), + ]); + + let items = header_items(); + ingest_beamtime( + &beamtime.root, + &items, + false, + None, + IngestSelection { + max_scans: None, + scan_numbers: Some(vec![1, 3]), + }, + ) + .expect("ingest_beamtime scan_numbers"); + + let mut conn = open_catalog_db(&catalog_db).expect("open catalog"); + let files_count: i64 = files::table + .select(count_star()) + .first(&mut conn) + .expect("count files"); + let scans_count: i64 = scans::table + .select(count_star()) + .first(&mut conn) + .expect("count scans"); + + assert_eq!(files_count, expected_files, "files row count"); + assert_eq!(scans_count, 2_i64, "scans row count"); +} diff --git a/tests/synthetic_harness.rs b/tests/synthetic_harness.rs index 8056056..84716a4 100644 --- a/tests/synthetic_harness.rs +++ b/tests/synthetic_harness.rs @@ -13,7 +13,9 @@ use pyref::io::parse_fits_stem; use pyref::io::ImageInfo; use pyref::loader::read_fits_headers_only_row; -use common::{build_synthetic_beamtime, synthetic_pixel_value, SyntheticLayout, SYNTHETIC_SAMPLE_NAME}; +use common::{ + build_synthetic_beamtime, synthetic_pixel_value, SyntheticLayout, SYNTHETIC_SAMPLE_NAME, +}; fn header_items() -> Vec { [ @@ -87,7 +89,10 @@ fn synthetic_pixels_round_trip_via_image_mmap() { assert_eq!(info.bzero, 32_768); let data = load_image_pixels(path, &info).expect("load_image_pixels"); - assert_eq!(data.shape(), &[layout.height as usize, layout.width as usize]); + assert_eq!( + data.shape(), + &[layout.height as usize, layout.width as usize] + ); for row in 0..(layout.height as usize) { for col in 0..(layout.width as usize) { diff --git a/uv.lock b/uv.lock index 9842934..ae5bb5c 100644 --- a/uv.lock +++ b/uv.lock @@ -3499,7 +3499,9 @@ dependencies = [ { name = "sigfig" }, { name = "sympy" }, { name = "tiled" }, + { name = "tomli-w" }, { name = "tqdm" }, + { name = "typer" }, { name = "uncertainties" }, { name = "xarray" }, ] @@ -3565,7 +3567,9 @@ requires-dist = [ { name = "sigfig", specifier = ">=1.3.19" }, { name = "sympy", specifier = ">=1.14.0" }, { name = "tiled", specifier = ">=0.2.8" }, + { name = "tomli-w", specifier = ">=1.2.0" }, { name = "tqdm", specifier = ">=4.67.1" }, + { name = "typer", specifier = ">=0.24.1" }, { name = "uncertainties", specifier = ">=3.2.3" }, { name = "xarray", specifier = ">=2025.4.0" }, ] @@ -4573,6 +4577,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e6/34/ebdc18bae6aa14fbee1a08b63c015c72b64868ff7dae68808ab500c492e2/tinycss2-1.4.0-py3-none-any.whl", hash = "sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289", size = 26610, upload-time = "2024-10-24T14:58:28.029Z" }, ] +[[package]] +name = "tomli-w" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/19/75/241269d1da26b624c0d5e110e8149093c759b7a286138f4efd61a60e75fe/tomli_w-1.2.0.tar.gz", hash = "sha256:2dd14fac5a47c27be9cd4c976af5a12d87fb1f0b4512f81d69cce3b35ae25021", size = 7184, upload-time = "2025-01-15T12:07:24.262Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c7/18/c86eb8e0202e32dd3df50d43d7ff9854f8e0603945ff398974c1d91ac1ef/tomli_w-1.2.0-py3-none-any.whl", hash = "sha256:188306098d013b691fcadc011abd66727d3c414c571bb01b1a174ba8c983cf90", size = 6675, upload-time = "2025-01-15T12:07:22.074Z" }, +] + [[package]] name = "toolz" version = "1.1.0" From d0a03a552729db19ad5e7eb5b79a8d5e7c722c9d Mon Sep 17 00:00:00 2001 From: Harlan D Heilman <73567020+HarlanHeilman@users.noreply.github.com> Date: Sun, 19 Apr 2026 17:43:14 -0700 Subject: [PATCH 20/22] feat(catalog): per-scan Zarr uint16 stacks, migration tool, and config catalog path - Add shape-bucketed per-scan 3D uint16 Zarr with shuffle+Zstd; frames zarr index columns - SQLite migration; ingest, query, and image load paths (Zarr-first, FITS fallback) - Add migrate-zarr-3d binary with dry-run compression/ETA sampling; optional zstd dep - Default catalog.db under ~/.config/pyref (XDG_CONFIG_HOME, PYREF_HOME overrides) - Python IO/catalog_path updates; notebooks and tests --- AGENTS.md | 19 +- Cargo.lock | 12 + Cargo.toml | 9 +- .../down.sql | 3 + .../up.sql | 5 + notebooks/als-beamline-scripts.ipynb | 2 +- notebooks/beamtime_collins_2026feb.ipynb | 481 +++++++++--------- python/pyref/io/__init__.py | 21 + python/pyref/io/beamtime.py | 323 +++++++++++- python/pyref/io/catalog_path.py | 8 +- python/pyref/io/readers.py | 30 ++ src/bin/migrate_zarr_3d.rs | 389 ++++++++++++++ src/catalog/ingest.rs | 128 ++++- src/catalog/mod.rs | 5 +- src/catalog/models.rs | 2 + src/catalog/paths.rs | 63 ++- src/catalog/query.rs | 96 +++- src/catalog/zarr_write.rs | 163 +++++- src/io/image_mmap.rs | 61 +++ src/io/mod.rs | 45 ++ src/lib.rs | 33 +- src/schema.rs | 10 +- tests/test_catalog.py | 81 +++ 23 files changed, 1698 insertions(+), 291 deletions(-) create mode 100644 migrations/2026-04-17-120000_frames_zarr_shape_bucket/down.sql create mode 100644 migrations/2026-04-17-120000_frames_zarr_shape_bucket/up.sql create mode 100644 src/bin/migrate_zarr_3d.rs diff --git a/AGENTS.md b/AGENTS.md index 8ff3d8a..582116c 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -124,17 +124,17 @@ Connecting individual frames back to their originating sample, scan, and beamtim ### Catalog and Cache Storage -#### Default: local user data directory +#### Default: catalog under `~/.config/pyref`, zarr under platform user data -By default, `pyref` maintains a single persistent catalog that accumulates every beamtime the user has ever ingested. The catalog and its associated zarr cache live in the platform-appropriate user data directory, resolved at runtime by the Rust IO layer using the `directories` crate: +By default, `pyref` maintains a single persistent catalog that accumulates every beamtime the user has ever ingested. The **catalog** path is Unix-like under the user home on all platforms (not the legacy per-OS “Application Support” / `%APPDATA%` location): -| Platform | Default catalog path | -|----------|----------------------| -| Linux | `$XDG_DATA_HOME/pyref/catalog.db` (falls back to `~/.local/share/pyref/catalog.db`) | -| macOS | `~/Library/Application Support/pyref/catalog.db` | -| Windows | `%APPDATA%\pyref\catalog.db` | +| Scope | Default path | +|-------|----------------| +| `catalog.db` | `$XDG_CONFIG_HOME/pyref/catalog.db` when `XDG_CONFIG_HOME` is set; otherwise `~/.config/pyref/catalog.db` (on Windows, `~` is the user profile, e.g. `C:\Users\\.config\pyref\catalog.db`). | -The zarr archive for each beamtime is stored **on local disk under the same platform data directory** as the catalog, not under the system cache directory: `/pyref/.cache//beamtime.zarr`, where `` is the same root as in the table above (`$XDG_DATA_HOME` or `~/.local/share`, `~/Library/Application Support`, or `%APPDATA%` as appropriate) and `` is a stable SHA-256 digest of the beamtime root path recorded at ingestion time. Example on macOS: `~/Library/Application Support/pyref/.cache//beamtime.zarr`. The zarr tree is local-only; NAS-backed FITS are used for ingestion and re-ingestion, not for routine image reads after ingest. +The **zarr** archive for each beamtime stays under the platform user data directory from the `directories` crate: `/pyref/.cache//beamtime.zarr`, where on Linux that is typically `$XDG_DATA_HOME/pyref` or `~/.local/share/pyref`, on macOS `~/Library/Application Support/pyref`, and on Windows `%APPDATA%\pyref`. `` is a stable SHA-256 digest of the beamtime root path recorded at ingestion time. Example on macOS: `~/Library/Application Support/pyref/.cache//beamtime.zarr`. The zarr tree is local-only; NAS-backed FITS are used for ingestion and re-ingestion, not for routine image reads after ingest. + +When `PYREF_HOME` is set (common in tests), both tooling expectations may still point at that directory for the catalog file (`/catalog.db`) as implemented in the Rust path resolver; production use relies on the defaults above unless overridden. Optional environment overrides: `PYREF_CATALOG_DB` (absolute path to `catalog.db`) and `PYREF_CACHE_ROOT` (parent of `/beamtime.zarr` directories). Parallel FITS reads during ingest honor `PYREF_INGEST_WORKER_THREADS` or `PYREF_INGEST_RESOURCE_FRACTION` when explicit kwargs or TUI config fields are unset. @@ -502,11 +502,12 @@ This workspace extends Rust with **PyO3 / Maturin** extension expectations. - Keep **`.cursor/hooks/state/`** out of git: add it to **`.gitignore`** so hook state and the continual-learning index stay local. - Ingestion and zarr writes from **network-mounted beamtime roots** can be far slower than from a **local replica**; validate progress UX against a local tree when iterating. - **Rust + PyO3:** Use a default feature set (for example **`bindings`**) that links **`libpython`** for **`cargo test`**; Maturin wheel builds use a separate **`extension-module`** feature that enables **`pyo3/extension-module`**. Putting **`extension-module`** in the default test feature set can produce undefined Python symbols (for example `_Py_DecRef`, `Py_IsInitialized`) on Linux CI linkers. -- **`read_beamtime(..., ingest=True)`** runs ingest against the **default global catalog path** from the Rust layer; an explicit **`catalog_path`** mainly selects which database is **read** for the returned view, so keep it consistent with ingest output and env overrides. +- **`read_beamtime(..., ingest=True)`** runs ingest against the **default global catalog path** from the Rust layer; an explicit **`catalog_path`** mainly selects which database is **read** for the returned view. Beamtime lookup keys must match absolute URI form (for example `file:///Volumes/...`), and offline lookup must avoid strict canonicalization so unmounted NAS paths can still match indexed beamtimes. - **Ruff** may exclude **`python/pyref/beamline`**, **`notebooks`**, and **`tests`** per `pyproject.toml`; treat those paths as out of scope for Ruff unless configuration changes. - Ingest phases are modeled by the Rust **`IngestPhase` enum** (not string labels); the catalog phase **coalesces short scans into a single SQLite transaction** (small-scan batching), which is a deliberate design choice. - CI-safe ingest benchmarking uses the synthetic harness: the Rust helper at **`tests/common/mod.rs`** (consumed by `tests/synthetic_harness.rs` and `tests/ingest_streaming.rs`) plus **`scripts/bench_ingest.py`**; shared progress/table helpers live in **`scripts/_ingest_profile.py`** and are reused by `scripts/profile_beamtime_ingest.py`. - Rust integration tests for ingest require **`cargo test --features catalog,parallel_ingest`**; tests that mutate env vars (**`PYREF_CATALOG_DB`**, **`PYREF_CACHE_ROOT`**) must serialize with a `Mutex` guard (pattern in `src/io/raw_pixels.rs` tests) and must point those vars at isolated tempdirs so they never write to the default catalog. - **`tests/fixtures/minimal.fits`** is the canonical 2x2 BITPIX=16 FITS reference; new synthetic fixtures must match its header/block layout (2880-byte header, BZERO=32768 for unsigned-as-signed-i16, stems of the form `--.fits`). - **Typer CLI** (`pyref` entry point): implementation under **`python/pyref/cli/`** with groups **`nas`** (single registered NAS root in **`config.toml`** next to the data dir), **`beamtime`** (list/describe coverage using **`py_beamtime_ingest_layout`** + **`py_catalog_file_count`**), **`catalog`** (`path`, `ingest` with **`--max-scans`** / **`--scans`**), and **`watch`** (subprocess daemon via **`PYREF_CLI_WATCH_SPEC`**, worker module **`python -m pyref.cli.daemon`**, PID/logs under **`/daemons/`**). Legacy **`pyref-ingest`** delegates to **`pyref catalog ingest`**. +- Beamtime **Zarr** raw images are **per-scan** **shape-bucketed** 3D `uint16` stacks at `/images/by_shape//scans//raw` (shuffle + Zstd; see `catalog::zarr_write`, schema, **`migrate-zarr-3d`**); standalone Rust migration or tooling that initializes **Polars** through **PyO3** may print **`failed to get allocator capsule`** on stderr even when the run succeeds. - **Rust bindings for CLI:** **`py_pyref_data_dir`**, **`py_catalog_file_count`**, optional ingest subset via **`IngestSelection`** (`max_scans`, `scan_numbers`), and **`CatalogWatcherCancel`** + **`py_run_catalog_watcher_blocking`** when the **`watch`** feature is enabled (included in default features for extension builds). \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index 768a001..e4a0778 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1034,6 +1034,15 @@ dependencies = [ "libc", ] +[[package]] +name = "crc32c" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a47af21622d091a8f0fb295b88bc886ac74efcc613efc19f5d0b21de5c89e47" +dependencies = [ + "rustc_version", +] + [[package]] name = "crc32fast" version = "1.5.0" @@ -4495,6 +4504,7 @@ dependencies = [ "toml 0.8.23", "walkdir", "zarrs", + "zstd", ] [[package]] @@ -7009,6 +7019,7 @@ dependencies = [ "base64", "bytemuck", "bytes", + "crc32c", "derive_more", "getrandom 0.3.4", "half", @@ -7041,6 +7052,7 @@ dependencies = [ "zarrs_metadata_ext", "zarrs_plugin", "zarrs_storage", + "zstd", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 54e6c80..cb7feb4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,6 +18,11 @@ name = "browser" path = "src/bin/browser.rs" required-features = ["tui"] +[[bin]] +name = "migrate-zarr-3d" +path = "src/bin/migrate_zarr_3d.rs" +required-features = ["catalog"] + [features] default = ["bindings", "catalog", "parallel_ingest", "watch"] bindings = ["dep:pyo3", "dep:pyo3-polars", "dep:numpy"] @@ -30,6 +35,7 @@ catalog = [ "dep:walkdir", "dep:zarrs", "dep:crossbeam-channel", + "dep:zstd", ] parallel_ingest = ["catalog"] zarr = ["catalog"] @@ -61,7 +67,8 @@ directories = {version = "6", optional = true} notify-debouncer-mini = {version = "0.4", optional = true} log = {version = "0.4", optional = true} eframe = {version = "0.28", optional = true, default-features = true} -zarrs = {version = "0.23", optional = true, default-features = false, features = ["filesystem", "ndarray"]} +zarrs = {version = "0.23", optional = true, default-features = false, features = ["filesystem", "ndarray", "zstd", "sharding", "crc32c"]} +zstd = {version = "0.13", optional = true, default-features = false} diesel = { version = "2.2", optional = true, features = ["sqlite", "returning_clauses_for_sqlite_3_35", "32-column-tables"] } diesel_migrations = {version = "2.2", optional = true, features = ["sqlite"]} libsqlite3-sys = {version = "0.28", optional = true, features = ["bundled"]} diff --git a/migrations/2026-04-17-120000_frames_zarr_shape_bucket/down.sql b/migrations/2026-04-17-120000_frames_zarr_shape_bucket/down.sql new file mode 100644 index 0000000..7088647 --- /dev/null +++ b/migrations/2026-04-17-120000_frames_zarr_shape_bucket/down.sql @@ -0,0 +1,3 @@ +DROP INDEX IF EXISTS idx_frames_zarr_shape_bucket_frame_index; +ALTER TABLE frames DROP COLUMN zarr_bucket_frame_index; +ALTER TABLE frames DROP COLUMN zarr_shape_bucket; diff --git a/migrations/2026-04-17-120000_frames_zarr_shape_bucket/up.sql b/migrations/2026-04-17-120000_frames_zarr_shape_bucket/up.sql new file mode 100644 index 0000000..fcab8f8 --- /dev/null +++ b/migrations/2026-04-17-120000_frames_zarr_shape_bucket/up.sql @@ -0,0 +1,5 @@ +ALTER TABLE frames ADD COLUMN zarr_shape_bucket TEXT; +ALTER TABLE frames ADD COLUMN zarr_bucket_frame_index INTEGER; + +CREATE INDEX idx_frames_zarr_shape_bucket_frame_index +ON frames(zarr_shape_bucket, zarr_bucket_frame_index); diff --git a/notebooks/als-beamline-scripts.ipynb b/notebooks/als-beamline-scripts.ipynb index 1d9df39..474a5e8 100644 --- a/notebooks/als-beamline-scripts.ipynb +++ b/notebooks/als-beamline-scripts.ipynb @@ -499,7 +499,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.13.11" + "version": "3.12.12" } }, "nbformat": 4, diff --git a/notebooks/beamtime_collins_2026feb.ipynb b/notebooks/beamtime_collins_2026feb.ipynb index d3bd575..25bec54 100644 --- a/notebooks/beamtime_collins_2026feb.ipynb +++ b/notebooks/beamtime_collins_2026feb.ipynb @@ -1,247 +1,268 @@ { - "cells": [ - { - "cell_type": "markdown", - "id": "7fb27b941602401d91542211134fc71a", - "metadata": {}, - "source": [ - "# Collins 2026Feb beamtime (NAS-mounted)\n", - "\n", - "Ingest (or refresh) the beamtime into the global `catalog.db`, then inspect samples, scans, and frame metadata. Optionally verify FITS mmap via one corrected image.\n", - "\n", - "Requires `/Volumes/DATA/Collins/2026Feb` to exist on this machine.\n" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "acae54e37e7d407bbb7b55eff062a284", - "metadata": {}, - "outputs": [ + "cells": [ { - "data": { - "text/html": [ - "" + "cell_type": "markdown", + "id": "7fb27b941602401d91542211134fc71a", + "metadata": {}, + "source": [ + "# Collins 2026Feb beamtime local curation workflow\n", + "\n", + "Use the already-ingested local catalog/zarr view (no NAS dependency), inspect relevant scans, apply per-scan sample/tag updates, verify theta/energy ranges, and correct per-scan classification (`fixed_energy` vs `fixed_angle`).\n", + "\n", + "This notebook is structured as executable validation steps so each curation action is immediately checked.\n" ] - }, - "metadata": {}, - "output_type": "display_data" }, { - "data": { - "application/javascript": "(function(root) {\n function now() {\n return new Date();\n }\n\n const force = true;\n const version = '3.8.2'.replace('rc', '-rc.').replace('.dev', '-dev.');\n const reloading = false;\n const Bokeh = root.Bokeh;\n const BK_RE = /^https:\\/\\/cdn\\.bokeh\\.org\\/bokeh\\/(release|dev)\\/bokeh-/;\n const PN_RE = /^https:\\/\\/cdn\\.holoviz\\.org\\/panel\\/[^/]+\\/dist\\/panel/i;\n\n // Set a timeout for this load but only if we are not already initializing\n if (typeof (root._bokeh_timeout) === \"undefined\" || (force || !root._bokeh_is_initializing)) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks;\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, js_modules, js_exports, Bokeh, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n if (js_modules == null) js_modules = [];\n if (js_exports == null) js_exports = {};\n\n root._bokeh_onload_callbacks.push(callback);\n\n if (root._bokeh_is_loading > 0) {\n // Don't load bokeh if it is still initializing\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n } else if (js_urls.length === 0 && js_modules.length === 0 && Object.keys(js_exports).length === 0) {\n // There is nothing to load\n run_callbacks();\n return null;\n }\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n window._bokeh_on_load = on_load\n\n function on_error(e) {\n const src_el = e.srcElement\n console.error(\"failed to load \" + (src_el.href || src_el.src));\n }\n\n const skip = [];\n if (window.requirejs) {\n window.requirejs.config({'packages': {}, 'paths': {}, 'shim': {}});\n root._bokeh_is_loading = css_urls.length + 0;\n } else {\n root._bokeh_is_loading = css_urls.length + js_urls.length + js_modules.length + Object.keys(js_exports).length;\n }\n\n const existing_stylesheets = []\n const links = document.getElementsByTagName('link')\n for (let i = 0; i < links.length; i++) {\n const link = links[i]\n if (link.href != null) {\n existing_stylesheets.push(link.href)\n }\n }\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const escaped = encodeURI(url)\n if (existing_stylesheets.indexOf(escaped) !== -1) {\n on_load()\n continue;\n }\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error;\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n } var existing_scripts = []\n const scripts = document.getElementsByTagName('script')\n for (let i = 0; i < scripts.length; i++) {\n var script = scripts[i]\n if (script.src != null) {\n existing_scripts.push(script.src)\n }\n }\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const escaped = encodeURI(url)\n const shouldSkip = skip.includes(escaped) || existing_scripts.includes(escaped)\n const isBokehOrPanel = BK_RE.test(escaped) || PN_RE.test(escaped)\n const missingOrBroken = Bokeh == null || Bokeh.Panel == null || (Bokeh.version != version && !Bokeh.versions?.has(version)) || Bokeh.versions?.get(version)?.Panel == null;\n if (shouldSkip && !(isBokehOrPanel && missingOrBroken)) {\n if (!window.requirejs) {\n on_load();\n }\n continue;\n }\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error;\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n for (let i = 0; i < js_modules.length; i++) {\n const url = js_modules[i];\n const escaped = encodeURI(url)\n if (skip.indexOf(escaped) !== -1 || existing_scripts.indexOf(escaped) !== -1) {\n if (!window.requirejs) {\n on_load();\n }\n continue;\n }\n var element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error;\n element.async = false;\n element.src = url;\n element.type = \"module\";\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n for (const name in js_exports) {\n const url = js_exports[name];\n const escaped = encodeURI(url)\n if (skip.indexOf(escaped) >= 0 || root[name] != null) {\n if (!window.requirejs) {\n on_load();\n }\n continue;\n }\n var element = document.createElement('script');\n element.onerror = on_error;\n element.async = false;\n element.type = \"module\";\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n element.textContent = `\n import ${name} from \"${url}\"\n window.${name} = ${name}\n window._bokeh_on_load()\n `\n document.head.appendChild(element);\n }\n if (!js_urls.length && !js_modules.length) {\n on_load()\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n const js_urls = [\"https://cdn.holoviz.org/panel/1.8.5/dist/bundled/reactiveesm/es-module-shims@^1.10.0/dist/es-module-shims.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-3.8.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.8.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.8.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.8.2.min.js\", \"https://cdn.holoviz.org/panel/1.8.5/dist/panel.min.js\"];\n const js_modules = [];\n const js_exports = {};\n const css_urls = [];\n const inline_js = [ function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\nfunction(Bokeh) {} // ensure no trailing comma for IE\n ];\n\n function run_inline_js() {\n if ((root.Bokeh !== undefined) || (force === true)) {\n for (let i = 0; i < inline_js.length; i++) {\n try {\n inline_js[i].call(root, root.Bokeh);\n } catch(e) {\n if (!reloading) {\n throw e;\n }\n }\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n }\n root._bokeh_is_initializing = false;\n }\n\n function load_or_wait() {\n // Implement a backoff loop that tries to ensure we do not load multiple\n // versions of Bokeh and its dependencies at the same time.\n // In recent versions we use the root._bokeh_is_initializing flag\n // to determine whether there is an ongoing attempt to initialize\n // bokeh, however for backward compatibility we also try to ensure\n // that we do not start loading a newer (Panel>=1.0 and Bokeh>3) version\n // before older versions are fully initialized.\n if (root._bokeh_is_initializing && Date.now() > root._bokeh_timeout) {\n // If the timeout and bokeh was not successfully loaded we reset\n // everything and try loading again\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_is_initializing = false;\n root._bokeh_onload_callbacks = undefined;\n root._bokeh_is_loading = 0;\n console.log(\"Bokeh: BokehJS was loaded multiple times but one version failed to initialize.\");\n load_or_wait();\n } else if (root._bokeh_is_initializing || (typeof root._bokeh_is_initializing === \"undefined\" && root._bokeh_onload_callbacks !== undefined)) {\n setTimeout(load_or_wait, 100);\n } else {\n root._bokeh_is_initializing = true;\n root._bokeh_onload_callbacks = [];\n const bokeh_loaded = Bokeh != null && ((Bokeh.version === version && Bokeh.Panel) || (Bokeh.versions?.has(version) && Bokeh.versions.get(version)?.Panel));\n if (!reloading && !bokeh_loaded) {\n if (root.Bokeh) {\n root.Bokeh = undefined;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n }\n load_libs(css_urls, js_urls, js_modules, js_exports, Bokeh, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n if (Bokeh != undefined && !reloading) {\n const NewBokeh = root.Bokeh;\n if (Bokeh.versions === undefined) {\n Bokeh.versions = new Map();\n }\n if (NewBokeh.version !== Bokeh.version) {\n Bokeh[NewBokeh.version] = NewBokeh;\n Bokeh.versions.set(NewBokeh.version, NewBokeh);\n }\n root.Bokeh = Bokeh;\n }\n });\n }\n }\n // Give older versions of the autoload script a head-start to ensure\n // they initialize before we start loading newer version.\n setTimeout(load_or_wait, 100)\n}(window));", - "application/vnd.holoviews_load.v0+json": "" - }, - "metadata": {}, - "output_type": "display_data" + "cell_type": "code", + "execution_count": 17, + "id": "acae54e37e7d407bbb7b55eff062a284", + "metadata": {}, + "outputs": [], + "source": [ + "from pathlib import Path\n", + "\n", + "import matplotlib.pyplot as plt\n", + "from pyref.io import (\n", + " apply_scan_overrides,\n", + " get_image,\n", + " read_beamtime_local,\n", + " set_beamtime_scan_types,\n", + " summarize_beamtime_scans,\n", + ")" + ] }, { - "data": { - "application/javascript": "\nif ((window.PyViz === undefined) || (window.PyViz instanceof HTMLElement)) {\n window.PyViz = {comms: {}, comm_status:{}, kernels:{}, receivers: {}, plot_index: []}\n}\n\n\n function JupyterCommManager() {\n }\n\n JupyterCommManager.prototype.register_target = function(plot_id, comm_id, msg_handler) {\n if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n comm_manager.register_target(comm_id, function(comm) {\n comm.on_msg(msg_handler);\n });\n } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n window.PyViz.kernels[plot_id].registerCommTarget(comm_id, function(comm) {\n comm.onMsg = msg_handler;\n });\n } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n google.colab.kernel.comms.registerTarget(comm_id, (comm) => {\n var messages = comm.messages[Symbol.asyncIterator]();\n function processIteratorResult(result) {\n var message = result.value;\n console.log(message)\n var content = {data: message.data, comm_id};\n var buffers = []\n for (var buffer of message.buffers || []) {\n buffers.push(new DataView(buffer))\n }\n var metadata = message.metadata || {};\n var msg = {content, buffers, metadata}\n msg_handler(msg);\n return messages.next().then(processIteratorResult);\n }\n return messages.next().then(processIteratorResult);\n })\n }\n }\n\n JupyterCommManager.prototype.get_client_comm = function(plot_id, comm_id, msg_handler) {\n if (comm_id in window.PyViz.comms) {\n return window.PyViz.comms[comm_id];\n } else if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n var comm = comm_manager.new_comm(comm_id, {}, {}, {}, comm_id);\n if (msg_handler) {\n comm.on_msg(msg_handler);\n }\n } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n var comm = window.PyViz.kernels[plot_id].connectToComm(comm_id);\n comm.open();\n if (msg_handler) {\n comm.onMsg = msg_handler;\n }\n } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n var comm_promise = google.colab.kernel.comms.open(comm_id)\n comm_promise.then((comm) => {\n window.PyViz.comms[comm_id] = comm;\n if (msg_handler) {\n var messages = comm.messages[Symbol.asyncIterator]();\n function processIteratorResult(result) {\n var message = result.value;\n var content = {data: message.data};\n var metadata = message.metadata || {comm_id};\n var msg = {content, metadata}\n msg_handler(msg);\n return messages.next().then(processIteratorResult);\n }\n return messages.next().then(processIteratorResult);\n }\n })\n var sendClosure = (data, metadata, buffers, disposeOnDone) => {\n return comm_promise.then((comm) => {\n comm.send(data, metadata, buffers, disposeOnDone);\n });\n };\n var comm = {\n send: sendClosure\n };\n }\n window.PyViz.comms[comm_id] = comm;\n return comm;\n }\n window.PyViz.comm_manager = new JupyterCommManager();\n \n\n\nvar JS_MIME_TYPE = 'application/javascript';\nvar HTML_MIME_TYPE = 'text/html';\nvar EXEC_MIME_TYPE = 'application/vnd.holoviews_exec.v0+json';\nvar CLASS_NAME = 'output';\n\n/**\n * Render data to the DOM node\n */\nfunction render(props, node) {\n var div = document.createElement(\"div\");\n var script = document.createElement(\"script\");\n node.appendChild(div);\n node.appendChild(script);\n}\n\n/**\n * Handle when a new output is added\n */\nfunction handle_add_output(event, handle) {\n var output_area = handle.output_area;\n var output = handle.output;\n if ((output.data == undefined) || (!output.data.hasOwnProperty(EXEC_MIME_TYPE))) {\n return\n }\n var id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n var toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n if (id !== undefined) {\n var nchildren = toinsert.length;\n var html_node = toinsert[nchildren-1].children[0];\n html_node.innerHTML = output.data[HTML_MIME_TYPE];\n var scripts = [];\n var nodelist = html_node.querySelectorAll(\"script\");\n for (var i in nodelist) {\n if (nodelist.hasOwnProperty(i)) {\n scripts.push(nodelist[i])\n }\n }\n\n scripts.forEach( function (oldScript) {\n var newScript = document.createElement(\"script\");\n var attrs = [];\n var nodemap = oldScript.attributes;\n for (var j in nodemap) {\n if (nodemap.hasOwnProperty(j)) {\n attrs.push(nodemap[j])\n }\n }\n attrs.forEach(function(attr) { newScript.setAttribute(attr.name, attr.value) });\n newScript.appendChild(document.createTextNode(oldScript.innerHTML));\n oldScript.parentNode.replaceChild(newScript, oldScript);\n });\n if (JS_MIME_TYPE in output.data) {\n toinsert[nchildren-1].children[1].textContent = output.data[JS_MIME_TYPE];\n }\n output_area._hv_plot_id = id;\n if ((window.Bokeh !== undefined) && (id in Bokeh.index)) {\n window.PyViz.plot_index[id] = Bokeh.index[id];\n } else {\n window.PyViz.plot_index[id] = null;\n }\n } else if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n var bk_div = document.createElement(\"div\");\n bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n var script_attrs = bk_div.children[0].attributes;\n for (var i = 0; i < script_attrs.length; i++) {\n toinsert[toinsert.length - 1].childNodes[1].setAttribute(script_attrs[i].name, script_attrs[i].value);\n }\n // store reference to server id on output_area\n output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n }\n}\n\n/**\n * Handle when an output is cleared or removed\n */\nfunction handle_clear_output(event, handle) {\n var id = handle.cell.output_area._hv_plot_id;\n var server_id = handle.cell.output_area._bokeh_server_id;\n if (((id === undefined) || !(id in PyViz.plot_index)) && (server_id !== undefined)) { return; }\n var comm = window.PyViz.comm_manager.get_client_comm(\"hv-extension-comm\", \"hv-extension-comm\", function () {});\n if (server_id !== null) {\n comm.send({event_type: 'server_delete', 'id': server_id});\n return;\n } else if (comm !== null) {\n comm.send({event_type: 'delete', 'id': id});\n }\n delete PyViz.plot_index[id];\n if ((window.Bokeh !== undefined) & (id in window.Bokeh.index)) {\n var doc = window.Bokeh.index[id].model.document\n doc.clear();\n const i = window.Bokeh.documents.indexOf(doc);\n if (i > -1) {\n window.Bokeh.documents.splice(i, 1);\n }\n }\n}\n\n/**\n * Handle kernel restart event\n */\nfunction handle_kernel_cleanup(event, handle) {\n delete PyViz.comms[\"hv-extension-comm\"];\n window.PyViz.plot_index = {}\n}\n\n/**\n * Handle update_display_data messages\n */\nfunction handle_update_output(event, handle) {\n handle_clear_output(event, {cell: {output_area: handle.output_area}})\n handle_add_output(event, handle)\n}\n\nfunction register_renderer(events, OutputArea) {\n function append_mime(data, metadata, element) {\n // create a DOM node to render to\n var toinsert = this.create_output_subarea(\n metadata,\n CLASS_NAME,\n EXEC_MIME_TYPE\n );\n this.keyboard_manager.register_events(toinsert);\n // Render to node\n var props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n render(props, toinsert[0]);\n element.append(toinsert);\n return toinsert\n }\n\n events.on('output_added.OutputArea', handle_add_output);\n events.on('output_updated.OutputArea', handle_update_output);\n events.on('clear_output.CodeCell', handle_clear_output);\n events.on('delete.Cell', handle_clear_output);\n events.on('kernel_ready.Kernel', handle_kernel_cleanup);\n\n OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n safe: true,\n index: 0\n });\n}\n\nif (window.Jupyter !== undefined) {\n try {\n var events = require('base/js/events');\n var OutputArea = require('notebook/js/outputarea').OutputArea;\n if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n register_renderer(events, OutputArea);\n }\n } catch(err) {\n }\n}\n", - "application/vnd.holoviews_load.v0+json": "" - }, - "metadata": {}, - "output_type": "display_data" + "cell_type": "code", + "execution_count": 7, + "id": "da700cfd", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "beamtime exists on filesystem: False\n" + ] + }, + { + "data": { + "text/plain": [ + "PosixPath('/Volumes/DATA/Collins/2026Feb')" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "BEAMTIME = Path(\"/Volumes/DATA/Collins/2026Feb\")\n", + "\n", + "assert BEAMTIME.is_absolute(), f\"beamtime must be absolute: {BEAMTIME}\"\n", + "print(f\"beamtime exists on filesystem: {BEAMTIME.exists()}\")\n", + "BEAMTIME" + ] }, { - "data": { - "application/vnd.holoviews_exec.v0+json": "", - "text/html": [ - "
\n", - "
\n", - "
\n", - "" + "cell_type": "code", + "execution_count": 8, + "id": "8dd0d8092fe74a7c96281538738b07e2", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "catalog: /Users/hduva/Library/Application Support/pyref/catalog.db\n", + "beamtime: /Volumes/DATA/Collins/2026Feb\n", + "frames: 13546\n", + "samples: 9\n", + "scans: 33\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "shape: (5, 29)
file_pathdata_offsetnaxis1naxis2bitpixbzerodata_sizefile_namesample_nametagscan_numberframe_numberDATEBeamline EnergySample ThetaCCD ThetaHigher Order SuppressorEPU PolarizationEXPOSURESample NameScan IDLambdaQbeam_rowbeam_colbeam_sigmareflectivity_profile_indexreflectivity_scan_typecatalog_scan_type
stri64i64i64i64i64i64strstrstri64i64strf64f64f64f64f64f64strf64f64f64i64i64f64i64strstr
"/Volumes/DATA/Collins/2026Feb/…2016010004001632768800000"opv_ternary_88147-00001.fits""opv""ternary"881471"2026-02-10T14:37:17"249.9985160.00.001null190.00.0"opv"88147.0nullnullnullnullnullnullnull"fixed_energy"
"/Volumes/DATA/Collins/2026Feb/…2016010004001632768800000"opv_ternary_88147-00002.fits""opv""ternary"881472"2026-02-10T14:37:20"250.0004030.00.0null190.00.0"opv"88147.0nullnullnullnullnullnullnull"fixed_energy"
"/Volumes/DATA/Collins/2026Feb/…2016010004001632768800000"opv_ternary_88147-00003.fits""opv""ternary"881473"2026-02-10T14:37:23"250.0004030.00.0null190.00.0"opv"88147.0nullnullnullnullnullnullnull"fixed_energy"
"/Volumes/DATA/Collins/2026Feb/…2016010004001632768800000"opv_ternary_88147-00004.fits""opv""ternary"881474"2026-02-10T14:37:26"250.0004030.00.0null190.00.0"opv"88147.0nullnullnullnullnullnullnull"fixed_energy"
"/Volumes/DATA/Collins/2026Feb/…2016010004001632768800000"opv_ternary_88147-00005.fits""opv""ternary"881475"2026-02-10T14:37:29"250.0004030.00.0null190.00.0"opv"88147.0nullnullnullnullnullnullnull"fixed_energy"
" + ], + "text/plain": [ + "shape: (5, 29)\n", + "┌────────────┬────────────┬────────┬────────┬───┬────────────┬────────────┬────────────┬───────────┐\n", + "│ file_path ┆ data_offse ┆ naxis1 ┆ naxis2 ┆ … ┆ beam_sigma ┆ reflectivi ┆ reflectivi ┆ catalog_s │\n", + "│ --- ┆ t ┆ --- ┆ --- ┆ ┆ --- ┆ ty_profile ┆ ty_scan_ty ┆ can_type │\n", + "│ str ┆ --- ┆ i64 ┆ i64 ┆ ┆ f64 ┆ _index ┆ pe ┆ --- │\n", + "│ ┆ i64 ┆ ┆ ┆ ┆ ┆ --- ┆ --- ┆ str │\n", + "│ ┆ ┆ ┆ ┆ ┆ ┆ i64 ┆ str ┆ │\n", + "╞════════════╪════════════╪════════╪════════╪═══╪════════════╪════════════╪════════════╪═══════════╡\n", + "│ /Volumes/D ┆ 20160 ┆ 1000 ┆ 400 ┆ … ┆ null ┆ null ┆ null ┆ fixed_ene │\n", + "│ ATA/Collin ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ rgy │\n", + "│ s/2026Feb/ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n", + "│ … ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n", + "│ /Volumes/D ┆ 20160 ┆ 1000 ┆ 400 ┆ … ┆ null ┆ null ┆ null ┆ fixed_ene │\n", + "│ ATA/Collin ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ rgy │\n", + "│ s/2026Feb/ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n", + "│ … ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n", + "│ /Volumes/D ┆ 20160 ┆ 1000 ┆ 400 ┆ … ┆ null ┆ null ┆ null ┆ fixed_ene │\n", + "│ ATA/Collin ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ rgy │\n", + "│ s/2026Feb/ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n", + "│ … ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n", + "│ /Volumes/D ┆ 20160 ┆ 1000 ┆ 400 ┆ … ┆ null ┆ null ┆ null ┆ fixed_ene │\n", + "│ ATA/Collin ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ rgy │\n", + "│ s/2026Feb/ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n", + "│ … ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n", + "│ /Volumes/D ┆ 20160 ┆ 1000 ┆ 400 ┆ … ┆ null ┆ null ┆ null ┆ fixed_ene │\n", + "│ ATA/Collin ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ rgy │\n", + "│ s/2026Feb/ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n", + "│ … ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n", + "└────────────┴────────────┴────────┴────────┴───┴────────────┴────────────┴────────────┴───────────┘" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "view = read_beamtime_local(BEAMTIME, catalog_path=CATALOG_PATH, require_indexed=True)\n", + "\n", + "print(f\"catalog: {view.catalog_path}\")\n", + "print(f\"beamtime: {view.beamtime_path}\")\n", + "print(f\"frames: {view.frames.height}\")\n", + "print(f\"samples: {len(view.entries.samples)}\")\n", + "print(f\"scans: {len(view.entries.scans)}\")\n", + "\n", + "view.frames.head(5)" ] - }, - "metadata": { - "application/vnd.holoviews_exec.v0+json": { - "id": "63a684f0-da54-40c2-bd7f-6590d733e434" - } - }, - "output_type": "display_data" - } - ], - "source": [ - "from pathlib import Path\n", - "\n", - "import matplotlib.pyplot as plt\n", - "from pyref.io import get_image_corrected, read_beamtime\n" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "9a63283cbaf04dbcab1f6479b197f3a8", - "metadata": {}, - "outputs": [], - "source": [ - "BEAMTIME = Path(\"/Volumes/DATA/Collins/2026Feb\")\n", - "assert BEAMTIME.is_dir(), f\"Mount or fix path: {BEAMTIME}\"" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8dd0d8092fe74a7c96281538738b07e2", - "metadata": {}, - "outputs": [ + }, { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "afa7848e937249bba914e4062c9de164", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Output()" + "cell_type": "code", + "execution_count": 9, + "id": "ecb9187f", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "shape: (20, 10)
scan_numbern_framessample_namestagsenergy_minenergy_maxtheta_mintheta_maxinferred_scan_typecatalog_scan_type
i64i64list[str]list[str]f64f64f64f64strstr
88147616["opv"]["ternary"]249.996629284.4116440.060.0"fixed_energy""fixed_energy"
88148724["opv"]["ternary"]284.39697286.0128420.060.0"fixed_energy""fixed_energy"
88149336["opv"]["ternary"]285.995529286.0054210.060.0"fixed_energy""fixed_energy"
8815024["opv"]["ternary"]249.998516250.0004030.02.182"fixed_energy""fixed_energy"
881511351["opv"]["binary"]249.996629286.0078950.060.0"fixed_energy""fixed_energy"
88162456["znpc_izero"][]249.998516364.9773130.00.0"fixed_angle""fixed_energy"
8816323["znpc_izero"][]249.998516272.0090970.00.0"fixed_angle""fixed_energy"
8816422["znpc_izero"][]249.998516271.00160220.020.0"fixed_angle""fixed_energy"
88165456["znpc_20"][]249.996629364.96927720.020.0"fixed_angle""fixed_energy"
8816667["znpc_20"][]249.998516283.59464315.015.0"fixed_angle""fixed_energy"
" + ], + "text/plain": [ + "shape: (20, 10)\n", + "┌───────────┬──────────┬───────────┬───────────┬───┬───────────┬───────────┬───────────┬───────────┐\n", + "│ scan_numb ┆ n_frames ┆ sample_na ┆ tags ┆ … ┆ theta_min ┆ theta_max ┆ inferred_ ┆ catalog_s │\n", + "│ er ┆ --- ┆ mes ┆ --- ┆ ┆ --- ┆ --- ┆ scan_type ┆ can_type │\n", + "│ --- ┆ i64 ┆ --- ┆ list[str] ┆ ┆ f64 ┆ f64 ┆ --- ┆ --- │\n", + "│ i64 ┆ ┆ list[str] ┆ ┆ ┆ ┆ ┆ str ┆ str │\n", + "╞═══════════╪══════════╪═══════════╪═══════════╪═══╪═══════════╪═══════════╪═══════════╪═══════════╡\n", + "│ 88147 ┆ 616 ┆ [\"opv\"] ┆ [\"ternary ┆ … ┆ 0.0 ┆ 60.0 ┆ fixed_ene ┆ fixed_ene │\n", + "│ ┆ ┆ ┆ \"] ┆ ┆ ┆ ┆ rgy ┆ rgy │\n", + "│ 88148 ┆ 724 ┆ [\"opv\"] ┆ [\"ternary ┆ … ┆ 0.0 ┆ 60.0 ┆ fixed_ene ┆ fixed_ene │\n", + "│ ┆ ┆ ┆ \"] ┆ ┆ ┆ ┆ rgy ┆ rgy │\n", + "│ 88149 ┆ 336 ┆ [\"opv\"] ┆ [\"ternary ┆ … ┆ 0.0 ┆ 60.0 ┆ fixed_ene ┆ fixed_ene │\n", + "│ ┆ ┆ ┆ \"] ┆ ┆ ┆ ┆ rgy ┆ rgy │\n", + "│ 88150 ┆ 24 ┆ [\"opv\"] ┆ [\"ternary ┆ … ┆ 0.0 ┆ 2.182 ┆ fixed_ene ┆ fixed_ene │\n", + "│ ┆ ┆ ┆ \"] ┆ ┆ ┆ ┆ rgy ┆ rgy │\n", + "│ 88151 ┆ 1351 ┆ [\"opv\"] ┆ [\"binary\" ┆ … ┆ 0.0 ┆ 60.0 ┆ fixed_ene ┆ fixed_ene │\n", + "│ ┆ ┆ ┆ ] ┆ ┆ ┆ ┆ rgy ┆ rgy │\n", + "│ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … │\n", + "│ 88162 ┆ 456 ┆ [\"znpc_iz ┆ [] ┆ … ┆ 0.0 ┆ 0.0 ┆ fixed_ang ┆ fixed_ene │\n", + "│ ┆ ┆ ero\"] ┆ ┆ ┆ ┆ ┆ le ┆ rgy │\n", + "│ 88163 ┆ 23 ┆ [\"znpc_iz ┆ [] ┆ … ┆ 0.0 ┆ 0.0 ┆ fixed_ang ┆ fixed_ene │\n", + "│ ┆ ┆ ero\"] ┆ ┆ ┆ ┆ ┆ le ┆ rgy │\n", + "│ 88164 ┆ 22 ┆ [\"znpc_iz ┆ [] ┆ … ┆ 20.0 ┆ 20.0 ┆ fixed_ang ┆ fixed_ene │\n", + "│ ┆ ┆ ero\"] ┆ ┆ ┆ ┆ ┆ le ┆ rgy │\n", + "│ 88165 ┆ 456 ┆ [\"znpc_20 ┆ [] ┆ … ┆ 20.0 ┆ 20.0 ┆ fixed_ang ┆ fixed_ene │\n", + "│ ┆ ┆ \"] ┆ ┆ ┆ ┆ ┆ le ┆ rgy │\n", + "│ 88166 ┆ 67 ┆ [\"znpc_20 ┆ [] ┆ … ┆ 15.0 ┆ 15.0 ┆ fixed_ang ┆ fixed_ene │\n", + "│ ┆ ┆ \"] ┆ ┆ ┆ ┆ ┆ le ┆ rgy │\n", + "└───────────┴──────────┴───────────┴───────────┴───┴───────────┴───────────┴───────────┴───────────┘" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "summary_all = summarize_beamtime_scans(BEAMTIME, catalog_path=CATALOG_PATH)\n", + "\n", + "assert summary_all.height > 0, \"no scans found for beamtime\"\n", + "summary_all.head(20)" ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "view = read_beamtime(BEAMTIME, ingest=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "72eea5119410473aa328ad9291626812", - "metadata": {}, - "outputs": [ + }, { - "data": { - "image/png": "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81R2drYaMWKEiouLU7m5ucqMevfurebPn6927dqltm/frvr06aOSk5PV6dOn9XVGjhypkpKSVFZWltq6davq3Lmz6tq1q77c7Xar1q1bq5SUFPXNN9+ozz77TNWtW1elpaUpM9i8ebNq2rSpatu2rRo3blxIt/vEiROqSZMm6qGHHlKbNm1SP/zwg/r888/V/v379XVef/11FRsbq5YtW6Z27Nihfve736lmzZqps2fP6uvccccd6vrrr1dfffWV+vLLL9U111yjhg4dqoLVq6++quLj41VGRoY6cOCAWrJkiYqOjlZvvfVWSLe7spguuDt27KhGjx6t3/d4PKphw4YqPT1dhYK8vDzugqi1a9fK/fz8fOVwOOQfuua7776TdTZu3Cj3ObCsVqvKycnR15kzZ46KiYlRxcXFKpidOnVKNW/eXGVmZqru3bvrwR2q7Z4yZYrq1q1bhcu9Xq9KTExUb7zxhj6PXwun06k+/PBDub979255HbZs2aKvs3LlSmWxWNThw4dVMOrbt6965JFHfOYNHDhQDRs2LKTbXVlMVSrRLgnLb6Eu9JKwZqNdsrZOnToy5fa6XC6fNrdo0YKSk5P1NvOU324bP8DEX0zBF+vJzs6mYMalEC51GNsXyu1evny5fGL4nnvukdJOu3bt6L333tOXHzhwQD6UZmw3X7+CS4LGdnOZgLej4fX5b2HTpk0UjLp27SqXtfjvf/8r93fs2EHr16+nO++8M6TbXVlMcXXAy7kkrJnwNVu4xnvzzTdT69atZR7/Y+bru/A/WP828zJtnUCvibYsWC1evFi+AWnLli3lloVqu3/44QeaM2eOXPbhmWeekbaPHTtW2sqXgdD2O1C7jO3m0Dey2+1ysA/Wdj/99NNyQOWDL19kjv+OX331ValXs1Btd2UxVXCHOu597tq1S3oioY4v2Tlu3DjKzMyUk8w1BR+cucf42muvyX3ucfPvnL8FioM7VH388ce0cOFCWrRoEV133XW0fft26aTwJUxDud2VxVSlkku5JKxZjBkzhjIyMujf//43NW7cWJ/P7eISEV+DvKI28zTQa6ItC0ZcCuHvGL3xxhul18S3tWvX0ttvvy0/c08rFNvNIyb46/qMWrZsKaNjjPt9rn/jPPX/flYeScMjLoK13Tzah3vdQ4YMkfLWAw88QBMmTJBRVaHc7spiquAOxUvC8gliDu2lS5fS6tWrZbiUEbfX4XD4tJmHC/IfutZmnu7cudPnHzX3ZHnIlH9IBIuePXvKPnPPS7txT5TfOms/h2K7uQzmP9yT6778xSCMf/8cQsZ2c4mBa7jGdvMBjQ9+Gv63w38LXBMORoWFhVKLNuJOGO9zKLe70igTDgfkM80LFiyQs8yPPfaYDAc0jiwwk1GjRskQqDVr1qijR4/qt8LCQp9hcTxEcPXq1TIsrkuXLnLzHxbXq1cvGVK4atUqVa9evaAeFheIcVRJqLabhz7a7XYZHrdv3z61cOFCFRkZqT744AOfYXH8b/rTTz9V3377rerfv3/AYXHt2rWTIYXr16+XkTnBPCwuNTVVNWrUSB8O+I9//EOGbj711FMh3e7KYrrgZn/84x/lD5rHc/PwQB7TaVZ87Ax047HdGv6H+/jjj6vatWvLH/ndd98t4W70448/qjvvvFNFRETIH8SkSZOUy+VSZg7uUG33ihUr5IDDHZAWLVqod99912c5D42bOnWqSkhIkHV69uyp9u7d67POzz//LIHFY6F5+OPDDz8sQyuDVUFBgfxu+e82PDxcXXXVVerZZ5/1GbYZiu2uLLisKwCAyZiqxg0AAAhuAADTQXADAJgMghsAwGQQ3AAAJoPgBgAwGQQ3AIDJILgBAEwGwQ0AYDIIbgAAk0FwAwCYDIIbAIDM5f/VgFvGur/67wAAAABJRU5ErkJggg==", - "text/plain": [ - "
" + "cell_type": "code", + "execution_count": 20, + "id": "076191df", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "dataframe filtered\n" + ] + }, + { + "ename": "RuntimeError", + "evalue": "[FitsError] kind=Io retryable=Temporary message=raw_pixels open source=No such file or directory (os error 2)", + "output_type": "error", + "traceback": [ + "\u001b[31m---------------------------------------------------------------------------\u001b[39m", + "\u001b[31mRuntimeError\u001b[39m Traceback (most recent call last)", + "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[20]\u001b[39m\u001b[32m, line 4\u001b[39m\n\u001b[32m 1\u001b[39m frames_subset = view.frames.filter(view.frames[\u001b[33m\"\u001b[39m\u001b[33mscan_number\u001b[39m\u001b[33m\"\u001b[39m].is_in(selected_scans))\n\u001b[32m 2\u001b[39m \u001b[38;5;28;01massert\u001b[39;00m frames_subset.height > \u001b[32m0\u001b[39m, \u001b[33m\"\u001b[39m\u001b[33mno frame rows for selected scans\u001b[39m\u001b[33m\"\u001b[39m\n\u001b[32m----> \u001b[39m\u001b[32m4\u001b[39m img = \u001b[43mget_image\u001b[49m\u001b[43m(\u001b[49m\u001b[43mframes_subset\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[32;43m1\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[32m 6\u001b[39m plt.figure(figsize=(\u001b[32m6\u001b[39m, \u001b[32m4\u001b[39m))\n\u001b[32m 7\u001b[39m plt.imshow(img, cmap=\u001b[33m\"\u001b[39m\u001b[33mmagma\u001b[39m\u001b[33m\"\u001b[39m)\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/projects/pyref/python/pyref/io/readers.py:495\u001b[39m, in \u001b[36mget_image\u001b[39m\u001b[34m(meta_df, row_index)\u001b[39m\n\u001b[32m 492\u001b[39m \u001b[38;5;250m\u001b[39m\u001b[33;03m\"\"\"Return raw detector pixels for ``row_index`` via the Rust image bridge.\"\"\"\u001b[39;00m\n\u001b[32m 493\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mpyref\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mpyref\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m py_get_image\n\u001b[32m--> \u001b[39m\u001b[32m495\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mpy_get_image\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmeta_df\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrow_index\u001b[49m\u001b[43m)\u001b[49m\n", + "\u001b[31mRuntimeError\u001b[39m: [FitsError] kind=Io retryable=Temporary message=raw_pixels open source=No such file or directory (os error 2)" + ] + } + ], + "source": [ + "frames_subset = view.frames.filter(view.frames[\"scan_number\"].is_in(selected_scans))\n", + "assert frames_subset.height > 0, \"no frame rows for selected scans\"\n", + "\n", + "img = get_image(frames_subset, 1)\n", + "\n", + "plt.figure(figsize=(6, 4))\n", + "plt.imshow(img, cmap=\"magma\")\n", + "plt.colorbar(label=\"counts\")\n", + "plt.title(f\"Corrected image preview for scan {selected_scans[0]}\")\n", + "plt.tight_layout()\n", + "plt.show()" ] - }, - "metadata": {}, - "output_type": "display_data" } - ], - "source": [ - "if view.frames.height > 0:\n", - " img = get_image_corrected(view.frames, 20)\n", - " arr = __import__(\"numpy\").asarray(img)\n", - " fig, ax = plt.subplots(figsize=(4, 4))\n", - " ax.imshow(arr, origin=\"lower\")\n", - " ax.set_title(\"row 0 (corrected)\")\n", - " plt.show()\n", - "else:\n", - " print(\"No frames; skip image check\")\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ecb9187f", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": ".venv", - "language": "python", - "name": "python3" + ], + "metadata": { + "kernelspec": { + "display_name": ".venv", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.12" + } }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.12.12" - } - }, - "nbformat": 4, - "nbformat_minor": 5 + "nbformat": 4, + "nbformat_minor": 5 } diff --git a/python/pyref/io/__init__.py b/python/pyref/io/__init__.py index 7af1ffa..c263937 100644 --- a/python/pyref/io/__init__.py +++ b/python/pyref/io/__init__.py @@ -22,6 +22,15 @@ ------------------------------- - :func:`~pyref.io.read_beamtime`: Ingest (optional) and load one beamtime's samples, scans, and frames. +- :func:`~pyref.io.read_beamtime_local`: Load an already-ingested beamtime without + re-ingesting from NAS. +- :func:`~pyref.io.select_beamtime_frames`: Filter beamtime rows by sample, + tag, and scan. +- :func:`~pyref.io.apply_scan_overrides`: Apply sample/tag/notes overrides across scans. +- :func:`~pyref.io.summarize_beamtime_scans`: Per-scan theta/energy ranges and + classification. +- :func:`~pyref.io.set_beamtime_scan_types`: Persist per-scan fixed-energy/ + fixed-angle type. - :func:`~pyref.io.list_beamtimes`: Enumerate beamtime roots stored in the catalog. - :func:`~pyref.io.resolve_catalog_path`: Beamtime catalog database path (Rust-aligned). - :func:`~pyref.io.classify_reflectivity_scan_type`: Theta vs energy scan @@ -46,13 +55,18 @@ from pyref.io.beamtime import ( BeamtimeCatalogView, BeamtimeEntriesView, + apply_scan_overrides, beamtime_entries, ingest_beamtime_with_rich_progress, list_beamtimes, naming_qc_from_frames, naming_qc_with_db_parse_flags, read_beamtime, + read_beamtime_local, scan_from_catalog_for_beamtime, + select_beamtime_frames, + set_beamtime_scan_types, + summarize_beamtime_scans, ) from pyref.io.catalog_path import resolve_catalog_path from pyref.io.experiment_names import ( @@ -79,12 +93,14 @@ resolve_fits_paths, scan_experiment, set_override, + set_scan_type_for_beamtime_scan, ) __all__ = [ "BeamtimeCatalogView", "BeamtimeEntriesView", "ParsedFitsName", + "apply_scan_overrides", "beamtime_entries", "beamtime_ingest_layout", "build_catalog", @@ -105,6 +121,7 @@ "parse_fits_stem", "query_catalog", "read_beamtime", + "read_beamtime_local", "read_experiment", "read_fits", "resolve_catalog_path", @@ -112,5 +129,9 @@ "scan_experiment", "scan_from_catalog_for_beamtime", "scan_view", + "select_beamtime_frames", + "set_beamtime_scan_types", "set_override", + "set_scan_type_for_beamtime_scan", + "summarize_beamtime_scans", ] diff --git a/python/pyref/io/beamtime.py b/python/pyref/io/beamtime.py index ee43ed8..db3dcf2 100644 --- a/python/pyref/io/beamtime.py +++ b/python/pyref/io/beamtime.py @@ -11,13 +11,19 @@ import sqlite3 from dataclasses import dataclass from pathlib import Path -from typing import TYPE_CHECKING, Any +from typing import TYPE_CHECKING, Any, Literal, cast import polars as pl from pyref.io.catalog_path import resolve_catalog_path from pyref.io.experiment_names import parse_fits_stem -from pyref.io.readers import beamtime_ingest_layout, ingest_beamtime +from pyref.io.readers import ( + beamtime_ingest_layout, + classify_reflectivity_scan_type, + ingest_beamtime, + set_override, + set_scan_type_for_beamtime_scan, +) if TYPE_CHECKING: from collections.abc import Callable, Mapping @@ -25,6 +31,15 @@ from pyref.io.readers import FilePath +def _normalize_beamtime_path(beamtime_path: FilePath) -> Path: + raw = Path(beamtime_path).expanduser() + if raw.is_absolute(): + return raw.resolve() + if raw.parts and raw.parts[0] == "Volumes": + return Path("/").joinpath(*raw.parts).resolve() + return raw.resolve() + + def _rich_console_for_progress(): from rich.console import Console @@ -347,7 +362,7 @@ def scan_from_catalog_for_beamtime( filt["energy_max"] = energy_max return py_scan_from_catalog_for_beamtime( str(db), - str(Path(beamtime_path).resolve()), + str(_normalize_beamtime_path(beamtime_path)), filt if filt else None, ) @@ -377,7 +392,7 @@ def beamtime_entries( db = Path(catalog_path).resolve() else: db = resolve_catalog_path() - raw = py_beamtime_entries(str(db), str(Path(beamtime_path).resolve())) + raw = py_beamtime_entries(str(db), str(_normalize_beamtime_path(beamtime_path))) return BeamtimeEntriesView.from_py_dict(dict(raw)) @@ -431,7 +446,7 @@ def read_beamtime( BeamtimeCatalogView ``entries`` and ``frames`` scoped to ``beamtime_path``. """ - bt = Path(beamtime_path).resolve() + bt = _normalize_beamtime_path(beamtime_path) if catalog_path is not None: cat = Path(catalog_path).resolve() else: @@ -471,6 +486,299 @@ def read_beamtime( ) +def read_beamtime_local( + beamtime_path: FilePath, + *, + catalog_path: FilePath | None = None, + require_indexed: bool = True, +) -> BeamtimeCatalogView: + """ + Load one beamtime from local catalog/zarr state without ingesting from NAS. + + Parameters + ---------- + beamtime_path : str or pathlib.Path + Beamtime root directory key used at ingest time. + catalog_path : str or pathlib.Path, optional + Path to ``catalog.db`` for queries; default from :func:`resolve_catalog_path`. + require_indexed : bool, optional + When True, raise ``ValueError`` if this beamtime has no catalog entries. + + Returns + ------- + BeamtimeCatalogView + Beamtime-scoped catalog view loaded with ``ingest=False``. + """ + view = read_beamtime( + beamtime_path, + catalog_path=catalog_path, + ingest=False, + ) + if require_indexed and view.frames.height == 0 and not view.entries.scans: + msg = ( + f"beamtime is not indexed in catalog: {Path(beamtime_path).resolve()} " + f"(catalog={view.catalog_path})" + ) + raise ValueError(msg) + return view + + +def select_beamtime_frames( + beamtime_path: FilePath, + *, + catalog_path: FilePath | None = None, + sample_names: list[str] | None = None, + tags: list[str] | None = None, + scan_numbers: list[int] | None = None, +) -> pl.DataFrame: + """ + Return beamtime frames filtered by sample name, tag, and scan number. + + Parameters + ---------- + beamtime_path : str or pathlib.Path + Beamtime root directory key used at ingest time. + catalog_path : str or pathlib.Path, optional + Path to ``catalog.db`` for queries; default from :func:`resolve_catalog_path`. + sample_names : list of str, optional + Keep rows whose ``sample_name`` is in this list. + tags : list of str, optional + Keep rows whose ``tag`` is in this list. + scan_numbers : list of int, optional + Keep rows whose ``scan_number`` is in this list. + + Returns + ------- + polars.DataFrame + Filtered frame-level beamtime catalog view. + """ + frames = scan_from_catalog_for_beamtime( + beamtime_path, + catalog_path, + scan_numbers=scan_numbers, + ) + if sample_names is not None: + frames = frames.filter(pl.col("sample_name").is_in(sample_names)) + if tags is not None: + frames = frames.filter(pl.col("tag").is_in(tags)) + return frames + + +def apply_scan_overrides( + beamtime_path: FilePath, + *, + scan_numbers: list[int], + catalog_path: FilePath | None = None, + sample_name: str | None = None, + tag: str | None = None, + notes: str | None = None, + current_sample_names: list[str] | None = None, +) -> pl.DataFrame: + """ + Apply one sample/tag/notes override to every file in selected scans. + + Parameters + ---------- + beamtime_path : str or pathlib.Path + Beamtime root directory key used at ingest time. + scan_numbers : list of int + Scan numbers to update. + catalog_path : str or pathlib.Path, optional + Path to ``catalog.db``; default from :func:`resolve_catalog_path`. + sample_name : str, optional + Replacement sample name for every selected file. + tag : str, optional + Replacement tag for every selected file. + notes : str, optional + Replacement notes for every selected file. + current_sample_names : list of str, optional + Additional guard: only update rows currently matching these sample names. + + Returns + ------- + polars.DataFrame + Distinct rows updated with columns ``scan_number``, ``file_path``, + ``sample_name``, and ``tag``. + """ + if sample_name is None and tag is None and notes is None: + msg = "at least one of sample_name, tag, or notes must be provided" + raise ValueError(msg) + if not scan_numbers: + msg = "scan_numbers must contain at least one scan number" + raise ValueError(msg) + cat = ( + Path(catalog_path).resolve() + if catalog_path is not None + else resolve_catalog_path() + ) + rows = scan_from_catalog_for_beamtime( + beamtime_path, + cat, + scan_numbers=scan_numbers, + ) + if current_sample_names is not None: + rows = rows.filter(pl.col("sample_name").is_in(current_sample_names)) + targets = ( + rows.select("scan_number", "file_path", "sample_name", "tag") + .unique() + .sort(["scan_number", "file_path"]) + ) + for path in targets.get_column("file_path").to_list(): + set_override( + cat, + str(path), + sample_name=sample_name, + tag=tag, + notes=notes, + ) + return targets + + +def summarize_beamtime_scans( + beamtime_path: FilePath, + *, + catalog_path: FilePath | None = None, + scan_numbers: list[int] | None = None, + sample_names: list[str] | None = None, + tags: list[str] | None = None, +) -> pl.DataFrame: + """ + Summarize theta/energy ranges and scan classification per scan. + + Parameters + ---------- + beamtime_path : str or pathlib.Path + Beamtime root directory key used at ingest time. + catalog_path : str or pathlib.Path, optional + Path to ``catalog.db`` for queries; default from :func:`resolve_catalog_path`. + scan_numbers : list of int, optional + Restrict summary to these scan numbers. + sample_names : list of str, optional + Restrict rows to these sample names before summary. + tags : list of str, optional + Restrict rows to these tags before summary. + + Returns + ------- + polars.DataFrame + Columns ``scan_number``, ``n_frames``, ``sample_names``, ``tags``, + ``energy_min``, ``energy_max``, ``theta_min``, ``theta_max``, + ``inferred_scan_type``, and ``catalog_scan_type``. + """ + rows = select_beamtime_frames( + beamtime_path, + catalog_path=catalog_path, + sample_names=sample_names, + tags=tags, + scan_numbers=scan_numbers, + ) + if rows.height == 0: + return pl.DataFrame( + schema={ + "scan_number": pl.Int64, + "n_frames": pl.Int64, + "sample_names": pl.List(pl.String), + "tags": pl.List(pl.String), + "energy_min": pl.Float64, + "energy_max": pl.Float64, + "theta_min": pl.Float64, + "theta_max": pl.Float64, + "inferred_scan_type": pl.String, + "catalog_scan_type": pl.String, + } + ) + summaries: list[dict[str, Any]] = [] + for scan_df in rows.partition_by("scan_number", maintain_order=True): + scan_number = int(scan_df.get_column("scan_number")[0]) + energies = scan_df.get_column("Beamline Energy").to_list() + thetas = scan_df.get_column("Sample Theta").to_list() + pairs = list(zip(energies, thetas, strict=False)) + inferred, e_min, e_max, t_min, t_max = classify_reflectivity_scan_type(pairs) + if "catalog_scan_type" in scan_df.columns: + scan_types = ( + scan_df.get_column("catalog_scan_type") + .drop_nulls() + .unique() + .to_list() + ) + else: + scan_types = [] + catalog_scan_type = str(scan_types[0]) if scan_types else None + sample_values = ( + scan_df.get_column("sample_name") + .drop_nulls() + .unique() + .sort() + .to_list() + ) + tag_values = ( + scan_df.get_column("tag") + .drop_nulls() + .unique() + .sort() + .to_list() + ) + summaries.append( + { + "scan_number": scan_number, + "n_frames": scan_df.height, + "sample_names": [str(x) for x in sample_values], + "tags": [str(x) for x in tag_values], + "energy_min": e_min, + "energy_max": e_max, + "theta_min": t_min, + "theta_max": t_max, + "inferred_scan_type": inferred, + "catalog_scan_type": catalog_scan_type, + } + ) + return pl.DataFrame(summaries).sort("scan_number") + + +def set_beamtime_scan_types( + beamtime_path: FilePath, + scan_type_by_scan: Mapping[int, str], + *, + catalog_path: FilePath | None = None, +) -> pl.DataFrame: + """ + Persist manual scan classifications for one beamtime. + + Parameters + ---------- + beamtime_path : str or pathlib.Path + Beamtime root directory key used at ingest time. + scan_type_by_scan : mapping of int to str + Mapping from scan number to scan type (`fixed_energy` or `fixed_angle`). + catalog_path : str or pathlib.Path, optional + Path to ``catalog.db``; default from :func:`resolve_catalog_path`. + + Returns + ------- + polars.DataFrame + Two columns: ``scan_number`` and ``scan_type`` for rows written. + """ + if not scan_type_by_scan: + msg = "scan_type_by_scan must contain at least one entry" + raise ValueError(msg) + cat = ( + Path(catalog_path).resolve() + if catalog_path is not None + else resolve_catalog_path() + ) + bt = Path(beamtime_path).resolve() + rows: list[dict[str, Any]] = [] + for scan_number, scan_type in sorted(scan_type_by_scan.items()): + set_scan_type_for_beamtime_scan( + cat, + bt, + int(scan_number), + cast("Literal['fixed_energy', 'fixed_angle']", scan_type), + ) + rows.append({"scan_number": int(scan_number), "scan_type": str(scan_type)}) + return pl.DataFrame(rows) + + def _stem_from_catalog_file_name(name: str) -> str: return Path(name).stem if name.lower().endswith(".fits") else name @@ -568,10 +876,15 @@ def naming_qc_with_db_parse_flags( __all__ = [ "BeamtimeCatalogView", "BeamtimeEntriesView", + "apply_scan_overrides", "beamtime_entries", "list_beamtimes", "naming_qc_from_frames", "naming_qc_with_db_parse_flags", "read_beamtime", + "read_beamtime_local", "scan_from_catalog_for_beamtime", + "select_beamtime_frames", + "set_beamtime_scan_types", + "summarize_beamtime_scans", ] diff --git a/python/pyref/io/catalog_path.py b/python/pyref/io/catalog_path.py index 64725f2..8da6a07 100644 --- a/python/pyref/io/catalog_path.py +++ b/python/pyref/io/catalog_path.py @@ -2,9 +2,11 @@ Resolve the global SQLite catalog path. The catalog is a single database shared across beamtimes. Its default location is -``/catalog.db``, where ``pyref_data_dir`` is ``$PYREF_HOME`` when that -environment variable is set (created if missing), or the platform user data directory -subdirectory ``pyref`` (for example macOS ``~/Library/Application Support/pyref``). +``$XDG_CONFIG_HOME/pyref/catalog.db`` when ``XDG_CONFIG_HOME`` is set, otherwise +``~/.config/pyref/catalog.db`` (Unix-like under the user home on all platforms). When +``PYREF_HOME`` is set, the default becomes ``/catalog.db``. The beamtime zarr +cache remains under the platform user data directory (see Rust ``pyref_data_dir``), not +next to this config path. Optional overrides (Rust IO layer): ``PYREF_CATALOG_DB`` forces the catalog file path; ``PYREF_CACHE_ROOT`` sets the parent directory of each ``/beamtime.zarr`` diff --git a/python/pyref/io/readers.py b/python/pyref/io/readers.py index 51284f9..837f0a1 100644 --- a/python/pyref/io/readers.py +++ b/python/pyref/io/readers.py @@ -382,6 +382,36 @@ def set_override( ) +def set_scan_type_for_beamtime_scan( + catalog_path: FilePath, + beamtime_path: FilePath, + scan_number: int, + scan_type: Literal["fixed_energy", "fixed_angle"], +) -> None: + """ + Persist scan classification for one scan in one beamtime. + + Parameters + ---------- + catalog_path : str or pathlib.Path + Path to the catalog SQLite database. + beamtime_path : str or pathlib.Path + Beamtime root directory used to scope the scan lookup. + scan_number : int + Scan number within ``beamtime_path``. + scan_type : {"fixed_energy", "fixed_angle"} + Classification to store in ``scans.scan_type``. + """ + from pyref.pyref import py_set_scan_type_for_beamtime_scan + + py_set_scan_type_for_beamtime_scan( + str(Path(catalog_path).resolve()), + str(Path(beamtime_path).resolve()), + int(scan_number), + scan_type, + ) + + def classify_reflectivity_scan_type( pairs: list[tuple[float | None, float | None]], ) -> tuple[str, float | None, float | None, float | None, float | None]: diff --git a/src/bin/migrate_zarr_3d.rs b/src/bin/migrate_zarr_3d.rs new file mode 100644 index 0000000..053fc36 --- /dev/null +++ b/src/bin/migrate_zarr_3d.rs @@ -0,0 +1,389 @@ +#![cfg(feature = "catalog")] + +use std::collections::HashMap; +use std::io::Cursor; +use std::path::PathBuf; +use std::sync::Arc; +use std::time::Instant; + +use diesel::prelude::*; +use pyref::catalog::db; +use pyref::catalog::paths; +use pyref::catalog::zarr_write::{ + prepare_shape_scan_bucket_arrays, scan_raw_array_path, shape_bucket_key, ShapeScanBucketSpec, + ZARR_U16_ZSTD_LEVEL, +}; +use pyref::schema::{beamtimes, files, frames}; +use zarrs::array::{Array, ArraySubset}; +use zarrs::storage::{ReadableWritableListableStorage, ReadableWritableListableStorageTraits}; + +#[derive(Debug, Clone)] +struct CliOptions { + db_path: Option, + beamtime_id: Option, + dry_run: bool, + keep_legacy: bool, +} + +#[derive(Debug, Queryable)] +struct BeamtimeRow { + id: i32, + zarr_path: String, +} + +#[derive(Debug, Queryable)] +struct FrameRow { + id: i32, + zarr_group_key: i32, + zarr_frame_index: i32, +} + +#[derive(Debug, Clone)] +struct FramePlan { + frame_id: i32, + group_key: i32, + frame_index: i32, + shape_bucket: String, + bucket_frame_index: i32, + height: usize, + width: usize, +} + +const ETA_SAMPLE_FRAMES: usize = 8; + +fn parse_args() -> Result { + let mut args = std::env::args().skip(1); + let mut out = CliOptions { + db_path: None, + beamtime_id: None, + dry_run: false, + keep_legacy: false, + }; + while let Some(arg) = args.next() { + match arg.as_str() { + "--db" => { + let Some(v) = args.next() else { + return Err("--db requires a path".into()); + }; + out.db_path = Some(PathBuf::from(v)); + } + "--beamtime-id" => { + let Some(v) = args.next() else { + return Err("--beamtime-id requires an integer value".into()); + }; + let parsed = v + .parse::() + .map_err(|_| format!("invalid --beamtime-id value: {v}"))?; + out.beamtime_id = Some(parsed); + } + "--dry-run" => out.dry_run = true, + "--keep-legacy" => out.keep_legacy = true, + "--help" | "-h" => { + return Err( + "Usage: migrate-zarr-3d [--db ] [--beamtime-id ] [--dry-run] [--keep-legacy]" + .into(), + ); + } + other => return Err(format!("unknown argument: {other}")), + } + } + Ok(out) +} + +fn shuffle_encode_zarr_bytes(decoded: &[u8], elementsize: usize) -> Vec { + let mut encoded_value = decoded.to_vec(); + let count = encoded_value.len() / elementsize; + for i in 0..count { + let offset = i * elementsize; + for byte_index in 0..elementsize { + let j = byte_index * count + i; + encoded_value[j] = decoded[offset + byte_index]; + } + } + encoded_value +} + +fn shuffle_zstd_compressed_len_u16(pixels: &[u16]) -> Result { + let mut le = Vec::with_capacity(pixels.len() * 2); + for &v in pixels { + le.extend_from_slice(&v.to_le_bytes()); + } + let shuffled = shuffle_encode_zarr_bytes(&le, 2); + zstd::encode_all(Cursor::new(shuffled), ZARR_U16_ZSTD_LEVEL) + .map(|v| v.len()) + .map_err(|e| e.to_string()) +} + +fn load_legacy_frame( + store: &ReadableWritableListableStorage, + group_key: i32, + frame_index: i32, +) -> Result< + Option<( + Array, + usize, + usize, + )>, + String, +> { + let path = format!("/{group_key}/{frame_index:05}/raw"); + let Ok(array) = Array::open(store.clone(), &path) else { + return Ok(None); + }; + let shape = array.shape().to_vec(); + if shape.len() != 2 { + return Ok(None); + } + Ok(Some((array, shape[0] as usize, shape[1] as usize))) +} + +fn sample_frame_indices(frame_count: usize, max_samples: usize) -> Vec { + if frame_count == 0 { + return Vec::new(); + } + let k = max_samples.min(frame_count).max(1); + if k == 1 { + return vec![0]; + } + (0..k).map(|i| i * (frame_count - 1) / (k - 1)).collect() +} + +fn format_duration_hms(secs: f64) -> String { + if secs < 60.0 { + return format!("{secs:.0}s"); + } + if secs < 3600.0 { + let m = (secs / 60.0).floor() as u64; + let s = secs - (m as f64) * 60.0; + return format!("{m}m {s:.0}s"); + } + let h = (secs / 3600.0).floor() as u64; + let rem = secs - (h as f64) * 3600.0; + let m = (rem / 60.0).floor() as u64; + format!("{h}h {m}m") +} + +fn retrieve_legacy_pixels_i32( + array: &Array, + height: usize, + width: usize, +) -> Result, String> { + let subset_region = ArraySubset::new_with_ranges(&[0..height as u64, 0..width as u64]); + let subset: Vec = array + .retrieve_array_subset::>(&subset_region) + .map_err(|e| e.to_string())?; + Ok(subset) +} + +fn migrate_beamtime( + conn: &mut SqliteConnection, + beamtime: &BeamtimeRow, + options: &CliOptions, +) -> Result<(), String> { + let zarr_root = PathBuf::from(&beamtime.zarr_path); + if !zarr_root.exists() { + println!( + "beamtime {}: zarr store missing at {}, skipping", + beamtime.id, + zarr_root.display() + ); + return Ok(()); + } + let store: ReadableWritableListableStorage = + Arc::new(zarrs::filesystem::FilesystemStore::new(&zarr_root).map_err(|e| e.to_string())?); + let frame_rows: Vec = frames::table + .inner_join(files::table.on(files::id.eq(frames::file_id))) + .filter(files::beamtime_id.eq(beamtime.id)) + .select((frames::id, frames::zarr_group_key, frames::zarr_frame_index)) + .order(( + frames::zarr_group_key.asc(), + frames::zarr_frame_index.asc(), + frames::id.asc(), + )) + .load(conn) + .map_err(|e| e.to_string())?; + if frame_rows.is_empty() { + return Ok(()); + } + + let mut specs_by_combo: HashMap<(String, i32), ShapeScanBucketSpec> = HashMap::new(); + let mut plans: Vec = Vec::new(); + let mut next_idx: HashMap<(String, i32), i32> = HashMap::new(); + for row in &frame_rows { + let Some((_array, h, w)) = + load_legacy_frame(&store, row.zarr_group_key, row.zarr_frame_index)? + else { + continue; + }; + let bucket = shape_bucket_key(h, w); + let gk = row.zarr_group_key; + let combo = (bucket.clone(), gk); + let idx = next_idx.entry(combo.clone()).or_insert(0); + plans.push(FramePlan { + frame_id: row.id, + group_key: gk, + frame_index: row.zarr_frame_index, + shape_bucket: bucket.clone(), + bucket_frame_index: *idx, + height: h, + width: w, + }); + *idx += 1; + specs_by_combo + .entry(combo) + .and_modify(|s| s.frames += 1) + .or_insert(ShapeScanBucketSpec { + shape_bucket: bucket, + scan_number: gk, + height: h, + width: w, + frames: 1, + }); + } + if plans.is_empty() { + println!("beamtime {}: no legacy frames found", beamtime.id); + return Ok(()); + } + let mut specs: Vec = specs_by_combo.into_values().collect(); + specs.sort_by(|a, b| { + (a.shape_bucket.as_str(), a.scan_number).cmp(&(b.shape_bucket.as_str(), b.scan_number)) + }); + if !options.dry_run { + prepare_shape_scan_bucket_arrays(&store, &specs).map_err(|e| e.to_string())?; + } + + let mut migrated_frames = 0usize; + if options.dry_run { + migrated_frames = plans.len(); + let total_pixels: u128 = plans.iter().map(|p| (p.height * p.width) as u128).sum(); + let gib = 1024.0_f64.powi(3); + let legacy_read_gib = (total_pixels as f64 * 4.0) / gib; + let new_write_gib = (total_pixels as f64 * 2.0) / gib; + let mpix = total_pixels as f64 / 1_000_000.0; + let sample_idxs = sample_frame_indices(plans.len(), ETA_SAMPLE_FRAMES); + let mut sample_time_secs = 0.0_f64; + let mut sample_pixels: u128 = 0; + let mut sample_ok: usize = 0; + let mut sample_raw_u16_bytes: u128 = 0; + let mut sample_compressed_bytes: u128 = 0; + for &idx in &sample_idxs { + let plan = &plans[idx]; + let Some((legacy_array, _, _)) = + load_legacy_frame(&store, plan.group_key, plan.frame_index)? + else { + continue; + }; + let t0 = Instant::now(); + let legacy = retrieve_legacy_pixels_i32(&legacy_array, plan.height, plan.width)?; + let converted: Vec = legacy.into_iter().map(|v| (v as i16) as u16).collect(); + sample_time_secs += t0.elapsed().as_secs_f64(); + sample_pixels += (plan.height * plan.width) as u128; + sample_ok += 1; + let raw_b = converted.len() * 2; + sample_raw_u16_bytes += raw_b as u128; + sample_compressed_bytes += shuffle_zstd_compressed_len_u16(&converted)? as u128; + } + let eta_note = if sample_pixels > 0 && sample_time_secs > 0.0 { + let scaled = sample_time_secs * (total_pixels as f64 / sample_pixels as f64); + let wall = format_duration_hms(scaled); + format!( + "estimated wall time ~{wall} (decode+u16 remap from {sample_ok} sample frames; omits DB updates, Zarr chunk headers, legacy removal)", + ) + } else { + "estimated wall time unavailable (samples missing or zero timing)".to_string() + }; + let compress_note = if sample_raw_u16_bytes > 0 && sample_compressed_bytes > 0 { + let ratio = sample_compressed_bytes as f64 / sample_raw_u16_bytes as f64; + let est_gib = (new_write_gib * 1024.0_f64.powi(3) * ratio) / 1024.0_f64.powi(3); + format!( + "shuffle+u16 Zstd level {ZARR_U16_ZSTD_LEVEL} on {sample_ok} sample frames: ~{:.2}% of raw uint16 (~{:.2} GiB vs ~{:.2} GiB); on-disk Zarr may differ slightly", + ratio * 100.0, + est_gib, + new_write_gib + ) + } else { + "compression sample unavailable".to_string() + }; + println!( + "beamtime {}: dry-run OK, {} frames -> {} shape x scan arrays, {:.2} Mpix total", + beamtime.id, + migrated_frames, + specs.len(), + mpix + ); + println!( + " resources: ~{legacy_read_gib:.2} GiB legacy i32 read, ~{new_write_gib:.2} GiB uint16 payload (uncompressed)", + ); + println!(" {compress_note}"); + println!(" {eta_note}"); + return Ok(()); + } + for plan in &plans { + let Some((legacy_array, _, _)) = + load_legacy_frame(&store, plan.group_key, plan.frame_index)? + else { + continue; + }; + let legacy = retrieve_legacy_pixels_i32(&legacy_array, plan.height, plan.width)?; + let converted: Vec = legacy.into_iter().map(|v| (v as i16) as u16).collect(); + let bucket_path = scan_raw_array_path(&plan.shape_bucket, plan.group_key); + let bucket_array = Array::open(store.clone(), &bucket_path).map_err(|e| e.to_string())?; + let subset = ArraySubset::new_with_start_shape( + vec![plan.bucket_frame_index as u64, 0_u64, 0_u64], + vec![1_u64, plan.height as u64, plan.width as u64], + ) + .map_err(|e| e.to_string())?; + bucket_array + .store_array_subset(&subset, converted) + .map_err(|e| e.to_string())?; + diesel::update(frames::table.filter(frames::id.eq(plan.frame_id))) + .set(( + frames::zarr_shape_bucket.eq(Some(plan.shape_bucket.as_str())), + frames::zarr_bucket_frame_index.eq(Some(plan.bucket_frame_index)), + )) + .execute(conn) + .map_err(|e| e.to_string())?; + if !options.keep_legacy { + let raw_dir = zarr_root + .join(plan.group_key.to_string()) + .join(format!("{:05}", plan.frame_index)) + .join("raw"); + if raw_dir.exists() { + let _ = std::fs::remove_dir_all(&raw_dir); + } + } + migrated_frames += 1; + } + println!( + "beamtime {}: migrated {} frames into {} per-scan shape bucket arrays", + beamtime.id, + migrated_frames, + specs.len(), + ); + Ok(()) +} + +fn main() -> Result<(), Box> { + let options = parse_args().map_err(std::io::Error::other)?; + let db_path = if let Some(path) = options.db_path.clone() { + path + } else { + paths::default_catalog_db_path()? + }; + let mut conn = db::establish_connection(&db_path)?; + let mut beamtimes_q = beamtimes::table + .select((beamtimes::id, beamtimes::zarr_path)) + .into_boxed(); + if let Some(beamtime_id) = options.beamtime_id { + beamtimes_q = beamtimes_q.filter(beamtimes::id.eq(beamtime_id)); + } + let rows: Vec = beamtimes_q.load(&mut conn).map_err(std::io::Error::other)?; + if rows.is_empty() { + println!("no beamtimes selected"); + return Ok(()); + } + for beamtime in &rows { + migrate_beamtime(&mut conn, beamtime, &options).map_err(std::io::Error::other)?; + } + Ok(()) +} diff --git a/src/catalog/ingest.rs b/src/catalog/ingest.rs index 9c35b8f..2854a61 100644 --- a/src/catalog/ingest.rs +++ b/src/catalog/ingest.rs @@ -40,7 +40,10 @@ use super::ingest_progress::{ IngestProgressSink, }; use super::parallelism::IngestParallelism; -use super::zarr_write::{open_zarr_store, write_frame_raw}; +use super::zarr_write::{ + open_zarr_store, prepare_shape_scan_bucket_arrays, shape_bucket_key, + write_scan_shape_bucket_frame_raw, ShapeScanBucketSpec, +}; use super::{db, paths, CatalogError, Result}; /// Optional subset of scans to ingest (disk order is ascending scan number; explicit @@ -176,7 +179,61 @@ pub const DEFAULT_INGEST_HEADER_ITEMS: &[&str] = &[ "Beam Current", ]; -fn read_image_i32(row: &BtIngestRow) -> Result> { +#[derive(Debug, Clone, PartialEq, Eq)] +struct FrameZarrAssignment { + shape_bucket: String, + scan_number: i32, + bucket_frame_index: i32, +} + +fn build_frame_zarr_plan( + rows: &[BtIngestRow], +) -> (Vec, Vec) { + let mut combo_counts: HashMap<(String, i32), usize> = HashMap::new(); + let mut combo_dims: HashMap<(String, i32), (usize, usize)> = HashMap::new(); + for row in rows { + let height = row.naxis2 as usize; + let width = row.naxis1 as usize; + let bucket = shape_bucket_key(height, width); + let scan_number = row.scan_number as i32; + let key = (bucket.clone(), scan_number); + *combo_counts.entry(key.clone()).or_insert(0) += 1; + combo_dims.entry(key).or_insert((height, width)); + } + let mut combos: Vec<(String, i32)> = combo_counts.keys().cloned().collect(); + combos.sort_by(|a, b| (a.0.as_str(), a.1).cmp(&(b.0.as_str(), b.1))); + let specs: Vec = combos + .iter() + .map(|(bucket, scan_number)| { + let key = &(bucket.clone(), *scan_number); + let (height, width) = combo_dims[key]; + ShapeScanBucketSpec { + shape_bucket: bucket.clone(), + scan_number: *scan_number, + height, + width, + frames: combo_counts[key], + } + }) + .collect(); + let mut next_idx: HashMap<(String, i32), usize> = HashMap::new(); + let mut assignments: Vec = Vec::with_capacity(rows.len()); + for row in rows { + let bucket = shape_bucket_key(row.naxis2 as usize, row.naxis1 as usize); + let scan_number = row.scan_number as i32; + let key = (bucket.clone(), scan_number); + let idx = next_idx.entry(key).or_insert(0); + assignments.push(FrameZarrAssignment { + shape_bucket: bucket, + scan_number, + bucket_frame_index: *idx as i32, + }); + *idx += 1; + } + (assignments, specs) +} + +fn read_image_u16(row: &BtIngestRow) -> Result> { if row.bitpix != 16 { return Err(CatalogError::Validation(format!( "unsupported BITPIX {} for zarr (expected 16): {}", @@ -187,9 +244,9 @@ fn read_image_i32(row: &BtIngestRow) -> Result> { let n = (row.naxis1 * row.naxis2) as usize; let buf = read_bitpix16_be_bytes(path, row.data_offset as u64, n * 2) .map_err(super::flatten_fits_error)?; - let out: Vec = buf + let out: Vec = buf .chunks_exact(2) - .map(|c| i16::from_be_bytes([c[0], c[1]]) as i32) + .map(|c| u16::from_be_bytes([c[0], c[1]])) .collect(); Array2::from_shape_vec((row.naxis2 as usize, row.naxis1 as usize), out) .map_err(|e| CatalogError::Validation(e.to_string())) @@ -311,6 +368,7 @@ fn insert_catalog_batch( conn: &mut diesel::SqliteConnection, ctx: &IngestContext<'_>, rows: &[BtIngestRow], + zarr_assignments: &[FrameZarrAssignment], start: usize, end: usize, sample_cache: &HashMap, @@ -354,6 +412,8 @@ fn insert_catalog_batch( if ctx.is_cancelled() { return Err(diesel::result::Error::RollbackTransaction); } + let row_index = start + local_idx; + let zarr_assignment = &zarr_assignments[row_index]; let sample_key = if row.sample_name.trim().is_empty() { "_".to_string() } else { @@ -440,6 +500,8 @@ fn insert_catalog_batch( frames::frame_number.eq(row.frame_number as i32), frames::zarr_group_key.eq(scan_no), frames::zarr_frame_index.eq(row.frame_number as i32), + frames::zarr_shape_bucket.eq(Some(zarr_assignment.shape_bucket.as_str())), + frames::zarr_bucket_frame_index.eq(Some(zarr_assignment.bucket_frame_index)), frames::acquired_at.eq(row.date_iso.clone()), frames::sample_x.eq(sx), frames::sample_y.eq(sy), @@ -484,6 +546,7 @@ fn run_catalog_phase( ctx: &IngestContext<'_>, conn: &mut diesel::SqliteConnection, rows: &[BtIngestRow], + zarr_assignments: &[FrameZarrAssignment], ) -> Result<()> { if let Some(sink) = ctx.progress { sink.emit(IngestProgress::Phase { @@ -504,6 +567,7 @@ fn run_catalog_phase( conn, ctx, rows, + zarr_assignments, start, end, &sample_cache, @@ -523,6 +587,8 @@ fn run_catalog_phase( fn run_zarr_phase( ctx: &IngestContext<'_>, rows: &[BtIngestRow], + zarr_assignments: &[FrameZarrAssignment], + bucket_specs: &[ShapeScanBucketSpec], zstore: &zarrs::storage::ReadableWritableListableStorage, ) -> Result<()> { if let Some(sink) = ctx.progress { @@ -533,7 +599,9 @@ fn run_zarr_phase( let n_workers = ctx.pool.current_num_threads(); let channel_cap = (n_workers.saturating_mul(2)).max(4); - let (tx, rx) = crossbeam_channel::bounded::)>>(channel_cap); + let (tx, rx) = crossbeam_channel::bounded::)>>(channel_cap); + prepare_shape_scan_bucket_arrays(zstore, bucket_specs) + .map_err(|e| CatalogError::Validation(e.to_string()))?; let stop = AtomicBool::new(false); let mut scan_done: HashMap = HashMap::new(); @@ -558,7 +626,7 @@ fn run_zarr_phase( if cancel_ref.is_some_and(|c| c.load(Ordering::Relaxed)) { return; } - let item = read_image_i32(row).map(|img| (row_i, img)); + let item = read_image_u16(row).map(|img| (row_i, img)); if tx_c.send(item).is_err() { stop_ref.store(true, Ordering::Relaxed); } @@ -574,8 +642,15 @@ fn run_zarr_phase( let step: Result<()> = (|| { let (row_i, img) = item?; let row = &rows[row_i]; - write_frame_raw(zstore, row.scan_number, row.frame_number, &img) - .map_err(|e| CatalogError::Validation(e.to_string()))?; + let zarr_assignment = &zarr_assignments[row_i]; + write_scan_shape_bucket_frame_raw( + zstore, + &zarr_assignment.shape_bucket, + zarr_assignment.scan_number, + zarr_assignment.bucket_frame_index as usize, + &img, + ) + .map_err(|e| CatalogError::Validation(e.to_string()))?; drop(img); let sn = row.scan_number as i32; let entry = scan_done.entry(sn).or_insert(0); @@ -845,12 +920,13 @@ fn ingest_beamtime_inner( }; let rows = run_headers_phase(&ctx, &paths_only, header_items)?; + let (zarr_assignments, bucket_specs) = build_frame_zarr_plan(&rows); let zstore = open_zarr_store(&zarr_path).map_err(|e| CatalogError::Validation(e.to_string()))?; - run_catalog_phase(&ctx, &mut conn, &rows)?; - run_zarr_phase(&ctx, &rows, &zstore)?; + run_catalog_phase(&ctx, &mut conn, &rows, &zarr_assignments)?; + run_zarr_phase(&ctx, &rows, &zarr_assignments, &bucket_specs, &zstore)?; let _ = incremental; Ok(db_path) @@ -872,7 +948,7 @@ mod tests { } #[test] - fn read_image_i32_bulk_read_decodes_minimal_fits() { + fn read_image_u16_bulk_read_decodes_minimal_fits() { let path = fixture_path(); if !path.exists() { panic!("required fixture missing: {}", path.display()); @@ -880,7 +956,7 @@ mod tests { let header_items: Vec = Vec::new(); let row = read_fits_headers_only_row(path, &header_items) .expect("minimal.fits fixture should parse into BtIngestRow"); - let img = read_image_i32(&row).expect("read_image_i32 failed on minimal.fits"); + let img = read_image_u16(&row).expect("read_image_u16 failed on minimal.fits"); let rows = row.naxis2 as usize; let cols = row.naxis1 as usize; assert_eq!(img.shape(), [rows, cols]); @@ -889,16 +965,16 @@ mod tests { assert_eq!(cols, 2, "fixture minimal.fits is a 2x2 image"); assert_eq!( img[[0, 0]], - 0_i32, + 0_u16, "first pixel (raw big-endian i16 -> i32)" ); - assert_eq!(img[[0, 1]], 1_i32, "row-major second pixel"); - assert_eq!(img[[1, 0]], 2_i32, "second row first pixel"); - assert_eq!(img[[1, 1]], 3_i32, "last pixel"); + assert_eq!(img[[0, 1]], 1_u16, "row-major second pixel"); + assert_eq!(img[[1, 0]], 2_u16, "second row first pixel"); + assert_eq!(img[[1, 1]], 3_u16, "last pixel"); } #[test] - fn read_image_i32_rejects_non_bitpix_16() { + fn read_image_u16_rejects_non_bitpix_16() { let path = fixture_path(); if !path.exists() { panic!("required fixture missing: {}", path.display()); @@ -907,7 +983,7 @@ mod tests { let mut row = read_fits_headers_only_row(path, &header_items) .expect("minimal.fits fixture should parse into BtIngestRow"); row.bitpix = 8; - match read_image_i32(&row) { + match read_image_u16(&row) { Err(CatalogError::Validation(msg)) => { assert!( msg.contains("unsupported BITPIX"), @@ -1172,13 +1248,21 @@ mod tests { ); let mut conn = db::establish_connection(&db_path).expect("open catalog db"); - let (scan_no, frame_no): (i32, i32) = files::table - .select((files::scan_number, files::frame_number)) + let shape_bucket: Option = frames::table + .select(frames::zarr_shape_bucket) + .first(&mut conn) + .expect("select shape bucket for only cataloged frame"); + let shape_bucket = shape_bucket.expect("zarr shape bucket should be set"); + let scan_no: i32 = files::table + .select(files::scan_number) .first(&mut conn) - .expect("select scan/frame of only cataloged file"); + .expect("select scan of only cataloged file"); let raw_path = zarr_root + .join("images") + .join("by_shape") + .join(&shape_bucket) + .join("scans") .join(scan_no.to_string()) - .join(format!("{frame_no:05}")) .join("raw"); assert!( raw_path.is_dir(), diff --git a/src/catalog/mod.rs b/src/catalog/mod.rs index 047e95d..373f887 100644 --- a/src/catalog/mod.rs +++ b/src/catalog/mod.rs @@ -12,7 +12,7 @@ mod parallelism; pub mod paths; mod query; mod reflectivity_profile; -mod zarr_write; +pub mod zarr_write; #[cfg(feature = "watch")] mod watch; @@ -42,7 +42,8 @@ pub use query::{ catalog_file_count, get_overrides, get_scan_point_uid_by_source_path, list_beamtime_entries, list_beamtime_entries_v2, list_beamtimes_from_catalog, query_files, query_scan_points, rename_file_in_catalog, scan_from_catalog, scan_from_catalog_for_beamtime, set_override, - update_beamspot, update_beamspot_scan_point, BeamtimeEntries, CatalogFilter, FileRow, + set_scan_type_for_beamtime_scan, update_beamspot, update_beamspot_scan_point, BeamtimeEntries, + CatalogFilter, FileRow, }; pub use reflectivity_profile::{ classify_scan_type, segment_reflectivity_profiles, ProfileSegment, ReflectivityScanType, diff --git a/src/catalog/models.rs b/src/catalog/models.rs index 41f4bb4..5d02ce2 100644 --- a/src/catalog/models.rs +++ b/src/catalog/models.rs @@ -14,6 +14,8 @@ pub struct FrameDb { pub frame_number: i32, pub zarr_group_key: i32, pub zarr_frame_index: i32, + pub zarr_shape_bucket: Option, + pub zarr_bucket_frame_index: Option, pub acquired_at: Option, pub sample_x: f64, pub sample_y: f64, diff --git a/src/catalog/paths.rs b/src/catalog/paths.rs index 45a4f70..10fcf39 100644 --- a/src/catalog/paths.rs +++ b/src/catalog/paths.rs @@ -1,9 +1,15 @@ -//! Platform catalog and zarr paths: ``PYREF_HOME`` override or XDG-style data directory. +//! Catalog and zarr paths. +//! +//! Default ``catalog.db`` lives under a Unix-like config tree in the user home on all platforms: +//! ``$XDG_CONFIG_HOME/pyref`` when ``XDG_CONFIG_HOME`` is set, otherwise ``~/.config/pyref`` +//! (e.g. ``C:\\Users\\name\\.config\\pyref`` on Windows). //! //! Overrides (optional, for ``set-catalog`` / ``set-cache`` style workflows): //! //! - ``PYREF_CATALOG_DB``: absolute path to ``catalog.db``. Parent directories are created when -//! missing. When set, ``default_catalog_db_path`` ignores ``PYREF_HOME`` for the DB file. +//! missing. When set, ``default_catalog_db_path`` ignores other defaults. +//! - ``PYREF_HOME``: directory used as the catalog parent when ``PYREF_CATALOG_DB`` is unset +//! (typically tests; catalog path is ``/catalog.db``). //! - ``PYREF_CACHE_ROOT``: directory under which each beamtime gets ``/beamtime.zarr``. //! When unset, zarr uses ``/.cache//beamtime.zarr``. @@ -15,8 +21,9 @@ use super::{CatalogError, Result}; const ENV_CATALOG_DB: &str = "PYREF_CATALOG_DB"; const ENV_CACHE_ROOT: &str = "PYREF_CACHE_ROOT"; +const ENV_XDG_CONFIG_HOME: &str = "XDG_CONFIG_HOME"; -/// Root directory for ``catalog.db`` and ``.cache//beamtime.zarr``. +/// Root directory for ``.cache//beamtime.zarr`` (not the catalog file). /// /// When the environment variable ``PYREF_HOME`` is set, returns that path (used in tests). /// Otherwise returns ``/pyref`` from the ``directories`` crate (e.g. macOS @@ -38,9 +45,37 @@ pub fn pyref_data_dir() -> Result { Ok(d) } +fn default_catalog_parent_dir() -> Result { + if let Ok(h) = std::env::var("PYREF_HOME") { + let p = PathBuf::from(h); + if !p.exists() { + fs::create_dir_all(&p).map_err(CatalogError::Io)?; + } + return Ok(p); + } + if let Ok(xdg) = std::env::var(ENV_XDG_CONFIG_HOME) { + if !xdg.is_empty() { + let d = PathBuf::from(xdg).join("pyref"); + if !d.exists() { + fs::create_dir_all(&d).map_err(CatalogError::Io)?; + } + return Ok(d); + } + } + let base = directories::BaseDirs::new() + .ok_or_else(|| CatalogError::Validation("could not resolve home directory".into()))?; + let d = base.home_dir().join(".config").join("pyref"); + if !d.exists() { + fs::create_dir_all(&d).map_err(CatalogError::Io)?; + } + Ok(d) +} + /// Absolute path to the global catalog database. /// -/// Honors ``PYREF_CATALOG_DB`` when set; otherwise ``/catalog.db``. +/// Honors ``PYREF_CATALOG_DB`` when set. Otherwise ``PYREF_HOME/catalog.db`` when ``PYREF_HOME`` is +/// set, or ``/catalog.db`` (``~/.config/pyref/catalog.db`` when +/// ``XDG_CONFIG_HOME`` is unset). pub fn default_catalog_db_path() -> Result { if let Ok(p) = std::env::var(ENV_CATALOG_DB) { let path = PathBuf::from(p); @@ -51,7 +86,7 @@ pub fn default_catalog_db_path() -> Result { } return Ok(path); } - Ok(pyref_data_dir()?.join("catalog.db")) + Ok(default_catalog_parent_dir()?.join("catalog.db")) } /// Stable SHA-256 hex digest of the canonical beamtime root path (for cache directory names). @@ -88,6 +123,24 @@ pub fn file_uri_for_path(path: &Path) -> Result { Ok(format!("file://{s}")) } +/// Logical URI for a beamtime path with offline-friendly fallback. +/// +/// Uses canonicalized absolute path when possible. If canonicalization fails and +/// the input is already absolute (for example, NAS mount unavailable), falls back +/// to the literal absolute path string. +pub fn file_uri_for_path_relaxed(path: &Path) -> Result { + match path.canonicalize() { + Ok(canon) => Ok(format!("file://{}", canon.to_string_lossy())), + Err(err) => { + if path.is_absolute() { + Ok(format!("file://{}", path.to_string_lossy())) + } else { + Err(CatalogError::Io(err)) + } + } + } +} + /// Resolves the catalog database path. The beamtime argument is accepted for API compatibility; /// the catalog is global and the path does not depend on it. pub fn resolve_catalog_path(_beamtime_dir: &Path) -> PathBuf { diff --git a/src/catalog/query.rs b/src/catalog/query.rs index d8fc5e3..9c40a11 100644 --- a/src/catalog/query.rs +++ b/src/catalog/query.rs @@ -46,7 +46,7 @@ pub struct FileRow { } fn beamtime_id_for_dir(conn: &mut SqliteConnection, beamtime_dir: &Path) -> Result> { - let uri = match paths::file_uri_for_path(beamtime_dir) { + let uri = match paths::file_uri_for_path_relaxed(beamtime_dir) { Ok(u) => u, Err(CatalogError::Io(_)) => return Ok(None), Err(e) => return Err(e), @@ -62,7 +62,7 @@ fn beamtime_id_for_dir(conn: &mut SqliteConnection, beamtime_dir: &Path) -> Resu pub fn catalog_file_count(db_path: &Path, beamtime_dir: Option<&Path>) -> Result { let mut conn = db::establish_connection(db_path)?; let n: i64 = if let Some(dir) = beamtime_dir { - let uri = paths::file_uri_for_path(dir)?; + let uri = paths::file_uri_for_path_relaxed(dir)?; files::table .inner_join(beamtimes::table.on(files::beamtime_id.eq(beamtimes::id))) .filter(beamtimes::nas_uri.eq(uri)) @@ -350,6 +350,11 @@ struct CatalogScanSql { tag: Option, scan_number: i32, frame_number: i32, + zarr_group_key: i32, + zarr_frame_index: i32, + zarr_shape_bucket: Option, + zarr_bucket_frame_index: Option, + zarr_path: String, date_iso: Option, beamline_energy: f64, sample_theta: f64, @@ -366,6 +371,7 @@ struct CatalogScanSql { beam_sigma: Option, reflectivity_profile_index: Option, reflectivity_scan_type: Option, + catalog_scan_type: Option, } impl QueryableByName for CatalogScanSql { @@ -383,6 +389,17 @@ impl QueryableByName for CatalogScanSql { tag: diesel::row::NamedRow::get::, Option>(row, "tag")?, scan_number: diesel::row::NamedRow::get::(row, "scan_number")?, frame_number: diesel::row::NamedRow::get::(row, "frame_number")?, + zarr_group_key: diesel::row::NamedRow::get::(row, "zarr_group_key")?, + zarr_frame_index: diesel::row::NamedRow::get::(row, "zarr_frame_index")?, + zarr_shape_bucket: diesel::row::NamedRow::get::, Option>( + row, + "zarr_shape_bucket", + )?, + zarr_bucket_frame_index: diesel::row::NamedRow::get::, Option>( + row, + "zarr_bucket_frame_index", + )?, + zarr_path: diesel::row::NamedRow::get::(row, "zarr_path")?, date_iso: diesel::row::NamedRow::get::, Option>( row, "date_iso", )?, @@ -410,6 +427,10 @@ impl QueryableByName for CatalogScanSql { row, "reflectivity_scan_type", )?, + catalog_scan_type: diesel::row::NamedRow::get::, Option>( + row, + "catalog_scan_type", + )?, }) } } @@ -429,6 +450,11 @@ fn build_scan_df_sql(beamtime_id: Option, filter: Option<&CatalogFilter>) - COALESCE(o.tag, (SELECT t.slug FROM file_tags ft JOIN tags t ON ft.tag_id = t.id WHERE ft.file_id = f.id ORDER BY t.slug LIMIT 1)) AS tag, sc.scan_number, fr.frame_number, + fr.zarr_group_key, + fr.zarr_frame_index, + fr.zarr_shape_bucket, + fr.zarr_bucket_frame_index, + bt.zarr_path, fr.acquired_at AS date_iso, fr.beamline_energy, fr.sample_theta, @@ -444,11 +470,13 @@ fn build_scan_df_sql(beamtime_id: Option, filter: Option<&CatalogFilter>) - bf.centroid_col AS beam_col, bf.fit_std AS beam_sigma, CAST(NULL AS INTEGER) AS reflectivity_profile_index, - CAST(NULL AS TEXT) AS reflectivity_scan_type + CAST(NULL AS TEXT) AS reflectivity_scan_type, + sc.scan_type AS catalog_scan_type FROM frames fr INNER JOIN files f ON fr.file_id = f.id INNER JOIN scans sc ON fr.scan_id = sc.id INNER JOIN samples s ON f.sample_id = s.id +INNER JOIN beamtimes bt ON f.beamtime_id = bt.id LEFT JOIN file_overrides o ON o.source_path = f.nas_uri LEFT JOIN beam_finding bf ON bf.frame_id = fr.id WHERE 1=1"#, @@ -499,6 +527,11 @@ fn catalog_scan_sql_rows_to_dataframe(rows: Vec) -> Result> = Vec::new(); let mut scan_number = Vec::new(); let mut frame_number = Vec::new(); + let mut zarr_group_key = Vec::new(); + let mut zarr_frame_index = Vec::new(); + let mut zarr_shape_bucket: Vec> = Vec::new(); + let mut zarr_bucket_frame_index: Vec> = Vec::new(); + let mut zarr_path = Vec::new(); let mut date: Vec> = Vec::new(); let mut beamline_energy = Vec::new(); let mut sample_theta = Vec::new(); @@ -515,6 +548,7 @@ fn catalog_scan_sql_rows_to_dataframe(rows: Vec) -> Result> = Vec::new(); let mut reflectivity_scan_type: Vec> = Vec::new(); + let mut catalog_scan_type: Vec> = Vec::new(); for r in rows { file_path.push(r.file_path); data_offset.push(r.data_offset); @@ -528,6 +562,11 @@ fn catalog_scan_sql_rows_to_dataframe(rows: Vec) -> Result) -> Result) -> Result) -> Result = series.into_iter().map(|s| s.into()).collect(); DataFrame::new(columns).map_err(|e| CatalogError::Validation(e.to_string())) @@ -816,6 +862,44 @@ pub fn set_override( Ok(()) } +pub fn set_scan_type_for_beamtime_scan( + db_path: &Path, + beamtime_dir: &Path, + scan_number: i64, + scan_type: &str, +) -> Result<()> { + if scan_type != "fixed_energy" && scan_type != "fixed_angle" { + return Err(CatalogError::Validation(format!( + "scan_type must be 'fixed_energy' or 'fixed_angle', got: {scan_type}" + ))); + } + let mut conn = db::establish_connection(db_path)?; + let bid = match beamtime_id_for_dir(&mut conn, beamtime_dir)? { + Some(id) => id, + None => { + return Err(CatalogError::Validation(format!( + "beamtime not found in catalog: {}", + beamtime_dir.display() + ))) + } + }; + let updated = diesel::update( + scans::table + .filter(scans::beamtime_id.eq(bid)) + .filter(scans::scan_number.eq(scan_number as i32)), + ) + .set(scans::scan_type.eq(scan_type)) + .execute(&mut conn) + .map_err(CatalogError::Diesel)?; + if updated == 0 { + return Err(CatalogError::Validation(format!( + "scan not found for beamtime={} scan_number={scan_number}", + beamtime_dir.display() + ))); + } + Ok(()) +} + pub fn rename_file_in_catalog( db_path: &Path, old_path: &str, @@ -879,6 +963,11 @@ fn scan_from_catalog_columns() -> Vec<&'static str> { "tag", "scan_number", "frame_number", + "zarr_group_key", + "zarr_frame_index", + "zarr_shape_bucket", + "zarr_bucket_frame_index", + "zarr_path", "DATE", "Beamline Energy", "Sample Theta", @@ -895,6 +984,7 @@ fn scan_from_catalog_columns() -> Vec<&'static str> { "beam_sigma", "reflectivity_profile_index", "reflectivity_scan_type", + "catalog_scan_type", ] } diff --git a/src/catalog/zarr_write.rs b/src/catalog/zarr_write.rs index b9d0cd1..9741f90 100644 --- a/src/catalog/zarr_write.rs +++ b/src/catalog/zarr_write.rs @@ -1,15 +1,39 @@ -//! Write per-frame detector arrays into the beamtime zarr store (layout ``/{scan}/{frame}/raw``). +//! Write detector arrays into the beamtime zarr store. +//! +//! Layout: legacy ``/{scan}/{frame}/raw`` (2D int32) may still exist for older +//! archives. New ingest writes **per-scan** 3D stacks at +//! ``/images/by_shape//scans//raw`` as ``uint16`` with +//! shuffle + Zstd so each scan compresses independently. use ndarray::Array2; use std::path::Path; use std::sync::Arc; use zarrs::array::data_type; +use zarrs::array::Array; use zarrs::array::ArrayBuilder; +use zarrs::array::ArraySubset; use zarrs::group::GroupBuilder; -use zarrs::storage::ReadableWritableListableStorage; +use zarrs::storage::{ReadableWritableListableStorage, ReadableWritableListableStorageTraits}; use crate::errors::FitsError; +const IMAGES_ROOT: &str = "/images"; +const BY_SHAPE_ROOT: &str = "/images/by_shape"; +const RAW_DATASET_NAME: &str = "raw"; +const SCANS_SEGMENT: &str = "scans"; +const DEFAULT_SHARD_FRAMES: u64 = 64; + +pub const ZARR_U16_ZSTD_LEVEL: i32 = 9; + +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct ShapeScanBucketSpec { + pub shape_bucket: String, + pub scan_number: i32, + pub height: usize, + pub width: usize, + pub frames: usize, +} + fn ensure_group(store: &ReadableWritableListableStorage, path: &str) -> Result<(), FitsError> { let group = GroupBuilder::new() .build(store.clone(), path) @@ -19,7 +43,10 @@ fn ensure_group(store: &ReadableWritableListableStorage, path: &str) -> Result<( .map_err(|e| FitsError::validation(e.to_string())) } -/// Opens or creates the filesystem zarr root at ``zarr_root`` (the ``beamtime.zarr`` directory). +pub fn scan_raw_array_path(shape_bucket: &str, scan_number: i32) -> String { + format!("{BY_SHAPE_ROOT}/{shape_bucket}/{SCANS_SEGMENT}/{scan_number}/{RAW_DATASET_NAME}") +} + pub fn open_zarr_store(zarr_root: &Path) -> Result { std::fs::create_dir_all(zarr_root).map_err(|e| FitsError::io("create zarr root", e))?; let store: ReadableWritableListableStorage = Arc::new( @@ -29,7 +56,89 @@ pub fn open_zarr_store(zarr_root: &Path) -> Result String { + format!("{height}x{width}") +} + +fn open_or_create_scan_bucket_array( + store: &ReadableWritableListableStorage, + spec: &ShapeScanBucketSpec, +) -> Result, FitsError> { + let path = scan_raw_array_path(&spec.shape_bucket, spec.scan_number); + if let Ok(array) = Array::open(store.clone(), &path) { + return Ok(array); + } + let n = spec.frames as u64; + let shard_frames = n.max(1).min(DEFAULT_SHARD_FRAMES); + let shape = vec![n, spec.height as u64, spec.width as u64]; + let chunk_shape = vec![shard_frames, spec.height as u64, spec.width as u64]; + let mut builder = ArrayBuilder::new(shape, chunk_shape, data_type::uint16(), 0u16); + builder.bytes_to_bytes_codecs(vec![ + Arc::new(zarrs::array::codec::ShuffleCodec::new(std::mem::size_of::< + u16, + >())), + Arc::new(zarrs::array::codec::ZstdCodec::new( + ZARR_U16_ZSTD_LEVEL, + false, + )), + ]); + builder.subchunk_shape(vec![1_u64, spec.height as u64, spec.width as u64]); + let array = builder + .build(store.clone(), &path) + .map_err(|e| FitsError::validation(e.to_string()))?; + array + .store_metadata() + .map_err(|e| FitsError::validation(e.to_string()))?; + Ok(array) +} + +pub fn prepare_shape_scan_bucket_arrays( + store: &ReadableWritableListableStorage, + specs: &[ShapeScanBucketSpec], +) -> Result<(), FitsError> { + ensure_group(store, "/")?; + ensure_group(store, IMAGES_ROOT)?; + ensure_group(store, BY_SHAPE_ROOT)?; + for spec in specs { + ensure_group(store, &format!("{BY_SHAPE_ROOT}/{}", spec.shape_bucket))?; + ensure_group( + store, + &format!("{BY_SHAPE_ROOT}/{}/{SCANS_SEGMENT}", spec.shape_bucket), + )?; + ensure_group( + store, + &format!( + "{BY_SHAPE_ROOT}/{}/{SCANS_SEGMENT}/{}", + spec.shape_bucket, spec.scan_number + ), + )?; + let _ = open_or_create_scan_bucket_array(store, spec)?; + } + Ok(()) +} + +pub fn write_scan_shape_bucket_frame_raw( + store: &ReadableWritableListableStorage, + shape_bucket: &str, + scan_number: i32, + bucket_frame_index: usize, + data: &Array2, +) -> Result<(), FitsError> { + let path = scan_raw_array_path(shape_bucket, scan_number); + let array = + Array::open(store.clone(), &path).map_err(|e| FitsError::validation(e.to_string()))?; + let subset = ArraySubset::new_with_start_shape( + vec![bucket_frame_index as u64, 0_u64, 0_u64], + vec![1_u64, data.nrows() as u64, data.ncols() as u64], + ) + .map_err(|e| FitsError::validation(e.to_string()))?; + let flat: Vec = data.iter().copied().collect(); + array + .store_array_subset(&subset, flat) + .map_err(|e| FitsError::validation(e.to_string())) +} + +#[allow(dead_code)] pub fn write_frame_raw( store: &ReadableWritableListableStorage, scan_number: i64, @@ -63,6 +172,7 @@ mod tests { use super::*; use ndarray::Array2; use tempfile::TempDir; + use walkdir::WalkDir; #[test] fn write_frame_raw_creates_only_raw_group() { @@ -91,4 +201,49 @@ mod tests { "expected no processed array at {proc_path:?}" ); } + + fn dir_size_bytes(path: &Path) -> u64 { + WalkDir::new(path) + .into_iter() + .filter_map(std::result::Result::ok) + .filter(|e| e.file_type().is_file()) + .filter_map(|e| e.metadata().ok()) + .map(|m| m.len()) + .sum() + } + + #[test] + fn bucketed_uint16_layout_uses_less_disk_than_legacy_per_frame_int32() { + let old_tmp = TempDir::new().expect("create old tempdir"); + let new_tmp = TempDir::new().expect("create new tempdir"); + let old_store = open_zarr_store(old_tmp.path()).expect("open old zarr store"); + let new_store = open_zarr_store(new_tmp.path()).expect("open new zarr store"); + let h = 64_usize; + let w = 64_usize; + let n = 16_usize; + let old_frame = Array2::from_elem((h, w), 512_i32); + for i in 0..n { + write_frame_raw(&old_store, 1, i as i64, &old_frame).expect("write legacy frame"); + } + let key = shape_bucket_key(h, w); + let specs = vec![ShapeScanBucketSpec { + shape_bucket: key.clone(), + scan_number: 1, + height: h, + width: w, + frames: n, + }]; + prepare_shape_scan_bucket_arrays(&new_store, &specs).expect("prepare bucket arrays"); + let new_frame = Array2::from_elem((h, w), 512_u16); + for i in 0..n { + write_scan_shape_bucket_frame_raw(&new_store, &key, 1, i, &new_frame) + .expect("write bucket frame"); + } + let old_bytes = dir_size_bytes(old_tmp.path()); + let new_bytes = dir_size_bytes(new_tmp.path()); + assert!( + new_bytes < old_bytes, + "expected bucketed layout to be smaller (new={new_bytes}, old={old_bytes})" + ); + } } diff --git a/src/io/image_mmap.rs b/src/io/image_mmap.rs index 990fe39..77bf0dd 100644 --- a/src/io/image_mmap.rs +++ b/src/io/image_mmap.rs @@ -1,7 +1,13 @@ use std::path::{Path, PathBuf}; +#[cfg(feature = "catalog")] +use std::sync::Arc; use ndarray::Array2; use polars::prelude::*; +#[cfg(feature = "catalog")] +use zarrs::array::{Array, ArraySubset}; +#[cfg(feature = "catalog")] +use zarrs::storage::ReadableWritableListableStorage; use super::blur::{gaussian_blur_f32_copy, i64_to_f32_array}; use super::raw_pixels::read_bitpix16_be_bytes; @@ -14,7 +20,62 @@ use crate::fits::HduList; type ImagePair = (Array2, Array2); +#[cfg(feature = "catalog")] +fn try_load_image_pixels_from_zarr(info: &ImageInfo) -> Result>, FitsError> { + let zarr_path = match &info.zarr_path { + Some(path) => path, + None => return Ok(None), + }; + let store: ReadableWritableListableStorage = Arc::new( + zarrs::filesystem::FilesystemStore::new(zarr_path) + .map_err(|e| FitsError::validation(e.to_string()))?, + ); + if let (Some(bucket), Some(bucket_idx), Some(scan_no)) = ( + &info.zarr_shape_bucket, + info.zarr_bucket_frame_index, + info.zarr_group_key, + ) { + let path = format!("/images/by_shape/{bucket}/scans/{scan_no}/raw"); + if let Ok(array) = Array::open(store.clone(), &path) { + let subset_region = ArraySubset::new_with_ranges(&[ + (bucket_idx as u64)..(bucket_idx as u64 + 1), + 0..(info.naxis2 as u64), + 0..(info.naxis1 as u64), + ]); + let subset: Vec = array + .retrieve_array_subset::>(&subset_region) + .map_err(|e| FitsError::validation(e.to_string()))?; + let flat: Vec = subset + .iter() + .map(|raw| (*raw as i16 as i64) + info.bzero) + .collect(); + let arr = Array2::from_shape_vec((info.naxis2, info.naxis1), flat) + .map_err(|e| FitsError::validation(e.to_string()))?; + return Ok(Some(arr)); + } + } + if let (Some(group_key), Some(frame_index)) = (info.zarr_group_key, info.zarr_frame_index) { + let path = format!("/{group_key}/{frame_index:05}/raw"); + if let Ok(array) = Array::open(store, &path) { + let subset_region = + ArraySubset::new_with_ranges(&[0..(info.naxis2 as u64), 0..(info.naxis1 as u64)]); + let subset: Vec = array + .retrieve_array_subset::>(&subset_region) + .map_err(|e| FitsError::validation(e.to_string()))?; + let flat: Vec = subset.iter().map(|value| *value as i64).collect(); + let arr = Array2::from_shape_vec((info.naxis2, info.naxis1), flat) + .map_err(|e| FitsError::validation(e.to_string()))?; + return Ok(Some(arr)); + } + } + Ok(None) +} + pub fn load_image_pixels(path: &Path, info: &ImageInfo) -> Result, FitsError> { + #[cfg(feature = "catalog")] + if let Ok(Some(data)) = try_load_image_pixels_from_zarr(info) { + return Ok(data); + } if info.bitpix != 16 { return Err(FitsError::unsupported( "Only BITPIX=16 image HDUs supported", diff --git a/src/io/mod.rs b/src/io/mod.rs index 8776484..c333db1 100644 --- a/src/io/mod.rs +++ b/src/io/mod.rs @@ -26,6 +26,11 @@ pub struct ImageInfo { pub naxis2: usize, pub bitpix: i32, pub bzero: i64, + pub zarr_path: Option, + pub zarr_shape_bucket: Option, + pub zarr_bucket_frame_index: Option, + pub zarr_group_key: Option, + pub zarr_frame_index: Option, } impl ImageInfo { @@ -42,6 +47,11 @@ impl ImageInfo { naxis2: h.naxis2, bitpix: h.bitpix, bzero, + zarr_path: None, + zarr_shape_bucket: None, + zarr_bucket_frame_index: None, + zarr_group_key: None, + zarr_frame_index: None, } } @@ -101,6 +111,36 @@ impl ImageInfo { .map_err(FitsError::from)? .get(row_index) .ok_or_else(|| FitsError::validation("bzero row missing or null"))?; + let zarr_path = df + .column("zarr_path") + .ok() + .and_then(|s| s.str().ok()) + .and_then(|c| c.get(row_index)) + .map(PathBuf::from); + let zarr_shape_bucket = df + .column("zarr_shape_bucket") + .ok() + .and_then(|s| s.str().ok()) + .and_then(|c| c.get(row_index)) + .map(std::string::ToString::to_string); + let zarr_bucket_frame_index = df + .column("zarr_bucket_frame_index") + .ok() + .and_then(|s| s.i64().ok()) + .and_then(|c| c.get(row_index)) + .map(|x| x as usize); + let zarr_group_key = df + .column("zarr_group_key") + .ok() + .and_then(|s| s.i64().ok()) + .and_then(|c| c.get(row_index)) + .map(|x| x as i32); + let zarr_frame_index = df + .column("zarr_frame_index") + .ok() + .and_then(|s| s.i64().ok()) + .and_then(|c| c.get(row_index)) + .map(|x| x as i32); Ok(ImageInfo { path, data_offset, @@ -108,6 +148,11 @@ impl ImageInfo { naxis2, bitpix, bzero, + zarr_path, + zarr_shape_bucket, + zarr_bucket_frame_index, + zarr_group_key, + zarr_frame_index, }) } } diff --git a/src/lib.rs b/src/lib.rs index 03ef363..a7c8fd9 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -50,9 +50,9 @@ mod extension { use crate::catalog::{ beamtime_ingest_layout, catalog_file_count, classify_scan_type, get_overrides, ingest_beamtime_with_progress_sink, list_beamtime_entries_v2, list_beamtimes_from_catalog, - paths, scan_from_catalog, scan_from_catalog_for_beamtime, set_override, CatalogFilter, - IngestParallelism, IngestProgress, IngestProgressSink, IngestSelection, - ReflectivityScanType, + paths, scan_from_catalog, scan_from_catalog_for_beamtime, set_override, + set_scan_type_for_beamtime_scan, CatalogFilter, IngestParallelism, IngestProgress, + IngestProgressSink, IngestSelection, ReflectivityScanType, }; #[global_allocator] @@ -668,6 +668,29 @@ mod extension { } } + #[cfg(feature = "catalog")] + #[pyfunction] + #[pyo3( + name = "py_set_scan_type_for_beamtime_scan", + signature = (db_path, beamtime_path, scan_number, scan_type), + text_signature = "(db_path, beamtime_path, scan_number, scan_type)" + )] + pub fn py_set_scan_type_for_beamtime_scan( + db_path: &str, + beamtime_path: &str, + scan_number: i64, + scan_type: &str, + ) -> PyResult<()> { + let db = std::path::Path::new(db_path); + let beam = std::path::Path::new(beamtime_path); + match set_scan_type_for_beamtime_scan(db, beam, scan_number, scan_type) { + Ok(()) => Ok(()), + Err(e) => Err(PyErr::new::( + e.to_string(), + )), + } + } + #[cfg(feature = "catalog")] fn reflectivity_scan_type_id(st: ReflectivityScanType) -> &'static str { match st { @@ -786,6 +809,10 @@ mod extension { m.add_function(pyo3::wrap_pyfunction!(py_list_beamtimes, m)?)?; m.add_function(pyo3::wrap_pyfunction!(py_get_overrides, m)?)?; m.add_function(pyo3::wrap_pyfunction!(py_set_override, m)?)?; + m.add_function(pyo3::wrap_pyfunction!( + py_set_scan_type_for_beamtime_scan, + m + )?)?; m.add_function(pyo3::wrap_pyfunction!(py_classify_scan_type, m)?)?; #[cfg(feature = "watch")] { diff --git a/src/schema.rs b/src/schema.rs index 1745721..80b065e 100644 --- a/src/schema.rs +++ b/src/schema.rs @@ -249,9 +249,9 @@ diesel::table! { /// header cards are stored in `frame_header_values`. /// /// Zarr retrieval: the monolithic beamtime archive is `beamtimes.zarr_path`. - /// Within the archive, raw images are at - /// `///raw`. Processed arrays are produced by - /// downstream processing, not ingest. + /// Within the archive, raw images are stored per scan in shape buckets at + /// `/images/by_shape/x/scans//raw` as 3D arrays + /// `(bucket_frame_index, y, x)` within that scan. frames (id) { id -> Integer, scan_id -> Integer, @@ -261,6 +261,10 @@ diesel::table! { zarr_group_key -> Integer, /// Dataset index within the zarr group, equal to the frame number. zarr_frame_index -> Integer, + /// Shape bucket key in the form `x`. + zarr_shape_bucket -> Nullable, + /// Dense frame index within the shape bucket dataset. + zarr_bucket_frame_index -> Nullable, /// ISO 8601 acquisition timestamp from the DATE header card. acquired_at -> Nullable, // --- first-class motor positions --- diff --git a/tests/test_catalog.py b/tests/test_catalog.py index 28ef22d..e15eb15 100644 --- a/tests/test_catalog.py +++ b/tests/test_catalog.py @@ -17,6 +17,7 @@ pytest.skip("catalog path export missing", allow_module_level=True) from pyref.io import ( + apply_scan_overrides, beamtime_ingest_layout, classify_reflectivity_scan_type, get_overrides, @@ -25,7 +26,9 @@ read_beamtime, scan_experiment, scan_from_catalog_for_beamtime, + set_beamtime_scan_types, set_override, + summarize_beamtime_scans, ) from pyref.io.catalog_path import resolve_catalog_path from pyref.io.readers import REQUIRED_SCAN_COLUMNS @@ -240,3 +243,81 @@ def test_read_beamtime_ingest_quiet(minimal_fits_dir: Path | None) -> None: show_progress=False, ) assert view.frames.height >= 1 + + +def test_apply_scan_overrides_updates_all_rows_for_scan( + minimal_fits_dir: Path | None, +) -> None: + if minimal_fits_dir is None: + pytest.skip("fixtures/minimal.fits not found") + db = ingest_beamtime(minimal_fits_dir, incremental=False) + rows = scan_from_catalog_for_beamtime(minimal_fits_dir, db) + if rows.height == 0: + pytest.skip("no rows in catalog") + scan_number = int(rows["scan_number"][0]) + updated = apply_scan_overrides( + minimal_fits_dir, + scan_numbers=[scan_number], + catalog_path=db, + sample_name="scan_level_sample", + tag="scan_level_tag", + ) + assert updated.height >= 1 + rows2 = scan_from_catalog_for_beamtime( + minimal_fits_dir, + db, + scan_numbers=[scan_number], + ) + assert rows2.height >= 1 + assert rows2["sample_name"].n_unique() == 1 + assert rows2["sample_name"][0] == "scan_level_sample" + assert rows2["tag"].n_unique() == 1 + assert rows2["tag"][0] == "scan_level_tag" + + +def test_summarize_beamtime_scans_reports_ranges_and_types( + minimal_fits_dir: Path | None, +) -> None: + if minimal_fits_dir is None: + pytest.skip("fixtures/minimal.fits not found") + db = ingest_beamtime(minimal_fits_dir, incremental=False) + summary = summarize_beamtime_scans( + minimal_fits_dir, + catalog_path=db, + ) + assert summary.height >= 1 + assert "energy_min" in summary.columns + assert "energy_max" in summary.columns + assert "theta_min" in summary.columns + assert "theta_max" in summary.columns + assert "catalog_scan_type" in summary.columns + kind = summary["inferred_scan_type"][0] + assert kind in {"fixed_energy", "fixed_angle", "single_point"} + + +def test_set_beamtime_scan_types_persists_catalog_scan_type( + minimal_fits_dir: Path | None, +) -> None: + if getattr(_pyref_mod, "py_set_scan_type_for_beamtime_scan", None) is None: + pytest.skip("py_set_scan_type_for_beamtime_scan not built") + if minimal_fits_dir is None: + pytest.skip("fixtures/minimal.fits not found") + db = ingest_beamtime(minimal_fits_dir, incremental=False) + rows = scan_from_catalog_for_beamtime(minimal_fits_dir, db) + if rows.height == 0: + pytest.skip("no rows in catalog") + scan_number = int(rows["scan_number"][0]) + out = set_beamtime_scan_types( + minimal_fits_dir, + {scan_number: "fixed_angle"}, + catalog_path=db, + ) + assert out.height == 1 + rows2 = scan_from_catalog_for_beamtime( + minimal_fits_dir, + db, + scan_numbers=[scan_number], + ) + assert "catalog_scan_type" in rows2.columns + assert rows2["catalog_scan_type"].drop_nulls().n_unique() == 1 + assert rows2["catalog_scan_type"].drop_nulls()[0] == "fixed_angle" From cb366e6c0bc2227f0d08e65a6889322d903fac1a Mon Sep 17 00:00:00 2001 From: Harlan D Heilman <73567020+HarlanHeilman@users.noreply.github.com> Date: Wed, 22 Apr 2026 16:29:09 -0700 Subject: [PATCH 21/22] perf: streaming ingest, catalog schema (header_values, pruned frames), bench CLI - Pipelined ingest, scan scheduler, zarr and catalog refactors - Rename frame EAV to header_values; metadata module; remove duplicate io schema - Migrations for zarr bucket and header_values/frames prune - Move ingest profiling into python/pyref; add pyref bench; remove old scripts - Update AGENTS, readers, and beamtime/catalog Python surface --- AGENTS.md | 16 +- .../down.sql | 4 + .../up.sql | 3 + .../down.sql | 95 + .../up.sql | 62 + notebooks/beamtime_collins_2026feb copy.ipynb | 2603 +++++++++++++++++ notebooks/beamtime_collins_2026feb.ipynb | 2489 +++++++++++++++- notebooks/nexafs-ingest.ipynb | 710 ----- notebooks/nexafs-plotting.ipynb | 611 ---- notebooks/nexafs-process.ipynb | 1259 -------- pyproject.toml | 1 - python/pyref/cli/__init__.py | 4 +- python/pyref/cli/bench.py | 203 ++ python/pyref/cli/catalog.py | 174 +- .../pyref/ingest_profile.py | 6 +- python/pyref/io/__init__.py | 2 + python/pyref/io/beamtime.py | 39 + python/pyref/io/catalog_path.py | 9 +- python/pyref/io/readers.py | 9 + scripts/bench_ingest.py | 203 -- scripts/profile_beamtime_ingest.py | 79 - src/bin/migrate_zarr_3d.rs | 57 +- src/catalog/db.rs | 3 + src/catalog/ingest.rs | 326 ++- src/catalog/mod.rs | 14 +- src/catalog/models.rs | 12 - src/catalog/parallelism.rs | 2 +- src/catalog/paths.rs | 86 +- src/catalog/query.rs | 445 ++- src/catalog/scan_scheduler.rs | 134 + src/catalog/watch.rs | 30 +- src/catalog/zarr_write.rs | 68 +- src/gaussian_fit.rs | 10 +- src/io/image_mmap.rs | 10 +- src/io/{schema.rs => metadata.rs} | 2 + src/io/mod.rs | 86 +- src/io/options.rs | 8 +- src/io/zarr_store.rs | 14 +- src/lib.rs | 66 +- src/path_policy.rs | 13 +- src/schema.rs | 69 +- 41 files changed, 6620 insertions(+), 3416 deletions(-) create mode 100644 migrations/2026-04-20-140000_frames_drop_zarr_shape_bucket/down.sql create mode 100644 migrations/2026-04-20-140000_frames_drop_zarr_shape_bucket/up.sql create mode 100644 migrations/2026-04-21-090000_header_values_frames_prune/down.sql create mode 100644 migrations/2026-04-21-090000_header_values_frames_prune/up.sql create mode 100644 notebooks/beamtime_collins_2026feb copy.ipynb delete mode 100644 notebooks/nexafs-ingest.ipynb delete mode 100644 notebooks/nexafs-plotting.ipynb delete mode 100644 notebooks/nexafs-process.ipynb create mode 100644 python/pyref/cli/bench.py rename scripts/_ingest_profile.py => python/pyref/ingest_profile.py (97%) delete mode 100644 scripts/bench_ingest.py delete mode 100644 scripts/profile_beamtime_ingest.py create mode 100644 src/catalog/scan_scheduler.rs rename src/io/{schema.rs => metadata.rs} (97%) diff --git a/AGENTS.md b/AGENTS.md index 582116c..f6d1d43 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -124,15 +124,16 @@ Connecting individual frames back to their originating sample, scan, and beamtim ### Catalog and Cache Storage -#### Default: catalog under `~/.config/pyref`, zarr under platform user data +#### Default: catalog and zarr cache under `~/.config/pyref` (single tree) -By default, `pyref` maintains a single persistent catalog that accumulates every beamtime the user has ever ingested. The **catalog** path is Unix-like under the user home on all platforms (not the legacy per-OS “Application Support” / `%APPDATA%` location): +By default, `pyref` maintains a single persistent catalog that accumulates every beamtime the user has ever ingested. The **catalog** and **local zarr cache** share the same config root (not macOS “Application Support” unless you override with `PYREF_CATALOG_DB` / `PYREF_CACHE_ROOT`): | Scope | Default path | |-------|----------------| -| `catalog.db` | `$XDG_CONFIG_HOME/pyref/catalog.db` when `XDG_CONFIG_HOME` is set; otherwise `~/.config/pyref/catalog.db` (on Windows, `~` is the user profile, e.g. `C:\Users\\.config\pyref\catalog.db`). | +| `catalog.db` | On macOS, always `~/.config/pyref/catalog.db`. On Linux and Windows, `$XDG_CONFIG_HOME/pyref/catalog.db` when `XDG_CONFIG_HOME` is set; otherwise `~/.config/pyref/catalog.db` (on Windows, `~` is the user profile, e.g. `C:\Users\\.config\pyref\catalog.db`). | +| Zarr (`beamtime.zarr`) | `/cache//beamtime.zarr`. Example on macOS: `~/.config/pyref/cache//beamtime.zarr`. `` is a stable SHA-256 digest of the beamtime root path recorded at ingestion time. The zarr tree is local-only; NAS-backed FITS are used for ingestion and re-ingestion, not for routine image reads after ingest. | -The **zarr** archive for each beamtime stays under the platform user data directory from the `directories` crate: `/pyref/.cache//beamtime.zarr`, where on Linux that is typically `$XDG_DATA_HOME/pyref` or `~/.local/share/pyref`, on macOS `~/Library/Application Support/pyref`, and on Windows `%APPDATA%\pyref`. `` is a stable SHA-256 digest of the beamtime root path recorded at ingestion time. Example on macOS: `~/Library/Application Support/pyref/.cache//beamtime.zarr`. The zarr tree is local-only; NAS-backed FITS are used for ingestion and re-ingestion, not for routine image reads after ingest. +macOS ignores `XDG_CONFIG_HOME` for this default tree so a common misconfiguration (`XDG_CONFIG_HOME=$HOME/Library/Application Support`) cannot relocate pyref into Application Support. Use `PYREF_HOME` (tests) or `PYREF_CATALOG_DB` / `PYREF_CACHE_ROOT` when you need a non-default location. When `PYREF_HOME` is set (common in tests), both tooling expectations may still point at that directory for the catalog file (`/catalog.db`) as implemented in the Rust path resolver; production use relies on the defaults above unless overridden. @@ -498,6 +499,7 @@ This workspace extends Rust with **PyO3 / Maturin** extension expectations. ## Learned Workspace Facts +- **Implementation plans** should always include two closing steps: (1) **greenfield cleanup** — remove unused code and tests that are no longer needed but were tied to the change; (2) **quality gates** — intentional deprecations where relevant, typing and lint fixes, and verification that the code **builds with zero errors and zero warnings** (Rust + Python per repo tooling). Apply these at the end of every substantive plan, not only as optional polish. - Python ingest progress integrates **`beamtime_ingest_layout`** (total FITS count and per-scan file counts) with **`ingest_beamtime(..., progress_callback=...)`** emitting event dicts of kind `layout`, `phase`, `file_complete`, or `catalog_row`; pair this with Rich or tqdm-style handlers. - Keep **`.cursor/hooks/state/`** out of git: add it to **`.gitignore`** so hook state and the continual-learning index stay local. - Ingestion and zarr writes from **network-mounted beamtime roots** can be far slower than from a **local replica**; validate progress UX against a local tree when iterating. @@ -505,9 +507,9 @@ This workspace extends Rust with **PyO3 / Maturin** extension expectations. - **`read_beamtime(..., ingest=True)`** runs ingest against the **default global catalog path** from the Rust layer; an explicit **`catalog_path`** mainly selects which database is **read** for the returned view. Beamtime lookup keys must match absolute URI form (for example `file:///Volumes/...`), and offline lookup must avoid strict canonicalization so unmounted NAS paths can still match indexed beamtimes. - **Ruff** may exclude **`python/pyref/beamline`**, **`notebooks`**, and **`tests`** per `pyproject.toml`; treat those paths as out of scope for Ruff unless configuration changes. - Ingest phases are modeled by the Rust **`IngestPhase` enum** (not string labels); the catalog phase **coalesces short scans into a single SQLite transaction** (small-scan batching), which is a deliberate design choice. -- CI-safe ingest benchmarking uses the synthetic harness: the Rust helper at **`tests/common/mod.rs`** (consumed by `tests/synthetic_harness.rs` and `tests/ingest_streaming.rs`) plus **`scripts/bench_ingest.py`**; shared progress/table helpers live in **`scripts/_ingest_profile.py`** and are reused by `scripts/profile_beamtime_ingest.py`. +- CI-safe ingest benchmarking uses the synthetic harness: the Rust helper at **`tests/common/mod.rs`** (consumed by `tests/synthetic_harness.rs` and `tests/ingest_streaming.rs`) plus **`uv run pyref bench synthetic`**; shared progress/table helpers live in **`python/pyref/ingest_profile.py`** and are also used by **`uv run pyref bench profile --beamtime `** for real beamtimes. - Rust integration tests for ingest require **`cargo test --features catalog,parallel_ingest`**; tests that mutate env vars (**`PYREF_CATALOG_DB`**, **`PYREF_CACHE_ROOT`**) must serialize with a `Mutex` guard (pattern in `src/io/raw_pixels.rs` tests) and must point those vars at isolated tempdirs so they never write to the default catalog. - **`tests/fixtures/minimal.fits`** is the canonical 2x2 BITPIX=16 FITS reference; new synthetic fixtures must match its header/block layout (2880-byte header, BZERO=32768 for unsigned-as-signed-i16, stems of the form `--.fits`). -- **Typer CLI** (`pyref` entry point): implementation under **`python/pyref/cli/`** with groups **`nas`** (single registered NAS root in **`config.toml`** next to the data dir), **`beamtime`** (list/describe coverage using **`py_beamtime_ingest_layout`** + **`py_catalog_file_count`**), **`catalog`** (`path`, `ingest` with **`--max-scans`** / **`--scans`**), and **`watch`** (subprocess daemon via **`PYREF_CLI_WATCH_SPEC`**, worker module **`python -m pyref.cli.daemon`**, PID/logs under **`/daemons/`**). Legacy **`pyref-ingest`** delegates to **`pyref catalog ingest`**. -- Beamtime **Zarr** raw images are **per-scan** **shape-bucketed** 3D `uint16` stacks at `/images/by_shape//scans//raw` (shuffle + Zstd; see `catalog::zarr_write`, schema, **`migrate-zarr-3d`**); standalone Rust migration or tooling that initializes **Polars** through **PyO3** may print **`failed to get allocator capsule`** on stderr even when the run succeeds. +- **Typer CLI** (`pyref` entry point): implementation under **`python/pyref/cli/`** with groups **`nas`** (single registered NAS root in **`config.toml`** next to the data dir), **`beamtime`** (list/describe coverage using **`py_beamtime_ingest_layout`** + **`py_catalog_file_count`**), **`catalog`** (`path`, `ingest` with **`--max-scans`** / **`--scans`**), **`watch`** (subprocess daemon via **`PYREF_CLI_WATCH_SPEC`**, worker module **`python -m pyref.cli.daemon`**, PID/logs under **`/daemons/`**), and **`bench`** (`synthetic`, `profile` for ingest timing). Legacy **`pyref-ingest`** delegates to **`pyref catalog ingest`**. +- Beamtime **Zarr** raw images are **per-scan** 3D `uint16` stacks at `/images/scans//raw` under the beamtime archive (default cache root `/cache//beamtime.zarr`; shuffle + Zstd; see `catalog::zarr_write`, schema, **`migrate-zarr-3d`**); standalone Rust migration or tooling that initializes **Polars** through **PyO3** may print **`failed to get allocator capsule`** on stderr even when the run succeeds. - **Rust bindings for CLI:** **`py_pyref_data_dir`**, **`py_catalog_file_count`**, optional ingest subset via **`IngestSelection`** (`max_scans`, `scan_numbers`), and **`CatalogWatcherCancel`** + **`py_run_catalog_watcher_blocking`** when the **`watch`** feature is enabled (included in default features for extension builds). \ No newline at end of file diff --git a/migrations/2026-04-20-140000_frames_drop_zarr_shape_bucket/down.sql b/migrations/2026-04-20-140000_frames_drop_zarr_shape_bucket/down.sql new file mode 100644 index 0000000..e96723d --- /dev/null +++ b/migrations/2026-04-20-140000_frames_drop_zarr_shape_bucket/down.sql @@ -0,0 +1,4 @@ +ALTER TABLE frames ADD COLUMN zarr_shape_bucket TEXT; + +CREATE INDEX idx_frames_zarr_shape_bucket_frame_index +ON frames(zarr_shape_bucket, zarr_bucket_frame_index); diff --git a/migrations/2026-04-20-140000_frames_drop_zarr_shape_bucket/up.sql b/migrations/2026-04-20-140000_frames_drop_zarr_shape_bucket/up.sql new file mode 100644 index 0000000..a14f013 --- /dev/null +++ b/migrations/2026-04-20-140000_frames_drop_zarr_shape_bucket/up.sql @@ -0,0 +1,3 @@ +DROP INDEX IF EXISTS idx_frames_zarr_shape_bucket_frame_index; + +ALTER TABLE frames DROP COLUMN zarr_shape_bucket; diff --git a/migrations/2026-04-21-090000_header_values_frames_prune/down.sql b/migrations/2026-04-21-090000_header_values_frames_prune/down.sql new file mode 100644 index 0000000..91d56cd --- /dev/null +++ b/migrations/2026-04-21-090000_header_values_frames_prune/down.sql @@ -0,0 +1,95 @@ +PRAGMA foreign_keys = OFF; + +DROP INDEX IF EXISTS idx_frames_scan; + +CREATE TABLE frames_old ( + id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, + scan_id INTEGER NOT NULL REFERENCES scans(id) ON DELETE CASCADE, + file_id INTEGER NOT NULL REFERENCES files(id) ON DELETE CASCADE, + frame_number INTEGER NOT NULL, + zarr_group_key INTEGER NOT NULL, + zarr_frame_index INTEGER NOT NULL, + acquired_at TEXT, + sample_x REAL NOT NULL, + sample_y REAL NOT NULL, + sample_z REAL NOT NULL, + sample_theta REAL NOT NULL, + ccd_theta REAL NOT NULL, + beamline_energy REAL NOT NULL, + epu_polarization REAL NOT NULL, + exposure REAL NOT NULL, + ring_current REAL NOT NULL, + ai3_izero REAL NOT NULL, + beam_current REAL NOT NULL, + quality_flag TEXT, + zarr_bucket_frame_index INTEGER, + UNIQUE(file_id) +); + +INSERT INTO frames_old ( + id, + scan_id, + file_id, + frame_number, + zarr_group_key, + zarr_frame_index, + acquired_at, + sample_x, + sample_y, + sample_z, + sample_theta, + ccd_theta, + beamline_energy, + epu_polarization, + exposure, + ring_current, + ai3_izero, + beam_current, + quality_flag, + zarr_bucket_frame_index +) +SELECT + id, + scan_id, + file_id, + frame_number, + zarr_group_key, + zarr_frame_index, + acquired_at, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + quality_flag, + zarr_bucket_frame_index +FROM frames; + +DROP TABLE frames; +ALTER TABLE frames_old RENAME TO frames; + +CREATE INDEX idx_frames_scan ON frames(scan_id); + +CREATE TABLE header_cards_old ( + id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, + name TEXT NOT NULL UNIQUE, + display_name TEXT NOT NULL, + card_category TEXT NOT NULL +); + +INSERT INTO header_cards_old (id, name, display_name, card_category) +SELECT id, name, display_name, 'metadata' +FROM header_cards; + +DROP TABLE header_cards; +ALTER TABLE header_cards_old RENAME TO header_cards; + +ALTER TABLE header_values RENAME TO frame_header_values; + +PRAGMA foreign_keys = ON; diff --git a/migrations/2026-04-21-090000_header_values_frames_prune/up.sql b/migrations/2026-04-21-090000_header_values_frames_prune/up.sql new file mode 100644 index 0000000..835898a --- /dev/null +++ b/migrations/2026-04-21-090000_header_values_frames_prune/up.sql @@ -0,0 +1,62 @@ +PRAGMA foreign_keys = OFF; + +ALTER TABLE frame_header_values RENAME TO header_values; + +CREATE TABLE header_cards_new ( + id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, + name TEXT NOT NULL UNIQUE, + display_name TEXT NOT NULL +); + +INSERT INTO header_cards_new (id, name, display_name) +SELECT id, name, display_name +FROM header_cards; + +DROP TABLE header_cards; +ALTER TABLE header_cards_new RENAME TO header_cards; + +DROP INDEX IF EXISTS idx_frames_scan; +DROP INDEX IF EXISTS idx_frames_zarr_shape_bucket_frame_index; + +CREATE TABLE frames_new ( + id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, + scan_id INTEGER NOT NULL REFERENCES scans(id) ON DELETE CASCADE, + file_id INTEGER NOT NULL REFERENCES files(id) ON DELETE CASCADE, + frame_number INTEGER NOT NULL, + zarr_group_key INTEGER NOT NULL, + zarr_frame_index INTEGER NOT NULL, + zarr_bucket_frame_index INTEGER, + acquired_at TEXT, + quality_flag TEXT, + UNIQUE(file_id) +); + +INSERT INTO frames_new ( + id, + scan_id, + file_id, + frame_number, + zarr_group_key, + zarr_frame_index, + zarr_bucket_frame_index, + acquired_at, + quality_flag +) +SELECT + id, + scan_id, + file_id, + frame_number, + zarr_group_key, + zarr_frame_index, + zarr_bucket_frame_index, + acquired_at, + quality_flag +FROM frames; + +DROP TABLE frames; +ALTER TABLE frames_new RENAME TO frames; + +CREATE INDEX idx_frames_scan ON frames(scan_id); + +PRAGMA foreign_keys = ON; diff --git a/notebooks/beamtime_collins_2026feb copy.ipynb b/notebooks/beamtime_collins_2026feb copy.ipynb new file mode 100644 index 0000000..f5d8a57 --- /dev/null +++ b/notebooks/beamtime_collins_2026feb copy.ipynb @@ -0,0 +1,2603 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "7fb27b941602401d91542211134fc71a", + "metadata": {}, + "source": [ + "# Collins 2026Feb beamtime local curation workflow\n", + "\n", + "Use the already-ingested local catalog/zarr view (no NAS dependency), inspect relevant scans, apply per-scan sample/tag updates, verify theta/energy ranges, and correct per-scan classification (`fixed_energy` vs `fixed_angle`).\n", + "\n", + "This notebook is structured as executable validation steps so each curation action is immediately checked.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "acae54e37e7d407bbb7b55eff062a284", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/javascript": "(function(root) {\n function now() {\n return new Date();\n }\n\n const force = true;\n const version = '3.8.2'.replace('rc', '-rc.').replace('.dev', '-dev.');\n const reloading = false;\n const Bokeh = root.Bokeh;\n const BK_RE = /^https:\\/\\/cdn\\.bokeh\\.org\\/bokeh\\/(release|dev)\\/bokeh-/;\n const PN_RE = /^https:\\/\\/cdn\\.holoviz\\.org\\/panel\\/[^/]+\\/dist\\/panel/i;\n\n // Set a timeout for this load but only if we are not already initializing\n if (typeof (root._bokeh_timeout) === \"undefined\" || (force || !root._bokeh_is_initializing)) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks;\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, js_modules, js_exports, Bokeh, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n if (js_modules == null) js_modules = [];\n if (js_exports == null) js_exports = {};\n\n root._bokeh_onload_callbacks.push(callback);\n\n if (root._bokeh_is_loading > 0) {\n // Don't load bokeh if it is still initializing\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n } else if (js_urls.length === 0 && js_modules.length === 0 && Object.keys(js_exports).length === 0) {\n // There is nothing to load\n run_callbacks();\n return null;\n }\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n window._bokeh_on_load = on_load\n\n function on_error(e) {\n const src_el = e.srcElement\n console.error(\"failed to load \" + (src_el.href || src_el.src));\n }\n\n const skip = [];\n if (window.requirejs) {\n window.requirejs.config({'packages': {}, 'paths': {}, 'shim': {}});\n root._bokeh_is_loading = css_urls.length + 0;\n } else {\n root._bokeh_is_loading = css_urls.length + js_urls.length + js_modules.length + Object.keys(js_exports).length;\n }\n\n const existing_stylesheets = []\n const links = document.getElementsByTagName('link')\n for (let i = 0; i < links.length; i++) {\n const link = links[i]\n if (link.href != null) {\n existing_stylesheets.push(link.href)\n }\n }\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const escaped = encodeURI(url)\n if (existing_stylesheets.indexOf(escaped) !== -1) {\n on_load()\n continue;\n }\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error;\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n } var existing_scripts = []\n const scripts = document.getElementsByTagName('script')\n for (let i = 0; i < scripts.length; i++) {\n var script = scripts[i]\n if (script.src != null) {\n existing_scripts.push(script.src)\n }\n }\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const escaped = encodeURI(url)\n const shouldSkip = skip.includes(escaped) || existing_scripts.includes(escaped)\n const isBokehOrPanel = BK_RE.test(escaped) || PN_RE.test(escaped)\n const missingOrBroken = Bokeh == null || Bokeh.Panel == null || (Bokeh.version != version && !Bokeh.versions?.has(version)) || Bokeh.versions?.get(version)?.Panel == null;\n if (shouldSkip && !(isBokehOrPanel && missingOrBroken)) {\n if (!window.requirejs) {\n on_load();\n }\n continue;\n }\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error;\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n for (let i = 0; i < js_modules.length; i++) {\n const url = js_modules[i];\n const escaped = encodeURI(url)\n if (skip.indexOf(escaped) !== -1 || existing_scripts.indexOf(escaped) !== -1) {\n if (!window.requirejs) {\n on_load();\n }\n continue;\n }\n var element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error;\n element.async = false;\n element.src = url;\n element.type = \"module\";\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n for (const name in js_exports) {\n const url = js_exports[name];\n const escaped = encodeURI(url)\n if (skip.indexOf(escaped) >= 0 || root[name] != null) {\n if (!window.requirejs) {\n on_load();\n }\n continue;\n }\n var element = document.createElement('script');\n element.onerror = on_error;\n element.async = false;\n element.type = \"module\";\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n element.textContent = `\n import ${name} from \"${url}\"\n window.${name} = ${name}\n window._bokeh_on_load()\n `\n document.head.appendChild(element);\n }\n if (!js_urls.length && !js_modules.length) {\n on_load()\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n const js_urls = [\"https://cdn.holoviz.org/panel/1.8.5/dist/bundled/reactiveesm/es-module-shims@^1.10.0/dist/es-module-shims.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-3.8.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.8.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.8.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.8.2.min.js\", \"https://cdn.holoviz.org/panel/1.8.5/dist/panel.min.js\"];\n const js_modules = [];\n const js_exports = {};\n const css_urls = [];\n const inline_js = [ function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\nfunction(Bokeh) {} // ensure no trailing comma for IE\n ];\n\n function run_inline_js() {\n if ((root.Bokeh !== undefined) || (force === true)) {\n for (let i = 0; i < inline_js.length; i++) {\n try {\n inline_js[i].call(root, root.Bokeh);\n } catch(e) {\n if (!reloading) {\n throw e;\n }\n }\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n }\n root._bokeh_is_initializing = false;\n }\n\n function load_or_wait() {\n // Implement a backoff loop that tries to ensure we do not load multiple\n // versions of Bokeh and its dependencies at the same time.\n // In recent versions we use the root._bokeh_is_initializing flag\n // to determine whether there is an ongoing attempt to initialize\n // bokeh, however for backward compatibility we also try to ensure\n // that we do not start loading a newer (Panel>=1.0 and Bokeh>3) version\n // before older versions are fully initialized.\n if (root._bokeh_is_initializing && Date.now() > root._bokeh_timeout) {\n // If the timeout and bokeh was not successfully loaded we reset\n // everything and try loading again\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_is_initializing = false;\n root._bokeh_onload_callbacks = undefined;\n root._bokeh_is_loading = 0;\n console.log(\"Bokeh: BokehJS was loaded multiple times but one version failed to initialize.\");\n load_or_wait();\n } else if (root._bokeh_is_initializing || (typeof root._bokeh_is_initializing === \"undefined\" && root._bokeh_onload_callbacks !== undefined)) {\n setTimeout(load_or_wait, 100);\n } else {\n root._bokeh_is_initializing = true;\n root._bokeh_onload_callbacks = [];\n const bokeh_loaded = Bokeh != null && ((Bokeh.version === version && Bokeh.Panel) || (Bokeh.versions?.has(version) && Bokeh.versions.get(version)?.Panel));\n if (!reloading && !bokeh_loaded) {\n if (root.Bokeh) {\n root.Bokeh = undefined;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n }\n load_libs(css_urls, js_urls, js_modules, js_exports, Bokeh, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n if (Bokeh != undefined && !reloading) {\n const NewBokeh = root.Bokeh;\n if (Bokeh.versions === undefined) {\n Bokeh.versions = new Map();\n }\n if (NewBokeh.version !== Bokeh.version) {\n Bokeh[NewBokeh.version] = NewBokeh;\n Bokeh.versions.set(NewBokeh.version, NewBokeh);\n }\n root.Bokeh = Bokeh;\n }\n });\n }\n }\n // Give older versions of the autoload script a head-start to ensure\n // they initialize before we start loading newer version.\n setTimeout(load_or_wait, 100)\n}(window));", + "application/vnd.holoviews_load.v0+json": "" + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/javascript": "\nif ((window.PyViz === undefined) || (window.PyViz instanceof HTMLElement)) {\n window.PyViz = {comms: {}, comm_status:{}, kernels:{}, receivers: {}, plot_index: []}\n}\n\n\n function JupyterCommManager() {\n }\n\n JupyterCommManager.prototype.register_target = function(plot_id, comm_id, msg_handler) {\n if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n comm_manager.register_target(comm_id, function(comm) {\n comm.on_msg(msg_handler);\n });\n } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n window.PyViz.kernels[plot_id].registerCommTarget(comm_id, function(comm) {\n comm.onMsg = msg_handler;\n });\n } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n google.colab.kernel.comms.registerTarget(comm_id, (comm) => {\n var messages = comm.messages[Symbol.asyncIterator]();\n function processIteratorResult(result) {\n var message = result.value;\n console.log(message)\n var content = {data: message.data, comm_id};\n var buffers = []\n for (var buffer of message.buffers || []) {\n buffers.push(new DataView(buffer))\n }\n var metadata = message.metadata || {};\n var msg = {content, buffers, metadata}\n msg_handler(msg);\n return messages.next().then(processIteratorResult);\n }\n return messages.next().then(processIteratorResult);\n })\n }\n }\n\n JupyterCommManager.prototype.get_client_comm = function(plot_id, comm_id, msg_handler) {\n if (comm_id in window.PyViz.comms) {\n return window.PyViz.comms[comm_id];\n } else if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n var comm = comm_manager.new_comm(comm_id, {}, {}, {}, comm_id);\n if (msg_handler) {\n comm.on_msg(msg_handler);\n }\n } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n var comm = window.PyViz.kernels[plot_id].connectToComm(comm_id);\n comm.open();\n if (msg_handler) {\n comm.onMsg = msg_handler;\n }\n } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n var comm_promise = google.colab.kernel.comms.open(comm_id)\n comm_promise.then((comm) => {\n window.PyViz.comms[comm_id] = comm;\n if (msg_handler) {\n var messages = comm.messages[Symbol.asyncIterator]();\n function processIteratorResult(result) {\n var message = result.value;\n var content = {data: message.data};\n var metadata = message.metadata || {comm_id};\n var msg = {content, metadata}\n msg_handler(msg);\n return messages.next().then(processIteratorResult);\n }\n return messages.next().then(processIteratorResult);\n }\n })\n var sendClosure = (data, metadata, buffers, disposeOnDone) => {\n return comm_promise.then((comm) => {\n comm.send(data, metadata, buffers, disposeOnDone);\n });\n };\n var comm = {\n send: sendClosure\n };\n }\n window.PyViz.comms[comm_id] = comm;\n return comm;\n }\n window.PyViz.comm_manager = new JupyterCommManager();\n \n\n\nvar JS_MIME_TYPE = 'application/javascript';\nvar HTML_MIME_TYPE = 'text/html';\nvar EXEC_MIME_TYPE = 'application/vnd.holoviews_exec.v0+json';\nvar CLASS_NAME = 'output';\n\n/**\n * Render data to the DOM node\n */\nfunction render(props, node) {\n var div = document.createElement(\"div\");\n var script = document.createElement(\"script\");\n node.appendChild(div);\n node.appendChild(script);\n}\n\n/**\n * Handle when a new output is added\n */\nfunction handle_add_output(event, handle) {\n var output_area = handle.output_area;\n var output = handle.output;\n if ((output.data == undefined) || (!output.data.hasOwnProperty(EXEC_MIME_TYPE))) {\n return\n }\n var id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n var toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n if (id !== undefined) {\n var nchildren = toinsert.length;\n var html_node = toinsert[nchildren-1].children[0];\n html_node.innerHTML = output.data[HTML_MIME_TYPE];\n var scripts = [];\n var nodelist = html_node.querySelectorAll(\"script\");\n for (var i in nodelist) {\n if (nodelist.hasOwnProperty(i)) {\n scripts.push(nodelist[i])\n }\n }\n\n scripts.forEach( function (oldScript) {\n var newScript = document.createElement(\"script\");\n var attrs = [];\n var nodemap = oldScript.attributes;\n for (var j in nodemap) {\n if (nodemap.hasOwnProperty(j)) {\n attrs.push(nodemap[j])\n }\n }\n attrs.forEach(function(attr) { newScript.setAttribute(attr.name, attr.value) });\n newScript.appendChild(document.createTextNode(oldScript.innerHTML));\n oldScript.parentNode.replaceChild(newScript, oldScript);\n });\n if (JS_MIME_TYPE in output.data) {\n toinsert[nchildren-1].children[1].textContent = output.data[JS_MIME_TYPE];\n }\n output_area._hv_plot_id = id;\n if ((window.Bokeh !== undefined) && (id in Bokeh.index)) {\n window.PyViz.plot_index[id] = Bokeh.index[id];\n } else {\n window.PyViz.plot_index[id] = null;\n }\n } else if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n var bk_div = document.createElement(\"div\");\n bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n var script_attrs = bk_div.children[0].attributes;\n for (var i = 0; i < script_attrs.length; i++) {\n toinsert[toinsert.length - 1].childNodes[1].setAttribute(script_attrs[i].name, script_attrs[i].value);\n }\n // store reference to server id on output_area\n output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n }\n}\n\n/**\n * Handle when an output is cleared or removed\n */\nfunction handle_clear_output(event, handle) {\n var id = handle.cell.output_area._hv_plot_id;\n var server_id = handle.cell.output_area._bokeh_server_id;\n if (((id === undefined) || !(id in PyViz.plot_index)) && (server_id !== undefined)) { return; }\n var comm = window.PyViz.comm_manager.get_client_comm(\"hv-extension-comm\", \"hv-extension-comm\", function () {});\n if (server_id !== null) {\n comm.send({event_type: 'server_delete', 'id': server_id});\n return;\n } else if (comm !== null) {\n comm.send({event_type: 'delete', 'id': id});\n }\n delete PyViz.plot_index[id];\n if ((window.Bokeh !== undefined) & (id in window.Bokeh.index)) {\n var doc = window.Bokeh.index[id].model.document\n doc.clear();\n const i = window.Bokeh.documents.indexOf(doc);\n if (i > -1) {\n window.Bokeh.documents.splice(i, 1);\n }\n }\n}\n\n/**\n * Handle kernel restart event\n */\nfunction handle_kernel_cleanup(event, handle) {\n delete PyViz.comms[\"hv-extension-comm\"];\n window.PyViz.plot_index = {}\n}\n\n/**\n * Handle update_display_data messages\n */\nfunction handle_update_output(event, handle) {\n handle_clear_output(event, {cell: {output_area: handle.output_area}})\n handle_add_output(event, handle)\n}\n\nfunction register_renderer(events, OutputArea) {\n function append_mime(data, metadata, element) {\n // create a DOM node to render to\n var toinsert = this.create_output_subarea(\n metadata,\n CLASS_NAME,\n EXEC_MIME_TYPE\n );\n this.keyboard_manager.register_events(toinsert);\n // Render to node\n var props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n render(props, toinsert[0]);\n element.append(toinsert);\n return toinsert\n }\n\n events.on('output_added.OutputArea', handle_add_output);\n events.on('output_updated.OutputArea', handle_update_output);\n events.on('clear_output.CodeCell', handle_clear_output);\n events.on('delete.Cell', handle_clear_output);\n events.on('kernel_ready.Kernel', handle_kernel_cleanup);\n\n OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n safe: true,\n index: 0\n });\n}\n\nif (window.Jupyter !== undefined) {\n try {\n var events = require('base/js/events');\n var OutputArea = require('notebook/js/outputarea').OutputArea;\n if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n register_renderer(events, OutputArea);\n }\n } catch(err) {\n }\n}\n", + "application/vnd.holoviews_load.v0+json": "" + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.holoviews_exec.v0+json": "", + "text/html": [ + "
\n", + "
\n", + "
\n", + "" + ] + }, + "metadata": { + "application/vnd.holoviews_exec.v0+json": { + "id": "3732fef5-9cf8-483a-a14e-5197525f3bb8" + } + }, + "output_type": "display_data" + } + ], + "source": [ + "from pathlib import Path\n", + "\n", + "import matplotlib.pyplot as plt\n", + "from pyref.io import (\n", + " apply_scan_overrides,\n", + " get_image,\n", + " read_beamtime_local,\n", + " set_beamtime_scan_types,\n", + " summarize_beamtime_scans,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "da700cfd", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "beamtime exists on filesystem: True\n" + ] + }, + { + "data": { + "text/plain": [ + "PosixPath('/Volumes/DATA/Collins/2026Feb')" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "BEAMTIME = Path(\"/Volumes/DATA/Collins/2026Feb\")\n", + "\n", + "assert BEAMTIME.is_absolute(), f\"beamtime must be absolute: {BEAMTIME}\"\n", + "print(f\"beamtime exists on filesystem: {BEAMTIME.exists()}\")\n", + "BEAMTIME" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "8dd0d8092fe74a7c96281538738b07e2", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "catalog: /Users/hduva/.config/pyref/catalog.db\n", + "beamtime: /Volumes/DATA/Collins/2026Feb\n", + "frames: 13546\n", + "samples: 9\n", + "scans: 33\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "shape: (5, 34)
file_pathdata_offsetnaxis1naxis2bitpixbzerodata_sizefile_namesample_nametagscan_numberframe_numberzarr_group_keyzarr_frame_indexzarr_bucket_frame_indexzarr_pathDATEBeamline EnergySample ThetaCCD ThetaHigher Order SuppressorEPU PolarizationEXPOSUREAI 3 IzeroSample NameScan IDLambdaQbeam_rowbeam_colbeam_sigmareflectivity_profile_indexreflectivity_scan_typecatalog_scan_type
stri64i64i64i64i64i64strstrstri64i64i64i64i64strstrf64f64f64f64f64f64f64strf64f64f64i64i64f64i64strstr
"/Volumes/DATA/Collins/2026Feb/…2016010004001632768800000"opv_ternary_88147-00001.fits""opv""ternary"8814718814710"/Users/hduva/.config/pyref/cac…"2026-02-10T14:37:17"249.9985160.00.001null190.00.005-0.015823"opv"88147.0nullnullnullnullnullnullnull"fixed_energy"
"/Volumes/DATA/Collins/2026Feb/…2016010004001632768800000"opv_ternary_88147-00002.fits""opv""ternary"8814728814721"/Users/hduva/.config/pyref/cac…"2026-02-10T14:37:20"250.0004030.00.0null190.00.005-0.018305"opv"88147.0nullnullnullnullnullnullnull"fixed_energy"
"/Volumes/DATA/Collins/2026Feb/…2016010004001632768800000"opv_ternary_88147-00003.fits""opv""ternary"8814738814732"/Users/hduva/.config/pyref/cac…"2026-02-10T14:37:23"250.0004030.00.0null190.00.005-0.015379"opv"88147.0nullnullnullnullnullnullnull"fixed_energy"
"/Volumes/DATA/Collins/2026Feb/…2016010004001632768800000"opv_ternary_88147-00004.fits""opv""ternary"8814748814743"/Users/hduva/.config/pyref/cac…"2026-02-10T14:37:26"250.0004030.00.0null190.00.005-0.014623"opv"88147.0nullnullnullnullnullnullnull"fixed_energy"
"/Volumes/DATA/Collins/2026Feb/…2016010004001632768800000"opv_ternary_88147-00005.fits""opv""ternary"8814758814754"/Users/hduva/.config/pyref/cac…"2026-02-10T14:37:29"250.0004030.00.0null190.00.005-0.017171"opv"88147.0nullnullnullnullnullnullnull"fixed_energy"
" + ], + "text/plain": [ + "shape: (5, 34)\n", + "┌────────────┬────────────┬────────┬────────┬───┬────────────┬────────────┬────────────┬───────────┐\n", + "│ file_path ┆ data_offse ┆ naxis1 ┆ naxis2 ┆ … ┆ beam_sigma ┆ reflectivi ┆ reflectivi ┆ catalog_s │\n", + "│ --- ┆ t ┆ --- ┆ --- ┆ ┆ --- ┆ ty_profile ┆ ty_scan_ty ┆ can_type │\n", + "│ str ┆ --- ┆ i64 ┆ i64 ┆ ┆ f64 ┆ _index ┆ pe ┆ --- │\n", + "│ ┆ i64 ┆ ┆ ┆ ┆ ┆ --- ┆ --- ┆ str │\n", + "│ ┆ ┆ ┆ ┆ ┆ ┆ i64 ┆ str ┆ │\n", + "╞════════════╪════════════╪════════╪════════╪═══╪════════════╪════════════╪════════════╪═══════════╡\n", + "│ /Volumes/D ┆ 20160 ┆ 1000 ┆ 400 ┆ … ┆ null ┆ null ┆ null ┆ fixed_ene │\n", + "│ ATA/Collin ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ rgy │\n", + "│ s/2026Feb/ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n", + "│ … ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n", + "│ /Volumes/D ┆ 20160 ┆ 1000 ┆ 400 ┆ … ┆ null ┆ null ┆ null ┆ fixed_ene │\n", + "│ ATA/Collin ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ rgy │\n", + "│ s/2026Feb/ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n", + "│ … ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n", + "│ /Volumes/D ┆ 20160 ┆ 1000 ┆ 400 ┆ … ┆ null ┆ null ┆ null ┆ fixed_ene │\n", + "│ ATA/Collin ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ rgy │\n", + "│ s/2026Feb/ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n", + "│ … ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n", + "│ /Volumes/D ┆ 20160 ┆ 1000 ┆ 400 ┆ … ┆ null ┆ null ┆ null ┆ fixed_ene │\n", + "│ ATA/Collin ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ rgy │\n", + "│ s/2026Feb/ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n", + "│ … ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n", + "│ /Volumes/D ┆ 20160 ┆ 1000 ┆ 400 ┆ … ┆ null ┆ null ┆ null ┆ fixed_ene │\n", + "│ ATA/Collin ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ rgy │\n", + "│ s/2026Feb/ ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n", + "│ … ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n", + "└────────────┴────────────┴────────┴────────┴───┴────────────┴────────────┴────────────┴───────────┘" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "view = read_beamtime_local(BEAMTIME, require_indexed=True)\n", + "\n", + "print(f\"catalog: {view.catalog_path}\")\n", + "print(f\"beamtime: {view.beamtime_path}\")\n", + "print(f\"frames: {view.frames.height}\")\n", + "print(f\"samples: {len(view.entries.samples)}\")\n", + "print(f\"scans: {len(view.entries.scans)}\")\n", + "\n", + "view.frames.head(5)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "ecb9187f", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "shape: (33, 10)\n", + "┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬────────┐\n", + "│ scan_nu ┆ n_frame ┆ sample_ ┆ tags ┆ energy_ ┆ energy_ ┆ theta_m ┆ theta_m ┆ inferre ┆ catalo │\n", + "│ mber ┆ s ┆ names ┆ --- ┆ min ┆ max ┆ in ┆ ax ┆ d_scan_ ┆ g_scan │\n", + "│ --- ┆ --- ┆ --- ┆ list[st ┆ --- ┆ --- ┆ --- ┆ --- ┆ type ┆ _type │\n", + "│ i64 ┆ i64 ┆ list[st ┆ r] ┆ f64 ┆ f64 ┆ f64 ┆ f64 ┆ --- ┆ --- │\n", + "│ ┆ ┆ r] ┆ ┆ ┆ ┆ ┆ ┆ str ┆ str │\n", + "╞═════════╪═════════╪═════════╪═════════╪═════════╪═════════╪═════════╪═════════╪═════════╪════════╡\n", + "│ 88147 ┆ 616 ┆ [\"opv\"] ┆ [\"terna ┆ 249.996 ┆ 284.411 ┆ 0.0 ┆ 60.0 ┆ fixed_e ┆ fixed_ │\n", + "│ ┆ ┆ ┆ ry\"] ┆ 629 ┆ 644 ┆ ┆ ┆ nergy ┆ energy │\n", + "│ 88148 ┆ 724 ┆ [\"opv\"] ┆ [\"terna ┆ 284.396 ┆ 286.012 ┆ 0.0 ┆ 60.0 ┆ fixed_e ┆ fixed_ │\n", + "│ ┆ ┆ ┆ ry\"] ┆ 97 ┆ 842 ┆ ┆ ┆ nergy ┆ energy │\n", + "│ 88149 ┆ 336 ┆ [\"opv\"] ┆ [\"terna ┆ 285.995 ┆ 286.005 ┆ 0.0 ┆ 60.0 ┆ fixed_e ┆ fixed_ │\n", + "│ ┆ ┆ ┆ ry\"] ┆ 529 ┆ 421 ┆ ┆ ┆ nergy ┆ energy │\n", + "│ 88150 ┆ 24 ┆ [\"opv\"] ┆ [\"terna ┆ 249.998 ┆ 250.000 ┆ 0.0 ┆ 2.182 ┆ fixed_e ┆ fixed_ │\n", + "│ ┆ ┆ ┆ ry\"] ┆ 516 ┆ 403 ┆ ┆ ┆ nergy ┆ energy │\n", + "│ 88151 ┆ 1351 ┆ [\"opv\"] ┆ [\"binar ┆ 249.996 ┆ 286.007 ┆ 0.0 ┆ 60.0 ┆ fixed_e ┆ fixed_ │\n", + "│ ┆ ┆ ┆ y\"] ┆ 629 ┆ 895 ┆ ┆ ┆ nergy ┆ energy │\n", + "│ 88152 ┆ 7 ┆ [\"znpc\" ┆ [] ┆ 249.998 ┆ 250.000 ┆ 0.0 ┆ 0.0 ┆ single_ ┆ fixed_ │\n", + "│ ┆ ┆ ] ┆ ┆ 516 ┆ 403 ┆ ┆ ┆ point ┆ energy │\n", + "│ 88153 ┆ 140 ┆ [\"znpc\" ┆ [] ┆ 249.996 ┆ 250.004 ┆ 0.0 ┆ 40.91 ┆ fixed_e ┆ fixed_ │\n", + "│ ┆ ┆ ] ┆ ┆ 629 ┆ 183 ┆ ┆ ┆ nergy ┆ energy │\n", + "│ 88154 ┆ 1261 ┆ [\"znpc\" ┆ [] ┆ 249.996 ┆ 284.507 ┆ 0.0 ┆ 60.0 ┆ fixed_e ┆ fixed_ │\n", + "│ ┆ ┆ ] ┆ ┆ 629 ┆ 064 ┆ ┆ ┆ nergy ┆ energy │\n", + "│ 88155 ┆ 547 ┆ [\"znpc\" ┆ [] ┆ 285.496 ┆ 288.613 ┆ 0.0 ┆ 60.0 ┆ fixed_e ┆ fixed_ │\n", + "│ ┆ ┆ ] ┆ ┆ 825 ┆ 589 ┆ ┆ ┆ nergy ┆ energy │\n", + "│ 88156 ┆ 1 ┆ [\"znpc_ ┆ [] ┆ 249.998 ┆ 249.998 ┆ 5.0 ┆ 5.0 ┆ single_ ┆ fixed_ │\n", + "│ ┆ ┆ energy\" ┆ ┆ 516 ┆ 516 ┆ ┆ ┆ point ┆ energy │\n", + "│ ┆ ┆ ] ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n", + "│ 88157 ┆ 6 ┆ [\"znpc_ ┆ [] ┆ 249.987 ┆ 270.396 ┆ 5.0 ┆ 5.0 ┆ fixed_a ┆ fixed_ │\n", + "│ ┆ ┆ energy\" ┆ ┆ 195 ┆ 698 ┆ ┆ ┆ ngle ┆ energy │\n", + "│ ┆ ┆ ] ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n", + "│ 88158 ┆ 44 ┆ [\"znpc_ ┆ [] ┆ 249.994 ┆ 281.295 ┆ 5.0 ┆ 5.0 ┆ fixed_a ┆ fixed_ │\n", + "│ ┆ ┆ izero\"] ┆ ┆ 742 ┆ 908 ┆ ┆ ┆ ngle ┆ energy │\n", + "│ 88159 ┆ 6 ┆ [\"znpc_ ┆ [] ┆ 249.996 ┆ 255.010 ┆ 5.0 ┆ 5.0 ┆ fixed_a ┆ fixed_ │\n", + "│ ┆ ┆ izero\"] ┆ ┆ 629 ┆ 916 ┆ ┆ ┆ ngle ┆ energy │\n", + "│ 88160 ┆ 3 ┆ [\"znpc_ ┆ [] ┆ 249.983 ┆ 251.998 ┆ 0.0 ┆ 0.0 ┆ fixed_a ┆ fixed_ │\n", + "│ ┆ ┆ izero\"] ┆ ┆ 421 ┆ 854 ┆ ┆ ┆ ngle ┆ energy │\n", + "│ 88161 ┆ 21 ┆ [\"znpc_ ┆ [] ┆ 250.000 ┆ 270.012 ┆ 0.0 ┆ 0.0 ┆ fixed_a ┆ fixed_ │\n", + "│ ┆ ┆ izero\"] ┆ ┆ 403 ┆ 561 ┆ ┆ ┆ ngle ┆ energy │\n", + "│ 88162 ┆ 456 ┆ [\"znpc_ ┆ [] ┆ 249.998 ┆ 364.977 ┆ 0.0 ┆ 0.0 ┆ fixed_a ┆ fixed_ │\n", + "│ ┆ ┆ izero\"] ┆ ┆ 516 ┆ 313 ┆ ┆ ┆ ngle ┆ energy │\n", + "│ 88163 ┆ 23 ┆ [\"znpc_ ┆ [] ┆ 249.998 ┆ 272.009 ┆ 0.0 ┆ 0.0 ┆ fixed_a ┆ fixed_ │\n", + "│ ┆ ┆ izero\"] ┆ ┆ 516 ┆ 097 ┆ ┆ ┆ ngle ┆ energy │\n", + "│ 88164 ┆ 22 ┆ [\"znpc_ ┆ [] ┆ 249.998 ┆ 271.001 ┆ 20.0 ┆ 20.0 ┆ fixed_a ┆ fixed_ │\n", + "│ ┆ ┆ izero\"] ┆ ┆ 516 ┆ 602 ┆ ┆ ┆ ngle ┆ energy │\n", + "│ 88165 ┆ 456 ┆ [\"znpc_ ┆ [] ┆ 249.996 ┆ 364.969 ┆ 20.0 ┆ 20.0 ┆ fixed_a ┆ fixed_ │\n", + "│ ┆ ┆ 20\"] ┆ ┆ 629 ┆ 277 ┆ ┆ ┆ ngle ┆ energy │\n", + "│ 88166 ┆ 67 ┆ [\"znpc_ ┆ [] ┆ 249.998 ┆ 283.594 ┆ 15.0 ┆ 15.0 ┆ fixed_a ┆ fixed_ │\n", + "│ ┆ ┆ 20\"] ┆ ┆ 516 ┆ 643 ┆ ┆ ┆ ngle ┆ energy │\n", + "│ 88167 ┆ 456 ┆ [\"znpc_ ┆ [] ┆ 249.998 ┆ 364.969 ┆ 15.0 ┆ 15.0 ┆ fixed_a ┆ fixed_ │\n", + "│ ┆ ┆ 15\"] ┆ ┆ 516 ┆ 277 ┆ ┆ ┆ ngle ┆ energy │\n", + "│ 88168 ┆ 2 ┆ [\"znpc_ ┆ [] ┆ 249.998 ┆ 250.996 ┆ 10.0 ┆ 10.0 ┆ fixed_a ┆ fixed_ │\n", + "│ ┆ ┆ 10\"] ┆ ┆ 516 ┆ 605 ┆ ┆ ┆ ngle ┆ energy │\n", + "│ 88169 ┆ 456 ┆ [\"znpc_ ┆ [] ┆ 250.002 ┆ 365.005 ┆ 10.0 ┆ 10.0 ┆ fixed_a ┆ fixed_ │\n", + "│ ┆ ┆ 10\"] ┆ ┆ 293 ┆ 442 ┆ ┆ ┆ ngle ┆ energy │\n", + "│ 88170 ┆ 2 ┆ [\"znpc\" ┆ [] ┆ 249.996 ┆ 250.000 ┆ 0.0 ┆ 0.0 ┆ single_ ┆ fixed_ │\n", + "│ ┆ ┆ ] ┆ ┆ 629 ┆ 403 ┆ ┆ ┆ point ┆ energy │\n", + "│ 88171 ┆ 1845 ┆ [\"znpc\" ┆ [] ┆ 249.996 ┆ 288.611 ┆ 0.0 ┆ 60.0 ┆ fixed_e ┆ fixed_ │\n", + "│ ┆ ┆ ] ┆ ┆ 629 ┆ 071 ┆ ┆ ┆ nergy ┆ energy │\n", + "│ 88172 ┆ 1 ┆ [\"znpc\" ┆ [\"i0\"] ┆ 249.996 ┆ 249.996 ┆ 5.0 ┆ 5.0 ┆ single_ ┆ fixed_ │\n", + "│ ┆ ┆ ] ┆ ┆ 629 ┆ 629 ┆ ┆ ┆ point ┆ energy │\n", + "│ 88173 ┆ 6 ┆ [\"znpc\" ┆ [\"i0\"] ┆ 250.002 ┆ 255.008 ┆ 5.0 ┆ 5.0 ┆ fixed_a ┆ fixed_ │\n", + "│ ┆ ┆ ] ┆ ┆ 293 ┆ 95 ┆ ┆ ┆ ngle ┆ energy │\n", + "│ 88174 ┆ 1824 ┆ [\"znpc\" ┆ [\"i0\"] ┆ 249.992 ┆ 365.009 ┆ 0.0 ┆ 20.0 ┆ fixed_e ┆ fixed_ │\n", + "│ ┆ ┆ ] ┆ ┆ 855 ┆ 461 ┆ ┆ ┆ nergy ┆ energy │\n", + "│ 88423 ┆ 4 ┆ [\"binar ┆ [] ┆ 249.998 ┆ 250.000 ┆ 0.0 ┆ 0.0 ┆ single_ ┆ fixed_ │\n", + "│ ┆ ┆ y\"] ┆ ┆ 516 ┆ 403 ┆ ┆ ┆ point ┆ energy │\n", + "│ 88425 ┆ 1 ┆ [\"binar ┆ [] ┆ 250.000 ┆ 250.000 ┆ 0.0 ┆ 0.0 ┆ single_ ┆ fixed_ │\n", + "│ ┆ ┆ y\"] ┆ ┆ 403 ┆ 403 ┆ ┆ ┆ point ┆ energy │\n", + "│ 88426 ┆ 1183 ┆ [\"binar ┆ [] ┆ 249.996 ┆ 286.010 ┆ 0.0 ┆ 60.0 ┆ fixed_e ┆ fixed_ │\n", + "│ ┆ ┆ y\"] ┆ ┆ 629 ┆ 368 ┆ ┆ ┆ nergy ┆ energy │\n", + "│ 88429 ┆ 340 ┆ [\"binar ┆ [] ┆ 285.995 ┆ 286.017 ┆ 0.0 ┆ 60.0 ┆ fixed_e ┆ fixed_ │\n", + "│ ┆ ┆ y\"] ┆ ┆ 529 ┆ 789 ┆ ┆ ┆ nergy ┆ energy │\n", + "│ 88430 ┆ 1315 ┆ [\"terna ┆ [] ┆ 249.996 ┆ 286.007 ┆ 0.0 ┆ 60.0 ┆ fixed_e ┆ fixed_ │\n", + "│ ┆ ┆ ry\"] ┆ ┆ 629 ┆ 895 ┆ ┆ ┆ nergy ┆ energy │\n", + "└─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴────────┘\n" + ] + } + ], + "source": [ + "import polars as pl\n", + "summary_all = summarize_beamtime_scans(BEAMTIME)\n", + "\n", + "assert summary_all.height > 0, \"no scans found for beamtime\"\n", + "# Configure polars to print all rows\n", + "pl.Config.set_tbl_rows(33)\n", + "pl.Config.set_tbl_cols(10)\n", + "print(summary_all)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "75825b90", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "shape: (1, 10)\n", + "┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬────────┐\n", + "│ scan_nu ┆ n_frame ┆ sample_ ┆ tags ┆ energy_ ┆ energy_ ┆ theta_m ┆ theta_m ┆ inferre ┆ catalo │\n", + "│ mber ┆ s ┆ names ┆ --- ┆ min ┆ max ┆ in ┆ ax ┆ d_scan_ ┆ g_scan │\n", + "│ --- ┆ --- ┆ --- ┆ list[st ┆ --- ┆ --- ┆ --- ┆ --- ┆ type ┆ _type │\n", + "│ i64 ┆ i64 ┆ list[st ┆ r] ┆ f64 ┆ f64 ┆ f64 ┆ f64 ┆ --- ┆ --- │\n", + "│ ┆ ┆ r] ┆ ┆ ┆ ┆ ┆ ┆ str ┆ str │\n", + "╞═════════╪═════════╪═════════╪═════════╪═════════╪═════════╪═════════╪═════════╪═════════╪════════╡\n", + "│ 88174 ┆ 1824 ┆ [\"znpc\" ┆ [\"i0\"] ┆ 249.992 ┆ 365.009 ┆ 0.0 ┆ 20.0 ┆ fixed_e ┆ fixed_ │\n", + "│ ┆ ┆ ] ┆ ┆ 855 ┆ 461 ┆ ┆ ┆ nergy ┆ energy │\n", + "└─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴────────┘\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "dataframe filtered\n" + ] + } + ], + "source": [ + "# Grab i0 scan for 88174\n", + "# The error says there is no \"Sample Theta\" column, but there is \"theta_min\" and \"theta_max\".\n", + "# If we want theta = 0.0, let's match both to 0.0 (or just \"theta_min\" if that's what user expects)\n", + "primary_scan = summary_all.filter(\n", + " (pl.col(\"scan_number\") == 88174)\n", + ")\n", + "print(primary_scan)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "b6b803d1", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "dataframe filtered\n" + ] + }, + { + "data": { + "image/png": "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t95669km7dCk5zznOcMv//IvD+9///uHm266afjGb/zG4XGPe9xwzz33cJ7v+77vG2688cbhrW996/Ce97xneOYznzl81Vd9Fd8/efLk8JSnPGV49rOfPfyv//W/hv/+3//7cN111w0vf/nLzxKq8z+9613vGh7/+McPX/zFXzz84A/+IF9feXHm0mc/+9nh8z7v84bv+q7vGt75zncOH/3oR4ff/u3fHj7ykY9wnle96lXDVVddNfz6r//68Ed/9EfD3/k7f2d4whOeMNx///2c5+u//uuHpz3tacMf/MEfDP/zf/7P4Qu/8AuHv//3//5ZQnV+pp/+6Z8err322uFNb3rT8LGPfWz4tV/7teHyyy8ffuEXfoHzrLw4v9N5F6B8xVd8xfCiF72If586dWp4zGMeM7zyla88q3Qd5nTbbbdNb85++9vfPv2+4447hosuumgyCJT+5E/+ZMrzjne8Y/o9OsEjR44Mt9xyC+d5zWteM1x55ZXDgw8+eBZQnN/p7rvvHr7oi75oeMtb3jL8tb/21zhAWXlxZtOP/uiPDl/zNV9TvX/69OnhhhtuGH72Z3+Wr408OnHixPCf/tN/mn7/8R//8cSfd7/73Zznt37rt4bNZjN84hOfOGAEhyc997nPHf7RP/pH6tq3fMu3DN/xHd8xfV95cf6n82qK56GHHkrvfe97p2E6fC/P+Psd73jHWaXtMKc777xTvaRx5MHDDz+s+PDEJz4xPe5xj2M+jJ/j0Pf111/PeZ7znOdML+36wAc+cMYxnO9pnMIZp2iwzce08uLMpv/23/5b+rIv+7L09/7e35umyr7kS74k/ft//+/5/sc+9rF0yy23KH6M7x0Zp6KRH+NUwlgOpTH/aMve+c53nmFE52/6qq/6qvTWt741/emf/un0+4/+6I/S7/3e76Vv+IZvmH6vvDj/03n1ssBPf/rT07wjGtoxjb8/+MEPnjW6DnM6ffr0tN7hq7/6q9NTnvKU6dqo9MePH58U2/JhvEd5Ij7RvTX1pze84Q3pD//wD9O73/1ud2/lxZlNH/3oR9NrXvOa9LKXvSz9s3/2zyae/JN/8k8mHrzgBS/g9ozaG/kxBjeYjh07NnUAVn70px/7sR+bguwxID969OjkG376p396Wk8yppUX5386rwKUNZ2dnvv73//+qWeypjOfxtfD/+AP/mB6y1veMi0KX9PZD9jH3va//tf/evo9jqCM+vHa1752ClDWdObSf/kv/yW9/vWvT7/6q7+a/spf+SvppptumjpTj3nMY1ZeHJJ0Xk3xXHfddVOkbHcojL9vuOGGs0bXYU0vfvGL05ve9Kb0O7/zO+mxj30sXx/bepxuu+OOO6p8GD8jPtG9NfWlcQrntttuS1/6pV869ezGv7e//e3pF3/xF6fvY29w5cWZS+NukCc/+cnq2pOe9KRplxS2Z8tGjZ8jTzGNO6rG3SQrP/rTuBNtHEX59m//9mkK8zu/8zvTS1/60mkX4phWXpz/6bwKUMZh1Gc84xnTvCP2aMbfz3rWs84qbYcpjYunx+DkjW98Y3rb2942bePDNPLgoosuUnwYtyGPRpr4MH6+733vU8o/jgKMW/msgV9TPX3t137t1I5j75D+xh78OIxN31denLk0TnXaLffjGojP+7zPm76PujI6NuTHOA0xrmdAfowB5Rh8Uhr1bLRl4/qINfWl++67b1orgmnswI7tOKaVF4cgDefhNuNxFfbrXve6aQX2937v907bjHGHwpp2S9///d8/bc373d/93eFTn/oU/913331qa+u49fhtb3vbtLX1Wc961vRnt7Z+3dd93bRV+c1vfvPwyEc+ct3auoeEu3jGtPLizG71Pnbs2LTF9cMf/vDw+te/frj00kuH//gf/6Pa2jrapN/4jd8Y/vf//t/DN3/zN4dbW7/kS75k2qr8e7/3e9MOrXVr67L0ghe8YPhLf+kv8Tbj//pf/+u0ff5HfuRHOM/Ki/M7nXcBypj+zb/5N5NBHs9DGbcdj/vX17S/NMat0d94NgqlUcH/8T/+x8MjHvGIyUD/3b/7d6cgBtOf//mfD9/wDd8wXHLJJZPh+KEf+qHh4YcfPguIDneAsvLizKbf/M3fnAK+saP0xCc+cfh3/+7fqfvj9taf+ImfGK6//vopz9d+7dcOH/rQh1Sez3zmM5MTHM/tGLd7f/d3f/e0lXxN/emuu+6a9GD0BRdffPHw+Z//+cM//+f/XG2dX3lxfqfN+N/ZHsVZ05rWtKY1rWlNazpv16CsaU1rWtOa1rSmCyOtAcqa1rSmNa1pTWs659IaoKxpTWta05rWtKZzLq0ByprWtKY1rWlNazrn0hqgrGlNa1rTmta0pnMurQHKmta0pjWtaU1rOufSGqCsaU1rWtOa1rSmcy6tAcqa1rSmNa1pTWs659IaoKxpTWta05rWtKZzLq0ByprWtKY1rWlNazrn0hqgrGlNa1rTmta0pnMurQHKmta0pjWtaU1rSuda+v8B1zz4TS2W3bAAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "def get_frames_for_scan(scan_number):\n", + " frames = view.frames.filter(view.frames[\"scan_number\"].eq(scan_number))\n", + " return frames\n", + "\n", + "# Get the frames for the i0 scan\n", + "frames = get_frames_for_scan(88174)\n", + "test_img = get_image(frames, 1)\n", + "plt.imshow(test_img, cmap=\"terrain\")\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "79dd7268", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "from dataclasses import dataclass\n", + "\n", + "@dataclass\n", + "class BeamLocation:\n", + " row: int\n", + " col: int\n", + "\n", + "def bg_subtract(image):\n", + " quartiles = np.percentile(image, [5])\n", + " # Subtract the 5th percentile from the image\n", + " image = image - quartiles[0]\n", + " return image\n", + "\n", + "def edge_subtract(image):\n", + " # Use the edge of the image as a metric for the background using 5 pixels from the edge\n", + " left = image[:, :5]\n", + " right = image[:, -5:]\n", + " top = image[:5, :]\n", + " bottom = image[-5:, :]\n", + " edge_mean = (left.mean() + right.mean() + top.mean() + bottom.mean()) / 4\n", + " image = image - edge_mean\n", + " return image\n", + "\n", + "def pre_process(image):\n", + " # Slice the left, right, top, bottom 10% of the image\n", + " image = image[10:-10, 10:-10]\n", + " # Perform a background subtraction\n", + " image = bg_subtract(image)\n", + " image = edge_subtract(image)\n", + " return image\n", + "\n", + "def direct_beam(image):\n", + " # Get the\n", + " processed_image = pre_process(image)\n", + " # Find the location of the max value in the image\n", + " max_row, max_col = np.unravel_index(processed_image.argmax(), processed_image.shape)\n", + " raw_max = BeamLocation(row=max_row, col=max_col)\n", + " # Per row integration and look for a peak in the integrated signal\n", + " integrated_signal = np.sum(processed_image, axis=1)\n", + " peak_row = int(np.argmax(integrated_signal))\n", + " # Get the col from the max in the peak row\n", + " peak_col = int(np.argmax(processed_image[peak_row, :]))\n", + " peak_location = BeamLocation(row=peak_row, col=peak_col)\n", + " return raw_max, peak_location\n", + "\n", + "# Dataframe constructor on the beamspot locations to compare each method\n", + "\n", + "data = []\n", + "\n", + "# Build a mapping from frame_number to its position/index in the dataframe, if required by get_image\n", + "if \"frame_number\" in frames.columns:\n", + " # Get index positions of each frame number\n", + " frame_to_idx = {frame: idx for idx, frame in enumerate(frames[\"frame_number\"])}\n", + "else:\n", + " frame_to_idx = {}\n", + "\n", + "for frame in frames[\"frame_number\"].unique():\n", + " # Defensive: handle potential missing frames or mismatch in index\n", + " idx = frame_to_idx.get(frame, None)\n", + " try:\n", + " image = get_image(frames, idx if idx is not None else frame)\n", + " result = direct_beam(image)\n", + "\n", + " raw_max, peak_location = result\n", + " energy_series = frames.filter(pl.col(\"frame_number\").eq(frame))[\"Beamline Energy\"].unique()\n", + " energy = energy_series[0] if len(energy_series) else None\n", + " data.append({\n", + " \"method\": \"direct_beam\",\n", + " \"frame_number\": frame,\n", + " \"row\": raw_max.row,\n", + " \"col\": raw_max.col,\n", + " \"energy\": energy,\n", + " })\n", + " data.append({\n", + " \"method\": \"peak_location\",\n", + " \"frame_number\": frame,\n", + " \"row\": peak_location.row,\n", + " \"col\": peak_location.col,\n", + " \"energy\": energy,\n", + " })\n", + " except Exception as e:\n", + " print(f\"Skipping frame {frame} due to error: {e}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "8a4cf758", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAAfGCAYAAAAKkN3NAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzsnQe4HFX5/9/ZXm5PDwkJECAQIFQJRXqHUEQQsADiT+VPE1SKKEVFUBQQ6R0LCkhHeg8thBIIJYGEBEJIu8mt28v8n/fMObMzszOzM3t375b7fp5ns2Xq7t3sme/5vkWSZVkGgiAIgiAIgiAIgiAqjqfyuyQIgiAIgiAIgiAIAiHRTRAEQRAEQRAEQRBVgkQ3QRAEQRAEQRAEQVQJEt0EQRAEQRAEQRAEUSVIdBMEQRAEQRAEQRBElSDRTRAEQRAEQRAEQRBVgkQ3QRAEQRAEQRAEQVQJEt0EQRAEQRAEQRAEUSVIdBMEQRAEQRAEQRBElSDRTRAVRJIkuOSSS4b9uHvttRdstdVWw35cgiAIgmhWaEwnGu27Q9QvJLqJumPBggXw7W9/G6ZMmQKhUAg22GAD2H///eFvf/sbjBTwhxp/sEvdcGCuFn/4wx/g4YcfhuEin8/Dn/70J9hoo43Y332bbbaBf//734637+3thR//+McwZswYiEajsPfee8O7775b8fM86aSTdH+DYDAIm222GVx00UWQTCYrfjyCIIhGhsZ0GtPreUwXvPTSS/Ctb30Lxo8fD4FAAMaOHQuzZ8+GBx98sGrHJEYWvlqfAEFoef3119kP64Ybbgj/93//x378li9fDm+++Sb89a9/hTPOOANGAvjDP23aNPX54OAgnHrqqXDUUUexZYJx48ZVdYDGC6UjjzwShoMLL7wQrrjiCvZ332mnneCRRx6BE044gV2IHHfccSUH90MPPRTef/99+OUvfwmjR4+GG264gV3AvPPOO7DppptW9FxRaN92223scV9fHzvX3/3ud7BkyRL417/+VdFjEQRBNCo0pivQmF7fY/rFF18Mv/3tb9l+f/KTn7AJonXr1sETTzwBRx99NBvX8dwJYkjIBFFHHHLIIfKYMWPknp6eomWrV6+W6x38L3XxxRdXfL9r16613feee+4pz5gxo6LHjEaj8oknnigPB1999ZXs9/vl0047TX0tn8/L3/zmN+VJkybJ2WzWdvt7772XfT7333+/+tqaNWvkjo4O+fjjj6/oueJngp+NFjzXWbNmyZIkyatWraro8QiCIBoVGtPNoTG9fsZ0PAYe69vf/racTqeLlj/11FPyY489VjffHaJxofByoq5Ap3DGjBnQ0dFRtAxDfbTceeedsM8++7DX0Xnccsst4cYbbyzaburUqXDYYYex0KEdd9wRwuEwbL311uw5gqFD+BzDn3bYYQd47733isKJW1pa4PPPP4cDDzyQhTlNnDiRzYoqv6v2rFixAn74wx+yGWw8T3x/d9xxB1SDjz/+mLkKkUiEhfBhaJeRVCrFZnVx1h3PZ/LkyXDuueey1wU4Ex2LxeDuu+9Ww97wc0C++OIL+H//7//B5ptvzj7LUaNGwTHHHAPLli0z/XvirRQ4A57JZNh+teeATsBXX30Fb7zxhu32//3vf9nnq3UMMCTt2GOPZfvWvrdqgOe6++67s+8Dfk+04Ow8/s3xs8bvzWmnncbC5gTXXnsteL1e3Wt/+ctf2D7POecc9bVcLgetra1w3nnnVfW9EARBVAoa04cGjenVH9N/85vfQFdXF/sb+v3+ouX4HcHvm2DNmjVwyimnsPPD79jMmTPZ50oQpSDRTdQVGNKDoUMffvhhyXVxMMb1f/WrXzGRggMN/sBff/31ResuXryYhQZhfs7ll18OPT097DGGDJ199tnwve99Dy699FI2mOCPOoY2aUHBc9BBB7EfWRz0cCDHQQ5vdqxevRpmzZoFzz33HJx++uksnA4HRvzBvuaaa6CS4HvCc8QBAD+P6dOnM4H25JNPquvg+zr88MPhz3/+M3v/mFOHoWZXX301fOc731HX+8c//sEG729+85vsMd4w5AqZN28eCxnE8DAUjD/96U/h+eefZ2Ff8Xhcd0777rsvu5UCL4rwwmeLLbbQvf6Nb3xDXV5q++233x48Hk/R9nhOn376KVQbcYHS2dmpy+NDkY0XdPg3wTC1m2++GQ444AB2QYLgZ4x/l1dffVXdbs6cOey94L32PWJI4h577FH190IQBFEJaEwvHxrTqz+mf/bZZ7Bw4UL2meGkdikSiQT7XPDz++53vwtXXnkltLe3swkM/C4QhC21ttoJQsszzzwje71edttll13kc889V3766adNQ37i8XjRawceeKC88cYb616bMmUKC/N5/fXX1ddw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c9GN1curWnGyVHh5mU63UkgtX6UelM2LMQy/WS5fao0nqSmAht/rspzuEqI7U5zTjUzuisA3pnax/0sPzye3myCIeqBaLcOI+gov1zw2XtBVNKdbEbpZjx/SWeW9BALORXcqpozRcYjoXpc8pZ1ucexynO4BCEPA64HWoM+8mFqjVDAfXK0Ud8We4+2Ti5e38BZiJLoJorhF2NRRiujO5uXi4g7D6nQ7r15elNNNTrcD7MPLicrgSxlEt6HyeHk53UnTnG5teLmxoNpD764Y9kk0giAIJ11HKtMyrEmmiof5d7qSolvW5NjrWoYZC6lV8nqDtwzLgCKSEX8w4Fx0D/ax+4SnEFqubTtm63SLdmXGUHeH4eXocreEuOhOGc5VFCWrd6dbuNztk1gFeeuc7tUwkiDRTdgiwskntIcgyMNdhruYmtuxRvykG7OItIMIhUmbI5UKL6cCdBUhkFZE96AcKt/pFuHlQd7OxCDcC0538c/8IVtPYAP7otUD8PFKTQV0giCIumcE5nQPN5V0ui0mVIyF1Cp6TO4up2SfWgzYy8WfXY9tQSauTGqnvHrRLQqped043SLU3Ynohgi71m7hTvdAozrdVu3CinK6GyA3vYKQ6CZsEQK7IxKAzkigJsXUtHncTlw58fuuFYzY+krvfNOwbIZRZFMhteoQyipCd5XcNQSnm4vutommLcOswsuR9rAf9t9CCe+int0EQTRty7Bmyekebqe7gil4Ondb+7cxiGypku+Ru81JLroxT1oIZieiO5tQxui0zyi6letgL1g73VJZTne/3ukW4eWpBu3VLSYFzPK5EWoZRhB6UOCK8PLOqB86Iv6aFFNz73RLRYLR2DKMwqbNaSSR3ciXUtG8MsCuVEV3svzwciG6LVqGmYWXawuqPTL/a8jmqMYBQRC1hPp0j4RCavY53ZV3upN5RbxijrQbpzvPRXfW16J73esgvFwyONvG53ZOdz+EmdPdKsLLG97pNvToFlDLMILQE0vnWA430hEuON1CiNcCNwK8uE+3tpBa/YrJWtJILcPq50zc05of0DndkqEImqvwctXpNrQMswkvR/bcfAx0RQPQPZiCOYu73R+fIAiiBlCf7ubo011UvbySCKc7r0w6Y460G9EtcxGc9etFtyTCyyFb8tg5/j10I7odO90Yls23abh2YVrRje3PUoMwUiDR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UhHWdAMAAAAAAADECIJuAAAAAAAAgBhB0A0AAAAAAAAQIwi6AQAAAAAAAGIEQTcAAAAAAABAjCDoBgAAAAAAAIgRBN0AAAAAAAAAMYKgGwAAAAAAACBGEHQDAAAAAAAAxAiCbgCISFtbW6I3AQAAACKAfThAfCHoBkgBLpeL5s6dS/369aOsrCwaNWoUvfnmm+KyL7/8kkwmE33++ec0ZswYys7OpgkTJtCWLVu87uO9996j448/njIzM6l///50//33U3t7u/tyvo+nn36azj77bMrJyaGHH35YnP/QQw9RaWkp5eXl0a9+9Su68847afTo0eKyJUuWkM1mo0OHDnk91s0330yTJk2KwysDAABgbNiHA6QBCQCS3kMPPSQNGTJEWrBggbR9+3Zp3rx5kt1ul7788kvpiy++kPhPfdy4ceLnjRs3SpMmTZImTJjgvv2SJUuk/Px86fnnnxe3//TTT6W+fftK9913n/s6fB+lpaXSf/7zH3Gd3bt3Sy+99JKUmZkpztuyZYt0//33i/sZNWqU+3aDBg2SHnnkEffPDodDKikpEbcBAABId9iHA6Q+BN0ASa6lpUXKzs6Wli9f7nX+7NmzpV/84hfuHfZnn33mvuzDDz8U5zU3N4ufp0yZIv3xj3/0uv1///tfqXv37u6f+fo333yz13X4Q8ANN9zgdd7EiRO9dth//vOfpaFDh7p/fuutt6Tc3FypoaEh6ucOAACQzLAPB0gPKC8HSHLbtm2jpqYm+ulPf0q5ubnurxdffJG2b9/uvt7IkSPd33fv3l2cVlRUiNPvv/+eHnjgAa/bX3311XTw4EFx3youbdPi8raf/OQnXuf5/nzllVeKbfz666/Fz88//zxdeOGForwNAAAgnWEfDpAerIneAACITkNDgzj98MMPqWfPnl6X2e12906b12Vp13ap68jU++D1X+eff77f/fP6MFUkO1leKzZz5kyaN2+eWK/28ccfizVqAAAA6Q77cID0gKAbIMkNGzZM7Jj37NlDJ598st/l2iPlwXDzFT7iPWDAgLAee/DgwbRq1Sq6/PLL3efxz764OcsvfvELKi8vp2OOOYYmTpwY1uMAAACkIuzDAdIDgm6AJMcdR2+77Ta65ZZbxFHvk046iWpra+mrr76i/Px86tOnT6f3ce+999JZZ51FvXv3pp/97GdkNptFudqG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/67x/y8AQKJgnx457NONtU9///33xelll10W0vU/++wz8f/Uv39/sZ6d9/Pcx2DixIn03XffhXxQAlKcBJAgn376qWSxWMTXiSeeKN1+++3SJ598IjkcDr/rNjU1+Z03ffp0qX///l7n9enThw9dS8uXL3efx/fJ52VlZUm7d+92n//Pf/5TnP/FF1+4z7viiivEeTfddJP7PJfLJZ155plSRkaGdOTIEff5fL0//OEP7p9nz54tde/eXaqsrPTaposuukgqKCgI+BwC4cfwvW+tk08+WVz+4osvus9rbW2VysrKpFmzZrnP++9//yuZzWZp6dKlXrd/5plnxO2/+uor93k5OTniufsKtM0rVqzwe3z1teevcHT0XNXLHnjgAb/LnnrqKXHZ5s2bg973G2+8Ia6zZMkSv8suuOAC8XrpiR+Lfwd4uysqKqRvv/1WmjFjhjj/L3/5i/t6f/vb38R5L730kvs8/p3nv4Hc3Fyprq7Oa/s3bdokfn7//fclu90unX322dLPf/5z921HjhwpnXfeebo+FwCAcGGfHhj26cm3T+d9Kj9WdXV1SNcfPXq0VFpaKh09etR93vfffy/+vy6//HL3efPmzRP3u3PnTt22FZIHysshYbjpFB8V5yO333//vTgCzeVfXFalHmVUcRmUNnvI64a48QaXjPHPWlymduKJJ7p/5q6TjEvZuMGL7/mBumbyUW2VepSbG2bw0cxAeH/91ltviaPv/D1vn/rFz4m3kY926oVLqbRrw/hILx8p1j4Xzp7ykXAu3dJuD78O7Isvvuj0cbSve1tbGx09elSUtXHplO/z4aPheo7B4CPFahmXLy4l1F4nktt3dNtIPffccyIbwiWTfDT+888/F6V/t956q/s6H330kWg484tf/MJ9HjeTUTuwLl682J3pZkuWLHFntLkkj/9u+HvGmXHOKqnXBQBIFOzTI4d9urH26VzJwIJl3bUOHjwoGrxxtVpxcbH7fK5G478J3ucDMATdkFAcRPCaLC6t4sYac+bMEeVF3HWTS51UX331FU2dOtW9VoYDGy4rY747aO1OmHFjF8ZrnwKdz4+txWVpXCLk2yCLBdsBHTlyRARA3M2St037ddVVV+neSIbLwviDgxY3F9E+F25WwuXIvtujPpdQtod3Yvfee6947XhHx+uT+T74ufq+7npTPxxo16pp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xxSKbg326SbEICpxMHXLCmDLsJgj/wcFMTBSKysEivOM3z8hnmimRALTywmJfnp593/5XxdJenlqegwj3RWuMVGLdGdFMdKtfTb5vYpGoI9GaqaHolvDmepB0U1Ch+nlgWCk21SIENbqX6MhutOqARkOcxbWdZuKKVOmoH///sjOzkaDBg1w+umnY926dW7bFBUV4ZprrkHdunWRlZWF8ePHY88edyf6rVu3Yty4cahevbraz2233YayMscYGg+077NA0U1IDLAYm14e00i3R0138RGg9Kj7pHE0jNS03yYaqSUtFN0aTC8nEcD0cu+x0++QHCjdnMQutTw92y6Qo4EzxZyi20zMmzdPCepFixZh1qxZKC0txahRo1BQUODc5qabbsLXX3+Njz/+WG2/c+dOnHnmmc715eXlSnCXlJRgwYIFePPNN/HGG2/g3nvvjX+kWy58aYZKiAndyytZ37CrPeraehhiXtOtRbllTEyvEUUjNU10F0cn0EcjNdPDsK4G08sJiU16ub/nnLiIsXN5FOq5NcSMZv869uo2GTNmzHB7LmJZItXLli3DsGHDkJubi9deew3vvfcehg8frraZPn06OnfurIT6wIEDMXPmTPz111+YPXs2GjZsiF69euGhhx7CHXfcgfvvvx/p6enxi3TTCJWQKKPNqluMdS/PbgzcttF/PbSRaFFp7Zi0dmGRGIsG1afbR3p5NCLdErWXuvFApnQ0UosLjHRr0L2cRADTy70JykiNke7Yo11gRCO13KtX967ovQeJGBHZQp06ddS9iG+Jfo8cOdK5TadOndCiRQssXLhQPZf77t27K8GtMXr0aOTl5WH16tU+36e4uFit198Mhe3CCDGOaFzPZORUvk0sBLdeFGuR7pJ8+31Gdvj71BupWUMwUjMyu1aVdVkqTzGX9xfPFYGR7phC0a3h/ANgpJuQuES6SeL36Pbq1c1It1mpqKjAjTfeiGOPPRbdunVTy3bv3q0i1bVquV+IicCWddo2esGtrdfW+aslr1mzpvPWvHlzgz8M24UREltBXokwH3i1+/OuZwDdzwJOnoq44xnpLnGU14SbWh60kVqG633LtOycVGNd2bUa7UAp5ppzufwfav4rJCZQdGtEI9WDkCTEu6Y72Eg3BXhMa7qzoim6G9vv2avbtEht96pVq/DBBx9E/b0mT56soura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9l433ngjhg4dGoMzQwghhJgbjuGEJAE2QkjC8/DDD9s6depkmzFjhm3jxo226dOn2zIyMmxz5861/fTTTzb5Ux8wYIB6vnr1atvQoUNtgwcPdr5+/vz5tpycHNsbb7yhXj9z5kxbq1atbPfff79zG9lHgwYNbK+//rraZsuWLbZ33nnHlpmZqZatW7fO9sADD6j99OzZ0/m6Dh062J544gnn85KSElu9evXUawghhJBkh2M4IVUfim5CEpyioiJb9erVbQsWLHBbPnHiRNt5553nHLBnz57tXPftt9+qZYWFher5iBEjbI8++qjb699++21b48aNnc9l+xtvvNFtG7kIuOaaa9yWHXvssW4D9uOPP27r3Lmz8/mnn35qy8rKsuXn50f82QkhhJBEhmM4IckB08sJSXA2bNiAo0eP4sQTT0RWVpbz9tZbb2Hjxo3O7Xr06OF83LhxY3W/d+9edf/nn3/iwQcfdHv95Zdfjl27dql9a0hqmx5JbzvmmGPclnk+v/jii9UxLlq0SD1/4403cPbZZ6v0NkIIISSZ4RhOSHKQGu8DIIRERn5+vrr/9ttv0bRpU7d1GRkZzkFb6rL0tV1aHZm2D6n/OvPMM732L/VhGuEMslIrdsopp2D69OmqXu37779XNWqEEEJIssMxnJDkgKKbkASnS5cuamDeunUrjjvuOK/1+plyf4j5isx4t2vXLqT37tixI5YsWYKLLrrIuUyeeyLmLOeddx6aNWuGtm3b4thjjw3pfQghhJCqCMdwQpIDim5CEhxxHL311ltx0003qVnvIUOGIDc3F7/++itycnLQsmXLSvdx77334uSTT0aLFi3wr3/9C1arVaWrrVq1Sjmb+uO6665TKWySsiZuqh9++CFWrFihnFP1jB49Wh2L7EtS4AghhBDCMZyQZIE13YRUAR566CHcc889quVI586dMWaNSIKMAAEAAElEQVTMGJWqJqlgwSAD6jfffIOZM2eif//+GDhwIKZOnVrpYH/BBRdg8uTJ6oJBZto3b96s6r/06WyCXADI8vLycrcZdUIIISTZ4RhOSNXHIm5q8T4IQkjVQcxgGjVqhLfffttt+cSJE7Fv3z589dVXcTs2QgghhPiHYzgh0YHp5YSQsBFX1BdffFHNsqekpOD999/H7NmzMWvWLOc2kia3cuVKvPfeexysCSGEEJPA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EoJuAAAAAACShKAbAAAAAIAkIegGAAAAACBJCLoBAAAAAEgSgm4AAAAAAJKEoBsAAAAAgCQh6AZQL6Wlpek+BAAAUA+04UBqEXQDGcDn82nChAnq1q2bGjRooH333Vcvvviife7999+Xx+PR9OnTNXDgQDVs2FBDhgzR4sWLo97jf//7n/bff38VFhZqjz320C233KKysrLw8+Y9HnroIZ1wwglq1KiR7rjjDrv99ttvV5s2bdSkSRNdcMEFuv7669W/f3/73Icffqi8vDytW7cu6rOuvPJKHXLIISk4MwAAOBttOJAF/ABc7/bbb/f37NnTP3XqVP/y5cv9jz/+uL+goMD//vvv+9977z2/+V990KBB9vHChQv9hxxyiH/IkCHh13/44Yf+pk2b+p944gn7+nfeecfftWtX/8033xzex7xHmzZt/P/+97/tPt9//73/v//9r7+wsNBuW7x4sf+WW26x77PvvvuGX7f33nv777777vDjnTt3+lu1amVfAwBAtqMNBzIfQTfgcsXFxf6GDRv6Z86cGbV93Lhx/jPPPDPcYL/77rvh59544w27bceOHfbxsGHD/HfeeWfU6//zn//427dvH35s9r/yyiuj9jEXAZdeemnUtoMPPjiqwb7rrrv8vXr1Cj9+6aWX/I0bN/Zv27Ztl393AADcjDYcyA6UlwMut2zZMm3fvl1HHXWUGjduHL499dRTWr58eXi/fv36hX9u3769vd+wYYO9//LLL3XrrbdGvf7CCy/Ujz/+aN87xJS2RTLlbQceeGDUtsqPf/vb39pjnD17tn38xBNP6PTTT7flbQAAZDPacCA75Kb7AADsmm3bttn7N954Q7vvvnvUcwUFBeFG24zLihzbFRpHFnoPM/7rlFNOqfL+ZnxYSH0aWTNW7Pjjj9fjjz9ux6u99dZbdowaAADZjjYcyA4E3YDL9e7d2zbMq1at0mGHHVbl+cie8uqYyVdMj/eee+5Zp8/u0aOH5s6dq3POOSe8zTyuzEzOcuaZZ6pjx47q3r27Dj744Dp9DgAAmYg2HMgOBN2Ay5kZR//4xz/qqquusr3eQ4cO1ebNm/XJJ5+oadOm6tKlS63vcdNNN+m4445T586ddeqpp8rr9dpyta+//trObFqdyy+/3JawmZI1M5vqc889p6+++srOnBppxIgR9ljMe5kSOAAAQBsOZAvGdAMZ4LbbbtONN95olxzp1auXRo4caUvVTClYPEyD+vrrr+udd97RAQccoIMOOkj33XdfrY392LFjNX78eHvBYHraV6xYYcd/RZazGeYCwGwvLy+P6lEHACDb0YYDmc9jZlNL90EAyBxmMph27drpP//5T9T2cePG6aefftKrr76atmMDAADVow0HkoPycgD1ZmZFnTRpku1lz8nJ0TPPPKN3331X06ZNC+9jyuQWLFigp59+msYaAACHoA0HUoegG0C9mRlU33zzTd1xxx0qLi62k7K89NJLGj58eHifE088UZ9++qkuvvhi24MOAADSjzYcSB3KywEAAAAASBImUgMAAAAAIEkIugEAAAAASBKCbgAAAAAAkoSgGwAAAACAJCHoBgAAAAAgSQi6AQAAAABIEoJuAAAAAACShKAbAAAAAIAkIegGAAAAACBJCLoBAAAAAEgSgm4AAAAAAJKEoBsAAAAAgCQh6AYAAAAAIEkIugEAAAAASBKCbqCePB6Pbr755pR/7uGHH64+ffqk/HMBAMhUtOlItieeeML+na1cuTLdh4I0IOhGWi1YsECnnnqqunTposLCQu2+++466qij9OCDDypbmEbefAnXdjMNc7LceeedmjJlilLh22+/1XXXXaf+/furSZMmat++vY499ljNmzcv5v5r1qzR6aefrubNm6tp06Y68cQT9d1338X9eTNnztTQoUPVsGFDtWvXTldccYW2bdumRKv872WO9bDDDtMbb7yR8M8CACeiTadNz5Q23SguLtZ9992nQYMGqVmzZvZveu+999Zll12mJUuWJOUzkbly030AyF7mi/OII45Q586ddeGFF9ovz9WrV2v27Nn6+9//rssvv1zZ4JRTTtGee+4Zfmwaj0suuUQnn3yyfS6kbdu2SW2gzYXSSSedpGT717/+pccee0yjR4/W73//e23evFkPP/ywDjroIE2dOlXDhw+POhfmb8Ts83//93/Ky8uzDaAJZr/44gu1bNmyxs8y+wwbNky9evXSvffeqx9++EH33HOPli5dqrfeeivhv5u5uDznnHPk9/v1/fff66GHHtLxxx9vP2vEiBEJ/zwAcAra9ADa9Mxo03/++WeNHDlS8+fP13HHHaff/OY3aty4sRYvXqxnn31WjzzyiHbu3JnQz0SG8wNpMmrUKH/r1q39v/76a5Xn1q9f73c687/Pn//854S/708//VTjex922GH+ffbZJ6Gf2ahRI/+5557rT4V58+b5t27dGrXt559/tn8LBx98cNT2u+66y56LTz/9NLxt0aJF/pycHP/48eNr/axjjjnG3759e//mzZvD2x599FH7nm+//bY/kcx7XnrppVHbvvnmG7vdHAcAZDLa9Nho093Zph977LF+r9frf/HFF6s8V1xc7L/mmmvq/J6PP/64PdYVK1Yk6CjhJpSXI22WL1+uffbZx5YYVdamTZuox48//riOPPJIu72goEC9e/e2WcTKunbtansk33//fQ0cOFANGjRQ37597WPj5Zdfto9NidCAAQP0+eefR73+t7/9re3JNKVOJjPZqFEjdejQQbfeeqvNXtbGlE2df/75tgfbHKf5/f79738rGb755hvbY2xKrEwJ3913311ln5KSEv35z3+2ve7meDp16mTLwMz2EFPmVlRUpCeffDJc9mbOg2GytabnukePHvZcml7o0047LeZ4JPPvaW61MefdnONI5n0POeQQLVq0KGr7iy++qAMOOMDeQnr27Gl7up9//vkaP2fLli2aNm2azjrrLFvCFmIy0ebza3t9Ipje+FatWlU5Lxs2bNC4cePs34n5W9x3333t+Y+0//77R2VFDPO3a/59vvrqq/C25557zm6rfO4AIJVo03cNbbpz2vQ5c+bYoWGmnTYZ/MrMuTcZ9kgzZsywv7P5GzP/D5iyedplRKK8HGljxnzNmjVLX3/9da2TiJjG2DR2J5xwgnJzc/Xaa6/ZhsPn8+nSSy+N2nfZsmW2DOh3v/ud/XI2X4ymxHfSpEm2nMm8zpgwYYIdV2RKhbzeiv6n8vJyW1JkSqNMo2fKo0wjV1ZWZhvq6qxfv96+xjRwZrxP69atbbmT+dI2jcWVV16pRPn111/tMZqgzPwOpiH705/+ZC8+jjnmGLuPOTfmfH388ce66KKLbABoxtuZUi4zFik03us///mPLrjgAh144IF2P6N79+72fu7cubZkcMyYMerYsaNtmM2/hRmLZi4QzMVBiGk0jfpOELJu3ToboIaY4zfBpbngqcwc6zvvvKOtW7faMWSxmN/V/JuZC7VI+fn5duxZ5YuzZDAldObfKnQ+jR07dtjzZ/5Ozd9Jt27d9MILL9iLok2bNukPf/iD3c803s8880z4dRs3btTChQvt3+pHH32kfv362e3mZ/O3Zv59ASBdaNPrjzbdWW36q6++au/PPvvsuPZ/99137b/THnvsYcf0m3bezGNw8MEH67PPPrOdRwDl5Uibd955x5YUmdvgwYP91113nS0P2rlzZ5V9t2/fXmXbiBEj/HvssUfUti5dutjSnZkzZ4a3mfc02xo0aOD//vvvw9sffvhhu/29994LbzPlWGbb5ZdfHt7m8/lsmVF+fr4tEwupXC42btw4W/ZkyqoijRkzxt+sWbOYv0N9S9HM80899VR4W0lJib9du3b+0aNHh7f95z//saVRH330UdTrJ02aZF//ySef1FqKFuuYZ82aVeXzQ+fe3Orjww8/9Hs8Hv+NN95Y5TzceuutVfafOHGife7bb7+t9j1feOEFu49578pOO+00e74SyXyW+Rswx71hwwZbcjdy5Ei7/a9//Wt4v/vvv99u++9//xveZv7mzf8DjRs39m/ZsiXq+E2JuvHqq6/6CwoK/CeccIL/jDPOCL+2X79+/pNPPjmhvwsA1BVtemy06e5r002baj4r1lCJWPr37+9v06aN/5dffglv+/LLL+2/1znnnBPeRnl5dqO8HGljJp0yveKm5/bLL7+0PdCm/MuUVYV6GUNMGVRk9tBMcGEm3jAlY+ZxJFOmNnjw4PBjM+ukYUrZzAQvlbfHmjXT9GqHhHq5zYQZpjczFtNev/TSS7b33fxsji90M7+TOUbT25koppTK9PhH9vSanuLI38VkT01PuCndijwecx6M9957r9bPiTzvpaWl+uWXX2xZmymdqvz7mN7w+vSIm1Jrk8UwGV9TJhdieopDZVyVmVLCyH1iqe31Nb22vsxkMiYbYkomTW/89OnT7e909dVXh/d588037QRDZ555ZnibmUwmNAPrBx98EM50Gx9++GE4o21K8sz/N+Znw2TGTVYptC8ApAttev3RpjurTTeVDEZ1WfdIP/74o53gzVSrtWjRIrzdVKOZ/ydMmw8YlJcjrUwQYcZkmcbPNNKvvPKKLZUys26aLzHT2BqffPKJLQczDfr27duj3sM0fmYph5DIRtgIPWfGPsXabsq6IpmyNFMiFMksEWFU1wD99NNPNgAys1maW3UNUaKYsjBz4RBpt912ixrra2bzNOOJTBBY3+MxjZgp2TPj78zYtsgxcJUvjOrDjDsz4/VMSZkpmYsc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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "df = pd.DataFrame(data)\n", + "\n", + "\n", + "# Determine unique sample thetas; assume 'Sample Theta' exists in i0_frames and corresponds to frame_number\n", + "if \"Sample Theta\" in frames.columns:\n", + " frame_to_theta = dict(zip(frames[\"frame_number\"], frames[\"Sample Theta\"]))\n", + " df[\"Sample Theta\"] = df[\"frame_number\"].map(frame_to_theta)\n", + "else:\n", + " raise ValueError(\"i0_frames does not contain 'Sample Theta' column.\")\n", + "\n", + "sample_thetas = sorted(df[\"Sample Theta\"].dropna().unique())\n", + "n_theta = len(sample_thetas)\n", + "\n", + "fig, axs = plt.subplots(n_theta, 2, figsize=(10, 5 * n_theta), squeeze=False)\n", + "colors = {\"direct_beam\": \"tab:blue\", \"peak_location\": \"tab:orange\"}\n", + "\n", + "for row_idx, theta in enumerate(sample_thetas):\n", + " theta_df = df[df[\"Sample Theta\"] == theta]\n", + " for col_idx, (method, group) in enumerate(theta_df.groupby(\"method\")):\n", + " ax_row = axs[row_idx]\n", + " # The two columns: one for \"row\", one for \"col\"\n", + " group.sort_values(\"energy\").plot(\n", + " x=\"energy\",\n", + " y=\"row\",\n", + " ax=ax_row[0] if len(ax_row) > 1 else ax_row,\n", + " ls=\"-\",\n", + " color=colors.get(method, None),\n", + " legend=(row_idx == 0),\n", + " label=method\n", + " )\n", + " group.sort_values(\"energy\").plot(\n", + " x=\"energy\",\n", + " y=\"col\",\n", + " ax=ax_row[1] if len(ax_row) > 1 else ax_row,\n", + " ls=\"-\",\n", + " color=colors.get(method, None),\n", + " legend=(row_idx == 0),\n", + " label=method\n", + " )\n", + " # Set titles\n", + " axs[row_idx][0].set_title(f\"Sample Theta: {theta} - Row\")\n", + " axs[row_idx][1].set_title(f\"Sample Theta: {theta} - Col\")\n", + "\n", + "plt.tight_layout()\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "e8f620d8", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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MUGL/kwri91blizSHx20taXVydq0GaEa1cbne70QqSxv2bpaD2ujpVrXleveZ2MbLC9tXX3nUjIPi+vt2WMbjIqxeo/ZJbaNPRcbJVk5SqmOa6WvW8+0CH164J61QSsT6Mr6jOXBzkRara+1tT9nebUsof3rvctjX7Mepp/1OYszktNMj0RPMGAmbBHvd11brLoV+9T7rMqDD4R29/uWtwyl3lfbphVgYVg2Xa11GnWderE0jGNr1LHWFshJ9PGGvUZ8LC+Num2GbnmlH8J7TDBeOX7au8kaLdR9XrDsd7zeymr1re9bjKzWioOzKV4yHKNesX5eOXGWaEuO//b3YtWrWMf67BUdXmz7aWQ2pX0+1rF+vlzLhvZtzzC94/0eTFVwspr3xXZZdey26V8MTnxsj+260lY29lfevzS25dJe29t7Fx5CvslYz8Ay13fvWtHj9t16H/WTNgmf12cvL6P/KKNNazuSiz4stOtxOqI9y+pmYxltaNebbRjfqTbU7mvPsWm5XQ+u+qSxb1WfhuWF+B2zs95AY1u3ekcQbuWm1GtVr8OzahfAboemMh2t3ZrotP1dH0E7b23MZy4v/mcsWtmYAOXOO+9sP2++7Iy1LkqXLl26dOnS5VHKvffeOxx44IEbD6A89rGPbT///ve/P2IFu/z/yz333DMcfvjhwz/+8Y/hgAMOWOvibGrpfbF+pPfF+pHeF+tHKnNSwcnOnTsf8d65BChbRiqugpOubOtHal/0/lgf0vti/Ujvi/UjvS/Wh+wusTDXSbJdunTp0qVLl40pHaB06dKlS5cuXdadzCVA2bFjx/DpT3+6/eyy9tL7Y/1I74v1I70v1o/0vphPWSi7s9anS5cuXbp06dJlD8pcMihdunTp0qVLl40tHaB06dKlS5cuXdaddIDSpUuXLl26dFl30gFKly5dunTp0mXdyVwClC996UvDUUcdNey9997Di170ouGqq65a6yJtKDn33HOHF7zgBcP+++8/PP7xjx9e85rXDDfeeGO454EHHhjOPPPM4eCDDx7222+/4fWvf/1w++23h3vqTr+nnnrqsO+++7bnfPjDHx4W7eC3Lv8rOe+884aFhYXh/e9/v1/rfbFn5dZbbx3e/OY3t/beZ599hmc961nDNddc45/XdQef+tSnhic84Qnt85NOOmm46aabwjPuuuuu4bTTTmubhh100EHDO97xjuG+ehhjl92WpaWl4eyzzx6OPvro1s5PecpThs985jPhjJfeF3MuZc7kwgsvLNu3by9f+9rXyg033FDe+c53loMOOqjcfvvta120DSMnn3xy+frXv16uv/76cu2115ZXvvKV5Ygjjij33Xef3/Oud72rHH744eWSSy4p11xzTXnxi19cTjjhBP98cXGxHHvsseWkk04qv/vd78pPfvKTcsghh5SPf/zja1Sr+ZerrrqqHHXUUeXZz352Oeuss/x674s9J3fddVc58sgjy1vf+tZy5ZVXlptvvrn8/Oc/L3/961/9nvPOO68ceOCB5Qc/+EG57rrryqte9apy9NFHl//85z9+zyte8YrynOc8p/z6178uv/rVr8pTn/rU8qY3vWmNajWfcs4555SDDz64XHTRReWWW24p3/3ud8t+++1XPv/5z/s9vS/mW+YOoLzwhS8sZ555pv+9tLRUdu7cWc4999w1LddGljvuuKOGJOWyyy5rf999991lr732agbB5E9/+lO754orrmh/Vye4ZcuWctttt/k9559/fjnggAPKgw8+uAa1mG+59957y9Oe9rRy8cUXl5e97GUOUHpf7Fn56Ec/Wl760pfO/Hx5ebkcdthh5XOf+5xfq320Y8eO8u1vf7v9/cc//rH1z9VXX+33/PSnPy0LCwvl1ltv/X+uwcaRU089tbz97W8P1173uteV0047rf3e+2L+Za6meB566KHhN7/5TaPpeC5P/fuKK65Y07JtZPn3v/8dDmmsfbBr167QD8ccc8xwxBFHeD/Un5X6PvTQQ/2ek08+uR3adcMNN+zxOsy71CmcOkXDNq/S+2LPyo9+9KPh+c9//vCGN7yhTZUdd9xxw1e/+lX//JZbbhluu+220B/13JE6Fc3+qFMJ9Tkm9f5qy6688so9XKP5lRNOOGG45JJLhr/85S/t7+uuu264/PLLh1NOOaX93fti/mWuDgv817/+1eYdaWir1L///Oc/r1m5NrIsLy+3fIeXvOQlw7HHHtuu1UG/ffv2NrC1H+pndk/WT/ZZl92XCy+8cPjtb387XH311ZPPel/sWbn55puH888/f/jgBz84fOITn2h98r73va/1wemnn+7tmbU3+6OCG8q2bdtaAND7Y/flYx/7WAPZFZBv3bq1+YZzzjmn5ZNU6X0x/zJXAKXL2kTu119/fYtMuux5qcfDn3XWWcPFF1/cksK7rD1gr9H2Zz/72fZ3ZVDq+Pjyl7/cAEqXPSff+c53hgsuuGD41re+NTzzmc8crr322hZM7dy5s/fFBpG5muI55JBDGlLWFQr178MOO2zNyrVR5b3vfe9w0UUXDb/4xS+GJz3pSX69tnWdbrv77rtn9kP9mfWTfdZl96RO4dxxxx3Dc5/73BbZ1X+XXXbZ8IUvfKH9XqPB3hd7TupqkGc84xnh2tOf/vS2Sort+XA2qv6sfUqpK6rqapLeH7svdSVaZVHe+MY3tinMt7zlLcMHPvCBtgqxSu+L+Ze5AiiVRn3e857X5h0Z0dS/jz/++DUt20aSmjxdwcn3v//94dJLL23L+Ci1D/baa6/QD3UZcjXS1g/15x/+8Icw+CsLUJfyqYHvMltOPPHE1o41OrR/NYKvNLb93vtiz0md6tQl9zUH4sgjj2y/17FSHRv7o05D1HwG9kcFlBV8mtRxVm1ZzY/osnty//33t1wRSg1gaztW6X2xAaTM4TLjmoX9jW98o2Vgn3HGGW2ZMVcodPm/ybvf/e62NO+Xv/xl+ec//+n/7r///rC0tS49vvTSS9vS1uOPP77906WtL3/5y9tS5Z/97GflcY97XF/a+l8QruKp0vtizy713rZtW1vietNNN5ULLrig7LvvvuWb3/xmWNpabdIPf/jD8vvf/768+tWvTpe2HnfccW2p8uWXX95WaPWlrY9OTj/99PLEJz7Rlxl/73vfa8vnP/KRj/g9vS/mW+YOoFT54he/2Axy3Q+lLjuu69e7/Pek4tbsX90bxaQO8Pe85z3lMY95TDPQr33taxuIofztb38rp5xyStlnn32a4fjQhz5Udu3atQY12tgApffFnpUf//jHDfDVQOmYY44pX/nKV8LndXnr2WefXQ499NB2z4knnlhuvPHGcM+dd97ZnGDdt6Mu937b297WlpJ32X2555572jiovmDvvfcuT37yk8snP/nJsHS+98V8y0L9b61ZnC5dunTp0qVLl7nNQenSpUuXLl26bA7pAKVLly5dunTpsu6kA5QuXbp06dKly7qTDlC6dOnSpUuXLutOOkDp0qVLly5duqw76QClS5cuXbp06bLupAOULl26dOnSpcu6kw5QunTp0qVLly7rTjpA6dKlS5cuXbqsO+kApUuXLl26dOmy7qQDlC5dunTp0qXLupMOULp06dKlS5cuw3qT/wHt8SRUK0kBfQAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def preview_image(frame_number):\n", + " img = get_image(frames, frame_number)\n", + " plt.imshow(img, cmap=\"terrain\")\n", + " loc = df[df[\"method\"] == \"direct_beam\"].iloc[frame_number]\n", + " loc2 = df[df[\"method\"] == \"peak_location\"].iloc[frame_number]\n", + " plt.plot([loc[\"col\"]], [loc[\"row\"]], \"x\", color=\"red\", ms=50)\n", + " plt.plot([loc2[\"col\"]], [loc2[\"row\"]], \"+\", color=\"white\", ms=50)\n", + " plt.show()\n", + "\n", + "preview_image(300)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "d50d6cee", + "metadata": {}, + "outputs": [], + "source": [ + "# Integrate the signal in a 10x10 pixel box centered on the peak location\n", + "\n", + "def integrate_signal(image, peak_location):\n", + " processed_image = pre_process(image)\n", + " # Get the 10x10 pixel box centered on the peak location\n", + " box_size = 10\n", + " start_row = peak_location.row - box_size // 2\n", + " start_col = peak_location.col - box_size // 2\n", + " end_row = start_row + box_size\n", + " end_col = start_col + box_size\n", + " # Integrate the signal in the box\n", + " signal = np.sum(processed_image[start_row:end_row, start_col:end_col])\n", + " return signal\n", + "\n", + "# Integrate the signal in a 10x10 pixel box centered on the peak location\n", + "data = []\n", + "for frame_number in range(len(frames)):\n", + " image = get_image(frames, frame_number)\n", + " peak_location = df[df[\"method\"] == \"peak_location\"].iloc[frame_number]\n", + " signal = integrate_signal(image, peak_location)\n", + " data.append({\n", + " \"frame_number\": frame_number,\n", + " \"energy\": frames[frame_number][\"Beamline Energy\"][0],\n", + " \"sam_theta\": frames[frame_number][\"Sample Theta\"][0],\n", + " \"signal\": signal,\n", + " })\n", + "refl_df = pd.DataFrame(data)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "ce14192b", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([10., 15., 20., 0.])" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "refl_df[\"sam_theta\"].unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "91edd939", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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MuVHjx6VhQsXur3/jBkzTMCvpexadj5z5kzJyMiodr9HH31UnnrqKXn66aflxRdflCuvvFL2799vMudlZWUSFxcns2fPls6dO8uSJUtMT7pm6/Xr8lYE3QAAAADgBTQzrAGr+vOf/yzDhw+XJ554wvHxN998U+Lj42XHjh3St29fCQ0NNcF2TExMnZ9LM+Tt27eX888/3zxOQkKCeT5Xtm3bJj/++KMJ7keNGmVu04y2Hm9VmoG/4oorzHU99r///e+yYsUKOfvss02wrkG5RTPeS5culY8//pigGwAAAAC8UbsAP5Nxbq7nrouRI0c6rq9fv15++uknU1ruqpdbg+6GOPPMM02grQPYNCDWi1UWXtX27dvF399fRowY4bitd+/e0qlTp2r3HTp0qOO6BvVhYWGVMuIvv/yyOXmgQb9m77V3PSkpSbwZQTcAAACANkv7jOtS4t2cNEi1HD9+XC644AL529/+Vu1+Wo7dUJrdXrNmjSkX//777+Xhhx+WP/3pTyab3bFjx3o/bkCVief6+mtZufrwww/lnnvukWeffVbGjx9vjkHL0JcvXy7ezDt+ugAAAAAADppV/vTTT82wMs0ye4I+7tSpU83lkUceMcG29otfcsklle6nA89KSkpk7dq1jmz8rl275NixY3V6Pu1V1/7xW265pVLW3tsxvRwAAAAAvMytt95qhptpf7RmnzU4/e677+Taa681U8Ab6quvvjL91uvWrTODzv7973+bjLQG2FX179/fBOY69Ez7szX41us6gdzHx6fWz6k94DrATb8O7Ut/6KGHzNfWJoNurbPXMyo6On7s2LHmhXVHl7HrC+180c8DAAAAANRP165dTWZYA+yzzjpLhgwZYlZ4aTba17fhuVV9nM8++8xMSB8wYIC8+uqr8p///EcGDRrk8v4alOtasUmTJpne7xtuuMGUhwfXIfa78cYbTRb98ssvN3HmkSNHKmW9vZVPeV2Ww4nIRx99ZMbB64uuL4TuXdOR7to8HxUV5TLovuOOO8zHHU/q42O+IbWVk5Mj4eHhkp2dbRrtAQAAAKCuCgoKZO/evWYqNolAz0pNTTWT1H/88Uc544wzWsT3uLniyjoX/z/33HPmrIWWLSgNvr/++mszYe7+++93+TkaZNdlTH1hYaG5OL84AAAAAICWSXu9dbibZtwPHTok9913n6mO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yurVq+2+7datW+XCCy9Ub4+exZdffrk5t5cooHSKa60mcGOSdnYhgy9ru7JMWe6OsRES2zrU5tucOjBZ9Unvzi5SWXEMKlux76j6Pwwu80YXjugsgzrFSGF5lbw4Z5enbw4RERERtWTQ/eWXX8p9990njz76qKxfv16GDh0qM2bMkOzsbJtvX1JSIj169JCnn35a2rdv35zbShRwQoODpFPb1uplrg1zboiaFhMRKlP6tjNnu1PTj0tJRbUkRIXJgA4x4q3r4h45e6B6+YvV6bLjiGlCOxEREREFQND94osvyk033STXXXedDBgwQN58802JjIyU9957z+bbjx49Wp577jm57LLLJDw83BW3mSggh6kdOMoJ5tZ2GsFo3/YNB89nD+lg7uteauznntArUQW33goD3s4a3EFqTog8/ss2thcQERERBULQXVFRIevWrZPp06fXfoCgIPXvFStWuOxGlZeXS0FBQZ0nokDVzRimpgeGBZqcwnK57O0V8vnq9Hr/p78n/RrIdMMp/ZMlPCRI9uUWy+erM9TrJlmtCvNGD57RT5XGL9tzVOZtt11NRERERER+FHTn5uZKdXW1JCcn13k9/n3kyBGX3ainnnpKYmNjzU8pKSku+9hEvmZcjwT1fOHOwAy6EGyv3HdMnvhlmxqcpiHz60h5ObQJD5GT+yWpl/VgspO8tJ/bUkp8pNwwybRC7MnftktldY2nbxIRERER+cP08oceekjy8/PNTxkZpswUUSCa1CdRQoJayd6cYkkLwBLz3zabVn0VV1Sr/mYNU8sLy6rUoLke7UzVAA3RU8wBb9/R6JX3drdP6yVxkaGyP7dY1h447umbQ0RERETuDLoTExMlODhYsrKy6rwe/3blkDT0fsfExNR5IgpUGAQ2ulu8enn+jsDKdu/NKTJns+GD5QfM2V5dWt4jMUrCQxrftT2tXztpbezkntzb+1aFNZSlR/85rE9n0E1ERETk10F3WFiYjBw5UubNm2d+XU1Njfr3+PHj3XH7iEj1JCcFZNA9a4upbWVcj3hJbBOusts6870zy7HSci0yLEQuHZ2iMuN/Glab9fYFI7vEqefr0hh0ExEREfl9eTnWhb3zzjvy4Ycfyvbt2+XWW2+V4uJiNc0crrnmGlUebjl8bcOGDeoJLx86dEi9vGfPHtd+JUR+bJrRj7xy31EpKq+S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iYmJEhwcLFlZpt2XGv7dvn17m++D1zvz9kREREREREQBGXSHhYXJyJEjZd68eebXYZAa/j1+/Hib74PXW749zJkzx+7bExEREREREQVsefl9990nf/7zn2XUqFFqNzdWhmE6+XXXXaf+H+vEOnXqpIahwd133y1TpkyRF154Qc466yz54osvZO3atfL222+7/qshIiIiIiIi8uWgGyvAcnJy5JFHHlHD0LD6a9asWeZhaenp6WqiuTZhwgS1m/tf//qX/OMf/5DevXvLDz/84PCObiIiIiIiIiJf5fSe7kDap0ZERERERET+ocAX9nQTERERERERkeMYdBMRERERERG5CYNuIiIiIiIiIjdh0E1ERERERETkJgy6iYiIiIiIiNyEQTcRERERERGRmzDoJiIiIiIiInITBt1EREREREREbhIiPuDEiRPmZeZEREREREREztLxpI4vW4pPBN1Hjx5Vz1NSUjx9U4iIiIiIiMiHHT16VGJjY1vs8/lE0B0fH6+ep6ent+g3h9xzuoTDk4yMDImJifH0zaEm4s/Rf/Bn6T/4s/Qf/Fn6D/4s/QN/jv4jPz9funTpYo4vW4pPBN1BQabWcwTc/EX3D/g58mfp+/hz9B/8WfoP/iz9B3+W/oM/S//An6P/CDLiyxb7fC362YiIiIiIiIgCCINuIiIiIiIiokAOusPDw+XRRx9Vz8m38WfpH/hz9B/8WfoP/iz9B3+W/oM/S//An6P/CPfQz7LViZael05EREREREQUIHwi001ERERERETkixh0ExEREREREbkJg24iIiIiIiIiN2HQTUREREREROQmDLqJiIiIiIiI3IRBNxEREREREZGbMOgmIiIiIiIichMG3URERERERERuwqCbiIiIiIiIyE0YdBMRERERERG5CYNuIiIiIiIiIjdh0E1ERERERETkJiHiA2pqauTw4cMSHR0trVq18vTNISIiIiIiIh9z4sQJKSwslI4dO0pQUMvln30i6EbAnZKS4umbQURERERERD4uIyNDOnfu3GKfzyeCbmS49TcnJibG0zeHiIiIiIiIfExBQYFK5ur4sqX4RNCtS8oRcDPoJiIiIiIioqZq6ZZlDlIjIiIiIiIichMG3URERERERERuwqCbiIiIiIiIKJB7uomIiIiIiFypurpaKisrPX0zyMXCwsJadB2YIxh0ExERERFRQO1qPnLkiOTl5Xn6ppAbIODu3r27Cr69BYNuIiIiIiIKGDrgTkpKksjIyBafZE3uU1NTI4cPH5bMzEzp0qWL1/xsGXQTEREREVHAlJTrgDshIcHTN4fcoF27dirwrqqqktDQUPEG3lXsTkRERERE5Ca6hxsZbvJPYUZZOQ5YvAWDbiIiIiIiCijeUnZMgfGzZdBNRERERERE5CYMuomIiIiIiIjchEE3ERERERGRn65Hu/nmmyU+Pl6VXW/YsEGmTp0q99xzT7M/tqs+jrOuvfZaOe+888SXcHo5EblFxrESeXfJPrnhpB7SJYHDSoiIiIha2qxZs+SDDz6QhQsXSo8ePSQxMdFlH/u7777zmung3o5BNxG5xYfLD8iHK9IkIixYHjqjv6dvDhEREZFfqaioME/qtmfv3r3SoUMHmTBhgss/P7Ln5BiWlxORWxw4WqyeF5RWefqmEBERETVYgl1SUeWRJ3xuZ8q577jjDlXSjYz1jBkzZMuWLXLGGWdImzZtJDk5Wa6++mrJzc01l2Hfeeedkp6erkrLu3Xr5vT35vXXX5fevXtLRESE+vgXXXSR3fLyzMxMOeuss6R169bSvXt3+eyzz9TnfPnll81vg9vx7rvvyvnnn6/WtuFj//TTT+b/x5qvG264Qb0/Pk7fvn3llVdeEV/HTDcRuUX6sRL1HA8oRERERN6qtLJaBjzyh0c+97bHZkhkmOMh2Ycffii33nqrLFu2TPLy8uTkk0+WG2+8UV566SUpLS2Vv//973LJJZfI/PnzVbDas2dPefvtt2XNmjUSHBzs1G1bu3at3HXXXfLxxx+rTPmxY8dkyZIldt/+mmuuUQE/StlRdn7fffdJdnZ2vbf7z3/+I88++6w899xz8tprr8mVV14paWlpKnNeU1MjnTt3lq+//loSEhJk+fLlqicd2Xp8Xb6KQTcRuRxObWuD7mpP3xwiIiIiv4DMMAJWeOKJJ2T48OHy3//+1/z/7733nqSkpMiuXbukT58+Eh0drYLt9u3bO/25kCGPioqSs88+W32crl27qs9ny44dO2Tu3LkquB81apR6HTLauL3WkIG//PLL1cu47a+++qqsXr1aTj/9dBWsIyjXkPFesWKFfPXVVwy6iYgs5RSVS1lljXqZmW4iIiLyZq1Dg1XG2VOf2xkjR440v7xx40ZZsGCBKi231cuNoLs5Tj31VBVoYwAbAmI86bJwazt37pSQkBAZMWKE+XW9evWSuLi4em87ZMgQ88sI6mNiYupkxGfOnKkODxD0I3uP3vVhw4aJL2PQTUQul3Gs1PxycTkz3UREROS90GfsTIm3JyFI1YqKiuScc86RZ555pt7boRy7uZDdXr9+vSoXnz17tjzyyCPy73//W2Wz27Zt2+SPG2o18Rzff5SVwxdffCF//etf5YUXXpDx48er24Ay9FWrVokv843fLiLyuXVhWinLy4mIiIhcDlnlb7/9Vg0rQ5bZHfBxp0+frp4effRRFWyjX/yCCy6o83YYeFZVVSWpqanmbPyePXvk+PHjTn0+9Kqjf/y2226rk7X3dZxeTkQup/u5oZjl5UREREQud/vtt6vhZuiPRvYZwekff/wh1113nZoC3ly//PKL6rfesGGDGnT20UcfqYw0Amxr/fr1U4E5hp6hPxvBN17GBPJWrVo5/DnRA44Bbvg60Jf+8MMPq6/N1zHoJiK3Bt3MdBMRERG5XseOHVVmGAH2aaedJoMHD1YrvJCNDgpqfpiHj/Pdd9+pCen9+/eXN998Uz7//HMZOHCgzbdHUI61YpMnT1a93zfddJMqD4+IiHD4c95yyy0qi37ppZfK2LFj5ejRo3Wy3r6q1QlnlsN5SEFBgcTGxkp+fr5qtCci73bJWytk9f5j6uWI0CDZ8fgZnr5JRERERFJWVib79+9XU7GdCQbJeQcPHlST1OfOnSunnHKKV/yMPRVXsqebyAfV1JyQ8qoaaR3m3MRLT/R0Y4p5dc0JCQ5yvLSIiIiIiHwLer0x3A0Z98zMTHnggQdUv/nkyZMl0DlVd/DUU0/J6NGjVZlAUlKSnHfeeWo8fEM++OADVcdv+cRTJaLmeeyXbTL0sdmy+WC+eJvyqmo5UlBW53WllSwxJyIiIvImS5YsUevG7D05q7KyUv7xj3+o8nOUl7dr105NPg+1mlYeiJzKdC9atEg17CPwxnQ6fFPRP7Bt27Y64+utIXVvGZw700xPRHWhI+SXTZlSUVUjX6xJl8GdB4s3OXS8VNC0EhkWrIJtvFxSXiVtwllYQ0REROQtRo0apYakucqMGTPUE9Xn1FXwrFmz6mWxkfFet25dg2UDCLLbt2/v8OcpLy9XT5a190RkcvB4qeQWmf4+/th6RB47d5BXlW7rIWpd4iPVbS0qr5ISDlMjIiIiL+IDY63cDpPFe/XqJf7mhBf+bJs11g4N6BAfH9/g26G2v2vXrqqR/txzz5WtW7c2WsaOBnf9hPcjIpPUjDzzy7lFFbLmgGlgmbf1c6fER5p7zrk2jIiIiLyBLnUuKamdP0P+paKiQj0PDvae2UdNrvfEjjaMpJ84caIMGjTI7tthj9t7770nQ4YMUUH6888/rxaeI/Du3Lmzzfd56KGH5L777quT6WbgTWSSmn68zr9/35wp43okiDdmundnFUoO14YRERGRl0AghlVY2dnZ6t+RkZFsffUjNTU1kpOTo36uISHe09rY5FuC3u4tW7bI0qVLG3y78ePHqycNATf2vL311lvy+OOP23yf8PBw9URE9aWmmzLd5w7rKD9uOCy/bzkij54zUIK8pMQ841ipep4S11pah5nuYooZdBMREZGX0G2vOvAm/xIUFCRdunTxqsOUJgXdd9xxh/zyyy+yePFiu9nqhko6hg8fLnv27GnKpyYKaJgMvu2wacbBnSf3kvnbsyW7sFzWpx+XUd0abvNo8Ux3QqREGeXlGKRGRERE5A0QjHXo0EHNpsLEbfIvYWFhKvD2JiHONqXfeeed8v3336vx71g47qzq6mrZvHmznHnmmU6/L1Gg23q4QCqqayQhKkx6tmsj0wcky/eph+S3zUe8IujGfUSGRXl5pDGxnIPUiIiIyBtLzb2p75f8V5CzJeWffPKJfPbZZ2pX95EjR9RTaampnBSuueYa1ZOtPfbYYzJ79mzZt2+frF+/Xq666ipJS0uTG2+80bVfCVEAlZYP79JWndKeMchUHvX7lkypqfH8pMa8kkopNLLaneMiJTLUyHRzkBoRERERBSinMt1vvPGGej516tQ6r3///ffl2muvVS+np6fXSecfP35cbrrpJhWcx8XFyciRI2X58uUyYMAA13wFRAE4RG14lzj1fHKfdqqEOzO/TDYezDO/3tOl5UnR4RIRGiyR4TroZqabiIiIiAKT0+XljUHZuaWXXnpJPRGRCzPdKW3VcwS2p/RPlp82mgaqeTrozjheW1oOkeaVYQy6iYiIiCgweVeHORHZlV1QJofySgWDGIcYQTecOdhUYv7rpkyHDsZaal0YRBnTyzlIjYiIiIgCFYNuIh+RmmHKcvdNjpY2xoAymNInSVqHBquAfPOhfA+vCzMF3SnmTLcRdFcy001EREREgYlBN5EPDlGz1DosWE7ul6RexhRzb8h01wbdXBlGRERERIGNQTeRrw1RS6nft33G4Nop5p4sMbcuL+cgNSIiIiIKdAy6iXxAVXWNbDqYbzPTDdP6mjLdaUdL5FhxhXjqNh7OK7M5SI1BNxEREREFKgbdRD5gZ1ahlFZWS3R4iPRs16be/0eFh0himzD18pECU+Db0rC2rLrmhISFBKmVYZY93cXc001EREREAYpBN5EP9XMP69JWgoJa2XybpOgI9TzLQ0G3uZ87rrX5NupMdykz3UREREQUoBh0E/ngfm5b2seagu4j+eXiDUPUgJluIiIiIgp0DLqJfEBqhjFErUv9IWpacowRdHs40637uSHKGKTGTDcRERERBSoG3UReLq+kQvblFKuXhzWU6TaC7mwPBd0ZNoLuyFAj013OoJuIiIiIAhODbiIvtyHDVFrePTFK4qJMw9JsaR8b7tFMd4at8nKd6a6slpoaz60yIyIiIiLyFAbdRH7Qzw1Jurw839OD1Cx7uk1Btw68iYiIiIgCDYNuIi+35ZBpP/eQzrENvp0uL/fE9PL8kko5XlKpXk6Jb21+fURIsLQyhq1zmBoRERERBSIG3URebuvhAvV8UCfHgm4Ev2UtnFXecjjfHHBHR4SaX4/VYZGhHKZGRERERIGLQTeRF8stKlc92sgW9+8Q0+Dbto0MlbAQ0590TmHLrg3bdNDIxneqXwLfWq8N4zA1IiIiIgpADLqJfCDL3T0hSqLCTcGrPa1atZLkGM8MU9Ml8Lay8ea1YZUsLyciIiKiwMOgm8iLbTXKtgc2UlpuXWLe0sPUNh3Ks9t33tooL2emm4iIiIgCEYNuIh/IdA/s2HBpuZbsgWFq2COecaxUvTyoo61MtylDX8JBakREREQUgBh0E3mxrUbZtqNBtycmmG82bmPXhEiJjawdoma9NqyEg9SIiIiIKAAx6CbyUoVllXLgqGn39UAbGWRb2sca5eUF5S0edNubrq6D7mIG3UREREQUgBh0E3mp7ZmF6nnH2AiJjwpz6H2SdKa7BXu6N5snl9sOuqOM6eWlLC8nIiIiogDEoJvIy4eoDXAwy11nkJoHyssH2wm6W+tMNwepEREREVEAYtBN5KW2HHJuiJp10H3ixAlxt+PFFXLweGmDE9Y5SI2IiIiIAhmDbiJvXxfmRNCdZOzprqiqkfzSSmmpLHc3DFFrXX+IGnCQGhEREREFMgbdRF6orLJa9mQXNTigzJaI0GBpa0wQb4kS88aGqAGDbiIiIiIKZAy6ibzQrqxCqao5IXGRodLBmEjudIl5CwxTMw9R69xQ0M3yciIiIiIKXAy6ibzQ1sO6nztWWrVq5dT7Jrfgrm5muomIiIiIGsagm8ib+7k7Od7PXT/T7d5d3ceKK+RQXqkDQbfOdDPoJiIiIqLAw6CbyMsz3c5KNsrRswrLWiTL3T0xSmIibA9Rs8x0F5ezvJyIiIiIAg+DbiIvU11zQrZnOr8uTEs2Jphnubmne/PBvAb3c2tR4SwvJyIiIqLAxaCbyMvsyymSssoalSHunhDl9Ptb7upuiUx3Y0E3y8uJiIiIKJAx6Cby0tLyAR1iJCjIuSFqLTlITU8uH9zA5PK6g9RYXk5EREREgYdBN5G3DlFrQmk5tDd6unOLKqSiqkbcIbeoXA4b5euN3U6d6S6trJaamhNuuT1ERERERN6KQTeRl9lyqOlD1CA+MkxCg00Z8pyicreWlvdoFyXRDQxRs8x0nzghUlbFEnMiIiIiCiwMuom8BLLS2QVlss0YojagiZlulKQnReu1Ye4pMd9y0LF+bmgdagq6obicQTcRERERBRZT3ScRecTKfUflH99tVv3XxRaDxpCp7pMc3eSPiwnm2KHtrr7ufbnF6nnf9tEOHQIg241BaqUcpkZEREREAYZBN5EHvTh7lzmABcxNaxsZJpeMSpGwkKYXoui+bndlug8eL1HPU+IiHXp7HXQXc5gaEREREQUYBt1EHrIrq1BWHzgmwUGt5PvbJkjXePRHhzRpYnlLTzA/eLxUPe8c19qhtzcNU6vg2jAiIiIiCjgMuok85LNV6er59P5JMqRzW5d+bHcG3eg91zvAOzuR6QauDSMiIiKiQMNBakQegN7mb9cfVC9fObaryz9+eyPo1sGxK2Xml6pJ5BGhQZLYJszJoJuZbiIiIiIKLAy6iTzg502HpbCsSrrER8pJvRJd/vFrM93lbiwtj5RWrRwrhY8KNxXVMNNNRERERIGGQTeRB3xqlJZfPqaLS3q4GxqkdgJpaTcMUXO0n9tybRhXhhERERFRoGHQTdTCthzKl40ZeWot2MWjOrvlc2BlGJRWVktheZVHh6hZZrq5MoyIiIiIAg2DbqIW9tlqU5b79EEdJLGNKTh2NUwLxyR0yHLx2jDL8nJHtTZ6urkyjIiIiIgCDaeXE7WgovIq+TH1kHr5ijFd3Pq5MEytsKxI/vR/y9TQM+z9jggNlhtP6i5Xj+/W5I+bccz58vIoI+hmppuIiIiIAg0z3UQt6IfUQ1JcUS092kXJuB7xbv1cJ/VONJeYHy+pVEPV0o6WyHvLDrR4ptu0p5uZbiIiIiIKPMx0E7UQDDTTA9SwJszRyd9N9cjZA+QvU3qq7HJFdY0KuG/6aK1kN2ONWHlVtWQVljmd6TavDOMgNSIiIiIKMAy6iVpIxrFS2Z5ZIGHBQXLhiE5u/3wI6vXqMOjY1hQkI9NeXF5lHm7mjMy8MvOO7oQox3Z0Q6R5ZRiDbiIiIiIKLCwvJ2ohB44Wq+fdEiOlbaTjAaurtAkPMWecswvLW2xHN0TqlWEsLyciIiKiAMOgm6iFpBsDyLrEO94L7WpJ0aZp6TlNDrqdH6IGUeEcpEZEREREgYlBN1GLB91RHrsNSdGmcvNsoy+7JXZ0Q2vzIDUG3UREREQUWBh0E7WQ9KM66HYuYHWldkamO7ugeZnuFCcml1uuDCtheTkRERERBRingu6nnnpKRo8eLdHR0ZKUlCTnnXee7Ny5s9H3+/rrr6Vfv34SEREhgwcPlt9++605t5nItzPdCZGeD7pd0NPtDL0yjIPUiIiIiCjQOBV0L1q0SG6//XZZuXKlzJkzRyorK+W0006T4mLTgChbli9fLpdffrnccMMNkpqaqgJ1PG3ZssUVt5/II6u//m/+blm8K8ep98nwhp7umHCPlJfXrgxjppuIiIiIAotTO4NmzZpV598ffPCBynivW7dOJk+ebPN9XnnlFTn99NPlb3/7m/r3448/rgL2//u//5M333zT5vuUl5erJ62goMCZm0nkVhsP5svzs3epwHPp30926H3ySiql0Ag4nc0Su6OnuymD1Jq6oxsijUFqJZXV6gDC3TvKiYiIiIj8oqc7Pz9fPY+Pj7f7NitWrJDp06fXed2MGTPU6xsqY4+NjTU/paSkNOdmErlUdkGZOevr6DRuXVqeHBMuEcb6LE+Wlzcl6NY7uluHBku8Ezu6LcvL8f5llTVOf24iIiIiooALumtqauSee+6RiRMnyqBBg+y+3ZEjRyQ5ObnO6/BvvN6ehx56SAX0+ikjI6OpN5PI5Y4VV9Tbve0L68IsV4Y1pafbsrTc2Uw1AnWNw9SIiIiIKJA4VV5uCb3d6MteunSpa2+RiISHh6snIm90rKQ26N6fWyz9O8Q4HHSneEnQjYODiqoaCQsJcvuObggOaqUC79LKajVMLcHpj0BEREREFECZ7jvuuEN++eUXWbBggXTu3LnBt23fvr1kZWXVeR3+jdcT+aJjRXWDbkd4wxA1iIsMk5AgU5b6aLFz2e4Mc9DdtK9BD1MrZqabiIiIiAKIU0E3BiAh4P7+++9l/vz50r1790bfZ/z48TJv3rw6r8MgNbyeyNcz3ftyHAu604wd3V09uC4MgoJaSWKbpu3qburk8nrD1Lg2jIiIiIgCSJCzJeWffPKJfPbZZ2pXN/qy8VRaaroYh2uuuUb1ZGt33323mnr+wgsvyI4dO+Tf//63rF27VgXvRL7ouA/3dNddG9bUoLuJme5QY1d3OYNuIiIiIgocTgXdb7zxhhpsNnXqVOnQoYP56csvvzS/TXp6umRmZpr/PWHCBBWkv/322zJ06FD55ptv5Icffmhw+BqRrwxSc6S8HL3TmfmlXtHTXXeYmnO7upvT0103083yciIiIiIKHCHOlpc3ZuHChfVed/HFF6snIn8rL0cAnldSIW0j7a/QOpxXKjUnRCJCg6SdUdrtSe2MXd32ystnbTmiMvg3T+qhytHNO7qNt29q0B1lrA1jeTkRERERBZImTy8nClTHiyvVc8SjCKaR7R7eJcyh0nJnV225M9OdU1Ru82DtgW82SkFZlfRs10ZOHWBa93c4r8w8DM3ZHd1aaw5SIyIiIqIA1OQ93USBCBnfonJT0Ni3fYxDfd3e1M8N7XR5uY1Md25RhQq44b2l+22Wljf14CDKCLpLmekmIiIiogDCoJuoCVlu7J0elhKrXt7fyARzvS7MG/q562S6bfR0Wx4grNh3VLYdLnDJEDVobZSXF3OQGhEREREFEAbdRE0YooZ91z0S26iX9+X6VqY7KSbC7vTyA1Zfy/vL9rtkiJplprukkuXlRERERBQ4GHQTNSHoTogKk+6JUQ5NMPe6oNuc6S6XGjSl29gnPqiTqXT+x42HJbeovNk7uiEy3LGVYZj2vvVwvkODG4mIiIiIvB2DbqImTC6PiwqVbhZBt/P2ONQAAOQ9SURBVL0AEa9PP+pdQXeiMUG9quaE5JWayuWty8vPHdpJhqa0VQHwZ6vSXVJejiFsjkwvf3Xebjnr1aXy08bDTf5cRERERETegkE3kROOGRO/McEbQTQmmCOIRNbYlrySSik0Bq95S093WEiQxEWG2tzVrYNuHChcP7GbevnjlWmSZrzeJeXljUwv33HE1Ee+r5FeeSIiIiIiX8Cgm8gJx0oqzUE3glcdSNvr69al5ckx4RIRago6vUGSjV3dyMqn5Zpub7eESDljUAd1u3GggKnmLhuk1kimW3+uYuOwgoiIiIjIlzHoJnLCcaOnOz7StKu6sb5ub+vn1pJijLVhFhl69KsjK4+NYDhMwKHCNeNN2W5dHq4z5M1bGdZwMH202HSb9Go2IiIiIiJfxqCbqCnTy6NMQXe3BMeCbm8pLa+3q9uivPyA0XveMba1OSt/+ZguEh4S1Owd3dDaCLobWxl21Mh0M+gmIiIiIn/AoJuoCUE3ysuhR7uoBvuPM7w0062DbstedL0urGtC7W3F13n+8E7q5ZRmlJZDlDG9vLTSftBdWlFtHrTGoJuIiIiI/IHpKpiIHHK8pG7QrcvL9QAynykv1z3dFkG3HpbW1cjea/ed2kfKq2rkqnFdmvU59fTyhnq1dWk5FJUx6CYiIiIi38egm8gJR3V5uVVPNwLW6poTEoxx5j4RdBuZbotBarq8HEPU6rxtTIS8dOmwZn/OSGOQWkMrw3RpOTDTTURERET+gOXlRA7CdG89SC2hTZi5/xkDxyqrT8ghY5e1VlldI4fzSr066Lbs6daZbr1/3NUsV4bZ22teJ9PNoJuIiIiI/ACDbiIHYbJ3Vc2JOpnuoKBW5szwvtyiOm+PIBxvHhEaZO6h9r5BaqYgF0GwHganh8O5mh6khu8JytUbWhcGXBlGRERERP6AQTeRg44ZASEytpY7t8193VYTzC1Ly5sz9dsdUDKuS70R3OaVVEqB0UPtrqy8Li/Xn9eR8nJ7GXEiIiIiIl/BoJvIQcdK6q4L07ontrG5Nsxb+7mhTXiIebAZst16EFz7mAhzRtrV0O+OrH9DWeyjRbXl5SjZt5cRJyIiIiLyFQy6iZzMdOvJ5Vr3RF1eXmxzXZi37eiu19ddUCZpeoia8bW4S2PD1PSgOo0l5kRERETk6xh0EzmZ6Y53INONsuiNB/O8NtNt3dft7n5uLdJimJotuRaZbuAwNSIiIiLydQy6iRykJ5fHG0PUrHu6D+WVSlmlKYP7zpJ9snLfMQkJaiUTeyWKN7Lc1W1vR7f7gu7Ge7qhkLu6iYiIiMjHMegmv1BYVin//mmr7DhS4LbPcUzv6LbKdCe2CZPo8BDBzC+UlC/fkytP/75D/d8j5wyQPsnR4s2Z7hzV0217R7erRUeEqucY3NbYyjBgeTkRERER+ToG3eQXvlt/SD5YfkAF3u4Ouq3LyzGZXO+2XronV+74PFWtxbpwRGe5elxX8VZJMbW7ut29o1vrEGvKrmfm191prkvydaZbHwiwvJyIiIiIfB2DbvILmfll6vm6tONuy44et9PTbVli/sSv21VwPqhTjDx5/iCvWxVmq7x8b3aRHDcyz13dnOnu2LZ1nZ+XpYLS2j3oXY0+eAbdREREROTrGHSTX0CJtF4ztWLvUbd8Dj1ZO86qp9sy6K6uOSFxkaHy5lUj6+zy9kY6m7zlcIF5mrnlLm13ZroP59XPdOcapeXRESHmEn4G3URERETk6xh0k1/IsZh6vXh3jlsHqSW0qR9092hnCrqDWom8dvkI6RznnRPLba0Mw0FBS0wuhw6xpkz3YRuZbl1antgmXPXIQxEHqRERERGRj3NvWouohTPdsGhXTotnuqf3T5azhnSQ6f2T5KTe3jmt3F7Qrbl7Rzd0bGv0dNvIdB81Dk4SosIkygi6OUiNiIiIiHwdg27yu6A77WiJGgzmyvVXldU15vVVtnq6ESTOvGKE+BIcHmClmbmPugUy3bqnG5UJFVU1EhZSW2yTa1FJ0CbCdNdUyKCbiIiIiHwcy8vJ51VV15hXTeky78UuznbrIWooH49tbVp75euCglqpUm6tJcrLkcVGoI31alkFZbYz3W3CpQ0z3URERETkJxh0k8/DtHAEcQiIzxvWSb1u0a5cl38OaBsZJsH4RH5Crw1ricnlgGnu9oap6e9xYlSYOejmIDUiIiIi8nUMusnnZRfWZkin9U1SL6/Ym6vKl929o9vXWfZ1u3tHd/1d3daZ7trvsQ66dUk/EREREZGvYtBNfjO5vF2bcBnYMUaVMBdXVMv69OMu+xzHi017rONtDFHzZe2MXd0oM9eBbkv1dR/Or5vpzrUoL+cgNSIiIiLyFwy6yW+GqGHvNPqU9fRwV/Z1HzN6xuOi/KOf23pXd7cWKC3XOhprwzLzrDLdFoPUsKsbWF5ORERERL6OQTf5TdCtS6Wn9Gnn8n3dx3SmO6rumi1fN6RTrHo+sltci33ODm1t93TrQWqWWffi8uoWu11ERERERO7AlWHkV5lumNTbFHRvOVSgSpYtJ3Q3d3p5vJ9luqcPSJbFf5smneJM2eeWzHQftujpxgT64yWmgw20BxxvZXq5sMz0nIiIiIjIVzHTTX4XdOP5gA4x6uWlu10zxVyXPmO3tb/pkhDZohPZdaY706Kn+5jFSjZMiLcsLz+B0fRERERERD6KQTf5XdANk3WJuYv6uo9b9BuTawap5ZVUSmlFdb3J5TgA0OXlNSdEyipdN4WeiIiIiKilMegmv5perk3uYwxT250rNYjcmsmfM90tLSYi1BxU6wnmOuhOMHrmI8OCpZWRfC8sZ4k5EREREfkuBt3kl5nuUV3jVeCGnu5V+4+5LNPtb3u6PUXv6tbD1I4a0+F1JUGrVq2kTZhRYs5d3URERETkwxh0k08rqagyr5VKijEFchAWEiTnDuukXn7yt21S3YxsN3qKdc8xg27X6NC27tqwXJ3ptqhWqN3VzQnmREREROS7GHSTX2S5W4cGS1RYcJ3/u/+0PmogF6aYf702o8mfo7iiWiqqTH3FDLpdo5NeG2YuLzcy3Rbf3zbGMDWWlxMRERGRL2PQTX5TWo6SZEtYFXb3Kb3Vy8/9sVPySyubVVoeHhKkgntqvg6xdTPduqc70WJQHXd1ExEREZE/YNBNftfPbenPE7pJz3ZRahDaq/N2N+lzHNOTy6PC6gX21Mye7nzrnu7wekF3ETPdREREROTDGHST300utxQaHCSPnjNQvfzh8gOyJ7uwyUF3HEvLXb42TA9SM/d0W5aX66Cbg9SIiIiIyIcx6Ca/znTrnd3T+ydLVc0JeeyX7WowWlOCbvZzuz7TnZlfpn4eNjPdRk93EcvLiYiIiMiHMegmvwi6kxoIuuHhs/tLWHCQLN6VI/O2Zzv1OY5zcrnbMt0lFdVSUFrVYE83y8uJiIiIyJcx6Caflu1Aphu6JkTJDZO6q5efmbXDbra7qrpGnvx1mzz03WaZtSVTCssqVT84xEUy6HaViNBg8yHG3twiFXzb6+nmIDUiIiIi8mWmq1oiPy4v126d2lM+XpEmu7OLZMnuXFV2bu3XzZnyzpL96uXPV6dLSFAr875oy35jck2JOUr3txzKN+9Wt1z7pr/vhezpJiIiIiIfxkw3BUzQHRMRKheP6qxefm+ZKbC2hOz3Gwv3qpfHdIuX7olRqg9crxpLNvqQybVrwzYfNAXdiVbT4Wt7ulleTkRERES+i5lu8lk1NSckt8jxoBuundBNPlh+QBbuzJE92UXSK6mN+f/wuh1HClW29Z1rRklsZKikHS2WRbtyVHD/p6Ed3fa1BKJObU2HGJuNTLdlaTlEs7yciIiIiPwAM93ks/JKK1UmGhKiHAu60duNSebwvlW2W2e5rxjbRQXc+u2vGd9N7j+tr+pDJtfpYAxTQ7k/JFgMUatTXl7O8nIiIiIi8l0MusnnS8sxkAv9wI66fqJpoNq36w9KnjGZfO2BY7L6wDEJDW4lN5zUw023mGytDau2c3BSu6eb5eVERERE5LsYdJNLoAx71pYjDe7APpxXKue/vkx+3ZTpks+ZXVimnrezKktuzLge8dK/Q4yUVdbI56sz1OveXGTKcl84orO0Z+92i64N0yzXhQGnlxMRERFRQAbdixcvlnPOOUc6duyohh798MMPDb79woUL1dtZPx05cqQ5t5u8zH1fbZS/fLJOUjPy7L7Nb5szJTU9Tx7/ZZtazdWSQ9Qs4ffv+ond1MsfrTggWw/ny9zt2YIZXjdPZpa7pTPdmnV5ee0gNZaXExEREZHvcjroLi4ulqFDh8rMmTOder+dO3dKZmam+SkpKcnZT01eCtnt7ZkF6uUDucWN7tQ+UlCmhpN5KuiGPw3rqDKrmfllcvNH69TrzhjUXnq0qx2sRu6VHBMhQbXDyu2WlxdXVKmheUREREREATG9/IwzzlBPzkKQ3bZtW6ffj7xfTlG5lFSYSoCzCkyBsC1ZBaZycEBZ9ynGQDNPBN3hIcFy1biu8vLc3XIor1S97i9Tejbr9pBzQoODJCk6Qh3C2Mx0G0E3OhZKKqvN/yYiIiIi8iUt1tM9bNgw6dChg5x66qmybNmyBt+2vLxcCgoK6jyR90o7WmIzsLZm+X8LdmY3+LaOBvuQ1ISgG64c21XCgk1/Aif1SpQhnXko1NI6GGvDINGqNz8iNEiCjVR4URlLzImIiIjIN7k96Eag/eabb8q3336rnlJSUmTq1Kmyfv16u+/z1FNPSWxsrPkJ70Pea79FSbnOPtuSbWTBkbHExOpv1h30WKZbv991E7tJeEiQ3Htqn2bdFmqajrG1w9SsM93ovTdPMGdfd6MwDHDCU/PUUEMiIiIiCqCgu2/fvnLLLbfIyJEjZcKECfLee++p5y+99JLd93nooYckPz/f/JSRYZowTd7J8iLfkUz3tRNMQ8y+WJPerF5d3SPu7PRySw+e0U+2PXa6jOwa1+SPQU3X0SLTjdVv1hh0O+7TVWlyOL9Mlu896umbQkRERESeXhk2ZswY2bNnj93/Dw8Pl5iYmDpP5L0OWJSX60DYGoKmYqPv+9qJ3SQ6PEQyjpU2K0BobqZbZ1N1CTO1vA5Gpjs6IkT12VurXRvGoLuxvwX8PVlWlBARERFRAAfdGzZsUGXn5B8sJ5Yjm21rV7fOciPYRu/uucM7qn9/via90Y9fWlEtqenH63zc8qpqyS+tbHbQTd6R6U6wkeWGqHBTIF7Inu4GbbBY1Zdl7K8nIiIiIh8NuouKilTQjCfYv3+/ejk9Pd1cGn7NNdeY3/7ll1+WH3/8UWW2t2zZIvfcc4/Mnz9fbr/9dld+HeQhCIQtB6mVV9VIgY0ASQfdSTGmAPmy0V3U89lbj8ix4ooGP8eLc3bK+a8vl49Xpplfl1tkeh8MQottHeqir4Za2rgeCdK/Q4xcPMr23IY2EaafLcvLG7Y+/bj5ZWa6iYiIiHw86F67dq0MHz5cPcF9992nXn7kkUfUv7GDWwfgUFFRIffff78MHjxYpkyZIhs3bpS5c+fKKaec4sqvgzzkaHGFCohatRKJCjNlJbNt9HXrQAC7mWFQp1gZ1ClGKqtPyHfrGx6otmr/MfX8rUX7pLK6pl5pOUrEyTe1jQyT3++eJLdP62Xz/1EZASwvbxgqQbRsZrqJiIiIvIrTi28xedxW+bD2wQcf1Pn3Aw88oJ7Iv0vLMYU6MixYdmcXqV3dvZOjbWa6ddCts93/OrRFPl+dLjec1N1m8IxBa7uzitTL2Kf92+ZMOXdYJ3PQncjScr+my8uZ6bavqrpGNh3MN/+bmW4iIiIi7+KRnm7yvyFq3RIjzQG1rUwbAnHL8nI4d1hHaR0aLHtzimXLIdu72A8eL5XSStMANnh3yX516KM/R3Mml5P3axNuKi9nT7d9O7MKpaSi2jwQEPvrsZKPiIiIiLwDg25yybqwrglR5oBaB9iW9HCn5OjaTHd0RKiM7h6vXt5wsHYQlHVAASnxrSUiNEg2H8pX5eaumFxO3q9NBMvLG5OabvrbGd0tTrV5IOBubE4CEREREbUcBt0B7ofUQ/LtuoZ7qh3JdHdH0B1tP9Ot+7wtM90wuJNpHdzWQ7XlsZZ2GUH3qK7xcuGIzurldxbvY9AdINqwvNzhoHtMt3hJiDL9PbCvm4iIiMh7MOgOYEfyy+TerzbI/V9vlJ83Hm5WT3fXBJSXGxf8tjLdVoPUtEEdY9XzLYcbDrr7JEcbfd8i83Zky5oDpuFqDLoDo7ycQXfjQ9SGd4mTJOPvgX3dRERERN6DQXcAW743V/RMvIe+22wuFXcUeqsPGO/TLdF+ptuyB9uyvFxPMYedRwrV7m1reD30SW4jPdq1ken9k9W/dxnD1XSQQX4+SI093TYdL66QfcbB17CUtrUHX8x0ExEREXkNBt0BbPneo+o5BjAhk3jHZ6k2A197jpdUmgdcdYmvzXRb93Rjb3dZZY3N8vLOca3Vnm2sDtNTyjWsB9uXU2zOdMNNk3rUeRtmuv1btNHTzUy3bXoWQo/EKImLCjMffNmaq0BEREREnsGgO0Ah+7x8T656+anzB0vbyFA1pOyZ33c6/DH2m9eFRUhEaLDFBX9ZnbVyup8bwTXezhLWhGFfN+DzW0LmvaK6Ru3/7tS2tXlY1NDOpuw4cHp5YJSXc5CabalpptLyYV3aqufMdBMRERF5HwbdASrtaIkczi+T0OBWcs7QjvL8RUPV699btl/mbMtyenK5ZRa7vKpGZbfr93PbDpB1ifkWq6Bbl5D3So6WIGMdEoL0mybXZruZ6Q6M8vJCBt02pWaYMt0jusSp5+2MmQnMdBMRERF5DwbdAWrZ3lzz8KXWYcEyfUCyGlQGf/16oxzKK3VqRzcgi41stmV2W2e+bQ1RqzdMzSro1v3cfZPb1Hn96QPbywUjOsktk3vUy5yTf4lmpluZteWIvDhnl1RUmdo0oKbmhGwwJpcP15luPUjNmO5PRERERJ7HoDvA+7kn9kw0v+7vp/eTIZ1jJb+0Up75fYfDk8u7GZluSLJx0a93dOvyc2uDjUz39iOFqo/b1uRySyHBQfLiJcPkoTP7O/S1ku9nuksqqtX+6UCEVo0Hv9skr87bLY/+tMXcurEnp0hVAESGBUtf428kyTjYsjz0IiIiIiLPYtAdgJAhW2EE3RN6JZhfHxYSJP89f7B6+ZdNhxudZm5dXm6ZzdbZbcv1RfbKyzGELTo8RGXx9mQX1Qu6+7avG3RT4GhjDFIL5GFq2EmfV1KpXv58dYa8t+xAnVVhOCjDQZTl3xjeB3/nREREROR5DLr9BPZsX/LWijrBrj07swrlWHGFypAN7WwqS7Xsr57Sp53gev2txfucKi+3m+lupLwc/doDrYaplVVWmz++daabAkd4SLCEGQGlv5aYY2NAaYX9rQG7jYOoEGOuwZO/bpMFO7NlfZouLTf1c0Nim3C1y76q5oQcK6lw+20nIiIiosYx6PYT7y7ZJ6v3H5PvUw81+rbLjKnlo7vFq+y2tdum9lTPv1l70G6ZKvYDowwdusZblJfbyHTXBt32h57pvu6tRtCNVWEoJ0aPOHdxBzbzrm4/Dbqv+d9qmfTsAsk3stnWdhsVH1P7Jsmlo1LUgdidn6XKwl3ZdYaoQWhwkCREhdWpMCEiIiIiz2LQ7QfQ47nX2GetBys51M9tUVpuaUz3eBnZNU6t6/rf0v023+aAUVrePiZCDWLTzCuLLC749SRlHZA3NMFcZ7rNpeXJ0WpiOQUuXWLuj0E3Vnut2n9McovKZb1RLm4v090nuY08ft4g9feJ74X+uxqWUrdapZ1e3ce1YURERERegUG3H8DFtw5INh5sOOjGoLJV+4x+boshapYQ5Ops9ycr02xm4LByDLom1JaWWw5L03uCcSCgX7ZXXm4ZdG/LLFAZbvMQtfZ1J5dT4O7qLrJYQ+cvUi0OybYfKbD5NnrOQe/kNqoy5c2rRqo5CJAS37re2jxzXzcz3URELQqtcSUV/vdYRUTNx6DbD+zNqR0+lplf1mBf96aD+VJcUS1tI0NlQAdTH7UtJ/dLkn7to9XbfrTCNLjJ0n5jcnn3xNrScssLfp2FO15SKZXVpoFO7drYLxPHx0GPeVlljfp67E0up8DTxo/Lyy2z29szTb/zdoPuJNPfQnxUmPzvz6NUhvvmyabDMUu1cxWY6SYiaikYXnnmK0tkwtPzZV3aMU/fHCLyMgy6/YDlxG/YkGE/273C2M89vkeCGmBmD7LdtxrZ7veXH6g36MnW5HLrTDey3PoAAH2mtvrHtWAMU+sYY97XjWFvwKCb2oT7b3l5nUx3Zv1M99GicjlaXKGGo/VsV1v10Ts5Wn64faJcPa5rvffRf4P64IuIiNwPbUL7covVtomr3l0tS3bn1HsbXEs9M2uHnPriInWtQ0SBg0G3HwbdGxsIupft0aXltvu5LZ01uIMqY8Wk8y/WpNueXG5dXm5kupGxLihD36mxo7uB0nJtoDFMDQPhMo6VqpcZdFOUDrr9rLwcrR6bLNpB9uUUqdJEW3/bneNa15md0BDzXAVmutVF8DfrDpqHPhIRucuhPNN1C5RWVsv1H6yR3zdnml+3aFeOnPbyInlj4V41q2Pu9iwP3VIi8gQG3X5UXj6qa1yDfd24oF9nlLNO6GW7n9sSdv/ePLmHevmdxftUUIDsdUOZ7ojQYIkxBl/lFJY1uqPb0mCjr/s340EK649QSkuBLdpPB6ntPFKoDqfw9cVFhqqp5LuzimwOUdOl5Y4wD1Jjpluem7VT/vr1Rpn63AL5cPkBddBBROQOh/NMB51DOseqpAVa627/bL28t3S/3PV5qvz5vdXmhALwMJAosDDo9gM6G3bBiM7q+aaMfNVbZG1d2nGpqKpRAXAPq15sey4a2VkFv4fzy+TkFxapXqV7v9ygerWtd3RremAaLvrN68KMQKAhepgaMuTQl0PUyKK83N/2dOt+buzZ7m/MV7AuMa/t53b8b8E8SK2QQfd+43AQ91eP/rRVZry8WOZuyzIfHrobPk9mfu1FNhH5r0N5ugIwSl69fLhcNtq04vGxX7bJTxsPCzr6rp/YXe46uZd6O3trIonIPzHo9nEFZZWSbVxcnzm4vUSEBklheZXsy62bMYPlRj/3xJ6JDq/hQub6ratHqh7wsOAgNahN7wLHwKbIMFNAZDvoLjOvLXIk092zXZS6/RpLy8myvBy/1/7Yzz08pa056Mb0fku7s02zDXo5EXTrVg49VyGQ6UO/K8d2UXMl9uUUy40frZWL31wh36476PYpw6/M2y3jn5ovs7bUlpgSkX9nuju2ba3m1Dx1wWC5xagWxMwazOF45JwB6v8hj5luooBSP2Iin7LXyIQhqG0bGaZKtNccOC4bMvKll0VJKi6+f91kuvCb6EBpuSXs7P785nFqAMjatGOydE+upKblyTnDOtp8+9rpyeXm8nJHerpRzo7gQwcj2NFN5O+Z7hFd48xZ6R1Wa8N0uTkGpzlKbwlAaSMyvIHaooH7vCP5povgWyb3lL+f0U9eX7BX3lu2X9amHVdPyH6jDPSS0Snqfs7VVu0zTTBevf+4nD6og8s/PhF5j4PHTVUtneJMQTWSGw+d2V+uP6m7qhhEIA7YHgMsLycKLMx0N8HhvFL5fHW6V+xi1OWnerIx1gjZGqa2Yt9RNfwsKixYTh/UvkmfC4OcJvVuJw+d0V+++st4m5OTLQNsU6Zb93Q3HnTDIGOYmrOBBgVAT7cfDVLDVHK9635Y57ZqPZ9eG6az0yg91FUszmS6sSVAB9oNrQ/0d7igLa+qMQ94jIkIlQfP6CeL/jZV7j+1j3RNiFRzAr5cmyEXvrFclX+62gGjvF3PwCAi/742hE5t617v4PpHB9wQ09oUdOeVVLTwLSQiT2LQ7aTU9ONyzmtL5aHvNqsnT9ubU1znonyoEXRbrw37YnWGen7u8E7mcl13qZvpdry83HKYGvRJZk83+Wd5ua7mwN9tbGSo9E5uIyFBrVSgiBYO2JNjKi3vGBthzvY35W8wUB0x7nswpA5tMlqH2NZy5ym9ZeFfp8qXN49TrTOwaGf99T7NgUNZ/bNMO2Y6YCEi/59e3qlt/Vk3ltq2Nh2KMtNNFFgYdDth9tYjcvk7K9XeXPhxw2GZvyPLqzLdQzu3NQ9k0uuHsPJr1pYj6uXLR3dx+23SWW2UduqLfr07uDGjusWpE2Fk/qIjTKfBFNj8sbw8NcMYomYckoWHBJv/hnWJuS4t7+lElttWtUmg0qXl9qpsUPo5tkeC3Dipu/q35fo2VziQWxtopx8tkWobwy2JyD+gakYH0R2tMt3WLMvLA33uBlEgYdDtoA+W7ZdbPlmnVvxM69tOrhpnCl7/9f0Wj64y0uvCdKYb+3wT24RJVc0J81Cm79YflIrqGhnUKUYGd67NJLuL3tWNlUi40MTMNtwmR/Ro10a++ct4eeeaUW6+leRrQXeRH2a60c+t9etQW2Le1HVhWrKR6Q7kCeb6wKF9bMMXwEOMg8o9OUUu/R3bn1tbUo77X515JyL/LS1HO1RjCQMddGPuRkmFKTlCRP6PQXcjcAr55K/b5N8/bxMcSF4xtosKCP9xZn9JiW+tVmk9O2uHR25beVW1pBtlizpLhuyNznajrxu3H/3ncPkY92e5LdeD6QtYDBDBkDRHYYVSSnzD5VkUONpE+FemGwdReubC8C6mv1WwnmBuDrqb0GahD74CO9NtOnBo38g8iXbR4dKpbWt1/775YL7LPv9+qw0SaRZBuLdZue+oysY747V5u2XYY7PN1VZEgay2tNw0RK0hrUODJTTY1OPNCeZEgYNBdyNQlv3Okv3q5b+f3k+ePG+QCiCxKuup84eo13+8Mk3WHjBNqW1JGMSEC3hkAi17pi37ujHJHH3fuJP/01Db08ZdTV/wa472cxM1lOku9JNBaruyCqW4olp9XZZZbB107zCC7j1ZhU7v6NZ0SbXeHhCIdGbZkSGOQ4wKoI0uLDHfZxVkY5Cltwbcl729Us6dudScrXPEr5szJa+k0i0D6Ih8d4ha40E3kiOxuq+bu7rJzQ4eL5EVe496+mYQg+6GIaB9fvZO9fLt03rKrVN71tlvfVLvRLl4ZGeVIfn7t5tU5tkT68LQ82l5u3TQjWzaF0aWGwF3S/VIY2hRjJGdtMx8EzUn6MYk6spq0zRqf1gVhk0DlhNt+xsTzFGWnFtUrqponJ1cXn+QWuBmuh0tL7e8z3RlX7cuL9eZdm+dYP76wr3qOdbL3fHZeof+xlBBlWFUWa3ez4s5CgyYk1Nl5+/jkNW6sMboEvO8Uk4wJ/e68cO1ah7V8j25nr4pAS/gg+6th/OlsMz2SeP3qYdUlhh3jrdM6Wnzbf55Vn9VPo23mzl/j3hmiFpUndcPNbI2yKz8stm0m/vysS1TWq5ZZpcc2dFNZI/ltH1/WBum+7ktS8t1mXNCVJhg3tbvxt8tXtc20vk92+2Mg66sQM50G4cWjZWX18l0Z7iyvNwUZE/r167O+jBvsuVQvizelSM4+4kOD5H16Xny9O+Nt0thOCeqNfTvc0sfOBO1NBwyDX9sjvz9280NZro7OpDphlhjbRgz3eTuuU87jpiq5j4zknDkOQEddK9LOyZnvbpUzv2/ZfX2JeIi4qU5u9TLt03tqXa82oIL4v/8aaB6+Y1Fe1UZR0vB4B9bmTDcpu6JpkC8oqpGTQLXgXhLsSwxZ3k5NUdocJDaL+8v/W860z2iS+0QNUC1ii4x/3ljZpNLyy3/5jBILVCn42Y5UV6OVYUoFkJfpiuGzx0vrlCl1zCljyno1nvZvcmbi0xZ7nOGdpQXLhmqXv7f0v0ya4vp988ePUtEV6BsstMLj+nM9325QV6eu0vtpifyVcv25EppZbX626ixsYnAmZ5uaKuDbj94TCPvNWdb7Yal2Vuz1GMTeU5AB936wha9d7d8vE4FqJZ7rXEniovXa8Z3a/DjnDm4vdr1ikmU7xr9366CLPwPqYdURt7e5HI9RM2SZZCN4W+W5ectwbKk3JGLXqKGIOPrD9O4cbi3L6fYXF5urb8xwXy1MSOiqUG3/n5harYO/gIJDk31akdHysvReqPvR11RYq77uTvERki/9jHmTLc3HYAcyC2W34yKir9M6SmnDWwvN0/uof79t683qf93JOiGVftsl5h/uipNvks9JC/P3S0Tn5kvD/+wxWvL7IkaorOFqPBIs/r9h8N5Zc5lus3l5YF3/0wtH3SjmgnXAz9uOOTpmxTQAjboxsXPPGPHNuLRVfuPyYPfbVKvL6mokteMUvE7T+6tepQbgoD29mm91MtfrEl3yYn+tsMF8o/vN8u4/86Te77coAbdWJ5Q4aR1b3ax3Z5P3aMYERok5w7rJC2tHTPd5EL+EnSnGlPLeyRGSVxU/bJxHaBpvZKdXxem937HGRd12T7+PWsKPUAuLCTI/H1ojOXWB1eVlqPiCD2e6N3Huklv+lm8vWSfamXACkxdYfG3GX1ldLc4KSyvkls/Xa96WG3Rk87DjK0UePy05Y+tWea/X3z9GDo67fmFcvun61lWSz43AFOzToKgz1sPbsTaVmfKywPxUJRaBmbD6Mq6myebWmS/XHvQqw5/A03ABt27sook41iphIcEyRtXjlQXRd+tP6SC7Q+WH1C/rF3iI+WSUSkOfbyJvRJUXyAuLN5fdqDJtwt/IBe8vkzOfHWJfLYqXZ2q4rZhcvOr83eb3y6zoEyVOoUEtVK309qZgzuoLBkODfSdu6cy3UkcpEbNhLkJgL9LX4UBVe8s3mdei2eLDn60pma6Lf/uAnFtWG1pebjDVT5DU/QE83yXrQtD0I32CF1y2lD2uCVlF5TJN2sPqpdvnWo6MAbc1tcuH6FmC2zPLJBv1pnexl6m+9QByer5urTj9QZMoaceBxj49v9650ny2U1jZWrfdirQx+TzF+eYhpQS+V7QbdowoWUVlqvBu1gD1s54rGpMWz29nJluv4LEwL9+2Gw+ePWk+duz1aBntE/9ZUoPdQiN+3Xr319qOT4ZdO/JLlS7szPzHV9vYm3udtMJ/MReiXL6oPby2LmmvuwX5+ySV+eZgtt7T+2tfkkdgQu724yLlw9XHLA7nK0hyLDf/NFaNcwGwfRZgzuoC5UPrhut/v+TlWnmizY9RK2bcVFnDSXdc+6bYs7AtzTLknKWl1Nz+UOm+7Gft8nyvUclMizYXMZrDVUr+Nt3SdBtVJh4U3a1peiskyND1Oplug/mNTsTYJnphq4JkV7V1/3esgOq1HBk1ziV2baEcvzLx5gGb9q7ONNB9/QBSepQt6SiWrZYve2cbUfU8+EpbdUwzQk9E+WD68bIy5cOU69fvJuTdMk34LA3t6i20tD670JPLu8Q21qCLO6/HZlens/p5X4FG4M+WZkuT/yyzdM3RWYbpeXT+yerWU8zBrZX//5yTYaHb1ng8smg+8FvN6vd2Ve8s6rJK3F00H1K/yT1/MqxXeWmSd3Vy8hW902Olj8Nda4s+7QByeqiGVlp/NFZQ0nSU79tN0/VtfbxijR1x54S31qWP3iyzLxyhLpQmdS7ncoQoGf82T921Am6e9no5/YG+oIfWXpkTYiaQ2cPfDXo/mjFAVVai6wfgo6+xnowazjk0+0i8VFhkuBg1sSWQM506/tYZw78+nWIVpkqlHuiCqo5dN9+D2OzRLeEKK+ZYF5QVimfrkxTL986pe4aTK13chvzAbctel1Y14QoGd0t3ubqMH3Bpy/0tJP7J6nHBRxM6OFTRL6Q5dYrHrceyq9zMFc7udzx+xuWl/v3ge/SPbkqkeYppRXVsnRPTp2KpEtGdVbP0ddtr3WI3Mvngm6Usa1NM/Uo4EH76ndXOz2NDxfuG4y+vVP6mX4Z4aEz+stZQzqogQMPndmvzg5dR+CEEwNp9ARYy1/qhTuz5eI3V8hbi/fJ7Z+tV6VIlorKq8yTZO86uXe9NVu4bbg5v20+oqaum4eoJdVdF+Yt+iRFq/3KGBbl6MkvkT2J0b5bXr5kd4785+dt5p5ZDKxqiC4xb8p+bnsTzAN2R7cTQTf64AcY3/sNzRimhnkbOrjuntjGoUz37qzCFrtAQ8UUerb7JLeRk/uZDp2t9U6KNrdhWWf9MaQO7U2A1qax3U1B96p9tX3dKJldsdcUhFv/vmMTiF7RhonQRN5ulzFEbULPBHVdiCGNlusY9eGRo0PULAepsbzcvxw1KiKw1WGpB6t5EPQjgYjWJj2gdWLPRPXvgrIq+WOrqRKJWpbPBd3vLjH1RGL4S1J0uOzMKpQ/v7/aqXLuBTtq+xwsJ9siOPy/y4dL6sOnydS+ti9GGnPusI7qlxrBwddGP9y36w6q5fQowdMHB8h8Wfpw+QE5XlKpBiydP7x+hh2ZMd1f/uSv22VPlu11Yd4CDyjL/n6yKo8nclmm28eC7n05RWpoFA7ZLhjeSWUWGzO+Z4J6PsbIIDYV7h8DNtNtXBA7Mrnc0hCjxHxTM4apIdOBix20CeihSjrTnXasfqZ7zYFjcupLi2XGy4tlxxH39tohgP5khSnLfcvknnYPRJGhx38hILA+tEEpLR4/0SaBKqYxRtCNifv6MBmPsVU1J1Rgr0vsLZ3UK1E9X86gm3zATuN6Cy0oPY3qFcthajro7uxE0K1XhjHT7V8sEwO6otYT5hqVRshy62om3N9fNNKU7f5qLUvMPcGngm6sGpllnM48dGZ/+fTGsWoyLXaE3vDBWlVO4Qj9h4A+B2v45dQnkE2B/mrdr/nWor0yc8Eeuf/rjeoC5LxhHeXRcwao/3t21k7zBFiU+71tDFi6e3pvCbHRow33ndpHWocGq57vNWnH7K4L8xb4PiJ7RBSIPd2odMFhG06Vh3dpK/+9YLBDQ70uHtlZvr11vNxxcvPmMejS6kDs6c5qQnm55dYH9HU3lZ67gSywnrfRLdHIdOeW1MsczzYe01DSfsHry+V3Y42XO6BC6nB+mWpjQFWXPdjYgdJx2G20Mln3c+Prw+/zwI4xEhUWrNqqdhoZwdlGP/dpA2xXdaBtCpbtPcpJuuQz5eV92kfLwI6x9fq6Dzcl0+3BPd1Yj4sSY1RYBmpg/OysHW5pb9GrKmHe9ux6Va0tAZ9Tb2fSpeXaxaM6qza3ZXuOmtuEqOX4VNCNnmc8PiPL3Sc5WnonR8vHN4yV6IgQdcp++TsrVRa5sQvhJUbJh+7ndrVLR6dIYpswOXi8VJ77wzShFYH4i5cMkz+P7ybjesSryeN//9a0oux/S/arO14MTTp7SEe7Hxcl57dMMQX0+jrFm4NuIneUl/vKRfqKfUfVvmZkA9++elSjqwc1BDIju8Y7/PaND1ILxEx3WZMy3UONsucthwrqTeN2dke3ZYa3cxwCVFFl3ces2qH04xEqpFANhVVdL87eqcrUXU1/LlRRNPb7pauoLKc2g75QSzG2ZuCQeKRRlbFq/1H1GLtwp6mX8LSB9Q+2YUTXtmqdJQ7RrIN6Im+CxxtdXo5ZPzhkqpfpNgapYT2gozDYChD4YrNFS/pg+X65+4sN8szvphlBnob72oveWC6Xv73SLfd71v71/RZ5feFeedxo+3KlXOOQG/f3CMB1K2tL2pBxXM2HQmykK5EsH4t0pZGuxm1om9L3qQ2/Dflx0P29sdT9JovJv4M6xarp3jhpxy/3hW8sV9kle2V66DNDwNshNsJ85+lquJi5bqJpKBv866z+8o8z+6vSDjw9c+EQdcGBi/I3Fu2V95buV293z/Q+jfaR3zSphznrh68hKjzELV8DkTfBIRZgmKCv9MDpHtdp/ZLMf7MtqXaQmu8cVLgCvtamTC+HHu3aqFkUeIxoajBoPblcPyZ0jDXWhln0dSPo3GFc0H9/+wS58STT48ar8/fILZ+sc/nFuO6hxtaOxqA0vLFMt6b7ulfvP6Y+Bw4P8PiEFi5bUAGlB7Cxr5u8WWZ+mTosQ7sI/qYHmIPuAvP9TVMy3TERtdduBS38mLbSeGyar1otPf/YgO8lZjXhmtjd66wQSOqKWXz9rryewIEjfldgcu92Hisxn7MtWz2f1jfJ5naji41W1cYC6js/S5V7v9zokYMDf+VTQXd5ZY16EB/fw9TzqCErhPVYl45KUX1o+CU/45Ulcu+XG+qVo86xmFru6P7WprjhpO5y1ym95f1rR8uNk+quB0LZ3t9m9DOXmeOPtF/7aDljUMMDlgBBNoYxwQg7u36J/A0u0nU5nq+UmCPrZxmQtDSUVqMdBaWEgTQ0BT2S+Jots/2OwqHnoE6mi+pNTSwxNwfdRu+nVjtMrbave/leU8CJAW44JPnX2QPkxUuGqvLvOduy5PPV9bdgNBUCeH2xrTMdDdHD1DDkzZmgW/+uYZtHQ4+xOvBn0E3eDHOD9JwD/F0O7GA6SEIlY35JpQraio3WRlSrOAoVItFG0iSvBYNuBNn6vg3l1frv2ZMw10JbtMsUMLrra3/aIruPtYmztmS6vLQcWzAuGNGpTm91S9LrGq1LyzVsQ9ItTfbmYeH3Wpffr9pXdzOFrykqr1Ir3HT7kyf5VNCts9y2HshxwvjMRUNk9r1T5MzB7VX59feph+T0lxfLfKO3AX9w8xro53YlZDbQg40sly3XTugmI7qY+gfh3lP7ODzlGwPV0PP55PmDXHZ7iXwl2+0tw9Swtg+TnG0pLq9SsyZgnNUhYUvBBeKNxhrE//62w+5t9Tc6y42Va02ZKaH7ujdk1JaPNjfTDbpH2jLTrQPOSb1rg+ALRnSWh882zf54Ze5up4aENmRjRp66+MB+YEeqvPTaMOsJ5unGOjXLoHtw51gJDwlSF50/bDisXtfYlH4d+OMgoKml/ETuZi4tbx9jnlWDta6wNTPfHJigjcjZliBPTDDHTAfLneOYcu1paw/UtoUu2mVqTXEHtL3gYBCPjVeN66Je96Nxf+UKR41rk4SocJnaJ0lVR6BSSM/5sIR1jJjn5Go41N2bU6w+9xQjuLaGDRKJxnBavd7S1hBYbY3Fz8cXfb4qXd5dul+e+n27p2+KbwXdKFc7s5FsMPrQXr9ypPx0x0TVf4OLgOs/WCuP/rhF9Xuj1BJTVz11IWyZUXn2oqHqAgiZe2QFnIHsvu4JIgoE3jRMDUNopr+4SB7/xXZPGO5rMMwEmQ/d++oJWGGIKebIZmBDQiAF3c4OUdMwobipmW5kk3XmqIexLkzrZpXpRiCrV8pYl3tfNjpFZdbw+PXWItOQzebSF9dYG+PIAS/mhZgnmBsXk7jN1j3dgMMNXXmFKgNUpVj3ElpDdh+PfzgI2GgcUBF5G50d62scQoHOdm89VCCH88qc7ufW8PsPyJi3FOvNDC1RafLANxvl4jeX2xx2jPuUtcZgYMCgYHccQqBX/JlZO8xJL2xvAJS0HzEGb7pqXVhidJg6UNH3gdYl5qbrh8Xy5/dWu7y8f6WRlcbwVgTX9uDxBfbl2m6jQuCuYU2xN7QhNNUWY/4CyuQ9/XX4VNB99fiudid721r98uMdE9UfF3y4Ik2ufHeVudeiuUOKXAEHBCsfOkU+uXGsW0vdifxBO6NH2dNBN+60sZUAfkg9rPq4vK203LId5a9GO8pr8/aYT+J9GQ4zthzKl/eX7Zevbaw90ZPL2ztZWm6d6Uavta2fbUMQkOL2oaxf70m3l+lGRlxNEg8OMvc3a+jD+/vpphakd5fuc8lFob64Pskiq94QPEbqbLZeUYm1lgiS8XCl16FplkH2Kf1s9xJaQuCvW8W4Ooy8vbwcw3s1y2Fqh46b/p71zAZn6JapvNK6wxXdSR9woaURlu896tbhZThQ+GrtQZUt1RO1LeH+EJl3ZJ/RgoP7T3fcH/y48ZC6T8dwsdum9lSHhqO6xqmq2J83uibbnWOR6basqLUMunGI8+C3m9XLqel5Mne7c+X0jVUF6VkyY7s3nFjUq+8cyXTjft8yCPc1OzILza1nnm6n8KmgG2V3zsBFw7//NFDev260KqXAsnp3Ti1vCtzGxoanEVFtebllaZwnYAI0Sm4BAYitcjjzA18PzwbdcNGIzuoiEbMjXpq7S3wRvs9YwXjt+6tl2H9my9mvLZX//LxN/vbNJllr0Q/YnMnlWsfYCPW7Vm1kRvRqR2dLy60PUq17unUQPLJrnLQOq38IjOqn0d3i1M7vF2abtmA05/uHCzxH+7m1XkZft55gri9YMKDO+uDa8oDJ3tRyazrD7w0lrtR8aIX4YnW6w+tbvR3uA/Qgwb5GkAoDjbkPGPqFg7MmZ7pbh7V8ptuo4LlyXFc1NBKByLZM9w0v23SoNrP++5Yjdvu5sTnilH6m+w29/cBV0Fr1/B+mx75bp/Y0V4meO9zUd/2DMaTZZZnuNnWDbhw45JVUqL+PWz9ZpwZ14nsPL83Z5XD2dXtmgYx6cq787euNdt9m1X7Hrj10JZa9oBvrJS1ZP876ivKq6jpfi6erqnwq6Na/pM7CBL9Z90xSvd4YkjPDgYFlRORdvKW8HL1BgDYV+HVT3UEsuODUe5493caiM4q6R/izVen1VkD5AqxVfOr3HepiDIcHeCzQk8l/tdprjRai5pSXI1ie0sd0MPv+sgMy+bkFcsU7K+WH1EONZr7tDVGzDLpxkYsLsKWNZJ5xOx46s796+Zv1B9UFV2PQJ4jha9bZEAzCqao5oTLXzrQ7WE8w1wcGtj7G8C5x6m8UT5P72O4ltBd040DAXwK1QDZzwV558LvNaiuLP8DvO9olsG0mJa72d17v6sbF/F7jb8OZyeXWPd0tNUgNGe3NRtCBmUJYX+vuQy/MktAW7Miudx+qg7lR3eLNPcg4yHZlGfCnK9NV7z2qj66bULtZ6KzBHVTvMw5PcN/ZXFhpapkg6JIQqdpccXizYGe2/O3rTWqlJA52UYmLxzEcePyxtfFha7hPf+CbTerxA4cEtmZ9oNIKXye+JhzmNkSXl1sH15oOxocYazR9ta97d1aReuyz9fvoCT4VdDcHTp7Q6/3LnZMa7HMgIu/Uzjg99uQgNZSGLd6Vo3pdn75wiLl0zPJCAitJsNoMQaHlsClPQvA/Y2Cy4LHniV89P0zEuoxNDyOyR6+AvGB4J/nlzpNk46OnyePnmQZJztpypE55ZFYT14VZeuqCwfLa5cPVgDMkrFGCec+XG+SsV5eYA2ubX4vxfz2shqhBZFiI6q8HlOrhYza2vgt90rgwxPWn5dRde+74LFUe+m6zvLW4bh94YwF+Y8PUcOECup/b1u81svW/3TVJfr3rJPW1OgJ97ph7gCnClhOMfRVWko7971z1OxmI0PbhD9OOtV0WpeWWcxDwd4zACnc7y4wNBJ3aRjS9vLyFMt37jxarQ0sMPcTX1BIbBCwzi1glaF0ZpoeooaoH1TK4bahW0tVkrvCdsRrrjpN716kqwrDNKcYBoSsGqun2LZ3phukDTAe4j/+yXa0qw2TzmVeOUDMzrptoan99ee6uRkv8/7d0v2w2/r5wfYGKO3tZbgy2bOw+GOsx4cDR4nqfGwE+Xq8HN+u+bl+kD6t14RmDbiIiByQaAUuuBzPd7xlZ7hkD28s5QzqogAEXEgt31vZl6QtOlHd506yGh87orx7wcWiAU3dvgGD7rFeXyiVvrmgws6ED3XOGdZRBnWJVSw4C4qiwYLVHV1cWgO5/Tm5ieTmgv/CcoR3l4xvGypIHpsk903urDC6C5fNmLjMPQKt3O3NsTy7Xuhl93b9sOiyFZVVqV6+9XdYaVkTi54aLVXufVx8I6Z3fr83fXecgQ7+fM6XllmvDdmUXqp+PrXVhlvA90vvhHYG/jwk9E/xmdRjWpaHSAj/fQISNDoDNDf4wkX7nkaJ6/dz691Znu9H+AZ3aOn/A2tYIultqT7cuLUe7EWYu6KAbB17Ozq9w9nPqWRm/W1QmITOsDypHdolXLSu6OsxVq8MQUO7NNn2OicZ9jSVdYo6gu7nZdd36lmBkuuHUAabK2mPGOrFHzh6gqoLgxpN6qLVxuN/Wu8NtwfTzF+fsqpOhtrX/23zt0Ug/N6TEtVaPK/j9PZxf99A743ipCuxR4XHOkI4qYEXvvauqDE+cOCEfr0yTh3/YooaPutN2o59b703HUDV3f86GMOgmIp/g6Uw3HnC+N3q/sIoLF15nD+mg/v2LRYn5St1T5cADX0vqlhhlHiz5/B/N6xF2la/WZKj+NgSIuhfb1kXTfhsZZFygnWL0zFn2Croi022pc1yk3DO9j8rgoiQTk3X//P5qNcjN+iLN3row6xLzb9eZMi8TeiY2OtMDP7crx3ZVL2Plib0LQ8tADxdSj/+8zfz9QHk4Lpz04DJHIRuD90MmDheUjQXdTaEv/HER+c7ifXL3F6ly8gsLZfSTc1XViC/RBx2eHtbjCVh/pP+G8TftykylpzPdKBG2Zr12r2MTMt1tW7i8fKOxBhGDhqF3Uht1UIb7C3f8reEAFIdQuI/762l91Ovmbc82r6/Elg/dxqJL7fUOaVetDsssKFO/jwgwbbXFTO+fpFrF8DeLyemuKS+vzXQP6RRrbo07b1hHuWqc6b4c8DVff1L3BrPduL9H9RJmUuHQ9AmjwgutVihbb0o/N2Aotb4ft67e0kPUuieafi76998V2e4TJ07Is3/sVAE3Am937zHXmW5UjGGIHn7XPdlix6CbiHyCLs1FCZf1g01L+GRlmurvG5bS1rwe6Swj6MaFRElFlcoWbDAeuHW/nDe5bWovcw+b5XRST8DP0HL6uM5GWMOFPC44cLtRWWDpDGM+x2+bM9WDOS7msGbLlUG3hgzu5zePkwtHdFa3HYPcMIU208gSYDe7DjrsZrqN1xeUVannEx0s977rlN5qIjp+bvrCyhK+dn3wg8m8uMhF5gQXrjqDjIx6XJRzayZRiqkvzHZnF0qGsaPblWvwJvQyHQSgiuDJ37arjBP6CXHIdednqS26w7i5Dh03fX/SnBi+5y90b7OWmuFbByYNTi63GKKm6Uw3ICOIUmVnxRqD1DDjoSXUZp1Ntx0Hx7r6Zfke17cE6AokVcreM1E9hqO8Xd8nWfZza7rce83+4+o+1VW/l9geYWujAsqwUbmmV3m5OtONtoTnLhqi1nf+94LB9arfEHSj4gmHVNbzSeDLNRlqrRnu//97/mC16QLBIzLnGyz+xvA4hIMDnOFiKrsjdIm59TA13eetJ5yP6hbnkr7uGuNx842FtTMfnJ3e7gw8Lm43WtMGdIwx96ejEsdTGHQTkU/ARQ0erxBvH2+hixQNwTSCbssstw5kUuJbq5P0BTty1EAo9KfiZNte4OVJCLrGGyV2tibJtqTFu3PMk38b2heqT+ExlMZ6ZeTUvknqYuTg8VIVkGYbQ9RQHq6zSK6EfdTPXzxE/nlmf3Vx8+XaDBn/1Hw5d+YyedbYAYvfUz0d116mW3O03Bsf8/wRpjLIj1bU37eOrx3fJ1z83z6tl7mi4d8/bZV5O7Ib7R1vCLJhsE1Nai51eaYbhxmXj+miPibmDiAj9t61o9S/kTn+5/ebPb5b1dlMNw4KWnIitTeVlmt6Wr6vwgGevu9pLNONIWpNaSXSPd0tcbCEklrcT8BQI9MNur3DHcPUdP8sJpMj+DzdOCT9ffOROkEc+rk1PG7iMRWPo5iR0FzWAaQt5w7rqJ7j4LKppccIKI8Vl9epyrN8nHrwjH42+6zxO3DjpB7mbHd2Ye1jIqqUcBAJ95/WRz0G4uAAH08f9ltvTEH7VbSDc6vMu7qtDuD1ATgqnUCvtGzOBHMcVD/03Wb5YLnp8evikaZtVPN3ZLktiYJDcFRp4RAaK5r1770n+7qdDroXL14s55xzjnTsiDr/VvLDDz80+j4LFy6UESNGSHh4uPTq1Us++OCDpt5eIgpQCLjijWCmpSeY4wQcGVRkWk83TsUB94FnDTY9YP+6+XCd/dze1M9t6YxBpuy8p4c9YbUQoOyvwX2hDQwnQyZ2Wr925my3ZWm5u77/+Lg3Te4hH1w3RmUU8GnwIP7hCtOhTEOHLbqnG/C7hEFijrpmvKksEZNurfd26z2zJ/dLUrvZdQ86ggY9Xd/Zfm6ttxFwYA4AYl8ccujpvK6CwXWLH5gmb109Sg07Orlfsrxy2TBV3YAL4a/XmsrxvRnWslkGT2nHfHevbVPsMS7c9YHMBg8PLGrKoQECNEyFxiEP7o8QDCALianX1vB16o061hU4jtIHgy0RdKOkFhVDyJJa3g/pwzhkwV19O3RGUZez68ee2duyVDuCHrw3qmu81fYI15WY1wbdpgDSFtw3JkSFqexxQ3MzGoJEgI4dna0owkA1BN+o9hnz5DwZ9cQcufp/q+Smj9aq2R84tLhuYvc6JfHWQfdKcz+34xV2PfXaMOvycuMAXAflehI6Dm1Q0ecsHGTc99UGdUiNw+oXLh6qsv74mrED3F1tRHo/Nw5c0I6m5wps8KWgu7i4WIYOHSozZ8506O33798vZ511lkybNk02bNgg99xzj9x4443yxx9/NOX2ElEA88TaMFyAvbtkv/nB0Trbqvu65+/IlgXGftGxXrAqzB7sUMYDHyah6mnUjcHFJzKdrso44jRfXzBcPa5bg6tLMEQGLC8ULekLOQTd5h3dLi4ttwVrsb65dYKs+scp8uT5g9RgN1yEY8CePchUaBN7JTh1MNCvfYyM6R6vfhafrTIF+Nal5Rh6A8h0IBuvYSJwYytkGst060wKgo2WOFDCsKF7TzX1gT7601a7vx/eVlquYfBQINlj9HCj/UL9O7vIZ1oDcGg1/cVFcsoLi2Twv2fLgEf+UEGP/ruz9fuOzO2ADjEuCbqRjXN3NUdtAGzKOltm6RFcIWDUgZszDh4vsTmEDZnfjVbl7Lj/QnCL34u3Fu1Vq5xwX93Zase5Xtm4cFd2s78v+jC3oaAbj+n6cbypJea6rSkuMtRmGXtDcH/98qXDVDYWPxqUqWM6OX5mOHjEphTL2R84lMC/0f6gH8NXNWGWTG2m27q8vO73DL/fHWIj1M/L2YAVFSN3fLZetQ2FBLWS1y4fIReO7Ky+R9OM/n139XXr/fP9jb9TtAbqA6imHB54JOg+44wz5IknnpDzzz/fobd/8803pXv37vLCCy9I//795Y477pCLLrpIXnrppabcXiIKYHpAiR5Y0hLWph1Xg6gwKfuS0ab1GdZlhshYYkCHLlsa74X93JbfQ1z8OJPt/t/SfXLmq0vU2hJX+HbdIfUAPrxLWzljcPsGM90N7b6Gaf2SVDk5gpxFxqFHko3MlLugPBqDzjDpfMt/Zsi1FhkJa1hXiYvOppZ762z3Z6sz1HwBwPAflDXj9xPfC8uSSf1zxnOc9DeFntysd526sp+7MeiDxPA3tG/c9XmqeQCTNzqUVzfITjdW7gRapnt09zhzG4Wn1/M4AlPWn5+903w4Bfh90/25Ixo4rNIDq/RFfVPLy/G3hS0YLdHPrbPOltBvDcudLDGfvfWITH52gVpVaA0rp5Cl1evJAIHiaUalmD7IHtktrt6hBkreUQGFGRLNPbwyZ7qNw0N79BRzZOGbEpDprSoJVqXljsJ999z7psjW/5wuP9w+UVX/oE0Iqyutf7/QvqQPUXHYn11Qph4n8W0c7USmW/d04/Gj1Pj9O15cYZ60roNy/Hz059Mr3hyBw5ibP1qnqrPCgoPkzatGmufgwPQBpkGoc2xMYnflEDUcnEFyTIQ65MFDGZIIftnTvWLFCpk+fXqd182YMUO93p7y8nIpKCio80RE5IlM9x9GYIqLBQRN1lSJucUDCUpvGzpV9wZnDjbd3t+31B/cYovOSn+2Kr3ZmQe8/5drTKXll4/uYv5eWT7wOzMRHNll865Vo8y6JTLdTYWhaBgAd5qxSsYZGPiDYUQ4dNI/Oz21/NQByXUCa/xeoowPq890xrgp9ARzrSV3z+Mi/aVLh6nsEUobvWXqviOZ7kAapoaLa51xQ7ZuuIfKOHHfgkylM1OWv0s9pH5WOAxb//Cpsu2xGbLob1Plq1vGywfXjVatGvZgfsIXN4+TK8Z2adLtRasGgpGWmGCuJ5ejVNmaPgB0pq8b1UoPfrdZBTDYPJBu9fuus9zoMbbM/Orhlyh1h9E2DjXQIqP7iBc1Y70lWgUwPd0ygLQHv7M4LMLhx5wmZF5zjUC1ua03aJlCRhZzLv79p4FyhvFYbe0U44AV33u9MaV/+xjzQY4jTPNHQus8zurS8o6xEXV60M193cbE+cZgCN51769RLQKYNfK/a0eZg2wNj9s4XMGBuzsqmXTQ3b9D7UwGPUxt6+F8/wy6jxw5IsnJdb/R+DcC6dLSug9S2lNPPSWxsbHmp5SU+tklIgo8LR104yLuj22moBtDnuzRfd06q+it/dyantaKLKl1f7CtTJAuTUTvF8rSm2PlvmMqe4HMLA4rbD3wW/aC6Yv5hnqlzzSy5Tr7274ZO7rd7c8TuskbV41UF1fOwsWrvsD/eEWaKjXXPdtnG6XllpCVRqZET9tvCtzOlLjaQLtLfNNKaZsKP8tnLhyiXv5weZrb9gk310FjiJquZEiz07qBLNptn66T71O9v0/dUfi7RfCFC34MkdJlnKktvPJt4a4cufuLDXLVu6sdap3B/Qt22sMtU3qoYA+BBiZd434cA6saqhDRe6WdLSfW8DihV2W5c4I5/mb0JHZbmW5Uk6B6GWXFyJo68riIzQ06Iwpfr6vdRFF3PVndIB+DPC0DQ8vJ5Zb0QerMhXvlq7UZTRq2pauncN1g68Dc+mdx7lDTfegPqYdaPNPtLL0uE20/841MsSOrwqzpWSk62NZD1HQWXNMTzNenHW/0Z4H2AbRnYOo6DsU/un6sTDL2ZFuX1eu97PNcnO3G77y+ntBtIKD7ujd7aIK5V04vf+ihhyQ/P9/8lJFR94+ZiAKTPkVuqfLy7ZmmNUkokUMPrz04SdUPXvpBxJuhzEqXi81qJNuNizWUW2rozWoOneX+07BO6iLX1gO/hqnkKL1ERig52n4gjcFbeiCb/vr81RVjuqjeOGQcPlx+QLILy9Wwp0l9mjYozZm+buu+9JaCLD7+9jHRWA9f8tZMt94OkGanvHz21iz5bfMRef6PXeIv0H6js9wIXtCPrzPdjVXGoPcXPZ1/+3qjrGpCT7Gl1xfsUc9xf/Xwj1sa/dzfrjuo7t/xu2W5P7kltcQEc1SJIFBCaxF6c+vdBuxiNkpw9e7shny+OkOVNaOt566Te6nXfbPuYJ1gTJez6wMYDQcUpxkZTwRk/WysYwP0/aKqBgfsD3yzSc58ZYmadO1MpZUjk8st4TEJFu/OVatJnXHUzuRyd8HXhMw87hN/Miq8nOnntrc2bG+u7e8ZSrTx88LAyJ1H7O+5xu/xFe+sVAf6+N3+9Max5jYne/ftMHeba1eH4Tbi1xGHoDpZY/n7uNlfM93t27eXrKy6Jxj4d0xMjLRubfvEHFPO8f+WT0RE5kx3CwXds40sN05pba370HCh+cxFQ1QP1sUjfaMyR5f5NbY6DA+eEG0EyBg61NQVH8jm/GZ8vsss+uP1A7/1ru79xgUA9ltbDv+xhgd3y+nc3pzpbq6kmAjz6p3/Gutk8G+sM3OXXskWQXd8y6/CswzkmjvpFlmsK99d6fJqGb0ubILRH4uyVltZeb03Fm+P/kl3w23Yk23/ItmV68J6GX/H6EFFQIbJxPbK7FH6+97S/TLthYVy40dr5et1B+VfP2xp8m1AwI4VVCjXxtPCnTnmAYO2oCrmtfl7zLMDGrp/d6e2Ouh244o5837uzrF2q7BGdm3rUPkwBls+/ss29fIDM/rK7Sf3UpVKmfllsmR3Tr31ZLYy6xeN7KxaVrBtwXowqYYDgtn3TpZ/nNlP3b/j8Pf6D9bK5e84/rfryORySzg0GtQpxlRBZGNndkNyC40d3U3Y194U+Dme0s8UsOqH44aCW3t0BZleG2ZeF2bVA49WH8xggbUNtG+8vnCP+tnj+4DWC51ZbixjvzbtWJ3KCdeVltcdhDjYqLw4dLzxig6fDLrHjx8v8+bNq/O6OXPmqNcTETmjXZuIFi0vxwCQxkrLLXue0IPVlLJhT9CB25oDxxr8fuoS0avGd1UXP8isNmXKLaBXDhe7yG5Ylh3qiyLrTPf+XF1a3nh21bL3zZt7ul1Vom453MxWabkr9UmqzUZZTxpuKboyY31a0/uEkX3++7ebZNmeo/LteteWd6MqA3DRjrVMkG6jxFmvsYEtLZBteeLXbTL9xcXyu5NBhDP2GkF3b+NwBgH3IGOPdWpG3SAOmcoXZ+9U++0f+2WbCspRqYHqDWTMm3pAgDJkuHhUZ7ltWk/18n9+3mY3mEU5NA4+cJDrqSx3nQnmDmS6MfOiKe0VeqCdrQDY+u+roUw3Wo3u/WqDqiRASfr1E7urw77zjAwxysB1lhE92/i52lqLiO0eC+6fKk9fOLjB243y/Zsn95TFf5smt0zuoX6v0J6E9VOokGiM9b5pR+ivxdmKLp3pTrTIqrqbXh2md8mjVctZOqOt14bp4LuHsU7Mkl7tpver2zpI+2ylqZINE9cdGTDYqW1rVf6NHyeqJ1xlh5GNt+znBrQZOFr54BVBd1FRkVr9hSe9Egwvp6enm0vDr7nmGvPb/+Uvf5F9+/bJAw88IDt27JDXX39dvvrqK7n33ntd+XUQUQBIjNbl5e7PEKEnEKelOOGdbpzG+pPOcZEq8MWDnc7o27LByHTjFF0PYGtKzxvo7Aey0panz/ZWl+hMd0P93BpKFlH+hqFb/lxeDtgPrssycaGFab/uhGFIgHLGpk5Bb64RFpnupgzzw/s8/ONW8wCnph4c2YJASB9c4e9KT++2leW1LM1s7nyExiBjp7O9Hyw/0KTKFARsGE726rzd8s/vN9ucSL7bCJQts2O6MiHVuP/QUFnz6vw9qkwVmcUnzhskK/9xirl95/fNjm1UsIT+zMW7ctR99S2Te8qtU3uqC2u0IT09y1QNYglT8GcaWe7bpvb02O80xDhYXo5ZANOeXygXvrHc6d9/87owY3WXLTqgwoApe4H9W4v3qZ8nqp6ev2SoufroklEp5kNVlGXXrgprazezjuolR6sLUP7+0Jn95ec7TlJDubBOy5HfZ0cnl1vC4EncZBw+OLpS0/KapKUy3bofXlegNaWf27q8HAfi+qCwZ1L9x9zRRl83/tZsld9/sTpDCsur1N+eHvTmiOnmEvMsl68L05PLLQ1t4PDJ64LutWvXyvDhw9UT3HffferlRx55RP07MzPTHIAD1oX9+uuvKruN/d5YHfbuu++qCeZERM7Q/VIoQ0IJmzv9sdV08TemW7zEteADaUvSO67trQ5D+as+Acd01/OGdTS/fVMyLnpi6MBOMbZP23OK6lxQ1k4ub/yiCWtUfrh9gtqdjYyIP8OF7G3TepnL9O2VaLpK3/bR8vqVI2TmFSPEU3BAhGwoKi10KbczEHziYlHHAGv2H3PZfQhKawGzB3Do09Uowbfu68bfk94lD+7uT0dZMXZA6z2+eue9I27/bL0Me2yOnDtzmRpO9uKcXfLpqnRVKWD5N4rsp/471eXloEtRLSeYW67nwuCyOfdOVllmBF+63UW3nzgDJa3wp6Ed1cwBZF+fumCIuf/Yslcct/3TlelyOL9MkmPC1ZRoT2rb2vTYon9O9mDFEX53cHDp6KRnfK2r9x8z34c3FGygggVZ/8rqE+Yg3foA5/1lpjVfj5wzoM5u8gEdY2Rwp1j1vt+nHpJNdoaoueJ+6J9n9lcvPz1rR4O9xfhdw9oycCaziQNbfYjpzM5uPWempQapAR7nzhveSd2n6cdyZ+GAEGcnOATDQQOqpyLDgm1Wi+HgHYe9OCBCFYklBOzvGb8fN0/u0WA7mLVTjaTG4t05jV5X4PewsSoH/N5blpdba6zk3Z2cfqSeOnWq+oKsnz744AP1/3i+cOHCeu+TmpqqVoHt3btXrr32Wtd9BUQUMOIiw1Q2A466OduNgUdwmgOl5b5KX+gu33vUZn+pvmBGJhpBLUrosUoEp9kLnCwFwwMlBtPBgA51L8bQJ4yfa3FFtXnFCxxworwceiVFe/26NldBgLHswZPl/tP6tsjnQ5WDznh7ArKRuLi3nDPgqIKySlXKDHed3Fu1SeB3zVVBrx6i1imutToQ6WIn061LHlsq0411PZYw7MrRzLGeio8VdTh4vHhkZzVQEl+D5e1GZgzBFg4cLAMxPbAIwaK+kMZ6LmTUcDBxx7RedbKgGKiEQxVcLFtvMWgIytFnGQekyHBbBgg6oH7ou81q/gF6+XGQoH8XsPLLk1luy/Ly/NKGH8/09HFAiXVDUOb78YoDcsYrS+SSt1aY78MbKj/GzwIVNPZKzFFhgmwuSsYR6Fm7xJjRgRJzc6bbDRlFHNJM69tOBXl3f5GqqhbstXvg9xKZ8Y6xzrXEnDvU9PX9sOGww1UF+nqkpQapaTgAWfHgKeYBjs7CARWqc0CvSsPviq0KBRzuPnvREBWkY3ib5Wo1zHrB4SMObmz9fjRkUKcYFeRjXRsmnjd0sDHqiTlyw4drGgy8cSiLHfEYropqGp8OuomIPAWnp7p8y50TzPGx1xjDQrCf21+hxA8nwTg91heutvq5h6fEmb//5xjZbmd73nBxjtN0nM5bZx7wOr3/WfeU4UJdZzQdyXQHIgQ5+hAqEJhLzB3cFathvzfKvzElH/2+Y42BQ40FL446lGcKrnXQqftYrdeG7TSGqOmBR5ic7c4BWhgmBrp023rCtD06o3nusI6y+p/T5au/jJfnLh5qngPx5ZqMekPUUI5qmd3C9wIX4Mic4XADwdErc03ruW6b2kutC7KEQ70JxjBEvYPeGj6GdRD0xsJ9glehvaRPct3+zQdP76cGciHT+/bifaqXH1k6BPc4cLzUYpijpzg6vXx3Vm12G9lrez5acUDG/neeaqXAAQmCzktGdZa3rx7V6G2p7euu//H/MCoQMPjK1oo0HALiUGZXVpH5cMkdwQ2CwWcvGqquA/B58Ldty16L3mRnsq5w+uD26jEJv9u6JaqxndR6w0dCM/d0Ows/i+YODtXtXXO2m37GDR1cYy4A+uwB7Sb4vcXf5DtL9qnXYZiss0M9W7VqJdMHJDVaYo7fewxnXLAzp96KOkv6cB9fh62qN/R5W247aUkMuonIp7TErm7sjMSFHErmLLM3/ggX1vb6tFONTLcuFbXMAszfme3UmpvaHqtom+XQem3YXiPLpUsDcVGKzBiR/j10Zv8zqjU+XpmmXn7i/EHqglCv9XNVX7dlpttywnu6VXm5DkaQOdZ93+4apobKFZ1xfPzcgSqjivLkpXtyG3w/7Gn+eZPpQO26id3r/N+lRu/uTxsOq6FeddaFWV2oq4nzRtCFn8Fnq9LVIRoyWlePtz247Ey9UcFGXzcqawY9+oeMfnKe3PrJOvnf0v2yYGe2uQRYt1tY9wK/etkwdehw9biu8vQFg1Vf8NbHZsgbV41068R/pwepNXL4YllKjeDDVgZWVXT8vE1lDLHm79/nDJBV/5iuglRbGb+GhqlZfny8/Icx98PeUFHcT+uZH4DSfXfN1sA1wDMXmtoH3lmyX5bZ+J1uSj+35bAt3ZPsSIm5znKj2kOvwfQlemgaDgEt/23PPdN7q8drtPo8+es2VVGD+7aosGC5amzThhKebHy/V+w96tDB01O/77A77VyXllvu57aEv3t9gNvSGHQTkU9piaBbTy3X+0T9GQbHwOoDx+SwRa8syrf0EDXLoBunxH2S26jyPp39cATKTGGgUSJsrXaYmumBVfefIhtvbxgPBRZ9oYTskyMzBdDXiWwM4ocLhncyr/PSQffaA67p6z5o/N3oAzodUKs98xYff7sROPXrEC2DOsa6tcR8yZ5c9XVjqnHXhKh6E6bt+WRVuirLRQBmvWMZ37eU+NaqvWTW1sw6k8ttBXXDjPsNBPozjR3ad53S225JN6qKULmB74nlECsMdPvbN5vU7UIVEoaxYW3Vde+vUZl0DGa0vq0asucfXT9GHj9vkFw2potaGeQNwbZ1pruxoHuXRXk5Dk90gGRpya5c9f1AJRHWbV07sbv54ztiYEd8b0yr3nQfuM4c4vPh/3TVhC16oFpLDKvC8K0rxpraB+7/aqMaNGdrcrk+zHXWucbfC8qo8VjXEL3CtKWz3K6iH3s1W0PULOHvF2XmeFj+au1BefhH06o//H3hoKspBncy/b7sP1psPtCztstiswH+Xp4yVmZaa6ifW3vuItOhTUtj0E1EPgXlgv/f3n2AR1VmDRw/SSAJARJKIKEEQu+9g2IBQcXekHUBUbG3ZT8LNmwrVmRVFBv2gm3VVRcVBERBeu89oSWhJRAggWS+57wzd5gkM2FCcpPM5P97noFkMuXO3Cn3vOe85xUb1+rWEug/NjpHzge7Mi/BTAMFLXfVA/QfXBkuK1OgB9faVEUP3C0aAFsHJN8WodGM1UTN1+izVdK22dXB3DroO92DJgQfq9mTBhb+BKs651ADdJ2H+tAQZwMmq9pCM4w6r7skgl4r020tp6bZXC1r1O3cdfCYexBrgxV0x0e758fbFXTPdpWWn92qjnspLfXr6hSf64PrQMYnrqqAUf2cy9J50jLdq7u55u4udM4P35TmO+i2pqVombvOB9aye2s7vNE5x71dXZg9S8y1aZMG2xpM6tq/95/fyszr1aXZdE3uf5zXUgKVP+Xl+tj3ZWabIMf6/Jy/tWBGcMa6FHcJ+OkMVOpr1gqWPed1W1OPNOAurOO4TtuwpgmVxrzZR4a0Md9fOgjxU77qiOJkutU5reuYCivtMaLNAwubQ2x18raOTQI96D5VptvqnD6yj/MzQgdkdLDshjPyVsYURZ3qERJbLdwch3gOMHna5Mp033Wus6rly8U7Cky12JhyyF3BVFjQXauM9hVBN4CAYneme9b6VMnOyTXLVGmJXkVwssR8V57GOe6u0fnKwXX+nh7TaQM27QhdlPJyqxmW76VLnF+sW13Btz/LhaFi0ECiqyt76s+8bu22rbSc2fOAWIPHk/O6i19ivjNfpltv3wo+tu/PdPc00HmfGtho8KlTV9RqG4JuDRCsJmpnuTKTmsXUKhP9bPNVMqvNkDS402aJ5/voZXFlt4bmva8Nj7QaxZrTrU0M89PPDs/ptBoce5sP7MnqwmwFUTpwoh2x9XZ0Xrlm23VO+HujesqyxwbJiscHucuiA5HOZT9V0G0FIfqaOss1iJI/2NC5+tYcfqtU93R0tUrMPdZi/sUVdA8+RX8Tfd1rRYGWZntmve2iAwC6eoP6Ol+TQHfQfZprMms1xMtDO5tgUl9/z/uYO+65XJgGjYHIcw63vrf9/c69b3Ar90DjxR3rFXsqXmvX8l7rXL0vPGlF0hbXEqLai2FYT+d+f+Tble5qpYXb9psl9bRSQ4/duruWOCtPCLoBBJQ6Nme6Z6xNdZeWV5Sy5gvb1zPNhTQw1pFiz/V1rfV2PSXUipIRvZ1zt+77avkpm0FppkYzBvp0els303O0XQMYzbhZc7q1vBzwtl53YbQDtpY162vu2h4Fl4U6Oa+7eM3UNNjZ41oyzJrTrRrXytvB3DqQ1KkZOoilHXvVtn1HzFxcTzqHVgNjf5eGyk/fx/qe0yqVbh4HnlYgpCWh+el9TvnTufbx8D6JPpeh0wNrLedWr/y20cwf1s8Oq6Tek85vtZqbaXXBxR2dg3uF0cBO95nOA9cpKQ/9Z6U5f/SZTQvMw9SAqKy7jxdXDVemWyusfE11sCok9Lm0mvDpdCBP+nzpHFet6ijOIIR7Xrfr/aXL3ul8XX2uB7Y5dTCvgzzvXt/DPThut8u7OquudBBoxwHne02fBw28/M3a+nJ2q7qmD4CaPHuzvO9qMBhsmW5doUDnYyvt9F7F9fOp6Pv7zeHdzMCHrqNeXK3jq+dphOZJP0d1eol+puk2PnB+a1MZo437tL/DtFW75bp35kvGsRPmNfzFLX3K5WcDQTeAgBLr+jLfa0OmWw8857hKy/ULt6LQdcitjJjOYcsTdPsoE3zwgjYmUNZg2prTdar53E1qV/XZaEa70eoBo5aXacBtLRtEeTm8ZeJ02bDClvP5dL6zTPrslnXMIFF+JTWvOyXjmCkj18CzbvWTjaOsZcM0w+3ZRM0adNIMp5Ulyr90mb4HdW3sS1/702djISswf27augJzIK0st85h95y/rBUtWo6tQXn++9R1vHUupHa7trJIvlhdvzUDaA2M+cpgX9G1gTlQ1qWN/OkircGaNppTI6bMNxVNmq0M5BLywkR7zLn2le1e7yqr1Wk+GlDo06hBiDXYo35zlZaf1aruKasJ/Am6tYJB59L/7Mpya9m/lZUvT3S5qz6u9/J/ljhfj9ZglQ4Q+RtA+nJ19wST0VVP/LBGflq5u5A1usvf8+MPTS5YlWZFLcfXCppnr+xYIk3zWtfznem2kgGawdbPEX0tjr2gtTlvwq8b5LZPlpi597r04Cc39TLHNOURQTeAgGJnpltHTfULVLuQdm1cdms5loVLXWtr6lJgmnmzmpZ4y3QrPZiZcI2z/E6DBC1N9cVadsVXabn1xW994WsDN6tkj0w3PGlZtga4GoxpozJvtFJC5/tZ6/p6owGMztnUTO2KHenFLi2vVyMyz/JtVqbbagi4zpW9sbI51mNRngGwBtOaubGynyPfW+AOfDyXKBrzxXITmL8xa7M8/aNz3WmLu7TcVYps0QPVQa7u0xqsL08+OXAxxXWfV3ZteMrgSg9sdU68NeaRv3O5J11eaNXjg91N7PxhdcHWzwCrrLw8Zq1Kgr5mdG56YUG3VV7eIq6a6axtfY56zuu2KrSsrtunS7OH1kCnVpNYTUVPVVpelnTKg7UOvL6ereZ+pzufO7/bz24mf+/dyLze7/18WYEBq72uHgmBmun2rDQry0Hu1q7PRh2gzD+gutHLNJarujU0lR8abOvFr+vVSCb/vVu5/qwg6AYQUOyc0z1no/NgVT/Iy1OH29KgpYOakdLM3Idzt5kvMe1UXFiZoHYMvsO1VM8j367Kk3kpynxui1UKOGOd8wBS77taAC7BAvvoAZXVAd9Xibk24dLutjo32VfFinNed/GXDnMvF5ZvPmNj18HryUy3tWTeyfeA1Uxt1c6TmR1tYKWDADr3WwMoPaDUJbKsruMagF3y2h8my2wF+Tp3XZc5VDpgZs13P6tFwU7TOgih5dta0XPppD9lwITZ8vy0dfKr6/reGqjlp5+NVjd0KxgsTJHXSfZoYOmtrDzYFLZsmAYfVtDdyhWUWK9ba163DvxooKJPs1WxVBxWtnvaqj3u99igtuU36NY11/W7S6ujdHutJpynO5/b24DwE5e0N837tCeCtSa1xaq6qx3AQfffejaSHok1TSBbVprXrWY+0/R9oBV0nqz3gE7PybNm+5UdpW+z2qap3tOXtc8z8FkeEXQDCMhM96FjJ/xaNqgorPU+rTmLFYk2pbGWSJs0c3Oe7sOF0U6i2jBJszT3f73Ca8nvGlfnci1F82e03eoeTxM1eGNVX1hTIPL75C9nA7VhPRsVehBmdcouTtBtzSNtUCNvCbuV6dagWzPT213Bty4XVlime4pr3ujlnRuY+ZK6NrY2Tr7/qxVmaSQNuLXDv66DrJ28b3J1DNa/60Dk3E3OZaM0Y2WVuOd9zLXl05t6m2aIWkq+JS1TXp+12QyyaXdqbw3RvPFslOXPGtBFoaWq9wxoYcrhg7Ws3FONKlYztYJd5bUzt37XaXWHNSjpntftCrp/cw1SarBcEmW1VtD91eId5nWhncjjY+xZc7sk6JQla6Dmq8U7T2a6C6nAKCr9HBlzXiv3OvLWPG6lzQcDuZGa6tW0tnx5a1/3QGBZDag2cx0DrM1XYm41bMw/wKeVcJ+O7i03ndk0IHrwEHQDCCjRVZzLxHjOpSoJmlHSeY2qXwUMuj1LzLXLcv71uX3R+YMTrulk1nDVTuZWx2iLrp9qZR58LRdmsb5wrftnPjcKn9ddMNOtGeVF2w+YIMWae+xL72bWvO4Dpz2v29253KOJmjXXVON9LV/XLv8avGj5qWcJqnWAq++PQ8eOmwBes4tq1BnOZmbPXtlBbunf1Jz39ZIdcux4rpzZIlZ+uvtM6ZFYS+47v5Upy9QD//u/Wu7uYJ2/tNxTn2a15ZVhXWThwwPNerWaKdJmSv8Y2MLvx61VK7odGrjr8kElTYPtf1/bpVyXipbGsmHrXb0ANLjQ6gel+90qudXg7zdXlcK5rZ2DpsVldX22Vska7JqSUJ5d1dWZodVlL611mksy6Fa6xrsOMGu2WwckLNZxSCCXl5cXra0O5h7N1E5o53LXaiYt/BwULK8IugEEFB3NtKPEfGnSAXOArKPVnvMuKxLN8OucPouv+dz5aXZMu4mqF35en6ebuXN+lrND6qk62uY/SGI+N7yxlg3TBn35q12sLLfOXa57iuY+Les653XrIM+p5nWnZhwznxH5WfPKG+YrL9cAqb7rPCuQzv+5ou81qyxd+x58NG+7CXT6Na/tPvjUzzvtDPzwhW3M+2fMeS3l/VE93aWsWuqtwane38z1ae5gwJ8y4+qRlU2jKM0ULXh4oN/vd8vbI7rLX2MHFHupoIouppDycndpuasLvPW6scpsf9+YJn+6mu0N8KO7uD80o24NBJT3+dyeFRz6OtSqgF2uaU7N6pb894fOG1afLkgyS/PpYJ213wi6i6+1qxLIGjixVnjQgQ7ttRPonzUE3QACjlXGZTXbKsnScm34U9Q5iMFCs9ZDXE2M9CD+VJlpTyP7JpoDQc3WvD57U5GaqFm0HNbzqae8HN7ogZcO4mgZtWewrGXcVkft63p5b6DmSd/nJ5cOK1hirgH9jyt2y6j3Fkjv8TPk8tfnmt/9yXQraxmtGa7O0t4G86ylw7RU+LMFzgGDG/o5S8Y9je7f1GSm7x7QokDJvM71fdA16KXPiVadWI/LTpqFLo8drQN12TDvQbezrNZaes1ilZi/OmOTqdLS94R2di4J+r6wBrZ06kBJZ4ztoNt8uatSS1WPqOSeilaSLu5U39y2do//c/NeOeAqLdf3pLUfcfraeFmre5OrqauWlgf6sRlBN4CAY0emW9f0rajzuT1pSa6W7+tSS1Y5oz/0oONB1xIe7/25zR2MWMuF+RPAa9bOc3knysvhjWZ/reZaE35dL/d8vlSGvztfLn71D9PxWwdrrGWETsUKTrXjt2aytTxV1+TVUu1ez8yQOz5dYjLIVqnt5wtPTp/Q/gW7rKDbSwamUa2qeYIpa0kcT9a87rd+32LWmE2sHSXnnMZyhdf3TTTl3tZjqghl2RWhvPxkE7W8gW9PVzM1a+qOZrlLck6rNUda12AOFLo8naVp3Wq2zPHV3ifW/WhVjbWKilYfBHpAWJ4y3ZvTMiXrRE6egaeS7h1RFmgLCyBgg25tMlMStOPvclfGrJ/rwLWi0nmmv99/Tp7yQn9psKDNqf7asl9e+nm9TBja2e8map6BtmYR9HjJ2/rKgDXvdNrqPea1lt8N/RL9PgC2gm7NNGsmO796MZFmGS3NLI6YssBUxKQeOmbW5NZ51DrH2lyuRqTPTLfFW6a7nSvo1sECK3g+nYN3vY6WmWtn5Ss8Mn4InO7l+YNuLV8+uVxY3tdOL1em23JuMZcK89Yor0/TWLOCRaDQtaY1Q78k6WCJdS735m+9GssH87abjv9WSX/tcroudKCJj440xx76XtDmaXrcYC0Xlr/aIxARdAMIONaHr7U0TnH9tXmf5Lg6/gb6nKGScLqdas380wvamKWI/rNsp1zfL9HM6fa3vFxpKaNmFnU/kK2DL9f2bGSmlzjEYQ54a1eNkNrVws086qKU2epl9UB9WfJB0zW7Yc0q5rWn5eIakOt0E6uc2zqg/+/y3XLjGU3cy4Vpqbu3JQY1a23Rm/CWqbEy3UrLVq/y6ApeVJpts3orIPC6lx88kne6VPKBI2ZQRyuOrG74Fn2t6utL57vqXNeSnk6gn+Xeut+Xd/cObCkPfr0iT6l5SdPpHN0b1zQNG7UqRp2qXwn8o687HZzUprbaTM0E3dbAE5luACh9Vhnlgm37zbzL4gZnVml5Re1aXpJ0eRmd9/bf5bvk3s+XSdaJXKkaHlbgoPFUAyrB8AUL++j67dZ0huLQDPHXt/U1g27aLbwwl3VpYILub5fudAbdrtJyDdS9scrLrSyct88pbb6k2fTd6cfM1A7Wpa94on2Ul7vLautU8/ra1OoLDbrPMF3kGaBUuuzd3LEDbL+f63o3MkG3lkErMt0lp029aGfQvScjT+fyYMh0M6cbQMDRbKiWIWkDmYXbCpaXnvZ87gpeWl5S7hvUSiqHhbjnG+qXqL8lsxqw/0OzFRe0sXkrgZPZlVMF3EqbDOpSZCt3ppvSRyvT3aCm9wElz0yhZsd8ubl/U7M2sjZLQ8UtLz9YIOh2ZvisTuX53dy/mSkrv7cIS72hZFzQvp57vylrNQEUX2vXZ6VWyW3fHzydyxVBN4CAPEi2stJWwHy6tBGSjqRqTFgaHX8rAg02hvdOdP/ezs/SclUlPEzuGdii0CAFKAt6YK2ZNPXdsp0nO5f7OBjUrLW10kKbQl7Po/o1Mdl2LRlGBZ7Tna97ubVGd0sfrx2drjDl+h5+98tAydHKgqu7OdcGVywXVnJauxpOrt19SDZ6NFELhkZ1BN0AArrE/I+NxQu6raC9Y8Map9U8DN7ddW5zqR5ZqUjzuYHyTkvM1bfLdsqOA0d8Lhdm0SoP1TmhaGtgo2J2L9fmaYWt0Y3yY1hP55rdSvtJoGS0jNPO87okbJZ7KcdgmW5G0A0gIFmZbl0Hep9r2Y7irM9tBfEoGTWrhssr13aRq7o1NCXjQDA4r02c6VGQvP+oe8CuYSFlj89f1VHeHtFd+jWnigbe1YwKN+Wzusb6rR8vNp3sjwfZXNZgpH0aBreLMwFix4ZUG5TksmyJtZ39MH5Ysdtr9/5ARdANICBpt1Br7s+fm52joUWlBze/b0gzP9NEreSd07quvHh1J/MlCgQDnf4w2LWGsbVcWGGZ7noxVeS8tnpgHvilkbCvVHn8FR0kPCxUflmTIpdN+lNmrks1c1mjwoNjLmuwemVYF5n74LnSOp5qrpLU2nVsp9luRaYbAMpNibkzcC6qV3/bKAeOHDdLr2gjIwA4lcs6512OiKAIJTFtYeotvSUuOsI06bvl48XuDF8wzGUNVrpUoA6soWS1zjeIESzVHgTdAALWGS3quOd1Oxwn58L5Y+veTJnyx1bz86MXtZXKfnQvBoC+zWq71+XVJlhVWeYLJaBLo5ry37vOMGtAW19nLYMkwwcURet6J4PsyMqhPpdlDDQcZQIIWD0Ta5mSvF3px0wQXRRP/7BGjuc45KyWdcyyKwDgD11e7OKOzj4FZLlRkupWj5RPR/eW4b0bS3ilUDM1Aaho2roaUAZT53JF0A0goOdXWmXhRVk6bNb6VJmxLtWsuatZbuZbAiiKUf0SzbzDoT0SynpTEGQ02H7qsvay5onBMqids38AUJE0qFHFLLmoWtQNjtJyRdANIKCd4ZrXPcfPpcOyT+TKkz+sMT9f3zfRjKICQFEk1IqSaff2lxF9Tq5HD5R0RQVQEYWGhkgrVzO1FnHBc4zGOxpAUDRT+2vzPjmR4+wmXJgP520zS7HEVguXuwe2KIUtBAAAgL9Gn9nE9DfI37gykNH9A0BAa1c/xjQzOnjkuCzfcVC6Na7l87Jph7Lk39M3mp/vG9xKoiMrl+KWAgAA4FTOb1/PnIIJmW4AAS0sNET6NfOvxHzi9A1yKOuEdGgQI1d3Yy4mAAAA7EfQDSDg9WturdftO+jOOHZcvlmy0/w89sLWQdMNEwAAAOUbQTeAgNe/pTPoXpx0QLakHfZ6me+W7ZKjx3NM47Q+TWuX8hYCAACgoiLoBhDwGtaMkoFt6orDIfL2nK0F/u5wOOTT+Unm52E9G7FEGAAAAEoNQTeAoHBz/2bm/6+X7JDUQ8fy/G3FjnRZuzvDrH96Zdfg6YQJAACA8o+gG0BQ6JFYU7o0qmHW4f5g7rY8f/tsgTPLPaRDPakRFV5GWwgAAICKiKAbQFDQkvFbXNnuj+Ztl8NZJ8zPh44dl++X73KXlgMAAACliaAbQNA4r22cNI2tKhnHTsjUhcnmPA24j2TnSLM6VU02HAAAAChNBN0AgmrN7pvObGp+fnfOFjmek+suLaeBGgAAAMoCQTeAoHJF1wYSWy1cdqUfk/E/rZNVOzMkPEwbqDUs600DAABABUTQDSCoRFYOk1H9mpifp/zpXD7sgg7xUrMqDdQAAABQ+gi6AQSdv/dqLFHhYe7faaAGAACAskLQDSDoxERVlmt7OANtbazWq0mtst4kAAAAVFCVynoDAMAO9wxoIdk5OXJp5wY0UAMAAECZIegGELTZ7qcv61DWmwEAAIAKjvJyAAAAAABsQtANAAAAAIBNCLoBAAAAALAJQTcAAAAAADYh6AYAAAAAwCYE3QAAAAAA2ISgGwAAAAAAmxB0AwAAAABgE4JuAAAAAADKU9A9adIkSUxMlMjISOnVq5csWLDA52Xff/99CQkJyXPS6wEAAAAAEOyKHHRPnTpVxowZI+PGjZMlS5ZIp06dZPDgwZKamurzOtHR0bJ79273afv27cXdbgAAAAAAgi/onjBhgowePVpGjRolbdu2lcmTJ0tUVJRMmTLF53U0ux0fH+8+xcXFFXofWVlZkpGRkecEAAAAAEBQB93Z2dmyePFiGThw4MkbCA01v8+bN8/n9Q4fPiyNGzeWhIQEufTSS2X16tWF3s/48eMlJibGfdLrAQAAAAAQ1EH33r17JScnp0CmWn/fs2eP1+u0atXKZMG/++47+fjjjyU3N1f69u0rO3bs8Hk/Y8eOlfT0dPcpOTm5KJsJAAAAAEC5UMnuO+jTp485WTTgbtOmjbz55pvy1FNPeb1ORESEOQEAAAAAUGEy3bGxsRIWFiYpKSl5ztffda62PypXrixdunSRTZs2FW1LAQAAAAAI5qA7PDxcunXrJjNmzHCfp+Xi+rtnNrswWp6+cuVKqVevXtG3FgAAAACAYC4v1+XCRo4cKd27d5eePXvKxIkTJTMz03QzVyNGjJAGDRqYZmjqySeflN69e0vz5s3l4MGD8sILL5glw2666aaSfzQAAAAAAARy0D106FBJS0uTxx57zDRP69y5s0ybNs3dXC0pKcl0NLccOHDALDGml61Zs6bJlM+dO9csNwYAAAAAQDALcTgcDinndJ1uXTpMO5lHR0eX9eYAAAAAAAJMRhnFlUWa0w0AAAAAAPxH0A0AAAAAgE0IugEAAAAAsAlBNwAAAAAANiHoBgAAAADAJgTdAAAAAADYhKAbAAAAAACbEHQDAAAAAGATgm4AAAAAAGxC0A0AAAAAgE0IugEAAAAAsAlBNwAAAAAANiHoBgAAAADAJgTdAAAAAADYhKAbAAAAAACbEHQDAAAAAGATgm4AAAAAAGxC0A0AAAAAgE0IugEAAAAAsAlBNwAAAAAANiHoBgAAAADAJgTdAAAAAADYhKAbAAAAAACbEHQDAAAAAGATgm4AAAAAAGxC0A0AAAAAgE0IugEAAAAAsAlBNwAAAAAANiHoBgAAAADAJgTdAAAAAADYhKAbAAAAAACbEHQDAAAAAGATgm4AAAAAAGxC0A0AAAAAgE0IugEAAAAAsAlBNwAAAAAANiHoBgAAAADAJgTdAAAAAADYhKAbAAAAAACbEHQDAAAAAGATgm4AAAAAAGxC0A0AAAAAgE0IugEAAAAAsAlBNwAAAAAANiHoBgAAAADAJgTdAAAAAADYhKAbAAAAAACbEHQDAAAAAGATgm4AAAAAAGxC0A0AAAAAgE0IugEAAAAAsAlBNwAAAAAA5SnonjRpkiQmJkpkZKT06tVLFixYUOjlv/zyS2ndurW5fIcOHeSnn3463e0FAAAAACB4g+6pU6fKmDFjZNy4cbJkyRLp1KmTDB48WFJTU71efu7cuTJs2DC58cYbZenSpXLZZZeZ06pVq0pi+wEAAAAAKLdCHA6HoyhX0Mx2jx495LXXXjO/5+bmSkJCgtx1113y4IMPFrj80KFDJTMzU3744Qf3eb1795bOnTvL5MmTvd5HVlaWOVkyMjLMfaSnp0t0dHRRNhcAAAAAANG4MiYmptTjyiJlurOzs2Xx4sUycODAkzcQGmp+nzdvntfr6Pmel1eaGfd1eTV+/HjzZFgnDbgBAAAAAAg0RQq69+7dKzk5ORIXF5fnfP19z549Xq+j5xfl8mrs2LFm9ME6JScnF2UzAQAAAAAoFypJORQREWFOAAAAAABUmEx3bGyshIWFSUpKSp7z9ff4+Hiv19Hzi3J5AAAAAAAqZNAdHh4u3bp1kxkzZrjP00Zq+nufPn28XkfP97y8+vXXX31eHgAAAACACltersuFjRw5Urp37y49e/aUiRMnmu7ko0aNMn8fMWKENGjQwDRDU/fcc4+cddZZ8tJLL8mQIUPk888/l0WLFslbb71V8o8GAAAAAIBADrp1CbC0tDR57LHHTDM0Xfpr2rRp7mZpSUlJpqO5pW/fvvLpp5/KI488Ig899JC0aNFCvv32W2nfvn3JPhIAAAAAAAJ9ne6KtJ4aAAAAACA4ZATCOt0AAAAAAMB/BN0AAAAAANiEoBsAAAAAAJsQdAMAAAAAYBOCbgAAAAAAbELQDQAAAACATQi6AQAAAACwCUE3AAAAAAA2qSQBwOFwuBczBwAAAACgqKx40oovS0tABN379u0z/yckJJT1pgAAAAAAAti+ffskJiam1O4vIILuWrVqmf+TkpJK9cmBPaNLOniSnJws0dHRZb05OE3sx+DBvgwe7Mvgwb4MHuzL4MB+DB7p6enSqFEjd3xZWgIi6A4NdU4914CbF3pw0P3Ivgx87Mfgwb4MHuzL4MG+DB7sy+DAfgweoa74stTur1TvDQAAAACACoSgGwAAAACAihx0R0REyLhx48z/CGzsy+DAfgwe7Mvgwb4MHuzL4MG+DA7sx+ARUUb7MsRR2v3SAQAAAACoIAIi0w0AAAAAQCAi6AYAAAAAwCYE3QAAAAAA2ISgGwAAAAAAmxB0AwAAAABgE4JuAAAAAABsQtANAAAAAIBNCLoBAAAAALAJQTcAAAAAADYh6AYAAAAAwCYE3QAAAAAA2ISgGwAAAAAAm1SSAJCbmyu7du2S6tWrS0hISFlvDgAAAAAgwDgcDjl06JDUr19fQkNLL/8cEEG3BtwJCQllvRkAAAAAgACXnJwsDRs2LLX7C4igWzPc1pMTHR1d1psDAAAAAAgwGRkZJplrxZelJSCCbqukXANugm4AAAAAwOkq7SnLNFIDAAAAAMAmBN0AAAAAANiEoBsAAAAAgIo8pxsAAAAASnLpqBMnTkhOTk5ZbwpKWOXKlSUsLEzKE4JuAAAAABVGdna27N69W44cOVLWmwKbmqTpcmDVqlWT8oKgGwAAAECFkJubK1u3bjWZ0Pr160t4eHipd7KGvRUMaWlpsmPHDmnRokW5yXgTdAMAAACoMFluDbx1reaoqKiy3hzYoE6dOrJt2zY5fvx4uQm6aaQGAAAAoEIJDSUMClYh5bBygVcbAAAAAAA2IegGAAAAAMAmBN0AAAAAEKSNxW6++WapVauWKbtetmyZnH322XLvvfcW+7ZL6naK6vrrr5fLLrtMAgmN1AAAAAAgCE2bNk3ef/99mTVrljRt2lRiY2NL7La/+eYbsyY2To2gGwAAAAACsBO7LnlWmM2bN0u9evWkb9++JX7/mj2HfygvBwAAAFChS7CPZJ8ok5Ped1HKue+8805T0q0Z68GDB8uqVavkggsukGrVqklcXJwMHz5c9u7d6y7DvuuuuyQpKcmUlicmJhb5uXn99dfNeteRkZHm9q+66iqf5eW7d++WIUOGSJUqVaRJkyby6aefmvucOHGi+zK6He+8845cfvnlZsk2ve3vv//e/fecnBy58cYbzfX1dlq1aiX//ve/JdCR6QYAAABQYR09niNtH/u5TO57zZODJSrc/5Dsgw8+kNtuu03+/PNPOXjwoJx77rly0003ycsvvyxHjx6VBx54QK655hr57bffTLDarFkzeeutt2ThwoVFXrN60aJFcvfdd8tHH31kMuX79++XOXPm+Lz8iBEjTMCvpexadj5mzBhJTU0tcLknnnhCnn/+eXnhhRfk1Vdfleuuu062b99uMue6hnrDhg3lyy+/lNq1a8vcuXPNnHTN1uvjClQE3QAAAAAQADQzrAGrevrpp6VLly7yzDPPuP8+ZcoUSUhIkA0bNkjLli2levXqJtiOj48v8n1phrxq1apy0UUXmdtp3LixuT9v1q1bJ9OnTzfBfffu3c15mtHW7c1PM/DDhg0zP+u2v/LKK7JgwQI5//zzTbCuQblFM97z5s2TL774gqAbAAAAAAJRlcphJuNcVvddFN26dXP/vHz5cpk5c6YpLfc2l1uD7uI477zzTKCtDdg0INaTVRae3/r166VSpUrStWtX93nNmzeXmjVrFrhsx44d3T9rUB8dHZ0nIz5p0iQzeKBBv2bvde56586dJZARdAMAAACosHSecVFKvMuSBqmWw4cPy8UXXyzPPfdcgctpOXZxaXZ7yZIlplz8l19+kccee0wef/xxk82uUaPGad9u5Xwdz/X517Jy9fnnn8v//d//yUsvvSR9+vQx26Bl6PPnz5dAFhivLgAAAACAm2aVv/76a9OsTLPMdtDbHThwoDmNGzfOBNs6X/yKK67IczlteHbixAlZunSpOxu/adMmOXDgQJHuT+eq6/zx22+/PU/WPtDRvRwAAAAAAswdd9xhmpvp/GjNPmtw+vPPP8uoUaNMF/Di+uGHH8x862XLlplGZx9++KHJSGuAnV/r1q1NYK5Nz3R+tgbf+rN2IA8JCfH7PnUOuDZw08eh89IfffRR89gCHUE3AAAAAASY+vXrm8ywBtiDBg2SDh06mCW8NBsdGlr8ME9v55tvvjEd0tu0aSOTJ0+Wzz77TNq1a+f18hqU67Ji/fv3N3O/R48ebcrDIyMj/b7PW265xWTRhw4dKr169ZJ9+/blyXoHqhBHURaHKyMZGRkSExMj6enpZqI9AAAAABTVsWPHZOvWraYrdlGCQRTdjh07TCf16dOny4ABA8rFPi6ruJI53QAAAACAYtG53trcTTPuu3fvlvvvv9/MN+/fv79UdATdAAAAAFDBzJkzRy644AKff9cAuiiOHz8uDz30kGzZssWUlWtDtE8++aRAt/KKiKAbAAAAACqY7t27myZpJWXw4MHmhIIIugEAAACggtHO4s2bNy/rzagQ6F4OAAAAoEIJgF7SCKJ9S9ANAAAAoEKw5hcfOXKkrDcFNsnOzjb/h4WFSXlBeTkAAACACkEDMV1/OjU11fweFRUlISEhZb1ZKCG5ubmSlpZm9mulSuUn1C0/WwIAAAAANouPjzf/W4E3gktoaKg0atSoXA2mEHQDAAAAqDA0GKtXr57UrVvXLHOF4BIeHm4C7/KEoBsAAABAhSw1L0/zfhG8ytcQAAAAAAAAQYSgGwAAAAAAmxB0AwAAAABgE4JuAAAAAABsQtANAAAAAIBNCLoBAAAAAChPQfekSZMkMTFRIiMjpVevXrJgwYJCL3/w4EG54447zHp4ERER0rJlS/npp59Od5sBAAAAAAgIRV6ne+rUqTJmzBiZPHmyCbgnTpwogwcPlvXr15sF5vPLzs6W8847z/ztq6++kgYNGsj27dulRo0aJfUYAAAAAAAol0IcDoejKFfQQLtHjx7y2muvmd9zc3MlISFB7rrrLnnwwQcLXF6D8xdeeEHWrVsnlStXPq2NzMjIkJiYGElPT5fo6OjTug0AAAAAQMWVUUZxZZHKyzVrvXjxYhk4cODJGwgNNb/PmzfP63W+//576dOnjykvj4uLk/bt28szzzwjOTk5Pu8nKyvLPCGeJwAAAAAAAk2Rgu69e/eaYFmDZ0/6+549e7xeZ8uWLaasXK+n87gfffRReemll+Tpp5/2eT/jx483IxDWSTPpAAAAAAAEGtu7l2v5uc7nfuutt6Rbt24ydOhQefjhh03ZuS9jx441KX/rlJycbPdmAgAAAABQto3UYmNjJSwsTFJSUvKcr7/Hx8d7vY52LNe53Ho9S5s2bUxmXMvVw8PDC1xHO5zrCQAAAACACpPp1gBZs9UzZszIk8nW33Xetjf9+vWTTZs2mctZNmzYYIJxbwE3AAAAAAAVtrxclwt7++235YMPPpC1a9fKbbfdJpmZmTJq1Cjz9xEjRpjycIv+ff/+/XLPPfeYYPvHH380jdS0sRoAAAAAAMGsyOt065zstLQ0eeyxx0yJeOfOnWXatGnu5mpJSUmmo7lFm6D9/PPP8o9//EM6duxo1unWAPyBBx4o2UcCAAAAAECgr9NdFlinGwAAAAAQ9Ot0AwAAAAAA/xF0AwAAAABgE4JuAAAAAABsQtANAAAAAIBNCLoBAAAAALAJQTcAAAAAADYh6AYAAAAAwCYE3QAAAAAA2ISgGwAAAAAAmxB0AwAAAABgE4JuAAAAAABsQtANAAAAAIBNCLoBAAAAALAJQTcAAAAAADYh6AYAAAAAwCYE3QAAAAAA2ISgGwAAAAAAmxB0AwAAAABgE4JuAAAAAABsQtANAAAAAIBNCLoBAAAAALAJQTcAAAAAADYh6AYAAAAAwCYE3QAAAAAA2ISgGwAAAAAAmxB0AwAAAABgE4JuAAAAAABsQtANAAAAAIBNCLoBAAAAALAJQTcAAAAAADYh6AYAAAAAwCYE3QAAAAAA2ISgGwAAAAAAmxB0AwAAAABgE4JuAAAAAABsQtANAAAAAIBNCLoBAAAAALAJQTcAAAAAADYh6AYAAAAAoDwF3ZMmTZLExESJjIyUXr16yYIFC3xe9v3335eQkJA8J70eAAAAAADBrshB99SpU2XMmDEybtw4WbJkiXTq1EkGDx4sqampPq8THR0tu3fvdp+2b99e3O0GAAAAACD4gu4JEybI6NGjZdSoUdK2bVuZPHmyREVFyZQpU3xeR7Pb8fHx7lNcXFxxtxsAAAAAgOAKurOzs2Xx4sUycODAkzcQGmp+nzdvns/rHT58WBo3biwJCQly6aWXyurVqwu9n6ysLMnIyMhzAgAAAAAgqIPuvXv3Sk5OToFMtf6+Z88er9dp1aqVyYJ/99138vHHH0tubq707dtXduzY4fN+xo8fLzExMe6TBusAAAAAAAQa27uX9+nTR0aMGCGdO3eWs846S7755hupU6eOvPnmmz6vM3bsWElPT3efkpOT7d5MAAAAAABKXKWiXDg2NlbCwsIkJSUlz/n6u87V9kflypWlS5cusmnTJp+XiYiIMCcAAAAAACpMpjs8PFy6desmM2bMcJ+n5eL6u2a0/aHl6StXrpR69eoVfWsBAAAAAAjWTLfS5cJGjhwp3bt3l549e8rEiRMlMzPTdDNXWkreoEEDMy9bPfnkk9K7d29p3ry5HDx4UF544QWzZNhNN91U8o8GAAAAAIBADrqHDh0qaWlp8thjj5nmaTpXe9q0ae7maklJSaajueXAgQNmiTG9bM2aNU2mfO7cuWa5MQAAAAAAglmIw+FwSDmnS4ZpF3NtqhYdHV3WmwMAAAAACDAZZRRX2t69HAAAAACAioqgGwAAAAAAmxB0AwAAAABgE4JuAAAAAABsQtANAAAAAIBNCLoBAAAAALAJQTcAAAAAADYh6AYAAAAAwCYE3QAAAAAA2ISgGwAAAAAAmxB0AwAAAABgE4JuAAAAAABsQtANAAAAAIBNCLoBAAAAALAJQTcAAAAAADYh6AYAAAAAwCYE3QAAAAAA2ISgGwAAAAAAmxB0AwAAAABgE4JuAAAAAABsQtANAAAAAIBNCLoBAAAAALAJQTcAAAAAADYh6AYAAAAAwCYE3QAAAAAA2ISgGwAAAAAAmxB0AwAAAABgE4JuAAAAAABsQtANAAAAAIBNCLoBAAAAALAJQTcAAAAAADYh6AYAAAAAwCYE3QAAAAAA2ISgGwAAAAAAmxB0AwAAAABgE4JuAAAAAABsQtANAAAAAIBNCLoBAAAAALAJQTcAAAAAADYh6AYAAAAAoDwF3ZMmTZLExESJjIyUXr16yYIFC/y63ueffy4hISFy2WWXnc7dAgAAAAAQ3EH31KlTZcyYMTJu3DhZsmSJdOrUSQYPHiypqamFXm/btm3yf//3f3LmmWcWZ3sBAAAAAAjeoHvChAkyevRoGTVqlLRt21YmT54sUVFRMmXKFJ/XycnJkeuuu06eeOIJadq06SnvIysrSzIyMvKcAAAAAAAI6qA7OztbFi9eLAMHDjx5A6Gh5vd58+b5vN6TTz4pdevWlRtvvNGv+xk/frzExMS4TwkJCUXZTAAAAAAAAi/o3rt3r8lax8XF5Tlff9+zZ4/X6/zxxx/y7rvvyttvv+33/YwdO1bS09Pdp+Tk5KJsJgAAAAAA5UIlO2/80KFDMnz4cBNwx8bG+n29iIgIcwIAAAAAoMIE3Ro4h4WFSUpKSp7z9ff4+PgCl9+8ebNpoHbxxRe7z8vNzXXecaVKsn79emnWrNnpbz0AAAAAAMFSXh4eHi7dunWTGTNm5Ami9fc+ffoUuHzr1q1l5cqVsmzZMvfpkksukXPOOcf8zFxtAAAAAEAwK3J5uS4XNnLkSOnevbv07NlTJk6cKJmZmaabuRoxYoQ0aNDANEPTdbzbt2+f5/o1atQw/+c/HwAAAAAAqehB99ChQyUtLU0ee+wx0zytc+fOMm3aNHdztaSkJNPRHAAAAACAii7E4XA4pJzTdbp16TDtZB4dHV3WmwMAAAAACDAZZRRXkpIGAAAAAMAmBN0AAAAAANiEoBsAAAAAAJsQdAMAAAAAYBOCbgAAAAAAbELQDQAAAACATQi6AQAAAACwCUE3AAAAAAA2IegGAAAAAMAmBN0AAAAAANiEoBsAAAAAAJsQdAMAAAAAYBOCbgAAAAAAbELQDQAAAACATQi6AQAAAACwCUE3AAAAAAA2IegGAAAAAMAmBN0AAAAAANiEoBsAAAAAAJsQdAMAAAAAYBOCbgAAAAAAbELQDQAAAACATQi6AQAAAACwCUE3AAAAAAA2IegGAAAAAMAmBN0AAAAAANiEoBsAAAAAAJsQdAMAAAAAYBOCbgAAAAAAbELQDQAAAACATQi6AQAAAACwCUE3AAAAAAA2IegGAAAAAMAmBN0AAAAAANiEoBsAAAAAAJsQdAMAAAAAYBOCbgAAAAAAbELQDQAAAACATQi6AQAAAAAoT0H3pEmTJDExUSIjI6VXr16yYMECn5f95ptvpHv37lKjRg2pWrWqdO7cWT766KPibDMAAAAAAMEZdE+dOlXGjBkj48aNkyVLlkinTp1k8ODBkpqa6vXytWrVkocffljmzZsnK1askFGjRpnTzz//XBLbDwAAAABAuRXicDgcRbmCZrZ79Oghr732mvk9NzdXEhIS5K677pIHH3zQr9vo2rWrDBkyRJ566imvf8/KyjInS0ZGhrmP9PR0iY6OLsrmAgAAAAAgGlfGxMSUelxZpEx3dna2LF68WAYOHHjyBkJDze+ayT4Vje9nzJgh69evl/79+/u83Pjx482TYZ004AYAAAAAINAUKejeu3ev5OTkSFxcXJ7z9fc9e/b4vJ6OJFSrVk3Cw8NNhvvVV1+V8847z+flx44da65jnZKTk4uymQAAAAAAlAuVSuNOqlevLsuWLZPDhw+bTLfOCW/atKmcffbZXi8fERFhTgAAAAAAVJigOzY2VsLCwiQlJSXP+fp7fHy8z+tpCXrz5s3Nz9q9fO3ataaE3FfQDQAAAABAhSsv1/Lwbt26mWy1RRup6e99+vTx+3b0Op6N0gAAAAAACEZFLi/X0vCRI0eatbd79uwpEydOlMzMTLMMmBoxYoQ0aNDAZLKV/q+XbdasmQm0f/rpJ7NO9xtvvFHyjwYAAAAAgEAOuocOHSppaWny2GOPmeZpWi4+bdo0d3O1pKQkU05u0YD89ttvlx07dkiVKlWkdevW8vHHH5vbAQAAAAAgmBV5ne6KtJ4aAAAAACA4ZATCOt0AAAAAAMB/BN0AAAAAANiEoBsAAAAAAJsQdAMAAAAAYBOCbgAAAAAAbELQDQAAAACATQi6AQAAAACwCUE3AAAAAAA2IegGAAAAAMAmBN0AAAAAANiEoBsAAAAAAJsQdAMAAAAAYBOCbgAAAAAAbELQDQAAAACATQi6AQAAAACwCUE3AAAAAAA2IegGAAAAAMAmBN0AAAAAANiEoBsAAAAAAJsQdAMAAAAAYBOCbgAAAAAAbELQDQAAAACATQi6AQAAAACwCUE3AAAAAAA2IegGAAAAAMAmBN0AAAAAANiEoBsAAAAAAJsQdAMAAAAAYBOCbgAAAAAAbELQDQAAAACATQi6AQAAAACwCUE3AAAAAAA2IegGAAAAAMAmBN0AAAAAANiEoBsAAAAAAJsQdAMAAAAAYBOCbgAAAAAAbELQDQAAAACATQi6AQAAAAAoT0H3pEmTJDExUSIjI6VXr16yYMECn5d9++235cwzz5SaNWua08CBAwu9PAAAAAAAwaLIQffUqVNlzJgxMm7cOFmyZIl06tRJBg8eLKmpqV4vP2vWLBk2bJjMnDlT5s2bJwkJCTJo0CDZuXNnSWw/AAAAAADlVojD4XAU5Qqa2e7Ro4e89tpr5vfc3FwTSN91113y4IMPnvL6OTk5JuOt1x8xYoRf95mRkSExMTGSnp4u0dHRRdlcAAAAAACkrOLKImW6s7OzZfHixaZE3H0DoaHmd81i++PIkSNy/PhxqVWrls/LZGVlmSfE8wQAAAAAQKApUtC9d+9ek6mOi4vLc77+vmfPHr9u44EHHpD69evnCdzzGz9+vBmBsE6aSQcAAAAAINCUavfyZ599Vj7//HP5z3/+Y5qw+TJ27FiT8rdOycnJpbmZAAAAAACUiEpFuXBsbKyEhYVJSkpKnvP19/j4+EKv++KLL5qge/r06dKxY8dCLxsREWFOAAAAAABUmEx3eHi4dOvWTWbMmOE+Txup6e99+vTxeb3nn39ennrqKZk2bZp07969eFsMAAAAAEAwZrqVLhc2cuRIEzz37NlTJk6cKJmZmTJq1Cjzd+1I3qBBAzMvWz333HPy2GOPyaeffmrW9rbmflerVs2cAAAAAAAIVkUOuocOHSppaWkmkNYAunPnziaDbTVXS0pKMh3NLW+88Ybpen7VVVfluR1d5/vxxx8viccAAAAAAEBwrNNdFlinGwAAAAAQ9Ot0AwAAAAAA/xF0AwAAAABgE4JuAAAAAABsQtANAAAAAIBNCLoBAAAAALAJQTcAAAAAADYh6AYAAAAAwCYBF3QfyT4hSfuOyN7DWWW9KQAAAAAAFKqSBJDuT/8q2aGR5ufwsFD5+R/9pUls1bLeLAAAAAAAAj/Tfex4rvvn7Jxc+WX1njLdHgAAAAAAgibo/vHuM2TVE4PlsYvamt/nbNxb1psEAAAAAEBwBN2Na1eVahGVpH/LWPP7gm375djxnFLfDofDIfuYUw4AAAAACKag29KsTjWJj46U7BO5smDr/lK//9dnbZZuT0+X75fvKvX7BgAAAAAEjoAMukNCQuSMFs5s9x+bSrfEPCfXIR/O22Z+njh9g+TmOkr1/sur4zm5sif9WFlvBgAAAACUKwEZdKszXUF3ac/rnr91n6RkOEvLt6RlyqwNqaV6/+XVk/9dI73Hz5C5m8tmnv3GlEMy5JU5VB8AAAAAKFcCNuju19wZdK/dnSFph0pvfvX3y5xBXWRl51P39u9bpaLTefXfLNlhfv5hxe4y2YYJv26Q1bsyZMIv682cewAAAAAoDwI26I6tFiHt6kebn//0UWKeknFM1u3JkGXJB2Xe5n0yc32qbE47fNr3mXUiR35a6Qwq/3VZB6kUGiLztuyTVTvTpSLTaoPMbGdDu7mlXO6vdhw4Ij+7lo/btu+ICb4BAAAAoDyoJAFM53VrgKVB32VdGuT523+W7pB/TF1e4DoRlUJl2r39pUls1SLf3+z1aZJx7ITERUeY+/t9Y5p8t2yXvPvHVnl5aGcpS7M3pMlfW/bJrf2bSUxU5VK97/+5BiKsoHfnwaPSoEaVUrv/j+ZtF8+p9f9dsUvaN4gptfsHAAAAgKDLdKv+LeqY/+dsTMtTUnzo2HH514/rzM8xVSqbALBZnapSp3qEZJ3IlWd+Wnta9/eda77wxR3rS1hoiNx0RlPz+3+X7zrtJmLr9xySxdsPmP+T9x+R/ZnZciInt0i3oeX1t328WN6YtVmunDzX3E5p0Q7yv65NMT9Xj6xUaOWBHY5kn5DPFiSZn6/o6hx4+WH5bkrMAQAAAJQLAZ3p7ta4pslcpx7Kko2ph6VlXHX3kl57D2eZbPbP9/aX8ErOsYVNqYdk8MQ58uuaFBMYWvPC/XE464RMX+MMLi/t7AzuOjSMkV5Nasn8rfvl/bnb5MELWvt9e1v3ZspTP6yR39YVbMRWpXKYCSCv75soLVyPqTCTZm6SI67y7k2ph+Xy1+fKlOu7S8eGNcRu2jjt0LETptz/6u4NTeCvpfzXdE+Q0vDNkp2m+qBx7Sh56tL28vOqPSbTvjT5oHRtVLNUtgEAAAAAgjLTHVk5THo2qZWni7lmed+d42xu9vCFbdwBt2pet7oM793Y/KwBry7/5a9fVu8xWfKmsVWlfQPnXHJ105nObPen87dLZtYJd2OxrxbvkBveXyj/mLpMPpm/3XTX1uXFNHgf/7+1Mujl2Sbg1nnhCbWqSO2q4e7mbEeP58gn85PkvJd/l+HvzpcZa1N8Lk2mj1dvX710dSdpHV/dDDgMffMvcz27TVvlnEt9fvs4OdM1iKEDGqWRadb70MEONbJPolSNqCQD28a5s912Zvd1br8+v5ppBwAAAICgzHRbJeYacGuJ+Y1nNDEBbXZOrvRrXlsGtKlb4PL3DGgh/1m6U9btOSRfLEqWYT0b+XU/OndbXdK5vlkn3DKgdV2TUdfM9SszNprAXDt5a/bVovenakRVltCQEFNCrs5uVUcevaitNKtTzX1ZHQhYYDLnW01G3vnY9pqs/rsju0uNqPA82/Xy9A1yPMchZzSPlSu7NZRB7eLk9k+WmOuM/nCRvHRNJ7m8S0Oxg5bBWw3MLmhfT7p6VB5owzod5LCTPkbN7FeLqGSy7OqijvXNvtKg+JEhbSQ09OS+Ki7dN98v3ykv/bJBdhw4as7TQZ3eTWvLOa3qyDmt6kriafQKAAAAABC8AjrTbTVTU/O37DcZ1p9W7hGNsx4Z0jZPcGypWTXcBN7qxZ/XS8ax46e8D80c/+Gap3xJp/p5/qZB3Q1nNDE/v/n7FpN51YC7Yc0qMua8lnL3gBbSp2ltk8U+eOS4Cbg1SNfy7/dH9cwTcCudK96nWW15c3h3mX3fOXJz/6YmqNR539e+9ZekHjo5d1zngVsB/X2DW5n/q0dWlinX95Brujc0zcWe+mGtybzbQQcHDhw5LjWjKpsye6086J7oLOn+c9M+sdt7fzorGq7q1tA8btW/ZayZW74n45gs2n4gz+XTjx6XN2dvNoF6UTPqmtXWdcC1OZ8G3NofQPexZr1/35AmT/x3jZz94qzT7hcAAAAAIDgFfKZby6l1PrEGxnd+usScd23PRtKm3skS8PyG92ksH8/fLlvSMs186LEXtCn0PjRrqlnOjg1jpGm+IFld1bWhCeZ2px+TgW3qyt96NTal1p5Z1uM5uabT+v7MLDmjeZ08Ze++JNSKkocubCNXdm0of393vsnOa9n4xzf1Ms3hXjRrUmuWOV46JZycv105LFSeubyD/LFxr+xKPyY/rthtsuAl7X+u0vJBbeOlUpjz8fRtFmsCbh0AGdk3UeyyJe2wzFyfJjquonPfLRGVwmRwu3hT3q8N7qzpBzrwMPqDRbJg2355e85W+f7OflLfzw7rD/1npXy2INn8HB1ZSW49u5mM6tvEDKRoRl+nCcxcl2aWj3vr9y1mfvl1vZzTGAAAAABUbAGf6dZs9pmubLdmXatHVDIZ5sJoUKqlx+q9P7bJ9n2ZPi+rwdrXS3Z6zXJbqoSHmWXIljxynslQn9WyToGyZr3Pzgk15NzWcX4F3J5axVeXL2/pYwJtLWO/+o258vXiHab8XO/mn4OcWW5PGgT/vY8z8Ptg3rYSn2Otc8ynuUrLz+8Q7z7fak6ny5cVZc58Ucvap7iy3N5Kui/qWM/8/79Vu81ldVv/+cVyE3ArHaC55aPFflUAaDZfA259nm89q5nMuf9cuf3s5maf62tPS+hv7t9MPru5t7vaYNx3q00zOQAAAAAI+KBb6Xxmy53nNjeZ71PRYE2DdZ3/fdMHi8x87IXb9ptyYQ0WNUt8/1fLpce/psvy5IMmo3qxj6BbaQm4netja2D51W19pGmdqiZ7/c8vnWuQX90tQZrXLZh9V9f2aGQC/BU70k0371PZnX5Uvl++SybP3nzKZccWJx0wS5VpKXe/Zief//b1o815WmK/ame6lIRlyQfN/PSLXp1j9kfLR/4nH//lXCZsVL+C2XQN/LXkfe/hbNNZXku+f1y5WyqHhcgLV3WUWlXDZeXOdLn/qxWFDkZosP7kD6vNz0N7NDLd6Qvbx7ef3cwMzJzIdchtnyyWpH2nt3Sbvv5Y8gwAAAAIDgFfXm41JNP1uOvFRMr1XoIwbzRLqU3MLpv0p1lubMKvG0R+dS7XFRUeJvtczc5UfHSkyZ7HRUdKWaoXU0W+uKWPDH93gazdnWEC6nsGOuene6PBpQaBWmr9wdxtXpfQmrku1QTaOuBgNQdTr8/cJBOu6ezuBp7f/1Y6s9zntcmbudcMe68mtWX62hT5c/PePGXvp0MD3we+WiHrUw4VmPt+buu6eQZcPKsKzm9fz6zf/eA3KyR5v/NxvXh1J7Pcm5bt//2d+eZx6zSE285u5vW+v1qyQ1btzDDVE/8cVHj1hPWaev6qjrJtX6YZ6Ljpw4Xy9W193fPN/aEd8K98Y64Z/HllWBdp3yDG7+sCAAAAKH9CHAGQUsvIyJCYmBhJT0+X6Gjvc7W1IVrl0FBT9lsUuqazzsn9a/M+UxJtBdvaafzCDvXk0k71pUdirRLtgl1c6UeOyyu/bZQeiTVNcFkYzTZf9OofJsv754PnSt3qJwcOpq3aLbd+7JwHr/QhtqsfYzK1GtSrO85pJmPOa2WCXM9MbP/nZ5rn7q3h3WRQu5Pl5VaDM20spgGxzj8v7pJkt3682AS+E4Z2NgMrdaMjpHbViDzblN/cTXvlb+/Md//+wPmt8wTXH/21XR79dpWpYJgysoec0zpvp3td2u2cF2eZbL4uPTe6v3NpOH/sST8ml7z2h+nirt3t3xrRvdBt9fTqjI3ykg4AmfnpoSaIt9aFBwAAAGBvXGmHoMh0q+giZBM96TxpXbtbTzr+sCHlsBw4km2ywkWde11atMRZs/T+0EypLjem3c8/m5/szoyv2ZVhOnErLZsf2j1BOjeqYcrkNcuqJdnaiX3SzM2yNOmgPHdlRxOI6zxyHaTQwQmtCOjfsk6B+7TmdWv2POtEjmludjp0f7w2c6P5WZuynecj6+5Nr6a1pW71CBP46r699ay8QbOep4/n0/lJcvdnS2WsNqzr1sC9rZrp14A7sXZUkRvCxcdEmkB76JvzZMa6VJk4fYPXeff5aWd7bcSmWtStZiow7vl8mWnAp4MG/gbuAAAAAMqP8hlVlhEtD9amZbrucnkNuE/HCFdDtU/mbzcB9b7DWWaO9NHjOWZe+8vXdDJLr2nArfSxP35JO1PerIH13M375MznZ8rNHy2WLxfvMAG3dvH+v0GtzDJh+WnAqEtq6ZrlS7afei65L7PWp5nybt0Ga1k2f2mA+ubwbvL0Ze3NY/G2fNzjF7czS50dyjphOpRr9v7t37fIuj0Z8s4fzkZtDw9pe1qvBW2a9+yVHczPr/62SX5bl3LK67wxa5PZlrb1ouV/95xp5ogrDcSvf2+BrNyRbrrgAwAAAAgcQVNeDt800O733G8mczvhmk7y+cJk05Vbs7jf3tFPakSF+7zuxpRDprx7c1qmqQrQbPOgtnHSo0ktM3fal3s+XyrfLdsld53bvNAs766DR+VIdk6BZnD6srzijbkmy65rlevSaXbQDuafzE8ywbau7e2pX/Pa8vGNvbwG7P7SEnYtZdeeAz/cdYaZT+7redB1vnVfvT+qh5zdylnu/sOKXXLflyvMAInSZco6NqghXRrXkLNa1JG+Xua0AwAAACg/cSVBdwWhJc4Tp2+U8LBQ07Fds9rf3tHXLHl1KloivuvgMROk+xuAfrEwWe7/eoU0q1NVPrqxV4E1sfVl9/H8JHn6hzUme6tB9Y1nNHHfvq7zfd0788285jkPnJNnLrod9DF+u3SnTJ69xSzLppXcP91zprSOjy727V7z5l+mA377BtHy1a19vVYHaLO4qYuSTeb985t753medSqArsmu5fqHjp3Ic72vb+sj3Ro71yIHAAAA4BtBdyEIuosv9dAx6ffsb3I8x2Gah707srtZM9y2+8s4ZhqRZWbnmI7wWiqtzcg04Dx4JFse+HqF/Lw6b8n1tT0S5MlL25ty7mvfmid/bdkv1/dNNOXhpUWbxM1anyrRVSqbBnolQRvOXfTKHLOO/LCeCTL+io55/r4p9bAMenm26LLm2u1c5+D76uS+Ze9hU7L/xaJkWbT9gAzpUE8mXde1RLYTAAAACGYZZRRXBs/EZRRKM8VXdGloftamXHYG3Ob+oiPli1v7mA7rWhqtHbkHTpgt78zZIhf+e44JuLWj+iND2piTZpa17H34u/Pll9V7TMCtf9fS8tKkc8EHtIkrsYBbaVn+v6/tYgY7PluQLO/+sdUMgljjXS/9st4E3Fq67yvgVtpBXysTrumRIE9f3t6cN231HlOaDgAAAKB8ItNdgWip884DR6Vpnbzzp+2kL6//rtgtz/y4Ns+caS1Vf3VYV+nQ0LkOtTYau/uzZWapLsuwno1k/BXOZmTBwHM5MKUl/o1qRcma3RkmIP/53v7SMu7U5f6WYW/9JfO27DNLoelACgAAAADfyHTDdrocVmkG3ErnJl/Sqb789n9nmaZq2vX8yq4N5Ye7z3QH3Eoz79/c3lcSalVxZ5yt7t3B4o5zmpvMvT5GDbJ1gEEDbqVVCEUJuNX1/ZxLmX22IMk0hAMAAABQ/pDpRqnSl1thzdh0ObOXp28wHbq1jDqYqw6S9x+RrXuPyP7MLLmoY32p6lqyrSjzz896YabsOHBUnruygwzt0ci27QUAAAACXQaN1Hwj6Aa806XO/vXTWmkdX92s7V2c5c0AAACAYJZBeTmAorqme4LpDr9uzyHTfA4AAABA+ULQDQSwmKjKcmW3Bubn9+duLevNAQAAAFASQfekSZMkMTFRIiMjpVevXrJgwQKfl129erVceeWV5vJa+jpx4sTTuUsAPozs42yo9uuaFDNPHAAAAEAAB91Tp06VMWPGyLhx42TJkiXSqVMnGTx4sKSmpnq9/JEjR6Rp06by7LPPSnx8fElsMwAPLeKqy5ktYs1a3x/9tb2sNwcAAABAcYLuCRMmyOjRo2XUqFHStm1bmTx5skRFRcmUKVO8Xr5Hjx7ywgsvyLXXXisRERF+3UdWVpaZ5O55AuDb9X2d2e5P5ydJisd66AAAAAACKOjOzs6WxYsXy8CBA0/eQGio+X3evHkltlHjx483XeWsU0JC8C4dBZSEc1rVlU4JNcza30/+sKasNwcAAADA6QTde/fulZycHImLi8tzvv6+Z88eKSljx441bdytU3JycondNhCMQkND5F+XtZfQEJEfV+yWWeu9T/cAAAAAULrKZfdyLUPXddM8TwAK175BjIzq18T8/Nh3q+XY8Zyy3iQAAACgwitS0B0bGythYWGSkpKS53z9nSZpQNn7x3ktpV5MpCTtPyKv/baprDcHAAAAqPCKFHSHh4dLt27dZMaMGe7zcnNzze99+vSxY/sAFEG1iEoy7uJ25uc3f98sm1IPuf+Wm+uQHQeOkAEHAAAASlGlol5BlwsbOXKkdO/eXXr27GnW3c7MzDTdzNWIESOkQYMGphma1XxtzZo17p937twpy5Ytk2rVqknz5s1L+vEAFd7gdnEyoHVdmbEuVcZ8sVw6J9SQtbszZO3uQ6bRWocGMfL9nf0kJCSkrDcVAAAACHpFDrqHDh0qaWlp8thjj5nmaZ07d5Zp06a5m6slJSWZjuaWXbt2SZcuXdy/v/jii+Z01llnyaxZs0rqcQBw0WD6iUvbydzN+2TFjnRz8rRyZ7psTjsszetWL7NtBAAAACqKEIfD4ZByTtfp1qXDtJM5TdUA//ywYpf8Z8lOaVa3mrSpV13a1ouRp35YI39s2isPX9hGRvdvWtabWKHl5Dok+0SuZJ3IkajwShJeqVz2tQQAAAgaGWUUVxY50w0gMFzUsb45eRrQpq4JumeuTyXoLmWHjh2Xl3/dKF8tTpbM7BwTdFuqR1SSW89uJjee0UQiK4eV6XYCAACgZJFaASqQc1rVNf8v3LbfBIGwnxYT/bRytwycMFum/LlVMo6dyBNwq0NZJ+SFn9fLOS/Oki8XJRf4u12S9x+RS1/7Q/qMnyEv/7pB9qQfK5X7BQAAqEgoLwcqGA3stu7NlMl/7ybnt2epP7uD2ke/WyWz1qeZ3xvXjpJxF7eVdvVjJDws1JSUVw4LNUG5Bt07Dx41l2sdX11uOKOJDGwTJ7WqhtuybXM2psldny2Vg0dODr6EhYbIoLZxMrx3Y+nTrDbN9gAAQFDJKKO4kqAbqGCe+O9qee/PbXJtjwR59sqOZb05Qetodo6c9cJMST2UZQJsLR+//exmPsvHdSm3D+dtM+urazZchYaI9EisJYPaxcuFHeKlXkyVYm+XfuS/PWeLPPu/daIJ9U4JNeTvvRrJl4t2yIJt+/N0wX9zePdi3x8AAEB5QdBdCIJuoOT8viFNRkxZIHHREfLX2AEFspkncnLN/5XCmH1SHNPXpMhNHy4yz/Nno3tL0zrV/Lregcxs+eiv7TJt1R5ZszvDfX5UeJh8fVtfaVPv9D8DNbC//6sV8v3yXeb3a7o3lCcvbe8eCFi3J0M+mLtNPluQLJVCQ2T90xeY7DcAAEAwyCijuJKjaqCC6dmkllSpHCYpGVlm7W5POpf4b2/Plz7P/sac72LSddLV+e3i/Q64Vc2q4XL3gBby0z1nypz7z5HHLmprys2PZOfIfV8tl+OuQZGi0vFVK+DWgPqpS9vJc1d2zJN5bx0fLU9f1sEE2idyHZJ2KOu07gsAAAAnEXQDFYwGWf2a1zY/axdzT18vdpYYa7C1etfJLCuKHuDOdAXd57aJO+3bSagVZeZ2f3hjT4mpUllW7cyQt37fclq3pY3SrIB7yvU9ZHifRK9ztjXgjo+OND/vPHjktLcdAAAATgTdQAV0tquL+SyPoFvnIE/4dUOeJmA4PVoWvifjmCkJ79WkVrFvr271SNOATf17+kbZmJK3QuFUdDDlld82mZ+fuaKD9G9Zp9DLN6jpnDu+44CzsRsAAABOH0E3UAGd3coZdC3efkDSXd2r35u71QSKlmQCrtP221rnYEa/5rEltu725V0ayLmt60p2Tq7c99UKv5cV+2vLPnnwmxXm59vObibXdE845XUa1nAG3bsOsoQYAABAcRF0AxVQw5pR0jKumule/fvGNNO8641Zm83f2roade0g0+2TzquesTZFsk7kFDqfe0BrZ0VBSdBS8H9d3l6qR1SSZckH5d0/Tl1mvjntsNzy0WI5nuOQIR3qyX2DWvl1X/VdQXd5KS9ftTNd7vh0ify8ek9ZbwoAAECREXQDFdQ5rhJzndf92sxNcujYCRNw33JWU3N+EkG3T8/9b53c+MEieeK/awr8be/hLFm+46D5+ZwSDLqVLhn2yEVtzM8v/bJBliYdKJDx1oEAnU/+4Ncr5Mo35kr60ePSOaGGvHRNJwn1sxO5VV5eHjLdOs3h+vcWyI8rdpsBhDs+WUKDNwAAEFAqlfUGACi7ed1v/r7FLG117LizI/aDF7SW6CqVzc/JBwi6vUnNOGaW9FJfLEyW285qZhqeWWatTxNdiLF9g2iJczUkK0laHv7Dit0yZ+Neufz1uWYN8Ma1o6RpnaqmCdrs9WmSmX0yA6/nvz2ie5HK3N2Z7kKmGOjyY7kOh0SF2/c1knHsuNz4wULZezhb6sdESsqhLPlx5W75Y9NeefSitnJl1wZem8EBAACUJ2S6gQqqe2JNqRZRSTKOnTDzhM9oHmsabCW4spy6pJgGVshLu4dnnXAOUuiyWq+7yvItv61LMf+f2/r0u5YXRoPM56/qKH2a1paISqFm321MPSw/r06Rn1buMQG3rg0+vHdj+ejGnvLzvf2lTvWIIt1HA/ecbu9Bt74uznlxlpw/cY67J4AdJfya1d6Qctg8nq9v7yvf3dFP2tWPNtn7//tyudz0wSJeowAAoNwj0w1UUJXDQuXMFrHyv1V73FluVatquFQNDzPB286DR6VZEdaYDgbb9maa8vDz28dLRKW82WEta/54vjPLffe5zU1H8C8XJcsd5zQz8+SzT+TK7xv2lvh8bm9l5p/d3Ftycx1mH23ZmymbUw9LZtYJOaNFrHRqWMPvUvLCgu5DWSdMgKvLlXnalHpYdqc7S8+f/nGNvHB1JynpJdfGfb/aZPN1Tfl3R/Ywj1lP397RT96Zs1Venr7BzJ2/+7Ol8sbfu5ksPwAAQHlEphuowC7tXN/8f3W3htK+QYw7k2qVS1eUed0avP6+IU1ueH+hnPPSLLnn82Uy5ovlJvjz9M6cLaYUv1NCDfnHeS1NdYBmuyfNdGa7F23bL4ezTkhstQjp4Ho+7aSBte6rs1rWMet53zWghXRpVLNYAbeqEh5mBl98lZhr0G35cvEOmbMxTUrSu39slU/nJ4lWjv/72s7u16Y1WKRd2D+8oaeEVwqVX9akyCPfriqwrwAAAMoLgm6gAju/fT2ZPuYsGX9Fhzzna9Y2kDqYa8D10i/r5a7PlsqJnNwiXe+LRcky8OXZMmLKAvltXaqZj60xqzbuemP2ydLxfYez5MN5ziz3PQOam8GJewa2ML9rtnvHgSPuruXntKpT7MC3rBVWYm4F3Rr0qrHfrDRZ9pKgt/2vn9aanx++sI0Mahfv9XK9m9aWV67tbALzzxYkycsea8yXFzqQo03gkvYFxvsIAADYg6AbqOCa160mlcLyfhQ0cmW6A2Wt7m+X7ZRXf9sk/12+S5YmOzuHn4rOBdZs9v1frZAtaZlmfvv1fRPlt3+eJU9d1t5c5oWf15tO4OqdP7bK0eM5JoNtdX7vkVhL+jWv7Z7brUG7GtDGvtLy0lK/hrMJnJav+wq67zqnuQnOdxw4ap4rf57z8T+tNUuA+TJ/6z4z8NGzSS258Ywmpxw0eupS577SUv8P522T8kK7ruucdG2sZ01JAAAAFRNBN4ACEmpVcQcO5Z1mmB/7drX79/V7Dp3yOpq9vXryPPnP0p1mLvB9g1vJXw8NkMcvaSdN61ST63o1lmE9G5ng7+7Pl8ri7Qfkw7nOgO7uAS3ydMy+Z0BL8//UhcmydW+mVA4LkTNa1JFA16BGlO9Md5oz6O6YUMNdJfHBvG2yePv+Qm/zq8U7TMf8f/3ozGR7s2ZXhvm/a6OafnUm/3vvxnKvq+JA54FPW7Vbypo2gdPXjc6JV0u2HyjrTQIAAGWIoBtAAQk1A2NOt65RrdlqK7hRG1IKD7oXbN0vl7z2h6zcmS41oyrLRzf0lDvOaW4y3Z6euKSddG9c06xfPvTNeaaxnK5jPjBfFlszsprtttbL7tWkdoHbCuRM9458QbcGlNpszqqS0I73V3VraAYotGqgsG7ia3Y7A+q1ezJ8zsG2LtO2frTf23rPgBZyXS/nIImuX17W/j19oyxNOiiRlZ1fsSt2ppv10wEUpJ8Fy5IPmkaUABCsCLoBFGA1UivvmW5dvkuDaO22rhnoU2W6p63aI397+y+z7nObetHy/Z1nSN/msV4vq/OVX/97V4mPjjTl496y3Pmz3epcG7uWl6aGrqXj8jdS277viHk+osLDzNrZ6pEhbUzzuM1pmfLm7C0+b3OdK6A+eOS4pB7KKvB3HbhYt9u5/3SAw1+e8+s1C38ku2Tml5+OuZv3yqRZm8zPL17dyTSk02BitSuDDyAv7atx2aQ/5bXfNpb1pgCAbQi6AfgsL9c1vO1ah7m4dF7whF+d84jHXdxOBrWNc2e6fWVRJ83cZALGCzvEy9e39XEPLvhSt3qkvDm8m8lcd2tc030f+Wm2++JO9U3gOaRjPQkGvsrLrfncupScNQBRIyrcveTcTyt3++wQr2tuW9Z5GRzZti/TzJvXDHGT2KpF2l7dV3WrR5hs91pXcF/a9mdmyz+mLjPbMLR7glzUsb4pk1eUmAPezVznXP1g5vqSXQUBAMoTgm4ABUSFV5LYas4lo5IPlL9st5Yw3zt1mRzPccjgdnFydfeGptRZG4YfOHJc0g4XzKIezc5xB2OPDGlrHqM/dHmweWPPlc9G9y60I7l20l748ACJi3Zmf4OlvFwz0p6l0Ztd87n1+fbUv4WzYmBD6iGzbFp+2pDN8/wNXoJuaz536/jo01p321qmbdXO0g+6daBHy+tTMrKkaZ2qMu6Stub87onOoFv7AgAo+L5ZkuR8b+jns35OA0AwIugG4JW1bFh5LDHXdZw141qneoSMv6KjybhGVg6TxNpVfZaY6xxuzXLHRUdIPVdZtL+qR1Z2L4/li26DP42/AoWWRVtzkvekHyuQ6c4fdNeNjjTl5prlXbmjYHfy/Nlnb5nu05nP7amdO+j23R3dLr+uSZHpa1MkPCxUXh3WxT2ooxUSatH2A6wlDuSzO/2Ye6qJfj7r5zQABCOCbgCFz+suh5nu2a4yRG2gpcGhpWVcdZ9Bt5VN8bcrdkWnz1H9GgXndXuWl3urClDLdxRcts0KsmtEVTb/r0/J8JnpLsp8bk/tXcH6qjKYP/3Hpr3m/2E9E6RdfWfwb2XftaN92qEss7QagJO04aC3z2kAeR08ki03vr9QPipHS2OiaAi6AXjVyL1s2NFyV1qunW5Vv3xN0FrGV/fZwXyp62CuSyNnYIhT0zW4Pdfq1nnZvjLdeYJuL2ulr9vjDISHdHDOed+Yctjd8b2kMt3tXZnujSmHCu2ibgerfLxnk9p5ztcKDCsIp8QcyGtZsvM9EeGqJLI+pwEUrPCbsS5VXvp1g/kuRuAh6AYQUMuGrdiRLtk5uaZpWWLtvI3QWlmZbo+GXSfnDToDQauxFYrQwdwVdO9KP2oanVUKDZHG+Z571dkVdFuDIt4y3ee1jZMqlcMk60SuaZxmST10zGSDtQihtWvwpKh02oBWPmiZ6qmWjitJmVkn3OXzVjm5J+s8gm7Ae6b7iq4NzP/6Oc00DKDgd8yH87a7V//wNj3LF82M3/rRYnMbKFsE3QACqrx8wdZ95v9eTWoVKBNvFV/Nnen0HAnWoFEDOg0WrWwoTq1+TN7ycivLnRhbVSqHFfz60FJq7X+m8zRTMk7OA9fmSNba3prFbhlXrcA0gLWupcK0a7m/Te7y09dDO6vEvBSbqekgg77ctDIg3ku/AIJuoKDjObnuOdzDeyeaz2f9nLYG+QCcXFYv/ejJlWTmbXEeB/nzHntu2nqZtnqP/LBil41bCH8QdAMoNNOt81DLUynTgm3OwKWHqyu0p8a1q5pGVkeyc/IcuFlZbg3ItNwX/mngynRrhlu5S8u9zOdWVSMqSYu61QuUmG9MPWSC0tpVw6VOtQhp5cpke47WF3c+t8UaVCnNhkxWMO0ty+15vpbYe+vsDlRE63YfMhUvMVUqS5t61d3TSvLP8wYqMg2c35mz1fzcwjWt6y8/g259L1nfOdPXptq4lfAHQTcAr+rViDTLNmWfyPW6BFdZOJGTK4u37fc6d1Zp9lWXa8of0J2cz01peVHkb6Tma7mwU5WY68G1al2vuslGt4qPLrBsWHHnc1vau+ZPr95VfoJuXUZOs+A68OBtvjtQES11zefWzwz9XOji+uygmRpw0k8rd5skgi7j+vRl7c1587fsK9ATxZs5G51NZ9UfG/eWeq+TsrBuT4b8ti5FyiOCbgBeaQBrLa1VXuZ1a2CWmZ0j1SMrubOl+VnzgT3n9FqZbpqonV4jtV3px/I0UWvhKg/3xlsH87WuJmqt4qLzzb33zHSnl1CmO9od6GuGwG76vFhBgq+g2/NvlJgDkiejbX0ud3W9R8h0A07a32Dy7C3m5+v7JprvkWoRlSTj2Mk+IoX5fcPJoFv7sczb7F+GPFBln8iVv7+zQG54f5HMXF/+MvsE3QBOWWJeXtbqXrDVmeXukVjLZOG9sTqYW/OFdWTXCuhoolY0Oj9Zn2b9ItubmVXocmGWTgnOTPOK5HT3tARrX2imW1kDJtpITed7H8k+IVs85nwXR6NaUWZQRpvtaYd0u21KOyyHjp0wzeEKawDX3TUdgqAbyFuBZFXHdEmo6a5SqQgZOcCfpSg1uI4KD5O/924slcJCpWeTWn6VmO/PzJYVrmlW2sBUTV9bPjPAJUUz3HtdlZnPT1tfrqZGKoJuAD4llLNlw6yg2/rS8cbKolqZbj2AO57jMKVZVjdu+F/toKXRatXOdDlw5LjpLl5Y0K3Pf2TlUDmU5QykdaTeGpFv4yorr1M9wszv1ibFOt9bg3L9WTvS161esBHZaTdTK4UScyuI1sBBD4h8sQZ8NCte3g4EgNJ2IDNbtu07kifo1u8b/ZzWz+vVrh4PQCDRQPezBUnm9V0S3nRluYf2SJAaUeHm595Nncc/p8pa/7lpr/le1cHgv/VsZM6bsTY1qFcH+HLRDvfPetzx33LWPI6gG0ChWcPyUl6uXxQLt53MdPvS0hV06/xjLS8+WcJYs0C3c/hfYj57fZr79yrhvpvRaeCpXcyted3ajViDdc2Ye5alezZTK6n53AXmdZdCM7VFrsZ+VibbFz3w0WyFZsU1Ow5UZFbPB+3BYQUT+vnc2ZXtZr1uBBo9Prnw33Nk7Dcr5aYPF/k157owOtCtmW6t6rvxjCbu8/s0jXUnIQq7D6u0/MwWsdKnWW1TjbUn41jQDmilHjoms1yP+YouziUIX/plg6nUKy9Ob10WABVCcZYN0wzg7Z8slvBKoSZQ06ZcDWtUMctNaWZDl4YqShCspc0avGkW1QrqvNH7qhoeZuZ+6zJV1nxb5nMXo5na9gPy+8a9p2yiZunUsIYs3HbANA3TrLbS/e7ZOV6D7rmb95kst1VKWtz53Pk7mK8qhYML6/VlzUctbDBCX/f6mPW9YQ0OAXbRA/JZ61NNueVV3RJ8TskpC+7mlq4g29K1cQ1TAsu8bngLar9ZslPGnNfS/b3ij8e/X21eU3qd+OhIU72lVW9XdG0otao6B3yKQyuX3pi9WSb8usEdBOtn/IfztsmofieD5aJ663dnlvuijvWkoWuqnzU4rVOodABXK/k6NqzhNUnxu6uJWv+Wdcx3rwbfv6xJMc9FMC6d+u3Sneb512O9py9vb45ZNGE0dWGSDO+TKOUBQTcAn6wP+h1FzHRrhvmBr1dISkaWz/L0mlGVTfa5a6MacmW3hlLPtSa0LwtcWW49SNNA3pfQ0BBpEVfdZFK0UZd18MZ87uItG7bVNefa13JhvpqpWSX9Vmm5xZr/rEF3ZvaJks10u5qp6TJk+iVsV7Cx73CW+3npmi948Eab4FhB9zBXuV9RmunowJO+9iMqhZr/oyMryTU9Eopdko/gsjv9qExdmGxOu9OPmfNSM7LkrgEtpLxY6sp0d843GNqlmJluq3SWqqbgohVTN3+4yAy8b9+XKR/d2Muvz3Xt2P3+3G3u5U89fTBvm7w/qmeh06VORQe0xnyx3J1VvqxzfWlTL1rG/2+dmVM8sE2cO3lRFPrd9ePK3ebnm/s3zfM3fdy9mtQyS4DpvG5vQffG1MPm+Eu/K6zKQN0WDbq1xPzegS0lmDgcDndp+dXdEiQqvJLcM6C5PPrdavn3jE3mGFPPK2tlvwUAyv2c7t0Zx0yJTmHBrqcpf2w1AYLO231lWBfzhalLXuhJl4nS5h765fnbulRz+uiv7fLj3WeaOb3Fmc/tOa9Yg+5Z69PMQad+SXVsGHwju6VZXm7xJ9NtzdHUOVVWM778TcasZcN0eY/MrJLNdDeJrWZK6bRb69a9h6W5a+3wkmZ1xde1U2OiKp/y8lY23CoL9Hcw4OP5SfLctHVe//btsl3y3R39zBrpqNhSM47Jo9+tkl/XpJjl6ZR2OtZ1ev89Y6Oc07puuchwaWbQKi+3lgnzbMSobwtdMWFP+jHTzLEogw2j3ltoAo0PbujpLltH4AdUY79ZYY4ZlA5cvvn7Zrn97OanXGL0qR/WmJ+v6tZQBrapa15TezKyzDJcmgW94vW58s7I7oVOWfNF521f9cZc05tAK/CevKS9XN29oZlHPWNdqvmc11Lzj27sWaRBIG0setdnS8x3xOB2cdLONV3KU++mtU3QrfO6b+7frMDfrUGAXk1ruyvM9P2vm7FyZ7qkZBxz92sJBst3pJuBBn3vX9SpnjlvaI9G8vacrWY/v/fnNrnjnMJfL6WBOd0AfKpTLcJ8meiXiAbM/h746AGeevCC1tKveaxc1qWB+cB75vIO8tVtfWXV44Pl2zv6yWMXtZXE2lFmRPauT5eaL0lfX7pW0K0jvKdidTD/ccVuj/m0BCWlFXRrdlsHXLQh0q+ubqmt8wXUGqiqvYezTXCsrzOdclASNJi1suardmaU2frc+Wm1hQ4G6EHAY9+t8quhjQ5e/etH54HjNd0bmtLKO85pJqPPbCJ1q0eYvz/6rX+3heClUzRGf7RYfl7tDLh1cPLf13aWRY8MNAfuJ3Id8s8vlkvWibLvCr5lr7Pjv77n8w/G6ed0a9eAXFGy3RoAjXh3gekRoQfgd3y6pFSWDAwWGuCV1+fry8U7TIAZHhYqt7iyvhN+2eAeuPHl84XJptqtRlRleWRIGzm/fT25vl8Tc1zyze19zeBw+tHjct078+WHIjbc0iTELR8vNgG3fkd+f+cZpupIg2uttnvuyo4mANQ52V8sSi7SbT/53zWyOS3TfL6Pv6Kj18to0K10Gpe346bZrqC7fwvn/G+l5fU69UtptjuYfLXY+Ryf3z5eoiOdA+CaJPrnIGdGf/KszSXW3K44CLoB+KRfIEVdNuzpH9bKkewcE4hc2bWh18voh6F+4d1wRhMzyqwNpuZt2WfmRHmjZWGasa4UGmJK0k/F6mCuwZxiPnfxy8uLEnTr68YqMbeamOQ/uNbMrNWoz/n36BItA2/vDrrta6a2ZLt/87ktMVUqy0vXdDLZhk/mJ8lrv20q9PL63N07dakcO55r5uM9e0VHuXtAC7lvcGt5eEhbeXVYF/OcfbN0pyklRsWkAy6PfLvK9FDQAOPHu8+QL27pI5d2bmCyXDrYqYNgGoD4+owtTVaFSMcG3jv+67xu5+UO+J0ZvOGDhSbTFRcdYb5P/ty0z53l9KRVV/+YukxGvbdAdvk5kBzs5m7eK/2fnyl9n/3NHayVFzsOHDFBqBozqKUJmId0rGcGke7+bKkcOubMfuenwbT1Wv/HwJYFqh60qu6z0b3NUlr6OXvnp0vlzdmb/Rq81Ms8/J+VJhFQPaKSvDeqR4EeHTqA/H+DWpmfn/5xrcks++O/y3eZwQL9jph4bWefc861hF2nF2kVS/7eJToAZyUpzmpZJ8/frKXDZgTR0mHHjufI98t2uUvLPV3c0Vnur6upWMmgskTQDaDEmqnN2Zhm5iFp7PTUpe3NiO+paOmvjgqr12dtll9W7ylwGesLpEPDmEI7Z+fvjG1hPncxG6m56HI+/pZsWiXmVomrt+XaPPdTSc3ntrRzN1OzJ+jWAzWds16UTLe6sEM9eeKSdubnl37dIJ8vSPJ52X/P2GAy9RpIvXh1pwLvJy0dtEbyx32/2swDRMXzwdxt8tXiHeZz97VhXQuUo9auFiHPXNHB3Zxpkas/Rllxl5b7GAw9Oa/7oF/vw1s/XmIuq4NaH9/YSyYO7WyClg/nbTdTlyxa+TTo5dnyn6U7Zeb6NLn41T9k/inWOi4PdMD7nTlb5Pr3Fpiql3RXmXVxadWD3p5merWSTQckRk5ZIM/8tLZcdHzWaQj/9+VyE1h2b1xTRp/Z1Azo6iCSZpe1Ymjcd6u9Xve13zaa5bt0kPhvvbz3z9Bjicl/7yYj+zQ2v+s87Esn/Skz1xW+rNabv28x2Xd9v736ty4+m2JqUkEHn7Wq4+H/nLoaSffzQ9+sND/fcXZz6dvsZJY6PzOv25Xtzr90mB4vZZ3INU3j8g+SD2hT1/yvGfij2WVf9VISdJ56xrETUj8mUvo2cz4nFv3OvP985+CHzu3X11NZPu7TCronTZokiYmJEhkZKb169ZIFCxYUevkvv/xSWrdubS7foUMH+emnn053ewGUsoSa/q3VrV/g1hfgiD6JRQqiLu5UX0b1c3aX/OeXy03XcU/WUmE9/Zx3pcGh5wixP9lxeKcBsx7MqqI0nLEy3VZw7W1Om2f2u6TmcxdcNiyjRNbFzr80i3aN1QMbbQjYtIhl8fr+uNM1v+yh/6yU6WsKZh30wEkHoZQeZPqaf3dr/2ZyTqs6Zlu0pNZX5ifYaJDw/fJdppFQcQIE/dxaseOgqYgo7hI/JUEPzPWxTVu128zN1uy1TtnxVfqrB9xP/bjW/PzQhW3kDI9yUk+D28WbyiM97tfP2MwsZ/NCX7RkVZ/Xok5b8DVFyNPJZRy9B91W5Yj2/tDpEzoPVzOX+fezFZTp/FWdtqEZR22iOahdvDvLqJ2rdf7unZ8uMe8PnResmS897cvMNgGnDlp4e5x6+5pF0/eUlqZqtlL3h2YjJ83cJA9+vUJufH+hyXpqUKzvY91efW59PXf6GtPXnB745/9c0strc8aVO9Jl2qo98u/pG2XIK3PkzOdnmmyp9ijROarnvjTLlCwX53NNG1he+tqf5vZ0M7Wx4whX8KkDM1dNnlvge9gf+hj0OSuJ6S4aJP21Zb/ZtzroaFVC6feRTp3QX7XKR7tWe9LmllbztEcvaiuVvVRTWPQ2H7+knYy7uK2pkFixI11Gvb9QLn99rsn6538cul+s/hrjLm4nZ7eqW+htv3BVR6kcFmI6hl/71l/mNeJtv+n7++7Pl5qMrDaXvXfgqZse9nEF3foZ6G0+d/+WsQW+d7UKUAcs9PtCA29/6Tbr+0CrQ3RpLn/e56XlS1f5vjZL85boObtlHRN46590cPLSSX/I5rRDgdFIberUqTJmzBiZPHmyCbgnTpwogwcPlvXr10vdugVffHPnzpVhw4bJ+PHj5aKLLpJPP/1ULrvsMlmyZIm0b9++pB4HAJsz3fqloQcL+h1kfRFpaWClsBAz12rL3kxz0rItLQMrqrEXtDFfeDpP9taPF8vIvonmQ1K/NOa4lqvyp4ma0uu0jKtmvrA1KNJ54yhetlsPev0pLbd08mhcl7+0vDQy3bomuL4u9SBGy2p18EA7zeoc8oyjx01Jqi4rpwfIepCo88A0I6iDNTpoo69tDcT0IFsz2lq6qiW6TetUM4MP+zOz3Fnu0+mUrBlqPXj5YtEOEwxoVkRfp41qVTVz77QEVt9m2gBIs+O+6EHGhGs6m4NzPdjU947O29ODKn2/amm6HixlHD1h9mHGsePmACoyPMwczOqBppYg64GsdkHX+9a5hNFVKsvBI9kmMNFAQP+v5poSkFi7qiTGRknNqHAz7UODRJ0CogdkB45ky+FjJ0x2Sp9bfY51WkhE5TCJ1M7rlcPMXEc9Rbp/DpOIyqES6fpfz9NtqxZZSapHVjbL4+h9b049LH9u3mtKh62u8Uofg/Z6OKNFHXPAmnooSzanHZbNqZmmkZ7uS82CxMfo0oWR5nWhFRD6eaPN/rT3gNJyTc0u9WsRK/2a1TZzo3VwRde11f+373NW+4SGhJhMqvnffN44P3P08yosNNS8fuq57k+zTVUjwpyNJA84m0lqEKlZNr2Mrtqg/1vBqH7+6Vq6+el96OtPn39tFKjrW+vB85M/rDGBnHZN9lzL15txl7SVeZv3msehpcQ6pzrMNQdVbz/reK6ZkqP/Z3scVGvwoPtQn7e4mEiz/5vERpllAHU/bUg5LBtTDpn3mb4OdLu0IZp2VdbXYqPaUebv1vO4fo+zIsNakzs/fR/o57YGyAMnzM7zN90OvU99/eq263Ol573x9655KppuP7uZuU9tNHj7J0vcj0PPv+vcFuY50xU2dOBGq0S0uVS/5rVlY8phEzjrafv+I8UeiNFt0+/I3FyR47kaiOf9uz6n5rVfOcx8Lun7Nj99XfVqUlvObBlrlszSbbv/qxWmSkYDP3196Xk6D1jfI3szs8119PVpfYfq7erngL43NfOadjjLPDb9vNNKM6vs+IzmsXL/1yvMe0M/U3TAOsTjtnRqWK2qEeY1rt/1WoWjnfHNc5bmfB1o1lHfw/r32tXCzes2KqKS+dzR+8x1HUPoe0A/Z/SzVz9/9PNKBzasZmebUp2B0cND2pjXmqfuibXMVJuJ0zfKmC+WyZQ/t5rPgJ5NastnC5LMe1oHI/OXV3ujz48u7XVJp/pmwEG7mms1hmb99bVYNzrSvB51G/+7fLfZhzpAoccop6JZcA38tUR+/tb95qTvXb2/GlUqmwG1XQePyZrdGeb9r591/762i9dpF77nde83y2LpZ/T+w9nmNW0tFebtsWpDuQ/mbTeDTfr5p59Lu9KPmudey/bFIZLrcO4nHQwwn+fZJ/K8dvU1oZ//um/1edE/meu49q9zP1snZ9Ce63BIjrmM87L6GtHBL/2c0Ea3OlCu97Mh5ZBsSjls/tft0k9Z/YzS95K+DvV/fS/reWEhzqy90u9KX/tXm+5pBY0ObOjnlQ6AlIUQRxGHozTQ7tGjh7z22mvm99zcXElISJC77rpLHnzwwQKXHzp0qGRmZsoPP/zgPq93797SuXNnE7h7k5WVZU6WjIwMcx/p6ekSHV2yB2YACqfrvF7/3kK/L//y0E5yeRfvH36nol+2F706xwRG+emH/LJHB/nVJVqN+26V+WI5t3VdmXJ9j9PaHjjpeus/rdwjT13arkjrXZ79wkzTaOapy9rL8N7OLIonPVDTg2o9mFv1xOASb3Z3yWt/mINHO903uNVpd0XVbMEtHy02nW59rR7w091nmsDzVDRYG/rmPOdBUwWgrxkto9ZAXw82i0MDh5wchxmgKQ/0gFIHqvR/DWh0sKiw/apL5H11a193l+LCzN20V4ZPWVDmWf129aPNihW+vPX7Znn3j61yJCtHjhzP8bm9+jp4eWhnM389Px1MG/rWX2bgTAcMX7q6U54KHD38fWfOVhn/v7Xubu+F0e8gHZDSgQ8djG5cq6rEVg83r0H9nNPMsJ50oKk4dOBLBy50Sk7/FnVkYNs4d+WWBkHv/7lNJk7fUOz70aD0uas6FlhyUB/PvVOXuad1laXz28WbARVvA5v6+akDKlpenJ++d36+t3+RBootOhj65uwt8vFf270Ogmh/jfeu7+FXYOz5nGqQ++n8pEI/Zyb9rauZs+4PDWS7Pv2rHPQy3UAHR+aPHSA1vcwJ10z4iCmFVyj7ogGvBs7lrW9n76a15POb+5zycjqFQvukzFmdLMkTryn1uLJIQXd2drZERUXJV199ZbLVlpEjR8rBgwflu+++K3CdRo0amcz4vffe6z5v3Lhx8u2338ry5cu93s/jjz8uTzzxRIHzCbqB0qcHOx/N2yYph7JOZnXMT2IOBPWLTw8Ejuc6pEntqnLTmU2KtUaqZkLe/n2LOaDQjydr1PTsVnXM6LC/dH7rfV8tNyWX2kEdp0+DYy3R1ExaUZam0rIvLed6/bquJoucn+7fV2ZsklrVwr0G5cX16oyNZt60sjIvmqGJiQqXahGa5a0kVcM1uxpm5kmarG5mluw7nG2aAbapV91k6nR+eut61c0cwS2aTUo7bP7XzIx2l9WD5NOlgYE+R1ruqXMU9aTNg/Sg8ZObekm3xv4vZaPlyDpIZmWOrSyaBu2ajdBMrmaW9MBJy1s1q6n3r49Vs4p6sJmWkWWyYJoV1/n7sZr5r+6sANBMnGZJt+3LNP9rNlufTw0QtOGe/q/PcTVXZlpP+hzr+1fvxzP7rv/r7+7zj+fKMT3P9TfdPj041aycZuj0fw149L2sp15Na5kMmR54rt2TYdbj1YyHvu+1MqNZnaqmIkErE07k5poBPc3K68GvPm5nhiXGNPPSwQ3dRi1n/tN1O9rES/eBXk4DRM3C6AG8nucM0E5mcKwsj/6gGWI9sNOskd6f3q+uQ68Zbet50sy2Pm79u3XKPpFjMj5aOaHb5TkApfex/0i2uS193rekHTaZ/s17M02m59W/dS2wykBhdNv0tWxlo6zso2a+TRa5srMKQjNJ+vmun/P6Ga/7SbNiuv+3ugJMfe1oVYmWrWpWr3HtquZvWh1iqkS0PD7jmJmCoYMkOkCg/5tO/n7057BoubbuN+t1q5Uq+hxqNUFhj12rLbT8Vl8zvgYltBfJy79uMGXI+lia16lmytQ1I6mvYT1fT/40etTPNN0+zbTqc3bC9b+pFgjTLJ2zOkwzdln6/nO9B/RUNbyS1KsRad6//uzDf/24Vv67YpdEVQ4zr019vTerW828T5zb4nxdapCkt6mPRT8D9P2pWUoN6n19V+trQp8X/RxwZjCdt6Xbq9lUHQiyPiv1Pa/3qytS6HbUj6liKmrMZQ5nm9eavgdMdjLElaUM0X2TYy5nVeGEVwox02i0OsT8HxNpBp9OdTyh72kdIHBmkveZz2advvN/g51TDE6XVvis3X1IDh7NNp+P6Uecg3ua4fZnINQb/SzTppeajdbPZ/2s0n2uz5lOt/C25nZhtNpBpxro57tWIGhlgX5W6xJovnqN6Hta55hr1Y2+d+q7Ppf0eddSeFP54soQ63eFqTTS747IyuZ7VD8rdJ/q/t97KNvsw5OVFc79q7vM2t9WlUSYOf/k/tfPdK0w0ekU+nmhVTJ6/9qErkXd6ua9qANcen39DDKVEg6H+2frf72vCzrU8/szUF/br0xbLmOGdCnfQfeuXbukQYMGpmS8T5+TIwr333+/zJ49W+bPn1/gOuHh4fLBBx+YEnPL66+/boLqlBTv3fPIdAMASoIGklXDNfgLK9ZgUGnSgwINFP05+C4reuiggYVmVIKRBnl6YFiUbBa8K8qa9CgaDdY1EAqUz7bSoIN2GtDynASWjGPHzWBfYXPwS+y+MjIkJiam1OPKcrlwbUREhDkBAFAc+UsnA4EGKGGh5TfgVnpAq5mpYBWsgwllgYDbPv5MKahoyvNgJXyz1tcOZkX6VomNjZWwsLACGWr9PT4+3ut19PyiXB4AAAAAgAoZdGupeLdu3WTGjBnu87SRmv7uWW7uSc/3vLz69ddffV4eAAAAAIBgUeTycm2Kpo3TunfvLj179jRLhml38lGjRpm/jxgxwsz71iXC1D333CNnnXWWvPTSSzJkyBD5/PPPZdGiRfLWW2+V/KMBAAAAACCQg25dAiwtLU0ee+wx2bNnj1n6a9q0aRIX51zjLykpSUJDTybQ+/bta9bmfuSRR+Shhx6SFi1amM7lrNENAAAAAAh2RV6nuyyUVZc5AAAAAEBwyCijuJL2nAAAAAAA2ISgGwAAAAAAmxB0AwAAAABgE4JuAAAAAABsQtANAAAAAIBNCLoBAAAAALAJQTcAAAAAADYh6AYAAAAAwCaVJAA4HA73YuYAAAAAABSVFU9a8WVpCYige9++feb/hISEst4UAAAAAEAA27dvn8TExJTa/QVE0F2rVi3zf1JSUqk+ObBndEkHT5KTkyU6OrqsNwenif0YPNiXwYN9GTzYl8GDfRkc2I/BIz09XRo1auSOL0tLQATdoaHOqecacPNCDw66H9mXgY/9GDzYl8GDfRk82JfBg30ZHNiPwSPUFV+W2v2V6r0BAAAAAFCBEHQDAAAAAFCRg+6IiAgZN26c+R+BjX0ZHNiPwYN9GTzYl8GDfRk82JfBgf0YPCLKaF+GOEq7XzoAAAAAABVEQGS6AQAAAAAIRATdAAAAAADYhKAbAAAAAACbEHQDAAAAABCIQff48eOlR48eUr16dalbt65cdtllsn79+jyX2bNnjwwfPlzi4+OlatWq0rVrV/n666/zXGb//v1y3XXXmcXoa9SoITfeeKMcPny40Ps+duyY3HHHHVK7dm2pVq2aXHnllZKSkmLL46wISmJfbtu2zey7Jk2aSJUqVaRZs2ame2B2dnah93322WdLSEhIntOtt95q22MNdiX1vkxMTCywX5599tlC75v3Zfnaj7NmzSqwD63TwoULfd4378nS35ebN2+Wyy+/XOrUqWO+C6+55poC7x2+K4NjX/JdGVzvS74rg2Nf8n1ZPrzxxhvSsWNHs4/01KdPH/nf//5XpPdOUlKSDBkyRKKioszr4b777pMTJ04Uer+n8/1agMNGgwcPdrz33nuOVatWOZYtW+a48MILHY0aNXIcPnzYfZnzzjvP0aNHD8f8+fMdmzdvdjz11FOO0NBQx5IlS9yXOf/88x2dOnVy/PXXX445c+Y4mjdv7hg2bFih933rrbc6EhISHDNmzHAsWrTI0bt3b0ffvn3tfLhBrST25f/+9z/H9ddf7/j555/N37/77jtH3bp1Hf/85z8Lve+zzjrLMXr0aMfu3bvdp/T0dNsfc7Aqqfdl48aNHU8++WSe/eJ5G97wvixf+zErKyvP/tPTTTfd5GjSpIkjNzfX533znixZp9qX+n/Tpk0dl19+uWPFihXmdOmll5p9m5OT474dviuDY1/yXRlc70u+K4NjX/J9WT58//33jh9//NGxYcMGx/r16x0PPfSQo3Llymbf+vPeOXHihKN9+/aOgQMHOpYuXer46aefHLGxsY6xY8cWer+n8/2an61Bd36pqam6PJlj9uzZ7vOqVq3q+PDDD/NcrlatWo63337b/LxmzRpznYULF7r/rl9IISEhjp07d3q9n4MHD5od8OWXX7rPW7t2rbmdefPm2fDIKp7T2ZfePP/88+YDqzD6gXXPPfeUwFajJPelHki8/PLLft8P78vy/57Mzs521KlTxxwgFob3ZOnuSw2+dLDE80BN30/6Pfjrr7+a3/muDJ596Q3flYG7L/muDM73Jd+X5UfNmjUd77zzjl/vHQ2ydV/v2bPHfZk33njDER0dbQZWvDmd71dvSnVOd3p6uvm/Vq1a7vP69u0rU6dONWn73Nxc+fzzz01pgJZjqHnz5pk0fvfu3d3XGThwoISGhsr8+fO93s/ixYvl+PHj5nKW1q1bS6NGjcztoWz2pa/b8bwNXz755BOJjY2V9u3by9ixY+XIkSMl9EhQnH2pJXJawtOlSxd54YUXCi3P4X1Z/t+T33//vezbt09GjRp1yvvjPVl6+zIrK8uUJEZERLgvExkZab4H//jjD/M735XBsy993Q7flYG7L/muDL73Jd+XZS8nJ8cc12RmZpoyc3/eO/p/hw4dJC4uzn2ZwYMHS0ZGhqxevdrr/ZzO96s3laSU6AHfvffeK/369TMvOssXX3whQ4cONR9GlSpVMvX1//nPf6R58+buOYlab59noytVMm8U/Zs3en54eLh5gjzpE+zrOrB/X+a3adMmefXVV+XFF18s9P7+9re/SePGjaV+/fqyYsUKeeCBB8xcnG+++abEH1tFU5x9effdd5s5wvpenDt3rvki2b17t0yYMMHrffG+LP/vyXfffdd8+TRs2LDQ++M9Wbr7snfv3mZOvj7PzzzzjFaoyYMPPmgOOPQ9p/iuDJ59mR/flYG9L/muDM73Jd+XZWflypUmyNYkgs7b1uOatm3byrJly0753tH/PQNu6+/W37w5ne/XMg26dVL7qlWrCowYPfroo3Lw4EGZPn26GQX69ttvTfOCOXPmmJEIlD8lsS937twp559/vlx99dUyevToQu/v5ptvdv+st1OvXj0ZMGCAaXqhDWZQNvtyzJgx7strUwv9oLvllltMwxLP0WIExntyx44d8vPPP5tA/VR4T5buvtTGPl9++aXcdttt8sorr5jR9WHDhpkDef0Zwbsv+a4M/H3Jd2XwvS/5vixbrVq1MgG2Vix89dVXMnLkSJk9e7aUe45ScMcddzgaNmzo2LJlS57zN23aZGrkrcnvlgEDBjhuueUW8/O7777rqFGjRp6/Hz9+3BEWFub45ptvvN6fTp7X2z1w4ECe87VpwoQJE0roUVVMxdmXFp3/0KJFC8fw4cPzNBvxlza80PuaNm3aaT4KlNS+9KSX1+utW7fO6995X5bv/ajz0nR+ms5TKyrek/buS09paWnu91BcXJyZ66v4rgyefWnhuzJ49qUnvisDf1/yfVm+DBgwwHHzzTf79d559NFHTUM0T/p60Ot5Ngv2dDrfr97YOkSu5Rl33nmnSfv/9ttvZvkLT9achvyjSGFhYab8Q2n5gGZqtE7forelf+/Vq5fX++3WrZtUrlxZZsyY4T5PSzm0RbzeHspmX1qj9jqfVPfRe++9d1pZGh3dUjpaiLLbl972i14nfwmOhfdl+d2Pelv6fhwxYoTZR0XFe9LefelJKxa0dE4vl5qaKpdccok5n+/K4NmXiu/K4NmX+fFdGdj7ku/L8ic3N9fMy/fnvaP/a3m67lvLr7/+apYC0xJ1b07n+9Urh41uu+02R0xMjGPWrFl5WuUfOXLE/F1HiLTl+plnnmmWtNHMzIsvvmi6wWk7eM827V26dDGX+eOPP8zIr2eb9h07djhatWpl/m7RlvE6svHbb7+ZlvF9+vQxJ5TdvtT9pJfRESn92fN2fO1LvR0dUdR9uHXrVrN0ii7r0L9//zJ6JgJfSezLuXPnmm6suvSGLmnz8ccfm1HfESNGuO+H96W9SurzVU2fPt2M8mqXz/x4T5b9vlRTpkwx3Vf1+f/oo49MF/oxY8bkuR2+K4NjX/JdGTz7ku/K4PqMVXxflq0HH3zQdJ3X51OXdtPf9bjml19+8eu9Yy0ZNmjQIPO+1IoDfU96Lhmm+0/3o+5Pf79f/WFr0K0vSm8nXSvPouusXXHFFWYNyqioKEfHjh0LLHGzb98+88CqVatmWrqPGjXKcejQIfff9YnX2505c6b7vKNHjzpuv/1200Zeb1fX3vP8wkLp70u9rK/b8bUvk5KSzIeTfvhFRESYA5H77ruPNQ7LeF8uXrzY0atXL/MlFhkZ6WjTpo3jmWeecRw7dsx9Gd6X9iqpz1eln6++1oDlPVk+9uUDDzxgSh11ORT9sn/ppZcKrA3Ld2Vw7Eu+K4NnX/JdGVyfsYrvy7J1ww03mGX4wsPDTbCsg5NWwO3ve2fbtm2OCy64wFGlShWzRvc///lPUy5u0f2n+1H3p7/fr/4I0X9OL5kPAAAAAAAKQ9tTAAAAAABsQtANAAAAAIBNCLoBAAAAALAJQTcAAAAAADYh6AYAAAAAwCYE3QAAAAAA2ISgGwAAAAAAmxB0AwAAAABgE4JuAAAquH379kndunVl27ZtJXq7a9askYYNG0pmZmaJ3i4AAIGEoBsAAD9df/31EhISUuB0/vnnSyD717/+JZdeeqkkJib6dfmLL77Y52OeM2eOeU5WrFghbdu2ld69e8uECRNKeIsBAAgcIQ6Hw1HWGwEAQKAE3SkpKfLee+/lOT8iIkJq1qxp2/1mZ2dLeHi4Lbd95MgRqVevnvz8888mQPbHt99+K1deeaVs377dZLI93XDDDbJy5UpZuHCh+f3HH3+U0aNHS1JSklSqVMmWxwAAQHlGphsAgCLQADs+Pj7PyTPg1izvO++8I5dffrlERUVJixYt5Pvvv89zG6tWrZILLrhAqlWrJnFxcTJ8+HDZu3ev++9nn3223HnnnXLvvfdKbGysDB482Jyvt6O3FxkZKeecc4588MEH5v4OHjxoSrijo6Plq6++KhAgV61aVQ4dOuT18fz000/mMeUPuAvbxosuukjq1Kkj77//fp7rHD58WL788ku58cYb3eedd955sn//fpk9e/ZpPNsAAAQ+gm4AAErYE088Iddcc40psb7wwgvluuuuM4Gn0gD53HPPlS5dusiiRYtk2rRpJnuul/ekAbVmt//880+ZPHmybN26Va666iq57LLLZPny5XLLLbfIww8/7L68BtbXXnttgSy8/q7Xq169us9y8G7duuU571TbqBnrESNGmKDbs2BOA+6cnBwZNmyY+zx9DJ07dzb3AwBARUTQDQBAEfzwww8m++t5euaZZwqUoWvg2bx5c/M3zQAvWLDA/O21114zwaye37p1a/PzlClTZObMmbJhwwb3bWhG+/nnn5dWrVqZ05tvvmn+f+GFF8z/GmDr/Xi66aabTJn47t27ze+pqakmk60l375oiXj9+vXznOfPNuptbt68OU8GWwN8LTuPiYnJc3t6+3o/AABUREyuAgCgCLSs+4033shzXq1atfL83rFjxzwZaC371gBYaZZag1cN1vPTILZly5bm5/zZ5/Xr10uPHj3ynNezZ88Cv7dr185kyR988EH5+OOPpXHjxtK/f3+fj+fo0aOmXN2TP9uowXjfvn1NMK7l8Js2bTLZ7CeffLLAdapUqWLmjgMAUBERdAMAUAQaRGsGuzCVK1fO87vOu87NzTU/a9Zbu38/99xzBa6nDc087+d0aLZ70qRJJujWzPOoUaPM/fuic8YPHDiQ5zx/t1Hnbt91113m/vS+mjVrJmeddVaB62hpvf4NAICKiPJyAABKUdeuXWX16tVmeS4N3j1PhQXaWlKu86s9WR3CPf397383pdyvvPKKWSd75MiRhW6Plo7r5U5nG3WOd2hoqHz66afy4YcfmpJzbwG+NmXT+wEAoCIi6AYAoAiysrJkz549eU6encdP5Y477jCZX53zrUGzlmvrPGzNSGsTMl+0cdq6devkgQceMPOqv/jiC3f3cM9AVzupX3HFFXLffffJoEGDCizplZ92RtcA2zPb7e82avn50KFDZezYsWYeef455mrbtm2yc+dOGThwoN/PEQAAwYSgGwCAItBO3lpi7Xk644wz/L6+NhXTjuQavGpQ3KFDB7M0WI0aNUzW2JcmTZqY5cC++eYbM2dc55Vb3ct1yS9PWvata3sX1kDNovevmW0N4k9nG/W+NGDX4D1/Qzb12WefmdvQueUAAFREIQ7PtT4AAEDA+Ne//mWWE0tOTs5z/kcffST/+Mc/ZNeuXWbJrlP58ccfTWZcy8ALC/yLSgN/7cKu5ef9+vUrsdsFACCQ0EgNAIAA8frrr5sO5rVr1zaZaF0+7M4773T/XTuEa5n3s88+a8rR/Qm41ZAhQ2Tjxo2mDDwhIaHEtjcpKUkeeughAm4AQIVGphsAgACh2eupU6ea+daNGjWS4cOHm/nUlSo5x9Aff/xxk/3WJcK+++47r0t+AQCA0kXQDQAAAACATWikBgAAAACATQi6AQAAAACwCUE3AAAAAAA2IegGAAAAAMAmBN0AAAAAANiEoBsAAAAAAJsQdAMAAAAAYBOCbgAAAAAAxB7/D85bye5W2KP2AAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Use the sam_theta = 0 for the izero and plot the signal / i0 vs energy\n", + "fig, ax = plt.subplots(\n", + " nrows=4,\n", + " ncols=1,\n", + " figsize=(10, 4*4),\n", + " sharex=True,\n", + " sharey=False,\n", + ")\n", + "\n", + "i0_df = refl_df[refl_df[\"sam_theta\"] == 0].copy()\n", + "i0_df.plot(x=\"energy\", y=\"signal\", kind=\"line\", ax=ax[0])\n", + "\n", + "df_10 = refl_df[refl_df[\"sam_theta\"] == 10.0].copy()\n", + "df_10.loc[:, \"refl_signal\"] = df_10[\"signal\"].values / i0_df[\"signal\"].values\n", + "df_10.plot(x=\"energy\", y=\"refl_signal\", kind=\"line\", ax=ax[1])\n", + "\n", + "df_15 = refl_df[refl_df[\"sam_theta\"] == 15.0].copy()\n", + "df_15.loc[:, \"refl_signal\"] = df_15[\"signal\"].values / i0_df[\"signal\"].values\n", + "df_15.plot(x=\"energy\", y=\"refl_signal\", kind=\"line\", ax=ax[2])\n", + "\n", + "df_20 = refl_df[refl_df[\"sam_theta\"] == 20.0].copy()\n", + "df_20.loc[:, \"refl_signal\"] = df_20[\"signal\"].values / i0_df[\"signal\"].values\n", + "df_20.plot(x=\"energy\", y=\"refl_signal\", kind=\"line\", ax=ax[3])\n", + "\n", + "ax[-1].set_xlabel(\"Energy (eV)\")\n", + "ax[-1].set_xlim(280, 300)\n", + "plt.tight_layout()\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "210bce49", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": ".venv", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/notebooks/beamtime_collins_2026feb.ipynb b/notebooks/beamtime_collins_2026feb.ipynb index 25bec54..02c0a74 100644 --- a/notebooks/beamtime_collins_2026feb.ipynb +++ b/notebooks/beamtime_collins_2026feb.ipynb @@ -14,10 +14,134 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 1, "id": "acae54e37e7d407bbb7b55eff062a284", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/javascript": "(function(root) {\n function now() {\n return new Date();\n }\n\n const force = true;\n const version = '3.8.2'.replace('rc', '-rc.').replace('.dev', '-dev.');\n const reloading = false;\n const Bokeh = root.Bokeh;\n const BK_RE = /^https:\\/\\/cdn\\.bokeh\\.org\\/bokeh\\/(release|dev)\\/bokeh-/;\n const PN_RE = /^https:\\/\\/cdn\\.holoviz\\.org\\/panel\\/[^/]+\\/dist\\/panel/i;\n\n // Set a timeout for this load but only if we are not already initializing\n if (typeof (root._bokeh_timeout) === \"undefined\" || (force || !root._bokeh_is_initializing)) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks;\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, js_modules, js_exports, Bokeh, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n if (js_modules == null) js_modules = [];\n if (js_exports == null) js_exports = {};\n\n root._bokeh_onload_callbacks.push(callback);\n\n if (root._bokeh_is_loading > 0) {\n // Don't load bokeh if it is still initializing\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n } else if (js_urls.length === 0 && js_modules.length === 0 && Object.keys(js_exports).length === 0) {\n // There is nothing to load\n run_callbacks();\n return null;\n }\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n window._bokeh_on_load = on_load\n\n function on_error(e) {\n const src_el = e.srcElement\n console.error(\"failed to load \" + (src_el.href || src_el.src));\n }\n\n const skip = [];\n if (window.requirejs) {\n window.requirejs.config({'packages': {}, 'paths': {}, 'shim': {}});\n root._bokeh_is_loading = css_urls.length + 0;\n } else {\n root._bokeh_is_loading = css_urls.length + js_urls.length + js_modules.length + Object.keys(js_exports).length;\n }\n\n const existing_stylesheets = []\n const links = document.getElementsByTagName('link')\n for (let i = 0; i < links.length; i++) {\n const link = links[i]\n if (link.href != null) {\n existing_stylesheets.push(link.href)\n }\n }\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const escaped = encodeURI(url)\n if (existing_stylesheets.indexOf(escaped) !== -1) {\n on_load()\n continue;\n }\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error;\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n } var existing_scripts = []\n const scripts = document.getElementsByTagName('script')\n for (let i = 0; i < scripts.length; i++) {\n var script = scripts[i]\n if (script.src != null) {\n existing_scripts.push(script.src)\n }\n }\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const escaped = encodeURI(url)\n const shouldSkip = skip.includes(escaped) || existing_scripts.includes(escaped)\n const isBokehOrPanel = BK_RE.test(escaped) || PN_RE.test(escaped)\n const missingOrBroken = Bokeh == null || Bokeh.Panel == null || (Bokeh.version != version && !Bokeh.versions?.has(version)) || Bokeh.versions?.get(version)?.Panel == null;\n if (shouldSkip && !(isBokehOrPanel && missingOrBroken)) {\n if (!window.requirejs) {\n on_load();\n }\n continue;\n }\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error;\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n for (let i = 0; i < js_modules.length; i++) {\n const url = js_modules[i];\n const escaped = encodeURI(url)\n if (skip.indexOf(escaped) !== -1 || existing_scripts.indexOf(escaped) !== -1) {\n if (!window.requirejs) {\n on_load();\n }\n continue;\n }\n var element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error;\n element.async = false;\n element.src = url;\n element.type = \"module\";\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n for (const name in js_exports) {\n const url = js_exports[name];\n const escaped = encodeURI(url)\n if (skip.indexOf(escaped) >= 0 || root[name] != null) {\n if (!window.requirejs) {\n on_load();\n }\n continue;\n }\n var element = document.createElement('script');\n element.onerror = on_error;\n element.async = false;\n element.type = \"module\";\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n element.textContent = `\n import ${name} from \"${url}\"\n window.${name} = ${name}\n window._bokeh_on_load()\n `\n document.head.appendChild(element);\n }\n if (!js_urls.length && !js_modules.length) {\n on_load()\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n const js_urls = [\"https://cdn.holoviz.org/panel/1.8.5/dist/bundled/reactiveesm/es-module-shims@^1.10.0/dist/es-module-shims.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-3.8.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.8.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.8.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.8.2.min.js\", \"https://cdn.holoviz.org/panel/1.8.5/dist/panel.min.js\"];\n const js_modules = [];\n const js_exports = {};\n const css_urls = [];\n const inline_js = [ function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\nfunction(Bokeh) {} // ensure no trailing comma for IE\n ];\n\n function run_inline_js() {\n if ((root.Bokeh !== undefined) || (force === true)) {\n for (let i = 0; i < inline_js.length; i++) {\n try {\n inline_js[i].call(root, root.Bokeh);\n } catch(e) {\n if (!reloading) {\n throw e;\n }\n }\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n }\n root._bokeh_is_initializing = false;\n }\n\n function load_or_wait() {\n // Implement a backoff loop that tries to ensure we do not load multiple\n // versions of Bokeh and its dependencies at the same time.\n // In recent versions we use the root._bokeh_is_initializing flag\n // to determine whether there is an ongoing attempt to initialize\n // bokeh, however for backward compatibility we also try to ensure\n // that we do not start loading a newer (Panel>=1.0 and Bokeh>3) version\n // before older versions are fully initialized.\n if (root._bokeh_is_initializing && Date.now() > root._bokeh_timeout) {\n // If the timeout and bokeh was not successfully loaded we reset\n // everything and try loading again\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_is_initializing = false;\n root._bokeh_onload_callbacks = undefined;\n root._bokeh_is_loading = 0;\n console.log(\"Bokeh: BokehJS was loaded multiple times but one version failed to initialize.\");\n load_or_wait();\n } else if (root._bokeh_is_initializing || (typeof root._bokeh_is_initializing === \"undefined\" && root._bokeh_onload_callbacks !== undefined)) {\n setTimeout(load_or_wait, 100);\n } else {\n root._bokeh_is_initializing = true;\n root._bokeh_onload_callbacks = [];\n const bokeh_loaded = Bokeh != null && ((Bokeh.version === version && Bokeh.Panel) || (Bokeh.versions?.has(version) && Bokeh.versions.get(version)?.Panel));\n if (!reloading && !bokeh_loaded) {\n if (root.Bokeh) {\n root.Bokeh = undefined;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n }\n load_libs(css_urls, js_urls, js_modules, js_exports, Bokeh, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n if (Bokeh != undefined && !reloading) {\n const NewBokeh = root.Bokeh;\n if (Bokeh.versions === undefined) {\n Bokeh.versions = new Map();\n }\n if (NewBokeh.version !== Bokeh.version) {\n Bokeh[NewBokeh.version] = NewBokeh;\n Bokeh.versions.set(NewBokeh.version, NewBokeh);\n }\n root.Bokeh = Bokeh;\n }\n });\n }\n }\n // Give older versions of the autoload script a head-start to ensure\n // they initialize before we start loading newer version.\n setTimeout(load_or_wait, 100)\n}(window));", + "application/vnd.holoviews_load.v0+json": "" + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/javascript": "\nif ((window.PyViz === undefined) || (window.PyViz instanceof HTMLElement)) {\n window.PyViz = {comms: {}, comm_status:{}, kernels:{}, receivers: {}, plot_index: []}\n}\n\n\n function JupyterCommManager() {\n }\n\n JupyterCommManager.prototype.register_target = function(plot_id, comm_id, msg_handler) {\n if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n comm_manager.register_target(comm_id, function(comm) {\n comm.on_msg(msg_handler);\n });\n } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n window.PyViz.kernels[plot_id].registerCommTarget(comm_id, function(comm) {\n comm.onMsg = msg_handler;\n });\n } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n google.colab.kernel.comms.registerTarget(comm_id, (comm) => {\n var messages = comm.messages[Symbol.asyncIterator]();\n function processIteratorResult(result) {\n var message = result.value;\n console.log(message)\n var content = {data: message.data, comm_id};\n var buffers = []\n for (var buffer of message.buffers || []) {\n buffers.push(new DataView(buffer))\n }\n var metadata = message.metadata || {};\n var msg = {content, buffers, metadata}\n msg_handler(msg);\n return messages.next().then(processIteratorResult);\n }\n return messages.next().then(processIteratorResult);\n })\n }\n }\n\n JupyterCommManager.prototype.get_client_comm = function(plot_id, comm_id, msg_handler) {\n if (comm_id in window.PyViz.comms) {\n return window.PyViz.comms[comm_id];\n } else if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n var comm = comm_manager.new_comm(comm_id, {}, {}, {}, comm_id);\n if (msg_handler) {\n comm.on_msg(msg_handler);\n }\n } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n var comm = window.PyViz.kernels[plot_id].connectToComm(comm_id);\n comm.open();\n if (msg_handler) {\n comm.onMsg = msg_handler;\n }\n } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n var comm_promise = google.colab.kernel.comms.open(comm_id)\n comm_promise.then((comm) => {\n window.PyViz.comms[comm_id] = comm;\n if (msg_handler) {\n var messages = comm.messages[Symbol.asyncIterator]();\n function processIteratorResult(result) {\n var message = result.value;\n var content = {data: message.data};\n var metadata = message.metadata || {comm_id};\n var msg = {content, metadata}\n msg_handler(msg);\n return messages.next().then(processIteratorResult);\n }\n return messages.next().then(processIteratorResult);\n }\n })\n var sendClosure = (data, metadata, buffers, disposeOnDone) => {\n return comm_promise.then((comm) => {\n comm.send(data, metadata, buffers, disposeOnDone);\n });\n };\n var comm = {\n send: sendClosure\n };\n }\n window.PyViz.comms[comm_id] = comm;\n return comm;\n }\n window.PyViz.comm_manager = new JupyterCommManager();\n \n\n\nvar JS_MIME_TYPE = 'application/javascript';\nvar HTML_MIME_TYPE = 'text/html';\nvar EXEC_MIME_TYPE = 'application/vnd.holoviews_exec.v0+json';\nvar CLASS_NAME = 'output';\n\n/**\n * Render data to the DOM node\n */\nfunction render(props, node) {\n var div = document.createElement(\"div\");\n var script = document.createElement(\"script\");\n node.appendChild(div);\n node.appendChild(script);\n}\n\n/**\n * Handle when a new output is added\n */\nfunction handle_add_output(event, handle) {\n var output_area = handle.output_area;\n var output = handle.output;\n if ((output.data == undefined) || (!output.data.hasOwnProperty(EXEC_MIME_TYPE))) {\n return\n }\n var id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n var toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n if (id !== undefined) {\n var nchildren = toinsert.length;\n var html_node = toinsert[nchildren-1].children[0];\n html_node.innerHTML = output.data[HTML_MIME_TYPE];\n var scripts = [];\n var nodelist = html_node.querySelectorAll(\"script\");\n for (var i in nodelist) {\n if (nodelist.hasOwnProperty(i)) {\n scripts.push(nodelist[i])\n }\n }\n\n scripts.forEach( function (oldScript) {\n var newScript = document.createElement(\"script\");\n var attrs = [];\n var nodemap = oldScript.attributes;\n for (var j in nodemap) {\n if (nodemap.hasOwnProperty(j)) {\n attrs.push(nodemap[j])\n }\n }\n attrs.forEach(function(attr) { newScript.setAttribute(attr.name, attr.value) });\n newScript.appendChild(document.createTextNode(oldScript.innerHTML));\n oldScript.parentNode.replaceChild(newScript, oldScript);\n });\n if (JS_MIME_TYPE in output.data) {\n toinsert[nchildren-1].children[1].textContent = output.data[JS_MIME_TYPE];\n }\n output_area._hv_plot_id = id;\n if ((window.Bokeh !== undefined) && (id in Bokeh.index)) {\n window.PyViz.plot_index[id] = Bokeh.index[id];\n } else {\n window.PyViz.plot_index[id] = null;\n }\n } else if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n var bk_div = document.createElement(\"div\");\n bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n var script_attrs = bk_div.children[0].attributes;\n for (var i = 0; i < script_attrs.length; i++) {\n toinsert[toinsert.length - 1].childNodes[1].setAttribute(script_attrs[i].name, script_attrs[i].value);\n }\n // store reference to server id on output_area\n output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n }\n}\n\n/**\n * Handle when an output is cleared or removed\n */\nfunction handle_clear_output(event, handle) {\n var id = handle.cell.output_area._hv_plot_id;\n var server_id = handle.cell.output_area._bokeh_server_id;\n if (((id === undefined) || !(id in PyViz.plot_index)) && (server_id !== undefined)) { return; }\n var comm = window.PyViz.comm_manager.get_client_comm(\"hv-extension-comm\", \"hv-extension-comm\", function () {});\n if (server_id !== null) {\n comm.send({event_type: 'server_delete', 'id': server_id});\n return;\n } else if (comm !== null) {\n comm.send({event_type: 'delete', 'id': id});\n }\n delete PyViz.plot_index[id];\n if ((window.Bokeh !== undefined) & (id in window.Bokeh.index)) {\n var doc = window.Bokeh.index[id].model.document\n doc.clear();\n const i = window.Bokeh.documents.indexOf(doc);\n if (i > -1) {\n window.Bokeh.documents.splice(i, 1);\n }\n }\n}\n\n/**\n * Handle kernel restart event\n */\nfunction handle_kernel_cleanup(event, handle) {\n delete PyViz.comms[\"hv-extension-comm\"];\n window.PyViz.plot_index = {}\n}\n\n/**\n * Handle update_display_data messages\n */\nfunction handle_update_output(event, handle) {\n handle_clear_output(event, {cell: {output_area: handle.output_area}})\n handle_add_output(event, handle)\n}\n\nfunction register_renderer(events, OutputArea) {\n function append_mime(data, metadata, element) {\n // create a DOM node to render to\n var toinsert = this.create_output_subarea(\n metadata,\n CLASS_NAME,\n EXEC_MIME_TYPE\n );\n this.keyboard_manager.register_events(toinsert);\n // Render to node\n var props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n render(props, toinsert[0]);\n element.append(toinsert);\n return toinsert\n }\n\n events.on('output_added.OutputArea', handle_add_output);\n events.on('output_updated.OutputArea', handle_update_output);\n events.on('clear_output.CodeCell', handle_clear_output);\n events.on('delete.Cell', handle_clear_output);\n events.on('kernel_ready.Kernel', handle_kernel_cleanup);\n\n OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n safe: true,\n index: 0\n });\n}\n\nif (window.Jupyter !== undefined) {\n try {\n var events = require('base/js/events');\n var OutputArea = require('notebook/js/outputarea').OutputArea;\n if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n register_renderer(events, OutputArea);\n }\n } catch(err) {\n }\n}\n", + "application/vnd.holoviews_load.v0+json": "" + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.holoviews_exec.v0+json": "", + "text/html": [ + "
\n", + "
\n", + "
\n", + "" + ] + }, + "metadata": { + "application/vnd.holoviews_exec.v0+json": { + "id": "9eb98220-9881-4652-87fd-a115cd91c364" + } + }, + "output_type": "display_data" + } + ], "source": [ "from pathlib import Path\n", "\n", @@ -33,7 +157,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 2, "id": "da700cfd", "metadata": {}, "outputs": [ @@ -41,7 +165,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "beamtime exists on filesystem: False\n" + "beamtime exists on filesystem: True\n" ] }, { @@ -50,7 +174,7 @@ "PosixPath('/Volumes/DATA/Collins/2026Feb')" ] }, - "execution_count": 7, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" } @@ -65,7 +189,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 3, "id": "8dd0d8092fe74a7c96281538738b07e2", "metadata": {}, "outputs": [ @@ -73,7 +197,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "catalog: /Users/hduva/Library/Application Support/pyref/catalog.db\n", + "catalog: /Users/hduva/.config/pyref/catalog.db\n", "beamtime: /Volumes/DATA/Collins/2026Feb\n", "frames: 13546\n", "samples: 9\n", @@ -90,10 +214,10 @@ " white-space: pre-wrap;\n", "}\n", "\n", - "shape: (5, 29)
file_pathdata_offsetnaxis1naxis2bitpixbzerodata_sizefile_namesample_nametagscan_numberframe_numberDATEBeamline EnergySample ThetaCCD ThetaHigher Order SuppressorEPU PolarizationEXPOSURESample NameScan IDLambdaQbeam_rowbeam_colbeam_sigmareflectivity_profile_indexreflectivity_scan_typecatalog_scan_type
stri64i64i64i64i64i64strstrstri64i64strf64f64f64f64f64f64strf64f64f64i64i64f64i64strstr
"/Volumes/DATA/Collins/2026Feb/…2016010004001632768800000"opv_ternary_88147-00001.fits""opv""ternary"881471"2026-02-10T14:37:17"249.9985160.00.001null190.00.0"opv"88147.0nullnullnullnullnullnullnull"fixed_energy"
"/Volumes/DATA/Collins/2026Feb/…2016010004001632768800000"opv_ternary_88147-00002.fits""opv""ternary"881472"2026-02-10T14:37:20"250.0004030.00.0null190.00.0"opv"88147.0nullnullnullnullnullnullnull"fixed_energy"
"/Volumes/DATA/Collins/2026Feb/…2016010004001632768800000"opv_ternary_88147-00003.fits""opv""ternary"881473"2026-02-10T14:37:23"250.0004030.00.0null190.00.0"opv"88147.0nullnullnullnullnullnullnull"fixed_energy"
"/Volumes/DATA/Collins/2026Feb/…2016010004001632768800000"opv_ternary_88147-00004.fits""opv""ternary"881474"2026-02-10T14:37:26"250.0004030.00.0null190.00.0"opv"88147.0nullnullnullnullnullnullnull"fixed_energy"
"/Volumes/DATA/Collins/2026Feb/…2016010004001632768800000"opv_ternary_88147-00005.fits""opv""ternary"881475"2026-02-10T14:37:29"250.0004030.00.0null190.00.0"opv"88147.0nullnullnullnullnullnullnull"fixed_energy"
" + "shape: (5, 34)
file_pathdata_offsetnaxis1naxis2bitpixbzerodata_sizefile_namesample_nametagscan_numberframe_numberzarr_group_keyzarr_frame_indexzarr_bucket_frame_indexzarr_pathDATEBeamline EnergySample ThetaCCD ThetaHigher Order SuppressorEPU PolarizationEXPOSUREAI 3 IzeroSample NameScan IDLambdaQbeam_rowbeam_colbeam_sigmareflectivity_profile_indexreflectivity_scan_typecatalog_scan_type
stri64i64i64i64i64i64strstrstri64i64i64i64i64strstrf64f64f64f64f64f64f64strf64f64f64i64i64f64i64strstr
"/Volumes/DATA/Collins/2026Feb/…2016010004001632768800000"opv_ternary_88147-00001.fits""opv""ternary"8814718814710"/Users/hduva/Library/Applicati…"2026-02-10T14:37:17"249.9985160.00.001null190.00.00.0"opv"88147.0nullnullnullnullnullnullnull"fixed_energy"
"/Volumes/DATA/Collins/2026Feb/…2016010004001632768800000"opv_ternary_88147-00002.fits""opv""ternary"8814728814721"/Users/hduva/Library/Applicati…"2026-02-10T14:37:20"250.0004030.00.0null190.00.00.0"opv"88147.0nullnullnullnullnullnullnull"fixed_energy"
"/Volumes/DATA/Collins/2026Feb/…2016010004001632768800000"opv_ternary_88147-00003.fits""opv""ternary"8814738814732"/Users/hduva/Library/Applicati…"2026-02-10T14:37:23"250.0004030.00.0null190.00.00.0"opv"88147.0nullnullnullnullnullnullnull"fixed_energy"
"/Volumes/DATA/Collins/2026Feb/…2016010004001632768800000"opv_ternary_88147-00004.fits""opv""ternary"8814748814743"/Users/hduva/Library/Applicati…"2026-02-10T14:37:26"250.0004030.00.0null190.00.00.0"opv"88147.0nullnullnullnullnullnullnull"fixed_energy"
"/Volumes/DATA/Collins/2026Feb/…2016010004001632768800000"opv_ternary_88147-00005.fits""opv""ternary"8814758814754"/Users/hduva/Library/Applicati…"2026-02-10T14:37:29"250.0004030.00.0null190.00.00.0"opv"88147.0nullnullnullnullnullnullnull"fixed_energy"
" ], "text/plain": [ - "shape: (5, 29)\n", + "shape: (5, 34)\n", "┌────────────┬────────────┬────────┬────────┬───┬────────────┬────────────┬────────────┬───────────┐\n", "│ file_path ┆ data_offse ┆ naxis1 ┆ naxis2 ┆ … ┆ beam_sigma ┆ reflectivi ┆ reflectivi ┆ catalog_s │\n", "│ --- ┆ t ┆ --- ┆ --- ┆ ┆ --- ┆ ty_profile ┆ ty_scan_ty ┆ can_type │\n", @@ -124,13 +248,13 @@ "└────────────┴────────────┴────────┴────────┴───┴────────────┴────────────┴────────────┴───────────┘" ] }, - "execution_count": 8, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "view = read_beamtime_local(BEAMTIME, catalog_path=CATALOG_PATH, require_indexed=True)\n", + "view = read_beamtime_local(BEAMTIME, require_indexed=True)\n", "\n", "print(f\"catalog: {view.catalog_path}\")\n", "print(f\"beamtime: {view.beamtime_path}\")\n", @@ -143,105 +267,2318 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 4, "id": "ecb9187f", "metadata": {}, "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "shape: (33, 10)\n", + "┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬────────┐\n", + "│ scan_nu ┆ n_frame ┆ sample_ ┆ tags ┆ energy_ ┆ energy_ ┆ theta_m ┆ theta_m ┆ inferre ┆ catalo │\n", + "│ mber ┆ s ┆ names ┆ --- ┆ min ┆ max ┆ in ┆ ax ┆ d_scan_ ┆ g_scan │\n", + "│ --- ┆ --- ┆ --- ┆ list[st ┆ --- ┆ --- ┆ --- ┆ --- ┆ type ┆ _type │\n", + "│ i64 ┆ i64 ┆ list[st ┆ r] ┆ f64 ┆ f64 ┆ f64 ┆ f64 ┆ --- ┆ --- │\n", + "│ ┆ ┆ r] ┆ ┆ ┆ ┆ ┆ ┆ str ┆ str │\n", + "╞═════════╪═════════╪═════════╪═════════╪═════════╪═════════╪═════════╪═════════╪═════════╪════════╡\n", + "│ 88147 ┆ 616 ┆ [\"opv\"] ┆ [\"terna ┆ 249.996 ┆ 284.411 ┆ 0.0 ┆ 60.0 ┆ fixed_e ┆ fixed_ │\n", + "│ ┆ ┆ ┆ ry\"] ┆ 629 ┆ 644 ┆ ┆ ┆ nergy ┆ energy │\n", + "│ 88148 ┆ 724 ┆ [\"opv\"] ┆ [\"terna ┆ 284.396 ┆ 286.012 ┆ 0.0 ┆ 60.0 ┆ fixed_e ┆ fixed_ │\n", + "│ ┆ ┆ ┆ ry\"] ┆ 97 ┆ 842 ┆ ┆ ┆ nergy ┆ energy │\n", + "│ 88149 ┆ 336 ┆ [\"opv\"] ┆ [\"terna ┆ 285.995 ┆ 286.005 ┆ 0.0 ┆ 60.0 ┆ fixed_e ┆ fixed_ │\n", + "│ ┆ ┆ ┆ ry\"] ┆ 529 ┆ 421 ┆ ┆ ┆ nergy ┆ energy │\n", + "│ 88150 ┆ 24 ┆ [\"opv\"] ┆ [\"terna ┆ 249.998 ┆ 250.000 ┆ 0.0 ┆ 2.182 ┆ fixed_e ┆ fixed_ │\n", + "│ ┆ ┆ ┆ ry\"] ┆ 516 ┆ 403 ┆ ┆ ┆ nergy ┆ energy │\n", + "│ 88151 ┆ 1351 ┆ [\"opv\"] ┆ [\"binar ┆ 249.996 ┆ 286.007 ┆ 0.0 ┆ 60.0 ┆ fixed_e ┆ fixed_ │\n", + "│ ┆ ┆ ┆ y\"] ┆ 629 ┆ 895 ┆ ┆ ┆ nergy ┆ energy │\n", + "│ 88152 ┆ 7 ┆ [\"znpc\" ┆ [] ┆ 249.998 ┆ 250.000 ┆ 0.0 ┆ 0.0 ┆ single_ ┆ fixed_ │\n", + "│ ┆ ┆ ] ┆ ┆ 516 ┆ 403 ┆ ┆ ┆ point ┆ energy │\n", + "│ 88153 ┆ 140 ┆ [\"znpc\" ┆ [] ┆ 249.996 ┆ 250.004 ┆ 0.0 ┆ 40.91 ┆ fixed_e ┆ fixed_ │\n", + "│ ┆ ┆ ] ┆ ┆ 629 ┆ 183 ┆ ┆ ┆ nergy ┆ energy │\n", + "│ 88154 ┆ 1261 ┆ [\"znpc\" ┆ [] ┆ 249.996 ┆ 284.507 ┆ 0.0 ┆ 60.0 ┆ fixed_e ┆ fixed_ │\n", + "│ ┆ ┆ ] ┆ ┆ 629 ┆ 064 ┆ ┆ ┆ nergy ┆ energy │\n", + "│ 88155 ┆ 547 ┆ [\"znpc\" ┆ [] ┆ 285.496 ┆ 288.613 ┆ 0.0 ┆ 60.0 ┆ fixed_e ┆ fixed_ │\n", + "│ ┆ ┆ ] ┆ ┆ 825 ┆ 589 ┆ ┆ ┆ nergy ┆ energy │\n", + "│ 88156 ┆ 1 ┆ [\"znpc_ ┆ [] ┆ 249.998 ┆ 249.998 ┆ 5.0 ┆ 5.0 ┆ single_ ┆ fixed_ │\n", + "│ ┆ ┆ energy\" ┆ ┆ 516 ┆ 516 ┆ ┆ ┆ point ┆ energy │\n", + "│ ┆ ┆ ] ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n", + "│ 88157 ┆ 6 ┆ [\"znpc_ ┆ [] ┆ 249.987 ┆ 270.396 ┆ 5.0 ┆ 5.0 ┆ fixed_a ┆ fixed_ │\n", + "│ ┆ ┆ energy\" ┆ ┆ 195 ┆ 698 ┆ ┆ ┆ ngle ┆ energy │\n", + "│ ┆ ┆ ] ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n", + "│ 88158 ┆ 44 ┆ [\"znpc_ ┆ [] ┆ 249.994 ┆ 281.295 ┆ 5.0 ┆ 5.0 ┆ fixed_a ┆ fixed_ │\n", + "│ ┆ ┆ izero\"] ┆ ┆ 742 ┆ 908 ┆ ┆ ┆ ngle ┆ energy │\n", + "│ 88159 ┆ 6 ┆ [\"znpc_ ┆ [] ┆ 249.996 ┆ 255.010 ┆ 5.0 ┆ 5.0 ┆ fixed_a ┆ fixed_ │\n", + "│ ┆ ┆ izero\"] ┆ ┆ 629 ┆ 916 ┆ ┆ ┆ ngle ┆ energy │\n", + "│ 88160 ┆ 3 ┆ [\"znpc_ ┆ [] ┆ 249.983 ┆ 251.998 ┆ 0.0 ┆ 0.0 ┆ fixed_a ┆ fixed_ │\n", + "│ ┆ ┆ izero\"] ┆ ┆ 421 ┆ 854 ┆ ┆ ┆ ngle ┆ energy │\n", + "│ 88161 ┆ 21 ┆ [\"znpc_ ┆ [] ┆ 250.000 ┆ 270.012 ┆ 0.0 ┆ 0.0 ┆ fixed_a ┆ fixed_ │\n", + "│ ┆ ┆ izero\"] ┆ ┆ 403 ┆ 561 ┆ ┆ ┆ ngle ┆ energy │\n", + "│ 88162 ┆ 456 ┆ [\"znpc_ ┆ [] ┆ 249.998 ┆ 364.977 ┆ 0.0 ┆ 0.0 ┆ fixed_a ┆ fixed_ │\n", + "│ ┆ ┆ izero\"] ┆ ┆ 516 ┆ 313 ┆ ┆ ┆ ngle ┆ energy │\n", + "│ 88163 ┆ 23 ┆ [\"znpc_ ┆ [] ┆ 249.998 ┆ 272.009 ┆ 0.0 ┆ 0.0 ┆ fixed_a ┆ fixed_ │\n", + "│ ┆ ┆ izero\"] ┆ ┆ 516 ┆ 097 ┆ ┆ ┆ ngle ┆ energy │\n", + "│ 88164 ┆ 22 ┆ [\"znpc_ ┆ [] ┆ 249.998 ┆ 271.001 ┆ 20.0 ┆ 20.0 ┆ fixed_a ┆ fixed_ │\n", + "│ ┆ ┆ izero\"] ┆ ┆ 516 ┆ 602 ┆ ┆ ┆ ngle ┆ energy │\n", + "│ 88165 ┆ 456 ┆ [\"znpc_ ┆ [] ┆ 249.996 ┆ 364.969 ┆ 20.0 ┆ 20.0 ┆ fixed_a ┆ fixed_ │\n", + "│ ┆ ┆ 20\"] ┆ ┆ 629 ┆ 277 ┆ ┆ ┆ ngle ┆ energy │\n", + "│ 88166 ┆ 67 ┆ [\"znpc_ ┆ [] ┆ 249.998 ┆ 283.594 ┆ 15.0 ┆ 15.0 ┆ fixed_a ┆ fixed_ │\n", + "│ ┆ ┆ 20\"] ┆ ┆ 516 ┆ 643 ┆ ┆ ┆ ngle ┆ energy │\n", + "│ 88167 ┆ 456 ┆ [\"znpc_ ┆ [] ┆ 249.998 ┆ 364.969 ┆ 15.0 ┆ 15.0 ┆ fixed_a ┆ fixed_ │\n", + "│ ┆ ┆ 15\"] ┆ ┆ 516 ┆ 277 ┆ ┆ ┆ ngle ┆ energy │\n", + "│ 88168 ┆ 2 ┆ [\"znpc_ ┆ [] ┆ 249.998 ┆ 250.996 ┆ 10.0 ┆ 10.0 ┆ fixed_a ┆ fixed_ │\n", + "│ ┆ ┆ 10\"] ┆ ┆ 516 ┆ 605 ┆ ┆ ┆ ngle ┆ energy │\n", + "│ 88169 ┆ 456 ┆ [\"znpc_ ┆ [] ┆ 250.002 ┆ 365.005 ┆ 10.0 ┆ 10.0 ┆ fixed_a ┆ fixed_ │\n", + "│ ┆ ┆ 10\"] ┆ ┆ 293 ┆ 442 ┆ ┆ ┆ ngle ┆ energy │\n", + "│ 88170 ┆ 2 ┆ [\"znpc\" ┆ [] ┆ 249.996 ┆ 250.000 ┆ 0.0 ┆ 0.0 ┆ single_ ┆ fixed_ │\n", + "│ ┆ ┆ ] ┆ ┆ 629 ┆ 403 ┆ ┆ ┆ point ┆ energy │\n", + "│ 88171 ┆ 1845 ┆ [\"znpc\" ┆ [] ┆ 249.996 ┆ 288.611 ┆ 0.0 ┆ 60.0 ┆ fixed_e ┆ fixed_ │\n", + "│ ┆ ┆ ] ┆ ┆ 629 ┆ 071 ┆ ┆ ┆ nergy ┆ energy │\n", + "│ 88172 ┆ 1 ┆ [\"znpc\" ┆ [\"i0\"] ┆ 249.996 ┆ 249.996 ┆ 5.0 ┆ 5.0 ┆ single_ ┆ fixed_ │\n", + "│ ┆ ┆ ] ┆ ┆ 629 ┆ 629 ┆ ┆ ┆ point ┆ energy │\n", + "│ 88173 ┆ 6 ┆ [\"znpc\" ┆ [\"i0\"] ┆ 250.002 ┆ 255.008 ┆ 5.0 ┆ 5.0 ┆ fixed_a ┆ fixed_ │\n", + "│ ┆ ┆ ] ┆ ┆ 293 ┆ 95 ┆ ┆ ┆ ngle ┆ energy │\n", + "│ 88174 ┆ 1824 ┆ [\"znpc\" ┆ [\"i0\"] ┆ 249.992 ┆ 365.009 ┆ 0.0 ┆ 20.0 ┆ fixed_e ┆ fixed_ │\n", + "│ ┆ ┆ ] ┆ ┆ 855 ┆ 461 ┆ ┆ ┆ nergy ┆ energy │\n", + "│ 88423 ┆ 4 ┆ [\"binar ┆ [] ┆ 249.998 ┆ 250.000 ┆ 0.0 ┆ 0.0 ┆ single_ ┆ fixed_ │\n", + "│ ┆ ┆ y\"] ┆ ┆ 516 ┆ 403 ┆ ┆ ┆ point ┆ energy │\n", + "│ 88425 ┆ 1 ┆ [\"binar ┆ [] ┆ 250.000 ┆ 250.000 ┆ 0.0 ┆ 0.0 ┆ single_ ┆ fixed_ │\n", + "│ ┆ ┆ y\"] ┆ ┆ 403 ┆ 403 ┆ ┆ ┆ point ┆ energy │\n", + "│ 88426 ┆ 1183 ┆ [\"binar ┆ [] ┆ 249.996 ┆ 286.010 ┆ 0.0 ┆ 60.0 ┆ fixed_e ┆ fixed_ │\n", + "│ ┆ ┆ y\"] ┆ ┆ 629 ┆ 368 ┆ ┆ ┆ nergy ┆ energy │\n", + "│ 88429 ┆ 340 ┆ [\"binar ┆ [] ┆ 285.995 ┆ 286.017 ┆ 0.0 ┆ 60.0 ┆ fixed_e ┆ fixed_ │\n", + "│ ┆ ┆ y\"] ┆ ┆ 529 ┆ 789 ┆ ┆ ┆ nergy ┆ energy │\n", + "│ 88430 ┆ 1315 ┆ [\"terna ┆ [] ┆ 249.996 ┆ 286.007 ┆ 0.0 ┆ 60.0 ┆ fixed_e ┆ fixed_ │\n", + "│ ┆ ┆ ry\"] ┆ ┆ 629 ┆ 895 ┆ ┆ ┆ nergy ┆ energy │\n", + "└─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴────────┘\n" + ] + } + ], + "source": [ + "import polars as pl\n", + "summary_all = summarize_beamtime_scans(BEAMTIME)\n", + "\n", + "assert summary_all.height > 0, \"no scans found for beamtime\"\n", + "# Configure polars to print all rows\n", + "pl.Config.set_tbl_rows(-1)\n", + "pl.Config.set_tbl_cols(-1)\n", + "print(summary_all)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "75825b90", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "shape: (1, 10)\n", + "┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬────────┐\n", + "│ scan_nu ┆ n_frame ┆ sample_ ┆ tags ┆ energy_ ┆ energy_ ┆ theta_m ┆ theta_m ┆ inferre ┆ catalo │\n", + "│ mber ┆ s ┆ names ┆ --- ┆ min ┆ max ┆ in ┆ ax ┆ d_scan_ ┆ g_scan │\n", + "│ --- ┆ --- ┆ --- ┆ list[st ┆ --- ┆ --- ┆ --- ┆ --- ┆ type ┆ _type │\n", + "│ i64 ┆ i64 ┆ list[st ┆ r] ┆ f64 ┆ f64 ┆ f64 ┆ f64 ┆ --- ┆ --- │\n", + "│ ┆ ┆ r] ┆ ┆ ┆ ┆ ┆ ┆ str ┆ str │\n", + "╞═════════╪═════════╪═════════╪═════════╪═════════╪═════════╪═════════╪═════════╪═════════╪════════╡\n", + "│ 88174 ┆ 1824 ┆ [\"znpc\" ┆ [\"i0\"] ┆ 249.992 ┆ 365.009 ┆ 0.0 ┆ 20.0 ┆ fixed_e ┆ fixed_ │\n", + "│ ┆ ┆ ] ┆ ┆ 855 ┆ 461 ┆ ┆ ┆ nergy ┆ energy │\n", + "└─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴────────┘\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "dataframe filtered\n" + ] + } + ], + "source": [ + "# Grab i0 scan for 88174\n", + "# The error says there is no \"Sample Theta\" column, but there is \"theta_min\" and \"theta_max\".\n", + "# If we want theta = 0.0, let's match both to 0.0 (or just \"theta_min\" if that's what user expects)\n", + "i0_scan = summary_all.filter(\n", + " (pl.col(\"scan_number\") == 88174)\n", + ")\n", + "print(i0_scan)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "b6b803d1", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "dataframe filtered\n" + ] + }, { "data": { - "text/html": [ - "
\n", - "shape: (20, 10)
scan_numbern_framessample_namestagsenergy_minenergy_maxtheta_mintheta_maxinferred_scan_typecatalog_scan_type
i64i64list[str]list[str]f64f64f64f64strstr
88147616["opv"]["ternary"]249.996629284.4116440.060.0"fixed_energy""fixed_energy"
88148724["opv"]["ternary"]284.39697286.0128420.060.0"fixed_energy""fixed_energy"
88149336["opv"]["ternary"]285.995529286.0054210.060.0"fixed_energy""fixed_energy"
8815024["opv"]["ternary"]249.998516250.0004030.02.182"fixed_energy""fixed_energy"
881511351["opv"]["binary"]249.996629286.0078950.060.0"fixed_energy""fixed_energy"
88162456["znpc_izero"][]249.998516364.9773130.00.0"fixed_angle""fixed_energy"
8816323["znpc_izero"][]249.998516272.0090970.00.0"fixed_angle""fixed_energy"
8816422["znpc_izero"][]249.998516271.00160220.020.0"fixed_angle""fixed_energy"
88165456["znpc_20"][]249.996629364.96927720.020.0"fixed_angle""fixed_energy"
8816667["znpc_20"][]249.998516283.59464315.015.0"fixed_angle""fixed_energy"
" - ], + "image/png": "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t95669km7dCk5zznOcMv//IvD+9///uHm266afjGb/zG4XGPe9xwzz33cJ7v+77vG2688cbhrW996/Ce97xneOYznzl81Vd9Fd8/efLk8JSnPGV49rOfPfyv//W/hv/+3//7cN111w0vf/nLzxKq8z+9613vGh7/+McPX/zFXzz84A/+IF9feXHm0mc/+9nh8z7v84bv+q7vGt75zncOH/3oR4ff/u3fHj7ykY9wnle96lXDVVddNfz6r//68Ed/9EfD3/k7f2d4whOeMNx///2c5+u//uuHpz3tacMf/MEfDP/zf/7P4Qu/8AuHv//3//5ZQnV+pp/+6Z8err322uFNb3rT8LGPfWz4tV/7teHyyy8ffuEXfoHzrLw4v9N5F6B8xVd8xfCiF72If586dWp4zGMeM7zyla88q3Qd5nTbbbdNb85++9vfPv2+4447hosuumgyCJT+5E/+ZMrzjne8Y/o9OsEjR44Mt9xyC+d5zWteM1x55ZXDgw8+eBZQnN/p7rvvHr7oi75oeMtb3jL8tb/21zhAWXlxZtOP/uiPDl/zNV9TvX/69OnhhhtuGH72Z3+Wr408OnHixPCf/tN/mn7/8R//8cSfd7/73Zznt37rt4bNZjN84hOfOGAEhyc997nPHf7RP/pH6tq3fMu3DN/xHd8xfV95cf6n82qK56GHHkrvfe97p2E6fC/P+Psd73jHWaXtMKc777xTvaRx5MHDDz+s+PDEJz4xPe5xj2M+jJ/j0Pf111/PeZ7znOdML+36wAc+cMYxnO9pnMIZp2iwzce08uLMpv/23/5b+rIv+7L09/7e35umyr7kS74k/ft//+/5/sc+9rF0yy23KH6M7x0Zp6KRH+NUwlgOpTH/aMve+c53nmFE52/6qq/6qvTWt741/emf/un0+4/+6I/S7/3e76Vv+IZvmH6vvDj/03n1ssBPf/rT07wjGtoxjb8/+MEPnjW6DnM6ffr0tN7hq7/6q9NTnvKU6dqo9MePH58U2/JhvEd5Ij7RvTX1pze84Q3pD//wD9O73/1ud2/lxZlNH/3oR9NrXvOa9LKXvSz9s3/2zyae/JN/8k8mHrzgBS/g9ozaG/kxBjeYjh07NnUAVn70px/7sR+bguwxID969OjkG376p396Wk8yppUX5386rwKUNZ2dnvv73//+qWeypjOfxtfD/+AP/mB6y1veMi0KX9PZD9jH3va//tf/evo9jqCM+vHa1752ClDWdObSf/kv/yW9/vWvT7/6q7+a/spf+SvppptumjpTj3nMY1ZeHJJ0Xk3xXHfddVOkbHcojL9vuOGGs0bXYU0vfvGL05ve9Kb0O7/zO+mxj30sXx/bepxuu+OOO6p8GD8jPtG9NfWlcQrntttuS1/6pV869ezGv7e//e3pF3/xF6fvY29w5cWZS+NukCc/+cnq2pOe9KRplxS2Z8tGjZ8jTzGNO6rG3SQrP/rTuBNtHEX59m//9mkK8zu/8zvTS1/60mkX4phWXpz/6bwKUMZh1Gc84xnTvCP2aMbfz3rWs84qbYcpjYunx+DkjW98Y3rb2942bePDNPLgoosuUnwYtyGPRpr4MH6+733vU8o/jgKMW/msgV9TPX3t137t1I5j75D+xh78OIxN31denLk0TnXaLffjGojP+7zPm76PujI6NuTHOA0xrmdAfowB5Rh8Uhr1bLRl4/qINfWl++67b1orgmnswI7tOKaVF4cgDefhNuNxFfbrXve6aQX2937v907bjHGHwpp2S9///d8/bc373d/93eFTn/oU/913331qa+u49fhtb3vbtLX1Wc961vRnt7Z+3dd93bRV+c1vfvPwyEc+ct3auoeEu3jGtPLizG71Pnbs2LTF9cMf/vDw+te/frj00kuH//gf/6Pa2jrapN/4jd8Y/vf//t/DN3/zN4dbW7/kS75k2qr8e7/3e9MOrXVr67L0ghe8YPhLf+kv8Tbj//pf/+u0ff5HfuRHOM/Ki/M7nXcBypj+zb/5N5NBHs9DGbcdj/vX17S/NMat0d94NgqlUcH/8T/+x8MjHvGIyUD/3b/7d6cgBtOf//mfD9/wDd8wXHLJJZPh+KEf+qHh4YcfPguIDneAsvLizKbf/M3fnAK+saP0xCc+cfh3/+7fqfvj9taf+ImfGK6//vopz9d+7dcOH/rQh1Sez3zmM5MTHM/tGLd7f/d3f/e0lXxN/emuu+6a9GD0BRdffPHw+Z//+cM//+f/XG2dX3lxfqfN+N/ZHsVZ05rWtKY1rWlNazpv16CsaU1rWtOa1rSmCyOtAcqa1rSmNa1pTWs659IaoKxpTWta05rWtKZzLq0ByprWtKY1rWlNazrn0hqgrGlNa1rTmta0pnMurQHKmta0pjWtaU1rOufSGqCsaU1rWtOa1rSmcy6tAcqa1rSmNa1pTWs659IaoKxpTWta05rWtKZzLq0ByprWtKY1rWlNazrn0hqgrGlNa1rTmta0pnMurQHKmta0pjWtaU1rSuda+v8B1zz4TS2W3bAAAAAASUVORK5CYII=", "text/plain": [ - "shape: (20, 10)\n", - "┌───────────┬──────────┬───────────┬───────────┬───┬───────────┬───────────┬───────────┬───────────┐\n", - "│ scan_numb ┆ n_frames ┆ sample_na ┆ tags ┆ … ┆ theta_min ┆ theta_max ┆ inferred_ ┆ catalog_s │\n", - "│ er ┆ --- ┆ mes ┆ --- ┆ ┆ --- ┆ --- ┆ scan_type ┆ can_type │\n", - "│ --- ┆ i64 ┆ --- ┆ list[str] ┆ ┆ f64 ┆ f64 ┆ --- ┆ --- │\n", - "│ i64 ┆ ┆ list[str] ┆ ┆ ┆ ┆ ┆ str ┆ str │\n", - "╞═══════════╪══════════╪═══════════╪═══════════╪═══╪═══════════╪═══════════╪═══════════╪═══════════╡\n", - "│ 88147 ┆ 616 ┆ [\"opv\"] ┆ [\"ternary ┆ … ┆ 0.0 ┆ 60.0 ┆ fixed_ene ┆ fixed_ene │\n", - "│ ┆ ┆ ┆ \"] ┆ ┆ ┆ ┆ rgy ┆ rgy │\n", - "│ 88148 ┆ 724 ┆ [\"opv\"] ┆ [\"ternary ┆ … ┆ 0.0 ┆ 60.0 ┆ fixed_ene ┆ fixed_ene │\n", - "│ ┆ ┆ ┆ \"] ┆ ┆ ┆ ┆ rgy ┆ rgy │\n", - "│ 88149 ┆ 336 ┆ [\"opv\"] ┆ [\"ternary ┆ … ┆ 0.0 ┆ 60.0 ┆ fixed_ene ┆ fixed_ene │\n", - "│ ┆ ┆ ┆ \"] ┆ ┆ ┆ ┆ rgy ┆ rgy │\n", - "│ 88150 ┆ 24 ┆ [\"opv\"] ┆ [\"ternary ┆ … ┆ 0.0 ┆ 2.182 ┆ fixed_ene ┆ fixed_ene │\n", - "│ ┆ ┆ ┆ \"] ┆ ┆ ┆ ┆ rgy ┆ rgy │\n", - "│ 88151 ┆ 1351 ┆ [\"opv\"] ┆ [\"binary\" ┆ … ┆ 0.0 ┆ 60.0 ┆ fixed_ene ┆ fixed_ene │\n", - "│ ┆ ┆ ┆ ] ┆ ┆ ┆ ┆ rgy ┆ rgy │\n", - "│ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … │\n", - "│ 88162 ┆ 456 ┆ [\"znpc_iz ┆ [] ┆ … ┆ 0.0 ┆ 0.0 ┆ fixed_ang ┆ fixed_ene │\n", - "│ ┆ ┆ ero\"] ┆ ┆ ┆ ┆ ┆ le ┆ rgy │\n", - "│ 88163 ┆ 23 ┆ [\"znpc_iz ┆ [] ┆ … ┆ 0.0 ┆ 0.0 ┆ fixed_ang ┆ fixed_ene │\n", - "│ ┆ ┆ ero\"] ┆ ┆ ┆ ┆ ┆ le ┆ rgy │\n", - "│ 88164 ┆ 22 ┆ [\"znpc_iz ┆ [] ┆ … ┆ 20.0 ┆ 20.0 ┆ fixed_ang ┆ fixed_ene │\n", - "│ ┆ ┆ ero\"] ┆ ┆ ┆ ┆ ┆ le ┆ rgy │\n", - "│ 88165 ┆ 456 ┆ [\"znpc_20 ┆ [] ┆ … ┆ 20.0 ┆ 20.0 ┆ fixed_ang ┆ fixed_ene │\n", - "│ ┆ ┆ \"] ┆ ┆ ┆ ┆ ┆ le ┆ rgy │\n", - "│ 88166 ┆ 67 ┆ [\"znpc_20 ┆ [] ┆ … ┆ 15.0 ┆ 15.0 ┆ fixed_ang ┆ fixed_ene │\n", - "│ ┆ ┆ \"] ┆ ┆ ┆ ┆ ┆ le ┆ rgy │\n", - "└───────────┴──────────┴───────────┴───────────┴───┴───────────┴───────────┴───────────┴───────────┘" + "
" ] }, - "execution_count": 9, "metadata": {}, - "output_type": "execute_result" + "output_type": "display_data" } ], "source": [ - "summary_all = summarize_beamtime_scans(BEAMTIME, catalog_path=CATALOG_PATH)\n", + "import matplotlib.pyplot as plt\n", "\n", - "assert summary_all.height > 0, \"no scans found for beamtime\"\n", - "summary_all.head(20)" + "def get_frames_for_scan(scan_number):\n", + " frames = view.frames.filter(view.frames[\"scan_number\"].eq(scan_number))\n", + " return frames\n", + "\n", + "# Get the frames for the i0 scan\n", + "i0_frames = get_frames_for_scan(88174)\n", + "test_img = get_image(i0_frames, 1)\n", + "plt.imshow(test_img, cmap=\"terrain\")\n", + "plt.show()" ] }, { "cell_type": "code", - "execution_count": 20, - "id": "076191df", + "execution_count": 99, + "id": "79dd7268", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", + "dataframe filtered\n", "dataframe filtered\n" ] - }, + } + ], + "source": [ + "import numpy as np\n", + "from dataclasses import dataclass\n", + "\n", + "@dataclass\n", + "class BeamLocation:\n", + " row: int\n", + " col: int\n", + "\n", + "def bg_subtract(image):\n", + " quartiles = np.percentile(image, [5])\n", + " # Subtract the 5th percentile from the image\n", + " image = image - quartiles[0]\n", + " return image\n", + "\n", + "def edge_subtract(image):\n", + " # Use the edge of the image as a metric for the background using 5 pixels from the edge\n", + " left = image[:, :5]\n", + " right = image[:, -5:]\n", + " top = image[:5, :]\n", + " bottom = image[-5:, :]\n", + " edge_mean = (left.mean() + right.mean() + top.mean() + bottom.mean()) / 4\n", + " image = image - edge_mean\n", + " return image\n", + "\n", + "def pre_process(image):\n", + " # Slice the left, right, top, bottom 10% of the image\n", + " image = image[10:-10, 10:-10]\n", + " # Perform a background subtraction\n", + " image = bg_subtract(image)\n", + " image = edge_subtract(image)\n", + " return image\n", + "\n", + "def direct_beam(image):\n", + " # Get the\n", + " processed_image = pre_process(image)\n", + " # Find the location of the max value in the image\n", + " max_row, max_col = np.unravel_index(processed_image.argmax(), processed_image.shape)\n", + " raw_max = BeamLocation(row=max_row, col=max_col)\n", + " # Per row integration and look for a peak in the integrated signal\n", + " integrated_signal = np.sum(processed_image, axis=1)\n", + " peak_row = int(np.argmax(integrated_signal))\n", + " # Get the col from the max in the peak row\n", + " peak_col = int(np.argmax(processed_image[peak_row, :]))\n", + " peak_location = BeamLocation(row=peak_row, col=peak_col)\n", + " return raw_max, mid_point, peak_location\n", + "\n", + "# Dataframe constructor on the beamspot locations to compare each method\n", + "\n", + "data = []\n", + "\n", + "# Build a mapping from frame_number to its position/index in the dataframe, if required by get_image\n", + "if \"frame_number\" in i0_frames.columns:\n", + " # Get index positions of each frame number\n", + " frame_to_idx = {frame: idx for idx, frame in enumerate(i0_frames[\"frame_number\"])}\n", + "else:\n", + " frame_to_idx = {}\n", + "\n", + "for frame in i0_frames[\"frame_number\"].unique():\n", + " # Defensive: handle potential missing frames or mismatch in index\n", + " idx = frame_to_idx.get(frame, None)\n", + " try:\n", + " image = get_image(i0_frames, idx if idx is not None else frame)\n", + " result = direct_beam(image)\n", + " # Handle older direct_beam return signature\n", + " if len(result) == 3:\n", + " raw_max, mid_point, peak_location = result\n", + " else:\n", + " raw_max, peak_location = result\n", + " energy_series = i0_frames.filter(pl.col(\"frame_number\").eq(frame))[\"Beamline Energy\"].unique()\n", + " energy = energy_series[0] if len(energy_series) else None\n", + " data.append({\n", + " \"method\": \"direct_beam\",\n", + " \"frame_number\": frame,\n", + " \"row\": raw_max.row,\n", + " \"col\": raw_max.col,\n", + " \"energy\": energy,\n", + " })\n", + " data.append({\n", + " \"method\": \"peak_location\",\n", + " \"frame_number\": frame,\n", + " \"row\": peak_location.row,\n", + " \"col\": peak_location.col,\n", + " \"energy\": energy,\n", + " })\n", + " except Exception as e:\n", + " print(f\"Skipping frame {frame} due to error: {e}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 100, + "id": "8a4cf758", + "metadata": {}, + "outputs": [ { - "ename": "RuntimeError", - "evalue": "[FitsError] kind=Io retryable=Temporary message=raw_pixels open source=No such file or directory (os error 2)", - "output_type": "error", - "traceback": [ - "\u001b[31m---------------------------------------------------------------------------\u001b[39m", - "\u001b[31mRuntimeError\u001b[39m Traceback (most recent call last)", - "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[20]\u001b[39m\u001b[32m, line 4\u001b[39m\n\u001b[32m 1\u001b[39m frames_subset = view.frames.filter(view.frames[\u001b[33m\"\u001b[39m\u001b[33mscan_number\u001b[39m\u001b[33m\"\u001b[39m].is_in(selected_scans))\n\u001b[32m 2\u001b[39m \u001b[38;5;28;01massert\u001b[39;00m frames_subset.height > \u001b[32m0\u001b[39m, \u001b[33m\"\u001b[39m\u001b[33mno frame rows for selected scans\u001b[39m\u001b[33m\"\u001b[39m\n\u001b[32m----> \u001b[39m\u001b[32m4\u001b[39m img = \u001b[43mget_image\u001b[49m\u001b[43m(\u001b[49m\u001b[43mframes_subset\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[32;43m1\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[32m 6\u001b[39m plt.figure(figsize=(\u001b[32m6\u001b[39m, \u001b[32m4\u001b[39m))\n\u001b[32m 7\u001b[39m plt.imshow(img, cmap=\u001b[33m\"\u001b[39m\u001b[33mmagma\u001b[39m\u001b[33m\"\u001b[39m)\n", - "\u001b[36mFile \u001b[39m\u001b[32m~/projects/pyref/python/pyref/io/readers.py:495\u001b[39m, in \u001b[36mget_image\u001b[39m\u001b[34m(meta_df, row_index)\u001b[39m\n\u001b[32m 492\u001b[39m \u001b[38;5;250m\u001b[39m\u001b[33;03m\"\"\"Return raw detector pixels for ``row_index`` via the Rust image bridge.\"\"\"\u001b[39;00m\n\u001b[32m 493\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mpyref\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mpyref\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m py_get_image\n\u001b[32m--> \u001b[39m\u001b[32m495\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mpy_get_image\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmeta_df\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrow_index\u001b[49m\u001b[43m)\u001b[49m\n", - "\u001b[31mRuntimeError\u001b[39m: [FitsError] kind=Io retryable=Temporary message=raw_pixels open source=No such file or directory (os error 2)" - ] + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAAfGCAYAAAAKkN3NAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzsnQe4HFX5/9/ZXm5PDwkJECAQIFQJRXqHUEQQsADiT+VPE1SKKEVFUBQQ6R0LCkhHeg8thBIIJYGEBEJIu8mt28v8n/fMObMzszOzM3t375b7fp5ns2Xq7t3sme/5vkWSZVkGgiAIgiAIgiAIgiAqjqfyuyQIgiAIgiAIgiAIAiHRTRAEQRAEQRAEQRBVgkQ3QRAEQRAEQRAEQVQJEt0EQRAEQRAEQRAEUSVIdBMEQRAEQRAEQRBElSDRTRAEQRAEQRAEQRBVgkQ3QRAEQRAEQRAEQVQJEt0EQRAEQRAEQRAEUSVIdBMEQRAEQRAEQRBElSDRTRAVRJIkuOSSS4b9uHvttRdstdVWw35cgiAIgmhWaEwnGu27Q9QvJLqJumPBggXw7W9/G6ZMmQKhUAg22GAD2H///eFvf/sbjBTwhxp/sEvdcGCuFn/4wx/g4YcfhuEin8/Dn/70J9hoo43Y332bbbaBf//734637+3thR//+McwZswYiEajsPfee8O7775b8fM86aSTdH+DYDAIm222GVx00UWQTCYrfjyCIIhGhsZ0GtPreUwXvPTSS/Ctb30Lxo8fD4FAAMaOHQuzZ8+GBx98sGrHJEYWvlqfAEFoef3119kP64Ybbgj/93//x378li9fDm+++Sb89a9/hTPOOANGAvjDP23aNPX54OAgnHrqqXDUUUexZYJx48ZVdYDGC6UjjzwShoMLL7wQrrjiCvZ332mnneCRRx6BE044gV2IHHfccSUH90MPPRTef/99+OUvfwmjR4+GG264gV3AvPPOO7DppptW9FxRaN92223scV9fHzvX3/3ud7BkyRL417/+VdFjEQRBNCo0pivQmF7fY/rFF18Mv/3tb9l+f/KTn7AJonXr1sETTzwBRx99NBvX8dwJYkjIBFFHHHLIIfKYMWPknp6eomWrV6+W6x38L3XxxRdXfL9r16613feee+4pz5gxo6LHjEaj8oknnigPB1999ZXs9/vl0047TX0tn8/L3/zmN+VJkybJ2WzWdvt7772XfT7333+/+tqaNWvkjo4O+fjjj6/oueJngp+NFjzXWbNmyZIkyatWraro8QiCIBoVGtPNoTG9fsZ0PAYe69vf/racTqeLlj/11FPyY489VjffHaJxofByoq5Ap3DGjBnQ0dFRtAxDfbTceeedsM8++7DX0Xnccsst4cYbbyzaburUqXDYYYex0KEdd9wRwuEwbL311uw5gqFD+BzDn3bYYQd47733isKJW1pa4PPPP4cDDzyQhTlNnDiRzYoqv6v2rFixAn74wx+yGWw8T3x/d9xxB1SDjz/+mLkKkUiEhfBhaJeRVCrFZnVx1h3PZ/LkyXDuueey1wU4Ex2LxeDuu+9Ww97wc0C++OIL+H//7//B5ptvzj7LUaNGwTHHHAPLli0z/XvirRQ4A57JZNh+teeATsBXX30Fb7zxhu32//3vf9nnq3UMMCTt2GOPZfvWvrdqgOe6++67s+8Dfk+04Ow8/s3xs8bvzWmnncbC5gTXXnsteL1e3Wt/+ctf2D7POecc9bVcLgetra1w3nnnVfW9EARBVAoa04cGjenVH9N/85vfQFdXF/sb+v3+ouX4HcHvm2DNmjVwyimnsPPD79jMmTPZ50oQpSDRTdQVGNKDoUMffvhhyXVxMMb1f/WrXzGRggMN/sBff/31ResuXryYhQZhfs7ll18OPT097DGGDJ199tnwve99Dy699FI2mOCPOoY2aUHBc9BBB7EfWRz0cCDHQQ5vdqxevRpmzZoFzz33HJx++uksnA4HRvzBvuaaa6CS4HvCc8QBAD+P6dOnM4H25JNPquvg+zr88MPhz3/+M3v/mFOHoWZXX301fOc731HX+8c//sEG729+85vsMd4w5AqZN28eCxnE8DAUjD/96U/h+eefZ2Ff8Xhcd0777rsvu5UCL4rwwmeLLbbQvf6Nb3xDXV5q++233x48Hk/R9nhOn376KVQbcYHS2dmpy+NDkY0XdPg3wTC1m2++GQ444AB2QYLgZ4x/l1dffVXdbs6cOey94L32PWJI4h577FH190IQBFEJaEwvHxrTqz+mf/bZZ7Bw4UL2meGkdikSiQT7XPDz++53vwtXXnkltLe3swkM/C4QhC21ttoJQsszzzwje71edttll13kc889V3766adNQ37i8XjRawceeKC88cYb616bMmUKC/N5/fXX1ddw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c9GN1curWnGyVHh5mU63UkgtX6UelM2LMQy/WS5fao0nqSmAht/rspzuEqI7U5zTjUzuisA3pnax/0sPzye3myCIeqBaLcOI+gov1zw2XtBVNKdbEbpZjx/SWeW9BALORXcqpozRcYjoXpc8pZ1ucexynO4BCEPA64HWoM+8mFqjVDAfXK0Ud8We4+2Ti5e38BZiJLoJorhF2NRRiujO5uXi4g7D6nQ7r15elNNNTrcD7MPLicrgSxlEt6HyeHk53UnTnG5teLmxoNpD764Y9kk0giAIJ11HKtMyrEmmiof5d7qSolvW5NjrWoYZC6lV8nqDtwzLgCKSEX8w4Fx0D/ax+4SnEFqubTtm63SLdmXGUHeH4eXocreEuOhOGc5VFCWrd6dbuNztk1gFeeuc7tUwkiDRTdgiwskntIcgyMNdhruYmtuxRvykG7OItIMIhUmbI5UKL6cCdBUhkFZE96AcKt/pFuHlQd7OxCDcC0538c/8IVtPYAP7otUD8PFKTQV0giCIumcE5nQPN5V0ui0mVIyF1Cp6TO4up2SfWgzYy8WfXY9tQSauTGqnvHrRLQqped043SLU3Ynohgi71m7hTvdAozrdVu3CinK6GyA3vYKQ6CZsEQK7IxKAzkigJsXUtHncTlw58fuuFYzY+krvfNOwbIZRZFMhteoQyipCd5XcNQSnm4vutommLcOswsuR9rAf9t9CCe+int0EQTRty7Bmyekebqe7gil4Ondb+7cxiGypku+Ru81JLroxT1oIZieiO5tQxui0zyi6letgL1g73VJZTne/3ukW4eWpBu3VLSYFzPK5EWoZRhB6UOCK8PLOqB86Iv6aFFNz73RLRYLR2DKMwqbNaSSR3ciXUtG8MsCuVEV3svzwciG6LVqGmYWXawuqPTL/a8jmqMYBQRC1hPp0j4RCavY53ZV3upN5RbxijrQbpzvPRXfW16J73esgvFwyONvG53ZOdz+EmdPdKsLLG97pNvToFlDLMILQE0vnWA430hEuON1CiNcCNwK8uE+3tpBa/YrJWtJILcPq50zc05of0DndkqEImqvwctXpNrQMswkvR/bcfAx0RQPQPZiCOYu73R+fIAiiBlCf7ubo011UvbySCKc7r0w6Y460G9EtcxGc9etFtyTCyyFb8tg5/j10I7odO90Yls23abh2YVrRje3PUoMwUiDR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UhHWdAMAAAAAAADECIJuAAAAAAAAgBhB0A0AAAAAAAAQIwi6AQAAAAAAAGIEQTcAAAAAAABAjCDoBgAAAAAAAIgRBN0AAAAAAAAAMYKgGwAAAAAAACBGEHQDAAAAAAAAxAiCbgCISFtbW6I3AQAAACKAfThAfCHoBkgBLpeL5s6dS/369aOsrCwaNWoUvfnmm+KyL7/8kkwmE33++ec0ZswYys7OpgkTJtCWLVu87uO9996j448/njIzM6l///50//33U3t7u/tyvo+nn36azj77bMrJyaGHH35YnP/QQw9RaWkp5eXl0a9+9Su68847afTo0eKyJUuWkM1mo0OHDnk91s0330yTJk2KwysDAABgbNiHA6QBCQCS3kMPPSQNGTJEWrBggbR9+3Zp3rx5kt1ul7788kvpiy++kPhPfdy4ceLnjRs3SpMmTZImTJjgvv2SJUuk/Px86fnnnxe3//TTT6W+fftK9913n/s6fB+lpaXSf/7zH3Gd3bt3Sy+99JKUmZkpztuyZYt0//33i/sZNWqU+3aDBg2SHnnkEffPDodDKikpEbcBAABId9iHA6Q+BN0ASa6lpUXKzs6Wli9f7nX+7NmzpV/84hfuHfZnn33mvuzDDz8U5zU3N4ufp0yZIv3xj3/0uv1///tfqXv37u6f+fo333yz13X4Q8ANN9zgdd7EiRO9dth//vOfpaFDh7p/fuutt6Tc3FypoaEh6ucOAACQzLAPB0gPKC8HSHLbtm2jpqYm+ulPf0q5ubnurxdffJG2b9/uvt7IkSPd33fv3l2cVlRUiNPvv/+eHnjgAa/bX3311XTw4EFx3youbdPi8raf/OQnXuf5/nzllVeKbfz666/Fz88//zxdeOGForwNAAAgnWEfDpAerIneAACITkNDgzj98MMPqWfPnl6X2e12906b12Vp13ap68jU++D1X+eff77f/fP6MFUkO1leKzZz5kyaN2+eWK/28ccfizVqAAAA6Q77cID0gKAbIMkNGzZM7Jj37NlDJ598st/l2iPlwXDzFT7iPWDAgLAee/DgwbRq1Sq6/PLL3efxz764OcsvfvELKi8vp2OOOYYmTpwY1uMAAACkIuzDAdIDgm6AJMcdR2+77Ta65ZZbxFHvk046iWpra+mrr76i/Px86tOnT6f3ce+999JZZ51FvXv3pp/97GdkNptFudqG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/67x/y8AQKJgnx457NONtU9///33xelll10W0vU/++wz8f/Uv39/sZ6d9/Pcx2DixIn03XffhXxQAlKcBJAgn376qWSxWMTXiSeeKN1+++3SJ598IjkcDr/rNjU1+Z03ffp0qX///l7n9enThw9dS8uXL3efx/fJ52VlZUm7d+92n//Pf/5TnP/FF1+4z7viiivEeTfddJP7PJfLJZ155plSRkaGdOTIEff5fL0//OEP7p9nz54tde/eXaqsrPTaposuukgqKCgI+BwC4cfwvW+tk08+WVz+4osvus9rbW2VysrKpFmzZrnP++9//yuZzWZp6dKlXrd/5plnxO2/+uor93k5OTniufsKtM0rVqzwe3z1teevcHT0XNXLHnjgAb/LnnrqKXHZ5s2bg973G2+8Ia6zZMkSv8suuOAC8XrpiR+Lfwd4uysqKqRvv/1WmjFjhjj/L3/5i/t6f/vb38R5L730kvs8/p3nv4Hc3Fyprq7Oa/s3bdokfn7//fclu90unX322dLPf/5z921HjhwpnXfeebo+FwCAcGGfHhj26cm3T+d9Kj9WdXV1SNcfPXq0VFpaKh09etR93vfffy/+vy6//HL3efPmzRP3u3PnTt22FZIHysshYbjpFB8V5yO333//vTgCzeVfXFalHmVUcRmUNnvI64a48QaXjPHPWlymduKJJ7p/5q6TjEvZuMGL7/mBumbyUW2VepSbG2bw0cxAeH/91ltviaPv/D1vn/rFz4m3kY926oVLqbRrw/hILx8p1j4Xzp7ykXAu3dJuD78O7Isvvuj0cbSve1tbGx09elSUtXHplO/z4aPheo7B4CPFahmXLy4l1F4nktt3dNtIPffccyIbwiWTfDT+888/F6V/t956q/s6H330kWg484tf/MJ9HjeTUTuwLl682J3pZkuWLHFntLkkj/9u+HvGmXHOKqnXBQBIFOzTI4d9urH26VzJwIJl3bUOHjwoGrxxtVpxcbH7fK5G478J3ucDMATdkFAcRPCaLC6t4sYac+bMEeVF3HWTS51UX331FU2dOtW9VoYDGy4rY747aO1OmHFjF8ZrnwKdz4+txWVpXCLk2yCLBdsBHTlyRARA3M2St037ddVVV+neSIbLwviDgxY3F9E+F25WwuXIvtujPpdQtod3Yvfee6947XhHx+uT+T74ufq+7npTPxxo16pp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xxSKbg326SbEICpxMHXLCmDLsJgj/wcFMTBSKysEivOM3z8hnmimRALTywmJfnp593/5XxdJenlqegwj3RWuMVGLdGdFMdKtfTb5vYpGoI9GaqaHolvDmepB0U1Ch+nlgWCk21SIENbqX6MhutOqARkOcxbWdZuKKVOmoH///sjOzkaDBg1w+umnY926dW7bFBUV4ZprrkHdunWRlZWF8ePHY88edyf6rVu3Yty4cahevbraz2233YayMscYGg+077NA0U1IDLAYm14e00i3R0138RGg9Kj7pHE0jNS03yYaqSUtFN0aTC8nEcD0cu+x0++QHCjdnMQutTw92y6Qo4EzxZyi20zMmzdPCepFixZh1qxZKC0txahRo1BQUODc5qabbsLXX3+Njz/+WG2/c+dOnHnmmc715eXlSnCXlJRgwYIFePPNN/HGG2/g3nvvjX+kWy58aYZKiAndyytZ37CrPeraehhiXtOtRbllTEyvEUUjNU10F0cn0EcjNdPDsK4G08sJiU16ub/nnLiIsXN5FOq5NcSMZv869uo2GTNmzHB7LmJZItXLli3DsGHDkJubi9deew3vvfcehg8frraZPn06OnfurIT6wIEDMXPmTPz111+YPXs2GjZsiF69euGhhx7CHXfcgfvvvx/p6enxi3TTCJWQKKPNqluMdS/PbgzcttF/PbSRaFFp7Zi0dmGRGIsG1afbR3p5NCLdErWXuvFApnQ0UosLjHRr0L2cRADTy70JykiNke7Yo11gRCO13KtX967ovQeJGBHZQp06ddS9iG+Jfo8cOdK5TadOndCiRQssXLhQPZf77t27K8GtMXr0aOTl5WH16tU+36e4uFit198Mhe3CCDGOaFzPZORUvk0sBLdeFGuR7pJ8+31Gdvj71BupWUMwUjMyu1aVdVkqTzGX9xfPFYGR7phC0a3h/ANgpJuQuES6SeL36Pbq1c1It1mpqKjAjTfeiGOPPRbdunVTy3bv3q0i1bVquV+IicCWddo2esGtrdfW+aslr1mzpvPWvHlzgz8M24UREltBXokwH3i1+/OuZwDdzwJOnoq44xnpLnGU14SbWh60kVqG633LtOycVGNd2bUa7UAp5ppzufwfav4rJCZQdGtEI9WDkCTEu6Y72Eg3BXhMa7qzoim6G9vv2avbtEht96pVq/DBBx9E/b0mT56soura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9l433ngjhg4dGoMzQwghhJgbjuGEJAE2QkjC8/DDD9s6depkmzFjhm3jxo226dOn2zIyMmxz5861/fTTTzb5Ux8wYIB6vnr1atvQoUNtgwcPdr5+/vz5tpycHNsbb7yhXj9z5kxbq1atbPfff79zG9lHgwYNbK+//rraZsuWLbZ33nnHlpmZqZatW7fO9sADD6j99OzZ0/m6Dh062J544gnn85KSElu9evXUawghhJBkh2M4IVUfim5CEpyioiJb9erVbQsWLHBbPnHiRNt5553nHLBnz57tXPftt9+qZYWFher5iBEjbI8++qjb699++21b48aNnc9l+xtvvNFtG7kIuOaaa9yWHXvssW4D9uOPP27r3Lmz8/mnn35qy8rKsuXn50f82QkhhJBEhmM4IckB08sJSXA2bNiAo0eP4sQTT0RWVpbz9tZbb2Hjxo3O7Xr06OF83LhxY3W/d+9edf/nn3/iwQcfdHv95Zdfjl27dql9a0hqmx5JbzvmmGPclnk+v/jii9UxLlq0SD1/4403cPbZZ6v0NkIIISSZ4RhOSHKQGu8DIIRERn5+vrr/9ttv0bRpU7d1GRkZzkFb6rL0tV1aHZm2D6n/OvPMM732L/VhGuEMslIrdsopp2D69OmqXu37779XNWqEEEJIssMxnJDkgKKbkASnS5cuamDeunUrjjvuOK/1+plyf4j5isx4t2vXLqT37tixI5YsWYKLLrrIuUyeeyLmLOeddx6aNWuGtm3b4thjjw3pfQghhJCqCMdwQpIDim5CEhxxHL311ltx0003qVnvIUOGIDc3F7/++itycnLQsmXLSvdx77334uSTT0aLFi3wr3/9C1arVaWrrVq1Sjmb+uO6665TKWySsiZuqh9++CFWrFihnFP1jB49Wh2L7EtS4AghhBDCMZyQZIE13YRUAR566CHcc889quVI586dMWaNSIKMAAEAAElEQVTMGJWqJqlgwSAD6jfffIOZM2eif//+GDhwIKZOnVrpYH/BBRdg8uTJ6oJBZto3b96s6r/06WyCXADI8vLycrcZdUIIISTZ4RhOSNXHIm5q8T4IQkjVQcxgGjVqhLfffttt+cSJE7Fv3z589dVXcTs2QgghhPiHYzgh0YHp5YSQsBFX1BdffFHNsqekpOD999/H7NmzMWvWLOc2kia3cuVKvPfeexysCSGEEJPA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EoJuAAAAAACShKAbAAAAAIAkIegGAAAAACBJCLoBAAAAAEgSgm4AAAAAAJKEoBsAAAAAgCQh6AZQL6Wlpek+BAAAUA+04UBqEXQDGcDn82nChAnq1q2bGjRooH333Vcvvviife7999+Xx+PR9OnTNXDgQDVs2FBDhgzR4sWLo97jf//7n/bff38VFhZqjz320C233KKysrLw8+Y9HnroIZ1wwglq1KiR7rjjDrv99ttvV5s2bdSkSRNdcMEFuv7669W/f3/73Icffqi8vDytW7cu6rOuvPJKHXLIISk4MwAAOBttOJAF/ABc7/bbb/f37NnTP3XqVP/y5cv9jz/+uL+goMD//vvv+9977z2/+V990KBB9vHChQv9hxxyiH/IkCHh13/44Yf+pk2b+p944gn7+nfeecfftWtX/8033xzex7xHmzZt/P/+97/tPt9//73/v//9r7+wsNBuW7x4sf+WW26x77PvvvuGX7f33nv777777vDjnTt3+lu1amVfAwBAtqMNBzIfQTfgcsXFxf6GDRv6Z86cGbV93Lhx/jPPPDPcYL/77rvh59544w27bceOHfbxsGHD/HfeeWfU6//zn//427dvH35s9r/yyiuj9jEXAZdeemnUtoMPPjiqwb7rrrv8vXr1Cj9+6aWX/I0bN/Zv27Ztl393AADcjDYcyA6UlwMut2zZMm3fvl1HHXWUGjduHL499dRTWr58eXi/fv36hX9u3769vd+wYYO9//LLL3XrrbdGvf7CCy/Ujz/+aN87xJS2RTLlbQceeGDUtsqPf/vb39pjnD17tn38xBNP6PTTT7flbQAAZDPacCA75Kb7AADsmm3bttn7N954Q7vvvnvUcwUFBeFG24zLihzbFRpHFnoPM/7rlFNOqfL+ZnxYSH0aWTNW7Pjjj9fjjz9ux6u99dZbdowaAADZjjYcyA4E3YDL9e7d2zbMq1at0mGHHVbl+cie8uqYyVdMj/eee+5Zp8/u0aOH5s6dq3POOSe8zTyuzEzOcuaZZ6pjx47q3r27Dj744Dp9DgAAmYg2HMgOBN2Ay5kZR//4xz/qqquusr3eQ4cO1ebNm/XJJ5+oadOm6tKlS63vcdNNN+m4445T586ddeqpp8rr9dpyta+//trObFqdyy+/3JawmZI1M5vqc889p6+++srOnBppxIgR9ljMe5kSOAAAQBsOZAvGdAMZ4LbbbtONN95olxzp1auXRo4caUvVTClYPEyD+vrrr+udd97RAQccoIMOOkj33XdfrY392LFjNX78eHvBYHraV6xYYcd/RZazGeYCwGwvLy+P6lEHACDb0YYDmc9jZlNL90EAyBxmMph27drpP//5T9T2cePG6aefftKrr76atmMDAADVow0HkoPycgD1ZmZFnTRpku1lz8nJ0TPPPKN3331X06ZNC+9jyuQWLFigp59+msYaAACHoA0HUoegG0C9mRlU33zzTd1xxx0qLi62k7K89NJLGj58eHifE088UZ9++qkuvvhi24MOAADSjzYcSB3KywEAAAAASBImUgMAAAAAIEkIugEAAAAASBKCbgAAAAAAkoSgGwAAAACAJCHoBgAAAAAgSQi6AQAAAABIEoJuAAAAAACShKAbAAAAAIAkIegGAAAAACBJCLoBAAAAAEgSgm4AAAAAAJKEoBsAAAAAgCQh6AYAAAAAIEkIugEAAAAASBKCbqCePB6Pbr755pR/7uGHH64+ffqk/HMBAMhUtOlItieeeML+na1cuTLdh4I0IOhGWi1YsECnnnqqunTposLCQu2+++466qij9OCDDypbmEbefAnXdjMNc7LceeedmjJlilLh22+/1XXXXaf+/furSZMmat++vY499ljNmzcv5v5r1qzR6aefrubNm6tp06Y68cQT9d1338X9eTNnztTQoUPVsGFDtWvXTldccYW2bdumRKv872WO9bDDDtMbb7yR8M8CACeiTadNz5Q23SguLtZ9992nQYMGqVmzZvZveu+999Zll12mJUuWJOUzkbly030AyF7mi/OII45Q586ddeGFF9ovz9WrV2v27Nn6+9//rssvv1zZ4JRTTtGee+4Zfmwaj0suuUQnn3yyfS6kbdu2SW2gzYXSSSedpGT717/+pccee0yjR4/W73//e23evFkPP/ywDjroIE2dOlXDhw+POhfmb8Ts83//93/Ky8uzDaAJZr/44gu1bNmyxs8y+wwbNky9evXSvffeqx9++EH33HOPli5dqrfeeivhv5u5uDznnHPk9/v1/fff66GHHtLxxx9vP2vEiBEJ/zwAcAra9ADa9Mxo03/++WeNHDlS8+fP13HHHaff/OY3aty4sRYvXqxnn31WjzzyiHbu3JnQz0SG8wNpMmrUKH/r1q39v/76a5Xn1q9f73c687/Pn//854S/708//VTjex922GH+ffbZJ6Gf2ahRI/+5557rT4V58+b5t27dGrXt559/tn8LBx98cNT2u+66y56LTz/9NLxt0aJF/pycHP/48eNr/axjjjnG3759e//mzZvD2x599FH7nm+//bY/kcx7XnrppVHbvvnmG7vdHAcAZDLa9Nho093Zph977LF+r9frf/HFF6s8V1xc7L/mmmvq/J6PP/64PdYVK1Yk6CjhJpSXI22WL1+uffbZx5YYVdamTZuox48//riOPPJIu72goEC9e/e2WcTKunbtansk33//fQ0cOFANGjRQ37597WPj5Zdfto9NidCAAQP0+eefR73+t7/9re3JNKVOJjPZqFEjdejQQbfeeqvNXtbGlE2df/75tgfbHKf5/f79738rGb755hvbY2xKrEwJ3913311ln5KSEv35z3+2ve7meDp16mTLwMz2EFPmVlRUpCeffDJc9mbOg2GytabnukePHvZcml7o0047LeZ4JPPvaW61MefdnONI5n0POeQQLVq0KGr7iy++qAMOOMDeQnr27Gl7up9//vkaP2fLli2aNm2azjrrLFvCFmIy0ebza3t9Ipje+FatWlU5Lxs2bNC4cePs34n5W9x3333t+Y+0//77R2VFDPO3a/59vvrqq/C25557zm6rfO4AIJVo03cNbbpz2vQ5c+bYoWGmnTYZ/MrMuTcZ9kgzZsywv7P5GzP/D5iyedplRKK8HGljxnzNmjVLX3/9da2TiJjG2DR2J5xwgnJzc/Xaa6/ZhsPn8+nSSy+N2nfZsmW2DOh3v/ud/XI2X4ymxHfSpEm2nMm8zpgwYYIdV2RKhbzeiv6n8vJyW1JkSqNMo2fKo0wjV1ZWZhvq6qxfv96+xjRwZrxP69atbbmT+dI2jcWVV16pRPn111/tMZqgzPwOpiH705/+ZC8+jjnmGLuPOTfmfH388ce66KKLbABoxtuZUi4zFik03us///mPLrjgAh144IF2P6N79+72fu7cubZkcMyYMerYsaNtmM2/hRmLZi4QzMVBiGk0jfpOELJu3ToboIaY4zfBpbngqcwc6zvvvKOtW7faMWSxmN/V/JuZC7VI+fn5duxZ5YuzZDAldObfKnQ+jR07dtjzZ/5Ozd9Jt27d9MILL9iLok2bNukPf/iD3c803s8880z4dRs3btTChQvt3+pHH32kfv362e3mZ/O3Zv59ASBdaNPrjzbdWW36q6++au/PPvvsuPZ/99137b/THnvsYcf0m3bezGNw8MEH67PPPrOdRwDl5Uibd955x5YUmdvgwYP91113nS0P2rlzZ5V9t2/fXmXbiBEj/HvssUfUti5dutjSnZkzZ4a3mfc02xo0aOD//vvvw9sffvhhu/29994LbzPlWGbb5ZdfHt7m8/lsmVF+fr4tEwupXC42btw4W/ZkyqoijRkzxt+sWbOYv0N9S9HM80899VR4W0lJib9du3b+0aNHh7f95z//saVRH330UdTrJ02aZF//ySef1FqKFuuYZ82aVeXzQ+fe3Orjww8/9Hs8Hv+NN95Y5TzceuutVfafOHGife7bb7+t9j1feOEFu49578pOO+00e74SyXyW+Rswx71hwwZbcjdy5Ei7/a9//Wt4v/vvv99u++9//xveZv7mzf8DjRs39m/ZsiXq+E2JuvHqq6/6CwoK/CeccIL/jDPOCL+2X79+/pNPPjmhvwsA1BVtemy06e5r002baj4r1lCJWPr37+9v06aN/5dffglv+/LLL+2/1znnnBPeRnl5dqO8HGljJp0yveKm5/bLL7+0PdCm/MuUVYV6GUNMGVRk9tBMcGEm3jAlY+ZxJFOmNnjw4PBjM+ukYUrZzAQvlbfHmjXT9GqHhHq5zYQZpjczFtNev/TSS7b33fxsji90M7+TOUbT25koppTK9PhH9vSanuLI38VkT01PuCndijwecx6M9957r9bPiTzvpaWl+uWXX2xZmymdqvz7mN7w+vSIm1Jrk8UwGV9TJhdieopDZVyVmVLCyH1iqe31Nb22vsxkMiYbYkomTW/89OnT7e909dVXh/d588037QRDZ555ZnibmUwmNAPrBx98EM50Gx9++GE4o21K8sz/N+Znw2TGTVYptC8ApAttev3RpjurTTeVDEZ1WfdIP/74o53gzVSrtWjRIrzdVKOZ/ydMmw8YlJcjrUwQYcZkmcbPNNKvvPKKLZUys26aLzHT2BqffPKJLQczDfr27duj3sM0fmYph5DIRtgIPWfGPsXabsq6IpmyNFMiFMksEWFU1wD99NNPNgAys1maW3UNUaKYsjBz4RBpt912ixrra2bzNOOJTBBY3+MxjZgp2TPj78zYtsgxcJUvjOrDjDsz4/VMSZkpmYsc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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ - "frames_subset = view.frames.filter(view.frames[\"scan_number\"].is_in(selected_scans))\n", - "assert frames_subset.height > 0, \"no frame rows for selected scans\"\n", + "import pandas as pd\n", + "\n", + "df = pd.DataFrame(data)\n", + "\n", + "# Determine unique sample thetas; assume 'Sample Theta' exists in i0_frames and corresponds to frame_number\n", + "if \"Sample Theta\" in i0_frames.columns:\n", + " frame_to_theta = dict(zip(i0_frames[\"frame_number\"], i0_frames[\"Sample Theta\"]))\n", + " df[\"Sample Theta\"] = df[\"frame_number\"].map(frame_to_theta)\n", + "else:\n", + " raise ValueError(\"i0_frames does not contain 'Sample Theta' column.\")\n", + "\n", + "sample_thetas = sorted(df[\"Sample Theta\"].dropna().unique())\n", + "n_theta = len(sample_thetas)\n", "\n", - "img = get_image(frames_subset, 1)\n", + "fig, axs = plt.subplots(n_theta, 2, figsize=(10, 5 * n_theta), squeeze=False)\n", + "colors = {\"direct_beam\": \"tab:blue\", \"peak_location\": \"tab:orange\"}\n", + "\n", + "for row_idx, theta in enumerate(sample_thetas):\n", + " theta_df = df[df[\"Sample Theta\"] == theta]\n", + " for col_idx, (method, group) in enumerate(theta_df.groupby(\"method\")):\n", + " ax_row = axs[row_idx]\n", + " # The two columns: one for \"row\", one for \"col\"\n", + " group.sort_values(\"energy\").plot(\n", + " x=\"energy\",\n", + " y=\"row\",\n", + " ax=ax_row[0] if len(ax_row) > 1 else ax_row,\n", + " ls=\"-\",\n", + " color=colors.get(method, None),\n", + " legend=(row_idx == 0),\n", + " label=method\n", + " )\n", + " group.sort_values(\"energy\").plot(\n", + " x=\"energy\",\n", + " y=\"col\",\n", + " ax=ax_row[1] if len(ax_row) > 1 else ax_row,\n", + " ls=\"-\",\n", + " color=colors.get(method, None),\n", + " legend=(row_idx == 0),\n", + " label=method\n", + " )\n", + " # Set titles\n", + " axs[row_idx][0].set_title(f\"Sample Theta: {theta} - Row\")\n", + " axs[row_idx][1].set_title(f\"Sample Theta: {theta} - Col\")\n", "\n", - "plt.figure(figsize=(6, 4))\n", - "plt.imshow(img, cmap=\"magma\")\n", - "plt.colorbar(label=\"counts\")\n", - "plt.title(f\"Corrected image preview for scan {selected_scans[0]}\")\n", "plt.tight_layout()\n", "plt.show()" ] + }, + { + "cell_type": "code", + "execution_count": 101, + "id": "e8f620d8", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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MUGL/kwri91blizSHx20taXVydq0GaEa1cbne70QqSxv2bpaD2ujpVrXleveZ2MbLC9tXX3nUjIPi+vt2WMbjIqxeo/ZJbaNPRcbJVk5SqmOa6WvW8+0CH164J61QSsT6Mr6jOXBzkRara+1tT9nebUsof3rvctjX7Mepp/1OYszktNMj0RPMGAmbBHvd11brLoV+9T7rMqDD4R29/uWtwyl3lfbphVgYVg2Xa11GnWderE0jGNr1LHWFshJ9PGGvUZ8LC+Num2GbnmlH8J7TDBeOX7au8kaLdR9XrDsd7zeymr1re9bjKzWioOzKV4yHKNesX5eOXGWaEuO//b3YtWrWMf67BUdXmz7aWQ2pX0+1rF+vlzLhvZtzzC94/0eTFVwspr3xXZZdey26V8MTnxsj+260lY29lfevzS25dJe29t7Fx5CvslYz8Ay13fvWtHj9t16H/WTNgmf12cvL6P/KKNNazuSiz4stOtxOqI9y+pmYxltaNebbRjfqTbU7mvPsWm5XQ+u+qSxb1WfhuWF+B2zs95AY1u3ekcQbuWm1GtVr8OzahfAboemMh2t3ZrotP1dH0E7b23MZy4v/mcsWtmYAOXOO+9sP2++7Iy1LkqXLl26dOnS5VHKvffeOxx44IEbD6A89rGPbT///ve/P2IFu/z/yz333DMcfvjhwz/+8Y/hgAMOWOvibGrpfbF+pPfF+pHeF+tHKnNSwcnOnTsf8d65BChbRiqugpOubOtHal/0/lgf0vti/Ujvi/UjvS/Wh+wusTDXSbJdunTp0qVLl40pHaB06dKlS5cuXdadzCVA2bFjx/DpT3+6/eyy9tL7Y/1I74v1I70v1o/0vphPWSi7s9anS5cuXbp06dJlD8pcMihdunTp0qVLl40tHaB06dKlS5cuXdaddIDSpUuXLl26dFl30gFKly5dunTp0mXdyVwClC996UvDUUcdNey9997Di170ouGqq65a6yJtKDn33HOHF7zgBcP+++8/PP7xjx9e85rXDDfeeGO454EHHhjOPPPM4eCDDx7222+/4fWvf/1w++23h3vqTr+nnnrqsO+++7bnfPjDHx4W7eC3Lv8rOe+884aFhYXh/e9/v1/rfbFn5dZbbx3e/OY3t/beZ599hmc961nDNddc45/XdQef+tSnhic84Qnt85NOOmm46aabwjPuuuuu4bTTTmubhh100EHDO97xjuG+ehhjl92WpaWl4eyzzx6OPvro1s5PecpThs985jPhjJfeF3MuZc7kwgsvLNu3by9f+9rXyg033FDe+c53loMOOqjcfvvta120DSMnn3xy+frXv16uv/76cu2115ZXvvKV5Ygjjij33Xef3/Oud72rHH744eWSSy4p11xzTXnxi19cTjjhBP98cXGxHHvsseWkk04qv/vd78pPfvKTcsghh5SPf/zja1Sr+ZerrrqqHHXUUeXZz352Oeuss/x674s9J3fddVc58sgjy1vf+tZy5ZVXlptvvrn8/Oc/L3/961/9nvPOO68ceOCB5Qc/+EG57rrryqte9apy9NFHl//85z9+zyte8YrynOc8p/z6178uv/rVr8pTn/rU8qY3vWmNajWfcs4555SDDz64XHTRReWWW24p3/3ud8t+++1XPv/5z/s9vS/mW+YOoLzwhS8sZ555pv+9tLRUdu7cWc4999w1LddGljvuuKOGJOWyyy5rf999991lr732agbB5E9/+lO754orrmh/Vye4ZcuWctttt/k9559/fjnggAPKgw8+uAa1mG+59957y9Oe9rRy8cUXl5e97GUOUHpf7Fn56Ec/Wl760pfO/Hx5ebkcdthh5XOf+5xfq320Y8eO8u1vf7v9/cc//rH1z9VXX+33/PSnPy0LCwvl1ltv/X+uwcaRU089tbz97W8P1173uteV0047rf3e+2L+Za6meB566KHhN7/5TaPpeC5P/fuKK65Y07JtZPn3v/8dDmmsfbBr167QD8ccc8xwxBFHeD/Un5X6PvTQQ/2ek08+uR3adcMNN+zxOsy71CmcOkXDNq/S+2LPyo9+9KPh+c9//vCGN7yhTZUdd9xxw1e/+lX//JZbbhluu+220B/13JE6Fc3+qFMJ9Tkm9f5qy6688so9XKP5lRNOOGG45JJLhr/85S/t7+uuu264/PLLh1NOOaX93fti/mWuDgv817/+1eYdaWir1L///Oc/r1m5NrIsLy+3fIeXvOQlw7HHHtuu1UG/ffv2NrC1H+pndk/WT/ZZl92XCy+8cPjtb387XH311ZPPel/sWbn55puH888/f/jgBz84fOITn2h98r73va/1wemnn+7tmbU3+6OCG8q2bdtaAND7Y/flYx/7WAPZFZBv3bq1+YZzzjmn5ZNU6X0x/zJXAKXL2kTu119/fYtMuux5qcfDn3XWWcPFF1/cksK7rD1gr9H2Zz/72fZ3ZVDq+Pjyl7/cAEqXPSff+c53hgsuuGD41re+NTzzmc8crr322hZM7dy5s/fFBpG5muI55JBDGlLWFQr178MOO2zNyrVR5b3vfe9w0UUXDb/4xS+GJz3pSX69tnWdbrv77rtn9kP9mfWTfdZl96RO4dxxxx3Dc5/73BbZ1X+XXXbZ8IUvfKH9XqPB3hd7TupqkGc84xnh2tOf/vS2Sort+XA2qv6sfUqpK6rqapLeH7svdSVaZVHe+MY3tinMt7zlLcMHPvCBtgqxSu+L+Ze5AiiVRn3e857X5h0Z0dS/jz/++DUt20aSmjxdwcn3v//94dJLL23L+Ci1D/baa6/QD3UZcjXS1g/15x/+8Icw+CsLUJfyqYHvMltOPPHE1o41OrR/NYKvNLb93vtiz0md6tQl9zUH4sgjj2y/17FSHRv7o05D1HwG9kcFlBV8mtRxVm1ZzY/osnty//33t1wRSg1gaztW6X2xAaTM4TLjmoX9jW98o2Vgn3HGGW2ZMVcodPm/ybvf/e62NO+Xv/xl+ec//+n/7r///rC0tS49vvTSS9vS1uOPP77906WtL3/5y9tS5Z/97GflcY97XF/a+l8QruKp0vtizy713rZtW1vietNNN5ULLrig7LvvvuWb3/xmWNpabdIPf/jD8vvf/768+tWvTpe2HnfccW2p8uWXX95WaPWlrY9OTj/99PLEJz7Rlxl/73vfa8vnP/KRj/g9vS/mW+YOoFT54he/2Axy3Q+lLjuu69e7/Pek4tbsX90bxaQO8Pe85z3lMY95TDPQr33taxuIofztb38rp5xyStlnn32a4fjQhz5Udu3atQY12tgApffFnpUf//jHDfDVQOmYY44pX/nKV8LndXnr2WefXQ499NB2z4knnlhuvPHGcM+dd97ZnGDdt6Mu937b297WlpJ32X2555572jiovmDvvfcuT37yk8snP/nJsHS+98V8y0L9b61ZnC5dunTp0qVLl7nNQenSpUuXLl26bA7pAKVLly5dunTpsu6kA5QuXbp06dKly7qTDlC6dOnSpUuXLutOOkDp0qVLly5duqw76QClS5cuXbp06bLupAOULl26dOnSpcu6kw5QunTp0qVLly7rTjpA6dKlS5cuXbqsO+kApUuXLl26dOmy7qQDlC5dunTp0qXLupMOULp06dKlS5cuw3qT/wHt8SRUK0kBfQAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def preview_image(frame_number):\n", + " img = get_image(i0_frames, frame_number)\n", + " plt.imshow(img, cmap=\"terrain\")\n", + " loc = df[df[\"method\"] == \"direct_beam\"].iloc[frame_number]\n", + " loc2 = df[df[\"method\"] == \"peak_location\"].iloc[frame_number]\n", + " plt.plot([loc[\"col\"]], [loc[\"row\"]], \"x\", color=\"red\", ms=50)\n", + " plt.plot([loc2[\"col\"]], [loc2[\"row\"]], \"+\", color=\"white\", ms=50)\n", + " plt.show()\n", + "\n", + "preview_image(300)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 104, + "id": "d50d6cee", + "metadata": {}, + "outputs": [], + "source": [ + "# Integrate the signal in a 10x10 pixel box centered on the peak location\n", + "\n", + "def integrate_signal(image, peak_location):\n", + " processed_image = pre_process(image)\n", + " # Get the 10x10 pixel box centered on the peak location\n", + " box_size = 10\n", + " start_row = peak_location.row - box_size // 2\n", + " start_col = peak_location.col - box_size // 2\n", + " end_row = start_row + box_size\n", + " end_col = start_col + box_size\n", + " # Integrate the signal in the box\n", + " signal = np.sum(processed_image[start_row:end_row, start_col:end_col])\n", + " return signal\n", + "\n", + "# Integrate the signal in a 10x10 pixel box centered on the peak location\n", + "data = []\n", + "for frame_number in range(len(i0_frames)):\n", + " image = get_image(i0_frames, frame_number)\n", + " peak_location = df[df[\"method\"] == \"peak_location\"].iloc[frame_number]\n", + " signal = integrate_signal(image, peak_location)\n", + " data.append({\n", + " \"frame_number\": frame_number,\n", + " \"energy\": i0_frames[frame_number][\"Beamline Energy\"][0],\n", + " \"sam_theta\": i0_frames[frame_number][\"Sample Theta\"][0],\n", + " \"signal\": signal,\n", + " })\n", + "refl_df = pd.DataFrame(data)" + ] + }, + { + "cell_type": "code", + "execution_count": 105, + "id": "ce14192b", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([10., 15., 20., 0.])" + ] + }, + "execution_count": 105, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "refl_df[\"sam_theta\"].unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 109, + "id": "91edd939", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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MuVHjx6VhQsXur3/jBkzTMCvpexadj5z5kzJyMiodr9HH31UnnrqKXn66aflxRdflCuvvFL2799vMudlZWUSFxcns2fPls6dO8uSJUtMT7pm6/Xr8lYE3QAAAADgBTQzrAGr+vOf/yzDhw+XJ554wvHxN998U+Lj42XHjh3St29fCQ0NNcF2TExMnZ9LM+Tt27eX888/3zxOQkKCeT5Xtm3bJj/++KMJ7keNGmVu04y2Hm9VmoG/4oorzHU99r///e+yYsUKOfvss02wrkG5RTPeS5culY8//pigGwAAAAC8UbsAP5Nxbq7nrouRI0c6rq9fv15++uknU1ruqpdbg+6GOPPMM02grQPYNCDWi1UWXtX27dvF399fRowY4bitd+/e0qlTp2r3HTp0qOO6BvVhYWGVMuIvv/yyOXmgQb9m77V3PSkpSbwZQTcAAACANkv7jOtS4t2cNEi1HD9+XC644AL529/+Vu1+Wo7dUJrdXrNmjSkX//777+Xhhx+WP/3pTyab3bFjx3o/bkCVief6+mtZufrwww/lnnvukWeffVbGjx9vjkHL0JcvXy7ezDt+ugAAAAAADppV/vTTT82wMs0ye4I+7tSpU83lkUceMcG29otfcsklle6nA89KSkpk7dq1jmz8rl275NixY3V6Pu1V1/7xW265pVLW3tsxvRwAAAAAvMytt95qhptpf7RmnzU4/e677+Taa681U8Ab6quvvjL91uvWrTODzv7973+bjLQG2FX179/fBOY69Ez7szX41us6gdzHx6fWz6k94DrATb8O7Ut/6KGHzNfWJoNurbPXMyo6On7s2LHmhXVHl7HrC+180c8DAAAAANRP165dTWZYA+yzzjpLhgwZYlZ4aTba17fhuVV9nM8++8xMSB8wYIC8+uqr8p///EcGDRrk8v4alOtasUmTJpne7xtuuMGUhwfXIfa78cYbTRb98ssvN3HmkSNHKmW9vZVPeV2Ww4nIRx99ZMbB64uuL4TuXdOR7to8HxUV5TLovuOOO8zHHU/q42O+IbWVk5Mj4eHhkp2dbRrtAQAAAKCuCgoKZO/evWYqNolAz0pNTTWT1H/88Uc544wzWsT3uLniyjoX/z/33HPmrIWWLSgNvr/++mszYe7+++93+TkaZNdlTH1hYaG5OL84AAAAAICWSXu9dbibZtwPHTok9913n6mO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yurVq+2+7datW+XCCy9Ub4+exZdffrk5t5cooHSKa60mcGOSdnYhgy9ru7JMWe6OsRES2zrU5tucOjBZ9Unvzi5SWXEMKlux76j6Pwwu80YXjugsgzrFSGF5lbw4Z5enbw4RERERtWTQ/eWXX8p9990njz76qKxfv16GDh0qM2bMkOzsbJtvX1JSIj169JCnn35a2rdv35zbShRwQoODpFPb1uplrg1zboiaFhMRKlP6tjNnu1PTj0tJRbUkRIXJgA4x4q3r4h45e6B6+YvV6bLjiGlCOxEREREFQND94osvyk033STXXXedDBgwQN58802JjIyU9957z+bbjx49Wp577jm57LLLJDw83BW3mSggh6kdOMoJ5tZ2GsFo3/YNB89nD+lg7uteauznntArUQW33goD3s4a3EFqTog8/ss2thcQERERBULQXVFRIevWrZPp06fXfoCgIPXvFStWuOxGlZeXS0FBQZ0nokDVzRimpgeGBZqcwnK57O0V8vnq9Hr/p78n/RrIdMMp/ZMlPCRI9uUWy+erM9TrJlmtCvNGD57RT5XGL9tzVOZtt11NRERERER+FHTn5uZKdXW1JCcn13k9/n3kyBGX3ainnnpKYmNjzU8pKSku+9hEvmZcjwT1fOHOwAy6EGyv3HdMnvhlmxqcpiHz60h5ObQJD5GT+yWpl/VgspO8tJ/bUkp8pNwwybRC7MnftktldY2nbxIRERER+cP08oceekjy8/PNTxkZpswUUSCa1CdRQoJayd6cYkkLwBLz3zabVn0VV1Sr/mYNU8sLy6rUoLke7UzVAA3RU8wBb9/R6JX3drdP6yVxkaGyP7dY1h447umbQ0RERETuDLoTExMlODhYsrKy6rwe/3blkDT0fsfExNR5IgpUGAQ2ulu8enn+jsDKdu/NKTJns+GD5QfM2V5dWt4jMUrCQxrftT2tXztpbezkntzb+1aFNZSlR/85rE9n0E1ERETk10F3WFiYjBw5UubNm2d+XU1Njfr3+PHj3XH7iEj1JCcFZNA9a4upbWVcj3hJbBOusts6870zy7HSci0yLEQuHZ2iMuN/Glab9fYFI7vEqefr0hh0ExEREfl9eTnWhb3zzjvy4Ycfyvbt2+XWW2+V4uJiNc0crrnmGlUebjl8bcOGDeoJLx86dEi9vGfPHtd+JUR+bJrRj7xy31EpKq+S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iYmJEhwcLFlZpt2XGv7dvn17m++D1zvz9kREREREREQBGXSHhYXJyJEjZd68eebXYZAa/j1+/Hib74PXW749zJkzx+7bExEREREREQVsefl9990nf/7zn2XUqFFqNzdWhmE6+XXXXaf+H+vEOnXqpIahwd133y1TpkyRF154Qc466yz54osvZO3atfL222+7/qshIiIiIiIi8uWgGyvAcnJy5JFHHlHD0LD6a9asWeZhaenp6WqiuTZhwgS1m/tf//qX/OMf/5DevXvLDz/84PCObiIiIiIiIiJf5fSe7kDap0ZERERERET+ocAX9nQTERERERERkeMYdBMRERERERG5CYNuIiIiIiIiIjdh0E1ERERERETkJgy6iYiIiIiIiNyEQTcRERERERGRmzDoJiIiIiIiInITBt1EREREREREbhIiPuDEiRPmZeZEREREREREztLxpI4vW4pPBN1Hjx5Vz1NSUjx9U4iIiIiIiMiHHT16VGJjY1vs8/lE0B0fH6+ep6ent+g3h9xzuoTDk4yMDImJifH0zaEm4s/Rf/Bn6T/4s/Qf/Fn6D/4s/QN/jv4jPz9funTpYo4vW4pPBN1BQabWcwTc/EX3D/g58mfp+/hz9B/8WfoP/iz9B3+W/oM/S//An6P/CDLiyxb7fC362YiIiIiIiIgCCINuIiIiIiIiokAOusPDw+XRRx9Vz8m38WfpH/hz9B/8WfoP/iz9B3+W/oM/S//An6P/CPfQz7LViZael05EREREREQUIHwi001ERERERETkixh0ExEREREREbkJg24iIiIiIiIiN2HQTUREREREROQmDLqJiIiIiIiI3IRBNxEREREREZGbMOgmIiIiIiIichMG3URERERERERuwqCbiIiIiIiIyE0YdBMRERERERG5CYNuIiIiIiIiIjdh0E1ERERERETkJiHiA2pqauTw4cMSHR0trVq18vTNISIiIiIiIh9z4sQJKSwslI4dO0pQUMvln30i6EbAnZKS4umbQURERERERD4uIyNDOnfu3GKfzyeCbmS49TcnJibG0zeHiIiIiIiIfExBQYFK5ur4sqX4RNCtS8oRcDPoJiIiIiIioqZq6ZZlDlIjIiIiIiIichMG3URERERERERuwqCbiIiIiIiIKJB7uomIiIiIiFypurpaKisrPX0zyMXCwsJadB2YIxh0ExER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hKN9+/aOgQMHOpYuXer46aefHLGxsY6xY8cWer+n8/2an61Bd36pqam6PJlj9uzZ7vOqVq3q+PDDD/NcrlatWo63337b/LxmzRpznYULF7r/rl9IISEhjp07d3q9n4MHD5od8OWXX7rPW7t2rbmdefPm2fDIKp7T2ZfePP/88+YDqzD6gXXPPfeUwFajJPelHki8/PLLft8P78vy/57Mzs521KlTxxwgFob3ZOnuSw2+dLDE80BN30/6Pfjrr7+a3/muDJ596Q3flYG7L/muDM73Jd+X5UfNmjUd77zzjl/vHQ2ydV/v2bPHfZk33njDER0dbQZWvDmd71dvSnVOd3p6uvm/Vq1a7vP69u0rU6dONWn73Nxc+fzzz01pgJZjqHnz5pk0fvfu3d3XGThwoISGhsr8+fO93s/ixYvl+PHj5nKW1q1bS6NGjcztoWz2pa/b8bwNXz755BOJjY2V9u3by9ixY+XIkSMl9EhQnH2pJXJawtOlSxd54YUXCi3P4X1Z/t+T33//vezbt09GjRp1yvvjPVl6+zIrK8uUJEZERLgvExkZab4H//jjD/M735XBsy993Q7flYG7L/muDL73Jd+XZS8nJ8cc12RmZpoyc3/eO/p/hw4dJC4uzn2ZwYMHS0ZGhqxevdrr/ZzO96s3laSU6AHfvffeK/369TMvOssXX3whQ4cONR9GlSpVMvX1//nPf6R58+buOYlab59noytVMm8U/Zs3en54eLh5gjzpE+zrOrB/X+a3adMmefXVV+XFF18s9P7+9re/SePGjaV+/fqyYsUKeeCBB8xcnG+++abEH1tFU5x9effdd5s5wvpenDt3rvki2b17t0yYMMHrffG+LP/vyXfffdd8+TRs2LDQ++M9Wbr7snfv3mZOvj7PzzzzjFaoyYMPPmgOOPQ9p/iuDJ59mR/flYG9L/muDM73Jd+XZWflypUmyNYkgs7b1uOatm3byrJly0753tH/PQNu6+/W37w5ne/XMg26dVL7qlWrCowYPfroo3Lw4EGZPn26GQX69ttvTfOCOXPmmJEIlD8lsS937twp559/vlx99dUyevToQu/v5ptvdv+st1OvXj0ZMGCAaXqhDWZQNvtyzJgx7strUwv9oLvllltMwxLP0WIExntyx44d8vPPP5tA/VR4T5buvtTGPl9++aXcdttt8sorr5jR9WHDhpkDef0Zwbsv+a4M/H3Jd2XwvS/5vixbrVq1MgG2Vix89dVXMnLkSJk9e7aUe45ScMcddzgaNmzo2LJlS57zN23aZGrkrcnvlgEDBjhuueUW8/O7777rqFGjRp6/Hz9+3BEWFub45ptvvN6fTp7X2z1w4ECe87VpwoQJE0roUVVMxdmXFp3/0KJFC8fw4cPzNBvxlza80PuaNm3aaT4KlNS+9KSX1+utW7fO6995X5bv/ajz0nR+ms5TKyrek/buS09paWnu91BcXJyZ66v4rgyefWnhuzJ49qUnvisDf1/yfVm+DBgwwHHzzTf79d559NFHTUM0T/p60Ot5Ngv2dDrfr97YOkSu5Rl33nmnSfv/9ttvZvkLT9achvyjSGFhYab8Q2n5gGZqtE7forelf+/Vq5fX++3WrZtUrlxZZsyY4T5PSzm0RbzeHspmX1qj9jqfVPfRe++9d1pZGh3dUjpaiLLbl972i14nfwmOhfdl+d2Pelv6fhwxYoTZR0XFe9LefelJKxa0dE4vl5qaKpdccok5n+/K4NmXiu/K4NmX+fFdGdj7ku/L8ic3N9fMy/fnvaP/a3m67lvLr7/+apYC0xJ1b07n+9Urh41uu+02R0xMjGPWrFl5WuUfOXLE/F1HiLTl+plnnmmWtNHMzIsvvmi6wWk7eM827V26dDGX+eOPP8zIr2eb9h07djhatWpl/m7RlvE6svHbb7+ZlvF9+vQxJ5TdvtT9pJfRESn92fN2fO1LvR0dUdR9uHXrVrN0ii7r0L9//zJ6JgJfSezLuXPnmm6suvSGLmnz8ccfm1HfESNGuO+H96W9SurzVU2fPt2M8mqXz/x4T5b9vlRTpkwx3Vf1+f/oo49MF/oxY8bkuR2+K4NjX/JdGTz7ku/K4PqMVXxflq0HH3zQdJ3X51OXdtPf9bjml19+8eu9Yy0ZNmjQIPO+1IoDfU96Lhmm+0/3o+5Pf79f/WFr0K0vSm8nXSvPouusXXHFFWYNyqioKEfHjh0LLHGzb98+88CqVatmWrqPGjXKcejQIfff9YnX2505c6b7vKNHjzpuv/1200Zeb1fX3vP8wkLp70u9rK/b8bUvk5KSzIeTfvhFRESYA5H77ruPNQ7LeF8uXrzY0atXL/MlFhkZ6WjTpo3jmWeecRw7dsx9Gd6X9iqpz1eln6++1oDlPVk+9uUDDzxgSh11ORT9sn/ppZcKrA3Ld2Vw7Eu+K4NnX/JdGVyfsYrvy7J1ww03mGX4wsPDTbCsg5NWwO3ve2fbtm2OCy64wFGlShWzRvc///lPUy5u0f2n+1H3p7/fr/4I0X9OL5kPAAAAAAAKQ9tTAAAAAABsQtANAAAAAIBNCLoBAAAAALAJQTcAAAAAADYh6AYAAAAAwCYE3QAAAAAA2ISgGwAAAAAAmxB0AwAAAABgE4JuAAAquH379kndunVl27ZtJXq7a9askYYNG0pmZmaJ3i4AAIGEoBsAAD9df/31EhISUuB0/vnnSyD717/+JZdeeqkkJib6dfmLL77Y52OeM2eOeU5WrFghbdu2ld69e8uECRNKeIsBAAgcIQ6Hw1HWGwEAQKAE3SkpKfLee+/lOT8iIkJq1qxp2/1mZ2dLeHi4Lbd95MgRqVevnvz8888mQPbHt99+K1deeaVs377dZLI93XDDDbJy5UpZuHCh+f3HH3+U0aNHS1JSklSqVMmWxwAAQHlGphsAgCLQADs+Pj7PyTPg1izvO++8I5dffrlERUVJixYt5Pvvv89zG6tWrZILLrhAqlWrJnFxcTJ8+HDZu3ev++9nn3223HnnnXLvvfdKbGysDB482Jyvt6O3FxkZKeecc4588MEH5v4OHjxoSrijo6Plq6++KhAgV61aVQ4dOuT18fz000/mMeUPuAvbxosuukjq1Kkj77//fp7rHD58WL788ku58cYb3eedd955sn//fpk9e/ZpPNsAAAQ+gm4AAErYE088Iddcc40psb7wwgvluuuuM4Gn0gD53HPPlS5dusiiRYtk2rRpJnuul/ekAbVmt//880+ZPHmybN26Va666iq57LLLZPny5XLLLbfIww8/7L68BtbXXnttgSy8/q7Xq169us9y8G7duuU571TbqBnrESNGmKDbs2BOA+6cnBwZNmyY+zx9DJ07dzb3AwBARUTQDQBAEfzwww8m++t5euaZZwqUoWvg2bx5c/M3zQAvWLDA/O21114zwaye37p1a/PzlClTZObMmbJhwwb3bWhG+/nnn5dWrVqZ05tvvmn+f+GFF8z/GmDr/Xi66aabTJn47t27ze+pqakmk60l375oiXj9+vXznOfPNuptbt68OU8GWwN8LTuPiYnJc3t6+3o/AABUREyuAgCgCLSs+4033shzXq1atfL83rFjxzwZaC371gBYaZZag1cN1vPTILZly5bm5/zZ5/Xr10uPHj3ynNezZ88Cv7dr185kyR988EH5+OOPpXHjxtK/f3+fj+fo0aOmXN2TP9uowXjfvn1NMK7l8Js2bTLZ7CeffLLAdapUqWLmjgMAUBERdAMAUAQaRGsGuzCVK1fO87vOu87NzTU/a9Zbu38/99xzBa6nDc087+d0aLZ70qRJJujWzPOoUaPM/fuic8YPHDiQ5zx/t1Hnbt91113m/vS+mjVrJmeddVaB62hpvf4NAICKiPJyAABKUdeuXWX16tVmeS4N3j1PhQXaWlKu86s9WR3CPf397383pdyvvPKKWSd75MiRhW6Plo7r5U5nG3WOd2hoqHz66afy4YcfmpJzbwG+NmXT+wEAoCIi6AYAoAiysrJkz549eU6encdP5Y477jCZX53zrUGzlmvrPGzNSGsTMl+0cdq6devkgQceMPOqv/jiC3f3cM9AVzupX3HFFXLffffJoEGDCizplZ92RtcA2zPb7e82avn50KFDZezYsWYeef455mrbtm2yc+dOGThwoN/PEQAAwYSgGwCAItBO3lpi7Xk644wz/L6+NhXTjuQavGpQ3KFDB7M0WI0aNUzW2JcmTZqY5cC++eYbM2dc55Vb3ct1yS9PWvata3sX1kDNovevmW0N4k9nG/W+NGDX4D1/Qzb12WefmdvQueUAAFREIQ7PtT4AAEDA+Ne//mWWE0tOTs5z/kcffST/+Mc/ZNeuXWbJrlP58ccfTWZcy8ALC/yLSgN/7cKu5ef9+vUrsdsFACCQ0EgNAIAA8frrr5sO5rVr1zaZaF0+7M4773T/XTuEa5n3s88+a8rR/Qm41ZAhQ2Tjxo2mDDwhIaHEtjcpKUkeeughAm4AQIVGphsAgACh2eupU6ea+daNGjWS4cOHm/nUlSo5x9Aff/xxk/3WJcK+++47r0t+AQCA0kXQDQAAAACATWikBgAAAACATQi6AQAAAACwCUE3AAAAAAA2IegGAAAAAMAmBN0AAAAAANiEoBsAAAAAAJsQdAMAAAAAYBOCbgAAAAAAxB7/D85bye5W2KP2AAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Use the sam_theta = 0 for the izero and plot the signal / i0 vs energy\n", + "fig, ax = plt.subplots(\n", + " nrows=4,\n", + " ncols=1,\n", + " figsize=(10, 4*4),\n", + " sharex=True,\n", + " sharey=False,\n", + ")\n", + "\n", + "i0_df = refl_df[refl_df[\"sam_theta\"] == 0].copy()\n", + "i0_df.plot(x=\"energy\", y=\"signal\", kind=\"line\", ax=ax[0])\n", + "\n", + "df_10 = refl_df[refl_df[\"sam_theta\"] == 10.0].copy()\n", + "df_10.loc[:, \"refl_signal\"] = df_10[\"signal\"].values / i0_df[\"signal\"].values\n", + "df_10.plot(x=\"energy\", y=\"refl_signal\", kind=\"line\", ax=ax[1])\n", + "\n", + "df_15 = refl_df[refl_df[\"sam_theta\"] == 15.0].copy()\n", + "df_15.loc[:, \"refl_signal\"] = df_15[\"signal\"].values / i0_df[\"signal\"].values\n", + "df_15.plot(x=\"energy\", y=\"refl_signal\", kind=\"line\", ax=ax[2])\n", + "\n", + "df_20 = refl_df[refl_df[\"sam_theta\"] == 20.0].copy()\n", + "df_20.loc[:, \"refl_signal\"] = df_20[\"signal\"].values / i0_df[\"signal\"].values\n", + "df_20.plot(x=\"energy\", y=\"refl_signal\", kind=\"line\", ax=ax[3])\n", + "\n", + "ax[-1].set_xlabel(\"Energy (eV)\")\n", + "ax[-1].set_xlim(280, 300)\n", + "plt.tight_layout()\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "210bce49", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/notebooks/nexafs-ingest.ipynb b/notebooks/nexafs-ingest.ipynb deleted file mode 100644 index 6973c6e..0000000 --- a/notebooks/nexafs-ingest.ipynb +++ /dev/null @@ -1,710 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "22dddc52", - "metadata": {}, - "source": [ - "# NEXAFS beamtime to database\n", - "\n", - "Discover NEXAFS files in a beamtime directory (e.g. SharePoint), parse sample and scan metadata, and write to a SQLite database in `als-nexafs` with name `mon_yyyy.db` (e.g. `oct_2025.db`) from the file dates.\n" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "cb09fce6", - "metadata": {}, - "outputs": [], - "source": [ - "import io\n", - "import re\n", - "from datetime import datetime\n", - "from pathlib import Path\n", - "from sqlite3 import Connection, connect\n", - "from typing import Any\n", - "\n", - "import matplotlib.pyplot as plt\n", - "import pandas as pd" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "ebd54d68", - "metadata": {}, - "outputs": [], - "source": [ - "plt.style.use([\"science\", \"no-latex\"])\n", - "\n", - "def set_plotting_defaults():\n", - " \"\"\"\n", - " Set matplotlib rcParams for fontsize and grid defaults.\n", - "\n", - " This function configures:\n", - " - Font sizes for labels, ticks, legend, and titles\n", - " - Grid appearance (alpha, linestyle, linewidth)\n", - " - General figure aesthetics\n", - "\n", - " Examples\n", - " --------\n", - " >>> from src.utils.helpers.plotting_helper import set_plotting_defaults\n", - " >>> set_plotting_defaults()\n", - " >>> plt.plot([1, 2, 3], [1, 4, 9])\n", - " >>> plt.show()\n", - " \"\"\"\n", - " plt.rcParams.update(\n", - " {\n", - " \"text.usetex\": False,\n", - " \"font.size\": 10,\n", - " \"axes.labelsize\": 10,\n", - " \"axes.titlesize\": 11,\n", - " \"xtick.labelsize\": 9,\n", - " \"ytick.labelsize\": 9,\n", - " \"legend.fontsize\": 8,\n", - " \"figure.titlesize\": 12,\n", - " \"grid.alpha\": 0.3,\n", - " \"grid.linestyle\": \"-\",\n", - " \"grid.linewidth\": 0.5,\n", - " \"axes.grid\": True,\n", - " \"axes.grid.axis\": \"both\",\n", - " }\n", - " )\n", - "\n", - "set_plotting_defaults()" - ] - }, - { - "cell_type": "markdown", - "id": "c6a81760", - "metadata": {}, - "source": [ - "## Configuration\n", - "\n", - "Beamtime data directory (e.g. SharePoint/OneDrive) and destination for the database (als-nexafs in home directory).\n" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "a994e8e1", - "metadata": {}, - "outputs": [], - "source": [ - "data_root = Path(\n", - " \"/Users/hduva/Library/CloudStorage/OneDrive-SharedLibraries-WashingtonStateUniversity(email.wsu.edu)/Carbon Lab Research Group - Documents/Synchrotron Logistics and Data/ALS - Berkeley/Data/BL1101/2025Oct/TAD KOGA/renamed\"\n", - ")\n", - "dest_root = Path(\"/Users/hduva/projects/als-nexafs\")\n", - "\n", - "chem_formula_map: dict[str, str] = {\"ps\": \"C8H8\", \"hopg\": \"C\"}\n", - "parse_key: str = \"____\"\n", - "tag_map: dict[str, str] = {}" - ] - }, - { - "cell_type": "markdown", - "id": "307b2053", - "metadata": {}, - "source": [ - "## Schema and database\n", - "\n", - "Database lives in `dest_root` (als-nexafs). Name is `mon_yyyy.db` (e.g. `oct_2025.db`) from the month when beamtime files were written.\n" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "21be70de", - "metadata": {}, - "outputs": [], - "source": [ - "SCHEMA_SQL = \"\"\"\n", - "DROP TABLE IF EXISTS nexafs;\n", - "DROP TABLE IF EXISTS izero;\n", - "DROP TABLE IF EXISTS sample;\n", - "\n", - "CREATE TABLE sample (\n", - " id INTEGER PRIMARY KEY AUTOINCREMENT,\n", - " name TEXT NOT NULL,\n", - " tag TEXT NOT NULL,\n", - " version INTEGER NOT NULL,\n", - " beamtime DATE NOT NULL,\n", - " chemical_formula TEXT,\n", - " UNIQUE(name, tag, version, beamtime)\n", - ");\n", - "\n", - "CREATE TABLE izero (\n", - " id INTEGER PRIMARY KEY AUTOINCREMENT,\n", - " scan_id INTEGER NOT NULL,\n", - " beamline_energy REAL,\n", - " time_stamp TEXT NOT NULL,\n", - " photodiode REAL,\n", - " ai_3_izero REAL\n", - ");\n", - "\n", - "CREATE TABLE nexafs (\n", - " id INTEGER PRIMARY KEY AUTOINCREMENT,\n", - " scan_id INTEGER NOT NULL,\n", - " sample_id INTEGER NOT NULL,\n", - " time_stamp TEXT NOT NULL,\n", - " sample_theta REAL,\n", - " beamline_energy REAL,\n", - " tey_signal REAL,\n", - " ai_3_izero REAL,\n", - " photodiode REAL,\n", - " izero_before_scan_id INTEGER,\n", - " izero_after_scan_id INTEGER,\n", - " FOREIGN KEY (sample_id) REFERENCES sample(id)\n", - ");\n", - "\"\"\"\n", - "\n", - "def get_db_path(dest_root: Path, year: int, month: int) -> Path:\n", - " month_abbr = datetime(year, month, 1).strftime('%b').lower() # 'Jan' -> 'jan'\n", - " return dest_root / f\"{month_abbr}_{year}.db\"\n", - "\n", - "\n", - "def create_database(path: Path) -> Connection:\n", - " conn = connect(path)\n", - " conn.execute(\"PRAGMA foreign_keys = ON\")\n", - " conn.executescript(SCHEMA_SQL)\n", - " conn.commit()\n", - " return conn\n", - "\n", - "\n", - "def ensure_schema(conn: Connection) -> None:\n", - " conn.executescript(SCHEMA_SQL)\n", - " conn.commit()" - ] - }, - { - "cell_type": "markdown", - "id": "ed059bc6", - "metadata": {}, - "source": [ - "## File discovery\n", - "\n", - "Locate all NEXAFS .txt files under the beamtime directory and classify as izero, calibrant (e.g. HOPG), or sample (name_tag_version_angle_scan_number).\n" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "76fac1f7", - "metadata": {}, - "outputs": [], - "source": [ - "def is_nexafs_scan_file(file: Path, max_header_lines: int = 50) -> bool:\n", - " try:\n", - " with open(file) as f:\n", - " head = \"\".join(next(f, \"\") for _ in range(max_header_lines))\n", - " except OSError:\n", - " return False\n", - " if not re.search(r\"Date:\\s*\\d{1,2}/\\d{1,2}/\\d{4}\", head):\n", - " return False\n", - " markers = (\"Scan Type\", \"Scan Motor\", \"From File\", \"Beamline Energy\")\n", - " return any(m in head for m in markers)\n", - "\n", - "\n", - "def locate_nexafs_paths(directory: Path) -> list[Path]:\n", - " return [p for p in list_txt_in_dir(directory) if is_nexafs_scan_file(p)]\n", - "\n", - "\n", - "def catalog_izero_files(directory: Path) -> pd.DataFrame:\n", - " rows = []\n", - " for path in directory.rglob(\"*.txt\"):\n", - " if not is_nexafs_scan_file(path):\n", - " continue\n", - " stem = path.stem.lower()\n", - " if stem.startswith(\"izero_\") or stem.startswith(\"i0_\"):\n", - " parts = path.stem.split(\"_\", 1)\n", - " else:\n", - " continue\n", - " if len(parts) != 2 or not parts[1].isdigit():\n", - " continue\n", - " scan_number = int(parts[1])\n", - " beamtime = pd.Timestamp(datetime.fromtimestamp(path.stat().st_birthtime)).normalize().replace(day=1)\n", - " rows.append({\"path\": path, \"scan_number\": scan_number, \"beamtime\": beamtime})\n", - " return pd.DataFrame(rows) if rows else pd.DataFrame(columns=[\"path\", \"scan_number\", \"beamtime\"])\n", - "\n", - "\n", - "def catalog_calibrant_files(directory: Path) -> pd.DataFrame:\n", - " rows = []\n", - " for path in directory.rglob(\"*.txt\"):\n", - " if not is_nexafs_scan_file(path):\n", - " continue\n", - " parts = path.stem.split(\"_\")\n", - " if len(parts) != 2 or parts[0] != \"HOPG\" or not parts[1].isdigit():\n", - " continue\n", - " scan_number = int(parts[1])\n", - " beamtime = pd.Timestamp(datetime.fromtimestamp(path.stat().st_birthtime)).normalize().replace(day=1)\n", - " rows.append({\"path\": path, \"name\": \"HOPG\", \"scan_number\": scan_number, \"beamtime\": beamtime})\n", - " return pd.DataFrame(rows) if rows else pd.DataFrame(columns=[\"path\", \"name\", \"scan_number\", \"beamtime\"])\n", - "\n", - "\n", - "def get_beamtime_from_catalogs(\n", - " sample_catalog: pd.DataFrame,\n", - " izero_catalog: pd.DataFrame,\n", - " calibrant_catalog: pd.DataFrame,\n", - ") -> tuple[int, int]:\n", - " dfs = [sample_catalog, izero_catalog, calibrant_catalog]\n", - " beams = [df[\"beamtime\"] for df in dfs if not df.empty and \"beamtime\" in df.columns]\n", - " if not beams:\n", - " now = datetime.now()\n", - " return now.year, now.month\n", - " min_ts = pd.concat(beams).min()\n", - " return int(min_ts.year), int(min_ts.month)" - ] - }, - { - "cell_type": "markdown", - "id": "d0b57180", - "metadata": {}, - "source": [ - "## Parsing and sample catalog\n", - "\n", - "Parse filenames into sample metadata and read scan tables (Time of Day, Beamline Energy, TEY, etc.). Sample files follow `name_tag_version_angle_scan_number`; calibrants are HOPG; izero are izero*\\* or i0*\\*.\n" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "60708733", - "metadata": {}, - "outputs": [], - "source": [ - "def _normalize_name(s: str) -> str:\n", - " return re.sub(r\"[^a-z0-9]+\", \"_\", str(s).lower()).strip(\"_\") or str(s).lower()\n", - "\n", - "\n", - "def apply_tag_map(tag: str, mapping: dict[str, str] | None) -> str:\n", - " normalized = _normalize_name(str(tag)) if str(tag).strip() else \"\"\n", - " if not mapping:\n", - " return normalized\n", - " return mapping.get(normalized, normalized)\n", - "\n", - "\n", - "def _keys_from_parse_key(pk: str) -> list[str]:\n", - " return re.findall(r\"<([^>]+)>\", pk)\n", - "\n", - "\n", - "def _parse_angle(raw: str | None) -> float | None:\n", - " if raw is None or (isinstance(raw, str) and not raw.strip()):\n", - " return None\n", - " s = re.sub(r\"\\s*deg\\s*$\", \"\", str(raw).strip(), flags=re.I).strip()\n", - " return float(s) if s else None\n", - "\n", - "\n", - "def parse_sample(\n", - " parts: list[str],\n", - " keys: list[str],\n", - " birth_time: float,\n", - " formula_map: dict[str, str],\n", - ") -> dict[str, Any]:\n", - " if len(parts) == len(keys):\n", - " parsed = dict(zip(keys, parts, strict=False))\n", - " elif len(parts) == len(keys) - 1 and \"version\" in keys:\n", - " i = keys.index(\"version\")\n", - " parsed = {**dict(zip(keys[:i], parts[:i], strict=False)), \"version\": 1, **dict(zip(keys[i + 1 :], parts[i:], strict=False))}\n", - " else:\n", - " parsed = dict(zip(keys, parts[: len(keys)], strict=False))\n", - " ts = datetime.fromtimestamp(birth_time)\n", - " if pd.isna(ts):\n", - " raise ValueError(f\"Invalid timestamp: {birth_time}\")\n", - " return {\n", - " \"name\": parsed[\"name\"],\n", - " \"tag\": parsed.get(\"tag\", \"\"),\n", - " \"version\": int(round(float(parsed[\"version\"]))) if \"version\" in parsed else 1,\n", - " \"beamtime\": pd.Timestamp(year=ts.year, month=ts.month, day=1),\n", - " \"chemical_formula\": formula_map.get(parsed[\"name\"].lower(), \"\"),\n", - " \"angle\": _parse_angle(parsed.get(\"angle\")),\n", - " \"scan_number\": parsed.get(\"scan_number\"),\n", - " }\n", - "\n", - "\n", - "def build_files_catalog(\n", - " directory: Path,\n", - " formula_map: dict[str, str],\n", - " pk: str,\n", - " tag_map: dict[str, str] | None = None,\n", - ") -> pd.DataFrame:\n", - " keys = _keys_from_parse_key(pk)\n", - " rows = []\n", - " for path in directory.rglob(\"*.txt\"):\n", - " if not is_nexafs_scan_file(path):\n", - " continue\n", - " parts = path.stem.split(\"_\")\n", - " if len(parts) < len(keys) and not (len(parts) == len(keys) - 1 and \"version\" in keys):\n", - " continue\n", - " rec = parse_sample(parts, keys, path.stat().st_birthtime, formula_map)\n", - " rec[\"path\"] = path\n", - " rows.append(rec)\n", - " if not rows:\n", - " return pd.DataFrame(\n", - " columns=[\"path\", \"name\", \"tag\", \"version\", \"beamtime\", \"chemical_formula\", \"angle\", \"scan_number\"]\n", - " )\n", - " df = pd.DataFrame(rows)\n", - " df[\"name\"] = df[\"name\"].astype(str).apply(_normalize_name).str.strip()\n", - " df[\"tag\"] = df[\"tag\"].astype(str).apply(lambda t: apply_tag_map(t, tag_map)).str.strip()\n", - " return df\n", - "\n", - "\n", - "def ingest_dataset(file: Path) -> pd.DataFrame:\n", - " with open(file) as f:\n", - " lines = f.readlines()\n", - "\n", - " header_idx = next(\n", - " (i for i, line in enumerate(lines) if \"Time of Day\" in line),\n", - " None,\n", - " )\n", - " if header_idx is None:\n", - " raise ValueError(f\"Could not find 'Time of Day' header in {file}\")\n", - " table_text = \"\".join(lines[header_idx:])\n", - " df = pd.read_csv(io.StringIO(table_text), sep=r\"\\t\", engine=\"python\")\n", - " ts_col = \"Time Stamp\" if \"Time Stamp\" in df.columns else \"Time of Day\" if \"Time of Day\" in df.columns else None\n", - " if ts_col is not None:\n", - " df[\"Time Stamp\"] = pd.to_datetime(df[ts_col], format=\"mixed\")\n", - " else:\n", - " df[\"Time Stamp\"] = pd.to_datetime(file.stat().st_birthtime, unit=\"s\")\n", - " rename = {}\n", - " if \"Tey Signal\" in df.columns and \"TEY signal\" not in df.columns:\n", - " rename[\"Tey Signal\"] = \"TEY signal\"\n", - " if rename:\n", - " df = df.rename(columns=rename)\n", - " try:\n", - " df[\"Beamline Energy\"] = df[\"Beamline Energy\"].round(1).astype(float)\n", - " return df[[\"Time Stamp\", \"Beamline Energy\", \"TEY signal\", \"AI 3 Izero\", \"Photodiode\"]].copy()\n", - " except Exception as e:\n", - " print(f\"Error processing {file}: {e}\")\n", - " print(file)\n", - " raise e\n", - "\n", - "def _izero_before_after(izero_df: pd.DataFrame, time_stamp_iso: str) -> tuple[int | None, int | None]:\n", - " if izero_df.empty:\n", - " return None, None\n", - " df = izero_df.copy()\n", - " df[\"time_stamp\"] = pd.to_datetime(df[\"time_stamp\"])\n", - " ts = pd.Timestamp(time_stamp_iso)\n", - " before = df[df[\"time_stamp\"] <= ts]\n", - " after = df[df[\"time_stamp\"] >= ts]\n", - " before_scan_id = int(before.nlargest(1, \"time_stamp\").iloc[0][\"scan_id\"]) if not before.empty else None\n", - " after_scan_id = int(after.nsmallest(1, \"time_stamp\").iloc[0][\"scan_id\"]) if not after.empty else None\n", - " return before_scan_id, after_scan_id" - ] - }, - { - "cell_type": "markdown", - "id": "8a2743b2", - "metadata": {}, - "source": [ - "## Ingest and pipeline\n", - "\n", - "Insert samples into the database, then izero rows, then nexafs rows (with before/after izero links). Pipeline: discover files, derive DB name from file dates, create DB with schema, ingest all.\n" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "151da6f3", - "metadata": {}, - "outputs": [], - "source": [ - "SAMPLE_COLS = [\"name\", \"tag\", \"version\", \"beamtime\", \"chemical_formula\"]\n", - "\n", - "\n", - "def build_unique_samples(\n", - " files_catalog: pd.DataFrame,\n", - " calibrant_catalog: pd.DataFrame,\n", - " formula_map: dict[str, str],\n", - ") -> pd.DataFrame:\n", - " if not files_catalog.empty:\n", - " out = files_catalog[SAMPLE_COLS].drop_duplicates().reset_index(drop=True).copy()\n", - " else:\n", - " out = pd.DataFrame(columns=SAMPLE_COLS)\n", - " if calibrant_catalog.empty:\n", - " return out\n", - " cal = calibrant_catalog[[\"name\", \"beamtime\"]].copy()\n", - " cal[\"name\"] = cal[\"name\"].apply(_normalize_name)\n", - " cal = cal.drop_duplicates(subset=[\"name\", \"beamtime\"]).reset_index(drop=True)\n", - " cal[\"tag\"] = \"\"\n", - " cal[\"version\"] = 0\n", - " cal[\"chemical_formula\"] = cal[\"name\"].map(formula_map).fillna(\"\")\n", - " cal[\"beamtime\"] = pd.to_datetime(cal[\"beamtime\"]).dt.normalize()\n", - " out = pd.concat([out, cal[SAMPLE_COLS]], ignore_index=True).drop_duplicates(subset=SAMPLE_COLS).reset_index(drop=True)\n", - " return out\n", - "\n", - "\n", - "def insert_samples(conn: Connection, unique_samples: pd.DataFrame) -> None:\n", - " if unique_samples.empty:\n", - " return\n", - " unique_samples = unique_samples.copy()\n", - " unique_samples[\"beamtime\"] = pd.to_datetime(unique_samples[\"beamtime\"]).dt.normalize()\n", - " sample_lookup = pd.read_sql_query(\"SELECT id, name, tag, version, beamtime FROM sample\", conn)\n", - " sample_lookup[\"name\"] = sample_lookup[\"name\"].astype(str).str.strip()\n", - " sample_lookup[\"tag\"] = sample_lookup[\"tag\"].astype(str).str.strip()\n", - " sample_lookup[\"beamtime\"] = pd.to_datetime(sample_lookup[\"beamtime\"]).dt.normalize()\n", - " merged = unique_samples.merge(sample_lookup, on=[\"name\", \"tag\", \"version\", \"beamtime\"], how=\"left\")\n", - " to_insert = merged.loc[merged[\"id\"].isna(), SAMPLE_COLS].drop_duplicates()\n", - " for _, row in to_insert.iterrows():\n", - " conn.execute(\n", - " \"INSERT INTO sample (name, tag, version, beamtime, chemical_formula) VALUES (?, ?, ?, ?, ?)\",\n", - " (\n", - " str(row[\"name\"]).strip(),\n", - " str(row[\"tag\"]).strip(),\n", - " int(row[\"version\"]),\n", - " pd.Timestamp(row[\"beamtime\"]).strftime(\"%Y-%m-%d\"),\n", - " row[\"chemical_formula\"],\n", - " ),\n", - " )\n", - " if not to_insert.empty:\n", - " conn.commit()\n", - "\n", - "\n", - "def load_sample_lookup(conn: Connection) -> pd.DataFrame:\n", - " df = pd.read_sql_query(\"SELECT id, name, tag, version, beamtime FROM sample\", conn)\n", - " df[\"name\"] = df[\"name\"].astype(str).str.strip()\n", - " df[\"tag\"] = df[\"tag\"].astype(str).str.strip()\n", - " df[\"beamtime\"] = pd.to_datetime(df[\"beamtime\"]).dt.normalize()\n", - " df[\"version\"] = df[\"version\"].astype(int)\n", - " return df\n", - "\n", - "\n", - "def ingest_izero_into_db(conn: Connection, izero_catalog: pd.DataFrame) -> None:\n", - " for _, row in izero_catalog.iterrows():\n", - " path = Path(row[\"path\"]) if not isinstance(row[\"path\"], Path) else row[\"path\"]\n", - " scan_id = int(row[\"scan_number\"])\n", - " scan_df = ingest_dataset(path)\n", - " if scan_df.empty:\n", - " continue\n", - " for _, s in scan_df.iterrows():\n", - " time_stamp = pd.Timestamp(s[\"Time Stamp\"]).isoformat()\n", - " conn.execute(\n", - " \"INSERT INTO izero (scan_id, beamline_energy, time_stamp, photodiode, ai_3_izero) VALUES (?, ?, ?, ?, ?)\",\n", - " (scan_id, float(s[\"Beamline Energy\"]), time_stamp, float(s[\"Photodiode\"]), float(s[\"AI 3 Izero\"])),\n", - " )\n", - " conn.commit()\n", - "\n", - "\n", - "def build_rows_to_ingest(\n", - " files_catalog: pd.DataFrame,\n", - " calibrant_catalog: pd.DataFrame,\n", - " sample_lookup: pd.DataFrame,\n", - ") -> list[tuple[Path, int, float | None, int]]:\n", - " rows: list[tuple[Path, int, float | None, int]] = []\n", - " if not files_catalog.empty:\n", - " fc = files_catalog.copy()\n", - " fc[\"version\"] = fc[\"version\"].astype(int)\n", - " fc[\"beamtime\"] = pd.to_datetime(fc[\"beamtime\"]).dt.normalize()\n", - " fc[\"_bk\"] = fc[\"beamtime\"].dt.strftime(\"%Y-%m-%d\")\n", - " sl = sample_lookup.copy()\n", - " sl[\"beamtime\"] = pd.to_datetime(sl[\"beamtime\"]).dt.normalize()\n", - " sl[\"_bk\"] = sl[\"beamtime\"].dt.strftime(\"%Y-%m-%d\")\n", - " fc = fc.merge(sl, on=[\"name\", \"tag\", \"version\", \"_bk\"], how=\"left\")\n", - " fc = fc.dropna(subset=[\"id\"])\n", - " for _, row in fc.iterrows():\n", - " if pd.isna(row.get(\"scan_number\")):\n", - " continue\n", - " path = Path(row[\"path\"]) if not isinstance(row[\"path\"], Path) else row[\"path\"]\n", - " rows.append((path, int(row[\"id\"]), float(row[\"angle\"]) if pd.notna(row.get(\"angle\")) else None, int(row[\"scan_number\"])))\n", - " if not calibrant_catalog.empty:\n", - " cal = calibrant_catalog.copy()\n", - " cal[\"name\"] = cal[\"name\"].apply(_normalize_name)\n", - " cal[\"tag\"] = \"\"\n", - " cal[\"version\"] = 0\n", - " cal[\"beamtime\"] = pd.to_datetime(cal[\"beamtime\"]).dt.normalize()\n", - " cal[\"_bk\"] = cal[\"beamtime\"].dt.strftime(\"%Y-%m-%d\")\n", - " sl = sample_lookup.copy()\n", - " sl[\"beamtime\"] = pd.to_datetime(sl[\"beamtime\"]).dt.normalize()\n", - " sl[\"_bk\"] = sl[\"beamtime\"].dt.strftime(\"%Y-%m-%d\")\n", - " cal = cal.merge(sl, on=[\"name\", \"tag\", \"version\", \"_bk\"], how=\"left\")\n", - " cal = cal.dropna(subset=[\"id\"])\n", - " for _, row in cal.iterrows():\n", - " if pd.isna(row.get(\"scan_number\")):\n", - " continue\n", - " path = Path(row[\"path\"]) if not isinstance(row[\"path\"], Path) else row[\"path\"]\n", - " rows.append((path, int(row[\"id\"]), None, int(row[\"scan_number\"])))\n", - " return rows\n", - "\n", - "\n", - "def ingest_nexafs_into_db(\n", - " conn: Connection,\n", - " rows_to_ingest: list[tuple[Path, int, float | None, int]],\n", - " izero_df: pd.DataFrame,\n", - ") -> None:\n", - " tey_col = \"TEY signal\"\n", - " for path, sample_id, sample_theta, scan_id in rows_to_ingest:\n", - " scan_df = ingest_dataset(path)\n", - " col = tey_col if tey_col in scan_df.columns else \"Tey Signal\"\n", - " for _, s in scan_df.iterrows():\n", - " ts_str = pd.Timestamp(s[\"Time Stamp\"]).isoformat()\n", - " before_scan_id, after_scan_id = _izero_before_after(izero_df, ts_str)\n", - " conn.execute(\n", - " \"\"\"INSERT INTO nexafs (\n", - " scan_id, sample_id, time_stamp, sample_theta, beamline_energy,\n", - " tey_signal, ai_3_izero, photodiode, izero_before_scan_id, izero_after_scan_id\n", - " ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\"\"\",\n", - " (\n", - " scan_id,\n", - " sample_id,\n", - " ts_str,\n", - " sample_theta,\n", - " float(s[\"Beamline Energy\"]),\n", - " float(s[col]),\n", - " float(s[\"AI 3 Izero\"]),\n", - " float(s[\"Photodiode\"]),\n", - " before_scan_id,\n", - " after_scan_id,\n", - " ),\n", - " )\n", - " conn.commit()\n", - "\n", - "\n", - "def run_pipeline(\n", - " data_root: Path,\n", - " dest_root: Path,\n", - " formula_map: dict[str, str],\n", - " pk: str,\n", - " tag_map: dict[str, str] | None = None,\n", - ") -> tuple[Connection | None, pd.DataFrame, pd.DataFrame]:\n", - " izero_catalog = catalog_izero_files(data_root)\n", - " calibrant_catalog = catalog_calibrant_files(data_root)\n", - " files_catalog = build_files_catalog(data_root, formula_map, pk, tag_map)\n", - " unique_samples = build_unique_samples(files_catalog, calibrant_catalog, formula_map)\n", - " if unique_samples.empty:\n", - " return None, files_catalog, unique_samples\n", - " unique_samples[\"beamtime\"] = pd.to_datetime(unique_samples[\"beamtime\"]).dt.normalize()\n", - " year, month = get_beamtime_from_catalogs(files_catalog, izero_catalog, calibrant_catalog)\n", - " db_path = get_db_path(dest_root, year, month)\n", - " conn = create_database(db_path)\n", - " insert_samples(conn, unique_samples)\n", - " sample_lookup = load_sample_lookup(conn)\n", - " ingest_izero_into_db(conn, izero_catalog)\n", - " izero_df = pd.read_sql_query(\"SELECT id, time_stamp, scan_id FROM izero\", conn)\n", - " rows_to_ingest = build_rows_to_ingest(files_catalog, calibrant_catalog, sample_lookup)\n", - " ingest_nexafs_into_db(conn, rows_to_ingest, izero_df)\n", - " return conn, files_catalog, unique_samples" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "cdf0be31", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "DB: sample=6, izero=628, nexafs=4585\n", - "Samples: id name tag version\n", - " 1 ps 100 2\n", - " 2 ps 100 4\n", - " 3 ps 100 1\n", - " 4 ps 100 3\n", - " 5 ps 30 2\n", - " 6 hopg 0\n", - "NEXAFS rows per sample: sample_id nexafs_rows\n", - " 1 1566\n", - " 2 785\n", - " 3 785\n", - " 4 507\n", - " 5 785\n", - " 6 157\n" - ] - } - ], - "source": [ - "conn, files_catalog, unique_samples = run_pipeline(data_root, dest_root, chem_formula_map, parse_key, tag_map)\n", - "\n", - "if conn is not None:\n", - " sample_count = pd.read_sql_query(\"SELECT COUNT(*) as n FROM sample\", conn).iloc[0, 0]\n", - " izero_count = pd.read_sql_query(\"SELECT COUNT(*) as n FROM izero\", conn).iloc[0, 0]\n", - " nexafs_count = pd.read_sql_query(\"SELECT COUNT(*) as n FROM nexafs\", conn).iloc[0, 0]\n", - " print(f\"DB: sample={sample_count}, izero={izero_count}, nexafs={nexafs_count}\")\n", - " samples = pd.read_sql_query(\"SELECT id, name, tag, version FROM sample ORDER BY id\", conn)\n", - " print(\"Samples:\", samples.to_string(index=False))\n", - " nexafs_by_sample = pd.read_sql_query(\n", - " \"SELECT sample_id, COUNT(*) as nexafs_rows FROM nexafs GROUP BY sample_id\", conn\n", - " )\n", - " print(\"NEXAFS rows per sample:\", nexafs_by_sample.to_string(index=False))\n", - "else:\n", - " print(\"No sample/calibrant files found; no database created.\")" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "8ecf55c2", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "DB: sample=2, izero=2421, nexafs=6454, distinct_scans=14\n", - "Samples: id name tag version\n", - " 1 ps 100kd 1\n", - " 2 ps 30kd 1\n", - "NEXAFS rows per sample: sample_id nexafs_rows\n", - " 1 2305\n", - " 2 4149\n" - ] - } - ], - "source": [ - "second_root = Path(\n", - " '/Volumes/DATA/Collins/2026Feb/nexafs'\n", - ")\n", - "\n", - "parse_key_feb = \"___\"\n", - "\n", - "conn, files_catalog, unique_samples = run_pipeline(\n", - " second_root, dest_root, chem_formula_map, parse_key_feb, tag_map\n", - ")\n", - "\n", - "if conn is not None:\n", - " sample_count = pd.read_sql_query(\"SELECT COUNT(*) as n FROM sample\", conn).iloc[0, 0]\n", - " izero_count = pd.read_sql_query(\"SELECT COUNT(*) as n FROM izero\", conn).iloc[0, 0]\n", - " nexafs_count = pd.read_sql_query(\"SELECT COUNT(*) as n FROM nexafs\", conn).iloc[0, 0]\n", - " scans = pd.read_sql_query(\"SELECT COUNT(DISTINCT scan_id) FROM nexafs\", conn).iloc[0, 0]\n", - " print(f\"DB: sample={sample_count}, izero={izero_count}, nexafs={nexafs_count}, distinct_scans={scans}\")\n", - " samples = pd.read_sql_query(\"SELECT id, name, tag, version FROM sample ORDER BY id\", conn)\n", - " print(\"Samples:\", samples.to_string(index=False))\n", - " nexafs_by_sample = pd.read_sql_query(\n", - " \"SELECT sample_id, COUNT(*) as nexafs_rows FROM nexafs GROUP BY sample_id\", conn\n", - " )\n", - " print(\"NEXAFS rows per sample:\", nexafs_by_sample.to_string(index=False))\n", - "else:\n", - " print(\"No sample/calibrant files found; no database created.\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ebcd4d02", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": ".venv", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.13.11" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/notebooks/nexafs-plotting.ipynb b/notebooks/nexafs-plotting.ipynb deleted file mode 100644 index acebae3..0000000 --- a/notebooks/nexafs-plotting.ipynb +++ /dev/null @@ -1,611 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 25, - "id": "dd8497e4", - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "import pandas as pd" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "bb3de6dc", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
energyabsorbance
0249.997130.078594
1270.013340.000398
2271.003850.002064
3272.01285-0.000389
4272.991000.000664
.........
152329.979401.183782
153334.981171.117307
154340.007691.073713
155344.985840.981972
156350.008330.975952
\n", - "

157 rows × 2 columns

\n", - "
" - ], - "text/plain": [ - " energy absorbance\n", - "0 249.99713 0.078594\n", - "1 270.01334 0.000398\n", - "2 271.00385 0.002064\n", - "3 272.01285 -0.000389\n", - "4 272.99100 0.000664\n", - ".. ... ...\n", - "152 329.97940 1.183782\n", - "153 334.98117 1.117307\n", - "154 340.00769 1.073713\n", - "155 344.98584 0.981972\n", - "156 350.00833 0.975952\n", - "\n", - "[157 rows x 2 columns]" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# data = pd.read_clipboard(\n", - "# header=None,\n", - "# names=[\"energy\", \"absorbance\"]\n", - "# )\n", - "# display(data)\n", - "# data.to_csv(\"ps_100_40deg.csv\")" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "f66fcaee", - "metadata": {}, - "outputs": [], - "source": [ - "from pathlib import Path\n", - "\n", - "files = list(Path().glob(\"*.csv\"))\n", - "dfs = []\n", - "for f in files:\n", - " df = pd.read_csv(f)\n", - " df[\"angle\"] = int(f.stem.split(\"_\")[-1].strip(\"deg\"))\n", - " dfs.append(df)\n", - "df = pd.concat(dfs)" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "8a756896", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(283.0, 300.0)" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAzkAAAG1CAYAAADa/zqTAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAAhPZJREFUeJzt3Qd4FNXaB/D/9t30AiEh9N6kiaAUAVEBpYiIGsSODf3sXbzXa7sqXgUrYOeqUZAiCugVlCJFKSKg9E4IhJJet8z3nDNJCJCETbJldvf/e555ts3OnB2WzbzznvMenaIoCoiIiIiIiIKE3t8NICIiIiIi8iQGOUREREREFFQY5BARERERUVBhkENEREREREGFQQ4REREREQUVo78bQERE5A3Z2dlYvHgxRo8eXenrc+bMwYEDB+R9s9mMCRMm+LiFRETkLQxyiIgo6OzYsQNPPPEEMjMzKw1ydu7ciUmTJmH16tXy8ciRI9G7d2907drVD60lIiJPY3c1IiIKOm3atJGBS1VmzJiBvn37lj8eNGgQpk+f7qPWERFRSGZyGjVqhO7du59zvbS0NCQnJ7u1TdEloUmTJh7bZk327e66nm5jTdb1dBu9sW9//nt7o52heiz9+X/HG+0MtmO5YcMGHDp0CMFu8+bNGDhwYPnjxo0bY9asWdW+Jy4uDkbjqT+bDRs2RFJSUo32e+zYMdSvX78WLfb8djzVliNHjiAxMTGoPpMntqOl4+Kp7fA7493taOm4+Pv4pqen4/Dhw+WPnU4nTpw4UbONKBrUoEEDt9YbPny429scMmSIR7dZk327u66n21iTdT3dRm/s25//3jVZl8fSc/vmsfTcvt1d193f30DwySefKP3796/0tUsvvVT58MMPyx//9NNPStu2bavdXv369evcppr8m3l7O55qS03+/wXKZ/LEdrR0XDy1HX5nvLsdLR0XrR3f2vxt0mR3NZvNhhEjRiA1NbXa9VJSUjy+b3e3WZN9e7qd3th3IBxLf7axJuvyWHpu34HQzkBoozvrit9b8btbVFSEUCCyMvn5+eWPxf34+Hiv79dT3xdPbMcb391g+UxaOjZa+kxaOi5a+0xaOjZa+kwp/jwuigZ5KurzRnTsTWxjaLUzENoYKO0MhDYGSjtDJZPz8ssvK48//nj543feeUe5++67vZ7JCUaB8L32Bx6XqvHYVI7HJQQyOd5QVQlRLWEbQ6udgdDGQGlnILQxUNrp7hifQDVv3jzY7XaMGTMGy5cvL39elJoeO3Zste8VY3AoML/X/sDjUjUem8rxuHj2b5NORDrQGNFlYv78+R7dpigjGhsbCy1jG0OrnYHQxkBpZyC0MVDa6Y3fX3/Yt28fHn/8caxatUp2xevXrx8KCgpk1bUVK1agefPm+Pzzz+XAVtFFuri4GI8++mi12xw6dCgWLVrks88QKALhe+0PPC5V47GpHI+LZ/82abK6GhERUV00a9YMM2fOPO25sLCw0yrHjRs3zg8tIyIiXwiZ7mpERERERBQaGOQQEREREVFQYZBDRERERERBhUEOEVGAEONJ9u/f7+9mEBERaR6DHCKiADB37lx06NABv/zyi7+bQkREpHkMcoiIAsCoUaPQrVs3fzeDiIgoIDDIISIKEDqdzt9NICIiCggMcoiIvOhf//oX3nnnHTz22GOYPHky1q5di8suuwxTpkzBtddeiwYNGmDatGnl62/duhVPPvkkJkyYIIOa/v374/vvv6902//5z3/w1FNPoXfv3vjwww99+KmIiIi0jZOBEhF5yfbt2/Hqq6+ioKAARUVFCA8Px0MPPYS8vDxs2bIFqampWLhwoQxo7rrrLvme22+/XQY95513HjZs2IDu3btj2LBhZ23766+/RmJiIh555BGsXLlSBkODBw9G48aN/fBJiYiItIVBDhGRl7Ru3RorVqyAy+XC8uXL5W12djYsFgv69OkDg8GATp06IS0trfw9f/zxBxRFkff79u1bfv9Mn3zyiQyEDh48CLvdjgEDBuDAgQMMcoiIiBjk1NI33wBTpwKLF/u7JUSkYXq9HhkZGXj++edx5513yufODFpEl7SKz1100UVYsGABOnfujNzcXNxwww2VbluUkhbd39q1aycfP/vss179LERERIFEk2NyxFXNESNGyK4cmrRiBfDbb/5uBRFp3Pr16/Hwww/jH//4Bxo2bOjWez7//HOsWbMG06dPx1VXXYWLL7640vXi4+OxdOnS055bt25drdsqfm/F727FrBIREVGg0mSQk5ycjPnz5yMlJQWadPAgUFjo71YQkcaJIKSkpAROpxO///67fC4rK0s+V0a8VpEoJPDMM8/IYgJNmzZFYYXfGtHdrYwISET25n//+x+OHDmCiRMnwmw2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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import matplotlib.pyplot as plt\n", - "import seaborn as sns\n", - "\n", - "plt.style.use([\"science\", \"no-latex\"])\n", - "\n", - "def set_plotting_defaults():\n", - " \"\"\"\n", - " Set matplotlib rcParams for fontsize and grid defaults.\n", - "\n", - " This function configures:\n", - " - Font sizes for labels, ticks, legend, and titles\n", - " - Grid appearance (alpha, linestyle, linewidth)\n", - " - General figure aesthetics\n", - "\n", - " Examples\n", - " --------\n", - " >>> from src.utils.helpers.plotting_helper import set_plotting_defaults\n", - " >>> set_plotting_defaults()\n", - " >>> plt.plot([1, 2, 3], [1, 4, 9])\n", - " >>> plt.show()\n", - " \"\"\"\n", - " plt.rcParams.update(\n", - " {\n", - " \"text.usetex\": False,\n", - " \"font.size\": 10,\n", - " \"axes.labelsize\": 10,\n", - " \"axes.titlesize\": 11,\n", - " \"xtick.labelsize\": 9,\n", - " \"ytick.labelsize\": 9,\n", - " \"legend.fontsize\": 8,\n", - " \"figure.titlesize\": 12,\n", - " \"grid.alpha\": 0.3,\n", - " \"grid.linestyle\": \"-\",\n", - " \"grid.linewidth\": 0.5,\n", - " \"axes.grid\": True,\n", - " \"axes.grid.axis\": \"both\",\n", - " }\n", - " )\n", - "\n", - "set_plotting_defaults()\n", - "\n", - "fig, ax = plt.subplots(\n", - " ncols=2,\n", - " figsize=(10, 5),\n", - ")\n", - "\n", - "sns.lineplot(\n", - " data=df,\n", - " x=\"energy\",\n", - " y=\"absorbance\",\n", - " hue=\"angle\",\n", - " legend=True,\n", - " palette=\"rainbow\",\n", - " ax=ax[0]\n", - ")\n", - "ax[0].set_xlabel(\"Energy (eV)\")\n", - "ax[0].set_ylabel(\"Abs. (arb. units)\")\n", - "ax[0].set_xlim(283, 300)\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "7372bec0", - "metadata": {}, - "outputs": [], - "source": [ - "import matplotlib.pyplot as plt\n", - "from scipy.special import erf\n", - "\n", - "\n", - "def gaussian(E, w, E_0, A):\n", - " # Ensure positive width\n", - " if w <= 0:\n", - " return np.zeros_like(E)\n", - " sigma = w / (2 * np.sqrt(2 * np.log(2)))\n", - " norm = A\n", - " return norm * np.exp(-((E - E_0) ** 2) / (2 * sigma ** 2))\n", - "\n", - "def peak_fit(energy, *params):\n", - " num_peaks = 5 # Number of peaks\n", - " expected_len = 4 + num_peaks * 3\n", - " if len(params) != expected_len:\n", - " raise ValueError(\n", - " f\"Expected {expected_len} parameters (4 for edge+decay, then {num_peaks}*3 for peaks), got {len(params)}\"\n", - " )\n", - " # Edge and decay\n", - " height, edge_pos, edge_width, decay_const = params[:4]\n", - " if edge_width <= 0:\n", - " edge_width = 1e-5 # Prevent division by zero or negatives\n", - " step_transition = height * 0.5 * (1 + erf((energy - edge_pos) / edge_width))\n", - " decay = np.ones_like(energy)\n", - " decay_mask = energy > edge_pos\n", - " decay[decay_mask] = np.exp(-decay_const * (energy[decay_mask] - edge_pos))\n", - " spectrum = step_transition * decay\n", - "\n", - " # Add peaks\n", - " peaks = params[4:]\n", - " for i in range(num_peaks):\n", - " w, E_0, A = peaks[i*3:(i+1)*3]\n", - " # Only add non-trivial peaks (width>0, amplitude!=0)\n", - " if w > 0 and abs(A) > 0:\n", - " spectrum += gaussian(energy, w, E_0, A)\n", - " return spectrum\n" - ] - }, - { - "cell_type": "code", - "execution_count": 191, - "id": "7669705c", - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "energy = np.linspace(283, 300, 1000)\n", - "\n", - "# Initial parameters - now 6 peaks, inserting an extra peak between peak 1 (285.01) and 2 (287.17)\n", - "# We'll add the new peak at 286.09 eV, with width 0.42, amplitude 0.4 (can adjust as needed)\n", - "p0 = [\n", - " 1.1799, # NEXAFS_EDGE: norm (height)\n", - " 289.78, # NEXAFS_EDGE: edge position\n", - " 0.68074, # NEXAFS_EDGE: erf width\n", - " 0.0028455, # exponential decay constant (loaded from parameter file)\n", - "\n", - " # Peak 1\n", - " 0.35877, 285.01, 4.3144,\n", - " # Peak 3\n", - " 0.41166, 287.17, 0.94996,\n", - " # Peak 4\n", - " 1.3867, 288.65, 1.7005,\n", - " # Peak 5\n", - " 2.3432, 293.06, 0.84016,\n", - " # Peak 6\n", - " 8.7234, 298.62, 1.19,\n", - "]\n", - "\n", - "# Bounds for all params: lower and upper, updated for new peak (8 peaks)\n", - "bounds_lower = [\n", - " 0, # norm >= 0\n", - " 283, # edge pos >= min energy\n", - " 0.01, # erf width > 0\n", - " 0, # decay constant >= 0\n", - "\n", - " # Peak 1\n", - " 0.01, 284.5, 0,\n", - " # Peak 3 (287.17)\n", - " 0.01, 286.7, 0,\n", - " # Peak 4 (288.65)\n", - " 1.3, 287.18, 0,\n", - " # Peak 5 (293.06)\n", - " 0.01, 288.66, 0,\n", - " # Peak 6 (298.62)\n", - " 0.01, 293.07, 0,\n", - "]\n", - "\n", - "bounds_upper = [\n", - " 10, # norm\n", - " 300, # edge pos\n", - " 10, # erf width\n", - " 1, # decay constant\n", - "\n", - " # Peak 1\n", - " 3, 285.6, 10,\n", - " # Peak 3\n", - " 3, 288.2, 10,\n", - " # Peak 4\n", - " 10, 293.0, 10,\n", - " # Peak 5\n", - " 10, 298.6, 10,\n", - " # Peak 6\n", - " 20, 300, 10,\n", - "]" - ] - }, - { - "cell_type": "code", - "execution_count": 192, - "id": "afca25b2", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(283.0, 300.0)" - ] - }, - "execution_count": 192, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAzEAAAGdCAYAAAAi1/08AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAAi8lJREFUeJzt3Qd4W9XZB/C/9rLkveKRnZAEshNCFglhhRGgISmBsENZKasUaIGvtNACoYVAyiyFshpGE8JeCZBAFmTvPe14W7Zky9r6nnNlOzaJM2xJV+P/y3OfK8nyvUfHiqRX57zvUQQCgQCIiIiIiIhihFLuBhAREREREZ0MBjFERERERBRTGMQQEREREVFMUUfyZOnp6dBoNMjLy5O2UCouLg75MZscOHAAhYWFIT9uONt8cF8RnNVeFJzSCXqjFone1+Fs94kct9bhwdLt5RjVOwvJRk1Ijx1TfW2vBVYvAYaMBczJoT12B8VdXyfosRO9r91uN8rKypCdnQ2tVhuzz+1Y6OtIHzsWn9shPa67Fji0BOg0FtAms69j9e/Y4phi83g8qKqqat9BAhGUnZ0dtmNffPHFYTv2+eefH3Nt/vUlVwUeu+rFwKE95SE/diz2dTjbfSLHXbu3KpB09TvSPtTHjqm+3rw6EDgVwX2oj91BcdfXCXrsRO/rioqKwGuvvSbtQ33seHl/jNVjx+JzO6THLV8dCDyP4J59Hbt/xxDGBhGdThauyFOYNm0aYk0423z++eeH7dix2NfhbHc4+4N9Hbljs6/j59jhEqv9wb6Oj2OHUyy+rrKv4+Pv2BEMYmQUzjafd955YTt2LPZ1rP7nZl9H7tjs6/g5drjEan+wr+Pj2OEUi6+r7Ov4+Dt2BBP7T8DkyZPlbkLCYF9HDvs6ctjXkcO+jiz2d+SwryOHfR0bAxwMYk4An8yRw76OHPZ15LCvI4d9HVns78hhX0cO+zo2gpgTqk62aNEivP3223j99deP+Nn8+fOlKg6CqIRy2223tbsxREREREREHQ5iHA4HHnvsMXTu3PmIn+3cuRNPPfUUli9fLl2/5JJLMHLkSAwcOPC4JyYiIiIiIgrLdLJXX30Vl19++VF/9uabb2L06NHN1ydMmIBXXnmlXQ0hIiIiIiLq8EjMypUr0a9fPxw8ePCoP9+4cSPGjx/ffL2goAAffPBBm8cT084mTpzYas5hLMw7tNlsiDV2u615r7dGdE3ThOvrk3lcYm+1KpCofa2y2WBpPLfPakWiiNfndTRK9L622+3Ne5VKFfbzJXp/R1Ki93Wr9w91eN8/Er2vw2nevHnS1qS8vLzdx1Ifa9XfxYsX47777sN//vOfo96nvr4eSUlJzdfNZjMqKiraPJlY/fTjjz9GLEpNTUUscdZ4pb3ZbIm5tsdae0+EpTYQ3Fui6+8R8bZYLM39gCjqh0iIpr97vEvkvvb5fM3vx5Hqh0Tu70hL6L72Rvb9I6H7OoxmzJghbU0mTZoU+ulk//rXv3DjjTce85fT0tKkQKaJuJyent7uxhAREREREbV7JEZUI5szZ450uba2Vkrw3717N3744Yfm+4gE/uLi4ubrRUVF6N+//3FPSkREREREFPKRGFFxbNu2bdL2+OOP47LLLmsOYBYsWACPx4MpU6ZgyZIlzb+zcOFCXHnlle1uDBERERER0fGcdMa3GJGZOXMmBgwYgB49euD222/HrFmzYDAYMGrUKIwZM+ZkD0lERERERBTaIOa6666TNsFoNErTxppMnz79xM9GREREREQU7nViKDYFAsFqWERERERE8YZBTBz6YOdqnPHlI9Jlj9cvd3OIiIiIiGI3iBGVzEQ96Llz50bytAnn7mXvwZNaKV3+bkup3M0hIiIiImomYgERE7SschzVQUxeXp602OW0adMiedqEsqfMjkNJu5uvL/jpoKztISIiIiJqScQCIiYQsUF7cTpZnHltzRoEzPbm65sOWlFT75a1TUREREREocQgJs58Wr4SisDhP6vI7/9pV3BqGRERERFRPGAQE2cVyXaotqOrrzt0ymD17PQkLZbtKJe7aUREREREIcMgJo7sqaxBQ3oxxlsGI1WTJN3WryAFa/ZUy900IiIiIqKQYRATR97atRxQ+XF11zFIUZul27plm7G1uFbuphERERERhQyDmDjyTc0qqOqTMCa3B1LVwZGYLpkmlNY0wMrkfiIiIiKKEwxi4igfZqN/M7Lt3aFUKpunk3XNCo7IbC2qkbmFREREREShwcUu48RORzHsGitORV/pekrjSExBugkqpQLbOKWMiIiIiOJksctgCasIL3ZJofdF5c+AT4mxKf2l66kaMQJTB41aic4ZJuwpr5O7iUREREREEItdik0EMu3F6WRx4uPSlVCV5aBv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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from scipy.optimize import curve_fit\n", - "\n", - "# fit angle = 70 to the multi-peak function\n", - "dataset = df[df[\"angle\"] == 40]\n", - "\n", - "popt, pcov = curve_fit(\n", - " peak_fit,\n", - " dataset[\"energy\"],\n", - " dataset[\"absorbance\"],\n", - " p0=p0,\n", - " bounds=(bounds_lower, bounds_upper)\n", - ")\n", - "\n", - "fig, ax = plt.subplots(\n", - " figsize=(10, 5),\n", - ")\n", - "\n", - "ax.plot(energy, peak_fit(energy, *popt))\n", - "ax.plot(dataset[\"energy\"], dataset[\"absorbance\"])\n", - "# for each peak, draw a vertical line at the peak position\n", - "for i in range(4, len(popt), 3):\n", - " ax.axvline(popt[i+1], color=f\"C{i}\")\n", - "\n", - "# plot the step\n", - "ax.plot(energy, (\n", - " popt[0] * 0.5 * (1 + erf((energy - popt[1]) / popt[2]))\n", - "))\n", - "ax.set_xlim(283, 300)" - ] - }, - { - "cell_type": "code", - "execution_count": 194, - "id": "f72bc1d1", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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yZ7YUhv84Cr+/Z4+fbrcoOVwH8yLiopU8YE9EhjHGcdjgXGccTzWEi2WJ1ocFxjLe4ZxXB1xPNFiOeO4OuJ4IsdyxvHSpI7jGpE+jjh688QVwP998/785z/LHbBF4wzxJonu0uJNOjhIxXMwFn9kEyZMkMd+cNA66aST5KtPIjg9/PDD8pUa8Qd38sknY+PGjfIf2a233irXRPvxj38MNb9Px3r/4pXT6ZSvRIn3IlHwnOLLkf6eRP2yYNASQe3gDxevvfYaPv30U/nfhv379+Pee++V/x1RA7W+Vx988AGuuOIKzJs3DwMGDMAJJ5wgT56EV155RX4fxAdz8e/4HXfccdSfJzLGccbxeKPWf3OOhucUf5Iplqv5vWIsPzbGcXXE8WSK5Wr+NyeZzknt58U4rg6RjONxtTieiEIJWmr9IyMi5ag5aBElEsZxIgoVYzlR7DGOE1GoGMeTBxfHiYiIiIiIiIiIiCjp8PInERERERERERERESUdLo4TERERERERERERUdLh4jgRERERERERERERJR0ujhMRERERERERERFR0uHiOBERERERERERERElHS6OExERERERERERERGSzf8DIgXzpxQ5SgYAAAAASUVORK5CYII=", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# First, fit the 70 degree data using the full model to get optimized positions and widths (and amplitudes)\n", - "from scipy.optimize import curve_fit\n", - "from uncertainties import ufloat\n", - "\n", - "angles = df[\"angle\"].unique()\n", - "\n", - "# Dictionary to save peak amplitudes and their uncertainties for each angle\n", - "amplitudes_by_angle = {}\n", - "\n", - "# --- 1. Fit full model to angle = 70 ---\n", - "dataset_70 = df[df[\"angle\"] == 40]\n", - "\n", - "popt_70, pcov_70 = curve_fit(\n", - " peak_fit,\n", - " dataset_70[\"energy\"],\n", - " dataset_70[\"absorbance\"],\n", - " p0=p0,\n", - " bounds=(bounds_lower, bounds_upper)\n", - ")\n", - "\n", - "# Save amplitudes & their uncertainties for 70 deg\n", - "n_peaks = len(popt_70) // 3\n", - "amps_70 = [ufloat(popt_70[3*i], np.sqrt(pcov_70[3*i, 3*i])) for i in range(n_peaks)]\n", - "amplitudes_by_angle[70] = amps_70\n", - "\n", - "# --- 2. For other angles, fit only amplitudes, with positions and widths fixed from popt_70 ---\n", - "def make_amp_only_func(fixed_params):\n", - " def fit_func(energy, *amps):\n", - " # amps is array of amplitudes, replace amp_i in fixed_params\n", - " params = fixed_params.copy()\n", - " for i, amp in enumerate(amps):\n", - " params[3*i] = amp\n", - " return peak_fit(energy, *params)\n", - " return fit_func\n", - "\n", - "# Get fixed positions/widths from popt_70, only vary amplitudes\n", - "fixed_params = list(popt_70)\n", - "p0_amps = [popt_70[i] for i in range(0, len(popt_70), 3)]\n", - "bounds_lower_amps = [bounds_lower[i] for i in range(0, len(bounds_lower), 3)]\n", - "bounds_upper_amps = [bounds_upper[i] for i in range(0, len(bounds_upper), 3)]\n", - "\n", - "# Plot for all angles\n", - "fig, axs = plt.subplots(1, len(angles), figsize=(15, 5), sharex=True)\n", - "if len(angles) == 1:\n", - " axs = [axs]\n", - "\n", - "for idx, angle in enumerate(angles):\n", - " dataset = df[df[\"angle\"] == angle]\n", - " ax = axs[idx]\n", - "\n", - " # Check for empty dataset - helps avoid ValueError: `ydata` must not be empty!\n", - " if len(dataset) == 0 or len(dataset[\"energy\"]) == 0 or len(dataset[\"absorbance\"]) == 0:\n", - " ax.set_title(f\"{angle}° (no data)\")\n", - " ax.text(0.5, 0.5, \"No data\", ha=\"center\", va=\"center\", transform=ax.transAxes)\n", - " ax.set_xlim(283, 300)\n", - " # Save as None for missing\n", - " amplitudes_by_angle[angle] = None\n", - " continue\n", - "\n", - " if angle == 70:\n", - " # Full fit already performed above\n", - " fit_y = peak_fit(energy, *popt_70)\n", - " ax.plot(energy, fit_y, label=\"Full model fit (all params free)\")\n", - " fit_peaks = popt_70[::3]\n", - " fit_positions = [popt_70[3*i+1] for i in range(n_peaks)]\n", - " else:\n", - " # Amplitude-only fit using fixed positions/widths from 70 fit\n", - " amp_only_func = make_amp_only_func(fixed_params)\n", - " try:\n", - " popt_amps, pcov_amps = curve_fit(\n", - " amp_only_func,\n", - " dataset[\"energy\"],\n", - " dataset[\"absorbance\"],\n", - " p0=p0_amps,\n", - " bounds=(bounds_lower_amps, bounds_upper_amps)\n", - " )\n", - " fit_y = amp_only_func(energy, *popt_amps)\n", - " ax.plot(energy, fit_y, label=\"Amplitude only fit\")\n", - " fit_peaks = popt_amps\n", - " fit_positions = [fixed_params[3*i+1] for i in range(n_peaks)]\n", - " # Save amplitudes and uncertainties (sqrt(diag(cov)))\n", - " amps_this = [\n", - " ufloat(popt_amps[i], np.sqrt(pcov_amps[i, i]) if pcov_amps.shape[0] > i else np.nan)\n", - " for i in range(n_peaks)\n", - " ]\n", - " amplitudes_by_angle[angle] = amps_this\n", - " except ValueError as e:\n", - " ax.set_title(f\"{angle}° (fit error)\")\n", - " ax.text(0.5, 0.5, f\"Fit failed:\\n{e}\", ha=\"center\", va=\"center\", transform=ax.transAxes)\n", - " fit_positions = []\n", - " # Save as None for failed fit\n", - " amplitudes_by_angle[angle] = None\n", - "\n", - " ax.plot(dataset[\"energy\"], dataset[\"absorbance\"], label=\"Data\")\n", - " ax.set_xlim(283, 300)\n", - " ax.set_title(f\"{angle}°\")\n", - " ax.legend()\n", - "plt.tight_layout()\n", - "plt.show()\n", - "\n", - "# amplitudes_by_angle now holds the fitted amplitudes and their uncertainties for each angle." - ] - }, - { - "cell_type": "code", - "execution_count": 202, - "id": "e325c7ac", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "\n", - "amps = {\n", - " \"angle\": angles,\n", - " \"cos^2(angle)\": [np.cos(np.deg2rad(ang))**2 for ang in angles],\n", - " \"amplitude\": [amplitudes_by_angle[ang][0] for ang in angles],\n", - "}\n", - "\n", - "# Compute the peak width as ufloat\n", - "amps[\"width\"] = [\n", - " ufloat(popt_70[3*i+2], np.sqrt(pcov_70[3*i+2, 3*i+2])) for i in range(n_peaks)\n", - "]\n", - "\n", - "# Correct area calculation for a Gaussian where width is FWHM:\n", - "# Area = amplitude * FWHM * sqrt(pi / (4 * ln(2)))\n", - "amps[\"area\"] = [\n", - " amp * width * np.sqrt(np.pi / (4 * np.log(2))) for amp, width in zip(amps[\"amplitude\"], amps[\"width\"], strict=False)\n", - "]\n", - "\n", - "# Extract nominal value and std dev using the uncertainties package\n", - "amps[\"area_n\"] = [a.n for a in amps[\"area\"]]\n", - "amps[\"area_unc\"] = [a.s for a in amps[\"area\"]]\n", - "\n", - "plt.errorbar(amps[\"cos^2(angle)\"], amps[\"area_n\"], yerr=amps[\"area_unc\"], fmt='o-')\n", - "plt.xlabel(\"cos^2(angle)\")\n", - "plt.ylabel(\"Peak area\")\n", - "plt.show()\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "955ee231", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": ".venv", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.13.11" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/notebooks/nexafs-process.ipynb b/notebooks/nexafs-process.ipynb deleted file mode 100644 index c1a6c70..0000000 --- a/notebooks/nexafs-process.ipynb +++ /dev/null @@ -1,1259 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "id": "383abd55", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/javascript": "(function(root) {\n function now() {\n return new Date();\n }\n\n const force = true;\n const version = '3.8.2'.replace('rc', '-rc.').replace('.dev', '-dev.');\n const reloading = false;\n const Bokeh = root.Bokeh;\n const BK_RE = /^https:\\/\\/cdn\\.bokeh\\.org\\/bokeh\\/(release|dev)\\/bokeh-/;\n const PN_RE = /^https:\\/\\/cdn\\.holoviz\\.org\\/panel\\/[^/]+\\/dist\\/panel/i;\n\n // Set a timeout for this load but only if we are not already initializing\n if (typeof (root._bokeh_timeout) === \"undefined\" || (force || !root._bokeh_is_initializing)) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks;\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, js_modules, js_exports, Bokeh, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n if (js_modules == null) js_modules = [];\n if (js_exports == null) js_exports = {};\n\n root._bokeh_onload_callbacks.push(callback);\n\n if (root._bokeh_is_loading > 0) {\n // Don't load bokeh if it is still initializing\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n } else if (js_urls.length === 0 && js_modules.length === 0 && Object.keys(js_exports).length === 0) {\n // There is nothing to load\n run_callbacks();\n return null;\n }\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n window._bokeh_on_load = on_load\n\n function on_error(e) {\n const src_el = e.srcElement\n console.error(\"failed to load \" + (src_el.href || src_el.src));\n }\n\n const skip = [];\n if (window.requirejs) {\n window.requirejs.config({'packages': {}, 'paths': {}, 'shim': {}});\n root._bokeh_is_loading = css_urls.length + 0;\n } else {\n root._bokeh_is_loading = css_urls.length + js_urls.length + js_modules.length + Object.keys(js_exports).length;\n }\n\n const existing_stylesheets = []\n const links = document.getElementsByTagName('link')\n for (let i = 0; i < links.length; i++) {\n const link = links[i]\n if (link.href != null) {\n existing_stylesheets.push(link.href)\n }\n }\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const escaped = encodeURI(url)\n if (existing_stylesheets.indexOf(escaped) !== -1) {\n on_load()\n continue;\n }\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error;\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n } var existing_scripts = []\n const scripts = document.getElementsByTagName('script')\n for (let i = 0; i < scripts.length; i++) {\n var script = scripts[i]\n if (script.src != null) {\n existing_scripts.push(script.src)\n }\n }\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const escaped = encodeURI(url)\n const shouldSkip = skip.includes(escaped) || existing_scripts.includes(escaped)\n const isBokehOrPanel = BK_RE.test(escaped) || PN_RE.test(escaped)\n const missingOrBroken = Bokeh == null || Bokeh.Panel == null || (Bokeh.version != version && !Bokeh.versions?.has(version)) || Bokeh.versions?.get(version)?.Panel == null;\n if (shouldSkip && !(isBokehOrPanel && missingOrBroken)) {\n if (!window.requirejs) {\n on_load();\n }\n continue;\n }\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error;\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n for (let i = 0; i < js_modules.length; i++) {\n const url = js_modules[i];\n const escaped = encodeURI(url)\n if (skip.indexOf(escaped) !== -1 || existing_scripts.indexOf(escaped) !== -1) {\n if (!window.requirejs) {\n on_load();\n }\n continue;\n }\n var element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error;\n element.async = false;\n element.src = url;\n element.type = \"module\";\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n for (const name in js_exports) {\n const url = js_exports[name];\n const escaped = encodeURI(url)\n if (skip.indexOf(escaped) >= 0 || root[name] != null) {\n if (!window.requirejs) {\n on_load();\n }\n continue;\n }\n var element = document.createElement('script');\n element.onerror = on_error;\n element.async = false;\n element.type = \"module\";\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n element.textContent = `\n import ${name} from \"${url}\"\n window.${name} = ${name}\n window._bokeh_on_load()\n `\n document.head.appendChild(element);\n }\n if (!js_urls.length && !js_modules.length) {\n on_load()\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n const js_urls = [\"https://cdn.holoviz.org/panel/1.8.5/dist/bundled/reactiveesm/es-module-shims@^1.10.0/dist/es-module-shims.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-3.8.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.8.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.8.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.8.2.min.js\", \"https://cdn.holoviz.org/panel/1.8.5/dist/panel.min.js\"];\n const js_modules = [];\n const js_exports = {};\n const css_urls = [];\n const inline_js = [ function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\nfunction(Bokeh) {} // ensure no trailing comma for IE\n ];\n\n function run_inline_js() {\n if ((root.Bokeh !== undefined) || (force === true)) {\n for (let i = 0; i < inline_js.length; i++) {\n try {\n inline_js[i].call(root, root.Bokeh);\n } catch(e) {\n if (!reloading) {\n throw e;\n }\n }\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n }\n root._bokeh_is_initializing = false;\n }\n\n function load_or_wait() {\n // Implement a backoff loop that tries to ensure we do not load multiple\n // versions of Bokeh and its dependencies at the same time.\n // In recent versions we use the root._bokeh_is_initializing flag\n // to determine whether there is an ongoing attempt to initialize\n // bokeh, however for backward compatibility we also try to ensure\n // that we do not start loading a newer (Panel>=1.0 and Bokeh>3) version\n // before older versions are fully initialized.\n if (root._bokeh_is_initializing && Date.now() > root._bokeh_timeout) {\n // If the timeout and bokeh was not successfully loaded we reset\n // everything and try loading again\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_is_initializing = false;\n root._bokeh_onload_callbacks = undefined;\n root._bokeh_is_loading = 0;\n console.log(\"Bokeh: BokehJS was loaded multiple times but one version failed to initialize.\");\n load_or_wait();\n } else if (root._bokeh_is_initializing || (typeof root._bokeh_is_initializing === \"undefined\" && root._bokeh_onload_callbacks !== undefined)) {\n setTimeout(load_or_wait, 100);\n } else {\n root._bokeh_is_initializing = true;\n root._bokeh_onload_callbacks = [];\n const bokeh_loaded = Bokeh != null && ((Bokeh.version === version && Bokeh.Panel) || (Bokeh.versions?.has(version) && Bokeh.versions.get(version)?.Panel));\n if (!reloading && !bokeh_loaded) {\n if (root.Bokeh) {\n root.Bokeh = undefined;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n }\n load_libs(css_urls, js_urls, js_modules, js_exports, Bokeh, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n if (Bokeh != undefined && !reloading) {\n const NewBokeh = root.Bokeh;\n if (Bokeh.versions === undefined) {\n Bokeh.versions = new Map();\n }\n if (NewBokeh.version !== Bokeh.version) {\n Bokeh[NewBokeh.version] = NewBokeh;\n Bokeh.versions.set(NewBokeh.version, NewBokeh);\n }\n root.Bokeh = Bokeh;\n }\n });\n }\n }\n // Give older versions of the autoload script a head-start to ensure\n // they initialize before we start loading newer version.\n setTimeout(load_or_wait, 100)\n}(window));", - "application/vnd.holoviews_load.v0+json": "" - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/javascript": "\nif ((window.PyViz === undefined) || (window.PyViz instanceof HTMLElement)) {\n window.PyViz = {comms: {}, comm_status:{}, kernels:{}, receivers: {}, plot_index: []}\n}\n\n\n function JupyterCommManager() {\n }\n\n JupyterCommManager.prototype.register_target = function(plot_id, comm_id, msg_handler) {\n if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n comm_manager.register_target(comm_id, function(comm) {\n comm.on_msg(msg_handler);\n });\n } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n window.PyViz.kernels[plot_id].registerCommTarget(comm_id, function(comm) {\n comm.onMsg = msg_handler;\n });\n } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n google.colab.kernel.comms.registerTarget(comm_id, (comm) => {\n var messages = comm.messages[Symbol.asyncIterator]();\n function processIteratorResult(result) {\n var message = result.value;\n console.log(message)\n var content = {data: message.data, comm_id};\n var buffers = []\n for (var buffer of message.buffers || []) {\n buffers.push(new DataView(buffer))\n }\n var metadata = message.metadata || {};\n var msg = {content, buffers, metadata}\n msg_handler(msg);\n return messages.next().then(processIteratorResult);\n }\n return messages.next().then(processIteratorResult);\n })\n }\n }\n\n JupyterCommManager.prototype.get_client_comm = function(plot_id, comm_id, msg_handler) {\n if (comm_id in window.PyViz.comms) {\n return window.PyViz.comms[comm_id];\n } else if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n var comm = comm_manager.new_comm(comm_id, {}, {}, {}, comm_id);\n if (msg_handler) {\n comm.on_msg(msg_handler);\n }\n } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n var comm = window.PyViz.kernels[plot_id].connectToComm(comm_id);\n comm.open();\n if (msg_handler) {\n comm.onMsg = msg_handler;\n }\n } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n var comm_promise = google.colab.kernel.comms.open(comm_id)\n comm_promise.then((comm) => {\n window.PyViz.comms[comm_id] = comm;\n if (msg_handler) {\n var messages = comm.messages[Symbol.asyncIterator]();\n function processIteratorResult(result) {\n var message = result.value;\n var content = {data: message.data};\n var metadata = message.metadata || {comm_id};\n var msg = {content, metadata}\n msg_handler(msg);\n return messages.next().then(processIteratorResult);\n }\n return messages.next().then(processIteratorResult);\n }\n })\n var sendClosure = (data, metadata, buffers, disposeOnDone) => {\n return comm_promise.then((comm) => {\n comm.send(data, metadata, buffers, disposeOnDone);\n });\n };\n var comm = {\n send: sendClosure\n };\n }\n window.PyViz.comms[comm_id] = comm;\n return comm;\n }\n window.PyViz.comm_manager = new JupyterCommManager();\n \n\n\nvar JS_MIME_TYPE = 'application/javascript';\nvar HTML_MIME_TYPE = 'text/html';\nvar EXEC_MIME_TYPE = 'application/vnd.holoviews_exec.v0+json';\nvar CLASS_NAME = 'output';\n\n/**\n * Render data to the DOM node\n */\nfunction render(props, node) {\n var div = document.createElement(\"div\");\n var script = document.createElement(\"script\");\n node.appendChild(div);\n node.appendChild(script);\n}\n\n/**\n * Handle when a new output is added\n */\nfunction handle_add_output(event, handle) {\n var output_area = handle.output_area;\n var output = handle.output;\n if ((output.data == undefined) || (!output.data.hasOwnProperty(EXEC_MIME_TYPE))) {\n return\n }\n var id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n var toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n if (id !== undefined) {\n var nchildren = toinsert.length;\n var html_node = toinsert[nchildren-1].children[0];\n html_node.innerHTML = output.data[HTML_MIME_TYPE];\n var scripts = [];\n var nodelist = html_node.querySelectorAll(\"script\");\n for (var i in nodelist) {\n if (nodelist.hasOwnProperty(i)) {\n scripts.push(nodelist[i])\n }\n }\n\n scripts.forEach( function (oldScript) {\n var newScript = document.createElement(\"script\");\n var attrs = [];\n var nodemap = oldScript.attributes;\n for (var j in nodemap) {\n if (nodemap.hasOwnProperty(j)) {\n attrs.push(nodemap[j])\n }\n }\n attrs.forEach(function(attr) { newScript.setAttribute(attr.name, attr.value) });\n newScript.appendChild(document.createTextNode(oldScript.innerHTML));\n oldScript.parentNode.replaceChild(newScript, oldScript);\n });\n if (JS_MIME_TYPE in output.data) {\n toinsert[nchildren-1].children[1].textContent = output.data[JS_MIME_TYPE];\n }\n output_area._hv_plot_id = id;\n if ((window.Bokeh !== undefined) && (id in Bokeh.index)) {\n window.PyViz.plot_index[id] = Bokeh.index[id];\n } else {\n window.PyViz.plot_index[id] = null;\n }\n } else if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n var bk_div = document.createElement(\"div\");\n bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n var script_attrs = bk_div.children[0].attributes;\n for (var i = 0; i < script_attrs.length; i++) {\n toinsert[toinsert.length - 1].childNodes[1].setAttribute(script_attrs[i].name, script_attrs[i].value);\n }\n // store reference to server id on output_area\n output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n }\n}\n\n/**\n * Handle when an output is cleared or removed\n */\nfunction handle_clear_output(event, handle) {\n var id = handle.cell.output_area._hv_plot_id;\n var server_id = handle.cell.output_area._bokeh_server_id;\n if (((id === undefined) || !(id in PyViz.plot_index)) && (server_id !== undefined)) { return; }\n var comm = window.PyViz.comm_manager.get_client_comm(\"hv-extension-comm\", \"hv-extension-comm\", function () {});\n if (server_id !== null) {\n comm.send({event_type: 'server_delete', 'id': server_id});\n return;\n } else if (comm !== null) {\n comm.send({event_type: 'delete', 'id': id});\n }\n delete PyViz.plot_index[id];\n if ((window.Bokeh !== undefined) & (id in window.Bokeh.index)) {\n var doc = window.Bokeh.index[id].model.document\n doc.clear();\n const i = window.Bokeh.documents.indexOf(doc);\n if (i > -1) {\n window.Bokeh.documents.splice(i, 1);\n }\n }\n}\n\n/**\n * Handle kernel restart event\n */\nfunction handle_kernel_cleanup(event, handle) {\n delete PyViz.comms[\"hv-extension-comm\"];\n window.PyViz.plot_index = {}\n}\n\n/**\n * Handle update_display_data messages\n */\nfunction handle_update_output(event, handle) {\n handle_clear_output(event, {cell: {output_area: handle.output_area}})\n handle_add_output(event, handle)\n}\n\nfunction register_renderer(events, OutputArea) {\n function append_mime(data, metadata, element) {\n // create a DOM node to render to\n var toinsert = this.create_output_subarea(\n metadata,\n CLASS_NAME,\n EXEC_MIME_TYPE\n );\n this.keyboard_manager.register_events(toinsert);\n // Render to node\n var props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n render(props, toinsert[0]);\n element.append(toinsert);\n return toinsert\n }\n\n events.on('output_added.OutputArea', handle_add_output);\n events.on('output_updated.OutputArea', handle_update_output);\n events.on('clear_output.CodeCell', handle_clear_output);\n events.on('delete.Cell', handle_clear_output);\n events.on('kernel_ready.Kernel', handle_kernel_cleanup);\n\n OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n safe: true,\n index: 0\n });\n}\n\nif (window.Jupyter !== undefined) {\n try {\n var events = require('base/js/events');\n var OutputArea = require('notebook/js/outputarea').OutputArea;\n if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n register_renderer(events, OutputArea);\n }\n } catch(err) {\n }\n}\n", - "application/vnd.holoviews_load.v0+json": "" - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.holoviews_exec.v0+json": "", - "text/html": [ - "
\n", - "
\n", - "
\n", - "" - ] - }, - "metadata": { - "application/vnd.holoviews_exec.v0+json": { - "id": "44508d65-0443-44b2-8a0f-441f442f682a" - } - }, - "output_type": "display_data" - } - ], - "source": [ - "from pathlib import Path\n", - "from sqlite3 import connect\n", - "\n", - "import matplotlib.pyplot as plt\n", - "import numpy as np\n", - "import pandas as pd\n", - "from pyref.nexafs import load_nexafs, normalize_by_group\n", - "\n", - "plt.style.use([\"science\", \"no-latex\"])\n", - "\n", - "def set_plotting_defaults():\n", - " \"\"\"\n", - " Set matplotlib rcParams for fontsize and grid defaults.\n", - "\n", - " This function configures:\n", - " - Font sizes for labels, ticks, legend, and titles\n", - " - Grid appearance (alpha, linestyle, linewidth)\n", - " - General figure aesthetics\n", - "\n", - " Examples\n", - " --------\n", - " >>> from src.utils.helpers.plotting_helper import set_plotting_defaults\n", - " >>> set_plotting_defaults()\n", - " >>> plt.plot([1, 2, 3], [1, 4, 9])\n", - " >>> plt.show()\n", - " \"\"\"\n", - " plt.rcParams.update(\n", - " {\n", - " \"text.usetex\": False,\n", - " \"font.size\": 10,\n", - " \"axes.labelsize\": 10,\n", - " \"axes.titlesize\": 11,\n", - " \"xtick.labelsize\": 9,\n", - " \"ytick.labelsize\": 9,\n", - " \"legend.fontsize\": 8,\n", - " \"figure.titlesize\": 12,\n", - " \"grid.alpha\": 0.3,\n", - " \"grid.linestyle\": \"-\",\n", - " \"grid.linewidth\": 0.5,\n", - " \"axes.grid\": True,\n", - " \"axes.grid.axis\": \"both\",\n", - " }\n", - " )\n", - "\n", - "set_plotting_defaults()" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "d19fa362", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
scan_idbeamline_energysample_thetatey_signalphotodiodeai_3_izeroizero_before_ai_3_izeroizero_before_photodiodeizero_after_ai_3_izeroizero_after_photodiodechemical_formulabare_atombare_atom_substratepd_response_0pd_response_1raw_absabsorbance_0absorbance_1
059604250.020.00.035662-0.0500670.0259730.04881199.8497200.051836109.128996C8H82603.24082346222.0320280.0004890.0004751.3730600.0003560.000346
159604270.020.00.060007-0.0506720.0562190.094066185.2357190.090720190.336240C8H82011.34893639675.1588050.0005080.0004771.0673820.0004760.000447
.........................................................
78359606345.055.00.097090-0.0501340.2247690.311204560.1887730.279683497.546969C8H831010.35299224029.7507770.0005560.0005620.4319520.0012860.001301
78459606350.055.00.104971-0.0502460.2433340.334121612.1708190.298319543.050218C8H830035.37668523319.4207960.0005460.0005490.4313860.0012650.001273
\n", - "

785 rows × 18 columns

\n", - "
" - ], - "text/plain": [ - " scan_id beamline_energy sample_theta tey_signal photodiode \\\n", - "0 59604 250.0 20.0 0.035662 -0.050067 \n", - "1 59604 270.0 20.0 0.060007 -0.050672 \n", - ".. ... ... ... ... ... \n", - "783 59606 345.0 55.0 0.097090 -0.050134 \n", - "784 59606 350.0 55.0 0.104971 -0.050246 \n", - "\n", - " ai_3_izero izero_before_ai_3_izero izero_before_photodiode \\\n", - "0 0.025973 0.048811 99.849720 \n", - "1 0.056219 0.094066 185.235719 \n", - ".. ... ... ... \n", - "783 0.224769 0.311204 560.188773 \n", - "784 0.243334 0.334121 612.170819 \n", - "\n", - " izero_after_ai_3_izero izero_after_photodiode chemical_formula \\\n", - "0 0.051836 109.128996 C8H8 \n", - "1 0.090720 190.336240 C8H8 \n", - ".. ... ... ... \n", - "783 0.279683 497.546969 C8H8 \n", - "784 0.298319 543.050218 C8H8 \n", - "\n", - " bare_atom bare_atom_substrate pd_response_0 pd_response_1 \\\n", - "0 2603.240823 46222.032028 0.000489 0.000475 \n", - "1 2011.348936 39675.158805 0.000508 0.000477 \n", - ".. ... ... ... ... \n", - "783 31010.352992 24029.750777 0.000556 0.000562 \n", - "784 30035.376685 23319.420796 0.000546 0.000549 \n", - "\n", - " raw_abs absorbance_0 absorbance_1 \n", - "0 1.373060 0.000356 0.000346 \n", - "1 1.067382 0.000476 0.000447 \n", - ".. ... ... ... \n", - "783 0.431952 0.001286 0.001301 \n", - "784 0.431386 0.001265 0.001273 \n", - "\n", - "[785 rows x 18 columns]" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "data_root = Path(\"/Users/hduva/projects/als-nexafs\")\n", - "\n", - "conn = connect(data_root / \"oct_2025.db\")\n", - "df = load_nexafs(conn, \"ps\", tag=\"30\", version=2)\n", - "with pd.option_context('display.max_rows',5):\n", - " display(df)" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "9978662e", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.nexafs.set_regions(pre_edge=(272, 281), post_edge=(335, 350))" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "8f876304", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[,\n", - " ,\n", - " ,\n", - " ,\n", - " ,\n", - " ,\n", - " ]" - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA18AAAHBCAYAAACWtQFzAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAAw+FJREFUeJzs3Qd8k+X2B/BfdvcuFGjL3luWMhREBVFEBFQUXOAC98Cr/L3ugXjdA3GjAoog4FZQcAAiIoIgGyy7g+6VNMn/c563KQUKpG2a1d/3ft7bJE3TJ7U0Oe85zzk6p9PpBBEREREREdUpfd0+PBEREREREQkGX0RERERERF7A4IuIiIiIiMgLGHwRERERERF5AYMvIiIiIiIiL2DwdYzCwkJfL4GIiIiIiIIQg69y9957Ly6++GK88847vl4KEREREREFISOCVG5uLpYsWYJRo0ZV3LZgwQKkpaWpy2azGZMmTVKXt2zZgvT0dDz66KPo0qWLz9ZMRERERETBKygzX1u3bsU111yDl19+ueK2bdu2Yfr06bjjjjvU8e2332LdunXqc9HR0TjnnHNw1VVXYd68eT5cORERERERBaugDL7atGmDESNGHHXbrFmz0L9//4rrgwcPxsyZM9XlpKQkjB8/HkuXLsXs2bO9vl4iIiIiIgp+ARd8FRQU4O6774bNZqu4TUoJH3744ZN+3YYNG5CcnFxxPSUlRd1WWUxMDDp27FgHqyYiIiIiovou4PZ8RURE4NZbb8V9992HadOm4cCBA3j++efV5VN1MZSvdYmMjERGRoa6LOWIVqsVrVq1wuTJk+v8ORARERERUf0TcMGXaNasGW677TbcddddMBqNKvCSBhonExcXd1QbebkcHx9f0emQiIiIiIioLgVc2WFNdevWDfv27au4vnfvXnY2JCIiIiIirwnI4GvXrl2qk6GUG0r2a8qUKaps8GTGjBmDn376qeK6tKG/4oorvLBaIiIiIiIiQOd0Op0IsIYb0lzj6aefViWHrizWW2+9VdF0Y/fu3SogW7FiBebMmYMBAwao2z/88EPs378foaGhKC0txT333OPT50JERERERPVHwAVfREREREREgSggG24QERER8M4776gqkG3btqF58+a47rrr1O0LFixQY1iENKSaNGmSj1dKRESCwRcREVEAWrVqFT7//HN89tlnkCKW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/dG4cWNERESgbdu2qoTj22+/rftVBkvwxcwXEVH9UF526ImDiIjqUdnhu+++qzYq9+7dG5MnT0ZUVBRCQkKQl5eHgwcP4qOPPlL3efXVVxEfH++dVQfani9X8CX7vgSDLyKioOaUbocMnIiIPG7OnDnqCNQGSicNvl577TW0bNkS33333Qnvc/PNN6sgbPr06fjvf/+LsLCwulhncOz5khdiyX6x7JCIiIiIyO8bKHmt7DArKwsDBw7EkCFDTvkgSUlJePzxx7Fx40ZPry+4yg6FBF/MfBERBTedDk693iMHEREFjxNmvqSEsDplhEajEb169fLUuoIr+IqNPXKdwRcRUdDzRNnhkgVrsXTBnyjJCPHYuoiIyLdOeErN4XCocsO0tDR1/Z9//lEH1WDPl6vs0NXxkGWHRER0Cudcchqe+nCCmnNJRERBHnxNmTIFX375Je69917Mnz8f7du3V/u7fEU21Ultp2ywCygsOyQi8jl57ZDXEO9t0PZMp0M27SAiqidlhz169FCb2cRXX32FP/74A2bXnCofkDN/ixcvRsBh8EVEVO82aDvLW80TERG5XXYo3Q7FsGHD4HQ6cejQoRPdndxpNS9YdkhEREREVC+dMPg677zzjmq40bNnT7zxxhveWldwtpoXzHwREQU9pyo71HvkICKielB2mJiYiMsuu0xdXrp0KQYPHozTTz/dm2sLfE4nUFTEzBcRUT3EskMiouC0fft27Ny5E3l5eWprVMeOHREVFVX7Icsu//77L7wlIyNDBX5BobhYC8C454uIiIiIKKDNnDkTr7zyCrZu3YrIyEiEhISoAKysrEztKX7yySfRvHnzkz6GW/UMst+rruTn5yM6Oho6nQ4Gg0FFkUG130sw+CIiqlek4YZdr/PIQUREviXJoWuvvVbFRAsWLEBJSYm6bc+ePcjNzUV6ejquv/56PPzww/j8889rn/mSwKiufPDBB6qTYnJyMvR6vU87KtbJfi/BOV9ERPVyzxcREQW20tJSlfF6/fXXVaarKuHh4Tj77LPVISO61q1bh27dulV5X5++Mkj0KE9k6tSpWLRoEUySFQomruCLmS8iIiIiooBjt9tx3333nTDwOtaoUaNOWnpo9GXZoUSSt912G1atWoVx48bhm2++wbvvvlvlfdPS0nD++ecf9cTkOJbUXfoLw4EDkK13eXY77NnZ6jbJgTmLilBYft2f118TXL9vcf2+xfX73/rlDKQcLlIa4i3OWlaNLJ/3O36atwZlh4LsxCQRUQAJCws75X0OHjyoShB79eqlrsuWqloFX66uh54mEaTUR8px44034swzz1TBWPfu3Y+7b2pqqttDlmNjY+EX9FpiMapRI1nUkSyY1QrzSdboN+uvIa7ft7h+3+L6/Wv9EydOVIeL14YsS7dD1C74GjCmtzreuuIrj62LiIg87/HHH8fXX3+NHTt2nPK+bpUdRlTes1RHevfujdGjR2Pz5s0I6j1fLDskIiIiIgoa0gFx48aNbt231nu+fvjhB3hKUlISGjZsiKDBPV9ERPWTThpueOYgIiL/988//7h1P7fKDsWSJUvw7LPPYvfu3bCWd+uTvWDSZrHA1VK9mvbu3YvCwkK0bdtW9ceXNvMDBgxA0HD9XCrXirLbIRFR0FNlh+x2SETkcXPmzFHHvn37fPL9paPhsSSekc7tlfcY1zr4kt720pVQAiVpCS8cDofqdV9Tv/zyC2655RZcd911ajr0Cy+8EFwdDyXzFRpasfdLYeaLiIiIiKhGxo4dqw5v7eGtqg/FoEGDKq5LMkpimtNPP92trzdWZ0/WTTfddNztXbp0QU1dfvnl6ghaEnwdu1+OwRcRUT2Z88WSQSKiYDNt2rTjtklJ13YJBis3eKp18HXHHXeoic1du3Y9KtL78MMPVUaMThB8Vd7vJVh2SEQU/HSA3YvBl1SirF+/XrU3Ptl8GSIiqv2oLBmBVdlff/2F3377za2vdzv4+u6771SkJ3uzKtPpdAy+Trbn69jgi5kvIiLyoNmzZ6tRLDIE1BV4yZYA15sDs9mMSZMmnfJx5PVdTrLKngXZgy1z02RLwGmnnYarr74a7dq1q/PnQkTk75o1a6bin8pzkOPi4vDII494NviaO3cuNmzYgDZt2qhv6PLJJ5/AG2RTnaTzXHWeAZP5iow8+jYGX0REQb9BW2u4UfeZrxkzZqjX56VLl8JgMKjbtm3bhunTp2PlypXq+ogRI9C3b19069btpJ2L//vf/6o3FR07dsQZZ5yhZnFKACbDQ2UWp1S+SOMtCeaIiOqrBQsW4OKLL67x17sdfMkf4mMDLzF48GB4g5x9c3fIsl9lvo7d88WyQyKioN+grfZ81X6ay0kdOHAAd955J/7444+KwEvMmjUL/fv3P+p1eubMmXjttdeqfBwJSvPz87Fs2TIYjSd+W7Bu3TpV6fL0008f9f2IiOqTi2sReFUr+OrVq5fqTNinT5+jbpc/1u+8806tFhG08vPZcIOIiKplxcersPKTI3sHdAeqDuLmzZunOgQvXLgQ9957L0JDQ/Hee++pKpXKnbhSUlLUfauSlZWlOnf169fvlOuSzFnLli1VRq1ycEdEVN89/PDD+Prrr93a9+V28CV/3KX8YNOmTRW3Sa3jli1bar7SYCeZr/j4o29j5ouIqF5w1rDs8IzLz1CHyyejq54bs3nzZpXJe+CBB9T1IUOGqJEtMm8motKJv8jISDWTsyrx8fFHBV5fffUVhg0bdtz99u/fj99//x1nnXUWAy8iomNccskl6Ny5M9zhdvD10EMP4cwzzzzu9jVr1rj7EPVPVWWHzHwREQU9b+z5khJByWq5DB06VO3dko3fEoC5yGUJstwhe8Vk/5jM85S9YhJolZSUoEePHuqs7qJFi1SQl5SUVCfPiYgoEHXq1AnZ2dmeDb5kv5d0O7znnntUrbd0Qtq7d2+VARmVY/BFRER1pG3btmq/l0tYWJg6pDywcmMRea12dybn8uXLVbAlQZeMkpHATcoS09PTVcON9u3bq/cBL7/8cp08JyIif5ebm4sPPvhABVuujodymzQ/cqepk9vBl7SZlc5HNptNBV8tWrTAqlWr8MYbb6guSFSNhhsSfMl/LA7gJCIKUtJwo27/xo8aNQovvfSSel2WvV+yLeCCCy5QnQ3Hjx9fcb8lS5bgrrvucusxb775Zrz66qsV19966y0kJyer139puGWxWNQ8GyKi+uq6665TXV+lHFviIbFx40Y17sMdbgdfAwcOxP33339cEw6p/2bwVc3Ml5B5aa7LREQUVJw6KTus226HUvr32GOP4bbbblNlgVJaOG7cOFUyOHnyZDzzzDOqCYfs6RowYIBbjxkVFaWCOBna/OWXX6qTrJJJc5UZyiywrVu31unzIiLyZ1J6fcMNN2D79u0qAJMqwOLiYtV91qPBl7ShldRa5Vbzr7/++knb0tZrktk6WfAl2S8GX0REVAuXXnqpOo4lQVhNSJXLhAkT8Oeff6oMmpTWyIlXCd4effRRNbi5Q4cOHlg5EZF/kJNN69evR3R0dMWg+pORE1CffvqpqjSQMR5ywktOTElXWZm9eCpuR05jxoxRf4hl3pcEYNJiXmZ+vPnmm/CGgBuyXFysBWBVlR0K6XgYFuaTpRER1TfeHrLsjbLDutCuXTv8+uuvR90m7etdw5vlpKu3XveJiGozCFlOFgkpEZw0aVKV95s9e7aaIywlg+4EXq45X1OmTFEnou6++27VIVZOWEnHQ3e4HXx1794dn332mRreKM02JNp7++23VTmCNwTckGXJeomTZb6IiChIhyzXfbfDuiJzamSAs7zBkIYehw8fxrnnnovWrVvjueee8/XyiIhOSk4USedWmUkopHOrJJCOjVkkSyVNMqTDa3UGx0tDohUrVlRcd/2dlE6z7jhpQbp0NnrkkUdUKk5IzbdEerJYKT/wVuAVkBh8ERFRgJE9ZFLhIqU0QvaSyR4waa5FRBQIZs2addQ8wsGDB1f8TXORE0yyR+u11147ZeAlgdU777xz0vtUDrwkbpLRHDXKfMlmW8l23XHHHapUY/jw4Rg5cuRRAxnpFMFXZGTFTfkHAGOhGaFyhYOWiYiClmS+7AFYdihzwqQ1vez1cpGMYc+ePQOiuZbsu3B31o4v5eXlIRBwnZ7FddbO/Pnz1eEiIzCqsmHDBgwaNKjiusxDlP1Ylcl16RK7cOFC3Hvvvao5kZRYVx5QXzmwkgHKsh9WyhNl/NaJfm6vvPIKSktLVfKqRsGXtJe99dZb1ZGVlYXPP/9czfqSJyWdPiQQk2iSTTfcy3wtngCk2ExQk9GY+SIiClpO2fNVy7LDNXN+xZq5K2Der82R8QY5udq4ceOjmmvJHm95MxEI5P1IbGwsAgHX6VlcZ/Cvc+LEiepwOVEZucwnrBxERUZGIiMj46j7bN68WX39Aw88oK5LXPPCCy/g//7v/6p8TOnw3qBBAxWAyfYrmXkoDTokayYzvmR/WVFRkeoyKyXbJ+N21CQtbK+55hp1yJOSdJqk9aTV4r///uvuw9Tr4Ct7JxAfzbJDIiI6tZ5j+6nj24s/8tr3lJk1Tz31FHbt2oXvvvsOP/74o5ol5m4LZSIiX4uLi1Oxiotcljjm2BM1khFzGTp0qMr8n0zTpk3V3ETpdihxkARccmKqU6dOavi8tJx3h9vB11dffaW6eYjw8HCMHj1aHXv27MGiRYvUvK+YmBh3H65eBl/5+4FSS6Vuh0REFNTZr0AcHrp69Wq8++676iywvGGRUhzpeExEFAi6det2VGdbKaXu0qXLUfdp27atapThEhYWpg53SNnhiUoPPRp8SdcQ6QYiveyla4hsZCspKUHv3r1V9CcBmKTsXIMY671jgq/SfMAqRwkzX0REQc8LQ5briryuy+FitVrx888/uz2omYjIl8aMGYPx48dXXJds1V133aUuyx4v6dg+atQoldW32Wxq75c0FpLbvcHt4Gv58uUq2JKg68MPP1QpvNTUVBw6dEh1RZTaR0m5vfzyy3W74kAKvqSzYflcL8l6iVIGX0RE5CdkXqfrTcmJSAOLVq1aMfgiooDQqlUrTJ48We2/kkYaspdV/n7JnqxbbrlFxS0y00u6u952222qq6tk+Ws6nL7Ogq+bb74Zr776asX1t956SzXkkCclG3MtFgv++uuvulpnYAZfx5QcitIilh0SEdWLhhsBUHbYsWNHtTFdzgILmacpb0RktqbLjh07AqbhBhGRqCqQkrJCKUF0ufTSS9XhCQ6HAwcPHlQNizwWfEVFRamUnDy4tKBftWqVqql0lRlKe1fZgFZXpHZTupK4BmUGXPBVXnpaUsTMFxGRt82ZM0cdlfcB1PmQ5QAIvqTc5u2330ZiYqK6np+fr84MH8u155uIiIC///5bVQU4nVo3Wul4KDOQf//9d88FX1dffbVqr/jnn3+qKdEyA+T+++9XaTz5ZtLxo0OHDqgrchZOzsgFeuarhJkvIiKvc524O1Fr4vrMFXiJqk6iSlULK1uIiDRSqihzwiQh5WrSkZmZecoW86cMvqQuUkoJXVOf27Vrh19//fWo+0gHJLFt2za8/vrrePbZZ936pvXCCYIvO5j5IiKqDwIh83Wsc845B6eddprqYCzbCrZs2aK6HbPVPBGRRqr+Dhw4oOIiudyyZUvs3r37qAHQJ6M/WSmCzPqQIOxUWrduje7du6uOSFQuP7/KskMHgy8ionqx58uu88zhTZIZXLBgAcxmsyqrkZOwUpb4xBNPeHUdRET+ShJTkumSRh7y91H2xErDjsq9MWqU+ZLgSwYoS6tGaSEvw8eku2FlUuu4YsUKlQG77LLLcPrpp9f+GQVx5isqGSjay7JDIiLyD/I6Lp2MGzVqVHFbs2bNMG3atBN+jQRlMlSUiKg+ioqKUn8zV65ciZEjR6rOidIFvvLQ5pM56RCSBg0a4OOPP0Z6erqK7mS4snTxkAeXbyx/oCXFJuWGMnCZThx85e0D4tuw7JCIqD5wNdyozfHnnJ/x3kVP1mmTkNjYWHUCVVrOn0pBQQH+85//qK8hIqqvbr75ZtWcqGfPnujVq5dqsiGD6X/88Ue3vv6UDTeMRiP+7//+D1OnTsX69etVYw1Jr0kA1rlzZ7enQdfn4EsaoUjmq9X5wK4ftD10DL6IiIKZBFC1G7LceexAdfx20ZuoS/feey+mTJmC6dOnq0oXmdsZHR2tSmukg5e87v/yyy8q4yVDSSu3oSciqo8WLVqkKgduuukm1WJeTk5Vbl7kkW6HMstLhpLJQW4GX5GR6mJxFuCwaZkveUF2mszQseyQiIj8gJxkfe655/Dzzz+r5lm33367CrpESEgIzjjjDFx11VV4+umn1X2JiOqzyZMn48MPP8TgwYNV8CWzEaVT7COPPIKHHnrolF/Pv6JeyHxJyaHQgi/AaTBBx8wXEVFQlx1K041AIqNj5BBSUiNVLgkJCb5eFhGRX9m1a5fakvXCCy9U3CaBmHSFdSf4ql1NhBe5hizLkMxAC75cbeZdwZdDb2LZIRGRF8lrh7yGeGvIMjyw58t1+EJkZCQDLyKiKsg4DukEK1WBLp9++qlqVuiOgMl8BdSQZdnkdWzwpQNimgE6g2S+zOx2SETkRRyyTEREniBNNm699Va112vmzJmq0YYMXa6cCauz4Gvjxo1qwLK7E53rDQmsysqOBF/7gPAGgMEEmCPKZ30x80VEFPTdDomIyPOVDHPmzPFqJUNlI0aMUNmv2bNnq06xrVq1Um3nJSir8+Br7ty5+Oabbxh8HUuyXqJS5iuyMVCwYzb6Tg6D4zUGX0REwUz2ewVq8CV7vfbv369m1/z1119qxIy7XbyIiIK9kqFHjx6qQ+x9991Xo6+v1Z6vxx57TPW2p5MHX0WZQHgiUJa/E7EpGXDoWHZIRET+58svv1TDQ2+88UZ1XYYpy2v9r7/+6uulERH5BZlzPHDgwONuX7NmTXDt+Qrk4Ks0DwiNs8NhPQxjaJw2aJmZLyKioGYPwMzXo48+ildeeQWbNm1S12XWl5zhHT58OP78809fL4+IyOdkuPJll12mygxdTTecTqfa++VOAOZ25mvWrFn47LPP1GUZuHjuuefi9NNPx4oVK1BbS5cuxbXXXotgDr6iGh8GnA6YQmzc80VEVE9azXvi8KazzjoLV1xxhep26CL7KqS1MhERQf1NjI2NRWZmJjIyMiqOwsJCz2a+ZJLzRx99BIfDoaK9iIgIvPHGG2rIWN++fWv8BIqKivD444+jadOmCNrgKxeISspQl3WJhbCDZYdERHRyG+f8iE1zliFqn/dO1knQJRvH5Syu1WrFsmXLMGnSJJxzzjleWwMRkT+75ZZb0LZt26NazQvZI+sOtzNfY8aMUZPun332Wfzzzz8qE9a1a1e0aVM+vKqG3nrrLYwePRpBpYrMV3hiprqsCy+B3cHMFxFRcKv9fK/2Y8/GqMWPqlEr3nL//ffj559/xvvvv4+YmBhMmDABQ4YMUa/VREQEtGvX7rjAq6SkBM8995xnM19///23aq24ZMkS1d4xKSlJXZ42bRquv/766q8cwG+//YaOHTtiz549p7yvlDqef/75FddHjRqljmPl5eXB18yHDiEcQLYEWNnZKMmLgSnigPqcQVcGm8MEa0EBCrOz/XL9tcH1+xbX71tcv/+tf/78+epwSU9P91rZod0ZeHu+jEaj2uMlR2WHDx/22ZqIiPzV9u3bMWPGDLz77rvIyclRJ648FnxJaaCk02SYWMOGDXHo0CE1yfntt9+u0WKlnGH58uXqD/x77713yvunpqa6PWRZ6jB9PmRZr0dso0ZwOHSwFQBhCVnqU0Y4YHeaYdbpYD7BOn2+/lri+n2L6/ctrt+/1j9x4kR1uHDI8tFkn4JUs5yK7Pl+/vnnvbImIiJ/JluwZDvW66+/jh9++AENGjRQrzN79+71fLdDCbqkDW1ubq5KuQ0dOvS4tJu73nzzTVXOEJSk7FBKDnU6WMsrEE0hGbDrdDCgDFY7yw6JiIJZoAxZljO1gwcPVqWNJ3o9lzcaBw4cYPBFRPXa/v37VfwiZdhy4urCCy/EoEGD8PXXX6uqgYMHD3o2+Fq4cKHqgBQaGoqWLVuqzNV///tffPrppzVqliGNOl5++WV1WYI5abyxY8cOVWse8KT0pbxTlDTb0BvsMOlzcTgkHLHFhbDZpeFGia9XSUREdcb7nQpronXr1njttddOuX3g448/9tqaiIj8jXRll8aDMnz+1ltvxTXXXKMyXnK7BF5CtmR5tOHGXXfdhalTp6qobvXq1Vi3bp0qQ/jf//5Xoych3ZQ2b96sjqeeegojR44MjsDLFXxFR1c024hsdBh6OJAVFgEDnChzGJn5IiIiv1A58JK92FWRck3ZemC32724MiIi/yAnqWTrlWS6JBElW69ETSoA3c58lZaWqi5Iev2ReC05ORlxcXHV/qZBL1d6y0dVBF8xKVqbeQm+kAU4nAY4rbYAOCdKREQ1Lzt0+/ym33jiiSfUHE95rZetBVLpYrPZcNppp6kGW3LyVcbNRJW/xhER1QehoaEq2yWH7JN95plnkJ+fr0oRXeRy48aNax58yR9beVCXBx54QHXzkPrGynXgGzZsqN2zASqeTNA4JvMVnZwJu06P3JAwdZvDYISzxMrgi4goWDl1cARgt8MvvvgCf/75J04//XR8//33uO+++9RJ1q1bt6rXfxkiKtUqTz75pK+XSkTkE+3bt1d/B2ULlnTTlRhGgi75OynbsWocfElQ1bNnT5VOk2GLlQeLucjn5A8zVZH5Ku+45cp85YaEIlQvDegBp8EAZynLDomIyL9ceumlmD17dkWVi3Q0lkDMbDar22QI86pVq3y9TCIin5O/i2PHjlXHxo0bceONN7r1dScMvqTEQBpiTJ482ZPrrD/BV7Nm6mJJLhDe9DDyzSGI0peXaRj1DL6IAomcgKphZ1eqn9ScrwCsb2jbtq0aFiqVLdLd+LvvvlMnYqXbsZCTsbJXm4iIjpC5xR988AFqvefLncBLBi5LxFfX9u3bpzb8uiLMgGq4kVyAQqMR0eXBl9OiB0qtPl4kEZ1SWRkwbhywbRuwYAFQg86u5B/ktUoOeS3xVvDlrGXZ4ba5S7Bt7lLE7/ded9zzzjsPbdq0Ua3lW7VqhU8++USVGMp4GZlpI0OqU1JSvLYeIqJAIZ0Q3VHj3cB///03br75Zq/N6pIZJDJk2e8DryoablhiimA1mBCt19rPI0QHJ7sdEvk3h0M2pALz5wPp6UDv3gDLrQKWvHbIa4i8lgSK1pefg2ELn/Lqmvv166cGhUrwJRmurl27Yu7cuWqOjVyWjoevvvqq19ZDRHQsOZEmCRlvnUzztGoFX9KEQ2rBBwwYoP4Iy3TnhISEultdoJLgq1LmyxJWDBhDYdKHaJ+36AArgy8ivy4znDRJ/sIDs2cDa9fKQCRg4EBg7lxfr44ChAxZ9sThCzK/xtVCWT6uWLECffv2xYIFC1QZIhGRr4wNwJNp1Q6+du3ahf/85z+qtfx1112nzorJk5aIU86IUSWS0SouPjrzZSqFwRgOo96ibnOG6gAbyw6J/Dbwuvde4I03pNsAMGYMkJgILF2qXZbs+yOPaPcjOgEZsGx3eubwpq+++gpnnnmmKjls0aKFOqSURtrPExERTrjvVRJUtQ6+JLM1bNgwtG7dWgVbEoBJ4DVw4EBccMEF6myYnAmjY/Z7iYrMlwNmnQ0whFYEX5L50pUx80Xklx59FJDh8S+/rJUdulgswKxZwOOPAw8/DFx5JVDivb04RN4gJ1il4+Fbb72Fd999Vx1y+Ur5fSciIrzzzjvH3bZ8+XLccccdtW+4IfM8iouLVV2lTHV2lRjWZJpzfQ2+HNZi9VFnDMVbh8ogLUx0YTqAwReR/5GgSwKrp56SuRrHf17+9k2dKi3hgPHjpSwAWLgQKO8ER3T0kOXAe62UksLKI2Vcunfv7pP1EBH5my1btuCzzz7DyJEj1ZasqVOn4o033sDZZ59d++DriiuuUMe2bdvw4osvIicnB8OHD1ctaOkk+71Eedmh016kPuqN4ViW61TBlz4C0JWx7JDIr0iZ4T33yER54D//Ofl9R4/WOh9edJHWiOOLL4DOnb21UgoEztp3O/SFMWPG4LHHHsNZZ511XCXM/+TkBBFRPTd37lz88MMPeOGFF/Dee+8hOjpaDaePKn/vX6vgy0XKDuWPcVlZGRYuXIj8/Hw8/PDDasObfHPpekjHBF/lmS84tcyX3hCG3SVOlOn0KvOlszPzReQ3PvwQkL9jt92mlRW6o1cvYPVqYPhwQMqvP/4YOOOMul4p0UllZGQgUfYo1pCcvd29e/dRZTVywvXQoUMMvoio3v5d/eeff466TQbOS0+MRo0a4fbbb8f27dtVV9jnn3/eM8FXxZ2NRowePVod8sf5tddew4wZMxh8naTsEChU/1+iC0OhXY8yvR76MEDvKOPgViJ/8Nln2t6ua68F5I9mdf5NyryjX37R9n8NHw7TjBnA9dfX5WopgBpueKPsUE6GSjOsvLw86PV61ZVQgi/pSpiWlqbuYzabMUm6d7rhoYcewpAhQ467fdmyZR5fOxFRIDh8+DDOOeccNG7cuMqtV644SE5SeTz4qqxZs2Z45plncPrpp9f0IepF2aE+VAu+cuzhKHPoUWYyaHu+XJ0RzWafLZWo3vv2W+Cyy7QywpkzAX0NRh9GRGgDmCdMQLjslWnTBjimZIvqJ4cXyg4/+OAD/PHHHyoAk+BLAi3ZKjB9+nSsXLlS3WfEiBGqOVa3bt1O+XhVBV5C5n4REdVHbdu2xZtvvomrr776pPeTfWB1OmTZ5ZJLLoE3SFt7afwhg9X8PvgymYCQEDjsgDG6QJ39PFRmVmdCVeYrtLxFNQctE/nO8uXAyJHyblPewQIGQ80fS7525kyUyckoecwtWzy5UvKAQB/KWRWn04nXX39dbfaWPVkmee2BNOWchf79+1fcb/DgwappVk38/fff6qzuhAkTPLZuIqJAc6rAKzs7Gx/L9gNvBF/eIoPUpN297DPz+7JDyXrpdLAWACEJ+Sg1GpFu097YlekMQEj52VArm24Q+YSUCl5wAdCvHzBvnnbCpLbMZhS+/z7QqBEwbJgUicMvLFoEvPJKvT/Z4+2hnHKKraZzvXbM/R4/XHJvxXGigLG0tBS33XYbIiIiMG7cONUmXmzYsEFlwlxSUlLUbe6S7l0yr2bAgAHo2rWrCuxc3Y6JiOq7Dz/8EPHx8TAYDBWH/I1cs2aNW19f47JDOknmq2LGF2CJK0Kp0YT9xVrAZdUbYC4f91Xf3wwR+cSqVVpwJA0zJDAJCfHYQzvl3/6XXwKSAZNOiD/8AISGwicKC4Hbb9cGRQvZj/b668CAAb5ZT72jU9UONdH0siHqcCkYU3UTmJCQEFx//fXquPHGG9VwZAnGZEyMBGSVN4bLhvFTkc3j0nBDZnvl5uaqjeQSsMq8T1cJIxFRfffzzz+r/bVyyBiOmJgY/P777wh18/U+YDJfAUMyX5WDr5gilBiM2F2kQ5heB5tkvkLLW/Uz+CLyLjkrJWWGXbsCn38OhIV5/ns0a6Y99l9/abPAfDGaY+1a4LTTpNYOeOst7bq8GT/zTK2xiL9k5chjevfurZphbd68GXFxcSoAc5HLcpb2RCSzJQGWdDaWYOs///kP9u7di4EDB+KCCy5QG8xlzxgREQG9evVS+8Ck4kC6vksfDBnTIZ3gPRp8SQ25ayOZdFA699xzVbMNifromMxXebON0lzAEqllvnYWAx3CjCr40llYdkjkdX/+CZx7LtChA/DVV1owUlckqyaBjzTiONXMME+SQE/agUvmLTxcC7pkr44MyJW/1TLLTLJ9MiT6zTd9ExjWpyHLTp1HDnclJSWhYcOGqrFG5VJFCaS6dOlywq+T4Ky4uFjtifvpp59w5513qhKaqrp6ERHVd5s3b0bHjh2xdetW1V1WOiEOGjSoosOsx4IvOTN2/vnnq3kfl0l3sPJ5IO529qi3ZYfhxbAaTEi3AZ3CTLCq4IsNN4i8Sva7SODVqhXwzTdSh1X333PECOC554Dp07Wgp65JN7qhQ7VB0VJuKGViEmS5SCfHG26QVw2tJFIuy563devqfm31kEwSqemer2OPE5Ggakt5cxeZw7lz5061T0vOwEoQ5bJkyRJcccUVJ3wc+dyPP/6IadOm4cUXX8Stt96K7777Tr3eExHR0Z5++mnVUl6qBcaPH6/KvTt37ox5sofck8GX/DGX+vJnn31WDRqTTJhsxG0jbZXphGWHIWElsBm0TV4dw4yw6ozQubrLM/giqnubNkm7N20m13ffVZrB5wUSBN16KzB5MvD113X3fb74ApDMhgSZ8hwl4LO4Npceo0ED4L33tG6P8veqRw/gzjuPzCikgPHLL7+gX79+mDJlCl599VW88MILquNhq1atMHnyZDUO5uWXX1b3kaDsVOSNxGOPPabeVMjcMJkhJmU0EuBJV0UiIoKaeyyZLxnzIaSR0w033ICz3BwzY6xOu1mZFSJn0ObOnavKG+SynCmTzb5URdlhHhCeVAKrIU5d7xxmQla2AXpX8MWyQ6K6JVmBs8+Weiw5/Q/Exnr3+0vZlgxc3L0buPRSrcui7DfzlJISYMoU4OWXgQsvBN55B0hMdO9rZf+XlGLK+h59FPjkExhkf9j553tufajvZYd1+z0uv/xydVRF9iLU5o2F7B+TY/fu3XjttdcwY8aMikGiRET12dtvv42bbrpJlRpKlUCPHj3w4IMPYvv27bj44os9l/l6/PHH8eijj6qyhuHDh6vOSTLMURZAJyk7NJaiSG9BhF6HVIsBpTBC5wp5mfkiqjvbt2uBlzQakMDrJA0H6pTMAJs9Wxu+LO3t9+71zOP+9pt0WdCGQ0sr+cWL3Q+8XGTI+333adnBli0ROWaMtHHyzPoITqfOI4cvyUZyyaC9J9lSIiLCO++8g+XLl6sOsy5SbSBVCB5vuCGBl2zm3bNnj6oRl2/iGupY1wJmyLJrzpeclM51wGKwoUBnQfMQAyIMOhV8GUzc80VUp3bt0gIv2du1dKlWaudL0txDSgNl35XsPZPSQNkUVBOHDmkdC6WphtEI/P67VtZYm+YITZuqvXBl0iFRMl+V9gsFi2AcsuxNl1xyia+XQETkF3/PpbxQOsBKEspFZilmZmbWXcONSy+9VHVB8mbDjYAYsixvpirt+bKXFKuP+QhBktmgWs2X6ozQuzJfLDsk8qyyMm2WlWSEZM+TzNmSkkN/IMOXv/1W+/sg7e6ldbdcdzcIk5M1UiIoGTTJcsncLgm8Onf2zPrCwlAgJ7f69NECMNkTFkS8PWQZHup0WJ1uh0RE9cFYb/89P4Z0g5UAMCsrS3U8nDlzJq688krVH8MdbLjhSUVFgN1eKfgqUh9zEYJYo14FrGWoFHwx80XkORLIdOsGTJqklfdJ+VzjxvAr7dtrXQil46KQ7oRnnKFdP1kQJtk7eW7SyVD28mzbBtx4o1bS6Eky90xmlElgKIOoly3z7OPXtz1f0HnkICIi/3HXXXfBYDBg/fr1ao/XBx98gHvvvVc1OHIHG254er+XKC87dFi1zFeWIxSxRu0F1KYzwqBn2SGRx/zzD3D33Vo3QenoJoOUpYOfv5LyQMl8nXce8P33gAxllEyTZOvksgRkrhLCf//Vntv8+UD//oB0VpIgrC5JACaZNWlHL0GslEsOGlS335OqtG/eN+pocqjA10shIqr3Nm/ejG+//VYNspdSbKkErIkaN9xIT09XmRyZCULHBF/lmS+nXct8ZThCEGvQftRlOhMM5SGvo5hlh1QFqWGWki8G5ycntdW33KKV3UlXQwlQ5Ofmz4FXZRJgSQD266/aHjDJYkm2Scr+JPskHQglUybDkT/8UNuHVdeBl0toqBaAyRwwCcCkfJOqRU6x1Xa+V9Lo89Hj4xd9VlpDRESa33//XVX8yRD6q6++Ws312r9/P+o0+BLNmzeH1WpVE5xLS0vVVGeZK0LlXHNyXMEXCtXH/WWhiDFqP2qHzgSd63IR31xTJTL89sorpb0YMHCgbHQE7rhDKzGjI2SvpAwvloHJH3wg0w61bn3SEKA2TSd8RdYsTThcQZg0MZKs0+OPazPCJLCU3wtvPzcJwBYt0lrSSxt7KX2katAFRbdDIiKCmnkoZYXZ2dlqwL003XjiiSfqNviS8kJJs0nbWdfRvXt3FYRR1WWHutACVa+fadf2fAm7zlSxT8NRxMwXASgs1IbxduqkvQF/9llg1SrgqquAjz7SGixI5z65fePGmnfJC/RGGqtXa4FWx47AvfcCV1yhtZOXfVAnGigciEGYzAKTfWFSTjltmtax0VckAFu48EgAJi37iYiI6pnY2Fg1SDk6OhqNGzdWTTYkCKvMLn0fPLnnSzp6FBYW4qeffkKnTp3QqFEjrF69WnX5oKrLDvVhBSg1GlFiN1bs+YLODJjKA7FiZr7qPSktlO44Ui4nmQ7JdIWEaJ+T8jO5be5cNQAXDz6oBR2pqdq+INknNHiwb9+c1xWHQws0pdxNMi7y85HMsrRsl1I9CQgkCAtGEoRJG3l/Ib+P8vMeORIYPlwrR5QgkU5KzpE4HMxaEREFg8hj3mvJqC2JhSqbPXs2xo8f77ngSzJdFosF55xzDh577DH897//xWmnnYZrrrkG46T7Fh0pO4yMhNMBGCMKUWo0odRuqCg7hF4yX3o4pYsVyw7rNwkwpFmNZBO+/LLqN7Tyxveaa7SjuFgLQqSxhBwyXFdK1KQRgwRicvhbd7/q2L0bZhldIcODJejKyNAyWtJ5T4JOCTR79tSeM3mX/B7Kf5tRo7SSSClHlCCYTrnni4iIAt/HH3+MLbINoBJJQJ0tlUmqQKdMdT/0aPAlg8MiIiLw888/o3fv3ujQoQNsNps6vDlkWXr7++2sL8l8SWRsMKA0B7DEFKHEYESpzYA4V/AlmS9Vfmhmw436rKAAuPpqYMECrbTQnUyClIBJxksOaXSzY8eRQOyhh4ApUxDVrh0wcaLWjrxhQwREACr7nOT5fPMNwmQIca9eWlAqf9Ak8JLnTf4RgMnvq+ytcwVg0rUxQMhMFjk4ZJmIiGqS+ZLmR0bjkdCpadOmFZcl+NqzZ49bj+V28CWZrssvvxytW7dWXQ6l2cby5cvV4GVvDln2azk5QEyMulgiwVdUkZb5KpGyQy340uu1vSkOnRFOlh3WP3KyQt60SktxaSMu5VwjRtTssVq21Lr9yVFSosrz7G+9BcMDDwD/+Y/Wpe7aa7UOev6WLZJ9brNmAS+9pDUa6d4deO895AwciNhKf8zIz0gmUgIwyYDJ7638/srJgADgOnEnJ/G8gwOSiYiCxVtvvYVzT3GifKmbjalO2nBDBilXJgOVJfASPXr0UEPG/pC5M1R18BVRjFKDETa7HlEG7edmkLJDCb4MBjhKGHzVK7t2ac0zZI9XXJzWVKOmgVdVWYkLLkDhO+8ABw4A0oVUzsBcfDGQnKw1pZA9VL4mAaeUEMqaJGiUfVvSQl3+jkgmsLxZDfl5ACZt/aXsUH6/XAOj6bg9X+x2SEQUHM51o0JpsGyPqG3ma/LkySrSq5xiq0xSbOvWreOerxMEXyFhxcgxhKn9XvryoNWk15opOPQmOEtYdlhvSEmqdIuTsrp164CuXevue0lgN3mydqxfD7z7LvD++8D//qeV9Ek27LLLtPt5613ozz9rpYWSKZEAS8oKZX3McgVuADZvnnYiQU4gyH4wybASERFRzTNf0slDNpelpKSousZjD7n92O4fqO/BV3mnQ5X5spSgRG+uGLAszOVlh06DAU5mvupXR0MZxieNNeoy8DpWly7A889rg5slWyH7wGR2lHToGT1a61wnc7Pq4jn/+CNw991A27bAWWdps7heeQWQ1qzPPMPAKxgCsE8/1coOpROi/G7TUaTs0BMHEREFj5NmvmRys3T3+PLLL9GlSxdMnDgRSUlJR91ngdT/05Hgq/wNZXE2EN2gFMUGy5FOh/J+xZX5MhrgKGXwFfQk6yPBjgQi334LSEMMXzCbtUYJchw8KN0HtAHFkrWIj5cNMdpcMekmWNNhvocPa80/vvhCK0WTfw/SfVEyfq++qnUrlMwfBQ/5vZIM2KWXar9bEuDLf29S3Q4dtRzJl77gS2R89hWaZZR30iUiIrdIfJKWlqYum81mTJo06aR7tT788EO8K5VCXnDSd0IhISG4+uqr8cknn2D48OF48sknMWHCBPwobyTLXSIvuLUwd+5cDBkyRLWy99aT9k7ZoQMWgw2FODJgWYQayxtumAwAyw6Dn2Sd3ngDmDFD697nD+QEyp13AmvXamWJ112nvWnu3Rvo0AF46img/A/WUUGkZLOKirQSysxMbW/Zhg3A9OlaZqtBA63L4rZt2tDoNWu0LJc8f6mVZuAVvAGYzKGTBi/yeiDBN3lEg0suQMcPXlUNp4iIyD3btm3D9OnTcccdd6jj22+/VdukqlJUVITHH38cTnmf4yVuvxvq2rUrXnrpJbz44ouqr/2wYcPU9VzXYOEa2LVrlypblB/K559/rhp4BDT5WZQHX7bCYvUxXyfB15FMQqTBDAd0cJoMcFqZ+Qpa8o/4sce0sjvpPDhhAvxS585aCaA055DMnGS+ZLBzs2ZaCW1YmNYpUQIneZMdHq79jicmalktKWv873+1fVyvvaYFWxJ0STfHHj1qnkWjwCK/Gx9/rGW9JAD7/HPUd9Iow+7wzEFERO6ThoH9ZQZqpUYYM2U2ahWkt8Vo2YbhRW63mndZuXKlKkP87rvv8Msvv2Dv3r14Rt681YCUMDZv3lxdTkhIUNmvYMl8lRUXqY/ZzqMzX5F6I8r0ehhMegZfwUyCLsl6SQA2dSr8nsGgda+TQ4IoaYcv5YkSeLkOeYNd+bocEoxJxkyCNKrf5PdBAjApYZVW9JLxlOHg9TgAZ6dC75NGYNnZ2fB3eXmBUUrKdXoW11k78+fPV4dLenp6lffbsGEDBg0aVHFdelTMkxL5Y/z222/o2LGj2/O5vBp8FRQU4L333sOrr76qGnC0bdsWzz//PK655ppaNdwILR+eKn8sH3zwQbwhL9YnIHWblWeKjRo1Sh1+8wtjtyM2Lw+FJhOs2dkoLdQyghn2EETZSo+8GFjtKvgymQ0oKyw67kXCX3/h3cX1A4Y1axD1/PMoeuwxlEpHPwnKA+3nLyVk7iot1Q4P4O9PEKz/tdcQZjbDct11sM2cieJp02CXDKuP1u/uizUFB+nOHBsbi0DAdXoW1xn865w4caI6XE40t7GwsBAREREV1yVWycjIOOo+VqtVzSueMmWKinH8JvjavHkzXnnlFXzwwQfqiVxwwQWq1LByr/udO3eiRYsWNV6Aw+HAjBkzVJR66aWXYuPGjQiXs+nHSE1NdXvIsk9+YcqDqPAmTRAeGwsjDqnr6Y4wtI0MR2ys9pwal9ph22+QtocwOpxVrtUff+Gro16vX8oNpeSua1eE3X8/wiSj5GX1+ufvB7h+ALNnq1Jb0623wiRnH2+8UStn9cJ4g2PX7+6LtafJnwJ2KiQi8r64uDgVt7jI5XhpLlbJm2++qfpY+MJJg68OHTqodvMjR47EzTffXFEi6Ooekp+fj6effloFZzWl1+txyy23qC4kAwcOVB1HvPXi6FGu7EZ5q3mnvkB9PGgPPWbPlw6HdAY4pexQGhhQcJG09ooVwJIlWikfUX0l3S3/+ksbLyAnJKQpxxNPSDRUL/5tyNZt7tciIvK+bt26YZ+M2CknW6Ska3tl0t3w5ZdfVpelf4U03tixYwd+lrmkvgy+pA5yxIgRKgBbtmyZSs9V7gYikaTc5gkShPXt2xeGQH1RdgVf5Xu+HCEFqrFGdlnoUXu+wg06lOkN0nMeujx2Owwqu3YBt9wip9a1N55E9Z3sA5POmrIP7P77gZtuAmTTs7zg9e3r69UREVEQGjNmDMaPH19xfcmSJRVN/RYuXKgq+aSHhYuUHUqc463yw5MGX9KmcagM0DyJM888s8bfXKJM2U/WQFpUl0emlTfIBXLwpQ/LR6nRiGK7CTGVhiwbdDrYdHqV+UIZM19BQ/77Dxumdf17+21fr4bIv8h4AxklcsMN2ty7fv0AeWGcNk0b+B2MOCCZiMgnWrVqhcmTJ6uGgNJfol+/fhgwYICKO6TaTjq4u6r5fOGkwdepAi9xYS0GakpqT+aIST1+y5YtMXXqVIQFate0Y4IvY3gRSg1GlJYZjsp8iTKdAZDgy8bMV9C4+Wbg0CFg1Spp3enr1RD5pzPOkPZSwDvvaJmwhQuBhx4CbrtNy5IFEakRcTp8vQoiovppnMwdPYbEGJLoOZY0EJTDb1vNe5IMVz4o7ayDgWveWXQ0HGWAKaIQpUYTikuMJwy+dMx8BYctW7QW2zJIuU0bX6+GyL9Jafn112vt6GVG3JQpMmgFeOklbRg3ERFREHN7yDK5kfmSLo0mE0rzAEukZL5MKLUbEFOp4Yawq+BLx+ArWEjplJRVXX21r1dCFDik86E041i7VhvaLTPmJCDbvRvBQsoOa3NkLfwCOybcdNTGcSIiCmwMvupgwHJJDmCJKEaJwYxog17t8zou82WWzBfLDgOedP6Ubp/33ANYLL5eDVHg6doVkMZN0p5eynbbtwceeQQoLkYgU63mHbpaHdHDL0LTmTPRpEkTXz8dIiLyEAZfdRR8hYSWoERvPq7k0JX50sntdma+At7//qc12ZBGAkRUM3KCSjoiSgnv7bdrLek7dAA++0yLYoiIiIJEwARfUnYh87/mzJkDvw2+ymd8FWcDFnMpivUhiKki+CrTGaEz6qBj8BXY0tNlSp/WLKDSJHUKHtIwYfljwGdXAdk7fb2aekD+HT39NPD331oG7JJLpPMTsHFjrR9aXjvkNcRbJXxO6GB3euYgIqLgETDBl5RdLF68GGPl7GgglB0aS1GosyD+BJkvabiht7PsMKC9+KIMqNNaZ1PQsRUBn14GLHsI2PEt8Gp74Lt7tJMrVMekcc2XXwKLFwPbtwOdOkmHJuCLL6SWr0YPKa8d8hritRI+pwTvOo8cREQUPAIm+PJ7RwVfDlj0NuTrQhBXZfBlhM6gg87BzFdAd7d89VVtaKw0DqCgkn8AeO8sYNtXwGULgNt3AWc+CKyZAbzUElj1AsBzJ14oRRw+HNi0CXj/feDwYe26BGbPP39kvAcREVEAYfDlyTfj5cGXtUDbKJ6NEMTLPK9jOFXZIaBn8BW4Zs7UGgKUT0yn4HFwHfBWby0Au/YXoN3FgCkMOPP/gNu2Ax3GAN/dDbzaAdg0n1uS6pw0srnqKmD1amDlSqBPH609fXKyNl9PgjM/JL8WDqdnDiIiCh4Mvuog82UrKFIfM+2S+dJVmfnSG/XQO3jqPCDJu22ZSzRmDNC4sa9XQx60ZTHwTn8gvCFw/WqgUfejPx+RBAx/A7hpPRDfBpg3Gnh3ALD3N1+tuJ5lwk4/HfjoI63LqHQYlYYcHTsC55wDLFoE2O3wpz8TdofOIwcREQUPBl91EHxZy4Ovg/bQKvd8OXUm1XBD72TmKyD9+iuwdSswYYKvV0IefKO84llg7sVAqyHAtT8BkeVxtS1/J0oz/4BTum+Ua9ARuPIrYNx3gDUfePt04NPLgcKDfKPsFY0aAQ8/rAVhEowVFAAXX4yoHj2A6dO1EkUiIiI/xODLE2QDeKWywzJnvvqY6Qitcs+XKjs0MPgKWG+/DTRvDpx1lq9XQh4ge7c+vwH4/l6g/3+AMfO0MkNRcugX5G96BYU7PkDehumw5myCs1KdYctzgRvWAhe9A+xeBswdHIX9a3z3XOodsxm44gptPtjq1Sg74wzg//5PK0mU8Q8bNvhwcbWb8VX5ICKi4MHgyxPy87VT5+Wt5u1GV/AVjrgq9nxBZ9LKDp0sOww4eXnAJ58A112ndTqkgFZ8GPhwKPDX+8CI94DBTwI6vXSps6Nw16co2v0p0LAPSjpcB50xDAVbZiJ/82soK0ireAy9Aeh+LXDjWiCikUOVIf4916dPq37q1QtFr7+uZcMeeEDrltilCzBwIDB/PlBW5t31SLdDp84jBxER+W50iKfx3aMnuLpulWe+YC6AAzocLqu67BB6E2DUwwBmvgLOp58CJSXANdf4eiVUS4fWA2+fARz6C7hqCdDtau12R1kh8re8gdKMFchtPgQzm0Xjrcg9+Lx9b9jaXAGnLR95G59Dwfb3YS/JrHg8KVMc9UU+OowG5o8Flk7V5oT5UuZm4ONLgLf6AKtf1cZgBL2GDbXs1+7dwNy5WtA1ejTQooU2QyyAFHy5CIcmTwjYNxhERHVhrLdHh9TX4MuvhywfE3zpQwtRajSixG6ssuxQrzPCKZkv2OG0+/jdGVWPnEEfMEAra6KAJAGR7O96sxdgsAATfwOanql9zl58CHl/Pw970V5saTcMHzRwoDUa4BJ0Q46uGG/EZmBJ53PgbH4xbHk7kLv+KRT++xkctkL19cYQ4OJZwDnTgF+e0gKfUi0R7lWF6cCXk4HXOmndG6VRyDe3A/9rDCy8Bkj7tR50aTSZgMsuA375BVi7FjtbtIB16lQvDlnWKtJrc4SdPwKJL78dsG8wiIjoeEYE2JBlv1Qp+JL9I6bIfBQbzSixVh186fRmwGRQl+2FNhijLN5eMdW05HDJEm1DPwWk3D3Awqu1/Vln3A2c/ThgLP/nZ835B4Xb3wfMUfi+3SBsDbFiCDqgN5pBBx06oBH+wl4s123Daw1KcVr8CPQ7eAil+5fDmvEbQhqfA6elq2rK128KkNhRy4C90xe4fDEQ27zun5+tWJtBJoGflENKENj7Fu05Suv8de8Ba9/UyiwTOwCnXQ90GQ+ExSO4de+OFsuWAZmZaCIlw14gwS33axERUcBmvvyaK/iKjkZRJhAWU4AikxkhOgNM+uNffA0SfJUHZfYClh4GjK++AqxW1VWNAs+G2cDrnYHD24CrlgLnTdeCEmmgUXJgmdrPZYtMxocdumNviA5X4XT0QXMVeAnJVXdHKm7BQJyLdvjHcBivNtFhXbdLoU/ogeK9XwH7PoDDVqDu3+YCYOIqLSCSLJsEfHWZzVv/IfBKW2DZf4Hu1wG3bgf63n0kuIxsBAy4X5tVNv57LTj8fgrwXBNgwZXa+oI+G5aQ4OsVEBFRPRcwmS+/lp2tfYyNReE/QFhkIYoNFsQbtezWsYxSdmjQgq+yfCuY9woQCxYA0so6NdXXK6FqKM4GvpoM/D0H6DQWGPYqEBqrfc7pKFNNNUozVuFwo9MwNyUeKboYjEJ3RCCkysczwoDT0QLdkYJV2IWVpl1Y3SwKg+NHosWWr5G38QVEtr0BhtAGKrsk88LmXQp8cC5w/stAz5s8+/wkaJKhzwfWAu0vAQY/DcS3PvH9paFIi3O0Q8oT172vZcMkOG02JByjPwDCEz27xvrINeeLiIioMma+PBV8hYertsdFGUBoeCEKDFW3mRdG2WhSqeyQAoA02fj6a2DkSF+vhKph14/AjC7Atq+AS2YDo2YfCbwc1lzkb34dpZm/Y1OLvpidGo8+uhYYjz4nDLwqs8CEs9AGt2EQTkMKvosswOcd+sKu0yFv0wtqT5gIjQOu/BroeTPw5c3AoglA5pbaZ7p2LgXmXAS8PwjQG4FrfwYunX904FVWtB/5W99VAWHJwZ8qsnIu4Q2AfvcCt2wBLl0AHPzdqH5eO76v3fpIsNU8EREdj5kvT5CBnnFx6mJhBhDbtBgF+kaIr6rNvOwDr1x2yOArMMheLxnkesklvl4JuaGsFPhhKrDyOaDZQODi94DoSglLa9Y6FO7+BA6dHkvb98POyDCMRle1r6u6wmDGeeiAbkjBx5bf8X7HLhi7bRucm19DePPLYUnsBYMJOP8loEFnYMkUYN07QPLpQNdrgE6XASHljVJP5fAObb+WHLlpQHxbYNQcoONlUHvNXOzF6Sje9w2sWX9Cb4mDIbQhitIWqsMU0wGWhF4wxXSETqI2CRN0QPuRQETbPCy7PQYfngeccQ8w+AnAYK72j4SIiIhOgMGXh4OvogwHGjUvQbY+/ISZL4veDKcr81XAWV8BU3LYti3Qvr2vV0KnKDGUphK/vwrk7QHOnQ6ccadWaiccZUUo2j0f1qw/UBjbGp82T0GIKRoT0QMJiKjV926ASFya1wW/xu7B222B0btD0GDnR7CXZiK0yVDodDr0uB7oOh7YslgLoL6apHUhbHcx0PVqbWhzeTxUQbolbpqnPa+0nwFLlBZsdbtWC+COCrpKs1C871tYM36HzhyNvOZD8G1CCPL0VnS3nYYuWYdhyNyAgm3vqrll5rjTYEnsCUN4U7W+iEZOjPtWC1qXPgDs/lHLFsa3qdWPpt6WHfp61AAREfkfBl+eKjuM1WqZSnMLIT02MpwnDr7MzHwFFpkTJJ02r7/eK9/u8HYg7RcgJBZIbM83vu7Y/wfw+2vavi5HGdBxDNDvM6Bh5yP3seVuReHO2XDYi7Guxen4JSEC3XQpGIqOMHvoT6EZBoxENzTVx2F+cwMGWMzotPdbOEoyEd5irMo0STv6jpdqh3QglEYZEojNHiZDmoEu44CuV2lZ9L/eAzZ9qjXtaDEYuOQjLVAzhR39fR3WHBTv+17tXZOgqrjpufiuQQT26PPRHCFojgb4y7QfK5JsSErqjV5FA9Eycw+smX+iNP0X6EMaqGyY09JJBap97wGaDdK6Nb5xmrZXrds1Rwd6dGp2Lw5IXrp0KT788EO8++676vqCBQuQJgOn5ffSbMakSZO8thYiIjoxBl8eznyVFWlDfQ44wpFsrjr4CtVb1Jwv4Shi8OX3ZE5QVladlxym/w38/CSw8eOjz5i3Gqq1BE8dwEYIlZWVABs/0bJc+1YDUSnAmf8HdJ8ARDQ8cj+nw4qiPV+i9OByFEelYEGLbrBbInEFOqMVGnh8XdIdsQeaorEuBp82WYtDIUacvWMdHNZsRLS+DnrTkQybdCCUPVcS7Bz4Q2t+8efbwIryaQaxLYH+92vBWOWySReHLR8l+5ei5NCv0BlMsCUPwtKGMdhuyEVjGDAOfdACWoe/wWiH7cjAOuzBl2GHoEu1oG3KcPTMcyA+YwuK938H6H+CzTQOpui2aNwDuHEt8PXtwOLrgB3fABe+4X6JJHlPUVERHn/8cTRt2lRd37ZtG6ZPn46VK1eq6yNGjEDfvn3RrVs3H6+UiIiMgTZkWaZay+F3wVdKirpY5shVH3eXRaDrCfZ8hUrv5/JOiPZClh0GRMmhDFXu2bNOHl727nxzB7D5M+0NtmQZ5M22tRDY+T2w8n/AJ6O0+0oWLKWfdqT20/b81LdsRPZOYM0M4M93gOIsoOV5wOWLgNYXaLOtKisr3IPCHR/BXpKJTand8UNSvMp2yR6tEJjc+n77rXYctjnQKdy9+7s0QjSuR38sjo/Ep2YTLt66AY5KnRArk/+GjXtqx3nPAju+0xqDyH/nY//7Smt8e+G/KE1fhdKstdDp9LA37o/lSYnYZMxGIuy4FD3QFg0r2uQLA/TqNjkKUYr12Id1uj2YFV2AqOjG6FHaAe22/qyakFga9kdYynCYIywY8TbQagjw+Q3AjK5a9i21PwLOnDlz1OG1IctenPP11ltvYfTo0fj999/V9VmzZqF//yP/kQYPHoyZM2fitdde88p6iIgoCIIvvx6yXKns0BGitZ3fb49EnLHqF94IQ0hF2aGjmJkvvybvoBYu1GZ71UGUs3s5MG8MVCnaRe9oJWfSnEGYI7TrckiAlvYrsKf8kDI1yY6FxmtBmCsgC5VBvuXd/ILlx5+zu/x5r9A+HtoAhEQD3a7T2rZX1Vbd6bSrjJA0nSgNTcDiTqejKCwWY9EZrd3MdkmQMyezGP/ZnYdChxO9I0yY1Cgcw2JDYHDzd0ECvDHogd8i4zC3owUXb1kPx4ZnYIpuoxpemGM6Qm85OpUk52baDj/+sRxlhbBm/oHS9JWwFx+A3hwLNBqAXxsmYq0pCzEowcXoik5oAn2loKsq4bDgDLTA6WiO/chV2bAVlv1Y1aEdLs1oDexZBlvuFkS0uBLGyGaqRLJJH20e2HtnAWc+qGUZj92f5s9cJ+7kJJ43yMg0Rw33fFm/+wzWJQsrru8ryjrhfX/77Td07NgRe/bsqbhtw4YNGDRoUMX1lJQUzJs3r2aLISIijwqgl87AKDvUhefAptfjcFnYCfd8hRnMKHHt+WLZoX9buxaQNzUeLjmUoGL1K8C3dwLNzgJGfwyEnWT+q2TEOstRnvQtzQP2rjoSkC1/FLAVypvhGDTsCjTpXX70ARIkOxYgQyXsVu15uQIt+VhwUPtcQjstwOx7rzbP6th9T66GGlqAsgL24oPY3rg9vmvSCF30qdXKduWUOXD3rlwsPFyCyxNCMTTWgpkHi3DNthw0txhwY1I4rkgMRXj5vL6TkeyTzAVrEhKLxR0j0CxjF9plH0bM7k9RhHkwhDWBKVYLxAzhKSqTVTkALMvfoQIu6+G/5BlCH9MRh1JPx9poC3bpDiMMBRiGTmrumGS3qkPW1gQx6jgLrfGZfS3eT8pG7+gL0WfHGuRtehEhjc9FaJPzENPUiGuWaaWxyx/RsrKSBYtpVq1vSW4wnzdSHS5NnrqxyvtZrVYsX74cU6ZMwXvvvVdxe2FhISIiKpW3RkYiIyOjjldNRETuYPBVW3JqUzJf5cGXMSIPxSYzimxGxJ+w26EOBWbtR+8sZtmhX/vmGyAqCqhUwlNbRZnAd/do2avT7wLOnVb9DIJ0vJNyOzmENJk4tB7Y+mMRcv4OV4N3pTRPTr/LfRv3OhKQJZ9x9J4oX3HYgawtWrMM2e+0f40cMbCXaplAWat09Evpq605LL7qx3E6HSjL26aaTVgPb1ABSkFMcyxp3ge5kYm4rBrZLvFrXilu3pGDfLsTb7WKwcj4UHX78LhQ/FlgxWsHCzH13zw8vTcf1zYMw8SG4UgyVz1QvbIUxOJa49lY0+hffN/oAHLLDqNFbjY6Zech8eBPKNn3HXSmSNUK3hzTQZVKynNylGRAF5KAw8lnYG1iPLaYigAUIBVm1SykK5Jhwqm//6nIbLMLCtthj7kI34RuxOaOnTF6f3Ng3xLYcjYhvOWVMIY1wln/BZoP1rJgUoYo+8A6XV7rbx98nDo467js8M0338SECROOuz0uLk4FYC5yOT7+BP+AiIjIqxh81VZenpbGiI1Vb4AtkfkoMlpQXGpE3An2fElL5zKT9qNn2aGf++47QMp3TNXb71MV+f1Y9gjw2wvar8zID7SSQk+Q4K3RaUBIcytiY8PVbSW5WkAjzSj2r9Zalf/ylHZ/yYi1G6nNdvJGN0UJtDI3lwdZ5cHWwXVats7VWEIaPDQbVoy254Qhqdup50tJW/XSjNWwZqxWzSycIYlISzkNPyVEIM9kUEHJFdXIdtkcTkzbl48X9hfijEgzXm8Zg2TL0UFN9wgz3mxlxn9TyvDGwSKVDXv1QCFGxYdicqNwJLkxE+xMtFZHprEAm+IP4Kf4A0h3tkBKfj665RSicfY2WDN+A3RGFMS1wt/NO+OPSIOkqdAUITgfzdEOSYiABZ4mmTD5uTVHPBbr1uOdJjb0j7kQ3Xf8hry/n0VoygUISRqI1H563LROGxotHRF3fAsMfUn+/nl8SQHLG3u+pLvhyy+/rC7n5uaqxhs7duzAsGHDjtrbtnfvXnTp0qVO10JERO5h8OWJkkMRFwcpyw+NKUCxQd4U6RB7kpIkBl8BID8fWLECePFFj7wR++ImLQA6426tu11ddy6UfVHSnlwO1xry9wG7fgA2L9RKx5b+B0jsoAVickgAV5utbRJk5ewCMv4BMjYBmf9oh3RytBWV/1NpBTTqAbQdoQVcKmgs3/aUnV2K2NiwEz9+WbHKwpRm/IayvK2A3oKi+Lb4I/E0/BWhQ7guBKchBachFdHQMlbu2FFShhu352BDkQ1TkyNxW+Pwk+7rSrEY8XjTKExpEoFZGUV442Ch2h82NtqAZ6KcCDOc+ococ8UqAjFdATZFHcBvUQdwKLUxYktLUWwwoNRoRFPE43w0qrOAqypRCMWV6I212IPvwzdhY6eeGL0nC0j7HLbsjQhvcQVCYuJxyWyg5VDgq8naeAS53qSXV5ZIQEU3QyFlh8uWLVMft2/fjvHjx1d8bsmSJbjrrrt8tEoiIqqMwZengq/YWBRlAGHhhcg0hCPKoINJBn6dQJlZO63vLGHZod9atkyb8XVeeW1fDUnQs/R+rYX4xe9rnQxPRgIMmdukOmro9NAbQlU5mu7YVn7VJLFEVLL2/eWQYEi66kmXRZmR9fMT2t6ythdrGTHJRskeLDkctiOXKx/WAiBzy5EgSy5L2aAwR2pzyhLaAx3GaAGXCrSi3V+z7OEqy98JW942lOXtgL1IzuY7gcjm+LfFIPwUZ0GuwY6miMMoNFUBSnX2PcmeqtkZxbj/3zw0NOnxdYd4nBZxipRbJVFGPW5pFIEbG4bj/fQiPJSWhz/+zsSbrWKq1R2xciCWhQJsthxCCIzq+UhzDF/QWuanqlb1i/V/4c2mVpwdOwwdd65A7oZnEN50JMyJfdDtap0qDV1wBfBOX+DsJ7STC4Gyz7Au2X00ZLlVq1aYPHkynnnmGYSGhqJfv34YMGCAbxZDRBTg3Ws9jcFXbcl+LyE19ruAUEsxCg0JSDxByeFxma8SZr78uuSweXOgZcsaP4TET9JGfvXLwJDnTxx4yf6ekkM/oSRrHXS2vOPvoDfBGNEMxsgWMEW2hDGiKXQqw1pz0rBCBvbKYbcB//6kBWL/zAdWv+T+44QlakFWcl9txpYEW3I9skn1s2hOexGsh9Ngy9uBsvztsBcdUMGWzhwDR2RTHG7YHpuiwrE+pFANRpYSOQkQElH9ercMmx1Tdudh8eESXJkYiiebRiHCjQYaVZETLROTwtEFJbgnw4HzNmbi4dQoXN8wTJUZV0c8ItAPR5ol1EZemQMfZhQh3eZQXRp7Rpigr+Z6YhGGq3A6VmM3lkZtxt+dzsDItAMo3DUX1uwNCG9+GeJbR+G6X4EfHwKW/EcL6i96G4jRxk7VS95sNS+uueYadbiMG+ehmmYionrevdbTGHx5suxwtROJqcXI1YcjyXTyLIUr88WyQz8PviTrVcM6PJnT9flE4O+PgQtmAD1vrDrLVbjnc1jTV6DUaMbmhCSkh6cizxIKh04HvdOJxnYLmhU7EJOfjlAJ0PZ9q9IK0hlPBWLqaA698cTleqci7e1dJYrnvwQc+FNrDCL7rk52SGOM6mSyqmqWYS9MgzV7I2w5G4Gi/SiQrIslDtbIFGQkdcCOyAhss1hRpNP+rTSGEcPQGZ3RWAVg1WV3OlWW6vE9+ZDk9LutYnBReVON2mpt0eO7jnF4JC1PZdOW5ZbipRbRSDjF3wNPO2i1q1LId9OLUOJwItaox8sHCtHIpMfwuBBcFBeK3pEmt1vmSxasD5qjFRKx0PgX3miRgKGxQ9B656/I3TAN4c0vhTmuK855CmhxDrDwKuDlVlAt6qXMVjKeREREFEDBl98OWZbMl8EgvXxRlFUKY1MHpPlzkvnkZ9Bt5Q0cbNksO/RLu3cDW7cCT5V3qKgmaS7xyWht/9OYeUCH8iHJlcvdbNnrUbD7U9jsxfgttS2cDXuhgz4VDWCDFXZEIQRFsGITDuDbmBwUNgoHnM0QV1yIJvnZaJqfj6TMlQg58IOaKVQWlgiHuTFKrG1gDE+BIawRdPrqNwqRcjHZi1VXnA4rbLnbYMveAGvORjht+YAxDCUxLbAnvgV2xkdjp6UMdjhUF79khKAnGqtugcmIgcXNBhpVWVtgxb2787Cu0IbxiaF4MCUK8afIUldXiF6Hp5pFY2C0BbfuzMWZGzLxWssYdb2ubS0uw6sHCvBJZrHqqnpNgzDVFl9KKlcX2LAoqxifHy7BzENF6rYLVSAWohqMuBOISVbuWvTFSuzE97Fb8XeXMzF81y4UbHsX5vieCGt2CVoMDsPkzdoQbGkus2E20GygFoS1Hua7ckSvl6lIt0N7PZuATkREwRN8+e2QZcl8yYBlnQ42adAA4IAzAg1PcabbbjTBqdfBms3Ml1/68kutw+Hg8m4V1SBvNj+/Qds/NXE10KDj0Z+3l2ajSIKunI34N6Yh1jQ7HRdY+qExjh6269IFyeqjDXbk6IqQE1aMnLAiZDUsxg5nIWylmQjL34eE/Cw0KNgB0+710MMJp04PZ2giLOFNYQpLgSE8GcawxrUuV6wJhy1fNWqw5vythvfKJjJHSBwyE1pgS0wsNkQaVaYvwmFGU308zkUsUhCHhoiEvpqzq6qSXeZQmS7JeHUKM+KbDvHoFen+3q6aGBIbgp86mzBpRw5Gbz6MWxqF44HkSJhPshe0pn7Pt+KlAwX4OrsUDUx63J8cqQIv2ZPmcnqkWR1PNI3CmgKbKrdcfLgYbx8qQqJRjwviQjAuzHHKGd0ywLkfWqr2/YtM6zCjdTIuzGqMprt/hW39NkS0vAKW6LY4/Xag92Tgn8+Alf8D5gzXZrWdfifQZTxg8kyy0a+HLPtqzxcREfmvgAm+AmHAcqktR33cXRaG3qGn2POlM8BpNMDKzJd/kkB/4EAgOrpa+7u+vQv47UWg85XAhTMAc6WtO05HGUoP/YKivV/BbjDj+9bdYIttgyt1PVUL8lORLJDsbTpqf5O8jw/RjuJEG7bk78G+8GLkFe2Cs3Af4gvz0KBwM+Iz10DvdMjuKRhCG8IU2QrGqJaqbFFvjoInOWyFqjFGWdE+9dFeuE8NPJY3oyURSUhr0hHrYiOQERqKUJjQHAk4HwmqsQNypdthrOfW4nSqLoSPpOXD6nSqwGNCwzAYa9PSsRpk/ten7eJUO/rH9+bj5zyrasbRIqT2f3qtDieW5pbilQMFWJVvQ+sQA15sHo3RCaEq63Uisuerd6RZHY+mRmJtoQ2Ls0owP6sYH2U4cLstH3c0jkDoKYLEBojEdeiHX3Q78GXCNjSNHITzd25B/ubXYWnYH2Epw6E3WtBxDNBhtDYwW4Iw6fr5w/8BvSYDvSbVfddPIiIif8LgyxNlh+VvFu1GrfnGblskhp9qz5fOAIfJAFsOM19+Obvtxx+B556rVuAl2S4ptTr/Fe1NZeX396VZa1G850s1myqtQWt8m9IEbYxNcSm6wOiBAblCApmmZbHopm8BRHSEPcKBA8hFGg5jnSMThcVpiCo8jKSCPKTmrkNE+i/q6/QhiTBFtYIxshVMURKMxZz6+UogZy+B01YAe9F+lBXt1wKton1ap0a5j96IktB4HI6Mxq5GDbAlJgZWUwhSEYsuSFRBVyNEqf1ELtkob5XoARuLbLh3Vy5+K7BhdHwIHkmNcmsYsqdJsHNr4wj0jzLjhu05OP2vDNX4YnCMBefEhKBzmNHtJhhZNgeW5JTg25xS/JBbqgZB944w4cM2sRgSY6l2Mw25f88Iszr+kxyJp3Zm4MX9BZiXWYxpzaJwboxE9icmnSXPQmu0kSyY5S/MaNcSIw8lo9GelbBm/gFzQk9YGpyhMq6p/aCOrG3AqheAX6cBvz4NdLkKOOMuIKEtgoonGm44ly1Qxz5bhsfWRUREvsXgy4OZL6clFw7ocKgsUu2nOBmHzggY9bDn2lSnOWl4QH7im28Amw0YPtz9L7kTWPdueSv58Udnu4r+XYDS9BU4ENMYP7aRN6KNcCFaoiMaHxV4eJq8MU5W+6RiAX1LOMN7IzO8AP82OIzVyMIh6z7E5acjOS8HqXkbEZmuzQzSW+JhjGqlGng4pe19WbHqQiiXnfZiOMuKVOClFVaVP09TBIrDEnA4PhV7w1tjR5gJOSGSYTKiEaLVXq1RSFT7tiSDV1ckG/RrnhULDxdjTkYxWoQYsLBdHAZ4Yb/VqciA5h87J2BBVokKoF7aX4gn9xaoMsFB0RYMjraoj5WHs8vewC3FZfgmpxTfZZfg9wIbpJKte7hJlTEOkeCtGi3tT0Zmk92VYMJVyXG4b3cuLt+SjWGxFjzVNPq4YdPHkv/GE9EPy3XbsCBpB1rGnouzD+UCmetQeuhnGCKaIqRBX5jjuiG+tQUXvAoMehRYM0PrBLp2JtDmQm1fWNOzajdrzm+o4KuWj3HmJepoMuM6Dy2KiIh8jcGXJ4KvlBR10RCWi2KTCYVlJjQ8RcMNe3nZoQFWFBzQ9geRH5Ucdu0KNHWvT/bOJVpr9qEvHR14Oax5KNj+HmwFu/Fj8/bIbdAJ56GV2itTl0HXicj3dJUt9kRTOM3dkRFfgN3xmVglwZjtAOLzMpCcn4PU/C0wORwoM5hRZjTDJkdIKGyGaFiNJnW91GBCkdGInaE65JtN6hk1QBSaIBr9EIMmiEEiIjyyZ+tU7dS/zynF19klWFKeDUoxGzA1JRI3J4XXyR6rmpJW9lc1CFOHBIq/F1ixJKdUlQ9+nFmsflKnRZhwdrRF7VP7LqcU/5baEabXYWC0Gc83j8a5MRY0rMMMXutQI+a3i8PCwyWY+m8ezlifgXuaRJzyZykZ3MFoh7ZoqLJgM1PDkJA8CH1zrEhN34HCnXNR9O9nMMf3UNmwsPhknDlVmwkm+ySlJPH9QVpnRAnCZDYcT0oREVGw8Wnw9dJLL2HatGmw2Wy4//77ceeddyIgyw67dFEXTeH5KDaaUVJsRKNTNdzQGeG0GGBECfL2MfjyGzJU+auvgFtucevupXnA4glAs0FacwEXW750gHsPNtiwsH0PpER2xSh09EnQdSKyFtm3I0dvNIfD5MSh+Dzsjs9SwVgxrCpwkgYL8j99pcN13Qg9TlcBVwySEFWj1u81sa/UroItOX7Jt6LMCXQNM2JyUjjOjw1BxzBjtedreZsEMv2iLOp4SBr1WO34IadUBZAzDhYiyqDHkFiLKieU+0gXRW+Rn93I+FCVjXtmXwGe2JOPuRnFmN48Cv2jTp5FlEzrzTgLu5CJDfp9+DruIGxxzdCupA16ZmQiNmMDStN/hSE8VQVhlvjT0P1aC7pdo80HW/kssOBKbV5Yn9uA066v3TgDX9J5cc4XEREFBp8FX6tWrVIb6//99198/vnnGD16NAYPHowu5YFMoJUdyp4fS0Q+igwh6k1SpOHkL7pOnRH2mDCE709H/n6vrZZOwSSzvSSgvuQSt+7//RSgKAu4epnWQlvKxKTEsPDf+cgMj8Hnrbuig7k1hroZeEm246m9+fijwIaR8SEqkIgy6BBj0KtBvnVJgikpH5PjDLSAP5Hs1m8FVqzIs2J5bin+KiqDUQf0izTj8dQo9XM6VWmcv2tkNuDKBmHqkN8j4esAUrolPt40CpcnhOLe3bkY8c9htX/u0dSok2bf5HepJRLVMQxl2IyDWB+yDx+mWGFK7oMzsm1ol7EH9l2foOjfhbAknAZLg75oNSQFrYYAB/8CVj0HLH0AWP4o0GUc0HYE0OwsbbZcINA5dTCw1TwREflL8OVwODB+vFajNXLkSHTt2hVbtmwJzOArNhbFh4HQ8ELkGUJUm/lTvWly6I2wJ0QgUn8Ah700doZOzfLee0CvXkC3bm6VG/7xBjDsNSC2uRZ4qf1dh37GhoYpOJjaD5fp26p9TqcKuD5ML8LGojIszS2B1QHVnEGyDQ+laeMLLDqgQ5gJXcOPHO1DjX5VUudJGTY7VuZbsTLPilX5VmwoKlM7zGQvZb8oMyY3isA5MRZEV2qlHkx8HXQdq1O4CV92iFf76B7ek4dv12dganIkrmsYdsr5YJINlXEJcuShBH/r9mF93D78FGdCYmlT9M/IQeOMjShNXwlDWLLKhjXs2AMXvx+Cs58EVr8C/D0bWPO6VBcALc8FWl+ozQyLbOS1HwEREVFgB199+/Y96rqUHvboUYeTXetCSQlQXKwyX4UZQFhIMfbro0/ZbMOV+XIkyByeg9jN4Ms/7N4N49KlwJtvul1u2PxsoOeN2m0lB5aqwOvnZh1Q2vA0XIYep8x2SWBxw/ZsHC5zoGOYCWMSQnF7owiVVThsc2BDkQ0Fdif2Wu1qMLDcf1Z6kWq6YNYB7SUgCzNWBGSNHEeaYAQKu9OJbcVl+KvQhp+ybPgjLR3bSuzqc80sBjUAeGLDcJwRZUZzy6lPbFDdkM6IkpWTLKO0zb//3zzMzijC9ObRqluiO2RweF+0VJnVQ8jDess+fJe8H0VNYtE5pxDd0w8hcvenKEpbpMoRwxqcgcFPpmLwkzpkbAS2fqEdX9ygdRht3FMLxKRZR6Pu8C9OQM85X0RE5I8NN7Zt24bevXujRYsTlzqlpaXh/PPPr7g+atQodRwrT9qEe4nu4EE1FrfAbMahnfmIiy9Gti4UsbAjW0rXTqLMoYczPgwRzn+RtasU2dlFXl9/XQjk9Ye8/DIsERHIGTJEKz08iZ//LxRFWRZcvCgPObkO5Bb+gah9X+D3xi2wL74NRmU3Qw60lutVKXE48VJWGd7KtuO0UB3mNLGgsUmCCgdQmIfsQm2El8oDywULcKlstYkzoshhwOZSJ/4uceDvUjt+yy3DRxnFkHDFACeapx1EO4sO7Sx6tDNrHxsa/SObIrO2tpU6sbHUgY0l2kd5LiXlMWNLowN9wk2YFGNCz1A9GqmfiXyyFCguRU4x/Fog//67u375L/JgDHChxYyH0m0YujELl0UbcE+CETGnKLeuTH6de6EReiAJe4w52ByWgY/aRMNiTcbph7LQKvNvlGasAswNgaguMCa0QocbEtHxRh2Ks3T4d6kJu741YeVzRix/WI/wJAcaDzSizYUFSD3LprJkYv78+epwSU9PhzfIT0LPPV9ERORvwZeUH86YMQMvvvjiSe+XmpqKxdKFzg2eHNJ6Uvu1zVoRKSnQHwxFiM6GLF04UsNDEBt78h3ixmwLnPHhCC07BGuG8ag1e239dSQg119YCHz0EUouvxyxycknvWveXmD928CAqUCzbtEoyNmA8P1fYnd8MmKTL8QEXQossVW3acstc6gZStJQYb/VjvuTI3Fb4/BqDf2Vn24TAIMr3VZkd6q5Vmsyc7ETZmwqtuGN7DLV+U99jVGnMmvSiKJLmAl9o8xItdTtP/8ypxObi8qwpsCKPwttWF9owz/FZbBJRqC8q16X8BCMbmBU7dI7h5ngyM8NzN+fSurL+s+OBc5s5MQ7h4rw5N58fF9ow0OpkRibEFrteWPxiEM3tEApbPjHchDrU/fhh5TGaJZ7GL3TM5GQ9QN0md9DZ4qCKboNwqLbIunaNjjjxnA1qmPPr5IR02Pz4jBsm2uAwQI0H6RlxUZfMBETJ06s+F4XXXRRtX8mREREQRN8vfDCC6rLYUREBAKOKzsSG4vSzQXS5gv7neHutYHWmYC4MOiddtjSslSTbvKh++5Tw5VLb7oJp9rPv/wxwBIJnH6H1tWweNt72BedgFYtbkaUrvx0exV+yi3FVduyVaAkpVuz28ahTajRYzOaekWa0arMWBH4yx60PVY7/i4sU8GYfPw+uxRvHNSyrNKOXYIw2UPVP1KCsdqV9KXb7FiTb1PBljQMkYCr0OFUU73al5dGXpkYpj52CDMi3HB8ee7J843kb+SkwQ1J4RgRF4L/puXhtp25av/is82jVbBfXRaY0A0p6sjVFWNDzD78ELMPhx2t0Dg/F+1zC5CcuwthmWvU/Q2hjWCMboPG3dqi6YCW6DW1CI7MWGz7UitP/PYO4OtbgAadjpQneo0T0GnVs0RERP4RfL3//vsYOnQokpOTYbfbsXDhwipLCf1WRob2MTERJcVaiVmaPRyd3NjzpdOboIsLVZed+w/A6WwQHINFA5Hs83r1VZl9AEfz5ie96+HtwJ9vA+c+A5hCi5C14R0cCo+EvvUViNKfOPBalFWMm3bkqDbdL7eIRlIdzmlykUBKsltyDKsUUkqDD2lk8Wu+dA8sxSeZxaqwr4lZmllYVAdBCcgSTXoUOZwotjtR7HCqy+p6+W0SWMljyV60NQU2NY9KyJ7HXhFm3NskQu0FkmBLgkMKXnLC6Y1WsRiXWIopu/MwaEOm6tYpexjPirLUqFNnNELRH63QDy2RrS/Crugs7IrOxC/IgtNWgKa52Wibl4+kw3/AdHA5oDMAIckIi++InhPbos/tKSjN02Pn91ogJv9uf30agPuz02tF5wQMLDskIiJ/Cb4+++wzTJgwoeK6nKWfMmVKYAVfsndAr1cNN6zYq246aI9E0ilmfAm93gRnQpi6HFJyENb8rrBE1fmKySUrC3j3XWDZMuCnn4BBg4DJk4Hc3JN+2bKHgIgkoOfNQN6/n6LMXoztLYdjhL5Zlff/u9CGJ/bmq2G5I+NC8FrLGJ93KIw16jEsLkQdIqfMoRp5/CoBWV4pPs0sVg093CFdGLuEmzAsNgQ9I0wq2JIgzh/2l5H3DYi2YHnnBLx1qBDvpxfh06wSxBv1uCguBKMTQtE7wlTtkkRpWhOHcHX0QCqccOKQKR+7EjKxMSETXzmzEF6Sj+a5OWiZk4MG+5dAv/cr6AxhMEa1RosBbdD2wrbQmRKw/3fgjycRMGy/foqyFfOxD97Zp0ZEREEcfEl7+TIZaBvIJPMVHw8YDLAbtczXgbJINDSfOvNl1JvgiNOCrwgcUIOWExl81T2Zn/Tgg8D//qddHjgQuOMObaiyBNIncWg9sGEOcOEMwFGyAY7MtVjVoivOtZx+XFdDySj9b18BluVZ0cJiwFutYlRpVnXfeHpDjFGPobEh6nDtS/st34oChxNheh1C9bojHw1HX5d+GAy0qDI5uTCpUQRuTgpXIwIWZBVjflYx3k0vQrLZgEviQzAqPrTGg7Dl35oM9JZDuibadQ7sC83BrtAsrIg/iHRDLhIKc9EqNwfNc/cjavd66OCE3hKP2IZt6+Q5V73O2nc7tJwxWh1N5l7lqWUREQW8OXPmqGPfvsBsF+7zPV8BTTJfDbS9WrqQXJQYjMgt0+Z8nYpBbwbMRthiYhCZcwD5Eny198Ka6zsJup54Apg6VQu6EhLc/tIfHwRiWwBdr3Ega/MiHIiOR5uE8xCh+rYd8cbBQvzfv3noHGbEGy21oKuuByR7kszOOq88ECOqKQmsJCsqx39TIlV2dX5WCT7IKMJLBwrRNtSIUeWBWLOQmr8UGaBHKuLU0aUgAeGxkUiLzMauyEwsSc5EVlkWmuRlo3VeHlJyN8JrpLEMhywTEXnc2LFj1RGoDZQYfNU285WYqC4aQvNQbDLDXmpEnPHUL7gmCb6krCQpERE5B5GvNU6kurRoETBlihZ4Pf54tb5072/AlsXAyA8Ba8F6mIozcbD5EAzVSd9BjeyFkqDrvfQi3NIoHA+lRPplpovI2+TfQd8oizqeahqFZbmlKhv24v5CPLm3QJWsXhIfiovjQtxrWHSKoc6tkKgOUWS04t+4LOyKy8QfkOZGf3roWREREVUfg6/aBl/lmS9zaAGKDBY0NLtXSmMuD75KGyYgascBHD5Y56ut3xwO4O67gWHDgEcfrfaX/zoNiG8LdLzMiYP/fImsqFj0ijyz4vObi2yYuD0HO0vK8HzzaFzVQCspJaLjyxIlsypHod2Bb3NKMT+zGA+l5amTF2dGmXFJQiiGx4YgynjqEu5TCYMZ7dFIHeJbPAdv0Dl10LHhBhERHaP2r2xeInWdkl6UGk+/KjtMTFRbh0JCC1GgD0EjNzodVg6+ShrEIcpwAMWH63it9d3y5cCOHVpL+VPs7TpW1lZg80LgjLuBwoL1CC3KQH7jMxAPrbvh7pIyXPzPYdWkYmmnBAZeRG6ScQOS8fqobRz+Oa0h/tc8GmVO4PaduWi39hCu3pqNxYeLVVa5tuS1Q15DvLVHQHU7tHvmICKi4BEwma8mTZq4PWTZ25mvkhwgNKQIh/RxSDK4VzITotf2CRU3jEW8cwuDr7r29ttAmzZA//7V/tKVzwHhiUCXcQ4c2rYQuZGx6BZ1lvpcps2OS7ccRpRRh8/bxyPezeCbiI7vwiknLuSQAeQLs4pVt8Rrt+XArIMaWdAn0ozeEWb0iTQhwY29tcG0R4CIiIJDwARfflnGVr7nqygDCDMVI1sfikZu7lcINZYHX4mxCCs7gGLZikB1IycHmD8fePhh6QJQrS8tTAf+eh8YMBUoyv8FYcXZ2N9xNMJ1FtgcTlyzLQd5ZU5805GBF5GnNDYbVMdEObYVl+HH3FKszreqzomvHChU92kZYigPxMzoHWlC61o07agrepYdEhHRMfzv1SqQ3tDb7SrzVZjhQJixFOkIQyM32syLMIMZ0mi/OCEKJnshbOn5ACLrfNn10uzZgM0GXH11tb/0jze1jz1uLEFB2tfYndAYXSL6qNseTMvDmgIrFrWPr1W3NiI6sdahRnXckKSV+e4ttatRCL8VWPF7vhUfl8+lizXq0M2iQ7+iApUZ6x5hVuMQfEXKDvUsGSQiomPwHWNt9nuJxEQUZxYhIsmJQ85wnOZmKUyowQwJt4obxKjrunTpuMHgq85KDi+4AEhKqtaXOcqAP94AOl0BlNmWQ2cvhS15MEJhwieZRXjzUBGebRalzrwTkXckWwxItoRiVEKoup5vd+CPApvKjP2SXYQX9heoGXUyg65LWHmpYqT2sUE1SxWJiIg8jcFXTUnJoUhMROGuXCQmQQVf7ma+DAbtDXtxA22ysuHwATnHW3frra/WrQPWrgUeeqjaX7r1CyBvD9B7kh3Fh37CzoTG6GHpjO3FZbhnVx4uSwjFNWyuQeRTkQY9BkZb1HF9eBmiYmKwqahMZcdWF1ix+HAJXjuolSo2txjQ2FsLc4LdDomI6DgMvmqb+WrQAMVl2pCug/ZIt/d86fTaj74kIUJ9NOVK8EV1kvWSjJe0mK+m318DmvQBwpv9gbLthUDSBTA4TLhhRxaSzHo80yzKrbECROQ9Bp0OncNN6phY3pF0X6ldBWISkG3y0jpc3Q5ro2jNPBT9MQ/7zIc8tSwiIvIxdgioTeZLOhvGxsKqy1Y37SuLQpK7A0J1WvBlCzfBYQpBqO0QbMV1ueB6qKQE+Ogjba+XsXrnGQ5vB3Z+D/SaDOQcXIp9UXHoFtZTnUHfVGTDm61iEWHgPx+iQNDEYsDI+FA83SwagSSs5xgk3PiJ6vZLRETBge8eaxN8JSSomVE6YzasegNsiHB7g7dOp4ddsia6UjgiYxGCHHY89LTPPgOys4Hrrqv2l/49FzBHAE3P346IgkMoSeoNh92IVw8UYHximGp7TUR0IvJKoHd45iAiouARMMGX3w1ZLh+wLIxhOSg0WxCr09rHu6tMZwCcpXBGxWjBF2d9eb7k8MwztfleNQi+2l4EHM75FrmWULSPOQvvHipCvt2J2xtrpaJEFDi8PWSZiIgooPd8+d2Q5fIBy8ISlos8QygaVbO0za4zwqCzQhcTjRDkoigLMKfU0Xrrm127gKVLgfffr/aXpm8EMjYCZ087jKjD2/Fvam80dITg1QPpGJsQqrqtEVFg8fqQZacOejv3hBIR+cKCBQuQlpamLpvNZkyaNOm4+7z00kuYNm0abDYb7r//ftx5551eWVvABF9+RzJfDRrAYQfCwgqQbnB/xpeLQ2dEiM4KxEfDUl52qDWep1p7910gKgoYPbraX7rxY8ASDVg6fYeydD1SEs7BBxlFOFzmYNaLiNxuuKFjySARkddt27YN06dPx8qVK9X1ESNGoG/fvujWrVvFfVatWoXY2Fj8+++/+PzzzzF69GgMHjwYXbp0qfP1BUzZod8pz3wVpgPhlgJk6qXNfPUyImWmSERaS1EcF4lQlh16jgy/luBr7FiJjKv1pU6nFnx1HG1FSOZa7GvQElH6BLy0vwBjEkI5TJmIiIjIj82aNQv9+/evuC5B1cyZM4+6j8PhwPjx42E0GjFy5Eh07doVW7Zs8cr6+E6ylnu+CvY7EK4vxgFdRLWDL705DpGl+5ETFYZQwy5VdugVe/YAL7wASHo1ORlB5/vvgb17gQkTqv2laT8YkbUVGDxrJSxlVkQ3HISPMoqQbnPgTma9iMhdqtU8yw69raysDNnSaMnP5eXlIRBwnZ7FddbO/Pnz1eGS7hr7dIwNGzZg0KBBFddTUlIwb968o+4jmbDKpPSwR48e8AYGXzXhcABZWSrzlX+oAAnxThxwRqKtqXqJxMjQRDizdyIrMhTN9F7IfEla58svgWuu0da/aBGwbFnwBWCzZwPt2wM9e1bryxxlwM8PhiF1ABAasQIH9AloaW6LF/dn4JL4ELQK5T8XInK/7FBfyzlfVH1yFltKiQIB1+lZXGfwr3PixInqcDnRHt7CwkJERBw5YR4ZGYkMqVg7SZli79690aJFC3gDyw5rQs6qSWlbYiKK8rR01V5HdLUzX+EhCYgoLUF2VAhCnHXYal7We+utEvoDw4cDffoAa9bIKUJAzgzk5iJoWK2ANGYZM0b6+VfrS/98Bzi82YBznt+PqIJDsDbojnmZJdhvZdaLiIiIKBDExcWpAMxFLsfHx1d5Xyk/nDFjBl588UWvrY/BV0240pwSfDky1cW0sphqN9zQW+JggBPFEXqY7RJ8OT2/Vun417kz8MEHwKWXAkuWAJ9/DkhqVT4nnWDeeANBQ56TBJOjRlXry3LTgB/+D2h7aSkcCT+g2GhCckw/vLC/AMPjQtAujHO9iKi6c750HjmIiMh90lij8liRvXv3nrCRxgsvvKC6HFbOlNU1Bl81IfuJRHIy7PosOKBDelkUEozV+3EazHHqozNCB73TDltGkWfXuXAhMGQI0LatFMACzz0nuw7VYGilZUtg/Hht/1dpKYKC1AK3bq0FnG4qygQ+OA8whwP9H86DJXM99ic0x9LDZuwuteNuZr2IqLqk26G9dkfeuk+w94PRnE1GRFQNY8aMwU8//VRxfcmSJbjiiivU5YULF6r9XeL999/H0KFDkSzv5+32o/aT1aWACb78asiyK/hq3Bh6iwxYNiNSHwZdNcvc9BatntYUqV13ZOZ4bo2yt0syXZdcAnz7rVZyWJV77gEOHND2SQU6KaOUgFOyXm78t8jbC/z2EvDuAKAkGxj/PeA0/wCD3YaQBv3x3P4CDI2xoFM4s15EgS4QhyxHd74UKVd8quZcEhGRe1q1aoXJkyfjmWeewcsvv4x+/fphwIABKCoqwi233KIyYZ999hkmTJigMmKyV1Rmga2RLTleEDAdBPxqyLIEXzJg2WKByZKDAqMMWK7+G3SdwYISQwhCw63quuOwBF/Va41+nIIC4IEHgFdekZ2IwEcfyQ7kE9+/XTvtftOnA1dffSQrFoiWL9caiZxktpf0HFn3HvDnW8CeFYDeBLQ8Dxj9CRCZnAH7+t+wNak1DhS2xI6SPLzRkpPXiIKBt4cs65w6djskIvKRcePGHXdbWFiYCrxE8+bNVXdUXwiY4MuvSKv28kySJTQPufpQJFez2YaLzRyNsDBt3xhycuF0Nq75utau1bJdksl6/nngllsAgxvruukmYNgwYOtWLRgLVBKcy3+X0047YaZr0XXAzu+B1hcAF88C2g4HQmIkKHMibetHgMmMpo1HYcqmIpwTbUH3CLPXnwYRBQF2OyQioiow+KoJiZqTk1UWJcxciDRDIprUMPgyWGJhCdHaHErTDVuBtGmpwQN9+KE210r2OkmZoeznclfv3trHP/8M3OBL/mN88QVwwQVVlhzabcCHQ4GSHODKb4BWQyp/qRMH0z5GZM5u/NNsELLyorC5OAcvNI/27nMgIiIioqDG4KumwdeZZ6rW8BHGIhzUhSPZUrPgKzwkETbzNnU5BDkoydEDqdV8kL//luEHWtbrrbdUOWS1SPvNpk21zNnYsQhIMpV8507gwgur/PTvrwEZm4Ab/gAadQcc1hxYszfCWVaI/JJ9sGT+hY1Ne6CdqR9G7yvAmVFm9Ipk1ouIajHny+HrVRARkb9h8FWLssP8/aWwwIaDiELfaraZdwmxJCJCb4fdaERIWQ5KDldzj4B0KZS6Vsl0zZxZ/cDLRUr1JPgKVNJgJCREm1t2jMJ0YNlDQI8bgYadi3Bwyzsw52yHQ6dDidEk1UH4p2k3nJE0Fm/tysbfRWX4on3V8yCIiNzvdsg9X0REdDQGXzVpaJGTo8oO89OzERcJ7HNE1qLsUGZ9ASVREQg5nIuS7Gq+WEujjE2bgNWrgdBQ1JgEX//7n1a+V82ujX5BSg7PPlt2Ux73qSX3Azo90Oehfdi38Q0YyoqxskV32GPbIdYYjziE4Qw0QHqpDk9nlmF8YijOiGLWi4iIiIg8i8FXdbnaFCcnIycrXQVfaY4YNKlh2aEMWhbWyFCEHM5Bwb5qZNAcDq3M8LrrZKIcakWCLwkqd++WFjAIKDJU+ZdfgJdeOu5T+1YD694Bzp9RgqKDr0HmlRZ0vAbDQjpAp8agauxOJ+7clY1IPfBoapSXnwARBWPZocELDTfmzp2Ld999F1u2bMFDDz2Ea6+9Vt2+YMECpKWlqcvSQnnSpEl1vxgiIjolBl81KTkUKSkoPbQDUtKf4YhHpKFmZYeuQctlUSGIb5iDVYvM6HeLm1+8ciXw779A+eC4WnF1CJTSw0ALvqTkUNqFSrONSpwO4OtbgYZdgZghcxGaXgxH58loHnJ0MxKH04k7duViWW4p3mpiQlQ1h2UTER1LTu3UdbfDXbt2ITIyEt9++y02bNiAM888UwVf27Ztw/Tp07FSXiMAjBgxAn379kW32p6kIyKiWuO7zFoNWE5HvjkEYYio8cPpjCEo1Ztgj7KgQUou0n4wIv+Am18sA6eTk4H+/VFrSUlAo0aBue/r3XeBAQOA1KM7lfw1S8t8DZy5GXGH1uFgci8khWqBV3aZA59kFuF/+/Ixfms25mQU47WWMTgzvGYZTCIib0tKSsIF5SedEhIS0KxZM3V51qxZ6F/pdWHw4MGYKXuCiYjI5wIm87Vv3z41HNM1KNOnwVdiomruYA7NQo4pHI1N1R+wXFmpMRQhEWZEWXLU0N8Ns4G+d5/iiyTT88knwFVXeW4wco8egRd8SeZv6VLg7bePurmsBPjxQaDDGCcsYfOQ7YxG20aXYG+pHQ/8m4tvskshJ6UTjXrEGHV4vWUMxiSEIju7xGdPhYjqzpw5c9QhryVe63ZYw4YbmVs/RtbWjyuul8VWfUYutHyfrwwKffDBB/HGG2+o65IFG1Sp+VBKSgrmzZtXo7UQEVE9Db6aNGmCxTJE148GLEeE5uBfQxQa17DZhovNGI7QSDMcadloPtSGv94344y7TtH3QgKOjAzPlBxWLj18/XUElPff15psjBlz1M1rZkBlEE97fDWis7OQ2W4MFmbace/ubEQadHiqWRQuiA1BUi3/2xFRYHCduJOTeF4hvYtq2Go+sdVl6nBJSBt9wvs6HA7MmDFDBVyXXnopNm7ciMLCQkREHKnIkNLEDHm9ICIin2PZYQ0HLBfnOBFlzsM+QzSSa/sG3hQBXbgJ9uwctB9bivQNUMcpu/vJ3qzu3eExHTtqAV12NgKCNBx57z1tvlmlNxql+cDPTwLdrnHAUPoN0iPjscPeHbfszMUFcSFY2SURExqGM/AiooCn1+txyy23qP1dqampWLp0KeLi4lQA5iKX42WeIxER+RyDrxoGXzm7CmBBGXY6pdNh7X6MJlMU9BEm6PJykDKgTO3U3vf7Kb5IWsv36+fZtvAtWmgfZVhxIJAOh7t2AeXdvVxWvwyU5gKd7l+JqKJsZDQ4BzfsyMOw2BC82iKaDTWIyGvdDj1xuBuESVMNg8GgGmtULq/cu3cvunTpUndPlojIi+bMmaOqGLxVRu5pfBdaw7LD7PRD6uoOR3ytM19h5igYQo0w5ubBGArENAMy/znFYOV164DeveFRgRZ8yZ43KQGVILScrRhY9QLQbYINxvyvcTCqAR452AqtQgxqX5c+EGeYEVHgKd/z5YnjRIqKipCenn5UkCV7vcaMGYOffvqp4vYlS5bgCk+WqBMR+dDYsWPVViTZkhSIAmbPl1+QMg4pyUtORkHJfnXTZlsiUmo448sl1BwLhBlhLClRgVVi+1MEX+vXA1ar54Ov2FggOjowgi+7Hfj0U23PW6WGI+veA4qzgNZ3fIWw7AJsSb4Uf+4ow7y2cQgzMPAiouDx888/4+qrr8bEiRPRsmVLTJ06FWFhYWjVqhUmT56MZ555RjXl6NevHwZIR1giIvI5vwi+cnNz1Zm5UaNGwe8764nUVNjzDqHYaEK2LRJNapn5MpuiYY2wqMu6vDwktE/CPwtOUXIoHRa7dq3x93Q6rNDpzUffKFmhli0DI/iSksNDh7T9XuUcZcDKZ4FO1+YiOu9n7G3QGm9kNkHnMAcGRR/zXImI6rzbYd1+jyFDhuDgwYNVfm7cuHF1+82JiCgwg6+tW7fivvvuQ3Z2tv8HXzt2aB9btoRp4ybkmMPQFJZal7LpTVFwRmjBgS43FwntgZzdWgmdSeskfHzwJYFXSIjb38Nhy0dZ4R4UFexE6aENMJUdgtPcB3FdRkJnCDm69ND1PAOh5LBPn4qbNs4DsncC5yz6DM4SoCT+Yvz4jxUzW8ZAx3JDIgqy4IuIiAKPz/d8tWnTBiNGjEBAkKBEAp5GjRAWehhZhki0Dq19/Ko3RcAZWZ75ys1VZYeyXyBrywm+QIIvN0sOnQ4bivZ+hew/H0LBlpkoPrgMu6KBVcktUVb6Bw7/OV0FZkcFX/6e+ZKSw/nztfby5UGV3Qr8+H9AuytzEV+8AQcbdsKDaRY0sxgwIt79IJWIiIiIKGgzX+5KS0vD+eefX3FdsmRVZcry8vLqbA2h//wDU9OmyM3JRaQpD38ZWiAZZSprVxtOhx368rLD4gMHYOyfAyAGu9cUwNLUdvSd8/IQu3kzCm+9FdZK3zdrsx5Ouw7xHewqHnE6HUD+BiBrORy2XPzRuCk2ZbdG3ksdkRITjuY352BO6/W4dPtKpG9cAEtTbfaNOSkJYWlpyJFN3DUYHl2XP38X4/ffI/LQIeSdfz7s5T+Dv960IGd3KM5auBAoAd4tOgObimyYk2JGfo78PP1n/XWJ6/ctrt//1j9//nx1uFRuUFGnnCdvlkFERPVTwARfMr/E3SHLsdI4oq7azLduDVNJOMJ1JdiNGHSJjUBsbFW1ge5zOp3IjApTlyP/+Qdh48cjIgkoTpPHPubOa9eqD+GDBiEsJhab5gErngX2l7emT+peinOmrUJkg2UwlmTjXyTjl87tYP2gO04vaI3mN+nQqIckjBLQ9EBDrG6UjgH7/0S4bjDMMclAp04qsxRbUHCk+2E11dnP32XWLDXfLGrwYJX5Ks0Dfn8W6DqpAA1KN2BLXFt8lBmFt1vF4Mz4UP9bfx3j+n2L6/ev9UszCjlcvDVkWcIulh0SEVHABl9+QcrxhgxB5s5DiDYBO51xuDCk9j9C2Y9UHBODXdecieZPPaU6Dia0m4LMf3RVlxxGRuKwsS0WDwL+XQ60HAKMXPI3QmKXIMaWBj0c2BHWEOsa9cWhfY3Qa31zDL0+GbpjikxbNIrEpn8HIjtkD3JXfIrm598OXeV28zUMvuqUrOurr4C33qooOZTg05oPtLzjKxiz7Hi0oB/GJYbi4hoEXkRE/uLA7rk4mPYxUhpq3XWJiCjwMfhyl8OhDfRt0QKHc/YgOhHYWNYALT0QfAm7MRx7pw6DJbYXGv/nP2g9sh/W/dP/+DuuXg1Hj174+BI9rIXAuG8B3cBdCFn/PgpNIdiV1A07fzwNW/+vBfT7wnDFYqDV0KqzbRL0nde0FRaYOuC80t+R9c8BJLRO1Vq3++u+r9df11rijx2rrhYcBFb+D+g1pRixOWuwOaYV/smJw6z2kb5eKRHVZx5ouNEk5XJ1mIov8dSqiIjIxxh8uUumaMtw45YtYXXuV23mrfYEz82OMkUg3J6LtXfehcavvozGhnVYurW/ap+ur/xfafVq7Gp0FbK2ATesAbI6HUDetrloqtMjtd09aG2KRu+xwE87pATxSOD1S14p0krtyClz4NucUqzOt+KyhFA8kBKJ1rF9Yd23Fhlb1yKhw4Wqlb5fBl9FRcDbbwMTJgChWlZr2SOAwQI0nvgNLPuteKSwP25ICkfjWrb/JyKqDXY7JCIiv+x2uHv3bnz11VfYvn27Ghjpt1zBSIsWMIUcQpY5As0tnuuiZzJHItRmxTZdGdCqFWJtW+CwAQf/OiYA3L8fv//RB+c+A8R2smND9g9offgQYpqOhsUUre4m5YVn/RdoOxxwOJ14KC0PI/45jFt35uLRPfkq4p7cKByfHy5Bn78yYEES9kTGwxzxd8Vz9Mvga84cQJpn3Hyzupq5GVj7JtD34VJEZa7G5qhm2GVviNsbR/h6pURERERE/pf5atasGT6RmU2B0GZe9hg1b46Iw1lIM0Sjdajnsiuh5mjY86z4sqgUt7dpi8j8LYhvA3x9C3DtL4DeANhXrIZ8R/0ZvdH7VmCVYzt6/7sBiG4NZ2wP/FVow66SMuwssWNXaRnyy5zYb7VjbaENTzaNwoSGYTBWmnc1KSkCQzdl4q4dhbjT1AItIlYhf38+IiX4+vNP1BlpXPLBB8CaNVpHxebNgauuAtpLj/0TcDqBV14Bhg1TwaFc/fo2IKYpEDvmG0SkFeNhR388mBKJGKPPzykQUT2nZb7Y7ZCIiI7Gd6nukkxQkyYoKrQgxpiLHfq4/2/vPsCjqNY+gP83bRPSSSEkgSSUEDoIgiBKUbEgHUUsgGIFr9IUESx4saKCKAgWEBSDSlPQC0pRpIkoSIcEkBpqSCG9zPe8J2y+ANmwCVtmk//vefa6ZXbmZO4y57xzznkP6ltpvpcwugegWl4OXIzp2BMZA5eEfegxCzj2B/DHB0XbJM3YjDREoOPMcOQa8nAhaRV8cnMRb7wLzbadRpedZzEkMQXTT17Ansx8ZBRqCHZ3wVexgXgizPuSwEtUd3fBR3UCVHC2z7ehSs91dMt2NbQSCQlFAY+11+d64YWiYY3//a9Km48zZ4BPPgEaNQLaty9KpCGZFi+3cSOwbRvw9NPq5d7FwMFfgC7TL8A/aQO2+kQDxmg8FFqUNZKIyKEuDju0xoOIiCoPh/d8OQ3p+apTByf3nUOAawH2acHoZ4UFlk3c3f2Rq2noGHYMS2qEo/GRI6jdMhNtn62GlS8Ah1YB7X/bjMw6bRDWFNiUsxPNTiRiqXsrvH3WCw+EeKFPkBfqebkhsBw9P218PTA0zBsfngrEbd7+KHDbCsTFFQVGJ0+qBaWtIiMDuP9+YNkyYOLEoiDKz6/oM5lLJ8sIzJoFPPEEMHky8MsvQHj4/39/2jQ1HBNduyIvE1gxAqjfDdCaLIHn8VyMK7wFH8f5wfWyAJOIiIiISC+cpufr+PHjan2WeJn346jgq25dnE05rF7uzKuBJtXKvwixOS7uRdn5gvLzobW+mCI9IQG3vgnc+jaQn1WIcO1PBD3QBoXQUJC0FrkGd0zO74CVTYLxZrQ/rvf1KFfgZTIywgdZee446BGJ0MB/kVcntuiDPXus9vdhzBhg5Upg6VLgxRf/P/ASRiNwzz3A//4H7NwJpKcDHToAa9YAsojyiBHA118D//mPysS47q2iLIftp55GyImtWOUdhxuDaqOlj4f1yktElYrUHVKHSF1iz4Qb7PkiIiKnDL4iIiLUIssDLqYYt7uL617lFB5DgcGAC1qYVecWmYKvG9ODYLz+4iKh+/bBzRNoNwIYOG0fPArT4d6pDRK0k4g6dxzLXBpiZoOaiL3GHjj5O+6u7okNLtHwcMlHUqp70VwsawVfsjbZ9OnA668Xzdkqi8z7ksQrHh5Aly5A9epF6eXff1/1liUfANa/A7Qbo+Gsy3fQDAZMybkV42sxtTwRmSd1h9QhUpfYBYMvIiJy5uDLoc6dK3rUrw9Xz1NI9vBBo2rWnVtkuBh8RWTnISMgEOnVA1TwVUyG5bm6Aq1a4UDKZlTLz4XmfwPa+Vmnt+f+kGpYlhmFfIMLzqQlqr/VKsFXfn7RUMIWLYrna11VVFRRD9jffxfNB/vnn6LeLxcXrBgO+NQAfJ/biqjTiZjj2hr/iaxZoR4/IiIiInIu8XYeyWBtnPNlCQkERJMm8En9ASfc/NDc23pDDoWLmzfcAxoj7+waBITcipP1IuG1d2/R/0GSlOKNN4Ann0SKvzv8D+zFcVd/9KtVz2rHv9nPAy4F/jhVzR+unolFPVDWCL4kQ6EET3/8AbiV4+cm27ZsWfS4aM8iYP8y4I7lGcDJn5Hu4oUtHp3wfMjFYZpERDrBbIdERLYbyTBgwAAVgDkjdhdYYscONQwvKyQWAR4pOORS3erBl/COuRfQCtD1+C6kNgxH5p69RR+8+mpRmvtXX8Uf+QdQJ/k0/vVsjlAP68XOLgYDBoRUwz73UFT3PgFNkm5ca/B14gTw8stF63Jdf/017So7BfjpaaB+dw3n2v2Keskn8UHhzXivbrAqOxGRnlhjztexE/HYsLWn097dJSKiKzH4srTnKy4OR/ZmwqcgBwlasE2CLxcPfyD0ToSdT0RBnUAYE/YDCxcCM2cCL72EguDqOJvyN4yFBbiuVjurH//OQE/8iQj4GLKQFhAJJCUBqakV3+GoUYCXV1F2w2ugFQIrRgG5F4BGn59EvcMbsc81BM1r34goK6b7JyLSk9o1BqBDs+/tN0+NiIhsji1XS4Ovpk1x8vw+hIQB/2q1bTfHyLcpcOZ/cI3whVHWu+rXD+jZU82X2lqYhNjk40hyr4HG/lZKAV9C02pu2JJXF8BqnPBxhb+8uXcv0LZt+XcmmQ3nzwfmzgUCLyYQKUGWEEs7BpzbDyQnAOcSAO9QoMUgwCes6PPMs0DSX8CvrwDHNwN3flaAE3nL0CbzAub7D8BLNXys8ncTEVndxZ4vIiKikhh8XY1EARJ8desGzeMAsl3d4OVR22aHMxgMcPOJhjHOFTs6tEbDoaPgdl9/NexwTeZ+DEw5C61mN5scW4bvRRlrIjnfG5lRuUVDHWXoYXmDL1m3a9gw4OabgQcfvOJjWTha1uk6trHotcEVCIgG0k8Aa8YDvuFA5jkgL6Po87CWwODfgN2t/8J1u/ZirbEFXohtpM4VEZGehx0SERGVxODrao4dKxp617Qp/Hz34IixOpr5GG16SDffGIRcOIgJP76DwtMt8F6hhoMFKYjKSISbVojA0FY2O3ZHf08k5IegbvXTRVkHKzLv6913i1LzL1pUFMABKMgDdnwNbJ8LHFoNhDbX0GdhIcKbAP5RGtyMbsg6D+yYB6QnAdWC5H0guAEQ0gg4jvMI278CGQYjOjW8Bx4uDLyIiIiIyLm4Odsiy6YMJ/bOdJgZ0QihBWvxi2sDtLDBfK+S3Hxi4FGQi8ZuZzElLQNd9p9Dl3oH0O/0KRT61IGLMcBmx+7o54F55yLQBv8ir24s3MsZfBkkyYas5zVyJNC4sXqvsABY9ACw+zsg6tYC3LZ2E/xCf0dw2hkYzhcg7TzU2mnJviGIfHQAwj1jivenQcNhJOPPk0txS+o5HK81GHWN3lb/u4mo8qcmloc9k1ew54uIiJw2+DItsuyQTIc+PjiU6o6aXrn4qzAC/XxsHXzVhgYDwi4kY+B1/6iRj0FZRsRcOAfvmC42PXa0pxt25teFAeuRHBKCGpvWl+v7ntOmAUYjMG6cei1l/3EosGddNholbENc3kpEpJ3FyewAfOvVErlGNxhcNLjlFeDuzN1w2fERfq5RH0mBUcjx9kEmclD7TCJuOpqABJ8maBvewkZ/ORFVZvZOTWzQDEw1T0REzht8OYz0fDVpguSs/ajpBSQZ6sLX1bZJIg2unnCrFo5OF7wQG9ocOYZ8xJ3chDyDGzwCm8PWwqpFIzPXHRn1A1Bj/r9F64yFhFz9i+fOwThnTlGWQz8/laVQ0sP//W0e4nb8gPan/kS+5oZRxh7YUdgYj9XwQQ1XAzxdDDC6GLAkPQ3RqYvR7mQCWiftRbbBDTkubvAvyEaCz/W4vkFfm//tRERERES2wuDLkuCrVSu4ehzCeY9qqCcp+exAhh5qafvRDJHIOb0JGWc2wTvmPri4237IXedALxzICkbodWeL3ti8WSUcuaqpU4v++8wzKMwHlgwGdizJQ7u/5+G649uw0SUK0z364J6wYMwMqXbFvK07Aj0BPIHU3BycTt6H0+knkZKdiuAg6fFqaIs/lYjIJphwg4iISsPgqyyZmUXB15AhCPBJwkGPILT19bDLod18o5Fzeh3S985AXloijKHtYAy9wS7H7uRnxJwTEbgn/BQKg0PgYknwlZ6ugq+cgQPhGRyMFc8CO3/Oxm1bPkPc+UTEu7dE9ci++CnE+6pZCv09jPAPa4b6Yc2s+4cREdkLgy8iIioFF1kuy/r1QF4eUuPaI9hwHjtdwtDWxz7Bl7t/HNz8GsjKy/Cs2RnVouw35M7PzQUntLrw0AqRFtsQ+OOPq39pxgwgIwPZw4Zhy0xgy5ILuGvNR4hNTcR7xk6Iie6PAaE+TA9PRERERFUWe77KsmYNEBqKfVo+6mmF+LugPkYYXe1yaBd3H/g1fAqOEhMUh/wsA9LjaiJg8c9FmTPMBU7Z2cB77wGDBuHU2dr4aWo6Oi//DFFpx/GKRzfcG3MzOvrbNj0/EVFlG3Z4ICUeB1LnI9jVfhkaiYjIttjzVZbVq4HOnZHvuhMX3IzwNNZFVdG1ui+OGgOR09IPOH8eSEw0v/Hs2SopR8Hw57FiogHNlsWjcdphvOd+KwbX68jAi4iqnovB17U86vsOwB2R36tsv0REVDkw+CprDtOWLdA6d0Gwz7/Y5RmGNr6SEKJqkJTzexEJ/0YXAyeZ91WaggLgnXeAe+/F74vqwfW1X9Hh9G4sdW+NJxvdjuvtNEeOiIiIiEjvGHyZ8/vvKrBIqtcMwYWpWKvVwe2BVasHJ92zGby8XZEZUdv8vK+ffgL+/RfJPUdidW4C7qy2Af+610CfZv1VAEdEVJWHHVrjQURElYfTBF/Hjx9Xi2PGx8fbb8hhZCQOGVPUy4TCxqhtrFrBRMfIpshw88D5phHAypVF874uN306tNbX46tFDdHx4WWolpuL6PoPw9fNtgtRExGVh9QdUodIXWK34CvfOg8iIqo8nCb4kjHvP/zwAwYMGGCfA65apeZ7uXnsR5LRD+2DwlDVNPQ2YpdHJNAjGtizB9i06dINDhwAli9HYt2n4DLhf2h55ghSA7sg2LfqnSsi0jepO6QO4fwpIiLnFm/nm2lVNviyqyNHgG3bkH3bbQh3PYa/3CLRvXrVme9VUqpXY3i1CEF2aATw2WeXfjhjBgr9AzG/XRx6Z27G8Wp1EBLUzlFFJSLSDzXs0GCVBxERVZ6baQy+SrNkCeDujr8jguCdn4vfcq5Dfa+qNeTQ5MbINshzc0Xine2hzZ8PpKUVfbBlixpy+E+9B9Hjtp+Rq7mjYYOHuY4XERHnfBERkRkMvkqzeDFwyy1w89+Nkx5+iA2NRVUV6emLg15h8OxfE8jKBt5+u2jx6W7dkFmrKXbOboJa6efhHv0g3Dx8HV1cIiIiIiLdYvB1ubNngbVrcaLtLYgpOI6lLo3wYKg3qjKtZlcEVjfgwG03Am+8AXTogHyjH/772n/RJTcBp/0bIzK4kaOLSUSkG+z5IiKi0lTNsXRlWbZMZfXb38wPTbTjOOPZHhFGV1Rl7YNaYO2pONSf6IopPcYidm8OVvb3Qt+aW+GaDMTW6e/oIhIR6cvF4IuIiKgk9nxdLj4eeW1uQHido/jHMwIDI2s6ukS60Kbu/SiAK7p23IjkCckYELQFDc+eQEBUX7h4+Dm6eERElc7e7HgsSXHejF5ERHQlBl+XJ9r4+Wfs6X4TgnPSscLQEc28uV6V8DT6wb/eo/Ar8MddCdsRk3EBPrGPwTP0BkcXjYioUg47bOQ+AH18nTejFxEROfGwQ9Miy5Je0iZrfUkWv6efRv5dd8L/DmCLey30iWlu/eM4Md/AWPgGjkJ+xnG4uPuyx4uInGpdGHnYrReJww6JiMiZe75svsjyuHHQUlKwdfhtqJafizV5d+MGXw/bHMvJuXlHMPAiIqfi7OvCEBFR5eA0PV82tXEjtGnTcHjCw4jxO4yfjE0wunF9R5eKiIicfNghERFRSQy+cnOhPf440pvFwPcWb6wyxsKQez+C3J2mU5CIiPQYfOU7uhRERKQ3VTvCOHMGeY89Am3PbhSOugH/MzZGYeZgPNSmmqNLRkRERERElUylC74WLlx41W3yM9NxeuIY5NWNhmHRAmQ91wmLYrvAJ2MQ7mtfTffl1zOW37FYfsdi+R1LV+XnIssOkZSUBGegq99qGVhO62I5rctZl+FwaPC1aNEiTJkyRT2mT59usx9MemEe/jh3AGsXT8WuZ/ogPyYSIRPeRcFdsTix8DF8eMcTCE9/CL1u9oSjOcsP3hyW37FYfsdi+R1LT+U32Cn4mjp1qkoiEhoaismTJ9u0fnUGJ06cgDPQ02+1LCyndbGc1lVW8GXJNdBR10mHBV8JCQmYNGkShg8frh4rVqzAtm3bKhzdatCQXJCHvAb1EZ9yBm+f3Y1PEr/F7nfuh3vbemhTswFu7vMsGs5bgYK2tfHLzNfwetPPMHfjW+jh2Q933HplZkNJS3w1lmxTnu2suS+Wv/zbWXNfLH/5t7Pmvlj+8m9XFcrvrHdKS7Np0yYEBgbi8OHDmDlzJkaPHo3t27eXu36tqmzx+7Pmb7W8+2Q5rbtPltN5y5lgwTXQkddJhwVfc+fORYcOHYpf33LLLfjkk08sqjALNQ17snIwK+UIppxZje+OfoJfDk/F9qNTMeE/EWi8930MfeVxPNruETQaE4/0Ql9s6/c4fn5iCZb1PYQXdr+OerXH4dXnW2H8K95o1NbFqRoPzt74Yfltsy9Lsfy22ZelWH7b7EuPwZete74KCwvx0EMPwc3NDb1790bz5s2xb9++ctevVZUeG43Xsk+W07r7ZDmdt5xzLbgGOvI6adA0TYMD9OrVC507d8azzz6rXi9evBjvv/8+fv/991K3DwoKgru7e/FrGWZR2notUrFebR0XS7ZxxL4ccUyW37HHZPkde0yWv/KXX94rGXDl5eXh3LlzsDUJilJTUyv03cvLXL9+fbN1Y0lNmzbF999/j5EjR5arfq1MIiMjcd1111m0rbV/f9wn98l92nafxy28nlsSY5Q3DqkUqeYzMjLg4+NT/NrX1xdnzpwxu709KksiIiJr+PLLL+16PBlC06ZNG9SpU6fc9WtlcuzYMUcXgYgcLMOCa6Ajr5MOG3ZYvXp19YebyHPp3SIiIiLLyfDDGTNm4IMPPlCvWb8SUVVW3YJroCOvkw4Lvlq0aHFJ16HcrWrWrJmjikNEROSUJFPXiBEjiu/isn4loqqshQXXQEdeJx0WfN1zzz1Yu3Zt8euVK1fi/vvvd1RxiIiInM6cOXNwxx13qLlOBQUFKkU061ciqsruKeMauGTJEjVXzJHXSYcl3BBfffWVWpPDy8sLOTk5Kk0uERERXZ1MEJcGhIlU588//zzefPNN1q9EVKV9Vco1MDMzE7GxsSqpRkxMjMOukw4NvohsSRYfffvtt9UdjrFjx6phOWLWrFkqNbNMUJd/fI888kjxYntHjhxRzz08PDB06NAr9mnJNs5EJpeGhIRAj/RcNmupCn8jERHRtZp1DW03vXFYtkO90HPjR89l0/vfWHLx0aVLl6Jfv35qDQe56yGv5Y6x3HeQ1MyyNo6fn59abG/jxo3q+z179kT79u3VmODLF+QraxtHBo/mti8pPT1dDU9KS0uDi4sLNmzYYLPfWHnLb0nZ7HmRLU/5d+zYoX5HUiZTAoRRo0apHghHnf/58+dj9uzZat2nV155BQ8//HCZ55A3H8iZVYbfpqN/j+W9Zuido8+nidQHsvi5v7+/qjOclSPP56ZNmyrcdtMlTcc++OADLTw8XAsJCdHef//94vcXLFigzZw5U/v444+1ESNGaAUFBWVuX1JaWprm5+cnvX2ai4uLtmnTJt2U35KyLVy4UJs8ebJ6TJs2zWZlL2/5t2/frhkMBs1oNKqHu7u79sILLzjs/K9fv/6S1y1bttS+/fZbbcyYMeph8sQTT2hDhw7Vxo8fr40ePfqSv/2pp566ZB+WbGMtGzdu1ObOnavl5eVpixYtUufqn3/+Ue/36tVLbVNYWKg1btxY27Jli9ntLye/mYSEBC0rK0vLycmxSdkrUn5LyrZ//37thhtuKH7do0cPbevWrboo/6effqolJycXf3/s2LHaunXrHHb+Dx48qC1btkw9l3+bAQEBZZ5DS86tPc+/iI+P17p27apFRUVps2bNuuo1UG/Xf7Ife/82KyIlJUXVnXr9PZb3mqEHK1eu1AYPHqzL82kyb948rX///trff//tkHbc1ZTVdtPT+RxzDW03PXJYwo3y9FzMnDlTjcOUOwdZWVlqEbTHH38cTz75JPLz87F8+XKz25e29spff/2l9iOPtm3b6qL8lpTN1PMyfPhw9VixYgW2bdumi/L/8ccfai227Oxs9ZDt7777boedf7nzUZL0XrRq1Uods+TCp5JW9NChQ6rnQnokTGrVqqXeK8mSbax5p0wWaZUelt69e6s7PHI3UiaKNmjQQG1jMBjU6uzSE2Nu+5LkbtHHH3+McePGqYVYSy5a7ujyW1I2e65GX97yDxkyRP17MZEerXbt2jns/IeFhaFbt27qeXBwMKKjo8s8h5acW3uef/k3KWuuyDVO7nbKosFlXQP1dv0n+7Lnb7Mi9u/fj8GDB+PDDz/U7e+xvNcMR5NRLBMnTlTXVT2eTyHLP8i5mjdvHlq2bGn3dpwlymq76el8Zl1D202PdBt8mWv85ObmYu/evcULocnwHenKdZbGp7nyO0vj01z59db4NLf46K233qqOff78efXZ0aNH1URLvS3IV97g0dz2Jclk0meeeUb9DQ8++GDxcD89lN+SstnzIlve8ksgZpKYmKgaLjKs0FHnX37TQm6OvPTSSyogKesc6u3mQ3kbgnq7/pN96b0BJhP8ZTiUnn+P5b1mONpnn32mphPo9XwmJSWpoerTp0+Hq6tr8ft6C2bNtd30dj5vvYa2mx7pNvgy1/iRhr40XDp16qQWlJRI/MYbb3Saxqe58jtL49Nc+fXW+DS3+Gj37t3VxUTGrL/77rvYs2ePCsz0vCCfJcGjue1L8vT0xGOPPYbPP/8c69evR3x8PLZu3aqL8ltSNkddZMt7/qV3TH5nl7P3+Tf99uUace+996rzZ+4c6u3mQ3kbgnq7/pN9OWMDTI+/x/JcMxxJemsaN24Mb29v3Z7P7777TgUsUh/IjSQJFC9cuKC7YNZc201v57P7NbTd9Ei3wVdZjUmZBF+tWjWMGTNGNWiutr2eGp/myu8sjU9z5ddj47O0xUfFsGHD1LHlDvmBAwfUpGK9LshnafBobntz5DtSGUgvpp7KX1bZHHGRrUj5ZRhu165dHX7+pQJ9+umn1UTk2rVrY9WqVWbPoR5vPlS0Iai36z/ZnjM2wPT4eyzPNcNRZPTNb7/9pnqM9Hw+5dreo0cPvPjii/jxxx9VsiVpj+gxmC2t7aa383ktbTc90n3wdXnjR7pCZV2TBQsWqHG00ghavXq12e311vi8Wvn13vi0pPx6aXyWtvioSUpKihqDL0MAQkNDdbsgn6XBY1nblzW0q0aNGjYre0XKX1bZHHGRLW/5pRI1Go2qQtXD+Tc1qKRnSIa+mDuHerz5UJGGoN6u/2QfztoA0+vv0ZJrhqN8+umnaqic3s+nDIGWXi0TaYtIj53egllL2m56OJ8Vabvpme6Dr8sbPzIxUf7xR0VFoW/fvmrCoqRBNbe93hqfVyu/3hufVyu/Xhqfko5ULtByfuQiKOlxt2zZou4+yaJ648ePV6nETRNL69WrpxrV77zzjpoULUMpb7rpJjWpVxqA8jeb20YPwWNZ25uCR/kbTPNgZDjXwYMHdVP+ssrmqOC3vOdfLFu2DHfdddcl+3HE+Zff7enTp4tfy7E7d+5s9hzq9eZDeRuCerv+k304awNMT7/H8l4zHEXqb6l74+Li1BIgUteXdh119PmUxEynTp0qfi2jheSht2DW0rabo89nejnbbrqn6dgXX3yh7dq1Sz3Pz89XaVqPHDmiRUdHF6dnl5TCb775ptntxeLFi7Xc3Fzt6NGj2t69e9V7kkK6d+/e6n09lL+sspnKLymqS6Z8lZTXa9eu1UX5TSQl9EcffXTJfhx1/ksjKb7tfcyKkPTmrq6uxQ9J8yrpXyX165dffqkNGzbsktS15rbPyMjQIiIiVBphSd0dFBSkPffcc9qUKVO0w4cP66b85spWsvxCvvv2229rU6dO1SZNmqSb8pv07NnzkvPqqPO/fPlyrUaNGtq4cePUv8ndu3cXf2buHJb2vqPOvxz31KlTxa8feOAB9V5Z10C9Xf/Jvuz126yo2bNnax07dix+rbffY0WuGXo4p4MGDdLl+UxKStJiY2OLy/DMM89oc+bMsXs7zlKXt930dj6znKTtZindBl/mGj9C1tSRvP7yYxk+fLiqlJ2l8Wmu/M7S+DRXfr01PisrZ78Asfxki4ag3q7/RCUdOnRIu+eee9Rv0dTQ5u/RusGXHs/nN998oz355JOqzTRhwoTim9Z6DGYvb7vp8XxWJgb5H0f3vhEREREREVV2up/zRUREREREVBkw+CIiIiIiIrIDBl9ERERERER2wOCLiIiIiIjIDhh8ERERERER2QGDLyIiIiIiIjtg8EVERERERGQHDL6IqrBz585d8z7Onj1rlbIQERGVZv/+/Th9+nSFv5+cnHzFe7m5udi6dWuF98m6jyqKwRfRNVq6dCkiIyNRvXp1DBs2DE8//TQeffRRNGvWDMOHD4deffjhh0hKSjL7+W+//ab+LoPBgFmzZsG0HntBQYH6rqenJ7799ltVgb311lvIz8+3Y+mJiEiP5s2bhyVLllhtf5988gkaNWqE3bt3l/u7eXl5eOONN5CVlXXJ+xLI9e3bFyNGjKhwufbu3Yuvv/66wt+nqovBF9E16t69Ozp16qSCrWnTpuGjjz7CZ599hs2bN6uATI8mT56M2rVro0mTJma36dixI9588031vHHjxioIE66urujSpYsKMO+9916Eh4fj7rvvxuuvv2638hMRkT59+umnmDFjhtX29/jjjyMiIqJC333++edxxx13XPH90NBQFXxdiw4dOiAtLQ2rVq26pv1Q1cPgi8gK3NzcrnhPeoau5a6arSQmJqq7kj179rzqtv3790eNGjVUZVqS9Hg98sgjxa8liJNhITt37rRJmYmISP+kHggMDMTPP/+MAwcOWG2/ppt/5bF27VqcPHkS1113HWxlyJAhePnll9UIECJLMfgishHpCfL19VVjzUeNGoUBAwZg4sSJiI2Nxe233148TO/48eMYM2YMhg4divbt2yMhIQFHjhzBCy+8gJEjR6qhjDL8Lzs7GydOnMBzzz2H8ePHqx4oqVTmzJmDL774QlVOpp4qOabsa9OmTVeU6/PPP0fnzp0veU+CsXHjxuHOO+9U5SgsLFTve3h44LHHHkN8fDxSUlLUezL8UMbJX16hSe/fzJkzbXY+iYhI3+bOnavqgQYNGlxRHyxfvhzt2rVT9VW3bt3Ujb1ly5YVf75u3ToVyMhNP6nPZETFxo0bSx1K+Nprr6m6sE2bNpfso6SPP/5Y1bUlff/992pqwNSpU/HDDz9cUTdKPSh1mezfZM+ePao+lrpRyiWjQkzHdHd3R3R0tJp+QGQxjYiu2aBBg7QaNWqo/8rj+uuv1zp27Fj8+YwZM7To6Gjt33//1bKzs7Xw8HBt5cqV6rMBAwZo6enp6vmjjz6qde3aVSsoKNCeffZZLS4uTjty5Ij2xRdfFG/7ww8/qOf9+/fXevXqVXyM9u3ba6+88op6Lt9/6qmnSi1r8+bNtfnz5xe/Pnz4sDZs2DD1PCsrS/P19dW+/vrr4s+PHTumubm5aVOmTFGvf/31V23SpElX7Hf9+vVazZo1r+k8EhGRc8rNzdWGDh2qnr/33ntacHCwqu9KCgsL01599VX1fOrUqVqHDh3U88LCQlUvpqWlafn5+eq5qc4RUVFR2po1a9Tzt956S1u3bp16/tVXX2kBAQFaZmbmFeXx9/fXNm3aVPz64MGDWosWLVT9KCZOnFhcT8t28tpU50nzeMOGDep1u3bttO3bt6vnbdu21YYPH37JcV5//XVVNxNZij1fRFYSFxen7ujJQ3qcWrZsWfyZ0WhEVFSUesjzevXqqR4vGRKxYcMGNU9MklbIXTQvLy+4uLggICBATTKuVasWBg0apPYjPU6mxBcy3ly2M5HkHjIxWe4Kyh1EuTtXGulV8/f3L34tE4Yl8YYcf8qUKWo+1/nz54s/l7HyMkTRNIZfJlM/8MADV+zXz89P7efyic1ERFT5yQgKmQMtBg4cqOZDfffdd5dsI/WfqW6S4epSD5oSYMjIDqnfZFSH9JCVrN9Kmj17tkoIJXWWJOFo1aqV+m5JcuzU1NRL6jrpCbv55puL91tyHpjs89ChQ2qfX375peoxMyWkKqveNdV9Bw8evIYzR1XNlRNViOiaycW5tADFRIYuyNC+w4cPIywsTA1pMLddSVIh/fjjj+jRo4eqXHr16lX8WZ8+fTB69GgsXrxYVRYyNLE0OTk5qnIzkTLcdtttePLJJ82WV4ZpyFBFGVohFVrNmjVLneMm0tPTVQBJRERVhwxP9/Hxwfz589Vrqdsk4HnwwQfLrAdFSEiIuikp9ZsM0Zc5VJIoozRSZ8mQfFOdY66eEyXrOhk+KMmjzO3z2WefLT5myTrZVO9KUi2p3y6v26UcUh8TWYo9X0Q20rp1a3VBl4c5QUFBKklFyfW2jh49ilOnTpW6vaR4l8+mT5+O+vXr46GHHir+TCoZCZKkF00qLm9v71L3IT1pEkCVLMOvv/56yTZbtmy55LWMgZdKS5Js9O7du9T9SuUjc8SkEiUioqpDeo2kJ0vmfJlGgEj2XxnZsX37dotuWEov2aJFi1SCJ5kHLXVcaS6vs2T+9LZt2y7ZRuohCYpK1nUSGO7bt8+ifZasB7/66is1mkVGlsgNT+k9u7zuq2g2RqqaGHwRWYFc/E138ExkPSzpiZKLemmfibp166rJujJEQzJD7dixQyXNkInIMszBNNTB5KWXXlIBllz8ZUii3IUrSdK/S4UhyTbMkbt4MvTQRHrRpNKTilICOxmGWFrWQkn8IUMaS/a2lSRDKFu0aFGhrFREROS85Iag9FiVdNddd6neL6lbTErWhaZ60PS+rMf14osvqjpK6s2SGQRLfk/qLKmPJCA6duyYyipc2miMG2644ZK6ThJ4/PTTT8ULK0udK0PsJZmV7FOScHzzzTeqHpQh+KabomPHjlWJOKRelakDlw+tt3VGRaqELJ4dRkSlWrp0qRYZGakZjUbt4Ycf1p555hmVdCM2NlZNzk1JSdH69u2rklH8+eef2ubNm9UE4fvuu09LTU1VE3lbt26teXt7a7fffrt29OhRLSEhQbvxxhu12rVrFyfmEOPHj1eJO7y8vNSEYB8fH+2vv/66pDzdu3cvdfKxiUxa7tOnzyXvffDBB2qCc0hIiPbyyy+X+j1JCjJq1Ciz+5WyTZ8+vRxnjoiInN2CBQtU/fXRRx9d8r4kxYiIiFB1oyTGWL16tebu7q4SVpw9e1YbMmSI+mzt2rUqCYYkm6pVq5bm4eGh6jepQy9cuKDFx8drrq6uqm49c+aMlpycrPXu3Vslh2rWrJn6fmlmz56tjRw5svi1HGPMmDEq6YfUtaNHj1Z1oSSRkoQfY8eOVUlCpMwl67KBAwdqMTExmqenpypXaGioqqdNbrrpJm3Xrl02ObdUORnkfxwdABLR1Z05c0alr5c7cqY7gTJE8ZdfflE9XkJ6wuQOndzBK0u/fv0wadIkxMTEWKVsmZmZasHlhQsXqgnVREREllq/fr0aOig9WqbRJJLOXXqaSiavKg8ZqSEp7RcsWKCSYlR03TIZDfLqq68W99b9888/ajqBDMGXXjRJUS/D/YksxWGHRE5CKgCZMJyRkVEcfMkQQ0mEIYtJynwwmTA8ePBgi4aIvPPOO6pysoZ3330XkydPZuBFREQVqkMk46FpeKHc0JPhfzKPrKIke7DciJT1NStKEobI0EVTXSn/lTlskrFR5nrJfDApO1F5sOeLyIl6vmTBY7lDWKdOHTRs2FCNj5dFm99//31MmDBBjU03lznxcrJosqTpLWt+mCV27dqF4OBgNU+NiIiovDZv3qzmM0ugI8u2yHwtqctkyZVrJSNEZG6XZCssr8TERFXvSj0ndW3z5s3V6JLw8HB101Pmp0mQR1QeDL6IiIiIiIjsgMMOiYiIiIiI7IDBFxERERERkR0w+CIiIiIiIoLt/R+WUwZ1UEwGvQAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "df_norm = normalize_by_group(\n", - " df, normalization_mode=\"bare_atom\"\n", - ")\n", - "fig, ax = plt.subplots(\n", - " ncols=2,\n", - " figsize=(10, 5),\n", - " gridspec_kw={\n", - " \"width_ratios\": [2, 1],\n", - " \"wspace\": 0.05,\n", - " },\n", - ")\n", - "df_norm.nexafs.plot(\n", - " x=\"beamline_energy\",\n", - " y=\"mass_absorption_0\",\n", - " by=\"sample_theta\",\n", - " colorbar=\"Angle (deg)\",\n", - " cmap=\"rainbow\",\n", - " ax=ax[0],\n", - ")\n", - "ax[0].set_xlabel(\"Energy (eV)\")\n", - "ax[0].set_ylabel(\"Mass Abs. (g/cm$^{-2}$)\")\n", - "# scientific notation\n", - "ax[0].ticklabel_format(style=\"sci\", axis=\"y\", scilimits=(0,0))\n", - "ax[0].set_xlim(282, 303)\n", - "\n", - "ax[1].set_xlabel(\"Angle (deg)\")\n", - "ax[1].yaxis.set_label_position(\"right\")\n", - "ax[1].yaxis.tick_right()\n", - "ax[1].set_ylabel(\"Peak Area (a.u.)\")\n", - "ax[1].set_ylim(0, 1.1)\n", - "ax[1].set_xlim(0, 90)\n", - "ax[1].set_xticks(np.arange(0, 91, 15))\n" - ] - }, - { - "cell_type": "markdown", - "id": "66405907", - "metadata": {}, - "source": [ - "## Peak Fitting\n", - "\n", - "There are three aspects to the peak fitting:\n", - "\n", - "1. The absorption ionization step edge - this is a modified step edge that is modified from the bare atom absorption. It accounts for the ionization energy where electrons are photo-ionized into the continuum. We need to fit a energy location, and an energy width.\n", - "2. Peak location - this happens before we perform the fit and is used to determine the number of peaks and their reletive locations.\n", - "3. Multi-peak fit - this is the fit of the peaks. Here we fit the peaks + absorption edge to the data. Each peak is a lorentzian function consisiting of a resonant energy, energy width, amplitude, and shape factor.\n", - "\n", - "### Function\n", - "\n", - "- step edge\n", - "\n", - " $$\n", - " edge(E, E_0, w) = G(E, E_0, w) * \\begin{cases}\n", - " P(E; a, b, c) & E < E_0 \\\\\n", - " P(E; a', b', c') & E \\geq E_0\n", - " \\end{cases}\n", - " $$\n", - "\n", - "- peak\n", - " $$\n", - " p(E, E_0, w, A, \\gamma) = A(\\gamma G(E, E_0, w) + (1 - \\gamma)L(E, E_0, w))\n", - " $$\n", - " $$\n", - " G(E, E_0, w) = \\frac{2\\sqrt{2\\ln(2)}}{w\\sqrt{2\\pi}}e^{-\\frac{2\\ln(2)(E-E_0)^2}{w^2}}\n", - " $$\n", - " $$\n", - " L(E, E_0, w) = \\frac{1}{\\pi}\\frac{w/2}{(w/2)^2 + (E-E_0)^2}\n", - " $$\n" - ] - }, - { - "cell_type": "code", - "execution_count": 224, - "id": "3f290757", - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "from scipy.signal import convolve\n", - "\n", - "df_first = df_norm.groupby(\"sample_theta\").get_group(45)\n", - "\n", - "bare_atom = df_first[\n", - " [\"beamline_energy\", \"bare_atom\"]\n", - "]\n", - "\n", - "\n", - "pre_edge = bare_atom[bare_atom[\"beamline_energy\"] < 284.2]\n", - "post_edge = bare_atom[bare_atom[\"beamline_energy\"] >= 284.4]\n", - "\n", - "pre_edge_fit = np.polyfit(pre_edge[\"beamline_energy\"], pre_edge[\"bare_atom\"], 3)\n", - "post_edge_fit = np.polyfit(post_edge[\"beamline_energy\"], post_edge[\"bare_atom\"], 3)\n", - "\n", - "def gaussian(E, E_0, A, w):\n", - " sigma = w / (2 * np.sqrt(2 * np.log(2)))\n", - " A /= sigma * np.sqrt(2 * np.pi)\n", - " return A * np.exp(-(E - E_0)**2 / (2 * sigma**2))\n", - "\n", - "def lorentzian(E, E_0, w):\n", - " return 1 / (np.pi * w * (1 + ((E - E_0) / w)**2))\n", - "\n", - "def voigt(E, E_0, w, A, g):\n", - " return A * (\n", - " g * gaussian(E, E_0, 1, w) +\n", - " (1 - g) * lorentzian(E, E_0, w)\n", - " )\n" - ] - }, - { - "cell_type": "code", - "execution_count": 225, - "id": "f67ab420", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[]" - ] - }, - "execution_count": 225, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "\n", - "# Pre-allocate work buffers and kernel cache to avoid repeated allocation in step_edge\n", - "_step_edge_kernel_cache = {}\n", - "\n", - "def _get_gaussian_kernel(w, dE):\n", - " # Keyed by (w, dE)\n", - " key = (float(w), float(dE))\n", - " kernel = _step_edge_kernel_cache.get(key)\n", - " if kernel is not None:\n", - " return kernel\n", - " kernel_width_points = int(np.round(6 * w / dE))\n", - " if kernel_width_points % 2 == 0:\n", - " kernel_width_points += 1\n", - " kernel_E = np.linspace(-3 * w, 3 * w, kernel_width_points)\n", - " k = gaussian(kernel_E, 0, 1, w)\n", - " k /= np.sum(k)\n", - " _step_edge_kernel_cache[key] = k\n", - " return k\n", - "\n", - "def step_edge(E, E_0, w):\n", - " # Uses locally cached kernel and minimal allocation for efficiency.\n", - " # \"A\" is currently unused, kept for future compatibility.\n", - " global pre_edge_fit, post_edge_fit\n", - " E = np.atleast_1d(E)\n", - " n_points = E.shape[0]\n", - " if n_points < 2:\n", - " dE = 1.0\n", - " else:\n", - " dE = E[1] - E[0]\n", - "\n", - " # Padding by +/-3*sigma\n", - " pad_width = int(np.ceil(3 * w / dE))\n", - " # Use pre-allocated work buffers if n_points is modest\n", - " E_left = E[0] - np.arange(pad_width, 0, -1) * dE\n", - " E_right = E[-1] + np.arange(1, pad_width + 1) * dE\n", - " E_extended = np.concatenate([E_left, E, E_right])\n", - "\n", - " # Use fast in-place computation for the piecewise polynomial\n", - " y_extended = np.empty_like(E_extended, dtype=np.float64)\n", - " mask = E_extended < E_0\n", - " y_extended[mask] = np.polyval(pre_edge_fit, E_extended[mask])\n", - " y_extended[~mask] = np.polyval(post_edge_fit, E_extended[~mask])\n", - "\n", - " # Get/calculate the gaussian kernel only once for each (w, dE)\n", - " kernel = _get_gaussian_kernel(w, dE)\n", - "\n", - " # Convolve using 'same' mode (scipy.signal.convolve is already fast)\n", - " convolved = convolve(y_extended, kernel, mode=\"same\", method=\"auto\")\n", - "\n", - " # Return only the region covering original E\n", - " start = pad_width\n", - " end = pad_width + n_points\n", - " return convolved[start:end]\n", - "\n", - "common_energy = np.linspace(270, 380, 1000)\n", - "\n", - "plt.plot(\n", - " common_energy,\n", - " step_edge(\n", - " common_energy,\n", - " 285, .5),\n", - " label=\"Step Edge\",\n", - " color=\"k\",\n", - " ls=\"--\",\n", - ")\n", - "plt.plot(\n", - " df_first[\"beamline_energy\"],\n", - " df_first[\"bare_atom\"],\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 237, - "id": "1b428956", - "metadata": {}, - "outputs": [], - "source": [ - "from dataclasses import dataclass\n", - "\n", - "\n", - "def _scalar(x):\n", - " return float(np.asarray(x).flat[0])\n", - "\n", - "@dataclass\n", - "class Peak:\n", - " e: float\n", - " a: float\n", - " w: float\n", - " g: float\n", - "\n", - " @property\n", - " def p0(self):\n", - " return [_scalar(self.e), _scalar(self.w), _scalar(self.a), _scalar(self.g)]\n", - "\n", - " @p0.setter\n", - " def p0(self, value):\n", - " self.e = value[0]\n", - " self.w = value[1]\n", - " self.a = value[2]\n", - " self.g = value[3]\n", - "\n", - " def model(self, E, *p):\n", - " return voigt(E, *p)\n", - "\n", - " def __call__(self, E):\n", - " return self.model(E, *self.p0)\n", - "\n", - " def __add__(self, other):\n", - " return self(other.e) + other(self.e)\n", - "\n", - " @property\n", - " def ub(self):\n", - " return [self.e + .5, self.w + 2, 10*self.a, 1]\n", - "\n", - " @property\n", - " def lb(self):\n", - " return [self.e - .5, .1, 0, 0]\n", - "\n", - "@dataclass\n", - "class StepEdge:\n", - " e: float\n", - " w: float\n", - "\n", - " @property\n", - " def p0(self):\n", - " return [_scalar(self.e), _scalar(self.w)]\n", - "\n", - " @p0.setter\n", - " def p0(self, value):\n", - " self.e = value[0]\n", - " self.w = value[1]\n", - "\n", - " def model(self, E, *p):\n", - " return step_edge(E, *p)\n", - "\n", - " def __call__(self, E):\n", - " return self.model(E, *self.p0)\n", - "\n", - " @property\n", - " def ub(self):\n", - " return [310, 5]\n", - "\n", - " @property\n", - " def lb(self):\n", - " return [270, .1]\n", - "\n", - "class PeakSet:\n", - " def __init__(self, step_edge: StepEdge, peaks: list[Peak]):\n", - " self.peaks = peaks\n", - " self.step_edge = step_edge\n", - "\n", - " def model(self, E, *p):\n", - " res = self.step_edge.model(E, *p[:2])\n", - " for i, peak in enumerate(self.peaks):\n", - " res += peak.model(E, *p[2 + 4 * i : 2 + 4 * (i + 1)])\n", - " return res\n", - "\n", - " def __call__(self, E):\n", - " return self.model(E, *self.p0)\n", - "\n", - " def _concat_property(self, prop):\n", - " params = list(getattr(self.step_edge, prop))\n", - " for p in self.peaks:\n", - " params.extend(getattr(p, prop))\n", - " return params\n", - "\n", - " @property\n", - " def p0(self):\n", - " \"\"\"\n", - " Returns a flat list of parameters in the order:\n", - " [step_edge params..., all peaks' params...]\n", - " suitable for passing into the model.\n", - " \"\"\"\n", - " return self._concat_property(\"p0\")\n", - "\n", - " @p0.setter\n", - " def p0(self, value):\n", - " self.step_edge.p0 = value[:2]\n", - " for i, peak in enumerate(self.peaks):\n", - " peak.p0 = value[2 + 4 * i : 2 + 4 * (i + 1)]\n", - "\n", - " @property\n", - " def ub(self):\n", - " return self._concat_property(\"ub\")\n", - "\n", - " @property\n", - " def lb(self):\n", - " return self._concat_property(\"lb\")\n", - "\n", - " def bounds(self):\n", - " lb = np.array([float(x) for x in self.lb])\n", - " ub = np.array([float(x) for x in self.ub])\n", - " return (lb, ub)\n", - "\n", - " def bounds2(self):\n", - " lb, ub = self.bounds()\n", - " return list(zip(lb, ub, strict=False))\n", - "\n", - " def _fit_indices(self, *components: str) -> list[int]:\n", - " position = [0] + [2 + 4 * i for i in range(len(self.peaks))]\n", - " width = [1] + [2 + 4 * i + 1 for i in range(len(self.peaks))]\n", - " amplitude = [2 + 4 * i + 2 for i in range(len(self.peaks))]\n", - " shape = [2 + 4 * i + 3 for i in range(len(self.peaks))]\n", - " mapping = {\n", - " \"step_edge\": [0, 1],\n", - " \"position\": position,\n", - " \"width\": width,\n", - " \"amplitude\": amplitude,\n", - " \"shape\": shape,\n", - " }\n", - " indices = []\n", - " for name in components:\n", - " if name not in mapping:\n", - " raise ValueError(f\"unknown component {name!r}; use one of {list(mapping)}\")\n", - " indices.extend(mapping[name])\n", - " return sorted(set(indices))\n", - "\n", - " def fit_config(self, *components: str):\n", - " \"\"\"\n", - " Return (x0_free, bounds2_free, expand) for fitting only the given components.\n", - " components: any of 'step_edge', 'position', 'width', 'amplitude', 'shape'.\n", - " Use: x0, bnds, expand = peakset.fit_config('amplitude', 'position')\n", - " out = minimize(lambda p: obj(expand(p)), x0, bounds=bnds, ...)\n", - " peakset.p0 = expand(out.x)\n", - " \"\"\"\n", - " free = self._fit_indices(*components)\n", - " full_p0 = np.array(self.p0, dtype=float)\n", - " full_bounds = self.bounds2()\n", - " x0_free = [full_p0[i] for i in free]\n", - " bounds2_free = [full_bounds[i] for i in free]\n", - "\n", - " def expand(p_free):\n", - " out = full_p0.copy()\n", - " for j, i in enumerate(free):\n", - " out[i] = p_free[j]\n", - " return out.tolist()\n", - "\n", - " return x0_free, bounds2_free, expand\n", - "\n", - " def plot(self, E, ax=None):\n", - " if ax is None:\n", - " fig, ax = plt.subplots()\n", - " step = self.step_edge(E)\n", - " ax.plot(E, step, color=\"k\", ls=\"--\")\n", - " for i, p in enumerate(self.peaks):\n", - " ax.axvline(p.e, color=f\"C{i}\", ls=\"--\")\n", - " ax.plot(E, p(E) + step, color=f\"C{i}\")\n", - " return ax\n", - "\n", - " def _order_peaks(self):\n", - " return sorted(self.peaks, key=lambda p: p.e)\n", - "\n", - " def add_peak(self, peak: Peak):\n", - " self.peaks.append(peak)\n", - " self.peaks = self._order_peaks()\n", - " return self\n", - "\n", - " def insert_between(self, loc: int):\n", - " left = self.peaks[loc]\n", - " right = self.peaks[loc + 1]\n", - " new_peak = Peak(\n", - " (left.e + right.e) / 2,\n", - " left.a / 2,\n", - " np.interp(\n", - " (left.e + right.e) / 2,\n", - " [left.e, right.e],\n", - " [left.w, right.w],\n", - " ),\n", - " g=1,\n", - " )\n", - " self.peaks.insert(loc + 1, new_peak)\n", - " self.peaks = self._order_peaks()\n", - " return self\n", - "\n", - "\n", - "class MultiAnglePeakSet:\n", - " def __init__(self, base_peakset: PeakSet, angles: list[float], amplitudes: np.ndarray | None = None):\n", - " self.step_edge = StepEdge(base_peakset.step_edge.e, base_peakset.step_edge.w)\n", - " self.peaks = [Peak(p.e, p.a, p.w, p.g) for p in base_peakset.peaks]\n", - " self.angles = list(angles)\n", - " self.n_peaks = len(self.peaks)\n", - " self.n_angles = len(self.angles)\n", - " if amplitudes is None:\n", - " base_amp = np.array([p.a for p in self.peaks], dtype=float)\n", - " self.amplitudes = np.tile(base_amp[None, :], (self.n_angles, 1))\n", - " else:\n", - " amp = np.asarray(amplitudes, dtype=float)\n", - " if amp.shape != (self.n_angles, self.n_peaks):\n", - " raise ValueError(f\"amplitudes must have shape {(self.n_angles, self.n_peaks)}, got {amp.shape}\")\n", - " self.amplitudes = amp.copy()\n", - "\n", - " @property\n", - " def _shared_len(self) -> int:\n", - " return 2 + 3 * self.n_peaks\n", - "\n", - " def _shared_p0(self) -> list[float]:\n", - " vals = [float(self.step_edge.e), float(self.step_edge.w)]\n", - " for p in self.peaks:\n", - " vals.extend([float(p.e), float(p.w), float(p.g)])\n", - " return vals\n", - "\n", - " def _shared_lb(self) -> list[float]:\n", - " vals = list(self.step_edge.lb)\n", - " for p in self.peaks:\n", - " vals.extend([p.lb[0], p.lb[1], p.lb[3]])\n", - " return vals\n", - "\n", - " def _shared_ub(self) -> list[float]:\n", - " vals = list(self.step_edge.ub)\n", - " for p in self.peaks:\n", - " vals.extend([p.ub[0], p.ub[1], p.ub[3]])\n", - " return vals\n", - "\n", - " def _amp_lb(self) -> np.ndarray:\n", - " return np.array([p.lb[2] for p in self.peaks], dtype=float)\n", - "\n", - " def _amp_ub(self) -> np.ndarray:\n", - " return np.array([p.ub[2] for p in self.peaks], dtype=float)\n", - "\n", - " @property\n", - " def p0(self) -> list[float]:\n", - " shared = np.array(self._shared_p0(), dtype=float)\n", - " amp = self.amplitudes.reshape(-1)\n", - " return np.concatenate([shared, amp]).tolist()\n", - "\n", - " @p0.setter\n", - " def p0(self, value):\n", - " p = np.asarray(value, dtype=float)\n", - " expected = self._shared_len + self.n_angles * self.n_peaks\n", - " if p.size != expected:\n", - " raise ValueError(f\"parameter vector must have length {expected}, got {p.size}\")\n", - " self.step_edge.p0 = p[:2].tolist()\n", - " for i, peak in enumerate(self.peaks):\n", - " base = 2 + 3 * i\n", - " peak.e = float(p[base])\n", - " peak.w = float(p[base + 1])\n", - " peak.g = float(p[base + 2])\n", - " amp_start = self._shared_len\n", - " self.amplitudes = p[amp_start:].reshape(self.n_angles, self.n_peaks).copy()\n", - "\n", - " def bounds2(self) -> list[tuple[float, float]]:\n", - " shared_lb = np.array(self._shared_lb(), dtype=float)\n", - " shared_ub = np.array(self._shared_ub(), dtype=float)\n", - " amp_lb = np.tile(self._amp_lb()[None, :], (self.n_angles, 1)).reshape(-1)\n", - " amp_ub = np.tile(self._amp_ub()[None, :], (self.n_angles, 1)).reshape(-1)\n", - " lb = np.concatenate([shared_lb, amp_lb])\n", - " ub = np.concatenate([shared_ub, amp_ub])\n", - " return list(zip(lb.tolist(), ub.tolist(), strict=False))\n", - "\n", - " def model_angle(self, E, p, angle_idx: int):\n", - " p = np.asarray(p, dtype=float)\n", - " e0 = float(p[0])\n", - " w0 = float(p[1])\n", - " step = step_edge(E, e0, w0)\n", - " amp_start = self._shared_len + angle_idx * self.n_peaks\n", - " out = np.array(step, dtype=float)\n", - " for i in range(self.n_peaks):\n", - " shared = 2 + 3 * i\n", - " e = float(p[shared])\n", - " w = float(p[shared + 1])\n", - " g = float(p[shared + 2])\n", - " a = float(p[amp_start + i])\n", - " out += voigt(E, e, w, a, g)\n", - " return out\n", - "\n", - " def as_peakset(self, angle_idx: int) -> PeakSet:\n", - " if angle_idx < 0 or angle_idx >= self.n_angles:\n", - " raise IndexError(f\"angle_idx must be in [0, {self.n_angles - 1}]\")\n", - " peaks = []\n", - " for i, p in enumerate(self.peaks):\n", - " peaks.append(Peak(float(p.e), float(self.amplitudes[angle_idx, i]), float(p.w), float(p.g)))\n", - " return PeakSet(StepEdge(float(self.step_edge.e), float(self.step_edge.w)), peaks)\n", - "\n", - " def _fit_indices(self, *components: str, angle_indices: list[int] | None = None) -> list[int]:\n", - " position = [0] + [2 + 3 * i for i in range(self.n_peaks)]\n", - " width = [1] + [2 + 3 * i + 1 for i in range(self.n_peaks)]\n", - " shape = [2 + 3 * i + 2 for i in range(self.n_peaks)]\n", - " if angle_indices is None:\n", - " angle_indices = list(range(self.n_angles))\n", - " amp_idx = []\n", - " for a_idx in angle_indices:\n", - " base = self._shared_len + a_idx * self.n_peaks\n", - " amp_idx.extend([base + i for i in range(self.n_peaks)])\n", - " mapping = {\n", - " \"step_edge\": [0, 1],\n", - " \"position\": position,\n", - " \"width\": width,\n", - " \"shape\": shape,\n", - " \"amplitude\": amp_idx,\n", - " }\n", - " indices = []\n", - " for name in components:\n", - " if name not in mapping:\n", - " raise ValueError(f\"unknown component {name!r}; use one of {list(mapping)}\")\n", - " indices.extend(mapping[name])\n", - " return sorted(set(indices))\n", - "\n", - " def fit_config(self, *components: str, angle_indices: list[int] | None = None):\n", - " free = self._fit_indices(*components, angle_indices=angle_indices)\n", - " full_p0 = np.array(self.p0, dtype=float)\n", - " full_bounds = self.bounds2()\n", - " x0_free = [full_p0[i] for i in free]\n", - " bounds2_free = [full_bounds[i] for i in free]\n", - "\n", - " def expand(p_free):\n", - " out = full_p0.copy()\n", - " for j, i in enumerate(free):\n", - " out[i] = p_free[j]\n", - " return out.tolist()\n", - "\n", - " return x0_free, bounds2_free, expand" - ] - }, - { - "cell_type": "code", - "execution_count": 251, - "id": "4facf29a", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(280.0, 300.0)" - ] - }, - "execution_count": 251, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from scipy.signal import find_peaks\n", - "\n", - "# Find peaks in the data from the first bare atom spectrum\n", - "peaks, _ = find_peaks(\n", - " df_first[\"mass_absorption_0\"],\n", - " prominence=0.01,\n", - " width=.5,\n", - " rel_height=.3,\n", - " )\n", - "\n", - "peak_e = [285.01, 287.17, 288.65, 293.05, 289.86]\n", - "\n", - "# Find the closest energies in the beamline_energy column\n", - "closest_energy = [\n", - " df_first[\"beamline_energy\"].iloc[(df_first[\"beamline_energy\"] - e).abs().argmin()]\n", - " for e in peak_e\n", - "]\n", - "\n", - "peak_a = [\n", - " df_first[df_first[\"beamline_energy\"] == e][\"mass_absorption_0\"].iloc[0]\n", - " for e in closest_energy\n", - "]\n", - "\n", - "\n", - "def build_peakset(peak_e, peak_a, step_energy, step_width):\n", - " peakset = PeakSet(\n", - " StepEdge(step_energy, step_width),\n", - " [],\n", - " )\n", - " for i, (e, a) in enumerate(\n", - " zip(peak_e, peak_a, strict=False)\n", - " ):\n", - " if e > 320:\n", - " continue\n", - " if e > 284.2:\n", - " width = np.interp(\n", - " e,\n", - " [284.2, 310],\n", - " [.5, 10],\n", - " )\n", - " height = a - step_edge(e, step_energy, step_width)\n", - " amplitude = height / voigt(e, e, width, 1, 1)\n", - " peakset.add_peak(Peak(e, amplitude, width, 1))\n", - " return peakset\n", - "\n", - "peakset = build_peakset(peak_e, peak_a, 290, 1)\n", - "\n", - "\n", - "fig, ax = plt.subplots(figsize=(10, 5))\n", - "df_first.plot(x=\"beamline_energy\", y=\"mass_absorption_0\", ax=ax)\n", - "ax = peakset.plot(common_energy, ax=ax)\n", - "ax.plot(common_energy, peakset(common_energy), color=\"k\", ls=\"--\")\n", - "ax.set_xlim(280, 300)" - ] - }, - { - "cell_type": "code", - "execution_count": 239, - "id": "81b0f800", - "metadata": {}, - "outputs": [], - "source": [ - "energy_window = (283, 310)\n", - "angles = sorted(df_norm[\"sample_theta\"].unique())\n", - "\n", - "datasets = []\n", - "for theta in angles:\n", - " g = df_norm.groupby(\"sample_theta\").get_group(theta)\n", - " mask = (g[\"beamline_energy\"] > energy_window[0]) & (g[\"beamline_energy\"] < energy_window[1])\n", - " d = g[mask]\n", - " x = d[\"beamline_energy\"].to_numpy(dtype=float)\n", - " y = d[\"mass_absorption_0\"].to_numpy(dtype=float)\n", - " err = np.maximum(np.abs(0.01 * y), 1e-12)\n", - " datasets.append((float(theta), x, y, err))\n", - "\n", - "multi_peakset = MultiAnglePeakSet(peakset, angles)\n", - "\n", - "def obj(p):\n", - " total = 0.0\n", - " for i, (_, x, y, err) in enumerate(datasets):\n", - " pred = multi_peakset.model_angle(x, p, i)\n", - " resid = (pred - y) / err\n", - " total += float(np.sum(resid**2))\n", - " return total" - ] - }, - { - "cell_type": "code", - "execution_count": 240, - "id": "bb8705c8", - "metadata": {}, - "outputs": [], - "source": [ - "from scipy.optimize import minimize\n", - "\n", - "x0, bnds, expand = multi_peakset.fit_config(\n", - " \"amplitude\", \"position\", \"step_edge\")\n", - "out = minimize(\n", - " lambda p: obj(expand(p)),\n", - " x0,\n", - " method=\"SLSQP\",\n", - " bounds=bnds,\n", - ")\n", - "multi_peakset.p0 = expand(out.x)\n", - "\n", - "x0, bnds, expand = multi_peakset.fit_config(\n", - " \"shape\")\n", - "out = minimize(\n", - " lambda p: obj(expand(p)),\n", - " x0,\n", - " method=\"SLSQP\",\n", - " bounds=bnds,\n", - ")\n", - "multi_peakset.p0 = expand(out.x)\n", - "\n", - "x0, bnds, expand = multi_peakset.fit_config(\n", - " \"amplitude\", \"position\", \"width\", \"shape\")\n", - "out = minimize(\n", - " lambda p: obj(expand(p)),\n", - " x0,\n", - " method=\"SLSQP\",\n", - " bounds=bnds,\n", - ")\n", - "\n", - "peakset = multi_peakset.as_peakset(0)" - ] - }, - { - "cell_type": "code", - "execution_count": 246, - "id": "3133dda6", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(283.0, 300.0)" - ] - }, - "execution_count": 246, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "ax = peakset.plot(common_energy)\n", - "df_first.plot(x=\"beamline_energy\", y=\"mass_absorption_0\", ax=ax)\n", - "ax.plot(common_energy, peakset(common_energy), color=\"k\", ls=\"--\")\n", - "ax.set_xlim(283, 300)" - ] - }, - { - "cell_type": "code", - "execution_count": 241, - "id": "c2a46ec8", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Text(0.5, 1.0, 'Global multi-angle fit with shared edge/position/width/shape')" - ] - }, - "execution_count": 241, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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+h+LgG3nzp3YsmXLiJSZiIiSg4EWERHpnujhyczMRGdnJ7773e9ixYoV+MEPfoCpU6fic5/7XP9Qu6amJtx222244YYbsHDhQuzatQsNDQ34z//8T3znO9+RwxHFEL5AIIADBw7gP/7jP/C9731P9izNmTMHjz/+OH73u9/JHqe+HihxTLGvd99996hy/frXv8bSpUs/tU0EXnfeeSfOP/98WY5YLCa3W61WXHfddaipqUF3d7fcJoYQfvDBB/LYhxO9eo8++uiInU8iIhp5DLSIiEh3tm/fjquvvlr+nXbaafjb3/4mt4vhgyK4EkHPlVdeic2bN8ueHzEHShCB01133YVf/vKXcoiemOPVF1j95S9/kQGXCNpED9ktt9yCM844QwZsy5cvx/jx43HVVVfJY4rAKhgMyn3m5ORg9uzZWLBgwVHlFPucNm1a/2MR1L322mvyGC+++CJ+//vf49lnn+1//utf/7qchyUCOmHt2rWyDEcSZV+9evUInFkiIkoWBlpERKQ7J554ouxZEn8iqDrllFP6n7PZbDIoEn9iffLkybIn6+DBg3jnnXfkvC6RUMJiscDhcMBoNMpgafr06aioqJDBlCB6kvqSUixevFi+ro9IvLFq1SqEw2G8/fbbco7VQERglZ2d3f/46aeflkkxxPHvv/9+Of+qq6ur//mysjI5zPCRRx6Rj5966il8+ctfPmq/WVlZcj9+v1+T80lERMl39EB4IiIiHREB0EDBSB8xzE8Mz9u3bx9KSkpkr9Vgrzvc6aefjj/96U+orq5Gb28vvvCFL/Q/98UvflH2eIleKRGQieGFAxG9XmLYYR9Rhs9+9rOy52owopdNDDcUGRZ7enpQWlp61GtEj5vgdrtlsEhERKMPe7SIiEj3Tj31VBnEiL/B5Ofny2GEh9/Pav/+/WhpaRnw9SKtunhODDOcMmWKHIrYRwRPIiASvWNiqJ/T6RxwH6KHTARLh5fhzTff/NRr3n///aPmX4mhgSIBxsUXXzzgfkXgJ+Z0FRYWDlpfIiLSNwZaRESkKyKxRV8CiT7iflOih0kEMgM9J0yaNAlVVVX4t3/7N+zZs0fO3xIJLUSmPzFEsG+YYB8xl0sEU2KOlBhWKHqPDidSrosgSczXGozoFRPDB/uI3rHnnntOpqYXQZwYSjhQ9kCRlEMMSzy8F+1wYhikmBd2ZC8cERGNHgy0iIhIN/74xz/KxBbivlmix+db3/qWTE4hAiHROyWCqj//+c8y/bkIgjZs2CADmTVr1shASWT0a21txaxZs2RijDvuuEOmYH/99dfl68Wyj+ilElkARbINkVJd3MNq48aN/c/n5ubinHPOwec///lByyvme61bt67/sdiXuK/WD3/4Q5x88snYsWOHLP+RRO+ZCOT6hggeaf369QO+j4iIRg+DcuRPfERERGNcW1ubzAwoElYIopdMBHIiu6EIgAQRuIk07Q8++OAx93XppZfi3nvvxYQJEzQpm8/nkzcvFlkHRbIPIiIandijRUREaUcM6du2bRu8Xm9/oCV6vESSCpFyXczf6utNOx4xx+uee+6RQwG1cN9998leMQZZRESjGwMtIiJKOytXrpTZ/MScrvnz58teLDHUT8zzEgGXyDIo7td15I2EB1JUVCTngolhjMO1detWXH/99TI5BxERjW4cOkhERERERKQx9mgRERERERFpjIEWERERERGRxhhoERERERERQVv/H6O06XpwjWUOAAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "fig, ax = plt.subplots(figsize=(10, 6))\n", - "for i, (theta, x, y, _) in enumerate(datasets):\n", - " c = f\"C{i % 10}\"\n", - " ax.plot(x, y, color=c, alpha=0.35, lw=1)\n", - " ax.plot(x, multi_peakset.model_angle(x, multi_peakset.p0, i), color=c, lw=1.6, label=f\"{theta:g} deg\")\n", - "\n", - "for p in multi_peakset.peaks:\n", - " ax.axvline(p.e, color=\"k\", ls=\"--\", alpha=0.25)\n", - "\n", - "ax.set_xlim(*energy_window)\n", - "ax.set_xlabel(\"Energy (eV)\")\n", - "ax.set_ylabel(\"Mass Absorption\")\n", - "ax.legend(ncol=2, fontsize=8)\n", - "ax.set_title(\"Global multi-angle fit with shared edge/position/width/shape\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "cb31cbab", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": ".venv", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.13.11" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/pyproject.toml b/pyproject.toml index d68aab7..5255a00 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -64,7 +64,6 @@ dependencies = [ [project.scripts] pyref = "pyref.cli.main:main" -pyref-ingest = "pyref.cli.main:main_ingest_shim" [tool.maturin] bindings = "pyo3" diff --git a/python/pyref/cli/__init__.py b/python/pyref/cli/__init__.py index 4371dbb..07d584a 100644 --- a/python/pyref/cli/__init__.py +++ b/python/pyref/cli/__init__.py @@ -1,5 +1,5 @@ """ -Typer CLI: NAS registration, beamtime describe, catalog ingest, watch daemons. +Typer CLI: NAS registration, beamtime describe, catalog ingest, watch, bench. """ from __future__ import annotations @@ -7,6 +7,7 @@ import typer from pyref.cli import beamtime as beamtime_cli +from pyref.cli import bench as bench_cli from pyref.cli import catalog as catalog_cli from pyref.cli import nas as nas_cli from pyref.cli import watch as watch_cli @@ -19,5 +20,6 @@ app.add_typer(beamtime_cli.app, name="beamtime") app.add_typer(catalog_cli.app, name="catalog") app.add_typer(watch_cli.app, name="watch") +app.add_typer(bench_cli.app, name="bench") __all__ = ["app"] diff --git a/python/pyref/cli/bench.py b/python/pyref/cli/bench.py new file mode 100644 index 0000000..086ebb4 --- /dev/null +++ b/python/pyref/cli/bench.py @@ -0,0 +1,203 @@ +""" +``pyref bench``: synthetic ingest harness and real-beamtime wall-clock profiling. +""" + +from __future__ import annotations + +import tempfile +import warnings +from pathlib import Path + +import numpy as np +import typer +from astropy.io import fits +from astropy.io.fits.verify import VerifyWarning + +from pyref.ingest_profile import ( + format_seconds, + isolated_catalog_env, + render_markdown_table, + run_ingest_with_profile, +) + +warnings.filterwarnings("ignore", category=VerifyWarning) + +app = typer.Typer(help="Ingest benchmarking and wall-clock profiling") + +_SYNTHETIC_SAMPLE_NAME = "synth" +_BZERO_UNSIGNED_I16 = 32_768 + + +def _build_primary_header(scan_idx: int, frame_idx: int) -> fits.Header: + hdr = fits.Header() + hdr["SIMPLE"] = True + hdr["BITPIX"] = 16 + hdr["NAXIS"] = 0 + hdr["DATE"] = "2024-02-02T00:00:00" + hdr["Beamline Energy"] = 250.0 + float(scan_idx) + hdr["Sample Theta"] = 1.0 + float(frame_idx) * 0.01 + hdr["CCD Theta"] = 2.0 + hdr["EPU Polarization"] = 1.0 + hdr["Higher Order Suppressor"] = 0.0 + return hdr + + +def _build_image_hdu( + width: int, + height: int, + scan_idx: int, + frame_idx: int, +) -> fits.ImageHDU: + rng = np.random.default_rng(seed=scan_idx * 1_000_003 + frame_idx) + raw = rng.integers(low=0, high=1024, size=(height, width), dtype=np.int32) + data_i16 = (raw - _BZERO_UNSIGNED_I16).astype(np.int16) + hdu = fits.ImageHDU(data=data_i16) + hdu.header["BZERO"] = _BZERO_UNSIGNED_I16 + return hdu + + +def _write_synthetic_fits( + path: Path, + width: int, + height: int, + scan_idx: int, + frame_idx: int, +) -> None: + primary = fits.PrimaryHDU(header=_build_primary_header(scan_idx, frame_idx)) + image = _build_image_hdu(width, height, scan_idx, frame_idx) + hdul = fits.HDUList([primary, image]) + hdul.writeto(path, overwrite=True) + + +def _build_synthetic_beamtime( + tmp_dir: Path, + scans: int, + frames_per_scan: int, + width: int, + height: int, +) -> Path: + beamtime = (tmp_dir / "beamtime").resolve() + ccd_dir = beamtime / "CCD" + ccd_dir.mkdir(parents=True, exist_ok=True) + for scan_idx in range(scans): + scan_number = scan_idx + 1 + for frame_idx in range(frames_per_scan): + frame_number = frame_idx + 1 + stem = ( + f"{_SYNTHETIC_SAMPLE_NAME}-{scan_number:05d}-{frame_number:05d}" + ) + _write_synthetic_fits( + ccd_dir / f"{stem}.fits", + width, + height, + scan_idx, + frame_idx, + ) + return beamtime + + +@app.command("synthetic") +def bench_synthetic( + scans: int = typer.Option(10, "--scans", help="Number of synthetic scans."), + frames_per_scan: int = typer.Option( + 10, + "--frames-per-scan", + help="Frames generated per synthetic scan.", + ), + width: int = typer.Option(1024, "--width", help="NAXIS1 for each synthetic frame."), + height: int = typer.Option( + 1024, + "--height", + help="NAXIS2 for each synthetic frame.", + ), +) -> None: + """Generate a temporary beamtime, ingest into an isolated catalog, print timings.""" + if scans <= 0 or frames_per_scan <= 0: + raise typer.BadParameter("--scans and --frames-per-scan must be positive") + if width <= 0 or height <= 0: + raise typer.BadParameter("--width and --height must be positive") + + total_files = scans * frames_per_scan + + with tempfile.TemporaryDirectory(prefix="pyref-bench-fixture-") as fixture_dir: + beamtime = _build_synthetic_beamtime( + Path(fixture_dir), + scans, + frames_per_scan, + width, + height, + ) + with isolated_catalog_env(): + _catalog_path, profile = run_ingest_with_profile(beamtime) + + typer.echo( + f"Synthetic beamtime: {scans} scans x {frames_per_scan} frames " + f"({width}x{height} px) => {total_files} files" + ) + typer.echo(f"FITS files (layout): {profile.layout_files}") + cr = profile.counts["catalog_row"] + fc = profile.counts["file_complete"] + typer.echo(f"catalog_row events: {cr} file_complete: {fc}") + first_cr = profile.first_catalog_row_seconds + first_fc = profile.first_file_complete_seconds + if first_cr is not None: + typer.echo(f"Time to first catalog_row: {first_cr:.3f} s") + if first_fc is not None: + typer.echo(f"Time to first file_complete: {first_fc:.3f} s") + typer.echo() + typer.echo(render_markdown_table(profile)) + if profile.wall_seconds > 0 and total_files > 0: + fps = total_files / profile.wall_seconds + wall_s = profile.wall_seconds + typer.echo( + f"files_per_second: {fps:.2f} " + f"({total_files} files in {wall_s:.3f} s)" + ) + + +@app.command("profile") +def bench_profile( + beamtime: Path = typer.Option( + ..., + "--beamtime", + help="Beamtime root (e.g. ALS date folder containing CCD data).", + ), + use_default_paths: bool = typer.Option( + False, + "--use-default-paths", + help="Do not override PYREF_CATALOG_DB / PYREF_CACHE_ROOT.", + ), +) -> None: + """Print ingest phase wall times for a real beamtime (Rust progress events).""" + beam = beamtime.resolve() + + with isolated_catalog_env( + enabled=not use_default_paths, + prefix="pyref-ingest-profile-", + ): + _catalog_path, profile = run_ingest_with_profile(beam) + + typer.echo(f"Beamtime: {beam}") + typer.echo(f"FITS files (layout): {profile.layout_files}") + if profile.layout_files == 0: + typer.echo( + "Note: 0 files often means no ingestible `.fits` " + "(stems starting with `_` are skipped) or unrecognized layout." + ) + cr = profile.counts["catalog_row"] + fc = profile.counts["file_complete"] + typer.echo(f"catalog_row events: {cr} file_complete: {fc}") + first_cr = profile.first_catalog_row_seconds + first_fc = profile.first_file_complete_seconds + if first_cr is not None: + typer.echo(f"Time to first catalog_row: {format_seconds(first_cr)} s") + if first_fc is not None: + typer.echo(f"Time to first file_complete: {format_seconds(first_fc)} s") + typer.echo() + typer.echo(render_markdown_table(profile)) + typer.echo( + "Notes: Python does almost no work during ingest (Rust holds the GIL only for " + "short callbacks). Slow `headers` on network mounts is mostly FITS open/read " + "from the volume. `catalog` is single-writer SQLite. `zarr` re-reads each file " + "for pixels after catalog inserts." + ) diff --git a/python/pyref/cli/catalog.py b/python/pyref/cli/catalog.py index 169bc95..145a55f 100644 --- a/python/pyref/cli/catalog.py +++ b/python/pyref/cli/catalog.py @@ -8,6 +8,7 @@ import sys from pathlib import Path +import polars as pl import typer from pyref.cli.config import load as load_config @@ -17,7 +18,13 @@ resolve_beamtime_path, ) from pyref.io.beamtime import ingest_beamtime_with_rich_progress -from pyref.io.readers import DEFAULT_HEADER_KEYS, ingest_beamtime +from pyref.io.catalog_path import resolve_catalog_path +from pyref.io.experiment_names import discover_fits, parse_fits_stem +from pyref.io.readers import ( + DEFAULT_HEADER_KEYS, + beamtime_ingest_layout, + ingest_beamtime, +) app = typer.Typer(help="Global catalog and ingest") @@ -31,17 +38,178 @@ def catalog_path_cmd( ), ) -> None: """Print the active catalog database and zarr cache root.""" - from pyref.io.catalog_path import resolve_catalog_path from pyref.pyref import py_pyref_data_dir db = catalog_db.resolve() if catalog_db is not None else resolve_catalog_path() cache = os.environ.get("PYREF_CACHE_ROOT") if cache is None: - cache = str(Path(py_pyref_data_dir()).resolve() / ".cache") + cache = str(Path(py_pyref_data_dir()).resolve() / "cache") typer.echo(f"catalog_db: {db}") typer.echo(f"cache_root: {cache}") +def _scan_counts_from_catalog(df: pl.DataFrame) -> dict[int, int]: + if df.height == 0: + return {} + grouped = ( + df.group_by("scan_number") + .agg(pl.len().alias("n")) + .sort("scan_number") + .to_dicts() + ) + return {int(row["scan_number"]): int(row["n"]) for row in grouped} + + +def _disk_frame_keys(beamtime_path: Path) -> set[tuple[int, int]]: + out: set[tuple[int, int]] = set() + for path in discover_fits(beamtime_path, recursive=True): + parsed = parse_fits_stem(path.stem) + if parsed is None: + continue + out.add((int(parsed.scan_number), int(parsed.frame_number))) + return out + + +def _catalog_frame_keys(df: pl.DataFrame) -> set[tuple[int, int]]: + if df.height == 0: + return set() + rows = df.select("scan_number", "frame_number").to_dicts() + return {(int(r["scan_number"]), int(r["frame_number"])) for r in rows} + + +def _resolve_sync_targets( + *, + name: str | None, + latest: bool, + all_beamtimes: bool, + nas_root: Path | None, +) -> list[Path]: + from pyref.pyref import py_list_beamtimes + + selector_count = int(name is not None) + int(latest) + int(all_beamtimes) + if selector_count != 1: + msg = "select exactly one target: , --latest, or --all" + raise ValueError(msg) + cfg = load_config() + if name is not None: + return [resolve_beamtime_path(name, nas_root=nas_root, cfg=cfg)] + db = resolve_catalog_path() + rows = py_list_beamtimes(str(db)) + paths = [Path(path_str).resolve() for path_str, _ in rows if Path(path_str).is_dir()] + if latest: + if not paths: + msg = f"no cataloged beamtimes found in {db}" + raise FileNotFoundError(msg) + return [paths[0]] + return paths + + +@app.command("sync") +def catalog_sync( + name: str | None = typer.Argument( + None, + help="Beamtime folder name or path (mutually exclusive with --latest/--all).", + ), + latest: bool = typer.Option( + False, + "--latest", + help="Sync the most recently cataloged beamtime.", + ), + all_beamtimes: bool = typer.Option( + False, + "--all", + help="Sync every cataloged beamtime available on disk.", + ), + update: bool = typer.Option( + False, + "--update", + help="Backfill missing per-file header rows in header_values.", + ), + nas_root: Path | None = typer.Option( + None, + "--nas-root", + help="Override configured NAS root when resolving a beamtime name.", + ), + catalog_db: Path | None = typer.Option( + None, + "--catalog-db", + help="Set PYREF_CATALOG_DB for this run.", + ), + cache_root: Path | None = typer.Option( + None, + "--cache-root", + help="Set PYREF_CACHE_ROOT for this run.", + ), +) -> None: + """Audit catalog coverage per beamtime; optionally backfill missing header rows.""" + from pyref.pyref import ( + py_scan_from_catalog_for_beamtime, + py_sync_missing_headers_for_beamtime, + ) + + apply_catalog_env(catalog_db, cache_root) + db = catalog_db.resolve() if catalog_db is not None else resolve_catalog_path() + try: + targets = _resolve_sync_targets( + name=name, + latest=latest, + all_beamtimes=all_beamtimes, + nas_root=nas_root, + ) + except (FileNotFoundError, ValueError) as exc: + sys.stderr.write(f"error: {exc}\n") + raise typer.Exit(1) from exc + + if not targets: + typer.echo("no beamtime targets found") + return + + for beamtime in targets: + layout = beamtime_ingest_layout(beamtime) + layout_scan_counts = { + int(row["scan_number"]): int(row["files"]) for row in layout.get("scans", []) + } + disk_total = int(layout.get("total_files", 0)) + catalog_df = py_scan_from_catalog_for_beamtime(str(db), str(beamtime), None) + cat_scan_counts = _scan_counts_from_catalog(catalog_df) + cat_total = int(catalog_df.height) + + missing_scans = sorted(set(layout_scan_counts) - set(cat_scan_counts)) + missing_files_by_scan = { + scan: layout_scan_counts[scan] - cat_scan_counts.get(scan, 0) + for scan in sorted(layout_scan_counts) + if layout_scan_counts[scan] - cat_scan_counts.get(scan, 0) > 0 + } + disk_keys = _disk_frame_keys(beamtime) + cat_keys = _catalog_frame_keys(catalog_df) + missing_keys = sorted(disk_keys - cat_keys) + + typer.echo(f"beamtime: {beamtime}") + typer.echo(f" scans on disk: {len(layout_scan_counts)}") + typer.echo(f" scans in catalog: {len(cat_scan_counts)}") + if missing_scans: + typer.echo(f" missing scans: {', '.join(str(s) for s in missing_scans)}") + else: + typer.echo(" missing scans: none") + typer.echo(f" files on disk: {disk_total}") + typer.echo(f" files in catalog: {cat_total}") + typer.echo(f" missing files: {len(missing_keys)}") + if missing_files_by_scan: + summary = ", ".join( + f"{scan}:{count}" for scan, count in missing_files_by_scan.items() + ) + typer.echo(f" missing files by scan: {summary}") + + if update: + report = py_sync_missing_headers_for_beamtime(str(db), str(beamtime)) + typer.echo( + " header sync: " + f"checked={report['files_checked']} " + f"updated={report['files_updated']} " + f"inserted={report['header_rows_inserted']}", + ) + + @app.command("ingest") def catalog_ingest( name: str = typer.Argument(..., help="Beamtime folder name or path."), diff --git a/scripts/_ingest_profile.py b/python/pyref/ingest_profile.py similarity index 97% rename from scripts/_ingest_profile.py rename to python/pyref/ingest_profile.py index f476c82..a420ffa 100644 --- a/scripts/_ingest_profile.py +++ b/python/pyref/ingest_profile.py @@ -1,8 +1,8 @@ -"""Shared helpers for ingest profiling and benchmarking scripts. +"""Shared helpers for ingest profiling and benchmarking. Exposes a phase-aware progress collector around :func:`pyref.io.readers.ingest_beamtime` -so ``scripts/profile_beamtime_ingest.py`` and ``scripts/bench_ingest.py`` render the -same markdown table instead of diverging their timing logic. +so :mod:`pyref.cli.bench` and other callers render the same markdown table instead of +diverging their timing logic. """ from __future__ import annotations diff --git a/python/pyref/io/__init__.py b/python/pyref/io/__init__.py index c263937..ddc662a 100644 --- a/python/pyref/io/__init__.py +++ b/python/pyref/io/__init__.py @@ -57,6 +57,7 @@ BeamtimeEntriesView, apply_scan_overrides, beamtime_entries, + header_values_view, ingest_beamtime_with_rich_progress, list_beamtimes, naming_qc_from_frames, @@ -113,6 +114,7 @@ "get_image_filtered", "get_image_filtered_edges", "get_overrides", + "header_values_view", "ingest_beamtime", "ingest_beamtime_with_rich_progress", "list_beamtimes", diff --git a/python/pyref/io/beamtime.py b/python/pyref/io/beamtime.py index db3dcf2..d01eb85 100644 --- a/python/pyref/io/beamtime.py +++ b/python/pyref/io/beamtime.py @@ -367,6 +367,44 @@ def scan_from_catalog_for_beamtime( ) +def header_values_view( + *, + beamtime_path: FilePath | None = None, + catalog_path: FilePath | None = None, +) -> pl.DataFrame: + """ + Load merged frame/header rows. + + Uses ``frames``, ``header_cards``, and ``header_values`` as the source tables. + + Parameters + ---------- + beamtime_path : str or pathlib.Path, optional + Restrict rows to one beamtime root. When omitted, returns rows for all + beamtimes. + catalog_path : str or pathlib.Path, optional + Path to ``catalog.db``; default from :func:`resolve_catalog_path`. + + Returns + ------- + polars.DataFrame + Long-form frame/header rows with frame provenance, zarr keys, header name, + normalized header display name, and numeric header value. + """ + from pyref.pyref import py_header_values_view + + if catalog_path is not None: + db = Path(catalog_path).resolve() + else: + db = resolve_catalog_path() + beam = ( + str(_normalize_beamtime_path(beamtime_path)) + if beamtime_path is not None + else None + ) + return py_header_values_view(str(db), beam) + + def beamtime_entries( beamtime_path: FilePath, catalog_path: FilePath | None = None, @@ -878,6 +916,7 @@ def naming_qc_with_db_parse_flags( "BeamtimeEntriesView", "apply_scan_overrides", "beamtime_entries", + "header_values_view", "list_beamtimes", "naming_qc_from_frames", "naming_qc_with_db_parse_flags", diff --git a/python/pyref/io/catalog_path.py b/python/pyref/io/catalog_path.py index 8da6a07..f348b5b 100644 --- a/python/pyref/io/catalog_path.py +++ b/python/pyref/io/catalog_path.py @@ -4,13 +4,14 @@ The catalog is a single database shared across beamtimes. Its default location is ``$XDG_CONFIG_HOME/pyref/catalog.db`` when ``XDG_CONFIG_HOME`` is set, otherwise ``~/.config/pyref/catalog.db`` (Unix-like under the user home on all platforms). When -``PYREF_HOME`` is set, the default becomes ``/catalog.db``. The beamtime zarr -cache remains under the platform user data directory (see Rust ``pyref_data_dir``), not -next to this config path. +``PYREF_HOME`` is set, the default becomes ``/catalog.db``. Default zarr +storage uses the same config root as the catalog +(``/cache/``). See Rust ``pyref_config_dir`` / +``pyref_data_dir`` (aliases). Optional overrides (Rust IO layer): ``PYREF_CATALOG_DB`` forces the catalog file path; ``PYREF_CACHE_ROOT`` sets the parent directory of each ``/beamtime.zarr`` -tree (default remains ``/.cache/``). Parallel ingest reads +tree (default remains ``/cache/``). Parallel ingest reads ``PYREF_INGEST_WORKER_THREADS`` or ``PYREF_INGEST_RESOURCE_FRACTION`` when Python passes neither ``worker_threads`` nor ``resource_fraction`` to ``ingest_beamtime``. """ diff --git a/python/pyref/io/readers.py b/python/pyref/io/readers.py index 837f0a1..53abf6a 100644 --- a/python/pyref/io/readers.py +++ b/python/pyref/io/readers.py @@ -29,6 +29,15 @@ "CCD Theta", "Higher Order Suppressor", "EPU Polarization", + "EXPOSURE", + "Sample Name", + "Scan ID", + "Sample X", + "Sample Y", + "Sample Z", + "RINGCRNT", + "AI 3 Izero", + "Beam Current", ] REQUIRED_SCAN_COLUMNS = ( diff --git a/scripts/bench_ingest.py b/scripts/bench_ingest.py deleted file mode 100644 index 14f6caf..0000000 --- a/scripts/bench_ingest.py +++ /dev/null @@ -1,203 +0,0 @@ -r"""CI-friendly benchmark for ``pyref.catalog.ingest_beamtime``. - -Generates ``--scans`` scans of ``--frames-per-scan`` FITS files at -``--width``x``--height`` pixels under a temporary beamtime root, ingests them -into an isolated catalog + cache, and prints the same markdown timing table -used by ``scripts/profile_beamtime_ingest.py``. - -Because no real beamtime is required, this is safe for CI perf smoke tests and -local regression tracking. Typical usage from the repo root:: - - uv run python scripts/bench_ingest.py --scans 10 --frames-per-scan 10 \ - --width 1024 --height 1024 -""" - -from __future__ import annotations - -import argparse -import sys -import tempfile -import warnings -from pathlib import Path - -import numpy as np -from astropy.io import fits -from astropy.io.fits.verify import VerifyWarning - -warnings.filterwarnings("ignore", category=VerifyWarning) - -sys.path.insert(0, str(Path(__file__).resolve().parent)) - -from _ingest_profile import ( # noqa: E402 - isolated_catalog_env, - render_markdown_table, - run_ingest_with_profile, -) - -SYNTHETIC_SAMPLE_NAME = "synth" -BZERO_UNSIGNED_I16 = 32_768 - - -def _build_primary_header(scan_idx: int, frame_idx: int) -> fits.Header: - hdr = fits.Header() - hdr["SIMPLE"] = True - hdr["BITPIX"] = 16 - hdr["NAXIS"] = 0 - hdr["DATE"] = "2024-02-02T00:00:00" - hdr["Beamline Energy"] = 250.0 + float(scan_idx) - hdr["Sample Theta"] = 1.0 + float(frame_idx) * 0.01 - hdr["CCD Theta"] = 2.0 - hdr["EPU Polarization"] = 1.0 - hdr["Higher Order Suppressor"] = 0.0 - return hdr - - -def _build_image_hdu( - width: int, - height: int, - scan_idx: int, - frame_idx: int, -) -> fits.ImageHDU: - rng = np.random.default_rng(seed=scan_idx * 1_000_003 + frame_idx) - raw = rng.integers(low=0, high=1024, size=(height, width), dtype=np.int32) - data_i16 = (raw - BZERO_UNSIGNED_I16).astype(np.int16) - hdu = fits.ImageHDU(data=data_i16) - hdu.header["BZERO"] = BZERO_UNSIGNED_I16 - return hdu - - -def _write_synthetic_fits( - path: Path, - width: int, - height: int, - scan_idx: int, - frame_idx: int, -) -> None: - primary = fits.PrimaryHDU(header=_build_primary_header(scan_idx, frame_idx)) - image = _build_image_hdu(width, height, scan_idx, frame_idx) - hdul = fits.HDUList([primary, image]) - hdul.writeto(path, overwrite=True) - - -def build_synthetic_beamtime( - tmp_dir: Path, - scans: int, - frames_per_scan: int, - width: int, - height: int, -) -> Path: - """Generate ``scans * frames_per_scan`` ingestible FITS files under ``tmp_dir``. - - Parameters - ---------- - tmp_dir : pathlib.Path - Parent directory for the synthetic beamtime layout. - scans : int - Number of synthetic scans to generate. - frames_per_scan : int - Frames per scan. - width, height : int - Pixel dimensions written to NAXIS1 and NAXIS2. - - Returns - ------- - pathlib.Path - Absolute path of the beamtime root (its ``CCD`` subdirectory holds frames). - """ - beamtime = (tmp_dir / "beamtime").resolve() - ccd_dir = beamtime / "CCD" - ccd_dir.mkdir(parents=True, exist_ok=True) - for scan_idx in range(scans): - scan_number = scan_idx + 1 - for frame_idx in range(frames_per_scan): - frame_number = frame_idx + 1 - stem = f"{SYNTHETIC_SAMPLE_NAME}-{scan_number:05d}-{frame_number:05d}" - _write_synthetic_fits( - ccd_dir / f"{stem}.fits", - width, - height, - scan_idx, - frame_idx, - ) - return beamtime - - -def _parse_args() -> argparse.Namespace: - parser = argparse.ArgumentParser(description=__doc__) - parser.add_argument( - "--scans", - type=int, - default=10, - help="Number of synthetic scans.", - ) - parser.add_argument( - "--frames-per-scan", - type=int, - default=10, - help="Frames generated per synthetic scan.", - ) - parser.add_argument( - "--width", - type=int, - default=1024, - help="NAXIS1 for each synthetic frame.", - ) - parser.add_argument( - "--height", - type=int, - default=1024, - help="NAXIS2 for each synthetic frame.", - ) - return parser.parse_args() - - -def main() -> None: - """Build a synthetic beamtime, run ingest, and print a markdown timing report.""" - args = _parse_args() - if args.scans <= 0 or args.frames_per_scan <= 0: - msg = "--scans and --frames-per-scan must be positive integers" - raise SystemExit(msg) - if args.width <= 0 or args.height <= 0: - msg = "--width and --height must be positive integers" - raise SystemExit(msg) - - total_files = args.scans * args.frames_per_scan - - with tempfile.TemporaryDirectory(prefix="pyref-bench-fixture-") as fixture_dir: - beamtime = build_synthetic_beamtime( - Path(fixture_dir), - args.scans, - args.frames_per_scan, - args.width, - args.height, - ) - with isolated_catalog_env(): - _catalog_path, profile = run_ingest_with_profile(beamtime) - - print( - f"Synthetic beamtime: {args.scans} scans x {args.frames_per_scan} frames " - f"({args.width}x{args.height} px) => {total_files} files" - ) - print(f"FITS files (layout): {profile.layout_files}") - cr = profile.counts["catalog_row"] - fc = profile.counts["file_complete"] - print(f"catalog_row events: {cr} file_complete: {fc}") - first_cr = profile.first_catalog_row_seconds - first_fc = profile.first_file_complete_seconds - if first_cr is not None: - print(f"Time to first catalog_row: {first_cr:.3f} s") - if first_fc is not None: - print(f"Time to first file_complete: {first_fc:.3f} s") - print() - print(render_markdown_table(profile)) - if profile.wall_seconds > 0 and total_files > 0: - fps = total_files / profile.wall_seconds - wall_s = profile.wall_seconds - print( - f"files_per_second: {fps:.2f} " - f"({total_files} files in {wall_s:.3f} s)" - ) - - -if __name__ == "__main__": - main() diff --git a/scripts/profile_beamtime_ingest.py b/scripts/profile_beamtime_ingest.py deleted file mode 100644 index 338663f..0000000 --- a/scripts/profile_beamtime_ingest.py +++ /dev/null @@ -1,79 +0,0 @@ -"""Wall-clock ingest breakdown via Rust progress events (no extra instrumentation). - -Run from repo root:: - - uv run python scripts/profile_beamtime_ingest.py --beamtime "/path/to/beamtime" - -Uses isolated ``PYREF_CATALOG_DB`` and ``PYREF_CACHE_ROOT`` under a temporary directory -unless ``--use-default-paths`` is passed. -""" - -from __future__ import annotations - -import argparse -import sys -from pathlib import Path - -sys.path.insert(0, str(Path(__file__).resolve().parent)) - -from _ingest_profile import ( - format_seconds, - isolated_catalog_env, - render_markdown_table, - run_ingest_with_profile, -) - - -def main() -> None: - """Print a markdown table of ingest phase wall times for a real beamtime.""" - parser = argparse.ArgumentParser(description=__doc__) - parser.add_argument( - "--beamtime", - type=Path, - required=True, - help="Beamtime root directory (e.g. ALS date folder containing CCD data).", - ) - parser.add_argument( - "--use-default-paths", - action="store_true", - help=( - "Do not override PYREF_CATALOG_DB / PYREF_CACHE_ROOT (writes real catalog)." - ), - ) - args = parser.parse_args() - beam = args.beamtime.resolve() - - with isolated_catalog_env( - enabled=not args.use_default_paths, - prefix="pyref-ingest-profile-", - ): - _catalog_path, profile = run_ingest_with_profile(beam) - - print(f"Beamtime: {beam}") - print(f"FITS files (layout): {profile.layout_files}") - if profile.layout_files == 0: - print( - "Note: 0 files often means no ingestible `.fits` " - "(stems starting with `_` are skipped) or unrecognized layout." - ) - cr = profile.counts["catalog_row"] - fc = profile.counts["file_complete"] - print(f"catalog_row events: {cr} file_complete: {fc}") - first_cr = profile.first_catalog_row_seconds - first_fc = profile.first_file_complete_seconds - if first_cr is not None: - print(f"Time to first catalog_row: {format_seconds(first_cr)} s") - if first_fc is not None: - print(f"Time to first file_complete: {format_seconds(first_fc)} s") - print() - print(render_markdown_table(profile)) - print( - "Notes: Python does almost no work during ingest (Rust holds the GIL only for " - "short callbacks). Slow `headers` on network mounts is mostly FITS open/read " - "from the volume. `catalog` is single-writer SQLite. `zarr` re-reads each file " - "for pixels after catalog inserts." - ) - - -if __name__ == "__main__": - main() diff --git a/src/bin/migrate_zarr_3d.rs b/src/bin/migrate_zarr_3d.rs index 053fc36..6ebb059 100644 --- a/src/bin/migrate_zarr_3d.rs +++ b/src/bin/migrate_zarr_3d.rs @@ -10,13 +10,19 @@ use diesel::prelude::*; use pyref::catalog::db; use pyref::catalog::paths; use pyref::catalog::zarr_write::{ - prepare_shape_scan_bucket_arrays, scan_raw_array_path, shape_bucket_key, ShapeScanBucketSpec, - ZARR_U16_ZSTD_LEVEL, + prepare_scan_zarr_arrays, scan_raw_array_path, ScanZarrSpec, ZARR_U16_ZSTD_LEVEL, }; use pyref::schema::{beamtimes, files, frames}; use zarrs::array::{Array, ArraySubset}; use zarrs::storage::{ReadableWritableListableStorage, ReadableWritableListableStorageTraits}; +type LegacyFramePixels = ( + Array, + usize, + usize, +); +type LegacyFrameLoad = Option; + #[derive(Debug, Clone)] struct CliOptions { db_path: Option, @@ -43,7 +49,6 @@ struct FramePlan { frame_id: i32, group_key: i32, frame_index: i32, - shape_bucket: String, bucket_frame_index: i32, height: usize, width: usize, @@ -118,14 +123,7 @@ fn load_legacy_frame( store: &ReadableWritableListableStorage, group_key: i32, frame_index: i32, -) -> Result< - Option<( - Array, - usize, - usize, - )>, - String, -> { +) -> Result { let path = format!("/{group_key}/{frame_index:05}/raw"); let Ok(array) = Array::open(store.clone(), &path) else { return Ok(None); @@ -206,34 +204,32 @@ fn migrate_beamtime( return Ok(()); } - let mut specs_by_combo: HashMap<(String, i32), ShapeScanBucketSpec> = HashMap::new(); + let mut specs_by_scan: HashMap = HashMap::new(); let mut plans: Vec = Vec::new(); - let mut next_idx: HashMap<(String, i32), i32> = HashMap::new(); + let mut next_idx: HashMap = HashMap::new(); for row in &frame_rows { let Some((_array, h, w)) = load_legacy_frame(&store, row.zarr_group_key, row.zarr_frame_index)? else { continue; }; - let bucket = shape_bucket_key(h, w); let gk = row.zarr_group_key; - let combo = (bucket.clone(), gk); - let idx = next_idx.entry(combo.clone()).or_insert(0); + let idx = next_idx.entry(gk).or_insert(0); plans.push(FramePlan { frame_id: row.id, group_key: gk, frame_index: row.zarr_frame_index, - shape_bucket: bucket.clone(), bucket_frame_index: *idx, height: h, width: w, }); *idx += 1; - specs_by_combo - .entry(combo) - .and_modify(|s| s.frames += 1) - .or_insert(ShapeScanBucketSpec { - shape_bucket: bucket, + specs_by_scan + .entry(gk) + .and_modify(|s| { + s.frames += 1; + }) + .or_insert(ScanZarrSpec { scan_number: gk, height: h, width: w, @@ -244,12 +240,10 @@ fn migrate_beamtime( println!("beamtime {}: no legacy frames found", beamtime.id); return Ok(()); } - let mut specs: Vec = specs_by_combo.into_values().collect(); - specs.sort_by(|a, b| { - (a.shape_bucket.as_str(), a.scan_number).cmp(&(b.shape_bucket.as_str(), b.scan_number)) - }); + let mut specs: Vec = specs_by_scan.into_values().collect(); + specs.sort_by(|a, b| a.scan_number.cmp(&b.scan_number)); if !options.dry_run { - prepare_shape_scan_bucket_arrays(&store, &specs).map_err(|e| e.to_string())?; + prepare_scan_zarr_arrays(&store, &specs).map_err(|e| e.to_string())?; } let mut migrated_frames = 0usize; @@ -326,7 +320,7 @@ fn migrate_beamtime( }; let legacy = retrieve_legacy_pixels_i32(&legacy_array, plan.height, plan.width)?; let converted: Vec = legacy.into_iter().map(|v| (v as i16) as u16).collect(); - let bucket_path = scan_raw_array_path(&plan.shape_bucket, plan.group_key); + let bucket_path = scan_raw_array_path(plan.group_key); let bucket_array = Array::open(store.clone(), &bucket_path).map_err(|e| e.to_string())?; let subset = ArraySubset::new_with_start_shape( vec![plan.bucket_frame_index as u64, 0_u64, 0_u64], @@ -337,10 +331,7 @@ fn migrate_beamtime( .store_array_subset(&subset, converted) .map_err(|e| e.to_string())?; diesel::update(frames::table.filter(frames::id.eq(plan.frame_id))) - .set(( - frames::zarr_shape_bucket.eq(Some(plan.shape_bucket.as_str())), - frames::zarr_bucket_frame_index.eq(Some(plan.bucket_frame_index)), - )) + .set(frames::zarr_bucket_frame_index.eq(Some(plan.bucket_frame_index))) .execute(conn) .map_err(|e| e.to_string())?; if !options.keep_legacy { @@ -355,7 +346,7 @@ fn migrate_beamtime( migrated_frames += 1; } println!( - "beamtime {}: migrated {} frames into {} per-scan shape bucket arrays", + "beamtime {}: migrated {} frames into {} per-scan 3D arrays", beamtime.id, migrated_frames, specs.len(), diff --git a/src/catalog/db.rs b/src/catalog/db.rs index dcb0932..cab8319 100644 --- a/src/catalog/db.rs +++ b/src/catalog/db.rs @@ -1,4 +1,5 @@ //! Diesel SQLite connection: foreign keys, embedded migrations. +//! WAL + busy timeout reduce lock contention when a CLI ingest and the file watcher overlap. use diesel::connection::SimpleConnection; use diesel::sqlite::SqliteConnection; @@ -26,5 +27,7 @@ pub fn establish_connection(database_url: &Path) -> Result { .map_err(CatalogError::Diesel)?; conn.run_pending_migrations(MIGRATIONS) .map_err(|e| CatalogError::Migrations(format!("{e:?}")))?; + conn.batch_execute("PRAGMA journal_mode=WAL; PRAGMA busy_timeout=30000;") + .map_err(CatalogError::Diesel)?; Ok(conn) } diff --git a/src/catalog/ingest.rs b/src/catalog/ingest.rs index 2854a61..d31fe1e 100644 --- a/src/catalog/ingest.rs +++ b/src/catalog/ingest.rs @@ -8,41 +8,49 @@ //! and re-inserts the `beamtimes` row, cascading away stale scan/file //! rows before inserting fresh data. //! +//! Future work: true incremental ingest (diff discovered paths vs catalog, extend per-scan zarr +//! arrays) would pair with WAL mode for safe concurrent watcher + CLI use; the `incremental` +//! parameter is reserved for that design. +//! //! SQLite allows one writer at a time. Ingest uses a single [`diesel::SqliteConnection`] for all //! catalog mutations in this process. After `fork` or when spawning a subprocess, open a new //! connection in the child; do not share a connection across process boundaries. //! //! FITS header reads and pixel reads for zarr use a [`rayon::ThreadPool`] sized by //! [`crate::catalog::IngestParallelism`] (after [`IngestParallelism::from_options_or_env`]). The -//! headers phase parallelizes **per file** (a flat [`rayon::prelude::ParallelIterator`] over every -//! discovered FITS path) so worker utilization stays even when scan sizes are skewed. Diesel -//! transactions and [`super::zarr_write::write_frame_raw`] run on the calling thread in global row -//! order so catalog rows and zarr datasets stay aligned. - -use std::collections::{HashMap, HashSet}; +//! headers and zarr reader phases schedule files with **water-fill** across scans sorted by +//! ascending file count: each scan gets up to `min(remaining_files, pool_budget)` concurrent slots, +//! and when a short scan finishes, [`super::scan_scheduler::WaterFillQueues`] reallocates workers +//! to longer scans. Resulting catalog rows are still sorted by `(scan_number, frame_number, path)` +//! before SQLite and zarr writes. Diesel transactions and [`super::zarr_write::write_scan_frame_raw`] +//! run on the calling thread in that sorted row order so catalog rows and zarr datasets stay aligned. + +use std::collections::{BTreeMap, HashMap, HashSet}; use std::path::{Path, PathBuf}; use std::sync::atomic::{AtomicBool, Ordering}; +use std::sync::{Arc, Mutex}; use diesel::prelude::*; use diesel::OptionalExtension; use ndarray::Array2; -use rayon::prelude::*; use rayon::ThreadPoolBuilder; use crate::io::raw_pixels::read_bitpix16_be_bytes; use crate::io::BtIngestRow; use crate::loader::read_fits_headers_only_row; -use crate::schema::{beamtimes, file_tags, files, frames, samples, scans, tags}; +use crate::schema::{ + beamtimes, file_tags, files, frames, header_cards, header_values, samples, scans, tags, +}; use super::discover_paths_for_catalog_ingest; use super::ingest_progress::{ - layout_and_groups_from_paths, BeamtimeIngestLayout, IngestPhase, IngestProgress, - IngestProgressSink, + layout_and_groups_from_paths, partition_paths_by_scan, BeamtimeIngestLayout, IngestPhase, + IngestProgress, IngestProgressSink, }; use super::parallelism::IngestParallelism; +use super::scan_scheduler::{SharedWaterFill, WaterFillQueues}; use super::zarr_write::{ - open_zarr_store, prepare_shape_scan_bucket_arrays, shape_bucket_key, - write_scan_shape_bucket_frame_raw, ShapeScanBucketSpec, + open_zarr_store, prepare_scan_zarr_arrays, write_scan_frame_raw, ScanZarrSpec, }; use super::{db, paths, CatalogError, Result}; @@ -181,56 +189,66 @@ pub const DEFAULT_INGEST_HEADER_ITEMS: &[&str] = &[ #[derive(Debug, Clone, PartialEq, Eq)] struct FrameZarrAssignment { - shape_bucket: String, scan_number: i32, bucket_frame_index: i32, } +fn row_index_groups_by_scan(rows: &[BtIngestRow]) -> Vec<(i32, Vec)> { + let mut by_scan: BTreeMap> = BTreeMap::new(); + for (i, r) in rows.iter().enumerate() { + by_scan.entry(r.scan_number as i32).or_default().push(i); + } + let mut groups: Vec<(i32, Vec)> = by_scan.into_iter().collect(); + groups.sort_by(|a, b| a.1.len().cmp(&b.1.len()).then_with(|| a.0.cmp(&b.0))); + groups +} + fn build_frame_zarr_plan( rows: &[BtIngestRow], -) -> (Vec, Vec) { - let mut combo_counts: HashMap<(String, i32), usize> = HashMap::new(); - let mut combo_dims: HashMap<(String, i32), (usize, usize)> = HashMap::new(); +) -> Result<(Vec, Vec)> { + let mut counts: HashMap = HashMap::new(); + let mut dims: HashMap = HashMap::new(); for row in rows { - let height = row.naxis2 as usize; - let width = row.naxis1 as usize; - let bucket = shape_bucket_key(height, width); - let scan_number = row.scan_number as i32; - let key = (bucket.clone(), scan_number); - *combo_counts.entry(key.clone()).or_insert(0) += 1; - combo_dims.entry(key).or_insert((height, width)); + let sn = row.scan_number as i32; + *counts.entry(sn).or_insert(0) += 1; + let hw = (row.naxis2 as usize, row.naxis1 as usize); + if let Some(&existing) = dims.get(&sn) { + if existing != hw { + return Err(CatalogError::Validation(format!( + "scan {sn} has mixed image shapes {existing:?} vs {hw:?}: {}", + row.file_path + ))); + } + } else { + dims.insert(sn, hw); + } } - let mut combos: Vec<(String, i32)> = combo_counts.keys().cloned().collect(); - combos.sort_by(|a, b| (a.0.as_str(), a.1).cmp(&(b.0.as_str(), b.1))); - let specs: Vec = combos + let mut scan_numbers: Vec = counts.keys().copied().collect(); + scan_numbers.sort_unstable(); + let specs: Vec = scan_numbers .iter() - .map(|(bucket, scan_number)| { - let key = &(bucket.clone(), *scan_number); - let (height, width) = combo_dims[key]; - ShapeScanBucketSpec { - shape_bucket: bucket.clone(), - scan_number: *scan_number, + .map(|&sn| { + let (height, width) = dims[&sn]; + ScanZarrSpec { + scan_number: sn, height, width, - frames: combo_counts[key], + frames: counts[&sn], } }) .collect(); - let mut next_idx: HashMap<(String, i32), usize> = HashMap::new(); + let mut next_idx: HashMap = HashMap::new(); let mut assignments: Vec = Vec::with_capacity(rows.len()); for row in rows { - let bucket = shape_bucket_key(row.naxis2 as usize, row.naxis1 as usize); let scan_number = row.scan_number as i32; - let key = (bucket.clone(), scan_number); - let idx = next_idx.entry(key).or_insert(0); + let idx = next_idx.entry(scan_number).or_insert(0); assignments.push(FrameZarrAssignment { - shape_bucket: bucket, scan_number, bucket_frame_index: *idx as i32, }); *idx += 1; } - (assignments, specs) + Ok((assignments, specs)) } fn read_image_u16(row: &BtIngestRow) -> Result> { @@ -268,8 +286,8 @@ fn beamtime_date_label(beamtime_dir: &Path) -> String { .unwrap_or_else(|| "unknown".into()) } -/// Emits `Phase(Headers)` then reads every FITS header in parallel on -/// `ctx.pool` (flat per-file iteration), returning rows sorted by +/// Emits `Phase(Headers)` then reads every FITS header on `ctx.pool` using +/// water-fill scheduling across scans (ascending file count), returning rows sorted by /// `(scan_number, frame_number, file_path)`. fn run_headers_phase( ctx: &IngestContext<'_>, @@ -281,15 +299,48 @@ fn run_headers_phase( phase: IngestPhase::Headers, }); } - let mut rows: Vec = ctx - .pool - .install(|| { - paths - .par_iter() - .map(|p| read_fits_headers_only_row(p.clone(), header_items)) - .collect::, _>>() - }) - .map_err(CatalogError::FitsReadFailed)?; + let groups = partition_paths_by_scan(paths); + let n_workers = ctx.pool.current_num_threads().max(1); + let shared = Arc::new(SharedWaterFill::new(WaterFillQueues::new(groups))); + shared.set_pool_size(n_workers); + let results = Arc::new(Mutex::new(Vec::::new())); + let first_err: Arc>> = Arc::new(Mutex::new(None)); + let cancel = ctx.cancel; + ctx.pool.install(|| { + rayon::scope(|s| { + for _ in 0..n_workers { + let shared = Arc::clone(&shared); + let results = Arc::clone(&results); + let first_err = Arc::clone(&first_err); + s.spawn(move |_| loop { + if first_err.lock().unwrap().is_some() { + break; + } + let job = shared.wait_pop(cancel); + let Some((path, gi)) = job else { + break; + }; + match read_fits_headers_only_row(path, header_items) { + Ok(row) => { + results.lock().unwrap().push(row); + } + Err(e) => { + *first_err.lock().unwrap() = Some(e); + break; + } + } + shared.complete_and_notify(gi); + }); + } + }); + }); + if let Some(e) = first_err.lock().unwrap().take() { + return Err(CatalogError::FitsReadFailed(e)); + } + let mut rows = Arc::try_unwrap(results) + .map_err(|_| CatalogError::Validation("header ingest results arc".into()))? + .into_inner() + .map_err(|_| CatalogError::Validation("header ingest results mutex".into()))?; rows.sort_by(|a, b| { (a.scan_number, a.frame_number, a.file_path.as_str()).cmp(&( b.scan_number, @@ -316,6 +367,22 @@ fn build_scan_first_sample(rows: &[BtIngestRow]) -> HashMap { scan_first_sample } +fn load_header_card_cache(conn: &mut diesel::SqliteConnection) -> Result> { + let rows: Vec<(String, i32)> = header_cards::table + .select((header_cards::name, header_cards::id)) + .load(conn) + .map_err(CatalogError::Diesel)?; + Ok(rows.into_iter().collect()) +} + +fn normalize_header_display_name(card_name: &str) -> String { + card_name + .split_whitespace() + .map(|part| part.to_ascii_lowercase().replace("sample", "sam")) + .collect::>() + .join("_") +} + /// Inserts one row per unique sample name under one transaction and returns /// the populated `name -> sample_id` cache. fn insert_samples( @@ -373,6 +440,7 @@ fn insert_catalog_batch( end: usize, sample_cache: &HashMap, scan_cache: &mut HashMap, + header_card_cache: &mut HashMap, scan_first_sample: &HashMap, catalog_scan_done: &mut HashMap, global_total: u32, @@ -481,42 +549,51 @@ fn insert_catalog_batch( } } - let sx = row.sample_x.unwrap_or(0.0); - let sy = row.sample_y.unwrap_or(0.0); - let sz = row.sample_z.unwrap_or(0.0); - let st = row.sample_theta.unwrap_or(0.0); - let ccd = row.ccd_theta.unwrap_or(0.0); - let epu = row.epu_polarization.unwrap_or(0.0); - let exp = row.exposure.unwrap_or(0.0); - let be = row.beamline_energy.unwrap_or(0.0); - let ring = row.ring_current.unwrap_or(0.0); - let ai3 = row.ai3_izero.unwrap_or(0.0); - let bcm = row.beam_current.unwrap_or(0.0); - - diesel::insert_into(frames::table) + let frame_id: i32 = diesel::insert_into(frames::table) .values(( frames::scan_id.eq(scan_id), frames::file_id.eq(file_id), frames::frame_number.eq(row.frame_number as i32), frames::zarr_group_key.eq(scan_no), frames::zarr_frame_index.eq(row.frame_number as i32), - frames::zarr_shape_bucket.eq(Some(zarr_assignment.shape_bucket.as_str())), frames::zarr_bucket_frame_index.eq(Some(zarr_assignment.bucket_frame_index)), frames::acquired_at.eq(row.date_iso.clone()), - frames::sample_x.eq(sx), - frames::sample_y.eq(sy), - frames::sample_z.eq(sz), - frames::sample_theta.eq(st), - frames::ccd_theta.eq(ccd), - frames::beamline_energy.eq(be), - frames::epu_polarization.eq(epu), - frames::exposure.eq(exp), - frames::ring_current.eq(ring), - frames::ai3_izero.eq(ai3), - frames::beam_current.eq(bcm), frames::quality_flag.eq(None::), )) - .execute(conn)?; + .returning(frames::id) + .get_result(conn)?; + + for (card_name, value) in &row.non_promoted_header_values { + let header_card_id = if let Some(id) = header_card_cache.get(card_name.as_str()) { + *id + } else { + let existing: Option = header_cards::table + .filter(header_cards::name.eq(card_name.as_str())) + .select(header_cards::id) + .first(conn) + .optional()?; + let id = match existing { + Some(id) => id, + None => diesel::insert_into(header_cards::table) + .values(( + header_cards::name.eq(card_name.as_str()), + header_cards::display_name + .eq(normalize_header_display_name(card_name.as_str())), + )) + .returning(header_cards::id) + .get_result(conn)?, + }; + header_card_cache.insert(card_name.clone(), id); + id + }; + diesel::insert_into(header_values::table) + .values(( + header_values::frame_id.eq(frame_id), + header_values::header_card_id.eq(header_card_id), + header_values::value.eq(*value), + )) + .execute(conn)?; + } if let Some(sink) = ctx.progress { let sn = row.scan_number as i32; @@ -560,6 +637,7 @@ fn run_catalog_phase( let batches = plan_catalog_batches(rows); let global_total = rows.len() as u32; let mut scan_cache: HashMap = HashMap::new(); + let mut header_card_cache = load_header_card_cache(conn)?; let mut catalog_scan_done: HashMap = HashMap::new(); for (start, end) in batches { @@ -572,6 +650,7 @@ fn run_catalog_phase( end, &sample_cache, &mut scan_cache, + &mut header_card_cache, &scan_first_sample, &mut catalog_scan_done, global_total, @@ -582,13 +661,13 @@ fn run_catalog_phase( } /// Emits `Phase(Zarr)` then `FileComplete` per row. Uses a bounded crossbeam -/// channel between a single reader pool task (running `ctx.pool` in parallel) -/// and the calling-thread writer so the zstore sees writes in completion order. +/// channel between water-fill reader workers on `ctx.pool` and the calling-thread +/// writer so the zstore sees writes in completion order. fn run_zarr_phase( ctx: &IngestContext<'_>, rows: &[BtIngestRow], zarr_assignments: &[FrameZarrAssignment], - bucket_specs: &[ShapeScanBucketSpec], + scan_zarr_specs: &[ScanZarrSpec], zstore: &zarrs::storage::ReadableWritableListableStorage, ) -> Result<()> { if let Some(sink) = ctx.progress { @@ -600,7 +679,7 @@ fn run_zarr_phase( let n_workers = ctx.pool.current_num_threads(); let channel_cap = (n_workers.saturating_mul(2)).max(4); let (tx, rx) = crossbeam_channel::bounded::)>>(channel_cap); - prepare_shape_scan_bucket_arrays(zstore, bucket_specs) + prepare_scan_zarr_arrays(zstore, scan_zarr_specs) .map_err(|e| CatalogError::Validation(e.to_string()))?; let stop = AtomicBool::new(false); @@ -613,25 +692,40 @@ fn run_zarr_phase( let pool_ref: &rayon::ThreadPool = ctx.pool; let cancel_ref = ctx.cancel; let stop_ref = &stop; - - let reader_handle = s.spawn(move || { - pool_ref.install(move || { - rows_ref - .par_iter() - .enumerate() - .for_each_with(tx, |tx_c, (row_i, row)| { - if stop_ref.load(Ordering::Relaxed) { - return; - } - if cancel_ref.is_some_and(|c| c.load(Ordering::Relaxed)) { - return; - } - let item = read_image_u16(row).map(|img| (row_i, img)); - if tx_c.send(item).is_err() { - stop_ref.store(true, Ordering::Relaxed); + let n_readers = n_workers.max(1); + let zarr_shared = Arc::new(SharedWaterFill::new(WaterFillQueues::new( + row_index_groups_by_scan(rows_ref), + ))); + zarr_shared.set_pool_size(n_readers); + + let reader_handle = s.spawn({ + let zarr_shared = zarr_shared; + let tx = tx; + move || { + pool_ref.install(|| { + rayon::scope(|spw| { + for _ in 0..n_readers { + let zarr_shared = Arc::clone(&zarr_shared); + let tx_c = tx.clone(); + spw.spawn(move |_| loop { + if stop_ref.load(Ordering::Relaxed) { + return; + } + let job = zarr_shared.wait_pop(cancel_ref); + let Some((row_i, gi)) = job else { + break; + }; + let row = &rows_ref[row_i]; + let item = read_image_u16(row).map(|img| (row_i, img)); + if tx_c.send(item).is_err() { + stop_ref.store(true, Ordering::Relaxed); + } + zarr_shared.complete_and_notify(gi); + }); } }); - }); + }); + } }); let mut write_err: Option = None; @@ -643,9 +737,8 @@ fn run_zarr_phase( let (row_i, img) = item?; let row = &rows[row_i]; let zarr_assignment = &zarr_assignments[row_i]; - write_scan_shape_bucket_frame_raw( + write_scan_frame_raw( zstore, - &zarr_assignment.shape_bucket, zarr_assignment.scan_number, zarr_assignment.bucket_frame_index as usize, &img, @@ -920,13 +1013,13 @@ fn ingest_beamtime_inner( }; let rows = run_headers_phase(&ctx, &paths_only, header_items)?; - let (zarr_assignments, bucket_specs) = build_frame_zarr_plan(&rows); + let (zarr_assignments, scan_zarr_specs) = build_frame_zarr_plan(&rows)?; let zstore = open_zarr_store(&zarr_path).map_err(|e| CatalogError::Validation(e.to_string()))?; run_catalog_phase(&ctx, &mut conn, &rows, &zarr_assignments)?; - run_zarr_phase(&ctx, &rows, &zarr_assignments, &bucket_specs, &zstore)?; + run_zarr_phase(&ctx, &rows, &zarr_assignments, &scan_zarr_specs, &zstore)?; let _ = incremental; Ok(db_path) @@ -1039,6 +1132,19 @@ mod tests { Ok((s, sc, f)) } + fn count_header_rows(db_path: &std::path::Path) -> Result<(i64, i64)> { + let mut conn = db::establish_connection(db_path)?; + let cards: i64 = header_cards::table + .count() + .get_result(&mut conn) + .map_err(CatalogError::Diesel)?; + let values: i64 = header_values::table + .count() + .get_result(&mut conn) + .map_err(CatalogError::Diesel)?; + Ok((cards, values)) + } + fn make_row(scan_number: i64, frame_number: i64) -> BtIngestRow { BtIngestRow { file_path: format!("/tmp/{scan_number}_{frame_number}.fits"), @@ -1064,6 +1170,7 @@ mod tests { ai3_izero: None, beam_current: None, date_iso: None, + non_promoted_header_values: Vec::new(), } } @@ -1142,6 +1249,8 @@ mod tests { .count() .get_result(&mut conn) .expect("count frames"); + let (header_card_count, header_value_count) = + count_header_rows(&db_path).expect("count header rows after ingest"); assert_eq!( counts, @@ -1152,6 +1261,14 @@ mod tests { frame_count, 1, "batched ingest must produce exactly 1 frame" ); + assert!( + header_card_count > 0, + "ingest must register discovered FITS header cards" + ); + assert!( + header_value_count > 0, + "ingest must persist non-promoted FITS header values" + ); } #[test] @@ -1248,19 +1365,12 @@ mod tests { ); let mut conn = db::establish_connection(&db_path).expect("open catalog db"); - let shape_bucket: Option = frames::table - .select(frames::zarr_shape_bucket) - .first(&mut conn) - .expect("select shape bucket for only cataloged frame"); - let shape_bucket = shape_bucket.expect("zarr shape bucket should be set"); let scan_no: i32 = files::table .select(files::scan_number) .first(&mut conn) .expect("select scan of only cataloged file"); let raw_path = zarr_root .join("images") - .join("by_shape") - .join(&shape_bucket) .join("scans") .join(scan_no.to_string()) .join("raw"); diff --git a/src/catalog/mod.rs b/src/catalog/mod.rs index 373f887..e83a80e 100644 --- a/src/catalog/mod.rs +++ b/src/catalog/mod.rs @@ -1,5 +1,3 @@ -#![cfg(feature = "catalog")] - mod beamspot_qc; mod beamtime_index; pub mod db; @@ -12,6 +10,7 @@ mod parallelism; pub mod paths; mod query; mod reflectivity_profile; +mod scan_scheduler; pub mod zarr_write; #[cfg(feature = "watch")] @@ -39,11 +38,12 @@ pub use ingest_progress::{ pub use layout::{detect_beamtime_layout, discover_fits_for_layout, BeamtimeLayout}; pub use parallelism::IngestParallelism; pub use query::{ - catalog_file_count, get_overrides, get_scan_point_uid_by_source_path, list_beamtime_entries, - list_beamtime_entries_v2, list_beamtimes_from_catalog, query_files, query_scan_points, - rename_file_in_catalog, scan_from_catalog, scan_from_catalog_for_beamtime, set_override, - set_scan_type_for_beamtime_scan, update_beamspot, update_beamspot_scan_point, BeamtimeEntries, - CatalogFilter, FileRow, + catalog_file_count, get_overrides, get_scan_point_uid_by_source_path, header_values_view, + list_beamtime_entries, list_beamtime_entries_v2, list_beamtimes_from_catalog, query_files, + query_scan_points, rename_file_in_catalog, scan_from_catalog, scan_from_catalog_for_beamtime, + set_override, set_scan_type_for_beamtime_scan, sync_missing_headers_for_beamtime, + update_beamspot, update_beamspot_scan_point, BeamtimeEntries, CatalogFilter, FileRow, + HeaderSyncReport, }; pub use reflectivity_profile::{ classify_scan_type, segment_reflectivity_profiles, ProfileSegment, ReflectivityScanType, diff --git a/src/catalog/models.rs b/src/catalog/models.rs index 5d02ce2..2f801d2 100644 --- a/src/catalog/models.rs +++ b/src/catalog/models.rs @@ -14,20 +14,8 @@ pub struct FrameDb { pub frame_number: i32, pub zarr_group_key: i32, pub zarr_frame_index: i32, - pub zarr_shape_bucket: Option, pub zarr_bucket_frame_index: Option, pub acquired_at: Option, - pub sample_x: f64, - pub sample_y: f64, - pub sample_z: f64, - pub sample_theta: f64, - pub ccd_theta: f64, - pub beamline_energy: f64, - pub epu_polarization: f64, - pub exposure: f64, - pub ring_current: f64, - pub ai3_izero: f64, - pub beam_current: f64, pub quality_flag: Option, } diff --git a/src/catalog/parallelism.rs b/src/catalog/parallelism.rs index 81f6938..2c77804 100644 --- a/src/catalog/parallelism.rs +++ b/src/catalog/parallelism.rs @@ -75,7 +75,7 @@ impl IngestParallelism { let n = ((avail as f64) * f).floor() as usize; return Ok(n.max(1)); } - Ok(avail.max(1).min(8)) + Ok(avail.clamp(1, 8)) } } diff --git a/src/catalog/paths.rs b/src/catalog/paths.rs index 10fcf39..961295f 100644 --- a/src/catalog/paths.rs +++ b/src/catalog/paths.rs @@ -1,8 +1,9 @@ //! Catalog and zarr paths. //! -//! Default ``catalog.db`` lives under a Unix-like config tree in the user home on all platforms: -//! ``$XDG_CONFIG_HOME/pyref`` when ``XDG_CONFIG_HOME`` is set, otherwise ``~/.config/pyref`` -//! (e.g. ``C:\\Users\\name\\.config\\pyref`` on Windows). +//! Default ``catalog.db`` and zarr cache live under ``~/.config/pyref`` on macOS (``XDG_CONFIG_HOME`` +//! is not used for the default tree, so Application Support cannot hijack the location). On Linux +//! and Windows, ``$XDG_CONFIG_HOME/pyref`` is used when ``XDG_CONFIG_HOME`` is set; otherwise +//! ``~/.config/pyref`` (e.g. ``C:\\Users\\name\\.config\\pyref`` on Windows). //! //! Overrides (optional, for ``set-catalog`` / ``set-cache`` style workflows): //! @@ -11,7 +12,7 @@ //! - ``PYREF_HOME``: directory used as the catalog parent when ``PYREF_CATALOG_DB`` is unset //! (typically tests; catalog path is ``/catalog.db``). //! - ``PYREF_CACHE_ROOT``: directory under which each beamtime gets ``/beamtime.zarr``. -//! When unset, zarr uses ``/.cache//beamtime.zarr``. +//! When unset, zarr uses ``/cache//beamtime.zarr``. use sha2::{Digest, Sha256}; use std::fs; @@ -21,14 +22,14 @@ use super::{CatalogError, Result}; const ENV_CATALOG_DB: &str = "PYREF_CATALOG_DB"; const ENV_CACHE_ROOT: &str = "PYREF_CACHE_ROOT"; +#[cfg(not(target_os = "macos"))] const ENV_XDG_CONFIG_HOME: &str = "XDG_CONFIG_HOME"; -/// Root directory for ``.cache//beamtime.zarr`` (not the catalog file). -/// -/// When the environment variable ``PYREF_HOME`` is set, returns that path (used in tests). -/// Otherwise returns ``/pyref`` from the ``directories`` crate (e.g. macOS -/// ``~/Library/Application Support/pyref``). -pub fn pyref_data_dir() -> Result { +/// User config and local cache root: same tree as ``default_catalog_db_path`` parent. +/// On macOS this is always ``~/.config/pyref`` unless ``PYREF_HOME`` is set. Elsewhere, +/// ``$XDG_CONFIG_HOME/pyref`` when ``XDG_CONFIG_HOME`` is set, otherwise ``~/.config/pyref``, +/// or ``PYREF_HOME`` in tests. +pub fn pyref_config_dir() -> Result { if let Ok(h) = std::env::var("PYREF_HOME") { let p = PathBuf::from(h); if !p.exists() { @@ -36,39 +37,44 @@ pub fn pyref_data_dir() -> Result { } return Ok(p); } - let base = directories::BaseDirs::new() - .ok_or_else(|| CatalogError::Validation("could not resolve user data directory".into()))?; - let d = base.data_dir().join("pyref"); - if !d.exists() { - fs::create_dir_all(&d).map_err(CatalogError::Io)?; - } - Ok(d) -} - -fn default_catalog_parent_dir() -> Result { - if let Ok(h) = std::env::var("PYREF_HOME") { - let p = PathBuf::from(h); - if !p.exists() { - fs::create_dir_all(&p).map_err(CatalogError::Io)?; + #[cfg(target_os = "macos")] + { + let base = directories::BaseDirs::new() + .ok_or_else(|| CatalogError::Validation("could not resolve home directory".into()))?; + let d = base.home_dir().join(".config").join("pyref"); + if !d.exists() { + fs::create_dir_all(&d).map_err(CatalogError::Io)?; } - return Ok(p); + Ok(d) } - if let Ok(xdg) = std::env::var(ENV_XDG_CONFIG_HOME) { - if !xdg.is_empty() { - let d = PathBuf::from(xdg).join("pyref"); - if !d.exists() { - fs::create_dir_all(&d).map_err(CatalogError::Io)?; + #[cfg(not(target_os = "macos"))] + { + if let Ok(xdg) = std::env::var(ENV_XDG_CONFIG_HOME) { + if !xdg.is_empty() { + let d = PathBuf::from(xdg).join("pyref"); + if !d.exists() { + fs::create_dir_all(&d).map_err(CatalogError::Io)?; + } + return Ok(d); } - return Ok(d); } + let base = directories::BaseDirs::new() + .ok_or_else(|| CatalogError::Validation("could not resolve home directory".into()))?; + let d = base.home_dir().join(".config").join("pyref"); + if !d.exists() { + fs::create_dir_all(&d).map_err(CatalogError::Io)?; + } + Ok(d) } - let base = directories::BaseDirs::new() - .ok_or_else(|| CatalogError::Validation("could not resolve home directory".into()))?; - let d = base.home_dir().join(".config").join("pyref"); - if !d.exists() { - fs::create_dir_all(&d).map_err(CatalogError::Io)?; - } - Ok(d) +} + +/// Alias for [`pyref_config_dir`]. Catalog, zarr cache, CLI config, and daemons share this root. +pub fn pyref_data_dir() -> Result { + pyref_config_dir() +} + +fn default_catalog_parent_dir() -> Result { + pyref_config_dir() } /// Absolute path to the global catalog database. @@ -103,14 +109,14 @@ pub fn beamtime_sha256_hex(beamtime_dir: &Path) -> Result { /// Local zarr store path for one beamtime. /// -/// Default: ``/.cache//beamtime.zarr``. +/// Default: ``/cache//beamtime.zarr``. /// With ``PYREF_CACHE_ROOT``: ``//beamtime.zarr``. pub fn beamtime_zarr_path(beamtime_dir: &Path) -> Result { let hash = beamtime_sha256_hex(beamtime_dir)?; let dir = if let Ok(root) = std::env::var(ENV_CACHE_ROOT) { PathBuf::from(root).join(&hash) } else { - pyref_data_dir()?.join(".cache").join(&hash) + pyref_config_dir()?.join("cache").join(&hash) }; fs::create_dir_all(&dir).map_err(CatalogError::Io)?; Ok(dir.join("beamtime.zarr")) diff --git a/src/catalog/query.rs b/src/catalog/query.rs index 9c40a11..5b9357a 100644 --- a/src/catalog/query.rs +++ b/src/catalog/query.rs @@ -5,11 +5,14 @@ use diesel::sql_types::{BigInt, Double, Integer, Nullable, Text}; use diesel::sqlite::{Sqlite, SqliteConnection}; use diesel::{sql_query, OptionalExtension, RunQueryDsl}; use polars::prelude::*; +use std::collections::{HashMap, HashSet}; use std::path::Path; use crate::catalog::{db, paths, CatalogError, Result}; +use crate::loader::read_fits_headers_only_row; use crate::schema::{ - beam_finding, beamtimes, file_overrides, file_tags, files, frames, samples, scans, tags, + beam_finding, beamtimes, file_overrides, file_tags, files, frames, header_cards, header_values, + samples, scans, tags, }; #[derive(Default, Debug, Clone)] @@ -51,12 +54,27 @@ fn beamtime_id_for_dir(conn: &mut SqliteConnection, beamtime_dir: &Path) -> Resu Err(CatalogError::Io(_)) => return Ok(None), Err(e) => return Err(e), }; - Ok(beamtimes::table + beamtimes::table .filter(beamtimes::nas_uri.eq(uri)) .select(beamtimes::id) .first(conn) .optional() - .map_err(CatalogError::Diesel)?) + .map_err(CatalogError::Diesel) +} + +#[derive(Debug, Clone, Copy, Default)] +pub struct HeaderSyncReport { + pub files_checked: u32, + pub files_updated: u32, + pub header_rows_inserted: u32, +} + +fn normalize_header_display_name(card_name: &str) -> String { + card_name + .split_whitespace() + .map(|part| part.to_ascii_lowercase().replace("sample", "sam")) + .collect::>() + .join("_") } pub fn catalog_file_count(db_path: &Path, beamtime_dir: Option<&Path>) -> Result { @@ -180,9 +198,9 @@ struct CatalogFileSql { tag: Option, scan_number: i32, frame_number: i32, - beamline_energy: f64, - sample_theta: f64, - epu_polarization: f64, + beamline_energy: Option, + sample_theta: Option, + epu_polarization: Option, acquired_at: Option, centroid_row: Option, centroid_col: Option, @@ -198,9 +216,18 @@ impl QueryableByName for CatalogFileSql { tag: diesel::row::NamedRow::get::, Option>(row, "tag")?, scan_number: diesel::row::NamedRow::get::(row, "scan_number")?, frame_number: diesel::row::NamedRow::get::(row, "frame_number")?, - beamline_energy: diesel::row::NamedRow::get::(row, "beamline_energy")?, - sample_theta: diesel::row::NamedRow::get::(row, "sample_theta")?, - epu_polarization: diesel::row::NamedRow::get::(row, "epu_polarization")?, + beamline_energy: diesel::row::NamedRow::get::, Option>( + row, + "beamline_energy", + )?, + sample_theta: diesel::row::NamedRow::get::, Option>( + row, + "sample_theta", + )?, + epu_polarization: diesel::row::NamedRow::get::, Option>( + row, + "epu_polarization", + )?, acquired_at: diesel::row::NamedRow::get::, Option>( row, "acquired_at", @@ -226,9 +253,21 @@ fn build_files_sql(beamtime_id_sql: Option, filter: Option<&CatalogFilter>) COALESCE(o.tag, (SELECT t.slug FROM file_tags ft JOIN tags t ON ft.tag_id = t.id WHERE ft.file_id = f.id ORDER BY t.slug LIMIT 1)) AS tag, sc.scan_number, fr.frame_number, - fr.beamline_energy, - fr.sample_theta, - fr.epu_polarization, + (SELECT hv.value + FROM header_values hv + INNER JOIN header_cards hc ON hv.header_card_id = hc.id + WHERE hv.frame_id = fr.id AND hc.name = 'Beamline Energy' + LIMIT 1) AS beamline_energy, + (SELECT hv.value + FROM header_values hv + INNER JOIN header_cards hc ON hv.header_card_id = hc.id + WHERE hv.frame_id = fr.id AND hc.name = 'Sample Theta' + LIMIT 1) AS sample_theta, + (SELECT hv.value + FROM header_values hv + INNER JOIN header_cards hc ON hv.header_card_id = hc.id + WHERE hv.frame_id = fr.id AND hc.name = 'EPU Polarization' + LIMIT 1) AS epu_polarization, fr.acquired_at, bf.centroid_row, bf.centroid_col, @@ -265,10 +304,18 @@ WHERE 1=1"#, } } if let Some(em) = f.energy_min { - sql.push_str(&format!(" AND fr.beamline_energy >= {em}")); + sql.push_str(&format!( + " AND (SELECT hv.value FROM header_values hv \ +INNER JOIN header_cards hc ON hv.header_card_id = hc.id \ +WHERE hv.frame_id = fr.id AND hc.name = 'Beamline Energy' LIMIT 1) >= {em}" + )); } if let Some(em) = f.energy_max { - sql.push_str(&format!(" AND fr.beamline_energy <= {em}")); + sql.push_str(&format!( + " AND (SELECT hv.value FROM header_values hv \ +INNER JOIN header_cards hc ON hv.header_card_id = hc.id \ +WHERE hv.frame_id = fr.id AND hc.name = 'Beamline Energy' LIMIT 1) <= {em}" + )); } } sql.push_str(" ORDER BY sc.scan_number, fr.frame_number"); @@ -289,9 +336,9 @@ pub fn query_files(db_path: &Path, filter: Option<&CatalogFilter>) -> Result, zarr_bucket_frame_index: Option, zarr_path: String, date_iso: Option, - beamline_energy: f64, - sample_theta: f64, - ccd_theta: f64, + beamline_energy: Option, + sample_theta: Option, + ccd_theta: Option, hos: Option, - epu: f64, - exposure: f64, + epu: Option, + exposure: Option, + ai3_izero: Option, sample_name_h: String, scan_id: f64, - lambda: Option, - q: Option, beam_row: Option, beam_col: Option, beam_sigma: Option, @@ -391,10 +436,6 @@ impl QueryableByName for CatalogScanSql { frame_number: diesel::row::NamedRow::get::(row, "frame_number")?, zarr_group_key: diesel::row::NamedRow::get::(row, "zarr_group_key")?, zarr_frame_index: diesel::row::NamedRow::get::(row, "zarr_frame_index")?, - zarr_shape_bucket: diesel::row::NamedRow::get::, Option>( - row, - "zarr_shape_bucket", - )?, zarr_bucket_frame_index: diesel::row::NamedRow::get::, Option>( row, "zarr_bucket_frame_index", @@ -403,16 +444,27 @@ impl QueryableByName for CatalogScanSql { date_iso: diesel::row::NamedRow::get::, Option>( row, "date_iso", )?, - beamline_energy: diesel::row::NamedRow::get::(row, "beamline_energy")?, - sample_theta: diesel::row::NamedRow::get::(row, "sample_theta")?, - ccd_theta: diesel::row::NamedRow::get::(row, "ccd_theta")?, + beamline_energy: diesel::row::NamedRow::get::, Option>( + row, + "beamline_energy", + )?, + sample_theta: diesel::row::NamedRow::get::, Option>( + row, + "sample_theta", + )?, + ccd_theta: diesel::row::NamedRow::get::, Option>( + row, + "ccd_theta", + )?, hos: diesel::row::NamedRow::get::, Option>(row, "hos")?, - epu: diesel::row::NamedRow::get::(row, "epu")?, - exposure: diesel::row::NamedRow::get::(row, "exposure")?, + epu: diesel::row::NamedRow::get::, Option>(row, "epu")?, + exposure: diesel::row::NamedRow::get::, Option>(row, "exposure")?, + ai3_izero: diesel::row::NamedRow::get::, Option>( + row, + "ai3_izero", + )?, sample_name_h: diesel::row::NamedRow::get::(row, "sample_name_h")?, scan_id: diesel::row::NamedRow::get::(row, "scan_id")?, - lambda: diesel::row::NamedRow::get::, Option>(row, "lambda")?, - q: diesel::row::NamedRow::get::, Option>(row, "q")?, beam_row: diesel::row::NamedRow::get::, Option>(row, "beam_row")?, beam_col: diesel::row::NamedRow::get::, Option>(row, "beam_col")?, beam_sigma: diesel::row::NamedRow::get::, Option>( @@ -452,16 +504,40 @@ fn build_scan_df_sql(beamtime_id: Option, filter: Option<&CatalogFilter>) - fr.frame_number, fr.zarr_group_key, fr.zarr_frame_index, - fr.zarr_shape_bucket, fr.zarr_bucket_frame_index, bt.zarr_path, fr.acquired_at AS date_iso, - fr.beamline_energy, - fr.sample_theta, - fr.ccd_theta, + (SELECT hv.value + FROM header_values hv + INNER JOIN header_cards hc ON hv.header_card_id = hc.id + WHERE hv.frame_id = fr.id AND hc.name = 'Beamline Energy' + LIMIT 1) AS beamline_energy, + (SELECT hv.value + FROM header_values hv + INNER JOIN header_cards hc ON hv.header_card_id = hc.id + WHERE hv.frame_id = fr.id AND hc.name = 'Sample Theta' + LIMIT 1) AS sample_theta, + (SELECT hv.value + FROM header_values hv + INNER JOIN header_cards hc ON hv.header_card_id = hc.id + WHERE hv.frame_id = fr.id AND hc.name = 'CCD Theta' + LIMIT 1) AS ccd_theta, CAST(NULL AS REAL) AS hos, - fr.epu_polarization AS epu, - fr.exposure, + (SELECT hv.value + FROM header_values hv + INNER JOIN header_cards hc ON hv.header_card_id = hc.id + WHERE hv.frame_id = fr.id AND hc.name = 'EPU Polarization' + LIMIT 1) AS epu, + (SELECT hv.value + FROM header_values hv + INNER JOIN header_cards hc ON hv.header_card_id = hc.id + WHERE hv.frame_id = fr.id AND hc.name = 'EXPOSURE' + LIMIT 1) AS exposure, + (SELECT hv.value + FROM header_values hv + INNER JOIN header_cards hc ON hv.header_card_id = hc.id + WHERE hv.frame_id = fr.id AND hc.name = 'AI 3 Izero' + LIMIT 1) AS ai3_izero, COALESCE(o.sample_name, s.name) AS sample_name_h, CAST(sc.scan_number AS REAL) AS scan_id, CAST(NULL AS REAL) AS lambda, @@ -504,10 +580,18 @@ WHERE 1=1"#, } } if let Some(em) = f.energy_min { - sql.push_str(&format!(" AND fr.beamline_energy >= {em}")); + sql.push_str(&format!( + " AND (SELECT hv.value FROM header_values hv \ +INNER JOIN header_cards hc ON hv.header_card_id = hc.id \ +WHERE hv.frame_id = fr.id AND hc.name = 'Beamline Energy' LIMIT 1) >= {em}" + )); } if let Some(em) = f.energy_max { - sql.push_str(&format!(" AND fr.beamline_energy <= {em}")); + sql.push_str(&format!( + " AND (SELECT hv.value FROM header_values hv \ +INNER JOIN header_cards hc ON hv.header_card_id = hc.id \ +WHERE hv.frame_id = fr.id AND hc.name = 'Beamline Energy' LIMIT 1) <= {em}" + )); } } sql.push_str(" ORDER BY sc.scan_number, fr.frame_number"); @@ -515,6 +599,8 @@ WHERE 1=1"#, } fn catalog_scan_sql_rows_to_dataframe(rows: Vec) -> Result { + const HC_EV_ANGSTROM: f64 = 12_398.419_843_320_025; + let mut file_path = Vec::new(); let mut data_offset = Vec::new(); let mut naxis1 = Vec::new(); @@ -529,7 +615,6 @@ fn catalog_scan_sql_rows_to_dataframe(rows: Vec) -> Result> = Vec::new(); let mut zarr_bucket_frame_index: Vec> = Vec::new(); let mut zarr_path = Vec::new(); let mut date: Vec> = Vec::new(); @@ -539,6 +624,7 @@ fn catalog_scan_sql_rows_to_dataframe(rows: Vec) -> Result> = Vec::new(); let mut epu = Vec::new(); let mut exposure = Vec::new(); + let mut ai3_izero = Vec::new(); let mut sample_name_h: Vec> = Vec::new(); let mut scan_id = Vec::new(); let mut lambda: Vec> = Vec::new(); @@ -564,20 +650,27 @@ fn catalog_scan_sql_rows_to_dataframe(rows: Vec) -> Result 0.0).then_some(HC_EV_ANGSTROM / energy)); + let q_value = match (lambda_value, r.sample_theta) { + (Some(lam), Some(theta)) => Some(crate::io::q(lam, theta)), + _ => None, + }; + lambda.push(lambda_value); + q.push(q_value); beam_row.push(r.beam_row.map(|x| x as i64)); beam_col.push(r.beam_col.map(|x| x as i64)); beam_sigma.push(r.beam_sigma); @@ -600,7 +693,6 @@ fn catalog_scan_sql_rows_to_dataframe(rows: Vec) -> Result) -> Result, + header_name: String, + header_display_name: String, + header_value: f64, +} + +impl QueryableByName for HeaderValueViewSql { + fn build<'a>(row: &impl diesel::row::NamedRow<'a, Sqlite>) -> deserialize::Result { + Ok(Self { + frame_id: diesel::row::NamedRow::get::(row, "frame_id")?, + scan_number: diesel::row::NamedRow::get::(row, "scan_number")?, + file_path: diesel::row::NamedRow::get::(row, "file_path")?, + frame_number: diesel::row::NamedRow::get::(row, "frame_number")?, + zarr_group_key: diesel::row::NamedRow::get::(row, "zarr_group_key")?, + zarr_frame_index: diesel::row::NamedRow::get::(row, "zarr_frame_index")?, + zarr_bucket_frame_index: diesel::row::NamedRow::get::, Option>( + row, + "zarr_bucket_frame_index", + )?, + header_name: diesel::row::NamedRow::get::(row, "header_name")?, + header_display_name: diesel::row::NamedRow::get::( + row, + "header_display_name", + )?, + header_value: diesel::row::NamedRow::get::(row, "header_value")?, + }) + } +} + +fn build_header_values_view_sql(beamtime_id: Option) -> String { + let mut sql = String::from( + r#"SELECT + fr.id AS frame_id, + sc.scan_number, + f.nas_uri AS file_path, + fr.frame_number, + fr.zarr_group_key, + fr.zarr_frame_index, + fr.zarr_bucket_frame_index, + hc.name AS header_name, + hc.display_name AS header_display_name, + hv.value AS header_value +FROM header_values hv +INNER JOIN frames fr ON hv.frame_id = fr.id +INNER JOIN files f ON fr.file_id = f.id +INNER JOIN scans sc ON fr.scan_id = sc.id +INNER JOIN header_cards hc ON hv.header_card_id = hc.id +WHERE 1=1"#, + ); + if let Some(bid) = beamtime_id { + sql.push_str(&format!(" AND f.beamtime_id = {bid}")); + } + sql.push_str(" ORDER BY sc.scan_number, fr.frame_number, hc.name"); + sql +} + +/// Returns a merged frame/header view from `frames`, `header_cards`, and `header_values`. +/// +/// When `beamtime_dir` is provided, rows are scoped to that single beamtime root. +pub fn header_values_view(db_path: &Path, beamtime_dir: Option<&Path>) -> Result { + let mut conn = db::establish_connection(db_path)?; + let beamtime_id = match beamtime_dir { + Some(dir) => match beamtime_id_for_dir(&mut conn, dir)? { + Some(id) => Some(id), + None => None, + }, + None => None, + }; + if beamtime_dir.is_some() && beamtime_id.is_none() { + return DataFrame::new(vec![ + Series::new("frame_id".into(), Vec::::new()).into(), + Series::new("scan_number".into(), Vec::::new()).into(), + Series::new("file_path".into(), Vec::::new()).into(), + Series::new("frame_number".into(), Vec::::new()).into(), + Series::new("zarr_group_key".into(), Vec::::new()).into(), + Series::new("zarr_frame_index".into(), Vec::::new()).into(), + Series::new("zarr_bucket_frame_index".into(), Vec::>::new()).into(), + Series::new("header_name".into(), Vec::::new()).into(), + Series::new("header_display_name".into(), Vec::::new()).into(), + Series::new("header_value".into(), Vec::::new()).into(), + ]) + .map_err(|e| CatalogError::Validation(e.to_string())); + } + let sql = build_header_values_view_sql(beamtime_id); + let rows: Vec = sql_query(&sql) + .load(&mut conn) + .map_err(CatalogError::Diesel)?; + let mut frame_id = Vec::with_capacity(rows.len()); + let mut scan_number = Vec::with_capacity(rows.len()); + let mut file_path = Vec::with_capacity(rows.len()); + let mut frame_number = Vec::with_capacity(rows.len()); + let mut zarr_group_key = Vec::with_capacity(rows.len()); + let mut zarr_frame_index = Vec::with_capacity(rows.len()); + let mut zarr_bucket_frame_index: Vec> = Vec::with_capacity(rows.len()); + let mut header_name = Vec::with_capacity(rows.len()); + let mut header_display_name = Vec::with_capacity(rows.len()); + let mut header_value = Vec::with_capacity(rows.len()); + for row in rows { + frame_id.push(row.frame_id as i64); + scan_number.push(row.scan_number as i64); + file_path.push(row.file_path); + frame_number.push(row.frame_number as i64); + zarr_group_key.push(row.zarr_group_key as i64); + zarr_frame_index.push(row.zarr_frame_index as i64); + zarr_bucket_frame_index.push(row.zarr_bucket_frame_index.map(i64::from)); + header_name.push(row.header_name); + header_display_name.push(row.header_display_name); + header_value.push(row.header_value); + } + DataFrame::new(vec![ + Series::new("frame_id".into(), frame_id).into(), + Series::new("scan_number".into(), scan_number).into(), + Series::new("file_path".into(), file_path).into(), + Series::new("frame_number".into(), frame_number).into(), + Series::new("zarr_group_key".into(), zarr_group_key).into(), + Series::new("zarr_frame_index".into(), zarr_frame_index).into(), + Series::new("zarr_bucket_frame_index".into(), zarr_bucket_frame_index).into(), + Series::new("header_name".into(), header_name).into(), + Series::new("header_display_name".into(), header_display_name).into(), + Series::new("header_value".into(), header_value).into(), + ]) + .map_err(|e| CatalogError::Validation(e.to_string())) +} + +pub fn sync_missing_headers_for_beamtime( + db_path: &Path, + beamtime_dir: &Path, +) -> Result { + use super::ingest::DEFAULT_INGEST_HEADER_ITEMS; + use std::path::PathBuf; + + let mut conn = db::establish_connection(db_path)?; + let Some(bid) = beamtime_id_for_dir(&mut conn, beamtime_dir)? else { + return Ok(HeaderSyncReport::default()); + }; + let frame_rows: Vec<(i32, String)> = frames::table + .inner_join(files::table.on(frames::file_id.eq(files::id))) + .filter(files::beamtime_id.eq(bid)) + .select((frames::id, files::nas_uri)) + .load(&mut conn) + .map_err(CatalogError::Diesel)?; + + let mut card_cache: HashMap = header_cards::table + .select((header_cards::name, header_cards::id)) + .load(&mut conn) + .map_err(CatalogError::Diesel)? + .into_iter() + .collect(); + let header_items: Vec = DEFAULT_INGEST_HEADER_ITEMS + .iter() + .map(|s| (*s).to_string()) + .collect(); + let mut report = HeaderSyncReport::default(); + + conn.transaction::<(), CatalogError, _>(|conn| { + for (frame_id, file_uri) in &frame_rows { + report.files_checked += 1; + let Some(path_str) = file_uri.strip_prefix("file://") else { + continue; + }; + let row = read_fits_headers_only_row(PathBuf::from(path_str), &header_items)?; + let existing: Vec = header_values::table + .filter(header_values::frame_id.eq(*frame_id)) + .select(header_values::header_card_id) + .load(conn)?; + let mut existing_set: HashSet = existing.into_iter().collect(); + let mut inserted_for_file: u32 = 0; + + for (card_name, value) in row.non_promoted_header_values { + let card_id = if let Some(id) = card_cache.get(card_name.as_str()) { + *id + } else { + let existing_id: Option = header_cards::table + .filter(header_cards::name.eq(card_name.as_str())) + .select(header_cards::id) + .first(conn) + .optional()?; + let id = match existing_id { + Some(id) => id, + None => diesel::insert_into(header_cards::table) + .values(( + header_cards::name.eq(card_name.as_str()), + header_cards::display_name + .eq(normalize_header_display_name(card_name.as_str())), + )) + .returning(header_cards::id) + .get_result(conn)?, + }; + card_cache.insert(card_name.clone(), id); + id + }; + + if existing_set.insert(card_id) { + diesel::insert_into(header_values::table) + .values(( + header_values::frame_id.eq(*frame_id), + header_values::header_card_id.eq(card_id), + header_values::value.eq(value), + )) + .execute(conn)?; + inserted_for_file += 1; + } + } + if inserted_for_file > 0 { + report.files_updated += 1; + report.header_rows_inserted += inserted_for_file; + } + } + Ok(()) + })?; + Ok(report) +} + pub fn update_beamspot( db_path: &Path, file_path: &str, @@ -791,8 +1104,8 @@ pub fn get_overrides(db_path: &Path, path: Option<&str>) -> Result { let mut sample_names = Vec::new(); let mut tags = Vec::new(); let mut notes = Vec::new(); - let rows: Vec<(String, Option, Option, Option)> = if let Some(p) = path - { + type OverrideRow = (String, Option, Option, Option); + let rows: Vec = if let Some(p) = path { file_overrides::table .filter(file_overrides::source_path.eq(p)) .select(( @@ -965,7 +1278,6 @@ fn scan_from_catalog_columns() -> Vec<&'static str> { "frame_number", "zarr_group_key", "zarr_frame_index", - "zarr_shape_bucket", "zarr_bucket_frame_index", "zarr_path", "DATE", @@ -975,6 +1287,7 @@ fn scan_from_catalog_columns() -> Vec<&'static str> { "Higher Order Suppressor", "EPU Polarization", "EXPOSURE", + "AI 3 Izero", "Sample Name", "Scan ID", "Lambda", @@ -1099,18 +1412,8 @@ mod tests { frames::frame_number.eq(0), frames::zarr_group_key.eq(1), frames::zarr_frame_index.eq(0), + frames::zarr_bucket_frame_index.eq(None::), frames::acquired_at.eq(None::), - frames::sample_x.eq(0.0), - frames::sample_y.eq(0.0), - frames::sample_z.eq(0.0), - frames::sample_theta.eq(0.0), - frames::ccd_theta.eq(0.0), - frames::beamline_energy.eq(0.0), - frames::epu_polarization.eq(0.0), - frames::exposure.eq(0.0), - frames::ring_current.eq(0.0), - frames::ai3_izero.eq(0.0), - frames::beam_current.eq(0.0), frames::quality_flag.eq(None::), )) .execute(&mut conn) diff --git a/src/catalog/scan_scheduler.rs b/src/catalog/scan_scheduler.rs new file mode 100644 index 0000000..2703b5f --- /dev/null +++ b/src/catalog/scan_scheduler.rs @@ -0,0 +1,134 @@ +use std::collections::VecDeque; +use std::sync::{Condvar, Mutex}; + +pub(crate) struct WaterFillQueues { + groups: Vec<(i32, VecDeque)>, + in_flight: Vec, + alloc: Vec, + pool_size: usize, +} + +impl WaterFillQueues { + pub fn new(mut pairs: Vec<(i32, Vec)>) -> Self { + pairs.sort_by(|a, b| a.1.len().cmp(&b.1.len()).then_with(|| a.0.cmp(&b.0))); + let groups: Vec<_> = pairs + .into_iter() + .map(|(sn, v)| (sn, VecDeque::from(v))) + .collect(); + let n = groups.len(); + Self { + groups, + in_flight: vec![0; n], + alloc: vec![0; n], + pool_size: 0, + } + } + + pub fn set_pool_size(&mut self, pool_size: usize) { + self.pool_size = pool_size; + self.rebalance(); + } + + fn rebalance(&mut self) { + let mut pool = self.pool_size; + for i in 0..self.groups.len() { + let rem = self.groups[i].1.len() + self.in_flight[i]; + if rem == 0 { + self.alloc[i] = 0; + } else { + let take = rem.min(pool); + self.alloc[i] = take; + pool = pool.saturating_sub(take); + } + } + } + + pub fn dispatch_one(&mut self) -> Option<(T, usize)> { + self.rebalance(); + for gi in 0..self.groups.len() { + if !self.groups[gi].1.is_empty() && self.in_flight[gi] < self.alloc[gi] { + let t = self.groups[gi].1.pop_front().unwrap(); + self.in_flight[gi] += 1; + return Some((t, gi)); + } + } + None + } + + pub fn complete_group(&mut self, group_index: usize) { + self.in_flight[group_index] = self.in_flight[group_index].saturating_sub(1); + self.rebalance(); + } + + pub fn total_undone(&self) -> usize { + self.groups + .iter() + .enumerate() + .map(|(i, (_, q))| q.len() + self.in_flight[i]) + .sum() + } +} + +pub(crate) struct SharedWaterFill { + inner: Mutex>, + cv: Condvar, +} + +impl SharedWaterFill { + pub fn new(queues: WaterFillQueues) -> Self { + Self { + inner: Mutex::new(queues), + cv: Condvar::new(), + } + } + + pub fn set_pool_size(&self, n: usize) { + let mut g = self.inner.lock().unwrap(); + g.set_pool_size(n); + self.cv.notify_all(); + } + + pub fn wait_pop(&self, cancel: Option<&std::sync::atomic::AtomicBool>) -> Option<(T, usize)> { + let mut g = self.inner.lock().unwrap(); + loop { + if cancel.is_some_and(|c| c.load(std::sync::atomic::Ordering::Relaxed)) { + return None; + } + if let Some(item) = g.dispatch_one() { + return Some(item); + } + if g.total_undone() == 0 { + return None; + } + g = self.cv.wait(g).unwrap(); + } + } + + pub fn complete_and_notify(&self, group_index: usize) { + let mut g = self.inner.lock().unwrap(); + g.complete_group(group_index); + self.cv.notify_all(); + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn water_fill_drains_all_tasks() { + let mut q = WaterFillQueues::new(vec![ + (10i32, vec![0u8, 1]), + (20i32, vec![0u8, 1, 2, 3, 4]), + (30i32, vec![0u8; 10]), + ]); + q.set_pool_size(10); + let mut n = 0usize; + while let Some((_t, gi)) = q.dispatch_one() { + q.complete_group(gi); + n += 1; + } + assert_eq!(n, 17); + assert_eq!(q.total_undone(), 0); + } +} diff --git a/src/catalog/watch.rs b/src/catalog/watch.rs index 1a47527..6127e67 100644 --- a/src/catalog/watch.rs +++ b/src/catalog/watch.rs @@ -1,5 +1,3 @@ -#![cfg(feature = "watch")] - use crate::catalog::ingest_beamtime; use crate::catalog::CatalogError; use crate::catalog::IngestSelection; @@ -19,6 +17,15 @@ const DEFAULT_HEADER_KEYS: &[&str] = &[ "CCD Theta", "Higher Order Suppressor", "EPU Polarization", + "EXPOSURE", + "Sample Name", + "Scan ID", + "Sample X", + "Sample Y", + "Sample Z", + "RINGCRNT", + "AI 3 Izero", + "Beam Current", ]; pub struct WatchHandle { @@ -37,6 +44,17 @@ impl Drop for WatchHandle { } } +fn spawn_ingest_worker(beamtime_dir: PathBuf, keys: Vec) -> mpsc::Sender<()> { + let (work_tx, work_rx) = mpsc::channel::<()>(); + thread::spawn(move || { + while let Ok(()) = work_rx.recv() { + let _ = ingest_beamtime(&beamtime_dir, &keys, true, None, IngestSelection::default()); + while work_rx.try_recv().is_ok() {} + } + }); + work_tx +} + pub fn run_catalog_watcher( beamtime_dir: &Path, header_items: &[String], @@ -104,7 +122,7 @@ pub fn run_catalog_watcher( &keys, true, None, - crate::catalog::IngestSelection::default(), + IngestSelection::default(), ); if let Some(ref f) = on_end { f(); @@ -210,15 +228,17 @@ pub fn run_catalog_watcher_blocking( .map_err(|e| CatalogError::Validation(format!("watch {}: {e}", root.display())))?; } + let work_tx = spawn_ingest_worker(beamtime_dir.clone(), keys); + while !cancel.load(Ordering::Relaxed) { match event_rx.recv_timeout(Duration::from_millis(200)) { Ok(()) => { - let _ = - ingest_beamtime(&beamtime_dir, &keys, true, None, IngestSelection::default()); + let _ = work_tx.send(()); } Err(mpsc::RecvTimeoutError::Timeout) => {} Err(mpsc::RecvTimeoutError::Disconnected) => break, } } + drop(work_tx); Ok(()) } diff --git a/src/catalog/zarr_write.rs b/src/catalog/zarr_write.rs index 9741f90..af50266 100644 --- a/src/catalog/zarr_write.rs +++ b/src/catalog/zarr_write.rs @@ -2,8 +2,7 @@ //! //! Layout: legacy ``/{scan}/{frame}/raw`` (2D int32) may still exist for older //! archives. New ingest writes **per-scan** 3D stacks at -//! ``/images/by_shape//scans//raw`` as ``uint16`` with -//! shuffle + Zstd so each scan compresses independently. +//! ``/images/scans//raw`` as ``uint16`` with shuffle + Zstd. use ndarray::Array2; use std::path::Path; @@ -18,16 +17,14 @@ use zarrs::storage::{ReadableWritableListableStorage, ReadableWritableListableSt use crate::errors::FitsError; const IMAGES_ROOT: &str = "/images"; -const BY_SHAPE_ROOT: &str = "/images/by_shape"; +const SCANS_ROOT: &str = "/images/scans"; const RAW_DATASET_NAME: &str = "raw"; -const SCANS_SEGMENT: &str = "scans"; const DEFAULT_SHARD_FRAMES: u64 = 64; pub const ZARR_U16_ZSTD_LEVEL: i32 = 9; #[derive(Debug, Clone, PartialEq, Eq)] -pub struct ShapeScanBucketSpec { - pub shape_bucket: String, +pub struct ScanZarrSpec { pub scan_number: i32, pub height: usize, pub width: usize, @@ -43,8 +40,8 @@ fn ensure_group(store: &ReadableWritableListableStorage, path: &str) -> Result<( .map_err(|e| FitsError::validation(e.to_string())) } -pub fn scan_raw_array_path(shape_bucket: &str, scan_number: i32) -> String { - format!("{BY_SHAPE_ROOT}/{shape_bucket}/{SCANS_SEGMENT}/{scan_number}/{RAW_DATASET_NAME}") +pub fn scan_raw_array_path(scan_number: i32) -> String { + format!("{SCANS_ROOT}/{scan_number}/{RAW_DATASET_NAME}") } pub fn open_zarr_store(zarr_root: &Path) -> Result { @@ -56,20 +53,16 @@ pub fn open_zarr_store(zarr_root: &Path) -> Result String { - format!("{height}x{width}") -} - -fn open_or_create_scan_bucket_array( +fn open_or_create_scan_array( store: &ReadableWritableListableStorage, - spec: &ShapeScanBucketSpec, + spec: &ScanZarrSpec, ) -> Result, FitsError> { - let path = scan_raw_array_path(&spec.shape_bucket, spec.scan_number); + let path = scan_raw_array_path(spec.scan_number); if let Ok(array) = Array::open(store.clone(), &path) { return Ok(array); } let n = spec.frames as u64; - let shard_frames = n.max(1).min(DEFAULT_SHARD_FRAMES); + let shard_frames = n.clamp(1, DEFAULT_SHARD_FRAMES); let shape = vec![n, spec.height as u64, spec.width as u64]; let chunk_shape = vec![shard_frames, spec.height as u64, spec.width as u64]; let mut builder = ArrayBuilder::new(shape, chunk_shape, data_type::uint16(), 0u16); @@ -92,43 +85,31 @@ fn open_or_create_scan_bucket_array( Ok(array) } -pub fn prepare_shape_scan_bucket_arrays( +pub fn prepare_scan_zarr_arrays( store: &ReadableWritableListableStorage, - specs: &[ShapeScanBucketSpec], + specs: &[ScanZarrSpec], ) -> Result<(), FitsError> { ensure_group(store, "/")?; ensure_group(store, IMAGES_ROOT)?; - ensure_group(store, BY_SHAPE_ROOT)?; + ensure_group(store, SCANS_ROOT)?; for spec in specs { - ensure_group(store, &format!("{BY_SHAPE_ROOT}/{}", spec.shape_bucket))?; - ensure_group( - store, - &format!("{BY_SHAPE_ROOT}/{}/{SCANS_SEGMENT}", spec.shape_bucket), - )?; - ensure_group( - store, - &format!( - "{BY_SHAPE_ROOT}/{}/{SCANS_SEGMENT}/{}", - spec.shape_bucket, spec.scan_number - ), - )?; - let _ = open_or_create_scan_bucket_array(store, spec)?; + ensure_group(store, &format!("{SCANS_ROOT}/{}", spec.scan_number))?; + let _ = open_or_create_scan_array(store, spec)?; } Ok(()) } -pub fn write_scan_shape_bucket_frame_raw( +pub fn write_scan_frame_raw( store: &ReadableWritableListableStorage, - shape_bucket: &str, scan_number: i32, - bucket_frame_index: usize, + frame_index: usize, data: &Array2, ) -> Result<(), FitsError> { - let path = scan_raw_array_path(shape_bucket, scan_number); + let path = scan_raw_array_path(scan_number); let array = Array::open(store.clone(), &path).map_err(|e| FitsError::validation(e.to_string()))?; let subset = ArraySubset::new_with_start_shape( - vec![bucket_frame_index as u64, 0_u64, 0_u64], + vec![frame_index as u64, 0_u64, 0_u64], vec![1_u64, data.nrows() as u64, data.ncols() as u64], ) .map_err(|e| FitsError::validation(e.to_string()))?; @@ -213,7 +194,7 @@ mod tests { } #[test] - fn bucketed_uint16_layout_uses_less_disk_than_legacy_per_frame_int32() { + fn per_scan_uint16_layout_uses_less_disk_than_legacy_per_frame_int32() { let old_tmp = TempDir::new().expect("create old tempdir"); let new_tmp = TempDir::new().expect("create new tempdir"); let old_store = open_zarr_store(old_tmp.path()).expect("open old zarr store"); @@ -225,25 +206,22 @@ mod tests { for i in 0..n { write_frame_raw(&old_store, 1, i as i64, &old_frame).expect("write legacy frame"); } - let key = shape_bucket_key(h, w); - let specs = vec![ShapeScanBucketSpec { - shape_bucket: key.clone(), + let specs = vec![ScanZarrSpec { scan_number: 1, height: h, width: w, frames: n, }]; - prepare_shape_scan_bucket_arrays(&new_store, &specs).expect("prepare bucket arrays"); + prepare_scan_zarr_arrays(&new_store, &specs).expect("prepare scan arrays"); let new_frame = Array2::from_elem((h, w), 512_u16); for i in 0..n { - write_scan_shape_bucket_frame_raw(&new_store, &key, 1, i, &new_frame) - .expect("write bucket frame"); + write_scan_frame_raw(&new_store, 1, i, &new_frame).expect("write scan frame"); } let old_bytes = dir_size_bytes(old_tmp.path()); let new_bytes = dir_size_bytes(new_tmp.path()); assert!( new_bytes < old_bytes, - "expected bucketed layout to be smaller (new={new_bytes}, old={old_bytes})" + "expected per-scan layout to be smaller (new={new_bytes}, old={old_bytes})" ); } } diff --git a/src/gaussian_fit.rs b/src/gaussian_fit.rs index 5435324..eb3a8fe 100644 --- a/src/gaussian_fit.rs +++ b/src/gaussian_fit.rs @@ -11,6 +11,7 @@ pub struct Gaussian2DFit { pub baseline: f64, } +#[allow(clippy::too_many_arguments)] fn gaussian_2d(r: f64, c: f64, mu_r: f64, mu_c: f64, sr: f64, sc: f64, a: f64, b: f64) -> f64 { if sr <= 0.0 || sc <= 0.0 { return b; @@ -100,8 +101,8 @@ pub fn fit_2d_gaussian( } } } - for i in 0..6 { - jtj[i][i] += lambda; + for (i, row) in jtj.iter_mut().enumerate() { + row[i] += lambda; } let dp = solve_6x6(&jtj, &jtr)?; let new_mu_r = mu_r + dp[0]; @@ -139,6 +140,7 @@ pub fn fit_2d_gaussian( }) } +#[allow(clippy::needless_range_loop)] fn solve_6x6(a: &[[f64; 6]; 6], b: &[f64; 6]) -> Option<[f64; 6]> { let mut m = [[0.0f64; 7]; 6]; for i in 0..6 { @@ -159,8 +161,8 @@ fn solve_6x6(a: &[[f64; 6]; 6], b: &[f64; 6]) -> Option<[f64; 6]> { if div.abs() < 1e-15 { return None; } - for j in 0..7 { - m[col][j] /= div; + for v in &mut m[col][..7] { + *v /= div; } for i in 0..6 { if i != col { diff --git a/src/io/image_mmap.rs b/src/io/image_mmap.rs index 77bf0dd..e12e639 100644 --- a/src/io/image_mmap.rs +++ b/src/io/image_mmap.rs @@ -30,15 +30,11 @@ fn try_load_image_pixels_from_zarr(info: &ImageInfo) -> Result DataType::Float64, diff --git a/src/io/mod.rs b/src/io/mod.rs index c333db1..2fc38f7 100644 --- a/src/io/mod.rs +++ b/src/io/mod.rs @@ -1,8 +1,8 @@ pub mod blur; pub mod image_mmap; +pub mod metadata; pub mod options; pub mod raw_pixels; -pub mod schema; pub mod source; #[cfg(feature = "zarr")] @@ -16,7 +16,7 @@ use std::ops::Mul; use std::path::PathBuf; use crate::errors::FitsError; -use crate::fits::{ImageHduHeader, PrimaryHdu}; +use crate::fits::{CardValue, ImageHduHeader, PrimaryHdu}; #[derive(Debug, Clone)] pub struct ImageInfo { @@ -27,7 +27,6 @@ pub struct ImageInfo { pub bitpix: i32, pub bzero: i64, pub zarr_path: Option, - pub zarr_shape_bucket: Option, pub zarr_bucket_frame_index: Option, pub zarr_group_key: Option, pub zarr_frame_index: Option, @@ -48,7 +47,6 @@ impl ImageInfo { bitpix: h.bitpix, bzero, zarr_path: None, - zarr_shape_bucket: None, zarr_bucket_frame_index: None, zarr_group_key: None, zarr_frame_index: None, @@ -117,12 +115,6 @@ impl ImageInfo { .and_then(|s| s.str().ok()) .and_then(|c| c.get(row_index)) .map(PathBuf::from); - let zarr_shape_bucket = df - .column("zarr_shape_bucket") - .ok() - .and_then(|s| s.str().ok()) - .and_then(|c| c.get(row_index)) - .map(std::string::ToString::to_string); let zarr_bucket_frame_index = df .column("zarr_bucket_frame_index") .ok() @@ -149,7 +141,6 @@ impl ImageInfo { bitpix, bzero, zarr_path, - zarr_shape_bucket, zarr_bucket_frame_index, zarr_group_key, zarr_frame_index, @@ -593,34 +584,42 @@ pub struct BtIngestRow { pub ai3_izero: Option, pub beam_current: Option, pub date_iso: Option, + pub non_promoted_header_values: Vec<(String, f64)>, +} + +fn card_value_to_f64(value: &CardValue) -> Option { + match value { + CardValue::INT(v) => Some(*v as f64), + CardValue::FLOAT(v) => Some(*v), + CardValue::LOGICAL(v) => Some(if *v { 1.0 } else { 0.0 }), + CardValue::STRING(s) => s.trim().parse::().ok(), + CardValue::EMPTY => None, + } } -fn header_float(primary: &PrimaryHdu, key: &str) -> Option { +fn promoted_header_value(primary: &PrimaryHdu, key: &str) -> Option { if key == "Beamline Energy" { if let Some(card) = primary.header.get_card(key) { - if let Some(v) = card.value.as_float() { + if let Some(v) = card_value_to_f64(&card.value) { return Some(v); } } if let Some(card) = primary.header.get_card("Beamline Energy Goal") { - return card.value.as_float(); + return card_value_to_f64(&card.value); } return Some(0.0); } - if key == "DATE" || key == "Sample Name" { - return None; - } primary .header .get_card(key) - .map(|c| c.value.as_float().unwrap_or(1.0)) + .and_then(|c| card_value_to_f64(&c.value)) } pub fn build_bt_ingest_row( primary: &PrimaryHdu, image_header: &ImageHduHeader, path: PathBuf, - header_items: &[String], + _header_items: &[String], ) -> Result { let path_str = path .to_str() @@ -663,27 +662,26 @@ pub fn build_bt_ingest_row( ring_current: None, ai3_izero: None, beam_current: None, - date_iso: None, + date_iso: primary.header.get_card("DATE").map(|c| c.value.to_string()), + non_promoted_header_values: Vec::new(), }; - for key in header_items { - if key == "DATE" { - row.date_iso = primary.header.get_card("DATE").map(|c| c.value.to_string()); - continue; - } - let v = header_float(primary, key); - match key.as_str() { - "Beamline Energy" => row.beamline_energy = v, - "Sample Theta" => row.sample_theta = v, - "CCD Theta" => row.ccd_theta = v, - "EPU Polarization" => row.epu_polarization = v, - "EXPOSURE" => row.exposure = v, - "Sample X" => row.sample_x = v, - "Sample Y" => row.sample_y = v, - "Sample Z" => row.sample_z = v, - "RINGCRNT" => row.ring_current = v, - "AI 3 Izero" => row.ai3_izero = v, - "Beam Current" => row.beam_current = v, - _ => {} + + row.beamline_energy = promoted_header_value(primary, "Beamline Energy"); + row.sample_theta = promoted_header_value(primary, "Sample Theta"); + row.ccd_theta = promoted_header_value(primary, "CCD Theta"); + row.epu_polarization = promoted_header_value(primary, "EPU Polarization"); + row.exposure = promoted_header_value(primary, "EXPOSURE"); + row.sample_x = promoted_header_value(primary, "Sample X"); + row.sample_y = promoted_header_value(primary, "Sample Y"); + row.sample_z = promoted_header_value(primary, "Sample Z"); + row.ring_current = promoted_header_value(primary, "RINGCRNT"); + row.ai3_izero = promoted_header_value(primary, "AI 3 Izero"); + row.beam_current = promoted_header_value(primary, "Beam Current"); + + for card in primary.header.iter() { + if let Some(value) = card_value_to_f64(&card.value) { + row.non_promoted_header_values + .push((card.keyword.clone(), value)); } } Ok(row) @@ -850,15 +848,7 @@ mod tests { let data = Array2::from_shape_vec( (2, 30), (0..60) - .map(|i| { - if i < 10 { - 5i64 - } else if i >= 20 { - 5i64 - } else { - 100 - } - }) + .map(|i| if !(10..20).contains(&i) { 5i64 } else { 100 }) .collect(), ) .unwrap(); diff --git a/src/io/options.rs b/src/io/options.rs index 8aba0d8..ada30fa 100644 --- a/src/io/options.rs +++ b/src/io/options.rs @@ -1,6 +1,6 @@ //! Options for read_fits and scan_fits: header keys, schema, batch size, catalog filter. -use crate::io::schema::FitsMetadataSchema; +use crate::io::metadata::FitsMetadataSchema; use crate::io::source::ResolvePreference; #[cfg(feature = "catalog")] @@ -17,6 +17,12 @@ pub const DEFAULT_HEADER_ITEMS: &[&str] = &[ "EXPOSURE", "Sample Name", "Scan ID", + "Sample X", + "Sample Y", + "Sample Z", + "RINGCRNT", + "AI 3 Izero", + "Beam Current", ]; /// Options for eager `read_fits`: which headers to read, whether to add Q/Lambda, batch size. diff --git a/src/io/zarr_store.rs b/src/io/zarr_store.rs index d89a658..c30ba6e 100644 --- a/src/io/zarr_store.rs +++ b/src/io/zarr_store.rs @@ -1,11 +1,8 @@ -#![cfg(feature = "zarr")] - use ndarray::Array2; use std::path::{Path, PathBuf}; use std::sync::Arc; use zarrs::array::data_type; -use zarrs::array::Array; -use zarrs::array::ArrayBuilder; +use zarrs::array::{Array, ArrayBuilder, ArraySubset}; use zarrs::group::GroupBuilder; use zarrs::storage::{ReadableWritableListableStorage, ReadableWritableListableStorageTraits}; @@ -117,15 +114,14 @@ pub fn read_detector_frame( } let height = shape[1] as usize; let width = shape[2] as usize; - let subset_ranges: [std::ops::Range; 3] = [ + let subset_region = ArraySubset::new_with_ranges(&[ (frame_index as u64)..(frame_index as u64 + 1), 0..(height as u64), 0..(width as u64), - ]; - let subset = array - .retrieve_array_subset_ndarray::(&subset_ranges) + ]); + let flat: Vec = array + .retrieve_array_subset::>(&subset_region) .map_err(|e| FitsError::validation(e.to_string()))?; - let flat: Vec = subset.iter().copied().collect(); Array2::from_shape_vec((height, width), flat).map_err(|e| FitsError::validation(e.to_string())) } diff --git a/src/lib.rs b/src/lib.rs index a7c8fd9..8869560 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -17,8 +17,8 @@ pub mod catalog; pub mod schema; pub use errors::FitsError; +pub use io::metadata::FitsMetadataSchema; pub use io::options::{ReadFitsOptions, ScanFitsOptions}; -pub use io::schema::FitsMetadataSchema; pub use io::source::{FitsSource, ResolvePreference, ResolvedSource}; pub use io::{build_fits_stem, image_mmap, ImageInfo}; pub use loader::{ @@ -49,12 +49,16 @@ mod extension { #[cfg(feature = "catalog")] use crate::catalog::{ beamtime_ingest_layout, catalog_file_count, classify_scan_type, get_overrides, - ingest_beamtime_with_progress_sink, list_beamtime_entries_v2, list_beamtimes_from_catalog, - paths, scan_from_catalog, scan_from_catalog_for_beamtime, set_override, - set_scan_type_for_beamtime_scan, CatalogFilter, IngestParallelism, IngestProgress, - IngestProgressSink, IngestSelection, ReflectivityScanType, + header_values_view, ingest_beamtime_with_progress_sink, list_beamtime_entries_v2, + list_beamtimes_from_catalog, paths, scan_from_catalog, scan_from_catalog_for_beamtime, + set_override, set_scan_type_for_beamtime_scan, sync_missing_headers_for_beamtime, + CatalogFilter, IngestParallelism, IngestProgress, IngestProgressSink, IngestSelection, + ReflectivityScanType, }; + #[cfg(feature = "catalog")] + type ClassifyScanTypeTuple = (String, Option, Option, Option, Option); + #[global_allocator] static ALLOC: PolarsAllocator = PolarsAllocator::new(); @@ -564,6 +568,51 @@ mod extension { } } + #[cfg(feature = "catalog")] + #[pyfunction] + #[pyo3( + name = "py_header_values_view", + signature = (db_path, beamtime_path=None), + text_signature = "(db_path, beamtime_path=None)" + )] + pub fn py_header_values_view( + db_path: &str, + beamtime_path: Option<&str>, + ) -> PyResult { + let db = std::path::Path::new(db_path); + let beamtime = beamtime_path.map(std::path::Path::new); + match header_values_view(db, beamtime) { + Ok(df) => Ok(PyDataFrame(df)), + Err(e) => Err(PyErr::new::( + e.to_string(), + )), + } + } + + #[cfg(feature = "catalog")] + #[pyfunction] + #[pyo3( + name = "py_sync_missing_headers_for_beamtime", + signature = (db_path, beamtime_path), + text_signature = "(db_path, beamtime_path)" + )] + pub fn py_sync_missing_headers_for_beamtime<'py>( + py: Python<'py>, + db_path: &str, + beamtime_path: &str, + ) -> PyResult> { + use pyo3::types::PyDict; + let db = std::path::Path::new(db_path); + let beam = std::path::Path::new(beamtime_path); + let report = sync_missing_headers_for_beamtime(db, beam) + .map_err(|e| PyErr::new::(e.to_string()))?; + let d = PyDict::new_bound(py); + d.set_item("files_checked", report.files_checked)?; + d.set_item("files_updated", report.files_updated)?; + d.set_item("header_rows_inserted", report.header_rows_inserted)?; + Ok(d) + } + #[cfg(feature = "catalog")] #[pyfunction] #[pyo3(name = "py_beamtime_entries")] @@ -710,7 +759,7 @@ mod extension { /// Classify scan type from a list of ``(beamline_energy_eV, sample_theta_deg)`` pairs. pub fn py_classify_scan_type( pairs: Vec<(Option, Option)>, - ) -> PyResult<(String, Option, Option, Option, Option)> { + ) -> PyResult { let (st, e_min, e_max, t_min, t_max) = classify_scan_type(&pairs); Ok(( reflectivity_scan_type_id(st).to_string(), @@ -805,6 +854,11 @@ mod extension { py_scan_from_catalog_for_beamtime, m )?)?; + m.add_function(pyo3::wrap_pyfunction!(py_header_values_view, m)?)?; + m.add_function(pyo3::wrap_pyfunction!( + py_sync_missing_headers_for_beamtime, + m + )?)?; m.add_function(pyo3::wrap_pyfunction!(py_beamtime_entries, m)?)?; m.add_function(pyo3::wrap_pyfunction!(py_list_beamtimes, m)?)?; m.add_function(pyo3::wrap_pyfunction!(py_get_overrides, m)?)?; diff --git a/src/path_policy.rs b/src/path_policy.rs index 3628548..993969d 100644 --- a/src/path_policy.rs +++ b/src/path_policy.rs @@ -26,23 +26,20 @@ pub fn has_month_segment(path: &Path) -> bool { path.components().any(|c| { c.as_os_str() .to_str() - .map_or(false, |s| month_regex().is_match(s)) + .is_some_and(|s| month_regex().is_match(s)) }) } pub fn is_indexable_experiment_dir(path: &Path) -> bool { path.components() - .last() + .next_back() .and_then(|c| c.as_os_str().to_str()) - .map_or(false, |name| INDEXABLE_EXPERIMENTS.contains(&name)) + .is_some_and(|name| INDEXABLE_EXPERIMENTS.contains(&name)) } pub fn path_contains_excluded(path: &Path) -> bool { - path.components().any(|c| { - c.as_os_str() - .to_str() - .map_or(false, |s| s == EXCLUDED_SEGMENT) - }) + path.components() + .any(|c| c.as_os_str().to_str() == Some(EXCLUDED_SEGMENT)) } pub fn is_indexable_als_path(path: &Path) -> bool { diff --git a/src/schema.rs b/src/schema.rs index 80b065e..9443b83 100644 --- a/src/schema.rs +++ b/src/schema.rs @@ -1,5 +1,3 @@ -#![cfg(feature = "catalog")] - // schema.rs // // Diesel schema for the pyref catalog database. @@ -11,7 +9,7 @@ // and profile identity are promoted to first-class columns on the `frames` // table (sample_x, sample_y, sample_z, sample_theta, ccd_theta, // beamline_energy, epu_polarization, exposure, ring_current, ai3_izero, -// beam_current). Every remaining card is stored in the `frame_header_values` +// beam_current). Every remaining card is stored in the `header_values` // EAV table, keyed through `header_cards`, which is populated on first // ingestion from whatever cards are present in the FITS files. This makes the // schema forward-compatible when the beamline control system adds or renames @@ -29,7 +27,6 @@ // scan_type : "fixed_energy" | "fixed_angle" // profile_type : "fixed_energy" | "fixed_angle" // frame_role : "i0" | "stitch" | "overlap" | "reflectivity" -// card_category : "motor" | "ai" | "camera" | "metadata" // quality_flag : "ok" | "mislabeled_sample" | "parse_failure" // detection_flag : "ok" | "beam_detection_failed" | "beam_drift_anomaly" @@ -46,7 +43,7 @@ diesel::table! { /// /// `zarr_path` is the absolute local filesystem path to the beamtime's /// monolithic zarr archive, located at - /// `/pyref/.cache//beamtime.zarr`. All + /// `/cache//beamtime.zarr`. All /// post-ingestion image retrieval uses this path exclusively. The NAS /// does not need to be mounted for any workflow after ingestion completes. beamtimes (id) { @@ -223,19 +220,12 @@ diesel::table! { /// subsequent beamtimes with new card names append rows here without /// requiring a schema migration. /// - /// `card_category` classifies the card for UI and query purposes: - /// "motor" - physical positioning motor (Sample X, CCD Theta, etc.) - /// "ai" - analog input channel (Beam Current, TEY signal, etc.) - /// "camera" - CCD / detector configuration (ROI, binning, temp) - /// "metadata" - timing, instrument bookkeeping, MCS axes header_cards (id) { id -> Integer, /// Raw card name as it appears in the FITS header (e.g. "AI 3 Izero"). name -> Text, - /// Human-readable display name for UI use. + /// Normalized display name for UI use. display_name -> Text, - /// "motor" | "ai" | "camera" | "metadata" - card_category -> Text, } } @@ -244,14 +234,12 @@ diesel::table! { // --------------------------------------------------------------------------- diesel::table! { - /// One row per frame per scan. Contains all first-class reduction-critical - /// header values as typed columns, plus zarr retrieval keys. All remaining - /// header cards are stored in `frame_header_values`. + /// One row per frame per scan. Contains frame provenance + zarr retrieval + /// keys. Header card values are stored in `header_values`. /// /// Zarr retrieval: the monolithic beamtime archive is `beamtimes.zarr_path`. - /// Within the archive, raw images are stored per scan in shape buckets at - /// `/images/by_shape/x/scans//raw` as 3D arrays - /// `(bucket_frame_index, y, x)` within that scan. + /// Within the archive, raw images are stored per scan at + /// `/images/scans//raw` as 3D arrays `(bucket_frame_index, y, x)`. frames (id) { id -> Integer, scan_id -> Integer, @@ -261,36 +249,10 @@ diesel::table! { zarr_group_key -> Integer, /// Dataset index within the zarr group, equal to the frame number. zarr_frame_index -> Integer, - /// Shape bucket key in the form `x`. - zarr_shape_bucket -> Nullable, - /// Dense frame index within the shape bucket dataset. + /// Dense frame index within the per-scan 3D raw stack. zarr_bucket_frame_index -> Nullable, /// ISO 8601 acquisition timestamp from the DATE header card. acquired_at -> Nullable, - // --- first-class motor positions --- - /// Sample X stage position (mm). FITS card: "Sample X". - sample_x -> Double, - /// Sample Y stage position (mm). FITS card: "Sample Y". - sample_y -> Double, - /// Sample Z stage position (mm). FITS card: "Sample Z". - sample_z -> Double, - /// Sample theta (degrees). FITS card: "Sample Theta". - sample_theta -> Double, - /// CCD theta (degrees). FITS card: "CCD Theta". - ccd_theta -> Double, - /// Beamline energy (eV). FITS card: "Beamline Energy". - beamline_energy -> Double, - // --- first-class AI / beam channels --- - /// EPU polarization angle (degrees). FITS card: "EPU Polarization". - epu_polarization -> Double, - /// CCD exposure time (seconds). FITS card: "EXPOSURE". - exposure -> Double, - /// Storage ring current (mA). FITS card: "RINGCRNT". - ring_current -> Double, - /// Upstream gold mesh absorption current (V). FITS card: "AI 3 Izero". - ai3_izero -> Double, - /// Photodiode beam current (mA). FITS card: "Beam Current". - beam_current -> Double, // --- quality flag --- /// NULL when ok. "mislabeled_sample" when stage position deviates /// beyond configured tolerance for the attributed sample name. @@ -302,14 +264,13 @@ diesel::joinable!(frames -> scans (scan_id)); diesel::joinable!(frames -> files (file_id)); // --------------------------------------------------------------------------- -// Frame header values (EAV for non-critical cards) +// Header values (EAV for FITS cards) // --------------------------------------------------------------------------- diesel::table! { - /// Entity-attribute-value store for all FITS header cards not promoted to - /// first-class columns on `frames`. All card values from the primary HDU - /// are stored as Double; the card name is resolved through `header_cards`. - frame_header_values (id) { + /// Entity-attribute-value store for numeric FITS header card values. + /// The card name is resolved through `header_cards`. + header_values (id) { id -> Integer, frame_id -> Integer, header_card_id -> Integer, @@ -317,8 +278,8 @@ diesel::table! { } } -diesel::joinable!(frame_header_values -> frames (frame_id)); -diesel::joinable!(frame_header_values -> header_cards (header_card_id)); +diesel::joinable!(header_values -> frames (frame_id)); +diesel::joinable!(header_values -> header_cards (header_card_id)); // --------------------------------------------------------------------------- // Profiles @@ -528,7 +489,7 @@ diesel::allow_tables_to_appear_in_same_query!( scans, header_cards, frames, - frame_header_values, + header_values, profiles, profile_frames, beam_finding, From 148ee4caaa20aaf60038942e3a1af8dfd4d7fcd9 Mon Sep 17 00:00:00 2001 From: Harlan D Heilman <73567020+HarlanHeilman@users.noreply.github.com> Date: Thu, 23 Apr 2026 13:49:51 -0700 Subject: [PATCH 22/22] docs: organize prototyping API and workflow specs --- AGENTS.md | 111 +++--- docs/README.md | 37 ++ docs/prototyping/README.md | 53 +++ .../prototyping/api-design/api_flow_design.md | 316 ++++++++++++++++++ .../api-design/catalog_api_reference.md | 129 +++++++ .../api-design/header_normalization_spec.md | 54 +++ .../comprehensive_implementation_plan.md | 257 ++++++++++++++ .../development_documentation_guidelines.md | 60 ++++ .../references/header_summary_rules_schema.md | 34 ++ .../cell_01_catalog_and_selection.md | 94 ++++++ .../workflows/cell_02_profile_split.md | 71 ++++ .../cell_03_classify_and_i0_linking.md | 89 +++++ .../workflows/cell_04_mask_and_beamspot.md | 75 +++++ ...cell_05_persist_mask_and_spot_overrides.md | 51 +++ .../cell_06_reduction_and_uncertainty.md | 68 ++++ .../workflows/cell_07_role_diagnostics.md | 61 ++++ .../workflows/cell_08_stitch_compute.md | 50 +++ .../cell_09_profile_comparison_and_export.md | 64 ++++ .../workflows/just_process_flow.md | 64 ++++ .../workflows/lazy_refresh_with_watcher.md | 26 ++ 20 files changed, 1722 insertions(+), 42 deletions(-) create mode 100644 docs/README.md create mode 100644 docs/prototyping/README.md create mode 100644 docs/prototyping/api-design/api_flow_design.md create mode 100644 docs/prototyping/api-design/catalog_api_reference.md create mode 100644 docs/prototyping/api-design/header_normalization_spec.md create mode 100644 docs/prototyping/comprehensive_implementation_plan.md create mode 100644 docs/prototyping/development_documentation_guidelines.md create mode 100644 docs/prototyping/references/header_summary_rules_schema.md create mode 100644 docs/prototyping/workflows/cell_01_catalog_and_selection.md create mode 100644 docs/prototyping/workflows/cell_02_profile_split.md create mode 100644 docs/prototyping/workflows/cell_03_classify_and_i0_linking.md create mode 100644 docs/prototyping/workflows/cell_04_mask_and_beamspot.md create mode 100644 docs/prototyping/workflows/cell_05_persist_mask_and_spot_overrides.md create mode 100644 docs/prototyping/workflows/cell_06_reduction_and_uncertainty.md create mode 100644 docs/prototyping/workflows/cell_07_role_diagnostics.md create mode 100644 docs/prototyping/workflows/cell_08_stitch_compute.md create mode 100644 docs/prototyping/workflows/cell_09_profile_comparison_and_export.md create mode 100644 docs/prototyping/workflows/just_process_flow.md create mode 100644 docs/prototyping/workflows/lazy_refresh_with_watcher.md diff --git a/AGENTS.md b/AGENTS.md index f6d1d43..2f39bde 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -128,11 +128,13 @@ Connecting individual frames back to their originating sample, scan, and beamtim By default, `pyref` maintains a single persistent catalog that accumulates every beamtime the user has ever ingested. The **catalog** and **local zarr cache** share the same config root (not macOS “Application Support” unless you override with `PYREF_CATALOG_DB` / `PYREF_CACHE_ROOT`): -| Scope | Default path | -|-------|----------------| -| `catalog.db` | On macOS, always `~/.config/pyref/catalog.db`. On Linux and Windows, `$XDG_CONFIG_HOME/pyref/catalog.db` when `XDG_CONFIG_HOME` is set; otherwise `~/.config/pyref/catalog.db` (on Windows, `~` is the user profile, e.g. `C:\Users\\.config\pyref\catalog.db`). | + +| Scope | Default path | +| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `catalog.db` | On macOS, always `~/.config/pyref/catalog.db`. On Linux and Windows, `$XDG_CONFIG_HOME/pyref/catalog.db` when `XDG_CONFIG_HOME` is set; otherwise `~/.config/pyref/catalog.db` (on Windows, `~` is the user profile, e.g. `C:\Users\\.config\pyref\catalog.db`). | | Zarr (`beamtime.zarr`) | `/cache//beamtime.zarr`. Example on macOS: `~/.config/pyref/cache//beamtime.zarr`. `` is a stable SHA-256 digest of the beamtime root path recorded at ingestion time. The zarr tree is local-only; NAS-backed FITS are used for ingestion and re-ingestion, not for routine image reads after ingest. | + macOS ignores `XDG_CONFIG_HOME` for this default tree so a common misconfiguration (`XDG_CONFIG_HOME=$HOME/Library/Application Support`) cannot relocate pyref into Application Support. Use `PYREF_HOME` (tests) or `PYREF_CATALOG_DB` / `PYREF_CACHE_ROOT` when you need a non-default location. When `PYREF_HOME` is set (common in tests), both tooling expectations may still point at that directory for the catalog file (`/catalog.db`) as implemented in the Rust path resolver; production use relies on the defaults above unless overridden. @@ -181,12 +183,14 @@ A zarr archive on a fast local network share (e.g., 10GbE NFS or SMB) is accepta This table lives in the catalog database and is machine-local in semantics, even when the catalog is on a shared drive. It stores one row per registered NAS label for the current machine. The Rust IO layer reads this table on startup and caches the mappings in memory for the duration of the process. Agents must never read `path_aliases` directly from Python; path resolution is an IO-layer concern exposed through the `pyref.io` interface. -| Column | Type | Description | -|--------|------|-------------| -| `id` | `Integer` | Primary key. | -| `label` | `Text` | Short user-assigned NAS label (e.g., `als-data`). Unique per catalog. | -| `physical_path` | `Text` | Absolute filesystem path to the mount point on this machine. | -| `registered_at` | `Text` | ISO 8601 timestamp of last registration. | + +| Column | Type | Description | +| --------------- | --------- | --------------------------------------------------------------------- | +| `id` | `Integer` | Primary key. | +| `label` | `Text` | Short user-assigned NAS label (e.g., `als-data`). Unique per catalog. | +| `physical_path` | `Text` | Absolute filesystem path to the mount point on this machine. | +| `registered_at` | `Text` | ISO 8601 timestamp of last registration. | + ### Cataloging System @@ -199,45 +203,59 @@ The `profiles` table is the primary user-facing entry point. Users browse profil The 115 FITS primary HDU cards per frame are split into two tiers at ingestion time. Eleven cards that directly drive scan classification, beamspot localization, normalization, and profile identity are promoted to first-class typed columns on the `frames` table: `sample_x`, `sample_y`, `sample_z`, `sample_theta`, `ccd_theta`, `beamline_energy`, `epu_polarization`, `exposure`, `ring_current`, `ai3_izero`, and `beam_current`. All remaining cards are stored in the `frame_header_values` EAV table, keyed through the `header_cards` registry. The `header_cards` table is populated automatically on first ingestion from whatever cards are present in the FITS files; subsequent beamtimes with new or renamed channels append rows to this table without requiring a schema migration. If a card that was previously treated as non-critical needs to be queried as a first-class column, the correct remedy is a Diesel migration that adds the column to `frames` and backfills it from `frame_header_values`, not a workaround join. #### `beamtimes` + Root of the catalog hierarchy. Stores two path columns: `nas_uri`, which is the logical `nas://