From bcd78404d6a5520874e142fe43c25ed6dda58e53 Mon Sep 17 00:00:00 2001 From: Andrew Sazonov Date: Thu, 11 Jun 2026 17:45:56 +0200 Subject: [PATCH 01/35] Add preferred-orientation-category ADR suggestion --- docs/dev/adrs/index.md | 1 + .../preferred-orientation-category.md | 503 ++++++++++++++++++ 2 files changed, 504 insertions(+) create mode 100644 docs/dev/adrs/suggestions/preferred-orientation-category.md diff --git a/docs/dev/adrs/index.md b/docs/dev/adrs/index.md index 17e2d85a1..6aa0cf01e 100644 --- a/docs/dev/adrs/index.md +++ b/docs/dev/adrs/index.md @@ -37,6 +37,7 @@ folders. | Experiment model | Accepted | Immutable Experiment Type | Makes experiment type axes creation-time state rather than mutable runtime state. | [`immutable-experiment-type.md`](accepted/immutable-experiment-type.md) | | Experiment model | Accepted | Automatic Line-Segment Background Estimation | Detects line-segment background control points from the measured pattern, peak-insensitive and editable. | [`background-auto-estimate.md`](accepted/background-auto-estimate.md) | | Experiment model | Accepted | Calculation Without Measured Data | Adds a writable `data_range` category so a structure-only experiment is calculable and plottable without loaded data. | [`calculation-without-measured-data.md`](accepted/calculation-without-measured-data.md) | +| Experiment model | Suggestion | Preferred-Orientation Category | Adds a per-phase March–Dollase preferred-orientation category for textured powder refinement on the CrysPy backend. | [`preferred-orientation-category.md`](suggestions/preferred-orientation-category.md) | | Factories | Accepted | Factory Contracts and Metadata | Standardizes factory construction, metadata, compatibility, and registration behavior. | [`factory-contracts.md`](accepted/factory-contracts.md) | | Naming | Accepted | Factory Tag Naming | Defines canonical factory tag style and standard abbreviations. | [`factory-tag-naming.md`](accepted/factory-tag-naming.md) | | Persistence | Accepted | Free-Flag CIF Encoding | Encodes fit free/fixed state through CIF uncertainty syntax instead of a separate free list. | [`free-flag-cif-encoding.md`](accepted/free-flag-cif-encoding.md) | diff --git a/docs/dev/adrs/suggestions/preferred-orientation-category.md b/docs/dev/adrs/suggestions/preferred-orientation-category.md new file mode 100644 index 000000000..1091b9161 --- /dev/null +++ b/docs/dev/adrs/suggestions/preferred-orientation-category.md @@ -0,0 +1,503 @@ +# ADR: Preferred-Orientation Category (March–Dollase) + +**Status:** Proposed **Date:** 2026-06-11 + +This ADR follows the conventions in [`AGENTS.md`](../../../../AGENTS.md). + +## Context + +Powder samples are frequently **textured**: crystallites pack with a +preferred orientation (platy crystals lie flat, needles align), so the +measured Bragg intensities deviate from the random-powder average. Every +mature Rietveld code corrects for this. EasyDiffraction currently does +not, which blocks faithful refinement of many real powder datasets and +is a common feature request from scientists comparing against FullProf +or GSAS. + +Three independent sources confirm the same simple, widely used model — +**March–Dollase** — and were checked while preparing this ADR: + +1. **CrysPy backend (already supports it).** CrysPy implements the + *Modified March–Dollase* correction as a per-phase loop: + + ``` + loop_ + _texture_g_1 + _texture_g_2 + _texture_h_ax + _texture_k_ax + _texture_l_ax + _texture_label + 0.19247 0.90000 1.000 1.000 1.000 phase1 + ``` + + The class is `cryspy.C_item_loop_classes.cl_1_texture.Texture` / + `TextureL`; the math lives in + `cryspy.A_functions_base.preferred_orientation.calc_preferred_orientation_pd`. + The applied per-reflection factor is + + ``` + h = 1/g1 + (g1**2 - 1/g1) * sin²(α) + P(hkl) = g2 + (1 - g2) * h**(-1.5) + ``` + + where `α` is the angle between the texture axis `(h_ax, k_ax, l_ax)` + and the reflection. `g1` is the March coefficient (1 = no texture, + `<1` = platy/disk, `>1` = needle); `g2` is the **random (untextured) + fraction** that mixes the correction back toward 1. The correction is + applied in 1D CW (`rhochi_pd`), 2D (`rhochi_pd2d`), and TOF + (`rhochi_tof`) powder paths, keyed to a phase by `_texture_label`. + + **Verification performed for this ADR.** A standalone cubic test + (`P m -3 m`, a = 5 Å, axis `[0 0 1]`) was run through + `rhochi_calc_chi_sq_by_dictionary`: + + | Case | Result | + | --- | --- | + | No texture loop vs. `g1=1, g2=0` | identical (max Δ ≈ 1e-11) | + | `g1=1` vs. `g1=0.5, g2=0` | pattern strongly changes (max Δ ≈ 991; Σ intensity 7166 → 22101) | + | Per-reflection factor, `g1=0.5`, axis `[001]` | `(00l)` → 0.354, in-plane `(hk0)` → up to 8.0 | + + This confirms CrysPy applies a texture correction through this loop + and that `g1=1` (or absence of the loop) is a true no-op default. + Note `g2=1` collapses `P` to 1 regardless of `g1`, so the **March + coefficient, not the fraction, is the headline parameter**. + (CrysPy's *form* of the correction is non-standard and not + intensity-conserving — see Decision 6; the wiring and no-op + behaviour above are nonetheless correct.) + +2. **IUCr powder dictionary (`tmp/iucr-dicts/cif_pow.dic`).** The modern + DDLm dictionary defines a full `PD_PREF_ORIENT` category and a + `PD_PREF_ORIENT_MARCH_DOLLASE` subcategory with standard data names: + + | Data name | Meaning | In scope? | + | --- | --- | --- | + | `_pd_pref_orient_March_Dollase.r` (+`.r_su`) | March coefficient; 1 = unoriented, `(0,1)` disk, `(1,∞)` needle | yes ≡ `g1` | + | `_pd_pref_orient_March_Dollase.index_h/_k/_l` | texture direction | yes ≡ `h_ax/k_ax/l_ax` | + | `_pd_pref_orient_March_Dollase.hkl` | direction as a single string `[ h k l ]` | **no** | + | `_pd_pref_orient_March_Dollase.fract` (+`.fract_su`) | weight of *each direction* when several are combined (sum = 1) | **no** (single direction) | + | `_pd_pref_orient_March_Dollase.id` | row identity | yes | + | `_pd_pref_orient_March_Dollase.phase_id` | links to `_pd_phase.id` | yes | + | `_pd_pref_orient_March_Dollase.diffractogram_id` | links to `_pd_diffractogram.id` | optional | + + The **roles** line up across all three: IUCr `.r`, FullProf `Pref1`, + and CrysPy `g1` are all "the March coefficient" of the same category + shape, and IUCr `.index_h/_k/_l` ≡ CrysPy `h_ax/k_ax/l_ax` exactly. + But the *role* matching `.r ↔ g1` is **not** a numerical equality: + CrysPy's current `g1` parametrises a different, non-standard function + (Decision 6), so `g1` equals the IUCr/Dollase/FullProf `r` only at + `r = 1`. The category therefore adopts the IUCr name `r` for the + coefficient slot while treating the CrysPy backend value as a + backend-specific March-like coefficient until upstream corrects the + formula. + + Two names are deliberately **excluded**: + + - **`.hkl`** stores the direction as a bracketed array `[ 1 0 4 ]`. + gemmi's loop reader does not reliably round-trip this array + syntax, so we use the three scalar integer columns + `.index_h/_k/_l` instead. + - **`.fract`** is the weight of *each direction* when one phase + combines several March–Dollase directions. The initial category is + single-direction-per-phase, so `.fract` is out of scope. This also + removes any ambiguity with CrysPy's `g2`. + + There is **no IUCr standard name for CrysPy's `g2`** (the random, + untextured fraction). `g2` is used non-zero in one shipped CrysPy + example (`examples/rhochi_polarized_powder_2d_DyAl_5K_5T`, with + `g1=0.19247, g2=0.90000`), so it is a real — if rarely used — + capability for partially textured samples. Naming it is the main + decision below. + +3. **FullProf examples (`~/Applications/fullprof/Examples`).** The + `CrystalStructure-SAnnPrefOr/lamn_pm_pref.pcr` example applies + March–Dollase to LaMnO₃ (orthorhombic `Pbnm`, neutron CW, λ = 1.561 Å, + 3T2/LLB) with `Pref1 = 0.66` and a paired `lamn_pm_nor.pcr` with no + correction. This is cited here only as **background evidence** that + FullProf exposes the same model (`Pref1`/`Pref2` + an `h k l` + direction); it is **not** the verification reference. Both shipped + FullProf PO examples are simulated-annealing demos on *calculated* + data, so the verification case is constructed separately (see the + §Verification section, which builds on `pd-neut-cwl_pv_lbco`). + +The three models agree on the **category shape** — a single scalar +March coefficient plus an integer direction (and an optional random +fraction) — so a small, well-scoped category is sufficient. They do +**not** all agree on the numerical *function* that coefficient drives: +CrysPy 0.11.0 applies a non-standard, non-conserving variant (Decision +6). The category design below is therefore stable regardless, while the +CrysPy backend value is documented as temporarily non-portable. + +## Decision + +### 1. A new per-phase loop category `pref_orient` + +Add a loop-style category, **owned by the experiment**, that mirrors the +shape of the existing `linked_phases` category (each row keyed by a +phase id). This matches CrysPy exactly — texture is a per-phase loop on +the powder experiment, not a property of the structure — and lets a +multi-phase experiment give each phase its own correction. + +``` +src/easydiffraction/datablocks/experiment/categories/pref_orient/ + __init__.py + factory.py # PrefOrientFactory(FactoryBase), default tag + default.py # PrefOrient(CategoryItem), PrefOrients(CategoryCollection) +``` + +- `PrefOrient(CategoryItem)` — `_category_code = 'pref_orient'`, + `_category_entry_name = 'phase_id'`. +- `PrefOrients(CategoryCollection)` — `item_type=PrefOrient`, + `Compatibility(sample_form={POWDER}, scattering_type={BRAGG})`. + +**Scope: Bragg powder only.** `PdExperimentBase` +(`item/base.py:553`) is shared by both `BraggPdExperiment` +(`item/bragg_pd.py:38`) and `TotalPdExperiment` (PDF, +`item/total_pd.py:29`, `scattering_type=TOTAL`). `linked_phases` is +created on the shared base, but preferred orientation must **not** be — +PDFFIT has no PO support and a silent no-op on a total-scattering +experiment would mislead. Therefore `_pref_orient` is created **only in +`BraggPdExperiment.__init__`** (not in `PdExperimentBase`), so +`experiment.preferred_orientation` simply **does not exist** on PDF / +single-crystal experiments. Accessing it there raises `AttributeError` +— an explicit, discoverable failure rather than a silent no-op. The +`Compatibility(scattering_type={BRAGG})` metadata documents the same +contract for factory/introspection callers. + +- Within `BraggPdExperiment`, `_pref_orient` is created via + `PrefOrientFactory`, added to that class's + `_attach_category_parents()` list, and exposed read-only as + `experiment.preferred_orientation` (attribute, no `type` selector — + it is a fixed, single-implementation category like `linked_phases`, + not a switchable one, per + [`switchable-category-owned-selectors.md`](../accepted/switchable-category-owned-selectors.md)). + +### 2. Parameters per row + +| Python attr | Type | Default | Meaning | CrysPy | IUCr export name | +| --- | --- | --- | --- | --- | --- | +| `phase_id` | StringDescriptor | `'Si'` | phase this row corrects | `_texture_label` | `_pd_pref_orient_March_Dollase.phase_id` | +| `r` | Parameter (refinable) | `1.0` | March coefficient (1 = none) | `g_1` | `_pd_pref_orient_March_Dollase.r` | +| `h` / `k` / `l` | Descriptor (integer, fixed) | `0 / 0 / 1` | texture direction | `h_ax/k_ax/l_ax` | `_pd_pref_orient_March_Dollase.index_h/_k/_l` | +| `fraction` | Parameter (refinable) | `0.0` | random (untextured) fraction | `g_2` | *(see Decision 4)* | + +The headline parameter is named **`r`** to match the IUCr standard +(`_pd_pref_orient_March_Dollase.r`) and the crystallographic literature +(Dollase 1986); **`fraction`** is the random/untextured fraction. + +`r` uses `RangeValidator(gt=0.0)`; `fraction` uses +`RangeValidator(ge=0.0, le=1.0)`. The defaults (`r=1.0`, +`fraction=0.0`) make an empty or freshly added correction a +**mathematical no-op**, so existing projects and tutorials are +unaffected until a user opts in. + +**`h`/`k`/`l` are integer Descriptors, not refinable Parameters.** +CrysPy technically allows refining `h_ax/k_ax/l_ax`, but refining a +crystallographic texture direction as a continuous variable is +physically unusual and a common source of unstable fits. The direction +is a user-set Miller index; only `r` (and optionally `fraction`) refine. +If a continuous-direction use case ever appears, promoting the +descriptors to parameters is a backward-compatible change. + +### 3. User-facing API (Jupyter) + +```python +import easydiffraction as ed + +project = ed.Project() +project.experiments.add(name='hrpt', ...) # CW powder, neutron +expt = project.experiments['hrpt'] + +# Add a March–Dollase correction for a linked phase, axis [0 0 1]. +# Uses the keyword-based collection constructor `.create(...)`, exactly +# like `experiment.linked_phases.create(id=..., scale=...)`. +expt.preferred_orientation.create( + phase_id='lbco', + r=0.8, + h=0, k=0, l=1, +) + +po = expt.preferred_orientation['lbco'] +po.r.value = 0.75 # platy texture +po.r.free = True # refine the March coefficient +po.h.value, po.k.value, po.l.value = 0, 0, 1 # fixed Miller direction + +expt.preferred_orientation.show() # table of all corrections +``` + +Reading a property returns the live `Parameter`/`Descriptor` +(matching every other category); assigning sets `.value`. Refinement +follows the standard `.free = True` convention and is available on `r` +and `fraction` only. `fraction` stays optional and defaults to pure +March–Dollase, so a "simple preferred orientation" workflow only sets +`r` and the direction. + +### 4. CIF serialization + +EasyDiffraction keeps **two** CIF flavours, per +[`iucr-cif-tag-alignment.md`](../accepted/iucr-cif-tag-alignment.md): +short category-scoped tags for the day-to-day default save (and +round-trip), and dictionary-standard tags for the on-demand IUCr report +export. Categories with no IUCr counterpart (peak profile U/V/W, FCJ +asymmetry, background, the analysis categories) already export under the +project namespace `_easydiffraction_.*`; there is **no +"official-names-only" rule** for the report. `g2` follows that +established precedent. + +**Default / round-trip CIF** — all fields, short tags: + +``` +loop_ +_pref_orient.phase_id +_pref_orient.r +_pref_orient.index_h +_pref_orient.index_k +_pref_orient.index_l +_pref_orient.fraction + lbco 0.75 0 0 1 0.0 +``` + +The row is keyed by `phase_id` (the linked phase this correction +applies to), paralleling how `linked_phases` keys rows by the phase +`id`. The IUCr `_pd_pref_orient_March_Dollase.id` serial (1, 2, …) is +synthesised by the report writer and has no Python field. + +Per parameter, `CifHandler(names=['_pref_orient.r'], +iucr_name='_pd_pref_orient_March_Dollase.r')` — `names[0]` is the +canonical round-trip tag, `iucr_name` is what the report writer emits. +(Caveat: until CrysPy adopts the standard function — see Decision 6 — +the exported `.r` is CrysPy's `g1`, which only equals the IUCr/Dollase +`r` at `r = 1`. The mapping is kept so the CIF is forward-compatible +once the backend is corrected.) + +**IUCr report CIF** — standard fields under the dictionary category, the +non-standard `g2` under the project namespace. The IUCr writer is a +bespoke per-loop writer (`io/cif/iucr_writer.py`), so a dedicated +`_write_pref_orient_loop` controls exactly which columns appear: + +``` +loop_ +_pd_pref_orient_March_Dollase.id +_pd_pref_orient_March_Dollase.phase_id +_pd_pref_orient_March_Dollase.index_h +_pd_pref_orient_March_Dollase.index_k +_pd_pref_orient_March_Dollase.index_l +_pd_pref_orient_March_Dollase.r +_pd_pref_orient_March_Dollase.r_su + 1 lbco 0 0 1 0.75 0.0 +``` + +**`fraction` (g2) naming — resolved.** CrysPy's `g2` has no IUCr +standard name; IUCr `.fract` is a different quantity (multi-direction +weight) and is **not** reused for it. Decision: + +- The canonical default tag is `_pref_orient.fraction`. +- The report export name is `_easydiffraction_pref_orient.fraction` + — consistent with every other non-standard field's + `_easydiffraction_.*` form (never grafted onto the official + `_pd_pref_orient_March_Dollase` path, and never reusing `.fract`). +- Because mixing a project-namespace column into the official + March–Dollase loop is awkward and `g2 = 0` is both the default and + the standards-clean case, the report **omits `fraction` entirely when + it is 0** and, only when a user has set it non-zero, emits it as a + short separate item/loop in the `_easydiffraction_` namespace. The + common workflow therefore produces a fully standards-compliant report + with no project-namespace noise. + +Rejected alternatives for `g2`: reusing `_pd_pref_orient_March_Dollase.fract` +(semantically wrong — would mislead external tools); dropping `g2` +altogether (discards a capability the backend exercises in its own +example). Both are recorded under Alternatives Considered. + +### 5. Backend wiring + +- **CrysPy** (`analysis/calculators/cryspy.py`). Two paths, matching how + every other experiment parameter is handled: + + 1. **CIF construction** (`_convert_experiment_to_cryspy_cif`): after + `_cif_phase_section`, emit a `_texture_*` loop with one row per + `pref_orient` entry (emit unconditionally for every row; + `g1 = 1` is a no-op so a default row is harmless). Map + `r→_texture_g_1`, `fraction→_texture_g_2`, + `h/k/l→_texture_h_ax/_k_ax/_l_ax`, `phase_id→_texture_label`. + CrysPy parses this into the experiment block (`pd_`) of the + dictionary under the array keys `texture_g1`, `texture_g2`, + `texture_axis` (shape `(3, n_rows)`), `texture_name`, and the + `flags_texture_*` arrays (see `cl_1_texture.TextureL.get_dictionary`). + + 2. **Cached-dictionary refinement** (`_update_experiment_in_cryspy_dict`): + the calculator caches the parsed dict in `_cryspy_dicts[combined_name]` + and, on minimizer calls, patches scalar arrays in place rather than + rebuilding. Texture must join that pass-through, guarded like + `offset_sycos`: + + ```python + if 'texture_g1' in cryspy_expt_dict: + for i, po in enumerate(experiment.preferred_orientation): + cryspy_expt_dict['texture_g1'][i] = po.r.value + cryspy_expt_dict['texture_g2'][i] = po.fraction.value + ``` + + Only `r` and `fraction` **values** are patched. `h/k/l` are fixed + descriptors (never refined), so `texture_axis` is never patched + here. `r.free`/`fraction.free` are **not** pushed into the CrysPy + dict at all: EasyDiffraction runs CrysPy with + `flag_calc_analytical_derivatives=False`, so CrysPy's + `flags_texture_*` are unused; the free/fixed state is consumed by + the EasyDiffraction minimizer, which assembles the parameter list + from the live category and writes new `.value`s each iteration + (then this pass-through carries them into the cached dict). This is + identical to how `r`-like scalars (wavelength, offsets, resolution) + already work. + + 3. **Cache invalidation.** The cached dict's array *shapes* and row + identity are baked in at parse time, so any change to the **set or + identity of rows** — adding/removing a `pref_orient` row, or + changing a row's `phase_id` or `h/k/l` — must drop the cache so the + CIF is rebuilt. Extend `_invalidate_stale_cache` with a + `pref_orient` signature (a tuple of `(phase_id, h, k, l)` per row, + in order) tracked per `combined_name` exactly like + `_cached_peak_types`/`_cached_adp_types`: when the signature + changes, `self._cryspy_dicts.pop(combined_name, None)`. Value-only + edits to `r`/`fraction` do **not** invalidate — they flow through + path 2. +- **CrysFML / PDFFIT**: declare no support for now (like sample + displacement on CrysFML). `CalculatorSupport(calculators={CRYSPY})` + on the category; document the gap in a comment. + +### 6. Known backend limitation — CrysPy's texture function is non-standard + +CrysPy 0.11.0's "Modified March's function" +(`A_functions_base/preferred_orientation.py`) is **not** the standard +March–Dollase function that FullProf and GSAS-II use, and it does **not +conserve scattered intensity**. With `g2 = 0` it applies + +``` +P_cryspy(α) = [ (1/g1) cos²α + g1² sin²α ]^(-3/2) +``` + +whereas the textbook March–Dollase (Dollase 1986) is + +``` +P_dollase(α) = [ r² cos²α + (1/r) sin²α ]^(-3/2) +``` + +The exponent pattern differs (`{1/g1, g1²}` vs `{r², 1/r}`), so no +single `r = f(g1)` makes them equal; and the orientation average of +CrysPy's form is `g1^(-3/2)`, not `1`, so it rescales the integrated +total instead of only redistributing it. Numerically, CrysPy `g1=0.5` +spans 0.354 (axis) → 8.0 (perpendicular) and averages to 2.83, while +every standard `r` averages to exactly 1.0. + +Consequences for this category: + +- The decision is to **implement against CrysPy as-is** — the category, + API, serialization, and wiring are correct and useful regardless of + the backend's internal formula. `r` is passed straight through to + CrysPy's `g_1`. +- **The exported `_pd_pref_orient_March_Dollase.r` value is therefore + not yet portable** to/from FullProf/GSAS-II for `r ≠ 1`. This is a + documented backend limitation, not a category-design choice; it + resolves itself once CrysPy adopts the standard function. +- The divergence is captured for upstream reporting in + `tmp/cryspy/preferred-orientation/` (minimal `rcif`, a comparison + script calling the real CrysPy routine, and an `ISSUE.md` with + equations and FullProf/GSAS/Dollase references). A CrysPy issue is + to be filed; this ADR should link it once it has a number. + +## Consequences + +- Textured powder data can be refined against the CrysPy backend with a + small, discoverable API and standards-aligned CIF. +- One new category package plus experiment wiring and a CrysPy + serialization branch; no changes to the structure model. +- A new cross-engine verification case (on the `pd-neut-cwl_pv_lbco` + base) extends the existing FullProf suite (consistent with the + cross-engine work in commits #195–#199) and **documents** the CrysPy + texture-function divergence rather than hiding it. +- The `fraction` non-standard tag is a documented, opt-in wart; + pure March–Dollase remains the standards-clean default. +- CrysPy's non-standard texture formula (Decision 6) means refined `r` + values are not yet portable to FullProf/GSAS-II; the limitation is + documented, reproduced for upstream in + `tmp/cryspy/preferred-orientation/`, and clears once CrysPy is fixed. + +## Alternatives Considered + +- **Attach PO to the structure/phase instead of the experiment.** + Rejected: texture is a property of *how this sample was packed for + this measurement*, not of the crystal structure; the same phase in + two experiments can have different textures. CrysPy keys it to the + experiment, and `linked_phases` already establishes the + experiment-owns-per-phase pattern. +- **Switchable `pref_orient.type` category (March–Dollase vs. spherical + harmonics).** Deferred, not rejected — see Deferred Work. Introducing + the switchable machinery now would violate "no abstraction before a + second use case." +- **Scalar fields on the instrument category** (like sample + displacement). Rejected: PO is inherently per-phase and a loop; a flat + scalar cannot represent a multi-phase experiment. +- **Export `g2` as `_pd_pref_orient_March_Dollase.fract`.** Rejected: + `.fract` is the IUCr multi-direction weight, a different quantity; + reusing it would mislead any external program (checkCIF, pdCIFplotter) + reading the report. +- **Drop `g2`, fix pure March–Dollase (`g2 = 0`).** Rejected as the + default-only model: it discards the partially-textured capability the + backend exercises in its own DyAl example. Instead `g2` is kept but + defaults to `0.0`, so the standards-clean case is the default and the + non-standard tag only appears on explicit opt-in. + +## Deferred Work + +- **Spherical-harmonics texture.** The IUCr dictionary and CrysPy both + describe it; when a second model is actually needed, promote + `pref_orient` to a switchable category (`pref_orient.type`) per + [`switchable-category-owned-selectors.md`](../accepted/switchable-category-owned-selectors.md), + with March–Dollase as the default implementation. +- **Multi-direction March–Dollase** (several axes per phase with + `.fract` weights). The IUCr names exist; CrysPy's loop already allows + multiple rows per label. Out of scope until requested. +- **TOF and 2D PO.** CrysPy supports both; the category is beam-mode + agnostic, but initial wiring, verification, and the tutorial target + CW powder. +- **User tutorial.** A new `ed-XX` tutorial follows *after* the + verification case below lands, so the documented workflow rests on a + validated reference. Out of scope for the first implementation plan + beyond a placeholder. + +## Verification (cross-engine reference) + +FullProf ships **no standard Rietveld example that uses preferred +orientation**. The only two examples with a non-zero `Pref1` +(`CrystalStructure-SAnnPrefOr/lamn_pm_pref.pcr`, +`MagneticStructure-SAnnPrefOr/hobk_pm_pref.pcr`) are *simulated- +annealing* demos run against *calculated* data, not Rietveld +refinements against measured data — unsuitable as a verification +reference. + +Because of the backend limitation in Decision 6, the verification +notebook **documents the CrysPy↔FullProf mismatch** rather than +asserting agreement. It is built on the existing +**`pd-neut-cwl_pv_lbco`** case (La₀.₅Ba₀.₅CoO₃, neutron CW, +pseudo-Voigt — chosen as the base on request): + +1. Copy `docs/docs/verification/fullprof/pd-neut-cwl_pv_lbco/lbco.pcr`, + enable a single March–Dollase direction (texture axis `h k l` via the + phase `Pr1 Pr2 Pr3` line and a non-zero `Pref1`), and re-run FullProf + locally (`~/Applications/fullprof`) to regenerate `.prf`/`.bac`/`.sum` + with the standard March–Dollase correction active. +2. Add `pd-neut-cwl_pv-march_lbco` (paired `.py`/`.ipynb`) that builds + the same LBCO model in EasyDiffraction, sets + `expt.preferred_orientation` with `r` mapped to FullProf's `Pref1`, + and overlays the CrysPy pattern on the FullProf reference. The + notebook is expected to **show agreement at `r = 1` and a visible, + quantified divergence for `r ≠ 1`**, with a markdown cell explaining + the CrysPy formula difference and linking the upstream issue. + Because PO is CrysPy-only, the case compares CrysPy vs FullProf only + (no CrysFML column, unlike the base `lbco` case). + +This verification notebook is built **before any user tutorial**, so the +tutorial can cite a validated, well-understood workflow (including the +documented caveat). Producing the FullProf reference and the +verification notebook is the first deliverable of the implementation +plan's Phase 2. From 2a83b9b05d40d6f421a58b4ef07545a8b7a00677 Mon Sep 17 00:00:00 2001 From: Andrew Sazonov Date: Thu, 11 Jun 2026 17:46:03 +0200 Subject: [PATCH 02/35] Add preferred-orientation-category implementation plan --- .../plans/preferred-orientation-category.md | 290 ++++++++++++++++++ 1 file changed, 290 insertions(+) create mode 100644 docs/dev/plans/preferred-orientation-category.md diff --git a/docs/dev/plans/preferred-orientation-category.md b/docs/dev/plans/preferred-orientation-category.md new file mode 100644 index 000000000..c7ca4e7af --- /dev/null +++ b/docs/dev/plans/preferred-orientation-category.md @@ -0,0 +1,290 @@ +# Implementation Plan: Preferred-Orientation Category (March–Dollase) + +This plan follows [`AGENTS.md`](../../../AGENTS.md). No deliberate +exceptions to those instructions are taken. Per §Commits and §Planning, +when an AI agent executes this plan, **every completed Phase 1 step is +staged with explicit paths and committed locally before the next step +or the Phase 1 review gate**; commits are atomic and single-purpose. + +## ADR + +Implements [`preferred-orientation-category.md`](../adrs/suggestions/preferred-orientation-category.md) +(currently a **Suggestion**). This plan **owns** that ADR: a Phase 1 +step promotes it from `suggestions/` to `accepted/` (status flip + index +update) before the PR, per §Change Discipline. No other ADR is created. +Related accepted ADRs consulted: `iucr-cif-tag-alignment.md`, +`switchable-category-owned-selectors.md`, +`loop-category-key-identity.md`, `factory-contracts.md`. + +## Branch and PR + +- **Branch:** `preferred-orientation-category` (flat slug off + `develop`), created and checked out by `/draft-impl-1`'s setup. Do not + push unless asked. +- **PR target:** `develop` (not `master`). See the Suggested Pull + Request section at the end. + +## Decisions (settled in the ADR) + +- New **per-phase loop category `pref_orient`**, owned by the + experiment, mirroring `linked_phases`. Keyed by `phase_id`. +- Parameters per row: `r` (March coefficient, refinable, default 1.0), + `h`/`k`/`l` (fixed integer **descriptors**, default 0/0/1), + `fraction` (random fraction, refinable, default 0.0). Defaults are a + mathematical no-op. +- **Scope: Bragg powder only.** Created **only in `BraggPdExperiment`**, + not the shared `PdExperimentBase`, so PDF/total-scattering and + single-crystal experiments never expose `preferred_orientation` + (`AttributeError` on access, not a silent no-op). Compatibility: + `sample_form={POWDER}, scattering_type={BRAGG}`. +- **CrysPy-only** backend support (`CalculatorSupport({CRYSPY})`). +- CIF: short `_pref_orient.*` round-trip tags + IUCr + `_pd_pref_orient_March_Dollase.*` export; `fraction` namespaced under + `_easydiffraction_pref_orient.fraction` and omitted from the report + when 0; `.hkl`/`.fract` excluded. +- **Known backend limitation (ADR Decision 6):** CrysPy 0.11.0's texture + function is non-standard and not intensity-conserving, so `r` is not + portable to FullProf/GSAS for `r ≠ 1`. The verification notebook + **documents this mismatch** rather than asserting agreement. + +## Open questions + +- None blocking. The CrysPy formula divergence is documented and an + upstream issue is staged in `tmp/cryspy/preferred-orientation/`; this + plan does not depend on its resolution. + +## No new dependencies + +CrysPy is already a dependency; no `pyproject.toml`/`pixi.toml`/ +`pixi.lock` changes are required or authorised by this plan. + +## Concrete files likely to change + +**New (Phase 1):** + +- `src/easydiffraction/datablocks/experiment/categories/pref_orient/__init__.py` +- `src/easydiffraction/datablocks/experiment/categories/pref_orient/default.py` + (`PrefOrient(CategoryItem)`, `PrefOrients(CategoryCollection)`) +- `src/easydiffraction/datablocks/experiment/categories/pref_orient/factory.py` + (`PrefOrientFactory(FactoryBase)`) + +**Edited (Phase 1):** + +- `src/easydiffraction/datablocks/experiment/item/bragg_pd.py` + (create `_pref_orient`, expose `preferred_orientation` property) +- `src/easydiffraction/datablocks/experiment/item/base.py` + (add `getattr(self, '_pref_orient', None)` to the shared + `_attach_category_parents()` hook; no category creation here) +- `src/easydiffraction/analysis/calculators/cryspy.py` + (`_cif_phase_section` neighbour → texture loop emission; + `_update_experiment_in_cryspy_dict` pass-through; + `_invalidate_stale_cache` signature) +- `src/easydiffraction/io/cif/iucr_writer.py` + (`_write_pref_orient_loop`) +- `docs/dev/adrs/suggestions/preferred-orientation-category.md` → + `docs/dev/adrs/accepted/preferred-orientation-category.md` + (promotion) and `docs/dev/adrs/index.md` (status/link) + +**New/edited (Phase 2, tests + verification):** + +- `tests/unit/easydiffraction/datablocks/experiment/categories/test_pref_orient.py` + (parent-level roll-up, matching `test_linked_phases.py`) +- `tests/unit/easydiffraction/analysis/calculators/test_cryspy.py` + (texture emission + cache) and existing experiment/serialisation tests +- `docs/docs/verification/pd-neut-cwl_pv-march_lbco.py` (+ generated + `.ipynb`) and `docs/docs/verification/fullprof/pd-neut-cwl_pv-march_lbco/` + (regenerated FullProf reference) +- `docs/dev/package-structure/full.md` / `short.md` (auto-regenerated by + `pixi run fix` — never edited by hand) + +## Implementation steps (Phase 1) + +> Phase 1 is code + ADR/plan docs only. Do **not** write or run tests, +> linters, or `pixi` commands here (those are Phase 2). Commit each step +> atomically with explicit paths and the listed message before moving on. + +- [ ] **P1.1 — Create the `pref_orient` category package.** + Add `default.py` with `PrefOrient(CategoryItem)` + (`_category_code='pref_orient'`, `_category_entry_name='phase_id'`) + exposing: `phase_id` (`StringDescriptor`, default `'Si'`, regex + validator like `LinkedPhase.id`, `CifHandler(['_pref_orient.phase_id'], + iucr_name='_pd_pref_orient_March_Dollase.phase_id')`); `r` + (`Parameter`, default 1.0, `RangeValidator(gt=0.0)`, + `iucr_name='_pd_pref_orient_March_Dollase.r'`); `h`/`k`/`l` + (`IntegerDescriptor`, defaults 0/0/1, + `iucr_name='_pd_pref_orient_March_Dollase.index_h/_k/_l'`); + `fraction` (`Parameter`, default 0.0, `RangeValidator(ge=0.0, le=1.0)`, + `iucr_name='_easydiffraction_pref_orient.fraction'`). Add + `PrefOrients(CategoryCollection)` (`item_type=PrefOrient`, + `TypeInfo(tag='default')`, + `Compatibility(sample_form={POWDER}, scattering_type={BRAGG})`, + `CalculatorSupport({CRYSPY})`). Add `factory.py` + (`PrefOrientFactory(FactoryBase)`, default rule `frozenset(): 'default'`) + and `__init__.py` importing both classes to trigger + `@PrefOrientFactory.register`. Mirror the structure of + `categories/linked_phases/`. + Files: the three new `pref_orient/*` files. + Commit: `Add pref_orient preferred-orientation category` + +- [ ] **P1.2 — Wire `preferred_orientation` into Bragg powder + experiment.** + Creation and public exposure stay **Bragg-only**; only the + parent-attachment hook (shared) gains an optional entry. + - In `item/bragg_pd.py` `BraggPdExperiment.__init__`, **before** the + existing final `self._attach_category_parents()` call, create + `self._pref_orient = PrefOrientFactory.create(PrefOrientFactory.default_tag())`, + and add a read-only `preferred_orientation` property returning + `self._pref_orient` (no setter, no `type` selector). + - In `item/base.py`, add `getattr(self, '_pref_orient', None)` to the + `ExperimentBase._attach_category_parents()` list. This mirrors how + `_instrument`/`_background`/`_refln` — also created only in + `BraggPdExperiment` — are already linked through the shared + `getattr(..., None)` hook: non-Bragg experiments never set + `_pref_orient`, so they yield `None` and are skipped, and + `preferred_orientation` remains absent (`AttributeError`) on them. + `PdExperimentBase` and category *creation* are not touched. This + explicit `_parent` link is required so + `CategoryCollection.create()`/`add()` marks the experiment dirty + (`_need_categories_update`) on row changes. + - Confirm default-CIF serialisation is automatic (the owned + `CategoryCollection` is picked up by `_serializable_categories` + auto-discovery; no explicit registration needed). + Files: `item/bragg_pd.py`, `item/base.py`. + Commit: `Expose preferred_orientation on Bragg powder experiment` + +- [ ] **P1.3 — Emit the CrysPy `_texture_*` loop.** + In `analysis/calculators/cryspy.py`, after the `_cif_phase_section` + call in `_convert_experiment_to_cryspy_cif`, add a + `_cif_pref_orient_section` that writes one `_texture_*` loop row per + `experiment.preferred_orientation` entry, mapping + `r→_texture_g_1`, `fraction→_texture_g_2`, + `h/k/l→_texture_h_ax/_k_ax/_l_ax`, `phase_id→_texture_label`. Emit + unconditionally (rows with `r=1` are a no-op). Guard on the category + existing and being a Bragg powder experiment. + Files: `analysis/calculators/cryspy.py`. + Commit: `Emit texture loop in cryspy experiment CIF` + +- [ ] **P1.4 — CrysPy cached-dictionary pass-through and + invalidation.** + In `_update_experiment_in_cryspy_dict`, after the + `offset_sysin` block, patch `texture_g1`/`texture_g2` from + `r.value`/`fraction.value` per row, guarded by + `if 'texture_g1' in cryspy_expt_dict`. Do **not** patch + `texture_axis` (h/k/l are fixed). In `_invalidate_stale_cache`, add a + `pref_orient` signature — a tuple of `(phase_id, h, k, l)` per row, in + order — tracked per `combined_name` like `_cached_peak_types`; pop the + cached dict when the signature changes (row add/remove, `phase_id` or + `h/k/l` edit). Value-only `r`/`fraction` edits must not invalidate. + Files: `analysis/calculators/cryspy.py`. + Commit: `Pass preferred-orientation through cryspy cache` + +- [ ] **P1.5 — IUCr report-writer loop.** + In `io/cif/iucr_writer.py`, add `_write_pref_orient_loop(lines, + experiment)` emitting the official + `_pd_pref_orient_March_Dollase.{id,phase_id,index_h,index_k,index_l,r,r_su}` + columns (synthesise `.id` as a 1-based serial), called from the powder + experiment writer alongside the existing profile/refln loops. Emit a + separate `_easydiffraction_pref_orient.fraction` item only for rows + whose `fraction ≠ 0`; omit it entirely otherwise. Skip the whole loop + when the experiment has no `pref_orient` rows. + Files: `io/cif/iucr_writer.py`. + Commit: `Write preferred-orientation loop in IUCr report` + +- [ ] **P1.6 — Promote the ADR to accepted.** + `git mv docs/dev/adrs/suggestions/preferred-orientation-category.md + docs/dev/adrs/accepted/preferred-orientation-category.md`, set its + `**Status:**` to `Accepted`, fix its internal `../accepted/` links to + `./` as needed, and flip the `docs/dev/adrs/index.md` row from + `Suggestion`/`suggestions/...` to `Accepted`/`accepted/...`. (The + design-phase `_review-*`/`_reply-*` siblings are removed by + `/draft-impl-1`'s Phase A cleanup, not here.) + Files: the moved ADR, `docs/dev/adrs/index.md`. + Commit: `Promote preferred-orientation-category ADR to accepted` + +- [ ] **P1.7 — Phase 1 review gate (no code).** + Mark P1.1–P1.6 `[x]`, then stop for the Phase 1 review. + Commit: `Reach Phase 1 review gate` + +## Phase 2 — Verification + +> Stop after Phase 1 and wait for review approval before starting +> Phase 2. Phase 2 adds tests and the verification notebook, then runs +> the full check suite, committing fixes atomically. + +### Tests (add first) + +- Unit tests for the category package (the package has only + `default.py`/`factory.py`, so the single parent-level roll-up + `tests/unit/easydiffraction/datablocks/experiment/categories/test_pref_orient.py` + is the accepted layout per §Testing and + `tools/test_structure_check.py`, matching the existing + `test_linked_phases.py`): defaults are a no-op (`r=1`, + `fraction=0`), validators (`r>0`, `0≤fraction≤1`), `.create(...)` + row construction, CIF round-trip of `_pref_orient.*`. +- `preferred_orientation` is present on `BraggPdExperiment` and absent + (`AttributeError`) on `TotalPdExperiment`/single-crystal. +- CrysPy: texture loop emitted; cache pass-through updates `texture_g1`/ + `texture_g2`; signature change invalidates the cache. +- IUCr report writer emits the March–Dollase loop; `fraction=0` omits + the namespaced item. + +### Cross-engine verification notebook (on the LBCO base) + +1. Copy `docs/docs/verification/fullprof/pd-neut-cwl_pv_lbco/lbco.pcr`, + enable a single March–Dollase direction (texture axis via the phase + `Pr1 Pr2 Pr3` line and a non-zero `Pref1`), re-run FullProf locally + (`~/Applications/fullprof`) to regenerate `.prf`/`.bac`/`.sum` under + `docs/docs/verification/fullprof/pd-neut-cwl_pv-march_lbco/`. +2. Add `docs/docs/verification/pd-neut-cwl_pv-march_lbco.py` building the + same LBCO model, setting + `expt.preferred_orientation.create(phase_id='lbco', r=, h, k, l)`, + and overlaying CrysPy vs FullProf. Compare CrysPy-only (no CrysFML + column, since PO is CrysPy-only). Add a markdown cell explaining the + CrysPy formula difference (link the upstream issue): expect agreement + at `r=1` and a quantified divergence for `r ≠ 1`. +3. `pixi run notebook-prepare` to regenerate the `.ipynb`; commit source + `.py` + generated `.ipynb` + FullProf reference together. + +### Verification commands (zsh-safe log-capture) + +```sh +pixi run fix +pixi run check > /tmp/easydiffraction-check.log 2>&1; check_exit_code=$?; tail -n 200 /tmp/easydiffraction-check.log; exit $check_exit_code +pixi run unit-tests > /tmp/easydiffraction-unit.log 2>&1; unit_tests_exit_code=$?; tail -n 200 /tmp/easydiffraction-unit.log; exit $unit_tests_exit_code +pixi run integration-tests > /tmp/easydiffraction-integration.log 2>&1; integration_tests_exit_code=$?; tail -n 200 /tmp/easydiffraction-integration.log; exit $integration_tests_exit_code +pixi run script-tests > /tmp/easydiffraction-script.log 2>&1; script_tests_exit_code=$?; tail -n 200 /tmp/easydiffraction-script.log; exit $script_tests_exit_code +``` + +Notes: `pixi run fix` regenerates `docs/dev/package-structure/full.md` +and `short.md` automatically (commit them; never hand-edit). Leave +generated `docs/dev/benchmarking/*.csv` untracked. Do not raise lint +thresholds or add `# noqa`; refactor instead. + +## Status checklist + +- [ ] P1.1 Category package +- [ ] P1.2 Bragg experiment wiring +- [ ] P1.3 CrysPy texture-loop emission +- [ ] P1.4 CrysPy cache pass-through + invalidation +- [ ] P1.5 IUCr report-writer loop +- [ ] P1.6 Promote ADR to accepted +- [ ] P1.7 Phase 1 review gate +- [ ] Phase 2 tests +- [ ] Phase 2 FullProf reference + verification notebook +- [ ] Phase 2 full check suite green + +## Suggested Pull Request + +**Title:** Add preferred-orientation (March–Dollase) correction for +textured powder samples + +**Description:** Powder samples whose crystallites pack with a preferred +orientation (platy or needle-like grains) no longer have to be modelled +as ideal random powders. You can now add a March–Dollase +preferred-orientation correction to each phase in a constant-wavelength +Bragg powder experiment — set a March coefficient and a crystallographic +direction, refine the coefficient, and see the improved fit. The +setting is saved and restored in your project CIF and appears in the +IUCr-aligned report. Corrections run on the CrysPy engine; a +cross-checked verification example based on the LBCO dataset documents +how the CrysPy texture model currently compares with FullProf. From 76892cac5985abd733fff627f597a84fc80d159c Mon Sep 17 00:00:00 2001 From: Andrew Sazonov Date: Thu, 11 Jun 2026 17:49:12 +0200 Subject: [PATCH 03/35] Add pref_orient preferred-orientation category --- .../plans/preferred-orientation-category.md | 4 +- .../categories/pref_orient/__init__.py | 6 + .../categories/pref_orient/default.py | 202 ++++++++++++++++++ .../categories/pref_orient/factory.py | 17 ++ 4 files changed, 227 insertions(+), 2 deletions(-) create mode 100644 src/easydiffraction/datablocks/experiment/categories/pref_orient/__init__.py create mode 100644 src/easydiffraction/datablocks/experiment/categories/pref_orient/default.py create mode 100644 src/easydiffraction/datablocks/experiment/categories/pref_orient/factory.py diff --git a/docs/dev/plans/preferred-orientation-category.md b/docs/dev/plans/preferred-orientation-category.md index c7ca4e7af..4ece4b580 100644 --- a/docs/dev/plans/preferred-orientation-category.md +++ b/docs/dev/plans/preferred-orientation-category.md @@ -103,7 +103,7 @@ CrysPy is already a dependency; no `pyproject.toml`/`pixi.toml`/ > linters, or `pixi` commands here (those are Phase 2). Commit each step > atomically with explicit paths and the listed message before moving on. -- [ ] **P1.1 — Create the `pref_orient` category package.** +- [x] **P1.1 — Create the `pref_orient` category package.** Add `default.py` with `PrefOrient(CategoryItem)` (`_category_code='pref_orient'`, `_category_entry_name='phase_id'`) exposing: `phase_id` (`StringDescriptor`, default `'Si'`, regex @@ -262,7 +262,7 @@ thresholds or add `# noqa`; refactor instead. ## Status checklist -- [ ] P1.1 Category package +- [x] P1.1 Category package - [ ] P1.2 Bragg experiment wiring - [ ] P1.3 CrysPy texture-loop emission - [ ] P1.4 CrysPy cache pass-through + invalidation diff --git a/src/easydiffraction/datablocks/experiment/categories/pref_orient/__init__.py b/src/easydiffraction/datablocks/experiment/categories/pref_orient/__init__.py new file mode 100644 index 000000000..0ca588afa --- /dev/null +++ b/src/easydiffraction/datablocks/experiment/categories/pref_orient/__init__.py @@ -0,0 +1,6 @@ +# SPDX-FileCopyrightText: 2026 EasyScience contributors +# SPDX-License-Identifier: BSD-3-Clause +"""Preferred-orientation category (March-Dollase) for textured powders.""" + +from easydiffraction.datablocks.experiment.categories.pref_orient.default import PrefOrient +from easydiffraction.datablocks.experiment.categories.pref_orient.default import PrefOrients diff --git a/src/easydiffraction/datablocks/experiment/categories/pref_orient/default.py b/src/easydiffraction/datablocks/experiment/categories/pref_orient/default.py new file mode 100644 index 000000000..b0440793d --- /dev/null +++ b/src/easydiffraction/datablocks/experiment/categories/pref_orient/default.py @@ -0,0 +1,202 @@ +# SPDX-FileCopyrightText: 2026 EasyScience contributors +# SPDX-License-Identifier: BSD-3-Clause +"""Per-phase March-Dollase preferred-orientation corrections.""" + +from __future__ import annotations + +from easydiffraction.core.category import CategoryCollection +from easydiffraction.core.category import CategoryItem +from easydiffraction.core.display_handler import DisplayHandler +from easydiffraction.core.metadata import CalculatorSupport +from easydiffraction.core.metadata import Compatibility +from easydiffraction.core.metadata import TypeInfo +from easydiffraction.core.validation import AttributeSpec +from easydiffraction.core.validation import RangeValidator +from easydiffraction.core.validation import RegexValidator +from easydiffraction.core.variable import IntegerDescriptor +from easydiffraction.core.variable import Parameter +from easydiffraction.core.variable import StringDescriptor +from easydiffraction.datablocks.experiment.categories.pref_orient.factory import ( + PrefOrientFactory, +) +from easydiffraction.datablocks.experiment.item.enums import CalculatorEnum +from easydiffraction.datablocks.experiment.item.enums import SampleFormEnum +from easydiffraction.datablocks.experiment.item.enums import ScatteringTypeEnum +from easydiffraction.io.cif.handler import CifHandler + + +class PrefOrient(CategoryItem): + """March-Dollase preferred-orientation correction for one phase.""" + + _category_code = 'pref_orient' + _category_entry_name = 'phase_id' + + def __init__(self) -> None: + super().__init__() + + self._phase_id = StringDescriptor( + name='phase_id', + description='Identifier of the corrected phase', + value_spec=AttributeSpec( + default='Si', + validator=RegexValidator(pattern=r'^[A-Za-z_][A-Za-z0-9_]*$'), + ), + cif_handler=CifHandler( + names=['_pref_orient.phase_id'], + iucr_name='_pd_pref_orient_March_Dollase.phase_id', + ), + display_handler=DisplayHandler( + display_name='Phase', + latex_name='Phase', + ), + ) + self._r = Parameter( + name='r', + description='March coefficient (1 = no preferred orientation).', + value_spec=AttributeSpec( + default=1.0, + validator=RangeValidator(gt=0.0), + ), + cif_handler=CifHandler( + names=['_pref_orient.r'], + iucr_name='_pd_pref_orient_March_Dollase.r', + ), + display_handler=DisplayHandler( + display_name='March coefficient', + latex_name='r', + ), + ) + self._h = IntegerDescriptor( + name='h', + description='Texture-axis Miller index h', + value_spec=AttributeSpec(default=0), + cif_handler=CifHandler( + names=['_pref_orient.index_h'], + iucr_name='_pd_pref_orient_March_Dollase.index_h', + ), + display_handler=DisplayHandler( + display_name='h', + latex_name='h', + ), + ) + self._k = IntegerDescriptor( + name='k', + description='Texture-axis Miller index k', + value_spec=AttributeSpec(default=0), + cif_handler=CifHandler( + names=['_pref_orient.index_k'], + iucr_name='_pd_pref_orient_March_Dollase.index_k', + ), + display_handler=DisplayHandler( + display_name='k', + latex_name='k', + ), + ) + self._l = IntegerDescriptor( + name='l', + description='Texture-axis Miller index l', + value_spec=AttributeSpec(default=1), + cif_handler=CifHandler( + names=['_pref_orient.index_l'], + iucr_name='_pd_pref_orient_March_Dollase.index_l', + ), + display_handler=DisplayHandler( + display_name='l', + latex_name='l', + ), + ) + self._fraction = Parameter( + name='fraction', + description='Random (untextured) fraction; 0 = pure March-Dollase.', + value_spec=AttributeSpec( + default=0.0, + validator=RangeValidator(ge=0.0, le=1.0), + ), + cif_handler=CifHandler( + names=['_pref_orient.fraction'], + iucr_name='_easydiffraction_pref_orient.fraction', + ), + display_handler=DisplayHandler( + display_name='Random fraction', + latex_name='fraction', + ), + ) + + # ------------------------------------------------------------------ + # Public properties + # ------------------------------------------------------------------ + + @property + def phase_id(self) -> StringDescriptor: + """Identifier of the corrected phase.""" + return self._phase_id + + @phase_id.setter + def phase_id(self, value: str) -> None: + self._phase_id.value = value + + @property + def r(self) -> Parameter: + """March coefficient (1 = no preferred orientation).""" + return self._r + + @r.setter + def r(self, value: float) -> None: + self._r.value = value + + @property + def h(self) -> IntegerDescriptor: + """Texture-axis Miller index h.""" + return self._h + + @h.setter + def h(self, value: int) -> None: + self._h.value = value + + @property + def k(self) -> IntegerDescriptor: + """Texture-axis Miller index k.""" + return self._k + + @k.setter + def k(self, value: int) -> None: + self._k.value = value + + @property + def l(self) -> IntegerDescriptor: # noqa: E743 + """Texture-axis Miller index l.""" + return self._l + + @l.setter + def l(self, value: int) -> None: # noqa: E743 + self._l.value = value + + @property + def fraction(self) -> Parameter: + """Random (untextured) fraction; 0 = pure March-Dollase.""" + return self._fraction + + @fraction.setter + def fraction(self, value: float) -> None: + self._fraction.value = value + + +@PrefOrientFactory.register +class PrefOrients(CategoryCollection): + """Collection of per-phase preferred-orientation corrections.""" + + type_info = TypeInfo( + tag='default', + description='Per-phase March-Dollase preferred orientation', + ) + compatibility = Compatibility( + sample_form=frozenset({SampleFormEnum.POWDER}), + scattering_type=frozenset({ScatteringTypeEnum.BRAGG}), + ) + calculator_support = CalculatorSupport( + calculators=frozenset({CalculatorEnum.CRYSPY}), + ) + + def __init__(self) -> None: + """Create an empty collection of preferred-orientation rows.""" + super().__init__(item_type=PrefOrient) diff --git a/src/easydiffraction/datablocks/experiment/categories/pref_orient/factory.py b/src/easydiffraction/datablocks/experiment/categories/pref_orient/factory.py new file mode 100644 index 000000000..b3bf81f95 --- /dev/null +++ b/src/easydiffraction/datablocks/experiment/categories/pref_orient/factory.py @@ -0,0 +1,17 @@ +# SPDX-FileCopyrightText: 2026 EasyScience contributors +# SPDX-License-Identifier: BSD-3-Clause +"""Preferred-orientation factory — delegates entirely to ``FactoryBase``.""" + +from __future__ import annotations + +from typing import ClassVar + +from easydiffraction.core.factory import FactoryBase + + +class PrefOrientFactory(FactoryBase): + """Create preferred-orientation collections by tag.""" + + _default_rules: ClassVar[dict] = { + frozenset(): 'default', + } From 0e799aaa2af89ebc4a3222d1c88df30b8f6d60fe Mon Sep 17 00:00:00 2001 From: Andrew Sazonov Date: Thu, 11 Jun 2026 17:50:22 +0200 Subject: [PATCH 04/35] Expose preferred_orientation on Bragg powder experiment --- docs/dev/plans/preferred-orientation-category.md | 4 ++-- .../datablocks/experiment/item/base.py | 1 + .../datablocks/experiment/item/bragg_pd.py | 11 +++++++++++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/docs/dev/plans/preferred-orientation-category.md b/docs/dev/plans/preferred-orientation-category.md index 4ece4b580..be1ba0ca6 100644 --- a/docs/dev/plans/preferred-orientation-category.md +++ b/docs/dev/plans/preferred-orientation-category.md @@ -126,7 +126,7 @@ CrysPy is already a dependency; no `pyproject.toml`/`pixi.toml`/ Files: the three new `pref_orient/*` files. Commit: `Add pref_orient preferred-orientation category` -- [ ] **P1.2 — Wire `preferred_orientation` into Bragg powder +- [x] **P1.2 — Wire `preferred_orientation` into Bragg powder experiment.** Creation and public exposure stay **Bragg-only**; only the parent-attachment hook (shared) gains an optional entry. @@ -263,7 +263,7 @@ thresholds or add `# noqa`; refactor instead. ## Status checklist - [x] P1.1 Category package -- [ ] P1.2 Bragg experiment wiring +- [x] P1.2 Bragg experiment wiring - [ ] P1.3 CrysPy texture-loop emission - [ ] P1.4 CrysPy cache pass-through + invalidation - [ ] P1.5 IUCr report-writer loop diff --git a/src/easydiffraction/datablocks/experiment/item/base.py b/src/easydiffraction/datablocks/experiment/item/base.py index 77f92c218..3588681c3 100644 --- a/src/easydiffraction/datablocks/experiment/item/base.py +++ b/src/easydiffraction/datablocks/experiment/item/base.py @@ -97,6 +97,7 @@ def _attach_category_parents(self) -> None: getattr(self, '_instrument', None), getattr(self, '_refln', None), getattr(self, '_linked_phases', None), + getattr(self, '_pref_orient', None), getattr(self, '_excluded_regions', None), getattr(self, '_data', None), getattr(self, '_data_range', None), diff --git a/src/easydiffraction/datablocks/experiment/item/bragg_pd.py b/src/easydiffraction/datablocks/experiment/item/bragg_pd.py index 672a7c4c4..bc3573d32 100644 --- a/src/easydiffraction/datablocks/experiment/item/bragg_pd.py +++ b/src/easydiffraction/datablocks/experiment/item/bragg_pd.py @@ -12,6 +12,7 @@ from easydiffraction.core.metadata import TypeInfo from easydiffraction.datablocks.experiment.categories.background.factory import BackgroundFactory from easydiffraction.datablocks.experiment.categories.instrument.factory import InstrumentFactory +from easydiffraction.datablocks.experiment.categories.pref_orient.factory import PrefOrientFactory from easydiffraction.datablocks.experiment.categories.refln.factory import ReflnFactory from easydiffraction.datablocks.experiment.item.base import PdExperimentBase from easydiffraction.datablocks.experiment.item.enums import BeamModeEnum @@ -63,6 +64,7 @@ def __init__( ) self._instrument = InstrumentFactory.create(self._instrument_type) self._background = BackgroundFactory.create(BackgroundFactory.default_tag()) + self._pref_orient = PrefOrientFactory.create(PrefOrientFactory.default_tag()) self._refln = None self._sync_refln_category() self._attach_category_parents() @@ -187,6 +189,15 @@ def background(self) -> object: """Active background model for this experiment.""" return self._background + # ------------------------------------------------------------------ + # Preferred orientation (Bragg powder only) + # ------------------------------------------------------------------ + + @property + def preferred_orientation(self) -> object: + """Per-phase March-Dollase preferred-orientation corrections.""" + return self._pref_orient + def _restore_switchable_types(self, block: object) -> None: """ Restore Bragg powder switchable category types from CIF. From 2cbf6073307e4f1566996fbcaa7cdd9ecbfeee55 Mon Sep 17 00:00:00 2001 From: Andrew Sazonov Date: Thu, 11 Jun 2026 17:53:46 +0200 Subject: [PATCH 05/35] Emit texture loop in cryspy experiment CIF --- .../plans/preferred-orientation-category.md | 4 +- .../analysis/calculators/cryspy.py | 40 +++++++++++++++++++ 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/docs/dev/plans/preferred-orientation-category.md b/docs/dev/plans/preferred-orientation-category.md index be1ba0ca6..e742d7f7f 100644 --- a/docs/dev/plans/preferred-orientation-category.md +++ b/docs/dev/plans/preferred-orientation-category.md @@ -152,7 +152,7 @@ CrysPy is already a dependency; no `pyproject.toml`/`pixi.toml`/ Files: `item/bragg_pd.py`, `item/base.py`. Commit: `Expose preferred_orientation on Bragg powder experiment` -- [ ] **P1.3 — Emit the CrysPy `_texture_*` loop.** +- [x] **P1.3 — Emit the CrysPy `_texture_*` loop.** In `analysis/calculators/cryspy.py`, after the `_cif_phase_section` call in `_convert_experiment_to_cryspy_cif`, add a `_cif_pref_orient_section` that writes one `_texture_*` loop row per @@ -264,7 +264,7 @@ thresholds or add `# noqa`; refactor instead. - [x] P1.1 Category package - [x] P1.2 Bragg experiment wiring -- [ ] P1.3 CrysPy texture-loop emission +- [x] P1.3 CrysPy texture-loop emission - [ ] P1.4 CrysPy cache pass-through + invalidation - [ ] P1.5 IUCr report-writer loop - [ ] P1.6 Promote ADR to accepted diff --git a/src/easydiffraction/analysis/calculators/cryspy.py b/src/easydiffraction/analysis/calculators/cryspy.py index 6a4d97cae..f43f567e4 100644 --- a/src/easydiffraction/analysis/calculators/cryspy.py +++ b/src/easydiffraction/analysis/calculators/cryspy.py @@ -1026,6 +1026,7 @@ def _convert_experiment_to_cryspy_cif( # noqa: PLR6301 # Structure sections _cif_orient_matrix_section(cif_lines, expt_type) _cif_phase_section(cif_lines, expt_type, linked_structure) + _cif_pref_orient_section(cif_lines, expt_type, experiment, linked_structure) _cif_background_section(cif_lines, expt_type, twotheta_min, twotheta_max) # Measured data @@ -1297,6 +1298,45 @@ def _cif_phase_section( )) +def _cif_pref_orient_section( + cif_lines: list[str], + expt_type: object | None, + experiment: object, + linked_structure: object, +) -> None: + """Append the cryspy texture (March-Dollase) loop for the phase. + + cryspy keys texture to a phase by ``_texture_label``, so only the + ``pref_orient`` row whose ``phase_id`` matches the phase being + calculated is emitted. A row with ``r = 1`` is a mathematical + no-op; an empty collection (the default) emits nothing. + """ + if expt_type is None or expt_type.sample_form.value != SampleFormEnum.POWDER: + return + pref_orient = getattr(experiment, 'preferred_orientation', None) + if pref_orient is None: + return + phase_label = linked_structure.name + row = next( + (item for item in pref_orient if item.phase_id.value == phase_label), + None, + ) + if row is None: + return + cif_lines.extend(( + '', + 'loop_', + '_texture_label', + '_texture_g_1', + '_texture_g_2', + '_texture_h_ax', + '_texture_k_ax', + '_texture_l_ax', + f'{phase_label} {row.r.value} {row.fraction.value} ' + f'{row.h.value} {row.k.value} {row.l.value}', + )) + + def _cif_background_section( cif_lines: list[str], expt_type: object | None, From 1457e4c68e8e67a2e69866787f289d5a71818299 Mon Sep 17 00:00:00 2001 From: Andrew Sazonov Date: Thu, 11 Jun 2026 17:56:37 +0200 Subject: [PATCH 06/35] Pass preferred-orientation through cryspy cache --- .../plans/preferred-orientation-category.md | 4 +- .../analysis/calculators/cryspy.py | 53 +++++++++++++++++-- 2 files changed, 52 insertions(+), 5 deletions(-) diff --git a/docs/dev/plans/preferred-orientation-category.md b/docs/dev/plans/preferred-orientation-category.md index e742d7f7f..6ca59b9d8 100644 --- a/docs/dev/plans/preferred-orientation-category.md +++ b/docs/dev/plans/preferred-orientation-category.md @@ -164,7 +164,7 @@ CrysPy is already a dependency; no `pyproject.toml`/`pixi.toml`/ Files: `analysis/calculators/cryspy.py`. Commit: `Emit texture loop in cryspy experiment CIF` -- [ ] **P1.4 — CrysPy cached-dictionary pass-through and +- [x] **P1.4 — CrysPy cached-dictionary pass-through and invalidation.** In `_update_experiment_in_cryspy_dict`, after the `offset_sysin` block, patch `texture_g1`/`texture_g2` from @@ -265,7 +265,7 @@ thresholds or add `# noqa`; refactor instead. - [x] P1.1 Category package - [x] P1.2 Bragg experiment wiring - [x] P1.3 CrysPy texture-loop emission -- [ ] P1.4 CrysPy cache pass-through + invalidation +- [x] P1.4 CrysPy cache pass-through + invalidation - [ ] P1.5 IUCr report-writer loop - [ ] P1.6 Promote ADR to accepted - [ ] P1.7 Phase 1 review gate diff --git a/src/easydiffraction/analysis/calculators/cryspy.py b/src/easydiffraction/analysis/calculators/cryspy.py index f43f567e4..f364eafa0 100644 --- a/src/easydiffraction/analysis/calculators/cryspy.py +++ b/src/easydiffraction/analysis/calculators/cryspy.py @@ -70,6 +70,7 @@ def __init__(self) -> None: self._cryspy_dicts: dict[str, dict[str, Any]] = {} self._cached_peak_types: dict[str, str] = {} self._cached_adp_types: dict[str, tuple[str, ...]] = {} + self._cached_pref_orient: dict[str, tuple] = {} self._last_powder_phase_blocks: dict[str, dict[str, Any] | None] = {} def _invalidate_stale_cache( @@ -81,9 +82,10 @@ def _invalidate_stale_cache( """ Drop cached dict when experiment or structure config changed. - Checks both the peak profile type and the per-atom ADP types. - When either changes the cached dictionary is stale and must be - rebuilt from a fresh cryspy object. + Checks the peak profile type, the per-atom ADP types, and the + preferred-orientation row identities. When any changes the cached + dictionary is stale and must be rebuilt from a fresh cryspy + object. """ if 'peak' in type(experiment)._public_attrs(): current_type = experiment.peak.type_info.tag @@ -91,6 +93,19 @@ def _invalidate_stale_cache( self._cryspy_dicts.pop(combined_name, None) self._cached_peak_types[combined_name] = current_type + # Preferred-orientation row set/identity. Adding or removing a + # row, or changing a row's phase_id or h/k/l, changes the emitted + # texture loop's shape and must rebuild the dict. The refinable + # r/fraction values are patched in place, so they are excluded. + if 'preferred_orientation' in type(experiment)._public_attrs(): + current_pref_orient = tuple( + (item.phase_id.value, item.h.value, item.k.value, item.l.value) + for item in experiment.preferred_orientation + ) + if self._cached_pref_orient.get(combined_name) != current_pref_orient: + self._cryspy_dicts.pop(combined_name, None) + self._cached_pref_orient[combined_name] = current_pref_orient + if structure is not None: current_adp = tuple(atom.adp_type.value for atom in structure.atom_sites) if self._cached_adp_types.get(combined_name) != current_adp: @@ -693,6 +708,14 @@ def _update_experiment_in_cryspy_dict( cryspy_asymmetry[2] = experiment.peak.asym_empir_3.value cryspy_asymmetry[3] = experiment.peak.asym_empir_4.value + # Preferred orientation (March-Dollase): patch the + # refinable coefficient (g_1) and random fraction (g_2) + # in place, matched to each emitted texture row by phase + # label. h/k/l are fixed descriptors, so texture_axis is + # never patched. The keys are absent unless a texture + # loop was emitted, so guard. + _update_texture_in_cryspy_dict(cryspy_expt_dict, experiment) + elif experiment.type.beam_mode.value == BeamModeEnum.TIME_OF_FLIGHT: cryspy_expt_name = f'tof_{experiment.name}' cryspy_expt_dict = cryspy_dict[cryspy_expt_name] @@ -1337,6 +1360,30 @@ def _cif_pref_orient_section( )) +def _update_texture_in_cryspy_dict( + cryspy_expt_dict: dict[str, Any], + experiment: object, +) -> None: + """Patch cryspy texture ``g_1``/``g_2`` from preferred-orientation rows. + + Matches each emitted texture row to a ``pref_orient`` row by phase + label and writes the refinable coefficient and random fraction in + place. ``h/k/l`` are fixed descriptors, so ``texture_axis`` is never + touched. No-op when no texture loop was emitted. + """ + if 'texture_g1' not in cryspy_expt_dict: + return + pref_orient = getattr(experiment, 'preferred_orientation', None) + if pref_orient is None: + return + rows = {item.phase_id.value: item for item in pref_orient} + for index, label in enumerate(cryspy_expt_dict['texture_name']): + row = rows.get(str(label)) + if row is not None: + cryspy_expt_dict['texture_g1'][index] = row.r.value + cryspy_expt_dict['texture_g2'][index] = row.fraction.value + + def _cif_background_section( cif_lines: list[str], expt_type: object | None, From 53629a34299c6d730daa21c75b24dab708635c74 Mon Sep 17 00:00:00 2001 From: Andrew Sazonov Date: Thu, 11 Jun 2026 17:59:46 +0200 Subject: [PATCH 07/35] Write preferred-orientation loop in IUCr report --- .../plans/preferred-orientation-category.md | 4 +- src/easydiffraction/io/cif/iucr_writer.py | 58 +++++++++++++++++++ 2 files changed, 60 insertions(+), 2 deletions(-) diff --git a/docs/dev/plans/preferred-orientation-category.md b/docs/dev/plans/preferred-orientation-category.md index 6ca59b9d8..98fdae61e 100644 --- a/docs/dev/plans/preferred-orientation-category.md +++ b/docs/dev/plans/preferred-orientation-category.md @@ -178,7 +178,7 @@ CrysPy is already a dependency; no `pyproject.toml`/`pixi.toml`/ Files: `analysis/calculators/cryspy.py`. Commit: `Pass preferred-orientation through cryspy cache` -- [ ] **P1.5 — IUCr report-writer loop.** +- [x] **P1.5 — IUCr report-writer loop.** In `io/cif/iucr_writer.py`, add `_write_pref_orient_loop(lines, experiment)` emitting the official `_pd_pref_orient_March_Dollase.{id,phase_id,index_h,index_k,index_l,r,r_su}` @@ -266,7 +266,7 @@ thresholds or add `# noqa`; refactor instead. - [x] P1.2 Bragg experiment wiring - [x] P1.3 CrysPy texture-loop emission - [x] P1.4 CrysPy cache pass-through + invalidation -- [ ] P1.5 IUCr report-writer loop +- [x] P1.5 IUCr report-writer loop - [ ] P1.6 Promote ADR to accepted - [ ] P1.7 Phase 1 review gate - [ ] Phase 2 tests diff --git a/src/easydiffraction/io/cif/iucr_writer.py b/src/easydiffraction/io/cif/iucr_writer.py index 761814245..5335940ac 100644 --- a/src/easydiffraction/io/cif/iucr_writer.py +++ b/src/easydiffraction/io/cif/iucr_writer.py @@ -485,6 +485,7 @@ def _write_powder_pattern_block( _write_powder_pattern_refinement_section(lines, project) _write_powder_profile_loop(lines, experiment) _write_powder_refln_loop(lines, experiment) + _write_pref_orient_loop(lines, experiment) _write_powder_project_extensions(lines, experiment) return '\n'.join(lines) @@ -594,6 +595,63 @@ def _write_powder_refln_loop(lines: list[str], experiment: object) -> None: ) +def _write_pref_orient_loop(lines: list[str], experiment: object) -> None: + """Append the March-Dollase preferred-orientation loop. + + Standard fields use the IUCr ``_pd_pref_orient_March_Dollase.*`` + category (the ``.id`` serial is synthesised). The non-standard + random fraction (CrysPy ``g2``) is emitted under the project + namespace and only for rows whose fraction is non-zero, so the + common pure March-Dollase case produces a fully standard loop. + """ + rows = list(_collection_values(getattr(experiment, 'preferred_orientation', None))) + if not rows: + return + + _section(lines, 'Preferred orientation') + _write_loop( + lines, + ( + '_pd_pref_orient_March_Dollase.id', + '_pd_pref_orient_March_Dollase.phase_id', + '_pd_pref_orient_March_Dollase.index_h', + '_pd_pref_orient_March_Dollase.index_k', + '_pd_pref_orient_March_Dollase.index_l', + '_pd_pref_orient_March_Dollase.r', + '_pd_pref_orient_March_Dollase.r_su', + ), + [ + ( + str(index), + _attribute_value(row, 'phase_id'), + _attribute_value(row, 'h'), + _attribute_value(row, 'k'), + _attribute_value(row, 'l'), + _attribute_value(row, 'r'), + getattr(_attribute_descriptor(row, 'r'), 'uncertainty', None), + ) + for index, row in enumerate(rows, start=1) + ], + ) + + fraction_rows = [ + (str(index), _attribute_value(row, 'fraction')) + for index, row in enumerate(rows, start=1) + if _attribute_value(row, 'fraction') + ] + if not fraction_rows: + return + _section(lines, 'Preferred orientation random fraction') + _write_loop( + lines, + ( + '_easydiffraction_pref_orient.id', + '_easydiffraction_pref_orient.fraction', + ), + fraction_rows, + ) + + def _write_powder_project_extensions(lines: list[str], experiment: object) -> None: """Append powder EasyDiffraction extension values.""" extension_rows = _powder_extension_items(experiment) From 8c61ff2c0ff07979436afda7404ebf06cc7b976a Mon Sep 17 00:00:00 2001 From: Andrew Sazonov Date: Thu, 11 Jun 2026 18:01:45 +0200 Subject: [PATCH 08/35] Promote preferred-orientation-category ADR to accepted --- .../preferred-orientation-category.md | 8 ++++---- docs/dev/adrs/index.md | 2 +- docs/dev/plans/preferred-orientation-category.md | 13 +++++++------ 3 files changed, 12 insertions(+), 11 deletions(-) rename docs/dev/adrs/{suggestions => accepted}/preferred-orientation-category.md (98%) diff --git a/docs/dev/adrs/suggestions/preferred-orientation-category.md b/docs/dev/adrs/accepted/preferred-orientation-category.md similarity index 98% rename from docs/dev/adrs/suggestions/preferred-orientation-category.md rename to docs/dev/adrs/accepted/preferred-orientation-category.md index 1091b9161..034e3b6d4 100644 --- a/docs/dev/adrs/suggestions/preferred-orientation-category.md +++ b/docs/dev/adrs/accepted/preferred-orientation-category.md @@ -1,6 +1,6 @@ # ADR: Preferred-Orientation Category (March–Dollase) -**Status:** Proposed **Date:** 2026-06-11 +**Status:** Accepted **Date:** 2026-06-11 This ADR follows the conventions in [`AGENTS.md`](../../../../AGENTS.md). @@ -170,7 +170,7 @@ contract for factory/introspection callers. `experiment.preferred_orientation` (attribute, no `type` selector — it is a fixed, single-implementation category like `linked_phases`, not a switchable one, per - [`switchable-category-owned-selectors.md`](../accepted/switchable-category-owned-selectors.md)). + [`switchable-category-owned-selectors.md`](switchable-category-owned-selectors.md)). ### 2. Parameters per row @@ -235,7 +235,7 @@ March–Dollase, so a "simple preferred orientation" workflow only sets ### 4. CIF serialization EasyDiffraction keeps **two** CIF flavours, per -[`iucr-cif-tag-alignment.md`](../accepted/iucr-cif-tag-alignment.md): +[`iucr-cif-tag-alignment.md`](iucr-cif-tag-alignment.md): short category-scoped tags for the day-to-day default save (and round-trip), and dictionary-standard tags for the on-demand IUCr report export. Categories with no IUCr counterpart (peak profile U/V/W, FCJ @@ -452,7 +452,7 @@ Consequences for this category: - **Spherical-harmonics texture.** The IUCr dictionary and CrysPy both describe it; when a second model is actually needed, promote `pref_orient` to a switchable category (`pref_orient.type`) per - [`switchable-category-owned-selectors.md`](../accepted/switchable-category-owned-selectors.md), + [`switchable-category-owned-selectors.md`](switchable-category-owned-selectors.md), with March–Dollase as the default implementation. - **Multi-direction March–Dollase** (several axes per phase with `.fract` weights). The IUCr names exist; CrysPy's loop already allows diff --git a/docs/dev/adrs/index.md b/docs/dev/adrs/index.md index 6aa0cf01e..131dfa0c6 100644 --- a/docs/dev/adrs/index.md +++ b/docs/dev/adrs/index.md @@ -37,7 +37,7 @@ folders. | Experiment model | Accepted | Immutable Experiment Type | Makes experiment type axes creation-time state rather than mutable runtime state. | [`immutable-experiment-type.md`](accepted/immutable-experiment-type.md) | | Experiment model | Accepted | Automatic Line-Segment Background Estimation | Detects line-segment background control points from the measured pattern, peak-insensitive and editable. | [`background-auto-estimate.md`](accepted/background-auto-estimate.md) | | Experiment model | Accepted | Calculation Without Measured Data | Adds a writable `data_range` category so a structure-only experiment is calculable and plottable without loaded data. | [`calculation-without-measured-data.md`](accepted/calculation-without-measured-data.md) | -| Experiment model | Suggestion | Preferred-Orientation Category | Adds a per-phase March–Dollase preferred-orientation category for textured powder refinement on the CrysPy backend. | [`preferred-orientation-category.md`](suggestions/preferred-orientation-category.md) | +| Experiment model | Accepted | Preferred-Orientation Category | Adds a per-phase March–Dollase preferred-orientation category for textured powder refinement on the CrysPy backend. | [`preferred-orientation-category.md`](accepted/preferred-orientation-category.md) | | Factories | Accepted | Factory Contracts and Metadata | Standardizes factory construction, metadata, compatibility, and registration behavior. | [`factory-contracts.md`](accepted/factory-contracts.md) | | Naming | Accepted | Factory Tag Naming | Defines canonical factory tag style and standard abbreviations. | [`factory-tag-naming.md`](accepted/factory-tag-naming.md) | | Persistence | Accepted | Free-Flag CIF Encoding | Encodes fit free/fixed state through CIF uncertainty syntax instead of a separate free list. | [`free-flag-cif-encoding.md`](accepted/free-flag-cif-encoding.md) | diff --git a/docs/dev/plans/preferred-orientation-category.md b/docs/dev/plans/preferred-orientation-category.md index 98fdae61e..b6b6bf2c1 100644 --- a/docs/dev/plans/preferred-orientation-category.md +++ b/docs/dev/plans/preferred-orientation-category.md @@ -8,10 +8,11 @@ or the Phase 1 review gate**; commits are atomic and single-purpose. ## ADR -Implements [`preferred-orientation-category.md`](../adrs/suggestions/preferred-orientation-category.md) -(currently a **Suggestion**). This plan **owns** that ADR: a Phase 1 -step promotes it from `suggestions/` to `accepted/` (status flip + index -update) before the PR, per §Change Discipline. No other ADR is created. +Implements [`preferred-orientation-category.md`](../adrs/accepted/preferred-orientation-category.md) +(promoted to **Accepted** in step P1.6). This plan **owns** that ADR: a +Phase 1 step moves it from `suggestions/` to `accepted/` (status flip + +index update) before the PR, per §Change Discipline. No other ADR is +created. Related accepted ADRs consulted: `iucr-cif-tag-alignment.md`, `switchable-category-owned-selectors.md`, `loop-category-key-identity.md`, `factory-contracts.md`. @@ -190,7 +191,7 @@ CrysPy is already a dependency; no `pyproject.toml`/`pixi.toml`/ Files: `io/cif/iucr_writer.py`. Commit: `Write preferred-orientation loop in IUCr report` -- [ ] **P1.6 — Promote the ADR to accepted.** +- [x] **P1.6 — Promote the ADR to accepted.** `git mv docs/dev/adrs/suggestions/preferred-orientation-category.md docs/dev/adrs/accepted/preferred-orientation-category.md`, set its `**Status:**` to `Accepted`, fix its internal `../accepted/` links to @@ -267,7 +268,7 @@ thresholds or add `# noqa`; refactor instead. - [x] P1.3 CrysPy texture-loop emission - [x] P1.4 CrysPy cache pass-through + invalidation - [x] P1.5 IUCr report-writer loop -- [ ] P1.6 Promote ADR to accepted +- [x] P1.6 Promote ADR to accepted - [ ] P1.7 Phase 1 review gate - [ ] Phase 2 tests - [ ] Phase 2 FullProf reference + verification notebook From 402a6e6b92f2d1d9c867139e900b35994ff0a79f Mon Sep 17 00:00:00 2001 From: Andrew Sazonov Date: Thu, 11 Jun 2026 18:02:36 +0200 Subject: [PATCH 09/35] Reach Phase 1 review gate --- docs/dev/plans/preferred-orientation-category.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/dev/plans/preferred-orientation-category.md b/docs/dev/plans/preferred-orientation-category.md index b6b6bf2c1..7a3985d89 100644 --- a/docs/dev/plans/preferred-orientation-category.md +++ b/docs/dev/plans/preferred-orientation-category.md @@ -202,7 +202,7 @@ CrysPy is already a dependency; no `pyproject.toml`/`pixi.toml`/ Files: the moved ADR, `docs/dev/adrs/index.md`. Commit: `Promote preferred-orientation-category ADR to accepted` -- [ ] **P1.7 — Phase 1 review gate (no code).** +- [x] **P1.7 — Phase 1 review gate (no code).** Mark P1.1–P1.6 `[x]`, then stop for the Phase 1 review. Commit: `Reach Phase 1 review gate` @@ -269,7 +269,7 @@ thresholds or add `# noqa`; refactor instead. - [x] P1.4 CrysPy cache pass-through + invalidation - [x] P1.5 IUCr report-writer loop - [x] P1.6 Promote ADR to accepted -- [ ] P1.7 Phase 1 review gate +- [x] P1.7 Phase 1 review gate - [ ] Phase 2 tests - [ ] Phase 2 FullProf reference + verification notebook - [ ] Phase 2 full check suite green From fbefa3b8def81b6a5e89140b2357e70079291de3 Mon Sep 17 00:00:00 2001 From: Andrew Sazonov Date: Thu, 11 Jun 2026 18:16:17 +0200 Subject: [PATCH 10/35] Scope cryspy texture emission to constant wavelength --- .../accepted/preferred-orientation-category.md | 9 ++++++--- .../analysis/calculators/cryspy.py | 18 ++++++++++++++++-- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/docs/dev/adrs/accepted/preferred-orientation-category.md b/docs/dev/adrs/accepted/preferred-orientation-category.md index 034e3b6d4..7e6081850 100644 --- a/docs/dev/adrs/accepted/preferred-orientation-category.md +++ b/docs/dev/adrs/accepted/preferred-orientation-category.md @@ -315,9 +315,12 @@ example). Both are recorded under Alternatives Considered. every other experiment parameter is handled: 1. **CIF construction** (`_convert_experiment_to_cryspy_cif`): after - `_cif_phase_section`, emit a `_texture_*` loop with one row per - `pref_orient` entry (emit unconditionally for every row; - `g1 = 1` is a no-op so a default row is harmless). Map + `_cif_phase_section`, emit a `_texture_*` loop for the matching + `pref_orient` row. **Constant-wavelength only** for now — TOF is + Deferred Work, and emitting a TOF texture loop without the TOF + pass-through (point 2) would let refined values go stale, so TOF + emits nothing and the cache signature (point 3) is likewise + CW-scoped. `g1 = 1` is a no-op, so a default row is harmless. Map `r→_texture_g_1`, `fraction→_texture_g_2`, `h/k/l→_texture_h_ax/_k_ax/_l_ax`, `phase_id→_texture_label`. CrysPy parses this into the experiment block (`pd_`) of the diff --git a/src/easydiffraction/analysis/calculators/cryspy.py b/src/easydiffraction/analysis/calculators/cryspy.py index f364eafa0..61e9cfc4b 100644 --- a/src/easydiffraction/analysis/calculators/cryspy.py +++ b/src/easydiffraction/analysis/calculators/cryspy.py @@ -97,7 +97,13 @@ def _invalidate_stale_cache( # row, or changing a row's phase_id or h/k/l, changes the emitted # texture loop's shape and must rebuild the dict. The refinable # r/fraction values are patched in place, so they are excluded. - if 'preferred_orientation' in type(experiment)._public_attrs(): + # Constant-wavelength only, matching the texture-loop emission + # scope; TOF emits no texture and is not tracked here. + supports_texture = ( + 'preferred_orientation' in type(experiment)._public_attrs() + and experiment.type.beam_mode.value == BeamModeEnum.CONSTANT_WAVELENGTH + ) + if supports_texture: current_pref_orient = tuple( (item.phase_id.value, item.h.value, item.k.value, item.l.value) for item in experiment.preferred_orientation @@ -1334,7 +1340,15 @@ def _cif_pref_orient_section( calculated is emitted. A row with ``r = 1`` is a mathematical no-op; an empty collection (the default) emits nothing. """ - if expt_type is None or expt_type.sample_form.value != SampleFormEnum.POWDER: + # Initial support is constant-wavelength only (ADR Deferred Work); + # the TOF pass-through is not wired, so a TOF texture loop would + # go stale on refinement. Emit nothing for TOF to keep the scope + # consistent end to end. + if ( + expt_type is None + or expt_type.sample_form.value != SampleFormEnum.POWDER + or expt_type.beam_mode.value != BeamModeEnum.CONSTANT_WAVELENGTH + ): return pref_orient = getattr(experiment, 'preferred_orientation', None) if pref_orient is None: From 41ff1e41e0a95867b0e0d8685b323f40b99e0760 Mon Sep 17 00:00:00 2001 From: Andrew Sazonov Date: Thu, 11 Jun 2026 18:17:24 +0200 Subject: [PATCH 11/35] Bind preferred-orientation l property without noqa --- .../experiment/categories/pref_orient/default.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/easydiffraction/datablocks/experiment/categories/pref_orient/default.py b/src/easydiffraction/datablocks/experiment/categories/pref_orient/default.py index b0440793d..c3cdabf02 100644 --- a/src/easydiffraction/datablocks/experiment/categories/pref_orient/default.py +++ b/src/easydiffraction/datablocks/experiment/categories/pref_orient/default.py @@ -162,13 +162,12 @@ def k(self) -> IntegerDescriptor: def k(self, value: int) -> None: self._k.value = value - @property - def l(self) -> IntegerDescriptor: # noqa: E743 + def _get_l(self) -> IntegerDescriptor: """Texture-axis Miller index l.""" return self._l - @l.setter - def l(self, value: int) -> None: # noqa: E743 + def _set_l(self, value: int) -> None: + """Set the texture-axis Miller index l.""" self._l.value = value @property @@ -181,6 +180,14 @@ def fraction(self, value: float) -> None: self._fraction.value = value +# The crystallographic Miller index ``l`` must be public as ``po.l``, but +# a bare ``def l`` / ``l =`` inside the class body trips ruff E743/E741 +# for the ambiguous single-letter name. Binding the property as a class +# attribute (an attribute assignment, which the rule does not flag) keeps +# the public API without a per-line lint suppression. +PrefOrient.l = property(PrefOrient._get_l, PrefOrient._set_l) + + @PrefOrientFactory.register class PrefOrients(CategoryCollection): """Collection of per-phase preferred-orientation corrections.""" From 471c42e1820eab3d2705b1b6a2e11884a2b4b055 Mon Sep 17 00:00:00 2001 From: Andrew Sazonov Date: Thu, 11 Jun 2026 18:31:42 +0200 Subject: [PATCH 12/35] Rename preferred-orientation direction to index_h/k/l --- .../preferred-orientation-category.md | 24 ++++---- .../plans/preferred-orientation-category.md | 8 +-- .../analysis/calculators/cryspy.py | 9 ++- .../categories/pref_orient/default.py | 55 +++++++++---------- src/easydiffraction/io/cif/iucr_writer.py | 6 +- 5 files changed, 53 insertions(+), 49 deletions(-) diff --git a/docs/dev/adrs/accepted/preferred-orientation-category.md b/docs/dev/adrs/accepted/preferred-orientation-category.md index 7e6081850..57364c206 100644 --- a/docs/dev/adrs/accepted/preferred-orientation-category.md +++ b/docs/dev/adrs/accepted/preferred-orientation-category.md @@ -178,7 +178,7 @@ contract for factory/introspection callers. | --- | --- | --- | --- | --- | --- | | `phase_id` | StringDescriptor | `'Si'` | phase this row corrects | `_texture_label` | `_pd_pref_orient_March_Dollase.phase_id` | | `r` | Parameter (refinable) | `1.0` | March coefficient (1 = none) | `g_1` | `_pd_pref_orient_March_Dollase.r` | -| `h` / `k` / `l` | Descriptor (integer, fixed) | `0 / 0 / 1` | texture direction | `h_ax/k_ax/l_ax` | `_pd_pref_orient_March_Dollase.index_h/_k/_l` | +| `index_h` / `index_k` / `index_l` | Descriptor (integer, fixed) | `0 / 0 / 1` | texture direction | `h_ax/k_ax/l_ax` | `_pd_pref_orient_March_Dollase.index_h/_k/_l` | | `fraction` | Parameter (refinable) | `0.0` | random (untextured) fraction | `g_2` | *(see Decision 4)* | The headline parameter is named **`r`** to match the IUCr standard @@ -191,11 +191,13 @@ The headline parameter is named **`r`** to match the IUCr standard **mathematical no-op**, so existing projects and tutorials are unaffected until a user opts in. -**`h`/`k`/`l` are integer Descriptors, not refinable Parameters.** -CrysPy technically allows refining `h_ax/k_ax/l_ax`, but refining a -crystallographic texture direction as a continuous variable is -physically unusual and a common source of unstable fits. The direction -is a user-set Miller index; only `r` (and optionally `fraction`) refine. +**`index_h`/`index_k`/`index_l` are integer Descriptors, not refinable +Parameters.** They use the same names as the existing `refln` categories +(and avoid a bare ambiguous `l`). CrysPy technically allows refining +`h_ax/k_ax/l_ax`, but refining a crystallographic texture direction as a +continuous variable is physically unusual and a common source of +unstable fits. The direction is a user-set Miller index; only `r` (and +optionally `fraction`) refine. If a continuous-direction use case ever appears, promoting the descriptors to parameters is a backward-compatible change. @@ -214,13 +216,13 @@ expt = project.experiments['hrpt'] expt.preferred_orientation.create( phase_id='lbco', r=0.8, - h=0, k=0, l=1, + index_h=0, index_k=0, index_l=1, ) po = expt.preferred_orientation['lbco'] po.r.value = 0.75 # platy texture po.r.free = True # refine the March coefficient -po.h.value, po.k.value, po.l.value = 0, 0, 1 # fixed Miller direction +po.index_h.value, po.index_k.value, po.index_l.value = 0, 0, 1 # fixed Miller direction expt.preferred_orientation.show() # table of all corrections ``` @@ -322,7 +324,7 @@ example). Both are recorded under Alternatives Considered. emits nothing and the cache signature (point 3) is likewise CW-scoped. `g1 = 1` is a no-op, so a default row is harmless. Map `r→_texture_g_1`, `fraction→_texture_g_2`, - `h/k/l→_texture_h_ax/_k_ax/_l_ax`, `phase_id→_texture_label`. + `index_h/index_k/index_l→_texture_h_ax/_k_ax/_l_ax`, `phase_id→_texture_label`. CrysPy parses this into the experiment block (`pd_`) of the dictionary under the array keys `texture_g1`, `texture_g2`, `texture_axis` (shape `(3, n_rows)`), `texture_name`, and the @@ -341,7 +343,7 @@ example). Both are recorded under Alternatives Considered. cryspy_expt_dict['texture_g2'][i] = po.fraction.value ``` - Only `r` and `fraction` **values** are patched. `h/k/l` are fixed + Only `r` and `fraction` **values** are patched. `index_h`/`index_k`/`index_l` are fixed descriptors (never refined), so `texture_axis` is never patched here. `r.free`/`fraction.free` are **not** pushed into the CrysPy dict at all: EasyDiffraction runs CrysPy with @@ -356,7 +358,7 @@ example). Both are recorded under Alternatives Considered. 3. **Cache invalidation.** The cached dict's array *shapes* and row identity are baked in at parse time, so any change to the **set or identity of rows** — adding/removing a `pref_orient` row, or - changing a row's `phase_id` or `h/k/l` — must drop the cache so the + changing a row's `phase_id` or `index_h`/`index_k`/`index_l` — must drop the cache so the CIF is rebuilt. Extend `_invalidate_stale_cache` with a `pref_orient` signature (a tuple of `(phase_id, h, k, l)` per row, in order) tracked per `combined_name` exactly like diff --git a/docs/dev/plans/preferred-orientation-category.md b/docs/dev/plans/preferred-orientation-category.md index 7a3985d89..823c79df9 100644 --- a/docs/dev/plans/preferred-orientation-category.md +++ b/docs/dev/plans/preferred-orientation-category.md @@ -30,7 +30,7 @@ Related accepted ADRs consulted: `iucr-cif-tag-alignment.md`, - New **per-phase loop category `pref_orient`**, owned by the experiment, mirroring `linked_phases`. Keyed by `phase_id`. - Parameters per row: `r` (March coefficient, refinable, default 1.0), - `h`/`k`/`l` (fixed integer **descriptors**, default 0/0/1), + `index_h`/`index_k`/`index_l` (fixed integer **descriptors**, default 0/0/1), `fraction` (random fraction, refinable, default 0.0). Defaults are a mathematical no-op. - **Scope: Bragg powder only.** Created **only in `BraggPdExperiment`**, @@ -111,7 +111,7 @@ CrysPy is already a dependency; no `pyproject.toml`/`pixi.toml`/ validator like `LinkedPhase.id`, `CifHandler(['_pref_orient.phase_id'], iucr_name='_pd_pref_orient_March_Dollase.phase_id')`); `r` (`Parameter`, default 1.0, `RangeValidator(gt=0.0)`, - `iucr_name='_pd_pref_orient_March_Dollase.r'`); `h`/`k`/`l` + `iucr_name='_pd_pref_orient_March_Dollase.r'`); `index_h`/`index_k`/`index_l` (`IntegerDescriptor`, defaults 0/0/1, `iucr_name='_pd_pref_orient_March_Dollase.index_h/_k/_l'`); `fraction` (`Parameter`, default 0.0, `RangeValidator(ge=0.0, le=1.0)`, @@ -159,7 +159,7 @@ CrysPy is already a dependency; no `pyproject.toml`/`pixi.toml`/ `_cif_pref_orient_section` that writes one `_texture_*` loop row per `experiment.preferred_orientation` entry, mapping `r→_texture_g_1`, `fraction→_texture_g_2`, - `h/k/l→_texture_h_ax/_k_ax/_l_ax`, `phase_id→_texture_label`. Emit + `index_h/index_k/index_l→_texture_h_ax/_k_ax/_l_ax`, `phase_id→_texture_label`. Emit unconditionally (rows with `r=1` are a no-op). Guard on the category existing and being a Bragg powder experiment. Files: `analysis/calculators/cryspy.py`. @@ -175,7 +175,7 @@ CrysPy is already a dependency; no `pyproject.toml`/`pixi.toml`/ `pref_orient` signature — a tuple of `(phase_id, h, k, l)` per row, in order — tracked per `combined_name` like `_cached_peak_types`; pop the cached dict when the signature changes (row add/remove, `phase_id` or - `h/k/l` edit). Value-only `r`/`fraction` edits must not invalidate. + `index_h`/`index_k`/`index_l` edit). Value-only `r`/`fraction` edits must not invalidate. Files: `analysis/calculators/cryspy.py`. Commit: `Pass preferred-orientation through cryspy cache` diff --git a/src/easydiffraction/analysis/calculators/cryspy.py b/src/easydiffraction/analysis/calculators/cryspy.py index 61e9cfc4b..c2e7f1516 100644 --- a/src/easydiffraction/analysis/calculators/cryspy.py +++ b/src/easydiffraction/analysis/calculators/cryspy.py @@ -105,7 +105,12 @@ def _invalidate_stale_cache( ) if supports_texture: current_pref_orient = tuple( - (item.phase_id.value, item.h.value, item.k.value, item.l.value) + ( + item.phase_id.value, + item.index_h.value, + item.index_k.value, + item.index_l.value, + ) for item in experiment.preferred_orientation ) if self._cached_pref_orient.get(combined_name) != current_pref_orient: @@ -1370,7 +1375,7 @@ def _cif_pref_orient_section( '_texture_k_ax', '_texture_l_ax', f'{phase_label} {row.r.value} {row.fraction.value} ' - f'{row.h.value} {row.k.value} {row.l.value}', + f'{row.index_h.value} {row.index_k.value} {row.index_l.value}', )) diff --git a/src/easydiffraction/datablocks/experiment/categories/pref_orient/default.py b/src/easydiffraction/datablocks/experiment/categories/pref_orient/default.py index c3cdabf02..5127e7d06 100644 --- a/src/easydiffraction/datablocks/experiment/categories/pref_orient/default.py +++ b/src/easydiffraction/datablocks/experiment/categories/pref_orient/default.py @@ -66,8 +66,8 @@ def __init__(self) -> None: latex_name='r', ), ) - self._h = IntegerDescriptor( - name='h', + self._index_h = IntegerDescriptor( + name='index_h', description='Texture-axis Miller index h', value_spec=AttributeSpec(default=0), cif_handler=CifHandler( @@ -79,8 +79,8 @@ def __init__(self) -> None: latex_name='h', ), ) - self._k = IntegerDescriptor( - name='k', + self._index_k = IntegerDescriptor( + name='index_k', description='Texture-axis Miller index k', value_spec=AttributeSpec(default=0), cif_handler=CifHandler( @@ -92,8 +92,8 @@ def __init__(self) -> None: latex_name='k', ), ) - self._l = IntegerDescriptor( - name='l', + self._index_l = IntegerDescriptor( + name='index_l', description='Texture-axis Miller index l', value_spec=AttributeSpec(default=1), cif_handler=CifHandler( @@ -144,31 +144,36 @@ def r(self) -> Parameter: def r(self, value: float) -> None: self._r.value = value + # Miller indices use the ``index_h``/``index_k``/``index_l`` names + # already established by the ``refln`` categories. This also avoids + # a bare ambiguous ``l`` name (ruff E741/E743). + @property - def h(self) -> IntegerDescriptor: + def index_h(self) -> IntegerDescriptor: """Texture-axis Miller index h.""" - return self._h + return self._index_h - @h.setter - def h(self, value: int) -> None: - self._h.value = value + @index_h.setter + def index_h(self, value: int) -> None: + self._index_h.value = value @property - def k(self) -> IntegerDescriptor: + def index_k(self) -> IntegerDescriptor: """Texture-axis Miller index k.""" - return self._k + return self._index_k - @k.setter - def k(self, value: int) -> None: - self._k.value = value + @index_k.setter + def index_k(self, value: int) -> None: + self._index_k.value = value - def _get_l(self) -> IntegerDescriptor: + @property + def index_l(self) -> IntegerDescriptor: """Texture-axis Miller index l.""" - return self._l + return self._index_l - def _set_l(self, value: int) -> None: - """Set the texture-axis Miller index l.""" - self._l.value = value + @index_l.setter + def index_l(self, value: int) -> None: + self._index_l.value = value @property def fraction(self) -> Parameter: @@ -180,14 +185,6 @@ def fraction(self, value: float) -> None: self._fraction.value = value -# The crystallographic Miller index ``l`` must be public as ``po.l``, but -# a bare ``def l`` / ``l =`` inside the class body trips ruff E743/E741 -# for the ambiguous single-letter name. Binding the property as a class -# attribute (an attribute assignment, which the rule does not flag) keeps -# the public API without a per-line lint suppression. -PrefOrient.l = property(PrefOrient._get_l, PrefOrient._set_l) - - @PrefOrientFactory.register class PrefOrients(CategoryCollection): """Collection of per-phase preferred-orientation corrections.""" diff --git a/src/easydiffraction/io/cif/iucr_writer.py b/src/easydiffraction/io/cif/iucr_writer.py index 5335940ac..e7e6c6b69 100644 --- a/src/easydiffraction/io/cif/iucr_writer.py +++ b/src/easydiffraction/io/cif/iucr_writer.py @@ -624,9 +624,9 @@ def _write_pref_orient_loop(lines: list[str], experiment: object) -> None: ( str(index), _attribute_value(row, 'phase_id'), - _attribute_value(row, 'h'), - _attribute_value(row, 'k'), - _attribute_value(row, 'l'), + _attribute_value(row, 'index_h'), + _attribute_value(row, 'index_k'), + _attribute_value(row, 'index_l'), _attribute_value(row, 'r'), getattr(_attribute_descriptor(row, 'r'), 'uncertainty', None), ) From 22a4e801385ac786d545b46e68ea9c5389bc2481 Mon Sep 17 00:00:00 2001 From: Andrew Sazonov Date: Thu, 11 Jun 2026 18:35:39 +0200 Subject: [PATCH 13/35] Align plan and ADR with CW-only index_h/k/l wiring --- .../preferred-orientation-category.md | 14 ++++++----- .../plans/preferred-orientation-category.md | 24 ++++++++++++------- 2 files changed, 23 insertions(+), 15 deletions(-) diff --git a/docs/dev/adrs/accepted/preferred-orientation-category.md b/docs/dev/adrs/accepted/preferred-orientation-category.md index 57364c206..81ad98976 100644 --- a/docs/dev/adrs/accepted/preferred-orientation-category.md +++ b/docs/dev/adrs/accepted/preferred-orientation-category.md @@ -360,12 +360,14 @@ example). Both are recorded under Alternatives Considered. identity of rows** — adding/removing a `pref_orient` row, or changing a row's `phase_id` or `index_h`/`index_k`/`index_l` — must drop the cache so the CIF is rebuilt. Extend `_invalidate_stale_cache` with a - `pref_orient` signature (a tuple of `(phase_id, h, k, l)` per row, - in order) tracked per `combined_name` exactly like - `_cached_peak_types`/`_cached_adp_types`: when the signature - changes, `self._cryspy_dicts.pop(combined_name, None)`. Value-only - edits to `r`/`fraction` do **not** invalidate — they flow through - path 2. + `pref_orient` signature (a tuple of + `(phase_id, index_h, index_k, index_l)` per row, in order) tracked + per `combined_name` exactly like + `_cached_peak_types`/`_cached_adp_types`, and only for + constant-wavelength experiments (matching the CW-only emission + scope): when the signature changes, + `self._cryspy_dicts.pop(combined_name, None)`. Value-only edits to + `r`/`fraction` do **not** invalidate — they flow through path 2. - **CrysFML / PDFFIT**: declare no support for now (like sample displacement on CrysFML). `CalculatorSupport(calculators={CRYSPY})` on the category; document the gap in a comment. diff --git a/docs/dev/plans/preferred-orientation-category.md b/docs/dev/plans/preferred-orientation-category.md index 823c79df9..4abbb06d2 100644 --- a/docs/dev/plans/preferred-orientation-category.md +++ b/docs/dev/plans/preferred-orientation-category.md @@ -159,9 +159,12 @@ CrysPy is already a dependency; no `pyproject.toml`/`pixi.toml`/ `_cif_pref_orient_section` that writes one `_texture_*` loop row per `experiment.preferred_orientation` entry, mapping `r→_texture_g_1`, `fraction→_texture_g_2`, - `index_h/index_k/index_l→_texture_h_ax/_k_ax/_l_ax`, `phase_id→_texture_label`. Emit - unconditionally (rows with `r=1` are a no-op). Guard on the category - existing and being a Bragg powder experiment. + `index_h/index_k/index_l→_texture_h_ax/_k_ax/_l_ax`, + `phase_id→_texture_label`. **Constant-wavelength powder only** (guard + on `sample_form == POWDER` **and** `beam_mode == CONSTANT_WAVELENGTH`); + TOF is Deferred Work and must emit no texture, since its cached-dict + pass-through is not wired. Emit only the row matching the linked + phase; a row with `r=1` is a no-op. Files: `analysis/calculators/cryspy.py`. Commit: `Emit texture loop in cryspy experiment CIF` @@ -171,11 +174,14 @@ CrysPy is already a dependency; no `pyproject.toml`/`pixi.toml`/ `offset_sysin` block, patch `texture_g1`/`texture_g2` from `r.value`/`fraction.value` per row, guarded by `if 'texture_g1' in cryspy_expt_dict`. Do **not** patch - `texture_axis` (h/k/l are fixed). In `_invalidate_stale_cache`, add a - `pref_orient` signature — a tuple of `(phase_id, h, k, l)` per row, in - order — tracked per `combined_name` like `_cached_peak_types`; pop the - cached dict when the signature changes (row add/remove, `phase_id` or - `index_h`/`index_k`/`index_l` edit). Value-only `r`/`fraction` edits must not invalidate. + `texture_axis` (`index_h`/`index_k`/`index_l` are fixed). In + `_invalidate_stale_cache`, add a `pref_orient` signature — a tuple of + `(phase_id, index_h, index_k, index_l)` per row, in order — tracked + per `combined_name` like `_cached_peak_types`, and **only for + constant-wavelength** experiments (matching the emission scope); pop + the cached dict when the signature changes (row add/remove, `phase_id` + or `index_h`/`index_k`/`index_l` edit). Value-only `r`/`fraction` + edits must not invalidate. Files: `analysis/calculators/cryspy.py`. Commit: `Pass preferred-orientation through cryspy cache` @@ -238,7 +244,7 @@ CrysPy is already a dependency; no `pyproject.toml`/`pixi.toml`/ `docs/docs/verification/fullprof/pd-neut-cwl_pv-march_lbco/`. 2. Add `docs/docs/verification/pd-neut-cwl_pv-march_lbco.py` building the same LBCO model, setting - `expt.preferred_orientation.create(phase_id='lbco', r=, h, k, l)`, + `expt.preferred_orientation.create(phase_id='lbco', r=, index_h=, index_k=, index_l=)`, and overlaying CrysPy vs FullProf. Compare CrysPy-only (no CrysFML column, since PO is CrysPy-only). Add a markdown cell explaining the CrysPy formula difference (link the upstream issue): expect agreement From f9b3d17850a3dd6b0ad59cfd4e5bf80478407fab Mon Sep 17 00:00:00 2001 From: Andrew Sazonov Date: Thu, 11 Jun 2026 19:12:47 +0200 Subject: [PATCH 14/35] Add preferred-orientation unit tests --- .../analysis/calculators/test_cryspy.py | 100 ++++++++++++++ .../experiment/categories/test_pref_orient.py | 126 ++++++++++++++++++ .../io/cif/test_iucr_writer.py | 32 +++++ 3 files changed, 258 insertions(+) create mode 100644 tests/unit/easydiffraction/datablocks/experiment/categories/test_pref_orient.py diff --git a/tests/unit/easydiffraction/analysis/calculators/test_cryspy.py b/tests/unit/easydiffraction/analysis/calculators/test_cryspy.py index ddc866515..bbd108292 100644 --- a/tests/unit/easydiffraction/analysis/calculators/test_cryspy.py +++ b/tests/unit/easydiffraction/analysis/calculators/test_cryspy.py @@ -383,3 +383,103 @@ def test_temporarily_convert_to_u_notation_stashes_and_restores_beta(): assert aniso.adp_11.value == pytest.approx(0.001) assert aniso.adp_23.value == pytest.approx(-0.0002) assert '_atom_site_aniso.beta_11' in aniso.adp_11._cif_handler.names + + +def _bragg_powder_experiment(beam_mode): + """Build a real Bragg powder experiment with one PO row.""" + from easydiffraction import ExperimentFactory + + experiment = ExperimentFactory.from_scratch( + name='lbco', + sample_form='powder', + beam_mode=beam_mode, + radiation_probe='neutron', + scattering_type='bragg', + ) + experiment.preferred_orientation.create( + phase_id='lbco', r=0.5, index_h=0, index_k=0, index_l=1 + ) + return experiment + + +def test_cif_pref_orient_section_emits_for_constant_wavelength(): + import easydiffraction.analysis.calculators.cryspy as MUT + + experiment = _bragg_powder_experiment('constant wavelength') + structure = SimpleNamespace(name='lbco') + cif_lines: list[str] = [] + MUT._cif_pref_orient_section(cif_lines, experiment.type, experiment, structure) + text = '\n'.join(cif_lines) + + assert '_texture_g_1' in text + assert '_texture_label' in text + assert 'lbco 0.5' in text + + +def test_cif_pref_orient_section_skips_time_of_flight(): + # TOF is Deferred Work: no texture loop is emitted (the TOF cached + # pass-through is not wired), so values cannot go stale. + import easydiffraction.analysis.calculators.cryspy as MUT + + experiment = _bragg_powder_experiment('time-of-flight') + structure = SimpleNamespace(name='lbco') + cif_lines: list[str] = [] + MUT._cif_pref_orient_section(cif_lines, experiment.type, experiment, structure) + + assert not any('_texture_g_1' in line for line in cif_lines) + + +def test_update_texture_in_cryspy_dict_patches_g1_and_g2(): + import easydiffraction.analysis.calculators.cryspy as MUT + + experiment = _bragg_powder_experiment('constant wavelength') + experiment.preferred_orientation['lbco'].r = 0.6 + experiment.preferred_orientation['lbco'].fraction = 0.2 + + cryspy_expt_dict = { + 'texture_name': ['lbco'], + 'texture_g1': [1.0], + 'texture_g2': [0.0], + } + MUT._update_texture_in_cryspy_dict(cryspy_expt_dict, experiment) + + assert cryspy_expt_dict['texture_g1'][0] == 0.6 + assert cryspy_expt_dict['texture_g2'][0] == 0.2 + + +def test_update_texture_in_cryspy_dict_noop_without_texture_keys(): + import easydiffraction.analysis.calculators.cryspy as MUT + + experiment = _bragg_powder_experiment('constant wavelength') + cryspy_expt_dict = {'wavelength': [1.5]} + MUT._update_texture_in_cryspy_dict(cryspy_expt_dict, experiment) + + assert 'texture_g1' not in cryspy_expt_dict + + +def test_invalidate_stale_cache_drops_dict_on_pref_orient_axis_change(): + from easydiffraction.analysis.calculators.cryspy import CryspyCalculator + + experiment = _bragg_powder_experiment('constant wavelength') + calc = CryspyCalculator() + combined_name = 'lbco_lbco' + + # First pass records the peak/pref-orient signatures (and drops the + # cache because nothing was recorded yet); re-populate afterwards. + calc._invalidate_stale_cache(combined_name, experiment, None) + calc._cryspy_dicts[combined_name] = {'sentinel': True} + + # No change -> cache survives. + calc._invalidate_stale_cache(combined_name, experiment, None) + assert combined_name in calc._cryspy_dicts + + # Value-only edit must NOT invalidate. + experiment.preferred_orientation['lbco'].r = 2.0 + calc._invalidate_stale_cache(combined_name, experiment, None) + assert combined_name in calc._cryspy_dicts + + # Direction edit changes the signature and must drop the cache. + experiment.preferred_orientation['lbco'].index_l = 0 + experiment.preferred_orientation['lbco'].index_h = 1 + calc._invalidate_stale_cache(combined_name, experiment, None) + assert combined_name not in calc._cryspy_dicts diff --git a/tests/unit/easydiffraction/datablocks/experiment/categories/test_pref_orient.py b/tests/unit/easydiffraction/datablocks/experiment/categories/test_pref_orient.py new file mode 100644 index 000000000..0e7cf31ca --- /dev/null +++ b/tests/unit/easydiffraction/datablocks/experiment/categories/test_pref_orient.py @@ -0,0 +1,126 @@ +# SPDX-FileCopyrightText: 2026 EasyScience contributors +# SPDX-License-Identifier: BSD-3-Clause + + +def test_module_import(): + import easydiffraction.datablocks.experiment.categories.pref_orient as MUT + + assert MUT.__name__.endswith('pref_orient') + + +def test_pref_orient_defaults_are_noop(): + from easydiffraction.datablocks.experiment.categories.pref_orient import PrefOrient + + po = PrefOrient() + assert po.r.value == 1.0 # March coefficient: no texture + assert po.fraction.value == 0.0 # pure March-Dollase + assert (po.index_h.value, po.index_k.value, po.index_l.value) == (0, 0, 1) + assert po.phase_id.value == 'Si' + + +def test_pref_orient_property_setters(): + from easydiffraction.datablocks.experiment.categories.pref_orient import PrefOrient + + po = PrefOrient() + po.phase_id = 'lbco' + po.r = 0.75 + po.fraction = 0.2 + po.index_h = 1 + po.index_k = 0 + po.index_l = 2 + + assert po.phase_id.value == 'lbco' + assert po.r.value == 0.75 + assert po.fraction.value == 0.2 + assert (po.index_h.value, po.index_k.value, po.index_l.value) == (1, 0, 2) + + +def test_pref_orient_r_must_be_positive(monkeypatch): + from easydiffraction.datablocks.experiment.categories.pref_orient import PrefOrient + from easydiffraction.utils.logging import Logger + + monkeypatch.setattr(Logger, '_reaction', Logger.Reaction.WARN, raising=True) + + po = PrefOrient() + po.r = 0.0 # gt=0 -> rejected, keeps default + assert po.r.value == 1.0 + po.r = -0.5 + assert po.r.value == 1.0 + + +def test_pref_orient_fraction_within_unit_interval(monkeypatch): + from easydiffraction.datablocks.experiment.categories.pref_orient import PrefOrient + from easydiffraction.utils.logging import Logger + + monkeypatch.setattr(Logger, '_reaction', Logger.Reaction.WARN, raising=True) + + po = PrefOrient() + po.fraction = 1.5 # le=1 -> rejected + assert po.fraction.value == 0.0 + po.fraction = -0.1 # ge=0 -> rejected + assert po.fraction.value == 0.0 + po.fraction = 0.5 # valid + assert po.fraction.value == 0.5 + + +def test_pref_orients_create_and_default_cif(): + from easydiffraction.datablocks.experiment.categories.pref_orient import PrefOrients + + coll = PrefOrients() + coll.create(phase_id='lbco', r=0.8, index_h=0, index_k=0, index_l=1) + + cif = coll.as_cif + assert 'loop_' in cif + for tag in ( + '_pref_orient.phase_id', + '_pref_orient.r', + '_pref_orient.index_h', + '_pref_orient.index_k', + '_pref_orient.index_l', + '_pref_orient.fraction', + ): + assert tag in cif + + +def test_pref_orient_factory_and_metadata(): + from easydiffraction.datablocks.experiment.categories.pref_orient import PrefOrients + from easydiffraction.datablocks.experiment.categories.pref_orient.factory import ( + PrefOrientFactory, + ) + from easydiffraction.datablocks.experiment.item.enums import CalculatorEnum + from easydiffraction.datablocks.experiment.item.enums import SampleFormEnum + from easydiffraction.datablocks.experiment.item.enums import ScatteringTypeEnum + + coll = PrefOrientFactory.create(PrefOrientFactory.default_tag()) + assert isinstance(coll, PrefOrients) + assert PrefOrients.type_info.tag == 'default' + assert SampleFormEnum.POWDER in PrefOrients.compatibility.sample_form + assert ScatteringTypeEnum.BRAGG in PrefOrients.compatibility.scattering_type + assert PrefOrients.calculator_support.supports(CalculatorEnum.CRYSPY) + assert not PrefOrients.calculator_support.supports(CalculatorEnum.PDFFIT) + + +def test_preferred_orientation_exposed_on_bragg_powder_only(): + from easydiffraction import ExperimentFactory + + bragg = ExperimentFactory.from_scratch( + name='bragg', + sample_form='powder', + beam_mode='constant wavelength', + radiation_probe='neutron', + scattering_type='bragg', + ) + assert hasattr(bragg, 'preferred_orientation') + bragg.preferred_orientation.create(phase_id='bragg', r=0.5, index_h=0, index_k=0, index_l=1) + # The collection is parent-linked to the experiment, enabling dirty + # tracking on row changes. + assert bragg.preferred_orientation._parent is bragg + + total = ExperimentFactory.from_scratch( + name='total', + sample_form='powder', + beam_mode='constant wavelength', + radiation_probe='neutron', + scattering_type='total', + ) + assert not hasattr(total, 'preferred_orientation') diff --git a/tests/unit/easydiffraction/io/cif/test_iucr_writer.py b/tests/unit/easydiffraction/io/cif/test_iucr_writer.py index 39c933a2f..9a03a62b4 100644 --- a/tests/unit/easydiffraction/io/cif/test_iucr_writer.py +++ b/tests/unit/easydiffraction/io/cif/test_iucr_writer.py @@ -572,3 +572,35 @@ def test_atom_site_aniso_section_renders_beta_header_and_tags(): assert 'Anisotropic ADP (beta)' in text assert '_atom_site_aniso.beta_11' in text + + +def test_write_pref_orient_loop_standard_and_fraction(): + from easydiffraction.datablocks.experiment.categories.pref_orient import PrefOrients + from easydiffraction.io.cif import iucr_writer as W + + coll = PrefOrients() + coll.create(phase_id='lbco', r=0.75, index_h=0, index_k=0, index_l=1) # fraction=0 + experiment = SimpleNamespace(preferred_orientation=coll) + + lines: list[str] = [] + W._write_pref_orient_loop(lines, experiment) + text = '\n'.join(lines) + assert '_pd_pref_orient_March_Dollase.r' in text + assert '_pd_pref_orient_March_Dollase.index_l' in text + # fraction == 0 -> the non-standard namespaced item is omitted + assert '_easydiffraction_pref_orient.fraction' not in text + + coll['lbco'].fraction = 0.3 + lines2: list[str] = [] + W._write_pref_orient_loop(lines2, experiment) + assert '_easydiffraction_pref_orient.fraction' in '\n'.join(lines2) + + +def test_write_pref_orient_loop_empty_is_noop(): + from easydiffraction.datablocks.experiment.categories.pref_orient import PrefOrients + from easydiffraction.io.cif import iucr_writer as W + + experiment = SimpleNamespace(preferred_orientation=PrefOrients()) + lines: list[str] = [] + W._write_pref_orient_loop(lines, experiment) + assert lines == [] From 9e1f75dba82b1d5a9af7c0d5a098d4d7a620486a Mon Sep 17 00:00:00 2001 From: Andrew Sazonov Date: Thu, 11 Jun 2026 19:12:47 +0200 Subject: [PATCH 15/35] Apply pixi run fix auto-fixes --- docs/dev/package-structure/full.md | 7 ++++ docs/dev/package-structure/short.md | 4 ++ .../analysis/calculators/cryspy.py | 38 +++++++++++-------- .../categories/pref_orient/__init__.py | 4 +- .../categories/pref_orient/default.py | 4 +- .../categories/pref_orient/factory.py | 4 +- src/easydiffraction/io/cif/iucr_writer.py | 3 +- 7 files changed, 42 insertions(+), 22 deletions(-) diff --git a/docs/dev/package-structure/full.md b/docs/dev/package-structure/full.md index fda9a0068..cb5726ac5 100644 --- a/docs/dev/package-structure/full.md +++ b/docs/dev/package-structure/full.md @@ -407,6 +407,13 @@ │ │ │ │ │ └── 🏷️ class TotalGaussianDampedSinc │ │ │ │ └── 📄 total_mixins.py │ │ │ │ └── 🏷️ class TotalBroadeningMixin +│ │ │ ├── 📁 pref_orient +│ │ │ │ ├── 📄 __init__.py +│ │ │ │ ├── 📄 default.py +│ │ │ │ │ ├── 🏷️ class PrefOrient +│ │ │ │ │ └── 🏷️ class PrefOrients +│ │ │ │ └── 📄 factory.py +│ │ │ │ └── 🏷️ class PrefOrientFactory │ │ │ ├── 📁 refln │ │ │ │ ├── 📄 __init__.py │ │ │ │ ├── 📄 bragg_pd.py diff --git a/docs/dev/package-structure/short.md b/docs/dev/package-structure/short.md index 8e7929e62..2b49d94ef 100644 --- a/docs/dev/package-structure/short.md +++ b/docs/dev/package-structure/short.md @@ -193,6 +193,10 @@ │ │ │ │ ├── 📄 tof_mixins.py │ │ │ │ ├── 📄 total.py │ │ │ │ └── 📄 total_mixins.py +│ │ │ ├── 📁 pref_orient +│ │ │ │ ├── 📄 __init__.py +│ │ │ │ ├── 📄 default.py +│ │ │ │ └── 📄 factory.py │ │ │ ├── 📁 refln │ │ │ │ ├── 📄 __init__.py │ │ │ │ ├── 📄 bragg_pd.py diff --git a/src/easydiffraction/analysis/calculators/cryspy.py b/src/easydiffraction/analysis/calculators/cryspy.py index c2e7f1516..ac156e914 100644 --- a/src/easydiffraction/analysis/calculators/cryspy.py +++ b/src/easydiffraction/analysis/calculators/cryspy.py @@ -83,9 +83,9 @@ def _invalidate_stale_cache( Drop cached dict when experiment or structure config changed. Checks the peak profile type, the per-atom ADP types, and the - preferred-orientation row identities. When any changes the cached - dictionary is stale and must be rebuilt from a fresh cryspy - object. + preferred-orientation row identities. When any changes the + cached dictionary is stale and must be rebuilt from a fresh + cryspy object. """ if 'peak' in type(experiment)._public_attrs(): current_type = experiment.peak.type_info.tag @@ -94,11 +94,12 @@ def _invalidate_stale_cache( self._cached_peak_types[combined_name] = current_type # Preferred-orientation row set/identity. Adding or removing a - # row, or changing a row's phase_id or h/k/l, changes the emitted - # texture loop's shape and must rebuild the dict. The refinable - # r/fraction values are patched in place, so they are excluded. - # Constant-wavelength only, matching the texture-loop emission - # scope; TOF emits no texture and is not tracked here. + # row, or changing a row's phase_id or Miller direction, + # changes the emitted texture loop's shape and must rebuild the + # dict. The refinable r/fraction values are patched in place, so + # they are excluded. Constant-wavelength only, matching the + # texture-loop emission scope; TOF emits no texture and is not + # tracked here. supports_texture = ( 'preferred_orientation' in type(experiment)._public_attrs() and experiment.type.beam_mode.value == BeamModeEnum.CONSTANT_WAVELENGTH @@ -1338,12 +1339,13 @@ def _cif_pref_orient_section( experiment: object, linked_structure: object, ) -> None: - """Append the cryspy texture (March-Dollase) loop for the phase. + """ + Append the cryspy texture (March-Dollase) loop for the phase. cryspy keys texture to a phase by ``_texture_label``, so only the ``pref_orient`` row whose ``phase_id`` matches the phase being - calculated is emitted. A row with ``r = 1`` is a mathematical - no-op; an empty collection (the default) emits nothing. + calculated is emitted. A row with ``r = 1`` is a mathematical no-op; + an empty collection (the default) emits nothing. """ # Initial support is constant-wavelength only (ADR Deferred Work); # the TOF pass-through is not wired, so a TOF texture loop would @@ -1374,8 +1376,10 @@ def _cif_pref_orient_section( '_texture_h_ax', '_texture_k_ax', '_texture_l_ax', - f'{phase_label} {row.r.value} {row.fraction.value} ' - f'{row.index_h.value} {row.index_k.value} {row.index_l.value}', + ( + f'{phase_label} {row.r.value} {row.fraction.value} ' + f'{row.index_h.value} {row.index_k.value} {row.index_l.value}' + ), )) @@ -1383,12 +1387,14 @@ def _update_texture_in_cryspy_dict( cryspy_expt_dict: dict[str, Any], experiment: object, ) -> None: - """Patch cryspy texture ``g_1``/``g_2`` from preferred-orientation rows. + """ + Patch cryspy texture g_1/g_2 from preferred-orientation rows. Matches each emitted texture row to a ``pref_orient`` row by phase label and writes the refinable coefficient and random fraction in - place. ``h/k/l`` are fixed descriptors, so ``texture_axis`` is never - touched. No-op when no texture loop was emitted. + place. ``index_h``/``index_k``/``index_l`` are fixed descriptors, so + ``texture_axis`` is never touched. No-op when no texture loop was + emitted. """ if 'texture_g1' not in cryspy_expt_dict: return diff --git a/src/easydiffraction/datablocks/experiment/categories/pref_orient/__init__.py b/src/easydiffraction/datablocks/experiment/categories/pref_orient/__init__.py index 0ca588afa..f5ab05c1a 100644 --- a/src/easydiffraction/datablocks/experiment/categories/pref_orient/__init__.py +++ b/src/easydiffraction/datablocks/experiment/categories/pref_orient/__init__.py @@ -1,6 +1,8 @@ # SPDX-FileCopyrightText: 2026 EasyScience contributors # SPDX-License-Identifier: BSD-3-Clause -"""Preferred-orientation category (March-Dollase) for textured powders.""" +""" +Preferred-orientation category (March-Dollase) for textured powders. +""" from easydiffraction.datablocks.experiment.categories.pref_orient.default import PrefOrient from easydiffraction.datablocks.experiment.categories.pref_orient.default import PrefOrients diff --git a/src/easydiffraction/datablocks/experiment/categories/pref_orient/default.py b/src/easydiffraction/datablocks/experiment/categories/pref_orient/default.py index 5127e7d06..7a28fb9e6 100644 --- a/src/easydiffraction/datablocks/experiment/categories/pref_orient/default.py +++ b/src/easydiffraction/datablocks/experiment/categories/pref_orient/default.py @@ -16,9 +16,7 @@ from easydiffraction.core.variable import IntegerDescriptor from easydiffraction.core.variable import Parameter from easydiffraction.core.variable import StringDescriptor -from easydiffraction.datablocks.experiment.categories.pref_orient.factory import ( - PrefOrientFactory, -) +from easydiffraction.datablocks.experiment.categories.pref_orient.factory import PrefOrientFactory from easydiffraction.datablocks.experiment.item.enums import CalculatorEnum from easydiffraction.datablocks.experiment.item.enums import SampleFormEnum from easydiffraction.datablocks.experiment.item.enums import ScatteringTypeEnum diff --git a/src/easydiffraction/datablocks/experiment/categories/pref_orient/factory.py b/src/easydiffraction/datablocks/experiment/categories/pref_orient/factory.py index b3bf81f95..f1c357c21 100644 --- a/src/easydiffraction/datablocks/experiment/categories/pref_orient/factory.py +++ b/src/easydiffraction/datablocks/experiment/categories/pref_orient/factory.py @@ -1,6 +1,8 @@ # SPDX-FileCopyrightText: 2026 EasyScience contributors # SPDX-License-Identifier: BSD-3-Clause -"""Preferred-orientation factory — delegates entirely to ``FactoryBase``.""" +""" +Preferred-orientation factory — delegates entirely to ``FactoryBase``. +""" from __future__ import annotations diff --git a/src/easydiffraction/io/cif/iucr_writer.py b/src/easydiffraction/io/cif/iucr_writer.py index e7e6c6b69..db4fc0640 100644 --- a/src/easydiffraction/io/cif/iucr_writer.py +++ b/src/easydiffraction/io/cif/iucr_writer.py @@ -596,7 +596,8 @@ def _write_powder_refln_loop(lines: list[str], experiment: object) -> None: def _write_pref_orient_loop(lines: list[str], experiment: object) -> None: - """Append the March-Dollase preferred-orientation loop. + """ + Append the March-Dollase preferred-orientation loop. Standard fields use the IUCr ``_pd_pref_orient_March_Dollase.*`` category (the ``.id`` serial is synthesised). The non-standard From b94ead85876ef799809c6009fedc6dda57954269 Mon Sep 17 00:00:00 2001 From: Andrew Sazonov Date: Thu, 11 Jun 2026 19:13:47 +0200 Subject: [PATCH 16/35] Format preferred-orientation ADR and plan with prettier --- .../preferred-orientation-category.md | 291 +++++++++--------- .../plans/preferred-orientation-category.md | 221 ++++++------- 2 files changed, 258 insertions(+), 254 deletions(-) diff --git a/docs/dev/adrs/accepted/preferred-orientation-category.md b/docs/dev/adrs/accepted/preferred-orientation-category.md index 81ad98976..443c4a760 100644 --- a/docs/dev/adrs/accepted/preferred-orientation-category.md +++ b/docs/dev/adrs/accepted/preferred-orientation-category.md @@ -2,7 +2,8 @@ **Status:** Accepted **Date:** 2026-06-11 -This ADR follows the conventions in [`AGENTS.md`](../../../../AGENTS.md). +This ADR follows the conventions in +[`AGENTS.md`](../../../../AGENTS.md). ## Context @@ -18,7 +19,7 @@ Three independent sources confirm the same simple, widely used model — **March–Dollase** — and were checked while preparing this ADR: 1. **CrysPy backend (already supports it).** CrysPy implements the - *Modified March–Dollase* correction as a per-phase loop: + _Modified March–Dollase_ correction as a per-phase loop: ``` loop_ @@ -52,38 +53,38 @@ Three independent sources confirm the same simple, widely used model — (`P m -3 m`, a = 5 Å, axis `[0 0 1]`) was run through `rhochi_calc_chi_sq_by_dictionary`: - | Case | Result | - | --- | --- | - | No texture loop vs. `g1=1, g2=0` | identical (max Δ ≈ 1e-11) | - | `g1=1` vs. `g1=0.5, g2=0` | pattern strongly changes (max Δ ≈ 991; Σ intensity 7166 → 22101) | - | Per-reflection factor, `g1=0.5`, axis `[001]` | `(00l)` → 0.354, in-plane `(hk0)` → up to 8.0 | + | Case | Result | + | --------------------------------------------- | ---------------------------------------------------------------- | + | No texture loop vs. `g1=1, g2=0` | identical (max Δ ≈ 1e-11) | + | `g1=1` vs. `g1=0.5, g2=0` | pattern strongly changes (max Δ ≈ 991; Σ intensity 7166 → 22101) | + | Per-reflection factor, `g1=0.5`, axis `[001]` | `(00l)` → 0.354, in-plane `(hk0)` → up to 8.0 | This confirms CrysPy applies a texture correction through this loop and that `g1=1` (or absence of the loop) is a true no-op default. Note `g2=1` collapses `P` to 1 regardless of `g1`, so the **March - coefficient, not the fraction, is the headline parameter**. - (CrysPy's *form* of the correction is non-standard and not - intensity-conserving — see Decision 6; the wiring and no-op - behaviour above are nonetheless correct.) + coefficient, not the fraction, is the headline parameter**. (CrysPy's + _form_ of the correction is non-standard and not intensity-conserving + — see Decision 6; the wiring and no-op behaviour above are + nonetheless correct.) 2. **IUCr powder dictionary (`tmp/iucr-dicts/cif_pow.dic`).** The modern DDLm dictionary defines a full `PD_PREF_ORIENT` category and a `PD_PREF_ORIENT_MARCH_DOLLASE` subcategory with standard data names: - | Data name | Meaning | In scope? | - | --- | --- | --- | - | `_pd_pref_orient_March_Dollase.r` (+`.r_su`) | March coefficient; 1 = unoriented, `(0,1)` disk, `(1,∞)` needle | yes ≡ `g1` | - | `_pd_pref_orient_March_Dollase.index_h/_k/_l` | texture direction | yes ≡ `h_ax/k_ax/l_ax` | - | `_pd_pref_orient_March_Dollase.hkl` | direction as a single string `[ h k l ]` | **no** | - | `_pd_pref_orient_March_Dollase.fract` (+`.fract_su`) | weight of *each direction* when several are combined (sum = 1) | **no** (single direction) | - | `_pd_pref_orient_March_Dollase.id` | row identity | yes | - | `_pd_pref_orient_March_Dollase.phase_id` | links to `_pd_phase.id` | yes | - | `_pd_pref_orient_March_Dollase.diffractogram_id` | links to `_pd_diffractogram.id` | optional | + | Data name | Meaning | In scope? | + | ---------------------------------------------------- | --------------------------------------------------------------- | ------------------------- | + | `_pd_pref_orient_March_Dollase.r` (+`.r_su`) | March coefficient; 1 = unoriented, `(0,1)` disk, `(1,∞)` needle | yes ≡ `g1` | + | `_pd_pref_orient_March_Dollase.index_h/_k/_l` | texture direction | yes ≡ `h_ax/k_ax/l_ax` | + | `_pd_pref_orient_March_Dollase.hkl` | direction as a single string `[ h k l ]` | **no** | + | `_pd_pref_orient_March_Dollase.fract` (+`.fract_su`) | weight of _each direction_ when several are combined (sum = 1) | **no** (single direction) | + | `_pd_pref_orient_March_Dollase.id` | row identity | yes | + | `_pd_pref_orient_March_Dollase.phase_id` | links to `_pd_phase.id` | yes | + | `_pd_pref_orient_March_Dollase.diffractogram_id` | links to `_pd_diffractogram.id` | optional | The **roles** line up across all three: IUCr `.r`, FullProf `Pref1`, and CrysPy `g1` are all "the March coefficient" of the same category shape, and IUCr `.index_h/_k/_l` ≡ CrysPy `h_ax/k_ax/l_ax` exactly. - But the *role* matching `.r ↔ g1` is **not** a numerical equality: + But the _role_ matching `.r ↔ g1` is **not** a numerical equality: CrysPy's current `g1` parametrises a different, non-standard function (Decision 6), so `g1` equals the IUCr/Dollase/FullProf `r` only at `r = 1`. The category therefore adopts the IUCr name `r` for the @@ -94,10 +95,10 @@ Three independent sources confirm the same simple, widely used model — Two names are deliberately **excluded**: - **`.hkl`** stores the direction as a bracketed array `[ 1 0 4 ]`. - gemmi's loop reader does not reliably round-trip this array - syntax, so we use the three scalar integer columns - `.index_h/_k/_l` instead. - - **`.fract`** is the weight of *each direction* when one phase + gemmi's loop reader does not reliably round-trip this array syntax, + so we use the three scalar integer columns `.index_h/_k/_l` + instead. + - **`.fract`** is the weight of _each direction_ when one phase combines several March–Dollase directions. The initial category is single-direction-per-phase, so `.fract` is out of scope. This also removes any ambiguity with CrysPy's `g2`. @@ -111,22 +112,22 @@ Three independent sources confirm the same simple, widely used model — 3. **FullProf examples (`~/Applications/fullprof/Examples`).** The `CrystalStructure-SAnnPrefOr/lamn_pm_pref.pcr` example applies - March–Dollase to LaMnO₃ (orthorhombic `Pbnm`, neutron CW, λ = 1.561 Å, - 3T2/LLB) with `Pref1 = 0.66` and a paired `lamn_pm_nor.pcr` with no - correction. This is cited here only as **background evidence** that - FullProf exposes the same model (`Pref1`/`Pref2` + an `h k l` + March–Dollase to LaMnO₃ (orthorhombic `Pbnm`, neutron CW, λ = 1.561 + Å, 3T2/LLB) with `Pref1 = 0.66` and a paired `lamn_pm_nor.pcr` with + no correction. This is cited here only as **background evidence** + that FullProf exposes the same model (`Pref1`/`Pref2` + an `h k l` direction); it is **not** the verification reference. Both shipped - FullProf PO examples are simulated-annealing demos on *calculated* + FullProf PO examples are simulated-annealing demos on _calculated_ data, so the verification case is constructed separately (see the §Verification section, which builds on `pd-neut-cwl_pv_lbco`). -The three models agree on the **category shape** — a single scalar -March coefficient plus an integer direction (and an optional random -fraction) — so a small, well-scoped category is sufficient. They do -**not** all agree on the numerical *function* that coefficient drives: -CrysPy 0.11.0 applies a non-standard, non-conserving variant (Decision -6). The category design below is therefore stable regardless, while the -CrysPy backend value is documented as temporarily non-portable. +The three models agree on the **category shape** — a single scalar March +coefficient plus an integer direction (and an optional random fraction) +— so a small, well-scoped category is sufficient. They do **not** all +agree on the numerical _function_ that coefficient drives: CrysPy 0.11.0 +applies a non-standard, non-conserving variant (Decision 6). The +category design below is therefore stable regardless, while the CrysPy +backend value is documented as temporarily non-portable. ## Decision @@ -150,46 +151,44 @@ src/easydiffraction/datablocks/experiment/categories/pref_orient/ - `PrefOrients(CategoryCollection)` — `item_type=PrefOrient`, `Compatibility(sample_form={POWDER}, scattering_type={BRAGG})`. -**Scope: Bragg powder only.** `PdExperimentBase` -(`item/base.py:553`) is shared by both `BraggPdExperiment` -(`item/bragg_pd.py:38`) and `TotalPdExperiment` (PDF, -`item/total_pd.py:29`, `scattering_type=TOTAL`). `linked_phases` is -created on the shared base, but preferred orientation must **not** be — -PDFFIT has no PO support and a silent no-op on a total-scattering -experiment would mislead. Therefore `_pref_orient` is created **only in -`BraggPdExperiment.__init__`** (not in `PdExperimentBase`), so -`experiment.preferred_orientation` simply **does not exist** on PDF / -single-crystal experiments. Accessing it there raises `AttributeError` -— an explicit, discoverable failure rather than a silent no-op. The -`Compatibility(scattering_type={BRAGG})` metadata documents the same -contract for factory/introspection callers. +**Scope: Bragg powder only.** `PdExperimentBase` (`item/base.py:553`) is +shared by both `BraggPdExperiment` (`item/bragg_pd.py:38`) and +`TotalPdExperiment` (PDF, `item/total_pd.py:29`, +`scattering_type=TOTAL`). `linked_phases` is created on the shared base, +but preferred orientation must **not** be — PDFFIT has no PO support and +a silent no-op on a total-scattering experiment would mislead. Therefore +`_pref_orient` is created **only in `BraggPdExperiment.__init__`** (not +in `PdExperimentBase`), so `experiment.preferred_orientation` simply +**does not exist** on PDF / single-crystal experiments. Accessing it +there raises `AttributeError` — an explicit, discoverable failure rather +than a silent no-op. The `Compatibility(scattering_type={BRAGG})` +metadata documents the same contract for factory/introspection callers. - Within `BraggPdExperiment`, `_pref_orient` is created via `PrefOrientFactory`, added to that class's `_attach_category_parents()` list, and exposed read-only as - `experiment.preferred_orientation` (attribute, no `type` selector — - it is a fixed, single-implementation category like `linked_phases`, - not a switchable one, per + `experiment.preferred_orientation` (attribute, no `type` selector — it + is a fixed, single-implementation category like `linked_phases`, not a + switchable one, per [`switchable-category-owned-selectors.md`](switchable-category-owned-selectors.md)). ### 2. Parameters per row -| Python attr | Type | Default | Meaning | CrysPy | IUCr export name | -| --- | --- | --- | --- | --- | --- | -| `phase_id` | StringDescriptor | `'Si'` | phase this row corrects | `_texture_label` | `_pd_pref_orient_March_Dollase.phase_id` | -| `r` | Parameter (refinable) | `1.0` | March coefficient (1 = none) | `g_1` | `_pd_pref_orient_March_Dollase.r` | -| `index_h` / `index_k` / `index_l` | Descriptor (integer, fixed) | `0 / 0 / 1` | texture direction | `h_ax/k_ax/l_ax` | `_pd_pref_orient_March_Dollase.index_h/_k/_l` | -| `fraction` | Parameter (refinable) | `0.0` | random (untextured) fraction | `g_2` | *(see Decision 4)* | +| Python attr | Type | Default | Meaning | CrysPy | IUCr export name | +| --------------------------------- | --------------------------- | ----------- | ---------------------------- | ---------------- | --------------------------------------------- | +| `phase_id` | StringDescriptor | `'Si'` | phase this row corrects | `_texture_label` | `_pd_pref_orient_March_Dollase.phase_id` | +| `r` | Parameter (refinable) | `1.0` | March coefficient (1 = none) | `g_1` | `_pd_pref_orient_March_Dollase.r` | +| `index_h` / `index_k` / `index_l` | Descriptor (integer, fixed) | `0 / 0 / 1` | texture direction | `h_ax/k_ax/l_ax` | `_pd_pref_orient_March_Dollase.index_h/_k/_l` | +| `fraction` | Parameter (refinable) | `0.0` | random (untextured) fraction | `g_2` | _(see Decision 4)_ | The headline parameter is named **`r`** to match the IUCr standard (`_pd_pref_orient_March_Dollase.r`) and the crystallographic literature (Dollase 1986); **`fraction`** is the random/untextured fraction. `r` uses `RangeValidator(gt=0.0)`; `fraction` uses -`RangeValidator(ge=0.0, le=1.0)`. The defaults (`r=1.0`, -`fraction=0.0`) make an empty or freshly added correction a -**mathematical no-op**, so existing projects and tutorials are -unaffected until a user opts in. +`RangeValidator(ge=0.0, le=1.0)`. The defaults (`r=1.0`, `fraction=0.0`) +make an empty or freshly added correction a **mathematical no-op**, so +existing projects and tutorials are unaffected until a user opts in. **`index_h`/`index_k`/`index_l` are integer Descriptors, not refinable Parameters.** They use the same names as the existing `refln` categories @@ -197,9 +196,9 @@ Parameters.** They use the same names as the existing `refln` categories `h_ax/k_ax/l_ax`, but refining a crystallographic texture direction as a continuous variable is physically unusual and a common source of unstable fits. The direction is a user-set Miller index; only `r` (and -optionally `fraction`) refine. -If a continuous-direction use case ever appears, promoting the -descriptors to parameters is a backward-compatible change. +optionally `fraction`) refine. If a continuous-direction use case ever +appears, promoting the descriptors to parameters is a +backward-compatible change. ### 3. User-facing API (Jupyter) @@ -227,22 +226,22 @@ po.index_h.value, po.index_k.value, po.index_l.value = 0, 0, 1 # fixed Miller d expt.preferred_orientation.show() # table of all corrections ``` -Reading a property returns the live `Parameter`/`Descriptor` -(matching every other category); assigning sets `.value`. Refinement -follows the standard `.free = True` convention and is available on `r` -and `fraction` only. `fraction` stays optional and defaults to pure +Reading a property returns the live `Parameter`/`Descriptor` (matching +every other category); assigning sets `.value`. Refinement follows the +standard `.free = True` convention and is available on `r` and +`fraction` only. `fraction` stays optional and defaults to pure March–Dollase, so a "simple preferred orientation" workflow only sets `r` and the direction. ### 4. CIF serialization EasyDiffraction keeps **two** CIF flavours, per -[`iucr-cif-tag-alignment.md`](iucr-cif-tag-alignment.md): -short category-scoped tags for the day-to-day default save (and -round-trip), and dictionary-standard tags for the on-demand IUCr report -export. Categories with no IUCr counterpart (peak profile U/V/W, FCJ -asymmetry, background, the analysis categories) already export under the -project namespace `_easydiffraction_.*`; there is **no +[`iucr-cif-tag-alignment.md`](iucr-cif-tag-alignment.md): short +category-scoped tags for the day-to-day default save (and round-trip), +and dictionary-standard tags for the on-demand IUCr report export. +Categories with no IUCr counterpart (peak profile U/V/W, FCJ asymmetry, +background, the analysis categories) already export under the project +namespace `_easydiffraction_.*`; there is **no "official-names-only" rule** for the report. `g2` follows that established precedent. @@ -259,18 +258,18 @@ _pref_orient.fraction lbco 0.75 0 0 1 0.0 ``` -The row is keyed by `phase_id` (the linked phase this correction -applies to), paralleling how `linked_phases` keys rows by the phase -`id`. The IUCr `_pd_pref_orient_March_Dollase.id` serial (1, 2, …) is -synthesised by the report writer and has no Python field. +The row is keyed by `phase_id` (the linked phase this correction applies +to), paralleling how `linked_phases` keys rows by the phase `id`. The +IUCr `_pd_pref_orient_March_Dollase.id` serial (1, 2, …) is synthesised +by the report writer and has no Python field. -Per parameter, `CifHandler(names=['_pref_orient.r'], -iucr_name='_pd_pref_orient_March_Dollase.r')` — `names[0]` is the -canonical round-trip tag, `iucr_name` is what the report writer emits. -(Caveat: until CrysPy adopts the standard function — see Decision 6 — -the exported `.r` is CrysPy's `g1`, which only equals the IUCr/Dollase -`r` at `r = 1`. The mapping is kept so the CIF is forward-compatible -once the backend is corrected.) +Per parameter, +`CifHandler(names=['_pref_orient.r'], iucr_name='_pd_pref_orient_March_Dollase.r')` +— `names[0]` is the canonical round-trip tag, `iucr_name` is what the +report writer emits. (Caveat: until CrysPy adopts the standard function +— see Decision 6 — the exported `.r` is CrysPy's `g1`, which only equals +the IUCr/Dollase `r` at `r = 1`. The mapping is kept so the CIF is +forward-compatible once the backend is corrected.) **IUCr report CIF** — standard fields under the dictionary category, the non-standard `g2` under the project namespace. The IUCr writer is a @@ -294,22 +293,23 @@ standard name; IUCr `.fract` is a different quantity (multi-direction weight) and is **not** reused for it. Decision: - The canonical default tag is `_pref_orient.fraction`. -- The report export name is `_easydiffraction_pref_orient.fraction` - — consistent with every other non-standard field's +- The report export name is `_easydiffraction_pref_orient.fraction` — + consistent with every other non-standard field's `_easydiffraction_.*` form (never grafted onto the official `_pd_pref_orient_March_Dollase` path, and never reusing `.fract`). - Because mixing a project-namespace column into the official - March–Dollase loop is awkward and `g2 = 0` is both the default and - the standards-clean case, the report **omits `fraction` entirely when - it is 0** and, only when a user has set it non-zero, emits it as a - short separate item/loop in the `_easydiffraction_` namespace. The - common workflow therefore produces a fully standards-compliant report - with no project-namespace noise. - -Rejected alternatives for `g2`: reusing `_pd_pref_orient_March_Dollase.fract` -(semantically wrong — would mislead external tools); dropping `g2` -altogether (discards a capability the backend exercises in its own -example). Both are recorded under Alternatives Considered. + March–Dollase loop is awkward and `g2 = 0` is both the default and the + standards-clean case, the report **omits `fraction` entirely when it + is 0** and, only when a user has set it non-zero, emits it as a short + separate item/loop in the `_easydiffraction_` namespace. The common + workflow therefore produces a fully standards-compliant report with no + project-namespace noise. + +Rejected alternatives for `g2`: reusing +`_pd_pref_orient_March_Dollase.fract` (semantically wrong — would +mislead external tools); dropping `g2` altogether (discards a capability +the backend exercises in its own example). Both are recorded under +Alternatives Considered. ### 5. Backend wiring @@ -324,17 +324,18 @@ example). Both are recorded under Alternatives Considered. emits nothing and the cache signature (point 3) is likewise CW-scoped. `g1 = 1` is a no-op, so a default row is harmless. Map `r→_texture_g_1`, `fraction→_texture_g_2`, - `index_h/index_k/index_l→_texture_h_ax/_k_ax/_l_ax`, `phase_id→_texture_label`. - CrysPy parses this into the experiment block (`pd_`) of the - dictionary under the array keys `texture_g1`, `texture_g2`, - `texture_axis` (shape `(3, n_rows)`), `texture_name`, and the - `flags_texture_*` arrays (see `cl_1_texture.TextureL.get_dictionary`). - - 2. **Cached-dictionary refinement** (`_update_experiment_in_cryspy_dict`): - the calculator caches the parsed dict in `_cryspy_dicts[combined_name]` - and, on minimizer calls, patches scalar arrays in place rather than - rebuilding. Texture must join that pass-through, guarded like - `offset_sycos`: + `index_h/index_k/index_l→_texture_h_ax/_k_ax/_l_ax`, + `phase_id→_texture_label`. CrysPy parses this into the experiment + block (`pd_`) of the dictionary under the array keys + `texture_g1`, `texture_g2`, `texture_axis` (shape `(3, n_rows)`), + `texture_name`, and the `flags_texture_*` arrays (see + `cl_1_texture.TextureL.get_dictionary`). + + 2. **Cached-dictionary refinement** + (`_update_experiment_in_cryspy_dict`): the calculator caches the + parsed dict in `_cryspy_dicts[combined_name]` and, on minimizer + calls, patches scalar arrays in place rather than rebuilding. + Texture must join that pass-through, guarded like `offset_sycos`: ```python if 'texture_g1' in cryspy_expt_dict: @@ -343,10 +344,11 @@ example). Both are recorded under Alternatives Considered. cryspy_expt_dict['texture_g2'][i] = po.fraction.value ``` - Only `r` and `fraction` **values** are patched. `index_h`/`index_k`/`index_l` are fixed - descriptors (never refined), so `texture_axis` is never patched - here. `r.free`/`fraction.free` are **not** pushed into the CrysPy - dict at all: EasyDiffraction runs CrysPy with + Only `r` and `fraction` **values** are patched. + `index_h`/`index_k`/`index_l` are fixed descriptors (never + refined), so `texture_axis` is never patched here. + `r.free`/`fraction.free` are **not** pushed into the CrysPy dict at + all: EasyDiffraction runs CrysPy with `flag_calc_analytical_derivatives=False`, so CrysPy's `flags_texture_*` are unused; the free/fixed state is consumed by the EasyDiffraction minimizer, which assembles the parameter list @@ -355,22 +357,23 @@ example). Both are recorded under Alternatives Considered. identical to how `r`-like scalars (wavelength, offsets, resolution) already work. - 3. **Cache invalidation.** The cached dict's array *shapes* and row + 3. **Cache invalidation.** The cached dict's array _shapes_ and row identity are baked in at parse time, so any change to the **set or identity of rows** — adding/removing a `pref_orient` row, or - changing a row's `phase_id` or `index_h`/`index_k`/`index_l` — must drop the cache so the - CIF is rebuilt. Extend `_invalidate_stale_cache` with a - `pref_orient` signature (a tuple of - `(phase_id, index_h, index_k, index_l)` per row, in order) tracked - per `combined_name` exactly like + changing a row's `phase_id` or `index_h`/`index_k`/`index_l` — must + drop the cache so the CIF is rebuilt. Extend + `_invalidate_stale_cache` with a `pref_orient` signature (a tuple + of `(phase_id, index_h, index_k, index_l)` per row, in order) + tracked per `combined_name` exactly like `_cached_peak_types`/`_cached_adp_types`, and only for constant-wavelength experiments (matching the CW-only emission scope): when the signature changes, `self._cryspy_dicts.pop(combined_name, None)`. Value-only edits to `r`/`fraction` do **not** invalidate — they flow through path 2. + - **CrysFML / PDFFIT**: declare no support for now (like sample - displacement on CrysFML). `CalculatorSupport(calculators={CRYSPY})` - on the category; document the gap in a comment. + displacement on CrysFML). `CalculatorSupport(calculators={CRYSPY})` on + the category; document the gap in a comment. ### 6. Known backend limitation — CrysPy's texture function is non-standard @@ -409,8 +412,8 @@ Consequences for this category: - The divergence is captured for upstream reporting in `tmp/cryspy/preferred-orientation/` (minimal `rcif`, a comparison script calling the real CrysPy routine, and an `ISSUE.md` with - equations and FullProf/GSAS/Dollase references). A CrysPy issue is - to be filed; this ADR should link it once it has a number. + equations and FullProf/GSAS/Dollase references). A CrysPy issue is to + be filed; this ADR should link it once it has a number. ## Consequences @@ -422,8 +425,8 @@ Consequences for this category: base) extends the existing FullProf suite (consistent with the cross-engine work in commits #195–#199) and **documents** the CrysPy texture-function divergence rather than hiding it. -- The `fraction` non-standard tag is a documented, opt-in wart; - pure March–Dollase remains the standards-clean default. +- The `fraction` non-standard tag is a documented, opt-in wart; pure + March–Dollase remains the standards-clean default. - CrysPy's non-standard texture formula (Decision 6) means refined `r` values are not yet portable to FullProf/GSAS-II; the limitation is documented, reproduced for upstream in @@ -432,9 +435,9 @@ Consequences for this category: ## Alternatives Considered - **Attach PO to the structure/phase instead of the experiment.** - Rejected: texture is a property of *how this sample was packed for - this measurement*, not of the crystal structure; the same phase in - two experiments can have different textures. CrysPy keys it to the + Rejected: texture is a property of _how this sample was packed for + this measurement_, not of the crystal structure; the same phase in two + experiments can have different textures. CrysPy keys it to the experiment, and `linked_phases` already establishes the experiment-owns-per-phase pattern. - **Switchable `pref_orient.type` category (March–Dollase vs. spherical @@ -465,9 +468,9 @@ Consequences for this category: `.fract` weights). The IUCr names exist; CrysPy's loop already allows multiple rows per label. Out of scope until requested. - **TOF and 2D PO.** CrysPy supports both; the category is beam-mode - agnostic, but initial wiring, verification, and the tutorial target - CW powder. -- **User tutorial.** A new `ed-XX` tutorial follows *after* the + agnostic, but initial wiring, verification, and the tutorial target CW + powder. +- **User tutorial.** A new `ed-XX` tutorial follows _after_ the verification case below lands, so the documented workflow rests on a validated reference. Out of scope for the first implementation plan beyond a placeholder. @@ -477,31 +480,31 @@ Consequences for this category: FullProf ships **no standard Rietveld example that uses preferred orientation**. The only two examples with a non-zero `Pref1` (`CrystalStructure-SAnnPrefOr/lamn_pm_pref.pcr`, -`MagneticStructure-SAnnPrefOr/hobk_pm_pref.pcr`) are *simulated- -annealing* demos run against *calculated* data, not Rietveld -refinements against measured data — unsuitable as a verification -reference. +`MagneticStructure-SAnnPrefOr/hobk_pm_pref.pcr`) are _simulated- +annealing_ demos run against _calculated_ data, not Rietveld refinements +against measured data — unsuitable as a verification reference. Because of the backend limitation in Decision 6, the verification notebook **documents the CrysPy↔FullProf mismatch** rather than asserting agreement. It is built on the existing -**`pd-neut-cwl_pv_lbco`** case (La₀.₅Ba₀.₅CoO₃, neutron CW, -pseudo-Voigt — chosen as the base on request): +**`pd-neut-cwl_pv_lbco`** case (La₀.₅Ba₀.₅CoO₃, neutron CW, pseudo-Voigt +— chosen as the base on request): 1. Copy `docs/docs/verification/fullprof/pd-neut-cwl_pv_lbco/lbco.pcr`, enable a single March–Dollase direction (texture axis `h k l` via the phase `Pr1 Pr2 Pr3` line and a non-zero `Pref1`), and re-run FullProf - locally (`~/Applications/fullprof`) to regenerate `.prf`/`.bac`/`.sum` - with the standard March–Dollase correction active. + locally (`~/Applications/fullprof`) to regenerate + `.prf`/`.bac`/`.sum` with the standard March–Dollase correction + active. 2. Add `pd-neut-cwl_pv-march_lbco` (paired `.py`/`.ipynb`) that builds the same LBCO model in EasyDiffraction, sets `expt.preferred_orientation` with `r` mapped to FullProf's `Pref1`, and overlays the CrysPy pattern on the FullProf reference. The notebook is expected to **show agreement at `r = 1` and a visible, quantified divergence for `r ≠ 1`**, with a markdown cell explaining - the CrysPy formula difference and linking the upstream issue. - Because PO is CrysPy-only, the case compares CrysPy vs FullProf only - (no CrysFML column, unlike the base `lbco` case). + the CrysPy formula difference and linking the upstream issue. Because + PO is CrysPy-only, the case compares CrysPy vs FullProf only (no + CrysFML column, unlike the base `lbco` case). This verification notebook is built **before any user tutorial**, so the tutorial can cite a validated, well-understood workflow (including the diff --git a/docs/dev/plans/preferred-orientation-category.md b/docs/dev/plans/preferred-orientation-category.md index 4abbb06d2..71e711416 100644 --- a/docs/dev/plans/preferred-orientation-category.md +++ b/docs/dev/plans/preferred-orientation-category.md @@ -3,17 +3,17 @@ This plan follows [`AGENTS.md`](../../../AGENTS.md). No deliberate exceptions to those instructions are taken. Per §Commits and §Planning, when an AI agent executes this plan, **every completed Phase 1 step is -staged with explicit paths and committed locally before the next step -or the Phase 1 review gate**; commits are atomic and single-purpose. +staged with explicit paths and committed locally before the next step or +the Phase 1 review gate**; commits are atomic and single-purpose. ## ADR -Implements [`preferred-orientation-category.md`](../adrs/accepted/preferred-orientation-category.md) +Implements +[`preferred-orientation-category.md`](../adrs/accepted/preferred-orientation-category.md) (promoted to **Accepted** in step P1.6). This plan **owns** that ADR: a Phase 1 step moves it from `suggestions/` to `accepted/` (status flip + index update) before the PR, per §Change Discipline. No other ADR is -created. -Related accepted ADRs consulted: `iucr-cif-tag-alignment.md`, +created. Related accepted ADRs consulted: `iucr-cif-tag-alignment.md`, `switchable-category-owned-selectors.md`, `loop-category-key-identity.md`, `factory-contracts.md`. @@ -30,9 +30,9 @@ Related accepted ADRs consulted: `iucr-cif-tag-alignment.md`, - New **per-phase loop category `pref_orient`**, owned by the experiment, mirroring `linked_phases`. Keyed by `phase_id`. - Parameters per row: `r` (March coefficient, refinable, default 1.0), - `index_h`/`index_k`/`index_l` (fixed integer **descriptors**, default 0/0/1), - `fraction` (random fraction, refinable, default 0.0). Defaults are a - mathematical no-op. + `index_h`/`index_k`/`index_l` (fixed integer **descriptors**, default + 0/0/1), `fraction` (random fraction, refinable, default 0.0). Defaults + are a mathematical no-op. - **Scope: Bragg powder only.** Created **only in `BraggPdExperiment`**, not the shared `PdExperimentBase`, so PDF/total-scattering and single-crystal experiments never expose `preferred_orientation` @@ -71,10 +71,10 @@ CrysPy is already a dependency; no `pyproject.toml`/`pixi.toml`/ **Edited (Phase 1):** -- `src/easydiffraction/datablocks/experiment/item/bragg_pd.py` - (create `_pref_orient`, expose `preferred_orientation` property) -- `src/easydiffraction/datablocks/experiment/item/base.py` - (add `getattr(self, '_pref_orient', None)` to the shared +- `src/easydiffraction/datablocks/experiment/item/bragg_pd.py` (create + `_pref_orient`, expose `preferred_orientation` property) +- `src/easydiffraction/datablocks/experiment/item/base.py` (add + `getattr(self, '_pref_orient', None)` to the shared `_attach_category_parents()` hook; no category creation here) - `src/easydiffraction/analysis/calculators/cryspy.py` (`_cif_phase_section` neighbour → texture loop emission; @@ -83,8 +83,8 @@ CrysPy is already a dependency; no `pyproject.toml`/`pixi.toml`/ - `src/easydiffraction/io/cif/iucr_writer.py` (`_write_pref_orient_loop`) - `docs/dev/adrs/suggestions/preferred-orientation-category.md` → - `docs/dev/adrs/accepted/preferred-orientation-category.md` - (promotion) and `docs/dev/adrs/index.md` (status/link) + `docs/dev/adrs/accepted/preferred-orientation-category.md` (promotion) + and `docs/dev/adrs/index.md` (status/link) **New/edited (Phase 2, tests + verification):** @@ -93,7 +93,8 @@ CrysPy is already a dependency; no `pyproject.toml`/`pixi.toml`/ - `tests/unit/easydiffraction/analysis/calculators/test_cryspy.py` (texture emission + cache) and existing experiment/serialisation tests - `docs/docs/verification/pd-neut-cwl_pv-march_lbco.py` (+ generated - `.ipynb`) and `docs/docs/verification/fullprof/pd-neut-cwl_pv-march_lbco/` + `.ipynb`) and + `docs/docs/verification/fullprof/pd-neut-cwl_pv-march_lbco/` (regenerated FullProf reference) - `docs/dev/package-structure/full.md` / `short.md` (auto-regenerated by `pixi run fix` — never edited by hand) @@ -102,35 +103,36 @@ CrysPy is already a dependency; no `pyproject.toml`/`pixi.toml`/ > Phase 1 is code + ADR/plan docs only. Do **not** write or run tests, > linters, or `pixi` commands here (those are Phase 2). Commit each step -> atomically with explicit paths and the listed message before moving on. - -- [x] **P1.1 — Create the `pref_orient` category package.** - Add `default.py` with `PrefOrient(CategoryItem)` - (`_category_code='pref_orient'`, `_category_entry_name='phase_id'`) - exposing: `phase_id` (`StringDescriptor`, default `'Si'`, regex - validator like `LinkedPhase.id`, `CifHandler(['_pref_orient.phase_id'], - iucr_name='_pd_pref_orient_March_Dollase.phase_id')`); `r` - (`Parameter`, default 1.0, `RangeValidator(gt=0.0)`, - `iucr_name='_pd_pref_orient_March_Dollase.r'`); `index_h`/`index_k`/`index_l` - (`IntegerDescriptor`, defaults 0/0/1, - `iucr_name='_pd_pref_orient_March_Dollase.index_h/_k/_l'`); - `fraction` (`Parameter`, default 0.0, `RangeValidator(ge=0.0, le=1.0)`, - `iucr_name='_easydiffraction_pref_orient.fraction'`). Add - `PrefOrients(CategoryCollection)` (`item_type=PrefOrient`, - `TypeInfo(tag='default')`, - `Compatibility(sample_form={POWDER}, scattering_type={BRAGG})`, - `CalculatorSupport({CRYSPY})`). Add `factory.py` - (`PrefOrientFactory(FactoryBase)`, default rule `frozenset(): 'default'`) - and `__init__.py` importing both classes to trigger - `@PrefOrientFactory.register`. Mirror the structure of - `categories/linked_phases/`. - Files: the three new `pref_orient/*` files. - Commit: `Add pref_orient preferred-orientation category` +> atomically with explicit paths and the listed message before moving +> on. + +- [x] **P1.1 — Create the `pref_orient` category package.** Add + `default.py` with `PrefOrient(CategoryItem)` + (`_category_code='pref_orient'`, + `_category_entry_name='phase_id'`) exposing: `phase_id` + (`StringDescriptor`, default `'Si'`, regex validator like + `LinkedPhase.id`, + `CifHandler(['_pref_orient.phase_id'], iucr_name='_pd_pref_orient_March_Dollase.phase_id')`); + `r` (`Parameter`, default 1.0, `RangeValidator(gt=0.0)`, + `iucr_name='_pd_pref_orient_March_Dollase.r'`); + `index_h`/`index_k`/`index_l` (`IntegerDescriptor`, defaults + 0/0/1, `iucr_name='_pd_pref_orient_March_Dollase.index_h/_k/_l'`); + `fraction` (`Parameter`, default 0.0, + `RangeValidator(ge=0.0, le=1.0)`, + `iucr_name='_easydiffraction_pref_orient.fraction'`). Add + `PrefOrients(CategoryCollection)` (`item_type=PrefOrient`, + `TypeInfo(tag='default')`, + `Compatibility(sample_form={POWDER}, scattering_type={BRAGG})`, + `CalculatorSupport({CRYSPY})`). Add `factory.py` + (`PrefOrientFactory(FactoryBase)`, default rule + `frozenset(): 'default'`) and `__init__.py` importing both classes + to trigger `@PrefOrientFactory.register`. Mirror the structure of + `categories/linked_phases/`. Files: the three new `pref_orient/*` + files. Commit: `Add pref_orient preferred-orientation category` - [x] **P1.2 — Wire `preferred_orientation` into Bragg powder - experiment.** - Creation and public exposure stay **Bragg-only**; only the - parent-attachment hook (shared) gains an optional entry. + experiment.** Creation and public exposure stay **Bragg-only**; + only the parent-attachment hook (shared) gains an optional entry. - In `item/bragg_pd.py` `BraggPdExperiment.__init__`, **before** the existing final `self._attach_category_parents()` call, create `self._pref_orient = PrefOrientFactory.create(PrefOrientFactory.default_tag())`, @@ -143,74 +145,73 @@ CrysPy is already a dependency; no `pyproject.toml`/`pixi.toml`/ `getattr(..., None)` hook: non-Bragg experiments never set `_pref_orient`, so they yield `None` and are skipped, and `preferred_orientation` remains absent (`AttributeError`) on them. - `PdExperimentBase` and category *creation* are not touched. This + `PdExperimentBase` and category _creation_ are not touched. This explicit `_parent` link is required so `CategoryCollection.create()`/`add()` marks the experiment dirty (`_need_categories_update`) on row changes. - Confirm default-CIF serialisation is automatic (the owned `CategoryCollection` is picked up by `_serializable_categories` - auto-discovery; no explicit registration needed). - Files: `item/bragg_pd.py`, `item/base.py`. - Commit: `Expose preferred_orientation on Bragg powder experiment` - -- [x] **P1.3 — Emit the CrysPy `_texture_*` loop.** - In `analysis/calculators/cryspy.py`, after the `_cif_phase_section` - call in `_convert_experiment_to_cryspy_cif`, add a - `_cif_pref_orient_section` that writes one `_texture_*` loop row per - `experiment.preferred_orientation` entry, mapping - `r→_texture_g_1`, `fraction→_texture_g_2`, - `index_h/index_k/index_l→_texture_h_ax/_k_ax/_l_ax`, - `phase_id→_texture_label`. **Constant-wavelength powder only** (guard - on `sample_form == POWDER` **and** `beam_mode == CONSTANT_WAVELENGTH`); - TOF is Deferred Work and must emit no texture, since its cached-dict - pass-through is not wired. Emit only the row matching the linked - phase; a row with `r=1` is a no-op. - Files: `analysis/calculators/cryspy.py`. - Commit: `Emit texture loop in cryspy experiment CIF` - -- [x] **P1.4 — CrysPy cached-dictionary pass-through and - invalidation.** - In `_update_experiment_in_cryspy_dict`, after the - `offset_sysin` block, patch `texture_g1`/`texture_g2` from - `r.value`/`fraction.value` per row, guarded by - `if 'texture_g1' in cryspy_expt_dict`. Do **not** patch - `texture_axis` (`index_h`/`index_k`/`index_l` are fixed). In - `_invalidate_stale_cache`, add a `pref_orient` signature — a tuple of - `(phase_id, index_h, index_k, index_l)` per row, in order — tracked - per `combined_name` like `_cached_peak_types`, and **only for - constant-wavelength** experiments (matching the emission scope); pop - the cached dict when the signature changes (row add/remove, `phase_id` - or `index_h`/`index_k`/`index_l` edit). Value-only `r`/`fraction` - edits must not invalidate. - Files: `analysis/calculators/cryspy.py`. - Commit: `Pass preferred-orientation through cryspy cache` - -- [x] **P1.5 — IUCr report-writer loop.** - In `io/cif/iucr_writer.py`, add `_write_pref_orient_loop(lines, - experiment)` emitting the official - `_pd_pref_orient_March_Dollase.{id,phase_id,index_h,index_k,index_l,r,r_su}` - columns (synthesise `.id` as a 1-based serial), called from the powder - experiment writer alongside the existing profile/refln loops. Emit a - separate `_easydiffraction_pref_orient.fraction` item only for rows - whose `fraction ≠ 0`; omit it entirely otherwise. Skip the whole loop - when the experiment has no `pref_orient` rows. - Files: `io/cif/iucr_writer.py`. - Commit: `Write preferred-orientation loop in IUCr report` + auto-discovery; no explicit registration needed). Files: + `item/bragg_pd.py`, `item/base.py`. Commit: + `Expose preferred_orientation on Bragg powder experiment` + +- [x] **P1.3 — Emit the CrysPy `_texture_*` loop.** In + `analysis/calculators/cryspy.py`, after the `_cif_phase_section` + call in `_convert_experiment_to_cryspy_cif`, add a + `_cif_pref_orient_section` that writes one `_texture_*` loop row + per `experiment.preferred_orientation` entry, mapping + `r→_texture_g_1`, `fraction→_texture_g_2`, + `index_h/index_k/index_l→_texture_h_ax/_k_ax/_l_ax`, + `phase_id→_texture_label`. **Constant-wavelength powder only** + (guard on `sample_form == POWDER` **and** + `beam_mode == CONSTANT_WAVELENGTH`); TOF is Deferred Work and must + emit no texture, since its cached-dict pass-through is not wired. + Emit only the row matching the linked phase; a row with `r=1` is a + no-op. Files: `analysis/calculators/cryspy.py`. Commit: + `Emit texture loop in cryspy experiment CIF` + +- [x] **P1.4 — CrysPy cached-dictionary pass-through and invalidation.** + In `_update_experiment_in_cryspy_dict`, after the `offset_sysin` + block, patch `texture_g1`/`texture_g2` from + `r.value`/`fraction.value` per row, guarded by + `if 'texture_g1' in cryspy_expt_dict`. Do **not** patch + `texture_axis` (`index_h`/`index_k`/`index_l` are fixed). In + `_invalidate_stale_cache`, add a `pref_orient` signature — a tuple + of `(phase_id, index_h, index_k, index_l)` per row, in order — + tracked per `combined_name` like `_cached_peak_types`, and **only + for constant-wavelength** experiments (matching the emission + scope); pop the cached dict when the signature changes (row + add/remove, `phase_id` or `index_h`/`index_k`/`index_l` edit). + Value-only `r`/`fraction` edits must not invalidate. Files: + `analysis/calculators/cryspy.py`. Commit: + `Pass preferred-orientation through cryspy cache` + +- [x] **P1.5 — IUCr report-writer loop.** In `io/cif/iucr_writer.py`, + add `_write_pref_orient_loop(lines, experiment)` emitting the + official + `_pd_pref_orient_March_Dollase.{id,phase_id,index_h,index_k,index_l,r,r_su}` + columns (synthesise `.id` as a 1-based serial), called from the + powder experiment writer alongside the existing profile/refln + loops. Emit a separate `_easydiffraction_pref_orient.fraction` + item only for rows whose `fraction ≠ 0`; omit it entirely + otherwise. Skip the whole loop when the experiment has no + `pref_orient` rows. Files: `io/cif/iucr_writer.py`. Commit: + `Write preferred-orientation loop in IUCr report` - [x] **P1.6 — Promote the ADR to accepted.** - `git mv docs/dev/adrs/suggestions/preferred-orientation-category.md - docs/dev/adrs/accepted/preferred-orientation-category.md`, set its - `**Status:**` to `Accepted`, fix its internal `../accepted/` links to - `./` as needed, and flip the `docs/dev/adrs/index.md` row from - `Suggestion`/`suggestions/...` to `Accepted`/`accepted/...`. (The - design-phase `_review-*`/`_reply-*` siblings are removed by - `/draft-impl-1`'s Phase A cleanup, not here.) - Files: the moved ADR, `docs/dev/adrs/index.md`. - Commit: `Promote preferred-orientation-category ADR to accepted` - -- [x] **P1.7 — Phase 1 review gate (no code).** - Mark P1.1–P1.6 `[x]`, then stop for the Phase 1 review. - Commit: `Reach Phase 1 review gate` + `git mv docs/dev/adrs/suggestions/preferred-orientation-category.md docs/dev/adrs/accepted/preferred-orientation-category.md`, + set its `**Status:**` to `Accepted`, fix its internal + `../accepted/` links to `./` as needed, and flip the + `docs/dev/adrs/index.md` row from `Suggestion`/`suggestions/...` + to `Accepted`/`accepted/...`. (The design-phase + `_review-*`/`_reply-*` siblings are removed by `/draft-impl-1`'s + Phase A cleanup, not here.) Files: the moved ADR, + `docs/dev/adrs/index.md`. Commit: + `Promote preferred-orientation-category ADR to accepted` + +- [x] **P1.7 — Phase 1 review gate (no code).** Mark P1.1–P1.6 `[x]`, + then stop for the Phase 1 review. Commit: + `Reach Phase 1 review gate` ## Phase 2 — Verification @@ -225,9 +226,9 @@ CrysPy is already a dependency; no `pyproject.toml`/`pixi.toml`/ `tests/unit/easydiffraction/datablocks/experiment/categories/test_pref_orient.py` is the accepted layout per §Testing and `tools/test_structure_check.py`, matching the existing - `test_linked_phases.py`): defaults are a no-op (`r=1`, - `fraction=0`), validators (`r>0`, `0≤fraction≤1`), `.create(...)` - row construction, CIF round-trip of `_pref_orient.*`. + `test_linked_phases.py`): defaults are a no-op (`r=1`, `fraction=0`), + validators (`r>0`, `0≤fraction≤1`), `.create(...)` row construction, + CIF round-trip of `_pref_orient.*`. - `preferred_orientation` is present on `BraggPdExperiment` and absent (`AttributeError`) on `TotalPdExperiment`/single-crystal. - CrysPy: texture loop emitted; cache pass-through updates `texture_g1`/ @@ -242,8 +243,8 @@ CrysPy is already a dependency; no `pyproject.toml`/`pixi.toml`/ `Pr1 Pr2 Pr3` line and a non-zero `Pref1`), re-run FullProf locally (`~/Applications/fullprof`) to regenerate `.prf`/`.bac`/`.sum` under `docs/docs/verification/fullprof/pd-neut-cwl_pv-march_lbco/`. -2. Add `docs/docs/verification/pd-neut-cwl_pv-march_lbco.py` building the - same LBCO model, setting +2. Add `docs/docs/verification/pd-neut-cwl_pv-march_lbco.py` building + the same LBCO model, setting `expt.preferred_orientation.create(phase_id='lbco', r=, index_h=, index_k=, index_l=)`, and overlaying CrysPy vs FullProf. Compare CrysPy-only (no CrysFML column, since PO is CrysPy-only). Add a markdown cell explaining the @@ -290,8 +291,8 @@ orientation (platy or needle-like grains) no longer have to be modelled as ideal random powders. You can now add a March–Dollase preferred-orientation correction to each phase in a constant-wavelength Bragg powder experiment — set a March coefficient and a crystallographic -direction, refine the coefficient, and see the improved fit. The -setting is saved and restored in your project CIF and appears in the +direction, refine the coefficient, and see the improved fit. The setting +is saved and restored in your project CIF and appears in the IUCr-aligned report. Corrections run on the CrysPy engine; a cross-checked verification example based on the LBCO dataset documents how the CrysPy texture model currently compares with FullProf. From 9c6bcc769bf3cee22bc99e7b8f5f47594b15f7a5 Mon Sep 17 00:00:00 2001 From: Andrew Sazonov Date: Thu, 11 Jun 2026 19:52:24 +0200 Subject: [PATCH 17/35] Add LBCO preferred-orientation cross-engine verification --- .../plans/preferred-orientation-category.md | 6 +- .../pd-neut-cwl_pv-march_lbco/lbco.bac | 3093 ++++++++++++++++ .../pd-neut-cwl_pv-march_lbco/lbco.dat | 3098 ++++++++++++++++ .../pd-neut-cwl_pv-march_lbco/lbco.pcr | 65 + .../pd-neut-cwl_pv-march_lbco/lbco.prf | 3166 +++++++++++++++++ .../pd-neut-cwl_pv-march_lbco/lbco.sum | 136 + .../pd-neut-cwl_pv-march_lbco.ipynb | 325 ++ .../verification/pd-neut-cwl_pv-march_lbco.py | 196 + 8 files changed, 10082 insertions(+), 3 deletions(-) create mode 100644 docs/docs/verification/fullprof/pd-neut-cwl_pv-march_lbco/lbco.bac create mode 100644 docs/docs/verification/fullprof/pd-neut-cwl_pv-march_lbco/lbco.dat create mode 100644 docs/docs/verification/fullprof/pd-neut-cwl_pv-march_lbco/lbco.pcr create mode 100644 docs/docs/verification/fullprof/pd-neut-cwl_pv-march_lbco/lbco.prf create mode 100644 docs/docs/verification/fullprof/pd-neut-cwl_pv-march_lbco/lbco.sum create mode 100644 docs/docs/verification/pd-neut-cwl_pv-march_lbco.ipynb create mode 100644 docs/docs/verification/pd-neut-cwl_pv-march_lbco.py diff --git a/docs/dev/plans/preferred-orientation-category.md b/docs/dev/plans/preferred-orientation-category.md index 71e711416..f29b8fba9 100644 --- a/docs/dev/plans/preferred-orientation-category.md +++ b/docs/dev/plans/preferred-orientation-category.md @@ -277,9 +277,9 @@ thresholds or add `# noqa`; refactor instead. - [x] P1.5 IUCr report-writer loop - [x] P1.6 Promote ADR to accepted - [x] P1.7 Phase 1 review gate -- [ ] Phase 2 tests -- [ ] Phase 2 FullProf reference + verification notebook -- [ ] Phase 2 full check suite green +- [x] Phase 2 tests +- [x] Phase 2 FullProf reference + verification notebook +- [x] Phase 2 full check suite green ## Suggested Pull Request diff --git a/docs/docs/verification/fullprof/pd-neut-cwl_pv-march_lbco/lbco.bac b/docs/docs/verification/fullprof/pd-neut-cwl_pv-march_lbco/lbco.bac new file mode 100644 index 000000000..227df724e --- /dev/null +++ b/docs/docs/verification/fullprof/pd-neut-cwl_pv-march_lbco/lbco.bac @@ -0,0 +1,3093 @@ +! Background of: lbco + 9.6796 168.9265 + 9.7296 168.9142 + 9.7796 168.9020 + 9.8296 168.8898 + 9.8796 168.8775 + 9.9296 168.8652 + 9.9796 168.8530 + 10.0296 168.8407 + 10.0796 168.8285 + 10.1296 168.8163 + 10.1796 168.8040 + 10.2296 168.7917 + 10.2796 168.7795 + 10.3296 168.7673 + 10.3796 168.7550 + 10.4296 168.7428 + 10.4796 168.7305 + 10.5296 168.7182 + 10.5796 168.7060 + 10.6296 168.6938 + 10.6796 168.6815 + 10.7296 168.6693 + 10.7796 168.6570 + 10.8296 168.6447 + 10.8796 168.6325 + 10.9296 168.6203 + 10.9796 168.6080 + 11.0296 168.5957 + 11.0796 168.5835 + 11.1296 168.5712 + 11.1796 168.5590 + 11.2296 168.5468 + 11.2796 168.5345 + 11.3296 168.5222 + 11.3796 168.5100 + 11.4296 168.4978 + 11.4796 168.4855 + 11.5296 168.4733 + 11.5796 168.4610 + 11.6296 168.4487 + 11.6796 168.4365 + 11.7296 168.4243 + 11.7796 168.4120 + 11.8296 168.3997 + 11.8796 168.3875 + 11.9296 168.3752 + 11.9796 168.3630 + 12.0296 168.3508 + 12.0796 168.3385 + 12.1296 168.3262 + 12.1796 168.3140 + 12.2296 168.3018 + 12.2796 168.2895 + 12.3296 168.2773 + 12.3796 168.2650 + 12.4296 168.2527 + 12.4796 168.2405 + 12.5296 168.2283 + 12.5796 168.2160 + 12.6296 168.2038 + 12.6796 168.1915 + 12.7296 168.1792 + 12.7796 168.1670 + 12.8296 168.1548 + 12.8796 168.1425 + 12.9296 168.1302 + 12.9796 168.1180 + 13.0296 168.1058 + 13.0796 168.0935 + 13.1296 168.0813 + 13.1796 168.0690 + 13.2296 168.0567 + 13.2796 168.0445 + 13.3296 168.0323 + 13.3796 168.0200 + 13.4296 168.0078 + 13.4796 167.9955 + 13.5296 167.9832 + 13.5796 167.9710 + 13.6296 167.9588 + 13.6796 167.9465 + 13.7296 167.9342 + 13.7796 167.9220 + 13.8296 167.9097 + 13.8796 167.8975 + 13.9296 167.8853 + 13.9796 167.8730 + 14.0296 167.8607 + 14.0796 167.8485 + 14.1296 167.8363 + 14.1796 167.8240 + 14.2296 167.8118 + 14.2796 167.7995 + 14.3296 167.7872 + 14.3796 167.7750 + 14.4296 167.7628 + 14.4796 167.7505 + 14.5296 167.7383 + 14.5796 167.7260 + 14.6296 167.7137 + 14.6796 167.7015 + 14.7296 167.6893 + 14.7796 167.6770 + 14.8296 167.6647 + 14.8796 167.6525 + 14.9296 167.6403 + 14.9796 167.6280 + 15.0296 167.6158 + 15.0796 167.6035 + 15.1296 167.5912 + 15.1796 167.5790 + 15.2296 167.5668 + 15.2796 167.5545 + 15.3296 167.5423 + 15.3796 167.5300 + 15.4296 167.5177 + 15.4796 167.5055 + 15.5296 167.4933 + 15.5796 167.4810 + 15.6296 167.4688 + 15.6796 167.4565 + 15.7296 167.4442 + 15.7796 167.4320 + 15.8296 167.4198 + 15.8796 167.4075 + 15.9296 167.3952 + 15.9796 167.3830 + 16.0296 167.3708 + 16.0796 167.3585 + 16.1296 167.3463 + 16.1796 167.3340 + 16.2296 167.3217 + 16.2796 167.3095 + 16.3296 167.2973 + 16.3796 167.2850 + 16.4296 167.2728 + 16.4796 167.2605 + 16.5296 167.2482 + 16.5796 167.2360 + 16.6296 167.2238 + 16.6796 167.2115 + 16.7296 167.1992 + 16.7796 167.1870 + 16.8296 167.1748 + 16.8796 167.1625 + 16.9296 167.1503 + 16.9796 167.1380 + 17.0296 167.1257 + 17.0796 167.1135 + 17.1296 167.1013 + 17.1796 167.0890 + 17.2296 167.0768 + 17.2796 167.0645 + 17.3296 167.0522 + 17.3796 167.0400 + 17.4296 167.0278 + 17.4796 167.0155 + 17.5296 167.0033 + 17.5796 166.9910 + 17.6296 166.9788 + 17.6796 166.9665 + 17.7296 166.9543 + 17.7796 166.9420 + 17.8296 166.9297 + 17.8796 166.9175 + 17.9296 166.9053 + 17.9796 166.8930 + 18.0296 166.8808 + 18.0796 166.8685 + 18.1296 166.8562 + 18.1796 166.8440 + 18.2296 166.8318 + 18.2796 166.8195 + 18.3296 166.8073 + 18.3796 166.7950 + 18.4296 166.7827 + 18.4796 166.7705 + 18.5296 166.7583 + 18.5796 166.7460 + 18.6296 166.7337 + 18.6796 166.7215 + 18.7296 166.7093 + 18.7796 166.6970 + 18.8296 166.6848 + 18.8796 166.6725 + 18.9296 166.6602 + 18.9796 166.6480 + 19.0296 166.6358 + 19.0796 166.6235 + 19.1296 166.6113 + 19.1796 166.5990 + 19.2296 166.5867 + 19.2796 166.5745 + 19.3296 166.5623 + 19.3796 166.5500 + 19.4296 166.5378 + 19.4796 166.5255 + 19.5296 166.5133 + 19.5796 166.5010 + 19.6296 166.4888 + 19.6796 166.4765 + 19.7296 166.4642 + 19.7796 166.4520 + 19.8296 166.4398 + 19.8796 166.4275 + 19.9296 166.4153 + 19.9796 166.4030 + 20.0296 166.3907 + 20.0796 166.3785 + 20.1296 166.3663 + 20.1796 166.3540 + 20.2296 166.3418 + 20.2796 166.3295 + 20.3296 166.3173 + 20.3796 166.3050 + 20.4296 166.2928 + 20.4796 166.2805 + 20.5296 166.2682 + 20.5796 166.2560 + 20.6296 166.2438 + 20.6796 166.2315 + 20.7296 166.2193 + 20.7796 166.2070 + 20.8296 166.1947 + 20.8796 166.1825 + 20.9296 166.1703 + 20.9796 166.1580 + 21.0296 166.1458 + 21.0796 166.1335 + 21.1296 166.1212 + 21.1796 166.1090 + 21.2296 166.0968 + 21.2796 166.0845 + 21.3296 166.0723 + 21.3796 166.0600 + 21.4296 166.0478 + 21.4796 166.0355 + 21.5296 166.0233 + 21.5796 166.0110 + 21.6296 165.9987 + 21.6796 165.9865 + 21.7296 165.9743 + 21.7796 165.9620 + 21.8296 165.9498 + 21.8796 165.9375 + 21.9296 165.9252 + 21.9796 165.9130 + 22.0296 165.9008 + 22.0796 165.8885 + 22.1296 165.8763 + 22.1796 165.8640 + 22.2296 165.8518 + 22.2796 165.8395 + 22.3296 165.8273 + 22.3796 165.8150 + 22.4296 165.8027 + 22.4796 165.7905 + 22.5296 165.7783 + 22.5796 165.7660 + 22.6296 165.7538 + 22.6796 165.7415 + 22.7296 165.7292 + 22.7796 165.7170 + 22.8296 165.7048 + 22.8796 165.6925 + 22.9296 165.6803 + 22.9796 165.6680 + 23.0296 165.6558 + 23.0796 165.6435 + 23.1296 165.6313 + 23.1796 165.6190 + 23.2296 165.6068 + 23.2796 165.5945 + 23.3296 165.5823 + 23.3796 165.5700 + 23.4296 165.5578 + 23.4796 165.5455 + 23.5296 165.5332 + 23.5796 165.5210 + 23.6296 165.5088 + 23.6796 165.4965 + 23.7296 165.4843 + 23.7796 165.4720 + 23.8296 165.4597 + 23.8796 165.4475 + 23.9296 165.4353 + 23.9796 165.4230 + 24.0296 165.4108 + 24.0796 165.3985 + 24.1296 165.3863 + 24.1796 165.3740 + 24.2296 165.3618 + 24.2796 165.3495 + 24.3296 165.3372 + 24.3796 165.3250 + 24.4296 165.3128 + 24.4796 165.3005 + 24.5296 165.2883 + 24.5796 165.2760 + 24.6296 165.2637 + 24.6796 165.2515 + 24.7296 165.2393 + 24.7796 165.2270 + 24.8296 165.2148 + 24.8796 165.2025 + 24.9296 165.1903 + 24.9796 165.1780 + 25.0296 165.1658 + 25.0796 165.1535 + 25.1296 165.1413 + 25.1796 165.1290 + 25.2296 165.1168 + 25.2796 165.1045 + 25.3296 165.0923 + 25.3796 165.0800 + 25.4296 165.0677 + 25.4796 165.0555 + 25.5296 165.0433 + 25.5796 165.0310 + 25.6296 165.0188 + 25.6796 165.0065 + 25.7296 164.9943 + 25.7796 164.9820 + 25.8296 164.9698 + 25.8796 164.9575 + 25.9296 164.9453 + 25.9796 164.9330 + 26.0296 164.9208 + 26.0796 164.9085 + 26.1296 164.8963 + 26.1796 164.8840 + 26.2296 164.8717 + 26.2796 164.8595 + 26.3296 164.8473 + 26.3796 164.8350 + 26.4296 164.8228 + 26.4796 164.8105 + 26.5296 164.7982 + 26.5796 164.7860 + 26.6296 164.7738 + 26.6796 164.7615 + 26.7296 164.7493 + 26.7796 164.7370 + 26.8296 164.7248 + 26.8796 164.7125 + 26.9296 164.7003 + 26.9796 164.6880 + 27.0296 164.6758 + 27.0796 164.6635 + 27.1296 164.6513 + 27.1796 164.6390 + 27.2296 164.6268 + 27.2796 164.6145 + 27.3296 164.6022 + 27.3796 164.5900 + 27.4296 164.5778 + 27.4796 164.5655 + 27.5296 164.5533 + 27.5796 164.5410 + 27.6296 164.5288 + 27.6796 164.5165 + 27.7296 164.5043 + 27.7796 164.4920 + 27.8296 164.4798 + 27.8796 164.4675 + 27.9296 164.4553 + 27.9796 164.4430 + 28.0296 164.4308 + 28.0796 164.4185 + 28.1296 164.4062 + 28.1796 164.3940 + 28.2296 164.3818 + 28.2796 164.3695 + 28.3296 164.3573 + 28.3796 164.3450 + 28.4296 164.3328 + 28.4796 164.3205 + 28.5296 164.3083 + 28.5796 164.2960 + 28.6296 164.2838 + 28.6796 164.2715 + 28.7296 164.2593 + 28.7796 164.2470 + 28.8296 164.2348 + 28.8796 164.2225 + 28.9296 164.2103 + 28.9796 164.1980 + 29.0296 164.1858 + 29.0796 164.1735 + 29.1296 164.1613 + 29.1796 164.1490 + 29.2296 164.1367 + 29.2796 164.1245 + 29.3296 164.1123 + 29.3796 164.1000 + 29.4296 164.1070 + 29.4796 164.1141 + 29.5296 164.1211 + 29.5796 164.1281 + 29.6296 164.1351 + 29.6796 164.1422 + 29.7296 164.1492 + 29.7796 164.1562 + 29.8296 164.1632 + 29.8796 164.1703 + 29.9296 164.1773 + 29.9796 164.1843 + 30.0296 164.1913 + 30.0796 164.1983 + 30.1296 164.2054 + 30.1796 164.2124 + 30.2296 164.2194 + 30.2796 164.2265 + 30.3296 164.2335 + 30.3796 164.2405 + 30.4296 164.2475 + 30.4796 164.2546 + 30.5296 164.2616 + 30.5796 164.2686 + 30.6296 164.2756 + 30.6796 164.2827 + 30.7296 164.2897 + 30.7796 164.2967 + 30.8296 164.3037 + 30.8796 164.3108 + 30.9296 164.3178 + 30.9796 164.3248 + 31.0296 164.3318 + 31.0796 164.3389 + 31.1296 164.3459 + 31.1796 164.3529 + 31.2296 164.3599 + 31.2796 164.3670 + 31.3296 164.3740 + 31.3796 164.3810 + 31.4296 164.3880 + 31.4796 164.3951 + 31.5296 164.4021 + 31.5796 164.4091 + 31.6296 164.4161 + 31.6796 164.4232 + 31.7296 164.4302 + 31.7796 164.4372 + 31.8296 164.4442 + 31.8796 164.4513 + 31.9296 164.4583 + 31.9796 164.4653 + 32.0296 164.4723 + 32.0796 164.4794 + 32.1296 164.4864 + 32.1796 164.4934 + 32.2296 164.5004 + 32.2796 164.5075 + 32.3296 164.5145 + 32.3796 164.5215 + 32.4296 164.5285 + 32.4796 164.5356 + 32.5296 164.5426 + 32.5796 164.5496 + 32.6296 164.5566 + 32.6796 164.5637 + 32.7296 164.5707 + 32.7796 164.5777 + 32.8296 164.5847 + 32.8796 164.5918 + 32.9296 164.5988 + 32.9796 164.6058 + 33.0296 164.6128 + 33.0796 164.6199 + 33.1296 164.6269 + 33.1796 164.6339 + 33.2296 164.6409 + 33.2796 164.6479 + 33.3296 164.6550 + 33.3796 164.6620 + 33.4296 164.6690 + 33.4796 164.6761 + 33.5296 164.6831 + 33.5796 164.6901 + 33.6296 164.6971 + 33.6796 164.7042 + 33.7296 164.7112 + 33.7796 164.7182 + 33.8296 164.7252 + 33.8796 164.7323 + 33.9296 164.7393 + 33.9796 164.7463 + 34.0296 164.7533 + 34.0796 164.7604 + 34.1296 164.7674 + 34.1796 164.7744 + 34.2296 164.7814 + 34.2796 164.7885 + 34.3296 164.7955 + 34.3796 164.8025 + 34.4296 164.8095 + 34.4796 164.8166 + 34.5296 164.8236 + 34.5796 164.8306 + 34.6296 164.8376 + 34.6796 164.8447 + 34.7296 164.8517 + 34.7796 164.8587 + 34.8296 164.8657 + 34.8796 164.8728 + 34.9296 164.8798 + 34.9796 164.8868 + 35.0296 164.8938 + 35.0796 164.9008 + 35.1296 164.9079 + 35.1796 164.9149 + 35.2296 164.9219 + 35.2796 164.9290 + 35.3296 164.9360 + 35.3796 164.9430 + 35.4296 164.9500 + 35.4796 164.9571 + 35.5296 164.9641 + 35.5796 164.9711 + 35.6296 164.9781 + 35.6796 164.9852 + 35.7296 164.9922 + 35.7796 164.9992 + 35.8296 165.0062 + 35.8796 165.0133 + 35.9296 165.0203 + 35.9796 165.0273 + 36.0296 165.0343 + 36.0796 165.0414 + 36.1296 165.0484 + 36.1796 165.0554 + 36.2296 165.0624 + 36.2796 165.0695 + 36.3296 165.0765 + 36.3796 165.0835 + 36.4296 165.0905 + 36.4796 165.0975 + 36.5296 165.1046 + 36.5796 165.1116 + 36.6296 165.1186 + 36.6796 165.1257 + 36.7296 165.1327 + 36.7796 165.1397 + 36.8296 165.1467 + 36.8796 165.1537 + 36.9296 165.1608 + 36.9796 165.1678 + 37.0296 165.1748 + 37.0796 165.1819 + 37.1296 165.1889 + 37.1796 165.1959 + 37.2296 165.2029 + 37.2796 165.2100 + 37.3296 165.2170 + 37.3796 165.2240 + 37.4296 165.2310 + 37.4796 165.2381 + 37.5296 165.2451 + 37.5796 165.2521 + 37.6296 165.2591 + 37.6796 165.2662 + 37.7296 165.2732 + 37.7796 165.2802 + 37.8296 165.2872 + 37.8796 165.2943 + 37.9296 165.3013 + 37.9796 165.3083 + 38.0296 165.3153 + 38.0796 165.3224 + 38.1296 165.3294 + 38.1796 165.3364 + 38.2296 165.3434 + 38.2796 165.3504 + 38.3296 165.3575 + 38.3796 165.3645 + 38.4296 165.3715 + 38.4796 165.3786 + 38.5296 165.3856 + 38.5796 165.3926 + 38.6296 165.3996 + 38.6796 165.4067 + 38.7296 165.4137 + 38.7796 165.4207 + 38.8296 165.4277 + 38.8796 165.4348 + 38.9296 165.4418 + 38.9796 165.4488 + 39.0296 165.4558 + 39.0796 165.4629 + 39.1296 165.4699 + 39.1796 165.4769 + 39.2296 165.4839 + 39.2796 165.4910 + 39.3296 165.4980 + 39.3796 165.5050 + 39.4296 165.5120 + 39.4796 165.5191 + 39.5296 165.5261 + 39.5796 165.5331 + 39.6296 165.5401 + 39.6796 165.5471 + 39.7296 165.5542 + 39.7796 165.5612 + 39.8296 165.5682 + 39.8796 165.5753 + 39.9296 165.5823 + 39.9796 165.5893 + 40.0296 165.5963 + 40.0796 165.6033 + 40.1296 165.6104 + 40.1796 165.6174 + 40.2296 165.6244 + 40.2796 165.6315 + 40.3296 165.6385 + 40.3796 165.6455 + 40.4296 165.6525 + 40.4796 165.6596 + 40.5296 165.6666 + 40.5796 165.6736 + 40.6296 165.6806 + 40.6796 165.6877 + 40.7296 165.6947 + 40.7796 165.7017 + 40.8296 165.7087 + 40.8796 165.7158 + 40.9296 165.7228 + 40.9796 165.7298 + 41.0296 165.7368 + 41.0796 165.7439 + 41.1296 165.7509 + 41.1796 165.7579 + 41.2296 165.7649 + 41.2796 165.7720 + 41.3296 165.7790 + 41.3796 165.7860 + 41.4296 165.7930 + 41.4796 165.8000 + 41.5296 165.8071 + 41.5796 165.8141 + 41.6296 165.8211 + 41.6796 165.8282 + 41.7296 165.8352 + 41.7796 165.8422 + 41.8296 165.8492 + 41.8796 165.8563 + 41.9296 165.8633 + 41.9796 165.8703 + 42.0296 165.8773 + 42.0796 165.8844 + 42.1296 165.8914 + 42.1796 165.8984 + 42.2296 165.9054 + 42.2796 165.9125 + 42.3296 165.9195 + 42.3796 165.9265 + 42.4296 165.9335 + 42.4796 165.9406 + 42.5296 165.9476 + 42.5796 165.9546 + 42.6296 165.9616 + 42.6796 165.9687 + 42.7296 165.9757 + 42.7796 165.9827 + 42.8296 165.9897 + 42.8796 165.9967 + 42.9296 166.0038 + 42.9796 166.0108 + 43.0296 166.0178 + 43.0796 166.0249 + 43.1296 166.0319 + 43.1796 166.0389 + 43.2296 166.0459 + 43.2796 166.0529 + 43.3296 166.0600 + 43.3796 166.0670 + 43.4296 166.0740 + 43.4796 166.0811 + 43.5296 166.0881 + 43.5796 166.0951 + 43.6296 166.1021 + 43.6796 166.1092 + 43.7296 166.1162 + 43.7796 166.1232 + 43.8296 166.1302 + 43.8796 166.1373 + 43.9296 166.1443 + 43.9796 166.1513 + 44.0296 166.1583 + 44.0796 166.1654 + 44.1296 166.1724 + 44.1796 166.1794 + 44.2296 166.1864 + 44.2796 166.1935 + 44.3296 166.2005 + 44.3796 166.2075 + 44.4296 166.2145 + 44.4796 166.2216 + 44.5296 166.2286 + 44.5796 166.2356 + 44.6296 166.2426 + 44.6796 166.2496 + 44.7296 166.2567 + 44.7796 166.2637 + 44.8296 166.2707 + 44.8796 166.2778 + 44.9296 166.2848 + 44.9796 166.2918 + 45.0296 166.2988 + 45.0796 166.3058 + 45.1296 166.3129 + 45.1796 166.3199 + 45.2296 166.3269 + 45.2796 166.3340 + 45.3296 166.3410 + 45.3796 166.3480 + 45.4296 166.3550 + 45.4796 166.3621 + 45.5296 166.3691 + 45.5796 166.3761 + 45.6296 166.3831 + 45.6796 166.3902 + 45.7296 166.3972 + 45.7796 166.4042 + 45.8296 166.4112 + 45.8796 166.4183 + 45.9296 166.4253 + 45.9796 166.4323 + 46.0296 166.4393 + 46.0796 166.4464 + 46.1296 166.4534 + 46.1796 166.4604 + 46.2296 166.4674 + 46.2796 166.4745 + 46.3296 166.4815 + 46.3796 166.4885 + 46.4296 166.4955 + 46.4796 166.5025 + 46.5296 166.5096 + 46.5796 166.5166 + 46.6296 166.5236 + 46.6796 166.5307 + 46.7296 166.5377 + 46.7796 166.5447 + 46.8296 166.5517 + 46.8796 166.5587 + 46.9296 166.5658 + 46.9796 166.5728 + 47.0296 166.5798 + 47.0796 166.5869 + 47.1296 166.5939 + 47.1796 166.6009 + 47.2296 166.6079 + 47.2796 166.6150 + 47.3296 166.6220 + 47.3796 166.6290 + 47.4296 166.6360 + 47.4796 166.6431 + 47.5296 166.6501 + 47.5796 166.6571 + 47.6296 166.6641 + 47.6796 166.6712 + 47.7296 166.6782 + 47.7796 166.6852 + 47.8296 166.6922 + 47.8796 166.6992 + 47.9296 166.7063 + 47.9796 166.7133 + 48.0296 166.7203 + 48.0796 166.7274 + 48.1296 166.7344 + 48.1796 166.7414 + 48.2296 166.7484 + 48.2796 166.7554 + 48.3296 166.7625 + 48.3796 166.7695 + 48.4296 166.7765 + 48.4796 166.7836 + 48.5296 166.7906 + 48.5796 166.7976 + 48.6296 166.8046 + 48.6796 166.8117 + 48.7296 166.8187 + 48.7796 166.8257 + 48.8296 166.8327 + 48.8796 166.8398 + 48.9296 166.8468 + 48.9796 166.8538 + 49.0296 166.8608 + 49.0796 166.8679 + 49.1296 166.8749 + 49.1796 166.8819 + 49.2296 166.8889 + 49.2796 166.8960 + 49.3296 166.9030 + 49.3796 166.9100 + 49.4296 166.9170 + 49.4796 166.9239 + 49.5296 166.9309 + 49.5796 166.9379 + 49.6296 166.9448 + 49.6796 166.9518 + 49.7296 166.9588 + 49.7796 166.9657 + 49.8296 166.9727 + 49.8796 166.9797 + 49.9296 166.9866 + 49.9796 166.9936 + 50.0296 167.0006 + 50.0796 167.0075 + 50.1296 167.0145 + 50.1796 167.0215 + 50.2296 167.0284 + 50.2796 167.0354 + 50.3296 167.0424 + 50.3796 167.0493 + 50.4296 167.0563 + 50.4796 167.0633 + 50.5296 167.0702 + 50.5796 167.0772 + 50.6296 167.0842 + 50.6796 167.0911 + 50.7296 167.0981 + 50.7796 167.1051 + 50.8296 167.1120 + 50.8796 167.1190 + 50.9296 167.1260 + 50.9796 167.1329 + 51.0296 167.1399 + 51.0796 167.1469 + 51.1296 167.1538 + 51.1796 167.1608 + 51.2296 167.1678 + 51.2796 167.1747 + 51.3296 167.1817 + 51.3796 167.1887 + 51.4296 167.1956 + 51.4796 167.2026 + 51.5296 167.2096 + 51.5796 167.2165 + 51.6296 167.2235 + 51.6796 167.2305 + 51.7296 167.2374 + 51.7796 167.2444 + 51.8296 167.2514 + 51.8796 167.2583 + 51.9296 167.2653 + 51.9796 167.2723 + 52.0296 167.2792 + 52.0796 167.2862 + 52.1296 167.2932 + 52.1796 167.3001 + 52.2296 167.3071 + 52.2796 167.3141 + 52.3296 167.3210 + 52.3796 167.3280 + 52.4296 167.3350 + 52.4796 167.3419 + 52.5296 167.3489 + 52.5796 167.3559 + 52.6296 167.3628 + 52.6796 167.3698 + 52.7296 167.3768 + 52.7796 167.3837 + 52.8296 167.3907 + 52.8796 167.3977 + 52.9296 167.4046 + 52.9796 167.4116 + 53.0296 167.4186 + 53.0796 167.4255 + 53.1296 167.4325 + 53.1796 167.4395 + 53.2296 167.4464 + 53.2796 167.4534 + 53.3296 167.4604 + 53.3796 167.4673 + 53.4296 167.4743 + 53.4796 167.4813 + 53.5296 167.4882 + 53.5796 167.4952 + 53.6296 167.5022 + 53.6796 167.5091 + 53.7296 167.5161 + 53.7796 167.5231 + 53.8296 167.5300 + 53.8796 167.5370 + 53.9296 167.5440 + 53.9796 167.5509 + 54.0296 167.5579 + 54.0796 167.5649 + 54.1296 167.5718 + 54.1796 167.5788 + 54.2296 167.5858 + 54.2796 167.5927 + 54.3296 167.5997 + 54.3796 167.6067 + 54.4296 167.6136 + 54.4796 167.6206 + 54.5296 167.6276 + 54.5796 167.6345 + 54.6296 167.6415 + 54.6796 167.6485 + 54.7296 167.6554 + 54.7796 167.6624 + 54.8296 167.6694 + 54.8796 167.6763 + 54.9296 167.6833 + 54.9796 167.6903 + 55.0296 167.6972 + 55.0796 167.7042 + 55.1296 167.7112 + 55.1796 167.7181 + 55.2296 167.7251 + 55.2796 167.7321 + 55.3296 167.7390 + 55.3796 167.7460 + 55.4296 167.7530 + 55.4796 167.7599 + 55.5296 167.7669 + 55.5796 167.7739 + 55.6296 167.7808 + 55.6796 167.7878 + 55.7296 167.7948 + 55.7796 167.8017 + 55.8296 167.8087 + 55.8796 167.8157 + 55.9296 167.8226 + 55.9796 167.8296 + 56.0296 167.8366 + 56.0796 167.8435 + 56.1296 167.8505 + 56.1796 167.8575 + 56.2296 167.8644 + 56.2796 167.8714 + 56.3296 167.8784 + 56.3796 167.8853 + 56.4296 167.8923 + 56.4796 167.8993 + 56.5296 167.9062 + 56.5796 167.9132 + 56.6296 167.9202 + 56.6796 167.9271 + 56.7296 167.9341 + 56.7796 167.9411 + 56.8296 167.9480 + 56.8796 167.9550 + 56.9296 167.9620 + 56.9796 167.9689 + 57.0296 167.9759 + 57.0796 167.9829 + 57.1296 167.9898 + 57.1796 167.9968 + 57.2296 168.0038 + 57.2796 168.0107 + 57.3296 168.0177 + 57.3796 168.0247 + 57.4296 168.0316 + 57.4796 168.0386 + 57.5296 168.0456 + 57.5796 168.0525 + 57.6296 168.0595 + 57.6796 168.0665 + 57.7296 168.0734 + 57.7796 168.0804 + 57.8296 168.0874 + 57.8796 168.0943 + 57.9296 168.1013 + 57.9796 168.1083 + 58.0296 168.1152 + 58.0796 168.1222 + 58.1296 168.1292 + 58.1796 168.1361 + 58.2296 168.1431 + 58.2796 168.1501 + 58.3296 168.1570 + 58.3796 168.1640 + 58.4296 168.1710 + 58.4796 168.1779 + 58.5296 168.1849 + 58.5796 168.1919 + 58.6296 168.1988 + 58.6796 168.2058 + 58.7296 168.2128 + 58.7796 168.2197 + 58.8296 168.2267 + 58.8796 168.2337 + 58.9296 168.2406 + 58.9796 168.2476 + 59.0296 168.2546 + 59.0796 168.2615 + 59.1296 168.2685 + 59.1796 168.2755 + 59.2296 168.2824 + 59.2796 168.2894 + 59.3296 168.2964 + 59.3796 168.3033 + 59.4296 168.3103 + 59.4796 168.3173 + 59.5296 168.3242 + 59.5796 168.3312 + 59.6296 168.3382 + 59.6796 168.3451 + 59.7296 168.3521 + 59.7796 168.3591 + 59.8296 168.3660 + 59.8796 168.3730 + 59.9296 168.3800 + 59.9796 168.3869 + 60.0296 168.3939 + 60.0796 168.4009 + 60.1296 168.4078 + 60.1796 168.4148 + 60.2296 168.4218 + 60.2796 168.4287 + 60.3296 168.4357 + 60.3796 168.4427 + 60.4296 168.4496 + 60.4796 168.4566 + 60.5296 168.4636 + 60.5796 168.4705 + 60.6296 168.4775 + 60.6796 168.4845 + 60.7296 168.4914 + 60.7796 168.4984 + 60.8296 168.5054 + 60.8796 168.5123 + 60.9296 168.5193 + 60.9796 168.5263 + 61.0296 168.5332 + 61.0796 168.5402 + 61.1296 168.5472 + 61.1796 168.5541 + 61.2296 168.5611 + 61.2796 168.5681 + 61.3296 168.5750 + 61.3796 168.5820 + 61.4296 168.5890 + 61.4796 168.5959 + 61.5296 168.6029 + 61.5796 168.6099 + 61.6296 168.6168 + 61.6796 168.6238 + 61.7296 168.6308 + 61.7796 168.6377 + 61.8296 168.6447 + 61.8796 168.6517 + 61.9296 168.6586 + 61.9796 168.6656 + 62.0296 168.6726 + 62.0796 168.6795 + 62.1296 168.6865 + 62.1796 168.6935 + 62.2296 168.7004 + 62.2796 168.7074 + 62.3296 168.7144 + 62.3796 168.7213 + 62.4296 168.7283 + 62.4796 168.7353 + 62.5296 168.7422 + 62.5796 168.7492 + 62.6296 168.7562 + 62.6796 168.7631 + 62.7296 168.7701 + 62.7796 168.7771 + 62.8296 168.7840 + 62.8796 168.7910 + 62.9296 168.7980 + 62.9796 168.8049 + 63.0296 168.8119 + 63.0796 168.8189 + 63.1296 168.8258 + 63.1796 168.8328 + 63.2296 168.8398 + 63.2796 168.8467 + 63.3296 168.8537 + 63.3796 168.8607 + 63.4296 168.8676 + 63.4796 168.8746 + 63.5296 168.8816 + 63.5796 168.8885 + 63.6296 168.8955 + 63.6796 168.9025 + 63.7296 168.9094 + 63.7796 168.9164 + 63.8296 168.9234 + 63.8796 168.9303 + 63.9296 168.9373 + 63.9796 168.9443 + 64.0296 168.9512 + 64.0796 168.9582 + 64.1296 168.9652 + 64.1796 168.9721 + 64.2296 168.9791 + 64.2796 168.9861 + 64.3296 168.9930 + 64.3796 169.0000 + 64.4296 169.0070 + 64.4796 169.0139 + 64.5296 169.0209 + 64.5796 169.0279 + 64.6296 169.0348 + 64.6796 169.0418 + 64.7296 169.0488 + 64.7796 169.0557 + 64.8296 169.0627 + 64.8796 169.0697 + 64.9296 169.0766 + 64.9796 169.0836 + 65.0296 169.0906 + 65.0796 169.0975 + 65.1296 169.1045 + 65.1796 169.1115 + 65.2296 169.1184 + 65.2796 169.1254 + 65.3296 169.1324 + 65.3796 169.1393 + 65.4296 169.1463 + 65.4796 169.1533 + 65.5296 169.1602 + 65.5796 169.1672 + 65.6296 169.1742 + 65.6796 169.1811 + 65.7296 169.1881 + 65.7796 169.1951 + 65.8296 169.2020 + 65.8796 169.2090 + 65.9296 169.2160 + 65.9796 169.2229 + 66.0296 169.2299 + 66.0796 169.2369 + 66.1296 169.2438 + 66.1796 169.2508 + 66.2296 169.2578 + 66.2796 169.2647 + 66.3296 169.2717 + 66.3796 169.2787 + 66.4296 169.2856 + 66.4796 169.2926 + 66.5296 169.2996 + 66.5796 169.3065 + 66.6296 169.3135 + 66.6796 169.3205 + 66.7296 169.3274 + 66.7796 169.3344 + 66.8296 169.3414 + 66.8796 169.3483 + 66.9296 169.3553 + 66.9796 169.3623 + 67.0296 169.3692 + 67.0796 169.3762 + 67.1296 169.3832 + 67.1796 169.3901 + 67.2296 169.3971 + 67.2796 169.4041 + 67.3296 169.4110 + 67.3796 169.4180 + 67.4296 169.4250 + 67.4796 169.4319 + 67.5296 169.4389 + 67.5796 169.4459 + 67.6296 169.4528 + 67.6796 169.4598 + 67.7296 169.4668 + 67.7796 169.4737 + 67.8296 169.4807 + 67.8796 169.4877 + 67.9296 169.4946 + 67.9796 169.5016 + 68.0296 169.5086 + 68.0796 169.5155 + 68.1296 169.5225 + 68.1796 169.5295 + 68.2296 169.5364 + 68.2796 169.5434 + 68.3296 169.5504 + 68.3796 169.5573 + 68.4296 169.5643 + 68.4796 169.5713 + 68.5296 169.5782 + 68.5796 169.5852 + 68.6296 169.5922 + 68.6796 169.5991 + 68.7296 169.6061 + 68.7796 169.6131 + 68.8296 169.6200 + 68.8796 169.6270 + 68.9296 169.6340 + 68.9796 169.6409 + 69.0296 169.6479 + 69.0796 169.6549 + 69.1296 169.6618 + 69.1796 169.6688 + 69.2296 169.6758 + 69.2796 169.6827 + 69.3296 169.6897 + 69.3796 169.6967 + 69.4296 169.7036 + 69.4796 169.7106 + 69.5296 169.7176 + 69.5796 169.7245 + 69.6296 169.7315 + 69.6796 169.7385 + 69.7296 169.7454 + 69.7796 169.7524 + 69.8296 169.7594 + 69.8796 169.7663 + 69.9296 169.7733 + 69.9796 169.7803 + 70.0296 169.7872 + 70.0796 169.7942 + 70.1296 169.8012 + 70.1796 169.8081 + 70.2296 169.8151 + 70.2796 169.8221 + 70.3296 169.8290 + 70.3796 169.8360 + 70.4296 169.8430 + 70.4796 169.8499 + 70.5296 169.8569 + 70.5796 169.8639 + 70.6296 169.8708 + 70.6796 169.8778 + 70.7296 169.8848 + 70.7796 169.8917 + 70.8296 169.8987 + 70.8796 169.9057 + 70.9296 169.9126 + 70.9796 169.9196 + 71.0296 169.9266 + 71.0796 169.9335 + 71.1296 169.9405 + 71.1796 169.9475 + 71.2296 169.9544 + 71.2796 169.9614 + 71.3296 169.9684 + 71.3796 169.9753 + 71.4296 169.9823 + 71.4796 169.9893 + 71.5296 169.9962 + 71.5796 170.0032 + 71.6296 170.0102 + 71.6796 170.0171 + 71.7296 170.0241 + 71.7796 170.0311 + 71.8296 170.0380 + 71.8796 170.0450 + 71.9296 170.0520 + 71.9796 170.0589 + 72.0296 170.0659 + 72.0796 170.0729 + 72.1296 170.0798 + 72.1796 170.0868 + 72.2296 170.0938 + 72.2796 170.1007 + 72.3296 170.1077 + 72.3796 170.1147 + 72.4296 170.1216 + 72.4796 170.1286 + 72.5296 170.1356 + 72.5796 170.1425 + 72.6296 170.1495 + 72.6796 170.1565 + 72.7296 170.1634 + 72.7796 170.1704 + 72.8296 170.1774 + 72.8796 170.1843 + 72.9296 170.1913 + 72.9796 170.1983 + 73.0296 170.2052 + 73.0796 170.2122 + 73.1296 170.2192 + 73.1796 170.2261 + 73.2296 170.2331 + 73.2796 170.2401 + 73.3296 170.2470 + 73.3796 170.2540 + 73.4296 170.2610 + 73.4796 170.2679 + 73.5296 170.2749 + 73.5796 170.2819 + 73.6296 170.2888 + 73.6796 170.2958 + 73.7296 170.3028 + 73.7796 170.3097 + 73.8296 170.3167 + 73.8796 170.3237 + 73.9296 170.3306 + 73.9796 170.3376 + 74.0296 170.3446 + 74.0796 170.3515 + 74.1296 170.3585 + 74.1796 170.3655 + 74.2296 170.3724 + 74.2796 170.3794 + 74.3296 170.3864 + 74.3796 170.3933 + 74.4296 170.4003 + 74.4796 170.4073 + 74.5296 170.4142 + 74.5796 170.4212 + 74.6296 170.4282 + 74.6796 170.4351 + 74.7296 170.4421 + 74.7796 170.4491 + 74.8296 170.4560 + 74.8796 170.4630 + 74.9296 170.4700 + 74.9796 170.4769 + 75.0296 170.4839 + 75.0796 170.4909 + 75.1296 170.4978 + 75.1796 170.5048 + 75.2296 170.5118 + 75.2796 170.5187 + 75.3296 170.5257 + 75.3796 170.5327 + 75.4296 170.5396 + 75.4796 170.5466 + 75.5296 170.5536 + 75.5796 170.5605 + 75.6296 170.5675 + 75.6796 170.5745 + 75.7296 170.5814 + 75.7796 170.5884 + 75.8296 170.5954 + 75.8796 170.6023 + 75.9296 170.6093 + 75.9796 170.6163 + 76.0296 170.6232 + 76.0796 170.6302 + 76.1296 170.6372 + 76.1796 170.6441 + 76.2296 170.6511 + 76.2796 170.6581 + 76.3296 170.6650 + 76.3796 170.6720 + 76.4296 170.6790 + 76.4796 170.6859 + 76.5296 170.6929 + 76.5796 170.6999 + 76.6296 170.7068 + 76.6796 170.7138 + 76.7296 170.7208 + 76.7796 170.7277 + 76.8296 170.7347 + 76.8796 170.7417 + 76.9296 170.7486 + 76.9796 170.7556 + 77.0296 170.7626 + 77.0796 170.7695 + 77.1296 170.7765 + 77.1796 170.7835 + 77.2296 170.7904 + 77.2796 170.7974 + 77.3296 170.8044 + 77.3796 170.8113 + 77.4296 170.8183 + 77.4796 170.8253 + 77.5296 170.8322 + 77.5796 170.8392 + 77.6296 170.8462 + 77.6796 170.8531 + 77.7296 170.8601 + 77.7796 170.8671 + 77.8296 170.8740 + 77.8796 170.8810 + 77.9296 170.8880 + 77.9796 170.8949 + 78.0296 170.9019 + 78.0796 170.9089 + 78.1296 170.9158 + 78.1796 170.9228 + 78.2296 170.9298 + 78.2796 170.9367 + 78.3296 170.9437 + 78.3796 170.9507 + 78.4296 170.9576 + 78.4796 170.9646 + 78.5296 170.9716 + 78.5796 170.9785 + 78.6296 170.9855 + 78.6796 170.9925 + 78.7296 170.9994 + 78.7796 171.0064 + 78.8296 171.0134 + 78.8796 171.0203 + 78.9296 171.0273 + 78.9796 171.0343 + 79.0296 171.0412 + 79.0796 171.0482 + 79.1296 171.0552 + 79.1796 171.0621 + 79.2296 171.0691 + 79.2796 171.0761 + 79.3296 171.0830 + 79.3796 171.0900 + 79.4296 171.0970 + 79.4796 171.1039 + 79.5296 171.1109 + 79.5796 171.1179 + 79.6296 171.1248 + 79.6796 171.1318 + 79.7296 171.1388 + 79.7796 171.1457 + 79.8296 171.1527 + 79.8796 171.1597 + 79.9296 171.1666 + 79.9796 171.1736 + 80.0296 171.1806 + 80.0796 171.1875 + 80.1296 171.1945 + 80.1796 171.2015 + 80.2296 171.2084 + 80.2796 171.2154 + 80.3296 171.2224 + 80.3796 171.2293 + 80.4296 171.2363 + 80.4796 171.2433 + 80.5296 171.2502 + 80.5796 171.2572 + 80.6296 171.2642 + 80.6796 171.2711 + 80.7296 171.2781 + 80.7796 171.2851 + 80.8296 171.2920 + 80.8796 171.2990 + 80.9296 171.3060 + 80.9796 171.3129 + 81.0296 171.3199 + 81.0796 171.3269 + 81.1296 171.3338 + 81.1796 171.3408 + 81.2296 171.3478 + 81.2796 171.3547 + 81.3296 171.3617 + 81.3796 171.3687 + 81.4296 171.3756 + 81.4796 171.3826 + 81.5296 171.3896 + 81.5796 171.3965 + 81.6296 171.4035 + 81.6796 171.4105 + 81.7296 171.4174 + 81.7796 171.4244 + 81.8296 171.4314 + 81.8796 171.4383 + 81.9296 171.4453 + 81.9796 171.4523 + 82.0296 171.4592 + 82.0796 171.4662 + 82.1296 171.4732 + 82.1796 171.4801 + 82.2296 171.4871 + 82.2796 171.4941 + 82.3296 171.5010 + 82.3796 171.5080 + 82.4296 171.5150 + 82.4796 171.5219 + 82.5296 171.5289 + 82.5796 171.5359 + 82.6296 171.5428 + 82.6796 171.5498 + 82.7296 171.5568 + 82.7796 171.5637 + 82.8296 171.5707 + 82.8796 171.5777 + 82.9296 171.5846 + 82.9796 171.5916 + 83.0296 171.5986 + 83.0796 171.6055 + 83.1296 171.6125 + 83.1796 171.6195 + 83.2296 171.6264 + 83.2796 171.6334 + 83.3296 171.6404 + 83.3796 171.6473 + 83.4296 171.6543 + 83.4796 171.6613 + 83.5296 171.6682 + 83.5796 171.6752 + 83.6296 171.6822 + 83.6796 171.6891 + 83.7296 171.6961 + 83.7796 171.7031 + 83.8296 171.7100 + 83.8796 171.7170 + 83.9296 171.7240 + 83.9796 171.7309 + 84.0296 171.7379 + 84.0796 171.7449 + 84.1296 171.7518 + 84.1796 171.7588 + 84.2296 171.7658 + 84.2796 171.7727 + 84.3296 171.7797 + 84.3796 171.7867 + 84.4296 171.7936 + 84.4796 171.8006 + 84.5296 171.8076 + 84.5796 171.8145 + 84.6296 171.8215 + 84.6796 171.8285 + 84.7296 171.8354 + 84.7796 171.8424 + 84.8296 171.8494 + 84.8796 171.8563 + 84.9296 171.8633 + 84.9796 171.8703 + 85.0296 171.8772 + 85.0796 171.8842 + 85.1296 171.8912 + 85.1796 171.8981 + 85.2296 171.9051 + 85.2796 171.9121 + 85.3296 171.9190 + 85.3796 171.9260 + 85.4296 171.9330 + 85.4796 171.9399 + 85.5296 171.9469 + 85.5796 171.9539 + 85.6296 171.9608 + 85.6796 171.9678 + 85.7296 171.9748 + 85.7796 171.9817 + 85.8296 171.9887 + 85.8796 171.9957 + 85.9296 172.0026 + 85.9796 172.0096 + 86.0296 172.0166 + 86.0796 172.0235 + 86.1296 172.0305 + 86.1796 172.0375 + 86.2296 172.0444 + 86.2796 172.0514 + 86.3296 172.0584 + 86.3796 172.0653 + 86.4296 172.0723 + 86.4796 172.0793 + 86.5296 172.0862 + 86.5796 172.0932 + 86.6296 172.1002 + 86.6796 172.1071 + 86.7296 172.1141 + 86.7796 172.1211 + 86.8296 172.1280 + 86.8796 172.1350 + 86.9296 172.1420 + 86.9796 172.1489 + 87.0296 172.1559 + 87.0796 172.1629 + 87.1296 172.1698 + 87.1796 172.1768 + 87.2296 172.1838 + 87.2796 172.1907 + 87.3296 172.1977 + 87.3796 172.2047 + 87.4296 172.2116 + 87.4796 172.2186 + 87.5296 172.2256 + 87.5796 172.2325 + 87.6296 172.2395 + 87.6796 172.2465 + 87.7296 172.2534 + 87.7796 172.2604 + 87.8296 172.2674 + 87.8796 172.2743 + 87.9296 172.2813 + 87.9796 172.2883 + 88.0296 172.2952 + 88.0796 172.3022 + 88.1296 172.3092 + 88.1796 172.3161 + 88.2296 172.3231 + 88.2796 172.3301 + 88.3296 172.3370 + 88.3796 172.3440 + 88.4296 172.3510 + 88.4796 172.3579 + 88.5296 172.3649 + 88.5796 172.3719 + 88.6296 172.3788 + 88.6796 172.3858 + 88.7296 172.3928 + 88.7796 172.3997 + 88.8296 172.4067 + 88.8796 172.4137 + 88.9296 172.4206 + 88.9796 172.4276 + 89.0296 172.4346 + 89.0796 172.4415 + 89.1296 172.4485 + 89.1796 172.4555 + 89.2296 172.4624 + 89.2796 172.4694 + 89.3296 172.4764 + 89.3796 172.4833 + 89.4296 172.4903 + 89.4796 172.4973 + 89.5296 172.5042 + 89.5796 172.5112 + 89.6296 172.5182 + 89.6796 172.5251 + 89.7296 172.5321 + 89.7796 172.5391 + 89.8296 172.5460 + 89.8796 172.5530 + 89.9296 172.5600 + 89.9796 172.5669 + 90.0296 172.5739 + 90.0796 172.5809 + 90.1296 172.5878 + 90.1796 172.5948 + 90.2296 172.6018 + 90.2796 172.6087 + 90.3296 172.6157 + 90.3796 172.6227 + 90.4296 172.6296 + 90.4796 172.6366 + 90.5296 172.6436 + 90.5796 172.6505 + 90.6296 172.6575 + 90.6796 172.6645 + 90.7296 172.6714 + 90.7796 172.6784 + 90.8296 172.6854 + 90.8796 172.6923 + 90.9296 172.6993 + 90.9796 172.7063 + 91.0296 172.7132 + 91.0796 172.7202 + 91.1296 172.7272 + 91.1796 172.7341 + 91.2296 172.7411 + 91.2796 172.7481 + 91.3296 172.7550 + 91.3796 172.7620 + 91.4296 172.7690 + 91.4796 172.7759 + 91.5296 172.7829 + 91.5796 172.7899 + 91.6296 172.7968 + 91.6796 172.8038 + 91.7296 172.8108 + 91.7796 172.8177 + 91.8296 172.8247 + 91.8796 172.8317 + 91.9296 172.8386 + 91.9796 172.8456 + 92.0296 172.8526 + 92.0796 172.8595 + 92.1296 172.8665 + 92.1796 172.8735 + 92.2296 172.8804 + 92.2796 172.8874 + 92.3296 172.8944 + 92.3796 172.9013 + 92.4296 172.9083 + 92.4796 172.9153 + 92.5296 172.9222 + 92.5796 172.9292 + 92.6296 172.9362 + 92.6796 172.9431 + 92.7296 172.9501 + 92.7796 172.9571 + 92.8296 172.9640 + 92.8796 172.9710 + 92.9296 172.9780 + 92.9796 172.9849 + 93.0296 172.9919 + 93.0796 172.9989 + 93.1296 173.0058 + 93.1796 173.0128 + 93.2296 173.0198 + 93.2796 173.0267 + 93.3296 173.0337 + 93.3796 173.0407 + 93.4296 173.0476 + 93.4796 173.0546 + 93.5296 173.0616 + 93.5796 173.0685 + 93.6296 173.0755 + 93.6796 173.0825 + 93.7296 173.0894 + 93.7796 173.0964 + 93.8296 173.1034 + 93.8796 173.1103 + 93.9296 173.1173 + 93.9796 173.1243 + 94.0296 173.1312 + 94.0796 173.1382 + 94.1296 173.1452 + 94.1796 173.1521 + 94.2296 173.1591 + 94.2796 173.1661 + 94.3296 173.1730 + 94.3796 173.1800 + 94.4296 173.1870 + 94.4796 173.1939 + 94.5296 173.2009 + 94.5796 173.2079 + 94.6296 173.2148 + 94.6796 173.2218 + 94.7296 173.2288 + 94.7796 173.2357 + 94.8296 173.2427 + 94.8796 173.2497 + 94.9296 173.2566 + 94.9796 173.2636 + 95.0296 173.2706 + 95.0796 173.2775 + 95.1296 173.2845 + 95.1796 173.2915 + 95.2296 173.2984 + 95.2796 173.3054 + 95.3296 173.3124 + 95.3796 173.3193 + 95.4296 173.3263 + 95.4796 173.3333 + 95.5296 173.3402 + 95.5796 173.3472 + 95.6296 173.3542 + 95.6796 173.3611 + 95.7296 173.3681 + 95.7796 173.3751 + 95.8296 173.3820 + 95.8796 173.3890 + 95.9296 173.3960 + 95.9796 173.4029 + 96.0296 173.4099 + 96.0796 173.4169 + 96.1296 173.4238 + 96.1796 173.4308 + 96.2296 173.4378 + 96.2796 173.4447 + 96.3296 173.4517 + 96.3796 173.4587 + 96.4296 173.4656 + 96.4796 173.4726 + 96.5296 173.4796 + 96.5796 173.4865 + 96.6296 173.4935 + 96.6796 173.5005 + 96.7296 173.5074 + 96.7796 173.5144 + 96.8296 173.5214 + 96.8796 173.5283 + 96.9296 173.5353 + 96.9796 173.5423 + 97.0296 173.5492 + 97.0796 173.5562 + 97.1296 173.5632 + 97.1796 173.5701 + 97.2296 173.5771 + 97.2796 173.5841 + 97.3296 173.5910 + 97.3796 173.5980 + 97.4296 173.6050 + 97.4796 173.6119 + 97.5296 173.6189 + 97.5796 173.6259 + 97.6296 173.6328 + 97.6796 173.6398 + 97.7296 173.6468 + 97.7796 173.6537 + 97.8296 173.6607 + 97.8796 173.6677 + 97.9296 173.6746 + 97.9796 173.6816 + 98.0296 173.6886 + 98.0796 173.6955 + 98.1296 173.7025 + 98.1796 173.7095 + 98.2296 173.7164 + 98.2796 173.7234 + 98.3296 173.7304 + 98.3796 173.7373 + 98.4296 173.7443 + 98.4796 173.7513 + 98.5296 173.7582 + 98.5796 173.7652 + 98.6296 173.7722 + 98.6796 173.7791 + 98.7296 173.7861 + 98.7796 173.7931 + 98.8296 173.8000 + 98.8796 173.8070 + 98.9296 173.8140 + 98.9796 173.8209 + 99.0296 173.8279 + 99.0796 173.8349 + 99.1296 173.8418 + 99.1796 173.8488 + 99.2296 173.8558 + 99.2796 173.8627 + 99.3296 173.8697 + 99.3796 173.8767 + 99.4296 173.8836 + 99.4796 173.8906 + 99.5296 173.8976 + 99.5796 173.9045 + 99.6296 173.9115 + 99.6796 173.9185 + 99.7296 173.9254 + 99.7796 173.9324 + 99.8296 173.9394 + 99.8796 173.9463 + 99.9296 173.9533 + 99.9796 173.9603 + 100.0296 173.9672 + 100.0796 173.9742 + 100.1296 173.9812 + 100.1796 173.9881 + 100.2296 173.9951 + 100.2796 174.0021 + 100.3296 174.0090 + 100.3796 174.0160 + 100.4296 174.0230 + 100.4796 174.0299 + 100.5296 174.0369 + 100.5796 174.0439 + 100.6296 174.0508 + 100.6796 174.0578 + 100.7296 174.0648 + 100.7796 174.0717 + 100.8296 174.0787 + 100.8796 174.0857 + 100.9296 174.0926 + 100.9796 174.0996 + 101.0296 174.1066 + 101.0796 174.1135 + 101.1296 174.1205 + 101.1796 174.1275 + 101.2296 174.1344 + 101.2796 174.1414 + 101.3296 174.1484 + 101.3796 174.1553 + 101.4296 174.1623 + 101.4796 174.1693 + 101.5296 174.1762 + 101.5796 174.1832 + 101.6296 174.1902 + 101.6796 174.1971 + 101.7296 174.2041 + 101.7796 174.2111 + 101.8296 174.2180 + 101.8796 174.2250 + 101.9296 174.2320 + 101.9796 174.2389 + 102.0296 174.2459 + 102.0796 174.2529 + 102.1296 174.2598 + 102.1796 174.2668 + 102.2296 174.2738 + 102.2796 174.2807 + 102.3296 174.2877 + 102.3796 174.2947 + 102.4296 174.3016 + 102.4796 174.3086 + 102.5296 174.3156 + 102.5796 174.3225 + 102.6296 174.3295 + 102.6796 174.3365 + 102.7296 174.3434 + 102.7796 174.3504 + 102.8296 174.3574 + 102.8796 174.3643 + 102.9296 174.3713 + 102.9796 174.3783 + 103.0296 174.3852 + 103.0796 174.3922 + 103.1296 174.3992 + 103.1796 174.4061 + 103.2296 174.4131 + 103.2796 174.4201 + 103.3296 174.4270 + 103.3796 174.4340 + 103.4296 174.4410 + 103.4796 174.4479 + 103.5296 174.4549 + 103.5796 174.4619 + 103.6296 174.4688 + 103.6796 174.4758 + 103.7296 174.4828 + 103.7796 174.4897 + 103.8296 174.4967 + 103.8796 174.5037 + 103.9296 174.5106 + 103.9796 174.5176 + 104.0296 174.5246 + 104.0796 174.5315 + 104.1296 174.5385 + 104.1796 174.5455 + 104.2296 174.5524 + 104.2796 174.5594 + 104.3296 174.5664 + 104.3796 174.5733 + 104.4296 174.5803 + 104.4796 174.5873 + 104.5296 174.5942 + 104.5796 174.6012 + 104.6296 174.6082 + 104.6796 174.6151 + 104.7296 174.6221 + 104.7796 174.6291 + 104.8296 174.6360 + 104.8796 174.6430 + 104.9296 174.6500 + 104.9796 174.6569 + 105.0296 174.6639 + 105.0796 174.6709 + 105.1296 174.6778 + 105.1796 174.6848 + 105.2296 174.6918 + 105.2796 174.6987 + 105.3296 174.7057 + 105.3796 174.7127 + 105.4296 174.7196 + 105.4796 174.7266 + 105.5296 174.7336 + 105.5796 174.7405 + 105.6296 174.7475 + 105.6796 174.7545 + 105.7296 174.7614 + 105.7796 174.7684 + 105.8296 174.7754 + 105.8796 174.7823 + 105.9296 174.7893 + 105.9796 174.7963 + 106.0296 174.8032 + 106.0796 174.8102 + 106.1296 174.8172 + 106.1796 174.8241 + 106.2296 174.8311 + 106.2796 174.8381 + 106.3296 174.8450 + 106.3796 174.8520 + 106.4296 174.8590 + 106.4796 174.8659 + 106.5296 174.8729 + 106.5796 174.8799 + 106.6296 174.8868 + 106.6796 174.8938 + 106.7296 174.9008 + 106.7796 174.9077 + 106.8296 174.9147 + 106.8796 174.9217 + 106.9296 174.9286 + 106.9796 174.9356 + 107.0296 174.9426 + 107.0796 174.9495 + 107.1296 174.9565 + 107.1796 174.9635 + 107.2296 174.9704 + 107.2796 174.9774 + 107.3296 174.9844 + 107.3796 174.9913 + 107.4296 174.9983 + 107.4796 175.0053 + 107.5296 175.0122 + 107.5796 175.0192 + 107.6296 175.0262 + 107.6796 175.0331 + 107.7296 175.0401 + 107.7796 175.0471 + 107.8296 175.0540 + 107.8796 175.0610 + 107.9296 175.0680 + 107.9796 175.0749 + 108.0296 175.0819 + 108.0796 175.0889 + 108.1296 175.0958 + 108.1796 175.1028 + 108.2296 175.1098 + 108.2796 175.1167 + 108.3296 175.1237 + 108.3796 175.1307 + 108.4296 175.1376 + 108.4796 175.1446 + 108.5296 175.1516 + 108.5796 175.1585 + 108.6296 175.1655 + 108.6796 175.1725 + 108.7296 175.1794 + 108.7796 175.1864 + 108.8296 175.1934 + 108.8796 175.2003 + 108.9296 175.2073 + 108.9796 175.2143 + 109.0296 175.2212 + 109.0796 175.2282 + 109.1296 175.2352 + 109.1796 175.2421 + 109.2296 175.2491 + 109.2796 175.2561 + 109.3296 175.2630 + 109.3796 175.2700 + 109.4296 175.2694 + 109.4796 175.2687 + 109.5296 175.2681 + 109.5796 175.2674 + 109.6296 175.2668 + 109.6796 175.2661 + 109.7296 175.2655 + 109.7796 175.2648 + 109.8296 175.2642 + 109.8796 175.2635 + 109.9296 175.2629 + 109.9796 175.2623 + 110.0296 175.2616 + 110.0796 175.2610 + 110.1296 175.2603 + 110.1796 175.2597 + 110.2296 175.2590 + 110.2796 175.2584 + 110.3296 175.2577 + 110.3796 175.2571 + 110.4296 175.2565 + 110.4796 175.2558 + 110.5296 175.2552 + 110.5796 175.2545 + 110.6296 175.2539 + 110.6796 175.2532 + 110.7296 175.2526 + 110.7796 175.2519 + 110.8296 175.2513 + 110.8796 175.2506 + 110.9296 175.2500 + 110.9796 175.2493 + 111.0296 175.2487 + 111.0796 175.2481 + 111.1296 175.2474 + 111.1796 175.2468 + 111.2296 175.2461 + 111.2796 175.2455 + 111.3296 175.2448 + 111.3796 175.2442 + 111.4296 175.2435 + 111.4796 175.2429 + 111.5296 175.2422 + 111.5796 175.2416 + 111.6296 175.2410 + 111.6796 175.2403 + 111.7296 175.2397 + 111.7796 175.2390 + 111.8296 175.2384 + 111.8796 175.2377 + 111.9296 175.2371 + 111.9796 175.2364 + 112.0296 175.2358 + 112.0796 175.2352 + 112.1296 175.2345 + 112.1796 175.2339 + 112.2296 175.2332 + 112.2796 175.2326 + 112.3296 175.2319 + 112.3796 175.2313 + 112.4296 175.2306 + 112.4796 175.2300 + 112.5296 175.2293 + 112.5796 175.2287 + 112.6296 175.2280 + 112.6796 175.2274 + 112.7296 175.2268 + 112.7796 175.2261 + 112.8296 175.2255 + 112.8796 175.2248 + 112.9296 175.2242 + 112.9796 175.2235 + 113.0296 175.2229 + 113.0796 175.2222 + 113.1296 175.2216 + 113.1796 175.2209 + 113.2296 175.2203 + 113.2796 175.2197 + 113.3296 175.2190 + 113.3796 175.2184 + 113.4296 175.2177 + 113.4796 175.2171 + 113.5296 175.2164 + 113.5796 175.2158 + 113.6296 175.2151 + 113.6796 175.2145 + 113.7296 175.2139 + 113.7796 175.2132 + 113.8296 175.2126 + 113.8796 175.2119 + 113.9296 175.2113 + 113.9796 175.2106 + 114.0296 175.2100 + 114.0796 175.2093 + 114.1296 175.2087 + 114.1796 175.2080 + 114.2296 175.2074 + 114.2796 175.2068 + 114.3296 175.2061 + 114.3796 175.2055 + 114.4296 175.2048 + 114.4796 175.2042 + 114.5296 175.2035 + 114.5796 175.2029 + 114.6296 175.2022 + 114.6796 175.2016 + 114.7296 175.2009 + 114.7796 175.2003 + 114.8296 175.1996 + 114.8796 175.1990 + 114.9296 175.1984 + 114.9796 175.1977 + 115.0296 175.1971 + 115.0796 175.1964 + 115.1296 175.1958 + 115.1796 175.1951 + 115.2296 175.1945 + 115.2796 175.1938 + 115.3296 175.1932 + 115.3796 175.1926 + 115.4296 175.1919 + 115.4796 175.1913 + 115.5296 175.1906 + 115.5796 175.1900 + 115.6296 175.1893 + 115.6796 175.1887 + 115.7296 175.1880 + 115.7796 175.1874 + 115.8296 175.1867 + 115.8796 175.1861 + 115.9296 175.1855 + 115.9796 175.1848 + 116.0296 175.1842 + 116.0796 175.1835 + 116.1296 175.1829 + 116.1796 175.1822 + 116.2296 175.1816 + 116.2796 175.1809 + 116.3296 175.1803 + 116.3796 175.1796 + 116.4296 175.1790 + 116.4796 175.1783 + 116.5296 175.1777 + 116.5796 175.1771 + 116.6296 175.1764 + 116.6796 175.1758 + 116.7296 175.1751 + 116.7796 175.1745 + 116.8296 175.1738 + 116.8796 175.1732 + 116.9296 175.1725 + 116.9796 175.1719 + 117.0296 175.1712 + 117.0796 175.1706 + 117.1296 175.1700 + 117.1796 175.1693 + 117.2296 175.1687 + 117.2796 175.1680 + 117.3296 175.1674 + 117.3796 175.1667 + 117.4296 175.1661 + 117.4796 175.1654 + 117.5296 175.1648 + 117.5796 175.1642 + 117.6296 175.1635 + 117.6796 175.1629 + 117.7296 175.1622 + 117.7796 175.1616 + 117.8296 175.1609 + 117.8796 175.1603 + 117.9296 175.1596 + 117.9796 175.1590 + 118.0296 175.1583 + 118.0796 175.1577 + 118.1296 175.1570 + 118.1796 175.1564 + 118.2296 175.1558 + 118.2796 175.1551 + 118.3296 175.1545 + 118.3796 175.1538 + 118.4296 175.1532 + 118.4796 175.1525 + 118.5296 175.1519 + 118.5796 175.1512 + 118.6296 175.1506 + 118.6796 175.1499 + 118.7296 175.1493 + 118.7796 175.1487 + 118.8296 175.1480 + 118.8796 175.1474 + 118.9296 175.1467 + 118.9796 175.1461 + 119.0296 175.1454 + 119.0796 175.1448 + 119.1296 175.1441 + 119.1796 175.1435 + 119.2296 175.1429 + 119.2796 175.1422 + 119.3296 175.1416 + 119.3796 175.1409 + 119.4296 175.1403 + 119.4796 175.1396 + 119.5296 175.1390 + 119.5796 175.1383 + 119.6296 175.1377 + 119.6796 175.1370 + 119.7296 175.1364 + 119.7796 175.1357 + 119.8296 175.1351 + 119.8796 175.1345 + 119.9296 175.1338 + 119.9796 175.1332 + 120.0296 175.1325 + 120.0796 175.1319 + 120.1296 175.1312 + 120.1796 175.1306 + 120.2296 175.1299 + 120.2796 175.1293 + 120.3296 175.1286 + 120.3796 175.1280 + 120.4296 175.1273 + 120.4796 175.1267 + 120.5296 175.1261 + 120.5796 175.1254 + 120.6296 175.1248 + 120.6796 175.1241 + 120.7296 175.1235 + 120.7796 175.1228 + 120.8296 175.1222 + 120.8796 175.1216 + 120.9296 175.1209 + 120.9796 175.1203 + 121.0296 175.1196 + 121.0796 175.1190 + 121.1296 175.1183 + 121.1796 175.1177 + 121.2296 175.1170 + 121.2796 175.1164 + 121.3296 175.1157 + 121.3796 175.1151 + 121.4296 175.1144 + 121.4796 175.1138 + 121.5296 175.1132 + 121.5796 175.1125 + 121.6296 175.1119 + 121.6796 175.1112 + 121.7296 175.1106 + 121.7796 175.1099 + 121.8296 175.1093 + 121.8796 175.1086 + 121.9296 175.1080 + 121.9796 175.1073 + 122.0296 175.1067 + 122.0796 175.1061 + 122.1296 175.1054 + 122.1796 175.1048 + 122.2296 175.1041 + 122.2796 175.1035 + 122.3296 175.1028 + 122.3796 175.1022 + 122.4296 175.1015 + 122.4796 175.1009 + 122.5296 175.1003 + 122.5796 175.0996 + 122.6296 175.0990 + 122.6796 175.0983 + 122.7296 175.0977 + 122.7796 175.0970 + 122.8296 175.0964 + 122.8796 175.0957 + 122.9296 175.0951 + 122.9796 175.0944 + 123.0296 175.0938 + 123.0796 175.0932 + 123.1296 175.0925 + 123.1796 175.0919 + 123.2296 175.0912 + 123.2796 175.0906 + 123.3296 175.0899 + 123.3796 175.0893 + 123.4296 175.0886 + 123.4796 175.0880 + 123.5296 175.0873 + 123.5796 175.0867 + 123.6296 175.0860 + 123.6796 175.0854 + 123.7296 175.0848 + 123.7796 175.0841 + 123.8296 175.0835 + 123.8796 175.0828 + 123.9296 175.0822 + 123.9796 175.0815 + 124.0296 175.0809 + 124.0796 175.0802 + 124.1296 175.0796 + 124.1796 175.0789 + 124.2296 175.0783 + 124.2796 175.0777 + 124.3296 175.0770 + 124.3796 175.0764 + 124.4296 175.0757 + 124.4796 175.0751 + 124.5296 175.0744 + 124.5796 175.0738 + 124.6296 175.0731 + 124.6796 175.0725 + 124.7296 175.0719 + 124.7796 175.0712 + 124.8296 175.0706 + 124.8796 175.0699 + 124.9296 175.0693 + 124.9796 175.0686 + 125.0296 175.0680 + 125.0796 175.0673 + 125.1296 175.0667 + 125.1796 175.0660 + 125.2296 175.0654 + 125.2796 175.0647 + 125.3296 175.0641 + 125.3796 175.0635 + 125.4296 175.0628 + 125.4796 175.0622 + 125.5296 175.0615 + 125.5796 175.0609 + 125.6296 175.0602 + 125.6796 175.0596 + 125.7296 175.0589 + 125.7796 175.0583 + 125.8296 175.0576 + 125.8796 175.0570 + 125.9296 175.0564 + 125.9796 175.0557 + 126.0296 175.0551 + 126.0796 175.0544 + 126.1296 175.0538 + 126.1796 175.0531 + 126.2296 175.0525 + 126.2796 175.0518 + 126.3296 175.0512 + 126.3796 175.0506 + 126.4296 175.0499 + 126.4796 175.0493 + 126.5296 175.0486 + 126.5796 175.0480 + 126.6296 175.0473 + 126.6796 175.0467 + 126.7296 175.0460 + 126.7796 175.0454 + 126.8296 175.0447 + 126.8796 175.0441 + 126.9296 175.0434 + 126.9796 175.0428 + 127.0296 175.0422 + 127.0796 175.0415 + 127.1296 175.0409 + 127.1796 175.0402 + 127.2296 175.0396 + 127.2796 175.0389 + 127.3296 175.0383 + 127.3796 175.0376 + 127.4296 175.0370 + 127.4796 175.0363 + 127.5296 175.0357 + 127.5796 175.0350 + 127.6296 175.0344 + 127.6796 175.0338 + 127.7296 175.0331 + 127.7796 175.0325 + 127.8296 175.0318 + 127.8796 175.0312 + 127.9296 175.0305 + 127.9796 175.0299 + 128.0296 175.0293 + 128.0796 175.0286 + 128.1296 175.0280 + 128.1796 175.0273 + 128.2296 175.0267 + 128.2796 175.0260 + 128.3296 175.0254 + 128.3796 175.0247 + 128.4296 175.0241 + 128.4796 175.0234 + 128.5296 175.0228 + 128.5796 175.0221 + 128.6296 175.0215 + 128.6796 175.0209 + 128.7296 175.0202 + 128.7796 175.0196 + 128.8296 175.0189 + 128.8796 175.0183 + 128.9296 175.0176 + 128.9796 175.0170 + 129.0296 175.0163 + 129.0796 175.0157 + 129.1296 175.0150 + 129.1796 175.0144 + 129.2296 175.0138 + 129.2796 175.0131 + 129.3296 175.0125 + 129.3796 175.0118 + 129.4296 175.0112 + 129.4796 175.0105 + 129.5296 175.0099 + 129.5796 175.0092 + 129.6296 175.0086 + 129.6796 175.0079 + 129.7296 175.0073 + 129.7796 175.0067 + 129.8296 175.0060 + 129.8796 175.0054 + 129.9296 175.0047 + 129.9796 175.0041 + 130.0296 175.0034 + 130.0796 175.0028 + 130.1296 175.0021 + 130.1796 175.0015 + 130.2296 175.0009 + 130.2796 175.0002 + 130.3296 174.9996 + 130.3796 174.9989 + 130.4296 174.9983 + 130.4796 174.9976 + 130.5296 174.9970 + 130.5796 174.9963 + 130.6296 174.9957 + 130.6796 174.9950 + 130.7296 174.9944 + 130.7796 174.9937 + 130.8296 174.9931 + 130.8796 174.9925 + 130.9296 174.9918 + 130.9796 174.9912 + 131.0296 174.9905 + 131.0796 174.9899 + 131.1296 174.9892 + 131.1796 174.9886 + 131.2296 174.9879 + 131.2796 174.9873 + 131.3296 174.9866 + 131.3796 174.9860 + 131.4296 174.9854 + 131.4796 174.9847 + 131.5296 174.9841 + 131.5796 174.9834 + 131.6296 174.9828 + 131.6796 174.9821 + 131.7296 174.9815 + 131.7796 174.9808 + 131.8296 174.9802 + 131.8796 174.9796 + 131.9296 174.9789 + 131.9796 174.9783 + 132.0296 174.9776 + 132.0796 174.9770 + 132.1296 174.9763 + 132.1796 174.9757 + 132.2296 174.9750 + 132.2796 174.9744 + 132.3296 174.9737 + 132.3796 174.9731 + 132.4296 174.9724 + 132.4796 174.9718 + 132.5296 174.9712 + 132.5796 174.9705 + 132.6296 174.9699 + 132.6796 174.9692 + 132.7296 174.9686 + 132.7796 174.9679 + 132.8296 174.9673 + 132.8796 174.9666 + 132.9296 174.9660 + 132.9796 174.9653 + 133.0296 174.9647 + 133.0796 174.9641 + 133.1296 174.9634 + 133.1796 174.9628 + 133.2296 174.9621 + 133.2796 174.9615 + 133.3296 174.9608 + 133.3796 174.9602 + 133.4296 174.9595 + 133.4796 174.9589 + 133.5296 174.9583 + 133.5796 174.9576 + 133.6296 174.9570 + 133.6796 174.9563 + 133.7296 174.9557 + 133.7796 174.9550 + 133.8296 174.9544 + 133.8796 174.9537 + 133.9296 174.9531 + 133.9796 174.9524 + 134.0296 174.9518 + 134.0796 174.9511 + 134.1296 174.9505 + 134.1796 174.9499 + 134.2296 174.9492 + 134.2796 174.9486 + 134.3296 174.9479 + 134.3796 174.9473 + 134.4296 174.9466 + 134.4796 174.9460 + 134.5296 174.9453 + 134.5796 174.9447 + 134.6296 174.9440 + 134.6796 174.9434 + 134.7296 174.9427 + 134.7796 174.9421 + 134.8296 174.9415 + 134.8796 174.9408 + 134.9296 174.9402 + 134.9796 174.9395 + 135.0296 174.9389 + 135.0796 174.9382 + 135.1296 174.9376 + 135.1796 174.9370 + 135.2296 174.9363 + 135.2796 174.9357 + 135.3296 174.9350 + 135.3796 174.9344 + 135.4296 174.9337 + 135.4796 174.9331 + 135.5296 174.9324 + 135.5796 174.9318 + 135.6296 174.9311 + 135.6796 174.9305 + 135.7296 174.9298 + 135.7796 174.9292 + 135.8296 174.9286 + 135.8796 174.9279 + 135.9296 174.9273 + 135.9796 174.9266 + 136.0296 174.9260 + 136.0796 174.9253 + 136.1296 174.9247 + 136.1796 174.9240 + 136.2296 174.9234 + 136.2796 174.9227 + 136.3296 174.9221 + 136.3796 174.9215 + 136.4296 174.9208 + 136.4796 174.9202 + 136.5296 174.9195 + 136.5796 174.9189 + 136.6296 174.9182 + 136.6796 174.9176 + 136.7296 174.9169 + 136.7796 174.9163 + 136.8296 174.9156 + 136.8796 174.9150 + 136.9296 174.9144 + 136.9796 174.9137 + 137.0296 174.9131 + 137.0796 174.9124 + 137.1296 174.9118 + 137.1796 174.9111 + 137.2296 174.9105 + 137.2796 174.9098 + 137.3296 174.9092 + 137.3796 174.9085 + 137.4296 174.9079 + 137.4796 174.9073 + 137.5296 174.9066 + 137.5796 174.9060 + 137.6296 174.9053 + 137.6796 174.9047 + 137.7296 174.9040 + 137.7796 174.9034 + 137.8296 174.9027 + 137.8796 174.9021 + 137.9296 174.9014 + 137.9796 174.9008 + 138.0296 174.9002 + 138.0796 174.8995 + 138.1296 174.8989 + 138.1796 174.8982 + 138.2296 174.8976 + 138.2796 174.8969 + 138.3296 174.8963 + 138.3796 174.8956 + 138.4296 174.8950 + 138.4796 174.8943 + 138.5296 174.8937 + 138.5796 174.8931 + 138.6296 174.8924 + 138.6796 174.8918 + 138.7296 174.8911 + 138.7796 174.8905 + 138.8296 174.8898 + 138.8796 174.8892 + 138.9296 174.8885 + 138.9796 174.8879 + 139.0296 174.8873 + 139.0796 174.8866 + 139.1296 174.8860 + 139.1796 174.8853 + 139.2296 174.8847 + 139.2796 174.8840 + 139.3296 174.8834 + 139.3796 174.8827 + 139.4296 174.8821 + 139.4796 174.8814 + 139.5296 174.8808 + 139.5796 174.8801 + 139.6296 174.8795 + 139.6796 174.8789 + 139.7296 174.8782 + 139.7796 174.8776 + 139.8296 174.8769 + 139.8796 174.8763 + 139.9296 174.8756 + 139.9796 174.8750 + 140.0296 174.8743 + 140.0796 174.8737 + 140.1296 174.8730 + 140.1796 174.8724 + 140.2296 174.8717 + 140.2796 174.8711 + 140.3296 174.8705 + 140.3796 174.8698 + 140.4296 174.8692 + 140.4796 174.8685 + 140.5296 174.8679 + 140.5796 174.8672 + 140.6296 174.8666 + 140.6796 174.8660 + 140.7296 174.8653 + 140.7796 174.8647 + 140.8296 174.8640 + 140.8796 174.8634 + 140.9296 174.8627 + 140.9796 174.8621 + 141.0296 174.8614 + 141.0796 174.8608 + 141.1296 174.8601 + 141.1796 174.8595 + 141.2296 174.8588 + 141.2796 174.8582 + 141.3296 174.8576 + 141.3796 174.8569 + 141.4296 174.8563 + 141.4796 174.8556 + 141.5296 174.8550 + 141.5796 174.8543 + 141.6296 174.8537 + 141.6796 174.8530 + 141.7296 174.8524 + 141.7796 174.8517 + 141.8296 174.8511 + 141.8796 174.8504 + 141.9296 174.8498 + 141.9796 174.8492 + 142.0296 174.8485 + 142.0796 174.8479 + 142.1296 174.8472 + 142.1796 174.8466 + 142.2296 174.8459 + 142.2796 174.8453 + 142.3296 174.8447 + 142.3796 174.8440 + 142.4296 174.8434 + 142.4796 174.8427 + 142.5296 174.8421 + 142.5796 174.8414 + 142.6296 174.8408 + 142.6796 174.8401 + 142.7296 174.8395 + 142.7796 174.8388 + 142.8296 174.8382 + 142.8796 174.8375 + 142.9296 174.8369 + 142.9796 174.8363 + 143.0296 174.8356 + 143.0796 174.8350 + 143.1296 174.8343 + 143.1796 174.8337 + 143.2296 174.8330 + 143.2796 174.8324 + 143.3296 174.8317 + 143.3796 174.8311 + 143.4296 174.8304 + 143.4796 174.8298 + 143.5296 174.8291 + 143.5796 174.8285 + 143.6296 174.8279 + 143.6796 174.8272 + 143.7296 174.8266 + 143.7796 174.8259 + 143.8296 174.8253 + 143.8796 174.8246 + 143.9296 174.8240 + 143.9796 174.8233 + 144.0296 174.8227 + 144.0796 174.8221 + 144.1296 174.8214 + 144.1796 174.8208 + 144.2296 174.8201 + 144.2796 174.8195 + 144.3296 174.8188 + 144.3796 174.8182 + 144.4296 174.8175 + 144.4796 174.8169 + 144.5296 174.8162 + 144.5796 174.8156 + 144.6296 174.8150 + 144.6796 174.8143 + 144.7296 174.8137 + 144.7796 174.8130 + 144.8296 174.8124 + 144.8796 174.8117 + 144.9296 174.8111 + 144.9796 174.8104 + 145.0296 174.8098 + 145.0796 174.8091 + 145.1296 174.8085 + 145.1796 174.8079 + 145.2296 174.8072 + 145.2796 174.8066 + 145.3296 174.8059 + 145.3796 174.8053 + 145.4296 174.8046 + 145.4796 174.8040 + 145.5296 174.8033 + 145.5796 174.8027 + 145.6296 174.8020 + 145.6796 174.8014 + 145.7296 174.8008 + 145.7796 174.8001 + 145.8296 174.7995 + 145.8796 174.7988 + 145.9296 174.7982 + 145.9796 174.7975 + 146.0296 174.7969 + 146.0796 174.7962 + 146.1296 174.7956 + 146.1796 174.7950 + 146.2296 174.7943 + 146.2796 174.7937 + 146.3296 174.7930 + 146.3796 174.7924 + 146.4296 174.7917 + 146.4796 174.7911 + 146.5296 174.7904 + 146.5796 174.7898 + 146.6296 174.7891 + 146.6796 174.7885 + 146.7296 174.7878 + 146.7796 174.7872 + 146.8296 174.7866 + 146.8796 174.7859 + 146.9296 174.7853 + 146.9796 174.7846 + 147.0296 174.7840 + 147.0796 174.7833 + 147.1296 174.7827 + 147.1796 174.7820 + 147.2296 174.7814 + 147.2796 174.7807 + 147.3296 174.7801 + 147.3796 174.7794 + 147.4296 174.7788 + 147.4796 174.7782 + 147.5296 174.7775 + 147.5796 174.7769 + 147.6296 174.7762 + 147.6796 174.7756 + 147.7296 174.7749 + 147.7796 174.7743 + 147.8296 174.7737 + 147.8796 174.7730 + 147.9296 174.7724 + 147.9796 174.7717 + 148.0296 174.7711 + 148.0796 174.7704 + 148.1296 174.7698 + 148.1796 174.7691 + 148.2296 174.7685 + 148.2796 174.7678 + 148.3296 174.7672 + 148.3796 174.7665 + 148.4296 174.7659 + 148.4796 174.7653 + 148.5296 174.7646 + 148.5796 174.7640 + 148.6296 174.7633 + 148.6796 174.7627 + 148.7296 174.7620 + 148.7796 174.7614 + 148.8296 174.7607 + 148.8796 174.7601 + 148.9296 174.7594 + 148.9796 174.7588 + 149.0296 174.7581 + 149.0796 174.7575 + 149.1296 174.7569 + 149.1796 174.7562 + 149.2296 174.7556 + 149.2796 174.7549 + 149.3296 174.7543 + 149.3796 174.7536 + 149.4296 174.7530 + 149.4796 174.7523 + 149.5296 174.7517 + 149.5796 174.7511 + 149.6296 174.7504 + 149.6796 174.7498 + 149.7296 174.7491 + 149.7796 174.7485 + 149.8296 174.7478 + 149.8796 174.7472 + 149.9296 174.7465 + 149.9796 174.7459 + 150.0296 174.7452 + 150.0796 174.7446 + 150.1296 174.7440 + 150.1796 174.7433 + 150.2296 174.7427 + 150.2796 174.7420 + 150.3296 174.7414 + 150.3796 174.7407 + 150.4296 174.7401 + 150.4796 174.7394 + 150.5296 174.7388 + 150.5796 174.7381 + 150.6296 174.7375 + 150.6796 174.7368 + 150.7296 174.7362 + 150.7796 174.7356 + 150.8296 174.7349 + 150.8796 174.7343 + 150.9296 174.7336 + 150.9796 174.7330 + 151.0296 174.7323 + 151.0796 174.7317 + 151.1296 174.7310 + 151.1796 174.7304 + 151.2296 174.7298 + 151.2796 174.7291 + 151.3296 174.7285 + 151.3796 174.7278 + 151.4296 174.7272 + 151.4796 174.7265 + 151.5296 174.7259 + 151.5796 174.7252 + 151.6296 174.7246 + 151.6796 174.7239 + 151.7296 174.7233 + 151.7796 174.7227 + 151.8296 174.7220 + 151.8796 174.7214 + 151.9296 174.7207 + 151.9796 174.7201 + 152.0296 174.7194 + 152.0796 174.7188 + 152.1296 174.7181 + 152.1796 174.7175 + 152.2296 174.7168 + 152.2796 174.7162 + 152.3296 174.7156 + 152.3796 174.7149 + 152.4296 174.7143 + 152.4796 174.7136 + 152.5296 174.7130 + 152.5796 174.7123 + 152.6296 174.7117 + 152.6796 174.7110 + 152.7296 174.7104 + 152.7796 174.7097 + 152.8296 174.7091 + 152.8796 174.7085 + 152.9296 174.7078 + 152.9796 174.7072 + 153.0296 174.7065 + 153.0796 174.7059 + 153.1296 174.7052 + 153.1796 174.7046 + 153.2296 174.7039 + 153.2796 174.7033 + 153.3296 174.7027 + 153.3796 174.7020 + 153.4296 174.7014 + 153.4796 174.7007 + 153.5296 174.7001 + 153.5796 174.6994 + 153.6296 174.6988 + 153.6796 174.6981 + 153.7296 174.6975 + 153.7796 174.6968 + 153.8296 174.6962 + 153.8796 174.6955 + 153.9296 174.6949 + 153.9796 174.6943 + 154.0296 174.6936 + 154.0796 174.6930 + 154.1296 174.6923 + 154.1796 174.6917 + 154.2296 174.6910 + 154.2796 174.6904 + 154.3296 174.6897 + 154.3796 174.6891 + 154.4296 174.6884 + 154.4796 174.6878 + 154.5296 174.6871 + 154.5796 174.6865 + 154.6296 174.6859 + 154.6796 174.6852 + 154.7296 174.6846 + 154.7796 174.6839 + 154.8296 174.6833 + 154.8796 174.6826 + 154.9296 174.6820 + 154.9796 174.6814 + 155.0296 174.6807 + 155.0796 174.6801 + 155.1296 174.6794 + 155.1796 174.6788 + 155.2296 174.6781 + 155.2796 174.6775 + 155.3296 174.6768 + 155.3796 174.6762 + 155.4296 174.6755 + 155.4796 174.6749 + 155.5296 174.6742 + 155.5796 174.6736 + 155.6296 174.6730 + 155.6796 174.6723 + 155.7296 174.6717 + 155.7796 174.6710 + 155.8296 174.6704 + 155.8796 174.6697 + 155.9296 174.6691 + 155.9796 174.6684 + 156.0296 174.6678 + 156.0796 174.6671 + 156.1296 174.6665 + 156.1796 174.6658 + 156.2296 174.6652 + 156.2796 174.6646 + 156.3296 174.6639 + 156.3796 174.6633 + 156.4296 174.6626 + 156.4796 174.6620 + 156.5296 174.6613 + 156.5796 174.6607 + 156.6296 174.6600 + 156.6796 174.6594 + 156.7296 174.6588 + 156.7796 174.6581 + 156.8296 174.6575 + 156.8796 174.6568 + 156.9296 174.6562 + 156.9796 174.6555 + 157.0296 174.6549 + 157.0796 174.6542 + 157.1296 174.6536 + 157.1796 174.6529 + 157.2296 174.6523 + 157.2796 174.6517 + 157.3296 174.6510 + 157.3796 174.6504 + 157.4296 174.6497 + 157.4796 174.6491 + 157.5296 174.6484 + 157.5796 174.6478 + 157.6296 174.6471 + 157.6796 174.6465 + 157.7296 174.6458 + 157.7796 174.6452 + 157.8296 174.6445 + 157.8796 174.6439 + 157.9296 174.6433 + 157.9796 174.6426 + 158.0296 174.6420 + 158.0796 174.6413 + 158.1296 174.6407 + 158.1796 174.6400 + 158.2296 174.6394 + 158.2796 174.6387 + 158.3296 174.6381 + 158.3796 174.6375 + 158.4296 174.6368 + 158.4796 174.6362 + 158.5296 174.6355 + 158.5796 174.6349 + 158.6296 174.6342 + 158.6796 174.6336 + 158.7296 174.6329 + 158.7796 174.6323 + 158.8296 174.6316 + 158.8796 174.6310 + 158.9296 174.6304 + 158.9796 174.6297 + 159.0296 174.6291 + 159.0796 174.6284 + 159.1296 174.6278 + 159.1796 174.6271 + 159.2296 174.6265 + 159.2796 174.6258 + 159.3296 174.6252 + 159.3796 174.6245 + 159.4296 174.6239 + 159.4796 174.6232 + 159.5296 174.6226 + 159.5796 174.6220 + 159.6296 174.6213 + 159.6796 174.6207 + 159.7296 174.6200 + 159.7796 174.6194 + 159.8296 174.6187 + 159.8796 174.6181 + 159.9296 174.6174 + 159.9796 174.6168 + 160.0296 174.6161 + 160.0796 174.6155 + 160.1296 174.6149 + 160.1796 174.6142 + 160.2296 174.6136 + 160.2796 174.6129 + 160.3296 174.6123 + 160.3796 174.6116 + 160.4296 174.6110 + 160.4796 174.6103 + 160.5296 174.6097 + 160.5796 174.6091 + 160.6296 174.6084 + 160.6796 174.6078 + 160.7296 174.6071 + 160.7796 174.6065 + 160.8296 174.6058 + 160.8796 174.6052 + 160.9296 174.6045 + 160.9796 174.6039 + 161.0296 174.6032 + 161.0796 174.6026 + 161.1296 174.6020 + 161.1796 174.6013 + 161.2296 174.6007 + 161.2796 174.6000 + 161.3296 174.5994 + 161.3796 174.5987 + 161.4296 174.5981 + 161.4796 174.5974 + 161.5296 174.5968 + 161.5796 174.5961 + 161.6296 174.5955 + 161.6796 174.5948 + 161.7296 174.5942 + 161.7796 174.5936 + 161.8296 174.5929 + 161.8796 174.5923 + 161.9296 174.5916 + 161.9796 174.5910 + 162.0296 174.5903 + 162.0796 174.5897 + 162.1296 174.5891 + 162.1796 174.5884 + 162.2296 174.5878 + 162.2796 174.5871 + 162.3296 174.5865 + 162.3796 174.5858 + 162.4296 174.5852 + 162.4796 174.5845 + 162.5296 174.5839 + 162.5796 174.5832 + 162.6296 174.5826 + 162.6796 174.5819 + 162.7296 174.5813 + 162.7796 174.5807 + 162.8296 174.5800 + 162.8796 174.5794 + 162.9296 174.5787 + 162.9796 174.5781 + 163.0296 174.5774 + 163.0796 174.5768 + 163.1296 174.5761 + 163.1796 174.5755 + 163.2296 174.5748 + 163.2796 174.5742 + 163.3296 174.5735 + 163.3796 174.5729 + 163.4296 174.5723 + 163.4796 174.5716 + 163.5296 174.5710 + 163.5796 174.5703 + 163.6296 174.5697 + 163.6796 174.5690 + 163.7296 174.5684 + 163.7796 174.5677 + 163.8296 174.5671 + 163.8796 174.5665 + 163.9296 174.5658 + 163.9796 174.5652 + 164.0296 174.5645 + 164.0796 174.5639 + 164.1296 174.5632 + 164.1796 174.5626 + 164.2296 174.5626 diff --git a/docs/docs/verification/fullprof/pd-neut-cwl_pv-march_lbco/lbco.dat b/docs/docs/verification/fullprof/pd-neut-cwl_pv-march_lbco/lbco.dat new file mode 100644 index 000000000..c2679519c --- /dev/null +++ b/docs/docs/verification/fullprof/pd-neut-cwl_pv-march_lbco/lbco.dat @@ -0,0 +1,3098 @@ +10 167 12.6 +10.05 157 12.5 +10.1 187 13.3 +10.15 197 14 +10.2 164 12.5 +10.25 171 13 +10.3 190 13.4 +10.35 182 13.5 +10.4 166 12.6 +10.45 203 14.3 +10.5 156 12.2 +10.55 190 13.9 +10.6 175 13 +10.65 161 12.9 +10.7 187 13.5 +10.75 166 13.1 +10.8 171 13 +10.85 177 13.6 +10.9 159 12.6 +10.95 184 13.9 +11 160 12.6 +11.05 182 13.9 +11.1 167 13 +11.15 169 13.4 +11.2 186 13.7 +11.25 167 13.3 +11.3 169 13.1 +11.35 159 13.1 +11.4 170 13.2 +11.45 179 13.9 +11.5 178 13.5 +11.55 188 14.2 +11.6 176 13.5 +11.65 196 14.6 +11.7 182 13.7 +11.75 183 14 +11.8 195 14.1 +11.85 144 12.4 +11.9 178 13.5 +11.95 175 13.7 +12 200 14.2 +12.05 157 12.9 +12.1 195 14 +12.15 164 13.1 +12.2 188 13.7 +12.25 168 13.1 +12.3 191 13.7 +12.35 178 13.4 +12.4 182 13.3 +12.45 174 13.3 +12.5 171 12.9 +12.55 174 13.2 +12.6 184 13.3 +12.65 164 12.8 +12.7 166 12.5 +12.75 177 13.2 +12.8 174 12.8 +12.85 187 13.5 +12.9 183 13.1 +12.95 187 13.5 +13 175 12.8 +13.05 165 12.7 +13.1 177 12.8 +13.15 182 13.3 +13.2 195 13.5 +13.25 163 12.6 +13.3 180 12.9 +13.35 171 12.9 +13.4 182 13 +13.45 179 13.1 +13.5 161 12.2 +13.55 156 12.3 +13.6 197 13.5 +13.65 167 12.7 +13.7 180 12.8 +13.75 182 13.2 +13.8 176 12.7 +13.85 153 12.1 +13.9 179 12.8 +13.95 156 12.3 +14 187 13.1 +14.05 170 12.8 +14.1 185 13 +14.15 180 13.2 +14.2 167 12.4 +14.25 159 12.4 +14.3 152 11.8 +14.35 173 13 +14.4 169 12.5 +14.45 185 13.4 +14.5 168 12.4 +14.55 193 13.7 +14.6 177 12.8 +14.65 161 12.5 +14.7 180 12.9 +14.75 165 12.6 +14.8 178 12.8 +14.85 157 12.3 +14.9 163 12.3 +14.95 143 11.7 +15 155 11.9 +15.05 168 12.8 +15.1 160 12.1 +15.15 155 12.2 +15.2 203 13.7 +15.25 164 12.6 +15.3 158 12.1 +15.35 152 12.1 +15.4 173 12.6 +15.45 160 12.5 +15.5 172 12.6 +15.55 164 12.6 +15.6 163 12.3 +15.65 173 13 +15.7 177 12.8 +15.75 184 13.4 +15.8 173 12.7 +15.85 182 13.3 +15.9 156 12.1 +15.95 152 12.2 +16 201 13.7 +16.05 156 12.3 +16.1 169 12.5 +16.15 178 13.2 +16.2 150 11.8 +16.25 163 12.6 +16.3 165 12.4 +16.35 160 12.5 +16.4 171 12.6 +16.45 168 12.8 +16.5 159 12.2 +16.55 166 12.8 +16.6 156 12.1 +16.65 156 12.4 +16.7 154 12.1 +16.75 173 13.1 +16.8 173 12.8 +16.85 161 12.7 +16.9 177 13 +16.95 159 12.7 +17 162 12.5 +17.05 166 13 +17.1 167 12.7 +17.15 166 13.1 +17.2 168 12.8 +17.25 188 14 +17.3 165 12.8 +17.35 171 13.4 +17.4 171 13.1 +17.45 162 13.1 +17.5 161 12.8 +17.55 177 13.8 +17.6 176 13.4 +17.65 175 13.7 +17.7 140 12 +17.75 177 13.9 +17.8 150 12.4 +17.85 154 12.9 +17.9 138 11.9 +17.95 161 13.2 +18 171 13.3 +18.05 144 12.5 +18.1 148 12.4 +18.15 169 13.5 +18.2 162 12.9 +18.25 171 13.5 +18.3 155 12.6 +18.35 143 12.3 +18.4 162 12.8 +18.45 177 13.6 +18.5 158 12.6 +18.55 142 12.2 +18.6 153 12.4 +18.65 169 13.3 +18.7 144 12 +18.75 171 13.3 +18.8 159 12.5 +18.85 169 13.1 +18.9 163 12.6 +18.95 154 12.5 +19 146 11.9 +19.05 154 12.5 +19.1 156 12.2 +19.15 195 14 +19.2 154 12.1 +19.25 167 12.9 +19.3 156 12.2 +19.35 148 12.1 +19.4 173 12.8 +19.45 155 12.4 +19.5 146 11.7 +19.55 173 13.1 +19.6 179 13 +19.65 152 12.3 +19.7 182 13.1 +19.75 183 13.4 +19.8 150 11.9 +19.85 155 12.3 +19.9 158 12.2 +19.95 161 12.6 +20 164 12.4 +20.05 166 12.8 +20.1 172 12.7 +20.15 148 12.1 +20.2 161 12.3 +20.25 160 12.6 +20.3 185 13.2 +20.35 165 12.8 +20.4 155 12.1 +20.45 172 13 +20.5 170 12.7 +20.55 180 13.4 +20.6 184 13.2 +20.65 164 12.8 +20.7 177 13 +20.75 150 12.2 +20.8 176 12.9 +20.85 174 13.2 +20.9 173 12.8 +20.95 167 12.9 +21 158 12.2 +21.05 174 13.2 +21.1 160 12.3 +21.15 174 13.2 +21.2 160 12.3 +21.25 182 13.4 +21.3 155 12.1 +21.35 182 13.4 +21.4 157 12.2 +21.45 174 13.2 +21.5 173 12.8 +21.55 165 12.8 +21.6 182 13.1 +21.65 176 13.2 +21.7 150 11.9 +21.75 162 12.6 +21.8 172 12.7 +21.85 162 12.7 +21.9 171 12.7 +21.95 165 12.8 +22 180 13 +22.05 167 12.8 +22.1 159 12.2 +22.15 159 12.5 +22.2 160 12.3 +22.25 174 13.1 +22.3 175 12.9 +22.35 172 13.1 +22.4 176 12.9 +22.45 140 11.8 +22.5 163 12.4 +22.55 180 13.5 +22.6 211 14.2 +22.65 190 13.9 +22.7 179 13.1 +22.75 195 14.1 +22.8 198 13.9 +22.85 181 13.7 +22.9 203 14.1 +22.95 193 14.1 +23 155 12.4 +23.05 159 12.9 +23.1 184 13.5 +23.15 145 12.3 +23.2 145 12 +23.25 179 13.7 +23.3 185 13.6 +23.35 168 13.3 +23.4 185 13.6 +23.45 170 13.4 +23.5 174 13.3 +23.55 164 13.2 +23.6 168 13.1 +23.65 185 14.1 +23.7 183 13.7 +23.75 172 13.7 +23.8 156 12.7 +23.85 182 14 +23.9 182 13.7 +23.95 149 12.7 +24 160 12.8 +24.05 168 13.5 +24.1 178 13.6 +24.15 169 13.6 +24.2 172 13.4 +24.25 170 13.6 +24.3 161 12.9 +24.35 168 13.5 +24.4 162 13 +24.45 157 13 +24.5 162 12.9 +24.55 159 13.1 +24.6 168 13.2 +24.65 170 13.5 +24.7 166 13 +24.75 146 12.5 +24.8 154 12.5 +24.85 154 12.7 +24.9 198 14.1 +24.95 195 14.3 +25 148 12.2 +25.05 161 12.9 +25.1 160 12.6 +25.15 160 12.8 +25.2 149 12.1 +25.25 179 13.5 +25.3 174 13 +25.35 168 13 +25.4 146 11.9 +25.45 160 12.7 +25.5 145 11.8 +25.55 151 12.3 +25.6 161 12.4 +25.65 187 13.6 +25.7 154 12.1 +25.75 157 12.4 +25.8 169 12.6 +25.85 181 13.4 +25.9 156 12.1 +25.95 185 13.4 +26 192 13.4 +26.05 153 12.2 +26.1 149 11.8 +26.15 154 12.2 +26.2 152 11.9 +26.25 179 13.2 +26.3 180 12.9 +26.35 160 12.5 +26.4 174 12.6 +26.45 145 11.8 +26.5 171 12.5 +26.55 162 12.5 +26.6 154 11.8 +26.65 153 12.1 +26.7 162 12.1 +26.75 160 12.4 +26.8 150 11.7 +26.85 189 13.4 +26.9 168 12.4 +26.95 144 11.7 +27 147 11.6 +27.05 155 12.2 +27.1 174 12.6 +27.15 169 12.7 +27.2 174 12.6 +27.25 164 12.6 +27.3 146 11.6 +27.35 149 12 +27.4 155 11.9 +27.45 155 12.2 +27.5 168 12.4 +27.55 131 11.2 +27.6 159 12.1 +27.65 181 13.2 +27.7 146 11.6 +27.75 188 13.5 +27.8 162 12.2 +27.85 161 12.5 +27.9 176 12.7 +27.95 152 12.1 +28 170 12.4 +28.05 152 12 +28.1 158 12 +28.15 168 12.6 +28.2 161 12.1 +28.25 184 13.3 +28.3 166 12.3 +28.35 193 13.6 +28.4 157 12 +28.45 167 12.6 +28.5 158 12 +28.55 135 11.4 +28.6 150 11.7 +28.65 167 12.7 +28.7 161 12.2 +28.75 157 12.3 +28.8 153 11.8 +28.85 161 12.5 +28.9 163 12.2 +28.95 133 11.4 +29 169 12.5 +29.05 162 12.5 +29.1 161 12.2 +29.15 163 12.6 +29.2 144 11.6 +29.25 178 13.2 +29.3 161 12.2 +29.35 141 11.8 +29.4 169 12.5 +29.45 160 12.5 +29.5 177 12.9 +29.55 174 13.1 +29.6 157 12.1 +29.65 176 13.2 +29.7 179 13 +29.75 166 12.9 +29.8 162 12.4 +29.85 147 12.2 +29.9 152 12 +29.95 171 13.2 +30 178 13.1 +30.05 208 14.6 +30.1 178 13.2 +30.15 149 12.4 +30.2 181 13.3 +30.25 162 13 +30.3 177 13.2 +30.35 165 13.1 +30.4 177 13.3 +30.45 158 12.9 +30.5 157 12.6 +30.55 163 13.1 +30.6 144 12 +30.65 156 12.8 +30.7 176 13.3 +30.75 179 13.7 +30.8 174 13.2 +30.85 182 13.8 +30.9 161 12.7 +30.95 166 13.1 +31 168 13 +31.05 153 12.6 +31.1 156 12.4 +31.15 174 13.4 +31.2 167 12.8 +31.25 192 14 +31.3 154 12.3 +31.35 166 13 +31.4 169 12.9 +31.45 185 13.7 +31.5 165 12.6 +31.55 163 12.8 +31.6 173 12.9 +31.65 169 13 +31.7 188 13.4 +31.75 195 13.9 +31.8 195 13.6 +31.85 221 14.7 +31.9 229 14.7 +31.95 302 17.2 +32 327 17.5 +32.05 380 19.3 +32.1 358 18.3 +32.15 394 19.6 +32.2 373 18.7 +32.25 362 18.7 +32.3 306 16.9 +32.35 276 16.4 +32.4 237 14.8 +32.45 203 14 +32.5 178 12.8 +32.55 199 13.9 +32.6 167 12.4 +32.65 185 13.4 +32.7 180 12.9 +32.75 178 13.1 +32.8 145 11.5 +32.85 176 13 +32.9 177 12.7 +32.95 182 13.2 +33 167 12.4 +33.05 152 12.1 +33.1 144 11.5 +33.15 170 12.8 +33.2 156 11.9 +33.25 154 12.2 +33.3 180 12.8 +33.35 176 13 +33.4 183 12.9 +33.45 162 12.4 +33.5 180 12.8 +33.55 165 12.6 +33.6 174 12.5 +33.65 179 13 +33.7 152 11.7 +33.75 182 13.1 +33.8 184 12.9 +33.85 166 12.5 +33.9 182 12.8 +33.95 162 12.4 +34 174 12.5 +34.05 153 12 +34.1 182 12.8 +34.15 180 13 +34.2 167 12.2 +34.25 173 12.7 +34.3 153 11.7 +34.35 160 12.3 +34.4 180 12.7 +34.45 168 12.5 +34.5 167 12.2 +34.55 176 12.8 +34.6 165 12.1 +34.65 174 12.8 +34.7 161 12 +34.75 178 12.9 +34.8 170 12.3 +34.85 166 12.5 +34.9 173 12.4 +34.95 158 12.2 +35 166 12.2 +35.05 170 12.6 +35.1 162 12 +35.15 183 13.1 +35.2 176 12.5 +35.25 171 12.6 +35.3 174 12.5 +35.35 179 12.9 +35.4 176 12.5 +35.45 193 13.4 +35.5 180 12.7 +35.55 188 13.3 +35.6 177 12.6 +35.65 176 12.9 +35.7 171 12.4 +35.75 185 13.3 +35.8 178 12.7 +35.85 152 12.1 +35.9 160 12.1 +35.95 187 13.5 +36 167 12.4 +36.05 181 13.3 +36.1 166 12.4 +36.15 165 12.8 +36.2 170 12.7 +36.25 197 14.1 +36.3 179 13.1 +36.35 172 13.2 +36.4 181 13.3 +36.45 174 13.4 +36.5 162 12.6 +36.55 166 13.1 +36.6 158 12.5 +36.65 199 14.4 +36.7 188 13.7 +36.75 177 13.7 +36.8 167 12.9 +36.85 156 12.9 +36.9 174 13.2 +36.95 176 13.7 +37 152 12.4 +37.05 191 14.4 +37.1 151 12.5 +37.15 202 14.8 +37.2 191 14 +37.25 161 13.2 +37.3 199 14.3 +37.35 175 13.7 +37.4 146 12.3 +37.45 181 14 +37.5 221 15 +37.55 194 14.4 +37.6 158 12.7 +37.65 171 13.5 +37.7 172 13.2 +37.75 168 13.3 +37.8 192 13.9 +37.85 185 13.9 +37.9 193 13.9 +37.95 178 13.6 +38 195 13.9 +38.05 175 13.4 +38.1 178 13.2 +38.15 173 13.3 +38.2 195 13.7 +38.25 194 13.9 +38.3 191 13.5 +38.35 178 13.3 +38.4 184 13.3 +38.45 186 13.5 +38.5 202 13.8 +38.55 200 14 +38.6 210 14 +38.65 198 13.9 +38.7 225 14.5 +38.75 209 14.3 +38.8 229 14.6 +38.85 197 13.9 +38.9 220 14.3 +38.95 215 14.4 +39 242 15 +39.05 340 18.1 +39.1 441 20.2 +39.15 654 25.1 +39.2 962 29.7 +39.25 1477 37.7 +39.3 2012 43 +39.35 2634 50.2 +39.4 3115 53.4 +39.45 3467 57.5 +39.5 3532 56.7 +39.55 3337 56.3 +39.6 2595 48.6 +39.65 1943 42.9 +39.7 1251 33.7 +39.75 828 28 +39.8 525 21.8 +39.85 377 18.8 +39.9 294 16.3 +39.95 233 14.8 +40 233 14.5 +40.05 253 15.4 +40.1 253 15.1 +40.15 213 14.1 +40.2 196 13.2 +40.25 222 14.4 +40.3 172 12.4 +40.35 218 14.3 +40.4 206 13.6 +40.45 195 13.6 +40.5 209 13.7 +40.55 192 13.5 +40.6 197 13.3 +40.65 188 13.3 +40.7 202 13.5 +40.75 208 14 +40.8 184 12.9 +40.85 177 13 +40.9 202 13.5 +40.95 198 13.8 +41 203 13.6 +41.05 193 13.6 +41.1 188 13.1 +41.15 211 14.2 +41.2 189 13.1 +41.25 200 13.9 +41.3 198 13.5 +41.35 203 14 +41.4 197 13.4 +41.45 190 13.6 +41.5 212 14 +41.55 185 13.4 +41.6 228 14.5 +41.65 167 12.8 +41.7 207 13.9 +41.75 187 13.6 +41.8 190 13.3 +41.85 192 13.8 +41.9 185 13.2 +41.95 161 12.7 +42 187 13.3 +42.05 191 13.8 +42.1 159 12.3 +42.15 170 13.1 +42.2 182 13.2 +42.25 186 13.7 +42.3 192 13.6 +42.35 178 13.5 +42.4 186 13.4 +42.45 180 13.5 +42.5 178 13.1 +42.55 182 13.6 +42.6 179 13.2 +42.65 203 14.5 +42.7 191 13.7 +42.75 207 14.6 +42.8 183 13.4 +42.85 180 13.6 +42.9 191 13.7 +42.95 187 13.9 +43 184 13.5 +43.05 182 13.8 +43.1 178 13.3 +43.15 169 13.3 +43.2 158 12.6 +43.25 180 13.7 +43.3 174 13.2 +43.35 184 14 +43.4 178 13.4 +43.45 180 13.8 +43.5 144 12 +43.55 169 13.4 +43.6 177 13.3 +43.65 156 12.8 +43.7 148 12.2 +43.75 159 12.9 +43.8 195 14 +43.85 186 14 +43.9 180 13.4 +43.95 192 14.1 +44 186 13.5 +44.05 180 13.6 +44.1 174 13.1 +44.15 181 13.6 +44.2 178 13.2 +44.25 189 13.8 +44.3 206 14.1 +44.35 183 13.6 +44.4 161 12.4 +44.45 170 13 +44.5 203 13.9 +44.55 168 12.9 +44.6 199 13.7 +44.65 192 13.7 +44.7 192 13.4 +44.75 200 14 +44.8 206 13.9 +44.85 193 13.7 +44.9 188 13.2 +44.95 200 13.9 +45 193 13.4 +45.05 203 14 +45.1 212 14 +45.15 197 13.8 +45.2 219 14.2 +45.25 219 14.6 +45.3 226 14.5 +45.35 282 16.5 +45.4 353 18.1 +45.45 469 21.3 +45.5 741 26.2 +45.55 1176 33.7 +45.6 1577 38.1 +45.65 2122 45.3 +45.7 2726 50.1 +45.75 2990 53.7 +45.8 2991 52.5 +45.85 2796 52 +45.9 2372 46.8 +45.95 1752 41.2 +46 1209 33.4 +46.05 824 28.3 +46.1 512 21.8 +46.15 353 18.6 +46.2 273 15.9 +46.25 259 15.9 +46.3 233 14.8 +46.35 220 14.7 +46.4 228 14.6 +46.45 231 15.1 +46.5 218 14.3 +46.55 210 14.4 +46.6 212 14.2 +46.65 187 13.6 +46.7 207 14 +46.75 212 14.5 +46.8 188 13.4 +46.85 178 13.3 +46.9 186 13.3 +46.95 192 13.8 +47 192 13.5 +47.05 186 13.6 +47.1 208 14.1 +47.15 199 14.1 +47.2 165 12.5 +47.25 212 14.5 +47.3 191 13.5 +47.35 185 13.6 +47.4 171 12.7 +47.45 176 13.2 +47.5 179 13 +47.55 187 13.6 +47.6 181 13.1 +47.65 173 13.1 +47.7 167 12.5 +47.75 182 13.4 +47.8 171 12.7 +47.85 185 13.5 +47.9 177 12.9 +47.95 154 12.4 +48 200 13.7 +48.05 177 13.3 +48.1 184 13.2 +48.15 166 12.8 +48.2 181 13.1 +48.25 208 14.4 +48.3 186 13.2 +48.35 164 12.7 +48.4 196 13.6 +48.45 169 12.9 +48.5 173 12.7 +48.55 200 14.1 +48.6 163 12.4 +48.65 173 13.1 +48.7 187 13.3 +48.75 177 13.3 +48.8 200 13.8 +48.85 171 13 +48.9 192 13.5 +48.95 178 13.3 +49 169 12.7 +49.05 160 12.7 +49.1 182 13.2 +49.15 173 13.2 +49.2 170 12.8 +49.25 181 13.6 +49.3 170 12.9 +49.35 164 13 +49.4 166 12.7 +49.45 174 13.4 +49.5 173 13.1 +49.55 137 11.9 +49.6 166 12.8 +49.65 194 14.2 +49.7 160 12.6 +49.75 152 12.5 +49.8 180 13.3 +49.85 160 12.9 +49.9 149 12.2 +49.95 172 13.4 +50 170 13 +50.05 175 13.5 +50.1 162 12.7 +50.15 168 13.2 +50.2 186 13.6 +50.25 179 13.6 +50.3 165 12.7 +50.35 155 12.6 +50.4 170 12.9 +50.45 162 12.8 +50.5 157 12.3 +50.55 173 13.2 +50.6 149 12 +50.65 167 13 +50.7 165 12.6 +50.75 157 12.5 +50.8 177 13 +50.85 187 13.6 +50.9 155 12.1 +50.95 194 13.7 +51 147 11.7 +51.05 169 12.8 +51.1 166 12.4 +51.15 193 13.6 +51.2 168 12.4 +51.25 188 13.4 +51.3 182 12.8 +51.35 180 13.1 +51.4 177 12.7 +51.45 188 13.3 +51.5 187 13 +51.55 178 12.9 +51.6 177 12.6 +51.65 184 13.1 +51.7 172 12.4 +51.75 188 13.3 +51.8 194 13.2 +51.85 179 12.9 +51.9 176 12.5 +51.95 180 12.9 +52 169 12.2 +52.05 178 12.9 +52.1 165 12.1 +52.15 149 11.7 +52.2 168 12.2 +52.25 157 12.1 +52.3 151 11.6 +52.35 181 13 +52.4 172 12.4 +52.45 178 12.9 +52.5 179 12.6 +52.55 171 12.6 +52.6 129 10.7 +52.65 180 13 +52.7 154 11.7 +52.75 182 13.1 +52.8 166 12.2 +52.85 156 12.1 +52.9 164 12.1 +52.95 166 12.5 +53 176 12.5 +53.05 182 13.1 +53.1 173 12.5 +53.15 160 12.3 +53.2 169 12.3 +53.25 162 12.3 +53.3 164 12.1 +53.35 165 12.4 +53.4 177 12.6 +53.45 173 12.8 +53.5 158 11.9 +53.55 164 12.4 +53.6 175 12.5 +53.65 166 12.5 +53.7 161 12 +53.75 167 12.5 +53.8 136 11 +53.85 167 12.5 +53.9 152 11.7 +53.95 159 12.2 +54 172 12.4 +54.05 179 12.9 +54.1 169 12.2 +54.15 165 12.4 +54.2 166 12.1 +54.25 162 12.3 +54.3 175 12.4 +54.35 162 12.3 +54.4 145 11.4 +54.45 148 11.7 +54.5 157 11.8 +54.55 176 12.8 +54.6 162 12 +54.65 153 12 +54.7 178 12.6 +54.75 147 11.8 +54.8 146 11.5 +54.85 170 12.7 +54.9 155 11.8 +54.95 170 12.7 +55 142 11.3 +55.05 154 12.1 +55.1 150 11.7 +55.15 145 11.8 +55.2 151 11.8 +55.25 162 12.5 +55.3 153 11.9 +55.35 170 12.9 +55.4 153 11.9 +55.45 156 12.4 +55.5 163 12.4 +55.55 149 12.2 +55.6 135 11.3 +55.65 158 12.6 +55.7 144 11.7 +55.75 152 12.4 +55.8 165 12.7 +55.85 164 13 +55.9 175 13.1 +55.95 150 12.4 +56 168 12.9 +56.05 159 12.9 +56.1 187 13.6 +56.15 170 13.3 +56.2 159 12.6 +56.25 148 12.5 +56.3 159 12.6 +56.35 174 13.5 +56.4 195 14 +56.45 219 15.1 +56.5 216 14.7 +56.55 271 16.8 +56.6 337 18.3 +56.65 417 20.8 +56.7 390 19.7 +56.75 414 20.7 +56.8 388 19.6 +56.85 317 18.1 +56.9 307 17.4 +56.95 250 16 +57 205 14.2 +57.05 167 13 +57.1 179 13.2 +57.15 159 12.7 +57.2 170 12.8 +57.25 168 13 +57.3 180 13.1 +57.35 144 12 +57.4 178 13 +57.45 203 14.2 +57.5 159 12.3 +57.55 165 12.8 +57.6 164 12.4 +57.65 135 11.6 +57.7 157 12.2 +57.75 162 12.7 +57.8 175 12.9 +57.85 161 12.6 +57.9 174 12.8 +57.95 187 13.7 +58 164 12.5 +58.05 188 13.7 +58.1 163 12.4 +58.15 177 13.3 +58.2 181 13.1 +58.25 156 12.5 +58.3 163 12.4 +58.35 190 13.8 +58.4 162 12.4 +58.45 186 13.7 +58.5 169 12.7 +58.55 160 12.7 +58.6 171 12.8 +58.65 160 12.6 +58.7 174 12.9 +58.75 163 12.7 +58.8 180 13.1 +58.85 176 13.2 +58.9 174 12.8 +58.95 177 13.3 +59 186 13.3 +59.05 157 12.4 +59.1 188 13.3 +59.15 162 12.6 +59.2 160 12.2 +59.25 196 13.9 +59.3 178 12.9 +59.35 188 13.5 +59.4 161 12.3 +59.45 157 12.3 +59.5 183 13 +59.55 169 12.8 +59.6 150 11.8 +59.65 195 13.7 +59.7 175 12.7 +59.75 160 12.4 +59.8 168 12.4 +59.85 191 13.5 +59.9 181 12.8 +59.95 168 12.7 +60 181 12.8 +60.05 158 12.2 +60.1 160 12 +60.15 151 12 +60.2 171 12.4 +60.25 167 12.6 +60.3 160 12 +60.35 157 12.1 +60.4 172 12.4 +60.45 140 11.5 +60.5 172 12.4 +60.55 150 11.9 +60.6 179 12.7 +60.65 153 12 +60.7 170 12.4 +60.75 184 13.1 +60.8 158 11.9 +60.85 177 12.9 +60.9 159 12 +60.95 157 12.2 +61 168 12.3 +61.05 154 12 +61.1 170 12.4 +61.15 147 11.8 +61.2 161 12.1 +61.25 175 12.9 +61.3 170 12.4 +61.35 153 12.1 +61.4 165 12.3 +61.45 164 12.5 +61.5 174 12.6 +61.55 160 12.4 +61.6 188 13.2 +61.65 182 13.3 +61.7 197 13.5 +61.75 163 12.6 +61.8 176 12.8 +61.85 157 12.4 +61.9 166 12.4 +61.95 173 13.1 +62 167 12.5 +62.05 175 13.2 +62.1 143 11.6 +62.15 148 12.1 +62.2 178 13 +62.25 180 13.4 +62.3 141 11.6 +62.35 202 14.3 +62.4 172 12.8 +62.45 169 13 +62.5 143 11.8 +62.55 146 12.2 +62.6 169 12.8 +62.65 146 12.3 +62.7 156 12.3 +62.75 147 12.3 +62.8 158 12.4 +62.85 178 13.5 +62.9 163 12.6 +62.95 168 13.1 +63 164 12.6 +63.05 180 13.6 +63.1 189 13.6 +63.15 164 12.9 +63.2 181 13.2 +63.25 179 13.5 +63.3 147 11.9 +63.35 179 13.5 +63.4 150 12 +63.45 168 12.9 +63.5 156 12.2 +63.55 181 13.4 +63.6 170 12.7 +63.65 181 13.3 +63.7 184 13.1 +63.75 153 12.2 +63.8 166 12.4 +63.85 166 12.6 +63.9 169 12.5 +63.95 175 12.9 +64 157 12 +64.05 165 12.4 +64.1 169 12.3 +64.15 164 12.4 +64.2 181 12.8 +64.25 189 13.3 +64.3 179 12.6 +64.35 157 12.1 +64.4 189 13 +64.45 167 12.5 +64.5 178 12.5 +64.55 144 11.6 +64.6 180 12.6 +64.65 182 12.9 +64.7 199 13.2 +64.75 172 12.6 +64.8 191 12.9 +64.85 166 12.3 +64.9 157 11.7 +64.95 197 13.5 +65 204 13.4 +65.05 183 13 +65.1 189 12.9 +65.15 189 13.2 +65.2 170 12.2 +65.25 188 13.2 +65.3 176 12.4 +65.35 172 12.6 +65.4 182 12.7 +65.45 205 13.8 +65.5 191 13 +65.55 192 13.3 +65.6 190 12.9 +65.65 194 13.4 +65.7 212 13.7 +65.75 221 14.3 +65.8 227 14.2 +65.85 227 14.6 +65.9 239 14.6 +65.95 261 15.6 +66 301 16.4 +66.05 409 19.6 +66.1 559 22.3 +66.15 820 27.8 +66.2 1276 33.9 +66.25 1776 41 +66.3 2322 45.7 +66.35 2880 52.2 +66.4 3051 52.5 +66.45 2980 53.1 +66.5 2572 48.2 +66.55 1961 43.2 +66.6 1315 34.5 +66.65 919 29.6 +66.7 548 22.4 +66.75 405 19.7 +66.8 299 16.5 +66.85 309 17.2 +66.9 279 15.9 +66.95 281 16.4 +67 235 14.7 +67.05 239 15.1 +67.1 212 14 +67.15 228 14.8 +67.2 231 14.5 +67.25 198 13.8 +67.3 223 14.3 +67.35 201 13.9 +67.4 208 13.8 +67.45 207 14.1 +67.5 217 14.1 +67.55 196 13.7 +67.6 182 12.9 +67.65 182 13.2 +67.7 186 13.1 +67.75 176 13 +67.8 192 13.3 +67.85 215 14.5 +67.9 178 12.9 +67.95 191 13.7 +68 178 12.9 +68.05 185 13.5 +68.1 171 12.7 +68.15 174 13.3 +68.2 193 13.6 +68.25 182 13.6 +68.3 178 13.1 +68.35 196 14.1 +68.4 178 13.1 +68.45 173 13.3 +68.5 175 13.1 +68.55 178 13.6 +68.6 177 13.2 +68.65 176 13.6 +68.7 200 14.1 +68.75 177 13.6 +68.8 185 13.6 +68.85 167 13.2 +68.9 158 12.6 +68.95 176 13.6 +69 192 13.8 +69.05 174 13.5 +69.1 154 12.4 +69.15 153 12.7 +69.2 167 12.9 +69.25 168 13.3 +69.3 167 12.9 +69.35 163 13.1 +69.4 157 12.5 +69.45 185 13.9 +69.5 151 12.3 +69.55 176 13.5 +69.6 187 13.6 +69.65 170 13.2 +69.7 164 12.7 +69.75 204 14.5 +69.8 169 12.8 +69.85 191 13.9 +69.9 177 13.1 +69.95 157 12.6 +70 173 12.8 +70.05 199 14.1 +70.1 168 12.6 +70.15 191 13.7 +70.2 165 12.4 +70.25 156 12.3 +70.3 163 12.3 +70.35 149 12 +70.4 199 13.6 +70.45 158 12.3 +70.5 158 12.1 +70.55 150 12 +70.6 197 13.5 +70.65 167 12.6 +70.7 180 12.8 +70.75 187 13.4 +70.8 190 13.2 +70.85 169 12.7 +70.9 214 14 +70.95 188 13.5 +71 200 13.5 +71.05 186 13.3 +71.1 169 12.4 +71.15 166 12.6 +71.2 175 12.6 +71.25 170 12.8 +71.3 191 13.2 +71.35 185 13.3 +71.4 191 13.2 +71.45 181 13.2 +71.5 188 13.1 +71.55 164 12.6 +71.6 185 13 +71.65 168 12.7 +71.7 168 12.4 +71.75 167 12.6 +71.8 158 12 +71.85 173 12.9 +71.9 177 12.7 +71.95 193 13.6 +72 190 13.2 +72.05 174 12.9 +72.1 161 12.1 +72.15 147 11.8 +72.2 165 12.3 +72.25 188 13.4 +72.3 172 12.5 +72.35 176 12.9 +72.4 167 12.3 +72.45 186 13.3 +72.5 178 12.7 +72.55 158 12.2 +72.6 168 12.3 +72.65 180 13.1 +72.7 154 11.8 +72.75 162 12.4 +72.8 168 12.3 +72.85 194 13.5 +72.9 164 12.1 +72.95 169 12.6 +73 160 12 +73.05 164 12.5 +73.1 171 12.4 +73.15 169 12.6 +73.2 167 12.3 +73.25 150 12 +73.3 173 12.5 +73.35 183 13.2 +73.4 169 12.4 +73.45 180 13.1 +73.5 173 12.5 +73.55 195 13.7 +73.6 178 12.8 +73.65 193 13.6 +73.7 179 12.8 +73.75 153 12.2 +73.8 169 12.4 +73.85 165 12.6 +73.9 172 12.6 +73.95 171 12.8 +74 178 12.8 +74.05 180 13.2 +74.1 168 12.5 +74.15 169 12.8 +74.2 190 13.2 +74.25 170 12.8 +74.3 178 12.8 +74.35 158 12.4 +74.4 185 13.1 +74.45 181 13.3 +74.5 173 12.7 +74.55 163 12.6 +74.6 184 13.1 +74.65 181 13.4 +74.7 192 13.5 +74.75 166 12.9 +74.8 168 12.6 +74.85 200 14.2 +74.9 188 13.4 +74.95 190 13.9 +75 211 14.3 +75.05 172 13.2 +75.1 198 13.9 +75.15 230 15.4 +75.2 264 16.1 +75.25 227 15.2 +75.3 289 16.8 +75.35 290 17.2 +75.4 284 16.7 +75.45 250 16.1 +75.5 233 15.1 +75.55 239 15.7 +75.6 239 15.3 +75.65 204 14.4 +75.7 178 13.2 +75.75 189 13.9 +75.8 202 14 +75.85 181 13.5 +75.9 190 13.5 +75.95 177 13.3 +76 199 13.8 +76.05 193 13.9 +76.1 170 12.7 +76.15 170 13 +76.2 165 12.5 +76.25 192 13.7 +76.3 171 12.7 +76.35 169 12.8 +76.4 168 12.5 +76.45 183 13.3 +76.5 173 12.6 +76.55 178 13.1 +76.6 175 12.7 +76.65 191 13.5 +76.7 166 12.3 +76.75 187 13.4 +76.8 191 13.2 +76.85 184 13.3 +76.9 168 12.4 +76.95 177 13 +77 205 13.7 +77.05 188 13.4 +77.1 166 12.3 +77.15 180 13.1 +77.2 179 12.8 +77.25 179 13.1 +77.3 163 12.2 +77.35 188 13.4 +77.4 169 12.4 +77.45 179 13 +77.5 169 12.4 +77.55 201 13.8 +77.6 184 12.9 +77.65 187 13.3 +77.7 207 13.7 +77.75 170 12.7 +77.8 193 13.2 +77.85 189 13.5 +77.9 205 13.7 +77.95 183 13.2 +78 179 12.8 +78.05 188 13.4 +78.1 194 13.3 +78.15 220 14.5 +78.2 195 13.4 +78.25 176 13 +78.3 208 13.8 +78.35 185 13.3 +78.4 217 14.1 +78.45 203 14 +78.5 200 13.5 +78.55 196 13.7 +78.6 197 13.4 +78.65 217 14.4 +78.7 179 12.8 +78.75 184 13.3 +78.8 187 13.1 +78.85 219 14.4 +78.9 193 13.3 +78.95 214 14.3 +79 207 13.7 +79.05 199 13.8 +79.1 224 14.3 +79.15 244 15.2 +79.2 217 14.1 +79.25 266 15.9 +79.3 281 16 +79.35 425 20.1 +79.4 527 21.9 +79.45 735 26.5 +79.5 1057 31.1 +79.55 1483 37.7 +79.6 1955 42.2 +79.65 2315 47.1 +79.7 2552 48.3 +79.75 2506 49 +79.8 2261 45.5 +79.85 1842 42.1 +79.9 1328 34.9 +79.95 911 29.6 +80 592 23.4 +80.05 430 20.4 +80.1 312 17 +80.15 284 16.6 +80.2 285 16.2 +80.25 247 15.5 +80.3 250 15.2 +80.35 231 15 +80.4 272 15.9 +80.45 235 15.2 +80.5 188 13.2 +80.55 223 14.8 +80.6 218 14.3 +80.65 221 14.8 +80.7 210 14.1 +80.75 199 14 +80.8 207 14 +80.85 208 14.4 +80.9 178 13 +80.95 194 14 +81 202 13.9 +81.05 226 15.1 +81.1 209 14.2 +81.15 194 14.1 +81.2 179 13.2 +81.25 183 13.7 +81.3 187 13.5 +81.35 198 14.3 +81.4 198 14 +81.45 209 14.7 +81.5 187 13.6 +81.55 211 14.9 +81.6 198 14.1 +81.65 164 13.1 +81.7 200 14.1 +81.75 212 14.9 +81.8 197 14 +81.85 191 14.2 +81.9 195 14 +81.95 217 15.1 +82 189 13.8 +82.05 182 13.8 +82.1 174 13.2 +82.15 182 13.8 +82.2 199 14 +82.25 179 13.6 +82.3 197 13.9 +82.35 228 15.3 +82.4 170 12.9 +82.45 203 14.4 +82.5 232 15.1 +82.55 178 13.5 +82.6 216 14.5 +82.65 205 14.3 +82.7 185 13.3 +82.75 212 14.6 +82.8 199 13.7 +82.85 169 12.9 +82.9 165 12.5 +82.95 203 14.1 +83 215 14.2 +83.05 199 13.9 +83.1 200 13.6 +83.15 174 12.9 +83.2 192 13.3 +83.25 206 14.1 +83.3 191 13.2 +83.35 203 13.9 +83.4 210 13.9 +83.45 194 13.6 +83.5 245 14.9 +83.55 242 15.1 +83.6 255 15.2 +83.65 310 17.1 +83.7 408 19.2 +83.75 498 21.7 +83.8 729 25.6 +83.85 934 29.6 +83.9 1121 31.7 +83.95 1320 35.2 +84 1476 36.3 +84.05 1276 34.6 +84.1 1129 31.8 +84.15 887 28.8 +84.2 643 23.9 +84.25 490 21.4 +84.3 343 17.5 +84.35 284 16.3 +84.4 263 15.3 +84.45 229 14.6 +84.5 235 14.5 +84.55 246 15.1 +84.6 205 13.5 +84.65 217 14.2 +84.7 217 13.9 +84.75 197 13.5 +84.8 195 13.1 +84.85 232 14.7 +84.9 182 12.7 +84.95 192 13.4 +85 172 12.4 +85.05 191 13.3 +85.1 200 13.3 +85.15 186 13.1 +85.2 190 13 +85.25 211 14 +85.3 184 12.8 +85.35 180 12.9 +85.4 182 12.7 +85.45 184 13.1 +85.5 175 12.4 +85.55 176 12.8 +85.6 166 12.1 +85.65 180 12.9 +85.7 195 13.1 +85.75 183 13.1 +85.8 182 12.7 +85.85 168 12.5 +85.9 177 12.6 +85.95 190 13.3 +86 178 12.6 +86.05 180 13 +86.1 181 12.7 +86.15 177 12.9 +86.2 171 12.4 +86.25 193 13.5 +86.3 181 12.7 +86.35 180 13 +86.4 198 13.3 +86.45 177 12.9 +86.5 161 12 +86.55 166 12.5 +86.6 176 12.6 +86.65 190 13.4 +86.7 185 12.9 +86.75 173 12.9 +86.8 176 12.6 +86.85 159 12.3 +86.9 188 13.1 +86.95 199 13.9 +87 180 12.9 +87.05 164 12.6 +87.1 180 12.9 +87.15 190 13.6 +87.2 179 12.9 +87.25 177 13.2 +87.3 183 13.1 +87.35 174 13.2 +87.4 164 12.5 +87.45 165 12.9 +87.5 185 13.3 +87.55 191 13.9 +87.6 181 13.2 +87.65 143 12.1 +87.7 170 12.9 +87.75 150 12.4 +87.8 187 13.5 +87.85 181 13.6 +87.9 171 12.9 +87.95 179 13.6 +88 146 12 +88.05 175 13.4 +88.1 182 13.4 +88.15 176 13.5 +88.2 164 12.7 +88.25 152 12.6 +88.3 188 13.6 +88.35 152 12.5 +88.4 172 13 +88.45 140 12 +88.5 176 13.1 +88.55 168 13.1 +88.6 197 13.8 +88.65 190 13.9 +88.7 176 13.1 +88.75 167 13 +88.8 182 13.3 +88.85 175 13.2 +88.9 154 12.1 +88.95 168 12.9 +89 187 13.3 +89.05 163 12.7 +89.1 173 12.8 +89.15 161 12.5 +89.2 170 12.6 +89.25 178 13.1 +89.3 174 12.7 +89.35 172 12.8 +89.4 167 12.4 +89.45 168 12.6 +89.5 164 12.2 +89.55 183 13.1 +89.6 141 11.3 +89.65 173 12.8 +89.7 190 13.1 +89.75 180 13 +89.8 162 12.1 +89.85 166 12.5 +89.9 164 12.1 +89.95 166 12.5 +90 170 12.4 +90.05 176 12.9 +90.1 181 12.8 +90.15 175 12.9 +90.2 161 12.1 +90.25 170 12.7 +90.3 166 12.3 +90.35 175 12.9 +90.4 171 12.5 +90.45 172 12.8 +90.5 183 12.9 +90.55 165 12.5 +90.6 181 12.8 +90.65 168 12.7 +90.7 179 12.7 +90.75 157 12.2 +90.8 172 12.5 +90.85 187 13.3 +90.9 181 12.8 +90.95 163 12.4 +91 163 12.1 +91.05 166 12.5 +91.1 161 12 +91.15 167 12.5 +91.2 148 11.5 +91.25 175 12.8 +91.3 195 13.2 +91.35 181 13 +91.4 173 12.5 +91.45 160 12.3 +91.5 180 12.7 +91.55 183 13.1 +91.6 156 11.9 +91.65 163 12.4 +91.7 175 12.5 +91.75 189 13.3 +91.8 181 12.7 +91.85 186 13.2 +91.9 184 12.8 +91.95 187 13.2 +92 191 13.1 +92.05 203 13.7 +92.1 194 13.1 +92.15 237 14.8 +92.2 242 14.6 +92.25 307 16.9 +92.3 299 16.3 +92.35 340 17.7 +92.4 357 17.7 +92.45 354 18.1 +92.5 370 18 +92.55 375 18.6 +92.6 303 16.3 +92.65 264 15.6 +92.7 243 14.6 +92.75 207 13.9 +92.8 199 13.2 +92.85 180 12.9 +92.9 202 13.3 +92.95 188 13.2 +93 183 12.7 +93.05 170 12.6 +93.1 180 12.6 +93.15 182 13.1 +93.2 186 12.9 +93.25 196 13.6 +93.3 177 12.6 +93.35 198 13.7 +93.4 182 12.8 +93.45 183 13.2 +93.5 184 12.9 +93.55 181 13.2 +93.6 190 13.2 +93.65 176 13.1 +93.7 197 13.5 +93.75 174 13.1 +93.8 159 12.2 +93.85 171 13 +93.9 159 12.2 +93.95 170 13 +94 172 12.7 +94.05 159 12.6 +94.1 160 12.3 +94.15 173 13.2 +94.2 147 11.9 +94.25 143 12 +94.3 150 12 +94.35 155 12.5 +94.4 160 12.4 +94.45 155 12.6 +94.5 176 13 +94.55 198 14.2 +94.6 179 13.2 +94.65 161 12.8 +94.7 175 13.1 +94.75 157 12.7 +94.8 173 13 +94.85 168 13.1 +94.9 171 12.9 +94.95 173 13.2 +95 183 13.3 +95.05 148 12.2 +95.1 160 12.4 +95.15 171 13.1 +95.2 167 12.6 +95.25 195 13.9 +95.3 175 12.9 +95.35 200 14.1 +95.4 176 12.9 +95.45 175 13.1 +95.5 194 13.5 +95.55 190 13.6 +95.6 154 12 +95.65 166 12.7 +95.7 164 12.3 +95.75 166 12.6 +95.8 162 12.2 +95.85 183 13.2 +95.9 149 11.6 +95.95 171 12.8 +96 165 12.3 +96.05 181 13.1 +96.1 188 13 +96.15 184 13.2 +96.2 162 12.1 +96.25 163 12.4 +96.3 165 12.2 +96.35 183 13.1 +96.4 182 12.8 +96.45 156 12.1 +96.5 159 11.9 +96.55 139 11.4 +96.6 165 12.1 +96.65 164 12.4 +96.7 184 12.8 +96.75 159 12.1 +96.8 159 11.9 +96.85 155 12 +96.9 162 12 +96.95 157 12 +97 160 11.9 +97.05 168 12.5 +97.1 168 12.2 +97.15 151 11.8 +97.2 162 11.9 +97.25 163 12.2 +97.3 166 12.1 +97.35 161 12.2 +97.4 158 11.8 +97.45 151 11.8 +97.5 163 12 +97.55 179 12.8 +97.6 166 12.1 +97.65 155 11.9 +97.7 160 11.8 +97.75 152 11.8 +97.8 184 12.7 +97.85 175 12.6 +97.9 161 11.8 +97.95 166 12.3 +98 150 11.4 +98.05 179 12.8 +98.1 184 12.7 +98.15 151 11.8 +98.2 173 12.3 +98.25 164 12.3 +98.3 178 12.5 +98.35 176 12.8 +98.4 162 11.9 +98.45 173 12.7 +98.5 154 11.6 +98.55 184 13.1 +98.6 142 11.2 +98.65 184 13 +98.7 156 11.7 +98.75 177 12.8 +98.8 163 12 +98.85 173 12.7 +98.9 180 12.7 +98.95 181 13 +99 165 12.1 +99.05 177 12.9 +99.1 155 11.8 +99.15 147 11.7 +99.2 163 12.1 +99.25 172 12.7 +99.3 145 11.4 +99.35 156 12.1 +99.4 161 12 +99.45 189 13.5 +99.5 182 12.9 +99.55 172 12.8 +99.6 176 12.7 +99.65 166 12.6 +99.7 190 13.2 +99.75 154 12.2 +99.8 198 13.5 +99.85 152 12.2 +99.9 160 12.2 +99.95 174 13 +100 187 13.2 +100.05 178 13.2 +100.1 149 11.8 +100.15 171 13 +100.2 185 13.2 +100.25 207 14.4 +100.3 184 13.2 +100.35 187 13.7 +100.4 231 14.9 +100.45 226 15.1 +100.5 203 14 +100.55 214 14.8 +100.6 279 16.5 +100.65 319 18.1 +100.7 397 19.7 +100.75 435 21.2 +100.8 539 23 +100.85 665 26.3 +100.9 724 26.8 +100.95 723 27.5 +101 783 27.9 +101.05 719 27.5 +101.1 585 24.2 +101.15 465 22.1 +101.2 371 19.3 +101.25 328 18.5 +101.3 277 16.7 +101.35 248 16.1 +101.4 209 14.4 +101.45 221 15.1 +101.5 198 14 +101.55 203 14.5 +101.6 188 13.6 +101.65 207 14.5 +101.7 195 13.8 +101.75 170 13.1 +101.8 192 13.6 +101.85 172 13.1 +101.9 185 13.3 +101.95 183 13.4 +102 211 14.1 +102.05 147 12 +102.1 176 12.8 +102.15 186 13.4 +102.2 171 12.6 +102.25 169 12.7 +102.3 192 13.2 +102.35 215 14.3 +102.4 146 11.5 +102.45 169 12.6 +102.5 188 13.1 +102.55 175 12.8 +102.6 165 12.2 +102.65 184 13.1 +102.7 172 12.4 +102.75 179 13 +102.8 163 12.1 +102.85 167 12.5 +102.9 179 12.7 +102.95 171 12.7 +103 181 12.7 +103.05 171 12.7 +103.1 180 12.7 +103.15 173 12.8 +103.2 167 12.2 +103.25 186 13.2 +103.3 176 12.5 +103.35 191 13.4 +103.4 170 12.3 +103.45 167 12.5 +103.5 165 12.1 +103.55 182 13 +103.6 173 12.4 +103.65 186 13.2 +103.7 161 12 +103.75 166 12.4 +103.8 157 11.8 +103.85 170 12.5 +103.9 183 12.7 +103.95 179 12.9 +104 164 12 +104.05 169 12.5 +104.1 161 11.9 +104.15 156 12 +104.2 163 12 +104.25 174 12.7 +104.3 161 11.9 +104.35 169 12.5 +104.4 158 11.8 +104.45 180 12.9 +104.5 171 12.3 +104.55 165 12.3 +104.6 163 12 +104.65 172 12.6 +104.7 164 12 +104.75 174 12.6 +104.8 178 12.5 +104.85 154 11.9 +104.9 176 12.4 +104.95 142 11.4 +105 163 12 +105.05 177 12.8 +105.1 194 13 +105.15 176 12.7 +105.2 207 13.5 +105.25 158 12.1 +105.3 151 11.5 +105.35 183 13 +105.4 159 11.8 +105.45 179 12.9 +105.5 170 12.2 +105.55 192 13.3 +105.6 160 11.9 +105.65 168 12.4 +105.7 183 12.7 +105.75 163 12.3 +105.8 162 11.9 +105.85 182 12.9 +105.9 154 11.6 +105.95 180 12.9 +106 168 12.2 +106.05 166 12.4 +106.1 155 11.7 +106.15 190 13.3 +106.2 165 12.1 +106.25 163 12.3 +106.3 183 12.8 +106.35 165 12.5 +106.4 173 12.5 +106.45 163 12.5 +106.5 151 11.7 +106.55 198 13.8 +106.6 165 12.2 +106.65 157 12.3 +106.7 159 12.1 +106.75 177 13.1 +106.8 156 12 +106.85 182 13.4 +106.9 181 13 +106.95 158 12.5 +107 176 12.8 +107.05 163 12.7 +107.1 156 12.1 +107.15 213 14.6 +107.2 172 12.8 +107.25 170 13 +107.3 168 12.6 +107.35 169 13 +107.4 169 12.7 +107.45 168 13 +107.5 155 12.1 +107.55 164 12.8 +107.6 168 12.7 +107.65 144 12 +107.7 166 12.6 +107.75 172 13.1 +107.8 156 12.2 +107.85 154 12.4 +107.9 143 11.6 +107.95 152 12.3 +108 174 12.8 +108.05 168 12.8 +108.1 164 12.4 +108.15 160 12.5 +108.2 176 12.8 +108.25 174 13 +108.3 175 12.7 +108.35 163 12.6 +108.4 169 12.5 +108.45 180 13.1 +108.5 159 12 +108.55 173 12.8 +108.6 148 11.6 +108.65 169 12.6 +108.7 167 12.3 +108.75 168 12.5 +108.8 175 12.5 +108.85 163 12.3 +108.9 164 12.1 +108.95 189 13.3 +109 192 13.1 +109.05 181 13 +109.1 202 13.4 +109.15 190 13.3 +109.2 163 12 +109.25 216 14.1 +109.3 220 14 +109.35 230 14.6 +109.4 255 15 +109.45 253 15.3 +109.5 273 15.5 +109.55 296 16.5 +109.6 300 16.3 +109.65 331 17.5 +109.7 347 17.5 +109.75 349 18 +109.8 341 17.4 +109.85 332 17.5 +109.9 298 16.2 +109.95 259 15.5 +110 227 14.1 +110.05 203 13.7 +110.1 222 14 +110.15 175 12.7 +110.2 183 12.7 +110.25 197 13.5 +110.3 176 12.4 +110.35 179 12.9 +110.4 176 12.5 +110.45 178 12.8 +110.5 210 13.6 +110.55 181 13 +110.6 167 12.2 +110.65 165 12.4 +110.7 172 12.3 +110.75 175 12.8 +110.8 177 12.5 +110.85 194 13.4 +110.9 171 12.3 +110.95 177 12.8 +111 188 12.9 +111.05 175 12.8 +111.1 194 13.1 +111.15 179 12.9 +111.2 171 12.3 +111.25 165 12.4 +111.3 183 12.7 +111.35 184 13 +111.4 187 12.9 +111.45 178 12.8 +111.5 172 12.3 +111.55 179 12.9 +111.6 205 13.4 +111.65 168 12.5 +111.7 161 11.9 +111.75 182 13 +111.8 167 12.2 +111.85 193 13.4 +111.9 188 12.9 +111.95 204 13.8 +112 179 12.6 +112.05 176 12.8 +112.1 185 12.8 +112.15 174 12.7 +112.2 175 12.5 +112.25 198 13.6 +112.3 199 13.3 +112.35 207 13.9 +112.4 204 13.5 +112.45 180 13 +112.5 137 11.1 +112.55 179 13 +112.6 183 12.8 +112.65 166 12.6 +112.7 166 12.3 +112.75 189 13.4 +112.8 181 12.8 +112.85 194 13.6 +112.9 171 12.5 +112.95 202 13.9 +113 216 14.1 +113.05 198 14 +113.1 189 13.3 +113.15 170 13 +113.2 182 13.1 +113.25 195 14 +113.3 177 13 +113.35 180 13.5 +113.4 195 13.7 +113.45 201 14.3 +113.5 203 14 +113.55 200 14.3 +113.6 209 14.2 +113.65 231 15.4 +113.7 281 16.6 +113.75 287 17.2 +113.8 324 17.8 +113.85 395 20.2 +113.9 457 21.2 +113.95 580 24.4 +114 685 26 +114.05 873 30 +114.1 964 30.8 +114.15 1126 34 +114.2 1266 35.2 +114.25 1307 36.5 +114.3 1221 34.5 +114.35 1096 33.3 +114.4 978 30.7 +114.45 792 28.2 +114.5 600 24 +114.55 487 22 +114.6 358 18.5 +114.65 279 16.6 +114.7 265 15.8 +114.75 258 15.9 +114.8 244 15.1 +114.85 226 14.8 +114.9 227 14.5 +114.95 188 13.5 +115 195 13.4 +115.05 211 14.2 +115.1 205 13.7 +115.15 198 13.7 +115.2 218 14 +115.25 200 13.7 +115.3 200 13.4 +115.35 188 13.3 +115.4 209 13.7 +115.45 184 13.1 +115.5 186 12.9 +115.55 202 13.7 +115.6 183 12.7 +115.65 187 13.1 +115.7 182 12.6 +115.75 185 13.1 +115.8 213 13.7 +115.85 177 12.8 +115.9 199 13.2 +115.95 185 13 +116 184 12.7 +116.05 191 13.3 +116.1 173 12.3 +116.15 196 13.5 +116.2 201 13.3 +116.25 173 12.7 +116.3 178 12.6 +116.35 161 12.3 +116.4 208 13.6 +116.45 183 13.1 +116.5 183 12.8 +116.55 173 12.8 +116.6 184 12.8 +116.65 215 14.2 +116.7 201 13.4 +116.75 193 13.4 +116.8 190 13 +116.85 216 14.2 +116.9 195 13.1 +116.95 203 13.8 +117 183 12.8 +117.05 203 13.7 +117.1 187 12.9 +117.15 216 14.2 +117.2 191 13 +117.25 189 13.3 +117.3 189 13 +117.35 226 14.5 +117.4 185 12.9 +117.45 194 13.5 +117.5 185 12.8 +117.55 213 14.1 +117.6 197 13.3 +117.65 198 14.5 +117.7 168 13 +117.75 209 14.9 +117.8 185 13.7 +117.85 208 14.9 +117.9 213 14.7 +117.95 203 14.7 +118 225 15.1 +118.05 214 15.1 +118.1 233 15.4 +118.15 245 16.2 +118.2 236 15.5 +118.25 245 16.2 +118.3 305 17.6 +118.35 287 17.1 +118.4 317 17.4 +118.45 421 20.6 +118.5 422 20.1 +118.55 590 24.4 +118.6 701 26.8 +118.65 861 28.6 +118.7 1054 31 +118.75 1232 34.3 +118.8 1483 36.8 +118.85 1694 40.3 +118.9 1819 40.8 +118.95 1845 42.3 +119 1866 41.5 +119.05 1726 41 +119.1 1492 37.2 +119.15 1232 34.8 +119.2 971 30.1 +119.25 753 27.2 +119.3 626 24.2 +119.35 487 21.9 +119.4 409 19.6 +119.45 342 18.5 +119.5 307 17.1 +119.55 296 17.2 +119.6 231 14.9 +119.65 246 15.8 +119.7 220 14.5 +119.75 255 16.1 +119.8 214 14.4 +119.85 247 15.9 +119.9 238 15.2 +119.95 218 15 +120 222 14.7 +120.05 218 15 +120.1 253 15.8 +120.15 197 14.3 +120.2 190 13.6 +120.25 221 15.1 +120.3 204 14.2 +120.35 206 14.6 +120.4 189 13.6 +120.45 231 15.4 +120.5 190 13.6 +120.55 191 13.9 +120.6 211 14.3 +120.65 204 14.3 +120.7 200 13.9 +120.75 199 14.1 +120.8 190 13.5 +120.85 195 13.9 +120.9 179 13 +120.95 189 13.6 +121 190 13.3 +121.05 195 13.8 +121.1 193 13.4 +121.15 173 12.8 +121.2 183 13 +121.25 181 13.1 +121.3 203 13.5 +121.35 177 12.9 +121.4 201 13.4 +121.45 179 12.9 +121.5 179 12.6 +121.55 194 13.4 +121.6 158 11.9 +121.65 195 13.4 +121.7 201 13.4 +121.75 192 13.4 +121.8 189 13 +121.85 186 13.1 +121.9 170 12.3 +121.95 166 12.4 +122 185 12.8 +122.05 197 13.6 +122.1 177 12.6 +122.15 198 13.6 +122.2 174 12.5 +122.25 171 12.6 +122.3 190 13 +122.35 214 14.2 +122.4 189 13 +122.45 174 12.8 +122.5 171 12.4 +122.55 163 12.4 +122.6 174 12.4 +122.65 177 12.8 +122.7 180 12.6 +122.75 186 13.1 +122.8 190 13 +122.85 170 12.6 +122.9 175 12.5 +122.95 194 13.4 +123 175 12.5 +123.05 194 13.4 +123.1 189 12.9 +123.15 222 14.3 +123.2 178 12.5 +123.25 158 12.1 +123.3 191 13 +123.35 184 13 +123.4 190 12.9 +123.45 183 13 +123.5 178 12.5 +123.55 204 13.7 +123.6 192 13 +123.65 200 13.5 +123.7 182 12.6 +123.75 171 12.5 +123.8 186 12.7 +123.85 197 13.4 +123.9 174 12.3 +123.95 167 12.3 +124 178 12.4 +124.05 198 13.4 +124.1 205 13.3 +124.15 216 14 +124.2 200 13.2 +124.25 204 13.6 +124.3 190 12.8 +124.35 188 13.1 +124.4 191 12.9 +124.45 186 13 +124.5 175 12.3 +124.55 175 12.6 +124.6 174 12.3 +124.65 194 13.3 +124.7 181 12.5 +124.75 161 12.1 +124.8 186 12.7 +124.85 200 13.5 +124.9 168 12.1 +124.95 177 12.7 +125 188 12.8 +125.05 177 12.7 +125.1 163 11.9 +125.15 175 12.7 +125.2 188 12.8 +125.25 176 12.8 +125.3 172 12.3 +125.35 172 12.6 +125.4 181 12.7 +125.45 186 13.2 +125.5 181 12.7 +125.55 193 13.4 +125.6 177 12.6 +125.65 176 12.9 +125.7 194 13.2 +125.75 179 13 +125.8 147 11.5 +125.85 186 13.3 +125.9 182 12.9 +125.95 165 12.7 +126 164 12.3 +126.05 199 13.9 +126.1 167 12.4 +126.15 184 13.4 +126.2 203 13.8 +126.25 190 13.7 +126.3 182 13.1 +126.35 180 13.4 +126.4 179 13 +126.45 179 13.4 +126.5 170 12.7 +126.55 176 13.3 +126.6 178 13.1 +126.65 185 13.7 +126.7 193 13.6 +126.75 192 14 +126.8 198 13.8 +126.85 195 14 +126.9 165 12.6 +126.95 189 13.8 +127 175 13 +127.05 176 13.3 +127.1 184 13.3 +127.15 179 13.4 +127.2 187 13.4 +127.25 176 13.2 +127.3 191 13.5 +127.35 194 13.9 +127.4 177 12.9 +127.45 177 13.2 +127.5 180 13 +127.55 158 12.4 +127.6 193 13.4 +127.65 177 13.1 +127.7 185 13.1 +127.75 178 13.1 +127.8 184 13 +127.85 188 13.4 +127.9 182 12.9 +127.95 190 13.5 +128 191 13.2 +128.05 165 12.5 +128.1 174 12.5 +128.15 158 12.2 +128.2 197 13.3 +128.25 183 13.1 +128.3 196 13.3 +128.35 166 12.5 +128.4 218 14 +128.45 206 13.8 +128.5 184 12.8 +128.55 176 12.7 +128.6 198 13.2 +128.65 215 14.1 +128.7 179 12.6 +128.75 192 13.3 +128.8 201 13.3 +128.85 221 14.2 +128.9 227 14.1 +128.95 229 14.4 +129 254 14.9 +129.05 256 15.3 +129.1 272 15.4 +129.15 239 14.8 +129.2 228 14.1 +129.25 255 15.2 +129.3 213 13.6 +129.35 203 13.6 +129.4 228 14.1 +129.45 220 14.1 +129.5 185 12.6 +129.55 192 13.2 +129.6 187 12.7 +129.65 182 12.8 +129.7 209 13.4 +129.75 173 12.5 +129.8 202 13.2 +129.85 178 12.7 +129.9 189 12.8 +129.95 177 12.6 +130 177 12.3 +130.05 190 13.1 +130.1 178 12.4 +130.15 177 12.6 +130.2 164 11.9 +130.25 185 12.9 +130.3 153 11.4 +130.35 174 12.5 +130.4 197 13 +130.45 192 13.1 +130.5 174 12.2 +130.55 177 12.6 +130.6 172 12.1 +130.65 173 12.5 +130.7 178 12.4 +130.75 180 12.8 +130.8 203 13.2 +130.85 192 13.2 +130.9 184 12.6 +130.95 197 13.3 +131 169 12.1 +131.05 187 13 +131.1 175 12.3 +131.15 177 12.6 +131.2 199 13.1 +131.25 180 12.8 +131.3 203 13.2 +131.35 175 12.6 +131.4 183 12.5 +131.45 192 13.2 +131.5 174 12.3 +131.55 180 12.8 +131.6 179 12.5 +131.65 191 13.2 +131.7 182 12.6 +131.75 174 12.6 +131.8 191 12.9 +131.85 195 13.4 +131.9 171 12.3 +131.95 198 13.6 +132 193 13.1 +132.05 175 12.8 +132.1 207 13.6 +132.15 189 13.4 +132.2 174 12.5 +132.25 196 13.7 +132.3 175 12.6 +132.35 196 13.8 +132.4 183 13 +132.45 198 13.8 +132.5 196 13.4 +132.55 169 12.9 +132.6 189 13.3 +132.65 171 13 +132.7 193 13.5 +132.75 170 13 +132.8 175 12.9 +132.85 166 12.9 +132.9 188 13.4 +132.95 186 13.7 +133 165 12.6 +133.05 201 14.2 +133.1 182 13.2 +133.15 151 12.4 +133.2 156 12.2 +133.25 187 13.7 +133.3 153 12.1 +133.35 193 14 +133.4 200 13.9 +133.45 165 12.9 +133.5 172 12.9 +133.55 162 12.7 +133.6 165 12.5 +133.65 218 14.7 +133.7 197 13.6 +133.75 206 14.2 +133.8 186 13.2 +133.85 162 12.5 +133.9 176 12.8 +133.95 174 12.9 +134 196 13.4 +134.05 174 12.9 +134.1 177 12.7 +134.15 183 13.1 +134.2 184 12.9 +134.25 185 13.1 +134.3 200 13.4 +134.35 175 12.7 +134.4 190 13 +134.45 195 13.4 +134.5 192 13 +134.55 171 12.5 +134.6 194 13 +134.65 190 13.1 +134.7 165 12 +134.75 192 13.2 +134.8 160 11.7 +134.85 192 13.1 +134.9 181 12.5 +134.95 208 13.7 +135 179 12.4 +135.05 172 12.4 +135.1 183 12.5 +135.15 187 12.9 +135.2 185 12.5 +135.25 182 12.7 +135.3 184 12.5 +135.35 163 11.9 +135.4 201 13 +135.45 189 12.8 +135.5 204 13.1 +135.55 178 12.5 +135.6 178 12.2 +135.65 193 13 +135.7 215 13.4 +135.75 203 13.3 +135.8 216 13.4 +135.85 165 12.1 +135.9 196 12.8 +135.95 178 12.5 +136 170 11.9 +136.05 173 12.4 +136.1 188 12.6 +136.15 176 12.5 +136.2 186 12.5 +136.25 189 12.9 +136.3 166 11.8 +136.35 177 12.5 +136.4 169 11.9 +136.45 171 12.3 +136.5 194 12.8 +136.55 187 12.9 +136.6 162 11.7 +136.65 160 11.9 +136.7 183 12.4 +136.75 150 11.5 +136.8 180 12.4 +136.85 194 13.2 +136.9 185 12.6 +136.95 158 11.9 +137 193 12.9 +137.05 165 12.2 +137.1 178 12.3 +137.15 183 12.9 +137.2 180 12.4 +137.25 176 12.7 +137.3 183 12.6 +137.35 189 13.2 +137.4 180 12.5 +137.45 160 12.2 +137.5 202 13.3 +137.55 201 13.6 +137.6 173 12.3 +137.65 176 12.8 +137.7 195 13.1 +137.75 197 13.5 +137.8 186 12.8 +137.85 183 13 +137.9 175 12.4 +137.95 178 12.8 +138 190 12.9 +138.05 174 12.7 +138.1 163 12 +138.15 190 13.3 +138.2 169 12.2 +138.25 198 13.6 +138.3 199 13.3 +138.35 184 13.1 +138.4 216 13.9 +138.45 183 13.1 +138.5 200 13.4 +138.55 186 13.3 +138.6 177 12.7 +138.65 186 13.4 +138.7 193 13.3 +138.75 200 14 +138.8 180 12.9 +138.85 178 13.2 +138.9 198 13.6 +138.95 236 15.3 +139 203 13.8 +139.05 207 14.3 +139.1 190 13.4 +139.15 171 13.1 +139.2 203 13.9 +139.25 203 14.2 +139.3 198 13.7 +139.35 200 14.2 +139.4 187 13.3 +139.45 214 14.7 +139.5 198 13.7 +139.55 220 14.8 +139.6 196 13.7 +139.65 239 15.5 +139.7 212 14.2 +139.75 219 14.8 +139.8 248 15.4 +139.85 220 14.8 +139.9 241 15.1 +139.95 245 15.5 +140 269 15.9 +140.05 294 17 +140.1 323 17.4 +140.15 302 17.2 +140.2 312 17.1 +140.25 371 18.9 +140.3 420 19.7 +140.35 516 22.3 +140.4 596 23.4 +140.45 644 24.7 +140.5 711 25.4 +140.55 833 28.1 +140.6 895 28.4 +140.65 1010 30.7 +140.7 1058 30.8 +140.75 1183 33.1 +140.8 1278 33.7 +140.85 1298 34.6 +140.9 1419 35.4 +140.95 1381 35.6 +141 1299 33.8 +141.05 1371 35.4 +141.1 1273 33.3 +141.15 1131 32.1 +141.2 992 29.4 +141.25 918 28.9 +141.3 832 26.9 +141.35 655 24.5 +141.4 629 23.5 +141.45 522 21.9 +141.5 472 20.3 +141.55 409 19.3 +141.6 371 18 +141.65 325 17.3 +141.7 306 16.3 +141.75 270 15.7 +141.8 238 14.4 +141.85 231 14.5 +141.9 232 14.2 +141.95 223 14.3 +142 221 13.9 +142.05 244 14.9 +142.1 228 14.1 +142.15 212 13.9 +142.2 226 14 +142.25 197 13.4 +142.3 204 13.3 +142.35 189 13.1 +142.4 201 13.2 +142.45 226 14.3 +142.5 210 13.5 +142.55 213 13.9 +142.6 202 13.3 +142.65 206 13.7 +142.7 189 12.8 +142.75 213 13.9 +142.8 193 12.9 +142.85 206 13.7 +142.9 204 13.3 +142.95 188 13.1 +143 221 13.8 +143.05 203 13.6 +143.1 192 12.9 +143.15 197 13.4 +143.2 187 12.7 +143.25 206 13.7 +143.3 197 13.1 +143.35 182 12.8 +143.4 186 12.7 +143.45 228 14.4 +143.5 201 13.2 +143.55 176 12.6 +143.6 193 12.9 +143.65 200 13.5 +143.7 189 12.8 +143.75 198 13.4 +143.8 188 12.8 +143.85 169 12.4 +143.9 183 12.6 +143.95 198 13.4 +144 156 11.6 +144.05 172 12.5 +144.1 190 12.8 +144.15 166 12.3 +144.2 163 11.9 +144.25 184 13 +144.3 182 12.6 +144.35 173 12.6 +144.4 182 12.6 +144.45 183 13 +144.5 186 12.8 +144.55 195 13.4 +144.6 204 13.4 +144.65 179 13 +144.7 192 13.1 +144.75 213 14.1 +144.8 187 12.9 +144.85 194 13.5 +144.9 185 12.9 +144.95 183 13.2 +145 192 13.2 +145.05 201 13.9 +145.1 211 13.9 +145.15 163 12.5 +145.2 202 13.6 +145.25 197 13.8 +145.3 183 13 +145.35 177 13.2 +145.4 188 13.2 +145.45 158 12.5 +145.5 184 13.2 +145.55 162 12.7 +145.6 169 12.7 +145.65 171 13.1 +145.7 188 13.4 +145.75 167 13 +145.8 182 13.2 +145.85 197 14.1 +145.9 179 13.1 +145.95 172 13.2 +146 163 12.5 +146.05 172 13.1 +146.1 178 13 +146.15 179 13.4 +146.2 171 12.8 +146.25 189 13.7 +146.3 190 13.4 +146.35 185 13.5 +146.4 169 12.6 +146.45 165 12.7 +146.5 185 13.1 +146.55 158 12.4 +146.6 190 13.3 +146.65 165 12.6 +146.7 173 12.6 +146.75 206 14.1 +146.8 170 12.5 +146.85 193 13.6 +146.9 167 12.3 +146.95 182 13.1 +147 191 13.2 +147.05 175 12.9 +147.1 184 12.9 +147.15 163 12.4 +147.2 174 12.5 +147.25 176 12.9 +147.3 163 12.1 +147.35 174 12.8 +147.4 155 11.8 +147.45 153 12 +147.5 190 13 +147.55 190 13.3 +147.6 169 12.3 +147.65 189 13.3 +147.7 177 12.6 +147.75 167 12.5 +147.8 163 12 +147.85 196 13.5 +147.9 175 12.5 +147.95 146 11.6 +148 170 12.2 +148.05 179 12.9 +148.1 182 12.6 +148.15 175 12.7 +148.2 171 12.3 +148.25 201 13.6 +148.3 181 12.6 +148.35 152 11.8 +148.4 194 13 +148.45 160 12.2 +148.5 179 12.5 +148.55 181 12.9 +148.6 175 12.4 +148.65 178 12.8 +148.7 186 12.8 +148.75 195 13.4 +148.8 166 12 +148.85 184 13 +148.9 215 13.7 +148.95 183 12.9 +149 184 12.6 +149.05 174 12.6 +149.1 175 12.3 +149.15 171 12.5 +149.2 166 12 +149.25 188 13 +149.3 165 11.9 +149.35 184 12.9 +149.4 181 12.6 +149.45 174 12.6 +149.5 178 12.4 +149.55 191 13.2 +149.6 181 12.5 +149.65 174 12.6 +149.7 180 12.5 +149.75 177 12.7 +149.8 164 11.9 +149.85 203 13.6 +149.9 178 12.4 +149.95 162 12.2 +150 192 12.9 +150.05 164 12.2 +150.1 151 11.4 +150.15 170 12.5 +150.2 166 12 +150.25 194 13.3 +150.3 168 12.1 +150.35 173 12.5 +150.4 175 12.3 +150.45 193 13.3 +150.5 177 12.4 +150.55 185 13 +150.6 178 12.4 +150.65 178 12.7 +150.7 179 12.5 +150.75 180 12.9 +150.8 169 12.2 +150.85 177 12.8 +150.9 159 11.8 +150.95 167 12.4 +151 180 12.6 +151.05 158 12.2 +151.1 173 12.4 +151.15 172 12.7 +151.2 163 12.1 +151.25 168 12.6 +151.3 166 12.2 +151.35 179 13 +151.4 159 12 +151.45 173 12.9 +151.5 170 12.4 +151.55 151 12.1 +151.6 174 12.6 +151.65 182 13.2 +151.7 182 12.9 +151.75 172 12.9 +151.8 157 12 +151.85 156 12.3 +151.9 168 12.5 +151.95 194 13.8 +152 177 12.8 +152.05 170 12.9 +152.1 169 12.6 +152.15 173 13 +152.2 161 12.3 +152.25 169 12.9 +152.3 167 12.5 +152.35 194 13.8 +152.4 150 11.9 +152.45 159 12.5 +152.5 181 13.1 +152.55 180 13.3 +152.6 193 13.4 +152.65 192 13.7 +152.7 152 11.9 +152.75 159 12.5 +152.8 147 11.7 +152.85 190 13.6 +152.9 167 12.4 +152.95 193 13.6 +153 159 12.1 +153.05 195 13.6 +153.1 172 12.5 +153.15 148 11.9 +153.2 174 12.5 +153.25 194 13.5 +153.3 159 11.9 +153.35 190 13.3 +153.4 181 12.7 +153.45 159 12.1 +153.5 168 12.2 +153.55 175 12.7 +153.6 184 12.7 +153.65 200 13.5 +153.7 161 11.9 +153.75 162 12.1 +153.8 152 11.5 +153.85 177 12.7 +153.9 173 12.2 +153.95 184 12.9 +154 169 12.1 +154.05 163 12.1 +154.1 177 12.4 +154.15 171 12.5 +154.2 180 12.5 +154.25 201 13.4 +154.3 206 13.3 +154.35 181 12.7 +154.4 170 12 +154.45 177 12.6 +154.5 196 12.9 +154.55 201 13.4 +154.6 161 11.7 +154.65 179 12.6 +154.7 185 12.5 +154.75 167 12.1 +154.8 162 11.7 +154.85 178 12.6 +154.9 203 13.1 +154.95 193 13.1 +155 164 11.7 +155.05 191 13 +155.1 173 12.1 +155.15 165 12 +155.2 178 12.2 +155.25 196 13.2 +155.3 188 12.5 +155.35 183 12.7 +155.4 188 12.6 +155.45 166 12.1 +155.5 189 12.6 +155.55 175 12.4 +155.6 173 12 +155.65 201 13.3 +155.7 177 12.2 +155.75 202 13.3 +155.8 169 11.9 +155.85 198 13.2 +155.9 191 12.7 +155.95 207 13.5 +156 226 13.8 +156.05 184 12.8 +156.1 218 13.5 +156.15 215 13.8 +156.2 239 14.2 +156.25 292 16.1 +156.3 251 14.6 +156.35 255 15.1 +156.4 244 14.4 +156.45 259 15.2 +156.5 260 14.9 +156.55 294 16.3 +156.6 303 16.1 +156.65 282 15.9 +156.7 312 16.4 +156.75 317 16.9 +156.8 342 17.2 +156.85 338 17.5 +156.9 351 17.4 +156.95 359 18.1 +157 394 18.5 +157.05 316 17 +157.1 379 18.2 +157.15 359 18.2 +157.2 404 18.8 +157.25 381 18.8 +157.3 359 17.8 +157.35 364 18.4 +157.4 347 17.6 +157.45 328 17.5 +157.5 344 17.5 +157.55 320 17.4 +157.6 333 17.4 +157.65 319 17.5 +157.7 289 16.3 +157.75 284 16.6 +157.8 283 16.2 +157.85 305 17.2 +157.9 281 16.2 +157.95 244 15.6 +158 253 15.4 +158.05 245 15.6 +158.1 210 14.1 +158.15 201 14.2 +158.2 226 14.7 +158.25 206 14.4 +158.3 218 14.4 +158.35 201 14.3 +158.4 226 14.7 +158.45 201 14.2 +158.5 210 14.2 +158.55 207 14.4 +158.6 176 13 +158.65 172 13.1 +158.7 173 12.9 +158.75 195 13.9 +158.8 168 12.7 +158.85 177 13.3 +158.9 186 13.3 +158.95 170 13 +159 190 13.4 +159.05 175 13.1 +159.1 191 13.4 +159.15 164 12.7 +159.2 189 13.3 +159.25 176 13.1 +159.3 175 12.8 +159.35 162 12.5 +159.4 184 13 +159.45 163 12.5 +159.5 179 12.8 +159.55 194 13.6 +159.6 165 12.2 +159.65 180 13 +159.7 174 12.6 +159.75 180 13 +159.8 179 12.6 +159.85 189 13.3 +159.9 185 12.9 +159.95 151 11.8 +160 176 12.5 +160.05 165 12.3 +160.1 163 12 +160.15 184 13 +160.2 157 11.7 +160.25 166 12.3 +160.3 160 11.8 +160.35 183 12.9 +160.4 167 12.1 +160.45 180 12.8 +160.5 183 12.6 +160.55 163 12.2 +160.6 178 12.4 +160.65 179 12.8 +160.7 161 11.8 +160.75 168 12.4 +160.8 173 12.3 +160.85 202 13.6 +160.9 145 11.3 +160.95 162 12.2 +161 180 12.5 +161.05 186 13.1 +161.1 166 12.1 +161.15 177 12.7 +161.2 194 13.1 +161.25 177 12.8 +161.3 178 12.5 +161.35 190 13.2 +161.4 160 11.9 +161.45 173 12.6 +161.5 191 12.9 +161.55 161 12.2 +161.6 181 12.6 +161.65 152 11.8 +161.7 195 13 +161.75 171 12.5 +161.8 188 12.8 +161.85 164 12.2 +161.9 185 12.7 +161.95 173 12.6 +162 162 11.9 +162.05 166 12.3 +162.1 201 13.2 +162.15 173 12.6 +162.2 172 12.2 +162.25 181 12.8 +162.3 159 11.7 +162.35 185 13 +162.4 170 12.1 +162.45 200 13.5 +162.5 196 13 +162.55 176 12.6 +162.6 197 13 +162.65 176 12.6 +162.7 181 12.5 +162.75 176 12.6 +162.8 184 12.6 +162.85 179 12.7 +162.9 165 11.9 +162.95 146 11.5 +163 165 11.9 +163.05 151 11.7 +163.1 164 11.9 +163.15 179 12.8 +163.2 186 12.7 +163.25 182 13 +163.3 168 12.2 +163.35 193 13.5 +163.4 177 12.6 +163.45 180 13.1 +163.5 171 12.4 +163.55 207 14.1 +163.6 180 12.9 +163.65 159 12.4 +163.7 165 12.4 +163.75 178 13.2 +163.8 150 11.8 +163.85 177 13.2 +163.9 174 12.8 +163.95 180 13.4 +164 184 13.2 +164.05 166 13.6 +164.1 182 13.9 +164.15 188 15.6 +164.2 186 15 +164.25 152 15.2 +164.3 200 16.9 +164.35 177 18 +164.4 202 18.5 +164.45 178 20.4 +164.5 153 18 +164.55 197 25.3 +164.6 153 20.7 +164.65 173 30.1 +164.7 187 27.9 +164.75 175 38.2 +164.8 168 30.9 +164.85 109 41.2 diff --git a/docs/docs/verification/fullprof/pd-neut-cwl_pv-march_lbco/lbco.pcr b/docs/docs/verification/fullprof/pd-neut-cwl_pv-march_lbco/lbco.pcr new file mode 100644 index 000000000..6af100db2 --- /dev/null +++ b/docs/docs/verification/fullprof/pd-neut-cwl_pv-march_lbco/lbco.pcr @@ -0,0 +1,65 @@ +COMM La0.5Ba0.5CoO3 +! Current global Chi2 (Bragg contrib.) = 1.413 +! Files => DAT-file: lbco.dat, PCR-file: lbco +!Job Npr Nph Nba Nex Nsc Nor Dum Iwg Ilo Ias Res Ste Nre Cry Uni Cor Opt Aut + 1 7 1 5 2 0 1 0 0 0 0 0 0 0 0 0 0 1 1 +! +!Ipr Ppl Ioc Mat Pcr Ls1 Ls2 Ls3 NLI Prf Ins Rpa Sym Hkl Fou Sho Ana + 2 2 1 0 1 0 4 0 0 2 10 1 1 0 0 1 1 +! +! Lambda1 Lambda2 Ratio Bkpos Wdt Cthm muR AsyLim Rpolarz 2nd-muR -> Patt# 1 + 1.494000 1.494000 0.00000 77.275 30.000 0.0000 0.0000 160.00 0.0000 0.0000 +! +!NCY Eps R_at R_an R_pr R_gl Thmin Step Thmax PSD Sent0 +500 0.05 0.20 0.20 0.20 0.20 10.3000 0.050018 164.8500 0.000 0.000 +! +!2Theta/TOF/E(Kev) Background for Pattern# 1 + 10.0000 169.0000 0.00 + 30.0000 164.1000 0.00 + 50.0000 166.9100 0.00 + 110.0000 175.2700 0.00 + 165.0000 174.5600 0.00 +! +! Excluded regions (LowT HighT) for Pattern# 1 + 0.00 5.00 + 165.00 180.00 +! +! + 0 !Number of refined parameters +! +! Zero Code SyCos Code SySin Code Lambda Code MORE ->Patt# 1 + 0.62040 0.0 0.00000 0.0 0.00000 0.0 0.000000 0.00 0 +!------------------------------------------------------------------------------- +! Data for PHASE number: 1 ==> Current R_Bragg for Pattern# 1: 0.0000 +!------------------------------------------------------------------------------- +LBCO +! +!Nat Dis Ang Pr1 Pr2 Pr3 Jbt Irf Isy Str Furth ATZ Nvk Npr More + 4 0 0 0.0 0.0 1.0 0 0 0 0 0 244.138 0 7 0 +! +! +P m -3 m <--Space group symbol +!Atom Typ X Y Z Biso Occ In Fin N_t Spc /Codes +La La 0.00000 0.00000 0.00000 0.57511 0.01042 0 0 0 0 + 0.00 0.00 0.00 0.00 0.00 +Ba Ba 0.00000 0.00000 0.00000 0.57511 0.01042 0 0 0 0 + 0.00 0.00 0.00 0.00 0.00 +Co Co 0.50000 0.50000 0.50000 0.26023 0.02083 0 0 0 0 + 0.00 0.00 0.00 0.00 0.00 +O O 0.00000 0.50000 0.50000 1.36662 0.06116 0 0 0 0 + 0.00 0.00 0.00 0.00 0.00 +!-------> Profile Parameters for Pattern # 1 ----> Phase # 1 +! Scale Shape1 Bov Str1 Str2 Str3 Strain-Model + 9.405870 0.00000 0.00000 0.00000 0.00000 0.00000 0 + 0.00000 0.000 0.000 0.000 0.000 0.000 +! U V W X Y GauSiz LorSiz Size-Model + 0.081547 -0.115345 0.121125 0.000000 0.083038 0.000000 0.000000 0 + 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +! a b c alpha beta gamma # Cell Info + 3.890790 3.890790 3.890790 90.000000 90.000000 90.000000 #box -0.25 1.25 -0.15 1.15 -0.15 1.15 + 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 +! Pref1 Pref2 Asy1 Asy2 Asy3 Asy4 S_L D_L + 1.20000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +! 2Th1/TOF1 2Th2/TOF2 Pattern to plot + 10.300 155.450 1 diff --git a/docs/docs/verification/fullprof/pd-neut-cwl_pv-march_lbco/lbco.prf b/docs/docs/verification/fullprof/pd-neut-cwl_pv-march_lbco/lbco.prf new file mode 100644 index 000000000..9c28f8b37 --- /dev/null +++ b/docs/docs/verification/fullprof/pd-neut-cwl_pv-march_lbco/lbco.prf @@ -0,0 +1,3166 @@ +IGOR +WAVES TwoTheta, Iobs, Icalc, Diff +BEGIN + 10.300 190.00 168.93 21.07 + 10.350 182.00 168.91 13.09 + 10.400 166.00 168.90 -2.90 + 10.450 203.00 168.89 34.11 + 10.500 156.00 168.88 -12.88 + 10.550 190.00 168.87 21.13 + 10.600 175.00 168.85 6.15 + 10.650 161.00 168.84 -7.84 + 10.700 187.00 168.83 18.17 + 10.750 166.00 168.82 -2.82 + 10.800 171.00 168.80 2.20 + 10.850 177.00 168.79 8.21 + 10.900 159.00 168.78 -9.78 + 10.950 184.00 168.77 15.23 + 11.000 160.00 168.76 -8.76 + 11.050 182.00 168.74 13.26 + 11.100 167.00 168.73 -1.73 + 11.150 169.00 168.72 0.28 + 11.200 186.00 168.71 17.29 + 11.250 167.00 168.69 -1.69 + 11.300 169.00 168.68 0.32 + 11.350 159.00 168.67 -9.67 + 11.400 170.00 168.66 1.34 + 11.450 179.00 168.64 10.36 + 11.500 178.00 168.63 9.37 + 11.550 188.00 168.62 19.38 + 11.600 176.00 168.61 7.39 + 11.650 196.00 168.60 27.40 + 11.700 182.00 168.58 13.42 + 11.750 183.00 168.57 14.43 + 11.800 195.00 168.56 26.44 + 11.850 144.00 168.55 -24.55 + 11.900 178.00 168.54 9.46 + 11.950 175.00 168.52 6.48 + 12.000 200.00 168.51 31.49 + 12.050 157.00 168.50 -11.50 + 12.100 195.00 168.49 26.51 + 12.150 164.00 168.48 -4.48 + 12.200 188.00 168.46 19.54 + 12.250 168.00 168.45 -0.45 + 12.300 191.00 168.44 22.56 + 12.350 178.00 168.43 9.57 + 12.400 182.00 168.41 13.59 + 12.450 174.00 168.40 5.60 + 12.500 171.00 168.39 2.61 + 12.550 174.00 168.38 5.62 + 12.600 184.00 168.37 15.63 + 12.650 164.00 168.35 -4.35 + 12.700 166.00 168.34 -2.34 + 12.750 177.00 168.33 8.67 + 12.800 174.00 168.32 5.68 + 12.850 187.00 168.30 18.70 + 12.900 183.00 168.29 14.71 + 12.950 187.00 168.28 18.72 + 13.000 175.00 168.27 6.73 + 13.050 165.00 168.26 -3.26 + 13.100 177.00 168.24 8.76 + 13.150 182.00 168.23 13.77 + 13.200 195.00 168.22 26.78 + 13.250 163.00 168.21 -5.21 + 13.300 180.00 168.19 11.81 + 13.350 171.00 168.18 2.82 + 13.400 182.00 168.17 13.83 + 13.450 179.00 168.16 10.84 + 13.500 161.00 168.15 -7.15 + 13.550 156.00 168.13 -12.13 + 13.600 197.00 168.12 28.88 + 13.650 167.00 168.11 -1.11 + 13.700 180.00 168.10 11.90 + 13.750 182.00 168.08 13.92 + 13.800 176.00 168.07 7.93 + 13.850 153.00 168.06 -15.06 + 13.900 179.00 168.05 10.95 + 13.950 156.00 168.04 -12.04 + 14.000 187.00 168.02 18.98 + 14.050 170.00 168.01 1.99 + 14.100 185.00 168.00 17.00 + 14.150 180.00 167.99 12.01 + 14.200 167.00 167.97 -0.97 + 14.250 159.00 167.96 -8.96 + 14.300 152.00 167.95 -15.95 + 14.350 173.00 167.94 5.06 + 14.400 169.00 167.93 1.07 + 14.450 185.00 167.91 17.09 + 14.500 168.00 167.90 0.10 + 14.550 193.00 167.89 25.11 + 14.600 177.00 167.88 9.12 + 14.650 161.00 167.87 -6.87 + 14.700 180.00 167.85 12.15 + 14.750 165.00 167.84 -2.84 + 14.800 178.00 167.83 10.17 + 14.850 157.00 167.82 -10.82 + 14.900 163.00 167.80 -4.80 + 14.950 143.00 167.79 -24.79 + 15.000 155.00 167.78 -12.78 + 15.050 168.00 167.77 0.23 + 15.100 160.00 167.76 -7.76 + 15.150 155.00 167.74 -12.74 + 15.200 203.00 167.73 35.27 + 15.250 164.00 167.72 -3.72 + 15.300 158.00 167.71 -9.71 + 15.350 152.00 167.69 -15.69 + 15.400 173.00 167.68 5.32 + 15.450 160.00 167.67 -7.67 + 15.500 172.00 167.66 4.34 + 15.550 164.00 167.65 -3.65 + 15.600 163.00 167.63 -4.63 + 15.650 173.00 167.62 5.38 + 15.700 177.00 167.61 9.39 + 15.750 184.00 167.60 16.40 + 15.800 173.00 167.59 5.41 + 15.850 182.00 167.57 14.43 + 15.900 156.00 167.56 -11.56 + 15.950 152.00 167.55 -15.55 + 16.000 201.00 167.54 33.46 + 16.050 156.00 167.52 -11.52 + 16.100 169.00 167.51 1.49 + 16.150 178.00 167.50 10.50 + 16.200 150.00 167.49 -17.49 + 16.250 163.00 167.48 -4.48 + 16.300 165.00 167.46 -2.46 + 16.350 160.00 167.45 -7.45 + 16.400 171.00 167.44 3.56 + 16.450 168.00 167.43 0.57 + 16.500 159.00 167.41 -8.41 + 16.550 166.00 167.40 -1.40 + 16.600 156.00 167.39 -11.39 + 16.650 156.00 167.38 -11.38 + 16.700 154.00 167.37 -13.37 + 16.750 173.00 167.35 5.65 + 16.800 173.00 167.34 5.66 + 16.850 161.00 167.33 -6.33 + 16.900 177.00 167.32 9.68 + 16.950 159.00 167.31 -8.31 + 17.000 162.00 167.29 -5.29 + 17.050 166.00 167.28 -1.28 + 17.100 167.00 167.27 -0.27 + 17.150 166.00 167.26 -1.26 + 17.200 168.00 167.25 0.75 + 17.250 188.00 167.23 20.77 + 17.300 165.00 167.22 -2.22 + 17.350 171.00 167.21 3.79 + 17.400 171.00 167.20 3.80 + 17.450 162.00 167.19 -5.19 + 17.500 161.00 167.17 -6.17 + 17.550 177.00 167.16 9.84 + 17.600 176.00 167.15 8.85 + 17.650 175.00 167.14 7.86 + 17.700 140.00 167.12 -27.12 + 17.750 177.00 167.11 9.89 + 17.800 150.00 167.10 -17.10 + 17.850 154.00 167.09 -13.09 + 17.900 138.00 167.08 -29.08 + 17.950 161.00 167.06 -6.06 + 18.000 171.00 167.05 3.95 + 18.050 144.00 167.04 -23.04 + 18.100 148.00 167.03 -19.03 + 18.150 169.00 167.02 1.98 + 18.200 162.00 167.01 -5.01 + 18.250 171.00 166.99 4.01 + 18.300 155.00 166.98 -11.98 + 18.350 143.00 166.97 -23.97 + 18.400 162.00 166.96 -4.96 + 18.450 177.00 166.95 10.05 + 18.500 158.00 166.93 -8.93 + 18.550 142.00 166.92 -24.92 + 18.600 153.00 166.91 -13.91 + 18.650 169.00 166.90 2.10 + 18.700 144.00 166.89 -22.89 + 18.750 171.00 166.87 4.13 + 18.800 159.00 166.86 -7.86 + 18.850 169.00 166.85 2.15 + 18.900 163.00 166.84 -3.84 + 18.950 154.00 166.83 -12.83 + 19.000 146.00 166.82 -20.82 + 19.050 154.00 166.80 -12.80 + 19.100 156.00 166.79 -10.79 + 19.150 195.00 166.78 28.22 + 19.200 154.00 166.77 -12.77 + 19.250 167.00 166.76 0.24 + 19.300 156.00 166.75 -10.75 + 19.350 148.00 166.73 -18.73 + 19.400 173.00 166.72 6.28 + 19.450 155.00 166.71 -11.71 + 19.500 146.00 166.70 -20.70 + 19.550 173.00 166.69 6.31 + 19.600 179.00 166.68 12.32 + 19.650 152.00 166.67 -14.67 + 19.700 182.00 166.65 15.35 + 19.750 183.00 166.64 16.36 + 19.800 150.00 166.63 -16.63 + 19.850 155.00 166.62 -11.62 + 19.900 158.00 166.61 -8.61 + 19.950 161.00 166.60 -5.60 + 20.000 164.00 166.59 -2.59 + 20.050 166.00 166.58 -0.58 + 20.100 172.00 166.57 5.43 + 20.150 148.00 166.56 -18.56 + 20.200 161.00 166.55 -5.55 + 20.250 160.00 166.53 -6.53 + 20.300 185.00 166.52 18.48 + 20.350 165.00 166.51 -1.51 + 20.400 155.00 166.50 -11.50 + 20.450 172.00 166.49 5.51 + 20.500 170.00 166.48 3.52 + 20.550 180.00 166.47 13.53 + 20.600 184.00 166.47 17.53 + 20.650 164.00 166.46 -2.46 + 20.700 177.00 166.45 10.55 + 20.750 150.00 166.44 -16.44 + 20.800 176.00 166.43 9.57 + 20.850 174.00 166.42 7.58 + 20.900 173.00 166.41 6.59 + 20.950 167.00 166.41 0.59 + 21.000 158.00 166.40 -8.40 + 21.050 174.00 166.39 7.61 + 21.100 160.00 166.39 -6.39 + 21.150 174.00 166.38 7.62 + 21.200 160.00 166.37 -6.37 + 21.250 182.00 166.37 15.63 + 21.300 155.00 166.37 -11.37 + 21.350 182.00 166.36 15.64 + 21.400 157.00 166.36 -9.36 + 21.450 174.00 166.36 7.64 + 21.500 173.00 166.38 6.62 + 21.550 165.00 166.38 -1.38 + 21.600 182.00 166.39 15.61 + 21.650 176.00 166.39 9.61 + 21.700 150.00 166.40 -16.40 + 21.750 162.00 166.42 -4.42 + 21.800 172.00 166.43 5.57 + 21.850 162.00 166.45 -4.45 + 21.900 171.00 166.48 4.52 + 21.950 165.00 166.51 -1.51 + 22.000 180.00 166.56 13.44 + 22.050 167.00 166.61 0.39 + 22.100 159.00 166.68 -7.68 + 22.150 159.00 166.78 -7.78 + 22.200 160.00 166.92 -6.92 + 22.250 174.00 167.16 6.84 + 22.300 175.00 167.60 7.40 + 22.350 172.00 168.43 3.57 + 22.400 176.00 169.95 6.05 + 22.450 140.00 172.58 -32.58 + 22.500 163.00 176.69 -13.69 + 22.550 180.00 182.44 -2.44 + 22.600 211.00 189.52 21.48 + 22.650 190.00 196.94 -6.94 + 22.700 179.00 203.05 -24.05 + 22.750 195.00 205.94 -10.94 + 22.800 198.00 204.46 -6.46 + 22.850 181.00 199.21 -18.21 + 22.900 203.00 192.01 10.99 + 22.950 193.00 184.65 8.35 + 23.000 155.00 178.35 -23.35 + 23.050 159.00 173.65 -14.65 + 23.100 184.00 170.54 13.46 + 23.150 145.00 168.66 -23.66 + 23.200 145.00 167.61 -22.61 + 23.250 179.00 167.05 11.95 + 23.300 185.00 166.73 18.27 + 23.350 168.00 166.54 1.46 + 23.400 185.00 166.40 18.60 + 23.450 170.00 166.30 3.70 + 23.500 174.00 166.22 7.78 + 23.550 164.00 166.15 -2.15 + 23.600 168.00 166.09 1.91 + 23.650 185.00 166.03 18.97 + 23.700 183.00 165.99 17.01 + 23.750 172.00 165.94 6.06 + 23.800 156.00 165.91 -9.91 + 23.850 182.00 165.87 16.13 + 23.900 182.00 165.84 16.16 + 23.950 149.00 165.81 -16.81 + 24.000 160.00 165.78 -5.78 + 24.050 168.00 165.76 2.24 + 24.100 178.00 165.73 12.27 + 24.150 169.00 165.71 3.29 + 24.200 172.00 165.69 6.31 + 24.250 170.00 165.67 4.33 + 24.300 161.00 165.65 -4.65 + 24.350 168.00 165.63 2.37 + 24.400 162.00 165.61 -3.61 + 24.450 157.00 165.59 -8.59 + 24.500 162.00 165.57 -3.57 + 24.550 159.00 165.56 -6.56 + 24.600 168.00 165.54 2.46 + 24.650 170.00 165.52 4.48 + 24.700 166.00 165.51 0.49 + 24.750 146.00 165.49 -19.49 + 24.800 154.00 165.48 -11.48 + 24.850 154.00 165.46 -11.46 + 24.900 198.00 165.45 32.55 + 24.950 195.00 165.43 29.57 + 25.000 148.00 165.42 -17.42 + 25.050 161.00 165.40 -4.40 + 25.100 160.00 165.39 -5.39 + 25.150 160.00 165.37 -5.37 + 25.200 149.00 165.36 -16.36 + 25.250 179.00 165.35 13.65 + 25.300 174.00 165.33 8.67 + 25.350 168.00 165.32 2.68 + 25.400 146.00 165.31 -19.31 + 25.450 160.00 165.29 -5.29 + 25.500 145.00 165.28 -20.28 + 25.550 151.00 165.27 -14.27 + 25.600 161.00 165.25 -4.25 + 25.650 187.00 165.24 21.76 + 25.700 154.00 165.23 -11.23 + 25.750 157.00 165.22 -8.22 + 25.800 169.00 165.20 3.80 + 25.850 181.00 165.19 15.81 + 25.900 156.00 165.18 -9.18 + 25.950 185.00 165.17 19.83 + 26.000 192.00 165.15 26.85 + 26.050 153.00 165.14 -12.14 + 26.100 149.00 165.13 -16.13 + 26.150 154.00 165.12 -11.12 + 26.200 152.00 165.10 -13.10 + 26.250 179.00 165.09 13.91 + 26.300 180.00 165.08 14.92 + 26.350 160.00 165.07 -5.07 + 26.400 174.00 165.06 8.94 + 26.450 145.00 165.04 -20.04 + 26.500 171.00 165.03 5.97 + 26.550 162.00 165.02 -3.02 + 26.600 154.00 165.01 -11.01 + 26.650 153.00 165.00 -12.00 + 26.700 162.00 164.99 -2.99 + 26.750 160.00 164.97 -4.97 + 26.800 150.00 164.96 -14.96 + 26.850 189.00 164.95 24.05 + 26.900 168.00 164.94 3.06 + 26.950 144.00 164.93 -20.93 + 27.000 147.00 164.92 -17.92 + 27.050 155.00 164.91 -9.91 + 27.100 174.00 164.89 9.11 + 27.150 169.00 164.88 4.12 + 27.200 174.00 164.87 9.13 + 27.250 164.00 164.86 -0.86 + 27.300 146.00 164.85 -18.85 + 27.350 149.00 164.84 -15.84 + 27.400 155.00 164.83 -9.83 + 27.450 155.00 164.82 -9.82 + 27.500 168.00 164.81 3.19 + 27.550 131.00 164.80 -33.80 + 27.600 159.00 164.78 -5.78 + 27.650 181.00 164.77 16.23 + 27.700 146.00 164.76 -18.76 + 27.750 188.00 164.75 23.25 + 27.800 162.00 164.74 -2.74 + 27.850 161.00 164.73 -3.73 + 27.900 176.00 164.72 11.28 + 27.950 152.00 164.71 -12.71 + 28.000 170.00 164.70 5.30 + 28.050 152.00 164.69 -12.69 + 28.100 158.00 164.68 -6.68 + 28.150 168.00 164.67 3.33 + 28.200 161.00 164.66 -3.66 + 28.250 184.00 164.65 19.35 + 28.300 166.00 164.64 1.36 + 28.350 193.00 164.63 28.37 + 28.400 157.00 164.63 -7.63 + 28.450 167.00 164.62 2.38 + 28.500 158.00 164.61 -6.61 + 28.550 135.00 164.60 -29.60 + 28.600 150.00 164.59 -14.59 + 28.650 167.00 164.58 2.42 + 28.700 161.00 164.57 -3.57 + 28.750 157.00 164.57 -7.57 + 28.800 153.00 164.56 -11.56 + 28.850 161.00 164.55 -3.55 + 28.900 163.00 164.54 -1.54 + 28.950 133.00 164.54 -31.54 + 29.000 169.00 164.75 4.25 + 29.050 162.00 164.74 -2.74 + 29.100 161.00 164.74 -3.74 + 29.150 163.00 164.73 -1.73 + 29.200 144.00 164.73 -20.73 + 29.250 178.00 164.73 13.27 + 29.300 161.00 164.72 -3.72 + 29.350 141.00 164.72 -23.72 + 29.400 169.00 164.72 4.28 + 29.450 160.00 164.72 -4.72 + 29.500 177.00 164.72 12.28 + 29.550 174.00 164.72 9.28 + 29.600 157.00 164.72 -7.72 + 29.650 176.00 164.72 11.28 + 29.700 179.00 164.72 14.28 + 29.750 166.00 164.72 1.28 + 29.800 162.00 164.73 -2.73 + 29.850 147.00 164.73 -17.73 + 29.900 152.00 164.74 -12.74 + 29.950 171.00 164.74 6.26 + 30.000 178.00 164.75 13.25 + 30.050 208.00 164.78 43.22 + 30.100 178.00 164.81 13.19 + 30.150 149.00 164.84 -15.84 + 30.200 181.00 164.87 16.13 + 30.250 162.00 164.91 -2.91 + 30.300 177.00 164.94 12.06 + 30.350 165.00 164.98 0.02 + 30.400 177.00 165.02 11.98 + 30.450 158.00 165.07 -7.07 + 30.500 157.00 165.12 -8.12 + 30.550 163.00 165.17 -2.17 + 30.600 144.00 165.22 -21.22 + 30.650 156.00 165.28 -9.28 + 30.700 176.00 165.35 10.65 + 30.750 179.00 165.42 13.58 + 30.800 174.00 165.50 8.50 + 30.850 182.00 165.58 16.42 + 30.900 161.00 165.68 -4.68 + 30.950 166.00 165.78 0.22 + 31.000 168.00 165.90 2.10 + 31.050 153.00 166.03 -13.03 + 31.100 156.00 166.19 -10.19 + 31.150 174.00 166.36 7.64 + 31.200 167.00 166.55 0.45 + 31.250 192.00 166.78 25.22 + 31.300 154.00 167.05 -13.05 + 31.350 166.00 167.36 -1.36 + 31.400 169.00 167.74 1.26 + 31.450 185.00 168.19 16.81 + 31.500 165.00 168.77 -3.77 + 31.550 163.00 169.53 -6.53 + 31.600 173.00 170.66 2.34 + 31.650 169.00 172.54 -3.54 + 31.700 188.00 175.98 12.02 + 31.750 195.00 182.44 12.56 + 31.800 195.00 194.15 0.85 + 31.850 221.00 213.77 7.23 + 31.900 229.00 243.35 -14.35 + 31.950 302.00 282.76 19.24 + 32.000 327.00 328.04 -1.04 + 32.050 380.00 370.72 9.28 + 32.100 358.00 398.75 -40.75 + 32.150 394.00 401.34 -7.34 + 32.200 373.00 377.36 -4.36 + 32.250 362.00 336.42 25.58 + 32.300 306.00 290.87 15.13 + 32.350 276.00 249.99 26.01 + 32.400 237.00 218.53 18.47 + 32.450 203.00 197.24 5.76 + 32.500 178.00 184.31 -6.31 + 32.550 199.00 177.10 21.90 + 32.600 167.00 173.26 -6.26 + 32.650 185.00 171.20 13.80 + 32.700 180.00 170.00 10.00 + 32.750 178.00 169.21 8.79 + 32.800 145.00 168.64 -23.64 + 32.850 176.00 168.19 7.81 + 32.900 177.00 167.83 9.17 + 32.950 182.00 167.54 14.46 + 33.000 167.00 167.29 -0.29 + 33.050 152.00 167.08 -15.08 + 33.100 144.00 166.91 -22.91 + 33.150 170.00 166.76 3.24 + 33.200 156.00 166.63 -10.63 + 33.250 154.00 166.52 -12.52 + 33.300 180.00 166.43 13.57 + 33.350 176.00 166.35 9.65 + 33.400 183.00 166.28 16.72 + 33.450 162.00 166.22 -4.22 + 33.500 180.00 166.17 13.83 + 33.550 165.00 166.13 -1.13 + 33.600 174.00 166.09 7.91 + 33.650 179.00 166.06 12.94 + 33.700 152.00 166.03 -14.03 + 33.750 182.00 166.01 15.99 + 33.800 184.00 165.99 18.01 + 33.850 166.00 165.98 0.02 + 33.900 182.00 165.96 16.04 + 33.950 162.00 165.96 -3.96 + 34.000 174.00 165.95 8.05 + 34.050 153.00 165.95 -12.95 + 34.100 182.00 165.95 16.05 + 34.150 180.00 165.95 14.05 + 34.200 167.00 165.95 1.05 + 34.250 173.00 165.96 7.04 + 34.300 153.00 165.96 -12.96 + 34.350 160.00 165.97 -5.97 + 34.400 180.00 165.98 14.02 + 34.450 168.00 165.99 2.01 + 34.500 167.00 166.01 0.99 + 34.550 176.00 166.02 9.98 + 34.600 165.00 166.08 -1.08 + 34.650 174.00 166.09 7.91 + 34.700 161.00 166.11 -5.11 + 34.750 178.00 166.13 11.87 + 34.800 170.00 166.15 3.85 + 34.850 166.00 166.18 -0.18 + 34.900 173.00 166.20 6.80 + 34.950 158.00 166.22 -8.22 + 35.000 166.00 166.25 -0.25 + 35.050 170.00 166.28 3.72 + 35.100 162.00 166.30 -4.30 + 35.150 183.00 166.33 16.67 + 35.200 176.00 166.37 9.63 + 35.250 171.00 166.40 4.60 + 35.300 174.00 166.43 7.57 + 35.350 179.00 166.47 12.53 + 35.400 176.00 166.50 9.50 + 35.450 193.00 166.76 26.24 + 35.500 180.00 166.81 13.19 + 35.550 188.00 166.85 21.15 + 35.600 177.00 166.89 10.11 + 35.650 176.00 166.94 9.06 + 35.700 171.00 166.99 4.01 + 35.750 185.00 167.04 17.96 + 35.800 178.00 167.10 10.90 + 35.850 152.00 167.15 -15.15 + 35.900 160.00 167.21 -7.21 + 35.950 187.00 167.27 19.73 + 36.000 167.00 167.33 -0.33 + 36.050 181.00 167.40 13.60 + 36.100 166.00 167.46 -1.46 + 36.150 165.00 167.53 -2.53 + 36.200 170.00 167.61 2.39 + 36.250 197.00 167.68 29.32 + 36.300 179.00 167.76 11.24 + 36.350 172.00 167.85 4.15 + 36.400 181.00 167.94 13.06 + 36.450 174.00 168.03 5.97 + 36.500 162.00 168.13 -6.13 + 36.550 166.00 168.23 -2.23 + 36.600 158.00 168.33 -10.33 + 36.650 199.00 168.44 30.56 + 36.700 188.00 168.56 19.44 + 36.750 177.00 168.69 8.31 + 36.800 167.00 168.82 -1.82 + 36.850 156.00 168.95 -12.95 + 36.900 174.00 169.10 4.90 + 36.950 176.00 169.25 6.75 + 37.000 152.00 169.41 -17.41 + 37.050 191.00 169.58 21.42 + 37.100 151.00 169.77 -18.77 + 37.150 202.00 169.96 32.04 + 37.200 191.00 170.16 20.84 + 37.250 161.00 170.38 -9.38 + 37.300 199.00 170.62 28.38 + 37.350 175.00 170.87 4.13 + 37.400 146.00 171.13 -25.13 + 37.450 181.00 171.42 9.58 + 37.500 221.00 171.73 49.27 + 37.550 194.00 172.06 21.94 + 37.600 158.00 172.42 -14.42 + 37.650 171.00 172.80 -1.80 + 37.700 172.00 173.22 -1.22 + 37.750 168.00 173.68 -5.68 + 37.800 192.00 174.17 17.83 + 37.850 185.00 174.71 10.29 + 37.900 193.00 175.30 17.70 + 37.950 178.00 175.95 2.05 + 38.000 195.00 176.66 18.34 + 38.050 175.00 177.44 -2.44 + 38.100 178.00 178.32 -0.32 + 38.150 173.00 179.28 -6.28 + 38.200 195.00 180.37 14.63 + 38.250 194.00 181.58 12.42 + 38.300 191.00 182.95 8.05 + 38.350 178.00 184.49 -6.49 + 38.400 184.00 186.25 -2.25 + 38.450 186.00 188.27 -2.27 + 38.500 202.00 190.59 11.41 + 38.550 200.00 193.28 6.72 + 38.600 210.00 196.42 13.58 + 38.650 198.00 200.13 -2.13 + 38.700 225.00 204.53 20.47 + 38.750 209.00 209.83 -0.83 + 38.800 229.00 216.33 12.67 + 38.850 197.00 224.55 -27.55 + 38.900 220.00 235.63 -15.63 + 38.950 215.00 252.18 -37.18 + 39.000 242.00 280.17 -38.17 + 39.050 340.00 331.95 8.05 + 39.100 441.00 429.72 11.28 + 39.150 654.00 606.70 47.30 + 39.200 962.00 901.01 60.99 + 39.250 1477.00 1339.10 137.90 + 39.300 2012.00 1910.95 101.05 + 39.350 2634.00 2547.68 86.32 + 39.400 3115.00 3113.61 1.39 + 39.450 3467.00 3428.47 38.53 + 39.500 3532.00 3359.22 172.78 + 39.550 3337.00 2937.56 399.44 + 39.600 2595.00 2328.16 266.84 + 39.650 1943.00 1701.78 241.22 + 39.700 1251.00 1171.61 79.39 + 39.750 828.00 784.36 43.64 + 39.800 525.00 534.57 -9.57 + 39.850 377.00 389.22 -12.22 + 39.900 294.00 310.55 -16.55 + 39.950 233.00 268.95 -35.95 + 40.000 233.00 245.93 -12.93 + 40.050 253.00 231.74 21.26 + 40.100 253.00 221.88 31.12 + 40.150 213.00 214.37 -1.37 + 40.200 196.00 208.37 -12.37 + 40.250 222.00 203.43 18.57 + 40.300 172.00 199.32 -27.32 + 40.350 218.00 195.86 22.14 + 40.400 206.00 192.92 13.08 + 40.450 195.00 190.40 4.60 + 40.500 209.00 188.22 20.78 + 40.550 192.00 186.34 5.66 + 40.600 197.00 184.69 12.31 + 40.650 188.00 183.24 4.76 + 40.700 202.00 181.97 20.03 + 40.750 208.00 180.84 27.16 + 40.800 184.00 179.84 4.16 + 40.850 177.00 178.94 -1.94 + 40.900 202.00 178.14 23.86 + 40.950 198.00 177.42 20.58 + 41.000 203.00 176.77 26.23 + 41.050 193.00 176.18 16.82 + 41.100 188.00 175.65 12.35 + 41.150 211.00 175.17 35.83 + 41.200 189.00 174.73 14.27 + 41.250 200.00 174.33 25.67 + 41.300 198.00 173.97 24.03 + 41.350 203.00 173.64 29.36 + 41.400 197.00 173.33 23.67 + 41.450 190.00 173.06 16.94 + 41.500 212.00 172.80 39.20 + 41.550 185.00 172.57 12.43 + 41.600 228.00 172.36 55.64 + 41.650 167.00 172.16 -5.16 + 41.700 207.00 171.98 35.02 + 41.750 187.00 171.82 15.18 + 41.800 190.00 171.67 18.33 + 41.850 192.00 171.54 20.46 + 41.900 185.00 171.42 13.58 + 41.950 161.00 171.30 -10.30 + 42.000 187.00 171.20 15.80 + 42.050 191.00 171.11 19.89 + 42.100 159.00 171.03 -12.03 + 42.150 170.00 170.96 -0.96 + 42.200 182.00 170.90 11.10 + 42.250 186.00 170.85 15.15 + 42.300 192.00 170.80 21.20 + 42.350 178.00 170.76 7.24 + 42.400 186.00 170.73 15.27 + 42.450 180.00 170.71 9.29 + 42.500 178.00 170.70 7.30 + 42.550 182.00 170.69 11.31 + 42.600 179.00 170.69 8.31 + 42.650 203.00 170.69 32.31 + 42.700 191.00 170.71 20.29 + 42.750 207.00 170.73 36.27 + 42.800 183.00 170.76 12.24 + 42.850 180.00 170.78 9.22 + 42.900 191.00 170.82 20.18 + 42.950 187.00 170.87 16.13 + 43.000 184.00 170.93 13.07 + 43.050 182.00 170.99 11.01 + 43.100 178.00 171.07 6.93 + 43.150 169.00 171.15 -2.15 + 43.200 158.00 171.24 -13.24 + 43.250 180.00 171.35 8.65 + 43.300 174.00 171.46 2.54 + 43.350 184.00 171.58 12.42 + 43.400 178.00 171.72 6.28 + 43.450 180.00 171.87 8.13 + 43.500 144.00 172.03 -28.03 + 43.550 169.00 172.20 -3.20 + 43.600 177.00 172.39 4.61 + 43.650 156.00 172.60 -16.60 + 43.700 148.00 172.82 -24.82 + 43.750 159.00 173.07 -14.07 + 43.800 195.00 173.33 21.67 + 43.850 186.00 173.62 12.38 + 43.900 180.00 173.94 6.06 + 43.950 192.00 174.28 17.72 + 44.000 186.00 174.65 11.35 + 44.050 180.00 175.06 4.94 + 44.100 174.00 175.51 -1.51 + 44.150 181.00 176.00 5.00 + 44.200 178.00 176.55 1.45 + 44.250 189.00 177.14 11.86 + 44.300 206.00 177.80 28.20 + 44.350 183.00 178.53 4.47 + 44.400 161.00 179.34 -18.34 + 44.450 170.00 180.25 -10.25 + 44.500 203.00 181.26 21.74 + 44.550 168.00 182.40 -14.40 + 44.600 199.00 183.68 15.32 + 44.650 192.00 185.13 6.87 + 44.700 192.00 186.78 5.22 + 44.750 200.00 188.68 11.32 + 44.800 206.00 190.86 15.14 + 44.850 193.00 193.38 -0.38 + 44.900 188.00 196.33 -8.33 + 44.950 200.00 199.80 0.20 + 45.000 193.00 203.92 -10.92 + 45.050 203.00 208.86 -5.86 + 45.100 212.00 214.87 -2.87 + 45.150 197.00 222.35 -25.35 + 45.200 219.00 232.12 -13.12 + 45.250 219.00 245.99 -26.99 + 45.300 226.00 268.18 -42.18 + 45.350 282.00 307.96 -25.96 + 45.400 353.00 383.21 -30.21 + 45.450 469.00 523.16 -54.16 + 45.500 741.00 765.79 -24.79 + 45.550 1176.00 1145.16 30.84 + 45.600 1577.00 1668.16 -91.16 + 45.650 2122.00 2288.86 -166.86 + 45.700 2726.00 2892.91 -166.91 + 45.750 2990.00 3305.82 -315.82 + 45.800 2991.00 3360.39 -369.39 + 45.850 2796.00 3030.81 -234.81 + 45.900 2372.00 2459.29 -87.29 + 45.950 1752.00 1828.93 -76.93 + 46.000 1209.00 1272.45 -63.45 + 46.050 824.00 853.35 -29.35 + 46.100 512.00 576.64 -64.64 + 46.150 353.00 412.96 -59.96 + 46.200 273.00 323.66 -50.66 + 46.250 259.00 276.55 -17.55 + 46.300 233.00 250.82 -17.82 + 46.350 220.00 235.28 -15.28 + 46.400 228.00 224.65 3.35 + 46.450 231.00 216.64 14.36 + 46.500 218.00 210.28 7.72 + 46.550 210.00 205.09 4.91 + 46.600 212.00 200.77 11.23 + 46.650 187.00 197.13 -10.13 + 46.700 207.00 194.05 12.95 + 46.750 212.00 191.41 20.59 + 46.800 188.00 189.13 -1.13 + 46.850 178.00 187.16 -9.16 + 46.900 186.00 185.44 0.56 + 46.950 192.00 183.93 8.07 + 47.000 192.00 182.59 9.41 + 47.050 186.00 181.41 4.59 + 47.100 208.00 180.36 27.64 + 47.150 199.00 179.42 19.58 + 47.200 165.00 178.57 -13.57 + 47.250 212.00 177.81 34.19 + 47.300 191.00 177.12 13.88 + 47.350 185.00 176.49 8.51 + 47.400 171.00 175.92 -4.92 + 47.450 176.00 175.41 0.59 + 47.500 179.00 174.93 4.07 + 47.550 187.00 174.50 12.50 + 47.600 181.00 174.10 6.90 + 47.650 173.00 173.73 -0.73 + 47.700 167.00 173.39 -6.39 + 47.750 182.00 173.08 8.92 + 47.800 171.00 172.79 -1.79 + 47.850 185.00 172.52 12.48 + 47.900 177.00 172.27 4.73 + 47.950 154.00 172.03 -18.03 + 48.000 200.00 171.82 28.18 + 48.050 177.00 171.61 5.39 + 48.100 184.00 171.42 12.58 + 48.150 166.00 171.24 -5.24 + 48.200 181.00 171.08 9.92 + 48.250 208.00 170.92 37.08 + 48.300 186.00 170.78 15.22 + 48.350 164.00 170.64 -6.64 + 48.400 196.00 170.51 25.49 + 48.450 169.00 170.39 -1.39 + 48.500 173.00 170.27 2.73 + 48.550 200.00 170.16 29.84 + 48.600 163.00 170.06 -7.06 + 48.650 173.00 169.96 3.04 + 48.700 187.00 169.87 17.13 + 48.750 177.00 169.78 7.22 + 48.800 200.00 169.70 30.30 + 48.850 171.00 169.62 1.38 + 48.900 192.00 169.55 22.45 + 48.950 178.00 169.48 8.52 + 49.000 169.00 169.41 -0.41 + 49.050 160.00 169.35 -9.35 + 49.100 182.00 169.29 12.71 + 49.150 173.00 169.23 3.77 + 49.200 170.00 169.18 0.82 + 49.250 181.00 169.13 11.87 + 49.300 170.00 169.08 0.92 + 49.350 164.00 169.03 -5.03 + 49.400 166.00 168.99 -2.99 + 49.450 174.00 168.95 5.05 + 49.500 173.00 168.91 4.09 + 49.550 137.00 168.87 -31.87 + 49.600 166.00 168.83 -2.83 + 49.650 194.00 168.80 25.20 + 49.700 160.00 168.77 -8.77 + 49.750 152.00 168.74 -16.74 + 49.800 180.00 168.71 11.29 + 49.850 160.00 168.68 -8.68 + 49.900 149.00 168.66 -19.66 + 49.950 172.00 168.64 3.36 + 50.000 170.00 168.40 1.60 + 50.050 175.00 168.38 6.62 + 50.100 162.00 168.37 -6.37 + 50.150 168.00 168.35 -0.35 + 50.200 186.00 168.34 17.66 + 50.250 179.00 168.33 10.67 + 50.300 165.00 168.32 -3.32 + 50.350 155.00 168.31 -13.31 + 50.400 170.00 168.31 1.69 + 50.450 162.00 168.31 -6.31 + 50.500 157.00 168.31 -11.31 + 50.550 173.00 168.31 4.69 + 50.600 149.00 168.32 -19.32 + 50.650 167.00 168.33 -1.33 + 50.700 165.00 168.35 -3.35 + 50.750 157.00 168.38 -11.38 + 50.800 177.00 168.41 8.59 + 50.850 187.00 168.46 18.54 + 50.900 155.00 168.52 -13.52 + 50.950 194.00 168.62 25.38 + 51.000 147.00 168.79 -21.79 + 51.050 169.00 169.11 -0.11 + 51.100 166.00 169.72 -3.72 + 51.150 193.00 170.84 22.16 + 51.200 168.00 172.77 -4.77 + 51.250 188.00 175.71 12.29 + 51.300 182.00 179.64 2.36 + 51.350 180.00 184.12 -4.12 + 51.400 177.00 188.19 -11.19 + 51.450 188.00 190.52 -2.52 + 51.500 187.00 190.08 -3.08 + 51.550 178.00 187.08 -9.08 + 51.600 177.00 182.75 -5.75 + 51.650 184.00 178.35 5.65 + 51.700 172.00 174.68 -2.68 + 51.750 188.00 172.04 15.96 + 51.800 194.00 170.37 23.63 + 51.850 179.00 169.42 9.58 + 51.900 176.00 168.91 7.09 + 51.950 180.00 168.64 11.36 + 52.000 169.00 168.48 0.52 + 52.050 178.00 168.38 9.62 + 52.100 165.00 168.31 -3.31 + 52.150 149.00 168.26 -19.26 + 52.200 168.00 168.22 -0.22 + 52.250 157.00 168.18 -11.18 + 52.300 151.00 168.15 -17.15 + 52.350 181.00 168.13 12.87 + 52.400 172.00 168.11 3.89 + 52.450 178.00 168.09 9.91 + 52.500 179.00 168.07 10.93 + 52.550 171.00 168.06 2.94 + 52.600 129.00 168.05 -39.05 + 52.650 180.00 168.04 11.96 + 52.700 154.00 168.04 -14.04 + 52.750 182.00 168.03 13.97 + 52.800 166.00 168.03 -2.03 + 52.850 156.00 168.02 -12.02 + 52.900 164.00 168.02 -4.02 + 52.950 166.00 168.02 -2.02 + 53.000 176.00 168.01 7.99 + 53.050 182.00 168.01 13.99 + 53.100 173.00 168.01 4.99 + 53.150 160.00 168.01 -8.01 + 53.200 169.00 168.02 0.98 + 53.250 162.00 168.02 -6.02 + 53.300 164.00 168.02 -4.02 + 53.350 165.00 168.02 -3.02 + 53.400 177.00 168.03 8.97 + 53.450 173.00 168.03 4.97 + 53.500 158.00 168.03 -10.03 + 53.550 164.00 168.04 -4.04 + 53.600 175.00 168.04 6.96 + 53.650 166.00 168.05 -2.05 + 53.700 161.00 168.05 -7.05 + 53.750 167.00 168.06 -1.06 + 53.800 136.00 168.07 -32.07 + 53.850 167.00 168.07 -1.07 + 53.900 152.00 168.08 -16.08 + 53.950 159.00 168.09 -9.09 + 54.000 172.00 168.10 3.90 + 54.050 179.00 168.11 10.89 + 54.100 169.00 168.12 0.88 + 54.150 165.00 168.13 -3.13 + 54.200 166.00 168.14 -2.14 + 54.250 162.00 168.15 -6.15 + 54.300 175.00 168.16 6.84 + 54.350 162.00 168.18 -6.18 + 54.400 145.00 168.19 -23.19 + 54.450 148.00 168.21 -20.21 + 54.500 157.00 168.22 -11.22 + 54.550 176.00 168.24 7.76 + 54.600 162.00 168.26 -6.26 + 54.650 153.00 168.27 -15.27 + 54.700 178.00 168.30 9.70 + 54.750 147.00 168.32 -21.32 + 54.800 146.00 168.34 -22.34 + 54.850 170.00 168.36 1.64 + 54.900 155.00 168.39 -13.39 + 54.950 170.00 168.42 1.58 + 55.000 142.00 168.45 -26.45 + 55.050 154.00 168.48 -14.48 + 55.100 150.00 168.52 -18.52 + 55.150 145.00 168.56 -23.56 + 55.200 151.00 168.60 -17.60 + 55.250 162.00 168.65 -6.65 + 55.300 153.00 168.70 -15.70 + 55.350 170.00 168.76 1.24 + 55.400 153.00 168.82 -15.82 + 55.450 156.00 168.89 -12.89 + 55.500 163.00 168.97 -5.97 + 55.550 149.00 169.05 -20.05 + 55.600 135.00 169.15 -34.15 + 55.650 158.00 169.26 -11.26 + 55.700 144.00 169.39 -25.39 + 55.750 152.00 169.53 -17.53 + 55.800 165.00 169.70 -4.70 + 55.850 164.00 169.89 -5.89 + 55.900 175.00 170.12 4.88 + 55.950 150.00 170.39 -20.39 + 56.000 168.00 170.72 -2.72 + 56.050 159.00 171.11 -12.11 + 56.100 187.00 171.60 15.40 + 56.150 170.00 172.01 -2.01 + 56.200 159.00 172.90 -13.90 + 56.250 148.00 174.53 -26.53 + 56.300 159.00 177.04 -18.04 + 56.350 174.00 181.75 -7.75 + 56.400 195.00 190.51 4.49 + 56.450 219.00 205.71 13.29 + 56.500 216.00 229.48 -13.48 + 56.550 271.00 262.16 8.84 + 56.600 337.00 300.66 36.34 + 56.650 417.00 337.44 79.56 + 56.700 390.00 361.12 28.88 + 56.750 414.00 361.44 52.56 + 56.800 388.00 338.26 49.74 + 56.850 317.00 301.68 15.32 + 56.900 307.00 263.13 43.87 + 56.950 250.00 230.27 19.73 + 57.000 205.00 206.29 -1.29 + 57.050 167.00 190.92 -23.92 + 57.100 179.00 182.05 -3.05 + 57.150 159.00 177.28 -18.28 + 57.200 170.00 174.76 -4.76 + 57.250 168.00 173.35 -5.35 + 57.300 180.00 172.46 7.54 + 57.350 144.00 171.84 -27.84 + 57.400 178.00 171.36 6.64 + 57.450 203.00 170.98 32.02 + 57.500 159.00 170.67 -11.67 + 57.550 165.00 170.42 -5.42 + 57.600 164.00 170.20 -6.20 + 57.650 135.00 170.02 -35.02 + 57.700 157.00 169.87 -12.87 + 57.750 162.00 169.74 -7.74 + 57.800 175.00 169.63 5.37 + 57.850 161.00 169.53 -8.53 + 57.900 174.00 169.45 4.55 + 57.950 187.00 169.37 17.63 + 58.000 164.00 169.31 -5.31 + 58.050 188.00 169.26 18.74 + 58.100 163.00 169.21 -6.21 + 58.150 177.00 169.17 7.83 + 58.200 181.00 169.13 11.87 + 58.250 156.00 169.10 -13.10 + 58.300 163.00 169.07 -6.07 + 58.350 190.00 169.05 20.95 + 58.400 162.00 169.03 -7.03 + 58.450 186.00 169.01 16.99 + 58.500 169.00 168.99 0.01 + 58.550 160.00 168.98 -8.98 + 58.600 171.00 168.97 2.03 + 58.650 160.00 168.96 -8.96 + 58.700 174.00 168.95 5.05 + 58.750 163.00 168.94 -5.94 + 58.800 180.00 168.94 11.06 + 58.850 176.00 168.93 7.07 + 58.900 174.00 168.93 5.07 + 58.950 177.00 168.93 8.07 + 59.000 186.00 168.93 17.07 + 59.050 157.00 168.93 -11.93 + 59.100 188.00 168.93 19.07 + 59.150 162.00 168.93 -6.93 + 59.200 160.00 168.94 -8.94 + 59.250 196.00 168.94 27.06 + 59.300 178.00 168.95 9.05 + 59.350 188.00 168.95 19.05 + 59.400 161.00 168.96 -7.96 + 59.450 157.00 168.96 -11.96 + 59.500 183.00 168.97 14.03 + 59.550 169.00 168.98 0.02 + 59.600 150.00 168.98 -18.98 + 59.650 195.00 168.99 26.01 + 59.700 175.00 169.00 6.00 + 59.750 160.00 169.01 -9.01 + 59.800 168.00 169.02 -1.02 + 59.850 191.00 169.03 21.97 + 59.900 181.00 169.04 11.96 + 59.950 168.00 169.05 -1.05 + 60.000 181.00 169.06 11.94 + 60.050 158.00 169.07 -11.07 + 60.100 160.00 169.09 -9.09 + 60.150 151.00 169.10 -18.10 + 60.200 171.00 169.11 1.89 + 60.250 167.00 169.12 -2.12 + 60.300 160.00 169.14 -9.14 + 60.350 157.00 169.15 -12.15 + 60.400 172.00 169.17 2.83 + 60.450 140.00 169.18 -29.18 + 60.500 172.00 169.20 2.80 + 60.550 150.00 169.21 -19.21 + 60.600 179.00 169.23 9.77 + 60.650 153.00 169.24 -16.24 + 60.700 170.00 169.26 0.74 + 60.750 184.00 169.28 14.72 + 60.800 158.00 169.30 -11.30 + 60.850 177.00 169.31 7.69 + 60.900 159.00 169.33 -10.33 + 60.950 157.00 169.35 -12.35 + 61.000 168.00 169.37 -1.37 + 61.050 154.00 169.39 -15.39 + 61.100 170.00 169.41 0.59 + 61.150 147.00 169.43 -22.43 + 61.200 161.00 169.45 -8.45 + 61.250 175.00 169.47 5.53 + 61.300 170.00 169.50 0.50 + 61.350 153.00 169.52 -16.52 + 61.400 165.00 169.54 -4.54 + 61.450 164.00 169.57 -5.57 + 61.500 174.00 169.59 4.41 + 61.550 160.00 169.62 -9.62 + 61.600 188.00 169.64 18.36 + 61.650 182.00 169.67 12.33 + 61.700 197.00 169.70 27.30 + 61.750 163.00 169.72 -6.72 + 61.800 176.00 169.75 6.25 + 61.850 157.00 169.78 -12.78 + 61.900 166.00 169.81 -3.81 + 61.950 173.00 169.84 3.16 + 62.000 167.00 169.88 -2.88 + 62.050 175.00 169.91 5.09 + 62.100 143.00 169.94 -26.94 + 62.150 148.00 169.98 -21.98 + 62.200 178.00 170.01 7.99 + 62.250 180.00 170.05 9.95 + 62.300 141.00 170.09 -29.09 + 62.350 202.00 170.13 31.87 + 62.400 172.00 170.17 1.83 + 62.450 169.00 170.21 -1.21 + 62.500 143.00 170.26 -27.26 + 62.550 146.00 170.30 -24.30 + 62.600 169.00 170.35 -1.35 + 62.650 146.00 170.40 -24.40 + 62.700 156.00 170.45 -14.45 + 62.750 147.00 170.50 -23.50 + 62.800 158.00 170.55 -12.55 + 62.850 178.00 170.61 7.39 + 62.900 163.00 170.67 -7.67 + 62.950 168.00 170.73 -2.73 + 63.000 164.00 170.79 -6.79 + 63.050 180.00 170.86 9.14 + 63.100 189.00 170.92 18.08 + 63.150 164.00 170.99 -6.99 + 63.200 181.00 171.07 9.93 + 63.250 179.00 171.15 7.85 + 63.300 147.00 171.23 -24.23 + 63.350 179.00 171.31 7.69 + 63.400 150.00 171.40 -21.40 + 63.450 168.00 171.49 -3.49 + 63.500 156.00 171.59 -15.59 + 63.550 181.00 171.69 9.31 + 63.600 170.00 171.80 -1.80 + 63.650 181.00 171.91 9.09 + 63.700 184.00 172.03 11.97 + 63.750 153.00 172.15 -19.15 + 63.800 166.00 172.28 -6.28 + 63.850 166.00 172.42 -6.42 + 63.900 169.00 172.57 -3.57 + 63.950 175.00 172.72 2.28 + 64.000 157.00 172.89 -15.89 + 64.050 165.00 173.06 -8.06 + 64.100 169.00 173.25 -4.25 + 64.150 164.00 173.45 -9.45 + 64.200 181.00 173.66 7.34 + 64.250 189.00 173.88 15.12 + 64.300 179.00 174.12 4.88 + 64.350 157.00 174.38 -17.38 + 64.400 189.00 174.66 14.34 + 64.450 167.00 174.96 -7.96 + 64.500 178.00 175.28 2.72 + 64.550 144.00 175.62 -31.62 + 64.600 180.00 176.00 4.00 + 64.650 182.00 176.40 5.60 + 64.700 199.00 176.84 22.16 + 64.750 172.00 177.32 -5.32 + 64.800 191.00 177.85 13.15 + 64.850 166.00 178.42 -12.42 + 64.900 157.00 179.06 -22.06 + 64.950 197.00 179.75 17.25 + 65.000 204.00 180.52 23.48 + 65.050 183.00 181.38 1.62 + 65.100 189.00 182.33 6.67 + 65.150 189.00 183.41 5.59 + 65.200 170.00 184.61 -14.61 + 65.250 188.00 185.96 2.04 + 65.300 176.00 187.49 -11.49 + 65.350 172.00 189.24 -17.24 + 65.400 182.00 191.24 -9.24 + 65.450 205.00 193.56 11.44 + 65.500 191.00 196.25 -5.25 + 65.550 192.00 199.41 -7.41 + 65.600 190.00 203.14 -13.14 + 65.650 194.00 207.59 -13.59 + 65.700 212.00 212.96 -0.96 + 65.750 221.00 219.56 1.44 + 65.800 227.00 227.90 -0.90 + 65.850 227.00 239.03 -12.03 + 65.900 239.00 255.38 -16.38 + 65.950 261.00 282.46 -21.46 + 66.000 301.00 331.84 -30.84 + 66.050 409.00 424.54 -15.54 + 66.100 559.00 591.80 -32.80 + 66.150 820.00 868.93 -48.93 + 66.200 1276.00 1277.98 -1.98 + 66.250 1776.00 1803.73 -27.73 + 66.300 2322.00 2371.81 -49.81 + 66.350 2880.00 2841.17 38.83 + 66.400 3051.00 3035.53 15.47 + 66.450 2980.00 2860.47 119.53 + 66.500 2572.00 2401.59 170.41 + 66.550 1961.00 1834.70 126.30 + 66.600 1315.00 1304.20 10.80 + 66.650 919.00 887.87 31.13 + 66.700 548.00 603.92 -55.92 + 66.750 405.00 431.52 -26.52 + 66.800 299.00 335.66 -36.66 + 66.850 309.00 284.57 24.43 + 66.900 279.00 256.65 22.35 + 66.950 281.00 239.90 41.10 + 67.000 235.00 228.58 6.42 + 67.050 239.00 220.14 18.86 + 67.100 212.00 213.48 -1.48 + 67.150 228.00 208.06 19.94 + 67.200 231.00 203.58 27.42 + 67.250 198.00 199.82 -1.82 + 67.300 223.00 196.65 26.35 + 67.350 201.00 193.95 7.05 + 67.400 208.00 191.63 16.37 + 67.450 207.00 189.63 17.37 + 67.500 217.00 187.88 29.12 + 67.550 196.00 186.35 9.65 + 67.600 182.00 185.01 -3.01 + 67.650 182.00 183.82 -1.82 + 67.700 186.00 182.76 3.24 + 67.750 176.00 181.81 -5.81 + 67.800 192.00 180.97 11.03 + 67.850 215.00 180.21 34.79 + 67.900 178.00 179.52 -1.52 + 67.950 191.00 178.90 12.10 + 68.000 178.00 178.34 -0.34 + 68.050 185.00 177.82 7.18 + 68.100 171.00 177.36 -6.36 + 68.150 174.00 176.93 -2.93 + 68.200 193.00 176.53 16.47 + 68.250 182.00 176.17 5.83 + 68.300 178.00 175.84 2.16 + 68.350 196.00 175.53 20.47 + 68.400 178.00 175.25 2.75 + 68.450 173.00 174.98 -1.98 + 68.500 175.00 174.74 0.26 + 68.550 178.00 174.51 3.49 + 68.600 177.00 174.30 2.70 + 68.650 176.00 174.11 1.89 + 68.700 200.00 173.92 26.08 + 68.750 177.00 173.75 3.25 + 68.800 185.00 173.59 11.41 + 68.850 167.00 173.44 -6.44 + 68.900 158.00 173.30 -15.30 + 68.950 176.00 173.17 2.83 + 69.000 192.00 173.04 18.96 + 69.050 174.00 172.93 1.07 + 69.100 154.00 172.82 -18.82 + 69.150 153.00 172.71 -19.71 + 69.200 167.00 172.62 -5.62 + 69.250 168.00 172.53 -4.53 + 69.300 167.00 172.44 -5.44 + 69.350 163.00 172.56 -9.56 + 69.400 157.00 172.49 -15.49 + 69.450 185.00 172.42 12.58 + 69.500 151.00 172.35 -21.35 + 69.550 176.00 172.29 3.71 + 69.600 187.00 172.23 14.77 + 69.650 170.00 172.18 -2.18 + 69.700 164.00 172.13 -8.13 + 69.750 204.00 172.08 31.92 + 69.800 169.00 172.04 -3.04 + 69.850 191.00 172.00 19.00 + 69.900 177.00 171.96 5.04 + 69.950 157.00 171.93 -14.93 + 70.000 173.00 171.89 1.11 + 70.050 199.00 171.87 27.13 + 70.100 168.00 171.84 -3.84 + 70.150 191.00 171.82 19.18 + 70.200 165.00 171.81 -6.81 + 70.250 156.00 171.80 -15.80 + 70.300 163.00 171.79 -8.79 + 70.350 149.00 171.80 -22.80 + 70.400 199.00 171.81 27.19 + 70.450 158.00 171.85 -13.85 + 70.500 158.00 171.92 -13.92 + 70.550 150.00 172.07 -22.07 + 70.600 197.00 172.38 24.62 + 70.650 167.00 172.95 -5.95 + 70.700 180.00 173.90 6.10 + 70.750 187.00 175.34 11.66 + 70.800 190.00 177.21 12.79 + 70.850 169.00 179.28 -10.28 + 70.900 214.00 181.05 32.95 + 70.950 188.00 181.87 6.13 + 71.000 200.00 181.35 18.65 + 71.050 186.00 179.74 6.26 + 71.100 169.00 177.66 -8.66 + 71.150 166.00 175.68 -9.68 + 71.200 175.00 174.10 0.90 + 71.250 170.00 173.00 -3.00 + 71.300 191.00 172.32 18.68 + 71.350 185.00 171.94 13.06 + 71.400 191.00 171.73 19.27 + 71.450 181.00 171.61 9.39 + 71.500 188.00 171.54 16.46 + 71.550 164.00 171.49 -7.49 + 71.600 185.00 171.46 13.54 + 71.650 168.00 171.43 -3.43 + 71.700 168.00 171.40 -3.40 + 71.750 167.00 171.39 -4.39 + 71.800 158.00 171.37 -13.37 + 71.850 173.00 171.36 1.64 + 71.900 177.00 171.35 5.65 + 71.950 193.00 171.34 21.66 + 72.000 190.00 171.34 18.66 + 72.050 174.00 171.33 2.67 + 72.100 161.00 171.33 -10.33 + 72.150 147.00 171.33 -24.33 + 72.200 165.00 171.33 -6.33 + 72.250 188.00 171.33 16.67 + 72.300 172.00 171.33 0.67 + 72.350 176.00 171.33 4.67 + 72.400 167.00 171.33 -4.33 + 72.450 186.00 171.34 14.66 + 72.500 178.00 171.34 6.66 + 72.550 158.00 171.35 -13.35 + 72.600 168.00 171.36 -3.36 + 72.650 180.00 171.36 8.64 + 72.700 154.00 171.37 -17.37 + 72.750 162.00 171.38 -9.38 + 72.800 168.00 171.39 -3.39 + 72.850 194.00 171.40 22.60 + 72.900 164.00 171.42 -7.42 + 72.950 169.00 171.43 -2.43 + 73.000 160.00 171.44 -11.44 + 73.050 164.00 171.46 -7.46 + 73.100 171.00 171.47 -0.47 + 73.150 169.00 171.49 -2.49 + 73.200 167.00 171.51 -4.51 + 73.250 150.00 171.53 -21.53 + 73.300 173.00 171.55 1.45 + 73.350 183.00 171.57 11.43 + 73.400 169.00 171.60 -2.60 + 73.450 180.00 171.62 8.38 + 73.500 173.00 171.74 1.26 + 73.550 195.00 171.77 23.23 + 73.600 178.00 171.81 6.19 + 73.650 193.00 171.84 21.16 + 73.700 179.00 171.88 7.12 + 73.750 153.00 171.91 -18.91 + 73.800 169.00 171.96 -2.96 + 73.850 165.00 172.00 -7.00 + 73.900 172.00 172.05 -0.05 + 73.950 171.00 172.10 -1.10 + 74.000 178.00 172.16 5.84 + 74.050 180.00 172.22 7.78 + 74.100 168.00 172.29 -4.29 + 74.150 169.00 172.37 -3.37 + 74.200 190.00 172.45 17.55 + 74.250 170.00 172.54 -2.54 + 74.300 178.00 172.65 5.35 + 74.350 158.00 172.77 -14.77 + 74.400 185.00 172.90 12.10 + 74.450 181.00 173.05 7.95 + 74.500 173.00 173.22 -0.22 + 74.550 163.00 173.43 -10.43 + 74.600 184.00 173.66 10.34 + 74.650 181.00 173.94 7.06 + 74.700 192.00 174.28 17.72 + 74.750 166.00 174.69 -8.69 + 74.800 168.00 175.21 -7.21 + 74.850 200.00 175.91 24.09 + 74.900 188.00 176.98 11.02 + 74.950 190.00 178.79 11.21 + 75.000 211.00 182.08 28.92 + 75.050 172.00 188.11 -16.11 + 75.100 198.00 198.56 -0.56 + 75.150 230.00 215.07 14.93 + 75.200 264.00 238.20 25.80 + 75.250 227.00 266.27 -39.27 + 75.300 289.00 294.44 -5.44 + 75.350 290.00 314.69 -24.69 + 75.400 284.00 318.60 -34.60 + 75.450 250.00 304.24 -54.24 + 75.500 233.00 278.25 -45.25 + 75.550 239.00 249.42 -10.42 + 75.600 239.00 223.98 15.02 + 75.650 204.00 204.81 -0.81 + 75.700 178.00 192.13 -14.13 + 75.750 189.00 184.59 4.41 + 75.800 202.00 180.43 21.57 + 75.850 181.00 178.21 2.79 + 75.900 190.00 176.97 13.03 + 75.950 177.00 176.22 0.78 + 76.000 199.00 175.70 23.30 + 76.050 193.00 175.33 17.67 + 76.100 170.00 175.04 -5.04 + 76.150 170.00 174.81 -4.81 + 76.200 165.00 174.64 -9.64 + 76.250 192.00 174.50 17.50 + 76.300 171.00 174.39 -3.39 + 76.350 169.00 174.32 -5.32 + 76.400 168.00 174.26 -6.26 + 76.450 183.00 174.22 8.78 + 76.500 173.00 174.20 -1.20 + 76.550 178.00 174.20 3.80 + 76.600 175.00 173.98 1.02 + 76.650 191.00 174.00 17.00 + 76.700 166.00 174.03 -8.03 + 76.750 187.00 174.07 12.93 + 76.800 191.00 174.12 16.88 + 76.850 184.00 174.18 9.82 + 76.900 168.00 174.25 -6.25 + 76.950 177.00 174.33 2.67 + 77.000 205.00 174.41 30.59 + 77.050 188.00 174.51 13.49 + 77.100 166.00 174.61 -8.61 + 77.150 180.00 174.72 5.28 + 77.200 179.00 174.84 4.16 + 77.250 179.00 174.97 4.03 + 77.300 163.00 175.11 -12.11 + 77.350 188.00 175.27 12.73 + 77.400 169.00 175.43 -6.43 + 77.450 179.00 175.61 3.39 + 77.500 169.00 175.79 -6.79 + 77.550 201.00 176.00 25.00 + 77.600 184.00 176.22 7.78 + 77.650 187.00 176.45 10.55 + 77.700 207.00 176.71 30.29 + 77.750 170.00 176.98 -6.98 + 77.800 193.00 177.28 15.72 + 77.850 189.00 177.60 11.40 + 77.900 205.00 177.95 27.05 + 77.950 183.00 178.32 4.68 + 78.000 179.00 178.73 0.27 + 78.050 188.00 179.18 8.82 + 78.100 194.00 179.67 14.33 + 78.150 220.00 180.20 39.80 + 78.200 195.00 180.79 14.21 + 78.250 176.00 181.43 -5.43 + 78.300 208.00 182.15 25.85 + 78.350 185.00 182.94 2.06 + 78.400 217.00 183.82 33.18 + 78.450 203.00 184.80 18.20 + 78.500 200.00 185.91 14.09 + 78.550 196.00 187.15 8.85 + 78.600 197.00 188.55 8.45 + 78.650 217.00 190.15 26.85 + 78.700 179.00 191.98 -12.98 + 78.750 184.00 194.09 -10.09 + 78.800 187.00 196.53 -9.53 + 78.850 219.00 199.38 19.62 + 78.900 193.00 202.73 -9.73 + 78.950 214.00 206.72 7.28 + 79.000 207.00 211.50 -4.50 + 79.050 199.00 217.33 -18.33 + 79.100 224.00 224.60 -0.60 + 79.150 244.00 234.10 9.90 + 79.200 217.00 247.51 -30.51 + 79.250 266.00 268.63 -2.63 + 79.300 281.00 305.46 -24.46 + 79.350 425.00 372.83 52.17 + 79.400 527.00 494.01 32.99 + 79.450 735.00 697.58 37.42 + 79.500 1057.00 1006.98 50.02 + 79.550 1483.00 1422.53 60.47 + 79.600 1955.00 1902.84 52.16 + 79.650 2315.00 2353.14 -38.14 + 79.700 2552.00 2631.50 -79.50 + 79.750 2506.00 2615.08 -109.08 + 79.800 2261.00 2312.01 -51.01 + 79.850 1842.00 1852.71 -10.71 + 79.900 1328.00 1375.63 -47.63 + 79.950 911.00 970.05 -59.05 + 80.000 592.00 672.18 -80.18 + 80.050 430.00 478.42 -48.42 + 80.100 312.00 364.15 -52.15 + 80.150 284.00 300.89 -16.89 + 80.200 285.00 266.28 18.72 + 80.250 247.00 246.27 0.73 + 80.300 250.00 233.43 16.57 + 80.350 231.00 224.26 6.74 + 80.400 272.00 217.20 54.80 + 80.450 235.00 211.54 23.46 + 80.500 188.00 206.89 -18.89 + 80.550 223.00 203.02 19.98 + 80.600 218.00 199.77 18.23 + 80.650 221.00 197.01 23.99 + 80.700 210.00 194.66 15.34 + 80.750 199.00 192.63 6.37 + 80.800 207.00 190.87 16.13 + 80.850 208.00 189.35 18.65 + 80.900 178.00 188.01 -10.01 + 80.950 194.00 186.84 7.16 + 81.000 202.00 185.80 16.20 + 81.050 226.00 184.88 41.12 + 81.100 209.00 184.07 24.93 + 81.150 194.00 183.35 10.65 + 81.200 179.00 182.70 -3.70 + 81.250 183.00 182.12 0.88 + 81.300 187.00 181.61 5.39 + 81.350 198.00 181.14 16.86 + 81.400 198.00 180.73 17.27 + 81.450 209.00 180.36 28.64 + 81.500 187.00 180.05 6.95 + 81.550 211.00 179.76 31.24 + 81.600 198.00 179.50 18.50 + 81.650 164.00 179.27 -15.27 + 81.700 200.00 179.07 20.93 + 81.750 212.00 178.90 33.10 + 81.800 197.00 178.75 18.25 + 81.850 191.00 178.62 12.38 + 81.900 195.00 178.52 16.48 + 81.950 217.00 178.44 38.56 + 82.000 189.00 178.39 10.61 + 82.050 182.00 178.35 3.65 + 82.100 174.00 178.34 -4.34 + 82.150 182.00 178.35 3.65 + 82.200 199.00 178.38 20.62 + 82.250 179.00 178.43 0.57 + 82.300 197.00 178.51 18.49 + 82.350 228.00 178.62 49.38 + 82.400 170.00 178.75 -8.75 + 82.450 203.00 178.92 24.08 + 82.500 232.00 179.11 52.89 + 82.550 178.00 179.34 -1.34 + 82.600 216.00 179.61 36.39 + 82.650 205.00 179.93 25.07 + 82.700 185.00 180.30 4.70 + 82.750 212.00 180.72 31.28 + 82.800 199.00 181.21 17.79 + 82.850 169.00 181.78 -12.78 + 82.900 165.00 182.43 -17.43 + 82.950 203.00 183.19 19.81 + 83.000 215.00 184.08 30.92 + 83.050 199.00 185.11 13.89 + 83.100 200.00 186.32 13.68 + 83.150 174.00 187.76 -13.76 + 83.200 192.00 189.47 2.53 + 83.250 206.00 191.52 14.48 + 83.300 191.00 194.01 -3.01 + 83.350 203.00 197.10 5.90 + 83.400 210.00 201.05 8.95 + 83.450 194.00 206.46 -12.46 + 83.500 245.00 214.59 30.41 + 83.550 242.00 228.18 13.82 + 83.600 255.00 252.54 2.46 + 83.650 310.00 296.51 13.49 + 83.700 408.00 372.10 35.90 + 83.750 498.00 491.40 6.60 + 83.800 729.00 659.99 69.01 + 83.850 934.00 868.59 65.41 + 83.900 1121.00 1086.50 34.50 + 83.950 1320.00 1259.08 60.92 + 84.000 1476.00 1321.55 154.45 + 84.050 1276.00 1244.12 31.88 + 84.100 1129.00 1063.13 65.87 + 84.150 887.00 843.93 43.07 + 84.200 643.00 638.66 4.34 + 84.250 490.00 475.43 14.57 + 84.300 343.00 361.42 -18.42 + 84.350 284.00 289.97 -5.97 + 84.400 263.00 248.70 14.30 + 84.450 229.00 225.87 3.13 + 84.500 235.00 213.04 21.96 + 84.550 246.00 205.27 40.73 + 84.600 205.00 200.03 4.97 + 84.650 217.00 196.14 20.86 + 84.700 217.00 193.08 23.92 + 84.750 197.00 190.59 6.41 + 84.800 195.00 188.53 6.47 + 84.850 232.00 186.80 45.20 + 84.900 182.00 185.33 -3.33 + 84.950 192.00 184.08 7.92 + 85.000 172.00 183.00 -11.00 + 85.050 191.00 182.07 8.93 + 85.100 200.00 181.26 18.74 + 85.150 186.00 180.54 5.46 + 85.200 190.00 179.91 10.09 + 85.250 211.00 179.35 31.65 + 85.300 184.00 178.86 5.14 + 85.350 180.00 178.41 1.59 + 85.400 182.00 178.02 3.98 + 85.450 184.00 177.66 6.34 + 85.500 175.00 177.33 -2.33 + 85.550 176.00 177.04 -1.04 + 85.600 166.00 176.77 -10.77 + 85.650 180.00 176.53 3.47 + 85.700 195.00 176.29 18.71 + 85.750 183.00 176.09 6.91 + 85.800 182.00 175.90 6.10 + 85.850 168.00 175.73 -7.73 + 85.900 177.00 175.57 1.43 + 85.950 190.00 175.42 14.58 + 86.000 178.00 175.29 2.71 + 86.050 180.00 175.16 4.84 + 86.100 181.00 175.04 5.96 + 86.150 177.00 174.93 2.07 + 86.200 171.00 174.83 -3.83 + 86.250 193.00 174.74 18.26 + 86.300 181.00 174.65 6.35 + 86.350 180.00 174.57 5.43 + 86.400 198.00 174.49 23.51 + 86.450 177.00 174.42 2.58 + 86.500 161.00 174.35 -13.35 + 86.550 166.00 174.29 -8.29 + 86.600 176.00 174.23 1.77 + 86.650 190.00 174.17 15.83 + 86.700 185.00 174.12 10.88 + 86.750 173.00 174.07 -1.07 + 86.800 176.00 174.02 1.98 + 86.850 159.00 173.98 -14.98 + 86.900 188.00 173.94 14.06 + 86.950 199.00 173.90 25.10 + 87.000 180.00 173.87 6.13 + 87.050 164.00 173.83 -9.83 + 87.100 180.00 173.80 6.20 + 87.150 190.00 173.77 16.23 + 87.200 179.00 173.75 5.25 + 87.250 177.00 173.72 3.28 + 87.300 183.00 173.70 9.30 + 87.350 174.00 173.68 0.32 + 87.400 164.00 173.66 -9.66 + 87.450 165.00 173.65 -8.65 + 87.500 185.00 173.63 11.37 + 87.550 191.00 173.62 17.38 + 87.600 181.00 173.61 7.39 + 87.650 143.00 173.61 -30.61 + 87.700 170.00 173.62 -3.62 + 87.750 150.00 173.63 -23.63 + 87.800 187.00 173.67 13.33 + 87.850 181.00 173.76 7.24 + 87.900 171.00 173.92 -2.92 + 87.950 179.00 174.19 4.81 + 88.000 146.00 174.61 -28.61 + 88.050 175.00 175.18 -0.18 + 88.100 182.00 175.86 6.14 + 88.150 176.00 176.52 -0.52 + 88.200 164.00 176.99 -12.99 + 88.250 152.00 177.08 -25.08 + 88.300 188.00 176.73 11.27 + 88.350 152.00 176.11 -24.11 + 88.400 172.00 175.40 -3.40 + 88.450 140.00 174.76 -34.76 + 88.500 176.00 174.26 1.74 + 88.550 168.00 173.92 -5.92 + 88.600 197.00 173.70 23.30 + 88.650 190.00 173.57 16.43 + 88.700 176.00 173.50 2.50 + 88.750 167.00 173.46 -6.46 + 88.800 182.00 173.44 8.56 + 88.850 175.00 173.42 1.58 + 88.900 154.00 173.41 -19.41 + 88.950 168.00 173.40 -5.40 + 89.000 187.00 173.39 13.61 + 89.050 163.00 173.39 -10.39 + 89.100 173.00 173.38 -0.38 + 89.150 161.00 173.38 -12.38 + 89.200 170.00 173.38 -3.38 + 89.250 178.00 173.38 4.62 + 89.300 174.00 173.44 0.56 + 89.350 172.00 173.44 -1.44 + 89.400 167.00 173.45 -6.45 + 89.450 168.00 173.45 -5.45 + 89.500 164.00 173.46 -9.46 + 89.550 183.00 173.46 9.54 + 89.600 141.00 173.47 -32.47 + 89.650 173.00 173.48 -0.48 + 89.700 190.00 173.49 16.51 + 89.750 180.00 173.50 6.50 + 89.800 162.00 173.51 -11.51 + 89.850 166.00 173.52 -7.52 + 89.900 164.00 173.54 -9.54 + 89.950 166.00 173.55 -7.55 + 90.000 170.00 173.56 -3.56 + 90.050 176.00 173.58 2.42 + 90.100 181.00 173.39 7.61 + 90.150 175.00 173.41 1.59 + 90.200 161.00 173.44 -12.44 + 90.250 170.00 173.46 -3.46 + 90.300 166.00 173.48 -7.48 + 90.350 175.00 173.51 1.49 + 90.400 171.00 173.54 -2.54 + 90.450 172.00 173.57 -1.57 + 90.500 183.00 173.60 9.40 + 90.550 165.00 173.64 -8.64 + 90.600 181.00 173.68 7.32 + 90.650 168.00 173.72 -5.72 + 90.700 179.00 173.76 5.24 + 90.750 157.00 173.81 -16.81 + 90.800 172.00 173.86 -1.86 + 90.850 187.00 173.92 13.08 + 90.900 181.00 173.98 7.02 + 90.950 163.00 174.05 -11.05 + 91.000 163.00 174.12 -11.12 + 91.050 166.00 174.20 -8.20 + 91.100 161.00 174.29 -13.29 + 91.150 167.00 174.39 -7.39 + 91.200 148.00 174.50 -26.50 + 91.250 175.00 174.62 0.38 + 91.300 195.00 174.76 20.24 + 91.350 181.00 174.92 6.08 + 91.400 173.00 175.10 -2.10 + 91.450 160.00 175.30 -15.30 + 91.500 180.00 175.54 4.46 + 91.550 183.00 175.81 7.19 + 91.600 156.00 176.12 -20.12 + 91.650 163.00 176.49 -13.49 + 91.700 175.00 176.93 -1.93 + 91.750 189.00 177.46 11.54 + 91.800 181.00 178.12 2.88 + 91.850 186.00 178.95 7.05 + 91.900 184.00 180.09 3.91 + 91.950 187.00 181.79 5.21 + 92.000 191.00 184.58 6.42 + 92.050 203.00 189.46 13.54 + 92.100 194.00 197.98 -3.98 + 92.150 237.00 212.25 24.75 + 92.200 242.00 234.34 7.66 + 92.250 307.00 265.30 41.70 + 92.300 299.00 303.79 -4.79 + 92.350 340.00 345.00 -5.00 + 92.400 357.00 380.09 -23.09 + 92.450 354.00 397.60 -43.60 + 92.500 370.00 389.96 -19.96 + 92.550 375.00 360.65 14.35 + 92.600 303.00 320.66 -17.66 + 92.650 264.00 280.26 -16.26 + 92.700 243.00 245.93 -2.93 + 92.750 207.00 220.26 -13.26 + 92.800 199.00 203.05 -4.05 + 92.850 180.00 192.47 -12.47 + 92.900 202.00 186.35 15.65 + 92.950 188.00 182.88 5.12 + 93.000 183.00 180.83 2.17 + 93.050 170.00 179.52 -9.52 + 93.100 180.00 178.60 1.40 + 93.150 182.00 177.89 4.11 + 93.200 186.00 177.33 8.67 + 93.250 196.00 176.87 19.13 + 93.300 177.00 176.49 0.51 + 93.350 198.00 176.16 21.84 + 93.400 182.00 175.89 6.11 + 93.450 183.00 175.65 7.35 + 93.500 184.00 175.45 8.55 + 93.550 181.00 175.28 5.72 + 93.600 190.00 175.13 14.87 + 93.650 176.00 174.99 1.01 + 93.700 197.00 174.88 22.12 + 93.750 174.00 174.77 -0.77 + 93.800 159.00 174.68 -15.68 + 93.850 171.00 174.60 -3.60 + 93.900 159.00 174.53 -15.53 + 93.950 170.00 174.47 -4.47 + 94.000 172.00 174.41 -2.41 + 94.050 159.00 174.36 -15.36 + 94.100 160.00 174.31 -14.31 + 94.150 173.00 174.27 -1.27 + 94.200 147.00 174.24 -27.24 + 94.250 143.00 174.20 -31.20 + 94.300 150.00 174.18 -24.18 + 94.350 155.00 174.15 -19.15 + 94.400 160.00 174.12 -14.12 + 94.450 155.00 174.10 -19.10 + 94.500 176.00 174.08 1.92 + 94.550 198.00 173.97 24.03 + 94.600 179.00 173.96 5.04 + 94.650 161.00 173.95 -12.95 + 94.700 175.00 173.93 1.07 + 94.750 157.00 173.93 -16.93 + 94.800 173.00 173.92 -0.92 + 94.850 168.00 173.91 -5.91 + 94.900 171.00 173.90 -2.90 + 94.950 173.00 173.90 -0.90 + 95.000 183.00 173.90 9.10 + 95.050 148.00 173.89 -25.89 + 95.100 160.00 173.89 -13.89 + 95.150 171.00 173.89 -2.89 + 95.200 167.00 173.89 -6.89 + 95.250 195.00 173.89 21.11 + 95.300 175.00 173.89 1.11 + 95.350 200.00 173.89 26.11 + 95.400 176.00 173.90 2.10 + 95.450 175.00 173.90 1.10 + 95.500 194.00 173.90 20.10 + 95.550 190.00 173.91 16.09 + 95.600 154.00 173.91 -19.91 + 95.650 166.00 173.92 -7.92 + 95.700 164.00 173.92 -9.92 + 95.750 166.00 173.93 -7.93 + 95.800 162.00 173.93 -11.93 + 95.850 183.00 173.94 9.06 + 95.900 149.00 173.95 -24.95 + 95.950 171.00 173.96 -2.96 + 96.000 165.00 173.96 -8.96 + 96.050 181.00 173.97 7.03 + 96.100 188.00 173.98 14.02 + 96.150 184.00 173.99 10.01 + 96.200 162.00 174.00 -12.00 + 96.250 163.00 174.01 -11.01 + 96.300 165.00 174.02 -9.02 + 96.350 183.00 174.03 8.97 + 96.400 182.00 174.04 7.96 + 96.450 156.00 174.06 -18.06 + 96.500 159.00 174.07 -15.07 + 96.550 139.00 174.08 -35.08 + 96.600 165.00 174.09 -9.09 + 96.650 164.00 174.11 -10.11 + 96.700 184.00 174.12 9.88 + 96.750 159.00 174.14 -15.14 + 96.800 159.00 174.15 -15.15 + 96.850 155.00 174.17 -19.17 + 96.900 162.00 174.20 -12.20 + 96.950 157.00 174.21 -17.21 + 97.000 160.00 174.23 -14.23 + 97.050 168.00 174.25 -6.25 + 97.100 168.00 174.27 -6.27 + 97.150 151.00 174.29 -23.29 + 97.200 162.00 174.31 -12.31 + 97.250 163.00 174.33 -11.33 + 97.300 166.00 174.35 -8.35 + 97.350 161.00 174.37 -13.37 + 97.400 158.00 174.39 -16.39 + 97.450 151.00 174.41 -23.41 + 97.500 163.00 174.44 -11.44 + 97.550 179.00 174.46 4.54 + 97.600 166.00 174.49 -8.49 + 97.650 155.00 174.52 -19.52 + 97.700 160.00 174.54 -14.54 + 97.750 152.00 174.57 -22.57 + 97.800 184.00 174.60 9.40 + 97.850 175.00 174.63 0.37 + 97.900 161.00 174.67 -13.67 + 97.950 166.00 174.70 -8.70 + 98.000 150.00 174.74 -24.74 + 98.050 179.00 174.77 4.23 + 98.100 184.00 174.81 9.19 + 98.150 151.00 174.85 -23.85 + 98.200 173.00 174.90 -1.90 + 98.250 164.00 174.94 -10.94 + 98.300 178.00 174.99 3.01 + 98.350 176.00 175.04 0.96 + 98.400 162.00 175.09 -13.09 + 98.450 173.00 175.14 -2.14 + 98.500 154.00 175.20 -21.20 + 98.550 184.00 175.26 8.74 + 98.600 142.00 175.32 -33.32 + 98.650 184.00 175.39 8.61 + 98.700 156.00 175.46 -19.46 + 98.750 177.00 175.54 1.46 + 98.800 163.00 175.62 -12.62 + 98.850 173.00 175.71 -2.71 + 98.900 180.00 175.80 4.20 + 98.950 181.00 175.90 5.10 + 99.000 165.00 176.00 -11.00 + 99.050 177.00 176.12 0.88 + 99.100 155.00 176.24 -21.24 + 99.150 147.00 176.37 -29.37 + 99.200 163.00 176.52 -13.52 + 99.250 172.00 176.67 -4.67 + 99.300 145.00 176.84 -31.84 + 99.350 156.00 177.02 -21.02 + 99.400 161.00 177.22 -16.22 + 99.450 189.00 177.44 11.56 + 99.500 182.00 177.68 4.32 + 99.550 172.00 177.94 -5.94 + 99.600 176.00 178.24 -2.24 + 99.650 166.00 178.56 -12.56 + 99.700 190.00 178.93 11.07 + 99.750 154.00 179.33 -25.33 + 99.800 198.00 179.79 18.21 + 99.850 152.00 180.31 -28.31 + 99.900 160.00 180.89 -20.89 + 99.950 174.00 181.56 -7.56 + 100.000 187.00 182.34 4.66 + 100.050 178.00 183.23 -5.23 + 100.100 149.00 184.27 -35.27 + 100.150 171.00 185.50 -14.50 + 100.200 185.00 186.96 -1.96 + 100.250 207.00 188.73 18.27 + 100.300 184.00 190.93 -6.93 + 100.350 187.00 193.83 -6.83 + 100.400 231.00 197.91 33.09 + 100.450 226.00 204.20 21.80 + 100.500 203.00 214.57 -11.57 + 100.550 214.00 232.15 -18.15 + 100.600 279.00 261.41 17.59 + 100.650 319.00 307.79 11.21 + 100.700 397.00 375.66 21.34 + 100.750 435.00 466.44 -31.44 + 100.800 539.00 575.33 -36.33 + 100.850 665.00 689.14 -24.14 + 100.900 724.00 785.38 -61.38 + 100.950 723.00 835.67 -112.67 + 101.000 783.00 820.59 -37.59 + 101.050 719.00 746.35 -27.35 + 101.100 585.00 638.95 -53.95 + 101.150 465.00 525.12 -60.12 + 101.200 371.00 423.27 -52.27 + 101.250 328.00 342.56 -14.56 + 101.300 277.00 284.77 -7.77 + 101.350 248.00 246.77 1.23 + 101.400 209.00 223.38 -14.38 + 101.450 221.00 209.52 11.48 + 101.500 198.00 201.29 -3.29 + 101.550 203.00 196.17 6.83 + 101.600 188.00 192.72 -4.72 + 101.650 207.00 190.19 16.81 + 101.700 195.00 188.22 6.78 + 101.750 170.00 186.61 -16.61 + 101.800 192.00 185.28 6.72 + 101.850 172.00 184.15 -12.15 + 101.900 185.00 183.20 1.80 + 101.950 183.00 182.38 0.62 + 102.000 211.00 181.67 29.33 + 102.050 147.00 181.05 -34.05 + 102.100 176.00 180.51 -4.51 + 102.150 186.00 180.04 5.96 + 102.200 171.00 179.62 -8.62 + 102.250 169.00 179.25 -10.25 + 102.300 192.00 178.92 13.08 + 102.350 215.00 178.62 36.38 + 102.400 146.00 178.36 -32.36 + 102.450 169.00 178.12 -9.12 + 102.500 188.00 177.91 10.09 + 102.550 175.00 177.71 -2.71 + 102.600 165.00 177.54 -12.54 + 102.650 184.00 177.38 6.62 + 102.700 172.00 177.23 -5.23 + 102.750 179.00 177.10 1.90 + 102.800 163.00 176.97 -13.97 + 102.850 167.00 176.86 -9.86 + 102.900 179.00 176.76 2.24 + 102.950 171.00 176.66 -5.66 + 103.000 181.00 176.58 4.42 + 103.050 171.00 176.50 -5.50 + 103.100 180.00 176.42 3.58 + 103.150 173.00 176.36 -3.36 + 103.200 167.00 176.29 -9.29 + 103.250 186.00 176.23 9.77 + 103.300 176.00 176.18 -0.18 + 103.350 191.00 176.13 14.87 + 103.400 170.00 176.08 -6.08 + 103.450 167.00 176.02 -9.02 + 103.500 165.00 175.98 -10.98 + 103.550 182.00 175.94 6.06 + 103.600 173.00 175.91 -2.91 + 103.650 186.00 175.88 10.12 + 103.700 161.00 175.85 -14.85 + 103.750 166.00 175.82 -9.82 + 103.800 157.00 175.80 -18.80 + 103.850 170.00 175.78 -5.78 + 103.900 183.00 175.76 7.24 + 103.950 179.00 175.74 3.26 + 104.000 164.00 175.72 -11.72 + 104.050 169.00 175.70 -6.70 + 104.100 161.00 175.69 -14.69 + 104.150 156.00 175.68 -19.68 + 104.200 163.00 175.67 -12.67 + 104.250 174.00 175.66 -1.66 + 104.300 161.00 175.65 -14.65 + 104.350 169.00 175.80 -6.80 + 104.400 158.00 175.80 -17.80 + 104.450 180.00 175.79 4.21 + 104.500 171.00 175.79 -4.79 + 104.550 165.00 175.80 -10.80 + 104.600 163.00 175.80 -12.80 + 104.650 172.00 175.81 -3.81 + 104.700 164.00 175.83 -11.83 + 104.750 174.00 175.85 -1.85 + 104.800 178.00 175.89 2.11 + 104.850 154.00 175.97 -21.97 + 104.900 176.00 176.09 -0.09 + 104.950 142.00 176.28 -34.28 + 105.000 163.00 176.56 -13.56 + 105.050 177.00 176.95 0.05 + 105.100 194.00 177.43 16.57 + 105.150 176.00 177.96 -1.96 + 105.200 207.00 178.46 28.54 + 105.250 158.00 178.81 -20.81 + 105.300 151.00 178.92 -27.92 + 105.350 183.00 178.72 4.28 + 105.400 159.00 178.31 -19.31 + 105.450 179.00 177.80 1.20 + 105.500 170.00 177.28 -7.28 + 105.550 192.00 176.84 15.16 + 105.600 160.00 176.50 -16.50 + 105.650 168.00 176.25 -8.25 + 105.700 183.00 176.10 6.90 + 105.750 163.00 176.00 -13.00 + 105.800 162.00 175.95 -13.95 + 105.850 182.00 175.92 6.08 + 105.900 154.00 175.90 -21.90 + 105.950 180.00 175.89 4.11 + 106.000 168.00 175.89 -7.89 + 106.050 166.00 175.89 -9.89 + 106.100 155.00 175.89 -20.89 + 106.150 190.00 175.90 14.10 + 106.200 165.00 175.90 -10.90 + 106.250 163.00 175.91 -12.91 + 106.300 183.00 175.92 7.08 + 106.350 165.00 175.93 -10.93 + 106.400 173.00 175.94 -2.94 + 106.450 163.00 175.95 -12.95 + 106.500 151.00 175.96 -24.96 + 106.550 198.00 175.97 22.03 + 106.600 165.00 175.99 -10.99 + 106.650 157.00 176.00 -19.00 + 106.700 159.00 176.02 -17.02 + 106.750 177.00 176.03 0.97 + 106.800 156.00 176.05 -20.05 + 106.850 182.00 176.07 5.93 + 106.900 181.00 176.08 4.92 + 106.950 158.00 176.10 -18.10 + 107.000 176.00 176.12 -0.12 + 107.050 163.00 176.14 -13.14 + 107.100 156.00 176.16 -20.16 + 107.150 213.00 176.19 36.81 + 107.200 172.00 176.21 -4.21 + 107.250 170.00 176.23 -6.23 + 107.300 168.00 176.26 -8.26 + 107.350 169.00 176.28 -7.28 + 107.400 169.00 176.31 -7.31 + 107.450 168.00 176.34 -8.34 + 107.500 155.00 176.37 -21.37 + 107.550 164.00 176.40 -12.40 + 107.600 168.00 176.44 -8.44 + 107.650 144.00 176.47 -32.47 + 107.700 166.00 176.51 -10.51 + 107.750 172.00 176.55 -4.55 + 107.800 156.00 176.59 -20.59 + 107.850 154.00 176.64 -22.64 + 107.900 143.00 176.68 -33.68 + 107.950 152.00 176.74 -24.74 + 108.000 174.00 176.79 -2.79 + 108.050 168.00 176.85 -8.85 + 108.100 164.00 176.91 -12.91 + 108.150 160.00 176.98 -16.98 + 108.200 176.00 177.05 -1.05 + 108.250 174.00 177.13 -3.13 + 108.300 175.00 177.21 -2.21 + 108.350 163.00 177.30 -14.30 + 108.400 169.00 177.41 -8.41 + 108.450 180.00 177.52 2.48 + 108.500 159.00 177.64 -18.64 + 108.550 173.00 177.78 -4.78 + 108.600 148.00 177.94 -29.94 + 108.650 169.00 178.11 -9.11 + 108.700 167.00 178.31 -11.31 + 108.750 168.00 178.53 -10.53 + 108.800 175.00 178.79 -3.79 + 108.850 163.00 179.09 -16.09 + 108.900 164.00 179.43 -15.43 + 108.950 189.00 179.85 9.15 + 109.000 192.00 180.37 11.63 + 109.050 181.00 181.04 -0.04 + 109.100 202.00 181.97 20.03 + 109.150 190.00 183.36 6.64 + 109.200 163.00 185.55 -22.55 + 109.250 216.00 189.08 26.92 + 109.300 220.00 194.69 25.31 + 109.350 230.00 203.28 26.72 + 109.400 255.00 215.66 39.34 + 109.450 253.00 232.26 20.74 + 109.500 273.00 252.71 20.29 + 109.550 296.00 275.48 20.52 + 109.600 300.00 297.67 2.33 + 109.650 331.00 314.98 16.02 + 109.700 347.00 322.69 24.31 + 109.750 349.00 318.19 30.81 + 109.800 341.00 303.07 37.93 + 109.850 332.00 281.77 50.23 + 109.900 298.00 258.87 39.13 + 109.950 259.00 237.66 21.34 + 110.000 227.00 220.01 6.99 + 110.050 203.00 206.57 -3.57 + 110.100 222.00 197.10 24.90 + 110.150 175.00 190.83 -15.83 + 110.200 183.00 186.88 -3.88 + 110.250 197.00 184.45 12.55 + 110.300 176.00 182.94 -6.94 + 110.350 179.00 181.96 -2.96 + 110.400 176.00 181.29 -5.29 + 110.450 178.00 180.80 -2.80 + 110.500 210.00 180.42 29.58 + 110.550 181.00 180.11 0.89 + 110.600 167.00 179.86 -12.86 + 110.650 165.00 179.65 -14.65 + 110.700 172.00 179.48 -7.48 + 110.750 175.00 179.34 -4.34 + 110.800 177.00 179.23 -2.23 + 110.850 194.00 179.13 14.87 + 110.900 171.00 179.06 -8.06 + 110.950 177.00 179.00 -2.00 + 111.000 188.00 178.96 9.04 + 111.050 175.00 178.93 -3.93 + 111.100 194.00 178.91 15.09 + 111.150 179.00 178.90 0.10 + 111.200 171.00 178.90 -7.90 + 111.250 165.00 178.91 -13.91 + 111.300 183.00 178.93 4.07 + 111.350 184.00 178.96 5.04 + 111.400 187.00 179.00 8.00 + 111.450 178.00 179.04 -1.04 + 111.500 172.00 179.09 -7.09 + 111.550 179.00 179.15 -0.15 + 111.600 205.00 179.22 25.78 + 111.650 168.00 179.29 -11.29 + 111.700 161.00 179.37 -18.37 + 111.750 182.00 179.46 2.54 + 111.800 167.00 179.56 -12.56 + 111.850 193.00 179.67 13.33 + 111.900 188.00 179.79 8.21 + 111.950 204.00 179.91 24.09 + 112.000 179.00 180.05 -1.05 + 112.050 176.00 180.20 -4.20 + 112.100 185.00 180.36 4.64 + 112.150 174.00 180.53 -6.53 + 112.200 175.00 180.72 -5.72 + 112.250 198.00 180.93 17.07 + 112.300 199.00 181.15 17.85 + 112.350 207.00 181.39 25.61 + 112.400 204.00 181.65 22.35 + 112.450 180.00 181.93 -1.93 + 112.500 137.00 182.24 -45.24 + 112.550 179.00 182.57 -3.57 + 112.600 183.00 182.94 0.06 + 112.650 166.00 183.34 -17.34 + 112.700 166.00 183.72 -17.72 + 112.750 189.00 184.20 4.80 + 112.800 181.00 184.73 -3.73 + 112.850 194.00 185.32 8.68 + 112.900 171.00 185.97 -14.97 + 112.950 202.00 186.70 15.30 + 113.000 216.00 187.51 28.49 + 113.050 198.00 188.42 9.58 + 113.100 189.00 189.45 -0.45 + 113.150 170.00 190.61 -20.61 + 113.200 182.00 191.94 -9.94 + 113.250 195.00 193.45 1.55 + 113.300 177.00 195.20 -18.20 + 113.350 180.00 197.23 -17.23 + 113.400 195.00 199.61 -4.61 + 113.450 201.00 202.48 -1.48 + 113.500 203.00 206.03 -3.03 + 113.550 200.00 210.64 -10.64 + 113.600 209.00 217.01 -8.01 + 113.650 231.00 226.36 4.64 + 113.700 281.00 240.78 40.22 + 113.750 287.00 263.44 23.56 + 113.800 324.00 298.77 25.23 + 113.850 395.00 352.09 42.91 + 113.900 457.00 428.69 28.31 + 113.950 580.00 532.17 47.83 + 114.000 685.00 662.33 22.67 + 114.050 873.00 813.06 59.94 + 114.100 964.00 970.75 -6.75 + 114.150 1126.00 1113.54 12.46 + 114.200 1266.00 1212.80 53.20 + 114.250 1307.00 1241.94 65.06 + 114.300 1221.00 1191.77 29.23 + 114.350 1096.00 1077.69 18.31 + 114.400 978.00 928.24 49.76 + 114.450 792.00 770.69 21.31 + 114.500 600.00 624.63 -24.63 + 114.550 487.00 501.50 -14.50 + 114.600 358.00 405.62 -47.62 + 114.650 279.00 335.90 -56.90 + 114.700 265.00 288.12 -23.12 + 114.750 258.00 256.82 1.18 + 114.800 244.00 236.86 7.14 + 114.850 226.00 224.16 1.84 + 114.900 227.00 215.85 11.15 + 114.950 188.00 210.12 -22.12 + 115.000 195.00 205.92 -10.92 + 115.050 211.00 202.66 8.34 + 115.100 205.00 200.01 4.99 + 115.150 198.00 197.80 0.20 + 115.200 218.00 195.93 22.07 + 115.250 200.00 194.33 5.67 + 115.300 200.00 192.95 7.05 + 115.350 188.00 191.75 -3.75 + 115.400 209.00 190.71 18.29 + 115.450 184.00 189.80 -5.80 + 115.500 186.00 189.00 -3.00 + 115.550 202.00 188.30 13.70 + 115.600 183.00 187.69 -4.69 + 115.650 187.00 187.15 -0.15 + 115.700 182.00 186.68 -4.68 + 115.750 185.00 186.27 -1.27 + 115.800 213.00 185.90 27.10 + 115.850 177.00 185.59 -8.59 + 115.900 199.00 185.31 13.69 + 115.950 185.00 185.08 -0.08 + 116.000 184.00 184.88 -0.88 + 116.050 191.00 184.71 6.29 + 116.100 173.00 184.57 -11.57 + 116.150 196.00 184.46 11.54 + 116.200 201.00 184.38 16.62 + 116.250 173.00 184.32 -11.32 + 116.300 178.00 184.29 -6.29 + 116.350 161.00 184.28 -23.28 + 116.400 208.00 184.30 23.70 + 116.450 183.00 184.34 -1.34 + 116.500 183.00 184.40 -1.40 + 116.550 173.00 184.48 -11.48 + 116.600 184.00 184.59 -0.59 + 116.650 215.00 184.73 30.27 + 116.700 201.00 184.88 16.12 + 116.750 193.00 185.07 7.93 + 116.800 190.00 185.28 4.72 + 116.850 216.00 185.52 30.48 + 116.900 195.00 185.79 9.21 + 116.950 203.00 186.09 16.91 + 117.000 183.00 186.43 -3.43 + 117.050 203.00 186.80 16.20 + 117.100 187.00 187.22 -0.22 + 117.150 216.00 187.68 28.32 + 117.200 191.00 188.28 2.72 + 117.250 189.00 188.84 0.16 + 117.300 189.00 189.47 -0.47 + 117.350 226.00 190.15 35.85 + 117.400 185.00 190.92 -5.92 + 117.450 194.00 191.77 2.23 + 117.500 185.00 192.71 -7.71 + 117.550 213.00 193.76 19.24 + 117.600 197.00 194.93 2.07 + 117.650 198.00 196.23 1.77 + 117.700 168.00 197.70 -29.70 + 117.750 209.00 199.36 9.64 + 117.800 185.00 201.23 -16.23 + 117.850 208.00 203.36 4.64 + 117.900 213.00 205.79 7.21 + 117.950 203.00 208.57 -5.57 + 118.000 225.00 211.80 13.20 + 118.050 214.00 215.58 -1.58 + 118.100 233.00 220.10 12.90 + 118.150 245.00 225.67 19.33 + 118.200 236.00 232.83 3.17 + 118.250 245.00 242.53 2.47 + 118.300 305.00 256.43 48.57 + 118.350 287.00 277.19 9.81 + 118.400 317.00 308.84 8.16 + 118.450 421.00 356.96 64.04 + 118.500 422.00 428.46 -6.46 + 118.550 590.00 530.68 59.32 + 118.600 701.00 669.71 31.29 + 118.650 861.00 848.20 12.80 + 118.700 1054.00 1062.66 -8.66 + 118.750 1232.00 1301.45 -69.45 + 118.800 1483.00 1542.98 -59.98 + 118.850 1694.00 1755.36 -61.36 + 118.900 1819.00 1899.54 -80.54 + 118.950 1845.00 1940.89 -95.89 + 119.000 1866.00 1868.01 -2.01 + 119.050 1726.00 1700.52 25.48 + 119.100 1492.00 1476.12 15.88 + 119.150 1232.00 1232.54 -0.54 + 119.200 971.00 998.87 -27.87 + 119.250 753.00 793.71 -40.71 + 119.300 626.00 626.27 -0.27 + 119.350 487.00 498.06 -11.06 + 119.400 409.00 405.19 3.81 + 119.450 342.00 341.00 1.00 + 119.500 307.00 298.14 8.86 + 119.550 296.00 270.02 25.98 + 119.600 231.00 251.51 -20.51 + 119.650 246.00 238.97 7.03 + 119.700 220.00 230.08 -10.08 + 119.750 255.00 223.41 31.59 + 119.800 214.00 218.14 -4.14 + 119.850 247.00 213.81 33.19 + 119.900 238.00 210.16 27.84 + 119.950 218.00 207.02 10.98 + 120.000 222.00 204.30 17.70 + 120.050 218.00 201.92 16.08 + 120.100 253.00 199.82 53.18 + 120.150 197.00 197.97 -0.97 + 120.200 190.00 196.32 -6.32 + 120.250 221.00 194.84 26.16 + 120.300 204.00 193.52 10.48 + 120.350 206.00 192.33 13.67 + 120.400 189.00 191.26 -2.26 + 120.450 231.00 190.29 40.71 + 120.500 190.00 189.41 0.59 + 120.550 191.00 188.60 2.40 + 120.600 211.00 187.87 23.13 + 120.650 204.00 187.19 16.81 + 120.700 200.00 186.57 13.43 + 120.750 199.00 186.00 13.00 + 120.800 190.00 185.48 4.52 + 120.850 195.00 184.99 10.01 + 120.900 179.00 184.54 -5.54 + 120.950 189.00 184.12 4.88 + 121.000 190.00 183.73 6.27 + 121.050 195.00 183.37 11.63 + 121.100 193.00 183.03 9.97 + 121.150 173.00 182.72 -9.72 + 121.200 183.00 182.42 0.58 + 121.250 181.00 182.15 -1.15 + 121.300 203.00 181.89 21.11 + 121.350 177.00 181.64 -4.64 + 121.400 201.00 181.41 19.59 + 121.450 179.00 181.20 -2.20 + 121.500 179.00 180.99 -1.99 + 121.550 194.00 180.80 13.20 + 121.600 158.00 180.62 -22.62 + 121.650 195.00 180.45 14.55 + 121.700 201.00 180.29 20.71 + 121.750 192.00 180.13 11.87 + 121.800 189.00 179.99 9.01 + 121.850 186.00 179.85 6.15 + 121.900 170.00 179.71 -9.71 + 121.950 166.00 179.59 -13.59 + 122.000 185.00 179.47 5.53 + 122.050 197.00 179.36 17.64 + 122.100 177.00 179.25 -2.25 + 122.150 198.00 179.14 18.86 + 122.200 174.00 179.04 -5.04 + 122.250 171.00 178.95 -7.95 + 122.300 190.00 178.86 11.14 + 122.350 214.00 178.77 35.23 + 122.400 189.00 178.69 10.31 + 122.450 174.00 178.61 -4.61 + 122.500 171.00 178.54 -7.54 + 122.550 163.00 178.45 -15.45 + 122.600 174.00 178.39 -4.39 + 122.650 177.00 178.32 -1.32 + 122.700 180.00 178.26 1.74 + 122.750 186.00 178.20 7.80 + 122.800 190.00 178.14 11.86 + 122.850 170.00 178.08 -8.08 + 122.900 175.00 178.03 -3.03 + 122.950 194.00 177.98 16.02 + 123.000 175.00 177.93 -2.93 + 123.050 194.00 177.89 16.11 + 123.100 189.00 177.85 11.15 + 123.150 222.00 177.81 44.19 + 123.200 178.00 177.78 0.22 + 123.250 158.00 177.75 -19.75 + 123.300 191.00 177.74 13.26 + 123.350 184.00 177.74 6.26 + 123.400 190.00 177.75 12.25 + 123.450 183.00 177.79 5.21 + 123.500 178.00 177.84 0.16 + 123.550 204.00 177.93 26.07 + 123.600 192.00 178.03 13.97 + 123.650 200.00 178.15 21.85 + 123.700 182.00 178.27 3.73 + 123.750 171.00 178.38 -7.38 + 123.800 186.00 178.45 7.55 + 123.850 197.00 178.47 18.53 + 123.900 174.00 178.42 -4.42 + 123.950 167.00 178.32 -11.32 + 124.000 178.00 178.17 -0.17 + 124.050 198.00 178.00 20.00 + 124.100 205.00 177.82 27.18 + 124.150 216.00 177.66 38.34 + 124.200 200.00 177.51 22.49 + 124.250 204.00 177.38 26.62 + 124.300 190.00 177.28 12.72 + 124.350 188.00 177.20 10.80 + 124.400 191.00 177.14 13.86 + 124.450 186.00 177.09 8.91 + 124.500 175.00 177.05 -2.05 + 124.550 175.00 177.02 -2.02 + 124.600 174.00 176.99 -2.99 + 124.650 194.00 176.97 17.03 + 124.700 181.00 176.95 4.05 + 124.750 161.00 176.93 -15.93 + 124.800 186.00 176.91 9.09 + 124.850 200.00 176.90 23.10 + 124.900 168.00 176.88 -8.88 + 124.950 177.00 176.87 0.13 + 125.000 188.00 176.85 11.15 + 125.050 177.00 176.84 0.16 + 125.100 163.00 176.83 -13.83 + 125.150 175.00 176.82 -1.82 + 125.200 188.00 176.81 11.19 + 125.250 176.00 176.80 -0.80 + 125.300 172.00 176.79 -4.79 + 125.350 172.00 176.78 -4.78 + 125.400 181.00 176.77 4.23 + 125.450 186.00 176.76 9.24 + 125.500 181.00 176.75 4.25 + 125.550 193.00 176.74 16.26 + 125.600 177.00 176.74 0.26 + 125.650 176.00 176.73 -0.73 + 125.700 194.00 176.73 17.27 + 125.750 179.00 176.72 2.28 + 125.800 147.00 176.72 -29.72 + 125.850 186.00 176.71 9.29 + 125.900 182.00 176.71 5.29 + 125.950 165.00 176.71 -11.71 + 126.000 164.00 176.70 -12.70 + 126.050 199.00 176.70 22.30 + 126.100 167.00 176.70 -9.70 + 126.150 184.00 176.70 7.30 + 126.200 203.00 176.70 26.30 + 126.250 190.00 176.70 13.30 + 126.300 182.00 176.70 5.30 + 126.350 180.00 176.70 3.30 + 126.400 179.00 176.71 2.29 + 126.450 179.00 176.71 2.29 + 126.500 170.00 176.71 -6.71 + 126.550 176.00 176.72 -0.72 + 126.600 178.00 176.73 1.27 + 126.650 185.00 176.73 8.27 + 126.700 193.00 176.74 16.26 + 126.750 192.00 176.75 15.25 + 126.800 198.00 176.76 21.24 + 126.850 195.00 176.77 18.23 + 126.900 165.00 176.79 -11.79 + 126.950 189.00 176.80 12.20 + 127.000 175.00 176.82 -1.82 + 127.050 176.00 176.83 -0.83 + 127.100 184.00 176.85 7.15 + 127.150 179.00 176.87 2.13 + 127.200 187.00 176.90 10.10 + 127.250 176.00 176.92 -0.92 + 127.300 191.00 176.95 14.05 + 127.350 194.00 176.98 17.02 + 127.400 177.00 177.02 -0.02 + 127.450 177.00 177.06 -0.06 + 127.500 180.00 177.10 2.90 + 127.550 158.00 177.15 -19.15 + 127.600 193.00 177.20 15.80 + 127.650 177.00 177.26 -0.26 + 127.700 185.00 177.32 7.68 + 127.750 178.00 177.39 0.61 + 127.800 184.00 177.47 6.53 + 127.850 188.00 177.57 10.43 + 127.900 182.00 177.57 4.43 + 127.950 190.00 177.69 12.31 + 128.000 191.00 177.82 13.18 + 128.050 165.00 177.98 -12.98 + 128.100 174.00 178.16 -4.16 + 128.150 158.00 178.39 -20.39 + 128.200 197.00 178.68 18.32 + 128.250 183.00 179.05 3.95 + 128.300 196.00 179.56 16.44 + 128.350 166.00 180.28 -14.28 + 128.400 218.00 181.30 36.70 + 128.450 206.00 182.76 23.24 + 128.500 184.00 184.80 -0.80 + 128.550 176.00 187.60 -11.60 + 128.600 198.00 191.36 6.64 + 128.650 215.00 196.20 18.80 + 128.700 179.00 202.20 -23.20 + 128.750 192.00 209.31 -17.31 + 128.800 201.00 217.35 -16.35 + 128.850 221.00 225.93 -4.93 + 128.900 227.00 234.45 -7.45 + 128.950 229.00 242.14 -13.14 + 129.000 254.00 248.06 5.94 + 129.050 256.00 251.27 4.73 + 129.100 272.00 251.19 20.81 + 129.150 239.00 247.84 -8.84 + 129.200 228.00 241.82 -13.82 + 129.250 255.00 234.07 20.93 + 129.300 213.00 225.53 -12.53 + 129.350 203.00 216.96 -13.96 + 129.400 228.00 208.97 19.03 + 129.450 220.00 201.90 18.10 + 129.500 185.00 195.95 -10.95 + 129.550 192.00 191.17 0.83 + 129.600 187.00 187.46 -0.46 + 129.650 182.00 184.70 -2.70 + 129.700 209.00 182.69 26.31 + 129.750 173.00 181.26 -8.26 + 129.800 202.00 180.26 21.74 + 129.850 178.00 179.55 -1.55 + 129.900 189.00 179.05 9.95 + 129.950 177.00 178.68 -1.68 + 130.000 177.00 178.40 -1.40 + 130.050 190.00 178.17 11.83 + 130.100 178.00 177.99 0.01 + 130.150 177.00 177.84 -0.84 + 130.200 164.00 177.70 -13.70 + 130.250 185.00 177.59 7.41 + 130.300 153.00 177.49 -24.49 + 130.350 174.00 177.40 -3.40 + 130.400 197.00 177.32 19.68 + 130.450 192.00 177.25 14.75 + 130.500 174.00 177.18 -3.18 + 130.550 177.00 177.12 -0.12 + 130.600 172.00 177.07 -5.07 + 130.650 173.00 177.02 -4.02 + 130.700 178.00 176.98 1.02 + 130.750 180.00 176.94 3.06 + 130.800 203.00 176.91 26.09 + 130.850 192.00 176.88 15.12 + 130.900 184.00 176.85 7.15 + 130.950 197.00 176.82 20.18 + 131.000 169.00 176.80 -7.80 + 131.050 187.00 176.78 10.22 + 131.100 175.00 176.76 -1.76 + 131.150 177.00 176.74 0.26 + 131.200 199.00 176.72 22.28 + 131.250 180.00 176.71 3.29 + 131.300 203.00 176.69 26.31 + 131.350 175.00 176.68 -1.68 + 131.400 183.00 176.67 6.33 + 131.450 192.00 176.66 15.34 + 131.500 174.00 176.65 -2.65 + 131.550 180.00 176.64 3.36 + 131.600 179.00 176.64 2.36 + 131.650 191.00 176.63 14.37 + 131.700 182.00 176.63 5.37 + 131.750 174.00 176.62 -2.62 + 131.800 191.00 176.62 14.38 + 131.850 195.00 176.61 18.39 + 131.900 171.00 176.61 -5.61 + 131.950 198.00 176.61 21.39 + 132.000 193.00 176.61 16.39 + 132.050 175.00 176.61 -1.61 + 132.100 207.00 176.61 30.39 + 132.150 189.00 176.61 12.39 + 132.200 174.00 176.61 -2.61 + 132.250 196.00 176.61 19.39 + 132.300 175.00 176.61 -1.61 + 132.350 196.00 176.61 19.39 + 132.400 183.00 176.61 6.39 + 132.450 198.00 176.62 21.38 + 132.500 196.00 176.62 19.38 + 132.550 169.00 176.62 -7.62 + 132.600 189.00 176.63 12.37 + 132.650 171.00 176.63 -5.63 + 132.700 193.00 176.64 16.36 + 132.750 170.00 176.64 -6.64 + 132.800 175.00 176.65 -1.65 + 132.850 166.00 176.65 -10.65 + 132.900 188.00 176.66 11.34 + 132.950 186.00 176.67 9.33 + 133.000 165.00 176.67 -11.67 + 133.050 201.00 176.68 24.32 + 133.100 182.00 176.69 5.31 + 133.150 151.00 176.70 -25.70 + 133.200 156.00 176.70 -20.70 + 133.250 187.00 176.71 10.29 + 133.300 153.00 176.72 -23.72 + 133.350 193.00 176.73 16.27 + 133.400 200.00 176.74 23.26 + 133.450 165.00 176.75 -11.75 + 133.500 172.00 176.76 -4.76 + 133.550 162.00 176.77 -14.77 + 133.600 165.00 176.63 -11.63 + 133.650 218.00 176.64 41.36 + 133.700 197.00 176.65 20.35 + 133.750 206.00 176.67 29.33 + 133.800 186.00 176.68 9.32 + 133.850 162.00 176.70 -14.70 + 133.900 176.00 176.71 -0.71 + 133.950 174.00 176.72 -2.72 + 134.000 196.00 176.74 19.26 + 134.050 174.00 176.76 -2.76 + 134.100 177.00 176.77 0.23 + 134.150 183.00 176.79 6.21 + 134.200 184.00 176.81 7.19 + 134.250 185.00 176.82 8.18 + 134.300 200.00 176.84 23.16 + 134.350 175.00 176.86 -1.86 + 134.400 190.00 176.88 13.12 + 134.450 195.00 176.90 18.10 + 134.500 192.00 176.92 15.08 + 134.550 171.00 176.94 -5.94 + 134.600 194.00 176.96 17.04 + 134.650 190.00 176.98 13.02 + 134.700 165.00 177.00 -12.00 + 134.750 192.00 177.02 14.98 + 134.800 160.00 177.05 -17.05 + 134.850 192.00 177.07 14.93 + 134.900 181.00 177.09 3.91 + 134.950 208.00 177.12 30.88 + 135.000 179.00 177.14 1.86 + 135.050 172.00 177.17 -5.17 + 135.100 183.00 177.20 5.80 + 135.150 187.00 177.22 9.78 + 135.200 185.00 177.25 7.75 + 135.250 182.00 177.28 4.72 + 135.300 184.00 177.31 6.69 + 135.350 163.00 177.34 -14.34 + 135.400 201.00 177.37 23.63 + 135.450 189.00 177.41 11.59 + 135.500 204.00 177.44 26.56 + 135.550 178.00 177.47 0.53 + 135.600 178.00 177.51 0.49 + 135.650 193.00 177.55 15.45 + 135.700 215.00 177.58 37.42 + 135.750 203.00 177.62 25.38 + 135.800 216.00 177.66 38.34 + 135.850 165.00 177.70 -12.70 + 135.900 196.00 177.74 18.26 + 135.950 178.00 177.79 0.21 + 136.000 170.00 177.83 -7.83 + 136.050 173.00 177.88 -4.88 + 136.100 188.00 177.92 10.08 + 136.150 176.00 177.97 -1.97 + 136.200 186.00 178.02 7.98 + 136.250 189.00 178.08 10.92 + 136.300 166.00 178.13 -12.13 + 136.350 177.00 178.19 -1.19 + 136.400 169.00 178.24 -9.24 + 136.450 171.00 178.30 -7.30 + 136.500 194.00 178.36 15.64 + 136.550 187.00 178.43 8.57 + 136.600 162.00 178.49 -16.49 + 136.650 160.00 178.56 -18.56 + 136.700 183.00 178.63 4.37 + 136.750 150.00 178.70 -28.70 + 136.800 180.00 178.78 1.22 + 136.850 194.00 178.86 15.14 + 136.900 185.00 178.94 6.06 + 136.950 158.00 179.02 -21.02 + 137.000 193.00 179.11 13.89 + 137.050 165.00 179.20 -14.20 + 137.100 178.00 179.29 -1.29 + 137.150 183.00 179.39 3.61 + 137.200 180.00 179.49 0.51 + 137.250 176.00 179.60 -3.60 + 137.300 183.00 179.71 3.29 + 137.350 189.00 179.82 9.18 + 137.400 180.00 179.94 0.06 + 137.450 160.00 180.07 -20.07 + 137.500 202.00 180.20 21.80 + 137.550 201.00 180.33 20.67 + 137.600 173.00 180.47 -7.47 + 137.650 176.00 180.62 -4.62 + 137.700 195.00 180.77 14.23 + 137.750 197.00 180.94 16.06 + 137.800 186.00 181.11 4.89 + 137.850 183.00 181.28 1.72 + 137.900 175.00 181.47 -6.47 + 137.950 178.00 181.67 -3.67 + 138.000 190.00 181.87 8.13 + 138.050 174.00 182.09 -8.09 + 138.100 163.00 182.31 -19.31 + 138.150 190.00 182.55 7.45 + 138.200 169.00 182.81 -13.81 + 138.250 198.00 183.07 14.93 + 138.300 199.00 183.35 15.65 + 138.350 184.00 183.65 0.35 + 138.400 216.00 183.96 32.04 + 138.450 183.00 184.30 -1.30 + 138.500 200.00 184.65 15.35 + 138.550 186.00 185.02 0.98 + 138.600 177.00 185.42 -8.42 + 138.650 186.00 185.85 0.15 + 138.700 193.00 186.30 6.70 + 138.750 200.00 186.78 13.22 + 138.800 180.00 187.29 -7.29 + 138.850 178.00 187.85 -9.85 + 138.900 198.00 188.44 9.56 + 138.950 236.00 189.07 46.93 + 139.000 203.00 189.75 13.25 + 139.050 207.00 190.48 16.52 + 139.100 190.00 191.28 -1.28 + 139.150 171.00 192.13 -21.13 + 139.200 203.00 193.06 9.94 + 139.250 203.00 194.06 8.94 + 139.300 198.00 195.16 2.84 + 139.350 200.00 196.36 3.64 + 139.400 187.00 197.67 -10.67 + 139.450 214.00 199.12 14.88 + 139.500 198.00 200.74 -2.74 + 139.550 220.00 202.56 17.44 + 139.600 196.00 204.63 -8.63 + 139.650 239.00 207.03 31.97 + 139.700 212.00 209.87 2.13 + 139.750 219.00 213.30 5.70 + 139.800 248.00 217.54 30.46 + 139.850 220.00 222.90 -2.90 + 139.900 241.00 229.76 11.24 + 139.950 245.00 238.67 6.33 + 140.000 269.00 250.32 18.68 + 140.050 294.00 265.52 28.48 + 140.100 323.00 285.26 37.74 + 140.150 302.00 310.64 -8.64 + 140.200 312.00 342.84 -30.84 + 140.250 371.00 383.03 -12.03 + 140.300 420.00 432.22 -12.22 + 140.350 516.00 491.19 24.81 + 140.400 596.00 560.24 35.76 + 140.450 644.00 639.17 4.83 + 140.500 711.00 726.99 -15.99 + 140.550 833.00 821.91 11.09 + 140.600 895.00 921.18 -26.18 + 140.650 1010.00 1021.07 -11.07 + 140.700 1058.00 1116.95 -58.95 + 140.750 1183.00 1203.21 -20.21 + 140.800 1278.00 1273.72 4.28 + 140.850 1298.00 1322.46 -24.46 + 140.900 1419.00 1344.65 74.35 + 140.950 1381.00 1337.91 43.09 + 141.000 1299.00 1302.98 -3.98 + 141.050 1371.00 1243.47 127.53 + 141.100 1273.00 1164.90 108.10 + 141.150 1131.00 1073.48 57.52 + 141.200 992.00 975.10 16.90 + 141.250 918.00 874.96 43.04 + 141.300 832.00 777.30 54.70 + 141.350 655.00 685.39 -30.39 + 141.400 629.00 601.54 27.46 + 141.450 522.00 527.10 -5.10 + 141.500 472.00 462.72 9.28 + 141.550 409.00 408.35 0.65 + 141.600 371.00 363.44 7.56 + 141.650 325.00 327.10 -2.10 + 141.700 306.00 298.20 7.80 + 141.750 270.00 275.57 -5.57 + 141.800 238.00 258.06 -20.06 + 141.850 231.00 244.63 -13.63 + 141.900 232.00 234.35 -2.35 + 141.950 223.00 226.46 -3.46 + 142.000 221.00 220.36 0.64 + 142.050 244.00 215.57 28.43 + 142.100 228.00 211.74 16.26 + 142.150 212.00 208.61 3.39 + 142.200 226.00 205.99 20.01 + 142.250 197.00 203.76 -6.76 + 142.300 204.00 201.82 2.18 + 142.350 189.00 200.10 -11.10 + 142.400 201.00 198.57 2.43 + 142.450 226.00 197.19 28.81 + 142.500 210.00 195.94 14.06 + 142.550 213.00 194.79 18.21 + 142.600 202.00 193.74 8.26 + 142.650 206.00 192.78 13.22 + 142.700 189.00 191.89 -2.89 + 142.750 213.00 191.07 21.93 + 142.800 193.00 190.31 2.69 + 142.850 206.00 189.61 16.39 + 142.900 204.00 188.96 15.04 + 142.950 188.00 188.35 -0.35 + 143.000 221.00 187.78 33.22 + 143.050 203.00 187.25 15.75 + 143.100 192.00 186.76 5.24 + 143.150 197.00 186.29 10.71 + 143.200 187.00 185.86 1.14 + 143.250 206.00 185.45 20.55 + 143.300 197.00 185.07 11.93 + 143.350 182.00 184.71 -2.71 + 143.400 186.00 184.37 1.63 + 143.450 228.00 184.05 43.95 + 143.500 201.00 183.75 17.25 + 143.550 176.00 183.47 -7.47 + 143.600 193.00 183.20 9.80 + 143.650 200.00 182.94 17.06 + 143.700 189.00 182.70 6.30 + 143.750 198.00 182.47 15.53 + 143.800 188.00 182.26 5.74 + 143.850 169.00 182.05 -13.05 + 143.900 183.00 181.86 1.14 + 143.950 198.00 181.67 16.33 + 144.000 156.00 181.49 -25.49 + 144.050 172.00 181.32 -9.32 + 144.100 190.00 181.16 8.84 + 144.150 166.00 181.01 -15.01 + 144.200 163.00 180.86 -17.86 + 144.250 184.00 180.72 3.28 + 144.300 182.00 180.59 1.41 + 144.350 173.00 180.46 -7.46 + 144.400 182.00 180.34 1.66 + 144.450 183.00 180.22 2.78 + 144.500 186.00 180.11 5.89 + 144.550 195.00 180.00 15.00 + 144.600 204.00 179.90 24.10 + 144.650 179.00 179.80 -0.80 + 144.700 192.00 179.71 12.29 + 144.750 213.00 179.62 33.38 + 144.800 187.00 179.53 7.47 + 144.850 194.00 179.45 14.55 + 144.900 185.00 179.37 5.63 + 144.950 183.00 179.29 3.71 + 145.000 192.00 179.22 12.78 + 145.050 201.00 179.14 21.86 + 145.100 211.00 179.08 31.92 + 145.150 163.00 179.01 -16.01 + 145.200 202.00 178.95 23.05 + 145.250 197.00 178.89 18.11 + 145.300 183.00 178.83 4.17 + 145.350 177.00 178.77 -1.77 + 145.400 188.00 178.72 9.28 + 145.450 158.00 178.66 -20.66 + 145.500 184.00 178.61 5.39 + 145.550 162.00 178.56 -16.56 + 145.600 169.00 178.52 -9.52 + 145.650 171.00 178.47 -7.47 + 145.700 188.00 178.43 9.57 + 145.750 167.00 178.38 -11.38 + 145.800 182.00 178.34 3.66 + 145.850 197.00 178.30 18.70 + 145.900 179.00 178.27 0.73 + 145.950 172.00 178.23 -6.23 + 146.000 163.00 178.19 -15.19 + 146.050 172.00 178.16 -6.16 + 146.100 178.00 178.13 -0.13 + 146.150 179.00 178.09 0.91 + 146.200 171.00 178.06 -7.06 + 146.250 189.00 178.03 10.97 + 146.300 190.00 178.00 12.00 + 146.350 185.00 177.98 7.02 + 146.400 169.00 177.95 -8.95 + 146.450 165.00 177.92 -12.92 + 146.500 185.00 177.90 7.10 + 146.550 158.00 177.88 -19.88 + 146.600 190.00 177.85 12.15 + 146.650 165.00 177.83 -12.83 + 146.700 173.00 177.81 -4.81 + 146.750 206.00 177.79 28.21 + 146.800 170.00 177.76 -7.76 + 146.850 193.00 177.75 15.25 + 146.900 167.00 177.73 -10.73 + 146.950 182.00 177.71 4.29 + 147.000 191.00 177.70 13.30 + 147.050 175.00 177.68 -2.68 + 147.100 184.00 177.67 6.33 + 147.150 163.00 177.66 -14.66 + 147.200 174.00 177.65 -3.65 + 147.250 176.00 177.64 -1.64 + 147.300 163.00 177.63 -14.63 + 147.350 174.00 177.63 -3.63 + 147.400 155.00 177.62 -22.62 + 147.450 153.00 177.62 -24.62 + 147.500 190.00 177.62 12.38 + 147.550 190.00 177.62 12.38 + 147.600 169.00 177.63 -8.63 + 147.650 189.00 177.63 11.37 + 147.700 177.00 177.64 -0.64 + 147.750 167.00 177.64 -10.64 + 147.800 163.00 177.65 -14.65 + 147.850 196.00 177.65 18.35 + 147.900 175.00 177.65 -2.65 + 147.950 146.00 177.66 -31.66 + 148.000 170.00 177.66 -7.66 + 148.050 179.00 177.65 1.35 + 148.100 182.00 177.65 4.35 + 148.150 175.00 177.64 -2.64 + 148.200 171.00 177.63 -6.63 + 148.250 201.00 177.61 23.39 + 148.300 181.00 177.60 3.40 + 148.350 152.00 177.58 -25.58 + 148.400 194.00 177.56 16.44 + 148.450 160.00 177.54 -17.54 + 148.500 179.00 177.52 1.48 + 148.550 181.00 177.51 3.49 + 148.600 175.00 177.49 -2.49 + 148.650 178.00 177.47 0.53 + 148.700 186.00 177.46 8.54 + 148.750 195.00 177.45 17.55 + 148.800 166.00 177.44 -11.44 + 148.850 184.00 177.43 6.57 + 148.900 215.00 177.42 37.58 + 148.950 183.00 177.41 5.59 + 149.000 184.00 177.41 6.59 + 149.050 174.00 177.40 -3.40 + 149.100 175.00 177.40 -2.40 + 149.150 171.00 177.40 -6.40 + 149.200 166.00 177.39 -11.39 + 149.250 188.00 177.39 10.61 + 149.300 165.00 177.39 -12.39 + 149.350 184.00 177.39 6.61 + 149.400 181.00 177.40 3.60 + 149.450 174.00 177.40 -3.40 + 149.500 178.00 177.40 0.60 + 149.550 191.00 177.40 13.60 + 149.600 181.00 177.40 3.60 + 149.650 174.00 177.41 -3.41 + 149.700 180.00 177.41 2.59 + 149.750 177.00 177.41 -0.41 + 149.800 164.00 177.42 -13.42 + 149.850 203.00 177.42 25.58 + 149.900 178.00 177.43 0.57 + 149.950 162.00 177.43 -15.43 + 150.000 192.00 177.44 14.56 + 150.050 164.00 177.45 -13.45 + 150.100 151.00 177.45 -26.45 + 150.150 170.00 177.46 -7.46 + 150.200 166.00 177.47 -11.47 + 150.250 194.00 177.47 16.53 + 150.300 168.00 177.48 -9.48 + 150.350 173.00 177.49 -4.49 + 150.400 175.00 177.50 -2.50 + 150.450 193.00 177.50 15.50 + 150.500 177.00 177.51 -0.51 + 150.550 185.00 177.52 7.48 + 150.600 178.00 177.53 0.47 + 150.650 178.00 177.54 0.46 + 150.700 179.00 177.55 1.45 + 150.750 180.00 177.56 2.44 + 150.800 169.00 177.57 -8.57 + 150.850 177.00 177.59 -0.59 + 150.900 159.00 177.60 -18.60 + 150.950 167.00 177.61 -10.61 + 151.000 180.00 177.62 2.38 + 151.050 158.00 177.64 -19.64 + 151.100 173.00 177.65 -4.65 + 151.150 172.00 177.66 -5.66 + 151.200 163.00 177.68 -14.68 + 151.250 168.00 177.69 -9.69 + 151.300 166.00 177.71 -11.71 + 151.350 179.00 177.72 1.28 + 151.400 159.00 177.74 -18.74 + 151.450 173.00 177.75 -4.75 + 151.500 170.00 177.77 -7.77 + 151.550 151.00 177.79 -26.79 + 151.600 174.00 177.81 -3.81 + 151.650 182.00 177.83 4.17 + 151.700 182.00 177.84 4.16 + 151.750 172.00 177.86 -5.86 + 151.800 157.00 177.88 -20.88 + 151.850 156.00 177.90 -21.90 + 151.900 168.00 177.93 -9.93 + 151.950 194.00 177.95 16.05 + 152.000 177.00 177.97 -0.97 + 152.050 170.00 177.99 -7.99 + 152.100 169.00 178.02 -9.02 + 152.150 173.00 178.04 -5.04 + 152.200 161.00 178.07 -17.07 + 152.250 169.00 178.09 -9.09 + 152.300 167.00 178.12 -11.12 + 152.350 194.00 178.15 15.85 + 152.400 150.00 178.18 -28.18 + 152.450 159.00 178.21 -19.21 + 152.500 181.00 178.24 2.76 + 152.550 180.00 178.27 1.73 + 152.600 193.00 178.30 14.70 + 152.650 192.00 178.33 13.67 + 152.700 152.00 178.37 -26.37 + 152.750 159.00 178.40 -19.40 + 152.800 147.00 178.44 -31.44 + 152.850 190.00 178.48 11.52 + 152.900 167.00 178.51 -11.51 + 152.950 193.00 178.55 14.45 + 153.000 159.00 178.60 -19.60 + 153.050 195.00 178.64 16.36 + 153.100 172.00 178.68 -6.68 + 153.150 148.00 178.73 -30.73 + 153.200 174.00 178.77 -4.77 + 153.250 194.00 178.82 15.18 + 153.300 159.00 178.87 -19.87 + 153.350 190.00 178.93 11.07 + 153.400 181.00 178.98 2.02 + 153.450 159.00 179.04 -20.04 + 153.500 168.00 179.09 -11.09 + 153.550 175.00 179.15 -4.15 + 153.600 184.00 179.22 4.78 + 153.650 200.00 179.28 20.72 + 153.700 161.00 179.35 -18.35 + 153.750 162.00 179.42 -17.42 + 153.800 152.00 179.49 -27.49 + 153.850 177.00 179.57 -2.57 + 153.900 173.00 179.65 -6.65 + 153.950 184.00 179.73 4.27 + 154.000 169.00 179.82 -10.82 + 154.050 163.00 179.91 -16.91 + 154.100 177.00 180.00 -3.00 + 154.150 171.00 180.10 -9.10 + 154.200 180.00 180.20 -0.20 + 154.250 201.00 180.31 20.69 + 154.300 206.00 180.42 25.58 + 154.350 181.00 180.54 0.46 + 154.400 170.00 180.66 -10.66 + 154.450 177.00 180.80 -3.80 + 154.500 196.00 180.94 15.06 + 154.550 201.00 181.09 19.91 + 154.600 161.00 181.24 -20.24 + 154.650 179.00 181.41 -2.41 + 154.700 185.00 181.60 3.40 + 154.750 167.00 181.80 -14.80 + 154.800 162.00 182.01 -20.01 + 154.850 178.00 182.25 -4.25 + 154.900 203.00 182.51 20.49 + 154.950 193.00 182.80 10.20 + 155.000 164.00 183.13 -19.13 + 155.050 191.00 183.50 7.50 + 155.100 173.00 183.92 -10.92 + 155.150 165.00 184.40 -19.40 + 155.200 178.00 184.96 -6.96 + 155.250 196.00 185.59 10.41 + 155.300 188.00 186.33 1.67 + 155.350 183.00 187.19 -4.19 + 155.400 188.00 188.19 -0.19 + 155.450 166.00 189.34 -23.34 + 155.500 189.00 190.69 -1.69 + 155.550 175.00 192.25 -17.25 + 155.600 173.00 194.05 -21.05 + 155.650 201.00 196.12 4.88 + 155.700 177.00 198.50 -21.50 + 155.750 202.00 201.21 0.79 + 155.800 169.00 204.30 -35.30 + 155.850 198.00 207.78 -9.78 + 155.900 191.00 211.70 -20.70 + 155.950 207.00 216.07 -9.07 + 156.000 226.00 220.91 5.09 + 156.050 184.00 226.25 -42.25 + 156.100 218.00 232.08 -14.08 + 156.150 215.00 238.41 -23.41 + 156.200 239.00 245.22 -6.22 + 156.250 292.00 252.50 39.50 + 156.300 251.00 260.20 -9.20 + 156.350 255.00 268.28 -13.28 + 156.400 244.00 276.68 -32.68 + 156.450 259.00 285.32 -26.32 + 156.500 260.00 294.12 -34.12 + 156.550 294.00 302.97 -8.97 + 156.600 303.00 311.75 -8.75 + 156.650 282.00 320.33 -38.33 + 156.700 312.00 328.56 -16.56 + 156.750 317.00 336.29 -19.29 + 156.800 342.00 343.36 -1.36 + 156.850 338.00 349.60 -11.60 + 156.900 351.00 354.85 -3.85 + 156.950 359.00 358.96 0.04 + 157.000 394.00 361.82 32.18 + 157.050 316.00 363.32 -47.32 + 157.100 379.00 363.43 15.57 + 157.150 359.00 362.13 -3.13 + 157.200 404.00 359.48 44.52 + 157.250 381.00 355.55 25.45 + 157.300 359.00 350.47 8.53 + 157.350 364.00 344.38 19.62 + 157.400 347.00 337.44 9.56 + 157.450 328.00 329.82 -1.82 + 157.500 344.00 321.68 22.32 + 157.550 320.00 313.17 6.83 + 157.600 333.00 304.45 28.55 + 157.650 319.00 295.64 23.36 + 157.700 289.00 286.86 2.14 + 157.750 284.00 278.23 5.77 + 157.800 283.00 269.83 13.17 + 157.850 305.00 261.74 43.26 + 157.900 281.00 254.03 26.97 + 157.950 244.00 246.73 -2.73 + 158.000 253.00 239.90 13.10 + 158.050 245.00 233.55 11.45 + 158.100 210.00 227.69 -17.69 + 158.150 201.00 222.33 -21.33 + 158.200 226.00 217.46 8.54 + 158.250 206.00 213.07 -7.07 + 158.300 218.00 209.14 8.86 + 158.350 201.00 205.64 -4.64 + 158.400 226.00 202.54 23.46 + 158.450 201.00 199.82 1.18 + 158.500 210.00 197.44 12.56 + 158.550 207.00 195.37 11.63 + 158.600 176.00 193.58 -17.58 + 158.650 172.00 192.03 -20.03 + 158.700 173.00 190.70 -17.70 + 158.750 195.00 189.56 5.44 + 158.800 168.00 188.58 -20.58 + 158.850 177.00 187.74 -10.74 + 158.900 186.00 187.03 -1.03 + 158.950 170.00 186.42 -16.42 + 159.000 190.00 185.90 4.10 + 159.050 175.00 185.45 -10.45 + 159.100 191.00 185.06 5.94 + 159.150 164.00 184.72 -20.72 + 159.200 189.00 184.43 4.57 + 159.250 176.00 184.18 -8.18 + 159.300 175.00 183.95 -8.95 + 159.350 162.00 183.75 -21.75 + 159.400 184.00 183.57 0.43 + 159.450 163.00 183.41 -20.41 + 159.500 179.00 183.27 -4.27 + 159.550 194.00 183.14 10.86 + 159.600 165.00 183.02 -18.02 + 159.650 180.00 182.91 -2.91 + 159.700 174.00 182.82 -8.82 + 159.750 180.00 182.72 -2.72 + 159.800 179.00 182.64 -3.64 + 159.850 189.00 182.56 6.44 + 159.900 185.00 182.49 2.51 + 159.950 151.00 182.43 -31.43 + 160.000 176.00 182.37 -6.37 + 160.050 165.00 182.32 -17.32 + 160.100 163.00 182.27 -19.27 + 160.150 184.00 182.22 1.78 + 160.200 157.00 182.18 -25.18 + 160.250 166.00 182.14 -16.14 + 160.300 160.00 182.11 -22.11 + 160.350 183.00 182.08 0.92 + 160.400 167.00 182.05 -15.05 + 160.450 180.00 182.03 -2.03 + 160.500 183.00 182.01 0.99 + 160.550 163.00 181.99 -18.99 + 160.600 178.00 181.98 -3.98 + 160.650 179.00 181.96 -2.96 + 160.700 161.00 181.95 -20.95 + 160.750 168.00 181.95 -13.95 + 160.800 173.00 181.94 -8.94 + 160.850 202.00 181.94 20.06 + 160.900 145.00 181.94 -36.94 + 160.950 162.00 181.94 -19.94 + 161.000 180.00 181.94 -1.94 + 161.050 186.00 181.95 4.05 + 161.100 166.00 181.96 -15.96 + 161.150 177.00 181.97 -4.97 + 161.200 194.00 181.98 12.02 + 161.250 177.00 181.99 -4.99 + 161.300 178.00 182.01 -4.01 + 161.350 190.00 182.03 7.97 + 161.400 160.00 182.04 -22.04 + 161.450 173.00 182.06 -9.06 + 161.500 191.00 182.09 8.91 + 161.550 161.00 182.11 -21.11 + 161.600 181.00 182.14 -1.14 + 161.650 152.00 182.16 -30.16 + 161.700 195.00 182.19 12.81 + 161.750 171.00 182.22 -11.22 + 161.800 188.00 182.25 5.75 + 161.850 164.00 182.28 -18.28 + 161.900 185.00 182.32 2.68 + 161.950 173.00 182.35 -9.35 + 162.000 162.00 182.39 -20.39 + 162.050 166.00 182.43 -16.43 + 162.100 201.00 182.47 18.53 + 162.150 173.00 182.51 -9.51 + 162.200 172.00 182.55 -10.55 + 162.250 181.00 182.59 -1.59 + 162.300 159.00 182.64 -23.64 + 162.350 185.00 182.69 2.31 + 162.400 170.00 182.73 -12.73 + 162.450 200.00 182.78 17.22 + 162.500 196.00 182.83 13.17 + 162.550 176.00 182.88 -6.88 + 162.600 197.00 182.94 14.06 + 162.650 176.00 182.99 -6.99 + 162.700 181.00 183.05 -2.05 + 162.750 176.00 183.11 -7.11 + 162.800 184.00 183.16 0.84 + 162.850 179.00 183.22 -4.22 + 162.900 165.00 183.29 -18.29 + 162.950 146.00 183.35 -37.35 + 163.000 165.00 183.41 -18.41 + 163.050 151.00 183.48 -32.48 + 163.100 164.00 183.55 -19.55 + 163.150 179.00 183.62 -4.62 + 163.200 186.00 183.69 2.31 + 163.250 182.00 183.76 -1.76 + 163.300 168.00 183.83 -15.83 + 163.350 193.00 183.91 9.09 + 163.400 177.00 183.98 -6.98 + 163.450 180.00 184.06 -4.06 + 163.500 171.00 184.14 -13.14 + 163.550 207.00 184.22 22.78 + 163.600 180.00 184.30 -4.30 + 163.650 159.00 184.39 -25.39 + 163.700 165.00 184.48 -19.48 + 163.750 178.00 184.56 -6.56 + 163.800 150.00 184.65 -34.65 + 163.850 177.00 184.75 -7.75 + 163.900 174.00 184.84 -10.84 + 163.950 180.00 184.94 -4.94 + 164.000 184.00 185.04 -1.04 + 164.050 166.00 185.14 -19.14 + 164.100 182.00 185.24 -3.24 + 164.150 188.00 185.34 2.66 + 164.200 186.00 185.45 0.55 + 164.250 152.00 185.56 -33.56 + 164.300 200.00 185.67 14.33 + 164.350 177.00 185.79 -8.79 + 164.400 202.00 185.90 16.10 + 164.450 178.00 186.02 -8.02 + 164.500 153.00 186.14 -33.14 + 164.550 197.00 186.27 10.73 + 164.600 153.00 186.40 -33.40 + 164.650 173.00 186.43 -13.43 + 164.700 187.00 186.57 0.43 + 164.750 175.00 186.71 -11.71 + 164.800 168.00 186.85 -18.85 + 164.850 109.00 174.56 -65.56 +END +WAVES Phase1, tik1 +BEGIN + 22.758 -117 + 32.130 -117 + 39.466 -117 + 45.782 -117 + 51.468 -117 + 56.726 -117 + 66.401 -117 + 70.956 -117 + 70.956 -117 + 75.385 -117 + 79.722 -117 + 83.997 -117 + 88.235 -117 + 92.460 -117 + 100.964 -117 + 105.291 -117 + 105.291 -117 + 109.707 -117 + 109.707 -117 + 114.243 -117 + 118.943 -117 + 123.861 -117 + 129.074 -117 + 140.913 -117 + 148.083 -117 + 148.083 -117 + 157.078 -117 + 157.078 -117 + 172.711 -117 + 172.711 -117 +END +WAVES Excrg1, excl1 +BEGIN + 10.30 -117 + 5.00 -117 +END +WAVES Excrg2, excl2 +BEGIN + 165.00 -117 + 164.85 -117 +END +X Silent 1 +X DefaultFont Times +X Display Iobs, Icalc, Diff vs TwoTheta +X Modify mode(Iobs)=2, rgb(Iobs)=(0,0,0), rgb(Diff)=(3800,44400,4000) +X SetAxis bottom 10.30, 164.85 +X Modify lsize(Iobs)=2 +X Modify offset(Diff)={0, -545} +X Modify wbRGB=(48483,64909,65535), gbRGB=(64612,65535,49415) +X Modify mirror(left)=2, mirror(bottom)=2 +X Modify gfSize=12 +X Append excl1 vs Excrg1 +X Modify mode(excl1)=7, hbFill(excl1)=4 +X Modify rgb(excl1)=(6421,62320,64794) +X Append excl2 vs Excrg2 +X Modify mode(excl2)=7, hbFill(excl2)=4 +X Modify rgb(excl2)=(6421,62320,64794) +X Append tik1 vs Phase1 +X Modify mode(tik1)=1 +X TextBox /F=2/S=3/A=RT "Files: lbco\rDate of fit: \Z09 11/06/2026/ 19:44:31.0\Z12\rLBCO\rChi2 = 1.40" +X Label left "\Z14Intensity" +X Label bottom "\Z142-Theta (in degrees)" +X TileWindows/O=1/C +X ShowInfo +X | Title of data set: La0.5Ba0.5CoO3 +X | Date of run: 11/06/2026 / 19:44:31.0 +X Beep +X Beep diff --git a/docs/docs/verification/fullprof/pd-neut-cwl_pv-march_lbco/lbco.sum b/docs/docs/verification/fullprof/pd-neut-cwl_pv-march_lbco/lbco.sum new file mode 100644 index 000000000..d24ed60a4 --- /dev/null +++ b/docs/docs/verification/fullprof/pd-neut-cwl_pv-march_lbco/lbco.sum @@ -0,0 +1,136 @@ + + + ********************************************************** + ** PROGRAM FullProf.2k (Version 8.40 - Feb2026-ILL JRC) ** + ********************************************************** + M U L T I -- P A T T E R N + Rietveld, Profile Matching & Integrated Intensity + Refinement of X-ray and/or Neutron Data + + + Date: 11/06/2026 Time: 19:44:30.134 + + => PCR file code: lbco + => DAT file code: lbco -> Relative contribution: 1.0000 + => Title: La0.5Ba0.5CoO3 + + ==> CONDITIONS OF THIS RUN FOR PATTERN No.: 1 + + => Global Refinement of neutron powder data + => The 7th default profile function was selected + + => X-Y type of data: 2theta/TOF/E(Kev) Intens sigma for pattern: 1 + => Analysis of refinement at the end + => Wavelengths: 1.49400 1.49400 + => Cos(Monochromator angle)= 0.0000 + => Absorption correction (AC), muR-eff = 0.0000 0.0000 + => Base of peaks: 2.0*HW* 30.00 + ==> Angular range, step and number of points: + 2Thmin: 10.300000 2Thmax: 164.850006 Step: 0.050018 No. of points: 3092 + =>-------> Pattern# 1 + => Crystal Structure Refinement for phase: 1 + => The density (volumic mass) of phase 1 is: 6.879 g/cm3 + => Scor: 1.5961 + + ==> RESULTS OF REFINEMENT: + + + => No. of fitted parameters: 0 + + +------------------------------------------------------------------------------ + => Phase No. 1 LBCO P m -3 m +------------------------------------------------------------------------------ + + => No. of reflections for pattern#: 1: 30 + + + ==> ATOM PARAMETERS: + + Name x sx y sy z sz B sB occ. socc. Mult + La 0.00000( 0) 0.00000( 0) 0.00000( 0) 0.575( 0) 0.010( 0) 1 + Ba 0.00000( 0) 0.00000( 0) 0.00000( 0) 0.575( 0) 0.010( 0) 1 + Co 0.50000( 0) 0.50000( 0) 0.50000( 0) 0.260( 0) 0.021( 0) 1 + O 0.00000( 0) 0.50000( 0) 0.50000( 0) 1.367( 0) 0.061( 0) 3 + + ==> PROFILE PARAMETERS FOR PATTERN# 1 + + => Cell parameters : + 3.89079 0.00000 + 3.89079 0.00000 + 3.89079 0.00000 + 90.00000 0.00000 + 90.00000 0.00000 + 90.00000 0.00000 + + => overall scale factor : 9.405870 0.000000 + => Eta(p-v) or m(p-vii) : 0.00000 0.00000 + => Overall tem. factor : 0.00000 0.00000 + => Halfwidth parameters : 0.08155 0.00000 + -0.11535 0.00000 + 0.12112 0.00000 + => Preferred orientation: 1.20000 0.00000 + 0.00000 0.00000 + => Asymmetry parameters : 0.00000 0.00000 + 0.00000 0.00000 + 0.00000 0.00000 + 0.00000 0.00000 + => X and y parameters : 0.00000 0.00000 + 0.08304 0.00000 + => Strain parameters : 0.00000 0.00000 + 0.00000 0.00000 + 0.00000 0.00000 + => Size parameters (G,L): 0.00000 0.00000 + 0.00000 0.00000 + + => Add. shape parameters: + 0.00000 0.00000 + 0.00000 0.00000 + + + + ==> GLOBAL PARAMETERS FOR PATTERN# 1 + + + => Zero-point: 0.6204 0.0000 + => Cos(2theta)-shift parameter : 0.0000 0.0000 + => Sin(2theta)-shift parameter : 0.0000 0.0000 + + ==> RELIABILITY FACTORS WITH ALL NON-EXCLUDED POINTS FOR PATTERN: 1 + + => Cycle: 1 => MaxCycle:500 + => N-P+C: 3091 + => R-factors (not corrected for background) for Pattern: 1 + => Rp: 5.99 Rwp: 7.52 Rexp: 6.36 Chi2: 1.40 L.S. refinement + => Conventional Rietveld R-factors for Pattern: 1 + => Rp: 22.6 Rwp: 16.8 Rexp: 14.20 Chi2: 1.40 + => Deviance: 0.412E+04 Dev* : 1.331 + => DW-Stat.: 1.4487 DW-exp: 1.8882 + => N-sigma of the GoF: 15.688 + + ==> RELIABILITY FACTORS FOR POINTS WITH BRAGG CONTRIBUTIONS FOR PATTERN: 1 + + => N-P+C: 3061 + => R-factors (not corrected for background) for Pattern: 1 + => Rp: 5.99 Rwp: 7.53 Rexp: 6.35 Chi2: 1.40 L.S. refinement + => Conventional Rietveld R-factors for Pattern: 1 + => Rp: 22.4 Rwp: 16.7 Rexp: 14.13 Chi2: 1.40 + => Deviance: 0.409E+04 Dev* : 1.334 + => DW-Stat.: 1.4578 DW-exp: 1.8877 + => N-sigma of the GoF: 15.803 + + => Global user-weigthed Chi2 (Bragg contrib.): 1.41 + + ----------------------------------------------------- + BRAGG R-Factors and weight fractions for Pattern # 1 + ----------------------------------------------------- + + => Phase: 1 LBCO + => Bragg R-factor: 6.33 Vol: 58.900( 0.000) Fract(%): 100.00( 0.00) + => Rf-factor= 5.55 ATZ: 244.138 Brindley: 1.0000 + + + CPU Time: 1.000 seconds + 0.017 minutes + + => Run finished at: Date: 11/06/2026 Time: 19:44:31.133 diff --git a/docs/docs/verification/pd-neut-cwl_pv-march_lbco.ipynb b/docs/docs/verification/pd-neut-cwl_pv-march_lbco.ipynb new file mode 100644 index 000000000..f06fd857a --- /dev/null +++ b/docs/docs/verification/pd-neut-cwl_pv-march_lbco.ipynb @@ -0,0 +1,325 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "0", + "metadata": { + "tags": [ + "hide-in-docs" + ] + }, + "outputs": [], + "source": [ + "# Check whether easydiffraction is installed; install it if needed.\n", + "# Required for remote environments such as Google Colab.\n", + "import importlib.util\n", + "\n", + "if importlib.util.find_spec('easydiffraction') is None:\n", + " %pip install easydiffraction" + ] + }, + { + "cell_type": "markdown", + "id": "1", + "metadata": {}, + "source": [ + "# LBCO — preferred orientation (March–Dollase): ed-cryspy VS FullProf\n", + "\n", + "This page documents a **known divergence**, not an agreement. FullProf\n", + "applies the *standard* March–Dollase preferred-orientation correction\n", + "(its `.out` reports \"March-Dollase model for preferred orientation\").\n", + "CrysPy 0.11.0 applies a *different*, non-intensity-conserving \"Modified\n", + "March\" function. Feeding the **same** nominal March coefficient `r` to\n", + "both therefore produces visibly different patterns, and no single `r`\n", + "reconciles them. See the upstream report prepared in\n", + "`tmp/cryspy/preferred-orientation/` and ADR\n", + "`preferred-orientation-category` (Decision 6)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2", + "metadata": {}, + "outputs": [], + "source": [ + "import easydiffraction as ed\n", + "from easydiffraction import ExperimentFactory\n", + "from easydiffraction import StructureFactory\n", + "from easydiffraction.analysis import verification as verify" + ] + }, + { + "cell_type": "markdown", + "id": "3", + "metadata": {}, + "source": [ + "## Build the project" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4", + "metadata": {}, + "outputs": [], + "source": [ + "project = ed.Project()" + ] + }, + { + "cell_type": "markdown", + "id": "5", + "metadata": {}, + "source": [ + "## Define the structure (same La0.5Ba0.5CoO3 as `pd-neut-cwl_pv_lbco`)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6", + "metadata": {}, + "outputs": [], + "source": [ + "structure = StructureFactory.from_scratch(name='lbco')\n", + "\n", + "structure.space_group.name_h_m = 'P m -3 m' # FullProf Space group symbol\n", + "\n", + "structure.cell.length_a = 3.890790 # FullProf a\n", + "\n", + "structure.atom_sites.create(\n", + " label='La',\n", + " type_symbol='La',\n", + " fract_x=0.0,\n", + " fract_y=0.0,\n", + " fract_z=0.0,\n", + " occupancy=0.5,\n", + " adp_type='Biso',\n", + " adp_iso=0.57511,\n", + ")\n", + "structure.atom_sites.create(\n", + " label='Ba',\n", + " type_symbol='Ba',\n", + " fract_x=0.0,\n", + " fract_y=0.0,\n", + " fract_z=0.0,\n", + " occupancy=0.5,\n", + " adp_type='Biso',\n", + " adp_iso=0.57511,\n", + ")\n", + "structure.atom_sites.create(\n", + " label='Co',\n", + " type_symbol='Co',\n", + " fract_x=0.5,\n", + " fract_y=0.5,\n", + " fract_z=0.5,\n", + " occupancy=1.0,\n", + " adp_type='Biso',\n", + " adp_iso=0.26023,\n", + ")\n", + "structure.atom_sites.create(\n", + " label='O',\n", + " type_symbol='O',\n", + " fract_x=0.0,\n", + " fract_y=0.5,\n", + " fract_z=0.5,\n", + " occupancy=0.97856,\n", + " adp_type='Biso',\n", + " adp_iso=1.36662,\n", + ")\n", + "\n", + "project.structures.add(structure)" + ] + }, + { + "cell_type": "markdown", + "id": "7", + "metadata": {}, + "source": [ + "## Load the FullProf reference (March–Dollase, `Pref1 = 1.2`, axis `[0 0 1]`)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8", + "metadata": {}, + "outputs": [], + "source": [ + "FULLPROF_PROJECT_DIR = 'pd-neut-cwl_pv-march_lbco'\n", + "FULLPROF_PRF_FILE = 'lbco.prf'\n", + "FULLPROF_BAC_FILE = 'lbco.bac'\n", + "FULLPROF_ZERO = 0.62040 # FullProf Zero\n", + "FULLPROF_SCALE = 9.405870 # FullProf Scale\n", + "FULLPROF_WAVELENGTH = 1.494000 # FullProf Lambda\n", + "FULLPROF_U = 0.081547 # FullProf U\n", + "FULLPROF_V = -0.115345 # FullProf V\n", + "FULLPROF_W = 0.121125 # FullProf W\n", + "FULLPROF_X = 0.0 # FullProf X\n", + "FULLPROF_Y = 0.083038 # FullProf Y\n", + "FULLPROF_MARCH_R = 1.2 # FullProf Pref1 (March coefficient)\n", + "\n", + "x, calc_fullprof = verify.load_fullprof_calc_profile(\n", + " FULLPROF_PROJECT_DIR,\n", + " FULLPROF_PRF_FILE,\n", + " FULLPROF_BAC_FILE,\n", + " FULLPROF_ZERO,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "9", + "metadata": {}, + "source": [ + "## Create the experiment" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "10", + "metadata": {}, + "outputs": [], + "source": [ + "experiment = ExperimentFactory.from_scratch(\n", + " name='lbco',\n", + " sample_form='powder',\n", + " beam_mode='constant wavelength',\n", + " radiation_probe='neutron',\n", + " scattering_type='bragg',\n", + ")\n", + "verify.set_reference_as_measured(experiment, x, calc_fullprof)\n", + "\n", + "experiment.linked_phases.create(id='lbco', scale=FULLPROF_SCALE)\n", + "\n", + "experiment.instrument.setup_wavelength = FULLPROF_WAVELENGTH\n", + "experiment.instrument.calib_twotheta_offset = FULLPROF_ZERO\n", + "\n", + "experiment.peak.type = 'pseudo-voigt'\n", + "experiment.peak.broad_gauss_u = FULLPROF_U\n", + "experiment.peak.broad_gauss_v = FULLPROF_V\n", + "experiment.peak.broad_gauss_w = FULLPROF_W\n", + "experiment.peak.broad_lorentz_x = FULLPROF_X\n", + "experiment.peak.broad_lorentz_y = FULLPROF_Y\n", + "\n", + "# Same nominal March coefficient and direction as FullProf.\n", + "experiment.preferred_orientation.create(\n", + " phase_id='lbco',\n", + " r=FULLPROF_MARCH_R,\n", + " index_h=0,\n", + " index_k=0,\n", + " index_l=1,\n", + ")\n", + "\n", + "project.experiments.add(experiment)\n", + "experiment.calculator.type = 'cryspy'" + ] + }, + { + "cell_type": "markdown", + "id": "11", + "metadata": {}, + "source": [ + "## ed-cryspy (`r = 1.2`) VS FullProf — same nominal March coefficient\n", + "\n", + "Despite using the identical coefficient and direction, the patterns\n", + "differ markedly: CrysPy's texture function is not the standard\n", + "March–Dollase one." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "12", + "metadata": {}, + "outputs": [], + "source": [ + "project.analysis.calculate()\n", + "calc_ed_cryspy_po = experiment.data.intensity_calc\n", + "\n", + "project.display.pattern_comparison(\n", + " 'lbco',\n", + " reference=calc_fullprof,\n", + " candidate=calc_ed_cryspy_po,\n", + " reference_label='FullProf (March–Dollase r=1.2)',\n", + " candidate_label='ed-cryspy (r=1.2)',\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "13", + "metadata": {}, + "source": [ + "## ed-cryspy (no texture, `r = 1`) VS FullProf\n", + "\n", + "Turning CrysPy's correction off (`r = 1`) is actually *closer* to the\n", + "textured FullProf pattern than feeding CrysPy the matching `r = 1.2` —\n", + "direct evidence that CrysPy's correction does not converge to\n", + "March–Dollase for any coefficient." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "14", + "metadata": {}, + "outputs": [], + "source": [ + "experiment.preferred_orientation['lbco'].r = 1.0\n", + "project.analysis.calculate()\n", + "calc_ed_cryspy_nopo = experiment.data.intensity_calc\n", + "\n", + "project.display.pattern_comparison(\n", + " 'lbco',\n", + " reference=calc_fullprof,\n", + " candidate=calc_ed_cryspy_nopo,\n", + " reference_label='FullProf (March–Dollase r=1.2)',\n", + " candidate_label='ed-cryspy (no texture)',\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "15", + "metadata": {}, + "source": [ + "## Agreement table (documents the mismatch)\n", + "\n", + "Rendered with `raise_on_failure=False` so the page builds: the metrics\n", + "are expected to be **out of tolerance** for `r = 1.2`, confirming the\n", + "CrysPy↔FullProf March–Dollase divergence. This page is a standing\n", + "reminder to revisit the mapping once CrysPy adopts the standard,\n", + "intensity-conserving function." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "16", + "metadata": {}, + "outputs": [], + "source": [ + "verify.assert_patterns_agree(\n", + " [\n", + " ('cryspy r=1.2 vs FullProf', calc_fullprof, calc_ed_cryspy_po),\n", + " ('cryspy no-texture vs FullProf', calc_fullprof, calc_ed_cryspy_nopo),\n", + " ],\n", + " raise_on_failure=False,\n", + ")" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/docs/verification/pd-neut-cwl_pv-march_lbco.py b/docs/docs/verification/pd-neut-cwl_pv-march_lbco.py new file mode 100644 index 000000000..bff7e04e8 --- /dev/null +++ b/docs/docs/verification/pd-neut-cwl_pv-march_lbco.py @@ -0,0 +1,196 @@ +# %% [markdown] +# # LBCO — preferred orientation (March–Dollase): ed-cryspy VS FullProf +# +# This page documents a **known divergence**, not an agreement. FullProf +# applies the *standard* March–Dollase preferred-orientation correction +# (its `.out` reports "March-Dollase model for preferred orientation"). +# CrysPy 0.11.0 applies a *different*, non-intensity-conserving "Modified +# March" function. Feeding the **same** nominal March coefficient `r` to +# both therefore produces visibly different patterns, and no single `r` +# reconciles them. See the upstream report prepared in +# `tmp/cryspy/preferred-orientation/` and ADR +# `preferred-orientation-category` (Decision 6). + +# %% +import easydiffraction as ed +from easydiffraction import ExperimentFactory +from easydiffraction import StructureFactory +from easydiffraction.analysis import verification as verify + +# %% [markdown] +# ## Build the project + +# %% +project = ed.Project() + +# %% [markdown] +# ## Define the structure (same La0.5Ba0.5CoO3 as `pd-neut-cwl_pv_lbco`) + +# %% +structure = StructureFactory.from_scratch(name='lbco') + +structure.space_group.name_h_m = 'P m -3 m' # FullProf Space group symbol + +structure.cell.length_a = 3.890790 # FullProf a + +structure.atom_sites.create( + label='La', + type_symbol='La', + fract_x=0.0, + fract_y=0.0, + fract_z=0.0, + occupancy=0.5, + adp_type='Biso', + adp_iso=0.57511, +) +structure.atom_sites.create( + label='Ba', + type_symbol='Ba', + fract_x=0.0, + fract_y=0.0, + fract_z=0.0, + occupancy=0.5, + adp_type='Biso', + adp_iso=0.57511, +) +structure.atom_sites.create( + label='Co', + type_symbol='Co', + fract_x=0.5, + fract_y=0.5, + fract_z=0.5, + occupancy=1.0, + adp_type='Biso', + adp_iso=0.26023, +) +structure.atom_sites.create( + label='O', + type_symbol='O', + fract_x=0.0, + fract_y=0.5, + fract_z=0.5, + occupancy=0.97856, + adp_type='Biso', + adp_iso=1.36662, +) + +project.structures.add(structure) + +# %% [markdown] +# ## Load the FullProf reference (March–Dollase, `Pref1 = 1.2`, axis `[0 0 1]`) + +# %% +FULLPROF_PROJECT_DIR = 'pd-neut-cwl_pv-march_lbco' +FULLPROF_PRF_FILE = 'lbco.prf' +FULLPROF_BAC_FILE = 'lbco.bac' +FULLPROF_ZERO = 0.62040 # FullProf Zero +FULLPROF_SCALE = 9.405870 # FullProf Scale +FULLPROF_WAVELENGTH = 1.494000 # FullProf Lambda +FULLPROF_U = 0.081547 # FullProf U +FULLPROF_V = -0.115345 # FullProf V +FULLPROF_W = 0.121125 # FullProf W +FULLPROF_X = 0.0 # FullProf X +FULLPROF_Y = 0.083038 # FullProf Y +FULLPROF_MARCH_R = 1.2 # FullProf Pref1 (March coefficient) + +x, calc_fullprof = verify.load_fullprof_calc_profile( + FULLPROF_PROJECT_DIR, + FULLPROF_PRF_FILE, + FULLPROF_BAC_FILE, + FULLPROF_ZERO, +) + +# %% [markdown] +# ## Create the experiment + +# %% +experiment = ExperimentFactory.from_scratch( + name='lbco', + sample_form='powder', + beam_mode='constant wavelength', + radiation_probe='neutron', + scattering_type='bragg', +) +verify.set_reference_as_measured(experiment, x, calc_fullprof) + +experiment.linked_phases.create(id='lbco', scale=FULLPROF_SCALE) + +experiment.instrument.setup_wavelength = FULLPROF_WAVELENGTH +experiment.instrument.calib_twotheta_offset = FULLPROF_ZERO + +experiment.peak.type = 'pseudo-voigt' +experiment.peak.broad_gauss_u = FULLPROF_U +experiment.peak.broad_gauss_v = FULLPROF_V +experiment.peak.broad_gauss_w = FULLPROF_W +experiment.peak.broad_lorentz_x = FULLPROF_X +experiment.peak.broad_lorentz_y = FULLPROF_Y + +# Same nominal March coefficient and direction as FullProf. +experiment.preferred_orientation.create( + phase_id='lbco', + r=FULLPROF_MARCH_R, + index_h=0, + index_k=0, + index_l=1, +) + +project.experiments.add(experiment) +experiment.calculator.type = 'cryspy' + +# %% [markdown] +# ## ed-cryspy (`r = 1.2`) VS FullProf — same nominal March coefficient +# +# Despite using the identical coefficient and direction, the patterns +# differ markedly: CrysPy's texture function is not the standard +# March–Dollase one. + +# %% +project.analysis.calculate() +calc_ed_cryspy_po = experiment.data.intensity_calc + +project.display.pattern_comparison( + 'lbco', + reference=calc_fullprof, + candidate=calc_ed_cryspy_po, + reference_label='FullProf (March–Dollase r=1.2)', + candidate_label='ed-cryspy (r=1.2)', +) + +# %% [markdown] +# ## ed-cryspy (no texture, `r = 1`) VS FullProf +# +# Turning CrysPy's correction off (`r = 1`) is actually *closer* to the +# textured FullProf pattern than feeding CrysPy the matching `r = 1.2` — +# direct evidence that CrysPy's correction does not converge to +# March–Dollase for any coefficient. + +# %% +experiment.preferred_orientation['lbco'].r = 1.0 +project.analysis.calculate() +calc_ed_cryspy_nopo = experiment.data.intensity_calc + +project.display.pattern_comparison( + 'lbco', + reference=calc_fullprof, + candidate=calc_ed_cryspy_nopo, + reference_label='FullProf (March–Dollase r=1.2)', + candidate_label='ed-cryspy (no texture)', +) + +# %% [markdown] +# ## Agreement table (documents the mismatch) +# +# Rendered with `raise_on_failure=False` so the page builds: the metrics +# are expected to be **out of tolerance** for `r = 1.2`, confirming the +# CrysPy↔FullProf March–Dollase divergence. This page is a standing +# reminder to revisit the mapping once CrysPy adopts the standard, +# intensity-conserving function. + +# %% +verify.assert_patterns_agree( + [ + ('cryspy r=1.2 vs FullProf', calc_fullprof, calc_ed_cryspy_po), + ('cryspy no-texture vs FullProf', calc_fullprof, calc_ed_cryspy_nopo), + ], + raise_on_failure=False, +) From c456959b52c12c881f952dc8e39babda9b750e3f Mon Sep 17 00:00:00 2001 From: Andrew Sazonov Date: Thu, 11 Jun 2026 21:08:48 +0200 Subject: [PATCH 18/35] Map preferred-orientation r to cryspy g1=1/r --- .../analysis/calculators/cryspy.py | 19 +++++++++++++++++-- .../analysis/calculators/test_cryspy.py | 7 +++++-- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/easydiffraction/analysis/calculators/cryspy.py b/src/easydiffraction/analysis/calculators/cryspy.py index ac156e914..a7814e028 100644 --- a/src/easydiffraction/analysis/calculators/cryspy.py +++ b/src/easydiffraction/analysis/calculators/cryspy.py @@ -1377,12 +1377,27 @@ def _cif_pref_orient_section( '_texture_k_ax', '_texture_l_ax', ( - f'{phase_label} {row.r.value} {row.fraction.value} ' + f'{phase_label} {_march_r_to_cryspy_g1(row.r.value)} {row.fraction.value} ' f'{row.index_h.value} {row.index_k.value} {row.index_l.value}' ), )) +def _march_r_to_cryspy_g1(r: float) -> float: + """Convert the IUCr/FullProf March coefficient ``r`` to cryspy ``g_1``. + + CrysPy's "Modified March" parametrises the March-Dollase distribution + with the **reciprocal** coefficient: ``g_1 = 1/r`` (verified against + FullProf for `r` in 0.5-1.5; the global best fit is always `1/r`). The + user-facing ``r`` therefore follows the standard IUCr/FullProf/GSAS + convention (1 = none, `<1` disk, `>1` needle) and is inverted before + it reaches the backend. CrysPy's function is additionally not + volume-normalised, but that is a constant per-phase factor absorbed by + the scale; it slightly distorts the ``fraction`` (g_2) correspondence. + """ + return 1.0 / r + + def _update_texture_in_cryspy_dict( cryspy_expt_dict: dict[str, Any], experiment: object, @@ -1405,7 +1420,7 @@ def _update_texture_in_cryspy_dict( for index, label in enumerate(cryspy_expt_dict['texture_name']): row = rows.get(str(label)) if row is not None: - cryspy_expt_dict['texture_g1'][index] = row.r.value + cryspy_expt_dict['texture_g1'][index] = _march_r_to_cryspy_g1(row.r.value) cryspy_expt_dict['texture_g2'][index] = row.fraction.value diff --git a/tests/unit/easydiffraction/analysis/calculators/test_cryspy.py b/tests/unit/easydiffraction/analysis/calculators/test_cryspy.py index bbd108292..cc5ac2b9a 100644 --- a/tests/unit/easydiffraction/analysis/calculators/test_cryspy.py +++ b/tests/unit/easydiffraction/analysis/calculators/test_cryspy.py @@ -413,7 +413,9 @@ def test_cif_pref_orient_section_emits_for_constant_wavelength(): assert '_texture_g_1' in text assert '_texture_label' in text - assert 'lbco 0.5' in text + # The row's user-facing March coefficient r=0.5 maps to cryspy + # g_1 = 1/r = 2.0 (reciprocal convention). + assert 'lbco 2.0' in text def test_cif_pref_orient_section_skips_time_of_flight(): @@ -443,7 +445,8 @@ def test_update_texture_in_cryspy_dict_patches_g1_and_g2(): } MUT._update_texture_in_cryspy_dict(cryspy_expt_dict, experiment) - assert cryspy_expt_dict['texture_g1'][0] == 0.6 + # r maps to cryspy g_1 = 1/r (reciprocal); fraction maps to g_2. + assert cryspy_expt_dict['texture_g1'][0] == pytest.approx(1.0 / 0.6) assert cryspy_expt_dict['texture_g2'][0] == 0.2 From c1b8ea6c2109ebd04884c83415ebb13e43d9b4b3 Mon Sep 17 00:00:00 2001 From: Andrew Sazonov Date: Thu, 11 Jun 2026 21:14:50 +0200 Subject: [PATCH 19/35] Use both March-Dollase parameters in LBCO verification --- .../pd-neut-cwl_pv-march_lbco/lbco.pcr | 4 +- .../pd-neut-cwl_pv-march_lbco/lbco.prf | 4640 ++++++++--------- .../pd-neut-cwl_pv-march_lbco/lbco.sum | 38 +- .../pd-neut-cwl_pv-march_lbco.ipynb | 83 +- .../verification/pd-neut-cwl_pv-march_lbco.py | 83 +- 5 files changed, 2429 insertions(+), 2419 deletions(-) diff --git a/docs/docs/verification/fullprof/pd-neut-cwl_pv-march_lbco/lbco.pcr b/docs/docs/verification/fullprof/pd-neut-cwl_pv-march_lbco/lbco.pcr index 6af100db2..7dd04b0f3 100644 --- a/docs/docs/verification/fullprof/pd-neut-cwl_pv-march_lbco/lbco.pcr +++ b/docs/docs/verification/fullprof/pd-neut-cwl_pv-march_lbco/lbco.pcr @@ -1,5 +1,5 @@ COMM La0.5Ba0.5CoO3 -! Current global Chi2 (Bragg contrib.) = 1.413 +! Current global Chi2 (Bragg contrib.) = 1.363 ! Files => DAT-file: lbco.dat, PCR-file: lbco !Job Npr Nph Nba Nex Nsc Nor Dum Iwg Ilo Ias Res Ste Nre Cry Uni Cor Opt Aut 1 7 1 5 2 0 1 0 0 0 0 0 0 0 0 0 0 1 1 @@ -59,7 +59,7 @@ O O 0.00000 0.50000 0.50000 1.36662 0.06116 0 0 0 0 3.890790 3.890790 3.890790 90.000000 90.000000 90.000000 #box -0.25 1.25 -0.15 1.15 -0.15 1.15 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 ! Pref1 Pref2 Asy1 Asy2 Asy3 Asy4 S_L D_L - 1.20000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + 1.20000 0.30000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 ! 2Th1/TOF1 2Th2/TOF2 Pattern to plot 10.300 155.450 1 diff --git a/docs/docs/verification/fullprof/pd-neut-cwl_pv-march_lbco/lbco.prf b/docs/docs/verification/fullprof/pd-neut-cwl_pv-march_lbco/lbco.prf index 9c28f8b37..5fac71a03 100644 --- a/docs/docs/verification/fullprof/pd-neut-cwl_pv-march_lbco/lbco.prf +++ b/docs/docs/verification/fullprof/pd-neut-cwl_pv-march_lbco/lbco.prf @@ -111,7 +111,7 @@ BEGIN 15.650 173.00 167.62 5.38 15.700 177.00 167.61 9.39 15.750 184.00 167.60 16.40 - 15.800 173.00 167.59 5.41 + 15.800 173.00 167.58 5.42 15.850 182.00 167.57 14.43 15.900 156.00 167.56 -11.56 15.950 152.00 167.55 -15.55 @@ -144,7 +144,7 @@ BEGIN 17.300 165.00 167.22 -2.22 17.350 171.00 167.21 3.79 17.400 171.00 167.20 3.80 - 17.450 162.00 167.19 -5.19 + 17.450 162.00 167.18 -5.18 17.500 161.00 167.17 -6.17 17.550 177.00 167.16 9.84 17.600 176.00 167.15 8.85 @@ -159,7 +159,7 @@ BEGIN 18.050 144.00 167.04 -23.04 18.100 148.00 167.03 -19.03 18.150 169.00 167.02 1.98 - 18.200 162.00 167.01 -5.01 + 18.200 162.00 167.00 -5.00 18.250 171.00 166.99 4.01 18.300 155.00 166.98 -11.98 18.350 143.00 166.97 -23.97 @@ -199,7 +199,7 @@ BEGIN 20.050 166.00 166.58 -0.58 20.100 172.00 166.57 5.43 20.150 148.00 166.56 -18.56 - 20.200 161.00 166.55 -5.55 + 20.200 161.00 166.54 -5.54 20.250 160.00 166.53 -6.53 20.300 185.00 166.52 18.48 20.350 165.00 166.51 -1.51 @@ -207,93 +207,93 @@ BEGIN 20.450 172.00 166.49 5.51 20.500 170.00 166.48 3.52 20.550 180.00 166.47 13.53 - 20.600 184.00 166.47 17.53 - 20.650 164.00 166.46 -2.46 + 20.600 184.00 166.46 17.54 + 20.650 164.00 166.45 -2.45 20.700 177.00 166.45 10.55 20.750 150.00 166.44 -16.44 20.800 176.00 166.43 9.57 20.850 174.00 166.42 7.58 20.900 173.00 166.41 6.59 - 20.950 167.00 166.41 0.59 + 20.950 167.00 166.40 0.60 21.000 158.00 166.40 -8.40 21.050 174.00 166.39 7.61 - 21.100 160.00 166.39 -6.39 + 21.100 160.00 166.38 -6.38 21.150 174.00 166.38 7.62 21.200 160.00 166.37 -6.37 21.250 182.00 166.37 15.63 - 21.300 155.00 166.37 -11.37 + 21.300 155.00 166.36 -11.36 21.350 182.00 166.36 15.64 21.400 157.00 166.36 -9.36 21.450 174.00 166.36 7.64 21.500 173.00 166.38 6.62 21.550 165.00 166.38 -1.38 - 21.600 182.00 166.39 15.61 + 21.600 182.00 166.38 15.62 21.650 176.00 166.39 9.61 21.700 150.00 166.40 -16.40 - 21.750 162.00 166.42 -4.42 + 21.750 162.00 166.41 -4.41 21.800 172.00 166.43 5.57 21.850 162.00 166.45 -4.45 - 21.900 171.00 166.48 4.52 + 21.900 171.00 166.47 4.53 21.950 165.00 166.51 -1.51 - 22.000 180.00 166.56 13.44 - 22.050 167.00 166.61 0.39 - 22.100 159.00 166.68 -7.68 - 22.150 159.00 166.78 -7.78 - 22.200 160.00 166.92 -6.92 - 22.250 174.00 167.16 6.84 - 22.300 175.00 167.60 7.40 - 22.350 172.00 168.43 3.57 - 22.400 176.00 169.95 6.05 - 22.450 140.00 172.58 -32.58 - 22.500 163.00 176.69 -13.69 - 22.550 180.00 182.44 -2.44 - 22.600 211.00 189.52 21.48 - 22.650 190.00 196.94 -6.94 - 22.700 179.00 203.05 -24.05 - 22.750 195.00 205.94 -10.94 - 22.800 198.00 204.46 -6.46 - 22.850 181.00 199.21 -18.21 - 22.900 203.00 192.01 10.99 - 22.950 193.00 184.65 8.35 - 23.000 155.00 178.35 -23.35 - 23.050 159.00 173.65 -14.65 - 23.100 184.00 170.54 13.46 - 23.150 145.00 168.66 -23.66 - 23.200 145.00 167.61 -22.61 - 23.250 179.00 167.05 11.95 - 23.300 185.00 166.73 18.27 - 23.350 168.00 166.54 1.46 - 23.400 185.00 166.40 18.60 - 23.450 170.00 166.30 3.70 - 23.500 174.00 166.22 7.78 - 23.550 164.00 166.15 -2.15 - 23.600 168.00 166.09 1.91 + 22.000 180.00 166.55 13.45 + 22.050 167.00 166.60 0.40 + 22.100 159.00 166.67 -7.67 + 22.150 159.00 166.77 -7.77 + 22.200 160.00 166.91 -6.91 + 22.250 174.00 167.14 6.86 + 22.300 175.00 167.57 7.43 + 22.350 172.00 168.38 3.62 + 22.400 176.00 169.88 6.12 + 22.450 140.00 172.45 -32.45 + 22.500 163.00 176.48 -13.48 + 22.550 180.00 182.12 -2.12 + 22.600 211.00 189.06 21.94 + 22.650 190.00 196.33 -6.33 + 22.700 179.00 202.32 -23.32 + 22.750 195.00 205.16 -10.16 + 22.800 198.00 203.71 -5.71 + 22.850 181.00 198.56 -17.56 + 22.900 203.00 191.50 11.50 + 22.950 193.00 184.28 8.72 + 23.000 155.00 178.11 -23.11 + 23.050 159.00 173.50 -14.50 + 23.100 184.00 170.44 13.56 + 23.150 145.00 168.61 -23.61 + 23.200 145.00 167.58 -22.58 + 23.250 179.00 167.02 11.98 + 23.300 185.00 166.71 18.29 + 23.350 168.00 166.52 1.48 + 23.400 185.00 166.39 18.61 + 23.450 170.00 166.29 3.71 + 23.500 174.00 166.21 7.79 + 23.550 164.00 166.14 -2.14 + 23.600 168.00 166.08 1.92 23.650 185.00 166.03 18.97 - 23.700 183.00 165.99 17.01 + 23.700 183.00 165.98 17.02 23.750 172.00 165.94 6.06 - 23.800 156.00 165.91 -9.91 + 23.800 156.00 165.90 -9.90 23.850 182.00 165.87 16.13 - 23.900 182.00 165.84 16.16 + 23.900 182.00 165.83 16.17 23.950 149.00 165.81 -16.81 24.000 160.00 165.78 -5.78 - 24.050 168.00 165.76 2.24 + 24.050 168.00 165.75 2.25 24.100 178.00 165.73 12.27 24.150 169.00 165.71 3.29 - 24.200 172.00 165.69 6.31 - 24.250 170.00 165.67 4.33 - 24.300 161.00 165.65 -4.65 - 24.350 168.00 165.63 2.37 + 24.200 172.00 165.68 6.32 + 24.250 170.00 165.66 4.34 + 24.300 161.00 165.64 -4.64 + 24.350 168.00 165.62 2.38 24.400 162.00 165.61 -3.61 24.450 157.00 165.59 -8.59 24.500 162.00 165.57 -3.57 - 24.550 159.00 165.56 -6.56 + 24.550 159.00 165.55 -6.55 24.600 168.00 165.54 2.46 24.650 170.00 165.52 4.48 24.700 166.00 165.51 0.49 24.750 146.00 165.49 -19.49 - 24.800 154.00 165.48 -11.48 + 24.800 154.00 165.47 -11.47 24.850 154.00 165.46 -11.46 - 24.900 198.00 165.45 32.55 + 24.900 198.00 165.44 32.56 24.950 195.00 165.43 29.57 25.000 148.00 165.42 -17.42 25.050 161.00 165.40 -4.40 @@ -376,521 +376,521 @@ BEGIN 28.900 163.00 164.54 -1.54 28.950 133.00 164.54 -31.54 29.000 169.00 164.75 4.25 - 29.050 162.00 164.74 -2.74 + 29.050 162.00 164.75 -2.75 29.100 161.00 164.74 -3.74 - 29.150 163.00 164.73 -1.73 + 29.150 163.00 164.74 -1.74 29.200 144.00 164.73 -20.73 29.250 178.00 164.73 13.27 - 29.300 161.00 164.72 -3.72 - 29.350 141.00 164.72 -23.72 - 29.400 169.00 164.72 4.28 + 29.300 161.00 164.73 -3.73 + 29.350 141.00 164.73 -23.73 + 29.400 169.00 164.73 4.27 29.450 160.00 164.72 -4.72 29.500 177.00 164.72 12.28 29.550 174.00 164.72 9.28 29.600 157.00 164.72 -7.72 29.650 176.00 164.72 11.28 - 29.700 179.00 164.72 14.28 - 29.750 166.00 164.72 1.28 + 29.700 179.00 164.73 14.27 + 29.750 166.00 164.73 1.27 29.800 162.00 164.73 -2.73 - 29.850 147.00 164.73 -17.73 + 29.850 147.00 164.74 -17.74 29.900 152.00 164.74 -12.74 - 29.950 171.00 164.74 6.26 - 30.000 178.00 164.75 13.25 + 29.950 171.00 164.75 6.25 + 30.000 178.00 164.76 13.24 30.050 208.00 164.78 43.22 30.100 178.00 164.81 13.19 - 30.150 149.00 164.84 -15.84 - 30.200 181.00 164.87 16.13 + 30.150 149.00 164.85 -15.85 + 30.200 181.00 164.88 16.12 30.250 162.00 164.91 -2.91 - 30.300 177.00 164.94 12.06 - 30.350 165.00 164.98 0.02 - 30.400 177.00 165.02 11.98 - 30.450 158.00 165.07 -7.07 + 30.300 177.00 164.95 12.05 + 30.350 165.00 164.99 0.01 + 30.400 177.00 165.03 11.97 + 30.450 158.00 165.08 -7.08 30.500 157.00 165.12 -8.12 30.550 163.00 165.17 -2.17 - 30.600 144.00 165.22 -21.22 - 30.650 156.00 165.28 -9.28 - 30.700 176.00 165.35 10.65 - 30.750 179.00 165.42 13.58 - 30.800 174.00 165.50 8.50 - 30.850 182.00 165.58 16.42 - 30.900 161.00 165.68 -4.68 - 30.950 166.00 165.78 0.22 - 31.000 168.00 165.90 2.10 - 31.050 153.00 166.03 -13.03 - 31.100 156.00 166.19 -10.19 - 31.150 174.00 166.36 7.64 - 31.200 167.00 166.55 0.45 - 31.250 192.00 166.78 25.22 - 31.300 154.00 167.05 -13.05 - 31.350 166.00 167.36 -1.36 - 31.400 169.00 167.74 1.26 - 31.450 185.00 168.19 16.81 - 31.500 165.00 168.77 -3.77 - 31.550 163.00 169.53 -6.53 - 31.600 173.00 170.66 2.34 - 31.650 169.00 172.54 -3.54 - 31.700 188.00 175.98 12.02 - 31.750 195.00 182.44 12.56 - 31.800 195.00 194.15 0.85 - 31.850 221.00 213.77 7.23 - 31.900 229.00 243.35 -14.35 - 31.950 302.00 282.76 19.24 - 32.000 327.00 328.04 -1.04 - 32.050 380.00 370.72 9.28 - 32.100 358.00 398.75 -40.75 - 32.150 394.00 401.34 -7.34 - 32.200 373.00 377.36 -4.36 - 32.250 362.00 336.42 25.58 - 32.300 306.00 290.87 15.13 - 32.350 276.00 249.99 26.01 - 32.400 237.00 218.53 18.47 - 32.450 203.00 197.24 5.76 - 32.500 178.00 184.31 -6.31 - 32.550 199.00 177.10 21.90 - 32.600 167.00 173.26 -6.26 - 32.650 185.00 171.20 13.80 - 32.700 180.00 170.00 10.00 - 32.750 178.00 169.21 8.79 - 32.800 145.00 168.64 -23.64 - 32.850 176.00 168.19 7.81 - 32.900 177.00 167.83 9.17 - 32.950 182.00 167.54 14.46 - 33.000 167.00 167.29 -0.29 - 33.050 152.00 167.08 -15.08 - 33.100 144.00 166.91 -22.91 - 33.150 170.00 166.76 3.24 - 33.200 156.00 166.63 -10.63 - 33.250 154.00 166.52 -12.52 - 33.300 180.00 166.43 13.57 - 33.350 176.00 166.35 9.65 - 33.400 183.00 166.28 16.72 - 33.450 162.00 166.22 -4.22 - 33.500 180.00 166.17 13.83 - 33.550 165.00 166.13 -1.13 - 33.600 174.00 166.09 7.91 - 33.650 179.00 166.06 12.94 - 33.700 152.00 166.03 -14.03 - 33.750 182.00 166.01 15.99 - 33.800 184.00 165.99 18.01 - 33.850 166.00 165.98 0.02 - 33.900 182.00 165.96 16.04 - 33.950 162.00 165.96 -3.96 - 34.000 174.00 165.95 8.05 - 34.050 153.00 165.95 -12.95 - 34.100 182.00 165.95 16.05 - 34.150 180.00 165.95 14.05 - 34.200 167.00 165.95 1.05 - 34.250 173.00 165.96 7.04 - 34.300 153.00 165.96 -12.96 - 34.350 160.00 165.97 -5.97 - 34.400 180.00 165.98 14.02 - 34.450 168.00 165.99 2.01 - 34.500 167.00 166.01 0.99 - 34.550 176.00 166.02 9.98 - 34.600 165.00 166.08 -1.08 - 34.650 174.00 166.09 7.91 - 34.700 161.00 166.11 -5.11 - 34.750 178.00 166.13 11.87 - 34.800 170.00 166.15 3.85 - 34.850 166.00 166.18 -0.18 - 34.900 173.00 166.20 6.80 - 34.950 158.00 166.22 -8.22 - 35.000 166.00 166.25 -0.25 - 35.050 170.00 166.28 3.72 - 35.100 162.00 166.30 -4.30 - 35.150 183.00 166.33 16.67 - 35.200 176.00 166.37 9.63 - 35.250 171.00 166.40 4.60 - 35.300 174.00 166.43 7.57 - 35.350 179.00 166.47 12.53 - 35.400 176.00 166.50 9.50 - 35.450 193.00 166.76 26.24 - 35.500 180.00 166.81 13.19 - 35.550 188.00 166.85 21.15 - 35.600 177.00 166.89 10.11 - 35.650 176.00 166.94 9.06 - 35.700 171.00 166.99 4.01 - 35.750 185.00 167.04 17.96 - 35.800 178.00 167.10 10.90 - 35.850 152.00 167.15 -15.15 - 35.900 160.00 167.21 -7.21 - 35.950 187.00 167.27 19.73 - 36.000 167.00 167.33 -0.33 - 36.050 181.00 167.40 13.60 - 36.100 166.00 167.46 -1.46 - 36.150 165.00 167.53 -2.53 - 36.200 170.00 167.61 2.39 - 36.250 197.00 167.68 29.32 - 36.300 179.00 167.76 11.24 - 36.350 172.00 167.85 4.15 - 36.400 181.00 167.94 13.06 - 36.450 174.00 168.03 5.97 - 36.500 162.00 168.13 -6.13 - 36.550 166.00 168.23 -2.23 - 36.600 158.00 168.33 -10.33 - 36.650 199.00 168.44 30.56 - 36.700 188.00 168.56 19.44 - 36.750 177.00 168.69 8.31 - 36.800 167.00 168.82 -1.82 - 36.850 156.00 168.95 -12.95 - 36.900 174.00 169.10 4.90 - 36.950 176.00 169.25 6.75 - 37.000 152.00 169.41 -17.41 - 37.050 191.00 169.58 21.42 - 37.100 151.00 169.77 -18.77 - 37.150 202.00 169.96 32.04 - 37.200 191.00 170.16 20.84 - 37.250 161.00 170.38 -9.38 - 37.300 199.00 170.62 28.38 - 37.350 175.00 170.87 4.13 - 37.400 146.00 171.13 -25.13 - 37.450 181.00 171.42 9.58 - 37.500 221.00 171.73 49.27 - 37.550 194.00 172.06 21.94 - 37.600 158.00 172.42 -14.42 - 37.650 171.00 172.80 -1.80 - 37.700 172.00 173.22 -1.22 - 37.750 168.00 173.68 -5.68 - 37.800 192.00 174.17 17.83 - 37.850 185.00 174.71 10.29 - 37.900 193.00 175.30 17.70 - 37.950 178.00 175.95 2.05 - 38.000 195.00 176.66 18.34 - 38.050 175.00 177.44 -2.44 - 38.100 178.00 178.32 -0.32 - 38.150 173.00 179.28 -6.28 - 38.200 195.00 180.37 14.63 - 38.250 194.00 181.58 12.42 - 38.300 191.00 182.95 8.05 - 38.350 178.00 184.49 -6.49 - 38.400 184.00 186.25 -2.25 - 38.450 186.00 188.27 -2.27 - 38.500 202.00 190.59 11.41 - 38.550 200.00 193.28 6.72 - 38.600 210.00 196.42 13.58 - 38.650 198.00 200.13 -2.13 - 38.700 225.00 204.53 20.47 - 38.750 209.00 209.83 -0.83 - 38.800 229.00 216.33 12.67 - 38.850 197.00 224.55 -27.55 - 38.900 220.00 235.63 -15.63 - 38.950 215.00 252.18 -37.18 - 39.000 242.00 280.17 -38.17 - 39.050 340.00 331.95 8.05 - 39.100 441.00 429.72 11.28 - 39.150 654.00 606.70 47.30 - 39.200 962.00 901.01 60.99 - 39.250 1477.00 1339.10 137.90 - 39.300 2012.00 1910.95 101.05 - 39.350 2634.00 2547.68 86.32 - 39.400 3115.00 3113.61 1.39 - 39.450 3467.00 3428.47 38.53 - 39.500 3532.00 3359.22 172.78 - 39.550 3337.00 2937.56 399.44 - 39.600 2595.00 2328.16 266.84 - 39.650 1943.00 1701.78 241.22 - 39.700 1251.00 1171.61 79.39 - 39.750 828.00 784.36 43.64 - 39.800 525.00 534.57 -9.57 - 39.850 377.00 389.22 -12.22 - 39.900 294.00 310.55 -16.55 - 39.950 233.00 268.95 -35.95 - 40.000 233.00 245.93 -12.93 - 40.050 253.00 231.74 21.26 - 40.100 253.00 221.88 31.12 - 40.150 213.00 214.37 -1.37 - 40.200 196.00 208.37 -12.37 - 40.250 222.00 203.43 18.57 - 40.300 172.00 199.32 -27.32 - 40.350 218.00 195.86 22.14 - 40.400 206.00 192.92 13.08 - 40.450 195.00 190.40 4.60 - 40.500 209.00 188.22 20.78 - 40.550 192.00 186.34 5.66 - 40.600 197.00 184.69 12.31 - 40.650 188.00 183.24 4.76 - 40.700 202.00 181.97 20.03 - 40.750 208.00 180.84 27.16 - 40.800 184.00 179.84 4.16 - 40.850 177.00 178.94 -1.94 - 40.900 202.00 178.14 23.86 - 40.950 198.00 177.42 20.58 - 41.000 203.00 176.77 26.23 - 41.050 193.00 176.18 16.82 - 41.100 188.00 175.65 12.35 - 41.150 211.00 175.17 35.83 - 41.200 189.00 174.73 14.27 - 41.250 200.00 174.33 25.67 - 41.300 198.00 173.97 24.03 - 41.350 203.00 173.64 29.36 - 41.400 197.00 173.33 23.67 - 41.450 190.00 173.06 16.94 - 41.500 212.00 172.80 39.20 - 41.550 185.00 172.57 12.43 - 41.600 228.00 172.36 55.64 - 41.650 167.00 172.16 -5.16 - 41.700 207.00 171.98 35.02 - 41.750 187.00 171.82 15.18 - 41.800 190.00 171.67 18.33 - 41.850 192.00 171.54 20.46 - 41.900 185.00 171.42 13.58 - 41.950 161.00 171.30 -10.30 - 42.000 187.00 171.20 15.80 - 42.050 191.00 171.11 19.89 - 42.100 159.00 171.03 -12.03 - 42.150 170.00 170.96 -0.96 - 42.200 182.00 170.90 11.10 - 42.250 186.00 170.85 15.15 - 42.300 192.00 170.80 21.20 - 42.350 178.00 170.76 7.24 - 42.400 186.00 170.73 15.27 + 30.600 144.00 165.23 -21.23 + 30.650 156.00 165.29 -9.29 + 30.700 176.00 165.36 10.64 + 30.750 179.00 165.43 13.57 + 30.800 174.00 165.51 8.49 + 30.850 182.00 165.59 16.41 + 30.900 161.00 165.69 -4.69 + 30.950 166.00 165.79 0.21 + 31.000 168.00 165.91 2.09 + 31.050 153.00 166.05 -13.05 + 31.100 156.00 166.20 -10.20 + 31.150 174.00 166.37 7.63 + 31.200 167.00 166.57 0.43 + 31.250 192.00 166.80 25.20 + 31.300 154.00 167.06 -13.06 + 31.350 166.00 167.38 -1.38 + 31.400 169.00 167.76 1.24 + 31.450 185.00 168.21 16.79 + 31.500 165.00 168.79 -3.79 + 31.550 163.00 169.55 -6.55 + 31.600 173.00 170.68 2.32 + 31.650 169.00 172.57 -3.57 + 31.700 188.00 176.02 11.98 + 31.750 195.00 182.51 12.49 + 31.800 195.00 194.26 0.74 + 31.850 221.00 213.95 7.05 + 31.900 229.00 243.63 -14.63 + 31.950 302.00 283.18 18.82 + 32.000 327.00 328.63 -1.63 + 32.050 380.00 371.46 8.54 + 32.100 358.00 399.59 -41.59 + 32.150 394.00 402.19 -8.19 + 32.200 373.00 378.12 -5.12 + 32.250 362.00 337.04 24.96 + 32.300 306.00 291.33 14.67 + 32.350 276.00 250.30 25.70 + 32.400 237.00 218.73 18.27 + 32.450 203.00 197.36 5.64 + 32.500 178.00 184.38 -6.38 + 32.550 199.00 177.15 21.85 + 32.600 167.00 173.30 -6.30 + 32.650 185.00 171.23 13.77 + 32.700 180.00 170.03 9.97 + 32.750 178.00 169.24 8.76 + 32.800 145.00 168.66 -23.66 + 32.850 176.00 168.21 7.79 + 32.900 177.00 167.85 9.15 + 32.950 182.00 167.55 14.45 + 33.000 167.00 167.31 -0.31 + 33.050 152.00 167.10 -15.10 + 33.100 144.00 166.92 -22.92 + 33.150 170.00 166.77 3.23 + 33.200 156.00 166.65 -10.65 + 33.250 154.00 166.54 -12.54 + 33.300 180.00 166.44 13.56 + 33.350 176.00 166.36 9.64 + 33.400 183.00 166.29 16.71 + 33.450 162.00 166.24 -4.24 + 33.500 180.00 166.19 13.81 + 33.550 165.00 166.14 -1.14 + 33.600 174.00 166.10 7.90 + 33.650 179.00 166.07 12.93 + 33.700 152.00 166.05 -14.05 + 33.750 182.00 166.02 15.98 + 33.800 184.00 166.00 18.00 + 33.850 166.00 165.99 0.01 + 33.900 182.00 165.98 16.02 + 33.950 162.00 165.97 -3.97 + 34.000 174.00 165.97 8.03 + 34.050 153.00 165.96 -12.96 + 34.100 182.00 165.96 16.04 + 34.150 180.00 165.96 14.04 + 34.200 167.00 165.97 1.03 + 34.250 173.00 165.97 7.03 + 34.300 153.00 165.98 -12.98 + 34.350 160.00 165.99 -5.99 + 34.400 180.00 166.00 14.00 + 34.450 168.00 166.01 1.99 + 34.500 167.00 166.02 0.98 + 34.550 176.00 166.04 9.96 + 34.600 165.00 166.09 -1.09 + 34.650 174.00 166.11 7.89 + 34.700 161.00 166.13 -5.13 + 34.750 178.00 166.15 11.85 + 34.800 170.00 166.17 3.83 + 34.850 166.00 166.19 -0.19 + 34.900 173.00 166.22 6.78 + 34.950 158.00 166.24 -8.24 + 35.000 166.00 166.27 -0.27 + 35.050 170.00 166.30 3.70 + 35.100 162.00 166.33 -4.33 + 35.150 183.00 166.36 16.64 + 35.200 176.00 166.39 9.61 + 35.250 171.00 166.42 4.58 + 35.300 174.00 166.45 7.55 + 35.350 179.00 166.49 12.51 + 35.400 176.00 166.53 9.47 + 35.450 193.00 166.78 26.22 + 35.500 180.00 166.83 13.17 + 35.550 188.00 166.87 21.13 + 35.600 177.00 166.92 10.08 + 35.650 176.00 166.96 9.04 + 35.700 171.00 167.01 3.99 + 35.750 185.00 167.07 17.93 + 35.800 178.00 167.12 10.88 + 35.850 152.00 167.18 -15.18 + 35.900 160.00 167.23 -7.23 + 35.950 187.00 167.29 19.71 + 36.000 167.00 167.36 -0.36 + 36.050 181.00 167.42 13.58 + 36.100 166.00 167.49 -1.49 + 36.150 165.00 167.56 -2.56 + 36.200 170.00 167.64 2.36 + 36.250 197.00 167.72 29.28 + 36.300 179.00 167.80 11.20 + 36.350 172.00 167.88 4.12 + 36.400 181.00 167.97 13.03 + 36.450 174.00 168.07 5.93 + 36.500 162.00 168.16 -6.16 + 36.550 166.00 168.27 -2.27 + 36.600 158.00 168.37 -10.37 + 36.650 199.00 168.49 30.51 + 36.700 188.00 168.61 19.39 + 36.750 177.00 168.73 8.27 + 36.800 167.00 168.86 -1.86 + 36.850 156.00 169.00 -13.00 + 36.900 174.00 169.15 4.85 + 36.950 176.00 169.30 6.70 + 37.000 152.00 169.47 -17.47 + 37.050 191.00 169.64 21.36 + 37.100 151.00 169.83 -18.83 + 37.150 202.00 170.02 31.98 + 37.200 191.00 170.23 20.77 + 37.250 161.00 170.46 -9.46 + 37.300 199.00 170.69 28.31 + 37.350 175.00 170.95 4.05 + 37.400 146.00 171.22 -25.22 + 37.450 181.00 171.51 9.49 + 37.500 221.00 171.82 49.18 + 37.550 194.00 172.16 21.84 + 37.600 158.00 172.52 -14.52 + 37.650 171.00 172.91 -1.91 + 37.700 172.00 173.34 -1.34 + 37.750 168.00 173.80 -5.80 + 37.800 192.00 174.30 17.70 + 37.850 185.00 174.85 10.15 + 37.900 193.00 175.45 17.55 + 37.950 178.00 176.10 1.90 + 38.000 195.00 176.83 18.17 + 38.050 175.00 177.63 -2.63 + 38.100 178.00 178.51 -0.51 + 38.150 173.00 179.50 -6.50 + 38.200 195.00 180.59 14.41 + 38.250 194.00 181.83 12.17 + 38.300 191.00 183.21 7.79 + 38.350 178.00 184.79 -6.79 + 38.400 184.00 186.57 -2.57 + 38.450 186.00 188.62 -2.62 + 38.500 202.00 190.98 11.02 + 38.550 200.00 193.71 6.29 + 38.600 210.00 196.91 13.09 + 38.650 198.00 200.67 -2.67 + 38.700 225.00 205.15 19.85 + 38.750 209.00 210.53 -1.53 + 38.800 229.00 217.13 11.87 + 38.850 197.00 225.48 -28.48 + 38.900 220.00 236.74 -16.74 + 38.950 215.00 253.56 -38.56 + 39.000 242.00 282.01 -40.01 + 39.050 340.00 334.62 5.38 + 39.100 441.00 433.97 7.03 + 39.150 654.00 613.80 40.20 + 39.200 962.00 912.86 49.14 + 39.250 1477.00 1358.03 118.97 + 39.300 2012.00 1939.10 72.90 + 39.350 2634.00 2586.11 47.89 + 39.400 3115.00 3161.18 -46.18 + 39.450 3467.00 3481.12 -14.12 + 39.500 3532.00 3410.75 121.25 + 39.550 3337.00 2982.28 354.72 + 39.600 2595.00 2363.05 231.95 + 39.650 1943.00 1726.55 216.45 + 39.700 1251.00 1187.82 63.18 + 39.750 828.00 794.32 33.68 + 39.800 525.00 540.50 -15.50 + 39.850 377.00 392.81 -15.81 + 39.900 294.00 312.87 -18.87 + 39.950 233.00 270.59 -37.59 + 40.000 233.00 247.20 -14.20 + 40.050 253.00 232.79 20.21 + 40.100 253.00 222.76 30.24 + 40.150 213.00 215.13 -2.13 + 40.200 196.00 209.03 -13.03 + 40.250 222.00 204.02 17.98 + 40.300 172.00 199.84 -27.84 + 40.350 218.00 196.32 21.68 + 40.400 206.00 193.33 12.67 + 40.450 195.00 190.77 4.23 + 40.500 209.00 188.56 20.44 + 40.550 192.00 186.64 5.36 + 40.600 197.00 184.97 12.03 + 40.650 188.00 183.50 4.50 + 40.700 202.00 182.20 19.80 + 40.750 208.00 181.05 26.95 + 40.800 184.00 180.03 3.97 + 40.850 177.00 179.12 -2.12 + 40.900 202.00 178.30 23.70 + 40.950 198.00 177.57 20.43 + 41.000 203.00 176.91 26.09 + 41.050 193.00 176.31 16.69 + 41.100 188.00 175.77 12.23 + 41.150 211.00 175.28 35.72 + 41.200 189.00 174.84 14.16 + 41.250 200.00 174.43 25.57 + 41.300 198.00 174.06 23.94 + 41.350 203.00 173.72 29.28 + 41.400 197.00 173.41 23.59 + 41.450 190.00 173.13 16.87 + 41.500 212.00 172.87 39.13 + 41.550 185.00 172.63 12.37 + 41.600 228.00 172.41 55.59 + 41.650 167.00 172.22 -5.22 + 41.700 207.00 172.03 34.97 + 41.750 187.00 171.87 15.13 + 41.800 190.00 171.71 18.29 + 41.850 192.00 171.58 20.42 + 41.900 185.00 171.45 13.55 + 41.950 161.00 171.33 -10.33 + 42.000 187.00 171.23 15.77 + 42.050 191.00 171.14 19.86 + 42.100 159.00 171.05 -12.05 + 42.150 170.00 170.98 -0.98 + 42.200 182.00 170.92 11.08 + 42.250 186.00 170.86 15.14 + 42.300 192.00 170.81 21.19 + 42.350 178.00 170.77 7.23 + 42.400 186.00 170.74 15.26 42.450 180.00 170.71 9.29 42.500 178.00 170.70 7.30 - 42.550 182.00 170.69 11.31 - 42.600 179.00 170.69 8.31 - 42.650 203.00 170.69 32.31 - 42.700 191.00 170.71 20.29 - 42.750 207.00 170.73 36.27 - 42.800 183.00 170.76 12.24 - 42.850 180.00 170.78 9.22 - 42.900 191.00 170.82 20.18 - 42.950 187.00 170.87 16.13 - 43.000 184.00 170.93 13.07 - 43.050 182.00 170.99 11.01 - 43.100 178.00 171.07 6.93 - 43.150 169.00 171.15 -2.15 - 43.200 158.00 171.24 -13.24 - 43.250 180.00 171.35 8.65 - 43.300 174.00 171.46 2.54 - 43.350 184.00 171.58 12.42 - 43.400 178.00 171.72 6.28 - 43.450 180.00 171.87 8.13 - 43.500 144.00 172.03 -28.03 - 43.550 169.00 172.20 -3.20 - 43.600 177.00 172.39 4.61 - 43.650 156.00 172.60 -16.60 - 43.700 148.00 172.82 -24.82 - 43.750 159.00 173.07 -14.07 - 43.800 195.00 173.33 21.67 - 43.850 186.00 173.62 12.38 - 43.900 180.00 173.94 6.06 - 43.950 192.00 174.28 17.72 - 44.000 186.00 174.65 11.35 - 44.050 180.00 175.06 4.94 - 44.100 174.00 175.51 -1.51 - 44.150 181.00 176.00 5.00 - 44.200 178.00 176.55 1.45 - 44.250 189.00 177.14 11.86 - 44.300 206.00 177.80 28.20 - 44.350 183.00 178.53 4.47 - 44.400 161.00 179.34 -18.34 - 44.450 170.00 180.25 -10.25 - 44.500 203.00 181.26 21.74 - 44.550 168.00 182.40 -14.40 - 44.600 199.00 183.68 15.32 - 44.650 192.00 185.13 6.87 - 44.700 192.00 186.78 5.22 - 44.750 200.00 188.68 11.32 - 44.800 206.00 190.86 15.14 - 44.850 193.00 193.38 -0.38 - 44.900 188.00 196.33 -8.33 - 44.950 200.00 199.80 0.20 - 45.000 193.00 203.92 -10.92 - 45.050 203.00 208.86 -5.86 - 45.100 212.00 214.87 -2.87 - 45.150 197.00 222.35 -25.35 - 45.200 219.00 232.12 -13.12 - 45.250 219.00 245.99 -26.99 - 45.300 226.00 268.18 -42.18 - 45.350 282.00 307.96 -25.96 - 45.400 353.00 383.21 -30.21 - 45.450 469.00 523.16 -54.16 - 45.500 741.00 765.79 -24.79 - 45.550 1176.00 1145.16 30.84 - 45.600 1577.00 1668.16 -91.16 - 45.650 2122.00 2288.86 -166.86 - 45.700 2726.00 2892.91 -166.91 - 45.750 2990.00 3305.82 -315.82 - 45.800 2991.00 3360.39 -369.39 - 45.850 2796.00 3030.81 -234.81 - 45.900 2372.00 2459.29 -87.29 - 45.950 1752.00 1828.93 -76.93 - 46.000 1209.00 1272.45 -63.45 - 46.050 824.00 853.35 -29.35 - 46.100 512.00 576.64 -64.64 - 46.150 353.00 412.96 -59.96 - 46.200 273.00 323.66 -50.66 - 46.250 259.00 276.55 -17.55 - 46.300 233.00 250.82 -17.82 - 46.350 220.00 235.28 -15.28 - 46.400 228.00 224.65 3.35 - 46.450 231.00 216.64 14.36 - 46.500 218.00 210.28 7.72 - 46.550 210.00 205.09 4.91 - 46.600 212.00 200.77 11.23 - 46.650 187.00 197.13 -10.13 - 46.700 207.00 194.05 12.95 - 46.750 212.00 191.41 20.59 - 46.800 188.00 189.13 -1.13 - 46.850 178.00 187.16 -9.16 - 46.900 186.00 185.44 0.56 - 46.950 192.00 183.93 8.07 - 47.000 192.00 182.59 9.41 - 47.050 186.00 181.41 4.59 - 47.100 208.00 180.36 27.64 - 47.150 199.00 179.42 19.58 - 47.200 165.00 178.57 -13.57 - 47.250 212.00 177.81 34.19 - 47.300 191.00 177.12 13.88 - 47.350 185.00 176.49 8.51 - 47.400 171.00 175.92 -4.92 - 47.450 176.00 175.41 0.59 - 47.500 179.00 174.93 4.07 - 47.550 187.00 174.50 12.50 - 47.600 181.00 174.10 6.90 - 47.650 173.00 173.73 -0.73 - 47.700 167.00 173.39 -6.39 - 47.750 182.00 173.08 8.92 - 47.800 171.00 172.79 -1.79 - 47.850 185.00 172.52 12.48 - 47.900 177.00 172.27 4.73 - 47.950 154.00 172.03 -18.03 - 48.000 200.00 171.82 28.18 - 48.050 177.00 171.61 5.39 - 48.100 184.00 171.42 12.58 - 48.150 166.00 171.24 -5.24 - 48.200 181.00 171.08 9.92 - 48.250 208.00 170.92 37.08 - 48.300 186.00 170.78 15.22 - 48.350 164.00 170.64 -6.64 - 48.400 196.00 170.51 25.49 - 48.450 169.00 170.39 -1.39 - 48.500 173.00 170.27 2.73 - 48.550 200.00 170.16 29.84 - 48.600 163.00 170.06 -7.06 - 48.650 173.00 169.96 3.04 - 48.700 187.00 169.87 17.13 - 48.750 177.00 169.78 7.22 - 48.800 200.00 169.70 30.30 - 48.850 171.00 169.62 1.38 - 48.900 192.00 169.55 22.45 - 48.950 178.00 169.48 8.52 - 49.000 169.00 169.41 -0.41 - 49.050 160.00 169.35 -9.35 - 49.100 182.00 169.29 12.71 - 49.150 173.00 169.23 3.77 - 49.200 170.00 169.18 0.82 - 49.250 181.00 169.13 11.87 - 49.300 170.00 169.08 0.92 - 49.350 164.00 169.03 -5.03 - 49.400 166.00 168.99 -2.99 - 49.450 174.00 168.95 5.05 - 49.500 173.00 168.91 4.09 - 49.550 137.00 168.87 -31.87 - 49.600 166.00 168.83 -2.83 - 49.650 194.00 168.80 25.20 - 49.700 160.00 168.77 -8.77 - 49.750 152.00 168.74 -16.74 - 49.800 180.00 168.71 11.29 - 49.850 160.00 168.68 -8.68 - 49.900 149.00 168.66 -19.66 - 49.950 172.00 168.64 3.36 - 50.000 170.00 168.40 1.60 - 50.050 175.00 168.38 6.62 - 50.100 162.00 168.37 -6.37 - 50.150 168.00 168.35 -0.35 - 50.200 186.00 168.34 17.66 - 50.250 179.00 168.33 10.67 - 50.300 165.00 168.32 -3.32 - 50.350 155.00 168.31 -13.31 - 50.400 170.00 168.31 1.69 - 50.450 162.00 168.31 -6.31 - 50.500 157.00 168.31 -11.31 - 50.550 173.00 168.31 4.69 - 50.600 149.00 168.32 -19.32 - 50.650 167.00 168.33 -1.33 - 50.700 165.00 168.35 -3.35 - 50.750 157.00 168.38 -11.38 - 50.800 177.00 168.41 8.59 - 50.850 187.00 168.46 18.54 - 50.900 155.00 168.52 -13.52 - 50.950 194.00 168.62 25.38 - 51.000 147.00 168.79 -21.79 - 51.050 169.00 169.11 -0.11 - 51.100 166.00 169.72 -3.72 - 51.150 193.00 170.84 22.16 - 51.200 168.00 172.77 -4.77 - 51.250 188.00 175.71 12.29 - 51.300 182.00 179.64 2.36 - 51.350 180.00 184.12 -4.12 - 51.400 177.00 188.19 -11.19 - 51.450 188.00 190.52 -2.52 - 51.500 187.00 190.08 -3.08 - 51.550 178.00 187.08 -9.08 - 51.600 177.00 182.75 -5.75 - 51.650 184.00 178.35 5.65 - 51.700 172.00 174.68 -2.68 - 51.750 188.00 172.04 15.96 - 51.800 194.00 170.37 23.63 - 51.850 179.00 169.42 9.58 - 51.900 176.00 168.91 7.09 - 51.950 180.00 168.64 11.36 - 52.000 169.00 168.48 0.52 - 52.050 178.00 168.38 9.62 - 52.100 165.00 168.31 -3.31 - 52.150 149.00 168.26 -19.26 - 52.200 168.00 168.22 -0.22 - 52.250 157.00 168.18 -11.18 - 52.300 151.00 168.15 -17.15 - 52.350 181.00 168.13 12.87 - 52.400 172.00 168.11 3.89 - 52.450 178.00 168.09 9.91 - 52.500 179.00 168.07 10.93 - 52.550 171.00 168.06 2.94 - 52.600 129.00 168.05 -39.05 - 52.650 180.00 168.04 11.96 - 52.700 154.00 168.04 -14.04 - 52.750 182.00 168.03 13.97 - 52.800 166.00 168.03 -2.03 - 52.850 156.00 168.02 -12.02 - 52.900 164.00 168.02 -4.02 - 52.950 166.00 168.02 -2.02 + 42.550 182.00 170.68 11.32 + 42.600 179.00 170.68 8.32 + 42.650 203.00 170.68 32.32 + 42.700 191.00 170.70 20.30 + 42.750 207.00 170.71 36.29 + 42.800 183.00 170.74 12.26 + 42.850 180.00 170.76 9.24 + 42.900 191.00 170.80 20.20 + 42.950 187.00 170.84 16.16 + 43.000 184.00 170.90 13.10 + 43.050 182.00 170.96 11.04 + 43.100 178.00 171.03 6.97 + 43.150 169.00 171.11 -2.11 + 43.200 158.00 171.20 -13.20 + 43.250 180.00 171.30 8.70 + 43.300 174.00 171.41 2.59 + 43.350 184.00 171.53 12.47 + 43.400 178.00 171.66 6.34 + 43.450 180.00 171.81 8.19 + 43.500 144.00 171.96 -27.96 + 43.550 169.00 172.13 -3.13 + 43.600 177.00 172.32 4.68 + 43.650 156.00 172.52 -16.52 + 43.700 148.00 172.74 -24.74 + 43.750 159.00 172.98 -13.98 + 43.800 195.00 173.24 21.76 + 43.850 186.00 173.52 12.48 + 43.900 180.00 173.83 6.17 + 43.950 192.00 174.16 17.84 + 44.000 186.00 174.53 11.47 + 44.050 180.00 174.93 5.07 + 44.100 174.00 175.37 -1.37 + 44.150 181.00 175.85 5.15 + 44.200 178.00 176.38 1.62 + 44.250 189.00 176.97 12.03 + 44.300 206.00 177.61 28.39 + 44.350 183.00 178.33 4.67 + 44.400 161.00 179.12 -18.12 + 44.450 170.00 180.01 -10.01 + 44.500 203.00 181.00 22.00 + 44.550 168.00 182.11 -14.11 + 44.600 199.00 183.37 15.63 + 44.650 192.00 184.79 7.21 + 44.700 192.00 186.42 5.58 + 44.750 200.00 188.27 11.73 + 44.800 206.00 190.41 15.59 + 44.850 193.00 192.88 0.12 + 44.900 188.00 195.78 -7.78 + 44.950 200.00 199.18 0.82 + 45.000 193.00 203.21 -10.21 + 45.050 203.00 208.06 -5.06 + 45.100 212.00 213.95 -1.95 + 45.150 197.00 221.29 -24.29 + 45.200 219.00 230.87 -11.87 + 45.250 219.00 244.47 -25.47 + 45.300 226.00 266.23 -40.23 + 45.350 282.00 305.23 -23.23 + 45.400 353.00 379.02 -26.02 + 45.450 469.00 516.25 -47.25 + 45.500 741.00 754.16 -13.16 + 45.550 1176.00 1126.16 49.84 + 45.600 1577.00 1639.00 -62.00 + 45.650 2122.00 2247.64 -125.64 + 45.700 2726.00 2839.95 -113.95 + 45.750 2990.00 3244.84 -254.84 + 45.800 2991.00 3298.35 -307.35 + 45.850 2796.00 2975.17 -179.17 + 45.900 2372.00 2414.75 -42.75 + 45.950 1752.00 1796.65 -44.65 + 46.000 1209.00 1250.98 -41.98 + 46.050 824.00 840.02 -16.02 + 46.100 512.00 568.69 -56.69 + 46.150 353.00 408.19 -55.19 + 46.200 273.00 320.63 -47.63 + 46.250 259.00 274.43 -15.43 + 46.300 233.00 249.20 -16.20 + 46.350 220.00 233.96 -13.96 + 46.400 228.00 223.53 4.47 + 46.450 231.00 215.69 15.31 + 46.500 218.00 209.45 8.55 + 46.550 210.00 204.36 5.64 + 46.600 212.00 200.12 11.88 + 46.650 187.00 196.55 -9.55 + 46.700 207.00 193.53 13.47 + 46.750 212.00 190.94 21.06 + 46.800 188.00 188.71 -0.71 + 46.850 178.00 186.78 -8.78 + 46.900 186.00 185.09 0.91 + 46.950 192.00 183.61 8.39 + 47.000 192.00 182.30 9.70 + 47.050 186.00 181.14 4.86 + 47.100 208.00 180.10 27.90 + 47.150 199.00 179.18 19.82 + 47.200 165.00 178.35 -13.35 + 47.250 212.00 177.60 34.40 + 47.300 191.00 176.93 14.07 + 47.350 185.00 176.31 8.69 + 47.400 171.00 175.76 -4.76 + 47.450 176.00 175.25 0.75 + 47.500 179.00 174.78 4.22 + 47.550 187.00 174.36 12.64 + 47.600 181.00 173.97 7.03 + 47.650 173.00 173.61 -0.61 + 47.700 167.00 173.27 -6.27 + 47.750 182.00 172.96 9.04 + 47.800 171.00 172.68 -1.68 + 47.850 185.00 172.42 12.58 + 47.900 177.00 172.17 4.83 + 47.950 154.00 171.94 -17.94 + 48.000 200.00 171.73 28.27 + 48.050 177.00 171.53 5.47 + 48.100 184.00 171.34 12.66 + 48.150 166.00 171.17 -5.17 + 48.200 181.00 171.01 9.99 + 48.250 208.00 170.85 37.15 + 48.300 186.00 170.71 15.29 + 48.350 164.00 170.57 -6.57 + 48.400 196.00 170.45 25.55 + 48.450 169.00 170.33 -1.33 + 48.500 173.00 170.21 2.79 + 48.550 200.00 170.11 29.89 + 48.600 163.00 170.01 -7.01 + 48.650 173.00 169.91 3.09 + 48.700 187.00 169.82 17.18 + 48.750 177.00 169.73 7.27 + 48.800 200.00 169.65 30.35 + 48.850 171.00 169.58 1.42 + 48.900 192.00 169.51 22.49 + 48.950 178.00 169.44 8.56 + 49.000 169.00 169.37 -0.37 + 49.050 160.00 169.31 -9.31 + 49.100 182.00 169.25 12.75 + 49.150 173.00 169.20 3.80 + 49.200 170.00 169.14 0.86 + 49.250 181.00 169.09 11.91 + 49.300 170.00 169.04 0.96 + 49.350 164.00 169.00 -5.00 + 49.400 166.00 168.96 -2.96 + 49.450 174.00 168.92 5.08 + 49.500 173.00 168.88 4.12 + 49.550 137.00 168.84 -31.84 + 49.600 166.00 168.81 -2.81 + 49.650 194.00 168.77 25.23 + 49.700 160.00 168.74 -8.74 + 49.750 152.00 168.71 -16.71 + 49.800 180.00 168.69 11.31 + 49.850 160.00 168.66 -8.66 + 49.900 149.00 168.64 -19.64 + 49.950 172.00 168.61 3.39 + 50.000 170.00 168.37 1.63 + 50.050 175.00 168.36 6.64 + 50.100 162.00 168.34 -6.34 + 50.150 168.00 168.33 -0.33 + 50.200 186.00 168.31 17.69 + 50.250 179.00 168.30 10.70 + 50.300 165.00 168.30 -3.30 + 50.350 155.00 168.29 -13.29 + 50.400 170.00 168.29 1.71 + 50.450 162.00 168.28 -6.28 + 50.500 157.00 168.29 -11.29 + 50.550 173.00 168.29 4.71 + 50.600 149.00 168.30 -19.30 + 50.650 167.00 168.31 -1.31 + 50.700 165.00 168.33 -3.33 + 50.750 157.00 168.36 -11.36 + 50.800 177.00 168.39 8.61 + 50.850 187.00 168.44 18.56 + 50.900 155.00 168.50 -13.50 + 50.950 194.00 168.60 25.40 + 51.000 147.00 168.77 -21.77 + 51.050 169.00 169.09 -0.09 + 51.100 166.00 169.69 -3.69 + 51.150 193.00 170.81 22.19 + 51.200 168.00 172.73 -4.73 + 51.250 188.00 175.66 12.34 + 51.300 182.00 179.57 2.43 + 51.350 180.00 184.03 -4.03 + 51.400 177.00 188.08 -11.08 + 51.450 188.00 190.40 -2.40 + 51.500 187.00 189.96 -2.96 + 51.550 178.00 186.97 -8.97 + 51.600 177.00 182.66 -5.66 + 51.650 184.00 178.28 5.72 + 51.700 172.00 174.63 -2.63 + 51.750 188.00 172.01 15.99 + 51.800 194.00 170.35 23.65 + 51.850 179.00 169.40 9.60 + 51.900 176.00 168.89 7.11 + 51.950 180.00 168.62 11.38 + 52.000 169.00 168.47 0.53 + 52.050 178.00 168.37 9.63 + 52.100 165.00 168.30 -3.30 + 52.150 149.00 168.25 -19.25 + 52.200 168.00 168.20 -0.20 + 52.250 157.00 168.17 -11.17 + 52.300 151.00 168.14 -17.14 + 52.350 181.00 168.12 12.88 + 52.400 172.00 168.10 3.90 + 52.450 178.00 168.08 9.92 + 52.500 179.00 168.06 10.94 + 52.550 171.00 168.05 2.95 + 52.600 129.00 168.04 -39.04 + 52.650 180.00 168.03 11.97 + 52.700 154.00 168.03 -14.03 + 52.750 182.00 168.02 13.98 + 52.800 166.00 168.02 -2.02 + 52.850 156.00 168.01 -12.01 + 52.900 164.00 168.01 -4.01 + 52.950 166.00 168.01 -2.01 53.000 176.00 168.01 7.99 53.050 182.00 168.01 13.99 53.100 173.00 168.01 4.99 53.150 160.00 168.01 -8.01 - 53.200 169.00 168.02 0.98 - 53.250 162.00 168.02 -6.02 - 53.300 164.00 168.02 -4.02 - 53.350 165.00 168.02 -3.02 - 53.400 177.00 168.03 8.97 - 53.450 173.00 168.03 4.97 + 53.200 169.00 168.01 0.99 + 53.250 162.00 168.01 -6.01 + 53.300 164.00 168.01 -4.01 + 53.350 165.00 168.01 -3.01 + 53.400 177.00 168.02 8.98 + 53.450 173.00 168.02 4.98 53.500 158.00 168.03 -10.03 - 53.550 164.00 168.04 -4.04 + 53.550 164.00 168.03 -4.03 53.600 175.00 168.04 6.96 - 53.650 166.00 168.05 -2.05 + 53.650 166.00 168.04 -2.04 53.700 161.00 168.05 -7.05 - 53.750 167.00 168.06 -1.06 - 53.800 136.00 168.07 -32.07 + 53.750 167.00 168.05 -1.05 + 53.800 136.00 168.06 -32.06 53.850 167.00 168.07 -1.07 53.900 152.00 168.08 -16.08 - 53.950 159.00 168.09 -9.09 - 54.000 172.00 168.10 3.90 - 54.050 179.00 168.11 10.89 - 54.100 169.00 168.12 0.88 - 54.150 165.00 168.13 -3.13 - 54.200 166.00 168.14 -2.14 + 53.950 159.00 168.08 -9.08 + 54.000 172.00 168.09 3.91 + 54.050 179.00 168.10 10.90 + 54.100 169.00 168.11 0.89 + 54.150 165.00 168.12 -3.12 + 54.200 166.00 168.13 -2.13 54.250 162.00 168.15 -6.15 54.300 175.00 168.16 6.84 - 54.350 162.00 168.18 -6.18 + 54.350 162.00 168.17 -6.17 54.400 145.00 168.19 -23.19 - 54.450 148.00 168.21 -20.21 + 54.450 148.00 168.20 -20.20 54.500 157.00 168.22 -11.22 - 54.550 176.00 168.24 7.76 - 54.600 162.00 168.26 -6.26 + 54.550 176.00 168.23 7.77 + 54.600 162.00 168.25 -6.25 54.650 153.00 168.27 -15.27 - 54.700 178.00 168.30 9.70 - 54.750 147.00 168.32 -21.32 + 54.700 178.00 168.29 9.71 + 54.750 147.00 168.31 -21.31 54.800 146.00 168.34 -22.34 54.850 170.00 168.36 1.64 54.900 155.00 168.39 -13.39 @@ -910,75 +910,75 @@ BEGIN 55.600 135.00 169.15 -34.15 55.650 158.00 169.26 -11.26 55.700 144.00 169.39 -25.39 - 55.750 152.00 169.53 -17.53 - 55.800 165.00 169.70 -4.70 - 55.850 164.00 169.89 -5.89 - 55.900 175.00 170.12 4.88 - 55.950 150.00 170.39 -20.39 - 56.000 168.00 170.72 -2.72 - 56.050 159.00 171.11 -12.11 - 56.100 187.00 171.60 15.40 - 56.150 170.00 172.01 -2.01 - 56.200 159.00 172.90 -13.90 - 56.250 148.00 174.53 -26.53 - 56.300 159.00 177.04 -18.04 - 56.350 174.00 181.75 -7.75 - 56.400 195.00 190.51 4.49 - 56.450 219.00 205.71 13.29 - 56.500 216.00 229.48 -13.48 - 56.550 271.00 262.16 8.84 - 56.600 337.00 300.66 36.34 - 56.650 417.00 337.44 79.56 - 56.700 390.00 361.12 28.88 - 56.750 414.00 361.44 52.56 - 56.800 388.00 338.26 49.74 - 56.850 317.00 301.68 15.32 - 56.900 307.00 263.13 43.87 - 56.950 250.00 230.27 19.73 - 57.000 205.00 206.29 -1.29 - 57.050 167.00 190.92 -23.92 - 57.100 179.00 182.05 -3.05 - 57.150 159.00 177.28 -18.28 - 57.200 170.00 174.76 -4.76 - 57.250 168.00 173.35 -5.35 - 57.300 180.00 172.46 7.54 - 57.350 144.00 171.84 -27.84 - 57.400 178.00 171.36 6.64 - 57.450 203.00 170.98 32.02 - 57.500 159.00 170.67 -11.67 - 57.550 165.00 170.42 -5.42 - 57.600 164.00 170.20 -6.20 - 57.650 135.00 170.02 -35.02 - 57.700 157.00 169.87 -12.87 - 57.750 162.00 169.74 -7.74 + 55.750 152.00 169.54 -17.54 + 55.800 165.00 169.71 -4.71 + 55.850 164.00 169.90 -5.90 + 55.900 175.00 170.13 4.87 + 55.950 150.00 170.40 -20.40 + 56.000 168.00 170.73 -2.73 + 56.050 159.00 171.12 -12.12 + 56.100 187.00 171.62 15.38 + 56.150 170.00 172.04 -2.04 + 56.200 159.00 172.94 -13.94 + 56.250 148.00 174.57 -26.57 + 56.300 159.00 177.09 -18.09 + 56.350 174.00 181.83 -7.83 + 56.400 195.00 190.64 4.36 + 56.450 219.00 205.94 13.06 + 56.500 216.00 229.86 -13.86 + 56.550 271.00 262.74 8.26 + 56.600 337.00 301.47 35.53 + 56.650 417.00 338.47 78.53 + 56.700 390.00 362.29 27.71 + 56.750 414.00 362.62 51.38 + 56.800 388.00 339.30 48.70 + 56.850 317.00 302.49 14.51 + 56.900 307.00 263.71 43.29 + 56.950 250.00 230.65 19.35 + 57.000 205.00 206.52 -1.52 + 57.050 167.00 191.05 -24.05 + 57.100 179.00 182.13 -3.13 + 57.150 159.00 177.33 -18.33 + 57.200 170.00 174.80 -4.80 + 57.250 168.00 173.38 -5.38 + 57.300 180.00 172.49 7.51 + 57.350 144.00 171.86 -27.86 + 57.400 178.00 171.38 6.62 + 57.450 203.00 171.00 32.00 + 57.500 159.00 170.69 -11.69 + 57.550 165.00 170.43 -5.43 + 57.600 164.00 170.21 -6.21 + 57.650 135.00 170.03 -35.03 + 57.700 157.00 169.88 -12.88 + 57.750 162.00 169.75 -7.75 57.800 175.00 169.63 5.37 - 57.850 161.00 169.53 -8.53 + 57.850 161.00 169.54 -8.54 57.900 174.00 169.45 4.55 - 57.950 187.00 169.37 17.63 - 58.000 164.00 169.31 -5.31 + 57.950 187.00 169.38 17.62 + 58.000 164.00 169.32 -5.32 58.050 188.00 169.26 18.74 58.100 163.00 169.21 -6.21 58.150 177.00 169.17 7.83 - 58.200 181.00 169.13 11.87 + 58.200 181.00 169.14 11.86 58.250 156.00 169.10 -13.10 - 58.300 163.00 169.07 -6.07 + 58.300 163.00 169.08 -6.08 58.350 190.00 169.05 20.95 58.400 162.00 169.03 -7.03 58.450 186.00 169.01 16.99 - 58.500 169.00 168.99 0.01 + 58.500 169.00 169.00 0.00 58.550 160.00 168.98 -8.98 58.600 171.00 168.97 2.03 58.650 160.00 168.96 -8.96 58.700 174.00 168.95 5.05 - 58.750 163.00 168.94 -5.94 + 58.750 163.00 168.95 -5.95 58.800 180.00 168.94 11.06 - 58.850 176.00 168.93 7.07 + 58.850 176.00 168.94 7.06 58.900 174.00 168.93 5.07 58.950 177.00 168.93 8.07 59.000 186.00 168.93 17.07 59.050 157.00 168.93 -11.93 59.100 188.00 168.93 19.07 - 59.150 162.00 168.93 -6.93 + 59.150 162.00 168.94 -6.94 59.200 160.00 168.94 -8.94 59.250 196.00 168.94 27.06 59.300 178.00 168.95 9.05 @@ -987,7 +987,7 @@ BEGIN 59.450 157.00 168.96 -11.96 59.500 183.00 168.97 14.03 59.550 169.00 168.98 0.02 - 59.600 150.00 168.98 -18.98 + 59.600 150.00 168.99 -18.99 59.650 195.00 168.99 26.01 59.700 175.00 169.00 6.00 59.750 160.00 169.01 -9.01 @@ -996,11 +996,11 @@ BEGIN 59.900 181.00 169.04 11.96 59.950 168.00 169.05 -1.05 60.000 181.00 169.06 11.94 - 60.050 158.00 169.07 -11.07 + 60.050 158.00 169.08 -11.08 60.100 160.00 169.09 -9.09 60.150 151.00 169.10 -18.10 60.200 171.00 169.11 1.89 - 60.250 167.00 169.12 -2.12 + 60.250 167.00 169.13 -2.13 60.300 160.00 169.14 -9.14 60.350 157.00 169.15 -12.15 60.400 172.00 169.17 2.83 @@ -1008,220 +1008,220 @@ BEGIN 60.500 172.00 169.20 2.80 60.550 150.00 169.21 -19.21 60.600 179.00 169.23 9.77 - 60.650 153.00 169.24 -16.24 + 60.650 153.00 169.25 -16.25 60.700 170.00 169.26 0.74 60.750 184.00 169.28 14.72 60.800 158.00 169.30 -11.30 - 60.850 177.00 169.31 7.69 - 60.900 159.00 169.33 -10.33 + 60.850 177.00 169.32 7.68 + 60.900 159.00 169.34 -10.34 60.950 157.00 169.35 -12.35 61.000 168.00 169.37 -1.37 61.050 154.00 169.39 -15.39 61.100 170.00 169.41 0.59 61.150 147.00 169.43 -22.43 - 61.200 161.00 169.45 -8.45 - 61.250 175.00 169.47 5.53 + 61.200 161.00 169.46 -8.46 + 61.250 175.00 169.48 5.52 61.300 170.00 169.50 0.50 61.350 153.00 169.52 -16.52 - 61.400 165.00 169.54 -4.54 + 61.400 165.00 169.55 -4.55 61.450 164.00 169.57 -5.57 61.500 174.00 169.59 4.41 61.550 160.00 169.62 -9.62 - 61.600 188.00 169.64 18.36 + 61.600 188.00 169.65 18.35 61.650 182.00 169.67 12.33 61.700 197.00 169.70 27.30 - 61.750 163.00 169.72 -6.72 - 61.800 176.00 169.75 6.25 - 61.850 157.00 169.78 -12.78 - 61.900 166.00 169.81 -3.81 - 61.950 173.00 169.84 3.16 + 61.750 163.00 169.73 -6.73 + 61.800 176.00 169.76 6.24 + 61.850 157.00 169.79 -12.79 + 61.900 166.00 169.82 -3.82 + 61.950 173.00 169.85 3.15 62.000 167.00 169.88 -2.88 62.050 175.00 169.91 5.09 - 62.100 143.00 169.94 -26.94 + 62.100 143.00 169.95 -26.95 62.150 148.00 169.98 -21.98 - 62.200 178.00 170.01 7.99 - 62.250 180.00 170.05 9.95 + 62.200 178.00 170.02 7.98 + 62.250 180.00 170.06 9.94 62.300 141.00 170.09 -29.09 62.350 202.00 170.13 31.87 - 62.400 172.00 170.17 1.83 - 62.450 169.00 170.21 -1.21 + 62.400 172.00 170.18 1.82 + 62.450 169.00 170.22 -1.22 62.500 143.00 170.26 -27.26 - 62.550 146.00 170.30 -24.30 + 62.550 146.00 170.31 -24.31 62.600 169.00 170.35 -1.35 62.650 146.00 170.40 -24.40 62.700 156.00 170.45 -14.45 - 62.750 147.00 170.50 -23.50 - 62.800 158.00 170.55 -12.55 - 62.850 178.00 170.61 7.39 + 62.750 147.00 170.51 -23.51 + 62.800 158.00 170.56 -12.56 + 62.850 178.00 170.62 7.38 62.900 163.00 170.67 -7.67 62.950 168.00 170.73 -2.73 - 63.000 164.00 170.79 -6.79 + 63.000 164.00 170.80 -6.80 63.050 180.00 170.86 9.14 - 63.100 189.00 170.92 18.08 - 63.150 164.00 170.99 -6.99 - 63.200 181.00 171.07 9.93 + 63.100 189.00 170.93 18.07 + 63.150 164.00 171.00 -7.00 + 63.200 181.00 171.08 9.92 63.250 179.00 171.15 7.85 63.300 147.00 171.23 -24.23 - 63.350 179.00 171.31 7.69 - 63.400 150.00 171.40 -21.40 - 63.450 168.00 171.49 -3.49 - 63.500 156.00 171.59 -15.59 - 63.550 181.00 171.69 9.31 - 63.600 170.00 171.80 -1.80 - 63.650 181.00 171.91 9.09 - 63.700 184.00 172.03 11.97 - 63.750 153.00 172.15 -19.15 - 63.800 166.00 172.28 -6.28 - 63.850 166.00 172.42 -6.42 - 63.900 169.00 172.57 -3.57 - 63.950 175.00 172.72 2.28 - 64.000 157.00 172.89 -15.89 - 64.050 165.00 173.06 -8.06 - 64.100 169.00 173.25 -4.25 - 64.150 164.00 173.45 -9.45 - 64.200 181.00 173.66 7.34 - 64.250 189.00 173.88 15.12 - 64.300 179.00 174.12 4.88 - 64.350 157.00 174.38 -17.38 - 64.400 189.00 174.66 14.34 - 64.450 167.00 174.96 -7.96 - 64.500 178.00 175.28 2.72 - 64.550 144.00 175.62 -31.62 - 64.600 180.00 176.00 4.00 - 64.650 182.00 176.40 5.60 - 64.700 199.00 176.84 22.16 - 64.750 172.00 177.32 -5.32 - 64.800 191.00 177.85 13.15 - 64.850 166.00 178.42 -12.42 - 64.900 157.00 179.06 -22.06 - 64.950 197.00 179.75 17.25 - 65.000 204.00 180.52 23.48 - 65.050 183.00 181.38 1.62 - 65.100 189.00 182.33 6.67 - 65.150 189.00 183.41 5.59 - 65.200 170.00 184.61 -14.61 - 65.250 188.00 185.96 2.04 - 65.300 176.00 187.49 -11.49 - 65.350 172.00 189.24 -17.24 - 65.400 182.00 191.24 -9.24 - 65.450 205.00 193.56 11.44 - 65.500 191.00 196.25 -5.25 - 65.550 192.00 199.41 -7.41 - 65.600 190.00 203.14 -13.14 - 65.650 194.00 207.59 -13.59 - 65.700 212.00 212.96 -0.96 - 65.750 221.00 219.56 1.44 - 65.800 227.00 227.90 -0.90 - 65.850 227.00 239.03 -12.03 - 65.900 239.00 255.38 -16.38 - 65.950 261.00 282.46 -21.46 - 66.000 301.00 331.84 -30.84 - 66.050 409.00 424.54 -15.54 - 66.100 559.00 591.80 -32.80 - 66.150 820.00 868.93 -48.93 - 66.200 1276.00 1277.98 -1.98 - 66.250 1776.00 1803.73 -27.73 - 66.300 2322.00 2371.81 -49.81 - 66.350 2880.00 2841.17 38.83 - 66.400 3051.00 3035.53 15.47 - 66.450 2980.00 2860.47 119.53 - 66.500 2572.00 2401.59 170.41 - 66.550 1961.00 1834.70 126.30 - 66.600 1315.00 1304.20 10.80 - 66.650 919.00 887.87 31.13 - 66.700 548.00 603.92 -55.92 - 66.750 405.00 431.52 -26.52 - 66.800 299.00 335.66 -36.66 - 66.850 309.00 284.57 24.43 - 66.900 279.00 256.65 22.35 - 66.950 281.00 239.90 41.10 - 67.000 235.00 228.58 6.42 - 67.050 239.00 220.14 18.86 - 67.100 212.00 213.48 -1.48 - 67.150 228.00 208.06 19.94 - 67.200 231.00 203.58 27.42 - 67.250 198.00 199.82 -1.82 - 67.300 223.00 196.65 26.35 - 67.350 201.00 193.95 7.05 - 67.400 208.00 191.63 16.37 - 67.450 207.00 189.63 17.37 - 67.500 217.00 187.88 29.12 - 67.550 196.00 186.35 9.65 - 67.600 182.00 185.01 -3.01 - 67.650 182.00 183.82 -1.82 - 67.700 186.00 182.76 3.24 - 67.750 176.00 181.81 -5.81 - 67.800 192.00 180.97 11.03 - 67.850 215.00 180.21 34.79 - 67.900 178.00 179.52 -1.52 - 67.950 191.00 178.90 12.10 - 68.000 178.00 178.34 -0.34 - 68.050 185.00 177.82 7.18 - 68.100 171.00 177.36 -6.36 - 68.150 174.00 176.93 -2.93 - 68.200 193.00 176.53 16.47 - 68.250 182.00 176.17 5.83 - 68.300 178.00 175.84 2.16 - 68.350 196.00 175.53 20.47 - 68.400 178.00 175.25 2.75 - 68.450 173.00 174.98 -1.98 - 68.500 175.00 174.74 0.26 - 68.550 178.00 174.51 3.49 - 68.600 177.00 174.30 2.70 - 68.650 176.00 174.11 1.89 - 68.700 200.00 173.92 26.08 - 68.750 177.00 173.75 3.25 - 68.800 185.00 173.59 11.41 - 68.850 167.00 173.44 -6.44 - 68.900 158.00 173.30 -15.30 - 68.950 176.00 173.17 2.83 - 69.000 192.00 173.04 18.96 - 69.050 174.00 172.93 1.07 - 69.100 154.00 172.82 -18.82 - 69.150 153.00 172.71 -19.71 - 69.200 167.00 172.62 -5.62 - 69.250 168.00 172.53 -4.53 - 69.300 167.00 172.44 -5.44 - 69.350 163.00 172.56 -9.56 - 69.400 157.00 172.49 -15.49 - 69.450 185.00 172.42 12.58 - 69.500 151.00 172.35 -21.35 - 69.550 176.00 172.29 3.71 - 69.600 187.00 172.23 14.77 - 69.650 170.00 172.18 -2.18 - 69.700 164.00 172.13 -8.13 - 69.750 204.00 172.08 31.92 + 63.350 179.00 171.32 7.68 + 63.400 150.00 171.41 -21.41 + 63.450 168.00 171.50 -3.50 + 63.500 156.00 171.60 -15.60 + 63.550 181.00 171.70 9.30 + 63.600 170.00 171.81 -1.81 + 63.650 181.00 171.92 9.08 + 63.700 184.00 172.04 11.96 + 63.750 153.00 172.16 -19.16 + 63.800 166.00 172.29 -6.29 + 63.850 166.00 172.43 -6.43 + 63.900 169.00 172.58 -3.58 + 63.950 175.00 172.74 2.26 + 64.000 157.00 172.90 -15.90 + 64.050 165.00 173.08 -8.08 + 64.100 169.00 173.26 -4.26 + 64.150 164.00 173.46 -9.46 + 64.200 181.00 173.67 7.33 + 64.250 189.00 173.90 15.10 + 64.300 179.00 174.14 4.86 + 64.350 157.00 174.40 -17.40 + 64.400 189.00 174.68 14.32 + 64.450 167.00 174.98 -7.98 + 64.500 178.00 175.30 2.70 + 64.550 144.00 175.65 -31.65 + 64.600 180.00 176.02 3.98 + 64.650 182.00 176.43 5.57 + 64.700 199.00 176.87 22.13 + 64.750 172.00 177.35 -5.35 + 64.800 191.00 177.88 13.12 + 64.850 166.00 178.46 -12.46 + 64.900 157.00 179.09 -22.09 + 64.950 197.00 179.79 17.21 + 65.000 204.00 180.56 23.44 + 65.050 183.00 181.42 1.58 + 65.100 189.00 182.38 6.62 + 65.150 189.00 183.46 5.54 + 65.200 170.00 184.66 -14.66 + 65.250 188.00 186.02 1.98 + 65.300 176.00 187.55 -11.55 + 65.350 172.00 189.31 -17.31 + 65.400 182.00 191.32 -9.32 + 65.450 205.00 193.64 11.36 + 65.500 191.00 196.35 -5.35 + 65.550 192.00 199.51 -7.51 + 65.600 190.00 203.26 -13.26 + 65.650 194.00 207.73 -13.73 + 65.700 212.00 213.12 -1.12 + 65.750 221.00 219.74 1.26 + 65.800 227.00 228.11 -1.11 + 65.850 227.00 239.28 -12.28 + 65.900 239.00 255.68 -16.68 + 65.950 261.00 282.86 -21.86 + 66.000 301.00 332.42 -31.42 + 66.050 409.00 425.44 -16.44 + 66.100 559.00 593.30 -34.30 + 66.150 820.00 871.41 -51.41 + 66.200 1276.00 1281.92 -5.92 + 66.250 1776.00 1809.54 -33.54 + 66.300 2322.00 2379.63 -57.63 + 66.350 2880.00 2850.66 29.34 + 66.400 3051.00 3045.71 5.29 + 66.450 2980.00 2870.03 109.97 + 66.500 2572.00 2409.52 162.48 + 66.550 1961.00 1840.62 120.38 + 66.600 1315.00 1308.23 6.77 + 66.650 919.00 890.42 28.58 + 66.700 548.00 605.46 -57.46 + 66.750 405.00 432.45 -27.45 + 66.800 299.00 336.25 -37.25 + 66.850 309.00 284.98 24.02 + 66.900 279.00 256.96 22.04 + 66.950 281.00 240.15 40.85 + 67.000 235.00 228.79 6.21 + 67.050 239.00 220.32 18.68 + 67.100 212.00 213.63 -1.63 + 67.150 228.00 208.19 19.81 + 67.200 231.00 203.70 27.30 + 67.250 198.00 199.93 -1.93 + 67.300 223.00 196.75 26.25 + 67.350 201.00 194.04 6.96 + 67.400 208.00 191.71 16.29 + 67.450 207.00 189.70 17.30 + 67.500 217.00 187.94 29.06 + 67.550 196.00 186.41 9.59 + 67.600 182.00 185.06 -3.06 + 67.650 182.00 183.87 -1.87 + 67.700 186.00 182.80 3.20 + 67.750 176.00 181.86 -5.86 + 67.800 192.00 181.01 10.99 + 67.850 215.00 180.25 34.75 + 67.900 178.00 179.56 -1.56 + 67.950 191.00 178.93 12.07 + 68.000 178.00 178.37 -0.37 + 68.050 185.00 177.85 7.15 + 68.100 171.00 177.38 -6.38 + 68.150 174.00 176.95 -2.95 + 68.200 193.00 176.56 16.44 + 68.250 182.00 176.19 5.81 + 68.300 178.00 175.86 2.14 + 68.350 196.00 175.55 20.45 + 68.400 178.00 175.27 2.73 + 68.450 173.00 175.00 -2.00 + 68.500 175.00 174.76 0.24 + 68.550 178.00 174.53 3.47 + 68.600 177.00 174.32 2.68 + 68.650 176.00 174.12 1.88 + 68.700 200.00 173.94 26.06 + 68.750 177.00 173.76 3.24 + 68.800 185.00 173.60 11.40 + 68.850 167.00 173.45 -6.45 + 68.900 158.00 173.31 -15.31 + 68.950 176.00 173.18 2.82 + 69.000 192.00 173.05 18.95 + 69.050 174.00 172.94 1.06 + 69.100 154.00 172.83 -18.83 + 69.150 153.00 172.72 -19.72 + 69.200 167.00 172.63 -5.63 + 69.250 168.00 172.54 -4.54 + 69.300 167.00 172.45 -5.45 + 69.350 163.00 172.57 -9.57 + 69.400 157.00 172.50 -15.50 + 69.450 185.00 172.43 12.57 + 69.500 151.00 172.36 -21.36 + 69.550 176.00 172.30 3.70 + 69.600 187.00 172.24 14.76 + 69.650 170.00 172.19 -2.19 + 69.700 164.00 172.14 -8.14 + 69.750 204.00 172.09 31.91 69.800 169.00 172.04 -3.04 69.850 191.00 172.00 19.00 69.900 177.00 171.96 5.04 69.950 157.00 171.93 -14.93 - 70.000 173.00 171.89 1.11 + 70.000 173.00 171.90 1.10 70.050 199.00 171.87 27.13 - 70.100 168.00 171.84 -3.84 - 70.150 191.00 171.82 19.18 + 70.100 168.00 171.85 -3.85 + 70.150 191.00 171.83 19.17 70.200 165.00 171.81 -6.81 70.250 156.00 171.80 -15.80 - 70.300 163.00 171.79 -8.79 + 70.300 163.00 171.80 -8.80 70.350 149.00 171.80 -22.80 - 70.400 199.00 171.81 27.19 + 70.400 199.00 171.82 27.18 70.450 158.00 171.85 -13.85 - 70.500 158.00 171.92 -13.92 - 70.550 150.00 172.07 -22.07 - 70.600 197.00 172.38 24.62 + 70.500 158.00 171.93 -13.93 + 70.550 150.00 172.08 -22.08 + 70.600 197.00 172.39 24.61 70.650 167.00 172.95 -5.95 - 70.700 180.00 173.90 6.10 - 70.750 187.00 175.34 11.66 - 70.800 190.00 177.21 12.79 - 70.850 169.00 179.28 -10.28 - 70.900 214.00 181.05 32.95 - 70.950 188.00 181.87 6.13 - 71.000 200.00 181.35 18.65 - 71.050 186.00 179.74 6.26 - 71.100 169.00 177.66 -8.66 - 71.150 166.00 175.68 -9.68 - 71.200 175.00 174.10 0.90 - 71.250 170.00 173.00 -3.00 - 71.300 191.00 172.32 18.68 + 70.700 180.00 173.92 6.08 + 70.750 187.00 175.36 11.64 + 70.800 190.00 177.24 12.76 + 70.850 169.00 179.31 -10.31 + 70.900 214.00 181.09 32.91 + 70.950 188.00 181.92 6.08 + 71.000 200.00 181.39 18.61 + 71.050 186.00 179.77 6.23 + 71.100 169.00 177.69 -8.69 + 71.150 166.00 175.70 -9.70 + 71.200 175.00 174.11 0.89 + 71.250 170.00 173.01 -3.01 + 71.300 191.00 172.33 18.67 71.350 185.00 171.94 13.06 71.400 191.00 171.73 19.27 71.450 181.00 171.61 9.39 @@ -1235,11 +1235,11 @@ BEGIN 71.850 173.00 171.36 1.64 71.900 177.00 171.35 5.65 71.950 193.00 171.34 21.66 - 72.000 190.00 171.34 18.66 + 72.000 190.00 171.33 18.67 72.050 174.00 171.33 2.67 72.100 161.00 171.33 -10.33 72.150 147.00 171.33 -24.33 - 72.200 165.00 171.33 -6.33 + 72.200 165.00 171.32 -6.32 72.250 188.00 171.33 16.67 72.300 172.00 171.33 0.67 72.350 176.00 171.33 4.67 @@ -1253,7 +1253,7 @@ BEGIN 72.750 162.00 171.38 -9.38 72.800 168.00 171.39 -3.39 72.850 194.00 171.40 22.60 - 72.900 164.00 171.42 -7.42 + 72.900 164.00 171.41 -7.41 72.950 169.00 171.43 -2.43 73.000 160.00 171.44 -11.44 73.050 164.00 171.46 -7.46 @@ -1263,439 +1263,439 @@ BEGIN 73.250 150.00 171.53 -21.53 73.300 173.00 171.55 1.45 73.350 183.00 171.57 11.43 - 73.400 169.00 171.60 -2.60 + 73.400 169.00 171.59 -2.59 73.450 180.00 171.62 8.38 73.500 173.00 171.74 1.26 73.550 195.00 171.77 23.23 - 73.600 178.00 171.81 6.19 - 73.650 193.00 171.84 21.16 - 73.700 179.00 171.88 7.12 + 73.600 178.00 171.80 6.20 + 73.650 193.00 171.83 21.17 + 73.700 179.00 171.87 7.13 73.750 153.00 171.91 -18.91 - 73.800 169.00 171.96 -2.96 + 73.800 169.00 171.95 -2.95 73.850 165.00 172.00 -7.00 - 73.900 172.00 172.05 -0.05 + 73.900 172.00 172.04 -0.04 73.950 171.00 172.10 -1.10 - 74.000 178.00 172.16 5.84 - 74.050 180.00 172.22 7.78 - 74.100 168.00 172.29 -4.29 - 74.150 169.00 172.37 -3.37 - 74.200 190.00 172.45 17.55 - 74.250 170.00 172.54 -2.54 - 74.300 178.00 172.65 5.35 - 74.350 158.00 172.77 -14.77 - 74.400 185.00 172.90 12.10 - 74.450 181.00 173.05 7.95 - 74.500 173.00 173.22 -0.22 - 74.550 163.00 173.43 -10.43 - 74.600 184.00 173.66 10.34 - 74.650 181.00 173.94 7.06 - 74.700 192.00 174.28 17.72 - 74.750 166.00 174.69 -8.69 - 74.800 168.00 175.21 -7.21 - 74.850 200.00 175.91 24.09 - 74.900 188.00 176.98 11.02 - 74.950 190.00 178.79 11.21 - 75.000 211.00 182.08 28.92 - 75.050 172.00 188.11 -16.11 - 75.100 198.00 198.56 -0.56 - 75.150 230.00 215.07 14.93 - 75.200 264.00 238.20 25.80 - 75.250 227.00 266.27 -39.27 - 75.300 289.00 294.44 -5.44 - 75.350 290.00 314.69 -24.69 - 75.400 284.00 318.60 -34.60 - 75.450 250.00 304.24 -54.24 - 75.500 233.00 278.25 -45.25 - 75.550 239.00 249.42 -10.42 - 75.600 239.00 223.98 15.02 - 75.650 204.00 204.81 -0.81 - 75.700 178.00 192.13 -14.13 - 75.750 189.00 184.59 4.41 - 75.800 202.00 180.43 21.57 - 75.850 181.00 178.21 2.79 - 75.900 190.00 176.97 13.03 - 75.950 177.00 176.22 0.78 - 76.000 199.00 175.70 23.30 - 76.050 193.00 175.33 17.67 - 76.100 170.00 175.04 -5.04 - 76.150 170.00 174.81 -4.81 - 76.200 165.00 174.64 -9.64 - 76.250 192.00 174.50 17.50 - 76.300 171.00 174.39 -3.39 - 76.350 169.00 174.32 -5.32 - 76.400 168.00 174.26 -6.26 - 76.450 183.00 174.22 8.78 - 76.500 173.00 174.20 -1.20 - 76.550 178.00 174.20 3.80 - 76.600 175.00 173.98 1.02 - 76.650 191.00 174.00 17.00 - 76.700 166.00 174.03 -8.03 - 76.750 187.00 174.07 12.93 - 76.800 191.00 174.12 16.88 - 76.850 184.00 174.18 9.82 - 76.900 168.00 174.25 -6.25 - 76.950 177.00 174.33 2.67 - 77.000 205.00 174.41 30.59 - 77.050 188.00 174.51 13.49 - 77.100 166.00 174.61 -8.61 - 77.150 180.00 174.72 5.28 - 77.200 179.00 174.84 4.16 - 77.250 179.00 174.97 4.03 - 77.300 163.00 175.11 -12.11 - 77.350 188.00 175.27 12.73 - 77.400 169.00 175.43 -6.43 - 77.450 179.00 175.61 3.39 - 77.500 169.00 175.79 -6.79 - 77.550 201.00 176.00 25.00 - 77.600 184.00 176.22 7.78 - 77.650 187.00 176.45 10.55 - 77.700 207.00 176.71 30.29 - 77.750 170.00 176.98 -6.98 - 77.800 193.00 177.28 15.72 - 77.850 189.00 177.60 11.40 - 77.900 205.00 177.95 27.05 - 77.950 183.00 178.32 4.68 - 78.000 179.00 178.73 0.27 - 78.050 188.00 179.18 8.82 - 78.100 194.00 179.67 14.33 - 78.150 220.00 180.20 39.80 - 78.200 195.00 180.79 14.21 - 78.250 176.00 181.43 -5.43 - 78.300 208.00 182.15 25.85 - 78.350 185.00 182.94 2.06 - 78.400 217.00 183.82 33.18 - 78.450 203.00 184.80 18.20 - 78.500 200.00 185.91 14.09 - 78.550 196.00 187.15 8.85 - 78.600 197.00 188.55 8.45 - 78.650 217.00 190.15 26.85 - 78.700 179.00 191.98 -12.98 - 78.750 184.00 194.09 -10.09 - 78.800 187.00 196.53 -9.53 - 78.850 219.00 199.38 19.62 - 78.900 193.00 202.73 -9.73 - 78.950 214.00 206.72 7.28 - 79.000 207.00 211.50 -4.50 - 79.050 199.00 217.33 -18.33 - 79.100 224.00 224.60 -0.60 - 79.150 244.00 234.10 9.90 - 79.200 217.00 247.51 -30.51 - 79.250 266.00 268.63 -2.63 - 79.300 281.00 305.46 -24.46 - 79.350 425.00 372.83 52.17 - 79.400 527.00 494.01 32.99 - 79.450 735.00 697.58 37.42 - 79.500 1057.00 1006.98 50.02 - 79.550 1483.00 1422.53 60.47 - 79.600 1955.00 1902.84 52.16 - 79.650 2315.00 2353.14 -38.14 - 79.700 2552.00 2631.50 -79.50 - 79.750 2506.00 2615.08 -109.08 - 79.800 2261.00 2312.01 -51.01 - 79.850 1842.00 1852.71 -10.71 - 79.900 1328.00 1375.63 -47.63 - 79.950 911.00 970.05 -59.05 - 80.000 592.00 672.18 -80.18 - 80.050 430.00 478.42 -48.42 - 80.100 312.00 364.15 -52.15 - 80.150 284.00 300.89 -16.89 - 80.200 285.00 266.28 18.72 - 80.250 247.00 246.27 0.73 - 80.300 250.00 233.43 16.57 - 80.350 231.00 224.26 6.74 - 80.400 272.00 217.20 54.80 - 80.450 235.00 211.54 23.46 - 80.500 188.00 206.89 -18.89 - 80.550 223.00 203.02 19.98 - 80.600 218.00 199.77 18.23 - 80.650 221.00 197.01 23.99 - 80.700 210.00 194.66 15.34 - 80.750 199.00 192.63 6.37 - 80.800 207.00 190.87 16.13 - 80.850 208.00 189.35 18.65 - 80.900 178.00 188.01 -10.01 - 80.950 194.00 186.84 7.16 - 81.000 202.00 185.80 16.20 - 81.050 226.00 184.88 41.12 - 81.100 209.00 184.07 24.93 - 81.150 194.00 183.35 10.65 - 81.200 179.00 182.70 -3.70 - 81.250 183.00 182.12 0.88 - 81.300 187.00 181.61 5.39 + 74.000 178.00 172.15 5.85 + 74.050 180.00 172.21 7.79 + 74.100 168.00 172.28 -4.28 + 74.150 169.00 172.36 -3.36 + 74.200 190.00 172.44 17.56 + 74.250 170.00 172.53 -2.53 + 74.300 178.00 172.64 5.36 + 74.350 158.00 172.75 -14.75 + 74.400 185.00 172.88 12.12 + 74.450 181.00 173.03 7.97 + 74.500 173.00 173.21 -0.21 + 74.550 163.00 173.41 -10.41 + 74.600 184.00 173.64 10.36 + 74.650 181.00 173.92 7.08 + 74.700 192.00 174.25 17.75 + 74.750 166.00 174.65 -8.65 + 74.800 168.00 175.17 -7.17 + 74.850 200.00 175.87 24.13 + 74.900 188.00 176.92 11.08 + 74.950 190.00 178.71 11.29 + 75.000 211.00 181.97 29.03 + 75.050 172.00 187.93 -15.93 + 75.100 198.00 198.26 -0.26 + 75.150 230.00 214.59 15.41 + 75.200 264.00 237.46 26.54 + 75.250 227.00 265.23 -38.23 + 75.300 289.00 293.09 -4.09 + 75.350 290.00 313.11 -23.11 + 75.400 284.00 316.98 -32.98 + 75.450 250.00 302.78 -52.78 + 75.500 233.00 277.07 -44.07 + 75.550 239.00 248.57 -9.57 + 75.600 239.00 223.41 15.59 + 75.650 204.00 204.45 -0.45 + 75.700 178.00 191.91 -13.91 + 75.750 189.00 184.45 4.55 + 75.800 202.00 180.34 21.66 + 75.850 181.00 178.14 2.86 + 75.900 190.00 176.92 13.08 + 75.950 177.00 176.17 0.83 + 76.000 199.00 175.67 23.33 + 76.050 193.00 175.29 17.71 + 76.100 170.00 175.01 -5.01 + 76.150 170.00 174.79 -4.79 + 76.200 165.00 174.61 -9.61 + 76.250 192.00 174.48 17.52 + 76.300 171.00 174.37 -3.37 + 76.350 169.00 174.30 -5.30 + 76.400 168.00 174.24 -6.24 + 76.450 183.00 174.21 8.79 + 76.500 173.00 174.19 -1.19 + 76.550 178.00 174.18 3.82 + 76.600 175.00 173.97 1.03 + 76.650 191.00 173.99 17.01 + 76.700 166.00 174.02 -8.02 + 76.750 187.00 174.06 12.94 + 76.800 191.00 174.11 16.89 + 76.850 184.00 174.17 9.83 + 76.900 168.00 174.24 -6.24 + 76.950 177.00 174.31 2.69 + 77.000 205.00 174.40 30.60 + 77.050 188.00 174.49 13.51 + 77.100 166.00 174.60 -8.60 + 77.150 180.00 174.71 5.29 + 77.200 179.00 174.83 4.17 + 77.250 179.00 174.96 4.04 + 77.300 163.00 175.10 -12.10 + 77.350 188.00 175.25 12.75 + 77.400 169.00 175.41 -6.41 + 77.450 179.00 175.59 3.41 + 77.500 169.00 175.78 -6.78 + 77.550 201.00 175.98 25.02 + 77.600 184.00 176.20 7.80 + 77.650 187.00 176.43 10.57 + 77.700 207.00 176.69 30.31 + 77.750 170.00 176.96 -6.96 + 77.800 193.00 177.26 15.74 + 77.850 189.00 177.57 11.43 + 77.900 205.00 177.92 27.08 + 77.950 183.00 178.30 4.70 + 78.000 179.00 178.70 0.30 + 78.050 188.00 179.15 8.85 + 78.100 194.00 179.64 14.36 + 78.150 220.00 180.17 39.83 + 78.200 195.00 180.75 14.25 + 78.250 176.00 181.40 -5.40 + 78.300 208.00 182.11 25.89 + 78.350 185.00 182.90 2.10 + 78.400 217.00 183.78 33.22 + 78.450 203.00 184.75 18.25 + 78.500 200.00 185.85 14.15 + 78.550 196.00 187.09 8.91 + 78.600 197.00 188.49 8.51 + 78.650 217.00 190.08 26.92 + 78.700 179.00 191.91 -12.91 + 78.750 184.00 194.00 -10.00 + 78.800 187.00 196.43 -9.43 + 78.850 219.00 199.27 19.73 + 78.900 193.00 202.61 -9.61 + 78.950 214.00 206.58 7.42 + 79.000 207.00 211.35 -4.35 + 79.050 199.00 217.15 -18.15 + 79.100 224.00 224.40 -0.40 + 79.150 244.00 233.86 10.14 + 79.200 217.00 247.21 -30.21 + 79.250 266.00 268.25 -2.25 + 79.300 281.00 304.93 -23.93 + 79.350 425.00 372.04 52.96 + 79.400 527.00 492.73 34.27 + 79.450 735.00 695.49 39.51 + 79.500 1057.00 1003.66 53.34 + 79.550 1483.00 1417.57 65.43 + 79.600 1955.00 1895.97 59.03 + 79.650 2315.00 2344.47 -29.47 + 79.700 2552.00 2621.73 -69.73 + 79.750 2506.00 2605.38 -99.38 + 79.800 2261.00 2303.50 -42.50 + 79.850 1842.00 1846.04 -4.04 + 79.900 1328.00 1370.85 -42.85 + 79.950 911.00 966.89 -55.89 + 80.000 592.00 670.20 -78.20 + 80.050 430.00 477.21 -47.21 + 80.100 312.00 363.39 -51.39 + 80.150 284.00 300.39 -16.39 + 80.200 285.00 265.92 19.08 + 80.250 247.00 245.99 1.01 + 80.300 250.00 233.20 16.80 + 80.350 231.00 224.07 6.93 + 80.400 272.00 217.04 54.96 + 80.450 235.00 211.40 23.60 + 80.500 188.00 206.77 -18.77 + 80.550 223.00 202.91 20.09 + 80.600 218.00 199.68 18.32 + 80.650 221.00 196.93 24.07 + 80.700 210.00 194.58 15.42 + 80.750 199.00 192.56 6.44 + 80.800 207.00 190.82 16.18 + 80.850 208.00 189.30 18.70 + 80.900 178.00 187.96 -9.96 + 80.950 194.00 186.80 7.20 + 81.000 202.00 185.77 16.23 + 81.050 226.00 184.85 41.15 + 81.100 209.00 184.04 24.96 + 81.150 194.00 183.32 10.68 + 81.200 179.00 182.68 -3.68 + 81.250 183.00 182.11 0.89 + 81.300 187.00 181.59 5.41 81.350 198.00 181.14 16.86 81.400 198.00 180.73 17.27 81.450 209.00 180.36 28.64 81.500 187.00 180.05 6.95 81.550 211.00 179.76 31.24 81.600 198.00 179.50 18.50 - 81.650 164.00 179.27 -15.27 - 81.700 200.00 179.07 20.93 - 81.750 212.00 178.90 33.10 - 81.800 197.00 178.75 18.25 - 81.850 191.00 178.62 12.38 - 81.900 195.00 178.52 16.48 - 81.950 217.00 178.44 38.56 - 82.000 189.00 178.39 10.61 - 82.050 182.00 178.35 3.65 - 82.100 174.00 178.34 -4.34 - 82.150 182.00 178.35 3.65 - 82.200 199.00 178.38 20.62 - 82.250 179.00 178.43 0.57 - 82.300 197.00 178.51 18.49 - 82.350 228.00 178.62 49.38 - 82.400 170.00 178.75 -8.75 - 82.450 203.00 178.92 24.08 - 82.500 232.00 179.11 52.89 - 82.550 178.00 179.34 -1.34 - 82.600 216.00 179.61 36.39 - 82.650 205.00 179.93 25.07 - 82.700 185.00 180.30 4.70 - 82.750 212.00 180.72 31.28 - 82.800 199.00 181.21 17.79 - 82.850 169.00 181.78 -12.78 - 82.900 165.00 182.43 -17.43 - 82.950 203.00 183.19 19.81 - 83.000 215.00 184.08 30.92 - 83.050 199.00 185.11 13.89 - 83.100 200.00 186.32 13.68 - 83.150 174.00 187.76 -13.76 - 83.200 192.00 189.47 2.53 - 83.250 206.00 191.52 14.48 - 83.300 191.00 194.01 -3.01 - 83.350 203.00 197.10 5.90 - 83.400 210.00 201.05 8.95 - 83.450 194.00 206.46 -12.46 - 83.500 245.00 214.59 30.41 - 83.550 242.00 228.18 13.82 - 83.600 255.00 252.54 2.46 - 83.650 310.00 296.51 13.49 - 83.700 408.00 372.10 35.90 - 83.750 498.00 491.40 6.60 - 83.800 729.00 659.99 69.01 - 83.850 934.00 868.59 65.41 - 83.900 1121.00 1086.50 34.50 - 83.950 1320.00 1259.08 60.92 - 84.000 1476.00 1321.55 154.45 - 84.050 1276.00 1244.12 31.88 - 84.100 1129.00 1063.13 65.87 - 84.150 887.00 843.93 43.07 - 84.200 643.00 638.66 4.34 - 84.250 490.00 475.43 14.57 - 84.300 343.00 361.42 -18.42 - 84.350 284.00 289.97 -5.97 - 84.400 263.00 248.70 14.30 - 84.450 229.00 225.87 3.13 - 84.500 235.00 213.04 21.96 - 84.550 246.00 205.27 40.73 - 84.600 205.00 200.03 4.97 - 84.650 217.00 196.14 20.86 - 84.700 217.00 193.08 23.92 - 84.750 197.00 190.59 6.41 - 84.800 195.00 188.53 6.47 - 84.850 232.00 186.80 45.20 - 84.900 182.00 185.33 -3.33 - 84.950 192.00 184.08 7.92 - 85.000 172.00 183.00 -11.00 - 85.050 191.00 182.07 8.93 - 85.100 200.00 181.26 18.74 - 85.150 186.00 180.54 5.46 - 85.200 190.00 179.91 10.09 - 85.250 211.00 179.35 31.65 - 85.300 184.00 178.86 5.14 - 85.350 180.00 178.41 1.59 - 85.400 182.00 178.02 3.98 - 85.450 184.00 177.66 6.34 - 85.500 175.00 177.33 -2.33 - 85.550 176.00 177.04 -1.04 - 85.600 166.00 176.77 -10.77 - 85.650 180.00 176.53 3.47 - 85.700 195.00 176.29 18.71 - 85.750 183.00 176.09 6.91 - 85.800 182.00 175.90 6.10 - 85.850 168.00 175.73 -7.73 - 85.900 177.00 175.57 1.43 - 85.950 190.00 175.42 14.58 - 86.000 178.00 175.29 2.71 - 86.050 180.00 175.16 4.84 - 86.100 181.00 175.04 5.96 - 86.150 177.00 174.93 2.07 - 86.200 171.00 174.83 -3.83 - 86.250 193.00 174.74 18.26 - 86.300 181.00 174.65 6.35 - 86.350 180.00 174.57 5.43 - 86.400 198.00 174.49 23.51 - 86.450 177.00 174.42 2.58 - 86.500 161.00 174.35 -13.35 - 86.550 166.00 174.29 -8.29 - 86.600 176.00 174.23 1.77 - 86.650 190.00 174.17 15.83 - 86.700 185.00 174.12 10.88 - 86.750 173.00 174.07 -1.07 - 86.800 176.00 174.02 1.98 - 86.850 159.00 173.98 -14.98 - 86.900 188.00 173.94 14.06 - 86.950 199.00 173.90 25.10 - 87.000 180.00 173.87 6.13 - 87.050 164.00 173.83 -9.83 - 87.100 180.00 173.80 6.20 - 87.150 190.00 173.77 16.23 - 87.200 179.00 173.75 5.25 - 87.250 177.00 173.72 3.28 - 87.300 183.00 173.70 9.30 - 87.350 174.00 173.68 0.32 - 87.400 164.00 173.66 -9.66 - 87.450 165.00 173.65 -8.65 - 87.500 185.00 173.63 11.37 - 87.550 191.00 173.62 17.38 - 87.600 181.00 173.61 7.39 - 87.650 143.00 173.61 -30.61 - 87.700 170.00 173.62 -3.62 - 87.750 150.00 173.63 -23.63 - 87.800 187.00 173.67 13.33 - 87.850 181.00 173.76 7.24 - 87.900 171.00 173.92 -2.92 - 87.950 179.00 174.19 4.81 - 88.000 146.00 174.61 -28.61 - 88.050 175.00 175.18 -0.18 - 88.100 182.00 175.86 6.14 - 88.150 176.00 176.52 -0.52 - 88.200 164.00 176.99 -12.99 + 81.650 164.00 179.28 -15.28 + 81.700 200.00 179.08 20.92 + 81.750 212.00 178.91 33.09 + 81.800 197.00 178.76 18.24 + 81.850 191.00 178.64 12.36 + 81.900 195.00 178.54 16.46 + 81.950 217.00 178.46 38.54 + 82.000 189.00 178.41 10.59 + 82.050 182.00 178.38 3.62 + 82.100 174.00 178.37 -4.37 + 82.150 182.00 178.38 3.62 + 82.200 199.00 178.42 20.58 + 82.250 179.00 178.47 0.53 + 82.300 197.00 178.56 18.44 + 82.350 228.00 178.67 49.33 + 82.400 170.00 178.81 -8.81 + 82.450 203.00 178.97 24.03 + 82.500 232.00 179.17 52.83 + 82.550 178.00 179.41 -1.41 + 82.600 216.00 179.69 36.31 + 82.650 205.00 180.01 24.99 + 82.700 185.00 180.39 4.61 + 82.750 212.00 180.82 31.18 + 82.800 199.00 181.32 17.68 + 82.850 169.00 181.90 -12.90 + 82.900 165.00 182.56 -17.56 + 82.950 203.00 183.34 19.66 + 83.000 215.00 184.24 30.76 + 83.050 199.00 185.29 13.71 + 83.100 200.00 186.52 13.48 + 83.150 174.00 187.98 -13.98 + 83.200 192.00 189.72 2.28 + 83.250 206.00 191.80 14.20 + 83.300 191.00 194.34 -3.34 + 83.350 203.00 197.47 5.53 + 83.400 210.00 201.50 8.50 + 83.450 194.00 206.99 -12.99 + 83.500 245.00 215.25 29.75 + 83.550 242.00 229.06 12.94 + 83.600 255.00 253.82 1.18 + 83.650 310.00 298.49 11.51 + 83.700 408.00 375.30 32.70 + 83.750 498.00 496.53 1.47 + 83.800 729.00 667.84 61.16 + 83.850 934.00 879.82 54.18 + 83.900 1121.00 1101.24 19.76 + 83.950 1320.00 1276.61 43.39 + 84.000 1476.00 1340.09 135.91 + 84.050 1276.00 1261.40 14.60 + 84.100 1129.00 1077.50 51.50 + 84.150 887.00 854.75 32.25 + 84.200 643.00 646.18 -3.18 + 84.250 490.00 480.30 9.70 + 84.300 343.00 364.46 -21.46 + 84.350 284.00 291.85 -7.85 + 84.400 263.00 249.92 13.08 + 84.450 229.00 226.72 2.28 + 84.500 235.00 213.69 21.31 + 84.550 246.00 205.79 40.21 + 84.600 205.00 200.46 4.54 + 84.650 217.00 196.51 20.49 + 84.700 217.00 193.40 23.60 + 84.750 197.00 190.87 6.13 + 84.800 195.00 188.78 6.22 + 84.850 232.00 187.02 44.98 + 84.900 182.00 185.53 -3.53 + 84.950 192.00 184.26 7.74 + 85.000 172.00 183.17 -11.17 + 85.050 191.00 182.22 8.78 + 85.100 200.00 181.39 18.61 + 85.150 186.00 180.67 5.33 + 85.200 190.00 180.03 9.97 + 85.250 211.00 179.46 31.54 + 85.300 184.00 178.95 5.05 + 85.350 180.00 178.50 1.50 + 85.400 182.00 178.10 3.90 + 85.450 184.00 177.73 6.27 + 85.500 175.00 177.40 -2.40 + 85.550 176.00 177.11 -1.11 + 85.600 166.00 176.83 -10.83 + 85.650 180.00 176.59 3.41 + 85.700 195.00 176.35 18.65 + 85.750 183.00 176.14 6.86 + 85.800 182.00 175.95 6.05 + 85.850 168.00 175.77 -7.77 + 85.900 177.00 175.61 1.39 + 85.950 190.00 175.46 14.54 + 86.000 178.00 175.33 2.67 + 86.050 180.00 175.20 4.80 + 86.100 181.00 175.08 5.92 + 86.150 177.00 174.97 2.03 + 86.200 171.00 174.86 -3.86 + 86.250 193.00 174.77 18.23 + 86.300 181.00 174.68 6.32 + 86.350 180.00 174.59 5.41 + 86.400 198.00 174.52 23.48 + 86.450 177.00 174.44 2.56 + 86.500 161.00 174.37 -13.37 + 86.550 166.00 174.31 -8.31 + 86.600 176.00 174.25 1.75 + 86.650 190.00 174.19 15.81 + 86.700 185.00 174.14 10.86 + 86.750 173.00 174.09 -1.09 + 86.800 176.00 174.04 1.96 + 86.850 159.00 174.00 -15.00 + 86.900 188.00 173.96 14.04 + 86.950 199.00 173.92 25.08 + 87.000 180.00 173.88 6.12 + 87.050 164.00 173.85 -9.85 + 87.100 180.00 173.82 6.18 + 87.150 190.00 173.79 16.21 + 87.200 179.00 173.76 5.24 + 87.250 177.00 173.74 3.26 + 87.300 183.00 173.71 9.29 + 87.350 174.00 173.69 0.31 + 87.400 164.00 173.67 -9.67 + 87.450 165.00 173.66 -8.66 + 87.500 185.00 173.64 11.36 + 87.550 191.00 173.63 17.37 + 87.600 181.00 173.63 7.37 + 87.650 143.00 173.62 -30.62 + 87.700 170.00 173.63 -3.63 + 87.750 150.00 173.64 -23.64 + 87.800 187.00 173.68 13.32 + 87.850 181.00 173.77 7.23 + 87.900 171.00 173.93 -2.93 + 87.950 179.00 174.20 4.80 + 88.000 146.00 174.62 -28.62 + 88.050 175.00 175.19 -0.19 + 88.100 182.00 175.87 6.13 + 88.150 176.00 176.53 -0.53 + 88.200 164.00 177.00 -13.00 88.250 152.00 177.08 -25.08 - 88.300 188.00 176.73 11.27 + 88.300 188.00 176.74 11.26 88.350 152.00 176.11 -24.11 - 88.400 172.00 175.40 -3.40 - 88.450 140.00 174.76 -34.76 - 88.500 176.00 174.26 1.74 - 88.550 168.00 173.92 -5.92 - 88.600 197.00 173.70 23.30 - 88.650 190.00 173.57 16.43 - 88.700 176.00 173.50 2.50 - 88.750 167.00 173.46 -6.46 + 88.400 172.00 175.41 -3.41 + 88.450 140.00 174.77 -34.77 + 88.500 176.00 174.27 1.73 + 88.550 168.00 173.93 -5.93 + 88.600 197.00 173.71 23.29 + 88.650 190.00 173.58 16.42 + 88.700 176.00 173.51 2.49 + 88.750 167.00 173.47 -6.47 88.800 182.00 173.44 8.56 - 88.850 175.00 173.42 1.58 + 88.850 175.00 173.43 1.57 88.900 154.00 173.41 -19.41 88.950 168.00 173.40 -5.40 - 89.000 187.00 173.39 13.61 + 89.000 187.00 173.40 13.60 89.050 163.00 173.39 -10.39 - 89.100 173.00 173.38 -0.38 - 89.150 161.00 173.38 -12.38 - 89.200 170.00 173.38 -3.38 - 89.250 178.00 173.38 4.62 - 89.300 174.00 173.44 0.56 - 89.350 172.00 173.44 -1.44 + 89.100 173.00 173.39 -0.39 + 89.150 161.00 173.39 -12.39 + 89.200 170.00 173.39 -3.39 + 89.250 178.00 173.39 4.61 + 89.300 174.00 173.45 0.55 + 89.350 172.00 173.45 -1.45 89.400 167.00 173.45 -6.45 - 89.450 168.00 173.45 -5.45 + 89.450 168.00 173.46 -5.46 89.500 164.00 173.46 -9.46 - 89.550 183.00 173.46 9.54 - 89.600 141.00 173.47 -32.47 + 89.550 183.00 173.47 9.53 + 89.600 141.00 173.48 -32.48 89.650 173.00 173.48 -0.48 89.700 190.00 173.49 16.51 89.750 180.00 173.50 6.50 89.800 162.00 173.51 -11.51 - 89.850 166.00 173.52 -7.52 + 89.850 166.00 173.53 -7.53 89.900 164.00 173.54 -9.54 89.950 166.00 173.55 -7.55 - 90.000 170.00 173.56 -3.56 + 90.000 170.00 173.57 -3.57 90.050 176.00 173.58 2.42 - 90.100 181.00 173.39 7.61 - 90.150 175.00 173.41 1.59 + 90.100 181.00 173.40 7.60 + 90.150 175.00 173.42 1.58 90.200 161.00 173.44 -12.44 90.250 170.00 173.46 -3.46 - 90.300 166.00 173.48 -7.48 - 90.350 175.00 173.51 1.49 - 90.400 171.00 173.54 -2.54 - 90.450 172.00 173.57 -1.57 - 90.500 183.00 173.60 9.40 + 90.300 166.00 173.49 -7.49 + 90.350 175.00 173.52 1.48 + 90.400 171.00 173.55 -2.55 + 90.450 172.00 173.58 -1.58 + 90.500 183.00 173.61 9.39 90.550 165.00 173.64 -8.64 90.600 181.00 173.68 7.32 90.650 168.00 173.72 -5.72 - 90.700 179.00 173.76 5.24 - 90.750 157.00 173.81 -16.81 - 90.800 172.00 173.86 -1.86 + 90.700 179.00 173.77 5.23 + 90.750 157.00 173.82 -16.82 + 90.800 172.00 173.87 -1.87 90.850 187.00 173.92 13.08 - 90.900 181.00 173.98 7.02 + 90.900 181.00 173.99 7.01 90.950 163.00 174.05 -11.05 - 91.000 163.00 174.12 -11.12 - 91.050 166.00 174.20 -8.20 - 91.100 161.00 174.29 -13.29 - 91.150 167.00 174.39 -7.39 - 91.200 148.00 174.50 -26.50 - 91.250 175.00 174.62 0.38 - 91.300 195.00 174.76 20.24 - 91.350 181.00 174.92 6.08 - 91.400 173.00 175.10 -2.10 - 91.450 160.00 175.30 -15.30 - 91.500 180.00 175.54 4.46 - 91.550 183.00 175.81 7.19 - 91.600 156.00 176.12 -20.12 - 91.650 163.00 176.49 -13.49 - 91.700 175.00 176.93 -1.93 - 91.750 189.00 177.46 11.54 - 91.800 181.00 178.12 2.88 - 91.850 186.00 178.95 7.05 - 91.900 184.00 180.09 3.91 - 91.950 187.00 181.79 5.21 - 92.000 191.00 184.58 6.42 - 92.050 203.00 189.46 13.54 - 92.100 194.00 197.98 -3.98 - 92.150 237.00 212.25 24.75 - 92.200 242.00 234.34 7.66 - 92.250 307.00 265.30 41.70 - 92.300 299.00 303.79 -4.79 - 92.350 340.00 345.00 -5.00 - 92.400 357.00 380.09 -23.09 - 92.450 354.00 397.60 -43.60 - 92.500 370.00 389.96 -19.96 - 92.550 375.00 360.65 14.35 - 92.600 303.00 320.66 -17.66 - 92.650 264.00 280.26 -16.26 - 92.700 243.00 245.93 -2.93 - 92.750 207.00 220.26 -13.26 - 92.800 199.00 203.05 -4.05 - 92.850 180.00 192.47 -12.47 - 92.900 202.00 186.35 15.65 - 92.950 188.00 182.88 5.12 - 93.000 183.00 180.83 2.17 - 93.050 170.00 179.52 -9.52 - 93.100 180.00 178.60 1.40 - 93.150 182.00 177.89 4.11 - 93.200 186.00 177.33 8.67 - 93.250 196.00 176.87 19.13 - 93.300 177.00 176.49 0.51 - 93.350 198.00 176.16 21.84 - 93.400 182.00 175.89 6.11 - 93.450 183.00 175.65 7.35 - 93.500 184.00 175.45 8.55 - 93.550 181.00 175.28 5.72 + 91.000 163.00 174.13 -11.13 + 91.050 166.00 174.21 -8.21 + 91.100 161.00 174.30 -13.30 + 91.150 167.00 174.40 -7.40 + 91.200 148.00 174.51 -26.51 + 91.250 175.00 174.63 0.37 + 91.300 195.00 174.77 20.23 + 91.350 181.00 174.93 6.07 + 91.400 173.00 175.11 -2.11 + 91.450 160.00 175.31 -15.31 + 91.500 180.00 175.55 4.45 + 91.550 183.00 175.82 7.18 + 91.600 156.00 176.14 -20.14 + 91.650 163.00 176.51 -13.51 + 91.700 175.00 176.95 -1.95 + 91.750 189.00 177.49 11.51 + 91.800 181.00 178.14 2.86 + 91.850 186.00 178.98 7.02 + 91.900 184.00 180.13 3.87 + 91.950 187.00 181.83 5.17 + 92.000 191.00 184.64 6.36 + 92.050 203.00 189.54 13.46 + 92.100 194.00 198.11 -4.11 + 92.150 237.00 212.46 24.54 + 92.200 242.00 234.67 7.33 + 92.250 307.00 265.79 41.21 + 92.300 299.00 304.49 -5.49 + 92.350 340.00 345.92 -5.92 + 92.400 357.00 381.20 -24.20 + 92.450 354.00 398.80 -44.80 + 92.500 370.00 391.12 -21.12 + 92.550 375.00 361.66 13.34 + 92.600 303.00 321.45 -18.45 + 92.650 264.00 280.84 -16.84 + 92.700 243.00 246.31 -3.31 + 92.750 207.00 220.51 -13.51 + 92.800 199.00 203.21 -4.21 + 92.850 180.00 192.57 -12.57 + 92.900 202.00 186.42 15.58 + 92.950 188.00 182.93 5.07 + 93.000 183.00 180.87 2.13 + 93.050 170.00 179.55 -9.55 + 93.100 180.00 178.63 1.37 + 93.150 182.00 177.92 4.08 + 93.200 186.00 177.35 8.65 + 93.250 196.00 176.89 19.11 + 93.300 177.00 176.50 0.50 + 93.350 198.00 176.18 21.82 + 93.400 182.00 175.90 6.10 + 93.450 183.00 175.66 7.34 + 93.500 184.00 175.46 8.54 + 93.550 181.00 175.29 5.71 93.600 190.00 175.13 14.87 - 93.650 176.00 174.99 1.01 + 93.650 176.00 175.00 1.00 93.700 197.00 174.88 22.12 - 93.750 174.00 174.77 -0.77 - 93.800 159.00 174.68 -15.68 - 93.850 171.00 174.60 -3.60 - 93.900 159.00 174.53 -15.53 + 93.750 174.00 174.78 -0.78 + 93.800 159.00 174.69 -15.69 + 93.850 171.00 174.61 -3.61 + 93.900 159.00 174.54 -15.54 93.950 170.00 174.47 -4.47 94.000 172.00 174.41 -2.41 94.050 159.00 174.36 -15.36 - 94.100 160.00 174.31 -14.31 - 94.150 173.00 174.27 -1.27 + 94.100 160.00 174.32 -14.32 + 94.150 173.00 174.28 -1.28 94.200 147.00 174.24 -27.24 - 94.250 143.00 174.20 -31.20 + 94.250 143.00 174.21 -31.21 94.300 150.00 174.18 -24.18 94.350 155.00 174.15 -19.15 - 94.400 160.00 174.12 -14.12 + 94.400 160.00 174.13 -14.13 94.450 155.00 174.10 -19.10 94.500 176.00 174.08 1.92 94.550 198.00 173.97 24.03 94.600 179.00 173.96 5.04 - 94.650 161.00 173.95 -12.95 + 94.650 161.00 173.94 -12.94 94.700 175.00 173.93 1.07 - 94.750 157.00 173.93 -16.93 - 94.800 173.00 173.92 -0.92 + 94.750 157.00 173.92 -16.92 + 94.800 173.00 173.91 -0.91 94.850 168.00 173.91 -5.91 94.900 171.00 173.90 -2.90 94.950 173.00 173.90 -0.90 - 95.000 183.00 173.90 9.10 + 95.000 183.00 173.89 9.11 95.050 148.00 173.89 -25.89 95.100 160.00 173.89 -13.89 95.150 171.00 173.89 -2.89 @@ -1703,315 +1703,315 @@ BEGIN 95.250 195.00 173.89 21.11 95.300 175.00 173.89 1.11 95.350 200.00 173.89 26.11 - 95.400 176.00 173.90 2.10 - 95.450 175.00 173.90 1.10 + 95.400 176.00 173.89 2.11 + 95.450 175.00 173.89 1.11 95.500 194.00 173.90 20.10 - 95.550 190.00 173.91 16.09 + 95.550 190.00 173.90 16.10 95.600 154.00 173.91 -19.91 - 95.650 166.00 173.92 -7.92 + 95.650 166.00 173.91 -7.91 95.700 164.00 173.92 -9.92 - 95.750 166.00 173.93 -7.93 + 95.750 166.00 173.92 -7.92 95.800 162.00 173.93 -11.93 95.850 183.00 173.94 9.06 - 95.900 149.00 173.95 -24.95 - 95.950 171.00 173.96 -2.96 + 95.900 149.00 173.94 -24.94 + 95.950 171.00 173.95 -2.95 96.000 165.00 173.96 -8.96 96.050 181.00 173.97 7.03 96.100 188.00 173.98 14.02 - 96.150 184.00 173.99 10.01 - 96.200 162.00 174.00 -12.00 - 96.250 163.00 174.01 -11.01 + 96.150 184.00 173.98 10.02 + 96.200 162.00 173.99 -11.99 + 96.250 163.00 174.00 -11.00 96.300 165.00 174.02 -9.02 96.350 183.00 174.03 8.97 96.400 182.00 174.04 7.96 - 96.450 156.00 174.06 -18.06 - 96.500 159.00 174.07 -15.07 - 96.550 139.00 174.08 -35.08 + 96.450 156.00 174.05 -18.05 + 96.500 159.00 174.06 -15.06 + 96.550 139.00 174.07 -35.07 96.600 165.00 174.09 -9.09 - 96.650 164.00 174.11 -10.11 - 96.700 184.00 174.12 9.88 - 96.750 159.00 174.14 -15.14 - 96.800 159.00 174.15 -15.15 - 96.850 155.00 174.17 -19.17 - 96.900 162.00 174.20 -12.20 - 96.950 157.00 174.21 -17.21 - 97.000 160.00 174.23 -14.23 - 97.050 168.00 174.25 -6.25 - 97.100 168.00 174.27 -6.27 - 97.150 151.00 174.29 -23.29 - 97.200 162.00 174.31 -12.31 - 97.250 163.00 174.33 -11.33 - 97.300 166.00 174.35 -8.35 - 97.350 161.00 174.37 -13.37 - 97.400 158.00 174.39 -16.39 - 97.450 151.00 174.41 -23.41 - 97.500 163.00 174.44 -11.44 - 97.550 179.00 174.46 4.54 - 97.600 166.00 174.49 -8.49 - 97.650 155.00 174.52 -19.52 - 97.700 160.00 174.54 -14.54 - 97.750 152.00 174.57 -22.57 - 97.800 184.00 174.60 9.40 - 97.850 175.00 174.63 0.37 - 97.900 161.00 174.67 -13.67 - 97.950 166.00 174.70 -8.70 - 98.000 150.00 174.74 -24.74 - 98.050 179.00 174.77 4.23 - 98.100 184.00 174.81 9.19 - 98.150 151.00 174.85 -23.85 - 98.200 173.00 174.90 -1.90 - 98.250 164.00 174.94 -10.94 - 98.300 178.00 174.99 3.01 - 98.350 176.00 175.04 0.96 - 98.400 162.00 175.09 -13.09 - 98.450 173.00 175.14 -2.14 - 98.500 154.00 175.20 -21.20 - 98.550 184.00 175.26 8.74 - 98.600 142.00 175.32 -33.32 - 98.650 184.00 175.39 8.61 - 98.700 156.00 175.46 -19.46 - 98.750 177.00 175.54 1.46 - 98.800 163.00 175.62 -12.62 - 98.850 173.00 175.71 -2.71 - 98.900 180.00 175.80 4.20 - 98.950 181.00 175.90 5.10 - 99.000 165.00 176.00 -11.00 - 99.050 177.00 176.12 0.88 - 99.100 155.00 176.24 -21.24 - 99.150 147.00 176.37 -29.37 - 99.200 163.00 176.52 -13.52 - 99.250 172.00 176.67 -4.67 - 99.300 145.00 176.84 -31.84 - 99.350 156.00 177.02 -21.02 - 99.400 161.00 177.22 -16.22 - 99.450 189.00 177.44 11.56 - 99.500 182.00 177.68 4.32 - 99.550 172.00 177.94 -5.94 - 99.600 176.00 178.24 -2.24 - 99.650 166.00 178.56 -12.56 - 99.700 190.00 178.93 11.07 - 99.750 154.00 179.33 -25.33 - 99.800 198.00 179.79 18.21 - 99.850 152.00 180.31 -28.31 - 99.900 160.00 180.89 -20.89 - 99.950 174.00 181.56 -7.56 - 100.000 187.00 182.34 4.66 - 100.050 178.00 183.23 -5.23 - 100.100 149.00 184.27 -35.27 - 100.150 171.00 185.50 -14.50 - 100.200 185.00 186.96 -1.96 - 100.250 207.00 188.73 18.27 - 100.300 184.00 190.93 -6.93 - 100.350 187.00 193.83 -6.83 - 100.400 231.00 197.91 33.09 - 100.450 226.00 204.20 21.80 - 100.500 203.00 214.57 -11.57 - 100.550 214.00 232.15 -18.15 - 100.600 279.00 261.41 17.59 - 100.650 319.00 307.79 11.21 - 100.700 397.00 375.66 21.34 - 100.750 435.00 466.44 -31.44 - 100.800 539.00 575.33 -36.33 - 100.850 665.00 689.14 -24.14 - 100.900 724.00 785.38 -61.38 - 100.950 723.00 835.67 -112.67 - 101.000 783.00 820.59 -37.59 - 101.050 719.00 746.35 -27.35 - 101.100 585.00 638.95 -53.95 - 101.150 465.00 525.12 -60.12 - 101.200 371.00 423.27 -52.27 - 101.250 328.00 342.56 -14.56 - 101.300 277.00 284.77 -7.77 - 101.350 248.00 246.77 1.23 - 101.400 209.00 223.38 -14.38 - 101.450 221.00 209.52 11.48 - 101.500 198.00 201.29 -3.29 - 101.550 203.00 196.17 6.83 - 101.600 188.00 192.72 -4.72 - 101.650 207.00 190.19 16.81 - 101.700 195.00 188.22 6.78 - 101.750 170.00 186.61 -16.61 - 101.800 192.00 185.28 6.72 - 101.850 172.00 184.15 -12.15 - 101.900 185.00 183.20 1.80 - 101.950 183.00 182.38 0.62 - 102.000 211.00 181.67 29.33 - 102.050 147.00 181.05 -34.05 - 102.100 176.00 180.51 -4.51 - 102.150 186.00 180.04 5.96 - 102.200 171.00 179.62 -8.62 - 102.250 169.00 179.25 -10.25 - 102.300 192.00 178.92 13.08 - 102.350 215.00 178.62 36.38 - 102.400 146.00 178.36 -32.36 - 102.450 169.00 178.12 -9.12 - 102.500 188.00 177.91 10.09 - 102.550 175.00 177.71 -2.71 - 102.600 165.00 177.54 -12.54 - 102.650 184.00 177.38 6.62 - 102.700 172.00 177.23 -5.23 - 102.750 179.00 177.10 1.90 - 102.800 163.00 176.97 -13.97 - 102.850 167.00 176.86 -9.86 - 102.900 179.00 176.76 2.24 - 102.950 171.00 176.66 -5.66 - 103.000 181.00 176.58 4.42 - 103.050 171.00 176.50 -5.50 - 103.100 180.00 176.42 3.58 - 103.150 173.00 176.36 -3.36 - 103.200 167.00 176.29 -9.29 - 103.250 186.00 176.23 9.77 - 103.300 176.00 176.18 -0.18 - 103.350 191.00 176.13 14.87 - 103.400 170.00 176.08 -6.08 - 103.450 167.00 176.02 -9.02 - 103.500 165.00 175.98 -10.98 - 103.550 182.00 175.94 6.06 - 103.600 173.00 175.91 -2.91 - 103.650 186.00 175.88 10.12 - 103.700 161.00 175.85 -14.85 - 103.750 166.00 175.82 -9.82 - 103.800 157.00 175.80 -18.80 - 103.850 170.00 175.78 -5.78 - 103.900 183.00 175.76 7.24 - 103.950 179.00 175.74 3.26 - 104.000 164.00 175.72 -11.72 - 104.050 169.00 175.70 -6.70 - 104.100 161.00 175.69 -14.69 - 104.150 156.00 175.68 -19.68 - 104.200 163.00 175.67 -12.67 - 104.250 174.00 175.66 -1.66 - 104.300 161.00 175.65 -14.65 - 104.350 169.00 175.80 -6.80 - 104.400 158.00 175.80 -17.80 - 104.450 180.00 175.79 4.21 - 104.500 171.00 175.79 -4.79 - 104.550 165.00 175.80 -10.80 - 104.600 163.00 175.80 -12.80 - 104.650 172.00 175.81 -3.81 - 104.700 164.00 175.83 -11.83 - 104.750 174.00 175.85 -1.85 - 104.800 178.00 175.89 2.11 - 104.850 154.00 175.97 -21.97 - 104.900 176.00 176.09 -0.09 - 104.950 142.00 176.28 -34.28 - 105.000 163.00 176.56 -13.56 - 105.050 177.00 176.95 0.05 - 105.100 194.00 177.43 16.57 - 105.150 176.00 177.96 -1.96 - 105.200 207.00 178.46 28.54 - 105.250 158.00 178.81 -20.81 - 105.300 151.00 178.92 -27.92 - 105.350 183.00 178.72 4.28 - 105.400 159.00 178.31 -19.31 - 105.450 179.00 177.80 1.20 - 105.500 170.00 177.28 -7.28 - 105.550 192.00 176.84 15.16 - 105.600 160.00 176.50 -16.50 + 96.650 164.00 174.10 -10.10 + 96.700 184.00 174.11 9.89 + 96.750 159.00 174.13 -15.13 + 96.800 159.00 174.14 -15.14 + 96.850 155.00 174.16 -19.16 + 96.900 162.00 174.19 -12.19 + 96.950 157.00 174.20 -17.20 + 97.000 160.00 174.22 -14.22 + 97.050 168.00 174.24 -6.24 + 97.100 168.00 174.26 -6.26 + 97.150 151.00 174.28 -23.28 + 97.200 162.00 174.29 -12.29 + 97.250 163.00 174.31 -11.31 + 97.300 166.00 174.34 -8.34 + 97.350 161.00 174.36 -13.36 + 97.400 158.00 174.38 -16.38 + 97.450 151.00 174.40 -23.40 + 97.500 163.00 174.43 -11.43 + 97.550 179.00 174.45 4.55 + 97.600 166.00 174.48 -8.48 + 97.650 155.00 174.50 -19.50 + 97.700 160.00 174.53 -14.53 + 97.750 152.00 174.56 -22.56 + 97.800 184.00 174.59 9.41 + 97.850 175.00 174.62 0.38 + 97.900 161.00 174.65 -13.65 + 97.950 166.00 174.68 -8.68 + 98.000 150.00 174.72 -24.72 + 98.050 179.00 174.76 4.24 + 98.100 184.00 174.79 9.21 + 98.150 151.00 174.83 -23.83 + 98.200 173.00 174.87 -1.87 + 98.250 164.00 174.92 -10.92 + 98.300 178.00 174.96 3.04 + 98.350 176.00 175.01 0.99 + 98.400 162.00 175.06 -13.06 + 98.450 173.00 175.12 -2.12 + 98.500 154.00 175.17 -21.17 + 98.550 184.00 175.23 8.77 + 98.600 142.00 175.30 -33.30 + 98.650 184.00 175.36 8.64 + 98.700 156.00 175.43 -19.43 + 98.750 177.00 175.51 1.49 + 98.800 163.00 175.59 -12.59 + 98.850 173.00 175.67 -2.67 + 98.900 180.00 175.76 4.24 + 98.950 181.00 175.86 5.14 + 99.000 165.00 175.96 -10.96 + 99.050 177.00 176.08 0.92 + 99.100 155.00 176.20 -21.20 + 99.150 147.00 176.33 -29.33 + 99.200 163.00 176.47 -13.47 + 99.250 172.00 176.62 -4.62 + 99.300 145.00 176.78 -31.78 + 99.350 156.00 176.96 -20.96 + 99.400 161.00 177.16 -16.16 + 99.450 189.00 177.37 11.63 + 99.500 182.00 177.61 4.39 + 99.550 172.00 177.87 -5.87 + 99.600 176.00 178.16 -2.16 + 99.650 166.00 178.47 -12.47 + 99.700 190.00 178.83 11.17 + 99.750 154.00 179.23 -25.23 + 99.800 198.00 179.68 18.32 + 99.850 152.00 180.18 -28.18 + 99.900 160.00 180.76 -20.76 + 99.950 174.00 181.42 -7.42 + 100.000 187.00 182.18 4.82 + 100.050 178.00 183.05 -5.05 + 100.100 149.00 184.07 -35.07 + 100.150 171.00 185.28 -14.28 + 100.200 185.00 186.71 -1.71 + 100.250 207.00 188.44 18.56 + 100.300 184.00 190.61 -6.61 + 100.350 187.00 193.44 -6.44 + 100.400 231.00 197.45 33.55 + 100.450 226.00 203.62 22.38 + 100.500 203.00 213.79 -10.79 + 100.550 214.00 231.02 -17.02 + 100.600 279.00 259.71 19.29 + 100.650 319.00 305.20 13.80 + 100.700 397.00 371.75 25.25 + 100.750 435.00 460.77 -25.77 + 100.800 539.00 567.54 -28.54 + 100.850 665.00 679.13 -14.13 + 100.900 724.00 773.50 -49.50 + 100.950 723.00 822.82 -99.82 + 101.000 783.00 808.04 -25.04 + 101.050 719.00 735.24 -16.24 + 101.100 585.00 629.92 -44.92 + 101.150 465.00 518.30 -53.30 + 101.200 371.00 418.43 -47.43 + 101.250 328.00 339.30 -11.30 + 101.300 277.00 282.63 -5.63 + 101.350 248.00 245.36 2.64 + 101.400 209.00 222.42 -13.42 + 101.450 221.00 208.83 12.17 + 101.500 198.00 200.76 -2.76 + 101.550 203.00 195.74 7.26 + 101.600 188.00 192.36 -4.36 + 101.650 207.00 189.88 17.12 + 101.700 195.00 187.95 7.05 + 101.750 170.00 186.38 -16.38 + 101.800 192.00 185.07 6.93 + 101.850 172.00 183.97 -11.97 + 101.900 185.00 183.03 1.97 + 101.950 183.00 182.22 0.78 + 102.000 211.00 181.53 29.47 + 102.050 147.00 180.92 -33.92 + 102.100 176.00 180.40 -4.40 + 102.150 186.00 179.93 6.07 + 102.200 171.00 179.52 -8.52 + 102.250 169.00 179.16 -10.16 + 102.300 192.00 178.83 13.17 + 102.350 215.00 178.55 36.45 + 102.400 146.00 178.29 -32.29 + 102.450 169.00 178.05 -9.05 + 102.500 188.00 177.84 10.16 + 102.550 175.00 177.65 -2.65 + 102.600 165.00 177.48 -12.48 + 102.650 184.00 177.32 6.68 + 102.700 172.00 177.18 -5.18 + 102.750 179.00 177.05 1.95 + 102.800 163.00 176.93 -13.93 + 102.850 167.00 176.82 -9.82 + 102.900 179.00 176.72 2.28 + 102.950 171.00 176.63 -5.63 + 103.000 181.00 176.54 4.46 + 103.050 171.00 176.46 -5.46 + 103.100 180.00 176.39 3.61 + 103.150 173.00 176.32 -3.32 + 103.200 167.00 176.26 -9.26 + 103.250 186.00 176.20 9.80 + 103.300 176.00 176.15 -0.15 + 103.350 191.00 176.10 14.90 + 103.400 170.00 176.06 -6.06 + 103.450 167.00 176.00 -9.00 + 103.500 165.00 175.96 -10.96 + 103.550 182.00 175.92 6.08 + 103.600 173.00 175.89 -2.89 + 103.650 186.00 175.86 10.14 + 103.700 161.00 175.83 -14.83 + 103.750 166.00 175.80 -9.80 + 103.800 157.00 175.78 -18.78 + 103.850 170.00 175.76 -5.76 + 103.900 183.00 175.74 7.26 + 103.950 179.00 175.72 3.28 + 104.000 164.00 175.70 -11.70 + 104.050 169.00 175.69 -6.69 + 104.100 161.00 175.67 -14.67 + 104.150 156.00 175.66 -19.66 + 104.200 163.00 175.65 -12.65 + 104.250 174.00 175.64 -1.64 + 104.300 161.00 175.64 -14.64 + 104.350 169.00 175.78 -6.78 + 104.400 158.00 175.78 -17.78 + 104.450 180.00 175.78 4.22 + 104.500 171.00 175.78 -4.78 + 104.550 165.00 175.78 -10.78 + 104.600 163.00 175.79 -12.79 + 104.650 172.00 175.80 -3.80 + 104.700 164.00 175.81 -11.81 + 104.750 174.00 175.84 -1.84 + 104.800 178.00 175.88 2.12 + 104.850 154.00 175.96 -21.96 + 104.900 176.00 176.08 -0.08 + 104.950 142.00 176.27 -34.27 + 105.000 163.00 176.55 -13.55 + 105.050 177.00 176.94 0.06 + 105.100 194.00 177.41 16.59 + 105.150 176.00 177.94 -1.94 + 105.200 207.00 178.44 28.56 + 105.250 158.00 178.80 -20.80 + 105.300 151.00 178.90 -27.90 + 105.350 183.00 178.71 4.29 + 105.400 159.00 178.30 -19.30 + 105.450 179.00 177.78 1.22 + 105.500 170.00 177.27 -7.27 + 105.550 192.00 176.83 15.17 + 105.600 160.00 176.49 -16.49 105.650 168.00 176.25 -8.25 - 105.700 183.00 176.10 6.90 - 105.750 163.00 176.00 -13.00 - 105.800 162.00 175.95 -13.95 - 105.850 182.00 175.92 6.08 - 105.900 154.00 175.90 -21.90 + 105.700 183.00 176.09 6.91 + 105.750 163.00 175.99 -12.99 + 105.800 162.00 175.94 -13.94 + 105.850 182.00 175.91 6.09 + 105.900 154.00 175.89 -21.89 105.950 180.00 175.89 4.11 - 106.000 168.00 175.89 -7.89 - 106.050 166.00 175.89 -9.89 + 106.000 168.00 175.88 -7.88 + 106.050 166.00 175.88 -9.88 106.100 155.00 175.89 -20.89 - 106.150 190.00 175.90 14.10 + 106.150 190.00 175.89 14.11 106.200 165.00 175.90 -10.90 106.250 163.00 175.91 -12.91 - 106.300 183.00 175.92 7.08 - 106.350 165.00 175.93 -10.93 - 106.400 173.00 175.94 -2.94 - 106.450 163.00 175.95 -12.95 + 106.300 183.00 175.91 7.09 + 106.350 165.00 175.92 -10.92 + 106.400 173.00 175.93 -2.93 + 106.450 163.00 175.94 -12.94 106.500 151.00 175.96 -24.96 106.550 198.00 175.97 22.03 - 106.600 165.00 175.99 -10.99 + 106.600 165.00 175.98 -10.98 106.650 157.00 176.00 -19.00 - 106.700 159.00 176.02 -17.02 + 106.700 159.00 176.01 -17.01 106.750 177.00 176.03 0.97 - 106.800 156.00 176.05 -20.05 - 106.850 182.00 176.07 5.93 + 106.800 156.00 176.04 -20.04 + 106.850 182.00 176.06 5.94 106.900 181.00 176.08 4.92 106.950 158.00 176.10 -18.10 107.000 176.00 176.12 -0.12 107.050 163.00 176.14 -13.14 107.100 156.00 176.16 -20.16 - 107.150 213.00 176.19 36.81 - 107.200 172.00 176.21 -4.21 + 107.150 213.00 176.18 36.82 + 107.200 172.00 176.20 -4.20 107.250 170.00 176.23 -6.23 - 107.300 168.00 176.26 -8.26 + 107.300 168.00 176.25 -8.25 107.350 169.00 176.28 -7.28 107.400 169.00 176.31 -7.31 107.450 168.00 176.34 -8.34 107.500 155.00 176.37 -21.37 107.550 164.00 176.40 -12.40 - 107.600 168.00 176.44 -8.44 + 107.600 168.00 176.43 -8.43 107.650 144.00 176.47 -32.47 107.700 166.00 176.51 -10.51 - 107.750 172.00 176.55 -4.55 + 107.750 172.00 176.54 -4.54 107.800 156.00 176.59 -20.59 - 107.850 154.00 176.64 -22.64 + 107.850 154.00 176.63 -22.63 107.900 143.00 176.68 -33.68 - 107.950 152.00 176.74 -24.74 - 108.000 174.00 176.79 -2.79 - 108.050 168.00 176.85 -8.85 - 108.100 164.00 176.91 -12.91 - 108.150 160.00 176.98 -16.98 - 108.200 176.00 177.05 -1.05 - 108.250 174.00 177.13 -3.13 - 108.300 175.00 177.21 -2.21 + 107.950 152.00 176.73 -24.73 + 108.000 174.00 176.78 -2.78 + 108.050 168.00 176.84 -8.84 + 108.100 164.00 176.90 -12.90 + 108.150 160.00 176.97 -16.97 + 108.200 176.00 177.04 -1.04 + 108.250 174.00 177.12 -3.12 + 108.300 175.00 177.20 -2.20 108.350 163.00 177.30 -14.30 - 108.400 169.00 177.41 -8.41 - 108.450 180.00 177.52 2.48 - 108.500 159.00 177.64 -18.64 - 108.550 173.00 177.78 -4.78 - 108.600 148.00 177.94 -29.94 - 108.650 169.00 178.11 -9.11 - 108.700 167.00 178.31 -11.31 - 108.750 168.00 178.53 -10.53 - 108.800 175.00 178.79 -3.79 - 108.850 163.00 179.09 -16.09 - 108.900 164.00 179.43 -15.43 - 108.950 189.00 179.85 9.15 - 109.000 192.00 180.37 11.63 - 109.050 181.00 181.04 -0.04 - 109.100 202.00 181.97 20.03 - 109.150 190.00 183.36 6.64 - 109.200 163.00 185.55 -22.55 - 109.250 216.00 189.08 26.92 - 109.300 220.00 194.69 25.31 - 109.350 230.00 203.28 26.72 - 109.400 255.00 215.66 39.34 - 109.450 253.00 232.26 20.74 - 109.500 273.00 252.71 20.29 - 109.550 296.00 275.48 20.52 - 109.600 300.00 297.67 2.33 - 109.650 331.00 314.98 16.02 - 109.700 347.00 322.69 24.31 - 109.750 349.00 318.19 30.81 - 109.800 341.00 303.07 37.93 - 109.850 332.00 281.77 50.23 - 109.900 298.00 258.87 39.13 - 109.950 259.00 237.66 21.34 - 110.000 227.00 220.01 6.99 - 110.050 203.00 206.57 -3.57 - 110.100 222.00 197.10 24.90 - 110.150 175.00 190.83 -15.83 - 110.200 183.00 186.88 -3.88 - 110.250 197.00 184.45 12.55 - 110.300 176.00 182.94 -6.94 - 110.350 179.00 181.96 -2.96 - 110.400 176.00 181.29 -5.29 - 110.450 178.00 180.80 -2.80 - 110.500 210.00 180.42 29.58 - 110.550 181.00 180.11 0.89 - 110.600 167.00 179.86 -12.86 - 110.650 165.00 179.65 -14.65 - 110.700 172.00 179.48 -7.48 + 108.400 169.00 177.40 -8.40 + 108.450 180.00 177.51 2.49 + 108.500 159.00 177.63 -18.63 + 108.550 173.00 177.77 -4.77 + 108.600 148.00 177.93 -29.93 + 108.650 169.00 178.10 -9.10 + 108.700 167.00 178.30 -11.30 + 108.750 168.00 178.52 -10.52 + 108.800 175.00 178.77 -3.77 + 108.850 163.00 179.07 -16.07 + 108.900 164.00 179.42 -15.42 + 108.950 189.00 179.83 9.17 + 109.000 192.00 180.35 11.65 + 109.050 181.00 181.01 -0.01 + 109.100 202.00 181.94 20.06 + 109.150 190.00 183.32 6.68 + 109.200 163.00 185.50 -22.50 + 109.250 216.00 189.01 26.99 + 109.300 220.00 194.60 25.40 + 109.350 230.00 203.14 26.86 + 109.400 255.00 215.45 39.55 + 109.450 253.00 231.96 21.04 + 109.500 273.00 252.30 20.70 + 109.550 296.00 274.96 21.04 + 109.600 300.00 297.02 2.98 + 109.650 331.00 314.24 16.76 + 109.700 347.00 321.91 25.09 + 109.750 349.00 317.44 31.56 + 109.800 341.00 302.39 38.61 + 109.850 332.00 281.21 50.79 + 109.900 298.00 258.43 39.57 + 109.950 259.00 237.33 21.67 + 110.000 227.00 219.78 7.22 + 110.050 203.00 206.42 -3.42 + 110.100 222.00 196.99 25.01 + 110.150 175.00 190.76 -15.76 + 110.200 183.00 186.83 -3.83 + 110.250 197.00 184.41 12.59 + 110.300 176.00 182.91 -6.91 + 110.350 179.00 181.94 -2.94 + 110.400 176.00 181.27 -5.27 + 110.450 178.00 180.78 -2.78 + 110.500 210.00 180.40 29.60 + 110.550 181.00 180.10 0.90 + 110.600 167.00 179.85 -12.85 + 110.650 165.00 179.64 -14.64 + 110.700 172.00 179.47 -7.47 110.750 175.00 179.34 -4.34 - 110.800 177.00 179.23 -2.23 + 110.800 177.00 179.22 -2.22 110.850 194.00 179.13 14.87 110.900 171.00 179.06 -8.06 110.950 177.00 179.00 -2.00 @@ -2024,266 +2024,266 @@ BEGIN 111.300 183.00 178.93 4.07 111.350 184.00 178.96 5.04 111.400 187.00 179.00 8.00 - 111.450 178.00 179.04 -1.04 - 111.500 172.00 179.09 -7.09 - 111.550 179.00 179.15 -0.15 - 111.600 205.00 179.22 25.78 - 111.650 168.00 179.29 -11.29 - 111.700 161.00 179.37 -18.37 - 111.750 182.00 179.46 2.54 - 111.800 167.00 179.56 -12.56 - 111.850 193.00 179.67 13.33 - 111.900 188.00 179.79 8.21 - 111.950 204.00 179.91 24.09 - 112.000 179.00 180.05 -1.05 - 112.050 176.00 180.20 -4.20 - 112.100 185.00 180.36 4.64 - 112.150 174.00 180.53 -6.53 - 112.200 175.00 180.72 -5.72 - 112.250 198.00 180.93 17.07 - 112.300 199.00 181.15 17.85 - 112.350 207.00 181.39 25.61 - 112.400 204.00 181.65 22.35 - 112.450 180.00 181.93 -1.93 - 112.500 137.00 182.24 -45.24 - 112.550 179.00 182.57 -3.57 - 112.600 183.00 182.94 0.06 - 112.650 166.00 183.34 -17.34 - 112.700 166.00 183.72 -17.72 - 112.750 189.00 184.20 4.80 - 112.800 181.00 184.73 -3.73 - 112.850 194.00 185.32 8.68 - 112.900 171.00 185.97 -14.97 - 112.950 202.00 186.70 15.30 - 113.000 216.00 187.51 28.49 - 113.050 198.00 188.42 9.58 - 113.100 189.00 189.45 -0.45 - 113.150 170.00 190.61 -20.61 - 113.200 182.00 191.94 -9.94 - 113.250 195.00 193.45 1.55 - 113.300 177.00 195.20 -18.20 - 113.350 180.00 197.23 -17.23 - 113.400 195.00 199.61 -4.61 - 113.450 201.00 202.48 -1.48 - 113.500 203.00 206.03 -3.03 - 113.550 200.00 210.64 -10.64 - 113.600 209.00 217.01 -8.01 - 113.650 231.00 226.36 4.64 - 113.700 281.00 240.78 40.22 - 113.750 287.00 263.44 23.56 - 113.800 324.00 298.77 25.23 - 113.850 395.00 352.09 42.91 - 113.900 457.00 428.69 28.31 - 113.950 580.00 532.17 47.83 - 114.000 685.00 662.33 22.67 - 114.050 873.00 813.06 59.94 - 114.100 964.00 970.75 -6.75 - 114.150 1126.00 1113.54 12.46 - 114.200 1266.00 1212.80 53.20 - 114.250 1307.00 1241.94 65.06 - 114.300 1221.00 1191.77 29.23 - 114.350 1096.00 1077.69 18.31 - 114.400 978.00 928.24 49.76 - 114.450 792.00 770.69 21.31 - 114.500 600.00 624.63 -24.63 - 114.550 487.00 501.50 -14.50 - 114.600 358.00 405.62 -47.62 - 114.650 279.00 335.90 -56.90 - 114.700 265.00 288.12 -23.12 - 114.750 258.00 256.82 1.18 - 114.800 244.00 236.86 7.14 - 114.850 226.00 224.16 1.84 - 114.900 227.00 215.85 11.15 - 114.950 188.00 210.12 -22.12 - 115.000 195.00 205.92 -10.92 - 115.050 211.00 202.66 8.34 - 115.100 205.00 200.01 4.99 - 115.150 198.00 197.80 0.20 - 115.200 218.00 195.93 22.07 - 115.250 200.00 194.33 5.67 - 115.300 200.00 192.95 7.05 - 115.350 188.00 191.75 -3.75 - 115.400 209.00 190.71 18.29 - 115.450 184.00 189.80 -5.80 - 115.500 186.00 189.00 -3.00 - 115.550 202.00 188.30 13.70 - 115.600 183.00 187.69 -4.69 - 115.650 187.00 187.15 -0.15 - 115.700 182.00 186.68 -4.68 - 115.750 185.00 186.27 -1.27 - 115.800 213.00 185.90 27.10 - 115.850 177.00 185.59 -8.59 - 115.900 199.00 185.31 13.69 - 115.950 185.00 185.08 -0.08 - 116.000 184.00 184.88 -0.88 - 116.050 191.00 184.71 6.29 - 116.100 173.00 184.57 -11.57 - 116.150 196.00 184.46 11.54 - 116.200 201.00 184.38 16.62 - 116.250 173.00 184.32 -11.32 - 116.300 178.00 184.29 -6.29 - 116.350 161.00 184.28 -23.28 + 111.450 178.00 179.05 -1.05 + 111.500 172.00 179.10 -7.10 + 111.550 179.00 179.16 -0.16 + 111.600 205.00 179.23 25.77 + 111.650 168.00 179.30 -11.30 + 111.700 161.00 179.38 -18.38 + 111.750 182.00 179.47 2.53 + 111.800 167.00 179.57 -12.57 + 111.850 193.00 179.68 13.32 + 111.900 188.00 179.80 8.20 + 111.950 204.00 179.93 24.07 + 112.000 179.00 180.07 -1.07 + 112.050 176.00 180.22 -4.22 + 112.100 185.00 180.38 4.62 + 112.150 174.00 180.56 -6.56 + 112.200 175.00 180.75 -5.75 + 112.250 198.00 180.95 17.05 + 112.300 199.00 181.17 17.83 + 112.350 207.00 181.41 25.59 + 112.400 204.00 181.68 22.32 + 112.450 180.00 181.96 -1.96 + 112.500 137.00 182.27 -45.27 + 112.550 179.00 182.61 -3.61 + 112.600 183.00 182.97 0.03 + 112.650 166.00 183.38 -17.38 + 112.700 166.00 183.76 -17.76 + 112.750 189.00 184.25 4.75 + 112.800 181.00 184.78 -3.78 + 112.850 194.00 185.38 8.62 + 112.900 171.00 186.04 -15.04 + 112.950 202.00 186.77 15.23 + 113.000 216.00 187.59 28.41 + 113.050 198.00 188.50 9.50 + 113.100 189.00 189.54 -0.54 + 113.150 170.00 190.71 -20.71 + 113.200 182.00 192.04 -10.04 + 113.250 195.00 193.57 1.43 + 113.300 177.00 195.33 -18.33 + 113.350 180.00 197.37 -17.37 + 113.400 195.00 199.77 -4.77 + 113.450 201.00 202.66 -1.66 + 113.500 203.00 206.24 -3.24 + 113.550 200.00 210.88 -10.88 + 113.600 209.00 217.30 -8.30 + 113.650 231.00 226.72 4.28 + 113.700 281.00 241.24 39.76 + 113.750 287.00 264.07 22.93 + 113.800 324.00 299.66 24.34 + 113.850 395.00 353.37 41.63 + 113.900 457.00 430.54 26.46 + 113.950 580.00 534.77 45.23 + 114.000 685.00 665.89 19.11 + 114.050 873.00 817.73 55.27 + 114.100 964.00 976.58 -12.58 + 114.150 1126.00 1120.42 5.58 + 114.200 1266.00 1220.41 45.59 + 114.250 1307.00 1249.76 57.24 + 114.300 1221.00 1199.22 21.78 + 114.350 1096.00 1084.30 11.70 + 114.400 978.00 933.75 44.25 + 114.450 792.00 775.05 16.95 + 114.500 600.00 627.91 -27.91 + 114.550 487.00 503.87 -16.87 + 114.600 358.00 407.28 -49.28 + 114.650 279.00 337.06 -58.06 + 114.700 265.00 288.92 -23.92 + 114.750 258.00 257.39 0.61 + 114.800 244.00 237.29 6.71 + 114.850 226.00 224.49 1.51 + 114.900 227.00 216.12 10.88 + 114.950 188.00 210.35 -22.35 + 115.000 195.00 206.12 -11.12 + 115.050 211.00 202.83 8.17 + 115.100 205.00 200.16 4.84 + 115.150 198.00 197.93 0.07 + 115.200 218.00 196.05 21.95 + 115.250 200.00 194.43 5.57 + 115.300 200.00 193.04 6.96 + 115.350 188.00 191.84 -3.84 + 115.400 209.00 190.79 18.21 + 115.450 184.00 189.87 -5.87 + 115.500 186.00 189.07 -3.07 + 115.550 202.00 188.36 13.64 + 115.600 183.00 187.74 -4.74 + 115.650 187.00 187.20 -0.20 + 115.700 182.00 186.72 -4.72 + 115.750 185.00 186.30 -1.30 + 115.800 213.00 185.94 27.06 + 115.850 177.00 185.62 -8.62 + 115.900 199.00 185.34 13.66 + 115.950 185.00 185.10 -0.10 + 116.000 184.00 184.90 -0.90 + 116.050 191.00 184.73 6.27 + 116.100 173.00 184.59 -11.59 + 116.150 196.00 184.48 11.52 + 116.200 201.00 184.39 16.61 + 116.250 173.00 184.33 -11.33 + 116.300 178.00 184.30 -6.30 + 116.350 161.00 184.29 -23.29 116.400 208.00 184.30 23.70 116.450 183.00 184.34 -1.34 116.500 183.00 184.40 -1.40 116.550 173.00 184.48 -11.48 116.600 184.00 184.59 -0.59 - 116.650 215.00 184.73 30.27 - 116.700 201.00 184.88 16.12 - 116.750 193.00 185.07 7.93 - 116.800 190.00 185.28 4.72 - 116.850 216.00 185.52 30.48 - 116.900 195.00 185.79 9.21 - 116.950 203.00 186.09 16.91 - 117.000 183.00 186.43 -3.43 - 117.050 203.00 186.80 16.20 - 117.100 187.00 187.22 -0.22 - 117.150 216.00 187.68 28.32 - 117.200 191.00 188.28 2.72 - 117.250 189.00 188.84 0.16 - 117.300 189.00 189.47 -0.47 - 117.350 226.00 190.15 35.85 - 117.400 185.00 190.92 -5.92 - 117.450 194.00 191.77 2.23 - 117.500 185.00 192.71 -7.71 - 117.550 213.00 193.76 19.24 - 117.600 197.00 194.93 2.07 - 117.650 198.00 196.23 1.77 - 117.700 168.00 197.70 -29.70 - 117.750 209.00 199.36 9.64 - 117.800 185.00 201.23 -16.23 - 117.850 208.00 203.36 4.64 - 117.900 213.00 205.79 7.21 - 117.950 203.00 208.57 -5.57 - 118.000 225.00 211.80 13.20 - 118.050 214.00 215.58 -1.58 - 118.100 233.00 220.10 12.90 - 118.150 245.00 225.67 19.33 - 118.200 236.00 232.83 3.17 - 118.250 245.00 242.53 2.47 - 118.300 305.00 256.43 48.57 - 118.350 287.00 277.19 9.81 - 118.400 317.00 308.84 8.16 - 118.450 421.00 356.96 64.04 - 118.500 422.00 428.46 -6.46 - 118.550 590.00 530.68 59.32 - 118.600 701.00 669.71 31.29 - 118.650 861.00 848.20 12.80 - 118.700 1054.00 1062.66 -8.66 - 118.750 1232.00 1301.45 -69.45 - 118.800 1483.00 1542.98 -59.98 - 118.850 1694.00 1755.36 -61.36 - 118.900 1819.00 1899.54 -80.54 - 118.950 1845.00 1940.89 -95.89 - 119.000 1866.00 1868.01 -2.01 - 119.050 1726.00 1700.52 25.48 - 119.100 1492.00 1476.12 15.88 - 119.150 1232.00 1232.54 -0.54 - 119.200 971.00 998.87 -27.87 - 119.250 753.00 793.71 -40.71 - 119.300 626.00 626.27 -0.27 - 119.350 487.00 498.06 -11.06 - 119.400 409.00 405.19 3.81 - 119.450 342.00 341.00 1.00 - 119.500 307.00 298.14 8.86 - 119.550 296.00 270.02 25.98 - 119.600 231.00 251.51 -20.51 - 119.650 246.00 238.97 7.03 - 119.700 220.00 230.08 -10.08 - 119.750 255.00 223.41 31.59 - 119.800 214.00 218.14 -4.14 - 119.850 247.00 213.81 33.19 - 119.900 238.00 210.16 27.84 - 119.950 218.00 207.02 10.98 - 120.000 222.00 204.30 17.70 - 120.050 218.00 201.92 16.08 - 120.100 253.00 199.82 53.18 - 120.150 197.00 197.97 -0.97 - 120.200 190.00 196.32 -6.32 - 120.250 221.00 194.84 26.16 - 120.300 204.00 193.52 10.48 - 120.350 206.00 192.33 13.67 - 120.400 189.00 191.26 -2.26 - 120.450 231.00 190.29 40.71 - 120.500 190.00 189.41 0.59 - 120.550 191.00 188.60 2.40 - 120.600 211.00 187.87 23.13 - 120.650 204.00 187.19 16.81 - 120.700 200.00 186.57 13.43 - 120.750 199.00 186.00 13.00 - 120.800 190.00 185.48 4.52 - 120.850 195.00 184.99 10.01 - 120.900 179.00 184.54 -5.54 - 120.950 189.00 184.12 4.88 - 121.000 190.00 183.73 6.27 - 121.050 195.00 183.37 11.63 - 121.100 193.00 183.03 9.97 - 121.150 173.00 182.72 -9.72 - 121.200 183.00 182.42 0.58 - 121.250 181.00 182.15 -1.15 - 121.300 203.00 181.89 21.11 - 121.350 177.00 181.64 -4.64 - 121.400 201.00 181.41 19.59 - 121.450 179.00 181.20 -2.20 - 121.500 179.00 180.99 -1.99 - 121.550 194.00 180.80 13.20 - 121.600 158.00 180.62 -22.62 - 121.650 195.00 180.45 14.55 - 121.700 201.00 180.29 20.71 - 121.750 192.00 180.13 11.87 - 121.800 189.00 179.99 9.01 - 121.850 186.00 179.85 6.15 - 121.900 170.00 179.71 -9.71 - 121.950 166.00 179.59 -13.59 - 122.000 185.00 179.47 5.53 - 122.050 197.00 179.36 17.64 - 122.100 177.00 179.25 -2.25 - 122.150 198.00 179.14 18.86 - 122.200 174.00 179.04 -5.04 - 122.250 171.00 178.95 -7.95 - 122.300 190.00 178.86 11.14 - 122.350 214.00 178.77 35.23 - 122.400 189.00 178.69 10.31 - 122.450 174.00 178.61 -4.61 - 122.500 171.00 178.54 -7.54 - 122.550 163.00 178.45 -15.45 - 122.600 174.00 178.39 -4.39 - 122.650 177.00 178.32 -1.32 - 122.700 180.00 178.26 1.74 - 122.750 186.00 178.20 7.80 - 122.800 190.00 178.14 11.86 + 116.650 215.00 184.72 30.28 + 116.700 201.00 184.87 16.13 + 116.750 193.00 185.05 7.95 + 116.800 190.00 185.26 4.74 + 116.850 216.00 185.50 30.50 + 116.900 195.00 185.77 9.23 + 116.950 203.00 186.07 16.93 + 117.000 183.00 186.40 -3.40 + 117.050 203.00 186.77 16.23 + 117.100 187.00 187.19 -0.19 + 117.150 216.00 187.64 28.36 + 117.200 191.00 188.24 2.76 + 117.250 189.00 188.80 0.20 + 117.300 189.00 189.42 -0.42 + 117.350 226.00 190.11 35.89 + 117.400 185.00 190.87 -5.87 + 117.450 194.00 191.71 2.29 + 117.500 185.00 192.65 -7.65 + 117.550 213.00 193.69 19.31 + 117.600 197.00 194.85 2.15 + 117.650 198.00 196.16 1.84 + 117.700 168.00 197.62 -29.62 + 117.750 209.00 199.27 9.73 + 117.800 185.00 201.13 -16.13 + 117.850 208.00 203.25 4.75 + 117.900 213.00 205.66 7.34 + 117.950 203.00 208.43 -5.43 + 118.000 225.00 211.65 13.35 + 118.050 214.00 215.41 -1.41 + 118.100 233.00 219.91 13.09 + 118.150 245.00 225.45 19.55 + 118.200 236.00 232.58 3.42 + 118.250 245.00 242.24 2.76 + 118.300 305.00 256.07 48.93 + 118.350 287.00 276.73 10.27 + 118.400 317.00 308.24 8.76 + 118.450 421.00 356.13 64.87 + 118.500 422.00 427.30 -5.30 + 118.550 590.00 529.05 60.95 + 118.600 701.00 667.43 33.57 + 118.650 861.00 845.10 15.90 + 118.700 1054.00 1058.56 -4.56 + 118.750 1232.00 1296.25 -64.25 + 118.800 1483.00 1536.66 -53.66 + 118.850 1694.00 1748.06 -54.06 + 118.900 1819.00 1891.57 -72.57 + 118.950 1845.00 1932.73 -87.73 + 119.000 1866.00 1860.19 5.81 + 119.050 1726.00 1693.48 32.52 + 119.100 1492.00 1470.11 21.89 + 119.150 1232.00 1227.66 4.34 + 119.200 971.00 995.07 -24.07 + 119.250 753.00 790.86 -37.86 + 119.300 626.00 624.19 1.81 + 119.350 487.00 496.58 -9.58 + 119.400 409.00 404.13 4.87 + 119.450 342.00 340.24 1.76 + 119.500 307.00 297.58 9.42 + 119.550 296.00 269.59 26.41 + 119.600 231.00 251.16 -20.16 + 119.650 246.00 238.69 7.31 + 119.700 220.00 229.84 -9.84 + 119.750 255.00 223.19 31.81 + 119.800 214.00 217.95 -3.95 + 119.850 247.00 213.64 33.36 + 119.900 238.00 210.00 28.00 + 119.950 218.00 206.88 11.12 + 120.000 222.00 204.17 17.83 + 120.050 218.00 201.80 16.20 + 120.100 253.00 199.71 53.29 + 120.150 197.00 197.87 -0.87 + 120.200 190.00 196.23 -6.23 + 120.250 221.00 194.76 26.24 + 120.300 204.00 193.45 10.55 + 120.350 206.00 192.26 13.74 + 120.400 189.00 191.19 -2.19 + 120.450 231.00 190.23 40.77 + 120.500 190.00 189.35 0.65 + 120.550 191.00 188.55 2.45 + 120.600 211.00 187.81 23.19 + 120.650 204.00 187.14 16.86 + 120.700 200.00 186.53 13.47 + 120.750 199.00 185.96 13.04 + 120.800 190.00 185.44 4.56 + 120.850 195.00 184.95 10.05 + 120.900 179.00 184.50 -5.50 + 120.950 189.00 184.09 4.91 + 121.000 190.00 183.70 6.30 + 121.050 195.00 183.34 11.66 + 121.100 193.00 183.00 10.00 + 121.150 173.00 182.69 -9.69 + 121.200 183.00 182.40 0.60 + 121.250 181.00 182.12 -1.12 + 121.300 203.00 181.86 21.14 + 121.350 177.00 181.62 -4.62 + 121.400 201.00 181.39 19.61 + 121.450 179.00 181.18 -2.18 + 121.500 179.00 180.97 -1.97 + 121.550 194.00 180.78 13.22 + 121.600 158.00 180.60 -22.60 + 121.650 195.00 180.43 14.57 + 121.700 201.00 180.27 20.73 + 121.750 192.00 180.11 11.89 + 121.800 189.00 179.97 9.03 + 121.850 186.00 179.83 6.17 + 121.900 170.00 179.70 -9.70 + 121.950 166.00 179.57 -13.57 + 122.000 185.00 179.45 5.55 + 122.050 197.00 179.34 17.66 + 122.100 177.00 179.23 -2.23 + 122.150 198.00 179.13 18.87 + 122.200 174.00 179.03 -5.03 + 122.250 171.00 178.94 -7.94 + 122.300 190.00 178.85 11.15 + 122.350 214.00 178.76 35.24 + 122.400 189.00 178.68 10.32 + 122.450 174.00 178.60 -4.60 + 122.500 171.00 178.53 -7.53 + 122.550 163.00 178.44 -15.44 + 122.600 174.00 178.38 -4.38 + 122.650 177.00 178.31 -1.31 + 122.700 180.00 178.25 1.75 + 122.750 186.00 178.19 7.81 + 122.800 190.00 178.13 11.87 122.850 170.00 178.08 -8.08 - 122.900 175.00 178.03 -3.03 - 122.950 194.00 177.98 16.02 + 122.900 175.00 178.02 -3.02 + 122.950 194.00 177.97 16.03 123.000 175.00 177.93 -2.93 - 123.050 194.00 177.89 16.11 - 123.100 189.00 177.85 11.15 - 123.150 222.00 177.81 44.19 - 123.200 178.00 177.78 0.22 + 123.050 194.00 177.88 16.12 + 123.100 189.00 177.84 11.16 + 123.150 222.00 177.80 44.20 + 123.200 178.00 177.77 0.23 123.250 158.00 177.75 -19.75 - 123.300 191.00 177.74 13.26 - 123.350 184.00 177.74 6.26 - 123.400 190.00 177.75 12.25 - 123.450 183.00 177.79 5.21 + 123.300 191.00 177.73 13.27 + 123.350 184.00 177.73 6.27 + 123.400 190.00 177.74 12.26 + 123.450 183.00 177.78 5.22 123.500 178.00 177.84 0.16 - 123.550 204.00 177.93 26.07 - 123.600 192.00 178.03 13.97 - 123.650 200.00 178.15 21.85 - 123.700 182.00 178.27 3.73 - 123.750 171.00 178.38 -7.38 - 123.800 186.00 178.45 7.55 - 123.850 197.00 178.47 18.53 + 123.550 204.00 177.92 26.08 + 123.600 192.00 178.02 13.98 + 123.650 200.00 178.14 21.86 + 123.700 182.00 178.26 3.74 + 123.750 171.00 178.37 -7.37 + 123.800 186.00 178.44 7.56 + 123.850 197.00 178.46 18.54 123.900 174.00 178.42 -4.42 - 123.950 167.00 178.32 -11.32 - 124.000 178.00 178.17 -0.17 - 124.050 198.00 178.00 20.00 + 123.950 167.00 178.31 -11.31 + 124.000 178.00 178.16 -0.16 + 124.050 198.00 177.99 20.01 124.100 205.00 177.82 27.18 - 124.150 216.00 177.66 38.34 - 124.200 200.00 177.51 22.49 + 124.150 216.00 177.65 38.35 + 124.200 200.00 177.50 22.50 124.250 204.00 177.38 26.62 124.300 190.00 177.28 12.72 124.350 188.00 177.20 10.80 - 124.400 191.00 177.14 13.86 + 124.400 191.00 177.13 13.87 124.450 186.00 177.09 8.91 124.500 175.00 177.05 -2.05 124.550 175.00 177.02 -2.02 @@ -2299,17 +2299,17 @@ BEGIN 125.050 177.00 176.84 0.16 125.100 163.00 176.83 -13.83 125.150 175.00 176.82 -1.82 - 125.200 188.00 176.81 11.19 - 125.250 176.00 176.80 -0.80 - 125.300 172.00 176.79 -4.79 - 125.350 172.00 176.78 -4.78 + 125.200 188.00 176.80 11.20 + 125.250 176.00 176.79 -0.79 + 125.300 172.00 176.78 -4.78 + 125.350 172.00 176.77 -4.77 125.400 181.00 176.77 4.23 125.450 186.00 176.76 9.24 125.500 181.00 176.75 4.25 125.550 193.00 176.74 16.26 125.600 177.00 176.74 0.26 125.650 176.00 176.73 -0.73 - 125.700 194.00 176.73 17.27 + 125.700 194.00 176.72 17.28 125.750 179.00 176.72 2.28 125.800 147.00 176.72 -29.72 125.850 186.00 176.71 9.29 @@ -2325,114 +2325,114 @@ BEGIN 126.350 180.00 176.70 3.30 126.400 179.00 176.71 2.29 126.450 179.00 176.71 2.29 - 126.500 170.00 176.71 -6.71 + 126.500 170.00 176.72 -6.72 126.550 176.00 176.72 -0.72 126.600 178.00 176.73 1.27 - 126.650 185.00 176.73 8.27 + 126.650 185.00 176.74 8.26 126.700 193.00 176.74 16.26 126.750 192.00 176.75 15.25 126.800 198.00 176.76 21.24 - 126.850 195.00 176.77 18.23 + 126.850 195.00 176.78 18.22 126.900 165.00 176.79 -11.79 126.950 189.00 176.80 12.20 127.000 175.00 176.82 -1.82 - 127.050 176.00 176.83 -0.83 - 127.100 184.00 176.85 7.15 - 127.150 179.00 176.87 2.13 + 127.050 176.00 176.84 -0.84 + 127.100 184.00 176.86 7.14 + 127.150 179.00 176.88 2.12 127.200 187.00 176.90 10.10 - 127.250 176.00 176.92 -0.92 - 127.300 191.00 176.95 14.05 - 127.350 194.00 176.98 17.02 - 127.400 177.00 177.02 -0.02 - 127.450 177.00 177.06 -0.06 - 127.500 180.00 177.10 2.90 - 127.550 158.00 177.15 -19.15 - 127.600 193.00 177.20 15.80 - 127.650 177.00 177.26 -0.26 - 127.700 185.00 177.32 7.68 - 127.750 178.00 177.39 0.61 - 127.800 184.00 177.47 6.53 - 127.850 188.00 177.57 10.43 - 127.900 182.00 177.57 4.43 - 127.950 190.00 177.69 12.31 - 128.000 191.00 177.82 13.18 - 128.050 165.00 177.98 -12.98 - 128.100 174.00 178.16 -4.16 - 128.150 158.00 178.39 -20.39 - 128.200 197.00 178.68 18.32 - 128.250 183.00 179.05 3.95 - 128.300 196.00 179.56 16.44 - 128.350 166.00 180.28 -14.28 - 128.400 218.00 181.30 36.70 - 128.450 206.00 182.76 23.24 - 128.500 184.00 184.80 -0.80 - 128.550 176.00 187.60 -11.60 - 128.600 198.00 191.36 6.64 - 128.650 215.00 196.20 18.80 - 128.700 179.00 202.20 -23.20 - 128.750 192.00 209.31 -17.31 - 128.800 201.00 217.35 -16.35 - 128.850 221.00 225.93 -4.93 - 128.900 227.00 234.45 -7.45 - 128.950 229.00 242.14 -13.14 - 129.000 254.00 248.06 5.94 - 129.050 256.00 251.27 4.73 - 129.100 272.00 251.19 20.81 - 129.150 239.00 247.84 -8.84 - 129.200 228.00 241.82 -13.82 - 129.250 255.00 234.07 20.93 - 129.300 213.00 225.53 -12.53 - 129.350 203.00 216.96 -13.96 - 129.400 228.00 208.97 19.03 - 129.450 220.00 201.90 18.10 - 129.500 185.00 195.95 -10.95 - 129.550 192.00 191.17 0.83 - 129.600 187.00 187.46 -0.46 - 129.650 182.00 184.70 -2.70 - 129.700 209.00 182.69 26.31 - 129.750 173.00 181.26 -8.26 - 129.800 202.00 180.26 21.74 - 129.850 178.00 179.55 -1.55 - 129.900 189.00 179.05 9.95 - 129.950 177.00 178.68 -1.68 - 130.000 177.00 178.40 -1.40 - 130.050 190.00 178.17 11.83 - 130.100 178.00 177.99 0.01 - 130.150 177.00 177.84 -0.84 - 130.200 164.00 177.70 -13.70 - 130.250 185.00 177.59 7.41 - 130.300 153.00 177.49 -24.49 - 130.350 174.00 177.40 -3.40 - 130.400 197.00 177.32 19.68 - 130.450 192.00 177.25 14.75 - 130.500 174.00 177.18 -3.18 - 130.550 177.00 177.12 -0.12 - 130.600 172.00 177.07 -5.07 - 130.650 173.00 177.02 -4.02 - 130.700 178.00 176.98 1.02 - 130.750 180.00 176.94 3.06 - 130.800 203.00 176.91 26.09 + 127.250 176.00 176.93 -0.93 + 127.300 191.00 176.96 14.04 + 127.350 194.00 176.99 17.01 + 127.400 177.00 177.03 -0.03 + 127.450 177.00 177.07 -0.07 + 127.500 180.00 177.11 2.89 + 127.550 158.00 177.16 -19.16 + 127.600 193.00 177.21 15.79 + 127.650 177.00 177.27 -0.27 + 127.700 185.00 177.33 7.67 + 127.750 178.00 177.41 0.59 + 127.800 184.00 177.49 6.51 + 127.850 188.00 177.58 10.42 + 127.900 182.00 177.59 4.41 + 127.950 190.00 177.71 12.29 + 128.000 191.00 177.84 13.16 + 128.050 165.00 178.00 -13.00 + 128.100 174.00 178.19 -4.19 + 128.150 158.00 178.42 -20.42 + 128.200 197.00 178.71 18.29 + 128.250 183.00 179.09 3.91 + 128.300 196.00 179.61 16.39 + 128.350 166.00 180.34 -14.34 + 128.400 218.00 181.37 36.63 + 128.450 206.00 182.84 23.16 + 128.500 184.00 184.91 -0.91 + 128.550 176.00 187.76 -11.76 + 128.600 198.00 191.56 6.44 + 128.650 215.00 196.47 18.53 + 128.700 179.00 202.55 -23.55 + 128.750 192.00 209.76 -17.76 + 128.800 201.00 217.91 -16.91 + 128.850 221.00 226.60 -5.60 + 128.900 227.00 235.25 -8.25 + 128.950 229.00 243.04 -14.04 + 129.000 254.00 249.04 4.96 + 129.050 256.00 252.29 3.71 + 129.100 272.00 252.21 19.79 + 129.150 239.00 248.81 -9.81 + 129.200 228.00 242.72 -14.72 + 129.250 255.00 234.86 20.14 + 129.300 213.00 226.20 -13.20 + 129.350 203.00 217.52 -14.52 + 129.400 228.00 209.41 18.59 + 129.450 220.00 202.25 17.75 + 129.500 185.00 196.22 -11.22 + 129.550 192.00 191.37 0.63 + 129.600 187.00 187.62 -0.62 + 129.650 182.00 184.81 -2.81 + 129.700 209.00 182.77 26.23 + 129.750 173.00 181.33 -8.33 + 129.800 202.00 180.31 21.69 + 129.850 178.00 179.59 -1.59 + 129.900 189.00 179.08 9.92 + 129.950 177.00 178.71 -1.71 + 130.000 177.00 178.42 -1.42 + 130.050 190.00 178.20 11.80 + 130.100 178.00 178.01 -0.01 + 130.150 177.00 177.86 -0.86 + 130.200 164.00 177.72 -13.72 + 130.250 185.00 177.61 7.39 + 130.300 153.00 177.50 -24.50 + 130.350 174.00 177.41 -3.41 + 130.400 197.00 177.33 19.67 + 130.450 192.00 177.26 14.74 + 130.500 174.00 177.19 -3.19 + 130.550 177.00 177.13 -0.13 + 130.600 172.00 177.08 -5.08 + 130.650 173.00 177.03 -4.03 + 130.700 178.00 176.99 1.01 + 130.750 180.00 176.95 3.05 + 130.800 203.00 176.92 26.08 130.850 192.00 176.88 15.12 - 130.900 184.00 176.85 7.15 - 130.950 197.00 176.82 20.18 + 130.900 184.00 176.86 7.14 + 130.950 197.00 176.83 20.17 131.000 169.00 176.80 -7.80 131.050 187.00 176.78 10.22 131.100 175.00 176.76 -1.76 131.150 177.00 176.74 0.26 - 131.200 199.00 176.72 22.28 + 131.200 199.00 176.73 22.27 131.250 180.00 176.71 3.29 - 131.300 203.00 176.69 26.31 - 131.350 175.00 176.68 -1.68 - 131.400 183.00 176.67 6.33 - 131.450 192.00 176.66 15.34 - 131.500 174.00 176.65 -2.65 - 131.550 180.00 176.64 3.36 + 131.300 203.00 176.70 26.30 + 131.350 175.00 176.69 -1.69 + 131.400 183.00 176.68 6.32 + 131.450 192.00 176.67 15.33 + 131.500 174.00 176.66 -2.66 + 131.550 180.00 176.65 3.35 131.600 179.00 176.64 2.36 131.650 191.00 176.63 14.37 131.700 182.00 176.63 5.37 131.750 174.00 176.62 -2.62 131.800 191.00 176.62 14.38 - 131.850 195.00 176.61 18.39 + 131.850 195.00 176.62 18.38 131.900 171.00 176.61 -5.61 131.950 198.00 176.61 21.39 132.000 193.00 176.61 16.39 @@ -2442,46 +2442,46 @@ BEGIN 132.200 174.00 176.61 -2.61 132.250 196.00 176.61 19.39 132.300 175.00 176.61 -1.61 - 132.350 196.00 176.61 19.39 - 132.400 183.00 176.61 6.39 + 132.350 196.00 176.62 19.38 + 132.400 183.00 176.62 6.38 132.450 198.00 176.62 21.38 132.500 196.00 176.62 19.38 - 132.550 169.00 176.62 -7.62 + 132.550 169.00 176.63 -7.63 132.600 189.00 176.63 12.37 - 132.650 171.00 176.63 -5.63 + 132.650 171.00 176.64 -5.64 132.700 193.00 176.64 16.36 - 132.750 170.00 176.64 -6.64 + 132.750 170.00 176.65 -6.65 132.800 175.00 176.65 -1.65 - 132.850 166.00 176.65 -10.65 + 132.850 166.00 176.66 -10.66 132.900 188.00 176.66 11.34 132.950 186.00 176.67 9.33 - 133.000 165.00 176.67 -11.67 + 133.000 165.00 176.68 -11.68 133.050 201.00 176.68 24.32 133.100 182.00 176.69 5.31 133.150 151.00 176.70 -25.70 - 133.200 156.00 176.70 -20.70 - 133.250 187.00 176.71 10.29 - 133.300 153.00 176.72 -23.72 + 133.200 156.00 176.71 -20.71 + 133.250 187.00 176.72 10.28 + 133.300 153.00 176.73 -23.73 133.350 193.00 176.73 16.27 133.400 200.00 176.74 23.26 133.450 165.00 176.75 -11.75 - 133.500 172.00 176.76 -4.76 - 133.550 162.00 176.77 -14.77 + 133.500 172.00 176.77 -4.77 + 133.550 162.00 176.78 -14.78 133.600 165.00 176.63 -11.63 - 133.650 218.00 176.64 41.36 - 133.700 197.00 176.65 20.35 + 133.650 218.00 176.65 41.35 + 133.700 197.00 176.66 20.34 133.750 206.00 176.67 29.33 - 133.800 186.00 176.68 9.32 + 133.800 186.00 176.69 9.31 133.850 162.00 176.70 -14.70 133.900 176.00 176.71 -0.71 - 133.950 174.00 176.72 -2.72 + 133.950 174.00 176.73 -2.73 134.000 196.00 176.74 19.26 134.050 174.00 176.76 -2.76 - 134.100 177.00 176.77 0.23 + 134.100 177.00 176.78 0.22 134.150 183.00 176.79 6.21 134.200 184.00 176.81 7.19 - 134.250 185.00 176.82 8.18 - 134.300 200.00 176.84 23.16 + 134.250 185.00 176.83 8.17 + 134.300 200.00 176.85 23.15 134.350 175.00 176.86 -1.86 134.400 190.00 176.88 13.12 134.450 195.00 176.90 18.10 @@ -2489,249 +2489,249 @@ BEGIN 134.550 171.00 176.94 -5.94 134.600 194.00 176.96 17.04 134.650 190.00 176.98 13.02 - 134.700 165.00 177.00 -12.00 - 134.750 192.00 177.02 14.98 + 134.700 165.00 177.01 -12.01 + 134.750 192.00 177.03 14.97 134.800 160.00 177.05 -17.05 134.850 192.00 177.07 14.93 - 134.900 181.00 177.09 3.91 + 134.900 181.00 177.10 3.90 134.950 208.00 177.12 30.88 - 135.000 179.00 177.14 1.86 - 135.050 172.00 177.17 -5.17 + 135.000 179.00 177.15 1.85 + 135.050 172.00 177.18 -5.18 135.100 183.00 177.20 5.80 - 135.150 187.00 177.22 9.78 - 135.200 185.00 177.25 7.75 - 135.250 182.00 177.28 4.72 - 135.300 184.00 177.31 6.69 - 135.350 163.00 177.34 -14.34 - 135.400 201.00 177.37 23.63 + 135.150 187.00 177.23 9.77 + 135.200 185.00 177.26 7.74 + 135.250 182.00 177.29 4.71 + 135.300 184.00 177.32 6.68 + 135.350 163.00 177.35 -14.35 + 135.400 201.00 177.38 23.62 135.450 189.00 177.41 11.59 - 135.500 204.00 177.44 26.56 - 135.550 178.00 177.47 0.53 - 135.600 178.00 177.51 0.49 + 135.500 204.00 177.45 26.55 + 135.550 178.00 177.48 0.52 + 135.600 178.00 177.52 0.48 135.650 193.00 177.55 15.45 - 135.700 215.00 177.58 37.42 - 135.750 203.00 177.62 25.38 - 135.800 216.00 177.66 38.34 - 135.850 165.00 177.70 -12.70 - 135.900 196.00 177.74 18.26 - 135.950 178.00 177.79 0.21 - 136.000 170.00 177.83 -7.83 - 136.050 173.00 177.88 -4.88 - 136.100 188.00 177.92 10.08 - 136.150 176.00 177.97 -1.97 - 136.200 186.00 178.02 7.98 - 136.250 189.00 178.08 10.92 - 136.300 166.00 178.13 -12.13 - 136.350 177.00 178.19 -1.19 - 136.400 169.00 178.24 -9.24 - 136.450 171.00 178.30 -7.30 - 136.500 194.00 178.36 15.64 - 136.550 187.00 178.43 8.57 - 136.600 162.00 178.49 -16.49 - 136.650 160.00 178.56 -18.56 - 136.700 183.00 178.63 4.37 - 136.750 150.00 178.70 -28.70 - 136.800 180.00 178.78 1.22 - 136.850 194.00 178.86 15.14 - 136.900 185.00 178.94 6.06 - 136.950 158.00 179.02 -21.02 - 137.000 193.00 179.11 13.89 - 137.050 165.00 179.20 -14.20 - 137.100 178.00 179.29 -1.29 - 137.150 183.00 179.39 3.61 - 137.200 180.00 179.49 0.51 - 137.250 176.00 179.60 -3.60 - 137.300 183.00 179.71 3.29 - 137.350 189.00 179.82 9.18 - 137.400 180.00 179.94 0.06 - 137.450 160.00 180.07 -20.07 - 137.500 202.00 180.20 21.80 - 137.550 201.00 180.33 20.67 - 137.600 173.00 180.47 -7.47 - 137.650 176.00 180.62 -4.62 - 137.700 195.00 180.77 14.23 - 137.750 197.00 180.94 16.06 - 137.800 186.00 181.11 4.89 - 137.850 183.00 181.28 1.72 - 137.900 175.00 181.47 -6.47 - 137.950 178.00 181.67 -3.67 - 138.000 190.00 181.87 8.13 - 138.050 174.00 182.09 -8.09 - 138.100 163.00 182.31 -19.31 - 138.150 190.00 182.55 7.45 - 138.200 169.00 182.81 -13.81 - 138.250 198.00 183.07 14.93 - 138.300 199.00 183.35 15.65 - 138.350 184.00 183.65 0.35 - 138.400 216.00 183.96 32.04 - 138.450 183.00 184.30 -1.30 - 138.500 200.00 184.65 15.35 - 138.550 186.00 185.02 0.98 - 138.600 177.00 185.42 -8.42 - 138.650 186.00 185.85 0.15 - 138.700 193.00 186.30 6.70 - 138.750 200.00 186.78 13.22 - 138.800 180.00 187.29 -7.29 - 138.850 178.00 187.85 -9.85 - 138.900 198.00 188.44 9.56 - 138.950 236.00 189.07 46.93 - 139.000 203.00 189.75 13.25 - 139.050 207.00 190.48 16.52 - 139.100 190.00 191.28 -1.28 - 139.150 171.00 192.13 -21.13 - 139.200 203.00 193.06 9.94 - 139.250 203.00 194.06 8.94 - 139.300 198.00 195.16 2.84 - 139.350 200.00 196.36 3.64 - 139.400 187.00 197.67 -10.67 - 139.450 214.00 199.12 14.88 - 139.500 198.00 200.74 -2.74 - 139.550 220.00 202.56 17.44 - 139.600 196.00 204.63 -8.63 - 139.650 239.00 207.03 31.97 - 139.700 212.00 209.87 2.13 - 139.750 219.00 213.30 5.70 - 139.800 248.00 217.54 30.46 - 139.850 220.00 222.90 -2.90 - 139.900 241.00 229.76 11.24 - 139.950 245.00 238.67 6.33 - 140.000 269.00 250.32 18.68 - 140.050 294.00 265.52 28.48 - 140.100 323.00 285.26 37.74 - 140.150 302.00 310.64 -8.64 - 140.200 312.00 342.84 -30.84 - 140.250 371.00 383.03 -12.03 - 140.300 420.00 432.22 -12.22 - 140.350 516.00 491.19 24.81 - 140.400 596.00 560.24 35.76 - 140.450 644.00 639.17 4.83 - 140.500 711.00 726.99 -15.99 - 140.550 833.00 821.91 11.09 - 140.600 895.00 921.18 -26.18 - 140.650 1010.00 1021.07 -11.07 - 140.700 1058.00 1116.95 -58.95 - 140.750 1183.00 1203.21 -20.21 - 140.800 1278.00 1273.72 4.28 - 140.850 1298.00 1322.46 -24.46 - 140.900 1419.00 1344.65 74.35 - 140.950 1381.00 1337.91 43.09 - 141.000 1299.00 1302.98 -3.98 - 141.050 1371.00 1243.47 127.53 - 141.100 1273.00 1164.90 108.10 - 141.150 1131.00 1073.48 57.52 - 141.200 992.00 975.10 16.90 - 141.250 918.00 874.96 43.04 - 141.300 832.00 777.30 54.70 - 141.350 655.00 685.39 -30.39 - 141.400 629.00 601.54 27.46 - 141.450 522.00 527.10 -5.10 - 141.500 472.00 462.72 9.28 - 141.550 409.00 408.35 0.65 - 141.600 371.00 363.44 7.56 - 141.650 325.00 327.10 -2.10 - 141.700 306.00 298.20 7.80 - 141.750 270.00 275.57 -5.57 - 141.800 238.00 258.06 -20.06 - 141.850 231.00 244.63 -13.63 - 141.900 232.00 234.35 -2.35 - 141.950 223.00 226.46 -3.46 - 142.000 221.00 220.36 0.64 - 142.050 244.00 215.57 28.43 - 142.100 228.00 211.74 16.26 - 142.150 212.00 208.61 3.39 - 142.200 226.00 205.99 20.01 - 142.250 197.00 203.76 -6.76 - 142.300 204.00 201.82 2.18 - 142.350 189.00 200.10 -11.10 - 142.400 201.00 198.57 2.43 - 142.450 226.00 197.19 28.81 - 142.500 210.00 195.94 14.06 - 142.550 213.00 194.79 18.21 - 142.600 202.00 193.74 8.26 - 142.650 206.00 192.78 13.22 - 142.700 189.00 191.89 -2.89 - 142.750 213.00 191.07 21.93 - 142.800 193.00 190.31 2.69 - 142.850 206.00 189.61 16.39 - 142.900 204.00 188.96 15.04 - 142.950 188.00 188.35 -0.35 - 143.000 221.00 187.78 33.22 - 143.050 203.00 187.25 15.75 - 143.100 192.00 186.76 5.24 - 143.150 197.00 186.29 10.71 - 143.200 187.00 185.86 1.14 - 143.250 206.00 185.45 20.55 - 143.300 197.00 185.07 11.93 - 143.350 182.00 184.71 -2.71 - 143.400 186.00 184.37 1.63 - 143.450 228.00 184.05 43.95 - 143.500 201.00 183.75 17.25 - 143.550 176.00 183.47 -7.47 - 143.600 193.00 183.20 9.80 - 143.650 200.00 182.94 17.06 - 143.700 189.00 182.70 6.30 - 143.750 198.00 182.47 15.53 - 143.800 188.00 182.26 5.74 - 143.850 169.00 182.05 -13.05 - 143.900 183.00 181.86 1.14 - 143.950 198.00 181.67 16.33 - 144.000 156.00 181.49 -25.49 - 144.050 172.00 181.32 -9.32 - 144.100 190.00 181.16 8.84 - 144.150 166.00 181.01 -15.01 - 144.200 163.00 180.86 -17.86 - 144.250 184.00 180.72 3.28 - 144.300 182.00 180.59 1.41 - 144.350 173.00 180.46 -7.46 - 144.400 182.00 180.34 1.66 - 144.450 183.00 180.22 2.78 - 144.500 186.00 180.11 5.89 - 144.550 195.00 180.00 15.00 - 144.600 204.00 179.90 24.10 - 144.650 179.00 179.80 -0.80 - 144.700 192.00 179.71 12.29 - 144.750 213.00 179.62 33.38 - 144.800 187.00 179.53 7.47 - 144.850 194.00 179.45 14.55 - 144.900 185.00 179.37 5.63 - 144.950 183.00 179.29 3.71 - 145.000 192.00 179.22 12.78 - 145.050 201.00 179.14 21.86 - 145.100 211.00 179.08 31.92 - 145.150 163.00 179.01 -16.01 - 145.200 202.00 178.95 23.05 - 145.250 197.00 178.89 18.11 - 145.300 183.00 178.83 4.17 - 145.350 177.00 178.77 -1.77 + 135.700 215.00 177.59 37.41 + 135.750 203.00 177.63 25.37 + 135.800 216.00 177.67 38.33 + 135.850 165.00 177.71 -12.71 + 135.900 196.00 177.75 18.25 + 135.950 178.00 177.80 0.20 + 136.000 170.00 177.84 -7.84 + 136.050 173.00 177.89 -4.89 + 136.100 188.00 177.94 10.06 + 136.150 176.00 177.98 -1.98 + 136.200 186.00 178.04 7.96 + 136.250 189.00 178.09 10.91 + 136.300 166.00 178.14 -12.14 + 136.350 177.00 178.20 -1.20 + 136.400 169.00 178.26 -9.26 + 136.450 171.00 178.32 -7.32 + 136.500 194.00 178.38 15.62 + 136.550 187.00 178.44 8.56 + 136.600 162.00 178.51 -16.51 + 136.650 160.00 178.57 -18.57 + 136.700 183.00 178.64 4.36 + 136.750 150.00 178.72 -28.72 + 136.800 180.00 178.79 1.21 + 136.850 194.00 178.87 15.13 + 136.900 185.00 178.95 6.05 + 136.950 158.00 179.04 -21.04 + 137.000 193.00 179.13 13.87 + 137.050 165.00 179.22 -14.22 + 137.100 178.00 179.31 -1.31 + 137.150 183.00 179.41 3.59 + 137.200 180.00 179.51 0.49 + 137.250 176.00 179.62 -3.62 + 137.300 183.00 179.73 3.27 + 137.350 189.00 179.84 9.16 + 137.400 180.00 179.96 0.04 + 137.450 160.00 180.09 -20.09 + 137.500 202.00 180.22 21.78 + 137.550 201.00 180.36 20.64 + 137.600 173.00 180.50 -7.50 + 137.650 176.00 180.65 -4.65 + 137.700 195.00 180.80 14.20 + 137.750 197.00 180.96 16.04 + 137.800 186.00 181.14 4.86 + 137.850 183.00 181.31 1.69 + 137.900 175.00 181.50 -6.50 + 137.950 178.00 181.70 -3.70 + 138.000 190.00 181.90 8.10 + 138.050 174.00 182.12 -8.12 + 138.100 163.00 182.35 -19.35 + 138.150 190.00 182.59 7.41 + 138.200 169.00 182.85 -13.85 + 138.250 198.00 183.11 14.89 + 138.300 199.00 183.40 15.60 + 138.350 184.00 183.69 0.31 + 138.400 216.00 184.01 31.99 + 138.450 183.00 184.35 -1.35 + 138.500 200.00 184.70 15.30 + 138.550 186.00 185.08 0.92 + 138.600 177.00 185.48 -8.48 + 138.650 186.00 185.90 0.10 + 138.700 193.00 186.36 6.64 + 138.750 200.00 186.84 13.16 + 138.800 180.00 187.36 -7.36 + 138.850 178.00 187.92 -9.92 + 138.900 198.00 188.51 9.49 + 138.950 236.00 189.15 46.85 + 139.000 203.00 189.83 13.17 + 139.050 207.00 190.57 16.43 + 139.100 190.00 191.37 -1.37 + 139.150 171.00 192.23 -21.23 + 139.200 203.00 193.16 9.84 + 139.250 203.00 194.17 8.83 + 139.300 198.00 195.27 2.73 + 139.350 200.00 196.48 3.52 + 139.400 187.00 197.80 -10.80 + 139.450 214.00 199.26 14.74 + 139.500 198.00 200.89 -2.89 + 139.550 220.00 202.72 17.28 + 139.600 196.00 204.80 -8.80 + 139.650 239.00 207.22 31.78 + 139.700 212.00 210.08 1.92 + 139.750 219.00 213.53 5.47 + 139.800 248.00 217.79 30.21 + 139.850 220.00 223.18 -3.18 + 139.900 241.00 230.08 10.92 + 139.950 245.00 239.05 5.95 + 140.000 269.00 250.77 18.23 + 140.050 294.00 266.06 27.94 + 140.100 323.00 285.92 37.08 + 140.150 302.00 311.45 -9.45 + 140.200 312.00 343.86 -31.86 + 140.250 371.00 384.29 -13.29 + 140.300 420.00 433.78 -13.78 + 140.350 516.00 493.11 22.89 + 140.400 596.00 562.57 33.43 + 140.450 644.00 641.99 2.01 + 140.500 711.00 730.35 -19.35 + 140.550 833.00 825.84 7.16 + 140.600 895.00 925.72 -30.72 + 140.650 1010.00 1026.22 -16.22 + 140.700 1058.00 1122.68 -64.68 + 140.750 1183.00 1209.47 -26.47 + 140.800 1278.00 1280.41 -2.41 + 140.850 1298.00 1329.45 -31.45 + 140.900 1419.00 1351.76 67.24 + 140.950 1381.00 1344.99 36.01 + 141.000 1299.00 1309.84 -10.84 + 141.050 1371.00 1249.97 121.03 + 141.100 1273.00 1170.92 102.08 + 141.150 1131.00 1078.95 52.05 + 141.200 992.00 979.96 12.04 + 141.250 918.00 879.21 38.79 + 141.300 832.00 780.96 51.04 + 141.350 655.00 688.49 -33.49 + 141.400 629.00 604.13 24.87 + 141.450 522.00 529.23 -7.23 + 141.500 472.00 464.46 7.54 + 141.550 409.00 409.76 -0.76 + 141.600 371.00 364.58 6.42 + 141.650 325.00 328.02 -3.02 + 141.700 306.00 298.94 7.06 + 141.750 270.00 276.17 -6.17 + 141.800 238.00 258.56 -20.56 + 141.850 231.00 245.04 -14.04 + 141.900 232.00 234.70 -2.70 + 141.950 223.00 226.77 -3.77 + 142.000 221.00 220.63 0.37 + 142.050 244.00 215.81 28.19 + 142.100 228.00 211.95 16.05 + 142.150 212.00 208.80 3.20 + 142.200 226.00 206.17 19.83 + 142.250 197.00 203.92 -6.92 + 142.300 204.00 201.97 2.03 + 142.350 189.00 200.25 -11.25 + 142.400 201.00 198.70 2.30 + 142.450 226.00 197.31 28.69 + 142.500 210.00 196.05 13.95 + 142.550 213.00 194.90 18.10 + 142.600 202.00 193.85 8.15 + 142.650 206.00 192.88 13.12 + 142.700 189.00 191.98 -2.98 + 142.750 213.00 191.16 21.84 + 142.800 193.00 190.40 2.60 + 142.850 206.00 189.69 16.31 + 142.900 204.00 189.03 14.97 + 142.950 188.00 188.42 -0.42 + 143.000 221.00 187.85 33.15 + 143.050 203.00 187.31 15.69 + 143.100 192.00 186.82 5.18 + 143.150 197.00 186.35 10.65 + 143.200 187.00 185.92 1.08 + 143.250 206.00 185.51 20.49 + 143.300 197.00 185.12 11.88 + 143.350 182.00 184.76 -2.76 + 143.400 186.00 184.42 1.58 + 143.450 228.00 184.10 43.90 + 143.500 201.00 183.79 17.21 + 143.550 176.00 183.51 -7.51 + 143.600 193.00 183.24 9.76 + 143.650 200.00 182.98 17.02 + 143.700 189.00 182.74 6.26 + 143.750 198.00 182.51 15.49 + 143.800 188.00 182.29 5.71 + 143.850 169.00 182.08 -13.08 + 143.900 183.00 181.89 1.11 + 143.950 198.00 181.70 16.30 + 144.000 156.00 181.52 -25.52 + 144.050 172.00 181.35 -9.35 + 144.100 190.00 181.19 8.81 + 144.150 166.00 181.03 -15.03 + 144.200 163.00 180.89 -17.89 + 144.250 184.00 180.75 3.25 + 144.300 182.00 180.61 1.39 + 144.350 173.00 180.48 -7.48 + 144.400 182.00 180.36 1.64 + 144.450 183.00 180.24 2.76 + 144.500 186.00 180.13 5.87 + 144.550 195.00 180.02 14.98 + 144.600 204.00 179.92 24.08 + 144.650 179.00 179.82 -0.82 + 144.700 192.00 179.73 12.27 + 144.750 213.00 179.63 33.37 + 144.800 187.00 179.55 7.45 + 144.850 194.00 179.46 14.54 + 144.900 185.00 179.38 5.62 + 144.950 183.00 179.30 3.70 + 145.000 192.00 179.23 12.77 + 145.050 201.00 179.16 21.84 + 145.100 211.00 179.09 31.91 + 145.150 163.00 179.02 -16.02 + 145.200 202.00 178.96 23.04 + 145.250 197.00 178.90 18.10 + 145.300 183.00 178.84 4.16 + 145.350 177.00 178.78 -1.78 145.400 188.00 178.72 9.28 - 145.450 158.00 178.66 -20.66 - 145.500 184.00 178.61 5.39 - 145.550 162.00 178.56 -16.56 + 145.450 158.00 178.67 -20.67 + 145.500 184.00 178.62 5.38 + 145.550 162.00 178.57 -16.57 145.600 169.00 178.52 -9.52 - 145.650 171.00 178.47 -7.47 + 145.650 171.00 178.48 -7.48 145.700 188.00 178.43 9.57 - 145.750 167.00 178.38 -11.38 - 145.800 182.00 178.34 3.66 - 145.850 197.00 178.30 18.70 + 145.750 167.00 178.39 -11.39 + 145.800 182.00 178.35 3.65 + 145.850 197.00 178.31 18.69 145.900 179.00 178.27 0.73 145.950 172.00 178.23 -6.23 - 146.000 163.00 178.19 -15.19 + 146.000 163.00 178.20 -15.20 146.050 172.00 178.16 -6.16 146.100 178.00 178.13 -0.13 - 146.150 179.00 178.09 0.91 - 146.200 171.00 178.06 -7.06 - 146.250 189.00 178.03 10.97 - 146.300 190.00 178.00 12.00 + 146.150 179.00 178.10 0.90 + 146.200 171.00 178.07 -7.07 + 146.250 189.00 178.04 10.96 + 146.300 190.00 178.01 11.99 146.350 185.00 177.98 7.02 146.400 169.00 177.95 -8.95 - 146.450 165.00 177.92 -12.92 + 146.450 165.00 177.93 -12.93 146.500 185.00 177.90 7.10 146.550 158.00 177.88 -19.88 - 146.600 190.00 177.85 12.15 + 146.600 190.00 177.86 12.14 146.650 165.00 177.83 -12.83 146.700 173.00 177.81 -4.81 146.750 206.00 177.79 28.21 - 146.800 170.00 177.76 -7.76 + 146.800 170.00 177.77 -7.77 146.850 193.00 177.75 15.25 146.900 167.00 177.73 -10.73 146.950 182.00 177.71 4.29 @@ -2749,349 +2749,349 @@ BEGIN 147.550 190.00 177.62 12.38 147.600 169.00 177.63 -8.63 147.650 189.00 177.63 11.37 - 147.700 177.00 177.64 -0.64 + 147.700 177.00 177.63 -0.63 147.750 167.00 177.64 -10.64 - 147.800 163.00 177.65 -14.65 + 147.800 163.00 177.64 -14.64 147.850 196.00 177.65 18.35 147.900 175.00 177.65 -2.65 - 147.950 146.00 177.66 -31.66 - 148.000 170.00 177.66 -7.66 + 147.950 146.00 177.65 -31.65 + 148.000 170.00 177.65 -7.65 148.050 179.00 177.65 1.35 - 148.100 182.00 177.65 4.35 + 148.100 182.00 177.64 4.36 148.150 175.00 177.64 -2.64 - 148.200 171.00 177.63 -6.63 + 148.200 171.00 177.62 -6.62 148.250 201.00 177.61 23.39 - 148.300 181.00 177.60 3.40 + 148.300 181.00 177.59 3.41 148.350 152.00 177.58 -25.58 148.400 194.00 177.56 16.44 148.450 160.00 177.54 -17.54 148.500 179.00 177.52 1.48 - 148.550 181.00 177.51 3.49 + 148.550 181.00 177.50 3.50 148.600 175.00 177.49 -2.49 148.650 178.00 177.47 0.53 148.700 186.00 177.46 8.54 - 148.750 195.00 177.45 17.55 - 148.800 166.00 177.44 -11.44 - 148.850 184.00 177.43 6.57 - 148.900 215.00 177.42 37.58 + 148.750 195.00 177.44 17.56 + 148.800 166.00 177.43 -11.43 + 148.850 184.00 177.42 6.58 + 148.900 215.00 177.41 37.59 148.950 183.00 177.41 5.59 - 149.000 184.00 177.41 6.59 + 149.000 184.00 177.40 6.60 149.050 174.00 177.40 -3.40 - 149.100 175.00 177.40 -2.40 - 149.150 171.00 177.40 -6.40 + 149.100 175.00 177.39 -2.39 + 149.150 171.00 177.39 -6.39 149.200 166.00 177.39 -11.39 149.250 188.00 177.39 10.61 149.300 165.00 177.39 -12.39 149.350 184.00 177.39 6.61 - 149.400 181.00 177.40 3.60 - 149.450 174.00 177.40 -3.40 - 149.500 178.00 177.40 0.60 + 149.400 181.00 177.39 3.61 + 149.450 174.00 177.39 -3.39 + 149.500 178.00 177.39 0.61 149.550 191.00 177.40 13.60 149.600 181.00 177.40 3.60 - 149.650 174.00 177.41 -3.41 + 149.650 174.00 177.40 -3.40 149.700 180.00 177.41 2.59 149.750 177.00 177.41 -0.41 - 149.800 164.00 177.42 -13.42 + 149.800 164.00 177.41 -13.41 149.850 203.00 177.42 25.58 - 149.900 178.00 177.43 0.57 + 149.900 178.00 177.42 0.58 149.950 162.00 177.43 -15.43 - 150.000 192.00 177.44 14.56 - 150.050 164.00 177.45 -13.45 + 150.000 192.00 177.43 14.57 + 150.050 164.00 177.44 -13.44 150.100 151.00 177.45 -26.45 - 150.150 170.00 177.46 -7.46 - 150.200 166.00 177.47 -11.47 + 150.150 170.00 177.45 -7.45 + 150.200 166.00 177.46 -11.46 150.250 194.00 177.47 16.53 - 150.300 168.00 177.48 -9.48 - 150.350 173.00 177.49 -4.49 - 150.400 175.00 177.50 -2.50 + 150.300 168.00 177.47 -9.47 + 150.350 173.00 177.48 -4.48 + 150.400 175.00 177.49 -2.49 150.450 193.00 177.50 15.50 150.500 177.00 177.51 -0.51 150.550 185.00 177.52 7.48 - 150.600 178.00 177.53 0.47 - 150.650 178.00 177.54 0.46 - 150.700 179.00 177.55 1.45 + 150.600 178.00 177.52 0.48 + 150.650 178.00 177.53 0.47 + 150.700 179.00 177.54 1.46 150.750 180.00 177.56 2.44 150.800 169.00 177.57 -8.57 - 150.850 177.00 177.59 -0.59 - 150.900 159.00 177.60 -18.60 - 150.950 167.00 177.61 -10.61 - 151.000 180.00 177.62 2.38 - 151.050 158.00 177.64 -19.64 - 151.100 173.00 177.65 -4.65 - 151.150 172.00 177.66 -5.66 - 151.200 163.00 177.68 -14.68 - 151.250 168.00 177.69 -9.69 - 151.300 166.00 177.71 -11.71 - 151.350 179.00 177.72 1.28 - 151.400 159.00 177.74 -18.74 - 151.450 173.00 177.75 -4.75 - 151.500 170.00 177.77 -7.77 - 151.550 151.00 177.79 -26.79 - 151.600 174.00 177.81 -3.81 - 151.650 182.00 177.83 4.17 - 151.700 182.00 177.84 4.16 - 151.750 172.00 177.86 -5.86 - 151.800 157.00 177.88 -20.88 - 151.850 156.00 177.90 -21.90 - 151.900 168.00 177.93 -9.93 - 151.950 194.00 177.95 16.05 - 152.000 177.00 177.97 -0.97 - 152.050 170.00 177.99 -7.99 - 152.100 169.00 178.02 -9.02 - 152.150 173.00 178.04 -5.04 - 152.200 161.00 178.07 -17.07 - 152.250 169.00 178.09 -9.09 - 152.300 167.00 178.12 -11.12 - 152.350 194.00 178.15 15.85 - 152.400 150.00 178.18 -28.18 - 152.450 159.00 178.21 -19.21 - 152.500 181.00 178.24 2.76 - 152.550 180.00 178.27 1.73 - 152.600 193.00 178.30 14.70 - 152.650 192.00 178.33 13.67 - 152.700 152.00 178.37 -26.37 - 152.750 159.00 178.40 -19.40 - 152.800 147.00 178.44 -31.44 - 152.850 190.00 178.48 11.52 - 152.900 167.00 178.51 -11.51 - 152.950 193.00 178.55 14.45 - 153.000 159.00 178.60 -19.60 - 153.050 195.00 178.64 16.36 - 153.100 172.00 178.68 -6.68 - 153.150 148.00 178.73 -30.73 - 153.200 174.00 178.77 -4.77 - 153.250 194.00 178.82 15.18 - 153.300 159.00 178.87 -19.87 - 153.350 190.00 178.93 11.07 - 153.400 181.00 178.98 2.02 - 153.450 159.00 179.04 -20.04 - 153.500 168.00 179.09 -11.09 - 153.550 175.00 179.15 -4.15 - 153.600 184.00 179.22 4.78 - 153.650 200.00 179.28 20.72 - 153.700 161.00 179.35 -18.35 - 153.750 162.00 179.42 -17.42 - 153.800 152.00 179.49 -27.49 - 153.850 177.00 179.57 -2.57 - 153.900 173.00 179.65 -6.65 - 153.950 184.00 179.73 4.27 - 154.000 169.00 179.82 -10.82 - 154.050 163.00 179.91 -16.91 - 154.100 177.00 180.00 -3.00 - 154.150 171.00 180.10 -9.10 - 154.200 180.00 180.20 -0.20 - 154.250 201.00 180.31 20.69 - 154.300 206.00 180.42 25.58 - 154.350 181.00 180.54 0.46 - 154.400 170.00 180.66 -10.66 - 154.450 177.00 180.80 -3.80 - 154.500 196.00 180.94 15.06 - 154.550 201.00 181.09 19.91 - 154.600 161.00 181.24 -20.24 - 154.650 179.00 181.41 -2.41 - 154.700 185.00 181.60 3.40 - 154.750 167.00 181.80 -14.80 - 154.800 162.00 182.01 -20.01 - 154.850 178.00 182.25 -4.25 - 154.900 203.00 182.51 20.49 - 154.950 193.00 182.80 10.20 - 155.000 164.00 183.13 -19.13 - 155.050 191.00 183.50 7.50 - 155.100 173.00 183.92 -10.92 - 155.150 165.00 184.40 -19.40 - 155.200 178.00 184.96 -6.96 - 155.250 196.00 185.59 10.41 - 155.300 188.00 186.33 1.67 - 155.350 183.00 187.19 -4.19 - 155.400 188.00 188.19 -0.19 - 155.450 166.00 189.34 -23.34 - 155.500 189.00 190.69 -1.69 - 155.550 175.00 192.25 -17.25 - 155.600 173.00 194.05 -21.05 - 155.650 201.00 196.12 4.88 - 155.700 177.00 198.50 -21.50 - 155.750 202.00 201.21 0.79 - 155.800 169.00 204.30 -35.30 - 155.850 198.00 207.78 -9.78 - 155.900 191.00 211.70 -20.70 - 155.950 207.00 216.07 -9.07 - 156.000 226.00 220.91 5.09 - 156.050 184.00 226.25 -42.25 - 156.100 218.00 232.08 -14.08 - 156.150 215.00 238.41 -23.41 - 156.200 239.00 245.22 -6.22 - 156.250 292.00 252.50 39.50 - 156.300 251.00 260.20 -9.20 - 156.350 255.00 268.28 -13.28 - 156.400 244.00 276.68 -32.68 - 156.450 259.00 285.32 -26.32 - 156.500 260.00 294.12 -34.12 - 156.550 294.00 302.97 -8.97 - 156.600 303.00 311.75 -8.75 - 156.650 282.00 320.33 -38.33 - 156.700 312.00 328.56 -16.56 - 156.750 317.00 336.29 -19.29 - 156.800 342.00 343.36 -1.36 - 156.850 338.00 349.60 -11.60 - 156.900 351.00 354.85 -3.85 - 156.950 359.00 358.96 0.04 - 157.000 394.00 361.82 32.18 - 157.050 316.00 363.32 -47.32 - 157.100 379.00 363.43 15.57 - 157.150 359.00 362.13 -3.13 - 157.200 404.00 359.48 44.52 - 157.250 381.00 355.55 25.45 - 157.300 359.00 350.47 8.53 - 157.350 364.00 344.38 19.62 - 157.400 347.00 337.44 9.56 - 157.450 328.00 329.82 -1.82 - 157.500 344.00 321.68 22.32 - 157.550 320.00 313.17 6.83 - 157.600 333.00 304.45 28.55 - 157.650 319.00 295.64 23.36 - 157.700 289.00 286.86 2.14 - 157.750 284.00 278.23 5.77 - 157.800 283.00 269.83 13.17 - 157.850 305.00 261.74 43.26 - 157.900 281.00 254.03 26.97 - 157.950 244.00 246.73 -2.73 - 158.000 253.00 239.90 13.10 - 158.050 245.00 233.55 11.45 - 158.100 210.00 227.69 -17.69 - 158.150 201.00 222.33 -21.33 - 158.200 226.00 217.46 8.54 - 158.250 206.00 213.07 -7.07 - 158.300 218.00 209.14 8.86 - 158.350 201.00 205.64 -4.64 - 158.400 226.00 202.54 23.46 - 158.450 201.00 199.82 1.18 - 158.500 210.00 197.44 12.56 - 158.550 207.00 195.37 11.63 - 158.600 176.00 193.58 -17.58 - 158.650 172.00 192.03 -20.03 - 158.700 173.00 190.70 -17.70 - 158.750 195.00 189.56 5.44 - 158.800 168.00 188.58 -20.58 - 158.850 177.00 187.74 -10.74 - 158.900 186.00 187.03 -1.03 - 158.950 170.00 186.42 -16.42 - 159.000 190.00 185.90 4.10 - 159.050 175.00 185.45 -10.45 - 159.100 191.00 185.06 5.94 - 159.150 164.00 184.72 -20.72 - 159.200 189.00 184.43 4.57 - 159.250 176.00 184.18 -8.18 - 159.300 175.00 183.95 -8.95 - 159.350 162.00 183.75 -21.75 - 159.400 184.00 183.57 0.43 - 159.450 163.00 183.41 -20.41 - 159.500 179.00 183.27 -4.27 - 159.550 194.00 183.14 10.86 - 159.600 165.00 183.02 -18.02 - 159.650 180.00 182.91 -2.91 - 159.700 174.00 182.82 -8.82 - 159.750 180.00 182.72 -2.72 - 159.800 179.00 182.64 -3.64 - 159.850 189.00 182.56 6.44 - 159.900 185.00 182.49 2.51 - 159.950 151.00 182.43 -31.43 - 160.000 176.00 182.37 -6.37 - 160.050 165.00 182.32 -17.32 - 160.100 163.00 182.27 -19.27 - 160.150 184.00 182.22 1.78 - 160.200 157.00 182.18 -25.18 - 160.250 166.00 182.14 -16.14 - 160.300 160.00 182.11 -22.11 - 160.350 183.00 182.08 0.92 - 160.400 167.00 182.05 -15.05 - 160.450 180.00 182.03 -2.03 - 160.500 183.00 182.01 0.99 - 160.550 163.00 181.99 -18.99 - 160.600 178.00 181.98 -3.98 - 160.650 179.00 181.96 -2.96 - 160.700 161.00 181.95 -20.95 - 160.750 168.00 181.95 -13.95 - 160.800 173.00 181.94 -8.94 - 160.850 202.00 181.94 20.06 - 160.900 145.00 181.94 -36.94 - 160.950 162.00 181.94 -19.94 - 161.000 180.00 181.94 -1.94 - 161.050 186.00 181.95 4.05 - 161.100 166.00 181.96 -15.96 - 161.150 177.00 181.97 -4.97 - 161.200 194.00 181.98 12.02 - 161.250 177.00 181.99 -4.99 - 161.300 178.00 182.01 -4.01 - 161.350 190.00 182.03 7.97 - 161.400 160.00 182.04 -22.04 - 161.450 173.00 182.06 -9.06 - 161.500 191.00 182.09 8.91 - 161.550 161.00 182.11 -21.11 - 161.600 181.00 182.14 -1.14 - 161.650 152.00 182.16 -30.16 - 161.700 195.00 182.19 12.81 - 161.750 171.00 182.22 -11.22 - 161.800 188.00 182.25 5.75 - 161.850 164.00 182.28 -18.28 - 161.900 185.00 182.32 2.68 - 161.950 173.00 182.35 -9.35 - 162.000 162.00 182.39 -20.39 - 162.050 166.00 182.43 -16.43 - 162.100 201.00 182.47 18.53 - 162.150 173.00 182.51 -9.51 - 162.200 172.00 182.55 -10.55 - 162.250 181.00 182.59 -1.59 - 162.300 159.00 182.64 -23.64 - 162.350 185.00 182.69 2.31 - 162.400 170.00 182.73 -12.73 - 162.450 200.00 182.78 17.22 - 162.500 196.00 182.83 13.17 - 162.550 176.00 182.88 -6.88 - 162.600 197.00 182.94 14.06 - 162.650 176.00 182.99 -6.99 - 162.700 181.00 183.05 -2.05 - 162.750 176.00 183.11 -7.11 - 162.800 184.00 183.16 0.84 - 162.850 179.00 183.22 -4.22 - 162.900 165.00 183.29 -18.29 - 162.950 146.00 183.35 -37.35 - 163.000 165.00 183.41 -18.41 - 163.050 151.00 183.48 -32.48 - 163.100 164.00 183.55 -19.55 - 163.150 179.00 183.62 -4.62 - 163.200 186.00 183.69 2.31 - 163.250 182.00 183.76 -1.76 - 163.300 168.00 183.83 -15.83 - 163.350 193.00 183.91 9.09 - 163.400 177.00 183.98 -6.98 - 163.450 180.00 184.06 -4.06 - 163.500 171.00 184.14 -13.14 - 163.550 207.00 184.22 22.78 - 163.600 180.00 184.30 -4.30 - 163.650 159.00 184.39 -25.39 - 163.700 165.00 184.48 -19.48 - 163.750 178.00 184.56 -6.56 - 163.800 150.00 184.65 -34.65 - 163.850 177.00 184.75 -7.75 - 163.900 174.00 184.84 -10.84 - 163.950 180.00 184.94 -4.94 - 164.000 184.00 185.04 -1.04 - 164.050 166.00 185.14 -19.14 - 164.100 182.00 185.24 -3.24 - 164.150 188.00 185.34 2.66 - 164.200 186.00 185.45 0.55 - 164.250 152.00 185.56 -33.56 - 164.300 200.00 185.67 14.33 - 164.350 177.00 185.79 -8.79 - 164.400 202.00 185.90 16.10 - 164.450 178.00 186.02 -8.02 - 164.500 153.00 186.14 -33.14 - 164.550 197.00 186.27 10.73 - 164.600 153.00 186.40 -33.40 - 164.650 173.00 186.43 -13.43 - 164.700 187.00 186.57 0.43 - 164.750 175.00 186.71 -11.71 - 164.800 168.00 186.85 -18.85 + 150.850 177.00 177.58 -0.58 + 150.900 159.00 177.59 -18.59 + 150.950 167.00 177.60 -10.60 + 151.000 180.00 177.61 2.39 + 151.050 158.00 177.63 -19.63 + 151.100 173.00 177.64 -4.64 + 151.150 172.00 177.65 -5.65 + 151.200 163.00 177.67 -14.67 + 151.250 168.00 177.68 -9.68 + 151.300 166.00 177.70 -11.70 + 151.350 179.00 177.71 1.29 + 151.400 159.00 177.73 -18.73 + 151.450 173.00 177.74 -4.74 + 151.500 170.00 177.76 -7.76 + 151.550 151.00 177.78 -26.78 + 151.600 174.00 177.80 -3.80 + 151.650 182.00 177.82 4.18 + 151.700 182.00 177.83 4.17 + 151.750 172.00 177.85 -5.85 + 151.800 157.00 177.87 -20.87 + 151.850 156.00 177.89 -21.89 + 151.900 168.00 177.92 -9.92 + 151.950 194.00 177.94 16.06 + 152.000 177.00 177.96 -0.96 + 152.050 170.00 177.98 -7.98 + 152.100 169.00 178.01 -9.01 + 152.150 173.00 178.03 -5.03 + 152.200 161.00 178.06 -17.06 + 152.250 169.00 178.08 -9.08 + 152.300 167.00 178.11 -11.11 + 152.350 194.00 178.14 15.86 + 152.400 150.00 178.17 -28.17 + 152.450 159.00 178.19 -19.19 + 152.500 181.00 178.22 2.78 + 152.550 180.00 178.26 1.74 + 152.600 193.00 178.29 14.71 + 152.650 192.00 178.32 13.68 + 152.700 152.00 178.35 -26.35 + 152.750 159.00 178.39 -19.39 + 152.800 147.00 178.43 -31.43 + 152.850 190.00 178.46 11.54 + 152.900 167.00 178.50 -11.50 + 152.950 193.00 178.54 14.46 + 153.000 159.00 178.58 -19.58 + 153.050 195.00 178.62 16.38 + 153.100 172.00 178.67 -6.67 + 153.150 148.00 178.71 -30.71 + 153.200 174.00 178.76 -4.76 + 153.250 194.00 178.81 15.19 + 153.300 159.00 178.86 -19.86 + 153.350 190.00 178.91 11.09 + 153.400 181.00 178.97 2.03 + 153.450 159.00 179.02 -20.02 + 153.500 168.00 179.08 -11.08 + 153.550 175.00 179.14 -4.14 + 153.600 184.00 179.20 4.80 + 153.650 200.00 179.27 20.73 + 153.700 161.00 179.33 -18.33 + 153.750 162.00 179.40 -17.40 + 153.800 152.00 179.48 -27.48 + 153.850 177.00 179.55 -2.55 + 153.900 173.00 179.63 -6.63 + 153.950 184.00 179.71 4.29 + 154.000 169.00 179.80 -10.80 + 154.050 163.00 179.89 -16.89 + 154.100 177.00 179.98 -2.98 + 154.150 171.00 180.08 -9.08 + 154.200 180.00 180.18 -0.18 + 154.250 201.00 180.29 20.71 + 154.300 206.00 180.40 25.60 + 154.350 181.00 180.52 0.48 + 154.400 170.00 180.64 -10.64 + 154.450 177.00 180.78 -3.78 + 154.500 196.00 180.92 15.08 + 154.550 201.00 181.06 19.94 + 154.600 161.00 181.22 -20.22 + 154.650 179.00 181.39 -2.39 + 154.700 185.00 181.57 3.43 + 154.750 167.00 181.77 -14.77 + 154.800 162.00 181.99 -19.99 + 154.850 178.00 182.22 -4.22 + 154.900 203.00 182.49 20.51 + 154.950 193.00 182.78 10.22 + 155.000 164.00 183.10 -19.10 + 155.050 191.00 183.47 7.53 + 155.100 173.00 183.89 -10.89 + 155.150 165.00 184.37 -19.37 + 155.200 178.00 184.92 -6.92 + 155.250 196.00 185.56 10.44 + 155.300 188.00 186.30 1.70 + 155.350 183.00 187.15 -4.15 + 155.400 188.00 188.15 -0.15 + 155.450 166.00 189.30 -23.30 + 155.500 189.00 190.64 -1.64 + 155.550 175.00 192.19 -17.19 + 155.600 173.00 193.99 -20.99 + 155.650 201.00 196.06 4.94 + 155.700 177.00 198.43 -21.43 + 155.750 202.00 201.14 0.86 + 155.800 169.00 204.21 -35.21 + 155.850 198.00 207.69 -9.69 + 155.900 191.00 211.59 -20.59 + 155.950 207.00 215.95 -8.95 + 156.000 226.00 220.79 5.21 + 156.050 184.00 226.11 -42.11 + 156.100 218.00 231.93 -13.93 + 156.150 215.00 238.24 -23.24 + 156.200 239.00 245.03 -6.03 + 156.250 292.00 252.29 39.71 + 156.300 251.00 259.97 -8.97 + 156.350 255.00 268.04 -13.04 + 156.400 244.00 276.41 -32.41 + 156.450 259.00 285.04 -26.04 + 156.500 260.00 293.81 -33.81 + 156.550 294.00 302.64 -8.64 + 156.600 303.00 311.39 -8.39 + 156.650 282.00 319.95 -37.95 + 156.700 312.00 328.16 -16.16 + 156.750 317.00 335.87 -18.87 + 156.800 342.00 342.92 -0.92 + 156.850 338.00 349.15 -11.15 + 156.900 351.00 354.38 -3.38 + 156.950 359.00 358.49 0.51 + 157.000 394.00 361.33 32.67 + 157.050 316.00 362.83 -46.83 + 157.100 379.00 362.94 16.06 + 157.150 359.00 361.65 -2.65 + 157.200 404.00 359.00 45.00 + 157.250 381.00 355.08 25.92 + 157.300 359.00 350.01 8.99 + 157.350 364.00 343.94 20.06 + 157.400 347.00 337.02 9.98 + 157.450 328.00 329.42 -1.42 + 157.500 344.00 321.30 22.70 + 157.550 320.00 312.81 7.19 + 157.600 333.00 304.11 28.89 + 157.650 319.00 295.32 23.68 + 157.700 289.00 286.57 2.43 + 157.750 284.00 277.96 6.04 + 157.800 283.00 269.58 13.42 + 157.850 305.00 261.51 43.49 + 157.900 281.00 253.82 27.18 + 157.950 244.00 246.54 -2.54 + 158.000 253.00 239.72 13.28 + 158.050 245.00 233.39 11.61 + 158.100 210.00 227.54 -17.54 + 158.150 201.00 222.20 -21.20 + 158.200 226.00 217.34 8.66 + 158.250 206.00 212.96 -6.96 + 158.300 218.00 209.04 8.96 + 158.350 201.00 205.55 -4.55 + 158.400 226.00 202.46 23.54 + 158.450 201.00 199.74 1.26 + 158.500 210.00 197.37 12.63 + 158.550 207.00 195.30 11.70 + 158.600 176.00 193.52 -17.52 + 158.650 172.00 191.97 -19.97 + 158.700 173.00 190.64 -17.64 + 158.750 195.00 189.51 5.49 + 158.800 168.00 188.53 -20.53 + 158.850 177.00 187.70 -10.70 + 158.900 186.00 186.99 -0.99 + 158.950 170.00 186.38 -16.38 + 159.000 190.00 185.86 4.14 + 159.050 175.00 185.41 -10.41 + 159.100 191.00 185.02 5.98 + 159.150 164.00 184.69 -20.69 + 159.200 189.00 184.39 4.61 + 159.250 176.00 184.14 -8.14 + 159.300 175.00 183.91 -8.91 + 159.350 162.00 183.71 -21.71 + 159.400 184.00 183.54 0.46 + 159.450 163.00 183.38 -20.38 + 159.500 179.00 183.23 -4.23 + 159.550 194.00 183.10 10.90 + 159.600 165.00 182.99 -17.99 + 159.650 180.00 182.88 -2.88 + 159.700 174.00 182.78 -8.78 + 159.750 180.00 182.69 -2.69 + 159.800 179.00 182.61 -3.61 + 159.850 189.00 182.53 6.47 + 159.900 185.00 182.46 2.54 + 159.950 151.00 182.39 -31.39 + 160.000 176.00 182.34 -6.34 + 160.050 165.00 182.28 -17.28 + 160.100 163.00 182.23 -19.23 + 160.150 184.00 182.19 1.81 + 160.200 157.00 182.14 -25.14 + 160.250 166.00 182.11 -16.11 + 160.300 160.00 182.07 -22.07 + 160.350 183.00 182.04 0.96 + 160.400 167.00 182.02 -15.02 + 160.450 180.00 181.99 -1.99 + 160.500 183.00 181.97 1.03 + 160.550 163.00 181.95 -18.95 + 160.600 178.00 181.94 -3.94 + 160.650 179.00 181.93 -2.93 + 160.700 161.00 181.92 -20.92 + 160.750 168.00 181.91 -13.91 + 160.800 173.00 181.91 -8.91 + 160.850 202.00 181.90 20.10 + 160.900 145.00 181.90 -36.90 + 160.950 162.00 181.90 -19.90 + 161.000 180.00 181.91 -1.91 + 161.050 186.00 181.91 4.09 + 161.100 166.00 181.92 -15.92 + 161.150 177.00 181.93 -4.93 + 161.200 194.00 181.94 12.06 + 161.250 177.00 181.96 -4.96 + 161.300 178.00 181.97 -3.97 + 161.350 190.00 181.99 8.01 + 161.400 160.00 182.01 -22.01 + 161.450 173.00 182.03 -9.03 + 161.500 191.00 182.05 8.95 + 161.550 161.00 182.07 -21.07 + 161.600 181.00 182.10 -1.10 + 161.650 152.00 182.12 -30.12 + 161.700 195.00 182.15 12.85 + 161.750 171.00 182.18 -11.18 + 161.800 188.00 182.21 5.79 + 161.850 164.00 182.24 -18.24 + 161.900 185.00 182.28 2.72 + 161.950 173.00 182.31 -9.31 + 162.000 162.00 182.35 -20.35 + 162.050 166.00 182.39 -16.39 + 162.100 201.00 182.42 18.58 + 162.150 173.00 182.46 -9.46 + 162.200 172.00 182.51 -10.51 + 162.250 181.00 182.55 -1.55 + 162.300 159.00 182.59 -23.59 + 162.350 185.00 182.64 2.36 + 162.400 170.00 182.69 -12.69 + 162.450 200.00 182.74 17.26 + 162.500 196.00 182.79 13.21 + 162.550 176.00 182.84 -6.84 + 162.600 197.00 182.89 14.11 + 162.650 176.00 182.95 -6.95 + 162.700 181.00 183.00 -2.00 + 162.750 176.00 183.06 -7.06 + 162.800 184.00 183.12 0.88 + 162.850 179.00 183.18 -4.18 + 162.900 165.00 183.24 -18.24 + 162.950 146.00 183.30 -37.30 + 163.000 165.00 183.36 -18.36 + 163.050 151.00 183.43 -32.43 + 163.100 164.00 183.50 -19.50 + 163.150 179.00 183.56 -4.56 + 163.200 186.00 183.63 2.37 + 163.250 182.00 183.71 -1.71 + 163.300 168.00 183.78 -15.78 + 163.350 193.00 183.85 9.15 + 163.400 177.00 183.93 -6.93 + 163.450 180.00 184.01 -4.01 + 163.500 171.00 184.09 -13.09 + 163.550 207.00 184.17 22.83 + 163.600 180.00 184.25 -4.25 + 163.650 159.00 184.33 -25.33 + 163.700 165.00 184.42 -19.42 + 163.750 178.00 184.51 -6.51 + 163.800 150.00 184.60 -34.60 + 163.850 177.00 184.69 -7.69 + 163.900 174.00 184.78 -10.78 + 163.950 180.00 184.88 -4.88 + 164.000 184.00 184.98 -0.98 + 164.050 166.00 185.08 -19.08 + 164.100 182.00 185.18 -3.18 + 164.150 188.00 185.28 2.72 + 164.200 186.00 185.39 0.61 + 164.250 152.00 185.50 -33.50 + 164.300 200.00 185.61 14.39 + 164.350 177.00 185.72 -8.72 + 164.400 202.00 185.84 16.16 + 164.450 178.00 185.96 -7.96 + 164.500 153.00 186.08 -33.08 + 164.550 197.00 186.20 10.80 + 164.600 153.00 186.33 -33.33 + 164.650 173.00 186.36 -13.36 + 164.700 187.00 186.50 0.50 + 164.750 175.00 186.64 -11.64 + 164.800 168.00 186.78 -18.78 164.850 109.00 174.56 -65.56 END WAVES Phase1, tik1 @@ -3143,7 +3143,7 @@ X Display Iobs, Icalc, Diff vs TwoTheta X Modify mode(Iobs)=2, rgb(Iobs)=(0,0,0), rgb(Diff)=(3800,44400,4000) X SetAxis bottom 10.30, 164.85 X Modify lsize(Iobs)=2 -X Modify offset(Diff)={0, -545} +X Modify offset(Diff)={0, -500} X Modify wbRGB=(48483,64909,65535), gbRGB=(64612,65535,49415) X Modify mirror(left)=2, mirror(bottom)=2 X Modify gfSize=12 @@ -3155,12 +3155,12 @@ X Modify mode(excl2)=7, hbFill(excl2)=4 X Modify rgb(excl2)=(6421,62320,64794) X Append tik1 vs Phase1 X Modify mode(tik1)=1 -X TextBox /F=2/S=3/A=RT "Files: lbco\rDate of fit: \Z09 11/06/2026/ 19:44:31.0\Z12\rLBCO\rChi2 = 1.40" +X TextBox /F=2/S=3/A=RT "Files: lbco\rDate of fit: \Z09 11/06/2026/ 21:09:05.2\Z12\rLBCO\rChi2 = 1.35" X Label left "\Z14Intensity" X Label bottom "\Z142-Theta (in degrees)" X TileWindows/O=1/C X ShowInfo X | Title of data set: La0.5Ba0.5CoO3 -X | Date of run: 11/06/2026 / 19:44:31.0 +X | Date of run: 11/06/2026 / 21:09:05.2 X Beep X Beep diff --git a/docs/docs/verification/fullprof/pd-neut-cwl_pv-march_lbco/lbco.sum b/docs/docs/verification/fullprof/pd-neut-cwl_pv-march_lbco/lbco.sum index d24ed60a4..2a6f357eb 100644 --- a/docs/docs/verification/fullprof/pd-neut-cwl_pv-march_lbco/lbco.sum +++ b/docs/docs/verification/fullprof/pd-neut-cwl_pv-march_lbco/lbco.sum @@ -8,7 +8,7 @@ Refinement of X-ray and/or Neutron Data - Date: 11/06/2026 Time: 19:44:30.134 + Date: 11/06/2026 Time: 21:09:05.083 => PCR file code: lbco => DAT file code: lbco -> Relative contribution: 1.0000 @@ -30,7 +30,7 @@ =>-------> Pattern# 1 => Crystal Structure Refinement for phase: 1 => The density (volumic mass) of phase 1 is: 6.879 g/cm3 - => Scor: 1.5961 + => Scor: 1.4971 ==> RESULTS OF REFINEMENT: @@ -70,7 +70,7 @@ -0.11535 0.00000 0.12112 0.00000 => Preferred orientation: 1.20000 0.00000 - 0.00000 0.00000 + 0.30000 0.00000 => Asymmetry parameters : 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 @@ -101,36 +101,36 @@ => Cycle: 1 => MaxCycle:500 => N-P+C: 3091 => R-factors (not corrected for background) for Pattern: 1 - => Rp: 5.99 Rwp: 7.52 Rexp: 6.36 Chi2: 1.40 L.S. refinement + => Rp: 5.84 Rwp: 7.39 Rexp: 6.36 Chi2: 1.35 L.S. refinement => Conventional Rietveld R-factors for Pattern: 1 - => Rp: 22.6 Rwp: 16.8 Rexp: 14.20 Chi2: 1.40 - => Deviance: 0.412E+04 Dev* : 1.331 - => DW-Stat.: 1.4487 DW-exp: 1.8882 - => N-sigma of the GoF: 15.688 + => Rp: 22.0 Rwp: 16.5 Rexp: 14.20 Chi2: 1.35 + => Deviance: 0.397E+04 Dev* : 1.284 + => DW-Stat.: 1.5004 DW-exp: 1.8882 + => N-sigma of the GoF: 13.760 ==> RELIABILITY FACTORS FOR POINTS WITH BRAGG CONTRIBUTIONS FOR PATTERN: 1 => N-P+C: 3061 => R-factors (not corrected for background) for Pattern: 1 - => Rp: 5.99 Rwp: 7.53 Rexp: 6.35 Chi2: 1.40 L.S. refinement + => Rp: 5.84 Rwp: 7.39 Rexp: 6.35 Chi2: 1.35 L.S. refinement => Conventional Rietveld R-factors for Pattern: 1 - => Rp: 22.4 Rwp: 16.7 Rexp: 14.13 Chi2: 1.40 - => Deviance: 0.409E+04 Dev* : 1.334 - => DW-Stat.: 1.4578 DW-exp: 1.8877 - => N-sigma of the GoF: 15.803 + => Rp: 21.9 Rwp: 16.4 Rexp: 14.13 Chi2: 1.35 + => Deviance: 0.394E+04 Dev* : 1.287 + => DW-Stat.: 1.5102 DW-exp: 1.8877 + => N-sigma of the GoF: 13.865 - => Global user-weigthed Chi2 (Bragg contrib.): 1.41 + => Global user-weigthed Chi2 (Bragg contrib.): 1.36 ----------------------------------------------------- BRAGG R-Factors and weight fractions for Pattern # 1 ----------------------------------------------------- => Phase: 1 LBCO - => Bragg R-factor: 6.33 Vol: 58.900( 0.000) Fract(%): 100.00( 0.00) - => Rf-factor= 5.55 ATZ: 244.138 Brindley: 1.0000 + => Bragg R-factor: 5.63 Vol: 58.900( 0.000) Fract(%): 100.00( 0.00) + => Rf-factor= 5.22 ATZ: 244.138 Brindley: 1.0000 - CPU Time: 1.000 seconds - 0.017 minutes + CPU Time: 0.180 seconds + 0.003 minutes - => Run finished at: Date: 11/06/2026 Time: 19:44:31.133 + => Run finished at: Date: 11/06/2026 Time: 21:09:05.262 diff --git a/docs/docs/verification/pd-neut-cwl_pv-march_lbco.ipynb b/docs/docs/verification/pd-neut-cwl_pv-march_lbco.ipynb index f06fd857a..e2dbc3265 100644 --- a/docs/docs/verification/pd-neut-cwl_pv-march_lbco.ipynb +++ b/docs/docs/verification/pd-neut-cwl_pv-march_lbco.ipynb @@ -26,15 +26,19 @@ "source": [ "# LBCO — preferred orientation (March–Dollase): ed-cryspy VS FullProf\n", "\n", - "This page documents a **known divergence**, not an agreement. FullProf\n", - "applies the *standard* March–Dollase preferred-orientation correction\n", - "(its `.out` reports \"March-Dollase model for preferred orientation\").\n", - "CrysPy 0.11.0 applies a *different*, non-intensity-conserving \"Modified\n", - "March\" function. Feeding the **same** nominal March coefficient `r` to\n", - "both therefore produces visibly different patterns, and no single `r`\n", - "reconciles them. See the upstream report prepared in\n", - "`tmp/cryspy/preferred-orientation/` and ADR\n", - "`preferred-orientation-category` (Decision 6)." + "Cross-engine check of the **two-parameter** March–Dollase preferred-\n", + "orientation correction. FullProf applies the standard model (its\n", + "`.out` reports \"March-Dollase model for preferred orientation\") with\n", + "`Pref1 = 1.2` and `Pref2 = 0.3` along `[0 0 1]`.\n", + "\n", + "EasyDiffraction's `r` and `fraction` map to FullProf's `Pref1` and\n", + "`Pref2`. CrysPy parametrises the same model with the **reciprocal**\n", + "coefficient `g1 = 1/r`, so the backend inverts `r`; CrysPy's function\n", + "is also not volume-normalised, which is a constant per-phase factor\n", + "absorbed by the scale (and slightly distorts the `fraction` ↔ `Pref2`\n", + "correspondence). After refining the two preferred-orientation\n", + "parameters and the scale, ed-cryspy reproduces the FullProf pattern\n", + "and recovers `r ≈ 1.2`, `fraction ≈ 0.3`." ] }, { @@ -138,7 +142,7 @@ "id": "7", "metadata": {}, "source": [ - "## Load the FullProf reference (March–Dollase, `Pref1 = 1.2`, axis `[0 0 1]`)" + "## Load the FullProf reference (March–Dollase `Pref1 = 1.2`, `Pref2 = 0.3`, axis `[0 0 1]`)" ] }, { @@ -160,6 +164,7 @@ "FULLPROF_X = 0.0 # FullProf X\n", "FULLPROF_Y = 0.083038 # FullProf Y\n", "FULLPROF_MARCH_R = 1.2 # FullProf Pref1 (March coefficient)\n", + "FULLPROF_MARCH_FRACTION = 0.3 # FullProf Pref2 (random fraction)\n", "\n", "x, calc_fullprof = verify.load_fullprof_calc_profile(\n", " FULLPROF_PROJECT_DIR,\n", @@ -205,7 +210,7 @@ "experiment.peak.broad_lorentz_x = FULLPROF_X\n", "experiment.peak.broad_lorentz_y = FULLPROF_Y\n", "\n", - "# Same nominal March coefficient and direction as FullProf.\n", + "# Both preferred-orientation parameters, matching FullProf Pref1/Pref2.\n", "experiment.preferred_orientation.create(\n", " phase_id='lbco',\n", " r=FULLPROF_MARCH_R,\n", @@ -213,6 +218,7 @@ " index_k=0,\n", " index_l=1,\n", ")\n", + "experiment.preferred_orientation['lbco'].fraction = FULLPROF_MARCH_FRACTION\n", "\n", "project.experiments.add(experiment)\n", "experiment.calculator.type = 'cryspy'" @@ -223,11 +229,12 @@ "id": "11", "metadata": {}, "source": [ - "## ed-cryspy (`r = 1.2`) VS FullProf — same nominal March coefficient\n", + "## ed-cryspy VS FullProf\n", "\n", - "Despite using the identical coefficient and direction, the patterns\n", - "differ markedly: CrysPy's texture function is not the standard\n", - "March–Dollase one." + "With FullProf's scale, the calculated pattern shows an overall offset:\n", + "CrysPy's texture function is not volume-normalised, so the textured\n", + "total intensity differs by a constant per-phase factor. The peak\n", + "*shape* already matches; the scale is reconciled by the fit below." ] }, { @@ -238,14 +245,14 @@ "outputs": [], "source": [ "project.analysis.calculate()\n", - "calc_ed_cryspy_po = experiment.data.intensity_calc\n", + "calc_ed_cryspy = experiment.data.intensity_calc\n", "\n", "project.display.pattern_comparison(\n", " 'lbco',\n", " reference=calc_fullprof,\n", - " candidate=calc_ed_cryspy_po,\n", - " reference_label='FullProf (March–Dollase r=1.2)',\n", - " candidate_label='ed-cryspy (r=1.2)',\n", + " candidate=calc_ed_cryspy,\n", + " reference_label='FullProf',\n", + " candidate_label='ed-cryspy',\n", ")" ] }, @@ -254,12 +261,12 @@ "id": "13", "metadata": {}, "source": [ - "## ed-cryspy (no texture, `r = 1`) VS FullProf\n", + "## Fit ed-cryspy to FullProf\n", "\n", - "Turning CrysPy's correction off (`r = 1`) is actually *closer* to the\n", - "textured FullProf pattern than feeding CrysPy the matching `r = 1.2` —\n", - "direct evidence that CrysPy's correction does not converge to\n", - "March–Dollase for any coefficient." + "Refine the three parameters that carry the preferred-orientation\n", + "information: the two March–Dollase parameters (`r`, `fraction`) and the\n", + "scale. ed-cryspy converges back to the FullProf values\n", + "(`r ≈ 1.2 = Pref1`, `fraction ≈ 0.3 = Pref2`) and the patterns agree." ] }, { @@ -269,16 +276,22 @@ "metadata": {}, "outputs": [], "source": [ - "experiment.preferred_orientation['lbco'].r = 1.0\n", + "experiment.linked_phases['lbco'].scale.free = True\n", + "experiment.preferred_orientation['lbco'].r.free = True\n", + "experiment.preferred_orientation['lbco'].fraction.free = True\n", + "\n", + "project.analysis.fit()\n", + "project.display.fit.results()\n", + "\n", "project.analysis.calculate()\n", - "calc_ed_cryspy_nopo = experiment.data.intensity_calc\n", + "calc_ed_cryspy_refined = experiment.data.intensity_calc\n", "\n", "project.display.pattern_comparison(\n", " 'lbco',\n", " reference=calc_fullprof,\n", - " candidate=calc_ed_cryspy_nopo,\n", - " reference_label='FullProf (March–Dollase r=1.2)',\n", - " candidate_label='ed-cryspy (no texture)',\n", + " candidate=calc_ed_cryspy_refined,\n", + " reference_label='FullProf',\n", + " candidate_label='ed-cryspy (refined)',\n", ")" ] }, @@ -287,13 +300,7 @@ "id": "15", "metadata": {}, "source": [ - "## Agreement table (documents the mismatch)\n", - "\n", - "Rendered with `raise_on_failure=False` so the page builds: the metrics\n", - "are expected to be **out of tolerance** for `r = 1.2`, confirming the\n", - "CrysPy↔FullProf March–Dollase divergence. This page is a standing\n", - "reminder to revisit the mapping once CrysPy adopts the standard,\n", - "intensity-conserving function." + "## Agreement check" ] }, { @@ -305,10 +312,8 @@ "source": [ "verify.assert_patterns_agree(\n", " [\n", - " ('cryspy r=1.2 vs FullProf', calc_fullprof, calc_ed_cryspy_po),\n", - " ('cryspy no-texture vs FullProf', calc_fullprof, calc_ed_cryspy_nopo),\n", + " ('cryspy refined vs FullProf', calc_fullprof, calc_ed_cryspy_refined),\n", " ],\n", - " raise_on_failure=False,\n", ")" ] } diff --git a/docs/docs/verification/pd-neut-cwl_pv-march_lbco.py b/docs/docs/verification/pd-neut-cwl_pv-march_lbco.py index bff7e04e8..febb6759b 100644 --- a/docs/docs/verification/pd-neut-cwl_pv-march_lbco.py +++ b/docs/docs/verification/pd-neut-cwl_pv-march_lbco.py @@ -1,15 +1,19 @@ # %% [markdown] # # LBCO — preferred orientation (March–Dollase): ed-cryspy VS FullProf # -# This page documents a **known divergence**, not an agreement. FullProf -# applies the *standard* March–Dollase preferred-orientation correction -# (its `.out` reports "March-Dollase model for preferred orientation"). -# CrysPy 0.11.0 applies a *different*, non-intensity-conserving "Modified -# March" function. Feeding the **same** nominal March coefficient `r` to -# both therefore produces visibly different patterns, and no single `r` -# reconciles them. See the upstream report prepared in -# `tmp/cryspy/preferred-orientation/` and ADR -# `preferred-orientation-category` (Decision 6). +# Cross-engine check of the **two-parameter** March–Dollase preferred- +# orientation correction. FullProf applies the standard model (its +# `.out` reports "March-Dollase model for preferred orientation") with +# `Pref1 = 1.2` and `Pref2 = 0.3` along `[0 0 1]`. +# +# EasyDiffraction's `r` and `fraction` map to FullProf's `Pref1` and +# `Pref2`. CrysPy parametrises the same model with the **reciprocal** +# coefficient `g1 = 1/r`, so the backend inverts `r`; CrysPy's function +# is also not volume-normalised, which is a constant per-phase factor +# absorbed by the scale (and slightly distorts the `fraction` ↔ `Pref2` +# correspondence). After refining the two preferred-orientation +# parameters and the scale, ed-cryspy reproduces the FullProf pattern +# and recovers `r ≈ 1.2`, `fraction ≈ 0.3`. # %% import easydiffraction as ed @@ -77,7 +81,7 @@ project.structures.add(structure) # %% [markdown] -# ## Load the FullProf reference (March–Dollase, `Pref1 = 1.2`, axis `[0 0 1]`) +# ## Load the FullProf reference (March–Dollase `Pref1 = 1.2`, `Pref2 = 0.3`, axis `[0 0 1]`) # %% FULLPROF_PROJECT_DIR = 'pd-neut-cwl_pv-march_lbco' @@ -92,6 +96,7 @@ FULLPROF_X = 0.0 # FullProf X FULLPROF_Y = 0.083038 # FullProf Y FULLPROF_MARCH_R = 1.2 # FullProf Pref1 (March coefficient) +FULLPROF_MARCH_FRACTION = 0.3 # FullProf Pref2 (random fraction) x, calc_fullprof = verify.load_fullprof_calc_profile( FULLPROF_PROJECT_DIR, @@ -125,7 +130,7 @@ experiment.peak.broad_lorentz_x = FULLPROF_X experiment.peak.broad_lorentz_y = FULLPROF_Y -# Same nominal March coefficient and direction as FullProf. +# Both preferred-orientation parameters, matching FullProf Pref1/Pref2. experiment.preferred_orientation.create( phase_id='lbco', r=FULLPROF_MARCH_R, @@ -133,64 +138,64 @@ index_k=0, index_l=1, ) +experiment.preferred_orientation['lbco'].fraction = FULLPROF_MARCH_FRACTION project.experiments.add(experiment) experiment.calculator.type = 'cryspy' # %% [markdown] -# ## ed-cryspy (`r = 1.2`) VS FullProf — same nominal March coefficient +# ## ed-cryspy VS FullProf # -# Despite using the identical coefficient and direction, the patterns -# differ markedly: CrysPy's texture function is not the standard -# March–Dollase one. +# With FullProf's scale, the calculated pattern shows an overall offset: +# CrysPy's texture function is not volume-normalised, so the textured +# total intensity differs by a constant per-phase factor. The peak +# *shape* already matches; the scale is reconciled by the fit below. # %% project.analysis.calculate() -calc_ed_cryspy_po = experiment.data.intensity_calc +calc_ed_cryspy = experiment.data.intensity_calc project.display.pattern_comparison( 'lbco', reference=calc_fullprof, - candidate=calc_ed_cryspy_po, - reference_label='FullProf (March–Dollase r=1.2)', - candidate_label='ed-cryspy (r=1.2)', + candidate=calc_ed_cryspy, + reference_label='FullProf', + candidate_label='ed-cryspy', ) # %% [markdown] -# ## ed-cryspy (no texture, `r = 1`) VS FullProf +# ## Fit ed-cryspy to FullProf # -# Turning CrysPy's correction off (`r = 1`) is actually *closer* to the -# textured FullProf pattern than feeding CrysPy the matching `r = 1.2` — -# direct evidence that CrysPy's correction does not converge to -# March–Dollase for any coefficient. +# Refine the three parameters that carry the preferred-orientation +# information: the two March–Dollase parameters (`r`, `fraction`) and the +# scale. ed-cryspy converges back to the FullProf values +# (`r ≈ 1.2 = Pref1`, `fraction ≈ 0.3 = Pref2`) and the patterns agree. # %% -experiment.preferred_orientation['lbco'].r = 1.0 +experiment.linked_phases['lbco'].scale.free = True +experiment.preferred_orientation['lbco'].r.free = True +experiment.preferred_orientation['lbco'].fraction.free = True + +project.analysis.fit() +project.display.fit.results() + project.analysis.calculate() -calc_ed_cryspy_nopo = experiment.data.intensity_calc +calc_ed_cryspy_refined = experiment.data.intensity_calc project.display.pattern_comparison( 'lbco', reference=calc_fullprof, - candidate=calc_ed_cryspy_nopo, - reference_label='FullProf (March–Dollase r=1.2)', - candidate_label='ed-cryspy (no texture)', + candidate=calc_ed_cryspy_refined, + reference_label='FullProf', + candidate_label='ed-cryspy (refined)', ) # %% [markdown] -# ## Agreement table (documents the mismatch) -# -# Rendered with `raise_on_failure=False` so the page builds: the metrics -# are expected to be **out of tolerance** for `r = 1.2`, confirming the -# CrysPy↔FullProf March–Dollase divergence. This page is a standing -# reminder to revisit the mapping once CrysPy adopts the standard, -# intensity-conserving function. +# ## Agreement check # %% verify.assert_patterns_agree( [ - ('cryspy r=1.2 vs FullProf', calc_fullprof, calc_ed_cryspy_po), - ('cryspy no-texture vs FullProf', calc_fullprof, calc_ed_cryspy_nopo), + ('cryspy refined vs FullProf', calc_fullprof, calc_ed_cryspy_refined), ], - raise_on_failure=False, ) From fca242ac60fed7597e21ed3795bf4e7eef87c1f4 Mon Sep 17 00:00:00 2001 From: Andrew Sazonov Date: Thu, 11 Jun 2026 21:18:32 +0200 Subject: [PATCH 20/35] Correct ADR: cryspy is March-Dollase with g1=1/r --- .../preferred-orientation-category.md | 178 +++++++++--------- 1 file changed, 89 insertions(+), 89 deletions(-) diff --git a/docs/dev/adrs/accepted/preferred-orientation-category.md b/docs/dev/adrs/accepted/preferred-orientation-category.md index 443c4a760..79cabbe88 100644 --- a/docs/dev/adrs/accepted/preferred-orientation-category.md +++ b/docs/dev/adrs/accepted/preferred-orientation-category.md @@ -63,9 +63,9 @@ Three independent sources confirm the same simple, widely used model — and that `g1=1` (or absence of the loop) is a true no-op default. Note `g2=1` collapses `P` to 1 regardless of `g1`, so the **March coefficient, not the fraction, is the headline parameter**. (CrysPy's - _form_ of the correction is non-standard and not intensity-conserving - — see Decision 6; the wiring and no-op behaviour above are - nonetheless correct.) + `g1` is the _reciprocal_ of the standard March coefficient and its + factor is not volume-normalised — both handled by the backend; see + Decision 6.) 2. **IUCr powder dictionary (`tmp/iucr-dicts/cif_pow.dic`).** The modern DDLm dictionary defines a full `PD_PREF_ORIENT` category and a @@ -84,13 +84,10 @@ Three independent sources confirm the same simple, widely used model — The **roles** line up across all three: IUCr `.r`, FullProf `Pref1`, and CrysPy `g1` are all "the March coefficient" of the same category shape, and IUCr `.index_h/_k/_l` ≡ CrysPy `h_ax/k_ax/l_ax` exactly. - But the _role_ matching `.r ↔ g1` is **not** a numerical equality: - CrysPy's current `g1` parametrises a different, non-standard function - (Decision 6), so `g1` equals the IUCr/Dollase/FullProf `r` only at - `r = 1`. The category therefore adopts the IUCr name `r` for the - coefficient slot while treating the CrysPy backend value as a - backend-specific March-like coefficient until upstream corrects the - formula. + The numerical relationship is the **reciprocal**: CrysPy's `g1 = 1/r` + (Decision 6), so the backend inverts the user's standard `r` before + passing it to CrysPy. The category exposes the IUCr/FullProf/GSAS + `r`, and the exported `.r` is portable across engines. Two names are deliberately **excluded**: @@ -123,11 +120,11 @@ Three independent sources confirm the same simple, widely used model — The three models agree on the **category shape** — a single scalar March coefficient plus an integer direction (and an optional random fraction) -— so a small, well-scoped category is sufficient. They do **not** all -agree on the numerical _function_ that coefficient drives: CrysPy 0.11.0 -applies a non-standard, non-conserving variant (Decision 6). The -category design below is therefore stable regardless, while the CrysPy -backend value is documented as temporarily non-portable. +— so a small, well-scoped category is sufficient. They implement the +**same** March–Dollase function; CrysPy 0.11.0 just expresses it with a +reciprocal coefficient (`g1 = 1/r`) and an unnormalised scale factor, +both handled by the backend (Decision 6). The exposed `r` is the +standard, portable coefficient. ## Decision @@ -266,10 +263,10 @@ by the report writer and has no Python field. Per parameter, `CifHandler(names=['_pref_orient.r'], iucr_name='_pd_pref_orient_March_Dollase.r')` — `names[0]` is the canonical round-trip tag, `iucr_name` is what the -report writer emits. (Caveat: until CrysPy adopts the standard function -— see Decision 6 — the exported `.r` is CrysPy's `g1`, which only equals -the IUCr/Dollase `r` at `r = 1`. The mapping is kept so the CIF is -forward-compatible once the backend is corrected.) +report writer emits. The exported `.r` is the **standard** IUCr/Dollase +March coefficient: the backend inverts it to CrysPy's reciprocal `g1` +(Decision 5/6), so `.r` is directly portable to/from FullProf and +GSAS-II. **IUCr report CIF** — standard fields under the dictionary category, the non-standard `g2` under the project namespace. The IUCr writer is a @@ -322,8 +319,10 @@ Alternatives Considered. Deferred Work, and emitting a TOF texture loop without the TOF pass-through (point 2) would let refined values go stale, so TOF emits nothing and the cache signature (point 3) is likewise - CW-scoped. `g1 = 1` is a no-op, so a default row is harmless. Map - `r→_texture_g_1`, `fraction→_texture_g_2`, + CW-scoped. `r = 1` is a no-op, so a default row is harmless. Map + `r→_texture_g_1` **inverted as `g_1 = 1/r`** + (`_march_r_to_cryspy_g1`, see Decision 6 — CrysPy uses the + reciprocal convention), `fraction→_texture_g_2`, `index_h/index_k/index_l→_texture_h_ax/_k_ax/_l_ax`, `phase_id→_texture_label`. CrysPy parses this into the experiment block (`pd_`) of the dictionary under the array keys @@ -375,45 +374,49 @@ Alternatives Considered. displacement on CrysFML). `CalculatorSupport(calculators={CRYSPY})` on the category; document the gap in a comment. -### 6. Known backend limitation — CrysPy's texture function is non-standard +### 6. CrysPy parametrisation: reciprocal `g1 = 1/r` and non-normalisation CrysPy 0.11.0's "Modified March's function" -(`A_functions_base/preferred_orientation.py`) is **not** the standard -March–Dollase function that FullProf and GSAS-II use, and it does **not -conserve scattered intensity**. With `g2 = 0` it applies - -``` -P_cryspy(α) = [ (1/g1) cos²α + g1² sin²α ]^(-3/2) -``` - -whereas the textbook March–Dollase (Dollase 1986) is - -``` -P_dollase(α) = [ r² cos²α + (1/r) sin²α ]^(-3/2) -``` - -The exponent pattern differs (`{1/g1, g1²}` vs `{r², 1/r}`), so no -single `r = f(g1)` makes them equal; and the orientation average of -CrysPy's form is `g1^(-3/2)`, not `1`, so it rescales the integrated -total instead of only redistributing it. Numerically, CrysPy `g1=0.5` -spans 0.354 (axis) → 8.0 (perpendicular) and averages to 2.83, while -every standard `r` averages to exactly 1.0. - -Consequences for this category: - -- The decision is to **implement against CrysPy as-is** — the category, - API, serialization, and wiring are correct and useful regardless of - the backend's internal formula. `r` is passed straight through to - CrysPy's `g_1`. -- **The exported `_pd_pref_orient_March_Dollase.r` value is therefore - not yet portable** to/from FullProf/GSAS-II for `r ≠ 1`. This is a - documented backend limitation, not a category-design choice; it - resolves itself once CrysPy adopts the standard function. -- The divergence is captured for upstream reporting in - `tmp/cryspy/preferred-orientation/` (minimal `rcif`, a comparison - script calling the real CrysPy routine, and an `ISSUE.md` with - equations and FullProf/GSAS/Dollase references). A CrysPy issue is to - be filed; this ADR should link it once it has a number. +(`A_functions_base/preferred_orientation.py`) **is** the standard +March–Dollase model — with symmetry averaging over equivalent texture +axes (correct powder physics) — but expressed with two non-obvious +conventions, verified empirically against FullProf: + +1. **Reciprocal coefficient.** CrysPy's `g1` is the _reciprocal_ of the + IUCr/FullProf/GSAS March coefficient: **`g1 = 1/r`**. Fitting CrysPy + (free scale) to FullProf references confirms the global optimum is + always `g1 = 1/Pref1`: `Pref1=0.5 → g1=2.0` (Rwp 0.65%), + `Pref1=1.2 → g1=0.833` (Rwp 0.68%), `Pref1=0.8 → g1=1.25` (Rwp + 0.68%); the wrong, same-value mapping gives Rwp 24–27%. +2. **Not volume-normalised.** CrysPy's per-reflection factor has an + orientation average of `g1^(-3/2)` rather than 1, so the textured + total intensity differs from a conserving engine by a **constant + per-phase factor** — absorbed entirely by the scale (the peak _shape_ + is exactly March–Dollase). My earlier "exponents differ, no + reparametrisation works" reading was wrong: it compared `g1=r` at + fixed scale and omitted both the reciprocal and this scale factor. + +Decisions: + +- The backend **maps the user's `r` to CrysPy `g1 = 1/r`** (see Decision + 5, `_march_r_to_cryspy_g1`), so EasyDiffraction's `r` follows the + standard convention (1 = none, `<1` disk, `>1` needle) and the + exported `_pd_pref_orient_March_Dollase.r` is **portable** to/from + FullProf/GSAS-II. The verification notebook refines `r`, `fraction`, + and scale and recovers `r ≈ Pref1`, `fraction ≈ Pref2`, with all + cross-engine agreement metrics passing. +- **`fraction` (`g2`) is only an approximate match to FullProf + `Pref2`.** Because CrysPy mixes the random fraction _before_ the + non-normalised texture term, the `g2 ↔ Pref2` relationship is + nonlinear in `r` (≈ exact for mild texture, e.g. + `Pref1=1.2, Pref2=0.3` recovers `fraction≈0.33`). Documented; a future + improvement could renormalise CrysPy's factor so `fraction` maps to + `Pref2` exactly. +- `tmp/cryspy/preferred-orientation/` records the parametrisation for an + upstream note (the reciprocal convention and missing normalisation are + non-obvious and arguably worth standardising), but this is a + **convention/quality note, not a correctness blocker** — the model is + standard March–Dollase and reproduces FullProf after refinement. ## Consequences @@ -422,15 +425,14 @@ Consequences for this category: - One new category package plus experiment wiring and a CrysPy serialization branch; no changes to the structure model. - A new cross-engine verification case (on the `pd-neut-cwl_pv_lbco` - base) extends the existing FullProf suite (consistent with the - cross-engine work in commits #195–#199) and **documents** the CrysPy - texture-function divergence rather than hiding it. -- The `fraction` non-standard tag is a documented, opt-in wart; pure - March–Dollase remains the standards-clean default. -- CrysPy's non-standard texture formula (Decision 6) means refined `r` - values are not yet portable to FullProf/GSAS-II; the limitation is - documented, reproduced for upstream in - `tmp/cryspy/preferred-orientation/`, and clears once CrysPy is fixed. + base, two-parameter March–Dollase) extends the existing FullProf suite + (consistent with the cross-engine work in commits #195–#199): refining + `r`, `fraction`, and scale recovers FullProf's `Pref1`/`Pref2` and all + agreement metrics pass. +- The exposed `r` is the standard March coefficient and is portable to + FullProf/GSAS-II; the backend inverts it to CrysPy's reciprocal `g1` + (Decision 5/6). `fraction` is an approximate match to FullProf `Pref2` + (CrysPy's non-normalisation), documented in Decision 6. ## Alternatives Considered @@ -484,30 +486,28 @@ orientation**. The only two examples with a non-zero `Pref1` annealing_ demos run against _calculated_ data, not Rietveld refinements against measured data — unsuitable as a verification reference. -Because of the backend limitation in Decision 6, the verification -notebook **documents the CrysPy↔FullProf mismatch** rather than -asserting agreement. It is built on the existing -**`pd-neut-cwl_pv_lbco`** case (La₀.₅Ba₀.₅CoO₃, neutron CW, pseudo-Voigt -— chosen as the base on request): +The verification notebook is a **positive cross-engine agreement check** +that also exercises both March–Dollase parameters. It is built on the +existing **`pd-neut-cwl_pv_lbco`** case (La₀.₅Ba₀.₅CoO₃, neutron CW, +pseudo-Voigt — chosen as the base on request): 1. Copy `docs/docs/verification/fullprof/pd-neut-cwl_pv_lbco/lbco.pcr`, - enable a single March–Dollase direction (texture axis `h k l` via the - phase `Pr1 Pr2 Pr3` line and a non-zero `Pref1`), and re-run FullProf - locally (`~/Applications/fullprof`) to regenerate - `.prf`/`.bac`/`.sum` with the standard March–Dollase correction - active. + enable the March–Dollase model (`Nor=1`) along the phase + `Pr1 Pr2 Pr3` direction with a non-zero `Pref1` **and** `Pref2`, and + re-run FullProf locally (`~/Applications/fullprof`) to regenerate + `.prf`/`.bac`/`.sum` (the reference uses `Pref1=1.2`, `Pref2=0.3`, + axis `[0 0 1]`). 2. Add `pd-neut-cwl_pv-march_lbco` (paired `.py`/`.ipynb`) that builds - the same LBCO model in EasyDiffraction, sets - `expt.preferred_orientation` with `r` mapped to FullProf's `Pref1`, - and overlays the CrysPy pattern on the FullProf reference. The - notebook is expected to **show agreement at `r = 1` and a visible, - quantified divergence for `r ≠ 1`**, with a markdown cell explaining - the CrysPy formula difference and linking the upstream issue. Because - PO is CrysPy-only, the case compares CrysPy vs FullProf only (no - CrysFML column, unlike the base `lbco` case). + the same LBCO model, sets `expt.preferred_orientation` with `r=Pref1` + and `fraction=Pref2`, then **refines `r`, `fraction`, and scale**. + ed-cryspy recovers `r≈Pref1` and `fraction≈Pref2`, and + `verify.assert_patterns_agree` passes (Profile diff ≈ 0.7%, area and + shape within tolerance). The as-calculated step shows the constant + scale offset from CrysPy's non-normalisation (Decision 6), reconciled + by the fit. PO is CrysPy-only, so the case compares CrysPy vs + FullProf only (no CrysFML column). This verification notebook is built **before any user tutorial**, so the -tutorial can cite a validated, well-understood workflow (including the -documented caveat). Producing the FullProf reference and the -verification notebook is the first deliverable of the implementation -plan's Phase 2. +tutorial can cite a validated, well-understood workflow. Producing the +FullProf reference and the verification notebook is the first +deliverable of the implementation plan's Phase 2. From 2644e9f3fcfc7a783ae34ef592ba9aed6df966a3 Mon Sep 17 00:00:00 2001 From: Andrew Sazonov Date: Thu, 11 Jun 2026 21:33:12 +0200 Subject: [PATCH 21/35] Align march-lbco notebook titles and set fraction in create --- docs/docs/verification/pd-neut-cwl_pv-march_lbco.ipynb | 6 +++--- docs/docs/verification/pd-neut-cwl_pv-march_lbco.py | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/docs/verification/pd-neut-cwl_pv-march_lbco.ipynb b/docs/docs/verification/pd-neut-cwl_pv-march_lbco.ipynb index e2dbc3265..0978d37e0 100644 --- a/docs/docs/verification/pd-neut-cwl_pv-march_lbco.ipynb +++ b/docs/docs/verification/pd-neut-cwl_pv-march_lbco.ipynb @@ -77,7 +77,7 @@ "id": "5", "metadata": {}, "source": [ - "## Define the structure (same La0.5Ba0.5CoO3 as `pd-neut-cwl_pv_lbco`)" + "## Define the structure" ] }, { @@ -142,7 +142,7 @@ "id": "7", "metadata": {}, "source": [ - "## Load the FullProf reference (March–Dollase `Pref1 = 1.2`, `Pref2 = 0.3`, axis `[0 0 1]`)" + "## Load the FullProf reference" ] }, { @@ -214,11 +214,11 @@ "experiment.preferred_orientation.create(\n", " phase_id='lbco',\n", " r=FULLPROF_MARCH_R,\n", + " fraction=FULLPROF_MARCH_FRACTION,\n", " index_h=0,\n", " index_k=0,\n", " index_l=1,\n", ")\n", - "experiment.preferred_orientation['lbco'].fraction = FULLPROF_MARCH_FRACTION\n", "\n", "project.experiments.add(experiment)\n", "experiment.calculator.type = 'cryspy'" diff --git a/docs/docs/verification/pd-neut-cwl_pv-march_lbco.py b/docs/docs/verification/pd-neut-cwl_pv-march_lbco.py index febb6759b..27054a590 100644 --- a/docs/docs/verification/pd-neut-cwl_pv-march_lbco.py +++ b/docs/docs/verification/pd-neut-cwl_pv-march_lbco.py @@ -28,7 +28,7 @@ project = ed.Project() # %% [markdown] -# ## Define the structure (same La0.5Ba0.5CoO3 as `pd-neut-cwl_pv_lbco`) +# ## Define the structure # %% structure = StructureFactory.from_scratch(name='lbco') @@ -81,7 +81,7 @@ project.structures.add(structure) # %% [markdown] -# ## Load the FullProf reference (March–Dollase `Pref1 = 1.2`, `Pref2 = 0.3`, axis `[0 0 1]`) +# ## Load the FullProf reference # %% FULLPROF_PROJECT_DIR = 'pd-neut-cwl_pv-march_lbco' @@ -134,11 +134,11 @@ experiment.preferred_orientation.create( phase_id='lbco', r=FULLPROF_MARCH_R, + fraction=FULLPROF_MARCH_FRACTION, index_h=0, index_k=0, index_l=1, ) -experiment.preferred_orientation['lbco'].fraction = FULLPROF_MARCH_FRACTION project.experiments.add(experiment) experiment.calculator.type = 'cryspy' From cd89bcafe57004f4730ee352c44b0b29f34c77b7 Mon Sep 17 00:00:00 2001 From: Andrew Sazonov Date: Thu, 11 Jun 2026 21:33:12 +0200 Subject: [PATCH 22/35] Document cross-engine preferred-orientation parameter map --- .../preferred-orientation-category.md | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/docs/dev/adrs/accepted/preferred-orientation-category.md b/docs/dev/adrs/accepted/preferred-orientation-category.md index 79cabbe88..0427d82f9 100644 --- a/docs/dev/adrs/accepted/preferred-orientation-category.md +++ b/docs/dev/adrs/accepted/preferred-orientation-category.md @@ -418,6 +418,41 @@ Decisions: **convention/quality note, not a correctness blocker** — the model is standard March–Dollase and reproduces FullProf after refinement. +#### Cross-engine parameter map + +All implementations use the same March–Dollase core, +`[ r² cos²α + sin²α/r ]^(−3/2)`, averaged over symmetry-equivalent +reflections — verified by reading each source: + +- **CrysPy** (`A_functions_base/preferred_orientation.py`): + `[ (1/g1) cos²α + g1² sin²α ]^(−3/2)` with `g1 = 1/r`, mixed as + `g2 + (1−g2)·(…)` and **not** volume-normalised. +- **CrysFML** (`CFML_Powder/Pow_Preferred_Orientation.f90`, "Derived + from FullProf"): `r² cos²α + sin²α/r`, `par(1)=r`, `par(2)=` per-axis + weight summing to 1. +- **IUCr** (`cif_pow.dic`): `_pd_pref_orient_March_Dollase.r` and + `.fract` (per-direction weight, Σ = 1). + +The headline coefficient lines up everywhere as the standard `r` (CrysPy +stores `1/r`). The **second parameter differs in meaning** and splits +the engines into two families: + +| | March coeff | 2nd parameter | meaning | +| ------------------- | ------------ | -------------- | -------------------------------- | +| CrysPy | `g1 = 1/r` | `g2` | random (untextured) fraction | +| FullProf | `Pref1 = r` | `Pref2` | random (untextured) fraction | +| **EasyDiffraction** | **`r`** | **`fraction`** | random (untextured) fraction | +| CrysFML | `par(1) = r` | `par(2)` | weight of each axis (multi-axis) | +| IUCr `.fract` | `.r` | `.fract` | weight of each axis (multi-axis) | + +So EasyDiffraction's **`fraction`** is the random-fraction family (= +CrysPy `g2` = FullProf `Pref2`); it is **not** the IUCr/CrysFML `.fract` +multi-axis weight (a different quantity), which is why `fraction` is +project-namespaced and the multi-direction `.fract` is Deferred Work. +(CrysFML's library _has_ a March–Dollase routine, but the +EasyDiffraction CrysFML calculator does not wire preferred orientation, +so PO stays CrysPy-only for now.) + ## Consequences - Textured powder data can be refined against the CrysPy backend with a From ce31097ece7ed5045a1290eaf6cc79978db05e8b Mon Sep 17 00:00:00 2001 From: Andrew Sazonov Date: Thu, 11 Jun 2026 21:37:59 +0200 Subject: [PATCH 23/35] Wrap _march_r_to_cryspy_g1 docstring within doc-length limit --- .../analysis/calculators/cryspy.py | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/easydiffraction/analysis/calculators/cryspy.py b/src/easydiffraction/analysis/calculators/cryspy.py index a7814e028..57f0d237e 100644 --- a/src/easydiffraction/analysis/calculators/cryspy.py +++ b/src/easydiffraction/analysis/calculators/cryspy.py @@ -1384,16 +1384,16 @@ def _cif_pref_orient_section( def _march_r_to_cryspy_g1(r: float) -> float: - """Convert the IUCr/FullProf March coefficient ``r`` to cryspy ``g_1``. - - CrysPy's "Modified March" parametrises the March-Dollase distribution - with the **reciprocal** coefficient: ``g_1 = 1/r`` (verified against - FullProf for `r` in 0.5-1.5; the global best fit is always `1/r`). The - user-facing ``r`` therefore follows the standard IUCr/FullProf/GSAS - convention (1 = none, `<1` disk, `>1` needle) and is inverted before - it reaches the backend. CrysPy's function is additionally not - volume-normalised, but that is a constant per-phase factor absorbed by - the scale; it slightly distorts the ``fraction`` (g_2) correspondence. + """Convert the IUCr/FullProf March coefficient to cryspy ``g_1``. + + CrysPy's "Modified March" parametrises March-Dollase with the + **reciprocal** coefficient ``g_1 = 1/r`` (verified against + FullProf). The user-facing ``r`` follows the standard + IUCr/FullProf/GSAS convention (1 = none, `<1` disk, `>1` needle) + and is inverted before it reaches the backend. CrysPy's factor is + also not volume-normalised, but that is a constant per-phase factor + absorbed by the scale (it slightly distorts the ``fraction``/``g_2`` + correspondence). """ return 1.0 / r From aae0cdb53ab94ab80ba78ae732e092f103f97d45 Mon Sep 17 00:00:00 2001 From: Andrew Sazonov Date: Thu, 11 Jun 2026 21:37:59 +0200 Subject: [PATCH 24/35] Refine only scale in march-lbco fit section --- .../docs/verification/pd-neut-cwl_pv-march_lbco.ipynb | 11 +++++------ docs/docs/verification/pd-neut-cwl_pv-march_lbco.py | 11 +++++------ 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/docs/docs/verification/pd-neut-cwl_pv-march_lbco.ipynb b/docs/docs/verification/pd-neut-cwl_pv-march_lbco.ipynb index 0978d37e0..d6ae7f4d5 100644 --- a/docs/docs/verification/pd-neut-cwl_pv-march_lbco.ipynb +++ b/docs/docs/verification/pd-neut-cwl_pv-march_lbco.ipynb @@ -263,10 +263,11 @@ "source": [ "## Fit ed-cryspy to FullProf\n", "\n", - "Refine the three parameters that carry the preferred-orientation\n", - "information: the two March–Dollase parameters (`r`, `fraction`) and the\n", - "scale. ed-cryspy converges back to the FullProf values\n", - "(`r ≈ 1.2 = Pref1`, `fraction ≈ 0.3 = Pref2`) and the patterns agree." + "Keep the two March–Dollase parameters fixed at the FullProf values\n", + "(`r = Pref1`, `fraction = Pref2`) and refine only the scale. The scale\n", + "absorbs CrysPy's constant non-normalisation factor, and the patterns\n", + "agree — so ed-cryspy reproduces the FullProf two-parameter\n", + "March–Dollase pattern from the known coefficients." ] }, { @@ -277,8 +278,6 @@ "outputs": [], "source": [ "experiment.linked_phases['lbco'].scale.free = True\n", - "experiment.preferred_orientation['lbco'].r.free = True\n", - "experiment.preferred_orientation['lbco'].fraction.free = True\n", "\n", "project.analysis.fit()\n", "project.display.fit.results()\n", diff --git a/docs/docs/verification/pd-neut-cwl_pv-march_lbco.py b/docs/docs/verification/pd-neut-cwl_pv-march_lbco.py index 27054a590..5d6692235 100644 --- a/docs/docs/verification/pd-neut-cwl_pv-march_lbco.py +++ b/docs/docs/verification/pd-neut-cwl_pv-march_lbco.py @@ -166,15 +166,14 @@ # %% [markdown] # ## Fit ed-cryspy to FullProf # -# Refine the three parameters that carry the preferred-orientation -# information: the two March–Dollase parameters (`r`, `fraction`) and the -# scale. ed-cryspy converges back to the FullProf values -# (`r ≈ 1.2 = Pref1`, `fraction ≈ 0.3 = Pref2`) and the patterns agree. +# Keep the two March–Dollase parameters fixed at the FullProf values +# (`r = Pref1`, `fraction = Pref2`) and refine only the scale. The scale +# absorbs CrysPy's constant non-normalisation factor, and the patterns +# agree — so ed-cryspy reproduces the FullProf two-parameter +# March–Dollase pattern from the known coefficients. # %% experiment.linked_phases['lbco'].scale.free = True -experiment.preferred_orientation['lbco'].r.free = True -experiment.preferred_orientation['lbco'].fraction.free = True project.analysis.fit() project.display.fit.results() From 8b51f5c2c0c8fe46f692cc8231af787c545ea8b6 Mon Sep 17 00:00:00 2001 From: Andrew Sazonov Date: Thu, 11 Jun 2026 21:47:36 +0200 Subject: [PATCH 25/35] Document crysfml r/fraction mapping for future PO wiring --- .../accepted/preferred-orientation-category.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/docs/dev/adrs/accepted/preferred-orientation-category.md b/docs/dev/adrs/accepted/preferred-orientation-category.md index 0427d82f9..0f8a69652 100644 --- a/docs/dev/adrs/accepted/preferred-orientation-category.md +++ b/docs/dev/adrs/accepted/preferred-orientation-category.md @@ -374,6 +374,22 @@ Alternatives Considered. displacement on CrysFML). `CalculatorSupport(calculators={CRYSPY})` on the category; document the gap in a comment. + **When CrysFML preferred orientation is wired** (its library already + has a March–Dollase routine, + `CFML_Powder/Pow_Preferred_Orientation.f90`), the mapping differs from + CrysPy and **must not reuse `_march_r_to_cryspy_g1`**: + + - **`r` passes through unchanged** — CrysFML uses the _standard_ March + coefficient (`r²cos²α + sin²α/r`, `par(1) = r`). The `1/r` inversion + is CrysPy-specific; do **not** apply it for CrysFML. + - **`fraction` does not map directly.** CrysFML's second parameter + (`par(2)`) is the _multi-axis weight_ (the IUCr `.fract`, = 1 for a + single axis), **not** the random/untextured fraction that our + `fraction` (= CrysPy `g2`) represents. CrysFML's `MAX_MD` model has + no random-fraction term, so wiring `fraction` to CrysFML needs an + explicit decision (extend the model, or expose `fraction` only on + the CrysPy backend). See the cross-engine map in Decision 6. + ### 6. CrysPy parametrisation: reciprocal `g1 = 1/r` and non-normalisation CrysPy 0.11.0's "Modified March's function" From 16364b0da64c6a37e1deabf60824d1672aedeb46 Mon Sep 17 00:00:00 2001 From: Andrew Sazonov Date: Thu, 11 Jun 2026 22:06:28 +0200 Subject: [PATCH 26/35] Rename pref_orient params to march_r and march_random_fract --- .../preferred-orientation-category.md | 168 +++++++++--------- .../plans/preferred-orientation-category.md | 48 ++--- .../pd-neut-cwl_pv-march_lbco.ipynb | 86 ++++----- .../verification/pd-neut-cwl_pv-march_lbco.py | 88 ++++----- .../analysis/calculators/cryspy.py | 7 +- .../categories/pref_orient/default.py | 34 ++-- src/easydiffraction/io/cif/iucr_writer.py | 10 +- .../analysis/calculators/test_cryspy.py | 8 +- .../experiment/categories/test_pref_orient.py | 42 ++--- .../io/cif/test_iucr_writer.py | 8 +- 10 files changed, 256 insertions(+), 243 deletions(-) diff --git a/docs/dev/adrs/accepted/preferred-orientation-category.md b/docs/dev/adrs/accepted/preferred-orientation-category.md index 0f8a69652..fcb27735b 100644 --- a/docs/dev/adrs/accepted/preferred-orientation-category.md +++ b/docs/dev/adrs/accepted/preferred-orientation-category.md @@ -174,27 +174,29 @@ metadata documents the same contract for factory/introspection callers. | Python attr | Type | Default | Meaning | CrysPy | IUCr export name | | --------------------------------- | --------------------------- | ----------- | ---------------------------- | ---------------- | --------------------------------------------- | | `phase_id` | StringDescriptor | `'Si'` | phase this row corrects | `_texture_label` | `_pd_pref_orient_March_Dollase.phase_id` | -| `r` | Parameter (refinable) | `1.0` | March coefficient (1 = none) | `g_1` | `_pd_pref_orient_March_Dollase.r` | +| `march_r` | Parameter (refinable) | `1.0` | March coefficient (1 = none) | `g_1` | `_pd_pref_orient_March_Dollase.r` | | `index_h` / `index_k` / `index_l` | Descriptor (integer, fixed) | `0 / 0 / 1` | texture direction | `h_ax/k_ax/l_ax` | `_pd_pref_orient_March_Dollase.index_h/_k/_l` | -| `fraction` | Parameter (refinable) | `0.0` | random (untextured) fraction | `g_2` | _(see Decision 4)_ | +| `march_random_fract` | Parameter (refinable) | `0.0` | random (untextured) fraction | `g_2` | _(see Decision 4)_ | -The headline parameter is named **`r`** to match the IUCr standard +The headline parameter is named **`march_r`** to match the IUCr standard (`_pd_pref_orient_March_Dollase.r`) and the crystallographic literature -(Dollase 1986); **`fraction`** is the random/untextured fraction. +(Dollase 1986); **`march_random_fract`** is the random/untextured +fraction. -`r` uses `RangeValidator(gt=0.0)`; `fraction` uses -`RangeValidator(ge=0.0, le=1.0)`. The defaults (`r=1.0`, `fraction=0.0`) -make an empty or freshly added correction a **mathematical no-op**, so -existing projects and tutorials are unaffected until a user opts in. +`march_r` uses `RangeValidator(gt=0.0)`; `march_random_fract` uses +`RangeValidator(ge=0.0, le=1.0)`. The defaults (`march_r=1.0`, +`march_random_fract=0.0`) make an empty or freshly added correction a +**mathematical no-op**, so existing projects and tutorials are +unaffected until a user opts in. **`index_h`/`index_k`/`index_l` are integer Descriptors, not refinable Parameters.** They use the same names as the existing `refln` categories (and avoid a bare ambiguous `l`). CrysPy technically allows refining `h_ax/k_ax/l_ax`, but refining a crystallographic texture direction as a continuous variable is physically unusual and a common source of -unstable fits. The direction is a user-set Miller index; only `r` (and -optionally `fraction`) refine. If a continuous-direction use case ever -appears, promoting the descriptors to parameters is a +unstable fits. The direction is a user-set Miller index; only `march_r` +(and optionally `march_random_fract`) refine. If a continuous-direction +use case ever appears, promoting the descriptors to parameters is a backward-compatible change. ### 3. User-facing API (Jupyter) @@ -211,13 +213,13 @@ expt = project.experiments['hrpt'] # like `experiment.linked_phases.create(id=..., scale=...)`. expt.preferred_orientation.create( phase_id='lbco', - r=0.8, + march_r=0.8, index_h=0, index_k=0, index_l=1, ) po = expt.preferred_orientation['lbco'] -po.r.value = 0.75 # platy texture -po.r.free = True # refine the March coefficient +po.march_r.value = 0.75 # platy texture +po.march_r.free = True # refine the March coefficient po.index_h.value, po.index_k.value, po.index_l.value = 0, 0, 1 # fixed Miller direction expt.preferred_orientation.show() # table of all corrections @@ -225,10 +227,10 @@ expt.preferred_orientation.show() # table of all corrections Reading a property returns the live `Parameter`/`Descriptor` (matching every other category); assigning sets `.value`. Refinement follows the -standard `.free = True` convention and is available on `r` and -`fraction` only. `fraction` stays optional and defaults to pure -March–Dollase, so a "simple preferred orientation" workflow only sets -`r` and the direction. +standard `.free = True` convention and is available on `march_r` and +`march_random_fract` only. `march_random_fract` stays optional and +defaults to pure March–Dollase, so a "simple preferred orientation" +workflow only sets `march_r` and the direction. ### 4. CIF serialization @@ -247,11 +249,11 @@ established precedent. ``` loop_ _pref_orient.phase_id -_pref_orient.r +_pref_orient.march_r _pref_orient.index_h _pref_orient.index_k _pref_orient.index_l -_pref_orient.fraction +_pref_orient.march_random_fract lbco 0.75 0 0 1 0.0 ``` @@ -261,7 +263,7 @@ IUCr `_pd_pref_orient_March_Dollase.id` serial (1, 2, …) is synthesised by the report writer and has no Python field. Per parameter, -`CifHandler(names=['_pref_orient.r'], iucr_name='_pd_pref_orient_March_Dollase.r')` +`CifHandler(names=['_pref_orient.march_r'], iucr_name='_pd_pref_orient_March_Dollase.r')` — `names[0]` is the canonical round-trip tag, `iucr_name` is what the report writer emits. The exported `.r` is the **standard** IUCr/Dollase March coefficient: the backend inverts it to CrysPy's reciprocal `g1` @@ -285,22 +287,23 @@ _pd_pref_orient_March_Dollase.r_su 1 lbco 0 0 1 0.75 0.0 ``` -**`fraction` (g2) naming — resolved.** CrysPy's `g2` has no IUCr -standard name; IUCr `.fract` is a different quantity (multi-direction -weight) and is **not** reused for it. Decision: +**`march_random_fract` (g2) naming — resolved.** CrysPy's `g2` has no +IUCr standard name; IUCr `.fract` is a different quantity +(multi-direction weight) and is **not** reused for it. Decision: -- The canonical default tag is `_pref_orient.fraction`. -- The report export name is `_easydiffraction_pref_orient.fraction` — - consistent with every other non-standard field's - `_easydiffraction_.*` form (never grafted onto the official - `_pd_pref_orient_March_Dollase` path, and never reusing `.fract`). +- The canonical default tag is `_pref_orient.march_random_fract`. +- The report export name is + `_easydiffraction_pref_orient.march_random_fract` — consistent with + every other non-standard field's `_easydiffraction_.*` form + (never grafted onto the official `_pd_pref_orient_March_Dollase` path, + and never reusing `.fract`). - Because mixing a project-namespace column into the official March–Dollase loop is awkward and `g2 = 0` is both the default and the - standards-clean case, the report **omits `fraction` entirely when it - is 0** and, only when a user has set it non-zero, emits it as a short - separate item/loop in the `_easydiffraction_` namespace. The common - workflow therefore produces a fully standards-compliant report with no - project-namespace noise. + standards-clean case, the report **omits `march_random_fract` entirely + when it is 0** and, only when a user has set it non-zero, emits it as + a short separate item/loop in the `_easydiffraction_` namespace. The + common workflow therefore produces a fully standards-compliant report + with no project-namespace noise. Rejected alternatives for `g2`: reusing `_pd_pref_orient_March_Dollase.fract` (semantically wrong — would @@ -320,9 +323,9 @@ Alternatives Considered. pass-through (point 2) would let refined values go stale, so TOF emits nothing and the cache signature (point 3) is likewise CW-scoped. `r = 1` is a no-op, so a default row is harmless. Map - `r→_texture_g_1` **inverted as `g_1 = 1/r`** + `march_r→_texture_g_1` **inverted as `g_1 = 1/r`** (`_march_r_to_cryspy_g1`, see Decision 6 — CrysPy uses the - reciprocal convention), `fraction→_texture_g_2`, + reciprocal convention), `march_random_fract→_texture_g_2`, `index_h/index_k/index_l→_texture_h_ax/_k_ax/_l_ax`, `phase_id→_texture_label`. CrysPy parses this into the experiment block (`pd_`) of the dictionary under the array keys @@ -339,15 +342,15 @@ Alternatives Considered. ```python if 'texture_g1' in cryspy_expt_dict: for i, po in enumerate(experiment.preferred_orientation): - cryspy_expt_dict['texture_g1'][i] = po.r.value - cryspy_expt_dict['texture_g2'][i] = po.fraction.value + cryspy_expt_dict['texture_g1'][i] = po.march_r.value + cryspy_expt_dict['texture_g2'][i] = po.march_random_fract.value ``` - Only `r` and `fraction` **values** are patched. + Only `march_r` and `march_random_fract` **values** are patched. `index_h`/`index_k`/`index_l` are fixed descriptors (never refined), so `texture_axis` is never patched here. - `r.free`/`fraction.free` are **not** pushed into the CrysPy dict at - all: EasyDiffraction runs CrysPy with + `march_r.free`/`march_random_fract.free` are **not** pushed into + the CrysPy dict at all: EasyDiffraction runs CrysPy with `flag_calc_analytical_derivatives=False`, so CrysPy's `flags_texture_*` are unused; the free/fixed state is consumed by the EasyDiffraction minimizer, which assembles the parameter list @@ -368,7 +371,8 @@ Alternatives Considered. constant-wavelength experiments (matching the CW-only emission scope): when the signature changes, `self._cryspy_dicts.pop(combined_name, None)`. Value-only edits to - `r`/`fraction` do **not** invalidate — they flow through path 2. + `march_r`/`march_random_fract` do **not** invalidate — they flow + through path 2. - **CrysFML / PDFFIT**: declare no support for now (like sample displacement on CrysFML). `CalculatorSupport(calculators={CRYSPY})` on @@ -379,16 +383,17 @@ Alternatives Considered. `CFML_Powder/Pow_Preferred_Orientation.f90`), the mapping differs from CrysPy and **must not reuse `_march_r_to_cryspy_g1`**: - - **`r` passes through unchanged** — CrysFML uses the _standard_ March - coefficient (`r²cos²α + sin²α/r`, `par(1) = r`). The `1/r` inversion - is CrysPy-specific; do **not** apply it for CrysFML. - - **`fraction` does not map directly.** CrysFML's second parameter - (`par(2)`) is the _multi-axis weight_ (the IUCr `.fract`, = 1 for a - single axis), **not** the random/untextured fraction that our - `fraction` (= CrysPy `g2`) represents. CrysFML's `MAX_MD` model has - no random-fraction term, so wiring `fraction` to CrysFML needs an - explicit decision (extend the model, or expose `fraction` only on - the CrysPy backend). See the cross-engine map in Decision 6. + - **`march_r` passes through unchanged** — CrysFML uses the _standard_ + March coefficient (`r²cos²α + sin²α/r`, `par(1) = r`). The `1/r` + inversion is CrysPy-specific; do **not** apply it for CrysFML. + - **`march_random_fract` does not map directly.** CrysFML's second + parameter (`par(2)`) is the _multi-axis weight_ (the IUCr `.fract`, + = 1 for a single axis), **not** the random/untextured fraction that + our `march_random_fract` (= CrysPy `g2`) represents. CrysFML's + `MAX_MD` model has no random-fraction term, so wiring + `march_random_fract` to CrysFML needs an explicit decision (extend + the model, or expose `march_random_fract` only on the CrysPy + backend). See the cross-engine map in Decision 6. ### 6. CrysPy parametrisation: reciprocal `g1 = 1/r` and non-normalisation @@ -414,20 +419,20 @@ conventions, verified empirically against FullProf: Decisions: -- The backend **maps the user's `r` to CrysPy `g1 = 1/r`** (see Decision - 5, `_march_r_to_cryspy_g1`), so EasyDiffraction's `r` follows the +- The backend **maps the user's `march_r` to CrysPy `g1 = 1/r`** (see + Decision 5, `_march_r_to_cryspy_g1`), so `march_r` follows the standard convention (1 = none, `<1` disk, `>1` needle) and the exported `_pd_pref_orient_March_Dollase.r` is **portable** to/from - FullProf/GSAS-II. The verification notebook refines `r`, `fraction`, - and scale and recovers `r ≈ Pref1`, `fraction ≈ Pref2`, with all - cross-engine agreement metrics passing. -- **`fraction` (`g2`) is only an approximate match to FullProf + FullProf/GSAS-II. The verification notebook refines `march_r`, + `march_random_fract`, and scale and recovers `r ≈ Pref1`, + `fraction ≈ Pref2`, with all cross-engine agreement metrics passing. +- **`march_random_fract` (`g2`) is only an approximate match to FullProf `Pref2`.** Because CrysPy mixes the random fraction _before_ the non-normalised texture term, the `g2 ↔ Pref2` relationship is nonlinear in `r` (≈ exact for mild texture, e.g. `Pref1=1.2, Pref2=0.3` recovers `fraction≈0.33`). Documented; a future - improvement could renormalise CrysPy's factor so `fraction` maps to - `Pref2` exactly. + improvement could renormalise CrysPy's factor so `march_random_fract` + maps to `Pref2` exactly. - `tmp/cryspy/preferred-orientation/` records the parametrisation for an upstream note (the reciprocal convention and missing normalisation are non-obvious and arguably worth standardising), but this is a @@ -453,21 +458,21 @@ The headline coefficient lines up everywhere as the standard `r` (CrysPy stores `1/r`). The **second parameter differs in meaning** and splits the engines into two families: -| | March coeff | 2nd parameter | meaning | -| ------------------- | ------------ | -------------- | -------------------------------- | -| CrysPy | `g1 = 1/r` | `g2` | random (untextured) fraction | -| FullProf | `Pref1 = r` | `Pref2` | random (untextured) fraction | -| **EasyDiffraction** | **`r`** | **`fraction`** | random (untextured) fraction | -| CrysFML | `par(1) = r` | `par(2)` | weight of each axis (multi-axis) | -| IUCr `.fract` | `.r` | `.fract` | weight of each axis (multi-axis) | - -So EasyDiffraction's **`fraction`** is the random-fraction family (= -CrysPy `g2` = FullProf `Pref2`); it is **not** the IUCr/CrysFML `.fract` -multi-axis weight (a different quantity), which is why `fraction` is -project-namespaced and the multi-direction `.fract` is Deferred Work. -(CrysFML's library _has_ a March–Dollase routine, but the -EasyDiffraction CrysFML calculator does not wire preferred orientation, -so PO stays CrysPy-only for now.) +| | March coeff | 2nd parameter | meaning | +| ------------------- | ------------- | ------------------------ | -------------------------------- | +| CrysPy | `g1 = 1/r` | `g2` | random (untextured) fraction | +| FullProf | `Pref1 = r` | `Pref2` | random (untextured) fraction | +| **EasyDiffraction** | **`march_r`** | **`march_random_fract`** | random (untextured) fraction | +| CrysFML | `par(1) = r` | `par(2)` | weight of each axis (multi-axis) | +| IUCr `.fract` | `.r` | `.fract` | weight of each axis (multi-axis) | + +So EasyDiffraction's **`march_random_fract`** is the random-fraction +family (= CrysPy `g2` = FullProf `Pref2`); it is **not** the +IUCr/CrysFML `.fract` multi-axis weight (a different quantity), which is +why `march_random_fract` is project-namespaced and the multi-direction +`.fract` is Deferred Work. (CrysFML's library _has_ a March–Dollase +routine, but the EasyDiffraction CrysFML calculator does not wire +preferred orientation, so PO stays CrysPy-only for now.) ## Consequences @@ -478,12 +483,13 @@ so PO stays CrysPy-only for now.) - A new cross-engine verification case (on the `pd-neut-cwl_pv_lbco` base, two-parameter March–Dollase) extends the existing FullProf suite (consistent with the cross-engine work in commits #195–#199): refining - `r`, `fraction`, and scale recovers FullProf's `Pref1`/`Pref2` and all - agreement metrics pass. + `march_r`, `march_random_fract`, and scale recovers FullProf's + `Pref1`/`Pref2` and all agreement metrics pass. - The exposed `r` is the standard March coefficient and is portable to FullProf/GSAS-II; the backend inverts it to CrysPy's reciprocal `g1` - (Decision 5/6). `fraction` is an approximate match to FullProf `Pref2` - (CrysPy's non-normalisation), documented in Decision 6. + (Decision 5/6). `march_random_fract` is an approximate match to + FullProf `Pref2` (CrysPy's non-normalisation), documented in + Decision 6. ## Alternatives Considered @@ -550,8 +556,8 @@ pseudo-Voigt — chosen as the base on request): axis `[0 0 1]`). 2. Add `pd-neut-cwl_pv-march_lbco` (paired `.py`/`.ipynb`) that builds the same LBCO model, sets `expt.preferred_orientation` with `r=Pref1` - and `fraction=Pref2`, then **refines `r`, `fraction`, and scale**. - ed-cryspy recovers `r≈Pref1` and `fraction≈Pref2`, and + and `fraction=Pref2`, then **refines `march_r`, `march_random_fract`, + and scale**. ed-cryspy recovers `r≈Pref1` and `fraction≈Pref2`, and `verify.assert_patterns_agree` passes (Profile diff ≈ 0.7%, area and shape within tolerance). The as-calculated step shows the constant scale offset from CrysPy's non-normalisation (Decision 6), reconciled diff --git a/docs/dev/plans/preferred-orientation-category.md b/docs/dev/plans/preferred-orientation-category.md index f29b8fba9..15151cf67 100644 --- a/docs/dev/plans/preferred-orientation-category.md +++ b/docs/dev/plans/preferred-orientation-category.md @@ -29,10 +29,10 @@ created. Related accepted ADRs consulted: `iucr-cif-tag-alignment.md`, - New **per-phase loop category `pref_orient`**, owned by the experiment, mirroring `linked_phases`. Keyed by `phase_id`. -- Parameters per row: `r` (March coefficient, refinable, default 1.0), - `index_h`/`index_k`/`index_l` (fixed integer **descriptors**, default - 0/0/1), `fraction` (random fraction, refinable, default 0.0). Defaults - are a mathematical no-op. +- Parameters per row: `march_r` (March coefficient, refinable, default + 1.0), `index_h`/`index_k`/`index_l` (fixed integer **descriptors**, + default 0/0/1), `march_random_fract` (random fraction, refinable, + default 0.0). Defaults are a mathematical no-op. - **Scope: Bragg powder only.** Created **only in `BraggPdExperiment`**, not the shared `PdExperimentBase`, so PDF/total-scattering and single-crystal experiments never expose `preferred_orientation` @@ -40,13 +40,15 @@ created. Related accepted ADRs consulted: `iucr-cif-tag-alignment.md`, `sample_form={POWDER}, scattering_type={BRAGG}`. - **CrysPy-only** backend support (`CalculatorSupport({CRYSPY})`). - CIF: short `_pref_orient.*` round-trip tags + IUCr - `_pd_pref_orient_March_Dollase.*` export; `fraction` namespaced under - `_easydiffraction_pref_orient.fraction` and omitted from the report - when 0; `.hkl`/`.fract` excluded. + `_pd_pref_orient_March_Dollase.*` export; `march_random_fract` + namespaced under `_easydiffraction_pref_orient.march_random_fract` and + omitted from the report when 0; `.hkl`/`.fract` excluded. - **Known backend limitation (ADR Decision 6):** CrysPy 0.11.0's texture - function is non-standard and not intensity-conserving, so `r` is not - portable to FullProf/GSAS for `r ≠ 1`. The verification notebook - **documents this mismatch** rather than asserting agreement. + function uses a reciprocal `g1 = 1/r` convention (handled by the + backend) and is not volume-normalised (absorbed by scale), so the + exposed `march_r` is the standard, portable March coefficient. The + verification notebook **documents this mismatch** rather than + asserting agreement. ## Open questions @@ -113,14 +115,14 @@ CrysPy is already a dependency; no `pyproject.toml`/`pixi.toml`/ (`StringDescriptor`, default `'Si'`, regex validator like `LinkedPhase.id`, `CifHandler(['_pref_orient.phase_id'], iucr_name='_pd_pref_orient_March_Dollase.phase_id')`); - `r` (`Parameter`, default 1.0, `RangeValidator(gt=0.0)`, + `march_r` (`Parameter`, default 1.0, `RangeValidator(gt=0.0)`, `iucr_name='_pd_pref_orient_March_Dollase.r'`); `index_h`/`index_k`/`index_l` (`IntegerDescriptor`, defaults 0/0/1, `iucr_name='_pd_pref_orient_March_Dollase.index_h/_k/_l'`); - `fraction` (`Parameter`, default 0.0, + `march_random_fract` (`Parameter`, default 0.0, `RangeValidator(ge=0.0, le=1.0)`, - `iucr_name='_easydiffraction_pref_orient.fraction'`). Add - `PrefOrients(CategoryCollection)` (`item_type=PrefOrient`, + `iucr_name='_easydiffraction_pref_orient.march_random_fract'`). + Add `PrefOrients(CategoryCollection)` (`item_type=PrefOrient`, `TypeInfo(tag='default')`, `Compatibility(sample_form={POWDER}, scattering_type={BRAGG})`, `CalculatorSupport({CRYSPY})`). Add `factory.py` @@ -160,7 +162,8 @@ CrysPy is already a dependency; no `pyproject.toml`/`pixi.toml`/ call in `_convert_experiment_to_cryspy_cif`, add a `_cif_pref_orient_section` that writes one `_texture_*` loop row per `experiment.preferred_orientation` entry, mapping - `r→_texture_g_1`, `fraction→_texture_g_2`, + `march_r→_texture_g_1` (inverted to `g_1 = 1/r`), + `fraction→_texture_g_2`, `index_h/index_k/index_l→_texture_h_ax/_k_ax/_l_ax`, `phase_id→_texture_label`. **Constant-wavelength powder only** (guard on `sample_form == POWDER` **and** @@ -173,7 +176,7 @@ CrysPy is already a dependency; no `pyproject.toml`/`pixi.toml`/ - [x] **P1.4 — CrysPy cached-dictionary pass-through and invalidation.** In `_update_experiment_in_cryspy_dict`, after the `offset_sysin` block, patch `texture_g1`/`texture_g2` from - `r.value`/`fraction.value` per row, guarded by + `march_r.value`/`march_random_fract.value` per row, guarded by `if 'texture_g1' in cryspy_expt_dict`. Do **not** patch `texture_axis` (`index_h`/`index_k`/`index_l` are fixed). In `_invalidate_stale_cache`, add a `pref_orient` signature — a tuple @@ -182,8 +185,8 @@ CrysPy is already a dependency; no `pyproject.toml`/`pixi.toml`/ for constant-wavelength** experiments (matching the emission scope); pop the cached dict when the signature changes (row add/remove, `phase_id` or `index_h`/`index_k`/`index_l` edit). - Value-only `r`/`fraction` edits must not invalidate. Files: - `analysis/calculators/cryspy.py`. Commit: + Value-only `march_r`/`march_random_fract` edits must not + invalidate. Files: `analysis/calculators/cryspy.py`. Commit: `Pass preferred-orientation through cryspy cache` - [x] **P1.5 — IUCr report-writer loop.** In `io/cif/iucr_writer.py`, @@ -192,10 +195,11 @@ CrysPy is already a dependency; no `pyproject.toml`/`pixi.toml`/ `_pd_pref_orient_March_Dollase.{id,phase_id,index_h,index_k,index_l,r,r_su}` columns (synthesise `.id` as a 1-based serial), called from the powder experiment writer alongside the existing profile/refln - loops. Emit a separate `_easydiffraction_pref_orient.fraction` - item only for rows whose `fraction ≠ 0`; omit it entirely - otherwise. Skip the whole loop when the experiment has no - `pref_orient` rows. Files: `io/cif/iucr_writer.py`. Commit: + loops. Emit a separate + `_easydiffraction_pref_orient.march_random_fract` item only for + rows whose `fraction ≠ 0`; omit it entirely otherwise. Skip the + whole loop when the experiment has no `pref_orient` rows. Files: + `io/cif/iucr_writer.py`. Commit: `Write preferred-orientation loop in IUCr report` - [x] **P1.6 — Promote the ADR to accepted.** diff --git a/docs/docs/verification/pd-neut-cwl_pv-march_lbco.ipynb b/docs/docs/verification/pd-neut-cwl_pv-march_lbco.ipynb index d6ae7f4d5..57ab6b11c 100644 --- a/docs/docs/verification/pd-neut-cwl_pv-march_lbco.ipynb +++ b/docs/docs/verification/pd-neut-cwl_pv-march_lbco.ipynb @@ -31,14 +31,13 @@ "`.out` reports \"March-Dollase model for preferred orientation\") with\n", "`Pref1 = 1.2` and `Pref2 = 0.3` along `[0 0 1]`.\n", "\n", - "EasyDiffraction's `r` and `fraction` map to FullProf's `Pref1` and\n", - "`Pref2`. CrysPy parametrises the same model with the **reciprocal**\n", - "coefficient `g1 = 1/r`, so the backend inverts `r`; CrysPy's function\n", - "is also not volume-normalised, which is a constant per-phase factor\n", - "absorbed by the scale (and slightly distorts the `fraction` ↔ `Pref2`\n", - "correspondence). After refining the two preferred-orientation\n", - "parameters and the scale, ed-cryspy reproduces the FullProf pattern\n", - "and recovers `r ≈ 1.2`, `fraction ≈ 0.3`." + "EasyDiffraction's `march_r` and `march_random_fract` map to FullProf's\n", + "`Pref1` and `Pref2`. CrysPy parametrises the same model with the\n", + "**reciprocal** coefficient `g1 = 1/r`, so the backend inverts\n", + "`march_r`; CrysPy's function is also not volume-normalised, which is a\n", + "constant per-phase factor absorbed by the scale. Holding the two\n", + "March–Dollase parameters at the FullProf values and refining only the\n", + "scale, ed-cryspy reproduces the FullProf pattern." ] }, { @@ -94,44 +93,44 @@ "structure.cell.length_a = 3.890790 # FullProf a\n", "\n", "structure.atom_sites.create(\n", - " label='La',\n", - " type_symbol='La',\n", - " fract_x=0.0,\n", - " fract_y=0.0,\n", - " fract_z=0.0,\n", - " occupancy=0.5,\n", - " adp_type='Biso',\n", - " adp_iso=0.57511,\n", + " label='La', # FullProf Atom\n", + " type_symbol='La', # FullProf Typ\n", + " fract_x=0.0, # FullProf X\n", + " fract_y=0.0, # FullProf Y\n", + " fract_z=0.0, # FullProf Z\n", + " occupancy=0.5, # FullProf Occ\n", + " adp_type='Biso', # FullProf Biso\n", + " adp_iso=0.57511, # FullProf Biso\n", ")\n", "structure.atom_sites.create(\n", - " label='Ba',\n", - " type_symbol='Ba',\n", - " fract_x=0.0,\n", - " fract_y=0.0,\n", - " fract_z=0.0,\n", - " occupancy=0.5,\n", - " adp_type='Biso',\n", - " adp_iso=0.57511,\n", + " label='Ba', # FullProf Atom\n", + " type_symbol='Ba', # FullProf Typ\n", + " fract_x=0.0, # FullProf X\n", + " fract_y=0.0, # FullProf Y\n", + " fract_z=0.0, # FullProf Z\n", + " occupancy=0.5, # FullProf Occ\n", + " adp_type='Biso', # FullProf Biso\n", + " adp_iso=0.57511, # FullProf Biso\n", ")\n", "structure.atom_sites.create(\n", - " label='Co',\n", - " type_symbol='Co',\n", - " fract_x=0.5,\n", - " fract_y=0.5,\n", - " fract_z=0.5,\n", - " occupancy=1.0,\n", - " adp_type='Biso',\n", - " adp_iso=0.26023,\n", + " label='Co', # FullProf Atom\n", + " type_symbol='Co', # FullProf Typ\n", + " fract_x=0.5, # FullProf X\n", + " fract_y=0.5, # FullProf Y\n", + " fract_z=0.5, # FullProf Z\n", + " occupancy=1.0, # FullProf Occ\n", + " adp_type='Biso', # FullProf Biso\n", + " adp_iso=0.26023, # FullProf Biso\n", ")\n", "structure.atom_sites.create(\n", - " label='O',\n", - " type_symbol='O',\n", - " fract_x=0.0,\n", - " fract_y=0.5,\n", - " fract_z=0.5,\n", - " occupancy=0.97856,\n", - " adp_type='Biso',\n", - " adp_iso=1.36662,\n", + " label='O', # FullProf Atom\n", + " type_symbol='O', # FullProf Typ\n", + " fract_x=0.0, # FullProf X\n", + " fract_y=0.5, # FullProf Y\n", + " fract_z=0.5, # FullProf Z\n", + " occupancy=0.97856, # FullProf Occ\n", + " adp_type='Biso', # FullProf Biso\n", + " adp_iso=1.36662, # FullProf Biso\n", ")\n", "\n", "project.structures.add(structure)" @@ -213,8 +212,8 @@ "# Both preferred-orientation parameters, matching FullProf Pref1/Pref2.\n", "experiment.preferred_orientation.create(\n", " phase_id='lbco',\n", - " r=FULLPROF_MARCH_R,\n", - " fraction=FULLPROF_MARCH_FRACTION,\n", + " march_r=FULLPROF_MARCH_R,\n", + " march_random_fract=FULLPROF_MARCH_FRACTION,\n", " index_h=0,\n", " index_k=0,\n", " index_l=1,\n", @@ -264,7 +263,8 @@ "## Fit ed-cryspy to FullProf\n", "\n", "Keep the two March–Dollase parameters fixed at the FullProf values\n", - "(`r = Pref1`, `fraction = Pref2`) and refine only the scale. The scale\n", + "(`march_r = Pref1`, `march_random_fract = Pref2`) and refine only the\n", + "scale. The scale\n", "absorbs CrysPy's constant non-normalisation factor, and the patterns\n", "agree — so ed-cryspy reproduces the FullProf two-parameter\n", "March–Dollase pattern from the known coefficients." diff --git a/docs/docs/verification/pd-neut-cwl_pv-march_lbco.py b/docs/docs/verification/pd-neut-cwl_pv-march_lbco.py index 5d6692235..142f3a3cd 100644 --- a/docs/docs/verification/pd-neut-cwl_pv-march_lbco.py +++ b/docs/docs/verification/pd-neut-cwl_pv-march_lbco.py @@ -1,19 +1,18 @@ # %% [markdown] -# # LBCO — preferred orientation (March–Dollase): ed-cryspy VS FullProf +# # LBCO — preferred orientation (March–Dollase) # # Cross-engine check of the **two-parameter** March–Dollase preferred- # orientation correction. FullProf applies the standard model (its # `.out` reports "March-Dollase model for preferred orientation") with # `Pref1 = 1.2` and `Pref2 = 0.3` along `[0 0 1]`. # -# EasyDiffraction's `r` and `fraction` map to FullProf's `Pref1` and -# `Pref2`. CrysPy parametrises the same model with the **reciprocal** -# coefficient `g1 = 1/r`, so the backend inverts `r`; CrysPy's function -# is also not volume-normalised, which is a constant per-phase factor -# absorbed by the scale (and slightly distorts the `fraction` ↔ `Pref2` -# correspondence). After refining the two preferred-orientation -# parameters and the scale, ed-cryspy reproduces the FullProf pattern -# and recovers `r ≈ 1.2`, `fraction ≈ 0.3`. +# EasyDiffraction's `march_r` and `march_random_fract` map to FullProf's +# `Pref1` and `Pref2`. CrysPy parametrises the same model with the +# **reciprocal** coefficient `g1 = 1/r`, so the backend inverts +# `march_r`; CrysPy's function is also not volume-normalised, which is a +# constant per-phase factor absorbed by the scale. Holding the two +# March–Dollase parameters at the FullProf values and refining only the +# scale, ed-cryspy reproduces the FullProf pattern. # %% import easydiffraction as ed @@ -38,44 +37,44 @@ structure.cell.length_a = 3.890790 # FullProf a structure.atom_sites.create( - label='La', - type_symbol='La', - fract_x=0.0, - fract_y=0.0, - fract_z=0.0, - occupancy=0.5, - adp_type='Biso', - adp_iso=0.57511, + label='La', # FullProf Atom + type_symbol='La', # FullProf Typ + fract_x=0.0, # FullProf X + fract_y=0.0, # FullProf Y + fract_z=0.0, # FullProf Z + occupancy=0.5, # FullProf Occ + adp_type='Biso', # FullProf Biso + adp_iso=0.57511, # FullProf Biso ) structure.atom_sites.create( - label='Ba', - type_symbol='Ba', - fract_x=0.0, - fract_y=0.0, - fract_z=0.0, - occupancy=0.5, - adp_type='Biso', - adp_iso=0.57511, + label='Ba', # FullProf Atom + type_symbol='Ba', # FullProf Typ + fract_x=0.0, # FullProf X + fract_y=0.0, # FullProf Y + fract_z=0.0, # FullProf Z + occupancy=0.5, # FullProf Occ + adp_type='Biso', # FullProf Biso + adp_iso=0.57511, # FullProf Biso ) structure.atom_sites.create( - label='Co', - type_symbol='Co', - fract_x=0.5, - fract_y=0.5, - fract_z=0.5, - occupancy=1.0, - adp_type='Biso', - adp_iso=0.26023, + label='Co', # FullProf Atom + type_symbol='Co', # FullProf Typ + fract_x=0.5, # FullProf X + fract_y=0.5, # FullProf Y + fract_z=0.5, # FullProf Z + occupancy=1.0, # FullProf Occ + adp_type='Biso', # FullProf Biso + adp_iso=0.26023, # FullProf Biso ) structure.atom_sites.create( - label='O', - type_symbol='O', - fract_x=0.0, - fract_y=0.5, - fract_z=0.5, - occupancy=0.97856, - adp_type='Biso', - adp_iso=1.36662, + label='O', # FullProf Atom + type_symbol='O', # FullProf Typ + fract_x=0.0, # FullProf X + fract_y=0.5, # FullProf Y + fract_z=0.5, # FullProf Z + occupancy=0.97856, # FullProf Occ + adp_type='Biso', # FullProf Biso + adp_iso=1.36662, # FullProf Biso ) project.structures.add(structure) @@ -133,8 +132,8 @@ # Both preferred-orientation parameters, matching FullProf Pref1/Pref2. experiment.preferred_orientation.create( phase_id='lbco', - r=FULLPROF_MARCH_R, - fraction=FULLPROF_MARCH_FRACTION, + march_r=FULLPROF_MARCH_R, + march_random_fract=FULLPROF_MARCH_FRACTION, index_h=0, index_k=0, index_l=1, @@ -167,7 +166,8 @@ # ## Fit ed-cryspy to FullProf # # Keep the two March–Dollase parameters fixed at the FullProf values -# (`r = Pref1`, `fraction = Pref2`) and refine only the scale. The scale +# (`march_r = Pref1`, `march_random_fract = Pref2`) and refine only the +# scale. The scale # absorbs CrysPy's constant non-normalisation factor, and the patterns # agree — so ed-cryspy reproduces the FullProf two-parameter # March–Dollase pattern from the known coefficients. diff --git a/src/easydiffraction/analysis/calculators/cryspy.py b/src/easydiffraction/analysis/calculators/cryspy.py index 57f0d237e..403415a89 100644 --- a/src/easydiffraction/analysis/calculators/cryspy.py +++ b/src/easydiffraction/analysis/calculators/cryspy.py @@ -1377,7 +1377,8 @@ def _cif_pref_orient_section( '_texture_k_ax', '_texture_l_ax', ( - f'{phase_label} {_march_r_to_cryspy_g1(row.r.value)} {row.fraction.value} ' + f'{phase_label} {_march_r_to_cryspy_g1(row.march_r.value)} ' + f'{row.march_random_fract.value} ' f'{row.index_h.value} {row.index_k.value} {row.index_l.value}' ), )) @@ -1420,8 +1421,8 @@ def _update_texture_in_cryspy_dict( for index, label in enumerate(cryspy_expt_dict['texture_name']): row = rows.get(str(label)) if row is not None: - cryspy_expt_dict['texture_g1'][index] = _march_r_to_cryspy_g1(row.r.value) - cryspy_expt_dict['texture_g2'][index] = row.fraction.value + cryspy_expt_dict['texture_g1'][index] = _march_r_to_cryspy_g1(row.march_r.value) + cryspy_expt_dict['texture_g2'][index] = row.march_random_fract.value def _cif_background_section( diff --git a/src/easydiffraction/datablocks/experiment/categories/pref_orient/default.py b/src/easydiffraction/datablocks/experiment/categories/pref_orient/default.py index 7a28fb9e6..9c1d74c50 100644 --- a/src/easydiffraction/datablocks/experiment/categories/pref_orient/default.py +++ b/src/easydiffraction/datablocks/experiment/categories/pref_orient/default.py @@ -48,15 +48,15 @@ def __init__(self) -> None: latex_name='Phase', ), ) - self._r = Parameter( - name='r', + self._march_r = Parameter( + name='march_r', description='March coefficient (1 = no preferred orientation).', value_spec=AttributeSpec( default=1.0, validator=RangeValidator(gt=0.0), ), cif_handler=CifHandler( - names=['_pref_orient.r'], + names=['_pref_orient.march_r'], iucr_name='_pd_pref_orient_March_Dollase.r', ), display_handler=DisplayHandler( @@ -103,16 +103,16 @@ def __init__(self) -> None: latex_name='l', ), ) - self._fraction = Parameter( - name='fraction', + self._march_random_fract = Parameter( + name='march_random_fract', description='Random (untextured) fraction; 0 = pure March-Dollase.', value_spec=AttributeSpec( default=0.0, validator=RangeValidator(ge=0.0, le=1.0), ), cif_handler=CifHandler( - names=['_pref_orient.fraction'], - iucr_name='_easydiffraction_pref_orient.fraction', + names=['_pref_orient.march_random_fract'], + iucr_name='_easydiffraction_pref_orient.march_random_fract', ), display_handler=DisplayHandler( display_name='Random fraction', @@ -134,13 +134,13 @@ def phase_id(self, value: str) -> None: self._phase_id.value = value @property - def r(self) -> Parameter: + def march_r(self) -> Parameter: """March coefficient (1 = no preferred orientation).""" - return self._r + return self._march_r - @r.setter - def r(self, value: float) -> None: - self._r.value = value + @march_r.setter + def march_r(self, value: float) -> None: + self._march_r.value = value # Miller indices use the ``index_h``/``index_k``/``index_l`` names # already established by the ``refln`` categories. This also avoids @@ -174,13 +174,13 @@ def index_l(self, value: int) -> None: self._index_l.value = value @property - def fraction(self) -> Parameter: + def march_random_fract(self) -> Parameter: """Random (untextured) fraction; 0 = pure March-Dollase.""" - return self._fraction + return self._march_random_fract - @fraction.setter - def fraction(self, value: float) -> None: - self._fraction.value = value + @march_random_fract.setter + def march_random_fract(self, value: float) -> None: + self._march_random_fract.value = value @PrefOrientFactory.register diff --git a/src/easydiffraction/io/cif/iucr_writer.py b/src/easydiffraction/io/cif/iucr_writer.py index db4fc0640..da31df643 100644 --- a/src/easydiffraction/io/cif/iucr_writer.py +++ b/src/easydiffraction/io/cif/iucr_writer.py @@ -628,17 +628,17 @@ def _write_pref_orient_loop(lines: list[str], experiment: object) -> None: _attribute_value(row, 'index_h'), _attribute_value(row, 'index_k'), _attribute_value(row, 'index_l'), - _attribute_value(row, 'r'), - getattr(_attribute_descriptor(row, 'r'), 'uncertainty', None), + _attribute_value(row, 'march_r'), + getattr(_attribute_descriptor(row, 'march_r'), 'uncertainty', None), ) for index, row in enumerate(rows, start=1) ], ) fraction_rows = [ - (str(index), _attribute_value(row, 'fraction')) + (str(index), _attribute_value(row, 'march_random_fract')) for index, row in enumerate(rows, start=1) - if _attribute_value(row, 'fraction') + if _attribute_value(row, 'march_random_fract') ] if not fraction_rows: return @@ -647,7 +647,7 @@ def _write_pref_orient_loop(lines: list[str], experiment: object) -> None: lines, ( '_easydiffraction_pref_orient.id', - '_easydiffraction_pref_orient.fraction', + '_easydiffraction_pref_orient.march_random_fract', ), fraction_rows, ) diff --git a/tests/unit/easydiffraction/analysis/calculators/test_cryspy.py b/tests/unit/easydiffraction/analysis/calculators/test_cryspy.py index cc5ac2b9a..bfa5c1db8 100644 --- a/tests/unit/easydiffraction/analysis/calculators/test_cryspy.py +++ b/tests/unit/easydiffraction/analysis/calculators/test_cryspy.py @@ -397,7 +397,7 @@ def _bragg_powder_experiment(beam_mode): scattering_type='bragg', ) experiment.preferred_orientation.create( - phase_id='lbco', r=0.5, index_h=0, index_k=0, index_l=1 + phase_id='lbco', march_r=0.5, index_h=0, index_k=0, index_l=1 ) return experiment @@ -435,8 +435,8 @@ def test_update_texture_in_cryspy_dict_patches_g1_and_g2(): import easydiffraction.analysis.calculators.cryspy as MUT experiment = _bragg_powder_experiment('constant wavelength') - experiment.preferred_orientation['lbco'].r = 0.6 - experiment.preferred_orientation['lbco'].fraction = 0.2 + experiment.preferred_orientation['lbco'].march_r = 0.6 + experiment.preferred_orientation['lbco'].march_random_fract = 0.2 cryspy_expt_dict = { 'texture_name': ['lbco'], @@ -477,7 +477,7 @@ def test_invalidate_stale_cache_drops_dict_on_pref_orient_axis_change(): assert combined_name in calc._cryspy_dicts # Value-only edit must NOT invalidate. - experiment.preferred_orientation['lbco'].r = 2.0 + experiment.preferred_orientation['lbco'].march_r = 2.0 calc._invalidate_stale_cache(combined_name, experiment, None) assert combined_name in calc._cryspy_dicts diff --git a/tests/unit/easydiffraction/datablocks/experiment/categories/test_pref_orient.py b/tests/unit/easydiffraction/datablocks/experiment/categories/test_pref_orient.py index 0e7cf31ca..3c509d1c4 100644 --- a/tests/unit/easydiffraction/datablocks/experiment/categories/test_pref_orient.py +++ b/tests/unit/easydiffraction/datablocks/experiment/categories/test_pref_orient.py @@ -12,8 +12,8 @@ def test_pref_orient_defaults_are_noop(): from easydiffraction.datablocks.experiment.categories.pref_orient import PrefOrient po = PrefOrient() - assert po.r.value == 1.0 # March coefficient: no texture - assert po.fraction.value == 0.0 # pure March-Dollase + assert po.march_r.value == 1.0 # March coefficient: no texture + assert po.march_random_fract.value == 0.0 # pure March-Dollase assert (po.index_h.value, po.index_k.value, po.index_l.value) == (0, 0, 1) assert po.phase_id.value == 'Si' @@ -23,15 +23,15 @@ def test_pref_orient_property_setters(): po = PrefOrient() po.phase_id = 'lbco' - po.r = 0.75 - po.fraction = 0.2 + po.march_r = 0.75 + po.march_random_fract = 0.2 po.index_h = 1 po.index_k = 0 po.index_l = 2 assert po.phase_id.value == 'lbco' - assert po.r.value == 0.75 - assert po.fraction.value == 0.2 + assert po.march_r.value == 0.75 + assert po.march_random_fract.value == 0.2 assert (po.index_h.value, po.index_k.value, po.index_l.value) == (1, 0, 2) @@ -42,10 +42,10 @@ def test_pref_orient_r_must_be_positive(monkeypatch): monkeypatch.setattr(Logger, '_reaction', Logger.Reaction.WARN, raising=True) po = PrefOrient() - po.r = 0.0 # gt=0 -> rejected, keeps default - assert po.r.value == 1.0 - po.r = -0.5 - assert po.r.value == 1.0 + po.march_r = 0.0 # gt=0 -> rejected, keeps default + assert po.march_r.value == 1.0 + po.march_r = -0.5 + assert po.march_r.value == 1.0 def test_pref_orient_fraction_within_unit_interval(monkeypatch): @@ -55,29 +55,29 @@ def test_pref_orient_fraction_within_unit_interval(monkeypatch): monkeypatch.setattr(Logger, '_reaction', Logger.Reaction.WARN, raising=True) po = PrefOrient() - po.fraction = 1.5 # le=1 -> rejected - assert po.fraction.value == 0.0 - po.fraction = -0.1 # ge=0 -> rejected - assert po.fraction.value == 0.0 - po.fraction = 0.5 # valid - assert po.fraction.value == 0.5 + po.march_random_fract = 1.5 # le=1 -> rejected + assert po.march_random_fract.value == 0.0 + po.march_random_fract = -0.1 # ge=0 -> rejected + assert po.march_random_fract.value == 0.0 + po.march_random_fract = 0.5 # valid + assert po.march_random_fract.value == 0.5 def test_pref_orients_create_and_default_cif(): from easydiffraction.datablocks.experiment.categories.pref_orient import PrefOrients coll = PrefOrients() - coll.create(phase_id='lbco', r=0.8, index_h=0, index_k=0, index_l=1) + coll.create(phase_id='lbco', march_r=0.8, index_h=0, index_k=0, index_l=1) cif = coll.as_cif assert 'loop_' in cif for tag in ( '_pref_orient.phase_id', - '_pref_orient.r', + '_pref_orient.march_r', '_pref_orient.index_h', '_pref_orient.index_k', '_pref_orient.index_l', - '_pref_orient.fraction', + '_pref_orient.march_random_fract', ): assert tag in cif @@ -111,7 +111,9 @@ def test_preferred_orientation_exposed_on_bragg_powder_only(): scattering_type='bragg', ) assert hasattr(bragg, 'preferred_orientation') - bragg.preferred_orientation.create(phase_id='bragg', r=0.5, index_h=0, index_k=0, index_l=1) + bragg.preferred_orientation.create( + phase_id='bragg', march_r=0.5, index_h=0, index_k=0, index_l=1 + ) # The collection is parent-linked to the experiment, enabling dirty # tracking on row changes. assert bragg.preferred_orientation._parent is bragg diff --git a/tests/unit/easydiffraction/io/cif/test_iucr_writer.py b/tests/unit/easydiffraction/io/cif/test_iucr_writer.py index 9a03a62b4..ccffa8428 100644 --- a/tests/unit/easydiffraction/io/cif/test_iucr_writer.py +++ b/tests/unit/easydiffraction/io/cif/test_iucr_writer.py @@ -579,7 +579,7 @@ def test_write_pref_orient_loop_standard_and_fraction(): from easydiffraction.io.cif import iucr_writer as W coll = PrefOrients() - coll.create(phase_id='lbco', r=0.75, index_h=0, index_k=0, index_l=1) # fraction=0 + coll.create(phase_id='lbco', march_r=0.75, index_h=0, index_k=0, index_l=1) # fraction=0 experiment = SimpleNamespace(preferred_orientation=coll) lines: list[str] = [] @@ -588,12 +588,12 @@ def test_write_pref_orient_loop_standard_and_fraction(): assert '_pd_pref_orient_March_Dollase.r' in text assert '_pd_pref_orient_March_Dollase.index_l' in text # fraction == 0 -> the non-standard namespaced item is omitted - assert '_easydiffraction_pref_orient.fraction' not in text + assert '_easydiffraction_pref_orient.march_random_fract' not in text - coll['lbco'].fraction = 0.3 + coll['lbco'].march_random_fract = 0.3 lines2: list[str] = [] W._write_pref_orient_loop(lines2, experiment) - assert '_easydiffraction_pref_orient.fraction' in '\n'.join(lines2) + assert '_easydiffraction_pref_orient.march_random_fract' in '\n'.join(lines2) def test_write_pref_orient_loop_empty_is_noop(): From d995232951b784c45d716831ce6782c60b6e278a Mon Sep 17 00:00:00 2001 From: Andrew Sazonov Date: Thu, 11 Jun 2026 22:24:32 +0200 Subject: [PATCH 27/35] Update notebook --- .../verification/pd-neut-cwl_pv-march_lbco.py | 44 ++++++------------- 1 file changed, 13 insertions(+), 31 deletions(-) diff --git a/docs/docs/verification/pd-neut-cwl_pv-march_lbco.py b/docs/docs/verification/pd-neut-cwl_pv-march_lbco.py index 142f3a3cd..efdd810a4 100644 --- a/docs/docs/verification/pd-neut-cwl_pv-march_lbco.py +++ b/docs/docs/verification/pd-neut-cwl_pv-march_lbco.py @@ -2,17 +2,8 @@ # # LBCO — preferred orientation (March–Dollase) # # Cross-engine check of the **two-parameter** March–Dollase preferred- -# orientation correction. FullProf applies the standard model (its -# `.out` reports "March-Dollase model for preferred orientation") with +# orientation correction. FullProf applies the standard model for with # `Pref1 = 1.2` and `Pref2 = 0.3` along `[0 0 1]`. -# -# EasyDiffraction's `march_r` and `march_random_fract` map to FullProf's -# `Pref1` and `Pref2`. CrysPy parametrises the same model with the -# **reciprocal** coefficient `g1 = 1/r`, so the backend inverts -# `march_r`; CrysPy's function is also not volume-normalised, which is a -# constant per-phase factor absorbed by the scale. Holding the two -# March–Dollase parameters at the FullProf values and refining only the -# scale, ed-cryspy reproduces the FullProf pattern. # %% import easydiffraction as ed @@ -94,8 +85,11 @@ FULLPROF_W = 0.121125 # FullProf W FULLPROF_X = 0.0 # FullProf X FULLPROF_Y = 0.083038 # FullProf Y -FULLPROF_MARCH_R = 1.2 # FullProf Pref1 (March coefficient) -FULLPROF_MARCH_FRACTION = 0.3 # FullProf Pref2 (random fraction) +FULLPROF_PREF_1 = 1.2 # FullProf Pref1 +FULLPROF_PREF_2 = 0.3 # FullProf Pref2 +FULLPROF_PR_1 = 0 # FullProf Pr1 +FULLPROF_PR_2 = 0 # FullProf Pr2 +FULLPROF_PR_3 = 1 # FullProf Pr3 x, calc_fullprof = verify.load_fullprof_calc_profile( FULLPROF_PROJECT_DIR, @@ -129,28 +123,23 @@ experiment.peak.broad_lorentz_x = FULLPROF_X experiment.peak.broad_lorentz_y = FULLPROF_Y -# Both preferred-orientation parameters, matching FullProf Pref1/Pref2. experiment.preferred_orientation.create( phase_id='lbco', - march_r=FULLPROF_MARCH_R, - march_random_fract=FULLPROF_MARCH_FRACTION, - index_h=0, - index_k=0, - index_l=1, + march_r=FULLPROF_PREF_1, + march_random_fract=FULLPROF_PREF_2, + index_h=FULLPROF_PR_1, + index_k=FULLPROF_PR_2, + index_l=FULLPROF_PR_3, ) project.experiments.add(experiment) -experiment.calculator.type = 'cryspy' # %% [markdown] # ## ed-cryspy VS FullProf -# -# With FullProf's scale, the calculated pattern shows an overall offset: -# CrysPy's texture function is not volume-normalised, so the textured -# total intensity differs by a constant per-phase factor. The peak -# *shape* already matches; the scale is reconciled by the fit below. # %% +experiment.calculator.type = 'cryspy' + project.analysis.calculate() calc_ed_cryspy = experiment.data.intensity_calc @@ -164,13 +153,6 @@ # %% [markdown] # ## Fit ed-cryspy to FullProf -# -# Keep the two March–Dollase parameters fixed at the FullProf values -# (`march_r = Pref1`, `march_random_fract = Pref2`) and refine only the -# scale. The scale -# absorbs CrysPy's constant non-normalisation factor, and the patterns -# agree — so ed-cryspy reproduces the FullProf two-parameter -# March–Dollase pattern from the known coefficients. # %% experiment.linked_phases['lbco'].scale.free = True From 610310721667963149dd3737c7baa808388e359e Mon Sep 17 00:00:00 2001 From: Andrew Sazonov Date: Thu, 11 Jun 2026 22:35:44 +0200 Subject: [PATCH 28/35] Document preferred orientation in user guide and verification TOC --- .../analysis-workflow/experiment.md | 23 +++++++- docs/docs/user-guide/parameters.md | 11 ++++ .../docs/user-guide/parameters/pref_orient.md | 55 +++++++++++++++++++ docs/docs/verification/index.md | 5 ++ .../pd-neut-cwl_pv-march_lbco.ipynb | 54 ++++++------------ .../verification/pd-neut-cwl_pv-march_lbco.py | 2 +- docs/mkdocs.yml | 1 + 7 files changed, 113 insertions(+), 38 deletions(-) create mode 100644 docs/docs/user-guide/parameters/pref_orient.md diff --git a/docs/docs/user-guide/analysis-workflow/experiment.md b/docs/docs/user-guide/analysis-workflow/experiment.md index f634b71f7..41cfccd7f 100644 --- a/docs/docs/user-guide/analysis-workflow/experiment.md +++ b/docs/docs/user-guide/analysis-workflow/experiment.md @@ -281,7 +281,28 @@ project.experiments['hrpt'].background.auto_estimate(n_points=10) project.experiments['hrpt'].linked_phases.create(id='lbco', scale=10.0) ``` -### 6. Measured Data Category { #measured-data-category } +### 6. Preferred Orientation Category { #preferred-orientation-category } + +For textured powders, add a March–Dollase preferred-orientation +correction per phase. Set the March coefficient `march_r` (1 = no +texture, <1 platy/disk, >1 needle), the texture direction +(`index_h`, `index_k`, `index_l`), and optionally the random untextured +fraction `march_random_fract`: + +```python +# Add a March–Dollase preferred-orientation correction for a phase +project.experiments['hrpt'].preferred_orientation.create( + phase_id='lbco', march_r=1.2, index_h=0, index_k=0, index_l=1 +) +``` + +This is a constant-wavelength Bragg powder correction, available on the +`cryspy` engine. The defaults (`march_r=1`, `march_random_fract=0`) +apply no texture, so it has no effect until you set them. See the +[preferred-orientation parameters](../parameters/pref_orient.md) for +details. + +### 7. Measured Data Category { #measured-data-category } If you do not have a CIF file for your experiment, you can load measured data from a file in a supported format. The measured data will be diff --git a/docs/docs/user-guide/parameters.md b/docs/docs/user-guide/parameters.md index b97ff9e08..f972b6a58 100644 --- a/docs/docs/user-guide/parameters.md +++ b/docs/docs/user-guide/parameters.md @@ -176,6 +176,11 @@ EasyDiffraction. | | :material-format-superscript: [order][background] | background.order | | | :material-arrow-collapse-up: [coef][background] | background.coef | | :material-puzzle: [linked_phases][linked_phases] | :material-scale: [scale][linked_phases] | linked_phases['ID'].scale | + | :material-compass-outline: [pref_orient][pref_orient] | :material-chart-bell-curve-cumulative: [march_r][pref_orient] | preferred_orientation['ID'].march_r | + | | :material-shuffle-variant: [march_random_fract][pref_orient] | preferred_orientation['ID'].march_random_fract | + | | :material-axis-arrow: [index_h][pref_orient] | preferred_orientation['ID'].index_h | + | | :material-axis-arrow: [index_k][pref_orient] | preferred_orientation['ID'].index_k | + | | :material-axis-arrow: [index_l][pref_orient] | preferred_orientation['ID'].index_l | === "CIF name for serialization" @@ -186,6 +191,11 @@ EasyDiffraction. | | :material-format-superscript: [order][background] | \_pd_background.chebyshev_order | [pdCIF][0]{:.label-cif} | | | :material-arrow-collapse-up: [coef][background] | \_pd_background.chebyshev_coef | [pdCIF][0]{:.label-cif} | | :material-puzzle: [linked_phases][linked_phases] | :material-scale: [scale][linked_phases] | \_pd_phase_block.scale | [pdCIF][0]{:.label-cif} | + | :material-compass-outline: [pref_orient][pref_orient] | :material-chart-bell-curve-cumulative: [march_r][pref_orient] | \_pref_orient.march_r | [easydiffractionCIF][0]{:.label-cif} | + | | :material-shuffle-variant: [march_random_fract][pref_orient] | \_pref_orient.march_random_fract | [easydiffractionCIF][0]{:.label-cif} | + | | :material-axis-arrow: [index_h][pref_orient] | \_pref_orient.index_h | [easydiffractionCIF][0]{:.label-cif} | + | | :material-axis-arrow: [index_k][pref_orient] | \_pref_orient.index_k | [easydiffractionCIF][0]{:.label-cif} | + | | :material-axis-arrow: [index_l][pref_orient] | \_pref_orient.index_l | [easydiffractionCIF][0]{:.label-cif} | [pd-neut-cwl][3]{:.label-experiment} [pd-xray][3]{:.label-experiment} @@ -289,4 +299,5 @@ EasyDiffraction. [peak]: parameters/peak.md [background]: parameters/background.md [linked_phases]: parameters/linked_phases.md +[pref_orient]: parameters/pref_orient.md diff --git a/docs/docs/user-guide/parameters/pref_orient.md b/docs/docs/user-guide/parameters/pref_orient.md new file mode 100644 index 000000000..17f23c2da --- /dev/null +++ b/docs/docs/user-guide/parameters/pref_orient.md @@ -0,0 +1,55 @@ +[pdCIF][2]{:.label-cif} + +# \_pref_orient + +Per-phase **preferred-orientation** (texture) correction using the +March–Dollase model. Powder samples whose crystallites pack with a +preferred orientation (platy crystals lying flat, needles aligning) show +Bragg intensities that deviate from the ideal random-powder average; +this correction restores them. + +Each row corrects one linked phase along one crystallographic direction. +The defaults (`march_r = 1`, `march_random_fract = 0`) are a +mathematical no-op, so a freshly added row applies no texture until you +change them. Supported on the **CrysPy** engine for constant-wavelength +Bragg powder experiments. + +See the +[IUCr powder dictionary](https://www.iucr.org/resources/cif/dictionaries/browse/cif_pd) +(`pd_pref_orient_March_Dollase`) for the standard data names. + +## \_pref_orient.phase_id + +Identifier of the linked phase corrected by this row. + +## \_pref_orient.march_r + +March coefficient `r`. `r = 1` means no preferred orientation; `r < 1` +describes disk-/plate-like crystallites and `r > 1` needle-like ones. +This is the standard IUCr/FullProf/GSAS coefficient (serialised as +`_pd_pref_orient_March_Dollase.r`); the CrysPy backend stores its +reciprocal internally. + +## \_pref_orient.index_h + +Texture-axis Miller index _h_. + +## \_pref_orient.index_k + +Texture-axis Miller index _k_. + +## \_pref_orient.index_l + +Texture-axis Miller index _l_. + +## \_pref_orient.march_random_fract + +Random (untextured) fraction of crystallites; `0` is pure March–Dollase. +There is no IUCr standard name for this quantity, so it is serialised +under the EasyDiffraction custom dictionary. + + +[0]: # +[1]: https://www.iucr.org/resources/cif/dictionaries/browse/cif_core +[2]: https://www.iucr.org/resources/cif/dictionaries/browse/cif_pd + diff --git a/docs/docs/verification/index.md b/docs/docs/verification/index.md index f26badd1d..9c03bbff6 100644 --- a/docs/docs/verification/index.md +++ b/docs/docs/verification/index.md @@ -36,6 +36,11 @@ and so on. The list below notes only what is specific to each page. - [LBCO `pd-neut-cwl`](pd-neut-cwl_pv_lbco.ipynb) – Lanthanum barium cobaltate (La₀.₅Ba₀.₅CoO₃, _Pm-3m_); pseudo-Voigt, no asymmetry. +- [LBCO `pd-neut-cwl` (preferred orientation)](pd-neut-cwl_pv-march_lbco.ipynb) + – Lanthanum barium cobaltate (La₀.₅Ba₀.₅CoO₃, _Pm-3m_); two-parameter + March–Dollase preferred orientation (`march_r`, `march_random_fract`) + along [0 0 1]. cryspy only; refines the scale to absorb cryspy's + reciprocal, non-normalised texture convention. - [PbSO₄ `pd-neut-cwl` (pseudo-Voigt)](pd-neut-cwl_pv_pbso4.ipynb) – Anglesite (PbSO₄, _Pnma_); pseudo-Voigt, no asymmetry. - [PbSO₄ `pd-neut-cwl` (empirical asymmetry)](pd-neut-cwl_pv-asym_empir_pbso4.ipynb) diff --git a/docs/docs/verification/pd-neut-cwl_pv-march_lbco.ipynb b/docs/docs/verification/pd-neut-cwl_pv-march_lbco.ipynb index 57ab6b11c..489132173 100644 --- a/docs/docs/verification/pd-neut-cwl_pv-march_lbco.ipynb +++ b/docs/docs/verification/pd-neut-cwl_pv-march_lbco.ipynb @@ -24,20 +24,11 @@ "id": "1", "metadata": {}, "source": [ - "# LBCO — preferred orientation (March–Dollase): ed-cryspy VS FullProf\n", + "# LBCO — preferred orientation (March–Dollase)\n", "\n", "Cross-engine check of the **two-parameter** March–Dollase preferred-\n", - "orientation correction. FullProf applies the standard model (its\n", - "`.out` reports \"March-Dollase model for preferred orientation\") with\n", - "`Pref1 = 1.2` and `Pref2 = 0.3` along `[0 0 1]`.\n", - "\n", - "EasyDiffraction's `march_r` and `march_random_fract` map to FullProf's\n", - "`Pref1` and `Pref2`. CrysPy parametrises the same model with the\n", - "**reciprocal** coefficient `g1 = 1/r`, so the backend inverts\n", - "`march_r`; CrysPy's function is also not volume-normalised, which is a\n", - "constant per-phase factor absorbed by the scale. Holding the two\n", - "March–Dollase parameters at the FullProf values and refining only the\n", - "scale, ed-cryspy reproduces the FullProf pattern." + "orientation correction. FullProf applies the standard model for with\n", + "`Pref1 = 1.2` and `Pref2 = 0.3` along `[0 0 1]`." ] }, { @@ -162,8 +153,11 @@ "FULLPROF_W = 0.121125 # FullProf W\n", "FULLPROF_X = 0.0 # FullProf X\n", "FULLPROF_Y = 0.083038 # FullProf Y\n", - "FULLPROF_MARCH_R = 1.2 # FullProf Pref1 (March coefficient)\n", - "FULLPROF_MARCH_FRACTION = 0.3 # FullProf Pref2 (random fraction)\n", + "FULLPROF_PREF_1 = 1.2 # FullProf Pref1\n", + "FULLPROF_PREF_2 = 0.3 # FullProf Pref2\n", + "FULLPROF_PR_1 = 0 # FullProf Pr1\n", + "FULLPROF_PR_2 = 0 # FullProf Pr2\n", + "FULLPROF_PR_3 = 1 # FullProf Pr3\n", "\n", "x, calc_fullprof = verify.load_fullprof_calc_profile(\n", " FULLPROF_PROJECT_DIR,\n", @@ -209,18 +203,16 @@ "experiment.peak.broad_lorentz_x = FULLPROF_X\n", "experiment.peak.broad_lorentz_y = FULLPROF_Y\n", "\n", - "# Both preferred-orientation parameters, matching FullProf Pref1/Pref2.\n", "experiment.preferred_orientation.create(\n", " phase_id='lbco',\n", - " march_r=FULLPROF_MARCH_R,\n", - " march_random_fract=FULLPROF_MARCH_FRACTION,\n", - " index_h=0,\n", - " index_k=0,\n", - " index_l=1,\n", + " march_r=FULLPROF_PREF_1,\n", + " march_random_fract=FULLPROF_PREF_2,\n", + " index_h=FULLPROF_PR_1,\n", + " index_k=FULLPROF_PR_2,\n", + " index_l=FULLPROF_PR_3,\n", ")\n", "\n", - "project.experiments.add(experiment)\n", - "experiment.calculator.type = 'cryspy'" + "project.experiments.add(experiment)" ] }, { @@ -228,12 +220,7 @@ "id": "11", "metadata": {}, "source": [ - "## ed-cryspy VS FullProf\n", - "\n", - "With FullProf's scale, the calculated pattern shows an overall offset:\n", - "CrysPy's texture function is not volume-normalised, so the textured\n", - "total intensity differs by a constant per-phase factor. The peak\n", - "*shape* already matches; the scale is reconciled by the fit below." + "## ed-cryspy VS FullProf" ] }, { @@ -243,6 +230,8 @@ "metadata": {}, "outputs": [], "source": [ + "experiment.calculator.type = 'cryspy'\n", + "\n", "project.analysis.calculate()\n", "calc_ed_cryspy = experiment.data.intensity_calc\n", "\n", @@ -260,14 +249,7 @@ "id": "13", "metadata": {}, "source": [ - "## Fit ed-cryspy to FullProf\n", - "\n", - "Keep the two March–Dollase parameters fixed at the FullProf values\n", - "(`march_r = Pref1`, `march_random_fract = Pref2`) and refine only the\n", - "scale. The scale\n", - "absorbs CrysPy's constant non-normalisation factor, and the patterns\n", - "agree — so ed-cryspy reproduces the FullProf two-parameter\n", - "March–Dollase pattern from the known coefficients." + "## Fit ed-cryspy to FullProf" ] }, { diff --git a/docs/docs/verification/pd-neut-cwl_pv-march_lbco.py b/docs/docs/verification/pd-neut-cwl_pv-march_lbco.py index efdd810a4..9e695a7a8 100644 --- a/docs/docs/verification/pd-neut-cwl_pv-march_lbco.py +++ b/docs/docs/verification/pd-neut-cwl_pv-march_lbco.py @@ -2,7 +2,7 @@ # # LBCO — preferred orientation (March–Dollase) # # Cross-engine check of the **two-parameter** March–Dollase preferred- -# orientation correction. FullProf applies the standard model for with +# orientation correction. FullProf applies the standard model for with # `Pref1 = 1.2` and `Pref2 = 0.3` along `[0 0 1]`. # %% diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index 29192b99d..54b3e7b2e 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -257,6 +257,7 @@ nav: - Verification: verification/index.md - Powder, neutron, constant wavelength: - LBCO: verification/pd-neut-cwl_pv_lbco.ipynb + - LBCO (preferred orientation): verification/pd-neut-cwl_pv-march_lbco.ipynb - PbSO4 (pseudo-Voigt): verification/pd-neut-cwl_pv_pbso4.ipynb - PbSO4 (empirical asymmetry): verification/pd-neut-cwl_pv-asym_empir_pbso4.ipynb - LaB6 (SyCos/SySin): verification/pd-neut-cwl_tch-fcj-noabs-nosldl_lab6.ipynb From 238e3719ae5035320b6051f519c1957f8fe6debd Mon Sep 17 00:00:00 2001 From: Andrew Sazonov Date: Thu, 11 Jun 2026 22:36:11 +0200 Subject: [PATCH 29/35] Apply docstring formatting to _march_r_to_cryspy_g1 --- src/easydiffraction/analysis/calculators/cryspy.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/easydiffraction/analysis/calculators/cryspy.py b/src/easydiffraction/analysis/calculators/cryspy.py index 403415a89..eb36ac1eb 100644 --- a/src/easydiffraction/analysis/calculators/cryspy.py +++ b/src/easydiffraction/analysis/calculators/cryspy.py @@ -1385,12 +1385,13 @@ def _cif_pref_orient_section( def _march_r_to_cryspy_g1(r: float) -> float: - """Convert the IUCr/FullProf March coefficient to cryspy ``g_1``. + """ + Convert the IUCr/FullProf March coefficient to cryspy ``g_1``. CrysPy's "Modified March" parametrises March-Dollase with the **reciprocal** coefficient ``g_1 = 1/r`` (verified against FullProf). The user-facing ``r`` follows the standard - IUCr/FullProf/GSAS convention (1 = none, `<1` disk, `>1` needle) + IUCr/FullProf/GSAS convention (1 = none, ``<1`` disk, ``>1`` needle) and is inverted before it reaches the backend. CrysPy's factor is also not volume-normalised, but that is a constant per-phase factor absorbed by the scale (it slightly distorts the ``fraction``/``g_2`` From 67f9c9d0c8c9e2775f74d5d3f9046f9c36fdf026 Mon Sep 17 00:00:00 2001 From: Andrew Sazonov Date: Thu, 11 Jun 2026 23:04:16 +0200 Subject: [PATCH 30/35] Refine preferred-orientation parameters in march-lbco verification --- docs/docs/verification/pd-neut-cwl_pv-march_lbco.ipynb | 9 ++++++++- docs/docs/verification/pd-neut-cwl_pv-march_lbco.py | 7 +++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/docs/docs/verification/pd-neut-cwl_pv-march_lbco.ipynb b/docs/docs/verification/pd-neut-cwl_pv-march_lbco.ipynb index 489132173..ca5dce845 100644 --- a/docs/docs/verification/pd-neut-cwl_pv-march_lbco.ipynb +++ b/docs/docs/verification/pd-neut-cwl_pv-march_lbco.ipynb @@ -249,7 +249,12 @@ "id": "13", "metadata": {}, "source": [ - "## Fit ed-cryspy to FullProf" + "## Fit ed-cryspy to FullProf\n", + "\n", + "Free the two March–Dollase parameters (`march_r`, `march_random_fract`)\n", + "and the scale, then refine. Starting from the FullProf values,\n", + "ed-cryspy converges back to `march_r ≈ Pref1` and\n", + "`march_random_fract ≈ Pref2`, and the patterns agree." ] }, { @@ -260,6 +265,8 @@ "outputs": [], "source": [ "experiment.linked_phases['lbco'].scale.free = True\n", + "experiment.preferred_orientation['lbco'].march_r.free = True\n", + "experiment.preferred_orientation['lbco'].march_random_fract.free = True\n", "\n", "project.analysis.fit()\n", "project.display.fit.results()\n", diff --git a/docs/docs/verification/pd-neut-cwl_pv-march_lbco.py b/docs/docs/verification/pd-neut-cwl_pv-march_lbco.py index 9e695a7a8..59b96accc 100644 --- a/docs/docs/verification/pd-neut-cwl_pv-march_lbco.py +++ b/docs/docs/verification/pd-neut-cwl_pv-march_lbco.py @@ -153,9 +153,16 @@ # %% [markdown] # ## Fit ed-cryspy to FullProf +# +# Free the two March–Dollase parameters (`march_r`, `march_random_fract`) +# and the scale, then refine. Starting from the FullProf values, +# ed-cryspy converges back to `march_r ≈ Pref1` and +# `march_random_fract ≈ Pref2`, and the patterns agree. # %% experiment.linked_phases['lbco'].scale.free = True +experiment.preferred_orientation['lbco'].march_r.free = True +experiment.preferred_orientation['lbco'].march_random_fract.free = True project.analysis.fit() project.display.fit.results() From 5a04caec3b85472ffd8e8c38d99317e5506e6e4b Mon Sep 17 00:00:00 2001 From: Andrew Sazonov Date: Thu, 11 Jun 2026 23:05:49 +0200 Subject: [PATCH 31/35] Document cryspy March-Dollase convention in march-lbco notebook --- .../pd-neut-cwl_pv-march_lbco.ipynb | 29 +++++++++++++++++-- .../verification/pd-neut-cwl_pv-march_lbco.py | 22 +++++++++++++- 2 files changed, 48 insertions(+), 3 deletions(-) diff --git a/docs/docs/verification/pd-neut-cwl_pv-march_lbco.ipynb b/docs/docs/verification/pd-neut-cwl_pv-march_lbco.ipynb index ca5dce845..9157f5c5c 100644 --- a/docs/docs/verification/pd-neut-cwl_pv-march_lbco.ipynb +++ b/docs/docs/verification/pd-neut-cwl_pv-march_lbco.ipynb @@ -27,8 +27,19 @@ "# LBCO — preferred orientation (March–Dollase)\n", "\n", "Cross-engine check of the **two-parameter** March–Dollase preferred-\n", - "orientation correction. FullProf applies the standard model for with\n", - "`Pref1 = 1.2` and `Pref2 = 0.3` along `[0 0 1]`." + "orientation correction. FullProf applies the standard model (its\n", + "`.out` reports \"March-Dollase model for preferred orientation\") with\n", + "`Pref1 = 1.2` and `Pref2 = 0.3` along `[0 0 1]`.\n", + "\n", + "EasyDiffraction exposes the standard `march_r` (= `Pref1`) and\n", + "`march_random_fract` (= `Pref2`). CrysPy parametrises the **same**\n", + "model but with the **reciprocal** coefficient `g1 = 1/r` and an\n", + "overall factor that is not volume-normalised; the backend inverts\n", + "`march_r` automatically, and the constant non-normalisation factor is\n", + "absorbed by the scale (so the as-calculated pattern below shows an\n", + "overall offset before fitting). After refining the two March–Dollase\n", + "parameters and the scale, ed-cryspy recovers `march_r ≈ 1.2` and\n", + "`march_random_fract ≈ 0.3` and the patterns agree." ] }, { @@ -304,6 +315,20 @@ " ],\n", ")" ] + }, + { + "cell_type": "markdown", + "id": "17", + "metadata": {}, + "source": [ + "The refined `march_r` returns to the FullProf `Pref1 = 1.2` and\n", + "`march_random_fract` to `Pref2 = 0.3` (the latter only approximately,\n", + "because CrysPy's non-normalised factor makes the random-fraction\n", + "correspondence slightly non-linear), with all closeness metrics within\n", + "tolerance. ed-cryspy therefore reproduces the FullProf two-parameter\n", + "March–Dollase correction once its reciprocal/unnormalised convention is\n", + "accounted for by the backend mapping and the scale." + ] } ], "metadata": { diff --git a/docs/docs/verification/pd-neut-cwl_pv-march_lbco.py b/docs/docs/verification/pd-neut-cwl_pv-march_lbco.py index 59b96accc..6eeb47c94 100644 --- a/docs/docs/verification/pd-neut-cwl_pv-march_lbco.py +++ b/docs/docs/verification/pd-neut-cwl_pv-march_lbco.py @@ -2,8 +2,19 @@ # # LBCO — preferred orientation (March–Dollase) # # Cross-engine check of the **two-parameter** March–Dollase preferred- -# orientation correction. FullProf applies the standard model for with +# orientation correction. FullProf applies the standard model (its +# `.out` reports "March-Dollase model for preferred orientation") with # `Pref1 = 1.2` and `Pref2 = 0.3` along `[0 0 1]`. +# +# EasyDiffraction exposes the standard `march_r` (= `Pref1`) and +# `march_random_fract` (= `Pref2`). CrysPy parametrises the **same** +# model but with the **reciprocal** coefficient `g1 = 1/r` and an +# overall factor that is not volume-normalised; the backend inverts +# `march_r` automatically, and the constant non-normalisation factor is +# absorbed by the scale (so the as-calculated pattern below shows an +# overall offset before fitting). After refining the two March–Dollase +# parameters and the scale, ed-cryspy recovers `march_r ≈ 1.2` and +# `march_random_fract ≈ 0.3` and the patterns agree. # %% import easydiffraction as ed @@ -187,3 +198,12 @@ ('cryspy refined vs FullProf', calc_fullprof, calc_ed_cryspy_refined), ], ) + +# %% [markdown] +# The refined `march_r` returns to the FullProf `Pref1 = 1.2` and +# `march_random_fract` to `Pref2 = 0.3` (the latter only approximately, +# because CrysPy's non-normalised factor makes the random-fraction +# correspondence slightly non-linear), with all closeness metrics within +# tolerance. ed-cryspy therefore reproduces the FullProf two-parameter +# March–Dollase correction once its reciprocal/unnormalised convention is +# accounted for by the backend mapping and the scale. From eda72b251a332c35c078f66fb1d8a4173b4a446f Mon Sep 17 00:00:00 2001 From: Andrew Sazonov Date: Thu, 11 Jun 2026 23:07:12 +0200 Subject: [PATCH 32/35] Fix ADR pass-through pseudocode to show 1/r and label matching --- .../accepted/preferred-orientation-category.md | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/docs/dev/adrs/accepted/preferred-orientation-category.md b/docs/dev/adrs/accepted/preferred-orientation-category.md index fcb27735b..cf07c156d 100644 --- a/docs/dev/adrs/accepted/preferred-orientation-category.md +++ b/docs/dev/adrs/accepted/preferred-orientation-category.md @@ -341,12 +341,19 @@ Alternatives Considered. ```python if 'texture_g1' in cryspy_expt_dict: - for i, po in enumerate(experiment.preferred_orientation): - cryspy_expt_dict['texture_g1'][i] = po.march_r.value - cryspy_expt_dict['texture_g2'][i] = po.march_random_fract.value + rows = {po.phase_id.value: po for po in experiment.preferred_orientation} + for i, label in enumerate(cryspy_expt_dict['texture_name']): + po = rows.get(str(label)) + if po is not None: + # March coefficient is inverted to CrysPy's reciprocal g_1. + cryspy_expt_dict['texture_g1'][i] = _march_r_to_cryspy_g1(po.march_r.value) + cryspy_expt_dict['texture_g2'][i] = po.march_random_fract.value ``` - Only `march_r` and `march_random_fract` **values** are patched. + Each `texture_*` row is matched to its `pref_orient` row by phase + label (not row order), and `march_r` is inverted to CrysPy's + reciprocal `g_1 = 1/r` (Decision 6). Only `march_r` and + `march_random_fract` **values** are patched. `index_h`/`index_k`/`index_l` are fixed descriptors (never refined), so `texture_axis` is never patched here. `march_r.free`/`march_random_fract.free` are **not** pushed into From aa72202552ffc1bd0a1f2aa288517794e417fa98 Mon Sep 17 00:00:00 2001 From: Andrew Sazonov Date: Thu, 11 Jun 2026 23:07:13 +0200 Subject: [PATCH 33/35] Update plan create example to march_r/march_random_fract --- docs/dev/plans/preferred-orientation-category.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/dev/plans/preferred-orientation-category.md b/docs/dev/plans/preferred-orientation-category.md index 15151cf67..9f34bcc6f 100644 --- a/docs/dev/plans/preferred-orientation-category.md +++ b/docs/dev/plans/preferred-orientation-category.md @@ -249,7 +249,7 @@ CrysPy is already a dependency; no `pyproject.toml`/`pixi.toml`/ `docs/docs/verification/fullprof/pd-neut-cwl_pv-march_lbco/`. 2. Add `docs/docs/verification/pd-neut-cwl_pv-march_lbco.py` building the same LBCO model, setting - `expt.preferred_orientation.create(phase_id='lbco', r=, index_h=, index_k=, index_l=)`, + `expt.preferred_orientation.create(phase_id='lbco', march_r=, march_random_fract=, index_h=, index_k=, index_l=)`, and overlaying CrysPy vs FullProf. Compare CrysPy-only (no CrysFML column, since PO is CrysPy-only). Add a markdown cell explaining the CrysPy formula difference (link the upstream issue): expect agreement From 7cec05ade0eb35549c329292d6617e36822c7870 Mon Sep 17 00:00:00 2001 From: Andrew Sazonov Date: Thu, 11 Jun 2026 23:12:03 +0200 Subject: [PATCH 34/35] Add preferred-orientation CIF round-trip test --- .../experiment/categories/test_pref_orient.py | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/tests/unit/easydiffraction/datablocks/experiment/categories/test_pref_orient.py b/tests/unit/easydiffraction/datablocks/experiment/categories/test_pref_orient.py index 3c509d1c4..64b123bed 100644 --- a/tests/unit/easydiffraction/datablocks/experiment/categories/test_pref_orient.py +++ b/tests/unit/easydiffraction/datablocks/experiment/categories/test_pref_orient.py @@ -126,3 +126,30 @@ def test_preferred_orientation_exposed_on_bragg_powder_only(): scattering_type='total', ) assert not hasattr(total, 'preferred_orientation') + + +def test_pref_orient_cif_round_trip(): + from easydiffraction import ExperimentFactory + + experiment = ExperimentFactory.from_scratch( + name='lbco', + sample_form='powder', + beam_mode='constant wavelength', + radiation_probe='neutron', + scattering_type='bragg', + ) + experiment.preferred_orientation.create( + phase_id='lbco', + march_r=0.75, + march_random_fract=0.2, + index_h=1, + index_k=0, + index_l=2, + ) + + restored = ExperimentFactory.from_cif_str(experiment.as_cif) + + row = restored.preferred_orientation['lbco'] + assert row.march_r.value == 0.75 + assert row.march_random_fract.value == 0.2 + assert (row.index_h.value, row.index_k.value, row.index_l.value) == (1, 0, 2) From 680fdeab4c77e8cb7fabe1551c526616c71052bc Mon Sep 17 00:00:00 2001 From: Andrew Sazonov Date: Thu, 11 Jun 2026 23:13:38 +0200 Subject: [PATCH 35/35] Align plan Phase 2 wording with final verification behaviour --- .../plans/preferred-orientation-category.md | 33 ++++++++++++------- 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/docs/dev/plans/preferred-orientation-category.md b/docs/dev/plans/preferred-orientation-category.md index 9f34bcc6f..351e14177 100644 --- a/docs/dev/plans/preferred-orientation-category.md +++ b/docs/dev/plans/preferred-orientation-category.md @@ -43,18 +43,21 @@ created. Related accepted ADRs consulted: `iucr-cif-tag-alignment.md`, `_pd_pref_orient_March_Dollase.*` export; `march_random_fract` namespaced under `_easydiffraction_pref_orient.march_random_fract` and omitted from the report when 0; `.hkl`/`.fract` excluded. -- **Known backend limitation (ADR Decision 6):** CrysPy 0.11.0's texture +- **CrysPy convention (ADR Decision 6):** CrysPy 0.11.0's texture function uses a reciprocal `g1 = 1/r` convention (handled by the backend) and is not volume-normalised (absorbed by scale), so the exposed `march_r` is the standard, portable March coefficient. The - verification notebook **documents this mismatch** rather than - asserting agreement. + verification notebook documents this convention and, after refining + `march_r`/`march_random_fract`/scale, **asserts agreement** with + FullProf within the closeness tolerances. ## Open questions -- None blocking. The CrysPy formula divergence is documented and an - upstream issue is staged in `tmp/cryspy/preferred-orientation/`; this - plan does not depend on its resolution. +- None blocking. CrysPy's reciprocal/non-normalised convention is + documented (Decision 6) and handled by the backend mapping; a + convention note for upstream is staged in + `tmp/cryspy/preferred-orientation/`. This plan does not depend on its + resolution. ## No new dependencies @@ -243,17 +246,23 @@ CrysPy is already a dependency; no `pyproject.toml`/`pixi.toml`/ ### Cross-engine verification notebook (on the LBCO base) 1. Copy `docs/docs/verification/fullprof/pd-neut-cwl_pv_lbco/lbco.pcr`, - enable a single March–Dollase direction (texture axis via the phase - `Pr1 Pr2 Pr3` line and a non-zero `Pref1`), re-run FullProf locally - (`~/Applications/fullprof`) to regenerate `.prf`/`.bac`/`.sum` under + enable the March–Dollase model (`Nor=1`) along the phase + `Pr1 Pr2 Pr3` direction with non-zero `Pref1` **and** `Pref2` (the + reference uses `Pref1=1.2`, `Pref2=0.3`, axis `[0 0 1]`), re-run + FullProf locally (`~/Applications/fullprof`) to regenerate + `.prf`/`.bac`/`.sum` under `docs/docs/verification/fullprof/pd-neut-cwl_pv-march_lbco/`. 2. Add `docs/docs/verification/pd-neut-cwl_pv-march_lbco.py` building the same LBCO model, setting `expt.preferred_orientation.create(phase_id='lbco', march_r=, march_random_fract=, index_h=, index_k=, index_l=)`, and overlaying CrysPy vs FullProf. Compare CrysPy-only (no CrysFML - column, since PO is CrysPy-only). Add a markdown cell explaining the - CrysPy formula difference (link the upstream issue): expect agreement - at `r=1` and a quantified divergence for `r ≠ 1`. + column, since PO is CrysPy-only). Add a markdown cell documenting + CrysPy's convention — it uses the reciprocal `g1 = 1/r` (the backend + inverts the standard `march_r`) and a non-volume-normalised factor + that the scale absorbs, so the as-calculated pattern shows an overall + offset. Then refine `march_r`, `march_random_fract`, and the scale: + the refined CrysPy result recovers `Pref1`/`Pref2` and agrees with + FullProf within the verification tolerances. 3. `pixi run notebook-prepare` to regenerate the `.ipynb`; commit source `.py` + generated `.ipynb` + FullProf reference together.