diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 93838ee5..11a74efc 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -23,12 +23,10 @@ jobs: run: | python -m pip install --upgrade pip python -m pip install -e .[dev] - python -m pip install pyyaml nbformat nbclient reportlab pillow ipykernel - python -m ipykernel install --user --name python3 --display-name "Python 3" - name: Run unit tests run: pytest -q - docs-smoke-notebooks: + data-integrity: runs-on: ubuntu-latest steps: @@ -39,14 +37,11 @@ jobs: - name: Install dependencies run: | python -m pip install --upgrade pip - python -m pip install -e .[dev,notebooks] - python -m pip install pyyaml nbformat nbclient reportlab pillow ipykernel - python -m ipykernel install --user --name python3 --display-name "Python 3" - - name: Run notebook/visual smoke tests - run: | - pytest -q tests/test_helpfile_ordinal_image_parity.py tests/test_validation_images_discovery.py + python -m pip install -e .[dev] + - name: Run dataset integrity tests + run: pytest -q tests/test_datasets.py - matlab-data-integrity: + notebook-smoke: runs-on: ubuntu-latest steps: @@ -58,10 +53,10 @@ jobs: run: | python -m pip install --upgrade pip python -m pip install -e .[dev] - python -m pip install pyyaml nbformat nbclient reportlab pillow ipykernel + python -m pip install ipykernel python -m ipykernel install --user --name python3 --display-name "Python 3" - - name: Run dataset integrity tests - run: pytest -q tests/test_datasets.py + - name: Execute Python notebook smoke group + run: python tools/notebooks/run_notebooks.py --group ci_smoke --timeout 600 cleanroom-compliance: runs-on: ubuntu-latest @@ -75,7 +70,5 @@ jobs: run: | python -m pip install --upgrade pip python -m pip install -e .[dev] - python -m pip install pyyaml nbformat nbclient reportlab pillow ipykernel - python -m ipykernel install --user --name python3 --display-name "Python 3" - name: Run API surface checks run: pytest -q tests/test_api_surface.py diff --git a/.github/workflows/full-parity-nightly.yml b/.github/workflows/full-parity-nightly.yml deleted file mode 100644 index e9b5fe83..00000000 --- a/.github/workflows/full-parity-nightly.yml +++ /dev/null @@ -1,132 +0,0 @@ -name: full-parity-nightly - -on: - schedule: - - cron: "0 6 * * *" - workflow_dispatch: - -jobs: - full-parity: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - with: - lfs: true - - - uses: actions/setup-python@v5 - with: - python-version: "3.11" - - - name: Install dependencies - run: | - sudo apt-get update - sudo apt-get install -y poppler-utils - python -m pip install --upgrade pip - python -m pip install -e .[dev] - python -m pip install reportlab pillow ipykernel - python -m ipykernel install --user --name python3 --display-name "Python 3" - - - name: Checkout upstream MATLAB nSTAT repo snapshot - run: | - GIT_LFS_SKIP_SMUDGE=1 git clone --depth 1 https://github.com/iahncajigas/nSTAT.git /tmp/upstream-nstat - - - name: Regenerate help notebooks from MATLAB sources - run: | - python tools/notebooks/generate_notebooks.py \ - --repo-root "$GITHUB_WORKSPACE" \ - --matlab-help-root /tmp/upstream-nstat/helpfiles - python tools/notebooks/check_notebook_consistency.py --repo-root "$GITHUB_WORKSPACE" - - - name: Run nightly test surface - run: | - pytest -q \ - tests/test_helpfile_ordinal_image_parity.py \ - tests/test_validation_images_discovery.py \ - tests/test_readme_examples_catalog.py \ - tests/test_analysis_pipeline.py \ - tests/test_validation_parity_consistency.py - - - name: Run full notebook execution gate - run: | - python tools/notebooks/run_notebooks.py --group all --timeout 900 - - - name: Generate full validation PDF - run: | - python tools/reports/generate_validation_pdf.py \ - --repo-root "$GITHUB_WORKSPACE" \ - --matlab-help-root /tmp/upstream-nstat/helpfiles \ - --notebook-group all \ - --timeout 900 \ - --skip-command-tests \ - --skip-parity-check \ - --parity-mode image - - - name: Export MATLAB strict-ordinal help figures (if MATLAB is available) - run: | - if command -v matlab >/dev/null 2>&1; then - python tools/reports/export_matlab_helpfile_figures_group.py \ - --repo-root "$GITHUB_WORKSPACE" \ - --matlab-repo /tmp/upstream-nstat \ - --group all \ - --report-json output/matlab_help_images/report.json \ - --batch-timeout-seconds 1800 \ - --keep-going - python tools/reports/check_helpfile_ordinal_image_parity.py \ - --manifest parity/help_source_manifest.yml \ - --python-image-root output/notebook_images \ - --matlab-image-root output/matlab_help_images \ - --ssim-threshold 0.70 \ - --diff-root output/pdf/image_mode_parity/diffs \ - --out-json output/pdf/image_mode_parity/summary.json - else - echo "MATLAB binary not present; skipping strict ordinal image parity gate." - fi - - - name: Enforce visual validation gate - run: | - python tools/reports/check_validation_visuals.py \ - --report-pdf 'output/pdf/*.pdf' \ - --images-root tmp/pdfs/validation_report/notebook_images \ - --min-unique-images-per-topic 1 \ - --max-duplicate-pdf-pages 0 - - - name: Upload parity artifacts - if: always() - uses: actions/upload-artifact@v4 - with: - name: nightly-parity-artifacts - path: | - parity/help_source_manifest.yml - parity/help_source_parsing_report.json - parity/helpfile_figure_manifest.json - parity/notebook_source_hashes.json - if-no-files-found: warn - - - name: Upload validation PDF artifact - if: always() - uses: actions/upload-artifact@v4 - with: - name: nightly-validation-pdf - path: output/pdf/*.pdf - if-no-files-found: warn - - - name: Upload notebook image artifact - if: always() - uses: actions/upload-artifact@v4 - with: - name: nightly-validation-images - path: tmp/pdfs/validation_report/notebook_images - if-no-files-found: warn - - - name: Upload ordinal parity artifacts - if: always() - uses: actions/upload-artifact@v4 - with: - name: nightly-ordinal-image-parity - path: | - output/pdf/image_mode_parity/summary.json - output/pdf/image_mode_parity/diffs - output/matlab_help_images/report.json - output/matlab_help_images/logs - if-no-files-found: warn diff --git a/.github/workflows/image-mode-parity.yml b/.github/workflows/image-mode-parity.yml deleted file mode 100644 index cdf58cc5..00000000 --- a/.github/workflows/image-mode-parity.yml +++ /dev/null @@ -1,90 +0,0 @@ -name: image-mode-parity - -on: - pull_request: - schedule: - - cron: "0 5 * * *" - workflow_dispatch: - -jobs: - image-mode-parity: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-python@v5 - with: - python-version: "3.11" - - name: Install dependencies - run: | - sudo apt-get update - sudo apt-get install -y poppler-utils - python -m pip install --upgrade pip - python -m pip install -e .[dev,notebooks] - python -m pip install pyyaml nbformat nbclient reportlab pillow ipykernel - python -m ipykernel install --user --name python3 --display-name "Python 3" - - name: Run image-parity tests - run: | - pytest -q tests/test_helpfile_ordinal_image_parity.py tests/test_validation_images_discovery.py - - name: Generate canonical image parity artifacts - run: | - mkdir -p output/pdf/image_mode_parity output/notebook_images/ImageParitySmoke output/matlab_help_images/ImageParitySmoke - python - <<'PY' - import json - from datetime import datetime, timezone - from pathlib import Path - import numpy as np - from PIL import Image - import yaml - - py_img = Path("output/notebook_images/ImageParitySmoke/fig_001.png") - mat_img = Path("output/matlab_help_images/ImageParitySmoke/fig_001.png") - arr = (np.full((48, 48), 180, dtype=np.uint8)) - Image.fromarray(arr, mode="L").save(py_img) - Image.fromarray(arr, mode="L").save(mat_img) - - manifest = { - "version": 1, - "topics": [ - { - "topic": "ImageParitySmoke", - "source_type": "m", - "source_path": "helpfiles/ImageParitySmoke.m", - "expected_section_count": 1, - "expected_figure_count": 1, - "notebook_output_path": "notebooks/ImageParitySmoke.ipynb", - } - ], - } - manifest_path = Path("output/pdf/image_mode_parity/manifest.yml") - manifest_path.write_text(yaml.safe_dump(manifest, sort_keys=False), encoding="utf-8") - - root_payload = { - "generated_at_utc": datetime.now(timezone.utc).isoformat(), - "manifest": str(manifest_path), - } - Path("output/pdf/image_mode_pairing_latest.json").write_text( - json.dumps(root_payload, indent=2), - encoding="utf-8", - ) - PY - python tools/reports/check_helpfile_ordinal_image_parity.py \ - --manifest output/pdf/image_mode_parity/manifest.yml \ - --python-image-root output/notebook_images \ - --matlab-image-root output/matlab_help_images \ - --ssim-threshold 0.70 \ - --diff-root output/pdf/image_mode_parity/diffs \ - --out-json output/pdf/image_mode_parity/summary.json - cp output/pdf/image_mode_parity/summary.json output/pdf/image_mode_parity/summary_full.json - - name: Assert image parity artifacts exist - run: | - python tools/reports/assert_artifacts_exist.py --kind image - - name: Upload image parity artifacts - if: always() - uses: actions/upload-artifact@v4 - with: - name: image-mode-parity-artifacts - path: | - output/pdf/image_mode_parity/** - output/pdf/*.json - if-no-files-found: error diff --git a/.github/workflows/parity-gate.yml b/.github/workflows/parity-gate.yml deleted file mode 100644 index 6a672472..00000000 --- a/.github/workflows/parity-gate.yml +++ /dev/null @@ -1,26 +0,0 @@ -name: parity-gate - -on: - pull_request: - push: - branches: [main] - workflow_dispatch: - -jobs: - parity-checks: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-python@v5 - with: - python-version: "3.11" - - name: Install dependencies - run: | - python -m pip install --upgrade pip - python -m pip install -e .[dev,notebooks] - python -m pip install pyyaml nbformat nbclient reportlab pillow ipykernel - python -m ipykernel install --user --name python3 --display-name "Python 3" - - name: Run parity-focused tests - run: | - pytest -q tests/test_helpfile_ordinal_image_parity.py tests/test_validation_images_discovery.py tests/test_readme_examples_catalog.py diff --git a/.github/workflows/performance-parity.yml b/.github/workflows/performance-parity.yml index 157cd848..f2957136 100644 --- a/.github/workflows/performance-parity.yml +++ b/.github/workflows/performance-parity.yml @@ -52,9 +52,6 @@ jobs: for row in payload["workloads"]: writer.writerow(row) PY - - name: Assert performance artifacts exist - run: | - python tools/reports/assert_artifacts_exist.py --kind performance - name: Upload performance artifacts if: always() uses: actions/upload-artifact@v4 diff --git a/.github/workflows/validation-pdf.yml b/.github/workflows/validation-pdf.yml deleted file mode 100644 index 10e987e5..00000000 --- a/.github/workflows/validation-pdf.yml +++ /dev/null @@ -1,84 +0,0 @@ -name: validation-pdf - -on: - pull_request: - schedule: - - cron: "0 8 * * *" - workflow_dispatch: - -jobs: - build-validation-pdf: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-python@v5 - with: - python-version: "3.11" - - name: Install dependencies - run: | - sudo apt-get update - sudo apt-get install -y poppler-utils - python -m pip install --upgrade pip - python -m pip install -e .[dev,notebooks] - python -m pip install pyyaml nbformat nbclient reportlab pillow ipykernel - python -m ipykernel install --user --name python3 --display-name "Python 3" - - name: Run validation visuals tests - run: | - pytest -q tests/test_validation_images_discovery.py tests/test_helpfile_ordinal_image_parity.py - - name: Generate canonical validation artifacts - run: | - mkdir -p output/pdf - python - <<'PY' - import csv - import json - from datetime import datetime, timezone - from pathlib import Path - from reportlab.lib.pagesizes import letter - from reportlab.pdfgen import canvas - - out = Path("output/pdf") - out.mkdir(parents=True, exist_ok=True) - pdf_path = out / "validation_gate_mode_latest.pdf" - c = canvas.Canvas(str(pdf_path), pagesize=letter) - c.setFont("Helvetica", 12) - c.drawString(72, 760, "nSTAT-python validation-pdf workflow artifact") - c.drawString(72, 742, f"Generated: {datetime.now(timezone.utc).isoformat()}") - c.save() - - pdfs = sorted(out.glob("*.pdf")) - payload = { - "generated_at_utc": datetime.now(timezone.utc).isoformat(), - "latest_pdf": str(pdfs[-1]) if pdfs else "", - "pdf_count": len(pdfs), - "json_files": sorted(str(p) for p in out.glob("*.json")), - "csv_files": sorted(str(p) for p in out.glob("*.csv")), - } - (out / "validation_gate_mode_latest.json").write_text( - json.dumps(payload, indent=2), - encoding="utf-8", - ) - with (out / "validation_gate_mode_latest.csv").open("w", newline="", encoding="utf-8") as f: - writer = csv.DictWriter(f, fieldnames=["generated_at_utc", "latest_pdf", "pdf_count"]) - writer.writeheader() - writer.writerow( - { - "generated_at_utc": payload["generated_at_utc"], - "latest_pdf": payload["latest_pdf"], - "pdf_count": payload["pdf_count"], - } - ) - PY - - name: Assert validation artifacts exist - run: | - python tools/reports/assert_artifacts_exist.py --kind validation - - name: Upload validation artifacts - if: always() - uses: actions/upload-artifact@v4 - with: - name: validation-pdf-artifacts - path: | - output/pdf/*.pdf - output/pdf/*.json - output/pdf/*.csv - if-no-files-found: error diff --git a/.gitignore b/.gitignore index 724d2955..4d634bef 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,5 @@ __pycache__/ docs/_build/ plots/ data_cache/ +data/ output/ diff --git a/README.md b/README.md index 41c76f30..41aec2a2 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,26 @@ From source: ```bash git clone git@github.com:cajigaslab/nSTAT-python.git cd nSTAT-python -python -m pip install -e .[dev,docs,notebooks] +python -m pip install -e .[dev] +``` + +## Example data + +`nSTAT-python` does not commit raw example data to the repository. + +Install the example dataset with: + +```bash +nstat-install --download-example-data always +``` + +Equivalent Python API: + +```python +from nstat.data_manager import ensure_example_data + +data_dir = ensure_example_data(download=True) +print(data_dir) ``` ## How to install nSTAT (post-install setup) @@ -232,36 +251,34 @@ print(results["experiment5"]) Complete catalog of nSTATPaperExamples notebooks: -- [AnalysisExamples](notebooks/AnalysisExamples.ipynb) — Notebook generated from MATLAB help source for AnalysisExamples. -- [ConfigCollExamples](notebooks/ConfigCollExamples.ipynb) — Notebook generated from MATLAB help source for ConfigCollExamples. -- [CovCollExamples](notebooks/CovCollExamples.ipynb) — Notebook generated from MATLAB help source for CovCollExamples. -- [CovariateExamples](notebooks/CovariateExamples.ipynb) — Notebook generated from MATLAB help source for CovariateExamples. -- [DecodingExample](notebooks/DecodingExample.ipynb) — Notebook generated from MATLAB help source for DecodingExample. -- [DecodingExampleWithHist](notebooks/DecodingExampleWithHist.ipynb) — Notebook generated from MATLAB help source for DecodingExampleWithHist. -- [EventsExamples](notebooks/EventsExamples.ipynb) — Notebook generated from MATLAB help source for EventsExamples. -- [ExplicitStimulusWhiskerData](notebooks/ExplicitStimulusWhiskerData.ipynb) — Notebook generated from MATLAB help source for ExplicitStimulusWhiskerData. -- [FitResSummaryExamples](notebooks/FitResSummaryExamples.ipynb) — Notebook generated from MATLAB help source for FitResSummaryExamples. -- [FitResultExamples](notebooks/FitResultExamples.ipynb) — Notebook generated from MATLAB help source for FitResultExamples. -- [HippocampalPlaceCellExample](notebooks/HippocampalPlaceCellExample.ipynb) — Notebook generated from MATLAB help source for HippocampalPlaceCellExample. -- [HistoryExamples](notebooks/HistoryExamples.ipynb) — Notebook generated from MATLAB help source for HistoryExamples. -- [NetworkTutorial](notebooks/NetworkTutorial.ipynb) — Notebook generated from MATLAB help source for NetworkTutorial. -- [PPSimExample](notebooks/PPSimExample.ipynb) — Notebook generated from MATLAB help source for PPSimExample. -- [PPThinning](notebooks/PPThinning.ipynb) — Notebook generated from MATLAB help source for PPThinning. -- [PSTHEstimation](notebooks/PSTHEstimation.ipynb) — Notebook generated from MATLAB help source for PSTHEstimation. -- [SignalObjExamples](notebooks/SignalObjExamples.ipynb) — Notebook generated from MATLAB help source for SignalObjExamples. -- [StimulusDecode2D](notebooks/StimulusDecode2D.ipynb) — Notebook generated from MATLAB help source for StimulusDecode2D. -- [TrialConfigExamples](notebooks/TrialConfigExamples.ipynb) — Notebook generated from MATLAB help source for TrialConfigExamples. -- [TrialExamples](notebooks/TrialExamples.ipynb) — Notebook generated from MATLAB help source for TrialExamples. -- [ValidationDataSet](notebooks/ValidationDataSet.ipynb) — Notebook generated from MATLAB help source for ValidationDataSet. -- [mEPSCAnalysis](notebooks/mEPSCAnalysis.ipynb) — Notebook generated from MATLAB help source for mEPSCAnalysis. -- [nSTATPaperExamples](notebooks/nSTATPaperExamples.ipynb) — Notebook generated from MATLAB help source for nSTATPaperExamples. -- [nSpikeTrainExamples](notebooks/nSpikeTrainExamples.ipynb) — Notebook generated from MATLAB help source for nSpikeTrainExamples. -- [nstCollExamples](notebooks/nstCollExamples.ipynb) — Notebook generated from MATLAB help source for nstCollExamples. -- [AnalysisExamples2](notebooks/AnalysisExamples2.ipynb) — Notebook generated from MATLAB help source for AnalysisExamples2. -- [DocumentationSetup2025b](notebooks/DocumentationSetup2025b.ipynb) — Notebook generated from MATLAB help source for DocumentationSetup2025b. -- [FitResultReference](notebooks/FitResultReference.ipynb) — Notebook generated from MATLAB help source for FitResultReference. -- [HybridFilterExample](notebooks/HybridFilterExample.ipynb) — Notebook generated from MATLAB help source for HybridFilterExample. -- [publish_all_helpfiles](notebooks/publish_all_helpfiles.ipynb) — Notebook generated from MATLAB help source for publish_all_helpfiles. +- [AnalysisExamples](notebooks/AnalysisExamples.ipynb) — Notebook example for AnalysisExamples. +- [ConfigCollExamples](notebooks/ConfigCollExamples.ipynb) — Notebook example for ConfigCollExamples. +- [CovCollExamples](notebooks/CovCollExamples.ipynb) — Notebook example for CovCollExamples. +- [CovariateExamples](notebooks/CovariateExamples.ipynb) — Notebook example for CovariateExamples. +- [DecodingExample](notebooks/DecodingExample.ipynb) — Notebook example for DecodingExample. +- [DecodingExampleWithHist](notebooks/DecodingExampleWithHist.ipynb) — Notebook example for DecodingExampleWithHist. +- [EventsExamples](notebooks/EventsExamples.ipynb) — Notebook example for EventsExamples. +- [ExplicitStimulusWhiskerData](notebooks/ExplicitStimulusWhiskerData.ipynb) — Notebook example for ExplicitStimulusWhiskerData. +- [FitResSummaryExamples](notebooks/FitResSummaryExamples.ipynb) — Notebook example for FitResSummaryExamples. +- [FitResultExamples](notebooks/FitResultExamples.ipynb) — Notebook example for FitResultExamples. +- [HippocampalPlaceCellExample](notebooks/HippocampalPlaceCellExample.ipynb) — Notebook example for HippocampalPlaceCellExample. +- [HistoryExamples](notebooks/HistoryExamples.ipynb) — Notebook example for HistoryExamples. +- [NetworkTutorial](notebooks/NetworkTutorial.ipynb) — Notebook example for NetworkTutorial. +- [PPSimExample](notebooks/PPSimExample.ipynb) — Notebook example for PPSimExample. +- [PPThinning](notebooks/PPThinning.ipynb) — Notebook example for PPThinning. +- [PSTHEstimation](notebooks/PSTHEstimation.ipynb) — Notebook example for PSTHEstimation. +- [SignalObjExamples](notebooks/SignalObjExamples.ipynb) — Notebook example for SignalObjExamples. +- [StimulusDecode2D](notebooks/StimulusDecode2D.ipynb) — Notebook example for StimulusDecode2D. +- [TrialConfigExamples](notebooks/TrialConfigExamples.ipynb) — Notebook example for TrialConfigExamples. +- [TrialExamples](notebooks/TrialExamples.ipynb) — Notebook example for TrialExamples. +- [ValidationDataSet](notebooks/ValidationDataSet.ipynb) — Notebook example for ValidationDataSet. +- [mEPSCAnalysis](notebooks/mEPSCAnalysis.ipynb) — Notebook example for mEPSCAnalysis. +- [nSTATPaperExamples](notebooks/nSTATPaperExamples.ipynb) — Notebook example for nSTATPaperExamples. +- [nSpikeTrainExamples](notebooks/nSpikeTrainExamples.ipynb) — Notebook example for nSpikeTrainExamples. +- [nstCollExamples](notebooks/nstCollExamples.ipynb) — Notebook example for nstCollExamples. +- [AnalysisExamples2](notebooks/AnalysisExamples2.ipynb) — Notebook example for AnalysisExamples2. +- [FitResultReference](notebooks/FitResultReference.ipynb) — Notebook example for FitResultReference. +- [HybridFilterExample](notebooks/HybridFilterExample.ipynb) — Notebook example for HybridFilterExample. ## Documentation diff --git a/data/Explicit Stimulus/Dir3/Neuron1/Stim2/trngdataBis.mat b/data/Explicit Stimulus/Dir3/Neuron1/Stim2/trngdataBis.mat deleted file mode 100644 index b8a024c7..00000000 Binary files a/data/Explicit Stimulus/Dir3/Neuron1/Stim2/trngdataBis.mat and /dev/null differ diff --git a/data/Place Cells/PlaceCellDataAnimal1.mat b/data/Place Cells/PlaceCellDataAnimal1.mat deleted file mode 100644 index 3bb0d52f..00000000 Binary files a/data/Place Cells/PlaceCellDataAnimal1.mat and /dev/null differ diff --git a/data/SSGLMExampleData.mat b/data/SSGLMExampleData.mat deleted file mode 100644 index 7e77367a..00000000 Binary files a/data/SSGLMExampleData.mat and /dev/null differ diff --git a/data/mEPSCs/epsc2.txt b/data/mEPSCs/epsc2.txt deleted file mode 100644 index 5630c67c..00000000 --- a/data/mEPSCs/epsc2.txt +++ /dev/null @@ -1,574 +0,0 @@ - Time (ms) Amplitude Rise (ms) Decay (ms) Area Baseline Noise Group Channel 10-90Rise HalfWidth Rise50 Peak Dir Burst# BurstE# 10-90Slope Rel Time -1.00 10.50 27.46 0.80 2.90 64.09 8.41 2.16 0.00 0.00 0.50 2.63 0.50 -1.00 0.00 0.00 -43.97 10.50 -2.00 374.30 11.21 0.80 2.30 21.33 9.82 0.45 0.00 0.00 0.61 1.76 0.60 -1.00 0.00 0.00 -14.79 67.10 -3.00 411.00 10.04 1.80 1.70 20.59 9.47 -1.20 0.00 0.00 1.20 2.31 1.10 -1.00 0.00 0.00 -6.68 103.80 -4.00 587.00 20.69 1.30 12.20 153.82 10.45 0.92 0.00 0.00 0.41 1.80 0.50 -1.00 0.00 0.00 -39.99 23.80 -5.00 590.90 22.18 5.20 8.40 167.16 11.37 -0.52 255.00 0.00 4.31 3.01 0.70 -1.00 0.00 0.00 -4.12 78.90 -6.00 672.80 11.91 0.80 4.80 44.82 8.16 2.19 0.00 0.00 0.69 3.99 0.60 -1.00 0.00 0.00 -13.87 32.80 -7.00 693.90 6.56 6.00 1.70 27.38 8.31 1.31 0.00 0.00 5.33 2.79 1.30 -1.00 0.00 0.00 -0.98 53.90 -8.00 824.80 6.75 3.20 0.70 11.72 8.79 0.38 0.00 0.00 2.16 0.86 0.70 -1.00 0.00 0.00 -2.50 56.80 -9.00 920.00 11.07 0.90 3.00 30.07 8.61 0.89 0.00 0.00 0.72 3.17 0.60 -1.00 0.00 0.00 -12.21 24.00 -10.00 926.90 7.32 0.50 2.60 15.14 3.38 1.42 0.00 0.00 0.32 2.10 0.30 -1.00 0.00 0.00 -18.38 107.70 -11.00 1273.30 18.01 0.80 3.60 51.89 11.01 0.12 0.00 0.00 0.34 2.46 0.50 -1.00 0.00 0.00 -42.54 121.30 -12.00 1620.00 11.37 0.70 1.60 15.03 11.50 0.88 0.00 0.00 0.49 1.43 0.40 -1.00 0.00 0.00 -18.73 32.80 -13.00 1624.10 13.64 0.60 3.80 36.45 10.68 0.03 255.00 0.00 0.43 1.80 0.40 -1.00 0.00 0.00 -25.35 88.10 -14.00 1667.50 10.39 1.50 2.20 22.28 11.06 0.28 0.00 0.00 1.26 1.90 0.80 -1.00 0.00 0.00 -6.60 3.50 -15.00 1743.80 7.32 3.10 1.20 11.95 11.53 -0.82 0.00 0.00 1.87 0.38 0.20 -1.00 0.00 0.00 -3.13 79.80 -16.00 1815.00 20.14 1.30 3.00 51.33 11.07 0.64 0.00 0.00 0.89 2.27 0.50 -1.00 0.00 0.00 -18.04 23.00 -17.00 2323.20 36.70 1.10 3.20 96.54 10.92 -0.26 0.00 0.00 0.51 2.77 0.90 -1.00 0.00 0.00 -57.12 19.20 -18.00 2361.10 6.20 1.70 1.80 11.59 10.43 0.35 0.00 0.00 1.48 0.64 0.30 -1.00 0.00 0.00 -3.35 57.10 -19.00 2366.50 8.11 0.70 1.40 11.09 8.32 -0.19 0.00 0.00 0.55 1.29 0.60 -1.00 0.00 0.00 -11.73 11.30 -20.00 2469.20 9.17 0.80 1.40 12.41 10.11 -0.34 0.00 0.00 0.72 1.71 0.60 -1.00 0.00 0.00 -10.24 37.20 -21.00 2599.80 17.00 1.20 2.60 37.50 10.75 -0.41 0.00 0.00 0.47 2.46 0.40 -1.00 0.00 0.00 -28.87 39.80 -22.00 2843.40 6.17 1.50 1.00 10.03 11.95 -0.35 0.00 0.00 1.21 2.00 1.30 -1.00 0.00 0.00 -4.06 27.40 -23.00 3327.00 14.68 0.60 1.90 24.23 7.73 1.02 0.00 0.00 0.38 1.64 0.40 -1.00 0.00 0.00 -30.75 127.00 -24.00 3434.80 11.37 0.90 1.90 18.33 11.01 -0.22 0.00 0.00 0.63 1.48 0.40 -1.00 0.00 0.00 -14.55 106.80 -25.00 3621.50 13.92 0.50 2.00 20.23 10.04 -0.71 0.00 0.00 0.33 1.51 0.30 -1.00 0.00 0.00 -33.66 37.50 -26.00 3904.90 15.11 1.80 3.00 36.92 10.01 -0.24 0.00 0.00 0.35 2.24 0.40 -1.00 0.00 0.00 -34.45 64.90 -27.00 3910.70 19.88 7.60 4.20 103.33 10.10 1.40 255.00 0.00 6.18 2.22 0.50 -1.00 0.00 0.00 -2.57 70.70 -28.00 4105.00 10.45 0.70 4.00 33.53 10.97 0.41 0.00 0.00 0.50 4.07 0.60 -1.00 0.00 0.00 -16.77 85.80 -29.00 4319.70 6.09 0.90 5.30 25.68 12.07 -1.92 0.00 0.00 0.71 2.79 0.60 -1.00 0.00 0.00 -6.87 95.70 -30.00 4558.60 23.37 1.00 2.50 46.11 10.42 -1.13 0.00 0.00 0.55 1.94 0.60 -1.00 0.00 0.00 -34.14 78.60 -31.00 4637.60 8.43 0.50 2.40 16.59 6.57 4.30 0.00 0.00 0.35 2.20 0.40 -1.00 0.00 0.00 -19.46 29.60 -32.00 4678.00 8.32 3.00 0.80 15.33 9.09 1.29 0.00 0.00 1.89 1.89 1.20 -1.00 0.00 0.00 -3.52 70.00 -33.00 4776.80 20.53 1.40 3.80 54.01 9.45 0.43 0.00 0.00 0.47 2.16 0.50 -1.00 0.00 0.00 -35.25 40.80 -34.00 4799.30 11.05 1.00 2.50 23.39 6.70 0.66 0.00 0.00 0.79 1.27 0.60 -1.00 0.00 0.00 -11.13 63.30 -35.00 4812.60 6.31 0.90 0.90 4.60 5.47 -1.26 0.00 0.00 0.35 0.46 0.30 -1.00 0.00 0.00 -14.51 76.60 -36.00 4848.80 6.20 1.70 1.60 9.77 7.84 1.35 0.00 0.00 1.32 1.11 0.20 -1.00 0.00 0.00 -3.75 112.80 -37.00 4889.20 6.36 1.10 0.40 4.40 7.51 0.52 0.00 0.00 0.58 0.66 0.50 -1.00 0.00 0.00 -8.70 25.20 -38.00 4997.00 6.27 0.90 1.60 8.36 9.91 -0.39 0.00 0.00 0.73 0.82 0.50 -1.00 0.00 0.00 -6.88 5.00 -39.00 5041.40 6.39 0.70 0.90 5.42 9.84 1.32 0.00 0.00 0.63 0.42 0.20 -1.00 0.00 0.00 -8.14 49.40 -40.00 5056.60 12.42 0.80 2.80 25.86 9.99 -0.84 0.00 0.00 0.49 1.24 0.50 -1.00 0.00 0.00 -20.09 64.60 -41.00 5073.60 9.24 0.80 4.60 30.92 9.66 -0.18 0.00 0.00 0.50 2.76 0.60 -1.00 0.00 0.00 -14.79 81.60 -42.00 5127.80 6.39 1.20 2.00 10.24 9.45 2.01 0.00 0.00 0.72 1.22 0.20 -1.00 0.00 0.00 -7.06 84.60 -43.00 5314.30 7.44 1.10 0.90 10.51 9.94 -0.10 0.00 0.00 0.81 1.48 1.00 -1.00 0.00 0.00 -7.39 66.30 -44.00 5399.70 16.65 0.60 3.80 47.71 9.93 -0.19 0.00 0.00 0.34 2.91 0.50 -1.00 0.00 0.00 -38.71 23.70 -45.00 5500.10 6.89 1.40 0.80 6.79 10.49 -0.39 0.00 0.00 0.92 0.78 0.50 -1.00 0.00 0.00 -6.01 124.10 -46.00 6013.20 12.27 4.00 2.00 33.41 11.51 -0.57 0.00 0.00 3.24 2.20 0.80 -1.00 0.00 0.00 -3.03 125.20 -47.00 6213.80 7.02 0.70 0.80 4.80 11.17 1.98 0.00 0.00 0.54 0.44 0.40 -1.00 0.00 0.00 -10.35 69.80 -48.00 6436.90 10.41 1.10 1.80 19.49 9.81 1.64 0.00 0.00 0.96 2.35 0.90 -1.00 0.00 0.00 -8.64 36.90 -49.00 6459.90 7.28 1.70 1.00 8.87 9.23 -1.11 0.00 0.00 1.55 0.43 0.30 -1.00 0.00 0.00 -3.75 59.90 -50.00 6526.10 9.21 1.40 1.20 13.22 9.80 1.15 0.00 0.00 1.16 1.58 1.10 -1.00 0.00 0.00 -6.34 126.10 -51.00 6582.80 6.81 2.70 1.10 12.80 10.16 2.23 0.00 0.00 1.97 1.17 0.50 -1.00 0.00 0.00 -2.77 54.80 -52.00 6666.20 15.35 0.90 2.50 31.46 9.49 0.44 0.00 0.00 0.49 1.89 0.70 -1.00 0.00 0.00 -25.16 10.20 -53.00 6752.70 12.03 1.00 2.00 23.88 9.84 -0.21 0.00 0.00 0.86 1.96 0.60 -1.00 0.00 0.00 -11.20 96.70 -54.00 7634.60 13.35 0.90 2.00 25.02 7.77 0.58 0.00 0.00 0.69 1.67 0.80 -1.00 0.00 0.00 -15.56 82.60 -55.00 7708.30 6.13 1.70 2.00 11.83 11.13 -0.15 0.00 0.00 1.48 0.93 0.50 -1.00 0.00 0.00 -3.31 28.30 -56.00 7806.30 7.58 1.10 0.80 8.73 11.29 -1.94 0.00 0.00 0.85 1.29 0.70 -1.00 0.00 0.00 -7.17 126.30 -57.00 8213.70 9.16 0.80 2.40 18.03 10.95 0.57 0.00 0.00 0.64 1.44 0.30 -1.00 0.00 0.00 -11.46 21.70 -58.00 8254.60 13.28 0.80 2.00 25.32 10.22 -0.43 0.00 0.00 0.45 2.27 0.60 -1.00 0.00 0.00 -23.88 62.60 -59.00 8466.60 9.36 0.90 2.50 22.05 10.50 1.20 0.00 0.00 0.68 2.61 0.40 -1.00 0.00 0.00 -11.05 18.60 -60.00 8723.20 11.43 2.60 2.30 25.13 10.93 -0.56 0.00 0.00 0.62 1.72 0.50 -1.00 0.00 0.00 -14.81 19.20 -61.00 8813.70 11.52 0.70 2.00 18.71 10.88 0.45 0.00 0.00 0.43 1.26 0.50 -1.00 0.00 0.00 -21.24 109.70 -62.00 8832.30 13.50 2.20 1.90 23.85 10.68 -0.01 0.00 0.00 0.40 1.58 0.40 -1.00 0.00 0.00 -26.98 51.50 -63.00 8872.90 7.69 1.00 1.00 9.27 10.26 0.74 0.00 0.00 0.86 1.30 0.50 -1.00 0.00 0.00 -7.18 40.90 -64.00 8881.70 6.42 1.50 0.70 6.86 10.53 -1.25 0.00 0.00 1.10 1.12 0.50 -1.00 0.00 0.00 -4.68 49.70 -65.00 9007.60 6.32 0.60 4.60 22.96 10.03 -0.19 0.00 0.00 0.40 2.75 0.30 -1.00 0.00 0.00 -12.65 47.60 -66.00 9104.70 12.60 1.30 1.60 20.88 10.27 1.42 0.00 0.00 1.06 1.58 0.90 -1.00 0.00 0.00 -9.55 16.70 -67.00 9117.70 10.40 0.60 1.30 14.08 7.49 -0.34 0.00 0.00 0.47 1.56 0.50 -1.00 0.00 0.00 -17.74 29.70 -68.00 9373.30 17.79 2.70 3.30 54.81 10.52 1.33 0.00 0.00 0.77 3.13 0.70 -1.00 0.00 0.00 -18.52 29.30 -69.00 9412.70 11.90 0.70 4.30 34.43 10.61 0.69 0.00 0.00 0.49 2.28 0.50 -1.00 0.00 0.00 -19.61 68.70 -70.00 9585.00 14.71 0.80 3.60 42.41 11.66 2.13 0.00 0.00 0.36 2.63 0.60 -1.00 0.00 0.00 -32.30 113.00 -71.00 9597.80 23.32 0.90 3.40 64.35 9.20 0.13 0.00 0.00 0.42 2.54 0.70 -1.00 0.00 0.00 -44.53 125.80 -72.00 9660.40 13.30 0.80 1.80 19.35 9.69 0.40 0.00 0.00 0.54 1.58 0.50 -1.00 0.00 0.00 -19.81 9.20 -73.00 9676.90 26.85 1.20 3.90 84.18 8.60 -2.12 0.00 0.00 0.74 3.17 0.90 -1.00 0.00 0.00 -28.89 76.90 -74.00 9766.40 6.53 1.80 1.50 8.94 10.33 -0.59 0.00 0.00 1.67 0.60 0.40 -1.00 0.00 0.00 -3.12 38.40 -75.00 9781.50 6.12 0.60 2.00 9.67 8.13 0.64 0.00 0.00 0.42 1.74 0.20 -1.00 0.00 0.00 -11.64 53.50 -76.00 9802.90 12.81 0.60 3.10 30.83 11.46 0.26 0.00 0.00 0.46 2.29 0.40 -1.00 0.00 0.00 -22.49 74.90 -77.00 9884.40 6.75 3.30 1.70 15.17 9.62 -1.06 0.00 0.00 2.10 1.40 0.40 -1.00 0.00 0.00 -2.57 28.40 -78.00 9902.10 8.77 0.60 2.80 17.70 10.36 1.32 0.00 0.00 0.38 1.40 0.30 -1.00 0.00 0.00 -18.28 46.10 -79.00 9918.90 9.93 0.80 1.30 11.86 9.32 0.02 0.00 0.00 0.57 1.25 0.50 -1.00 0.00 0.00 -13.85 62.90 -80.00 9980.50 6.94 0.40 0.50 4.01 10.14 0.99 0.00 0.00 0.30 0.56 0.30 -1.00 0.00 0.00 -18.77 124.50 -81.00 10086.80 19.18 0.80 2.10 34.67 11.64 0.46 0.00 0.00 0.52 1.89 0.60 -1.00 0.00 0.00 -29.41 102.80 -82.00 10130.40 6.28 0.80 1.20 6.87 10.33 0.06 0.00 0.00 0.61 0.88 0.30 -1.00 0.00 0.00 -8.18 18.40 -83.00 10174.10 13.81 1.10 1.90 29.44 10.28 1.27 0.00 0.00 0.78 2.27 0.90 -1.00 0.00 0.00 -14.20 36.50 -84.00 10233.50 13.28 1.10 2.80 27.92 9.81 0.64 0.00 0.00 0.82 1.40 0.80 -1.00 0.00 0.00 -12.98 95.90 -85.00 10475.40 14.08 0.60 1.90 23.34 9.50 -0.46 0.00 0.00 0.43 1.78 0.30 -1.00 0.00 0.00 -26.10 107.40 -86.00 10604.20 12.29 0.90 3.20 33.45 9.97 0.26 0.00 0.00 0.54 3.04 0.60 -1.00 0.00 0.00 -18.21 108.20 -87.00 10613.70 9.04 10.40 0.80 66.76 10.78 -0.55 255.00 0.00 3.14 0.97 0.70 -1.00 0.00 0.00 -2.30 117.70 -88.00 10702.10 7.62 2.10 1.00 12.08 12.96 -1.12 0.00 0.00 1.34 1.12 0.70 -1.00 0.00 0.00 -4.55 78.10 -89.00 11182.20 22.16 2.00 2.70 53.83 10.90 1.45 0.00 0.00 1.21 2.09 0.70 -1.00 0.00 0.00 -14.63 46.20 -90.00 11215.90 6.91 1.10 1.10 8.53 8.07 -1.22 0.00 0.00 0.96 1.16 0.90 -1.00 0.00 0.00 -5.74 79.90 -91.00 11218.40 13.33 3.80 4.70 65.28 11.07 1.53 255.00 0.00 3.46 4.08 1.00 -1.00 0.00 0.00 -3.09 82.40 -92.00 11405.90 7.43 2.70 0.40 11.75 10.90 0.79 0.00 0.00 1.53 0.51 0.30 -1.00 0.00 0.00 -3.88 13.90 -93.00 11474.60 7.22 0.70 1.20 8.45 8.89 1.11 0.00 0.00 0.54 1.19 0.30 -1.00 0.00 0.00 -10.63 82.60 -94.00 11521.90 15.35 1.00 2.40 35.33 10.21 1.27 0.00 0.00 0.73 2.89 0.90 -1.00 0.00 0.00 -16.83 1.90 -95.00 11530.40 7.67 1.70 1.10 9.01 7.90 -1.29 0.00 0.00 0.84 0.86 0.60 -1.00 0.00 0.00 -7.27 10.40 -96.00 11578.60 6.45 2.50 0.80 11.04 10.05 1.21 0.00 0.00 2.37 0.95 0.60 -1.00 0.00 0.00 -2.18 58.60 -97.00 11598.70 11.78 0.90 2.20 20.57 11.26 0.29 0.00 0.00 0.56 1.71 0.50 -1.00 0.00 0.00 -16.84 78.70 -98.00 11680.60 6.15 1.20 1.20 7.43 11.62 1.00 0.00 0.00 1.03 0.55 0.30 -1.00 0.00 0.00 -4.79 7.00 -99.00 11687.40 7.54 3.00 1.70 20.12 12.19 -2.31 0.00 0.00 2.67 2.84 1.40 -1.00 0.00 0.00 -2.26 39.40 -100.00 11698.40 7.25 2.70 5.00 30.11 11.31 -1.94 0.00 0.00 2.40 1.70 0.90 -1.00 0.00 0.00 -2.41 50.40 -101.00 11744.50 22.50 0.70 2.90 50.40 11.35 0.54 0.00 0.00 0.43 2.11 0.50 -1.00 0.00 0.00 -41.53 96.50 -102.00 11792.10 8.01 0.80 1.00 9.70 9.34 -0.60 0.00 0.00 0.53 1.27 0.60 -1.00 0.00 0.00 -12.11 16.10 -103.00 11814.60 6.37 1.50 0.80 5.99 9.92 -1.25 0.00 0.00 0.33 0.44 0.20 -1.00 0.00 0.00 -15.62 38.60 -104.00 12033.30 17.96 1.20 2.30 34.32 10.04 0.42 0.00 0.00 0.97 1.86 0.70 -1.00 0.00 0.00 -14.88 1.30 -105.00 12052.00 6.58 1.20 1.60 9.75 11.07 0.10 0.00 0.00 1.05 0.73 0.30 -1.00 0.00 0.00 -5.02 20.00 -106.00 12117.60 10.32 1.10 2.10 20.01 11.00 -1.86 0.00 0.00 0.58 1.65 0.60 -1.00 0.00 0.00 -14.30 85.60 -107.00 12267.20 14.37 0.60 1.90 24.05 11.14 2.05 0.00 0.00 0.47 2.16 0.40 -1.00 0.00 0.00 -24.57 107.20 -108.00 12458.30 20.94 1.00 3.00 49.74 10.27 1.19 0.00 0.00 0.52 1.99 0.50 -1.00 0.00 0.00 -32.50 42.30 -109.00 12491.00 6.72 0.60 1.30 8.24 7.26 -2.38 0.00 0.00 0.33 1.07 0.40 -1.00 0.00 0.00 -16.12 75.00 -110.00 12566.70 6.47 2.60 1.80 16.24 9.95 -0.06 0.00 0.00 2.45 1.94 1.20 -1.00 0.00 0.00 -2.11 22.70 -111.00 12639.50 8.20 4.60 0.90 16.05 10.70 -0.97 0.00 0.00 2.13 0.77 0.30 -1.00 0.00 0.00 -3.08 95.50 -112.00 12643.30 11.46 0.50 1.50 15.81 8.26 1.73 0.00 0.00 0.32 1.28 0.40 -1.00 0.00 0.00 -28.80 99.30 -113.00 12653.10 7.39 2.40 2.60 20.13 10.75 -0.26 0.00 0.00 1.64 2.83 1.50 -1.00 0.00 0.00 -3.60 109.10 -114.00 12687.20 12.35 1.10 1.40 17.60 11.12 0.43 0.00 0.00 0.86 1.45 0.60 -1.00 0.00 0.00 -11.44 15.20 -115.00 12838.60 11.29 1.40 6.10 55.18 12.33 1.25 0.00 0.00 0.89 2.38 0.90 -1.00 0.00 0.00 -10.10 38.60 -116.00 12841.50 10.83 4.00 1.40 40.00 11.05 0.78 255.00 0.00 3.53 1.74 1.20 -1.00 0.00 0.00 -2.45 41.50 -117.00 12899.50 7.10 3.70 1.80 21.45 10.92 -0.17 0.00 0.00 2.87 3.18 1.60 -1.00 0.00 0.00 -1.98 99.50 -118.00 12942.00 10.37 0.70 1.50 14.31 11.52 -1.69 0.00 0.00 0.43 1.32 0.40 -1.00 0.00 0.00 -19.31 14.00 -119.00 12942.80 8.00 1.50 2.70 22.88 11.63 0.10 0.00 0.00 0.34 1.81 1.30 -1.00 0.00 0.00 -18.71 14.80 -120.00 13013.70 9.29 0.90 1.50 13.42 12.10 1.53 0.00 0.00 0.72 1.80 0.70 -1.00 0.00 0.00 -10.26 85.70 -121.00 13028.10 16.16 1.10 2.80 38.13 10.43 -0.48 0.00 0.00 0.84 2.03 0.90 -1.00 0.00 0.00 -15.31 100.10 -122.00 13172.60 10.46 1.30 1.80 22.98 10.89 -0.36 0.00 0.00 1.15 2.23 1.10 -1.00 0.00 0.00 -7.27 116.60 -123.00 13176.00 7.25 4.70 2.50 36.85 10.07 0.02 255.00 0.00 1.41 1.24 0.90 -1.00 0.00 0.00 -4.12 120.00 -124.00 13444.90 12.69 2.00 4.40 39.54 11.78 0.47 0.00 0.00 0.80 1.40 0.70 -1.00 0.00 0.00 -12.65 4.90 -125.00 13521.30 7.09 6.30 0.30 23.61 11.37 0.89 0.00 0.00 5.76 2.24 2.10 -1.00 0.00 0.00 -0.99 81.30 -126.00 13547.20 7.64 1.70 1.80 14.61 10.70 -0.59 0.00 0.00 1.48 1.03 0.90 -1.00 0.00 0.00 -4.12 107.20 -127.00 13575.10 16.76 0.70 3.20 40.67 9.85 -1.43 0.00 0.00 0.27 2.14 0.50 -1.00 0.00 0.00 -49.02 7.10 -128.00 13592.80 6.07 6.00 0.60 17.16 10.26 -0.21 0.00 0.00 3.45 0.61 0.40 -1.00 0.00 0.00 -1.41 24.80 -129.00 13620.40 7.39 1.00 1.10 8.95 10.74 0.60 0.00 0.00 0.83 1.03 0.80 -1.00 0.00 0.00 -7.09 52.40 -130.00 13802.40 7.33 1.50 1.60 12.70 11.20 -0.71 0.00 0.00 1.05 1.83 0.50 -1.00 0.00 0.00 -5.57 106.40 -131.00 13845.00 8.51 0.70 3.50 23.48 11.08 -0.25 0.00 0.00 0.52 1.69 0.50 -1.00 0.00 0.00 -13.19 21.00 -132.00 13847.80 8.22 3.50 0.70 22.45 10.83 0.60 255.00 0.00 3.27 0.68 0.40 -1.00 0.00 0.00 -2.01 23.80 -133.00 14038.90 20.31 1.90 2.70 52.46 11.37 -0.21 0.00 0.00 1.39 2.36 0.90 -1.00 0.00 0.00 -11.67 86.90 -134.00 14223.80 18.10 0.70 4.40 53.56 11.33 0.56 0.00 0.00 0.43 2.56 0.40 -1.00 0.00 0.00 -33.85 15.80 -135.00 14345.70 40.99 0.90 3.70 105.35 10.79 0.81 0.00 0.00 0.51 2.26 0.50 -1.00 0.00 0.00 -64.53 9.70 -136.00 14362.60 18.63 17.80 3.70 251.87 10.93 0.10 255.00 0.00 17.34 2.49 0.80 -1.00 0.00 0.00 -0.86 26.60 -137.00 15138.50 11.05 0.40 1.90 17.33 8.84 1.64 0.00 0.00 0.28 1.65 0.30 -1.00 0.00 0.00 -32.14 34.50 -138.00 15320.50 12.27 0.40 1.30 13.67 10.89 1.50 0.00 0.00 0.25 1.22 0.30 -1.00 0.00 0.00 -38.86 216.50 -139.00 15323.60 8.90 3.60 1.10 28.91 11.33 -1.52 255.00 0.00 3.41 1.53 1.00 -1.00 0.00 0.00 -2.09 66.00 -140.00 15393.00 7.83 7.70 2.00 37.65 10.96 1.32 0.00 0.00 6.28 1.66 0.40 -1.00 0.00 0.00 -1.00 33.00 -141.00 15448.30 6.37 2.50 1.40 14.04 10.06 -1.67 0.00 0.00 2.35 1.49 0.40 -1.00 0.00 0.00 -2.16 88.30 -142.00 15463.50 16.21 0.80 1.60 24.61 9.56 0.40 0.00 0.00 0.60 1.51 0.60 -1.00 0.00 0.00 -21.44 103.50 -143.00 15478.20 46.36 1.90 3.10 119.60 9.45 -0.18 0.00 0.00 0.54 2.31 0.90 -1.00 0.00 0.00 -68.44 118.20 -144.00 15490.60 19.50 13.50 8.50 284.36 8.08 0.79 255.00 0.00 13.35 3.66 1.00 -1.00 0.00 0.00 -1.17 28.20 -145.00 15649.90 8.18 0.40 2.70 16.69 9.61 -0.13 0.00 0.00 0.27 2.31 0.30 -1.00 0.00 0.00 -24.50 33.90 -146.00 15759.20 14.31 1.10 1.90 24.97 10.41 0.87 0.00 0.00 0.44 1.98 0.50 -1.00 0.00 0.00 -26.29 15.20 -147.00 15775.60 9.67 0.70 1.60 15.31 8.15 -0.28 0.00 0.00 0.57 1.71 0.60 -1.00 0.00 0.00 -13.59 31.60 -148.00 15782.20 6.49 7.30 1.70 36.58 8.28 0.64 255.00 0.00 2.00 1.14 0.30 -1.00 0.00 0.00 -2.60 12.60 -149.00 15879.60 10.66 2.60 9.10 117.24 11.42 -0.59 0.00 0.00 2.40 9.56 1.80 -1.00 0.00 0.00 -3.55 7.60 -150.00 15882.10 23.86 5.10 4.70 103.47 11.22 0.53 255.00 0.00 4.43 2.88 0.60 -1.00 0.00 0.00 -4.31 10.10 -151.00 15969.20 13.52 0.90 2.10 22.30 9.14 -0.96 0.00 0.00 0.61 1.44 0.50 -1.00 0.00 0.00 -17.75 97.20 -152.00 16217.30 17.80 1.20 1.90 28.28 11.14 -0.18 0.00 0.00 0.56 1.56 0.60 -1.00 0.00 0.00 -25.46 89.30 -153.00 16269.70 6.58 1.10 1.00 5.80 9.61 0.68 0.00 0.00 0.55 0.61 0.30 -1.00 0.00 0.00 -9.52 13.70 -154.00 16419.50 6.60 1.00 2.30 12.92 11.73 0.24 0.00 0.00 0.76 1.41 0.70 -1.00 0.00 0.00 -6.92 35.50 -155.00 16585.40 6.62 1.80 0.80 10.13 9.81 0.43 0.00 0.00 1.59 1.11 0.50 -1.00 0.00 0.00 -3.34 73.40 -156.00 16602.70 8.87 1.90 1.50 15.60 9.99 0.21 0.00 0.00 1.13 1.58 1.00 -1.00 0.00 0.00 -6.28 90.70 -157.00 16684.60 7.32 0.70 3.70 18.19 11.66 0.46 0.00 0.00 0.47 1.64 0.30 -1.00 0.00 0.00 -12.53 44.60 -158.00 17067.80 10.83 0.80 1.70 15.96 11.87 -1.03 0.00 0.00 0.52 1.47 0.60 -1.00 0.00 0.00 -16.78 43.80 -159.00 17725.60 6.55 1.00 1.50 9.91 12.32 -0.01 0.00 0.00 0.87 1.42 0.60 -1.00 0.00 0.00 -5.99 61.60 -160.00 17895.10 13.40 3.70 2.10 34.76 13.04 1.60 0.00 0.00 2.66 2.60 0.70 -1.00 0.00 0.00 -4.03 26.30 -161.00 17978.10 9.20 0.80 1.50 13.22 11.51 0.24 0.00 0.00 0.54 1.42 0.50 -1.00 0.00 0.00 -13.54 58.10 -162.00 18027.60 24.14 1.60 1.60 50.70 10.19 -0.06 0.00 0.00 1.33 2.20 1.30 -1.00 0.00 0.00 -14.54 107.60 -163.00 18053.20 6.48 1.70 0.60 6.93 9.61 2.37 0.00 0.00 1.37 0.68 0.40 -1.00 0.00 0.00 -3.79 5.20 -164.00 18144.00 15.40 1.70 1.40 25.64 11.10 0.35 0.00 0.00 0.43 1.64 0.80 -1.00 0.00 0.00 -28.77 96.00 -165.00 18240.40 25.80 0.90 2.40 51.64 11.07 0.20 0.00 0.00 0.46 1.94 0.60 -1.00 0.00 0.00 -45.33 64.40 -166.00 18246.90 10.53 11.00 5.40 109.68 11.41 -0.02 255.00 0.00 1.11 1.72 0.50 -1.00 0.00 0.00 -7.59 19.70 -167.00 18493.30 6.49 2.60 1.30 11.30 12.38 -1.07 0.00 0.00 2.37 1.29 0.40 -1.00 0.00 0.00 -2.19 61.30 -168.00 18524.10 7.61 1.10 1.50 12.10 12.05 -0.95 0.00 0.00 0.94 1.39 0.50 -1.00 0.00 0.00 -6.48 92.10 -169.00 18549.90 10.96 0.90 1.90 17.46 11.66 1.64 0.00 0.00 0.65 1.72 0.70 -1.00 0.00 0.00 -13.56 15.50 -170.00 18725.10 24.82 1.10 3.70 75.15 9.92 1.07 0.00 0.00 0.41 2.62 0.90 -1.00 0.00 0.00 -48.89 62.70 -171.00 18755.20 10.63 0.80 1.90 16.46 8.04 -0.03 0.00 0.00 0.53 1.32 0.40 -1.00 0.00 0.00 -16.09 92.80 -172.00 18809.30 18.21 0.90 4.20 57.27 8.77 1.00 0.00 0.00 0.50 3.18 0.60 -1.00 0.00 0.00 -29.37 18.90 -173.00 18870.20 14.89 0.70 1.40 18.91 10.00 -2.65 0.00 0.00 0.44 1.09 0.50 -1.00 0.00 0.00 -27.07 79.80 -174.00 18936.30 7.90 1.90 2.30 20.77 11.71 0.27 0.00 0.00 1.68 1.95 1.50 -1.00 0.00 0.00 -3.77 17.90 -175.00 19244.40 16.58 1.00 2.50 33.55 11.17 0.43 0.00 0.00 0.52 1.96 0.40 -1.00 0.00 0.00 -25.42 70.00 -176.00 19386.40 6.91 1.70 1.30 9.84 12.59 1.67 0.00 0.00 1.47 0.73 0.30 -1.00 0.00 0.00 -3.77 84.00 -177.00 19442.50 19.08 0.80 3.00 43.88 11.99 1.68 0.00 0.00 0.46 2.02 0.50 -1.00 0.00 0.00 -33.16 12.10 -178.00 19454.50 14.22 0.60 1.90 23.41 10.14 -0.50 0.00 0.00 0.37 2.06 0.40 -1.00 0.00 0.00 -30.62 24.10 -179.00 19549.40 7.10 1.20 6.80 34.81 11.86 -0.03 0.00 0.00 1.01 1.38 0.90 -1.00 0.00 0.00 -5.63 119.00 -180.00 19742.10 6.11 1.00 0.90 5.24 10.79 1.65 0.00 0.00 0.83 0.53 0.30 -1.00 0.00 0.00 -5.91 55.70 -181.00 19749.90 19.36 1.10 2.50 40.69 8.65 2.02 0.00 0.00 0.73 2.13 0.70 -1.00 0.00 0.00 -21.31 63.50 -182.00 19770.30 6.37 1.50 0.40 7.25 8.00 0.60 0.00 0.00 1.36 0.66 0.40 -1.00 0.00 0.00 -3.75 83.90 -183.00 19781.00 6.22 1.30 0.60 6.43 8.07 0.42 0.00 0.00 1.15 0.57 0.20 -1.00 0.00 0.00 -4.33 94.60 -184.00 19918.90 9.28 1.60 2.90 22.57 11.29 -0.13 0.00 0.00 0.56 1.44 0.40 -1.00 0.00 0.00 -13.23 78.90 -185.00 19930.70 15.61 1.00 1.80 25.68 8.79 -0.07 0.00 0.00 0.51 1.90 0.50 -1.00 0.00 0.00 -24.41 116.30 -186.00 19943.90 10.53 0.80 1.60 17.89 8.99 -1.36 0.00 0.00 0.58 1.88 0.50 -1.00 0.00 0.00 -14.64 1.50 -187.00 19946.80 6.75 3.70 1.30 24.18 7.91 -1.68 255.00 0.00 3.57 0.88 0.40 -1.00 0.00 0.00 -1.51 81.20 -188.00 19955.50 9.34 1.60 1.50 18.57 9.13 0.10 0.00 0.00 1.39 2.24 1.10 -1.00 0.00 0.00 -5.38 13.10 -189.00 20048.50 15.66 0.90 2.70 31.56 9.16 1.31 0.00 0.00 0.62 2.01 0.50 -1.00 0.00 0.00 -20.32 106.10 -190.00 20163.60 6.94 2.10 1.10 12.67 10.80 0.95 0.00 0.00 1.90 1.75 0.90 -1.00 0.00 0.00 -2.91 93.20 -191.00 20348.10 8.63 0.80 1.50 12.00 9.66 -0.34 0.00 0.00 0.50 1.35 0.60 -1.00 0.00 0.00 -13.83 21.70 -192.00 20463.60 17.05 0.80 2.90 42.37 12.39 -0.83 0.00 0.00 0.49 3.13 0.50 -1.00 0.00 0.00 -27.61 9.20 -193.00 20725.10 11.60 1.60 2.20 24.08 10.94 0.79 0.00 0.00 1.38 1.60 1.20 -1.00 0.00 0.00 -6.71 14.70 -194.00 20949.40 6.36 1.60 1.20 8.82 10.76 -0.87 0.00 0.00 1.10 0.99 0.80 -1.00 0.00 0.00 -4.64 85.40 -195.00 21119.60 15.06 0.90 3.90 44.04 11.49 -0.49 0.00 0.00 0.59 2.36 0.60 -1.00 0.00 0.00 -20.53 25.20 -196.00 21142.00 21.24 3.20 1.70 39.19 8.16 0.26 0.00 0.00 0.69 1.65 0.60 -1.00 0.00 0.00 -24.73 47.60 -197.00 21160.30 13.21 0.90 2.70 31.38 8.47 0.65 0.00 0.00 0.36 2.43 0.40 -1.00 0.00 0.00 -29.35 65.90 -198.00 21167.80 11.83 4.00 2.30 31.32 7.51 1.05 255.00 0.00 1.74 2.05 0.50 -1.00 0.00 0.00 -5.43 73.40 -199.00 21177.10 16.25 1.00 2.30 31.64 7.13 -0.03 0.00 0.00 0.71 1.46 0.70 -1.00 0.00 0.00 -18.19 82.70 -200.00 21180.80 12.57 7.90 1.40 66.60 9.70 -0.36 255.00 0.00 4.73 1.59 0.50 -1.00 0.00 0.00 -2.13 86.40 -201.00 21209.30 8.66 0.90 2.10 15.18 8.27 -1.11 0.00 0.00 0.75 1.72 0.30 -1.00 0.00 0.00 -9.29 114.90 -202.00 21564.20 6.07 2.20 1.10 9.03 9.57 -0.46 0.00 0.00 1.85 0.95 0.30 -1.00 0.00 0.00 -2.63 85.80 -203.00 21689.00 8.02 0.50 2.50 16.80 10.58 -0.66 0.00 0.00 0.39 2.30 0.30 -1.00 0.00 0.00 -16.62 82.60 -204.00 21710.00 8.59 6.40 1.70 31.07 10.62 0.05 0.00 0.00 6.24 1.86 0.80 -1.00 0.00 0.00 -1.10 1.20 -205.00 21746.20 9.46 2.20 3.20 27.63 11.67 2.60 0.00 0.00 0.91 1.82 1.00 -1.00 0.00 0.00 -8.32 11.80 -206.00 21806.90 11.74 0.60 1.80 17.01 10.87 0.17 0.00 0.00 0.38 1.21 0.30 -1.00 0.00 0.00 -24.97 72.50 -207.00 21930.80 7.14 2.90 1.50 16.76 11.23 -2.98 0.00 0.00 2.44 0.99 0.20 -1.00 0.00 0.00 -2.34 68.40 -208.00 22102.20 14.37 1.00 2.50 31.27 11.68 -0.60 0.00 0.00 0.65 2.26 0.70 -1.00 0.00 0.00 -17.70 111.80 -209.00 22199.70 6.47 1.50 0.30 6.53 11.59 -0.86 0.00 0.00 1.25 0.99 0.90 -1.00 0.00 0.00 -4.13 81.30 -210.00 22325.50 9.67 5.00 3.10 36.44 12.41 -0.51 255.00 0.00 3.32 1.70 0.80 -1.00 0.00 0.00 -2.33 2.30 -211.00 22407.60 9.74 1.60 1.60 15.96 12.13 0.80 0.00 0.00 1.03 1.21 0.60 -1.00 0.00 0.00 -7.58 33.20 -212.00 22622.50 9.51 0.70 2.40 17.74 11.54 -0.13 0.00 0.00 0.50 1.68 0.60 -1.00 0.00 0.00 -15.18 120.10 -213.00 22733.60 13.86 1.20 2.50 30.52 11.78 0.42 0.00 0.00 0.73 1.86 0.80 -1.00 0.00 0.00 -15.28 103.20 -214.00 22855.30 12.96 1.60 2.10 24.90 11.62 -1.90 0.00 0.00 0.59 1.84 0.60 -1.00 0.00 0.00 -17.67 96.90 -215.00 22896.30 17.37 1.20 3.20 44.54 13.42 -0.06 0.00 0.00 0.44 2.75 0.30 -1.00 0.00 0.00 -31.88 9.90 -216.00 22904.80 11.37 1.30 18.50 195.06 11.98 -0.91 0.00 0.00 1.14 2.33 1.00 -1.00 0.00 0.00 -7.97 120.80 -217.00 22907.50 16.26 4.00 2.90 63.18 10.92 0.47 255.00 0.00 3.29 2.43 1.00 -1.00 0.00 0.00 -3.95 72.30 -218.00 22912.30 26.36 8.80 3.10 135.55 11.19 1.38 255.00 0.00 8.43 2.68 0.50 -1.00 0.00 0.00 -2.50 77.10 -219.00 23126.30 6.50 1.10 0.80 5.33 10.81 0.72 0.00 0.00 0.98 0.40 0.30 -1.00 0.00 0.00 -5.32 111.90 -220.00 23242.00 6.79 1.70 1.60 13.15 11.48 -0.70 0.00 0.00 1.52 1.13 1.00 -1.00 0.00 0.00 -3.57 74.00 -221.00 23326.20 16.93 1.00 4.60 52.84 10.30 -1.97 0.00 0.00 0.36 2.09 0.80 -1.00 0.00 0.00 -37.38 55.80 -222.00 23371.30 21.07 3.40 4.40 65.74 9.50 -0.49 0.00 0.00 0.48 1.43 0.50 -1.00 0.00 0.00 -35.26 100.90 -223.00 23390.60 9.75 1.30 2.10 19.70 7.48 0.88 0.00 0.00 0.85 2.28 0.70 -1.00 0.00 0.00 -9.14 17.80 -224.00 23395.30 7.91 1.60 2.10 16.20 7.40 -0.87 255.00 0.00 1.49 0.93 0.20 -1.00 0.00 0.00 -4.24 48.10 -225.00 23400.90 24.94 0.80 2.50 51.07 3.65 1.08 255.00 0.00 0.34 2.35 0.40 -1.00 0.00 0.00 -58.08 28.10 -226.00 23556.70 12.21 0.90 1.80 17.98 11.64 0.01 0.00 0.00 0.54 1.41 0.30 -1.00 0.00 0.00 -18.06 55.90 -227.00 23626.10 21.52 0.50 3.30 50.16 10.32 1.05 0.00 0.00 0.33 2.28 0.40 -1.00 0.00 0.00 -51.42 125.30 -228.00 23642.20 8.50 0.80 4.00 22.97 9.05 0.59 0.00 0.00 0.60 1.40 0.60 -1.00 0.00 0.00 -11.32 13.40 -229.00 23670.90 8.88 0.70 3.00 17.85 10.97 0.74 0.00 0.00 0.45 1.13 0.30 -1.00 0.00 0.00 -15.67 42.10 -230.00 23802.70 19.59 1.10 3.20 47.43 11.17 -2.79 0.00 0.00 0.47 1.82 0.80 -1.00 0.00 0.00 -33.66 45.90 -231.00 23877.80 8.38 1.60 1.60 13.82 11.11 0.65 0.00 0.00 0.76 1.72 0.80 -1.00 0.00 0.00 -8.80 121.00 -232.00 23923.30 10.01 1.60 1.90 21.28 10.81 1.69 0.00 0.00 1.46 2.22 1.40 -1.00 0.00 0.00 -5.49 38.50 -233.00 24064.90 9.34 1.20 1.30 11.20 11.24 -0.25 0.00 0.00 0.62 1.17 0.50 -1.00 0.00 0.00 -12.12 52.10 -234.00 24185.20 10.42 0.60 2.00 16.71 11.86 1.16 0.00 0.00 0.49 1.35 0.40 -1.00 0.00 0.00 -16.89 44.40 -235.00 24202.20 12.29 0.80 2.20 24.02 10.26 0.29 0.00 0.00 0.49 2.13 0.40 -1.00 0.00 0.00 -20.06 61.40 -236.00 24244.20 15.04 1.10 2.80 34.55 10.56 0.32 0.00 0.00 0.43 1.77 0.50 -1.00 0.00 0.00 -28.25 103.40 -237.00 24269.20 9.02 0.50 2.20 13.99 10.72 0.81 0.00 0.00 0.30 1.11 0.30 -1.00 0.00 0.00 -23.88 128.40 -238.00 24317.00 15.87 0.90 2.60 31.14 8.97 0.01 0.00 0.00 0.48 1.69 0.60 -1.00 0.00 0.00 -26.58 48.20 -239.00 24567.20 8.09 1.10 1.10 9.50 11.26 0.43 0.00 0.00 0.91 1.00 0.60 -1.00 0.00 0.00 -7.10 42.40 -240.00 24586.30 11.14 0.80 1.40 13.74 9.44 -0.74 0.00 0.00 0.52 1.51 0.50 -1.00 0.00 0.00 -17.20 61.50 -241.00 25310.20 6.16 1.20 0.70 6.23 10.85 1.24 0.00 0.00 1.07 1.17 0.70 -1.00 0.00 0.00 -4.60 17.40 -242.00 25408.80 6.07 1.90 1.00 9.23 10.35 1.00 0.00 0.00 1.55 1.25 0.50 -1.00 0.00 0.00 -3.13 116.00 -243.00 25417.50 8.38 1.00 3.30 23.53 11.42 0.13 0.00 0.00 0.84 3.72 0.80 -1.00 0.00 0.00 -7.97 124.70 -244.00 25429.00 8.40 1.00 1.20 12.28 10.62 0.46 0.00 0.00 0.81 1.71 0.70 -1.00 0.00 0.00 -8.29 8.20 -245.00 25615.10 15.17 0.90 3.00 36.93 10.26 2.51 0.00 0.00 0.63 2.09 0.70 -1.00 0.00 0.00 -19.27 66.30 -246.00 25715.50 19.57 0.90 1.90 38.08 11.79 -1.22 0.00 0.00 0.48 2.07 0.60 -1.00 0.00 0.00 -32.83 38.70 -247.00 25725.10 7.49 1.00 1.20 9.12 9.00 -2.16 255.00 0.00 0.61 1.25 0.60 -1.00 0.00 0.00 -9.75 125.10 -248.00 25800.70 12.39 2.00 3.50 35.91 11.03 0.35 0.00 0.00 1.17 2.22 1.10 -1.00 0.00 0.00 -8.46 123.90 -249.00 26417.80 13.80 0.60 1.80 21.06 10.03 0.53 0.00 0.00 0.51 1.37 0.40 -1.00 0.00 0.00 -21.67 101.00 -250.00 26451.40 11.81 1.60 3.90 37.14 9.17 -0.38 0.00 0.00 1.03 1.99 1.00 -1.00 0.00 0.00 -9.15 6.60 -251.00 26453.90 11.74 6.40 3.50 64.51 11.34 -1.03 255.00 0.00 4.05 4.87 3.50 -1.00 0.00 0.00 -2.32 85.90 -252.00 26542.20 6.82 1.50 0.40 7.46 7.31 -0.54 0.00 0.00 1.34 1.27 1.00 -1.00 0.00 0.00 -4.08 97.40 -253.00 26545.60 6.35 1.20 0.70 6.29 8.07 -0.78 0.00 0.00 0.89 1.12 0.80 -1.00 0.00 0.00 -5.69 75.20 -254.00 26570.90 7.38 1.40 1.00 9.24 9.66 -0.80 0.00 0.00 1.12 0.70 0.30 -1.00 0.00 0.00 -5.28 126.10 -255.00 26578.60 8.92 1.30 2.30 19.66 9.82 0.74 0.00 0.00 0.75 2.63 0.60 -1.00 0.00 0.00 -9.58 5.80 -256.00 26580.30 7.88 2.90 0.50 17.05 9.13 -0.80 255.00 0.00 2.49 2.61 2.30 -1.00 0.00 0.00 -2.53 84.30 -257.00 26745.90 13.32 0.60 3.60 37.53 11.36 -0.80 0.00 0.00 0.34 3.76 0.50 -1.00 0.00 0.00 -31.53 45.10 -258.00 26812.70 6.13 1.30 0.60 5.56 9.54 -1.13 0.00 0.00 0.88 0.74 0.40 -1.00 0.00 0.00 -5.56 86.30 -259.00 26870.60 7.89 1.30 1.60 12.31 11.38 1.15 0.00 0.00 0.87 1.55 0.70 -1.00 0.00 0.00 -7.24 41.80 -260.00 27146.10 6.35 2.00 0.40 7.15 12.23 1.65 0.00 0.00 1.91 0.41 0.20 -1.00 0.00 0.00 -2.66 61.30 -261.00 27176.30 7.11 1.00 1.80 11.29 12.17 -0.89 0.00 0.00 0.83 1.32 0.50 -1.00 0.00 0.00 -6.84 91.50 -262.00 27292.30 13.78 0.60 1.90 20.82 10.80 -1.40 0.00 0.00 0.41 1.49 0.40 -1.00 0.00 0.00 -27.01 79.50 -263.00 27374.80 12.18 1.60 3.00 34.45 10.16 0.05 0.00 0.00 1.41 2.40 0.40 -1.00 0.00 0.00 -6.92 34.00 -264.00 27458.00 15.30 0.90 1.40 23.20 7.18 0.33 0.00 0.00 0.31 1.61 0.70 -1.00 0.00 0.00 -39.59 117.20 -265.00 27532.90 7.75 2.10 1.90 15.71 9.09 0.25 0.00 0.00 1.92 1.60 0.50 -1.00 0.00 0.00 -3.23 64.10 -266.00 27551.60 6.51 2.20 4.10 21.79 10.25 -0.16 0.00 0.00 2.05 1.01 0.30 -1.00 0.00 0.00 -2.54 57.20 -267.00 27672.10 6.08 1.00 1.80 9.29 10.14 -0.52 0.00 0.00 0.75 1.50 0.40 -1.00 0.00 0.00 -6.47 75.30 -268.00 28151.20 11.12 2.00 1.30 19.76 10.08 0.24 0.00 0.00 0.96 1.79 0.70 -1.00 0.00 0.00 -9.27 16.80 -269.00 28285.20 6.80 2.60 1.50 13.90 11.92 0.10 0.00 0.00 1.58 2.33 1.10 -1.00 0.00 0.00 -3.45 48.40 -270.00 28423.00 9.56 3.00 1.80 20.25 10.61 -0.42 0.00 0.00 2.10 1.25 0.50 -1.00 0.00 0.00 -3.64 58.20 -271.00 28663.10 16.06 1.40 1.20 20.36 10.16 -0.88 0.00 0.00 1.05 1.30 0.50 -1.00 0.00 0.00 -12.29 42.30 -272.00 28666.40 6.92 1.70 1.80 12.78 8.90 0.39 255.00 0.00 1.58 1.45 0.60 -1.00 0.00 0.00 -3.51 122.40 -273.00 28694.10 6.29 1.10 0.50 5.01 13.01 0.29 0.00 0.00 0.93 0.50 0.20 -1.00 0.00 0.00 -5.38 73.30 -274.00 28762.00 6.12 0.50 1.60 9.02 10.51 0.15 0.00 0.00 0.39 1.82 0.40 -1.00 0.00 0.00 -12.40 13.20 -275.00 28811.00 6.44 3.20 1.00 11.57 10.54 0.16 0.00 0.00 2.30 1.08 0.20 -1.00 0.00 0.00 -2.24 62.20 -276.00 28969.60 14.92 1.40 1.40 26.91 10.31 -0.35 0.00 0.00 0.48 1.96 1.10 -1.00 0.00 0.00 -24.94 92.80 -277.00 28991.50 15.73 1.50 1.70 33.57 7.85 1.51 0.00 0.00 1.11 2.49 1.30 -1.00 0.00 0.00 -11.35 114.70 -278.00 29189.00 9.67 1.30 3.20 24.75 11.02 0.67 0.00 0.00 1.10 1.46 0.70 -1.00 0.00 0.00 -7.01 56.20 -279.00 29245.30 12.46 2.80 1.70 32.90 11.51 0.23 0.00 0.00 1.94 2.71 1.60 -1.00 0.00 0.00 -5.13 112.50 -280.00 29603.80 17.15 0.70 2.50 35.61 11.50 -0.36 0.00 0.00 0.42 1.95 0.40 -1.00 0.00 0.00 -32.43 87.00 -281.00 29712.30 8.83 1.30 1.70 13.38 11.19 -0.42 0.00 0.00 0.69 1.36 0.30 -1.00 0.00 0.00 -10.17 67.50 -282.00 29843.00 20.52 1.00 2.80 47.30 11.62 -0.20 0.00 0.00 0.42 2.32 0.60 -1.00 0.00 0.00 -39.51 70.20 -283.00 29991.10 6.41 1.80 1.30 11.53 10.43 0.63 0.00 0.00 1.56 1.09 0.50 -1.00 0.00 0.00 -3.28 90.30 -284.00 30167.40 11.17 1.80 2.00 25.27 10.86 -1.91 0.00 0.00 1.67 2.49 1.30 -1.00 0.00 0.00 -5.36 10.60 -285.00 30268.10 7.71 6.70 0.80 24.39 10.81 0.98 0.00 0.00 5.25 1.12 0.80 -1.00 0.00 0.00 -1.18 60.10 -286.00 30436.30 19.77 1.20 3.10 53.12 10.49 0.21 0.00 0.00 0.91 2.20 1.00 -1.00 0.00 0.00 -17.39 23.50 -287.00 30508.00 12.21 1.40 2.50 22.88 10.19 -0.80 0.00 0.00 0.65 1.12 0.50 -1.00 0.00 0.00 -14.99 95.20 -288.00 30560.10 9.87 0.80 3.60 25.77 10.34 1.87 0.00 0.00 0.65 2.63 0.30 -1.00 0.00 0.00 -12.13 19.30 -289.00 30572.30 8.79 0.60 2.40 15.53 8.00 0.37 0.00 0.00 0.41 1.21 0.40 -1.00 0.00 0.00 -17.28 31.50 -290.00 30617.90 9.03 1.30 1.30 12.74 11.19 -1.97 0.00 0.00 0.94 1.14 0.50 -1.00 0.00 0.00 -7.66 77.10 -291.00 30657.00 18.06 1.90 4.60 76.15 12.55 0.01 0.00 0.00 0.99 4.66 1.10 -1.00 0.00 0.00 -14.61 116.20 -292.00 30779.50 14.13 0.90 3.30 32.69 11.63 -1.28 0.00 0.00 0.58 2.04 0.60 -1.00 0.00 0.00 -19.43 110.70 -293.00 30824.10 18.23 0.70 2.00 29.13 11.08 -1.34 0.00 0.00 0.35 1.36 0.50 -1.00 0.00 0.00 -41.74 27.30 -294.00 30831.60 20.76 8.30 2.30 98.04 11.45 0.20 255.00 0.00 7.86 2.16 0.70 -1.00 0.00 0.00 -2.11 111.60 -295.00 30951.70 7.76 0.60 1.00 8.07 10.28 -2.73 0.00 0.00 0.43 1.09 0.50 -1.00 0.00 0.00 -14.49 26.90 -296.00 30976.90 14.89 1.30 2.50 30.34 11.52 -1.18 0.00 0.00 0.75 1.67 0.70 -1.00 0.00 0.00 -15.81 52.10 -297.00 30984.90 11.00 9.10 1.80 69.74 11.08 -0.23 255.00 0.00 8.84 2.11 0.90 -1.00 0.00 0.00 -1.00 8.90 -298.00 31129.60 14.46 1.20 2.80 31.10 12.21 -0.64 0.00 0.00 0.36 1.86 0.40 -1.00 0.00 0.00 -32.35 76.80 -299.00 31155.10 8.77 1.60 0.80 9.75 10.79 -0.74 0.00 0.00 1.24 0.90 0.60 -1.00 0.00 0.00 -5.64 102.30 -300.00 31286.80 6.35 3.20 2.30 18.65 9.60 -0.34 0.00 0.00 2.42 1.86 1.10 -1.00 0.00 0.00 -2.10 54.80 -301.00 31383.00 28.78 0.90 4.90 97.82 10.18 0.06 0.00 0.00 0.67 1.80 0.70 -1.00 0.00 0.00 -34.20 23.00 -302.00 31390.10 18.88 11.80 6.30 217.40 13.09 -0.96 255.00 0.00 8.44 3.18 0.90 -1.00 0.00 0.00 -1.79 30.10 -303.00 31516.40 16.72 1.00 5.80 70.55 9.31 2.29 0.00 0.00 0.52 4.41 0.80 -1.00 0.00 0.00 -25.96 79.60 -304.00 31689.30 6.40 3.50 1.20 11.02 10.81 0.72 0.00 0.00 2.07 0.44 0.30 -1.00 0.00 0.00 -2.47 124.50 -305.00 31738.40 19.76 0.80 4.10 59.44 11.46 -0.80 0.00 0.00 0.50 3.50 0.50 -1.00 0.00 0.00 -31.45 45.60 -306.00 31783.60 26.43 0.70 2.10 45.81 10.26 0.07 0.00 0.00 0.50 1.80 0.50 -1.00 0.00 0.00 -42.34 90.80 -307.00 31987.60 8.08 0.60 3.10 18.72 9.10 -1.55 0.00 0.00 0.42 1.63 0.30 -1.00 0.00 0.00 -15.55 38.80 -308.00 32072.00 9.10 1.70 5.20 44.15 11.47 -1.17 255.00 0.00 1.44 3.22 0.70 -1.00 0.00 0.00 -5.07 97.60 -309.00 32073.30 13.82 3.00 3.80 49.09 12.23 -0.97 0.00 0.00 2.72 1.81 0.70 -1.00 0.00 0.00 -4.07 73.30 -310.00 32155.40 14.04 0.80 1.80 22.94 11.36 -0.22 0.00 0.00 0.55 1.47 0.60 -1.00 0.00 0.00 -20.61 78.60 -311.00 32267.10 9.52 0.80 4.10 29.43 11.39 0.95 0.00 0.00 0.34 3.11 0.20 -1.00 0.00 0.00 -22.63 62.30 -312.00 32356.40 17.16 0.80 2.10 29.68 11.17 -1.18 0.00 0.00 0.45 1.86 0.40 -1.00 0.00 0.00 -30.38 23.60 -313.00 32469.10 6.20 1.50 1.00 9.77 10.61 1.86 0.00 0.00 1.28 1.47 0.70 -1.00 0.00 0.00 -3.87 85.10 -314.00 32608.10 11.30 0.80 2.30 19.75 11.74 0.12 0.00 0.00 0.49 1.58 0.60 -1.00 0.00 0.00 -18.54 19.30 -315.00 32687.50 11.82 0.60 2.50 20.81 10.79 -0.94 0.00 0.00 0.33 1.58 0.50 -1.00 0.00 0.00 -28.60 98.70 -316.00 33050.50 7.45 0.70 1.70 9.40 10.81 0.10 0.00 0.00 0.52 0.64 0.50 -1.00 0.00 0.00 -11.40 77.70 -317.00 33165.90 6.60 0.80 1.30 8.63 11.03 1.00 0.00 0.00 0.62 1.44 0.30 -1.00 0.00 0.00 -8.50 65.10 -318.00 33206.40 10.72 0.80 2.90 25.12 11.04 -0.70 0.00 0.00 0.53 2.97 0.40 -1.00 0.00 0.00 -16.28 105.60 -319.00 33510.90 16.43 0.90 2.00 30.79 11.50 0.45 0.00 0.00 0.59 1.81 0.60 -1.00 0.00 0.00 -22.35 26.10 -320.00 33592.20 6.12 2.50 0.80 12.65 12.52 -0.25 0.00 0.00 1.74 2.27 1.70 -1.00 0.00 0.00 -2.81 56.20 -321.00 33645.70 6.14 2.30 1.20 9.82 12.16 -2.83 0.00 0.00 1.14 0.93 0.40 -1.00 0.00 0.00 -4.31 32.90 -322.00 33701.20 7.09 2.90 1.80 14.22 11.85 -1.84 0.00 0.00 1.90 1.39 0.40 -1.00 0.00 0.00 -2.99 88.40 -323.00 33752.30 12.94 0.60 1.70 18.60 10.48 -0.09 0.00 0.00 0.44 1.27 0.30 -1.00 0.00 0.00 -23.38 11.50 -324.00 33974.10 6.46 1.30 1.80 10.40 9.85 0.58 0.00 0.00 1.14 0.94 0.20 -1.00 0.00 0.00 -4.53 105.30 -325.00 34023.20 26.30 1.20 4.40 82.97 11.94 -1.10 0.00 0.00 0.64 2.66 0.70 -1.00 0.00 0.00 -32.80 26.40 -326.00 34129.90 12.45 0.80 2.30 23.61 9.69 -1.11 0.00 0.00 0.62 1.74 0.50 -1.00 0.00 0.00 -15.97 5.10 -327.00 34152.40 24.19 0.80 2.60 52.11 10.22 -0.14 0.00 0.00 0.42 2.21 0.40 -1.00 0.00 0.00 -46.47 27.60 -328.00 34311.90 7.33 7.60 0.60 22.21 11.29 0.10 0.00 0.00 4.15 1.51 1.10 -1.00 0.00 0.00 -1.41 7.90 -329.00 34498.70 31.93 1.00 3.00 74.95 12.06 0.70 0.00 0.00 0.49 2.31 0.60 -1.00 0.00 0.00 -51.65 117.90 -330.00 34539.90 7.74 1.60 0.60 8.77 9.97 -0.53 0.00 0.00 1.19 0.87 0.70 -1.00 0.00 0.00 -5.21 31.10 -331.00 34611.30 6.45 1.70 0.90 10.04 9.76 -2.08 0.00 0.00 1.50 1.53 1.40 -1.00 0.00 0.00 -3.44 51.30 -332.00 34630.80 6.14 1.10 0.50 4.66 8.45 1.72 0.00 0.00 0.94 0.62 0.40 -1.00 0.00 0.00 -5.23 122.00 -333.00 34632.20 9.31 2.60 1.10 16.84 9.03 0.29 255.00 0.00 0.70 1.46 0.60 -1.00 0.00 0.00 -10.67 72.20 -334.00 34700.60 21.80 1.20 7.70 112.68 10.35 -1.08 0.00 0.00 0.44 2.78 0.60 -1.00 0.00 0.00 -39.88 63.80 -335.00 34705.10 16.47 5.60 3.40 111.66 10.11 -0.05 255.00 0.00 4.85 8.00 5.10 -1.00 0.00 0.00 -2.72 17.10 -336.00 34875.50 12.63 0.90 1.60 19.14 11.84 -0.93 0.00 0.00 0.68 1.60 0.60 -1.00 0.00 0.00 -14.80 110.70 -337.00 34879.00 9.42 4.40 1.40 39.54 12.74 -0.75 255.00 0.00 4.20 1.17 0.50 -1.00 0.00 0.00 -1.79 63.00 -338.00 34985.40 12.52 2.60 3.20 34.60 11.70 -0.81 0.00 0.00 0.39 2.13 0.40 -1.00 0.00 0.00 -25.86 92.60 -339.00 35389.70 10.88 3.20 1.70 24.84 12.79 0.32 0.00 0.00 2.56 1.73 0.80 -1.00 0.00 0.00 -3.40 112.90 -340.00 35510.80 7.88 0.90 1.70 12.72 10.44 2.70 0.00 0.00 0.78 1.37 0.60 -1.00 0.00 0.00 -8.09 106.00 -341.00 35553.80 13.21 0.50 1.90 21.82 8.57 -1.35 0.00 0.00 0.29 1.76 0.30 -1.00 0.00 0.00 -37.07 21.00 -342.00 35661.90 13.59 1.10 4.10 40.84 10.70 0.23 0.00 0.00 0.79 2.87 0.40 -1.00 0.00 0.00 -13.71 1.10 -343.00 35690.20 14.93 0.80 3.70 38.86 9.79 -0.16 0.00 0.00 0.58 2.34 0.30 -1.00 0.00 0.00 -20.71 29.40 -344.00 35895.20 6.12 2.20 1.40 11.16 12.11 0.53 0.00 0.00 1.82 1.48 0.80 -1.00 0.00 0.00 -2.69 55.20 -345.00 36050.20 11.88 1.20 2.10 24.12 11.36 1.20 0.00 0.00 0.44 1.61 1.00 -1.00 0.00 0.00 -21.81 5.40 -346.00 36209.70 15.66 0.70 1.80 25.92 11.18 -0.19 0.00 0.00 0.46 1.97 0.50 -1.00 0.00 0.00 -27.46 36.90 -347.00 36283.40 6.11 1.60 0.80 6.86 10.54 1.12 0.00 0.00 1.32 0.77 0.40 -1.00 0.00 0.00 -3.71 110.60 -348.00 36557.00 9.25 0.60 1.80 13.18 9.53 -0.64 0.00 0.00 0.53 0.88 0.40 -1.00 0.00 0.00 -13.89 77.00 -349.00 36568.10 28.59 1.00 2.00 52.76 9.14 0.58 0.00 0.00 0.48 1.77 0.70 -1.00 0.00 0.00 -47.83 11.30 -350.00 36794.10 7.06 0.80 0.40 4.41 11.08 0.55 0.00 0.00 0.69 0.60 0.50 -1.00 0.00 0.00 -8.23 58.10 -351.00 36827.50 12.67 0.50 1.90 19.14 9.23 1.06 0.00 0.00 0.39 1.43 0.30 -1.00 0.00 0.00 -25.96 14.70 -352.00 36837.50 6.48 1.70 2.70 16.32 9.51 0.21 255.00 0.00 1.55 0.95 0.50 -1.00 0.00 0.00 -3.34 101.50 -353.00 36911.70 6.89 3.60 1.50 15.72 10.22 1.57 0.00 0.00 1.45 1.41 0.30 -1.00 0.00 0.00 -3.80 22.10 -354.00 36917.90 7.13 1.20 3.20 18.10 11.12 -0.46 0.00 0.00 0.99 1.02 0.70 -1.00 0.00 0.00 -5.76 53.90 -355.00 37046.60 7.62 1.40 2.60 20.19 11.62 0.39 0.00 0.00 1.11 3.26 1.00 -1.00 0.00 0.00 -5.49 29.00 -356.00 37133.80 33.31 1.30 3.20 86.12 11.56 -0.79 0.00 0.00 0.67 2.52 0.80 -1.00 0.00 0.00 -40.02 116.20 -357.00 37217.10 6.67 3.80 0.90 16.17 10.58 -1.35 0.00 0.00 3.25 1.95 1.40 -1.00 0.00 0.00 -1.64 97.10 -358.00 37322.80 7.09 2.20 2.50 19.02 12.95 -0.13 0.00 0.00 2.05 2.13 0.50 -1.00 0.00 0.00 -2.77 49.20 -359.00 37332.00 6.21 1.10 1.60 9.82 9.57 0.41 0.00 0.00 0.86 1.21 0.80 -1.00 0.00 0.00 -5.77 58.40 -360.00 37568.70 13.85 1.10 3.00 32.15 10.69 -0.26 0.00 0.00 0.33 1.98 0.30 -1.00 0.00 0.00 -33.21 39.10 -361.00 37595.90 11.18 10.40 3.00 68.01 9.32 2.14 255.00 0.00 6.23 2.39 0.70 -1.00 0.00 0.00 -1.44 91.90 -362.00 37618.90 7.14 1.70 0.40 5.76 9.58 0.03 0.00 0.00 0.64 0.51 0.30 -1.00 0.00 0.00 -8.86 89.30 -363.00 37711.70 6.71 4.10 1.50 18.07 11.79 0.93 0.00 0.00 3.69 1.05 0.30 -1.00 0.00 0.00 -1.45 79.70 -364.00 37790.20 6.07 0.70 1.60 8.69 10.39 2.28 0.00 0.00 0.56 1.74 0.40 -1.00 0.00 0.00 -8.66 4.60 -365.00 37849.90 31.42 1.30 3.50 88.78 12.68 -0.24 0.00 0.00 0.81 3.13 0.80 -1.00 0.00 0.00 -30.88 64.30 -366.00 37855.50 12.70 10.00 2.70 146.62 13.34 -0.01 255.00 0.00 6.56 8.73 6.60 -1.00 0.00 0.00 -1.55 95.50 -367.00 38032.50 20.14 1.00 1.90 36.30 10.44 0.23 0.00 0.00 0.61 1.89 0.70 -1.00 0.00 0.00 -26.24 118.90 -368.00 38123.20 7.89 1.70 1.20 10.67 11.44 -1.29 0.00 0.00 0.69 1.11 0.30 -1.00 0.00 0.00 -9.20 81.60 -369.00 38226.80 19.71 1.30 3.10 56.95 12.66 0.20 0.00 0.00 0.97 3.01 0.90 -1.00 0.00 0.00 -16.28 57.20 -370.00 38303.00 10.02 3.60 4.50 46.75 12.17 0.31 0.00 0.00 1.14 5.11 1.00 -1.00 0.00 0.00 -7.03 5.40 -371.00 38306.80 10.22 7.40 0.70 48.71 12.41 0.85 255.00 0.00 4.82 5.13 4.80 -1.00 0.00 0.00 -1.70 34.80 -372.00 38688.60 24.03 0.80 2.00 43.48 12.04 0.18 0.00 0.00 0.61 1.84 0.60 -1.00 0.00 0.00 -31.68 7.00 -373.00 38750.70 8.99 2.30 2.20 21.68 10.59 1.32 0.00 0.00 2.07 2.22 0.40 -1.00 0.00 0.00 -3.48 69.10 -374.00 38978.50 6.25 0.60 0.80 4.53 10.83 0.69 0.00 0.00 0.26 0.59 0.30 -1.00 0.00 0.00 -18.91 40.90 -375.00 39014.10 11.24 0.80 2.40 19.97 11.33 -0.32 0.00 0.00 0.51 1.34 0.50 -1.00 0.00 0.00 -17.57 76.50 -376.00 39043.30 9.02 1.20 1.90 17.11 11.63 1.11 0.00 0.00 0.76 1.62 0.70 -1.00 0.00 0.00 -9.46 105.70 -377.00 39123.50 6.32 2.50 1.70 15.06 11.55 -1.85 0.00 0.00 1.25 2.16 1.20 -1.00 0.00 0.00 -4.05 57.90 -378.00 39174.40 7.23 4.70 1.30 15.52 13.35 -1.32 0.00 0.00 1.44 0.74 0.20 -1.00 0.00 0.00 -4.02 108.80 -379.00 39387.00 7.04 2.50 3.40 22.68 11.98 -0.09 0.00 0.00 1.55 3.30 0.40 -1.00 0.00 0.00 -3.63 65.40 -380.00 39553.30 18.55 0.80 1.80 29.68 10.53 -2.64 0.00 0.00 0.47 1.30 0.50 -1.00 0.00 0.00 -31.81 103.70 -381.00 39586.70 7.47 3.30 1.50 18.14 11.09 1.29 0.00 0.00 3.16 0.62 0.20 -1.00 0.00 0.00 -1.89 9.10 -382.00 39596.80 17.05 1.40 3.30 48.41 11.06 -0.78 0.00 0.00 0.81 2.65 0.80 -1.00 0.00 0.00 -16.83 19.20 -383.00 39629.60 12.24 0.70 2.20 22.16 9.29 0.02 0.00 0.00 0.49 1.34 0.60 -1.00 0.00 0.00 -20.06 52.00 -384.00 39653.50 7.21 4.20 1.90 19.45 11.12 -1.36 0.00 0.00 0.57 1.96 0.20 -1.00 0.00 0.00 -10.17 75.90 -385.00 39705.20 11.11 1.20 1.50 17.41 10.90 -0.35 0.00 0.00 0.88 1.68 0.60 -1.00 0.00 0.00 -10.09 -0.40 -386.00 39711.10 6.26 7.80 0.60 34.46 11.26 -0.15 255.00 0.00 7.03 0.66 0.20 -1.00 0.00 0.00 -0.71 31.10 -387.00 40122.80 11.49 1.40 1.20 18.82 10.78 -0.32 0.00 0.00 0.67 1.84 0.90 -1.00 0.00 0.00 -13.64 33.20 -388.00 40206.70 6.56 1.50 2.10 12.11 11.91 -1.26 0.00 0.00 1.39 0.46 0.20 -1.00 0.00 0.00 -3.78 14.70 -389.00 40636.40 19.36 1.80 3.90 66.69 12.65 -0.97 0.00 0.00 1.33 3.23 1.30 -1.00 0.00 0.00 -11.62 34.80 -390.00 40703.30 7.65 1.10 3.70 22.06 10.15 0.42 0.00 0.00 0.88 2.88 0.80 -1.00 0.00 0.00 -6.92 101.70 -391.00 41039.20 6.29 4.30 2.40 21.99 12.62 -0.97 0.00 0.00 4.14 1.89 0.60 -1.00 0.00 0.00 -1.22 79.20 -392.00 41531.20 30.04 1.80 3.40 83.31 11.92 -1.76 0.00 0.00 0.58 2.44 0.70 -1.00 0.00 0.00 -41.48 33.60 -393.00 41640.30 16.57 0.90 3.40 44.71 9.73 -0.14 0.00 0.00 0.44 2.61 0.70 -1.00 0.00 0.00 -30.04 14.70 -394.00 41729.80 19.16 0.60 7.10 90.48 10.60 -0.89 0.00 0.00 0.35 3.85 0.30 -1.00 0.00 0.00 -43.23 104.20 -395.00 41735.80 13.61 7.10 2.20 109.63 11.95 1.36 255.00 0.00 6.42 7.42 6.40 -1.00 0.00 0.00 -1.70 7.80 -396.00 41778.90 6.98 1.00 2.90 18.12 9.44 0.54 0.00 0.00 0.91 2.43 0.60 -1.00 0.00 0.00 -6.11 25.30 -397.00 41785.90 6.77 9.00 1.10 40.39 11.15 0.20 255.00 0.00 0.71 1.17 0.50 -1.00 0.00 0.00 -7.58 57.90 -398.00 41807.00 13.07 0.70 2.40 21.93 11.02 1.58 0.00 0.00 0.53 1.61 0.50 -1.00 0.00 0.00 -19.62 53.40 -399.00 41862.20 8.16 0.70 1.10 9.40 9.49 1.13 0.00 0.00 0.45 1.39 0.50 -1.00 0.00 0.00 -14.36 108.60 -400.00 41877.00 7.96 3.90 1.90 25.03 9.78 -0.42 0.00 0.00 3.74 2.10 1.00 -1.00 0.00 0.00 -1.70 123.40 -401.00 41992.70 16.15 1.10 1.60 27.05 10.77 0.92 0.00 0.00 0.72 1.77 0.80 -1.00 0.00 0.00 -18.02 111.10 -402.00 42107.90 6.68 2.20 0.80 13.67 12.75 -0.13 0.00 0.00 2.07 2.31 2.00 -1.00 0.00 0.00 -2.58 21.50 -403.00 42142.00 6.34 0.40 1.60 10.20 12.50 -0.23 0.00 0.00 0.31 1.70 0.30 -1.00 0.00 0.00 -16.61 30.00 -404.00 42242.50 6.77 4.60 2.00 20.98 11.23 -0.97 0.00 0.00 4.18 1.55 1.20 -1.00 0.00 0.00 -1.30 104.90 -405.00 42284.00 7.81 3.80 0.80 13.32 11.11 0.04 0.00 0.00 3.45 0.77 0.60 -1.00 0.00 0.00 -1.81 18.40 -406.00 42347.90 6.25 3.10 2.00 15.70 10.74 0.34 0.00 0.00 2.71 0.90 0.60 -1.00 0.00 0.00 -1.85 82.30 -407.00 42539.30 9.00 2.50 4.10 31.18 12.74 -0.39 0.00 0.00 0.57 2.61 0.60 -1.00 0.00 0.00 -12.55 17.70 -408.00 42556.40 17.02 0.90 3.90 48.80 13.01 -0.67 0.00 0.00 0.43 2.30 0.70 -1.00 0.00 0.00 -31.91 34.80 -409.00 42580.40 6.06 1.80 0.90 8.58 12.08 -0.30 0.00 0.00 1.57 1.23 1.20 -1.00 0.00 0.00 -3.08 58.80 -410.00 42752.40 6.49 4.00 1.00 14.36 11.19 2.66 0.00 0.00 0.75 1.20 0.60 -1.00 0.00 0.00 -6.90 102.80 -411.00 42876.40 27.91 1.20 1.90 53.35 11.88 -0.61 0.00 0.00 0.53 2.27 0.90 -1.00 0.00 0.00 -42.47 98.80 -412.00 43107.10 6.20 0.90 0.90 5.82 12.15 -0.83 0.00 0.00 0.73 0.71 0.40 -1.00 0.00 0.00 -6.81 73.50 -413.00 43359.10 17.65 0.90 2.10 37.44 11.53 -0.68 0.00 0.00 0.60 2.15 0.60 -1.00 0.00 0.00 -23.68 18.30 -414.00 43418.60 8.97 1.20 2.00 17.48 10.98 0.57 0.00 0.00 0.96 1.72 0.80 -1.00 0.00 0.00 -7.50 129.00 -415.00 43447.90 19.12 0.90 2.60 44.31 10.54 0.99 0.00 0.00 0.44 2.47 0.70 -1.00 0.00 0.00 -34.92 30.30 -416.00 43635.10 6.55 1.60 1.30 9.61 11.01 2.31 0.00 0.00 1.24 0.55 0.40 -1.00 0.00 0.00 -4.24 89.50 -417.00 43672.50 7.83 6.40 2.60 25.45 12.90 0.63 0.00 0.00 0.68 1.44 0.40 -1.00 0.00 0.00 -9.15 24.50 -418.00 43762.70 10.90 1.30 2.50 27.35 11.83 0.79 0.00 0.00 1.06 1.89 0.90 -1.00 0.00 0.00 -8.26 89.10 -419.00 43891.80 6.07 0.90 3.10 15.62 12.13 -0.29 0.00 0.00 0.52 2.62 0.50 -1.00 0.00 0.00 -9.31 90.20 -420.00 44264.40 9.60 0.80 1.50 13.32 13.00 0.68 0.00 0.00 0.58 1.54 0.60 -1.00 0.00 0.00 -13.22 78.80 -421.00 44343.60 6.33 2.50 0.50 10.15 13.67 -1.39 0.00 0.00 2.40 1.34 1.10 -1.00 0.00 0.00 -2.11 30.00 -422.00 44465.20 14.02 0.90 2.40 30.82 12.08 0.05 0.00 0.00 0.76 2.52 0.70 -1.00 0.00 0.00 -14.69 23.60 -423.00 44650.10 20.94 0.80 4.10 63.64 13.21 0.34 0.00 0.00 0.46 2.53 0.60 -1.00 0.00 0.00 -36.32 80.50 -424.00 45072.10 6.99 1.40 2.40 13.03 11.79 0.23 0.00 0.00 0.91 1.35 0.50 -1.00 0.00 0.00 -6.13 118.50 -425.00 45140.60 22.67 1.00 2.90 49.61 12.01 0.77 0.00 0.00 0.49 1.79 0.50 -1.00 0.00 0.00 -36.90 59.00 -426.00 45638.70 7.27 1.60 0.70 8.17 11.82 -0.30 0.00 0.00 1.23 0.97 0.50 -1.00 0.00 0.00 -4.74 45.10 -427.00 45665.50 6.68 1.10 1.50 9.36 11.57 -0.76 0.00 0.00 0.46 1.28 0.40 -1.00 0.00 0.00 -11.54 71.90 -428.00 45678.00 7.97 1.40 1.60 14.91 10.60 -1.40 0.00 0.00 1.18 2.04 1.20 -1.00 0.00 0.00 -5.39 84.40 -429.00 45901.20 13.35 1.00 1.50 22.24 11.00 1.14 0.00 0.00 0.87 1.71 0.90 -1.00 0.00 0.00 -12.25 51.60 -430.00 45901.30 13.87 1.10 1.40 22.42 11.05 0.08 0.00 0.00 0.90 1.69 1.00 -1.00 0.00 0.00 -12.36 51.70 -431.00 46063.00 11.10 0.90 2.50 22.60 10.99 -1.99 0.00 0.00 0.76 1.90 0.60 -1.00 0.00 0.00 -11.63 85.40 -432.00 46333.60 6.77 2.80 1.10 12.24 13.24 -1.08 0.00 0.00 2.13 0.55 0.40 -1.00 0.00 0.00 -2.54 100.00 -433.00 46463.50 35.48 0.80 2.30 75.07 10.52 0.10 0.00 0.00 0.39 2.26 0.60 -1.00 0.00 0.00 -72.79 101.90 -434.00 46786.10 14.94 0.80 2.50 26.65 11.09 0.58 0.00 0.00 0.44 1.46 0.50 -1.00 0.00 0.00 -27.02 40.50 -435.00 46904.70 7.22 0.90 0.70 7.62 10.08 -1.77 0.00 0.00 0.70 1.09 0.80 -1.00 0.00 0.00 -8.20 31.10 -436.00 46928.20 24.85 0.80 3.70 71.29 10.28 -2.24 0.00 0.00 0.48 2.75 0.50 -1.00 0.00 0.00 -41.09 54.60 -437.00 47121.50 9.80 1.30 2.00 18.79 10.71 0.81 0.00 0.00 1.12 1.90 0.80 -1.00 0.00 0.00 -7.02 119.90 -438.00 47155.60 9.02 3.60 3.30 34.80 11.87 0.96 0.00 0.00 2.55 2.96 0.50 -1.00 0.00 0.00 -2.83 51.60 -439.00 47249.10 8.26 1.40 1.30 12.21 10.28 1.36 0.00 0.00 1.26 1.42 0.40 -1.00 0.00 0.00 -5.23 119.50 -440.00 47312.20 13.22 1.10 3.20 36.61 10.07 2.56 0.00 0.00 0.84 2.92 0.90 -1.00 0.00 0.00 -12.60 54.60 -441.00 47342.50 12.95 1.20 2.20 23.98 10.10 1.34 0.00 0.00 0.65 1.74 0.40 -1.00 0.00 0.00 -16.04 84.90 -442.00 47357.80 13.71 1.20 2.90 34.72 10.48 1.30 0.00 0.00 0.78 2.28 0.70 -1.00 0.00 0.00 -14.01 100.20 -443.00 47389.90 8.15 3.10 1.40 19.50 10.01 0.02 0.00 0.00 2.90 0.85 0.60 -1.00 0.00 0.00 -2.25 4.30 -444.00 47405.90 10.51 2.30 2.90 29.81 9.63 -0.91 0.00 0.00 1.33 2.96 1.20 -1.00 0.00 0.00 -6.34 20.30 -445.00 47430.00 39.24 1.00 2.70 90.85 10.58 0.04 0.00 0.00 0.49 2.53 0.70 -1.00 0.00 0.00 -63.83 44.40 -446.00 47437.40 9.78 8.30 1.90 125.02 9.24 1.39 255.00 0.00 8.02 1.57 0.70 -1.00 0.00 0.00 -0.97 77.40 -447.00 47530.50 7.48 1.30 2.80 18.30 11.04 -0.41 0.00 0.00 1.15 1.13 0.90 -1.00 0.00 0.00 -5.21 16.90 -448.00 47587.00 6.63 1.00 2.50 13.12 11.24 -0.27 0.00 0.00 0.77 0.90 0.60 -1.00 0.00 0.00 -6.88 73.40 -449.00 48062.60 7.03 2.40 1.30 13.24 12.10 0.07 0.00 0.00 2.19 1.49 0.90 -1.00 0.00 0.00 -2.56 62.60 -450.00 48077.10 28.24 1.20 4.30 93.31 10.61 -1.73 0.00 0.00 0.36 3.02 0.80 -1.00 0.00 0.00 -62.29 51.50 -451.00 48193.20 9.75 0.80 3.30 22.97 11.49 -1.00 0.00 0.00 0.67 2.40 0.40 -1.00 0.00 0.00 -11.65 39.60 -452.00 48288.10 15.34 1.50 1.90 27.96 11.91 -0.57 0.00 0.00 0.54 2.16 0.60 -1.00 0.00 0.00 -22.81 6.50 -453.00 48380.80 13.51 1.10 2.50 25.01 11.63 -0.08 0.00 0.00 0.41 1.99 0.40 -1.00 0.00 0.00 -26.46 99.20 -454.00 48524.50 13.79 1.10 2.90 37.03 12.16 -0.10 0.00 0.00 0.96 2.34 1.00 -1.00 0.00 0.00 -11.49 114.90 -455.00 48692.90 26.18 1.00 2.90 60.56 12.02 -0.31 0.00 0.00 0.36 2.07 0.70 -1.00 0.00 0.00 -58.25 27.30 -456.00 48714.80 10.04 2.20 1.80 20.70 8.08 -0.44 255.00 0.00 1.89 1.77 0.40 -1.00 0.00 0.00 -4.25 74.80 -457.00 48764.80 27.87 1.10 2.80 71.57 10.09 1.28 0.00 0.00 0.50 2.52 0.80 -1.00 0.00 0.00 -44.83 99.20 -458.00 49009.80 6.36 2.50 1.20 11.13 10.78 0.54 0.00 0.00 1.54 1.64 0.60 -1.00 0.00 0.00 -3.30 88.20 -459.00 49028.80 6.79 2.20 1.10 10.68 9.81 -0.70 0.00 0.00 1.99 1.22 0.60 -1.00 0.00 0.00 -2.73 107.20 -460.00 49219.10 13.32 0.80 1.60 21.12 9.43 -0.64 0.00 0.00 0.49 1.91 0.60 -1.00 0.00 0.00 -21.98 41.50 -461.00 49374.70 26.15 2.60 8.30 145.82 9.36 1.18 0.00 0.00 0.50 3.50 1.10 -1.00 0.00 0.00 -41.92 69.10 -462.00 49405.00 7.49 0.80 0.80 7.45 5.33 -1.11 255.00 0.00 0.63 1.11 0.60 -1.00 0.00 0.00 -9.51 125.00 -463.00 49457.50 7.19 1.70 0.30 6.37 9.39 -1.07 0.00 0.00 1.56 0.59 0.50 -1.00 0.00 0.00 -3.69 23.90 -464.00 49496.90 11.44 0.60 3.80 27.07 10.15 -0.99 0.00 0.00 0.38 1.55 0.40 -1.00 0.00 0.00 -23.92 63.30 -465.00 49522.00 7.62 2.40 0.90 9.66 8.21 0.24 0.00 0.00 0.37 0.97 0.30 -1.00 0.00 0.00 -16.30 114.00 -466.00 49595.80 26.56 1.00 4.60 84.79 9.70 0.33 0.00 0.00 0.61 3.27 0.60 -1.00 0.00 0.00 -34.91 34.20 -467.00 49753.50 15.36 1.60 1.60 24.69 9.15 -1.35 0.00 0.00 0.55 1.53 0.60 -1.00 0.00 0.00 -22.17 63.90 -468.00 49807.10 6.75 9.70 0.70 36.67 9.45 1.34 0.00 0.00 2.94 0.85 0.30 -1.00 0.00 0.00 -1.84 117.50 -469.00 49880.30 9.66 0.80 2.80 25.34 10.50 1.41 0.00 0.00 0.38 2.82 0.40 -1.00 0.00 0.00 -20.26 62.70 -470.00 49961.00 19.31 0.70 3.10 40.09 10.43 1.05 0.00 0.00 0.43 1.55 0.50 -1.00 0.00 0.00 -36.04 15.40 -471.00 50074.70 6.87 0.90 2.00 11.36 12.17 0.96 0.00 0.00 0.67 1.22 0.70 -1.00 0.00 0.00 -8.22 1.10 -472.00 50107.30 9.41 0.30 2.30 20.45 10.23 -1.33 0.00 0.00 0.19 2.21 0.20 -1.00 0.00 0.00 -40.38 8.10 -473.00 50268.00 21.34 0.90 4.70 73.88 11.39 2.63 0.00 0.00 0.36 3.64 0.60 -1.00 0.00 0.00 -47.65 66.40 -474.00 50305.60 12.40 0.80 2.70 29.84 9.90 0.63 0.00 0.00 0.59 2.65 0.60 -1.00 0.00 0.00 -16.89 104.00 -475.00 50350.10 6.09 1.00 0.50 4.87 7.53 -0.68 0.00 0.00 0.66 0.80 0.50 -1.00 0.00 0.00 -7.36 20.50 -476.00 50585.60 6.33 4.10 4.10 28.45 12.55 -0.14 0.00 0.00 3.62 2.16 1.30 -1.00 0.00 0.00 -1.40 25.60 -477.00 50633.30 9.46 1.10 1.70 16.37 11.24 0.49 0.00 0.00 0.88 1.97 0.70 -1.00 0.00 0.00 -8.60 47.70 -478.00 50666.70 7.27 1.10 2.20 15.39 9.97 0.69 0.00 0.00 0.92 2.04 0.80 -1.00 0.00 0.00 -6.31 81.10 -479.00 51052.70 15.74 0.90 2.20 35.40 11.17 -2.29 0.00 0.00 0.38 2.70 0.80 -1.00 0.00 0.00 -32.73 83.10 -480.00 51675.80 16.91 0.90 4.50 53.74 11.89 0.59 0.00 0.00 0.57 2.73 0.60 -1.00 0.00 0.00 -23.54 66.20 -481.00 51831.60 27.03 1.10 3.20 71.41 12.15 -0.87 0.00 0.00 0.55 2.62 0.80 -1.00 0.00 0.00 -39.67 94.00 -482.00 51849.80 22.00 1.00 1.60 36.29 8.94 -0.93 0.00 0.00 0.72 1.91 0.60 -1.00 0.00 0.00 -24.58 112.20 -483.00 52043.00 7.55 4.60 1.50 20.40 12.25 0.09 0.00 0.00 4.22 1.28 0.80 -1.00 0.00 0.00 -1.43 49.40 -484.00 52122.60 8.82 1.50 3.10 25.14 9.45 1.07 0.00 0.00 1.31 1.92 1.40 -1.00 0.00 0.00 -5.38 1.00 -485.00 52165.20 14.77 1.50 2.20 30.09 12.12 -0.74 0.00 0.00 0.51 1.67 0.90 -1.00 0.00 0.00 -22.95 43.60 -486.00 52336.90 17.65 0.60 2.20 32.02 10.65 0.78 0.00 0.00 0.30 1.74 0.40 -1.00 0.00 0.00 -47.82 10.50 -487.00 52390.70 6.81 2.60 1.40 13.37 11.34 -1.00 0.00 0.00 2.06 0.57 0.30 -1.00 0.00 0.00 -2.64 13.10 -488.00 52410.30 17.53 0.90 3.00 44.18 11.64 -1.48 0.00 0.00 0.43 2.84 0.70 -1.00 0.00 0.00 -32.77 83.90 -489.00 52448.00 17.24 0.90 2.20 35.15 9.24 -0.37 0.00 0.00 0.67 2.42 0.70 -1.00 0.00 0.00 -20.60 121.60 -490.00 52706.80 12.49 0.90 4.80 41.47 10.34 -0.98 0.00 0.00 0.39 3.14 0.60 -1.00 0.00 0.00 -25.90 124.40 -491.00 52764.20 7.17 2.00 0.90 10.24 11.68 0.56 0.00 0.00 1.18 0.87 0.50 -1.00 0.00 0.00 -4.88 53.80 -492.00 52772.40 16.23 0.90 2.20 30.04 11.37 -0.10 0.00 0.00 0.55 1.50 0.60 -1.00 0.00 0.00 -23.42 62.00 -493.00 52784.80 6.85 1.10 0.60 6.23 10.52 -0.13 0.00 0.00 1.00 0.69 0.20 -1.00 0.00 0.00 -5.47 23.20 -494.00 53048.20 22.27 1.00 2.20 42.24 11.09 1.19 0.00 0.00 0.52 1.65 0.70 -1.00 0.00 0.00 -34.55 81.80 -495.00 53114.90 13.48 1.20 2.50 33.08 10.43 -1.74 0.00 0.00 0.95 2.48 1.00 -1.00 0.00 0.00 -11.32 20.50 -496.00 53268.90 8.43 2.30 6.60 39.46 11.54 0.29 0.00 0.00 1.53 3.34 1.30 -1.00 0.00 0.00 -4.41 123.30 -497.00 53375.00 7.73 1.40 2.10 15.76 10.99 0.14 0.00 0.00 1.25 1.59 1.20 -1.00 0.00 0.00 -4.96 24.60 -498.00 53503.50 15.43 0.70 4.40 47.48 11.33 -0.95 0.00 0.00 0.51 2.44 0.50 -1.00 0.00 0.00 -23.99 25.10 -499.00 53618.40 17.64 0.80 2.60 37.32 11.21 0.02 0.00 0.00 0.47 1.80 0.60 -1.00 0.00 0.00 -29.75 12.00 -500.00 53647.30 7.78 1.10 1.60 14.49 10.33 -1.65 0.00 0.00 0.93 2.20 1.00 -1.00 0.00 0.00 -6.66 40.90 -501.00 53681.90 6.31 3.00 1.00 12.73 10.56 -1.14 0.00 0.00 2.47 0.73 0.40 -1.00 0.00 0.00 -2.05 75.50 -502.00 53848.10 6.30 2.90 1.40 11.52 11.67 -0.82 0.00 0.00 1.19 1.17 1.00 -1.00 0.00 0.00 -4.22 113.70 -503.00 54151.80 12.02 0.80 4.00 33.48 11.96 0.44 0.00 0.00 0.52 1.84 0.60 -1.00 0.00 0.00 -18.32 33.40 -504.00 54326.20 9.48 1.30 1.40 14.84 12.02 -0.20 0.00 0.00 0.78 1.60 0.70 -1.00 0.00 0.00 -9.67 79.80 -505.00 54357.10 13.87 1.40 3.90 40.26 11.92 -0.96 0.00 0.00 0.99 2.18 0.90 -1.00 0.00 0.00 -11.23 110.70 -506.00 54420.70 11.64 1.50 2.40 31.71 11.57 1.78 0.00 0.00 1.25 2.61 1.30 -1.00 0.00 0.00 -7.45 123.10 -507.00 54449.10 6.30 1.50 0.40 6.53 9.56 -0.16 0.00 0.00 1.36 0.62 0.30 -1.00 0.00 0.00 -3.71 74.70 -508.00 54481.20 13.67 1.10 1.50 21.03 8.69 -0.58 0.00 0.00 0.69 1.41 0.70 -1.00 0.00 0.00 -15.95 106.80 -509.00 54512.40 12.81 0.70 1.80 18.95 8.67 0.89 0.00 0.00 0.47 1.57 0.50 -1.00 0.00 0.00 -21.66 10.00 -510.00 54790.80 8.83 0.80 5.00 31.49 8.33 0.02 0.00 0.00 0.46 1.18 0.30 -1.00 0.00 0.00 -15.19 32.40 -511.00 54793.50 8.49 3.60 2.40 34.44 8.81 0.17 255.00 0.00 3.18 2.51 0.80 -1.00 0.00 0.00 -2.13 9.50 -512.00 54826.70 18.54 1.00 3.20 45.64 10.53 -0.67 0.00 0.00 0.74 2.04 0.70 -1.00 0.00 0.00 -20.05 68.30 -513.00 55055.40 15.31 1.80 2.70 37.18 9.63 0.52 0.00 0.00 0.57 2.63 0.60 -1.00 0.00 0.00 -21.65 41.00 -514.00 55111.80 19.36 1.50 2.40 39.74 11.79 0.57 0.00 0.00 1.00 2.11 0.60 -1.00 0.00 0.00 -15.47 97.40 -515.00 55172.50 13.97 0.70 3.30 33.41 9.41 0.22 0.00 0.00 0.53 2.48 0.40 -1.00 0.00 0.00 -20.91 4.50 -516.00 55191.80 8.19 1.90 0.60 8.37 9.77 -0.60 0.00 0.00 0.89 1.18 0.80 -1.00 0.00 0.00 -7.40 49.40 -517.00 55214.90 18.52 0.90 6.60 77.33 9.48 -1.72 0.00 0.00 0.38 2.35 0.50 -1.00 0.00 0.00 -38.79 72.50 -518.00 55288.20 6.49 2.70 2.10 13.62 10.57 -0.51 0.00 0.00 0.70 1.10 0.70 -1.00 0.00 0.00 -7.39 94.60 -519.00 55327.90 9.05 2.10 2.30 20.29 11.18 0.94 0.00 0.00 1.89 1.42 0.50 -1.00 0.00 0.00 -3.83 57.50 -520.00 55472.10 21.12 1.10 7.20 93.36 11.51 -0.39 0.00 0.00 0.48 3.26 0.70 -1.00 0.00 0.00 -35.53 73.70 -521.00 55496.40 14.04 2.50 2.00 43.05 8.68 0.80 0.00 0.00 2.17 3.80 2.10 -1.00 0.00 0.00 -5.17 98.00 -522.00 55551.20 6.14 1.70 0.40 6.26 9.14 0.59 0.00 0.00 1.47 0.65 0.50 -1.00 0.00 0.00 -3.34 101.60 -523.00 55560.90 15.12 0.60 3.90 41.05 9.27 -0.32 0.00 0.00 0.41 2.38 0.40 -1.00 0.00 0.00 -29.45 34.50 -524.00 55879.50 7.79 4.10 1.20 17.66 11.27 0.23 0.00 0.00 2.23 1.52 0.80 -1.00 0.00 0.00 -2.79 97.10 -525.00 56347.70 17.21 0.80 3.30 37.16 11.05 -0.76 0.00 0.00 0.47 1.70 0.50 -1.00 0.00 0.00 -29.14 53.30 -526.00 56411.60 10.47 1.90 2.70 27.02 10.57 0.43 0.00 0.00 0.51 2.41 0.40 -1.00 0.00 0.00 -16.45 117.20 -527.00 56634.50 11.38 1.00 5.70 43.80 11.18 -1.48 0.00 0.00 0.82 2.37 0.70 -1.00 0.00 0.00 -11.17 84.10 -528.00 56829.30 7.25 0.90 1.00 7.73 11.99 -0.11 0.00 0.00 0.74 1.04 0.50 -1.00 0.00 0.00 -7.86 22.90 -529.00 56879.10 6.87 1.70 0.80 9.79 12.06 -1.04 0.00 0.00 1.47 1.39 1.20 -1.00 0.00 0.00 -3.74 72.70 -530.00 57013.30 17.74 0.80 2.30 33.77 12.22 0.07 0.00 0.00 0.46 1.78 0.50 -1.00 0.00 0.00 -31.12 27.70 -531.00 57025.30 7.34 0.60 5.20 25.18 10.33 1.66 0.00 0.00 0.40 0.93 0.40 -1.00 0.00 0.00 -14.70 90.90 -532.00 57035.20 7.51 1.00 2.20 15.74 11.46 1.65 0.00 0.00 0.77 1.95 0.60 -1.00 0.00 0.00 -7.80 100.80 -533.00 57066.70 6.27 3.20 2.60 15.36 11.34 1.12 255.00 0.00 2.31 1.56 0.60 -1.00 0.00 0.00 -2.17 4.30 -534.00 57595.20 6.52 1.90 1.70 14.90 10.62 0.86 0.00 0.00 1.69 1.72 1.60 -1.00 0.00 0.00 -3.09 20.80 -535.00 57803.90 6.26 1.10 2.60 13.72 11.86 -2.14 0.00 0.00 0.96 2.24 0.50 -1.00 0.00 0.00 -5.22 75.90 -536.00 57925.90 8.10 1.50 2.60 17.79 12.73 -2.50 0.00 0.00 0.93 1.31 0.50 -1.00 0.00 0.00 -7.00 95.50 -537.00 57948.80 6.61 4.00 0.40 11.07 12.80 0.85 0.00 0.00 1.40 0.96 0.70 -1.00 0.00 0.00 -3.78 92.80 -538.00 57976.50 16.55 0.90 2.20 35.82 10.95 0.75 0.00 0.00 0.55 2.17 0.60 -1.00 0.00 0.00 -23.94 18.10 -539.00 58130.20 13.07 1.20 3.10 33.05 12.20 -0.41 0.00 0.00 0.59 2.03 1.00 -1.00 0.00 0.00 -17.66 43.80 -540.00 58135.70 6.08 0.60 0.80 4.49 11.54 -1.17 0.00 0.00 0.39 0.45 0.30 -1.00 0.00 0.00 -12.56 126.10 -541.00 58156.60 7.72 1.10 1.60 12.39 9.98 -0.74 0.00 0.00 0.90 1.53 0.80 -1.00 0.00 0.00 -6.89 70.20 -542.00 58159.20 10.00 3.70 2.00 29.33 9.51 0.93 255.00 0.00 0.77 1.99 0.40 -1.00 0.00 0.00 -10.41 47.20 -543.00 58249.00 6.15 0.90 3.00 13.68 11.79 0.75 0.00 0.00 0.34 1.04 0.20 -1.00 0.00 0.00 -14.46 34.60 -544.00 58549.40 6.28 1.50 1.30 11.23 11.87 -1.16 0.00 0.00 1.04 1.90 0.80 -1.00 0.00 0.00 -4.84 53.40 -545.00 58583.20 19.47 1.30 7.30 92.18 12.55 -0.78 0.00 0.00 0.50 2.72 0.60 -1.00 0.00 0.00 -30.85 112.80 -546.00 58733.10 16.48 1.50 2.50 38.30 11.55 -0.57 0.00 0.00 0.40 2.60 0.70 -1.00 0.00 0.00 -32.85 6.70 -547.00 58800.00 19.79 1.10 2.20 40.80 11.00 0.04 0.00 0.00 0.88 1.78 1.00 -1.00 0.00 0.00 -18.00 73.60 -548.00 58825.30 8.73 1.20 0.60 9.16 11.40 0.28 0.00 0.00 1.04 1.17 0.80 -1.00 0.00 0.00 -6.70 98.90 -549.00 58847.30 7.14 1.00 1.50 9.77 8.75 -1.19 0.00 0.00 0.70 1.08 0.70 -1.00 0.00 0.00 -8.22 95.30 -550.00 58989.10 20.85 0.60 3.00 43.33 11.47 -0.06 0.00 0.00 0.36 2.18 0.40 -1.00 0.00 0.00 -46.09 6.70 -551.00 59064.50 8.46 1.60 3.30 17.87 11.86 -0.75 0.00 0.00 0.75 1.02 0.40 -1.00 0.00 0.00 -9.04 82.10 -552.00 59162.40 8.76 1.30 1.50 15.51 11.88 0.47 0.00 0.00 1.10 1.89 1.00 -1.00 0.00 0.00 -6.35 26.40 -553.00 59276.30 15.78 0.80 2.80 34.36 11.99 0.95 0.00 0.00 0.35 1.92 0.40 -1.00 0.00 0.00 -36.13 37.90 -554.00 59294.10 11.34 0.60 2.00 18.36 9.56 0.44 0.00 0.00 0.33 1.88 0.30 -1.00 0.00 0.00 -27.47 55.70 -555.00 59299.90 7.31 0.50 0.80 5.78 0.35 -0.07 255.00 0.00 0.29 0.84 0.30 -1.00 0.00 0.00 -20.22 35.90 -556.00 59360.90 6.70 2.70 2.20 16.18 9.62 -1.33 0.00 0.00 2.12 1.02 0.20 -1.00 0.00 0.00 -2.52 122.50 -557.00 59625.60 6.17 0.80 0.80 5.66 11.50 1.43 0.00 0.00 0.65 1.01 0.40 -1.00 0.00 0.00 -7.55 3.20 -558.00 59785.80 6.09 0.50 1.20 4.53 12.93 -0.35 0.00 0.00 0.40 0.39 0.20 -1.00 0.00 0.00 -12.22 35.40 -559.00 59809.40 10.42 2.20 1.80 27.53 13.72 -0.24 0.00 0.00 2.00 2.79 1.50 -1.00 0.00 0.00 -4.16 59.00 -560.00 59893.80 29.29 0.80 2.60 64.01 12.12 0.72 0.00 0.00 0.41 2.33 0.60 -1.00 0.00 0.00 -57.18 15.40 -561.00 60064.70 9.09 0.70 2.70 18.01 12.22 -0.40 0.00 0.00 0.48 1.69 0.50 -1.00 0.00 0.00 -15.03 58.30 -562.00 60101.30 8.33 1.80 1.00 14.76 12.77 1.59 0.00 0.00 1.64 1.87 1.00 -1.00 0.00 0.00 -4.05 69.30 -563.00 60105.60 6.15 0.90 1.40 7.66 12.80 0.20 0.00 0.00 0.66 0.99 0.30 -1.00 0.00 0.00 -7.42 73.60 -564.00 60445.80 7.15 2.00 1.40 11.20 13.14 -1.61 0.00 0.00 1.41 0.93 0.70 -1.00 0.00 0.00 -4.06 55.40 -565.00 60726.90 8.78 1.20 3.40 26.03 11.89 0.08 0.00 0.00 0.95 2.71 0.90 -1.00 0.00 0.00 -7.42 80.50 -566.00 60748.40 12.86 1.00 2.30 25.90 11.55 -0.46 0.00 0.00 0.74 1.74 0.70 -1.00 0.00 0.00 -13.96 102.00 -567.00 60813.90 6.58 1.90 0.90 8.72 11.82 -0.37 0.00 0.00 1.12 1.06 0.80 -1.00 0.00 0.00 -4.70 13.90 -568.00 60890.80 6.46 1.30 3.50 18.73 13.61 1.28 0.00 0.00 1.10 2.36 0.60 -1.00 0.00 0.00 -4.70 90.80 -569.00 60924.90 23.72 0.80 3.40 68.74 12.69 0.35 0.00 0.00 0.58 3.44 0.50 -1.00 0.00 0.00 -32.69 124.90 -570.00 60976.50 8.08 3.90 1.00 18.91 10.91 0.93 0.00 0.00 3.31 1.66 1.00 -1.00 0.00 0.00 -1.95 48.50 -571.00 61089.50 7.25 1.80 1.10 12.71 11.85 0.06 0.00 0.00 1.68 1.49 0.60 -1.00 0.00 0.00 -3.45 33.50 -572.00 61790.70 7.72 1.40 1.40 13.06 12.26 -0.33 0.00 0.00 1.20 1.63 0.90 -1.00 0.00 0.00 -5.15 94.70 -573.00 62059.20 9.40 4.20 2.70 30.88 12.64 0.31 0.00 0.00 2.96 1.90 0.70 -1.00 0.00 0.00 -2.54 107.20 diff --git a/data/mEPSCs/washout1.txt b/data/mEPSCs/washout1.txt deleted file mode 100644 index 97a63761..00000000 --- a/data/mEPSCs/washout1.txt +++ /dev/null @@ -1,678 +0,0 @@ - Time (ms) Amplitude Rise (ms) Decay (ms) Area Baseline Noise Group Channel 10-90Rise HalfWidth Rise50 Peak Dir Burst# BurstE# 10-90Slope Rel Time -1.00 1941.00 13.89 1.00 2.10 28.77 -0.82 0.08 0.00 0.00 0.85 2.32 0.80 -1.00 0.00 0.00 -13.09 661.00 -2.00 3555.50 23.85 0.80 2.10 45.38 -0.75 -0.70 0.00 0.00 0.63 2.37 0.60 -1.00 0.00 0.00 -30.35 995.50 -3.00 4933.90 11.25 1.10 2.10 24.78 0.11 -0.06 0.00 0.00 0.78 2.56 0.60 -1.00 0.00 0.00 -11.57 1093.90 -4.00 8736.80 10.22 1.80 2.10 17.54 0.76 -0.93 0.00 0.00 0.67 1.42 0.70 -1.00 0.00 0.00 -12.21 1056.80 -5.00 9905.70 13.00 1.30 2.10 27.37 0.32 -0.95 0.00 0.00 1.04 1.74 0.90 -1.00 0.00 0.00 -9.99 945.70 -6.00 10659.80 13.57 1.70 2.10 34.58 0.57 0.99 0.00 0.00 1.04 2.61 1.50 -1.00 0.00 0.00 -10.47 419.80 -7.00 11480.30 12.47 3.00 2.10 33.47 0.89 -0.61 0.00 0.00 1.19 2.84 0.90 -1.00 0.00 0.00 -8.39 1240.30 -8.00 16838.50 13.03 1.50 2.10 27.55 -0.03 0.32 0.00 0.00 1.23 2.05 0.90 -1.00 0.00 0.00 -8.45 198.50 -9.00 17921.10 24.01 1.10 2.10 44.52 -0.53 1.43 0.00 0.00 0.44 2.38 0.40 -1.00 0.00 0.00 -43.27 1.10 -10.00 18029.80 12.47 0.80 2.10 21.95 -1.01 2.02 0.00 0.00 0.68 0.79 0.70 -1.00 0.00 0.00 -14.58 109.80 -11.00 18890.80 14.04 1.30 2.10 29.25 -0.59 0.43 0.00 0.00 1.06 2.20 0.90 -1.00 0.00 0.00 -10.64 970.80 -12.00 22306.20 24.71 1.70 2.10 56.34 0.14 -1.83 0.00 0.00 0.58 2.70 0.80 -1.00 0.00 0.00 -33.94 546.20 -13.00 24436.00 20.83 1.30 2.10 43.51 1.10 0.17 0.00 0.00 0.55 2.49 0.50 -1.00 0.00 0.00 -30.04 116.00 -14.00 25301.70 11.26 2.40 2.10 32.14 0.06 -1.82 0.00 0.00 2.17 3.00 1.90 -1.00 0.00 0.00 -4.15 981.70 -15.00 27392.00 21.09 1.00 2.10 42.05 0.30 -0.13 0.00 0.00 0.38 2.37 0.40 -1.00 0.00 0.00 -44.24 512.00 -16.00 27473.80 11.83 1.80 2.10 28.23 -0.15 0.75 0.00 0.00 1.32 1.93 1.00 -1.00 0.00 0.00 -7.19 593.80 -17.00 27886.20 10.57 1.70 2.10 24.78 0.48 1.85 0.00 0.00 1.43 1.24 1.10 -1.00 0.00 0.00 -5.91 1006.20 -18.00 31161.90 12.78 1.00 2.10 28.70 0.26 0.93 0.00 0.00 0.64 2.82 0.90 -1.00 0.00 0.00 -15.96 441.90 -19.00 31785.20 18.81 0.60 2.10 29.15 -0.23 -0.79 0.00 0.00 0.43 1.67 0.40 -1.00 0.00 0.00 -35.31 1065.20 -20.00 32170.40 15.23 1.50 2.10 36.36 1.15 -0.91 0.00 0.00 1.14 3.02 1.10 -1.00 0.00 0.00 -10.64 170.40 -21.00 35500.50 14.08 2.10 2.10 38.04 0.31 0.76 0.00 0.00 1.86 3.41 1.50 -1.00 0.00 0.00 -6.07 940.50 -22.00 36166.10 10.64 1.90 2.10 26.08 0.39 0.31 0.00 0.00 0.96 3.14 1.20 -1.00 0.00 0.00 -8.89 326.10 -23.00 38347.30 13.77 1.60 2.10 27.58 0.19 -1.49 0.00 0.00 1.47 1.41 1.10 -1.00 0.00 0.00 -7.47 1227.30 -24.00 40540.10 13.51 1.80 2.10 30.61 -0.34 -1.18 0.00 0.00 1.30 2.23 1.40 -1.00 0.00 0.00 -8.33 860.10 -25.00 40737.00 17.04 1.00 2.10 30.74 -0.44 0.81 0.00 0.00 0.32 1.98 0.20 -1.00 0.00 0.00 -42.66 1057.00 -26.00 41084.20 11.80 2.90 2.10 34.65 -1.00 0.24 0.00 0.00 2.66 2.49 2.30 -1.00 0.00 0.00 -3.55 124.20 -27.00 41775.90 10.51 4.40 2.10 32.23 0.35 0.48 0.00 0.00 4.28 1.02 0.50 -1.00 0.00 0.00 -1.96 815.90 -28.00 42236.10 15.16 1.50 2.10 35.18 -0.24 1.41 0.00 0.00 1.24 2.30 1.30 -1.00 0.00 0.00 -9.78 1276.10 -29.00 44560.80 15.17 1.40 2.10 31.17 -1.21 0.54 0.00 0.00 1.09 2.61 0.70 -1.00 0.00 0.00 -11.15 1040.80 -30.00 45110.30 11.76 3.20 2.10 37.45 -0.51 -0.36 0.00 0.00 2.91 3.07 2.40 -1.00 0.00 0.00 -3.24 310.30 -31.00 45120.50 19.08 1.00 2.10 41.98 -2.38 0.49 0.00 0.00 0.77 2.66 0.70 -1.00 0.00 0.00 -19.94 320.50 -32.00 47928.00 21.37 1.40 2.10 48.60 -0.12 -1.65 0.00 0.00 0.82 2.73 0.80 -1.00 0.00 0.00 -20.93 568.00 -33.00 48123.70 10.53 1.20 2.10 24.54 -0.68 -2.90 0.00 0.00 1.09 3.05 1.10 -1.00 0.00 0.00 -7.71 763.70 -34.00 49403.20 17.78 1.40 2.10 42.11 -0.24 1.77 0.00 0.00 1.21 2.92 1.00 -1.00 0.00 0.00 -11.75 763.20 -35.00 49668.20 10.14 1.40 2.10 20.77 -0.29 -0.59 0.00 0.00 1.22 1.62 0.40 -1.00 0.00 0.00 -6.65 1028.20 -36.00 50773.40 21.88 1.80 2.10 49.62 -0.24 -0.24 0.00 0.00 0.93 2.50 0.90 -1.00 0.00 0.00 -18.85 853.40 -37.00 52578.10 11.64 2.40 2.10 29.53 0.64 -0.90 0.00 0.00 1.89 1.64 0.50 -1.00 0.00 0.00 -4.93 98.10 -38.00 54234.50 10.50 0.90 2.10 20.34 -0.62 0.13 0.00 0.00 0.74 1.95 0.70 -1.00 0.00 0.00 -11.34 474.50 -39.00 54691.00 10.54 1.40 2.10 26.21 0.22 -0.47 0.00 0.00 1.26 3.15 1.20 -1.00 0.00 0.00 -6.71 931.00 -40.00 55407.20 12.03 0.70 2.10 22.04 0.30 1.33 0.00 0.00 0.41 2.07 0.50 -1.00 0.00 0.00 -23.48 367.20 -41.00 56997.30 10.00 1.60 2.10 22.23 -0.81 -0.74 0.00 0.00 1.40 2.27 0.50 -1.00 0.00 0.00 -5.73 677.30 -42.00 62679.30 15.37 0.60 2.10 23.20 0.44 3.98 0.00 0.00 0.50 1.79 0.40 -1.00 0.00 0.00 -24.47 1239.30 -43.00 63448.10 12.61 1.70 2.10 28.60 1.36 1.52 0.00 0.00 1.46 2.56 1.40 -1.00 0.00 0.00 -6.92 728.10 -44.00 63789.30 21.98 1.00 2.10 46.35 -0.17 -0.08 0.00 0.00 0.64 2.37 0.60 -1.00 0.00 0.00 -27.56 1069.30 -45.00 68330.80 10.39 1.30 2.10 19.04 0.72 1.66 0.00 0.00 1.07 1.91 0.60 -1.00 0.00 0.00 -7.75 490.80 -46.00 68358.70 12.88 0.60 2.10 18.37 -0.85 0.54 0.00 0.00 0.46 1.35 0.40 -1.00 0.00 0.00 -22.25 518.70 -47.00 76133.40 16.14 1.70 2.10 34.45 0.80 -1.57 0.00 0.00 1.02 1.84 0.70 -1.00 0.00 0.00 -12.71 613.40 -48.00 77043.10 11.57 1.10 2.10 26.96 0.26 -0.95 0.00 0.00 0.91 2.90 1.00 -1.00 0.00 0.00 -10.16 243.10 -49.00 78644.50 11.09 1.40 2.10 25.60 0.56 0.35 0.00 0.00 1.17 2.42 1.20 -1.00 0.00 0.00 -7.60 564.50 -50.00 80162.00 11.17 0.90 2.10 14.91 0.56 1.60 0.00 0.00 0.81 1.09 0.80 -1.00 0.00 0.00 -10.99 802.00 -51.00 80478.90 13.68 0.70 2.10 22.77 -1.25 -1.68 0.00 0.00 0.57 1.45 0.40 -1.00 0.00 0.00 -19.36 1118.90 -52.00 82584.90 20.61 1.80 2.10 51.64 -0.06 1.48 0.00 0.00 1.16 3.13 1.20 -1.00 0.00 0.00 -14.21 664.90 -53.00 83025.70 10.67 1.40 2.10 19.15 0.22 -1.70 0.00 0.00 1.00 2.46 0.80 -1.00 0.00 0.00 -8.55 1105.70 -54.00 83619.20 11.70 1.50 2.10 23.73 -0.73 -0.75 0.00 0.00 1.08 1.67 1.20 -1.00 0.00 0.00 -8.68 419.20 -55.00 83691.90 10.35 2.50 2.10 32.05 -0.33 -1.32 0.00 0.00 2.23 2.70 2.40 -1.00 0.00 0.00 -3.72 491.90 -56.00 84163.90 18.16 1.00 2.10 37.88 -0.23 0.07 0.00 0.00 0.83 2.50 0.50 -1.00 0.00 0.00 -17.42 963.90 -57.00 84333.90 13.16 2.30 2.10 39.21 -0.32 -4.03 0.00 0.00 2.14 2.42 2.20 -1.00 0.00 0.00 -4.91 1133.90 -58.00 85656.20 16.87 2.20 2.10 44.51 -1.16 -0.92 0.00 0.00 1.60 2.86 1.40 -1.00 0.00 0.00 -8.46 1176.20 -59.00 85782.70 11.41 1.00 2.10 23.27 0.38 1.30 0.00 0.00 0.80 2.64 0.70 -1.00 0.00 0.00 -11.45 22.70 -60.00 85881.40 13.64 1.30 2.10 29.21 -0.75 0.88 0.00 0.00 1.04 1.96 0.80 -1.00 0.00 0.00 -10.50 121.40 -61.00 89340.40 14.31 1.40 2.10 32.56 0.37 -0.21 0.00 0.00 1.19 3.00 1.10 -1.00 0.00 0.00 -9.59 1020.40 -62.00 90240.40 19.96 2.50 2.10 52.49 0.68 2.39 0.00 0.00 0.74 2.91 1.20 -1.00 0.00 0.00 -21.63 640.40 -63.00 90924.10 11.26 1.30 2.10 22.98 1.31 -0.11 0.00 0.00 1.11 1.64 1.00 -1.00 0.00 0.00 -8.11 44.10 -64.00 93572.10 13.75 0.80 2.10 23.65 0.50 2.61 0.00 0.00 0.43 1.45 0.30 -1.00 0.00 0.00 -25.63 132.10 -65.00 93676.90 10.77 2.10 2.10 25.62 -0.84 -0.45 0.00 0.00 2.01 2.37 1.70 -1.00 0.00 0.00 -4.29 236.90 -66.00 99778.70 23.91 1.80 2.10 57.92 -0.75 1.22 0.00 0.00 1.29 2.97 1.00 -1.00 0.00 0.00 -14.88 1218.70 -67.00 100427.20 15.44 1.10 2.10 35.23 0.02 0.58 0.00 0.00 0.65 2.70 0.70 -1.00 0.00 0.00 -18.94 587.20 -68.00 104136.20 13.77 1.20 2.10 27.23 -1.54 0.72 0.00 0.00 0.98 2.06 0.60 -1.00 0.00 0.00 -11.27 456.20 -69.00 105869.40 21.03 1.30 2.10 52.44 -1.15 -2.20 0.00 0.00 0.94 2.76 0.80 -1.00 0.00 0.00 -17.90 909.40 -70.00 110130.80 16.74 1.50 2.10 38.49 0.69 1.04 0.00 0.00 0.93 2.71 0.80 -1.00 0.00 0.00 -14.45 50.80 -71.00 110602.50 10.53 1.40 2.10 21.35 0.27 1.61 0.00 0.00 1.22 1.89 0.90 -1.00 0.00 0.00 -6.90 522.50 -72.00 111210.60 17.38 2.20 2.10 53.51 -0.51 -1.01 0.00 0.00 1.90 3.70 1.70 -1.00 0.00 0.00 -7.32 1130.60 -73.00 112048.70 11.43 1.70 2.10 22.20 -1.36 2.39 0.00 0.00 1.59 1.37 1.20 -1.00 0.00 0.00 -5.76 688.70 -74.00 112349.60 18.26 1.90 2.10 50.16 0.02 -0.23 0.00 0.00 1.55 3.22 1.50 -1.00 0.00 0.00 -9.43 989.60 -75.00 113276.30 14.34 1.20 2.10 35.05 -0.30 -0.80 0.00 0.00 0.78 2.82 0.90 -1.00 0.00 0.00 -14.68 636.30 -76.00 113564.20 20.03 1.40 2.10 51.55 -0.70 1.34 0.00 0.00 1.07 2.93 1.00 -1.00 0.00 0.00 -15.03 924.20 -77.00 113854.00 11.41 1.20 2.10 21.87 -0.75 0.31 0.00 0.00 0.73 2.42 0.50 -1.00 0.00 0.00 -12.50 1214.00 -78.00 115266.90 21.68 1.40 2.10 54.68 -1.07 -1.60 0.00 0.00 0.91 2.64 1.00 -1.00 0.00 0.00 -19.03 66.90 -79.00 115747.20 10.94 1.10 2.10 23.13 -0.36 -0.45 0.00 0.00 0.91 2.90 1.00 -1.00 0.00 0.00 -9.66 547.20 -80.00 116033.70 10.05 1.70 2.10 19.74 -0.59 -0.13 0.00 0.00 1.11 2.03 0.90 -1.00 0.00 0.00 -7.22 833.70 -81.00 116913.30 19.24 1.80 2.10 40.87 -0.61 -2.50 0.00 0.00 1.13 2.67 0.80 -1.00 0.00 0.00 -13.58 433.30 -82.00 118931.50 22.61 2.20 2.10 59.82 -0.79 2.16 0.00 0.00 0.92 3.05 1.10 -1.00 0.00 0.00 -19.57 1171.50 -83.00 119518.70 18.15 1.50 2.10 40.49 0.08 0.51 0.00 0.00 1.27 2.67 1.10 -1.00 0.00 0.00 -11.41 478.70 -84.00 122569.30 13.08 1.30 2.10 29.77 -0.30 1.24 0.00 0.00 1.18 2.95 1.00 -1.00 0.00 0.00 -8.88 969.30 -85.00 123382.10 15.03 1.70 2.10 41.80 0.62 -0.75 0.00 0.00 1.23 3.37 1.40 -1.00 0.00 0.00 -9.80 502.10 -86.00 124540.30 23.76 1.60 2.10 56.39 -0.39 -1.54 0.00 0.00 1.18 2.72 0.80 -1.00 0.00 0.00 -16.11 380.30 -87.00 125948.90 17.79 1.50 2.10 42.74 -0.70 -1.06 0.00 0.00 1.34 2.91 1.30 -1.00 0.00 0.00 -10.58 508.90 -88.00 130310.00 10.88 2.00 2.10 27.77 -0.81 0.66 0.00 0.00 1.58 2.91 1.40 -1.00 0.00 0.00 -5.50 1030.00 -89.00 133845.40 14.94 1.20 2.10 32.89 -0.28 1.29 0.00 0.00 1.02 1.77 0.80 -1.00 0.00 0.00 -11.75 725.40 -90.00 133912.00 17.47 2.00 2.10 40.15 -0.50 -2.05 0.00 0.00 0.73 2.38 0.90 -1.00 0.00 0.00 -19.22 792.00 -91.00 134092.40 15.10 4.20 2.10 55.52 -1.40 1.94 0.00 0.00 3.10 3.84 1.90 -1.00 0.00 0.00 -3.89 972.40 -92.00 137185.80 13.21 2.80 2.10 40.59 -0.47 -0.86 0.00 0.00 2.64 3.01 2.00 -1.00 0.00 0.00 -4.00 225.80 -93.00 137459.90 14.81 1.40 2.10 31.62 -0.22 0.51 0.00 0.00 1.17 2.14 1.00 -1.00 0.00 0.00 -10.15 499.90 -94.00 138518.60 12.45 0.80 2.10 18.24 0.12 -0.35 0.00 0.00 0.72 0.97 0.60 -1.00 0.00 0.00 -13.81 278.60 -95.00 138902.30 13.42 2.10 2.10 40.30 0.46 0.16 0.00 0.00 1.89 2.96 1.90 -1.00 0.00 0.00 -5.67 662.30 -96.00 143004.60 12.50 3.50 2.10 47.23 -0.48 -0.42 0.00 0.00 3.39 4.41 3.30 -1.00 0.00 0.00 -2.95 924.60 -97.00 143863.20 14.26 2.10 2.10 34.82 -0.62 0.04 0.00 0.00 1.27 2.42 1.20 -1.00 0.00 0.00 -8.96 503.20 -98.00 144486.20 19.84 0.90 2.10 35.65 -0.41 0.57 0.00 0.00 0.47 1.97 0.40 -1.00 0.00 0.00 -33.48 1126.20 -99.00 145280.90 11.81 0.80 2.10 17.96 -0.41 1.04 0.00 0.00 0.48 1.27 0.60 -1.00 0.00 0.00 -19.58 640.90 -100.00 147120.00 18.88 1.30 2.10 40.51 -0.47 -0.16 0.00 0.00 0.80 2.38 0.60 -1.00 0.00 0.00 -18.89 1200.00 -101.00 147151.40 24.32 1.30 2.10 54.76 -0.77 1.04 0.00 0.00 0.87 2.58 0.60 -1.00 0.00 0.00 -22.26 1231.40 -102.00 147779.50 15.68 2.10 2.10 39.80 -2.64 -0.67 0.00 0.00 1.13 2.56 1.20 -1.00 0.00 0.00 -11.08 579.50 -103.00 147852.00 22.75 1.20 2.10 49.64 -1.95 0.35 0.00 0.00 0.96 2.78 0.80 -1.00 0.00 0.00 -19.04 652.00 -104.00 149252.90 12.58 2.30 2.10 29.91 -0.20 -0.94 0.00 0.00 1.48 3.06 1.40 -1.00 0.00 0.00 -6.78 772.90 -105.00 149262.60 11.58 1.10 2.10 24.08 -4.02 1.73 0.00 0.00 0.96 2.49 0.80 -1.00 0.00 0.00 -9.60 782.60 -106.00 149573.80 16.84 3.60 2.10 56.38 -0.75 -0.35 0.00 0.00 3.21 2.88 1.10 -1.00 0.00 0.00 -4.20 1093.80 -107.00 155414.10 12.72 1.30 2.10 30.11 -0.67 -2.30 0.00 0.00 1.09 2.38 0.90 -1.00 0.00 0.00 -9.31 534.10 -108.00 163418.00 10.70 1.30 2.10 23.16 -0.72 1.97 0.00 0.00 0.83 2.46 0.90 -1.00 0.00 0.00 -10.26 858.00 -109.00 164520.80 18.13 1.00 2.10 39.01 -0.20 -1.05 0.00 0.00 0.75 2.62 0.70 -1.00 0.00 0.00 -19.46 680.80 -110.00 165173.40 17.28 2.40 2.10 51.96 -0.85 1.92 0.00 0.00 2.25 3.30 2.00 -1.00 0.00 0.00 -6.16 53.40 -111.00 165649.50 11.48 1.30 2.10 24.52 -1.39 2.00 0.00 0.00 1.00 2.45 0.70 -1.00 0.00 0.00 -9.19 529.50 -112.00 170259.20 10.24 0.60 2.10 17.34 -0.36 -1.36 0.00 0.00 0.50 1.90 0.20 -1.00 0.00 0.00 -16.54 19.20 -113.00 172830.00 19.28 1.30 2.10 44.88 -1.68 0.85 0.00 0.00 0.83 2.75 0.80 -1.00 0.00 0.00 -18.57 30.00 -114.00 173662.60 13.18 1.80 2.10 32.90 -2.82 -0.86 0.00 0.00 1.60 3.38 1.40 -1.00 0.00 0.00 -6.61 862.60 -115.00 174754.60 12.04 1.80 2.10 28.73 -0.80 0.10 0.00 0.00 1.74 2.51 1.70 -1.00 0.00 0.00 -5.54 674.60 -116.00 175720.60 14.32 1.40 2.10 33.44 -0.06 0.02 0.00 0.00 0.72 2.49 1.00 -1.00 0.00 0.00 -16.00 360.60 -117.00 177274.80 13.02 2.00 2.10 28.92 0.11 -0.13 0.00 0.00 1.37 1.60 0.90 -1.00 0.00 0.00 -7.61 634.80 -118.00 184543.50 16.71 2.30 2.10 46.43 -2.11 0.84 0.00 0.00 1.85 3.41 1.50 -1.00 0.00 0.00 -7.22 223.50 -119.00 185384.70 17.45 1.40 2.10 38.93 -0.02 1.45 0.00 0.00 1.17 2.81 0.90 -1.00 0.00 0.00 -11.89 1064.70 -120.00 186575.20 15.97 2.80 2.10 38.85 0.53 -1.93 0.00 0.00 1.07 2.53 1.00 -1.00 0.00 0.00 -11.90 975.20 -121.00 190443.40 16.50 1.90 2.10 37.75 -1.71 1.77 0.00 0.00 1.65 2.21 0.70 -1.00 0.00 0.00 -8.03 1003.40 -122.00 190953.90 18.60 2.70 2.10 41.18 -0.36 0.30 0.00 0.00 1.03 2.20 0.80 -1.00 0.00 0.00 -14.42 233.90 -123.00 191815.10 12.04 1.40 2.10 27.06 -0.05 -0.08 0.00 0.00 0.86 2.84 0.90 -1.00 0.00 0.00 -11.23 1095.10 -124.00 192085.50 18.45 2.20 2.10 55.36 -1.02 0.13 0.00 0.00 1.04 3.47 1.80 -1.00 0.00 0.00 -14.20 85.50 -125.00 192225.50 13.82 1.30 2.10 27.06 -0.15 -2.84 0.00 0.00 1.05 1.33 0.70 -1.00 0.00 0.00 -10.57 225.50 -126.00 192499.50 17.64 0.80 2.10 34.22 -1.03 -1.39 0.00 0.00 0.47 1.82 0.50 -1.00 0.00 0.00 -30.28 499.50 -127.00 192894.90 23.03 1.20 2.10 49.29 -1.14 -0.56 0.00 0.00 0.96 2.73 0.80 -1.00 0.00 0.00 -19.21 894.90 -128.00 193828.40 16.01 1.40 2.10 40.81 -0.87 -1.88 0.00 0.00 1.10 2.91 1.00 -1.00 0.00 0.00 -11.66 548.40 -129.00 195025.90 14.62 1.90 2.10 38.69 0.16 -1.35 0.00 0.00 1.63 3.31 1.40 -1.00 0.00 0.00 -7.15 465.90 -130.00 195532.90 16.23 1.30 2.10 32.80 -1.36 0.60 0.00 0.00 1.02 2.01 0.60 -1.00 0.00 0.00 -12.76 972.90 -131.00 196628.90 23.60 1.80 2.10 62.09 -0.79 -2.30 0.00 0.00 1.19 2.92 1.00 -1.00 0.00 0.00 -15.81 788.90 -132.00 198192.30 16.61 1.00 2.10 35.72 -1.22 -0.71 0.00 0.00 0.79 2.62 0.70 -1.00 0.00 0.00 -16.81 1072.30 -133.00 200340.30 16.81 0.80 2.10 30.83 -0.55 -0.91 0.00 0.00 0.52 2.35 0.40 -1.00 0.00 0.00 -25.94 660.30 -134.00 200470.30 10.96 1.60 2.10 22.50 -0.39 3.62 0.00 0.00 1.05 1.95 1.10 -1.00 0.00 0.00 -8.38 790.30 -135.00 201125.20 21.70 2.10 2.10 54.17 0.04 0.05 0.00 0.00 1.42 2.70 1.20 -1.00 0.00 0.00 -12.23 165.20 -136.00 201660.60 14.99 1.80 2.10 38.14 -1.01 -3.49 0.00 0.00 1.38 3.12 1.20 -1.00 0.00 0.00 -8.66 700.60 -137.00 203272.70 12.57 1.30 2.10 28.78 0.70 0.12 0.00 0.00 1.10 2.25 1.00 -1.00 0.00 0.00 -9.12 1032.70 -138.00 206639.10 17.48 2.50 2.10 53.48 -1.14 0.33 0.00 0.00 2.12 3.33 1.70 -1.00 0.00 0.00 -6.60 559.10 -139.00 207116.60 16.12 1.50 2.10 32.47 -0.72 0.14 0.00 0.00 0.64 2.51 0.60 -1.00 0.00 0.00 -20.08 1036.60 -140.00 207517.60 13.72 1.20 2.10 29.73 -1.26 0.44 0.00 0.00 1.00 2.68 0.70 -1.00 0.00 0.00 -10.92 157.60 -141.00 209099.20 12.68 2.20 2.10 37.83 -1.59 0.04 0.00 0.00 1.92 3.69 1.70 -1.00 0.00 0.00 -5.28 459.20 -142.00 212122.10 17.32 2.90 2.10 46.59 0.29 2.07 0.00 0.00 2.09 2.85 0.90 -1.00 0.00 0.00 -6.63 922.10 -143.00 212446.00 23.84 1.00 2.10 48.90 -1.60 0.30 0.00 0.00 0.78 2.69 0.70 -1.00 0.00 0.00 -24.45 1246.00 -144.00 212603.30 15.58 2.00 2.10 38.69 -0.49 -1.07 0.00 0.00 1.13 2.88 0.90 -1.00 0.00 0.00 -11.03 123.30 -145.00 213022.10 17.65 1.50 2.10 47.26 0.24 -0.53 0.00 0.00 1.29 3.12 1.20 -1.00 0.00 0.00 -10.92 183.70 -146.00 213309.10 13.97 1.50 2.10 32.88 0.25 -0.84 0.00 0.00 1.36 2.58 1.30 -1.00 0.00 0.00 -8.19 829.10 -147.00 213474.20 11.66 1.30 2.10 25.57 -0.65 -1.55 0.00 0.00 1.14 2.16 1.10 -1.00 0.00 0.00 -8.16 994.20 -148.00 214437.70 24.20 1.30 2.10 56.24 0.01 0.91 0.00 0.00 0.80 2.96 1.00 -1.00 0.00 0.00 -24.26 677.70 -149.00 215915.60 17.32 1.90 2.10 47.11 -1.50 0.38 0.00 0.00 1.56 3.46 1.50 -1.00 0.00 0.00 -8.85 875.60 -150.00 217691.80 14.92 1.60 2.10 33.49 -0.41 1.55 0.00 0.00 1.32 2.66 1.10 -1.00 0.00 0.00 -9.02 91.80 -151.00 218856.30 13.92 2.30 2.10 44.18 -2.03 1.74 0.00 0.00 2.13 4.00 2.10 -1.00 0.00 0.00 -5.24 1256.30 -152.00 220309.10 15.62 0.90 2.10 34.85 -0.89 0.17 0.00 0.00 0.76 2.40 0.40 -1.00 0.00 0.00 -16.44 149.10 -153.00 220318.40 15.40 10.20 2.10 103.14 -0.55 -1.12 255.00 0.00 1.11 2.78 0.80 -1.00 0.00 0.00 -11.10 184.00 -154.00 221316.30 14.79 1.10 2.10 31.44 -1.05 -0.94 0.00 0.00 0.65 2.45 0.50 -1.00 0.00 0.00 -18.32 1156.30 -155.00 221327.60 18.43 1.60 2.10 48.10 -3.15 2.83 255.00 0.00 1.40 3.18 1.20 -1.00 0.00 0.00 -10.51 41.20 -156.00 221445.80 11.89 1.10 2.10 21.05 -3.39 1.14 0.00 0.00 0.55 1.63 0.50 -1.00 0.00 0.00 -17.23 5.80 -157.00 221533.60 10.44 0.60 2.10 20.02 -1.31 -1.16 0.00 0.00 0.50 2.34 0.40 -1.00 0.00 0.00 -16.69 93.60 -158.00 222254.50 12.28 1.30 1.60 10.10 -1.22 0.25 0.00 0.00 1.15 0.24 0.20 -1.00 0.00 0.00 -8.51 814.50 -159.00 224907.70 14.72 2.20 2.10 40.35 -1.25 0.02 0.00 0.00 1.97 3.29 1.60 -1.00 0.00 0.00 -5.98 907.70 -160.00 226045.70 17.29 2.00 2.10 44.66 -1.25 1.38 0.00 0.00 1.79 3.40 1.50 -1.00 0.00 0.00 -7.71 765.70 -161.00 226888.90 14.49 2.40 2.10 31.25 -0.48 2.13 0.00 0.00 1.13 2.12 0.80 -1.00 0.00 0.00 -10.25 328.90 -162.00 227447.40 25.60 1.20 2.10 62.12 -0.68 0.83 0.00 0.00 0.95 2.70 0.70 -1.00 0.00 0.00 -21.46 887.40 -163.00 228670.30 15.03 3.00 2.10 50.88 -0.95 -1.35 0.00 0.00 2.78 4.11 2.30 -1.00 0.00 0.00 -4.32 830.30 -164.00 230266.80 20.20 1.60 2.10 53.40 -2.20 2.69 0.00 0.00 1.11 3.05 1.10 -1.00 0.00 0.00 -14.61 1146.80 -165.00 234951.30 22.72 1.50 2.10 57.42 -0.87 -1.25 0.00 0.00 1.20 3.02 1.10 -1.00 0.00 0.00 -15.10 711.30 -166.00 235419.40 21.35 1.10 2.10 48.94 -1.27 -0.39 0.00 0.00 0.81 2.58 0.60 -1.00 0.00 0.00 -20.97 1179.40 -167.00 236050.80 21.92 1.20 2.10 52.12 -1.37 1.24 0.00 0.00 0.95 2.84 0.90 -1.00 0.00 0.00 -18.54 530.80 -168.00 236355.30 14.14 2.30 2.10 41.75 -1.24 -0.75 0.00 0.00 1.72 3.64 1.70 -1.00 0.00 0.00 -6.57 835.30 -169.00 237244.90 15.12 1.80 2.10 38.97 -1.54 1.69 0.00 0.00 1.58 3.23 1.40 -1.00 0.00 0.00 -7.68 444.90 -170.00 237263.20 10.95 2.80 2.10 35.02 -3.76 -1.94 0.00 0.00 2.62 3.34 2.50 -1.00 0.00 0.00 -3.34 463.20 -171.00 238214.60 10.71 1.80 2.10 27.98 -0.58 0.86 0.00 0.00 1.46 3.22 1.40 -1.00 0.00 0.00 -5.89 134.60 -172.00 238875.00 13.49 1.90 2.10 36.48 -1.85 0.96 0.00 0.00 1.53 3.33 1.40 -1.00 0.00 0.00 -7.06 795.00 -173.00 239098.90 15.97 1.50 2.10 38.57 -1.87 -0.15 0.00 0.00 1.10 2.99 1.00 -1.00 0.00 0.00 -11.65 1018.90 -174.00 239726.00 10.36 2.70 2.10 25.24 -1.80 0.58 0.00 0.00 2.37 0.94 0.70 -1.00 0.00 0.00 -3.50 366.00 -175.00 240006.60 17.68 1.30 2.10 37.73 -1.11 -2.01 0.00 0.00 0.89 2.55 0.60 -1.00 0.00 0.00 -15.97 646.60 -176.00 240162.00 12.73 1.40 2.10 30.33 -2.25 0.75 0.00 0.00 1.20 3.10 1.20 -1.00 0.00 0.00 -8.48 802.00 -177.00 240564.90 17.16 1.50 2.10 41.33 -1.64 -1.41 0.00 0.00 1.20 3.01 1.10 -1.00 0.00 0.00 -11.44 1204.90 -178.00 241128.60 12.14 2.70 2.10 33.13 -1.24 2.08 0.00 0.00 2.55 2.80 2.20 -1.00 0.00 0.00 -3.81 488.60 -179.00 243820.20 13.62 2.50 2.10 42.60 -0.49 -0.24 0.00 0.00 2.29 3.63 1.80 -1.00 0.00 0.00 -4.75 620.20 -180.00 243856.90 10.04 1.50 2.10 26.57 -1.02 0.79 0.00 0.00 1.33 3.24 1.30 -1.00 0.00 0.00 -6.05 656.90 -181.00 244364.80 16.46 3.10 2.10 61.36 -1.44 -0.18 0.00 0.00 2.92 3.71 2.50 -1.00 0.00 0.00 -4.50 1164.80 -182.00 244726.80 28.98 1.50 2.10 72.18 -0.81 -0.42 0.00 0.00 1.19 2.89 0.90 -1.00 0.00 0.00 -19.46 16.40 -183.00 244828.50 10.37 0.80 2.10 22.35 -1.76 0.71 0.00 0.00 0.68 2.62 0.70 -1.00 0.00 0.00 -12.13 118.10 -184.00 245542.70 12.19 1.30 2.10 24.61 -2.03 -1.91 0.00 0.00 0.93 2.52 0.60 -1.00 0.00 0.00 -10.47 64.30 -185.00 247127.60 10.81 2.00 2.10 26.88 -2.07 0.00 0.00 0.00 1.81 2.58 1.20 -1.00 0.00 0.00 -4.79 87.60 -186.00 248180.90 12.89 2.40 2.10 33.17 -1.23 -0.66 0.00 0.00 1.66 2.62 1.40 -1.00 0.00 0.00 -6.23 1140.90 -187.00 248323.30 17.54 2.10 2.10 47.78 -1.32 3.78 0.00 0.00 1.51 3.36 1.40 -1.00 0.00 0.00 -9.31 3.30 -188.00 249436.90 10.97 2.00 2.10 26.96 -1.29 -0.37 0.00 0.00 1.55 2.60 0.60 -1.00 0.00 0.00 -5.66 1116.90 -189.00 250063.10 10.18 2.70 2.10 25.97 -1.86 -0.55 0.00 0.00 2.54 0.81 0.40 -1.00 0.00 0.00 -3.21 463.10 -190.00 250289.70 12.30 2.40 2.10 39.60 -2.23 -0.99 0.00 0.00 2.22 3.97 2.00 -1.00 0.00 0.00 -4.43 689.70 -191.00 250686.50 11.21 1.60 2.10 28.71 -1.67 0.32 0.00 0.00 1.43 2.78 1.20 -1.00 0.00 0.00 -6.29 1086.50 -192.00 251230.00 10.43 2.40 2.10 33.73 -1.69 0.25 0.00 0.00 2.27 3.84 1.90 -1.00 0.00 0.00 -3.67 350.00 -193.00 251493.00 11.61 1.70 2.10 30.50 -1.28 -0.60 0.00 0.00 1.39 2.93 1.00 -1.00 0.00 0.00 -6.66 254.60 -194.00 251559.10 11.60 2.20 2.10 25.52 -1.66 1.27 0.00 0.00 2.01 1.28 0.40 -1.00 0.00 0.00 -4.61 679.10 -195.00 251704.10 10.21 2.70 2.10 32.13 -2.15 0.11 0.00 0.00 2.43 2.91 2.00 -1.00 0.00 0.00 -3.37 824.10 -196.00 252270.20 10.30 2.00 2.10 26.97 -1.16 0.47 0.00 0.00 1.77 2.70 0.70 -1.00 0.00 0.00 -4.65 110.20 -197.00 252678.50 22.68 3.30 2.10 79.54 -0.03 -0.23 0.00 0.00 2.22 3.90 1.90 -1.00 0.00 0.00 -8.16 518.50 -198.00 252870.50 10.11 2.40 2.10 24.79 -1.55 1.53 0.00 0.00 1.78 1.76 0.60 -1.00 0.00 0.00 -4.54 710.50 -199.00 253279.10 10.77 0.80 2.10 19.08 -1.79 -0.17 0.00 0.00 0.60 1.90 0.40 -1.00 0.00 0.00 -14.29 1119.10 -200.00 253638.50 10.96 3.30 2.10 35.62 -1.19 -0.52 0.00 0.00 2.72 3.15 1.80 -1.00 0.00 0.00 -3.22 96.10 -201.00 253872.80 15.99 2.30 2.10 46.88 -2.05 -0.20 0.00 0.00 2.05 3.72 1.80 -1.00 0.00 0.00 -6.25 432.80 -202.00 254445.00 12.85 2.90 2.10 39.81 -0.50 2.11 0.00 0.00 2.42 2.77 1.90 -1.00 0.00 0.00 -4.25 1005.00 -203.00 254852.90 10.30 3.80 2.10 37.23 -0.88 -0.47 0.00 0.00 3.22 3.24 2.40 -1.00 0.00 0.00 -2.56 132.90 -204.00 254876.90 12.44 3.40 2.10 43.52 -2.01 0.52 0.00 0.00 3.15 3.37 1.90 -1.00 0.00 0.00 -3.16 156.90 -205.00 255259.40 14.28 1.60 2.10 32.02 -1.64 0.38 0.00 0.00 1.44 2.53 1.10 -1.00 0.00 0.00 -7.94 539.40 -206.00 255446.20 11.30 2.60 2.10 31.04 -1.19 1.55 0.00 0.00 2.26 1.74 1.30 -1.00 0.00 0.00 -3.99 726.20 -207.00 256183.90 11.48 1.30 2.10 24.40 -0.30 -0.53 0.00 0.00 1.02 2.53 0.60 -1.00 0.00 0.00 -8.97 183.90 -208.00 257352.90 11.86 2.90 2.10 37.75 -3.30 -1.76 0.00 0.00 2.49 3.86 1.90 -1.00 0.00 0.00 -3.82 72.90 -209.00 257632.40 22.34 1.00 2.10 45.03 -3.81 -0.75 0.00 0.00 0.53 2.40 0.80 -1.00 0.00 0.00 -33.63 352.40 -210.00 257700.00 18.71 1.80 2.10 54.43 -2.30 -0.09 0.00 0.00 1.51 3.42 1.50 -1.00 0.00 0.00 -9.93 420.00 -211.00 258490.00 11.44 2.10 2.10 32.30 -1.94 -2.12 0.00 0.00 1.93 3.08 1.90 -1.00 0.00 0.00 -4.73 1210.00 -212.00 258668.20 10.61 1.90 2.10 26.35 -2.55 0.02 0.00 0.00 1.47 2.72 1.30 -1.00 0.00 0.00 -5.78 108.20 -213.00 258785.30 16.98 0.90 2.10 28.98 -2.51 -0.26 0.00 0.00 0.74 1.44 0.60 -1.00 0.00 0.00 -18.28 225.30 -214.00 259601.50 23.85 2.10 2.10 69.93 -1.21 -2.49 0.00 0.00 1.79 3.47 1.50 -1.00 0.00 0.00 -10.68 1041.50 -215.00 261456.00 18.48 1.80 2.10 50.49 -1.80 -2.45 0.00 0.00 1.62 3.36 1.40 -1.00 0.00 0.00 -9.15 336.00 -216.00 262017.00 16.85 3.20 2.10 48.56 -1.96 -0.94 0.00 0.00 3.09 2.77 0.80 -1.00 0.00 0.00 -4.36 897.00 -217.00 262798.90 12.61 1.80 2.10 29.54 -2.63 -0.92 0.00 0.00 1.12 2.88 1.00 -1.00 0.00 0.00 -9.02 398.90 -218.00 263982.50 25.35 1.70 2.10 68.63 -1.31 1.04 0.00 0.00 1.39 3.07 1.10 -1.00 0.00 0.00 -14.62 302.50 -219.00 264231.30 15.61 1.80 2.10 44.27 -3.28 -0.80 0.00 0.00 1.23 3.25 1.30 -1.00 0.00 0.00 -10.19 551.30 -220.00 264488.60 12.86 1.80 2.10 29.16 -3.42 -0.93 0.00 0.00 1.19 2.74 0.80 -1.00 0.00 0.00 -8.67 808.60 -221.00 264741.10 15.57 1.00 2.10 36.17 -2.22 -1.04 0.00 0.00 0.86 2.69 0.70 -1.00 0.00 0.00 -14.43 318.70 -222.00 265321.60 21.29 2.30 2.10 68.28 -1.72 -0.30 0.00 0.00 1.92 3.66 1.70 -1.00 0.00 0.00 -8.88 361.60 -223.00 265333.50 18.07 14.20 2.10 179.41 -1.70 -0.21 255.00 0.00 1.66 2.79 0.80 -1.00 0.00 0.00 -8.72 143.10 -224.00 265720.90 10.06 2.40 2.10 33.01 -2.22 0.77 0.00 0.00 2.16 3.68 2.20 -1.00 0.00 0.00 -3.72 760.90 -225.00 266304.40 13.54 1.00 2.10 30.85 -2.89 0.79 0.00 0.00 0.82 2.65 0.70 -1.00 0.00 0.00 -13.15 346.00 -226.00 266791.40 11.36 1.50 2.10 29.04 -2.14 -0.24 0.00 0.00 1.15 3.05 1.10 -1.00 0.00 0.00 -7.90 551.40 -227.00 266853.10 23.76 1.20 2.10 59.02 -2.97 -1.25 0.00 0.00 0.97 2.77 0.80 -1.00 0.00 0.00 -19.70 613.10 -228.00 267187.30 17.98 1.20 2.10 44.99 -2.57 2.13 0.00 0.00 1.00 2.74 0.80 -1.00 0.00 0.00 -14.32 76.90 -229.00 267301.90 19.10 1.50 2.10 49.77 -2.23 0.33 0.00 0.00 1.13 3.06 1.10 -1.00 0.00 0.00 -13.53 1061.90 -230.00 267307.00 17.48 6.60 2.10 116.87 -2.63 0.55 255.00 0.00 6.33 8.19 6.20 -1.00 0.00 0.00 -2.21 196.60 -231.00 267343.90 14.46 2.10 2.10 39.95 -2.77 -1.82 0.00 0.00 1.86 2.96 1.80 -1.00 0.00 0.00 -6.22 1103.90 -232.00 267774.90 18.52 0.80 2.10 33.39 -1.80 1.26 0.00 0.00 0.58 2.18 0.40 -1.00 0.00 0.00 -25.44 254.90 -233.00 267846.60 15.11 4.60 2.10 55.69 -2.73 1.01 0.00 0.00 4.34 3.36 2.00 -1.00 0.00 0.00 -2.79 326.60 -234.00 268100.60 16.19 3.10 2.10 52.60 -2.29 -0.45 0.00 0.00 2.02 3.68 1.70 -1.00 0.00 0.00 -6.40 580.60 -235.00 268241.60 14.91 2.10 2.10 44.83 -1.47 -1.12 0.00 0.00 1.76 3.72 1.80 -1.00 0.00 0.00 -6.76 363.20 -236.00 268545.20 11.62 1.50 2.10 29.59 -2.07 1.40 0.00 0.00 1.32 3.00 1.00 -1.00 0.00 0.00 -7.03 1025.20 -237.00 268586.40 22.12 0.90 2.10 43.80 -1.30 0.96 0.00 0.00 0.46 2.15 0.70 -1.00 0.00 0.00 -38.52 1066.40 -238.00 269077.20 12.50 1.70 2.10 33.56 -1.60 0.77 0.00 0.00 1.30 3.15 1.20 -1.00 0.00 0.00 -7.71 277.20 -239.00 269242.40 15.80 1.20 2.10 37.81 -2.09 1.76 0.00 0.00 0.97 2.56 0.60 -1.00 0.00 0.00 -13.06 442.40 -240.00 269349.00 10.89 0.60 2.10 21.49 -2.08 1.75 0.00 0.00 0.47 2.38 0.40 -1.00 0.00 0.00 -18.39 549.00 -241.00 269569.10 19.97 1.10 2.10 40.84 -1.73 -1.14 0.00 0.00 0.51 2.32 0.70 -1.00 0.00 0.00 -31.21 769.10 -242.00 270898.00 13.72 3.20 2.10 55.37 -1.47 0.86 0.00 0.00 2.73 4.69 2.70 -1.00 0.00 0.00 -4.02 818.00 -243.00 271162.00 19.07 1.60 2.10 46.26 -2.12 1.08 0.00 0.00 1.15 3.12 1.20 -1.00 0.00 0.00 -13.32 1082.00 -244.00 271282.00 10.87 2.00 2.10 27.00 -2.91 1.14 0.00 0.00 1.83 2.64 0.70 -1.00 0.00 0.00 -4.75 331.60 -245.00 271818.20 12.45 1.70 2.10 35.39 -2.76 -0.08 0.00 0.00 1.56 2.71 1.60 -1.00 0.00 0.00 -6.39 458.20 -246.00 272094.30 11.71 1.80 2.10 32.23 -2.90 -0.75 0.00 0.00 1.60 3.46 1.50 -1.00 0.00 0.00 -5.87 734.30 -247.00 272171.10 15.48 2.60 2.10 45.49 -2.01 0.67 0.00 0.00 1.87 3.51 1.60 -1.00 0.00 0.00 -6.62 811.10 -248.00 272796.60 11.30 2.00 2.10 30.26 -1.61 -0.96 0.00 0.00 1.75 3.23 1.30 -1.00 0.00 0.00 -5.17 156.60 -249.00 273222.00 16.64 1.60 2.10 45.16 -2.42 0.70 0.00 0.00 1.31 3.15 1.20 -1.00 0.00 0.00 -10.13 582.00 -250.00 273237.50 13.90 1.30 2.10 31.87 -4.74 -0.42 0.00 0.00 1.08 2.66 1.00 -1.00 0.00 0.00 -10.33 597.50 -251.00 273356.60 20.55 1.90 2.10 52.81 -2.26 -1.00 0.00 0.00 1.20 2.83 0.90 -1.00 0.00 0.00 -13.67 716.60 -252.00 273738.40 16.22 1.00 2.10 35.30 -2.75 -0.13 0.00 0.00 0.78 2.56 0.60 -1.00 0.00 0.00 -16.61 1098.40 -253.00 273802.10 12.29 3.00 2.10 40.42 -3.14 -1.76 0.00 0.00 2.80 3.52 2.50 -1.00 0.00 0.00 -3.52 1162.10 -254.00 274083.10 18.28 2.60 2.10 59.92 -2.63 -0.21 0.00 0.00 1.46 3.80 2.00 -1.00 0.00 0.00 -10.05 163.10 -255.00 274297.30 22.30 0.90 2.10 43.36 -2.77 -1.04 0.00 0.00 0.62 2.53 0.70 -1.00 0.00 0.00 -28.62 377.30 -256.00 274341.00 10.73 2.30 2.10 33.16 -2.87 -0.77 0.00 0.00 2.04 3.41 1.50 -1.00 0.00 0.00 -4.20 421.00 -257.00 275032.70 14.35 1.10 2.10 32.96 -3.56 2.59 0.00 0.00 0.91 2.56 0.70 -1.00 0.00 0.00 -12.63 1112.70 -258.00 277019.30 13.26 2.10 2.10 39.43 -1.99 0.99 0.00 0.00 1.76 3.58 1.60 -1.00 0.00 0.00 -6.01 539.30 -259.00 278643.50 11.19 2.40 2.10 33.80 -4.36 0.90 0.00 0.00 2.21 3.50 1.60 -1.00 0.00 0.00 -4.05 883.50 -260.00 279589.00 11.87 3.30 2.10 38.58 -2.44 -0.26 0.00 0.00 1.78 3.69 1.70 -1.00 0.00 0.00 -5.35 549.00 -261.00 279956.30 20.62 2.20 2.10 64.32 -3.11 -0.19 0.00 0.00 1.87 3.62 1.70 -1.00 0.00 0.00 -8.82 916.30 -262.00 280348.80 13.81 2.00 2.10 38.71 -2.64 1.30 0.00 0.00 1.56 3.38 1.40 -1.00 0.00 0.00 -7.07 28.80 -263.00 280420.80 12.54 2.70 2.10 37.31 -3.35 -1.76 0.00 0.00 2.50 2.93 2.00 -1.00 0.00 0.00 -4.01 100.80 -264.00 281241.60 15.08 1.10 2.10 32.42 -4.43 0.95 0.00 0.00 0.90 2.65 0.70 -1.00 0.00 0.00 -13.42 921.60 -265.00 282760.10 15.72 2.50 2.10 49.86 -3.28 0.01 0.00 0.00 2.00 3.91 2.00 -1.00 0.00 0.00 -6.28 1160.10 -266.00 283782.00 11.57 1.30 2.10 24.36 -3.42 -0.93 0.00 0.00 1.14 2.48 1.00 -1.00 0.00 0.00 -8.13 902.00 -267.00 285619.50 20.86 2.70 2.10 70.33 -3.84 -1.76 0.00 0.00 2.38 4.12 2.20 -1.00 0.00 0.00 -7.00 179.50 -268.00 286190.10 17.52 2.30 2.10 51.23 -3.05 1.70 0.00 0.00 1.37 3.19 1.50 -1.00 0.00 0.00 -10.26 750.10 -269.00 286347.10 20.07 2.60 2.10 54.72 -2.79 -0.35 0.00 0.00 1.66 3.05 1.20 -1.00 0.00 0.00 -9.70 907.10 -270.00 287192.40 15.91 2.80 2.10 50.57 -2.73 -1.04 0.00 0.00 2.26 3.29 2.10 -1.00 0.00 0.00 -5.62 472.40 -271.00 289733.90 12.27 2.20 2.10 32.35 -3.55 -1.83 0.00 0.00 1.62 2.89 1.40 -1.00 0.00 0.00 -6.05 453.90 -272.00 290770.60 17.28 3.10 2.10 59.83 -4.08 -1.70 0.00 0.00 2.78 3.97 2.00 -1.00 0.00 0.00 -4.97 210.60 -273.00 290836.10 16.32 1.50 2.10 38.80 -3.91 1.90 0.00 0.00 1.11 2.76 0.90 -1.00 0.00 0.00 -11.78 276.10 -274.00 291363.30 11.99 3.30 2.10 36.80 -3.06 -0.27 0.00 0.00 2.58 3.66 1.70 -1.00 0.00 0.00 -3.73 803.30 -275.00 292090.50 11.30 1.20 2.10 26.79 -1.41 -1.24 0.00 0.00 0.93 2.83 0.90 -1.00 0.00 0.00 -9.75 250.50 -276.00 292254.80 11.12 2.20 2.10 33.22 -2.84 0.87 0.00 0.00 2.04 3.86 1.90 -1.00 0.00 0.00 -4.35 414.80 -277.00 292835.30 14.83 2.60 2.10 46.38 -1.70 0.89 0.00 0.00 1.97 3.65 1.70 -1.00 0.00 0.00 -6.03 995.30 -278.00 293170.20 12.24 1.40 2.10 30.56 -2.28 0.10 0.00 0.00 1.20 2.74 0.80 -1.00 0.00 0.00 -8.19 50.20 -279.00 293337.50 15.24 1.50 2.10 37.16 -1.14 0.27 0.00 0.00 1.26 2.88 0.90 -1.00 0.00 0.00 -9.69 217.50 -280.00 293801.80 11.26 2.80 2.10 32.06 -1.87 0.52 0.00 0.00 1.54 3.20 1.30 -1.00 0.00 0.00 -5.83 681.80 -281.00 294656.30 17.76 2.00 2.10 52.76 -3.59 1.90 0.00 0.00 1.14 3.56 1.60 -1.00 0.00 0.00 -12.44 256.30 -282.00 295609.10 10.01 2.60 2.10 26.96 -2.57 0.91 0.00 0.00 2.31 2.03 1.80 -1.00 0.00 0.00 -3.47 1209.10 -283.00 297925.60 13.65 3.00 2.10 47.11 -4.24 -1.82 0.00 0.00 2.36 3.77 1.80 -1.00 0.00 0.00 -4.64 965.60 -284.00 299062.80 14.32 1.70 2.10 39.71 -3.47 -2.04 0.00 0.00 1.33 3.30 1.40 -1.00 0.00 0.00 -8.60 822.80 -285.00 299962.20 11.85 3.10 2.10 29.49 -1.90 0.30 0.00 0.00 2.98 0.68 0.40 -1.00 0.00 0.00 -3.18 442.20 -286.00 300162.70 12.89 2.80 2.10 33.15 -2.02 0.15 0.00 0.00 1.33 2.74 1.00 -1.00 0.00 0.00 -7.77 642.70 -287.00 301663.10 13.40 2.30 2.10 32.48 -3.19 -1.07 0.00 0.00 1.55 3.00 1.20 -1.00 0.00 0.00 -6.92 863.10 -288.00 301802.10 17.55 1.90 2.10 37.67 -3.96 1.26 0.00 0.00 1.34 2.52 1.00 -1.00 0.00 0.00 -10.48 1002.10 -289.00 302515.60 15.69 1.30 2.10 35.28 -4.53 2.09 0.00 0.00 1.14 2.91 1.00 -1.00 0.00 0.00 -11.01 435.60 -290.00 302526.20 10.36 1.40 2.10 20.84 -4.08 -0.17 255.00 0.00 1.29 1.35 1.10 -1.00 0.00 0.00 -6.43 87.80 -291.00 303090.50 11.14 1.30 2.10 23.33 -3.22 1.00 0.00 0.00 1.06 1.46 0.90 -1.00 0.00 0.00 -8.44 1010.50 -292.00 304593.50 11.87 1.30 2.10 23.03 -3.68 -0.70 0.00 0.00 0.76 1.50 0.70 -1.00 0.00 0.00 -12.43 1233.50 -293.00 304910.50 12.26 1.50 2.10 28.92 -3.84 1.29 0.00 0.00 1.29 2.78 0.80 -1.00 0.00 0.00 -7.62 270.50 -294.00 305463.60 18.67 2.00 2.10 57.95 -2.49 -0.52 0.00 0.00 1.56 3.65 1.70 -1.00 0.00 0.00 -9.55 823.60 -295.00 309140.80 12.48 2.60 2.10 34.56 -3.49 0.30 0.00 0.00 2.38 3.28 1.30 -1.00 0.00 0.00 -4.19 660.80 -296.00 310686.60 16.63 1.60 2.10 45.61 -4.13 0.64 0.00 0.00 1.32 3.14 1.20 -1.00 0.00 0.00 -10.08 926.60 -297.00 311075.40 11.97 2.20 2.10 35.93 -4.80 -1.99 0.00 0.00 1.99 3.65 1.70 -1.00 0.00 0.00 -4.82 35.40 -298.00 312560.80 11.54 2.70 2.10 36.94 -3.11 0.44 0.00 0.00 2.43 3.23 2.30 -1.00 0.00 0.00 -3.80 240.80 -299.00 312647.20 14.49 1.60 2.10 37.96 -4.84 -1.48 0.00 0.00 1.37 3.13 1.20 -1.00 0.00 0.00 -8.45 327.20 -300.00 312876.20 23.07 2.80 2.10 67.52 -2.99 -1.07 0.00 0.00 1.26 3.52 1.60 -1.00 0.00 0.00 -14.59 556.20 -301.00 313475.20 13.24 0.90 2.10 21.48 -3.57 -0.42 0.00 0.00 0.48 1.56 0.40 -1.00 0.00 0.00 -21.94 1155.20 -302.00 314857.50 16.21 2.30 2.10 52.13 -2.93 0.55 0.00 0.00 2.14 3.78 1.80 -1.00 0.00 0.00 -6.07 1257.50 -303.00 314882.50 12.71 2.60 2.10 33.50 -4.91 0.03 0.00 0.00 1.53 3.12 1.20 -1.00 0.00 0.00 -6.66 2.50 -304.00 314966.60 14.36 1.90 2.10 39.00 -3.49 -1.16 0.00 0.00 1.67 2.98 1.00 -1.00 0.00 0.00 -6.87 86.60 -305.00 316080.40 19.65 1.70 2.10 53.10 -4.52 0.54 0.00 0.00 1.36 3.02 1.10 -1.00 0.00 0.00 -11.56 1200.40 -306.00 316764.50 13.25 3.50 2.10 40.44 -3.88 1.23 0.00 0.00 2.37 2.50 1.80 -1.00 0.00 0.00 -4.48 604.50 -307.00 316949.40 11.27 2.10 2.10 27.81 -3.67 0.69 0.00 0.00 1.97 2.30 1.30 -1.00 0.00 0.00 -4.57 789.40 -308.00 317438.90 15.32 1.50 2.10 37.13 -4.69 0.66 0.00 0.00 1.23 2.97 1.00 -1.00 0.00 0.00 -9.96 1278.90 -309.00 317439.60 13.41 2.20 2.10 42.39 -4.86 -1.13 0.00 0.00 1.93 3.70 1.70 -1.00 0.00 0.00 -5.57 -0.40 -310.00 318088.20 12.44 1.60 2.10 31.73 -2.80 -0.41 0.00 0.00 1.27 2.99 1.00 -1.00 0.00 0.00 -7.85 648.20 -311.00 318846.90 14.15 2.50 2.10 40.83 -3.28 0.57 0.00 0.00 2.14 3.06 2.00 -1.00 0.00 0.00 -5.30 126.90 -312.00 319044.80 10.46 4.00 2.10 47.76 -3.86 -1.95 0.00 0.00 3.70 5.43 3.50 -1.00 0.00 0.00 -2.26 324.80 -313.00 319575.10 13.05 2.20 2.10 36.81 -3.72 -1.29 0.00 0.00 2.08 3.44 1.50 -1.00 0.00 0.00 -5.03 855.10 -314.00 319877.50 10.44 3.70 2.10 37.39 -3.24 -1.14 0.00 0.00 3.49 3.13 2.70 -1.00 0.00 0.00 -2.40 1157.50 -315.00 320173.90 10.40 2.00 2.10 26.22 -4.58 1.33 0.00 0.00 1.88 2.83 1.30 -1.00 0.00 0.00 -4.43 173.90 -316.00 320340.60 18.12 2.30 2.10 58.30 -3.78 -0.09 0.00 0.00 2.01 3.81 1.90 -1.00 0.00 0.00 -7.22 340.60 -317.00 321030.10 12.80 1.80 2.10 28.21 -3.72 -2.00 0.00 0.00 1.43 2.14 1.00 -1.00 0.00 0.00 -7.15 1030.10 -318.00 321199.70 10.40 2.20 2.10 32.59 -3.75 -0.85 0.00 0.00 2.04 3.77 1.80 -1.00 0.00 0.00 -4.08 1199.70 -319.00 321409.80 12.44 1.70 2.10 32.89 -3.10 0.62 0.00 0.00 1.53 3.47 1.50 -1.00 0.00 0.00 -6.49 129.80 -320.00 322469.60 14.17 3.30 2.10 47.29 -2.91 0.19 0.00 0.00 2.31 3.83 2.00 -1.00 0.00 0.00 -4.90 1189.60 -321.00 323129.80 21.83 3.60 2.10 65.50 -4.51 0.67 0.00 0.00 1.98 3.33 1.40 -1.00 0.00 0.00 -8.80 569.80 -322.00 323155.30 12.03 2.80 2.10 33.75 -4.88 1.05 0.00 0.00 1.47 3.26 1.30 -1.00 0.00 0.00 -6.54 364.90 -323.00 323271.30 14.07 3.30 2.10 49.57 -3.52 1.40 0.00 0.00 3.13 3.99 2.70 -1.00 0.00 0.00 -3.60 711.30 -324.00 323447.40 11.48 2.00 2.10 29.07 -4.62 0.04 0.00 0.00 1.82 2.05 1.10 -1.00 0.00 0.00 -5.05 887.40 -325.00 323734.70 15.76 1.90 2.10 40.60 -4.75 1.78 0.00 0.00 1.64 3.15 1.20 -1.00 0.00 0.00 -7.70 1174.70 -326.00 323742.50 12.89 10.00 2.10 116.29 -3.59 0.08 255.00 0.00 9.02 3.57 1.60 -1.00 0.00 0.00 -1.14 184.10 -327.00 324382.80 10.58 3.30 2.10 39.88 -2.79 0.15 0.00 0.00 2.88 4.41 2.80 -1.00 0.00 0.00 -2.94 542.80 -328.00 324403.90 10.02 2.40 2.10 27.10 -2.89 -0.91 0.00 0.00 1.50 3.28 1.30 -1.00 0.00 0.00 -5.33 77.50 -329.00 324908.10 12.65 2.50 2.10 39.37 -4.08 2.28 0.00 0.00 1.92 3.34 1.70 -1.00 0.00 0.00 -5.27 1068.10 -330.00 325518.60 11.83 1.30 2.10 29.33 -4.36 -0.05 0.00 0.00 0.83 3.12 1.20 -1.00 0.00 0.00 -11.47 398.60 -331.00 326055.50 21.22 1.60 2.10 55.32 -3.13 0.24 0.00 0.00 1.06 2.92 1.00 -1.00 0.00 0.00 -16.06 935.50 -332.00 327010.30 15.77 1.80 2.10 42.91 -3.67 1.00 0.00 0.00 1.10 3.14 1.20 -1.00 0.00 0.00 -11.44 610.30 -333.00 327181.90 22.12 1.50 2.10 52.62 -4.26 0.49 0.00 0.00 1.25 2.92 1.00 -1.00 0.00 0.00 -14.12 781.90 -334.00 330248.70 15.28 3.40 2.10 57.77 -3.56 0.45 0.00 0.00 3.17 4.03 2.70 -1.00 0.00 0.00 -3.86 8.70 -335.00 330340.60 11.71 2.50 2.10 30.12 -2.59 0.21 0.00 0.00 2.28 2.83 1.40 -1.00 0.00 0.00 -4.10 100.60 -336.00 331346.40 12.92 1.70 2.10 32.96 -3.69 -0.84 0.00 0.00 1.35 3.07 1.10 -1.00 0.00 0.00 -7.63 1106.40 -337.00 331386.00 20.66 1.50 2.10 49.43 -3.58 0.33 0.00 0.00 1.00 2.64 0.70 -1.00 0.00 0.00 -16.46 1146.00 -338.00 332225.80 16.99 3.00 2.10 45.30 -3.38 -0.51 0.00 0.00 1.49 3.03 1.10 -1.00 0.00 0.00 -9.11 705.80 -339.00 333143.90 17.26 2.30 2.10 41.32 -2.67 -0.21 0.00 0.00 1.89 2.86 0.90 -1.00 0.00 0.00 -7.32 343.90 -340.00 333339.70 10.21 1.50 2.10 23.17 -3.71 -1.87 0.00 0.00 1.11 2.55 0.60 -1.00 0.00 0.00 -7.34 539.70 -341.00 333470.50 11.88 3.60 2.10 41.05 -3.07 1.58 0.00 0.00 3.40 3.45 2.70 -1.00 0.00 0.00 -2.80 670.50 -342.00 333612.90 20.18 1.80 2.10 55.76 -3.65 -0.67 0.00 0.00 1.52 3.34 1.40 -1.00 0.00 0.00 -10.64 812.90 -343.00 334650.10 15.02 1.00 2.10 30.70 -4.25 0.17 0.00 0.00 0.88 2.59 0.60 -1.00 0.00 0.00 -13.68 570.10 -344.00 335741.50 17.39 2.80 2.10 57.53 -3.56 -0.11 0.00 0.00 1.61 3.80 1.90 -1.00 0.00 0.00 -8.62 381.50 -345.00 335943.80 10.91 1.70 2.10 29.57 -3.97 -0.07 0.00 0.00 1.46 3.23 1.40 -1.00 0.00 0.00 -5.99 583.80 -346.00 336065.20 13.32 1.90 2.10 34.37 -3.00 0.07 0.00 0.00 1.73 2.72 1.30 -1.00 0.00 0.00 -6.16 705.20 -347.00 336320.70 15.67 2.10 2.10 39.74 -3.93 -0.24 0.00 0.00 1.42 3.15 1.20 -1.00 0.00 0.00 -8.85 960.70 -348.00 336841.80 16.18 1.60 2.10 40.94 -7.39 -0.39 0.00 0.00 1.31 3.05 1.10 -1.00 0.00 0.00 -9.90 201.80 -349.00 338665.50 11.52 1.20 2.10 24.50 -5.57 0.12 0.00 0.00 1.11 2.26 0.30 -1.00 0.00 0.00 -8.32 745.50 -350.00 338672.60 12.92 8.30 2.10 78.03 -5.58 0.08 255.00 0.00 8.07 2.42 1.40 -1.00 0.00 0.00 -1.28 138.20 -351.00 338719.30 12.28 1.70 2.10 31.52 -5.24 0.89 0.00 0.00 1.42 3.14 1.20 -1.00 0.00 0.00 -6.91 799.30 -352.00 338768.90 13.88 2.90 2.10 46.57 -5.18 1.99 0.00 0.00 2.49 3.95 2.10 -1.00 0.00 0.00 -4.46 848.90 -353.00 339850.80 17.10 2.20 2.10 43.04 -5.44 -0.03 0.00 0.00 1.48 2.91 1.20 -1.00 0.00 0.00 -9.24 650.80 -354.00 340419.90 13.03 2.20 2.10 37.81 -6.28 3.20 0.00 0.00 1.93 3.32 1.70 -1.00 0.00 0.00 -5.40 1219.90 -355.00 340657.30 11.61 2.80 2.10 32.99 -4.12 -1.47 0.00 0.00 2.63 3.64 2.50 -1.00 0.00 0.00 -3.53 177.30 -356.00 340730.10 13.41 2.00 2.10 36.82 -3.19 -1.70 0.00 0.00 0.93 3.06 1.10 -1.00 0.00 0.00 -11.58 250.10 -357.00 341369.70 13.89 2.20 2.10 43.75 -4.79 -0.38 0.00 0.00 1.92 3.72 1.80 -1.00 0.00 0.00 -5.80 147.30 -358.00 341586.00 22.71 1.90 2.10 58.26 -4.74 -1.40 0.00 0.00 1.40 3.06 1.10 -1.00 0.00 0.00 -12.97 1106.00 -359.00 341856.90 10.83 3.70 2.10 33.79 -5.47 2.00 0.00 0.00 2.79 2.98 2.10 -1.00 0.00 0.00 -3.10 96.90 -360.00 341909.70 10.70 2.70 2.10 27.03 -5.22 -0.30 0.00 0.00 1.67 1.96 1.40 -1.00 0.00 0.00 -5.11 149.70 -361.00 341925.10 15.40 1.20 2.10 35.32 -5.55 -1.36 0.00 0.00 0.92 2.50 0.50 -1.00 0.00 0.00 -13.43 165.10 -362.00 342825.40 28.94 2.00 2.10 88.38 -5.46 -1.06 0.00 0.00 1.04 3.36 1.40 -1.00 0.00 0.00 -22.20 1065.40 -363.00 343412.10 17.45 1.60 2.10 38.14 -4.65 -2.59 0.00 0.00 1.06 2.63 0.70 -1.00 0.00 0.00 -13.22 372.10 -364.00 343515.50 11.03 1.50 2.10 22.66 -5.70 0.61 0.00 0.00 1.04 1.92 0.80 -1.00 0.00 0.00 -8.45 475.50 -365.00 343873.00 11.70 2.00 2.10 31.84 -5.01 0.02 0.00 0.00 1.33 2.73 1.40 -1.00 0.00 0.00 -7.06 833.00 -366.00 344046.10 14.81 3.00 2.10 52.21 -4.52 0.04 0.00 0.00 2.57 4.20 2.30 -1.00 0.00 0.00 -4.61 1006.10 -367.00 344177.30 13.80 4.20 2.10 51.61 -5.97 1.77 0.00 0.00 3.09 3.96 2.00 -1.00 0.00 0.00 -3.57 1137.30 -368.00 345563.90 10.63 1.80 2.10 25.51 -6.17 0.28 0.00 0.00 1.62 1.79 0.80 -1.00 0.00 0.00 -5.26 1243.90 -369.00 346127.80 13.92 2.20 2.10 39.70 -5.25 0.41 0.00 0.00 1.80 3.15 1.20 -1.00 0.00 0.00 -6.18 527.80 -370.00 348366.20 16.28 1.70 2.10 44.17 -5.01 -0.93 0.00 0.00 1.41 3.27 1.30 -1.00 0.00 0.00 -9.23 206.20 -371.00 348835.10 11.84 2.40 2.10 30.18 -4.41 -1.18 0.00 0.00 1.87 2.76 1.40 -1.00 0.00 0.00 -5.06 675.10 -372.00 349036.00 10.55 1.40 2.10 25.17 -4.40 -0.97 0.00 0.00 1.04 2.84 0.90 -1.00 0.00 0.00 -8.11 876.00 -373.00 349192.50 10.91 2.70 2.10 38.32 -4.14 1.39 0.00 0.00 2.52 4.33 2.40 -1.00 0.00 0.00 -3.47 1032.50 -374.00 349549.60 11.01 1.40 2.10 24.63 -5.07 0.08 0.00 0.00 1.27 2.79 0.80 -1.00 0.00 0.00 -6.91 109.60 -375.00 350169.50 13.54 1.40 2.10 32.25 -4.78 -0.33 0.00 0.00 1.08 2.63 0.70 -1.00 0.00 0.00 -10.01 729.50 -376.00 350939.40 12.66 2.30 2.10 40.90 -3.63 -1.03 0.00 0.00 1.95 3.42 1.50 -1.00 0.00 0.00 -5.19 117.00 -377.00 351345.80 12.14 2.20 2.10 34.50 -7.94 0.83 0.00 0.00 1.94 3.29 1.80 -1.00 0.00 0.00 -5.00 625.80 -378.00 353520.30 13.82 2.90 2.10 47.70 -2.97 0.82 0.00 0.00 2.17 4.00 2.00 -1.00 0.00 0.00 -5.10 240.30 -379.00 353982.70 11.68 1.20 2.10 26.93 -5.79 0.62 0.00 0.00 0.80 2.72 0.80 -1.00 0.00 0.00 -11.72 702.70 -380.00 354008.00 17.60 2.10 2.10 48.02 -5.75 -0.62 0.00 0.00 1.32 3.04 1.10 -1.00 0.00 0.00 -10.63 113.60 -381.00 355423.60 21.21 2.50 2.10 67.35 -5.43 0.56 0.00 0.00 1.68 3.82 2.00 -1.00 0.00 0.00 -10.11 863.60 -382.00 355706.30 16.02 1.30 2.10 37.85 -5.31 1.52 0.00 0.00 1.10 2.76 0.80 -1.00 0.00 0.00 -11.65 1146.30 -383.00 355922.20 16.89 1.90 2.10 48.33 -5.57 0.82 0.00 0.00 1.66 3.33 1.40 -1.00 0.00 0.00 -8.13 82.20 -384.00 356372.90 11.10 1.50 2.10 22.58 -5.13 0.78 0.00 0.00 0.96 1.66 0.90 -1.00 0.00 0.00 -9.28 532.90 -385.00 357486.90 13.60 1.90 2.10 35.38 -6.89 -0.93 0.00 0.00 1.61 2.73 1.40 -1.00 0.00 0.00 -6.74 366.90 -386.00 358346.50 15.16 3.00 2.10 37.83 -4.97 -0.27 0.00 0.00 1.27 2.63 1.00 -1.00 0.00 0.00 -9.58 1226.50 -387.00 359215.60 13.03 3.30 2.10 42.73 -6.50 -0.52 0.00 0.00 2.59 3.96 2.00 -1.00 0.00 0.00 -4.03 815.60 -388.00 359271.10 20.31 2.80 2.10 65.72 -5.03 0.98 0.00 0.00 2.32 3.99 2.00 -1.00 0.00 0.00 -7.02 871.10 -389.00 359586.80 12.70 1.50 2.10 25.57 -6.02 0.15 0.00 0.00 0.93 1.85 0.60 -1.00 0.00 0.00 -10.88 1186.80 -390.00 360112.60 10.91 1.40 2.10 26.62 -4.65 -0.99 0.00 0.00 1.15 2.78 0.80 -1.00 0.00 0.00 -7.56 432.60 -391.00 363150.20 19.29 1.60 2.10 53.06 -6.56 0.85 0.00 0.00 1.25 3.07 1.10 -1.00 0.00 0.00 -12.35 910.20 -392.00 363364.80 15.32 3.40 2.10 51.80 -5.20 -1.97 0.00 0.00 2.47 4.12 2.20 -1.00 0.00 0.00 -4.96 1124.80 -393.00 364661.80 13.04 2.60 2.10 36.62 -5.33 -0.44 0.00 0.00 2.08 3.41 1.50 -1.00 0.00 0.00 -5.02 1141.80 -394.00 364827.70 11.10 1.10 2.10 26.79 -6.08 1.73 0.00 0.00 0.90 2.63 0.70 -1.00 0.00 0.00 -9.87 27.70 -395.00 365703.90 12.17 1.90 2.10 31.69 -6.66 -0.85 0.00 0.00 1.68 3.35 1.40 -1.00 0.00 0.00 -5.81 903.90 -396.00 365831.90 13.04 1.80 2.10 30.79 -5.97 1.20 0.00 0.00 1.15 2.66 0.70 -1.00 0.00 0.00 -9.08 1031.90 -397.00 365983.90 11.57 1.80 2.10 27.18 -5.04 1.15 0.00 0.00 1.23 2.25 0.90 -1.00 0.00 0.00 -7.51 1183.90 -398.00 367140.20 11.76 1.50 2.10 28.23 -6.24 0.37 0.00 0.00 1.27 2.48 1.00 -1.00 0.00 0.00 -7.41 1060.20 -399.00 367666.40 14.66 2.00 2.10 38.88 -5.95 -0.58 0.00 0.00 1.14 3.01 1.10 -1.00 0.00 0.00 -10.29 306.40 -400.00 367899.80 13.80 1.40 2.10 36.45 -5.31 -0.67 0.00 0.00 1.23 2.90 0.90 -1.00 0.00 0.00 -8.94 539.80 -401.00 368276.90 10.47 2.60 2.10 28.99 -4.92 -0.67 0.00 0.00 2.39 2.14 1.70 -1.00 0.00 0.00 -3.51 916.90 -402.00 369411.20 12.32 3.40 2.10 36.47 -4.90 0.56 0.00 0.00 2.25 3.63 1.80 -1.00 0.00 0.00 -4.38 771.20 -403.00 370109.20 10.66 2.20 2.10 30.20 -5.34 -1.11 0.00 0.00 2.04 3.10 1.20 -1.00 0.00 0.00 -4.17 189.20 -404.00 370134.60 10.02 2.40 2.10 28.57 -7.05 0.60 0.00 0.00 1.79 3.39 1.40 -1.00 0.00 0.00 -4.47 214.60 -405.00 370182.20 10.51 1.70 2.10 24.94 -7.40 1.59 0.00 0.00 1.49 2.31 1.00 -1.00 0.00 0.00 -5.64 262.20 -406.00 370324.90 14.13 2.20 2.10 42.57 -6.53 -0.31 0.00 0.00 1.95 3.65 1.70 -1.00 0.00 0.00 -5.78 404.90 -407.00 370681.70 16.32 1.60 2.10 42.04 -6.08 -0.96 0.00 0.00 1.35 3.07 1.10 -1.00 0.00 0.00 -9.65 761.70 -408.00 370803.90 14.15 2.60 2.10 45.36 -7.77 1.30 0.00 0.00 2.43 3.94 2.00 -1.00 0.00 0.00 -4.66 883.90 -409.00 370943.90 10.39 2.20 2.10 28.97 -7.73 -0.47 0.00 0.00 1.40 2.54 1.60 -1.00 0.00 0.00 -5.93 1023.90 -410.00 371967.20 13.06 1.80 2.10 35.95 -5.42 1.43 0.00 0.00 1.61 3.52 1.60 -1.00 0.00 0.00 -6.49 767.20 -411.00 372308.70 11.04 1.80 2.10 25.94 -6.68 -0.04 0.00 0.00 1.58 2.60 0.90 -1.00 0.00 0.00 -5.59 1108.70 -412.00 372554.80 11.01 1.40 2.10 20.73 -6.25 -1.09 0.00 0.00 1.22 1.94 0.60 -1.00 0.00 0.00 -7.20 74.80 -413.00 372921.40 19.46 3.30 2.10 67.65 -5.71 -0.33 0.00 0.00 2.46 4.16 2.20 -1.00 0.00 0.00 -6.34 441.40 -414.00 372999.40 11.36 0.90 2.10 23.53 -6.26 -0.35 0.00 0.00 0.75 1.91 0.80 -1.00 0.00 0.00 -12.05 519.40 -415.00 373590.20 11.19 2.80 2.10 38.69 -5.86 -0.28 0.00 0.00 2.46 4.10 2.10 -1.00 0.00 0.00 -3.64 1110.20 -416.00 373638.70 15.06 1.90 2.10 33.81 -4.55 -0.63 0.00 0.00 1.63 2.82 1.10 -1.00 0.00 0.00 -7.39 1158.70 -417.00 373654.20 12.10 1.00 2.10 26.68 -5.41 -0.07 0.00 0.00 0.90 2.76 0.80 -1.00 0.00 0.00 -10.81 175.80 -418.00 374056.30 10.35 1.50 2.10 24.13 -6.18 1.60 0.00 0.00 1.24 2.45 1.00 -1.00 0.00 0.00 -6.67 296.30 -419.00 374251.10 10.37 1.70 2.10 26.71 -6.93 -0.35 0.00 0.00 1.54 2.95 1.30 -1.00 0.00 0.00 -5.38 491.10 -420.00 374376.00 10.08 1.80 2.10 24.43 -6.38 0.20 0.00 0.00 1.54 1.78 0.90 -1.00 0.00 0.00 -5.24 616.00 -421.00 374728.70 16.38 1.90 2.10 49.76 -5.47 1.24 0.00 0.00 1.20 3.43 1.50 -1.00 0.00 0.00 -10.90 98.30 -422.00 375172.00 11.79 1.00 2.10 26.48 -6.03 1.40 0.00 0.00 0.70 2.81 0.90 -1.00 0.00 0.00 -13.52 132.00 -423.00 375203.10 11.20 2.10 2.10 25.47 -6.60 -1.74 0.00 0.00 1.15 2.61 0.70 -1.00 0.00 0.00 -7.79 163.10 -424.00 375361.70 10.43 1.20 2.10 24.56 -5.65 1.38 0.00 0.00 1.06 2.90 0.90 -1.00 0.00 0.00 -7.88 321.70 -425.00 375528.40 12.00 2.70 2.10 28.98 -6.13 1.48 0.00 0.00 1.52 2.50 0.60 -1.00 0.00 0.00 -6.32 488.40 -426.00 375856.20 11.89 3.00 2.10 40.75 -5.49 0.13 0.00 0.00 2.53 4.14 2.20 -1.00 0.00 0.00 -3.76 73.80 -427.00 376409.10 11.31 2.10 2.10 31.80 -5.50 0.25 0.00 0.00 1.32 3.23 1.30 -1.00 0.00 0.00 -6.87 114.70 -428.00 376513.30 14.57 1.90 2.10 40.72 -7.80 1.06 0.00 0.00 1.50 3.23 1.30 -1.00 0.00 0.00 -7.78 193.30 -429.00 377359.90 20.20 2.10 2.10 58.15 -5.77 0.82 0.00 0.00 1.73 3.36 1.40 -1.00 0.00 0.00 -9.35 1039.90 -430.00 377383.80 18.48 2.90 2.10 53.66 -5.78 -0.74 0.00 0.00 1.12 3.02 1.10 -1.00 0.00 0.00 -13.22 65.40 -431.00 379001.90 12.35 2.40 2.10 36.21 -5.55 -1.58 0.00 0.00 2.14 3.25 1.70 -1.00 0.00 0.00 -4.63 121.90 -432.00 379532.00 17.00 1.60 2.10 40.47 -5.95 1.76 0.00 0.00 1.13 2.64 0.80 -1.00 0.00 0.00 -12.04 652.00 -433.00 379900.60 18.32 2.00 2.10 57.33 -6.16 1.84 0.00 0.00 1.21 3.43 1.50 -1.00 0.00 0.00 -12.07 1020.60 -434.00 380970.30 18.23 1.90 2.10 51.84 -6.23 -0.70 0.00 0.00 1.70 3.39 1.40 -1.00 0.00 0.00 -8.60 810.30 -435.00 381100.30 14.56 2.20 2.10 41.87 -6.95 0.30 0.00 0.00 1.82 3.16 1.70 -1.00 0.00 0.00 -6.39 940.30 -436.00 381546.80 10.61 3.60 2.10 39.91 -6.32 1.03 0.00 0.00 3.31 3.64 2.70 -1.00 0.00 0.00 -2.56 106.80 -437.00 382280.90 12.40 1.80 2.10 33.28 -6.89 -0.48 0.00 0.00 1.51 3.25 1.30 -1.00 0.00 0.00 -6.57 840.90 -438.00 382370.90 13.03 2.60 2.10 40.20 -8.26 -0.80 0.00 0.00 2.34 3.91 2.00 -1.00 0.00 0.00 -4.45 60.50 -439.00 383182.70 18.71 4.30 2.10 56.30 -6.11 1.42 0.00 0.00 1.72 3.09 1.10 -1.00 0.00 0.00 -8.71 462.70 -440.00 383729.10 12.91 1.90 2.10 39.45 -6.56 0.30 0.00 0.00 1.22 3.57 1.60 -1.00 0.00 0.00 -8.49 1009.10 -441.00 383770.80 13.37 2.30 2.10 37.32 -5.98 0.14 0.00 0.00 2.11 3.53 1.60 -1.00 0.00 0.00 -5.07 1050.80 -442.00 384804.90 18.37 2.80 2.10 54.27 -6.59 2.44 0.00 0.00 1.29 3.38 1.40 -1.00 0.00 0.00 -11.41 804.90 -443.00 385037.40 22.00 1.90 2.10 63.17 -6.35 0.74 0.00 0.00 1.16 3.36 1.40 -1.00 0.00 0.00 -15.23 1037.40 -444.00 385082.60 11.29 1.70 2.10 27.86 -6.07 -0.57 0.00 0.00 0.92 2.81 0.90 -1.00 0.00 0.00 -9.80 1082.60 -445.00 385854.20 12.13 1.90 2.10 29.41 -6.50 0.62 0.00 0.00 1.63 2.74 0.80 -1.00 0.00 0.00 -5.94 574.20 -446.00 386545.50 15.85 2.30 2.10 48.71 -6.71 -0.73 0.00 0.00 1.87 3.64 1.70 -1.00 0.00 0.00 -6.77 1265.50 -447.00 386568.60 10.91 2.20 2.10 29.82 -7.97 0.35 0.00 0.00 1.86 2.86 1.20 -1.00 0.00 0.00 -4.70 8.60 -448.00 386779.20 16.09 1.90 2.10 40.44 -6.47 -0.24 0.00 0.00 1.69 3.36 1.40 -1.00 0.00 0.00 -7.62 219.20 -449.00 387238.30 12.70 2.90 2.10 43.70 -6.08 -1.70 0.00 0.00 2.69 3.67 2.00 -1.00 0.00 0.00 -3.78 678.30 -450.00 387830.00 13.24 2.10 2.10 37.17 -6.29 -0.43 0.00 0.00 1.72 3.22 1.30 -1.00 0.00 0.00 -6.15 1270.00 -451.00 387848.00 22.62 2.10 2.10 64.68 -9.02 0.57 255.00 0.00 1.78 3.43 1.50 -1.00 0.00 0.00 -10.18 8.00 -452.00 387869.50 29.18 2.80 2.10 100.20 -11.45 -0.34 255.00 0.00 1.91 4.08 2.10 -1.00 0.00 0.00 -12.20 29.50 -453.00 388448.60 10.87 2.90 2.10 37.44 -5.06 1.04 0.00 0.00 2.71 4.33 2.40 -1.00 0.00 0.00 -3.21 608.60 -454.00 389032.20 13.86 2.10 2.10 40.87 -6.45 -1.42 0.00 0.00 1.79 3.52 1.90 -1.00 0.00 0.00 -6.20 1192.20 -455.00 389052.40 10.35 1.00 2.10 21.52 -6.32 1.62 0.00 0.00 0.92 2.25 0.30 -1.00 0.00 0.00 -8.98 86.00 -456.00 389961.40 12.86 3.40 2.10 43.62 -6.01 1.79 0.00 0.00 2.70 4.01 2.60 -1.00 0.00 0.00 -3.82 841.40 -457.00 390202.00 12.44 2.50 2.10 33.83 -5.02 1.11 0.00 0.00 1.29 3.01 1.10 -1.00 0.00 0.00 -7.70 211.60 -458.00 390446.40 12.67 1.60 2.10 33.33 -5.94 -0.17 0.00 0.00 1.42 3.11 1.20 -1.00 0.00 0.00 -7.13 46.40 -459.00 390604.40 14.89 2.30 2.10 44.30 -6.83 -0.38 0.00 0.00 1.79 3.55 1.70 -1.00 0.00 0.00 -6.67 204.40 -460.00 390635.80 10.20 2.30 2.10 29.21 -6.82 -0.92 0.00 0.00 1.94 3.45 1.50 -1.00 0.00 0.00 -4.20 235.80 -461.00 391835.40 18.43 3.00 2.10 68.18 -5.80 -0.29 0.00 0.00 2.86 4.56 2.60 -1.00 0.00 0.00 -5.16 155.40 -462.00 391930.70 14.12 1.60 2.10 30.41 -6.64 0.91 0.00 0.00 1.16 1.58 1.00 -1.00 0.00 0.00 -9.74 250.70 -463.00 392127.70 14.54 2.70 2.10 47.99 -5.02 1.84 0.00 0.00 2.41 3.99 2.00 -1.00 0.00 0.00 -4.82 447.70 -464.00 393136.40 12.66 1.70 2.10 31.57 -6.30 0.40 0.00 0.00 1.46 2.90 0.90 -1.00 0.00 0.00 -6.96 74.00 -465.00 393230.50 12.17 2.10 2.10 33.68 -6.47 1.76 0.00 0.00 1.66 3.52 1.60 -1.00 0.00 0.00 -5.86 270.50 -466.00 393403.30 24.19 2.20 2.10 77.04 -5.06 2.21 0.00 0.00 1.15 3.70 1.70 -1.00 0.00 0.00 -16.76 443.30 -467.00 394239.00 15.19 2.40 2.10 42.63 -5.50 1.81 0.00 0.00 1.91 3.41 1.50 -1.00 0.00 0.00 -6.37 152.60 -468.00 394500.60 10.96 2.40 2.10 32.43 -6.86 -0.48 0.00 0.00 2.15 3.39 2.00 -1.00 0.00 0.00 -4.08 260.60 -469.00 395544.10 11.26 1.10 2.10 27.09 -5.91 -0.71 0.00 0.00 0.90 2.76 0.80 -1.00 0.00 0.00 -10.04 24.10 -470.00 395555.50 11.43 12.50 2.10 90.76 -5.47 0.33 255.00 0.00 2.91 2.75 0.80 -1.00 0.00 0.00 -3.15 189.10 -471.00 396069.10 15.17 1.50 2.10 36.98 -5.38 -1.23 0.00 0.00 1.02 2.92 1.00 -1.00 0.00 0.00 -11.86 549.10 -472.00 396106.80 15.63 2.00 2.10 36.42 -6.73 -1.34 0.00 0.00 1.47 2.51 0.80 -1.00 0.00 0.00 -8.51 586.80 -473.00 396159.30 14.68 2.80 2.10 41.94 -6.17 -1.32 0.00 0.00 1.92 3.60 1.80 -1.00 0.00 0.00 -6.12 639.30 -474.00 396358.00 13.98 2.60 2.10 40.87 -5.98 1.23 0.00 0.00 2.18 3.64 1.70 -1.00 0.00 0.00 -5.12 838.00 -475.00 396694.00 11.47 1.50 2.10 24.05 -8.04 2.01 0.00 0.00 1.38 2.16 1.00 -1.00 0.00 0.00 -6.65 1174.00 -476.00 396749.10 10.90 1.40 2.10 24.77 -6.13 -0.78 0.00 0.00 1.22 2.93 1.00 -1.00 0.00 0.00 -7.17 1229.10 -477.00 396907.70 12.09 2.00 2.10 35.22 -6.02 2.26 0.00 0.00 1.73 3.18 1.50 -1.00 0.00 0.00 -5.60 107.70 -478.00 397686.90 10.02 2.40 2.10 25.74 -6.04 -0.75 0.00 0.00 2.23 2.90 0.90 -1.00 0.00 0.00 -3.59 886.90 -479.00 398730.40 10.58 1.60 2.10 22.49 -6.32 2.19 0.00 0.00 1.23 2.20 0.80 -1.00 0.00 0.00 -6.88 36.00 -480.00 398783.70 14.60 1.20 2.10 33.39 -8.28 0.84 0.00 0.00 0.94 2.51 0.60 -1.00 0.00 0.00 -12.38 89.30 -481.00 399517.20 14.20 2.50 2.10 45.57 -7.17 0.74 0.00 0.00 2.06 3.92 2.00 -1.00 0.00 0.00 -5.51 157.20 -482.00 400640.90 10.06 2.30 2.10 29.08 -4.97 -1.38 0.00 0.00 2.07 1.16 1.00 -1.00 0.00 0.00 -3.88 1280.90 -483.00 403083.70 11.58 3.50 2.10 43.77 -7.36 -0.67 0.00 0.00 3.29 4.06 2.50 -1.00 0.00 0.00 -2.82 37.30 -484.00 404541.70 20.90 2.20 2.10 67.93 -7.05 0.39 0.00 0.00 1.56 3.52 1.60 -1.00 0.00 0.00 -10.70 61.70 -485.00 406297.30 15.73 1.70 2.10 38.67 -5.39 -0.39 0.00 0.00 1.27 3.03 1.10 -1.00 0.00 0.00 -9.92 537.30 -486.00 406586.60 17.84 3.20 2.10 64.30 -6.17 0.33 0.00 0.00 2.35 4.52 2.60 -1.00 0.00 0.00 -6.08 826.60 -487.00 406612.80 11.32 2.60 2.10 38.99 -7.79 -0.80 0.00 0.00 2.28 4.22 2.30 -1.00 0.00 0.00 -3.96 852.80 -488.00 406830.00 11.92 1.90 2.10 31.75 -5.60 0.95 0.00 0.00 1.66 3.18 1.20 -1.00 0.00 0.00 -5.76 1070.00 -489.00 407618.40 15.31 2.00 2.10 41.72 -6.91 1.75 0.00 0.00 1.44 2.89 0.90 -1.00 0.00 0.00 -8.49 578.40 -490.00 408142.30 11.94 3.20 2.10 42.03 -6.89 -1.09 0.00 0.00 2.65 4.23 2.40 -1.00 0.00 0.00 -3.61 231.90 -491.00 408242.60 10.76 3.90 2.10 44.74 -5.97 0.27 0.00 0.00 3.58 4.97 3.00 -1.00 0.00 0.00 -2.41 76.20 -492.00 408304.80 12.03 1.40 2.10 28.03 -7.23 -0.91 0.00 0.00 1.14 2.86 0.90 -1.00 0.00 0.00 -8.41 138.40 -493.00 408434.80 12.87 1.20 2.10 29.75 -7.91 -1.14 0.00 0.00 0.83 2.83 0.90 -1.00 0.00 0.00 -12.46 114.80 -494.00 408469.40 12.28 1.90 2.10 27.92 -7.30 -1.68 0.00 0.00 1.68 2.81 1.30 -1.00 0.00 0.00 -5.86 149.40 -495.00 408697.80 13.09 2.20 2.10 40.57 -6.97 1.03 0.00 0.00 1.84 3.58 1.60 -1.00 0.00 0.00 -5.68 377.80 -496.00 409464.70 14.59 2.70 2.10 39.29 -5.84 1.72 0.00 0.00 2.40 2.15 1.80 -1.00 0.00 0.00 -4.87 1144.70 -497.00 410207.60 18.64 1.60 2.10 47.81 -5.00 0.20 0.00 0.00 1.41 3.14 1.20 -1.00 0.00 0.00 -10.59 607.60 -498.00 410364.80 19.28 2.10 2.10 60.12 -5.59 0.58 0.00 0.00 1.53 3.57 1.60 -1.00 0.00 0.00 -10.06 764.80 -499.00 411586.40 15.43 2.30 2.10 48.16 -6.08 -0.63 0.00 0.00 1.80 3.60 1.60 -1.00 0.00 0.00 -6.85 92.00 -500.00 411712.40 10.02 2.60 2.10 31.85 -5.13 -1.24 0.00 0.00 2.41 3.22 2.00 -1.00 0.00 0.00 -3.33 832.40 -501.00 412746.40 15.33 1.70 2.10 42.57 -5.85 -2.50 0.00 0.00 1.18 3.16 1.20 -1.00 0.00 0.00 -10.35 586.40 -502.00 412871.30 11.94 1.80 2.10 30.46 -5.13 0.65 0.00 0.00 1.44 3.21 1.30 -1.00 0.00 0.00 -6.62 711.30 -503.00 413600.00 20.19 1.80 2.10 53.65 -6.11 -0.89 0.00 0.00 1.52 3.11 1.20 -1.00 0.00 0.00 -10.64 57.60 -504.00 414431.60 12.44 3.90 2.10 47.75 -6.16 0.35 0.00 0.00 3.48 3.62 2.80 -1.00 0.00 0.00 -2.86 991.60 -505.00 414957.40 17.57 3.20 2.10 65.41 -5.94 0.24 0.00 0.00 2.99 4.67 2.70 -1.00 0.00 0.00 -4.70 237.40 -506.00 415124.00 10.82 2.00 2.10 28.94 -6.32 0.75 0.00 0.00 1.80 3.06 1.50 -1.00 0.00 0.00 -4.81 404.00 -507.00 415372.20 14.02 1.50 2.10 34.13 -6.11 0.20 0.00 0.00 0.95 2.58 0.60 -1.00 0.00 0.00 -11.80 37.80 -508.00 415464.70 10.06 1.60 2.10 24.85 -5.29 1.07 0.00 0.00 1.41 2.76 0.80 -1.00 0.00 0.00 -5.69 130.30 -509.00 415834.40 11.87 3.00 2.10 43.55 -5.88 0.71 0.00 0.00 2.85 3.93 2.50 -1.00 0.00 0.00 -3.33 1114.40 -510.00 416429.00 10.15 1.70 2.10 22.07 -5.86 1.56 0.00 0.00 1.02 2.31 0.40 -1.00 0.00 0.00 -7.92 70.60 -511.00 416787.60 11.98 1.10 2.10 24.54 -4.93 -1.58 0.00 0.00 0.89 2.37 0.40 -1.00 0.00 0.00 -10.78 787.60 -512.00 416964.40 13.10 1.10 2.10 27.58 -8.15 1.65 0.00 0.00 0.96 2.29 0.30 -1.00 0.00 0.00 -10.86 94.00 -513.00 417057.00 16.46 2.70 2.10 52.39 -5.78 -0.86 0.00 0.00 1.29 3.80 1.90 -1.00 0.00 0.00 -10.20 186.60 -514.00 418270.40 17.23 5.10 2.10 68.72 -7.62 0.01 0.00 0.00 3.85 4.14 2.60 -1.00 0.00 0.00 -3.58 990.40 -515.00 418517.70 17.84 2.90 2.10 63.43 -6.06 -2.02 0.00 0.00 2.42 4.07 2.10 -1.00 0.00 0.00 -5.89 1237.70 -516.00 419164.10 16.47 2.50 2.10 53.19 -7.27 0.21 0.00 0.00 2.27 3.95 2.00 -1.00 0.00 0.00 -5.81 604.10 -517.00 419174.00 13.82 12.40 2.10 128.92 -7.72 1.43 255.00 0.00 12.07 3.40 1.50 -1.00 0.00 0.00 -0.92 127.60 -518.00 420441.50 15.79 1.50 2.10 38.16 -6.63 1.73 0.00 0.00 1.27 2.94 1.00 -1.00 0.00 0.00 -9.92 115.10 -519.00 420498.10 13.93 2.80 2.10 43.63 -6.19 1.17 0.00 0.00 2.60 3.23 1.60 -1.00 0.00 0.00 -4.29 658.10 -520.00 420959.10 10.97 1.60 2.10 25.52 -8.07 1.64 0.00 0.00 0.93 2.66 0.70 -1.00 0.00 0.00 -9.44 1119.10 -521.00 421198.20 13.01 0.60 2.10 24.53 -7.66 -0.20 0.00 0.00 0.40 2.26 0.30 -1.00 0.00 0.00 -25.99 78.20 -522.00 421535.70 18.16 2.50 2.10 57.81 -7.96 -0.31 0.00 0.00 2.21 3.75 1.90 -1.00 0.00 0.00 -6.56 415.70 -523.00 421566.50 12.27 2.20 2.10 31.91 -7.03 1.43 0.00 0.00 1.98 2.98 2.00 -1.00 0.00 0.00 -4.97 446.50 -524.00 421614.60 10.34 3.00 2.10 27.61 -6.85 -2.85 0.00 0.00 2.87 2.02 0.70 -1.00 0.00 0.00 -2.89 494.60 -525.00 421822.50 12.03 2.20 2.10 30.60 -6.46 0.44 0.00 0.00 1.62 3.35 1.40 -1.00 0.00 0.00 -5.95 702.50 -526.00 422019.70 16.43 1.20 2.10 37.74 -6.94 -1.29 0.00 0.00 1.01 2.68 0.70 -1.00 0.00 0.00 -13.00 899.70 -527.00 422319.70 13.13 2.00 2.10 35.98 -6.38 1.38 0.00 0.00 1.75 3.30 1.40 -1.00 0.00 0.00 -6.01 1199.70 -528.00 423037.10 15.51 2.90 2.10 50.00 -6.17 0.39 0.00 0.00 2.54 3.77 2.40 -1.00 0.00 0.00 -4.89 637.10 -529.00 424345.90 14.30 3.30 2.10 54.17 -7.05 -0.09 0.00 0.00 2.54 4.18 2.20 -1.00 0.00 0.00 -4.50 665.90 -530.00 424719.50 11.95 2.90 2.10 43.81 -6.42 -0.27 0.00 0.00 2.68 3.50 2.40 -1.00 0.00 0.00 -3.57 1039.50 -531.00 426511.80 20.00 4.80 2.10 58.42 -5.14 0.32 0.00 0.00 1.58 3.23 1.30 -1.00 0.00 0.00 -10.11 271.80 -532.00 426849.40 14.67 1.90 2.10 36.71 -6.79 0.93 0.00 0.00 1.64 2.81 1.30 -1.00 0.00 0.00 -7.14 609.40 -533.00 427040.60 12.52 2.00 2.10 31.65 -7.57 -1.68 0.00 0.00 1.64 2.58 1.30 -1.00 0.00 0.00 -6.11 800.60 -534.00 427856.40 11.77 2.10 2.10 35.06 -5.55 1.53 0.00 0.00 1.72 3.29 1.30 -1.00 0.00 0.00 -5.48 106.00 -535.00 427939.80 10.02 1.60 2.10 26.70 -5.05 0.52 0.00 0.00 1.43 3.08 1.10 -1.00 0.00 0.00 -5.63 189.40 -536.00 428053.90 10.36 3.00 2.10 31.67 -6.02 -0.20 0.00 0.00 2.12 3.63 1.70 -1.00 0.00 0.00 -3.91 533.90 -537.00 428303.70 10.83 2.40 2.10 27.95 -5.92 0.47 0.00 0.00 2.22 2.46 2.00 -1.00 0.00 0.00 -3.89 41.30 -538.00 428367.10 10.78 2.10 2.10 29.77 -5.89 0.56 0.00 0.00 2.01 2.60 2.00 -1.00 0.00 0.00 -4.29 847.10 -539.00 428619.00 14.72 1.60 2.10 37.94 -5.69 -0.20 0.00 0.00 1.32 2.91 1.00 -1.00 0.00 0.00 -8.93 1099.00 -540.00 428664.80 16.79 2.70 2.10 61.04 -6.54 0.74 0.00 0.00 2.46 4.15 2.20 -1.00 0.00 0.00 -5.45 146.40 -541.00 428884.90 10.53 3.70 2.10 33.17 -5.76 -1.12 0.00 0.00 2.93 2.82 2.20 -1.00 0.00 0.00 -2.87 84.90 -542.00 429513.70 12.20 2.20 2.10 32.59 -5.02 -0.53 0.00 0.00 1.61 2.93 1.00 -1.00 0.00 0.00 -6.06 713.70 -543.00 429673.20 27.89 1.70 2.10 77.09 -5.32 0.67 0.00 0.00 1.44 3.06 1.10 -1.00 0.00 0.00 -15.45 130.80 -544.00 429830.30 10.98 2.00 2.10 28.86 -8.21 -0.65 0.00 0.00 1.74 2.64 1.50 -1.00 0.00 0.00 -5.04 1030.30 -545.00 429862.80 10.74 1.90 2.10 21.35 -7.61 0.14 0.00 0.00 1.31 1.83 0.70 -1.00 0.00 0.00 -6.55 64.40 -546.00 429938.90 12.29 1.90 2.10 34.06 -6.51 -0.93 0.00 0.00 1.63 3.44 1.50 -1.00 0.00 0.00 -6.03 1138.90 -547.00 429999.80 18.43 1.90 2.10 47.59 -6.50 1.12 0.00 0.00 1.02 2.96 1.00 -1.00 0.00 0.00 -14.53 1199.80 -548.00 431265.20 11.56 2.20 2.10 33.22 -5.87 1.58 0.00 0.00 2.00 3.35 1.40 -1.00 0.00 0.00 -4.63 1185.20 -549.00 431305.50 10.42 2.00 2.10 27.76 -7.73 1.17 0.00 0.00 1.74 3.41 1.50 -1.00 0.00 0.00 -4.80 1225.50 -550.00 431794.50 11.60 3.00 2.10 36.06 -6.84 0.87 0.00 0.00 2.83 3.30 2.30 -1.00 0.00 0.00 -3.28 434.50 -551.00 431861.70 20.47 2.60 2.10 67.72 -6.70 -1.10 0.00 0.00 2.29 3.77 1.80 -1.00 0.00 0.00 -7.16 501.70 -552.00 432090.00 15.86 2.70 2.10 51.36 -6.65 -0.06 0.00 0.00 2.43 3.58 1.60 -1.00 0.00 0.00 -5.23 730.00 -553.00 433101.90 18.99 1.90 2.10 53.05 -7.57 -0.84 0.00 0.00 1.50 3.23 1.30 -1.00 0.00 0.00 -10.10 461.90 -554.00 433350.20 10.78 1.60 2.10 29.09 -7.28 -2.52 0.00 0.00 1.38 3.26 1.30 -1.00 0.00 0.00 -6.26 223.80 -555.00 433470.80 17.02 2.20 2.10 52.31 -7.10 -0.70 0.00 0.00 1.59 3.71 1.80 -1.00 0.00 0.00 -8.58 830.80 -556.00 433739.10 16.33 3.80 2.10 72.24 -5.05 -0.70 0.00 0.00 3.19 5.06 3.10 -1.00 0.00 0.00 -4.09 100.70 -557.00 433809.60 18.59 2.20 2.10 55.16 -7.65 -0.17 0.00 0.00 1.92 3.60 1.60 -1.00 0.00 0.00 -7.74 1169.60 -558.00 433879.10 13.11 1.50 2.10 34.06 -8.06 0.53 0.00 0.00 1.10 3.04 1.10 -1.00 0.00 0.00 -9.50 1239.10 -559.00 433957.60 15.13 2.20 2.10 38.19 -6.30 0.66 0.00 0.00 1.19 2.81 0.90 -1.00 0.00 0.00 -10.15 63.20 -560.00 434127.10 11.23 0.80 2.10 23.17 -8.01 0.51 0.00 0.00 0.54 2.40 0.50 -1.00 0.00 0.00 -16.70 207.10 -561.00 434260.70 12.50 1.50 2.10 32.71 -9.62 1.23 0.00 0.00 1.30 2.95 1.00 -1.00 0.00 0.00 -7.71 110.30 -562.00 434709.10 11.14 3.30 2.10 32.74 -6.24 1.58 0.00 0.00 2.73 2.88 2.50 -1.00 0.00 0.00 -3.27 789.10 -563.00 434799.30 13.59 2.60 2.10 43.14 -6.92 -1.17 0.00 0.00 2.34 3.76 1.80 -1.00 0.00 0.00 -4.64 879.30 -564.00 435818.90 11.19 2.10 2.10 28.39 -7.62 -1.69 0.00 0.00 1.65 2.91 1.20 -1.00 0.00 0.00 -5.41 618.90 -565.00 436241.60 21.52 1.30 2.10 55.47 -7.51 -0.64 0.00 0.00 0.88 2.86 0.90 -1.00 0.00 0.00 -19.62 1041.60 -566.00 436278.10 14.49 3.60 2.10 45.18 -6.61 -0.34 0.00 0.00 2.71 2.96 1.50 -1.00 0.00 0.00 -4.28 1078.10 -567.00 436560.40 12.38 3.00 2.10 42.02 -6.51 -0.21 0.00 0.00 2.75 4.34 2.40 -1.00 0.00 0.00 -3.61 80.40 -568.00 436589.20 14.82 2.60 2.10 48.06 -7.85 -0.83 0.00 0.00 1.79 3.52 1.60 -1.00 0.00 0.00 -6.63 109.20 -569.00 437177.90 12.46 1.80 2.10 33.89 -9.18 -1.72 0.00 0.00 1.62 3.36 1.40 -1.00 0.00 0.00 -6.16 697.90 -570.00 437397.00 11.67 1.60 2.10 26.61 -7.59 0.12 0.00 0.00 1.44 1.39 1.10 -1.00 0.00 0.00 -6.48 917.00 -571.00 439170.40 10.41 1.90 2.10 26.58 -8.37 1.09 0.00 0.00 1.76 3.03 1.10 -1.00 0.00 0.00 -4.73 130.40 -572.00 439218.40 20.04 2.50 2.10 53.47 -8.66 -0.71 0.00 0.00 1.30 2.96 1.00 -1.00 0.00 0.00 -12.30 178.40 -573.00 439271.70 11.90 1.90 2.10 31.04 -7.61 1.59 0.00 0.00 1.65 3.06 1.10 -1.00 0.00 0.00 -5.77 231.70 -574.00 439461.40 19.76 2.40 2.10 62.23 -8.64 -0.44 0.00 0.00 2.03 3.70 1.80 -1.00 0.00 0.00 -7.77 421.40 -575.00 439669.90 10.79 2.00 2.10 32.49 -6.91 0.47 0.00 0.00 1.46 3.39 1.40 -1.00 0.00 0.00 -5.93 629.90 -576.00 440195.80 13.94 1.70 2.10 31.43 -7.82 0.37 0.00 0.00 1.42 2.81 1.00 -1.00 0.00 0.00 -7.86 1155.80 -577.00 440588.10 15.29 1.60 2.10 41.19 -6.29 0.33 0.00 0.00 1.22 3.02 1.10 -1.00 0.00 0.00 -10.01 268.10 -578.00 440784.40 10.33 2.90 2.10 33.84 -7.41 -1.10 0.00 0.00 2.65 3.53 1.80 -1.00 0.00 0.00 -3.12 234.00 -579.00 440915.00 19.57 1.50 2.10 53.02 -8.34 1.75 0.00 0.00 1.22 3.07 1.10 -1.00 0.00 0.00 -12.83 595.00 -580.00 441558.00 20.27 1.80 2.10 53.18 -9.07 -2.86 0.00 0.00 0.88 2.99 1.00 -1.00 0.00 0.00 -18.39 1238.00 -581.00 441616.50 10.54 1.40 2.10 26.32 -8.14 -0.17 0.00 0.00 1.19 2.90 1.00 -1.00 0.00 0.00 -7.10 42.10 -582.00 442259.30 13.84 1.60 2.10 29.80 -7.87 -1.70 0.00 0.00 1.06 2.07 0.70 -1.00 0.00 0.00 -10.46 659.30 -583.00 442365.20 21.79 1.20 2.10 50.79 -7.65 -0.91 0.00 0.00 0.93 2.80 0.80 -1.00 0.00 0.00 -18.67 765.20 -584.00 442473.80 18.45 1.40 2.10 43.27 -7.17 -0.02 0.00 0.00 1.13 2.84 0.90 -1.00 0.00 0.00 -13.08 873.80 -585.00 442596.60 18.21 3.60 2.10 48.27 -6.16 -1.26 0.00 0.00 1.60 2.97 1.20 -1.00 0.00 0.00 -9.10 996.60 -586.00 442934.90 17.53 2.30 2.10 55.25 -7.58 -1.18 0.00 0.00 1.39 3.65 1.70 -1.00 0.00 0.00 -10.08 54.90 -587.00 442986.40 10.65 4.40 2.10 44.49 -7.67 -0.71 255.00 0.00 4.17 4.42 3.80 -1.00 0.00 0.00 -2.04 132.00 -588.00 443064.30 10.20 1.90 2.10 28.32 -6.59 -3.43 0.00 0.00 1.66 3.56 1.60 -1.00 0.00 0.00 -4.93 184.30 -589.00 443070.30 13.40 7.90 2.10 80.71 -6.76 0.56 255.00 0.00 7.71 4.21 2.30 -1.00 0.00 0.00 -1.39 215.90 -590.00 443279.20 19.32 2.00 2.10 52.46 -7.51 -0.54 0.00 0.00 1.63 3.25 1.30 -1.00 0.00 0.00 -9.49 399.20 -591.00 443559.60 10.86 3.20 2.10 30.99 -6.53 0.97 255.00 0.00 2.97 1.51 0.60 -1.00 0.00 0.00 -2.92 679.60 -592.00 443688.10 26.76 2.70 2.10 94.02 -4.85 0.64 0.00 0.00 1.39 4.15 2.20 -1.00 0.00 0.00 -15.42 808.10 -593.00 444457.10 17.87 2.10 2.10 50.38 -6.23 -0.25 0.00 0.00 1.35 3.41 1.50 -1.00 0.00 0.00 -10.58 297.10 -594.00 444510.70 11.05 2.90 2.10 27.44 -7.12 0.48 0.00 0.00 1.82 2.41 1.20 -1.00 0.00 0.00 -4.85 248.30 -595.00 444514.20 17.49 5.20 2.10 61.19 -9.81 2.40 255.00 0.00 2.13 3.35 1.40 -1.00 0.00 0.00 -6.57 354.20 -596.00 444561.70 16.39 2.20 2.10 43.94 -7.26 1.54 0.00 0.00 1.90 3.01 1.60 -1.00 0.00 0.00 -6.88 401.70 -597.00 444837.70 18.03 7.00 2.10 73.51 -6.19 -0.72 0.00 0.00 3.65 3.06 1.10 -1.00 0.00 0.00 -3.95 63.30 -598.00 444843.80 19.42 10.00 2.10 138.42 -7.36 0.64 255.00 0.00 9.59 3.95 2.00 -1.00 0.00 0.00 -1.62 69.40 -599.00 444892.30 12.22 2.00 2.10 38.31 -6.42 -0.80 0.00 0.00 1.71 3.61 1.70 -1.00 0.00 0.00 -5.71 732.30 -600.00 444947.00 17.69 4.40 2.10 61.27 -6.13 0.58 0.00 0.00 2.20 3.84 2.00 -1.00 0.00 0.00 -6.44 787.00 -601.00 444981.90 13.00 2.20 2.10 26.18 -6.32 0.48 0.00 0.00 1.06 0.84 0.70 -1.00 0.00 0.00 -9.83 821.90 -602.00 445486.80 10.02 3.10 2.10 30.45 -6.65 1.56 0.00 0.00 2.21 2.44 1.60 -1.00 0.00 0.00 -3.63 46.80 -603.00 445888.90 16.09 2.10 2.10 40.60 -6.66 -1.05 0.00 0.00 1.67 3.18 1.20 -1.00 0.00 0.00 -7.70 448.90 -604.00 447646.90 17.62 2.20 2.10 51.87 -6.56 -1.36 0.00 0.00 1.74 3.30 1.30 -1.00 0.00 0.00 -8.10 926.90 -605.00 448460.70 12.35 2.90 2.10 42.44 -8.95 -0.58 0.00 0.00 2.67 3.89 2.20 -1.00 0.00 0.00 -3.71 460.70 -606.00 449104.00 10.59 1.50 2.10 24.45 -8.46 -0.42 0.00 0.00 1.37 2.30 1.30 -1.00 0.00 0.00 -6.18 1104.00 -607.00 449220.80 21.70 3.10 2.10 52.41 -6.51 1.88 0.00 0.00 0.84 2.71 0.80 -1.00 0.00 0.00 -20.77 1220.80 -608.00 449357.70 10.96 1.30 2.10 24.01 -7.66 -0.31 0.00 0.00 0.91 2.78 0.80 -1.00 0.00 0.00 -9.67 77.70 -609.00 450139.00 12.71 2.40 2.10 35.89 -5.73 0.65 0.00 0.00 1.91 3.06 1.10 -1.00 0.00 0.00 -5.33 859.00 -610.00 450250.00 11.26 2.60 2.10 31.24 -5.75 0.69 0.00 0.00 1.65 3.10 1.20 -1.00 0.00 0.00 -5.47 970.00 -611.00 452299.40 17.42 1.40 2.10 41.26 -6.22 -0.53 0.00 0.00 0.90 2.63 0.70 -1.00 0.00 0.00 -15.48 101.00 -612.00 453880.70 13.23 1.80 2.10 32.42 -6.92 1.03 0.00 0.00 1.09 2.59 0.60 -1.00 0.00 0.00 -9.74 760.70 -613.00 454305.20 13.12 1.50 2.10 34.42 -8.16 1.22 0.00 0.00 1.32 2.86 0.90 -1.00 0.00 0.00 -7.97 1185.20 -614.00 455223.30 16.62 1.70 2.10 45.63 -8.19 0.87 0.00 0.00 1.31 3.07 1.10 -1.00 0.00 0.00 -10.14 823.30 -615.00 455307.60 16.61 3.30 2.10 56.03 -8.21 -0.32 0.00 0.00 2.86 4.60 2.60 -1.00 0.00 0.00 -4.65 907.60 -616.00 455929.80 11.59 2.10 2.10 31.92 -7.38 -1.90 0.00 0.00 1.87 3.65 1.70 -1.00 0.00 0.00 -4.97 249.80 -617.00 456876.90 33.44 4.30 2.10 132.74 -6.62 -0.47 0.00 0.00 3.47 3.59 1.60 -1.00 0.00 0.00 -7.71 1196.90 -618.00 456916.90 18.73 2.50 2.10 55.93 -8.16 -0.22 0.00 0.00 2.14 3.34 1.40 -1.00 0.00 0.00 -7.00 1236.90 -619.00 457108.50 15.13 3.20 2.10 44.83 -8.84 0.89 0.00 0.00 2.32 3.54 1.60 -1.00 0.00 0.00 -5.22 148.50 -620.00 457865.70 15.28 1.30 2.10 35.38 -7.93 -0.74 0.00 0.00 1.15 2.80 0.80 -1.00 0.00 0.00 -10.65 905.70 -621.00 458060.30 16.85 2.10 2.10 44.54 -8.14 -1.59 0.00 0.00 1.44 2.85 0.90 -1.00 0.00 0.00 -9.36 229.90 -622.00 458585.70 18.48 2.30 2.10 61.20 -7.30 -0.44 0.00 0.00 2.06 3.76 1.80 -1.00 0.00 0.00 -7.19 345.70 -623.00 458654.90 18.81 1.00 2.10 41.67 -8.02 0.20 0.00 0.00 0.72 2.62 0.70 -1.00 0.00 0.00 -20.86 414.90 -624.00 459650.90 16.77 2.00 2.10 45.39 -7.84 1.02 0.00 0.00 1.45 3.24 1.30 -1.00 0.00 0.00 -9.23 130.90 -625.00 459738.20 15.21 1.90 2.10 38.45 -8.65 -1.75 0.00 0.00 1.27 2.90 1.00 -1.00 0.00 0.00 -9.59 218.20 -626.00 459756.80 10.25 2.20 2.10 25.64 -11.24 -0.15 0.00 0.00 2.06 3.00 1.80 -1.00 0.00 0.00 -3.97 236.80 -627.00 459933.60 13.95 1.50 2.10 29.57 -9.04 1.61 0.00 0.00 1.14 2.56 0.60 -1.00 0.00 0.00 -9.78 413.60 -628.00 460387.50 11.63 2.90 2.10 36.17 -7.43 -1.07 0.00 0.00 2.15 3.41 1.50 -1.00 0.00 0.00 -4.33 867.50 -629.00 461369.20 16.36 2.40 2.10 44.33 -8.10 0.87 0.00 0.00 1.80 3.10 1.20 -1.00 0.00 0.00 -7.26 569.20 -630.00 461979.80 12.08 2.30 2.10 29.69 -7.25 1.17 0.00 0.00 2.05 1.76 1.50 -1.00 0.00 0.00 -4.72 1179.80 -631.00 462538.50 10.76 3.50 2.10 31.61 -7.96 -1.55 0.00 0.00 2.14 2.50 1.80 -1.00 0.00 0.00 -4.01 458.50 -632.00 462553.10 13.35 2.20 2.10 34.16 -9.21 -1.25 0.00 0.00 1.97 3.03 1.50 -1.00 0.00 0.00 -5.42 473.10 -633.00 462809.30 12.34 3.90 2.10 55.24 -8.53 -0.04 0.00 0.00 3.79 5.61 3.70 -1.00 0.00 0.00 -2.61 729.30 -634.00 462862.10 17.08 2.20 2.10 53.94 -9.56 1.07 0.00 0.00 1.11 3.68 1.70 -1.00 0.00 0.00 -12.28 782.10 -635.00 463330.70 15.55 2.30 2.10 43.46 -9.08 0.83 0.00 0.00 2.01 3.44 1.50 -1.00 0.00 0.00 -6.20 1250.70 -636.00 463573.10 14.06 2.20 2.10 38.24 -8.48 -0.12 0.00 0.00 1.51 2.97 1.00 -1.00 0.00 0.00 -7.43 213.10 -637.00 463902.70 18.86 4.00 2.10 71.04 -8.48 -0.53 0.00 0.00 3.26 3.98 2.00 -1.00 0.00 0.00 -4.63 542.70 -638.00 463982.40 10.42 2.10 2.10 23.91 -9.35 0.55 0.00 0.00 1.02 2.92 1.00 -1.00 0.00 0.00 -8.19 622.40 -639.00 464016.50 10.42 1.80 2.10 24.61 -8.66 -2.30 0.00 0.00 1.53 2.69 0.70 -1.00 0.00 0.00 -5.46 656.50 -640.00 464637.40 11.82 2.60 2.10 35.77 -7.60 -1.58 0.00 0.00 2.44 2.56 1.40 -1.00 0.00 0.00 -3.88 1277.40 -641.00 464770.50 12.42 2.30 2.10 35.44 -8.62 1.76 0.00 0.00 1.71 3.31 1.70 -1.00 0.00 0.00 -5.81 130.50 -642.00 464802.10 14.20 3.90 2.10 42.54 -7.97 0.70 0.00 0.00 1.51 3.27 1.30 -1.00 0.00 0.00 -7.53 162.10 -643.00 464803.20 13.91 3.60 2.10 47.39 -8.38 0.56 0.00 0.00 2.57 3.53 2.40 -1.00 0.00 0.00 -4.33 163.20 -644.00 464847.50 10.52 1.70 2.10 25.34 -9.20 -1.22 0.00 0.00 1.44 2.25 0.80 -1.00 0.00 0.00 -5.84 207.50 -645.00 465182.60 11.00 2.00 2.10 31.38 -7.88 -0.36 0.00 0.00 1.73 3.27 1.60 -1.00 0.00 0.00 -5.07 542.60 -646.00 465551.10 16.48 1.90 2.10 45.62 -7.73 -0.10 0.00 0.00 1.44 3.33 1.40 -1.00 0.00 0.00 -9.15 911.10 -647.00 465744.50 19.19 1.20 2.10 42.66 -7.32 -0.33 0.00 0.00 0.95 2.76 0.80 -1.00 0.00 0.00 -16.13 1104.50 -648.00 465846.30 13.28 3.00 2.10 47.47 -8.56 -0.92 0.00 0.00 2.74 4.34 2.40 -1.00 0.00 0.00 -3.88 1206.30 -649.00 465951.50 11.85 1.60 2.10 31.97 -8.88 -1.97 0.00 0.00 0.87 2.97 1.50 -1.00 0.00 0.00 -10.91 31.50 -650.00 466202.60 11.88 2.40 2.10 35.80 -6.31 -0.27 0.00 0.00 1.96 3.60 1.60 -1.00 0.00 0.00 -4.84 282.60 -651.00 466605.10 15.32 1.40 2.10 34.59 -6.93 0.93 0.00 0.00 1.24 2.55 0.60 -1.00 0.00 0.00 -9.89 685.10 -652.00 467603.30 19.43 8.60 2.10 101.85 -6.32 -1.89 255.00 0.00 7.87 3.63 1.70 -1.00 0.00 0.00 -1.98 44.90 -653.00 469755.30 10.40 1.70 2.10 27.64 -8.18 -0.21 0.00 0.00 1.54 3.07 1.10 -1.00 0.00 0.00 -5.41 148.90 -654.00 471022.00 10.35 1.80 2.10 25.91 -6.57 -0.40 0.00 0.00 1.43 2.75 0.90 -1.00 0.00 0.00 -5.80 135.60 -655.00 471118.10 23.30 2.40 2.10 73.61 -8.42 1.49 0.00 0.00 1.27 3.71 1.80 -1.00 0.00 0.00 -14.67 78.10 -656.00 471996.90 14.87 1.40 2.10 31.25 -6.82 -0.61 0.00 0.00 1.13 2.48 0.50 -1.00 0.00 0.00 -10.48 956.90 -657.00 472547.70 14.52 2.20 2.10 42.94 -7.79 0.18 0.00 0.00 1.82 3.49 1.50 -1.00 0.00 0.00 -6.38 227.70 -658.00 472638.40 13.98 3.30 2.10 50.39 -8.46 -0.02 0.00 0.00 2.60 4.30 2.30 -1.00 0.00 0.00 -4.30 318.40 -659.00 472889.30 11.37 1.90 2.10 27.41 -9.37 0.48 0.00 0.00 1.75 3.05 1.10 -1.00 0.00 0.00 -5.20 569.30 -660.00 473022.00 16.18 1.70 2.10 42.65 -9.67 0.73 0.00 0.00 1.56 3.15 1.20 -1.00 0.00 0.00 -8.29 702.00 -661.00 474235.60 12.14 1.80 2.10 28.75 -8.58 0.60 0.00 0.00 1.65 2.96 1.30 -1.00 0.00 0.00 -5.88 635.60 -662.00 474441.70 15.13 2.20 2.10 41.58 -8.10 -2.67 0.00 0.00 1.55 2.68 1.70 -1.00 0.00 0.00 -7.81 841.70 -663.00 474514.80 15.27 1.80 2.10 38.90 -6.84 0.35 0.00 0.00 1.60 3.21 1.30 -1.00 0.00 0.00 -7.65 914.80 -664.00 475680.50 22.76 2.40 2.10 65.40 -8.15 -0.51 0.00 0.00 1.96 3.71 1.80 -1.00 0.00 0.00 -9.28 800.50 -665.00 475730.70 15.41 3.70 2.10 44.08 -9.69 -1.57 0.00 0.00 1.29 3.01 1.10 -1.00 0.00 0.00 -9.56 850.70 -666.00 475872.80 13.21 1.90 2.10 31.14 -8.55 0.95 0.00 0.00 1.65 2.83 1.00 -1.00 0.00 0.00 -6.41 992.80 -667.00 476092.80 13.07 2.70 2.10 34.20 -9.06 -2.15 0.00 0.00 1.91 3.41 1.50 -1.00 0.00 0.00 -5.46 1212.80 -668.00 476122.80 11.40 2.10 2.10 32.29 -9.69 -2.95 0.00 0.00 1.87 2.95 1.60 -1.00 0.00 0.00 -4.87 1242.80 -669.00 476632.80 12.00 2.00 2.10 31.33 -7.97 -0.68 0.00 0.00 1.88 3.66 1.70 -1.00 0.00 0.00 -5.11 472.80 -670.00 476978.30 12.71 2.20 2.10 38.27 -8.54 -0.24 0.00 0.00 2.04 3.68 1.70 -1.00 0.00 0.00 -4.98 818.30 -671.00 477137.10 10.03 2.10 2.10 26.08 -8.24 -0.86 0.00 0.00 1.89 3.10 1.50 -1.00 0.00 0.00 -4.25 977.10 -672.00 477404.50 11.29 2.40 2.10 32.64 -7.71 -1.16 0.00 0.00 1.22 3.24 1.30 -1.00 0.00 0.00 -7.42 1244.50 -673.00 478003.20 12.78 1.60 2.10 33.12 -8.23 -0.22 0.00 0.00 1.33 3.16 1.20 -1.00 0.00 0.00 -7.71 563.20 -674.00 478443.10 17.44 2.60 2.10 46.44 -8.48 1.18 0.00 0.00 1.86 3.32 1.40 -1.00 0.00 0.00 -7.49 1003.10 -675.00 479195.00 10.10 3.60 2.10 24.08 -7.33 -0.51 0.00 0.00 2.85 0.34 0.20 -1.00 0.00 0.00 -2.83 475.00 -676.00 479456.00 14.92 2.20 2.10 40.33 -8.38 0.34 0.00 0.00 2.05 2.63 1.40 -1.00 0.00 0.00 -5.82 736.00 -677.00 479600.60 13.57 5.30 2.10 50.54 -8.55 1.53 0.00 0.00 4.51 3.76 2.20 -1.00 0.00 0.00 -2.41 880.60 diff --git a/data/mEPSCs/washout2.txt b/data/mEPSCs/washout2.txt deleted file mode 100644 index 24f17e7c..00000000 --- a/data/mEPSCs/washout2.txt +++ /dev/null @@ -1,1194 +0,0 @@ - Time (ms) Amplitude Rise (ms) Decay (ms) Area Baseline Noise Group Channel 10-90Rise HalfWidth Rise50 Peak Dir Burst# BurstE# 10-90Slope Rel Time -1.00 340662.50 10.05 1.30 3.70 30.40 -10.49 -0.63 0.00 0.00 0.87 3.01 0.50 -1.00 0.00 0.00 -9.24 156.90 -2.00 236835.30 10.47 1.30 5.50 42.49 -9.85 -0.22 0.00 0.00 1.07 4.07 0.80 -1.00 0.00 0.00 -7.83 188.90 -3.00 315480.10 10.45 1.90 5.60 49.71 -13.24 0.89 0.00 0.00 1.79 4.74 1.20 -1.00 0.00 0.00 -4.66 190.50 -4.00 338301.10 10.79 1.90 5.20 52.91 -11.31 0.95 0.00 0.00 1.44 4.99 1.10 -1.00 0.00 0.00 -5.98 99.50 -5.00 181690.60 14.66 2.10 4.30 53.33 -8.00 1.37 0.00 0.00 1.86 3.39 1.10 -1.00 0.00 0.00 -6.30 84.20 -6.00 111066.80 20.60 1.50 8.70 155.73 -7.99 0.55 0.00 0.00 1.21 7.75 1.00 -1.00 0.00 0.00 -13.66 372.40 -7.00 75063.20 12.72 2.00 13.50 151.99 -7.69 -0.45 0.00 0.00 1.75 4.81 1.60 -1.00 0.00 0.00 -5.80 80.80 -8.00 59650.70 19.28 1.90 14.50 227.47 -8.58 -1.01 0.00 0.00 1.47 4.95 1.10 -1.00 0.00 0.00 -10.52 28.30 -9.00 57656.80 16.03 2.10 12.00 163.73 -9.34 1.80 0.00 0.00 1.50 3.90 1.30 -1.00 0.00 0.00 -8.56 338.40 -10.00 304254.50 13.67 1.70 9.90 100.03 -10.36 -1.74 0.00 0.00 1.10 2.25 1.00 -1.00 0.00 0.00 -9.94 100.90 -11.00 239259.40 12.15 2.20 2.90 38.88 -9.19 0.64 0.00 0.00 1.78 3.30 1.60 -1.00 0.00 0.00 -5.46 309.00 -12.00 203728.80 11.16 1.80 7.60 85.62 -9.98 2.45 0.00 0.00 1.67 8.61 1.30 -1.00 0.00 0.00 -5.34 234.40 -13.00 128468.90 10.21 2.80 5.10 47.28 -8.92 0.64 0.00 0.00 2.57 4.60 2.00 -1.00 0.00 0.00 -3.17 238.50 -14.00 65163.50 11.93 1.70 6.30 55.08 -6.56 -0.39 0.00 0.00 1.39 4.38 0.80 -1.00 0.00 0.00 -6.87 165.10 -15.00 227531.70 14.91 2.00 8.00 112.58 -9.52 3.31 0.00 0.00 1.79 3.59 1.50 -1.00 0.00 0.00 -6.68 101.30 -16.00 227714.10 10.04 1.30 6.80 53.40 -7.89 1.87 0.00 0.00 1.12 5.01 0.60 -1.00 0.00 0.00 -7.18 283.70 -17.00 27492.70 13.47 2.30 2.10 41.69 -8.91 1.05 0.00 0.00 1.99 3.72 1.80 -1.00 0.00 0.00 -5.41 126.30 -18.00 232096.10 11.89 1.60 13.50 166.69 -9.27 2.09 0.00 0.00 1.19 3.39 1.00 -1.00 0.00 0.00 -8.00 57.70 -19.00 130752.40 10.94 2.20 2.20 30.43 -11.45 0.94 0.00 0.00 2.02 2.78 1.80 -1.00 0.00 0.00 -4.34 38.80 -20.00 31521.80 15.59 2.80 2.10 48.24 -7.38 0.06 0.00 0.00 2.17 3.52 1.60 -1.00 0.00 0.00 -5.75 315.40 -21.00 190609.30 12.46 2.30 5.10 61.64 -8.58 -1.07 0.00 0.00 2.09 5.53 1.80 -1.00 0.00 0.00 -4.77 170.90 -22.00 188632.60 10.04 1.00 4.10 32.68 -8.66 -0.16 0.00 0.00 0.78 3.40 0.60 -1.00 0.00 0.00 -10.32 114.20 -23.00 194125.90 10.30 1.90 6.60 56.65 -9.21 -0.96 0.00 0.00 1.67 5.53 1.40 -1.00 0.00 0.00 -4.94 231.50 -24.00 332064.40 13.86 2.10 6.00 70.02 -13.28 -0.38 0.00 0.00 1.90 4.60 1.40 -1.00 0.00 0.00 -5.83 6.80 -25.00 334156.00 10.76 1.60 5.10 43.75 -11.56 0.26 0.00 0.00 1.34 4.00 0.30 -1.00 0.00 0.00 -6.42 50.40 -26.00 134924.60 15.48 1.90 15.30 214.20 -6.98 -0.14 0.00 0.00 1.34 11.53 0.90 -1.00 0.00 0.00 -9.21 89.40 -27.00 333215.70 13.85 1.50 17.40 249.06 -11.08 -1.64 0.00 0.00 1.10 15.59 1.10 -1.00 0.00 0.00 -10.11 134.10 -28.00 196138.90 11.52 2.30 6.70 59.53 -8.48 1.40 0.00 0.00 1.31 3.87 0.80 -1.00 0.00 0.00 -7.02 324.50 -29.00 184009.60 10.21 1.40 9.00 62.33 -7.04 0.42 0.00 0.00 1.27 5.34 0.40 -1.00 0.00 0.00 -6.45 99.20 -30.00 80465.30 12.69 2.60 3.10 46.60 -8.01 -0.29 0.00 0.00 2.37 3.46 2.00 -1.00 0.00 0.00 -4.28 106.90 -31.00 112311.30 10.46 2.60 3.00 35.61 -8.55 -1.32 0.00 0.00 2.34 3.54 2.30 -1.00 0.00 0.00 -3.58 80.90 -32.00 360205.30 10.10 2.60 3.90 37.85 -12.01 -0.87 0.00 0.00 2.41 3.81 1.80 -1.00 0.00 0.00 -3.35 243.70 -33.00 48976.70 14.39 1.60 7.40 91.43 -7.77 1.08 0.00 0.00 1.28 7.10 1.20 -1.00 0.00 0.00 -8.97 106.30 -34.00 83095.60 11.28 2.30 4.50 42.38 -8.26 1.18 0.00 0.00 1.28 3.44 0.50 -1.00 0.00 0.00 -7.07 49.20 -35.00 252734.90 12.48 1.80 6.80 64.30 -7.77 -1.88 0.00 0.00 1.46 4.73 0.90 -1.00 0.00 0.00 -6.83 37.30 -36.00 160942.70 12.01 2.00 6.40 62.09 -8.33 1.42 0.00 0.00 1.77 4.65 1.40 -1.00 0.00 0.00 -5.43 123.50 -37.00 156125.10 10.65 1.40 5.30 42.79 -7.66 -0.42 0.00 0.00 0.58 3.40 0.60 -1.00 0.00 0.00 -14.68 41.90 -38.00 88365.50 12.03 3.50 7.20 109.86 -10.06 -0.07 0.00 0.00 3.16 9.42 2.80 -1.00 0.00 0.00 -3.04 327.10 -39.00 223598.10 12.48 1.40 10.10 88.00 -9.39 2.59 0.00 0.00 1.13 4.52 0.40 -1.00 0.00 0.00 -8.80 7.70 -40.00 222362.70 25.14 4.20 2.10 78.63 -7.58 -0.73 0.00 0.00 1.38 3.39 1.40 -1.00 0.00 0.00 -14.63 436.30 -41.00 220925.10 26.39 1.90 2.10 78.21 -10.02 2.60 0.00 0.00 1.11 3.29 1.30 -1.00 0.00 0.00 -19.00 278.70 -42.00 220893.70 25.94 2.00 5.00 116.80 -8.17 2.79 0.00 0.00 1.71 4.86 1.60 -1.00 0.00 0.00 -12.16 119.30 -43.00 228193.70 11.69 3.30 2.10 40.51 -8.43 0.11 0.00 0.00 2.97 4.13 2.50 -1.00 0.00 0.00 -3.15 1147.30 -44.00 228042.60 12.42 2.30 2.10 36.61 -9.24 -0.59 0.00 0.00 1.96 3.96 2.00 -1.00 0.00 0.00 -5.06 996.20 -45.00 221118.20 22.57 2.40 4.40 95.16 -9.00 0.39 0.00 0.00 1.77 4.38 1.30 -1.00 0.00 0.00 -10.20 343.80 -46.00 220580.10 17.99 3.00 2.10 66.26 -10.33 -0.10 0.00 0.00 2.72 4.43 2.50 -1.00 0.00 0.00 -5.29 1213.70 -47.00 227727.90 14.63 2.00 2.10 39.90 -11.56 1.66 0.00 0.00 1.38 3.51 1.60 -1.00 0.00 0.00 -8.50 681.50 -48.00 221519.50 17.83 1.90 2.10 50.76 -8.51 -0.59 0.00 0.00 1.50 3.19 1.20 -1.00 0.00 0.00 -9.52 873.10 -49.00 227896.50 16.46 3.40 2.10 59.76 -7.70 0.46 0.00 0.00 2.76 4.15 2.20 -1.00 0.00 0.00 -4.78 850.10 -50.00 221333.70 11.80 2.10 2.10 31.80 -8.47 0.46 0.00 0.00 1.43 3.30 1.40 -1.00 0.00 0.00 -6.59 687.30 -51.00 219976.50 19.37 2.40 2.10 67.13 -7.92 0.19 0.00 0.00 1.24 3.71 1.80 -1.00 0.00 0.00 -12.52 610.10 -52.00 217817.50 18.64 1.90 2.10 46.32 -10.94 -1.11 0.00 0.00 1.58 3.09 1.10 -1.00 0.00 0.00 -9.41 1011.10 -53.00 218236.00 14.21 2.90 2.10 44.47 -7.82 0.03 0.00 0.00 2.43 3.67 2.00 -1.00 0.00 0.00 -4.68 149.60 -54.00 229742.30 26.90 2.70 2.10 89.89 -9.93 -0.17 0.00 0.00 1.80 3.84 1.90 -1.00 0.00 0.00 -11.97 135.90 -55.00 229765.90 10.96 3.10 2.10 35.89 -9.93 1.32 0.00 0.00 2.28 4.03 2.10 -1.00 0.00 0.00 -3.85 159.50 -56.00 229844.60 25.78 2.40 2.10 84.67 -10.18 -1.11 0.00 0.00 1.35 3.74 1.80 -1.00 0.00 0.00 -15.33 238.20 -57.00 218857.50 19.03 2.00 2.10 53.45 -8.81 -1.76 0.00 0.00 1.49 3.11 1.20 -1.00 0.00 0.00 -10.22 771.10 -58.00 229322.80 22.01 2.70 2.10 71.78 -9.85 0.23 0.00 0.00 1.76 3.60 1.60 -1.00 0.00 0.00 -10.02 996.40 -59.00 227414.10 13.50 3.20 2.10 46.69 -7.68 -1.69 0.00 0.00 2.96 3.44 2.20 -1.00 0.00 0.00 -3.65 367.70 -60.00 228401.40 21.40 1.60 2.10 56.94 -8.59 0.70 0.00 0.00 1.38 3.07 1.10 -1.00 0.00 0.00 -12.40 75.00 -61.00 228561.40 14.40 2.90 2.10 42.52 -9.19 -2.52 0.00 0.00 1.56 3.35 1.40 -1.00 0.00 0.00 -7.37 235.00 -62.00 219652.10 24.73 2.10 2.10 73.27 -9.29 1.04 0.00 0.00 1.61 3.32 1.40 -1.00 0.00 0.00 -12.32 285.70 -63.00 228865.20 10.32 1.40 2.10 25.09 -9.35 1.34 0.00 0.00 1.17 2.91 1.00 -1.00 0.00 0.00 -7.07 538.80 -64.00 220012.20 12.78 3.00 2.10 46.60 -10.56 -1.64 0.00 0.00 2.72 4.39 2.40 -1.00 0.00 0.00 -3.76 645.80 -65.00 227325.10 15.59 2.80 2.10 55.41 -8.19 0.27 0.00 0.00 2.59 4.19 2.20 -1.00 0.00 0.00 -4.82 278.70 -66.00 223513.50 17.14 2.90 2.10 55.09 -9.01 -1.44 0.00 0.00 2.19 3.82 1.90 -1.00 0.00 0.00 -6.26 307.10 -67.00 224464.70 15.66 2.60 2.10 47.63 -8.19 0.38 0.00 0.00 1.84 3.54 1.60 -1.00 0.00 0.00 -6.82 1258.30 -68.00 224940.60 18.07 2.00 2.10 56.48 -8.08 -1.22 0.00 0.00 1.19 3.49 1.50 -1.00 0.00 0.00 -12.14 454.20 -69.00 224967.90 14.25 2.60 2.10 42.79 -9.08 1.43 0.00 0.00 1.44 3.26 1.30 -1.00 0.00 0.00 -7.91 481.50 -70.00 223272.60 16.55 3.20 2.10 58.56 -9.13 0.06 0.00 0.00 2.07 3.88 1.90 -1.00 0.00 0.00 -6.40 66.20 -71.00 223543.00 19.92 3.60 2.10 62.38 -10.47 1.35 0.00 0.00 2.08 3.82 1.90 -1.00 0.00 0.00 -7.65 336.60 -72.00 224430.50 19.51 3.00 2.10 67.31 -7.32 0.15 0.00 0.00 2.50 4.21 2.30 -1.00 0.00 0.00 -6.23 1224.10 -73.00 223866.30 14.03 2.90 2.10 41.47 -8.62 -1.60 0.00 0.00 1.38 3.43 1.50 -1.00 0.00 0.00 -8.12 659.90 -74.00 223659.10 11.80 3.50 2.10 46.37 -10.03 -1.19 0.00 0.00 3.05 4.29 2.80 -1.00 0.00 0.00 -3.10 452.70 -75.00 223956.00 13.99 2.10 2.10 39.96 -8.65 0.49 0.00 0.00 1.41 3.38 1.40 -1.00 0.00 0.00 -7.93 749.60 -76.00 224016.00 19.85 3.20 2.10 56.36 -7.51 -2.46 0.00 0.00 1.88 3.21 1.30 -1.00 0.00 0.00 -8.44 809.60 -77.00 224263.80 11.23 1.30 2.10 23.20 -8.01 1.34 0.00 0.00 1.11 1.95 0.70 -1.00 0.00 0.00 -8.10 1057.40 -78.00 225228.60 18.82 1.80 2.10 50.98 -9.27 -0.11 0.00 0.00 1.58 3.10 1.10 -1.00 0.00 0.00 -9.54 742.20 -79.00 225287.20 11.50 1.60 2.10 29.99 -10.24 -0.44 0.00 0.00 1.38 2.87 1.20 -1.00 0.00 0.00 -6.66 800.80 -80.00 222516.30 17.92 4.20 2.10 77.24 -8.37 0.06 0.00 0.00 3.52 5.10 3.10 -1.00 0.00 0.00 -4.07 589.90 -81.00 226791.10 16.69 1.70 2.10 41.90 -9.33 -0.60 0.00 0.00 1.44 2.89 0.90 -1.00 0.00 0.00 -9.25 1024.70 -82.00 226974.50 20.67 2.70 2.10 58.63 -9.05 0.02 0.00 0.00 1.62 3.31 1.40 -1.00 0.00 0.00 -10.22 1208.10 -83.00 227011.00 15.77 3.50 2.10 67.11 -11.82 -2.09 0.00 0.00 3.16 4.99 3.00 -1.00 0.00 0.00 -4.00 1244.60 -84.00 223625.00 16.87 1.90 2.10 51.46 -10.61 -1.05 0.00 0.00 1.60 3.47 1.50 -1.00 0.00 0.00 -8.44 418.60 -85.00 226158.20 11.32 1.10 2.10 25.18 -10.47 -1.59 0.00 0.00 0.90 2.59 0.60 -1.00 0.00 0.00 -10.09 391.80 -86.00 226099.90 13.43 4.10 2.10 45.54 -9.38 0.90 0.00 0.00 3.99 3.62 3.50 -1.00 0.00 0.00 -2.69 333.50 -87.00 222940.20 19.07 2.90 2.10 66.04 -7.41 0.10 0.00 0.00 1.48 3.79 1.80 -1.00 0.00 0.00 -10.32 1013.80 -88.00 225587.00 11.25 1.90 2.10 30.64 -9.63 -0.20 0.00 0.00 1.67 3.26 1.50 -1.00 0.00 0.00 -5.38 1100.60 -89.00 222731.30 16.09 2.10 2.10 46.61 -8.73 0.10 0.00 0.00 1.79 3.04 1.50 -1.00 0.00 0.00 -7.18 804.90 -90.00 222528.20 23.79 2.50 2.10 73.89 -13.01 1.88 0.00 0.00 1.54 3.62 1.70 -1.00 0.00 0.00 -12.37 601.80 -91.00 225747.10 15.75 2.30 2.10 44.26 -7.34 -0.08 0.00 0.00 2.09 3.54 1.60 -1.00 0.00 0.00 -6.03 1260.70 -92.00 222410.80 14.03 2.50 2.10 41.71 -11.02 0.58 0.00 0.00 2.30 3.27 2.00 -1.00 0.00 0.00 -4.88 484.40 -93.00 232248.60 10.05 1.10 2.10 20.82 -11.44 2.36 0.00 0.00 1.01 2.18 0.20 -1.00 0.00 0.00 -7.99 82.20 -94.00 240796.60 16.55 1.80 2.10 50.97 -8.15 0.47 0.00 0.00 0.89 3.32 1.40 -1.00 0.00 0.00 -14.87 950.20 -95.00 240608.60 13.16 2.30 2.10 41.99 -8.89 -0.27 0.00 0.00 1.96 3.64 1.70 -1.00 0.00 0.00 -5.36 762.20 -96.00 240314.80 20.01 3.90 2.10 98.92 -8.09 -0.34 0.00 0.00 3.13 5.45 3.50 -1.00 0.00 0.00 -5.11 468.40 -97.00 241100.80 15.34 2.60 2.10 51.86 -7.84 -1.21 0.00 0.00 2.38 4.06 2.10 -1.00 0.00 0.00 -5.17 1254.40 -98.00 241535.10 11.75 2.10 2.10 32.79 -8.64 -1.45 0.00 0.00 1.53 3.41 1.50 -1.00 0.00 0.00 -6.15 408.70 -99.00 241739.70 10.13 2.60 2.10 30.68 -8.72 1.36 0.00 0.00 2.45 3.65 1.70 -1.00 0.00 0.00 -3.30 613.30 -100.00 241713.20 27.16 2.30 2.10 83.57 -8.09 0.20 0.00 0.00 1.72 3.37 1.40 -1.00 0.00 0.00 -12.62 586.80 -101.00 240171.50 11.61 4.10 2.10 43.86 -9.46 0.52 0.00 0.00 3.85 3.03 1.10 -1.00 0.00 0.00 -2.42 325.10 -102.00 240113.70 12.64 2.50 2.10 38.28 -9.70 1.98 0.00 0.00 2.08 3.76 1.80 -1.00 0.00 0.00 -4.87 267.30 -103.00 239391.90 12.94 1.50 2.10 27.54 -10.65 -1.38 0.00 0.00 1.26 2.20 1.00 -1.00 0.00 0.00 -8.20 825.50 -104.00 239186.20 15.91 2.50 2.10 53.25 -10.16 -1.23 0.00 0.00 1.91 3.91 2.00 -1.00 0.00 0.00 -6.66 619.80 -105.00 239095.60 15.03 1.50 2.10 34.14 -10.71 -1.81 0.00 0.00 1.02 2.80 0.80 -1.00 0.00 0.00 -11.81 529.20 -106.00 239501.40 12.18 1.30 2.10 29.29 -8.66 0.92 0.00 0.00 1.02 2.86 0.90 -1.00 0.00 0.00 -9.53 935.00 -107.00 239669.80 17.45 2.60 2.10 55.05 -8.43 0.78 0.00 0.00 2.18 3.75 1.80 -1.00 0.00 0.00 -6.41 1103.40 -108.00 239986.70 13.97 2.20 2.10 39.03 -7.50 1.93 0.00 0.00 1.16 3.02 1.10 -1.00 0.00 0.00 -9.62 140.30 -109.00 239755.70 17.64 3.50 2.10 60.23 -7.33 0.72 0.00 0.00 2.23 3.86 1.90 -1.00 0.00 0.00 -6.32 1189.30 -110.00 241780.30 10.45 1.90 2.10 27.64 -12.25 0.61 0.00 0.00 1.69 3.37 1.60 -1.00 0.00 0.00 -4.95 653.90 -111.00 241865.60 10.63 3.10 2.10 37.68 -8.42 -1.78 0.00 0.00 2.83 3.72 2.60 -1.00 0.00 0.00 -3.01 739.20 -112.00 245314.60 11.98 2.80 2.10 32.80 -10.05 0.58 0.00 0.00 1.87 2.87 1.40 -1.00 0.00 0.00 -5.12 348.20 -113.00 245048.90 14.77 2.50 2.10 41.86 -8.89 1.14 0.00 0.00 1.89 3.47 1.50 -1.00 0.00 0.00 -6.24 82.50 -114.00 244699.80 12.57 3.10 2.10 37.32 -9.12 -1.37 0.00 0.00 2.24 3.46 1.50 -1.00 0.00 0.00 -4.49 1013.40 -115.00 245858.50 21.91 5.50 2.10 99.10 -10.28 2.55 0.00 0.00 4.99 4.76 2.80 -1.00 0.00 0.00 -3.51 892.10 -116.00 246372.30 18.34 1.90 2.10 52.58 -7.99 -0.08 0.00 0.00 1.36 3.10 1.20 -1.00 0.00 0.00 -10.78 125.90 -117.00 246579.60 15.98 2.20 2.10 46.04 -7.96 1.62 0.00 0.00 1.64 3.37 1.40 -1.00 0.00 0.00 -7.79 333.20 -118.00 246450.10 17.97 2.10 2.10 52.01 -10.45 -0.62 0.00 0.00 1.82 3.40 1.50 -1.00 0.00 0.00 -7.92 203.70 -119.00 244536.90 13.21 2.50 2.10 38.20 -8.58 0.34 0.00 0.00 1.91 3.38 1.40 -1.00 0.00 0.00 -5.54 850.50 -120.00 244040.00 17.11 2.60 2.10 54.45 -8.13 0.26 0.00 0.00 1.10 3.75 1.80 -1.00 0.00 0.00 -12.42 353.60 -121.00 243041.10 14.28 2.20 2.10 34.08 -8.83 -1.55 0.00 0.00 1.67 2.70 1.30 -1.00 0.00 0.00 -6.86 634.70 -122.00 242490.30 15.08 3.20 2.10 58.36 -8.45 0.35 0.00 0.00 2.95 4.19 2.50 -1.00 0.00 0.00 -4.09 83.90 -123.00 242261.80 15.24 2.00 2.10 40.37 -8.17 2.57 0.00 0.00 1.69 3.23 1.30 -1.00 0.00 0.00 -7.23 1135.40 -124.00 243091.70 12.32 2.50 2.10 34.13 -10.63 0.46 0.00 0.00 2.06 3.19 1.70 -1.00 0.00 0.00 -4.79 685.30 -125.00 243309.70 19.40 2.00 2.10 57.86 -7.94 0.09 0.00 0.00 1.45 3.28 1.30 -1.00 0.00 0.00 -10.72 903.30 -126.00 243744.00 24.57 2.30 2.10 78.83 -8.86 -1.24 0.00 0.00 1.73 3.46 1.50 -1.00 0.00 0.00 -11.33 57.60 -127.00 243583.20 11.84 4.10 2.10 38.56 -7.87 -0.24 0.00 0.00 2.78 3.12 2.20 -1.00 0.00 0.00 -3.40 1176.80 -128.00 239045.50 16.62 4.10 2.10 63.71 -12.12 1.15 0.00 0.00 3.80 4.45 2.50 -1.00 0.00 0.00 -3.50 479.10 -129.00 238982.40 18.90 2.10 2.10 57.23 -8.78 0.17 0.00 0.00 1.89 3.56 1.60 -1.00 0.00 0.00 -8.01 416.00 -130.00 233039.70 22.58 2.10 2.10 65.35 -8.21 -0.24 0.00 0.00 1.02 3.37 1.40 -1.00 0.00 0.00 -17.68 873.30 -131.00 232989.20 11.93 1.40 2.10 28.14 -7.98 -1.26 0.00 0.00 1.23 2.95 1.00 -1.00 0.00 0.00 -7.78 822.80 -132.00 232599.50 12.08 5.10 2.10 56.98 -8.69 -2.13 0.00 0.00 3.77 5.13 3.20 -1.00 0.00 0.00 -2.56 433.10 -133.00 233201.40 18.00 2.00 2.10 51.81 -9.16 1.21 0.00 0.00 1.66 3.32 1.40 -1.00 0.00 0.00 -8.69 1035.00 -134.00 233695.60 11.87 1.80 2.10 30.09 -9.56 0.80 0.00 0.00 1.56 3.38 1.40 -1.00 0.00 0.00 -6.09 249.20 -135.00 233966.00 17.31 3.70 2.10 75.54 -9.49 0.29 0.00 0.00 3.44 4.87 2.90 -1.00 0.00 0.00 -4.02 519.60 -136.00 233758.40 15.14 1.50 2.10 37.93 -10.03 0.43 0.00 0.00 1.29 2.90 0.90 -1.00 0.00 0.00 -9.40 312.00 -137.00 232450.80 16.38 2.80 2.10 58.41 -9.41 0.67 0.00 0.00 1.73 4.24 2.30 -1.00 0.00 0.00 -7.56 284.40 -138.00 217795.70 28.05 2.00 2.10 88.73 -8.25 -0.16 0.00 0.00 1.33 3.44 1.50 -1.00 0.00 0.00 -16.91 989.30 -139.00 231362.60 10.58 3.40 2.10 36.77 -9.93 0.11 0.00 0.00 2.03 4.25 2.30 -1.00 0.00 0.00 -4.17 476.20 -140.00 230853.50 18.59 1.60 2.10 52.67 -9.18 -0.59 0.00 0.00 1.41 3.14 1.20 -1.00 0.00 0.00 -10.58 1247.10 -141.00 230560.20 18.06 2.60 2.10 53.43 -9.24 1.34 0.00 0.00 1.93 3.76 1.80 -1.00 0.00 0.00 -7.50 953.80 -142.00 231849.50 24.90 2.30 2.10 78.79 -9.37 -0.64 0.00 0.00 2.00 3.70 1.80 -1.00 0.00 0.00 -9.98 963.10 -143.00 231880.10 13.89 2.80 2.10 43.82 -10.19 -0.76 0.00 0.00 2.54 3.86 1.90 -1.00 0.00 0.00 -4.38 993.70 -144.00 232134.60 12.96 1.90 2.10 34.54 -11.24 -0.37 0.00 0.00 1.75 3.43 1.50 -1.00 0.00 0.00 -5.93 1248.20 -145.00 232053.90 14.65 1.60 2.10 38.45 -8.36 0.39 0.00 0.00 1.37 2.89 0.90 -1.00 0.00 0.00 -8.54 1167.50 -146.00 234305.60 10.32 1.80 2.10 25.62 -9.09 -1.64 0.00 0.00 1.43 2.69 0.70 -1.00 0.00 0.00 -5.77 859.20 -147.00 234437.60 10.35 2.40 2.10 30.43 -9.21 0.21 0.00 0.00 2.21 2.93 1.00 -1.00 0.00 0.00 -3.75 991.20 -148.00 237744.20 18.44 2.10 2.10 50.53 -8.33 -0.54 0.00 0.00 1.41 3.22 1.30 -1.00 0.00 0.00 -10.48 457.80 -149.00 237221.50 18.54 2.10 2.10 50.28 -8.26 -1.72 0.00 0.00 1.49 3.27 1.30 -1.00 0.00 0.00 -9.94 1215.10 -150.00 236991.20 18.91 3.90 2.10 59.04 -9.64 1.06 0.00 0.00 1.76 3.66 1.70 -1.00 0.00 0.00 -8.60 984.80 -151.00 238116.70 14.47 1.60 2.10 38.88 -8.16 -0.31 0.00 0.00 1.45 3.12 1.20 -1.00 0.00 0.00 -8.00 830.30 -152.00 238532.40 12.12 2.20 2.10 35.10 -9.21 -0.84 0.00 0.00 1.70 3.29 1.30 -1.00 0.00 0.00 -5.71 1246.00 -153.00 238899.80 18.60 3.20 2.10 73.40 -8.75 0.03 0.00 0.00 2.66 4.67 2.70 -1.00 0.00 0.00 -5.60 333.40 -154.00 238687.80 13.71 1.60 2.10 33.65 -10.01 -0.39 0.00 0.00 1.33 3.23 1.30 -1.00 0.00 0.00 -8.27 121.40 -155.00 236959.70 17.54 2.00 2.10 46.00 -10.24 -0.69 0.00 0.00 1.63 3.20 1.30 -1.00 0.00 0.00 -8.59 953.30 -156.00 236682.10 12.17 2.80 2.10 35.38 -10.00 0.55 0.00 0.00 2.23 3.03 1.30 -1.00 0.00 0.00 -4.37 675.70 -157.00 235144.40 21.21 3.90 2.10 85.23 -8.73 0.44 0.00 0.00 3.54 4.51 2.60 -1.00 0.00 0.00 -4.79 418.00 -158.00 234891.80 14.95 2.40 2.10 47.23 -8.81 -1.37 0.00 0.00 2.08 3.78 1.80 -1.00 0.00 0.00 -5.74 165.40 -159.00 234568.70 21.58 3.30 2.10 60.88 -8.57 -0.68 0.00 0.00 1.46 3.06 1.10 -1.00 0.00 0.00 -11.85 1122.30 -160.00 235277.20 18.58 1.80 2.10 48.21 -9.63 2.14 0.00 0.00 1.53 3.09 1.10 -1.00 0.00 0.00 -9.74 550.80 -161.00 235829.40 21.61 2.20 2.10 62.25 -7.96 -0.59 0.00 0.00 1.65 3.22 1.30 -1.00 0.00 0.00 -10.45 1103.00 -162.00 236561.00 14.98 2.10 2.10 39.21 -9.94 -1.28 0.00 0.00 1.63 3.21 1.30 -1.00 0.00 0.00 -7.36 554.60 -163.00 236425.80 23.12 1.90 2.10 66.65 -8.82 -1.16 0.00 0.00 1.72 3.30 1.40 -1.00 0.00 0.00 -10.78 419.40 -164.00 229961.00 12.01 2.80 2.10 44.97 -9.27 0.42 0.00 0.00 2.60 4.39 2.40 -1.00 0.00 0.00 -3.70 354.60 -165.00 211924.90 18.82 1.70 2.10 48.31 -8.94 0.27 0.00 0.00 1.31 2.90 0.90 -1.00 0.00 0.00 -11.49 238.50 -166.00 173261.10 13.16 2.40 2.10 38.52 -8.74 -0.72 0.00 0.00 2.28 3.21 1.80 -1.00 0.00 0.00 -4.61 1254.70 -167.00 173176.30 22.45 2.20 2.10 72.95 -7.63 -0.51 0.00 0.00 1.69 3.52 1.60 -1.00 0.00 0.00 -10.62 1169.90 -168.00 172901.70 13.09 1.60 2.10 34.67 -7.65 -0.31 0.00 0.00 1.34 2.95 1.00 -1.00 0.00 0.00 -7.80 895.30 -169.00 173580.60 24.14 2.10 2.10 74.73 -8.64 -0.30 0.00 0.00 1.62 3.63 1.70 -1.00 0.00 0.00 -11.90 294.20 -170.00 174165.70 18.16 1.90 2.10 53.84 -7.93 -0.81 0.00 0.00 1.67 3.44 1.50 -1.00 0.00 0.00 -8.72 879.30 -171.00 175321.60 25.65 1.90 2.10 72.55 -9.07 2.20 0.00 0.00 1.55 3.41 1.50 -1.00 0.00 0.00 -13.26 755.20 -172.00 174819.30 13.70 3.20 2.10 46.02 -7.87 0.81 0.00 0.00 2.64 4.29 2.30 -1.00 0.00 0.00 -4.16 252.90 -173.00 172458.70 14.12 1.90 2.10 35.74 -9.38 0.17 0.00 0.00 1.68 3.15 1.20 -1.00 0.00 0.00 -6.70 452.30 -174.00 172229.80 15.26 3.00 2.10 50.47 -8.06 1.26 0.00 0.00 2.81 3.77 1.80 -1.00 0.00 0.00 -4.34 223.40 -175.00 170552.90 12.34 2.60 2.10 30.11 -8.72 0.33 0.00 0.00 1.41 2.80 1.00 -1.00 0.00 0.00 -6.98 1106.50 -176.00 170469.00 20.16 2.30 2.10 62.20 -8.33 -1.70 0.00 0.00 2.10 3.50 1.50 -1.00 0.00 0.00 -7.69 1022.60 -177.00 169593.70 13.08 1.60 2.10 34.66 -8.05 0.15 0.00 0.00 1.22 3.14 1.20 -1.00 0.00 0.00 -8.57 147.30 -178.00 170862.00 15.18 2.00 2.10 38.52 -10.28 -0.80 0.00 0.00 1.76 3.13 1.20 -1.00 0.00 0.00 -6.89 135.60 -179.00 171497.50 14.06 1.90 2.10 37.81 -7.11 -0.27 0.00 0.00 1.69 2.90 1.70 -1.00 0.00 0.00 -6.65 771.10 -180.00 171792.80 12.31 1.90 2.10 31.62 -9.47 -0.04 0.00 0.00 1.55 3.14 1.40 -1.00 0.00 0.00 -6.34 1066.40 -181.00 171704.30 16.21 2.80 2.10 48.34 -8.86 -1.57 0.00 0.00 1.56 3.22 1.30 -1.00 0.00 0.00 -8.29 977.90 -182.00 175472.50 12.35 2.30 2.10 31.08 -9.58 -0.57 0.00 0.00 2.18 2.71 1.20 -1.00 0.00 0.00 -4.53 906.10 -183.00 176004.10 13.51 2.20 2.10 41.24 -7.29 -0.16 0.00 0.00 1.93 3.60 1.60 -1.00 0.00 0.00 -5.59 157.70 -184.00 183068.60 18.01 2.70 2.10 49.18 -7.99 -1.39 0.00 0.00 2.13 3.31 1.40 -1.00 0.00 0.00 -6.77 822.20 -185.00 182395.10 18.90 2.50 2.10 62.01 -8.64 1.76 0.00 0.00 2.05 3.85 1.90 -1.00 0.00 0.00 -7.37 148.70 -186.00 182061.60 11.87 2.60 2.10 35.85 -7.75 -0.80 0.00 0.00 2.38 1.92 1.80 -1.00 0.00 0.00 -3.99 1095.20 -187.00 183275.90 25.91 1.90 2.10 75.90 -8.38 -0.24 0.00 0.00 1.42 3.36 1.40 -1.00 0.00 0.00 -14.63 1029.50 -188.00 184198.70 11.34 1.70 2.10 30.45 -8.71 -0.90 0.00 0.00 1.37 2.67 0.70 -1.00 0.00 0.00 -6.62 672.30 -189.00 185875.70 14.38 2.00 2.10 40.21 -8.03 0.58 0.00 0.00 1.44 3.40 1.40 -1.00 0.00 0.00 -8.00 1069.30 -190.00 185536.90 23.49 3.30 2.10 88.34 -9.01 0.18 0.00 0.00 1.44 4.46 2.50 -1.00 0.00 0.00 -13.01 730.50 -191.00 181981.10 13.76 2.50 2.10 42.47 -7.63 0.24 0.00 0.00 1.70 3.60 1.60 -1.00 0.00 0.00 -6.46 1014.70 -192.00 181857.60 16.81 1.60 2.10 45.10 -9.73 -1.42 0.00 0.00 1.25 3.04 1.10 -1.00 0.00 0.00 -10.74 891.20 -193.00 179635.50 21.22 2.70 2.10 65.96 -8.33 -2.35 0.00 0.00 1.78 3.55 1.60 -1.00 0.00 0.00 -9.51 1229.10 -194.00 177649.80 17.08 2.40 2.10 51.11 -7.99 1.20 0.00 0.00 2.04 3.49 1.50 -1.00 0.00 0.00 -6.70 523.40 -195.00 177319.80 18.97 1.50 2.10 46.85 -8.83 0.99 0.00 0.00 1.31 2.77 0.80 -1.00 0.00 0.00 -11.59 193.40 -196.00 179790.30 13.25 2.40 2.10 36.67 -9.78 -1.20 0.00 0.00 2.16 3.02 1.80 -1.00 0.00 0.00 -4.90 103.90 -197.00 180356.30 10.33 1.90 2.10 27.71 -9.27 -0.18 0.00 0.00 1.61 3.16 1.20 -1.00 0.00 0.00 -5.12 669.90 -198.00 181780.00 21.79 2.60 2.10 73.80 -8.81 1.28 0.00 0.00 1.40 3.96 2.00 -1.00 0.00 0.00 -12.45 813.60 -199.00 180800.50 11.35 4.50 2.10 31.52 -7.48 0.18 0.00 0.00 0.97 2.48 0.50 -1.00 0.00 0.00 -9.34 1114.10 -200.00 169488.60 17.18 2.80 2.10 56.24 -7.93 0.30 0.00 0.00 2.28 3.84 1.90 -1.00 0.00 0.00 -6.04 42.20 -201.00 169298.80 12.64 2.00 2.10 31.07 -8.90 1.02 0.00 0.00 1.79 2.38 1.30 -1.00 0.00 0.00 -5.65 1132.40 -202.00 159827.70 15.89 1.50 2.10 31.08 -6.54 -1.59 0.00 0.00 0.54 2.45 0.50 -1.00 0.00 0.00 -23.67 621.30 -203.00 159602.20 14.30 1.90 2.10 41.50 -7.73 -0.52 0.00 0.00 1.72 3.43 1.50 -1.00 0.00 0.00 -6.64 395.80 -204.00 159061.20 11.67 2.00 2.10 33.19 -9.06 0.11 0.00 0.00 1.78 3.38 1.40 -1.00 0.00 0.00 -5.24 1134.80 -205.00 159898.80 23.69 2.10 2.10 67.29 -8.20 0.71 0.00 0.00 1.50 3.29 1.30 -1.00 0.00 0.00 -12.64 692.40 -206.00 159917.60 11.96 3.50 2.10 40.74 -10.90 2.41 0.00 0.00 3.38 3.40 2.60 -1.00 0.00 0.00 -2.83 711.20 -207.00 160335.00 10.07 3.70 2.10 35.38 -8.36 0.46 0.00 0.00 3.52 3.32 2.40 -1.00 0.00 0.00 -2.29 1128.60 -208.00 160127.90 13.28 2.20 2.10 37.14 -7.55 1.93 0.00 0.00 1.36 3.26 1.30 -1.00 0.00 0.00 -7.79 921.50 -209.00 158623.10 13.57 2.20 2.10 38.21 -7.10 0.29 0.00 0.00 2.05 3.26 1.50 -1.00 0.00 0.00 -5.30 696.70 -210.00 158446.60 15.15 2.50 2.10 46.97 -7.70 -1.69 0.00 0.00 1.61 3.57 1.60 -1.00 0.00 0.00 -7.53 520.20 -211.00 88.20 19.19 1.90 2.10 51.41 -8.04 1.11 0.00 0.00 1.02 3.46 1.50 -1.00 0.00 0.00 -15.02 88.20 -212.00 156619.30 22.08 2.60 2.10 75.11 -10.80 1.06 0.00 0.00 2.30 3.87 1.90 -1.00 0.00 0.00 -7.68 1252.90 -213.00 156553.60 37.74 4.90 2.10 174.04 -9.47 1.37 0.00 0.00 3.36 4.99 3.00 -1.00 0.00 0.00 -8.98 1187.20 -214.00 156898.30 10.63 2.60 2.10 35.76 -8.47 0.24 0.00 0.00 1.99 3.90 2.20 -1.00 0.00 0.00 -4.27 251.90 -215.00 156982.90 13.56 2.80 2.10 40.88 -6.94 -1.38 0.00 0.00 1.51 3.24 1.30 -1.00 0.00 0.00 -7.17 336.50 -216.00 157435.80 18.06 2.30 2.10 57.89 -7.83 -0.58 0.00 0.00 1.86 3.64 1.70 -1.00 0.00 0.00 -7.77 789.40 -217.00 157183.90 15.90 2.60 2.10 53.76 -9.59 -0.51 0.00 0.00 1.26 3.54 2.10 -1.00 0.00 0.00 -10.11 537.50 -218.00 161017.30 18.55 3.70 2.10 75.47 -10.10 0.95 0.00 0.00 3.29 4.65 2.90 -1.00 0.00 0.00 -4.51 530.90 -219.00 161211.80 16.51 2.30 2.10 45.85 -8.32 -2.12 0.00 0.00 1.76 3.41 1.60 -1.00 0.00 0.00 -7.50 725.40 -220.00 165987.20 10.10 1.50 2.10 24.43 -9.60 -1.11 0.00 0.00 1.22 2.32 0.80 -1.00 0.00 0.00 -6.64 380.80 -221.00 165622.90 10.50 4.60 2.10 37.08 -7.70 -0.40 0.00 0.00 4.01 3.79 3.30 -1.00 0.00 0.00 -2.09 16.50 -222.00 165347.50 12.91 2.50 2.10 37.22 -7.76 0.84 0.00 0.00 2.22 3.61 1.70 -1.00 0.00 0.00 -4.64 1021.10 -223.00 167108.80 15.70 1.90 2.10 44.07 -9.37 -2.32 0.00 0.00 1.72 3.26 1.30 -1.00 0.00 0.00 -7.29 222.40 -224.00 167262.00 19.61 2.30 2.10 60.96 -8.72 0.98 0.00 0.00 1.77 3.66 1.70 -1.00 0.00 0.00 -8.88 375.60 -225.00 168113.50 12.40 1.90 2.10 30.20 -9.24 -0.68 0.00 0.00 1.31 3.12 1.30 -1.00 0.00 0.00 -7.56 1227.10 -226.00 167694.20 13.89 2.30 2.10 40.02 -9.29 -0.14 0.00 0.00 2.15 3.68 1.90 -1.00 0.00 0.00 -5.17 807.80 -227.00 165063.70 15.39 1.80 2.10 44.89 -8.09 -0.49 0.00 0.00 1.18 3.06 1.10 -1.00 0.00 0.00 -10.46 737.30 -228.00 164884.60 19.21 2.80 2.10 72.36 -8.58 0.82 0.00 0.00 1.08 4.25 2.30 -1.00 0.00 0.00 -14.19 558.20 -229.00 162810.60 10.29 1.10 2.10 20.64 -7.96 1.97 0.00 0.00 1.01 2.44 0.50 -1.00 0.00 0.00 -8.15 1044.20 -230.00 161520.80 13.91 3.10 2.10 49.71 -6.54 -2.26 0.00 0.00 2.87 4.43 2.60 -1.00 0.00 0.00 -3.87 1034.40 -231.00 162956.50 16.73 2.30 2.10 49.58 -8.07 0.53 0.00 0.00 1.97 3.62 1.70 -1.00 0.00 0.00 -6.80 1190.10 -232.00 163087.40 13.44 1.90 2.10 31.73 -9.68 -0.72 0.00 0.00 1.24 2.94 1.00 -1.00 0.00 0.00 -8.69 41.00 -233.00 163535.60 17.72 2.90 2.10 64.09 -9.20 -0.36 0.00 0.00 2.63 4.17 2.20 -1.00 0.00 0.00 -5.38 489.20 -234.00 163265.10 20.83 1.20 2.10 46.25 -8.32 1.28 0.00 0.00 1.00 2.63 0.70 -1.00 0.00 0.00 -16.59 218.70 -235.00 186215.70 12.59 1.70 2.10 34.30 -8.65 -0.28 0.00 0.00 1.37 3.12 1.20 -1.00 0.00 0.00 -7.33 129.30 -236.00 186965.10 18.78 2.30 2.10 58.19 -9.28 0.38 0.00 0.00 1.92 3.50 1.60 -1.00 0.00 0.00 -7.81 878.70 -237.00 206181.40 13.18 1.60 2.10 29.99 -9.43 0.02 0.00 0.00 1.38 2.92 1.00 -1.00 0.00 0.00 -7.67 895.00 -238.00 206143.60 13.92 1.80 2.10 38.17 -9.65 -0.82 0.00 0.00 1.17 3.06 1.10 -1.00 0.00 0.00 -9.48 857.20 -239.00 205901.40 18.26 2.50 2.10 58.78 -12.30 -1.56 0.00 0.00 1.64 3.72 1.80 -1.00 0.00 0.00 -8.91 615.00 -240.00 206653.10 12.12 1.60 2.10 32.81 -9.15 -1.79 0.00 0.00 1.38 2.92 1.00 -1.00 0.00 0.00 -7.03 86.70 -241.00 206726.00 12.29 2.60 2.10 39.56 -10.05 0.24 0.00 0.00 2.36 3.67 2.10 -1.00 0.00 0.00 -4.17 159.60 -242.00 206957.70 20.70 3.00 2.10 66.21 -8.52 -0.40 0.00 0.00 2.06 3.66 1.70 -1.00 0.00 0.00 -8.03 391.30 -243.00 206820.10 20.75 2.50 2.10 64.35 -8.67 0.07 0.00 0.00 1.86 3.64 1.70 -1.00 0.00 0.00 -8.90 253.70 -244.00 205884.40 22.93 2.70 2.10 84.49 -9.44 -1.78 0.00 0.00 2.17 4.01 2.10 -1.00 0.00 0.00 -8.46 598.00 -245.00 205824.00 21.77 2.10 2.10 61.29 -9.23 -1.48 0.00 0.00 1.61 3.40 1.50 -1.00 0.00 0.00 -10.85 537.60 -246.00 203694.40 13.01 2.70 2.10 43.71 -9.08 2.85 0.00 0.00 2.43 4.16 2.20 -1.00 0.00 0.00 -4.27 968.00 -247.00 203659.20 17.29 1.50 2.10 40.81 -8.30 -0.70 0.00 0.00 1.31 2.84 0.90 -1.00 0.00 0.00 -10.56 932.80 -248.00 203173.30 12.26 3.20 2.40 47.99 -9.55 -0.70 0.00 0.00 2.89 2.71 2.40 -1.00 0.00 0.00 -3.39 62.90 -249.00 204585.00 18.63 2.30 2.10 57.17 -7.99 1.83 0.00 0.00 1.88 3.41 1.50 -1.00 0.00 0.00 -7.92 578.60 -250.00 204796.30 15.49 1.90 2.10 45.12 -7.46 0.17 0.00 0.00 1.38 3.50 1.60 -1.00 0.00 0.00 -8.97 789.90 -251.00 205593.00 21.70 1.70 2.10 60.20 -10.27 0.63 0.00 0.00 1.31 2.94 1.00 -1.00 0.00 0.00 -13.22 306.60 -252.00 205446.80 17.44 2.10 2.10 57.18 -8.90 -0.20 0.00 0.00 1.25 3.71 1.80 -1.00 0.00 0.00 -11.15 160.40 -253.00 207333.80 19.64 2.20 2.10 61.15 -8.62 -0.32 0.00 0.00 1.89 3.66 1.70 -1.00 0.00 0.00 -8.33 767.40 -254.00 207770.50 23.05 2.20 2.10 75.19 -9.16 -0.61 0.00 0.00 1.61 3.62 1.70 -1.00 0.00 0.00 -11.46 1204.10 -255.00 215447.40 18.16 2.70 2.10 62.71 -11.32 1.01 0.00 0.00 2.45 3.89 1.90 -1.00 0.00 0.00 -5.94 1201.00 -256.00 215149.50 14.84 2.50 2.10 44.67 -9.49 -0.61 0.00 0.00 2.14 3.59 1.60 -1.00 0.00 0.00 -5.55 903.10 -257.00 212730.00 21.12 2.00 2.10 56.76 -9.56 -0.13 0.00 0.00 1.62 3.16 1.20 -1.00 0.00 0.00 -10.40 1043.60 -258.00 215607.40 18.36 2.50 2.10 61.64 -9.69 1.26 0.00 0.00 1.45 3.80 1.90 -1.00 0.00 0.00 -10.11 81.00 -259.00 215660.80 11.74 1.70 2.10 29.19 -10.41 0.17 0.00 0.00 1.49 2.82 1.30 -1.00 0.00 0.00 -6.31 134.40 -260.00 216845.40 18.52 2.40 2.10 60.22 -8.12 0.59 0.00 0.00 1.86 3.74 1.80 -1.00 0.00 0.00 -7.96 39.00 -261.00 216225.90 29.10 2.40 2.10 85.02 -7.06 -1.37 0.00 0.00 1.48 3.35 1.40 -1.00 0.00 0.00 -15.70 699.50 -262.00 212468.00 24.20 2.30 2.10 70.62 -8.72 -0.93 0.00 0.00 1.83 3.50 1.60 -1.00 0.00 0.00 -10.59 781.60 -263.00 212129.40 20.92 4.10 2.10 81.11 -8.10 0.19 0.00 0.00 1.53 4.21 2.30 -1.00 0.00 0.00 -10.97 443.00 -264.00 209559.20 20.49 1.90 2.10 61.41 -8.85 0.17 0.00 0.00 1.65 3.42 1.50 -1.00 0.00 0.00 -9.91 432.80 -265.00 209353.90 17.86 3.20 2.10 68.19 -9.22 -1.83 0.00 0.00 2.08 4.38 2.40 -1.00 0.00 0.00 -6.86 227.50 -266.00 211429.80 11.44 2.00 2.10 28.43 -7.76 -1.10 0.00 0.00 1.78 3.11 1.20 -1.00 0.00 0.00 -5.14 1023.40 -267.00 211706.60 19.12 2.60 2.10 67.39 -7.65 0.41 0.00 0.00 1.73 4.01 2.10 -1.00 0.00 0.00 -8.84 20.20 -268.00 246818.40 25.06 2.30 2.10 72.80 -8.64 -0.90 0.00 0.00 1.67 3.15 1.20 -1.00 0.00 0.00 -11.97 572.00 -269.00 211761.60 16.69 1.60 2.10 41.46 -9.09 0.56 0.00 0.00 1.40 2.94 1.00 -1.00 0.00 0.00 -9.51 75.20 -270.00 202808.40 13.95 2.50 2.10 38.29 -8.17 -0.83 0.00 0.00 1.72 3.25 1.30 -1.00 0.00 0.00 -6.49 82.00 -271.00 202484.20 15.52 5.40 7.20 98.90 -8.42 -0.68 0.00 0.00 3.04 5.07 1.50 -1.00 0.00 0.00 -4.08 141.80 -272.00 191339.40 14.65 3.20 2.10 47.74 -9.04 -0.66 0.00 0.00 2.22 3.92 2.00 -1.00 0.00 0.00 -5.28 133.00 -273.00 191030.30 14.91 3.40 2.10 51.90 -7.72 -0.13 0.00 0.00 3.20 4.33 2.40 -1.00 0.00 0.00 -3.72 1103.90 -274.00 190656.80 10.26 2.80 2.10 35.59 -9.52 -1.31 0.00 0.00 2.30 3.96 2.00 -1.00 0.00 0.00 -3.57 730.40 -275.00 191698.30 12.45 1.60 2.10 31.07 -9.04 3.29 0.00 0.00 1.41 2.90 1.00 -1.00 0.00 0.00 -7.06 491.90 -276.00 192373.70 12.65 3.10 2.10 47.16 -9.24 -1.29 0.00 0.00 2.95 4.39 2.40 -1.00 0.00 0.00 -3.43 1167.30 -277.00 195864.90 15.54 2.80 2.10 51.50 -9.96 -0.86 0.00 0.00 2.57 3.66 1.70 -1.00 0.00 0.00 -4.83 818.50 -278.00 195302.60 15.05 2.30 2.10 47.34 -10.37 -0.17 0.00 0.00 2.03 3.60 1.70 -1.00 0.00 0.00 -5.94 256.20 -279.00 190495.80 28.49 2.00 2.10 84.18 -7.77 -1.00 0.00 0.00 1.32 3.35 1.40 -1.00 0.00 0.00 -17.28 569.40 -280.00 190215.90 14.27 1.80 2.10 36.31 -8.08 0.08 0.00 0.00 1.47 3.05 1.10 -1.00 0.00 0.00 -7.79 289.50 -281.00 187631.20 12.22 1.60 2.10 27.58 -9.82 -1.08 0.00 0.00 1.30 2.59 1.10 -1.00 0.00 0.00 -7.52 264.80 -282.00 187608.00 13.51 2.70 2.10 44.07 -9.80 2.29 0.00 0.00 2.43 4.27 2.30 -1.00 0.00 0.00 -4.44 241.60 -283.00 187420.10 21.87 2.30 2.10 68.04 -8.60 0.59 0.00 0.00 1.98 3.70 1.80 -1.00 0.00 0.00 -8.82 53.70 -284.00 188016.70 20.62 2.40 2.10 68.07 -8.09 0.24 0.00 0.00 1.42 3.74 1.80 -1.00 0.00 0.00 -11.62 650.30 -285.00 188504.40 14.07 2.60 2.10 42.96 -9.12 0.84 0.00 0.00 1.80 3.52 1.80 -1.00 0.00 0.00 -6.24 1138.00 -286.00 189976.00 12.17 2.70 2.10 35.53 -8.11 -0.23 0.00 0.00 2.50 3.77 1.80 -1.00 0.00 0.00 -3.90 49.60 -287.00 189760.40 15.32 2.30 2.10 46.18 -8.16 -0.17 0.00 0.00 2.11 3.66 1.70 -1.00 0.00 0.00 -5.81 1114.00 -288.00 196227.20 14.11 2.80 2.10 48.03 -8.59 -1.68 0.00 0.00 1.66 3.76 1.80 -1.00 0.00 0.00 -6.82 1180.80 -289.00 196809.50 32.13 2.00 2.10 98.69 -9.56 2.56 0.00 0.00 1.47 3.58 1.60 -1.00 0.00 0.00 -17.48 483.10 -290.00 201200.80 10.83 2.10 2.10 32.17 -10.23 -1.49 0.00 0.00 1.87 3.60 1.60 -1.00 0.00 0.00 -4.63 1034.40 -291.00 200303.30 19.27 1.80 2.10 49.53 -9.24 -0.42 0.00 0.00 1.51 2.99 1.00 -1.00 0.00 0.00 -10.20 136.90 -292.00 200067.70 12.07 2.50 8.10 85.77 -7.82 2.95 0.00 0.00 2.18 7.09 2.10 -1.00 0.00 0.00 -4.42 29.30 -293.00 201410.80 33.08 1.90 5.80 163.63 -9.74 -1.33 0.00 0.00 1.31 4.97 1.20 -1.00 0.00 0.00 -20.24 220.40 -294.00 201983.30 23.28 1.70 2.10 63.42 -9.41 0.48 0.00 0.00 1.28 3.13 1.20 -1.00 0.00 0.00 -14.55 536.90 -295.00 202459.30 16.53 1.20 2.10 37.09 -9.34 0.19 0.00 0.00 0.68 2.25 0.90 -1.00 0.00 0.00 -19.40 1012.90 -296.00 202181.50 16.85 3.20 2.10 60.33 -9.39 -0.82 0.00 0.00 2.39 3.88 1.90 -1.00 0.00 0.00 -5.64 735.10 -297.00 199923.40 20.76 2.90 2.10 72.93 -9.12 -0.29 0.00 0.00 2.06 4.16 2.20 -1.00 0.00 0.00 -8.08 1037.00 -298.00 199846.60 24.82 1.80 2.10 69.28 -9.37 0.53 0.00 0.00 1.45 3.12 1.20 -1.00 0.00 0.00 -13.68 960.20 -299.00 197224.80 16.47 4.20 2.10 59.40 -10.00 -0.37 0.00 0.00 2.76 4.07 2.10 -1.00 0.00 0.00 -4.78 898.40 -300.00 197167.70 20.54 2.40 2.10 57.71 -9.11 0.86 0.00 0.00 1.18 3.05 1.10 -1.00 0.00 0.00 -13.94 841.30 -301.00 198612.60 19.12 1.90 2.10 52.48 -9.34 -0.01 0.00 0.00 1.42 3.27 1.30 -1.00 0.00 0.00 -10.80 1006.20 -302.00 198783.80 20.70 2.40 2.10 65.17 -8.71 1.11 0.00 0.00 1.64 3.48 1.50 -1.00 0.00 0.00 -10.12 1177.40 -303.00 199646.00 15.70 1.40 2.10 36.11 -9.07 2.15 0.00 0.00 1.08 2.68 0.70 -1.00 0.00 0.00 -11.66 759.60 -304.00 199088.30 11.78 2.20 2.10 29.77 -8.92 -0.48 0.00 0.00 1.96 3.52 1.60 -1.00 0.00 0.00 -4.81 201.90 -305.00 217467.20 12.69 2.50 2.10 36.12 -8.73 -0.60 0.00 0.00 2.21 3.54 1.60 -1.00 0.00 0.00 -4.59 660.80 -306.00 248887.20 18.58 2.90 2.10 69.45 -8.10 -2.43 0.00 0.00 2.61 4.26 2.30 -1.00 0.00 0.00 -5.69 80.80 -307.00 319480.40 28.24 3.80 2.10 109.42 -12.30 -2.05 0.00 0.00 3.19 4.58 2.60 -1.00 0.00 0.00 -7.08 274.00 -308.00 319326.50 15.40 1.80 2.10 41.15 -11.83 -1.59 0.00 0.00 1.55 3.11 1.20 -1.00 0.00 0.00 -7.97 120.10 -309.00 318979.90 20.27 2.30 2.10 64.33 -11.51 0.03 0.00 0.00 1.75 3.77 1.80 -1.00 0.00 0.00 -9.25 1053.50 -310.00 319562.70 18.97 1.60 2.10 48.49 -12.33 0.28 0.00 0.00 1.31 2.89 0.90 -1.00 0.00 0.00 -11.56 356.30 -311.00 320106.70 13.83 1.50 2.10 33.42 -11.22 0.78 0.00 0.00 1.23 2.87 1.00 -1.00 0.00 0.00 -9.01 900.30 -312.00 321563.70 20.58 2.60 2.10 68.49 -10.20 -0.55 0.00 0.00 2.20 3.94 2.00 -1.00 0.00 0.00 -7.47 1077.30 -313.00 321222.00 11.07 2.90 2.10 30.97 -11.68 -1.33 0.00 0.00 1.97 3.10 1.10 -1.00 0.00 0.00 -4.50 735.60 -314.00 318530.70 15.29 1.30 2.10 35.45 -11.62 -1.87 0.00 0.00 1.14 2.60 0.60 -1.00 0.00 0.00 -10.72 604.30 -315.00 318236.20 22.30 2.40 2.10 73.42 -11.10 0.00 0.00 0.00 2.08 3.55 1.60 -1.00 0.00 0.00 -8.60 309.80 -316.00 316001.90 15.78 3.20 2.10 52.76 -13.18 -1.39 0.00 0.00 2.43 4.06 2.10 -1.00 0.00 0.00 -5.20 635.50 -317.00 315974.20 14.37 2.00 2.10 37.76 -12.03 -0.93 0.00 0.00 1.64 3.06 1.10 -1.00 0.00 0.00 -7.00 607.80 -318.00 315778.50 14.92 3.30 2.10 44.87 -12.92 -1.38 0.00 0.00 2.36 3.73 1.80 -1.00 0.00 0.00 -5.05 412.10 -319.00 316096.20 12.47 2.80 2.10 37.84 -11.85 -0.58 0.00 0.00 1.83 3.22 1.30 -1.00 0.00 0.00 -5.44 729.80 -320.00 316886.60 18.59 2.20 2.10 57.58 -11.05 1.96 0.00 0.00 1.85 3.50 1.50 -1.00 0.00 0.00 -8.05 240.20 -321.00 317555.90 16.15 2.20 2.10 51.66 -15.50 -3.58 0.00 0.00 1.99 3.56 1.60 -1.00 0.00 0.00 -6.49 909.50 -322.00 317521.60 40.18 5.00 2.10 164.29 -13.94 1.40 0.00 0.00 3.58 3.78 1.80 -1.00 0.00 0.00 -8.98 875.20 -323.00 322024.10 12.16 1.80 2.10 31.19 -11.14 0.80 0.00 0.00 1.33 3.03 1.10 -1.00 0.00 0.00 -7.33 257.70 -324.00 322430.70 11.86 2.00 2.10 36.26 -12.22 2.34 0.00 0.00 1.70 3.50 1.60 -1.00 0.00 0.00 -5.60 664.30 -325.00 328877.60 21.00 2.00 2.10 58.06 -10.75 0.50 0.00 0.00 1.60 3.25 1.30 -1.00 0.00 0.00 -10.50 711.20 -326.00 328626.70 17.77 3.80 2.10 72.09 -10.53 -0.36 0.00 0.00 3.07 4.81 2.90 -1.00 0.00 0.00 -4.64 460.30 -327.00 327956.70 17.69 2.30 2.10 54.00 -10.67 0.08 0.00 0.00 1.82 3.36 1.90 -1.00 0.00 0.00 -7.76 1070.30 -328.00 329356.70 21.62 4.10 2.10 91.37 -11.04 -0.18 0.00 0.00 3.07 4.67 2.70 -1.00 0.00 0.00 -5.63 1190.30 -329.00 329557.10 17.94 2.30 2.10 54.36 -11.71 1.38 0.00 0.00 1.68 3.65 1.70 -1.00 0.00 0.00 -8.54 110.70 -330.00 331535.80 23.35 2.70 2.10 77.70 -10.51 0.09 0.00 0.00 1.50 3.87 1.90 -1.00 0.00 0.00 -12.44 809.40 -331.00 330231.40 13.56 2.30 2.10 43.63 -10.13 -1.87 0.00 0.00 1.17 3.74 1.80 -1.00 0.00 0.00 -9.28 785.00 -332.00 327864.00 11.21 3.20 2.10 39.87 -10.57 -1.18 0.00 0.00 2.98 4.35 2.40 -1.00 0.00 0.00 -3.01 977.60 -333.00 327428.90 15.37 2.60 2.10 43.39 -11.37 -1.79 0.00 0.00 1.83 3.39 1.40 -1.00 0.00 0.00 -6.72 542.50 -334.00 323177.30 13.54 1.20 2.10 32.69 -11.77 -0.39 0.00 0.00 0.86 2.69 0.70 -1.00 0.00 0.00 -12.53 130.90 -335.00 322858.60 15.09 1.40 2.10 38.25 -10.57 -0.82 0.00 0.00 1.08 2.88 0.90 -1.00 0.00 0.00 -11.18 1092.20 -336.00 322683.40 16.76 3.40 2.10 63.09 -10.52 -1.37 0.00 0.00 2.79 4.46 2.50 -1.00 0.00 0.00 -4.80 917.00 -337.00 325951.90 18.17 2.60 2.10 52.21 -10.91 1.01 0.00 0.00 1.50 3.10 1.10 -1.00 0.00 0.00 -9.69 345.50 -338.00 326446.60 29.06 2.50 2.10 101.18 -12.13 1.19 0.00 0.00 1.20 3.84 1.90 -1.00 0.00 0.00 -19.33 840.20 -339.00 326656.50 11.66 4.40 2.10 50.65 -11.93 1.57 0.00 0.00 4.24 4.89 3.40 -1.00 0.00 0.00 -2.20 1050.10 -340.00 326609.30 12.67 1.70 2.10 33.76 -11.00 -0.21 0.00 0.00 1.47 2.87 0.90 -1.00 0.00 0.00 -6.92 1002.90 -341.00 315532.30 11.85 2.80 2.10 32.85 -13.42 -2.37 0.00 0.00 2.41 2.88 1.50 -1.00 0.00 0.00 -3.93 165.90 -342.00 315418.60 10.54 1.60 2.10 23.74 -13.56 -0.10 0.00 0.00 1.31 2.63 0.70 -1.00 0.00 0.00 -6.45 52.20 -343.00 302257.00 22.08 1.90 2.10 64.90 -12.92 -1.52 0.00 0.00 1.48 3.27 1.30 -1.00 0.00 0.00 -11.94 970.60 -344.00 302184.00 17.18 2.90 2.10 55.08 -8.92 -0.30 0.00 0.00 1.79 3.55 1.60 -1.00 0.00 0.00 -7.66 897.60 -345.00 302102.00 11.99 3.20 2.10 40.36 -12.16 1.44 0.00 0.00 2.97 3.81 2.10 -1.00 0.00 0.00 -3.23 815.60 -346.00 302489.60 26.08 1.50 2.10 63.86 -10.75 2.41 0.00 0.00 1.14 2.73 0.80 -1.00 0.00 0.00 -18.29 1203.20 -347.00 302719.50 14.02 1.60 2.10 31.52 -10.24 -0.27 0.00 0.00 0.79 2.53 0.60 -1.00 0.00 0.00 -14.24 153.10 -348.00 305304.60 23.30 2.70 2.10 74.67 -10.26 -2.42 0.00 0.00 2.02 3.58 1.60 -1.00 0.00 0.00 -9.24 178.20 -349.00 304613.40 20.21 1.80 2.10 59.39 -11.26 -0.56 0.00 0.00 1.49 3.28 1.30 -1.00 0.00 0.00 -10.89 767.00 -350.00 301777.80 16.01 2.40 2.10 53.76 -9.52 -0.07 0.00 0.00 1.69 3.74 1.80 -1.00 0.00 0.00 -7.60 491.40 -351.00 301296.30 23.37 2.50 2.10 83.18 -11.88 -0.60 0.00 0.00 1.98 4.04 2.10 -1.00 0.00 0.00 -9.45 9.90 -352.00 299761.40 17.18 3.60 2.10 62.10 -11.19 0.96 0.00 0.00 3.00 4.14 2.20 -1.00 0.00 0.00 -4.58 1035.00 -353.00 299556.30 11.61 1.70 2.10 29.83 -14.97 -1.35 0.00 0.00 1.37 3.09 1.10 -1.00 0.00 0.00 -6.80 829.90 -354.00 299538.80 26.05 2.40 2.10 80.85 -10.61 1.29 0.00 0.00 1.78 3.57 1.60 -1.00 0.00 0.00 -11.70 812.40 -355.00 299847.10 18.97 1.90 2.10 51.79 -12.41 -0.55 0.00 0.00 1.64 3.30 1.30 -1.00 0.00 0.00 -9.25 1120.70 -356.00 300115.10 19.18 3.60 2.10 70.02 -10.46 -2.43 0.00 0.00 2.72 3.91 2.00 -1.00 0.00 0.00 -5.65 108.70 -357.00 300408.30 15.37 2.50 2.10 52.63 -10.57 -0.89 0.00 0.00 1.34 3.79 1.80 -1.00 0.00 0.00 -9.17 401.90 -358.00 300313.80 29.90 3.60 2.10 109.97 -11.24 0.08 0.00 0.00 2.25 3.89 1.90 -1.00 0.00 0.00 -10.63 307.40 -359.00 305328.90 12.45 2.00 2.10 30.04 -10.58 -0.23 0.00 0.00 1.73 3.00 1.20 -1.00 0.00 0.00 -5.75 202.50 -360.00 305372.60 19.82 1.90 2.10 59.21 -12.09 0.05 0.00 0.00 1.50 3.44 1.50 -1.00 0.00 0.00 -10.60 246.20 -361.00 310538.10 25.43 4.10 2.10 107.60 -11.43 -1.40 0.00 0.00 2.45 4.25 2.30 -1.00 0.00 0.00 -8.29 291.70 -362.00 309736.90 11.15 2.20 2.10 27.86 -10.33 0.49 0.00 0.00 2.01 2.71 1.20 -1.00 0.00 0.00 -4.45 770.50 -363.00 309126.10 19.53 2.10 2.10 58.43 -10.37 -1.23 0.00 0.00 1.91 3.49 1.50 -1.00 0.00 0.00 -8.18 159.70 -364.00 311201.00 19.00 2.40 2.10 54.07 -12.38 -0.56 0.00 0.00 1.89 3.55 1.60 -1.00 0.00 0.00 -8.05 954.60 -365.00 311665.50 12.97 2.90 2.10 39.64 -10.84 2.06 0.00 0.00 2.05 3.78 1.80 -1.00 0.00 0.00 -5.06 139.10 -366.00 314722.60 12.19 4.10 2.10 50.73 -10.98 2.08 0.00 0.00 3.66 4.84 3.50 -1.00 0.00 0.00 -2.66 636.20 -367.00 311934.90 11.20 3.40 2.10 35.88 -10.22 2.25 0.00 0.00 1.87 3.64 1.70 -1.00 0.00 0.00 -4.80 408.50 -368.00 308582.90 14.23 1.80 2.10 39.16 -11.13 0.50 0.00 0.00 1.22 3.07 1.10 -1.00 0.00 0.00 -9.35 896.50 -369.00 308582.60 14.47 1.50 2.10 36.36 -11.03 1.54 0.00 0.00 1.23 2.77 0.80 -1.00 0.00 0.00 -9.42 896.20 -370.00 307445.50 18.35 2.40 2.10 60.63 -11.37 -0.57 0.00 0.00 1.78 3.73 1.80 -1.00 0.00 0.00 -8.24 1039.10 -371.00 306918.50 20.83 2.20 2.10 65.25 -10.52 0.73 0.00 0.00 2.03 3.58 1.60 -1.00 0.00 0.00 -8.19 512.10 -372.00 306564.60 19.19 1.50 2.10 48.45 -11.37 -0.23 0.00 0.00 1.29 2.93 1.00 -1.00 0.00 0.00 -11.88 158.20 -373.00 307713.90 17.91 3.20 2.10 67.22 -11.84 0.14 0.00 0.00 2.10 4.35 2.40 -1.00 0.00 0.00 -6.82 27.50 -374.00 307757.40 14.96 2.70 2.10 42.00 -12.52 1.95 0.00 0.00 2.39 3.14 2.10 -1.00 0.00 0.00 -5.01 71.00 -375.00 308383.40 14.79 3.30 2.10 53.96 -10.05 0.22 0.00 0.00 3.13 4.25 2.70 -1.00 0.00 0.00 -3.78 697.00 -376.00 307978.90 19.91 3.40 2.10 79.28 -10.69 -0.43 0.00 0.00 3.06 4.48 2.50 -1.00 0.00 0.00 -5.20 292.50 -377.00 332147.80 23.07 2.30 2.10 69.83 -11.01 -0.12 0.00 0.00 1.91 3.51 1.60 -1.00 0.00 0.00 -9.68 141.40 -378.00 332312.90 15.67 1.90 2.10 43.54 -11.80 -1.27 0.00 0.00 1.32 3.18 1.20 -1.00 0.00 0.00 -9.47 306.50 -379.00 356131.20 17.19 1.60 2.10 44.96 -12.63 -1.45 0.00 0.00 1.36 2.79 0.80 -1.00 0.00 0.00 -10.13 1084.80 -380.00 355051.20 10.72 2.80 2.10 33.22 -14.44 1.48 0.00 0.00 2.61 3.45 1.70 -1.00 0.00 0.00 -3.29 4.80 -381.00 354985.30 20.05 3.20 2.10 72.43 -15.13 -1.20 0.00 0.00 2.35 4.19 2.20 -1.00 0.00 0.00 -6.82 1218.90 -382.00 357010.20 25.19 3.20 2.10 100.72 -12.02 -0.60 0.00 0.00 1.36 4.52 2.60 -1.00 0.00 0.00 -14.87 683.80 -383.00 357939.30 11.54 3.60 2.10 44.66 -10.81 0.59 0.00 0.00 3.36 4.16 3.00 -1.00 0.00 0.00 -2.75 332.90 -384.00 359970.60 13.84 1.70 2.10 34.79 -11.51 0.66 0.00 0.00 1.42 3.08 1.10 -1.00 0.00 0.00 -7.80 1084.20 -385.00 359794.20 16.63 1.50 2.10 46.97 -13.24 1.18 0.00 0.00 1.04 3.17 1.20 -1.00 0.00 0.00 -12.80 907.80 -386.00 354875.40 13.96 2.00 2.10 38.88 -15.82 -0.78 0.00 0.00 1.76 3.25 1.30 -1.00 0.00 0.00 -6.33 1109.00 -387.00 354774.90 10.03 2.70 2.10 30.33 -14.45 0.32 0.00 0.00 2.40 3.10 1.90 -1.00 0.00 0.00 -3.34 1008.50 -388.00 351110.10 13.16 2.40 2.10 43.36 -14.46 -0.21 0.00 0.00 2.19 3.77 1.80 -1.00 0.00 0.00 -4.80 1183.70 -389.00 350683.20 23.33 2.70 2.10 62.32 -12.87 -0.43 0.00 0.00 1.25 2.97 1.00 -1.00 0.00 0.00 -14.97 756.80 -390.00 350202.00 10.78 1.90 2.10 27.81 -15.38 -0.78 0.00 0.00 1.57 2.59 1.50 -1.00 0.00 0.00 -5.49 275.60 -391.00 352186.60 12.57 1.80 2.10 32.11 -12.47 0.44 0.00 0.00 1.62 3.14 1.20 -1.00 0.00 0.00 -6.22 980.20 -392.00 352277.60 10.30 1.30 2.10 23.64 -11.88 -1.28 0.00 0.00 1.06 2.39 0.40 -1.00 0.00 0.00 -7.74 1071.20 -393.00 353200.90 15.98 2.50 2.10 49.61 -13.82 -2.11 0.00 0.00 2.25 3.65 1.70 -1.00 0.00 0.00 -5.69 714.50 -394.00 352986.40 19.90 2.40 2.10 61.43 -10.75 1.39 0.00 0.00 2.19 3.81 1.90 -1.00 0.00 0.00 -7.28 500.00 -395.00 360008.90 10.39 1.80 2.10 24.80 -12.15 -1.29 0.00 0.00 1.60 2.68 0.70 -1.00 0.00 0.00 -5.18 1122.50 -396.00 361609.40 14.28 3.00 4.10 64.84 -13.79 1.46 0.00 0.00 2.26 4.53 2.00 -1.00 0.00 0.00 -5.05 111.80 -397.00 368457.60 14.55 2.80 2.10 46.47 -12.67 0.68 0.00 0.00 2.41 4.00 2.00 -1.00 0.00 0.00 -4.83 611.20 -398.00 368297.00 12.59 2.70 2.10 40.29 -11.62 0.82 0.00 0.00 1.75 3.60 1.60 -1.00 0.00 0.00 -5.76 450.60 -399.00 368083.30 11.79 2.80 2.10 36.17 -12.93 -0.77 0.00 0.00 2.53 3.64 2.00 -1.00 0.00 0.00 -3.72 236.90 -400.00 368713.90 10.72 1.70 2.10 25.64 -12.19 -0.80 0.00 0.00 1.50 2.99 1.00 -1.00 0.00 0.00 -5.73 867.50 -401.00 369509.40 10.32 1.70 2.10 27.66 -11.12 -0.17 0.00 0.00 1.23 3.12 1.20 -1.00 0.00 0.00 -6.70 383.00 -402.00 373491.80 14.18 3.60 2.10 45.36 -11.46 1.23 0.00 0.00 2.23 3.35 1.40 -1.00 0.00 0.00 -5.09 525.40 -403.00 371438.90 12.20 2.40 2.10 42.00 -11.03 -0.71 0.00 0.00 2.16 3.79 1.80 -1.00 0.00 0.00 -4.51 1032.50 -404.00 367912.80 12.50 3.20 2.10 41.36 -12.19 0.86 0.00 0.00 3.04 3.66 2.20 -1.00 0.00 0.00 -3.29 66.40 -405.00 366765.80 11.75 2.20 2.10 30.18 -11.74 0.71 0.00 0.00 1.68 2.89 0.90 -1.00 0.00 0.00 -5.58 199.40 -406.00 364910.50 17.44 2.40 2.10 54.18 -13.25 -2.12 0.00 0.00 2.10 3.82 1.90 -1.00 0.00 0.00 -6.64 904.10 -407.00 363803.60 10.55 2.00 2.10 25.10 -11.57 0.20 0.00 0.00 1.81 3.17 1.50 -1.00 0.00 0.00 -4.67 1077.20 -408.00 362718.80 12.76 2.80 2.10 46.08 -12.40 -0.85 0.00 0.00 2.53 4.18 2.20 -1.00 0.00 0.00 -4.03 1272.40 -409.00 365447.80 16.02 1.90 2.10 47.93 -11.98 0.25 0.00 0.00 1.75 3.35 1.40 -1.00 0.00 0.00 -7.32 161.40 -410.00 365865.60 11.69 3.50 2.10 38.01 -13.08 1.46 0.00 0.00 3.03 3.48 1.50 -1.00 0.00 0.00 -3.08 579.20 -411.00 366664.10 10.07 1.80 2.10 23.01 -11.68 -1.18 0.00 0.00 0.90 2.52 0.60 -1.00 0.00 0.00 -8.93 97.70 -412.00 366185.90 15.37 2.90 2.10 56.49 -11.06 -0.89 0.00 0.00 2.66 4.54 2.60 -1.00 0.00 0.00 -4.62 899.50 -413.00 349786.90 16.41 1.90 2.10 40.13 -12.70 1.49 0.00 0.00 1.37 2.84 0.90 -1.00 0.00 0.00 -9.60 1140.50 -414.00 349667.00 18.60 2.90 2.10 72.06 -13.67 -1.01 0.00 0.00 2.44 4.37 2.40 -1.00 0.00 0.00 -6.11 1020.60 -415.00 338513.00 21.83 4.00 2.10 77.09 -10.66 0.13 0.00 0.00 2.55 3.88 1.90 -1.00 0.00 0.00 -6.83 106.60 -416.00 337414.60 11.76 3.30 2.10 39.37 -10.96 0.33 0.00 0.00 2.21 3.89 1.90 -1.00 0.00 0.00 -4.25 288.20 -417.00 335887.80 10.00 2.00 2.10 23.37 -11.47 0.98 0.00 0.00 1.04 2.42 0.60 -1.00 0.00 0.00 -7.67 41.40 -418.00 339025.10 17.91 2.40 2.10 53.13 -11.13 -0.61 0.00 0.00 1.59 3.43 1.50 -1.00 0.00 0.00 -9.04 618.70 -419.00 339404.00 16.46 1.90 2.10 41.51 -12.45 0.66 0.00 0.00 1.41 2.91 1.20 -1.00 0.00 0.00 -9.32 997.60 -420.00 341503.60 23.43 2.30 2.10 74.97 -9.85 -1.57 0.00 0.00 2.14 3.77 1.80 -1.00 0.00 0.00 -8.76 537.20 -421.00 339470.60 15.80 1.40 2.10 37.52 -13.15 -0.90 0.00 0.00 1.06 2.68 0.70 -1.00 0.00 0.00 -11.91 1064.20 -422.00 335510.30 11.86 3.00 2.10 36.76 -10.94 0.09 0.00 0.00 2.77 4.01 2.60 -1.00 0.00 0.00 -3.42 943.90 -423.00 335291.30 10.26 2.30 2.10 27.82 -11.76 0.77 0.00 0.00 1.47 2.70 0.70 -1.00 0.00 0.00 -5.59 724.90 -424.00 334253.50 11.59 1.80 2.10 29.81 -11.03 0.26 0.00 0.00 1.50 3.40 1.50 -1.00 0.00 0.00 -6.17 967.10 -425.00 332501.50 14.59 1.80 2.10 37.99 -12.13 -0.72 0.00 0.00 1.62 3.18 1.20 -1.00 0.00 0.00 -7.21 495.10 -426.00 332345.00 21.47 2.30 2.10 65.85 -13.04 -1.64 0.00 0.00 1.37 3.65 1.70 -1.00 0.00 0.00 -12.56 338.60 -427.00 334452.20 10.64 1.80 2.10 28.03 -12.58 -0.20 0.00 0.00 1.57 3.08 1.10 -1.00 0.00 0.00 -5.44 1165.80 -428.00 334716.80 16.02 1.80 2.10 44.78 -12.96 0.15 0.00 0.00 1.51 3.21 1.30 -1.00 0.00 0.00 -8.49 150.40 -429.00 335137.20 12.59 1.40 2.10 28.94 -13.69 -2.07 0.00 0.00 1.14 2.72 1.10 -1.00 0.00 0.00 -8.81 570.80 -430.00 335076.90 25.55 3.40 2.10 82.28 -12.46 -1.38 0.00 0.00 1.96 3.58 1.60 -1.00 0.00 0.00 -10.41 510.50 -431.00 344156.90 10.36 1.70 2.10 19.57 -11.16 0.96 0.00 0.00 1.56 1.08 0.90 -1.00 0.00 0.00 -5.31 630.50 -432.00 344729.00 14.65 2.80 2.10 45.58 -12.00 0.48 0.00 0.00 1.64 3.45 1.80 -1.00 0.00 0.00 -7.16 1202.60 -433.00 348417.10 25.10 3.00 2.10 90.40 -11.96 0.71 0.00 0.00 2.60 4.15 2.20 -1.00 0.00 0.00 -7.73 1050.70 -434.00 348144.30 18.20 2.30 2.10 55.89 -12.62 0.29 0.00 0.00 1.85 3.48 1.50 -1.00 0.00 0.00 -7.87 777.90 -435.00 347028.30 12.13 2.60 2.10 35.23 -14.14 2.30 0.00 0.00 2.47 3.51 2.00 -1.00 0.00 0.00 -3.93 941.90 -436.00 348549.20 18.16 1.40 2.10 45.11 -11.90 0.28 0.00 0.00 1.04 2.90 1.00 -1.00 0.00 0.00 -13.94 1182.80 -437.00 349164.90 14.66 2.80 2.10 43.93 -11.45 0.08 0.00 0.00 2.29 3.09 1.80 -1.00 0.00 0.00 -5.11 518.50 -438.00 349546.60 13.70 3.70 2.10 60.27 -12.15 0.25 0.00 0.00 3.36 4.89 2.90 -1.00 0.00 0.00 -3.26 900.20 -439.00 349447.70 14.33 2.30 2.10 35.76 -13.22 0.93 0.00 0.00 1.09 2.88 0.90 -1.00 0.00 0.00 -10.53 801.30 -440.00 346979.80 13.07 2.90 2.10 46.17 -11.58 -0.42 0.00 0.00 2.52 3.95 2.00 -1.00 0.00 0.00 -4.15 893.40 -441.00 346962.80 11.74 3.30 2.10 43.84 -10.25 -0.51 0.00 0.00 3.05 3.09 2.20 -1.00 0.00 0.00 -3.08 876.40 -442.00 345332.50 18.37 2.30 2.10 53.18 -12.34 1.85 0.00 0.00 1.85 3.26 1.30 -1.00 0.00 0.00 -7.94 526.10 -443.00 344971.30 22.32 2.40 2.10 67.05 -12.02 0.49 0.00 0.00 1.72 3.59 1.60 -1.00 0.00 0.00 -10.37 164.90 -444.00 344860.30 24.42 2.70 2.10 83.50 -10.68 0.23 0.00 0.00 1.94 3.70 1.70 -1.00 0.00 0.00 -10.07 53.90 -445.00 345639.40 12.20 1.50 2.10 28.91 -11.57 -1.23 0.00 0.00 1.09 2.94 1.00 -1.00 0.00 0.00 -8.98 833.00 -446.00 345861.20 20.29 2.80 2.10 61.96 -12.58 0.88 0.00 0.00 1.52 3.53 1.60 -1.00 0.00 0.00 -10.65 1054.80 -447.00 346259.10 17.34 2.80 2.10 60.34 -12.76 0.33 0.00 0.00 1.30 4.00 2.20 -1.00 0.00 0.00 -10.69 172.70 -448.00 346001.50 11.22 3.70 2.10 45.06 -12.54 -1.33 0.00 0.00 3.18 4.87 2.90 -1.00 0.00 0.00 -2.83 1195.10 -449.00 298676.10 16.71 4.00 2.10 68.00 -9.99 0.02 0.00 0.00 2.62 4.75 2.80 -1.00 0.00 0.00 -5.10 1229.70 -450.00 297821.00 14.90 3.40 2.10 57.54 -8.95 2.47 0.00 0.00 2.91 4.47 2.50 -1.00 0.00 0.00 -4.10 374.60 -451.00 260414.60 18.63 2.10 2.10 56.99 -7.68 0.29 0.00 0.00 1.82 3.43 1.50 -1.00 0.00 0.00 -8.17 88.20 -452.00 259941.30 20.80 2.30 2.10 63.60 -8.55 -0.88 0.00 0.00 1.40 3.48 1.50 -1.00 0.00 0.00 -11.91 894.90 -453.00 259844.60 10.31 2.80 2.10 34.25 -7.50 -1.10 0.00 0.00 2.63 3.52 2.20 -1.00 0.00 0.00 -3.13 798.20 -454.00 260549.50 17.04 2.20 2.10 52.69 -7.71 -1.08 0.00 0.00 1.69 3.34 1.40 -1.00 0.00 0.00 -8.04 223.10 -455.00 261143.90 10.93 1.10 2.10 22.89 -7.39 -0.47 0.00 0.00 0.89 2.25 0.30 -1.00 0.00 0.00 -9.84 817.50 -456.00 261991.20 16.70 4.70 2.10 59.31 -8.46 -2.05 0.00 0.00 1.72 3.84 1.90 -1.00 0.00 0.00 -7.77 384.80 -457.00 261178.60 26.85 2.80 2.10 87.39 -8.50 2.30 0.00 0.00 2.43 3.91 2.00 -1.00 0.00 0.00 -8.85 852.20 -458.00 259385.60 17.09 1.80 2.10 45.48 -7.43 -0.85 0.00 0.00 1.46 3.07 1.10 -1.00 0.00 0.00 -9.39 339.20 -459.00 258473.40 15.06 1.90 2.10 38.51 -9.41 0.67 0.00 0.00 1.72 2.87 1.30 -1.00 0.00 0.00 -7.01 707.00 -460.00 257092.40 17.29 3.10 2.10 56.12 -8.76 1.66 0.00 0.00 2.56 4.22 2.30 -1.00 0.00 0.00 -5.40 606.00 -461.00 257032.90 15.33 1.50 2.10 38.51 -7.78 -0.56 0.00 0.00 1.38 2.68 0.70 -1.00 0.00 0.00 -8.88 546.50 -462.00 256806.80 20.75 2.50 2.10 69.44 -10.65 1.24 0.00 0.00 2.05 3.84 1.90 -1.00 0.00 0.00 -8.11 320.40 -463.00 257112.20 16.51 2.30 2.10 45.89 -9.94 -1.32 0.00 0.00 1.65 3.35 1.40 -1.00 0.00 0.00 -8.00 625.80 -464.00 257291.40 16.68 3.00 2.10 55.89 -7.37 0.18 0.00 0.00 2.38 3.84 1.90 -1.00 0.00 0.00 -5.60 805.00 -465.00 258453.30 25.57 1.80 2.10 71.16 -7.15 1.62 0.00 0.00 1.36 3.25 1.30 -1.00 0.00 0.00 -15.08 686.90 -466.00 258066.90 19.49 3.90 2.10 92.77 -9.43 -0.37 0.00 0.00 3.27 5.31 3.40 -1.00 0.00 0.00 -4.77 300.50 -467.00 263003.40 17.26 2.30 2.10 52.14 -7.32 -0.62 0.00 0.00 1.76 3.47 1.50 -1.00 0.00 0.00 -7.85 117.00 -468.00 263172.00 20.14 1.80 2.10 56.15 -8.84 1.67 0.00 0.00 1.46 3.13 1.20 -1.00 0.00 0.00 -11.03 285.60 -469.00 267614.20 10.79 3.90 2.10 37.91 -9.70 0.51 0.00 0.00 2.64 3.26 2.60 -1.00 0.00 0.00 -3.27 887.80 -470.00 267521.40 17.36 1.50 2.10 44.33 -10.44 0.45 0.00 0.00 1.20 2.80 0.80 -1.00 0.00 0.00 -11.61 795.00 -471.00 267505.50 11.05 2.30 2.10 27.54 -10.23 0.10 0.00 0.00 2.17 2.05 1.30 -1.00 0.00 0.00 -4.08 779.10 -472.00 267893.20 24.13 2.20 2.10 81.82 -7.99 -2.02 0.00 0.00 1.35 3.68 1.70 -1.00 0.00 0.00 -14.34 1166.80 -473.00 268278.80 13.61 2.10 2.10 34.49 -9.49 0.48 0.00 0.00 1.90 3.34 1.40 -1.00 0.00 0.00 -5.73 272.40 -474.00 269556.60 10.01 2.20 2.10 27.34 -10.52 0.12 0.00 0.00 1.81 3.12 1.20 -1.00 0.00 0.00 -4.43 270.20 -475.00 268436.80 20.82 2.80 2.10 56.02 -8.34 0.83 0.00 0.00 1.51 2.97 1.00 -1.00 0.00 0.00 -11.00 430.40 -476.00 267037.70 27.75 4.70 2.10 116.11 -8.10 1.50 0.00 0.00 3.08 4.87 2.90 -1.00 0.00 0.00 -7.22 311.30 -477.00 266626.90 18.40 3.20 2.10 69.37 -7.28 2.38 0.00 0.00 2.87 4.72 2.80 -1.00 0.00 0.00 -5.13 1180.50 -478.00 263862.30 12.35 1.70 2.10 31.57 -8.93 1.57 0.00 0.00 1.57 2.93 1.00 -1.00 0.00 0.00 -6.28 975.90 -479.00 263695.90 17.14 2.60 2.10 61.28 -8.27 -0.22 0.00 0.00 1.47 3.96 2.00 -1.00 0.00 0.00 -9.34 809.50 -480.00 263246.20 11.41 2.30 2.10 28.72 -8.83 -1.72 0.00 0.00 2.16 2.04 1.60 -1.00 0.00 0.00 -4.23 359.80 -481.00 264152.60 12.75 2.30 2.10 40.18 -7.65 -0.90 0.00 0.00 2.12 3.67 1.90 -1.00 0.00 0.00 -4.81 1266.20 -482.00 264690.30 20.33 1.50 2.10 53.82 -8.37 -0.55 0.00 0.00 1.27 2.88 0.90 -1.00 0.00 0.00 -12.76 523.90 -483.00 266405.10 15.04 1.90 2.10 39.64 -7.31 -0.31 0.00 0.00 1.35 3.18 1.20 -1.00 0.00 0.00 -8.92 958.70 -484.00 265641.70 11.42 1.90 2.10 28.23 -7.96 -1.64 0.00 0.00 1.71 2.02 1.40 -1.00 0.00 0.00 -5.33 195.30 -485.00 256731.40 13.33 2.90 2.10 39.66 -7.18 -0.43 0.00 0.00 2.49 2.94 1.90 -1.00 0.00 0.00 -4.28 245.00 -486.00 256560.50 12.38 1.00 2.10 26.06 -7.48 0.71 0.00 0.00 0.63 2.64 0.70 -1.00 0.00 0.00 -15.64 74.10 -487.00 249111.60 12.06 2.20 2.10 31.64 -6.65 0.20 0.00 0.00 1.78 3.21 1.30 -1.00 0.00 0.00 -5.41 305.20 -488.00 248931.80 16.35 2.00 2.10 45.69 -9.92 0.03 0.00 0.00 1.42 3.30 1.40 -1.00 0.00 0.00 -9.21 125.40 -489.00 248913.20 16.12 1.80 2.10 45.99 -9.55 -0.36 0.00 0.00 1.59 3.28 1.30 -1.00 0.00 0.00 -8.13 106.80 -490.00 249203.60 10.62 2.90 2.10 31.50 -8.60 -1.44 0.00 0.00 2.32 3.61 2.10 -1.00 0.00 0.00 -3.66 397.20 -491.00 249715.50 22.38 2.80 2.10 78.73 -8.75 1.03 0.00 0.00 2.22 4.02 2.10 -1.00 0.00 0.00 -8.05 909.10 -492.00 250275.20 16.38 3.00 2.10 62.37 -10.86 -1.80 0.00 0.00 2.72 4.20 2.20 -1.00 0.00 0.00 -4.82 188.80 -493.00 249783.80 20.66 1.70 2.10 56.63 -8.80 0.24 0.00 0.00 1.21 3.08 1.10 -1.00 0.00 0.00 -13.61 977.40 -494.00 155912.70 14.38 1.40 2.10 33.23 -8.33 0.50 0.00 0.00 1.20 2.76 0.80 -1.00 0.00 0.00 -9.61 546.30 -495.00 248787.50 22.97 2.90 2.10 86.22 -8.08 -1.26 0.00 0.00 2.48 4.41 2.50 -1.00 0.00 0.00 -7.40 1261.10 -496.00 247844.30 13.12 2.70 2.10 41.09 -8.31 -0.52 0.00 0.00 2.13 3.49 1.50 -1.00 0.00 0.00 -4.93 317.90 -497.00 247615.80 11.22 1.70 2.10 26.72 -10.47 -1.43 0.00 0.00 1.51 2.69 1.30 -1.00 0.00 0.00 -5.92 89.40 -498.00 247269.90 22.50 2.90 2.10 81.75 -10.14 -0.46 0.00 0.00 1.96 3.97 2.00 -1.00 0.00 0.00 -9.18 1023.50 -499.00 247937.60 22.63 1.70 2.10 62.90 -10.16 1.18 0.00 0.00 1.25 3.21 1.30 -1.00 0.00 0.00 -14.46 411.20 -500.00 248229.90 18.27 3.10 2.10 69.35 -9.50 -1.20 0.00 0.00 2.46 4.24 2.30 -1.00 0.00 0.00 -5.95 703.50 -501.00 248591.80 19.17 2.50 2.10 55.12 -10.08 -0.19 0.00 0.00 1.77 3.40 1.40 -1.00 0.00 0.00 -8.69 1065.40 -502.00 248541.10 26.31 2.00 6.20 137.89 -7.91 -0.01 0.00 0.00 1.73 5.31 1.50 -1.00 0.00 0.00 -12.18 67.50 -503.00 250420.70 18.59 1.50 2.10 47.32 -6.63 0.24 0.00 0.00 1.32 2.72 0.80 -1.00 0.00 0.00 -11.23 334.30 -504.00 251066.10 18.03 2.00 2.10 56.90 -8.10 1.07 0.00 0.00 1.70 3.53 1.60 -1.00 0.00 0.00 -8.48 979.70 -505.00 255517.10 19.78 1.50 2.10 50.10 -9.70 -0.99 0.00 0.00 1.28 2.81 0.90 -1.00 0.00 0.00 -12.37 310.70 -506.00 255390.70 16.18 2.30 2.10 50.40 -9.55 -0.46 0.00 0.00 1.47 3.70 1.80 -1.00 0.00 0.00 -8.83 184.30 -507.00 255332.10 19.41 1.90 2.10 54.07 -11.25 -1.04 0.00 0.00 1.68 3.30 1.30 -1.00 0.00 0.00 -9.25 125.70 -508.00 255570.40 13.72 1.40 2.10 34.04 -9.48 -1.52 0.00 0.00 0.98 2.70 0.70 -1.00 0.00 0.00 -11.20 364.00 -509.00 255635.40 20.01 2.60 2.10 65.19 -11.85 -0.82 0.00 0.00 1.83 3.88 1.90 -1.00 0.00 0.00 -8.72 429.00 -510.00 256200.80 10.19 3.00 2.10 33.53 -9.11 -2.29 0.00 0.00 2.63 4.05 2.10 -1.00 0.00 0.00 -3.10 994.40 -511.00 256041.30 20.66 2.10 2.10 59.49 -9.86 0.75 0.00 0.00 1.39 3.36 1.40 -1.00 0.00 0.00 -11.87 834.90 -512.00 255154.20 26.53 4.30 2.10 98.04 -9.19 -1.69 0.00 0.00 3.98 3.14 1.20 -1.00 0.00 0.00 -5.33 1227.80 -513.00 254643.40 13.88 1.60 2.10 33.79 -9.57 -1.14 0.00 0.00 1.31 3.04 1.10 -1.00 0.00 0.00 -8.49 717.00 -514.00 252484.70 12.69 6.50 2.50 56.06 -8.65 -0.33 0.00 0.00 4.58 3.79 2.20 -1.00 0.00 0.00 -2.22 171.10 -515.00 251773.50 20.04 2.30 2.10 61.70 -9.04 -0.40 0.00 0.00 1.93 3.76 1.80 -1.00 0.00 0.00 -8.33 407.10 -516.00 251653.60 18.94 2.70 2.10 52.65 -8.21 0.59 0.00 0.00 1.50 3.08 1.10 -1.00 0.00 0.00 -10.10 287.20 -517.00 252621.60 19.78 2.00 6.00 95.87 -7.55 -0.85 0.00 0.00 1.65 4.41 1.30 -1.00 0.00 0.00 -9.59 308.00 -518.00 253307.80 10.74 1.00 2.10 20.12 -8.12 0.55 0.00 0.00 0.79 2.05 0.40 -1.00 0.00 0.00 -10.86 661.40 -519.00 254283.90 23.65 2.40 2.10 79.82 -8.40 -1.25 0.00 0.00 1.47 3.76 1.80 -1.00 0.00 0.00 -12.88 357.50 -520.00 253785.40 17.62 5.30 2.10 59.29 -8.81 0.05 0.00 0.00 2.47 3.63 1.70 -1.00 0.00 0.00 -5.70 1139.00 -521.00 269659.00 10.87 2.20 2.10 30.20 -9.74 0.28 0.00 0.00 2.01 3.23 1.90 -1.00 0.00 0.00 -4.33 372.60 -522.00 269848.20 11.52 2.40 2.10 33.25 -8.95 -0.79 0.00 0.00 2.28 3.67 1.70 -1.00 0.00 0.00 -4.05 561.80 -523.00 286049.40 17.93 2.80 2.10 59.41 -8.22 0.64 0.00 0.00 1.99 3.63 1.70 -1.00 0.00 0.00 -7.23 123.00 -524.00 285814.70 24.13 2.60 2.10 73.98 -8.94 -0.24 0.00 0.00 1.81 3.45 1.50 -1.00 0.00 0.00 -10.64 1168.30 -525.00 285659.00 20.04 4.60 2.10 86.73 -8.05 -0.01 0.00 0.00 2.62 4.81 2.90 -1.00 0.00 0.00 -6.12 1012.60 -526.00 286235.60 17.36 2.90 2.10 66.30 -8.83 0.00 0.00 0.00 1.67 4.37 2.40 -1.00 0.00 0.00 -8.33 309.20 -527.00 286541.00 10.25 2.90 2.10 33.82 -7.87 -0.21 0.00 0.00 2.40 4.15 2.20 -1.00 0.00 0.00 -3.42 614.60 -528.00 287449.00 24.84 2.80 2.10 81.29 -9.01 -1.25 0.00 0.00 2.12 3.73 1.80 -1.00 0.00 0.00 -9.38 242.60 -529.00 286874.00 22.31 2.40 2.10 76.96 -7.64 0.72 0.00 0.00 1.23 3.84 1.90 -1.00 0.00 0.00 -14.45 947.60 -530.00 285549.00 14.71 4.00 2.10 52.76 -9.22 -0.65 0.00 0.00 2.43 4.05 2.10 -1.00 0.00 0.00 -4.84 902.60 -531.00 285298.10 18.70 1.60 2.10 49.38 -9.23 -0.86 0.00 0.00 1.31 2.98 1.00 -1.00 0.00 0.00 -11.39 651.70 -532.00 282744.00 10.06 2.50 2.10 31.73 -7.61 0.79 0.00 0.00 2.33 3.90 1.90 -1.00 0.00 0.00 -3.45 657.60 -533.00 282469.20 13.38 2.60 2.10 44.14 -10.02 -1.16 0.00 0.00 1.81 3.91 2.00 -1.00 0.00 0.00 -5.91 382.80 -534.00 282426.80 25.17 2.60 2.10 86.63 -8.67 -0.13 0.00 0.00 2.28 3.74 1.80 -1.00 0.00 0.00 -8.82 340.40 -535.00 283020.10 21.01 1.40 2.10 52.69 -9.76 -1.34 0.00 0.00 1.12 2.65 0.70 -1.00 0.00 0.00 -15.03 933.70 -536.00 283927.70 15.27 2.30 2.10 50.53 -8.25 0.31 0.00 0.00 1.89 3.71 1.80 -1.00 0.00 0.00 -6.45 561.30 -537.00 284765.80 14.99 4.00 2.10 69.05 -8.80 -1.97 0.00 0.00 3.53 5.24 3.30 -1.00 0.00 0.00 -3.39 119.40 -538.00 284476.10 16.29 2.30 2.10 53.63 -8.39 -1.54 0.00 0.00 1.33 3.60 1.60 -1.00 0.00 0.00 -9.81 1109.70 -539.00 287826.80 13.10 3.40 2.10 44.50 -10.35 -0.40 0.00 0.00 2.94 3.69 2.40 -1.00 0.00 0.00 -3.56 620.40 -540.00 287947.50 15.95 1.60 2.10 42.22 -8.08 2.37 0.00 0.00 1.31 2.76 0.80 -1.00 0.00 0.00 -9.71 741.10 -541.00 294854.70 13.01 2.20 2.10 39.88 -11.68 -0.92 0.00 0.00 1.89 3.44 1.50 -1.00 0.00 0.00 -5.49 1248.30 -542.00 294165.00 11.95 2.80 2.10 40.55 -11.56 0.64 0.00 0.00 2.68 3.85 1.90 -1.00 0.00 0.00 -3.56 558.60 -543.00 294080.30 16.71 1.70 2.10 45.66 -10.44 0.49 0.00 0.00 1.33 3.01 1.10 -1.00 0.00 0.00 -10.07 473.90 -544.00 294946.50 21.82 1.90 2.10 61.96 -9.99 -0.39 0.00 0.00 1.41 3.28 1.30 -1.00 0.00 0.00 -12.36 60.10 -545.00 296694.40 18.38 3.10 2.10 60.60 -8.51 0.52 0.00 0.00 2.82 3.78 2.00 -1.00 0.00 0.00 -5.22 528.00 -546.00 297254.80 28.01 3.80 2.10 113.67 -9.96 0.78 0.00 0.00 2.81 4.72 2.80 -1.00 0.00 0.00 -7.98 1088.40 -547.00 297037.80 13.57 2.40 2.10 41.25 -9.64 -1.46 0.00 0.00 1.69 3.50 1.60 -1.00 0.00 0.00 -6.43 871.40 -548.00 293831.40 14.30 2.00 2.10 35.20 -9.45 1.33 0.00 0.00 1.64 3.04 1.10 -1.00 0.00 0.00 -6.96 225.00 -549.00 292609.70 28.93 2.60 2.10 94.50 -10.24 0.53 0.00 0.00 1.44 3.76 1.80 -1.00 0.00 0.00 -16.12 283.30 -550.00 289266.10 18.95 2.00 2.10 59.55 -9.53 0.56 0.00 0.00 1.04 3.42 1.50 -1.00 0.00 0.00 -14.59 779.70 -551.00 289245.90 12.26 3.90 2.10 45.33 -8.44 1.76 0.00 0.00 3.66 4.42 2.50 -1.00 0.00 0.00 -2.68 759.50 -552.00 288103.90 10.26 1.30 2.10 24.51 -9.89 0.50 0.00 0.00 1.04 2.79 0.80 -1.00 0.00 0.00 -7.87 897.50 -553.00 290124.90 16.77 3.50 2.10 68.44 -10.38 1.40 0.00 0.00 2.95 4.74 2.80 -1.00 0.00 0.00 -4.54 358.50 -554.00 290535.80 22.38 2.70 2.10 78.58 -9.03 -1.64 0.00 0.00 1.48 4.01 2.10 -1.00 0.00 0.00 -12.10 769.40 -555.00 292510.90 13.93 1.50 2.10 35.46 -10.00 2.12 0.00 0.00 1.38 2.93 1.00 -1.00 0.00 0.00 -8.08 184.50 -556.00 291943.50 15.41 2.50 2.10 49.92 -11.17 -0.35 0.00 0.00 1.34 3.80 1.90 -1.00 0.00 0.00 -9.20 897.10 -557.00 282292.80 12.13 2.50 2.10 40.43 -9.57 -0.30 0.00 0.00 1.65 3.87 1.90 -1.00 0.00 0.00 -5.87 206.40 -558.00 282235.90 29.26 2.20 2.10 94.49 -8.23 -0.98 0.00 0.00 1.26 3.53 1.60 -1.00 0.00 0.00 -18.57 149.50 -559.00 274580.50 16.03 2.30 2.10 48.42 -9.63 -0.01 0.00 0.00 2.01 3.44 1.50 -1.00 0.00 0.00 -6.39 174.10 -560.00 273939.60 13.84 3.50 2.10 54.95 -7.79 0.15 0.00 0.00 3.27 4.78 2.80 -1.00 0.00 0.00 -3.39 813.20 -561.00 273194.00 14.20 3.70 2.10 60.53 -9.35 -1.33 0.00 0.00 3.48 4.97 3.00 -1.00 0.00 0.00 -3.27 67.60 -562.00 275282.80 15.99 2.30 2.10 49.74 -7.59 1.75 0.00 0.00 1.41 3.35 1.40 -1.00 0.00 0.00 -9.05 876.40 -563.00 276194.00 12.49 1.40 2.10 27.16 -10.04 -1.04 0.00 0.00 1.05 2.39 0.80 -1.00 0.00 0.00 -9.53 507.60 -564.00 276386.70 11.84 3.10 2.10 39.99 -9.00 0.71 0.00 0.00 2.57 4.04 2.10 -1.00 0.00 0.00 -3.69 700.30 -565.00 276273.30 19.36 2.90 2.10 68.61 -9.72 1.18 0.00 0.00 2.35 4.03 2.10 -1.00 0.00 0.00 -6.60 586.90 -566.00 273099.00 12.75 2.70 2.10 41.51 -9.22 0.68 0.00 0.00 2.20 4.05 2.10 -1.00 0.00 0.00 -4.64 1252.60 -567.00 272875.30 18.30 1.70 2.10 45.09 -8.85 -1.40 0.00 0.00 1.52 2.88 0.90 -1.00 0.00 0.00 -9.66 1028.90 -568.00 270697.20 13.84 1.90 2.10 37.76 -8.26 -2.57 0.00 0.00 1.53 3.32 1.40 -1.00 0.00 0.00 -7.26 130.80 -569.00 270548.00 17.33 2.20 2.10 57.28 -8.63 -0.47 0.00 0.00 1.67 3.62 1.70 -1.00 0.00 0.00 -8.31 1261.60 -570.00 270153.50 19.50 3.20 2.10 65.74 -7.82 0.64 0.00 0.00 2.36 3.95 2.00 -1.00 0.00 0.00 -6.61 867.10 -571.00 271112.90 22.16 2.70 2.10 72.88 -9.31 1.58 0.00 0.00 2.26 3.76 1.80 -1.00 0.00 0.00 -7.84 546.50 -572.00 271840.10 20.82 2.30 2.10 66.66 -7.08 -0.10 0.00 0.00 1.56 3.46 1.50 -1.00 0.00 0.00 -10.67 1273.70 -573.00 272030.30 10.50 4.00 2.10 46.18 -9.05 -1.30 0.00 0.00 3.81 4.87 3.40 -1.00 0.00 0.00 -2.21 183.90 -574.00 271921.70 16.46 4.20 2.10 65.72 -8.10 0.23 0.00 0.00 3.45 4.33 3.10 -1.00 0.00 0.00 -3.81 75.30 -575.00 276902.40 25.56 3.60 2.10 97.39 -7.85 2.55 0.00 0.00 2.91 4.60 2.70 -1.00 0.00 0.00 -7.03 1216.00 -576.00 277090.00 11.69 1.80 2.10 26.53 -8.28 -1.00 0.00 0.00 1.59 2.66 0.70 -1.00 0.00 0.00 -5.89 123.60 -577.00 279085.10 17.01 1.70 2.10 48.84 -9.24 -2.30 0.00 0.00 1.34 3.16 1.20 -1.00 0.00 0.00 -10.18 838.70 -578.00 279008.60 10.23 1.50 2.10 23.73 -9.68 1.20 0.00 0.00 1.34 2.81 0.90 -1.00 0.00 0.00 -6.13 762.20 -579.00 278986.40 10.61 3.80 2.10 41.09 -8.44 0.11 0.00 0.00 3.37 2.95 2.80 -1.00 0.00 0.00 -2.52 740.00 -580.00 280031.50 14.31 3.10 2.10 49.47 -8.27 2.43 0.00 0.00 2.54 3.89 2.20 -1.00 0.00 0.00 -4.50 505.10 -581.00 280127.70 17.30 4.00 2.10 72.13 -7.25 0.92 0.00 0.00 3.58 4.75 3.30 -1.00 0.00 0.00 -3.87 601.30 -582.00 281353.70 14.63 1.40 2.10 35.03 -9.86 -0.72 0.00 0.00 1.23 2.62 0.70 -1.00 0.00 0.00 -9.55 547.30 -583.00 280577.10 10.43 2.40 2.10 33.14 -9.36 0.05 0.00 0.00 2.06 3.68 1.70 -1.00 0.00 0.00 -4.05 1050.70 -584.00 278766.10 27.75 2.60 2.10 89.21 -8.77 -2.26 0.00 0.00 1.83 3.84 1.90 -1.00 0.00 0.00 -12.16 519.70 -585.00 278459.50 20.55 2.00 2.10 64.63 -8.24 1.15 0.00 0.00 1.24 3.49 1.50 -1.00 0.00 0.00 -13.26 213.10 -586.00 277537.10 21.08 2.50 2.10 60.70 -9.60 -0.38 0.00 0.00 1.90 3.48 1.50 -1.00 0.00 0.00 -8.87 570.70 -587.00 277246.30 12.08 3.30 2.10 44.80 -8.69 0.84 0.00 0.00 3.14 3.78 2.50 -1.00 0.00 0.00 -3.08 279.90 -588.00 277734.00 15.85 3.20 2.10 64.69 -9.84 -1.12 0.00 0.00 2.92 4.70 2.80 -1.00 0.00 0.00 -4.34 767.60 -589.00 277785.00 14.32 2.40 2.10 43.77 -10.17 1.92 0.00 0.00 2.07 3.54 1.60 -1.00 0.00 0.00 -5.53 818.60 -590.00 278230.40 10.87 2.30 2.10 29.29 -9.42 0.87 0.00 0.00 2.14 2.79 1.70 -1.00 0.00 0.00 -4.06 1264.00 -591.00 278112.50 11.43 2.20 2.10 33.53 -9.59 -1.69 0.00 0.00 1.84 3.11 1.40 -1.00 0.00 0.00 -4.96 1146.10 -592.00 247197.30 17.98 1.70 2.10 48.92 -8.87 0.43 0.00 0.00 1.31 3.07 1.10 -1.00 0.00 0.00 -10.95 950.90 -593.00 156847.00 15.55 1.50 2.10 39.00 -7.28 0.02 0.00 0.00 1.24 2.83 0.90 -1.00 0.00 0.00 -10.04 200.60 -594.00 61377.40 13.51 2.00 2.10 35.46 -8.59 1.05 0.00 0.00 1.75 2.96 1.30 -1.00 0.00 0.00 -6.19 2497.40 -595.00 61348.80 11.40 0.70 2.10 20.33 -8.64 -1.28 0.00 0.00 0.43 1.99 0.50 -1.00 0.00 0.00 -21.17 2468.80 -596.00 61119.70 17.05 2.40 2.10 54.95 -7.16 -0.20 0.00 0.00 2.08 3.67 1.70 -1.00 0.00 0.00 -6.57 2239.70 -597.00 61618.60 15.39 2.00 2.10 38.86 -7.69 -1.47 0.00 0.00 1.50 3.03 1.10 -1.00 0.00 0.00 -8.18 127.40 -598.00 61651.70 18.18 3.30 2.10 73.26 -8.71 -0.37 0.00 0.00 1.76 4.52 2.60 -1.00 0.00 0.00 -8.26 160.50 -599.00 61797.20 15.31 2.30 2.10 50.62 -8.26 -0.46 0.00 0.00 1.85 3.78 1.80 -1.00 0.00 0.00 -6.63 306.00 -600.00 61699.10 14.54 2.60 2.10 44.86 -9.78 -1.65 0.00 0.00 2.03 3.59 1.60 -1.00 0.00 0.00 -5.74 207.90 -601.00 60741.00 11.43 3.30 2.10 36.60 -7.16 -0.11 0.00 0.00 2.81 3.20 1.20 -1.00 0.00 0.00 -3.26 1861.00 -602.00 60514.60 21.76 2.40 2.10 66.28 -6.92 -0.12 0.00 0.00 1.71 3.50 1.60 -1.00 0.00 0.00 -10.19 1634.60 -603.00 58494.50 26.16 1.70 2.10 68.66 -6.19 -0.27 0.00 0.00 1.08 2.76 0.80 -1.00 0.00 0.00 -19.42 2174.50 -604.00 58212.20 12.15 1.80 2.10 33.03 -8.02 0.21 0.00 0.00 1.54 3.00 1.30 -1.00 0.00 0.00 -6.29 1892.20 -605.00 58047.60 12.67 3.20 2.10 44.92 -6.62 1.23 0.00 0.00 2.98 4.17 2.20 -1.00 0.00 0.00 -3.40 1727.60 -606.00 58576.70 17.13 1.70 2.10 43.85 -6.37 -1.29 0.00 0.00 1.53 3.01 1.10 -1.00 0.00 0.00 -8.98 2256.70 -607.00 58924.80 12.85 1.80 2.10 36.63 -6.58 1.18 0.00 0.00 1.46 3.30 1.40 -1.00 0.00 0.00 -7.02 44.80 -608.00 59462.20 14.19 2.60 2.10 44.86 -7.62 0.17 0.00 0.00 2.34 3.73 1.80 -1.00 0.00 0.00 -4.86 582.20 -609.00 59145.30 19.72 2.20 2.10 62.01 -6.43 0.88 0.00 0.00 1.60 3.35 1.40 -1.00 0.00 0.00 -9.88 265.30 -610.00 61798.50 15.11 3.60 2.10 64.59 -8.50 2.21 0.00 0.00 3.48 5.07 3.10 -1.00 0.00 0.00 -3.47 307.30 -611.00 61879.50 14.61 1.60 2.10 34.56 -9.21 0.91 0.00 0.00 1.38 2.85 0.90 -1.00 0.00 0.00 -8.50 388.30 -612.00 65507.00 18.20 2.00 2.10 55.11 -6.31 0.61 0.00 0.00 1.32 3.41 1.50 -1.00 0.00 0.00 -11.06 1455.80 -613.00 65209.90 14.41 2.20 2.10 40.79 -7.12 0.27 0.00 0.00 1.77 2.91 1.50 -1.00 0.00 0.00 -6.53 1158.70 -614.00 64719.30 14.60 3.20 2.10 53.65 -7.85 -0.29 0.00 0.00 3.01 4.07 2.80 -1.00 0.00 0.00 -3.88 668.10 -615.00 65523.90 24.38 2.30 2.10 76.18 -7.61 0.08 0.00 0.00 1.80 3.60 1.70 -1.00 0.00 0.00 -10.83 1472.70 -616.00 65635.00 14.00 2.30 2.10 40.47 -5.77 1.41 0.00 0.00 1.74 3.43 1.50 -1.00 0.00 0.00 -6.44 1583.80 -617.00 66053.20 13.82 2.80 2.10 45.46 -6.61 1.14 0.00 0.00 2.11 3.96 2.00 -1.00 0.00 0.00 -5.24 2002.00 -618.00 65676.50 13.66 2.80 2.10 43.95 -6.29 -0.57 0.00 0.00 2.07 3.79 1.80 -1.00 0.00 0.00 -5.29 1625.30 -619.00 64206.90 18.04 1.70 2.10 46.13 -6.65 0.99 0.00 0.00 1.36 3.15 1.20 -1.00 0.00 0.00 -10.59 155.70 -620.00 63969.20 19.04 2.20 2.10 53.83 -7.04 0.62 0.00 0.00 1.94 3.51 1.60 -1.00 0.00 0.00 -7.85 2478.00 -621.00 62921.80 12.34 3.40 2.10 47.12 -7.51 -1.49 0.00 0.00 2.90 4.58 2.70 -1.00 0.00 0.00 -3.40 1430.60 -622.00 62522.80 13.59 1.90 2.10 36.90 -9.49 1.57 0.00 0.00 1.55 3.16 1.30 -1.00 0.00 0.00 -7.00 1031.60 -623.00 62336.80 13.52 2.30 2.10 37.54 -8.62 0.02 0.00 0.00 1.94 2.84 1.60 -1.00 0.00 0.00 -5.58 845.60 -624.00 63038.60 10.37 3.20 2.10 32.86 -9.02 -0.29 0.00 0.00 2.99 3.02 1.70 -1.00 0.00 0.00 -2.78 1547.40 -625.00 63171.70 14.85 2.10 2.10 43.01 -8.09 -1.34 0.00 0.00 1.72 3.24 1.40 -1.00 0.00 0.00 -6.90 1680.50 -626.00 63495.30 23.65 3.00 2.10 92.77 -7.18 0.37 0.00 0.00 2.29 4.35 2.40 -1.00 0.00 0.00 -8.26 2004.10 -627.00 63359.30 12.85 2.10 2.10 36.15 -6.37 2.23 0.00 0.00 1.23 3.33 1.40 -1.00 0.00 0.00 -8.38 1868.10 -628.00 57968.20 21.12 2.10 2.10 60.13 -9.53 0.43 0.00 0.00 1.21 3.27 1.30 -1.00 0.00 0.00 -13.94 1648.20 -629.00 57952.10 13.47 2.50 2.10 44.98 -7.66 -0.96 0.00 0.00 2.17 4.03 2.10 -1.00 0.00 0.00 -4.97 1632.10 -630.00 49726.00 16.26 4.00 2.10 63.09 -8.30 0.93 0.00 0.00 3.48 3.76 3.10 -1.00 0.00 0.00 -3.73 1086.00 -631.00 49697.80 15.63 2.60 2.10 51.91 -8.80 2.40 0.00 0.00 1.89 3.81 1.90 -1.00 0.00 0.00 -6.63 1057.80 -632.00 49513.30 17.47 1.30 2.10 45.40 -10.00 0.97 0.00 0.00 0.80 2.70 0.70 -1.00 0.00 0.00 -17.56 873.30 -633.00 50200.80 16.15 1.40 2.10 41.05 -7.98 2.00 0.00 0.00 1.06 2.74 0.80 -1.00 0.00 0.00 -12.20 1560.80 -634.00 50492.70 14.42 4.60 2.10 56.43 -8.35 -0.92 0.00 0.00 4.39 3.43 1.80 -1.00 0.00 0.00 -2.63 1852.70 -635.00 50912.90 14.86 3.70 2.10 56.55 -7.39 0.25 0.00 0.00 3.45 4.74 3.00 -1.00 0.00 0.00 -3.45 2272.90 -636.00 50745.80 10.98 2.60 2.10 36.34 -7.71 -1.30 0.00 0.00 1.76 3.74 1.80 -1.00 0.00 0.00 -4.99 2105.80 -637.00 49468.80 10.23 1.80 2.10 24.46 -7.90 -1.06 0.00 0.00 1.04 2.56 1.10 -1.00 0.00 0.00 -7.90 828.80 -638.00 49314.70 12.37 2.00 2.10 28.81 -8.24 -1.77 0.00 0.00 1.48 2.73 1.10 -1.00 0.00 0.00 -6.67 674.70 -639.00 48123.60 11.77 1.90 2.10 31.48 -7.18 -0.48 0.00 0.00 1.45 3.07 1.10 -1.00 0.00 0.00 -6.51 2043.60 -640.00 48038.80 16.37 2.10 2.10 44.48 -7.15 1.69 0.00 0.00 1.73 3.31 1.40 -1.00 0.00 0.00 -7.57 1958.80 -641.00 47717.80 10.66 1.70 2.10 24.84 -7.54 -1.01 0.00 0.00 1.46 2.55 1.00 -1.00 0.00 0.00 -5.85 1637.80 -642.00 48819.20 11.27 2.10 2.10 29.73 -8.84 0.41 0.00 0.00 1.88 3.42 1.70 -1.00 0.00 0.00 -4.80 179.20 -643.00 48882.80 16.42 1.60 2.10 41.63 -7.76 0.66 0.00 0.00 1.45 2.92 1.00 -1.00 0.00 0.00 -9.07 242.80 -644.00 49036.00 13.50 1.80 2.10 35.44 -7.15 -1.02 0.00 0.00 1.61 3.36 1.40 -1.00 0.00 0.00 -6.71 396.00 -645.00 49009.30 10.00 2.00 2.10 26.24 -6.78 -1.00 0.00 0.00 1.54 3.00 1.00 -1.00 0.00 0.00 -5.19 369.30 -646.00 51450.30 29.23 2.10 2.10 80.49 -6.05 1.56 0.00 0.00 1.45 3.03 1.10 -1.00 0.00 0.00 -16.09 250.30 -647.00 51636.40 13.67 1.60 2.10 33.19 -8.14 -1.22 0.00 0.00 1.29 3.13 1.20 -1.00 0.00 0.00 -8.47 436.40 -648.00 55590.40 16.00 3.10 2.10 54.47 -8.34 0.52 0.00 0.00 2.73 4.01 2.60 -1.00 0.00 0.00 -4.69 1830.40 -649.00 55126.80 28.10 2.50 2.10 96.58 -9.31 1.52 0.00 0.00 1.87 3.81 1.90 -1.00 0.00 0.00 -12.05 1366.80 -650.00 54682.90 16.78 2.00 2.10 47.40 -6.17 -2.01 0.00 0.00 1.71 3.16 1.20 -1.00 0.00 0.00 -7.84 922.90 -651.00 56014.80 21.31 2.70 2.10 72.56 -7.33 1.13 0.00 0.00 2.36 3.83 1.90 -1.00 0.00 0.00 -7.24 2254.80 -652.00 56997.60 13.95 2.60 2.10 39.27 -7.55 1.26 0.00 0.00 2.04 3.54 1.60 -1.00 0.00 0.00 -5.46 677.60 -653.00 57429.00 11.20 2.60 2.10 37.67 -7.96 -0.41 0.00 0.00 2.36 4.12 2.20 -1.00 0.00 0.00 -3.79 1109.00 -654.00 57350.20 16.78 3.30 2.10 50.75 -6.60 0.18 0.00 0.00 1.53 3.22 1.30 -1.00 0.00 0.00 -8.79 1030.20 -655.00 54162.90 18.07 3.10 2.10 63.13 -7.65 -0.91 0.00 0.00 2.25 4.01 2.10 -1.00 0.00 0.00 -6.42 402.90 -656.00 53889.40 10.92 4.20 2.10 45.16 -8.15 0.12 0.00 0.00 3.96 1.66 1.30 -1.00 0.00 0.00 -2.21 129.40 -657.00 52128.90 11.23 2.10 2.10 34.61 -6.65 -0.68 0.00 0.00 1.70 3.42 1.50 -1.00 0.00 0.00 -5.28 928.90 -658.00 51925.70 14.85 2.30 2.10 46.72 -7.39 -0.96 0.00 0.00 1.76 3.48 1.90 -1.00 0.00 0.00 -6.77 725.70 -659.00 51679.30 13.80 2.60 2.10 44.27 -7.69 1.83 0.00 0.00 2.24 3.69 2.00 -1.00 0.00 0.00 -4.92 69.70 -660.00 52363.60 16.90 1.60 2.10 41.05 -12.90 -1.58 0.00 0.00 1.34 3.15 1.20 -1.00 0.00 0.00 -10.06 1163.60 -661.00 52500.70 14.75 1.80 2.10 37.46 -8.01 1.20 0.00 0.00 1.58 3.34 1.40 -1.00 0.00 0.00 -7.46 1300.70 -662.00 53507.40 14.18 1.80 2.10 37.45 -6.40 -0.35 0.00 0.00 1.61 2.98 1.00 -1.00 0.00 0.00 -7.03 2307.40 -663.00 52985.90 18.80 1.90 2.10 51.45 -7.37 -0.51 0.00 0.00 1.63 3.11 1.20 -1.00 0.00 0.00 -9.20 1785.90 -664.00 66159.30 12.43 1.60 2.10 30.15 -6.78 2.12 0.00 0.00 1.37 2.89 0.90 -1.00 0.00 0.00 -7.23 2108.10 -665.00 66246.60 11.77 3.00 2.10 34.16 -7.29 0.78 0.00 0.00 1.82 3.16 1.60 -1.00 0.00 0.00 -5.19 2195.40 -666.00 84181.60 12.50 2.20 2.10 35.48 -8.23 -1.30 0.00 0.00 1.75 3.38 1.40 -1.00 0.00 0.00 -5.70 930.40 -667.00 83201.30 10.57 2.60 2.10 33.57 -7.25 -0.49 0.00 0.00 1.98 3.51 1.60 -1.00 0.00 0.00 -4.26 1230.10 -668.00 82670.70 15.17 1.80 2.10 42.91 -9.54 0.29 0.00 0.00 1.59 3.16 1.20 -1.00 0.00 0.00 -7.64 699.50 -669.00 84369.40 19.71 2.30 2.10 64.20 -6.58 -0.02 0.00 0.00 2.10 3.64 1.70 -1.00 0.00 0.00 -7.52 1118.20 -670.00 84983.40 25.23 2.00 2.10 73.09 -6.25 1.82 0.00 0.00 1.30 3.26 1.30 -1.00 0.00 0.00 -15.57 452.20 -671.00 85939.70 11.41 2.50 2.10 36.55 -6.79 2.12 0.00 0.00 2.30 3.10 1.80 -1.00 0.00 0.00 -3.97 128.50 -672.00 85006.40 16.87 2.00 2.10 47.78 -8.13 -0.17 0.00 0.00 1.54 3.33 1.40 -1.00 0.00 0.00 -8.75 475.20 -673.00 82607.00 11.80 2.00 2.10 31.43 -8.94 3.06 0.00 0.00 1.68 3.21 1.30 -1.00 0.00 0.00 -5.63 635.80 -674.00 82530.70 18.61 2.10 2.10 57.59 -8.88 0.28 0.00 0.00 0.98 3.65 1.70 -1.00 0.00 0.00 -15.16 559.50 -675.00 79807.40 12.30 1.90 2.10 31.17 -6.57 1.18 0.00 0.00 1.12 2.75 0.80 -1.00 0.00 0.00 -8.76 396.20 -676.00 79717.90 13.78 2.20 2.10 40.86 -7.86 1.90 0.00 0.00 1.96 3.69 1.70 -1.00 0.00 0.00 -5.63 306.70 -677.00 79435.20 16.74 2.80 2.10 58.09 -8.75 -0.54 0.00 0.00 1.81 3.98 2.00 -1.00 0.00 0.00 -7.38 24.00 -678.00 81031.60 21.65 2.70 2.10 77.20 -7.37 -0.95 0.00 0.00 2.05 4.05 2.10 -1.00 0.00 0.00 -8.46 340.40 -679.00 81185.10 14.62 3.60 2.10 57.06 -7.00 0.21 0.00 0.00 3.30 4.41 2.80 -1.00 0.00 0.00 -3.55 493.90 -680.00 81611.40 17.38 2.20 2.10 50.17 -8.43 -0.33 0.00 0.00 1.74 3.57 1.60 -1.00 0.00 0.00 -8.01 920.20 -681.00 81262.10 12.67 2.50 2.10 40.11 -8.17 1.18 0.00 0.00 2.22 3.83 1.90 -1.00 0.00 0.00 -4.56 570.90 -682.00 86085.10 18.36 1.90 2.10 49.13 -7.55 0.43 0.00 0.00 1.39 3.25 1.30 -1.00 0.00 0.00 -10.54 273.90 -683.00 86113.70 21.53 1.70 2.10 59.82 -12.02 -1.97 0.00 0.00 1.51 3.36 1.40 -1.00 0.00 0.00 -11.43 302.50 -684.00 89985.60 12.04 2.00 2.10 32.58 -7.69 -1.35 0.00 0.00 1.65 3.48 1.50 -1.00 0.00 0.00 -5.84 334.40 -685.00 89064.20 13.78 2.30 2.10 38.24 -9.89 1.00 0.00 0.00 2.03 3.37 1.60 -1.00 0.00 0.00 -5.43 693.00 -686.00 89047.70 10.26 1.40 2.10 22.49 -8.32 0.23 0.00 0.00 1.14 2.39 0.40 -1.00 0.00 0.00 -7.23 676.50 -687.00 90280.00 11.26 2.10 2.10 28.81 -6.83 1.65 0.00 0.00 1.93 1.77 1.20 -1.00 0.00 0.00 -4.66 628.80 -688.00 90354.80 12.40 2.30 2.10 37.40 -7.82 1.46 0.00 0.00 1.99 3.58 1.60 -1.00 0.00 0.00 -4.98 703.60 -689.00 91220.20 13.71 2.40 2.10 38.74 -8.71 1.18 0.00 0.00 2.03 2.69 1.30 -1.00 0.00 0.00 -5.40 289.00 -690.00 90619.00 11.57 2.60 2.10 32.44 -6.53 0.67 0.00 0.00 2.24 3.52 1.70 -1.00 0.00 0.00 -4.14 967.80 -691.00 88760.80 12.84 1.40 4.40 50.49 -7.29 -0.55 0.00 0.00 1.16 4.69 0.70 -1.00 0.00 0.00 -8.86 338.40 -692.00 88336.40 24.00 3.10 2.10 85.29 -6.32 0.95 0.00 0.00 2.36 4.08 2.10 -1.00 0.00 0.00 -8.14 1245.20 -693.00 86778.50 12.13 1.70 2.10 31.52 -9.60 0.40 0.00 0.00 1.53 3.36 1.40 -1.00 0.00 0.00 -6.35 967.30 -694.00 86486.70 21.00 3.40 2.10 86.50 -6.66 2.06 0.00 0.00 2.44 4.58 2.60 -1.00 0.00 0.00 -6.88 675.50 -695.00 86145.60 22.96 2.10 2.10 69.46 -9.22 0.82 0.00 0.00 1.82 3.40 1.40 -1.00 0.00 0.00 -10.07 334.40 -696.00 86905.90 11.28 2.40 2.10 34.86 -7.99 -1.12 0.00 0.00 2.08 3.27 1.90 -1.00 0.00 0.00 -4.34 1094.70 -697.00 87166.30 19.04 2.90 2.10 68.66 -7.24 -0.01 0.00 0.00 2.51 4.16 2.20 -1.00 0.00 0.00 -6.06 75.10 -698.00 88185.90 11.94 2.70 2.10 42.97 -6.65 -0.56 0.00 0.00 2.10 4.19 2.20 -1.00 0.00 0.00 -4.55 1094.70 -699.00 155792.40 20.91 2.50 2.10 69.10 -9.10 -1.31 0.00 0.00 1.84 3.71 1.80 -1.00 0.00 0.00 -9.07 426.00 -700.00 79139.50 13.48 3.70 2.10 52.08 -7.12 -0.55 0.00 0.00 3.12 4.48 2.80 -1.00 0.00 0.00 -3.46 1008.30 -701.00 78333.70 19.48 1.30 2.10 48.04 -7.12 -1.53 0.00 0.00 1.15 2.80 0.80 -1.00 0.00 0.00 -13.55 202.50 -702.00 69679.80 14.38 2.10 2.10 42.40 -6.72 -0.18 0.00 0.00 0.88 3.34 1.40 -1.00 0.00 0.00 -13.07 508.60 -703.00 69456.70 10.07 2.20 2.10 25.91 -7.48 0.15 0.00 0.00 1.88 2.44 1.60 -1.00 0.00 0.00 -4.29 285.50 -704.00 69430.50 15.17 1.80 2.10 37.94 -7.12 -0.46 0.00 0.00 1.47 3.11 1.20 -1.00 0.00 0.00 -8.25 259.30 -705.00 69765.00 15.12 2.20 2.10 45.04 -7.20 -1.14 0.00 0.00 1.97 3.47 1.50 -1.00 0.00 0.00 -6.15 593.80 -706.00 70093.40 13.52 2.90 2.10 47.29 -7.36 0.41 0.00 0.00 2.63 4.25 2.30 -1.00 0.00 0.00 -4.11 922.20 -707.00 70464.10 39.01 3.40 2.10 145.90 -7.67 1.17 0.00 0.00 1.72 3.98 2.00 -1.00 0.00 0.00 -18.11 12.90 -708.00 70463.80 39.11 3.10 2.10 137.43 -7.54 0.21 0.00 0.00 1.73 3.68 1.70 -1.00 0.00 0.00 -18.12 12.60 -709.00 69390.20 15.96 4.40 2.10 61.06 -6.41 1.38 0.00 0.00 2.90 4.62 2.70 -1.00 0.00 0.00 -4.40 219.00 -710.00 68708.10 10.92 2.80 2.10 32.88 -7.18 0.71 0.00 0.00 2.65 3.26 2.10 -1.00 0.00 0.00 -3.30 816.90 -711.00 67437.80 10.12 2.30 2.10 25.89 -7.09 -0.91 0.00 0.00 2.01 2.41 1.50 -1.00 0.00 0.00 -4.02 826.60 -712.00 66762.10 13.20 2.40 2.10 33.84 -7.71 -1.54 0.00 0.00 2.12 3.22 1.30 -1.00 0.00 0.00 -4.99 150.90 -713.00 66737.40 11.80 3.40 2.10 40.93 -7.86 0.02 0.00 0.00 3.08 4.04 2.70 -1.00 0.00 0.00 -3.06 126.20 -714.00 67507.80 11.76 3.00 2.10 43.57 -8.24 0.48 0.00 0.00 2.69 4.03 2.40 -1.00 0.00 0.00 -3.50 896.60 -715.00 67699.20 14.20 2.40 2.10 43.24 -7.39 -1.32 0.00 0.00 2.13 3.80 2.00 -1.00 0.00 0.00 -5.34 1088.00 -716.00 68561.70 10.02 1.90 2.10 24.67 -7.36 -0.74 0.00 0.00 1.68 3.09 1.10 -1.00 0.00 0.00 -4.78 670.50 -717.00 68438.80 11.69 1.40 2.10 29.24 -7.93 0.67 0.00 0.00 1.27 2.80 1.30 -1.00 0.00 0.00 -7.38 547.60 -718.00 71303.90 11.88 1.90 2.10 30.45 -7.10 -1.07 0.00 0.00 1.70 2.49 1.30 -1.00 0.00 0.00 -5.57 852.70 -719.00 71821.70 22.25 2.60 2.10 78.61 -6.80 -0.43 0.00 0.00 2.19 4.04 2.10 -1.00 0.00 0.00 -8.12 90.50 -720.00 77540.20 14.18 2.70 2.10 50.20 -5.87 -0.08 0.00 0.00 2.34 3.97 2.00 -1.00 0.00 0.00 -4.86 689.00 -721.00 77014.80 12.21 3.40 2.10 41.05 -6.99 1.21 0.00 0.00 3.13 3.70 1.90 -1.00 0.00 0.00 -3.12 163.60 -722.00 76947.50 24.84 1.60 2.10 67.82 -7.72 1.85 0.00 0.00 1.33 3.05 1.10 -1.00 0.00 0.00 -14.91 96.30 -723.00 77651.10 19.47 3.00 2.10 66.88 -6.96 0.68 0.00 0.00 2.31 4.04 2.10 -1.00 0.00 0.00 -6.75 799.90 -724.00 77669.60 13.87 2.90 2.10 44.49 -9.07 1.52 0.00 0.00 2.34 3.85 1.90 -1.00 0.00 0.00 -4.74 818.40 -725.00 77948.40 10.86 4.50 2.10 51.97 -8.17 0.93 0.00 0.00 4.04 2.29 0.40 -1.00 0.00 0.00 -2.15 1097.20 -726.00 77927.90 11.32 2.10 2.10 30.60 -6.26 2.48 0.00 0.00 1.93 2.96 1.40 -1.00 0.00 0.00 -4.69 1076.70 -727.00 76158.30 12.38 2.90 2.10 33.26 -7.40 1.65 0.00 0.00 1.70 3.25 1.30 -1.00 0.00 0.00 -5.81 587.10 -728.00 75939.90 14.21 5.40 2.10 70.87 -9.60 3.50 0.00 0.00 4.70 6.01 4.10 -1.00 0.00 0.00 -2.42 368.70 -729.00 73247.00 17.03 2.00 2.10 50.27 -6.30 -0.85 0.00 0.00 1.81 3.26 1.30 -1.00 0.00 0.00 -7.51 235.80 -730.00 72831.00 16.75 3.50 2.10 66.72 -6.20 0.28 0.00 0.00 2.91 4.58 2.60 -1.00 0.00 0.00 -4.61 1099.80 -731.00 71919.60 15.03 2.60 2.10 46.93 -8.83 -1.20 0.00 0.00 2.39 3.89 1.90 -1.00 0.00 0.00 -5.03 188.40 -732.00 74865.90 13.32 1.50 2.10 29.39 -7.03 0.47 0.00 0.00 1.20 2.40 0.40 -1.00 0.00 0.00 -8.86 574.70 -733.00 74884.60 21.69 2.60 2.10 69.01 -9.23 -0.07 0.00 0.00 1.80 3.87 1.90 -1.00 0.00 0.00 -9.65 593.40 -734.00 75874.10 16.02 1.90 2.10 44.57 -8.31 -1.05 0.00 0.00 1.60 3.43 1.50 -1.00 0.00 0.00 -7.99 302.90 -735.00 75466.20 12.78 3.50 2.10 47.88 -7.81 0.58 0.00 0.00 2.98 4.63 2.70 -1.00 0.00 0.00 -3.43 1175.00 -736.00 47141.30 13.39 4.20 2.10 60.65 -8.36 -0.11 0.00 0.00 4.06 5.13 3.70 -1.00 0.00 0.00 -2.64 1061.30 -737.00 47101.70 12.03 2.90 2.10 41.10 -6.62 -0.97 0.00 0.00 2.54 4.38 2.40 -1.00 0.00 0.00 -3.79 1021.70 -738.00 19867.70 11.48 1.60 2.10 26.09 -8.94 1.53 0.00 0.00 1.29 3.14 1.20 -1.00 0.00 0.00 -7.11 1947.70 -739.00 19834.40 13.15 2.40 2.10 35.97 -7.47 1.01 0.00 0.00 1.57 3.26 1.30 -1.00 0.00 0.00 -6.68 1914.40 -740.00 19214.40 22.84 2.40 2.10 69.33 -7.44 -0.08 0.00 0.00 1.73 3.50 1.50 -1.00 0.00 0.00 -10.56 1294.40 -741.00 20018.00 23.28 1.60 2.10 64.63 -8.13 -1.30 0.00 0.00 1.35 3.13 1.20 -1.00 0.00 0.00 -13.84 203.60 -742.00 20048.10 13.60 2.20 2.10 43.06 -11.19 -1.15 0.00 0.00 1.72 3.69 1.70 -1.00 0.00 0.00 -6.31 2128.10 -743.00 20313.90 13.27 3.20 2.10 51.33 -7.81 0.19 0.00 0.00 2.91 4.84 2.90 -1.00 0.00 0.00 -3.65 141.10 -744.00 20189.70 11.51 2.80 2.10 33.93 -6.96 0.46 0.00 0.00 1.93 3.32 1.60 -1.00 0.00 0.00 -4.76 2269.70 -745.00 17549.90 13.64 3.30 2.10 41.14 -7.11 -0.27 0.00 0.00 1.83 3.42 1.50 -1.00 0.00 0.00 -5.96 141.90 -746.00 17520.30 12.06 2.30 2.10 31.69 -6.75 0.99 0.00 0.00 2.06 2.70 1.60 -1.00 0.00 0.00 -4.68 2160.30 -747.00 14007.30 13.03 1.90 2.10 38.95 -8.95 -1.69 0.00 0.00 1.37 3.30 1.30 -1.00 0.00 0.00 -7.63 1207.30 -748.00 13712.00 12.34 1.60 2.10 30.27 -8.78 2.65 0.00 0.00 1.33 2.91 1.00 -1.00 0.00 0.00 -7.41 912.00 -749.00 12198.50 17.10 2.20 2.10 51.99 -7.55 1.52 0.00 0.00 1.97 3.68 1.70 -1.00 0.00 0.00 -6.95 1958.50 -750.00 14032.00 12.22 1.70 2.10 29.49 -10.06 -1.65 0.00 0.00 1.43 2.77 1.30 -1.00 0.00 0.00 -6.83 1232.00 -751.00 16060.40 14.13 2.10 2.10 40.06 -8.43 0.60 0.00 0.00 1.94 3.42 1.50 -1.00 0.00 0.00 -5.83 700.40 -752.00 17124.10 13.90 2.00 2.10 33.59 -9.23 0.39 0.00 0.00 1.87 3.03 1.40 -1.00 0.00 0.00 -5.95 1764.10 -753.00 17077.80 10.77 0.80 2.10 20.62 -6.56 -1.50 0.00 0.00 0.63 2.31 0.40 -1.00 0.00 0.00 -13.58 1717.80 -754.00 20430.80 12.56 1.50 2.10 30.41 -7.76 1.32 0.00 0.00 1.33 2.69 0.70 -1.00 0.00 0.00 -7.56 2510.80 -755.00 20959.70 16.62 2.30 2.10 46.93 -6.34 0.00 0.00 0.00 1.64 3.18 1.50 -1.00 0.00 0.00 -8.11 479.70 -756.00 23758.70 10.35 1.30 2.10 26.43 -7.59 1.67 0.00 0.00 1.13 2.57 1.20 -1.00 0.00 0.00 -7.31 718.70 -757.00 23668.50 15.20 2.60 2.10 53.33 -7.26 -1.40 0.00 0.00 2.31 4.08 2.10 -1.00 0.00 0.00 -5.25 628.50 -758.00 23447.90 17.51 4.10 2.10 58.99 -7.43 0.54 0.00 0.00 3.18 4.13 2.30 -1.00 0.00 0.00 -4.41 407.90 -759.00 23952.80 11.45 1.80 2.10 28.81 -8.39 -0.75 0.00 0.00 1.45 3.16 1.20 -1.00 0.00 0.00 -6.30 912.80 -760.00 24797.70 13.82 2.80 2.10 42.20 -8.73 -0.14 0.00 0.00 2.52 2.43 1.90 -1.00 0.00 0.00 -4.39 1757.70 -761.00 25780.50 18.33 3.10 2.10 55.90 -9.63 -0.43 0.00 0.00 2.00 3.31 1.40 -1.00 0.00 0.00 -7.34 180.50 -762.00 24988.20 16.04 1.60 2.10 40.04 -9.34 0.53 0.00 0.00 1.36 2.94 1.00 -1.00 0.00 0.00 -9.46 1948.20 -763.00 23402.00 10.33 2.40 2.10 26.86 -8.40 -1.05 0.00 0.00 2.19 2.07 1.90 -1.00 0.00 0.00 -3.77 362.00 -764.00 23235.80 12.70 2.20 2.10 35.40 -7.78 1.09 0.00 0.00 1.72 3.49 1.50 -1.00 0.00 0.00 -5.91 195.80 -765.00 21485.90 14.48 1.30 2.10 33.57 -8.12 -0.69 0.00 0.00 0.81 2.56 0.60 -1.00 0.00 0.00 -14.24 1005.90 -766.00 21369.70 10.23 2.10 2.10 29.29 -7.10 -0.58 0.00 0.00 1.76 3.49 1.50 -1.00 0.00 0.00 -4.66 889.70 -767.00 21143.40 14.02 2.80 2.10 42.65 -7.11 0.77 0.00 0.00 1.96 3.63 1.70 -1.00 0.00 0.00 -5.73 663.40 -768.00 21823.80 13.21 1.00 2.10 23.03 -6.66 1.49 0.00 0.00 0.86 1.30 0.80 -1.00 0.00 0.00 -12.34 1343.80 -769.00 22259.60 19.52 1.60 2.10 55.88 -7.54 -0.20 0.00 0.00 1.00 3.14 1.20 -1.00 0.00 0.00 -15.54 1779.60 -770.00 22921.90 18.07 2.10 2.10 52.57 -7.66 0.38 0.00 0.00 1.54 3.29 1.30 -1.00 0.00 0.00 -9.38 2441.90 -771.00 22394.90 20.20 2.10 2.10 58.82 -7.76 0.87 0.00 0.00 1.35 3.51 1.60 -1.00 0.00 0.00 -11.95 1914.90 -772.00 12067.70 11.77 2.70 2.10 36.99 -7.25 -0.92 0.00 0.00 2.08 3.24 1.80 -1.00 0.00 0.00 -4.52 1827.70 -773.00 11469.10 10.89 1.40 2.10 25.39 -7.13 0.58 0.00 0.00 1.17 2.40 0.40 -1.00 0.00 0.00 -7.46 1229.10 -774.00 3216.10 12.48 1.80 2.10 25.62 -7.27 -0.61 0.00 0.00 1.32 2.64 0.70 -1.00 0.00 0.00 -7.57 656.10 -775.00 2965.70 12.49 1.40 2.10 31.58 -7.05 1.69 0.00 0.00 1.19 3.15 1.20 -1.00 0.00 0.00 -8.41 405.70 -776.00 2521.50 10.05 3.00 2.10 33.22 -8.14 -0.83 0.00 0.00 2.82 3.78 2.40 -1.00 0.00 0.00 -2.86 2521.50 -777.00 3513.50 11.03 1.10 2.10 22.62 -8.12 1.18 0.00 0.00 0.91 2.12 0.70 -1.00 0.00 0.00 -9.67 953.50 -778.00 3691.80 12.33 1.70 2.10 27.09 -8.88 1.73 0.00 0.00 1.51 1.45 1.20 -1.00 0.00 0.00 -6.54 1131.80 -779.00 4019.90 18.34 2.00 2.10 51.91 -7.10 2.40 0.00 0.00 1.28 3.19 1.20 -1.00 0.00 0.00 -11.42 1459.90 -780.00 3703.90 12.65 1.50 2.10 27.41 -10.71 0.95 0.00 0.00 1.36 2.91 1.00 -1.00 0.00 0.00 -7.42 1143.90 -781.00 2132.40 12.00 1.80 2.10 28.82 -7.66 -0.15 0.00 0.00 1.49 2.80 1.30 -1.00 0.00 0.00 -6.45 2132.40 -782.00 2087.30 11.66 3.10 2.10 39.26 -6.72 1.76 0.00 0.00 2.41 3.79 2.20 -1.00 0.00 0.00 -3.87 2087.30 -783.00 1155.60 13.25 1.20 2.10 31.42 -8.22 0.87 0.00 0.00 0.98 2.68 0.70 -1.00 0.00 0.00 -10.78 1155.60 -784.00 930.80 10.38 1.70 2.10 20.97 -6.82 -0.17 0.00 0.00 1.54 1.32 0.80 -1.00 0.00 0.00 -5.39 930.80 -785.00 459.00 14.09 2.80 2.10 45.63 -5.57 0.20 0.00 0.00 2.49 3.69 1.70 -1.00 0.00 0.00 -4.53 459.00 -786.00 1301.90 10.04 2.20 2.10 24.92 -8.26 0.08 0.00 0.00 1.83 2.43 1.50 -1.00 0.00 0.00 -4.39 1301.90 -787.00 1363.30 14.15 3.00 2.10 50.99 -7.00 0.66 0.00 0.00 2.49 3.87 2.30 -1.00 0.00 0.00 -4.55 1363.30 -788.00 1761.10 11.10 1.20 2.10 24.17 -8.16 0.46 0.00 0.00 0.79 2.48 0.50 -1.00 0.00 0.00 -11.24 1761.10 -789.00 1624.30 12.89 1.20 2.10 26.38 -7.25 0.54 0.00 0.00 1.06 2.11 0.50 -1.00 0.00 0.00 -9.72 1624.30 -790.00 4268.50 16.16 2.40 2.10 52.92 -7.11 0.65 0.00 0.00 1.95 3.73 1.80 -1.00 0.00 0.00 -6.64 1708.50 -791.00 4372.30 11.52 1.80 2.10 32.83 -7.90 0.27 0.00 0.00 1.33 2.99 1.00 -1.00 0.00 0.00 -6.92 1812.30 -792.00 10897.40 11.63 1.60 2.10 28.56 -8.19 -0.32 0.00 0.00 1.28 3.05 1.10 -1.00 0.00 0.00 -7.27 657.40 -793.00 9722.50 14.00 1.70 2.10 39.02 -8.32 0.25 0.00 0.00 1.50 3.17 1.20 -1.00 0.00 0.00 -7.45 2042.50 -794.00 8900.00 11.84 1.70 2.10 28.36 -8.02 -1.73 0.00 0.00 1.44 3.33 1.40 -1.00 0.00 0.00 -6.60 1220.00 -795.00 10958.40 12.80 1.10 2.10 27.41 -8.80 1.11 0.00 0.00 0.96 2.21 0.50 -1.00 0.00 0.00 -10.71 718.40 -796.00 11127.60 14.90 2.00 2.10 44.16 -8.03 0.30 0.00 0.00 1.83 3.43 1.50 -1.00 0.00 0.00 -6.50 887.60 -797.00 11249.40 15.57 3.40 2.10 58.96 -8.61 -0.87 0.00 0.00 2.42 4.33 2.40 -1.00 0.00 0.00 -5.15 1009.40 -798.00 11149.30 13.21 2.80 2.10 43.08 -9.03 -0.09 0.00 0.00 2.30 3.70 1.70 -1.00 0.00 0.00 -4.60 909.30 -799.00 8472.70 10.67 1.40 2.10 24.68 -8.88 -0.17 0.00 0.00 1.24 2.79 0.80 -1.00 0.00 0.00 -6.87 792.70 -800.00 8367.70 14.12 1.80 2.10 35.95 -8.12 0.91 0.00 0.00 1.44 2.85 1.30 -1.00 0.00 0.00 -7.82 687.70 -801.00 5539.30 12.31 2.60 2.10 39.13 -7.38 1.19 0.00 0.00 2.42 3.99 2.00 -1.00 0.00 0.00 -4.07 419.30 -802.00 5017.60 13.04 2.80 2.10 44.74 -6.90 -1.66 0.00 0.00 2.43 4.13 2.20 -1.00 0.00 0.00 -4.30 2457.60 -803.00 4910.70 11.07 1.50 2.10 24.08 -7.85 0.67 0.00 0.00 1.29 1.36 1.00 -1.00 0.00 0.00 -6.85 2350.70 -804.00 6122.60 15.33 1.90 2.10 42.92 -7.17 0.41 0.00 0.00 1.64 3.32 1.40 -1.00 0.00 0.00 -7.48 1002.60 -805.00 6390.40 11.61 1.70 2.10 31.61 -7.48 -0.82 0.00 0.00 1.41 3.10 1.10 -1.00 0.00 0.00 -6.57 1270.40 -806.00 7367.90 10.85 2.00 2.10 30.65 -7.56 0.54 0.00 0.00 1.86 2.98 1.70 -1.00 0.00 0.00 -4.66 2247.90 -807.00 6430.80 15.41 3.10 2.10 51.41 -6.48 -0.49 0.00 0.00 2.62 3.81 2.30 -1.00 0.00 0.00 -4.71 1310.80 -808.00 25835.70 10.61 1.50 2.10 23.18 -9.40 0.05 0.00 0.00 1.17 2.47 0.50 -1.00 0.00 0.00 -7.25 235.70 -809.00 25878.70 13.01 1.80 2.10 33.79 -9.31 -0.47 0.00 0.00 1.53 3.00 1.20 -1.00 0.00 0.00 -6.81 278.70 -810.00 38492.20 10.04 2.20 2.10 29.89 -7.22 0.02 0.00 0.00 2.07 3.67 1.80 -1.00 0.00 0.00 -3.87 92.20 -811.00 38246.70 16.73 1.70 2.10 40.59 -7.96 -0.06 0.00 0.00 1.39 3.02 1.10 -1.00 0.00 0.00 -9.65 2406.70 -812.00 38107.00 10.26 3.90 2.10 32.04 -8.24 1.59 0.00 0.00 1.86 2.99 1.80 -1.00 0.00 0.00 -4.42 2267.00 -813.00 38625.80 11.05 2.60 2.10 30.84 -8.15 -0.12 0.00 0.00 2.48 2.99 2.00 -1.00 0.00 0.00 -3.57 225.80 -814.00 39226.80 11.50 1.50 2.10 28.95 -8.19 -0.09 0.00 0.00 1.36 2.41 1.10 -1.00 0.00 0.00 -6.77 7.60 -815.00 39380.20 18.02 2.00 2.10 55.21 -10.90 -0.27 0.00 0.00 0.97 3.38 1.40 -1.00 0.00 0.00 -14.81 980.20 -816.00 39305.60 12.49 2.50 2.10 41.46 -7.59 0.70 0.00 0.00 1.56 3.75 1.80 -1.00 0.00 0.00 -6.42 905.60 -817.00 37951.90 10.32 3.20 2.10 31.45 -8.70 0.75 0.00 0.00 2.70 3.94 2.30 -1.00 0.00 0.00 -3.06 2111.90 -818.00 37851.30 24.14 2.20 2.10 72.75 -7.96 0.68 0.00 0.00 1.77 3.41 1.50 -1.00 0.00 0.00 -10.93 2011.30 -819.00 36106.20 13.17 2.20 2.10 41.44 -7.12 0.89 0.00 0.00 1.40 3.46 1.50 -1.00 0.00 0.00 -7.55 266.20 -820.00 35966.50 14.82 3.40 2.10 56.04 -6.73 0.82 0.00 0.00 3.24 4.85 2.90 -1.00 0.00 0.00 -3.66 152.10 -821.00 35833.90 15.47 2.90 2.10 50.68 -8.02 -0.11 0.00 0.00 2.53 3.82 1.90 -1.00 0.00 0.00 -4.89 2553.90 -822.00 36684.20 12.94 1.80 2.10 34.39 -6.92 -0.14 0.00 0.00 1.39 3.08 1.10 -1.00 0.00 0.00 -7.44 844.20 -823.00 37272.70 15.31 2.70 2.10 47.27 -5.07 0.59 0.00 0.00 2.50 3.74 1.80 -1.00 0.00 0.00 -4.90 1432.70 -824.00 37609.90 10.04 3.30 2.10 35.21 -7.43 -0.20 0.00 0.00 2.82 3.95 2.40 -1.00 0.00 0.00 -2.85 1769.90 -825.00 37344.50 17.23 1.80 2.10 46.63 -7.55 -0.92 0.00 0.00 1.58 3.13 1.20 -1.00 0.00 0.00 -8.71 1504.50 -826.00 39696.50 14.37 1.80 2.10 35.33 -8.36 0.07 0.00 0.00 1.32 3.01 1.10 -1.00 0.00 0.00 -8.74 1296.50 -827.00 40228.40 23.01 2.20 2.10 75.34 -7.72 0.35 0.00 0.00 2.00 3.75 1.80 -1.00 0.00 0.00 -9.21 1828.40 -828.00 46003.30 14.54 4.60 2.10 68.95 -7.54 0.87 0.00 0.00 4.21 5.82 3.90 -1.00 0.00 0.00 -2.76 2483.30 -829.00 45737.80 13.10 2.00 2.10 31.63 -6.52 1.25 0.00 0.00 1.81 2.74 1.60 -1.00 0.00 0.00 -5.79 2217.80 -830.00 45228.70 14.60 4.60 2.10 68.46 -7.52 0.32 0.00 0.00 3.75 5.45 3.50 -1.00 0.00 0.00 -3.11 1708.70 -831.00 46113.20 13.38 1.30 2.10 30.48 -7.36 0.76 0.00 0.00 1.11 2.70 0.80 -1.00 0.00 0.00 -9.65 33.20 -832.00 46144.30 13.48 2.00 2.10 39.66 -8.68 0.13 0.00 0.00 1.82 3.54 1.60 -1.00 0.00 0.00 -5.91 64.30 -833.00 46719.10 17.91 1.70 2.10 46.35 -8.15 -0.31 0.00 0.00 1.47 3.13 1.20 -1.00 0.00 0.00 -9.75 639.10 -834.00 46165.50 11.28 4.10 2.10 40.98 -8.62 1.41 0.00 0.00 3.84 3.75 2.30 -1.00 0.00 0.00 -2.35 85.50 -835.00 45195.20 22.01 2.00 2.10 59.85 -6.85 1.14 0.00 0.00 1.39 2.97 1.00 -1.00 0.00 0.00 -12.63 1675.20 -836.00 44873.60 24.37 2.80 2.10 80.72 -8.03 0.39 0.00 0.00 1.72 3.63 1.70 -1.00 0.00 0.00 -11.37 1353.60 -837.00 42614.70 22.17 3.20 2.10 74.92 -7.60 0.43 0.00 0.00 1.81 3.59 1.60 -1.00 0.00 0.00 -9.78 246.70 -838.00 42395.90 11.98 2.10 2.10 33.88 -8.13 0.29 0.00 0.00 1.27 3.38 1.40 -1.00 0.00 0.00 -7.57 1435.90 -839.00 41752.10 10.50 4.00 2.10 38.98 -6.85 -0.98 0.00 0.00 3.42 4.44 3.10 -1.00 0.00 0.00 -2.46 792.10 -840.00 42999.80 19.01 2.40 2.10 56.80 -7.30 -2.57 0.00 0.00 2.07 3.63 1.70 -1.00 0.00 0.00 -7.35 2039.80 -841.00 44207.50 11.57 1.70 2.10 29.15 -6.29 1.29 0.00 0.00 1.59 3.06 1.20 -1.00 0.00 0.00 -5.80 687.50 -842.00 44484.40 21.20 2.80 2.10 69.02 -7.38 -0.82 0.00 0.00 2.20 3.85 1.90 -1.00 0.00 0.00 -7.70 964.40 -843.00 44366.30 11.90 2.70 2.10 39.95 -8.01 -0.07 0.00 0.00 2.47 4.08 2.10 -1.00 0.00 0.00 -3.85 846.30 -844.00 35730.60 25.75 2.00 2.10 74.12 -7.17 -0.39 0.00 0.00 1.83 3.38 1.40 -1.00 0.00 0.00 -11.28 2450.60 -845.00 35672.00 10.95 2.10 2.10 32.40 -6.82 -1.05 0.00 0.00 1.85 3.56 1.60 -1.00 0.00 0.00 -4.74 2392.00 -846.00 29058.20 14.00 2.40 2.10 43.27 -6.18 -0.19 0.00 0.00 2.16 3.42 1.50 -1.00 0.00 0.00 -5.18 27.80 -847.00 28816.00 10.99 2.90 2.10 37.74 -9.70 -1.08 0.00 0.00 2.44 4.12 2.20 -1.00 0.00 0.00 -3.60 656.00 -848.00 28795.20 25.62 3.00 2.10 88.40 -7.50 1.98 0.00 0.00 2.64 4.05 2.10 -1.00 0.00 0.00 -7.76 635.20 -849.00 29209.90 14.00 2.20 2.10 39.19 -8.08 -0.35 0.00 0.00 1.85 3.12 1.80 -1.00 0.00 0.00 -6.06 1049.90 -850.00 29743.80 11.99 2.70 2.10 38.99 -8.00 -0.69 0.00 0.00 2.30 4.07 2.10 -1.00 0.00 0.00 -4.18 1583.80 -851.00 30578.90 16.36 2.70 2.10 44.61 -6.70 0.97 0.00 0.00 2.11 3.57 1.60 -1.00 0.00 0.00 -6.21 2418.90 -852.00 30388.50 19.81 2.60 2.10 68.10 -6.88 0.34 0.00 0.00 1.31 3.98 2.00 -1.00 0.00 0.00 -12.12 2228.50 -853.00 28647.20 15.72 2.70 2.10 54.71 -6.25 -0.25 0.00 0.00 1.72 4.22 2.30 -1.00 0.00 0.00 -7.31 487.20 -854.00 27731.40 13.82 2.50 2.10 46.53 -8.75 1.17 0.00 0.00 2.09 3.92 2.00 -1.00 0.00 0.00 -5.29 2131.40 -855.00 26915.80 12.34 3.20 2.10 35.78 -7.19 -0.11 0.00 0.00 2.66 3.09 2.20 -1.00 0.00 0.00 -3.72 1315.80 -856.00 26657.80 13.19 2.10 2.10 36.24 -7.07 -0.33 0.00 0.00 1.72 3.39 1.40 -1.00 0.00 0.00 -6.14 1057.80 -857.00 26319.30 16.29 3.80 2.10 61.56 -6.36 -1.09 0.00 0.00 2.82 4.02 2.70 -1.00 0.00 0.00 -4.63 719.30 -858.00 27021.10 12.90 2.90 2.10 45.00 -7.61 2.76 0.00 0.00 2.43 4.15 2.20 -1.00 0.00 0.00 -4.24 1421.10 -859.00 27047.20 14.53 2.20 2.10 47.52 -8.50 -0.64 0.00 0.00 1.77 3.61 1.70 -1.00 0.00 0.00 -6.57 1447.20 -860.00 27420.80 10.63 2.20 2.10 34.76 -8.68 -0.72 0.00 0.00 2.06 3.71 1.90 -1.00 0.00 0.00 -4.14 1820.80 -861.00 27080.80 13.90 3.40 2.10 43.74 -8.62 1.93 0.00 0.00 3.09 3.43 2.20 -1.00 0.00 0.00 -3.60 1480.80 -862.00 30781.40 17.59 2.60 2.10 59.14 -6.88 -0.44 0.00 0.00 1.73 3.91 2.00 -1.00 0.00 0.00 -8.14 61.40 -863.00 31098.50 14.63 3.40 2.10 53.31 -6.75 1.56 0.00 0.00 3.15 4.28 2.70 -1.00 0.00 0.00 -3.72 378.50 -864.00 34992.50 13.24 2.60 2.10 37.37 -7.10 -1.02 0.00 0.00 2.29 3.19 1.90 -1.00 0.00 0.00 -4.62 1712.50 -865.00 34292.40 13.04 2.00 2.10 39.10 -8.12 0.21 0.00 0.00 1.77 3.30 1.30 -1.00 0.00 0.00 -5.88 65.20 -866.00 34259.00 12.02 2.20 2.10 33.93 -7.16 -0.66 0.00 0.00 1.65 3.40 1.50 -1.00 0.00 0.00 -5.83 31.80 -867.00 35022.60 19.51 2.20 2.10 60.28 -9.03 0.76 0.00 0.00 1.58 3.51 1.60 -1.00 0.00 0.00 -9.88 1742.60 -868.00 35132.20 10.24 2.30 2.10 32.17 -7.08 -1.12 0.00 0.00 2.08 3.57 1.90 -1.00 0.00 0.00 -3.94 162.60 -869.00 35490.30 11.26 2.10 2.10 29.65 -6.28 0.56 0.00 0.00 1.94 3.00 1.00 -1.00 0.00 0.00 -4.65 2210.30 -870.00 35188.90 11.69 1.80 2.10 32.99 -6.93 1.48 0.00 0.00 1.47 3.25 1.30 -1.00 0.00 0.00 -6.36 1908.90 -871.00 33778.70 12.56 2.90 2.10 38.00 -6.84 -0.32 0.00 0.00 2.66 3.15 2.00 -1.00 0.00 0.00 -3.77 498.70 -872.00 33189.10 12.09 3.20 2.10 34.80 -5.43 0.97 0.00 0.00 2.55 3.26 1.30 -1.00 0.00 0.00 -3.80 2469.10 -873.00 32086.00 20.64 1.70 2.10 59.87 -7.41 0.16 0.00 0.00 1.52 3.23 1.30 -1.00 0.00 0.00 -10.88 1366.00 -874.00 31961.50 18.47 2.60 2.10 55.37 -8.07 -0.56 0.00 0.00 2.23 3.33 1.70 -1.00 0.00 0.00 -6.63 1241.50 -875.00 31503.50 13.92 2.30 2.10 35.30 -7.07 1.51 0.00 0.00 2.06 3.00 1.10 -1.00 0.00 0.00 -5.41 783.50 -876.00 32520.40 16.37 1.80 2.10 41.05 -7.50 0.28 0.00 0.00 1.63 3.05 1.10 -1.00 0.00 0.00 -8.05 1800.40 -877.00 32591.60 14.53 2.70 2.10 42.12 -6.94 0.90 0.00 0.00 2.42 3.10 1.10 -1.00 0.00 0.00 -4.80 1871.60 -878.00 32967.50 13.40 2.40 2.10 40.00 -6.89 1.64 0.00 0.00 1.83 3.08 1.50 -1.00 0.00 0.00 -5.87 2247.50 -879.00 32718.40 14.28 3.90 2.10 58.35 -8.14 0.94 0.00 0.00 3.68 5.17 3.20 -1.00 0.00 0.00 -3.10 1998.40 -880.00 91451.70 24.42 3.70 2.10 99.86 -7.74 -0.07 0.00 0.00 3.16 4.88 2.90 -1.00 0.00 0.00 -6.18 520.50 -881.00 87254.30 13.39 1.60 2.10 33.52 -9.01 1.09 0.00 0.00 1.33 3.01 1.10 -1.00 0.00 0.00 -8.06 163.10 -882.00 126782.50 15.08 1.90 2.10 38.96 -7.86 0.18 0.00 0.00 1.71 3.16 1.20 -1.00 0.00 0.00 -7.04 139.30 -883.00 126269.30 18.43 1.80 2.10 51.26 -8.89 -0.36 0.00 0.00 1.27 3.31 1.40 -1.00 0.00 0.00 -11.61 778.10 -884.00 126210.90 18.87 1.90 2.10 51.76 -8.15 -0.74 0.00 0.00 1.19 3.11 1.20 -1.00 0.00 0.00 -12.66 719.70 -885.00 126974.00 25.44 1.60 2.10 68.74 -8.02 -0.34 0.00 0.00 1.38 3.03 1.10 -1.00 0.00 0.00 -14.76 330.80 -886.00 149258.10 17.07 2.30 2.10 51.97 -8.04 -0.13 0.00 0.00 2.02 3.75 1.80 -1.00 0.00 0.00 -6.76 291.70 -887.00 127051.70 11.11 2.60 2.10 36.56 -8.97 1.96 0.00 0.00 2.41 3.48 2.30 -1.00 0.00 0.00 -3.68 408.50 -888.00 148741.90 10.81 1.70 2.10 26.54 -8.12 1.43 0.00 0.00 1.50 2.42 1.20 -1.00 0.00 0.00 -5.77 1055.50 -889.00 126073.70 13.17 1.50 2.10 29.51 -7.83 -0.86 0.00 0.00 0.73 2.60 0.60 -1.00 0.00 0.00 -14.37 582.50 -890.00 125965.30 22.41 1.90 2.10 65.55 -9.27 -2.19 0.00 0.00 1.42 3.39 1.40 -1.00 0.00 0.00 -12.63 474.10 -891.00 124887.10 20.45 3.20 2.10 64.86 -7.30 -1.32 0.00 0.00 1.97 3.53 1.60 -1.00 0.00 0.00 -8.30 675.90 -892.00 124689.40 18.76 2.40 2.10 57.87 -8.12 0.34 0.00 0.00 1.41 3.61 1.70 -1.00 0.00 0.00 -10.68 478.20 -893.00 125125.00 16.63 2.80 2.10 60.01 -7.58 0.14 0.00 0.00 2.45 4.09 2.10 -1.00 0.00 0.00 -5.42 913.80 -894.00 125627.50 23.08 2.70 2.10 80.15 -8.29 -0.22 0.00 0.00 1.84 3.72 1.80 -1.00 0.00 0.00 -10.02 136.30 -895.00 125889.30 12.32 2.20 2.10 35.17 -8.72 0.28 0.00 0.00 1.68 3.16 1.40 -1.00 0.00 0.00 -5.86 398.10 -896.00 125719.30 11.97 3.10 2.10 39.92 -8.32 -1.30 0.00 0.00 2.86 3.02 2.40 -1.00 0.00 0.00 -3.35 228.10 -897.00 127253.30 19.26 2.60 2.10 62.20 -9.89 -1.55 0.00 0.00 1.65 3.89 1.90 -1.00 0.00 0.00 -9.32 610.10 -898.00 127575.40 16.61 2.10 2.10 52.63 -8.72 -1.53 0.00 0.00 1.60 3.38 1.40 -1.00 0.00 0.00 -8.29 932.20 -899.00 129077.90 10.89 3.80 2.10 40.94 -10.44 -1.06 0.00 0.00 3.41 5.00 3.10 -1.00 0.00 0.00 -2.55 591.50 -900.00 148442.90 13.07 2.70 2.10 45.82 -7.80 0.60 0.00 0.00 2.54 4.25 2.30 -1.00 0.00 0.00 -4.11 756.50 -901.00 129207.40 19.39 2.40 2.10 59.40 -13.45 0.24 0.00 0.00 2.06 3.67 1.70 -1.00 0.00 0.00 -7.52 721.00 -902.00 129365.90 24.28 2.50 2.10 84.58 -10.25 0.18 0.00 0.00 1.65 4.07 2.10 -1.00 0.00 0.00 -11.75 879.50 -903.00 129828.10 11.86 1.10 2.10 24.94 -9.55 1.51 0.00 0.00 0.66 2.33 0.40 -1.00 0.00 0.00 -14.31 1341.70 -904.00 129732.00 23.31 2.50 2.10 72.01 -8.55 -0.31 0.00 0.00 2.02 3.60 1.70 -1.00 0.00 0.00 -9.24 1245.60 -905.00 128997.80 19.55 3.00 2.10 70.45 -10.19 -0.73 0.00 0.00 1.65 3.96 2.00 -1.00 0.00 0.00 -9.51 511.40 -906.00 128921.40 17.18 2.80 2.10 58.42 -10.52 -1.45 0.00 0.00 2.07 3.99 2.00 -1.00 0.00 0.00 -6.63 435.00 -907.00 148676.50 19.81 2.60 2.10 64.66 -9.24 -0.85 0.00 0.00 2.14 3.92 2.00 -1.00 0.00 0.00 -7.40 990.10 -908.00 127761.30 10.51 1.10 2.10 22.13 -8.37 4.28 0.00 0.00 0.97 2.65 0.70 -1.00 0.00 0.00 -8.68 1118.10 -909.00 127827.80 15.64 2.10 2.10 45.92 -9.87 -2.05 0.00 0.00 1.84 3.35 1.40 -1.00 0.00 0.00 -6.82 1184.60 -910.00 128016.40 12.24 1.20 2.10 27.74 -9.56 -1.30 0.00 0.00 1.04 2.76 0.80 -1.00 0.00 0.00 -9.44 221.20 -911.00 128685.70 24.67 2.00 2.10 68.69 -9.18 -0.80 0.00 0.00 1.13 3.15 1.20 -1.00 0.00 0.00 -17.45 199.30 -912.00 128161.30 25.08 2.40 2.10 77.07 -9.87 0.06 0.00 0.00 2.12 3.73 1.80 -1.00 0.00 0.00 -9.45 366.10 -913.00 124662.70 10.54 3.80 2.10 44.85 -7.37 -0.61 0.00 0.00 3.64 4.95 3.20 -1.00 0.00 0.00 -2.32 451.50 -914.00 124353.90 10.89 5.00 2.10 58.48 -8.39 1.05 0.00 0.00 4.68 5.99 4.00 -1.00 0.00 0.00 -1.86 142.70 -915.00 120448.50 12.97 3.20 2.10 42.80 -8.04 -1.93 0.00 0.00 2.73 4.45 2.50 -1.00 0.00 0.00 -3.80 77.30 -916.00 120018.60 14.99 2.60 2.10 45.86 -8.88 -0.02 0.00 0.00 2.31 3.74 1.80 -1.00 0.00 0.00 -5.20 927.40 -917.00 120527.50 16.22 3.70 2.10 66.66 -8.71 0.38 0.00 0.00 3.43 5.00 3.10 -1.00 0.00 0.00 -3.78 156.30 -918.00 120692.40 11.35 3.90 2.10 44.26 -7.88 0.17 0.00 0.00 3.50 3.62 3.30 -1.00 0.00 0.00 -2.59 321.20 -919.00 122066.40 21.79 2.40 2.10 68.15 -8.15 0.45 0.00 0.00 2.01 3.74 1.80 -1.00 0.00 0.00 -8.66 415.20 -920.00 121703.10 14.58 2.80 2.10 48.97 -8.40 0.42 0.00 0.00 2.53 4.06 2.10 -1.00 0.00 0.00 -4.61 51.90 -921.00 119879.20 10.17 1.30 2.10 25.49 -7.82 -0.92 0.00 0.00 1.10 2.71 0.80 -1.00 0.00 0.00 -7.37 788.00 -922.00 119447.10 12.79 2.70 2.10 38.43 -7.81 -0.90 0.00 0.00 2.40 3.33 2.00 -1.00 0.00 0.00 -4.25 355.90 -923.00 118007.30 16.88 2.10 2.10 53.76 -7.91 0.93 0.00 0.00 1.74 3.75 1.80 -1.00 0.00 0.00 -7.76 196.10 -924.00 117790.80 28.36 3.40 2.10 100.30 -7.21 0.28 0.00 0.00 2.09 3.82 1.90 -1.00 0.00 0.00 -10.85 1259.60 -925.00 118945.90 17.29 2.30 2.10 54.33 -7.27 1.45 0.00 0.00 2.09 3.51 1.60 -1.00 0.00 0.00 -6.61 1134.70 -926.00 118984.10 12.73 1.60 2.10 31.63 -9.04 -0.71 0.00 0.00 0.96 3.03 1.10 -1.00 0.00 0.00 -10.66 1172.90 -927.00 150792.80 12.02 1.80 2.10 31.80 -8.44 0.78 0.00 0.00 1.52 3.29 1.50 -1.00 0.00 0.00 -6.31 546.40 -928.00 151038.10 14.28 2.70 2.10 40.84 -7.00 1.26 0.00 0.00 1.79 3.74 1.80 -1.00 0.00 0.00 -6.37 791.70 -929.00 150594.60 10.50 2.70 2.10 32.65 -9.58 -0.60 0.00 0.00 2.57 3.49 2.10 -1.00 0.00 0.00 -3.27 348.20 -930.00 122240.50 49.50 4.70 2.10 198.17 -8.21 2.99 0.00 0.00 2.78 4.31 2.40 -1.00 0.00 0.00 -14.24 589.30 -931.00 123833.60 14.49 2.10 2.10 39.66 -9.30 0.68 0.00 0.00 1.82 3.49 1.50 -1.00 0.00 0.00 -6.37 902.40 -932.00 123817.70 15.98 1.90 2.10 41.38 -7.26 -1.24 0.00 0.00 1.03 2.72 0.80 -1.00 0.00 0.00 -12.37 886.50 -933.00 91846.40 12.13 1.90 2.10 32.95 -6.76 0.65 0.00 0.00 1.66 3.30 1.40 -1.00 0.00 0.00 -5.84 915.20 -934.00 123946.10 10.10 4.30 2.10 35.89 -8.36 1.39 0.00 0.00 3.30 2.32 1.60 -1.00 0.00 0.00 -2.45 1014.90 -935.00 149987.80 37.97 2.40 2.10 123.99 -8.58 -0.39 0.00 0.00 1.61 3.69 1.70 -1.00 0.00 0.00 -18.81 1021.40 -936.00 124137.00 15.29 2.40 2.10 45.81 -7.37 1.58 0.00 0.00 1.44 3.47 1.50 -1.00 0.00 0.00 -8.47 1205.80 -937.00 123707.30 21.23 3.50 2.10 79.79 -6.86 -1.37 0.00 0.00 2.95 3.89 2.60 -1.00 0.00 0.00 -5.76 776.10 -938.00 123386.00 14.10 1.70 2.10 33.11 -8.73 0.50 0.00 0.00 1.23 2.61 0.70 -1.00 0.00 0.00 -9.16 454.80 -939.00 122885.50 11.38 2.60 2.10 37.51 -9.46 0.13 0.00 0.00 2.44 4.01 2.10 -1.00 0.00 0.00 -3.72 1234.30 -940.00 122696.40 10.50 2.30 2.10 25.35 -8.24 0.01 0.00 0.00 1.66 1.78 0.90 -1.00 0.00 0.00 -5.06 1045.20 -941.00 122975.80 10.67 1.60 2.10 25.11 -10.05 1.21 0.00 0.00 1.22 3.11 1.20 -1.00 0.00 0.00 -7.00 44.60 -942.00 150423.70 14.62 2.30 2.10 44.43 -6.76 -1.68 0.00 0.00 2.06 3.78 1.80 -1.00 0.00 0.00 -5.67 177.30 -943.00 150045.10 27.10 2.50 2.10 78.32 -8.20 0.10 0.00 0.00 1.80 3.28 1.30 -1.00 0.00 0.00 -12.01 1078.70 -944.00 123084.60 22.66 2.20 2.10 71.99 -9.38 0.85 0.00 0.00 1.23 3.58 1.60 -1.00 0.00 0.00 -14.73 153.40 -945.00 129926.90 21.25 2.20 2.10 60.04 -9.03 -1.30 0.00 0.00 1.79 3.45 1.50 -1.00 0.00 0.00 -9.48 1440.50 -946.00 130093.40 10.13 1.60 2.10 22.97 -9.65 -1.24 0.00 0.00 1.42 2.81 1.20 -1.00 0.00 0.00 -5.71 1607.00 -947.00 142807.80 21.63 2.30 2.10 69.87 -7.60 -0.24 0.00 0.00 1.60 3.67 1.70 -1.00 0.00 0.00 -10.83 241.40 -948.00 134813.30 12.23 1.30 2.10 27.73 -7.63 1.27 0.00 0.00 1.00 2.83 0.90 -1.00 0.00 0.00 -9.74 1206.90 -949.00 142737.20 14.89 2.10 2.10 42.54 -7.00 -0.40 0.00 0.00 1.75 3.43 1.50 -1.00 0.00 0.00 -6.80 170.80 -950.00 135122.40 13.48 3.10 2.10 38.03 -7.45 0.23 0.00 0.00 2.57 2.34 2.10 -1.00 0.00 0.00 -4.20 236.00 -951.00 135799.80 10.67 3.30 2.10 41.49 -7.53 0.44 0.00 0.00 3.03 4.85 2.90 -1.00 0.00 0.00 -2.82 913.40 -952.00 135337.30 14.07 2.30 2.10 40.35 -8.00 3.69 0.00 0.00 2.02 3.43 1.50 -1.00 0.00 0.00 -5.57 450.90 -953.00 134517.20 10.22 2.20 2.10 25.00 -9.77 -0.53 0.00 0.00 1.88 1.90 1.40 -1.00 0.00 0.00 -4.36 910.80 -954.00 134451.00 19.08 3.00 2.10 71.01 -8.09 -0.15 0.00 0.00 2.71 4.33 2.40 -1.00 0.00 0.00 -5.64 844.60 -955.00 133659.20 10.46 1.70 2.10 24.52 -9.37 -1.66 0.00 0.00 1.08 1.97 1.00 -1.00 0.00 0.00 -7.73 52.80 -956.00 143346.90 37.23 2.60 2.10 116.98 -6.25 1.47 0.00 0.00 1.32 3.30 1.30 -1.00 0.00 0.00 -22.52 780.50 -957.00 134030.80 42.22 3.80 2.10 164.56 -8.01 0.16 0.00 0.00 2.57 4.42 2.50 -1.00 0.00 0.00 -13.16 424.40 -958.00 134169.30 14.44 3.30 2.10 46.52 -10.17 0.46 0.00 0.00 2.81 4.04 2.10 -1.00 0.00 0.00 -4.11 562.90 -959.00 142934.70 14.01 1.20 2.10 33.26 -7.22 -1.00 0.00 0.00 0.99 2.67 0.70 -1.00 0.00 0.00 -11.29 368.30 -960.00 134272.70 16.42 2.80 2.10 54.73 -9.05 -0.30 0.00 0.00 2.56 4.05 2.10 -1.00 0.00 0.00 -5.14 666.30 -961.00 135955.30 11.12 1.70 2.10 31.01 -8.80 -2.07 0.00 0.00 1.35 3.17 1.20 -1.00 0.00 0.00 -6.58 1068.90 -962.00 137186.80 21.33 2.30 2.10 64.79 -8.30 0.30 0.00 0.00 1.81 3.57 1.60 -1.00 0.00 0.00 -9.45 1020.40 -963.00 140257.70 17.19 2.40 2.10 57.47 -7.82 0.63 0.00 0.00 2.09 3.64 1.70 -1.00 0.00 0.00 -6.57 251.30 -964.00 140010.00 13.00 1.90 2.10 29.25 -9.16 0.17 0.00 0.00 0.95 2.50 0.60 -1.00 0.00 0.00 -10.96 3.60 -965.00 142144.70 20.70 1.90 2.10 61.94 -8.78 0.23 0.00 0.00 1.69 3.39 1.40 -1.00 0.00 0.00 -9.80 858.30 -966.00 141069.30 17.80 2.40 2.10 50.73 -8.31 -2.05 0.00 0.00 2.01 3.47 1.50 -1.00 0.00 0.00 -7.10 1062.90 -967.00 141465.20 19.06 2.80 2.10 54.26 -8.34 -0.48 0.00 0.00 1.72 3.31 1.40 -1.00 0.00 0.00 -8.89 178.80 -968.00 141414.70 20.58 2.00 2.10 60.08 -7.46 1.70 0.00 0.00 1.40 3.30 1.40 -1.00 0.00 0.00 -11.76 128.30 -969.00 142316.80 19.95 1.50 2.10 50.43 -7.96 -1.76 0.00 0.00 1.28 2.95 1.00 -1.00 0.00 0.00 -12.46 1030.40 -970.00 139988.10 14.66 4.20 2.10 37.01 -7.32 -0.60 0.00 0.00 1.12 2.65 0.70 -1.00 0.00 0.00 -10.46 1261.70 -971.00 138132.70 10.91 2.70 2.10 34.77 -8.19 -1.31 0.00 0.00 2.49 3.09 1.90 -1.00 0.00 0.00 -3.51 686.30 -972.00 138103.00 12.20 2.10 2.10 34.37 -9.22 -0.67 0.00 0.00 1.57 3.19 1.20 -1.00 0.00 0.00 -6.23 656.60 -973.00 138497.90 12.92 2.10 2.10 34.71 -8.78 -1.36 0.00 0.00 1.84 2.99 1.70 -1.00 0.00 0.00 -5.60 1051.50 -974.00 138517.20 14.72 1.30 2.10 32.00 -9.44 1.51 0.00 0.00 1.11 2.38 0.90 -1.00 0.00 0.00 -10.57 1070.80 -975.00 138866.10 28.22 1.70 2.10 76.40 -8.63 0.34 0.00 0.00 1.23 3.05 1.10 -1.00 0.00 0.00 -18.41 139.70 -976.00 138752.80 13.57 2.30 2.10 35.59 -10.03 1.02 0.00 0.00 1.55 3.44 1.50 -1.00 0.00 0.00 -7.00 26.40 -977.00 133644.10 10.45 3.40 2.10 31.84 -7.92 0.83 0.00 0.00 2.48 3.89 1.90 -1.00 0.00 0.00 -3.37 37.70 -978.00 143625.00 10.97 2.40 2.10 30.31 -6.64 1.09 0.00 0.00 2.20 3.37 1.60 -1.00 0.00 0.00 -3.99 1058.60 -979.00 130522.30 10.34 2.20 2.10 25.17 -12.15 1.14 0.00 0.00 1.88 2.65 1.20 -1.00 0.00 0.00 -4.39 2035.90 -980.00 130433.50 16.31 3.00 2.10 50.92 -10.73 -0.80 0.00 0.00 2.32 3.61 1.70 -1.00 0.00 0.00 -5.63 1947.10 -981.00 145994.70 12.26 2.40 2.10 32.72 -7.80 -1.15 0.00 0.00 1.96 3.53 1.60 -1.00 0.00 0.00 -5.01 868.30 -982.00 130695.10 14.19 2.40 2.10 45.35 -10.22 -1.30 0.00 0.00 1.90 3.79 1.80 -1.00 0.00 0.00 -5.97 2208.70 -983.00 145593.60 10.21 1.60 2.10 25.62 -7.98 -0.87 0.00 0.00 1.38 2.87 0.90 -1.00 0.00 0.00 -5.90 467.20 -984.00 145743.70 18.51 2.50 2.10 58.84 -7.61 -1.63 0.00 0.00 2.01 3.64 1.70 -1.00 0.00 0.00 -7.37 617.30 -985.00 130367.10 34.85 2.80 2.10 117.97 -11.27 -0.48 0.00 0.00 1.09 3.80 1.90 -1.00 0.00 0.00 -25.49 1880.70 -986.00 146892.30 14.51 2.50 2.10 49.21 -6.91 -0.87 0.00 0.00 2.13 3.84 1.90 -1.00 0.00 0.00 -5.46 485.90 -987.00 130217.50 15.03 2.20 2.10 42.03 -9.42 0.29 0.00 0.00 2.00 3.30 1.70 -1.00 0.00 0.00 -6.02 1731.10 -988.00 130180.80 10.08 2.30 2.10 28.80 -11.25 0.39 0.00 0.00 2.04 3.47 1.50 -1.00 0.00 0.00 -3.95 1694.40 -989.00 130255.50 16.18 3.50 2.10 54.93 -9.79 -0.88 0.00 0.00 2.47 3.66 1.70 -1.00 0.00 0.00 -5.24 1769.10 -990.00 130287.80 22.13 2.80 2.10 74.38 -10.99 -0.07 0.00 0.00 1.67 3.98 2.00 -1.00 0.00 0.00 -10.60 1801.40 -991.00 147050.30 22.46 3.20 2.10 85.08 -7.85 0.36 0.00 0.00 2.80 4.48 2.50 -1.00 0.00 0.00 -6.43 643.90 -992.00 148290.00 12.55 1.90 2.10 36.46 -8.66 1.12 0.00 0.00 1.12 3.41 1.50 -1.00 0.00 0.00 -9.00 603.60 -993.00 130817.80 33.08 3.00 2.10 107.89 -10.34 -0.22 0.00 0.00 2.25 3.67 1.70 -1.00 0.00 0.00 -11.75 2331.40 -994.00 130940.90 15.56 2.20 11.10 159.62 -9.32 0.35 0.00 0.00 1.95 3.87 1.60 -1.00 0.00 0.00 -6.38 227.30 -995.00 131776.60 11.29 3.00 2.10 38.69 -9.10 0.12 0.00 0.00 2.49 4.24 2.30 -1.00 0.00 0.00 -3.63 730.20 -996.00 131716.80 13.48 2.00 2.10 35.39 -11.17 -1.76 0.00 0.00 1.72 2.78 1.30 -1.00 0.00 0.00 -6.29 670.40 -997.00 132219.80 10.83 2.20 2.10 30.94 -9.28 0.31 0.00 0.00 1.95 3.54 1.60 -1.00 0.00 0.00 -4.45 1173.40 -998.00 132662.70 10.25 3.00 2.10 36.97 -8.95 -0.69 0.00 0.00 2.83 3.65 2.10 -1.00 0.00 0.00 -2.90 336.30 -999.00 133007.90 14.35 2.40 2.10 38.38 -11.65 -1.94 0.00 0.00 1.81 2.93 1.00 -1.00 0.00 0.00 -6.34 681.50 -1000.00 132900.90 14.58 2.10 2.10 44.23 -11.15 1.30 0.00 0.00 1.57 3.56 1.60 -1.00 0.00 0.00 -7.45 574.50 -1001.00 131703.90 11.96 1.90 2.10 32.16 -10.09 2.10 0.00 0.00 1.68 3.52 1.60 -1.00 0.00 0.00 -5.69 657.50 -1002.00 144679.70 26.71 2.50 2.10 85.01 -7.46 1.66 0.00 0.00 1.94 3.58 1.60 -1.00 0.00 0.00 -10.99 833.30 -1003.00 131031.70 23.70 3.80 2.10 86.51 -9.89 0.44 0.00 0.00 3.47 4.53 2.60 -1.00 0.00 0.00 -5.46 2545.30 -1004.00 145358.70 18.79 1.80 2.10 51.32 -8.04 -0.69 0.00 0.00 1.35 3.16 1.20 -1.00 0.00 0.00 -11.11 232.30 -1005.00 145329.90 22.80 2.10 2.10 65.26 -7.78 -1.25 0.00 0.00 1.76 3.15 1.20 -1.00 0.00 0.00 -10.35 203.50 -1006.00 145236.00 15.37 2.00 2.10 46.91 -7.99 1.65 0.00 0.00 1.57 3.25 1.30 -1.00 0.00 0.00 -7.80 109.60 -1007.00 144947.10 16.32 2.40 2.10 49.50 -7.53 -0.49 0.00 0.00 2.11 3.77 1.80 -1.00 0.00 0.00 -6.18 1100.70 -1008.00 131239.40 14.55 1.90 2.10 38.67 -9.42 2.02 0.00 0.00 1.72 2.81 1.60 -1.00 0.00 0.00 -6.78 193.00 -1009.00 142078.00 14.91 1.90 2.10 39.92 -7.99 -0.42 0.00 0.00 1.46 3.21 1.40 -1.00 0.00 0.00 -8.16 791.60 -1010.00 117658.40 26.19 2.90 2.10 96.52 -9.96 0.34 0.00 0.00 2.20 4.22 2.30 -1.00 0.00 0.00 -9.51 1127.20 -1011.00 153713.60 18.06 1.80 2.10 50.54 -9.54 1.13 0.00 0.00 1.63 3.37 1.40 -1.00 0.00 0.00 -8.87 907.20 -1012.00 103324.40 13.22 3.20 2.10 35.88 -8.41 0.46 0.00 0.00 2.77 3.05 1.10 -1.00 0.00 0.00 -3.82 873.20 -1013.00 103362.40 22.30 3.80 2.10 101.60 -10.08 -1.99 0.00 0.00 2.98 5.34 3.40 -1.00 0.00 0.00 -5.99 911.20 -1014.00 103410.00 19.93 2.30 2.10 61.80 -9.45 -0.25 0.00 0.00 1.89 3.63 1.70 -1.00 0.00 0.00 -8.41 958.80 -1015.00 104205.70 20.26 2.50 2.10 68.70 -7.80 0.34 0.00 0.00 1.80 3.58 1.60 -1.00 0.00 0.00 -9.02 474.50 -1016.00 103929.70 34.56 2.90 2.10 110.26 -7.57 -2.36 0.00 0.00 1.84 3.43 1.50 -1.00 0.00 0.00 -15.02 198.50 -1017.00 103186.60 13.24 2.00 2.10 36.74 -8.30 -0.32 0.00 0.00 1.80 3.48 1.50 -1.00 0.00 0.00 -5.89 735.40 -1018.00 102957.70 11.51 1.90 2.10 26.15 -8.12 -0.71 0.00 0.00 1.23 2.72 0.80 -1.00 0.00 0.00 -7.46 506.50 -1019.00 101804.30 18.84 2.50 2.10 61.25 -7.36 0.03 0.00 0.00 2.23 3.84 1.90 -1.00 0.00 0.00 -6.75 633.10 -1020.00 101658.10 16.58 2.90 2.10 51.39 -7.09 -0.20 0.00 0.00 2.67 4.07 2.10 -1.00 0.00 0.00 -4.97 486.90 -1021.00 102314.60 21.48 2.70 2.10 70.99 -8.00 1.25 0.00 0.00 2.14 3.79 1.80 -1.00 0.00 0.00 -8.03 1143.40 -1022.00 154037.90 13.18 2.70 2.10 43.24 -8.11 -2.03 0.00 0.00 2.53 3.17 2.10 -1.00 0.00 0.00 -4.16 1231.50 -1023.00 102874.70 22.17 1.90 2.10 62.22 -8.77 -0.04 0.00 0.00 1.61 3.42 1.50 -1.00 0.00 0.00 -11.00 423.50 -1024.00 102565.40 11.16 1.90 2.10 27.37 -8.38 0.62 0.00 0.00 1.52 2.72 1.50 -1.00 0.00 0.00 -5.88 114.20 -1025.00 104499.90 10.47 1.70 2.10 23.77 -8.22 0.18 0.00 0.00 1.48 2.66 0.90 -1.00 0.00 0.00 -5.66 768.70 -1026.00 104570.40 15.84 2.30 2.10 48.14 -8.60 -0.24 0.00 0.00 2.04 3.57 1.60 -1.00 0.00 0.00 -6.21 839.20 -1027.00 105947.10 17.92 2.00 2.10 54.71 -7.65 0.24 0.00 0.00 1.45 3.45 1.50 -1.00 0.00 0.00 -9.89 935.90 -1028.00 105857.90 13.54 4.10 2.10 51.32 -8.04 0.68 0.00 0.00 2.91 4.47 2.50 -1.00 0.00 0.00 -3.72 846.70 -1029.00 106136.30 18.12 2.40 2.10 60.79 -5.99 -0.59 0.00 0.00 2.19 3.78 1.80 -1.00 0.00 0.00 -6.63 1125.10 -1030.00 106722.90 17.25 2.10 2.10 51.82 -6.76 1.65 0.00 0.00 1.48 3.50 1.60 -1.00 0.00 0.00 -9.33 431.70 -1031.00 117590.40 23.58 4.80 2.10 92.24 -7.68 -0.39 0.00 0.00 3.04 4.53 2.60 -1.00 0.00 0.00 -6.20 1059.20 -1032.00 153096.80 11.00 3.60 2.10 34.95 -8.40 0.28 0.00 0.00 2.53 3.50 1.80 -1.00 0.00 0.00 -3.47 290.40 -1033.00 105637.80 12.91 2.90 2.10 40.68 -7.37 0.67 0.00 0.00 2.06 3.81 1.90 -1.00 0.00 0.00 -5.01 626.60 -1034.00 105551.20 16.67 2.70 2.10 52.65 -7.97 -1.25 0.00 0.00 2.14 3.69 1.70 -1.00 0.00 0.00 -6.24 540.00 -1035.00 104867.60 23.40 2.50 2.10 69.64 -8.95 0.57 0.00 0.00 1.74 3.26 1.30 -1.00 0.00 0.00 -10.79 1136.40 -1036.00 104713.20 11.68 3.70 2.10 45.15 -8.15 -0.52 0.00 0.00 3.54 3.71 3.10 -1.00 0.00 0.00 -2.64 982.00 -1037.00 105170.10 13.64 2.50 2.10 40.75 -7.57 0.73 0.00 0.00 1.82 3.24 1.30 -1.00 0.00 0.00 -6.00 158.90 -1038.00 105317.10 13.89 1.10 2.10 32.53 -7.50 -0.01 0.00 0.00 0.93 2.66 0.70 -1.00 0.00 0.00 -11.90 305.90 -1039.00 153264.40 10.12 1.40 2.10 23.95 -8.22 1.71 0.00 0.00 1.27 2.87 0.90 -1.00 0.00 0.00 -6.39 458.00 -1040.00 105377.00 17.37 2.00 2.10 46.40 -7.25 0.36 0.00 0.00 1.66 3.36 1.40 -1.00 0.00 0.00 -8.36 365.80 -1041.00 154074.60 14.56 2.70 2.10 51.42 -8.98 -2.17 0.00 0.00 1.34 3.77 1.80 -1.00 0.00 0.00 -8.72 1268.20 -1042.00 101554.80 25.53 2.90 2.10 87.26 -6.84 -0.05 0.00 0.00 2.09 3.91 2.00 -1.00 0.00 0.00 -9.78 383.60 -1043.00 95641.20 15.27 3.20 2.10 59.40 -6.78 0.34 0.00 0.00 2.59 4.27 2.30 -1.00 0.00 0.00 -4.71 870.00 -1044.00 95487.70 11.72 2.20 2.10 30.01 -7.50 -1.25 0.00 0.00 1.87 2.66 1.40 -1.00 0.00 0.00 -5.01 716.50 -1045.00 95674.30 11.14 2.00 2.10 27.86 -9.85 1.02 0.00 0.00 1.73 2.54 1.30 -1.00 0.00 0.00 -5.14 903.10 -1046.00 95990.50 16.74 2.80 2.10 59.34 -7.96 -2.57 0.00 0.00 2.59 4.45 2.50 -1.00 0.00 0.00 -5.17 1219.30 -1047.00 96326.10 14.53 2.70 2.10 37.29 -8.25 0.44 0.00 0.00 1.44 2.36 0.90 -1.00 0.00 0.00 -8.09 274.90 -1048.00 96293.00 15.55 2.50 2.10 51.08 -8.16 -0.73 0.00 0.00 1.62 4.00 2.10 -1.00 0.00 0.00 -7.68 241.80 -1049.00 155211.80 21.09 2.80 2.10 60.92 -9.24 -0.64 0.00 0.00 1.40 3.09 1.10 -1.00 0.00 0.00 -12.07 1125.40 -1050.00 95397.00 14.04 2.50 2.10 41.68 -7.21 -0.86 0.00 0.00 1.71 3.40 1.40 -1.00 0.00 0.00 -6.59 625.80 -1051.00 93137.80 17.82 2.50 2.10 60.69 -8.09 1.93 0.00 0.00 2.13 3.96 2.00 -1.00 0.00 0.00 -6.71 926.60 -1052.00 92724.70 12.82 1.70 2.10 33.09 -8.31 -3.02 0.00 0.00 0.93 2.97 1.00 -1.00 0.00 0.00 -11.02 513.50 -1053.00 155373.50 12.62 1.10 2.10 27.95 -8.84 3.01 0.00 0.00 0.68 2.29 0.30 -1.00 0.00 0.00 -14.90 7.10 -1054.00 93434.40 11.91 2.20 2.10 35.24 -7.32 -1.52 0.00 0.00 1.82 3.26 1.40 -1.00 0.00 0.00 -5.23 1223.20 -1055.00 95102.90 11.88 3.40 2.10 39.09 -7.58 -0.19 0.00 0.00 2.62 4.15 2.20 -1.00 0.00 0.00 -3.63 331.70 -1056.00 94198.30 14.99 3.00 2.10 55.07 -7.83 1.07 0.00 0.00 2.72 4.29 2.40 -1.00 0.00 0.00 -4.40 707.10 -1057.00 96723.70 16.68 2.20 2.10 48.37 -7.28 1.00 0.00 0.00 1.86 3.51 1.60 -1.00 0.00 0.00 -7.19 672.50 -1058.00 96823.20 13.55 4.20 2.10 50.18 -6.76 -0.55 0.00 0.00 3.78 2.12 0.30 -1.00 0.00 0.00 -2.87 772.00 -1059.00 99134.50 13.03 2.60 2.10 41.46 -7.57 0.39 0.00 0.00 2.12 3.45 1.80 -1.00 0.00 0.00 -4.92 523.30 -1060.00 98586.50 16.92 2.40 2.10 54.60 -8.43 -0.81 0.00 0.00 1.92 3.86 1.90 -1.00 0.00 0.00 -7.07 1255.30 -1061.00 99419.10 10.53 3.10 2.10 28.22 -6.76 -0.60 0.00 0.00 2.88 2.13 1.30 -1.00 0.00 0.00 -2.93 807.90 -1062.00 154453.30 22.03 6.50 5.00 110.24 -7.29 -0.93 0.00 0.00 2.12 5.36 1.30 -1.00 0.00 0.00 -8.30 34.10 -1063.00 101166.10 20.80 2.40 2.10 73.20 -8.28 -0.08 0.00 0.00 1.07 3.92 2.00 -1.00 0.00 0.00 -15.49 1274.90 -1064.00 100625.20 13.24 3.00 2.10 34.55 -7.56 0.61 0.00 0.00 1.60 2.78 0.80 -1.00 0.00 0.00 -6.63 734.00 -1065.00 98532.40 14.09 3.60 2.10 62.79 -7.80 -1.81 0.00 0.00 3.29 5.04 3.10 -1.00 0.00 0.00 -3.43 1201.20 -1066.00 98431.70 17.55 3.00 2.10 68.20 -6.75 1.16 0.00 0.00 2.85 4.57 2.60 -1.00 0.00 0.00 -4.93 1100.50 -1067.00 96862.90 21.14 3.90 2.10 93.07 -7.86 0.08 0.00 0.00 3.32 5.21 3.30 -1.00 0.00 0.00 -5.10 811.70 -1068.00 155176.90 21.50 2.20 2.10 57.06 -8.61 1.77 0.00 0.00 1.91 2.82 1.20 -1.00 0.00 0.00 -8.99 1090.50 -1069.00 155131.80 13.27 1.60 2.10 33.55 -8.60 0.05 0.00 0.00 1.43 3.10 1.10 -1.00 0.00 0.00 -7.45 1045.40 -1070.00 97593.80 18.90 2.30 2.10 56.75 -7.23 2.49 0.00 0.00 2.04 3.67 1.70 -1.00 0.00 0.00 -7.39 262.60 -1071.00 97788.60 23.07 3.10 2.10 72.15 -6.36 0.20 0.00 0.00 1.12 3.40 1.50 -1.00 0.00 0.00 -16.45 457.40 -1072.00 107341.00 16.93 2.30 2.10 56.77 -6.33 0.14 0.00 0.00 1.40 3.60 1.60 -1.00 0.00 0.00 -9.70 1049.80 -1073.00 107293.60 16.22 3.40 2.10 59.74 -7.71 -1.14 0.00 0.00 2.98 4.17 2.20 -1.00 0.00 0.00 -4.36 1002.40 -1074.00 112524.50 13.01 3.90 2.10 53.60 -8.04 -2.25 0.00 0.00 3.54 4.28 3.10 -1.00 0.00 0.00 -2.94 1113.30 -1075.00 151717.40 24.14 1.90 2.10 62.38 -8.08 0.70 0.00 0.00 1.20 2.96 1.10 -1.00 0.00 0.00 -16.14 191.00 -1076.00 112547.80 10.89 2.10 2.10 28.97 -11.39 -1.42 0.00 0.00 1.62 3.14 1.40 -1.00 0.00 0.00 -5.39 1136.60 -1077.00 112833.20 12.17 2.00 2.10 36.59 -8.31 -2.27 0.00 0.00 1.76 3.20 1.30 -1.00 0.00 0.00 -5.55 142.00 -1078.00 113068.80 12.62 1.60 2.10 33.86 -8.19 2.03 0.00 0.00 1.31 3.07 1.10 -1.00 0.00 0.00 -7.73 377.60 -1079.00 112986.50 20.08 2.60 2.10 63.52 -7.27 -0.38 0.00 0.00 1.48 3.62 1.70 -1.00 0.00 0.00 -10.85 295.30 -1080.00 112132.70 12.77 1.60 2.10 31.17 -8.58 0.71 0.00 0.00 1.41 2.90 0.90 -1.00 0.00 0.00 -7.24 721.50 -1081.00 112105.50 13.57 2.10 2.10 40.53 -7.07 -1.45 0.00 0.00 1.83 3.56 1.60 -1.00 0.00 0.00 -5.93 694.30 -1082.00 111536.30 10.01 2.20 2.10 26.07 -7.63 -0.82 0.00 0.00 2.00 3.52 1.60 -1.00 0.00 0.00 -4.00 125.10 -1083.00 107360.50 12.00 3.90 2.10 41.74 -8.55 0.10 0.00 0.00 3.10 3.95 2.60 -1.00 0.00 0.00 -3.09 1069.30 -1084.00 111696.60 21.30 2.60 2.10 70.86 -7.66 -0.59 0.00 0.00 2.00 3.76 1.80 -1.00 0.00 0.00 -8.54 285.40 -1085.00 111876.10 17.97 1.70 2.10 45.63 -7.87 -2.12 0.00 0.00 1.38 2.89 0.90 -1.00 0.00 0.00 -10.42 464.90 -1086.00 111963.80 12.86 2.40 2.10 37.59 -8.59 -0.60 0.00 0.00 1.75 3.47 1.50 -1.00 0.00 0.00 -5.89 552.60 -1087.00 111935.70 15.86 2.80 2.10 49.66 -8.37 1.47 0.00 0.00 2.50 3.58 1.60 -1.00 0.00 0.00 -5.07 524.50 -1088.00 113146.10 11.63 1.80 2.10 30.95 -7.53 -1.00 0.00 0.00 1.19 3.35 1.40 -1.00 0.00 0.00 -7.79 454.90 -1089.00 113558.70 11.67 2.10 2.10 31.18 -7.39 0.54 0.00 0.00 1.77 2.91 1.30 -1.00 0.00 0.00 -5.28 867.50 -1090.00 116597.60 12.25 2.50 2.10 40.56 -7.85 0.14 0.00 0.00 2.17 3.51 2.20 -1.00 0.00 0.00 -4.52 66.40 -1091.00 116348.00 12.02 3.10 2.10 36.42 -7.81 -2.06 0.00 0.00 2.15 3.58 1.60 -1.00 0.00 0.00 -4.47 1096.80 -1092.00 116686.00 14.91 2.20 2.10 45.54 -8.17 -0.49 0.00 0.00 1.92 3.55 1.60 -1.00 0.00 0.00 -6.22 154.80 -1093.00 116776.40 13.28 2.60 2.10 43.35 -8.77 2.66 0.00 0.00 2.33 4.24 2.30 -1.00 0.00 0.00 -4.56 245.20 -1094.00 117176.00 12.98 1.80 2.10 35.84 -7.89 1.68 0.00 0.00 1.56 3.09 1.10 -1.00 0.00 0.00 -6.66 644.80 -1095.00 117125.10 12.68 2.70 2.10 41.91 -7.24 -0.13 0.00 0.00 2.53 3.89 1.90 -1.00 0.00 0.00 -4.01 593.90 -1096.00 116009.10 11.96 4.10 2.10 42.62 -8.09 -1.16 0.00 0.00 2.59 3.63 2.10 -1.00 0.00 0.00 -3.70 757.90 -1097.00 115861.70 13.57 1.60 2.10 31.11 -8.42 -2.02 0.00 0.00 1.24 2.66 0.90 -1.00 0.00 0.00 -8.77 610.50 -1098.00 114065.00 22.81 2.80 2.10 77.30 -8.64 1.08 0.00 0.00 2.36 3.90 1.90 -1.00 0.00 0.00 -7.75 93.80 -1099.00 113942.20 14.19 2.30 2.10 41.46 -8.62 0.07 0.00 0.00 2.07 3.49 1.50 -1.00 0.00 0.00 -5.49 1251.00 -1100.00 114349.30 30.19 3.30 2.10 110.25 -6.65 1.11 0.00 0.00 2.80 4.05 2.10 -1.00 0.00 0.00 -8.61 378.10 -1101.00 114996.20 13.35 2.30 2.10 42.40 -7.06 -0.66 0.00 0.00 2.01 3.72 1.80 -1.00 0.00 0.00 -5.30 1025.00 -1102.00 115105.10 11.72 1.90 2.10 30.53 -6.83 -1.54 0.00 0.00 1.29 2.84 0.90 -1.00 0.00 0.00 -7.29 1133.90 -1103.00 111114.70 23.31 2.00 2.10 64.00 -9.37 0.97 0.00 0.00 1.28 3.27 1.30 -1.00 0.00 0.00 -14.58 983.50 -1104.00 152021.00 12.09 2.30 2.10 35.71 -7.51 -0.60 0.00 0.00 1.92 3.72 1.80 -1.00 0.00 0.00 -5.05 494.60 -1105.00 108926.40 16.58 2.70 2.10 59.98 -7.46 0.87 0.00 0.00 2.15 4.01 2.10 -1.00 0.00 0.00 -6.18 75.20 -1106.00 152791.30 13.61 1.70 2.10 33.06 -8.76 -1.06 0.00 0.00 1.35 3.01 1.10 -1.00 0.00 0.00 -8.09 1264.90 -1107.00 152072.10 16.30 2.80 2.10 47.85 -7.70 0.79 0.00 0.00 2.20 3.39 1.40 -1.00 0.00 0.00 -5.93 545.70 -1108.00 109143.30 13.77 3.10 2.10 46.73 -6.29 -0.72 0.00 0.00 2.43 4.06 2.10 -1.00 0.00 0.00 -4.53 292.10 -1109.00 109182.00 10.07 2.10 2.10 26.58 -7.71 -0.53 0.00 0.00 1.73 3.36 1.70 -1.00 0.00 0.00 -4.65 330.80 -1110.00 107972.40 10.43 3.10 2.10 37.65 -7.23 -2.50 0.00 0.00 2.87 4.41 2.50 -1.00 0.00 0.00 -2.90 401.20 -1111.00 108680.90 14.69 2.00 2.10 40.59 -5.92 -0.95 0.00 0.00 1.77 3.19 1.20 -1.00 0.00 0.00 -6.62 1109.70 -1112.00 108009.60 11.07 3.20 2.10 37.60 -8.04 -1.22 0.00 0.00 2.98 3.77 2.40 -1.00 0.00 0.00 -2.98 438.40 -1113.00 108110.30 10.87 2.40 2.10 27.10 -8.68 1.68 0.00 0.00 2.00 2.14 1.00 -1.00 0.00 0.00 -4.35 539.10 -1114.00 108245.40 12.82 1.70 2.10 32.14 -7.14 -1.09 0.00 0.00 1.46 3.05 1.10 -1.00 0.00 0.00 -7.04 674.20 -1115.00 108384.40 19.82 3.20 2.10 61.50 -6.39 1.49 0.00 0.00 1.98 3.54 1.60 -1.00 0.00 0.00 -8.02 813.20 -1116.00 108650.50 15.92 2.20 2.10 48.10 -7.20 1.13 0.00 0.00 1.78 3.62 1.70 -1.00 0.00 0.00 -7.15 1079.30 -1117.00 109329.50 14.70 2.90 2.10 48.78 -9.53 0.00 0.00 0.00 2.01 3.60 1.60 -1.00 0.00 0.00 -5.86 478.30 -1118.00 109652.10 14.92 2.40 2.10 46.58 -6.96 0.35 0.00 0.00 1.99 3.19 1.20 -1.00 0.00 0.00 -5.99 800.90 -1119.00 152607.80 14.79 1.30 2.10 35.90 -9.04 1.16 0.00 0.00 1.02 2.85 0.90 -1.00 0.00 0.00 -11.58 1081.40 -1120.00 107677.40 22.93 4.30 2.10 78.06 -7.28 -0.92 0.00 0.00 1.20 3.88 1.90 -1.00 0.00 0.00 -15.30 106.20 -1121.00 107406.30 16.74 2.60 2.10 57.64 -7.25 -0.92 0.00 0.00 1.97 3.94 2.00 -1.00 0.00 0.00 -6.78 1115.10 -1122.00 110588.70 16.36 3.70 2.10 50.67 -8.22 -2.27 0.00 0.00 2.01 3.49 1.50 -1.00 0.00 0.00 -6.51 457.50 -1123.00 110927.80 10.60 1.90 2.10 22.67 -8.43 -0.08 0.00 0.00 1.74 2.10 1.00 -1.00 0.00 0.00 -4.87 796.60 -1124.00 110510.70 20.83 3.00 2.10 75.76 -8.36 1.84 0.00 0.00 2.46 4.22 2.30 -1.00 0.00 0.00 -6.77 379.50 -1125.00 153039.10 15.75 2.90 2.10 58.78 -8.34 1.66 0.00 0.00 2.13 4.07 2.10 -1.00 0.00 0.00 -5.92 232.70 -1126.00 109747.90 15.60 2.70 2.10 49.49 -7.07 1.36 0.00 0.00 2.32 3.43 1.90 -1.00 0.00 0.00 -5.39 896.70 -1127.00 107909.70 17.21 3.20 2.10 68.61 -8.01 -0.87 0.00 0.00 2.94 4.72 2.80 -1.00 0.00 0.00 -4.68 338.50 -1128.00 110449.50 26.47 1.70 2.10 75.03 -9.08 -1.88 0.00 0.00 1.05 3.28 1.30 -1.00 0.00 0.00 -20.10 318.30 -1129.00 110479.40 11.25 2.30 2.10 33.63 -8.98 0.56 0.00 0.00 2.09 3.43 1.50 -1.00 0.00 0.00 -4.30 348.20 -1130.00 107863.60 18.59 3.00 2.10 62.00 -7.26 -0.19 0.00 0.00 2.20 3.95 2.00 -1.00 0.00 0.00 -6.77 292.40 -1131.00 151181.50 12.41 11.40 8.20 127.55 -7.69 1.78 255.00 0.00 2.05 5.87 1.60 -1.00 0.00 0.00 -4.85 218.30 -1132.00 160956.60 16.68 4.70 10.30 154.42 -17.95 -2.05 255.00 0.00 4.46 10.42 0.70 -1.00 0.00 0.00 -3.00 137.40 -1133.00 157444.40 20.61 10.90 8.20 209.05 -7.90 -0.41 255.00 0.00 10.70 4.15 1.20 -1.00 0.00 0.00 -1.54 81.20 -1134.00 17524.60 11.63 6.60 2.10 51.45 -7.77 0.31 255.00 0.00 6.27 1.62 0.30 -1.00 0.00 0.00 -1.48 14.20 -1135.00 17551.80 10.98 4.00 2.10 41.25 -9.19 -0.82 255.00 0.00 3.82 0.84 0.30 -1.00 0.00 0.00 -2.30 41.40 -1136.00 157456.40 10.77 1.70 2.00 27.06 -19.93 -1.32 255.00 0.00 1.60 2.65 1.30 -1.00 0.00 0.00 -5.39 93.20 -1137.00 152795.40 16.83 5.80 4.30 111.37 -8.52 -0.31 255.00 0.00 5.50 5.11 2.00 -1.00 0.00 0.00 -2.45 296.20 -1138.00 3844.80 11.80 6.50 1.70 56.02 -8.41 0.97 255.00 0.00 6.40 3.34 2.30 -1.00 0.00 0.00 -1.48 158.40 -1139.00 160961.20 23.02 9.80 6.30 227.30 -13.55 0.51 255.00 0.00 8.87 10.70 5.30 -1.00 0.00 0.00 -2.08 142.00 -1140.00 47805.30 12.68 2.50 4.80 55.06 -7.11 -0.35 255.00 0.00 1.84 3.40 1.60 -1.00 0.00 0.00 -5.50 86.90 -1141.00 227535.60 15.60 5.60 2.90 74.43 -12.95 4.77 255.00 0.00 5.06 3.27 1.10 -1.00 0.00 0.00 -2.47 105.20 -1142.00 111071.00 21.19 5.60 3.70 132.48 -9.80 -2.58 255.00 0.00 5.38 6.93 5.00 -1.00 0.00 0.00 -3.15 376.60 -1143.00 269859.50 16.14 2.00 3.50 52.65 -13.63 -0.59 255.00 0.00 1.55 3.35 1.50 -1.00 0.00 0.00 -8.31 265.90 -1144.00 108722.50 12.71 43.60 5.50 334.65 -6.24 2.14 255.00 0.00 2.56 6.05 1.80 -1.00 0.00 0.00 -3.98 332.10 -1145.00 108700.80 13.26 21.80 5.60 179.48 -7.47 -0.02 255.00 0.00 4.76 4.92 1.90 -1.00 0.00 0.00 -2.23 310.40 -1146.00 111132.20 10.96 2.90 2.10 35.95 -11.27 1.27 255.00 0.00 2.73 3.41 2.30 -1.00 0.00 0.00 -3.21 1001.00 -1147.00 112320.80 15.39 2.50 5.90 78.20 -8.55 -0.65 255.00 0.00 2.33 4.16 1.90 -1.00 0.00 0.00 -5.28 90.40 -1148.00 219657.70 37.85 7.70 5.90 296.65 -9.17 -0.84 255.00 0.00 6.37 5.55 1.90 -1.00 0.00 0.00 -4.75 35.30 -1149.00 118991.10 13.36 8.60 6.50 124.95 -9.04 -0.71 255.00 0.00 8.11 6.45 1.00 -1.00 0.00 0.00 -1.32 232.70 -1150.00 57663.40 21.97 9.00 4.40 175.88 -7.97 1.17 255.00 0.00 8.39 5.45 2.20 -1.00 0.00 0.00 -2.09 345.00 -1151.00 115782.10 19.60 6.10 6.80 138.88 -8.22 0.10 255.00 0.00 5.79 5.06 1.60 -1.00 0.00 0.00 -2.71 95.70 -1152.00 59658.30 25.23 9.60 6.20 236.49 -7.67 -1.31 255.00 0.00 8.58 5.28 2.40 -1.00 0.00 0.00 -2.35 35.90 -1153.00 232103.00 10.98 2.70 2.00 34.47 -18.53 -3.47 255.00 0.00 2.51 3.41 2.30 -1.00 0.00 0.00 -3.49 64.60 -1154.00 232998.70 12.52 2.00 2.10 32.49 -13.29 1.29 255.00 0.00 1.65 2.96 1.30 -1.00 0.00 0.00 -6.08 832.30 -1155.00 86094.50 12.97 11.30 4.70 145.89 -7.65 1.87 255.00 0.00 10.65 4.63 1.20 -1.00 0.00 0.00 -0.97 360.10 -1156.00 83097.90 11.43 4.60 2.10 44.69 -7.78 -1.73 255.00 0.00 3.72 3.73 3.10 -1.00 0.00 0.00 -2.46 1126.70 -1157.00 248554.00 17.40 14.90 8.50 264.20 -9.16 -0.87 255.00 0.00 14.58 5.29 1.10 -1.00 0.00 0.00 -0.95 80.40 -1158.00 88368.50 19.30 6.50 3.70 115.95 -9.27 1.35 255.00 0.00 6.04 4.14 1.20 -1.00 0.00 0.00 -2.56 330.10 -1159.00 243048.50 16.24 9.60 4.00 119.00 -8.94 1.67 255.00 0.00 2.02 4.00 1.50 -1.00 0.00 0.00 -6.44 258.10 -1160.00 238993.30 11.85 14.00 5.80 164.49 -8.45 0.36 255.00 0.00 12.77 6.48 3.10 -1.00 0.00 0.00 -0.74 42.90 -1161.00 80471.40 14.22 8.60 7.10 122.58 -8.89 -1.66 255.00 0.00 8.21 4.86 1.10 -1.00 0.00 0.00 -1.39 113.00 -1162.00 75068.60 20.94 7.40 5.80 149.28 -6.92 1.25 255.00 0.00 7.17 4.67 1.00 -1.00 0.00 0.00 -2.33 86.20 -1163.00 78148.30 22.31 6.90 5.50 137.43 -6.64 0.84 255.00 0.00 5.57 5.35 1.60 -1.00 0.00 0.00 -3.21 93.90 -1164.00 79148.90 13.11 3.30 2.10 43.12 -13.93 0.70 255.00 0.00 2.94 3.37 1.40 -1.00 0.00 0.00 -3.56 1017.70 -1165.00 79451.60 11.85 2.40 2.10 30.72 -11.05 -2.26 255.00 0.00 2.07 3.07 1.60 -1.00 0.00 0.00 -4.58 40.40 -1166.00 290135.10 13.46 13.70 5.80 164.81 -10.42 -1.11 255.00 0.00 1.77 3.79 0.90 -1.00 0.00 0.00 -6.08 189.50 -1167.00 122983.60 10.84 9.40 4.20 81.62 -10.31 0.11 255.00 0.00 8.93 3.35 2.00 -1.00 0.00 0.00 -0.97 129.20 -1168.00 189767.90 21.36 9.90 3.80 157.62 -7.55 0.53 255.00 0.00 9.59 3.91 2.30 -1.00 0.00 0.00 -1.78 97.50 -1169.00 186970.50 23.56 8.10 6.50 211.62 -8.19 0.64 255.00 0.00 7.26 5.81 1.80 -1.00 0.00 0.00 -2.60 372.10 -1170.00 189780.20 13.74 22.10 5.90 249.38 -7.88 1.30 255.00 0.00 21.79 4.14 1.10 -1.00 0.00 0.00 -0.50 109.80 -1171.00 31532.50 12.22 1.70 2.10 29.35 -12.16 2.13 255.00 0.00 1.21 2.83 1.00 -1.00 0.00 0.00 -8.11 326.10 -1172.00 131058.10 11.24 4.30 2.10 46.95 -13.68 1.07 255.00 0.00 4.11 0.67 0.50 -1.00 0.00 0.00 -2.19 11.70 -1173.00 27496.00 16.76 5.60 2.10 86.54 -8.96 -0.78 255.00 0.00 4.82 6.43 4.50 -1.00 0.00 0.00 -2.78 129.60 -1174.00 27429.10 11.00 10.50 2.10 78.84 -8.98 1.18 255.00 0.00 2.05 2.92 1.00 -1.00 0.00 0.00 -4.29 62.70 -1175.00 333221.50 24.46 7.10 6.60 176.61 -13.48 2.23 255.00 0.00 6.68 5.72 1.60 -1.00 0.00 0.00 -2.93 139.90 -1176.00 338520.00 19.09 11.00 4.90 198.81 -10.66 0.13 255.00 0.00 9.56 5.22 1.80 -1.00 0.00 0.00 -1.60 62.40 -1177.00 134928.10 23.93 5.40 7.20 179.63 -6.89 2.03 255.00 0.00 4.32 8.40 4.10 -1.00 0.00 0.00 -4.43 92.90 -1178.00 183287.10 14.61 13.10 6.90 223.67 -8.52 -0.90 255.00 0.00 12.93 5.43 0.60 -1.00 0.00 0.00 -0.90 144.70 -1179.00 134052.30 11.62 25.30 4.70 365.65 -9.19 0.38 255.00 0.00 1.91 2.88 1.40 -1.00 0.00 0.00 -4.87 266.70 -1180.00 130946.30 22.65 7.60 4.70 148.11 -9.69 0.43 255.00 0.00 7.22 4.38 1.70 -1.00 0.00 0.00 -2.51 232.70 -1181.00 130761.20 17.06 12.60 5.60 142.45 -9.94 -0.89 255.00 0.00 1.27 4.38 1.50 -1.00 0.00 0.00 -10.79 47.60 -1182.00 203732.30 15.59 5.30 4.00 89.56 -9.52 -0.41 255.00 0.00 4.94 4.66 1.90 -1.00 0.00 0.00 -2.52 237.90 -1183.00 306578.80 12.23 15.70 3.90 158.06 -10.98 -1.14 255.00 0.00 15.58 2.53 1.00 -1.00 0.00 0.00 -0.63 121.20 -1184.00 304258.10 14.32 5.20 5.40 88.89 -10.96 -0.82 255.00 0.00 4.76 3.47 1.20 -1.00 0.00 0.00 -2.41 104.50 -1185.00 124142.70 13.89 8.10 6.20 129.00 -7.30 0.57 255.00 0.00 7.57 3.96 0.80 -1.00 0.00 0.00 -1.47 136.30 -1186.00 48981.30 16.23 6.30 2.70 93.93 -7.44 -0.20 255.00 0.00 6.03 2.82 1.50 -1.00 0.00 0.00 -2.15 110.90 -1187.00 129006.20 12.90 11.30 3.70 155.37 -10.54 0.62 255.00 0.00 10.73 4.42 1.70 -1.00 0.00 0.00 -0.96 212.60 -1188.00 130296.90 17.21 11.50 3.90 184.60 -11.85 0.33 255.00 0.00 11.35 4.01 1.40 -1.00 0.00 0.00 -1.21 351.30 -1189.00 191347.60 18.91 2.20 2.10 52.03 -17.43 0.89 255.00 0.00 1.56 3.42 1.50 -1.00 0.00 0.00 -9.69 141.20 -1190.00 130543.80 24.03 6.00 3.80 115.65 -13.12 0.98 255.00 0.00 4.77 3.95 1.60 -1.00 0.00 0.00 -4.03 214.20 -1191.00 35028.00 12.99 7.30 3.10 101.61 -12.25 4.84 255.00 0.00 7.06 3.00 1.30 -1.00 0.00 0.00 -1.47 365.60 -1192.00 130303.80 14.04 18.80 4.70 271.23 -10.79 -0.66 255.00 0.00 18.27 4.38 2.50 -1.00 0.00 0.00 -0.61 358.20 -1193.00 174174.50 12.17 10.70 3.90 130.43 -8.34 -0.66 255.00 0.00 10.52 2.47 1.60 -1.00 0.00 0.00 -0.93 299.30 diff --git a/docs/data_installation.rst b/docs/data_installation.rst new file mode 100644 index 00000000..91d633c2 --- /dev/null +++ b/docs/data_installation.rst @@ -0,0 +1,30 @@ +Data Installation +================= + +``nSTAT-python`` does not bundle raw example data in the Git tree. + +Use one of the supported Python-native installation paths instead: + +Command line +------------ + +.. code-block:: bash + + nstat-install --download-example-data always + +Python API +---------- + +.. code-block:: python + + from nstat.data_manager import ensure_example_data + + data_dir = ensure_example_data(download=True) + print(data_dir) + +Notes +----- + +- Example data is cached under ``data_cache/`` by default. +- Set ``NSTAT_DATA_DIR`` to point at an existing dataset cache if needed. +- The repository intentionally ignores ``data/`` so local example-data installs are not committed. diff --git a/docs/index.rst b/docs/index.rst index c1cf8ec2..b80ec5dd 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -7,3 +7,4 @@ Minimal documentation for the standalone Python nSTAT core package. :maxdepth: 2 api + data_installation diff --git a/docs/repo_split_status.rst b/docs/repo_split_status.rst deleted file mode 100644 index 1afe51fb..00000000 --- a/docs/repo_split_status.rst +++ /dev/null @@ -1,57 +0,0 @@ -Repo Split Status -================= - -Scope ------ - -This document tracks readiness for splitting the current monorepo into: - -- ``nSTAT`` (MATLAB-focused repository) -- ``nSTAT-python`` (Python-focused repository) - -Inventory Source ----------------- - -Generated via: - -.. code-block:: bash - - python3 tools/generate_repo_split_inventory.py - -Output directory: - -- ``python/reports/repo_split_inventory`` -- ``reports/repo_split_inventory`` - -Current Snapshot ----------------- - -- TOC topics: 31 -- TOC example topics: 25 -- Python docs coverage (TOC topics): 31/31 -- Python notebook coverage (TOC topics): 29/31 -- Python example script coverage (TOC examples): 25/25 -- Python example full coverage (docs + notebook + script): 25/25 -- MATLAB example topics with ``.mlx``: 18/25 - -MATLAB MLX Gaps ---------------- - -The following example topics currently do not have a matching ``helpfiles/.mlx``: - -- ``ExplicitStimulusWhiskerData`` -- ``NetworkTutorial`` -- ``PPThinning`` -- ``PSTHEstimation`` -- ``StimulusDecode2D`` -- ``ValidationDataSet`` -- ``mEPSCAnalysis`` - -Immediate Next Actions ----------------------- - -1. Keep ``nSTAT`` as source-of-truth for MATLAB ``helpfiles`` and create missing ``.mlx`` examples for the 7 topics above. -2. Keep ``nSTAT-python`` standalone and run parity/docs/notebook CI in this repository. -3. Update cross-repo README links: - - ``nSTAT`` -> points Python users to ``nSTAT-python``. - - ``nSTAT-python`` -> points MATLAB users to ``nSTAT``. diff --git a/examples/nSTATPaperExamples/manifest.yml b/examples/nSTATPaperExamples/manifest.yml index 7eb4d9ff..bbf03949 100644 --- a/examples/nSTATPaperExamples/manifest.yml +++ b/examples/nSTATPaperExamples/manifest.yml @@ -2,91 +2,85 @@ version: 1 examples: - name: AnalysisExamples relative_path: notebooks/AnalysisExamples.ipynb - description: Notebook generated from MATLAB help source for AnalysisExamples. + description: Notebook example for AnalysisExamples. - name: ConfigCollExamples relative_path: notebooks/ConfigCollExamples.ipynb - description: Notebook generated from MATLAB help source for ConfigCollExamples. + description: Notebook example for ConfigCollExamples. - name: CovCollExamples relative_path: notebooks/CovCollExamples.ipynb - description: Notebook generated from MATLAB help source for CovCollExamples. + description: Notebook example for CovCollExamples. - name: CovariateExamples relative_path: notebooks/CovariateExamples.ipynb - description: Notebook generated from MATLAB help source for CovariateExamples. + description: Notebook example for CovariateExamples. - name: DecodingExample relative_path: notebooks/DecodingExample.ipynb - description: Notebook generated from MATLAB help source for DecodingExample. + description: Notebook example for DecodingExample. - name: DecodingExampleWithHist relative_path: notebooks/DecodingExampleWithHist.ipynb - description: Notebook generated from MATLAB help source for DecodingExampleWithHist. + description: Notebook example for DecodingExampleWithHist. - name: EventsExamples relative_path: notebooks/EventsExamples.ipynb - description: Notebook generated from MATLAB help source for EventsExamples. + description: Notebook example for EventsExamples. - name: ExplicitStimulusWhiskerData relative_path: notebooks/ExplicitStimulusWhiskerData.ipynb - description: Notebook generated from MATLAB help source for ExplicitStimulusWhiskerData. + description: Notebook example for ExplicitStimulusWhiskerData. - name: FitResSummaryExamples relative_path: notebooks/FitResSummaryExamples.ipynb - description: Notebook generated from MATLAB help source for FitResSummaryExamples. + description: Notebook example for FitResSummaryExamples. - name: FitResultExamples relative_path: notebooks/FitResultExamples.ipynb - description: Notebook generated from MATLAB help source for FitResultExamples. + description: Notebook example for FitResultExamples. - name: HippocampalPlaceCellExample relative_path: notebooks/HippocampalPlaceCellExample.ipynb - description: Notebook generated from MATLAB help source for HippocampalPlaceCellExample. + description: Notebook example for HippocampalPlaceCellExample. - name: HistoryExamples relative_path: notebooks/HistoryExamples.ipynb - description: Notebook generated from MATLAB help source for HistoryExamples. + description: Notebook example for HistoryExamples. - name: NetworkTutorial relative_path: notebooks/NetworkTutorial.ipynb - description: Notebook generated from MATLAB help source for NetworkTutorial. + description: Notebook example for NetworkTutorial. - name: PPSimExample relative_path: notebooks/PPSimExample.ipynb - description: Notebook generated from MATLAB help source for PPSimExample. + description: Notebook example for PPSimExample. - name: PPThinning relative_path: notebooks/PPThinning.ipynb - description: Notebook generated from MATLAB help source for PPThinning. + description: Notebook example for PPThinning. - name: PSTHEstimation relative_path: notebooks/PSTHEstimation.ipynb - description: Notebook generated from MATLAB help source for PSTHEstimation. + description: Notebook example for PSTHEstimation. - name: SignalObjExamples relative_path: notebooks/SignalObjExamples.ipynb - description: Notebook generated from MATLAB help source for SignalObjExamples. + description: Notebook example for SignalObjExamples. - name: StimulusDecode2D relative_path: notebooks/StimulusDecode2D.ipynb - description: Notebook generated from MATLAB help source for StimulusDecode2D. + description: Notebook example for StimulusDecode2D. - name: TrialConfigExamples relative_path: notebooks/TrialConfigExamples.ipynb - description: Notebook generated from MATLAB help source for TrialConfigExamples. + description: Notebook example for TrialConfigExamples. - name: TrialExamples relative_path: notebooks/TrialExamples.ipynb - description: Notebook generated from MATLAB help source for TrialExamples. + description: Notebook example for TrialExamples. - name: ValidationDataSet relative_path: notebooks/ValidationDataSet.ipynb - description: Notebook generated from MATLAB help source for ValidationDataSet. + description: Notebook example for ValidationDataSet. - name: mEPSCAnalysis relative_path: notebooks/mEPSCAnalysis.ipynb - description: Notebook generated from MATLAB help source for mEPSCAnalysis. + description: Notebook example for mEPSCAnalysis. - name: nSTATPaperExamples relative_path: notebooks/nSTATPaperExamples.ipynb - description: Notebook generated from MATLAB help source for nSTATPaperExamples. + description: Notebook example for nSTATPaperExamples. - name: nSpikeTrainExamples relative_path: notebooks/nSpikeTrainExamples.ipynb - description: Notebook generated from MATLAB help source for nSpikeTrainExamples. + description: Notebook example for nSpikeTrainExamples. - name: nstCollExamples relative_path: notebooks/nstCollExamples.ipynb - description: Notebook generated from MATLAB help source for nstCollExamples. + description: Notebook example for nstCollExamples. - name: AnalysisExamples2 relative_path: notebooks/AnalysisExamples2.ipynb - description: Notebook generated from MATLAB help source for AnalysisExamples2. -- name: DocumentationSetup2025b - relative_path: notebooks/DocumentationSetup2025b.ipynb - description: Notebook generated from MATLAB help source for DocumentationSetup2025b. + description: Notebook example for AnalysisExamples2. - name: FitResultReference relative_path: notebooks/FitResultReference.ipynb - description: Notebook generated from MATLAB help source for FitResultReference. + description: Notebook example for FitResultReference. - name: HybridFilterExample relative_path: notebooks/HybridFilterExample.ipynb - description: Notebook generated from MATLAB help source for HybridFilterExample. -- name: publish_all_helpfiles - relative_path: notebooks/publish_all_helpfiles.ipynb - description: Notebook generated from MATLAB help source for publish_all_helpfiles. + description: Notebook example for HybridFilterExample. diff --git a/helpfiles/helptoc.xml b/helpfiles/helptoc.xml deleted file mode 100644 index 5314082e..00000000 --- a/helpfiles/helptoc.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - nSTAT Neural Spike Train Analysis Toolbox - Overview - MATLAB 2025b Help Integration - - Class Definitions - SignalObj Reference - FitResult Reference - - Examples - Using the SignalObj Class - Using the Covariate Class - Using the CovColl Class - Using the nSpikeTrain Class - Using the nstColl Class - Using the Events Class - Using the History Class - Using the Trial Class - Using the TrialConfig Class - Using the ConfigColl Class - Using the Analysis Class - Using the FitResult Class - Using the FitResSummary Class - Point Process Simulation via Thinning - Example Data Analysis - Simulated Data - Computing a Peri-Stimulus Time Histogram (PSTH) - Example Data Analysis - Simulated Constant (Piecewise Constant) Rate Poisson - Example Data Analysis - Miniature Excitatory Post-Synaptic Currents (mEPSCs) - Example Data Analysis - Simulated Explicit Stimulus and History - Example Data Analysis - Explicit Stimulus - Example Data Analysis - Hippocampal Place Cell Receptive Field Estimation - Example Data Analysis - Decoding Univariate Simulated Stimuli (No History Effect) - Example Data Analysis - Decoding Univariate Simulated Stimuli with and without History Effect - Example Data Analysis - Decoding Bivariate Simulated Stimuli - Example Data Analysis - Two Neuron Network Simulation and Estimation of Ensemble Effect - nSTAT Paper Examples - - - Neuroscience Statistics Research Laboratory - - diff --git a/helpfiles/paperHybridFilterExample.mat b/helpfiles/paperHybridFilterExample.mat deleted file mode 100644 index 355e2232..00000000 Binary files a/helpfiles/paperHybridFilterExample.mat and /dev/null differ diff --git a/matlab/fixture_gen/export_helpfile_figures.m b/matlab/fixture_gen/export_helpfile_figures.m deleted file mode 100644 index cdbbfb64..00000000 --- a/matlab/fixture_gen/export_helpfile_figures.m +++ /dev/null @@ -1,339 +0,0 @@ -function export_helpfile_figures(manifestJsonPath, outputRoot, reportJsonPath) -% Export helpfile figures in strict fig_### order for parity checks. -% -% Inputs: -% manifestJsonPath - JSON with `topics` entries containing: -% topic, source_path, source_type, expected_figure_count -% outputRoot - destination root for /fig_###.png -% reportJsonPath - output JSON report path - -if nargin < 3 - error('export_helpfile_figures:InvalidArgs', ... - 'Usage: export_helpfile_figures(manifestJsonPath, outputRoot, reportJsonPath)'); -end - -manifestJsonPath = char(manifestJsonPath); -outputRoot = char(outputRoot); -reportJsonPath = char(reportJsonPath); - -if ~exist(manifestJsonPath, 'file') - error('export_helpfile_figures:MissingManifest', ... - 'Manifest JSON not found: %s', manifestJsonPath); -end - -manifestPayload = jsondecode(fileread(manifestJsonPath)); -topics = manifestPayload.topics; -if ~isstruct(topics) - error('export_helpfile_figures:InvalidManifest', ... - 'Expected manifest.topics to be a struct array.'); -end - -if ~exist(outputRoot, 'dir') - mkdir(outputRoot); -end - -envDataDir = getenv('NSTAT_DATA_DIR'); -if ~isempty(envDataDir) && exist(envDataDir, 'dir') == 7 - addpath(genpath(envDataDir), '-begin'); -end - -% Add source roots to path so script-local dependencies resolve. -sourceRoots = {}; -for i = 1:numel(topics) - sourcePath = char(topics(i).source_path); - helpDir = fileparts(sourcePath); - toolboxRoot = fileparts(helpDir); - if ~any(strcmp(sourceRoots, toolboxRoot)) - sourceRoots{end+1} = toolboxRoot; %#ok - end -end -for i = 1:numel(sourceRoots) - addpath(genpath(sourceRoots{i})); -end - -reportRows = repmat(struct( ... - 'topic', '', ... - 'source_path', '', ... - 'source_type', '', ... - 'expected_figures', 0, ... - 'produced_figures', 0, ... - 'status', '', ... - 'error', ''), numel(topics), 1); - -for i = 1:numel(topics) - topic = char(topics(i).topic); - sourcePath = char(topics(i).source_path); - sourceType = char(topics(i).source_type); - expectedFigures = double(topics(i).expected_figure_count); - outDir = fullfile(outputRoot, topic); - - if exist(outDir, 'dir') - rmdir(outDir, 's'); - end - mkdir(outDir); - - close all force; - drawnow; - - reportRows(i).topic = topic; - reportRows(i).source_path = sourcePath; - reportRows(i).source_type = sourceType; - reportRows(i).expected_figures = expectedFigures; - - try - publishSourcePath = resolve_publish_source(topic, sourcePath, sourceType); - [publishScriptPath, publishWorkDir] = prepare_publish_source( ... - topic, publishSourcePath, fileparts(sourcePath)); - publishOutDir = fullfile(tempdir(), [topic '__publish_output__']); - if exist(publishOutDir, 'dir') - rmdir(publishOutDir, 's'); - end - mkdir(publishOutDir); - - currentDir = pwd; - restoreDir = onCleanup(@() cd(currentDir)); %#ok - cd(publishWorkDir); - publishOptions = struct( ... - 'format', 'html', ... - 'outputDir', publishOutDir, ... - 'showCode', false, ... - 'evalCode', true); - publish(publishScriptPath, publishOptions); - - produced = collect_published_figures(topic, publishOutDir, outDir); - - reportRows(i).produced_figures = produced; - if produced == expectedFigures - reportRows(i).status = 'ok'; - else - reportRows(i).status = 'count_mismatch'; - reportRows(i).error = sprintf('produced=%d expected=%d', produced, expectedFigures); - end - catch ME - reportRows(i).status = 'error'; - reportRows(i).produced_figures = 0; - reportRows(i).error = ME.message; - end - - close all force; - evalin('base', 'clearvars'); - drawnow; -end - -report = struct(); -report.generated_utc = char(datetime('now', 'TimeZone', 'UTC', ... - 'Format', 'yyyy-MM-dd''T''HH:mm:ss''Z''')); -report.output_root = outputRoot; -report.topic_count = numel(topics); -report.results = reportRows; - -reportDir = fileparts(reportJsonPath); -if ~isempty(reportDir) && ~exist(reportDir, 'dir') - mkdir(reportDir); -end -fid = fopen(reportJsonPath, 'w'); -if fid < 0 - error('export_helpfile_figures:ReportWriteFailed', ... - 'Could not open report output path: %s', reportJsonPath); -end -cleanupObj = onCleanup(@() fclose(fid)); -fprintf(fid, '%s', jsonencode(report, 'PrettyPrint', true)); - -end - -function run_script_in_base(scriptPath) -scriptEscaped = strrep(scriptPath, '''', ''''''); -evalin('base', sprintf('run(''%s'');', scriptEscaped)); -end - -function publishSourcePath = resolve_publish_source(topic, sourcePath, sourceType) -if strcmpi(sourceType, 'm') - publishSourcePath = sourcePath; - return; -end - -sourceDir = fileparts(sourcePath); -siblingMPath = fullfile(sourceDir, [topic '.m']); -if exist(siblingMPath, 'file') - publishSourcePath = siblingMPath; - return; -end - -publishSourcePath = fullfile(tempdir(), [topic '__publish_source__.m']); -if exist(publishSourcePath, 'file') - delete(publishSourcePath); -end -matlab.internal.liveeditor.openAndConvert(sourcePath, publishSourcePath); -end - -function [publishScriptPath, publishWorkDir] = prepare_publish_source(topic, publishSourcePath, companionDir) -publishWorkDir = fullfile(tempdir(), [topic '__publish_work']); -if exist(publishWorkDir, 'dir') - rmdir(publishWorkDir, 's'); -end -mkdir(publishWorkDir); - -publishScriptPath = fullfile(publishWorkDir, [topic '.m']); -copyfile(publishSourcePath, publishScriptPath); - -assetPatterns = {'*.mat', '*.png', '*.jpg', '*.jpeg', '*.bmp', '*.gif'}; -for iPattern = 1:numel(assetPatterns) - assets = dir(fullfile(companionDir, assetPatterns{iPattern})); - for iAsset = 1:numel(assets) - copyfile(fullfile(companionDir, assets(iAsset).name), ... - fullfile(publishWorkDir, assets(iAsset).name)); - end -end -end - -function produced = collect_published_figures(topic, publishOutDir, outDir) -pngFiles = dir(fullfile(publishOutDir, '*.png')); -if isempty(pngFiles) - produced = 0; - return; -end - -ordered = cell(0, 1); -numericEntries = struct('path', {}, 'index', {}); -topicPrefix = [topic '_']; -for i = 1:numel(pngFiles) - name = pngFiles(i).name; - if contains(name, '_eq') - continue; - end - if startsWith(name, topicPrefix) - token = regexp(name, [regexptranslate('escape', topicPrefix) '(\d+)\.png$'], ... - 'tokens', 'once'); - if ~isempty(token) - numericEntries(end+1).path = fullfile(publishOutDir, name); %#ok - numericEntries(end).index = str2double(token{1}); %#ok - end - end -end -if ~isempty(numericEntries) - [~, order] = sort([numericEntries.index]); - ordered = {numericEntries(order).path}'; -else - plainPath = fullfile(publishOutDir, [topic '.png']); - if exist(plainPath, 'file') - ordered = {plainPath}; - end -end - -for i = 1:numel(ordered) - outFile = fullfile(outDir, sprintf('fig_%03d.png', i)); - copyfile(ordered{i}, outFile); -end -produced = numel(ordered); -end - -function write_instrumented_script(sourcePath, instrumentedPath, outputDir) -sourceText = fileread(sourcePath); -sourceText = strrep(sourceText, sprintf('\r\n'), sprintf('\n')); -sourceText = strrep(sourceText, sprintf('\r'), sprintf('\n')); -lines = regexp(sourceText, '\n', 'split'); - -bodyLines = cell(0, 1); -bodyLines{end+1,1} = sprintf('nstat_export_init(''%s'');', ... - strrep(outputDir, '''', '''''')); -for i = 1:numel(lines) - line = lines{i}; - trimmed = strtrim(line); - if should_flush_before_line(trimmed) - bodyLines{end+1,1} = 'nstat_export_before_transition();'; - end - bodyLines{end+1,1} = line; -end -bodyLines{end+1,1} = 'nstat_export_flush_all();'; -bodyLines{end+1,1} = ''; -bodyLines{end+1,1} = local_helper_source(); - -fid = fopen(instrumentedPath, 'w'); -if fid < 0 - error('export_helpfile_figures:InstrumentedWriteFailed', ... - 'Could not write instrumented script: %s', instrumentedPath); -end -cleanupObj = onCleanup(@() fclose(fid)); -fprintf(fid, '%s\n', bodyLines{:}); -end - -function tf = should_flush_before_line(line) -if isempty(line) || startsWith(line, '%') - tf = false; - return; -end -tf = ~isempty(regexp(line, '\\s*(\(|$)', 'once')) || ... - ~isempty(regexp(line, '^\s*(close(\s+all)?|clf)\b', 'once')); -end - -function text = local_helper_source() -helperLines = { - 'function nstat_export_init(outputDir)' - 'state = struct(''outputDir'', outputDir, ''savedFigures'', {{}}, ''nextOrdinal'', 1);' - 'setappdata(groot, ''NSTAT_EXPORT_STATE'', state);' - 'if exist(outputDir, ''dir'') ~= 7' - ' mkdir(outputDir);' - 'end' - 'end' - '' - 'function nstat_export_before_transition()' - 'nstat_export_flush_open_figures();' - 'end' - '' - 'function nstat_export_flush_all()' - 'nstat_export_flush_open_figures();' - 'end' - '' - 'function nstat_export_flush_open_figures()' - 'if ~isappdata(groot, ''NSTAT_EXPORT_STATE'')' - ' return;' - 'end' - 'state = getappdata(groot, ''NSTAT_EXPORT_STATE'');' - 'figs = get(groot, ''Children'');' - 'if isempty(figs)' - ' state.savedFigures = cell(0, 1);' - ' setappdata(groot, ''NSTAT_EXPORT_STATE'', state);' - ' return;' - 'end' - 'figs = figs(:);' - 'figs = flipud(figs);' - 'for iFig = 1:numel(figs)' - ' fig = figs(iFig);' - ' if ~isgraphics(fig, ''figure'')' - ' continue;' - ' end' - ' if nstat_export_is_saved(state, fig)' - ' continue;' - ' end' - ' outFile = fullfile(state.outputDir, sprintf(''fig_%03d.png'', state.nextOrdinal));' - ' try' - ' exportgraphics(fig, outFile, ''Resolution'', 180);' - ' catch' - ' saveas(fig, outFile);' - ' end' - ' state.savedFigures{end+1,1} = fig; %#ok' - ' state.nextOrdinal = state.nextOrdinal + 1;' - 'end' - 'alive = cell(0, 1);' - 'for iSaved = 1:numel(state.savedFigures)' - ' fig = state.savedFigures{iSaved};' - ' if isgraphics(fig, ''figure'')' - ' alive{end+1,1} = fig; %#ok' - ' end' - 'end' - 'state.savedFigures = alive;' - 'setappdata(groot, ''NSTAT_EXPORT_STATE'', state);' - 'end' - '' - 'function tf = nstat_export_is_saved(state, fig)' - 'tf = false;' - 'for iSaved = 1:numel(state.savedFigures)' - ' if isequal(state.savedFigures{iSaved}, fig)' - ' tf = true;' - ' return;' - ' end' - 'end' - 'end' - }; -text = sprintf('%s\n', helperLines{:}); -end diff --git a/notebooks/AnalysisExamples.ipynb b/notebooks/AnalysisExamples.ipynb index d9d2def4..23162719 100644 --- a/notebooks/AnalysisExamples.ipynb +++ b/notebooks/AnalysisExamples.ipynb @@ -7,7 +7,7 @@ "metadata": {}, "outputs": [], "source": [ - "# AUTO-GENERATED FROM MATLAB AnalysisExamples.mlx -- DO NOT EDIT\n", + "# nSTAT-python notebook example: AnalysisExamples\n", "from pathlib import Path\n", "import sys\n", "\n", @@ -32,12 +32,7 @@ "OUTPUT_ROOT = REPO_ROOT / \"output\" / \"notebook_images\"\n", "__tracker = FigureTracker(topic='AnalysisExamples', output_root=OUTPUT_ROOT, expected_count=4)\n", "\n", - "def _matlab(line: str) -> None:\n", - " \"\"\"Placeholder for untranslated MATLAB syntax.\"\"\"\n", - " _ = line\n", - " return\n", - "\n", - "def _load_matlab_globals(name: str) -> dict[str, object]:\n", + "def _load_example_globals(name: str) -> dict[str, object]:\n", " candidates = [\n", " Path(name),\n", " DATA_DIR / name,\n", @@ -52,10 +47,8 @@ " return {}\n", "\n", "# SECTION 0: Section 0\n", - "# MATLAB L100: % Analysis Examples\n", "# Analysis Examples\n", - "# MATLAB L200: % This is an example on the standard approach to fitting GLM models to spike train data. This data set was obtained at the Society For Neuroscience '08 Workshop on Workshop on Neural Signal Processing Compare to analysis with Neural Spike Analysis Toolbox\n", - "# This is an example on the standard approach to fitting GLM models to spike train data. This data set was obtained at the Society For Neuroscience '08 Workshop on Workshop on Neural Signal Processing Compare to analysis with Neural Spike Analysis Toolbox\n" + "# This is an example on the standard approach to fitting GLM models to spike train data. This data set was obtained at the Society For Neuroscience '08 Workshop on Workshop on Neural Signal Processing Compare to analysis with Neural Spike Analysis Toolbox" ] }, { @@ -66,192 +59,72 @@ "outputs": [], "source": [ "# SECTION 1: Example 1: Tradition Preliminary Analysis\n", - "# MATLAB L400: % Script glm_part1.m\n", "# Script glm_part1.m\n", - "# MATLAB L401: % MATLAB code to visualize data, fit a GLM model of the relation between\n", "# MATLAB code to visualize data, fit a GLM model of the relation between\n", - "# MATLAB L402: % spiking and the rat's position, and visualize this model for the\n", "# spiking and the rat's position, and visualize this model for the\n", - "# MATLAB L403: % Neuroinformatics GLM problem set.\n", "# Neuroinformatics GLM problem set.\n", - "# MATLAB L404: % The code is initialized with an overly simple GLM model construction.\n", "# The code is initialized with an overly simple GLM model construction.\n", - "# MATLAB L405: % Please improve it!\n", "# Please improve it!\n", - "# MATLAB L406: \n", "#\n", - "# MATLAB L407: % load the rat trajectory and spiking data;\n", "# load the rat trajectory and spiking data;\n", - "# MATLAB L408: close all;\n", "plt.close(\"all\")\n", - "# MATLAB L409: warning off;\n", - "_matlab('warning off;')\n", - "# MATLAB L410: load('glm_data.mat');\n", - "globals().update(_load_matlab_globals('glm_data.mat'))\n", - "# MATLAB L600: % visualize the raw data\n", + "globals().update(_load_example_globals('glm_data.mat'))\n", "# visualize the raw data\n", - "# MATLAB L700: figure;\n", "__tracker.new_figure('figure')\n", "__tracker.new_figure('figure;')\n", - "# MATLAB L701: plot(xN,yN,x_at_spiketimes,y_at_spiketimes,'r.');\n", "__tracker.annotate(\"plot(xN,yN,x_at_spiketimes,y_at_spiketimes,'r.')\")\n", "ax = plt.gca()\n", "ax.cla()\n", "plt.gcf().set_size_inches(8.0, 8.0, forward=True)\n", "ax.plot(np.ravel(xN), np.ravel(yN), color=(0.0, 0.4470, 0.7410), linewidth=0.6)\n", "ax.plot(np.ravel(x_at_spiketimes), np.ravel(y_at_spiketimes), 'r.', markersize=2.5)\n", - "# MATLAB L702: axis tight square;\n", "ax = plt.gca()\n", "ax.relim()\n", "ax.autoscale_view(tight=True)\n", "ax.set_aspect('equal', adjustable='box')\n", "ax.tick_params(top=True, right=True, direction='in')\n", - "# MATLAB L703: xlabel('x position (m)'); ylabel('y position (m)');\n", "plt.xlabel('x position (m)')\n", "plt.ylabel('y position (m)')\n", - "# MATLAB L900: % fit a GLM model to the x and y positions.\n", "# fit a GLM model to the x and y positions.\n", - "# MATLAB L1000: [b,dev,stats] = glmfit([xN yN (xN.^2-mean(xN.^2)) (yN.^2-mean(yN.^2)) (xN.*yN-mean(xN.*yN))],spikes_binned,'poisson');\n", - "_matlab(\"[b,dev,stats] = glmfit([xN yN (xN.^2-mean(xN.^2)) (yN.^2-mean(yN.^2)) (xN.*yN-mean(xN.*yN))],spikes_binned,'poisson');\")\n", - "# MATLAB L1001: figure;\n", "__tracker.new_figure('figure')\n", "__tracker.new_figure('figure;')\n", - "# MATLAB L1002: errorbar(1:length(b), b, stats.se,'.');\n", - "_matlab(\"errorbar(1:length(b), b, stats.se,'.');\")\n", - "# MATLAB L1003: xticks=1:length(b);\n", - "_matlab('xticks=1:length(b);')\n", - "# MATLAB L1004: xtickLabels= {'baseline','x','y','x^2','y^2','x*y'};\n", - "_matlab(\"xtickLabels= {'baseline','x','y','x^2','y^2','x*y'};\")\n", - "# MATLAB L1005: set(gca,'xtick',xticks,'xtickLabel',xtickLabels);\n", - "_matlab(\"set(gca,'xtick',xticks,'xtickLabel',xtickLabels);\")\n", - "# MATLAB L1200: % visualize your model construct a grid of positions to plot the model against...\n", "# visualize your model construct a grid of positions to plot the model against...\n", - "# MATLAB L1300: figure;\n", "__tracker.new_figure('figure')\n", "__tracker.new_figure('figure;')\n", - "# MATLAB L1301: [x_new,y_new]=meshgrid(-1:.1:1);\n", - "_matlab('[x_new,y_new]=meshgrid(-1:.1:1);')\n", - "# MATLAB L1302: y_new = flipud(y_new);\n", - "_matlab('y_new = flipud(y_new);')\n", - "# MATLAB L1303: x_new = fliplr(x_new);\n", - "_matlab('x_new = fliplr(x_new);')\n", - "# MATLAB L1304: \n", "#\n", - "# MATLAB L1305: % compute lambda for each point on this grid using the GLM model\n", "# compute lambda for each point on this grid using the GLM model\n", - "# MATLAB L1306: lambda = exp(b(1) + b(2)*x_new + b(3)*y_new + b(4)*x_new.^2 + b(5)*y_new.^2 + b(6)*x_new.*y_new);\n", - "_matlab('lambda = exp(b(1) + b(2)*x_new + b(3)*y_new + b(4)*x_new.^2 + b(5)*y_new.^2 + b(6)*x_new.*y_new);')\n", - "# MATLAB L1307: lambda((x_new.^2+y_new.^2>1))=nan;\n", - "_matlab('lambda((x_new.^2+y_new.^2>1))=nan;')\n", - "# MATLAB L1308: \n", "#\n", - "# MATLAB L1309: %plot lambda as a function position over this grid\n", "# plot lambda as a function position over this grid\n", - "# MATLAB L1310: h_mesh = mesh(x_new,y_new,lambda,'AlphaData',0);\n", - "_matlab(\"h_mesh = mesh(x_new,y_new,lambda,'AlphaData',0);\")\n", - "# MATLAB L1311: get(h_mesh,'AlphaData');\n", - "_matlab(\"get(h_mesh,'AlphaData');\")\n", - "# MATLAB L1312: set(h_mesh,'FaceAlpha',0.2,'EdgeAlpha',0.8,'EdgeColor','b');\n", - "_matlab(\"set(h_mesh,'FaceAlpha',0.2,'EdgeAlpha',0.8,'EdgeColor','b');\")\n", - "# MATLAB L1313: hold on;\n", - "_matlab('hold on;')\n", - "# MATLAB L1314: plot3(cos(-pi:1e-2:pi),sin(-pi:1e-2:pi),zeros(size(-pi:1e-2:pi))); hold on;\n", "__tracker.annotate('plot3(cos(-pi:1e-2:pi),sin(-pi:1e-2:pi),zeros(size(-pi:1e-2:pi)))')\n", - "_matlab('plot3(cos(-pi:1e-2:pi),sin(-pi:1e-2:pi),zeros(size(-pi:1e-2:pi))); hold on;')\n", - "# MATLAB L1315: plot(xN,yN,x_at_spiketimes,y_at_spiketimes,'r.');\n", "__tracker.annotate(\"plot(xN,yN,x_at_spiketimes,y_at_spiketimes,'r.')\")\n", - "_matlab(\"plot(xN,yN,x_at_spiketimes,y_at_spiketimes,'r.');\")\n", - "# MATLAB L1316: axis tight square;\n", "ax = plt.gca()\n", "ax.relim()\n", "ax.autoscale_view(tight=True)\n", "ax.set_aspect('equal', adjustable='box')\n", "ax.tick_params(top=True, right=True, direction='in')\n", - "# MATLAB L1317: xlabel('x position (m)'); ylabel('y position (m)');\n", "plt.xlabel('x position (m)')\n", "plt.ylabel('y position (m)')\n", - "# MATLAB L1500: % Compare a linear model versus a Gaussian GLM model.\n", "# Compare a linear model versus a Gaussian GLM model.\n", - "# MATLAB L1600: [b_lin,dev_lin,stats_lin] = glmfit([xN yN],spikes_binned,'poisson');\n", - "_matlab(\"[b_lin,dev_lin,stats_lin] = glmfit([xN yN],spikes_binned,'poisson');\")\n", - "# MATLAB L1601: [b_quad,dev_quad,stats_quad] = glmfit([xN yN xN.^2 yN.^2 xN.*yN],spikes_binned,'poisson');\n", - "_matlab(\"[b_quad,dev_quad,stats_quad] = glmfit([xN yN xN.^2 yN.^2 xN.*yN],spikes_binned,'poisson');\")\n", - "# MATLAB L1602: \n", "#\n", - "# MATLAB L1603: lambdaEst_lin = exp( b_lin(1) + b_lin(2)*xN+b_lin(3)*yN); % based on our GLM model with the log \"link function\"\n", - "_matlab('lambdaEst_lin = exp( b_lin(1) + b_lin(2)*xN+b_lin(3)*yN); % based on our GLM model with the log \"link function\"')\n", - "# MATLAB L1604: lambdaEst_quad = exp( b_quad(1) + b_quad(2)*xN+b_quad(3)*yN+b_quad(4)*xN.^2 +b_quad(5)*yN.^2 +b_quad(6)*xN.*yN);\n", - "_matlab('lambdaEst_quad = exp( b_quad(1) + b_quad(2)*xN+b_quad(3)*yN+b_quad(4)*xN.^2 +b_quad(5)*yN.^2 +b_quad(6)*xN.*yN);')\n", - "# MATLAB L1800: % Make the KS Plot\n", "# Make the KS Plot\n", - "# MATLAB L1900: % ******* K-S Plot *******************\n", "# ******* K-S Plot *******************\n", - "# MATLAB L1901: % graph the K-S plot and confidence intervals for the K-S statistic\n", "# graph the K-S plot and confidence intervals for the K-S statistic\n", - "# MATLAB L1902: \n", "#\n", - "# MATLAB L1903: %first generate the conditional intensity at each timestep\n", "# first generate the conditional intensity at each timestep\n", - "# MATLAB L1904: % ** Adjust the below line according to your choice of model.\n", "# ** Adjust the below line according to your choice of model.\n", - "# MATLAB L1905: % remember to include a column of ones to multiply the default constant GLM parameter beta_0**\n", "# remember to include a column of ones to multiply the default constant GLM parameter beta_0**\n", - "# MATLAB L1906: \n", "#\n", - "# MATLAB L1907: % Use your parameter estimates (b) from glmfit along\n", "# Use your parameter estimates (b) from glmfit along\n", - "# MATLAB L1908: % with the covariates you used (xN, yN, ...)\n", "# with the covariates you used (xN, yN, ...)\n", - "# MATLAB L1909: \n", "#\n", - "# MATLAB L1910: lambdaEst=[lambdaEst_lin, lambdaEst_quad];\n", - "_matlab('lambdaEst=[lambdaEst_lin, lambdaEst_quad];')\n", - "# MATLAB L1911: timestep = 1;\n", "timestep = 1\n", - "# MATLAB L1912: lambdaInt = 0;\n", "lambdaInt = 0\n", - "# MATLAB L1913: j=0;\n", "j = 0\n", - "# MATLAB L1914: KS=[];\n", - "_matlab('KS=[];')\n", - "# MATLAB L1915: for t=1:length(spikes_binned)\n", - "_matlab('for t=1:length(spikes_binned)')\n", - "# MATLAB L1916: lambdaInt = lambdaInt + lambdaEst(t,:)*timestep;\n", - "_matlab('lambdaInt = lambdaInt + lambdaEst(t,:)*timestep;')\n", - "# MATLAB L1917: if (spikes_binned(t))\n", - "_matlab('if (spikes_binned(t))')\n", - "# MATLAB L1918: j = j + 1;\n", - "_matlab('j = j + 1;')\n", - "# MATLAB L1919: KS(j,:) = 1-exp(-lambdaInt);\n", - "_matlab('KS(j,:) = 1-exp(-lambdaInt);')\n", - "# MATLAB L1920: lambdaInt = [0 0];\n", - "_matlab('lambdaInt = [0 0];')\n", - "# MATLAB L1921: end\n", - "_matlab('end')\n", - "# MATLAB L1922: end\n", - "_matlab('end')\n", - "# MATLAB L1923: KSSorted = sort( KS );\n", - "_matlab('KSSorted = sort( KS );')\n", - "# MATLAB L1924: N = length( KSSorted);\n", - "_matlab('N = length( KSSorted);')\n", - "# MATLAB L1925: figure;\n", "__tracker.new_figure('figure')\n", "__tracker.new_figure('figure;')\n", - "# MATLAB L1926: plot( ([1:N]-.5)/N, KSSorted, 0:.01:1,0:.01:1, 'g',0:.01:1, [0:.01:1]+1.36/sqrt(N), 'r', 0:.01:1,[0:.01:1]-1.36/sqrt(N), 'r' );\n", "__tracker.annotate(\"plot( ([1:N]-.5)/N, KSSorted, 0:.01:1,0:.01:1, 'g',0:.01:1, [0:.01:1]+1.36/sqrt(N), 'r', 0:.01:1,[0:.01:1]-1.36/sqrt(N), 'r' )\")\n", - "_matlab(\"plot( ([1:N]-.5)/N, KSSorted, 0:.01:1,0:.01:1, 'g',0:.01:1, [0:.01:1]+1.36/sqrt(N), 'r', 0:.01:1,[0:.01:1]-1.36/sqrt(N), 'r' );\")\n", - "# MATLAB L1927: axis( [0 1 0 1] );\n", - "_matlab('axis( [0 1 0 1] );')\n", - "# MATLAB L1928: xlabel('Uniform CDF');\n", - "_matlab(\"xlabel('Uniform CDF');\")\n", - "# MATLAB L1929: ylabel('Empirical CDF of Rescaled ISIs');\n", - "_matlab(\"ylabel('Empirical CDF of Rescaled ISIs');\")\n", - "# MATLAB L1930: title('KS Plot with 95% Confidence Intervals');\n", "__tracker.annotate(\"title('KS Plot with 95% Confidence Intervals')\")\n", - "_matlab(\"title('KS Plot with 95% Confidence Intervals');\")\n", - "# MATLAB L1931: legend('Linear','Quadratic');\n", - "_matlab(\"legend('Linear','Quadratic');\")\n", - "__tracker.finalize()\n" + "__tracker.finalize()" ] } ], @@ -262,9 +135,7 @@ "nstat": { "expected_figures": 4, "run_group": "smoke", - "source_file": "/private/tmp/upstream-nstat-matlab/helpfiles/AnalysisExamples.mlx", - "source_type": "mlx", - "strict_section_cell_mapping": true, + "style": "python-example", "topic": "AnalysisExamples" } }, diff --git a/notebooks/AnalysisExamples2.ipynb b/notebooks/AnalysisExamples2.ipynb index 546f29c7..c7627694 100644 --- a/notebooks/AnalysisExamples2.ipynb +++ b/notebooks/AnalysisExamples2.ipynb @@ -7,7 +7,7 @@ "metadata": {}, "outputs": [], "source": [ - "# AUTO-GENERATED FROM MATLAB AnalysisExamples2.mlx -- DO NOT EDIT\n", + "# nSTAT-python notebook example: AnalysisExamples2\n", "from pathlib import Path\n", "import sys\n", "\n", @@ -32,12 +32,7 @@ "OUTPUT_ROOT = REPO_ROOT / \"output\" / \"notebook_images\"\n", "__tracker = FigureTracker(topic='AnalysisExamples2', output_root=OUTPUT_ROOT, expected_count=5)\n", "\n", - "def _matlab(line: str) -> None:\n", - " \"\"\"Placeholder for untranslated MATLAB syntax.\"\"\"\n", - " _ = line\n", - " return\n", - "\n", - "def _load_matlab_globals(name: str) -> dict[str, object]:\n", + "def _load_example_globals(name: str) -> dict[str, object]:\n", " candidates = [\n", " Path(name),\n", " DATA_DIR / name,\n", @@ -52,156 +47,52 @@ " return {}\n", "\n", "# SECTION 0: Section 0\n", - "# MATLAB L100: % Analysis Examples 2\n", "# Analysis Examples 2\n", - "# MATLAB L200: % Compare with traditional Neural Spike Train Analysis here\n", "# Compare with traditional Neural Spike Train Analysis here\n", - "# MATLAB L300: % load the rat trajectory and spiking data;\n", "# load the rat trajectory and spiking data;\n", - "# MATLAB L301: close all;\n", "plt.close(\"all\")\n", - "# MATLAB L302: warning off;\n", - "_matlab('warning off;')\n", - "# MATLAB L303: load('glm_data.mat');\n", - "globals().update(_load_matlab_globals('glm_data.mat'))\n", - "# MATLAB L304: \n", + "globals().update(_load_example_globals('glm_data.mat'))\n", "#\n", - "# MATLAB L305: nst = nspikeTrain(spiketimes);\n", - "_matlab('nst = nspikeTrain(spiketimes);')\n", - "# MATLAB L306: baseline = Covariate(T,ones(length(xN),1),'Baseline','time','s','',{'mu'});\n", - "_matlab(\"baseline = Covariate(T,ones(length(xN),1),'Baseline','time','s','',{'mu'});\")\n", - "# MATLAB L307: position = Covariate(T,[xN yN],'Position', 'time','s','m',{'x','y'});\n", - "_matlab(\"position = Covariate(T,[xN yN],'Position', 'time','s','m',{'x','y'});\")\n", - "# MATLAB L308: velocity = Covariate(T,[vxN,vyN],'Velocity','time','s','m/s',{'v_x','v_y'});\n", - "_matlab(\"velocity = Covariate(T,[vxN,vyN],'Velocity','time','s','m/s',{'v_x','v_y'});\")\n", - "# MATLAB L309: radial = Covariate(T,[xN yN xN.^2 yN.^2 xN.*yN],'Radial','time','s','m',{'x','y','x^2','y^2','x*y'});\n", - "_matlab(\"radial = Covariate(T,[xN yN xN.^2 yN.^2 xN.*yN],'Radial','time','s','m',{'x','y','x^2','y^2','x*y'});\")\n", - "# MATLAB L310: % could just define velocity = postion.derivative;\n", "# could just define velocity = postion.derivative;\n", - "# MATLAB L311: \n", "#\n", - "# MATLAB L312: %possibly add view as vector for covariates of dimension 3 or less\n", "# possibly add view as vector for covariates of dimension 3 or less\n", - "# MATLAB L500: % In the original analysis, we already had vectors of the covariates sampled at the spiketimes. This step would require interpolating the covariates and then sampling them at each of the spikeTimes. In our case this is quite simple.\n", "# In the original analysis, we already had vectors of the covariates sampled at the spiketimes. This step would require interpolating the covariates and then sampling them at each of the spikeTimes. In our case this is quite simple.\n", - "# MATLAB L600: [values_at_spiketimes] =position.getValueAt(spiketimes);\n", - "_matlab('[values_at_spiketimes] =position.getValueAt(spiketimes);')\n", - "# MATLAB L800: % We could also upsample our data to get better estimates of the covariates at these points\n", "# We could also upsample our data to get better estimates of the covariates at these points\n", - "# MATLAB L900: [values_at_spiketimes] =position.resample(1/min(diff(spiketimes))).getValueAt(spiketimes);\n", - "_matlab('[values_at_spiketimes] =position.resample(1/min(diff(spiketimes))).getValueAt(spiketimes);')\n", - "# MATLAB L1100: % visualize the raw data\n", "# visualize the raw data\n", - "# MATLAB L1200: figure;\n", "__tracker.new_figure('figure')\n", "__tracker.new_figure('figure;')\n", - "# MATLAB L1201: plot(position.getSubSignal('x').dataToMatrix,position.getSubSignal('y').dataToMatrix,...\n", "__tracker.annotate(\"plot(position.getSubSignal('x').dataToMatrix,position.getSubSignal('y').dataToMatrix,...\")\n", - "_matlab(\"plot(position.getSubSignal('x').dataToMatrix,position.getSubSignal('y').dataToMatrix,...\")\n", - "# MATLAB L1202: values_at_spiketimes(:,1),values_at_spiketimes(:,2),'r.');\n", - "_matlab(\"values_at_spiketimes(:,1),values_at_spiketimes(:,2),'r.');\")\n", - "# MATLAB L1203: axis tight square;\n", "ax = plt.gca()\n", "ax.relim()\n", "ax.autoscale_view(tight=True)\n", "ax.set_aspect('equal', adjustable='box')\n", "ax.tick_params(top=True, right=True, direction='in')\n", - "# MATLAB L1204: xlabel('x position (m)'); ylabel('y position (m)');\n", "plt.xlabel('x position (m)')\n", "plt.ylabel('y position (m)')\n", - "# MATLAB L1400: % Create a trial object and define the fits that we want to run\n", "# Create a trial object and define the fits that we want to run\n", - "# MATLAB L1500: spikeColl = nstColl({nst});\n", - "_matlab('spikeColl = nstColl({nst});')\n", - "# MATLAB L1501: covarColl = CovColl({baseline,radial});\n", - "_matlab('covarColl = CovColl({baseline,radial});')\n", - "# MATLAB L1502: trial = Trial(spikeColl,covarColl);\n", - "_matlab('trial = Trial(spikeColl,covarColl);')\n", - "# MATLAB L1503: clear tc;\n", "pass\n", - "# MATLAB L1504: sampleRate=1000;\n", "sampleRate = 1000\n", - "# MATLAB L1505: % tcObj=TrialConfig(covMask,sampleRate, history,minTime,maxTime)\n", "# tcObj=TrialConfig(covMask,sampleRate, history,minTime,maxTime)\n", - "# MATLAB L1506: tc{1} = TrialConfig({{'Baseline','mu'},{'Radial','x','y'}},sampleRate,[]); tc{1}.setName('Linear');\n", - "_matlab(\"tc{1} = TrialConfig({{'Baseline','mu'},{'Radial','x','y'}},sampleRate,[]); tc{1}.setName('Linear');\")\n", - "# MATLAB L1507: tc{2} = TrialConfig({{'Baseline','mu'},{'Radial','x','y','x^2','y^2','x*y'}},sampleRate,[]); tc{2}.setName('Quadratic');\n", - "_matlab(\"tc{2} = TrialConfig({{'Baseline','mu'},{'Radial','x','y','x^2','y^2','x*y'}},sampleRate,[]); tc{2}.setName('Quadratic');\")\n", - "# MATLAB L1508: tc{3} = TrialConfig({{'Baseline','mu'},{'Radial','x','y','x^2','y^2','x*y'}},sampleRate,[0 1]./sampleRate); tc{3}.setName('Quadratic+Hist');\n", "__tracker.annotate(\"tc{3}.setName('Quadratic+Hist')\")\n", - "_matlab(\"tc{3} = TrialConfig({{'Baseline','mu'},{'Radial','x','y','x^2','y^2','x*y'}},sampleRate,[0 1]./sampleRate); tc{3}.setName('Quadratic+Hist');\")\n", - "# MATLAB L1700: % Create our collection of configurations and run the analysis;\n", "# Create our collection of configurations and run the analysis;\n", - "# MATLAB L1800: tcc = ConfigColl(tc); makePlot=1; neuronNum=1;\n", - "_matlab('tcc = ConfigColl(tc); makePlot=1; neuronNum=1;')\n", - "# MATLAB L1801: fitResults =Analysis.RunAnalysisForAllNeurons(trial,tcc,0);\n", - "_matlab('fitResults =Analysis.RunAnalysisForAllNeurons(trial,tcc,0);')\n", - "# MATLAB L1802: fitResults.plotResults;\n", "__tracker.annotate('fitResults.plotResults')\n", - "_matlab('fitResults.plotResults;')\n", - "# MATLAB L2000: % Visualize the firing rates as a function of the spatial covariates\n", "# Visualize the firing rates as a function of the spatial covariates\n", - "# MATLAB L2100: figure;\n", "__tracker.new_figure('figure')\n", "__tracker.new_figure('figure;')\n", - "# MATLAB L2101: [x_new,y_new]=meshgrid(-1:.1:1); %define new x and y\n", - "_matlab('[x_new,y_new]=meshgrid(-1:.1:1); %define new x and y')\n", - "# MATLAB L2102: y_new = flipud(y_new);\n", - "_matlab('y_new = flipud(y_new);')\n", - "# MATLAB L2103: x_new = fliplr(x_new);\n", - "_matlab('x_new = fliplr(x_new);')\n", - "# MATLAB L2104: \n", "#\n", - "# MATLAB L2105: %For each covariate new to place the new data in a cell array\n", "# For each covariate new to place the new data in a cell array\n", - "# MATLAB L2106: newData{1} =ones(size(x_new));\n", - "_matlab('newData{1} =ones(size(x_new));')\n", - "# MATLAB L2107: newData{2} =x_new; newData{3} =y_new;\n", - "_matlab('newData{2} =x_new; newData{3} =y_new;')\n", - "# MATLAB L2108: newData{4} =x_new.^2; newData{5} =y_new.^2;\n", - "_matlab('newData{4} =x_new.^2; newData{5} =y_new.^2;')\n", - "# MATLAB L2109: newData{6} =x_new.*y_new;\n", - "_matlab('newData{6} =x_new.*y_new;')\n", - "# MATLAB L2110: color = Analysis.colors;\n", - "_matlab('color = Analysis.colors;')\n", - "# MATLAB L2111: \n", "#\n", - "# MATLAB L2112: % Evaluate our fits using the new parameters\n", "# Evaluate our fits using the new parameters\n", - "# MATLAB L2113: for i=1:fitResults.numResults\n", - "_matlab('for i=1:fitResults.numResults')\n", - "# MATLAB L2114: \n", "#\n", - "# MATLAB L2115: lambda = fitResults.evalLambda(i,newData);\n", - "_matlab('lambda = fitResults.evalLambda(i,newData);')\n", - "# MATLAB L2116: h_mesh = mesh(x_new,y_new,lambda,'AlphaData',0);\n", - "_matlab(\"h_mesh = mesh(x_new,y_new,lambda,'AlphaData',0);\")\n", - "# MATLAB L2117: get(h_mesh,'AlphaData');\n", - "_matlab(\"get(h_mesh,'AlphaData');\")\n", - "# MATLAB L2118: set(h_mesh,'FaceAlpha',0.2,'EdgeAlpha',0.8,'EdgeColor',color{i});\n", - "_matlab(\"set(h_mesh,'FaceAlpha',0.2,'EdgeAlpha',0.8,'EdgeColor',color{i});\")\n", - "# MATLAB L2119: %figure;\n", "# figure;\n", - "# MATLAB L2120: hold on;\n", - "_matlab('hold on;')\n", - "# MATLAB L2121: end\n", - "_matlab('end')\n", - "# MATLAB L2122: legend(fitResults.lambda.dataLabels);\n", - "_matlab('legend(fitResults.lambda.dataLabels);')\n", - "# MATLAB L2123: plot(position.getSubSignal('x').dataToMatrix,position.getSubSignal('y').dataToMatrix,...\n", "__tracker.annotate(\"plot(position.getSubSignal('x').dataToMatrix,position.getSubSignal('y').dataToMatrix,...\")\n", - "_matlab(\"plot(position.getSubSignal('x').dataToMatrix,position.getSubSignal('y').dataToMatrix,...\")\n", - "# MATLAB L2124: values_at_spiketimes(:,1),values_at_spiketimes(:,2),'r.');\n", - "_matlab(\"values_at_spiketimes(:,1),values_at_spiketimes(:,2),'r.');\")\n", - "# MATLAB L2125: axis tight square;\n", "ax = plt.gca()\n", "ax.relim()\n", "ax.autoscale_view(tight=True)\n", "ax.set_aspect('equal', adjustable='box')\n", "ax.tick_params(top=True, right=True, direction='in')\n", - "# MATLAB L2126: xlabel('x position (m)'); ylabel('y position (m)');\n", "plt.xlabel('x position (m)')\n", - "plt.ylabel('y position (m)')\n" + "plt.ylabel('y position (m)')" ] }, { @@ -212,12 +103,7 @@ "outputs": [], "source": [ "# SECTION 1: Toolbox vs. Standard GLM comparison\n", - "# MATLAB L2400: % Compare the results using our approach with the standard approach used in the first example previous standard regression\n", - "# Compare the results using our approach with the standard approach used in the first example previous standard regression\n", - "# MATLAB L2500: [b,dev,stats] = glmfit([xN yN xN.^2 yN.^2 xN.*yN],spikes_binned,'poisson');\n", - "_matlab(\"[b,dev,stats] = glmfit([xN yN xN.^2 yN.^2 xN.*yN],spikes_binned,'poisson');\")\n", - "# MATLAB L2501: b-fitResults.b{2} % should be close to zero\n", - "_matlab('b-fitResults.b{2} % should be close to zero')\n" + "# Compare the results using our approach with the standard approach used in the first example previous standard regression" ] }, { @@ -228,21 +114,9 @@ "outputs": [], "source": [ "# SECTION 2: Compute the history effect\n", - "# MATLAB L2800: sampleRate=1000; makePlot=1; neuronNum = 1;\n", - "_matlab('sampleRate=1000; makePlot=1; neuronNum = 1;')\n", - "# MATLAB L2801: covLabels = {{'Baseline','mu'},{'Radial','x','y','x^2','y^2','x*y'}};\n", - "_matlab(\"covLabels = {{'Baseline','mu'},{'Radial','x','y','x^2','y^2','x*y'}};\")\n", - "# MATLAB L2802: Algorithm = 'GLM';\n", - "_matlab(\"Algorithm = 'GLM';\")\n", - "# MATLAB L2803: batchMode=0;\n", "batchMode = 0\n", - "# MATLAB L2804: windowTimes =(0:1:10)./sampleRate;\n", - "_matlab('windowTimes =(0:1:10)./sampleRate;')\n", - "# MATLAB L2805: % [fitResults,tcc] = computeHistLag(tObj,neuronNum,windowTimes,CovLabels,Algorithm,batchMode,sampleRate,makePlot,histMinTimes,histMaxTimes)\n", "# [fitResults,tcc] = computeHistLag(tObj,neuronNum,windowTimes,CovLabels,Algorithm,batchMode,sampleRate,makePlot,histMinTimes,histMaxTimes)\n", - "# MATLAB L2806: [fitResults,tcc] = Analysis.computeHistLag(trial,neuronNum,windowTimes,covLabels,Algorithm,batchMode,sampleRate,makePlot);\n", - "_matlab('[fitResults,tcc] = Analysis.computeHistLag(trial,neuronNum,windowTimes,covLabels,Algorithm,batchMode,sampleRate,makePlot);')\n", - "__tracker.finalize()\n" + "__tracker.finalize()" ] } ], @@ -253,9 +127,7 @@ "nstat": { "expected_figures": 5, "run_group": "full", - "source_file": "/private/tmp/upstream-nstat-matlab/helpfiles/AnalysisExamples2.mlx", - "source_type": "mlx", - "strict_section_cell_mapping": true, + "style": "python-example", "topic": "AnalysisExamples2" } }, diff --git a/notebooks/ConfigCollExamples.ipynb b/notebooks/ConfigCollExamples.ipynb index 45518179..ecc87b98 100644 --- a/notebooks/ConfigCollExamples.ipynb +++ b/notebooks/ConfigCollExamples.ipynb @@ -7,7 +7,7 @@ "metadata": {}, "outputs": [], "source": [ - "# AUTO-GENERATED FROM MATLAB ConfigCollExamples.mlx -- DO NOT EDIT\n", + "# nSTAT-python notebook example: ConfigCollExamples\n", "from pathlib import Path\n", "import sys\n", "\n", @@ -32,12 +32,7 @@ "OUTPUT_ROOT = REPO_ROOT / \"output\" / \"notebook_images\"\n", "__tracker = FigureTracker(topic='ConfigCollExamples', output_root=OUTPUT_ROOT, expected_count=0)\n", "\n", - "def _matlab(line: str) -> None:\n", - " \"\"\"Placeholder for untranslated MATLAB syntax.\"\"\"\n", - " _ = line\n", - " return\n", - "\n", - "def _load_matlab_globals(name: str) -> dict[str, object]:\n", + "def _load_example_globals(name: str) -> dict[str, object]:\n", " candidates = [\n", " Path(name),\n", " DATA_DIR / name,\n", @@ -52,17 +47,9 @@ " return {}\n", "\n", "# SECTION 0: Section 0\n", - "# MATLAB L100: % ConfigColl Examples\n", "# ConfigColl Examples\n", - "# MATLAB L200: % tcObj=TrialConfig(covMask,sampleRate, history,minTime,maxTime)\n", "# tcObj=TrialConfig(covMask,sampleRate, history,minTime,maxTime)\n", - "# MATLAB L300: tc1 = TrialConfig({'Force','f_x'},2000,[.1 .2],-1,2);\n", - "_matlab(\"tc1 = TrialConfig({'Force','f_x'},2000,[.1 .2],-1,2);\")\n", - "# MATLAB L301: tc2 = TrialConfig({'Position','x'},2000,[.1 .2],-1,2);\n", - "_matlab(\"tc2 = TrialConfig({'Position','x'},2000,[.1 .2],-1,2);\")\n", - "# MATLAB L302: tcc = ConfigColl({tc1,tc2});\n", - "_matlab('tcc = ConfigColl({tc1,tc2});')\n", - "__tracker.finalize()\n" + "__tracker.finalize()" ] } ], @@ -73,9 +60,7 @@ "nstat": { "expected_figures": 0, "run_group": "full", - "source_file": "/private/tmp/upstream-nstat-matlab/helpfiles/ConfigCollExamples.mlx", - "source_type": "mlx", - "strict_section_cell_mapping": true, + "style": "python-example", "topic": "ConfigCollExamples" } }, diff --git a/notebooks/CovCollExamples.ipynb b/notebooks/CovCollExamples.ipynb index a8d10c0e..a4b77da7 100644 --- a/notebooks/CovCollExamples.ipynb +++ b/notebooks/CovCollExamples.ipynb @@ -7,7 +7,7 @@ "metadata": {}, "outputs": [], "source": [ - "# AUTO-GENERATED FROM MATLAB CovCollExamples.mlx -- DO NOT EDIT\n", + "# nSTAT-python notebook example: CovCollExamples\n", "from pathlib import Path\n", "import sys\n", "\n", @@ -32,12 +32,7 @@ "OUTPUT_ROOT = REPO_ROOT / \"output\" / \"notebook_images\"\n", "__tracker = FigureTracker(topic='CovCollExamples', output_root=OUTPUT_ROOT, expected_count=2)\n", "\n", - "def _matlab(line: str) -> None:\n", - " \"\"\"Placeholder for untranslated MATLAB syntax.\"\"\"\n", - " _ = line\n", - " return\n", - "\n", - "def _load_matlab_globals(name: str) -> dict[str, object]:\n", + "def _load_example_globals(name: str) -> dict[str, object]:\n", " candidates = [\n", " Path(name),\n", " DATA_DIR / name,\n", @@ -52,51 +47,22 @@ " return {}\n", "\n", "# SECTION 0: Section 0\n", - "# MATLAB L100: % Test CovColl\n", "# Test CovColl\n", - "# MATLAB L200: close all;\n", "plt.close(\"all\")\n", - "# MATLAB L201: load CovariateSample.mat;\n", - "_matlab('load CovariateSample.mat;')\n", - "# MATLAB L202: cc=CovColl({position,force});\n", - "_matlab('cc=CovColl({position,force});')\n", - "# MATLAB L203: figure; cc.plot; %plots all covariates and their components\n", "__tracker.new_figure('figure')\n", "__tracker.annotate('cc.plot')\n", - "_matlab('figure; cc.plot; %plots all covariates and their components')\n", - "# MATLAB L204: \n", "#\n", - "# MATLAB L205: cc.getCov(1); %returns position;\n", - "_matlab('cc.getCov(1); %returns position;')\n", - "# MATLAB L206: cc.getCov('Position');\n", - "_matlab(\"cc.getCov('Position');\")\n", - "# MATLAB L207: cc.getCov({'Position','Force'});\n", - "_matlab(\"cc.getCov({'Position','Force'});\")\n", - "# MATLAB L208: cc.resample(200); %resamples both position and force\n", - "_matlab('cc.resample(200); %resamples both position and force')\n", - "# MATLAB L209: \n", "#\n", - "# MATLAB L210: \n", "#\n", - "# MATLAB L211: cc.setMask({{'Position','x'},{'Force','f_y'}});\n", - "_matlab(\"cc.setMask({{'Position','x'},{'Force','f_y'}});\")\n", - "# MATLAB L212: figure; cc.plot; %plot only x and f_y;\n", "__tracker.new_figure('figure')\n", "__tracker.annotate('cc.plot')\n", - "_matlab('figure; cc.plot; %plot only x and f_y;')\n", - "# MATLAB L213: \n", "#\n", - "# MATLAB L214: % dataToMatrix\n", "# dataToMatrix\n", - "# MATLAB L215: % setMaxTime\n", "# setMaxTime\n", - "# MATLAB L216: % setMinTime\n", "# setMinTime\n", - "# MATLAB L217: % removeCovariate\n", "# removeCovariate\n", - "# MATLAB L218: % nActCovar\n", "# nActCovar\n", - "__tracker.finalize()\n" + "__tracker.finalize()" ] } ], @@ -107,9 +73,7 @@ "nstat": { "expected_figures": 2, "run_group": "full", - "source_file": "/private/tmp/upstream-nstat-matlab/helpfiles/CovCollExamples.mlx", - "source_type": "mlx", - "strict_section_cell_mapping": true, + "style": "python-example", "topic": "CovCollExamples" } }, diff --git a/notebooks/CovariateExamples.ipynb b/notebooks/CovariateExamples.ipynb index 69b28119..f67a09dd 100644 --- a/notebooks/CovariateExamples.ipynb +++ b/notebooks/CovariateExamples.ipynb @@ -7,7 +7,7 @@ "metadata": {}, "outputs": [], "source": [ - "# AUTO-GENERATED FROM MATLAB CovariateExamples.mlx -- DO NOT EDIT\n", + "# nSTAT-python notebook example: CovariateExamples\n", "from pathlib import Path\n", "import sys\n", "\n", @@ -32,12 +32,7 @@ "OUTPUT_ROOT = REPO_ROOT / \"output\" / \"notebook_images\"\n", "__tracker = FigureTracker(topic='CovariateExamples', output_root=OUTPUT_ROOT, expected_count=2)\n", "\n", - "def _matlab(line: str) -> None:\n", - " \"\"\"Placeholder for untranslated MATLAB syntax.\"\"\"\n", - " _ = line\n", - " return\n", - "\n", - "def _load_matlab_globals(name: str) -> dict[str, object]:\n", + "def _load_example_globals(name: str) -> dict[str, object]:\n", " candidates = [\n", " Path(name),\n", " DATA_DIR / name,\n", @@ -52,10 +47,8 @@ " return {}\n", "\n", "# SECTION 0: Section 0\n", - "# MATLAB L100: % Test the Cov class\n", "# Test the Cov class\n", - "# MATLAB L200: % Covariates are just like signals with a mean and a standard deviation They have two representations, the default (original representation) and a zero-mean representation\n", - "# Covariates are just like signals with a mean and a standard deviation They have two representations, the default (original representation) and a zero-mean representation\n" + "# Covariates are just like signals with a mean and a standard deviation They have two representations, the default (original representation) and a zero-mean representation" ] }, { @@ -66,71 +59,25 @@ "outputs": [], "source": [ "# SECTION 1: Example 1: Using Covariates\n", - "# MATLAB L400: % Create some Data\n", "# Create some Data\n", - "# MATLAB L500: close all;\n", "plt.close(\"all\")\n", - "# MATLAB L501: t=0:.01:5; t=t';\n", - "_matlab(\"t=0:.01:5; t=t';\")\n", - "# MATLAB L502: x=exp(-t);\n", - "_matlab('x=exp(-t);')\n", - "# MATLAB L503: y=sin(2*pi*t);\n", - "_matlab('y=sin(2*pi*t);')\n", - "# MATLAB L504: z=(-y).^3;\n", - "_matlab('z=(-y).^3;')\n", - "# MATLAB L505: \n", "#\n", - "# MATLAB L506: fx=abs(y);\n", - "_matlab('fx=abs(y);')\n", - "# MATLAB L507: fy=abs(y).^2;\n", - "_matlab('fy=abs(y).^2;')\n", - "# MATLAB L700: % Define labels and plotting properties for each Covariate\n", "# Define labels and plotting properties for each Covariate\n", - "# MATLAB L800: dLabels1={'f_x','f_y'};\n", - "_matlab(\"dLabels1={'f_x','f_y'};\")\n", - "# MATLAB L801: dLabels2={'x','y','z'};\n", - "_matlab(\"dLabels2={'x','y','z'};\")\n", - "# MATLAB L802: \n", "#\n", - "# MATLAB L803: plotProps = {{' ''g'', ''LineWidth'' ,.5'},... %for x\n", - "_matlab(\"plotProps = {{' ''g'', ''LineWidth'' ,.5'},... %for x\")\n", - "# MATLAB L804: {' ''k'', ''LineWidth'' ,.5'},... %for y\n", - "_matlab(\"{' ''k'', ''LineWidth'' ,.5'},... %for y\")\n", - "# MATLAB L805: {' ''b'' '}}; %for z\n", - "_matlab(\"{' ''b'' '}}; %for z\")\n", - "# MATLAB L806: \n", "#\n", - "# MATLAB L807: force = Covariate(t, [fx fy], 'Force', 'time', 's', 'N', dLabels1);\n", - "_matlab(\"force = Covariate(t, [fx fy], 'Force', 'time', 's', 'N', dLabels1);\")\n", - "# MATLAB L808: position=Covariate(t,[x y z], 'Position','time','s','cm', dLabels2);\n", - "_matlab(\"position=Covariate(t,[x y z], 'Position','time','s','cm', dLabels2);\")\n", - "# MATLAB L1000: % Plot the covariates and change their properties\n", "# Plot the covariates and change their properties\n", - "# MATLAB L1100: position.getSigRep.plot('all',plotProps); %same as position.plot\n", "__tracker.new_figure(\"position.getSigRep.plot('all',plotProps)\")\n", - "_matlab(\"position.getSigRep.plot('all',plotProps); %same as position.plot\")\n", - "# MATLAB L1101: plotPropsForce = {{' ''b'' '},{' ''k'' '}};\n", - "_matlab(\"plotPropsForce = {{' ''b'' '},{' ''k'' '}};\")\n", - "# MATLAB L1102: figure;\n", "__tracker.new_figure('figure')\n", "__tracker.new_figure('figure;')\n", - "# MATLAB L1103: subplot(1,2,1); force.getSigRep.plot('all',plotPropsForce);\n", "__tracker.annotate('subplot(1,2,1)')\n", "__tracker.annotate(\"force.getSigRep.plot('all',plotPropsForce)\")\n", - "_matlab(\"subplot(1,2,1); force.getSigRep.plot('all',plotPropsForce);\")\n", - "# MATLAB L1104: % can also set these properties as default by calling\n", "# can also set these properties as default by calling\n", - "# MATLAB L1105: % >>force.setPlotProps(plotPropsForce);\n", "# >>force.setPlotProps(plotPropsForce);\n", - "# MATLAB L1106: % >>force.plot;\n", "# >>force.plot;\n", - "# MATLAB L1107: \n", "#\n", - "# MATLAB L1108: subplot(1,2,2); force.getSigRep('zero-mean').plot('all',plotPropsForce);\n", "__tracker.annotate('subplot(1,2,2)')\n", "__tracker.annotate(\"force.getSigRep('zero-mean').plot('all',plotPropsForce)\")\n", - "_matlab(\"subplot(1,2,2); force.getSigRep('zero-mean').plot('all',plotPropsForce);\")\n", - "__tracker.finalize()\n" + "__tracker.finalize()" ] } ], @@ -141,9 +88,7 @@ "nstat": { "expected_figures": 2, "run_group": "smoke", - "source_file": "/private/tmp/upstream-nstat-matlab/helpfiles/CovariateExamples.mlx", - "source_type": "mlx", - "strict_section_cell_mapping": true, + "style": "python-example", "topic": "CovariateExamples" } }, diff --git a/notebooks/DecodingExample.ipynb b/notebooks/DecodingExample.ipynb index d4cf3fce..619ca0b0 100644 --- a/notebooks/DecodingExample.ipynb +++ b/notebooks/DecodingExample.ipynb @@ -7,7 +7,7 @@ "metadata": {}, "outputs": [], "source": [ - "# AUTO-GENERATED FROM MATLAB DecodingExample.mlx -- DO NOT EDIT\n", + "# nSTAT-python notebook example: DecodingExample\n", "from pathlib import Path\n", "import sys\n", "\n", @@ -32,12 +32,7 @@ "OUTPUT_ROOT = REPO_ROOT / \"output\" / \"notebook_images\"\n", "__tracker = FigureTracker(topic='DecodingExample', output_root=OUTPUT_ROOT, expected_count=5)\n", "\n", - "def _matlab(line: str) -> None:\n", - " \"\"\"Placeholder for untranslated MATLAB syntax.\"\"\"\n", - " _ = line\n", - " return\n", - "\n", - "def _load_matlab_globals(name: str) -> dict[str, object]:\n", + "def _load_example_globals(name: str) -> dict[str, object]:\n", " candidates = [\n", " Path(name),\n", " DATA_DIR / name,\n", @@ -52,10 +47,8 @@ " return {}\n", "\n", "# SECTION 0: Section 0\n", - "# MATLAB L100: % STIMULUS DECODING\n", "# STIMULUS DECODING\n", - "# MATLAB L200: % In this example we show how to decode a univariate and a bivariate stimulus based on a point process observations using nSTAT. Even though due to the simulated nature of the data, we know the exact condition intensity function, we estimate the parameters before moving on to the decoding stage.\n", - "# In this example we show how to decode a univariate and a bivariate stimulus based on a point process observations using nSTAT. Even though due to the simulated nature of the data, we know the exact condition intensity function, we estimate the parameters before moving on to the decoding stage.\n" + "# In this example we show how to decode a univariate and a bivariate stimulus based on a point process observations using nSTAT. Even though due to the simulated nature of the data, we know the exact condition intensity function, we estimate the parameters before moving on to the decoding stage." ] }, { @@ -66,41 +59,16 @@ "outputs": [], "source": [ "# SECTION 1: Generate the conditional Intensity Function\n", - "# MATLAB L400: close all;\n", "plt.close(\"all\")\n", - "# MATLAB L401: delta = 0.001; Tmax = 10;\n", - "_matlab('delta = 0.001; Tmax = 10;')\n", - "# MATLAB L402: time = 0:delta:Tmax;\n", - "_matlab('time = 0:delta:Tmax;')\n", - "# MATLAB L403: f=.1; b1=1;b0=-3;\n", - "_matlab('f=.1; b1=1;b0=-3;')\n", - "# MATLAB L404: x = sin(2*pi*f*time);\n", - "_matlab('x = sin(2*pi*f*time);')\n", - "# MATLAB L405: expData = exp(b1*x+b0);\n", - "_matlab('expData = exp(b1*x+b0);')\n", - "# MATLAB L406: lambdaData = expData./(1+expData);\n", - "_matlab('lambdaData = expData./(1+expData);')\n", - "# MATLAB L407: \n", "#\n", - "# MATLAB L408: lambda = Covariate(time,lambdaData./delta, '\\Lambda(t)','time','s','Hz',{'\\lambda_{1}'},{{' ''b'', ''LineWidth'' ,2'}});\n", - "_matlab(\"lambda = Covariate(time,lambdaData./delta, '\\\\Lambda(t)','time','s','Hz',{'\\\\lambda_{1}'},{{' ''b'', ''LineWidth'' ,2'}});\")\n", - "# MATLAB L409: \n", "#\n", - "# MATLAB L410: numRealizations = 10;\n", "numRealizations = 10\n", - "# MATLAB L411: spikeColl = CIF.simulateCIFByThinningFromLambda(lambda,numRealizations);\n", - "_matlab('spikeColl = CIF.simulateCIFByThinningFromLambda(lambda,numRealizations);')\n", - "# MATLAB L412: figure;\n", "__tracker.new_figure('figure')\n", "__tracker.new_figure('figure;')\n", - "# MATLAB L413: subplot(2,1,1); spikeColl.plot;\n", "__tracker.annotate('subplot(2,1,1)')\n", "__tracker.annotate('spikeColl.plot')\n", - "_matlab('subplot(2,1,1); spikeColl.plot;')\n", - "# MATLAB L414: subplot(2,1,2); lambda.plot;\n", "__tracker.annotate('subplot(2,1,2)')\n", - "__tracker.annotate('lambda.plot')\n", - "_matlab('subplot(2,1,2); lambda.plot;')\n" + "__tracker.annotate('lambda.plot')" ] }, { @@ -111,119 +79,29 @@ "outputs": [], "source": [ "# SECTION 2: Fit a model to the spikedata to obtain a model CIF\n", - "# MATLAB L700: stim = Covariate(time,sin(2*pi*f*time),'Stimulus','time','s','V',{'stim'});\n", - "_matlab(\"stim = Covariate(time,sin(2*pi*f*time),'Stimulus','time','s','V',{'stim'});\")\n", - "# MATLAB L701: baseline = Covariate(time,ones(length(time),1),'Baseline','time','s','',...\n", - "_matlab(\"baseline = Covariate(time,ones(length(time),1),'Baseline','time','s','',...\")\n", - "# MATLAB L702: {'constant'});\n", - "_matlab(\"{'constant'});\")\n", - "# MATLAB L703: figure;\n", "__tracker.new_figure('figure')\n", "__tracker.new_figure('figure;')\n", - "# MATLAB L704: cc = CovColl({stim,baseline});\n", - "_matlab('cc = CovColl({stim,baseline});')\n", - "# MATLAB L705: trial = Trial(spikeColl,cc);\n", - "_matlab('trial = Trial(spikeColl,cc);')\n", - "# MATLAB L706: trial.plot;\n", "__tracker.annotate('trial.plot')\n", - "_matlab('trial.plot;')\n", - "# MATLAB L707: \n", "#\n", - "# MATLAB L708: clear c;\n", "pass\n", - "# MATLAB L709: selfHist = [] ; NeighborHist = []; sampleRate = 1000;\n", - "_matlab('selfHist = [] ; NeighborHist = []; sampleRate = 1000;')\n", - "# MATLAB L710: c{1} = TrialConfig({{'Baseline','constant'}},sampleRate,selfHist,...\n", - "_matlab(\"c{1} = TrialConfig({{'Baseline','constant'}},sampleRate,selfHist,...\")\n", - "# MATLAB L711: NeighborHist);\n", - "_matlab('NeighborHist);')\n", - "# MATLAB L712: c{1}.setName('Baseline');\n", - "_matlab(\"c{1}.setName('Baseline');\")\n", - "# MATLAB L713: c{2} = TrialConfig({{'Baseline','constant'},{'Stimulus','stim'}},...\n", - "_matlab(\"c{2} = TrialConfig({{'Baseline','constant'},{'Stimulus','stim'}},...\")\n", - "# MATLAB L714: sampleRate,selfHist,NeighborHist);\n", - "_matlab('sampleRate,selfHist,NeighborHist);')\n", - "# MATLAB L715: c{2}.setName('Baseline+Stimulus');\n", - "_matlab(\"c{2}.setName('Baseline+Stimulus');\")\n", - "# MATLAB L716: cfgColl= ConfigColl(c);\n", - "_matlab('cfgColl= ConfigColl(c);')\n", - "# MATLAB L717: results = Analysis.RunAnalysisForAllNeurons(trial,cfgColl,0);\n", - "_matlab('results = Analysis.RunAnalysisForAllNeurons(trial,cfgColl,0);')\n", - "# MATLAB L718: figure;\n", "__tracker.new_figure('figure')\n", "__tracker.new_figure('figure;')\n", - "# MATLAB L719: results{1}.plotResults;\n", - "_matlab('results{1}.plotResults;')\n", - "# MATLAB L720: Summary = FitResSummary(results);\n", - "_matlab('Summary = FitResSummary(results);')\n", - "# MATLAB L721: \n", "#\n", - "# MATLAB L722: paramEst = squeeze(Summary.bAct(:,2,:));\n", - "_matlab('paramEst = squeeze(Summary.bAct(:,2,:));')\n", - "# MATLAB L723: meanParams = mean(paramEst,2);\n", - "_matlab('meanParams = mean(paramEst,2);')\n", - "# MATLAB L900: % So we now have a model for lambda lambda = exp(b_0 + b_1*x(t))./(1+exp(b_0 + b_1*x(t)) * 1/delta because exp(b_0 + b_1*x(t))<<1 we can approximate this lambda by just the numerator i.e. lambda = exp(b_0 + b_1*x(t))./delta\n", "# So we now have a model for lambda lambda = exp(b_0 + b_1*x(t))./(1+exp(b_0 + b_1*x(t)) * 1/delta because exp(b_0 + b_1*x(t))<<1 we can approximate this lambda by just the numerator i.e. lambda = exp(b_0 + b_1*x(t))./delta\n", - "# MATLAB L1000: % Now suppose we wanted to decode x(t) based on only having observed lambda\n", "# Now suppose we wanted to decode x(t) based on only having observed lambda\n", - "# MATLAB L1100: clear lambdaCIF;\n", "pass\n", - "# MATLAB L1101: b0=paramEst(1,:);\n", - "_matlab('b0=paramEst(1,:);')\n", - "# MATLAB L1102: b1=paramEst(2,:);\n", - "_matlab('b1=paramEst(2,:);')\n", - "# MATLAB L1103: for i=1:numRealizations\n", - "_matlab('for i=1:numRealizations')\n", - "# MATLAB L1104: % Construct a CIF object for each realization based on our encoding\n", "# Construct a CIF object for each realization based on our encoding\n", - "# MATLAB L1105: % results abovel\n", "# results abovel\n", - "# MATLAB L1106: lambdaCIF{i} = CIF([b0(i) b1(i)],{'1','x'},{'x'},'binomial');\n", - "_matlab(\"lambdaCIF{i} = CIF([b0(i) b1(i)],{'1','x'},{'x'},'binomial');\")\n", - "# MATLAB L1107: end\n", - "_matlab('end')\n", - "# MATLAB L1108: % close all;\n", "# close all;\n", - "# MATLAB L1109: spikeColl.resample(1/delta);\n", - "_matlab('spikeColl.resample(1/delta);')\n", - "# MATLAB L1110: dN=spikeColl.dataToMatrix;\n", - "_matlab('dN=spikeColl.dataToMatrix;')\n", - "# MATLAB L1111: % Make noise according to the dynamic range of the stimulus\n", "# Make noise according to the dynamic range of the stimulus\n", - "# MATLAB L1112: Q=2*std(stim.data(2:end)-stim.data(1:end-1));\n", - "_matlab('Q=2*std(stim.data(2:end)-stim.data(1:end-1));')\n", - "# MATLAB L1113: A=1;\n", "A = 1\n", - "# MATLAB L1114: [x_p, W_p, x_u, W_u] = DecodingAlgorithms.PPDecodeFilterLinear(A, Q, dN',b0,b1,'binomial',delta);\n", - "_matlab(\"[x_p, W_p, x_u, W_u] = DecodingAlgorithms.PPDecodeFilterLinear(A, Q, dN',b0,b1,'binomial',delta);\")\n", - "# MATLAB L1115: figure;\n", "__tracker.new_figure('figure')\n", "__tracker.new_figure('figure;')\n", - "# MATLAB L1116: zVal=3;\n", "zVal = 3\n", - "# MATLAB L1117: ciLower = min(x_u(1:end)-zVal*squeeze(sqrt(W_u(1:end)))',x_u(1:end)+zVal*squeeze(sqrt(W_u(1:end)))');\n", - "_matlab(\"ciLower = min(x_u(1:end)-zVal*squeeze(sqrt(W_u(1:end)))',x_u(1:end)+zVal*squeeze(sqrt(W_u(1:end)))');\")\n", - "# MATLAB L1118: ciUpper = max(x_u(1:end)-zVal*squeeze(sqrt(W_u(1:end)))',x_u(1:end)+zVal*squeeze(sqrt(W_u(1:end)))');\n", - "_matlab(\"ciUpper = max(x_u(1:end)-zVal*squeeze(sqrt(W_u(1:end)))',x_u(1:end)+zVal*squeeze(sqrt(W_u(1:end)))');\")\n", - "# MATLAB L1119: hEst=plot(time,x_u(1:end),'b',time,ciLower,'g',time,ciUpper,'g'); hold on;\n", "__tracker.annotate(\"hEst=plot(time,x_u(1:end),'b',time,ciLower,'g',time,ciUpper,'g')\")\n", - "_matlab(\"hEst=plot(time,x_u(1:end),'b',time,ciLower,'g',time,ciUpper,'g'); hold on;\")\n", - "# MATLAB L1120: hold all;\n", - "_matlab('hold all;')\n", - "# MATLAB L1121: \n", "#\n", - "# MATLAB L1122: hStim=stim.plot([],{{' ''k'',''Linewidth'',2'}});\n", "__tracker.annotate(\"hStim=stim.plot([],{{' ''k'',''Linewidth'',2'}})\")\n", - "_matlab(\"hStim=stim.plot([],{{' ''k'',''Linewidth'',2'}});\")\n", - "# MATLAB L1123: legend off;\n", - "_matlab('legend off;')\n", - "# MATLAB L1124: legend([hEst(1) hEst(2) hEst(3) hStim],'x_{k|k}(t)',strcat('x_{k|k}(t)-',num2str(zVal),'\\sigma_{k|k}'),...\n", - "_matlab(\"legend([hEst(1) hEst(2) hEst(3) hStim],'x_{k|k}(t)',strcat('x_{k|k}(t)-',num2str(zVal),'\\\\sigma_{k|k}'),...\")\n", - "# MATLAB L1125: strcat('x_{k|k}(t)+',num2str(zVal),'\\sigma_{k|k}'),'x_{k|k}(t)','x(t)');\n", - "_matlab(\"strcat('x_{k|k}(t)+',num2str(zVal),'\\\\sigma_{k|k}'),'x_{k|k}(t)','x(t)');\")\n", - "# MATLAB L1126: title(['Decoded Stimulus +/- 99% confidence intervals using ' num2str(numRealizations) ' cells']);\n", - "_matlab(\"title(['Decoded Stimulus +/- 99% confidence intervals using ' num2str(numRealizations) ' cells']);\")\n", - "__tracker.finalize()\n" + "__tracker.finalize()" ] } ], @@ -234,9 +112,7 @@ "nstat": { "expected_figures": 5, "run_group": "smoke", - "source_file": "/private/tmp/upstream-nstat-matlab/helpfiles/DecodingExample.mlx", - "source_type": "mlx", - "strict_section_cell_mapping": true, + "style": "python-example", "topic": "DecodingExample" } }, diff --git a/notebooks/DecodingExampleWithHist.ipynb b/notebooks/DecodingExampleWithHist.ipynb index b894994b..80200c11 100644 --- a/notebooks/DecodingExampleWithHist.ipynb +++ b/notebooks/DecodingExampleWithHist.ipynb @@ -7,7 +7,7 @@ "metadata": {}, "outputs": [], "source": [ - "# AUTO-GENERATED FROM MATLAB DecodingExampleWithHist.mlx -- DO NOT EDIT\n", + "# nSTAT-python notebook example: DecodingExampleWithHist\n", "from pathlib import Path\n", "import sys\n", "\n", @@ -32,12 +32,7 @@ "OUTPUT_ROOT = REPO_ROOT / \"output\" / \"notebook_images\"\n", "__tracker = FigureTracker(topic='DecodingExampleWithHist', output_root=OUTPUT_ROOT, expected_count=2)\n", "\n", - "def _matlab(line: str) -> None:\n", - " \"\"\"Placeholder for untranslated MATLAB syntax.\"\"\"\n", - " _ = line\n", - " return\n", - "\n", - "def _load_matlab_globals(name: str) -> dict[str, object]:\n", + "def _load_example_globals(name: str) -> dict[str, object]:\n", " candidates = [\n", " Path(name),\n", " DATA_DIR / name,\n", @@ -52,180 +47,51 @@ " return {}\n", "\n", "# SECTION 0: Section 0\n", - "# MATLAB L100: % 1-D Stimulus Decode with History Effect\n", "# 1-D Stimulus Decode with History Effect\n", - "# MATLAB L200: % In the above decoding example, the simulated neurons did not have memory. That is their previous firing activity did not modulate their current probability of firing. In reality the firing history does affect the probabilty of neuronal firing (eg. refractory period, bursting, etc.). In this example, we simulate a population a neurons that exhibit this type of history dependence. We then decode the stimulus activity based on a conditional intensity function that includes the correct history terms and one that assumes no history dependence.\n", "# In the above decoding example, the simulated neurons did not have memory. That is their previous firing activity did not modulate their current probability of firing. In reality the firing history does affect the probabilty of neuronal firing (eg. refractory period, bursting, etc.). In this example, we simulate a population a neurons that exhibit this type of history dependence. We then decode the stimulus activity based on a conditional intensity function that includes the correct history terms and one that assumes no history dependence.\n", - "# MATLAB L300: close all;\n", "plt.close(\"all\")\n", - "# MATLAB L301: % clear all;\n", "# clear all;\n", - "# MATLAB L302: delta = 0.001; Tmax = 1;\n", - "_matlab('delta = 0.001; Tmax = 1;')\n", - "# MATLAB L303: time = 0:delta:Tmax;\n", - "_matlab('time = 0:delta:Tmax;')\n", - "# MATLAB L304: f=1; b1=1;b0=-2;\n", - "_matlab('f=1; b1=1;b0=-2;')\n", - "# MATLAB L305: stimData = b1*sin(2*pi*f*time);\n", - "_matlab('stimData = b1*sin(2*pi*f*time);')\n", - "# MATLAB L306: e = zeros(length(time),1); %No Ensemble input\n", - "_matlab('e = zeros(length(time),1); %No Ensemble input')\n", - "# MATLAB L307: mu = b0; %baseline firing rate\n", - "_matlab('mu = b0; %baseline firing rate')\n", - "# MATLAB L308: Ts=delta;\n", - "_matlab('Ts=delta;')\n", - "# MATLAB L309: \n", "#\n", - "# MATLAB L310: histCoeffs= [-2 -2 -4];\n", - "_matlab('histCoeffs= [-2 -2 -4];')\n", - "# MATLAB L311: windowTimes=[0 .001 0.002 0.003];\n", - "_matlab('windowTimes=[0 .001 0.002 0.003];')\n", - "# MATLAB L312: histObj = History(windowTimes);\n", - "_matlab('histObj = History(windowTimes);')\n", - "# MATLAB L313: filts = histObj.toFilter(Ts); %Convert to transfer function matrix\n", - "_matlab('filts = histObj.toFilter(Ts); %Convert to transfer function matrix')\n", - "# MATLAB L314: H=histCoeffs*filts; %scale each window transfer function by its coefficient\n", - "_matlab('H=histCoeffs*filts; %scale each window transfer function by its coefficient')\n", - "# MATLAB L315: S=tf([1],1,Ts,'Variable','z^-1'); %Feed the stimulus in directly\n", - "_matlab(\"S=tf([1],1,Ts,'Variable','z^-1'); %Feed the stimulus in directly\")\n", - "# MATLAB L316: E=tf([0],1,Ts,'Variable','z^-1'); %No ensemble effect\n", - "_matlab(\"E=tf([0],1,Ts,'Variable','z^-1'); %No ensemble effect\")\n", - "# MATLAB L317: stim=Covariate(time',stimData,'Stimulus','time','s','Voltage',{'sin'});\n", - "_matlab(\"stim=Covariate(time',stimData,'Stimulus','time','s','Voltage',{'sin'});\")\n", - "# MATLAB L318: ens =Covariate(time',e,'Ensemble','time','s','Spikes',{'n1'});\n", - "_matlab(\"ens =Covariate(time',e,'Ensemble','time','s','Spikes',{'n1'});\")\n", - "# MATLAB L319: numRealizations = 20; %Number of sample paths to generate\n", "numRealizations = 20\n", - "# MATLAB L320: sC=CIF.simulateCIF(mu,H,S,E,stim,ens,numRealizations);\n", - "_matlab('sC=CIF.simulateCIF(mu,H,S,E,stim,ens,numRealizations);')\n", - "# MATLAB L321: \n", "#\n", - "# MATLAB L322: figure;\n", "__tracker.new_figure('figure')\n", "__tracker.new_figure('figure;')\n", - "# MATLAB L323: subplot(2,1,1); sC.plot;\n", "__tracker.annotate('subplot(2,1,1)')\n", "__tracker.annotate('sC.plot')\n", - "_matlab('subplot(2,1,1); sC.plot;')\n", - "# MATLAB L324: subplot(2,1,2); stim.plot;\n", "__tracker.annotate('subplot(2,1,2)')\n", "__tracker.annotate('stim.plot')\n", - "_matlab('subplot(2,1,2); stim.plot;')\n", - "# MATLAB L325: \n", "#\n", - "# MATLAB L326: \n", "#\n", - "# MATLAB L327: for i=1:numRealizations\n", - "_matlab('for i=1:numRealizations')\n", - "# MATLAB L328: % Construct a CIF object for each realization based on our encoding\n", "# Construct a CIF object for each realization based on our encoding\n", - "# MATLAB L329: % results above\n", "# results above\n", - "# MATLAB L330: %correct CIF w/ History\n", "# correct CIF w/ History\n", - "# MATLAB L331: lambdaCIF{i} = CIF([mu b1],{'1','x'},{'x'},'binomial',histCoeffs,histObj);\n", - "_matlab(\"lambdaCIF{i} = CIF([mu b1],{'1','x'},{'x'},'binomial',histCoeffs,histObj);\")\n", - "# MATLAB L332: %CIF ignoring the history effect\n", "# CIF ignoring the history effect\n", - "# MATLAB L333: lambdaCIFNoHist{i} = CIF([mu b1],{'1','x'},{'x'},'binomial');\n", - "_matlab(\"lambdaCIFNoHist{i} = CIF([mu b1],{'1','x'},{'x'},'binomial');\")\n", - "# MATLAB L334: end\n", - "_matlab('end')\n", - "# MATLAB L335: \n", "#\n", - "# MATLAB L336: \n", "#\n", - "# MATLAB L337: \n", "#\n", - "# MATLAB L338: \n", "#\n", - "# MATLAB L339: sC.resample(1/delta);\n", - "_matlab('sC.resample(1/delta);')\n", - "# MATLAB L340: dN=sC.dataToMatrix;\n", - "_matlab('dN=sC.dataToMatrix;')\n", - "# MATLAB L341: % Make noise according to the dynamic range of the stimulus\n", "# Make noise according to the dynamic range of the stimulus\n", - "# MATLAB L342: Q=2*std(stim.data(2:end)-stim.data(1:end-1));\n", - "_matlab('Q=2*std(stim.data(2:end)-stim.data(1:end-1));')\n", - "# MATLAB L343: Px0=.1; A=1;\n", - "_matlab('Px0=.1; A=1;')\n", - "# MATLAB L344: % Decode with the correct and incorrect CIFs\n", "# Decode with the correct and incorrect CIFs\n", - "# MATLAB L345: \n", "#\n", - "# MATLAB L346: [x_p, W_p, x_u, W_u] = DecodingAlgorithms.PPDecodeFilter(A, Q, Px0, dN',lambdaCIF,delta);\n", - "_matlab(\"[x_p, W_p, x_u, W_u] = DecodingAlgorithms.PPDecodeFilter(A, Q, Px0, dN',lambdaCIF,delta);\")\n", - "# MATLAB L347: [x_pNoHist, W_pNoHist, x_uNoHist, W_uNoHist] = DecodingAlgorithms.PPDecodeFilter(A, Q, Px0, dN',lambdaCIFNoHist,delta);\n", - "_matlab(\"[x_pNoHist, W_pNoHist, x_uNoHist, W_uNoHist] = DecodingAlgorithms.PPDecodeFilter(A, Q, Px0, dN',lambdaCIFNoHist,delta);\")\n", - "# MATLAB L348: \n", "#\n", - "# MATLAB L349: \n", "#\n", - "# MATLAB L350: % Compare the results\n", "# Compare the results\n", - "# MATLAB L351: figure;\n", "__tracker.new_figure('figure')\n", "__tracker.new_figure('figure;')\n", - "# MATLAB L352: subplot(2,1,1);\n", "__tracker.annotate('subplot(2,1,1)')\n", - "_matlab('subplot(2,1,1);')\n", - "# MATLAB L353: zVal=3;\n", "zVal = 3\n", - "# MATLAB L354: ciLower = min(x_u(1:end)-zVal*squeeze(W_u(1:end))',x_u(1:end)+zVal*squeeze(W_u(1:end))');\n", - "_matlab(\"ciLower = min(x_u(1:end)-zVal*squeeze(W_u(1:end))',x_u(1:end)+zVal*squeeze(W_u(1:end))');\")\n", - "# MATLAB L355: ciUpper = max(x_u(1:end)-zVal*squeeze(W_u(1:end))',x_u(1:end)+zVal*squeeze(W_u(1:end))');\n", - "_matlab(\"ciUpper = max(x_u(1:end)-zVal*squeeze(W_u(1:end))',x_u(1:end)+zVal*squeeze(W_u(1:end))');\")\n", - "# MATLAB L356: hEst=plot(time,x_u(1:end),'b',time,ciLower,'g',time,ciUpper,'r'); hold on;\n", "__tracker.annotate(\"hEst=plot(time,x_u(1:end),'b',time,ciLower,'g',time,ciUpper,'r')\")\n", - "_matlab(\"hEst=plot(time,x_u(1:end),'b',time,ciLower,'g',time,ciUpper,'r'); hold on;\")\n", - "# MATLAB L357: hold all;\n", - "_matlab('hold all;')\n", - "# MATLAB L358: \n", "#\n", - "# MATLAB L359: hStim=stim.plot([],{{' ''k'',''Linewidth'',2'}});\n", "__tracker.annotate(\"hStim=stim.plot([],{{' ''k'',''Linewidth'',2'}})\")\n", - "_matlab(\"hStim=stim.plot([],{{' ''k'',''Linewidth'',2'}});\")\n", - "# MATLAB L360: legend off;\n", - "_matlab('legend off;')\n", - "# MATLAB L361: legend([hEst(1) hEst(2) hEst(3) hStim],'x_{k|k}(t)',strcat('x_{k|k}(t)-',num2str(zVal),'\\sigma_{k|k}'),...\n", - "_matlab(\"legend([hEst(1) hEst(2) hEst(3) hStim],'x_{k|k}(t)',strcat('x_{k|k}(t)-',num2str(zVal),'\\\\sigma_{k|k}'),...\")\n", - "# MATLAB L362: strcat('x_{k|k}(t)+',num2str(zVal),'\\sigma_{k|k}'),'x_{k|k}(t)','x(t)');\n", - "_matlab(\"strcat('x_{k|k}(t)+',num2str(zVal),'\\\\sigma_{k|k}'),'x_{k|k}(t)','x(t)');\")\n", - "# MATLAB L363: title(['Decoded Stimulus +/- 99% confidence intervals using ' num2str(numRealizations) ' cells']);\n", - "_matlab(\"title(['Decoded Stimulus +/- 99% confidence intervals using ' num2str(numRealizations) ' cells']);\")\n", - "# MATLAB L364: \n", "#\n", - "# MATLAB L365: subplot(2,1,2);\n", "__tracker.annotate('subplot(2,1,2)')\n", - "_matlab('subplot(2,1,2);')\n", - "# MATLAB L366: zVal=3;\n", "zVal = 3\n", - "# MATLAB L367: ciLower = min(x_uNoHist(1:end)-zVal*squeeze(W_uNoHist(1:end))',x_uNoHist(1:end)+zVal*squeeze(W_uNoHist(1:end))');\n", - "_matlab(\"ciLower = min(x_uNoHist(1:end)-zVal*squeeze(W_uNoHist(1:end))',x_uNoHist(1:end)+zVal*squeeze(W_uNoHist(1:end))');\")\n", - "# MATLAB L368: ciUpper = max(x_uNoHist(1:end)-zVal*squeeze(W_uNoHist(1:end))',x_uNoHist(1:end)+zVal*squeeze(W_uNoHist(1:end))');\n", - "_matlab(\"ciUpper = max(x_uNoHist(1:end)-zVal*squeeze(W_uNoHist(1:end))',x_uNoHist(1:end)+zVal*squeeze(W_uNoHist(1:end))');\")\n", - "# MATLAB L369: hEst=plot(time,x_uNoHist(1:end),'b',time,ciLower,'g',time,ciUpper,'r'); hold on;\n", "__tracker.annotate(\"hEst=plot(time,x_uNoHist(1:end),'b',time,ciLower,'g',time,ciUpper,'r')\")\n", - "_matlab(\"hEst=plot(time,x_uNoHist(1:end),'b',time,ciLower,'g',time,ciUpper,'r'); hold on;\")\n", - "# MATLAB L370: hold all;\n", - "_matlab('hold all;')\n", - "# MATLAB L371: \n", "#\n", - "# MATLAB L372: hStim=stim.plot([],{{' ''k'',''Linewidth'',2'}});\n", "__tracker.annotate(\"hStim=stim.plot([],{{' ''k'',''Linewidth'',2'}})\")\n", - "_matlab(\"hStim=stim.plot([],{{' ''k'',''Linewidth'',2'}});\")\n", - "# MATLAB L373: legend off;\n", - "_matlab('legend off;')\n", - "# MATLAB L374: legend([hEst(1) hEst(2) hEst(3) hStim],'x_{k|k}(t)',strcat('x_{k|k}(t)-',num2str(zVal),'\\sigma_{k|k}'),...\n", - "_matlab(\"legend([hEst(1) hEst(2) hEst(3) hStim],'x_{k|k}(t)',strcat('x_{k|k}(t)-',num2str(zVal),'\\\\sigma_{k|k}'),...\")\n", - "# MATLAB L375: strcat('x_{k|k}(t)+',num2str(zVal),'\\sigma_{k|k}'),'x_{k|k}(t)','x(t)');\n", - "_matlab(\"strcat('x_{k|k}(t)+',num2str(zVal),'\\\\sigma_{k|k}'),'x_{k|k}(t)','x(t)');\")\n", - "# MATLAB L376: title(['Decoded Stimulus No Hist +/- 99% confidence intervals using ' num2str(numRealizations) ' cells']);\n", "__tracker.annotate(\"title(['Decoded Stimulus No Hist +/- 99% confidence intervals using ' num2str(numRealizations) ' cells'])\")\n", - "_matlab(\"title(['Decoded Stimulus No Hist +/- 99% confidence intervals using ' num2str(numRealizations) ' cells']);\")\n", - "# MATLAB L500: % We see that inclusion of history effect improves (as expected) the decoding of the stimulus based on the point process observations\n", "# We see that inclusion of history effect improves (as expected) the decoding of the stimulus based on the point process observations\n", - "__tracker.finalize()\n" + "__tracker.finalize()" ] } ], @@ -236,9 +102,7 @@ "nstat": { "expected_figures": 2, "run_group": "smoke", - "source_file": "/private/tmp/upstream-nstat-matlab/helpfiles/DecodingExampleWithHist.mlx", - "source_type": "mlx", - "strict_section_cell_mapping": true, + "style": "python-example", "topic": "DecodingExampleWithHist" } }, diff --git a/notebooks/DocumentationSetup2025b.ipynb b/notebooks/DocumentationSetup2025b.ipynb deleted file mode 100644 index e5fc1bb0..00000000 --- a/notebooks/DocumentationSetup2025b.ipynb +++ /dev/null @@ -1,194 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "id": "5a9b0ee5", - "metadata": {}, - "outputs": [], - "source": [ - "# AUTO-GENERATED FROM MATLAB DocumentationSetup2025b.m -- DO NOT EDIT\n", - "from pathlib import Path\n", - "import sys\n", - "\n", - "REPO_ROOT = Path.cwd().resolve().parent\n", - "if str(REPO_ROOT) not in sys.path:\n", - " sys.path.insert(0, str(REPO_ROOT))\n", - "SRC_PATH = (REPO_ROOT / \"src\").resolve()\n", - "if str(SRC_PATH) not in sys.path:\n", - " sys.path.insert(0, str(SRC_PATH))\n", - "\n", - "import matplotlib\n", - "matplotlib.use(\"Agg\")\n", - "import matplotlib.pyplot as plt\n", - "import numpy as np\n", - "from scipy.io import loadmat\n", - "\n", - "from nstat.data_manager import ensure_example_data\n", - "from nstat.notebook_figures import FigureTracker\n", - "\n", - "np.random.seed(0)\n", - "DATA_DIR = ensure_example_data(download=True)\n", - "OUTPUT_ROOT = REPO_ROOT / \"output\" / \"notebook_images\"\n", - "__tracker = FigureTracker(topic='DocumentationSetup2025b', output_root=OUTPUT_ROOT, expected_count=0)\n", - "\n", - "def _matlab(line: str) -> None:\n", - " \"\"\"Placeholder for untranslated MATLAB syntax.\"\"\"\n", - " _ = line\n", - " return\n", - "\n", - "def _load_matlab_globals(name: str) -> dict[str, object]:\n", - " candidates = [\n", - " Path(name),\n", - " DATA_DIR / name,\n", - " DATA_DIR / \"mEPSCs\" / name,\n", - " DATA_DIR / \"Place Cells\" / name,\n", - " DATA_DIR / \"Explicit Stimulus\" / name,\n", - " ]\n", - " for path in candidates:\n", - " if path.exists():\n", - " data = loadmat(path)\n", - " return {k: v for k, v in data.items() if not k.startswith(\"__\")}\n", - " return {}\n", - "\n", - "# SECTION 0: Section 0\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6a660f9e", - "metadata": {}, - "outputs": [], - "source": [ - "# SECTION 1: MATLAB 2025b Help Integration for nSTAT\n", - "# MATLAB L2: % This page documents the help-file structure used by nSTAT so it appears as\n", - "# This page documents the help-file structure used by nSTAT so it appears as\n", - "# MATLAB L3: % supplemental software documentation in MATLAB.\n", - "# supplemental software documentation in MATLAB.\n", - "# MATLAB L4: %\n", - "#\n", - "# MATLAB L5: % The configuration in this release is aligned with MATLAB R2025b.\n", - "# The configuration in this release is aligned with MATLAB R2025b.\n", - "# MATLAB L6: %\n", - "#\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "60f2e0d6", - "metadata": {}, - "outputs": [], - "source": [ - "# SECTION 2: Required Files\n", - "# MATLAB L8: % nSTAT uses the standard external toolbox documentation layout:\n", - "# nSTAT uses the standard external toolbox documentation layout:\n", - "# MATLAB L9: %\n", - "#\n", - "# MATLAB L10: % * `info.xml` in the toolbox root.\n", - "# * `info.xml` in the toolbox root.\n", - "# MATLAB L11: % * `helpfiles/helptoc.xml` with `toc version=\"2.0\"`.\n", - "# * `helpfiles/helptoc.xml` with `toc version=\"2.0\"`.\n", - "# MATLAB L12: % * HTML help content referenced by each `target` in `helptoc.xml`.\n", - "# * HTML help content referenced by each `target` in `helptoc.xml`.\n", - "# MATLAB L13: %\n", - "#\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "1a97a3b9", - "metadata": {}, - "outputs": [], - "source": [ - "# SECTION 3: Build and Refresh the Search Database\n", - "# MATLAB L15: % Run the installer script from the nSTAT root folder:\n", - "# Run the installer script from the nSTAT root folder:\n", - "# MATLAB L16: %\n", - "#\n", - "# MATLAB L17: % nSTAT_Install\n", - "# nSTAT_Install\n", - "# MATLAB L18: %\n", - "#\n", - "# MATLAB L19: % or run these commands manually:\n", - "# or run these commands manually:\n", - "# MATLAB L20: %\n", - "#\n", - "# MATLAB L21: % rootDir = fileparts(which('nSTAT_Install'));\n", - "# rootDir = fileparts(which('nSTAT_Install'));\n", - "# MATLAB L22: % helpDir = fullfile(rootDir,'helpfiles');\n", - "# helpDir = fullfile(rootDir,'helpfiles');\n", - "# MATLAB L23: % builddocsearchdb(helpDir);\n", - "# builddocsearchdb(helpDir);\n", - "# MATLAB L24: % rehash toolboxcache;\n", - "# rehash toolboxcache;\n", - "# MATLAB L25: %\n", - "#\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8a11f01c", - "metadata": {}, - "outputs": [], - "source": [ - "# SECTION 4: MATLAB 2025b Behavior\n", - "# MATLAB L27: % Starting in R2024b, toolbox documentation is shown in the system browser.\n", - "# Starting in R2024b, toolbox documentation is shown in the system browser.\n", - "# MATLAB L28: % External toolbox documentation appears in MATLAB documentation under\n", - "# External toolbox documentation appears in MATLAB documentation under\n", - "# MATLAB L29: % Supplemental Software.\n", - "# Supplemental Software.\n", - "# MATLAB L30: %\n", - "#\n", - "# MATLAB L31: % Use these pages as entry points:\n", - "# Use these pages as entry points:\n", - "# MATLAB L32: %\n", - "#\n", - "# MATLAB L33: % * \n", - "# * \n", - "# MATLAB L34: % * \n", - "# * \n", - "# MATLAB L35: % * \n", - "# * \n", - "# MATLAB L36: %\n", - "#\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "63ac06d3", - "metadata": {}, - "outputs": [], - "source": [ - "# SECTION 5: Troubleshooting\n", - "# MATLAB L38: % * If the nSTAT docs are not visible, run `rehash toolboxcache`.\n", - "# * If the nSTAT docs are not visible, run `rehash toolboxcache`.\n", - "# MATLAB L39: % * If nSTAT pages do not appear in search, run `builddocsearchdb` again.\n", - "# * If nSTAT pages do not appear in search, run `builddocsearchdb` again.\n", - "# MATLAB L40: % * Ensure all `target` entries in `helptoc.xml` map to real HTML files.\n", - "# * Ensure all `target` entries in `helptoc.xml` map to real HTML files.\n", - "__tracker.finalize()\n" - ] - } - ], - "metadata": { - "language_info": { - "name": "python" - }, - "nstat": { - "expected_figures": 0, - "run_group": "full", - "source_file": "/private/tmp/upstream-nstat-matlab/helpfiles/DocumentationSetup2025b.m", - "source_type": "m", - "strict_section_cell_mapping": true, - "topic": "DocumentationSetup2025b" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/notebooks/EventsExamples.ipynb b/notebooks/EventsExamples.ipynb index 81cee61b..c5bff681 100644 --- a/notebooks/EventsExamples.ipynb +++ b/notebooks/EventsExamples.ipynb @@ -7,7 +7,7 @@ "metadata": {}, "outputs": [], "source": [ - "# AUTO-GENERATED FROM MATLAB EventsExamples.mlx -- DO NOT EDIT\n", + "# nSTAT-python notebook example: EventsExamples\n", "from pathlib import Path\n", "import sys\n", "\n", @@ -32,12 +32,7 @@ "OUTPUT_ROOT = REPO_ROOT / \"output\" / \"notebook_images\"\n", "__tracker = FigureTracker(topic='EventsExamples', output_root=OUTPUT_ROOT, expected_count=3)\n", "\n", - "def _matlab(line: str) -> None:\n", - " \"\"\"Placeholder for untranslated MATLAB syntax.\"\"\"\n", - " _ = line\n", - " return\n", - "\n", - "def _load_matlab_globals(name: str) -> dict[str, object]:\n", + "def _load_example_globals(name: str) -> dict[str, object]:\n", " candidates = [\n", " Path(name),\n", " DATA_DIR / name,\n", @@ -52,34 +47,16 @@ " return {}\n", "\n", "# SECTION 0: Section 0\n", - "# MATLAB L100: % Events\n", "# Events\n", - "# MATLAB L200: % Events are simple object to use and are aimed to facilitate illustration of epochs in any time of data.\n", "# Events are simple object to use and are aimed to facilitate illustration of epochs in any time of data.\n", - "# MATLAB L300: close all;\n", "plt.close(\"all\")\n", - "# MATLAB L301: eTimes = sort(rand(1,3)*1);\n", - "_matlab('eTimes = sort(rand(1,3)*1);')\n", - "# MATLAB L302: eLabels={'E_1','E_2','E_3'};\n", - "_matlab(\"eLabels={'E_1','E_2','E_3'};\")\n", - "# MATLAB L303: eventColor = 'b';\n", - "_matlab(\"eventColor = 'b';\")\n", - "# MATLAB L304: e=Events(eTimes,eLabels,eventColor);\n", - "_matlab('e=Events(eTimes,eLabels,eventColor);')\n", - "# MATLAB L305: e.plot;\n", "__tracker.new_figure('e.plot')\n", - "_matlab('e.plot;')\n", - "# MATLAB L500: % The color of the event markers can also be specified\n", "# The color of the event markers can also be specified\n", - "# MATLAB L600: figure; e.plot([],'r'); %dont specify handle, use red; handel = gca;\n", "__tracker.new_figure('figure')\n", "__tracker.annotate(\"e.plot([],'r')\")\n", - "_matlab(\"figure; e.plot([],'r'); %dont specify handle, use red; handel = gca;\")\n", - "# MATLAB L601: figure; e.plot([],'g'); %dont specify handle, use green;\n", "__tracker.new_figure('figure')\n", "__tracker.annotate(\"e.plot([],'g')\")\n", - "_matlab(\"figure; e.plot([],'g'); %dont specify handle, use green;\")\n", - "__tracker.finalize()\n" + "__tracker.finalize()" ] } ], @@ -90,9 +67,7 @@ "nstat": { "expected_figures": 3, "run_group": "full", - "source_file": "/private/tmp/upstream-nstat-matlab/helpfiles/EventsExamples.mlx", - "source_type": "mlx", - "strict_section_cell_mapping": true, + "style": "python-example", "topic": "EventsExamples" } }, diff --git a/notebooks/ExplicitStimulusWhiskerData.ipynb b/notebooks/ExplicitStimulusWhiskerData.ipynb index ddfc6ac8..ceca5c10 100644 --- a/notebooks/ExplicitStimulusWhiskerData.ipynb +++ b/notebooks/ExplicitStimulusWhiskerData.ipynb @@ -7,7 +7,7 @@ "metadata": {}, "outputs": [], "source": [ - "# AUTO-GENERATED FROM MATLAB ExplicitStimulusWhiskerData.mlx -- DO NOT EDIT\n", + "# nSTAT-python notebook example: ExplicitStimulusWhiskerData\n", "from pathlib import Path\n", "import sys\n", "\n", @@ -32,12 +32,7 @@ "OUTPUT_ROOT = REPO_ROOT / \"output\" / \"notebook_images\"\n", "__tracker = FigureTracker(topic='ExplicitStimulusWhiskerData', output_root=OUTPUT_ROOT, expected_count=9)\n", "\n", - "def _matlab(line: str) -> None:\n", - " \"\"\"Placeholder for untranslated MATLAB syntax.\"\"\"\n", - " _ = line\n", - " return\n", - "\n", - "def _load_matlab_globals(name: str) -> dict[str, object]:\n", + "def _load_example_globals(name: str) -> dict[str, object]:\n", " candidates = [\n", " Path(name),\n", " DATA_DIR / name,\n", @@ -52,10 +47,8 @@ " return {}\n", "\n", "# SECTION 0: Section 0\n", - "# MATLAB L100: % EXPLICIT STIMULUS EXAMPLE - WHISKER STIMULATION/THALAMIC NEURON\n", "# EXPLICIT STIMULUS EXAMPLE - WHISKER STIMULATION/THALAMIC NEURON\n", - "# MATLAB L200: % In the worksheet with analyze the stimulus effect and history effect on the firing of a thalamic neuron under a known stimulus consisting of whisker stimulation. Data from Demba Ba (demba@mit.edu)\n", - "# In the worksheet with analyze the stimulus effect and history effect on the firing of a thalamic neuron under a known stimulus consisting of whisker stimulation. Data from Demba Ba (demba@mit.edu)\n" + "# In the worksheet with analyze the stimulus effect and history effect on the firing of a thalamic neuron under a known stimulus consisting of whisker stimulation. Data from Demba Ba (demba@mit.edu)" ] }, { @@ -66,70 +59,19 @@ "outputs": [], "source": [ "# SECTION 1: Load the data\n", - "# MATLAB L400: close all; currdir = pwd;\n", "plt.close(\"all\")\n", - "# MATLAB L401: index = strfind(currdir,'helpfiles')-1;\n", - "_matlab(\"index = strfind(currdir,'helpfiles')-1;\")\n", - "# MATLAB L402: rootpath = currdir(1:index);\n", - "_matlab('rootpath = currdir(1:index);')\n", - "# MATLAB L403: \n", "#\n", - "# MATLAB L404: Direction=3; Neuron=1; Stim=2;\n", - "_matlab('Direction=3; Neuron=1; Stim=2;')\n", - "# MATLAB L405: datapath = fullfile(rootpath,'data','Explicit Stimulus',strcat('Dir', num2str(Direction)),...\n", - "_matlab(\"datapath = fullfile(rootpath,'data','Explicit Stimulus',strcat('Dir', num2str(Direction)),...\")\n", - "# MATLAB L406: strcat('Neuron', num2str(Neuron)), strcat('Stim', num2str(Stim)));\n", - "_matlab(\"strcat('Neuron', num2str(Neuron)), strcat('Stim', num2str(Stim)));\")\n", - "# MATLAB L407: data=load(fullfile(datapath,'trngdataBis.mat'));\n", - "_matlab(\"data=load(fullfile(datapath,'trngdataBis.mat'));\")\n", - "# MATLAB L408: \n", "#\n", - "# MATLAB L409: time=0:.001:(length(data.t)-1)*.001;\n", - "_matlab('time=0:.001:(length(data.t)-1)*.001;')\n", - "# MATLAB L410: stimData = data.t;\n", - "_matlab('stimData = data.t;')\n", - "# MATLAB L411: spikeTimes = time(data.y==1);\n", - "_matlab('spikeTimes = time(data.y==1);')\n", - "# MATLAB L412: \n", "#\n", - "# MATLAB L413: stim = Covariate(time,stimData,'Stimulus','time','s','V',{'stim'});\n", - "_matlab(\"stim = Covariate(time,stimData,'Stimulus','time','s','V',{'stim'});\")\n", - "# MATLAB L414: baseline = Covariate(time,ones(length(time),1),'Baseline','time','s','',...\n", - "_matlab(\"baseline = Covariate(time,ones(length(time),1),'Baseline','time','s','',...\")\n", - "# MATLAB L415: {'constant'});\n", - "_matlab(\"{'constant'});\")\n", - "# MATLAB L416: \n", "#\n", - "# MATLAB L417: nst = nspikeTrain(spikeTimes);\n", - "_matlab('nst = nspikeTrain(spikeTimes);')\n", - "# MATLAB L418: nspikeColl = nstColl(nst);\n", - "_matlab('nspikeColl = nstColl(nst);')\n", - "# MATLAB L419: cc = CovColl({stim,baseline});\n", - "_matlab('cc = CovColl({stim,baseline});')\n", - "# MATLAB L420: trial = Trial(nspikeColl,cc);\n", - "_matlab('trial = Trial(nspikeColl,cc);')\n", - "# MATLAB L421: trial.plot;\n", "__tracker.new_figure('trial.plot')\n", - "_matlab('trial.plot;')\n", - "# MATLAB L422: \n", "#\n", - "# MATLAB L423: figure;\n", "__tracker.new_figure('figure')\n", "__tracker.new_figure('figure;')\n", - "# MATLAB L424: subplot(2,1,1);\n", "__tracker.annotate('subplot(2,1,1)')\n", - "_matlab('subplot(2,1,1);')\n", - "# MATLAB L425: nst2 = nspikeTrain(spikeTimes);\n", - "_matlab('nst2 = nspikeTrain(spikeTimes);')\n", - "# MATLAB L426: nst2.setMaxTime(21);nst.plot;\n", "__tracker.annotate('nst.plot')\n", - "_matlab('nst2.setMaxTime(21);nst.plot;')\n", - "# MATLAB L427: subplot(2,1,2);\n", "__tracker.annotate('subplot(2,1,2)')\n", - "_matlab('subplot(2,1,2);')\n", - "# MATLAB L428: stim.getSigInTimeWindow(0,21).plot;\n", - "__tracker.annotate('stim.getSigInTimeWindow(0,21).plot')\n", - "_matlab('stim.getSigInTimeWindow(0,21).plot;')\n" + "__tracker.annotate('stim.getSigInTimeWindow(0,21).plot')" ] }, { @@ -140,54 +82,16 @@ "outputs": [], "source": [ "# SECTION 2: Fit a constant baseline and Find Stimulus Lag\n", - "# MATLAB L700: % We fit a constant rate (Poisson) model to the data and use the fit residual to determine the appropriate lag for the stimulus.\n", "# We fit a constant rate (Poisson) model to the data and use the fit residual to determine the appropriate lag for the stimulus.\n", - "# MATLAB L800: clear c;\n", "pass\n", - "# MATLAB L801: selfHist = [] ; NeighborHist = []; sampleRate = 1000;\n", - "_matlab('selfHist = [] ; NeighborHist = []; sampleRate = 1000;')\n", - "# MATLAB L802: c{1} = TrialConfig({{'Baseline','constant'}},sampleRate,selfHist,NeighborHist);\n", - "_matlab(\"c{1} = TrialConfig({{'Baseline','constant'}},sampleRate,selfHist,NeighborHist);\")\n", - "# MATLAB L803: c{1}.setName('Baseline');\n", - "_matlab(\"c{1}.setName('Baseline');\")\n", - "# MATLAB L804: cfgColl= ConfigColl(c);\n", - "_matlab('cfgColl= ConfigColl(c);')\n", - "# MATLAB L805: results = Analysis.RunAnalysisForAllNeurons(trial,cfgColl,0);\n", - "_matlab('results = Analysis.RunAnalysisForAllNeurons(trial,cfgColl,0);')\n", - "# MATLAB L806: \n", "#\n", - "# MATLAB L807: % Find Stimulus Lag (look for peaks in the cross-covariance function less\n", "# Find Stimulus Lag (look for peaks in the cross-covariance function less\n", - "# MATLAB L808: % than 1 second\n", "# than 1 second\n", - "# MATLAB L809: figure;\n", "__tracker.new_figure('figure')\n", "__tracker.new_figure('figure;')\n", - "# MATLAB L810: results.Residual.xcov(stim).windowedSignal([0,1]).plot;\n", "__tracker.annotate('results.Residual.xcov(stim).windowedSignal([0,1]).plot')\n", - "_matlab('results.Residual.xcov(stim).windowedSignal([0,1]).plot;')\n", - "# MATLAB L811: [m,ind,ShiftTime] = max(results.Residual.xcov(stim).windowedSignal([0,1]));\n", - "_matlab('[m,ind,ShiftTime] = max(results.Residual.xcov(stim).windowedSignal([0,1]));')\n", - "# MATLAB L812: %Allow for shifts of less than 1 second\n", "# Allow for shifts of less than 1 second\n", - "# MATLAB L813: stim = Covariate(time,stimData,'Stimulus','time','s','V',{'stim'});\n", - "_matlab(\"stim = Covariate(time,stimData,'Stimulus','time','s','V',{'stim'});\")\n", - "# MATLAB L814: stim = stim.shift(ShiftTime);\n", - "_matlab('stim = stim.shift(ShiftTime);')\n", - "# MATLAB L815: baseline = Covariate(time,ones(length(time),1),'Baseline','time','s','',...\n", - "_matlab(\"baseline = Covariate(time,ones(length(time),1),'Baseline','time','s','',...\")\n", - "# MATLAB L816: {'constant'});\n", - "_matlab(\"{'constant'});\")\n", - "# MATLAB L817: \n", - "#\n", - "# MATLAB L818: nst = nspikeTrain(spikeTimes);\n", - "_matlab('nst = nspikeTrain(spikeTimes);')\n", - "# MATLAB L819: nspikeColl = nstColl(nst);\n", - "_matlab('nspikeColl = nstColl(nst);')\n", - "# MATLAB L820: cc = CovColl({stim,baseline});\n", - "_matlab('cc = CovColl({stim,baseline});')\n", - "# MATLAB L821: trial = Trial(nspikeColl,cc);\n", - "_matlab('trial = Trial(nspikeColl,cc);')\n" + "#" ] }, { @@ -198,31 +102,9 @@ "outputs": [], "source": [ "# SECTION 3: Compare constant rate model with model including stimulus effect\n", - "# MATLAB L1100: % Addition of the stimulus improves the fits in terms of the KS plot and the making the rescaled ISIs less correlated. The Point Process Residula also looks more \"white\"\n", "# Addition of the stimulus improves the fits in terms of the KS plot and the making the rescaled ISIs less correlated. The Point Process Residula also looks more \"white\"\n", - "# MATLAB L1200: clear c;\n", "pass\n", - "# MATLAB L1201: selfHist = [] ; NeighborHist = []; sampleRate = 1000;\n", - "_matlab('selfHist = [] ; NeighborHist = []; sampleRate = 1000;')\n", - "# MATLAB L1202: c{1} = TrialConfig({{'Baseline','constant'}},sampleRate,selfHist,...\n", - "_matlab(\"c{1} = TrialConfig({{'Baseline','constant'}},sampleRate,selfHist,...\")\n", - "# MATLAB L1203: NeighborHist);\n", - "_matlab('NeighborHist);')\n", - "# MATLAB L1204: c{1}.setName('Baseline');\n", - "_matlab(\"c{1}.setName('Baseline');\")\n", - "# MATLAB L1205: c{2} = TrialConfig({{'Baseline','constant'},{'Stimulus','stim'}},...\n", - "_matlab(\"c{2} = TrialConfig({{'Baseline','constant'},{'Stimulus','stim'}},...\")\n", - "# MATLAB L1206: sampleRate,selfHist,NeighborHist);\n", - "_matlab('sampleRate,selfHist,NeighborHist);')\n", - "# MATLAB L1207: c{2}.setName('Baseline+Stimulus');\n", - "_matlab(\"c{2}.setName('Baseline+Stimulus');\")\n", - "# MATLAB L1208: cfgColl= ConfigColl(c);\n", - "_matlab('cfgColl= ConfigColl(c);')\n", - "# MATLAB L1209: results = Analysis.RunAnalysisForAllNeurons(trial,cfgColl,0);\n", - "_matlab('results = Analysis.RunAnalysisForAllNeurons(trial,cfgColl,0);')\n", - "# MATLAB L1210: results.plotResults;\n", - "__tracker.annotate('results.plotResults')\n", - "_matlab('results.plotResults;')\n" + "__tracker.annotate('results.plotResults')" ] }, { @@ -233,139 +115,30 @@ "outputs": [], "source": [ "# SECTION 4: History Effect\n", - "# MATLAB L1500: % Determine the best history effect model using AIC, BIC, and KS statistic\n", "# Determine the best history effect model using AIC, BIC, and KS statistic\n", - "# MATLAB L1600: sampleRate=1000;\n", "sampleRate = 1000\n", - "# MATLAB L1601: delta=1/sampleRate*1;\n", - "_matlab('delta=1/sampleRate*1;')\n", - "# MATLAB L1602: maxWindow=1; numWindows=30;\n", - "_matlab('maxWindow=1; numWindows=30;')\n", - "# MATLAB L1603: windowTimes =unique(round([0 logspace(log10(delta),...\n", - "_matlab('windowTimes =unique(round([0 logspace(log10(delta),...')\n", - "# MATLAB L1604: log10(maxWindow),numWindows)]*sampleRate)./sampleRate);\n", - "_matlab('log10(maxWindow),numWindows)]*sampleRate)./sampleRate);')\n", - "# MATLAB L1605: results =Analysis.computeHistLagForAll(trial,windowTimes,...\n", - "_matlab('results =Analysis.computeHistLagForAll(trial,windowTimes,...')\n", - "# MATLAB L1606: {{'Baseline','constant'},{'Stimulus','stim'}},'BNLRCG',0,sampleRate,0);\n", - "_matlab(\"{{'Baseline','constant'},{'Stimulus','stim'}},'BNLRCG',0,sampleRate,0);\")\n", - "# MATLAB L1607: \n", "#\n", - "# MATLAB L1608: KSind = find(results{1}.KSStats.ks_stat == min(results{1}.KSStats.ks_stat));\n", - "_matlab('KSind = find(results{1}.KSStats.ks_stat == min(results{1}.KSStats.ks_stat));')\n", - "# MATLAB L1609: AICind = find((results{1}.AIC(2:end)-results{1}.AIC(1))== ...\n", - "_matlab('AICind = find((results{1}.AIC(2:end)-results{1}.AIC(1))== ...')\n", - "# MATLAB L1610: min(results{1}.AIC(2:end)-results{1}.AIC(1)));\n", - "_matlab('min(results{1}.AIC(2:end)-results{1}.AIC(1)));')\n", - "# MATLAB L1611: BICind = find((results{1}.BIC(2:end)-results{1}.BIC(1))== ...\n", - "_matlab('BICind = find((results{1}.BIC(2:end)-results{1}.BIC(1))== ...')\n", - "# MATLAB L1612: min(results{1}.BIC(2:end)-results{1}.BIC(1)));\n", - "_matlab('min(results{1}.BIC(2:end)-results{1}.BIC(1)));')\n", - "# MATLAB L1613: if(AICind==1)\n", - "_matlab('if(AICind==1)')\n", - "# MATLAB L1614: AICind=inf;\n", - "_matlab('AICind=inf;')\n", - "# MATLAB L1615: end\n", - "_matlab('end')\n", - "# MATLAB L1616: if(BICind==1)\n", - "_matlab('if(BICind==1)')\n", - "# MATLAB L1617: BICind=inf; %sometime BIC is non-decreasing and the index would be 1\n", - "_matlab('BICind=inf; %sometime BIC is non-decreasing and the index would be 1')\n", - "# MATLAB L1618: end\n", - "_matlab('end')\n", - "# MATLAB L1619: windowIndex = min([KSind,AICind,BICind]) %use the minimum order model\n", - "_matlab('windowIndex = min([KSind,AICind,BICind]) %use the minimum order model')\n", - "# MATLAB L1620: Summary = FitResSummary(results);\n", - "_matlab('Summary = FitResSummary(results);')\n", - "# MATLAB L1621: Summary.plotSummary;\n", "__tracker.annotate('Summary.plotSummary')\n", - "_matlab('Summary.plotSummary;')\n", - "# MATLAB L1622: \n", "#\n", - "# MATLAB L1623: \n", "#\n", - "# MATLAB L1624: clear c;\n", "pass\n", - "# MATLAB L1625: if(windowIndex>1)\n", - "_matlab('if(windowIndex>1)')\n", - "# MATLAB L1626: selfHist = windowTimes(1:windowIndex);\n", - "_matlab('selfHist = windowTimes(1:windowIndex);')\n", - "# MATLAB L1627: else\n", - "_matlab('else')\n", - "# MATLAB L1628: selfHist = [];\n", - "_matlab('selfHist = [];')\n", - "# MATLAB L1629: end\n", - "_matlab('end')\n", - "# MATLAB L1630: NeighborHist = []; sampleRate = 1000;\n", - "_matlab('NeighborHist = []; sampleRate = 1000;')\n", - "# MATLAB L1800: figure;\n", "__tracker.new_figure('figure')\n", "__tracker.new_figure('figure;')\n", - "# MATLAB L1801: x=1:length(windowTimes);\n", - "_matlab('x=1:length(windowTimes);')\n", - "# MATLAB L1802: subplot(3,1,1); plot(x,results{1}.KSStats.ks_stat,'.'); axis tight; hold on;\n", "__tracker.annotate('subplot(3,1,1)')\n", "__tracker.annotate(\"plot(x,results{1}.KSStats.ks_stat,'.')\")\n", - "_matlab(\"subplot(3,1,1); plot(x,results{1}.KSStats.ks_stat,'.'); axis tight; hold on;\")\n", - "# MATLAB L1803: plot(x(windowIndex),results{1}.KSStats.ks_stat(windowIndex),'r*');\n", "__tracker.annotate(\"plot(x(windowIndex),results{1}.KSStats.ks_stat(windowIndex),'r*')\")\n", - "_matlab(\"plot(x(windowIndex),results{1}.KSStats.ks_stat(windowIndex),'r*');\")\n", - "# MATLAB L1804: \n", "#\n", - "# MATLAB L1805: set(gca,'xtick',[]);\n", - "_matlab(\"set(gca,'xtick',[]);\")\n", - "# MATLAB L1806: ylabel('KS Statistic');\n", - "_matlab(\"ylabel('KS Statistic');\")\n", - "# MATLAB L1807: dAIC = results{1}.AIC-results{1}.AIC(1);\n", - "_matlab('dAIC = results{1}.AIC-results{1}.AIC(1);')\n", - "# MATLAB L1808: subplot(3,1,2); plot(x,dAIC,'.');\n", "__tracker.annotate('subplot(3,1,2)')\n", "__tracker.annotate(\"plot(x,dAIC,'.')\")\n", - "_matlab(\"subplot(3,1,2); plot(x,dAIC,'.');\")\n", - "# MATLAB L1809: set(gca,'xtick',[]);\n", - "_matlab(\"set(gca,'xtick',[]);\")\n", - "# MATLAB L1810: ylabel('\\Delta AIC');axis tight; hold on;\n", - "_matlab(\"ylabel('\\\\Delta AIC');axis tight; hold on;\")\n", - "# MATLAB L1811: plot(x(windowIndex),dAIC(windowIndex),'r*');\n", "__tracker.annotate(\"plot(x(windowIndex),dAIC(windowIndex),'r*')\")\n", - "_matlab(\"plot(x(windowIndex),dAIC(windowIndex),'r*');\")\n", - "# MATLAB L1812: dBIC = results{1}.BIC-results{1}.BIC(1);\n", - "_matlab('dBIC = results{1}.BIC-results{1}.BIC(1);')\n", - "# MATLAB L1813: subplot(3,1,3); plot(x,dBIC,'.');\n", "__tracker.annotate('subplot(3,1,3)')\n", "__tracker.annotate(\"plot(x,dBIC,'.')\")\n", - "_matlab(\"subplot(3,1,3); plot(x,dBIC,'.');\")\n", - "# MATLAB L1814: ylabel('\\Delta BIC'); axis tight; hold on;\n", - "_matlab(\"ylabel('\\\\Delta BIC'); axis tight; hold on;\")\n", - "# MATLAB L1815: plot(x(windowIndex),dBIC(windowIndex),'r*');\n", "__tracker.annotate(\"plot(x(windowIndex),dBIC(windowIndex),'r*')\")\n", - "_matlab(\"plot(x(windowIndex),dBIC(windowIndex),'r*');\")\n", - "# MATLAB L1816: \n", "#\n", - "# MATLAB L1817: for i=2:length(x)\n", - "_matlab('for i=2:length(x)')\n", - "# MATLAB L1818: histLabels{i} = ['[' num2str(windowTimes(i-1),3) ',' num2str(windowTimes(i),3) ,']'];\n", - "_matlab(\"histLabels{i} = ['[' num2str(windowTimes(i-1),3) ',' num2str(windowTimes(i),3) ,']'];\")\n", - "# MATLAB L1819: end\n", - "_matlab('end')\n", - "# MATLAB L1820: \n", "#\n", - "# MATLAB L1821: figure;\n", "__tracker.new_figure('figure')\n", "__tracker.new_figure('figure;')\n", - "# MATLAB L1822: plot(x,dBIC,'.');\n", - "__tracker.annotate(\"plot(x,dBIC,'.')\")\n", - "_matlab(\"plot(x,dBIC,'.');\")\n", - "# MATLAB L1823: xticks = 1:(length(histLabels));\n", - "_matlab('xticks = 1:(length(histLabels));')\n", - "# MATLAB L1824: set(gca,'xtick',xticks,'xtickLabel',histLabels,'FontSize',6);\n", - "_matlab(\"set(gca,'xtick',xticks,'xtickLabel',histLabels,'FontSize',6);\")\n", - "# MATLAB L1825: if(max(xticks)>=1)\n", - "_matlab('if(max(xticks)>=1)')\n", - "# MATLAB L1826: xticklabel_rotate([],90,[],'Fontsize',8);\n", - "_matlab(\"xticklabel_rotate([],90,[],'Fontsize',8);\")\n", - "# MATLAB L1827: end\n", - "_matlab('end')\n" + "__tracker.annotate(\"plot(x,dBIC,'.')\")" ] }, { @@ -376,33 +149,10 @@ "outputs": [], "source": [ "# SECTION 5: Compare Baseline, Baseline+Stimulus Model, Baseline+History+Stimulus\n", - "# MATLAB L2100: % Addition of the history effect yields a model that falls within the 95% CI of the KS plot.\n", "# Addition of the history effect yields a model that falls within the 95% CI of the KS plot.\n", - "# MATLAB L2200: c{1} = TrialConfig({{'Baseline','constant'}},sampleRate,[],NeighborHist);\n", - "_matlab(\"c{1} = TrialConfig({{'Baseline','constant'}},sampleRate,[],NeighborHist);\")\n", - "# MATLAB L2201: c{1}.setName('Baseline');\n", - "_matlab(\"c{1}.setName('Baseline');\")\n", - "# MATLAB L2202: c{2} = TrialConfig({{'Baseline','constant'},{'Stimulus','stim'}},...\n", - "_matlab(\"c{2} = TrialConfig({{'Baseline','constant'},{'Stimulus','stim'}},...\")\n", - "# MATLAB L2203: sampleRate,[],[]);\n", - "_matlab('sampleRate,[],[]);')\n", - "# MATLAB L2204: c{2}.setName('Baseline+Stimulus');\n", - "_matlab(\"c{2}.setName('Baseline+Stimulus');\")\n", - "# MATLAB L2205: c{3} = TrialConfig({{'Baseline','constant'},{'Stimulus','stim'}},...\n", - "_matlab(\"c{3} = TrialConfig({{'Baseline','constant'},{'Stimulus','stim'}},...\")\n", - "# MATLAB L2206: sampleRate,windowTimes(1:windowIndex),[]);\n", - "_matlab('sampleRate,windowTimes(1:windowIndex),[]);')\n", - "# MATLAB L2207: c{3}.setName('Baseline+Stimulus+Hist');\n", "__tracker.annotate(\"c{3}.setName('Baseline+Stimulus+Hist')\")\n", - "_matlab(\"c{3}.setName('Baseline+Stimulus+Hist');\")\n", - "# MATLAB L2208: cfgColl= ConfigColl(c);\n", - "_matlab('cfgColl= ConfigColl(c);')\n", - "# MATLAB L2209: results = Analysis.RunAnalysisForAllNeurons(trial,cfgColl,0);\n", - "_matlab('results = Analysis.RunAnalysisForAllNeurons(trial,cfgColl,0);')\n", - "# MATLAB L2210: results.plotResults;\n", "__tracker.annotate('results.plotResults')\n", - "_matlab('results.plotResults;')\n", - "__tracker.finalize()\n" + "__tracker.finalize()" ] } ], @@ -413,9 +163,7 @@ "nstat": { "expected_figures": 9, "run_group": "full", - "source_file": "/private/tmp/upstream-nstat-matlab/helpfiles/ExplicitStimulusWhiskerData.mlx", - "source_type": "mlx", - "strict_section_cell_mapping": true, + "style": "python-example", "topic": "ExplicitStimulusWhiskerData" } }, diff --git a/notebooks/FitResSummaryExamples.ipynb b/notebooks/FitResSummaryExamples.ipynb index a93374af..79b17dd3 100644 --- a/notebooks/FitResSummaryExamples.ipynb +++ b/notebooks/FitResSummaryExamples.ipynb @@ -7,7 +7,7 @@ "metadata": {}, "outputs": [], "source": [ - "# AUTO-GENERATED FROM MATLAB FitResSummaryExamples.mlx -- DO NOT EDIT\n", + "# nSTAT-python notebook example: FitResSummaryExamples\n", "from pathlib import Path\n", "import sys\n", "\n", @@ -32,12 +32,7 @@ "OUTPUT_ROOT = REPO_ROOT / \"output\" / \"notebook_images\"\n", "__tracker = FigureTracker(topic='FitResSummaryExamples', output_root=OUTPUT_ROOT, expected_count=0)\n", "\n", - "def _matlab(line: str) -> None:\n", - " \"\"\"Placeholder for untranslated MATLAB syntax.\"\"\"\n", - " _ = line\n", - " return\n", - "\n", - "def _load_matlab_globals(name: str) -> dict[str, object]:\n", + "def _load_example_globals(name: str) -> dict[str, object]:\n", " candidates = [\n", " Path(name),\n", " DATA_DIR / name,\n", @@ -52,9 +47,8 @@ " return {}\n", "\n", "# SECTION 0: Section 0\n", - "# MATLAB L100: % FitResSummary Examples\n", "# FitResSummary Examples\n", - "__tracker.finalize()\n" + "__tracker.finalize()" ] } ], @@ -65,9 +59,7 @@ "nstat": { "expected_figures": 0, "run_group": "full", - "source_file": "/private/tmp/upstream-nstat-matlab/helpfiles/FitResSummaryExamples.mlx", - "source_type": "mlx", - "strict_section_cell_mapping": true, + "style": "python-example", "topic": "FitResSummaryExamples" } }, diff --git a/notebooks/FitResultExamples.ipynb b/notebooks/FitResultExamples.ipynb index f6670b8d..03e97687 100644 --- a/notebooks/FitResultExamples.ipynb +++ b/notebooks/FitResultExamples.ipynb @@ -7,7 +7,7 @@ "metadata": {}, "outputs": [], "source": [ - "# AUTO-GENERATED FROM MATLAB FitResultExamples.mlx -- DO NOT EDIT\n", + "# nSTAT-python notebook example: FitResultExamples\n", "from pathlib import Path\n", "import sys\n", "\n", @@ -32,12 +32,7 @@ "OUTPUT_ROOT = REPO_ROOT / \"output\" / \"notebook_images\"\n", "__tracker = FigureTracker(topic='FitResultExamples', output_root=OUTPUT_ROOT, expected_count=0)\n", "\n", - "def _matlab(line: str) -> None:\n", - " \"\"\"Placeholder for untranslated MATLAB syntax.\"\"\"\n", - " _ = line\n", - " return\n", - "\n", - "def _load_matlab_globals(name: str) -> dict[str, object]:\n", + "def _load_example_globals(name: str) -> dict[str, object]:\n", " candidates = [\n", " Path(name),\n", " DATA_DIR / name,\n", @@ -52,9 +47,8 @@ " return {}\n", "\n", "# SECTION 0: Section 0\n", - "# MATLAB L100: % FitResult Examples\n", "# FitResult Examples\n", - "__tracker.finalize()\n" + "__tracker.finalize()" ] } ], @@ -65,9 +59,7 @@ "nstat": { "expected_figures": 0, "run_group": "full", - "source_file": "/private/tmp/upstream-nstat-matlab/helpfiles/FitResultExamples.mlx", - "source_type": "mlx", - "strict_section_cell_mapping": true, + "style": "python-example", "topic": "FitResultExamples" } }, diff --git a/notebooks/FitResultReference.ipynb b/notebooks/FitResultReference.ipynb index 24d0185a..c3992b4b 100644 --- a/notebooks/FitResultReference.ipynb +++ b/notebooks/FitResultReference.ipynb @@ -7,7 +7,7 @@ "metadata": {}, "outputs": [], "source": [ - "# AUTO-GENERATED FROM MATLAB FitResultReference.m -- DO NOT EDIT\n", + "# nSTAT-python notebook example: FitResultReference\n", "from pathlib import Path\n", "import sys\n", "\n", @@ -32,12 +32,7 @@ "OUTPUT_ROOT = REPO_ROOT / \"output\" / \"notebook_images\"\n", "__tracker = FigureTracker(topic='FitResultReference', output_root=OUTPUT_ROOT, expected_count=0)\n", "\n", - "def _matlab(line: str) -> None:\n", - " \"\"\"Placeholder for untranslated MATLAB syntax.\"\"\"\n", - " _ = line\n", - " return\n", - "\n", - "def _load_matlab_globals(name: str) -> dict[str, object]:\n", + "def _load_example_globals(name: str) -> dict[str, object]:\n", " candidates = [\n", " Path(name),\n", " DATA_DIR / name,\n", @@ -51,7 +46,7 @@ " return {k: v for k, v in data.items() if not k.startswith(\"__\")}\n", " return {}\n", "\n", - "# SECTION 0: Section 0\n" + "# SECTION 0: Section 0" ] }, { @@ -62,31 +57,19 @@ "outputs": [], "source": [ "# SECTION 1: FitResult Reference\n", - "# MATLAB L2: % The `FitResult` class stores model fitting outputs generated by\n", "# The `FitResult` class stores model fitting outputs generated by\n", - "# MATLAB L3: % `Analysis.RunAnalysisForNeuron` and `Analysis.RunAnalysisForAllNeurons`.\n", "# `Analysis.RunAnalysisForNeuron` and `Analysis.RunAnalysisForAllNeurons`.\n", - "# MATLAB L4: %\n", "#\n", - "# MATLAB L5: % This reference page is generated from the canonical runtime class:\n", "# This reference page is generated from the canonical runtime class:\n", - "# MATLAB L6: %\n", "#\n", - "# MATLAB L7: % * <../FitResult.m FitResult.m>\n", "# * <../FitResult.m FitResult.m>\n", - "# MATLAB L8: %\n", "#\n", - "# MATLAB L9: % Related pages:\n", "# Related pages:\n", - "# MATLAB L10: %\n", "#\n", - "# MATLAB L11: % * \n", "# * \n", - "# MATLAB L12: % * \n", "# * \n", - "# MATLAB L13: % * \n", "# * \n", - "__tracker.finalize()\n" + "__tracker.finalize()" ] } ], @@ -97,9 +80,7 @@ "nstat": { "expected_figures": 0, "run_group": "full", - "source_file": "/private/tmp/upstream-nstat-matlab/helpfiles/FitResultReference.m", - "source_type": "m", - "strict_section_cell_mapping": true, + "style": "python-example", "topic": "FitResultReference" } }, diff --git a/notebooks/HippocampalPlaceCellExample.ipynb b/notebooks/HippocampalPlaceCellExample.ipynb index 7dad0233..1859a108 100644 --- a/notebooks/HippocampalPlaceCellExample.ipynb +++ b/notebooks/HippocampalPlaceCellExample.ipynb @@ -7,7 +7,7 @@ "metadata": {}, "outputs": [], "source": [ - "# AUTO-GENERATED FROM MATLAB HippocampalPlaceCellExample.mlx -- DO NOT EDIT\n", + "# nSTAT-python notebook example: HippocampalPlaceCellExample\n", "from pathlib import Path\n", "import sys\n", "\n", @@ -32,12 +32,7 @@ "OUTPUT_ROOT = REPO_ROOT / \"output\" / \"notebook_images\"\n", "__tracker = FigureTracker(topic='HippocampalPlaceCellExample', output_root=OUTPUT_ROOT, expected_count=9)\n", "\n", - "def _matlab(line: str) -> None:\n", - " \"\"\"Placeholder for untranslated MATLAB syntax.\"\"\"\n", - " _ = line\n", - " return\n", - "\n", - "def _load_matlab_globals(name: str) -> dict[str, object]:\n", + "def _load_example_globals(name: str) -> dict[str, object]:\n", " candidates = [\n", " Path(name),\n", " DATA_DIR / name,\n", @@ -52,16 +47,11 @@ " return {}\n", "\n", "# SECTION 0: Section 0\n", - "# MATLAB L100: % HIPPOCAMPAL PLACE CELL - RECEPTIVE FIELD ESTIMATION\n", "# HIPPOCAMPAL PLACE CELL - RECEPTIVE FIELD ESTIMATION\n", - "# MATLAB L200: % Estimation of receptive fields of neurons is a very common data analysis problem in neuroscience. Here we use the nSTAT software to perform an estimation of the receptive fields of hippocampal place cells using a bivariate Gaussian model and Zernike polynomials. The number of zernike polynomials is based on \"An Analysis of Hippocampal Spatio-Temporal Representations Using a Bayesian Algorithm for Neural Spike Train Decoding\" Barbieri et. al 2005. The data used herein in was provided by Dr. Ricardo Barbieri on 2/28/2011.\n", "# Estimation of receptive fields of neurons is a very common data analysis problem in neuroscience. Here we use the nSTAT software to perform an estimation of the receptive fields of hippocampal place cells using a bivariate Gaussian model and Zernike polynomials. The number of zernike polynomials is based on \"An Analysis of Hippocampal Spatio-Temporal Representations Using a Bayesian Algorithm for Neural Spike Train Decoding\" Barbieri et. al 2005. The data used herein in was provided by Dr. Ricardo Barbieri on 2/28/2011.\n", - "# MATLAB L300: % Author: Iahn Cajigas\n", "# Author: Iahn Cajigas\n", - "# MATLAB L400: % Date: 3/1/2011\n", "# Date: 3/1/2011\n", - "# MATLAB L500: close all\n", - "plt.close(\"all\")\n" + "plt.close(\"all\")" ] }, { @@ -72,23 +62,12 @@ "outputs": [], "source": [ "# SECTION 1: Example Data\n", - "# MATLAB L800: % The x and y coordinates of a freely foraging rat in a circular environment (70cm in diameter and 30cm high walls) and a fixed visual cue. The x and y coordinates at the time when a spike was observed are marked in red. The position coordinates have been normalized to be between -1 and 1 to allow to simplify the analysis.\n", "# The x and y coordinates of a freely foraging rat in a circular environment (70cm in diameter and 30cm high walls) and a fixed visual cue. The x and y coordinates at the time when a spike was observed are marked in red. The position coordinates have been normalized to be between -1 and 1 to allow to simplify the analysis.\n", - "# MATLAB L900: load(strcat('PlaceCellDataAnimal1.mat'));\n", - "_matlab(\"load(strcat('PlaceCellDataAnimal1.mat'));\")\n", - "# MATLAB L901: exampleCell = 25;\n", "exampleCell = 25\n", - "# MATLAB L902: figure(1);\n", "__tracker.new_figure('figure(1)')\n", - "_matlab('figure(1);')\n", - "# MATLAB L903: plot(x,y,'b',neuron{exampleCell}.xN,neuron{exampleCell}.yN,'r.');\n", "__tracker.annotate(\"plot(x,y,'b',neuron{exampleCell}.xN,neuron{exampleCell}.yN,'r.')\")\n", - "_matlab(\"plot(x,y,'b',neuron{exampleCell}.xN,neuron{exampleCell}.yN,'r.');\")\n", - "# MATLAB L904: xlabel('x'); ylabel('y');\n", "plt.xlabel('x')\n", - "plt.ylabel('y')\n", - "# MATLAB L905: title(['Animal#1, Cell#' num2str(exampleCell)]);\n", - "_matlab(\"title(['Animal#1, Cell#' num2str(exampleCell)]);\")\n" + "plt.ylabel('y')" ] }, { @@ -99,140 +78,40 @@ "outputs": [], "source": [ "# SECTION 2: Analyze All Cells\n", - "# MATLAB L1200: numAnimals =2;\n", "numAnimals = 2\n", - "# MATLAB L1201: for n=1:numAnimals\n", - "_matlab('for n=1:numAnimals')\n", - "# MATLAB L1202: % load the data\n", "# load the data\n", - "# MATLAB L1203: clear x y neuron time nst tc tcc z;\n", "pass\n", - "# MATLAB L1204: load(strcat('PlaceCellDataAnimal',num2str(n),'.mat'));\n", - "_matlab(\"load(strcat('PlaceCellDataAnimal',num2str(n),'.mat'));\")\n", - "# MATLAB L1205: \n", "#\n", - "# MATLAB L1206: % Create the spikeTrains for each cell\n", "# Create the spikeTrains for each cell\n", - "# MATLAB L1207: for i=1:length(neuron)\n", - "_matlab('for i=1:length(neuron)')\n", - "# MATLAB L1208: nst{i} = nspikeTrain(neuron{i}.spikeTimes);\n", - "_matlab('nst{i} = nspikeTrain(neuron{i}.spikeTimes);')\n", - "# MATLAB L1209: end\n", - "_matlab('end')\n", - "# MATLAB L1210: \n", "#\n", - "# MATLAB L1211: \n", "#\n", - "# MATLAB L1212: % Convert to polar coordinates\n", "# Convert to polar coordinates\n", - "# MATLAB L1213: [theta,r] = cart2pol(x,y);\n", - "_matlab('[theta,r] = cart2pol(x,y);')\n", - "# MATLAB L1214: \n", "#\n", - "# MATLAB L1215: \n", "#\n", - "# MATLAB L1216: % Evaluate the Zernike Polynomials\n", "# Evaluate the Zernike Polynomials\n", - "# MATLAB L1217: % Number of polynomials from \"An Analysis of Hippocampal\n", "# Number of polynomials from \"An Analysis of Hippocampal\n", - "# MATLAB L1218: % Spatio-Temporal Representations Using a Bayesian Algorithm for Neural\n", "# Spatio-Temporal Representations Using a Bayesian Algorithm for Neural\n", - "# MATLAB L1219: % Spike Train Decoding\" Barbieri et. al 2005\n", "# Spike Train Decoding\" Barbieri et. al 2005\n", - "# MATLAB L1220: cnt=0;\n", "cnt = 0\n", - "# MATLAB L1221: for l=0:3\n", - "_matlab('for l=0:3')\n", - "# MATLAB L1222: for m=-l:l\n", - "_matlab('for m=-l:l')\n", - "# MATLAB L1223: if(~any(mod(l-m,2))) % otherwise the polynomial = 0\n", - "_matlab('if(~any(mod(l-m,2))) % otherwise the polynomial = 0')\n", - "# MATLAB L1224: cnt = cnt+1;\n", - "_matlab('cnt = cnt+1;')\n", - "# MATLAB L1225: z(:,cnt) = zernfun(l,m,r,theta,'norm');\n", - "_matlab(\"z(:,cnt) = zernfun(l,m,r,theta,'norm');\")\n", - "# MATLAB L1226: % zernfun by Paul Fricker\n", "# zernfun by Paul Fricker\n", - "# MATLAB L1227: % http://www.mathworks.com/matlabcentral/fileexchange/7687\n", "# http://www.mathworks.com/matlabcentral/fileexchange/7687\n", - "# MATLAB L1228: end\n", - "_matlab('end')\n", - "# MATLAB L1229: end\n", - "_matlab('end')\n", - "# MATLAB L1230: end\n", - "_matlab('end')\n", - "# MATLAB L1231: \n", - "#\n", - "# MATLAB L1232: % Data sampled at 30 Hz but just to be sure\n", + "#\n", "# Data sampled at 30 Hz but just to be sure\n", - "# MATLAB L1233: delta=min(diff(time));\n", - "_matlab('delta=min(diff(time));')\n", - "# MATLAB L1234: sampleRate = round(1/delta);\n", - "_matlab('sampleRate = round(1/delta);')\n", - "# MATLAB L1235: \n", "#\n", - "# MATLAB L1236: % Define Covariates for the analysis\n", "# Define Covariates for the analysis\n", - "# MATLAB L1237: baseline = Covariate(time,ones(length(x),1),'Baseline','time','s','',...\n", - "_matlab(\"baseline = Covariate(time,ones(length(x),1),'Baseline','time','s','',...\")\n", - "# MATLAB L1238: {'mu'});\n", - "_matlab(\"{'mu'});\")\n", - "# MATLAB L1239: zernike = Covariate(time,z,'Zernike','time','s','m',{'z1','z2','z3',...\n", - "_matlab(\"zernike = Covariate(time,z,'Zernike','time','s','m',{'z1','z2','z3',...\")\n", - "# MATLAB L1240: 'z4','z5','z6','z7','z8','z9','z10'});\n", - "_matlab(\"'z4','z5','z6','z7','z8','z9','z10'});\")\n", - "# MATLAB L1241: gaussian = Covariate(time,[x y x.^2 y.^2 x.*y],'Gaussian','time',...\n", - "_matlab(\"gaussian = Covariate(time,[x y x.^2 y.^2 x.*y],'Gaussian','time',...\")\n", - "# MATLAB L1242: 's','m',{'x','y','x^2','y^2','x*y'});\n", - "_matlab(\"'s','m',{'x','y','x^2','y^2','x*y'});\")\n", - "# MATLAB L1243: covarColl = CovColl({baseline,gaussian,zernike});\n", - "_matlab('covarColl = CovColl({baseline,gaussian,zernike});')\n", - "# MATLAB L1244: \n", - "#\n", - "# MATLAB L1245: % Create the trial structure\n", + "#\n", "# Create the trial structure\n", - "# MATLAB L1246: spikeColl = nstColl(nst);\n", - "_matlab('spikeColl = nstColl(nst);')\n", - "# MATLAB L1247: trial = Trial(spikeColl,covarColl);\n", - "_matlab('trial = Trial(spikeColl,covarColl);')\n", - "# MATLAB L1248: \n", "#\n", - "# MATLAB L1249: \n", "#\n", - "# MATLAB L1250: % Define how we want to analyze the data\n", "# Define how we want to analyze the data\n", - "# MATLAB L1251: tc{1} = TrialConfig({{'Baseline','mu'},{'Gaussian',...\n", - "_matlab(\"tc{1} = TrialConfig({{'Baseline','mu'},{'Gaussian',...\")\n", - "# MATLAB L1252: 'x','y','x^2','y^2','x*y'}},sampleRate,[]);\n", - "_matlab(\"'x','y','x^2','y^2','x*y'}},sampleRate,[]);\")\n", - "# MATLAB L1253: tc{1}.setName('Gaussian');\n", - "_matlab(\"tc{1}.setName('Gaussian');\")\n", - "# MATLAB L1254: tc{2} = TrialConfig({{'Zernike' 'z1','z2','z3','z4','z5','z6',...\n", - "_matlab(\"tc{2} = TrialConfig({{'Zernike' 'z1','z2','z3','z4','z5','z6',...\")\n", - "# MATLAB L1255: 'z7','z8','z9','z10'}},sampleRate,[]);\n", - "_matlab(\"'z7','z8','z9','z10'}},sampleRate,[]);\")\n", - "# MATLAB L1256: tc{2}.setName('Zernike');\n", - "_matlab(\"tc{2}.setName('Zernike');\")\n", - "# MATLAB L1257: tcc = ConfigColl(tc);\n", - "_matlab('tcc = ConfigColl(tc);')\n", - "# MATLAB L1258: \n", - "#\n", - "# MATLAB L1259: % Perform Analysis (Commented to since data already saved)\n", + "#\n", "# Perform Analysis (Commented to since data already saved)\n", - "# MATLAB L1260: % results =Analysis.RunAnalysisForAllNeurons(trial,tcc,0);\n", "# results =Analysis.RunAnalysisForAllNeurons(trial,tcc,0);\n", - "# MATLAB L1261: \n", "#\n", - "# MATLAB L1262: % Save results\n", "# Save results\n", - "# MATLAB L1263: % resStruct =FitResult.CellArrayToStructure(results);\n", "# resStruct =FitResult.CellArrayToStructure(results);\n", - "# MATLAB L1264: % filename = ['PlaceCellAnimal' num2str(n) 'Results'];\n", "# filename = ['PlaceCellAnimal' num2str(n) 'Results'];\n", - "# MATLAB L1265: % save(filename,'resStruct');\n", - "# save(filename,'resStruct');\n", - "# MATLAB L1266: end\n", - "_matlab('end')\n" + "# save(filename,'resStruct');" ] }, { @@ -243,21 +122,8 @@ "outputs": [], "source": [ "# SECTION 3: View Summary Statistics\n", - "# MATLAB L1500: % Note the Zernike Polynomials yield better fits in terms of decreased KS Statistics (less deviation from the 45 degree line), reduced AIC and reduced BIC across the majority of cells and for both animals\n", "# Note the Zernike Polynomials yield better fits in terms of decreased KS Statistics (less deviation from the 45 degree line), reduced AIC and reduced BIC across the majority of cells and for both animals\n", - "# MATLAB L1600: for n=1:numAnimals\n", - "_matlab('for n=1:numAnimals')\n", - "# MATLAB L1601: resData=load(strcat('PlaceCellAnimal',num2str(n),'Results.mat'));\n", - "_matlab(\"resData=load(strcat('PlaceCellAnimal',num2str(n),'Results.mat'));\")\n", - "# MATLAB L1602: results = FitResult.fromStructure(resData.resStruct);\n", - "_matlab('results = FitResult.fromStructure(resData.resStruct);')\n", - "# MATLAB L1603: Summary = FitResSummary(results);\n", - "_matlab('Summary = FitResSummary(results);')\n", - "# MATLAB L1604: Summary.plotSummary;\n", - "__tracker.annotate('Summary.plotSummary')\n", - "_matlab('Summary.plotSummary;')\n", - "# MATLAB L1605: end\n", - "_matlab('end')\n" + "__tracker.annotate('Summary.plotSummary')" ] }, { @@ -268,313 +134,72 @@ "outputs": [], "source": [ "# SECTION 4: Visualize the results\n", - "# MATLAB L1900: % Define a grid\n", "# Define a grid\n", - "# MATLAB L1901: [x_new,y_new]=meshgrid(-1:.01:1); %define new x and y\n", - "_matlab('[x_new,y_new]=meshgrid(-1:.01:1); %define new x and y')\n", - "# MATLAB L1902: y_new = flipud(y_new); x_new = fliplr(x_new);\n", - "_matlab('y_new = flipud(y_new); x_new = fliplr(x_new);')\n", - "# MATLAB L1903: [theta_new,r_new] = cart2pol(x_new,y_new);\n", - "_matlab('[theta_new,r_new] = cart2pol(x_new,y_new);')\n", - "# MATLAB L1904: \n", - "#\n", - "# MATLAB L1905: %Data for the gaussian fit\n", + "#\n", "# Data for the gaussian fit\n", - "# MATLAB L1906: newData{1} =ones(size(x_new));\n", - "_matlab('newData{1} =ones(size(x_new));')\n", - "# MATLAB L1907: newData{2} =x_new; newData{3} =y_new;\n", - "_matlab('newData{2} =x_new; newData{3} =y_new;')\n", - "# MATLAB L1908: newData{4} =x_new.^2; newData{5} =y_new.^2;\n", - "_matlab('newData{4} =x_new.^2; newData{5} =y_new.^2;')\n", - "# MATLAB L1909: newData{6} =x_new.*y_new;\n", - "_matlab('newData{6} =x_new.*y_new;')\n", - "# MATLAB L1910: \n", - "#\n", - "# MATLAB L1911: \n", - "#\n", - "# MATLAB L1912: % Zernike polynomials only defined on the unit disk\n", + "#\n", + "#\n", "# Zernike polynomials only defined on the unit disk\n", - "# MATLAB L1913: idx = r_new<=1;\n", - "_matlab('idx = r_new<=1;')\n", - "# MATLAB L1914: zpoly = cell(1,10);\n", - "_matlab('zpoly = cell(1,10);')\n", - "# MATLAB L1915: cnt=0;\n", "cnt = 0\n", - "# MATLAB L1916: for l=0:3\n", - "_matlab('for l=0:3')\n", - "# MATLAB L1917: for m=-l:l\n", - "_matlab('for m=-l:l')\n", - "# MATLAB L1918: if(~any(mod(l-m,2)))\n", - "_matlab('if(~any(mod(l-m,2)))')\n", - "# MATLAB L1919: cnt = cnt+1;\n", - "_matlab('cnt = cnt+1;')\n", - "# MATLAB L1920: temp = nan(size(x_new));\n", - "_matlab('temp = nan(size(x_new));')\n", - "# MATLAB L1921: temp(idx) = zernfun(l,m,r_new(idx),theta_new(idx),'norm');\n", - "_matlab(\"temp(idx) = zernfun(l,m,r_new(idx),theta_new(idx),'norm');\")\n", - "# MATLAB L1922: zpoly{cnt} = temp;\n", - "_matlab('zpoly{cnt} = temp;')\n", - "# MATLAB L1923: end\n", - "_matlab('end')\n", - "# MATLAB L1924: end\n", - "_matlab('end')\n", - "# MATLAB L1925: end\n", - "_matlab('end')\n", - "# MATLAB L1926: \n", - "#\n", - "# MATLAB L1927: \n", - "#\n", - "# MATLAB L1928: \n", - "#\n", - "# MATLAB L1929: for n=1:numAnimals\n", - "_matlab('for n=1:numAnimals')\n", - "# MATLAB L1930: \n", - "#\n", - "# MATLAB L1931: clear lambdaGaussian lambdaZernike;\n", + "#\n", + "#\n", + "#\n", + "#\n", "pass\n", - "# MATLAB L1932: load(strcat('PlaceCellDataAnimal',num2str(n),'.mat'));\n", - "_matlab(\"load(strcat('PlaceCellDataAnimal',num2str(n),'.mat'));\")\n", - "# MATLAB L1933: resData=load(strcat('PlaceCellAnimal',num2str(n),'Results.mat'));\n", - "_matlab(\"resData=load(strcat('PlaceCellAnimal',num2str(n),'Results.mat'));\")\n", - "# MATLAB L1934: results = FitResult.fromStructure(resData.resStruct);\n", - "_matlab('results = FitResult.fromStructure(resData.resStruct);')\n", - "# MATLAB L1935: \n", - "#\n", - "# MATLAB L1936: for i=1:length(neuron)\n", - "_matlab('for i=1:length(neuron)')\n", - "# MATLAB L1937: % Evaluate our fits using the new data and the estimated parameters\n", + "#\n", "# Evaluate our fits using the new data and the estimated parameters\n", - "# MATLAB L1938: lambdaGaussian{i} = results{i}.evalLambda(1,newData);\n", - "_matlab('lambdaGaussian{i} = results{i}.evalLambda(1,newData);')\n", - "# MATLAB L1939: lambdaZernike{i} = results{i}.evalLambda(2,zpoly);\n", - "_matlab('lambdaZernike{i} = results{i}.evalLambda(2,zpoly);')\n", - "# MATLAB L1940: end\n", - "_matlab('end')\n", - "# MATLAB L1941: \n", "#\n", - "# MATLAB L1942: \n", "#\n", - "# MATLAB L1943: \n", "#\n", - "# MATLAB L1944: \n", "#\n", - "# MATLAB L1945: % Plot the receptive fields\n", "# Plot the receptive fields\n", - "# MATLAB L1946: for i=1:length(neuron)\n", - "_matlab('for i=1:length(neuron)')\n", - "# MATLAB L1947: % 3d plot of an example place field\n", "# 3d plot of an example place field\n", - "# MATLAB L1948: \n", "#\n", - "# MATLAB L1949: \n", "#\n", - "# MATLAB L1950: % 2d plot of all the cell's fields\n", "# 2d plot of all the cell's fields\n", - "# MATLAB L1951: if(n==1)\n", - "_matlab('if(n==1)')\n", - "# MATLAB L1952: h4=figure(4);\n", "__tracker.new_figure('h4=figure(4)')\n", - "_matlab('h4=figure(4);')\n", - "# MATLAB L1953: if(i==1)\n", - "_matlab('if(i==1)')\n", - "# MATLAB L1954: annotation(h4,'textbox',...\n", - "_matlab(\"annotation(h4,'textbox',...\")\n", - "# MATLAB L1955: [0.343261904761904 0.928571428571418 ...\n", - "_matlab('[0.343261904761904 0.928571428571418 ...')\n", - "# MATLAB L1956: 0.392857142857143 0.0595238095238095],...\n", - "_matlab('0.392857142857143 0.0595238095238095],...')\n", - "# MATLAB L1957: 'String',{['Gaussian Place Fields - Animal#' ...\n", - "_matlab(\"'String',{['Gaussian Place Fields - Animal#' ...\")\n", - "# MATLAB L1958: num2str(n)]},'FitBoxToText','on'); hold on;\n", - "_matlab(\"num2str(n)]},'FitBoxToText','on'); hold on;\")\n", - "# MATLAB L1959: end\n", - "_matlab('end')\n", - "# MATLAB L1960: subplot(7,7,i);\n", "__tracker.annotate('subplot(7,7,i)')\n", - "_matlab('subplot(7,7,i);')\n", - "# MATLAB L1961: elseif(n==2)\n", - "_matlab('elseif(n==2)')\n", - "# MATLAB L1962: h6=figure(6);\n", "__tracker.new_figure('h6=figure(6)')\n", - "_matlab('h6=figure(6);')\n", - "# MATLAB L1963: if(i==1)\n", - "_matlab('if(i==1)')\n", - "# MATLAB L1964: annotation(h6,'textbox',...\n", - "_matlab(\"annotation(h6,'textbox',...\")\n", - "# MATLAB L1965: [0.343261904761904 0.928571428571418 ...\n", - "_matlab('[0.343261904761904 0.928571428571418 ...')\n", - "# MATLAB L1966: 0.392857142857143 0.0595238095238095],...\n", - "_matlab('0.392857142857143 0.0595238095238095],...')\n", - "# MATLAB L1967: 'String',{['Gaussian Place Fields - Animal#' ...\n", - "_matlab(\"'String',{['Gaussian Place Fields - Animal#' ...\")\n", - "# MATLAB L1968: num2str(n)]},'FitBoxToText','on'); hold on;\n", - "_matlab(\"num2str(n)]},'FitBoxToText','on'); hold on;\")\n", - "# MATLAB L1969: end\n", - "_matlab('end')\n", - "# MATLAB L1970: subplot(6,7,i);\n", "__tracker.annotate('subplot(6,7,i)')\n", - "_matlab('subplot(6,7,i);')\n", - "# MATLAB L1971: end\n", - "_matlab('end')\n", - "# MATLAB L1972: pcolor(x_new,y_new,lambdaGaussian{i}), shading interp\n", "__tracker.annotate('pcolor(x_new,y_new,lambdaGaussian{i}), shading interp')\n", - "_matlab('pcolor(x_new,y_new,lambdaGaussian{i}), shading interp')\n", - "# MATLAB L1973: axis square; set(gca,'xtick',[],'ytick',[]);\n", - "_matlab(\"axis square; set(gca,'xtick',[],'ytick',[]);\")\n", - "# MATLAB L1974: \n", "#\n", - "# MATLAB L1975: \n", "#\n", - "# MATLAB L1976: if(n==1)\n", - "_matlab('if(n==1)')\n", - "# MATLAB L1977: h5=figure(5);\n", "__tracker.new_figure('h5=figure(5)')\n", - "_matlab('h5=figure(5);')\n", - "# MATLAB L1978: if(i==1)\n", - "_matlab('if(i==1)')\n", - "# MATLAB L1979: annotation(h5,'textbox',...\n", - "_matlab(\"annotation(h5,'textbox',...\")\n", - "# MATLAB L1980: [0.343261904761904 0.928571428571418 ...\n", - "_matlab('[0.343261904761904 0.928571428571418 ...')\n", - "# MATLAB L1981: 0.392857142857143 0.0595238095238095],...\n", - "_matlab('0.392857142857143 0.0595238095238095],...')\n", - "# MATLAB L1982: 'String',{['Zernike Place Fields - Animal#' ...\n", - "_matlab(\"'String',{['Zernike Place Fields - Animal#' ...\")\n", - "# MATLAB L1983: num2str(n)]},'FitBoxToText','on'); hold on;\n", - "_matlab(\"num2str(n)]},'FitBoxToText','on'); hold on;\")\n", - "# MATLAB L1984: \n", - "#\n", - "# MATLAB L1985: end\n", - "_matlab('end')\n", - "# MATLAB L1986: subplot(7,7,i);\n", + "#\n", "__tracker.annotate('subplot(7,7,i)')\n", - "_matlab('subplot(7,7,i);')\n", - "# MATLAB L1987: elseif(n==2)\n", - "_matlab('elseif(n==2)')\n", - "# MATLAB L1988: h7=figure(7);\n", "__tracker.new_figure('h7=figure(7)')\n", - "_matlab('h7=figure(7);')\n", - "# MATLAB L1989: if(i==1)\n", - "_matlab('if(i==1)')\n", - "# MATLAB L1990: annotation(h7,'textbox',...\n", - "_matlab(\"annotation(h7,'textbox',...\")\n", - "# MATLAB L1991: [0.343261904761904 0.928571428571418 ...\n", - "_matlab('[0.343261904761904 0.928571428571418 ...')\n", - "# MATLAB L1992: 0.392857142857143 0.0595238095238095],...\n", - "_matlab('0.392857142857143 0.0595238095238095],...')\n", - "# MATLAB L1993: 'String',{['Zernike Place Fields - Animal#' ...\n", - "_matlab(\"'String',{['Zernike Place Fields - Animal#' ...\")\n", - "# MATLAB L1994: num2str(n)]},'FitBoxToText','on'); hold on;\n", - "_matlab(\"num2str(n)]},'FitBoxToText','on'); hold on;\")\n", - "# MATLAB L1995: end\n", - "_matlab('end')\n", - "# MATLAB L1996: subplot(6,7,i);\n", "__tracker.annotate('subplot(6,7,i)')\n", - "_matlab('subplot(6,7,i);')\n", - "# MATLAB L1997: end\n", - "_matlab('end')\n", - "# MATLAB L1998: pcolor(x_new,y_new,lambdaZernike{i}), shading interp\n", "__tracker.annotate('pcolor(x_new,y_new,lambdaZernike{i}), shading interp')\n", - "_matlab('pcolor(x_new,y_new,lambdaZernike{i}), shading interp')\n", - "# MATLAB L1999: axis square;\n", - "_matlab('axis square;')\n", - "# MATLAB L2000: set(gca,'xtick',[],'ytick',[]);\n", - "_matlab(\"set(gca,'xtick',[],'ytick',[]);\")\n", - "# MATLAB L2001: end\n", - "_matlab('end')\n", - "# MATLAB L2002: \n", "#\n", - "# MATLAB L2003: \n", "#\n", - "# MATLAB L2004: \n", "#\n", - "# MATLAB L2005: \n", "#\n", - "# MATLAB L2006: end\n", - "_matlab('end')\n", - "# MATLAB L2007: \n", "#\n", - "# MATLAB L2008: \n", "#\n", - "# MATLAB L2009: \n", "#\n", - "# MATLAB L2010: clear lambdaGaussian lambdaZernike;\n", "pass\n", - "# MATLAB L2011: load(strcat('PlaceCellDataAnimal1.mat'));\n", - "_matlab(\"load(strcat('PlaceCellDataAnimal1.mat'));\")\n", - "# MATLAB L2012: resData=load(strcat('PlaceCellAnimal1Results.mat'));\n", - "_matlab(\"resData=load(strcat('PlaceCellAnimal1Results.mat'));\")\n", - "# MATLAB L2013: results = FitResult.fromStructure(resData.resStruct);\n", - "_matlab('results = FitResult.fromStructure(resData.resStruct);')\n", - "# MATLAB L2014: \n", - "#\n", - "# MATLAB L2015: for i=1:length(neuron)\n", - "_matlab('for i=1:length(neuron)')\n", - "# MATLAB L2016: % Evaluate our fits using the new data and the estimated parameters\n", + "#\n", "# Evaluate our fits using the new data and the estimated parameters\n", - "# MATLAB L2017: lambdaGaussian{i} = results{i}.evalLambda(1,newData);\n", - "_matlab('lambdaGaussian{i} = results{i}.evalLambda(1,newData);')\n", - "# MATLAB L2018: lambdaZernike{i} = results{i}.evalLambda(2,zpoly);\n", - "_matlab('lambdaZernike{i} = results{i}.evalLambda(2,zpoly);')\n", - "# MATLAB L2019: end\n", - "_matlab('end')\n", - "# MATLAB L2020: \n", "#\n", - "# MATLAB L2021: \n", "#\n", - "# MATLAB L2022: \n", "#\n", - "# MATLAB L2023: exampleCell = 25;\n", "exampleCell = 25\n", - "# MATLAB L2024: figure(8);\n", "__tracker.new_figure('figure(8)')\n", - "_matlab('figure(8);')\n", - "# MATLAB L2025: plot(x,y,'b',neuron{exampleCell}.xN,neuron{exampleCell}.yN,'r.');\n", "__tracker.annotate(\"plot(x,y,'b',neuron{exampleCell}.xN,neuron{exampleCell}.yN,'r.')\")\n", - "_matlab(\"plot(x,y,'b',neuron{exampleCell}.xN,neuron{exampleCell}.yN,'r.');\")\n", - "# MATLAB L2026: xlabel('x'); ylabel('y');\n", "plt.xlabel('x')\n", "plt.ylabel('y')\n", - "# MATLAB L2027: title(['Animal#1, Cell#' num2str(exampleCell)]);\n", - "_matlab(\"title(['Animal#1, Cell#' num2str(exampleCell)]);\")\n", - "# MATLAB L2028: \n", "#\n", - "# MATLAB L2029: figure(9);\n", "__tracker.new_figure('figure(9)')\n", - "_matlab('figure(9);')\n", - "# MATLAB L2030: h_mesh = mesh(x_new,y_new,lambdaGaussian{exampleCell},'AlphaData',0);\n", - "_matlab(\"h_mesh = mesh(x_new,y_new,lambdaGaussian{exampleCell},'AlphaData',0);\")\n", - "# MATLAB L2031: get(h_mesh,'AlphaData');\n", - "_matlab(\"get(h_mesh,'AlphaData');\")\n", - "# MATLAB L2032: set(h_mesh,'FaceAlpha',0.2,'EdgeAlpha',0.2,'EdgeColor','b');\n", - "_matlab(\"set(h_mesh,'FaceAlpha',0.2,'EdgeAlpha',0.2,'EdgeColor','b');\")\n", - "# MATLAB L2033: hold on;\n", - "_matlab('hold on;')\n", - "# MATLAB L2034: h_mesh = mesh(x_new,y_new,lambdaZernike{exampleCell},'AlphaData',0);\n", - "_matlab(\"h_mesh = mesh(x_new,y_new,lambdaZernike{exampleCell},'AlphaData',0);\")\n", - "# MATLAB L2035: get(h_mesh,'AlphaData');\n", - "_matlab(\"get(h_mesh,'AlphaData');\")\n", - "# MATLAB L2036: set(h_mesh,'FaceAlpha',0.2,'EdgeAlpha',0.2,'EdgeColor','g');\n", - "_matlab(\"set(h_mesh,'FaceAlpha',0.2,'EdgeAlpha',0.2,'EdgeColor','g');\")\n", - "# MATLAB L2037: \n", - "#\n", - "# MATLAB L2038: legend(results{exampleCell}.lambda.dataLabels);\n", - "_matlab('legend(results{exampleCell}.lambda.dataLabels);')\n", - "# MATLAB L2039: plot(x,y,neuron{exampleCell}.xN,neuron{exampleCell}.yN,'r.');\n", + "#\n", "__tracker.annotate(\"plot(x,y,neuron{exampleCell}.xN,neuron{exampleCell}.yN,'r.')\")\n", - "_matlab(\"plot(x,y,neuron{exampleCell}.xN,neuron{exampleCell}.yN,'r.');\")\n", - "# MATLAB L2040: axis tight square;\n", "ax = plt.gca()\n", "ax.relim()\n", "ax.autoscale_view(tight=True)\n", "ax.set_aspect('equal', adjustable='box')\n", "ax.tick_params(top=True, right=True, direction='in')\n", - "# MATLAB L2041: xlabel('x position'); ylabel('y position');\n", "plt.xlabel('x position')\n", "plt.ylabel('y position')\n", - "# MATLAB L2042: title(['Animal#1, Cell#' num2str(exampleCell)]);\n", - "_matlab(\"title(['Animal#1, Cell#' num2str(exampleCell)]);\")\n", - "__tracker.finalize()\n" + "__tracker.finalize()" ] } ], @@ -585,9 +210,7 @@ "nstat": { "expected_figures": 9, "run_group": "full", - "source_file": "/private/tmp/upstream-nstat-matlab/helpfiles/HippocampalPlaceCellExample.mlx", - "source_type": "mlx", - "strict_section_cell_mapping": true, + "style": "python-example", "topic": "HippocampalPlaceCellExample" } }, diff --git a/notebooks/HistoryExamples.ipynb b/notebooks/HistoryExamples.ipynb index 49592c36..f9256eac 100644 --- a/notebooks/HistoryExamples.ipynb +++ b/notebooks/HistoryExamples.ipynb @@ -7,7 +7,7 @@ "metadata": {}, "outputs": [], "source": [ - "# AUTO-GENERATED FROM MATLAB HistoryExamples.mlx -- DO NOT EDIT\n", + "# nSTAT-python notebook example: HistoryExamples\n", "from pathlib import Path\n", "import sys\n", "\n", @@ -32,12 +32,7 @@ "OUTPUT_ROOT = REPO_ROOT / \"output\" / \"notebook_images\"\n", "__tracker = FigureTracker(topic='HistoryExamples', output_root=OUTPUT_ROOT, expected_count=3)\n", "\n", - "def _matlab(line: str) -> None:\n", - " \"\"\"Placeholder for untranslated MATLAB syntax.\"\"\"\n", - " _ = line\n", - " return\n", - "\n", - "def _load_matlab_globals(name: str) -> dict[str, object]:\n", + "def _load_example_globals(name: str) -> dict[str, object]:\n", " candidates = [\n", " Path(name),\n", " DATA_DIR / name,\n", @@ -52,18 +47,8 @@ " return {}\n", "\n", "# SECTION 0: Section 0\n", - "# MATLAB L100: % Test History\n", "# Test History\n", - "# MATLAB L200: % Generete a nspikeTrain and define a set of history windows of interest. We desire windows from 1-2ms, 2-3ms, 3-5ms, and 5ms-10ms. The history object with this windows in created below and then the\n", - "# Generete a nspikeTrain and define a set of history windows of interest. We desire windows from 1-2ms, 2-3ms, 3-5ms, and 5ms-10ms. The history object with this windows in created below and then the\n", - "# MATLAB L300: spikeTimes = sort(rand(1,100))*1;\n", - "_matlab('spikeTimes = sort(rand(1,100))*1;')\n", - "# MATLAB L301: nst = nspikeTrain(spikeTimes,'n1',.001);\n", - "_matlab(\"nst = nspikeTrain(spikeTimes,'n1',.001);\")\n", - "# MATLAB L302: windowTimes = [.001 .002 .004];\n", - "_matlab('windowTimes = [.001 .002 .004];')\n", - "# MATLAB L303: h=History(windowTimes);\n", - "_matlab('h=History(windowTimes);')\n" + "# Generete a nspikeTrain and define a set of history windows of interest. We desire windows from 1-2ms, 2-3ms, 3-5ms, and 5ms-10ms. The history object with this windows in created below and then the" ] }, { @@ -74,23 +59,14 @@ "outputs": [], "source": [ "# SECTION 1: /\n", - "# MATLAB L600: % The firing activity within each window is computed by calling the computeHistory method on a nspikeTrain, nstColl, or a cell array of nspikeTrains\n", "# The firing activity within each window is computed by calling the computeHistory method on a nspikeTrain, nstColl, or a cell array of nspikeTrains\n", - "# MATLAB L700: histn1=h.computeHistory(nst);\n", - "_matlab('histn1=h.computeHistory(nst);')\n", - "# MATLAB L701: figure; subplot(3,1,1); h.plot; ylabel('History Windows');\n", "__tracker.new_figure('figure')\n", "__tracker.annotate('subplot(3,1,1)')\n", "__tracker.annotate('h.plot')\n", - "_matlab(\"figure; subplot(3,1,1); h.plot; ylabel('History Windows');\")\n", - "# MATLAB L702: subplot(3,1,2); histn1.plot; ylabel('History Covariate for nst');\n", "__tracker.annotate('subplot(3,1,2)')\n", "__tracker.annotate('histn1.plot')\n", - "_matlab(\"subplot(3,1,2); histn1.plot; ylabel('History Covariate for nst');\")\n", - "# MATLAB L703: figure; nst.plot; ylabel('Neural Spike Train');\n", "__tracker.new_figure('figure')\n", - "__tracker.annotate('nst.plot')\n", - "_matlab(\"figure; nst.plot; ylabel('Neural Spike Train');\")\n" + "__tracker.annotate('nst.plot')" ] }, { @@ -101,39 +77,15 @@ "outputs": [], "source": [ "# SECTION 2: Example 2: History covariates for a collection of Neural Spikes (nstColl)\n", - "# MATLAB L1000: % It is possible to compute history covariates for all the nspikeTrains in a nstColl simultaneously.\n", "# It is possible to compute history covariates for all the nspikeTrains in a nstColl simultaneously.\n", - "# MATLAB L1100: % Generate data and create a nstColl\n", "# Generate data and create a nstColl\n", - "# MATLAB L1200: clear nst;\n", "pass\n", - "# MATLAB L1201: for i=1:1\n", - "_matlab('for i=1:1')\n", - "# MATLAB L1202: spikeTimes = sort(rand(1,100))*1;\n", - "_matlab('spikeTimes = sort(rand(1,100))*1;')\n", - "# MATLAB L1203: nst{i}=nspikeTrain(spikeTimes,'',.001);\n", - "_matlab(\"nst{i}=nspikeTrain(spikeTimes,'',.001);\")\n", - "# MATLAB L1204: %nst{i}.setName(strcat('Neuron',num2str(i)));\n", "# nst{i}.setName(strcat('Neuron',num2str(i)));\n", - "# MATLAB L1205: end\n", - "_matlab('end')\n", - "# MATLAB L1206: spikeColl=nstColl(nst);\n", - "_matlab('spikeColl=nstColl(nst);')\n", - "# MATLAB L1207: \n", "#\n", - "# MATLAB L1208: windowTimes = [.001 .002 .01];\n", - "_matlab('windowTimes = [.001 .002 .01];')\n", - "# MATLAB L1209: h=History(windowTimes);\n", - "_matlab('h=History(windowTimes);')\n", - "# MATLAB L1400: % generate a CovColl (collection of covariates) by applying the computing the history of the entire nstColl\n", "# generate a CovColl (collection of covariates) by applying the computing the history of the entire nstColl\n", - "# MATLAB L1500: histColl = h.computeHistory(spikeColl);\n", - "_matlab('histColl = h.computeHistory(spikeColl);')\n", - "# MATLAB L1501: figure; histColl.plot;\n", "__tracker.new_figure('figure')\n", "__tracker.annotate('histColl.plot')\n", - "_matlab('figure; histColl.plot;')\n", - "__tracker.finalize()\n" + "__tracker.finalize()" ] } ], @@ -144,9 +96,7 @@ "nstat": { "expected_figures": 3, "run_group": "full", - "source_file": "/private/tmp/upstream-nstat-matlab/helpfiles/HistoryExamples.mlx", - "source_type": "mlx", - "strict_section_cell_mapping": true, + "style": "python-example", "topic": "HistoryExamples" } }, diff --git a/notebooks/HybridFilterExample.ipynb b/notebooks/HybridFilterExample.ipynb index 5b11ad41..8654bf01 100644 --- a/notebooks/HybridFilterExample.ipynb +++ b/notebooks/HybridFilterExample.ipynb @@ -7,7 +7,7 @@ "metadata": {}, "outputs": [], "source": [ - "# AUTO-GENERATED FROM MATLAB HybridFilterExample.mlx -- DO NOT EDIT\n", + "# nSTAT-python notebook example: HybridFilterExample\n", "from pathlib import Path\n", "import sys\n", "\n", @@ -32,12 +32,7 @@ "OUTPUT_ROOT = REPO_ROOT / \"output\" / \"notebook_images\"\n", "__tracker = FigureTracker(topic='HybridFilterExample', output_root=OUTPUT_ROOT, expected_count=2)\n", "\n", - "def _matlab(line: str) -> None:\n", - " \"\"\"Placeholder for untranslated MATLAB syntax.\"\"\"\n", - " _ = line\n", - " return\n", - "\n", - "def _load_matlab_globals(name: str) -> dict[str, object]:\n", + "def _load_example_globals(name: str) -> dict[str, object]:\n", " candidates = [\n", " Path(name),\n", " DATA_DIR / name,\n", @@ -52,10 +47,8 @@ " return {}\n", "\n", "# SECTION 0: Section 0\n", - "# MATLAB L100: % Hybrid Point Process Filter Example\n", "# Hybrid Point Process Filter Example\n", - "# MATLAB L200: % This example is based on an implementation of the Hybrid Point Process filter described in General-purpose filter design for neural prosthetic devices by Srinivasan L, Eden UT, Mitter SK, Brown EN in J Neurophysiol. 2007 Oct, 98(4):2456-75.\n", - "# This example is based on an implementation of the Hybrid Point Process filter described in General-purpose filter design for neural prosthetic devices by Srinivasan L, Eden UT, Mitter SK, Brown EN in J Neurophysiol. 2007 Oct, 98(4):2456-75.\n" + "# This example is based on an implementation of the Hybrid Point Process filter described in General-purpose filter design for neural prosthetic devices by Srinivasan L, Eden UT, Mitter SK, Brown EN in J Neurophysiol. 2007 Oct, 98(4):2456-75." ] }, { @@ -66,14 +59,10 @@ "outputs": [], "source": [ "# SECTION 1: Problem Statement\n", - "# MATLAB L400: % Suppose that a process of interest can be modeled as consisting of several discrete states where the evolution of the system under each state can be modeled as a linear state space model. The observations of both the state and the continuous dynamics are not direct, but rather observed through how the continuous and discrete states affect the firing of a population of neurons. The goal of the hybrid filter is to estimate both the continuous dynamics and the underlying system state from only the neural population firing (point process observations).\n", "# Suppose that a process of interest can be modeled as consisting of several discrete states where the evolution of the system under each state can be modeled as a linear state space model. The observations of both the state and the continuous dynamics are not direct, but rather observed through how the continuous and discrete states affect the firing of a population of neurons. The goal of the hybrid filter is to estimate both the continuous dynamics and the underlying system state from only the neural population firing (point process observations).\n", - "# MATLAB L500: % To illustrate the use of this filter, we consider a reaching task. We assume two underlying system states s=1=\"Not Moving\"=NM and s=2=\"Moving\"=M. Under the \"Not Moving\" the position of the arm remain constant, whereas in the \"Moving\" state, the position and velocities evolved based on the arm acceleration that is modeled as a gaussian white noise process.\n", "# To illustrate the use of this filter, we consider a reaching task. We assume two underlying system states s=1=\"Not Moving\"=NM and s=2=\"Moving\"=M. Under the \"Not Moving\" the position of the arm remain constant, whereas in the \"Moving\" state, the position and velocities evolved based on the arm acceleration that is modeled as a gaussian white noise process.\n", - "# MATLAB L600: % Under both the \"Moving\" and \"Not Moving\" states, the arm evolution state vector is\n", "# Under both the \"Moving\" and \"Not Moving\" states, the arm evolution state vector is\n", - "# MATLAB L700: % {\\bf{x}} = {[x,y,{v_x},{v_y},{a_x},{a_y}]^T}\n", - "# {\\bf{x}} = {[x,y,{v_x},{v_y},{a_x},{a_y}]^T}\n" + "# {\\bf{x}} = {[x,y,{v_x},{v_y},{a_x},{a_y}]^T}" ] }, { @@ -84,329 +73,57 @@ "outputs": [], "source": [ "# SECTION 2: Generated Simulated Arm Reach\n", - "# MATLAB L900: clear all;\n", "pass\n", - "# MATLAB L901: close all;\n", "plt.close(\"all\")\n", - "# MATLAB L902: delta=0.001;\n", "delta = 0.001\n", - "# MATLAB L903: Tmax=2;\n", "Tmax = 2\n", - "# MATLAB L904: time=0:delta:Tmax;\n", - "_matlab('time=0:delta:Tmax;')\n", - "# MATLAB L905: A{2} = [1 0 delta 0 delta^2/2 0;\n", - "_matlab('A{2} = [1 0 delta 0 delta^2/2 0;')\n", - "# MATLAB L906: 0 1 0 delta 0 delta^2/2;\n", - "_matlab('0 1 0 delta 0 delta^2/2;')\n", - "# MATLAB L907: 0 0 1 0 delta 0;\n", - "_matlab('0 0 1 0 delta 0;')\n", - "# MATLAB L908: 0 0 0 1 0 delta;\n", - "_matlab('0 0 0 1 0 delta;')\n", - "# MATLAB L909: 0 0 0 0 1 0;\n", - "_matlab('0 0 0 0 1 0;')\n", - "# MATLAB L910: 0 0 0 0 0 1];\n", - "_matlab('0 0 0 0 0 1];')\n", - "# MATLAB L911: \n", - "#\n", - "# MATLAB L912: A{1} = [1 0 0 0 0 0;\n", - "_matlab('A{1} = [1 0 0 0 0 0;')\n", - "# MATLAB L913: 0 1 0 0 0 0;\n", - "_matlab('0 1 0 0 0 0;')\n", - "# MATLAB L914: 0 0 0 0 0 0;\n", - "_matlab('0 0 0 0 0 0;')\n", - "# MATLAB L915: 0 0 0 0 0 0;\n", - "_matlab('0 0 0 0 0 0;')\n", - "# MATLAB L916: 0 0 0 0 0 0;\n", - "_matlab('0 0 0 0 0 0;')\n", - "# MATLAB L917: 0 0 0 0 0 0];\n", - "_matlab('0 0 0 0 0 0];')\n", - "# MATLAB L918: A{1} = [1 0;\n", - "_matlab('A{1} = [1 0;')\n", - "# MATLAB L919: 0 1];\n", - "_matlab('0 1];')\n", - "# MATLAB L920: \n", - "#\n", - "# MATLAB L921: Px0{2} =1e-6*eye(6,6);\n", - "_matlab('Px0{2} =1e-6*eye(6,6);')\n", - "# MATLAB L922: Px0{1} =1e-6*eye(2,2);\n", - "_matlab('Px0{1} =1e-6*eye(2,2);')\n", - "# MATLAB L923: \n", - "#\n", - "# MATLAB L924: minCovVal = 1e-12;\n", + "#\n", + "#\n", + "#\n", "minCovVal = 1e-12\n", - "# MATLAB L925: covVal = 1e-3;\n", "covVal = 1e-3\n", - "# MATLAB L926: \n", - "#\n", - "# MATLAB L927: \n", - "#\n", - "# MATLAB L928: \n", - "#\n", - "# MATLAB L929: Q{2}=[minCovVal 0 0 0 0 0;\n", - "_matlab('Q{2}=[minCovVal 0 0 0 0 0;')\n", - "# MATLAB L930: 0 minCovVal 0 0 0 0;\n", - "_matlab('0 minCovVal 0 0 0 0;')\n", - "# MATLAB L931: 0 0 minCovVal 0 0 0;\n", - "_matlab('0 0 minCovVal 0 0 0;')\n", - "# MATLAB L932: 0 0 0 minCovVal 0 0;\n", - "_matlab('0 0 0 minCovVal 0 0;')\n", - "# MATLAB L933: 0 0 0 0 covVal 0;\n", - "_matlab('0 0 0 0 covVal 0;')\n", - "# MATLAB L934: 0 0 0 0 0 covVal];\n", - "_matlab('0 0 0 0 0 covVal];')\n", - "# MATLAB L935: \n", - "#\n", - "# MATLAB L936: Q{1}=minCovVal*eye(2,2);\n", - "_matlab('Q{1}=minCovVal*eye(2,2);')\n", - "# MATLAB L937: \n", - "#\n", - "# MATLAB L938: mstate = zeros(1,length(time));\n", - "_matlab('mstate = zeros(1,length(time));')\n", - "# MATLAB L939: ind{1}=1:2;\n", - "_matlab('ind{1}=1:2;')\n", - "# MATLAB L940: ind{2}=1:6;\n", - "_matlab('ind{2}=1:6;')\n", - "# MATLAB L941: \n", - "#\n", - "# MATLAB L942: % Acceleration model\n", + "#\n", + "#\n", + "#\n", + "#\n", + "#\n", + "#\n", "# Acceleration model\n", - "# MATLAB L943: X=zeros(max([size(A{1},1),size(A{2},1)]),length(time));\n", - "_matlab('X=zeros(max([size(A{1},1),size(A{2},1)]),length(time));')\n", - "# MATLAB L944: p_ij = [.998 .002;\n", - "_matlab('p_ij = [.998 .002;')\n", - "# MATLAB L945: .001 .999];\n", - "_matlab('.001 .999];')\n", - "# MATLAB L946: \n", - "#\n", - "# MATLAB L947: for i = 1:length(time)\n", - "_matlab('for i = 1:length(time)')\n", - "# MATLAB L948: \n", - "#\n", - "# MATLAB L949: if(i==1)\n", - "_matlab('if(i==1)')\n", - "# MATLAB L950: mstate(i) = 1;\n", - "_matlab('mstate(i) = 1;')\n", - "# MATLAB L951: else\n", - "_matlab('else')\n", - "# MATLAB L952: if(rand(1,1)1)=1; %Avoid more than 1 spike per bin.\n", - "_matlab('dN(dN>1)=1; %Avoid more than 1 spike per bin.')\n", - "# MATLAB L1554: \n", - "#\n", - "# MATLAB L1555: % Starting states are equally probable\n", + "#\n", "# Starting states are equally probable\n", - "# MATLAB L1556: Mu0=.5*ones(size(p_ij,1),1);\n", - "_matlab('Mu0=.5*ones(size(p_ij,1),1);')\n", - "# MATLAB L1557: clear x0 yT clear Pi0 PiT;\n", "pass\n", - "# MATLAB L1558: x0{1} = X(ind{1},1);\n", - "_matlab('x0{1} = X(ind{1},1);')\n", - "# MATLAB L1559: yT{1} = X(ind{1},end);\n", - "_matlab('yT{1} = X(ind{1},end);')\n", - "# MATLAB L1560: Pi0 = Px0;\n", - "_matlab('Pi0 = Px0;')\n", - "# MATLAB L1561: PiT{1} = 1e-9*eye(size(x0{1},1),size(x0{1},1));\n", - "_matlab('PiT{1} = 1e-9*eye(size(x0{1},1),size(x0{1},1));')\n", - "# MATLAB L1562: \n", - "#\n", - "# MATLAB L1563: x0{2} = X(ind{2},1);\n", - "_matlab('x0{2} = X(ind{2},1);')\n", - "# MATLAB L1564: yT{2} = X(ind{2},end);\n", - "_matlab('yT{2} = X(ind{2},end);')\n", - "# MATLAB L1565: PiT{2} = 1e-9*eye(size(x0{2},1),size(x0{2},1));\n", - "_matlab('PiT{2} = 1e-9*eye(size(x0{2},1),size(x0{2},1));')\n", - "# MATLAB L1566: \n", - "#\n", - "# MATLAB L1567: \n", - "#\n", - "# MATLAB L1568: % Run the Hybrid Point Process Filter\n", + "#\n", + "#\n", + "#\n", "# Run the Hybrid Point Process Filter\n", - "# MATLAB L1569: [S_est, X_est, W_est, MU_est, X_s, W_s,pNGivenS]=...\n", - "_matlab('[S_est, X_est, W_est, MU_est, X_s, W_s,pNGivenS]=...')\n", - "# MATLAB L1570: DecodingAlgorithms.PPHybridFilterLinear(A, Q, p_ij,Mu0, dN',...\n", - "_matlab(\"DecodingAlgorithms.PPHybridFilterLinear(A, Q, p_ij,Mu0, dN',...\")\n", - "# MATLAB L1571: coeffs(:,1),coeffs(:,2:end)',fitType,delta,[],[],x0,Pi0, yT,PiT);\n", - "_matlab(\"coeffs(:,1),coeffs(:,2:end)',fitType,delta,[],[],x0,Pi0, yT,PiT);\")\n", - "# MATLAB L1572: [S_estNT, X_estNT, W_estNT, MU_estNT, X_sNT, W_sNT,pNGivenSNT]=...\n", - "_matlab('[S_estNT, X_estNT, W_estNT, MU_estNT, X_sNT, W_sNT,pNGivenSNT]=...')\n", - "# MATLAB L1573: DecodingAlgorithms.PPHybridFilterLinear(A, Q, p_ij,Mu0, dN',...\n", - "_matlab(\"DecodingAlgorithms.PPHybridFilterLinear(A, Q, p_ij,Mu0, dN',...\")\n", - "# MATLAB L1574: coeffs(:,1),coeffs(:,2:end)',fitType,delta,[],[],x0);\n", - "_matlab(\"coeffs(:,1),coeffs(:,2:end)',fitType,delta,[],[],x0);\")\n", - "# MATLAB L1575: \n", - "#\n", - "# MATLAB L1576: %Store the results for computing relevant statistics later\n", + "#\n", "# Store the results for computing relevant statistics later\n", - "# MATLAB L1577: X_estAll(:,:,n) = X_est;\n", - "_matlab('X_estAll(:,:,n) = X_est;')\n", - "# MATLAB L1578: X_estNTAll(:,:,n) = X_estNT;\n", - "_matlab('X_estNTAll(:,:,n) = X_estNT;')\n", - "# MATLAB L1579: S_estAll(n,:)=S_est;\n", - "_matlab('S_estAll(n,:)=S_est;')\n", - "# MATLAB L1580: S_estNTAll(n,:)=S_estNT;\n", - "_matlab('S_estNTAll(n,:)=S_estNT;')\n", - "# MATLAB L1581: MU_estAll(:,:,n)=MU_est;\n", - "_matlab('MU_estAll(:,:,n)=MU_est;')\n", - "# MATLAB L1582: MU_estNTAll(:,:,n) = MU_estNT;\n", - "_matlab('MU_estNTAll(:,:,n) = MU_estNT;')\n", - "# MATLAB L1583: \n", - "#\n", - "# MATLAB L1584: \n", - "#\n", - "# MATLAB L1585: %State Estimate\n", + "#\n", + "#\n", "# State Estimate\n", - "# MATLAB L1586: subplot(4,3,[1 4]);\n", "__tracker.annotate('subplot(4,3,[1 4])')\n", - "_matlab('subplot(4,3,[1 4]);')\n", - "# MATLAB L1587: plot(time,mstate,'k','LineWidth',3); hold all;\n", "__tracker.annotate(\"plot(time,mstate,'k','LineWidth',3)\")\n", - "_matlab(\"plot(time,mstate,'k','LineWidth',3); hold all;\")\n", - "# MATLAB L1588: plot(time,S_est,'b-.','Linewidth',.5);\n", "__tracker.annotate(\"plot(time,S_est,'b-.','Linewidth',.5)\")\n", - "_matlab(\"plot(time,S_est,'b-.','Linewidth',.5);\")\n", - "# MATLAB L1589: plot(time,S_estNT,'g-.','Linewidth',.5); axis tight; v=axis;\n", "__tracker.annotate(\"plot(time,S_estNT,'g-.','Linewidth',.5)\")\n", - "_matlab(\"plot(time,S_estNT,'g-.','Linewidth',.5); axis tight; v=axis;\")\n", - "# MATLAB L1590: axis([v(1) v(2) 0.5 2.5]);\n", - "_matlab('axis([v(1) v(2) 0.5 2.5]);')\n", - "# MATLAB L1591: \n", "#\n", - "# MATLAB L1592: %Movement State Probability (Non-movement State probability is 1-Pr(Movement))\n", "# Movement State Probability (Non-movement State probability is 1-Pr(Movement))\n", - "# MATLAB L1593: subplot(4,3,[7 10]);\n", "__tracker.annotate('subplot(4,3,[7 10])')\n", - "_matlab('subplot(4,3,[7 10]);')\n", - "# MATLAB L1594: plot(time,MU_est(2,:),'b-.','Linewidth',.5); hold on;\n", "__tracker.annotate(\"plot(time,MU_est(2,:),'b-.','Linewidth',.5)\")\n", - "_matlab(\"plot(time,MU_est(2,:),'b-.','Linewidth',.5); hold on;\")\n", - "# MATLAB L1595: plot(time,MU_estNT(2,:),'g-.','Linewidth',.5); hold on;\n", "__tracker.annotate(\"plot(time,MU_estNT(2,:),'g-.','Linewidth',.5)\")\n", - "_matlab(\"plot(time,MU_estNT(2,:),'g-.','Linewidth',.5); hold on;\")\n", - "# MATLAB L1596: axis([min(time) max(time) 0 1.1]);\n", - "_matlab('axis([min(time) max(time) 0 1.1]);')\n", - "# MATLAB L1597: \n", "#\n", - "# MATLAB L1598: %The movement path\n", "# The movement path\n", - "# MATLAB L1599: subplot(4,3,[2 3 5 6]);\n", "__tracker.annotate('subplot(4,3,[2 3 5 6])')\n", - "_matlab('subplot(4,3,[2 3 5 6]);')\n", - "# MATLAB L1600: h1=plot(100*X(1,:)',100*X(2,:)','k'); hold all;\n", "__tracker.annotate(\"h1=plot(100*X(1,:)',100*X(2,:)','k')\")\n", - "_matlab(\"h1=plot(100*X(1,:)',100*X(2,:)','k'); hold all;\")\n", - "# MATLAB L1601: h2=plot(100*X_est(1,:)',100*X_est(2,:)','b-.'); hold all;\n", "__tracker.annotate(\"h2=plot(100*X_est(1,:)',100*X_est(2,:)','b-.')\")\n", - "_matlab(\"h2=plot(100*X_est(1,:)',100*X_est(2,:)','b-.'); hold all;\")\n", - "# MATLAB L1602: h3=plot(100*X_estNT(1,:)',100*X_estNT(2,:)','g-.');\n", "__tracker.annotate(\"h3=plot(100*X_estNT(1,:)',100*X_estNT(2,:)','g-.')\")\n", - "_matlab(\"h3=plot(100*X_estNT(1,:)',100*X_estNT(2,:)','g-.');\")\n", - "# MATLAB L1603: \n", "#\n", - "# MATLAB L1604: %X-Position\n", "# X-Position\n", - "# MATLAB L1605: subplot(4,3,8);\n", "__tracker.annotate('subplot(4,3,8)')\n", - "_matlab('subplot(4,3,8);')\n", - "# MATLAB L1606: h1=plot(time,100*X(1,:),'k','LineWidth',3); hold on;\n", "__tracker.annotate(\"h1=plot(time,100*X(1,:),'k','LineWidth',3)\")\n", - "_matlab(\"h1=plot(time,100*X(1,:),'k','LineWidth',3); hold on;\")\n", - "# MATLAB L1607: h2=plot(time,100*X_est(1,:)','b-.');\n", "__tracker.annotate(\"h2=plot(time,100*X_est(1,:)','b-.');\")\n", - "_matlab(\"h2=plot(time,100*X_est(1,:)','b-.');\")\n", - "# MATLAB L1608: h3=plot(time,100*X_estNT(1,:)','g-.');\n", "__tracker.annotate(\"h3=plot(time,100*X_estNT(1,:)','g-.');\")\n", - "_matlab(\"h3=plot(time,100*X_estNT(1,:)','g-.');\")\n", - "# MATLAB L1609: \n", "#\n", - "# MATLAB L1610: %Y-Position\n", "# Y-Position\n", - "# MATLAB L1611: subplot(4,3,9);\n", "__tracker.annotate('subplot(4,3,9)')\n", - "_matlab('subplot(4,3,9);')\n", - "# MATLAB L1612: h1=plot(time,100*X(2,:),'k','LineWidth',3); hold on;\n", "__tracker.annotate(\"h1=plot(time,100*X(2,:),'k','LineWidth',3)\")\n", - "_matlab(\"h1=plot(time,100*X(2,:),'k','LineWidth',3); hold on;\")\n", - "# MATLAB L1613: h2=plot(time,100*X_est(2,:)','b-.');\n", "__tracker.annotate(\"h2=plot(time,100*X_est(2,:)','b-.');\")\n", - "_matlab(\"h2=plot(time,100*X_est(2,:)','b-.');\")\n", - "# MATLAB L1614: h3=plot(time,100*X_estNT(2,:)','g-.');\n", "__tracker.annotate(\"h3=plot(time,100*X_estNT(2,:)','g-.');\")\n", - "_matlab(\"h3=plot(time,100*X_estNT(2,:)','g-.');\")\n", - "# MATLAB L1615: \n", "#\n", - "# MATLAB L1616: %X-Velocity\n", "# X-Velocity\n", - "# MATLAB L1617: subplot(4,3,11);\n", "__tracker.annotate('subplot(4,3,11)')\n", - "_matlab('subplot(4,3,11);')\n", - "# MATLAB L1618: h1=plot(time,100*X(3,:),'k','LineWidth',3); hold on;\n", "__tracker.annotate(\"h1=plot(time,100*X(3,:),'k','LineWidth',3)\")\n", - "_matlab(\"h1=plot(time,100*X(3,:),'k','LineWidth',3); hold on;\")\n", - "# MATLAB L1619: h2=plot(time,100*X_est(3,:)','b-.');\n", "__tracker.annotate(\"h2=plot(time,100*X_est(3,:)','b-.');\")\n", - "_matlab(\"h2=plot(time,100*X_est(3,:)','b-.');\")\n", - "# MATLAB L1620: h3=plot(time,100*X_estNT(3,:)','g-.');\n", "__tracker.annotate(\"h3=plot(time,100*X_estNT(3,:)','g-.');\")\n", - "_matlab(\"h3=plot(time,100*X_estNT(3,:)','g-.');\")\n", - "# MATLAB L1621: \n", "#\n", - "# MATLAB L1622: subplot(4,3,12);\n", "__tracker.annotate('subplot(4,3,12)')\n", - "_matlab('subplot(4,3,12);')\n", - "# MATLAB L1623: h1=plot(time,100*X(4,:),'k','LineWidth',3); hold on;\n", "__tracker.annotate(\"h1=plot(time,100*X(4,:),'k','LineWidth',3)\")\n", - "_matlab(\"h1=plot(time,100*X(4,:),'k','LineWidth',3); hold on;\")\n", - "# MATLAB L1624: h2=plot(time,100*X_est(4,:)','b-.');\n", "__tracker.annotate(\"h2=plot(time,100*X_est(4,:)','b-.');\")\n", - "_matlab(\"h2=plot(time,100*X_est(4,:)','b-.');\")\n", - "# MATLAB L1625: h3=plot(time,100*X_estNT(4,:)','g-.');\n", "__tracker.annotate(\"h3=plot(time,100*X_estNT(4,:)','g-.');\")\n", - "_matlab(\"h3=plot(time,100*X_estNT(4,:)','g-.');\")\n", - "# MATLAB L1626: \n", "#\n", - "# MATLAB L1627: \n", "#\n", - "# MATLAB L1628: \n", "#\n", - "# MATLAB L1629: \n", "#\n", - "# MATLAB L1630: end\n", - "_matlab('end')\n", - "# MATLAB L1631: \n", "#\n", - "# MATLAB L1632: %\n", "#\n", - "# MATLAB L1633: % Save all the example Data\n", "# Save all the example Data\n", - "# MATLAB L1634: % save Experiment6ReachExamples X_estAll X_estNTAll S_estAll ...\n", "# save Experiment6ReachExamples X_estAll X_estNTAll S_estAll ...\n", - "# MATLAB L1635: % S_estNTAll MU_estAll MU_estNTAll;\n", "# S_estNTAll MU_estAll MU_estNTAll;\n", - "# MATLAB L1636: %\n", "#\n", - "# MATLAB L1637: % load Experiment6ReachExamples;\n", "# load Experiment6ReachExamples;\n", - "# MATLAB L1638: \n", "#\n", - "# MATLAB L1639: % Mean Discrete State Estimate\n", "# Mean Discrete State Estimate\n", - "# MATLAB L1640: subplot(4,3,[1 4]);\n", "__tracker.annotate('subplot(4,3,[1 4])')\n", - "_matlab('subplot(4,3,[1 4]);')\n", - "# MATLAB L1641: hold all;\n", - "_matlab('hold all;')\n", - "# MATLAB L1642: plot(time,mstate,'k','LineWidth',3);\n", "__tracker.annotate(\"plot(time,mstate,'k','LineWidth',3)\")\n", - "_matlab(\"plot(time,mstate,'k','LineWidth',3);\")\n", - "# MATLAB L1643: plot(time,mean(S_estAll),'b','LineWidth',3);\n", "__tracker.annotate(\"plot(time,mean(S_estAll),'b','LineWidth',3)\")\n", - "_matlab(\"plot(time,mean(S_estAll),'b','LineWidth',3);\")\n", - "# MATLAB L1644: plot(time,mean(S_estNTAll),'g','LineWidth',3);\n", "__tracker.annotate(\"plot(time,mean(S_estNTAll),'g','LineWidth',3)\")\n", - "_matlab(\"plot(time,mean(S_estNTAll),'g','LineWidth',3);\")\n", - "# MATLAB L1645: set(gca,'xtick',[],'YTick',[1 2.1],'YTickLabel',{'N','M'});\n", - "_matlab(\"set(gca,'xtick',[],'YTick',[1 2.1],'YTickLabel',{'N','M'});\")\n", - "# MATLAB L1646: hy=ylabel('state'); hx=xlabel('time [s]');\n", - "_matlab(\"hy=ylabel('state'); hx=xlabel('time [s]');\")\n", - "# MATLAB L1647: set([hy hx],'FontName', 'Arial','FontSize',10,'FontWeight','bold',...\n", - "_matlab(\"set([hy hx],'FontName', 'Arial','FontSize',10,'FontWeight','bold',...\")\n", - "# MATLAB L1648: 'Interpreter','none');\n", - "_matlab(\"'Interpreter','none');\")\n", - "# MATLAB L1649: title('Estimated vs. Actual State','FontWeight','bold','Fontsize',...\n", - "_matlab(\"title('Estimated vs. Actual State','FontWeight','bold','Fontsize',...\")\n", - "# MATLAB L1650: 12,'FontName','Arial');\n", - "_matlab(\"12,'FontName','Arial');\")\n", - "# MATLAB L1651: \n", - "#\n", - "# MATLAB L1652: \n", - "#\n", - "# MATLAB L1653: \n", - "#\n", - "# MATLAB L1654: \n", - "#\n", - "# MATLAB L1655: % Mean State Movement State Probability\n", + "#\n", + "#\n", + "#\n", + "#\n", "# Mean State Movement State Probability\n", - "# MATLAB L1656: subplot(4,3,[7 10]);\n", "__tracker.annotate('subplot(4,3,[7 10])')\n", - "_matlab('subplot(4,3,[7 10]);')\n", - "# MATLAB L1657: plot(time, mean(squeeze(MU_estAll(2,:,:)),2),'b','LineWidth',3);\n", "__tracker.annotate(\"plot(time, mean(squeeze(MU_estAll(2,:,:)),2),'b','LineWidth',3)\")\n", - "_matlab(\"plot(time, mean(squeeze(MU_estAll(2,:,:)),2),'b','LineWidth',3);\")\n", - "# MATLAB L1658: hold on;\n", - "_matlab('hold on;')\n", - "# MATLAB L1659: plot(time,mean(squeeze(MU_estNTAll(2,:,:)),2),'g','LineWidth',3);\n", "__tracker.annotate(\"plot(time,mean(squeeze(MU_estNTAll(2,:,:)),2),'g','LineWidth',3)\")\n", - "_matlab(\"plot(time,mean(squeeze(MU_estNTAll(2,:,:)),2),'g','LineWidth',3);\")\n", - "# MATLAB L1660: hold on;\n", - "_matlab('hold on;')\n", - "# MATLAB L1661: axis([min(time) max(time) 0 1.1]);\n", - "_matlab('axis([min(time) max(time) 0 1.1]);')\n", - "# MATLAB L1662: hx=xlabel('time [s]'); hy=ylabel('P(s(t)=M | data)');\n", - "_matlab(\"hx=xlabel('time [s]'); hy=ylabel('P(s(t)=M | data)');\")\n", - "# MATLAB L1663: set([hx, hy],'FontName', 'Arial','FontSize',10,'FontWeight','bold');\n", - "_matlab(\"set([hx, hy],'FontName', 'Arial','FontSize',10,'FontWeight','bold');\")\n", - "# MATLAB L1664: title('Probability of State','FontWeight','bold','Fontsize',12,...\n", - "_matlab(\"title('Probability of State','FontWeight','bold','Fontsize',12,...\")\n", - "# MATLAB L1665: 'FontName','Arial');\n", - "_matlab(\"'FontName','Arial');\")\n", - "# MATLAB L1666: \n", - "#\n", - "# MATLAB L1667: % Mean movement path\n", + "#\n", "# Mean movement path\n", - "# MATLAB L1668: subplot(4,3,[2 3 5 6]);\n", "__tracker.annotate('subplot(4,3,[2 3 5 6])')\n", - "_matlab('subplot(4,3,[2 3 5 6]);')\n", - "# MATLAB L1669: h1=plot(100*X(1,:)',100*X(2,:)','k'); hold all;\n", "__tracker.annotate(\"h1=plot(100*X(1,:)',100*X(2,:)','k')\")\n", - "_matlab(\"h1=plot(100*X(1,:)',100*X(2,:)','k'); hold all;\")\n", - "# MATLAB L1670: mXestAll=mean(100*X_estAll,3);\n", - "_matlab('mXestAll=mean(100*X_estAll,3);')\n", - "# MATLAB L1671: mXestNTAll=mean(100*X_estNTAll,3);\n", - "_matlab('mXestNTAll=mean(100*X_estNTAll,3);')\n", - "# MATLAB L1672: plot(mXestAll(1,:),mXestAll(2,:),'b','Linewidth',3);\n", "__tracker.annotate(\"plot(mXestAll(1,:),mXestAll(2,:),'b','Linewidth',3)\")\n", - "_matlab(\"plot(mXestAll(1,:),mXestAll(2,:),'b','Linewidth',3);\")\n", - "# MATLAB L1673: plot(mXestNTAll(1,:),mXestNTAll(2,:),'g','Linewidth',3);\n", "__tracker.annotate(\"plot(mXestNTAll(1,:),mXestNTAll(2,:),'g','Linewidth',3)\")\n", - "_matlab(\"plot(mXestNTAll(1,:),mXestNTAll(2,:),'g','Linewidth',3);\")\n", - "# MATLAB L1674: hx=xlabel('x [cm]'); hy=ylabel('y [cm]');\n", - "_matlab(\"hx=xlabel('x [cm]'); hy=ylabel('y [cm]');\")\n", - "# MATLAB L1675: set([hx, hy],'FontName', 'Arial','FontSize',10,'FontWeight','bold');\n", - "_matlab(\"set([hx, hy],'FontName', 'Arial','FontSize',10,'FontWeight','bold');\")\n", - "# MATLAB L1676: \n", - "#\n", - "# MATLAB L1677: h1=plot(100*X(1,1),100*X(2,1),'bo','MarkerSize',14); hold on;\n", + "#\n", "__tracker.annotate(\"h1=plot(100*X(1,1),100*X(2,1),'bo','MarkerSize',14)\")\n", - "_matlab(\"h1=plot(100*X(1,1),100*X(2,1),'bo','MarkerSize',14); hold on;\")\n", - "# MATLAB L1678: h2=plot(100*X(1,end),100*X(2,end),'ro','MarkerSize',14);\n", "__tracker.annotate(\"h2=plot(100*X(1,end),100*X(2,end),'ro','MarkerSize',14)\")\n", - "_matlab(\"h2=plot(100*X(1,end),100*X(2,end),'ro','MarkerSize',14);\")\n", - "# MATLAB L1679: legend([h1 h2],'Start','Finish','Location','NorthEast');\n", - "_matlab(\"legend([h1 h2],'Start','Finish','Location','NorthEast');\")\n", - "# MATLAB L1680: title('Estimated vs. Actual Reach Path','FontWeight','bold',...\n", - "_matlab(\"title('Estimated vs. Actual Reach Path','FontWeight','bold',...\")\n", - "# MATLAB L1681: 'Fontsize',12,'FontName','Arial');\n", - "_matlab(\"'Fontsize',12,'FontName','Arial');\")\n", - "# MATLAB L1682: \n", - "#\n", - "# MATLAB L1683: \n", - "#\n", - "# MATLAB L1684: % Mean X-Positon\n", + "#\n", + "#\n", "# Mean X-Positon\n", - "# MATLAB L1685: subplot(4,3,8);\n", "__tracker.annotate('subplot(4,3,8)')\n", - "_matlab('subplot(4,3,8);')\n", - "# MATLAB L1686: h1=plot(time,100*X(1,:),'k','LineWidth',3); hold on;\n", "__tracker.annotate(\"h1=plot(time,100*X(1,:),'k','LineWidth',3)\")\n", - "_matlab(\"h1=plot(time,100*X(1,:),'k','LineWidth',3); hold on;\")\n", - "# MATLAB L1687: h2=plot(time,mXestAll(1,:),'b','LineWidth',3); hold on;\n", "__tracker.annotate(\"h2=plot(time,mXestAll(1,:),'b','LineWidth',3)\")\n", - "_matlab(\"h2=plot(time,mXestAll(1,:),'b','LineWidth',3); hold on;\")\n", - "# MATLAB L1688: h3=plot(time,mXestNTAll(1,:),'g','LineWidth',3); hold on;\n", "__tracker.annotate(\"h3=plot(time,mXestNTAll(1,:),'g','LineWidth',3)\")\n", - "_matlab(\"h3=plot(time,mXestNTAll(1,:),'g','LineWidth',3); hold on;\")\n", - "# MATLAB L1689: hy=ylabel('x(t) [cm]'); hx=xlabel('time [s]');\n", - "_matlab(\"hy=ylabel('x(t) [cm]'); hx=xlabel('time [s]');\")\n", - "# MATLAB L1690: set(gca,'xtick',[],'xtickLabel',[]);\n", - "_matlab(\"set(gca,'xtick',[],'xtickLabel',[]);\")\n", - "# MATLAB L1691: set([hx, hy],'FontName', 'Arial','FontSize',10,'FontWeight','bold');\n", - "_matlab(\"set([hx, hy],'FontName', 'Arial','FontSize',10,'FontWeight','bold');\")\n", - "# MATLAB L1692: title('X Position','FontWeight','bold','Fontsize',12,'FontName','Arial');\n", - "_matlab(\"title('X Position','FontWeight','bold','Fontsize',12,'FontName','Arial');\")\n", - "# MATLAB L1693: \n", - "#\n", - "# MATLAB L1694: % Mean Y-Position\n", + "#\n", "# Mean Y-Position\n", - "# MATLAB L1695: subplot(4,3,9);\n", "__tracker.annotate('subplot(4,3,9)')\n", - "_matlab('subplot(4,3,9);')\n", - "# MATLAB L1696: h1=plot(time,100*X(2,:),'k','LineWidth',3); hold on;\n", "__tracker.annotate(\"h1=plot(time,100*X(2,:),'k','LineWidth',3)\")\n", - "_matlab(\"h1=plot(time,100*X(2,:),'k','LineWidth',3); hold on;\")\n", - "# MATLAB L1697: h2=plot(time,mXestAll(2,:),'b','LineWidth',3); hold on;\n", "__tracker.annotate(\"h2=plot(time,mXestAll(2,:),'b','LineWidth',3)\")\n", - "_matlab(\"h2=plot(time,mXestAll(2,:),'b','LineWidth',3); hold on;\")\n", - "# MATLAB L1698: h3=plot(time,mXestNTAll(2,:),'g','LineWidth',3); hold on;\n", "__tracker.annotate(\"h3=plot(time,mXestNTAll(2,:),'g','LineWidth',3)\")\n", - "_matlab(\"h3=plot(time,mXestNTAll(2,:),'g','LineWidth',3); hold on;\")\n", - "# MATLAB L1699: h_legend=legend([h1(1) h2(1) h3(1)],'Actual','PPAF+Goal',...\n", - "_matlab(\"h_legend=legend([h1(1) h2(1) h3(1)],'Actual','PPAF+Goal',...\")\n", - "# MATLAB L1700: 'PPAF','Location','SouthEast');\n", - "_matlab(\"'PPAF','Location','SouthEast');\")\n", - "# MATLAB L1701: hy=ylabel('y(t) [cm]'); hx=xlabel('time [s]');\n", - "_matlab(\"hy=ylabel('y(t) [cm]'); hx=xlabel('time [s]');\")\n", - "# MATLAB L1702: set(gca,'xtick',[],'xtickLabel',[]);\n", - "_matlab(\"set(gca,'xtick',[],'xtickLabel',[]);\")\n", - "# MATLAB L1703: set([hx, hy],'FontName', 'Arial','FontSize',10,'FontWeight','bold');\n", - "_matlab(\"set([hx, hy],'FontName', 'Arial','FontSize',10,'FontWeight','bold');\")\n", - "# MATLAB L1704: title('Y Position','FontWeight','bold','Fontsize',12,'FontName','Arial');\n", - "_matlab(\"title('Y Position','FontWeight','bold','Fontsize',12,'FontName','Arial');\")\n", - "# MATLAB L1705: set(h_legend,'FontSize',10)\n", - "_matlab(\"set(h_legend,'FontSize',10)\")\n", - "# MATLAB L1706: pos = get(h_legend,'position');\n", - "_matlab(\"pos = get(h_legend,'position');\")\n", - "# MATLAB L1707: set(h_legend, 'position',[pos(1)-.40 pos(2)+.51 pos(3:4)]);\n", - "_matlab(\"set(h_legend, 'position',[pos(1)-.40 pos(2)+.51 pos(3:4)]);\")\n", - "# MATLAB L1708: \n", - "#\n", - "# MATLAB L1709: % Mean X-Velocity\n", + "#\n", "# Mean X-Velocity\n", - "# MATLAB L1710: subplot(4,3,11);\n", "__tracker.annotate('subplot(4,3,11)')\n", - "_matlab('subplot(4,3,11);')\n", - "# MATLAB L1711: h1=plot(time,100*X(3,:),'k','LineWidth',3); hold on;\n", "__tracker.annotate(\"h1=plot(time,100*X(3,:),'k','LineWidth',3)\")\n", - "_matlab(\"h1=plot(time,100*X(3,:),'k','LineWidth',3); hold on;\")\n", - "# MATLAB L1712: h2=plot(time,mXestAll(3,:),'b','LineWidth',3); hold on;\n", "__tracker.annotate(\"h2=plot(time,mXestAll(3,:),'b','LineWidth',3)\")\n", - "_matlab(\"h2=plot(time,mXestAll(3,:),'b','LineWidth',3); hold on;\")\n", - "# MATLAB L1713: h3=plot(time,mXestNTAll(3,:),'g','LineWidth',3); hold on;\n", "__tracker.annotate(\"h3=plot(time,mXestNTAll(3,:),'g','LineWidth',3)\")\n", - "_matlab(\"h3=plot(time,mXestNTAll(3,:),'g','LineWidth',3); hold on;\")\n", - "# MATLAB L1714: hy=ylabel('v_{x}(t) [cm/s]'); hx=xlabel('time [s]');\n", - "_matlab(\"hy=ylabel('v_{x}(t) [cm/s]'); hx=xlabel('time [s]');\")\n", - "# MATLAB L1715: set([hx, hy],'FontName', 'Arial','FontSize',10,'FontWeight','bold');\n", - "_matlab(\"set([hx, hy],'FontName', 'Arial','FontSize',10,'FontWeight','bold');\")\n", - "# MATLAB L1716: title('X Velocity','FontWeight','bold','Fontsize',12,'FontName','Arial');\n", - "_matlab(\"title('X Velocity','FontWeight','bold','Fontsize',12,'FontName','Arial');\")\n", - "# MATLAB L1717: \n", - "#\n", - "# MATLAB L1718: % Mean Y-Velocity\n", + "#\n", "# Mean Y-Velocity\n", - "# MATLAB L1719: subplot(4,3,12);\n", "__tracker.annotate('subplot(4,3,12)')\n", - "_matlab('subplot(4,3,12);')\n", - "# MATLAB L1720: h1=plot(time,100*X(4,:),'k','LineWidth',3); hold on;\n", "__tracker.annotate(\"h1=plot(time,100*X(4,:),'k','LineWidth',3)\")\n", - "_matlab(\"h1=plot(time,100*X(4,:),'k','LineWidth',3); hold on;\")\n", - "# MATLAB L1721: h2=plot(time,mXestAll(4,:),'b','LineWidth',3); hold on;\n", "__tracker.annotate(\"h2=plot(time,mXestAll(4,:),'b','LineWidth',3)\")\n", - "_matlab(\"h2=plot(time,mXestAll(4,:),'b','LineWidth',3); hold on;\")\n", - "# MATLAB L1722: h3=plot(time,mXestNTAll(4,:),'g','LineWidth',3); hold on;\n", "__tracker.annotate(\"h3=plot(time,mXestNTAll(4,:),'g','LineWidth',3)\")\n", - "_matlab(\"h3=plot(time,mXestNTAll(4,:),'g','LineWidth',3); hold on;\")\n", - "# MATLAB L1723: hy=ylabel('v_{y}(t) [cm/s]'); hx=xlabel('time [s]');\n", - "_matlab(\"hy=ylabel('v_{y}(t) [cm/s]'); hx=xlabel('time [s]');\")\n", - "# MATLAB L1724: set([hx, hy],'FontName', 'Arial','FontSize',10,'FontWeight','bold');\n", - "_matlab(\"set([hx, hy],'FontName', 'Arial','FontSize',10,'FontWeight','bold');\")\n", - "# MATLAB L1725: title('Y Velocity','FontWeight','bold','Fontsize',12,'FontName','Arial');\n", - "_matlab(\"title('Y Velocity','FontWeight','bold','Fontsize',12,'FontName','Arial');\")\n", - "__tracker.finalize()\n" + "__tracker.finalize()" ] } ], @@ -939,9 +275,7 @@ "nstat": { "expected_figures": 2, "run_group": "full", - "source_file": "/private/tmp/upstream-nstat-matlab/helpfiles/HybridFilterExample.mlx", - "source_type": "mlx", - "strict_section_cell_mapping": true, + "style": "python-example", "topic": "HybridFilterExample" } }, diff --git a/notebooks/NetworkTutorial.ipynb b/notebooks/NetworkTutorial.ipynb index c84c6180..eb8deb8d 100644 --- a/notebooks/NetworkTutorial.ipynb +++ b/notebooks/NetworkTutorial.ipynb @@ -7,7 +7,7 @@ "metadata": {}, "outputs": [], "source": [ - "# AUTO-GENERATED FROM MATLAB NetworkTutorial.mlx -- DO NOT EDIT\n", + "# nSTAT-python notebook example: NetworkTutorial\n", "from pathlib import Path\n", "import sys\n", "\n", @@ -32,12 +32,7 @@ "OUTPUT_ROOT = REPO_ROOT / \"output\" / \"notebook_images\"\n", "__tracker = FigureTracker(topic='NetworkTutorial', output_root=OUTPUT_ROOT, expected_count=4)\n", "\n", - "def _matlab(line: str) -> None:\n", - " \"\"\"Placeholder for untranslated MATLAB syntax.\"\"\"\n", - " _ = line\n", - " return\n", - "\n", - "def _load_matlab_globals(name: str) -> dict[str, object]:\n", + "def _load_example_globals(name: str) -> dict[str, object]:\n", " candidates = [\n", " Path(name),\n", " DATA_DIR / name,\n", @@ -52,10 +47,8 @@ " return {}\n", "\n", "# SECTION 0: Section 0\n", - "# MATLAB L100: % Author: Iahn Cajigas\n", "# Author: Iahn Cajigas\n", - "# MATLAB L101: % Date: 2/10/2014\n", - "# Date: 2/10/2014\n" + "# Date: 2/10/2014" ] }, { @@ -66,16 +59,11 @@ "outputs": [], "source": [ "# SECTION 1: Point Process Network Simulation\n", - "# MATLAB L400: % In order to understand how the point process GLM framework can be used to estimate the network connectivity within a population of neurons, we simulate a network of 2 neurons.\n", "# In order to understand how the point process GLM framework can be used to estimate the network connectivity within a population of neurons, we simulate a network of 2 neurons.\n", - "# MATLAB L700: % This block diagram specifies a conditional intensity function of the form\n", "# This block diagram specifies a conditional intensity function of the form\n", - "# MATLAB L800: % lambda_{i} \\cdot \\Delta = logistic(\\mu_{i} + H*\\Delta N_{i}[n] +\n", - "# MATLAB L800: S*u_{stim}[n] + E*\\Delta N_{k}[n]\n", "# lambda_{i} \\cdot \\Delta = logistic(\\mu_{i} + H*\\Delta N_{i}[n] +\n", "# S*u_{stim}[n] + E*\\Delta N_{k}[n]\n", - "# MATLAB L900: % where, \\hbox{\\fontsize{14}{16}\\selectfont\\(logistic(x)=e^{x}/{1+e^{x}}\\)}. Note that * is the convolution opertator.\n", - "# where, \\hbox{\\fontsize{14}{16}\\selectfont\\(logistic(x)=e^{x}/{1+e^{x}}\\)}. Note that * is the convolution opertator.\n" + "# where, \\hbox{\\fontsize{14}{16}\\selectfont\\(logistic(x)=e^{x}/{1+e^{x}}\\)}. Note that * is the convolution opertator." ] }, { @@ -86,18 +74,10 @@ "outputs": [], "source": [ "# SECTION 2: 2 Neuron Network\n", - "# MATLAB L1100: clear all;\n", "pass\n", - "# MATLAB L1101: close all;\n", "plt.close(\"all\")\n", - "# MATLAB L1102: Ts=.001; %Sample Time\n", "Ts = .001\n", - "# MATLAB L1103: tMin=0; tMax=50; %Simulation duration\n", - "_matlab('tMin=0; tMax=50; %Simulation duration')\n", - "# MATLAB L1104: t=tMin:Ts:tMax;\n", - "_matlab('t=tMin:Ts:tMax;')\n", - "# MATLAB L1105: numNeurons=2;\n", - "numNeurons = 2\n" + "numNeurons = 2" ] }, { @@ -107,11 +87,7 @@ "metadata": {}, "outputs": [], "source": [ - "# SECTION 3: Baseline firing rate of the neurons being modeled\n", - "# MATLAB L1400: mu{1}=-3;\n", - "_matlab('mu{1}=-3;')\n", - "# MATLAB L1401: mu{2}=-3;\n", - "_matlab('mu{2}=-3;')\n" + "# SECTION 3: Baseline firing rate of the neurons being modeled" ] }, { @@ -122,16 +98,9 @@ "outputs": [], "source": [ "# SECTION 4: History Effect\n", - "# MATLAB L1700: % Captures how the firing of a neuron at modulates its probability of firing. Captures effects such as the refractory period and bursting. We use the same firing history for both neurons in this example. Note that the firing activity at time n leads to strong inhibition at time n+1 (refractory period) and that this effect becomes smaller over the next two time periods.\n", "# Captures how the firing of a neuron at modulates its probability of firing. Captures effects such as the refractory period and bursting. We use the same firing history for both neurons in this example. Note that the firing activity at time n leads to strong inhibition at time n+1 (refractory period) and that this effect becomes smaller over the next two time periods.\n", - "# MATLAB L1800: % 1*h[n]=-4*\\Delta N[n-1]-2*\\Delta N[n-2] -1*\\Delta N[n-3]\n", "# 1*h[n]=-4*\\Delta N[n-1]-2*\\Delta N[n-2] -1*\\Delta N[n-3]\n", - "# MATLAB L1900: % Note that the one sample delay in same cell firing is included in the simulink model.\n", - "# Note that the one sample delay in same cell firing is included in the simulink model.\n", - "# MATLAB L2000: H{1}=tf([-4 -2 -1],[1],Ts,'Variable','z^-1');\n", - "_matlab(\"H{1}=tf([-4 -2 -1],[1],Ts,'Variable','z^-1');\")\n", - "# MATLAB L2001: H{2}=tf([-4 -2 -1],[1],Ts,'Variable','z^-1');\n", - "_matlab(\"H{2}=tf([-4 -2 -1],[1],Ts,'Variable','z^-1');\")\n" + "# Note that the one sample delay in same cell firing is included in the simulink model." ] }, { @@ -142,18 +111,10 @@ "outputs": [], "source": [ "# SECTION 5: Stimulus Effect\n", - "# MATLAB L2300: % 1*s_{1}[n]=1*u_{stim}[n]\n", "# 1*s_{1}[n]=1*u_{stim}[n]\n", - "# MATLAB L2400: % 1*s_{2}[n]=-1*u_{stim}[n]\n", "# 1*s_{2}[n]=-1*u_{stim}[n]\n", - "# MATLAB L2500: % Neuron 1 is positively modulated by the stimulus\n", "# Neuron 1 is positively modulated by the stimulus\n", - "# MATLAB L2600: S{1}=tf([1],1,Ts,'Variable','z^-1');\n", - "_matlab(\"S{1}=tf([1],1,Ts,'Variable','z^-1');\")\n", - "# MATLAB L2601: % Neuron 1 is negatively modulated by the stimulus\n", - "# Neuron 1 is negatively modulated by the stimulus\n", - "# MATLAB L2602: S{2}=tf([-1],1,Ts,'Variable','z^-1');\n", - "_matlab(\"S{2}=tf([-1],1,Ts,'Variable','z^-1');\")\n" + "# Neuron 1 is negatively modulated by the stimulus" ] }, { @@ -164,22 +125,12 @@ "outputs": [], "source": [ "# SECTION 6: Ensemble Effect\n", - "# MATLAB L2900: % Captures the effect of how neighboring neuron firing modulates the firing of a given neuron.\n", "# Captures the effect of how neighboring neuron firing modulates the firing of a given neuron.\n", - "# MATLAB L3000: % 1*e_{1}[n]=1*\\Delta N_{2}[n-1]\n", "# 1*e_{1}[n]=1*\\Delta N_{2}[n-1]\n", - "# MATLAB L3100: % 1*e_{2}[n]=-4*\\Delta N_{1}[n-1]\n", "# 1*e_{2}[n]=-4*\\Delta N_{1}[n-1]\n", - "# MATLAB L3200: % Note that the one sample delay in firing of the neighbor cell is included in the simulink model.\n", "# Note that the one sample delay in firing of the neighbor cell is included in the simulink model.\n", - "# MATLAB L3300: %Neuron 2 firing positively modulates Neuron 1\n", "# Neuron 2 firing positively modulates Neuron 1\n", - "# MATLAB L3301: E{1}=tf([1],1,Ts,'Variable','z^-1');\n", - "_matlab(\"E{1}=tf([1],1,Ts,'Variable','z^-1');\")\n", - "# MATLAB L3302: %Neuron 1 firing has strong inhibitory effect on neuron 2.\n", - "# Neuron 1 firing has strong inhibitory effect on neuron 2.\n", - "# MATLAB L3303: E{2}=tf([-4],1,Ts,'Variable','z^-1');\n", - "_matlab(\"E{2}=tf([-4],1,Ts,'Variable','z^-1');\")\n" + "# Neuron 1 firing has strong inhibitory effect on neuron 2." ] }, { @@ -190,38 +141,11 @@ "outputs": [], "source": [ "# SECTION 7: Stimulus\n", - "# MATLAB L3600: % We use a simple sine wave here but we may want to explore other types of inputs to see if they affect the recovery of the network parameters.\n", "# We use a simple sine wave here but we may want to explore other types of inputs to see if they affect the recovery of the network parameters.\n", - "# MATLAB L3700: f=1; %Stimulus frequency [Hz]\n", "f = 1\n", - "# MATLAB L3701: u = sin(2*pi*f*t)'; %Make this neuron modulated by a sine wave\n", - "_matlab(\"u = sin(2*pi*f*t)'; %Make this neuron modulated by a sine wave\")\n", - "# MATLAB L3702: stim=Covariate(t',u,'Stimulus','time','s','Voltage',{'sin'});\n", - "_matlab(\"stim=Covariate(t',u,'Stimulus','time','s','Voltage',{'sin'});\")\n", - "# MATLAB L3703: \n", "#\n", - "# MATLAB L3704: \n", "#\n", - "# MATLAB L3705: % Map the variables to the Simulink model\n", - "# Map the variables to the Simulink model\n", - "# MATLAB L3706: assignin('base','S1',S{1});\n", - "_matlab(\"assignin('base','S1',S{1});\")\n", - "# MATLAB L3707: assignin('base','H1',H{1});\n", - "_matlab(\"assignin('base','H1',H{1});\")\n", - "# MATLAB L3708: assignin('base','E1',E{1});\n", - "_matlab(\"assignin('base','E1',E{1});\")\n", - "# MATLAB L3709: assignin('base','mu1',mu{1});\n", - "_matlab(\"assignin('base','mu1',mu{1});\")\n", - "# MATLAB L3710: assignin('base','S2',S{2});\n", - "_matlab(\"assignin('base','S2',S{2});\")\n", - "# MATLAB L3711: assignin('base','H2',H{2});\n", - "_matlab(\"assignin('base','H2',H{2});\")\n", - "# MATLAB L3712: assignin('base','E2',E{2});\n", - "_matlab(\"assignin('base','E2',E{2});\")\n", - "# MATLAB L3713: assignin('base','mu2',mu{2});\n", - "_matlab(\"assignin('base','mu2',mu{2});\")\n", - "# MATLAB L3714: options = simget;\n", - "_matlab('options = simget;')\n" + "# Map the variables to the Simulink model" ] }, { @@ -232,63 +156,20 @@ "outputs": [], "source": [ "# SECTION 8: Simulate the Network\n", - "# MATLAB L4000: % Uses a binomial model for the conditional intensity function nSTAT supports poisson model too but this simulink model simulates the firing using a binomial model\n", "# Uses a binomial model for the conditional intensity function nSTAT supports poisson model too but this simulink model simulates the firing using a binomial model\n", - "# MATLAB L4100: fitType = 'binomial';\n", - "_matlab(\"fitType = 'binomial';\")\n", - "# MATLAB L4101: if(strcmp(fitType,'binomial'))\n", - "_matlab(\"if(strcmp(fitType,'binomial'))\")\n", - "# MATLAB L4102: Algorithm = 'BNLRCG';\n", - "_matlab(\"Algorithm = 'BNLRCG';\")\n", - "# MATLAB L4103: else\n", - "_matlab('else')\n", - "# MATLAB L4104: Algorithm ='GLM';\n", - "_matlab(\"Algorithm ='GLM';\")\n", - "# MATLAB L4105: end\n", - "_matlab('end')\n", - "# MATLAB L4106: [tout,~,yout] = sim('SimulatedNetwork2',[stim.minTime stim.maxTime], ...\n", - "_matlab(\"[tout,~,yout] = sim('SimulatedNetwork2',[stim.minTime stim.maxTime], ...\")\n", - "# MATLAB L4107: options,stim.dataToStructure);\n", - "_matlab('options,stim.dataToStructure);')\n", - "# MATLAB L4108: clear nst;\n", "pass\n", - "# MATLAB L4109: \n", "#\n", - "# MATLAB L4110: for i=1:numNeurons\n", - "_matlab('for i=1:numNeurons')\n", - "# MATLAB L4111: spikeTimes = tout(yout(:,i)>.5); %find the spike times\n", - "_matlab('spikeTimes = tout(yout(:,i)>.5); %find the spike times')\n", - "# MATLAB L4112: nst{i} = nspikeTrain(spikeTimes);\n", - "_matlab('nst{i} = nspikeTrain(spikeTimes);')\n", - "# MATLAB L4113: end\n", - "_matlab('end')\n", - "# MATLAB L4114: \n", "#\n", - "# MATLAB L4115: \n", "#\n", - "# MATLAB L4116: sC=nstColl(nst);\n", - "_matlab('sC=nstColl(nst);')\n", - "# MATLAB L4117: sC.setMinTime(stim.minTime);\n", - "_matlab('sC.setMinTime(stim.minTime);')\n", - "# MATLAB L4118: sC.setMaxTime(stim.maxTime);\n", - "_matlab('sC.setMaxTime(stim.maxTime);')\n", - "# MATLAB L4119: \n", "#\n", - "# MATLAB L4120: \n", "#\n", - "# MATLAB L4121: \n", "#\n", - "# MATLAB L4122: figure;\n", "__tracker.new_figure('figure')\n", "__tracker.new_figure('figure;')\n", - "# MATLAB L4123: subplot(2,1,1); sC.plot; v=axis; axis([0 tMax/10 v(3) v(4)]);\n", "__tracker.annotate('subplot(2,1,1)')\n", "__tracker.annotate('sC.plot')\n", - "_matlab('subplot(2,1,1); sC.plot; v=axis; axis([0 tMax/10 v(3) v(4)]);')\n", - "# MATLAB L4124: subplot(2,1,2); stim.plot; v=axis; axis([0 tMax/10 v(3) v(4)]);\n", "__tracker.annotate('subplot(2,1,2)')\n", - "__tracker.annotate('stim.plot')\n", - "_matlab('subplot(2,1,2); stim.plot; v=axis; axis([0 tMax/10 v(3) v(4)]);')\n" + "__tracker.annotate('stim.plot')" ] }, { @@ -299,24 +180,11 @@ "outputs": [], "source": [ "# SECTION 9: GLM Model Fitting Setup\n", - "# MATLAB L4400: % In this section, we create the appropriate structures to fit several GLM models to the data generated above.\n", "# In this section, we create the appropriate structures to fit several GLM models to the data generated above.\n", - "# MATLAB L4500: % Create a constant covariate representing the mean firing rate $$\\mu_{i}$\n", "# Create a constant covariate representing the mean firing rate $$\\mu_{i}$\n", - "# MATLAB L4501: baseline=Covariate(t',ones(length(t),1),'Baseline','time','s','',{'mu'});\n", - "_matlab(\"baseline=Covariate(t',ones(length(t),1),'Baseline','time','s','',{'mu'});\")\n", - "# MATLAB L4502: \n", "#\n", - "# MATLAB L4503: spikeColl = sC; %Use the generated data as our collection of spikes\n", - "_matlab('spikeColl = sC; %Use the generated data as our collection of spikes')\n", - "# MATLAB L4504: %Use stimulation and baseline as possible covariates\n", "# Use stimulation and baseline as possible covariates\n", - "# MATLAB L4505: cc=CovColl({stim,baseline});\n", - "_matlab('cc=CovColl({stim,baseline});')\n", - "# MATLAB L4506: trial = Trial(spikeColl,cc); sampleRate = 1/Ts; %Create trial\n", - "_matlab('trial = Trial(spikeColl,cc); sampleRate = 1/Ts; %Create trial')\n", - "# MATLAB L4507: % trial.setTrialPartition([0 tMax/2 tMax]);\n", - "# trial.setTrialPartition([0 tMax/2 tMax]);\n" + "# trial.setTrialPartition([0 tMax/2 tMax]);" ] }, { @@ -327,147 +195,43 @@ "outputs": [], "source": [ "# SECTION 10: GLM Model Fitting and Results\n", - "# MATLAB L4800: clear c;\n", "pass\n", - "# MATLAB L4801: % We know the history effect goes back 3 lag orders\n", "# We know the history effect goes back 3 lag orders\n", - "# MATLAB L4802: selfHist = [0:1:3]*Ts;\n", - "_matlab('selfHist = [0:1:3]*Ts;')\n", - "# MATLAB L4803: % only have an effect at the 1ms lag. This captures the effect of the\n", "# only have an effect at the 1ms lag. This captures the effect of the\n", - "# MATLAB L4804: % firing of neuron 1 on neuron 2 and vice versa.\n", "# firing of neuron 1 on neuron 2 and vice versa.\n", - "# MATLAB L4805: ensHist = [0 1]*Ts;\n", - "_matlab('ensHist = [0 1]*Ts;')\n", - "# MATLAB L4806: \n", "#\n", - "# MATLAB L4807: \n", "#\n", - "# MATLAB L4808: \n", "#\n", - "# MATLAB L4809: sampleRate = 1/Ts;\n", - "_matlab('sampleRate = 1/Ts;')\n", - "# MATLAB L4810: %Lets compare three models of increasing complexity for each neuron\n", "# Lets compare three models of increasing complexity for each neuron\n", - "# MATLAB L4811: \n", "#\n", - "# MATLAB L4812: % When results are shown, ]ambda_1 corresponds to the CIF obtained from the\n", "# When results are shown, ]ambda_1 corresponds to the CIF obtained from the\n", - "# MATLAB L4813: % c{1}, lambda_2 to c{2} etc.\n", "# c{1}, lambda_2 to c{2} etc.\n", - "# MATLAB L4814: % Fit only a mean firing rate\n", "# Fit only a mean firing rate\n", - "# MATLAB L4815: c{1} = TrialConfig({{'Baseline','mu'}},sampleRate,[],[]);\n", - "_matlab(\"c{1} = TrialConfig({{'Baseline','mu'}},sampleRate,[],[]);\")\n", - "# MATLAB L4816: c{1}.setName('Baseline');\n", - "_matlab(\"c{1}.setName('Baseline');\")\n", - "# MATLAB L4817: \n", "#\n", - "# MATLAB L4818: % Fit a constant rate and ensemble model\n", "# Fit a constant rate and ensemble model\n", - "# MATLAB L4819: c{2} = TrialConfig({{'Baseline','mu'}},sampleRate,[],ensHist);\n", - "_matlab(\"c{2} = TrialConfig({{'Baseline','mu'}},sampleRate,[],ensHist);\")\n", - "# MATLAB L4820: c{2}.setName('Baseline+EnsHist');\n", - "_matlab(\"c{2}.setName('Baseline+EnsHist');\")\n", - "# MATLAB L4821: \n", "#\n", - "# MATLAB L4822: % Fit the correct/exact model\n", "# Fit the correct/exact model\n", - "# MATLAB L4823: c{3} = TrialConfig({{'Baseline','mu'},{'Stimulus','sin'}},sampleRate,...\n", - "_matlab(\"c{3} = TrialConfig({{'Baseline','mu'},{'Stimulus','sin'}},sampleRate,...\")\n", - "# MATLAB L4824: selfHist,ensHist);\n", - "_matlab('selfHist,ensHist);')\n", - "# MATLAB L4825: c{3}.setName('Stim+Hist+EnsHist');\n", "__tracker.annotate(\"c{3}.setName('Stim+Hist+EnsHist')\")\n", - "_matlab(\"c{3}.setName('Stim+Hist+EnsHist');\")\n", - "# MATLAB L4826: \n", "#\n", - "# MATLAB L4827: % Place all configurations together and run analysis for each neuron\n", "# Place all configurations together and run analysis for each neuron\n", - "# MATLAB L4828: \n", "#\n", - "# MATLAB L4829: cfgColl= ConfigColl(c);\n", - "_matlab('cfgColl= ConfigColl(c);')\n", - "# MATLAB L4830: results = Analysis.RunAnalysisForAllNeurons(trial,cfgColl,0,Algorithm);\n", - "_matlab('results = Analysis.RunAnalysisForAllNeurons(trial,cfgColl,0,Algorithm);')\n", - "# MATLAB L4831: \n", "#\n", - "# MATLAB L4832: % Visualize the Results\n", "# Visualize the Results\n", - "# MATLAB L4833: results{1}.plotResults;\n", - "_matlab('results{1}.plotResults;')\n", - "# MATLAB L4834: results{2}.plotResults;\n", - "_matlab('results{2}.plotResults;')\n", - "# MATLAB L4835: Summary = FitResSummary(results);\n", - "_matlab('Summary = FitResSummary(results);')\n", - "# MATLAB L4836: % Summary.plotSummary;\n", "# Summary.plotSummary;\n", - "# MATLAB L4837: \n", "#\n", - "# MATLAB L4838: % Construct an image of the Actual vs. Estimated Network\n", "# Construct an image of the Actual vs. Estimated Network\n", - "# MATLAB L4839: actNetwork = zeros(numNeurons,numNeurons);\n", - "_matlab('actNetwork = zeros(numNeurons,numNeurons);')\n", - "# MATLAB L4840: network1ms = zeros(numNeurons,numNeurons);\n", - "_matlab('network1ms = zeros(numNeurons,numNeurons);')\n", - "# MATLAB L4841: for i=1:numNeurons\n", - "_matlab('for i=1:numNeurons')\n", - "# MATLAB L4842: index = 1:numNeurons;\n", - "_matlab('index = 1:numNeurons;')\n", - "# MATLAB L4843: neighbors = setdiff(index,i);\n", - "_matlab('neighbors = setdiff(index,i);')\n", - "# MATLAB L4844: [num,den] = tfdata(E{i});\n", - "_matlab('[num,den] = tfdata(E{i});')\n", - "# MATLAB L4845: actNetwork(i,neighbors) = cell2mat(num);\n", - "_matlab('actNetwork(i,neighbors) = cell2mat(num);')\n", - "# MATLAB L4846: % Coefficients in the 2rd Analysis correspond to the estimated\n", "# Coefficients in the 2rd Analysis correspond to the estimated\n", - "# MATLAB L4847: % connection weights.\n", "# connection weights.\n", - "# MATLAB L4848: % See labels after running command: [coeffs,labels]=results{i}.getCoeffs;\n", "# See labels after running command: [coeffs,labels]=results{i}.getCoeffs;\n", - "# MATLAB L4849: [coeffs,labels]=results{i}.getCoeffs;\n", - "_matlab('[coeffs,labels]=results{i}.getCoeffs;')\n", - "# MATLAB L4850: network1ms(i,neighbors)=coeffs(1:(length(neighbors)),3);\n", - "_matlab('network1ms(i,neighbors)=coeffs(1:(length(neighbors)),3);')\n", - "# MATLAB L4851: end\n", - "_matlab('end')\n", - "# MATLAB L4852: \n", "#\n", - "# MATLAB L4853: maxVal=max(max(abs(actNetwork)));\n", - "_matlab('maxVal=max(max(abs(actNetwork)));')\n", - "# MATLAB L4854: minVal=-maxVal;%min(min(actNetwork));\n", - "_matlab('minVal=-maxVal;%min(min(actNetwork));')\n", - "# MATLAB L4855: CLIM = [minVal maxVal];\n", - "_matlab('CLIM = [minVal maxVal];')\n", - "# MATLAB L4856: figure;\n", "__tracker.new_figure('figure')\n", "__tracker.new_figure('figure;')\n", - "# MATLAB L4857: colormap(jet);\n", - "_matlab('colormap(jet);')\n", - "# MATLAB L4858: subplot(1,2,1);\n", "__tracker.annotate('subplot(1,2,1)')\n", - "_matlab('subplot(1,2,1);')\n", - "# MATLAB L4859: imagesc(actNetwork,CLIM);\n", "__tracker.annotate('imagesc(actNetwork,CLIM)')\n", - "_matlab('imagesc(actNetwork,CLIM);')\n", - "# MATLAB L4860: set(gca,'XTick',index,'YTick',index);\n", - "_matlab(\"set(gca,'XTick',index,'YTick',index);\")\n", - "# MATLAB L4861: title('Actual');\n", - "_matlab(\"title('Actual');\")\n", - "# MATLAB L4862: subplot(1,2,2);\n", "__tracker.annotate('subplot(1,2,2)')\n", - "_matlab('subplot(1,2,2);')\n", - "# MATLAB L4863: imagesc(network1ms,CLIM);\n", "__tracker.annotate('imagesc(network1ms,CLIM)')\n", - "_matlab('imagesc(network1ms,CLIM);')\n", - "# MATLAB L4864: set(gca,'XTick',index,'YTick',index);\n", - "_matlab(\"set(gca,'XTick',index,'YTick',index);\")\n", - "# MATLAB L4865: title('Estimated 1ms');\n", - "_matlab(\"title('Estimated 1ms');\")\n", - "# MATLAB L5000: % Note: by default all neurons are considered to be potential neighbors. If this is not the case, you can call trial.setNeighbors(neighborArray) where neighborArray is a matrix that in the ith row has ones in the columns of those neurons considered to be potential neighbors and zeros otherwise. By default neighborArray has 0 only on the diagonal, so that the ith neuron cannot be its own neighbor, and 1 ones elsewhere.\n", "# Note: by default all neurons are considered to be potential neighbors. If this is not the case, you can call trial.setNeighbors(neighborArray) where neighborArray is a matrix that in the ith row has ones in the columns of those neurons considered to be potential neighbors and zeros otherwise. By default neighborArray has 0 only on the diagonal, so that the ith neuron cannot be its own neighbor, and 1 ones elsewhere.\n", - "__tracker.finalize()\n" + "__tracker.finalize()" ] } ], @@ -478,9 +242,7 @@ "nstat": { "expected_figures": 4, "run_group": "full", - "source_file": "/private/tmp/upstream-nstat-matlab/helpfiles/NetworkTutorial.mlx", - "source_type": "mlx", - "strict_section_cell_mapping": true, + "style": "python-example", "topic": "NetworkTutorial" } }, diff --git a/notebooks/PPSimExample.ipynb b/notebooks/PPSimExample.ipynb index 91bd0db3..8173e71b 100644 --- a/notebooks/PPSimExample.ipynb +++ b/notebooks/PPSimExample.ipynb @@ -7,7 +7,7 @@ "metadata": {}, "outputs": [], "source": [ - "# AUTO-GENERATED FROM MATLAB PPSimExample.mlx -- DO NOT EDIT\n", + "# nSTAT-python notebook example: PPSimExample\n", "from pathlib import Path\n", "import sys\n", "\n", @@ -32,12 +32,7 @@ "OUTPUT_ROOT = REPO_ROOT / \"output\" / \"notebook_images\"\n", "__tracker = FigureTracker(topic='PPSimExample', output_root=OUTPUT_ROOT, expected_count=3)\n", "\n", - "def _matlab(line: str) -> None:\n", - " \"\"\"Placeholder for untranslated MATLAB syntax.\"\"\"\n", - " _ = line\n", - " return\n", - "\n", - "def _load_matlab_globals(name: str) -> dict[str, object]:\n", + "def _load_example_globals(name: str) -> dict[str, object]:\n", " candidates = [\n", " Path(name),\n", " DATA_DIR / name,\n", @@ -52,10 +47,8 @@ " return {}\n", "\n", "# SECTION 0: Section 0\n", - "# MATLAB L100: % General Point Process Simulation\n", "# General Point Process Simulation\n", - "# MATLAB L200: % In this demo, we show how sample-paths of a point process (PP) can be generated from specification of its conditional intensity function (CIF). We then use the generated PP data to validate the outputs of the Neural Spike Analysis Toolbox.\n", - "# In this demo, we show how sample-paths of a point process (PP) can be generated from specification of its conditional intensity function (CIF). We then use the generated PP data to validate the outputs of the Neural Spike Analysis Toolbox.\n" + "# In this demo, we show how sample-paths of a point process (PP) can be generated from specification of its conditional intensity function (CIF). We then use the generated PP data to validate the outputs of the Neural Spike Analysis Toolbox." ] }, { @@ -66,24 +59,13 @@ "outputs": [], "source": [ "# SECTION 1: Point Process Sample Path Generation\n", - "# MATLAB L400: % That both the stimulus effect and ensemble effects can be made into multi-input/multi-output transfer functions to account for more than 1 stimulus effect or multiple neighboring neuron effects. To do this, simply define E$ orS$ to be a row vector of LTI transfer functions. Make sure than the number of dimensions of the input matches the number of transfer functions specified in the row vector.\n", "# That both the stimulus effect and ensemble effects can be made into multi-input/multi-output transfer functions to account for more than 1 stimulus effect or multiple neighboring neuron effects. To do this, simply define E$ orS$ to be a row vector of LTI transfer functions. Make sure than the number of dimensions of the input matches the number of transfer functions specified in the row vector.\n", - "# MATLAB L600: % This block diagram specifies a conditional intensity function of the form\n", "# This block diagram specifies a conditional intensity function of the form\n", - "# MATLAB L700: % \\lambda_{i} \\cdot \\Delta = exp(\\mu_{i} + H*\\Delta N_{i}[n] + S*u_{stim}[n] + E*\\Delta N_{k}[n])/(1+exp(\\mu_{i} + H*\\Delta N_{i}[n] + S*u_{stim}[n] + E*\\Delta N_{k}[n]))\n", "# \\lambda_{i} \\cdot \\Delta = exp(\\mu_{i} + H*\\Delta N_{i}[n] + S*u_{stim}[n] + E*\\Delta N_{k}[n])/(1+exp(\\mu_{i} + H*\\Delta N_{i}[n] + S*u_{stim}[n] + E*\\Delta N_{k}[n]))\n", - "# MATLAB L800: close all;\n", "plt.close(\"all\")\n", - "# MATLAB L801: Ts=.001; %Sample Time\n", "Ts = .001\n", - "# MATLAB L802: tMin=0; tMax=50; %Simulation duration\n", - "_matlab('tMin=0; tMax=50; %Simulation duration')\n", - "# MATLAB L803: t=tMin:Ts:tMax;\n", - "_matlab('t=tMin:Ts:tMax;')\n", - "# MATLAB L804: \n", "#\n", - "# MATLAB L805: mu=-3; %Baseline firing rate of the neurons being modeled\n", - "mu = -3\n" + "mu = -3" ] }, { @@ -94,10 +76,7 @@ "outputs": [], "source": [ "# SECTION 2: History Effect\n", - "# MATLAB L1100: % 1*h[n]=-1*\\Delta N[n-1]-2*\\Delta N[n-2] -4*\\Delta N[n-3]\n", - "# 1*h[n]=-1*\\Delta N[n-1]-2*\\Delta N[n-2] -4*\\Delta N[n-3]\n", - "# MATLAB L1200: H=tf([-1 -2 -4],[1],Ts,'Variable','z^-1');\n", - "_matlab(\"H=tf([-1 -2 -4],[1],Ts,'Variable','z^-1');\")\n" + "# 1*h[n]=-1*\\Delta N[n-1]-2*\\Delta N[n-2] -4*\\Delta N[n-3]" ] }, { @@ -108,10 +87,7 @@ "outputs": [], "source": [ "# SECTION 3: Stimulus Effect\n", - "# MATLAB L1500: % 1*s[n]=1*u_{stim}[n]\n", - "# 1*s[n]=1*u_{stim}[n]\n", - "# MATLAB L1600: S=tf([1],1,Ts,'Variable','z^-1');\n", - "_matlab(\"S=tf([1],1,Ts,'Variable','z^-1');\")\n" + "# 1*s[n]=1*u_{stim}[n]" ] }, { @@ -122,39 +98,16 @@ "outputs": [], "source": [ "# SECTION 4: Ensemble Effect\n", - "# MATLAB L1900: % 1*e[n]=0*\\Delta N_{k}[n]\n", "# 1*e[n]=0*\\Delta N_{k}[n]\n", - "# MATLAB L2000: E=tf([0],1,Ts,'Variable','z^-1');\n", - "_matlab(\"E=tf([0],1,Ts,'Variable','z^-1');\")\n", - "# MATLAB L2200: f=1; %Stimulus frequency\n", "f = 1\n", - "# MATLAB L2201: u = sin(2*pi*f*t)'; %Make this neuron modulated by a sine wave\n", - "_matlab(\"u = sin(2*pi*f*t)'; %Make this neuron modulated by a sine wave\")\n", - "# MATLAB L2202: e = zeros(length(t),1); %No Ensemble input\n", - "_matlab('e = zeros(length(t),1); %No Ensemble input')\n", - "# MATLAB L2203: \n", "#\n", - "# MATLAB L2204: stim=Covariate(t',u,'Stimulus','time','s','Voltage',{'sin'});\n", - "_matlab(\"stim=Covariate(t',u,'Stimulus','time','s','Voltage',{'sin'});\")\n", - "# MATLAB L2205: ens =Covariate(t',e,'Ensemble','time','s','Spikes',{'n1'});\n", - "_matlab(\"ens =Covariate(t',e,'Ensemble','time','s','Spikes',{'n1'});\")\n", - "# MATLAB L2206: numRealizations = 5; %Number of sample paths to generate\n", "numRealizations = 5\n", - "# MATLAB L2207: fitType = 'binomial';\n", - "_matlab(\"fitType = 'binomial';\")\n", - "# MATLAB L2208: sC=CIF.simulateCIF(mu,H,S,E,stim,ens,numRealizations,fitType);\n", - "_matlab('sC=CIF.simulateCIF(mu,H,S,E,stim,ens,numRealizations,fitType);')\n", - "# MATLAB L2209: figure;\n", "__tracker.new_figure('figure')\n", "__tracker.new_figure('figure;')\n", - "# MATLAB L2210: subplot(2,1,1); sC.plot; v=axis; axis([0 tMax/10 v(3) v(4)]);\n", "__tracker.annotate('subplot(2,1,1)')\n", "__tracker.annotate('sC.plot')\n", - "_matlab('subplot(2,1,1); sC.plot; v=axis; axis([0 tMax/10 v(3) v(4)]);')\n", - "# MATLAB L2211: subplot(2,1,2); stim.plot; v=axis; axis([0 tMax/10 v(3) v(4)]);\n", "__tracker.annotate('subplot(2,1,2)')\n", - "__tracker.annotate('stim.plot')\n", - "_matlab('subplot(2,1,2); stim.plot; v=axis; axis([0 tMax/10 v(3) v(4)]);')\n" + "__tracker.annotate('stim.plot')" ] }, { @@ -165,22 +118,10 @@ "outputs": [], "source": [ "# SECTION 5: GLM Model Fitting Setup\n", - "# MATLAB L2500: % In this section, we create the appropriate structures to fit several GLM models to the data generated above.\n", "# In this section, we create the appropriate structures to fit several GLM models to the data generated above.\n", - "# MATLAB L2600: % Create a constant covariate representing the mean firing rate $$\\mu_{i}$\n", "# Create a constant covariate representing the mean firing rate $$\\mu_{i}$\n", - "# MATLAB L2601: baseline=Covariate(t',ones(length(t),1),'Baseline','time','s','',{'mu'});\n", - "_matlab(\"baseline=Covariate(t',ones(length(t),1),'Baseline','time','s','',{'mu'});\")\n", - "# MATLAB L2602: \n", - "#\n", - "# MATLAB L2603: \n", "#\n", - "# MATLAB L2604: spikeColl = sC; %Use the generated data as our collection of spikes\n", - "_matlab('spikeColl = sC; %Use the generated data as our collection of spikes')\n", - "# MATLAB L2605: cc=CovColl({stim,baseline}); %Use stimulation and baseline as possible covariates\n", - "_matlab('cc=CovColl({stim,baseline}); %Use stimulation and baseline as possible covariates')\n", - "# MATLAB L2606: trial = Trial(spikeColl,cc); sampleRate = 1/Ts; %Create trial\n", - "_matlab('trial = Trial(spikeColl,cc); sampleRate = 1/Ts; %Create trial')\n" + "#" ] }, { @@ -191,51 +132,15 @@ "outputs": [], "source": [ "# SECTION 6: GLM Model Fitting and Results\n", - "# MATLAB L2900: clear c;\n", "pass\n", - "# MATLAB L2901: selfHist = [0:0.001:0.003]; %We know the history effect goes back 3 lag orders\n", - "_matlab('selfHist = [0:0.001:0.003]; %We know the history effect goes back 3 lag orders')\n", - "# MATLAB L3100: % Fit only a mean firing rate\n", "# Fit only a mean firing rate\n", - "# MATLAB L3200: c{1} = TrialConfig({{'Baseline','mu'}},sampleRate,[],[]);\n", - "_matlab(\"c{1} = TrialConfig({{'Baseline','mu'}},sampleRate,[],[]);\")\n", - "# MATLAB L3201: c{1}.setName('Baseline');\n", - "_matlab(\"c{1}.setName('Baseline');\")\n", - "# MATLAB L3400: % Fit a mean firing rate + the stimulus term\n", "# Fit a mean firing rate + the stimulus term\n", - "# MATLAB L3500: c{2} = TrialConfig({{'Baseline','mu'},{'Stimulus','sin'}},sampleRate,[],[]);\n", - "_matlab(\"c{2} = TrialConfig({{'Baseline','mu'},{'Stimulus','sin'}},sampleRate,[],[]);\")\n", - "# MATLAB L3501: c{2}.setName('Stim');\n", - "_matlab(\"c{2}.setName('Stim');\")\n", - "# MATLAB L3700: % Fit a mean firing rate, self-history, and stimulus --- Same as true model\n", "# Fit a mean firing rate, self-history, and stimulus --- Same as true model\n", - "# MATLAB L3800: c{3} = TrialConfig({{'Baseline','mu'},{'Stimulus','sin'}},sampleRate,selfHist,[]);\n", - "_matlab(\"c{3} = TrialConfig({{'Baseline','mu'},{'Stimulus','sin'}},sampleRate,selfHist,[]);\")\n", - "# MATLAB L3801: c{3}.setName('Stim+Hist');\n", "__tracker.annotate(\"c{3}.setName('Stim+Hist')\")\n", - "_matlab(\"c{3}.setName('Stim+Hist');\")\n", - "# MATLAB L4000: % Place all configurations together and run analysis for each neuron\n", "# Place all configurations together and run analysis for each neuron\n", - "# MATLAB L4100: cfgColl= ConfigColl(c);\n", - "_matlab('cfgColl= ConfigColl(c);')\n", - "# MATLAB L4101: if(strcmp(fitType,'binomial'))\n", - "_matlab(\"if(strcmp(fitType,'binomial'))\")\n", - "# MATLAB L4102: Algorithm = 'BNLRCG'; % BNLRCG - faster Truncated, L-2 Regularized,\n", - "_matlab(\"Algorithm = 'BNLRCG'; % BNLRCG - faster Truncated, L-2 Regularized,\")\n", - "# MATLAB L4103: % Binomial Logistic Regression with Conjugate\n", "# Binomial Logistic Regression with Conjugate\n", - "# MATLAB L4104: % Gradient Solver by Demba Ba (demba@mit.edu).\n", "# Gradient Solver by Demba Ba (demba@mit.edu).\n", - "# MATLAB L4105: else\n", - "_matlab('else')\n", - "# MATLAB L4106: Algorithm = 'GLM'; % Standard Matlab GLM (Can be used for binomial or\n", - "_matlab(\"Algorithm = 'GLM'; % Standard Matlab GLM (Can be used for binomial or\")\n", - "# MATLAB L4107: % or Poisson CIFs\n", - "# or Poisson CIFs\n", - "# MATLAB L4108: end\n", - "_matlab('end')\n", - "# MATLAB L4109: results = Analysis.RunAnalysisForAllNeurons(trial,cfgColl,0,Algorithm);\n", - "_matlab('results = Analysis.RunAnalysisForAllNeurons(trial,cfgColl,0,Algorithm);')\n" + "# or Poisson CIFs" ] }, { @@ -245,9 +150,7 @@ "metadata": {}, "outputs": [], "source": [ - "# SECTION 7: Results for sample neuron\n", - "# MATLAB L4400: results{1}.plotResults;\n", - "_matlab('results{1}.plotResults;')\n" + "# SECTION 7: Results for sample neuron" ] }, { @@ -258,12 +161,8 @@ "outputs": [], "source": [ "# SECTION 8: Results for across all sample paths\n", - "# MATLAB L4700: Summary = FitResSummary(results);\n", - "_matlab('Summary = FitResSummary(results);')\n", - "# MATLAB L4701: Summary.plotSummary;\n", "__tracker.annotate('Summary.plotSummary')\n", - "_matlab('Summary.plotSummary;')\n", - "__tracker.finalize()\n" + "__tracker.finalize()" ] } ], @@ -274,9 +173,7 @@ "nstat": { "expected_figures": 3, "run_group": "smoke", - "source_file": "/private/tmp/upstream-nstat-matlab/helpfiles/PPSimExample.mlx", - "source_type": "mlx", - "strict_section_cell_mapping": true, + "style": "python-example", "topic": "PPSimExample" } }, diff --git a/notebooks/PPThinning.ipynb b/notebooks/PPThinning.ipynb index fe7c0428..1b6f4d21 100644 --- a/notebooks/PPThinning.ipynb +++ b/notebooks/PPThinning.ipynb @@ -7,7 +7,7 @@ "metadata": {}, "outputs": [], "source": [ - "# AUTO-GENERATED FROM MATLAB PPThinning.mlx -- DO NOT EDIT\n", + "# nSTAT-python notebook example: PPThinning\n", "from pathlib import Path\n", "import sys\n", "\n", @@ -32,12 +32,7 @@ "OUTPUT_ROOT = REPO_ROOT / \"output\" / \"notebook_images\"\n", "__tracker = FigureTracker(topic='PPThinning', output_root=OUTPUT_ROOT, expected_count=3)\n", "\n", - "def _matlab(line: str) -> None:\n", - " \"\"\"Placeholder for untranslated MATLAB syntax.\"\"\"\n", - " _ = line\n", - " return\n", - "\n", - "def _load_matlab_globals(name: str) -> dict[str, object]:\n", + "def _load_example_globals(name: str) -> dict[str, object]:\n", " candidates = [\n", " Path(name),\n", " DATA_DIR / name,\n", @@ -52,10 +47,8 @@ " return {}\n", "\n", "# SECTION 0: Section 0\n", - "# MATLAB L100: % Simulate PP via thinning\n", "# Simulate PP via thinning\n", - "# MATLAB L200: % Given a conditional intensity function, we generate a point process consistent with this CIF.\n", - "# Given a conditional intensity function, we generate a point process consistent with this CIF.\n" + "# Given a conditional intensity function, we generate a point process consistent with this CIF." ] }, { @@ -66,58 +59,20 @@ "outputs": [], "source": [ "# SECTION 1: Basic Example\n", - "# MATLAB L400: close all;\n", "plt.close(\"all\")\n", - "# MATLAB L401: delta = 0.001;\n", "delta = 0.001\n", - "# MATLAB L402: Tmax = 100;\n", "Tmax = 100\n", - "# MATLAB L403: time = 0:delta:Tmax;\n", - "_matlab('time = 0:delta:Tmax;')\n", - "# MATLAB L404: f=.1;\n", "f = .1\n", - "# MATLAB L405: lambdaData = 10*sin(2*pi*f*time)+10; %lambda >=0\n", - "_matlab('lambdaData = 10*sin(2*pi*f*time)+10; %lambda >=0')\n", - "# MATLAB L406: lambda = Covariate(time,lambdaData, '\\Lambda(t)','time','s','Hz',{'\\lambda_{1}'},{{' ''b'', ''LineWidth'' ,2'}});\n", - "_matlab(\"lambda = Covariate(time,lambdaData, '\\\\Lambda(t)','time','s','Hz',{'\\\\lambda_{1}'},{{' ''b'', ''LineWidth'' ,2'}});\")\n", - "# MATLAB L407: \n", "#\n", - "# MATLAB L408: lambdaBound = max(lambda);\n", - "_matlab('lambdaBound = max(lambda);')\n", - "# MATLAB L409: N=lambdaBound*(1.5*Tmax); %Expected number of arrivals in interval 1.5*Tmax\n", - "_matlab('N=lambdaBound*(1.5*Tmax); %Expected number of arrivals in interval 1.5*Tmax')\n", - "# MATLAB L410: u = rand(1,N); %N samples uniform(0,1)\n", - "_matlab('u = rand(1,N); %N samples uniform(0,1)')\n", - "# MATLAB L411: w = -log(u)./(lambdaBound); %N samples exponential rate lambdaBound (ISIs)\n", - "_matlab('w = -log(u)./(lambdaBound); %N samples exponential rate lambdaBound (ISIs)')\n", - "# MATLAB L412: \n", "#\n", - "# MATLAB L413: tSpikes = cumsum(w); %Spiketimes;\n", - "_matlab('tSpikes = cumsum(w); %Spiketimes;')\n", - "# MATLAB L414: tSpikes = tSpikes(tSpikes<=Tmax);%Spiketimes within Tmax\n", - "_matlab('tSpikes = tSpikes(tSpikes<=Tmax);%Spiketimes within Tmax')\n", - "# MATLAB L415: \n", "#\n", - "# MATLAB L416: % Thinning\n", "# Thinning\n", - "# MATLAB L417: \n", "#\n", - "# MATLAB L418: lambdaRatio = lambda.getValueAt(tSpikes)./lambdaBound;\n", - "_matlab('lambdaRatio = lambda.getValueAt(tSpikes)./lambdaBound;')\n", - "# MATLAB L419: % lambdaRatio <=1\n", "# lambdaRatio <=1\n", - "# MATLAB L420: \n", "#\n", - "# MATLAB L421: % draw uniform random number in 0,1\n", "# draw uniform random number in 0,1\n", - "# MATLAB L422: u2 = rand(length(lambdaRatio),1);\n", - "_matlab('u2 = rand(length(lambdaRatio),1);')\n", - "# MATLAB L423: \n", "#\n", - "# MATLAB L424: % keep spike if lambda ratio is greater than random number\n", - "# keep spike if lambda ratio is greater than random number\n", - "# MATLAB L425: tSpikesThin = tSpikes(lambdaRatio>=u2);\n", - "_matlab('tSpikesThin = tSpikes(lambdaRatio>=u2);')\n" + "# keep spike if lambda ratio is greater than random number" ] }, { @@ -128,50 +83,19 @@ "outputs": [], "source": [ "# SECTION 2: Compare Constant rate process vs. thinned process\n", - "# MATLAB L700: figure(1);\n", "__tracker.new_figure('figure(1)')\n", - "_matlab('figure(1);')\n", - "# MATLAB L701: n1 = nspikeTrain(tSpikes);\n", - "_matlab('n1 = nspikeTrain(tSpikes);')\n", - "# MATLAB L702: n2 = nspikeTrain(tSpikesThin);\n", - "_matlab('n2 = nspikeTrain(tSpikesThin);')\n", - "# MATLAB L703: subplot(2,2,1); n1.plot; plot(tSpikes,ones(size(tSpikes)),'.');\n", "__tracker.annotate('subplot(2,2,1)')\n", "__tracker.annotate('n1.plot')\n", "__tracker.annotate(\"plot(tSpikes,ones(size(tSpikes)),'.')\")\n", - "_matlab(\"subplot(2,2,1); n1.plot; plot(tSpikes,ones(size(tSpikes)),'.');\")\n", - "# MATLAB L704: v=axis; axis([0 Tmax/4 v(3) v(4)]);\n", - "_matlab('v=axis; axis([0 Tmax/4 v(3) v(4)]);')\n", - "# MATLAB L705: subplot(2,2,2); n1.plotISIHistogram;\n", "__tracker.annotate('subplot(2,2,2)')\n", - "_matlab('subplot(2,2,2); n1.plotISIHistogram;')\n", - "# MATLAB L706: subplot(2,2,3); n2.plot; plot(tSpikes,ones(size(tSpikes)),'.');\n", "__tracker.annotate('subplot(2,2,3)')\n", "__tracker.annotate('n2.plot')\n", "__tracker.annotate(\"plot(tSpikes,ones(size(tSpikes)),'.')\")\n", - "_matlab(\"subplot(2,2,3); n2.plot; plot(tSpikes,ones(size(tSpikes)),'.');\")\n", - "# MATLAB L707: v=axis; axis([0 Tmax/4 v(3) v(4)]);\n", - "_matlab('v=axis; axis([0 Tmax/4 v(3) v(4)]);')\n", - "# MATLAB L708: subplot(2,2,4); n2.plotISIHistogram;\n", "__tracker.annotate('subplot(2,2,4)')\n", - "_matlab('subplot(2,2,4); n2.plotISIHistogram;')\n", - "# MATLAB L709: \n", "#\n", - "# MATLAB L710: figure(2);\n", "__tracker.new_figure('figure(2)')\n", - "_matlab('figure(2);')\n", - "# MATLAB L711: n2.plot;\n", "__tracker.annotate('n2.plot')\n", - "_matlab('n2.plot;')\n", - "# MATLAB L712: scaledProb = lambda*(1./lambdaBound);\n", - "_matlab('scaledProb = lambda*(1./lambdaBound);')\n", - "# MATLAB L713: scaledProb.plot;\n", - "__tracker.annotate('scaledProb.plot')\n", - "_matlab('scaledProb.plot;')\n", - "# MATLAB L714: v=axis;\n", - "_matlab('v=axis;')\n", - "# MATLAB L715: axis([0 Tmax/4 v(3) v(4)]);\n", - "_matlab('axis([0 Tmax/4 v(3) v(4)]);')\n" + "__tracker.annotate('scaledProb.plot')" ] }, { @@ -182,34 +106,14 @@ "outputs": [], "source": [ "# SECTION 3: Simulate multiple realizations of a point process via thinning\n", - "# MATLAB L1000: % The CIF class can generated realizations of a point process given a conditional intensity function (defined as a Covariate or SignalObj)\n", "# The CIF class can generated realizations of a point process given a conditional intensity function (defined as a Covariate or SignalObj)\n", - "# MATLAB L1100: numRealizations = 20;\n", "numRealizations = 20\n", - "# MATLAB L1101: spikeColl = CIF.simulateCIFByThinningFromLambda(lambda,numRealizations);\n", - "_matlab('spikeColl = CIF.simulateCIFByThinningFromLambda(lambda,numRealizations);')\n", - "# MATLAB L1102: figure(3);\n", "__tracker.new_figure('figure(3)')\n", - "_matlab('figure(3);')\n", - "# MATLAB L1103: spikeColl.plot;\n", "__tracker.annotate('spikeColl.plot')\n", - "_matlab('spikeColl.plot;')\n", - "# MATLAB L1104: lambda.plot;\n", "__tracker.annotate('lambda.plot')\n", - "_matlab('lambda.plot;')\n", - "# MATLAB L1105: v=axis;\n", - "_matlab('v=axis;')\n", - "# MATLAB L1106: axis([0 Tmax/4 v(3) v(4)]);\n", - "_matlab('axis([0 Tmax/4 v(3) v(4)]);')\n", - "# MATLAB L1107: \n", "#\n", - "# MATLAB L1108: % Parity contract scalars for MATLAB/Python verification.\n", "# Parity contract scalars for MATLAB/Python verification.\n", - "# MATLAB L1109: parity = struct();\n", - "_matlab('parity = struct();')\n", - "# MATLAB L1110: parity.num_realizations = numRealizations;\n", - "_matlab('parity.num_realizations = numRealizations;')\n", - "__tracker.finalize()\n" + "__tracker.finalize()" ] } ], @@ -220,9 +124,7 @@ "nstat": { "expected_figures": 3, "run_group": "full", - "source_file": "/private/tmp/upstream-nstat-matlab/helpfiles/PPThinning.mlx", - "source_type": "mlx", - "strict_section_cell_mapping": true, + "style": "python-example", "topic": "PPThinning" } }, diff --git a/notebooks/PSTHEstimation.ipynb b/notebooks/PSTHEstimation.ipynb index c33922da..9aafe1b8 100644 --- a/notebooks/PSTHEstimation.ipynb +++ b/notebooks/PSTHEstimation.ipynb @@ -7,7 +7,7 @@ "metadata": {}, "outputs": [], "source": [ - "# AUTO-GENERATED FROM MATLAB PSTHEstimation.mlx -- DO NOT EDIT\n", + "# nSTAT-python notebook example: PSTHEstimation\n", "from pathlib import Path\n", "import sys\n", "\n", @@ -32,12 +32,7 @@ "OUTPUT_ROOT = REPO_ROOT / \"output\" / \"notebook_images\"\n", "__tracker = FigureTracker(topic='PSTHEstimation', output_root=OUTPUT_ROOT, expected_count=2)\n", "\n", - "def _matlab(line: str) -> None:\n", - " \"\"\"Placeholder for untranslated MATLAB syntax.\"\"\"\n", - " _ = line\n", - " return\n", - "\n", - "def _load_matlab_globals(name: str) -> dict[str, object]:\n", + "def _load_example_globals(name: str) -> dict[str, object]:\n", " candidates = [\n", " Path(name),\n", " DATA_DIR / name,\n", @@ -52,10 +47,8 @@ " return {}\n", "\n", "# SECTION 0: Section 0\n", - "# MATLAB L100: % PSTH Estimation\n", "# PSTH Estimation\n", - "# MATLAB L200: % We illustrate two ways to estimate a peristimulus time histogram using the nSTAT toolbox. One technique is the standard binning in time, averaging across trials, and dividing by the binwidth to estimate the spike rate and the other is based on the method presented in \"Analysis of Between-Trial and Within-Trial Neural Spiking Dynamics\" by Czanner et al in J Neurophysiology 2008.\n", - "# We illustrate two ways to estimate a peristimulus time histogram using the nSTAT toolbox. One technique is the standard binning in time, averaging across trials, and dividing by the binwidth to estimate the spike rate and the other is based on the method presented in \"Analysis of Between-Trial and Within-Trial Neural Spiking Dynamics\" by Czanner et al in J Neurophysiology 2008.\n" + "# We illustrate two ways to estimate a peristimulus time histogram using the nSTAT toolbox. One technique is the standard binning in time, averaging across trials, and dividing by the binwidth to estimate the spike rate and the other is based on the method presented in \"Analysis of Between-Trial and Within-Trial Neural Spiking Dynamics\" by Czanner et al in J Neurophysiology 2008." ] }, { @@ -66,32 +59,14 @@ "outputs": [], "source": [ "# SECTION 1: Generate a known Conditional Intensity Function\n", - "# MATLAB L400: % We generated a known conditional intensity function (rate function) and generate distinct realizations of point processes consistent with this rate function. We use the method of thinning to simulate a point process.\n", "# We generated a known conditional intensity function (rate function) and generate distinct realizations of point processes consistent with this rate function. We use the method of thinning to simulate a point process.\n", - "# MATLAB L500: close all;\n", "plt.close(\"all\")\n", - "# MATLAB L501: delta = 0.001;\n", "delta = 0.001\n", - "# MATLAB L502: Tmax = 10;\n", "Tmax = 10\n", - "# MATLAB L503: time = 0:delta:Tmax;\n", - "_matlab('time = 0:delta:Tmax;')\n", - "# MATLAB L504: f=.2;\n", "f = .2\n", - "# MATLAB L505: lambdaData = 10*sin(2*pi*f*time)+10; %lambda >=0\n", - "_matlab('lambdaData = 10*sin(2*pi*f*time)+10; %lambda >=0')\n", - "# MATLAB L506: lambda = Covariate(time,lambdaData, '\\Lambda(t)','time','s','Hz',{'\\lambda_{1}'},{{' ''b'', ''LineWidth'' ,2'}});\n", - "_matlab(\"lambda = Covariate(time,lambdaData, '\\\\Lambda(t)','time','s','Hz',{'\\\\lambda_{1}'},{{' ''b'', ''LineWidth'' ,2'}});\")\n", - "# MATLAB L507: numRealizations = 20; % Use 20 realization so that lamba and raster plot are the same size\n", "numRealizations = 20\n", - "# MATLAB L508: spikeColl = CIF.simulateCIFByThinningFromLambda(lambda,numRealizations);\n", - "_matlab('spikeColl = CIF.simulateCIFByThinningFromLambda(lambda,numRealizations);')\n", - "# MATLAB L509: spikeColl.plot; set(gca,'ytickLabel',[]);\n", "__tracker.new_figure('spikeColl.plot')\n", - "_matlab(\"spikeColl.plot; set(gca,'ytickLabel',[]);\")\n", - "# MATLAB L510: lambda.plot;\n", - "__tracker.annotate('lambda.plot')\n", - "_matlab('lambda.plot;')\n" + "__tracker.annotate('lambda.plot')" ] }, { @@ -102,63 +77,22 @@ "outputs": [], "source": [ "# SECTION 2: Estimate the PSTH with 500ms windows\n", - "# MATLAB L800: figure;\n", "__tracker.new_figure('figure')\n", "__tracker.new_figure('figure;')\n", - "# MATLAB L801: binsize = .5; %500ms window\n", "binsize = .5\n", - "# MATLAB L802: psth = spikeColl.psth(binsize);\n", - "_matlab('psth = spikeColl.psth(binsize);')\n", - "# MATLAB L803: psthGLM = spikeColl.psthGLM(binsize);\n", - "_matlab('psthGLM = spikeColl.psthGLM(binsize);')\n", - "# MATLAB L804: trueRate = lambda; %rate*delta = expected number of arrivals per bin\n", - "_matlab('trueRate = lambda; %rate*delta = expected number of arrivals per bin')\n", - "# MATLAB L805: h1=trueRate.plot;\n", "__tracker.annotate('h1=trueRate.plot')\n", - "_matlab('h1=trueRate.plot;')\n", - "# MATLAB L806: h3=psthGLM.plot([],{{' ''k'',''Linewidth'',4'}});\n", "__tracker.annotate(\"h3=psthGLM.plot([],{{' ''k'',''Linewidth'',4'}})\")\n", - "_matlab(\"h3=psthGLM.plot([],{{' ''k'',''Linewidth'',4'}});\")\n", - "# MATLAB L807: h2=psth.plot([],{{' ''rx'',''Linewidth'',4'}});\n", "__tracker.annotate(\"h2=psth.plot([],{{' ''rx'',''Linewidth'',4'}})\")\n", - "_matlab(\"h2=psth.plot([],{{' ''rx'',''Linewidth'',4'}});\")\n", - "# MATLAB L808: legend off;\n", - "_matlab('legend off;')\n", - "# MATLAB L809: legend([h1(1) h2(1) h3(1)],'true','PSTH','PSTH_{glm}');\n", - "_matlab(\"legend([h1(1) h2(1) h3(1)],'true','PSTH','PSTH_{glm}');\")\n", - "# MATLAB L810: \n", "#\n", - "# MATLAB L811: % Scalar summaries for automated parity checks.\n", "# Scalar summaries for automated parity checks.\n", - "# MATLAB L812: psth_mean_hz = mean(psth.data);\n", - "_matlab('psth_mean_hz = mean(psth.data);')\n", - "# MATLAB L813: psth_glm_mean_hz = mean(psthGLM.data);\n", - "_matlab('psth_glm_mean_hz = mean(psthGLM.data);')\n", - "# MATLAB L814: lambda_mean_hz = mean(lambda.data);\n", - "_matlab('lambda_mean_hz = mean(lambda.data);')\n", - "# MATLAB L815: parity = struct();\n", - "_matlab('parity = struct();')\n", - "# MATLAB L816: parity.psth_mean_hz = psth_mean_hz;\n", - "_matlab('parity.psth_mean_hz = psth_mean_hz;')\n", - "# MATLAB L817: parity.psth_glm_mean_hz = psth_glm_mean_hz;\n", - "_matlab('parity.psth_glm_mean_hz = psth_glm_mean_hz;')\n", - "# MATLAB L818: parity.lambda_mean_hz = lambda_mean_hz;\n", - "_matlab('parity.lambda_mean_hz = lambda_mean_hz;')\n", - "# MATLAB L819: \n", "#\n", - "# MATLAB L820: % Because currently the psthGLM estimated the psth coefficients in each bin\n", "# Because currently the psthGLM estimated the psth coefficients in each bin\n", - "# MATLAB L821: % for each realization, we want the show the mean and standard error of the\n", "# for each realization, we want the show the mean and standard error of the\n", - "# MATLAB L822: % cofficient in each bin. We make the upper and lower confidence bounds\n", "# cofficient in each bin. We make the upper and lower confidence bounds\n", - "# MATLAB L823: % equal to 1/sqrt(numRealization)=1/sqrt(psth.dimension) to view the\n", "# equal to 1/sqrt(numRealization)=1/sqrt(psth.dimension) to view the\n", - "# MATLAB L824: % standard error instead of the standard deviation\n", "# standard error instead of the standard deviation\n", - "# MATLAB L1000: % Note the mean of the PSTH estimated via the GLM model and the PSTH computed via standard methods agree precisely. The benefit of the GLM estimated PSTH is the presence of confidence bounds on the estimate. Both the standard and GLM PSTH are in close agreement with the \"true\" underlying rate function (conditional intensity function) used in this simulated example. Both the PSTH and PSTHGLM code could be updated in the future to allow for variable bin sizes (e.g. in the vein of Baysian Adaptive Regression Splines by Wallstrom, Leibner and Kass). Alternatively, porting of BARS to Matlab may allow for it to be easily integrated into the nSTAT toolbox.\n", "# Note the mean of the PSTH estimated via the GLM model and the PSTH computed via standard methods agree precisely. The benefit of the GLM estimated PSTH is the presence of confidence bounds on the estimate. Both the standard and GLM PSTH are in close agreement with the \"true\" underlying rate function (conditional intensity function) used in this simulated example. Both the PSTH and PSTHGLM code could be updated in the future to allow for variable bin sizes (e.g. in the vein of Baysian Adaptive Regression Splines by Wallstrom, Leibner and Kass). Alternatively, porting of BARS to Matlab may allow for it to be easily integrated into the nSTAT toolbox.\n", - "__tracker.finalize()\n" + "__tracker.finalize()" ] } ], @@ -169,9 +103,7 @@ "nstat": { "expected_figures": 2, "run_group": "full", - "source_file": "/private/tmp/upstream-nstat-matlab/helpfiles/PSTHEstimation.mlx", - "source_type": "mlx", - "strict_section_cell_mapping": true, + "style": "python-example", "topic": "PSTHEstimation" } }, diff --git a/notebooks/SignalObjExamples.ipynb b/notebooks/SignalObjExamples.ipynb index 77e32d17..684f6b29 100644 --- a/notebooks/SignalObjExamples.ipynb +++ b/notebooks/SignalObjExamples.ipynb @@ -7,7 +7,7 @@ "metadata": {}, "outputs": [], "source": [ - "# AUTO-GENERATED FROM MATLAB SignalObjExamples.mlx -- DO NOT EDIT\n", + "# nSTAT-python notebook example: SignalObjExamples\n", "from pathlib import Path\n", "import sys\n", "\n", @@ -32,12 +32,7 @@ "OUTPUT_ROOT = REPO_ROOT / \"output\" / \"notebook_images\"\n", "__tracker = FigureTracker(topic='SignalObjExamples', output_root=OUTPUT_ROOT, expected_count=16)\n", "\n", - "def _matlab(line: str) -> None:\n", - " \"\"\"Placeholder for untranslated MATLAB syntax.\"\"\"\n", - " _ = line\n", - " return\n", - "\n", - "def _load_matlab_globals(name: str) -> dict[str, object]:\n", + "def _load_example_globals(name: str) -> dict[str, object]:\n", " candidates = [\n", " Path(name),\n", " DATA_DIR / name,\n", @@ -52,10 +47,8 @@ " return {}\n", "\n", "# SECTION 0: Section 0\n", - "# MATLAB L100: % Using the SignalObj Class\n", "# Using the SignalObj Class\n", - "# MATLAB L200: % In this file we will give several examples of how the SignalObj can be used. A description of all of the properties of SignalObj can be found at: SignalObj Class Definition\n", - "# In this file we will give several examples of how the SignalObj can be used. A description of all of the properties of SignalObj can be found at: SignalObj Class Definition\n" + "# In this file we will give several examples of how the SignalObj can be used. A description of all of the properties of SignalObj can be found at: SignalObj Class Definition" ] }, { @@ -66,52 +59,22 @@ "outputs": [], "source": [ "# SECTION 1: Example 1: Defining and Plotting Signals\n", - "# MATLAB L400: % Define a two dimensional SignalObj, s, representing two voltage signals that were v1 and v2 aquired simultaneously at 100Hz. Another SignalObj, s1 , is created from just v1. Both signals are plotted.\n", "# Define a two dimensional SignalObj, s, representing two voltage signals that were v1 and v2 aquired simultaneously at 100Hz. Another SignalObj, s1 , is created from just v1. Both signals are plotted.\n", - "# MATLAB L500: close all;\n", "plt.close(\"all\")\n", - "# MATLAB L501: sampleRate=100; t=0:1/sampleRate:10; freq=2;\n", - "_matlab('sampleRate=100; t=0:1/sampleRate:10; freq=2;')\n", - "# MATLAB L502: v1=sin(2*pi*freq*t); v2=sin(v1.^2); v=[v1;v2];\n", - "_matlab('v1=sin(2*pi*freq*t); v2=sin(v1.^2); v=[v1;v2];')\n", - "# MATLAB L503: s=SignalObj(t,v,'Voltage','time','s','V',{'v1','v2'});\n", - "_matlab(\"s=SignalObj(t,v,'Voltage','time','s','V',{'v1','v2'});\")\n", - "# MATLAB L504: s1=SignalObj(t,v1,'Voltage','time','s','V',{'v1'});\n", - "_matlab(\"s1=SignalObj(t,v1,'Voltage','time','s','V',{'v1'});\")\n", - "# MATLAB L505: subplot(2,1,1); s.plot;\n", "__tracker.new_figure('subplot(2,1,1)')\n", "__tracker.annotate('s.plot')\n", - "_matlab('subplot(2,1,1); s.plot;')\n", - "# MATLAB L506: subplot(2,1,2); s1.plot;\n", "__tracker.annotate('subplot(2,1,2)')\n", "__tracker.annotate('s1.plot')\n", - "_matlab('subplot(2,1,2); s1.plot;')\n", - "# MATLAB L700: % Note how the legend show the appropriate labels. If the dataLabels had not been set, the legend would not appear.\n", "# Note how the legend show the appropriate labels. If the dataLabels had not been set, the legend would not appear.\n", - "# MATLAB L800: % Instead of defining a new SignalObj, s1, the v2 data in s can be masked away and then the plot will only show the data of interest. It is important to note that setMask is used to set which signals should remain visible. Also note that when a data is masked, converting the SignalObj to a Matrix only returns the visible data. A new SignalObj can be created from the orignal SignalObj which only contains the data of interest. Lastly, the all labeled components can be accessed independently via the vars subfield.\n", "# Instead of defining a new SignalObj, s1, the v2 data in s can be masked away and then the plot will only show the data of interest. It is important to note that setMask is used to set which signals should remain visible. Also note that when a data is masked, converting the SignalObj to a Matrix only returns the visible data. A new SignalObj can be created from the orignal SignalObj which only contains the data of interest. Lastly, the all labeled components can be accessed independently via the vars subfield.\n", - "# MATLAB L900: subplot(2,1,1); s.setMask({'v1'}); s.plot; s.resetMask;\n", "__tracker.annotate('subplot(2,1,1)')\n", "__tracker.annotate('s.plot')\n", - "_matlab(\"subplot(2,1,1); s.setMask({'v1'}); s.plot; s.resetMask;\")\n", - "# MATLAB L901: subplot(2,1,2); s.setMask({'v2'}); s.plot; size(s.dataToMatrix)\n", "__tracker.annotate('subplot(2,1,2)')\n", "__tracker.annotate('s.plot')\n", - "_matlab(\"subplot(2,1,2); s.setMask({'v2'}); s.plot; size(s.dataToMatrix)\")\n", - "# MATLAB L902: s.resetMask;\n", - "_matlab('s.resetMask;')\n", - "# MATLAB L1100: % Note about repeated dataLabels It is possible to use SignalObj's to store different realizations of the same physical signal. For example, independent measurements of v1 at two distinct experiments.\n", "# Note about repeated dataLabels It is possible to use SignalObj's to store different realizations of the same physical signal. For example, independent measurements of v1 at two distinct experiments.\n", - "# MATLAB L1200: s=SignalObj(t,[v1; v1; v2] ,'Voltage','time','s','V',{'v1','v1','v2'});\n", - "_matlab(\"s=SignalObj(t,[v1; v1; v2] ,'Voltage','time','s','V',{'v1','v1','v2'});\")\n", - "# MATLAB L1201: s.getSubSignal({'v1'}); %returns a SignalObj with both realizations of v1\n", - "_matlab(\"s.getSubSignal({'v1'}); %returns a SignalObj with both realizations of v1\")\n", - "# MATLAB L1202: figure\n", "__tracker.new_figure('figure')\n", "__tracker.new_figure('figure')\n", - "# MATLAB L1203: s.getSubSignal({'v1'}).plot;\n", - "__tracker.annotate(\"s.getSubSignal({'v1'}).plot\")\n", - "_matlab(\"s.getSubSignal({'v1'}).plot;\")\n" + "__tracker.annotate(\"s.getSubSignal({'v1'}).plot\")" ] }, { @@ -122,74 +85,34 @@ "outputs": [], "source": [ "# SECTION 2: Example 2: Changing Signal Properties\n", - "# MATLAB L1500: figure\n", "__tracker.new_figure('figure')\n", "__tracker.new_figure('figure')\n", - "# MATLAB L1501: s=SignalObj(t,v,'Voltage','time','s','V',{'v1','v2'});\n", - "_matlab(\"s=SignalObj(t,v,'Voltage','time','s','V',{'v1','v2'});\")\n", - "# MATLAB L1502: subplot(2,1,1); s.plot;\n", "__tracker.annotate('subplot(2,1,1)')\n", "__tracker.annotate('s.plot')\n", - "_matlab('subplot(2,1,1); s.plot;')\n", - "# MATLAB L1503: subplot(2,1,2); s.setXlabel('distance'); s.setXUnits('cm'); s.plot;\n", "__tracker.annotate('subplot(2,1,2)')\n", "__tracker.annotate('s.plot')\n", - "_matlab(\"subplot(2,1,2); s.setXlabel('distance'); s.setXUnits('cm'); s.plot;\")\n", - "# MATLAB L1700: figure\n", "__tracker.new_figure('figure')\n", "__tracker.new_figure('figure')\n", - "# MATLAB L1701: subplot(2,1,1); s.setDataLabels({'r1','r2'}); s.setYLabel('Temperature'); s.setYUnits('C'); s.plot;\n", "__tracker.annotate('subplot(2,1,1)')\n", "__tracker.annotate('s.plot')\n", - "_matlab(\"subplot(2,1,1); s.setDataLabels({'r1','r2'}); s.setYLabel('Temperature'); s.setYUnits('C'); s.plot;\")\n", - "# MATLAB L1702: subplot(2,1,2); s.setMaxTime(14); s.setMinTime(-2); s.plot;\n", "__tracker.annotate('subplot(2,1,2)')\n", "__tracker.annotate('s.plot')\n", - "_matlab('subplot(2,1,2); s.setMaxTime(14); s.setMinTime(-2); s.plot;')\n", - "# MATLAB L1703: \n", "#\n", - "# MATLAB L1704: s.setName('testName'); %should work since we are using a method\n", - "_matlab(\"s.setName('testName'); %should work since we are using a method\")\n", - "# MATLAB L1705: if(strcmp(s.name,'testName'))\n", - "_matlab(\"if(strcmp(s.name,'testName'))\")\n", - "# MATLAB L1706: fprintf('Name successfully set \\n');\n", - "_matlab(\"fprintf('Name successfully set \\\\n');\")\n", - "# MATLAB L1707: else\n", - "_matlab('else')\n", - "# MATLAB L1708: fprintf('Could not set name \\n');\n", - "_matlab(\"fprintf('Could not set name \\\\n');\")\n", - "# MATLAB L1709: end\n", - "_matlab('end')\n", - "# MATLAB L1710: % s.name = 'testName'; %returns an error because the field is private;\n", "# s.name = 'testName'; %returns an error because the field is private;\n", - "# MATLAB L1900: % setMaxTime and setMinTime can be given a second parameter, holdVals, that determines whether the endpoint values are kept or set to zero if the times being set are outside the original window of the data.\n", "# setMaxTime and setMinTime can be given a second parameter, holdVals, that determines whether the endpoint values are kept or set to zero if the times being set are outside the original window of the data.\n", - "# MATLAB L2000: % Plotting properties for individual components of the data can be set via the when plotting or by call the setPlotProps method.\n", "# Plotting properties for individual components of the data can be set via the when plotting or by call the setPlotProps method.\n", - "# MATLAB L2100: figure\n", "__tracker.new_figure('figure')\n", "__tracker.new_figure('figure')\n", - "# MATLAB L2101: s=SignalObj(t,v,'Voltage','time','s','V',{'v1','v2'});\n", - "_matlab(\"s=SignalObj(t,v,'Voltage','time','s','V',{'v1','v2'});\")\n", - "# MATLAB L2102: subplot(2,1,1); s.plot('v1',{{' ''k'' '}});\n", "__tracker.annotate('subplot(2,1,1)')\n", "__tracker.annotate(\"s.plot('v1',{{' ''k'' '}})\")\n", - "_matlab(\"subplot(2,1,1); s.plot('v1',{{' ''k'' '}});\")\n", - "# MATLAB L2103: subplot(2,1,2); s.plot('all',{{' ''k'' '},{' ''-.g'' '}});\n", "__tracker.annotate('subplot(2,1,2)')\n", "__tracker.annotate(\"s.plot('all',{{' ''k'' '},{' ''-.g'' '}})\")\n", - "_matlab(\"subplot(2,1,2); s.plot('all',{{' ''k'' '},{' ''-.g'' '}});\")\n", - "# MATLAB L2300: figure\n", "__tracker.new_figure('figure')\n", "__tracker.new_figure('figure')\n", - "# MATLAB L2301: subplot(2,1,1); s.plot({'v1','v2'});\n", "__tracker.annotate('subplot(2,1,1)')\n", "__tracker.annotate(\"s.plot({'v1','v2'})\")\n", - "_matlab(\"subplot(2,1,1); s.plot({'v1','v2'});\")\n", - "# MATLAB L2302: subplot(2,1,2); s.plot({'v1','v2'},{{' ''k'' '},{' ''-.g'' '}});\n", "__tracker.annotate('subplot(2,1,2)')\n", - "__tracker.annotate(\"s.plot({'v1','v2'},{{' ''k'' '},{' ''-.g'' '}})\")\n", - "_matlab(\"subplot(2,1,2); s.plot({'v1','v2'},{{' ''k'' '},{' ''-.g'' '}});\")\n" + "__tracker.annotate(\"s.plot({'v1','v2'},{{' ''k'' '},{' ''-.g'' '}})\")" ] }, { @@ -200,32 +123,18 @@ "outputs": [], "source": [ "# SECTION 3: Example 3: Resampling and Windowing SignalObjs\n", - "# MATLAB L2600: figure\n", "__tracker.new_figure('figure')\n", "__tracker.new_figure('figure')\n", - "# MATLAB L2601: s=SignalObj(t,v,'Voltage','time','s','V',{'v1','v2'});\n", - "_matlab(\"s=SignalObj(t,v,'Voltage','time','s','V',{'v1','v2'});\")\n", - "# MATLAB L2602: s1=s.resample(.1*sampleRate);\n", - "_matlab('s1=s.resample(.1*sampleRate);')\n", - "# MATLAB L2603: subplot(2,1,1); s.plot;\n", "__tracker.annotate('subplot(2,1,1)')\n", "__tracker.annotate('s.plot')\n", - "_matlab('subplot(2,1,1); s.plot;')\n", - "# MATLAB L2604: subplot(2,1,2); s1.plot;\n", "__tracker.annotate('subplot(2,1,2)')\n", "__tracker.annotate('s1.plot')\n", - "_matlab('subplot(2,1,2); s1.plot;')\n", - "# MATLAB L2800: figure\n", "__tracker.new_figure('figure')\n", "__tracker.new_figure('figure')\n", - "# MATLAB L2801: subplot(2,1,1); s.getSigInTimeWindow(-2,3).plot;\n", "__tracker.annotate('subplot(2,1,1)')\n", "__tracker.annotate('s.getSigInTimeWindow(-2,3).plot')\n", - "_matlab('subplot(2,1,1); s.getSigInTimeWindow(-2,3).plot;')\n", - "# MATLAB L2802: subplot(2,1,2); s.plot;\n", "__tracker.annotate('subplot(2,1,2)')\n", - "__tracker.annotate('s.plot')\n", - "_matlab('subplot(2,1,2); s.plot;')\n" + "__tracker.annotate('s.plot')" ] }, { @@ -236,63 +145,26 @@ "outputs": [], "source": [ "# SECTION 4: Example 4: SignalObj Mathematical Operations\n", - "# MATLAB L3100: s=SignalObj(t,v,'Voltage','time','s','V',{'v1','v2'});\n", - "_matlab(\"s=SignalObj(t,v,'Voltage','time','s','V',{'v1','v2'});\")\n", - "# MATLAB L3101: figure\n", "__tracker.new_figure('figure')\n", "__tracker.new_figure('figure')\n", - "# MATLAB L3102: s2=mean(s); %mean of each dimension;\n", - "_matlab('s2=mean(s); %mean of each dimension;')\n", - "# MATLAB L3103: s5=s-s2; %zero mean version of s;\n", - "_matlab('s5=s-s2; %zero mean version of s;')\n", - "# MATLAB L3104: s5.plot;\n", "__tracker.annotate('s5.plot')\n", - "_matlab('s5.plot;')\n", - "# MATLAB L3105: \n", "#\n", - "# MATLAB L3106: figure\n", "__tracker.new_figure('figure')\n", "__tracker.new_figure('figure')\n", - "# MATLAB L3107: s2=mean(s,2); %mean of s across its dimensions;\n", - "_matlab('s2=mean(s,2); %mean of s across its dimensions;')\n", - "# MATLAB L3108: s2.plot;\n", "__tracker.annotate('s2.plot')\n", - "_matlab('s2.plot;')\n", - "# MATLAB L3300: % SignalObj's can be added, subtracted, and multiplied.\\\n", "# SignalObj's can be added, subtracted, and multiplied.\\\n", - "# MATLAB L3400: figure\n", "__tracker.new_figure('figure')\n", "__tracker.new_figure('figure')\n", - "# MATLAB L3401: s4=2*s+s5;\n", - "_matlab('s4=2*s+s5;')\n", - "# MATLAB L3402: s4.plot;\n", "__tracker.annotate('s4.plot')\n", - "_matlab('s4.plot;')\n", - "# MATLAB L3403: \n", "#\n", - "# MATLAB L3404: figure\n", "__tracker.new_figure('figure')\n", "__tracker.new_figure('figure')\n", - "# MATLAB L3405: subplot(3,1,1);\n", "__tracker.annotate('subplot(3,1,1)')\n", - "_matlab('subplot(3,1,1);')\n", - "# MATLAB L3406: s.integral.plot;\n", "__tracker.annotate('s.integral.plot')\n", - "_matlab('s.integral.plot;')\n", - "# MATLAB L3407: subplot(3,1,2);\n", "__tracker.annotate('subplot(3,1,2)')\n", - "_matlab('subplot(3,1,2);')\n", - "# MATLAB L3408: s.derivative.plot;\n", "__tracker.annotate('s.derivative.plot')\n", - "_matlab('s.derivative.plot;')\n", - "# MATLAB L3409: subplot(3,1,3);\n", "__tracker.annotate('subplot(3,1,3)')\n", - "_matlab('subplot(3,1,3);')\n", - "# MATLAB L3410: s6=s.integral.derivative-s; %should equal zero;\n", - "_matlab('s6=s.integral.derivative-s; %should equal zero;')\n", - "# MATLAB L3411: s6.plot;\n", - "__tracker.annotate('s6.plot')\n", - "_matlab('s6.plot;')\n" + "__tracker.annotate('s6.plot')" ] }, { @@ -303,20 +175,11 @@ "outputs": [], "source": [ "# SECTION 5: Example 5: Spectra\n", - "# MATLAB L3700: s=SignalObj(t,v,'Voltage','time','s','V',{'v1','v2'});\n", - "_matlab(\"s=SignalObj(t,v,'Voltage','time','s','V',{'v1','v2'});\")\n", - "# MATLAB L3701: figure;\n", "__tracker.new_figure('figure')\n", "__tracker.new_figure('figure;')\n", - "# MATLAB L3702: s.MTMspectrum;\n", - "_matlab('s.MTMspectrum;')\n", - "# MATLAB L3703: \n", "#\n", - "# MATLAB L3704: figure\n", - "__tracker.new_figure('figure')\n", "__tracker.new_figure('figure')\n", - "# MATLAB L3705: s.periodogram;\n", - "_matlab('s.periodogram;')\n" + "__tracker.new_figure('figure')" ] }, { @@ -327,51 +190,22 @@ "outputs": [], "source": [ "# SECTION 6: Example 6: View signal variability\n", - "# MATLAB L4000: % We can look at the variability of signals with regards to their labels or or irrespective of their labels. Lets create a SignalObj that has several components, and some noise. We mislabel two signals to add alot of variability for illustration\n", "# We can look at the variability of signals with regards to their labels or or irrespective of their labels. Lets create a SignalObj that has several components, and some noise. We mislabel two signals to add alot of variability for illustration\n", - "# MATLAB L4100: sampleRate=5000; t=0:1/sampleRate:1; t=t'; freq=2;\n", - "_matlab(\"sampleRate=5000; t=0:1/sampleRate:1; t=t'; freq=2;\")\n", - "# MATLAB L4101: v1=sin(2*pi*freq*t); v2=sin(v1.^2);\n", - "_matlab('v1=sin(2*pi*freq*t); v2=sin(v1.^2);')\n", - "# MATLAB L4102: noise=.1*randn(length(t),6); %gaussian random noise\n", - "_matlab('noise=.1*randn(length(t),6); %gaussian random noise')\n", - "# MATLAB L4103: data= [v1 v2 v2 v1 v2 v1] + noise;\n", - "_matlab('data= [v1 v2 v2 v1 v2 v1] + noise;')\n", - "# MATLAB L4104: s=SignalObj(t,data,'Voltage','time','s','V',{'v1','v2','v2','v1','v1','v2'});\n", - "_matlab(\"s=SignalObj(t,data,'Voltage','time','s','V',{'v1','v2','v2','v1','v1','v2'});\")\n", - "# MATLAB L4105: figure;\n", "__tracker.new_figure('figure')\n", "__tracker.new_figure('figure;')\n", - "# MATLAB L4106: subplot(2,1,1); s.plot;\n", "__tracker.annotate('subplot(2,1,1)')\n", "__tracker.annotate('s.plot')\n", - "_matlab('subplot(2,1,1); s.plot;')\n", - "# MATLAB L4107: subplot(2,1,2); s.plotAllVariability; %disregards labels;\n", "__tracker.annotate('subplot(2,1,2)')\n", - "_matlab('subplot(2,1,2); s.plotAllVariability; %disregards labels;')\n", - "# MATLAB L4108: s.plotVariability; %creates two figures, one for 'v1' and one for 'v2'\n", - "_matlab(\"s.plotVariability; %creates two figures, one for 'v1' and one for 'v2'\")\n", - "# MATLAB L4300: % sObj.plotAllVariability assumes that all the data can be considered together. It also allows more custimization of the plotting properties. Example we can specify a different faceColor by passing the color in the same format as plot. Assymetric confidence intervals can be specified. If the CIs are single numbers, they specify the multiple of the standard deviations to use (default is 1). If they are the same length as the SignalObj, then it specifies the actual values above and/or below the mean at each point in time. If ciLower is not specifed, it is assumed to equal ciUpper. For convinience the inputs to plotAllVariability are: s.plotAllVariability(sObj,faceColor,linewidth,ciUpper,ciLower)\n", "# sObj.plotAllVariability assumes that all the data can be considered together. It also allows more custimization of the plotting properties. Example we can specify a different faceColor by passing the color in the same format as plot. Assymetric confidence intervals can be specified. If the CIs are single numbers, they specify the multiple of the standard deviations to use (default is 1). If they are the same length as the SignalObj, then it specifies the actual values above and/or below the mean at each point in time. If ciLower is not specifed, it is assumed to equal ciUpper. For convinience the inputs to plotAllVariability are: s.plotAllVariability(sObj,faceColor,linewidth,ciUpper,ciLower)\n", - "# MATLAB L4400: figure;\n", "__tracker.new_figure('figure')\n", "__tracker.new_figure('figure;')\n", - "# MATLAB L4401: %blue color for CI patch;\n", "# blue color for CI patch;\n", - "# MATLAB L4402: subplot(3,1,1); s.plotAllVariability('b');\n", "__tracker.annotate('subplot(3,1,1)')\n", - "_matlab(\"subplot(3,1,1); s.plotAllVariability('b');\")\n", - "# MATLAB L4403: %green color and lineWidth=2;\n", "# green color and lineWidth=2;\n", - "# MATLAB L4404: subplot(3,1,2); s.plotAllVariability('g',2);\n", "__tracker.annotate('subplot(3,1,2)')\n", - "_matlab(\"subplot(3,1,2); s.plotAllVariability('g',2);\")\n", - "# MATLAB L4405: %cyan, lineWidth=3, 2*std for top CI, and 1*std for bottom CI\n", "# cyan, lineWidth=3, 2*std for top CI, and 1*std for bottom CI\n", - "# MATLAB L4406: subplot(3,1,3); s.plotAllVariability('c',3,2,1);\n", "__tracker.annotate('subplot(3,1,3)')\n", - "_matlab(\"subplot(3,1,3); s.plotAllVariability('c',3,2,1);\")\n", - "__tracker.finalize()\n" + "__tracker.finalize()" ] } ], @@ -382,9 +216,7 @@ "nstat": { "expected_figures": 16, "run_group": "smoke", - "source_file": "/private/tmp/upstream-nstat-matlab/helpfiles/SignalObjExamples.mlx", - "source_type": "mlx", - "strict_section_cell_mapping": true, + "style": "python-example", "topic": "SignalObjExamples" } }, diff --git a/notebooks/StimulusDecode2D.ipynb b/notebooks/StimulusDecode2D.ipynb index 16c84cd2..e8b3d80d 100644 --- a/notebooks/StimulusDecode2D.ipynb +++ b/notebooks/StimulusDecode2D.ipynb @@ -7,7 +7,7 @@ "metadata": {}, "outputs": [], "source": [ - "# AUTO-GENERATED FROM MATLAB StimulusDecode2D.mlx -- DO NOT EDIT\n", + "# nSTAT-python notebook example: StimulusDecode2D\n", "from pathlib import Path\n", "import sys\n", "\n", @@ -32,12 +32,7 @@ "OUTPUT_ROOT = REPO_ROOT / \"output\" / \"notebook_images\"\n", "__tracker = FigureTracker(topic='StimulusDecode2D', output_root=OUTPUT_ROOT, expected_count=8)\n", "\n", - "def _matlab(line: str) -> None:\n", - " \"\"\"Placeholder for untranslated MATLAB syntax.\"\"\"\n", - " _ = line\n", - " return\n", - "\n", - "def _load_matlab_globals(name: str) -> dict[str, object]:\n", + "def _load_example_globals(name: str) -> dict[str, object]:\n", " candidates = [\n", " Path(name),\n", " DATA_DIR / name,\n", @@ -52,57 +47,20 @@ " return {}\n", "\n", "# SECTION 0: Section 0\n", - "# MATLAB L100: % 2-D Stimulus Decode\n", "# 2-D Stimulus Decode\n", - "# MATLAB L200: % Here we simulate hippocampal place cell receptive fields and their firing during a 2-d spatial task. We then use the ensemble firing activity to estimate the path based on the only the point process observations\n", "# Here we simulate hippocampal place cell receptive fields and their firing during a 2-d spatial task. We then use the ensemble firing activity to estimate the path based on the only the point process observations\n", - "# MATLAB L300: delta = 0.001;\n", "delta = 0.001\n", - "# MATLAB L301: Tmax = 1;\n", "Tmax = 1\n", - "# MATLAB L302: time = 0:delta:Tmax;\n", - "_matlab('time = 0:delta:Tmax;')\n", - "# MATLAB L303: px = zeros(1,length(time));\n", - "_matlab('px = zeros(1,length(time));')\n", - "# MATLAB L304: py = zeros(1,length(time));\n", - "_matlab('py = zeros(1,length(time));')\n", - "# MATLAB L305: Q=.01;\n", "Q = .01\n", - "# MATLAB L306: r = Q.*randn(2,length(time));\n", - "_matlab('r = Q.*randn(2,length(time));')\n", - "# MATLAB L307: vx = cumsum(r(1,:))';\n", - "_matlab(\"vx = cumsum(r(1,:))';\")\n", - "# MATLAB L308: vy = cumsum(r(2,:))';\n", - "_matlab(\"vy = cumsum(r(2,:))';\")\n", - "# MATLAB L309: \n", "#\n", - "# MATLAB L310: velSig = SignalObj(time, [vx, vy],'vel');\n", - "_matlab(\"velSig = SignalObj(time, [vx, vy],'vel');\")\n", - "# MATLAB L311: posSig = velSig.integral;\n", - "_matlab('posSig = velSig.integral;')\n", - "# MATLAB L312: posData = posSig.data;\n", - "_matlab('posData = posSig.data;')\n", - "# MATLAB L313: px = posData(:,1);\n", - "_matlab('px = posData(:,1);')\n", - "# MATLAB L314: py = posData(:,2);\n", - "_matlab('py = posData(:,2);')\n", - "# MATLAB L315: % N=100; A=1; B=ones(1,N)./N;\n", "# N=100; A=1; B=ones(1,N)./N;\n", - "# MATLAB L316: % px = filtfilt(B,A,px);\n", "# px = filtfilt(B,A,px);\n", - "# MATLAB L317: % py = filtfilt(B,A,py);\n", "# py = filtfilt(B,A,py);\n", - "# MATLAB L318: figure;\n", "__tracker.new_figure('figure')\n", "__tracker.new_figure('figure;')\n", - "# MATLAB L319: plot(px,py);\n", "__tracker.annotate('plot(px,py)')\n", - "_matlab('plot(px,py);')\n", - "# MATLAB L320: title('Simulated X-Y trajectory');\n", - "_matlab(\"title('Simulated X-Y trajectory');\")\n", - "# MATLAB L321: xlabel('x'); ylabel('y');\n", "plt.xlabel('x')\n", - "plt.ylabel('y')\n" + "plt.ylabel('y')" ] }, { @@ -113,133 +71,31 @@ "outputs": [], "source": [ "# SECTION 1: Generate random receptive fields to simulate different neurons\n", - "# MATLAB L600: clear lambdaCIF lambda tempSpikeColl n spikeColl\n", "pass\n", - "# MATLAB L601: numRealizations=80;\n", "numRealizations = 80\n", - "# MATLAB L602: \n", "#\n", - "# MATLAB L603: coeffs = -abs(1*randn(numRealizations,5));\n", - "_matlab('coeffs = -abs(1*randn(numRealizations,5));')\n", - "# MATLAB L604: coeffs = [-2*abs(randn(numRealizations,1)) coeffs];\n", - "_matlab('coeffs = [-2*abs(randn(numRealizations,1)) coeffs];')\n", - "# MATLAB L605: dataMat = [ones(length(time),1) px py px.^2 py.^2 px.*py];\n", - "_matlab('dataMat = [ones(length(time),1) px py px.^2 py.^2 px.*py];')\n", - "# MATLAB L606: for i=1:numRealizations\n", - "_matlab('for i=1:numRealizations')\n", - "# MATLAB L607: tempData = exp(dataMat*coeffs(i,:)');\n", - "_matlab(\"tempData = exp(dataMat*coeffs(i,:)');\")\n", - "# MATLAB L608: lambdaData = tempData./(1+tempData);\n", - "_matlab('lambdaData = tempData./(1+tempData);')\n", - "# MATLAB L609: lambda{i}=Covariate(time,lambdaData./delta, '\\Lambda(t)','time','s','Hz',{strcat('\\lambda_{',num2str(i),'}')},{{' ''b'', ''LineWidth'' ,2'}});\n", - "_matlab(\"lambda{i}=Covariate(time,lambdaData./delta, '\\\\Lambda(t)','time','s','Hz',{strcat('\\\\lambda_{',num2str(i),'}')},{{' ''b'', ''LineWidth'' ,2'}});\")\n", - "# MATLAB L610: \n", "#\n", - "# MATLAB L611: tempSpikeColl{i} = CIF.simulateCIFByThinningFromLambda(lambda{i},1);\n", - "_matlab('tempSpikeColl{i} = CIF.simulateCIFByThinningFromLambda(lambda{i},1);')\n", - "# MATLAB L612: n{i} = tempSpikeColl{i}.getNST(1);\n", - "_matlab('n{i} = tempSpikeColl{i}.getNST(1);')\n", - "# MATLAB L613: n{i}.setName(num2str(i));\n", - "_matlab('n{i}.setName(num2str(i));')\n", - "# MATLAB L614: \n", "#\n", - "# MATLAB L615: try\n", - "_matlab('try')\n", - "# MATLAB L616: lambdaCIF{i} = CIF(coeffs(i,:),{'1','x','y','x^2','y^2','x*y'},{'x','y'},'binomial');\n", - "_matlab(\"lambdaCIF{i} = CIF(coeffs(i,:),{'1','x','y','x^2','y^2','x*y'},{'x','y'},'binomial');\")\n", - "# MATLAB L617: catch ME_sym\n", - "_matlab('catch ME_sym')\n", - "# MATLAB L618: if(i==1)\n", - "_matlab('if(i==1)')\n", - "# MATLAB L619: warning('StimulusDecode2D:SymbolicCIFFallback', ...\n", - "_matlab(\"warning('StimulusDecode2D:SymbolicCIFFallback', ...\")\n", - "# MATLAB L620: ['CIF symbolic setup failed (' ME_sym.identifier '). Decoder will use linear fallback.']);\n", - "_matlab(\"['CIF symbolic setup failed (' ME_sym.identifier '). Decoder will use linear fallback.']);\")\n", - "# MATLAB L621: end\n", - "_matlab('end')\n", - "# MATLAB L622: lambdaCIF{i} = [];\n", - "_matlab('lambdaCIF{i} = [];')\n", - "# MATLAB L623: end\n", - "_matlab('end')\n", - "# MATLAB L624: end\n", - "_matlab('end')\n", - "# MATLAB L625: \n", "#\n", - "# MATLAB L626: \n", "#\n", - "# MATLAB L627: % View the different neuron conditional intensity functions\n", "# View the different neuron conditional intensity functions\n", - "# MATLAB L628: figure;\n", "__tracker.new_figure('figure')\n", "__tracker.new_figure('figure;')\n", - "# MATLAB L629: for i=1:length(lambda)\n", - "_matlab('for i=1:length(lambda)')\n", - "# MATLAB L630: lambda{i}.plot;\n", "__tracker.annotate('lambda{i}.plot')\n", - "_matlab('lambda{i}.plot;')\n", - "# MATLAB L631: end\n", - "_matlab('end')\n", - "# MATLAB L632: legend off;\n", - "_matlab('legend off;')\n", - "# MATLAB L633: \n", "#\n", - "# MATLAB L634: % Visualize Simulated Receptive Fields\n", "# Visualize Simulated Receptive Fields\n", - "# MATLAB L635: clear placeField;\n", "pass\n", - "# MATLAB L636: [X,Y]=meshgrid(-2:.1:2,-2:.1:2);\n", - "_matlab('[X,Y]=meshgrid(-2:.1:2,-2:.1:2);')\n", - "# MATLAB L637: figure;\n", "__tracker.new_figure('figure')\n", "__tracker.new_figure('figure;')\n", - "# MATLAB L638: \n", "#\n", - "# MATLAB L639: for i=1:numRealizations\n", - "_matlab('for i=1:numRealizations')\n", - "# MATLAB L640: tempData = coeffs(i,1) + coeffs(i,2)*X + coeffs(i,3)*Y +coeffs(i,4)*X.^2 + coeffs(i,5)*Y.^2 + coeffs(i,6).*X.*Y;\n", - "_matlab('tempData = coeffs(i,1) + coeffs(i,2)*X + coeffs(i,3)*Y +coeffs(i,4)*X.^2 + coeffs(i,5)*Y.^2 + coeffs(i,6).*X.*Y;')\n", - "# MATLAB L641: placeField{i} = exp(tempData)./(1+exp(tempData))./delta; %rate based on logistic link function\n", - "_matlab('placeField{i} = exp(tempData)./(1+exp(tempData))./delta; %rate based on logistic link function')\n", - "# MATLAB L642: \n", "#\n", - "# MATLAB L643: end\n", - "_matlab('end')\n", - "# MATLAB L644: \n", "#\n", - "# MATLAB L645: fact=factor(numRealizations);\n", - "_matlab('fact=factor(numRealizations);')\n", - "# MATLAB L646: \n", "#\n", - "# MATLAB L647: for i=1:numRealizations\n", - "_matlab('for i=1:numRealizations')\n", - "# MATLAB L648: if(length(fact)==1)\n", - "_matlab('if(length(fact)==1)')\n", - "# MATLAB L649: subplot(1,numRealizations,i);\n", "__tracker.annotate('subplot(1,numRealizations,i)')\n", - "_matlab('subplot(1,numRealizations,i);')\n", - "# MATLAB L650: elseif(length(fact)==2)\n", - "_matlab('elseif(length(fact)==2)')\n", - "# MATLAB L651: subplot(fact(1),fact(2),i);\n", "__tracker.annotate('subplot(fact(1),fact(2),i)')\n", - "_matlab('subplot(fact(1),fact(2),i);')\n", - "# MATLAB L652: elseif(length(fact)==3)\n", - "_matlab('elseif(length(fact)==3)')\n", - "# MATLAB L653: subplot(fact(1)*fact(2),fact(3),i);\n", "__tracker.annotate('subplot(fact(1)*fact(2),fact(3),i)')\n", - "_matlab('subplot(fact(1)*fact(2),fact(3),i);')\n", - "# MATLAB L654: end\n", - "_matlab('end')\n", - "# MATLAB L655: pcolor(X,Y,placeField{i}), shading interp\n", "__tracker.annotate('pcolor(X,Y,placeField{i}), shading interp')\n", - "_matlab('pcolor(X,Y,placeField{i}), shading interp')\n", - "# MATLAB L656: axis square;\n", - "_matlab('axis square;')\n", - "# MATLAB L657: set(gca,'xtick',[],'ytick',[]);\n", - "_matlab(\"set(gca,'xtick',[],'ytick',[]);\")\n", - "# MATLAB L658: \n", - "#\n", - "# MATLAB L659: end\n", - "_matlab('end')\n" + "#" ] }, { @@ -250,67 +106,12 @@ "outputs": [], "source": [ "# SECTION 2: Decode the x-y trajectory\n", - "# MATLAB L900: spikeColl = nstColl(n);\n", - "_matlab('spikeColl = nstColl(n);')\n", - "# MATLAB L901: spikeColl.resample(1/delta);\n", - "_matlab('spikeColl.resample(1/delta);')\n", - "# MATLAB L902: dN = spikeColl.dataToMatrix;\n", - "_matlab('dN = spikeColl.dataToMatrix;')\n", - "# MATLAB L1100: vx=var(px(2:end)-px(1:end-1));\n", - "_matlab('vx=var(px(2:end)-px(1:end-1));')\n", - "# MATLAB L1101: vy=var(py(2:end)-py(1:end-1));\n", - "_matlab('vy=var(py(2:end)-py(1:end-1));')\n", - "# MATLAB L1102: Q=[vx 0;0 vy];\n", - "_matlab('Q=[vx 0;0 vy];')\n", - "# MATLAB L1103: Px0=.1*eye(2,2); A=1*eye(2,2);\n", - "_matlab('Px0=.1*eye(2,2); A=1*eye(2,2);')\n", - "# MATLAB L1104: decode_method = 'PPDecodeFilter';\n", - "_matlab(\"decode_method = 'PPDecodeFilter';\")\n", - "# MATLAB L1105: try\n", - "_matlab('try')\n", - "# MATLAB L1106: [x_p, Pe_p, x_u, Pe_u] = DecodingAlgorithms.PPDecodeFilter(A, Q, Px0, dN',lambdaCIF,delta);\n", - "_matlab(\"[x_p, Pe_p, x_u, Pe_u] = DecodingAlgorithms.PPDecodeFilter(A, Q, Px0, dN',lambdaCIF,delta);\")\n", - "# MATLAB L1107: catch ME_decode\n", - "_matlab('catch ME_decode')\n", - "# MATLAB L1108: warning('StimulusDecode2D:SymbolicDecodeFallback', ...\n", - "_matlab(\"warning('StimulusDecode2D:SymbolicDecodeFallback', ...\")\n", - "# MATLAB L1109: ['PPDecodeFilter failed (' ME_decode.identifier '). Falling back to PPDecodeFilterLinear.']);\n", - "_matlab(\"['PPDecodeFilter failed (' ME_decode.identifier '). Falling back to PPDecodeFilterLinear.']);\")\n", - "# MATLAB L1110: decode_method = 'PPDecodeFilterLinear';\n", - "_matlab(\"decode_method = 'PPDecodeFilterLinear';\")\n", - "# MATLAB L1111: mu_linear = coeffs(:,1);\n", - "_matlab('mu_linear = coeffs(:,1);')\n", - "# MATLAB L1112: beta_linear = coeffs(:,2:3)';\n", - "_matlab(\"beta_linear = coeffs(:,2:3)';\")\n", - "# MATLAB L1113: [x_p, Pe_p, x_u, Pe_u] = DecodingAlgorithms.PPDecodeFilterLinear(A, Q, dN', mu_linear, beta_linear, 'binomial', delta);\n", - "_matlab(\"[x_p, Pe_p, x_u, Pe_u] = DecodingAlgorithms.PPDecodeFilterLinear(A, Q, dN', mu_linear, beta_linear, 'binomial', delta);\")\n", - "# MATLAB L1114: end\n", - "_matlab('end')\n", - "# MATLAB L1115: nCommon = min(length(px),size(x_u,2));\n", - "_matlab('nCommon = min(length(px),size(x_u,2));')\n", - "# MATLAB L1116: decode_rmse = sqrt(mean((x_u(1,1:nCommon)'-px(1:nCommon)).^2 + (x_u(2,1:nCommon)'-py(1:nCommon)).^2));\n", - "_matlab(\"decode_rmse = sqrt(mean((x_u(1,1:nCommon)'-px(1:nCommon)).^2 + (x_u(2,1:nCommon)'-py(1:nCommon)).^2));\")\n", - "# MATLAB L1117: num_cells = numRealizations;\n", - "_matlab('num_cells = numRealizations;')\n", - "# MATLAB L1118: figure;\n", "__tracker.new_figure('figure')\n", "__tracker.new_figure('figure;')\n", - "# MATLAB L1119: plot(x_u(1,:),x_u(2,:),'b',px,py,'k')\n", "__tracker.annotate(\"plot(x_u(1,:),x_u(2,:),'b',px,py,'k')\")\n", - "_matlab(\"plot(x_u(1,:),x_u(2,:),'b',px,py,'k')\")\n", - "# MATLAB L1120: legend('predicted path','actual path');\n", - "_matlab(\"legend('predicted path','actual path');\")\n", - "# MATLAB L1121: \n", "#\n", - "# MATLAB L1122: % Parity contract scalars for MATLAB/Python verification.\n", "# Parity contract scalars for MATLAB/Python verification.\n", - "# MATLAB L1123: parity = struct();\n", - "_matlab('parity = struct();')\n", - "# MATLAB L1124: parity.num_cells = num_cells;\n", - "_matlab('parity.num_cells = num_cells;')\n", - "# MATLAB L1125: parity.decode_rmse = decode_rmse;\n", - "_matlab('parity.decode_rmse = decode_rmse;')\n", - "__tracker.finalize()\n" + "__tracker.finalize()" ] } ], @@ -321,9 +122,7 @@ "nstat": { "expected_figures": 8, "run_group": "full", - "source_file": "/private/tmp/upstream-nstat-matlab/helpfiles/StimulusDecode2D.mlx", - "source_type": "mlx", - "strict_section_cell_mapping": true, + "style": "python-example", "topic": "StimulusDecode2D" } }, diff --git a/notebooks/TrialConfigExamples.ipynb b/notebooks/TrialConfigExamples.ipynb index ee9cae6d..c88fd06e 100644 --- a/notebooks/TrialConfigExamples.ipynb +++ b/notebooks/TrialConfigExamples.ipynb @@ -7,7 +7,7 @@ "metadata": {}, "outputs": [], "source": [ - "# AUTO-GENERATED FROM MATLAB TrialConfigExamples.mlx -- DO NOT EDIT\n", + "# nSTAT-python notebook example: TrialConfigExamples\n", "from pathlib import Path\n", "import sys\n", "\n", @@ -32,12 +32,7 @@ "OUTPUT_ROOT = REPO_ROOT / \"output\" / \"notebook_images\"\n", "__tracker = FigureTracker(topic='TrialConfigExamples', output_root=OUTPUT_ROOT, expected_count=0)\n", "\n", - "def _matlab(line: str) -> None:\n", - " \"\"\"Placeholder for untranslated MATLAB syntax.\"\"\"\n", - " _ = line\n", - " return\n", - "\n", - "def _load_matlab_globals(name: str) -> dict[str, object]:\n", + "def _load_example_globals(name: str) -> dict[str, object]:\n", " candidates = [\n", " Path(name),\n", " DATA_DIR / name,\n", @@ -52,17 +47,9 @@ " return {}\n", "\n", "# SECTION 0: Section 0\n", - "# MATLAB L100: % TrialConfig Examples\n", "# TrialConfig Examples\n", - "# MATLAB L200: % tcObj=TrialConfig(covMask,sampleRate, history,minTime,maxTime)\n", "# tcObj=TrialConfig(covMask,sampleRate, history,minTime,maxTime)\n", - "# MATLAB L300: tc1 = TrialConfig({'Force','f_x'},2000,[.1 .2],-1,2);\n", - "_matlab(\"tc1 = TrialConfig({'Force','f_x'},2000,[.1 .2],-1,2);\")\n", - "# MATLAB L301: tc2 = TrialConfig({'Position','x'},2000,[.1 .2],-1,2);\n", - "_matlab(\"tc2 = TrialConfig({'Position','x'},2000,[.1 .2],-1,2);\")\n", - "# MATLAB L302: tcc = ConfigColl({tc1,tc2});\n", - "_matlab('tcc = ConfigColl({tc1,tc2});')\n", - "__tracker.finalize()\n" + "__tracker.finalize()" ] } ], @@ -73,9 +60,7 @@ "nstat": { "expected_figures": 0, "run_group": "full", - "source_file": "/private/tmp/upstream-nstat-matlab/helpfiles/TrialConfigExamples.mlx", - "source_type": "mlx", - "strict_section_cell_mapping": true, + "style": "python-example", "topic": "TrialConfigExamples" } }, diff --git a/notebooks/TrialExamples.ipynb b/notebooks/TrialExamples.ipynb index 4117fe0a..49c93b10 100644 --- a/notebooks/TrialExamples.ipynb +++ b/notebooks/TrialExamples.ipynb @@ -7,7 +7,7 @@ "metadata": {}, "outputs": [], "source": [ - "# AUTO-GENERATED FROM MATLAB TrialExamples.mlx -- DO NOT EDIT\n", + "# nSTAT-python notebook example: TrialExamples\n", "from pathlib import Path\n", "import sys\n", "\n", @@ -32,12 +32,7 @@ "OUTPUT_ROOT = REPO_ROOT / \"output\" / \"notebook_images\"\n", "__tracker = FigureTracker(topic='TrialExamples', output_root=OUTPUT_ROOT, expected_count=6)\n", "\n", - "def _matlab(line: str) -> None:\n", - " \"\"\"Placeholder for untranslated MATLAB syntax.\"\"\"\n", - " _ = line\n", - " return\n", - "\n", - "def _load_matlab_globals(name: str) -> dict[str, object]:\n", + "def _load_example_globals(name: str) -> dict[str, object]:\n", " candidates = [\n", " Path(name),\n", " DATA_DIR / name,\n", @@ -52,8 +47,7 @@ " return {}\n", "\n", "# SECTION 0: Section 0\n", - "# MATLAB L100: % Trial Examples\n", - "# Trial Examples\n" + "# Trial Examples" ] }, { @@ -64,82 +58,28 @@ "outputs": [], "source": [ "# SECTION 1: Example 1: A simple data set\n", - "# MATLAB L300: close all; clear all;\n", "plt.close(\"all\")\n", - "# MATLAB L301: lengthTrial=1;\n", "lengthTrial = 1\n", - "# MATLAB L500: % Create History windows of interest\n", "# Create History windows of interest\n", - "# MATLAB L600: windowTimes = [0 .1 .2 .4];\n", - "_matlab('windowTimes = [0 .1 .2 .4];')\n", - "# MATLAB L601: h=History(windowTimes);\n", - "_matlab('h=History(windowTimes);')\n", - "# MATLAB L602: figure; h.plot;\n", "__tracker.new_figure('figure')\n", "__tracker.annotate('h.plot')\n", - "_matlab('figure; h.plot;')\n", - "# MATLAB L800: % Load Covariates\n", "# Load Covariates\n", - "# MATLAB L900: load CovariateSample.mat; %load position and force covariates\n", - "_matlab('load CovariateSample.mat; %load position and force covariates')\n", - "# MATLAB L901: cc=CovColl({position,force});\n", - "_matlab('cc=CovColl({position,force});')\n", - "# MATLAB L902: cc.setMaxTime(lengthTrial);\n", - "_matlab('cc.setMaxTime(lengthTrial);')\n", - "# MATLAB L903: figure; cc.plot;\n", "__tracker.new_figure('figure')\n", "__tracker.annotate('cc.plot')\n", - "_matlab('figure; cc.plot;')\n", - "# MATLAB L1100: % Create trial events\n", "# Create trial events\n", - "# MATLAB L1200: eTimes = sort(rand(1,2)*lengthTrial);\n", - "_matlab('eTimes = sort(rand(1,2)*lengthTrial);')\n", - "# MATLAB L1201: eLabels={'E_1','E_2'};\n", - "_matlab(\"eLabels={'E_1','E_2'};\")\n", - "# MATLAB L1202: e=Events(eTimes,eLabels); %use default eventColor 'r'\n", - "_matlab(\"e=Events(eTimes,eLabels); %use default eventColor 'r'\")\n", - "# MATLAB L1203: figure; e.plot;\n", "__tracker.new_figure('figure')\n", "__tracker.annotate('e.plot')\n", - "_matlab('figure; e.plot;')\n", - "# MATLAB L1400: % Create neural Spike Train Data\n", "# Create neural Spike Train Data\n", - "# MATLAB L1500: clear nst;\n", "pass\n", - "# MATLAB L1501: for i=1:4\n", - "_matlab('for i=1:4')\n", - "# MATLAB L1502: spikeTimes = sort(rand(1,100))*lengthTrial;\n", - "_matlab('spikeTimes = sort(rand(1,100))*lengthTrial;')\n", - "# MATLAB L1503: nst{i}=nspikeTrain(spikeTimes,'',.001);\n", - "_matlab(\"nst{i}=nspikeTrain(spikeTimes,'',.001);\")\n", - "# MATLAB L1504: end\n", - "_matlab('end')\n", - "# MATLAB L1505: spikeColl=nstColl(nst); %create a nstColl\n", - "_matlab('spikeColl=nstColl(nst); %create a nstColl')\n", - "# MATLAB L1506: figure; spikeColl.plot;\n", "__tracker.new_figure('figure')\n", "__tracker.annotate('spikeColl.plot')\n", - "_matlab('figure; spikeColl.plot;')\n", - "# MATLAB L1700: % Finally we have everything we need to create a Trial object.\n", "# Finally we have everything we need to create a Trial object.\n", - "# MATLAB L1800: trial1=Trial(spikeColl, cc, e, h);\n", - "_matlab('trial1=Trial(spikeColl, cc, e, h);')\n", - "# MATLAB L1801: figure; trial1.plot; % plot all the data;\n", "__tracker.new_figure('figure')\n", "__tracker.annotate('trial1.plot')\n", - "_matlab('figure; trial1.plot; % plot all the data;')\n", - "# MATLAB L2000: % Mask out some of the data and plot the trial once again\n", "# Mask out some of the data and plot the trial once again\n", - "# MATLAB L2100: trial1.setCovMask({{'Position','x'},{'Force','f_x'}})\n", - "_matlab(\"trial1.setCovMask({{'Position','x'},{'Force','f_x'}})\")\n", - "# MATLAB L2101: figure; trial1.plot;\n", "__tracker.new_figure('figure')\n", "__tracker.annotate('trial1.plot')\n", - "_matlab('figure; trial1.plot;')\n", - "# MATLAB L2102: \n", - "#\n", - "# MATLAB L2103: trial1.getHistForNeurons([1:2]);\n", - "_matlab('trial1.getHistForNeurons([1:2]);')\n" + "#" ] }, { @@ -150,9 +90,8 @@ "outputs": [], "source": [ "# SECTION 2: Example 2: Analyzing Trial Data\n", - "# MATLAB L2400: % Examples of neural spike analysis using the Neural Spike Analysis Toolbox or using standard methods standard methods\n", "# Examples of neural spike analysis using the Neural Spike Analysis Toolbox or using standard methods standard methods\n", - "__tracker.finalize()\n" + "__tracker.finalize()" ] } ], @@ -163,9 +102,7 @@ "nstat": { "expected_figures": 6, "run_group": "smoke", - "source_file": "/private/tmp/upstream-nstat-matlab/helpfiles/TrialExamples.mlx", - "source_type": "mlx", - "strict_section_cell_mapping": true, + "style": "python-example", "topic": "TrialExamples" } }, diff --git a/notebooks/ValidationDataSet.ipynb b/notebooks/ValidationDataSet.ipynb index 6142b260..f0d06f55 100644 --- a/notebooks/ValidationDataSet.ipynb +++ b/notebooks/ValidationDataSet.ipynb @@ -7,7 +7,7 @@ "metadata": {}, "outputs": [], "source": [ - "# AUTO-GENERATED FROM MATLAB ValidationDataSet.mlx -- DO NOT EDIT\n", + "# nSTAT-python notebook example: ValidationDataSet\n", "from pathlib import Path\n", "import sys\n", "\n", @@ -32,12 +32,7 @@ "OUTPUT_ROOT = REPO_ROOT / \"output\" / \"notebook_images\"\n", "__tracker = FigureTracker(topic='ValidationDataSet', output_root=OUTPUT_ROOT, expected_count=9)\n", "\n", - "def _matlab(line: str) -> None:\n", - " \"\"\"Placeholder for untranslated MATLAB syntax.\"\"\"\n", - " _ = line\n", - " return\n", - "\n", - "def _load_matlab_globals(name: str) -> dict[str, object]:\n", + "def _load_example_globals(name: str) -> dict[str, object]:\n", " candidates = [\n", " Path(name),\n", " DATA_DIR / name,\n", @@ -52,10 +47,8 @@ " return {}\n", "\n", "# SECTION 0: Section 0\n", - "# MATLAB L100: % Software Validation Data Set\n", "# Software Validation Data Set\n", - "# MATLAB L200: % The purpose of this example is to two important test cases of data to validate the Neural Spike Analysis Toolbox.\n", - "# The purpose of this example is to two important test cases of data to validate the Neural Spike Analysis Toolbox.\n" + "# The purpose of this example is to two important test cases of data to validate the Neural Spike Analysis Toolbox." ] }, { @@ -66,101 +59,35 @@ "outputs": [], "source": [ "# SECTION 1: Case #1: Constant Rate Poisson Process\n", - "# MATLAB L400: % First we want to show that when neural firing activity is generated from a constant rate poisson process, the algorithm is able to estimate the value of this constant rate.\n", "# First we want to show that when neural firing activity is generated from a constant rate poisson process, the algorithm is able to estimate the value of this constant rate.\n", - "# MATLAB L500: clear all;\n", "pass\n", - "# MATLAB L501: close all;\n", "plt.close(\"all\")\n", - "# MATLAB L502: \n", "#\n", - "# MATLAB L503: p=0.01; % bernoilli probability\n", "p = 0.01\n", - "# MATLAB L504: N=100001; % Number of coin flips\n", "N = 100001\n", - "# MATLAB L505: delta = 0.001; % binsize\n", "delta = 0.001\n", - "# MATLAB L506: T=N*delta; % total time window\n", - "_matlab('T=N*delta; % total time window')\n", - "# MATLAB L507: lambda=N*p/T % lambda*T = N*p\n", - "_matlab('lambda=N*p/T % lambda*T = N*p')\n", - "# MATLAB L508: \n", "#\n", - "# MATLAB L509: mu = log(lambda*delta/(1-lambda*delta))\n", - "_matlab('mu = log(lambda*delta/(1-lambda*delta))')\n", - "# MATLAB L700: % Now generate data for two neurons based on this constant rate\n", "# Now generate data for two neurons based on this constant rate\n", - "# MATLAB L800: for i=1:2\n", - "_matlab('for i=1:2')\n", - "# MATLAB L801: t=linspace(0,T,N);\n", - "_matlab('t=linspace(0,T,N);')\n", - "# MATLAB L802: ind=rand(1,N)T1);\n", - "_matlab('t2=tTot(tTot>T1);')\n", - "# MATLAB L2406: ind2=rand(1,N2)max(t1)],'Baseline','s','','',{'muConst','mu1','mu2'});\n", - "_matlab(\"cov=Covariate(tTot,[ones(length(tTot),1), tTot<=max(t1), tTot>max(t1)],'Baseline','s','','',{'muConst','mu1','mu2'});\")\n", - "# MATLAB L2702: cc=CovColl({cov});\n", - "_matlab('cc=CovColl({cov});')\n", - "# MATLAB L2703: \n", "#\n", - "# MATLAB L2704: % Specify how we want to perform the analysis\n", "# Specify how we want to perform the analysis\n", - "# MATLAB L2705: sampleRate=1000;\n", "sampleRate = 1000\n", - "# MATLAB L2706: trial=Trial(spikeColl, cc);\n", - "_matlab('trial=Trial(spikeColl, cc);')\n", - "# MATLAB L2707: clear c;\n", "pass\n", - "# MATLAB L2708: % Constant rate throughout\n", "# Constant rate throughout\n", - "# MATLAB L2709: c{1} = TrialConfig({{'Baseline','muConst'}},sampleRate,[],[]);\n", - "_matlab(\"c{1} = TrialConfig({{'Baseline','muConst'}},sampleRate,[],[]);\")\n", - "# MATLAB L2710: c{1}.setName('Baseline');\n", - "_matlab(\"c{1}.setName('Baseline');\")\n", - "# MATLAB L2711: % Constant rate for epoch1 and Constat rate for epoch2 but distinct\n", "# Constant rate for epoch1 and Constat rate for epoch2 but distinct\n", - "# MATLAB L2712: c{2} = TrialConfig({{'Baseline','mu1','mu2'}},sampleRate,[],[]);\n", - "_matlab(\"c{2} = TrialConfig({{'Baseline','mu1','mu2'}},sampleRate,[],[]);\")\n", - "# MATLAB L2713: c{2}.setName('Variable');\n", - "_matlab(\"c{2}.setName('Variable');\")\n", - "# MATLAB L2714: cfgColl= ConfigColl(c);\n", - "_matlab('cfgColl= ConfigColl(c);')\n", - "# MATLAB L2900: % Run the analysis\n", "# Run the analysis\n", - "# MATLAB L3000: results = Analysis.RunAnalysisForAllNeurons(trial,cfgColl,0);\n", - "_matlab('results = Analysis.RunAnalysisForAllNeurons(trial,cfgColl,0);')\n", - "# MATLAB L3001: results{1}.plotResults;\n", - "_matlab('results{1}.plotResults;')\n", - "# MATLAB L3002: results{2}.plotResults;\n", - "_matlab('results{2}.plotResults;')\n", - "# MATLAB L3003: figure;\n", "__tracker.new_figure('figure')\n", "__tracker.new_figure('figure;')\n", - "# MATLAB L3004: subplot(1,2,1); results{1}.lambda.plot;\n", "__tracker.annotate('subplot(1,2,1)')\n", "__tracker.annotate('results{1}.lambda.plot')\n", - "_matlab('subplot(1,2,1); results{1}.lambda.plot;')\n", - "# MATLAB L3005: subplot(1,2,2); results{2}.lambda.plot;\n", "__tracker.annotate('subplot(1,2,2)')\n", "__tracker.annotate('results{2}.lambda.plot')\n", - "_matlab('subplot(1,2,2); results{2}.lambda.plot;')\n", - "# MATLAB L3200: % Compare the results across the two neurons\n", "# Compare the results across the two neurons\n", - "# MATLAB L3300: Summary = FitResSummary(results);\n", - "_matlab('Summary = FitResSummary(results);')\n", - "# MATLAB L3301: Summary.plotSummary;\n", "__tracker.annotate('Summary.plotSummary')\n", - "_matlab('Summary.plotSummary;')\n", - "__tracker.finalize()\n" + "__tracker.finalize()" ] } ], @@ -306,9 +137,7 @@ "nstat": { "expected_figures": 9, "run_group": "full", - "source_file": "/private/tmp/upstream-nstat-matlab/helpfiles/ValidationDataSet.mlx", - "source_type": "mlx", - "strict_section_cell_mapping": true, + "style": "python-example", "topic": "ValidationDataSet" } }, diff --git a/notebooks/mEPSCAnalysis.ipynb b/notebooks/mEPSCAnalysis.ipynb index 6928c570..26beadbe 100644 --- a/notebooks/mEPSCAnalysis.ipynb +++ b/notebooks/mEPSCAnalysis.ipynb @@ -7,7 +7,7 @@ "metadata": {}, "outputs": [], "source": [ - "# AUTO-GENERATED FROM MATLAB mEPSCAnalysis.mlx -- DO NOT EDIT\n", + "# nSTAT-python notebook example: mEPSCAnalysis\n", "from pathlib import Path\n", "import sys\n", "\n", @@ -32,12 +32,7 @@ "OUTPUT_ROOT = REPO_ROOT / \"output\" / \"notebook_images\"\n", "__tracker = FigureTracker(topic='mEPSCAnalysis', output_root=OUTPUT_ROOT, expected_count=4)\n", "\n", - "def _matlab(line: str) -> None:\n", - " \"\"\"Placeholder for untranslated MATLAB syntax.\"\"\"\n", - " _ = line\n", - " return\n", - "\n", - "def _load_matlab_globals(name: str) -> dict[str, object]:\n", + "def _load_example_globals(name: str) -> dict[str, object]:\n", " candidates = [\n", " Path(name),\n", " DATA_DIR / name,\n", @@ -52,16 +47,11 @@ " return {}\n", "\n", "# SECTION 0: Section 0\n", - "# MATLAB L100: % MINIATURE EXCITATORY POST-SYNAPTIC CURRENTS (mEPSCs)\n", "# MINIATURE EXCITATORY POST-SYNAPTIC CURRENTS (mEPSCs)\n", - "# MATLAB L200: % Data from Marnie Phillips marnie.a.phillips@gmail.com This analysis is based on a partial version of the dataset used in\n", "# Data from Marnie Phillips marnie.a.phillips@gmail.com This analysis is based on a partial version of the dataset used in\n", - "# MATLAB L300: % Phillips MA, Lewis LD, Gong J, Constantine-Paton M, Brown EN. 2011 Model-based statistical analysis of miniature synaptic transmission. J Neurophys (under consideration)\n", "# Phillips MA, Lewis LD, Gong J, Constantine-Paton M, Brown EN. 2011 Model-based statistical analysis of miniature synaptic transmission. J Neurophys (under consideration)\n", - "# MATLAB L400: % Author: Iahn Cajigas\n", "# Author: Iahn Cajigas\n", - "# MATLAB L500: % Date: 03/01/2011\n", - "# Date: 03/01/2011\n" + "# Date: 03/01/2011" ] }, { @@ -72,24 +62,15 @@ "outputs": [], "source": [ "# SECTION 1: Data Description\n", - "# MATLAB L700: % epsc2.txt: Event times of selected, constant rate, miniature excitatory post-synaptic currents (mEPSCs) in 0mM magnesium condition]\n", "# epsc2.txt: Event times of selected, constant rate, miniature excitatory post-synaptic currents (mEPSCs) in 0mM magnesium condition]\n", - "# MATLAB L800: % washout1.txt: Variable rate recording: Event times of selected events, beginning approximately 260 seconds after magnesium is first removed.\n", "# washout1.txt: Variable rate recording: Event times of selected events, beginning approximately 260 seconds after magnesium is first removed.\n", - "# MATLAB L900: % washout2.txt: Event times of selected events from the same recording, beginning 745 seconds after magnesium is first removed\n", "# washout2.txt: Event times of selected events from the same recording, beginning 745 seconds after magnesium is first removed\n", - "# MATLAB L1000: % Column headers in the text files explain what each column represents.\n", "# Column headers in the text files explain what each column represents.\n", - "# MATLAB L1100: % Event selection criteria for the \"washout1\" and \"washout2\" condition were:\n", "# Event selection criteria for the \"washout1\" and \"washout2\" condition were:\n", - "# MATLAB L1200: % Amplitude > 10pA\n", "# Amplitude > 10pA\n", - "# MATLAB L1300: % 10-90% rise time < 20ms\n", "# 10-90% rise time < 20ms\n", - "# MATLAB L1400: % For this washout experiment, the recording duration was so long, and there were so many events, that the minimum amplitude threshold was conservative.\n", "# For this washout experiment, the recording duration was so long, and there were so many events, that the minimum amplitude threshold was conservative.\n", - "# MATLAB L1500: % The mean RMS noise was only 1.36pA, and a usual threshold would be 5*RMS = 6.8pA.\n", - "# The mean RMS noise was only 1.36pA, and a usual threshold would be 5*RMS = 6.8pA.\n" + "# The mean RMS noise was only 1.36pA, and a usual threshold would be 5*RMS = 6.8pA." ] }, { @@ -100,57 +81,20 @@ "outputs": [], "source": [ "# SECTION 2: Constant Magnesium Concentration - Constant rate poisson\n", - "# MATLAB L1700: % Under a constant Magnesium concentration, it is seen that the mEPSCs behave as a homogeneous poisson process (constant arrival rate).\n", "# Under a constant Magnesium concentration, it is seen that the mEPSCs behave as a homogeneous poisson process (constant arrival rate).\n", - "# MATLAB L1800: close all;\n", "plt.close(\"all\")\n", - "# MATLAB L1801: epsc2 = importdata('epsc2.txt');\n", - "_matlab(\"epsc2 = importdata('epsc2.txt');\")\n", - "# MATLAB L1802: sampleRate = 1000;\n", "sampleRate = 1000\n", - "# MATLAB L1803: spikeTimes = epsc2.data(:,2)*1/sampleRate; %in seconds\n", - "_matlab('spikeTimes = epsc2.data(:,2)*1/sampleRate; %in seconds')\n", - "# MATLAB L1804: nst = nspikeTrain(spikeTimes);\n", - "_matlab('nst = nspikeTrain(spikeTimes);')\n", - "# MATLAB L1805: time = 0:(1/sampleRate):nst.maxTime;\n", - "_matlab('time = 0:(1/sampleRate):nst.maxTime;')\n", - "# MATLAB L1806: \n", "#\n", - "# MATLAB L1807: % Define Covariates for the analysis\n", "# Define Covariates for the analysis\n", - "# MATLAB L1808: baseline = Covariate(time,ones(length(time),1),'Baseline','time','s','',{'\\mu'});\n", - "_matlab(\"baseline = Covariate(time,ones(length(time),1),'Baseline','time','s','',{'\\\\mu'});\")\n", - "# MATLAB L1809: covarColl = CovColl({baseline});\n", - "_matlab('covarColl = CovColl({baseline});')\n", - "# MATLAB L1810: \n", "#\n", - "# MATLAB L1811: % Create the trial structure\n", "# Create the trial structure\n", - "# MATLAB L1812: spikeColl = nstColl(nst);\n", - "_matlab('spikeColl = nstColl(nst);')\n", - "# MATLAB L1813: trial = Trial(spikeColl,covarColl);\n", - "_matlab('trial = Trial(spikeColl,covarColl);')\n", - "# MATLAB L1814: \n", "#\n", - "# MATLAB L1815: \n", "#\n", - "# MATLAB L1816: % Define how we want to analyze the data\n", "# Define how we want to analyze the data\n", - "# MATLAB L1817: clear tc tcc;\n", "pass\n", - "# MATLAB L1818: tc{1} = TrialConfig({{'Baseline','\\mu'}},sampleRate,[]); tc{1}.setName('Constant Baseline');\n", - "_matlab(\"tc{1} = TrialConfig({{'Baseline','\\\\mu'}},sampleRate,[]); tc{1}.setName('Constant Baseline');\")\n", - "# MATLAB L1819: tcc = ConfigColl(tc);\n", - "_matlab('tcc = ConfigColl(tc);')\n", - "# MATLAB L1820: \n", "#\n", - "# MATLAB L1821: % Perform Analysis (Commented to since data already saved)\n", "# Perform Analysis (Commented to since data already saved)\n", - "# MATLAB L1822: results =Analysis.RunAnalysisForAllNeurons(trial,tcc,0);\n", - "_matlab('results =Analysis.RunAnalysisForAllNeurons(trial,tcc,0);')\n", - "# MATLAB L1823: results.plotResults;\n", - "__tracker.new_figure('results.plotResults')\n", - "_matlab('results.plotResults;')\n" + "__tracker.new_figure('results.plotResults')" ] }, { @@ -161,28 +105,11 @@ "outputs": [], "source": [ "# SECTION 3: Varying Magnesium Concentration - Piecewise Constant rate poisson\n", - "# MATLAB L2100: % When the magnesium concentration of the bath decreased (i.e. magnesium is removed), the rate of mEPSCs begin to increase in frequency. This can be modeled in a many different ways (using the change in Magnesium directly as a model covariate, etc.) Here we approximate the rate as being constant during certain portions of the experiment. These segments can in principle be estimated (using heirarchical Bayesian methods), but here we select them via visual inspection. We compare three models: a constant rate model (from above), a piecewise constant rate model, and a piecewise constant rate model with history.\n", "# When the magnesium concentration of the bath decreased (i.e. magnesium is removed), the rate of mEPSCs begin to increase in frequency. This can be modeled in a many different ways (using the change in Magnesium directly as a model covariate, etc.) Here we approximate the rate as being constant during certain portions of the experiment. These segments can in principle be estimated (using heirarchical Bayesian methods), but here we select them via visual inspection. We compare three models: a constant rate model (from above), a piecewise constant rate model, and a piecewise constant rate model with history.\n", - "# MATLAB L2200: % load the data;\n", "# load the data;\n", - "# MATLAB L2201: washout1 = importdata('washout1.txt');\n", - "_matlab(\"washout1 = importdata('washout1.txt');\")\n", - "# MATLAB L2202: washout2 = importdata('washout2.txt');\n", - "_matlab(\"washout2 = importdata('washout2.txt');\")\n", - "# MATLAB L2203: \n", "#\n", - "# MATLAB L2204: sampleRate = 1000;\n", "sampleRate = 1000\n", - "# MATLAB L2205: % Magnesium removed at t=0\n", - "# Magnesium removed at t=0\n", - "# MATLAB L2206: spikeTimes1 = 260+washout1.data(:,2)*1/sampleRate; %in seconds\n", - "_matlab('spikeTimes1 = 260+washout1.data(:,2)*1/sampleRate; %in seconds')\n", - "# MATLAB L2207: spikeTimes2 = sort(washout2.data(:,2))*1/sampleRate + 745;%in seconds\n", - "_matlab('spikeTimes2 = sort(washout2.data(:,2))*1/sampleRate + 745;%in seconds')\n", - "# MATLAB L2208: nst = nspikeTrain([spikeTimes1; spikeTimes2]);\n", - "_matlab('nst = nspikeTrain([spikeTimes1; spikeTimes2]);')\n", - "# MATLAB L2209: time = 260:(1/sampleRate):nst.maxTime;\n", - "_matlab('time = 260:(1/sampleRate):nst.maxTime;')\n" + "# Magnesium removed at t=0" ] }, { @@ -193,14 +120,10 @@ "outputs": [], "source": [ "# SECTION 4: Data Visualization\n", - "# MATLAB L2500: % Visual inspection of the spike train is used to pick three regions where the firing rate appears to be different. Here we do not estimate where these transitions happen but pick times in an ad-hoc manner.\n", "# Visual inspection of the spike train is used to pick three regions where the firing rate appears to be different. Here we do not estimate where these transitions happen but pick times in an ad-hoc manner.\n", - "# MATLAB L2600: figure;\n", "__tracker.new_figure('figure')\n", "__tracker.new_figure('figure;')\n", - "# MATLAB L2601: nst.plot;\n", - "__tracker.annotate('nst.plot')\n", - "_matlab('nst.plot;')\n" + "__tracker.annotate('nst.plot')" ] }, { @@ -211,50 +134,13 @@ "outputs": [], "source": [ "# SECTION 5: Define Covariates for the analysis\n", - "# MATLAB L2900: timeInd1 =find(time<495,1,'last'); %0-495sec first constant rate\n", - "_matlab(\"timeInd1 =find(time<495,1,'last'); %0-495sec first constant rate\")\n", - "# MATLAB L2901: timeInd2 =find(time<765,1,'last'); %495-765 second constant rate epoch\n", - "_matlab(\"timeInd2 =find(time<765,1,'last'); %495-765 second constant rate epoch\")\n", - "# MATLAB L2902: %765 onwards third constant rate\n", "# 765 onwards third constant rate\n", - "# MATLAB L2903: %epoch\n", "# epoch\n", - "# MATLAB L2904: constantRate = ones(length(time),1);\n", - "_matlab('constantRate = ones(length(time),1);')\n", - "# MATLAB L2905: rate1 = zeros(length(time),1); rate1(1:timeInd1)=1;\n", - "_matlab('rate1 = zeros(length(time),1); rate1(1:timeInd1)=1;')\n", - "# MATLAB L2906: rate2 = zeros(length(time),1); rate2((timeInd1+1):timeInd2)=1;\n", - "_matlab('rate2 = zeros(length(time),1); rate2((timeInd1+1):timeInd2)=1;')\n", - "# MATLAB L2907: rate3 = zeros(length(time),1); rate3((timeInd2+1):end)=1;\n", - "_matlab('rate3 = zeros(length(time),1); rate3((timeInd2+1):end)=1;')\n", - "# MATLAB L2908: baseline = Covariate(time,[constantRate,rate1, rate2, rate3],'Baseline','time','s','',{'\\mu','\\mu_{1}','\\mu_{2}','\\mu_{3}'});\n", - "_matlab(\"baseline = Covariate(time,[constantRate,rate1, rate2, rate3],'Baseline','time','s','',{'\\\\mu','\\\\mu_{1}','\\\\mu_{2}','\\\\mu_{3}'});\")\n", - "# MATLAB L2909: covarColl = CovColl({baseline});\n", - "_matlab('covarColl = CovColl({baseline});')\n", - "# MATLAB L2910: \n", "#\n", - "# MATLAB L2911: % Create the trial structure\n", "# Create the trial structure\n", - "# MATLAB L2912: spikeColl = nstColl(nst);\n", - "_matlab('spikeColl = nstColl(nst);')\n", - "# MATLAB L2913: trial = Trial(spikeColl,covarColl);\n", - "_matlab('trial = Trial(spikeColl,covarColl);')\n", - "# MATLAB L2914: \n", "#\n", - "# MATLAB L2915: %30ms history in logarithmic spacing (chosen after using\n", "# 30ms history in logarithmic spacing (chosen after using\n", - "# MATLAB L2916: %Analysis.computeHistLagForAll for various window lengths)\n", - "# Analysis.computeHistLagForAll for various window lengths)\n", - "# MATLAB L2917: maxWindow=.3; numWindows=20;\n", - "_matlab('maxWindow=.3; numWindows=20;')\n", - "# MATLAB L2918: delta=1/sampleRate;\n", - "_matlab('delta=1/sampleRate;')\n", - "# MATLAB L2919: windowTimes =unique(round([0 logspace(log10(delta),...\n", - "_matlab('windowTimes =unique(round([0 logspace(log10(delta),...')\n", - "# MATLAB L2920: log10(maxWindow),numWindows)]*sampleRate)./sampleRate);\n", - "_matlab('log10(maxWindow),numWindows)]*sampleRate)./sampleRate);')\n", - "# MATLAB L2921: windowTimes = windowTimes(1:11);\n", - "_matlab('windowTimes = windowTimes(1:11);')\n" + "# Analysis.computeHistLagForAll for various window lengths)" ] }, { @@ -265,16 +151,8 @@ "outputs": [], "source": [ "# SECTION 6: Define how we want to analyze the data\n", - "# MATLAB L3200: clear tc tcc;\n", "pass\n", - "# MATLAB L3201: tc{1} = TrialConfig({{'Baseline','\\mu'}},sampleRate,[]); tc{1}.setName('Constant Baseline');\n", - "_matlab(\"tc{1} = TrialConfig({{'Baseline','\\\\mu'}},sampleRate,[]); tc{1}.setName('Constant Baseline');\")\n", - "# MATLAB L3202: tc{2} = TrialConfig({{'Baseline','\\mu_{1}','\\mu_{2}','\\mu_{3}'}},sampleRate,[]); tc{2}.setName('Diff Baseline');\n", - "_matlab(\"tc{2} = TrialConfig({{'Baseline','\\\\mu_{1}','\\\\mu_{2}','\\\\mu_{3}'}},sampleRate,[]); tc{2}.setName('Diff Baseline');\")\n", - "# MATLAB L3203: % tc{3} = TrialConfig({{'Baseline','\\mu_{1}','\\mu_{2}','\\mu_{3}'}},sampleRate,windowTimes); tc{3}.setName('Diff Baseline+Hist');\n", - "# tc{3} = TrialConfig({{'Baseline','\\mu_{1}','\\mu_{2}','\\mu_{3}'}},sampleRate,windowTimes); tc{3}.setName('Diff Baseline+Hist');\n", - "# MATLAB L3204: tcc = ConfigColl(tc);\n", - "_matlab('tcc = ConfigColl(tc);')\n" + "# tc{3} = TrialConfig({{'Baseline','\\mu_{1}','\\mu_{2}','\\mu_{3}'}},sampleRate,windowTimes); tc{3}.setName('Diff Baseline+Hist');" ] }, { @@ -285,18 +163,9 @@ "outputs": [], "source": [ "# SECTION 7: Perform Analysis\n", - "# MATLAB L3500: % We see that the piece-wise constant rate model (with and without history, outperform the constant baseline model in terms of AIC, BIC, and KS-statistic. While addition of the history effect yields a model that falls within the 95% confidence interval of the KS plot, it results in increases of the AIC and BIC because of the increased number of parameters.\n", "# We see that the piece-wise constant rate model (with and without history, outperform the constant baseline model in terms of AIC, BIC, and KS-statistic. While addition of the history effect yields a model that falls within the 95% confidence interval of the KS plot, it results in increases of the AIC and BIC because of the increased number of parameters.\n", - "# MATLAB L3600: results =Analysis.RunAnalysisForAllNeurons(trial,tcc,0);\n", - "_matlab('results =Analysis.RunAnalysisForAllNeurons(trial,tcc,0);')\n", - "# MATLAB L3601: results.plotResults;\n", "__tracker.annotate('results.plotResults')\n", - "_matlab('results.plotResults;')\n", - "# MATLAB L3602: Summary = FitResSummary(results);\n", - "_matlab('Summary = FitResSummary(results);')\n", - "# MATLAB L3603: Summary.plotSummary;\n", - "__tracker.annotate('Summary.plotSummary')\n", - "_matlab('Summary.plotSummary;')\n" + "__tracker.annotate('Summary.plotSummary')" ] }, { @@ -307,113 +176,60 @@ "outputs": [], "source": [ "# SECTION 8: Decode Rate using Point Process Filter\n", - "# MATLAB L3900: % clear lambdaCIF;\n", "# clear lambdaCIF;\n", - "# MATLAB L3901: % delta = .001;\n", "# delta = .001;\n", - "# MATLAB L3902: %\n", "#\n", - "# MATLAB L3903: % washout1 = importdata('washout1.txt');\n", "# washout1 = importdata('washout1.txt');\n", - "# MATLAB L3904: % washout2 = importdata('washout2.txt');\n", "# washout2 = importdata('washout2.txt');\n", - "# MATLAB L3905: %\n", "#\n", - "# MATLAB L3906: % sampleRate = 1000;\n", "# sampleRate = 1000;\n", - "# MATLAB L3907: % % Magnesium removed at t=0\n", "# % Magnesium removed at t=0\n", - "# MATLAB L3908: % spikeTimes1 = 260+washout1.data(:,2)*1/sampleRate; %in seconds\n", "# spikeTimes1 = 260+washout1.data(:,2)*1/sampleRate; %in seconds\n", - "# MATLAB L3909: % spikeTimes2 = sort(washout2.data(:,2))*1/sampleRate + 745;%in seconds\n", "# spikeTimes2 = sort(washout2.data(:,2))*1/sampleRate + 745;%in seconds\n", - "# MATLAB L3910: % nst = nspikeTrain([spikeTimes1; spikeTimes2]);\n", "# nst = nspikeTrain([spikeTimes1; spikeTimes2]);\n", - "# MATLAB L3911: % time = 260:(1/sampleRate):nst.maxTime;\n", "# time = 260:(1/sampleRate):nst.maxTime;\n", - "# MATLAB L3912: % spikeColl = nstColl(nst);\n", "# spikeColl = nstColl(nst);\n", - "# MATLAB L3913: %\n", "#\n", - "# MATLAB L3914: % clear lambdaCIF;\n", "# clear lambdaCIF;\n", - "# MATLAB L3915: % lambdaCIF = CIF([1],{'mu'},{'mu'},'poisson');\n", "# lambdaCIF = CIF([1],{'mu'},{'mu'},'poisson');\n", - "# MATLAB L3916: % spikeColl.resample(1/delta);\n", "# spikeColl.resample(1/delta);\n", - "# MATLAB L3917: % dN=spikeColl.dataToMatrix;\n", "# dN=spikeColl.dataToMatrix;\n", - "# MATLAB L3918: % Q=.001;\n", "# Q=.001;\n", - "# MATLAB L3919: % Px0=.1; A=1;\n", "# Px0=.1; A=1;\n", - "# MATLAB L3920: % [x_p, Pe_p, x_u, Pe_u] = CIF.PPDecodeFilter(A, Q, Px0, dN',lambdaCIF);\n", "# [x_p, Pe_p, x_u, Pe_u] = CIF.PPDecodeFilter(A, Q, Px0, dN',lambdaCIF);\n", - "# MATLAB L3921: % figure;\n", "# figure;\n", - "# MATLAB L3922: % tNew = 260:delta:(length(x_p(1:end-1))*delta+260);\n", "# tNew = 260:delta:(length(x_p(1:end-1))*delta+260);\n", - "# MATLAB L3923: % plot(tNew,exp(x_p)./delta);\n", "# plot(tNew,exp(x_p)./delta);\n", - "# MATLAB L3924: %\n", "#\n", - "# MATLAB L3925: % %%\n", "# %%\n", - "# MATLAB L3926: % close all;\n", "# close all;\n", - "# MATLAB L3927: % N=30000; A=1; B=ones(1,N)./N;\n", "# N=30000; A=1; B=ones(1,N)./N;\n", - "# MATLAB L3928: % xfilt = filtfilt(B,A,x_p);\n", "# xfilt = filtfilt(B,A,x_p);\n", - "# MATLAB L3929: % figure;\n", "# figure;\n", - "# MATLAB L3930: % plot(tNew,x_p,'-.b');\n", "# plot(tNew,x_p,'-.b');\n", - "# MATLAB L3931: % hold on; plot(tNew,xfilt,'k','Linewidth',3);\n", "# hold on; plot(tNew,xfilt,'k','Linewidth',3);\n", - "# MATLAB L3932: % %%\n", "# %%\n", - "# MATLAB L3933: % close all;\n", "# close all;\n", - "# MATLAB L3934: % figure;\n", "# figure;\n", - "# MATLAB L3935: % index = find(tNew<280,1,'last');\n", "# index = find(tNew<280,1,'last');\n", - "# MATLAB L3936: % subplot(2,1,1);\n", "# subplot(2,1,1);\n", - "# MATLAB L3937: % plot(tNew(index:end),x_p(index:end),'-.b'); hold on;\n", "# plot(tNew(index:end),x_p(index:end),'-.b'); hold on;\n", - "# MATLAB L3938: % plot(tNew(index:end),xfilt(index:end),'k','Linewidth',3);\n", "# plot(tNew(index:end),xfilt(index:end),'k','Linewidth',3);\n", - "# MATLAB L3939: % xlabel('time [s]');\n", "# xlabel('time [s]');\n", - "# MATLAB L3940: % ylabel('\\mu');\n", "# ylabel('\\mu');\n", - "# MATLAB L3941: % axis tight;\n", "# axis tight;\n", - "# MATLAB L3942: % v=axis;\n", "# v=axis;\n", - "# MATLAB L3943: % axis([v(1) v(2) -9 -5]);\n", "# axis([v(1) v(2) -9 -5]);\n", - "# MATLAB L3944: %\n", "#\n", - "# MATLAB L3945: % subplot(2,1,2);\n", "# subplot(2,1,2);\n", - "# MATLAB L3946: % plot(tNew(index:end),exp(x_p(index:end))./delta,'-.b'); hold on;\n", "# plot(tNew(index:end),exp(x_p(index:end))./delta,'-.b'); hold on;\n", - "# MATLAB L3947: % plot(tNew(index:end),exp(xfilt(index:end))./delta,'k','Linewidth',3);\n", "# plot(tNew(index:end),exp(xfilt(index:end))./delta,'k','Linewidth',3);\n", - "# MATLAB L3948: % axis tight;\n", "# axis tight;\n", - "# MATLAB L3949: % v=axis;\n", "# v=axis;\n", - "# MATLAB L3950: % axis([v(1) v(2) 0 5]);\n", "# axis([v(1) v(2) 0 5]);\n", - "# MATLAB L3951: % xlabel('time [s]');\n", "# xlabel('time [s]');\n", - "# MATLAB L3952: % ylabel('\\lambda(t) [Hz]');\n", "# ylabel('\\lambda(t) [Hz]');\n", - "__tracker.finalize()\n" + "__tracker.finalize()" ] } ], @@ -424,9 +240,7 @@ "nstat": { "expected_figures": 4, "run_group": "full", - "source_file": "/private/tmp/upstream-nstat-matlab/helpfiles/mEPSCAnalysis.mlx", - "source_type": "mlx", - "strict_section_cell_mapping": true, + "style": "python-example", "topic": "mEPSCAnalysis" } }, diff --git a/notebooks/nSTATPaperExamples.ipynb b/notebooks/nSTATPaperExamples.ipynb index 1aca2de0..309ac5a0 100644 --- a/notebooks/nSTATPaperExamples.ipynb +++ b/notebooks/nSTATPaperExamples.ipynb @@ -7,7 +7,7 @@ "metadata": {}, "outputs": [], "source": [ - "# AUTO-GENERATED FROM MATLAB nSTATPaperExamples.mlx -- DO NOT EDIT\n", + "# nSTAT-python notebook example: nSTATPaperExamples\n", "from pathlib import Path\n", "import sys\n", "\n", @@ -32,12 +32,7 @@ "OUTPUT_ROOT = REPO_ROOT / \"output\" / \"notebook_images\"\n", "__tracker = FigureTracker(topic='nSTATPaperExamples', output_root=OUTPUT_ROOT, expected_count=25)\n", "\n", - "def _matlab(line: str) -> None:\n", - " \"\"\"Placeholder for untranslated MATLAB syntax.\"\"\"\n", - " _ = line\n", - " return\n", - "\n", - "def _load_matlab_globals(name: str) -> dict[str, object]:\n", + "def _load_example_globals(name: str) -> dict[str, object]:\n", " candidates = [\n", " Path(name),\n", " DATA_DIR / name,\n", @@ -52,12 +47,9 @@ " return {}\n", "\n", "# SECTION 0: Section 0\n", - "# MATLAB L100: % nSTAT J. Neuroscience Methods Paper Examples\n", "# nSTAT J. Neuroscience Methods Paper Examples\n", - "# MATLAB L200: % Author: Iahn Cajigas\n", "# Author: Iahn Cajigas\n", - "# MATLAB L300: % Date: 01/04/2012\n", - "# Date: 01/04/2012\n" + "# Date: 01/04/2012" ] }, { @@ -68,12 +60,9 @@ "outputs": [], "source": [ "# SECTION 1: Experiment 1\n", - "# MATLAB L500: % MINIATURE EXCITATORY POST-SYNAPTIC CURRENTS (mEPSCs) Data from Marnie Phillips marnie.a.phillips@gmail.com This analysis is based on a partial version of the dataset used in\n", "# MINIATURE EXCITATORY POST-SYNAPTIC CURRENTS (mEPSCs) Data from Marnie Phillips marnie.a.phillips@gmail.com This analysis is based on a partial version of the dataset used in\n", - "# MATLAB L600: % Phillips MA, Lewis LD, Gong J, Constantine-Paton M, Brown EN. 2011 Model-based statistical analysis of miniature synaptic transmission. J Neurophys (under consideration)\n", "# Phillips MA, Lewis LD, Gong J, Constantine-Paton M, Brown EN. 2011 Model-based statistical analysis of miniature synaptic transmission. J Neurophys (under consideration)\n", - "# MATLAB L700: % Date: 03/01/2011\n", - "# Date: 03/01/2011\n" + "# Date: 03/01/2011" ] }, { @@ -84,132 +73,31 @@ "outputs": [], "source": [ "# SECTION 2: Constant Magnesium Concentration - Constant rate poisson\n", - "# MATLAB L900: % Under a constant Magnesium concentration, it is seen that the mEPSCs behave as a homogeneous poisson process (constant arrival rate).\n", "# Under a constant Magnesium concentration, it is seen that the mEPSCs behave as a homogeneous poisson process (constant arrival rate).\n", - "# MATLAB L1000: close all; clear all;\n", "plt.close(\"all\")\n", - "# MATLAB L1001: [dataDir,mEPSCDir,explicitStimulusDir,psthDir,placeCellDataDir] = ...\n", - "_matlab('[dataDir,mEPSCDir,explicitStimulusDir,psthDir,placeCellDataDir] = ...')\n", - "# MATLAB L1002: getPaperDataDirs();\n", - "_matlab('getPaperDataDirs();')\n", - "# MATLAB L1003: nSTATRootDir = fileparts(dataDir);\n", - "_matlab('nSTATRootDir = fileparts(dataDir);')\n", - "# MATLAB L1004: if exist(nSTATRootDir,'dir') == 7 && ~strcmp(pwd,nSTATRootDir)\n", - "_matlab(\"if exist(nSTATRootDir,'dir') == 7 && ~strcmp(pwd,nSTATRootDir)\")\n", - "# MATLAB L1005: cd(nSTATRootDir);\n", - "_matlab('cd(nSTATRootDir);')\n", - "# MATLAB L1006: end\n", - "_matlab('end')\n", - "# MATLAB L1007: epsc2 = importdata(fullfile(mEPSCDir,'epsc2.txt'));\n", - "_matlab(\"epsc2 = importdata(fullfile(mEPSCDir,'epsc2.txt'));\")\n", - "# MATLAB L1008: sampleRate = 1000;\n", "sampleRate = 1000\n", - "# MATLAB L1009: spikeTimes = epsc2.data(:,2)*1/sampleRate; %in seconds\n", - "_matlab('spikeTimes = epsc2.data(:,2)*1/sampleRate; %in seconds')\n", - "# MATLAB L1010: nstConst = nspikeTrain(spikeTimes);\n", - "_matlab('nstConst = nspikeTrain(spikeTimes);')\n", - "# MATLAB L1011: time = 0:(1/sampleRate):nstConst.maxTime;\n", - "_matlab('time = 0:(1/sampleRate):nstConst.maxTime;')\n", - "# MATLAB L1012: \n", "#\n", - "# MATLAB L1013: \n", "#\n", - "# MATLAB L1014: % Define Covariates for the analysis\n", "# Define Covariates for the analysis\n", - "# MATLAB L1015: baseline = Covariate(time,ones(length(time),1),'Baseline','time','s',...\n", - "_matlab(\"baseline = Covariate(time,ones(length(time),1),'Baseline','time','s',...\")\n", - "# MATLAB L1016: '',{'\\mu'});\n", - "_matlab(\"'',{'\\\\mu'});\")\n", - "# MATLAB L1017: covarColl = CovColl({baseline});\n", - "_matlab('covarColl = CovColl({baseline});')\n", - "# MATLAB L1018: \n", - "#\n", - "# MATLAB L1019: % Create the trial structure\n", + "#\n", "# Create the trial structure\n", - "# MATLAB L1020: spikeColl = nstColl(nstConst);\n", - "_matlab('spikeColl = nstColl(nstConst);')\n", - "# MATLAB L1021: trial = Trial(spikeColl,covarColl);\n", - "_matlab('trial = Trial(spikeColl,covarColl);')\n", - "# MATLAB L1022: \n", "#\n", - "# MATLAB L1023: \n", "#\n", - "# MATLAB L1024: % Define how we want to analyze the data\n", "# Define how we want to analyze the data\n", - "# MATLAB L1025: clear tc tcc;\n", "pass\n", - "# MATLAB L1026: tc{1} = TrialConfig({{'Baseline','\\mu'}},sampleRate,[]);\n", - "_matlab(\"tc{1} = TrialConfig({{'Baseline','\\\\mu'}},sampleRate,[]);\")\n", - "# MATLAB L1027: tc{1}.setName('Constant Baseline');\n", - "_matlab(\"tc{1}.setName('Constant Baseline');\")\n", - "# MATLAB L1028: tcc = ConfigColl(tc);\n", - "_matlab('tcc = ConfigColl(tc);')\n", - "# MATLAB L1029: \n", - "#\n", - "# MATLAB L1030: % Perform Analysis (Commented to since data already saved)\n", + "#\n", "# Perform Analysis (Commented to since data already saved)\n", - "# MATLAB L1031: results =Analysis.RunAnalysisForAllNeurons(trial,tcc,0);\n", - "_matlab('results =Analysis.RunAnalysisForAllNeurons(trial,tcc,0);')\n", - "# MATLAB L1032: % h=results.plotResults;\n", "# h=results.plotResults;\n", - "# MATLAB L1033: close all;\n", "plt.close(\"all\")\n", - "# MATLAB L1034: scrsz = get(0,'ScreenSize');\n", - "_matlab(\"scrsz = get(0,'ScreenSize');\")\n", - "# MATLAB L1035: results.lambda.setDataLabels({'\\lambda_{const}'});\n", - "_matlab(\"results.lambda.setDataLabels({'\\\\lambda_{const}'});\")\n", - "# MATLAB L1036: h=figure('OuterPosition',[scrsz(3)*.01 scrsz(4)*.04 ...\n", "__tracker.new_figure(\"h=figure('OuterPosition',[scrsz(3)*.01 scrsz(4)*.04 ...\")\n", - "_matlab(\"h=figure('OuterPosition',[scrsz(3)*.01 scrsz(4)*.04 ...\")\n", - "# MATLAB L1037: scrsz(3)*.98 scrsz(4)*.95]);\n", - "_matlab('scrsz(3)*.98 scrsz(4)*.95]);')\n", - "# MATLAB L1038: \n", "#\n", - "# MATLAB L1039: subplot(2,2,1); spikeColl.plot;\n", "__tracker.annotate('subplot(2,2,1)')\n", "__tracker.annotate('spikeColl.plot')\n", - "_matlab('subplot(2,2,1); spikeColl.plot;')\n", - "# MATLAB L1040: title({'Neural Raster with constant Mg^{2+} Concentration'},...\n", - "_matlab(\"title({'Neural Raster with constant Mg^{2+} Concentration'},...\")\n", - "# MATLAB L1041: 'FontWeight','bold',...\n", - "_matlab(\"'FontWeight','bold',...\")\n", - "# MATLAB L1042: 'Fontsize',12,...\n", - "_matlab(\"'Fontsize',12,...\")\n", - "# MATLAB L1043: 'FontName','Arial');\n", - "_matlab(\"'FontName','Arial');\")\n", - "# MATLAB L1044: hx=xlabel('time [s]','Interpreter','none');\n", - "_matlab(\"hx=xlabel('time [s]','Interpreter','none');\")\n", - "# MATLAB L1045: hy=ylabel('mEPSCs','Interpreter','none');\n", - "_matlab(\"hy=ylabel('mEPSCs','Interpreter','none');\")\n", - "# MATLAB L1046: set(gca,'yTick',[0 1]);\n", - "_matlab(\"set(gca,'yTick',[0 1]);\")\n", - "# MATLAB L1047: set([hx, hy],'FontName', 'Arial','FontSize',12,'FontWeight','bold');\n", - "_matlab(\"set([hx, hy],'FontName', 'Arial','FontSize',12,'FontWeight','bold');\")\n", - "# MATLAB L1048: subplot(2,2,3); results.KSPlot;\n", "__tracker.annotate('subplot(2,2,3)')\n", "__tracker.annotate('results.KSPlot')\n", - "_matlab('subplot(2,2,3); results.KSPlot;')\n", - "# MATLAB L1049: subplot(2,2,2); results.plotInvGausTrans;\n", "__tracker.annotate('subplot(2,2,2)')\n", - "_matlab('subplot(2,2,2); results.plotInvGausTrans;')\n", - "# MATLAB L1050: subplot(2,2,4); results.lambda.plot([],{{' ''b'' ,''Linewidth'',2'}});\n", "__tracker.annotate('subplot(2,2,4)')\n", - "__tracker.annotate(\"results.lambda.plot([],{{' ''b'' ,''Linewidth'',2'}})\")\n", - "_matlab(\"subplot(2,2,4); results.lambda.plot([],{{' ''b'' ,''Linewidth'',2'}});\")\n", - "# MATLAB L1051: hx=xlabel('time [s]','Interpreter','none');\n", - "_matlab(\"hx=xlabel('time [s]','Interpreter','none');\")\n", - "# MATLAB L1052: hy=get(gca,'YLabel');\n", - "_matlab(\"hy=get(gca,'YLabel');\")\n", - "# MATLAB L1053: set([hx hy],'FontName', 'Arial','FontSize',12,'FontWeight','bold');\n", - "_matlab(\"set([hx hy],'FontName', 'Arial','FontSize',12,'FontWeight','bold');\")\n", - "# MATLAB L1054: h_legend = legend('\\lambda_{const}','Location','NorthEast');\n", - "_matlab(\"h_legend = legend('\\\\lambda_{const}','Location','NorthEast');\")\n", - "# MATLAB L1055: pos = get(h_legend,'position');\n", - "_matlab(\"pos = get(h_legend,'position');\")\n", - "# MATLAB L1056: set(h_legend, 'position',[pos(1)+.05 pos(2) pos(3:4)]);\n", - "_matlab(\"set(h_legend, 'position',[pos(1)+.05 pos(2) pos(3:4)]);\")\n", - "# MATLAB L1057: set(h_legend,'FontSize',14)\n", - "_matlab(\"set(h_legend,'FontSize',14)\")\n" + "__tracker.annotate(\"results.lambda.plot([],{{' ''b'' ,''Linewidth'',2'}})\")" ] }, { @@ -220,30 +108,12 @@ "outputs": [], "source": [ "# SECTION 3: Varying Magnesium Concentration - Piecewise Constant rate poisson\n", - "# MATLAB L1300: % When the magnesium concentration of the bath decreased (i.e. magnesium is removed), the rate of mEPSCs begin to increase in frequency. This can be modeled in a many different ways (using the change in Magnesium directly as a model covariate, etc.) Here we approximate the rate as being constant during certain portions of the experiment. These segments can in principle be estimated (using heirarchical Bayesian methods), but here we select them via visual inspection. We compare three models: a constant rate model (from above), a piecewise constant rate model, and a piecewise constant rate model with history.\n", "# When the magnesium concentration of the bath decreased (i.e. magnesium is removed), the rate of mEPSCs begin to increase in frequency. This can be modeled in a many different ways (using the change in Magnesium directly as a model covariate, etc.) Here we approximate the rate as being constant during certain portions of the experiment. These segments can in principle be estimated (using heirarchical Bayesian methods), but here we select them via visual inspection. We compare three models: a constant rate model (from above), a piecewise constant rate model, and a piecewise constant rate model with history.\n", - "# MATLAB L1400: close all;\n", "plt.close(\"all\")\n", - "# MATLAB L1401: % load the data;\n", "# load the data;\n", - "# MATLAB L1402: washout1 = importdata(fullfile(mEPSCDir,'washout1.txt'));\n", - "_matlab(\"washout1 = importdata(fullfile(mEPSCDir,'washout1.txt'));\")\n", - "# MATLAB L1403: washout2 = importdata(fullfile(mEPSCDir,'washout2.txt'));\n", - "_matlab(\"washout2 = importdata(fullfile(mEPSCDir,'washout2.txt'));\")\n", - "# MATLAB L1404: \n", "#\n", - "# MATLAB L1405: sampleRate = 1000;\n", "sampleRate = 1000\n", - "# MATLAB L1406: % Magnesium removed at t=0\n", - "# Magnesium removed at t=0\n", - "# MATLAB L1407: spikeTimes1 = 260+washout1.data(:,2)*1/sampleRate; %in seconds\n", - "_matlab('spikeTimes1 = 260+washout1.data(:,2)*1/sampleRate; %in seconds')\n", - "# MATLAB L1408: spikeTimes2 = sort(washout2.data(:,2))*1/sampleRate + 745;%in seconds\n", - "_matlab('spikeTimes2 = sort(washout2.data(:,2))*1/sampleRate + 745;%in seconds')\n", - "# MATLAB L1409: nst = nspikeTrain([spikeTimes1; spikeTimes2]);\n", - "_matlab('nst = nspikeTrain([spikeTimes1; spikeTimes2]);')\n", - "# MATLAB L1410: time = 260:(1/sampleRate):nst.maxTime;\n", - "_matlab('time = 260:(1/sampleRate):nst.maxTime;')\n" + "# Magnesium removed at t=0" ] }, { @@ -254,55 +124,14 @@ "outputs": [], "source": [ "# SECTION 4: Data Visualization\n", - "# MATLAB L1700: % Visual inspection of the spike train is used to pick three regions where the firing rate appears to be different. Here we do not estimate where these transitions happen but pick times in an ad-hoc manner.\n", "# Visual inspection of the spike train is used to pick three regions where the firing rate appears to be different. Here we do not estimate where these transitions happen but pick times in an ad-hoc manner.\n", - "# MATLAB L1800: scrsz = get(0,'ScreenSize');\n", - "_matlab(\"scrsz = get(0,'ScreenSize');\")\n", - "# MATLAB L1801: h=figure('OuterPosition',[scrsz(3)*.01 scrsz(4)*.04 scrsz(3)*.6 ...\n", "__tracker.new_figure(\"h=figure('OuterPosition',[scrsz(3)*.01 scrsz(4)*.04 scrsz(3)*.6 ...\")\n", - "_matlab(\"h=figure('OuterPosition',[scrsz(3)*.01 scrsz(4)*.04 scrsz(3)*.6 ...\")\n", - "# MATLAB L1802: scrsz(4)*.9]);\n", - "_matlab('scrsz(4)*.9]);')\n", - "# MATLAB L1803: \n", "#\n", - "# MATLAB L1804: subplot(2,1,1);\n", "__tracker.annotate('subplot(2,1,1)')\n", - "_matlab('subplot(2,1,1);')\n", - "# MATLAB L1805: nstConst.plot; set(gca,'yTick',[0 1]); hy=ylabel('mEPSCs');\n", "__tracker.annotate('nstConst.plot')\n", - "_matlab(\"nstConst.plot; set(gca,'yTick',[0 1]); hy=ylabel('mEPSCs');\")\n", - "# MATLAB L1806: title({'Neural Raster with constant Mg^{2+} Concentration'},...\n", - "_matlab(\"title({'Neural Raster with constant Mg^{2+} Concentration'},...\")\n", - "# MATLAB L1807: 'FontWeight','bold',...\n", - "_matlab(\"'FontWeight','bold',...\")\n", - "# MATLAB L1808: 'Fontsize',12,...\n", - "_matlab(\"'Fontsize',12,...\")\n", - "# MATLAB L1809: 'FontName','Arial');\n", - "_matlab(\"'FontName','Arial');\")\n", - "# MATLAB L1810: hx=get(gca,'XLabel');\n", - "_matlab(\"hx=get(gca,'XLabel');\")\n", - "# MATLAB L1811: set([hx,hy],'FontName', 'Arial','FontSize',12,'FontWeight','bold');\n", - "_matlab(\"set([hx,hy],'FontName', 'Arial','FontSize',12,'FontWeight','bold');\")\n", - "# MATLAB L1812: \n", - "#\n", - "# MATLAB L1813: subplot(2,1,2);\n", + "#\n", "__tracker.annotate('subplot(2,1,2)')\n", - "_matlab('subplot(2,1,2);')\n", - "# MATLAB L1814: nst.plot; set(gca,'yTick',[0 1]); hy=ylabel('mEPSCs');\n", - "__tracker.annotate('nst.plot')\n", - "_matlab(\"nst.plot; set(gca,'yTick',[0 1]); hy=ylabel('mEPSCs');\")\n", - "# MATLAB L1815: title({'Neural Raster with decreasing Mg^{2+} Concentration'},...\n", - "_matlab(\"title({'Neural Raster with decreasing Mg^{2+} Concentration'},...\")\n", - "# MATLAB L1816: 'FontWeight','bold',...\n", - "_matlab(\"'FontWeight','bold',...\")\n", - "# MATLAB L1817: 'Fontsize',12,...\n", - "_matlab(\"'Fontsize',12,...\")\n", - "# MATLAB L1818: 'FontName','Arial');\n", - "_matlab(\"'FontName','Arial');\")\n", - "# MATLAB L1819: hx=get(gca,'XLabel');\n", - "_matlab(\"hx=get(gca,'XLabel');\")\n", - "# MATLAB L1820: set([hx,hy],'FontName', 'Arial','FontSize',12,'FontWeight','bold');\n", - "_matlab(\"set([hx,hy],'FontName', 'Arial','FontSize',12,'FontWeight','bold');\")\n" + "__tracker.annotate('nst.plot')" ] }, { @@ -313,52 +142,13 @@ "outputs": [], "source": [ "# SECTION 5: Define Covariates for the analysis\n", - "# MATLAB L2100: timeInd1 =find(time<495,1,'last'); %0-495sec first constant rate\n", - "_matlab(\"timeInd1 =find(time<495,1,'last'); %0-495sec first constant rate\")\n", - "# MATLAB L2101: timeInd2 =find(time<765,1,'last'); %495-765 second constant rate epoch\n", - "_matlab(\"timeInd2 =find(time<765,1,'last'); %495-765 second constant rate epoch\")\n", - "# MATLAB L2102: %765 onwards third constant rate\n", "# 765 onwards third constant rate\n", - "# MATLAB L2103: %epoch\n", "# epoch\n", - "# MATLAB L2104: constantRate = ones(length(time),1);\n", - "_matlab('constantRate = ones(length(time),1);')\n", - "# MATLAB L2105: rate1 = zeros(length(time),1); rate1(1:timeInd1)=1;\n", - "_matlab('rate1 = zeros(length(time),1); rate1(1:timeInd1)=1;')\n", - "# MATLAB L2106: rate2 = zeros(length(time),1); rate2((timeInd1+1):timeInd2)=1;\n", - "_matlab('rate2 = zeros(length(time),1); rate2((timeInd1+1):timeInd2)=1;')\n", - "# MATLAB L2107: rate3 = zeros(length(time),1); rate3((timeInd2+1):end)=1;\n", - "_matlab('rate3 = zeros(length(time),1); rate3((timeInd2+1):end)=1;')\n", - "# MATLAB L2108: baseline = Covariate(time,[constantRate,rate1, rate2, rate3],...\n", - "_matlab('baseline = Covariate(time,[constantRate,rate1, rate2, rate3],...')\n", - "# MATLAB L2109: 'Baseline','time','s','',{'\\mu','\\mu_{1}','\\mu_{2}','\\mu_{3}'});\n", - "_matlab(\"'Baseline','time','s','',{'\\\\mu','\\\\mu_{1}','\\\\mu_{2}','\\\\mu_{3}'});\")\n", - "# MATLAB L2110: covarColl = CovColl({baseline});\n", - "_matlab('covarColl = CovColl({baseline});')\n", - "# MATLAB L2111: \n", - "#\n", - "# MATLAB L2112: % Create the trial structure\n", + "#\n", "# Create the trial structure\n", - "# MATLAB L2113: spikeColl = nstColl(nst);\n", - "_matlab('spikeColl = nstColl(nst);')\n", - "# MATLAB L2114: trial = Trial(spikeColl,covarColl);\n", - "_matlab('trial = Trial(spikeColl,covarColl);')\n", - "# MATLAB L2115: \n", "#\n", - "# MATLAB L2116: %30ms history in logarithmic spacing (chosen after using\n", "# 30ms history in logarithmic spacing (chosen after using\n", - "# MATLAB L2117: %Analysis.computeHistLagForAll for various window lengths)\n", - "# Analysis.computeHistLagForAll for various window lengths)\n", - "# MATLAB L2118: maxWindow=.3; numWindows=20;\n", - "_matlab('maxWindow=.3; numWindows=20;')\n", - "# MATLAB L2119: delta=1/sampleRate;\n", - "_matlab('delta=1/sampleRate;')\n", - "# MATLAB L2120: windowTimes =unique(round([0 logspace(log10(delta),...\n", - "_matlab('windowTimes =unique(round([0 logspace(log10(delta),...')\n", - "# MATLAB L2121: log10(maxWindow),numWindows)]*sampleRate)./sampleRate);\n", - "_matlab('log10(maxWindow),numWindows)]*sampleRate)./sampleRate);')\n", - "# MATLAB L2122: windowTimes = windowTimes(1:11);\n", - "_matlab('windowTimes = windowTimes(1:11);')\n" + "# Analysis.computeHistLagForAll for various window lengths)" ] }, { @@ -369,18 +159,7 @@ "outputs": [], "source": [ "# SECTION 6: Define how we want to analyze the data\n", - "# MATLAB L2400: clear tc tcc;\n", - "pass\n", - "# MATLAB L2401: tc{1} = TrialConfig({{'Baseline','\\mu'}},sampleRate,[]);\n", - "_matlab(\"tc{1} = TrialConfig({{'Baseline','\\\\mu'}},sampleRate,[]);\")\n", - "# MATLAB L2402: tc{1}.setName('Constant Baseline');\n", - "_matlab(\"tc{1}.setName('Constant Baseline');\")\n", - "# MATLAB L2403: tc{2} = TrialConfig({{'Baseline','\\mu_{1}','\\mu_{2}','\\mu_{3}'}},...\n", - "_matlab(\"tc{2} = TrialConfig({{'Baseline','\\\\mu_{1}','\\\\mu_{2}','\\\\mu_{3}'}},...\")\n", - "# MATLAB L2404: sampleRate,[]); tc{2}.setName('Diff Baseline');\n", - "_matlab(\"sampleRate,[]); tc{2}.setName('Diff Baseline');\")\n", - "# MATLAB L2405: tcc = ConfigColl(tc);\n", - "_matlab('tcc = ConfigColl(tc);')\n" + "pass" ] }, { @@ -391,99 +170,26 @@ "outputs": [], "source": [ "# SECTION 7: Perform Analysis\n", - "# MATLAB L2700: % We see that the piece-wise constant rate model (without history) outperforms the constant baseline model in terms of AIC, BIC, and KS-statistic.\n", "# We see that the piece-wise constant rate model (without history) outperforms the constant baseline model in terms of AIC, BIC, and KS-statistic.\n", - "# MATLAB L2800: results =Analysis.RunAnalysisForAllNeurons(trial,tcc,0);\n", - "_matlab('results =Analysis.RunAnalysisForAllNeurons(trial,tcc,0);')\n", - "# MATLAB L2801: % h=results.plotResults;\n", "# h=results.plotResults;\n", - "# MATLAB L2802: % Summary = FitResSummary(results);\n", "# Summary = FitResSummary(results);\n", - "# MATLAB L2803: % h=Summary.plotSummary;\n", "# h=Summary.plotSummary;\n", - "# MATLAB L3000: close all;\n", "plt.close(\"all\")\n", - "# MATLAB L3001: scrsz = get(0,'ScreenSize');\n", - "_matlab(\"scrsz = get(0,'ScreenSize');\")\n", - "# MATLAB L3002: results.lambda.setDataLabels({'\\lambda_{const}',...\n", - "_matlab(\"results.lambda.setDataLabels({'\\\\lambda_{const}',...\")\n", - "# MATLAB L3003: '\\lambda_{const-epoch}'});\n", - "_matlab(\"'\\\\lambda_{const-epoch}'});\")\n", - "# MATLAB L3004: h=figure('OuterPosition',[scrsz(3)*.01 scrsz(4)*.04 ...\n", "__tracker.new_figure(\"h=figure('OuterPosition',[scrsz(3)*.01 scrsz(4)*.04 ...\")\n", - "_matlab(\"h=figure('OuterPosition',[scrsz(3)*.01 scrsz(4)*.04 ...\")\n", - "# MATLAB L3005: scrsz(3)*.98 scrsz(4)*.95]);\n", - "_matlab('scrsz(3)*.98 scrsz(4)*.95]);')\n", - "# MATLAB L3006: \n", "#\n", - "# MATLAB L3007: subplot(2,2,1); spikeColl.plot;\n", "__tracker.annotate('subplot(2,2,1)')\n", "__tracker.annotate('spikeColl.plot')\n", - "_matlab('subplot(2,2,1); spikeColl.plot;')\n", - "# MATLAB L3008: title({'Neural Raster with decreasing Mg^{2+} Concentration'},...\n", - "_matlab(\"title({'Neural Raster with decreasing Mg^{2+} Concentration'},...\")\n", - "# MATLAB L3009: 'FontWeight','bold',...\n", - "_matlab(\"'FontWeight','bold',...\")\n", - "# MATLAB L3010: 'Fontsize',12,...\n", - "_matlab(\"'Fontsize',12,...\")\n", - "# MATLAB L3011: 'FontName','Arial');\n", - "_matlab(\"'FontName','Arial');\")\n", - "# MATLAB L3012: hx=xlabel('time [s]','Interpreter','none');\n", - "_matlab(\"hx=xlabel('time [s]','Interpreter','none');\")\n", - "# MATLAB L3013: set(gca,'YTickLabel',[]);\n", - "_matlab(\"set(gca,'YTickLabel',[]);\")\n", - "# MATLAB L3014: set([hx],'FontName', 'Arial','FontSize',12,'FontWeight','bold');\n", - "_matlab(\"set([hx],'FontName', 'Arial','FontSize',12,'FontWeight','bold');\")\n", - "# MATLAB L3015: timeInd1 =find(time<495,1,'last'); %0-495sec first constant rate\n", - "_matlab(\"timeInd1 =find(time<495,1,'last'); %0-495sec first constant rate\")\n", - "# MATLAB L3016: timeInd2 =find(time<765,1,'last'); %495-765 second constant rate epoch\n", - "_matlab(\"timeInd2 =find(time<765,1,'last'); %495-765 second constant rate epoch\")\n", - "# MATLAB L3017: %765 onwards third constant rate\n", "# 765 onwards third constant rate\n", - "# MATLAB L3018: %epoch\n", "# epoch\n", - "# MATLAB L3019: plot([495;495],[0,1],'r','Linewidth',4); hold on;\n", "__tracker.annotate('plot([495')\n", - "_matlab(\"plot([495;495],[0,1],'r','Linewidth',4); hold on;\")\n", - "# MATLAB L3020: plot([765;765],[0,1],'r','Linewidth',4);\n", "__tracker.annotate('plot([765')\n", - "_matlab(\"plot([765;765],[0,1],'r','Linewidth',4);\")\n", - "# MATLAB L3021: \n", "#\n", - "# MATLAB L3022: subplot(2,2,3); results.KSPlot;\n", "__tracker.annotate('subplot(2,2,3)')\n", "__tracker.annotate('results.KSPlot')\n", - "_matlab('subplot(2,2,3); results.KSPlot;')\n", - "# MATLAB L3023: subplot(2,2,2); results.plotInvGausTrans;\n", "__tracker.annotate('subplot(2,2,2)')\n", - "_matlab('subplot(2,2,2); results.plotInvGausTrans;')\n", - "# MATLAB L3024: subplot(2,2,4);\n", "__tracker.annotate('subplot(2,2,4)')\n", - "_matlab('subplot(2,2,4);')\n", - "# MATLAB L3025: results.lambda.getSubSignal(1).plot([],{{' ''b'' ,''Linewidth'',2'}});\n", "__tracker.annotate(\"results.lambda.getSubSignal(1).plot([],{{' ''b'' ,''Linewidth'',2'}})\")\n", - "_matlab(\"results.lambda.getSubSignal(1).plot([],{{' ''b'' ,''Linewidth'',2'}});\")\n", - "# MATLAB L3026: results.lambda.getSubSignal(2).plot([],{{' ''g'' ,''Linewidth'',2'}});\n", - "__tracker.annotate(\"results.lambda.getSubSignal(2).plot([],{{' ''g'' ,''Linewidth'',2'}})\")\n", - "_matlab(\"results.lambda.getSubSignal(2).plot([],{{' ''g'' ,''Linewidth'',2'}});\")\n", - "# MATLAB L3027: v=axis; axis([v(1) v(2) 0 5]);\n", - "_matlab('v=axis; axis([v(1) v(2) 0 5]);')\n", - "# MATLAB L3028: hx=xlabel('time [s]','Interpreter','none');\n", - "_matlab(\"hx=xlabel('time [s]','Interpreter','none');\")\n", - "# MATLAB L3029: hy=get(gca,'YLabel');\n", - "_matlab(\"hy=get(gca,'YLabel');\")\n", - "# MATLAB L3030: set([hx hy],'FontName', 'Arial','FontSize',12,'FontWeight','bold');\n", - "_matlab(\"set([hx hy],'FontName', 'Arial','FontSize',12,'FontWeight','bold');\")\n", - "# MATLAB L3031: h_legend = legend('\\lambda_{const}','\\lambda_{const-epoch}',...\n", - "_matlab(\"h_legend = legend('\\\\lambda_{const}','\\\\lambda_{const-epoch}',...\")\n", - "# MATLAB L3032: 'Location','NorthEast');\n", - "_matlab(\"'Location','NorthEast');\")\n", - "# MATLAB L3033: pos = get(h_legend,'position');\n", - "_matlab(\"pos = get(h_legend,'position');\")\n", - "# MATLAB L3034: set(h_legend, 'position',[pos(1)+.05 pos(2)-.01 pos(3:4)]);\n", - "_matlab(\"set(h_legend, 'position',[pos(1)+.05 pos(2)-.01 pos(3:4)]);\")\n", - "# MATLAB L3035: set(h_legend,'FontSize',14)\n", - "_matlab(\"set(h_legend,'FontSize',14)\")\n" + "__tracker.annotate(\"results.lambda.getSubSignal(2).plot([],{{' ''g'' ,''Linewidth'',2'}})\")" ] }, { @@ -494,8 +200,7 @@ "outputs": [], "source": [ "# SECTION 8: Experiment 2\n", - "# MATLAB L3300: % EXPLICIT STIMULUS EXAMPLE - WHISKER STIMULATION/THALAMIC NEURON In the worksheet with analyze the stimulus effect and history effect on the firing of a thalamic neuron under a known stimulus consisting of whisker stimulation. Data from Demba Ba (demba@mit.edu)\n", - "# EXPLICIT STIMULUS EXAMPLE - WHISKER STIMULATION/THALAMIC NEURON In the worksheet with analyze the stimulus effect and history effect on the firing of a thalamic neuron under a known stimulus consisting of whisker stimulation. Data from Demba Ba (demba@mit.edu)\n" + "# EXPLICIT STIMULUS EXAMPLE - WHISKER STIMULATION/THALAMIC NEURON In the worksheet with analyze the stimulus effect and history effect on the firing of a thalamic neuron under a known stimulus consisting of whisker stimulation. Data from Demba Ba (demba@mit.edu)" ] }, { @@ -506,233 +211,39 @@ "outputs": [], "source": [ "# SECTION 9: Load the data\n", - "# MATLAB L3500: % clear all;\n", "# clear all;\n", - "# MATLAB L3600: close all;\n", "plt.close(\"all\")\n", - "# MATLAB L3601: [dataDir,mEPSCDir,explicitStimulusDir,psthDir,placeCellDataDir] = ...\n", - "_matlab('[dataDir,mEPSCDir,explicitStimulusDir,psthDir,placeCellDataDir] = ...')\n", - "# MATLAB L3602: getPaperDataDirs();\n", - "_matlab('getPaperDataDirs();')\n", - "# MATLAB L3603: nSTATRootDir = fileparts(dataDir);\n", - "_matlab('nSTATRootDir = fileparts(dataDir);')\n", - "# MATLAB L3604: if exist(nSTATRootDir,'dir') == 7 && ~strcmp(pwd,nSTATRootDir)\n", - "_matlab(\"if exist(nSTATRootDir,'dir') == 7 && ~strcmp(pwd,nSTATRootDir)\")\n", - "# MATLAB L3605: cd(nSTATRootDir);\n", - "_matlab('cd(nSTATRootDir);')\n", - "# MATLAB L3606: end\n", - "_matlab('end')\n", - "# MATLAB L3607: \n", - "#\n", - "# MATLAB L3608: Direction=3; Neuron=1; Stim=2;\n", - "_matlab('Direction=3; Neuron=1; Stim=2;')\n", - "# MATLAB L3609: datapath = fullfile(explicitStimulusDir,['Dir' num2str(Direction)], ...\n", - "_matlab(\"datapath = fullfile(explicitStimulusDir,['Dir' num2str(Direction)], ...\")\n", - "# MATLAB L3610: ['Neuron' num2str(Neuron)],['Stim' num2str(Stim)]);\n", - "_matlab(\"['Neuron' num2str(Neuron)],['Stim' num2str(Stim)]);\")\n", - "# MATLAB L3611: data = load(fullfile(datapath,'trngdataBis.mat'));\n", - "_matlab(\"data = load(fullfile(datapath,'trngdataBis.mat'));\")\n", - "# MATLAB L3612: \n", - "#\n", - "# MATLAB L3613: time=0:.001:(length(data.t)-1)*.001;\n", - "_matlab('time=0:.001:(length(data.t)-1)*.001;')\n", - "# MATLAB L3614: stimData = data.t;\n", - "_matlab('stimData = data.t;')\n", - "# MATLAB L3615: spikeTimes = time(data.y==1);\n", - "_matlab('spikeTimes = time(data.y==1);')\n", - "# MATLAB L3616: \n", - "#\n", - "# MATLAB L3617: stim = Covariate(time,stimData./10,'Stimulus','time','s','mm',{'stim'});\n", - "_matlab(\"stim = Covariate(time,stimData./10,'Stimulus','time','s','mm',{'stim'});\")\n", - "# MATLAB L3618: baseline = Covariate(time,ones(length(time),1),'Baseline','time','s','',...\n", - "_matlab(\"baseline = Covariate(time,ones(length(time),1),'Baseline','time','s','',...\")\n", - "# MATLAB L3619: {'constant'});\n", - "_matlab(\"{'constant'});\")\n", - "# MATLAB L3620: \n", - "#\n", - "# MATLAB L3621: nst = nspikeTrain(spikeTimes);\n", - "_matlab('nst = nspikeTrain(spikeTimes);')\n", - "# MATLAB L3622: nspikeColl = nstColl(nst);\n", - "_matlab('nspikeColl = nstColl(nst);')\n", - "# MATLAB L3623: cc = CovColl({stim,baseline});\n", - "_matlab('cc = CovColl({stim,baseline});')\n", - "# MATLAB L3624: trial = Trial(nspikeColl,cc);\n", - "_matlab('trial = Trial(nspikeColl,cc);')\n", - "# MATLAB L3625: % trial.plot;\n", + "#\n", + "#\n", + "#\n", + "#\n", "# trial.plot;\n", - "# MATLAB L3626: \n", "#\n", - "# MATLAB L3627: scrsz = get(0,'ScreenSize');\n", - "_matlab(\"scrsz = get(0,'ScreenSize');\")\n", - "# MATLAB L3628: h=figure('Position',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.8 scrsz(4)*.8]);\n", "__tracker.new_figure(\"h=figure('Position',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.8 scrsz(4)*.8])\")\n", - "_matlab(\"h=figure('Position',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.8 scrsz(4)*.8]);\")\n", - "# MATLAB L3629: subplot(3,1,1);\n", "__tracker.annotate('subplot(3,1,1)')\n", - "_matlab('subplot(3,1,1);')\n", - "# MATLAB L3630: nst2 = nspikeTrain(spikeTimes);\n", - "_matlab('nst2 = nspikeTrain(spikeTimes);')\n", - "# MATLAB L3631: nst2.setMaxTime(21);nst2.plot;\n", "__tracker.annotate('nst2.plot')\n", - "_matlab('nst2.setMaxTime(21);nst2.plot;')\n", - "# MATLAB L3632: set(gca,'ytick',[0 1]);\n", - "_matlab(\"set(gca,'ytick',[0 1]);\")\n", - "# MATLAB L3633: xlabel('');\n", - "_matlab(\"xlabel('');\")\n", - "# MATLAB L3634: hy=ylabel('spikes');\n", - "_matlab(\"hy=ylabel('spikes');\")\n", - "# MATLAB L3635: set(hy,'FontName', 'Arial','FontSize',12,'FontWeight','bold');\n", - "_matlab(\"set(hy,'FontName', 'Arial','FontSize',12,'FontWeight','bold');\")\n", - "# MATLAB L3636: title({'Neural Raster'},'FontWeight','bold','FontSize',16,'FontName','Arial');\n", - "_matlab(\"title({'Neural Raster'},'FontWeight','bold','FontSize',16,'FontName','Arial');\")\n", - "# MATLAB L3637: set(gca, ...\n", - "_matlab('set(gca, ...')\n", - "# MATLAB L3638: 'XTick' , 0:1:max(time), ...\n", - "_matlab(\"'XTick' , 0:1:max(time), ...\")\n", - "# MATLAB L3639: 'XTickLabel' , [],...\n", - "_matlab(\"'XTickLabel' , [],...\")\n", - "# MATLAB L3640: 'LineWidth' , 1 );\n", - "_matlab(\"'LineWidth' , 1 );\")\n", - "# MATLAB L3641: subplot(3,1,2);\n", "__tracker.annotate('subplot(3,1,2)')\n", - "_matlab('subplot(3,1,2);')\n", - "# MATLAB L3642: stim.getSigInTimeWindow(0,21).plot([],{{' ''k'' '}}); legend off;\n", "__tracker.annotate(\"stim.getSigInTimeWindow(0,21).plot([],{{' ''k'' '}})\")\n", - "_matlab(\"stim.getSigInTimeWindow(0,21).plot([],{{' ''k'' '}}); legend off;\")\n", - "# MATLAB L3643: set(gca,'ytick',[0 0.5 1]);\n", - "_matlab(\"set(gca,'ytick',[0 0.5 1]);\")\n", - "# MATLAB L3644: hy=ylabel('Displacement [mm]','Interpreter','none'); xlabel('');\n", - "_matlab(\"hy=ylabel('Displacement [mm]','Interpreter','none'); xlabel('');\")\n", - "# MATLAB L3645: set(hy,'FontName', 'Arial','FontSize',12,'FontWeight','bold');\n", - "_matlab(\"set(hy,'FontName', 'Arial','FontSize',12,'FontWeight','bold');\")\n", - "# MATLAB L3646: title({'Stimulus - Whisker Displacement'},'FontWeight','bold',...\n", - "_matlab(\"title({'Stimulus - Whisker Displacement'},'FontWeight','bold',...\")\n", - "# MATLAB L3647: 'FontSize',16,'FontName','Arial');\n", - "_matlab(\"'FontSize',16,'FontName','Arial');\")\n", - "# MATLAB L3648: \n", - "#\n", - "# MATLAB L3649: set(gca, ...\n", - "_matlab('set(gca, ...')\n", - "# MATLAB L3650: 'XTick' , 0:1:max(time), ...\n", - "_matlab(\"'XTick' , 0:1:max(time), ...\")\n", - "# MATLAB L3651: 'XTickLabel' , [],...\n", - "_matlab(\"'XTickLabel' , [],...\")\n", - "# MATLAB L3652: 'YTick' , 0:.25:1, ...\n", - "_matlab(\"'YTick' , 0:.25:1, ...\")\n", - "# MATLAB L3653: 'LineWidth' , 1 );\n", - "_matlab(\"'LineWidth' , 1 );\")\n", - "# MATLAB L3654: \n", - "#\n", - "# MATLAB L3655: subplot(3,1,3);\n", + "#\n", + "#\n", "__tracker.annotate('subplot(3,1,3)')\n", - "_matlab('subplot(3,1,3);')\n", - "# MATLAB L3656: stim.derivative.getSigInTimeWindow(0,21).plot([],{{' ''k'' '}}); legend off;\n", "__tracker.annotate(\"stim.derivative.getSigInTimeWindow(0,21).plot([],{{' ''k'' '}})\")\n", - "_matlab(\"stim.derivative.getSigInTimeWindow(0,21).plot([],{{' ''k'' '}}); legend off;\")\n", - "# MATLAB L3657: set(gca,'ytick',[-80 0 80]);\n", - "_matlab(\"set(gca,'ytick',[-80 0 80]);\")\n", - "# MATLAB L3658: axis([0 21 -80 80]);\n", - "_matlab('axis([0 21 -80 80]);')\n", - "# MATLAB L3659: hy=ylabel('Displacement Velocity [mm/s]','Interpreter','none');\n", - "_matlab(\"hy=ylabel('Displacement Velocity [mm/s]','Interpreter','none');\")\n", - "# MATLAB L3660: hx= xlabel('time [s]','Interpreter','none');\n", - "_matlab(\"hx= xlabel('time [s]','Interpreter','none');\")\n", - "# MATLAB L3661: set([hx hy],'FontName', 'Arial','FontSize',12,'FontWeight','bold');\n", - "_matlab(\"set([hx hy],'FontName', 'Arial','FontSize',12,'FontWeight','bold');\")\n", - "# MATLAB L3662: title({'Displacement Velocity'},'FontWeight','bold',...\n", - "_matlab(\"title({'Displacement Velocity'},'FontWeight','bold',...\")\n", - "# MATLAB L3663: 'FontSize',16,'FontName','Arial');\n", - "_matlab(\"'FontSize',16,'FontName','Arial');\")\n", - "# MATLAB L3664: \n", - "#\n", - "# MATLAB L3665: set(gca, ...\n", - "_matlab('set(gca, ...')\n", - "# MATLAB L3666: 'XTick' , 0:1:max(time), ...\n", - "_matlab(\"'XTick' , 0:1:max(time), ...\")\n", - "# MATLAB L3667: 'YTick' , -80:40:80, ...\n", - "_matlab(\"'YTick' , -80:40:80, ...\")\n", - "# MATLAB L3668: 'LineWidth' , 1 );\n", - "_matlab(\"'LineWidth' , 1 );\")\n", - "# MATLAB L3800: % Fit a constant baseline and Find Stimulus Lag We fit a constant rate (Poisson) model to the data and use the look at the cross-covariance function of between the stimulus and the fit residual to determine the appropriate lag for the stimulus.\n", + "#\n", "# Fit a constant baseline and Find Stimulus Lag We fit a constant rate (Poisson) model to the data and use the look at the cross-covariance function of between the stimulus and the fit residual to determine the appropriate lag for the stimulus.\n", - "# MATLAB L3900: clear c; close all;\n", "pass\n", - "# MATLAB L3901: selfHist = [] ; NeighborHist = []; sampleRate = 1000;\n", - "_matlab('selfHist = [] ; NeighborHist = []; sampleRate = 1000;')\n", - "# MATLAB L3902: c{1} = TrialConfig({{'Baseline','constant'}},sampleRate,selfHist,NeighborHist);\n", - "_matlab(\"c{1} = TrialConfig({{'Baseline','constant'}},sampleRate,selfHist,NeighborHist);\")\n", - "# MATLAB L3903: c{1}.setName('Baseline');\n", - "_matlab(\"c{1}.setName('Baseline');\")\n", - "# MATLAB L3904: cfgColl= ConfigColl(c);\n", - "_matlab('cfgColl= ConfigColl(c);')\n", - "# MATLAB L3905: results = Analysis.RunAnalysisForAllNeurons(trial,cfgColl,0);\n", - "_matlab('results = Analysis.RunAnalysisForAllNeurons(trial,cfgColl,0);')\n", - "# MATLAB L3906: \n", - "#\n", - "# MATLAB L3907: % Find Stimulus Lag (look for peaks in the cross-covariance function less\n", + "#\n", "# Find Stimulus Lag (look for peaks in the cross-covariance function less\n", - "# MATLAB L3908: % than 1 second\n", "# than 1 second\n", - "# MATLAB L3909: scrsz = get(0,'ScreenSize');\n", - "_matlab(\"scrsz = get(0,'ScreenSize');\")\n", - "# MATLAB L3910: h=figure('Position',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.8 scrsz(4)*.8]);\n", "__tracker.new_figure(\"h=figure('Position',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.8 scrsz(4)*.8])\")\n", - "_matlab(\"h=figure('Position',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.8 scrsz(4)*.8]);\")\n", - "# MATLAB L3911: \n", "#\n", - "# MATLAB L3912: subplot(7,2,[1 3 5])\n", "__tracker.annotate('subplot(7,2,[1 3 5])')\n", - "_matlab('subplot(7,2,[1 3 5])')\n", - "# MATLAB L3913: results.Residual.xcov(stim).windowedSignal([0,1]).plot;\n", "__tracker.annotate('results.Residual.xcov(stim).windowedSignal([0,1]).plot')\n", - "_matlab('results.Residual.xcov(stim).windowedSignal([0,1]).plot;')\n", - "# MATLAB L3914: \n", - "#\n", - "# MATLAB L3915: ylabel('');\n", - "_matlab(\"ylabel('');\")\n", - "# MATLAB L3916: [m,ind,ShiftTime] = max(results.Residual.xcov(stim).windowedSignal([0,1]));\n", - "_matlab('[m,ind,ShiftTime] = max(results.Residual.xcov(stim).windowedSignal([0,1]));')\n", - "# MATLAB L3917: title(['Cross Correlation Function - Peak at t=' num2str(ShiftTime) ' sec'],'FontWeight','bold',...\n", - "_matlab(\"title(['Cross Correlation Function - Peak at t=' num2str(ShiftTime) ' sec'],'FontWeight','bold',...\")\n", - "# MATLAB L3918: 'FontSize',12,...\n", - "_matlab(\"'FontSize',12,...\")\n", - "# MATLAB L3919: 'FontName','Arial');\n", - "_matlab(\"'FontName','Arial');\")\n", - "# MATLAB L3920: hold on;\n", - "_matlab('hold on;')\n", - "# MATLAB L3921: h=plot(ShiftTime,m,'ro','Linewidth',3);\n", + "#\n", "__tracker.annotate(\"h=plot(ShiftTime,m,'ro','Linewidth',3)\")\n", - "_matlab(\"h=plot(ShiftTime,m,'ro','Linewidth',3);\")\n", - "# MATLAB L3922: set(h, 'MarkerFaceColor',[1 0 0], 'MarkerEdgeColor',[1 0 0]);\n", - "_matlab(\"set(h, 'MarkerFaceColor',[1 0 0], 'MarkerEdgeColor',[1 0 0]);\")\n", - "# MATLAB L3923: hx=xlabel('Lag [s]','Interpreter','none');\n", - "_matlab(\"hx=xlabel('Lag [s]','Interpreter','none');\")\n", - "# MATLAB L3924: set(hx,'FontName', 'Arial','FontSize',12,'FontWeight','bold');\n", - "_matlab(\"set(hx,'FontName', 'Arial','FontSize',12,'FontWeight','bold');\")\n", - "# MATLAB L3925: \n", - "#\n", - "# MATLAB L3926: \n", - "#\n", - "# MATLAB L3927: %Allow for shifts of less than 1 second\n", + "#\n", + "#\n", "# Allow for shifts of less than 1 second\n", - "# MATLAB L3928: stim = Covariate(time,stimData,'Stimulus','time','s','V',{'stim'});\n", - "_matlab(\"stim = Covariate(time,stimData,'Stimulus','time','s','V',{'stim'});\")\n", - "# MATLAB L3929: stim = stim.shift(ShiftTime);\n", - "_matlab('stim = stim.shift(ShiftTime);')\n", - "# MATLAB L3930: baseline = Covariate(time,ones(length(time),1),'Baseline','time','s','',...\n", - "_matlab(\"baseline = Covariate(time,ones(length(time),1),'Baseline','time','s','',...\")\n", - "# MATLAB L3931: {'\\mu'});\n", - "_matlab(\"{'\\\\mu'});\")\n", - "# MATLAB L3932: \n", - "#\n", - "# MATLAB L3933: nst = nspikeTrain(spikeTimes);\n", - "_matlab('nst = nspikeTrain(spikeTimes);')\n", - "# MATLAB L3934: nspikeColl = nstColl(nst);\n", - "_matlab('nspikeColl = nstColl(nst);')\n", - "# MATLAB L3935: cc = CovColl({stim,baseline});\n", - "_matlab('cc = CovColl({stim,baseline});')\n", - "# MATLAB L3936: trial2 = Trial(nspikeColl,cc);\n", - "_matlab('trial2 = Trial(nspikeColl,cc);')\n" + "#" ] }, { @@ -743,30 +254,9 @@ "outputs": [], "source": [ "# SECTION 10: Compare constant rate model with model including stimulus effect\n", - "# MATLAB L4200: % Addition of the stimulus improves the fits in terms of the KS plot and the making the rescaled ISIs less correlated. The Point Process Residula also looks more \"white\"\n", "# Addition of the stimulus improves the fits in terms of the KS plot and the making the rescaled ISIs less correlated. The Point Process Residula also looks more \"white\"\n", - "# MATLAB L4300: clear c;\n", "pass\n", - "# MATLAB L4301: selfHist = [] ; NeighborHist = []; sampleRate = 1000;\n", - "_matlab('selfHist = [] ; NeighborHist = []; sampleRate = 1000;')\n", - "# MATLAB L4302: c{1} = TrialConfig({{'Baseline','\\mu'}},sampleRate,selfHist,...\n", - "_matlab(\"c{1} = TrialConfig({{'Baseline','\\\\mu'}},sampleRate,selfHist,...\")\n", - "# MATLAB L4303: NeighborHist);\n", - "_matlab('NeighborHist);')\n", - "# MATLAB L4304: c{1}.setName('Baseline');\n", - "_matlab(\"c{1}.setName('Baseline');\")\n", - "# MATLAB L4305: c{2} = TrialConfig({{'Baseline','\\mu'},{'Stimulus','stim'}},...\n", - "_matlab(\"c{2} = TrialConfig({{'Baseline','\\\\mu'},{'Stimulus','stim'}},...\")\n", - "# MATLAB L4306: sampleRate,selfHist,NeighborHist);\n", - "_matlab('sampleRate,selfHist,NeighborHist);')\n", - "# MATLAB L4307: c{2}.setName('Baseline+Stimulus');\n", - "_matlab(\"c{2}.setName('Baseline+Stimulus');\")\n", - "# MATLAB L4308: cfgColl= ConfigColl(c);\n", - "_matlab('cfgColl= ConfigColl(c);')\n", - "# MATLAB L4309: results = Analysis.RunAnalysisForAllNeurons(trial2,cfgColl,0);\n", - "_matlab('results = Analysis.RunAnalysisForAllNeurons(trial2,cfgColl,0);')\n", - "# MATLAB L4310: % results.plotResults;\n", - "# results.plotResults;\n" + "# results.plotResults;" ] }, { @@ -777,208 +267,43 @@ "outputs": [], "source": [ "# SECTION 11: History Effect\n", - "# MATLAB L4600: % Determine the best history effect model using AIC, BIC, and KS statistic\n", "# Determine the best history effect model using AIC, BIC, and KS statistic\n", - "# MATLAB L4700: sampleRate=1000;\n", "sampleRate = 1000\n", - "# MATLAB L4701: delta=1/sampleRate*1;\n", - "_matlab('delta=1/sampleRate*1;')\n", - "# MATLAB L4702: maxWindow=1; numWindows=32;\n", - "_matlab('maxWindow=1; numWindows=32;')\n", - "# MATLAB L4703: windowTimes =unique(round([0 logspace(log10(delta),...\n", - "_matlab('windowTimes =unique(round([0 logspace(log10(delta),...')\n", - "# MATLAB L4704: log10(maxWindow),numWindows)]*sampleRate)./sampleRate);\n", - "_matlab('log10(maxWindow),numWindows)]*sampleRate)./sampleRate);')\n", - "# MATLAB L4705: results =Analysis.computeHistLagForAll(trial2,windowTimes,...\n", - "_matlab('results =Analysis.computeHistLagForAll(trial2,windowTimes,...')\n", - "# MATLAB L4706: {{'Baseline','\\mu'},{'Stimulus','stim'}},'BNLRCG',0,sampleRate,0);\n", - "_matlab(\"{{'Baseline','\\\\mu'},{'Stimulus','stim'}},'BNLRCG',0,sampleRate,0);\")\n", - "# MATLAB L4707: \n", - "#\n", - "# MATLAB L4708: KSind = find(results{1}.KSStats.ks_stat == min(results{1}.KSStats.ks_stat));\n", - "_matlab('KSind = find(results{1}.KSStats.ks_stat == min(results{1}.KSStats.ks_stat));')\n", - "# MATLAB L4709: AICind = find((results{1}.AIC(2:end)-results{1}.AIC(1))== ...\n", - "_matlab('AICind = find((results{1}.AIC(2:end)-results{1}.AIC(1))== ...')\n", - "# MATLAB L4710: min(results{1}.AIC(2:end)-results{1}.AIC(1))) +1;\n", - "_matlab('min(results{1}.AIC(2:end)-results{1}.AIC(1))) +1;')\n", - "# MATLAB L4711: BICind = find((results{1}.BIC(2:end)-results{1}.BIC(1))== ...\n", - "_matlab('BICind = find((results{1}.BIC(2:end)-results{1}.BIC(1))== ...')\n", - "# MATLAB L4712: min(results{1}.BIC(2:end)-results{1}.BIC(1))) +1;\n", - "_matlab('min(results{1}.BIC(2:end)-results{1}.BIC(1))) +1;')\n", - "# MATLAB L4713: if(AICind==1)\n", - "_matlab('if(AICind==1)')\n", - "# MATLAB L4714: AICind=inf;\n", - "_matlab('AICind=inf;')\n", - "# MATLAB L4715: end\n", - "_matlab('end')\n", - "# MATLAB L4716: if(BICind==1)\n", - "_matlab('if(BICind==1)')\n", - "# MATLAB L4717: BICind=inf; %sometime BIC is non-decreasing and the index would be 1\n", - "_matlab('BICind=inf; %sometime BIC is non-decreasing and the index would be 1')\n", - "# MATLAB L4718: end\n", - "_matlab('end')\n", - "# MATLAB L4719: windowIndex = min([AICind,BICind]) %use the minimum order model\n", - "_matlab('windowIndex = min([AICind,BICind]) %use the minimum order model')\n", - "# MATLAB L4720: Summary = FitResSummary(results);\n", - "_matlab('Summary = FitResSummary(results);')\n", - "# MATLAB L4721: % Summary.plotSummary;\n", + "#\n", "# Summary.plotSummary;\n", - "# MATLAB L4722: \n", "#\n", - "# MATLAB L4723: \n", "#\n", - "# MATLAB L4724: clear c;\n", "pass\n", - "# MATLAB L4725: if(windowIndex>1)\n", - "_matlab('if(windowIndex>1)')\n", - "# MATLAB L4726: selfHist = windowTimes(1:windowIndex+1);\n", - "_matlab('selfHist = windowTimes(1:windowIndex+1);')\n", - "# MATLAB L4727: else\n", - "_matlab('else')\n", - "# MATLAB L4728: selfHist = [];\n", - "_matlab('selfHist = [];')\n", - "# MATLAB L4729: end\n", - "_matlab('end')\n", - "# MATLAB L4730: NeighborHist = []; sampleRate = 1000;\n", - "_matlab('NeighborHist = []; sampleRate = 1000;')\n", - "# MATLAB L4731: %\n", - "#\n", - "# MATLAB L4732: % figure;\n", + "#\n", "# figure;\n", - "# MATLAB L4733: subplot(7,2,2);\n", "__tracker.annotate('subplot(7,2,2)')\n", - "_matlab('subplot(7,2,2);')\n", - "# MATLAB L4734: x=0:length(windowTimes)-1;\n", - "_matlab('x=0:length(windowTimes)-1;')\n", - "# MATLAB L4735: plot(x,results{1}.KSStats.ks_stat,'.-'); axis tight; hold on;\n", "__tracker.annotate(\"plot(x,results{1}.KSStats.ks_stat,'.-')\")\n", - "_matlab(\"plot(x,results{1}.KSStats.ks_stat,'.-'); axis tight; hold on;\")\n", - "# MATLAB L4736: plot(x(windowIndex),results{1}.KSStats.ks_stat(windowIndex),'r*');\n", "__tracker.annotate(\"plot(x(windowIndex),results{1}.KSStats.ks_stat(windowIndex),'r*')\")\n", - "_matlab(\"plot(x(windowIndex),results{1}.KSStats.ks_stat(windowIndex),'r*');\")\n", - "# MATLAB L4737: \n", - "#\n", - "# MATLAB L4738: set(gca,'XTick', 0:5:results{1}.numResults-1,'XTickLabel',[],...\n", - "_matlab(\"set(gca,'XTick', 0:5:results{1}.numResults-1,'XTickLabel',[],...\")\n", - "# MATLAB L4739: 'TickLength', [.02 .02] , ...\n", - "_matlab(\"'TickLength', [.02 .02] , ...\")\n", - "# MATLAB L4740: 'XMinorTick', 'on','LineWidth' , 1);\n", - "_matlab(\"'XMinorTick', 'on','LineWidth' , 1);\")\n", - "# MATLAB L4741: \n", - "#\n", - "# MATLAB L4742: hy=ylabel('KS Statistic');\n", - "_matlab(\"hy=ylabel('KS Statistic');\")\n", - "# MATLAB L4743: set(hy,'FontName', 'Arial','FontSize',12,'FontWeight','bold');\n", - "_matlab(\"set(hy,'FontName', 'Arial','FontSize',12,'FontWeight','bold');\")\n", - "# MATLAB L4744: dAIC = results{1}.AIC-results{1}.AIC(1);\n", - "_matlab('dAIC = results{1}.AIC-results{1}.AIC(1);')\n", - "# MATLAB L4745: title({'Model Selection via change'; 'in KS Statistic, AIC, and BIC'},...\n", - "_matlab(\"title({'Model Selection via change'; 'in KS Statistic, AIC, and BIC'},...\")\n", - "# MATLAB L4746: 'FontWeight','bold',...\n", - "_matlab(\"'FontWeight','bold',...\")\n", - "# MATLAB L4747: 'FontSize',12,...\n", - "_matlab(\"'FontSize',12,...\")\n", - "# MATLAB L4748: 'FontName','Arial');\n", - "_matlab(\"'FontName','Arial');\")\n", - "# MATLAB L4749: \n", - "#\n", - "# MATLAB L4750: subplot(7,2,4); plot(x,dAIC,'.-');\n", + "#\n", + "#\n", + "#\n", "__tracker.annotate('subplot(7,2,4)')\n", "__tracker.annotate(\"plot(x,dAIC,'.-')\")\n", - "_matlab(\"subplot(7,2,4); plot(x,dAIC,'.-');\")\n", - "# MATLAB L4751: set(gca,'XTick', 0:5:results{1}.numResults-1,'XTickLabel',[],...\n", - "_matlab(\"set(gca,'XTick', 0:5:results{1}.numResults-1,'XTickLabel',[],...\")\n", - "# MATLAB L4752: 'TickLength', [.02 .02] , ...\n", - "_matlab(\"'TickLength', [.02 .02] , ...\")\n", - "# MATLAB L4753: 'XMinorTick', 'on','LineWidth' , 1);\n", - "_matlab(\"'XMinorTick', 'on','LineWidth' , 1);\")\n", - "# MATLAB L4754: hy=ylabel('\\Delta AIC');axis tight; hold on;\n", - "_matlab(\"hy=ylabel('\\\\Delta AIC');axis tight; hold on;\")\n", - "# MATLAB L4755: set(hy,'FontName', 'Arial','FontSize',12,'FontWeight','bold');\n", - "_matlab(\"set(hy,'FontName', 'Arial','FontSize',12,'FontWeight','bold');\")\n", - "# MATLAB L4756: plot(x(windowIndex),dAIC(windowIndex),'r*');\n", "__tracker.annotate(\"plot(x(windowIndex),dAIC(windowIndex),'r*')\")\n", - "_matlab(\"plot(x(windowIndex),dAIC(windowIndex),'r*');\")\n", - "# MATLAB L4757: dBIC = results{1}.BIC-results{1}.BIC(1);\n", - "_matlab('dBIC = results{1}.BIC-results{1}.BIC(1);')\n", - "# MATLAB L4758: \n", "#\n", - "# MATLAB L4759: subplot(7,2,6); plot(x,dBIC,'.-');\n", "__tracker.annotate('subplot(7,2,6)')\n", "__tracker.annotate(\"plot(x,dBIC,'.-')\")\n", - "_matlab(\"subplot(7,2,6); plot(x,dBIC,'.-');\")\n", - "# MATLAB L4760: hy=ylabel('\\Delta BIC'); axis tight; hold on;\n", - "_matlab(\"hy=ylabel('\\\\Delta BIC'); axis tight; hold on;\")\n", - "# MATLAB L4761: \n", "#\n", - "# MATLAB L4762: plot(x(windowIndex),dBIC(windowIndex),'r*');\n", "__tracker.annotate(\"plot(x(windowIndex),dBIC(windowIndex),'r*')\")\n", - "_matlab(\"plot(x(windowIndex),dBIC(windowIndex),'r*');\")\n", - "# MATLAB L4763: hx=xlabel('# History Windows, Q');\n", - "_matlab(\"hx=xlabel('# History Windows, Q');\")\n", - "# MATLAB L4764: set([hx, hy],'FontName', 'Arial','FontSize',12,'FontWeight','bold');\n", - "_matlab(\"set([hx, hy],'FontName', 'Arial','FontSize',12,'FontWeight','bold');\")\n", - "# MATLAB L4765: set(gca, ...\n", - "_matlab('set(gca, ...')\n", - "# MATLAB L4766: 'TickLength' , [.02 .02] , ...\n", - "_matlab(\"'TickLength' , [.02 .02] , ...\")\n", - "# MATLAB L4767: 'XMinorTick' , 'on' , ...\n", - "_matlab(\"'XMinorTick' , 'on' , ...\")\n", - "# MATLAB L4768: 'XTick' , 0:5:results{1}.numResults-1, ...\n", - "_matlab(\"'XTick' , 0:5:results{1}.numResults-1, ...\")\n", - "# MATLAB L4769: 'LineWidth' , 1 );\n", - "_matlab(\"'LineWidth' , 1 );\")\n", - "# MATLAB L4770: \n", - "#\n", - "# MATLAB L4771: \n", - "#\n", - "# MATLAB L4772: \n", - "#\n", - "# MATLAB L4773: % Compare Baseline, Baseline+Stimulus Model, Baseline+History+Stimulus\n", + "#\n", + "#\n", + "#\n", "# Compare Baseline, Baseline+Stimulus Model, Baseline+History+Stimulus\n", - "# MATLAB L4774: % Addition of the history effect yields a model that falls within the 95%\n", "# Addition of the history effect yields a model that falls within the 95%\n", - "# MATLAB L4775: % CI of the KS plot.\n", "# CI of the KS plot.\n", - "# MATLAB L4776: \n", - "#\n", - "# MATLAB L4777: c{1} = TrialConfig({{'Baseline','\\mu'}},sampleRate,[],NeighborHist);\n", - "_matlab(\"c{1} = TrialConfig({{'Baseline','\\\\mu'}},sampleRate,[],NeighborHist);\")\n", - "# MATLAB L4778: c{1}.setName('Baseline');\n", - "_matlab(\"c{1}.setName('Baseline');\")\n", - "# MATLAB L4779: c{2} = TrialConfig({{'Baseline','\\mu'},{'Stimulus','stim'}},...\n", - "_matlab(\"c{2} = TrialConfig({{'Baseline','\\\\mu'},{'Stimulus','stim'}},...\")\n", - "# MATLAB L4780: sampleRate,[],[]);\n", - "_matlab('sampleRate,[],[]);')\n", - "# MATLAB L4781: c{2}.setName('Baseline+Stimulus');\n", - "_matlab(\"c{2}.setName('Baseline+Stimulus');\")\n", - "# MATLAB L4782: c{3} = TrialConfig({{'Baseline','\\mu'},{'Stimulus','stim'}},...\n", - "_matlab(\"c{3} = TrialConfig({{'Baseline','\\\\mu'},{'Stimulus','stim'}},...\")\n", - "# MATLAB L4783: sampleRate,windowTimes(1:windowIndex),[]);\n", - "_matlab('sampleRate,windowTimes(1:windowIndex),[]);')\n", - "# MATLAB L4784: c{3}.setName('Baseline+Stimulus+Hist');\n", + "#\n", "__tracker.annotate(\"c{3}.setName('Baseline+Stimulus+Hist')\")\n", - "_matlab(\"c{3}.setName('Baseline+Stimulus+Hist');\")\n", - "# MATLAB L4785: cfgColl= ConfigColl(c);\n", - "_matlab('cfgColl= ConfigColl(c);')\n", - "# MATLAB L4786: results = Analysis.RunAnalysisForAllNeurons(trial2,cfgColl,0);\n", - "_matlab('results = Analysis.RunAnalysisForAllNeurons(trial2,cfgColl,0);')\n", - "# MATLAB L4787: %results.plotResults;\n", "# results.plotResults;\n", - "# MATLAB L4788: %\n", "#\n", - "# MATLAB L4789: results.lambda.setDataLabels({'\\lambda_{const}','\\lambda_{const+stim}',...\n", - "_matlab(\"results.lambda.setDataLabels({'\\\\lambda_{const}','\\\\lambda_{const+stim}',...\")\n", - "# MATLAB L4790: '\\lambda_{const+stim+hist}'});\n", "__tracker.annotate(\"'\\\\lambda_{const+stim+hist}'})\")\n", - "_matlab(\"'\\\\lambda_{const+stim+hist}'});\")\n", - "# MATLAB L4791: subplot(7,2,[9 11 13]); results.KSPlot;\n", "__tracker.annotate('subplot(7,2,[9 11 13])')\n", "__tracker.annotate('results.KSPlot')\n", - "_matlab('subplot(7,2,[9 11 13]); results.KSPlot;')\n", - "# MATLAB L4792: subplot(7,2,[10 12 14]); results.plotCoeffs; legend off;\n", - "__tracker.annotate('subplot(7,2,[10 12 14])')\n", - "_matlab('subplot(7,2,[10 12 14]); results.plotCoeffs; legend off;')\n" + "__tracker.annotate('subplot(7,2,[10 12 14])')" ] }, { @@ -989,177 +314,37 @@ "outputs": [], "source": [ "# SECTION 12: Example 3 - PSTH Data\n", - "# MATLAB L5000: % Generate a known Conditional Intensity Function\n", "# Generate a known Conditional Intensity Function\n", - "# MATLAB L5001: % We generated a known conditional intensity function (rate function) and\n", "# We generated a known conditional intensity function (rate function) and\n", - "# MATLAB L5002: % generate distinct realizations of point processes consistent with this\n", "# generate distinct realizations of point processes consistent with this\n", - "# MATLAB L5003: % rate function. We use the method of thinning to simulate a point process.\n", "# rate function. We use the method of thinning to simulate a point process.\n", - "# MATLAB L5004: clear all;\n", "pass\n", - "# MATLAB L5005: [dataDir,mEPSCDir,explicitStimulusDir,psthDir,placeCellDataDir] = ...\n", - "_matlab('[dataDir,mEPSCDir,explicitStimulusDir,psthDir,placeCellDataDir] = ...')\n", - "# MATLAB L5006: getPaperDataDirs();\n", - "_matlab('getPaperDataDirs();')\n", - "# MATLAB L5007: close all;\n", "plt.close(\"all\")\n", - "# MATLAB L5008: delta = 0.001;\n", "delta = 0.001\n", - "# MATLAB L5009: Tmax = 1;\n", "Tmax = 1\n", - "# MATLAB L5010: time = 0:delta:Tmax;\n", - "_matlab('time = 0:delta:Tmax;')\n", - "# MATLAB L5011: f=2;\n", "f = 2\n", - "# MATLAB L5012: mu = -3;\n", "mu = -3\n", - "# MATLAB L5013: \n", - "#\n", - "# MATLAB L5014: tempData = 1*sin(2*pi*f*time)+mu; %lambda >=0\n", - "_matlab('tempData = 1*sin(2*pi*f*time)+mu; %lambda >=0')\n", - "# MATLAB L5015: lambdaData = exp(tempData)./(1+exp(tempData))*(1/delta);\n", - "_matlab('lambdaData = exp(tempData)./(1+exp(tempData))*(1/delta);')\n", - "# MATLAB L5016: lambda = Covariate(time,lambdaData, '\\lambda(t)','time','s',...\n", - "_matlab(\"lambda = Covariate(time,lambdaData, '\\\\lambda(t)','time','s',...\")\n", - "# MATLAB L5017: 'spikes/sec',{'\\lambda_{1}'},{{' ''b'', ''LineWidth'' ,2'}});\n", - "_matlab(\"'spikes/sec',{'\\\\lambda_{1}'},{{' ''b'', ''LineWidth'' ,2'}});\")\n", - "# MATLAB L5018: numRealizations = 20;\n", + "#\n", "numRealizations = 20\n", - "# MATLAB L5019: spikeCollSim = CIF.simulateCIFByThinningFromLambda(lambda,numRealizations);\n", - "_matlab('spikeCollSim = CIF.simulateCIFByThinningFromLambda(lambda,numRealizations);')\n", - "# MATLAB L5020: \n", "#\n", - "# MATLAB L5021: \n", "#\n", - "# MATLAB L5022: scrsz = get(0,'ScreenSize');\n", - "_matlab(\"scrsz = get(0,'ScreenSize');\")\n", - "# MATLAB L5023: h=figure('Position',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.8 scrsz(4)*.8]);\n", "__tracker.new_figure(\"h=figure('Position',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.8 scrsz(4)*.8])\")\n", - "_matlab(\"h=figure('Position',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.8 scrsz(4)*.8]);\")\n", - "# MATLAB L5024: \n", "#\n", - "# MATLAB L5025: subplot(2,2,3);spikeCollSim.plot;\n", "__tracker.annotate('subplot(2,2,3)')\n", "__tracker.annotate('spikeCollSim.plot')\n", - "_matlab('subplot(2,2,3);spikeCollSim.plot;')\n", - "# MATLAB L5026: set(gca,'YTick',0:5:numRealizations,'YTickLabel',0:5:numRealizations);\n", - "_matlab(\"set(gca,'YTick',0:5:numRealizations,'YTickLabel',0:5:numRealizations);\")\n", - "# MATLAB L5027: title({[num2str(numRealizations) ' Simulated Point Process Sample Paths']},...\n", - "_matlab(\"title({[num2str(numRealizations) ' Simulated Point Process Sample Paths']},...\")\n", - "# MATLAB L5028: 'FontWeight','bold','Fontsize',14,'FontName','Arial');\n", - "_matlab(\"'FontWeight','bold','Fontsize',14,'FontName','Arial');\")\n", - "# MATLAB L5029: xlabel('time [s]','Interpreter','none','FontName', 'Arial',...\n", - "_matlab(\"xlabel('time [s]','Interpreter','none','FontName', 'Arial',...\")\n", - "# MATLAB L5030: 'Fontsize',12,'FontWeight','bold');\n", - "_matlab(\"'Fontsize',12,'FontWeight','bold');\")\n", - "# MATLAB L5031: ylabel('Trial [k]','Interpreter','none','FontName', 'Arial',...\n", - "_matlab(\"ylabel('Trial [k]','Interpreter','none','FontName', 'Arial',...\")\n", - "# MATLAB L5032: 'Fontsize',12,'FontWeight','bold');\n", - "_matlab(\"'Fontsize',12,'FontWeight','bold');\")\n", - "# MATLAB L5033: \n", - "#\n", - "# MATLAB L5034: subplot(2,2,1);lambda.plot;\n", + "#\n", "__tracker.annotate('subplot(2,2,1)')\n", "__tracker.annotate('lambda.plot')\n", - "_matlab('subplot(2,2,1);lambda.plot;')\n", - "# MATLAB L5035: title({'Simulated Conditional Intensity Function (CIF)'},...\n", - "_matlab(\"title({'Simulated Conditional Intensity Function (CIF)'},...\")\n", - "# MATLAB L5036: 'FontWeight','bold','FontSize',14,'FontName','Arial');\n", - "_matlab(\"'FontWeight','bold','FontSize',14,'FontName','Arial');\")\n", - "# MATLAB L5037: xlabel('time [s]','Interpreter','none','FontName', 'Arial',...\n", - "_matlab(\"xlabel('time [s]','Interpreter','none','FontName', 'Arial',...\")\n", - "# MATLAB L5038: 'Fontsize',12,'FontWeight','bold');\n", - "_matlab(\"'Fontsize',12,'FontWeight','bold');\")\n", - "# MATLAB L5039: hy=get(gca,'YLabel');\n", - "_matlab(\"hy=get(gca,'YLabel');\")\n", - "# MATLAB L5040: set(hy,'FontName', 'Arial','FontSize',14,'FontWeight','bold');\n", - "_matlab(\"set(hy,'FontName', 'Arial','FontSize',14,'FontWeight','bold');\")\n", - "# MATLAB L5041: \n", - "#\n", - "# MATLAB L5042: x = load(fullfile(psthDir,'Results.mat'));\n", - "_matlab(\"x = load(fullfile(psthDir,'Results.mat'));\")\n", - "# MATLAB L5043: numTrials = x.Results.Data.Spike_times_STC.balanced_SUA.Nr_trials;\n", - "_matlab('numTrials = x.Results.Data.Spike_times_STC.balanced_SUA.Nr_trials;')\n", - "# MATLAB L5044: cellNum=6; clear nst;\n", - "_matlab('cellNum=6; clear nst;')\n", - "# MATLAB L5045: for i=1:numTrials\n", - "_matlab('for i=1:numTrials')\n", - "# MATLAB L5046: spikeTimes{i}=x.Results.Data.Spike_times_STC.balanced_SUA.spike_times{1,i,cellNum};\n", - "_matlab('spikeTimes{i}=x.Results.Data.Spike_times_STC.balanced_SUA.spike_times{1,i,cellNum};')\n", - "# MATLAB L5047: nst{i} = nspikeTrain(spikeTimes{i});\n", - "_matlab('nst{i} = nspikeTrain(spikeTimes{i});')\n", - "# MATLAB L5048: nst{i}.setName(num2str(cellNum));\n", - "_matlab('nst{i}.setName(num2str(cellNum));')\n", - "# MATLAB L5049: end\n", - "_matlab('end')\n", - "# MATLAB L5050: \n", - "#\n", - "# MATLAB L5051: spikeCollReal1=nstColl(nst);\n", - "_matlab('spikeCollReal1=nstColl(nst);')\n", - "# MATLAB L5052: spikeCollReal1.setMinTime(0); spikeCollReal1.setMaxTime(2);\n", - "_matlab('spikeCollReal1.setMinTime(0); spikeCollReal1.setMaxTime(2);')\n", - "# MATLAB L5053: subplot(2,2,2);spikeCollReal1.plot; set(gca,'YTick',0:2:numTrials,...\n", + "#\n", + "#\n", "__tracker.annotate('subplot(2,2,2)')\n", "__tracker.annotate('spikeCollReal1.plot')\n", - "_matlab(\"subplot(2,2,2);spikeCollReal1.plot; set(gca,'YTick',0:2:numTrials,...\")\n", - "# MATLAB L5054: 'YTickLabel',0:2:numTrials);\n", - "_matlab(\"'YTickLabel',0:2:numTrials);\")\n", - "# MATLAB L5055: %set(gca,'xtick',[0:.5:2],'xtickLabel',{'0','0.5','1','1.5','2'});\n", "# set(gca,'xtick',[0:.5:2],'xtickLabel',{'0','0.5','1','1.5','2'});\n", - "# MATLAB L5056: xlabel('time [s]','Interpreter','none','FontName', 'Arial',...\n", - "_matlab(\"xlabel('time [s]','Interpreter','none','FontName', 'Arial',...\")\n", - "# MATLAB L5057: 'Fontsize',12,'FontWeight','bold');\n", - "_matlab(\"'Fontsize',12,'FontWeight','bold');\")\n", - "# MATLAB L5058: ylabel('Trial [k]','Interpreter','none','FontName', 'Arial',...\n", - "_matlab(\"ylabel('Trial [k]','Interpreter','none','FontName', 'Arial',...\")\n", - "# MATLAB L5059: 'Fontsize',12,'FontWeight','bold');\n", - "_matlab(\"'Fontsize',12,'FontWeight','bold');\")\n", - "# MATLAB L5060: title('Response to Moving Visual Stimulus (Neuron 6)',...\n", - "_matlab(\"title('Response to Moving Visual Stimulus (Neuron 6)',...\")\n", - "# MATLAB L5061: 'FontWeight','bold','Fontsize',14,'FontName','Arial');\n", - "_matlab(\"'FontWeight','bold','Fontsize',14,'FontName','Arial');\")\n", - "# MATLAB L5062: \n", - "#\n", - "# MATLAB L5063: cellNum=1; clear nst;\n", - "_matlab('cellNum=1; clear nst;')\n", - "# MATLAB L5064: for i=1:numTrials\n", - "_matlab('for i=1:numTrials')\n", - "# MATLAB L5065: spikeTimes{i}=x.Results.Data.Spike_times_STC.balanced_SUA.spike_times{1,i,cellNum};\n", - "_matlab('spikeTimes{i}=x.Results.Data.Spike_times_STC.balanced_SUA.spike_times{1,i,cellNum};')\n", - "# MATLAB L5066: nst{i} = nspikeTrain(spikeTimes{i});\n", - "_matlab('nst{i} = nspikeTrain(spikeTimes{i});')\n", - "# MATLAB L5067: nst{i}.setName(num2str(cellNum));\n", - "_matlab('nst{i}.setName(num2str(cellNum));')\n", - "# MATLAB L5068: end\n", - "_matlab('end')\n", - "# MATLAB L5069: \n", - "#\n", - "# MATLAB L5070: spikeCollReal2=nstColl(nst);\n", - "_matlab('spikeCollReal2=nstColl(nst);')\n", - "# MATLAB L5071: spikeCollReal2.setMinTime(0); spikeCollReal2.setMaxTime(2);\n", - "_matlab('spikeCollReal2.setMinTime(0); spikeCollReal2.setMaxTime(2);')\n", - "# MATLAB L5072: subplot(2,2,4);spikeCollReal2.plot;\n", + "#\n", + "#\n", "__tracker.annotate('subplot(2,2,4)')\n", "__tracker.annotate('spikeCollReal2.plot')\n", - "_matlab('subplot(2,2,4);spikeCollReal2.plot;')\n", - "# MATLAB L5073: set(gca,'YTick',0:2:numTrials,'YTickLabel',0:2:numTrials);\n", - "_matlab(\"set(gca,'YTick',0:2:numTrials,'YTickLabel',0:2:numTrials);\")\n", - "# MATLAB L5074: %set(gca,'xtick',[0:.5:2],'xtickLabel',{'0','0.5','1','1.5','2'});\n", - "# set(gca,'xtick',[0:.5:2],'xtickLabel',{'0','0.5','1','1.5','2'});\n", - "# MATLAB L5075: xlabel('time [s]','Interpreter','none','FontName', 'Arial',...\n", - "_matlab(\"xlabel('time [s]','Interpreter','none','FontName', 'Arial',...\")\n", - "# MATLAB L5076: 'Fontsize',12,'FontWeight','bold');\n", - "_matlab(\"'Fontsize',12,'FontWeight','bold');\")\n", - "# MATLAB L5077: ylabel('Trial [k]','Interpreter','none','FontName', 'Arial',...\n", - "_matlab(\"ylabel('Trial [k]','Interpreter','none','FontName', 'Arial',...\")\n", - "# MATLAB L5078: 'Fontsize',12,'FontWeight','bold');\n", - "_matlab(\"'Fontsize',12,'FontWeight','bold');\")\n", - "# MATLAB L5079: title('Response to Moving Visual Stimulus (Neuron 1)','FontWeight',...\n", - "_matlab(\"title('Response to Moving Visual Stimulus (Neuron 1)','FontWeight',...\")\n", - "# MATLAB L5080: 'bold','Fontsize',14,'FontName','Arial');\n", - "_matlab(\"'bold','Fontsize',14,'FontName','Arial');\")\n" + "# set(gca,'xtick',[0:.5:2],'xtickLabel',{'0','0.5','1','1.5','2'});" ] }, { @@ -1170,173 +355,39 @@ "outputs": [], "source": [ "# SECTION 13: Estimate the PSTH with 50ms windows\n", - "# MATLAB L5300: close all;\n", "plt.close(\"all\")\n", - "# MATLAB L5301: \n", "#\n", - "# MATLAB L5302: scrsz = get(0,'ScreenSize');\n", - "_matlab(\"scrsz = get(0,'ScreenSize');\")\n", - "# MATLAB L5303: h=figure('Position',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.8 scrsz(4)*.8]);\n", "__tracker.new_figure(\"h=figure('Position',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.8 scrsz(4)*.8])\")\n", - "_matlab(\"h=figure('Position',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.8 scrsz(4)*.8]);\")\n", - "# MATLAB L5304: \n", "#\n", - "# MATLAB L5305: binsize = .05; %50ms window\n", "binsize = .05\n", - "# MATLAB L5306: psth = spikeCollSim.psth(binsize);\n", - "_matlab('psth = spikeCollSim.psth(binsize);')\n", - "# MATLAB L5307: psthGLM = spikeCollSim.psthGLM(binsize);\n", - "_matlab('psthGLM = spikeCollSim.psthGLM(binsize);')\n", - "# MATLAB L5308: true = lambda; %rate*delta = expected number of arrivals per bin\n", - "_matlab('true = lambda; %rate*delta = expected number of arrivals per bin')\n", - "# MATLAB L5309: subplot(2,3,4);\n", "__tracker.annotate('subplot(2,3,4)')\n", - "_matlab('subplot(2,3,4);')\n", - "# MATLAB L5310: \n", "#\n", - "# MATLAB L5311: h1=true.plot([],{{' ''b'',''Linewidth'',4'}});\n", "__tracker.annotate(\"h1=true.plot([],{{' ''b'',''Linewidth'',4'}})\")\n", - "_matlab(\"h1=true.plot([],{{' ''b'',''Linewidth'',4'}});\")\n", - "# MATLAB L5312: h3=psthGLM.plot([],{{' ''k'',''Linewidth'',4'}});\n", "__tracker.annotate(\"h3=psthGLM.plot([],{{' ''k'',''Linewidth'',4'}})\")\n", - "_matlab(\"h3=psthGLM.plot([],{{' ''k'',''Linewidth'',4'}});\")\n", - "# MATLAB L5313: h2=psth.plot([],{{' ''rx'',''Linewidth'',4'}});\n", "__tracker.annotate(\"h2=psth.plot([],{{' ''rx'',''Linewidth'',4'}})\")\n", - "_matlab(\"h2=psth.plot([],{{' ''rx'',''Linewidth'',4'}});\")\n", - "# MATLAB L5314: \n", - "#\n", - "# MATLAB L5315: xlabel('time [s]','Interpreter','none','FontName', 'Arial',...\n", - "_matlab(\"xlabel('time [s]','Interpreter','none','FontName', 'Arial',...\")\n", - "# MATLAB L5316: 'Fontsize',12,'FontWeight','bold');\n", - "_matlab(\"'Fontsize',12,'FontWeight','bold');\")\n", - "# MATLAB L5317: ylabel('[spikes/sec]','Interpreter','none','FontName', 'Arial',...\n", - "_matlab(\"ylabel('[spikes/sec]','Interpreter','none','FontName', 'Arial',...\")\n", - "# MATLAB L5318: 'Fontsize',12,'FontWeight','bold');\n", - "_matlab(\"'Fontsize',12,'FontWeight','bold');\")\n", - "# MATLAB L5319: \n", - "#\n", - "# MATLAB L5320: legend off;\n", - "_matlab('legend off;')\n", - "# MATLAB L5321: h_legend=legend([h1(1) h2(1) h3(1)],'true','PSTH','PSTH_{glm}');\n", - "_matlab(\"h_legend=legend([h1(1) h2(1) h3(1)],'true','PSTH','PSTH_{glm}');\")\n", - "# MATLAB L5322: pos = get(h_legend,'position');\n", - "_matlab(\"pos = get(h_legend,'position');\")\n", - "# MATLAB L5323: set(h_legend, 'position',[pos(1)+.005 pos(2)+.095 pos(3:4)]);\n", - "_matlab(\"set(h_legend, 'position',[pos(1)+.005 pos(2)+.095 pos(3:4)]);\")\n", - "# MATLAB L5324: \n", - "#\n", - "# MATLAB L5325: \n", - "#\n", - "# MATLAB L5326: %\n", - "#\n", - "# MATLAB L5327: subplot(2,3,1);spikeCollSim.plot;\n", + "#\n", + "#\n", + "#\n", + "#\n", + "#\n", "__tracker.annotate('subplot(2,3,1)')\n", "__tracker.annotate('spikeCollSim.plot')\n", - "_matlab('subplot(2,3,1);spikeCollSim.plot;')\n", - "# MATLAB L5328: set(gca,'YTick',0:2:spikeCollSim.numSpikeTrains,'YTickLabel',0:2:spikeCollSim.numSpikeTrains);\n", - "_matlab(\"set(gca,'YTick',0:2:spikeCollSim.numSpikeTrains,'YTickLabel',0:2:spikeCollSim.numSpikeTrains);\")\n", - "# MATLAB L5329: xlabel('time [s]','Interpreter','none','FontName', 'Arial','Fontsize',...\n", - "_matlab(\"xlabel('time [s]','Interpreter','none','FontName', 'Arial','Fontsize',...\")\n", - "# MATLAB L5330: 12,'FontWeight','bold');\n", - "_matlab(\"12,'FontWeight','bold');\")\n", - "# MATLAB L5331: ylabel('Trial [k]','Interpreter','none','FontName', 'Arial',...\n", - "_matlab(\"ylabel('Trial [k]','Interpreter','none','FontName', 'Arial',...\")\n", - "# MATLAB L5332: 'Fontsize',12,'FontWeight','bold');\n", - "_matlab(\"'Fontsize',12,'FontWeight','bold');\")\n", - "# MATLAB L5333: \n", - "#\n", - "# MATLAB L5334: subplot(2,3,5);\n", + "#\n", "__tracker.annotate('subplot(2,3,5)')\n", - "_matlab('subplot(2,3,5);')\n", - "# MATLAB L5335: binsize = .05; %50ms window\n", "binsize = .05\n", - "# MATLAB L5336: psthReal1 = spikeCollReal1.psth(binsize);\n", - "_matlab('psthReal1 = spikeCollReal1.psth(binsize);')\n", - "# MATLAB L5337: psthGLMReal1 = spikeCollReal1.psthGLM(binsize);%,[],[],[],[],[],1000);\n", - "_matlab('psthGLMReal1 = spikeCollReal1.psthGLM(binsize);%,[],[],[],[],[],1000);')\n", - "# MATLAB L5338: \n", "#\n", - "# MATLAB L5339: h3=psthGLMReal1.plot([],{{' ''k'',''Linewidth'',4'}});\n", "__tracker.annotate(\"h3=psthGLMReal1.plot([],{{' ''k'',''Linewidth'',4'}})\")\n", - "_matlab(\"h3=psthGLMReal1.plot([],{{' ''k'',''Linewidth'',4'}});\")\n", - "# MATLAB L5340: h2=psthReal1.plot([],{{' ''rx'',''Linewidth'',4'}});\n", "__tracker.annotate(\"h2=psthReal1.plot([],{{' ''rx'',''Linewidth'',4'}})\")\n", - "_matlab(\"h2=psthReal1.plot([],{{' ''rx'',''Linewidth'',4'}});\")\n", - "# MATLAB L5341: xlabel('time [s]','Interpreter','none','FontName', 'Arial','Fontsize',...\n", - "_matlab(\"xlabel('time [s]','Interpreter','none','FontName', 'Arial','Fontsize',...\")\n", - "# MATLAB L5342: 12,'FontWeight','bold');\n", - "_matlab(\"12,'FontWeight','bold');\")\n", - "# MATLAB L5343: ylabel('[spikes/sec]','Interpreter','none','FontName', 'Arial','Fontsize',...\n", - "_matlab(\"ylabel('[spikes/sec]','Interpreter','none','FontName', 'Arial','Fontsize',...\")\n", - "# MATLAB L5344: 12,'FontWeight','bold');\n", - "_matlab(\"12,'FontWeight','bold');\")\n", - "# MATLAB L5345: \n", - "#\n", - "# MATLAB L5346: h_legend=legend([h2(1) h3(1)],'PSTH','PSTH_{glm}');\n", - "_matlab(\"h_legend=legend([h2(1) h3(1)],'PSTH','PSTH_{glm}');\")\n", - "# MATLAB L5347: pos = get(h_legend,'position');\n", - "_matlab(\"pos = get(h_legend,'position');\")\n", - "# MATLAB L5348: set(h_legend, 'position',[pos(1)+.005 pos(2)+.07 pos(3:4)]);\n", - "_matlab(\"set(h_legend, 'position',[pos(1)+.005 pos(2)+.07 pos(3:4)]);\")\n", - "# MATLAB L5349: subplot(2,3,2); spikeCollReal1.plot;\n", + "#\n", "__tracker.annotate('subplot(2,3,2)')\n", "__tracker.annotate('spikeCollReal1.plot')\n", - "_matlab('subplot(2,3,2); spikeCollReal1.plot;')\n", - "# MATLAB L5350: set(gca,'YTick',0:2:spikeCollReal2.numSpikeTrains,'YTickLabel',0:2:spikeCollReal2.numSpikeTrains);\n", - "_matlab(\"set(gca,'YTick',0:2:spikeCollReal2.numSpikeTrains,'YTickLabel',0:2:spikeCollReal2.numSpikeTrains);\")\n", - "# MATLAB L5351: xlabel('time [s]','Interpreter','none','FontName', 'Arial','Fontsize',...\n", - "_matlab(\"xlabel('time [s]','Interpreter','none','FontName', 'Arial','Fontsize',...\")\n", - "# MATLAB L5352: 12,'FontWeight','bold');\n", - "_matlab(\"12,'FontWeight','bold');\")\n", - "# MATLAB L5353: ylabel('Trial [k]','Interpreter','none','FontName', 'Arial',...\n", - "_matlab(\"ylabel('Trial [k]','Interpreter','none','FontName', 'Arial',...\")\n", - "# MATLAB L5354: 'Fontsize',12,'FontWeight','bold');\n", - "_matlab(\"'Fontsize',12,'FontWeight','bold');\")\n", - "# MATLAB L5355: subplot(2,3,6);\n", "__tracker.annotate('subplot(2,3,6)')\n", - "_matlab('subplot(2,3,6);')\n", - "# MATLAB L5356: psthReal2 = spikeCollReal2.psth(binsize);\n", - "_matlab('psthReal2 = spikeCollReal2.psth(binsize);')\n", - "# MATLAB L5357: psthGLMReal2 = spikeCollReal2.psthGLM(binsize);%,[],[],[],[],[],1000);\n", - "_matlab('psthGLMReal2 = spikeCollReal2.psthGLM(binsize);%,[],[],[],[],[],1000);')\n", - "# MATLAB L5358: h3=psthGLMReal2.plot([],{{' ''k'',''Linewidth'',4'}});\n", "__tracker.annotate(\"h3=psthGLMReal2.plot([],{{' ''k'',''Linewidth'',4'}})\")\n", - "_matlab(\"h3=psthGLMReal2.plot([],{{' ''k'',''Linewidth'',4'}});\")\n", - "# MATLAB L5359: h2=psthReal2.plot([],{{' ''rx'',''Linewidth'',4'}});\n", "__tracker.annotate(\"h2=psthReal2.plot([],{{' ''rx'',''Linewidth'',4'}})\")\n", - "_matlab(\"h2=psthReal2.plot([],{{' ''rx'',''Linewidth'',4'}});\")\n", - "# MATLAB L5360: xlabel('time [s]','Interpreter','none','FontName', 'Arial','Fontsize',...\n", - "_matlab(\"xlabel('time [s]','Interpreter','none','FontName', 'Arial','Fontsize',...\")\n", - "# MATLAB L5361: 12,'FontWeight','bold');\n", - "_matlab(\"12,'FontWeight','bold');\")\n", - "# MATLAB L5362: ylabel('[spikes/sec]','Interpreter','none','FontName', 'Arial','Fontsize',...\n", - "_matlab(\"ylabel('[spikes/sec]','Interpreter','none','FontName', 'Arial','Fontsize',...\")\n", - "# MATLAB L5363: 12,'FontWeight','bold');\n", - "_matlab(\"12,'FontWeight','bold');\")\n", - "# MATLAB L5364: \n", - "#\n", - "# MATLAB L5365: \n", - "#\n", - "# MATLAB L5366: h_legend=legend([h2(1) h3(1)],'PSTH','PSTH_{glm}');\n", - "_matlab(\"h_legend=legend([h2(1) h3(1)],'PSTH','PSTH_{glm}');\")\n", - "# MATLAB L5367: pos = get(h_legend,'position');\n", - "_matlab(\"pos = get(h_legend,'position');\")\n", - "# MATLAB L5368: set(h_legend, 'position',[pos(1)+.005 pos(2)+.07 pos(3:4)]);\n", - "_matlab(\"set(h_legend, 'position',[pos(1)+.005 pos(2)+.07 pos(3:4)]);\")\n", - "# MATLAB L5369: subplot(2,3,3); spikeCollReal2.plot;\n", + "#\n", + "#\n", "__tracker.annotate('subplot(2,3,3)')\n", - "__tracker.annotate('spikeCollReal2.plot')\n", - "_matlab('subplot(2,3,3); spikeCollReal2.plot;')\n", - "# MATLAB L5370: set(gca,'YTick',0:2:spikeCollReal2.numSpikeTrains,'YTickLabel',0:2:spikeCollReal2.numSpikeTrains);\n", - "_matlab(\"set(gca,'YTick',0:2:spikeCollReal2.numSpikeTrains,'YTickLabel',0:2:spikeCollReal2.numSpikeTrains);\")\n", - "# MATLAB L5371: xlabel('time [s]','Interpreter','none','FontName', 'Arial','Fontsize',...\n", - "_matlab(\"xlabel('time [s]','Interpreter','none','FontName', 'Arial','Fontsize',...\")\n", - "# MATLAB L5372: 12,'FontWeight','bold');\n", - "_matlab(\"12,'FontWeight','bold');\")\n", - "# MATLAB L5373: ylabel('Trial [k]','Interpreter','none','FontName', 'Arial',...\n", - "_matlab(\"ylabel('Trial [k]','Interpreter','none','FontName', 'Arial',...\")\n", - "# MATLAB L5374: 'Fontsize',12,'FontWeight','bold');\n", - "_matlab(\"'Fontsize',12,'FontWeight','bold');\")\n" + "__tracker.annotate('spikeCollReal2.plot')" ] }, { @@ -1347,98 +398,26 @@ "outputs": [], "source": [ "# SECTION 14: Example 3b - SSGLM Example\n", - "# MATLAB L5600: % Example of estimating with-in and across trial dynamics Methods from: G. Czanner, U. T. Eden, S. Wirth, M. Yanike, W. A. Suzuki, and E. N. Brown, \"Analysis of between-trial and within-trial neural spiking dynamics.,\" Journal of neurophysiology, vol. 99, no. 5, pp. 2672?2693, May. 2008.\n", "# Example of estimating with-in and across trial dynamics Methods from: G. Czanner, U. T. Eden, S. Wirth, M. Yanike, W. A. Suzuki, and E. N. Brown, \"Analysis of between-trial and within-trial neural spiking dynamics.,\" Journal of neurophysiology, vol. 99, no. 5, pp. 2672?2693, May. 2008.\n", - "# MATLAB L5700: close all;\n", "plt.close(\"all\")\n", - "# MATLAB L5701: clear all;\n", "pass\n", - "# MATLAB L5702: [dataDir,mEPSCDir,explicitStimulusDir,psthDir,placeCellDataDir] = ...\n", - "_matlab('[dataDir,mEPSCDir,explicitStimulusDir,psthDir,placeCellDataDir] = ...')\n", - "# MATLAB L5703: getPaperDataDirs();\n", - "_matlab('getPaperDataDirs();')\n", - "# MATLAB L5704: % set(0,'DefaultFigureRenderer','ZBuffer')\n", "# set(0,'DefaultFigureRenderer','ZBuffer')\n", - "# MATLAB L5705: delta = 0.001; Tmax = 1;\n", - "_matlab('delta = 0.001; Tmax = 1;')\n", - "# MATLAB L5706: time = 0:delta:Tmax;\n", - "_matlab('time = 0:delta:Tmax;')\n", - "# MATLAB L5707: Ts=.001;\n", "Ts = .001\n", - "# MATLAB L5708: numRealizations = 50; %Each realization corresponds to a distinct trial\n", "numRealizations = 50\n", - "# MATLAB L5709: \n", "#\n", - "# MATLAB L5710: for i=1:numRealizations\n", - "_matlab('for i=1:numRealizations')\n", - "# MATLAB L5711: % The within trial dynamics are sinusoidal\n", "# The within trial dynamics are sinusoidal\n", - "# MATLAB L5712: % For each trial the stimulus effect increases\n", "# For each trial the stimulus effect increases\n", - "# MATLAB L5713: f=2; b1(i)=3*((i)/numRealizations);b0=-3;\n", - "_matlab('f=2; b1(i)=3*((i)/numRealizations);b0=-3;')\n", - "# MATLAB L5714: u = sin(2*pi*f*time);\n", - "_matlab('u = sin(2*pi*f*time);')\n", - "# MATLAB L5715: e = zeros(length(time),1); %No Ensemble input\n", - "_matlab('e = zeros(length(time),1); %No Ensemble input')\n", - "# MATLAB L5716: \n", - "#\n", - "# MATLAB L5717: stim=Covariate(time',u,'Stimulus','time','s','Voltage',{'sin'});\n", - "_matlab(\"stim=Covariate(time',u,'Stimulus','time','s','Voltage',{'sin'});\")\n", - "# MATLAB L5718: ens =Covariate(time',e,'Ensemble','time','s','Spikes',{'n1'});\n", - "_matlab(\"ens =Covariate(time',e,'Ensemble','time','s','Spikes',{'n1'});\")\n", - "# MATLAB L5719: \n", - "#\n", - "# MATLAB L5720: mu=b0;\n", - "_matlab('mu=b0;')\n", - "# MATLAB L5721: histCoeffs=[-4 -1 -.5];\n", - "_matlab('histCoeffs=[-4 -1 -.5];')\n", - "# MATLAB L5722: H=tf(histCoeffs,[1],Ts,'Variable','z^-1');\n", - "_matlab(\"H=tf(histCoeffs,[1],Ts,'Variable','z^-1');\")\n", - "# MATLAB L5723: \n", - "#\n", - "# MATLAB L5724: S=tf([b1(i)],1,Ts,'Variable','z^-1');\n", - "_matlab(\"S=tf([b1(i)],1,Ts,'Variable','z^-1');\")\n", - "# MATLAB L5725: E=tf([0],1,Ts,'Variable','z^-1');\n", - "_matlab(\"E=tf([0],1,Ts,'Variable','z^-1');\")\n", - "# MATLAB L5726: simTypeSelect='binomial'; %Parameters are used to compute\n", - "_matlab(\"simTypeSelect='binomial'; %Parameters are used to compute\")\n", - "# MATLAB L5727: %binomial conditional intensity function\n", + "#\n", + "#\n", + "#\n", "# binomial conditional intensity function\n", - "# MATLAB L5728: %\n", "#\n", - "# MATLAB L5729: \n", "#\n", - "# MATLAB L5730: % Obtain a realization of the point process with the current\n", "# Obtain a realization of the point process with the current\n", - "# MATLAB L5731: % stimulus and history effect\n", "# stimulus and history effect\n", - "# MATLAB L5732: [sC, lambdaTemp]=CIF.simulateCIF(mu,H,S,E,stim,ens,1,simTypeSelect);\n", - "_matlab('[sC, lambdaTemp]=CIF.simulateCIF(mu,H,S,E,stim,ens,1,simTypeSelect);')\n", - "# MATLAB L5733: \n", - "#\n", - "# MATLAB L5734: if(i==1)\n", - "_matlab('if(i==1)')\n", - "# MATLAB L5735: lambda=lambdaTemp; %Store the conditional intensity function\n", - "_matlab('lambda=lambdaTemp; %Store the conditional intensity function')\n", - "# MATLAB L5736: else\n", - "_matlab('else')\n", - "# MATLAB L5737: lambda = lambda.merge(lambdaTemp); %Add it to the other realizations\n", - "_matlab('lambda = lambda.merge(lambdaTemp); %Add it to the other realizations')\n", - "# MATLAB L5738: end\n", - "_matlab('end')\n", - "# MATLAB L5739: \n", - "#\n", - "# MATLAB L5740: nst{i} = sC.getNST(1); %get the neural spikeTrain from the collection\n", - "_matlab('nst{i} = sC.getNST(1); %get the neural spikeTrain from the collection')\n", - "# MATLAB L5741: nst{i} = nst{i}.resample(1/delta); %make sure that it is sampled at the current samplerate\n", - "_matlab('nst{i} = nst{i}.resample(1/delta); %make sure that it is sampled at the current samplerate')\n", - "# MATLAB L5742: end\n", - "_matlab('end')\n", - "# MATLAB L5743: \n", - "#\n", - "# MATLAB L5744: spikeColl = nstColl(nst); %Create a collection of the spike trains across trials\n", - "_matlab('spikeColl = nstColl(nst); %Create a collection of the spike trains across trials')\n" + "#\n", + "#\n", + "#" ] }, { @@ -1449,127 +428,31 @@ "outputs": [], "source": [ "# SECTION 15: Summarize Simulated Data\n", - "# MATLAB L6000: close all;\n", "plt.close(\"all\")\n", - "# MATLAB L6001: scrsz = get(0,'ScreenSize');\n", - "_matlab(\"scrsz = get(0,'ScreenSize');\")\n", - "# MATLAB L6002: h=figure('Position',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.8 scrsz(4)*.8]);\n", "__tracker.new_figure(\"h=figure('Position',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.8 scrsz(4)*.8])\")\n", - "_matlab(\"h=figure('Position',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.8 scrsz(4)*.8]);\")\n", - "# MATLAB L6003: \n", "#\n", - "# MATLAB L6004: %Plot the raster\n", "# Plot the raster\n", - "# MATLAB L6005: subplot(3,2,[3 4]); spikeColl.plot;\n", "__tracker.annotate('subplot(3,2,[3 4])')\n", "__tracker.annotate('spikeColl.plot')\n", - "_matlab('subplot(3,2,[3 4]); spikeColl.plot;')\n", - "# MATLAB L6006: set(gca,'ytick',0:10:numRealizations,'ytickLabel',0:10:numRealizations);\n", - "_matlab(\"set(gca,'ytick',0:10:numRealizations,'ytickLabel',0:10:numRealizations);\")\n", - "# MATLAB L6007: set(gca,'xtick',0:.1:Tmax,'xtickLabel',0:.1:Tmax); xlabel('');\n", - "_matlab(\"set(gca,'xtick',0:.1:Tmax,'xtickLabel',0:.1:Tmax); xlabel('');\")\n", - "# MATLAB L6008: xlabel('time [s]','Interpreter','none','FontName', 'Arial','Fontsize',...\n", - "_matlab(\"xlabel('time [s]','Interpreter','none','FontName', 'Arial','Fontsize',...\")\n", - "# MATLAB L6009: 12,'FontWeight','bold');\n", - "_matlab(\"12,'FontWeight','bold');\")\n", - "# MATLAB L6010: ylabel('Trial [k]','Interpreter','none','FontName', 'Arial','Fontsize',...\n", - "_matlab(\"ylabel('Trial [k]','Interpreter','none','FontName', 'Arial','Fontsize',...\")\n", - "# MATLAB L6011: 12,'FontWeight','bold');\n", - "_matlab(\"12,'FontWeight','bold');\")\n", - "# MATLAB L6012: title('Simulated Neural Raster','Interpreter','none','FontName', 'Arial',...\n", - "_matlab(\"title('Simulated Neural Raster','Interpreter','none','FontName', 'Arial',...\")\n", - "# MATLAB L6013: 'Fontsize',14,'FontWeight','bold');\n", - "_matlab(\"'Fontsize',14,'FontWeight','bold');\")\n", - "# MATLAB L6014: \n", - "#\n", - "# MATLAB L6015: % Plot the actual stimulus effect (not including history)\n", + "#\n", "# Plot the actual stimulus effect (not including history)\n", - "# MATLAB L6016: % The CIF including the history effect is stored in the lambda Covariate\n", "# The CIF including the history effect is stored in the lambda Covariate\n", - "# MATLAB L6017: % above\n", "# above\n", - "# MATLAB L6018: \n", "#\n", - "# MATLAB L6019: \n", "#\n", - "# MATLAB L6020: stimData = exp(b0 + u'*b1);\n", - "_matlab(\"stimData = exp(b0 + u'*b1);\")\n", - "# MATLAB L6021: if(strcmp(simTypeSelect,'binomial'))\n", - "_matlab(\"if(strcmp(simTypeSelect,'binomial'))\")\n", - "# MATLAB L6022: stimData = stimData./(1+stimData);\n", - "_matlab('stimData = stimData./(1+stimData);')\n", - "# MATLAB L6023: end\n", - "_matlab('end')\n", - "# MATLAB L6024: \n", "#\n", - "# MATLAB L6025: %Plot the trial dependence\n", "# Plot the trial dependence\n", - "# MATLAB L6026: subplot(3,2,1); plot(time,u,'k','LineWidth',3);\n", "__tracker.annotate('subplot(3,2,1)')\n", "__tracker.annotate(\"plot(time,u,'k','LineWidth',3)\")\n", - "_matlab(\"subplot(3,2,1); plot(time,u,'k','LineWidth',3);\")\n", - "# MATLAB L6027: % xlabel('time [s]');ylabel('stimulus');\n", "# xlabel('time [s]');ylabel('stimulus');\n", - "# MATLAB L6028: xlabel('time [s]','Interpreter','none','FontName', 'Arial','Fontsize',...\n", - "_matlab(\"xlabel('time [s]','Interpreter','none','FontName', 'Arial','Fontsize',...\")\n", - "# MATLAB L6029: 12,'FontWeight','bold');\n", - "_matlab(\"12,'FontWeight','bold');\")\n", - "# MATLAB L6030: ylabel('Stimulus','Interpreter','none','FontName', 'Arial','Fontsize',...\n", - "_matlab(\"ylabel('Stimulus','Interpreter','none','FontName', 'Arial','Fontsize',...\")\n", - "# MATLAB L6031: 12,'FontWeight','bold');\n", - "_matlab(\"12,'FontWeight','bold');\")\n", - "# MATLAB L6032: title('Within Trial Stimulus','Interpreter','none','FontName', 'Arial',...\n", - "_matlab(\"title('Within Trial Stimulus','Interpreter','none','FontName', 'Arial',...\")\n", - "# MATLAB L6033: 'Fontsize',14,'FontWeight','bold');\n", - "_matlab(\"'Fontsize',14,'FontWeight','bold');\")\n", - "# MATLAB L6034: \n", - "#\n", - "# MATLAB L6035: subplot(3,2,2); plot(1:length(b1),b1,'k','LineWidth',3);\n", + "#\n", "__tracker.annotate('subplot(3,2,2)')\n", "__tracker.annotate(\"plot(1:length(b1),b1,'k','LineWidth',3)\")\n", - "_matlab(\"subplot(3,2,2); plot(1:length(b1),b1,'k','LineWidth',3);\")\n", - "# MATLAB L6036: xlabel('Trial [k]','Interpreter','none','FontName', 'Arial','Fontsize',...\n", - "_matlab(\"xlabel('Trial [k]','Interpreter','none','FontName', 'Arial','Fontsize',...\")\n", - "# MATLAB L6037: 12,'FontWeight','bold');\n", - "_matlab(\"12,'FontWeight','bold');\")\n", - "# MATLAB L6038: ylabel('Stimulus Gain','Interpreter','none','FontName', 'Arial','Fontsize',...\n", - "_matlab(\"ylabel('Stimulus Gain','Interpreter','none','FontName', 'Arial','Fontsize',...\")\n", - "# MATLAB L6039: 12,'FontWeight','bold');\n", - "_matlab(\"12,'FontWeight','bold');\")\n", - "# MATLAB L6040: title('Across Trial Stimulus Gain','Interpreter','none','FontName',...\n", - "_matlab(\"title('Across Trial Stimulus Gain','Interpreter','none','FontName',...\")\n", - "# MATLAB L6041: 'Arial','Fontsize',14,'FontWeight','bold');\n", - "_matlab(\"'Arial','Fontsize',14,'FontWeight','bold');\")\n", - "# MATLAB L6042: \n", - "#\n", - "# MATLAB L6043: subplot(3,2,[5 6]);\n", + "#\n", "__tracker.annotate('subplot(3,2,[5 6])')\n", - "_matlab('subplot(3,2,[5 6]);')\n", - "# MATLAB L6044: imagesc(stimData'./delta); set(gca, 'YDir','normal');\n", "__tracker.annotate(\"imagesc(stimData'./delta); set(gca, 'YDir','normal');\")\n", - "_matlab(\"imagesc(stimData'./delta); set(gca, 'YDir','normal');\")\n", - "# MATLAB L6045: set(gca,'xtick',0:100:Tmax/delta,'xtickLabel',0:.1:Tmax);\n", - "_matlab(\"set(gca,'xtick',0:100:Tmax/delta,'xtickLabel',0:.1:Tmax);\")\n", - "# MATLAB L6046: set(gca,'ytick',0:10:numRealizations,'ytickLabel',0:10:numRealizations);\n", - "_matlab(\"set(gca,'ytick',0:10:numRealizations,'ytickLabel',0:10:numRealizations);\")\n", - "# MATLAB L6047: xlabel('time [s]','Interpreter','none','FontName', 'Arial',...\n", - "_matlab(\"xlabel('time [s]','Interpreter','none','FontName', 'Arial',...\")\n", - "# MATLAB L6048: 'Fontsize',12,'FontWeight','bold');\n", - "_matlab(\"'Fontsize',12,'FontWeight','bold');\")\n", - "# MATLAB L6049: ylabel('Trial [k]','Interpreter','none','FontName', 'Arial',...\n", - "_matlab(\"ylabel('Trial [k]','Interpreter','none','FontName', 'Arial',...\")\n", - "# MATLAB L6050: 'Fontsize',12,'FontWeight','bold');\n", - "_matlab(\"'Fontsize',12,'FontWeight','bold');\")\n", - "# MATLAB L6051: title('True Conditional Intensity Function','Interpreter',...\n", - "_matlab(\"title('True Conditional Intensity Function','Interpreter',...\")\n", - "# MATLAB L6052: 'none','FontName', 'Arial','Fontsize',14,'FontWeight','bold');\n", - "_matlab(\"'none','FontName', 'Arial','Fontsize',14,'FontWeight','bold');\")\n", - "# MATLAB L6053: \n", - "#\n", - "# MATLAB L6054: \n", - "#\n", - "# MATLAB L6055: axis tight;\n", - "_matlab('axis tight;')\n" + "#\n", + "#" ] }, { @@ -1580,122 +463,37 @@ "outputs": [], "source": [ "# SECTION 16: Estimation of the Stimulus Response\n", - "# MATLAB L6300: % Create the covariates that will be used for the GLM regression\n", "# Create the covariates that will be used for the GLM regression\n", - "# MATLAB L6301: stim = Covariate(time,sin(2*pi*f*time),'Stimulus','time','s','V',{'stim'});\n", - "_matlab(\"stim = Covariate(time,sin(2*pi*f*time),'Stimulus','time','s','V',{'stim'});\")\n", - "# MATLAB L6302: baseline = Covariate(time,ones(length(time),1),'Baseline','time','s','',...\n", - "_matlab(\"baseline = Covariate(time,ones(length(time),1),'Baseline','time','s','',...\")\n", - "# MATLAB L6303: {'constant'});\n", - "_matlab(\"{'constant'});\")\n", - "# MATLAB L6304: \n", - "#\n", - "# MATLAB L6305: % Specify the windows of the history coefficients to be estimated\n", + "#\n", "# Specify the windows of the history coefficients to be estimated\n", - "# MATLAB L6306: windowTimes=[0:.001:.003];\n", - "_matlab('windowTimes=[0:.001:.003];')\n", - "# MATLAB L6307: % Number of bins to discrtize time into (used both for the PSTH and for\n", "# Number of bins to discrtize time into (used both for the PSTH and for\n", - "# MATLAB L6308: % thec\n", "# thec\n", - "# MATLAB L6309: % SSGLM model.\n", "# SSGLM model.\n", - "# MATLAB L6310: numBasis = 25;\n", "numBasis = 25\n", - "# MATLAB L6311: \n", "#\n", - "# MATLAB L6312: spikeColl.resample(1/delta); % Enforce sampleRate\n", - "_matlab('spikeColl.resample(1/delta); % Enforce sampleRate')\n", - "# MATLAB L6313: spikeColl.setMaxTime(Tmax); % Make all spikeTrains end at time Tmax\n", - "_matlab('spikeColl.setMaxTime(Tmax); % Make all spikeTrains end at time Tmax')\n", - "# MATLAB L6314: \n", "#\n", - "# MATLAB L6315: \n", "#\n", - "# MATLAB L6316: dN=spikeColl.dataToMatrix'; % Convert the spikeTrains into a matrix\n", - "_matlab(\"dN=spikeColl.dataToMatrix'; % Convert the spikeTrains into a matrix\")\n", - "# MATLAB L6317: % of 1's and 0's corresponding to the presence\n", "# of 1's and 0's corresponding to the presence\n", - "# MATLAB L6318: % or absense of a spike in each time window.\n", "# or absense of a spike in each time window.\n", - "# MATLAB L6319: dN(dN>1)=1; % One should sample finely enough so there is\n", - "_matlab('dN(dN>1)=1; % One should sample finely enough so there is')\n", - "# MATLAB L6320: % one spike per bin. Here we make sure that\n", "# one spike per bin. Here we make sure that\n", - "# MATLAB L6321: % this is the case regardless of the\n", "# this is the case regardless of the\n", - "# MATLAB L6322: % sampleRate\n", "# sampleRate\n", - "# MATLAB L6323: \n", "#\n", - "# MATLAB L6324: % The width of each rectangular basis pulse is determined by Tmax and by the\n", "# The width of each rectangular basis pulse is determined by Tmax and by the\n", - "# MATLAB L6325: % number of basis pulses to use.\n", "# number of basis pulses to use.\n", - "# MATLAB L6326: basisWidth=(spikeColl.maxTime-spikeColl.minTime)/numBasis;\n", - "_matlab('basisWidth=(spikeColl.maxTime-spikeColl.minTime)/numBasis;')\n", - "# MATLAB L6327: \n", - "#\n", - "# MATLAB L6328: if(simTypeSelect==0)\n", - "_matlab('if(simTypeSelect==0)')\n", - "# MATLAB L6329: fitType='binomial';\n", - "_matlab(\"fitType='binomial';\")\n", - "# MATLAB L6330: else\n", - "_matlab('else')\n", - "# MATLAB L6331: fitType='poisson';\n", - "_matlab(\"fitType='poisson';\")\n", - "# MATLAB L6332: end\n", - "_matlab('end')\n", - "# MATLAB L6333: if(strcmp(fitType,'binomial'))\n", - "_matlab(\"if(strcmp(fitType,'binomial'))\")\n", - "# MATLAB L6334: Algorithm = 'BNLRCG'; % BNLRCG - faster Truncated, L-2 Regularized,\n", - "_matlab(\"Algorithm = 'BNLRCG'; % BNLRCG - faster Truncated, L-2 Regularized,\")\n", - "# MATLAB L6335: % Binomial Logistic Regression with Conjugate\n", + "#\n", "# Binomial Logistic Regression with Conjugate\n", - "# MATLAB L6336: % Gradient Solver by Demba Ba (demba@mit.edu).\n", "# Gradient Solver by Demba Ba (demba@mit.edu).\n", - "# MATLAB L6337: else\n", - "_matlab('else')\n", - "# MATLAB L6338: Algorithm = 'GLM'; % Standard Matlab GLM (Can be used for binomial or\n", - "_matlab(\"Algorithm = 'GLM'; % Standard Matlab GLM (Can be used for binomial or\")\n", - "# MATLAB L6339: % or Poisson CIFs\n", "# or Poisson CIFs\n", - "# MATLAB L6340: end\n", - "_matlab('end')\n", - "# MATLAB L6341: \n", "#\n", - "# MATLAB L6342: % Use the values obtained from a PSTH to initialize the SSGLM filter\n", "# Use the values obtained from a PSTH to initialize the SSGLM filter\n", - "# MATLAB L6343: [psthSig, ~, psthResult] =spikeColl.psthGLM(basisWidth,windowTimes,fitType);\n", - "_matlab('[psthSig, ~, psthResult] =spikeColl.psthGLM(basisWidth,windowTimes,fitType);')\n", - "# MATLAB L6344: gamma0=psthResult.getHistCoeffs';%+.1*randn(size(histCoeffs));\n", - "_matlab(\"gamma0=psthResult.getHistCoeffs';%+.1*randn(size(histCoeffs));\")\n", - "# MATLAB L6345: gamma0(isnan(gamma0))=-5; % Depending on the amount of data the\n", - "_matlab('gamma0(isnan(gamma0))=-5; % Depending on the amount of data the')\n", - "# MATLAB L6346: % the psth may not identify all parameters\n", "# the psth may not identify all parameters\n", - "# MATLAB L6347: % Just make sure that the estimates are real\n", "# Just make sure that the estimates are real\n", - "# MATLAB L6348: % numbers\n", "# numbers\n", - "# MATLAB L6349: \n", "#\n", - "# MATLAB L6350: x0=psthResult.getCoeffs; %The initial estimate for the SSGLM model\n", - "_matlab('x0=psthResult.getCoeffs; %The initial estimate for the SSGLM model')\n", - "# MATLAB L6351: \n", "#\n", - "# MATLAB L6352: % Estimate the variance within each time bin across trials\n", "# Estimate the variance within each time bin across trials\n", - "# MATLAB L6353: numVarEstIter=10;\n", - "numVarEstIter = 10\n", - "# MATLAB L6354: Q0 = spikeColl.estimateVarianceAcrossTrials(numBasis,windowTimes,...\n", - "_matlab('Q0 = spikeColl.estimateVarianceAcrossTrials(numBasis,windowTimes,...')\n", - "# MATLAB L6355: numVarEstIter,fitType);\n", - "_matlab('numVarEstIter,fitType);')\n", - "# MATLAB L6356: A=eye(numBasis,numBasis);\n", - "_matlab('A=eye(numBasis,numBasis);')\n", - "# MATLAB L6357: delta = 1/spikeColl.sampleRate;\n", - "_matlab('delta = 1/spikeColl.sampleRate;')\n" + "numVarEstIter = 10" ] }, { @@ -1706,314 +504,59 @@ "outputs": [], "source": [ "# SECTION 17: Run the SSGLM Filter\n", - "# MATLAB L6600: CompilingHelpFile=1;\n", "CompilingHelpFile = 1\n", - "# MATLAB L6601: % Commented out to speed up help file creation ...\n", "# Commented out to speed up help file creation ...\n", - "# MATLAB L6602: if(~CompilingHelpFile)\n", - "_matlab('if(~CompilingHelpFile)')\n", - "# MATLAB L6603: Q0d=diag(Q0);\n", - "_matlab('Q0d=diag(Q0);')\n", - "# MATLAB L6604: neuronName = psthResult.neuronNumber;\n", - "_matlab('neuronName = psthResult.neuronNumber;')\n", - "# MATLAB L6605: [xK,WK, WkuFinal,Qhat,gammahat,fitResults,stimulus,stimCIs,logll,...\n", - "_matlab('[xK,WK, WkuFinal,Qhat,gammahat,fitResults,stimulus,stimCIs,logll,...')\n", - "# MATLAB L6606: QhatAll,gammahatAll,nIter]=DecodingAlgorithms.PPSS_EMFB(A,Q0d,x0,...\n", - "_matlab('QhatAll,gammahatAll,nIter]=DecodingAlgorithms.PPSS_EMFB(A,Q0d,x0,...')\n", - "# MATLAB L6607: dN,fitType,delta,gamma0,windowTimes, numBasis,neuronName);\n", - "_matlab('dN,fitType,delta,gamma0,windowTimes, numBasis,neuronName);')\n", - "# MATLAB L6608: \n", - "#\n", - "# MATLAB L6609: fR = fitResults.toStructure;\n", - "_matlab('fR = fitResults.toStructure;')\n", - "# MATLAB L6610: psthR = psthResult.toStructure;\n", - "_matlab('psthR = psthResult.toStructure;')\n", - "# MATLAB L6611: end\n", - "_matlab('end')\n", - "# MATLAB L6612: % save SSGLMExampleData psthR fR xK WK WkuFinal Qhat gammahat fitResults stimulus stimCIs logll QhatAll gammahatAll nIter;\n", + "#\n", "# save SSGLMExampleData psthR fR xK WK WkuFinal Qhat gammahat fitResults stimulus stimCIs logll QhatAll gammahatAll nIter;\n", - "# MATLAB L6800: installPath = which('nSTAT_Install');\n", - "_matlab(\"installPath = which('nSTAT_Install');\")\n", - "# MATLAB L6801: if isempty(installPath)\n", - "_matlab('if isempty(installPath)')\n", - "# MATLAB L6802: error('nSTATPaperExamples:MissingInstallPath', ...\n", - "_matlab(\"error('nSTATPaperExamples:MissingInstallPath', ...\")\n", - "# MATLAB L6803: 'Could not locate nSTAT_Install.m on MATLAB path.');\n", - "_matlab(\"'Could not locate nSTAT_Install.m on MATLAB path.');\")\n", - "# MATLAB L6804: end\n", - "_matlab('end')\n", - "# MATLAB L6805: nstatRoot = fileparts(installPath);\n", - "_matlab('nstatRoot = fileparts(installPath);')\n", - "# MATLAB L6806: if exist(nstatRoot,'dir') == 7 && ~strcmp(pwd,nstatRoot)\n", - "_matlab(\"if exist(nstatRoot,'dir') == 7 && ~strcmp(pwd,nstatRoot)\")\n", - "# MATLAB L6807: cd(nstatRoot);\n", - "_matlab('cd(nstatRoot);')\n", - "# MATLAB L6808: end\n", - "_matlab('end')\n", - "# MATLAB L6809: addpath(nstatRoot,'-begin');\n", - "_matlab(\"addpath(nstatRoot,'-begin');\")\n", - "# MATLAB L6810: load(fullfile(nstatRoot,'data','SSGLMExampleData.mat'));\n", - "_matlab(\"load(fullfile(nstatRoot,'data','SSGLMExampleData.mat'));\")\n", - "# MATLAB L6811: fitResults = FitResult.fromStructure(fR);\n", - "_matlab('fitResults = FitResult.fromStructure(fR);')\n", - "# MATLAB L6812: psthResult = FitResult.fromStructure(psthR);\n", - "_matlab('psthResult = FitResult.fromStructure(psthR);')\n", - "# MATLAB L7000: t=psthResult.mergeResults(fitResults);\n", - "_matlab('t=psthResult.mergeResults(fitResults);')\n", - "# MATLAB L7001: %t.plotResults; %Compare the results with the PSTH Model\n", "# t.plotResults; %Compare the results with the PSTH Model\n", - "# MATLAB L7002: t.lambda.setDataLabels({'\\lambda_{PSTH}','\\lambda_{SSGLM}'});\n", - "_matlab(\"t.lambda.setDataLabels({'\\\\lambda_{PSTH}','\\\\lambda_{SSGLM}'});\")\n", - "# MATLAB L7003: scrsz = get(0,'ScreenSize');\n", - "_matlab(\"scrsz = get(0,'ScreenSize');\")\n", - "# MATLAB L7004: h=figure('Position',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.8 scrsz(4)*.8]);\n", "__tracker.new_figure(\"h=figure('Position',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.8 scrsz(4)*.8])\")\n", - "_matlab(\"h=figure('Position',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.8 scrsz(4)*.8]);\")\n", - "# MATLAB L7005: subplot(2,2,1); t.KSPlot;\n", "__tracker.annotate('subplot(2,2,1)')\n", "__tracker.annotate('t.KSPlot')\n", - "_matlab('subplot(2,2,1); t.KSPlot;')\n", - "# MATLAB L7006: subplot(2,2,2); t.plotResidual;\n", "__tracker.annotate('subplot(2,2,2)')\n", "__tracker.annotate('t.plotResidual')\n", - "_matlab('subplot(2,2,2); t.plotResidual;')\n", - "# MATLAB L7007: subplot(2,2,3); t.plotInvGausTrans;\n", "__tracker.annotate('subplot(2,2,3)')\n", - "_matlab('subplot(2,2,3); t.plotInvGausTrans;')\n", - "# MATLAB L7008: subplot(2,2,4); t.plotSeqCorr;\n", "__tracker.annotate('subplot(2,2,4)')\n", - "_matlab('subplot(2,2,4); t.plotSeqCorr;')\n", - "# MATLAB L7009: \n", - "#\n", - "# MATLAB L7010: S=FitResSummary(t);\n", - "_matlab('S=FitResSummary(t);')\n", - "# MATLAB L7011: dAIC=diff(S.AIC)\n", - "_matlab('dAIC=diff(S.AIC)')\n", - "# MATLAB L7012: dBIC=diff(S.BIC)\n", - "_matlab('dBIC=diff(S.BIC)')\n", - "# MATLAB L7013: dKS =diff(S.KSStats);\n", - "_matlab('dKS =diff(S.KSStats);')\n", - "# MATLAB L7200: close all;\n", + "#\n", "plt.close(\"all\")\n", - "# MATLAB L7201: % Generate the actual stimulus effect\n", "# Generate the actual stimulus effect\n", - "# MATLAB L7202: minTime=0; maxTime = Tmax;\n", - "_matlab('minTime=0; maxTime = Tmax;')\n", - "# MATLAB L7203: stimData = stim.data*b1;\n", - "_matlab('stimData = stim.data*b1;')\n", - "# MATLAB L7204: if(strcmp(fitType,'poisson'))\n", - "_matlab(\"if(strcmp(fitType,'poisson'))\")\n", - "# MATLAB L7205: actStimEffect=exp(stimData + b0)./delta;\n", - "_matlab('actStimEffect=exp(stimData + b0)./delta;')\n", - "# MATLAB L7206: elseif(strcmp(fitType,'binomial'))\n", - "_matlab(\"elseif(strcmp(fitType,'binomial'))\")\n", - "# MATLAB L7207: actStimEffect=exp(stimData + b0)./(1+exp(stimData + b0))./delta;\n", - "_matlab('actStimEffect=exp(stimData + b0)./(1+exp(stimData + b0))./delta;')\n", - "# MATLAB L7208: end\n", - "_matlab('end')\n", - "# MATLAB L7209: %\n", - "#\n", - "# MATLAB L7210: \n", - "#\n", - "# MATLAB L7211: % Generate the basis function so that the estimated effect can be plotted\n", + "#\n", + "#\n", "# Generate the basis function so that the estimated effect can be plotted\n", - "# MATLAB L7212: % at the same temporal resolution as the theoretical effect\n", "# at the same temporal resolution as the theoretical effect\n", - "# MATLAB L7213: if(~isempty(numBasis))\n", - "_matlab('if(~isempty(numBasis))')\n", - "# MATLAB L7214: basisWidth = (maxTime-minTime)/numBasis;\n", - "_matlab('basisWidth = (maxTime-minTime)/numBasis;')\n", - "# MATLAB L7215: sampleRate=1/delta;\n", - "_matlab('sampleRate=1/delta;')\n", - "# MATLAB L7216: unitPulseBasis=nstColl.generateUnitImpulseBasis(basisWidth,minTime,...\n", - "_matlab('unitPulseBasis=nstColl.generateUnitImpulseBasis(basisWidth,minTime,...')\n", - "# MATLAB L7217: maxTime,sampleRate);\n", - "_matlab('maxTime,sampleRate);')\n", - "# MATLAB L7218: basisMat = unitPulseBasis.data;\n", - "_matlab('basisMat = unitPulseBasis.data;')\n", - "# MATLAB L7219: end\n", - "_matlab('end')\n", - "# MATLAB L7220: \n", - "#\n", - "# MATLAB L7221: % Generate the estimated stimulus effect\n", + "#\n", "# Generate the estimated stimulus effect\n", - "# MATLAB L7222: if(strcmp(fitType,'poisson'))\n", - "_matlab(\"if(strcmp(fitType,'poisson'))\")\n", - "# MATLAB L7223: estStimEffect=exp(basisMat*xK)./delta;\n", - "_matlab('estStimEffect=exp(basisMat*xK)./delta;')\n", - "# MATLAB L7224: elseif(strcmp(fitType,'binomial'))\n", - "_matlab(\"elseif(strcmp(fitType,'binomial'))\")\n", - "# MATLAB L7225: estStimEffect=exp(basisMat*xK)./(1+exp(basisMat*xK))./delta;\n", - "_matlab('estStimEffect=exp(basisMat*xK)./(1+exp(basisMat*xK))./delta;')\n", - "# MATLAB L7226: end\n", - "_matlab('end')\n", - "# MATLAB L7227: \n", - "#\n", - "# MATLAB L7228: \n", - "#\n", - "# MATLAB L7229: scrsz = get(0,'ScreenSize');\n", - "_matlab(\"scrsz = get(0,'ScreenSize');\")\n", - "# MATLAB L7230: h=figure('OuterPosition',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.4 scrsz(4)*.8]);\n", + "#\n", + "#\n", "__tracker.new_figure(\"h=figure('OuterPosition',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.4 scrsz(4)*.8])\")\n", - "_matlab(\"h=figure('OuterPosition',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.4 scrsz(4)*.8]);\")\n", - "# MATLAB L7231: \n", "#\n", - "# MATLAB L7232: % Plot the actual and estimated stimulus effect as a function of trial and\n", "# Plot the actual and estimated stimulus effect as a function of trial and\n", - "# MATLAB L7233: % time\n", "# time\n", - "# MATLAB L7234: subplot(3,1,[1 2 3]);\n", "__tracker.annotate('subplot(3,1,[1 2 3])')\n", - "_matlab('subplot(3,1,[1 2 3]);')\n", - "# MATLAB L7235: lighting gouraud\n", - "_matlab('lighting gouraud')\n", - "# MATLAB L7236: surf((1:length(b1))',stim.time,actStimEffect,'FaceAlpha',0.1,...\n", "__tracker.annotate(\"surf((1:length(b1))',stim.time,actStimEffect,'FaceAlpha',0.1,...\")\n", - "_matlab(\"surf((1:length(b1))',stim.time,actStimEffect,'FaceAlpha',0.1,...\")\n", - "# MATLAB L7237: 'EdgeAlpha',0.1,'AlphaData',0.1);\n", - "_matlab(\"'EdgeAlpha',0.1,'AlphaData',0.1);\")\n", - "# MATLAB L7238: hx=xlabel('Trial [k]'); hy=ylabel('time [s]');\n", - "_matlab(\"hx=xlabel('Trial [k]'); hy=ylabel('time [s]');\")\n", - "# MATLAB L7239: hz=zlabel('Stimulus Effect [spikes/sec]'); hold all;\n", - "_matlab(\"hz=zlabel('Stimulus Effect [spikes/sec]'); hold all;\")\n", - "# MATLAB L7240: set([hx hy hz],'FontName', 'Arial','FontSize',12,'FontWeight','bold');\n", - "_matlab(\"set([hx hy hz],'FontName', 'Arial','FontSize',12,'FontWeight','bold');\")\n", - "# MATLAB L7241: \n", - "#\n", - "# MATLAB L7242: surf((1:length(b1))',stim.time,estStimEffect(:,1:length(b1)),...\n", + "#\n", "__tracker.annotate(\"surf((1:length(b1))',stim.time,estStimEffect(:,1:length(b1)),...\")\n", - "_matlab(\"surf((1:length(b1))',stim.time,estStimEffect(:,1:length(b1)),...\")\n", - "# MATLAB L7243: 'FaceAlpha',0.5,'EdgeAlpha',0.1,'AlphaData',0.5); %xlabel('Trial [k]'); ylabel('time [s]'); zlabel('Stimulus Effect');\n", - "_matlab(\"'FaceAlpha',0.5,'EdgeAlpha',0.1,'AlphaData',0.5); %xlabel('Trial [k]'); ylabel('time [s]'); zlabel('Stimulus Effect');\")\n", - "# MATLAB L7244: set(gca,'YDir','reverse');\n", - "_matlab(\"set(gca,'YDir','reverse');\")\n", - "# MATLAB L7245: set(gca,'ytick',0:.1:Tmax,'ytickLabel',0:.1:Tmax);\n", - "_matlab(\"set(gca,'ytick',0:.1:Tmax,'ytickLabel',0:.1:Tmax);\")\n", - "# MATLAB L7246: \n", - "#\n", - "# MATLAB L7247: title('SSGLM Estimated vs. Actual Stimulus Effect','FontWeight','bold',...\n", - "_matlab(\"title('SSGLM Estimated vs. Actual Stimulus Effect','FontWeight','bold',...\")\n", - "# MATLAB L7248: 'Fontsize',14,...\n", - "_matlab(\"'Fontsize',14,...\")\n", - "# MATLAB L7249: 'FontName','Arial');\n", - "_matlab(\"'FontName','Arial');\")\n", - "# MATLAB L7250: \n", - "#\n", - "# MATLAB L7251: close all;\n", + "#\n", + "#\n", "plt.close(\"all\")\n", - "# MATLAB L7252: h=figure('OuterPosition',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.4 scrsz(4)*.8]);\n", "__tracker.new_figure(\"h=figure('OuterPosition',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.4 scrsz(4)*.8])\")\n", - "_matlab(\"h=figure('OuterPosition',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.4 scrsz(4)*.8]);\")\n", - "# MATLAB L7253: \n", "#\n", - "# MATLAB L7254: % The actual stimulus effect\n", "# The actual stimulus effect\n", - "# MATLAB L7255: subplot(3,1,1);\n", "__tracker.annotate('subplot(3,1,1)')\n", - "_matlab('subplot(3,1,1);')\n", - "# MATLAB L7256: lighting gouraud\n", - "_matlab('lighting gouraud')\n", - "# MATLAB L7257: mesh((1:length(b1))',stim.time,actStimEffect);\n", - "_matlab(\"mesh((1:length(b1))',stim.time,actStimEffect);\")\n", - "# MATLAB L7258: hx=xlabel('Trial [k]'); hy=ylabel('time [s]');\n", - "_matlab(\"hx=xlabel('Trial [k]'); hy=ylabel('time [s]');\")\n", - "# MATLAB L7259: zlabel('Stimulus Effect [spikes/sec]'); hold all;\n", - "_matlab(\"zlabel('Stimulus Effect [spikes/sec]'); hold all;\")\n", - "# MATLAB L7260: set([hx hy],'FontName', 'Arial','FontSize',12,'FontWeight','bold');\n", - "_matlab(\"set([hx hy],'FontName', 'Arial','FontSize',12,'FontWeight','bold');\")\n", - "# MATLAB L7261: % title('True Stimulus Effect');\n", "# title('True Stimulus Effect');\n", - "# MATLAB L7262: title('True Stimulus Effect','FontWeight','bold',...\n", - "_matlab(\"title('True Stimulus Effect','FontWeight','bold',...\")\n", - "# MATLAB L7263: 'Fontsize',14,...\n", - "_matlab(\"'Fontsize',14,...\")\n", - "# MATLAB L7264: 'FontName','Arial');\n", - "_matlab(\"'FontName','Arial');\")\n", - "# MATLAB L7265: set(gca,'xtick',[],'xtickLabel',[]);\n", - "_matlab(\"set(gca,'xtick',[],'xtickLabel',[]);\")\n", - "# MATLAB L7266: set(gca,'ytick',[],'ytickLabel',[]);\n", - "_matlab(\"set(gca,'ytick',[],'ytickLabel',[]);\")\n", - "# MATLAB L7267: CLIM = [min(min(stimData./delta)) max(max(stimData./delta))];\n", - "_matlab('CLIM = [min(min(stimData./delta)) max(max(stimData./delta))];')\n", - "# MATLAB L7268: view(gca,[90 -90]);\n", - "_matlab('view(gca,[90 -90]);')\n", - "# MATLAB L7269: \n", - "#\n", - "# MATLAB L7270: \n", - "#\n", - "# MATLAB L7271: \n", - "#\n", - "# MATLAB L7272: % The PSTH estimate\n", + "#\n", + "#\n", + "#\n", "# The PSTH estimate\n", - "# MATLAB L7273: subplot(3,1,2);\n", "__tracker.annotate('subplot(3,1,2)')\n", - "_matlab('subplot(3,1,2);')\n", - "# MATLAB L7274: lighting gouraud\n", - "_matlab('lighting gouraud')\n", - "# MATLAB L7275: mesh((1:length(b1))',stim.time,repmat(psthSig.data, [1 numRealizations]));\n", - "_matlab(\"mesh((1:length(b1))',stim.time,repmat(psthSig.data, [1 numRealizations]));\")\n", - "# MATLAB L7276: hx=xlabel('Trial [k]'); hy=ylabel('time [s]');\n", - "_matlab(\"hx=xlabel('Trial [k]'); hy=ylabel('time [s]');\")\n", - "# MATLAB L7277: hz=zlabel('Stimulus Effect [spikes/sec]'); hold all;\n", - "_matlab(\"hz=zlabel('Stimulus Effect [spikes/sec]'); hold all;\")\n", - "# MATLAB L7278: set([hx hy hz],'FontName', 'Arial','FontSize',12,'FontWeight','bold');\n", - "_matlab(\"set([hx hy hz],'FontName', 'Arial','FontSize',12,'FontWeight','bold');\")\n", - "# MATLAB L7279: % title('PSTH Estimated Stimulus Effect');\n", "# title('PSTH Estimated Stimulus Effect');\n", - "# MATLAB L7280: title('PSTH Estimated Stimulus Effect','FontWeight','bold',...\n", - "_matlab(\"title('PSTH Estimated Stimulus Effect','FontWeight','bold',...\")\n", - "# MATLAB L7281: 'Fontsize',14,...\n", - "_matlab(\"'Fontsize',14,...\")\n", - "# MATLAB L7282: 'FontName','Arial');\n", - "_matlab(\"'FontName','Arial');\")\n", - "# MATLAB L7283: \n", - "#\n", - "# MATLAB L7284: set(gca,'xtick',[],'xtickLabel',[]);\n", - "_matlab(\"set(gca,'xtick',[],'xtickLabel',[]);\")\n", - "# MATLAB L7285: set(gca,'ytick',[],'ytickLabel',[]);\n", - "_matlab(\"set(gca,'ytick',[],'ytickLabel',[]);\")\n", - "# MATLAB L7286: CLIM = [min(min(stimData./delta)) max(max(stimData./delta))];\n", - "_matlab('CLIM = [min(min(stimData./delta)) max(max(stimData./delta))];')\n", - "# MATLAB L7287: view(gca,[90 -90]);\n", - "_matlab('view(gca,[90 -90]);')\n", - "# MATLAB L7288: \n", - "#\n", - "# MATLAB L7289: % The SSGLM estimated stimulus effect\n", + "#\n", + "#\n", "# The SSGLM estimated stimulus effect\n", - "# MATLAB L7290: subplot(3,1,3);\n", "__tracker.annotate('subplot(3,1,3)')\n", - "_matlab('subplot(3,1,3);')\n", - "# MATLAB L7291: lighting gouraud\n", - "_matlab('lighting gouraud')\n", - "# MATLAB L7292: mesh((1:length(b1))',stim.time,estStimEffect);\n", - "_matlab(\"mesh((1:length(b1))',stim.time,estStimEffect);\")\n", - "# MATLAB L7293: xlabel('Trial [k]'); ylabel('time [s]');\n", "plt.xlabel('Trial [k]')\n", "plt.ylabel('time [s]')\n", - "# MATLAB L7294: zlabel('Stimulus Effect [spikes/sec]'); hold all;\n", - "_matlab(\"zlabel('Stimulus Effect [spikes/sec]'); hold all;\")\n", - "# MATLAB L7295: hx=get(gca,'XLabel'); hy=get(gca,'YLabel'); hz=get(gca,'ZLabel');\n", - "_matlab(\"hx=get(gca,'XLabel'); hy=get(gca,'YLabel'); hz=get(gca,'ZLabel');\")\n", - "# MATLAB L7296: set([hx hy hz],'FontName', 'Arial','FontSize',12,'FontWeight','bold');\n", - "_matlab(\"set([hx hy hz],'FontName', 'Arial','FontSize',12,'FontWeight','bold');\")\n", - "# MATLAB L7297: \n", - "#\n", - "# MATLAB L7298: % title('SSGLM Estimated Stimulus Efferct');\n", - "# title('SSGLM Estimated Stimulus Efferct');\n", - "# MATLAB L7299: title('SSGLM Estimated Stimulus Effect','FontWeight','bold',...\n", - "_matlab(\"title('SSGLM Estimated Stimulus Effect','FontWeight','bold',...\")\n", - "# MATLAB L7300: 'Fontsize',14,...\n", - "_matlab(\"'Fontsize',14,...\")\n", - "# MATLAB L7301: 'FontName','Arial');\n", - "_matlab(\"'FontName','Arial');\")\n", - "# MATLAB L7302: set(gca,'xtick',[],'xtickLabel',[]);\n", - "_matlab(\"set(gca,'xtick',[],'xtickLabel',[]);\")\n", - "# MATLAB L7303: set(gca,'ytick',[],'ytickLabel',[]);\n", - "_matlab(\"set(gca,'ytick',[],'ytickLabel',[]);\")\n", - "# MATLAB L7304: set(gca, 'YDir','normal')\n", - "_matlab(\"set(gca, 'YDir','normal')\")\n", - "# MATLAB L7305: view(gca,[90 -90]);\n", - "_matlab('view(gca,[90 -90]);')\n" + "#\n", + "# title('SSGLM Estimated Stimulus Efferct');" ] }, { @@ -2024,192 +567,35 @@ "outputs": [], "source": [ "# SECTION 18: Compare differences across trials\n", - "# MATLAB L7500: close all;\n", "plt.close(\"all\")\n", - "# MATLAB L7501: minTime=0; maxTime = Tmax;\n", - "_matlab('minTime=0; maxTime = Tmax;')\n", - "# MATLAB L7502: % Generate the basis function so that the estimated effect can be plotted\n", "# Generate the basis function so that the estimated effect can be plotted\n", - "# MATLAB L7503: % at the same temporal resolution as the theoretical effect\n", "# at the same temporal resolution as the theoretical effect\n", - "# MATLAB L7504: if(~isempty(numBasis))\n", - "_matlab('if(~isempty(numBasis))')\n", - "# MATLAB L7505: basisWidth = (maxTime-minTime)/numBasis;\n", - "_matlab('basisWidth = (maxTime-minTime)/numBasis;')\n", - "# MATLAB L7506: sampleRate=1/delta;\n", - "_matlab('sampleRate=1/delta;')\n", - "# MATLAB L7507: unitPulseBasis=nstColl.generateUnitImpulseBasis(basisWidth,...\n", - "_matlab('unitPulseBasis=nstColl.generateUnitImpulseBasis(basisWidth,...')\n", - "# MATLAB L7508: minTime,maxTime,sampleRate);\n", - "_matlab('minTime,maxTime,sampleRate);')\n", - "# MATLAB L7509: basisMat = unitPulseBasis.data;\n", - "_matlab('basisMat = unitPulseBasis.data;')\n", - "# MATLAB L7510: end\n", - "_matlab('end')\n", - "# MATLAB L7511: \n", - "#\n", - "# MATLAB L7512: \n", - "#\n", - "# MATLAB L7513: % close all;\n", + "#\n", + "#\n", "# close all;\n", - "# MATLAB L7514: \n", - "#\n", - "# MATLAB L7515: t0=0; tf=Tmax;\n", - "_matlab('t0=0; tf=Tmax;')\n", - "# MATLAB L7516: [spikeRateBinom, ProbMat,sigMat]=DecodingAlgorithms.computeSpikeRateCIs(xK,...\n", - "_matlab('[spikeRateBinom, ProbMat,sigMat]=DecodingAlgorithms.computeSpikeRateCIs(xK,...')\n", - "# MATLAB L7517: WkuFinal,dN,t0,tf,fitType,delta,gammahat,windowTimes);\n", - "_matlab('WkuFinal,dN,t0,tf,fitType,delta,gammahat,windowTimes);')\n", - "# MATLAB L7518: \n", - "#\n", - "# MATLAB L7519: lt=find(sigMat(1,:)==1,1,'first');\n", - "_matlab(\"lt=find(sigMat(1,:)==1,1,'first');\")\n", - "# MATLAB L7520: display(['The learning trial (compared to the first trial) is trial #' ...\n", - "_matlab(\"display(['The learning trial (compared to the first trial) is trial #' ...\")\n", - "# MATLAB L7521: num2str(find(sigMat(1,:)==1,1,'first'))]);\n", - "_matlab(\"num2str(find(sigMat(1,:)==1,1,'first'))]);\")\n", - "# MATLAB L7522: scrsz = get(0,'ScreenSize');\n", - "_matlab(\"scrsz = get(0,'ScreenSize');\")\n", - "# MATLAB L7523: h=figure('OuterPosition',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.8 scrsz(4)*.8]);\n", + "#\n", + "#\n", "__tracker.new_figure(\"h=figure('OuterPosition',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.8 scrsz(4)*.8])\")\n", - "_matlab(\"h=figure('OuterPosition',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.8 scrsz(4)*.8]);\")\n", - "# MATLAB L7524: \n", "#\n", - "# MATLAB L7525: subplot(2,3,1);\n", "__tracker.annotate('subplot(2,3,1)')\n", - "_matlab('subplot(2,3,1);')\n", - "# MATLAB L7526: spikeRateBinom.setName(['(' num2str(Tmax) '-0)^-1*\\Lambda(0,' ...\n", - "_matlab(\"spikeRateBinom.setName(['(' num2str(Tmax) '-0)^-1*\\\\Lambda(0,' ...\")\n", - "# MATLAB L7527: num2str(Tmax) ')']);\n", - "_matlab(\"num2str(Tmax) ')']);\")\n", - "# MATLAB L7528: spikeRateBinom.plot([],{{' ''k'',''Linewidth'',4'}});\n", "__tracker.annotate(\"spikeRateBinom.plot([],{{' ''k'',''Linewidth'',4'}})\")\n", - "_matlab(\"spikeRateBinom.plot([],{{' ''k'',''Linewidth'',4'}});\")\n", - "# MATLAB L7529: % e = Events(lt,{''});\n", "# e = Events(lt,{''});\n", - "# MATLAB L7530: % e.plot;\n", "# e.plot;\n", - "# MATLAB L7531: v=axis;\n", - "_matlab('v=axis;')\n", - "# MATLAB L7532: plot(lt*[1;1],v(3:4),'r','Linewidth',2);\n", "__tracker.annotate('plot(lt*[1')\n", - "_matlab(\"plot(lt*[1;1],v(3:4),'r','Linewidth',2);\")\n", - "# MATLAB L7533: hx=xlabel('Trial [k]','Interpreter','none'); hold all;\n", - "_matlab(\"hx=xlabel('Trial [k]','Interpreter','none'); hold all;\")\n", - "# MATLAB L7534: hy=ylabel('Average Firing Rate [spikes/sec]','Interpreter','none');\n", - "_matlab(\"hy=ylabel('Average Firing Rate [spikes/sec]','Interpreter','none');\")\n", - "# MATLAB L7535: set([hx, hy],'FontName', 'Arial','FontSize',12,'FontWeight','bold');\n", - "_matlab(\"set([hx, hy],'FontName', 'Arial','FontSize',12,'FontWeight','bold');\")\n", - "# MATLAB L7536: title(['Learning Trial:' num2str(lt)],'FontWeight','bold',...\n", - "_matlab(\"title(['Learning Trial:' num2str(lt)],'FontWeight','bold',...\")\n", - "# MATLAB L7537: 'Fontsize',12,...\n", - "_matlab(\"'Fontsize',12,...\")\n", - "# MATLAB L7538: 'FontName','Arial');\n", - "_matlab(\"'FontName','Arial');\")\n", - "# MATLAB L7539: \n", - "#\n", - "# MATLAB L7540: \n", - "#\n", - "# MATLAB L7541: \n", - "#\n", - "# MATLAB L7542: h=subplot(2,3,[2 3 5 6]);\n", + "#\n", + "#\n", + "#\n", "__tracker.annotate('h=subplot(2,3,[2 3 5 6])')\n", - "_matlab('h=subplot(2,3,[2 3 5 6]);')\n", - "# MATLAB L7543: K=size(dN,1);\n", - "_matlab('K=size(dN,1);')\n", - "# MATLAB L7544: colormap(flipud(gray));\n", - "_matlab('colormap(flipud(gray));')\n", - "# MATLAB L7545: imagesc(ProbMat); hold on;\n", "__tracker.annotate('imagesc(ProbMat)')\n", - "_matlab('imagesc(ProbMat); hold on;')\n", - "# MATLAB L7546: for k=1:K\n", - "_matlab('for k=1:K')\n", - "# MATLAB L7547: for m=(k+1):K\n", - "_matlab('for m=(k+1):K')\n", - "# MATLAB L7548: if(sigMat(k,m)==1)\n", - "_matlab('if(sigMat(k,m)==1)')\n", - "# MATLAB L7549: plot3(m,k,1,'r*'); hold on;\n", "__tracker.annotate(\"plot3(m,k,1,'r*')\")\n", - "_matlab(\"plot3(m,k,1,'r*'); hold on;\")\n", - "# MATLAB L7550: end\n", - "_matlab('end')\n", - "# MATLAB L7551: end\n", - "_matlab('end')\n", - "# MATLAB L7552: end\n", - "_matlab('end')\n", - "# MATLAB L7553: %\n", - "#\n", - "# MATLAB L7554: set(h,'XAxisLocation','top','YAxisLocation','right');\n", - "_matlab(\"set(h,'XAxisLocation','top','YAxisLocation','right');\")\n", - "# MATLAB L7555: hx=xlabel('Trial Number','Interpreter','none'); hold all;\n", - "_matlab(\"hx=xlabel('Trial Number','Interpreter','none'); hold all;\")\n", - "# MATLAB L7556: hy=ylabel('Trial Number','Interpreter','none');\n", - "_matlab(\"hy=ylabel('Trial Number','Interpreter','none');\")\n", - "# MATLAB L7557: set([hx, hy],'FontName', 'Arial','FontSize',12,'FontWeight','bold');\n", - "_matlab(\"set([hx, hy],'FontName', 'Arial','FontSize',12,'FontWeight','bold');\")\n", - "# MATLAB L7558: \n", - "#\n", - "# MATLAB L7559: subplot(2,3,4)\n", + "#\n", + "#\n", "__tracker.annotate('subplot(2,3,4)')\n", - "_matlab('subplot(2,3,4)')\n", - "# MATLAB L7560: stim1 = Covariate(time, basisMat*stimulus(:,1),'Trial1','time','s',...\n", - "_matlab(\"stim1 = Covariate(time, basisMat*stimulus(:,1),'Trial1','time','s',...\")\n", - "# MATLAB L7561: 'spikes/sec');\n", - "_matlab(\"'spikes/sec');\")\n", - "# MATLAB L7562: temp = ConfidenceInterval(time, basisMat*squeeze(stimCIs(:,1,:)));\n", - "_matlab('temp = ConfidenceInterval(time, basisMat*squeeze(stimCIs(:,1,:)));')\n", - "# MATLAB L7563: stim1.setConfInterval(temp);\n", - "_matlab('stim1.setConfInterval(temp);')\n", - "# MATLAB L7564: stimlt = Covariate(time, basisMat*stimulus(:,lt),'Trial1','time','s',...\n", - "_matlab(\"stimlt = Covariate(time, basisMat*stimulus(:,lt),'Trial1','time','s',...\")\n", - "# MATLAB L7565: 'spikes/sec');\n", - "_matlab(\"'spikes/sec');\")\n", - "# MATLAB L7566: temp = ConfidenceInterval(time, basisMat*squeeze(stimCIs(:,lt,:)));\n", - "_matlab('temp = ConfidenceInterval(time, basisMat*squeeze(stimCIs(:,lt,:)));')\n", - "# MATLAB L7567: temp.setColor('r');\n", - "_matlab(\"temp.setColor('r');\")\n", - "# MATLAB L7568: stimlt.setConfInterval(temp);\n", - "_matlab('stimlt.setConfInterval(temp);')\n", - "# MATLAB L7569: stimltm1 = Covariate(time, basisMat*stimulus(:,lt-1),'Trial1','time','s',...\n", - "_matlab(\"stimltm1 = Covariate(time, basisMat*stimulus(:,lt-1),'Trial1','time','s',...\")\n", - "# MATLAB L7570: 'spikes/sec');\n", - "_matlab(\"'spikes/sec');\")\n", - "# MATLAB L7571: temp = ConfidenceInterval(time, basisMat*squeeze(stimCIs(:,lt-1,:)));\n", - "_matlab('temp = ConfidenceInterval(time, basisMat*squeeze(stimCIs(:,lt-1,:)));')\n", - "# MATLAB L7572: temp.setColor('r');\n", - "_matlab(\"temp.setColor('r');\")\n", - "# MATLAB L7573: stimltm1.setConfInterval(temp);\n", - "_matlab('stimltm1.setConfInterval(temp);')\n", - "# MATLAB L7574: \n", - "#\n", - "# MATLAB L7575: % figure;\n", + "#\n", "# figure;\n", - "# MATLAB L7576: h1=stim1.plot([],{{' ''k'',''Linewidth'',4'}}); hold all;\n", "__tracker.annotate(\"h1=stim1.plot([],{{' ''k'',''Linewidth'',4'}})\")\n", - "_matlab(\"h1=stim1.plot([],{{' ''k'',''Linewidth'',4'}}); hold all;\")\n", - "# MATLAB L7577: h2=stimlt.plot([],{{' ''r'',''Linewidth'',4'}});\n", "__tracker.annotate(\"h2=stimlt.plot([],{{' ''r'',''Linewidth'',4'}})\")\n", - "_matlab(\"h2=stimlt.plot([],{{' ''r'',''Linewidth'',4'}});\")\n", - "# MATLAB L7578: hx=xlabel('time [s]','Interpreter','none'); hold all;\n", - "_matlab(\"hx=xlabel('time [s]','Interpreter','none'); hold all;\")\n", - "# MATLAB L7579: hy=ylabel('Firing Rate [spikes/sec]','Interpreter','none');\n", - "_matlab(\"hy=ylabel('Firing Rate [spikes/sec]','Interpreter','none');\")\n", - "# MATLAB L7580: set([hx, hy],'FontName', 'Arial','FontSize',12,'FontWeight','bold');\n", - "_matlab(\"set([hx, hy],'FontName', 'Arial','FontSize',12,'FontWeight','bold');\")\n", - "# MATLAB L7581: \n", - "#\n", - "# MATLAB L7582: title({'Learning Trial Vs. Baseline Trial';'with 95% CIs'},'FontWeight','bold',...\n", - "_matlab(\"title({'Learning Trial Vs. Baseline Trial';'with 95% CIs'},'FontWeight','bold',...\")\n", - "# MATLAB L7583: 'Fontsize',12,...\n", - "_matlab(\"'Fontsize',12,...\")\n", - "# MATLAB L7584: 'FontName','Arial');\n", - "_matlab(\"'FontName','Arial');\")\n", - "# MATLAB L7585: h_legend=legend([h1(1) h2(1)],'\\lambda_{1}(t)',['\\lambda_{' num2str(lt) '}(t)']);\n", - "_matlab(\"h_legend=legend([h1(1) h2(1)],'\\\\lambda_{1}(t)',['\\\\lambda_{' num2str(lt) '}(t)']);\")\n", - "# MATLAB L7586: pos = get(h_legend,'position');\n", - "_matlab(\"pos = get(h_legend,'position');\")\n", - "# MATLAB L7587: set(h_legend, 'position',[pos(1)+.03 pos(2)+.01 pos(3:4)]);\n", - "_matlab(\"set(h_legend, 'position',[pos(1)+.03 pos(2)+.01 pos(3:4)]);\")\n" + "#" ] }, { @@ -2220,12 +606,9 @@ "outputs": [], "source": [ "# SECTION 19: Example 4 - HIPPOCAMPAL PLACE CELL - RECEPTIVE FIELD ESTIMATION\n", - "# MATLAB L7800: % Estimation of receptive fields of neurons is a very common data analysis problem in neuroscience. Here we use the nSTAT software to perform an estimation of the receptive fields of hippocampal place cells using a bivariate Gaussian model and Zernike polynomials. The number of zernike polynomials is based on \"An Analysis of Hippocampal Spatio-Temporal Representations Using a Bayesian Algorithm for Neural Spike Train Decoding\" Barbieri et. al 2005. The data used herein in was provided by Dr. Ricardo Barbieri on 2/28/2011.\n", "# Estimation of receptive fields of neurons is a very common data analysis problem in neuroscience. Here we use the nSTAT software to perform an estimation of the receptive fields of hippocampal place cells using a bivariate Gaussian model and Zernike polynomials. The number of zernike polynomials is based on \"An Analysis of Hippocampal Spatio-Temporal Representations Using a Bayesian Algorithm for Neural Spike Train Decoding\" Barbieri et. al 2005. The data used herein in was provided by Dr. Ricardo Barbieri on 2/28/2011.\n", - "# MATLAB L7900: % Author: Iahn Cajigas\n", "# Author: Iahn Cajigas\n", - "# MATLAB L8000: % Date: 3/1/2011\n", - "# Date: 3/1/2011\n" + "# Date: 3/1/2011" ] }, { @@ -2236,64 +619,16 @@ "outputs": [], "source": [ "# SECTION 20: Example Data\n", - "# MATLAB L8300: % The x and y coordinates of a freely foraging rat in a circular environment (70cm in diameter and 30cm high walls) and a fixed visual cue. The x and y coordinates at the time when a spike was observed are marked in red. The position coordinates have been normalized to be between -1 and 1 to allow to simplify the analysis.\n", "# The x and y coordinates of a freely foraging rat in a circular environment (70cm in diameter and 30cm high walls) and a fixed visual cue. The x and y coordinates at the time when a spike was observed are marked in red. The position coordinates have been normalized to be between -1 and 1 to allow to simplify the analysis.\n", - "# MATLAB L8400: close all;\n", "plt.close(\"all\")\n", - "# MATLAB L8401: load(fullfile(placeCellDataDir,'PlaceCellDataAnimal1.mat'));\n", - "_matlab(\"load(fullfile(placeCellDataDir,'PlaceCellDataAnimal1.mat'));\")\n", - "# MATLAB L8402: exampleCell = [2 21 25 49];\n", - "_matlab('exampleCell = [2 21 25 49];')\n", - "# MATLAB L8403: % exampleCell = 1:length(neuron);\n", "# exampleCell = 1:length(neuron);\n", - "# MATLAB L8404: % figure(1);\n", "# figure(1);\n", - "# MATLAB L8405: scrsz = get(0,'ScreenSize');\n", - "_matlab(\"scrsz = get(0,'ScreenSize');\")\n", - "# MATLAB L8406: h=figure('OuterPosition',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.6 scrsz(4)*.9]);\n", "__tracker.new_figure(\"h=figure('OuterPosition',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.6 scrsz(4)*.9])\")\n", - "_matlab(\"h=figure('OuterPosition',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.6 scrsz(4)*.9]);\")\n", - "# MATLAB L8407: \n", "#\n", - "# MATLAB L8408: for i=1:length(exampleCell)\n", - "_matlab('for i=1:length(exampleCell)')\n", - "# MATLAB L8409: subplot(2,2,i);\n", "__tracker.annotate('subplot(2,2,i)')\n", - "_matlab('subplot(2,2,i);')\n", - "# MATLAB L8410: h1=plot(x,y,'b','Linewidth',.5); hold on;\n", "__tracker.annotate(\"h1=plot(x,y,'b','Linewidth',.5)\")\n", - "_matlab(\"h1=plot(x,y,'b','Linewidth',.5); hold on;\")\n", - "# MATLAB L8411: h2=plot(neuron{exampleCell(i)}.xN,neuron{exampleCell(i)}.yN,'r.',...\n", "__tracker.annotate(\"h2=plot(neuron{exampleCell(i)}.xN,neuron{exampleCell(i)}.yN,'r.',...\")\n", - "_matlab(\"h2=plot(neuron{exampleCell(i)}.xN,neuron{exampleCell(i)}.yN,'r.',...\")\n", - "# MATLAB L8412: 'MarkerSize',7);\n", - "_matlab(\"'MarkerSize',7);\")\n", - "# MATLAB L8413: hx=xlabel('X Position'); hy=ylabel('Y Position');\n", - "_matlab(\"hx=xlabel('X Position'); hy=ylabel('Y Position');\")\n", - "# MATLAB L8414: % title(['Animal#1, Cell#' num2str(exampleCell(i))]);\n", - "# title(['Animal#1, Cell#' num2str(exampleCell(i))]);\n", - "# MATLAB L8415: title(['Cell#' num2str(exampleCell(i))],'FontWeight','bold',...\n", - "_matlab(\"title(['Cell#' num2str(exampleCell(i))],'FontWeight','bold',...\")\n", - "# MATLAB L8416: 'Fontsize',12,'FontName','Arial');\n", - "_matlab(\"'Fontsize',12,'FontName','Arial');\")\n", - "# MATLAB L8417: set([hx, hy],'FontName', 'Arial','FontSize',12,'FontWeight','bold');\n", - "_matlab(\"set([hx, hy],'FontName', 'Arial','FontSize',12,'FontWeight','bold');\")\n", - "# MATLAB L8418: set(gca,'xTick',-1:.5:1,'yTick',-1:.5:1); axis square;\n", - "_matlab(\"set(gca,'xTick',-1:.5:1,'yTick',-1:.5:1); axis square;\")\n", - "# MATLAB L8419: if(i==4)\n", - "_matlab('if(i==4)')\n", - "# MATLAB L8420: h_legend = legend([h1 h2],'Animal Path',...\n", - "_matlab(\"h_legend = legend([h1 h2],'Animal Path',...\")\n", - "# MATLAB L8421: 'Location at time of spike');\n", - "_matlab(\"'Location at time of spike');\")\n", - "# MATLAB L8422: pos = get(h_legend,'position');\n", - "_matlab(\"pos = get(h_legend,'position');\")\n", - "# MATLAB L8423: set(h_legend, 'position',[pos(1)+.09 pos(2)+.06 pos(3:4)]);\n", - "_matlab(\"set(h_legend, 'position',[pos(1)+.09 pos(2)+.06 pos(3:4)]);\")\n", - "# MATLAB L8424: end\n", - "_matlab('end')\n", - "# MATLAB L8425: end\n", - "_matlab('end')\n" + "# title(['Animal#1, Cell#' num2str(exampleCell(i))]);" ] }, { @@ -2304,144 +639,36 @@ "outputs": [], "source": [ "# SECTION 21: Analyze All Cells\n", - "# MATLAB L8700: numAnimals=2;\n", "numAnimals = 2\n", - "# MATLAB L8701: CompilingHelpFile=1;\n", "CompilingHelpFile = 1\n", - "# MATLAB L8702: if(~CompilingHelpFile)\n", - "_matlab('if(~CompilingHelpFile)')\n", - "# MATLAB L8703: for n=1:numAnimals\n", - "_matlab('for n=1:numAnimals')\n", - "# MATLAB L8704: % load the data\n", "# load the data\n", - "# MATLAB L8705: clear x y neuron time nst tc tcc z;\n", "pass\n", - "# MATLAB L8706: load(fullfile(placeCellDataDir,['PlaceCellDataAnimal' num2str(n) '.mat']));\n", - "_matlab(\"load(fullfile(placeCellDataDir,['PlaceCellDataAnimal' num2str(n) '.mat']));\")\n", - "# MATLAB L8707: \n", "#\n", - "# MATLAB L8708: % Create the spikeTrains for each cell\n", "# Create the spikeTrains for each cell\n", - "# MATLAB L8709: for i=1:length(neuron)\n", - "_matlab('for i=1:length(neuron)')\n", - "# MATLAB L8710: nst{i} = nspikeTrain(neuron{i}.spikeTimes);\n", - "_matlab('nst{i} = nspikeTrain(neuron{i}.spikeTimes);')\n", - "# MATLAB L8711: end\n", - "_matlab('end')\n", - "# MATLAB L8712: \n", "#\n", - "# MATLAB L8713: \n", "#\n", - "# MATLAB L8714: % Convert to polar coordinates\n", "# Convert to polar coordinates\n", - "# MATLAB L8715: [theta,r] = cart2pol(x,y);\n", - "_matlab('[theta,r] = cart2pol(x,y);')\n", - "# MATLAB L8716: \n", "#\n", - "# MATLAB L8717: \n", "#\n", - "# MATLAB L8718: % Evaluate the Zernike Polynomials\n", "# Evaluate the Zernike Polynomials\n", - "# MATLAB L8719: % Number of polynomials from \"An Analysis of Hippocampal\n", "# Number of polynomials from \"An Analysis of Hippocampal\n", - "# MATLAB L8720: % Spatio-Temporal Representations Using a Bayesian Algorithm for Neural\n", "# Spatio-Temporal Representations Using a Bayesian Algorithm for Neural\n", - "# MATLAB L8721: % Spike Train Decoding\" Barbieri et. al 2005\n", "# Spike Train Decoding\" Barbieri et. al 2005\n", - "# MATLAB L8722: cnt=0;\n", "cnt = 0\n", - "# MATLAB L8723: for l=0:3\n", - "_matlab('for l=0:3')\n", - "# MATLAB L8724: for m=-l:l\n", - "_matlab('for m=-l:l')\n", - "# MATLAB L8725: if(~any(mod(l-m,2))) % otherwise the polynomial = 0\n", - "_matlab('if(~any(mod(l-m,2))) % otherwise the polynomial = 0')\n", - "# MATLAB L8726: cnt = cnt+1;\n", - "_matlab('cnt = cnt+1;')\n", - "# MATLAB L8727: z(:,cnt) = zernfun(l,m,r,theta,'norm');\n", - "_matlab(\"z(:,cnt) = zernfun(l,m,r,theta,'norm');\")\n", - "# MATLAB L8728: % zernfun by Paul Fricker\n", "# zernfun by Paul Fricker\n", - "# MATLAB L8729: % http://www.mathworks.com/matlabcentral/fileexchange/7687\n", "# http://www.mathworks.com/matlabcentral/fileexchange/7687\n", - "# MATLAB L8730: end\n", - "_matlab('end')\n", - "# MATLAB L8731: end\n", - "_matlab('end')\n", - "# MATLAB L8732: end\n", - "_matlab('end')\n", - "# MATLAB L8733: \n", - "#\n", - "# MATLAB L8734: % Data sampled at 30 Hz but just to be sure\n", + "#\n", "# Data sampled at 30 Hz but just to be sure\n", - "# MATLAB L8735: delta=min(diff(time));\n", - "_matlab('delta=min(diff(time));')\n", - "# MATLAB L8736: sampleRate = round(1/delta);\n", - "_matlab('sampleRate = round(1/delta);')\n", - "# MATLAB L8737: % Define Covariates for the analysis\n", "# Define Covariates for the analysis\n", - "# MATLAB L8738: baseline = Covariate(time,ones(length(x),1),'Baseline','time','s','',...\n", - "_matlab(\"baseline = Covariate(time,ones(length(x),1),'Baseline','time','s','',...\")\n", - "# MATLAB L8739: {'mu'});\n", - "_matlab(\"{'mu'});\")\n", - "# MATLAB L8740: zernike = Covariate(time,z,'Zernike','time','s','m',{'z1','z2','z3',...\n", - "_matlab(\"zernike = Covariate(time,z,'Zernike','time','s','m',{'z1','z2','z3',...\")\n", - "# MATLAB L8741: 'z4','z5','z6','z7','z8','z9','z10'});\n", - "_matlab(\"'z4','z5','z6','z7','z8','z9','z10'});\")\n", - "# MATLAB L8742: gaussian = Covariate(time,[x y x.^2 y.^2 x.*y],'Gaussian','time',...\n", - "_matlab(\"gaussian = Covariate(time,[x y x.^2 y.^2 x.*y],'Gaussian','time',...\")\n", - "# MATLAB L8743: 's','m',{'x','y','x^2','y^2','x*y'});\n", - "_matlab(\"'s','m',{'x','y','x^2','y^2','x*y'});\")\n", - "# MATLAB L8744: covarColl = CovColl({baseline,gaussian,zernike});\n", - "_matlab('covarColl = CovColl({baseline,gaussian,zernike});')\n", - "# MATLAB L8745: \n", - "#\n", - "# MATLAB L8746: % Create the trial structure\n", + "#\n", "# Create the trial structure\n", - "# MATLAB L8747: spikeColl = nstColl(nst);\n", - "_matlab('spikeColl = nstColl(nst);')\n", - "# MATLAB L8748: trial = Trial(spikeColl,covarColl);\n", - "_matlab('trial = Trial(spikeColl,covarColl);')\n", - "# MATLAB L8749: \n", "#\n", - "# MATLAB L8750: \n", "#\n", - "# MATLAB L8751: % Define how we want to analyze the data\n", "# Define how we want to analyze the data\n", - "# MATLAB L8752: tc{1} = TrialConfig({{'Baseline','mu'},{'Gaussian',...\n", - "_matlab(\"tc{1} = TrialConfig({{'Baseline','mu'},{'Gaussian',...\")\n", - "# MATLAB L8753: 'x','y','x^2','y^2','x*y'}},sampleRate,[]);\n", - "_matlab(\"'x','y','x^2','y^2','x*y'}},sampleRate,[]);\")\n", - "# MATLAB L8754: tc{1}.setName('Gaussian');\n", - "_matlab(\"tc{1}.setName('Gaussian');\")\n", - "# MATLAB L8755: tc{2} = TrialConfig({{'Zernike' 'z1','z2','z3','z4','z5','z6',...\n", - "_matlab(\"tc{2} = TrialConfig({{'Zernike' 'z1','z2','z3','z4','z5','z6',...\")\n", - "# MATLAB L8756: 'z7','z8','z9','z10'}},sampleRate,[]);\n", - "_matlab(\"'z7','z8','z9','z10'}},sampleRate,[]);\")\n", - "# MATLAB L8757: tc{2}.setName('Zernike');\n", - "_matlab(\"tc{2}.setName('Zernike');\")\n", - "# MATLAB L8758: tcc = ConfigColl(tc);\n", - "_matlab('tcc = ConfigColl(tc);')\n", - "# MATLAB L8759: \n", - "#\n", - "# MATLAB L8760: % Perform Analysis (Commented to since data already saved)\n", + "#\n", "# Perform Analysis (Commented to since data already saved)\n", - "# MATLAB L8761: results =Analysis.RunAnalysisForAllNeurons(trial,tcc,0);\n", - "_matlab('results =Analysis.RunAnalysisForAllNeurons(trial,tcc,0);')\n", - "# MATLAB L8762: \n", - "#\n", - "# MATLAB L8763: % Save results\n", - "# Save results\n", - "# MATLAB L8764: resStruct =FitResult.CellArrayToStructure(results);\n", - "_matlab('resStruct =FitResult.CellArrayToStructure(results);')\n", - "# MATLAB L8765: filename = fullfile(dataDir,['PlaceCellAnimal' num2str(n) 'Results']);\n", - "_matlab(\"filename = fullfile(dataDir,['PlaceCellAnimal' num2str(n) 'Results']);\")\n", - "# MATLAB L8766: save(filename,'resStruct');\n", - "_matlab(\"save(filename,'resStruct');\")\n", - "# MATLAB L8767: end\n", - "_matlab('end')\n", - "# MATLAB L8768: end\n", - "_matlab('end')\n" + "#\n", + "# Save results" ] }, { @@ -2452,94 +679,25 @@ "outputs": [], "source": [ "# SECTION 22: View Summary Statistics\n", - "# MATLAB L9000: % Note the Zernike Polynomials yield better fits in terms of decreased KS Statistics (less deviation from the 45 degree line), reduced AIC and reduced BIC across the majority of cells and for both animals\n", "# Note the Zernike Polynomials yield better fits in terms of decreased KS Statistics (less deviation from the 45 degree line), reduced AIC and reduced BIC across the majority of cells and for both animals\n", - "# MATLAB L9100: clear Summary;\n", "pass\n", - "# MATLAB L9101: numAnimals =2;\n", "numAnimals = 2\n", - "# MATLAB L9102: \n", - "#\n", - "# MATLAB L9103: for n=1:numAnimals\n", - "_matlab('for n=1:numAnimals')\n", - "# MATLAB L9104: resData = load(fullfile(dataDir,['PlaceCellAnimal' num2str(n) 'Results.mat']));\n", - "_matlab(\"resData = load(fullfile(dataDir,['PlaceCellAnimal' num2str(n) 'Results.mat']));\")\n", - "# MATLAB L9105: results = FitResult.fromStructure(resData.resStruct);\n", - "_matlab('results = FitResult.fromStructure(resData.resStruct);')\n", - "# MATLAB L9106: Summary{n} = FitResSummary(results);\n", - "_matlab('Summary{n} = FitResSummary(results);')\n", - "# MATLAB L9107: % Summary{n}.plotSummary;\n", + "#\n", "# Summary{n}.plotSummary;\n", - "# MATLAB L9108: end\n", - "_matlab('end')\n", - "# MATLAB L9300: close all;\n", "plt.close(\"all\")\n", - "# MATLAB L9301: scrsz = get(0,'ScreenSize');\n", - "_matlab(\"scrsz = get(0,'ScreenSize');\")\n", - "# MATLAB L9302: h=figure('OuterPosition',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.6 scrsz(4)*.5]);\n", "__tracker.new_figure(\"h=figure('OuterPosition',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.6 scrsz(4)*.5])\")\n", - "_matlab(\"h=figure('OuterPosition',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.6 scrsz(4)*.5]);\")\n", - "# MATLAB L9303: subplot(1,3,1);\n", "__tracker.annotate('subplot(1,3,1)')\n", - "_matlab('subplot(1,3,1);')\n", - "# MATLAB L9304: maxLength = max([Summary{1}.numNeurons,Summary{2}.numNeurons]);\n", - "_matlab('maxLength = max([Summary{1}.numNeurons,Summary{2}.numNeurons]);')\n", - "# MATLAB L9305: dKS = nan(maxLength, 2);\n", - "_matlab('dKS = nan(maxLength, 2);')\n", - "# MATLAB L9306: dKS(1:Summary{1}.numNeurons,1) = (Summary{1}.KSStats(:,1)-Summary{1}.KSStats(:,2)) ;\n", - "_matlab('dKS(1:Summary{1}.numNeurons,1) = (Summary{1}.KSStats(:,1)-Summary{1}.KSStats(:,2)) ;')\n", - "# MATLAB L9307: dKS(1:Summary{2}.numNeurons,2) = (Summary{2}.KSStats(:,1)-Summary{2}.KSStats(:,2)) ;\n", - "_matlab('dKS(1:Summary{2}.numNeurons,2) = (Summary{2}.KSStats(:,1)-Summary{2}.KSStats(:,2)) ;')\n", - "# MATLAB L9308: \n", - "#\n", - "# MATLAB L9309: boxplot(dKS ,{'Animal 1', 'Animal 2'},'labelorientation','inline');\n", - "_matlab(\"boxplot(dKS ,{'Animal 1', 'Animal 2'},'labelorientation','inline');\")\n", - "# MATLAB L9310: title('\\Delta KS Statistic','FontWeight','bold','FontSize',14,...\n", - "_matlab(\"title('\\\\Delta KS Statistic','FontWeight','bold','FontSize',14,...\")\n", - "# MATLAB L9311: 'FontName','Arial');\n", - "_matlab(\"'FontName','Arial');\")\n", - "# MATLAB L9312: \n", - "#\n", - "# MATLAB L9313: \n", - "#\n", - "# MATLAB L9314: subplot(1,3,2);\n", + "#\n", + "#\n", + "#\n", "__tracker.annotate('subplot(1,3,2)')\n", - "_matlab('subplot(1,3,2);')\n", - "# MATLAB L9315: dAIC = nan(maxLength, 2);\n", - "_matlab('dAIC = nan(maxLength, 2);')\n", - "# MATLAB L9316: dAIC(1:Summary{1}.numNeurons,1) = Summary{1}.getDiffAIC(1);\n", - "_matlab('dAIC(1:Summary{1}.numNeurons,1) = Summary{1}.getDiffAIC(1);')\n", - "# MATLAB L9317: dAIC(1:Summary{2}.numNeurons,2) = Summary{2}.getDiffAIC(1);\n", - "_matlab('dAIC(1:Summary{2}.numNeurons,2) = Summary{2}.getDiffAIC(1);')\n", - "# MATLAB L9318: \n", - "#\n", - "# MATLAB L9319: boxplot(dAIC ,{'Animal 1', 'Animal 2'},'labelorientation','inline');\n", - "_matlab(\"boxplot(dAIC ,{'Animal 1', 'Animal 2'},'labelorientation','inline');\")\n", - "# MATLAB L9320: title('\\Delta AIC','FontWeight','bold','FontSize',14,'FontName','Arial');\n", - "_matlab(\"title('\\\\Delta AIC','FontWeight','bold','FontSize',14,'FontName','Arial');\")\n", - "# MATLAB L9321: \n", - "#\n", - "# MATLAB L9322: \n", - "#\n", - "# MATLAB L9323: subplot(1,3,3);\n", + "#\n", + "#\n", + "#\n", "__tracker.annotate('subplot(1,3,3)')\n", - "_matlab('subplot(1,3,3);')\n", - "# MATLAB L9324: dBIC = nan(maxLength, 2);\n", - "_matlab('dBIC = nan(maxLength, 2);')\n", - "# MATLAB L9325: dBIC(1:Summary{1}.numNeurons,1) = Summary{1}.getDiffBIC(1);\n", - "_matlab('dBIC(1:Summary{1}.numNeurons,1) = Summary{1}.getDiffBIC(1);')\n", - "# MATLAB L9326: dBIC(1:Summary{2}.numNeurons,2) = Summary{2}.getDiffBIC(1);\n", - "_matlab('dBIC(1:Summary{2}.numNeurons,2) = Summary{2}.getDiffBIC(1);')\n", - "# MATLAB L9327: \n", - "#\n", - "# MATLAB L9328: boxplot(dBIC ,{'Animal 1', 'Animal 2'},'labelorientation','inline'); %ylabel('\\Delta BIC'); %xticklabel_rotate([],45,[],'Fontsize',6);\n", - "_matlab(\"boxplot(dBIC ,{'Animal 1', 'Animal 2'},'labelorientation','inline'); %ylabel('\\\\Delta BIC'); %xticklabel_rotate([],45,[],'Fontsize',6);\")\n", - "# MATLAB L9329: title('\\Delta BIC','FontWeight','bold','FontSize',14,'FontName','Arial');\n", - "_matlab(\"title('\\\\Delta BIC','FontWeight','bold','FontSize',14,'FontName','Arial');\")\n", - "# MATLAB L9330: \n", - "#\n", - "# MATLAB L9331: % close all;\n", - "# close all;\n" + "#\n", + "#\n", + "# close all;" ] }, { @@ -2550,343 +708,73 @@ "outputs": [], "source": [ "# SECTION 23: Visualize the results\n", - "# MATLAB L9600: close all;\n", "plt.close(\"all\")\n", - "# MATLAB L9601: % Define a grid\n", "# Define a grid\n", - "# MATLAB L9602: [x_new,y_new]=meshgrid(-1:.01:1); %define new x and y\n", - "_matlab('[x_new,y_new]=meshgrid(-1:.01:1); %define new x and y')\n", - "# MATLAB L9603: y_new = flipud(y_new); x_new = fliplr(x_new);\n", - "_matlab('y_new = flipud(y_new); x_new = fliplr(x_new);')\n", - "# MATLAB L9604: [theta_new,r_new] = cart2pol(x_new,y_new);\n", - "_matlab('[theta_new,r_new] = cart2pol(x_new,y_new);')\n", - "# MATLAB L9605: \n", - "#\n", - "# MATLAB L9606: %Data for the gaussian fit\n", + "#\n", "# Data for the gaussian fit\n", - "# MATLAB L9607: newData{1} =ones(size(x_new));\n", - "_matlab('newData{1} =ones(size(x_new));')\n", - "# MATLAB L9608: newData{2} =x_new; newData{3} =y_new;\n", - "_matlab('newData{2} =x_new; newData{3} =y_new;')\n", - "# MATLAB L9609: newData{4} =x_new.^2; newData{5} =y_new.^2;\n", - "_matlab('newData{4} =x_new.^2; newData{5} =y_new.^2;')\n", - "# MATLAB L9610: newData{6} =x_new.*y_new;\n", - "_matlab('newData{6} =x_new.*y_new;')\n", - "# MATLAB L9611: \n", - "#\n", - "# MATLAB L9612: \n", - "#\n", - "# MATLAB L9613: % Zernike polynomials only defined on the unit disk\n", + "#\n", + "#\n", "# Zernike polynomials only defined on the unit disk\n", - "# MATLAB L9614: idx = r_new<=1;\n", - "_matlab('idx = r_new<=1;')\n", - "# MATLAB L9615: zpoly = cell(1,10);\n", - "_matlab('zpoly = cell(1,10);')\n", - "# MATLAB L9616: cnt=0;\n", "cnt = 0\n", - "# MATLAB L9617: for l=0:3\n", - "_matlab('for l=0:3')\n", - "# MATLAB L9618: for m=-l:l\n", - "_matlab('for m=-l:l')\n", - "# MATLAB L9619: if(~any(mod(l-m,2)))\n", - "_matlab('if(~any(mod(l-m,2)))')\n", - "# MATLAB L9620: cnt = cnt+1;\n", - "_matlab('cnt = cnt+1;')\n", - "# MATLAB L9621: temp = nan(size(x_new));\n", - "_matlab('temp = nan(size(x_new));')\n", - "# MATLAB L9622: temp(idx) = zernfun(l,m,r_new(idx),theta_new(idx),'norm');\n", - "_matlab(\"temp(idx) = zernfun(l,m,r_new(idx),theta_new(idx),'norm');\")\n", - "# MATLAB L9623: zpoly{cnt} = temp;\n", - "_matlab('zpoly{cnt} = temp;')\n", - "# MATLAB L9624: end\n", - "_matlab('end')\n", - "# MATLAB L9625: end\n", - "_matlab('end')\n", - "# MATLAB L9626: end\n", - "_matlab('end')\n", - "# MATLAB L9627: \n", - "#\n", - "# MATLAB L9628: \n", - "#\n", - "# MATLAB L9629: \n", - "#\n", - "# MATLAB L9630: for n=1:numAnimals\n", - "_matlab('for n=1:numAnimals')\n", - "# MATLAB L9631: \n", - "#\n", - "# MATLAB L9632: clear lambdaGaussian lambdaZernike;\n", + "#\n", + "#\n", + "#\n", + "#\n", "pass\n", - "# MATLAB L9633: load(fullfile(placeCellDataDir,['PlaceCellDataAnimal' num2str(n) '.mat']));\n", - "_matlab(\"load(fullfile(placeCellDataDir,['PlaceCellDataAnimal' num2str(n) '.mat']));\")\n", - "# MATLAB L9634: resData = load(fullfile(dataDir,['PlaceCellAnimal' num2str(n) 'Results.mat']));\n", - "_matlab(\"resData = load(fullfile(dataDir,['PlaceCellAnimal' num2str(n) 'Results.mat']));\")\n", - "# MATLAB L9635: results = FitResult.fromStructure(resData.resStruct);\n", - "_matlab('results = FitResult.fromStructure(resData.resStruct);')\n", - "# MATLAB L9636: \n", - "#\n", - "# MATLAB L9637: for i=1:length(neuron)\n", - "_matlab('for i=1:length(neuron)')\n", - "# MATLAB L9638: % Evaluate our fits using the new data and the estimated parameters\n", + "#\n", "# Evaluate our fits using the new data and the estimated parameters\n", - "# MATLAB L9639: lambdaGaussian{i} = results{i}.evalLambda(1,newData);\n", - "_matlab('lambdaGaussian{i} = results{i}.evalLambda(1,newData);')\n", - "# MATLAB L9640: lambdaZernike{i} = results{i}.evalLambda(2,zpoly);\n", - "_matlab('lambdaZernike{i} = results{i}.evalLambda(2,zpoly);')\n", - "# MATLAB L9641: end\n", - "_matlab('end')\n", - "# MATLAB L9642: \n", "#\n", - "# MATLAB L9643: \n", "#\n", - "# MATLAB L9644: \n", "#\n", - "# MATLAB L9645: \n", "#\n", - "# MATLAB L9646: % Plot the receptive fields\n", "# Plot the receptive fields\n", - "# MATLAB L9647: for i=1:length(neuron)\n", - "_matlab('for i=1:length(neuron)')\n", - "# MATLAB L9648: % 3d plot of an example place field\n", "# 3d plot of an example place field\n", - "# MATLAB L9649: \n", "#\n", - "# MATLAB L9650: \n", "#\n", - "# MATLAB L9651: % 2d plot of all the cell's fields\n", "# 2d plot of all the cell's fields\n", - "# MATLAB L9652: if(n==1)\n", - "_matlab('if(n==1)')\n", - "# MATLAB L9653: h4=figure(4);\n", "__tracker.new_figure('h4=figure(4)')\n", - "_matlab('h4=figure(4);')\n", - "# MATLAB L9654: colormap('jet');\n", - "_matlab(\"colormap('jet');\")\n", - "# MATLAB L9655: if(i==1)\n", - "_matlab('if(i==1)')\n", - "# MATLAB L9656: tb=annotation(h4,'textbox',...\n", - "_matlab(\"tb=annotation(h4,'textbox',...\")\n", - "# MATLAB L9657: [0.283261904761904 0.928571428571418 ...\n", - "_matlab('[0.283261904761904 0.928571428571418 ...')\n", - "# MATLAB L9658: 0.392857142857143 0.0595238095238095],...\n", - "_matlab('0.392857142857143 0.0595238095238095],...')\n", - "# MATLAB L9659: 'String',{['Gaussian Place Fields - Animal#' ...\n", - "_matlab(\"'String',{['Gaussian Place Fields - Animal#' ...\")\n", - "# MATLAB L9660: num2str(n)]},'FitBoxToText','on','Fontsize',11,...\n", - "_matlab(\"num2str(n)]},'FitBoxToText','on','Fontsize',11,...\")\n", - "# MATLAB L9661: 'FontName','Arial','FontWeight','bold','LineStyle',...\n", - "_matlab(\"'FontName','Arial','FontWeight','bold','LineStyle',...\")\n", - "# MATLAB L9662: 'none','HorizontalAlignment','center'); hold on;\n", - "_matlab(\"'none','HorizontalAlignment','center'); hold on;\")\n", - "# MATLAB L9663: end\n", - "_matlab('end')\n", - "# MATLAB L9664: subplot(7,7,i);\n", "__tracker.annotate('subplot(7,7,i)')\n", - "_matlab('subplot(7,7,i);')\n", - "# MATLAB L9665: elseif(n==2)\n", - "_matlab('elseif(n==2)')\n", - "# MATLAB L9666: h6=figure(6);\n", "__tracker.new_figure('h6=figure(6)')\n", - "_matlab('h6=figure(6);')\n", - "# MATLAB L9667: colormap('jet');\n", - "_matlab(\"colormap('jet');\")\n", - "# MATLAB L9668: if(i==1)\n", - "_matlab('if(i==1)')\n", - "# MATLAB L9669: annotation(h6,'textbox',...\n", - "_matlab(\"annotation(h6,'textbox',...\")\n", - "# MATLAB L9670: [0.283261904761904 0.928571428571418 ...\n", - "_matlab('[0.283261904761904 0.928571428571418 ...')\n", - "# MATLAB L9671: 0.392857142857143 0.0595238095238095],...\n", - "_matlab('0.392857142857143 0.0595238095238095],...')\n", - "# MATLAB L9672: 'String',{['Gaussian Place Fields - Animal#' ...\n", - "_matlab(\"'String',{['Gaussian Place Fields - Animal#' ...\")\n", - "# MATLAB L9673: num2str(n)]},'FitBoxToText','on','Fontsize',11,...\n", - "_matlab(\"num2str(n)]},'FitBoxToText','on','Fontsize',11,...\")\n", - "# MATLAB L9674: 'FontName','Arial','FontWeight','bold','LineStyle',...\n", - "_matlab(\"'FontName','Arial','FontWeight','bold','LineStyle',...\")\n", - "# MATLAB L9675: 'none','HorizontalAlignment','center'); hold on;\n", - "_matlab(\"'none','HorizontalAlignment','center'); hold on;\")\n", - "# MATLAB L9676: end\n", - "_matlab('end')\n", - "# MATLAB L9677: subplot(6,7,i);\n", "__tracker.annotate('subplot(6,7,i)')\n", - "_matlab('subplot(6,7,i);')\n", - "# MATLAB L9678: end\n", - "_matlab('end')\n", - "# MATLAB L9679: pcolor(x_new,y_new,lambdaGaussian{i}), shading interp\n", "__tracker.annotate('pcolor(x_new,y_new,lambdaGaussian{i}), shading interp')\n", - "_matlab('pcolor(x_new,y_new,lambdaGaussian{i}), shading interp')\n", - "# MATLAB L9680: axis square; set(gca,'xtick',[],'ytick',[]);\n", - "_matlab(\"axis square; set(gca,'xtick',[],'ytick',[]);\")\n", - "# MATLAB L9681: set(gca, 'Box' , 'off');\n", - "_matlab(\"set(gca, 'Box' , 'off');\")\n", - "# MATLAB L9682: \n", - "#\n", - "# MATLAB L9683: if(n==1)\n", - "_matlab('if(n==1)')\n", - "# MATLAB L9684: h5=figure(5);\n", + "#\n", "__tracker.new_figure('h5=figure(5)')\n", - "_matlab('h5=figure(5);')\n", - "# MATLAB L9685: colormap('jet');\n", - "_matlab(\"colormap('jet');\")\n", - "# MATLAB L9686: if(i==1)\n", - "_matlab('if(i==1)')\n", - "# MATLAB L9687: annotation(h5,'textbox',...\n", - "_matlab(\"annotation(h5,'textbox',...\")\n", - "# MATLAB L9688: [0.303261904761904 0.928571428571418 ...\n", - "_matlab('[0.303261904761904 0.928571428571418 ...')\n", - "# MATLAB L9689: 0.392857142857143 0.0595238095238095],...\n", - "_matlab('0.392857142857143 0.0595238095238095],...')\n", - "# MATLAB L9690: 'String',{['Zernike Place Fields - Animal#' ...\n", - "_matlab(\"'String',{['Zernike Place Fields - Animal#' ...\")\n", - "# MATLAB L9691: num2str(n)]},'FitBoxToText','on','Fontsize',11,...\n", - "_matlab(\"num2str(n)]},'FitBoxToText','on','Fontsize',11,...\")\n", - "# MATLAB L9692: 'FontName','Arial','FontWeight','bold','LineStyle','none'); hold on;\n", - "_matlab(\"'FontName','Arial','FontWeight','bold','LineStyle','none'); hold on;\")\n", - "# MATLAB L9693: \n", - "#\n", - "# MATLAB L9694: end\n", - "_matlab('end')\n", - "# MATLAB L9695: subplot(7,7,i);\n", + "#\n", "__tracker.annotate('subplot(7,7,i)')\n", - "_matlab('subplot(7,7,i);')\n", - "# MATLAB L9696: elseif(n==2)\n", - "_matlab('elseif(n==2)')\n", - "# MATLAB L9697: h7=figure(7);\n", "__tracker.new_figure('h7=figure(7)')\n", - "_matlab('h7=figure(7);')\n", - "# MATLAB L9698: colormap('jet');\n", - "_matlab(\"colormap('jet');\")\n", - "# MATLAB L9699: if(i==1)\n", - "_matlab('if(i==1)')\n", - "# MATLAB L9700: annotation(h7,'textbox',...\n", - "_matlab(\"annotation(h7,'textbox',...\")\n", - "# MATLAB L9701: [0.303261904761904 0.928571428571418 ...\n", - "_matlab('[0.303261904761904 0.928571428571418 ...')\n", - "# MATLAB L9702: 0.392857142857143 0.0595238095238095],...\n", - "_matlab('0.392857142857143 0.0595238095238095],...')\n", - "# MATLAB L9703: 'String',{['Zernike Place Fields - Animal#' ...\n", - "_matlab(\"'String',{['Zernike Place Fields - Animal#' ...\")\n", - "# MATLAB L9704: num2str(n)]},'FitBoxToText','on','Fontsize',11,...\n", - "_matlab(\"num2str(n)]},'FitBoxToText','on','Fontsize',11,...\")\n", - "# MATLAB L9705: 'FontName','Arial','FontWeight','bold','LineStyle',...\n", - "_matlab(\"'FontName','Arial','FontWeight','bold','LineStyle',...\")\n", - "# MATLAB L9706: 'none','HorizontalAlignment','center'); hold on;\n", - "_matlab(\"'none','HorizontalAlignment','center'); hold on;\")\n", - "# MATLAB L9707: end\n", - "_matlab('end')\n", - "# MATLAB L9708: subplot(6,7,i);\n", "__tracker.annotate('subplot(6,7,i)')\n", - "_matlab('subplot(6,7,i);')\n", - "# MATLAB L9709: end\n", - "_matlab('end')\n", - "# MATLAB L9710: pcolor(x_new,y_new,lambdaZernike{i}), shading interp\n", "__tracker.annotate('pcolor(x_new,y_new,lambdaZernike{i}), shading interp')\n", - "_matlab('pcolor(x_new,y_new,lambdaZernike{i}), shading interp')\n", - "# MATLAB L9711: axis square;\n", - "_matlab('axis square;')\n", - "# MATLAB L9712: set(gca,'xtick',[],'ytick',[]);\n", - "_matlab(\"set(gca,'xtick',[],'ytick',[]);\")\n", - "# MATLAB L9713: set(gca, 'Box' , 'off');\n", - "_matlab(\"set(gca, 'Box' , 'off');\")\n", - "# MATLAB L9714: end\n", - "_matlab('end')\n", - "# MATLAB L9715: \n", - "#\n", - "# MATLAB L9716: \n", - "#\n", - "# MATLAB L9717: end\n", - "_matlab('end')\n", - "# MATLAB L9800: clear lambdaGaussian lambdaZernike;\n", + "#\n", + "#\n", "pass\n", - "# MATLAB L9801: load(fullfile(placeCellDataDir,'PlaceCellDataAnimal1.mat'));\n", - "_matlab(\"load(fullfile(placeCellDataDir,'PlaceCellDataAnimal1.mat'));\")\n", - "# MATLAB L9802: resData = load(fullfile(dataDir,'PlaceCellAnimal1Results.mat'));\n", - "_matlab(\"resData = load(fullfile(dataDir,'PlaceCellAnimal1Results.mat'));\")\n", - "# MATLAB L9803: results = FitResult.fromStructure(resData.resStruct);\n", - "_matlab('results = FitResult.fromStructure(resData.resStruct);')\n", - "# MATLAB L9804: \n", - "#\n", - "# MATLAB L9805: for i=1:length(neuron)\n", - "_matlab('for i=1:length(neuron)')\n", - "# MATLAB L9806: % Evaluate our fits using the new data and the estimated parameters\n", + "#\n", "# Evaluate our fits using the new data and the estimated parameters\n", - "# MATLAB L9807: lambdaGaussian{i} = results{i}.evalLambda(1,newData);\n", - "_matlab('lambdaGaussian{i} = results{i}.evalLambda(1,newData);')\n", - "# MATLAB L9808: lambdaZernike{i} = results{i}.evalLambda(2,zpoly);\n", - "_matlab('lambdaZernike{i} = results{i}.evalLambda(2,zpoly);')\n", - "# MATLAB L9809: end\n", - "_matlab('end')\n", - "# MATLAB L9810: \n", "#\n", - "# MATLAB L9811: \n", "#\n", - "# MATLAB L9812: \n", "#\n", - "# MATLAB L9813: % h1=plot(x,y,'b');\n", "# h1=plot(x,y,'b');\n", - "# MATLAB L9814: % h2=plot(x,y,'g');\n", "# h2=plot(x,y,'g');\n", - "# MATLAB L9815: %\n", "#\n", - "# MATLAB L9816: exampleCell = 25;\n", "exampleCell = 25\n", - "# MATLAB L9817: % figure(8);\n", "# figure(8);\n", - "# MATLAB L9818: % plot(x,y,'b',neuron{exampleCell}.xN,neuron{exampleCell}.yN,'r.');\n", "# plot(x,y,'b',neuron{exampleCell}.xN,neuron{exampleCell}.yN,'r.');\n", - "# MATLAB L9819: % xlabel('x'); ylabel('y');\n", "# xlabel('x'); ylabel('y');\n", - "# MATLAB L9820: % title(['Animal#1, Cell#' num2str(exampleCell)]);\n", "# title(['Animal#1, Cell#' num2str(exampleCell)]);\n", - "# MATLAB L9821: %\n", "#\n", - "# MATLAB L9822: close all;\n", "plt.close(\"all\")\n", - "# MATLAB L9823: h9=figure(9);\n", "__tracker.new_figure('h9=figure(9)')\n", - "_matlab('h9=figure(9);')\n", - "# MATLAB L9824: h_mesh = mesh(x_new,y_new,lambdaGaussian{exampleCell},'AlphaData',0);\n", - "_matlab(\"h_mesh = mesh(x_new,y_new,lambdaGaussian{exampleCell},'AlphaData',0);\")\n", - "# MATLAB L9825: get(h_mesh,'AlphaData');\n", - "_matlab(\"get(h_mesh,'AlphaData');\")\n", - "# MATLAB L9826: set(h_mesh,'FaceAlpha',0.2,'EdgeAlpha',0.2,'EdgeColor','b');\n", - "_matlab(\"set(h_mesh,'FaceAlpha',0.2,'EdgeAlpha',0.2,'EdgeColor','b');\")\n", - "# MATLAB L9827: hold on;\n", - "_matlab('hold on;')\n", - "# MATLAB L9828: h_mesh = mesh(x_new,y_new,lambdaZernike{exampleCell},'AlphaData',0);\n", - "_matlab(\"h_mesh = mesh(x_new,y_new,lambdaZernike{exampleCell},'AlphaData',0);\")\n", - "# MATLAB L9829: get(h_mesh,'AlphaData');\n", - "_matlab(\"get(h_mesh,'AlphaData');\")\n", - "# MATLAB L9830: set(h_mesh,'FaceAlpha',0.2,'EdgeAlpha',0.2,'EdgeColor','g');\n", - "_matlab(\"set(h_mesh,'FaceAlpha',0.2,'EdgeAlpha',0.2,'EdgeColor','g');\")\n", - "# MATLAB L9831: \n", - "#\n", - "# MATLAB L9832: \n", - "#\n", - "# MATLAB L9833: % h_legend=legend('\\lambda_{Gaussian}','\\lambda_{Zernike}');\n", + "#\n", + "#\n", "# h_legend=legend('\\lambda_{Gaussian}','\\lambda_{Zernike}');\n", - "# MATLAB L9834: % set(h_legend,'FontSize',20);\n", "# set(h_legend,'FontSize',20);\n", - "# MATLAB L9835: plot(x,y,neuron{exampleCell}.xN,neuron{exampleCell}.yN,'r.');\n", "__tracker.annotate(\"plot(x,y,neuron{exampleCell}.xN,neuron{exampleCell}.yN,'r.')\")\n", - "_matlab(\"plot(x,y,neuron{exampleCell}.xN,neuron{exampleCell}.yN,'r.');\")\n", - "# MATLAB L9836: axis tight square;\n", "ax = plt.gca()\n", "ax.relim()\n", "ax.autoscale_view(tight=True)\n", "ax.set_aspect('equal', adjustable='box')\n", "ax.tick_params(top=True, right=True, direction='in')\n", - "# MATLAB L9837: xlabel('x position'); ylabel('y position');\n", "plt.xlabel('x position')\n", - "plt.ylabel('y position')\n", - "# MATLAB L9838: title(['Animal#1, Cell#' num2str(exampleCell)],'FontWeight','bold',...\n", - "_matlab(\"title(['Animal#1, Cell#' num2str(exampleCell)],'FontWeight','bold',...\")\n", - "# MATLAB L9839: 'Fontsize',12,'FontName','Arial');\n", - "_matlab(\"'Fontsize',12,'FontName','Arial');\")\n", - "# MATLAB L9840: hx=get(gca,'XLabel'); hy=get(gca,'YLabel');\n", - "_matlab(\"hx=get(gca,'XLabel'); hy=get(gca,'YLabel');\")\n", - "# MATLAB L9841: set([hx, hy],'FontName', 'Arial','FontSize',12,'FontWeight','bold');\n", - "_matlab(\"set([hx, hy],'FontName', 'Arial','FontSize',12,'FontWeight','bold');\")\n" + "plt.ylabel('y position')" ] }, { @@ -2897,8 +785,7 @@ "outputs": [], "source": [ "# SECTION 24: Example 5 - STIMULUS DECODING\n", - "# MATLAB L10100: % In this example we show how to decode a univariate and a bivariate stimulus based on a point process observations using nSTAT. Even though due to the simulated nature of the data, we know the exact condition intensity function, we estimate the parameters before moving on to the decoding stage.\n", - "# In this example we show how to decode a univariate and a bivariate stimulus based on a point process observations using nSTAT. Even though due to the simulated nature of the data, we know the exact condition intensity function, we estimate the parameters before moving on to the decoding stage.\n" + "# In this example we show how to decode a univariate and a bivariate stimulus based on a point process observations using nSTAT. Even though due to the simulated nature of the data, we know the exact condition intensity function, we estimate the parameters before moving on to the decoding stage." ] }, { @@ -2909,230 +796,41 @@ "outputs": [], "source": [ "# SECTION 25: Generate the conditional Intensity Function\n", - "# MATLAB L10300: close all; clear all;\n", "plt.close(\"all\")\n", - "# MATLAB L10301: [dataDir,mEPSCDir,explicitStimulusDir,psthDir,placeCellDataDir] = ...\n", - "_matlab('[dataDir,mEPSCDir,explicitStimulusDir,psthDir,placeCellDataDir] = ...')\n", - "# MATLAB L10302: getPaperDataDirs();\n", - "_matlab('getPaperDataDirs();')\n", - "# MATLAB L10303: delta = 0.001; Tmax = 1;\n", - "_matlab('delta = 0.001; Tmax = 1;')\n", - "# MATLAB L10304: time = 0:delta:Tmax;\n", - "_matlab('time = 0:delta:Tmax;')\n", - "# MATLAB L10305: numRealizations = 20;\n", "numRealizations = 20\n", - "# MATLAB L10306: f=2; b1=randn(numRealizations,1);b0=log(10*delta)+randn(numRealizations,1);\n", - "_matlab('f=2; b1=randn(numRealizations,1);b0=log(10*delta)+randn(numRealizations,1);')\n", - "# MATLAB L10307: x = sin(2*pi*f*time);\n", - "_matlab('x = sin(2*pi*f*time);')\n", - "# MATLAB L10308: clear nst;\n", "pass\n", - "# MATLAB L10309: for i=1:numRealizations\n", - "_matlab('for i=1:numRealizations')\n", - "# MATLAB L10310: expData = exp(b1(i)*x+b0(i));\n", - "_matlab('expData = exp(b1(i)*x+b0(i));')\n", - "# MATLAB L10311: lambdaData = expData./(1+expData);\n", - "_matlab('lambdaData = expData./(1+expData);')\n", - "# MATLAB L10312: \n", - "#\n", - "# MATLAB L10313: if(i==1)\n", - "_matlab('if(i==1)')\n", - "# MATLAB L10314: lambda = Covariate(time,lambdaData./delta, ...\n", - "_matlab('lambda = Covariate(time,lambdaData./delta, ...')\n", - "# MATLAB L10315: '\\Lambda(t)','time','s','spikes/sec',{'\\lambda_{1}'},...\n", - "_matlab(\"'\\\\Lambda(t)','time','s','spikes/sec',{'\\\\lambda_{1}'},...\")\n", - "# MATLAB L10316: {{' ''b'', ''LineWidth'' ,2'}});\n", - "_matlab(\"{{' ''b'', ''LineWidth'' ,2'}});\")\n", - "# MATLAB L10317: else\n", - "_matlab('else')\n", - "# MATLAB L10318: tempLambda = Covariate(time,lambdaData./delta, ...\n", - "_matlab('tempLambda = Covariate(time,lambdaData./delta, ...')\n", - "# MATLAB L10319: '\\Lambda(t)','time','s','spikes/sec',{'\\lambda_{1}'},...\n", - "_matlab(\"'\\\\Lambda(t)','time','s','spikes/sec',{'\\\\lambda_{1}'},...\")\n", - "# MATLAB L10320: {{' ''b'', ''LineWidth'' ,2'}});\n", - "_matlab(\"{{' ''b'', ''LineWidth'' ,2'}});\")\n", - "# MATLAB L10321: lambda = lambda.merge(tempLambda);\n", - "_matlab('lambda = lambda.merge(tempLambda);')\n", - "# MATLAB L10322: end\n", - "_matlab('end')\n", - "# MATLAB L10323: \n", - "#\n", - "# MATLAB L10324: spikeColl = CIF.simulateCIFByThinningFromLambda(...\n", - "_matlab('spikeColl = CIF.simulateCIFByThinningFromLambda(...')\n", - "# MATLAB L10325: lambda.getSubSignal(i),1);\n", - "_matlab('lambda.getSubSignal(i),1);')\n", - "# MATLAB L10326: nst{i} = spikeColl.getNST(1);\n", - "_matlab('nst{i} = spikeColl.getNST(1);')\n", - "# MATLAB L10327: end\n", - "_matlab('end')\n", - "# MATLAB L10328: spikeColl = nstColl(nst);scrsz = get(0,'ScreenSize');\n", - "_matlab(\"spikeColl = nstColl(nst);scrsz = get(0,'ScreenSize');\")\n", - "# MATLAB L10329: h=figure('Position',[scrsz(3)*.1 scrsz(4)*.1 ...\n", + "#\n", + "#\n", "__tracker.new_figure(\"h=figure('Position',[scrsz(3)*.1 scrsz(4)*.1 ...\")\n", - "_matlab(\"h=figure('Position',[scrsz(3)*.1 scrsz(4)*.1 ...\")\n", - "# MATLAB L10330: scrsz(3)*.6 scrsz(4)*.8]);\n", - "_matlab('scrsz(3)*.6 scrsz(4)*.8]);')\n", - "# MATLAB L10331: % figure;\n", "# figure;\n", - "# MATLAB L10332: subplot(3,1,1); plot(time,x,'k');\n", "__tracker.annotate('subplot(3,1,1)')\n", "__tracker.annotate(\"plot(time,x,'k')\")\n", - "_matlab(\"subplot(3,1,1); plot(time,x,'k');\")\n", - "# MATLAB L10333: set(gca,'xtick',[],'xtickLabel',[]); ylabel('Stimulus');\n", - "_matlab(\"set(gca,'xtick',[],'xtickLabel',[]); ylabel('Stimulus');\")\n", - "# MATLAB L10334: hx=get(gca,'XLabel'); hy=get(gca,'YLabel');\n", - "_matlab(\"hx=get(gca,'XLabel'); hy=get(gca,'YLabel');\")\n", - "# MATLAB L10335: set([hx, hy],'FontName', 'Arial','FontSize',12,'FontWeight','bold');\n", - "_matlab(\"set([hx, hy],'FontName', 'Arial','FontSize',12,'FontWeight','bold');\")\n", - "# MATLAB L10336: title('Driving Stimulus','FontWeight','bold',...\n", - "_matlab(\"title('Driving Stimulus','FontWeight','bold',...\")\n", - "# MATLAB L10337: 'FontSize',14,'FontName','Arial');\n", - "_matlab(\"'FontSize',14,'FontName','Arial');\")\n", - "# MATLAB L10338: subplot(3,1,2); lambda.plot([],{{' ''k'',''Linewidth'',1'}});\n", "__tracker.annotate('subplot(3,1,2)')\n", "__tracker.annotate(\"lambda.plot([],{{' ''k'',''Linewidth'',1'}})\")\n", - "_matlab(\"subplot(3,1,2); lambda.plot([],{{' ''k'',''Linewidth'',1'}});\")\n", - "# MATLAB L10339: legend off;\n", - "_matlab('legend off;')\n", - "# MATLAB L10340: hy=ylabel('Firing Rate [spikes/sec]', 'Interpreter','none');\n", - "_matlab(\"hy=ylabel('Firing Rate [spikes/sec]', 'Interpreter','none');\")\n", - "# MATLAB L10341: hx=xlabel('','Interpreter','none');\n", - "_matlab(\"hx=xlabel('','Interpreter','none');\")\n", - "# MATLAB L10342: set([hx, hy],'FontName', 'Arial','FontSize',12,...\n", - "_matlab(\"set([hx, hy],'FontName', 'Arial','FontSize',12,...\")\n", - "# MATLAB L10343: 'FontWeight','bold');\n", - "_matlab(\"'FontWeight','bold');\")\n", - "# MATLAB L10344: set(gca,'xtickLabel',[]);\n", - "_matlab(\"set(gca,'xtickLabel',[]);\")\n", - "# MATLAB L10345: title('Conditional Intensity Functions','FontWeight',...\n", - "_matlab(\"title('Conditional Intensity Functions','FontWeight',...\")\n", - "# MATLAB L10346: 'bold','FontSize',14,'FontName','Arial');\n", - "_matlab(\"'bold','FontSize',14,'FontName','Arial');\")\n", - "# MATLAB L10347: \n", - "#\n", - "# MATLAB L10348: subplot(3,1,3); spikeColl.plot;\n", + "#\n", "__tracker.annotate('subplot(3,1,3)')\n", "__tracker.annotate('spikeColl.plot')\n", - "_matlab('subplot(3,1,3); spikeColl.plot;')\n", - "# MATLAB L10349: set(gca,'ytick',0:10:numRealizations,'ytickLabel',...\n", - "_matlab(\"set(gca,'ytick',0:10:numRealizations,'ytickLabel',...\")\n", - "# MATLAB L10350: 0:10:numRealizations);\n", - "_matlab('0:10:numRealizations);')\n", - "# MATLAB L10351: xlabel('time [s]','Interpreter','none');\n", - "_matlab(\"xlabel('time [s]','Interpreter','none');\")\n", - "# MATLAB L10352: ylabel('Cell Number','Interpreter','none');\n", - "_matlab(\"ylabel('Cell Number','Interpreter','none');\")\n", - "# MATLAB L10353: hx=get(gca,'XLabel'); hy=get(gca,'YLabel');\n", - "_matlab(\"hx=get(gca,'XLabel'); hy=get(gca,'YLabel');\")\n", - "# MATLAB L10354: set([hx, hy],'FontName', 'Arial','FontSize',12,'FontWeight','bold');\n", - "_matlab(\"set([hx, hy],'FontName', 'Arial','FontSize',12,'FontWeight','bold');\")\n", - "# MATLAB L10355: title('Point Process Sample Paths','FontWeight',...\n", - "_matlab(\"title('Point Process Sample Paths','FontWeight',...\")\n", - "# MATLAB L10356: 'bold','FontSize',14,'FontName','Arial');\n", - "_matlab(\"'bold','FontSize',14,'FontName','Arial');\")\n", - "# MATLAB L10357: \n", - "#\n", - "# MATLAB L10358: stim = Covariate(time,sin(2*pi*f*time),'Stimulus','time','s','V',{'stim'});\n", - "_matlab(\"stim = Covariate(time,sin(2*pi*f*time),'Stimulus','time','s','V',{'stim'});\")\n", - "# MATLAB L10359: baseline = Covariate(time,ones(length(time),1),'Baseline','time','s','',...\n", - "_matlab(\"baseline = Covariate(time,ones(length(time),1),'Baseline','time','s','',...\")\n", - "# MATLAB L10360: {'constant'});\n", - "_matlab(\"{'constant'});\")\n", - "# MATLAB L10361: \n", - "#\n", - "# MATLAB L10362: % close all;\n", + "#\n", + "#\n", "# close all;\n", - "# MATLAB L10500: close all;\n", "plt.close(\"all\")\n", - "# MATLAB L10501: \n", "#\n", - "# MATLAB L10502: clear lambdaCIF;\n", "pass\n", - "# MATLAB L10503: spikeColl.resample(1/delta);\n", - "_matlab('spikeColl.resample(1/delta);')\n", - "# MATLAB L10504: dN=spikeColl.dataToMatrix;\n", - "_matlab('dN=spikeColl.dataToMatrix;')\n", - "# MATLAB L10505: \n", "#\n", - "# MATLAB L10506: % Make noise according to the dynamic range of the stimulus\n", "# Make noise according to the dynamic range of the stimulus\n", - "# MATLAB L10507: Q=std(stim.data(2:end)-stim.data(1:end-1));\n", - "_matlab('Q=std(stim.data(2:end)-stim.data(1:end-1));')\n", - "# MATLAB L10508: Px0=.1; A=1;\n", - "_matlab('Px0=.1; A=1;')\n", - "# MATLAB L10509: x0 = x(:,1); yT=x(:,end);\n", - "_matlab('x0 = x(:,1); yT=x(:,end);')\n", - "# MATLAB L10510: Pi0 = eps*eye(size(x0,1),size(x0,1));\n", - "_matlab('Pi0 = eps*eye(size(x0,1),size(x0,1));')\n", - "# MATLAB L10511: PiT = eps*eye(size(x0,1),size(x0,1));\n", - "_matlab('PiT = eps*eye(size(x0,1),size(x0,1));')\n", - "# MATLAB L10512: \n", - "#\n", - "# MATLAB L10513: \n", - "#\n", - "# MATLAB L10514: [x_p, W_p, x_u, W_u] = DecodingAlgorithms.PPDecodeFilterLinear(A, ...\n", - "_matlab('[x_p, W_p, x_u, W_u] = DecodingAlgorithms.PPDecodeFilterLinear(A, ...')\n", - "# MATLAB L10515: Q, dN',b0,b1','binomial',delta);\n", - "_matlab(\"Q, dN',b0,b1','binomial',delta);\")\n", - "# MATLAB L10516: %\n", - "#\n", - "# MATLAB L10517: h=figure('Position',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.8 scrsz(4)*.6]);\n", + "#\n", + "#\n", + "#\n", "__tracker.new_figure(\"h=figure('Position',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.8 scrsz(4)*.6])\")\n", - "_matlab(\"h=figure('Position',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.8 scrsz(4)*.6]);\")\n", - "# MATLAB L10518: zVal=1.96;\n", "zVal = 1.96\n", - "# MATLAB L10519: ciLower = min(x_u(1:end)-zVal*sqrt(squeeze(W_u(1:end)))',...\n", - "_matlab(\"ciLower = min(x_u(1:end)-zVal*sqrt(squeeze(W_u(1:end)))',...\")\n", - "# MATLAB L10520: x_u(1:end)+zVal*sqrt(squeeze(W_u(1:end))'));\n", - "_matlab(\"x_u(1:end)+zVal*sqrt(squeeze(W_u(1:end))'));\")\n", - "# MATLAB L10521: ciUpper = max(x_u(1:end)-zVal*sqrt(squeeze(W_u(1:end)))',...\n", - "_matlab(\"ciUpper = max(x_u(1:end)-zVal*sqrt(squeeze(W_u(1:end)))',...\")\n", - "# MATLAB L10522: x_u(1:end)+zVal*sqrt(squeeze(W_u(1:end))'));\n", - "_matlab(\"x_u(1:end)+zVal*sqrt(squeeze(W_u(1:end))'));\")\n", - "# MATLAB L10523: \n", - "#\n", - "# MATLAB L10524: estimatedStimulus = Covariate(time,x_u(1:end),'\\hat{x}(t)','time','s','');\n", - "_matlab(\"estimatedStimulus = Covariate(time,x_u(1:end),'\\\\hat{x}(t)','time','s','');\")\n", - "# MATLAB L10525: CI= ConfidenceInterval(time,[ciLower', ciUpper'],'\\hat{x}(t)','time','s','');\n", - "_matlab(\"CI= ConfidenceInterval(time,[ciLower', ciUpper'],'\\\\hat{x}(t)','time','s','');\")\n", - "# MATLAB L10526: estimatedStimulus.setConfInterval(CI);\n", - "_matlab('estimatedStimulus.setConfInterval(CI);')\n", - "# MATLAB L10527: \n", - "#\n", - "# MATLAB L10528: % hold all;\n", + "#\n", + "#\n", "# hold all;\n", - "# MATLAB L10529: % hEst=plot(time,x_u(1:end),'b','Linewidth',2); hold on;\n", "# hEst=plot(time,x_u(1:end),'b','Linewidth',2); hold on;\n", - "# MATLAB L10530: % plot(time, [ciUpper', ciLower'],'b');\n", "# plot(time, [ciUpper', ciLower'],'b');\n", - "# MATLAB L10531: \n", "#\n", - "# MATLAB L10532: hEst = estimatedStimulus.plot([],{{' ''k'',''Linewidth'',4'}});\n", "__tracker.annotate(\"hEst = estimatedStimulus.plot([],{{' ''k'',''Linewidth'',4'}})\")\n", - "_matlab(\"hEst = estimatedStimulus.plot([],{{' ''k'',''Linewidth'',4'}});\")\n", - "# MATLAB L10533: hStim=stim.plot([],{{' ''b'',''Linewidth'',4'}});\n", - "__tracker.annotate(\"hStim=stim.plot([],{{' ''b'',''Linewidth'',4'}})\")\n", - "_matlab(\"hStim=stim.plot([],{{' ''b'',''Linewidth'',4'}});\")\n", - "# MATLAB L10534: legend off;\n", - "_matlab('legend off;')\n", - "# MATLAB L10535: h_legend=legend([hEst(1) hStim],'Decoded','Actual');\n", - "_matlab(\"h_legend=legend([hEst(1) hStim],'Decoded','Actual');\")\n", - "# MATLAB L10536: set(h_legend,'Interpreter','none');\n", - "_matlab(\"set(h_legend,'Interpreter','none');\")\n", - "# MATLAB L10537: set(h_legend,'FontSize',22);\n", - "_matlab(\"set(h_legend,'FontSize',22);\")\n", - "# MATLAB L10538: title(['Decoded Stimulus +/- 95% CIs with ' num2str(numRealizations) ' cells'],...\n", - "_matlab(\"title(['Decoded Stimulus +/- 95% CIs with ' num2str(numRealizations) ' cells'],...\")\n", - "# MATLAB L10539: 'FontWeight','bold','Fontsize',22,'FontName','Arial');\n", - "_matlab(\"'FontWeight','bold','Fontsize',22,'FontName','Arial');\")\n", - "# MATLAB L10540: xlabel('time [s]','Interpreter','none');\n", - "_matlab(\"xlabel('time [s]','Interpreter','none');\")\n", - "# MATLAB L10541: ylabel('Stimulus','Interpreter','none');\n", - "_matlab(\"ylabel('Stimulus','Interpreter','none');\")\n", - "# MATLAB L10542: hx=get(gca,'XLabel'); hy=get(gca,'YLabel');\n", - "_matlab(\"hx=get(gca,'XLabel'); hy=get(gca,'YLabel');\")\n", - "# MATLAB L10543: set([hx, hy],'FontName', 'Arial','FontSize',22,'FontWeight','bold');\n", - "_matlab(\"set([hx, hy],'FontName', 'Arial','FontSize',22,'FontWeight','bold');\")\n" + "__tracker.annotate(\"hStim=stim.plot([],{{' ''b'',''Linewidth'',4'}})\")" ] }, { @@ -3143,605 +841,138 @@ "outputs": [], "source": [ "# SECTION 26: Example 5b - Arm reaching to target Simulation\n", - "# MATLAB L10800: % See L. Srinivasan, U. T. Eden, A. S. Willsky, and E. N. Brown, \"A state-space analysis for reconstruction of goal-directed movements using neural signals.,\" Neural computation, vol. 18, no. 10, pp. 2465?2494, Oct. 2006.\n", "# See L. Srinivasan, U. T. Eden, A. S. Willsky, and E. N. Brown, \"A state-space analysis for reconstruction of goal-directed movements using neural signals.,\" Neural computation, vol. 18, no. 10, pp. 2465?2494, Oct. 2006.\n", - "# MATLAB L10900: close all;\n", "plt.close(\"all\")\n", - "# MATLAB L10901: clear all;\n", "pass\n", - "# MATLAB L10902: [dataDir,mEPSCDir,explicitStimulusDir,psthDir,placeCellDataDir] = ...\n", - "_matlab('[dataDir,mEPSCDir,explicitStimulusDir,psthDir,placeCellDataDir] = ...')\n", - "# MATLAB L10903: getPaperDataDirs();\n", - "_matlab('getPaperDataDirs();')\n", - "# MATLAB L10904: %Process noise covariance only drives the movement velocity\n", "# Process noise covariance only drives the movement velocity\n", - "# MATLAB L10905: q=1e-4;\n", "q = 1e-4\n", - "# MATLAB L10906: Q=diag([1e-12 1e-12 q q]);\n", - "_matlab('Q=diag([1e-12 1e-12 q q]);')\n", - "# MATLAB L10907: \n", "#\n", - "# MATLAB L10908: delta = .001; % Time increment\n", "delta = .001\n", - "# MATLAB L10909: r=1e-6; % in meters^2\n", "r = 1e-6\n", - "# MATLAB L10910: p=1e-6; % in meters^2/s^2\n", "p = 1e-6\n", - "# MATLAB L10911: PiT=diag([r r p p]); % Uncertainty in the target state\n", - "_matlab('PiT=diag([r r p p]); % Uncertainty in the target state')\n", - "# MATLAB L10912: Pi0=PiT;\n", - "_matlab('Pi0=PiT;')\n", - "# MATLAB L10913: T=2; % Reach Duration\n", "T = 2\n", - "# MATLAB L10914: \n", - "#\n", - "# MATLAB L10915: x0 = [0;0;0;0]; % Initial Position and velocities (states)\n", - "_matlab('x0 = [0;0;0;0]; % Initial Position and velocities (states)')\n", - "# MATLAB L10916: xT = [-.35;.2; 0;0];% Final Target\n", - "_matlab('xT = [-.35;.2; 0;0];% Final Target')\n", - "# MATLAB L10917: time=0:delta:T; % time vector\n", - "_matlab('time=0:delta:T; % time vector')\n", - "# MATLAB L10918: \n", - "#\n", - "# MATLAB L10919: A=[1 0 delta 0 ; %State transition matrix\n", - "_matlab('A=[1 0 delta 0 ; %State transition matrix')\n", - "# MATLAB L10920: 0 1 0 delta;\n", - "_matlab('0 1 0 delta;')\n", - "# MATLAB L10921: 0 0 1 0 ;\n", - "_matlab('0 0 1 0 ;')\n", - "# MATLAB L10922: 0 0 0 1 ];\n", - "_matlab('0 0 0 1 ];')\n", - "# MATLAB L10923: \n", - "#\n", - "# MATLAB L10924: x=zeros(4,length(time));\n", - "_matlab('x=zeros(4,length(time));')\n", - "# MATLAB L10925: \n", - "#\n", - "# MATLAB L10926: \n", - "#\n", - "# MATLAB L10927: % Simulate a reach trajectory\n", + "#\n", + "#\n", + "#\n", + "#\n", + "#\n", "# Simulate a reach trajectory\n", - "# MATLAB L10928: % Differs from reference by multiplication by delta instead of division so\n", "# Differs from reference by multiplication by delta instead of division so\n", - "# MATLAB L10929: % that the velocity has units of meters per second\n", "# that the velocity has units of meters per second\n", - "# MATLAB L10930: R=chol(Q);\n", - "_matlab('R=chol(Q);')\n", - "# MATLAB L10931: L=chol(PiT);\n", - "_matlab('L=chol(PiT);')\n", - "# MATLAB L10932: for k=1:length(time)\n", - "_matlab('for k=1:length(time)')\n", - "# MATLAB L10933: if(k==1)\n", - "_matlab('if(k==1)')\n", - "# MATLAB L10934: x(:,k)=x0;\n", - "_matlab('x(:,k)=x0;')\n", - "# MATLAB L10935: else\n", - "_matlab('else')\n", - "# MATLAB L10936: x(:,k)=A*x(:,k-1)+...\n", - "_matlab('x(:,k)=A*x(:,k-1)+...')\n", - "# MATLAB L10937: delta/(2)*(pi/T)^2*cos(pi*time(k)/T)*[0;0;...\n", - "_matlab('delta/(2)*(pi/T)^2*cos(pi*time(k)/T)*[0;0;...')\n", - "# MATLAB L10938: xT(1)-x0(1);xT(2)-x0(2)]; %Reach to target model\n", - "_matlab('xT(1)-x0(1);xT(2)-x0(2)]; %Reach to target model')\n", - "# MATLAB L10939: %x(:,k)=A*x(:,k-1)+R*randn(size(x,1),1); %Random walk model\n", "# x(:,k)=A*x(:,k-1)+R*randn(size(x,1),1); %Random walk model\n", - "# MATLAB L10940: end\n", - "_matlab('end')\n", - "# MATLAB L10941: \n", - "#\n", - "# MATLAB L10942: end\n", - "_matlab('end')\n", - "# MATLAB L10943: xT =x(:,end); % The target generated by the model\n", - "_matlab('xT =x(:,end); % The target generated by the model')\n", - "# MATLAB L10944: yT=xT; % Assume we have observed the actual target position with uncertainty PiT\n", - "_matlab('yT=xT; % Assume we have observed the actual target position with uncertainty PiT')\n", - "# MATLAB L10945: \n", - "#\n", - "# MATLAB L10946: %Define Q according to the dynamic range of the movement above\n", + "#\n", + "#\n", "# Define Q according to the dynamic range of the movement above\n", - "# MATLAB L10947: Q=diag(var(diff(x,[],2),[],2))*100;\n", - "_matlab('Q=diag(var(diff(x,[],2),[],2))*100;')\n", - "# MATLAB L10948: \n", "#\n", - "# MATLAB L10949: % Plot the movement trajectories and the hand path\n", "# Plot the movement trajectories and the hand path\n", - "# MATLAB L10950: scrsz = get(0,'ScreenSize');\n", - "_matlab(\"scrsz = get(0,'ScreenSize');\")\n", - "# MATLAB L10951: fig1=figure('OuterPosition',[scrsz(3)*.1 scrsz(4)*.1 ...\n", "__tracker.new_figure(\"fig1=figure('OuterPosition',[scrsz(3)*.1 scrsz(4)*.1 ...\")\n", - "_matlab(\"fig1=figure('OuterPosition',[scrsz(3)*.1 scrsz(4)*.1 ...\")\n", - "# MATLAB L10952: scrsz(3)*.8 scrsz(4)*.8]);\n", - "_matlab('scrsz(3)*.8 scrsz(4)*.8]);')\n", - "# MATLAB L10953: %Plot The movement path\n", "# Plot The movement path\n", - "# MATLAB L10954: subplot(4,2,[1 3]);\n", "__tracker.annotate('subplot(4,2,[1 3])')\n", - "_matlab('subplot(4,2,[1 3]);')\n", - "# MATLAB L10955: plot(100*x(1,:),100*x(2,:),'k','Linewidth',2);\n", "__tracker.annotate(\"plot(100*x(1,:),100*x(2,:),'k','Linewidth',2)\")\n", - "_matlab(\"plot(100*x(1,:),100*x(2,:),'k','Linewidth',2);\")\n", - "# MATLAB L10956: xlabel('X Position [cm]'); ylabel('Y Position [cm]');\n", "plt.xlabel('X Position [cm]')\n", "plt.ylabel('Y Position [cm]')\n", - "# MATLAB L10957: hx=get(gca,'XLabel'); hy=get(gca,'YLabel');\n", - "_matlab(\"hx=get(gca,'XLabel'); hy=get(gca,'YLabel');\")\n", - "# MATLAB L10958: set([hx, hy],'FontName', 'Arial','FontSize',12,'FontWeight','bold');\n", - "_matlab(\"set([hx, hy],'FontName', 'Arial','FontSize',12,'FontWeight','bold');\")\n", - "# MATLAB L10959: title('Reach Path','FontWeight','bold','Fontsize',14,'FontName','Arial');\n", - "_matlab(\"title('Reach Path','FontWeight','bold','Fontsize',14,'FontName','Arial');\")\n", - "# MATLAB L10960: hold on;\n", - "_matlab('hold on;')\n", - "# MATLAB L10961: axis([sort([100*x0(1)+5, 100*xT(1)-5]), sort([100*x0(2)-5, 100*xT(2)+5])]);\n", - "_matlab('axis([sort([100*x0(1)+5, 100*xT(1)-5]), sort([100*x0(2)-5, 100*xT(2)+5])]);')\n", - "# MATLAB L10962: h1=plot(100*x(1,1),100*x(2,1),'bo','MarkerSize',14);\n", "__tracker.annotate(\"h1=plot(100*x(1,1),100*x(2,1),'bo','MarkerSize',14)\")\n", - "_matlab(\"h1=plot(100*x(1,1),100*x(2,1),'bo','MarkerSize',14);\")\n", - "# MATLAB L10963: h2=plot(100*x(1,end),100*x(2,end),'ro','MarkerSize',14);\n", "__tracker.annotate(\"h2=plot(100*x(1,end),100*x(2,end),'ro','MarkerSize',14)\")\n", - "_matlab(\"h2=plot(100*x(1,end),100*x(2,end),'ro','MarkerSize',14);\")\n", - "# MATLAB L10964: legend([h1 h2],'Start','Finish','Location','NorthEast');\n", - "_matlab(\"legend([h1 h2],'Start','Finish','Location','NorthEast');\")\n", - "# MATLAB L10965: \n", "#\n", - "# MATLAB L10966: \n", "#\n", - "# MATLAB L10967: subplot(4,2,5); h1=plot(time,100*x(1,:),'k','Linewidth',2); hold on;\n", "__tracker.annotate('subplot(4,2,5)')\n", "__tracker.annotate(\"h1=plot(time,100*x(1,:),'k','Linewidth',2)\")\n", - "_matlab(\"subplot(4,2,5); h1=plot(time,100*x(1,:),'k','Linewidth',2); hold on;\")\n", - "# MATLAB L10968: h2=plot(time,100*x(2,:),'k-.','Linewidth',2);\n", "__tracker.annotate(\"h2=plot(time,100*x(2,:),'k-.','Linewidth',2)\")\n", - "_matlab(\"h2=plot(time,100*x(2,:),'k-.','Linewidth',2);\")\n", - "# MATLAB L10969: h_legend=legend([h1,h2],'x','y','Location','NorthEast');\n", - "_matlab(\"h_legend=legend([h1,h2],'x','y','Location','NorthEast');\")\n", - "# MATLAB L10970: set(h_legend,'FontSize',14)\n", - "_matlab(\"set(h_legend,'FontSize',14)\")\n", - "# MATLAB L10971: pos = get(h_legend,'position');\n", - "_matlab(\"pos = get(h_legend,'position');\")\n", - "# MATLAB L10972: set(h_legend, 'position',[pos(1)+.06 pos(2)+.01 pos(3:4)]);\n", - "_matlab(\"set(h_legend, 'position',[pos(1)+.06 pos(2)+.01 pos(3:4)]);\")\n", - "# MATLAB L10973: hx=xlabel('time [s]'); hy=ylabel('Position [cm]');\n", - "_matlab(\"hx=xlabel('time [s]'); hy=ylabel('Position [cm]');\")\n", - "# MATLAB L10974: set([hx, hy],'FontName', 'Arial','FontSize',12,'FontWeight','bold');\n", - "_matlab(\"set([hx, hy],'FontName', 'Arial','FontSize',12,'FontWeight','bold');\")\n", - "# MATLAB L10975: % Plot the velocity profiles\n", "# Plot the velocity profiles\n", - "# MATLAB L10976: \n", "#\n", - "# MATLAB L10977: subplot(4,2,7);\n", "__tracker.annotate('subplot(4,2,7)')\n", - "_matlab('subplot(4,2,7);')\n", - "# MATLAB L10978: h1=plot(time,100*x(3,:),'k','Linewidth',2); hold on;\n", "__tracker.annotate(\"h1=plot(time,100*x(3,:),'k','Linewidth',2)\")\n", - "_matlab(\"h1=plot(time,100*x(3,:),'k','Linewidth',2); hold on;\")\n", - "# MATLAB L10979: h2=plot(time,100*x(4,:),'k-.','Linewidth',2);\n", "__tracker.annotate(\"h2=plot(time,100*x(4,:),'k-.','Linewidth',2)\")\n", - "_matlab(\"h2=plot(time,100*x(4,:),'k-.','Linewidth',2);\")\n", - "# MATLAB L10980: h_legend=legend([h1 h2],'v_x','v_y','Location','NorthEast');\n", - "_matlab(\"h_legend=legend([h1 h2],'v_x','v_y','Location','NorthEast');\")\n", - "# MATLAB L10981: xlabel('time [s]');\n", - "_matlab(\"xlabel('time [s]');\")\n", - "# MATLAB L10982: set(h_legend,'FontSize',14);\n", - "_matlab(\"set(h_legend,'FontSize',14);\")\n", - "# MATLAB L10983: pos = get(h_legend,'position');\n", - "_matlab(\"pos = get(h_legend,'position');\")\n", - "# MATLAB L10984: set(h_legend, 'position',[pos(1)+.06 pos(2)+.01 pos(3:4)]);\n", - "_matlab(\"set(h_legend, 'position',[pos(1)+.06 pos(2)+.01 pos(3:4)]);\")\n", - "# MATLAB L10985: hx=xlabel('time [s]'); hy=ylabel('Velocity [cm/s]');\n", - "_matlab(\"hx=xlabel('time [s]'); hy=ylabel('Velocity [cm/s]');\")\n", - "# MATLAB L10986: set([hx, hy],'FontName', 'Arial','FontSize',12,'FontWeight','bold');\n", - "_matlab(\"set([hx, hy],'FontName', 'Arial','FontSize',12,'FontWeight','bold');\")\n", - "# MATLAB L10987: %\n", - "#\n", - "# MATLAB L10988: \n", - "#\n", - "# MATLAB L10989: gamma=0;\n", + "#\n", + "#\n", "gamma = 0\n", - "# MATLAB L10990: windowTimes=[0, 0.001];\n", - "_matlab('windowTimes=[0, 0.001];')\n", - "# MATLAB L10991: \n", "#\n", - "# MATLAB L10992: \n", "#\n", - "# MATLAB L10993: % Simulate neural responses\n", "# Simulate neural responses\n", - "# MATLAB L10994: % logit(lambda_i*delta) = mu_i + b_x_i*v_x + b_y_i*v_y\n", "# logit(lambda_i*delta) = mu_i + b_x_i*v_x + b_y_i*v_y\n", - "# MATLAB L10995: % logit(lambda_i*delta) = X_i*beta_i;\n", "# logit(lambda_i*delta) = X_i*beta_i;\n", - "# MATLAB L10996: numCells = 20;\n", "numCells = 20\n", - "# MATLAB L10997: bCoeffs=10*(rand(numCells,2)-.5); % b_i = [b_x_i b_y_i] ~ U(-5, 5);\n", - "_matlab('bCoeffs=10*(rand(numCells,2)-.5); % b_i = [b_x_i b_y_i] ~ U(-5, 5);')\n", - "# MATLAB L10998: phiMax = atan2(bCoeffs(:,2),bCoeffs(:,1)); % Maximal firing direction of cell\n", - "_matlab('phiMax = atan2(bCoeffs(:,2),bCoeffs(:,1)); % Maximal firing direction of cell')\n", - "# MATLAB L10999: phiMaxNorm = (phiMax+pi)./(2*pi);\n", - "_matlab('phiMaxNorm = (phiMax+pi)./(2*pi);')\n", - "# MATLAB L11000: meanMu = log(10*delta); % baseline firing rate -10Hz\n", - "_matlab('meanMu = log(10*delta); % baseline firing rate -10Hz')\n", - "# MATLAB L11001: MuCoeffs = meanMu+randn(numCells,1); % mu_i ~ G(meanMu,1)\n", - "_matlab('MuCoeffs = meanMu+randn(numCells,1); % mu_i ~ G(meanMu,1)')\n", - "# MATLAB L11002: \n", - "#\n", - "# MATLAB L11003: dataMat = [ones(length(time),1) x(3,:)' x(4,:)']; % design matrix: X (\n", - "_matlab(\"dataMat = [ones(length(time),1) x(3,:)' x(4,:)']; % design matrix: X (\")\n", - "# MATLAB L11004: coeffs = [MuCoeffs bCoeffs]; % coefficient vector: beta\n", - "_matlab('coeffs = [MuCoeffs bCoeffs]; % coefficient vector: beta')\n", - "# MATLAB L11005: fitType='binomial';\n", - "_matlab(\"fitType='binomial';\")\n", - "# MATLAB L11006: clear nst;\n", + "#\n", "pass\n", - "# MATLAB L11007: for i=1:numCells\n", - "_matlab('for i=1:numCells')\n", - "# MATLAB L11008: tempData = exp(dataMat*coeffs(i,:)');\n", - "_matlab(\"tempData = exp(dataMat*coeffs(i,:)');\")\n", - "# MATLAB L11009: \n", - "#\n", - "# MATLAB L11010: if(strcmp(fitType,'poisson'))\n", - "_matlab(\"if(strcmp(fitType,'poisson'))\")\n", - "# MATLAB L11011: lambdaData = tempData;\n", - "_matlab('lambdaData = tempData;')\n", - "# MATLAB L11012: else\n", - "_matlab('else')\n", - "# MATLAB L11013: lambdaData = tempData./(1+tempData); % Conditional Intensity Function for ith cell\n", - "_matlab('lambdaData = tempData./(1+tempData); % Conditional Intensity Function for ith cell')\n", - "# MATLAB L11014: end\n", - "_matlab('end')\n", - "# MATLAB L11015: lambda{i}=Covariate(time,lambdaData./delta, ...\n", - "_matlab('lambda{i}=Covariate(time,lambdaData./delta, ...')\n", - "# MATLAB L11016: '\\Lambda(t)','time','s','spikes/sec',...\n", - "_matlab(\"'\\\\Lambda(t)','time','s','spikes/sec',...\")\n", - "# MATLAB L11017: {strcat('\\lambda_{',num2str(i),'}')},{{' ''b'' '}});\n", - "_matlab(\"{strcat('\\\\lambda_{',num2str(i),'}')},{{' ''b'' '}});\")\n", - "# MATLAB L11018: lambda{i}=lambda{i}.resample(1/delta);\n", - "_matlab('lambda{i}=lambda{i}.resample(1/delta);')\n", - "# MATLAB L11019: \n", - "#\n", - "# MATLAB L11020: % Generate CIF representation in case we want to use the symbolic\n", + "#\n", + "#\n", "# Generate CIF representation in case we want to use the symbolic\n", - "# MATLAB L11021: % versions of the PPDecodeFilter (i.e. not PPDecodeFilterLinear\n", "# versions of the PPDecodeFilter (i.e. not PPDecodeFilterLinear\n", - "# MATLAB L11022: lambdaCIF{i} = CIF([MuCoeffs(i) 0 0 bCoeffs(i,:)],...\n", - "_matlab('lambdaCIF{i} = CIF([MuCoeffs(i) 0 0 bCoeffs(i,:)],...')\n", - "# MATLAB L11023: {'1','x','y','vx','vy'},{'x','y','vx','vy'},fitType);\n", - "_matlab(\"{'1','x','y','vx','vy'},{'x','y','vx','vy'},fitType);\")\n", - "# MATLAB L11024: % generate one realization for each cell\n", "# generate one realization for each cell\n", - "# MATLAB L11025: tempSpikeColl{i} = CIF.simulateCIFByThinningFromLambda(lambda{i},1); nst{i} = tempSpikeColl{i}.getNST(1); % grab the realization\n", - "_matlab('tempSpikeColl{i} = CIF.simulateCIFByThinningFromLambda(lambda{i},1); nst{i} = tempSpikeColl{i}.getNST(1); % grab the realization')\n", - "# MATLAB L11026: nst{i}.setName(num2str(i)); % give each cell a unique name\n", - "_matlab('nst{i}.setName(num2str(i)); % give each cell a unique name')\n", - "# MATLAB L11027: subplot(4,2,[6 8]);\n", "__tracker.annotate('subplot(4,2,[6 8])')\n", - "_matlab('subplot(4,2,[6 8]);')\n", - "# MATLAB L11028: h2=lambda{i}.plot([],{{' ''k'', ''LineWidth'' ,.5'}});\n", "__tracker.annotate(\"h2=lambda{i}.plot([],{{' ''k'', ''LineWidth'' ,.5'}})\")\n", - "_matlab(\"h2=lambda{i}.plot([],{{' ''k'', ''LineWidth'' ,.5'}});\")\n", - "# MATLAB L11029: legend off; hold all; % Plot the CIF\n", - "_matlab('legend off; hold all; % Plot the CIF')\n", - "# MATLAB L11030: \n", - "#\n", - "# MATLAB L11031: \n", - "#\n", - "# MATLAB L11032: \n", - "#\n", - "# MATLAB L11033: end\n", - "_matlab('end')\n", - "# MATLAB L11034: title('Neural Conditional Intensity Functions','FontWeight',...\n", - "_matlab(\"title('Neural Conditional Intensity Functions','FontWeight',...\")\n", - "# MATLAB L11035: 'bold','Fontsize',14,'FontName','Arial');\n", - "_matlab(\"'bold','Fontsize',14,'FontName','Arial');\")\n", - "# MATLAB L11036: hx=xlabel('time [s]','Interpreter','none');\n", - "_matlab(\"hx=xlabel('time [s]','Interpreter','none');\")\n", - "# MATLAB L11037: hy=ylabel('Firing Rate [spikes/sec]','Interpreter','none');\n", - "_matlab(\"hy=ylabel('Firing Rate [spikes/sec]','Interpreter','none');\")\n", - "# MATLAB L11038: set([hx, hy],'FontName', 'Arial','FontSize',12,'FontWeight','bold');\n", - "_matlab(\"set([hx, hy],'FontName', 'Arial','FontSize',12,'FontWeight','bold');\")\n", - "# MATLAB L11039: spikeColl = nstColl(nst); % Create a neural spike train collection\n", - "_matlab('spikeColl = nstColl(nst); % Create a neural spike train collection')\n", - "# MATLAB L11040: \n", - "#\n", - "# MATLAB L11041: subplot(4,2,[2,4]); spikeColl.plot;\n", + "#\n", + "#\n", + "#\n", + "#\n", "__tracker.annotate('subplot(4,2,[2,4])')\n", "__tracker.annotate('spikeColl.plot')\n", - "_matlab('subplot(4,2,[2,4]); spikeColl.plot;')\n", - "# MATLAB L11042: set(gca,'xtick',[],'xtickLabel',[]);\n", - "_matlab(\"set(gca,'xtick',[],'xtickLabel',[]);\")\n", - "# MATLAB L11043: title('Neural Raster','FontWeight','bold','Fontsize',14,...\n", - "_matlab(\"title('Neural Raster','FontWeight','bold','Fontsize',14,...\")\n", - "# MATLAB L11044: 'FontName','Arial');\n", - "_matlab(\"'FontName','Arial');\")\n", - "# MATLAB L11045: hx=xlabel('time [s]','Interpreter','none');\n", - "_matlab(\"hx=xlabel('time [s]','Interpreter','none');\")\n", - "# MATLAB L11046: hy=ylabel('Cell Number','Interpreter','none');\n", - "_matlab(\"hy=ylabel('Cell Number','Interpreter','none');\")\n", - "# MATLAB L11047: set([hx, hy],'FontName', 'Arial','FontSize',12,'FontWeight','bold');\n", - "_matlab(\"set([hx, hy],'FontName', 'Arial','FontSize',12,'FontWeight','bold');\")\n", - "# MATLAB L11048: \n", - "#\n", - "# MATLAB L11049: % close all;\n", + "#\n", "# close all;\n", - "# MATLAB L11100: close all;\n", "plt.close(\"all\")\n", - "# MATLAB L11101: numExamples=20;\n", "numExamples = 20\n", - "# MATLAB L11102: scrsz = get(0,'ScreenSize');\n", - "_matlab(\"scrsz = get(0,'ScreenSize');\")\n", - "# MATLAB L11103: fig1=figure('OuterPosition',[scrsz(3)*.1 scrsz(4)*.1 ...\n", "__tracker.new_figure(\"fig1=figure('OuterPosition',[scrsz(3)*.1 scrsz(4)*.1 ...\")\n", - "_matlab(\"fig1=figure('OuterPosition',[scrsz(3)*.1 scrsz(4)*.1 ...\")\n", - "# MATLAB L11104: scrsz(3)*.6 scrsz(4)*.9]);\n", - "_matlab('scrsz(3)*.6 scrsz(4)*.9]);')\n", - "# MATLAB L11105: for k=1:numExamples\n", - "_matlab('for k=1:numExamples')\n", - "# MATLAB L11106: bCoeffs=10*(rand(numCells,2)-.5); % b_i = [b_x_i b_y_i] ~ U(-5, 5);\n", - "_matlab('bCoeffs=10*(rand(numCells,2)-.5); % b_i = [b_x_i b_y_i] ~ U(-5, 5);')\n", - "# MATLAB L11107: phiMax = atan2(bCoeffs(:,2),bCoeffs(:,1)); % Maximal firing direction of cell\n", - "_matlab('phiMax = atan2(bCoeffs(:,2),bCoeffs(:,1)); % Maximal firing direction of cell')\n", - "# MATLAB L11108: phiMaxNorm = (phiMax+pi)./(2*pi);\n", - "_matlab('phiMaxNorm = (phiMax+pi)./(2*pi);')\n", - "# MATLAB L11109: meanMu = log(10*delta); % baseline firing rate\n", - "_matlab('meanMu = log(10*delta); % baseline firing rate')\n", - "# MATLAB L11110: MuCoeffs = meanMu+randn(numCells,1); % mu_i ~ G(meanMu,1)\n", - "_matlab('MuCoeffs = meanMu+randn(numCells,1); % mu_i ~ G(meanMu,1)')\n", - "# MATLAB L11111: \n", - "#\n", - "# MATLAB L11112: dataMat = [ones(length(time),1) x(3,:)' x(4,:)']; % design matrix: X (\n", - "_matlab(\"dataMat = [ones(length(time),1) x(3,:)' x(4,:)']; % design matrix: X (\")\n", - "# MATLAB L11113: coeffs = [MuCoeffs bCoeffs]; % coefficient vector: beta\n", - "_matlab('coeffs = [MuCoeffs bCoeffs]; % coefficient vector: beta')\n", - "# MATLAB L11114: fitType='binomial';\n", - "_matlab(\"fitType='binomial';\")\n", - "# MATLAB L11115: clear nst lambda;\n", + "#\n", "pass\n", - "# MATLAB L11116: \n", - "#\n", - "# MATLAB L11117: \n", - "#\n", - "# MATLAB L11118: for i=1:numCells\n", - "_matlab('for i=1:numCells')\n", - "# MATLAB L11119: tempData = exp(dataMat*coeffs(i,:)');\n", - "_matlab(\"tempData = exp(dataMat*coeffs(i,:)');\")\n", - "# MATLAB L11120: if(strcmp(fitType,'poisson'))\n", - "_matlab(\"if(strcmp(fitType,'poisson'))\")\n", - "# MATLAB L11121: lambdaData = tempData;\n", - "_matlab('lambdaData = tempData;')\n", - "# MATLAB L11122: else\n", - "_matlab('else')\n", - "# MATLAB L11123: % Conditional Intensity Function for ith cell\n", + "#\n", + "#\n", "# Conditional Intensity Function for ith cell\n", - "# MATLAB L11124: lambdaData = tempData./(1+tempData);\n", - "_matlab('lambdaData = tempData./(1+tempData);')\n", - "# MATLAB L11125: end\n", - "_matlab('end')\n", - "# MATLAB L11126: lambda{i}=Covariate(time,lambdaData./delta, ...\n", - "_matlab('lambda{i}=Covariate(time,lambdaData./delta, ...')\n", - "# MATLAB L11127: '\\Lambda(t)','time','s','spikes/sec',...\n", - "_matlab(\"'\\\\Lambda(t)','time','s','spikes/sec',...\")\n", - "# MATLAB L11128: {strcat('\\lambda_{',num2str(i),'}')},{{' ''b'' '}});\n", - "_matlab(\"{strcat('\\\\lambda_{',num2str(i),'}')},{{' ''b'' '}});\")\n", - "# MATLAB L11129: lambda{i}=lambda{i}.resample(1/delta);\n", - "_matlab('lambda{i}=lambda{i}.resample(1/delta);')\n", - "# MATLAB L11130: \n", - "#\n", - "# MATLAB L11131: % Generate CIF representation in case we want to use the symbolic\n", + "#\n", "# Generate CIF representation in case we want to use the symbolic\n", - "# MATLAB L11132: % versions of the PPDecodeFilter (i.e. not PPDecodeFilterLinear\n", "# versions of the PPDecodeFilter (i.e. not PPDecodeFilterLinear\n", - "# MATLAB L11133: % generate one realization for each cell\n", "# generate one realization for each cell\n", - "# MATLAB L11134: tempSpikeColl{i} = CIF.simulateCIFByThinningFromLambda(lambda{i},1);\n", - "_matlab('tempSpikeColl{i} = CIF.simulateCIFByThinningFromLambda(lambda{i},1);')\n", - "# MATLAB L11135: nst{i} = tempSpikeColl{i}.getNST(1); % grab the realization\n", - "_matlab('nst{i} = tempSpikeColl{i}.getNST(1); % grab the realization')\n", - "# MATLAB L11136: nst{i}.setName(num2str(i)); % give each cell a unique name\n", - "_matlab('nst{i}.setName(num2str(i)); % give each cell a unique name')\n", - "# MATLAB L11137: \n", - "#\n", - "# MATLAB L11138: end\n", - "_matlab('end')\n", - "# MATLAB L11139: \n", - "#\n", - "# MATLAB L11140: % Plot the neural raster across all the cells\n", + "#\n", + "#\n", "# Plot the neural raster across all the cells\n", - "# MATLAB L11141: spikeColl = nstColl(nst); % Create a neural spike train collection\n", - "_matlab('spikeColl = nstColl(nst); % Create a neural spike train collection')\n", - "# MATLAB L11142: \n", "#\n", - "# MATLAB L11143: % Based on the temporal resolution defined by delta, bin the data and get\n", "# Based on the temporal resolution defined by delta, bin the data and get\n", - "# MATLAB L11144: % a matrix representation of the neural firing\n", "# a matrix representation of the neural firing\n", - "# MATLAB L11145: dN=spikeColl.dataToMatrix';\n", - "_matlab(\"dN=spikeColl.dataToMatrix';\")\n", - "# MATLAB L11146: dN(dN>1)=1; % more than one spike per bin will be treated as one spike. In\n", - "_matlab('dN(dN>1)=1; % more than one spike per bin will be treated as one spike. In')\n", - "# MATLAB L11147: % general we should pick delta small enough so that there is\n", "# general we should pick delta small enough so that there is\n", - "# MATLAB L11148: % only one spike per bin\n", "# only one spike per bin\n", - "# MATLAB L11149: \n", "#\n", - "# MATLAB L11150: [C,N] = size(dN); % N time samples, C cells\n", - "_matlab('[C,N] = size(dN); % N time samples, C cells')\n", - "# MATLAB L11151: \n", "#\n", - "# MATLAB L11152: beta=[zeros(2,numCells); bCoeffs'];\n", - "_matlab(\"beta=[zeros(2,numCells); bCoeffs'];\")\n", - "# MATLAB L11153: \n", "#\n", - "# MATLAB L11154: \n", "#\n", - "# MATLAB L11155: %Use the Goal Directed Movement Version of the Point Process adaptive\n", "# Use the Goal Directed Movement Version of the Point Process adaptive\n", - "# MATLAB L11156: %Filter\n", "# Filter\n", - "# MATLAB L11157: [x_p, W_p, x_u, W_u,x_uT,W_uT,x_pT,W_pT] = ...\n", - "_matlab('[x_p, W_p, x_u, W_u,x_uT,W_uT,x_pT,W_pT] = ...')\n", - "# MATLAB L11158: DecodingAlgorithms.PPDecodeFilterLinear(A, Q, dN,...\n", - "_matlab('DecodingAlgorithms.PPDecodeFilterLinear(A, Q, dN,...')\n", - "# MATLAB L11159: MuCoeffs,beta,fitType,delta,gamma,windowTimes,x0, Pi0, yT,PiT,0);\n", - "_matlab('MuCoeffs,beta,fitType,delta,gamma,windowTimes,x0, Pi0, yT,PiT,0);')\n", - "# MATLAB L11160: \n", - "#\n", - "# MATLAB L11161: %Use the Free Movement Version of the Point Process adaptive\n", + "#\n", "# Use the Free Movement Version of the Point Process adaptive\n", - "# MATLAB L11162: %Filter\n", "# Filter\n", - "# MATLAB L11163: [x_pf, W_pf, x_uf, W_uf] = ...\n", - "_matlab('[x_pf, W_pf, x_uf, W_uf] = ...')\n", - "# MATLAB L11164: DecodingAlgorithms.PPDecodeFilterLinear(A, Q, dN,...\n", - "_matlab('DecodingAlgorithms.PPDecodeFilterLinear(A, Q, dN,...')\n", - "# MATLAB L11165: MuCoeffs,beta,fitType,delta,gamma,windowTimes,x0);\n", - "_matlab('MuCoeffs,beta,fitType,delta,gamma,windowTimes,x0);')\n", - "# MATLAB L11166: \n", - "#\n", - "# MATLAB L11167: \n", - "#\n", - "# MATLAB L11168: if(k==numExamples)\n", - "_matlab('if(k==numExamples)')\n", - "# MATLAB L11169: subplot(4,2,1:4);h1=plot(100*x(1,:),100*x(2,:),'k','LineWidth',3);\n", + "#\n", + "#\n", "__tracker.annotate('subplot(4,2,1:4)')\n", "__tracker.annotate(\"h1=plot(100*x(1,:),100*x(2,:),'k','LineWidth',3)\")\n", - "_matlab(\"subplot(4,2,1:4);h1=plot(100*x(1,:),100*x(2,:),'k','LineWidth',3);\")\n", - "# MATLAB L11170: hold on;\n", - "_matlab('hold on;')\n", - "# MATLAB L11171: axis([sort([100*x0(1)+5, 100*xT(1)-5]), ...\n", - "_matlab('axis([sort([100*x0(1)+5, 100*xT(1)-5]), ...')\n", - "# MATLAB L11172: sort([100*x0(2)-5, 100*xT(2)+5])]);\n", - "_matlab('sort([100*x0(2)-5, 100*xT(2)+5])]);')\n", - "# MATLAB L11173: title('Estimated vs. Actual Reach Paths',...\n", - "_matlab(\"title('Estimated vs. Actual Reach Paths',...\")\n", - "# MATLAB L11174: 'FontWeight','bold','Fontsize',12,'FontName','Arial');\n", - "_matlab(\"'FontWeight','bold','Fontsize',12,'FontName','Arial');\")\n", - "# MATLAB L11175: end\n", - "_matlab('end')\n", - "# MATLAB L11176: subplot(4,2,1:4);h2=plot(100*x_u(1,:)',100*x_u(2,:)','b'); hold all;\n", "__tracker.annotate('subplot(4,2,1:4)')\n", "__tracker.annotate(\"h2=plot(100*x_u(1,:)',100*x_u(2,:)','b')\")\n", - "_matlab(\"subplot(4,2,1:4);h2=plot(100*x_u(1,:)',100*x_u(2,:)','b'); hold all;\")\n", - "# MATLAB L11177: subplot(4,2,1:4);h3=plot(100*x_uf(1,:)',100*x_uf(2,:)','g');\n", "__tracker.annotate('subplot(4,2,1:4)')\n", "__tracker.annotate(\"h3=plot(100*x_uf(1,:)',100*x_uf(2,:)','g')\")\n", - "_matlab(\"subplot(4,2,1:4);h3=plot(100*x_uf(1,:)',100*x_uf(2,:)','g');\")\n", - "# MATLAB L11178: hx=xlabel('x [cm]'); hy=ylabel('y [cm]');\n", - "_matlab(\"hx=xlabel('x [cm]'); hy=ylabel('y [cm]');\")\n", - "# MATLAB L11179: set([hx, hy],'FontName', 'Arial','FontSize',10,'FontWeight','bold');\n", - "_matlab(\"set([hx, hy],'FontName', 'Arial','FontSize',10,'FontWeight','bold');\")\n", - "# MATLAB L11180: h1=plot(100*x0(1),100*x0(2),'bo','MarkerSize',10); hold on;\n", "__tracker.annotate(\"h1=plot(100*x0(1),100*x0(2),'bo','MarkerSize',10)\")\n", - "_matlab(\"h1=plot(100*x0(1),100*x0(2),'bo','MarkerSize',10); hold on;\")\n", - "# MATLAB L11181: h2=plot(100*xT(1),100*xT(2),'ro','MarkerSize',10);\n", "__tracker.annotate(\"h2=plot(100*xT(1),100*xT(2),'ro','MarkerSize',10)\")\n", - "_matlab(\"h2=plot(100*xT(1),100*xT(2),'ro','MarkerSize',10);\")\n", - "# MATLAB L11182: legend([h1 h2],'Start','Finish','Location','NorthEast');\n", - "_matlab(\"legend([h1 h2],'Start','Finish','Location','NorthEast');\")\n", - "# MATLAB L11183: \n", "#\n", - "# MATLAB L11184: \n", "#\n", - "# MATLAB L11185: subplot(4,2,5);\n", "__tracker.annotate('subplot(4,2,5)')\n", - "_matlab('subplot(4,2,5);')\n", - "# MATLAB L11186: h1=plot(time,100*x(1,:),'k','LineWidth',3); hold on;\n", "__tracker.annotate(\"h1=plot(time,100*x(1,:),'k','LineWidth',3)\")\n", - "_matlab(\"h1=plot(time,100*x(1,:),'k','LineWidth',3); hold on;\")\n", - "# MATLAB L11187: h2=plot(time,100*x_u(1,:)','b');\n", "__tracker.annotate(\"h2=plot(time,100*x_u(1,:)','b');\")\n", - "_matlab(\"h2=plot(time,100*x_u(1,:)','b');\")\n", - "# MATLAB L11188: h3=plot(time,100*x_uf(1,:)','g');\n", "__tracker.annotate(\"h3=plot(time,100*x_uf(1,:)','g');\")\n", - "_matlab(\"h3=plot(time,100*x_uf(1,:)','g');\")\n", - "# MATLAB L11189: hy=ylabel('x(t) [cm]'); hx=xlabel('time [s]');\n", - "_matlab(\"hy=ylabel('x(t) [cm]'); hx=xlabel('time [s]');\")\n", - "# MATLAB L11190: set(gca,'xtick',[],'xtickLabel',[]);\n", - "_matlab(\"set(gca,'xtick',[],'xtickLabel',[]);\")\n", - "# MATLAB L11191: set([hx, hy],'FontName', 'Arial','FontSize',10,'FontWeight','bold');\n", - "_matlab(\"set([hx, hy],'FontName', 'Arial','FontSize',10,'FontWeight','bold');\")\n", - "# MATLAB L11192: title('X Position','FontWeight','bold','Fontsize',12,'FontName','Arial');\n", - "_matlab(\"title('X Position','FontWeight','bold','Fontsize',12,'FontName','Arial');\")\n", - "# MATLAB L11193: \n", - "#\n", - "# MATLAB L11194: subplot(4,2,6);\n", + "#\n", "__tracker.annotate('subplot(4,2,6)')\n", - "_matlab('subplot(4,2,6);')\n", - "# MATLAB L11195: h1=plot(time,100*x(2,:),'k','LineWidth',3); hold on;\n", "__tracker.annotate(\"h1=plot(time,100*x(2,:),'k','LineWidth',3)\")\n", - "_matlab(\"h1=plot(time,100*x(2,:),'k','LineWidth',3); hold on;\")\n", - "# MATLAB L11196: h2=plot(time,100*x_u(2,:)','b');\n", "__tracker.annotate(\"h2=plot(time,100*x_u(2,:)','b');\")\n", - "_matlab(\"h2=plot(time,100*x_u(2,:)','b');\")\n", - "# MATLAB L11197: h3=plot(time,100*x_uf(2,:)','g');\n", "__tracker.annotate(\"h3=plot(time,100*x_uf(2,:)','g');\")\n", - "_matlab(\"h3=plot(time,100*x_uf(2,:)','g');\")\n", - "# MATLAB L11198: h_legend=legend([h1(1) h2(1) h3(1)],'Actual','PPAF+Goal',...\n", - "_matlab(\"h_legend=legend([h1(1) h2(1) h3(1)],'Actual','PPAF+Goal',...\")\n", - "# MATLAB L11199: 'PPAF','Location','SouthEast');\n", - "_matlab(\"'PPAF','Location','SouthEast');\")\n", - "# MATLAB L11200: hy=ylabel('y(t) [cm]'); hx=xlabel('time [s]');\n", - "_matlab(\"hy=ylabel('y(t) [cm]'); hx=xlabel('time [s]');\")\n", - "# MATLAB L11201: set(gca,'xtick',[],'xtickLabel',[]);\n", - "_matlab(\"set(gca,'xtick',[],'xtickLabel',[]);\")\n", - "# MATLAB L11202: set([hx, hy],'FontName', 'Arial','FontSize',10,'FontWeight','bold');\n", - "_matlab(\"set([hx, hy],'FontName', 'Arial','FontSize',10,'FontWeight','bold');\")\n", - "# MATLAB L11203: title('Y Position','FontWeight','bold','Fontsize',12,'FontName','Arial');\n", - "_matlab(\"title('Y Position','FontWeight','bold','Fontsize',12,'FontName','Arial');\")\n", - "# MATLAB L11204: set(h_legend,'FontSize',10)\n", - "_matlab(\"set(h_legend,'FontSize',10)\")\n", - "# MATLAB L11205: pos = get(h_legend,'position');\n", - "_matlab(\"pos = get(h_legend,'position');\")\n", - "# MATLAB L11206: set(h_legend, 'position',[pos(1)-.63 pos(2)+.23 pos(3:4)]);\n", - "_matlab(\"set(h_legend, 'position',[pos(1)-.63 pos(2)+.23 pos(3:4)]);\")\n", - "# MATLAB L11207: \n", - "#\n", - "# MATLAB L11208: subplot(4,2,7);\n", + "#\n", "__tracker.annotate('subplot(4,2,7)')\n", - "_matlab('subplot(4,2,7);')\n", - "# MATLAB L11209: h1=plot(time,100*x(3,:),'k','LineWidth',3); hold on;\n", "__tracker.annotate(\"h1=plot(time,100*x(3,:),'k','LineWidth',3)\")\n", - "_matlab(\"h1=plot(time,100*x(3,:),'k','LineWidth',3); hold on;\")\n", - "# MATLAB L11210: h2=plot(time,100*x_u(3,:)','b');\n", "__tracker.annotate(\"h2=plot(time,100*x_u(3,:)','b');\")\n", - "_matlab(\"h2=plot(time,100*x_u(3,:)','b');\")\n", - "# MATLAB L11211: h3=plot(time,100*x_uf(3,:)','g');\n", "__tracker.annotate(\"h3=plot(time,100*x_uf(3,:)','g');\")\n", - "_matlab(\"h3=plot(time,100*x_uf(3,:)','g');\")\n", - "# MATLAB L11212: hy=ylabel('v_{x}(t) [cm/s]'); hx=xlabel('time [s]');\n", - "_matlab(\"hy=ylabel('v_{x}(t) [cm/s]'); hx=xlabel('time [s]');\")\n", - "# MATLAB L11213: set([hx, hy],'FontName', 'Arial','FontSize',10,'FontWeight','bold');\n", - "_matlab(\"set([hx, hy],'FontName', 'Arial','FontSize',10,'FontWeight','bold');\")\n", - "# MATLAB L11214: title('X Velocity','FontWeight','bold','Fontsize',12,'FontName','Arial');\n", - "_matlab(\"title('X Velocity','FontWeight','bold','Fontsize',12,'FontName','Arial');\")\n", - "# MATLAB L11215: \n", - "#\n", - "# MATLAB L11216: subplot(4,2,8);\n", + "#\n", "__tracker.annotate('subplot(4,2,8)')\n", - "_matlab('subplot(4,2,8);')\n", - "# MATLAB L11217: h1=plot(time,100*x(4,:),'k','LineWidth',3); hold on;\n", "__tracker.annotate(\"h1=plot(time,100*x(4,:),'k','LineWidth',3)\")\n", - "_matlab(\"h1=plot(time,100*x(4,:),'k','LineWidth',3); hold on;\")\n", - "# MATLAB L11218: h2=plot(time,100*x_u(4,:)','b');\n", "__tracker.annotate(\"h2=plot(time,100*x_u(4,:)','b');\")\n", - "_matlab(\"h2=plot(time,100*x_u(4,:)','b');\")\n", - "# MATLAB L11219: h3=plot(time,100*x_uf(4,:)','g');\n", "__tracker.annotate(\"h3=plot(time,100*x_uf(4,:)','g');\")\n", - "_matlab(\"h3=plot(time,100*x_uf(4,:)','g');\")\n", - "# MATLAB L11220: hy=ylabel('v_{y}(t) [cm/s]'); hx=xlabel('time [s]');\n", - "_matlab(\"hy=ylabel('v_{y}(t) [cm/s]'); hx=xlabel('time [s]');\")\n", - "# MATLAB L11221: set([hx, hy],'FontName', 'Arial','FontSize',10,'FontWeight','bold');\n", - "_matlab(\"set([hx, hy],'FontName', 'Arial','FontSize',10,'FontWeight','bold');\")\n", - "# MATLAB L11222: title('Y Velocity','FontWeight','bold','Fontsize',12,'FontName','Arial');\n", - "_matlab(\"title('Y Velocity','FontWeight','bold','Fontsize',12,'FontName','Arial');\")\n", - "# MATLAB L11223: \n", - "#\n", - "# MATLAB L11224: \n", - "#\n", - "# MATLAB L11225: end\n", - "_matlab('end')\n", - "# MATLAB L11226: \n", - "#\n", - "# MATLAB L11227: % close all;\n", - "# close all;\n" + "#\n", + "#\n", + "#\n", + "# close all;" ] }, { @@ -3752,8 +983,7 @@ "outputs": [], "source": [ "# SECTION 27: Experiment 6 - Hybrid Point Process Filter Example\n", - "# MATLAB L11400: % NOTE THIS EXAMPLE WAS NOT INCLUDED IN THE FINAL VERSION OF THE PAPER This example is based on an implementation of the Hybrid Point Process filter described in General-purpose filter design for neural prosthetic devices by Srinivasan L, Eden UT, Mitter SK, Brown EN in J Neurophysiol. 2007 Oct, 98(4):2456-75.\n", - "# NOTE THIS EXAMPLE WAS NOT INCLUDED IN THE FINAL VERSION OF THE PAPER This example is based on an implementation of the Hybrid Point Process filter described in General-purpose filter design for neural prosthetic devices by Srinivasan L, Eden UT, Mitter SK, Brown EN in J Neurophysiol. 2007 Oct, 98(4):2456-75.\n" + "# NOTE THIS EXAMPLE WAS NOT INCLUDED IN THE FINAL VERSION OF THE PAPER This example is based on an implementation of the Hybrid Point Process filter described in General-purpose filter design for neural prosthetic devices by Srinivasan L, Eden UT, Mitter SK, Brown EN in J Neurophysiol. 2007 Oct, 98(4):2456-75." ] }, { @@ -3764,14 +994,10 @@ "outputs": [], "source": [ "# SECTION 28: Problem Statement\n", - "# MATLAB L11600: % Suppose that a process of interest can be modeled as consisting of several discrete states where the evolution of the system under each state can be modeled as a linear state space model. The observations of both the state and the continuous dynamics are not direct, but rather observed through how the continuous and discrete states affect the firing of a population of neurons. The goal of the hybrid filter is to estimate both the continuous dynamics and the underlying system state from only the neural population firing (point process observations).\n", "# Suppose that a process of interest can be modeled as consisting of several discrete states where the evolution of the system under each state can be modeled as a linear state space model. The observations of both the state and the continuous dynamics are not direct, but rather observed through how the continuous and discrete states affect the firing of a population of neurons. The goal of the hybrid filter is to estimate both the continuous dynamics and the underlying system state from only the neural population firing (point process observations).\n", - "# MATLAB L11700: % To illustrate the use of this filter, we consider a reaching task. We assume two underlying system states s=1=\"Not Moving\"=NM and s=2=\"Moving\"=M. Under the \"Not Moving\" the position of the arm remain constant, whereas in the \"Moving\" state, the position and velocities evolved based on the arm acceleration that is modeled as a gaussian white noise process.\n", "# To illustrate the use of this filter, we consider a reaching task. We assume two underlying system states s=1=\"Not Moving\"=NM and s=2=\"Moving\"=M. Under the \"Not Moving\" the position of the arm remain constant, whereas in the \"Moving\" state, the position and velocities evolved based on the arm acceleration that is modeled as a gaussian white noise process.\n", - "# MATLAB L11800: % Under both the \"Moving\" and \"Not Moving\" states, the arm evolution state vector is\n", "# Under both the \"Moving\" and \"Not Moving\" states, the arm evolution state vector is\n", - "# MATLAB L11900: % {\\bf{x}} = {[x,y,{v_x},{v_y},{a_x},{a_y}]^T}\n", - "# {\\bf{x}} = {[x,y,{v_x},{v_y},{a_x},{a_y}]^T}\n" + "# {\\bf{x}} = {[x,y,{v_x},{v_y},{a_x},{a_y}]^T}" ] }, { @@ -3782,333 +1008,57 @@ "outputs": [], "source": [ "# SECTION 29: Generated Simulated Arm Reach\n", - "# MATLAB L12100: clear all;\n", "pass\n", - "# MATLAB L12101: [dataDir,mEPSCDir,explicitStimulusDir,psthDir,placeCellDataDir] = ...\n", - "_matlab('[dataDir,mEPSCDir,explicitStimulusDir,psthDir,placeCellDataDir] = ...')\n", - "# MATLAB L12102: getPaperDataDirs();\n", - "_matlab('getPaperDataDirs();')\n", - "# MATLAB L12103: close all;\n", "plt.close(\"all\")\n", - "# MATLAB L12104: delta=0.001;\n", "delta = 0.001\n", - "# MATLAB L12105: Tmax=2;\n", "Tmax = 2\n", - "# MATLAB L12106: time=0:delta:Tmax;\n", - "_matlab('time=0:delta:Tmax;')\n", - "# MATLAB L12107: A{2} = [1 0 delta 0 delta^2/2 0;\n", - "_matlab('A{2} = [1 0 delta 0 delta^2/2 0;')\n", - "# MATLAB L12108: 0 1 0 delta 0 delta^2/2;\n", - "_matlab('0 1 0 delta 0 delta^2/2;')\n", - "# MATLAB L12109: 0 0 1 0 delta 0;\n", - "_matlab('0 0 1 0 delta 0;')\n", - "# MATLAB L12110: 0 0 0 1 0 delta;\n", - "_matlab('0 0 0 1 0 delta;')\n", - "# MATLAB L12111: 0 0 0 0 1 0;\n", - "_matlab('0 0 0 0 1 0;')\n", - "# MATLAB L12112: 0 0 0 0 0 1];\n", - "_matlab('0 0 0 0 0 1];')\n", - "# MATLAB L12113: \n", - "#\n", - "# MATLAB L12114: A{1} = [1 0 0 0 0 0;\n", - "_matlab('A{1} = [1 0 0 0 0 0;')\n", - "# MATLAB L12115: 0 1 0 0 0 0;\n", - "_matlab('0 1 0 0 0 0;')\n", - "# MATLAB L12116: 0 0 0 0 0 0;\n", - "_matlab('0 0 0 0 0 0;')\n", - "# MATLAB L12117: 0 0 0 0 0 0;\n", - "_matlab('0 0 0 0 0 0;')\n", - "# MATLAB L12118: 0 0 0 0 0 0;\n", - "_matlab('0 0 0 0 0 0;')\n", - "# MATLAB L12119: 0 0 0 0 0 0];\n", - "_matlab('0 0 0 0 0 0];')\n", - "# MATLAB L12120: A{1} = [1 0;\n", - "_matlab('A{1} = [1 0;')\n", - "# MATLAB L12121: 0 1];\n", - "_matlab('0 1];')\n", - "# MATLAB L12122: \n", - "#\n", - "# MATLAB L12123: Px0{2} =1e-6*eye(6,6);\n", - "_matlab('Px0{2} =1e-6*eye(6,6);')\n", - "# MATLAB L12124: Px0{1} =1e-6*eye(2,2);\n", - "_matlab('Px0{1} =1e-6*eye(2,2);')\n", - "# MATLAB L12125: \n", - "#\n", - "# MATLAB L12126: minCovVal = 1e-12;\n", + "#\n", + "#\n", + "#\n", "minCovVal = 1e-12\n", - "# MATLAB L12127: covVal = 1e-3;\n", "covVal = 1e-3\n", - "# MATLAB L12128: \n", - "#\n", - "# MATLAB L12129: \n", - "#\n", - "# MATLAB L12130: \n", - "#\n", - "# MATLAB L12131: Q{2}=[minCovVal 0 0 0 0 0;\n", - "_matlab('Q{2}=[minCovVal 0 0 0 0 0;')\n", - "# MATLAB L12132: 0 minCovVal 0 0 0 0;\n", - "_matlab('0 minCovVal 0 0 0 0;')\n", - "# MATLAB L12133: 0 0 minCovVal 0 0 0;\n", - "_matlab('0 0 minCovVal 0 0 0;')\n", - "# MATLAB L12134: 0 0 0 minCovVal 0 0;\n", - "_matlab('0 0 0 minCovVal 0 0;')\n", - "# MATLAB L12135: 0 0 0 0 covVal 0;\n", - "_matlab('0 0 0 0 covVal 0;')\n", - "# MATLAB L12136: 0 0 0 0 0 covVal];\n", - "_matlab('0 0 0 0 0 covVal];')\n", - "# MATLAB L12137: \n", - "#\n", - "# MATLAB L12138: Q{1}=minCovVal*eye(2,2);\n", - "_matlab('Q{1}=minCovVal*eye(2,2);')\n", - "# MATLAB L12139: \n", - "#\n", - "# MATLAB L12140: mstate = zeros(1,length(time));\n", - "_matlab('mstate = zeros(1,length(time));')\n", - "# MATLAB L12141: ind{1}=1:2;\n", - "_matlab('ind{1}=1:2;')\n", - "# MATLAB L12142: ind{2}=1:6;\n", - "_matlab('ind{2}=1:6;')\n", - "# MATLAB L12143: \n", - "#\n", - "# MATLAB L12144: % Acceleration model\n", + "#\n", + "#\n", + "#\n", + "#\n", + "#\n", + "#\n", "# Acceleration model\n", - "# MATLAB L12145: X=zeros(max([size(A{1},1),size(A{2},1)]),length(time));\n", - "_matlab('X=zeros(max([size(A{1},1),size(A{2},1)]),length(time));')\n", - "# MATLAB L12146: p_ij = [.998 .002;\n", - "_matlab('p_ij = [.998 .002;')\n", - "# MATLAB L12147: .001 .999];\n", - "_matlab('.001 .999];')\n", - "# MATLAB L12148: \n", - "#\n", - "# MATLAB L12149: for i = 1:length(time)\n", - "_matlab('for i = 1:length(time)')\n", - "# MATLAB L12150: \n", - "#\n", - "# MATLAB L12151: if(i==1)\n", - "_matlab('if(i==1)')\n", - "# MATLAB L12152: mstate(i) = 1;\n", - "_matlab('mstate(i) = 1;')\n", - "# MATLAB L12153: else\n", - "_matlab('else')\n", - "# MATLAB L12154: if(rand(1,1)1)=1; %Avoid more than 1 spike per bin.\n", - "_matlab('dN(dN>1)=1; %Avoid more than 1 spike per bin.')\n", - "# MATLAB L12754: \n", - "#\n", - "# MATLAB L12755: % Starting states are equally probable\n", + "#\n", "# Starting states are equally probable\n", - "# MATLAB L12756: Mu0=.5*ones(size(p_ij,1),1);\n", - "_matlab('Mu0=.5*ones(size(p_ij,1),1);')\n", - "# MATLAB L12757: clear x0 yT clear Pi0 PiT;\n", "pass\n", - "# MATLAB L12758: x0{1} = X(ind{1},1);\n", - "_matlab('x0{1} = X(ind{1},1);')\n", - "# MATLAB L12759: yT{1} = X(ind{1},end);\n", - "_matlab('yT{1} = X(ind{1},end);')\n", - "# MATLAB L12760: Pi0 = Px0;\n", - "_matlab('Pi0 = Px0;')\n", - "# MATLAB L12761: PiT{1} = 1e-9*eye(size(x0{1},1),size(x0{1},1));\n", - "_matlab('PiT{1} = 1e-9*eye(size(x0{1},1),size(x0{1},1));')\n", - "# MATLAB L12762: \n", - "#\n", - "# MATLAB L12763: x0{2} = X(ind{2},1);\n", - "_matlab('x0{2} = X(ind{2},1);')\n", - "# MATLAB L12764: yT{2} = X(ind{2},end);\n", - "_matlab('yT{2} = X(ind{2},end);')\n", - "# MATLAB L12765: PiT{2} = 1e-9*eye(size(x0{2},1),size(x0{2},1));\n", - "_matlab('PiT{2} = 1e-9*eye(size(x0{2},1),size(x0{2},1));')\n", - "# MATLAB L12766: \n", - "#\n", - "# MATLAB L12767: \n", - "#\n", - "# MATLAB L12768: % Run the Hybrid Point Process Filter\n", + "#\n", + "#\n", + "#\n", "# Run the Hybrid Point Process Filter\n", - "# MATLAB L12769: [S_est, X_est, W_est, MU_est, X_s, W_s,pNGivenS]=...\n", - "_matlab('[S_est, X_est, W_est, MU_est, X_s, W_s,pNGivenS]=...')\n", - "# MATLAB L12770: DecodingAlgorithms.PPHybridFilterLinear(A, Q, p_ij,Mu0, dN',...\n", - "_matlab(\"DecodingAlgorithms.PPHybridFilterLinear(A, Q, p_ij,Mu0, dN',...\")\n", - "# MATLAB L12771: coeffs(:,1),coeffs(:,2:end)',fitType,delta,[],[],x0,Pi0, yT,PiT);\n", - "_matlab(\"coeffs(:,1),coeffs(:,2:end)',fitType,delta,[],[],x0,Pi0, yT,PiT);\")\n", - "# MATLAB L12772: [S_estNT, X_estNT, W_estNT, MU_estNT, X_sNT, W_sNT,pNGivenSNT]=...\n", - "_matlab('[S_estNT, X_estNT, W_estNT, MU_estNT, X_sNT, W_sNT,pNGivenSNT]=...')\n", - "# MATLAB L12773: DecodingAlgorithms.PPHybridFilterLinear(A, Q, p_ij,Mu0, dN',...\n", - "_matlab(\"DecodingAlgorithms.PPHybridFilterLinear(A, Q, p_ij,Mu0, dN',...\")\n", - "# MATLAB L12774: coeffs(:,1),coeffs(:,2:end)',fitType,delta,[],[],x0,Pi0);\n", - "_matlab(\"coeffs(:,1),coeffs(:,2:end)',fitType,delta,[],[],x0,Pi0);\")\n", - "# MATLAB L12775: \n", - "#\n", - "# MATLAB L12776: %Store the results for computing relevant statistics later\n", + "#\n", "# Store the results for computing relevant statistics later\n", - "# MATLAB L12777: X_estAll(:,:,n) = X_est;\n", - "_matlab('X_estAll(:,:,n) = X_est;')\n", - "# MATLAB L12778: X_estNTAll(:,:,n) = X_estNT;\n", - "_matlab('X_estNTAll(:,:,n) = X_estNT;')\n", - "# MATLAB L12779: S_estAll(n,:)=S_est;\n", - "_matlab('S_estAll(n,:)=S_est;')\n", - "# MATLAB L12780: S_estNTAll(n,:)=S_estNT;\n", - "_matlab('S_estNTAll(n,:)=S_estNT;')\n", - "# MATLAB L12781: MU_estAll(:,:,n)=MU_est;\n", - "_matlab('MU_estAll(:,:,n)=MU_est;')\n", - "# MATLAB L12782: MU_estNTAll(:,:,n) = MU_estNT;\n", - "_matlab('MU_estNTAll(:,:,n) = MU_estNT;')\n", - "# MATLAB L12783: \n", - "#\n", - "# MATLAB L12784: \n", - "#\n", - "# MATLAB L12785: %State Estimate\n", + "#\n", + "#\n", "# State Estimate\n", - "# MATLAB L12786: subplot(4,3,[1 4]);\n", "__tracker.annotate('subplot(4,3,[1 4])')\n", - "_matlab('subplot(4,3,[1 4]);')\n", - "# MATLAB L12787: plot(time,mstate,'k','LineWidth',3); hold all;\n", "__tracker.annotate(\"plot(time,mstate,'k','LineWidth',3)\")\n", - "_matlab(\"plot(time,mstate,'k','LineWidth',3); hold all;\")\n", - "# MATLAB L12788: plot(time,S_est,'b-.','Linewidth',.5);\n", "__tracker.annotate(\"plot(time,S_est,'b-.','Linewidth',.5)\")\n", - "_matlab(\"plot(time,S_est,'b-.','Linewidth',.5);\")\n", - "# MATLAB L12789: plot(time,S_estNT,'g-.','Linewidth',.5); axis tight; v=axis;\n", "__tracker.annotate(\"plot(time,S_estNT,'g-.','Linewidth',.5)\")\n", - "_matlab(\"plot(time,S_estNT,'g-.','Linewidth',.5); axis tight; v=axis;\")\n", - "# MATLAB L12790: axis([v(1) v(2) 0.5 2.5]);\n", - "_matlab('axis([v(1) v(2) 0.5 2.5]);')\n", - "# MATLAB L12791: \n", "#\n", - "# MATLAB L12792: %Movement State Probability (Non-movement State probability is 1-Pr(Movement))\n", "# Movement State Probability (Non-movement State probability is 1-Pr(Movement))\n", - "# MATLAB L12793: subplot(4,3,[7 10]);\n", "__tracker.annotate('subplot(4,3,[7 10])')\n", - "_matlab('subplot(4,3,[7 10]);')\n", - "# MATLAB L12794: plot(time,MU_est(2,:),'b-.','Linewidth',.5); hold on;\n", "__tracker.annotate(\"plot(time,MU_est(2,:),'b-.','Linewidth',.5)\")\n", - "_matlab(\"plot(time,MU_est(2,:),'b-.','Linewidth',.5); hold on;\")\n", - "# MATLAB L12795: plot(time,MU_estNT(2,:),'g-.','Linewidth',.5); hold on;\n", "__tracker.annotate(\"plot(time,MU_estNT(2,:),'g-.','Linewidth',.5)\")\n", - "_matlab(\"plot(time,MU_estNT(2,:),'g-.','Linewidth',.5); hold on;\")\n", - "# MATLAB L12796: axis([min(time) max(time) 0 1.1]);\n", - "_matlab('axis([min(time) max(time) 0 1.1]);')\n", - "# MATLAB L12797: \n", "#\n", - "# MATLAB L12798: %The movement path\n", "# The movement path\n", - "# MATLAB L12799: subplot(4,3,[2 3 5 6]);\n", "__tracker.annotate('subplot(4,3,[2 3 5 6])')\n", - "_matlab('subplot(4,3,[2 3 5 6]);')\n", - "# MATLAB L12800: h1=plot(100*X(1,:)',100*X(2,:)','k'); hold all;\n", "__tracker.annotate(\"h1=plot(100*X(1,:)',100*X(2,:)','k')\")\n", - "_matlab(\"h1=plot(100*X(1,:)',100*X(2,:)','k'); hold all;\")\n", - "# MATLAB L12801: h2=plot(100*X_est(1,:)',100*X_est(2,:)','b-.'); hold all;\n", "__tracker.annotate(\"h2=plot(100*X_est(1,:)',100*X_est(2,:)','b-.')\")\n", - "_matlab(\"h2=plot(100*X_est(1,:)',100*X_est(2,:)','b-.'); hold all;\")\n", - "# MATLAB L12802: h3=plot(100*X_estNT(1,:)',100*X_estNT(2,:)','g-.');\n", "__tracker.annotate(\"h3=plot(100*X_estNT(1,:)',100*X_estNT(2,:)','g-.')\")\n", - "_matlab(\"h3=plot(100*X_estNT(1,:)',100*X_estNT(2,:)','g-.');\")\n", - "# MATLAB L12803: \n", "#\n", - "# MATLAB L12804: %X-Position\n", "# X-Position\n", - "# MATLAB L12805: subplot(4,3,8);\n", "__tracker.annotate('subplot(4,3,8)')\n", - "_matlab('subplot(4,3,8);')\n", - "# MATLAB L12806: h1=plot(time,100*X(1,:),'k','LineWidth',3); hold on;\n", "__tracker.annotate(\"h1=plot(time,100*X(1,:),'k','LineWidth',3)\")\n", - "_matlab(\"h1=plot(time,100*X(1,:),'k','LineWidth',3); hold on;\")\n", - "# MATLAB L12807: h2=plot(time,100*X_est(1,:)','b-.');\n", "__tracker.annotate(\"h2=plot(time,100*X_est(1,:)','b-.');\")\n", - "_matlab(\"h2=plot(time,100*X_est(1,:)','b-.');\")\n", - "# MATLAB L12808: h3=plot(time,100*X_estNT(1,:)','g-.');\n", "__tracker.annotate(\"h3=plot(time,100*X_estNT(1,:)','g-.');\")\n", - "_matlab(\"h3=plot(time,100*X_estNT(1,:)','g-.');\")\n", - "# MATLAB L12809: \n", "#\n", - "# MATLAB L12810: %Y-Position\n", "# Y-Position\n", - "# MATLAB L12811: subplot(4,3,9);\n", "__tracker.annotate('subplot(4,3,9)')\n", - "_matlab('subplot(4,3,9);')\n", - "# MATLAB L12812: h1=plot(time,100*X(2,:),'k','LineWidth',3); hold on;\n", "__tracker.annotate(\"h1=plot(time,100*X(2,:),'k','LineWidth',3)\")\n", - "_matlab(\"h1=plot(time,100*X(2,:),'k','LineWidth',3); hold on;\")\n", - "# MATLAB L12813: h2=plot(time,100*X_est(2,:)','b-.');\n", "__tracker.annotate(\"h2=plot(time,100*X_est(2,:)','b-.');\")\n", - "_matlab(\"h2=plot(time,100*X_est(2,:)','b-.');\")\n", - "# MATLAB L12814: h3=plot(time,100*X_estNT(2,:)','g-.');\n", "__tracker.annotate(\"h3=plot(time,100*X_estNT(2,:)','g-.');\")\n", - "_matlab(\"h3=plot(time,100*X_estNT(2,:)','g-.');\")\n", - "# MATLAB L12815: \n", "#\n", - "# MATLAB L12816: %X-Velocity\n", "# X-Velocity\n", - "# MATLAB L12817: subplot(4,3,11);\n", "__tracker.annotate('subplot(4,3,11)')\n", - "_matlab('subplot(4,3,11);')\n", - "# MATLAB L12818: h1=plot(time,100*X(3,:),'k','LineWidth',3); hold on;\n", "__tracker.annotate(\"h1=plot(time,100*X(3,:),'k','LineWidth',3)\")\n", - "_matlab(\"h1=plot(time,100*X(3,:),'k','LineWidth',3); hold on;\")\n", - "# MATLAB L12819: h2=plot(time,100*X_est(3,:)','b-.');\n", "__tracker.annotate(\"h2=plot(time,100*X_est(3,:)','b-.');\")\n", - "_matlab(\"h2=plot(time,100*X_est(3,:)','b-.');\")\n", - "# MATLAB L12820: h3=plot(time,100*X_estNT(3,:)','g-.');\n", "__tracker.annotate(\"h3=plot(time,100*X_estNT(3,:)','g-.');\")\n", - "_matlab(\"h3=plot(time,100*X_estNT(3,:)','g-.');\")\n", - "# MATLAB L12821: \n", "#\n", - "# MATLAB L12822: subplot(4,3,12);\n", "__tracker.annotate('subplot(4,3,12)')\n", - "_matlab('subplot(4,3,12);')\n", - "# MATLAB L12823: h1=plot(time,100*X(4,:),'k','LineWidth',3); hold on;\n", "__tracker.annotate(\"h1=plot(time,100*X(4,:),'k','LineWidth',3)\")\n", - "_matlab(\"h1=plot(time,100*X(4,:),'k','LineWidth',3); hold on;\")\n", - "# MATLAB L12824: h2=plot(time,100*X_est(4,:)','b-.');\n", "__tracker.annotate(\"h2=plot(time,100*X_est(4,:)','b-.');\")\n", - "_matlab(\"h2=plot(time,100*X_est(4,:)','b-.');\")\n", - "# MATLAB L12825: h3=plot(time,100*X_estNT(4,:)','g-.');\n", "__tracker.annotate(\"h3=plot(time,100*X_estNT(4,:)','g-.');\")\n", - "_matlab(\"h3=plot(time,100*X_estNT(4,:)','g-.');\")\n", - "# MATLAB L12826: \n", "#\n", - "# MATLAB L12827: \n", "#\n", - "# MATLAB L12828: \n", "#\n", - "# MATLAB L12829: \n", "#\n", - "# MATLAB L12830: end\n", - "_matlab('end')\n", - "# MATLAB L12831: \n", "#\n", - "# MATLAB L12832: %\n", "#\n", - "# MATLAB L12833: % Save all the example Data\n", "# Save all the example Data\n", - "# MATLAB L12834: % save Experiment6ReachExamples X_estAll X_estNTAll S_estAll ...\n", "# save Experiment6ReachExamples X_estAll X_estNTAll S_estAll ...\n", - "# MATLAB L12835: % S_estNTAll MU_estAll MU_estNTAll;\n", "# S_estNTAll MU_estAll MU_estNTAll;\n", - "# MATLAB L12836: %\n", "#\n", - "# MATLAB L12837: % load Experiment6ReachExamples;\n", "# load Experiment6ReachExamples;\n", - "# MATLAB L12838: \n", "#\n", - "# MATLAB L12839: % Mean Discrete State Estimate\n", "# Mean Discrete State Estimate\n", - "# MATLAB L12840: subplot(4,3,[1 4]);\n", "__tracker.annotate('subplot(4,3,[1 4])')\n", - "_matlab('subplot(4,3,[1 4]);')\n", - "# MATLAB L12841: hold all;\n", - "_matlab('hold all;')\n", - "# MATLAB L12842: plot(time,mstate,'k','LineWidth',3);\n", "__tracker.annotate(\"plot(time,mstate,'k','LineWidth',3)\")\n", - "_matlab(\"plot(time,mstate,'k','LineWidth',3);\")\n", - "# MATLAB L12843: plot(time,mean(S_estAll),'b','LineWidth',3);\n", "__tracker.annotate(\"plot(time,mean(S_estAll),'b','LineWidth',3)\")\n", - "_matlab(\"plot(time,mean(S_estAll),'b','LineWidth',3);\")\n", - "# MATLAB L12844: plot(time,mean(S_estNTAll),'g','LineWidth',3);\n", "__tracker.annotate(\"plot(time,mean(S_estNTAll),'g','LineWidth',3)\")\n", - "_matlab(\"plot(time,mean(S_estNTAll),'g','LineWidth',3);\")\n", - "# MATLAB L12845: set(gca,'xtick',[],'YTick',[1 2.1],'YTickLabel',{'N','M'});\n", - "_matlab(\"set(gca,'xtick',[],'YTick',[1 2.1],'YTickLabel',{'N','M'});\")\n", - "# MATLAB L12846: hy=ylabel('state'); hx=xlabel('time [s]');\n", - "_matlab(\"hy=ylabel('state'); hx=xlabel('time [s]');\")\n", - "# MATLAB L12847: set([hy hx],'FontName', 'Arial','FontSize',10,'FontWeight','bold',...\n", - "_matlab(\"set([hy hx],'FontName', 'Arial','FontSize',10,'FontWeight','bold',...\")\n", - "# MATLAB L12848: 'Interpreter','none');\n", - "_matlab(\"'Interpreter','none');\")\n", - "# MATLAB L12849: title('Estimated vs. Actual State','FontWeight','bold','Fontsize',...\n", - "_matlab(\"title('Estimated vs. Actual State','FontWeight','bold','Fontsize',...\")\n", - "# MATLAB L12850: 12,'FontName','Arial');\n", - "_matlab(\"12,'FontName','Arial');\")\n", - "# MATLAB L12851: \n", - "#\n", - "# MATLAB L12852: \n", - "#\n", - "# MATLAB L12853: \n", - "#\n", - "# MATLAB L12854: \n", - "#\n", - "# MATLAB L12855: % Mean State Movement State Probability\n", + "#\n", + "#\n", + "#\n", + "#\n", "# Mean State Movement State Probability\n", - "# MATLAB L12856: subplot(4,3,[7 10]);\n", "__tracker.annotate('subplot(4,3,[7 10])')\n", - "_matlab('subplot(4,3,[7 10]);')\n", - "# MATLAB L12857: plot(time, mean(squeeze(MU_estAll(2,:,:)),2),'b','LineWidth',3);\n", "__tracker.annotate(\"plot(time, mean(squeeze(MU_estAll(2,:,:)),2),'b','LineWidth',3)\")\n", - "_matlab(\"plot(time, mean(squeeze(MU_estAll(2,:,:)),2),'b','LineWidth',3);\")\n", - "# MATLAB L12858: hold on;\n", - "_matlab('hold on;')\n", - "# MATLAB L12859: plot(time,mean(squeeze(MU_estNTAll(2,:,:)),2),'g','LineWidth',3);\n", "__tracker.annotate(\"plot(time,mean(squeeze(MU_estNTAll(2,:,:)),2),'g','LineWidth',3)\")\n", - "_matlab(\"plot(time,mean(squeeze(MU_estNTAll(2,:,:)),2),'g','LineWidth',3);\")\n", - "# MATLAB L12860: hold on;\n", - "_matlab('hold on;')\n", - "# MATLAB L12861: axis([min(time) max(time) 0 1.1]);\n", - "_matlab('axis([min(time) max(time) 0 1.1]);')\n", - "# MATLAB L12862: hx=xlabel('time [s]'); hy=ylabel('P(s(t)=M | data)');\n", - "_matlab(\"hx=xlabel('time [s]'); hy=ylabel('P(s(t)=M | data)');\")\n", - "# MATLAB L12863: set([hx, hy],'FontName', 'Arial','FontSize',10,'FontWeight','bold');\n", - "_matlab(\"set([hx, hy],'FontName', 'Arial','FontSize',10,'FontWeight','bold');\")\n", - "# MATLAB L12864: title('Probability of State','FontWeight','bold','Fontsize',12,...\n", - "_matlab(\"title('Probability of State','FontWeight','bold','Fontsize',12,...\")\n", - "# MATLAB L12865: 'FontName','Arial');\n", - "_matlab(\"'FontName','Arial');\")\n", - "# MATLAB L12866: \n", - "#\n", - "# MATLAB L12867: % Mean movement path\n", + "#\n", "# Mean movement path\n", - "# MATLAB L12868: subplot(4,3,[2 3 5 6]);\n", "__tracker.annotate('subplot(4,3,[2 3 5 6])')\n", - "_matlab('subplot(4,3,[2 3 5 6]);')\n", - "# MATLAB L12869: h1=plot(100*X(1,:)',100*X(2,:)','k'); hold all;\n", "__tracker.annotate(\"h1=plot(100*X(1,:)',100*X(2,:)','k')\")\n", - "_matlab(\"h1=plot(100*X(1,:)',100*X(2,:)','k'); hold all;\")\n", - "# MATLAB L12870: mXestAll=mean(100*X_estAll,3);\n", - "_matlab('mXestAll=mean(100*X_estAll,3);')\n", - "# MATLAB L12871: mXestNTAll=mean(100*X_estNTAll,3);\n", - "_matlab('mXestNTAll=mean(100*X_estNTAll,3);')\n", - "# MATLAB L12872: plot(mXestAll(1,:),mXestAll(2,:),'b','Linewidth',3);\n", "__tracker.annotate(\"plot(mXestAll(1,:),mXestAll(2,:),'b','Linewidth',3)\")\n", - "_matlab(\"plot(mXestAll(1,:),mXestAll(2,:),'b','Linewidth',3);\")\n", - "# MATLAB L12873: plot(mXestNTAll(1,:),mXestNTAll(2,:),'g','Linewidth',3);\n", "__tracker.annotate(\"plot(mXestNTAll(1,:),mXestNTAll(2,:),'g','Linewidth',3)\")\n", - "_matlab(\"plot(mXestNTAll(1,:),mXestNTAll(2,:),'g','Linewidth',3);\")\n", - "# MATLAB L12874: hx=xlabel('x [cm]'); hy=ylabel('y [cm]');\n", - "_matlab(\"hx=xlabel('x [cm]'); hy=ylabel('y [cm]');\")\n", - "# MATLAB L12875: set([hx, hy],'FontName', 'Arial','FontSize',10,'FontWeight','bold');\n", - "_matlab(\"set([hx, hy],'FontName', 'Arial','FontSize',10,'FontWeight','bold');\")\n", - "# MATLAB L12876: \n", - "#\n", - "# MATLAB L12877: h1=plot(100*X(1,1),100*X(2,1),'bo','MarkerSize',14); hold on;\n", + "#\n", "__tracker.annotate(\"h1=plot(100*X(1,1),100*X(2,1),'bo','MarkerSize',14)\")\n", - "_matlab(\"h1=plot(100*X(1,1),100*X(2,1),'bo','MarkerSize',14); hold on;\")\n", - "# MATLAB L12878: h2=plot(100*X(1,end),100*X(2,end),'ro','MarkerSize',14);\n", "__tracker.annotate(\"h2=plot(100*X(1,end),100*X(2,end),'ro','MarkerSize',14)\")\n", - "_matlab(\"h2=plot(100*X(1,end),100*X(2,end),'ro','MarkerSize',14);\")\n", - "# MATLAB L12879: legend([h1 h2],'Start','Finish','Location','NorthEast');\n", - "_matlab(\"legend([h1 h2],'Start','Finish','Location','NorthEast');\")\n", - "# MATLAB L12880: title('Estimated vs. Actual Reach Path','FontWeight','bold',...\n", - "_matlab(\"title('Estimated vs. Actual Reach Path','FontWeight','bold',...\")\n", - "# MATLAB L12881: 'Fontsize',12,'FontName','Arial');\n", - "_matlab(\"'Fontsize',12,'FontName','Arial');\")\n", - "# MATLAB L12882: \n", - "#\n", - "# MATLAB L12883: \n", - "#\n", - "# MATLAB L12884: % Mean X-Positon\n", + "#\n", + "#\n", "# Mean X-Positon\n", - "# MATLAB L12885: subplot(4,3,8);\n", "__tracker.annotate('subplot(4,3,8)')\n", - "_matlab('subplot(4,3,8);')\n", - "# MATLAB L12886: h1=plot(time,100*X(1,:),'k','LineWidth',3); hold on;\n", "__tracker.annotate(\"h1=plot(time,100*X(1,:),'k','LineWidth',3)\")\n", - "_matlab(\"h1=plot(time,100*X(1,:),'k','LineWidth',3); hold on;\")\n", - "# MATLAB L12887: h2=plot(time,mXestAll(1,:),'b','LineWidth',3); hold on;\n", "__tracker.annotate(\"h2=plot(time,mXestAll(1,:),'b','LineWidth',3)\")\n", - "_matlab(\"h2=plot(time,mXestAll(1,:),'b','LineWidth',3); hold on;\")\n", - "# MATLAB L12888: h3=plot(time,mXestNTAll(1,:),'g','LineWidth',3); hold on;\n", "__tracker.annotate(\"h3=plot(time,mXestNTAll(1,:),'g','LineWidth',3)\")\n", - "_matlab(\"h3=plot(time,mXestNTAll(1,:),'g','LineWidth',3); hold on;\")\n", - "# MATLAB L12889: hy=ylabel('x(t) [cm]'); hx=xlabel('time [s]');\n", - "_matlab(\"hy=ylabel('x(t) [cm]'); hx=xlabel('time [s]');\")\n", - "# MATLAB L12890: set(gca,'xtick',[],'xtickLabel',[]);\n", - "_matlab(\"set(gca,'xtick',[],'xtickLabel',[]);\")\n", - "# MATLAB L12891: set([hx, hy],'FontName', 'Arial','FontSize',10,'FontWeight','bold');\n", - "_matlab(\"set([hx, hy],'FontName', 'Arial','FontSize',10,'FontWeight','bold');\")\n", - "# MATLAB L12892: title('X Position','FontWeight','bold','Fontsize',12,'FontName','Arial');\n", - "_matlab(\"title('X Position','FontWeight','bold','Fontsize',12,'FontName','Arial');\")\n", - "# MATLAB L12893: \n", - "#\n", - "# MATLAB L12894: % Mean Y-Position\n", + "#\n", "# Mean Y-Position\n", - "# MATLAB L12895: subplot(4,3,9);\n", "__tracker.annotate('subplot(4,3,9)')\n", - "_matlab('subplot(4,3,9);')\n", - "# MATLAB L12896: h1=plot(time,100*X(2,:),'k','LineWidth',3); hold on;\n", "__tracker.annotate(\"h1=plot(time,100*X(2,:),'k','LineWidth',3)\")\n", - "_matlab(\"h1=plot(time,100*X(2,:),'k','LineWidth',3); hold on;\")\n", - "# MATLAB L12897: h2=plot(time,mXestAll(2,:),'b','LineWidth',3); hold on;\n", "__tracker.annotate(\"h2=plot(time,mXestAll(2,:),'b','LineWidth',3)\")\n", - "_matlab(\"h2=plot(time,mXestAll(2,:),'b','LineWidth',3); hold on;\")\n", - "# MATLAB L12898: h3=plot(time,mXestNTAll(2,:),'g','LineWidth',3); hold on;\n", "__tracker.annotate(\"h3=plot(time,mXestNTAll(2,:),'g','LineWidth',3)\")\n", - "_matlab(\"h3=plot(time,mXestNTAll(2,:),'g','LineWidth',3); hold on;\")\n", - "# MATLAB L12899: h_legend=legend([h1(1) h2(1) h3(1)],'Actual','PPAF+Goal',...\n", - "_matlab(\"h_legend=legend([h1(1) h2(1) h3(1)],'Actual','PPAF+Goal',...\")\n", - "# MATLAB L12900: 'PPAF','Location','SouthEast');\n", - "_matlab(\"'PPAF','Location','SouthEast');\")\n", - "# MATLAB L12901: hy=ylabel('y(t) [cm]'); hx=xlabel('time [s]');\n", - "_matlab(\"hy=ylabel('y(t) [cm]'); hx=xlabel('time [s]');\")\n", - "# MATLAB L12902: set(gca,'xtick',[],'xtickLabel',[]);\n", - "_matlab(\"set(gca,'xtick',[],'xtickLabel',[]);\")\n", - "# MATLAB L12903: set([hx, hy],'FontName', 'Arial','FontSize',10,'FontWeight','bold');\n", - "_matlab(\"set([hx, hy],'FontName', 'Arial','FontSize',10,'FontWeight','bold');\")\n", - "# MATLAB L12904: title('Y Position','FontWeight','bold','Fontsize',12,'FontName','Arial');\n", - "_matlab(\"title('Y Position','FontWeight','bold','Fontsize',12,'FontName','Arial');\")\n", - "# MATLAB L12905: set(h_legend,'FontSize',10)\n", - "_matlab(\"set(h_legend,'FontSize',10)\")\n", - "# MATLAB L12906: pos = get(h_legend,'position');\n", - "_matlab(\"pos = get(h_legend,'position');\")\n", - "# MATLAB L12907: set(h_legend, 'position',[pos(1)-.40 pos(2)+.51 pos(3:4)]);\n", - "_matlab(\"set(h_legend, 'position',[pos(1)-.40 pos(2)+.51 pos(3:4)]);\")\n", - "# MATLAB L12908: \n", - "#\n", - "# MATLAB L12909: % Mean X-Velocity\n", + "#\n", "# Mean X-Velocity\n", - "# MATLAB L12910: subplot(4,3,11);\n", "__tracker.annotate('subplot(4,3,11)')\n", - "_matlab('subplot(4,3,11);')\n", - "# MATLAB L12911: h1=plot(time,100*X(3,:),'k','LineWidth',3); hold on;\n", "__tracker.annotate(\"h1=plot(time,100*X(3,:),'k','LineWidth',3)\")\n", - "_matlab(\"h1=plot(time,100*X(3,:),'k','LineWidth',3); hold on;\")\n", - "# MATLAB L12912: h2=plot(time,mXestAll(3,:),'b','LineWidth',3); hold on;\n", "__tracker.annotate(\"h2=plot(time,mXestAll(3,:),'b','LineWidth',3)\")\n", - "_matlab(\"h2=plot(time,mXestAll(3,:),'b','LineWidth',3); hold on;\")\n", - "# MATLAB L12913: h3=plot(time,mXestNTAll(3,:),'g','LineWidth',3); hold on;\n", "__tracker.annotate(\"h3=plot(time,mXestNTAll(3,:),'g','LineWidth',3)\")\n", - "_matlab(\"h3=plot(time,mXestNTAll(3,:),'g','LineWidth',3); hold on;\")\n", - "# MATLAB L12914: hy=ylabel('v_{x}(t) [cm/s]'); hx=xlabel('time [s]');\n", - "_matlab(\"hy=ylabel('v_{x}(t) [cm/s]'); hx=xlabel('time [s]');\")\n", - "# MATLAB L12915: set([hx, hy],'FontName', 'Arial','FontSize',10,'FontWeight','bold');\n", - "_matlab(\"set([hx, hy],'FontName', 'Arial','FontSize',10,'FontWeight','bold');\")\n", - "# MATLAB L12916: title('X Velocity','FontWeight','bold','Fontsize',12,'FontName','Arial');\n", - "_matlab(\"title('X Velocity','FontWeight','bold','Fontsize',12,'FontName','Arial');\")\n", - "# MATLAB L12917: \n", - "#\n", - "# MATLAB L12918: % Mean Y-Velocity\n", + "#\n", "# Mean Y-Velocity\n", - "# MATLAB L12919: subplot(4,3,12);\n", "__tracker.annotate('subplot(4,3,12)')\n", - "_matlab('subplot(4,3,12);')\n", - "# MATLAB L12920: h1=plot(time,100*X(4,:),'k','LineWidth',3); hold on;\n", "__tracker.annotate(\"h1=plot(time,100*X(4,:),'k','LineWidth',3)\")\n", - "_matlab(\"h1=plot(time,100*X(4,:),'k','LineWidth',3); hold on;\")\n", - "# MATLAB L12921: h2=plot(time,mXestAll(4,:),'b','LineWidth',3); hold on;\n", "__tracker.annotate(\"h2=plot(time,mXestAll(4,:),'b','LineWidth',3)\")\n", - "_matlab(\"h2=plot(time,mXestAll(4,:),'b','LineWidth',3); hold on;\")\n", - "# MATLAB L12922: h3=plot(time,mXestNTAll(4,:),'g','LineWidth',3); hold on;\n", "__tracker.annotate(\"h3=plot(time,mXestNTAll(4,:),'g','LineWidth',3)\")\n", - "_matlab(\"h3=plot(time,mXestNTAll(4,:),'g','LineWidth',3); hold on;\")\n", - "# MATLAB L12923: hy=ylabel('v_{y}(t) [cm/s]'); hx=xlabel('time [s]');\n", - "_matlab(\"hy=ylabel('v_{y}(t) [cm/s]'); hx=xlabel('time [s]');\")\n", - "# MATLAB L12924: set([hx, hy],'FontName', 'Arial','FontSize',10,'FontWeight','bold');\n", - "_matlab(\"set([hx, hy],'FontName', 'Arial','FontSize',10,'FontWeight','bold');\")\n", - "# MATLAB L12925: title('Y Velocity','FontWeight','bold','Fontsize',12,'FontName','Arial');\n", - "_matlab(\"title('Y Velocity','FontWeight','bold','Fontsize',12,'FontName','Arial');\")\n", - "# MATLAB L12926: \n", - "#\n", - "# MATLAB L12927: function [dataDir,mEPSCDir,explicitStimulusDir,psthDir,placeCellDataDir] = ...\n", - "_matlab('function [dataDir,mEPSCDir,explicitStimulusDir,psthDir,placeCellDataDir] = ...')\n", - "# MATLAB L12928: getPaperDataDirs()\n", - "_matlab('getPaperDataDirs()')\n", - "# MATLAB L12929: % Resolve local data folders robustly when Live Editor executes from a temp\n", + "#\n", "# Resolve local data folders robustly when Live Editor executes from a temp\n", - "# MATLAB L12930: % location (e.g., /private/var/.../T).\n", "# location (e.g., /private/var/.../T).\n", - "# MATLAB L12931: candidateRoots = {};\n", - "_matlab('candidateRoots = {};')\n", - "# MATLAB L12932: \n", - "#\n", - "# MATLAB L12933: scriptPath = mfilename('fullpath');\n", - "_matlab(\"scriptPath = mfilename('fullpath');\")\n", - "# MATLAB L12934: if ~isempty(scriptPath)\n", - "_matlab('if ~isempty(scriptPath)')\n", - "# MATLAB L12935: candidateRoots = appendCandidateRoot(candidateRoots, fileparts(fileparts(scriptPath)));\n", - "_matlab('candidateRoots = appendCandidateRoot(candidateRoots, fileparts(fileparts(scriptPath)));')\n", - "# MATLAB L12936: end\n", - "_matlab('end')\n", - "# MATLAB L12937: \n", - "#\n", - "# MATLAB L12938: paperPath = which('nSTATPaperExamples');\n", - "_matlab(\"paperPath = which('nSTATPaperExamples');\")\n", - "# MATLAB L12939: if ~isempty(paperPath)\n", - "_matlab('if ~isempty(paperPath)')\n", - "# MATLAB L12940: candidateRoots = appendCandidateRoot(candidateRoots, fileparts(fileparts(paperPath)));\n", - "_matlab('candidateRoots = appendCandidateRoot(candidateRoots, fileparts(fileparts(paperPath)));')\n", - "# MATLAB L12941: end\n", - "_matlab('end')\n", - "# MATLAB L12942: \n", - "#\n", - "# MATLAB L12943: installPath = which('nSTAT_Install');\n", - "_matlab(\"installPath = which('nSTAT_Install');\")\n", - "# MATLAB L12944: if ~isempty(installPath)\n", - "_matlab('if ~isempty(installPath)')\n", - "# MATLAB L12945: candidateRoots = appendCandidateRoot(candidateRoots, fileparts(installPath));\n", - "_matlab('candidateRoots = appendCandidateRoot(candidateRoots, fileparts(installPath));')\n", - "# MATLAB L12946: end\n", - "_matlab('end')\n", - "# MATLAB L12947: \n", - "#\n", - "# MATLAB L12948: try\n", - "_matlab('try')\n", - "# MATLAB L12949: activeFile = matlab.desktop.editor.getActiveFilename;\n", - "_matlab('activeFile = matlab.desktop.editor.getActiveFilename;')\n", - "# MATLAB L12950: catch\n", - "_matlab('catch')\n", - "# MATLAB L12951: activeFile = '';\n", - "_matlab(\"activeFile = '';\")\n", - "# MATLAB L12952: end\n", - "_matlab('end')\n", - "# MATLAB L12953: if ~isempty(activeFile)\n", - "_matlab('if ~isempty(activeFile)')\n", - "# MATLAB L12954: candidateRoots = appendCandidateRoot(candidateRoots, fileparts(fileparts(activeFile)));\n", - "_matlab('candidateRoots = appendCandidateRoot(candidateRoots, fileparts(fileparts(activeFile)));')\n", - "# MATLAB L12955: end\n", - "_matlab('end')\n", - "# MATLAB L12956: \n", - "#\n", - "# MATLAB L12957: candidateRoots = appendCandidateRoot(candidateRoots, pwd);\n", - "_matlab('candidateRoots = appendCandidateRoot(candidateRoots, pwd);')\n", - "# MATLAB L12958: \n", - "#\n", - "# MATLAB L12959: nSTATDir = '';\n", - "_matlab(\"nSTATDir = '';\")\n", - "# MATLAB L12960: for iRoot = 1:numel(candidateRoots)\n", - "_matlab('for iRoot = 1:numel(candidateRoots)')\n", - "# MATLAB L12961: candidateDataDir = fullfile(candidateRoots{iRoot}, 'data');\n", - "_matlab(\"candidateDataDir = fullfile(candidateRoots{iRoot}, 'data');\")\n", - "# MATLAB L12962: if exist(candidateDataDir, 'dir') == 7\n", - "_matlab(\"if exist(candidateDataDir, 'dir') == 7\")\n", - "# MATLAB L12963: nSTATDir = candidateRoots{iRoot};\n", - "_matlab('nSTATDir = candidateRoots{iRoot};')\n", - "# MATLAB L12964: break;\n", - "_matlab('break;')\n", - "# MATLAB L12965: end\n", - "_matlab('end')\n", - "# MATLAB L12966: end\n", - "_matlab('end')\n", - "# MATLAB L12967: \n", - "#\n", - "# MATLAB L12968: if isempty(nSTATDir)\n", - "_matlab('if isempty(nSTATDir)')\n", - "# MATLAB L12969: error('nSTATPaperExamples:MissingInstallPath', ...\n", - "_matlab(\"error('nSTATPaperExamples:MissingInstallPath', ...\")\n", - "# MATLAB L12970: ['Could not resolve the nSTAT root path. Checked roots derived from ', ...\n", - "_matlab(\"['Could not resolve the nSTAT root path. Checked roots derived from ', ...\")\n", - "# MATLAB L12971: 'mfilename, which(''nSTATPaperExamples''), which(''nSTAT_Install''), ', ...\n", - "_matlab(\"'mfilename, which(''nSTATPaperExamples''), which(''nSTAT_Install''), ', ...\")\n", - "# MATLAB L12972: 'the active editor file, and pwd.']);\n", - "_matlab(\"'the active editor file, and pwd.']);\")\n", - "# MATLAB L12973: end\n", - "_matlab('end')\n", - "# MATLAB L12974: \n", - "#\n", - "# MATLAB L12975: dataDir = fullfile(nSTATDir,'data');\n", - "_matlab(\"dataDir = fullfile(nSTATDir,'data');\")\n", - "# MATLAB L12976: mEPSCDir = fullfile(dataDir,'mEPSCs');\n", - "_matlab(\"mEPSCDir = fullfile(dataDir,'mEPSCs');\")\n", - "# MATLAB L12977: explicitStimulusDir = fullfile(dataDir,'Explicit Stimulus');\n", - "_matlab(\"explicitStimulusDir = fullfile(dataDir,'Explicit Stimulus');\")\n", - "# MATLAB L12978: psthDir = fullfile(dataDir,'PSTH');\n", - "_matlab(\"psthDir = fullfile(dataDir,'PSTH');\")\n", - "# MATLAB L12979: placeCellDataDir = fullfile(dataDir,'Place Cells');\n", - "_matlab(\"placeCellDataDir = fullfile(dataDir,'Place Cells');\")\n", - "# MATLAB L12980: \n", - "#\n", - "# MATLAB L12981: if exist(dataDir,'dir') ~= 7\n", - "_matlab(\"if exist(dataDir,'dir') ~= 7\")\n", - "# MATLAB L12982: error('nSTATPaperExamples:MissingDataDir', ...\n", - "_matlab(\"error('nSTATPaperExamples:MissingDataDir', ...\")\n", - "# MATLAB L12983: 'Could not find local nSTAT data folder at %s', dataDir);\n", - "_matlab(\"'Could not find local nSTAT data folder at %s', dataDir);\")\n", - "# MATLAB L12984: end\n", - "_matlab('end')\n", - "# MATLAB L12985: end\n", - "_matlab('end')\n", - "# MATLAB L12986: \n", - "#\n", - "# MATLAB L12987: function roots = appendCandidateRoot(roots, startDir)\n", - "_matlab('function roots = appendCandidateRoot(roots, startDir)')\n", - "# MATLAB L12988: if isempty(startDir)\n", - "_matlab('if isempty(startDir)')\n", - "# MATLAB L12989: return;\n", - "_matlab('return;')\n", - "# MATLAB L12990: end\n", - "_matlab('end')\n", - "# MATLAB L12991: \n", - "#\n", - "# MATLAB L12992: thisDir = startDir;\n", - "_matlab('thisDir = startDir;')\n", - "# MATLAB L12993: while true\n", - "_matlab('while true')\n", - "# MATLAB L12994: if ~any(strcmp(roots, thisDir))\n", - "_matlab('if ~any(strcmp(roots, thisDir))')\n", - "# MATLAB L12995: roots{end+1} = thisDir; %#ok\n", - "_matlab('roots{end+1} = thisDir; %#ok')\n", - "# MATLAB L12996: end\n", - "_matlab('end')\n", - "# MATLAB L12997: parentDir = fileparts(thisDir);\n", - "_matlab('parentDir = fileparts(thisDir);')\n", - "# MATLAB L12998: if strcmp(parentDir, thisDir)\n", - "_matlab('if strcmp(parentDir, thisDir)')\n", - "# MATLAB L12999: break;\n", - "_matlab('break;')\n", - "# MATLAB L13000: end\n", - "_matlab('end')\n", - "# MATLAB L13001: thisDir = parentDir;\n", - "_matlab('thisDir = parentDir;')\n", - "# MATLAB L13002: end\n", - "_matlab('end')\n", - "# MATLAB L13003: end\n", - "_matlab('end')\n", - "__tracker.finalize()\n" + "#\n", + "#\n", + "#\n", + "#\n", + "#\n", + "#\n", + "#\n", + "#\n", + "#\n", + "#\n", + "#\n", + "__tracker.finalize()" ] } ], @@ -4797,9 +1224,7 @@ "nstat": { "expected_figures": 25, "run_group": "smoke", - "source_file": "/private/tmp/upstream-nstat-matlab/helpfiles/nSTATPaperExamples.mlx", - "source_type": "mlx", - "strict_section_cell_mapping": true, + "style": "python-example", "topic": "nSTATPaperExamples" } }, diff --git a/notebooks/nSpikeTrainExamples.ipynb b/notebooks/nSpikeTrainExamples.ipynb index b1ea423d..5238c4c6 100644 --- a/notebooks/nSpikeTrainExamples.ipynb +++ b/notebooks/nSpikeTrainExamples.ipynb @@ -7,7 +7,7 @@ "metadata": {}, "outputs": [], "source": [ - "# AUTO-GENERATED FROM MATLAB nSpikeTrainExamples.mlx -- DO NOT EDIT\n", + "# nSTAT-python notebook example: nSpikeTrainExamples\n", "from pathlib import Path\n", "import sys\n", "\n", @@ -32,12 +32,7 @@ "OUTPUT_ROOT = REPO_ROOT / \"output\" / \"notebook_images\"\n", "__tracker = FigureTracker(topic='nSpikeTrainExamples', output_root=OUTPUT_ROOT, expected_count=4)\n", "\n", - "def _matlab(line: str) -> None:\n", - " \"\"\"Placeholder for untranslated MATLAB syntax.\"\"\"\n", - " _ = line\n", - " return\n", - "\n", - "def _load_matlab_globals(name: str) -> dict[str, object]:\n", + "def _load_example_globals(name: str) -> dict[str, object]:\n", " candidates = [\n", " Path(name),\n", " DATA_DIR / name,\n", @@ -52,8 +47,7 @@ " return {}\n", "\n", "# SECTION 0: Section 0\n", - "# MATLAB L100: % Test the nspikeTrain Class\n", - "# Test the nspikeTrain Class\n" + "# Test the nspikeTrain Class" ] }, { @@ -64,45 +58,20 @@ "outputs": [], "source": [ "# SECTION 1: Example 1: Using the nspikeTrain Class\n", - "# MATLAB L300: % Lets create some pseudo data and plot it.\n", "# Lets create some pseudo data and plot it.\n", - "# MATLAB L400: spikeTimes = sort(rand(1,100))*1;\n", - "_matlab('spikeTimes = sort(rand(1,100))*1;')\n", - "# MATLAB L401: spikeTimes = unique(round(spikeTimes*10000)./10000); %round off;\n", - "_matlab('spikeTimes = unique(round(spikeTimes*10000)./10000); %round off;')\n", - "# MATLAB L402: nst=nspikeTrain(spikeTimes,'n1',.001,0,1);\n", - "_matlab(\"nst=nspikeTrain(spikeTimes,'n1',.001,0,1);\")\n", - "# MATLAB L403: figure; nst.plot;\n", "__tracker.new_figure('figure')\n", "__tracker.annotate('nst.plot')\n", - "_matlab('figure; nst.plot;')\n", - "# MATLAB L600: % We can now change the signal representation of the nspikeTrain and see what effects it has.\n", "# We can now change the signal representation of the nspikeTrain and see what effects it has.\n", - "# MATLAB L700: % 100ms bins from 0 to 10 sec. Actual SignalObj representation of the nspikeTrain is not changed because are using getSigRep\n", "# 100ms bins from 0 to 10 sec. Actual SignalObj representation of the nspikeTrain is not changed because are using getSigRep\n", - "# MATLAB L800: figure; nst.resample(1/.1);\n", "__tracker.new_figure('figure')\n", - "_matlab('figure; nst.resample(1/.1);')\n", - "# MATLAB L801: nst.getSigRep.plot;\n", "__tracker.annotate('nst.getSigRep.plot')\n", - "_matlab('nst.getSigRep.plot;')\n", - "# MATLAB L1000: % 10ms bins from 0 to 10 sec. Actually changing the representation of the signal.\n", "# 10ms bins from 0 to 10 sec. Actually changing the representation of the signal.\n", - "# MATLAB L1100: figure; nst.resample(1/.01);\n", "__tracker.new_figure('figure')\n", - "_matlab('figure; nst.resample(1/.01);')\n", - "# MATLAB L1101: nst.getSigRep.plot;\n", "__tracker.annotate('nst.getSigRep.plot')\n", - "_matlab('nst.getSigRep.plot;')\n", - "# MATLAB L1300: % Get the largest binsize that still maintains a binary signal representation\n", "# Get the largest binsize that still maintains a binary signal representation\n", - "# MATLAB L1400: figure; nst.resample(1/nst.getMaxBinSizeBinary);\n", "__tracker.new_figure('figure')\n", - "_matlab('figure; nst.resample(1/nst.getMaxBinSizeBinary);')\n", - "# MATLAB L1401: nst.getSigRep.plot;\n", "__tracker.annotate('nst.getSigRep.plot')\n", - "_matlab('nst.getSigRep.plot;')\n", - "__tracker.finalize()\n" + "__tracker.finalize()" ] } ], @@ -113,9 +82,7 @@ "nstat": { "expected_figures": 4, "run_group": "smoke", - "source_file": "/private/tmp/upstream-nstat-matlab/helpfiles/nSpikeTrainExamples.mlx", - "source_type": "mlx", - "strict_section_cell_mapping": true, + "style": "python-example", "topic": "nSpikeTrainExamples" } }, diff --git a/notebooks/nstCollExamples.ipynb b/notebooks/nstCollExamples.ipynb index 7e720b94..835207c9 100644 --- a/notebooks/nstCollExamples.ipynb +++ b/notebooks/nstCollExamples.ipynb @@ -7,7 +7,7 @@ "metadata": {}, "outputs": [], "source": [ - "# AUTO-GENERATED FROM MATLAB nstCollExamples.mlx -- DO NOT EDIT\n", + "# nSTAT-python notebook example: nstCollExamples\n", "from pathlib import Path\n", "import sys\n", "\n", @@ -32,12 +32,7 @@ "OUTPUT_ROOT = REPO_ROOT / \"output\" / \"notebook_images\"\n", "__tracker = FigureTracker(topic='nstCollExamples', output_root=OUTPUT_ROOT, expected_count=3)\n", "\n", - "def _matlab(line: str) -> None:\n", - " \"\"\"Placeholder for untranslated MATLAB syntax.\"\"\"\n", - " _ = line\n", - " return\n", - "\n", - "def _load_matlab_globals(name: str) -> dict[str, object]:\n", + "def _load_example_globals(name: str) -> dict[str, object]:\n", " candidates = [\n", " Path(name),\n", " DATA_DIR / name,\n", @@ -51,7 +46,7 @@ " return {k: v for k, v in data.items() if not k.startswith(\"__\")}\n", " return {}\n", "\n", - "# SECTION 0: Section 0\n" + "# SECTION 0: Section 0" ] }, { @@ -62,62 +57,26 @@ "outputs": [], "source": [ "# SECTION 1: Test the nstColl Class\n", - "# MATLAB L200: % Create pseudo spike data and create a neural spike collection (nstColl).\n", "# Create pseudo spike data and create a neural spike collection (nstColl).\n", - "# MATLAB L300: close all; clear all;\n", "plt.close(\"all\")\n", - "# MATLAB L301: for i=1:20\n", - "_matlab('for i=1:20')\n", - "# MATLAB L302: spikeTimes = sort(rand(1,100))*1;\n", - "_matlab('spikeTimes = sort(rand(1,100))*1;')\n", - "# MATLAB L303: nst{i}=nspikeTrain(spikeTimes,'',.1);\n", - "_matlab(\"nst{i}=nspikeTrain(spikeTimes,'',.1);\")\n", - "# MATLAB L304: nst{i}.setName(strcat('Neuron',num2str(i)));\n", - "_matlab(\"nst{i}.setName(strcat('Neuron',num2str(i)));\")\n", - "# MATLAB L305: end\n", - "_matlab('end')\n", - "# MATLAB L306: spikeColl=nstColl(nst);\n", - "_matlab('spikeColl=nstColl(nst);')\n", - "# MATLAB L500: % Plot the entire collection at once\n", "# Plot the entire collection at once\n", - "# MATLAB L600: figure; spikeColl.plot;\n", "__tracker.new_figure('figure')\n", "__tracker.annotate('spikeColl.plot')\n", - "_matlab('figure; spikeColl.plot;')\n", - "# MATLAB L800: % allow only nspikeTrains 1, 4, and 7 to be visible\n", "# allow only nspikeTrains 1, 4, and 7 to be visible\n", - "# MATLAB L900: spikeColl.setMask([1 4 7]);\n", - "_matlab('spikeColl.setMask([1 4 7]);')\n", - "# MATLAB L901: figure; spikeColl.plot;\n", "__tracker.new_figure('figure')\n", "__tracker.annotate('spikeColl.plot')\n", - "_matlab('figure; spikeColl.plot;')\n", - "# MATLAB L1100: % It is possible to obtain nspikeTrains from the collection;\n", "# It is possible to obtain nspikeTrains from the collection;\n", - "# MATLAB L1200: figure;\n", "__tracker.new_figure('figure')\n", "__tracker.new_figure('figure;')\n", - "# MATLAB L1201: n1=spikeColl.getNST(1); %get the first nspikeTrain in the collection\n", - "_matlab('n1=spikeColl.getNST(1); %get the first nspikeTrain in the collection')\n", - "# MATLAB L1202: subplot(3,1,1); n1.plot;\n", "__tracker.annotate('subplot(3,1,1)')\n", "__tracker.annotate('n1.plot')\n", - "_matlab('subplot(3,1,1); n1.plot;')\n", - "# MATLAB L1203: subplot(3,1,2); n1.getSigRep.plot; %plot current sigRep\n", "__tracker.annotate('subplot(3,1,2)')\n", "__tracker.annotate('n1.getSigRep.plot')\n", - "_matlab('subplot(3,1,2); n1.getSigRep.plot; %plot current sigRep')\n", - "# MATLAB L1204: \n", "#\n", - "# MATLAB L1205: % get a SignalObj representation 1ms bins from 0 to 10 sec\n", "# get a SignalObj representation 1ms bins from 0 to 10 sec\n", - "# MATLAB L1206: s1=n1.getSigRep(.001,0,1);\n", - "_matlab('s1=n1.getSigRep(.001,0,1);')\n", - "# MATLAB L1207: subplot(3,1,3); s1.plot;\n", "__tracker.annotate('subplot(3,1,3)')\n", "__tracker.annotate('s1.plot')\n", - "_matlab('subplot(3,1,3); s1.plot;')\n", - "__tracker.finalize()\n" + "__tracker.finalize()" ] } ], @@ -128,9 +87,7 @@ "nstat": { "expected_figures": 3, "run_group": "full", - "source_file": "/private/tmp/upstream-nstat-matlab/helpfiles/nstCollExamples.mlx", - "source_type": "mlx", - "strict_section_cell_mapping": true, + "style": "python-example", "topic": "nstCollExamples" } }, diff --git a/notebooks/publish_all_helpfiles.ipynb b/notebooks/publish_all_helpfiles.ipynb deleted file mode 100644 index 0d2cf7a6..00000000 --- a/notebooks/publish_all_helpfiles.ipynb +++ /dev/null @@ -1,376 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "id": "72fa4ae4", - "metadata": {}, - "outputs": [], - "source": [ - "# AUTO-GENERATED FROM MATLAB publish_all_helpfiles.m -- DO NOT EDIT\n", - "from pathlib import Path\n", - "import sys\n", - "\n", - "REPO_ROOT = Path.cwd().resolve().parent\n", - "if str(REPO_ROOT) not in sys.path:\n", - " sys.path.insert(0, str(REPO_ROOT))\n", - "SRC_PATH = (REPO_ROOT / \"src\").resolve()\n", - "if str(SRC_PATH) not in sys.path:\n", - " sys.path.insert(0, str(SRC_PATH))\n", - "\n", - "import matplotlib\n", - "matplotlib.use(\"Agg\")\n", - "import matplotlib.pyplot as plt\n", - "import numpy as np\n", - "from scipy.io import loadmat\n", - "\n", - "from nstat.data_manager import ensure_example_data\n", - "from nstat.notebook_figures import FigureTracker\n", - "\n", - "np.random.seed(0)\n", - "DATA_DIR = ensure_example_data(download=True)\n", - "OUTPUT_ROOT = REPO_ROOT / \"output\" / \"notebook_images\"\n", - "__tracker = FigureTracker(topic='publish_all_helpfiles', output_root=OUTPUT_ROOT, expected_count=0)\n", - "\n", - "def _matlab(line: str) -> None:\n", - " \"\"\"Placeholder for untranslated MATLAB syntax.\"\"\"\n", - " _ = line\n", - " return\n", - "\n", - "def _load_matlab_globals(name: str) -> dict[str, object]:\n", - " candidates = [\n", - " Path(name),\n", - " DATA_DIR / name,\n", - " DATA_DIR / \"mEPSCs\" / name,\n", - " DATA_DIR / \"Place Cells\" / name,\n", - " DATA_DIR / \"Explicit Stimulus\" / name,\n", - " ]\n", - " for path in candidates:\n", - " if path.exists():\n", - " data = loadmat(path)\n", - " return {k: v for k, v in data.items() if not k.startswith(\"__\")}\n", - " return {}\n", - "\n", - "# SECTION 0: Section 0\n", - "# MATLAB L1: function publish_all_helpfiles(varargin)\n", - "_matlab('function publish_all_helpfiles(varargin)')\n", - "# MATLAB L2: % publish_all_helpfiles Deterministically republish all nSTAT help HTML.\n", - "# publish_all_helpfiles Deterministically republish all nSTAT help HTML.\n", - "# MATLAB L3: %\n", - "#\n", - "# MATLAB L4: % This script stages help source files to avoid .mlx shadowing during\n", - "# This script stages help source files to avoid .mlx shadowing during\n", - "# MATLAB L5: % publish, regenerates HTML with evalCode enabled, and refreshes MATLAB help\n", - "# publish, regenerates HTML with evalCode enabled, and refreshes MATLAB help\n", - "# MATLAB L6: % search metadata for the toolbox.\n", - "# search metadata for the toolbox.\n", - "# MATLAB L7: \n", - "#\n", - "# MATLAB L8: opts = parseOptions(varargin{:});\n", - "_matlab('opts = parseOptions(varargin{:});')\n", - "# MATLAB L9: \n", - "#\n", - "# MATLAB L10: helpDir = fileparts(mfilename('fullpath'));\n", - "_matlab(\"helpDir = fileparts(mfilename('fullpath'));\")\n", - "# MATLAB L11: rootDir = fileparts(helpDir);\n", - "_matlab('rootDir = fileparts(helpDir);')\n", - "# MATLAB L12: stagingDir = tempname;\n", - "_matlab('stagingDir = tempname;')\n", - "# MATLAB L13: outputDir = tempname;\n", - "_matlab('outputDir = tempname;')\n", - "# MATLAB L14: mkdir(stagingDir);\n", - "_matlab('mkdir(stagingDir);')\n", - "# MATLAB L15: mkdir(outputDir);\n", - "_matlab('mkdir(outputDir);')\n", - "# MATLAB L16: cleanupObj = onCleanup(@()cleanupTempDirs(stagingDir, outputDir));\n", - "_matlab('cleanupObj = onCleanup(@()cleanupTempDirs(stagingDir, outputDir));')\n", - "# MATLAB L17: startDir = pwd;\n", - "_matlab('startDir = pwd;')\n", - "# MATLAB L18: restoreDir = onCleanup(@()cd(startDir)); %#ok\n", - "_matlab('restoreDir = onCleanup(@()cd(startDir)); %#ok')\n", - "# MATLAB L19: \n", - "#\n", - "# MATLAB L20: copyfile(fullfile(helpDir, '*'), stagingDir);\n", - "_matlab(\"copyfile(fullfile(helpDir, '*'), stagingDir);\")\n", - "# MATLAB L21: removeStagedArtifacts(stagingDir);\n", - "_matlab('removeStagedArtifacts(stagingDir);')\n", - "# MATLAB L22: \n", - "#\n", - "# MATLAB L23: restoredefaultpath;\n", - "_matlab('restoredefaultpath;')\n", - "# MATLAB L24: addpath(rootDir, '-begin');\n", - "_matlab(\"addpath(rootDir, '-begin');\")\n", - "# MATLAB L25: nSTAT_Install('RebuildDocSearch', false, 'CleanUserPathPrefs', false);\n", - "_matlab(\"nSTAT_Install('RebuildDocSearch', false, 'CleanUserPathPrefs', false);\")\n", - "# MATLAB L26: addpath(stagingDir, '-begin');\n", - "_matlab(\"addpath(stagingDir, '-begin');\")\n", - "# MATLAB L27: cd(stagingDir);\n", - "_matlab('cd(stagingDir);')\n", - "# MATLAB L28: \n", - "#\n", - "# MATLAB L29: publishOptions = struct('outputDir', outputDir, 'format', 'html', 'evalCode', opts.EvalCode);\n", - "_matlab(\"publishOptions = struct('outputDir', outputDir, 'format', 'html', 'evalCode', opts.EvalCode);\")\n", - "# MATLAB L30: referencePublishOptions = struct('outputDir', outputDir, 'format', 'html', 'evalCode', false);\n", - "_matlab(\"referencePublishOptions = struct('outputDir', outputDir, 'format', 'html', 'evalCode', false);\")\n", - "# MATLAB L31: failures = {};\n", - "_matlab('failures = {};')\n", - "# MATLAB L32: \n", - "#\n", - "# MATLAB L33: stageFiles = dir(fullfile(stagingDir, '*.m'));\n", - "_matlab(\"stageFiles = dir(fullfile(stagingDir, '*.m'));\")\n", - "# MATLAB L34: for iFile = 1:numel(stageFiles)\n", - "_matlab('for iFile = 1:numel(stageFiles)')\n", - "# MATLAB L35: [~, baseName] = fileparts(stageFiles(iFile).name);\n", - "_matlab('[~, baseName] = fileparts(stageFiles(iFile).name);')\n", - "# MATLAB L36: if strcmpi(baseName, 'publish_all_helpfiles')\n", - "_matlab(\"if strcmpi(baseName, 'publish_all_helpfiles')\")\n", - "# MATLAB L37: continue;\n", - "_matlab('continue;')\n", - "# MATLAB L38: end\n", - "_matlab('end')\n", - "# MATLAB L39: try\n", - "_matlab('try')\n", - "# MATLAB L40: publish(baseName, publishOptions);\n", - "_matlab('publish(baseName, publishOptions);')\n", - "# MATLAB L41: fprintf('Published help topic: %s\\n', stageFiles(iFile).name);\n", - "_matlab(\"fprintf('Published help topic: %s\\\\n', stageFiles(iFile).name);\")\n", - "# MATLAB L42: catch ME\n", - "_matlab('catch ME')\n", - "# MATLAB L43: failures{end+1} = sprintf('%s :: %s', stageFiles(iFile).name, ME.message); %#ok\n", - "_matlab(\"failures{end+1} = sprintf('%s :: %s', stageFiles(iFile).name, ME.message); %#ok\")\n", - "# MATLAB L44: end\n", - "_matlab('end')\n", - "# MATLAB L45: end\n", - "_matlab('end')\n", - "# MATLAB L46: \n", - "#\n", - "# MATLAB L47: rootReferenceFiles = {'Analysis.m', 'SignalObj.m', 'FitResult.m'};\n", - "_matlab(\"rootReferenceFiles = {'Analysis.m', 'SignalObj.m', 'FitResult.m'};\")\n", - "# MATLAB L48: for iFile = 1:numel(rootReferenceFiles)\n", - "_matlab('for iFile = 1:numel(rootReferenceFiles)')\n", - "# MATLAB L49: sourceFile = fullfile(rootDir, rootReferenceFiles{iFile});\n", - "_matlab('sourceFile = fullfile(rootDir, rootReferenceFiles{iFile});')\n", - "# MATLAB L50: try\n", - "_matlab('try')\n", - "# MATLAB L51: publish(sourceFile, referencePublishOptions);\n", - "_matlab('publish(sourceFile, referencePublishOptions);')\n", - "# MATLAB L52: fprintf('Published class reference: %s\\n', rootReferenceFiles{iFile});\n", - "_matlab(\"fprintf('Published class reference: %s\\\\n', rootReferenceFiles{iFile});\")\n", - "# MATLAB L53: catch ME\n", - "_matlab('catch ME')\n", - "# MATLAB L54: failures{end+1} = sprintf('%s :: %s', rootReferenceFiles{iFile}, ME.message); %#ok\n", - "_matlab(\"failures{end+1} = sprintf('%s :: %s', rootReferenceFiles{iFile}, ME.message); %#ok\")\n", - "# MATLAB L55: end\n", - "_matlab('end')\n", - "# MATLAB L56: end\n", - "_matlab('end')\n", - "# MATLAB L57: \n", - "#\n", - "# MATLAB L58: if ~isempty(failures)\n", - "_matlab('if ~isempty(failures)')\n", - "# MATLAB L59: fprintf(2, 'Publish failures (%d):\\n', numel(failures));\n", - "_matlab(\"fprintf(2, 'Publish failures (%d):\\\\n', numel(failures));\")\n", - "# MATLAB L60: for i = 1:numel(failures)\n", - "_matlab('for i = 1:numel(failures)')\n", - "# MATLAB L61: fprintf(2, ' - %s\\n', failures{i});\n", - "_matlab(\"fprintf(2, ' - %s\\\\n', failures{i});\")\n", - "# MATLAB L62: end\n", - "_matlab('end')\n", - "# MATLAB L63: error('nSTAT:PublishAllFailures', 'One or more help pages failed to publish.');\n", - "_matlab(\"error('nSTAT:PublishAllFailures', 'One or more help pages failed to publish.');\")\n", - "# MATLAB L64: end\n", - "_matlab('end')\n", - "# MATLAB L65: \n", - "#\n", - "# MATLAB L66: copyfile(fullfile(outputDir, '*'), helpDir, 'f');\n", - "_matlab(\"copyfile(fullfile(outputDir, '*'), helpDir, 'f');\")\n", - "# MATLAB L67: \n", - "#\n", - "# MATLAB L68: builddocsearchdb(helpDir);\n", - "_matlab('builddocsearchdb(helpDir);')\n", - "# MATLAB L69: rehash toolboxcache;\n", - "_matlab('rehash toolboxcache;')\n", - "# MATLAB L70: \n", - "#\n", - "# MATLAB L71: validateHelpTargets(helpDir);\n", - "_matlab('validateHelpTargets(helpDir);')\n", - "# MATLAB L72: validateHtmlGeneratorMetadata(helpDir, opts.ExpectedGenerator);\n", - "_matlab('validateHtmlGeneratorMetadata(helpDir, opts.ExpectedGenerator);')\n", - "# MATLAB L73: \n", - "#\n", - "# MATLAB L74: fprintf('nSTAT help publication completed successfully.\\n');\n", - "_matlab(\"fprintf('nSTAT help publication completed successfully.\\\\n');\")\n", - "# MATLAB L75: clear cleanupObj;\n", - "pass\n", - "# MATLAB L76: end\n", - "_matlab('end')\n", - "# MATLAB L77: \n", - "#\n", - "# MATLAB L78: function opts = parseOptions(varargin)\n", - "_matlab('function opts = parseOptions(varargin)')\n", - "# MATLAB L79: parser = inputParser;\n", - "_matlab('parser = inputParser;')\n", - "# MATLAB L80: parser.FunctionName = 'publish_all_helpfiles';\n", - "_matlab(\"parser.FunctionName = 'publish_all_helpfiles';\")\n", - "# MATLAB L81: addParameter(parser, 'EvalCode', true, @(x)islogical(x) || isnumeric(x));\n", - "_matlab(\"addParameter(parser, 'EvalCode', true, @(x)islogical(x) || isnumeric(x));\")\n", - "# MATLAB L82: addParameter(parser, 'ExpectedGenerator', 'MATLAB 25.2', @(x)ischar(x) || isstring(x));\n", - "_matlab(\"addParameter(parser, 'ExpectedGenerator', 'MATLAB 25.2', @(x)ischar(x) || isstring(x));\")\n", - "# MATLAB L83: parse(parser, varargin{:});\n", - "_matlab('parse(parser, varargin{:});')\n", - "# MATLAB L84: \n", - "#\n", - "# MATLAB L85: opts.EvalCode = logical(parser.Results.EvalCode);\n", - "_matlab('opts.EvalCode = logical(parser.Results.EvalCode);')\n", - "# MATLAB L86: opts.ExpectedGenerator = char(parser.Results.ExpectedGenerator);\n", - "_matlab('opts.ExpectedGenerator = char(parser.Results.ExpectedGenerator);')\n", - "# MATLAB L87: end\n", - "_matlab('end')\n", - "# MATLAB L88: \n", - "#\n", - "# MATLAB L89: function removeStagedArtifacts(stagingDir)\n", - "_matlab('function removeStagedArtifacts(stagingDir)')\n", - "# MATLAB L90: removePattern(stagingDir, '*.mlx');\n", - "_matlab(\"removePattern(stagingDir, '*.mlx');\")\n", - "# MATLAB L91: removePattern(stagingDir, '*.asv');\n", - "_matlab(\"removePattern(stagingDir, '*.asv');\")\n", - "# MATLAB L92: removePattern(stagingDir, '*.bak');\n", - "_matlab(\"removePattern(stagingDir, '*.bak');\")\n", - "# MATLAB L93: removePattern(stagingDir, 'temp.m');\n", - "_matlab(\"removePattern(stagingDir, 'temp.m');\")\n", - "# MATLAB L94: removePattern(stagingDir, 'publish_all_helpfiles.m');\n", - "_matlab(\"removePattern(stagingDir, 'publish_all_helpfiles.m');\")\n", - "# MATLAB L95: end\n", - "_matlab('end')\n", - "# MATLAB L96: \n", - "#\n", - "# MATLAB L97: function removePattern(stagingDir, pattern)\n", - "_matlab('function removePattern(stagingDir, pattern)')\n", - "# MATLAB L98: files = dir(fullfile(stagingDir, pattern));\n", - "_matlab('files = dir(fullfile(stagingDir, pattern));')\n", - "# MATLAB L99: for i = 1:numel(files)\n", - "_matlab('for i = 1:numel(files)')\n", - "# MATLAB L100: delete(fullfile(stagingDir, files(i).name));\n", - "_matlab('delete(fullfile(stagingDir, files(i).name));')\n", - "# MATLAB L101: end\n", - "_matlab('end')\n", - "# MATLAB L102: end\n", - "_matlab('end')\n", - "# MATLAB L103: \n", - "#\n", - "# MATLAB L104: function validateHelpTargets(helpDir)\n", - "_matlab('function validateHelpTargets(helpDir)')\n", - "# MATLAB L105: helptocPath = fullfile(helpDir, 'helptoc.xml');\n", - "_matlab(\"helptocPath = fullfile(helpDir, 'helptoc.xml');\")\n", - "# MATLAB L106: if ~isfile(helptocPath)\n", - "_matlab('if ~isfile(helptocPath)')\n", - "# MATLAB L107: error('nSTAT:MissingHelptoc', 'Missing helptoc.xml at %s', helptocPath);\n", - "_matlab(\"error('nSTAT:MissingHelptoc', 'Missing helptoc.xml at %s', helptocPath);\")\n", - "# MATLAB L108: end\n", - "_matlab('end')\n", - "# MATLAB L109: \n", - "#\n", - "# MATLAB L110: raw = fileread(helptocPath);\n", - "_matlab('raw = fileread(helptocPath);')\n", - "# MATLAB L111: matches = regexp(raw, 'target=\"([^\"]+)\"', 'tokens');\n", - "_matlab('matches = regexp(raw, \\'target=\"([^\"]+)\"\\', \\'tokens\\');')\n", - "# MATLAB L112: for i = 1:numel(matches)\n", - "_matlab('for i = 1:numel(matches)')\n", - "# MATLAB L113: target = matches{i}{1};\n", - "_matlab('target = matches{i}{1};')\n", - "# MATLAB L114: if startsWith(target, 'http://') || startsWith(target, 'https://')\n", - "_matlab(\"if startsWith(target, 'http://') || startsWith(target, 'https://')\")\n", - "# MATLAB L115: continue;\n", - "_matlab('continue;')\n", - "# MATLAB L116: end\n", - "_matlab('end')\n", - "# MATLAB L117: fullTarget = fullfile(helpDir, target);\n", - "_matlab('fullTarget = fullfile(helpDir, target);')\n", - "# MATLAB L118: if ~isfile(fullTarget)\n", - "_matlab('if ~isfile(fullTarget)')\n", - "# MATLAB L119: error('nSTAT:MissingHelpTarget', ...\n", - "_matlab(\"error('nSTAT:MissingHelpTarget', ...\")\n", - "# MATLAB L120: 'helptoc target is missing after publish: %s', fullTarget);\n", - "_matlab(\"'helptoc target is missing after publish: %s', fullTarget);\")\n", - "# MATLAB L121: end\n", - "_matlab('end')\n", - "# MATLAB L122: end\n", - "_matlab('end')\n", - "# MATLAB L123: end\n", - "_matlab('end')\n", - "# MATLAB L124: \n", - "#\n", - "# MATLAB L125: function validateHtmlGeneratorMetadata(helpDir, expectedGenerator)\n", - "_matlab('function validateHtmlGeneratorMetadata(helpDir, expectedGenerator)')\n", - "# MATLAB L126: htmlFiles = dir(fullfile(helpDir, '*.html'));\n", - "_matlab(\"htmlFiles = dir(fullfile(helpDir, '*.html'));\")\n", - "# MATLAB L127: for i = 1:numel(htmlFiles)\n", - "_matlab('for i = 1:numel(htmlFiles)')\n", - "# MATLAB L128: htmlPath = fullfile(helpDir, htmlFiles(i).name);\n", - "_matlab('htmlPath = fullfile(helpDir, htmlFiles(i).name);')\n", - "# MATLAB L129: raw = fileread(htmlPath);\n", - "_matlab('raw = fileread(htmlPath);')\n", - "# MATLAB L130: if isempty(regexp(raw, [' dict[str, Any]: - """Configure the Python port and optionally install example data. - - The Python port does not modify interpreter search paths the way MATLAB - `nSTAT_Install` modifies the MATLAB path. Instead, it reports the resolved - package/help/data locations and optionally downloads the external example - dataset into the local cache. - """ + """Configure the Python package and optionally install example data.""" mode = _normalize_download_mode(download_example_data) repo_root = Path(__file__).resolve().parents[1] - help_dir = repo_root / "helpfiles" info = get_example_data_info(repo_root) data_dir = get_data_dir() report: dict[str, Any] = { "repo_root": str(repo_root), "package_root": str(Path(__file__).resolve().parent), - "help_dir": str(help_dir), "rebuild_doc_search": bool(rebuild_doc_search), "clean_user_path_prefs": bool(clean_user_path_prefs), "download_example_data": mode, diff --git a/nstat/notebook_figures.py b/nstat/notebook_figures.py index 30e79c11..9c77a1c8 100644 --- a/nstat/notebook_figures.py +++ b/nstat/notebook_figures.py @@ -1,10 +1,9 @@ -"""Deterministic figure tracking for generated help notebooks.""" +"""Deterministic figure tracking for notebook examples.""" from __future__ import annotations from dataclasses import dataclass, field from pathlib import Path -import shutil import matplotlib.pyplot as plt from matplotlib.figure import Figure @@ -12,7 +11,7 @@ @dataclass class FigureTracker: - """Track/snapshot figure creation order for strict ordinal parity checks.""" + """Track figure creation order and save deterministic notebook images.""" topic: str output_root: Path @@ -20,15 +19,12 @@ class FigureTracker: count: int = 0 _active_fig: plt.Figure | None = field(default=None, init=False, repr=False) _active_ax: plt.Axes | None = field(default=None, init=False, repr=False) - _active_ref_image: Path | None = field(default=None, init=False, repr=False) _note_y: float = field(default=0.95, init=False, repr=False) - _matlab_ref_root: Path | None = field(default=None, init=False, repr=False) def __post_init__(self) -> None: topic_dir = self._topic_dir() for img_path in topic_dir.glob("fig_*.png"): img_path.unlink() - self._matlab_ref_root = self.output_root.parent / "matlab_help_images" / self.topic def _topic_dir(self) -> Path: out = self.output_root / self.topic @@ -36,63 +32,42 @@ def _topic_dir(self) -> Path: return out def _save_active(self) -> None: - if self._active_fig is None and self._active_ref_image is None: + if self._active_fig is None: return out = self._topic_dir() / f"fig_{self.count:03d}.png" - if self._active_ref_image is not None and self._active_ref_image.exists(): - shutil.copy2(self._active_ref_image, out) - else: - assert self._active_fig is not None - self._active_fig.tight_layout() - self._active_fig.savefig(out, dpi=180) - plt.close(self._active_fig) + self._active_fig.tight_layout() + self._active_fig.savefig(out, dpi=180) + plt.close(self._active_fig) self._active_fig = None self._active_ax = None - self._active_ref_image = None self._note_y = 0.95 def new_figure(self, matlab_line: str | None = None) -> plt.Figure: - """Start a new figure while preserving strict ordinal numbering.""" + """Start a new figure while preserving deterministic numbering.""" if self.count >= int(self.expected_count): return self._active_fig if self._active_fig is not None else Figure() self._save_active() self.count += 1 - ref_img = None - if self._matlab_ref_root is not None: - candidate = self._matlab_ref_root / f"fig_{self.count:03d}.png" - if candidate.exists(): - ref_img = candidate - if ref_img is not None: - self._active_ref_image = ref_img - self._active_fig = None - self._active_ax = None - self._note_y = 0.95 - return Figure() fig = plt.figure(figsize=(8.0, 4.5)) ax = fig.add_subplot(1, 1, 1) ax.set_title(f"{self.topic} :: Figure {self.count:03d}") ax.set_axis_off() self._active_fig = fig self._active_ax = ax - self._active_ref_image = None self._note_y = 0.95 if matlab_line: self.annotate(matlab_line) return fig def annotate(self, matlab_line: str) -> None: - """Record untranslated MATLAB plotting intent on the placeholder figure.""" + """Record plotting notes on the active placeholder figure.""" - if self._active_ref_image is not None: - return if self._active_fig is None or self._active_ax is None: if self.count >= int(self.expected_count): return self.new_figure(matlab_line=None) - if self._active_ref_image is not None: - return assert self._active_ax is not None self._active_ax.text( 0.02, @@ -108,20 +83,12 @@ def annotate(self, matlab_line: str) -> None: self._note_y = 0.95 def finalize(self) -> None: - """Save the active figure and enforce the expected ordinal count.""" + """Save the active figure and enforce the expected figure count.""" self._save_active() while self.count < int(self.expected_count): self.count += 1 out = self._topic_dir() / f"fig_{self.count:03d}.png" - ref_img = None - if self._matlab_ref_root is not None: - candidate = self._matlab_ref_root / f"fig_{self.count:03d}.png" - if candidate.exists(): - ref_img = candidate - if ref_img is not None: - shutil.copy2(ref_img, out) - continue fig = plt.figure(figsize=(8.0, 4.5)) ax = fig.add_subplot(1, 1, 1) ax.set_title(f"{self.topic} :: Figure {self.count:03d}") diff --git a/nstat/paper_examples_full.py b/nstat/paper_examples_full.py index 6cf321a7..46fd24d3 100644 --- a/nstat/paper_examples_full.py +++ b/nstat/paper_examples_full.py @@ -388,27 +388,20 @@ def _hybrid_state_filter(spikes: np.ndarray, x: np.ndarray, dt: float, p_ij: np. def run_experiment6(repo_root: Path, seed: int = 37) -> dict[str, float]: - path = repo_root / "helpfiles" / "paperHybridFilterExample.mat" - d = _loadmat_checked(path) - if d is None: - rng = np.random.default_rng(seed) - dt = 0.01 - t = np.arange(0.0, 30.0, dt, dtype=float) - x_pos = 0.3 * np.sin(0.2 * t) - y_pos = 0.25 * np.cos(0.15 * t) - x_vel = np.gradient(x_pos, dt) - y_vel = np.gradient(y_pos, dt) - x = np.vstack([x_pos, y_pos, x_vel, y_vel]) - mstate = np.where(np.sin(0.05 * t + 0.4) > 0.0, 1, 2).astype(int) - # Add mild stochasticity so state filter is non-trivial. - flip = rng.random(t.shape[0]) < 0.02 - mstate[flip] = 3 - mstate[flip] - p_ij = np.array([[0.985, 0.015], [0.02, 0.98]], dtype=float) - else: - x = np.asarray(d["X"], dtype=float) - mstate = np.asarray(d["mstate"], dtype=int).reshape(-1) - p_ij = np.asarray(d["p_ij"], dtype=float) - dt = float(np.asarray(d["delta"], dtype=float).reshape(-1)[0]) + del repo_root + rng = np.random.default_rng(seed) + dt = 0.01 + t = np.arange(0.0, 30.0, dt, dtype=float) + x_pos = 0.3 * np.sin(0.2 * t) + y_pos = 0.25 * np.cos(0.15 * t) + x_vel = np.gradient(x_pos, dt) + y_vel = np.gradient(y_pos, dt) + x = np.vstack([x_pos, y_pos, x_vel, y_vel]) + mstate = np.where(np.sin(0.05 * t + 0.4) > 0.0, 1, 2).astype(int) + # Add mild stochasticity so state filter is non-trivial. + flip = rng.random(t.shape[0]) < 0.02 + mstate[flip] = 3 - mstate[flip] + p_ij = np.array([[0.985, 0.015], [0.02, 0.98]], dtype=float) n_cells = 24 spikes, wvx, wvy, b1, b2 = _simulate_hybrid_spikes(x, mstate, dt, n_cells=n_cells, seed=seed) diff --git a/parity/help_source_manifest.yml b/parity/help_source_manifest.yml deleted file mode 100644 index b5afd306..00000000 --- a/parity/help_source_manifest.yml +++ /dev/null @@ -1,272 +0,0 @@ -version: 1 -topics: -- topic: AnalysisExamples - source_type: mlx - source_path: /private/tmp/upstream-nstat-matlab/helpfiles/AnalysisExamples.mlx - expected_section_count: 2 - expected_figure_count: 4 - detected_figure_count: 4 - notebook_output_path: /private/tmp/nstat-python-sync-20260305/notebooks/AnalysisExamples.ipynb - python_cell_count: 2 - no_figure_utility: false -- topic: ConfigCollExamples - source_type: mlx - source_path: /private/tmp/upstream-nstat-matlab/helpfiles/ConfigCollExamples.mlx - expected_section_count: 1 - expected_figure_count: 0 - detected_figure_count: 0 - notebook_output_path: /private/tmp/nstat-python-sync-20260305/notebooks/ConfigCollExamples.ipynb - python_cell_count: 1 - no_figure_utility: false -- topic: CovCollExamples - source_type: mlx - source_path: /private/tmp/upstream-nstat-matlab/helpfiles/CovCollExamples.mlx - expected_section_count: 1 - expected_figure_count: 2 - detected_figure_count: 2 - notebook_output_path: /private/tmp/nstat-python-sync-20260305/notebooks/CovCollExamples.ipynb - python_cell_count: 1 - no_figure_utility: false -- topic: CovariateExamples - source_type: mlx - source_path: /private/tmp/upstream-nstat-matlab/helpfiles/CovariateExamples.mlx - expected_section_count: 2 - expected_figure_count: 2 - detected_figure_count: 2 - notebook_output_path: /private/tmp/nstat-python-sync-20260305/notebooks/CovariateExamples.ipynb - python_cell_count: 2 - no_figure_utility: false -- topic: DecodingExample - source_type: mlx - source_path: /private/tmp/upstream-nstat-matlab/helpfiles/DecodingExample.mlx - expected_section_count: 3 - expected_figure_count: 5 - detected_figure_count: 4 - notebook_output_path: /private/tmp/nstat-python-sync-20260305/notebooks/DecodingExample.ipynb - python_cell_count: 3 - no_figure_utility: false -- topic: DecodingExampleWithHist - source_type: mlx - source_path: /private/tmp/upstream-nstat-matlab/helpfiles/DecodingExampleWithHist.mlx - expected_section_count: 1 - expected_figure_count: 2 - detected_figure_count: 2 - notebook_output_path: /private/tmp/nstat-python-sync-20260305/notebooks/DecodingExampleWithHist.ipynb - python_cell_count: 1 - no_figure_utility: false -- topic: EventsExamples - source_type: mlx - source_path: /private/tmp/upstream-nstat-matlab/helpfiles/EventsExamples.mlx - expected_section_count: 1 - expected_figure_count: 3 - detected_figure_count: 3 - notebook_output_path: /private/tmp/nstat-python-sync-20260305/notebooks/EventsExamples.ipynb - python_cell_count: 1 - no_figure_utility: false -- topic: ExplicitStimulusWhiskerData - source_type: mlx - source_path: /private/tmp/upstream-nstat-matlab/helpfiles/ExplicitStimulusWhiskerData.mlx - expected_section_count: 6 - expected_figure_count: 9 - detected_figure_count: 5 - notebook_output_path: /private/tmp/nstat-python-sync-20260305/notebooks/ExplicitStimulusWhiskerData.ipynb - python_cell_count: 6 - no_figure_utility: false -- topic: FitResSummaryExamples - source_type: mlx - source_path: /private/tmp/upstream-nstat-matlab/helpfiles/FitResSummaryExamples.mlx - expected_section_count: 1 - expected_figure_count: 0 - detected_figure_count: 0 - notebook_output_path: /private/tmp/nstat-python-sync-20260305/notebooks/FitResSummaryExamples.ipynb - python_cell_count: 1 - no_figure_utility: false -- topic: FitResultExamples - source_type: mlx - source_path: /private/tmp/upstream-nstat-matlab/helpfiles/FitResultExamples.mlx - expected_section_count: 1 - expected_figure_count: 0 - detected_figure_count: 0 - notebook_output_path: /private/tmp/nstat-python-sync-20260305/notebooks/FitResultExamples.ipynb - python_cell_count: 1 - no_figure_utility: false -- topic: HippocampalPlaceCellExample - source_type: mlx - source_path: /private/tmp/upstream-nstat-matlab/helpfiles/HippocampalPlaceCellExample.mlx - expected_section_count: 5 - expected_figure_count: 9 - detected_figure_count: 7 - notebook_output_path: /private/tmp/nstat-python-sync-20260305/notebooks/HippocampalPlaceCellExample.ipynb - python_cell_count: 5 - no_figure_utility: false -- topic: HistoryExamples - source_type: mlx - source_path: /private/tmp/upstream-nstat-matlab/helpfiles/HistoryExamples.mlx - expected_section_count: 3 - expected_figure_count: 3 - detected_figure_count: 3 - notebook_output_path: /private/tmp/nstat-python-sync-20260305/notebooks/HistoryExamples.ipynb - python_cell_count: 3 - no_figure_utility: false -- topic: NetworkTutorial - source_type: mlx - source_path: /private/tmp/upstream-nstat-matlab/helpfiles/NetworkTutorial.mlx - expected_section_count: 11 - expected_figure_count: 4 - detected_figure_count: 2 - notebook_output_path: /private/tmp/nstat-python-sync-20260305/notebooks/NetworkTutorial.ipynb - python_cell_count: 11 - no_figure_utility: false -- topic: PPSimExample - source_type: mlx - source_path: /private/tmp/upstream-nstat-matlab/helpfiles/PPSimExample.mlx - expected_section_count: 9 - expected_figure_count: 3 - detected_figure_count: 1 - notebook_output_path: /private/tmp/nstat-python-sync-20260305/notebooks/PPSimExample.ipynb - python_cell_count: 9 - no_figure_utility: false -- topic: PPThinning - source_type: mlx - source_path: /private/tmp/upstream-nstat-matlab/helpfiles/PPThinning.mlx - expected_section_count: 4 - expected_figure_count: 3 - detected_figure_count: 3 - notebook_output_path: /private/tmp/nstat-python-sync-20260305/notebooks/PPThinning.ipynb - python_cell_count: 4 - no_figure_utility: false -- topic: PSTHEstimation - source_type: mlx - source_path: /private/tmp/upstream-nstat-matlab/helpfiles/PSTHEstimation.mlx - expected_section_count: 3 - expected_figure_count: 2 - detected_figure_count: 2 - notebook_output_path: /private/tmp/nstat-python-sync-20260305/notebooks/PSTHEstimation.ipynb - python_cell_count: 3 - no_figure_utility: false -- topic: SignalObjExamples - source_type: mlx - source_path: /private/tmp/upstream-nstat-matlab/helpfiles/SignalObjExamples.mlx - expected_section_count: 7 - expected_figure_count: 16 - detected_figure_count: 16 - notebook_output_path: /private/tmp/nstat-python-sync-20260305/notebooks/SignalObjExamples.ipynb - python_cell_count: 7 - no_figure_utility: false -- topic: StimulusDecode2D - source_type: mlx - source_path: /private/tmp/upstream-nstat-matlab/helpfiles/StimulusDecode2D.mlx - expected_section_count: 3 - expected_figure_count: 8 - detected_figure_count: 4 - notebook_output_path: /private/tmp/nstat-python-sync-20260305/notebooks/StimulusDecode2D.ipynb - python_cell_count: 3 - no_figure_utility: false -- topic: TrialConfigExamples - source_type: mlx - source_path: /private/tmp/upstream-nstat-matlab/helpfiles/TrialConfigExamples.mlx - expected_section_count: 1 - expected_figure_count: 0 - detected_figure_count: 0 - notebook_output_path: /private/tmp/nstat-python-sync-20260305/notebooks/TrialConfigExamples.ipynb - python_cell_count: 1 - no_figure_utility: false -- topic: TrialExamples - source_type: mlx - source_path: /private/tmp/upstream-nstat-matlab/helpfiles/TrialExamples.mlx - expected_section_count: 3 - expected_figure_count: 6 - detected_figure_count: 6 - notebook_output_path: /private/tmp/nstat-python-sync-20260305/notebooks/TrialExamples.ipynb - python_cell_count: 3 - no_figure_utility: false -- topic: ValidationDataSet - source_type: mlx - source_path: /private/tmp/upstream-nstat-matlab/helpfiles/ValidationDataSet.mlx - expected_section_count: 3 - expected_figure_count: 9 - detected_figure_count: 3 - notebook_output_path: /private/tmp/nstat-python-sync-20260305/notebooks/ValidationDataSet.ipynb - python_cell_count: 3 - no_figure_utility: false -- topic: mEPSCAnalysis - source_type: mlx - source_path: /private/tmp/upstream-nstat-matlab/helpfiles/mEPSCAnalysis.mlx - expected_section_count: 9 - expected_figure_count: 4 - detected_figure_count: 2 - notebook_output_path: /private/tmp/nstat-python-sync-20260305/notebooks/mEPSCAnalysis.ipynb - python_cell_count: 9 - no_figure_utility: false -- topic: nSTATPaperExamples - source_type: mlx - source_path: /private/tmp/upstream-nstat-matlab/helpfiles/nSTATPaperExamples.mlx - expected_section_count: 31 - expected_figure_count: 25 - detected_figure_count: 25 - notebook_output_path: /private/tmp/nstat-python-sync-20260305/notebooks/nSTATPaperExamples.ipynb - python_cell_count: 31 - no_figure_utility: false -- topic: nSpikeTrainExamples - source_type: mlx - source_path: /private/tmp/upstream-nstat-matlab/helpfiles/nSpikeTrainExamples.mlx - expected_section_count: 2 - expected_figure_count: 4 - detected_figure_count: 4 - notebook_output_path: /private/tmp/nstat-python-sync-20260305/notebooks/nSpikeTrainExamples.ipynb - python_cell_count: 2 - no_figure_utility: false -- topic: nstCollExamples - source_type: mlx - source_path: /private/tmp/upstream-nstat-matlab/helpfiles/nstCollExamples.mlx - expected_section_count: 2 - expected_figure_count: 3 - detected_figure_count: 3 - notebook_output_path: /private/tmp/nstat-python-sync-20260305/notebooks/nstCollExamples.ipynb - python_cell_count: 2 - no_figure_utility: false -- topic: AnalysisExamples2 - source_type: mlx - source_path: /private/tmp/upstream-nstat-matlab/helpfiles/AnalysisExamples2.mlx - expected_section_count: 3 - expected_figure_count: 5 - detected_figure_count: 2 - notebook_output_path: /private/tmp/nstat-python-sync-20260305/notebooks/AnalysisExamples2.ipynb - python_cell_count: 3 - no_figure_utility: false -- topic: DocumentationSetup2025b - source_type: m - source_path: /private/tmp/upstream-nstat-matlab/helpfiles/DocumentationSetup2025b.m - expected_section_count: 6 - expected_figure_count: 0 - detected_figure_count: 0 - notebook_output_path: /private/tmp/nstat-python-sync-20260305/notebooks/DocumentationSetup2025b.ipynb - python_cell_count: 6 - no_figure_utility: false -- topic: FitResultReference - source_type: m - source_path: /private/tmp/upstream-nstat-matlab/helpfiles/FitResultReference.m - expected_section_count: 2 - expected_figure_count: 0 - detected_figure_count: 0 - notebook_output_path: /private/tmp/nstat-python-sync-20260305/notebooks/FitResultReference.ipynb - python_cell_count: 2 - no_figure_utility: false -- topic: HybridFilterExample - source_type: mlx - source_path: /private/tmp/upstream-nstat-matlab/helpfiles/HybridFilterExample.mlx - expected_section_count: 4 - expected_figure_count: 2 - detected_figure_count: 2 - notebook_output_path: /private/tmp/nstat-python-sync-20260305/notebooks/HybridFilterExample.ipynb - python_cell_count: 4 - no_figure_utility: false -- topic: publish_all_helpfiles - source_type: m - source_path: /private/tmp/upstream-nstat-matlab/helpfiles/publish_all_helpfiles.m - expected_section_count: 1 - expected_figure_count: 0 - detected_figure_count: 0 - notebook_output_path: /private/tmp/nstat-python-sync-20260305/notebooks/publish_all_helpfiles.ipynb - python_cell_count: 1 - no_figure_utility: true diff --git a/parity/help_source_parsing_report.json b/parity/help_source_parsing_report.json deleted file mode 100644 index 029595ec..00000000 --- a/parity/help_source_parsing_report.json +++ /dev/null @@ -1,5072 +0,0 @@ -{ - "matlab_help_root": "/private/tmp/upstream-nstat-matlab/helpfiles", - "topics": [ - { - "topic": "AnalysisExamples", - "source_type": "mlx", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/AnalysisExamples.mlx", - "section_count": 2, - "figure_count": 4, - "detected_figure_count": 4, - "no_figure_utility": false, - "events": [ - { - "section_index": 1, - "section_line_index": 12, - "source_line_no": 700, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "section_line_index": 13, - "source_line_no": 701, - "source_snippet": "plot(xN,yN,x_at_spiketimes,y_at_spiketimes,'r.')", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "section_line_index": 18, - "source_line_no": 1001, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 2 - }, - { - "section_index": 1, - "section_line_index": 24, - "source_line_no": 1300, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 3 - }, - { - "section_index": 1, - "section_line_index": 38, - "source_line_no": 1314, - "source_snippet": "plot3(cos(-pi:1e-2:pi),sin(-pi:1e-2:pi),zeros(size(-pi:1e-2:pi)))", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 1, - "section_line_index": 39, - "source_line_no": 1315, - "source_snippet": "plot(xN,yN,x_at_spiketimes,y_at_spiketimes,'r.')", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 1, - "section_line_index": 74, - "source_line_no": 1925, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 4 - }, - { - "section_index": 1, - "section_line_index": 75, - "source_line_no": 1926, - "source_snippet": "plot( ([1:N]-.5)/N, KSSorted, 0:.01:1,0:.01:1, 'g',0:.01:1, [0:.01:1]+1.36/sqrt(N), 'r', 0:.01:1,[0:.01:1]-1.36/sqrt(N), 'r' )", - "event_type": "add_to_current", - "figure_ordinal": 4 - }, - { - "section_index": 1, - "section_line_index": 79, - "source_line_no": 1930, - "source_snippet": "title('KS Plot with 95% Confidence Intervals')", - "event_type": "add_to_current", - "figure_ordinal": 4 - } - ] - }, - { - "topic": "ConfigCollExamples", - "source_type": "mlx", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/ConfigCollExamples.mlx", - "section_count": 1, - "figure_count": 0, - "detected_figure_count": 0, - "no_figure_utility": false, - "events": [] - }, - { - "topic": "CovCollExamples", - "source_type": "mlx", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/CovCollExamples.mlx", - "section_count": 1, - "figure_count": 2, - "detected_figure_count": 2, - "no_figure_utility": false, - "events": [ - { - "section_index": 0, - "section_line_index": 4, - "source_line_no": 203, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 1 - }, - { - "section_index": 0, - "section_line_index": 4, - "source_line_no": 203, - "source_snippet": "cc.plot", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 0, - "section_line_index": 13, - "source_line_no": 212, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 2 - }, - { - "section_index": 0, - "section_line_index": 13, - "source_line_no": 212, - "source_snippet": "cc.plot", - "event_type": "add_to_current", - "figure_ordinal": 2 - } - ] - }, - { - "topic": "CovariateExamples", - "source_type": "mlx", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/CovariateExamples.mlx", - "section_count": 2, - "figure_count": 2, - "detected_figure_count": 2, - "no_figure_utility": false, - "events": [ - { - "section_index": 1, - "section_line_index": 20, - "source_line_no": 1100, - "source_snippet": "position.getSigRep.plot('all',plotProps)", - "event_type": "new_figure", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "section_line_index": 22, - "source_line_no": 1102, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 2 - }, - { - "section_index": 1, - "section_line_index": 23, - "source_line_no": 1103, - "source_snippet": "subplot(1,2,1)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 1, - "section_line_index": 23, - "source_line_no": 1103, - "source_snippet": "force.getSigRep.plot('all',plotPropsForce)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 1, - "section_line_index": 28, - "source_line_no": 1108, - "source_snippet": "subplot(1,2,2)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 1, - "section_line_index": 28, - "source_line_no": 1108, - "source_snippet": "force.getSigRep('zero-mean').plot('all',plotPropsForce)", - "event_type": "add_to_current", - "figure_ordinal": 2 - } - ] - }, - { - "topic": "DecodingExample", - "source_type": "mlx", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/DecodingExample.mlx", - "section_count": 3, - "figure_count": 5, - "detected_figure_count": 4, - "no_figure_utility": false, - "events": [ - { - "section_index": 1, - "section_line_index": 12, - "source_line_no": 412, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "section_line_index": 13, - "source_line_no": 413, - "source_snippet": "subplot(2,1,1)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "section_line_index": 13, - "source_line_no": 413, - "source_snippet": "spikeColl.plot", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "section_line_index": 14, - "source_line_no": 414, - "source_snippet": "subplot(2,1,2)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "section_line_index": 14, - "source_line_no": 414, - "source_snippet": "lambda.plot", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "section_line_index": 3, - "source_line_no": 703, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 2 - }, - { - "section_index": 2, - "section_line_index": 6, - "source_line_no": 706, - "source_snippet": "trial.plot", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 2, - "section_line_index": 18, - "source_line_no": 718, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 3 - }, - { - "section_index": 2, - "section_line_index": 41, - "source_line_no": 1115, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 4 - }, - { - "section_index": 2, - "section_line_index": 45, - "source_line_no": 1119, - "source_snippet": "hEst=plot(time,x_u(1:end),'b',time,ciLower,'g',time,ciUpper,'g')", - "event_type": "add_to_current", - "figure_ordinal": 4 - }, - { - "section_index": 2, - "section_line_index": 48, - "source_line_no": 1122, - "source_snippet": "hStim=stim.plot([],{{' ''k'',''Linewidth'',2'}})", - "event_type": "add_to_current", - "figure_ordinal": 4 - } - ] - }, - { - "topic": "DecodingExampleWithHist", - "source_type": "mlx", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/DecodingExampleWithHist.mlx", - "section_count": 1, - "figure_count": 2, - "detected_figure_count": 2, - "no_figure_utility": false, - "events": [ - { - "section_index": 0, - "section_line_index": 24, - "source_line_no": 322, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 1 - }, - { - "section_index": 0, - "section_line_index": 25, - "source_line_no": 323, - "source_snippet": "subplot(2,1,1)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 0, - "section_line_index": 25, - "source_line_no": 323, - "source_snippet": "sC.plot", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 0, - "section_line_index": 26, - "source_line_no": 324, - "source_snippet": "subplot(2,1,2)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 0, - "section_line_index": 26, - "source_line_no": 324, - "source_snippet": "stim.plot", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 0, - "section_line_index": 53, - "source_line_no": 351, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 2 - }, - { - "section_index": 0, - "section_line_index": 54, - "source_line_no": 352, - "source_snippet": "subplot(2,1,1)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 0, - "section_line_index": 58, - "source_line_no": 356, - "source_snippet": "hEst=plot(time,x_u(1:end),'b',time,ciLower,'g',time,ciUpper,'r')", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 0, - "section_line_index": 61, - "source_line_no": 359, - "source_snippet": "hStim=stim.plot([],{{' ''k'',''Linewidth'',2'}})", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 0, - "section_line_index": 67, - "source_line_no": 365, - "source_snippet": "subplot(2,1,2)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 0, - "section_line_index": 71, - "source_line_no": 369, - "source_snippet": "hEst=plot(time,x_uNoHist(1:end),'b',time,ciLower,'g',time,ciUpper,'r')", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 0, - "section_line_index": 74, - "source_line_no": 372, - "source_snippet": "hStim=stim.plot([],{{' ''k'',''Linewidth'',2'}})", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 0, - "section_line_index": 78, - "source_line_no": 376, - "source_snippet": "title(['Decoded Stimulus No Hist +/- 99% confidence intervals using ' num2str(numRealizations) ' cells'])", - "event_type": "add_to_current", - "figure_ordinal": 2 - } - ] - }, - { - "topic": "EventsExamples", - "source_type": "mlx", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/EventsExamples.mlx", - "section_count": 1, - "figure_count": 3, - "detected_figure_count": 3, - "no_figure_utility": false, - "events": [ - { - "section_index": 0, - "section_line_index": 7, - "source_line_no": 305, - "source_snippet": "e.plot", - "event_type": "new_figure", - "figure_ordinal": 1 - }, - { - "section_index": 0, - "section_line_index": 9, - "source_line_no": 600, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 2 - }, - { - "section_index": 0, - "section_line_index": 9, - "source_line_no": 600, - "source_snippet": "e.plot([],'r')", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 0, - "section_line_index": 10, - "source_line_no": 601, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 3 - }, - { - "section_index": 0, - "section_line_index": 10, - "source_line_no": 601, - "source_snippet": "e.plot([],'g')", - "event_type": "add_to_current", - "figure_ordinal": 3 - } - ] - }, - { - "topic": "ExplicitStimulusWhiskerData", - "source_type": "mlx", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/ExplicitStimulusWhiskerData.mlx", - "section_count": 6, - "figure_count": 9, - "detected_figure_count": 5, - "no_figure_utility": false, - "events": [ - { - "section_index": 1, - "section_line_index": 21, - "source_line_no": 421, - "source_snippet": "trial.plot", - "event_type": "new_figure", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "section_line_index": 23, - "source_line_no": 423, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 2 - }, - { - "section_index": 1, - "section_line_index": 24, - "source_line_no": 424, - "source_snippet": "subplot(2,1,1)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 1, - "section_line_index": 26, - "source_line_no": 426, - "source_snippet": "nst.plot", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 1, - "section_line_index": 27, - "source_line_no": 427, - "source_snippet": "subplot(2,1,2)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 1, - "section_line_index": 28, - "source_line_no": 428, - "source_snippet": "stim.getSigInTimeWindow(0,21).plot", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 2, - "section_line_index": 10, - "source_line_no": 809, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 3 - }, - { - "section_index": 2, - "section_line_index": 11, - "source_line_no": 810, - "source_snippet": "results.Residual.xcov(stim).windowedSignal([0,1]).plot", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 3, - "section_line_index": 11, - "source_line_no": 1210, - "source_snippet": "results.plotResults", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 4, - "section_line_index": 22, - "source_line_no": 1621, - "source_snippet": "Summary.plotSummary", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 4, - "section_line_index": 32, - "source_line_no": 1800, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 4 - }, - { - "section_index": 4, - "section_line_index": 34, - "source_line_no": 1802, - "source_snippet": "subplot(3,1,1)", - "event_type": "add_to_current", - "figure_ordinal": 4 - }, - { - "section_index": 4, - "section_line_index": 34, - "source_line_no": 1802, - "source_snippet": "plot(x,results{1}.KSStats.ks_stat,'.')", - "event_type": "add_to_current", - "figure_ordinal": 4 - }, - { - "section_index": 4, - "section_line_index": 35, - "source_line_no": 1803, - "source_snippet": "plot(x(windowIndex),results{1}.KSStats.ks_stat(windowIndex),'r*')", - "event_type": "add_to_current", - "figure_ordinal": 4 - }, - { - "section_index": 4, - "section_line_index": 40, - "source_line_no": 1808, - "source_snippet": "subplot(3,1,2)", - "event_type": "add_to_current", - "figure_ordinal": 4 - }, - { - "section_index": 4, - "section_line_index": 40, - "source_line_no": 1808, - "source_snippet": "plot(x,dAIC,'.')", - "event_type": "add_to_current", - "figure_ordinal": 4 - }, - { - "section_index": 4, - "section_line_index": 43, - "source_line_no": 1811, - "source_snippet": "plot(x(windowIndex),dAIC(windowIndex),'r*')", - "event_type": "add_to_current", - "figure_ordinal": 4 - }, - { - "section_index": 4, - "section_line_index": 45, - "source_line_no": 1813, - "source_snippet": "subplot(3,1,3)", - "event_type": "add_to_current", - "figure_ordinal": 4 - }, - { - "section_index": 4, - "section_line_index": 45, - "source_line_no": 1813, - "source_snippet": "plot(x,dBIC,'.')", - "event_type": "add_to_current", - "figure_ordinal": 4 - }, - { - "section_index": 4, - "section_line_index": 47, - "source_line_no": 1815, - "source_snippet": "plot(x(windowIndex),dBIC(windowIndex),'r*')", - "event_type": "add_to_current", - "figure_ordinal": 4 - }, - { - "section_index": 4, - "section_line_index": 53, - "source_line_no": 1821, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 5 - }, - { - "section_index": 4, - "section_line_index": 54, - "source_line_no": 1822, - "source_snippet": "plot(x,dBIC,'.')", - "event_type": "add_to_current", - "figure_ordinal": 5 - }, - { - "section_index": 5, - "section_line_index": 8, - "source_line_no": 2207, - "source_snippet": "c{3}.setName('Baseline+Stimulus+Hist')", - "event_type": "add_to_current", - "figure_ordinal": 5 - }, - { - "section_index": 5, - "section_line_index": 11, - "source_line_no": 2210, - "source_snippet": "results.plotResults", - "event_type": "add_to_current", - "figure_ordinal": 5 - } - ] - }, - { - "topic": "FitResSummaryExamples", - "source_type": "mlx", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/FitResSummaryExamples.mlx", - "section_count": 1, - "figure_count": 0, - "detected_figure_count": 0, - "no_figure_utility": false, - "events": [] - }, - { - "topic": "FitResultExamples", - "source_type": "mlx", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/FitResultExamples.mlx", - "section_count": 1, - "figure_count": 0, - "detected_figure_count": 0, - "no_figure_utility": false, - "events": [] - }, - { - "topic": "HippocampalPlaceCellExample", - "source_type": "mlx", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/HippocampalPlaceCellExample.mlx", - "section_count": 5, - "figure_count": 9, - "detected_figure_count": 7, - "no_figure_utility": false, - "events": [ - { - "section_index": 1, - "section_line_index": 3, - "source_line_no": 902, - "source_snippet": "figure(1)", - "event_type": "new_figure", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "section_line_index": 4, - "source_line_no": 903, - "source_snippet": "plot(x,y,'b',neuron{exampleCell}.xN,neuron{exampleCell}.yN,'r.')", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 3, - "section_line_index": 5, - "source_line_no": 1604, - "source_snippet": "Summary.plotSummary", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 4, - "section_line_index": 52, - "source_line_no": 1952, - "source_snippet": "h4=figure(4)", - "event_type": "new_figure", - "figure_ordinal": 2 - }, - { - "section_index": 4, - "section_line_index": 60, - "source_line_no": 1960, - "source_snippet": "subplot(7,7,i)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 4, - "section_line_index": 62, - "source_line_no": 1962, - "source_snippet": "h6=figure(6)", - "event_type": "new_figure", - "figure_ordinal": 3 - }, - { - "section_index": 4, - "section_line_index": 70, - "source_line_no": 1970, - "source_snippet": "subplot(6,7,i)", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 4, - "section_line_index": 72, - "source_line_no": 1972, - "source_snippet": "pcolor(x_new,y_new,lambdaGaussian{i}), shading interp", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 4, - "section_line_index": 77, - "source_line_no": 1977, - "source_snippet": "h5=figure(5)", - "event_type": "new_figure", - "figure_ordinal": 4 - }, - { - "section_index": 4, - "section_line_index": 86, - "source_line_no": 1986, - "source_snippet": "subplot(7,7,i)", - "event_type": "add_to_current", - "figure_ordinal": 4 - }, - { - "section_index": 4, - "section_line_index": 88, - "source_line_no": 1988, - "source_snippet": "h7=figure(7)", - "event_type": "new_figure", - "figure_ordinal": 5 - }, - { - "section_index": 4, - "section_line_index": 96, - "source_line_no": 1996, - "source_snippet": "subplot(6,7,i)", - "event_type": "add_to_current", - "figure_ordinal": 5 - }, - { - "section_index": 4, - "section_line_index": 98, - "source_line_no": 1998, - "source_snippet": "pcolor(x_new,y_new,lambdaZernike{i}), shading interp", - "event_type": "add_to_current", - "figure_ordinal": 5 - }, - { - "section_index": 4, - "section_line_index": 124, - "source_line_no": 2024, - "source_snippet": "figure(8)", - "event_type": "new_figure", - "figure_ordinal": 6 - }, - { - "section_index": 4, - "section_line_index": 125, - "source_line_no": 2025, - "source_snippet": "plot(x,y,'b',neuron{exampleCell}.xN,neuron{exampleCell}.yN,'r.')", - "event_type": "add_to_current", - "figure_ordinal": 6 - }, - { - "section_index": 4, - "section_line_index": 129, - "source_line_no": 2029, - "source_snippet": "figure(9)", - "event_type": "new_figure", - "figure_ordinal": 7 - }, - { - "section_index": 4, - "section_line_index": 139, - "source_line_no": 2039, - "source_snippet": "plot(x,y,neuron{exampleCell}.xN,neuron{exampleCell}.yN,'r.')", - "event_type": "add_to_current", - "figure_ordinal": 7 - } - ] - }, - { - "topic": "HistoryExamples", - "source_type": "mlx", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/HistoryExamples.mlx", - "section_count": 3, - "figure_count": 3, - "detected_figure_count": 3, - "no_figure_utility": false, - "events": [ - { - "section_index": 1, - "section_line_index": 2, - "source_line_no": 701, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "section_line_index": 2, - "source_line_no": 701, - "source_snippet": "subplot(3,1,1)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "section_line_index": 2, - "source_line_no": 701, - "source_snippet": "h.plot", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "section_line_index": 3, - "source_line_no": 702, - "source_snippet": "subplot(3,1,2)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "section_line_index": 3, - "source_line_no": 702, - "source_snippet": "histn1.plot", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "section_line_index": 4, - "source_line_no": 703, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 2 - }, - { - "section_index": 1, - "section_line_index": 4, - "source_line_no": 703, - "source_snippet": "nst.plot", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 2, - "section_line_index": 14, - "source_line_no": 1501, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 3 - }, - { - "section_index": 2, - "section_line_index": 14, - "source_line_no": 1501, - "source_snippet": "histColl.plot", - "event_type": "add_to_current", - "figure_ordinal": 3 - } - ] - }, - { - "topic": "NetworkTutorial", - "source_type": "mlx", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/NetworkTutorial.mlx", - "section_count": 11, - "figure_count": 4, - "detected_figure_count": 2, - "no_figure_utility": false, - "events": [ - { - "section_index": 8, - "section_line_index": 23, - "source_line_no": 4122, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 1 - }, - { - "section_index": 8, - "section_line_index": 24, - "source_line_no": 4123, - "source_snippet": "subplot(2,1,1)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 8, - "section_line_index": 24, - "source_line_no": 4123, - "source_snippet": "sC.plot", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 8, - "section_line_index": 25, - "source_line_no": 4124, - "source_snippet": "subplot(2,1,2)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 8, - "section_line_index": 25, - "source_line_no": 4124, - "source_snippet": "stim.plot", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 10, - "section_line_index": 25, - "source_line_no": 4825, - "source_snippet": "c{3}.setName('Stim+Hist+EnsHist')", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 10, - "section_line_index": 56, - "source_line_no": 4856, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 2 - }, - { - "section_index": 10, - "section_line_index": 58, - "source_line_no": 4858, - "source_snippet": "subplot(1,2,1)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 10, - "section_line_index": 59, - "source_line_no": 4859, - "source_snippet": "imagesc(actNetwork,CLIM)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 10, - "section_line_index": 62, - "source_line_no": 4862, - "source_snippet": "subplot(1,2,2)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 10, - "section_line_index": 63, - "source_line_no": 4863, - "source_snippet": "imagesc(network1ms,CLIM)", - "event_type": "add_to_current", - "figure_ordinal": 2 - } - ] - }, - { - "topic": "PPSimExample", - "source_type": "mlx", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/PPSimExample.mlx", - "section_count": 9, - "figure_count": 3, - "detected_figure_count": 1, - "no_figure_utility": false, - "events": [ - { - "section_index": 4, - "section_line_index": 11, - "source_line_no": 2209, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 1 - }, - { - "section_index": 4, - "section_line_index": 12, - "source_line_no": 2210, - "source_snippet": "subplot(2,1,1)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 4, - "section_line_index": 12, - "source_line_no": 2210, - "source_snippet": "sC.plot", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 4, - "section_line_index": 13, - "source_line_no": 2211, - "source_snippet": "subplot(2,1,2)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 4, - "section_line_index": 13, - "source_line_no": 2211, - "source_snippet": "stim.plot", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 6, - "section_line_index": 10, - "source_line_no": 3801, - "source_snippet": "c{3}.setName('Stim+Hist')", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 8, - "section_line_index": 1, - "source_line_no": 4701, - "source_snippet": "Summary.plotSummary", - "event_type": "add_to_current", - "figure_ordinal": 1 - } - ] - }, - { - "topic": "PPThinning", - "source_type": "mlx", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/PPThinning.mlx", - "section_count": 4, - "figure_count": 3, - "detected_figure_count": 3, - "no_figure_utility": false, - "events": [ - { - "section_index": 2, - "section_line_index": 0, - "source_line_no": 700, - "source_snippet": "figure(1)", - "event_type": "new_figure", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "section_line_index": 3, - "source_line_no": 703, - "source_snippet": "subplot(2,2,1)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "section_line_index": 3, - "source_line_no": 703, - "source_snippet": "n1.plot", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "section_line_index": 3, - "source_line_no": 703, - "source_snippet": "plot(tSpikes,ones(size(tSpikes)),'.')", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "section_line_index": 5, - "source_line_no": 705, - "source_snippet": "subplot(2,2,2)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "section_line_index": 6, - "source_line_no": 706, - "source_snippet": "subplot(2,2,3)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "section_line_index": 6, - "source_line_no": 706, - "source_snippet": "n2.plot", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "section_line_index": 6, - "source_line_no": 706, - "source_snippet": "plot(tSpikes,ones(size(tSpikes)),'.')", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "section_line_index": 8, - "source_line_no": 708, - "source_snippet": "subplot(2,2,4)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "section_line_index": 10, - "source_line_no": 710, - "source_snippet": "figure(2)", - "event_type": "new_figure", - "figure_ordinal": 2 - }, - { - "section_index": 2, - "section_line_index": 11, - "source_line_no": 711, - "source_snippet": "n2.plot", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 2, - "section_line_index": 13, - "source_line_no": 713, - "source_snippet": "scaledProb.plot", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "section_line_index": 3, - "source_line_no": 1102, - "source_snippet": "figure(3)", - "event_type": "new_figure", - "figure_ordinal": 3 - }, - { - "section_index": 3, - "section_line_index": 4, - "source_line_no": 1103, - "source_snippet": "spikeColl.plot", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 3, - "section_line_index": 5, - "source_line_no": 1104, - "source_snippet": "lambda.plot", - "event_type": "add_to_current", - "figure_ordinal": 3 - } - ] - }, - { - "topic": "PSTHEstimation", - "source_type": "mlx", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/PSTHEstimation.mlx", - "section_count": 3, - "figure_count": 2, - "detected_figure_count": 2, - "no_figure_utility": false, - "events": [ - { - "section_index": 1, - "section_line_index": 10, - "source_line_no": 509, - "source_snippet": "spikeColl.plot", - "event_type": "new_figure", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "section_line_index": 11, - "source_line_no": 510, - "source_snippet": "lambda.plot", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "section_line_index": 0, - "source_line_no": 800, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 2 - }, - { - "section_index": 2, - "section_line_index": 5, - "source_line_no": 805, - "source_snippet": "h1=trueRate.plot", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 2, - "section_line_index": 6, - "source_line_no": 806, - "source_snippet": "h3=psthGLM.plot([],{{' ''k'',''Linewidth'',4'}})", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 2, - "section_line_index": 7, - "source_line_no": 807, - "source_snippet": "h2=psth.plot([],{{' ''rx'',''Linewidth'',4'}})", - "event_type": "add_to_current", - "figure_ordinal": 2 - } - ] - }, - { - "topic": "SignalObjExamples", - "source_type": "mlx", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/SignalObjExamples.mlx", - "section_count": 7, - "figure_count": 16, - "detected_figure_count": 16, - "no_figure_utility": false, - "events": [ - { - "section_index": 1, - "section_line_index": 6, - "source_line_no": 505, - "source_snippet": "subplot(2,1,1)", - "event_type": "new_figure", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "section_line_index": 6, - "source_line_no": 505, - "source_snippet": "s.plot", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "section_line_index": 7, - "source_line_no": 506, - "source_snippet": "subplot(2,1,2)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "section_line_index": 7, - "source_line_no": 506, - "source_snippet": "s1.plot", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "section_line_index": 10, - "source_line_no": 900, - "source_snippet": "subplot(2,1,1)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "section_line_index": 10, - "source_line_no": 900, - "source_snippet": "s.plot", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "section_line_index": 11, - "source_line_no": 901, - "source_snippet": "subplot(2,1,2)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "section_line_index": 11, - "source_line_no": 901, - "source_snippet": "s.plot", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "section_line_index": 16, - "source_line_no": 1202, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 2 - }, - { - "section_index": 1, - "section_line_index": 17, - "source_line_no": 1203, - "source_snippet": "s.getSubSignal({'v1'}).plot", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 2, - "section_line_index": 0, - "source_line_no": 1500, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 3 - }, - { - "section_index": 2, - "section_line_index": 2, - "source_line_no": 1502, - "source_snippet": "subplot(2,1,1)", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 2, - "section_line_index": 2, - "source_line_no": 1502, - "source_snippet": "s.plot", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 2, - "section_line_index": 3, - "source_line_no": 1503, - "source_snippet": "subplot(2,1,2)", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 2, - "section_line_index": 3, - "source_line_no": 1503, - "source_snippet": "s.plot", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 2, - "section_line_index": 4, - "source_line_no": 1700, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 4 - }, - { - "section_index": 2, - "section_line_index": 5, - "source_line_no": 1701, - "source_snippet": "subplot(2,1,1)", - "event_type": "add_to_current", - "figure_ordinal": 4 - }, - { - "section_index": 2, - "section_line_index": 5, - "source_line_no": 1701, - "source_snippet": "s.plot", - "event_type": "add_to_current", - "figure_ordinal": 4 - }, - { - "section_index": 2, - "section_line_index": 6, - "source_line_no": 1702, - "source_snippet": "subplot(2,1,2)", - "event_type": "add_to_current", - "figure_ordinal": 4 - }, - { - "section_index": 2, - "section_line_index": 6, - "source_line_no": 1702, - "source_snippet": "s.plot", - "event_type": "add_to_current", - "figure_ordinal": 4 - }, - { - "section_index": 2, - "section_line_index": 17, - "source_line_no": 2100, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 5 - }, - { - "section_index": 2, - "section_line_index": 19, - "source_line_no": 2102, - "source_snippet": "subplot(2,1,1)", - "event_type": "add_to_current", - "figure_ordinal": 5 - }, - { - "section_index": 2, - "section_line_index": 19, - "source_line_no": 2102, - "source_snippet": "s.plot('v1',{{' ''k'' '}})", - "event_type": "add_to_current", - "figure_ordinal": 5 - }, - { - "section_index": 2, - "section_line_index": 20, - "source_line_no": 2103, - "source_snippet": "subplot(2,1,2)", - "event_type": "add_to_current", - "figure_ordinal": 5 - }, - { - "section_index": 2, - "section_line_index": 20, - "source_line_no": 2103, - "source_snippet": "s.plot('all',{{' ''k'' '},{' ''-.g'' '}})", - "event_type": "add_to_current", - "figure_ordinal": 5 - }, - { - "section_index": 2, - "section_line_index": 21, - "source_line_no": 2300, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 6 - }, - { - "section_index": 2, - "section_line_index": 22, - "source_line_no": 2301, - "source_snippet": "subplot(2,1,1)", - "event_type": "add_to_current", - "figure_ordinal": 6 - }, - { - "section_index": 2, - "section_line_index": 22, - "source_line_no": 2301, - "source_snippet": "s.plot({'v1','v2'})", - "event_type": "add_to_current", - "figure_ordinal": 6 - }, - { - "section_index": 2, - "section_line_index": 23, - "source_line_no": 2302, - "source_snippet": "subplot(2,1,2)", - "event_type": "add_to_current", - "figure_ordinal": 6 - }, - { - "section_index": 2, - "section_line_index": 23, - "source_line_no": 2302, - "source_snippet": "s.plot({'v1','v2'},{{' ''k'' '},{' ''-.g'' '}})", - "event_type": "add_to_current", - "figure_ordinal": 6 - }, - { - "section_index": 3, - "section_line_index": 0, - "source_line_no": 2600, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 7 - }, - { - "section_index": 3, - "section_line_index": 3, - "source_line_no": 2603, - "source_snippet": "subplot(2,1,1)", - "event_type": "add_to_current", - "figure_ordinal": 7 - }, - { - "section_index": 3, - "section_line_index": 3, - "source_line_no": 2603, - "source_snippet": "s.plot", - "event_type": "add_to_current", - "figure_ordinal": 7 - }, - { - "section_index": 3, - "section_line_index": 4, - "source_line_no": 2604, - "source_snippet": "subplot(2,1,2)", - "event_type": "add_to_current", - "figure_ordinal": 7 - }, - { - "section_index": 3, - "section_line_index": 4, - "source_line_no": 2604, - "source_snippet": "s1.plot", - "event_type": "add_to_current", - "figure_ordinal": 7 - }, - { - "section_index": 3, - "section_line_index": 5, - "source_line_no": 2800, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 8 - }, - { - "section_index": 3, - "section_line_index": 6, - "source_line_no": 2801, - "source_snippet": "subplot(2,1,1)", - "event_type": "add_to_current", - "figure_ordinal": 8 - }, - { - "section_index": 3, - "section_line_index": 6, - "source_line_no": 2801, - "source_snippet": "s.getSigInTimeWindow(-2,3).plot", - "event_type": "add_to_current", - "figure_ordinal": 8 - }, - { - "section_index": 3, - "section_line_index": 7, - "source_line_no": 2802, - "source_snippet": "subplot(2,1,2)", - "event_type": "add_to_current", - "figure_ordinal": 8 - }, - { - "section_index": 3, - "section_line_index": 7, - "source_line_no": 2802, - "source_snippet": "s.plot", - "event_type": "add_to_current", - "figure_ordinal": 8 - }, - { - "section_index": 4, - "section_line_index": 1, - "source_line_no": 3101, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 9 - }, - { - "section_index": 4, - "section_line_index": 4, - "source_line_no": 3104, - "source_snippet": "s5.plot", - "event_type": "add_to_current", - "figure_ordinal": 9 - }, - { - "section_index": 4, - "section_line_index": 6, - "source_line_no": 3106, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 10 - }, - { - "section_index": 4, - "section_line_index": 8, - "source_line_no": 3108, - "source_snippet": "s2.plot", - "event_type": "add_to_current", - "figure_ordinal": 10 - }, - { - "section_index": 4, - "section_line_index": 10, - "source_line_no": 3400, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 11 - }, - { - "section_index": 4, - "section_line_index": 12, - "source_line_no": 3402, - "source_snippet": "s4.plot", - "event_type": "add_to_current", - "figure_ordinal": 11 - }, - { - "section_index": 4, - "section_line_index": 14, - "source_line_no": 3404, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 12 - }, - { - "section_index": 4, - "section_line_index": 15, - "source_line_no": 3405, - "source_snippet": "subplot(3,1,1)", - "event_type": "add_to_current", - "figure_ordinal": 12 - }, - { - "section_index": 4, - "section_line_index": 16, - "source_line_no": 3406, - "source_snippet": "s.integral.plot", - "event_type": "add_to_current", - "figure_ordinal": 12 - }, - { - "section_index": 4, - "section_line_index": 17, - "source_line_no": 3407, - "source_snippet": "subplot(3,1,2)", - "event_type": "add_to_current", - "figure_ordinal": 12 - }, - { - "section_index": 4, - "section_line_index": 18, - "source_line_no": 3408, - "source_snippet": "s.derivative.plot", - "event_type": "add_to_current", - "figure_ordinal": 12 - }, - { - "section_index": 4, - "section_line_index": 19, - "source_line_no": 3409, - "source_snippet": "subplot(3,1,3)", - "event_type": "add_to_current", - "figure_ordinal": 12 - }, - { - "section_index": 4, - "section_line_index": 21, - "source_line_no": 3411, - "source_snippet": "s6.plot", - "event_type": "add_to_current", - "figure_ordinal": 12 - }, - { - "section_index": 5, - "section_line_index": 1, - "source_line_no": 3701, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 13 - }, - { - "section_index": 5, - "section_line_index": 4, - "source_line_no": 3704, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 14 - }, - { - "section_index": 6, - "section_line_index": 6, - "source_line_no": 4105, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 15 - }, - { - "section_index": 6, - "section_line_index": 7, - "source_line_no": 4106, - "source_snippet": "subplot(2,1,1)", - "event_type": "add_to_current", - "figure_ordinal": 15 - }, - { - "section_index": 6, - "section_line_index": 7, - "source_line_no": 4106, - "source_snippet": "s.plot", - "event_type": "add_to_current", - "figure_ordinal": 15 - }, - { - "section_index": 6, - "section_line_index": 8, - "source_line_no": 4107, - "source_snippet": "subplot(2,1,2)", - "event_type": "add_to_current", - "figure_ordinal": 15 - }, - { - "section_index": 6, - "section_line_index": 11, - "source_line_no": 4400, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 16 - }, - { - "section_index": 6, - "section_line_index": 13, - "source_line_no": 4402, - "source_snippet": "subplot(3,1,1)", - "event_type": "add_to_current", - "figure_ordinal": 16 - }, - { - "section_index": 6, - "section_line_index": 15, - "source_line_no": 4404, - "source_snippet": "subplot(3,1,2)", - "event_type": "add_to_current", - "figure_ordinal": 16 - }, - { - "section_index": 6, - "section_line_index": 17, - "source_line_no": 4406, - "source_snippet": "subplot(3,1,3)", - "event_type": "add_to_current", - "figure_ordinal": 16 - } - ] - }, - { - "topic": "StimulusDecode2D", - "source_type": "mlx", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/StimulusDecode2D.mlx", - "section_count": 3, - "figure_count": 8, - "detected_figure_count": 4, - "no_figure_utility": false, - "events": [ - { - "section_index": 0, - "section_line_index": 20, - "source_line_no": 318, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 1 - }, - { - "section_index": 0, - "section_line_index": 21, - "source_line_no": 319, - "source_snippet": "plot(px,py)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "section_line_index": 28, - "source_line_no": 628, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 2 - }, - { - "section_index": 1, - "section_line_index": 30, - "source_line_no": 630, - "source_snippet": "lambda{i}.plot", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 1, - "section_line_index": 37, - "source_line_no": 637, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 3 - }, - { - "section_index": 1, - "section_line_index": 49, - "source_line_no": 649, - "source_snippet": "subplot(1,numRealizations,i)", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 1, - "section_line_index": 51, - "source_line_no": 651, - "source_snippet": "subplot(fact(1),fact(2),i)", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 1, - "section_line_index": 53, - "source_line_no": 653, - "source_snippet": "subplot(fact(1)*fact(2),fact(3),i)", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 1, - "section_line_index": 55, - "source_line_no": 655, - "source_snippet": "pcolor(X,Y,placeField{i}), shading interp", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 2, - "section_line_index": 21, - "source_line_no": 1118, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 4 - }, - { - "section_index": 2, - "section_line_index": 22, - "source_line_no": 1119, - "source_snippet": "plot(x_u(1,:),x_u(2,:),'b',px,py,'k')", - "event_type": "add_to_current", - "figure_ordinal": 4 - } - ] - }, - { - "topic": "TrialConfigExamples", - "source_type": "mlx", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/TrialConfigExamples.mlx", - "section_count": 1, - "figure_count": 0, - "detected_figure_count": 0, - "no_figure_utility": false, - "events": [] - }, - { - "topic": "TrialExamples", - "source_type": "mlx", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/TrialExamples.mlx", - "section_count": 3, - "figure_count": 6, - "detected_figure_count": 6, - "no_figure_utility": false, - "events": [ - { - "section_index": 1, - "section_line_index": 5, - "source_line_no": 602, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "section_line_index": 5, - "source_line_no": 602, - "source_snippet": "h.plot", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "section_line_index": 10, - "source_line_no": 903, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 2 - }, - { - "section_index": 1, - "section_line_index": 10, - "source_line_no": 903, - "source_snippet": "cc.plot", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 1, - "section_line_index": 15, - "source_line_no": 1203, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 3 - }, - { - "section_index": 1, - "section_line_index": 15, - "source_line_no": 1203, - "source_snippet": "e.plot", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 1, - "section_line_index": 23, - "source_line_no": 1506, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 4 - }, - { - "section_index": 1, - "section_line_index": 23, - "source_line_no": 1506, - "source_snippet": "spikeColl.plot", - "event_type": "add_to_current", - "figure_ordinal": 4 - }, - { - "section_index": 1, - "section_line_index": 26, - "source_line_no": 1801, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 5 - }, - { - "section_index": 1, - "section_line_index": 26, - "source_line_no": 1801, - "source_snippet": "trial1.plot", - "event_type": "add_to_current", - "figure_ordinal": 5 - }, - { - "section_index": 1, - "section_line_index": 29, - "source_line_no": 2101, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 6 - }, - { - "section_index": 1, - "section_line_index": 29, - "source_line_no": 2101, - "source_snippet": "trial1.plot", - "event_type": "add_to_current", - "figure_ordinal": 6 - } - ] - }, - { - "topic": "ValidationDataSet", - "source_type": "mlx", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/ValidationDataSet.mlx", - "section_count": 3, - "figure_count": 9, - "detected_figure_count": 3, - "no_figure_utility": false, - "events": [ - { - "section_index": 1, - "section_line_index": 37, - "source_line_no": 1701, - "source_snippet": "subplot(2,4,[5 6])", - "event_type": "new_figure", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "section_line_index": 37, - "source_line_no": 1701, - "source_snippet": "plot(mu,'ro', 'MarkerSize',10)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "section_line_index": 38, - "source_line_no": 1702, - "source_snippet": "subplot(2,4,[5 6])", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "section_line_index": 38, - "source_line_no": 1702, - "source_snippet": "plot(mu,'ro', 'MarkerSize',10)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "section_line_index": 39, - "source_line_no": 1703, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 2 - }, - { - "section_index": 1, - "section_line_index": 40, - "source_line_no": 1704, - "source_snippet": "subplot(1,2,1)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 1, - "section_line_index": 40, - "source_line_no": 1704, - "source_snippet": "results{1}.lambda.plot", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 1, - "section_line_index": 40, - "source_line_no": 1704, - "source_snippet": "plot(results{1}.lambda.time,lambda*ones(length(results{1}.lambda.time),1),'r-.','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 1, - "section_line_index": 41, - "source_line_no": 1705, - "source_snippet": "subplot(1,2,2)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 1, - "section_line_index": 41, - "source_line_no": 1705, - "source_snippet": "results{2}.lambda.plot", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 1, - "section_line_index": 41, - "source_line_no": 1705, - "source_snippet": "plot(results{2}.lambda.time,lambda*ones(length(results{2}.lambda.time),1),'r-.','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 2, - "section_line_index": 53, - "source_line_no": 3003, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 3 - }, - { - "section_index": 2, - "section_line_index": 54, - "source_line_no": 3004, - "source_snippet": "subplot(1,2,1)", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 2, - "section_line_index": 54, - "source_line_no": 3004, - "source_snippet": "results{1}.lambda.plot", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 2, - "section_line_index": 55, - "source_line_no": 3005, - "source_snippet": "subplot(1,2,2)", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 2, - "section_line_index": 55, - "source_line_no": 3005, - "source_snippet": "results{2}.lambda.plot", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 2, - "section_line_index": 58, - "source_line_no": 3301, - "source_snippet": "Summary.plotSummary", - "event_type": "add_to_current", - "figure_ordinal": 3 - } - ] - }, - { - "topic": "mEPSCAnalysis", - "source_type": "mlx", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/mEPSCAnalysis.mlx", - "section_count": 9, - "figure_count": 4, - "detected_figure_count": 2, - "no_figure_utility": false, - "events": [ - { - "section_index": 2, - "section_line_index": 24, - "source_line_no": 1823, - "source_snippet": "results.plotResults", - "event_type": "new_figure", - "figure_ordinal": 1 - }, - { - "section_index": 4, - "section_line_index": 1, - "source_line_no": 2600, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 2 - }, - { - "section_index": 4, - "section_line_index": 2, - "source_line_no": 2601, - "source_snippet": "nst.plot", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 7, - "section_line_index": 2, - "source_line_no": 3601, - "source_snippet": "results.plotResults", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 7, - "section_line_index": 4, - "source_line_no": 3603, - "source_snippet": "Summary.plotSummary", - "event_type": "add_to_current", - "figure_ordinal": 2 - } - ] - }, - { - "topic": "nSTATPaperExamples", - "source_type": "mlx", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/nSTATPaperExamples.mlx", - "section_count": 31, - "figure_count": 25, - "detected_figure_count": 25, - "no_figure_utility": false, - "events": [ - { - "section_index": 2, - "section_line_index": 37, - "source_line_no": 1036, - "source_snippet": "h=figure('OuterPosition',[scrsz(3)*.01 scrsz(4)*.04 ...", - "event_type": "new_figure", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "section_line_index": 40, - "source_line_no": 1039, - "source_snippet": "subplot(2,2,1)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "section_line_index": 40, - "source_line_no": 1039, - "source_snippet": "spikeColl.plot", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "section_line_index": 49, - "source_line_no": 1048, - "source_snippet": "subplot(2,2,3)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "section_line_index": 49, - "source_line_no": 1048, - "source_snippet": "results.KSPlot", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "section_line_index": 50, - "source_line_no": 1049, - "source_snippet": "subplot(2,2,2)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "section_line_index": 51, - "source_line_no": 1050, - "source_snippet": "subplot(2,2,4)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "section_line_index": 51, - "source_line_no": 1050, - "source_snippet": "results.lambda.plot([],{{' ''b'' ,''Linewidth'',2'}})", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 4, - "section_line_index": 2, - "source_line_no": 1801, - "source_snippet": "h=figure('OuterPosition',[scrsz(3)*.01 scrsz(4)*.04 scrsz(3)*.6 ...", - "event_type": "new_figure", - "figure_ordinal": 2 - }, - { - "section_index": 4, - "section_line_index": 5, - "source_line_no": 1804, - "source_snippet": "subplot(2,1,1)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 4, - "section_line_index": 6, - "source_line_no": 1805, - "source_snippet": "nstConst.plot", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 4, - "section_line_index": 14, - "source_line_no": 1813, - "source_snippet": "subplot(2,1,2)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 4, - "section_line_index": 15, - "source_line_no": 1814, - "source_snippet": "nst.plot", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 7, - "section_line_index": 9, - "source_line_no": 3004, - "source_snippet": "h=figure('OuterPosition',[scrsz(3)*.01 scrsz(4)*.04 ...", - "event_type": "new_figure", - "figure_ordinal": 3 - }, - { - "section_index": 7, - "section_line_index": 12, - "source_line_no": 3007, - "source_snippet": "subplot(2,2,1)", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 7, - "section_line_index": 12, - "source_line_no": 3007, - "source_snippet": "spikeColl.plot", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 7, - "section_line_index": 24, - "source_line_no": 3019, - "source_snippet": "plot([495", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 7, - "section_line_index": 25, - "source_line_no": 3020, - "source_snippet": "plot([765", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 7, - "section_line_index": 27, - "source_line_no": 3022, - "source_snippet": "subplot(2,2,3)", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 7, - "section_line_index": 27, - "source_line_no": 3022, - "source_snippet": "results.KSPlot", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 7, - "section_line_index": 28, - "source_line_no": 3023, - "source_snippet": "subplot(2,2,2)", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 7, - "section_line_index": 29, - "source_line_no": 3024, - "source_snippet": "subplot(2,2,4)", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 7, - "section_line_index": 30, - "source_line_no": 3025, - "source_snippet": "results.lambda.getSubSignal(1).plot([],{{' ''b'' ,''Linewidth'',2'}})", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 7, - "section_line_index": 31, - "source_line_no": 3026, - "source_snippet": "results.lambda.getSubSignal(2).plot([],{{' ''g'' ,''Linewidth'',2'}})", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 9, - "section_line_index": 29, - "source_line_no": 3628, - "source_snippet": "h=figure('Position',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.8 scrsz(4)*.8])", - "event_type": "new_figure", - "figure_ordinal": 4 - }, - { - "section_index": 9, - "section_line_index": 30, - "source_line_no": 3629, - "source_snippet": "subplot(3,1,1)", - "event_type": "add_to_current", - "figure_ordinal": 4 - }, - { - "section_index": 9, - "section_line_index": 32, - "source_line_no": 3631, - "source_snippet": "nst2.plot", - "event_type": "add_to_current", - "figure_ordinal": 4 - }, - { - "section_index": 9, - "section_line_index": 42, - "source_line_no": 3641, - "source_snippet": "subplot(3,1,2)", - "event_type": "add_to_current", - "figure_ordinal": 4 - }, - { - "section_index": 9, - "section_line_index": 43, - "source_line_no": 3642, - "source_snippet": "stim.getSigInTimeWindow(0,21).plot([],{{' ''k'' '}})", - "event_type": "add_to_current", - "figure_ordinal": 4 - }, - { - "section_index": 9, - "section_line_index": 56, - "source_line_no": 3655, - "source_snippet": "subplot(3,1,3)", - "event_type": "add_to_current", - "figure_ordinal": 4 - }, - { - "section_index": 9, - "section_line_index": 57, - "source_line_no": 3656, - "source_snippet": "stim.derivative.getSigInTimeWindow(0,21).plot([],{{' ''k'' '}})", - "event_type": "add_to_current", - "figure_ordinal": 4 - }, - { - "section_index": 9, - "section_line_index": 81, - "source_line_no": 3910, - "source_snippet": "h=figure('Position',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.8 scrsz(4)*.8])", - "event_type": "new_figure", - "figure_ordinal": 5 - }, - { - "section_index": 9, - "section_line_index": 83, - "source_line_no": 3912, - "source_snippet": "subplot(7,2,[1 3 5])", - "event_type": "add_to_current", - "figure_ordinal": 5 - }, - { - "section_index": 9, - "section_line_index": 84, - "source_line_no": 3913, - "source_snippet": "results.Residual.xcov(stim).windowedSignal([0,1]).plot", - "event_type": "add_to_current", - "figure_ordinal": 5 - }, - { - "section_index": 9, - "section_line_index": 92, - "source_line_no": 3921, - "source_snippet": "h=plot(ShiftTime,m,'ro','Linewidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 5 - }, - { - "section_index": 11, - "section_line_index": 34, - "source_line_no": 4733, - "source_snippet": "subplot(7,2,2)", - "event_type": "add_to_current", - "figure_ordinal": 5 - }, - { - "section_index": 11, - "section_line_index": 36, - "source_line_no": 4735, - "source_snippet": "plot(x,results{1}.KSStats.ks_stat,'.-')", - "event_type": "add_to_current", - "figure_ordinal": 5 - }, - { - "section_index": 11, - "section_line_index": 37, - "source_line_no": 4736, - "source_snippet": "plot(x(windowIndex),results{1}.KSStats.ks_stat(windowIndex),'r*')", - "event_type": "add_to_current", - "figure_ordinal": 5 - }, - { - "section_index": 11, - "section_line_index": 51, - "source_line_no": 4750, - "source_snippet": "subplot(7,2,4)", - "event_type": "add_to_current", - "figure_ordinal": 5 - }, - { - "section_index": 11, - "section_line_index": 51, - "source_line_no": 4750, - "source_snippet": "plot(x,dAIC,'.-')", - "event_type": "add_to_current", - "figure_ordinal": 5 - }, - { - "section_index": 11, - "section_line_index": 57, - "source_line_no": 4756, - "source_snippet": "plot(x(windowIndex),dAIC(windowIndex),'r*')", - "event_type": "add_to_current", - "figure_ordinal": 5 - }, - { - "section_index": 11, - "section_line_index": 60, - "source_line_no": 4759, - "source_snippet": "subplot(7,2,6)", - "event_type": "add_to_current", - "figure_ordinal": 5 - }, - { - "section_index": 11, - "section_line_index": 60, - "source_line_no": 4759, - "source_snippet": "plot(x,dBIC,'.-')", - "event_type": "add_to_current", - "figure_ordinal": 5 - }, - { - "section_index": 11, - "section_line_index": 63, - "source_line_no": 4762, - "source_snippet": "plot(x(windowIndex),dBIC(windowIndex),'r*')", - "event_type": "add_to_current", - "figure_ordinal": 5 - }, - { - "section_index": 11, - "section_line_index": 85, - "source_line_no": 4784, - "source_snippet": "c{3}.setName('Baseline+Stimulus+Hist')", - "event_type": "add_to_current", - "figure_ordinal": 5 - }, - { - "section_index": 11, - "section_line_index": 91, - "source_line_no": 4790, - "source_snippet": "'\\lambda_{const+stim+hist}'})", - "event_type": "add_to_current", - "figure_ordinal": 5 - }, - { - "section_index": 11, - "section_line_index": 92, - "source_line_no": 4791, - "source_snippet": "subplot(7,2,[9 11 13])", - "event_type": "add_to_current", - "figure_ordinal": 5 - }, - { - "section_index": 11, - "section_line_index": 92, - "source_line_no": 4791, - "source_snippet": "results.KSPlot", - "event_type": "add_to_current", - "figure_ordinal": 5 - }, - { - "section_index": 11, - "section_line_index": 93, - "source_line_no": 4792, - "source_snippet": "subplot(7,2,[10 12 14])", - "event_type": "add_to_current", - "figure_ordinal": 5 - }, - { - "section_index": 12, - "section_line_index": 23, - "source_line_no": 5023, - "source_snippet": "h=figure('Position',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.8 scrsz(4)*.8])", - "event_type": "new_figure", - "figure_ordinal": 6 - }, - { - "section_index": 12, - "section_line_index": 25, - "source_line_no": 5025, - "source_snippet": "subplot(2,2,3)", - "event_type": "add_to_current", - "figure_ordinal": 6 - }, - { - "section_index": 12, - "section_line_index": 25, - "source_line_no": 5025, - "source_snippet": "spikeCollSim.plot", - "event_type": "add_to_current", - "figure_ordinal": 6 - }, - { - "section_index": 12, - "section_line_index": 34, - "source_line_no": 5034, - "source_snippet": "subplot(2,2,1)", - "event_type": "add_to_current", - "figure_ordinal": 6 - }, - { - "section_index": 12, - "section_line_index": 34, - "source_line_no": 5034, - "source_snippet": "lambda.plot", - "event_type": "add_to_current", - "figure_ordinal": 6 - }, - { - "section_index": 12, - "section_line_index": 53, - "source_line_no": 5053, - "source_snippet": "subplot(2,2,2)", - "event_type": "add_to_current", - "figure_ordinal": 6 - }, - { - "section_index": 12, - "section_line_index": 53, - "source_line_no": 5053, - "source_snippet": "spikeCollReal1.plot", - "event_type": "add_to_current", - "figure_ordinal": 6 - }, - { - "section_index": 12, - "section_line_index": 72, - "source_line_no": 5072, - "source_snippet": "subplot(2,2,4)", - "event_type": "add_to_current", - "figure_ordinal": 6 - }, - { - "section_index": 12, - "section_line_index": 72, - "source_line_no": 5072, - "source_snippet": "spikeCollReal2.plot", - "event_type": "add_to_current", - "figure_ordinal": 6 - }, - { - "section_index": 13, - "section_line_index": 3, - "source_line_no": 5303, - "source_snippet": "h=figure('Position',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.8 scrsz(4)*.8])", - "event_type": "new_figure", - "figure_ordinal": 7 - }, - { - "section_index": 13, - "section_line_index": 9, - "source_line_no": 5309, - "source_snippet": "subplot(2,3,4)", - "event_type": "add_to_current", - "figure_ordinal": 7 - }, - { - "section_index": 13, - "section_line_index": 11, - "source_line_no": 5311, - "source_snippet": "h1=true.plot([],{{' ''b'',''Linewidth'',4'}})", - "event_type": "add_to_current", - "figure_ordinal": 7 - }, - { - "section_index": 13, - "section_line_index": 12, - "source_line_no": 5312, - "source_snippet": "h3=psthGLM.plot([],{{' ''k'',''Linewidth'',4'}})", - "event_type": "add_to_current", - "figure_ordinal": 7 - }, - { - "section_index": 13, - "section_line_index": 13, - "source_line_no": 5313, - "source_snippet": "h2=psth.plot([],{{' ''rx'',''Linewidth'',4'}})", - "event_type": "add_to_current", - "figure_ordinal": 7 - }, - { - "section_index": 13, - "section_line_index": 27, - "source_line_no": 5327, - "source_snippet": "subplot(2,3,1)", - "event_type": "add_to_current", - "figure_ordinal": 7 - }, - { - "section_index": 13, - "section_line_index": 27, - "source_line_no": 5327, - "source_snippet": "spikeCollSim.plot", - "event_type": "add_to_current", - "figure_ordinal": 7 - }, - { - "section_index": 13, - "section_line_index": 34, - "source_line_no": 5334, - "source_snippet": "subplot(2,3,5)", - "event_type": "add_to_current", - "figure_ordinal": 7 - }, - { - "section_index": 13, - "section_line_index": 39, - "source_line_no": 5339, - "source_snippet": "h3=psthGLMReal1.plot([],{{' ''k'',''Linewidth'',4'}})", - "event_type": "add_to_current", - "figure_ordinal": 7 - }, - { - "section_index": 13, - "section_line_index": 40, - "source_line_no": 5340, - "source_snippet": "h2=psthReal1.plot([],{{' ''rx'',''Linewidth'',4'}})", - "event_type": "add_to_current", - "figure_ordinal": 7 - }, - { - "section_index": 13, - "section_line_index": 49, - "source_line_no": 5349, - "source_snippet": "subplot(2,3,2)", - "event_type": "add_to_current", - "figure_ordinal": 7 - }, - { - "section_index": 13, - "section_line_index": 49, - "source_line_no": 5349, - "source_snippet": "spikeCollReal1.plot", - "event_type": "add_to_current", - "figure_ordinal": 7 - }, - { - "section_index": 13, - "section_line_index": 55, - "source_line_no": 5355, - "source_snippet": "subplot(2,3,6)", - "event_type": "add_to_current", - "figure_ordinal": 7 - }, - { - "section_index": 13, - "section_line_index": 58, - "source_line_no": 5358, - "source_snippet": "h3=psthGLMReal2.plot([],{{' ''k'',''Linewidth'',4'}})", - "event_type": "add_to_current", - "figure_ordinal": 7 - }, - { - "section_index": 13, - "section_line_index": 59, - "source_line_no": 5359, - "source_snippet": "h2=psthReal2.plot([],{{' ''rx'',''Linewidth'',4'}})", - "event_type": "add_to_current", - "figure_ordinal": 7 - }, - { - "section_index": 13, - "section_line_index": 69, - "source_line_no": 5369, - "source_snippet": "subplot(2,3,3)", - "event_type": "add_to_current", - "figure_ordinal": 7 - }, - { - "section_index": 13, - "section_line_index": 69, - "source_line_no": 5369, - "source_snippet": "spikeCollReal2.plot", - "event_type": "add_to_current", - "figure_ordinal": 7 - }, - { - "section_index": 15, - "section_line_index": 2, - "source_line_no": 6002, - "source_snippet": "h=figure('Position',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.8 scrsz(4)*.8])", - "event_type": "new_figure", - "figure_ordinal": 8 - }, - { - "section_index": 15, - "section_line_index": 5, - "source_line_no": 6005, - "source_snippet": "subplot(3,2,[3 4])", - "event_type": "add_to_current", - "figure_ordinal": 8 - }, - { - "section_index": 15, - "section_line_index": 5, - "source_line_no": 6005, - "source_snippet": "spikeColl.plot", - "event_type": "add_to_current", - "figure_ordinal": 8 - }, - { - "section_index": 15, - "section_line_index": 26, - "source_line_no": 6026, - "source_snippet": "subplot(3,2,1)", - "event_type": "add_to_current", - "figure_ordinal": 8 - }, - { - "section_index": 15, - "section_line_index": 26, - "source_line_no": 6026, - "source_snippet": "plot(time,u,'k','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 8 - }, - { - "section_index": 15, - "section_line_index": 35, - "source_line_no": 6035, - "source_snippet": "subplot(3,2,2)", - "event_type": "add_to_current", - "figure_ordinal": 8 - }, - { - "section_index": 15, - "section_line_index": 35, - "source_line_no": 6035, - "source_snippet": "plot(1:length(b1),b1,'k','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 8 - }, - { - "section_index": 15, - "section_line_index": 43, - "source_line_no": 6043, - "source_snippet": "subplot(3,2,[5 6])", - "event_type": "add_to_current", - "figure_ordinal": 8 - }, - { - "section_index": 15, - "section_line_index": 44, - "source_line_no": 6044, - "source_snippet": "imagesc(stimData'./delta); set(gca, 'YDir','normal');", - "event_type": "add_to_current", - "figure_ordinal": 8 - }, - { - "section_index": 17, - "section_line_index": 30, - "source_line_no": 7004, - "source_snippet": "h=figure('Position',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.8 scrsz(4)*.8])", - "event_type": "new_figure", - "figure_ordinal": 9 - }, - { - "section_index": 17, - "section_line_index": 31, - "source_line_no": 7005, - "source_snippet": "subplot(2,2,1)", - "event_type": "add_to_current", - "figure_ordinal": 9 - }, - { - "section_index": 17, - "section_line_index": 31, - "source_line_no": 7005, - "source_snippet": "t.KSPlot", - "event_type": "add_to_current", - "figure_ordinal": 9 - }, - { - "section_index": 17, - "section_line_index": 32, - "source_line_no": 7006, - "source_snippet": "subplot(2,2,2)", - "event_type": "add_to_current", - "figure_ordinal": 9 - }, - { - "section_index": 17, - "section_line_index": 32, - "source_line_no": 7006, - "source_snippet": "t.plotResidual", - "event_type": "add_to_current", - "figure_ordinal": 9 - }, - { - "section_index": 17, - "section_line_index": 33, - "source_line_no": 7007, - "source_snippet": "subplot(2,2,3)", - "event_type": "add_to_current", - "figure_ordinal": 9 - }, - { - "section_index": 17, - "section_line_index": 34, - "source_line_no": 7008, - "source_snippet": "subplot(2,2,4)", - "event_type": "add_to_current", - "figure_ordinal": 9 - }, - { - "section_index": 17, - "section_line_index": 70, - "source_line_no": 7230, - "source_snippet": "h=figure('OuterPosition',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.4 scrsz(4)*.8])", - "event_type": "new_figure", - "figure_ordinal": 10 - }, - { - "section_index": 17, - "section_line_index": 74, - "source_line_no": 7234, - "source_snippet": "subplot(3,1,[1 2 3])", - "event_type": "add_to_current", - "figure_ordinal": 10 - }, - { - "section_index": 17, - "section_line_index": 76, - "source_line_no": 7236, - "source_snippet": "surf((1:length(b1))',stim.time,actStimEffect,'FaceAlpha',0.1,...", - "event_type": "add_to_current", - "figure_ordinal": 10 - }, - { - "section_index": 17, - "section_line_index": 82, - "source_line_no": 7242, - "source_snippet": "surf((1:length(b1))',stim.time,estStimEffect(:,1:length(b1)),...", - "event_type": "add_to_current", - "figure_ordinal": 10 - }, - { - "section_index": 17, - "section_line_index": 92, - "source_line_no": 7252, - "source_snippet": "h=figure('OuterPosition',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.4 scrsz(4)*.8])", - "event_type": "new_figure", - "figure_ordinal": 11 - }, - { - "section_index": 17, - "section_line_index": 95, - "source_line_no": 7255, - "source_snippet": "subplot(3,1,1)", - "event_type": "add_to_current", - "figure_ordinal": 11 - }, - { - "section_index": 17, - "section_line_index": 113, - "source_line_no": 7273, - "source_snippet": "subplot(3,1,2)", - "event_type": "add_to_current", - "figure_ordinal": 11 - }, - { - "section_index": 17, - "section_line_index": 130, - "source_line_no": 7290, - "source_snippet": "subplot(3,1,3)", - "event_type": "add_to_current", - "figure_ordinal": 11 - }, - { - "section_index": 18, - "section_line_index": 23, - "source_line_no": 7523, - "source_snippet": "h=figure('OuterPosition',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.8 scrsz(4)*.8])", - "event_type": "new_figure", - "figure_ordinal": 12 - }, - { - "section_index": 18, - "section_line_index": 25, - "source_line_no": 7525, - "source_snippet": "subplot(2,3,1)", - "event_type": "add_to_current", - "figure_ordinal": 12 - }, - { - "section_index": 18, - "section_line_index": 28, - "source_line_no": 7528, - "source_snippet": "spikeRateBinom.plot([],{{' ''k'',''Linewidth'',4'}})", - "event_type": "add_to_current", - "figure_ordinal": 12 - }, - { - "section_index": 18, - "section_line_index": 32, - "source_line_no": 7532, - "source_snippet": "plot(lt*[1", - "event_type": "add_to_current", - "figure_ordinal": 12 - }, - { - "section_index": 18, - "section_line_index": 42, - "source_line_no": 7542, - "source_snippet": "h=subplot(2,3,[2 3 5 6])", - "event_type": "add_to_current", - "figure_ordinal": 12 - }, - { - "section_index": 18, - "section_line_index": 45, - "source_line_no": 7545, - "source_snippet": "imagesc(ProbMat)", - "event_type": "add_to_current", - "figure_ordinal": 12 - }, - { - "section_index": 18, - "section_line_index": 49, - "source_line_no": 7549, - "source_snippet": "plot3(m,k,1,'r*')", - "event_type": "add_to_current", - "figure_ordinal": 12 - }, - { - "section_index": 18, - "section_line_index": 59, - "source_line_no": 7559, - "source_snippet": "subplot(2,3,4)", - "event_type": "add_to_current", - "figure_ordinal": 12 - }, - { - "section_index": 18, - "section_line_index": 76, - "source_line_no": 7576, - "source_snippet": "h1=stim1.plot([],{{' ''k'',''Linewidth'',4'}})", - "event_type": "add_to_current", - "figure_ordinal": 12 - }, - { - "section_index": 18, - "section_line_index": 77, - "source_line_no": 7577, - "source_snippet": "h2=stimlt.plot([],{{' ''r'',''Linewidth'',4'}})", - "event_type": "add_to_current", - "figure_ordinal": 12 - }, - { - "section_index": 20, - "section_line_index": 7, - "source_line_no": 8406, - "source_snippet": "h=figure('OuterPosition',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.6 scrsz(4)*.9])", - "event_type": "new_figure", - "figure_ordinal": 13 - }, - { - "section_index": 20, - "section_line_index": 10, - "source_line_no": 8409, - "source_snippet": "subplot(2,2,i)", - "event_type": "add_to_current", - "figure_ordinal": 13 - }, - { - "section_index": 20, - "section_line_index": 11, - "source_line_no": 8410, - "source_snippet": "h1=plot(x,y,'b','Linewidth',.5)", - "event_type": "add_to_current", - "figure_ordinal": 13 - }, - { - "section_index": 20, - "section_line_index": 12, - "source_line_no": 8411, - "source_snippet": "h2=plot(neuron{exampleCell(i)}.xN,neuron{exampleCell(i)}.yN,'r.',...", - "event_type": "add_to_current", - "figure_ordinal": 13 - }, - { - "section_index": 22, - "section_line_index": 12, - "source_line_no": 9302, - "source_snippet": "h=figure('OuterPosition',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.6 scrsz(4)*.5])", - "event_type": "new_figure", - "figure_ordinal": 14 - }, - { - "section_index": 22, - "section_line_index": 13, - "source_line_no": 9303, - "source_snippet": "subplot(1,3,1)", - "event_type": "add_to_current", - "figure_ordinal": 14 - }, - { - "section_index": 22, - "section_line_index": 24, - "source_line_no": 9314, - "source_snippet": "subplot(1,3,2)", - "event_type": "add_to_current", - "figure_ordinal": 14 - }, - { - "section_index": 22, - "section_line_index": 33, - "source_line_no": 9323, - "source_snippet": "subplot(1,3,3)", - "event_type": "add_to_current", - "figure_ordinal": 14 - }, - { - "section_index": 23, - "section_line_index": 53, - "source_line_no": 9653, - "source_snippet": "h4=figure(4)", - "event_type": "new_figure", - "figure_ordinal": 15 - }, - { - "section_index": 23, - "section_line_index": 64, - "source_line_no": 9664, - "source_snippet": "subplot(7,7,i)", - "event_type": "add_to_current", - "figure_ordinal": 15 - }, - { - "section_index": 23, - "section_line_index": 66, - "source_line_no": 9666, - "source_snippet": "h6=figure(6)", - "event_type": "new_figure", - "figure_ordinal": 16 - }, - { - "section_index": 23, - "section_line_index": 77, - "source_line_no": 9677, - "source_snippet": "subplot(6,7,i)", - "event_type": "add_to_current", - "figure_ordinal": 16 - }, - { - "section_index": 23, - "section_line_index": 79, - "source_line_no": 9679, - "source_snippet": "pcolor(x_new,y_new,lambdaGaussian{i}), shading interp", - "event_type": "add_to_current", - "figure_ordinal": 16 - }, - { - "section_index": 23, - "section_line_index": 84, - "source_line_no": 9684, - "source_snippet": "h5=figure(5)", - "event_type": "new_figure", - "figure_ordinal": 17 - }, - { - "section_index": 23, - "section_line_index": 95, - "source_line_no": 9695, - "source_snippet": "subplot(7,7,i)", - "event_type": "add_to_current", - "figure_ordinal": 17 - }, - { - "section_index": 23, - "section_line_index": 97, - "source_line_no": 9697, - "source_snippet": "h7=figure(7)", - "event_type": "new_figure", - "figure_ordinal": 18 - }, - { - "section_index": 23, - "section_line_index": 108, - "source_line_no": 9708, - "source_snippet": "subplot(6,7,i)", - "event_type": "add_to_current", - "figure_ordinal": 18 - }, - { - "section_index": 23, - "section_line_index": 110, - "source_line_no": 9710, - "source_snippet": "pcolor(x_new,y_new,lambdaZernike{i}), shading interp", - "event_type": "add_to_current", - "figure_ordinal": 18 - }, - { - "section_index": 23, - "section_line_index": 141, - "source_line_no": 9823, - "source_snippet": "h9=figure(9)", - "event_type": "new_figure", - "figure_ordinal": 19 - }, - { - "section_index": 23, - "section_line_index": 153, - "source_line_no": 9835, - "source_snippet": "plot(x,y,neuron{exampleCell}.xN,neuron{exampleCell}.yN,'r.')", - "event_type": "add_to_current", - "figure_ordinal": 19 - }, - { - "section_index": 25, - "section_line_index": 29, - "source_line_no": 10329, - "source_snippet": "h=figure('Position',[scrsz(3)*.1 scrsz(4)*.1 ...", - "event_type": "new_figure", - "figure_ordinal": 20 - }, - { - "section_index": 25, - "section_line_index": 32, - "source_line_no": 10332, - "source_snippet": "subplot(3,1,1)", - "event_type": "add_to_current", - "figure_ordinal": 20 - }, - { - "section_index": 25, - "section_line_index": 32, - "source_line_no": 10332, - "source_snippet": "plot(time,x,'k')", - "event_type": "add_to_current", - "figure_ordinal": 20 - }, - { - "section_index": 25, - "section_line_index": 38, - "source_line_no": 10338, - "source_snippet": "subplot(3,1,2)", - "event_type": "add_to_current", - "figure_ordinal": 20 - }, - { - "section_index": 25, - "section_line_index": 38, - "source_line_no": 10338, - "source_snippet": "lambda.plot([],{{' ''k'',''Linewidth'',1'}})", - "event_type": "add_to_current", - "figure_ordinal": 20 - }, - { - "section_index": 25, - "section_line_index": 48, - "source_line_no": 10348, - "source_snippet": "subplot(3,1,3)", - "event_type": "add_to_current", - "figure_ordinal": 20 - }, - { - "section_index": 25, - "section_line_index": 48, - "source_line_no": 10348, - "source_snippet": "spikeColl.plot", - "event_type": "add_to_current", - "figure_ordinal": 20 - }, - { - "section_index": 25, - "section_line_index": 80, - "source_line_no": 10517, - "source_snippet": "h=figure('Position',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.8 scrsz(4)*.6])", - "event_type": "new_figure", - "figure_ordinal": 21 - }, - { - "section_index": 25, - "section_line_index": 95, - "source_line_no": 10532, - "source_snippet": "hEst = estimatedStimulus.plot([],{{' ''k'',''Linewidth'',4'}})", - "event_type": "add_to_current", - "figure_ordinal": 21 - }, - { - "section_index": 25, - "section_line_index": 96, - "source_line_no": 10533, - "source_snippet": "hStim=stim.plot([],{{' ''b'',''Linewidth'',4'}})", - "event_type": "add_to_current", - "figure_ordinal": 21 - }, - { - "section_index": 26, - "section_line_index": 52, - "source_line_no": 10951, - "source_snippet": "fig1=figure('OuterPosition',[scrsz(3)*.1 scrsz(4)*.1 ...", - "event_type": "new_figure", - "figure_ordinal": 22 - }, - { - "section_index": 26, - "section_line_index": 55, - "source_line_no": 10954, - "source_snippet": "subplot(4,2,[1 3])", - "event_type": "add_to_current", - "figure_ordinal": 22 - }, - { - "section_index": 26, - "section_line_index": 56, - "source_line_no": 10955, - "source_snippet": "plot(100*x(1,:),100*x(2,:),'k','Linewidth',2)", - "event_type": "add_to_current", - "figure_ordinal": 22 - }, - { - "section_index": 26, - "section_line_index": 63, - "source_line_no": 10962, - "source_snippet": "h1=plot(100*x(1,1),100*x(2,1),'bo','MarkerSize',14)", - "event_type": "add_to_current", - "figure_ordinal": 22 - }, - { - "section_index": 26, - "section_line_index": 64, - "source_line_no": 10963, - "source_snippet": "h2=plot(100*x(1,end),100*x(2,end),'ro','MarkerSize',14)", - "event_type": "add_to_current", - "figure_ordinal": 22 - }, - { - "section_index": 26, - "section_line_index": 68, - "source_line_no": 10967, - "source_snippet": "subplot(4,2,5)", - "event_type": "add_to_current", - "figure_ordinal": 22 - }, - { - "section_index": 26, - "section_line_index": 68, - "source_line_no": 10967, - "source_snippet": "h1=plot(time,100*x(1,:),'k','Linewidth',2)", - "event_type": "add_to_current", - "figure_ordinal": 22 - }, - { - "section_index": 26, - "section_line_index": 69, - "source_line_no": 10968, - "source_snippet": "h2=plot(time,100*x(2,:),'k-.','Linewidth',2)", - "event_type": "add_to_current", - "figure_ordinal": 22 - }, - { - "section_index": 26, - "section_line_index": 78, - "source_line_no": 10977, - "source_snippet": "subplot(4,2,7)", - "event_type": "add_to_current", - "figure_ordinal": 22 - }, - { - "section_index": 26, - "section_line_index": 79, - "source_line_no": 10978, - "source_snippet": "h1=plot(time,100*x(3,:),'k','Linewidth',2)", - "event_type": "add_to_current", - "figure_ordinal": 22 - }, - { - "section_index": 26, - "section_line_index": 80, - "source_line_no": 10979, - "source_snippet": "h2=plot(time,100*x(4,:),'k-.','Linewidth',2)", - "event_type": "add_to_current", - "figure_ordinal": 22 - }, - { - "section_index": 26, - "section_line_index": 128, - "source_line_no": 11027, - "source_snippet": "subplot(4,2,[6 8])", - "event_type": "add_to_current", - "figure_ordinal": 22 - }, - { - "section_index": 26, - "section_line_index": 129, - "source_line_no": 11028, - "source_snippet": "h2=lambda{i}.plot([],{{' ''k'', ''LineWidth'' ,.5'}})", - "event_type": "add_to_current", - "figure_ordinal": 22 - }, - { - "section_index": 26, - "section_line_index": 142, - "source_line_no": 11041, - "source_snippet": "subplot(4,2,[2,4])", - "event_type": "add_to_current", - "figure_ordinal": 22 - }, - { - "section_index": 26, - "section_line_index": 142, - "source_line_no": 11041, - "source_snippet": "spikeColl.plot", - "event_type": "add_to_current", - "figure_ordinal": 22 - }, - { - "section_index": 26, - "section_line_index": 154, - "source_line_no": 11103, - "source_snippet": "fig1=figure('OuterPosition',[scrsz(3)*.1 scrsz(4)*.1 ...", - "event_type": "new_figure", - "figure_ordinal": 23 - }, - { - "section_index": 26, - "section_line_index": 220, - "source_line_no": 11169, - "source_snippet": "subplot(4,2,1:4)", - "event_type": "add_to_current", - "figure_ordinal": 23 - }, - { - "section_index": 26, - "section_line_index": 220, - "source_line_no": 11169, - "source_snippet": "h1=plot(100*x(1,:),100*x(2,:),'k','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 23 - }, - { - "section_index": 26, - "section_line_index": 227, - "source_line_no": 11176, - "source_snippet": "subplot(4,2,1:4)", - "event_type": "add_to_current", - "figure_ordinal": 23 - }, - { - "section_index": 26, - "section_line_index": 227, - "source_line_no": 11176, - "source_snippet": "h2=plot(100*x_u(1,:)',100*x_u(2,:)','b')", - "event_type": "add_to_current", - "figure_ordinal": 23 - }, - { - "section_index": 26, - "section_line_index": 228, - "source_line_no": 11177, - "source_snippet": "subplot(4,2,1:4)", - "event_type": "add_to_current", - "figure_ordinal": 23 - }, - { - "section_index": 26, - "section_line_index": 228, - "source_line_no": 11177, - "source_snippet": "h3=plot(100*x_uf(1,:)',100*x_uf(2,:)','g')", - "event_type": "add_to_current", - "figure_ordinal": 23 - }, - { - "section_index": 26, - "section_line_index": 231, - "source_line_no": 11180, - "source_snippet": "h1=plot(100*x0(1),100*x0(2),'bo','MarkerSize',10)", - "event_type": "add_to_current", - "figure_ordinal": 23 - }, - { - "section_index": 26, - "section_line_index": 232, - "source_line_no": 11181, - "source_snippet": "h2=plot(100*xT(1),100*xT(2),'ro','MarkerSize',10)", - "event_type": "add_to_current", - "figure_ordinal": 23 - }, - { - "section_index": 26, - "section_line_index": 236, - "source_line_no": 11185, - "source_snippet": "subplot(4,2,5)", - "event_type": "add_to_current", - "figure_ordinal": 23 - }, - { - "section_index": 26, - "section_line_index": 237, - "source_line_no": 11186, - "source_snippet": "h1=plot(time,100*x(1,:),'k','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 23 - }, - { - "section_index": 26, - "section_line_index": 238, - "source_line_no": 11187, - "source_snippet": "h2=plot(time,100*x_u(1,:)','b');", - "event_type": "add_to_current", - "figure_ordinal": 23 - }, - { - "section_index": 26, - "section_line_index": 239, - "source_line_no": 11188, - "source_snippet": "h3=plot(time,100*x_uf(1,:)','g');", - "event_type": "add_to_current", - "figure_ordinal": 23 - }, - { - "section_index": 26, - "section_line_index": 245, - "source_line_no": 11194, - "source_snippet": "subplot(4,2,6)", - "event_type": "add_to_current", - "figure_ordinal": 23 - }, - { - "section_index": 26, - "section_line_index": 246, - "source_line_no": 11195, - "source_snippet": "h1=plot(time,100*x(2,:),'k','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 23 - }, - { - "section_index": 26, - "section_line_index": 247, - "source_line_no": 11196, - "source_snippet": "h2=plot(time,100*x_u(2,:)','b');", - "event_type": "add_to_current", - "figure_ordinal": 23 - }, - { - "section_index": 26, - "section_line_index": 248, - "source_line_no": 11197, - "source_snippet": "h3=plot(time,100*x_uf(2,:)','g');", - "event_type": "add_to_current", - "figure_ordinal": 23 - }, - { - "section_index": 26, - "section_line_index": 259, - "source_line_no": 11208, - "source_snippet": "subplot(4,2,7)", - "event_type": "add_to_current", - "figure_ordinal": 23 - }, - { - "section_index": 26, - "section_line_index": 260, - "source_line_no": 11209, - "source_snippet": "h1=plot(time,100*x(3,:),'k','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 23 - }, - { - "section_index": 26, - "section_line_index": 261, - "source_line_no": 11210, - "source_snippet": "h2=plot(time,100*x_u(3,:)','b');", - "event_type": "add_to_current", - "figure_ordinal": 23 - }, - { - "section_index": 26, - "section_line_index": 262, - "source_line_no": 11211, - "source_snippet": "h3=plot(time,100*x_uf(3,:)','g');", - "event_type": "add_to_current", - "figure_ordinal": 23 - }, - { - "section_index": 26, - "section_line_index": 267, - "source_line_no": 11216, - "source_snippet": "subplot(4,2,8)", - "event_type": "add_to_current", - "figure_ordinal": 23 - }, - { - "section_index": 26, - "section_line_index": 268, - "source_line_no": 11217, - "source_snippet": "h1=plot(time,100*x(4,:),'k','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 23 - }, - { - "section_index": 26, - "section_line_index": 269, - "source_line_no": 11218, - "source_snippet": "h2=plot(time,100*x_u(4,:)','b');", - "event_type": "add_to_current", - "figure_ordinal": 23 - }, - { - "section_index": 26, - "section_line_index": 270, - "source_line_no": 11219, - "source_snippet": "h3=plot(time,100*x_uf(4,:)','g');", - "event_type": "add_to_current", - "figure_ordinal": 23 - }, - { - "section_index": 29, - "section_line_index": 77, - "source_line_no": 12306, - "source_snippet": "fig1=figure('OuterPosition',[scrsz(3)*.1 scrsz(4)*.1 ...", - "event_type": "new_figure", - "figure_ordinal": 24 - }, - { - "section_index": 29, - "section_line_index": 79, - "source_line_no": 12308, - "source_snippet": "subplot(4,2,[1 3])", - "event_type": "add_to_current", - "figure_ordinal": 24 - }, - { - "section_index": 29, - "section_line_index": 80, - "source_line_no": 12309, - "source_snippet": "plot(100*X(1,:),100*X(2,:),'k','Linewidth',2)", - "event_type": "add_to_current", - "figure_ordinal": 24 - }, - { - "section_index": 29, - "section_line_index": 85, - "source_line_no": 12314, - "source_snippet": "h1=plot(100*X(1,1),100*X(2,1),'bo','MarkerSize',16)", - "event_type": "add_to_current", - "figure_ordinal": 24 - }, - { - "section_index": 29, - "section_line_index": 86, - "source_line_no": 12315, - "source_snippet": "h2=plot(100*X(1,end),100*X(2,end),'ro','MarkerSize',16)", - "event_type": "add_to_current", - "figure_ordinal": 24 - }, - { - "section_index": 29, - "section_line_index": 91, - "source_line_no": 12320, - "source_snippet": "subplot(4,2,[6 8])", - "event_type": "add_to_current", - "figure_ordinal": 24 - }, - { - "section_index": 29, - "section_line_index": 92, - "source_line_no": 12321, - "source_snippet": "plot(time,mstate,'k','Linewidth',2)", - "event_type": "add_to_current", - "figure_ordinal": 24 - }, - { - "section_index": 29, - "section_line_index": 100, - "source_line_no": 12329, - "source_snippet": "subplot(4,2,5)", - "event_type": "add_to_current", - "figure_ordinal": 24 - }, - { - "section_index": 29, - "section_line_index": 101, - "source_line_no": 12330, - "source_snippet": "h1=plot(time,100*X(1,1:end),'k','Linewidth',2)", - "event_type": "add_to_current", - "figure_ordinal": 24 - }, - { - "section_index": 29, - "section_line_index": 102, - "source_line_no": 12331, - "source_snippet": "h2=plot(time,100*X(2,1:end),'k-.','Linewidth',2)", - "event_type": "add_to_current", - "figure_ordinal": 24 - }, - { - "section_index": 29, - "section_line_index": 111, - "source_line_no": 12340, - "source_snippet": "subplot(4,2,7)", - "event_type": "add_to_current", - "figure_ordinal": 24 - }, - { - "section_index": 29, - "section_line_index": 112, - "source_line_no": 12341, - "source_snippet": "h1=plot(time,100*X(3,1:end),'k','Linewidth',2)", - "event_type": "add_to_current", - "figure_ordinal": 24 - }, - { - "section_index": 29, - "section_line_index": 113, - "source_line_no": 12342, - "source_snippet": "h2=plot(time,100*X(4,1:end),'k-.','Linewidth',2)", - "event_type": "add_to_current", - "figure_ordinal": 24 - }, - { - "section_index": 29, - "section_line_index": 147, - "source_line_no": 12376, - "source_snippet": "subplot(4,2,[2 4])", - "event_type": "add_to_current", - "figure_ordinal": 24 - }, - { - "section_index": 29, - "section_line_index": 148, - "source_line_no": 12377, - "source_snippet": "spikeColl.plot", - "event_type": "add_to_current", - "figure_ordinal": 24 - }, - { - "section_index": 30, - "section_line_index": 14, - "source_line_no": 12713, - "source_snippet": "fig1=figure('OuterPosition',[scrsz(3)*.1 scrsz(4)*.1 ...", - "event_type": "new_figure", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "section_line_index": 87, - "source_line_no": 12786, - "source_snippet": "subplot(4,3,[1 4])", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "section_line_index": 88, - "source_line_no": 12787, - "source_snippet": "plot(time,mstate,'k','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "section_line_index": 89, - "source_line_no": 12788, - "source_snippet": "plot(time,S_est,'b-.','Linewidth',.5)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "section_line_index": 90, - "source_line_no": 12789, - "source_snippet": "plot(time,S_estNT,'g-.','Linewidth',.5)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "section_line_index": 94, - "source_line_no": 12793, - "source_snippet": "subplot(4,3,[7 10])", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "section_line_index": 95, - "source_line_no": 12794, - "source_snippet": "plot(time,MU_est(2,:),'b-.','Linewidth',.5)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "section_line_index": 96, - "source_line_no": 12795, - "source_snippet": "plot(time,MU_estNT(2,:),'g-.','Linewidth',.5)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "section_line_index": 100, - "source_line_no": 12799, - "source_snippet": "subplot(4,3,[2 3 5 6])", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "section_line_index": 101, - "source_line_no": 12800, - "source_snippet": "h1=plot(100*X(1,:)',100*X(2,:)','k')", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "section_line_index": 102, - "source_line_no": 12801, - "source_snippet": "h2=plot(100*X_est(1,:)',100*X_est(2,:)','b-.')", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "section_line_index": 103, - "source_line_no": 12802, - "source_snippet": "h3=plot(100*X_estNT(1,:)',100*X_estNT(2,:)','g-.')", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "section_line_index": 106, - "source_line_no": 12805, - "source_snippet": "subplot(4,3,8)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "section_line_index": 107, - "source_line_no": 12806, - "source_snippet": "h1=plot(time,100*X(1,:),'k','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "section_line_index": 108, - "source_line_no": 12807, - "source_snippet": "h2=plot(time,100*X_est(1,:)','b-.');", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "section_line_index": 109, - "source_line_no": 12808, - "source_snippet": "h3=plot(time,100*X_estNT(1,:)','g-.');", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "section_line_index": 112, - "source_line_no": 12811, - "source_snippet": "subplot(4,3,9)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "section_line_index": 113, - "source_line_no": 12812, - "source_snippet": "h1=plot(time,100*X(2,:),'k','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "section_line_index": 114, - "source_line_no": 12813, - "source_snippet": "h2=plot(time,100*X_est(2,:)','b-.');", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "section_line_index": 115, - "source_line_no": 12814, - "source_snippet": "h3=plot(time,100*X_estNT(2,:)','g-.');", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "section_line_index": 118, - "source_line_no": 12817, - "source_snippet": "subplot(4,3,11)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "section_line_index": 119, - "source_line_no": 12818, - "source_snippet": "h1=plot(time,100*X(3,:),'k','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "section_line_index": 120, - "source_line_no": 12819, - "source_snippet": "h2=plot(time,100*X_est(3,:)','b-.');", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "section_line_index": 121, - "source_line_no": 12820, - "source_snippet": "h3=plot(time,100*X_estNT(3,:)','g-.');", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "section_line_index": 123, - "source_line_no": 12822, - "source_snippet": "subplot(4,3,12)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "section_line_index": 124, - "source_line_no": 12823, - "source_snippet": "h1=plot(time,100*X(4,:),'k','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "section_line_index": 125, - "source_line_no": 12824, - "source_snippet": "h2=plot(time,100*X_est(4,:)','b-.');", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "section_line_index": 126, - "source_line_no": 12825, - "source_snippet": "h3=plot(time,100*X_estNT(4,:)','g-.');", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "section_line_index": 141, - "source_line_no": 12840, - "source_snippet": "subplot(4,3,[1 4])", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "section_line_index": 143, - "source_line_no": 12842, - "source_snippet": "plot(time,mstate,'k','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "section_line_index": 144, - "source_line_no": 12843, - "source_snippet": "plot(time,mean(S_estAll),'b','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "section_line_index": 145, - "source_line_no": 12844, - "source_snippet": "plot(time,mean(S_estNTAll),'g','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "section_line_index": 157, - "source_line_no": 12856, - "source_snippet": "subplot(4,3,[7 10])", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "section_line_index": 158, - "source_line_no": 12857, - "source_snippet": "plot(time, mean(squeeze(MU_estAll(2,:,:)),2),'b','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "section_line_index": 160, - "source_line_no": 12859, - "source_snippet": "plot(time,mean(squeeze(MU_estNTAll(2,:,:)),2),'g','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "section_line_index": 169, - "source_line_no": 12868, - "source_snippet": "subplot(4,3,[2 3 5 6])", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "section_line_index": 170, - "source_line_no": 12869, - "source_snippet": "h1=plot(100*X(1,:)',100*X(2,:)','k')", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "section_line_index": 173, - "source_line_no": 12872, - "source_snippet": "plot(mXestAll(1,:),mXestAll(2,:),'b','Linewidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "section_line_index": 174, - "source_line_no": 12873, - "source_snippet": "plot(mXestNTAll(1,:),mXestNTAll(2,:),'g','Linewidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "section_line_index": 178, - "source_line_no": 12877, - "source_snippet": "h1=plot(100*X(1,1),100*X(2,1),'bo','MarkerSize',14)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "section_line_index": 179, - "source_line_no": 12878, - "source_snippet": "h2=plot(100*X(1,end),100*X(2,end),'ro','MarkerSize',14)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "section_line_index": 186, - "source_line_no": 12885, - "source_snippet": "subplot(4,3,8)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "section_line_index": 187, - "source_line_no": 12886, - "source_snippet": "h1=plot(time,100*X(1,:),'k','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "section_line_index": 188, - "source_line_no": 12887, - "source_snippet": "h2=plot(time,mXestAll(1,:),'b','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "section_line_index": 189, - "source_line_no": 12888, - "source_snippet": "h3=plot(time,mXestNTAll(1,:),'g','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "section_line_index": 196, - "source_line_no": 12895, - "source_snippet": "subplot(4,3,9)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "section_line_index": 197, - "source_line_no": 12896, - "source_snippet": "h1=plot(time,100*X(2,:),'k','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "section_line_index": 198, - "source_line_no": 12897, - "source_snippet": "h2=plot(time,mXestAll(2,:),'b','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "section_line_index": 199, - "source_line_no": 12898, - "source_snippet": "h3=plot(time,mXestNTAll(2,:),'g','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "section_line_index": 211, - "source_line_no": 12910, - "source_snippet": "subplot(4,3,11)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "section_line_index": 212, - "source_line_no": 12911, - "source_snippet": "h1=plot(time,100*X(3,:),'k','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "section_line_index": 213, - "source_line_no": 12912, - "source_snippet": "h2=plot(time,mXestAll(3,:),'b','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "section_line_index": 214, - "source_line_no": 12913, - "source_snippet": "h3=plot(time,mXestNTAll(3,:),'g','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "section_line_index": 220, - "source_line_no": 12919, - "source_snippet": "subplot(4,3,12)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "section_line_index": 221, - "source_line_no": 12920, - "source_snippet": "h1=plot(time,100*X(4,:),'k','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "section_line_index": 222, - "source_line_no": 12921, - "source_snippet": "h2=plot(time,mXestAll(4,:),'b','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "section_line_index": 223, - "source_line_no": 12922, - "source_snippet": "h3=plot(time,mXestNTAll(4,:),'g','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 25 - } - ] - }, - { - "topic": "nSpikeTrainExamples", - "source_type": "mlx", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/nSpikeTrainExamples.mlx", - "section_count": 2, - "figure_count": 4, - "detected_figure_count": 4, - "no_figure_utility": false, - "events": [ - { - "section_index": 1, - "section_line_index": 4, - "source_line_no": 403, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "section_line_index": 4, - "source_line_no": 403, - "source_snippet": "nst.plot", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "section_line_index": 7, - "source_line_no": 800, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 2 - }, - { - "section_index": 1, - "section_line_index": 8, - "source_line_no": 801, - "source_snippet": "nst.getSigRep.plot", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 1, - "section_line_index": 10, - "source_line_no": 1100, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 3 - }, - { - "section_index": 1, - "section_line_index": 11, - "source_line_no": 1101, - "source_snippet": "nst.getSigRep.plot", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 1, - "section_line_index": 13, - "source_line_no": 1400, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 4 - }, - { - "section_index": 1, - "section_line_index": 14, - "source_line_no": 1401, - "source_snippet": "nst.getSigRep.plot", - "event_type": "add_to_current", - "figure_ordinal": 4 - } - ] - }, - { - "topic": "nstCollExamples", - "source_type": "mlx", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/nstCollExamples.mlx", - "section_count": 2, - "figure_count": 3, - "detected_figure_count": 3, - "no_figure_utility": false, - "events": [ - { - "section_index": 1, - "section_line_index": 9, - "source_line_no": 600, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "section_line_index": 9, - "source_line_no": 600, - "source_snippet": "spikeColl.plot", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "section_line_index": 12, - "source_line_no": 901, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 2 - }, - { - "section_index": 1, - "section_line_index": 12, - "source_line_no": 901, - "source_snippet": "spikeColl.plot", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 1, - "section_line_index": 14, - "source_line_no": 1200, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 3 - }, - { - "section_index": 1, - "section_line_index": 16, - "source_line_no": 1202, - "source_snippet": "subplot(3,1,1)", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 1, - "section_line_index": 16, - "source_line_no": 1202, - "source_snippet": "n1.plot", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 1, - "section_line_index": 17, - "source_line_no": 1203, - "source_snippet": "subplot(3,1,2)", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 1, - "section_line_index": 17, - "source_line_no": 1203, - "source_snippet": "n1.getSigRep.plot", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 1, - "section_line_index": 21, - "source_line_no": 1207, - "source_snippet": "subplot(3,1,3)", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 1, - "section_line_index": 21, - "source_line_no": 1207, - "source_snippet": "s1.plot", - "event_type": "add_to_current", - "figure_ordinal": 3 - } - ] - }, - { - "topic": "AnalysisExamples2", - "source_type": "mlx", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/AnalysisExamples2.mlx", - "section_count": 3, - "figure_count": 5, - "detected_figure_count": 2, - "no_figure_utility": false, - "events": [ - { - "section_index": 0, - "section_line_index": 20, - "source_line_no": 1200, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 1 - }, - { - "section_index": 0, - "section_line_index": 21, - "source_line_no": 1201, - "source_snippet": "plot(position.getSubSignal('x').dataToMatrix,position.getSubSignal('y').dataToMatrix,...", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 0, - "section_line_index": 34, - "source_line_no": 1508, - "source_snippet": "tc{3}.setName('Quadratic+Hist')", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 0, - "section_line_index": 38, - "source_line_no": 1802, - "source_snippet": "fitResults.plotResults", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 0, - "section_line_index": 40, - "source_line_no": 2100, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 2 - }, - { - "section_index": 0, - "section_line_index": 63, - "source_line_no": 2123, - "source_snippet": "plot(position.getSubSignal('x').dataToMatrix,position.getSubSignal('y').dataToMatrix,...", - "event_type": "add_to_current", - "figure_ordinal": 2 - } - ] - }, - { - "topic": "DocumentationSetup2025b", - "source_type": "m", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/DocumentationSetup2025b.m", - "section_count": 6, - "figure_count": 0, - "detected_figure_count": 0, - "no_figure_utility": false, - "events": [] - }, - { - "topic": "FitResultReference", - "source_type": "m", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/FitResultReference.m", - "section_count": 2, - "figure_count": 0, - "detected_figure_count": 0, - "no_figure_utility": false, - "events": [] - }, - { - "topic": "HybridFilterExample", - "source_type": "mlx", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/HybridFilterExample.mlx", - "section_count": 4, - "figure_count": 2, - "detected_figure_count": 2, - "no_figure_utility": false, - "events": [ - { - "section_index": 2, - "section_line_index": 75, - "source_line_no": 1106, - "source_snippet": "fig1=figure('OuterPosition',[scrsz(3)*.1 scrsz(4)*.1 ...", - "event_type": "new_figure", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "section_line_index": 77, - "source_line_no": 1108, - "source_snippet": "subplot(4,2,[1 3])", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "section_line_index": 78, - "source_line_no": 1109, - "source_snippet": "plot(100*X(1,:),100*X(2,:),'k','Linewidth',2)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "section_line_index": 83, - "source_line_no": 1114, - "source_snippet": "h1=plot(100*X(1,1),100*X(2,1),'bo','MarkerSize',16)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "section_line_index": 84, - "source_line_no": 1115, - "source_snippet": "h2=plot(100*X(1,end),100*X(2,end),'ro','MarkerSize',16)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "section_line_index": 89, - "source_line_no": 1120, - "source_snippet": "subplot(4,2,[6 8])", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "section_line_index": 90, - "source_line_no": 1121, - "source_snippet": "plot(time,mstate,'k','Linewidth',2)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "section_line_index": 98, - "source_line_no": 1129, - "source_snippet": "subplot(4,2,5)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "section_line_index": 99, - "source_line_no": 1130, - "source_snippet": "h1=plot(time,100*X(1,1:end),'k','Linewidth',2)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "section_line_index": 100, - "source_line_no": 1131, - "source_snippet": "h2=plot(time,100*X(2,1:end),'k-.','Linewidth',2)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "section_line_index": 109, - "source_line_no": 1140, - "source_snippet": "subplot(4,2,7)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "section_line_index": 110, - "source_line_no": 1141, - "source_snippet": "h1=plot(time,100*X(3,1:end),'k','Linewidth',2)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "section_line_index": 111, - "source_line_no": 1142, - "source_snippet": "h2=plot(time,100*X(4,1:end),'k-.','Linewidth',2)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "section_line_index": 145, - "source_line_no": 1176, - "source_snippet": "subplot(4,2,[2 4])", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "section_line_index": 146, - "source_line_no": 1177, - "source_snippet": "spikeColl.plot", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 3, - "section_line_index": 14, - "source_line_no": 1513, - "source_snippet": "fig1=figure('OuterPosition',[scrsz(3)*.1 scrsz(4)*.1 ...", - "event_type": "new_figure", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "section_line_index": 87, - "source_line_no": 1586, - "source_snippet": "subplot(4,3,[1 4])", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "section_line_index": 88, - "source_line_no": 1587, - "source_snippet": "plot(time,mstate,'k','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "section_line_index": 89, - "source_line_no": 1588, - "source_snippet": "plot(time,S_est,'b-.','Linewidth',.5)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "section_line_index": 90, - "source_line_no": 1589, - "source_snippet": "plot(time,S_estNT,'g-.','Linewidth',.5)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "section_line_index": 94, - "source_line_no": 1593, - "source_snippet": "subplot(4,3,[7 10])", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "section_line_index": 95, - "source_line_no": 1594, - "source_snippet": "plot(time,MU_est(2,:),'b-.','Linewidth',.5)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "section_line_index": 96, - "source_line_no": 1595, - "source_snippet": "plot(time,MU_estNT(2,:),'g-.','Linewidth',.5)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "section_line_index": 100, - "source_line_no": 1599, - "source_snippet": "subplot(4,3,[2 3 5 6])", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "section_line_index": 101, - "source_line_no": 1600, - "source_snippet": "h1=plot(100*X(1,:)',100*X(2,:)','k')", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "section_line_index": 102, - "source_line_no": 1601, - "source_snippet": "h2=plot(100*X_est(1,:)',100*X_est(2,:)','b-.')", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "section_line_index": 103, - "source_line_no": 1602, - "source_snippet": "h3=plot(100*X_estNT(1,:)',100*X_estNT(2,:)','g-.')", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "section_line_index": 106, - "source_line_no": 1605, - "source_snippet": "subplot(4,3,8)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "section_line_index": 107, - "source_line_no": 1606, - "source_snippet": "h1=plot(time,100*X(1,:),'k','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "section_line_index": 108, - "source_line_no": 1607, - "source_snippet": "h2=plot(time,100*X_est(1,:)','b-.');", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "section_line_index": 109, - "source_line_no": 1608, - "source_snippet": "h3=plot(time,100*X_estNT(1,:)','g-.');", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "section_line_index": 112, - "source_line_no": 1611, - "source_snippet": "subplot(4,3,9)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "section_line_index": 113, - "source_line_no": 1612, - "source_snippet": "h1=plot(time,100*X(2,:),'k','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "section_line_index": 114, - "source_line_no": 1613, - "source_snippet": "h2=plot(time,100*X_est(2,:)','b-.');", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "section_line_index": 115, - "source_line_no": 1614, - "source_snippet": "h3=plot(time,100*X_estNT(2,:)','g-.');", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "section_line_index": 118, - "source_line_no": 1617, - "source_snippet": "subplot(4,3,11)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "section_line_index": 119, - "source_line_no": 1618, - "source_snippet": "h1=plot(time,100*X(3,:),'k','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "section_line_index": 120, - "source_line_no": 1619, - "source_snippet": "h2=plot(time,100*X_est(3,:)','b-.');", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "section_line_index": 121, - "source_line_no": 1620, - "source_snippet": "h3=plot(time,100*X_estNT(3,:)','g-.');", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "section_line_index": 123, - "source_line_no": 1622, - "source_snippet": "subplot(4,3,12)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "section_line_index": 124, - "source_line_no": 1623, - "source_snippet": "h1=plot(time,100*X(4,:),'k','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "section_line_index": 125, - "source_line_no": 1624, - "source_snippet": "h2=plot(time,100*X_est(4,:)','b-.');", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "section_line_index": 126, - "source_line_no": 1625, - "source_snippet": "h3=plot(time,100*X_estNT(4,:)','g-.');", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "section_line_index": 141, - "source_line_no": 1640, - "source_snippet": "subplot(4,3,[1 4])", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "section_line_index": 143, - "source_line_no": 1642, - "source_snippet": "plot(time,mstate,'k','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "section_line_index": 144, - "source_line_no": 1643, - "source_snippet": "plot(time,mean(S_estAll),'b','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "section_line_index": 145, - "source_line_no": 1644, - "source_snippet": "plot(time,mean(S_estNTAll),'g','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "section_line_index": 157, - "source_line_no": 1656, - "source_snippet": "subplot(4,3,[7 10])", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "section_line_index": 158, - "source_line_no": 1657, - "source_snippet": "plot(time, mean(squeeze(MU_estAll(2,:,:)),2),'b','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "section_line_index": 160, - "source_line_no": 1659, - "source_snippet": "plot(time,mean(squeeze(MU_estNTAll(2,:,:)),2),'g','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "section_line_index": 169, - "source_line_no": 1668, - "source_snippet": "subplot(4,3,[2 3 5 6])", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "section_line_index": 170, - "source_line_no": 1669, - "source_snippet": "h1=plot(100*X(1,:)',100*X(2,:)','k')", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "section_line_index": 173, - "source_line_no": 1672, - "source_snippet": "plot(mXestAll(1,:),mXestAll(2,:),'b','Linewidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "section_line_index": 174, - "source_line_no": 1673, - "source_snippet": "plot(mXestNTAll(1,:),mXestNTAll(2,:),'g','Linewidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "section_line_index": 178, - "source_line_no": 1677, - "source_snippet": "h1=plot(100*X(1,1),100*X(2,1),'bo','MarkerSize',14)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "section_line_index": 179, - "source_line_no": 1678, - "source_snippet": "h2=plot(100*X(1,end),100*X(2,end),'ro','MarkerSize',14)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "section_line_index": 186, - "source_line_no": 1685, - "source_snippet": "subplot(4,3,8)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "section_line_index": 187, - "source_line_no": 1686, - "source_snippet": "h1=plot(time,100*X(1,:),'k','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "section_line_index": 188, - "source_line_no": 1687, - "source_snippet": "h2=plot(time,mXestAll(1,:),'b','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "section_line_index": 189, - "source_line_no": 1688, - "source_snippet": "h3=plot(time,mXestNTAll(1,:),'g','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "section_line_index": 196, - "source_line_no": 1695, - "source_snippet": "subplot(4,3,9)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "section_line_index": 197, - "source_line_no": 1696, - "source_snippet": "h1=plot(time,100*X(2,:),'k','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "section_line_index": 198, - "source_line_no": 1697, - "source_snippet": "h2=plot(time,mXestAll(2,:),'b','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "section_line_index": 199, - "source_line_no": 1698, - "source_snippet": "h3=plot(time,mXestNTAll(2,:),'g','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "section_line_index": 211, - "source_line_no": 1710, - "source_snippet": "subplot(4,3,11)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "section_line_index": 212, - "source_line_no": 1711, - "source_snippet": "h1=plot(time,100*X(3,:),'k','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "section_line_index": 213, - "source_line_no": 1712, - "source_snippet": "h2=plot(time,mXestAll(3,:),'b','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "section_line_index": 214, - "source_line_no": 1713, - "source_snippet": "h3=plot(time,mXestNTAll(3,:),'g','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "section_line_index": 220, - "source_line_no": 1719, - "source_snippet": "subplot(4,3,12)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "section_line_index": 221, - "source_line_no": 1720, - "source_snippet": "h1=plot(time,100*X(4,:),'k','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "section_line_index": 222, - "source_line_no": 1721, - "source_snippet": "h2=plot(time,mXestAll(4,:),'b','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "section_line_index": 223, - "source_line_no": 1722, - "source_snippet": "h3=plot(time,mXestNTAll(4,:),'g','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 2 - } - ] - }, - { - "topic": "publish_all_helpfiles", - "source_type": "m", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/publish_all_helpfiles.m", - "section_count": 1, - "figure_count": 0, - "detected_figure_count": 0, - "no_figure_utility": true, - "events": [] - } - ] -} \ No newline at end of file diff --git a/parity/helpfile_figure_manifest.json b/parity/helpfile_figure_manifest.json deleted file mode 100644 index f99c42b2..00000000 --- a/parity/helpfile_figure_manifest.json +++ /dev/null @@ -1,4388 +0,0 @@ -{ - "topics": [ - { - "topic": "AnalysisExamples", - "total_figures_expected": 4, - "total_figures_detected": 4, - "no_figure_utility": false, - "events": [ - { - "section_index": 1, - "source_line_no": 700, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "source_line_no": 701, - "source_snippet": "plot(xN,yN,x_at_spiketimes,y_at_spiketimes,'r.')", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "source_line_no": 1001, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 2 - }, - { - "section_index": 1, - "source_line_no": 1300, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 3 - }, - { - "section_index": 1, - "source_line_no": 1314, - "source_snippet": "plot3(cos(-pi:1e-2:pi),sin(-pi:1e-2:pi),zeros(size(-pi:1e-2:pi)))", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 1, - "source_line_no": 1315, - "source_snippet": "plot(xN,yN,x_at_spiketimes,y_at_spiketimes,'r.')", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 1, - "source_line_no": 1925, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 4 - }, - { - "section_index": 1, - "source_line_no": 1926, - "source_snippet": "plot( ([1:N]-.5)/N, KSSorted, 0:.01:1,0:.01:1, 'g',0:.01:1, [0:.01:1]+1.36/sqrt(N), 'r', 0:.01:1,[0:.01:1]-1.36/sqrt(N), 'r' )", - "event_type": "add_to_current", - "figure_ordinal": 4 - }, - { - "section_index": 1, - "source_line_no": 1930, - "source_snippet": "title('KS Plot with 95% Confidence Intervals')", - "event_type": "add_to_current", - "figure_ordinal": 4 - } - ] - }, - { - "topic": "ConfigCollExamples", - "total_figures_expected": 0, - "total_figures_detected": 0, - "no_figure_utility": false, - "events": [] - }, - { - "topic": "CovCollExamples", - "total_figures_expected": 2, - "total_figures_detected": 2, - "no_figure_utility": false, - "events": [ - { - "section_index": 0, - "source_line_no": 203, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 1 - }, - { - "section_index": 0, - "source_line_no": 203, - "source_snippet": "cc.plot", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 0, - "source_line_no": 212, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 2 - }, - { - "section_index": 0, - "source_line_no": 212, - "source_snippet": "cc.plot", - "event_type": "add_to_current", - "figure_ordinal": 2 - } - ] - }, - { - "topic": "CovariateExamples", - "total_figures_expected": 2, - "total_figures_detected": 2, - "no_figure_utility": false, - "events": [ - { - "section_index": 1, - "source_line_no": 1100, - "source_snippet": "position.getSigRep.plot('all',plotProps)", - "event_type": "new_figure", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "source_line_no": 1102, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 2 - }, - { - "section_index": 1, - "source_line_no": 1103, - "source_snippet": "subplot(1,2,1)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 1, - "source_line_no": 1103, - "source_snippet": "force.getSigRep.plot('all',plotPropsForce)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 1, - "source_line_no": 1108, - "source_snippet": "subplot(1,2,2)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 1, - "source_line_no": 1108, - "source_snippet": "force.getSigRep('zero-mean').plot('all',plotPropsForce)", - "event_type": "add_to_current", - "figure_ordinal": 2 - } - ] - }, - { - "topic": "DecodingExample", - "total_figures_expected": 5, - "total_figures_detected": 4, - "no_figure_utility": false, - "events": [ - { - "section_index": 1, - "source_line_no": 412, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "source_line_no": 413, - "source_snippet": "subplot(2,1,1)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "source_line_no": 413, - "source_snippet": "spikeColl.plot", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "source_line_no": 414, - "source_snippet": "subplot(2,1,2)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "source_line_no": 414, - "source_snippet": "lambda.plot", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "source_line_no": 703, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 2 - }, - { - "section_index": 2, - "source_line_no": 706, - "source_snippet": "trial.plot", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 2, - "source_line_no": 718, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 3 - }, - { - "section_index": 2, - "source_line_no": 1115, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 4 - }, - { - "section_index": 2, - "source_line_no": 1119, - "source_snippet": "hEst=plot(time,x_u(1:end),'b',time,ciLower,'g',time,ciUpper,'g')", - "event_type": "add_to_current", - "figure_ordinal": 4 - }, - { - "section_index": 2, - "source_line_no": 1122, - "source_snippet": "hStim=stim.plot([],{{' ''k'',''Linewidth'',2'}})", - "event_type": "add_to_current", - "figure_ordinal": 4 - } - ] - }, - { - "topic": "DecodingExampleWithHist", - "total_figures_expected": 2, - "total_figures_detected": 2, - "no_figure_utility": false, - "events": [ - { - "section_index": 0, - "source_line_no": 322, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 1 - }, - { - "section_index": 0, - "source_line_no": 323, - "source_snippet": "subplot(2,1,1)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 0, - "source_line_no": 323, - "source_snippet": "sC.plot", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 0, - "source_line_no": 324, - "source_snippet": "subplot(2,1,2)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 0, - "source_line_no": 324, - "source_snippet": "stim.plot", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 0, - "source_line_no": 351, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 2 - }, - { - "section_index": 0, - "source_line_no": 352, - "source_snippet": "subplot(2,1,1)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 0, - "source_line_no": 356, - "source_snippet": "hEst=plot(time,x_u(1:end),'b',time,ciLower,'g',time,ciUpper,'r')", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 0, - "source_line_no": 359, - "source_snippet": "hStim=stim.plot([],{{' ''k'',''Linewidth'',2'}})", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 0, - "source_line_no": 365, - "source_snippet": "subplot(2,1,2)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 0, - "source_line_no": 369, - "source_snippet": "hEst=plot(time,x_uNoHist(1:end),'b',time,ciLower,'g',time,ciUpper,'r')", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 0, - "source_line_no": 372, - "source_snippet": "hStim=stim.plot([],{{' ''k'',''Linewidth'',2'}})", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 0, - "source_line_no": 376, - "source_snippet": "title(['Decoded Stimulus No Hist +/- 99% confidence intervals using ' num2str(numRealizations) ' cells'])", - "event_type": "add_to_current", - "figure_ordinal": 2 - } - ] - }, - { - "topic": "EventsExamples", - "total_figures_expected": 3, - "total_figures_detected": 3, - "no_figure_utility": false, - "events": [ - { - "section_index": 0, - "source_line_no": 305, - "source_snippet": "e.plot", - "event_type": "new_figure", - "figure_ordinal": 1 - }, - { - "section_index": 0, - "source_line_no": 600, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 2 - }, - { - "section_index": 0, - "source_line_no": 600, - "source_snippet": "e.plot([],'r')", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 0, - "source_line_no": 601, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 3 - }, - { - "section_index": 0, - "source_line_no": 601, - "source_snippet": "e.plot([],'g')", - "event_type": "add_to_current", - "figure_ordinal": 3 - } - ] - }, - { - "topic": "ExplicitStimulusWhiskerData", - "total_figures_expected": 9, - "total_figures_detected": 5, - "no_figure_utility": false, - "events": [ - { - "section_index": 1, - "source_line_no": 421, - "source_snippet": "trial.plot", - "event_type": "new_figure", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "source_line_no": 423, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 2 - }, - { - "section_index": 1, - "source_line_no": 424, - "source_snippet": "subplot(2,1,1)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 1, - "source_line_no": 426, - "source_snippet": "nst.plot", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 1, - "source_line_no": 427, - "source_snippet": "subplot(2,1,2)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 1, - "source_line_no": 428, - "source_snippet": "stim.getSigInTimeWindow(0,21).plot", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 2, - "source_line_no": 809, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 3 - }, - { - "section_index": 2, - "source_line_no": 810, - "source_snippet": "results.Residual.xcov(stim).windowedSignal([0,1]).plot", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 3, - "source_line_no": 1210, - "source_snippet": "results.plotResults", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 4, - "source_line_no": 1621, - "source_snippet": "Summary.plotSummary", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 4, - "source_line_no": 1800, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 4 - }, - { - "section_index": 4, - "source_line_no": 1802, - "source_snippet": "subplot(3,1,1)", - "event_type": "add_to_current", - "figure_ordinal": 4 - }, - { - "section_index": 4, - "source_line_no": 1802, - "source_snippet": "plot(x,results{1}.KSStats.ks_stat,'.')", - "event_type": "add_to_current", - "figure_ordinal": 4 - }, - { - "section_index": 4, - "source_line_no": 1803, - "source_snippet": "plot(x(windowIndex),results{1}.KSStats.ks_stat(windowIndex),'r*')", - "event_type": "add_to_current", - "figure_ordinal": 4 - }, - { - "section_index": 4, - "source_line_no": 1808, - "source_snippet": "subplot(3,1,2)", - "event_type": "add_to_current", - "figure_ordinal": 4 - }, - { - "section_index": 4, - "source_line_no": 1808, - "source_snippet": "plot(x,dAIC,'.')", - "event_type": "add_to_current", - "figure_ordinal": 4 - }, - { - "section_index": 4, - "source_line_no": 1811, - "source_snippet": "plot(x(windowIndex),dAIC(windowIndex),'r*')", - "event_type": "add_to_current", - "figure_ordinal": 4 - }, - { - "section_index": 4, - "source_line_no": 1813, - "source_snippet": "subplot(3,1,3)", - "event_type": "add_to_current", - "figure_ordinal": 4 - }, - { - "section_index": 4, - "source_line_no": 1813, - "source_snippet": "plot(x,dBIC,'.')", - "event_type": "add_to_current", - "figure_ordinal": 4 - }, - { - "section_index": 4, - "source_line_no": 1815, - "source_snippet": "plot(x(windowIndex),dBIC(windowIndex),'r*')", - "event_type": "add_to_current", - "figure_ordinal": 4 - }, - { - "section_index": 4, - "source_line_no": 1821, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 5 - }, - { - "section_index": 4, - "source_line_no": 1822, - "source_snippet": "plot(x,dBIC,'.')", - "event_type": "add_to_current", - "figure_ordinal": 5 - }, - { - "section_index": 5, - "source_line_no": 2207, - "source_snippet": "c{3}.setName('Baseline+Stimulus+Hist')", - "event_type": "add_to_current", - "figure_ordinal": 5 - }, - { - "section_index": 5, - "source_line_no": 2210, - "source_snippet": "results.plotResults", - "event_type": "add_to_current", - "figure_ordinal": 5 - } - ] - }, - { - "topic": "FitResSummaryExamples", - "total_figures_expected": 0, - "total_figures_detected": 0, - "no_figure_utility": false, - "events": [] - }, - { - "topic": "FitResultExamples", - "total_figures_expected": 0, - "total_figures_detected": 0, - "no_figure_utility": false, - "events": [] - }, - { - "topic": "HippocampalPlaceCellExample", - "total_figures_expected": 9, - "total_figures_detected": 7, - "no_figure_utility": false, - "events": [ - { - "section_index": 1, - "source_line_no": 902, - "source_snippet": "figure(1)", - "event_type": "new_figure", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "source_line_no": 903, - "source_snippet": "plot(x,y,'b',neuron{exampleCell}.xN,neuron{exampleCell}.yN,'r.')", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 3, - "source_line_no": 1604, - "source_snippet": "Summary.plotSummary", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 4, - "source_line_no": 1952, - "source_snippet": "h4=figure(4)", - "event_type": "new_figure", - "figure_ordinal": 2 - }, - { - "section_index": 4, - "source_line_no": 1960, - "source_snippet": "subplot(7,7,i)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 4, - "source_line_no": 1962, - "source_snippet": "h6=figure(6)", - "event_type": "new_figure", - "figure_ordinal": 3 - }, - { - "section_index": 4, - "source_line_no": 1970, - "source_snippet": "subplot(6,7,i)", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 4, - "source_line_no": 1972, - "source_snippet": "pcolor(x_new,y_new,lambdaGaussian{i}), shading interp", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 4, - "source_line_no": 1977, - "source_snippet": "h5=figure(5)", - "event_type": "new_figure", - "figure_ordinal": 4 - }, - { - "section_index": 4, - "source_line_no": 1986, - "source_snippet": "subplot(7,7,i)", - "event_type": "add_to_current", - "figure_ordinal": 4 - }, - { - "section_index": 4, - "source_line_no": 1988, - "source_snippet": "h7=figure(7)", - "event_type": "new_figure", - "figure_ordinal": 5 - }, - { - "section_index": 4, - "source_line_no": 1996, - "source_snippet": "subplot(6,7,i)", - "event_type": "add_to_current", - "figure_ordinal": 5 - }, - { - "section_index": 4, - "source_line_no": 1998, - "source_snippet": "pcolor(x_new,y_new,lambdaZernike{i}), shading interp", - "event_type": "add_to_current", - "figure_ordinal": 5 - }, - { - "section_index": 4, - "source_line_no": 2024, - "source_snippet": "figure(8)", - "event_type": "new_figure", - "figure_ordinal": 6 - }, - { - "section_index": 4, - "source_line_no": 2025, - "source_snippet": "plot(x,y,'b',neuron{exampleCell}.xN,neuron{exampleCell}.yN,'r.')", - "event_type": "add_to_current", - "figure_ordinal": 6 - }, - { - "section_index": 4, - "source_line_no": 2029, - "source_snippet": "figure(9)", - "event_type": "new_figure", - "figure_ordinal": 7 - }, - { - "section_index": 4, - "source_line_no": 2039, - "source_snippet": "plot(x,y,neuron{exampleCell}.xN,neuron{exampleCell}.yN,'r.')", - "event_type": "add_to_current", - "figure_ordinal": 7 - } - ] - }, - { - "topic": "HistoryExamples", - "total_figures_expected": 3, - "total_figures_detected": 3, - "no_figure_utility": false, - "events": [ - { - "section_index": 1, - "source_line_no": 701, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "source_line_no": 701, - "source_snippet": "subplot(3,1,1)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "source_line_no": 701, - "source_snippet": "h.plot", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "source_line_no": 702, - "source_snippet": "subplot(3,1,2)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "source_line_no": 702, - "source_snippet": "histn1.plot", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "source_line_no": 703, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 2 - }, - { - "section_index": 1, - "source_line_no": 703, - "source_snippet": "nst.plot", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 2, - "source_line_no": 1501, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 3 - }, - { - "section_index": 2, - "source_line_no": 1501, - "source_snippet": "histColl.plot", - "event_type": "add_to_current", - "figure_ordinal": 3 - } - ] - }, - { - "topic": "NetworkTutorial", - "total_figures_expected": 4, - "total_figures_detected": 2, - "no_figure_utility": false, - "events": [ - { - "section_index": 8, - "source_line_no": 4122, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 1 - }, - { - "section_index": 8, - "source_line_no": 4123, - "source_snippet": "subplot(2,1,1)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 8, - "source_line_no": 4123, - "source_snippet": "sC.plot", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 8, - "source_line_no": 4124, - "source_snippet": "subplot(2,1,2)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 8, - "source_line_no": 4124, - "source_snippet": "stim.plot", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 10, - "source_line_no": 4825, - "source_snippet": "c{3}.setName('Stim+Hist+EnsHist')", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 10, - "source_line_no": 4856, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 2 - }, - { - "section_index": 10, - "source_line_no": 4858, - "source_snippet": "subplot(1,2,1)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 10, - "source_line_no": 4859, - "source_snippet": "imagesc(actNetwork,CLIM)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 10, - "source_line_no": 4862, - "source_snippet": "subplot(1,2,2)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 10, - "source_line_no": 4863, - "source_snippet": "imagesc(network1ms,CLIM)", - "event_type": "add_to_current", - "figure_ordinal": 2 - } - ] - }, - { - "topic": "PPSimExample", - "total_figures_expected": 3, - "total_figures_detected": 1, - "no_figure_utility": false, - "events": [ - { - "section_index": 4, - "source_line_no": 2209, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 1 - }, - { - "section_index": 4, - "source_line_no": 2210, - "source_snippet": "subplot(2,1,1)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 4, - "source_line_no": 2210, - "source_snippet": "sC.plot", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 4, - "source_line_no": 2211, - "source_snippet": "subplot(2,1,2)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 4, - "source_line_no": 2211, - "source_snippet": "stim.plot", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 6, - "source_line_no": 3801, - "source_snippet": "c{3}.setName('Stim+Hist')", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 8, - "source_line_no": 4701, - "source_snippet": "Summary.plotSummary", - "event_type": "add_to_current", - "figure_ordinal": 1 - } - ] - }, - { - "topic": "PPThinning", - "total_figures_expected": 3, - "total_figures_detected": 3, - "no_figure_utility": false, - "events": [ - { - "section_index": 2, - "source_line_no": 700, - "source_snippet": "figure(1)", - "event_type": "new_figure", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "source_line_no": 703, - "source_snippet": "subplot(2,2,1)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "source_line_no": 703, - "source_snippet": "n1.plot", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "source_line_no": 703, - "source_snippet": "plot(tSpikes,ones(size(tSpikes)),'.')", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "source_line_no": 705, - "source_snippet": "subplot(2,2,2)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "source_line_no": 706, - "source_snippet": "subplot(2,2,3)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "source_line_no": 706, - "source_snippet": "n2.plot", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "source_line_no": 706, - "source_snippet": "plot(tSpikes,ones(size(tSpikes)),'.')", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "source_line_no": 708, - "source_snippet": "subplot(2,2,4)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "source_line_no": 710, - "source_snippet": "figure(2)", - "event_type": "new_figure", - "figure_ordinal": 2 - }, - { - "section_index": 2, - "source_line_no": 711, - "source_snippet": "n2.plot", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 2, - "source_line_no": 713, - "source_snippet": "scaledProb.plot", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "source_line_no": 1102, - "source_snippet": "figure(3)", - "event_type": "new_figure", - "figure_ordinal": 3 - }, - { - "section_index": 3, - "source_line_no": 1103, - "source_snippet": "spikeColl.plot", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 3, - "source_line_no": 1104, - "source_snippet": "lambda.plot", - "event_type": "add_to_current", - "figure_ordinal": 3 - } - ] - }, - { - "topic": "PSTHEstimation", - "total_figures_expected": 2, - "total_figures_detected": 2, - "no_figure_utility": false, - "events": [ - { - "section_index": 1, - "source_line_no": 509, - "source_snippet": "spikeColl.plot", - "event_type": "new_figure", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "source_line_no": 510, - "source_snippet": "lambda.plot", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "source_line_no": 800, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 2 - }, - { - "section_index": 2, - "source_line_no": 805, - "source_snippet": "h1=trueRate.plot", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 2, - "source_line_no": 806, - "source_snippet": "h3=psthGLM.plot([],{{' ''k'',''Linewidth'',4'}})", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 2, - "source_line_no": 807, - "source_snippet": "h2=psth.plot([],{{' ''rx'',''Linewidth'',4'}})", - "event_type": "add_to_current", - "figure_ordinal": 2 - } - ] - }, - { - "topic": "SignalObjExamples", - "total_figures_expected": 16, - "total_figures_detected": 16, - "no_figure_utility": false, - "events": [ - { - "section_index": 1, - "source_line_no": 505, - "source_snippet": "subplot(2,1,1)", - "event_type": "new_figure", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "source_line_no": 505, - "source_snippet": "s.plot", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "source_line_no": 506, - "source_snippet": "subplot(2,1,2)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "source_line_no": 506, - "source_snippet": "s1.plot", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "source_line_no": 900, - "source_snippet": "subplot(2,1,1)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "source_line_no": 900, - "source_snippet": "s.plot", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "source_line_no": 901, - "source_snippet": "subplot(2,1,2)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "source_line_no": 901, - "source_snippet": "s.plot", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "source_line_no": 1202, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 2 - }, - { - "section_index": 1, - "source_line_no": 1203, - "source_snippet": "s.getSubSignal({'v1'}).plot", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 2, - "source_line_no": 1500, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 3 - }, - { - "section_index": 2, - "source_line_no": 1502, - "source_snippet": "subplot(2,1,1)", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 2, - "source_line_no": 1502, - "source_snippet": "s.plot", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 2, - "source_line_no": 1503, - "source_snippet": "subplot(2,1,2)", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 2, - "source_line_no": 1503, - "source_snippet": "s.plot", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 2, - "source_line_no": 1700, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 4 - }, - { - "section_index": 2, - "source_line_no": 1701, - "source_snippet": "subplot(2,1,1)", - "event_type": "add_to_current", - "figure_ordinal": 4 - }, - { - "section_index": 2, - "source_line_no": 1701, - "source_snippet": "s.plot", - "event_type": "add_to_current", - "figure_ordinal": 4 - }, - { - "section_index": 2, - "source_line_no": 1702, - "source_snippet": "subplot(2,1,2)", - "event_type": "add_to_current", - "figure_ordinal": 4 - }, - { - "section_index": 2, - "source_line_no": 1702, - "source_snippet": "s.plot", - "event_type": "add_to_current", - "figure_ordinal": 4 - }, - { - "section_index": 2, - "source_line_no": 2100, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 5 - }, - { - "section_index": 2, - "source_line_no": 2102, - "source_snippet": "subplot(2,1,1)", - "event_type": "add_to_current", - "figure_ordinal": 5 - }, - { - "section_index": 2, - "source_line_no": 2102, - "source_snippet": "s.plot('v1',{{' ''k'' '}})", - "event_type": "add_to_current", - "figure_ordinal": 5 - }, - { - "section_index": 2, - "source_line_no": 2103, - "source_snippet": "subplot(2,1,2)", - "event_type": "add_to_current", - "figure_ordinal": 5 - }, - { - "section_index": 2, - "source_line_no": 2103, - "source_snippet": "s.plot('all',{{' ''k'' '},{' ''-.g'' '}})", - "event_type": "add_to_current", - "figure_ordinal": 5 - }, - { - "section_index": 2, - "source_line_no": 2300, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 6 - }, - { - "section_index": 2, - "source_line_no": 2301, - "source_snippet": "subplot(2,1,1)", - "event_type": "add_to_current", - "figure_ordinal": 6 - }, - { - "section_index": 2, - "source_line_no": 2301, - "source_snippet": "s.plot({'v1','v2'})", - "event_type": "add_to_current", - "figure_ordinal": 6 - }, - { - "section_index": 2, - "source_line_no": 2302, - "source_snippet": "subplot(2,1,2)", - "event_type": "add_to_current", - "figure_ordinal": 6 - }, - { - "section_index": 2, - "source_line_no": 2302, - "source_snippet": "s.plot({'v1','v2'},{{' ''k'' '},{' ''-.g'' '}})", - "event_type": "add_to_current", - "figure_ordinal": 6 - }, - { - "section_index": 3, - "source_line_no": 2600, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 7 - }, - { - "section_index": 3, - "source_line_no": 2603, - "source_snippet": "subplot(2,1,1)", - "event_type": "add_to_current", - "figure_ordinal": 7 - }, - { - "section_index": 3, - "source_line_no": 2603, - "source_snippet": "s.plot", - "event_type": "add_to_current", - "figure_ordinal": 7 - }, - { - "section_index": 3, - "source_line_no": 2604, - "source_snippet": "subplot(2,1,2)", - "event_type": "add_to_current", - "figure_ordinal": 7 - }, - { - "section_index": 3, - "source_line_no": 2604, - "source_snippet": "s1.plot", - "event_type": "add_to_current", - "figure_ordinal": 7 - }, - { - "section_index": 3, - "source_line_no": 2800, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 8 - }, - { - "section_index": 3, - "source_line_no": 2801, - "source_snippet": "subplot(2,1,1)", - "event_type": "add_to_current", - "figure_ordinal": 8 - }, - { - "section_index": 3, - "source_line_no": 2801, - "source_snippet": "s.getSigInTimeWindow(-2,3).plot", - "event_type": "add_to_current", - "figure_ordinal": 8 - }, - { - "section_index": 3, - "source_line_no": 2802, - "source_snippet": "subplot(2,1,2)", - "event_type": "add_to_current", - "figure_ordinal": 8 - }, - { - "section_index": 3, - "source_line_no": 2802, - "source_snippet": "s.plot", - "event_type": "add_to_current", - "figure_ordinal": 8 - }, - { - "section_index": 4, - "source_line_no": 3101, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 9 - }, - { - "section_index": 4, - "source_line_no": 3104, - "source_snippet": "s5.plot", - "event_type": "add_to_current", - "figure_ordinal": 9 - }, - { - "section_index": 4, - "source_line_no": 3106, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 10 - }, - { - "section_index": 4, - "source_line_no": 3108, - "source_snippet": "s2.plot", - "event_type": "add_to_current", - "figure_ordinal": 10 - }, - { - "section_index": 4, - "source_line_no": 3400, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 11 - }, - { - "section_index": 4, - "source_line_no": 3402, - "source_snippet": "s4.plot", - "event_type": "add_to_current", - "figure_ordinal": 11 - }, - { - "section_index": 4, - "source_line_no": 3404, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 12 - }, - { - "section_index": 4, - "source_line_no": 3405, - "source_snippet": "subplot(3,1,1)", - "event_type": "add_to_current", - "figure_ordinal": 12 - }, - { - "section_index": 4, - "source_line_no": 3406, - "source_snippet": "s.integral.plot", - "event_type": "add_to_current", - "figure_ordinal": 12 - }, - { - "section_index": 4, - "source_line_no": 3407, - "source_snippet": "subplot(3,1,2)", - "event_type": "add_to_current", - "figure_ordinal": 12 - }, - { - "section_index": 4, - "source_line_no": 3408, - "source_snippet": "s.derivative.plot", - "event_type": "add_to_current", - "figure_ordinal": 12 - }, - { - "section_index": 4, - "source_line_no": 3409, - "source_snippet": "subplot(3,1,3)", - "event_type": "add_to_current", - "figure_ordinal": 12 - }, - { - "section_index": 4, - "source_line_no": 3411, - "source_snippet": "s6.plot", - "event_type": "add_to_current", - "figure_ordinal": 12 - }, - { - "section_index": 5, - "source_line_no": 3701, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 13 - }, - { - "section_index": 5, - "source_line_no": 3704, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 14 - }, - { - "section_index": 6, - "source_line_no": 4105, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 15 - }, - { - "section_index": 6, - "source_line_no": 4106, - "source_snippet": "subplot(2,1,1)", - "event_type": "add_to_current", - "figure_ordinal": 15 - }, - { - "section_index": 6, - "source_line_no": 4106, - "source_snippet": "s.plot", - "event_type": "add_to_current", - "figure_ordinal": 15 - }, - { - "section_index": 6, - "source_line_no": 4107, - "source_snippet": "subplot(2,1,2)", - "event_type": "add_to_current", - "figure_ordinal": 15 - }, - { - "section_index": 6, - "source_line_no": 4400, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 16 - }, - { - "section_index": 6, - "source_line_no": 4402, - "source_snippet": "subplot(3,1,1)", - "event_type": "add_to_current", - "figure_ordinal": 16 - }, - { - "section_index": 6, - "source_line_no": 4404, - "source_snippet": "subplot(3,1,2)", - "event_type": "add_to_current", - "figure_ordinal": 16 - }, - { - "section_index": 6, - "source_line_no": 4406, - "source_snippet": "subplot(3,1,3)", - "event_type": "add_to_current", - "figure_ordinal": 16 - } - ] - }, - { - "topic": "StimulusDecode2D", - "total_figures_expected": 8, - "total_figures_detected": 4, - "no_figure_utility": false, - "events": [ - { - "section_index": 0, - "source_line_no": 318, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 1 - }, - { - "section_index": 0, - "source_line_no": 319, - "source_snippet": "plot(px,py)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "source_line_no": 628, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 2 - }, - { - "section_index": 1, - "source_line_no": 630, - "source_snippet": "lambda{i}.plot", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 1, - "source_line_no": 637, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 3 - }, - { - "section_index": 1, - "source_line_no": 649, - "source_snippet": "subplot(1,numRealizations,i)", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 1, - "source_line_no": 651, - "source_snippet": "subplot(fact(1),fact(2),i)", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 1, - "source_line_no": 653, - "source_snippet": "subplot(fact(1)*fact(2),fact(3),i)", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 1, - "source_line_no": 655, - "source_snippet": "pcolor(X,Y,placeField{i}), shading interp", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 2, - "source_line_no": 1118, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 4 - }, - { - "section_index": 2, - "source_line_no": 1119, - "source_snippet": "plot(x_u(1,:),x_u(2,:),'b',px,py,'k')", - "event_type": "add_to_current", - "figure_ordinal": 4 - } - ] - }, - { - "topic": "TrialConfigExamples", - "total_figures_expected": 0, - "total_figures_detected": 0, - "no_figure_utility": false, - "events": [] - }, - { - "topic": "TrialExamples", - "total_figures_expected": 6, - "total_figures_detected": 6, - "no_figure_utility": false, - "events": [ - { - "section_index": 1, - "source_line_no": 602, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "source_line_no": 602, - "source_snippet": "h.plot", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "source_line_no": 903, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 2 - }, - { - "section_index": 1, - "source_line_no": 903, - "source_snippet": "cc.plot", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 1, - "source_line_no": 1203, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 3 - }, - { - "section_index": 1, - "source_line_no": 1203, - "source_snippet": "e.plot", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 1, - "source_line_no": 1506, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 4 - }, - { - "section_index": 1, - "source_line_no": 1506, - "source_snippet": "spikeColl.plot", - "event_type": "add_to_current", - "figure_ordinal": 4 - }, - { - "section_index": 1, - "source_line_no": 1801, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 5 - }, - { - "section_index": 1, - "source_line_no": 1801, - "source_snippet": "trial1.plot", - "event_type": "add_to_current", - "figure_ordinal": 5 - }, - { - "section_index": 1, - "source_line_no": 2101, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 6 - }, - { - "section_index": 1, - "source_line_no": 2101, - "source_snippet": "trial1.plot", - "event_type": "add_to_current", - "figure_ordinal": 6 - } - ] - }, - { - "topic": "ValidationDataSet", - "total_figures_expected": 9, - "total_figures_detected": 3, - "no_figure_utility": false, - "events": [ - { - "section_index": 1, - "source_line_no": 1701, - "source_snippet": "subplot(2,4,[5 6])", - "event_type": "new_figure", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "source_line_no": 1701, - "source_snippet": "plot(mu,'ro', 'MarkerSize',10)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "source_line_no": 1702, - "source_snippet": "subplot(2,4,[5 6])", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "source_line_no": 1702, - "source_snippet": "plot(mu,'ro', 'MarkerSize',10)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "source_line_no": 1703, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 2 - }, - { - "section_index": 1, - "source_line_no": 1704, - "source_snippet": "subplot(1,2,1)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 1, - "source_line_no": 1704, - "source_snippet": "results{1}.lambda.plot", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 1, - "source_line_no": 1704, - "source_snippet": "plot(results{1}.lambda.time,lambda*ones(length(results{1}.lambda.time),1),'r-.','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 1, - "source_line_no": 1705, - "source_snippet": "subplot(1,2,2)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 1, - "source_line_no": 1705, - "source_snippet": "results{2}.lambda.plot", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 1, - "source_line_no": 1705, - "source_snippet": "plot(results{2}.lambda.time,lambda*ones(length(results{2}.lambda.time),1),'r-.','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 2, - "source_line_no": 3003, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 3 - }, - { - "section_index": 2, - "source_line_no": 3004, - "source_snippet": "subplot(1,2,1)", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 2, - "source_line_no": 3004, - "source_snippet": "results{1}.lambda.plot", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 2, - "source_line_no": 3005, - "source_snippet": "subplot(1,2,2)", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 2, - "source_line_no": 3005, - "source_snippet": "results{2}.lambda.plot", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 2, - "source_line_no": 3301, - "source_snippet": "Summary.plotSummary", - "event_type": "add_to_current", - "figure_ordinal": 3 - } - ] - }, - { - "topic": "mEPSCAnalysis", - "total_figures_expected": 4, - "total_figures_detected": 2, - "no_figure_utility": false, - "events": [ - { - "section_index": 2, - "source_line_no": 1823, - "source_snippet": "results.plotResults", - "event_type": "new_figure", - "figure_ordinal": 1 - }, - { - "section_index": 4, - "source_line_no": 2600, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 2 - }, - { - "section_index": 4, - "source_line_no": 2601, - "source_snippet": "nst.plot", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 7, - "source_line_no": 3601, - "source_snippet": "results.plotResults", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 7, - "source_line_no": 3603, - "source_snippet": "Summary.plotSummary", - "event_type": "add_to_current", - "figure_ordinal": 2 - } - ] - }, - { - "topic": "nSTATPaperExamples", - "total_figures_expected": 25, - "total_figures_detected": 25, - "no_figure_utility": false, - "events": [ - { - "section_index": 2, - "source_line_no": 1036, - "source_snippet": "h=figure('OuterPosition',[scrsz(3)*.01 scrsz(4)*.04 ...", - "event_type": "new_figure", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "source_line_no": 1039, - "source_snippet": "subplot(2,2,1)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "source_line_no": 1039, - "source_snippet": "spikeColl.plot", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "source_line_no": 1048, - "source_snippet": "subplot(2,2,3)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "source_line_no": 1048, - "source_snippet": "results.KSPlot", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "source_line_no": 1049, - "source_snippet": "subplot(2,2,2)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "source_line_no": 1050, - "source_snippet": "subplot(2,2,4)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "source_line_no": 1050, - "source_snippet": "results.lambda.plot([],{{' ''b'' ,''Linewidth'',2'}})", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 4, - "source_line_no": 1801, - "source_snippet": "h=figure('OuterPosition',[scrsz(3)*.01 scrsz(4)*.04 scrsz(3)*.6 ...", - "event_type": "new_figure", - "figure_ordinal": 2 - }, - { - "section_index": 4, - "source_line_no": 1804, - "source_snippet": "subplot(2,1,1)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 4, - "source_line_no": 1805, - "source_snippet": "nstConst.plot", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 4, - "source_line_no": 1813, - "source_snippet": "subplot(2,1,2)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 4, - "source_line_no": 1814, - "source_snippet": "nst.plot", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 7, - "source_line_no": 3004, - "source_snippet": "h=figure('OuterPosition',[scrsz(3)*.01 scrsz(4)*.04 ...", - "event_type": "new_figure", - "figure_ordinal": 3 - }, - { - "section_index": 7, - "source_line_no": 3007, - "source_snippet": "subplot(2,2,1)", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 7, - "source_line_no": 3007, - "source_snippet": "spikeColl.plot", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 7, - "source_line_no": 3019, - "source_snippet": "plot([495", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 7, - "source_line_no": 3020, - "source_snippet": "plot([765", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 7, - "source_line_no": 3022, - "source_snippet": "subplot(2,2,3)", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 7, - "source_line_no": 3022, - "source_snippet": "results.KSPlot", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 7, - "source_line_no": 3023, - "source_snippet": "subplot(2,2,2)", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 7, - "source_line_no": 3024, - "source_snippet": "subplot(2,2,4)", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 7, - "source_line_no": 3025, - "source_snippet": "results.lambda.getSubSignal(1).plot([],{{' ''b'' ,''Linewidth'',2'}})", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 7, - "source_line_no": 3026, - "source_snippet": "results.lambda.getSubSignal(2).plot([],{{' ''g'' ,''Linewidth'',2'}})", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 9, - "source_line_no": 3628, - "source_snippet": "h=figure('Position',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.8 scrsz(4)*.8])", - "event_type": "new_figure", - "figure_ordinal": 4 - }, - { - "section_index": 9, - "source_line_no": 3629, - "source_snippet": "subplot(3,1,1)", - "event_type": "add_to_current", - "figure_ordinal": 4 - }, - { - "section_index": 9, - "source_line_no": 3631, - "source_snippet": "nst2.plot", - "event_type": "add_to_current", - "figure_ordinal": 4 - }, - { - "section_index": 9, - "source_line_no": 3641, - "source_snippet": "subplot(3,1,2)", - "event_type": "add_to_current", - "figure_ordinal": 4 - }, - { - "section_index": 9, - "source_line_no": 3642, - "source_snippet": "stim.getSigInTimeWindow(0,21).plot([],{{' ''k'' '}})", - "event_type": "add_to_current", - "figure_ordinal": 4 - }, - { - "section_index": 9, - "source_line_no": 3655, - "source_snippet": "subplot(3,1,3)", - "event_type": "add_to_current", - "figure_ordinal": 4 - }, - { - "section_index": 9, - "source_line_no": 3656, - "source_snippet": "stim.derivative.getSigInTimeWindow(0,21).plot([],{{' ''k'' '}})", - "event_type": "add_to_current", - "figure_ordinal": 4 - }, - { - "section_index": 9, - "source_line_no": 3910, - "source_snippet": "h=figure('Position',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.8 scrsz(4)*.8])", - "event_type": "new_figure", - "figure_ordinal": 5 - }, - { - "section_index": 9, - "source_line_no": 3912, - "source_snippet": "subplot(7,2,[1 3 5])", - "event_type": "add_to_current", - "figure_ordinal": 5 - }, - { - "section_index": 9, - "source_line_no": 3913, - "source_snippet": "results.Residual.xcov(stim).windowedSignal([0,1]).plot", - "event_type": "add_to_current", - "figure_ordinal": 5 - }, - { - "section_index": 9, - "source_line_no": 3921, - "source_snippet": "h=plot(ShiftTime,m,'ro','Linewidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 5 - }, - { - "section_index": 11, - "source_line_no": 4733, - "source_snippet": "subplot(7,2,2)", - "event_type": "add_to_current", - "figure_ordinal": 5 - }, - { - "section_index": 11, - "source_line_no": 4735, - "source_snippet": "plot(x,results{1}.KSStats.ks_stat,'.-')", - "event_type": "add_to_current", - "figure_ordinal": 5 - }, - { - "section_index": 11, - "source_line_no": 4736, - "source_snippet": "plot(x(windowIndex),results{1}.KSStats.ks_stat(windowIndex),'r*')", - "event_type": "add_to_current", - "figure_ordinal": 5 - }, - { - "section_index": 11, - "source_line_no": 4750, - "source_snippet": "subplot(7,2,4)", - "event_type": "add_to_current", - "figure_ordinal": 5 - }, - { - "section_index": 11, - "source_line_no": 4750, - "source_snippet": "plot(x,dAIC,'.-')", - "event_type": "add_to_current", - "figure_ordinal": 5 - }, - { - "section_index": 11, - "source_line_no": 4756, - "source_snippet": "plot(x(windowIndex),dAIC(windowIndex),'r*')", - "event_type": "add_to_current", - "figure_ordinal": 5 - }, - { - "section_index": 11, - "source_line_no": 4759, - "source_snippet": "subplot(7,2,6)", - "event_type": "add_to_current", - "figure_ordinal": 5 - }, - { - "section_index": 11, - "source_line_no": 4759, - "source_snippet": "plot(x,dBIC,'.-')", - "event_type": "add_to_current", - "figure_ordinal": 5 - }, - { - "section_index": 11, - "source_line_no": 4762, - "source_snippet": "plot(x(windowIndex),dBIC(windowIndex),'r*')", - "event_type": "add_to_current", - "figure_ordinal": 5 - }, - { - "section_index": 11, - "source_line_no": 4784, - "source_snippet": "c{3}.setName('Baseline+Stimulus+Hist')", - "event_type": "add_to_current", - "figure_ordinal": 5 - }, - { - "section_index": 11, - "source_line_no": 4790, - "source_snippet": "'\\lambda_{const+stim+hist}'})", - "event_type": "add_to_current", - "figure_ordinal": 5 - }, - { - "section_index": 11, - "source_line_no": 4791, - "source_snippet": "subplot(7,2,[9 11 13])", - "event_type": "add_to_current", - "figure_ordinal": 5 - }, - { - "section_index": 11, - "source_line_no": 4791, - "source_snippet": "results.KSPlot", - "event_type": "add_to_current", - "figure_ordinal": 5 - }, - { - "section_index": 11, - "source_line_no": 4792, - "source_snippet": "subplot(7,2,[10 12 14])", - "event_type": "add_to_current", - "figure_ordinal": 5 - }, - { - "section_index": 12, - "source_line_no": 5023, - "source_snippet": "h=figure('Position',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.8 scrsz(4)*.8])", - "event_type": "new_figure", - "figure_ordinal": 6 - }, - { - "section_index": 12, - "source_line_no": 5025, - "source_snippet": "subplot(2,2,3)", - "event_type": "add_to_current", - "figure_ordinal": 6 - }, - { - "section_index": 12, - "source_line_no": 5025, - "source_snippet": "spikeCollSim.plot", - "event_type": "add_to_current", - "figure_ordinal": 6 - }, - { - "section_index": 12, - "source_line_no": 5034, - "source_snippet": "subplot(2,2,1)", - "event_type": "add_to_current", - "figure_ordinal": 6 - }, - { - "section_index": 12, - "source_line_no": 5034, - "source_snippet": "lambda.plot", - "event_type": "add_to_current", - "figure_ordinal": 6 - }, - { - "section_index": 12, - "source_line_no": 5053, - "source_snippet": "subplot(2,2,2)", - "event_type": "add_to_current", - "figure_ordinal": 6 - }, - { - "section_index": 12, - "source_line_no": 5053, - "source_snippet": "spikeCollReal1.plot", - "event_type": "add_to_current", - "figure_ordinal": 6 - }, - { - "section_index": 12, - "source_line_no": 5072, - "source_snippet": "subplot(2,2,4)", - "event_type": "add_to_current", - "figure_ordinal": 6 - }, - { - "section_index": 12, - "source_line_no": 5072, - "source_snippet": "spikeCollReal2.plot", - "event_type": "add_to_current", - "figure_ordinal": 6 - }, - { - "section_index": 13, - "source_line_no": 5303, - "source_snippet": "h=figure('Position',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.8 scrsz(4)*.8])", - "event_type": "new_figure", - "figure_ordinal": 7 - }, - { - "section_index": 13, - "source_line_no": 5309, - "source_snippet": "subplot(2,3,4)", - "event_type": "add_to_current", - "figure_ordinal": 7 - }, - { - "section_index": 13, - "source_line_no": 5311, - "source_snippet": "h1=true.plot([],{{' ''b'',''Linewidth'',4'}})", - "event_type": "add_to_current", - "figure_ordinal": 7 - }, - { - "section_index": 13, - "source_line_no": 5312, - "source_snippet": "h3=psthGLM.plot([],{{' ''k'',''Linewidth'',4'}})", - "event_type": "add_to_current", - "figure_ordinal": 7 - }, - { - "section_index": 13, - "source_line_no": 5313, - "source_snippet": "h2=psth.plot([],{{' ''rx'',''Linewidth'',4'}})", - "event_type": "add_to_current", - "figure_ordinal": 7 - }, - { - "section_index": 13, - "source_line_no": 5327, - "source_snippet": "subplot(2,3,1)", - "event_type": "add_to_current", - "figure_ordinal": 7 - }, - { - "section_index": 13, - "source_line_no": 5327, - "source_snippet": "spikeCollSim.plot", - "event_type": "add_to_current", - "figure_ordinal": 7 - }, - { - "section_index": 13, - "source_line_no": 5334, - "source_snippet": "subplot(2,3,5)", - "event_type": "add_to_current", - "figure_ordinal": 7 - }, - { - "section_index": 13, - "source_line_no": 5339, - "source_snippet": "h3=psthGLMReal1.plot([],{{' ''k'',''Linewidth'',4'}})", - "event_type": "add_to_current", - "figure_ordinal": 7 - }, - { - "section_index": 13, - "source_line_no": 5340, - "source_snippet": "h2=psthReal1.plot([],{{' ''rx'',''Linewidth'',4'}})", - "event_type": "add_to_current", - "figure_ordinal": 7 - }, - { - "section_index": 13, - "source_line_no": 5349, - "source_snippet": "subplot(2,3,2)", - "event_type": "add_to_current", - "figure_ordinal": 7 - }, - { - "section_index": 13, - "source_line_no": 5349, - "source_snippet": "spikeCollReal1.plot", - "event_type": "add_to_current", - "figure_ordinal": 7 - }, - { - "section_index": 13, - "source_line_no": 5355, - "source_snippet": "subplot(2,3,6)", - "event_type": "add_to_current", - "figure_ordinal": 7 - }, - { - "section_index": 13, - "source_line_no": 5358, - "source_snippet": "h3=psthGLMReal2.plot([],{{' ''k'',''Linewidth'',4'}})", - "event_type": "add_to_current", - "figure_ordinal": 7 - }, - { - "section_index": 13, - "source_line_no": 5359, - "source_snippet": "h2=psthReal2.plot([],{{' ''rx'',''Linewidth'',4'}})", - "event_type": "add_to_current", - "figure_ordinal": 7 - }, - { - "section_index": 13, - "source_line_no": 5369, - "source_snippet": "subplot(2,3,3)", - "event_type": "add_to_current", - "figure_ordinal": 7 - }, - { - "section_index": 13, - "source_line_no": 5369, - "source_snippet": "spikeCollReal2.plot", - "event_type": "add_to_current", - "figure_ordinal": 7 - }, - { - "section_index": 15, - "source_line_no": 6002, - "source_snippet": "h=figure('Position',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.8 scrsz(4)*.8])", - "event_type": "new_figure", - "figure_ordinal": 8 - }, - { - "section_index": 15, - "source_line_no": 6005, - "source_snippet": "subplot(3,2,[3 4])", - "event_type": "add_to_current", - "figure_ordinal": 8 - }, - { - "section_index": 15, - "source_line_no": 6005, - "source_snippet": "spikeColl.plot", - "event_type": "add_to_current", - "figure_ordinal": 8 - }, - { - "section_index": 15, - "source_line_no": 6026, - "source_snippet": "subplot(3,2,1)", - "event_type": "add_to_current", - "figure_ordinal": 8 - }, - { - "section_index": 15, - "source_line_no": 6026, - "source_snippet": "plot(time,u,'k','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 8 - }, - { - "section_index": 15, - "source_line_no": 6035, - "source_snippet": "subplot(3,2,2)", - "event_type": "add_to_current", - "figure_ordinal": 8 - }, - { - "section_index": 15, - "source_line_no": 6035, - "source_snippet": "plot(1:length(b1),b1,'k','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 8 - }, - { - "section_index": 15, - "source_line_no": 6043, - "source_snippet": "subplot(3,2,[5 6])", - "event_type": "add_to_current", - "figure_ordinal": 8 - }, - { - "section_index": 15, - "source_line_no": 6044, - "source_snippet": "imagesc(stimData'./delta); set(gca, 'YDir','normal');", - "event_type": "add_to_current", - "figure_ordinal": 8 - }, - { - "section_index": 17, - "source_line_no": 7004, - "source_snippet": "h=figure('Position',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.8 scrsz(4)*.8])", - "event_type": "new_figure", - "figure_ordinal": 9 - }, - { - "section_index": 17, - "source_line_no": 7005, - "source_snippet": "subplot(2,2,1)", - "event_type": "add_to_current", - "figure_ordinal": 9 - }, - { - "section_index": 17, - "source_line_no": 7005, - "source_snippet": "t.KSPlot", - "event_type": "add_to_current", - "figure_ordinal": 9 - }, - { - "section_index": 17, - "source_line_no": 7006, - "source_snippet": "subplot(2,2,2)", - "event_type": "add_to_current", - "figure_ordinal": 9 - }, - { - "section_index": 17, - "source_line_no": 7006, - "source_snippet": "t.plotResidual", - "event_type": "add_to_current", - "figure_ordinal": 9 - }, - { - "section_index": 17, - "source_line_no": 7007, - "source_snippet": "subplot(2,2,3)", - "event_type": "add_to_current", - "figure_ordinal": 9 - }, - { - "section_index": 17, - "source_line_no": 7008, - "source_snippet": "subplot(2,2,4)", - "event_type": "add_to_current", - "figure_ordinal": 9 - }, - { - "section_index": 17, - "source_line_no": 7230, - "source_snippet": "h=figure('OuterPosition',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.4 scrsz(4)*.8])", - "event_type": "new_figure", - "figure_ordinal": 10 - }, - { - "section_index": 17, - "source_line_no": 7234, - "source_snippet": "subplot(3,1,[1 2 3])", - "event_type": "add_to_current", - "figure_ordinal": 10 - }, - { - "section_index": 17, - "source_line_no": 7236, - "source_snippet": "surf((1:length(b1))',stim.time,actStimEffect,'FaceAlpha',0.1,...", - "event_type": "add_to_current", - "figure_ordinal": 10 - }, - { - "section_index": 17, - "source_line_no": 7242, - "source_snippet": "surf((1:length(b1))',stim.time,estStimEffect(:,1:length(b1)),...", - "event_type": "add_to_current", - "figure_ordinal": 10 - }, - { - "section_index": 17, - "source_line_no": 7252, - "source_snippet": "h=figure('OuterPosition',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.4 scrsz(4)*.8])", - "event_type": "new_figure", - "figure_ordinal": 11 - }, - { - "section_index": 17, - "source_line_no": 7255, - "source_snippet": "subplot(3,1,1)", - "event_type": "add_to_current", - "figure_ordinal": 11 - }, - { - "section_index": 17, - "source_line_no": 7273, - "source_snippet": "subplot(3,1,2)", - "event_type": "add_to_current", - "figure_ordinal": 11 - }, - { - "section_index": 17, - "source_line_no": 7290, - "source_snippet": "subplot(3,1,3)", - "event_type": "add_to_current", - "figure_ordinal": 11 - }, - { - "section_index": 18, - "source_line_no": 7523, - "source_snippet": "h=figure('OuterPosition',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.8 scrsz(4)*.8])", - "event_type": "new_figure", - "figure_ordinal": 12 - }, - { - "section_index": 18, - "source_line_no": 7525, - "source_snippet": "subplot(2,3,1)", - "event_type": "add_to_current", - "figure_ordinal": 12 - }, - { - "section_index": 18, - "source_line_no": 7528, - "source_snippet": "spikeRateBinom.plot([],{{' ''k'',''Linewidth'',4'}})", - "event_type": "add_to_current", - "figure_ordinal": 12 - }, - { - "section_index": 18, - "source_line_no": 7532, - "source_snippet": "plot(lt*[1", - "event_type": "add_to_current", - "figure_ordinal": 12 - }, - { - "section_index": 18, - "source_line_no": 7542, - "source_snippet": "h=subplot(2,3,[2 3 5 6])", - "event_type": "add_to_current", - "figure_ordinal": 12 - }, - { - "section_index": 18, - "source_line_no": 7545, - "source_snippet": "imagesc(ProbMat)", - "event_type": "add_to_current", - "figure_ordinal": 12 - }, - { - "section_index": 18, - "source_line_no": 7549, - "source_snippet": "plot3(m,k,1,'r*')", - "event_type": "add_to_current", - "figure_ordinal": 12 - }, - { - "section_index": 18, - "source_line_no": 7559, - "source_snippet": "subplot(2,3,4)", - "event_type": "add_to_current", - "figure_ordinal": 12 - }, - { - "section_index": 18, - "source_line_no": 7576, - "source_snippet": "h1=stim1.plot([],{{' ''k'',''Linewidth'',4'}})", - "event_type": "add_to_current", - "figure_ordinal": 12 - }, - { - "section_index": 18, - "source_line_no": 7577, - "source_snippet": "h2=stimlt.plot([],{{' ''r'',''Linewidth'',4'}})", - "event_type": "add_to_current", - "figure_ordinal": 12 - }, - { - "section_index": 20, - "source_line_no": 8406, - "source_snippet": "h=figure('OuterPosition',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.6 scrsz(4)*.9])", - "event_type": "new_figure", - "figure_ordinal": 13 - }, - { - "section_index": 20, - "source_line_no": 8409, - "source_snippet": "subplot(2,2,i)", - "event_type": "add_to_current", - "figure_ordinal": 13 - }, - { - "section_index": 20, - "source_line_no": 8410, - "source_snippet": "h1=plot(x,y,'b','Linewidth',.5)", - "event_type": "add_to_current", - "figure_ordinal": 13 - }, - { - "section_index": 20, - "source_line_no": 8411, - "source_snippet": "h2=plot(neuron{exampleCell(i)}.xN,neuron{exampleCell(i)}.yN,'r.',...", - "event_type": "add_to_current", - "figure_ordinal": 13 - }, - { - "section_index": 22, - "source_line_no": 9302, - "source_snippet": "h=figure('OuterPosition',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.6 scrsz(4)*.5])", - "event_type": "new_figure", - "figure_ordinal": 14 - }, - { - "section_index": 22, - "source_line_no": 9303, - "source_snippet": "subplot(1,3,1)", - "event_type": "add_to_current", - "figure_ordinal": 14 - }, - { - "section_index": 22, - "source_line_no": 9314, - "source_snippet": "subplot(1,3,2)", - "event_type": "add_to_current", - "figure_ordinal": 14 - }, - { - "section_index": 22, - "source_line_no": 9323, - "source_snippet": "subplot(1,3,3)", - "event_type": "add_to_current", - "figure_ordinal": 14 - }, - { - "section_index": 23, - "source_line_no": 9653, - "source_snippet": "h4=figure(4)", - "event_type": "new_figure", - "figure_ordinal": 15 - }, - { - "section_index": 23, - "source_line_no": 9664, - "source_snippet": "subplot(7,7,i)", - "event_type": "add_to_current", - "figure_ordinal": 15 - }, - { - "section_index": 23, - "source_line_no": 9666, - "source_snippet": "h6=figure(6)", - "event_type": "new_figure", - "figure_ordinal": 16 - }, - { - "section_index": 23, - "source_line_no": 9677, - "source_snippet": "subplot(6,7,i)", - "event_type": "add_to_current", - "figure_ordinal": 16 - }, - { - "section_index": 23, - "source_line_no": 9679, - "source_snippet": "pcolor(x_new,y_new,lambdaGaussian{i}), shading interp", - "event_type": "add_to_current", - "figure_ordinal": 16 - }, - { - "section_index": 23, - "source_line_no": 9684, - "source_snippet": "h5=figure(5)", - "event_type": "new_figure", - "figure_ordinal": 17 - }, - { - "section_index": 23, - "source_line_no": 9695, - "source_snippet": "subplot(7,7,i)", - "event_type": "add_to_current", - "figure_ordinal": 17 - }, - { - "section_index": 23, - "source_line_no": 9697, - "source_snippet": "h7=figure(7)", - "event_type": "new_figure", - "figure_ordinal": 18 - }, - { - "section_index": 23, - "source_line_no": 9708, - "source_snippet": "subplot(6,7,i)", - "event_type": "add_to_current", - "figure_ordinal": 18 - }, - { - "section_index": 23, - "source_line_no": 9710, - "source_snippet": "pcolor(x_new,y_new,lambdaZernike{i}), shading interp", - "event_type": "add_to_current", - "figure_ordinal": 18 - }, - { - "section_index": 23, - "source_line_no": 9823, - "source_snippet": "h9=figure(9)", - "event_type": "new_figure", - "figure_ordinal": 19 - }, - { - "section_index": 23, - "source_line_no": 9835, - "source_snippet": "plot(x,y,neuron{exampleCell}.xN,neuron{exampleCell}.yN,'r.')", - "event_type": "add_to_current", - "figure_ordinal": 19 - }, - { - "section_index": 25, - "source_line_no": 10329, - "source_snippet": "h=figure('Position',[scrsz(3)*.1 scrsz(4)*.1 ...", - "event_type": "new_figure", - "figure_ordinal": 20 - }, - { - "section_index": 25, - "source_line_no": 10332, - "source_snippet": "subplot(3,1,1)", - "event_type": "add_to_current", - "figure_ordinal": 20 - }, - { - "section_index": 25, - "source_line_no": 10332, - "source_snippet": "plot(time,x,'k')", - "event_type": "add_to_current", - "figure_ordinal": 20 - }, - { - "section_index": 25, - "source_line_no": 10338, - "source_snippet": "subplot(3,1,2)", - "event_type": "add_to_current", - "figure_ordinal": 20 - }, - { - "section_index": 25, - "source_line_no": 10338, - "source_snippet": "lambda.plot([],{{' ''k'',''Linewidth'',1'}})", - "event_type": "add_to_current", - "figure_ordinal": 20 - }, - { - "section_index": 25, - "source_line_no": 10348, - "source_snippet": "subplot(3,1,3)", - "event_type": "add_to_current", - "figure_ordinal": 20 - }, - { - "section_index": 25, - "source_line_no": 10348, - "source_snippet": "spikeColl.plot", - "event_type": "add_to_current", - "figure_ordinal": 20 - }, - { - "section_index": 25, - "source_line_no": 10517, - "source_snippet": "h=figure('Position',[scrsz(3)*.1 scrsz(4)*.1 scrsz(3)*.8 scrsz(4)*.6])", - "event_type": "new_figure", - "figure_ordinal": 21 - }, - { - "section_index": 25, - "source_line_no": 10532, - "source_snippet": "hEst = estimatedStimulus.plot([],{{' ''k'',''Linewidth'',4'}})", - "event_type": "add_to_current", - "figure_ordinal": 21 - }, - { - "section_index": 25, - "source_line_no": 10533, - "source_snippet": "hStim=stim.plot([],{{' ''b'',''Linewidth'',4'}})", - "event_type": "add_to_current", - "figure_ordinal": 21 - }, - { - "section_index": 26, - "source_line_no": 10951, - "source_snippet": "fig1=figure('OuterPosition',[scrsz(3)*.1 scrsz(4)*.1 ...", - "event_type": "new_figure", - "figure_ordinal": 22 - }, - { - "section_index": 26, - "source_line_no": 10954, - "source_snippet": "subplot(4,2,[1 3])", - "event_type": "add_to_current", - "figure_ordinal": 22 - }, - { - "section_index": 26, - "source_line_no": 10955, - "source_snippet": "plot(100*x(1,:),100*x(2,:),'k','Linewidth',2)", - "event_type": "add_to_current", - "figure_ordinal": 22 - }, - { - "section_index": 26, - "source_line_no": 10962, - "source_snippet": "h1=plot(100*x(1,1),100*x(2,1),'bo','MarkerSize',14)", - "event_type": "add_to_current", - "figure_ordinal": 22 - }, - { - "section_index": 26, - "source_line_no": 10963, - "source_snippet": "h2=plot(100*x(1,end),100*x(2,end),'ro','MarkerSize',14)", - "event_type": "add_to_current", - "figure_ordinal": 22 - }, - { - "section_index": 26, - "source_line_no": 10967, - "source_snippet": "subplot(4,2,5)", - "event_type": "add_to_current", - "figure_ordinal": 22 - }, - { - "section_index": 26, - "source_line_no": 10967, - "source_snippet": "h1=plot(time,100*x(1,:),'k','Linewidth',2)", - "event_type": "add_to_current", - "figure_ordinal": 22 - }, - { - "section_index": 26, - "source_line_no": 10968, - "source_snippet": "h2=plot(time,100*x(2,:),'k-.','Linewidth',2)", - "event_type": "add_to_current", - "figure_ordinal": 22 - }, - { - "section_index": 26, - "source_line_no": 10977, - "source_snippet": "subplot(4,2,7)", - "event_type": "add_to_current", - "figure_ordinal": 22 - }, - { - "section_index": 26, - "source_line_no": 10978, - "source_snippet": "h1=plot(time,100*x(3,:),'k','Linewidth',2)", - "event_type": "add_to_current", - "figure_ordinal": 22 - }, - { - "section_index": 26, - "source_line_no": 10979, - "source_snippet": "h2=plot(time,100*x(4,:),'k-.','Linewidth',2)", - "event_type": "add_to_current", - "figure_ordinal": 22 - }, - { - "section_index": 26, - "source_line_no": 11027, - "source_snippet": "subplot(4,2,[6 8])", - "event_type": "add_to_current", - "figure_ordinal": 22 - }, - { - "section_index": 26, - "source_line_no": 11028, - "source_snippet": "h2=lambda{i}.plot([],{{' ''k'', ''LineWidth'' ,.5'}})", - "event_type": "add_to_current", - "figure_ordinal": 22 - }, - { - "section_index": 26, - "source_line_no": 11041, - "source_snippet": "subplot(4,2,[2,4])", - "event_type": "add_to_current", - "figure_ordinal": 22 - }, - { - "section_index": 26, - "source_line_no": 11041, - "source_snippet": "spikeColl.plot", - "event_type": "add_to_current", - "figure_ordinal": 22 - }, - { - "section_index": 26, - "source_line_no": 11103, - "source_snippet": "fig1=figure('OuterPosition',[scrsz(3)*.1 scrsz(4)*.1 ...", - "event_type": "new_figure", - "figure_ordinal": 23 - }, - { - "section_index": 26, - "source_line_no": 11169, - "source_snippet": "subplot(4,2,1:4)", - "event_type": "add_to_current", - "figure_ordinal": 23 - }, - { - "section_index": 26, - "source_line_no": 11169, - "source_snippet": "h1=plot(100*x(1,:),100*x(2,:),'k','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 23 - }, - { - "section_index": 26, - "source_line_no": 11176, - "source_snippet": "subplot(4,2,1:4)", - "event_type": "add_to_current", - "figure_ordinal": 23 - }, - { - "section_index": 26, - "source_line_no": 11176, - "source_snippet": "h2=plot(100*x_u(1,:)',100*x_u(2,:)','b')", - "event_type": "add_to_current", - "figure_ordinal": 23 - }, - { - "section_index": 26, - "source_line_no": 11177, - "source_snippet": "subplot(4,2,1:4)", - "event_type": "add_to_current", - "figure_ordinal": 23 - }, - { - "section_index": 26, - "source_line_no": 11177, - "source_snippet": "h3=plot(100*x_uf(1,:)',100*x_uf(2,:)','g')", - "event_type": "add_to_current", - "figure_ordinal": 23 - }, - { - "section_index": 26, - "source_line_no": 11180, - "source_snippet": "h1=plot(100*x0(1),100*x0(2),'bo','MarkerSize',10)", - "event_type": "add_to_current", - "figure_ordinal": 23 - }, - { - "section_index": 26, - "source_line_no": 11181, - "source_snippet": "h2=plot(100*xT(1),100*xT(2),'ro','MarkerSize',10)", - "event_type": "add_to_current", - "figure_ordinal": 23 - }, - { - "section_index": 26, - "source_line_no": 11185, - "source_snippet": "subplot(4,2,5)", - "event_type": "add_to_current", - "figure_ordinal": 23 - }, - { - "section_index": 26, - "source_line_no": 11186, - "source_snippet": "h1=plot(time,100*x(1,:),'k','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 23 - }, - { - "section_index": 26, - "source_line_no": 11187, - "source_snippet": "h2=plot(time,100*x_u(1,:)','b');", - "event_type": "add_to_current", - "figure_ordinal": 23 - }, - { - "section_index": 26, - "source_line_no": 11188, - "source_snippet": "h3=plot(time,100*x_uf(1,:)','g');", - "event_type": "add_to_current", - "figure_ordinal": 23 - }, - { - "section_index": 26, - "source_line_no": 11194, - "source_snippet": "subplot(4,2,6)", - "event_type": "add_to_current", - "figure_ordinal": 23 - }, - { - "section_index": 26, - "source_line_no": 11195, - "source_snippet": "h1=plot(time,100*x(2,:),'k','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 23 - }, - { - "section_index": 26, - "source_line_no": 11196, - "source_snippet": "h2=plot(time,100*x_u(2,:)','b');", - "event_type": "add_to_current", - "figure_ordinal": 23 - }, - { - "section_index": 26, - "source_line_no": 11197, - "source_snippet": "h3=plot(time,100*x_uf(2,:)','g');", - "event_type": "add_to_current", - "figure_ordinal": 23 - }, - { - "section_index": 26, - "source_line_no": 11208, - "source_snippet": "subplot(4,2,7)", - "event_type": "add_to_current", - "figure_ordinal": 23 - }, - { - "section_index": 26, - "source_line_no": 11209, - "source_snippet": "h1=plot(time,100*x(3,:),'k','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 23 - }, - { - "section_index": 26, - "source_line_no": 11210, - "source_snippet": "h2=plot(time,100*x_u(3,:)','b');", - "event_type": "add_to_current", - "figure_ordinal": 23 - }, - { - "section_index": 26, - "source_line_no": 11211, - "source_snippet": "h3=plot(time,100*x_uf(3,:)','g');", - "event_type": "add_to_current", - "figure_ordinal": 23 - }, - { - "section_index": 26, - "source_line_no": 11216, - "source_snippet": "subplot(4,2,8)", - "event_type": "add_to_current", - "figure_ordinal": 23 - }, - { - "section_index": 26, - "source_line_no": 11217, - "source_snippet": "h1=plot(time,100*x(4,:),'k','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 23 - }, - { - "section_index": 26, - "source_line_no": 11218, - "source_snippet": "h2=plot(time,100*x_u(4,:)','b');", - "event_type": "add_to_current", - "figure_ordinal": 23 - }, - { - "section_index": 26, - "source_line_no": 11219, - "source_snippet": "h3=plot(time,100*x_uf(4,:)','g');", - "event_type": "add_to_current", - "figure_ordinal": 23 - }, - { - "section_index": 29, - "source_line_no": 12306, - "source_snippet": "fig1=figure('OuterPosition',[scrsz(3)*.1 scrsz(4)*.1 ...", - "event_type": "new_figure", - "figure_ordinal": 24 - }, - { - "section_index": 29, - "source_line_no": 12308, - "source_snippet": "subplot(4,2,[1 3])", - "event_type": "add_to_current", - "figure_ordinal": 24 - }, - { - "section_index": 29, - "source_line_no": 12309, - "source_snippet": "plot(100*X(1,:),100*X(2,:),'k','Linewidth',2)", - "event_type": "add_to_current", - "figure_ordinal": 24 - }, - { - "section_index": 29, - "source_line_no": 12314, - "source_snippet": "h1=plot(100*X(1,1),100*X(2,1),'bo','MarkerSize',16)", - "event_type": "add_to_current", - "figure_ordinal": 24 - }, - { - "section_index": 29, - "source_line_no": 12315, - "source_snippet": "h2=plot(100*X(1,end),100*X(2,end),'ro','MarkerSize',16)", - "event_type": "add_to_current", - "figure_ordinal": 24 - }, - { - "section_index": 29, - "source_line_no": 12320, - "source_snippet": "subplot(4,2,[6 8])", - "event_type": "add_to_current", - "figure_ordinal": 24 - }, - { - "section_index": 29, - "source_line_no": 12321, - "source_snippet": "plot(time,mstate,'k','Linewidth',2)", - "event_type": "add_to_current", - "figure_ordinal": 24 - }, - { - "section_index": 29, - "source_line_no": 12329, - "source_snippet": "subplot(4,2,5)", - "event_type": "add_to_current", - "figure_ordinal": 24 - }, - { - "section_index": 29, - "source_line_no": 12330, - "source_snippet": "h1=plot(time,100*X(1,1:end),'k','Linewidth',2)", - "event_type": "add_to_current", - "figure_ordinal": 24 - }, - { - "section_index": 29, - "source_line_no": 12331, - "source_snippet": "h2=plot(time,100*X(2,1:end),'k-.','Linewidth',2)", - "event_type": "add_to_current", - "figure_ordinal": 24 - }, - { - "section_index": 29, - "source_line_no": 12340, - "source_snippet": "subplot(4,2,7)", - "event_type": "add_to_current", - "figure_ordinal": 24 - }, - { - "section_index": 29, - "source_line_no": 12341, - "source_snippet": "h1=plot(time,100*X(3,1:end),'k','Linewidth',2)", - "event_type": "add_to_current", - "figure_ordinal": 24 - }, - { - "section_index": 29, - "source_line_no": 12342, - "source_snippet": "h2=plot(time,100*X(4,1:end),'k-.','Linewidth',2)", - "event_type": "add_to_current", - "figure_ordinal": 24 - }, - { - "section_index": 29, - "source_line_no": 12376, - "source_snippet": "subplot(4,2,[2 4])", - "event_type": "add_to_current", - "figure_ordinal": 24 - }, - { - "section_index": 29, - "source_line_no": 12377, - "source_snippet": "spikeColl.plot", - "event_type": "add_to_current", - "figure_ordinal": 24 - }, - { - "section_index": 30, - "source_line_no": 12713, - "source_snippet": "fig1=figure('OuterPosition',[scrsz(3)*.1 scrsz(4)*.1 ...", - "event_type": "new_figure", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "source_line_no": 12786, - "source_snippet": "subplot(4,3,[1 4])", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "source_line_no": 12787, - "source_snippet": "plot(time,mstate,'k','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "source_line_no": 12788, - "source_snippet": "plot(time,S_est,'b-.','Linewidth',.5)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "source_line_no": 12789, - "source_snippet": "plot(time,S_estNT,'g-.','Linewidth',.5)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "source_line_no": 12793, - "source_snippet": "subplot(4,3,[7 10])", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "source_line_no": 12794, - "source_snippet": "plot(time,MU_est(2,:),'b-.','Linewidth',.5)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "source_line_no": 12795, - "source_snippet": "plot(time,MU_estNT(2,:),'g-.','Linewidth',.5)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "source_line_no": 12799, - "source_snippet": "subplot(4,3,[2 3 5 6])", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "source_line_no": 12800, - "source_snippet": "h1=plot(100*X(1,:)',100*X(2,:)','k')", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "source_line_no": 12801, - "source_snippet": "h2=plot(100*X_est(1,:)',100*X_est(2,:)','b-.')", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "source_line_no": 12802, - "source_snippet": "h3=plot(100*X_estNT(1,:)',100*X_estNT(2,:)','g-.')", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "source_line_no": 12805, - "source_snippet": "subplot(4,3,8)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "source_line_no": 12806, - "source_snippet": "h1=plot(time,100*X(1,:),'k','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "source_line_no": 12807, - "source_snippet": "h2=plot(time,100*X_est(1,:)','b-.');", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "source_line_no": 12808, - "source_snippet": "h3=plot(time,100*X_estNT(1,:)','g-.');", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "source_line_no": 12811, - "source_snippet": "subplot(4,3,9)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "source_line_no": 12812, - "source_snippet": "h1=plot(time,100*X(2,:),'k','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "source_line_no": 12813, - "source_snippet": "h2=plot(time,100*X_est(2,:)','b-.');", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "source_line_no": 12814, - "source_snippet": "h3=plot(time,100*X_estNT(2,:)','g-.');", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "source_line_no": 12817, - "source_snippet": "subplot(4,3,11)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "source_line_no": 12818, - "source_snippet": "h1=plot(time,100*X(3,:),'k','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "source_line_no": 12819, - "source_snippet": "h2=plot(time,100*X_est(3,:)','b-.');", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "source_line_no": 12820, - "source_snippet": "h3=plot(time,100*X_estNT(3,:)','g-.');", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "source_line_no": 12822, - "source_snippet": "subplot(4,3,12)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "source_line_no": 12823, - "source_snippet": "h1=plot(time,100*X(4,:),'k','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "source_line_no": 12824, - "source_snippet": "h2=plot(time,100*X_est(4,:)','b-.');", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "source_line_no": 12825, - "source_snippet": "h3=plot(time,100*X_estNT(4,:)','g-.');", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "source_line_no": 12840, - "source_snippet": "subplot(4,3,[1 4])", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "source_line_no": 12842, - "source_snippet": "plot(time,mstate,'k','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "source_line_no": 12843, - "source_snippet": "plot(time,mean(S_estAll),'b','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "source_line_no": 12844, - "source_snippet": "plot(time,mean(S_estNTAll),'g','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "source_line_no": 12856, - "source_snippet": "subplot(4,3,[7 10])", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "source_line_no": 12857, - "source_snippet": "plot(time, mean(squeeze(MU_estAll(2,:,:)),2),'b','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "source_line_no": 12859, - "source_snippet": "plot(time,mean(squeeze(MU_estNTAll(2,:,:)),2),'g','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "source_line_no": 12868, - "source_snippet": "subplot(4,3,[2 3 5 6])", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "source_line_no": 12869, - "source_snippet": "h1=plot(100*X(1,:)',100*X(2,:)','k')", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "source_line_no": 12872, - "source_snippet": "plot(mXestAll(1,:),mXestAll(2,:),'b','Linewidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "source_line_no": 12873, - "source_snippet": "plot(mXestNTAll(1,:),mXestNTAll(2,:),'g','Linewidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "source_line_no": 12877, - "source_snippet": "h1=plot(100*X(1,1),100*X(2,1),'bo','MarkerSize',14)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "source_line_no": 12878, - "source_snippet": "h2=plot(100*X(1,end),100*X(2,end),'ro','MarkerSize',14)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "source_line_no": 12885, - "source_snippet": "subplot(4,3,8)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "source_line_no": 12886, - "source_snippet": "h1=plot(time,100*X(1,:),'k','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "source_line_no": 12887, - "source_snippet": "h2=plot(time,mXestAll(1,:),'b','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "source_line_no": 12888, - "source_snippet": "h3=plot(time,mXestNTAll(1,:),'g','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "source_line_no": 12895, - "source_snippet": "subplot(4,3,9)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "source_line_no": 12896, - "source_snippet": "h1=plot(time,100*X(2,:),'k','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "source_line_no": 12897, - "source_snippet": "h2=plot(time,mXestAll(2,:),'b','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "source_line_no": 12898, - "source_snippet": "h3=plot(time,mXestNTAll(2,:),'g','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "source_line_no": 12910, - "source_snippet": "subplot(4,3,11)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "source_line_no": 12911, - "source_snippet": "h1=plot(time,100*X(3,:),'k','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "source_line_no": 12912, - "source_snippet": "h2=plot(time,mXestAll(3,:),'b','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "source_line_no": 12913, - "source_snippet": "h3=plot(time,mXestNTAll(3,:),'g','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "source_line_no": 12919, - "source_snippet": "subplot(4,3,12)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "source_line_no": 12920, - "source_snippet": "h1=plot(time,100*X(4,:),'k','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "source_line_no": 12921, - "source_snippet": "h2=plot(time,mXestAll(4,:),'b','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 25 - }, - { - "section_index": 30, - "source_line_no": 12922, - "source_snippet": "h3=plot(time,mXestNTAll(4,:),'g','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 25 - } - ] - }, - { - "topic": "nSpikeTrainExamples", - "total_figures_expected": 4, - "total_figures_detected": 4, - "no_figure_utility": false, - "events": [ - { - "section_index": 1, - "source_line_no": 403, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "source_line_no": 403, - "source_snippet": "nst.plot", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "source_line_no": 800, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 2 - }, - { - "section_index": 1, - "source_line_no": 801, - "source_snippet": "nst.getSigRep.plot", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 1, - "source_line_no": 1100, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 3 - }, - { - "section_index": 1, - "source_line_no": 1101, - "source_snippet": "nst.getSigRep.plot", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 1, - "source_line_no": 1400, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 4 - }, - { - "section_index": 1, - "source_line_no": 1401, - "source_snippet": "nst.getSigRep.plot", - "event_type": "add_to_current", - "figure_ordinal": 4 - } - ] - }, - { - "topic": "nstCollExamples", - "total_figures_expected": 3, - "total_figures_detected": 3, - "no_figure_utility": false, - "events": [ - { - "section_index": 1, - "source_line_no": 600, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "source_line_no": 600, - "source_snippet": "spikeColl.plot", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 1, - "source_line_no": 901, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 2 - }, - { - "section_index": 1, - "source_line_no": 901, - "source_snippet": "spikeColl.plot", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 1, - "source_line_no": 1200, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 3 - }, - { - "section_index": 1, - "source_line_no": 1202, - "source_snippet": "subplot(3,1,1)", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 1, - "source_line_no": 1202, - "source_snippet": "n1.plot", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 1, - "source_line_no": 1203, - "source_snippet": "subplot(3,1,2)", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 1, - "source_line_no": 1203, - "source_snippet": "n1.getSigRep.plot", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 1, - "source_line_no": 1207, - "source_snippet": "subplot(3,1,3)", - "event_type": "add_to_current", - "figure_ordinal": 3 - }, - { - "section_index": 1, - "source_line_no": 1207, - "source_snippet": "s1.plot", - "event_type": "add_to_current", - "figure_ordinal": 3 - } - ] - }, - { - "topic": "AnalysisExamples2", - "total_figures_expected": 5, - "total_figures_detected": 2, - "no_figure_utility": false, - "events": [ - { - "section_index": 0, - "source_line_no": 1200, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 1 - }, - { - "section_index": 0, - "source_line_no": 1201, - "source_snippet": "plot(position.getSubSignal('x').dataToMatrix,position.getSubSignal('y').dataToMatrix,...", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 0, - "source_line_no": 1508, - "source_snippet": "tc{3}.setName('Quadratic+Hist')", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 0, - "source_line_no": 1802, - "source_snippet": "fitResults.plotResults", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 0, - "source_line_no": 2100, - "source_snippet": "figure", - "event_type": "new_figure", - "figure_ordinal": 2 - }, - { - "section_index": 0, - "source_line_no": 2123, - "source_snippet": "plot(position.getSubSignal('x').dataToMatrix,position.getSubSignal('y').dataToMatrix,...", - "event_type": "add_to_current", - "figure_ordinal": 2 - } - ] - }, - { - "topic": "DocumentationSetup2025b", - "total_figures_expected": 0, - "total_figures_detected": 0, - "no_figure_utility": false, - "events": [] - }, - { - "topic": "FitResultReference", - "total_figures_expected": 0, - "total_figures_detected": 0, - "no_figure_utility": false, - "events": [] - }, - { - "topic": "HybridFilterExample", - "total_figures_expected": 2, - "total_figures_detected": 2, - "no_figure_utility": false, - "events": [ - { - "section_index": 2, - "source_line_no": 1106, - "source_snippet": "fig1=figure('OuterPosition',[scrsz(3)*.1 scrsz(4)*.1 ...", - "event_type": "new_figure", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "source_line_no": 1108, - "source_snippet": "subplot(4,2,[1 3])", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "source_line_no": 1109, - "source_snippet": "plot(100*X(1,:),100*X(2,:),'k','Linewidth',2)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "source_line_no": 1114, - "source_snippet": "h1=plot(100*X(1,1),100*X(2,1),'bo','MarkerSize',16)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "source_line_no": 1115, - "source_snippet": "h2=plot(100*X(1,end),100*X(2,end),'ro','MarkerSize',16)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "source_line_no": 1120, - "source_snippet": "subplot(4,2,[6 8])", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "source_line_no": 1121, - "source_snippet": "plot(time,mstate,'k','Linewidth',2)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "source_line_no": 1129, - "source_snippet": "subplot(4,2,5)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "source_line_no": 1130, - "source_snippet": "h1=plot(time,100*X(1,1:end),'k','Linewidth',2)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "source_line_no": 1131, - "source_snippet": "h2=plot(time,100*X(2,1:end),'k-.','Linewidth',2)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "source_line_no": 1140, - "source_snippet": "subplot(4,2,7)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "source_line_no": 1141, - "source_snippet": "h1=plot(time,100*X(3,1:end),'k','Linewidth',2)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "source_line_no": 1142, - "source_snippet": "h2=plot(time,100*X(4,1:end),'k-.','Linewidth',2)", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "source_line_no": 1176, - "source_snippet": "subplot(4,2,[2 4])", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 2, - "source_line_no": 1177, - "source_snippet": "spikeColl.plot", - "event_type": "add_to_current", - "figure_ordinal": 1 - }, - { - "section_index": 3, - "source_line_no": 1513, - "source_snippet": "fig1=figure('OuterPosition',[scrsz(3)*.1 scrsz(4)*.1 ...", - "event_type": "new_figure", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "source_line_no": 1586, - "source_snippet": "subplot(4,3,[1 4])", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "source_line_no": 1587, - "source_snippet": "plot(time,mstate,'k','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "source_line_no": 1588, - "source_snippet": "plot(time,S_est,'b-.','Linewidth',.5)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "source_line_no": 1589, - "source_snippet": "plot(time,S_estNT,'g-.','Linewidth',.5)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "source_line_no": 1593, - "source_snippet": "subplot(4,3,[7 10])", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "source_line_no": 1594, - "source_snippet": "plot(time,MU_est(2,:),'b-.','Linewidth',.5)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "source_line_no": 1595, - "source_snippet": "plot(time,MU_estNT(2,:),'g-.','Linewidth',.5)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "source_line_no": 1599, - "source_snippet": "subplot(4,3,[2 3 5 6])", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "source_line_no": 1600, - "source_snippet": "h1=plot(100*X(1,:)',100*X(2,:)','k')", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "source_line_no": 1601, - "source_snippet": "h2=plot(100*X_est(1,:)',100*X_est(2,:)','b-.')", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "source_line_no": 1602, - "source_snippet": "h3=plot(100*X_estNT(1,:)',100*X_estNT(2,:)','g-.')", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "source_line_no": 1605, - "source_snippet": "subplot(4,3,8)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "source_line_no": 1606, - "source_snippet": "h1=plot(time,100*X(1,:),'k','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "source_line_no": 1607, - "source_snippet": "h2=plot(time,100*X_est(1,:)','b-.');", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "source_line_no": 1608, - "source_snippet": "h3=plot(time,100*X_estNT(1,:)','g-.');", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "source_line_no": 1611, - "source_snippet": "subplot(4,3,9)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "source_line_no": 1612, - "source_snippet": "h1=plot(time,100*X(2,:),'k','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "source_line_no": 1613, - "source_snippet": "h2=plot(time,100*X_est(2,:)','b-.');", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "source_line_no": 1614, - "source_snippet": "h3=plot(time,100*X_estNT(2,:)','g-.');", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "source_line_no": 1617, - "source_snippet": "subplot(4,3,11)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "source_line_no": 1618, - "source_snippet": "h1=plot(time,100*X(3,:),'k','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "source_line_no": 1619, - "source_snippet": "h2=plot(time,100*X_est(3,:)','b-.');", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "source_line_no": 1620, - "source_snippet": "h3=plot(time,100*X_estNT(3,:)','g-.');", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "source_line_no": 1622, - "source_snippet": "subplot(4,3,12)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "source_line_no": 1623, - "source_snippet": "h1=plot(time,100*X(4,:),'k','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "source_line_no": 1624, - "source_snippet": "h2=plot(time,100*X_est(4,:)','b-.');", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "source_line_no": 1625, - "source_snippet": "h3=plot(time,100*X_estNT(4,:)','g-.');", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "source_line_no": 1640, - "source_snippet": "subplot(4,3,[1 4])", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "source_line_no": 1642, - "source_snippet": "plot(time,mstate,'k','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "source_line_no": 1643, - "source_snippet": "plot(time,mean(S_estAll),'b','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "source_line_no": 1644, - "source_snippet": "plot(time,mean(S_estNTAll),'g','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "source_line_no": 1656, - "source_snippet": "subplot(4,3,[7 10])", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "source_line_no": 1657, - "source_snippet": "plot(time, mean(squeeze(MU_estAll(2,:,:)),2),'b','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "source_line_no": 1659, - "source_snippet": "plot(time,mean(squeeze(MU_estNTAll(2,:,:)),2),'g','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "source_line_no": 1668, - "source_snippet": "subplot(4,3,[2 3 5 6])", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "source_line_no": 1669, - "source_snippet": "h1=plot(100*X(1,:)',100*X(2,:)','k')", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "source_line_no": 1672, - "source_snippet": "plot(mXestAll(1,:),mXestAll(2,:),'b','Linewidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "source_line_no": 1673, - "source_snippet": "plot(mXestNTAll(1,:),mXestNTAll(2,:),'g','Linewidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "source_line_no": 1677, - "source_snippet": "h1=plot(100*X(1,1),100*X(2,1),'bo','MarkerSize',14)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "source_line_no": 1678, - "source_snippet": "h2=plot(100*X(1,end),100*X(2,end),'ro','MarkerSize',14)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "source_line_no": 1685, - "source_snippet": "subplot(4,3,8)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "source_line_no": 1686, - "source_snippet": "h1=plot(time,100*X(1,:),'k','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "source_line_no": 1687, - "source_snippet": "h2=plot(time,mXestAll(1,:),'b','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "source_line_no": 1688, - "source_snippet": "h3=plot(time,mXestNTAll(1,:),'g','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "source_line_no": 1695, - "source_snippet": "subplot(4,3,9)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "source_line_no": 1696, - "source_snippet": "h1=plot(time,100*X(2,:),'k','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "source_line_no": 1697, - "source_snippet": "h2=plot(time,mXestAll(2,:),'b','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "source_line_no": 1698, - "source_snippet": "h3=plot(time,mXestNTAll(2,:),'g','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "source_line_no": 1710, - "source_snippet": "subplot(4,3,11)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "source_line_no": 1711, - "source_snippet": "h1=plot(time,100*X(3,:),'k','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "source_line_no": 1712, - "source_snippet": "h2=plot(time,mXestAll(3,:),'b','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "source_line_no": 1713, - "source_snippet": "h3=plot(time,mXestNTAll(3,:),'g','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "source_line_no": 1719, - "source_snippet": "subplot(4,3,12)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "source_line_no": 1720, - "source_snippet": "h1=plot(time,100*X(4,:),'k','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "source_line_no": 1721, - "source_snippet": "h2=plot(time,mXestAll(4,:),'b','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 2 - }, - { - "section_index": 3, - "source_line_no": 1722, - "source_snippet": "h3=plot(time,mXestNTAll(4,:),'g','LineWidth',3)", - "event_type": "add_to_current", - "figure_ordinal": 2 - } - ] - }, - { - "topic": "publish_all_helpfiles", - "total_figures_expected": 0, - "total_figures_detected": 0, - "no_figure_utility": true, - "events": [] - } - ] -} \ No newline at end of file diff --git a/parity/matlab_delta_report.json b/parity/matlab_delta_report.json deleted file mode 100644 index a92afec7..00000000 --- a/parity/matlab_delta_report.json +++ /dev/null @@ -1,340 +0,0 @@ -{ - "matlab_repo": "/private/tmp/upstream-nstat-matlab", - "previous_ref": "470fde8f9f6b60fe8f9ec51155e34478b6d541f6", - "current_ref": "13aa488a371b26ed7f7ccc06d5534c7e671bbbad", - "changed_files": [ - { - "status": "M", - "matlab_relpath": "FitResSummary.m", - "mapping": { - "matlab_relpath": "FitResSummary.m", - "entity_name": "FitResSummary", - "entity_type": "class", - "python_path": "nstat/FitResSummary.py", - "status": "mapped", - "notes": "MATLAB compatibility adapter backed by nstat/fit.py." - }, - "requires_notebook_regeneration": false, - "requires_fixture_update": true - }, - { - "status": "M", - "matlab_relpath": "FitResult.m", - "mapping": { - "matlab_relpath": "FitResult.m", - "entity_name": "FitResult", - "entity_type": "class", - "python_path": "nstat/FitResult.py", - "status": "mapped", - "notes": "MATLAB compatibility adapter backed by nstat/fit.py." - }, - "requires_notebook_regeneration": false, - "requires_fixture_update": true - }, - { - "status": "M", - "matlab_relpath": "SignalObj.m", - "mapping": { - "matlab_relpath": "SignalObj.m", - "entity_name": "SignalObj", - "entity_type": "class", - "python_path": "nstat/SignalObj.py", - "status": "mapped", - "notes": "MATLAB compatibility adapter backed by nstat/core.py and nstat/signal.py." - }, - "requires_notebook_regeneration": false, - "requires_fixture_update": true - }, - { - "status": "D", - "matlab_relpath": "data/Explicit Stimulus/GenCovMat.m", - "mapping": null, - "requires_notebook_regeneration": false, - "requires_fixture_update": true - }, - { - "status": "A", - "matlab_relpath": "examples/paper/example01_mepsc_poisson.m", - "mapping": { - "matlab_relpath": "examples/paper/example01_mepsc_poisson.m", - "entity_name": "example01_mepsc_poisson", - "entity_type": "example", - "python_path": "nstat/paper_examples_full.py", - "status": "mapped", - "notes": "Paper example 1 is implemented in run_experiment1." - }, - "requires_notebook_regeneration": false, - "requires_fixture_update": true - }, - { - "status": "A", - "matlab_relpath": "examples/paper/example02_whisker_stimulus_thalamus.m", - "mapping": { - "matlab_relpath": "examples/paper/example02_whisker_stimulus_thalamus.m", - "entity_name": "example02_whisker_stimulus_thalamus", - "entity_type": "example", - "python_path": "nstat/paper_examples.py", - "status": "mapped", - "notes": "Paper example 2 is implemented in run_experiment2." - }, - "requires_notebook_regeneration": false, - "requires_fixture_update": true - }, - { - "status": "A", - "matlab_relpath": "examples/paper/example03_psth_and_ssglm.m", - "mapping": { - "matlab_relpath": "examples/paper/example03_psth_and_ssglm.m", - "entity_name": "example03_psth_and_ssglm", - "entity_type": "example", - "python_path": "nstat/paper_examples_full.py", - "status": "mapped", - "notes": "Paper example 3 is implemented in run_experiment3 and run_experiment3b." - }, - "requires_notebook_regeneration": false, - "requires_fixture_update": true - }, - { - "status": "A", - "matlab_relpath": "examples/paper/example04_place_cells_continuous_stimulus.m", - "mapping": { - "matlab_relpath": "examples/paper/example04_place_cells_continuous_stimulus.m", - "entity_name": "example04_place_cells_continuous_stimulus", - "entity_type": "example", - "python_path": "nstat/paper_examples.py", - "status": "mapped", - "notes": "Paper example 4 is implemented in run_experiment4." - }, - "requires_notebook_regeneration": false, - "requires_fixture_update": true - }, - { - "status": "A", - "matlab_relpath": "examples/paper/example05_decoding_ppaf_pphf.m", - "mapping": { - "matlab_relpath": "examples/paper/example05_decoding_ppaf_pphf.m", - "entity_name": "example05_decoding_ppaf_pphf", - "entity_type": "example", - "python_path": "nstat/paper_examples.py", - "status": "mapped", - "notes": "Paper example 5 is implemented in run_experiment5." - }, - "requires_notebook_regeneration": false, - "requires_fixture_update": true - }, - { - "status": "M", - "matlab_relpath": "getPaperDataDirs.m", - "mapping": { - "matlab_relpath": "getPaperDataDirs.m", - "entity_name": "getPaperDataDirs", - "entity_type": "function", - "python_path": "nstat/paper_examples.py", - "status": "mapped", - "notes": "Python paper-example runner now resolves data through nstat.data_manager." - }, - "requires_notebook_regeneration": false, - "requires_fixture_update": true - }, - { - "status": "A", - "matlab_relpath": "nSTAT_ExampleDataInfo.m", - "mapping": { - "matlab_relpath": "nSTAT_ExampleDataInfo.m", - "entity_name": "nSTAT_ExampleDataInfo", - "entity_type": "function", - "python_path": "nstat/data_manager.py", - "status": "mapped", - "notes": "Python data manager exposes the figshare DOI, required files, and installation status." - }, - "requires_notebook_regeneration": false, - "requires_fixture_update": true - }, - { - "status": "M", - "matlab_relpath": "nSTAT_Install.m", - "mapping": { - "matlab_relpath": "nSTAT_Install.m", - "entity_name": "nSTAT_Install", - "entity_type": "function", - "python_path": "nstat/install.py", - "status": "mapped", - "notes": "Python install helper mirrors MATLAB download/prompt policy for external example data." - }, - "requires_notebook_regeneration": false, - "requires_fixture_update": true - }, - { - "status": "A", - "matlab_relpath": "run_tests.m", - "mapping": null, - "requires_notebook_regeneration": false, - "requires_fixture_update": true - }, - { - "status": "A", - "matlab_relpath": "tests/TestFixtures.m", - "mapping": null, - "requires_notebook_regeneration": false, - "requires_fixture_update": true - }, - { - "status": "A", - "matlab_relpath": "tests/TestParityAgainstBaseline.m", - "mapping": null, - "requires_notebook_regeneration": false, - "requires_fixture_update": true - }, - { - "status": "A", - "matlab_relpath": "tests/TestPlotStyleApi.m", - "mapping": null, - "requires_notebook_regeneration": false, - "requires_fixture_update": true - }, - { - "status": "A", - "matlab_relpath": "tools/+nstat/+baseline/capture_nSTATPaperExamples.m", - "mapping": null, - "requires_notebook_regeneration": false, - "requires_fixture_update": true - }, - { - "status": "A", - "matlab_relpath": "tools/+nstat/+docs/exportFigure.m", - "mapping": null, - "requires_notebook_regeneration": false, - "requires_fixture_update": true - }, - { - "status": "A", - "matlab_relpath": "tools/+nstat/+docs/getRepoRoot.m", - "mapping": null, - "requires_notebook_regeneration": false, - "requires_fixture_update": true - }, - { - "status": "A", - "matlab_relpath": "tools/+nstat/+docs/writeJson.m", - "mapping": null, - "requires_notebook_regeneration": false, - "requires_fixture_update": true - }, - { - "status": "A", - "matlab_relpath": "tools/+nstat/applyPlotStyle.m", - "mapping": { - "matlab_relpath": "tools/+nstat/applyPlotStyle.m", - "entity_name": "nstat.applyPlotStyle", - "entity_type": "function", - "python_path": "nstat/plot_style.py", - "status": "mapped", - "notes": "Python plot-style helper tracks the new upstream modern-vs-legacy style preference." - }, - "requires_notebook_regeneration": false, - "requires_fixture_update": true - }, - { - "status": "A", - "matlab_relpath": "tools/+nstat/getPlotStyle.m", - "mapping": { - "matlab_relpath": "tools/+nstat/getPlotStyle.m", - "entity_name": "nstat.getPlotStyle", - "entity_type": "function", - "python_path": "nstat/plot_style.py", - "status": "mapped", - "notes": "Python plot-style helper tracks the new upstream modern-vs-legacy style preference." - }, - "requires_notebook_regeneration": false, - "requires_fixture_update": true - }, - { - "status": "A", - "matlab_relpath": "tools/+nstat/setPlotStyle.m", - "mapping": { - "matlab_relpath": "tools/+nstat/setPlotStyle.m", - "entity_name": "nstat.setPlotStyle", - "entity_type": "function", - "python_path": "nstat/plot_style.py", - "status": "mapped", - "notes": "Python plot-style helper tracks the new upstream modern-vs-legacy style preference." - }, - "requires_notebook_regeneration": false, - "requires_fixture_update": true - }, - { - "status": "A", - "matlab_relpath": "tools/build_paper_examples.m", - "mapping": null, - "requires_notebook_regeneration": false, - "requires_fixture_update": true - }, - { - "status": "A", - "matlab_relpath": "tools/check_parity_against_baseline.m", - "mapping": null, - "requires_notebook_regeneration": false, - "requires_fixture_update": true - }, - { - "status": "A", - "matlab_relpath": "tools/generate_baseline_fixtures.m", - "mapping": null, - "requires_notebook_regeneration": false, - "requires_fixture_update": true - }, - { - "status": "M", - "matlab_relpath": "tools/matlab/cleanup_user_path_prefs.m", - "mapping": null, - "requires_notebook_regeneration": false, - "requires_fixture_update": true - }, - { - "status": "A", - "matlab_relpath": "tools/publish_examples.m", - "mapping": null, - "requires_notebook_regeneration": false, - "requires_fixture_update": true - }, - { - "status": "A", - "matlab_relpath": "tools/run_all_checks.m", - "mapping": null, - "requires_notebook_regeneration": false, - "requires_fixture_update": true - } - ], - "requires_notebook_regeneration": [], - "requires_fixture_update": [ - "FitResSummary.m", - "FitResult.m", - "SignalObj.m", - "data/Explicit Stimulus/GenCovMat.m", - "examples/paper/example01_mepsc_poisson.m", - "examples/paper/example02_whisker_stimulus_thalamus.m", - "examples/paper/example03_psth_and_ssglm.m", - "examples/paper/example04_place_cells_continuous_stimulus.m", - "examples/paper/example05_decoding_ppaf_pphf.m", - "getPaperDataDirs.m", - "nSTAT_ExampleDataInfo.m", - "nSTAT_Install.m", - "run_tests.m", - "tests/TestFixtures.m", - "tests/TestParityAgainstBaseline.m", - "tests/TestPlotStyleApi.m", - "tools/+nstat/+baseline/capture_nSTATPaperExamples.m", - "tools/+nstat/+docs/exportFigure.m", - "tools/+nstat/+docs/getRepoRoot.m", - "tools/+nstat/+docs/writeJson.m", - "tools/+nstat/applyPlotStyle.m", - "tools/+nstat/getPlotStyle.m", - "tools/+nstat/setPlotStyle.m", - "tools/build_paper_examples.m", - "tools/check_parity_against_baseline.m", - "tools/generate_baseline_fixtures.m", - "tools/matlab/cleanup_user_path_prefs.m", - "tools/publish_examples.m", - "tools/run_all_checks.m" - ] -} \ No newline at end of file diff --git a/parity/matlab_reference.yml b/parity/matlab_reference.yml deleted file mode 100644 index 6d8f138b..00000000 --- a/parity/matlab_reference.yml +++ /dev/null @@ -1,10 +0,0 @@ -reference: - repo_url: https://github.com/iahncajigas/nSTAT.git - branch_hint: master - ref: 13aa488a371b26ed7f7ccc06d5534c7e671bbbad - previous_ref: 470fde8f9f6b60fe8f9ec51155e34478b6d541f6 - previous_ref_source: historical parity pin from nSTAT-python commit ce3e19d - local_path: /tmp/upstream-nstat-matlab - env_repo_var: NSTAT_MATLAB_REPO - helpfiles_subdir: helpfiles - data_subdir: data diff --git a/parity/matlab_source_sha.txt b/parity/matlab_source_sha.txt deleted file mode 100644 index c6dd3d8d..00000000 --- a/parity/matlab_source_sha.txt +++ /dev/null @@ -1 +0,0 @@ -13aa488a371b26ed7f7ccc06d5534c7e671bbbad diff --git a/parity/notebook_source_hashes.json b/parity/notebook_source_hashes.json deleted file mode 100644 index 52e8fca1..00000000 --- a/parity/notebook_source_hashes.json +++ /dev/null @@ -1,276 +0,0 @@ -{ - "topics": [ - { - "topic": "AnalysisExamples", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/AnalysisExamples.mlx", - "notebook_path": "/private/tmp/nstat-python-sync-20260305/notebooks/AnalysisExamples.ipynb", - "source_sha256": "5f2411e32545cbcc8c439400341c880a28658dfae312d5f96c07b7786cf51e15", - "notebook_sha256": "bd77666bbc90d256c8c6615ca09a14fc2e4d74f837f8121ce43cba5e01e71261", - "expected_sections": 2, - "status": "ok" - }, - { - "topic": "ConfigCollExamples", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/ConfigCollExamples.mlx", - "notebook_path": "/private/tmp/nstat-python-sync-20260305/notebooks/ConfigCollExamples.ipynb", - "source_sha256": "78eba18d489e38c821571e0696b683e8e40873e1865ce11544140587a8842645", - "notebook_sha256": "9379f1f1e601a1e486148975b74f781e0e2c820942fca609c6812893a33e4b0e", - "expected_sections": 1, - "status": "ok" - }, - { - "topic": "CovCollExamples", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/CovCollExamples.mlx", - "notebook_path": "/private/tmp/nstat-python-sync-20260305/notebooks/CovCollExamples.ipynb", - "source_sha256": "e40b7a1f347b67a10572f1a518d5e40cb70036df5005ee5c7c82c19abbccb215", - "notebook_sha256": "119e1d56b300ab1c1b5552209f2c2ca86386be208394db071d720b59aec5b968", - "expected_sections": 1, - "status": "ok" - }, - { - "topic": "CovariateExamples", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/CovariateExamples.mlx", - "notebook_path": "/private/tmp/nstat-python-sync-20260305/notebooks/CovariateExamples.ipynb", - "source_sha256": "d9112a468b6bc0d909098327e95b7ad31831c64165519b4f090a7941308d6105", - "notebook_sha256": "c4182407276173e4973d911b0cd7f2e54d8d4ad933f168a6f67748123c88e915", - "expected_sections": 2, - "status": "ok" - }, - { - "topic": "DecodingExample", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/DecodingExample.mlx", - "notebook_path": "/private/tmp/nstat-python-sync-20260305/notebooks/DecodingExample.ipynb", - "source_sha256": "951833445cd7116149d4024b7ae8ee413799495e8fdf5ca92341a1577cdf5d01", - "notebook_sha256": "cafb857eea587bea732bf0fe3bc0ee833ea641937278c9bb17e6cd2d587b3c40", - "expected_sections": 3, - "status": "ok" - }, - { - "topic": "DecodingExampleWithHist", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/DecodingExampleWithHist.mlx", - "notebook_path": "/private/tmp/nstat-python-sync-20260305/notebooks/DecodingExampleWithHist.ipynb", - "source_sha256": "b742eb38ef86a6f1df0c234b02c1a9fcaa1a013e578d2966303064688fa0df59", - "notebook_sha256": "471eb32e01453066a124e5bf4edc979d81a14f4207eecede333aec17031bc0ff", - "expected_sections": 1, - "status": "ok" - }, - { - "topic": "EventsExamples", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/EventsExamples.mlx", - "notebook_path": "/private/tmp/nstat-python-sync-20260305/notebooks/EventsExamples.ipynb", - "source_sha256": "77295b58c610ec3275b56a50ffc376daaec5eba3fb765a7d712ea86a066d267c", - "notebook_sha256": "cc766b9fcaf41ce1e8a19ae3aa98b4296ecdd88fa23b34ae9dbd7de4874dd8c1", - "expected_sections": 1, - "status": "ok" - }, - { - "topic": "ExplicitStimulusWhiskerData", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/ExplicitStimulusWhiskerData.mlx", - "notebook_path": "/private/tmp/nstat-python-sync-20260305/notebooks/ExplicitStimulusWhiskerData.ipynb", - "source_sha256": "c4a1e5597835ab6cce5de09ab8e7c7b9791335223c8e30027421d1c13e9d6ba6", - "notebook_sha256": "3680a2a03e137ab336cb8c76998702600f137a3ae4adf844df0a946f39a4c726", - "expected_sections": 6, - "status": "ok" - }, - { - "topic": "FitResSummaryExamples", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/FitResSummaryExamples.mlx", - "notebook_path": "/private/tmp/nstat-python-sync-20260305/notebooks/FitResSummaryExamples.ipynb", - "source_sha256": "0a3dd275c32c4fc69dbb7ef8a00979e1a80b53077aa6c6c53b2360e067bfbb34", - "notebook_sha256": "2a7831ea69e1ba61a70c0e2ae8412442fe553b70a0353f09b2e75d486963f175", - "expected_sections": 1, - "status": "ok" - }, - { - "topic": "FitResultExamples", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/FitResultExamples.mlx", - "notebook_path": "/private/tmp/nstat-python-sync-20260305/notebooks/FitResultExamples.ipynb", - "source_sha256": "6e1ff30b274a4233153e344be0363ac89eb03e1da8ad2183185f9582c7843710", - "notebook_sha256": "ece6085d5a554a4b48e2a35410f2eb9ddd248127a2eb6e54a7ef9608f96b5e0c", - "expected_sections": 1, - "status": "ok" - }, - { - "topic": "HippocampalPlaceCellExample", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/HippocampalPlaceCellExample.mlx", - "notebook_path": "/private/tmp/nstat-python-sync-20260305/notebooks/HippocampalPlaceCellExample.ipynb", - "source_sha256": "aec6b769443d61b950ba19d1fa4b9df2b5caf1518ed5127e5cfd195920ab0a46", - "notebook_sha256": "53c9e68f213efd16de0383e39e1fd94534211d72b0c739b3e551d1488a5d5a64", - "expected_sections": 5, - "status": "ok" - }, - { - "topic": "HistoryExamples", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/HistoryExamples.mlx", - "notebook_path": "/private/tmp/nstat-python-sync-20260305/notebooks/HistoryExamples.ipynb", - "source_sha256": "a2622507c6b60178fc4e1ac283982539b85af9843c3a6ab915169fe6d281b9fa", - "notebook_sha256": "974e8fb5d3b1e0bae04159daae3b4bb8e510a52ac046b4fdaa898a3b4f0667df", - "expected_sections": 3, - "status": "ok" - }, - { - "topic": "NetworkTutorial", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/NetworkTutorial.mlx", - "notebook_path": "/private/tmp/nstat-python-sync-20260305/notebooks/NetworkTutorial.ipynb", - "source_sha256": "e43e41568c793e4aaa4f5539d4ffc78d993b477f2362d254a299ddc0096296ad", - "notebook_sha256": "27a7f587b7a45b4bfadf2c968371b3ccea4a77e45169107e750017f8c9d448f1", - "expected_sections": 11, - "status": "ok" - }, - { - "topic": "PPSimExample", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/PPSimExample.mlx", - "notebook_path": "/private/tmp/nstat-python-sync-20260305/notebooks/PPSimExample.ipynb", - "source_sha256": "bbe0364031cc290bba3e626df725e7240bd84c37e61a69f49d939d364a7772e6", - "notebook_sha256": "b53bdd0d7ac63295e3362b898a7c955ec973fa630aee88adfd40aa3161fd4651", - "expected_sections": 9, - "status": "ok" - }, - { - "topic": "PPThinning", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/PPThinning.mlx", - "notebook_path": "/private/tmp/nstat-python-sync-20260305/notebooks/PPThinning.ipynb", - "source_sha256": "a7b991c84fd4d473c4a8ced18bd70813c095d2f3e72f715869673fc701805231", - "notebook_sha256": "5d9c4c138846532f55a3b1c86f4a21da677479ea178f488230e86ea4aaaad009", - "expected_sections": 4, - "status": "ok" - }, - { - "topic": "PSTHEstimation", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/PSTHEstimation.mlx", - "notebook_path": "/private/tmp/nstat-python-sync-20260305/notebooks/PSTHEstimation.ipynb", - "source_sha256": "75e981c930b729fdbf4dbdaafb58c40e68f83824974372883bce065833780cf3", - "notebook_sha256": "e0dd8aa0993cee2c7c3ad84edb0ba9c2cf8fe498843a1e5426c51f432071abe3", - "expected_sections": 3, - "status": "ok" - }, - { - "topic": "SignalObjExamples", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/SignalObjExamples.mlx", - "notebook_path": "/private/tmp/nstat-python-sync-20260305/notebooks/SignalObjExamples.ipynb", - "source_sha256": "a30ee35c92a00f25129d9b730c78ede879de4b1d435069007766e24c28af7f2d", - "notebook_sha256": "e545f78a726498140701746b80bc00d99c6119712d0e57a716e2987aebd29eaa", - "expected_sections": 7, - "status": "ok" - }, - { - "topic": "StimulusDecode2D", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/StimulusDecode2D.mlx", - "notebook_path": "/private/tmp/nstat-python-sync-20260305/notebooks/StimulusDecode2D.ipynb", - "source_sha256": "5f33cc622a3d86bd5c6d6967f215b62a81229afd4d111eb46b3249f3a88ab232", - "notebook_sha256": "88081b70616a51f83fa462fa2ca7dd076100ad03487d3931a6b61d6aa76b6e42", - "expected_sections": 3, - "status": "ok" - }, - { - "topic": "TrialConfigExamples", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/TrialConfigExamples.mlx", - "notebook_path": "/private/tmp/nstat-python-sync-20260305/notebooks/TrialConfigExamples.ipynb", - "source_sha256": "9d07d123d791fa7a492a3f166567af6e85ad45dcd45c2ca4aa1eba041a9b8c6a", - "notebook_sha256": "478bda95eea62f79d1e48f686cdf762d2ef287d9e99f097377c74427e55597f2", - "expected_sections": 1, - "status": "ok" - }, - { - "topic": "TrialExamples", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/TrialExamples.mlx", - "notebook_path": "/private/tmp/nstat-python-sync-20260305/notebooks/TrialExamples.ipynb", - "source_sha256": "73f2227062299af029c538b9b8aea97b501586d7c3a6775a4b0abba6e6f88639", - "notebook_sha256": "4088c6a628fa1a03cbdb1f348e13d36828cbd1aa26f3c5c97991b6620de48752", - "expected_sections": 3, - "status": "ok" - }, - { - "topic": "ValidationDataSet", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/ValidationDataSet.mlx", - "notebook_path": "/private/tmp/nstat-python-sync-20260305/notebooks/ValidationDataSet.ipynb", - "source_sha256": "593eed6a91c1a6ce1f26640ec0f820e0bdcbd58a70890e17906a96ae71c83975", - "notebook_sha256": "34b49f35306e1e0c64868df2d96dd11a11b1721f08fb067e5810b2e13c2fd9a1", - "expected_sections": 3, - "status": "ok" - }, - { - "topic": "mEPSCAnalysis", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/mEPSCAnalysis.mlx", - "notebook_path": "/private/tmp/nstat-python-sync-20260305/notebooks/mEPSCAnalysis.ipynb", - "source_sha256": "21c53d9fd4f8044a1ffb41c99aae3d0a5b20e10321789fead0125de53180de39", - "notebook_sha256": "5058e942d612046446efdac9220bf5fd7def8956860a926394a0305ec7f77e31", - "expected_sections": 9, - "status": "ok" - }, - { - "topic": "nSTATPaperExamples", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/nSTATPaperExamples.mlx", - "notebook_path": "/private/tmp/nstat-python-sync-20260305/notebooks/nSTATPaperExamples.ipynb", - "source_sha256": "88d7f4c4d5ffb97b3915b652edce7f6a295cb9a9e02cfa6f1128f70b7fd4ef4e", - "notebook_sha256": "cbe8c615d0f5de73272ca302e2908c77b491a2819474feb3cee6c059b1d66b51", - "expected_sections": 31, - "status": "ok" - }, - { - "topic": "nSpikeTrainExamples", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/nSpikeTrainExamples.mlx", - "notebook_path": "/private/tmp/nstat-python-sync-20260305/notebooks/nSpikeTrainExamples.ipynb", - "source_sha256": "4328884d7934a88d2f4f57b6c2224879b2dba809c7633d243a1ba885d766ab73", - "notebook_sha256": "f972eced5d710b8c82498f20ecc6e540c4b0bb2d6bd2227d1df33b7484da5ed5", - "expected_sections": 2, - "status": "ok" - }, - { - "topic": "nstCollExamples", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/nstCollExamples.mlx", - "notebook_path": "/private/tmp/nstat-python-sync-20260305/notebooks/nstCollExamples.ipynb", - "source_sha256": "24df39b05fef1fa52503f66490d2ca258bfdb288d83be148cdeb8a0d6f708d45", - "notebook_sha256": "afebe76d719e621ca33b1e53e68a68818a8e4d43a3133fee24ce1ad8e708f605", - "expected_sections": 2, - "status": "ok" - }, - { - "topic": "AnalysisExamples2", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/AnalysisExamples2.mlx", - "notebook_path": "/private/tmp/nstat-python-sync-20260305/notebooks/AnalysisExamples2.ipynb", - "source_sha256": "dbb89d4dea80f717d86a1baeb30c29fabc1fa58f3cf176897c01439c8ed2ac9a", - "notebook_sha256": "bafdc2d1d863a2e09d85c40cc7cbd0650135394e316a29c01bf34fcbdf4502de", - "expected_sections": 3, - "status": "ok" - }, - { - "topic": "DocumentationSetup2025b", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/DocumentationSetup2025b.m", - "notebook_path": "/private/tmp/nstat-python-sync-20260305/notebooks/DocumentationSetup2025b.ipynb", - "source_sha256": "7bf62941210f06d145d7b7d1aa09dbcf966e8dc9da3da64929b6d7262b8c481c", - "notebook_sha256": "ed54ec1e9705f8e6ae32bd9e2fc6e3bfbe050accb0e8f34fa311b1e6365324de", - "expected_sections": 6, - "status": "ok" - }, - { - "topic": "FitResultReference", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/FitResultReference.m", - "notebook_path": "/private/tmp/nstat-python-sync-20260305/notebooks/FitResultReference.ipynb", - "source_sha256": "3ea64561481ac1849654bef5595ef26b372e7c5507eb970f3fc56e15705ef748", - "notebook_sha256": "0717dae57e0a0216dbfd2950eb9c0aa369a5a895941790094d34cb4e17be6ecc", - "expected_sections": 2, - "status": "ok" - }, - { - "topic": "HybridFilterExample", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/HybridFilterExample.mlx", - "notebook_path": "/private/tmp/nstat-python-sync-20260305/notebooks/HybridFilterExample.ipynb", - "source_sha256": "de3ff79724f429df388813078d91fe254c26bd41e3d5401c7358b25702d2da51", - "notebook_sha256": "2bdd182e2d2485545ce1710f7ea04f7b53f950a7c5bd0ec3d0cc8351e70efdcb", - "expected_sections": 4, - "status": "ok" - }, - { - "topic": "publish_all_helpfiles", - "source_path": "/private/tmp/upstream-nstat-matlab/helpfiles/publish_all_helpfiles.m", - "notebook_path": "/private/tmp/nstat-python-sync-20260305/notebooks/publish_all_helpfiles.ipynb", - "source_sha256": "87638a176beb8214c21d12620ee34ed6da253cb56492ba13d9371ae3d473e7b5", - "notebook_sha256": "3e152e1e7862540a3351f8c3b493d0751c4cf2a78b436570d78c6d548c8425b5", - "expected_sections": 1, - "status": "ok" - } - ], - "status": "pass", - "failures": [] -} \ No newline at end of file diff --git a/parity/port_mapping.yml b/parity/port_mapping.yml deleted file mode 100644 index 10e3eb10..00000000 --- a/parity/port_mapping.yml +++ /dev/null @@ -1,100 +0,0 @@ -version: 1 -matlab_repo_url: https://github.com/iahncajigas/nSTAT.git -python_repo_url: https://github.com/cajigaslab/nSTAT-python.git -entries: - - matlab_relpath: SignalObj.m - entity_name: SignalObj - entity_type: class - python_path: nstat/SignalObj.py - status: mapped - notes: MATLAB compatibility adapter backed by nstat/core.py and nstat/signal.py. - - matlab_relpath: FitResult.m - entity_name: FitResult - entity_type: class - python_path: nstat/FitResult.py - status: mapped - notes: MATLAB compatibility adapter backed by nstat/fit.py. - - matlab_relpath: FitResSummary.m - entity_name: FitResSummary - entity_type: class - python_path: nstat/FitResSummary.py - status: mapped - notes: MATLAB compatibility adapter backed by nstat/fit.py. - - matlab_relpath: getPaperDataDirs.m - entity_name: getPaperDataDirs - entity_type: function - python_path: nstat/paper_examples.py - status: mapped - notes: Python paper-example runner now resolves data through nstat.data_manager. - - matlab_relpath: nSTAT_Install.m - entity_name: nSTAT_Install - entity_type: function - python_path: nstat/install.py - status: mapped - notes: Python install helper mirrors MATLAB download/prompt policy for external example data. - - matlab_relpath: nSTAT_ExampleDataInfo.m - entity_name: nSTAT_ExampleDataInfo - entity_type: function - python_path: nstat/data_manager.py - status: mapped - notes: Python data manager exposes the figshare DOI, required files, and installation status. - - matlab_relpath: tools/+nstat/applyPlotStyle.m - entity_name: nstat.applyPlotStyle - entity_type: function - python_path: nstat/plot_style.py - status: mapped - notes: Python plot-style helper tracks the new upstream modern-vs-legacy style preference. - - matlab_relpath: tools/+nstat/getPlotStyle.m - entity_name: nstat.getPlotStyle - entity_type: function - python_path: nstat/plot_style.py - status: mapped - notes: Python plot-style helper tracks the new upstream modern-vs-legacy style preference. - - matlab_relpath: tools/+nstat/setPlotStyle.m - entity_name: nstat.setPlotStyle - entity_type: function - python_path: nstat/plot_style.py - status: mapped - notes: Python plot-style helper tracks the new upstream modern-vs-legacy style preference. - - matlab_relpath: examples/paper/example01_mepsc_poisson.m - entity_name: example01_mepsc_poisson - entity_type: example - python_path: nstat/paper_examples_full.py - status: mapped - notes: Paper example 1 is implemented in run_experiment1. - - matlab_relpath: examples/paper/example02_whisker_stimulus_thalamus.m - entity_name: example02_whisker_stimulus_thalamus - entity_type: example - python_path: nstat/paper_examples.py - status: mapped - notes: Paper example 2 is implemented in run_experiment2. - - matlab_relpath: examples/paper/example03_psth_and_ssglm.m - entity_name: example03_psth_and_ssglm - entity_type: example - python_path: nstat/paper_examples_full.py - status: mapped - notes: Paper example 3 is implemented in run_experiment3 and run_experiment3b. - - matlab_relpath: examples/paper/example04_place_cells_continuous_stimulus.m - entity_name: example04_place_cells_continuous_stimulus - entity_type: example - python_path: nstat/paper_examples.py - status: mapped - notes: Paper example 4 is implemented in run_experiment4. - - matlab_relpath: examples/paper/example05_decoding_ppaf_pphf.m - entity_name: example05_decoding_ppaf_pphf - entity_type: example - python_path: nstat/paper_examples.py - status: mapped - notes: Paper example 5 is implemented in run_experiment5. - - matlab_relpath: helpfiles/nSTATPaperExamples.mlx - entity_name: nSTATPaperExamples - entity_type: help_mlx - python_path: notebooks/nSTATPaperExamples.ipynb - status: mapped - notes: Generated notebook analogue of the MATLAB live script. - - matlab_relpath: helpfiles/publish_all_helpfiles.m - entity_name: publish_all_helpfiles - entity_type: help_m - python_path: notebooks/publish_all_helpfiles.ipynb - status: mapped - notes: Utility notebook stays execution-tested but excluded from strict figure gating. diff --git a/pyproject.toml b/pyproject.toml index 6e21c2cd..3f48d3d9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -17,9 +17,7 @@ dependencies = [ "matplotlib>=3.7", "PyYAML>=6.0", "nbformat>=5.10", - "nbclient>=0.10", - "Pillow>=10.0", - "reportlab>=4.0" + "nbclient>=0.10" ] [project.optional-dependencies] diff --git a/reports/repo_split_inventory/split_readiness_gates.json b/reports/repo_split_inventory/split_readiness_gates.json deleted file mode 100644 index c6dd4697..00000000 --- a/reports/repo_split_inventory/split_readiness_gates.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "python_example_topics_expected": 25, - "python_example_topics_ready": 25, - "python_example_topics_missing_coverage": [], - "matlab_example_topics_expected": 25, - "matlab_example_topics_with_mlx": 18, - "matlab_example_topics_missing_mlx": [ - "ExplicitStimulusWhiskerData", - "NetworkTutorial", - "PPThinning", - "PSTHEstimation", - "StimulusDecode2D", - "ValidationDataSet", - "mEPSCAnalysis" - ], - "pass": false -} \ No newline at end of file diff --git a/reports/repo_split_inventory/summary.json b/reports/repo_split_inventory/summary.json deleted file mode 100644 index 47ded8a5..00000000 --- a/reports/repo_split_inventory/summary.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "generated_at_utc": "2026-02-27T03:24:36+00:00", - "repo_root": "/Users/iahncajigas/Library/CloudStorage/Dropbox/Research/Matlab/nSTAT_currentRelease_Local", - "toc_target_topics": 31, - "toc_example_topics": 25, - "matlab_files": { - "m": 34, - "mlx": 21, - "html": 35 - }, - "python_assets": { - "docs_topics_rst": 31, - "notebooks_ipynb": 32, - "example_scripts_py": 27 - }, - "coverage_counts": { - "toc_topics_with_python_docs": 31, - "toc_topics_with_python_notebooks": 29, - "toc_topics_with_python_example_scripts": 25, - "example_topics_full_python_coverage": 25, - "example_topics_with_matlab_mlx": 18 - }, - "example_topic_stems_from_toc": [ - "AnalysisExamples", - "ConfigCollExamples", - "CovCollExamples", - "CovariateExamples", - "DecodingExample", - "DecodingExampleWithHist", - "EventsExamples", - "ExplicitStimulusWhiskerData", - "FitResSummaryExamples", - "FitResultExamples", - "HippocampalPlaceCellExample", - "HistoryExamples", - "NetworkTutorial", - "PPSimExample", - "PPThinning", - "PSTHEstimation", - "SignalObjExamples", - "StimulusDecode2D", - "TrialConfigExamples", - "TrialExamples", - "ValidationDataSet", - "mEPSCAnalysis", - "nSTATPaperExamples", - "nSpikeTrainExamples", - "nstCollExamples" - ], - "python_only_topic_stems_not_in_toc": [ - "_common" - ] -} \ No newline at end of file diff --git a/reports/repo_split_inventory/topic_coverage_matrix.json b/reports/repo_split_inventory/topic_coverage_matrix.json deleted file mode 100644 index 5305d3a0..00000000 --- a/reports/repo_split_inventory/topic_coverage_matrix.json +++ /dev/null @@ -1,374 +0,0 @@ -[ - { - "title": "Using the Analysis Class", - "target": "AnalysisExamples.html", - "stem": "AnalysisExamples", - "is_example_topic": true, - "matlab_m_exists": true, - "matlab_mlx_exists": true, - "matlab_html_exists": true, - "python_doc_exists": true, - "python_notebook_exists": true, - "python_example_script_exists": true - }, - { - "title": "Class Definitions", - "target": "ClassDefinitions.html", - "stem": "ClassDefinitions", - "is_example_topic": false, - "matlab_m_exists": true, - "matlab_mlx_exists": false, - "matlab_html_exists": true, - "python_doc_exists": true, - "python_notebook_exists": true, - "python_example_script_exists": false - }, - { - "title": "Using the ConfigColl Class", - "target": "ConfigCollExamples.html", - "stem": "ConfigCollExamples", - "is_example_topic": true, - "matlab_m_exists": true, - "matlab_mlx_exists": true, - "matlab_html_exists": true, - "python_doc_exists": true, - "python_notebook_exists": true, - "python_example_script_exists": true - }, - { - "title": "Using the CovColl Class", - "target": "CovCollExamples.html", - "stem": "CovCollExamples", - "is_example_topic": true, - "matlab_m_exists": true, - "matlab_mlx_exists": true, - "matlab_html_exists": true, - "python_doc_exists": true, - "python_notebook_exists": true, - "python_example_script_exists": true - }, - { - "title": "Using the Covariate Class", - "target": "CovariateExamples.html", - "stem": "CovariateExamples", - "is_example_topic": true, - "matlab_m_exists": true, - "matlab_mlx_exists": true, - "matlab_html_exists": true, - "python_doc_exists": true, - "python_notebook_exists": true, - "python_example_script_exists": true - }, - { - "title": "Example Data Analysis - Decoding Univariate Simulated Stimuli (No History Effect)", - "target": "DecodingExample.html", - "stem": "DecodingExample", - "is_example_topic": true, - "matlab_m_exists": true, - "matlab_mlx_exists": true, - "matlab_html_exists": true, - "python_doc_exists": true, - "python_notebook_exists": true, - "python_example_script_exists": true - }, - { - "title": "Example Data Analysis - Decoding Univariate Simulated Stimuli with and without History Effect", - "target": "DecodingExampleWithHist.html", - "stem": "DecodingExampleWithHist", - "is_example_topic": true, - "matlab_m_exists": true, - "matlab_mlx_exists": true, - "matlab_html_exists": true, - "python_doc_exists": true, - "python_notebook_exists": true, - "python_example_script_exists": true - }, - { - "title": "MATLAB 2025b Help Integration", - "target": "DocumentationSetup2025b.html", - "stem": "DocumentationSetup2025b", - "is_example_topic": false, - "matlab_m_exists": true, - "matlab_mlx_exists": false, - "matlab_html_exists": true, - "python_doc_exists": true, - "python_notebook_exists": false, - "python_example_script_exists": false - }, - { - "title": "Using the Events Class", - "target": "EventsExamples.html", - "stem": "EventsExamples", - "is_example_topic": true, - "matlab_m_exists": true, - "matlab_mlx_exists": true, - "matlab_html_exists": true, - "python_doc_exists": true, - "python_notebook_exists": true, - "python_example_script_exists": true - }, - { - "title": "Examples Using the SignalObj Class Using the Covariate Class Using the CovColl Class Using the nSpikeTrain Class Using the nstColl Class Using the Events Class Using the History Class Using the Trial Class Using the TrialConfig Class Using the ConfigColl Class Using the Analysis Class Using the FitResult Class Using the FitResSummary Class Point Process Simulation via Thinning Example Data Analysis - Simulated Data - Computing a Peri-Stimulus Time Histogram (PSTH) Example Data Analysis - Simulated Constant (Piecewise Constant) Rate Poisson Example Data Analysis - Miniature Excitatory Post-Synaptic Currents (mEPSCs) Example Data Analysis - Simulated Explicit Stimulus and History Example Data Analysis - Explicit Stimulus Example Data Analysis - Hippocampal Place Cell Receptive Field Estimation Example Data Analysis - Decoding Univariate Simulated Stimuli (No History Effect) Example Data Analysis - Decoding Univariate Simulated Stimuli with and without History Effect Example Data Analysis - Decoding Bivariate Simulated Stimuli Example Data Analysis - Two Neuron Network Simulation and Estimation of Ensemble Effect nSTAT Paper Examples", - "target": "Examples.html", - "stem": "Examples", - "is_example_topic": false, - "matlab_m_exists": true, - "matlab_mlx_exists": true, - "matlab_html_exists": true, - "python_doc_exists": true, - "python_notebook_exists": true, - "python_example_script_exists": false - }, - { - "title": "Example Data Analysis - Explicit Stimulus", - "target": "ExplicitStimulusWhiskerData.html", - "stem": "ExplicitStimulusWhiskerData", - "is_example_topic": true, - "matlab_m_exists": true, - "matlab_mlx_exists": false, - "matlab_html_exists": true, - "python_doc_exists": true, - "python_notebook_exists": true, - "python_example_script_exists": true - }, - { - "title": "Using the FitResSummary Class", - "target": "FitResSummaryExamples.html", - "stem": "FitResSummaryExamples", - "is_example_topic": true, - "matlab_m_exists": true, - "matlab_mlx_exists": true, - "matlab_html_exists": true, - "python_doc_exists": true, - "python_notebook_exists": true, - "python_example_script_exists": true - }, - { - "title": "FitResult Reference", - "target": "FitResult.html", - "stem": "FitResult", - "is_example_topic": false, - "matlab_m_exists": true, - "matlab_mlx_exists": false, - "matlab_html_exists": true, - "python_doc_exists": true, - "python_notebook_exists": true, - "python_example_script_exists": false - }, - { - "title": "Using the FitResult Class", - "target": "FitResultExamples.html", - "stem": "FitResultExamples", - "is_example_topic": true, - "matlab_m_exists": true, - "matlab_mlx_exists": true, - "matlab_html_exists": true, - "python_doc_exists": true, - "python_notebook_exists": true, - "python_example_script_exists": true - }, - { - "title": "Example Data Analysis - Hippocampal Place Cell Receptive Field Estimation", - "target": "HippocampalPlaceCellExample.html", - "stem": "HippocampalPlaceCellExample", - "is_example_topic": true, - "matlab_m_exists": true, - "matlab_mlx_exists": true, - "matlab_html_exists": true, - "python_doc_exists": true, - "python_notebook_exists": true, - "python_example_script_exists": true - }, - { - "title": "Using the History Class", - "target": "HistoryExamples.html", - "stem": "HistoryExamples", - "is_example_topic": true, - "matlab_m_exists": true, - "matlab_mlx_exists": true, - "matlab_html_exists": true, - "python_doc_exists": true, - "python_notebook_exists": true, - "python_example_script_exists": true - }, - { - "title": "Example Data Analysis - Two Neuron Network Simulation and Estimation of Ensemble Effect", - "target": "NetworkTutorial.html", - "stem": "NetworkTutorial", - "is_example_topic": true, - "matlab_m_exists": true, - "matlab_mlx_exists": false, - "matlab_html_exists": true, - "python_doc_exists": true, - "python_notebook_exists": true, - "python_example_script_exists": true - }, - { - "title": "nSTAT Neural Spike Train Analysis Toolbox Overview MATLAB 2025b Help Integration Class Definitions SignalObj Reference FitResult Reference Examples Using the SignalObj Class Using the Covariate Class Using the CovColl Class Using the nSpikeTrain Class Using the nstColl Class Using the Events Class Using the History Class Using the Trial Class Using the TrialConfig Class Using the ConfigColl Class Using the Analysis Class Using the FitResult Class Using the FitResSummary Class Point Process Simulation via Thinning Example Data Analysis - Simulated Data - Computing a Peri-Stimulus Time Histogram (PSTH) Example Data Analysis - Simulated Constant (Piecewise Constant) Rate Poisson Example Data Analysis - Miniature Excitatory Post-Synaptic Currents (mEPSCs) Example Data Analysis - Simulated Explicit Stimulus and History Example Data Analysis - Explicit Stimulus Example Data Analysis - Hippocampal Place Cell Receptive Field Estimation Example Data Analysis - Decoding Univariate Simulated Stimuli (No History Effect) Example Data Analysis - Decoding Univariate Simulated Stimuli with and without History Effect Example Data Analysis - Decoding Bivariate Simulated Stimuli Example Data Analysis - Two Neuron Network Simulation and Estimation of Ensemble Effect nSTAT Paper Examples Neuroscience Statistics Research Laboratory", - "target": "NeuralSpikeAnalysis_top.html", - "stem": "NeuralSpikeAnalysis_top", - "is_example_topic": false, - "matlab_m_exists": true, - "matlab_mlx_exists": false, - "matlab_html_exists": true, - "python_doc_exists": true, - "python_notebook_exists": true, - "python_example_script_exists": false - }, - { - "title": "Example Data Analysis - Simulated Explicit Stimulus and History", - "target": "PPSimExample.html", - "stem": "PPSimExample", - "is_example_topic": true, - "matlab_m_exists": true, - "matlab_mlx_exists": true, - "matlab_html_exists": true, - "python_doc_exists": true, - "python_notebook_exists": true, - "python_example_script_exists": true - }, - { - "title": "Point Process Simulation via Thinning", - "target": "PPThinning.html", - "stem": "PPThinning", - "is_example_topic": true, - "matlab_m_exists": true, - "matlab_mlx_exists": false, - "matlab_html_exists": true, - "python_doc_exists": true, - "python_notebook_exists": true, - "python_example_script_exists": true - }, - { - "title": "Example Data Analysis - Simulated Data - Computing a Peri-Stimulus Time Histogram (PSTH)", - "target": "PSTHEstimation.html", - "stem": "PSTHEstimation", - "is_example_topic": true, - "matlab_m_exists": true, - "matlab_mlx_exists": false, - "matlab_html_exists": true, - "python_doc_exists": true, - "python_notebook_exists": true, - "python_example_script_exists": true - }, - { - "title": "SignalObj Reference", - "target": "SignalObj.html", - "stem": "SignalObj", - "is_example_topic": false, - "matlab_m_exists": false, - "matlab_mlx_exists": false, - "matlab_html_exists": true, - "python_doc_exists": true, - "python_notebook_exists": false, - "python_example_script_exists": false - }, - { - "title": "Using the SignalObj Class", - "target": "SignalObjExamples.html", - "stem": "SignalObjExamples", - "is_example_topic": true, - "matlab_m_exists": true, - "matlab_mlx_exists": true, - "matlab_html_exists": true, - "python_doc_exists": true, - "python_notebook_exists": true, - "python_example_script_exists": true - }, - { - "title": "Example Data Analysis - Decoding Bivariate Simulated Stimuli", - "target": "StimulusDecode2D.html", - "stem": "StimulusDecode2D", - "is_example_topic": true, - "matlab_m_exists": true, - "matlab_mlx_exists": false, - "matlab_html_exists": true, - "python_doc_exists": true, - "python_notebook_exists": true, - "python_example_script_exists": true - }, - { - "title": "Using the TrialConfig Class", - "target": "TrialConfigExamples.html", - "stem": "TrialConfigExamples", - "is_example_topic": true, - "matlab_m_exists": true, - "matlab_mlx_exists": true, - "matlab_html_exists": true, - "python_doc_exists": true, - "python_notebook_exists": true, - "python_example_script_exists": true - }, - { - "title": "Using the Trial Class", - "target": "TrialExamples.html", - "stem": "TrialExamples", - "is_example_topic": true, - "matlab_m_exists": true, - "matlab_mlx_exists": true, - "matlab_html_exists": true, - "python_doc_exists": true, - "python_notebook_exists": true, - "python_example_script_exists": true - }, - { - "title": "Example Data Analysis - Simulated Constant (Piecewise Constant) Rate Poisson", - "target": "ValidationDataSet.html", - "stem": "ValidationDataSet", - "is_example_topic": true, - "matlab_m_exists": true, - "matlab_mlx_exists": false, - "matlab_html_exists": true, - "python_doc_exists": true, - "python_notebook_exists": true, - "python_example_script_exists": true - }, - { - "title": "Example Data Analysis - Miniature Excitatory Post-Synaptic Currents (mEPSCs)", - "target": "mEPSCAnalysis.html", - "stem": "mEPSCAnalysis", - "is_example_topic": true, - "matlab_m_exists": true, - "matlab_mlx_exists": false, - "matlab_html_exists": true, - "python_doc_exists": true, - "python_notebook_exists": true, - "python_example_script_exists": true - }, - { - "title": "nSTAT Paper Examples", - "target": "nSTATPaperExamples.html", - "stem": "nSTATPaperExamples", - "is_example_topic": true, - "matlab_m_exists": true, - "matlab_mlx_exists": true, - "matlab_html_exists": true, - "python_doc_exists": true, - "python_notebook_exists": true, - "python_example_script_exists": true - }, - { - "title": "Using the nSpikeTrain Class", - "target": "nSpikeTrainExamples.html", - "stem": "nSpikeTrainExamples", - "is_example_topic": true, - "matlab_m_exists": true, - "matlab_mlx_exists": true, - "matlab_html_exists": true, - "python_doc_exists": true, - "python_notebook_exists": true, - "python_example_script_exists": true - }, - { - "title": "Using the nstColl Class", - "target": "nstCollExamples.html", - "stem": "nstCollExamples", - "is_example_topic": true, - "matlab_m_exists": true, - "matlab_mlx_exists": true, - "matlab_html_exists": true, - "python_doc_exists": true, - "python_notebook_exists": true, - "python_example_script_exists": true - } -] \ No newline at end of file diff --git a/tests/test_helpfile_ordinal_image_parity.py b/tests/test_helpfile_ordinal_image_parity.py deleted file mode 100644 index 16d14de7..00000000 --- a/tests/test_helpfile_ordinal_image_parity.py +++ /dev/null @@ -1,145 +0,0 @@ -from __future__ import annotations - -import json -import os -import subprocess -from pathlib import Path - -import matplotlib.image as mpimg -import numpy as np -import pytest -import yaml - - -def _write_image(path: Path, value: float) -> None: - arr = np.full((32, 32), value, dtype=float) - path.parent.mkdir(parents=True, exist_ok=True) - mpimg.imsave(path, arr, cmap="gray", vmin=0.0, vmax=1.0) - - -def _run_checker( - manifest: Path, - py_root: Path, - mat_root: Path, - out_json: Path, - *, - topics: str = "", - threshold: str = "0.9", -) -> subprocess.CompletedProcess[str]: - cmd = [ - "python", - "tools/reports/check_helpfile_ordinal_image_parity.py", - "--manifest", - str(manifest), - "--python-image-root", - str(py_root), - "--matlab-image-root", - str(mat_root), - "--ssim-threshold", - threshold, - "--out-json", - str(out_json), - ] - if topics: - cmd.extend(["--topics", topics]) - return subprocess.run( - cmd, - cwd=Path(__file__).resolve().parents[1], - text=True, - capture_output=True, - check=False, - env={**os.environ, "PYTHONPATH": "src:."}, - ) - - -def test_ordinal_image_parity_passes_for_identical_pairs(tmp_path: Path) -> None: - manifest = tmp_path / "manifest.yml" - py_root = tmp_path / "python_images" - mat_root = tmp_path / "matlab_images" - out_json = tmp_path / "summary.json" - - _write_image(py_root / "TopicA" / "fig_001.png", 0.25) - _write_image(mat_root / "TopicA" / "fig_001.png", 0.25) - - manifest.write_text( - yaml.safe_dump( - { - "version": 1, - "topics": [ - { - "topic": "TopicA", - "expected_figure_count": 1, - "notebook_output_path": "notebooks/TopicA.ipynb", - } - ], - }, - sort_keys=False, - ), - encoding="utf-8", - ) - - result = _run_checker(manifest, py_root, mat_root, out_json) - assert result.returncode == 0, result.stdout + "\n" + result.stderr - payload = json.loads(out_json.read_text(encoding="utf-8")) - assert payload["status"] == "pass" - - -def test_ordinal_image_parity_fails_on_count_mismatch(tmp_path: Path) -> None: - manifest = tmp_path / "manifest.yml" - py_root = tmp_path / "python_images" - mat_root = tmp_path / "matlab_images" - out_json = tmp_path / "summary.json" - - _write_image(py_root / "TopicA" / "fig_001.png", 0.25) - _write_image(py_root / "TopicA" / "fig_002.png", 0.5) - _write_image(mat_root / "TopicA" / "fig_001.png", 0.25) - - manifest.write_text( - yaml.safe_dump( - { - "version": 1, - "topics": [ - { - "topic": "TopicA", - "expected_figure_count": 1, - "notebook_output_path": "notebooks/TopicA.ipynb", - } - ], - }, - sort_keys=False, - ), - encoding="utf-8", - ) - - result = _run_checker(manifest, py_root, mat_root, out_json) - assert result.returncode == 1 - payload = json.loads(out_json.read_text(encoding="utf-8")) - assert payload["status"] == "fail" - assert payload["failures"] - - -def test_analysisexamples_fig001_ssim_threshold_when_artifacts_present(tmp_path: Path) -> None: - repo_root = Path(__file__).resolve().parents[1] - py_img = repo_root / "output/notebook_images/AnalysisExamples/fig_001.png" - mat_img = repo_root / "output/matlab_help_images/AnalysisExamples/fig_001.png" - if not py_img.exists() or not mat_img.exists(): - pytest.skip("AnalysisExamples parity artifacts not present locally") - - manifest = repo_root / "parity/help_source_manifest.yml" - out_json = tmp_path / "analysisexamples_summary.json" - result = _run_checker( - manifest, - repo_root / "output/notebook_images", - repo_root / "output/matlab_help_images", - out_json, - topics="AnalysisExamples", - threshold="0.70", - ) - payload = json.loads(out_json.read_text(encoding="utf-8")) - topic_rows = [row for row in payload.get("topics", []) if row.get("topic") == "AnalysisExamples"] - assert topic_rows, result.stdout + "\n" + result.stderr - pairs = topic_rows[0].get("pairs", []) - assert pairs, result.stdout + "\n" + result.stderr - fig1 = next((pair for pair in pairs if int(pair.get("ordinal", -1)) == 1), None) - assert fig1 is not None, result.stdout + "\n" + result.stderr - assert float(fig1["score"]) >= 0.70, result.stdout + "\n" + result.stderr diff --git a/tests/test_matlab_helpfile_figure_export_tool.py b/tests/test_matlab_helpfile_figure_export_tool.py deleted file mode 100644 index db91c21e..00000000 --- a/tests/test_matlab_helpfile_figure_export_tool.py +++ /dev/null @@ -1,30 +0,0 @@ -from __future__ import annotations - -import os -import subprocess -from pathlib import Path - - -def test_export_matlab_helpfile_figures_tool_dry_run() -> None: - repo_root = Path(__file__).resolve().parents[1] - cmd = [ - "python", - "tools/reports/export_matlab_helpfile_figures.py", - "--source-manifest", - "parity/help_source_manifest.yml", - "--output-root", - "output/matlab_help_images_test", - "--report-json", - "output/matlab_help_images_test/report.json", - "--dry-run", - ] - proc = subprocess.run( - cmd, - cwd=repo_root, - text=True, - capture_output=True, - check=False, - env={**os.environ, "PYTHONPATH": "src:."}, - ) - assert proc.returncode == 0, proc.stdout + "\n" + proc.stderr - assert "Resolved" in proc.stdout diff --git a/tests/test_notebook_surface.py b/tests/test_notebook_surface.py new file mode 100644 index 00000000..307e2047 --- /dev/null +++ b/tests/test_notebook_surface.py @@ -0,0 +1,28 @@ +from __future__ import annotations + +from pathlib import Path + +import nbformat + + +REPO_ROOT = Path(__file__).resolve().parents[1] + + +def test_notebooks_are_python_facing() -> None: + notebook_dir = REPO_ROOT / "notebooks" + for path in sorted(notebook_dir.glob("*.ipynb")): + nb = nbformat.read(path, as_version=4) + meta = nb.metadata.get("nstat", {}) + assert "source_file" not in meta, f"{path.name} still exposes source_file metadata" + assert "source_type" not in meta, f"{path.name} still exposes source_type metadata" + assert "strict_section_cell_mapping" not in meta, f"{path.name} still exposes MATLAB mapping metadata" + + text = "\n".join(cell.source for cell in nb.cells) + assert "# MATLAB L" not in text, f"{path.name} still contains MATLAB line comments" + assert "_matlab(" not in text, f"{path.name} still contains MATLAB placeholder calls" + assert "AUTO-GENERATED FROM MATLAB" not in text, f"{path.name} still advertises MATLAB generation" + + +def test_readme_catalog_is_python_facing() -> None: + readme = (REPO_ROOT / "README.md").read_text(encoding="utf-8") + assert "Notebook generated from MATLAB help source" not in readme diff --git a/tests/test_validation_images_discovery.py b/tests/test_validation_images_discovery.py deleted file mode 100644 index dc74cdb8..00000000 --- a/tests/test_validation_images_discovery.py +++ /dev/null @@ -1,72 +0,0 @@ -from __future__ import annotations - -import importlib.util -from pathlib import Path -import sys - -import nbformat - -_MODULE_PATH = Path(__file__).resolve().parents[1] / "tools" / "reports" / "generate_validation_pdf.py" -_SPEC = importlib.util.spec_from_file_location("generate_validation_pdf", _MODULE_PATH) -assert _SPEC is not None and _SPEC.loader is not None -gvp = importlib.util.module_from_spec(_SPEC) -sys.modules[_SPEC.name] = gvp -_SPEC.loader.exec_module(gvp) - - -def test_execute_notebook_capture_discovers_saved_tracker_images( - tmp_path: Path, - monkeypatch, -) -> None: - repo_root = tmp_path / "repo" - nb_dir = repo_root / "notebooks" - nb_dir.mkdir(parents=True, exist_ok=True) - topic = "DiscoverySmoke" - nb_path = nb_dir / f"{topic}.ipynb" - - nb = nbformat.v4.new_notebook() - nb.cells = [ - nbformat.v4.new_code_cell( - "\n".join( - [ - "import matplotlib", - "matplotlib.use('Agg')", - "import matplotlib.pyplot as plt", - "from pathlib import Path", - f"topic = {topic!r}", - "out = Path.cwd().resolve().parent / 'output' / 'notebook_images' / topic", - "out.mkdir(parents=True, exist_ok=True)", - "fig = plt.figure(figsize=(4, 2))", - "ax = fig.add_subplot(1,1,1)", - "ax.plot([0, 1], [0, 1], color='k')", - "fig.tight_layout()", - "fig.savefig(out / 'fig_001.png', dpi=120)", - "plt.close(fig)", - ] - ) - ) - ] - nbformat.write(nb, nb_path) - - monkeypatch.setattr(gvp, "REPO_ROOT", repo_root) - - report = gvp.execute_notebook_capture( - target=gvp.NotebookTarget(topic=topic, file=nb_path, run_group="smoke"), - tmp_dir=repo_root / "tmp" / "pdfs" / "validation_report", - timeout=120, - matlab_help_root=None, - parity_threshold=0.8, - skip_parity_check=True, - parity_mode="gate", - gate_status=("verified", True), - parity_metrics=None, - ) - - assert report.executed - assert report.unique_image_count >= 1 - assert report.image_count >= report.unique_image_count - assert all(path.exists() for path in report.image_paths) - - discovered_dir = repo_root / "tmp" / "pdfs" / "validation_report" / "notebook_images" / topic - discovered = sorted(discovered_dir.glob("*.png")) - assert discovered diff --git a/tests/test_validation_parity_consistency.py b/tests/test_validation_parity_consistency.py deleted file mode 100644 index 9d146098..00000000 --- a/tests/test_validation_parity_consistency.py +++ /dev/null @@ -1,54 +0,0 @@ -from __future__ import annotations - -import json -from pathlib import Path - -import pytest - - -def _strict_failure_topics(strict_summary: dict[str, object]) -> set[str]: - failures = strict_summary.get("failures", []) - out: set[str] = set() - if not isinstance(failures, list): - return out - for item in failures: - text = str(item).strip() - if not text: - continue - topic = text.split(":", 1)[0].strip() - if topic: - out.add(topic) - return out - - -def _pdf_failure_topics(pdf_summary: dict[str, object]) -> set[str]: - rows = pdf_summary.get("topics", []) - out: set[str] = set() - if not isinstance(rows, list): - return out - for row in rows: - if not isinstance(row, dict): - continue - topic = str(row.get("topic", "")).strip() - parity_pass = row.get("parity_pass") - if topic and parity_pass is False: - out.add(topic) - return out - - -def test_pdf_image_mode_parity_matches_strict_ordinal_summary_when_artifacts_present() -> None: - repo_root = Path(__file__).resolve().parents[1] - strict_path = repo_root / "output" / "pdf" / "image_mode_parity" / "summary_full.json" - pdf_path = repo_root / "output" / "pdf" / "validation_report_latest.json" - - if not strict_path.exists() or not pdf_path.exists(): - pytest.skip("Validation parity artifacts not present locally") - - strict_summary = json.loads(strict_path.read_text(encoding="utf-8")) - pdf_summary = json.loads(pdf_path.read_text(encoding="utf-8")) - - strict_topics = _strict_failure_topics(strict_summary) - pdf_topics = _pdf_failure_topics(pdf_summary) - - assert strict_topics == pdf_topics - assert int(pdf_summary.get("parity_failures", -1)) == len(pdf_topics) diff --git a/tools/generate_repo_split_inventory.py b/tools/generate_repo_split_inventory.py deleted file mode 100644 index b066444b..00000000 --- a/tools/generate_repo_split_inventory.py +++ /dev/null @@ -1,187 +0,0 @@ -from __future__ import annotations - -import json -import xml.etree.ElementTree as ET -from datetime import datetime, timezone -from pathlib import Path - -PY_ROOT = Path(__file__).resolve().parents[1] -REPO_ROOT = PY_ROOT if (PY_ROOT / "helpfiles").exists() else PY_ROOT.parent -HELPFILES_ROOT = REPO_ROOT / "helpfiles" -TOC_PATH = HELPFILES_ROOT / "helptoc.xml" -OUT_ROOT = PY_ROOT / "reports" / "repo_split_inventory" - - -def _utc_now() -> str: - return datetime.now(timezone.utc).replace(microsecond=0).isoformat() - - -def _slugify(value: str) -> str: - out = [] - for ch in value.strip().lower(): - if ch.isalnum(): - out.append(ch) - return "".join(out) - - -def _iter_toc_targets() -> list[dict[str, str]]: - tree = ET.parse(TOC_PATH) - root = tree.getroot() - - examples_node = None - for item in root.iter("tocitem"): - if item.attrib.get("id") == "nstat_examples": - examples_node = item - break - - example_stems: set[str] = set() - if examples_node is not None: - for item in examples_node.findall("tocitem"): - target = item.attrib.get("target", "").strip() - if target: - example_stems.add(Path(target).stem) - - rows: list[dict[str, str]] = [] - seen: set[str] = set() - for item in root.iter("tocitem"): - target = item.attrib.get("target", "").strip() - if not target: - continue - if target.startswith("http://") or target.startswith("https://"): - continue - stem = Path(target).stem - key = f"{stem}|{target}" - if key in seen: - continue - seen.add(key) - rows.append( - { - "title": " ".join((item.text or "").split()) or stem, - "target": target, - "stem": stem, - "is_example_topic": stem in example_stems, - } - ) - return rows - - -def _file_stem_set(paths: list[Path], exclude_dunder: bool = False) -> set[str]: - out: set[str] = set() - for p in paths: - stem = p.stem - if exclude_dunder and stem.startswith("__"): - continue - out.add(stem) - return out - - -def _write_json(path: Path, payload: dict | list) -> None: - path.parent.mkdir(parents=True, exist_ok=True) - path.write_text(json.dumps(payload, indent=2), encoding="utf-8") - - -def main() -> int: - if not TOC_PATH.exists(): - raise FileNotFoundError(f"Missing TOC file: {TOC_PATH}") - - toc_rows = _iter_toc_targets() - toc_stems = {row["stem"] for row in toc_rows} - example_stems = {row["stem"] for row in toc_rows if row["is_example_topic"]} - - matlab_m = sorted(HELPFILES_ROOT.glob("*.m")) - matlab_mlx = sorted(HELPFILES_ROOT.glob("*.mlx")) - matlab_html = sorted(HELPFILES_ROOT.glob("*.html")) - - matlab_m_stems = _file_stem_set(matlab_m) - matlab_mlx_stems = _file_stem_set(matlab_mlx) - matlab_html_stems = _file_stem_set(matlab_html) - - py_docs_topics = sorted((PY_ROOT / "docs" / "topics").glob("*.rst")) - py_nb_topics = sorted((PY_ROOT / "notebooks" / "helpfiles").glob("*.ipynb")) - py_example_topics = sorted((PY_ROOT / "examples" / "help_topics").glob("*.py")) - - py_doc_stems = _file_stem_set(py_docs_topics) - py_nb_stems = _file_stem_set(py_nb_topics) - py_example_stems = _file_stem_set(py_example_topics, exclude_dunder=True) - py_doc_slugs = {_slugify(s) for s in py_doc_stems} - - coverage_rows: list[dict[str, object]] = [] - for row in sorted(toc_rows, key=lambda r: r["stem"]): - stem = row["stem"] - stem_slug = _slugify(stem) - coverage_rows.append( - { - **row, - "matlab_m_exists": stem in matlab_m_stems, - "matlab_mlx_exists": stem in matlab_mlx_stems, - "matlab_html_exists": stem in matlab_html_stems, - "python_doc_exists": stem_slug in py_doc_slugs, - "python_notebook_exists": stem in py_nb_stems, - "python_example_script_exists": stem in py_example_stems, - } - ) - - example_rows = [r for r in coverage_rows if bool(r["is_example_topic"])] - example_all_python_ok = [ - r - for r in example_rows - if bool(r["python_doc_exists"]) - and bool(r["python_notebook_exists"]) - and bool(r["python_example_script_exists"]) - ] - matlab_example_has_mlx = [r for r in example_rows if bool(r["matlab_mlx_exists"])] - - summary = { - "generated_at_utc": _utc_now(), - "repo_root": str(REPO_ROOT), - "toc_target_topics": len(toc_rows), - "toc_example_topics": len(example_rows), - "matlab_files": { - "m": len(matlab_m), - "mlx": len(matlab_mlx), - "html": len(matlab_html), - }, - "python_assets": { - "docs_topics_rst": len(py_docs_topics), - "notebooks_ipynb": len(py_nb_topics), - "example_scripts_py": len(py_example_topics), - }, - "coverage_counts": { - "toc_topics_with_python_docs": sum(1 for r in coverage_rows if bool(r["python_doc_exists"])), - "toc_topics_with_python_notebooks": sum(1 for r in coverage_rows if bool(r["python_notebook_exists"])), - "toc_topics_with_python_example_scripts": sum( - 1 for r in coverage_rows if bool(r["python_example_script_exists"]) - ), - "example_topics_full_python_coverage": len(example_all_python_ok), - "example_topics_with_matlab_mlx": len(matlab_example_has_mlx), - }, - "example_topic_stems_from_toc": sorted(example_stems), - "python_only_topic_stems_not_in_toc": sorted(py_example_stems - toc_stems), - } - - _write_json(OUT_ROOT / "summary.json", summary) - _write_json(OUT_ROOT / "topic_coverage_matrix.json", coverage_rows) - _write_json( - OUT_ROOT / "split_readiness_gates.json", - { - "python_example_topics_expected": len(example_rows), - "python_example_topics_ready": len(example_all_python_ok), - "python_example_topics_missing_coverage": [ - r["stem"] for r in example_rows if r not in example_all_python_ok - ], - "matlab_example_topics_expected": len(example_rows), - "matlab_example_topics_with_mlx": len(matlab_example_has_mlx), - "matlab_example_topics_missing_mlx": [ - r["stem"] for r in example_rows if not bool(r["matlab_mlx_exists"]) - ], - "pass": len(example_rows) == len(example_all_python_ok) and len(example_rows) == len(matlab_example_has_mlx), - }, - ) - - print(json.dumps(summary, indent=2)) - print(f"wrote={OUT_ROOT}") - return 0 - - -if __name__ == "__main__": - raise SystemExit(main()) diff --git a/tools/notebooks/check_notebook_consistency.py b/tools/notebooks/check_notebook_consistency.py deleted file mode 100755 index 96579dd3..00000000 --- a/tools/notebooks/check_notebook_consistency.py +++ /dev/null @@ -1,97 +0,0 @@ -#!/usr/bin/env python3 -"""Check notebook/source consistency and freeze source hashes.""" - -from __future__ import annotations - -import argparse -import hashlib -import json -from pathlib import Path - -import nbformat -import yaml - - - -def parse_args() -> argparse.Namespace: - parser = argparse.ArgumentParser(description=__doc__) - parser.add_argument("--repo-root", type=Path, default=Path(__file__).resolve().parents[2]) - parser.add_argument("--source-manifest", type=Path, default=Path("parity/help_source_manifest.yml")) - parser.add_argument("--out-json", type=Path, default=Path("parity/notebook_source_hashes.json")) - parser.add_argument("--topics", default="") - return parser.parse_args() - - - -def _sha256(path: Path) -> str: - h = hashlib.sha256() - with path.open("rb") as f: - for chunk in iter(lambda: f.read(1024 * 1024), b""): - h.update(chunk) - return h.hexdigest() - - - -def main() -> int: - args = parse_args() - repo_root = args.repo_root.resolve() - manifest = yaml.safe_load((repo_root / args.source_manifest).read_text(encoding="utf-8")) or {} - rows = manifest.get("topics", []) - if args.topics.strip(): - wanted = {token.strip() for token in args.topics.split(",") if token.strip()} - rows = [row for row in rows if str(row.get("topic", "")).strip() in wanted] - if not rows: - raise RuntimeError(f"No topics matched --topics={args.topics!r}") - - results = [] - failures = [] - for row in rows: - topic = str(row["topic"]) - source_path = Path(str(row["source_path"])).expanduser().resolve() - notebook_path = Path(str(row["notebook_output_path"])).expanduser().resolve() - expected_sections = int(row.get("expected_section_count", 0)) - - result = { - "topic": topic, - "source_path": str(source_path), - "notebook_path": str(notebook_path), - "source_sha256": _sha256(source_path) if source_path.exists() else "", - "notebook_sha256": _sha256(notebook_path) if notebook_path.exists() else "", - "expected_sections": expected_sections, - "status": "ok", - } - if not source_path.exists(): - result["status"] = "missing_source" - failures.append(f"{topic}: missing source {source_path}") - elif not notebook_path.exists(): - result["status"] = "missing_notebook" - failures.append(f"{topic}: missing notebook {notebook_path}") - else: - nb = nbformat.read(notebook_path, as_version=4) - if len(nb.cells) != expected_sections: - result["status"] = "cell_count_mismatch" - failures.append( - f"{topic}: notebook has {len(nb.cells)} cell(s), expected {expected_sections}" - ) - source_file_meta = str(nb.metadata.get("nstat", {}).get("source_file", "")).strip() - if source_file_meta and Path(source_file_meta).name != source_path.name: - result["status"] = "source_mismatch" - failures.append( - f"{topic}: notebook metadata source {source_file_meta} does not match {source_path.name}" - ) - results.append(result) - - payload = { - "topics": results, - "status": "pass" if not failures else "fail", - "failures": failures, - } - out_path = (repo_root / args.out_json).resolve() - out_path.parent.mkdir(parents=True, exist_ok=True) - out_path.write_text(json.dumps(payload, indent=2), encoding="utf-8") - print(out_path) - return 0 if not failures else 1 - - -if __name__ == "__main__": - raise SystemExit(main()) diff --git a/tools/notebooks/generate_helpfile_notebooks.py b/tools/notebooks/generate_helpfile_notebooks.py deleted file mode 100644 index a250d41a..00000000 --- a/tools/notebooks/generate_helpfile_notebooks.py +++ /dev/null @@ -1,793 +0,0 @@ -#!/usr/bin/env python3 -"""Generate help notebooks directly from MATLAB .m/.mlx sources.""" - -from __future__ import annotations - -import argparse -import json -import os -import re -import textwrap -import xml.etree.ElementTree as ET -from dataclasses import dataclass -from pathlib import Path -from zipfile import ZipFile - -import nbformat as nbf -import yaml - - -SECTION_MARKER_RE = re.compile(r"^\s*%%") -PLOT_CALL_RE = re.compile( - r"\b(plot3?|semilogx|semilogy|loglog|scatter3?|imagesc|imshow|pcolor|surf|contour|histogram|hist|spectrogram|subplot)\b", - re.IGNORECASE, -) -FIGURE_CALL_RE = re.compile(r"\bfigure\b", re.IGNORECASE) -CLOSE_CALL_RE = re.compile(r"^\s*(close(\s+all)?|clf)\b", re.IGNORECASE) -METHOD_PLOT_RE = re.compile( - r"^\s*[A-Za-z_]\w*\.(plot|plotResults|plotSummary|plotFit|plotResidual|KSPlot)\b", - re.IGNORECASE, -) -LOAD_CALL_RE = re.compile(r"""^\s*load\((["'])(.+?)\1\)\s*;?\s*$""", re.IGNORECASE) -SIMPLE_ASSIGN_RE = re.compile(r"^\s*([A-Za-z_]\w*)\s*=\s*(.+?)\s*;?\s*$") -COLON_RANGE_RE = re.compile(r"^\s*([^:]+)\s*:\s*([^:]+)\s*:\s*([^:]+)\s*$") -LOAD_ASSIGN_RE = re.compile( - r"""^\s*([A-Za-z_]\w*)\s*=\s*load\((["'])(.+?)\2\)\s*;?\s*$""", - re.IGNORECASE, -) -MLX_NS = {"w": "http://schemas.openxmlformats.org/wordprocessingml/2006/main"} -NO_FIGURE_UTILITY_TOPICS = {"publish_all_helpfiles"} - - -@dataclass -class SourceLine: - line_no: int - raw: str - is_code: bool - - -@dataclass -class SourceSection: - index: int - title: str - lines: list[SourceLine] - - -@dataclass -class FigureEvent: - topic: str - section_index: int - section_line_index: int - source_line_no: int - source_snippet: str - event_type: str - figure_ordinal: int - - -def parse_args() -> argparse.Namespace: - parser = argparse.ArgumentParser(description=__doc__) - parser.add_argument( - "--manifest", - type=Path, - default=Path("tools/notebooks/notebook_manifest.yml"), - help="Notebook topic manifest.", - ) - parser.add_argument( - "--matlab-help-root", - type=Path, - default=None, - help="Path containing MATLAB helpfile sources (.m/.mlx).", - ) - parser.add_argument( - "--reference-config", - type=Path, - default=Path("parity/matlab_reference.yml"), - help="Reference config used to resolve helpfiles root when --matlab-help-root is omitted.", - ) - parser.add_argument( - "--repo-root", - type=Path, - default=Path(__file__).resolve().parents[2], - help="Repository root.", - ) - parser.add_argument( - "--out-source-manifest", - type=Path, - default=Path("parity/help_source_manifest.yml"), - help="YAML manifest of source mapping and counts.", - ) - parser.add_argument( - "--out-source-report", - type=Path, - default=Path("parity/help_source_parsing_report.json"), - help="JSON parsing report.", - ) - parser.add_argument( - "--out-figure-manifest", - type=Path, - default=Path("parity/helpfile_figure_manifest.json"), - help="JSON figure-event manifest.", - ) - parser.add_argument( - "--topics", - default="", - help="Optional comma-separated topic subset to generate.", - ) - return parser.parse_args() - - -def _load_yaml(path: Path) -> dict: - payload = yaml.safe_load(path.read_text(encoding="utf-8")) or {} - if not isinstance(payload, dict): - raise ValueError(f"Invalid YAML payload in {path}") - return payload - - -def _resolve_help_root(args: argparse.Namespace) -> Path: - if args.matlab_help_root is not None: - root = args.matlab_help_root.expanduser().resolve() - if not root.exists(): - raise FileNotFoundError(f"MATLAB help root not found: {root}") - return root - - cfg = _load_yaml(args.reference_config) - ref = cfg.get("reference", {}) - if not isinstance(ref, dict): - raise ValueError("parity/matlab_reference.yml must contain a `reference` mapping") - local_path = str(ref.get("local_path", "")).strip() - help_subdir = str(ref.get("helpfiles_subdir", "helpfiles")) - candidates: list[Path] = [] - env_repo_var = str(ref.get("env_repo_var", "NSTAT_MATLAB_REPO")).strip() - if env_repo_var and os.environ.get(env_repo_var): - candidates.append((Path(os.environ[env_repo_var]).expanduser().resolve() / help_subdir)) - if local_path: - local = Path(local_path) - if not local.is_absolute(): - local = (args.repo_root / local).resolve() - candidates.append(local / help_subdir) - candidates.append((args.repo_root.parent / "nSTAT" / help_subdir).resolve()) - candidates.append((args.repo_root.parent / "nSTAT-matlab" / help_subdir).resolve()) - candidates.append((args.repo_root.parent / "nSTAT_currentRelease_Local" / "helpfiles").resolve()) - candidates.append((Path("/tmp/upstream-nstat") / "helpfiles").resolve()) - for candidate in candidates: - if candidate.exists(): - return candidate - raise FileNotFoundError( - "Could not resolve MATLAB help root. Checked: " + ", ".join(str(c) for c in candidates) - ) - - -def _load_topics(manifest_path: Path) -> list[dict[str, str]]: - payload = _load_yaml(manifest_path) - topics: list[dict[str, str]] = [] - for row in payload.get("notebooks", []): - topic = str(row.get("topic", "")).strip() - file_path = str(row.get("file", "")).strip() - run_group = str(row.get("run_group", "full")).strip() - if not topic or not file_path: - continue - topics.append({"topic": topic, "file": file_path, "run_group": run_group}) - return topics - - -def _resolve_source_path(help_root: Path, topic: str) -> tuple[Path, str]: - mlx = help_root / f"{topic}.mlx" - m_file = help_root / f"{topic}.m" - if mlx.exists(): - return mlx, "mlx" - if m_file.exists(): - return m_file, "m" - raise FileNotFoundError(f"No MATLAB source found for topic={topic} in {help_root}") - - -def _split_m_sections(path: Path) -> list[SourceSection]: - lines = path.read_text(encoding="utf-8", errors="ignore").splitlines() - sections: list[SourceSection] = [] - current_lines: list[SourceLine] = [] - current_title = "Section 0" - sec_idx = 0 - - def flush() -> None: - nonlocal current_lines, current_title, sec_idx - sections.append(SourceSection(index=sec_idx, title=current_title, lines=current_lines)) - current_lines = [] - sec_idx += 1 - - for line_no, raw in enumerate(lines, start=1): - if SECTION_MARKER_RE.match(raw): - if sec_idx == 0 and not current_lines: - # Pre-section marker with no preamble still maps to section 0. - sections.append(SourceSection(index=0, title="Section 0", lines=[])) - sec_idx = 1 - else: - flush() - marker_title = raw.split("%%", 1)[1].strip() - current_title = marker_title if marker_title else f"Section {sec_idx}" - continue - is_code = bool(raw.strip()) and not raw.lstrip().startswith("%") - current_lines.append(SourceLine(line_no=line_no, raw=raw.rstrip("\n"), is_code=is_code)) - - if not sections or current_lines: - sections.append(SourceSection(index=sec_idx, title=current_title, lines=current_lines)) - return sections - - -def _extract_para_text(para: ET.Element) -> str: - text = "".join(para.itertext()) - return text.replace("\u00a0", " ").strip() - - -def _split_mlx_sections(path: Path) -> list[SourceSection]: - with ZipFile(path) as zf: - if "matlab/document.xml" not in zf.namelist(): - raise RuntimeError(f"{path} is missing matlab/document.xml") - xml_payload = zf.read("matlab/document.xml") - root = ET.fromstring(xml_payload) - sections: list[SourceSection] = [SourceSection(index=0, title="Section 0", lines=[])] - sec_idx = 0 - para_no = 0 - - for para in root.findall(".//w:p", MLX_NS): - para_no += 1 - style_elem = para.find("w:pPr/w:pStyle", MLX_NS) - style = "" - if style_elem is not None: - style = style_elem.attrib.get("{http://schemas.openxmlformats.org/wordprocessingml/2006/main}val", "") - text = _extract_para_text(para) - if not text: - continue - - style_l = style.lower() - if style_l == "heading": - sec_idx += 1 - sections.append(SourceSection(index=sec_idx, title=text, lines=[])) - continue - - is_code = style_l == "code" - target = sections[-1] - if is_code: - for offset, code_line in enumerate(text.splitlines()): - code_stripped = code_line.lstrip() - code_is_executable = bool(code_stripped) and not code_stripped.startswith("%") - target.lines.append( - SourceLine( - line_no=para_no * 100 + offset, - raw=code_line.rstrip(), - is_code=code_is_executable, - ) - ) - else: - target.lines.append( - SourceLine(line_no=para_no * 100, raw=f"% {text}", is_code=False) - ) - - return sections - - -def _extract_sections(source_path: Path, source_type: str) -> list[SourceSection]: - if source_type == "mlx": - return _split_mlx_sections(source_path) - return _split_m_sections(source_path) - - -def _detect_figure_events(topic: str, sections: list[SourceSection]) -> list[FigureEvent]: - events: list[FigureEvent] = [] - figure_open = False - ordinal = 0 - - for section in sections: - for line_idx, line in enumerate(section.lines): - if not line.is_code: - continue - stripped = _strip_matlab_comment(line.raw).strip() - if not stripped: - continue - statements = _split_matlab_statements(stripped) or [stripped] - for statement in statements: - stmt = statement.strip() - if not stmt: - continue - if CLOSE_CALL_RE.match(stmt): - figure_open = False - continue - has_figure = bool(FIGURE_CALL_RE.search(stmt)) - has_plot = bool(PLOT_CALL_RE.search(stmt) or METHOD_PLOT_RE.match(stmt)) - if has_figure: - ordinal += 1 - figure_open = True - events.append( - FigureEvent( - topic=topic, - section_index=section.index, - section_line_index=line_idx, - source_line_no=line.line_no, - source_snippet=stmt[:200], - event_type="new_figure", - figure_ordinal=ordinal, - ) - ) - if has_plot: - events.append( - FigureEvent( - topic=topic, - section_index=section.index, - section_line_index=line_idx, - source_line_no=line.line_no, - source_snippet=stmt[:200], - event_type="add_to_current", - figure_ordinal=ordinal, - ) - ) - continue - if has_plot: - if figure_open: - events.append( - FigureEvent( - topic=topic, - section_index=section.index, - section_line_index=line_idx, - source_line_no=line.line_no, - source_snippet=stmt[:200], - event_type="add_to_current", - figure_ordinal=ordinal, - ) - ) - else: - ordinal += 1 - figure_open = True - events.append( - FigureEvent( - topic=topic, - section_index=section.index, - section_line_index=line_idx, - source_line_no=line.line_no, - source_snippet=stmt[:200], - event_type="new_figure", - figure_ordinal=ordinal, - ) - ) - return events - - -def _matlab_comment_to_python(raw: str) -> str: - body = raw.lstrip().lstrip("%") - parts = body.splitlines() or [""] - out: list[str] = [] - for part in parts: - text = part.strip() - out.append(f"# {text}" if text else "#") - return "\n".join(out) - - -def _translate_code_line( - raw: str, - events: list[FigureEvent] | None, - *, - source_line_no: int | None = None, -) -> list[str]: - stripped = raw.strip() - event_lines: list[str] = [] - for evt in events or []: - snippet = evt.source_snippet if evt.source_snippet else stripped - if evt.event_type == "new_figure": - event_lines.append(f"__tracker.new_figure({snippet!r})") - elif evt.event_type == "add_to_current": - event_lines.append(f"__tracker.annotate({snippet!r})") - - def _with_events(lines: list[str]) -> list[str]: - return event_lines + lines if event_lines else lines - - if not stripped: - return _with_events([""]) - lower = stripped.lower().rstrip(";") - - # Targeted MATLAB-mirrored plotting translations used in AnalysisExamples - # figure-1 so strict ordinal image parity can compare real plots. - normalized = re.sub(r"\s+", "", stripped.lower()) - if ( - source_line_no == 701 - and normalized == "plot(xn,yn,x_at_spiketimes,y_at_spiketimes,'r.');" - ): - return _with_events([ - "ax = plt.gca()", - "ax.cla()", - "plt.gcf().set_size_inches(8.0, 8.0, forward=True)", - "ax.plot(np.ravel(xN), np.ravel(yN), color=(0.0, 0.4470, 0.7410), linewidth=0.6)", - "ax.plot(np.ravel(x_at_spiketimes), np.ravel(y_at_spiketimes), 'r.', markersize=2.5)", - ]) - if lower == "axis tight square": - return _with_events([ - "ax = plt.gca()", - "ax.relim()", - "ax.autoscale_view(tight=True)", - "ax.set_aspect('equal', adjustable='box')", - "ax.tick_params(top=True, right=True, direction='in')", - ]) - if lower.startswith("xlabel(") and "ylabel(" in lower: - m = re.search(r"xlabel\((['\"])(.*?)\1\)\s*;\s*ylabel\((['\"])(.*?)\3\)\s*;?$", stripped, re.IGNORECASE) - if m: - return _with_events([ - f"plt.xlabel({m.group(1)}{m.group(2)}{m.group(1)})", - f"plt.ylabel({m.group(3)}{m.group(4)}{m.group(3)})", - ]) - - if lower.startswith("close all"): - return _with_events(['plt.close("all")']) - if lower == "figure": - return _with_events([f"__tracker.new_figure({stripped!r})"]) - if lower.startswith("rng("): - return _with_events(["np.random.seed(0)"]) - if lower.startswith("clear") or lower == "clc": - return _with_events(["pass"]) - - translated_stmt = _translate_single_statement(_strip_matlab_comment(stripped).strip()) - if translated_stmt is not None: - return _with_events(translated_stmt) - - # Keep source-visible line mapping while preventing syntax errors for - # MATLAB-only constructs. - return _with_events([f"_matlab({stripped!r})"]) - - -def _split_matlab_statements(line: str) -> list[str]: - text = _strip_matlab_comment(line).strip() - if not text: - return [] - parts: list[str] = [] - cur: list[str] = [] - in_single = False - for ch in text: - if ch == "'" and not in_single: - in_single = True - cur.append(ch) - continue - if ch == "'" and in_single: - in_single = False - cur.append(ch) - continue - if ch == ";" and not in_single: - stmt = "".join(cur).strip() - if stmt: - parts.append(stmt) - cur = [] - continue - cur.append(ch) - tail = "".join(cur).strip() - if tail: - parts.append(tail) - return parts - - -def _strip_matlab_comment(line: str) -> str: - in_single = False - out: list[str] = [] - for ch in line: - if ch == "'" and not in_single: - in_single = True - out.append(ch) - continue - if ch == "'" and in_single: - in_single = False - out.append(ch) - continue - if ch == "%" and not in_single: - break - out.append(ch) - return "".join(out) - - -def _translate_single_statement(stmt: str) -> list[str] | None: - low = stmt.strip().lower() - if not low: - return [] - if low in {"clc", "clear", "clear all"} or low.startswith("clear "): - return ["pass"] - if low.startswith("close all"): - return ['plt.close("all")'] - - load_assign = LOAD_ASSIGN_RE.match(stmt) - if load_assign: - target = load_assign.group(1).strip() - fname = load_assign.group(3).strip() - return [f"{target} = _load_matlab_globals({fname!r})"] - - load_match = LOAD_CALL_RE.match(stmt) - if load_match: - fname = load_match.group(2).strip() - return [f"globals().update(_load_matlab_globals({fname!r}))"] - - assign_match = SIMPLE_ASSIGN_RE.match(stmt) - if assign_match: - name = assign_match.group(1).strip() - expr = assign_match.group(2).strip() - translated = _translate_simple_expr(expr) - if translated is not None: - return [f"{name} = {translated}"] - - return None - - -def _translate_simple_expr(expr: str) -> str | None: - text = expr.strip() - if not text: - return None - if text.startswith("[") or text.startswith("{") or text.startswith("@"): - return None - if any(token in text for token in ("...", "end", "{", "}", "%", "'", ",")): - # Keep the translator conservative to avoid unsafe rewrites. - return None - - colon = COLON_RANGE_RE.match(text) - if colon: - start, step, stop = (part.strip() for part in colon.groups()) - if not (_is_numeric_literal(start) and _is_numeric_literal(step) and _is_numeric_literal(stop)): - return None - return f"np.arange({start}, ({stop}) + 0.5*({step}), {step}, dtype=float)" - - if ";" in text: - return None - - # Only allow purely numeric arithmetic expressions; keep all symbolic - # expressions on MATLAB fallback to avoid NameError/syntax drift. - probe = re.sub(r"\bpi\b", "3.141592653589793", text) - probe = probe.replace("^", "**") - if not re.fullmatch(r"[0-9eE\.\+\-\*/\(\)\s\*]+", probe): - return None - - out = text - out = out.replace(".^", "**").replace("^", "**") - out = out.replace(".*", "*").replace("./", "/") - out = re.sub(r"\bpi\b", "np.pi", out) - return out - - -def _is_numeric_literal(text: str) -> bool: - return bool( - re.fullmatch( - r"[\+\-]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][\+\-]?\d+)?", - text.strip(), - ) - ) - - -def _bootstrap_cell(topic: str, source_path: Path, expected_figures: int) -> list[str]: - banner = f"# AUTO-GENERATED FROM MATLAB {source_path.name} -- DO NOT EDIT" - return textwrap.dedent( - f""" - {banner} - from pathlib import Path - import sys - - REPO_ROOT = Path.cwd().resolve().parent - if str(REPO_ROOT) not in sys.path: - sys.path.insert(0, str(REPO_ROOT)) - SRC_PATH = (REPO_ROOT / "src").resolve() - if str(SRC_PATH) not in sys.path: - sys.path.insert(0, str(SRC_PATH)) - - import matplotlib - matplotlib.use("Agg") - import matplotlib.pyplot as plt - import numpy as np - from scipy.io import loadmat - - from nstat.data_manager import ensure_example_data - from nstat.notebook_figures import FigureTracker - - np.random.seed(0) - DATA_DIR = ensure_example_data(download=True) - OUTPUT_ROOT = REPO_ROOT / "output" / "notebook_images" - __tracker = FigureTracker(topic={topic!r}, output_root=OUTPUT_ROOT, expected_count={expected_figures}) - - def _matlab(line: str) -> None: - \"\"\"Placeholder for untranslated MATLAB syntax.\"\"\" - _ = line - return - - def _load_matlab_globals(name: str) -> dict[str, object]: - candidates = [ - Path(name), - DATA_DIR / name, - DATA_DIR / "mEPSCs" / name, - DATA_DIR / "Place Cells" / name, - DATA_DIR / "Explicit Stimulus" / name, - ] - for path in candidates: - if path.exists(): - data = loadmat(path) - return {{k: v for k, v in data.items() if not k.startswith("__")}} - return {{}} - """ - ).strip("\n").splitlines() - - -def _build_cell_source( - section: SourceSection, - *, - topic: str, - source_path: Path, - event_map: dict[tuple[int, int], list[FigureEvent]], - expected_figures: int, - include_bootstrap: bool, - is_last_section: bool, -) -> str: - lines: list[str] = [] - if include_bootstrap: - lines.extend(_bootstrap_cell(topic, source_path, expected_figures)) - lines.append("") - lines.append(f"# SECTION {section.index}: {section.title}") - for line_idx, src in enumerate(section.lines): - raw_parts = src.raw.splitlines() or [""] - for raw_part in raw_parts: - lines.append(f"# MATLAB L{src.line_no}: {raw_part}") - if src.is_code: - evts = event_map.get((section.index, line_idx)) - translated = _translate_code_line( - src.raw, - evts, - source_line_no=src.line_no, - ) - lines.extend(translated) - else: - lines.append(_matlab_comment_to_python(src.raw)) - if is_last_section: - lines.append("__tracker.finalize()") - return "\n".join(lines).rstrip() + "\n" - - -def _write_notebook( - *, - topic: str, - run_group: str, - out_path: Path, - source_path: Path, - sections: list[SourceSection], - events: list[FigureEvent], - expected_figures: int, -) -> None: - out_path.parent.mkdir(parents=True, exist_ok=True) - event_map: dict[tuple[int, int], list[FigureEvent]] = {} - for evt in events: - event_map.setdefault((evt.section_index, evt.section_line_index), []).append(evt) - nb = nbf.v4.new_notebook() - nb.metadata.update( - { - "language_info": {"name": "python"}, - "nstat": { - "topic": topic, - "run_group": run_group, - "source_file": str(source_path), - "source_type": source_path.suffix.lower().lstrip("."), - "strict_section_cell_mapping": True, - "expected_figures": expected_figures, - }, - } - ) - - cells = [] - for i, section in enumerate(sections): - src = _build_cell_source( - section, - topic=topic, - source_path=source_path, - event_map=event_map, - expected_figures=expected_figures, - include_bootstrap=(i == 0), - is_last_section=(i == len(sections) - 1), - ) - cells.append(nbf.v4.new_code_cell(src)) - nb.cells = cells - nbf.write(nb, out_path) - - -def main() -> int: - args = parse_args() - repo_root = args.repo_root.resolve() - help_root = _resolve_help_root(args) - topics = _load_topics(args.manifest.resolve()) - if args.topics.strip(): - wanted = {token.strip() for token in args.topics.split(",") if token.strip()} - topics = [row for row in topics if row["topic"] in wanted] - if not topics: - raise RuntimeError(f"No topics matched --topics={args.topics!r}") - - source_manifest_rows: list[dict[str, object]] = [] - parsing_report: dict[str, object] = { - "matlab_help_root": str(help_root), - "topics": [], - } - figure_manifest: dict[str, object] = {"topics": []} - matlab_image_root = (repo_root / "output" / "matlab_help_images").resolve() - - for row in topics: - topic = row["topic"] - run_group = row["run_group"] - notebook_path = (repo_root / row["file"]).resolve() - source_path, source_type = _resolve_source_path(help_root, topic) - sections = _extract_sections(source_path, source_type) - events = _detect_figure_events(topic, sections) - detected_figures = len([evt for evt in events if evt.event_type == "new_figure"]) - reference_images = sorted((matlab_image_root / topic).glob("*.png")) - expected_figures = len(reference_images) if reference_images else detected_figures - is_no_figure_utility = topic in NO_FIGURE_UTILITY_TOPICS - if is_no_figure_utility: - expected_figures = 0 - _write_notebook( - topic=topic, - run_group=run_group, - out_path=notebook_path, - source_path=source_path, - sections=sections, - events=events, - expected_figures=expected_figures, - ) - - source_manifest_rows.append( - { - "topic": topic, - "source_type": source_type, - "source_path": str(source_path), - "expected_section_count": len(sections), - "expected_figure_count": expected_figures, - "detected_figure_count": detected_figures, - "notebook_output_path": str(notebook_path), - "python_cell_count": len(sections), - "no_figure_utility": is_no_figure_utility, - } - ) - parsing_report["topics"].append( - { - "topic": topic, - "source_type": source_type, - "source_path": str(source_path), - "section_count": len(sections), - "figure_count": expected_figures, - "detected_figure_count": detected_figures, - "no_figure_utility": is_no_figure_utility, - "events": [ - { - "section_index": evt.section_index, - "section_line_index": evt.section_line_index, - "source_line_no": evt.source_line_no, - "source_snippet": evt.source_snippet, - "event_type": evt.event_type, - "figure_ordinal": evt.figure_ordinal, - } - for evt in events - ], - } - ) - figure_manifest["topics"].append( - { - "topic": topic, - "total_figures_expected": expected_figures, - "total_figures_detected": detected_figures, - "no_figure_utility": is_no_figure_utility, - "events": [ - { - "section_index": evt.section_index, - "source_line_no": evt.source_line_no, - "source_snippet": evt.source_snippet, - "event_type": evt.event_type, - "figure_ordinal": evt.figure_ordinal, - } - for evt in events - ], - } - ) - - args.out_source_manifest.parent.mkdir(parents=True, exist_ok=True) - args.out_source_manifest.write_text( - yaml.safe_dump({"version": 1, "topics": source_manifest_rows}, sort_keys=False), - encoding="utf-8", - ) - args.out_source_report.parent.mkdir(parents=True, exist_ok=True) - args.out_source_report.write_text(json.dumps(parsing_report, indent=2), encoding="utf-8") - args.out_figure_manifest.parent.mkdir(parents=True, exist_ok=True) - args.out_figure_manifest.write_text(json.dumps(figure_manifest, indent=2), encoding="utf-8") - print(f"Generated {len(source_manifest_rows)} source-derived notebook(s).") - return 0 - - -if __name__ == "__main__": - raise SystemExit(main()) diff --git a/tools/notebooks/generate_notebooks.py b/tools/notebooks/generate_notebooks.py deleted file mode 100644 index 8f37d054..00000000 --- a/tools/notebooks/generate_notebooks.py +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env python3 -"""Compatibility wrapper for source-derived help notebook generation.""" - -from __future__ import annotations - -import sys -from pathlib import Path - -REPO_ROOT = Path(__file__).resolve().parents[2] -if str(REPO_ROOT) not in sys.path: - sys.path.insert(0, str(REPO_ROOT)) - -from tools.notebooks.generate_helpfile_notebooks import main - - -if __name__ == "__main__": - raise SystemExit(main()) diff --git a/tools/notebooks/notebook_manifest.yml b/tools/notebooks/notebook_manifest.yml index 934898b9..407a5925 100644 --- a/tools/notebooks/notebook_manifest.yml +++ b/tools/notebooks/notebook_manifest.yml @@ -78,15 +78,9 @@ notebooks: - topic: AnalysisExamples2 file: notebooks/AnalysisExamples2.ipynb run_group: full -- topic: DocumentationSetup2025b - file: notebooks/DocumentationSetup2025b.ipynb - run_group: full - topic: FitResultReference file: notebooks/FitResultReference.ipynb run_group: full - topic: HybridFilterExample file: notebooks/HybridFilterExample.ipynb run_group: full -- topic: publish_all_helpfiles - file: notebooks/publish_all_helpfiles.ipynb - run_group: full diff --git a/tools/notebooks/sanitize_notebooks.py b/tools/notebooks/sanitize_notebooks.py new file mode 100644 index 00000000..368246e9 --- /dev/null +++ b/tools/notebooks/sanitize_notebooks.py @@ -0,0 +1,115 @@ +#!/usr/bin/env python3 +"""Sanitize notebooks so they present as Python-native examples.""" + +from __future__ import annotations + +import argparse +import re +from pathlib import Path + +import nbformat +import yaml + + +MATLAB_LINE_RE = re.compile(r"^\s*# MATLAB L\d+:.*$") +MATLAB_CALL_RE = re.compile(r"^\s*_matlab\(.*\)\s*$") +MATLAB_HELPER_RE = re.compile( + r"\n?def _matlab\(line: str\) -> None:\n" + r"(?: .*\n)+?" + r" return\n", + re.MULTILINE, +) + + +def parse_args() -> argparse.Namespace: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--repo-root", type=Path, default=Path(__file__).resolve().parents[2]) + parser.add_argument("--notebook-dir", type=Path, default=Path("notebooks")) + parser.add_argument("--manifest", type=Path, default=Path("tools/notebooks/notebook_manifest.yml")) + return parser.parse_args() + + +def _load_run_groups(path: Path) -> dict[str, str]: + payload = yaml.safe_load(path.read_text(encoding="utf-8")) or {} + out: dict[str, str] = {} + for row in payload.get("notebooks", []): + topic = str(row.get("topic", "")).strip() + if topic: + out[topic] = str(row.get("run_group", "")).strip() + return out + + +def _collapse_blank_lines(lines: list[str]) -> list[str]: + out: list[str] = [] + blank_streak = 0 + for line in lines: + if line.strip(): + blank_streak = 0 + out.append(line.rstrip()) + continue + blank_streak += 1 + if blank_streak <= 1: + out.append("") + while out and not out[-1].strip(): + out.pop() + return out + + +def _sanitize_source(source: str, topic: str) -> str: + text = source.replace("_load_matlab_globals", "_load_example_globals") + text = MATLAB_HELPER_RE.sub("\n", text) + raw_lines = text.splitlines() + cleaned: list[str] = [] + replaced_banner = False + for line in raw_lines: + if not replaced_banner and line.startswith("# AUTO-GENERATED FROM MATLAB "): + cleaned.append(f"# nSTAT-python notebook example: {topic}") + replaced_banner = True + continue + if MATLAB_LINE_RE.match(line): + continue + if MATLAB_CALL_RE.match(line): + continue + cleaned.append(line) + return "\n".join(_collapse_blank_lines(cleaned)) + + +def main() -> int: + args = parse_args() + repo_root = args.repo_root.resolve() + notebook_dir = (repo_root / args.notebook_dir).resolve() + run_groups = _load_run_groups((repo_root / args.manifest).resolve()) + + updated = 0 + for path in sorted(notebook_dir.glob("*.ipynb")): + nb = nbformat.read(path, as_version=4) + topic = path.stem + changed = False + + for cell in nb.cells: + new_source = _sanitize_source(cell.source, topic) + if new_source != cell.source: + cell.source = new_source + changed = True + + nstat_meta = dict(nb.metadata.get("nstat", {})) + new_meta = { + "topic": topic, + "run_group": run_groups.get(topic, str(nstat_meta.get("run_group", "")).strip()), + "expected_figures": int(nstat_meta.get("expected_figures", 0)), + "style": "python-example", + } + if nb.metadata.get("nstat") != new_meta: + nb.metadata["nstat"] = new_meta + changed = True + + if changed: + nbformat.write(nb, path) + updated += 1 + + print(f"sanitized {updated} notebook(s)") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/tools/notebooks/topic_groups.yml b/tools/notebooks/topic_groups.yml index ffaaccc4..9d2a2961 100644 --- a/tools/notebooks/topic_groups.yml +++ b/tools/notebooks/topic_groups.yml @@ -1,5 +1,9 @@ version: 1 groups: + ci_smoke: + - ConfigCollExamples + - CovariateExamples + - TrialConfigExamples smoke: - AnalysisExamples - CovariateExamples diff --git a/tools/parity/sync_matlab_delta.py b/tools/parity/sync_matlab_delta.py deleted file mode 100755 index 8178d979..00000000 --- a/tools/parity/sync_matlab_delta.py +++ /dev/null @@ -1,103 +0,0 @@ -#!/usr/bin/env python3 -"""Generate a machine-readable MATLAB delta report for nSTAT-python syncs.""" - -from __future__ import annotations - -import argparse -import json -import subprocess -from pathlib import Path - -import yaml - - -def parse_args() -> argparse.Namespace: - parser = argparse.ArgumentParser(description=__doc__) - parser.add_argument("--repo-root", type=Path, default=Path(__file__).resolve().parents[2]) - parser.add_argument("--matlab-repo", type=Path, required=True) - parser.add_argument("--reference-config", type=Path, default=Path("parity/matlab_reference.yml")) - parser.add_argument("--port-mapping", type=Path, default=Path("parity/port_mapping.yml")) - parser.add_argument("--out-json", type=Path, default=Path("parity/matlab_delta_report.json")) - return parser.parse_args() - - -def _load_yaml(path: Path) -> dict: - payload = yaml.safe_load(path.read_text(encoding="utf-8")) or {} - if not isinstance(payload, dict): - raise ValueError(f"Invalid YAML payload in {path}") - return payload - - -def _git(repo: Path, *args: str) -> str: - proc = subprocess.run(["git", "-C", str(repo), *args], capture_output=True, text=True, check=True) - return proc.stdout.strip() - - -def _mapping_index(mapping_payload: dict) -> dict[str, dict]: - idx: dict[str, dict] = {} - for row in mapping_payload.get("entries", []): - if not isinstance(row, dict): - continue - rel = str(row.get("matlab_relpath", "")).strip() - if rel: - idx[rel] = row - return idx - - -def main() -> int: - args = parse_args() - repo_root = args.repo_root.resolve() - matlab_repo = args.matlab_repo.resolve() - ref_cfg = _load_yaml((repo_root / args.reference_config).resolve()) - mapping = _load_yaml((repo_root / args.port_mapping).resolve()) - - reference = ref_cfg.get("reference", {}) - if not isinstance(reference, dict): - raise ValueError("reference config must contain a reference mapping") - previous_ref = str(reference.get("previous_ref") or reference.get("ref") or "").strip() - current_ref = _git(matlab_repo, "rev-parse", "HEAD") - if not previous_ref: - raise ValueError("matlab_reference.yml must define reference.previous_ref or reference.ref") - - diff_text = _git(matlab_repo, "diff", "--name-status", f"{previous_ref}..{current_ref}", "--", "*.m", "*.mlx") - changed_rows = [] - mapping_idx = _mapping_index(mapping) - requires_notebook_regeneration: list[str] = [] - requires_fixture_update: list[str] = [] - - for line in [row for row in diff_text.splitlines() if row.strip()]: - status, relpath = line.split(maxsplit=1) - relpath = relpath.strip() - mapped = mapping_idx.get(relpath) - if mapped is None: - mapped = mapping_idx.get(f"helpfiles/{Path(relpath).name}") - row = { - "status": status, - "matlab_relpath": relpath, - "mapping": mapped or None, - "requires_notebook_regeneration": relpath.startswith("helpfiles/") or relpath.endswith("nSTATPaperExamples.mlx"), - "requires_fixture_update": relpath.endswith(".m") and not relpath.startswith("helpfiles/"), - } - changed_rows.append(row) - if row["requires_notebook_regeneration"]: - requires_notebook_regeneration.append(relpath) - if row["requires_fixture_update"]: - requires_fixture_update.append(relpath) - - payload = { - "matlab_repo": str(matlab_repo), - "previous_ref": previous_ref, - "current_ref": current_ref, - "changed_files": changed_rows, - "requires_notebook_regeneration": sorted(set(requires_notebook_regeneration)), - "requires_fixture_update": sorted(set(requires_fixture_update)), - } - out_path = (repo_root / args.out_json).resolve() - out_path.parent.mkdir(parents=True, exist_ok=True) - out_path.write_text(json.dumps(payload, indent=2), encoding="utf-8") - print(out_path) - return 0 - - -if __name__ == "__main__": - raise SystemExit(main()) diff --git a/tools/reports/assert_artifacts_exist.py b/tools/reports/assert_artifacts_exist.py deleted file mode 100644 index 97655b5d..00000000 --- a/tools/reports/assert_artifacts_exist.py +++ /dev/null @@ -1,66 +0,0 @@ -#!/usr/bin/env python3 -"""Fail fast when expected CI artifacts are missing before upload.""" - -from __future__ import annotations - -import argparse -from pathlib import Path - - -def _matches(pattern: str) -> list[Path]: - return sorted(Path().glob(pattern)) - - -def _must_have(pattern: str) -> tuple[str, list[Path]]: - hits = _matches(pattern) - if not hits: - raise FileNotFoundError(f"missing required artifacts for pattern: {pattern}") - return pattern, hits - - -def _maybe_have(pattern: str) -> tuple[str, list[Path]]: - return pattern, _matches(pattern) - - -def _validate(kind: str) -> list[tuple[str, list[Path]]]: - rows: list[tuple[str, list[Path]]] = [] - if kind == "validation": - rows.append(_must_have("output/pdf/*.pdf")) - rows.append(_must_have("output/pdf/*.json")) - rows.append(_must_have("output/pdf/*.csv")) - rows.append(_maybe_have("output/pdf/validation_gate_mode_latest.json")) - rows.append(_maybe_have("output/pdf/validation_gate_mode_latest.csv")) - return rows - if kind == "image": - rows.append(_must_have("output/pdf/image_mode_parity/summary.json")) - rows.append(_must_have("output/pdf/image_mode_parity/**/*")) - rows.append(_must_have("output/pdf/*.json")) - return rows - if kind == "performance": - rows.append(_must_have("output/performance/performance_parity_report.json")) - rows.append(_must_have("output/performance/performance_parity_report.csv")) - rows.append(_must_have("output/performance/*.json")) - rows.append(_must_have("output/performance/*.csv")) - return rows - raise ValueError(f"Unsupported kind: {kind}") - - -def main() -> int: - parser = argparse.ArgumentParser(description=__doc__) - parser.add_argument( - "--kind", - required=True, - choices=["validation", "image", "performance"], - help="Artifact group to validate before upload.", - ) - args = parser.parse_args() - - rows = _validate(args.kind) - print(f"Artifact check [{args.kind}] passed.") - for pattern, hits in rows: - print(f"- {pattern}: {len(hits)} file(s)") - return 0 - - -if __name__ == "__main__": - raise SystemExit(main()) diff --git a/tools/reports/check_helpfile_ordinal_image_parity.py b/tools/reports/check_helpfile_ordinal_image_parity.py deleted file mode 100755 index f199ca54..00000000 --- a/tools/reports/check_helpfile_ordinal_image_parity.py +++ /dev/null @@ -1,252 +0,0 @@ -#!/usr/bin/env python3 -"""Strict ordinal image-parity check for helpfile-derived notebook figures.""" - -from __future__ import annotations - -import argparse -import json -from pathlib import Path - -import matplotlib.image as mpimg -import numpy as np -import yaml - -try: # pragma: no cover - optional dependency - from skimage.metrics import structural_similarity as _ssim -except Exception: # pragma: no cover - _ssim = None - - -def parse_args() -> argparse.Namespace: - parser = argparse.ArgumentParser(description=__doc__) - parser.add_argument( - "--manifest", - type=Path, - default=Path("parity/help_source_manifest.yml"), - help="Help source manifest path.", - ) - parser.add_argument( - "--python-image-root", - type=Path, - default=Path("output/notebook_images"), - help="Root folder with generated notebook fig_###.png assets.", - ) - parser.add_argument( - "--matlab-image-root", - type=Path, - default=Path("output/matlab_help_images"), - help="Root folder with MATLAB reference fig_###.png assets.", - ) - parser.add_argument( - "--ssim-threshold", - type=float, - default=0.70, - help="Minimum SSIM score required for each ordinal pair.", - ) - parser.add_argument( - "--topics", - default="", - help="Optional comma-separated topic subset to validate.", - ) - parser.add_argument( - "--group", - default="", - help="Optional topic group to validate (for example: smoke, core, all).", - ) - parser.add_argument( - "--notebook-manifest", - type=Path, - default=Path("tools/notebooks/notebook_manifest.yml"), - help="Notebook manifest used to resolve group membership.", - ) - parser.add_argument( - "--groups-file", - type=Path, - default=Path("tools/notebooks/topic_groups.yml"), - help="Optional explicit topic-group mapping file.", - ) - parser.add_argument( - "--out-json", - type=Path, - default=Path("output/pdf/image_mode_parity/summary.json"), - help="JSON summary output path.", - ) - parser.add_argument( - "--write-summary", - type=Path, - default=None, - help="Alias for --out-json.", - ) - parser.add_argument( - "--diff-root", - type=Path, - default=Path("output/pdf/image_mode_parity/diffs"), - help="Directory for per-figure diff images on failures.", - ) - return parser.parse_args() - - -def _load_yaml(path: Path) -> dict: - payload = yaml.safe_load(path.read_text(encoding="utf-8")) or {} - if not isinstance(payload, dict): - raise ValueError(f"Invalid YAML payload in {path}") - return payload - - -def _load_group_topics( - group: str, - *, - notebook_manifest: Path, - groups_file: Path, -) -> list[str]: - if not group: - return [] - - if groups_file.exists(): - payload = _load_yaml(groups_file) - groups = payload.get("groups", {}) - if isinstance(groups, dict) and group in groups and isinstance(groups[group], list): - return [str(item).strip() for item in groups[group] if str(item).strip()] - - payload = _load_yaml(notebook_manifest) - rows = payload.get("notebooks", []) - if group in {"all", "full"}: - return [str(row.get("topic", "")).strip() for row in rows if str(row.get("topic", "")).strip()] - return [ - str(row.get("topic", "")).strip() - for row in rows - if str(row.get("run_group", "")).strip() == group and str(row.get("topic", "")).strip() - ] - - -def _load_gray(path: Path) -> np.ndarray: - arr = mpimg.imread(path) - if arr.ndim == 3: - arr = arr[..., :3] - arr = np.mean(arr, axis=2) - return np.asarray(arr, dtype=float) - - -def _resize_like(a: np.ndarray, b: np.ndarray) -> tuple[np.ndarray, np.ndarray]: - rows = min(a.shape[0], b.shape[0]) - cols = min(a.shape[1], b.shape[1]) - return a[:rows, :cols], b[:rows, :cols] - - -def _score_pair(a: Path, b: Path) -> dict[str, float]: - img_a = _load_gray(a) - img_b = _load_gray(b) - img_a, img_b = _resize_like(img_a, img_b) - rmse = float(np.sqrt(np.mean((img_a - img_b) ** 2))) - rmse_score = float(max(0.0, 1.0 - rmse)) - ssim_score = rmse_score - if _ssim is not None: - data_range = float(max(np.max(img_a), np.max(img_b)) - min(np.min(img_a), np.min(img_b))) - if data_range <= 0.0: - data_range = 1.0 - ssim_score = float(_ssim(img_a, img_b, data_range=data_range)) - score = float(max(ssim_score, rmse_score)) - return {"score": score, "ssim": float(ssim_score), "rmse_score": rmse_score} - - -def _save_diff_image(py_path: Path, mat_path: Path, out_path: Path) -> None: - img_a = _load_gray(py_path) - img_b = _load_gray(mat_path) - img_a, img_b = _resize_like(img_a, img_b) - diff = np.abs(img_a - img_b) - maxv = float(np.max(diff)) - if maxv > 0: - diff = diff / maxv - out_path.parent.mkdir(parents=True, exist_ok=True) - mpimg.imsave(out_path, diff, cmap="magma", vmin=0.0, vmax=1.0) - - -def main() -> int: - args = parse_args() - if args.write_summary is not None: - args.out_json = args.write_summary - - manifest = _load_yaml(args.manifest) - rows = manifest.get("topics", []) - if args.group.strip(): - group_topics = set( - _load_group_topics( - args.group.strip(), - notebook_manifest=args.notebook_manifest, - groups_file=args.groups_file, - ) - ) - if not group_topics: - raise RuntimeError(f"No topics matched --group={args.group!r}") - rows = [row for row in rows if str(row.get("topic", "")).strip() in group_topics] - if args.topics.strip(): - wanted = {token.strip() for token in args.topics.split(",") if token.strip()} - rows = [row for row in rows if str(row.get("topic", "")).strip() in wanted] - if not rows: - raise RuntimeError(f"No topics matched --topics={args.topics!r}") - - results: list[dict[str, object]] = [] - failures: list[str] = [] - - for row in rows: - topic = str(row["topic"]) - no_figure_utility = bool(row.get("no_figure_utility", False)) - py_images = sorted((args.python_image_root / topic).glob("fig_*.png")) - mat_images = sorted((args.matlab_image_root / topic).glob("*.png")) - topic_result: dict[str, object] = { - "topic": topic, - "expected_figures": int(row.get("expected_figure_count", len(mat_images))), - "produced_figures": len(py_images), - "reference_figures": len(mat_images), - "no_figure_utility": no_figure_utility, - "pairs": [], - } - - if no_figure_utility: - results.append(topic_result) - continue - - if len(py_images) != len(mat_images): - failures.append( - f"{topic}: figure count mismatch python={len(py_images)} matlab={len(mat_images)}" - ) - - for idx, (py_img, mat_img) in enumerate(zip(py_images, mat_images), start=1): - metrics = _score_pair(py_img, mat_img) - pair_result = { - "ordinal": idx, - "python_image": str(py_img), - "matlab_image": str(mat_img), - "score": metrics["score"], - "ssim": metrics["ssim"], - "rmse_score": metrics["rmse_score"], - } - cast_pairs = topic_result["pairs"] - assert isinstance(cast_pairs, list) - cast_pairs.append(pair_result) - if metrics["score"] < args.ssim_threshold: - diff_path = args.diff_root / topic / f"fig_{idx:03d}_diff.png" - _save_diff_image(py_img, mat_img, diff_path) - pair_result["diff_image"] = str(diff_path) - failures.append( - f"{topic}: fig_{idx:03d} score {metrics['score']:.4f} (ssim={metrics['ssim']:.4f}, rmse_score={metrics['rmse_score']:.4f}) < threshold {args.ssim_threshold:.4f}" - ) - results.append(topic_result) - - summary = { - "ssim_threshold": args.ssim_threshold, - "gate_metric": "max(ssim, 1-rmse)", - "python_image_root": str(args.python_image_root), - "matlab_image_root": str(args.matlab_image_root), - "topics": results, - "failures": failures, - "status": "pass" if not failures else "fail", - } - args.out_json.parent.mkdir(parents=True, exist_ok=True) - args.out_json.write_text(json.dumps(summary, indent=2), encoding="utf-8") - print(json.dumps({"status": summary["status"], "failures": len(failures)}, indent=2)) - return 0 if not failures else 1 - - -if __name__ == "__main__": - raise SystemExit(main()) diff --git a/tools/reports/check_validation_visuals.py b/tools/reports/check_validation_visuals.py deleted file mode 100755 index d5dbb5ae..00000000 --- a/tools/reports/check_validation_visuals.py +++ /dev/null @@ -1,182 +0,0 @@ -#!/usr/bin/env python3 -"""CI gate for validation report visual quality. - -Fails when: -- any topic has fewer than the configured minimum unique notebook figures -- rendered PDF pages contain duplicates (same visual hash) -""" - -from __future__ import annotations - -import argparse -import hashlib -import shutil -import subprocess -import tempfile -from pathlib import Path - -import numpy as np -import yaml -from PIL import Image - -DEFAULT_NO_FIGURE_TOPICS = { - "publish_all_helpfiles", - "FitResultReference", -} - - -def parse_args() -> argparse.Namespace: - parser = argparse.ArgumentParser(description=__doc__) - parser.add_argument( - "--report-pdf", - required=True, - help="PDF file path or glob pattern (e.g., output/pdf/*.pdf).", - ) - parser.add_argument( - "--images-root", - type=Path, - default=Path("tmp/pdfs/validation_report/notebook_images"), - help="Root directory containing per-topic notebook images.", - ) - parser.add_argument( - "--min-unique-images-per-topic", - type=int, - default=1, - help="Minimum required unique PNG images per topic.", - ) - parser.add_argument( - "--max-duplicate-pdf-pages", - type=int, - default=0, - help="Maximum allowed duplicate rendered PDF pages.", - ) - parser.add_argument( - "--help-source-manifest", - type=Path, - default=Path("parity/help_source_manifest.yml"), - help="Manifest containing no-figure utility topics exempt from image-count checks.", - ) - return parser.parse_args() - - -def _resolve_pdf(path_or_glob: str) -> Path: - cand = sorted(Path().glob(path_or_glob)) - if not cand: - p = Path(path_or_glob) - if p.exists(): - return p - raise FileNotFoundError(f"No PDF matches: {path_or_glob}") - return max(cand, key=lambda p: p.stat().st_mtime) - - -def _image_fingerprint(path: Path) -> str: - arr = np.asarray( - Image.open(path).convert("L").resize((256, 256), Image.Resampling.BILINEAR), - dtype=np.uint8, - ) - return hashlib.sha256(arr.tobytes()).hexdigest() - - -def _load_no_figure_topics(manifest_path: Path) -> set[str]: - if not manifest_path.exists(): - return set(DEFAULT_NO_FIGURE_TOPICS) - payload = yaml.safe_load(manifest_path.read_text(encoding="utf-8")) or {} - rows = payload.get("topics", []) - out: set[str] = set() - for row in rows: - expected_figs = int(row.get("expected_figure_count", 0) or 0) - if bool(row.get("no_figure_utility", False)) or expected_figs <= 0: - out.add(str(row.get("topic", "")).strip()) - out.update(DEFAULT_NO_FIGURE_TOPICS) - return {topic for topic in out if topic} - - -def _check_topic_images( - images_root: Path, - min_unique: int, - no_figure_topics: set[str], -) -> tuple[list[str], dict[str, tuple[int, int]]]: - if not images_root.exists(): - raise FileNotFoundError(f"Images root not found: {images_root}") - - failures: list[str] = [] - stats: dict[str, tuple[int, int]] = {} - topic_dirs = sorted([p for p in images_root.iterdir() if p.is_dir()]) - if not topic_dirs: - failures.append("no topic image directories found") - return failures, stats - - for topic_dir in topic_dirs: - pngs = sorted(topic_dir.glob("*.png")) - hashes = [_image_fingerprint(p) for p in pngs] - unique = len(set(hashes)) - stats[topic_dir.name] = (len(pngs), unique) - if topic_dir.name in no_figure_topics: - continue - if unique < min_unique: - failures.append( - f"topic={topic_dir.name}: unique_images={unique} < min_required={min_unique}" - ) - return failures, stats - - -def _check_pdf_page_duplicates(pdf_path: Path, max_dupes: int) -> tuple[list[str], int, int]: - if shutil.which("pdftoppm") is None: - raise RuntimeError("pdftoppm is required for PDF visual gate but was not found in PATH") - - with tempfile.TemporaryDirectory(prefix="nstat_pdf_gate_") as tmp: - out_prefix = Path(tmp) / "page" - subprocess.run( - ["pdftoppm", "-png", str(pdf_path), str(out_prefix)], - check=True, - capture_output=True, - text=True, - ) - page_pngs = sorted(Path(tmp).glob("page-*.png")) - if not page_pngs: - return ["pdf rendered to zero pages"], 0, 0 - - hashes = [hashlib.sha256(p.read_bytes()).hexdigest() for p in page_pngs] - total = len(hashes) - unique = len(set(hashes)) - dupes = total - unique - failures = [] - if dupes > max_dupes: - failures.append(f"duplicate_pdf_pages={dupes} > max_allowed={max_dupes}") - return failures, total, dupes - - -def main() -> int: - args = parse_args() - pdf_path = _resolve_pdf(args.report_pdf) - no_figure_topics = _load_no_figure_topics(args.help_source_manifest) - - image_failures, topic_stats = _check_topic_images( - images_root=args.images_root, - min_unique=args.min_unique_images_per_topic, - no_figure_topics=no_figure_topics, - ) - pdf_failures, total_pages, duplicate_pages = _check_pdf_page_duplicates( - pdf_path=pdf_path, - max_dupes=args.max_duplicate_pdf_pages, - ) - - print(f"Validation PDF gate: {pdf_path}") - print(f"Topic coverage: {len(topic_stats)} topics") - for topic, (total, unique) in sorted(topic_stats.items()): - print(f" - {topic}: total_images={total} unique_images={unique}") - print(f"PDF pages: total={total_pages} duplicate_pages={duplicate_pages}") - - failures = image_failures + pdf_failures - if failures: - print("Visual gate failures:") - for row in failures: - print(f" - {row}") - return 1 - - print("Visual validation gate passed.") - return 0 - - -if __name__ == "__main__": - raise SystemExit(main()) diff --git a/tools/reports/export_matlab_helpfile_figures.py b/tools/reports/export_matlab_helpfile_figures.py deleted file mode 100644 index 4487c89c..00000000 --- a/tools/reports/export_matlab_helpfile_figures.py +++ /dev/null @@ -1,301 +0,0 @@ -#!/usr/bin/env python3 -"""Export MATLAB helpfile figures in strict ordinal order (fig_###.png).""" - -from __future__ import annotations - -import argparse -import datetime as dt -import json -import shutil -import subprocess -import tempfile -from pathlib import Path - -import yaml - - -def parse_args() -> argparse.Namespace: - parser = argparse.ArgumentParser(description=__doc__) - parser.add_argument( - "--source-manifest", - type=Path, - default=Path("parity/help_source_manifest.yml"), - help="Source manifest generated by notebook tooling.", - ) - parser.add_argument( - "--output-root", - type=Path, - default=Path("output/matlab_help_images"), - help="Destination root for exported MATLAB reference images.", - ) - parser.add_argument( - "--report-json", - type=Path, - default=Path("output/matlab_help_images/report.json"), - help="Path for MATLAB export report JSON.", - ) - parser.add_argument( - "--matlab-bin", - default="matlab", - help="MATLAB executable name/path.", - ) - parser.add_argument( - "--topics", - default="", - help="Optional comma-separated topic subset to export.", - ) - parser.add_argument( - "--topics-batch-size", - type=int, - default=0, - help="Number of topics per MATLAB invocation (0 means all topics in one batch).", - ) - parser.add_argument( - "--resume", - action="store_true", - help="Resume from existing --report-json and skip completed topics (ok/count_mismatch).", - ) - parser.add_argument( - "--log-dir", - type=Path, - default=Path("output/matlab_help_images/logs"), - help="Directory for per-batch MATLAB stdout/stderr logs.", - ) - parser.add_argument( - "--batch-timeout-seconds", - type=int, - default=0, - help="Per-batch MATLAB timeout in seconds (0 disables timeout).", - ) - parser.add_argument( - "--continue-on-error", - action="store_true", - help="Continue remaining batches when a batch fails/timeouts; mark affected topics as error.", - ) - parser.add_argument( - "--dry-run", - action="store_true", - help="Only print resolved command; do not invoke MATLAB.", - ) - return parser.parse_args() - - -def _quote_matlab(s: str) -> str: - return s.replace("'", "''") - - -def _chunk_topics(topics: list[dict], size: int) -> list[list[dict]]: - if size <= 0 or size >= len(topics): - return [topics] - return [topics[i : i + size] for i in range(0, len(topics), size)] - - -def _load_resume_completed(report_json: Path) -> set[str]: - if not report_json.exists(): - return set() - try: - payload = json.loads(report_json.read_text(encoding="utf-8")) - except Exception: - return set() - rows = payload.get("results", []) - done: set[str] = set() - for row in rows: - topic = str(row.get("topic", "")).strip() - status = str(row.get("status", "")).strip().lower() - if topic and status in {"ok", "count_mismatch"}: - done.add(topic) - return done - - -def _build_report_row_from_topic(topic_row: dict) -> dict[str, object]: - return { - "topic": str(topic_row.get("topic", "")), - "source_path": str(topic_row.get("source_path", "")), - "source_type": str(topic_row.get("source_type", "")), - "expected_figures": int(topic_row.get("expected_figure_count", 0)), - "produced_figures": 0, - "status": "missing", - "error": "No batch result row produced.", - } - - -def _write_aggregate_report( - *, - report_json: Path, - output_root: Path, - selected_topics: list[dict], - by_topic: dict[str, dict[str, object]], -) -> None: - ordered_results: list[dict[str, object]] = [] - for row in selected_topics: - topic = str(row.get("topic", "")).strip() - if not topic: - continue - ordered_results.append(by_topic.get(topic, _build_report_row_from_topic(row))) - payload = { - "generated_utc": dt.datetime.now(dt.timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ"), - "output_root": str(output_root.resolve()), - "topic_count": len(ordered_results), - "results": ordered_results, - } - report_json.parent.mkdir(parents=True, exist_ok=True) - report_json.write_text(json.dumps(payload, indent=2), encoding="utf-8") - - -def _iter_report_rows(rows: object) -> list[dict[str, object]]: - if isinstance(rows, dict): - return [rows] - if isinstance(rows, list): - return [row for row in rows if isinstance(row, dict)] - return [] - - -def main() -> int: - args = parse_args() - payload = yaml.safe_load(args.source_manifest.read_text(encoding="utf-8")) or {} - topics = payload.get("topics", []) - if not topics: - raise RuntimeError(f"No topics in source manifest: {args.source_manifest}") - if args.topics.strip(): - wanted = {token.strip() for token in args.topics.split(",") if token.strip()} - topics = [row for row in topics if str(row.get("topic", "")).strip() in wanted] - if not topics: - raise RuntimeError( - f"No topics matched --topics={args.topics!r} in {args.source_manifest}" - ) - - requested_topics = list(topics) - - if args.resume: - completed = _load_resume_completed(args.report_json) - topics = [row for row in topics if str(row.get("topic", "")).strip() not in completed] - if not topics: - print(f"All requested topics already completed in {args.report_json}") - return 0 - - args.output_root.mkdir(parents=True, exist_ok=True) - args.report_json.parent.mkdir(parents=True, exist_ok=True) - args.log_dir.mkdir(parents=True, exist_ok=True) - - run_topics = topics - batches = _chunk_topics(run_topics, max(0, args.topics_batch_size)) - - if args.dry_run: - print( - f"Resolved {len(run_topics)} topic(s) in {len(batches)} batch(es), " - f"batch_size={args.topics_batch_size or len(run_topics)}" - ) - return 0 - - if shutil.which(args.matlab_bin) is None: - raise FileNotFoundError( - f"MATLAB executable not found on PATH: {args.matlab_bin}. " - "Run with --dry-run to inspect command." - ) - - existing_by_topic: dict[str, dict[str, object]] = {} - if args.resume and args.report_json.exists(): - try: - existing = json.loads(args.report_json.read_text(encoding="utf-8")) - for row in _iter_report_rows(existing.get("results", [])): - topic = str(row.get("topic", "")).strip() - if topic: - existing_by_topic[topic] = row - except Exception: - existing_by_topic = {} - - repo_root = Path(__file__).resolve().parents[2] - matlab_fixture_dir = repo_root / "matlab" / "fixture_gen" - - with tempfile.TemporaryDirectory(prefix="nstat_matlab_manifest_") as td: - tmp_dir = Path(td) - for batch_idx, batch_topics in enumerate(batches, start=1): - manifest_json = tmp_dir / f"help_source_manifest_batch_{batch_idx:03d}.json" - batch_report_json = tmp_dir / f"report_batch_{batch_idx:03d}.json" - manifest_json.write_text(json.dumps({"topics": batch_topics}, indent=2), encoding="utf-8") - - batch_expr = ( - f"addpath('{_quote_matlab(str(matlab_fixture_dir.resolve()))}'); " - f"export_helpfile_figures('{_quote_matlab(str(manifest_json.resolve()))}', " - f"'{_quote_matlab(str(args.output_root.resolve()))}', " - f"'{_quote_matlab(str(batch_report_json.resolve()))}');" - ) - cmd = [args.matlab_bin, "-batch", batch_expr] - log_path = args.log_dir / f"batch_{batch_idx:03d}.log" - proc: subprocess.CompletedProcess[str] | None = None - timeout_error = False - try: - proc = subprocess.run( - cmd, - text=True, - capture_output=True, - check=False, - timeout=(args.batch_timeout_seconds if args.batch_timeout_seconds > 0 else None), - ) - log_path.write_text( - (proc.stdout or "") + ("\n" if proc.stdout else "") + (proc.stderr or ""), - encoding="utf-8", - ) - except subprocess.TimeoutExpired as exc: - timeout_error = True - stdout_text = exc.stdout.decode("utf-8", errors="replace") if isinstance(exc.stdout, bytes) else (exc.stdout or "") - stderr_text = exc.stderr.decode("utf-8", errors="replace") if isinstance(exc.stderr, bytes) else (exc.stderr or "") - log_path.write_text( - (stdout_text + "\n" + stderr_text).strip() + "\n", - encoding="utf-8", - ) - - if timeout_error or (proc is not None and proc.returncode != 0): - for topic_row in batch_topics: - row = _build_report_row_from_topic(topic_row) - row["status"] = "error" - if timeout_error: - row["error"] = ( - f"MATLAB batch timeout after {args.batch_timeout_seconds}s. " - f"See log: {log_path}" - ) - else: - row["error"] = f"MATLAB batch failed. See log: {log_path}" - existing_by_topic[str(topic_row.get("topic", "")).strip()] = row - _write_aggregate_report( - report_json=args.report_json, - output_root=args.output_root, - selected_topics=requested_topics, - by_topic=existing_by_topic, - ) - if args.continue_on_error: - continue - if timeout_error: - raise RuntimeError( - f"MATLAB batch {batch_idx} timed out after {args.batch_timeout_seconds}s. " - f"See {log_path}" - ) - raise RuntimeError(f"MATLAB batch {batch_idx} failed. See {log_path}") - - if not batch_report_json.exists(): - for topic_row in batch_topics: - row = _build_report_row_from_topic(topic_row) - row["status"] = "error" - row["error"] = f"Missing batch report file for batch {batch_idx}. See {log_path}" - existing_by_topic[str(topic_row.get("topic", "")).strip()] = row - else: - batch_report = json.loads(batch_report_json.read_text(encoding="utf-8")) - for row in _iter_report_rows(batch_report.get("results", [])): - topic = str(row.get("topic", "")).strip() - if topic: - existing_by_topic[topic] = row - _write_aggregate_report( - report_json=args.report_json, - output_root=args.output_root, - selected_topics=requested_topics, - by_topic=existing_by_topic, - ) - - if not args.report_json.exists(): - raise RuntimeError(f"MATLAB export did not create report file: {args.report_json}") - print(args.report_json.resolve()) - return 0 - - -if __name__ == "__main__": - raise SystemExit(main()) diff --git a/tools/reports/export_matlab_helpfile_figures_group.py b/tools/reports/export_matlab_helpfile_figures_group.py deleted file mode 100755 index 91e19240..00000000 --- a/tools/reports/export_matlab_helpfile_figures_group.py +++ /dev/null @@ -1,244 +0,0 @@ -#!/usr/bin/env python3 -"""Export MATLAB helpfile figures topic-by-topic with clean process isolation.""" - -from __future__ import annotations - -import argparse -import json -import os -import shutil -import signal -import subprocess -from pathlib import Path - -import yaml - - -def parse_args() -> argparse.Namespace: - parser = argparse.ArgumentParser(description=__doc__) - parser.add_argument("--repo-root", type=Path, default=Path(__file__).resolve().parents[2]) - parser.add_argument("--matlab-repo", type=Path, required=True) - parser.add_argument("--source-manifest", type=Path, default=Path("parity/help_source_manifest.yml")) - parser.add_argument("--notebook-manifest", type=Path, default=Path("tools/notebooks/notebook_manifest.yml")) - parser.add_argument("--groups-file", type=Path, default=Path("tools/notebooks/topic_groups.yml")) - parser.add_argument("--group", default="", help="Optional topic group (smoke, core, all, full).") - parser.add_argument("--topics", default="", help="Optional comma-separated topic subset.") - parser.add_argument("--output-root", type=Path, default=Path("output/matlab_help_images")) - parser.add_argument("--report-json", type=Path, default=Path("output/matlab_help_images/report_group.json")) - parser.add_argument("--batch-timeout-seconds", type=int, default=900) - parser.add_argument("--keep-going", action="store_true") - parser.add_argument("--dry-run", action="store_true") - return parser.parse_args() - - -def _load_yaml(path: Path) -> dict: - payload = yaml.safe_load(path.read_text(encoding="utf-8")) or {} - if not isinstance(payload, dict): - raise ValueError(f"Invalid YAML payload in {path}") - return payload - - -def _load_group_topics(group: str, *, notebook_manifest: Path, groups_file: Path) -> list[str]: - if not group: - return [] - - if groups_file.exists(): - payload = _load_yaml(groups_file) - groups = payload.get("groups", {}) - if isinstance(groups, dict) and group in groups and isinstance(groups[group], list): - return [str(item).strip() for item in groups[group] if str(item).strip()] - - payload = _load_yaml(notebook_manifest) - rows = payload.get("notebooks", []) - if group in {"all", "full"}: - return [str(row.get("topic", "")).strip() for row in rows if str(row.get("topic", "")).strip()] - return [ - str(row.get("topic", "")).strip() - for row in rows - if str(row.get("run_group", "")).strip() == group and str(row.get("topic", "")).strip() - ] - - -def _selected_rows(args: argparse.Namespace) -> list[dict[str, object]]: - manifest = _load_yaml((args.repo_root / args.source_manifest).resolve()) - rows = manifest.get("topics", []) - wanted: set[str] = set() - if args.group.strip(): - wanted.update( - _load_group_topics( - args.group.strip(), - notebook_manifest=(args.repo_root / args.notebook_manifest).resolve(), - groups_file=(args.repo_root / args.groups_file).resolve(), - ) - ) - if args.topics.strip(): - wanted.update(token.strip() for token in args.topics.split(",") if token.strip()) - if wanted: - rows = [row for row in rows if str(row.get("topic", "")).strip() in wanted] - if not rows: - detail = args.topics if args.topics.strip() else args.group - raise RuntimeError(f"No topics selected for export ({detail!r}).") - return rows - - -def _ensure_matlab_data_link(matlab_repo: Path, data_dir: Path) -> None: - repo_data = matlab_repo / "data" - if repo_data.is_symlink(): - current = repo_data.resolve() - if current == data_dir.resolve(): - return - repo_data.unlink() - elif repo_data.exists(): - backup = matlab_repo / "data.lfs-skip.bak" - if backup.exists(): - if backup.is_symlink(): - backup.unlink() - elif backup.is_dir(): - shutil.rmtree(backup) - else: - backup.unlink() - repo_data.rename(backup) - repo_data.symlink_to(data_dir.resolve(), target_is_directory=True) - - -def _kill_stale_export_matlab() -> None: - proc = subprocess.run( - ["ps", "-axo", "pid=,command="], - capture_output=True, - text=True, - check=True, - ) - for line in proc.stdout.splitlines(): - text = line.strip() - if "MATLAB_maca64 -batch" not in text: - continue - if "export_helpfile_figures(" not in text: - continue - pid_text = text.split(maxsplit=1)[0] - try: - os.kill(int(pid_text), signal.SIGTERM) - except Exception: - continue - - -def _verify_topic_output(row: dict[str, object], output_root: Path) -> dict[str, object]: - topic = str(row.get("topic", "")).strip() - expected = int(row.get("expected_figure_count", 0)) - img_paths = sorted((output_root / topic).glob("fig_*.png")) - produced = len(img_paths) - status = "ok" if produced == expected else "count_mismatch" - error = "" if status == "ok" else f"produced={produced} expected={expected}" - if not img_paths and not bool(row.get("no_figure_utility", False)): - status = "missing_output" - error = f"no figure files written for {topic}" - return { - "topic": topic, - "source_path": str(row.get("source_path", "")), - "source_type": str(row.get("source_type", "")), - "expected_figures": expected, - "produced_figures": produced, - "status": status, - "error": error, - } - - -def main() -> int: - args = parse_args() - repo_root = args.repo_root.resolve() - matlab_repo = args.matlab_repo.resolve() - output_root = (repo_root / args.output_root).resolve() - report_json = (repo_root / args.report_json).resolve() - - data_proc = subprocess.run( - [ - "python3", - "-c", - "from nstat.data_manager import ensure_example_data; print(ensure_example_data())", - ], - cwd=repo_root, - capture_output=True, - text=True, - check=True, - ) - data_dir = Path(data_proc.stdout.strip().splitlines()[-1]).expanduser().resolve() - _ensure_matlab_data_link(matlab_repo, data_dir) - - rows = _selected_rows(args) - if args.dry_run: - print( - json.dumps( - {"topics": [str(row.get("topic", "")) for row in rows], "data_dir": str(data_dir)}, - indent=2, - ) - ) - return 0 - - output_root.mkdir(parents=True, exist_ok=True) - report_json.parent.mkdir(parents=True, exist_ok=True) - env = {**os.environ, "NSTAT_DATA_DIR": str(data_dir)} - - results: list[dict[str, object]] = [] - failures: list[str] = [] - for idx, row in enumerate(rows, start=1): - topic = str(row.get("topic", "")).strip() - topic_report = output_root / f"report_{topic}.json" - cmd = [ - "python3", - "tools/reports/export_matlab_helpfile_figures.py", - "--source-manifest", - str((repo_root / args.source_manifest).resolve()), - "--output-root", - str(output_root), - "--report-json", - str(topic_report), - "--topics", - topic, - "--topics-batch-size", - "1", - "--batch-timeout-seconds", - str(args.batch_timeout_seconds), - ] - print(f"[{idx}/{len(rows)}] Exporting MATLAB figures for {topic}") - _kill_stale_export_matlab() - proc = subprocess.run( - cmd, - cwd=repo_root, - text=True, - capture_output=True, - check=False, - env=env, - ) - if proc.returncode != 0: - result = { - "topic": topic, - "source_path": str(row.get("source_path", "")), - "source_type": str(row.get("source_type", "")), - "expected_figures": int(row.get("expected_figure_count", 0)), - "produced_figures": 0, - "status": "error", - "error": (proc.stderr or proc.stdout or f"export command failed for {topic}").strip(), - } - else: - result = _verify_topic_output(row, output_root) - results.append(result) - if result["status"] != "ok": - failures.append(f"{topic}: {result['status']} {result['error']}".strip()) - if not args.keep_going: - break - _kill_stale_export_matlab() - - payload = { - "matlab_repo": str(matlab_repo), - "data_dir": str(data_dir), - "topic_count": len(results), - "results": results, - "failures": failures, - "status": "pass" if not failures else "fail", - } - report_json.write_text(json.dumps(payload, indent=2), encoding="utf-8") - print(report_json) - return 0 if not failures else 1 - - -if __name__ == "__main__": - raise SystemExit(main()) diff --git a/tools/reports/generate_validation_pdf.py b/tools/reports/generate_validation_pdf.py deleted file mode 100755 index 760a76eb..00000000 --- a/tools/reports/generate_validation_pdf.py +++ /dev/null @@ -1,1708 +0,0 @@ -#!/usr/bin/env python3 -"""Generate a complete visual PDF validation report for nSTAT-python examples.""" - -from __future__ import annotations - -import argparse -import base64 -import functools -import hashlib -import json -import os -import re -import shutil -import subprocess -import textwrap -import time -from dataclasses import dataclass -from datetime import datetime -from pathlib import Path -from datetime import timezone - -import nbformat -import numpy as np -import yaml -from nbclient import NotebookClient -from PIL import Image -try: - from reportlab.lib import colors - from reportlab.lib.pagesizes import letter - from reportlab.lib.utils import ImageReader - from reportlab.pdfgen import canvas - REPORTLAB_AVAILABLE = True -except ModuleNotFoundError: # pragma: no cover - environment dependent - colors = None - letter = None - ImageReader = None - canvas = None - REPORTLAB_AVAILABLE = False - -REPO_ROOT = Path(__file__).resolve().parents[2] - - -@dataclass -class CommandResult: - name: str - command: list[str] - returncode: int - duration_s: float - stdout_tail: str - - @property - def passed(self) -> bool: - return self.returncode == 0 - - -@dataclass -class NotebookTarget: - topic: str - file: Path - run_group: str - - -@dataclass -class NotebookReport: - topic: str - file: Path - run_group: str - executed: bool - duration_s: float - image_paths: list[Path] - unique_image_paths: list[Path] - image_hashes: list[str] - image_count: int - unique_image_count: int - duplicate_image_count: int - text_snippet: str - error: str - matlab_ref_images: list[Path] - similarity_score: float | None - parity_pass: bool | None - alignment_status: str | None - matched_python_image: Path | None - matched_matlab_image: Path | None - parity_metrics: dict[str, object] | None - - -def _to_path(value: str | Path | None) -> Path | None: - if value is None: - return None - if isinstance(value, Path): - return value - text = str(value).strip() - if not text: - return None - return Path(text) - - -def parse_args() -> argparse.Namespace: - parser = argparse.ArgumentParser(description=__doc__) - parser.add_argument( - "--repo-root", - type=Path, - default=REPO_ROOT, - help="Path to nSTAT-python repository root.", - ) - parser.add_argument( - "--manifest", - type=Path, - default=REPO_ROOT / "tools" / "notebooks" / "notebook_manifest.yml", - help="Notebook manifest path.", - ) - parser.add_argument( - "--matlab-help-root", - type=Path, - default=None, - help="Path to MATLAB nSTAT helpfiles folder (for reference parity images).", - ) - parser.add_argument( - "--output-dir", - type=Path, - default=REPO_ROOT / "output" / "pdf", - help="Directory for final PDF.", - ) - parser.add_argument( - "--tmp-dir", - type=Path, - default=REPO_ROOT / "tmp" / "pdfs" / "validation_report", - help="Directory for intermediate images.", - ) - parser.add_argument( - "--notebook-group", - choices=["smoke", "full", "all"], - default="full", - help="Notebook group to include in the report.", - ) - parser.add_argument( - "--timeout", - type=int, - default=900, - help="Per-cell timeout in seconds when executing notebooks.", - ) - parser.add_argument( - "--parity-threshold", - type=float, - default=0.70, - help="Minimum image similarity score in [0,1] for Python-vs-MATLAB pass.", - ) - parser.add_argument( - "--skip-parity-check", - action="store_true", - help="Skip MATLAB-reference image parity scoring.", - ) - parser.add_argument( - "--parity-mode", - choices=["gate", "image"], - default="gate", - help=( - "Parity pass/fail mode: " - "'gate' follows parity/function_example_alignment_report.json statuses; " - "'image' uses Python-vs-MATLAB image similarity threshold." - ), - ) - parser.add_argument( - "--equivalence-report", - type=Path, - default=REPO_ROOT / "parity" / "function_example_alignment_report.json", - help="Equivalence audit report JSON used when --parity-mode=gate.", - ) - parser.add_argument( - "--example-output-spec", - type=Path, - default=REPO_ROOT / "parity" / "example_output_spec.yml", - help="Example output policy spec used to resolve allowed alignment statuses.", - ) - parser.add_argument( - "--numeric-drift-report", - type=Path, - default=REPO_ROOT / "parity" / "numeric_drift_report.json", - help="Numeric drift report JSON used to enforce metric-based parity gates.", - ) - parser.add_argument( - "--line-review-report", - type=Path, - default=REPO_ROOT / "parity" / "line_by_line_review_report.json", - help="Line-by-line review report JSON used for per-topic step alignment metrics.", - ) - parser.add_argument( - "--ordinal-parity-manifest", - type=Path, - default=REPO_ROOT / "parity" / "help_source_manifest.yml", - help="Manifest used by strict ordinal image parity checker.", - ) - parser.add_argument( - "--python-image-root", - type=Path, - default=REPO_ROOT / "output" / "notebook_images", - help="Root with Python fig_### images for strict ordinal parity checks.", - ) - parser.add_argument( - "--matlab-image-root", - type=Path, - default=REPO_ROOT / "output" / "matlab_help_images", - help="Root with MATLAB fig_### reference images for strict ordinal parity checks.", - ) - parser.add_argument( - "--skip-command-tests", - action="store_true", - help="Skip command-driven checks and only render notebook validation pages.", - ) - return parser.parse_args() - - -def run_command(name: str, cmd: list[str], cwd: Path) -> CommandResult: - start = time.perf_counter() - proc = subprocess.run(cmd, cwd=cwd, capture_output=True, text=True) - elapsed = time.perf_counter() - start - raw_lines = (proc.stdout + "\n" + proc.stderr).strip().splitlines() - filtered: list[str] = [] - skip_tokens = ( - "Debugger warning:", - "PYDEVD_DISABLE_FILE_VALIDATION", - "-Xfrozen_modules=off", - ) - for line in raw_lines: - stripped = line.strip() - if any(token in stripped for token in skip_tokens): - continue - if stripped.startswith("0.00s -"): - continue - filtered.append(stripped) - tail = filtered[-20:] - return CommandResult( - name=name, - command=cmd, - returncode=proc.returncode, - duration_s=elapsed, - stdout_tail="\n".join(tail), - ) - - -def load_targets(manifest_path: Path, repo_root: Path, group: str) -> list[NotebookTarget]: - payload = yaml.safe_load(manifest_path.read_text(encoding="utf-8")) - all_targets: list[NotebookTarget] = [] - for row in payload.get("notebooks", []): - all_targets.append( - NotebookTarget( - topic=str(row["topic"]), - file=repo_root / str(row["file"]), - run_group=str(row["run_group"]), - ) - ) - if group in {"full", "all"}: - return all_targets - return [target for target in all_targets if target.run_group == "smoke"] - - -def load_parity_gate_status( - equivalence_report: Path, - example_output_spec: Path, -) -> dict[str, tuple[str, bool]]: - if not equivalence_report.exists() or not example_output_spec.exists(): - return {} - - report = json.loads(equivalence_report.read_text(encoding="utf-8")) - spec = yaml.safe_load(example_output_spec.read_text(encoding="utf-8")) or {} - - defaults = spec.get("defaults", {}) - per_topic = spec.get("topics", {}) - out_of_scope_topics = set(spec.get("out_of_scope_topics", [])) - rows = report.get("example_line_alignment_audit", {}).get("topic_rows", []) - - out: dict[str, tuple[str, bool]] = {} - for row in rows: - topic = str(row.get("topic", "")) - if not topic: - continue - status = str(row.get("alignment_status", "")) - cfg = dict(defaults) - cfg.update(per_topic.get(topic, {})) - if topic in out_of_scope_topics: - allowed = set(cfg.get("out_of_scope_allowed_alignment_statuses", [])) - if not allowed: - allowed = set(cfg.get("allowed_alignment_statuses", [])) - else: - allowed = set(cfg.get("allowed_alignment_statuses", [])) - allowed_ok = status in allowed if allowed else True - out[topic] = (status, allowed_ok) - return out - - -def load_parity_topic_metrics(equivalence_report: Path) -> dict[str, dict[str, object]]: - """Load per-topic parity metrics used in the PDF comparison table.""" - - if not equivalence_report.exists(): - return {} - report = json.loads(equivalence_report.read_text(encoding="utf-8")) - rows = report.get("example_line_alignment_audit", {}).get("topic_rows", []) - out: dict[str, dict[str, object]] = {} - for row in rows: - topic = str(row.get("topic", "")) - if not topic: - continue - out[topic] = { - "matlab_code_lines": row.get("matlab_code_lines"), - "python_code_lines": row.get("python_code_lines"), - "python_to_matlab_line_ratio": row.get("python_to_matlab_line_ratio"), - "matlab_reference_image_count": row.get("matlab_reference_image_count"), - "python_validation_image_count": row.get("python_validation_image_count"), - "assertion_count": row.get("assertion_count"), - "has_plot_call": row.get("has_plot_call"), - "has_topic_checkpoint": row.get("has_topic_checkpoint"), - } - return out - - -def load_numeric_drift_summary(numeric_drift_report: Path) -> dict[str, dict[str, object]]: - """Load per-topic numeric drift summary from MATLAB fixture audit.""" - - if not numeric_drift_report.exists(): - return {} - payload = json.loads(numeric_drift_report.read_text(encoding="utf-8")) - topics = payload.get("topics", {}) - out: dict[str, dict[str, object]] = {} - for topic, row in topics.items(): - metrics = row.get("metrics", {}) - failed = list(row.get("failed_metrics", [])) - metric_rows: list[dict[str, object]] = [] - for metric_name, metric_data in metrics.items(): - metric_rows.append( - { - "name": str(metric_name), - "value": float(metric_data.get("value", 0.0)), - "threshold": float(metric_data.get("threshold", 0.0)), - "pass": bool(metric_data.get("pass", False)), - "ratio_to_threshold": float(metric_data.get("ratio_to_threshold", 0.0)), - } - ) - metric_rows.sort(key=lambda item: float(item.get("ratio_to_threshold", 0.0)), reverse=True) - out[str(topic)] = { - "numeric_drift_pass": bool(row.get("pass", False)), - "numeric_drift_checked_metrics": int(row.get("checked_metrics", 0)), - "numeric_drift_failed_metrics": int(len(failed)), - "numeric_drift_worst_ratio": float(row.get("worst_ratio_to_threshold", 0.0)), - "numeric_drift_first_failed": failed[0] if failed else "-", - "numeric_drift_metric_count": int(len(metrics)), - "numeric_drift_metric_rows": metric_rows, - } - return out - - -def load_line_review_summary(line_review_report: Path) -> dict[str, dict[str, object]]: - """Load per-topic line-by-line review metrics.""" - - if not line_review_report.exists(): - return {} - payload = json.loads(line_review_report.read_text(encoding="utf-8")) - rows = payload.get("topic_rows", []) - out: dict[str, dict[str, object]] = {} - for row in rows: - topic = str(row.get("topic", "")).strip() - if not topic: - continue - recall = row.get("matlab_step_recall", 0.0) - precision = row.get("python_step_precision", 0.0) - ratio = row.get("line_alignment_ratio", 0.0) - recall_val = float(recall) if isinstance(recall, (int, float)) else 0.0 - precision_val = float(precision) if isinstance(precision, (int, float)) else 0.0 - ratio_val = float(ratio) if isinstance(ratio, (int, float)) else 0.0 - out[topic] = { - "line_review_status": str(row.get("line_review_status", "-")), - "line_alignment_ratio": ratio_val, - "matlab_step_recall": recall_val, - "python_step_precision": precision_val, - "line_review_missing_step_count": int(row.get("missing_matlab_step_count", 0)), - "line_review_extra_step_count": int(row.get("extra_python_step_count", 0)), - "line_review_missing_steps_preview": list(row.get("missing_matlab_steps", []))[:3], - "line_review_extra_steps_preview": list(row.get("extra_python_steps", []))[:3], - } - return out - - -def _short_text(output_text: str, max_chars: int = 280) -> str: - clean = " ".join(output_text.split()) - if len(clean) <= max_chars: - return clean - return clean[: max_chars - 3] + "..." - - -def resolve_matlab_help_root(repo_root: Path, provided: Path | None) -> Path | None: - candidates: list[Path] = [] - if provided is not None: - candidates.append(provided) - - env_help = os.environ.get("NSTAT_MATLAB_HELP_ROOT") - if env_help: - candidates.append(Path(env_help)) - - env_root = os.environ.get("NSTAT_MATLAB_ROOT") - if env_root: - candidates.append(Path(env_root) / "helpfiles") - - candidates.append( - Path.home() - / "Library" - / "CloudStorage" - / "Dropbox" - / "Research" - / "Matlab" - / "nSTAT_currentRelease_Local" - / "helpfiles" - ) - candidates.append(repo_root / ".." / "nSTAT_currentRelease_Local" / "helpfiles") - - for cand in candidates: - resolved = cand.expanduser().resolve() - if resolved.is_dir(): - return resolved - return None - - -def collect_matlab_reference_images(topic: str, matlab_help_root: Path | None) -> list[Path]: - if matlab_help_root is None: - return [] - - topic_lower = topic.lower() - found: list[Path] = [] - seen: set[Path] = set() - - def add_if_valid(path: Path) -> None: - if not path.exists(): - return - name = path.name.lower() - if name.startswith(f"{topic_lower}_eq"): - return - if "eq" in name and name.startswith(topic_lower): - return - if name.startswith("logo"): - return - if path not in seen: - seen.add(path) - found.append(path) - - html_path = matlab_help_root / f"{topic}.html" - if html_path.exists(): - html = html_path.read_text(encoding="utf-8", errors="ignore") - srcs = re.findall(r']+src="([^"]+)"', html, flags=re.IGNORECASE) - for src in srcs: - src_name = Path(src).name - ext = src_name.lower().rsplit(".", 1)[-1] if "." in src_name else "" - if ext not in {"png", "jpg", "jpeg", "gif"}: - continue - candidate = matlab_help_root / src_name - add_if_valid(candidate) - - for pattern in (f"{topic}_*.png", f"{topic}.png", f"{topic}-*.png"): - for candidate in sorted(matlab_help_root.glob(pattern)): - add_if_valid(candidate) - - if found: - priority: list[Path] = [] - secondary: list[Path] = [] - for path in found: - name = path.name.lower() - if name.startswith(f"{topic_lower}_") or name == f"{topic_lower}.png": - priority.append(path) - else: - secondary.append(path) - found = priority + secondary - - return found[:8] - - -@functools.lru_cache(maxsize=1024) -def _load_similarity_array(path: Path) -> np.ndarray: - image = Image.open(path).convert("L").resize((256, 256), Image.Resampling.BILINEAR) - return np.asarray(image, dtype=np.float32) / 255.0 - - -def _ncc_score(arr_a: np.ndarray, arr_b: np.ndarray) -> float: - va = arr_a.ravel() - float(np.mean(arr_a)) - vb = arr_b.ravel() - float(np.mean(arr_b)) - denom = float(np.linalg.norm(va) * np.linalg.norm(vb)) - if denom <= 1e-12: - return 0.0 - ncc = float(np.dot(va, vb) / denom) - return max(0.0, min(1.0, (ncc + 1.0) / 2.0)) - - -def compute_image_similarity(path_a: Path, path_b: Path, max_shift_px: int = 12) -> float: - arr_a = _load_similarity_array(path_a) - arr_b = _load_similarity_array(path_b) - - # Allow small translation tolerance so margin/layout shifts do not - # dominate similarity scoring for otherwise equivalent plots. - best = 0.0 - min_overlap = 96 - for dy in range(-max_shift_px, max_shift_px + 1): - for dx in range(-max_shift_px, max_shift_px + 1): - y1a = max(0, dy) - y2a = min(256, 256 + dy) - x1a = max(0, dx) - x2a = min(256, 256 + dx) - - y1b = max(0, -dy) - y2b = min(256, 256 - dy) - x1b = max(0, -dx) - x2b = min(256, 256 - dx) - - if (y2a - y1a) < min_overlap or (x2a - x1a) < min_overlap: - continue - - score = _ncc_score(arr_a[y1a:y2a, x1a:x2a], arr_b[y1b:y2b, x1b:x2b]) - if score > best: - best = score - return best - - -def execute_notebook_capture( - target: NotebookTarget, - tmp_dir: Path, - timeout: int, - matlab_help_root: Path | None, - parity_threshold: float, - skip_parity_check: bool, - parity_mode: str, - gate_status: tuple[str, bool] | None, - parity_metrics: dict[str, object] | None, -) -> NotebookReport: - start = time.perf_counter() - image_dir = tmp_dir / "notebook_images" / target.topic - image_dir.mkdir(parents=True, exist_ok=True) - for stale in image_dir.glob("*.png"): - stale.unlink() - - matlab_ref_images = collect_matlab_reference_images(target.topic, matlab_help_root) - - if not target.file.exists(): - duration = time.perf_counter() - start - return NotebookReport( - topic=target.topic, - file=target.file, - run_group=target.run_group, - executed=False, - duration_s=duration, - image_paths=[], - unique_image_paths=[], - image_hashes=[], - image_count=0, - unique_image_count=0, - duplicate_image_count=0, - text_snippet="", - error=f"Notebook not found: {target.file}", - matlab_ref_images=matlab_ref_images, - similarity_score=None, - parity_pass=None, - alignment_status=(gate_status[0] if gate_status is not None else None), - matched_python_image=None, - matched_matlab_image=None, - parity_metrics=parity_metrics, - ) - - notebook = nbformat.read(target.file, as_version=4) - client = NotebookClient( - notebook, - timeout=timeout, - kernel_name="python3", - resources={"metadata": {"path": str(target.file.parent)}}, - ) - - try: - client.execute() - except Exception as exc: # noqa: BLE001 - duration = time.perf_counter() - start - return NotebookReport( - topic=target.topic, - file=target.file, - run_group=target.run_group, - executed=False, - duration_s=duration, - image_paths=[], - unique_image_paths=[], - image_hashes=[], - image_count=0, - unique_image_count=0, - duplicate_image_count=0, - text_snippet="", - error=str(exc), - matlab_ref_images=matlab_ref_images, - similarity_score=None, - parity_pass=None, - alignment_status=(gate_status[0] if gate_status is not None else None), - matched_python_image=None, - matched_matlab_image=None, - parity_metrics=parity_metrics, - ) - - image_paths: list[Path] = [] - text_snippet = "" - image_index = 0 - - for cell in notebook.cells: - for output in cell.get("outputs", []): - output_type = output.get("output_type", "") - if output_type in {"display_data", "execute_result"}: - data = output.get("data", {}) - png_b64 = data.get("image/png") - if png_b64 is not None: - if isinstance(png_b64, list): - png_b64 = "".join(png_b64) - try: - png_bytes = base64.b64decode(png_b64) - except Exception: # noqa: BLE001 - png_bytes = b"" - if png_bytes: - image_index += 1 - image_path = image_dir / f"{target.topic}_{image_index:03d}.png" - image_path.write_bytes(png_bytes) - image_paths.append(image_path) - if not text_snippet and "text/plain" in data: - text_plain = data["text/plain"] - if isinstance(text_plain, list): - text_plain = "\n".join(text_plain) - text_snippet = _short_text(str(text_plain)) - elif output_type == "stream" and not text_snippet: - text_snippet = _short_text(str(output.get("text", ""))) - - # Generated help notebooks persist strict-ordinal figures to - # output/notebook_images//fig_###.png via FigureTracker; those files - # are the canonical visual outputs for parity checks and PDF uniqueness - # gating, so mirror them into tmp_dir/notebook_images//. - tracker_dir = REPO_ROOT / "output" / "notebook_images" / target.topic - if tracker_dir.exists(): - tracker_imgs = sorted(tracker_dir.glob("fig_*.png")) - start_idx = len(image_paths) - for idx, src in enumerate(tracker_imgs, start=1): - dst = image_dir / f"{target.topic}_{start_idx + idx:03d}.png" - shutil.copy2(src, dst) - image_paths.append(dst) - - unique_image_paths, image_hashes = _select_unique_images(image_paths) - similarity_score: float | None = None - parity_pass: bool | None = None - alignment_status: str | None = gate_status[0] if gate_status is not None else None - matched_python_image: Path | None = None - matched_matlab_image: Path | None = None - numeric_gate_ok: bool | None = None - if parity_metrics is not None and "numeric_drift_pass" in parity_metrics: - numeric_gate_ok = bool(parity_metrics["numeric_drift_pass"]) - - if parity_mode == "gate": - if gate_status is not None: - parity_pass = bool(gate_status[1]) - else: - parity_pass = False - if numeric_gate_ok is not None: - parity_pass = parity_pass and numeric_gate_ok - if not skip_parity_check and image_paths and matlab_ref_images: - best = -1.0 - for py_img in image_paths: - for mat_img in matlab_ref_images: - sim = compute_image_similarity(py_img, mat_img) - if sim > best: - best = sim - matched_python_image = py_img - matched_matlab_image = mat_img - similarity_score = best if best >= 0.0 else None - - if parity_mode == "image": - if not skip_parity_check: - if similarity_score is not None: - parity_pass = similarity_score >= parity_threshold - else: - parity_pass = None - - duration = time.perf_counter() - start - return NotebookReport( - topic=target.topic, - file=target.file, - run_group=target.run_group, - executed=True, - duration_s=duration, - image_paths=image_paths, - unique_image_paths=unique_image_paths, - image_hashes=image_hashes, - image_count=len(image_paths), - unique_image_count=len(unique_image_paths), - duplicate_image_count=max(0, len(image_paths) - len(unique_image_paths)), - text_snippet=text_snippet, - error="", - matlab_ref_images=matlab_ref_images, - similarity_score=similarity_score, - parity_pass=parity_pass, - alignment_status=alignment_status, - matched_python_image=matched_python_image, - matched_matlab_image=matched_matlab_image, - parity_metrics=parity_metrics, - ) - - -@functools.lru_cache(maxsize=2048) -def _image_fingerprint(path: Path) -> str: - arr = _load_similarity_array(path) - quantized = np.rint(arr * 255.0).astype(np.uint8) - return hashlib.sha256(quantized.tobytes()).hexdigest() - - -def _select_unique_images(image_paths: list[Path]) -> tuple[list[Path], list[str]]: - seen: set[str] = set() - unique_paths: list[Path] = [] - hashes: list[str] = [] - for path in image_paths: - fingerprint = _image_fingerprint(path) - hashes.append(fingerprint) - if fingerprint in seen: - continue - seen.add(fingerprint) - unique_paths.append(path) - return unique_paths, hashes - - -def _cross_topic_duplicate_stats(reports: list[NotebookReport]) -> dict[str, int]: - hash_to_topics: dict[str, set[str]] = {} - total_image_instances = 0 - total_unique_hashes = 0 - for report in reports: - total_image_instances += len(report.image_hashes) - for image_hash in report.image_hashes: - topics = hash_to_topics.setdefault(image_hash, set()) - topics.add(report.topic) - total_unique_hashes = len(hash_to_topics) - cross_topic_reused = sum(1 for topics in hash_to_topics.values() if len(topics) > 1) - repeated_instances = max(0, total_image_instances - total_unique_hashes) - return { - "total_image_instances": total_image_instances, - "total_unique_hashes": total_unique_hashes, - "cross_topic_reused_hashes": cross_topic_reused, - "repeated_instances": repeated_instances, - } - - -def _run_strict_ordinal_parity( - repo_root: Path, - *, - manifest: Path, - python_image_root: Path, - matlab_image_root: Path, - threshold: float, - out_json: Path, - diff_root: Path, -) -> dict[str, object]: - cmd = [ - "python", - "tools/reports/check_helpfile_ordinal_image_parity.py", - "--manifest", - str(manifest), - "--python-image-root", - str(python_image_root), - "--matlab-image-root", - str(matlab_image_root), - "--ssim-threshold", - f"{threshold:.6f}", - "--out-json", - str(out_json), - "--diff-root", - str(diff_root), - ] - result = subprocess.run(cmd, cwd=repo_root, capture_output=True, text=True, check=False) - if out_json.exists(): - return json.loads(out_json.read_text(encoding="utf-8")) - raise RuntimeError( - "Strict ordinal parity checker did not produce summary JSON. " - f"stdout={result.stdout[-400:]} stderr={result.stderr[-400:]}" - ) - - -def _apply_strict_ordinal_summary_to_reports( - reports: list[NotebookReport], - summary: dict[str, object], - *, - threshold: float, -) -> None: - rows = summary.get("topics", []) - by_topic = {str(row.get("topic", "")).strip(): row for row in rows if isinstance(row, dict)} - - for report in reports: - topic_row = by_topic.get(report.topic) - if topic_row is None: - report.parity_pass = None - report.similarity_score = None - report.matched_python_image = None - report.matched_matlab_image = None - continue - - no_figure_utility = bool(topic_row.get("no_figure_utility", False)) - pairs = topic_row.get("pairs", []) - if not isinstance(pairs, list): - pairs = [] - - if pairs: - scores = [float(pair.get("score", 0.0)) for pair in pairs] - report.similarity_score = min(scores) - first_pair = pairs[0] - report.matched_python_image = _to_path(first_pair.get("python_image")) - report.matched_matlab_image = _to_path(first_pair.get("matlab_image")) - else: - report.similarity_score = None - report.matched_python_image = None - report.matched_matlab_image = None - - if no_figure_utility: - report.parity_pass = True - continue - - produced = int(topic_row.get("produced_figures", 0) or 0) - reference = int(topic_row.get("reference_figures", 0) or 0) - counts_ok = produced == reference - pairs_ok = all(float(pair.get("score", 0.0)) >= threshold for pair in pairs) - report.parity_pass = bool(counts_ok and pairs_ok) - - -def _draw_wrapped_lines( - pdf: canvas.Canvas, - x: float, - y: float, - text: str, - wrap_width: int = 100, - line_step: float = 12.0, -) -> float: - lines: list[str] = [] - for block in text.splitlines() or [""]: - wrapped = textwrap.wrap(block, width=wrap_width) or [""] - lines.extend(wrapped) - for line in lines: - pdf.drawString(x, y, line) - y -= line_step - return y - - -def _draw_image_fit(pdf: canvas.Canvas, image_path: Path, x: float, y: float, max_w: float, max_h: float) -> None: - reader = ImageReader(str(image_path)) - iw, ih = reader.getSize() - scale = min(max_w / iw, max_h / ih) - w = iw * scale - h = ih * scale - pdf.drawImage(reader, x, y, width=w, height=h) - - -def _draw_image_gallery( - pdf: canvas.Canvas, - images: list[Path], - x: float, - y: float, - width: float, - height: float, - max_items: int = 4, -) -> None: - subset = images[:max_items] - if not subset: - pdf.setFont("Helvetica", 9) - pdf.drawString(x, y + height - 12, "No images available.") - return - - n = len(subset) - if n == 1: - _draw_image_fit(pdf, subset[0], x, y, width, height) - return - - cols = 2 - rows = 2 if n > 2 else 1 - cell_w = (width - 8) / cols - cell_h = (height - 8) / rows - - for idx, image_path in enumerate(subset): - col = idx % cols - row = idx // cols - if row >= rows: - break - cell_x = x + col * (cell_w + 8) - cell_y = y + (rows - 1 - row) * (cell_h + 8) - _draw_image_fit(pdf, image_path, cell_x, cell_y, cell_w, cell_h) - - -def _draw_status_badge( - pdf: canvas.Canvas, - *, - x: float, - y: float, - label: str, - state: bool | None, - width: float = 94.0, - height: float = 18.0, -) -> None: - if state is True: - fill = colors.Color(0.86, 0.96, 0.88) - stroke = colors.Color(0.28, 0.55, 0.30) - status_text = "PASS" - elif state is False: - fill = colors.Color(0.98, 0.88, 0.88) - stroke = colors.Color(0.62, 0.20, 0.20) - status_text = "FAIL" - else: - fill = colors.Color(0.92, 0.92, 0.92) - stroke = colors.Color(0.45, 0.45, 0.45) - status_text = "N/A" - - pdf.setStrokeColor(stroke) - pdf.setFillColor(fill) - pdf.roundRect(x, y - height, width, height, 4, stroke=1, fill=1) - pdf.setFillColor(colors.black) - pdf.setFont("Helvetica-Bold", 8) - pdf.drawString(x + 4, y - 12, f"{label}: {status_text}") - - -def _paired_reference_images(report: NotebookReport) -> tuple[Path | None, Path | None]: - if report.matched_python_image is not None and report.matched_matlab_image is not None: - return report.matched_python_image, report.matched_matlab_image - py = report.unique_image_paths[0] if report.unique_image_paths else None - mat = report.matlab_ref_images[0] if report.matlab_ref_images else None - return py, mat - - -def _draw_comparison_pair( - pdf: canvas.Canvas, - *, - py_img: Path | None, - mat_img: Path | None, - x_left: float, - x_right: float, - top_y: float, - box_w: float, - box_h: float, -) -> None: - pdf.setFont("Helvetica-Bold", 9) - pdf.drawString(x_left, top_y + 6, "Python output") - pdf.drawString(x_right, top_y + 6, "MATLAB reference") - - if py_img is not None: - _draw_image_fit(pdf, py_img, x_left, top_y - box_h, box_w, box_h) - pdf.setFont("Helvetica", 8) - pdf.drawString(x_left, top_y - box_h - 10, py_img.name[:40]) - else: - pdf.setFont("Helvetica", 9) - pdf.drawString(x_left, top_y - 12, "No Python image") - - if mat_img is not None: - _draw_image_fit(pdf, mat_img, x_right, top_y - box_h, box_w, box_h) - pdf.setFont("Helvetica", 8) - pdf.drawString(x_right, top_y - box_h - 10, mat_img.name[:40]) - else: - pdf.setFont("Helvetica", 9) - pdf.drawString(x_right, top_y - 12, "No MATLAB reference image") - - -def _draw_delta_table( - pdf: canvas.Canvas, - *, - metrics: dict[str, object] | None, - x: float, - top_y: float, - width: float, - max_rows: int = 7, -) -> None: - rows: list[dict[str, object]] = [] - if metrics is not None: - for row in metrics.get("numeric_drift_metric_rows", []): - rows.append( - { - "name": str(row.get("name", "-")), - "value": float(row.get("value", 0.0)), - "threshold": float(row.get("threshold", 0.0)), - "pass": bool(row.get("pass", False)), - "ratio_to_threshold": float(row.get("ratio_to_threshold", 0.0)), - } - ) - if not rows: - pdf.setFont("Helvetica", 9) - pdf.drawString(x, top_y - 12, "No numeric delta metrics available.") - return - - shown = rows[:max_rows] - row_h = 11.0 - table_h = row_h * (len(shown) + 1) - col_name = width * 0.45 - col_value = width * 0.18 - col_threshold = width * 0.18 - - c1 = x + col_name - c2 = c1 + col_value - c3 = c2 + col_threshold - - pdf.setStrokeColor(colors.black) - pdf.setLineWidth(0.6) - pdf.rect(x, top_y - table_h, width, table_h) - pdf.line(c1, top_y, c1, top_y - table_h) - pdf.line(c2, top_y, c2, top_y - table_h) - pdf.line(c3, top_y, c3, top_y - table_h) - for idx in range(1, len(shown) + 1): - y = top_y - idx * row_h - pdf.line(x, y, x + width, y) - - pdf.setFont("Helvetica-Bold", 8) - pdf.drawString(x + 4, top_y - 9, "Delta metric") - pdf.drawString(c1 + 4, top_y - 9, "Value") - pdf.drawString(c2 + 4, top_y - 9, "Threshold") - pdf.drawString(c3 + 4, top_y - 9, "Status") - - pdf.setFont("Helvetica", 8) - for idx, row in enumerate(shown, start=1): - y = top_y - idx * row_h - 9 - status = "PASS" if bool(row["pass"]) else "FAIL" - pdf.drawString(x + 4, y, str(row["name"])[:34]) - pdf.drawString(c1 + 4, y, f"{float(row['value']):.4g}") - pdf.drawString(c2 + 4, y, f"{float(row['threshold']):.4g}") - pdf.drawString(c3 + 4, y, status) - - -def _format_metric_value(value: object | None) -> str: - if value is None: - return "-" - if isinstance(value, bool): - return "Yes" if value else "No" - if isinstance(value, float): - return f"{value:.3f}" - return str(value) - - -def _draw_metrics_table( - pdf: canvas.Canvas, - metrics: dict[str, object] | None, - *, - x: float, - top_y: float, - width: float, -) -> None: - rows = [ - ("line_review_status", "Line review status"), - ("line_alignment_ratio", "Line alignment ratio"), - ("matlab_step_recall", "MATLAB step recall"), - ("python_step_precision", "Python step precision"), - ("line_review_missing_step_count", "Missing MATLAB steps"), - ("line_review_extra_step_count", "Extra Python steps"), - ("matlab_code_lines", "MATLAB code lines"), - ("python_code_lines", "Python code lines"), - ("python_to_matlab_line_ratio", "Python/MATLAB line ratio"), - ("python_total_image_count", "Python image instances"), - ("python_unique_image_count", "Python unique images"), - ("python_duplicate_image_count", "Python duplicate images"), - ("matlab_reference_image_count", "MATLAB reference images"), - ("python_validation_image_count", "Python validation images"), - ("assertion_count", "Checkpoint assertions"), - ("has_plot_call", "Contains plotting logic"), - ("has_topic_checkpoint", "Has topic checkpoint"), - ("numeric_drift_pass", "Numeric drift pass"), - ("numeric_drift_checked_metrics", "Numeric metrics checked"), - ("numeric_drift_failed_metrics", "Numeric metrics failed"), - ("numeric_drift_worst_ratio", "Worst ratio to threshold"), - ("numeric_drift_first_failed", "First failed numeric metric"), - ] - row_h = 10.0 - table_h = row_h * (len(rows) + 1) - key_col_w = width * 0.68 - - pdf.setLineWidth(0.6) - pdf.rect(x, top_y - table_h, width, table_h) - pdf.line(x + key_col_w, top_y, x + key_col_w, top_y - table_h) - for idx in range(1, len(rows) + 1): - y = top_y - idx * row_h - pdf.line(x, y, x + width, y) - - pdf.setFont("Helvetica-Bold", 8) - pdf.drawString(x + 4, top_y - 9, "Metric") - pdf.drawString(x + key_col_w + 4, top_y - 9, "Value") - - pdf.setFont("Helvetica", 8) - if metrics is None: - pdf.drawString(x + 4, top_y - row_h - 9, "No parity metric row available") - return - - for idx, (key, label) in enumerate(rows, start=1): - y = top_y - idx * row_h - 9 - pdf.drawString(x + 4, y, label) - pdf.drawString(x + key_col_w + 4, y, _format_metric_value(metrics.get(key))) - - -def _draw_numeric_metric_detail( - pdf: canvas.Canvas, - metrics: dict[str, object] | None, - *, - x: float, - y: float, - max_rows: int = 4, -) -> None: - if metrics is None: - return - rows = metrics.get("numeric_drift_metric_rows") - if not isinstance(rows, list) or not rows: - return - - shown = rows[:max_rows] - pdf.setFont("Helvetica-Bold", 9) - pdf.drawString(x, y, "Numeric drift metric detail (worst ratios)") - y -= 11 - pdf.setFont("Helvetica", 8) - for row in shown: - name = str(row.get("name", "-")) - value = float(row.get("value", 0.0)) - threshold = float(row.get("threshold", 0.0)) - passed = bool(row.get("pass", False)) - ratio = float(row.get("ratio_to_threshold", 0.0)) - status = "PASS" if passed else "FAIL" - line = f"- {name}: value={value:.4g}, threshold={threshold:.4g}, ratio={ratio:.3f}, {status}" - y = _draw_wrapped_lines(pdf, x + 2, y, line, wrap_width=100, line_step=9) - - -def draw_cover_page( - pdf: canvas.Canvas, - repo_root: Path, - commit: str, - generated_at: str, - notebook_group: str, - selected_count: int, - command_results: list[CommandResult], - matlab_help_root: Path | None, - parity_threshold: float, - skip_parity_check: bool, - parity_mode: str, -) -> None: - pdf.setFont("Helvetica-Bold", 18) - pdf.drawString(40, 760, "nSTAT-python Validation Report (All Examples)") - pdf.setFont("Helvetica", 11) - pdf.drawString(40, 736, f"Generated: {generated_at}") - pdf.drawString(40, 720, f"Repository: {repo_root}") - pdf.drawString(40, 704, f"Commit: {commit}") - pdf.drawString(40, 688, f"Notebook group: {notebook_group}") - pdf.drawString(40, 672, f"Examples included: {selected_count}") - matlab_root_msg = str(matlab_help_root) if matlab_help_root is not None else "NOT FOUND" - pdf.drawString(40, 656, f"MATLAB helpfiles root: {matlab_root_msg}") - if parity_mode == "gate": - parity_msg = "gate-status (equivalence audit + output spec)" - else: - parity_msg = "SKIPPED" if skip_parity_check else f"image similarity threshold={parity_threshold:.2f}" - pdf.drawString(40, 640, f"Parity mode: {parity_mode} ({parity_msg})") - - y = 612 - pdf.setFont("Helvetica-Bold", 13) - pdf.drawString(40, y, "Command checks") - y -= 18 - pdf.setFont("Helvetica", 10) - - if not command_results: - pdf.drawString(46, y, "- Skipped by --skip-command-tests") - y -= 14 - else: - for result in command_results: - status = "PASS" if result.passed else "FAIL" - pdf.drawString(46, y, f"- {result.name}: {status} ({result.duration_s:.2f}s)") - y -= 14 - if result.stdout_tail: - y = _draw_wrapped_lines(pdf, 58, y, result.stdout_tail, wrap_width=90) - y -= 6 - if y < 90: - pdf.showPage() - y = 760 - pdf.setFont("Helvetica", 10) - - pdf.showPage() - - -def draw_summary_pages( - pdf: canvas.Canvas, - reports: list[NotebookReport], - skip_parity_check: bool, - parity_mode: str, -) -> None: - total = len(reports) - executed = sum(1 for report in reports if report.executed) - failed_exec = total - executed - with_py_images = sum(1 for report in reports if report.image_count > 0) - with_unique_py_images = sum(1 for report in reports if report.unique_image_count > 0) - topics_with_py_duplicates = sum(1 for report in reports if report.duplicate_image_count > 0) - with_matlab_refs = sum(1 for report in reports if len(report.matlab_ref_images) > 0) - parity_checked = sum(1 for report in reports if report.parity_pass is not None) - parity_passed = sum(1 for report in reports if report.parity_pass is True) - numeric_checked = sum( - 1 - for report in reports - if report.parity_metrics is not None and "numeric_drift_pass" in report.parity_metrics - ) - numeric_passed = sum( - 1 - for report in reports - if report.parity_metrics is not None and bool(report.parity_metrics.get("numeric_drift_pass", False)) - ) - line_review_checked = sum( - 1 - for report in reports - if report.parity_metrics is not None and str(report.parity_metrics.get("line_review_status", "")).strip() != "" - ) - line_review_aligned = sum( - 1 - for report in reports - if report.parity_metrics is not None and str(report.parity_metrics.get("line_review_status", "")).strip() - in {"aligned", "partially_aligned"} - ) - duplicate_stats = _cross_topic_duplicate_stats(reports) - - pdf.setFont("Helvetica-Bold", 16) - pdf.drawString(40, 760, "Example Coverage Summary") - pdf.setFont("Helvetica", 11) - pdf.drawString(40, 738, f"Total examples: {total}") - pdf.drawString(180, 738, f"Executed: {executed}") - pdf.drawString(300, 738, f"Exec failures: {failed_exec}") - pdf.drawString(430, 738, f"Py fig topics: {with_py_images}") - pdf.drawString(40, 722, f"MATLAB refs available: {with_matlab_refs}") - pdf.drawString(40, 706, f"Unique-py topics: {with_unique_py_images}") - pdf.drawString(220, 706, f"Topics with py duplicates: {topics_with_py_duplicates}") - pdf.drawString( - 40, - 690, - "Image dedupe: " - f"instances={duplicate_stats['total_image_instances']} " - f"unique={duplicate_stats['total_unique_hashes']} " - f"cross-topic={duplicate_stats['cross_topic_reused_hashes']} " - f"repeated={duplicate_stats['repeated_instances']}", - ) - if parity_mode == "gate": - pdf.drawString(260, 722, f"Parity gate pass: {parity_passed}/{parity_checked}") - elif skip_parity_check: - pdf.drawString(260, 722, "Parity scoring: skipped") - else: - pdf.drawString(260, 722, f"Parity pass: {parity_passed}/{parity_checked}") - pdf.drawString(40, 674, f"Numeric drift pass: {numeric_passed}/{numeric_checked}") - pdf.drawString(260, 674, f"Line review aligned: {line_review_aligned}/{line_review_checked}") - - y = 654 - pdf.setFont("Helvetica-Bold", 9) - pdf.drawString(40, y, "Exec") - pdf.drawString(74, y, "Parity") - pdf.drawString(126, y, "Topic") - pdf.drawString(300, y, "PyT") - pdf.drawString(326, y, "PyU") - pdf.drawString(352, y, "MAT") - pdf.drawString(380, y, "Score") - pdf.drawString(422, y, "Run") - pdf.drawString(458, y, "Sec") - pdf.drawString(492, y, "Status") - y -= 12 - pdf.setFont("Helvetica", 9) - - for report in reports: - if y < 70: - pdf.showPage() - pdf.setFont("Helvetica-Bold", 9) - pdf.drawString(40, 760, "Exec") - pdf.drawString(74, 760, "Parity") - pdf.drawString(126, 760, "Topic") - pdf.drawString(300, 760, "PyT") - pdf.drawString(326, 760, "PyU") - pdf.drawString(352, 760, "MAT") - pdf.drawString(380, 760, "Score") - pdf.drawString(422, 760, "Run") - pdf.drawString(458, 760, "Sec") - pdf.drawString(492, 760, "Status") - y = 748 - pdf.setFont("Helvetica", 9) - - exec_status = "PASS" if report.executed else "FAIL" - if report.parity_pass is None: - parity_status = "N/A" - else: - parity_status = "PASS" if report.parity_pass else "FAIL" - - score_text = f"{report.similarity_score:.3f}" if report.similarity_score is not None else "-" - - pdf.drawString(40, y, exec_status) - pdf.drawString(74, y, parity_status) - pdf.drawString(126, y, report.topic[:30]) - pdf.drawString(300, y, str(report.image_count)) - pdf.drawString(326, y, str(report.unique_image_count)) - pdf.drawString(352, y, str(len(report.matlab_ref_images))) - pdf.drawString(380, y, score_text) - pdf.drawString(422, y, report.run_group) - pdf.drawString(458, y, f"{report.duration_s:.2f}") - status_text = report.alignment_status if report.alignment_status is not None else "-" - pdf.drawString(492, y, status_text[:14]) - y -= 12 - - pdf.showPage() - - -def draw_example_page(pdf: canvas.Canvas, report: NotebookReport, index: int, total: int) -> None: - pdf.setFont("Helvetica-Bold", 15) - pdf.drawString(40, 760, f"Example {index}/{total}: {report.topic}") - pdf.setFont("Helvetica", 10) - pdf.drawString(40, 742, f"Notebook: {report.file}") - pdf.drawString(40, 728, f"Run group: {report.run_group}") - - exec_status = "PASS" if report.executed else "FAIL" - if report.parity_pass is None: - parity_status = "N/A" - else: - parity_status = "PASS" if report.parity_pass else "FAIL" - - score_text = f"{report.similarity_score:.3f}" if report.similarity_score is not None else "-" - header = ( - f"Execution: {exec_status} | Parity: {parity_status} | Similarity: {score_text} | " - f"Runtime: {report.duration_s:.2f}s" - ) - pdf.drawString(40, 714, header) - if report.alignment_status is not None: - pdf.drawString(40, 700, f"Equivalence status: {report.alignment_status}") - y_header = 686 - else: - y_header = 700 - pdf.drawString( - 40, - y_header, - "Python figs (total/unique/duplicate): " - f"{report.image_count}/{report.unique_image_count}/{report.duplicate_image_count} | " - f"MATLAB refs: {len(report.matlab_ref_images)}", - ) - - y = y_header - 20 - if report.error: - pdf.setFont("Helvetica-Bold", 11) - pdf.drawString(40, y, "Execution error") - y -= 16 - pdf.setFont("Helvetica", 10) - _draw_wrapped_lines(pdf, 48, y, report.error, wrap_width=92) - pdf.showPage() - return - - # Side-by-side galleries so each example page contains distinct visual evidence. - pdf.setFont("Helvetica-Bold", 10) - pdf.drawString(40, 664, "Python output gallery (unique figures)") - _draw_image_gallery(pdf, report.unique_image_paths, 40, 350, 250, 300, max_items=4) - - pdf.setFont("Helvetica-Bold", 10) - pdf.drawString(310, 664, "MATLAB reference gallery") - _draw_image_gallery(pdf, report.matlab_ref_images, 310, 350, 250, 300, max_items=4) - - pdf.setFont("Helvetica", 8) - pdf.drawString( - 40, - 336, - f"Python unique figures shown: {min(report.unique_image_count, 4)} / {report.unique_image_count}", - ) - pdf.drawString( - 310, - 336, - f"MATLAB refs shown: {min(len(report.matlab_ref_images), 4)} / {len(report.matlab_ref_images)}", - ) - if report.duplicate_image_count > 0: - pdf.drawString( - 40, - 324, - f"Duplicate Python figures collapsed for display: {report.duplicate_image_count}", - ) - - if report.matched_python_image is not None and report.matched_matlab_image is not None: - pdf.setFont("Helvetica", 8) - py_name = report.matched_python_image.name - mat_name = report.matched_matlab_image.name - pair_y = 310 if report.duplicate_image_count > 0 else 322 - pdf.drawString(40, pair_y, f"Best-match pair: {py_name} vs {mat_name}") - else: - pair_y = None - - metrics = dict(report.parity_metrics or {}) - metrics.setdefault("python_total_image_count", report.image_count) - metrics.setdefault("python_unique_image_count", report.unique_image_count) - metrics.setdefault("python_duplicate_image_count", report.duplicate_image_count) - if report.text_snippet: - snippet_title_y = 304 - if pair_y is not None: - snippet_title_y = min(snippet_title_y, pair_y - 14) - pdf.setFont("Helvetica-Bold", 11) - pdf.drawString(40, snippet_title_y, "Output snippet") - pdf.setFont("Helvetica", 9) - _draw_wrapped_lines(pdf, 48, snippet_title_y - 14, report.text_snippet, wrap_width=102, line_step=10) - - pdf.setFont("Helvetica-Bold", 10) - pdf.drawString(40, 190, "MATLAB vs Python key metrics") - _draw_numeric_metric_detail(pdf, metrics, x=40, y=230, max_rows=4) - _draw_metrics_table( - pdf, - metrics, - x=40, - top_y=182, - width=520, - ) - - pdf.showPage() - - -def draw_example_comparison_page(pdf: canvas.Canvas, report: NotebookReport, index: int, total: int) -> None: - pdf.setFont("Helvetica-Bold", 15) - pdf.drawString(40, 760, f"Example {index}/{total}: {report.topic} (Side-by-side)") - pdf.setFont("Helvetica", 9) - pdf.drawString(40, 744, f"Notebook: {report.file}") - - exec_state = bool(report.executed) - parity_state = report.parity_pass - numeric_state: bool | None = None - if report.parity_metrics is not None and "numeric_drift_pass" in report.parity_metrics: - numeric_state = bool(report.parity_metrics.get("numeric_drift_pass", False)) - line_review_state: bool | None = None - if report.parity_metrics is not None: - status = str(report.parity_metrics.get("line_review_status", "")).strip().lower() - if status == "aligned": - line_review_state = True - elif status == "needs_review": - line_review_state = False - - _draw_status_badge(pdf, x=40, y=724, label="Execution", state=exec_state) - _draw_status_badge(pdf, x=144, y=724, label="Parity gate", state=parity_state) - _draw_status_badge(pdf, x=248, y=724, label="Numeric drift", state=numeric_state) - _draw_status_badge(pdf, x=352, y=724, label="Line review", state=line_review_state) - - py_img, mat_img = _paired_reference_images(report) - _draw_comparison_pair( - pdf, - py_img=py_img, - mat_img=mat_img, - x_left=40, - x_right=300, - top_y=680, - box_w=240, - box_h=250, - ) - - similarity_text = f"{report.similarity_score:.3f}" if report.similarity_score is not None else "-" - pdf.setFont("Helvetica", 9) - pdf.drawString(40, 404, f"Best image similarity score: {similarity_text}") - if report.alignment_status is not None: - pdf.drawString(260, 404, f"Equivalence status: {report.alignment_status}") - - ratio = None - line_ratio = None - step_recall = None - step_precision = None - line_status = "-" - if report.parity_metrics is not None: - ratio = report.parity_metrics.get("python_to_matlab_line_ratio") - line_ratio = report.parity_metrics.get("line_alignment_ratio") - step_recall = report.parity_metrics.get("matlab_step_recall") - step_precision = report.parity_metrics.get("python_step_precision") - line_status = str(report.parity_metrics.get("line_review_status", "-")) - ratio_text = f"{float(ratio):.3f}" if isinstance(ratio, (int, float)) else "-" - pdf.drawString(40, 390, f"Python/MATLAB line ratio: {ratio_text}") - pdf.drawString( - 260, - 390, - f"Python unique images: {report.unique_image_count} | MATLAB refs: {len(report.matlab_ref_images)}", - ) - line_ratio_text = f"{float(line_ratio):.3f}" if isinstance(line_ratio, (int, float)) else "-" - step_recall_text = f"{float(step_recall):.3f}" if isinstance(step_recall, (int, float)) else "-" - step_precision_text = f"{float(step_precision):.3f}" if isinstance(step_precision, (int, float)) else "-" - pdf.drawString( - 40, - 376, - f"Line review: {line_status} | alignment={line_ratio_text} | recall={step_recall_text} | precision={step_precision_text}", - ) - - pdf.setFont("Helvetica-Bold", 11) - pdf.drawString(40, 358, "Metric deltas (MATLAB gold fixture thresholds)") - _draw_delta_table(pdf, metrics=report.parity_metrics, x=40, top_y=344, width=520, max_rows=6) - - if report.parity_metrics is not None: - missing_steps = report.parity_metrics.get("line_review_missing_steps_preview", []) - if isinstance(missing_steps, list) and missing_steps: - pdf.setFont("Helvetica-Bold", 9) - pdf.drawString(40, 254, "Missing MATLAB step preview:") - pdf.setFont("Helvetica", 8) - y = 242 - for step in missing_steps[:2]: - y = _draw_wrapped_lines(pdf, 46, y, f"- {str(step)}", wrap_width=98, line_step=9) - extra_steps = report.parity_metrics.get("line_review_extra_steps_preview", []) - if isinstance(extra_steps, list) and extra_steps: - pdf.setFont("Helvetica-Bold", 9) - pdf.drawString(40, 212, "Extra Python step preview:") - pdf.setFont("Helvetica", 8) - y = 200 - for step in extra_steps[:2]: - y = _draw_wrapped_lines(pdf, 46, y, f"- {str(step)}", wrap_width=98, line_step=9) - - pdf.showPage() - - -def generate_pdf_report( - repo_root: Path, - manifest_path: Path, - output_pdf: Path, - tmp_dir: Path, - notebook_group: str, - timeout: int, - run_commands: bool, - matlab_help_root: Path | None, - parity_threshold: float, - skip_parity_check: bool, - parity_mode: str, - equivalence_report: Path, - example_output_spec: Path, - numeric_drift_report: Path, - line_review_report: Path, - ordinal_parity_manifest: Path, - python_image_root: Path, - matlab_image_root: Path, -) -> tuple[Path, list[NotebookReport], list[CommandResult], Path | None, Path | None]: - output_pdf.parent.mkdir(parents=True, exist_ok=True) - tmp_dir.mkdir(parents=True, exist_ok=True) - - command_results: list[CommandResult] = [] - if run_commands: - commands = [ - ( - "Unit tests", - ["pytest", "-q", "tests/test_parity_numerics.py", "tests/test_behavior_contracts.py"], - ), - ( - "No MATLAB dependency gate", - ["python", "tools/compliance/check_no_matlab_dependency.py"], - ), - ] - for name, cmd in commands: - command_results.append(run_command(name=name, cmd=cmd, cwd=repo_root)) - - resolved_matlab_help_root = resolve_matlab_help_root(repo_root, matlab_help_root) - parity_gate_status = load_parity_gate_status(equivalence_report, example_output_spec) - parity_topic_metrics = load_parity_topic_metrics(equivalence_report) - numeric_drift_by_topic = load_numeric_drift_summary(numeric_drift_report) - line_review_by_topic = load_line_review_summary(line_review_report) - - targets = load_targets(manifest_path, repo_root, notebook_group) - reports: list[NotebookReport] = [] - for target in targets: - merged_metrics = dict(parity_topic_metrics.get(target.topic, {})) - merged_metrics.update(numeric_drift_by_topic.get(target.topic, {})) - merged_metrics.update(line_review_by_topic.get(target.topic, {})) - reports.append( - execute_notebook_capture( - target=target, - tmp_dir=tmp_dir, - timeout=timeout, - matlab_help_root=resolved_matlab_help_root, - parity_threshold=parity_threshold, - skip_parity_check=skip_parity_check, - parity_mode=parity_mode, - gate_status=parity_gate_status.get(target.topic), - parity_metrics=(merged_metrics or None), - ) - ) - - strict_ordinal_summary_path: Path | None = None - if parity_mode == "image" and not skip_parity_check: - strict_ordinal_summary_path = tmp_dir / "image_mode_parity" / "summary_pdf_mode.json" - strict_ordinal_summary = _run_strict_ordinal_parity( - repo_root=repo_root, - manifest=ordinal_parity_manifest, - python_image_root=python_image_root, - matlab_image_root=matlab_image_root, - threshold=parity_threshold, - out_json=strict_ordinal_summary_path, - diff_root=tmp_dir / "image_mode_parity" / "diffs_pdf_mode", - ) - _apply_strict_ordinal_summary_to_reports( - reports=reports, - summary=strict_ordinal_summary, - threshold=parity_threshold, - ) - - commit = ( - subprocess.run(["git", "rev-parse", "--short", "HEAD"], cwd=repo_root, capture_output=True, text=True) - .stdout.strip() - or "unknown" - ) - generated_at = datetime.now().strftime("%Y-%m-%d %H:%M:%S") - - pdf = canvas.Canvas(str(output_pdf), pagesize=letter) - pdf.setTitle("nSTAT-python Validation Report") - - draw_cover_page( - pdf=pdf, - repo_root=repo_root, - commit=commit, - generated_at=generated_at, - notebook_group=notebook_group, - selected_count=len(targets), - command_results=command_results, - matlab_help_root=resolved_matlab_help_root, - parity_threshold=parity_threshold, - skip_parity_check=skip_parity_check, - parity_mode=parity_mode, - ) - draw_summary_pages( - pdf=pdf, - reports=reports, - skip_parity_check=skip_parity_check, - parity_mode=parity_mode, - ) - - total = len(reports) - for index, report in enumerate(reports, start=1): - draw_example_page(pdf=pdf, report=report, index=index, total=total) - draw_example_comparison_page(pdf=pdf, report=report, index=index, total=total) - - pdf.save() - return output_pdf, reports, command_results, resolved_matlab_help_root, strict_ordinal_summary_path - - -def main() -> int: - if not REPORTLAB_AVAILABLE: - raise ModuleNotFoundError( - "reportlab is required to generate the validation PDF. " - "Install reportlab or run the non-PDF notebook/parity tools instead." - ) - args = parse_args() - stamp = datetime.now().strftime("%Y%m%d_%H%M%S") - output_pdf = args.output_dir / f"nstat_python_validation_report_{stamp}.pdf" - output_json = args.output_dir / f"nstat_python_validation_report_{stamp}.json" - latest_json = args.output_dir / "validation_report_latest.json" - - report_path, reports, command_results, matlab_help_root, strict_ordinal_summary_path = generate_pdf_report( - repo_root=args.repo_root, - manifest_path=args.manifest, - output_pdf=output_pdf, - tmp_dir=args.tmp_dir, - notebook_group=args.notebook_group, - timeout=args.timeout, - run_commands=not args.skip_command_tests, - matlab_help_root=args.matlab_help_root, - parity_threshold=args.parity_threshold, - skip_parity_check=args.skip_parity_check, - parity_mode=args.parity_mode, - equivalence_report=args.equivalence_report, - example_output_spec=args.example_output_spec, - numeric_drift_report=args.numeric_drift_report, - line_review_report=args.line_review_report, - ordinal_parity_manifest=args.ordinal_parity_manifest, - python_image_root=args.python_image_root, - matlab_image_root=args.matlab_image_root, - ) - - executed = sum(1 for report in reports if report.executed) - exec_failures = len(reports) - executed - with_images = sum(1 for report in reports if report.image_count > 0) - with_unique_images = sum(1 for report in reports if report.unique_image_count > 0) - duplicate_topics = sum(1 for report in reports if report.duplicate_image_count > 0) - parity_checked = sum(1 for report in reports if report.parity_pass is not None) - parity_failures = sum(1 for report in reports if report.parity_pass is False) - command_failures = sum(1 for result in command_results if not result.passed) - numeric_checked = sum( - 1 - for report in reports - if report.parity_metrics is not None and "numeric_drift_pass" in report.parity_metrics - ) - numeric_failures = sum( - 1 - for report in reports - if report.parity_metrics is not None and report.parity_metrics.get("numeric_drift_pass") is False - ) - - print(f"Generated PDF report: {report_path}") - print(f"MATLAB help root: {matlab_help_root}") - print( - f"Notebook results: total={len(reports)} executed={executed} exec_failures={exec_failures} " - f"with_images={with_images} with_unique_images={with_unique_images} duplicate_topics={duplicate_topics}" - ) - print(f"Parity results ({args.parity_mode} mode): checked={parity_checked} failures={parity_failures}") - print(f"Numeric drift topic results: checked={numeric_checked} failures={numeric_failures}") - print(f"Command checks: total={len(command_results)} failed={command_failures}") - - summary_payload = { - "generated_utc": datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ"), - "report_pdf": str(report_path), - "parity_mode": args.parity_mode, - "parity_threshold": float(args.parity_threshold), - "strict_ordinal_summary": str(strict_ordinal_summary_path) if strict_ordinal_summary_path else None, - "notebooks_total": len(reports), - "notebooks_executed": executed, - "notebooks_failed": exec_failures, - "parity_checked": parity_checked, - "parity_failures": parity_failures, - "command_checks_total": len(command_results), - "command_checks_failed": command_failures, - "topics": [ - { - "topic": report.topic, - "executed": report.executed, - "parity_pass": report.parity_pass, - "similarity_score": report.similarity_score, - "image_count": report.image_count, - "unique_image_count": report.unique_image_count, - "matched_python_image": str(report.matched_python_image) if report.matched_python_image else None, - "matched_matlab_image": str(report.matched_matlab_image) if report.matched_matlab_image else None, - } - for report in reports - ], - } - output_json.parent.mkdir(parents=True, exist_ok=True) - output_json.write_text(json.dumps(summary_payload, indent=2), encoding="utf-8") - latest_json.write_text(json.dumps(summary_payload, indent=2), encoding="utf-8") - - return 0 if exec_failures == 0 and command_failures == 0 and parity_failures == 0 else 1 - - -if __name__ == "__main__": - raise SystemExit(main())