@brainpilot/skills 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/package.json +35 -0
- package/skills/01_Meta-Skills/contribute-skill/SKILL.md +277 -0
- package/skills/01_Meta-Skills/contribute-skills-via-pr/SKILL.md +163 -0
- package/skills/01_Meta-Skills/paper-to-skill/SKILL.md +435 -0
- package/skills/01_Meta-Skills/paper-to-skill/references/extraction-guide.md +286 -0
- package/skills/01_Meta-Skills/paper-to-skill/references/skill-template.md +250 -0
- package/skills/01_Meta-Skills/repo-to-skill/SKILL.md +289 -0
- package/skills/01_Meta-Skills/share-case/SKILL.md +253 -0
- package/skills/01_Meta-Skills/share-usage/README.md +63 -0
- package/skills/01_Meta-Skills/share-usage/SKILL.md +395 -0
- package/skills/01_Meta-Skills/verify-skill/SKILL.md +331 -0
- package/skills/02_Cross-Domain_Foundation/cogsci-power-analysis/SKILL.md +194 -0
- package/skills/02_Cross-Domain_Foundation/cogsci-power-analysis/references/effect-sizes.md +352 -0
- package/skills/02_Cross-Domain_Foundation/cogsci-power-analysis/references/sample-size-guide.md +407 -0
- package/skills/02_Cross-Domain_Foundation/cogsci-statistics/SKILL.md +361 -0
- package/skills/02_Cross-Domain_Foundation/cogsci-statistics/references/common-analyses.md +517 -0
- package/skills/02_Cross-Domain_Foundation/cogsci-visualization/SKILL.md +292 -0
- package/skills/02_Cross-Domain_Foundation/cogsci-visualization/references/plot-recipes.md +709 -0
- package/skills/02_Cross-Domain_Foundation/research-literacy/SKILL.md +286 -0
- package/skills/02_Cross-Domain_Foundation/research-literacy/references/common-assumptions.md +320 -0
- package/skills/02_Cross-Domain_Foundation/research-literacy/references/planning-template.md +143 -0
- package/skills/03_Cognitive_Psychology/alternative-uses-task-designer/SKILL.md +197 -0
- package/skills/03_Cognitive_Psychology/alternative-uses-task-designer/references/instruction-templates.md +60 -0
- package/skills/03_Cognitive_Psychology/cognitive-paradigm-design/SKILL.md +246 -0
- package/skills/03_Cognitive_Psychology/cognitive-paradigm-design/references/classic-paradigms.md +435 -0
- package/skills/03_Cognitive_Psychology/cognitive-paradigm-design/references/design-principles.md +256 -0
- package/skills/03_Cognitive_Psychology/creativity-self-efficacy-mediation/SKILL.md +270 -0
- package/skills/03_Cognitive_Psychology/creativity-self-efficacy-mediation/references/lavaan-templates.md +172 -0
- package/skills/03_Cognitive_Psychology/divergent-thinking-scoring/SKILL.md +238 -0
- package/skills/03_Cognitive_Psychology/divergent-thinking-scoring/references/scoring-rubric.md +143 -0
- package/skills/03_Cognitive_Psychology/drift-diffusion-model/SKILL.md +203 -0
- package/skills/03_Cognitive_Psychology/drift-diffusion-model/references/fitting-guide.md +571 -0
- package/skills/03_Cognitive_Psychology/drift-diffusion-model/references/model-variants.md +427 -0
- package/skills/03_Cognitive_Psychology/evidence-accumulation-selector/SKILL.md +310 -0
- package/skills/03_Cognitive_Psychology/evidence-accumulation-selector/references/ez-diffusion-formulas.md +137 -0
- package/skills/03_Cognitive_Psychology/signal-detection-analysis/SKILL.md +300 -0
- package/skills/03_Cognitive_Psychology/signal-detection-analysis/references/application-guide.md +278 -0
- package/skills/03_Cognitive_Psychology/signal-detection-analysis/references/sdt-formulas.md +318 -0
- package/skills/03_Cognitive_Psychology/visual-search-array-generator/SKILL.md +283 -0
- package/skills/03_Cognitive_Psychology/visual-search-array-generator/references/array-generation-parameters.yaml +111 -0
- package/skills/04_Psycholinguistics/reading-time-analysis/SKILL.md +301 -0
- package/skills/04_Psycholinguistics/reading-time-analysis/references/measure-computation-guide.md +195 -0
- package/skills/04_Psycholinguistics/self-paced-reading-designer/SKILL.md +257 -0
- package/skills/04_Psycholinguistics/self-paced-reading-designer/references/analysis-guide.md +356 -0
- package/skills/04_Psycholinguistics/self-paced-reading-designer/references/region-segmentation.md +266 -0
- package/skills/04_Psycholinguistics/sentence-stimulus-norming/SKILL.md +346 -0
- package/skills/04_Psycholinguistics/sentence-stimulus-norming/references/lexical-databases-guide.md +184 -0
- package/skills/05_EEG_ERP/eeg-paradigm-designer/SKILL.md +226 -0
- package/skills/05_EEG_ERP/eeg-paradigm-designer/references/component-paradigm-map.md +276 -0
- package/skills/05_EEG_ERP/eeg-paradigm-designer/references/timing-parameters.md +244 -0
- package/skills/05_EEG_ERP/eeg-preprocessing-pipeline-guide/SKILL.md +367 -0
- package/skills/05_EEG_ERP/eeg-preprocessing-pipeline-guide/references/parameter-lookup-tables.md +138 -0
- package/skills/05_EEG_ERP/erp-analysis/SKILL.md +185 -0
- package/skills/05_EEG_ERP/erp-analysis/references/erp-components.md +447 -0
- package/skills/05_EEG_ERP/erp-analysis/references/preprocessing-pipeline.md +277 -0
- package/skills/05_EEG_ERP/erp-analysis/references/statistical-approaches.md +351 -0
- package/skills/05_EEG_ERP/mne-python-guide/SKILL.md +174 -0
- package/skills/05_EEG_ERP/mne-python-guide/references/decoding.md +178 -0
- package/skills/05_EEG_ERP/mne-python-guide/references/io_formats.md +160 -0
- package/skills/05_EEG_ERP/mne-python-guide/references/preprocessing.md +259 -0
- package/skills/05_EEG_ERP/mne-python-guide/references/simulation.md +173 -0
- package/skills/05_EEG_ERP/mne-python-guide/references/source_localization.md +234 -0
- package/skills/05_EEG_ERP/mne-python-guide/references/statistics.md +196 -0
- package/skills/05_EEG_ERP/mne-python-guide/references/time_frequency.md +165 -0
- package/skills/05_EEG_ERP/mne-python-guide/references/visualization.md +175 -0
- package/skills/06_fMRI_Neuroimaging/brain-connectivity-modeler/SKILL.md +317 -0
- package/skills/06_fMRI_Neuroimaging/brain-connectivity-modeler/references/method-implementation-guide.md +116 -0
- package/skills/06_fMRI_Neuroimaging/fmri-glm-analysis-guide/SKILL.md +296 -0
- package/skills/06_fMRI_Neuroimaging/fmri-glm-analysis-guide/references/design-matrix-guide.md +214 -0
- package/skills/06_fMRI_Neuroimaging/fmri-glm-analysis-guide/references/statistical-inference.md +288 -0
- package/skills/06_fMRI_Neuroimaging/fmri-preprocessing-pipeline-guide/SKILL.md +274 -0
- package/skills/06_fMRI_Neuroimaging/fmri-preprocessing-pipeline-guide/references/quality-control.md +336 -0
- package/skills/06_fMRI_Neuroimaging/fmri-preprocessing-pipeline-guide/references/step-by-step-pipeline.md +380 -0
- package/skills/06_fMRI_Neuroimaging/fmri-task-design-guide/SKILL.md +264 -0
- package/skills/06_fMRI_Neuroimaging/fmri-task-design-guide/references/design-optimization-examples.md +114 -0
- package/skills/06_fMRI_Neuroimaging/neural-decoding-analysis/SKILL.md +273 -0
- package/skills/06_fMRI_Neuroimaging/neural-decoding-analysis/references/decoding-methods.md +170 -0
- package/skills/06_fMRI_Neuroimaging/neural-decoding-analysis/references/rsa-guide.md +266 -0
- package/skills/06_fMRI_Neuroimaging/pycortex-guide/SKILL.md +123 -0
- package/skills/06_fMRI_Neuroimaging/pycortex-guide/references/database-subjects.md +179 -0
- package/skills/06_fMRI_Neuroimaging/pycortex-guide/references/dataset-types.md +208 -0
- package/skills/06_fMRI_Neuroimaging/pycortex-guide/references/freesurfer-fmriprep.md +162 -0
- package/skills/06_fMRI_Neuroimaging/pycortex-guide/references/mapping-transforms.md +181 -0
- package/skills/06_fMRI_Neuroimaging/pycortex-guide/references/mni-utils.md +207 -0
- package/skills/06_fMRI_Neuroimaging/pycortex-guide/references/surface-analysis.md +219 -0
- package/skills/06_fMRI_Neuroimaging/pycortex-guide/references/visualization.md +251 -0
- package/skills/07_Computational_Modeling/act-r-model-builder/SKILL.md +297 -0
- package/skills/07_Computational_Modeling/act-r-model-builder/references/model-patterns.md +197 -0
- package/skills/07_Computational_Modeling/act-r-model-builder/references/parameter-table.yaml +204 -0
- package/skills/07_Computational_Modeling/bayesian-cognitive-model-builder/SKILL.md +294 -0
- package/skills/07_Computational_Modeling/bayesian-cognitive-model-builder/references/diagnostics-checklist.md +351 -0
- package/skills/07_Computational_Modeling/bayesian-cognitive-model-builder/references/prior-selection-guide.md +241 -0
- package/skills/07_Computational_Modeling/parameter-recovery-checker/SKILL.md +269 -0
- package/skills/07_Computational_Modeling/parameter-recovery-checker/references/recovery-diagnostics.md +207 -0
- package/skills/08_Computational_Neuroscience/brain-connectivity-modeler/SKILL.md +317 -0
- package/skills/08_Computational_Neuroscience/brain-connectivity-modeler/references/method-implementation-guide.md +116 -0
- package/skills/08_Computational_Neuroscience/neural-decoding-analysis/SKILL.md +273 -0
- package/skills/08_Computational_Neuroscience/neural-decoding-analysis/references/decoding-methods.md +170 -0
- package/skills/08_Computational_Neuroscience/neural-decoding-analysis/references/rsa-guide.md +266 -0
- package/skills/08_Computational_Neuroscience/neural-population-analysis-guide/SKILL.md +305 -0
- package/skills/08_Computational_Neuroscience/neural-population-analysis-guide/references/data-requirements.md +60 -0
- package/skills/08_Computational_Neuroscience/neural-population-analysis-guide/references/method-comparison.md +151 -0
- package/skills/08_Computational_Neuroscience/spiking-network-model-builder/SKILL.md +376 -0
- package/skills/08_Computational_Neuroscience/spiking-network-model-builder/references/hh-parameters.md +117 -0
- package/skills/08_Computational_Neuroscience/spiking-network-model-builder/references/network-regimes.md +130 -0
- package/skills/09_Cellular_Molecular_Neuroscience/calcium-imaging-analysis-guide/SKILL.md +258 -0
- package/skills/09_Cellular_Molecular_Neuroscience/calcium-imaging-analysis-guide/references/indicator-parameters.md +242 -0
- package/skills/09_Cellular_Molecular_Neuroscience/calcium-imaging-analysis-guide/references/pipeline-details.md +211 -0
- package/skills/09_Cellular_Molecular_Neuroscience/optogenetics-protocol-designer/SKILL.md +261 -0
- package/skills/09_Cellular_Molecular_Neuroscience/optogenetics-protocol-designer/references/opsin-catalog.md +124 -0
- package/skills/09_Cellular_Molecular_Neuroscience/optogenetics-protocol-designer/references/stimulation-parameters.md +304 -0
- package/skills/10_Clinical_Neuropsychology/lesion-symptom-mapping-guide/SKILL.md +367 -0
- package/skills/10_Clinical_Neuropsychology/lesion-symptom-mapping-guide/references/disconnection-guide.md +152 -0
- package/skills/10_Clinical_Neuropsychology/lesion-symptom-mapping-guide/references/vlsm-pipeline.md +182 -0
- package/skills/10_Clinical_Neuropsychology/neuropsych-battery-selector/SKILL.md +250 -0
- package/skills/10_Clinical_Neuropsychology/neuropsych-battery-selector/references/deficit-profiles.md +302 -0
- package/skills/10_Clinical_Neuropsychology/neuropsych-battery-selector/references/test-catalog.md +304 -0
- package/skills/11_Developmental_Cognition/infant-looking-time-designer/SKILL.md +345 -0
- package/skills/11_Developmental_Cognition/infant-looking-time-designer/references/age-parameters.yaml +186 -0
- package/skills/12_Social_Cognition/tom-task-selector/SKILL.md +379 -0
- package/skills/12_Social_Cognition/tom-task-selector/references/task-database.md +317 -0
- package/skills/13_Visualization/nature-figure/README.md +442 -0
- package/skills/13_Visualization/nature-figure/SKILL.md +60 -0
- package/skills/13_Visualization/nature-figure/assets/chart-atlas/atlas-01-bar-charts.png +0 -0
- package/skills/13_Visualization/nature-figure/assets/chart-atlas/atlas-02-line-trends.png +0 -0
- package/skills/13_Visualization/nature-figure/assets/chart-atlas/atlas-03-heatmaps.png +0 -0
- package/skills/13_Visualization/nature-figure/assets/chart-atlas/atlas-04-scatter-bubble.png +0 -0
- package/skills/13_Visualization/nature-figure/assets/chart-atlas/atlas-05-radar-polar.png +0 -0
- package/skills/13_Visualization/nature-figure/assets/chart-atlas/atlas-06-distributions.png +0 -0
- package/skills/13_Visualization/nature-figure/assets/chart-atlas/atlas-07-forest-interval.png +0 -0
- package/skills/13_Visualization/nature-figure/assets/chart-atlas/atlas-08-area-stacked.png +0 -0
- package/skills/13_Visualization/nature-figure/assets/chart-atlas/atlas-09-image-plates.png +0 -0
- package/skills/13_Visualization/nature-figure/assets/chart-atlas/atlas-10-network-matrix.png +0 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/assets/Dispersion_motivation.png +0 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/assets/Dispersion_observation.png +0 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/assets/Dispersion_observation_distillation.png +0 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/assets/ImmunoStruct_contrastive.png +0 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/assets/ImmunoStruct_results_CEDAR.png +0 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/assets/ImmunoStruct_results_IEDB.png +0 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/assets/ImmunoStruct_schematic.png +0 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/assets/RNAGenScape_schematic.png +0 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/figure_CellSpliceNet/figures/ablation.png +0 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/figure_CellSpliceNet/figures/comparison.png +0 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/figure_CellSpliceNet/plot_ablation.py +86 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/figure_CellSpliceNet/plot_comparison.py +109 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/figure_Cflows/diffusion_swiss_roll.py +97 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/figure_Cflows/figures/diffusion_swiss_roll.png +0 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/figure_Cflows/figures/fig2_comparison_GeneRegulatory.pdf +0 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/figure_Cflows/figures/fig2_comparison_GeneRegulatory.png +0 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/figure_Cflows/figures/fig2_comparison_Trajectory.pdf +0 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/figure_Cflows/figures/fig2_comparison_Trajectory.png +0 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/figure_Cflows/figures/figX_comparison_Ablation.pdf +0 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/figure_Cflows/figures/figX_comparison_Ablation.png +0 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/figure_Cflows/plot_comparison_Ablation.py +64 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/figure_Cflows/plot_comparison_GeneRegulatory.py +74 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/figure_Cflows/plot_comparison_Trajectory.py +74 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/figure_Dispersion/figures/idea.png +0 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/figure_Dispersion/figures/illustration.png +0 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/figure_Dispersion/plot_idea.py +76 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/figure_Dispersion/plot_illustration.py +404 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/figure_FPGM/figures/freq_prior.png +0 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/figure_FPGM/plot_freq_prior.py +146 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/figure_ImmunoStruct/figures/bars_ablation_Cancer.png +0 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/figure_ImmunoStruct/figures/bars_ablation_IEDB.png +0 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/figure_ImmunoStruct/figures/bars_comparison_Cancer.png +0 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/figure_ImmunoStruct/figures/bars_comparison_IEDB.png +0 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/figure_ImmunoStruct/plot_bars.py +216 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/figure_ImmunoStruct/raw_data.py +125 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/figure_RNAGenScape/figures/manifold.png +0 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/figure_RNAGenScape/figures/manifold_holes.png +0 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/figure_RNAGenScape/figures/results_comparison_optimization.png +0 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/figure_RNAGenScape/figures/results_comparison_speed.png +0 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/figure_RNAGenScape/figures/results_sweep.png +0 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/figure_RNAGenScape/plot_comparison.py +228 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/figure_RNAGenScape/plot_hole_manifold.py +82 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/figure_RNAGenScape/plot_manifold.py +61 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/figure_RNAGenScape/plot_sweep.py +77 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/figure_VIGIL/figures/comparison_posttraining.png +0 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/figure_VIGIL/figures/comparison_radar.png +0 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/figure_VIGIL/plot_comparison_radar.py +173 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/figure_VIGIL/plot_posttraining.py +82 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/figure_brainteaser/figures/brute_force.png +0 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/figure_brainteaser/figures/correctness_by_category.png +0 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/figure_brainteaser/figures/correctness_by_subcategory.png +0 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/figure_brainteaser/figures/rewriting.png +0 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/figure_brainteaser/figures/selfcorrection_math.png +0 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/figure_brainteaser/plot_brute_force.py +248 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/figure_brainteaser/plot_correctness_by_category.py +132 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/figure_brainteaser/plot_correctness_by_subcategory.py +131 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/figure_brainteaser/plot_rewriting.py +105 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/figure_brainteaser/plot_selfcorrection_math.py +99 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/figure_ophthal_review/figures/composition_heatmap.png +0 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/figure_ophthal_review/figures/trend_by_month.png +0 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/figure_ophthal_review/plot_composition.py +81 -0
- package/skills/13_Visualization/nature-figure/assets/figures4papers/figure_ophthal_review/plot_trend.py +125 -0
- package/skills/13_Visualization/nature-figure/assets/gallery/fig1-material-mechanism-rich.png +0 -0
- package/skills/13_Visualization/nature-figure/assets/gallery/fig2-spatial-imaging-rich.png +0 -0
- package/skills/13_Visualization/nature-figure/assets/gallery/fig3-in-vivo-efficacy-rich.png +0 -0
- package/skills/13_Visualization/nature-figure/assets/gallery/fig4-single-cell-systems-rich.png +0 -0
- package/skills/13_Visualization/nature-figure/assets/gallery/fig5-validation-perturbation-rich.png +0 -0
- package/skills/13_Visualization/nature-figure/evals/evals.json +37 -0
- package/skills/13_Visualization/nature-figure/manifest.yaml +57 -0
- package/skills/13_Visualization/nature-figure/references/api.md +428 -0
- package/skills/13_Visualization/nature-figure/references/backend-selection.md +100 -0
- package/skills/13_Visualization/nature-figure/references/chart-types.md +281 -0
- package/skills/13_Visualization/nature-figure/references/common-patterns.md +350 -0
- package/skills/13_Visualization/nature-figure/references/demos.md +65 -0
- package/skills/13_Visualization/nature-figure/references/design-theory.md +436 -0
- package/skills/13_Visualization/nature-figure/references/figure-contract.md +93 -0
- package/skills/13_Visualization/nature-figure/references/nature-2026-observations.md +112 -0
- package/skills/13_Visualization/nature-figure/references/qa-contract.md +119 -0
- package/skills/13_Visualization/nature-figure/references/r-template-index.md +66 -0
- package/skills/13_Visualization/nature-figure/references/r-workflow.md +161 -0
- package/skills/13_Visualization/nature-figure/references/tutorials.md +251 -0
- package/skills/13_Visualization/nature-figure/static/core/contract.md +29 -0
- package/skills/13_Visualization/nature-figure/static/core/stance.md +37 -0
- package/skills/13_Visualization/nature-figure/static/fragments/backend/python.md +37 -0
- package/skills/13_Visualization/nature-figure/static/fragments/backend/r.md +44 -0
- package/skills/14_Writing/markdown-report-writing/SKILL.md +306 -0
- package/skills/14_Writing/markdown-report-writing/references/compatibility-matrix.md +72 -0
- package/skills/14_Writing/markdown-report-writing/references/templates.md +299 -0
- package/skills/15_Others/neuroimaging-power-guide/SKILL.md +324 -0
- package/skills/15_Others/neuroimaging-power-guide/references/effect-size-lookup-tables.md +102 -0
- package/skills/15_Others/neuroimaging-sample-size-calculator/SKILL.md +330 -0
- package/skills/15_Others/neuroimaging-sample-size-calculator/references/worked-examples.md +220 -0
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import numpy as np
|
|
3
|
+
from matplotlib import pyplot as plt
|
|
4
|
+
from matplotlib import gridspec as gridspec
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
data_ablation = {
|
|
8
|
+
'methods': [
|
|
9
|
+
r'CellSpliceNet',
|
|
10
|
+
r'ViT',
|
|
11
|
+
r'SpliceFinder',
|
|
12
|
+
r'Pangolin',
|
|
13
|
+
r'SpliceTransformer',
|
|
14
|
+
r'SpliceAI',
|
|
15
|
+
r'ESM2',
|
|
16
|
+
],
|
|
17
|
+
'colors': ['#0F4D92', "#F09F97", "#F1B3AC", "#EFBEB8", "#F0CDC8", "#F3D9D8", '#FCEEED'],
|
|
18
|
+
'metrics': [r'Spearman correlation', r'Pearson correlation', r'R$^2$ score'],
|
|
19
|
+
'result': {
|
|
20
|
+
# r'Spearman correlation': np.array([0.88, 0.81, 0.80, 0.79, 0.77, 0.71, 0.606]),
|
|
21
|
+
# r'Pearson correlation': np.array([0.88, 0.81, 0.80, 0.79, 0.77, 0.72, 0.613]),
|
|
22
|
+
# r'R$^2$ score': np.array([0.77, 0.66, 0.64, 0.62, 0.59, 0.52, 0.369]),
|
|
23
|
+
r'Spearman correlation': np.array([
|
|
24
|
+
[0.88, 0.88, 0.88], # TODO: update!
|
|
25
|
+
[0.81, 0.81, 0.81], # TODO: update!
|
|
26
|
+
[0.806, 0.793, 0.794],
|
|
27
|
+
[0.792, 0.785, 0.788],
|
|
28
|
+
[0.765, 0.765, 0.767],
|
|
29
|
+
[0.714, 0.716, 0.706],
|
|
30
|
+
[0.598, 0.625, 0.594],
|
|
31
|
+
]),
|
|
32
|
+
r'Pearson correlation': np.array([
|
|
33
|
+
[0.88, 0.88, 0.88], # TODO: update!
|
|
34
|
+
[0.81, 0.81, 0.81], # TODO: update!
|
|
35
|
+
[0.812, 0.798, 0.801],
|
|
36
|
+
[0.792, 0.785, 0.788],
|
|
37
|
+
[0.765, 0.765, 0.766],
|
|
38
|
+
[0.722, 0.722, 0.714],
|
|
39
|
+
[0.604, 0.631, 0.605],
|
|
40
|
+
]),
|
|
41
|
+
r'R$^2$ score': np.array([
|
|
42
|
+
[0.77, 0.77, 0.77], # TODO: update!
|
|
43
|
+
[0.66, 0.66, 0.66], # TODO: update!
|
|
44
|
+
[0.658, 0.632, 0.642],
|
|
45
|
+
[0.633, 0.615, 0.627],
|
|
46
|
+
[0.585, 0.585, 0.586],
|
|
47
|
+
[0.518, 0.520, 0.507],
|
|
48
|
+
[0.359, 0.384, 0.364],
|
|
49
|
+
]),
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
def is_dark(color_in_hex, threshold=128):
|
|
54
|
+
color = color_in_hex.lstrip('#')
|
|
55
|
+
r = int(color[0:2], 16)
|
|
56
|
+
g = int(color[2:4], 16)
|
|
57
|
+
b = int(color[4:6], 16)
|
|
58
|
+
|
|
59
|
+
luminance = 0.299*r + 0.587*g + 0.114*b
|
|
60
|
+
return luminance < threshold
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
if __name__ == '__main__':
|
|
64
|
+
plt.rcParams['font.family'] = 'helvetica'
|
|
65
|
+
plt.rcParams['font.size'] = 24
|
|
66
|
+
plt.rcParams['axes.spines.right'] = False
|
|
67
|
+
plt.rcParams['axes.spines.top'] = False
|
|
68
|
+
plt.rcParams['axes.linewidth'] = 3
|
|
69
|
+
|
|
70
|
+
fig = plt.figure(figsize=(45, 12))
|
|
71
|
+
|
|
72
|
+
gs = gridspec.GridSpec(1, 3)
|
|
73
|
+
|
|
74
|
+
for metric_idx, metric_name in enumerate(data_ablation['metrics']):
|
|
75
|
+
ax = fig.add_subplot(gs[metric_idx])
|
|
76
|
+
|
|
77
|
+
num_methods = len(data_ablation['methods'])
|
|
78
|
+
bars = ax.bar(
|
|
79
|
+
np.arange(num_methods),
|
|
80
|
+
data_ablation['result'][metric_name].mean(axis=1),
|
|
81
|
+
yerr=data_ablation['result'][metric_name].std(axis=1),
|
|
82
|
+
error_kw={
|
|
83
|
+
'elinewidth': 2, # thickness of vertical error bar line
|
|
84
|
+
'capthick': 2, # thickness of caps
|
|
85
|
+
'capsize': 15 # length of caps
|
|
86
|
+
},
|
|
87
|
+
color=data_ablation['colors'],
|
|
88
|
+
label=data_ablation['methods'],
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
for i, (bar, value) in enumerate(zip(bars, data_ablation['result'][metric_name].mean(axis=1))):
|
|
92
|
+
textcolor = 'white' if is_dark(data_ablation['colors'][i]) else 'black'
|
|
93
|
+
ax.text(bar.get_x() + bar.get_width()/2, bar.get_height() - 0.10,
|
|
94
|
+
f'{value:.2f}', ha='center', va='bottom', fontsize=32, color=textcolor)
|
|
95
|
+
|
|
96
|
+
ax.set_ylabel(metric_name, fontsize=54, labelpad=12)
|
|
97
|
+
ymax = np.max(data_ablation['result'][metric_name])
|
|
98
|
+
ax.set_ylim([0.0, ymax + 0.5])
|
|
99
|
+
ax.set_xticks([])
|
|
100
|
+
ax.set_yticks([0.00, 0.25, 0.50, 0.75, 1.00])
|
|
101
|
+
ax.tick_params(axis='y', labelsize=36, length=10, width=2)
|
|
102
|
+
|
|
103
|
+
ax.legend(bbox_to_anchor=(0.02, 1.08), loc='upper left', fontsize=38, frameon=False, ncols=2, columnspacing=0.6)
|
|
104
|
+
|
|
105
|
+
fig.tight_layout(pad=2)
|
|
106
|
+
|
|
107
|
+
os.makedirs('./figures/', exist_ok=True)
|
|
108
|
+
fig.savefig('./figures/comparison.png', dpi=300)
|
|
109
|
+
plt.close(fig)
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import numpy as np
|
|
2
|
+
import matplotlib.pyplot as plt
|
|
3
|
+
from scipy.spatial.distance import pdist, squareform
|
|
4
|
+
|
|
5
|
+
# Generate Swiss Roll data
|
|
6
|
+
def generate_swiss_roll_2d(n_samples=80, noise=0.1):
|
|
7
|
+
t = 1.5 * np.pi * (1 + 2 * np.random.rand(n_samples))
|
|
8
|
+
x = t * np.cos(t)
|
|
9
|
+
z = t * np.sin(t)
|
|
10
|
+
|
|
11
|
+
# Add some noise
|
|
12
|
+
x += noise * np.random.randn(n_samples)
|
|
13
|
+
z += noise * np.random.randn(n_samples)
|
|
14
|
+
|
|
15
|
+
return x, z, t
|
|
16
|
+
|
|
17
|
+
# Compute diffusion matrix (transition probabilities)
|
|
18
|
+
def compute_diffusion_matrix(x, z, t, sigma=1.0):
|
|
19
|
+
# Order points by manifold parameter t for better matrix visualization
|
|
20
|
+
sorted_indices = np.argsort(t)
|
|
21
|
+
x_sorted = x[sorted_indices]
|
|
22
|
+
z_sorted = z[sorted_indices]
|
|
23
|
+
t_sorted = t[sorted_indices]
|
|
24
|
+
|
|
25
|
+
# Compute pairwise distances in ambient space
|
|
26
|
+
points = np.column_stack([x_sorted, z_sorted])
|
|
27
|
+
distances = squareform(pdist(points))
|
|
28
|
+
|
|
29
|
+
# Compute manifold distances (along parameter t)
|
|
30
|
+
t_distances = np.abs(t_sorted[:, None] - t_sorted[None, :])
|
|
31
|
+
|
|
32
|
+
# Combine spatial and manifold distances (emphasize manifold structure)
|
|
33
|
+
combined_distances = distances + 0.5 * t_distances
|
|
34
|
+
|
|
35
|
+
# Gaussian kernel for transition probabilities
|
|
36
|
+
P = np.exp(-combined_distances**2 / (2 * sigma**2))
|
|
37
|
+
|
|
38
|
+
# Make matrix sparser by thresholding small values
|
|
39
|
+
P[P < 0.01] = 0
|
|
40
|
+
|
|
41
|
+
# Normalize rows to make it a proper transition matrix
|
|
42
|
+
row_sums = P.sum(axis=1)
|
|
43
|
+
row_sums[row_sums == 0] = 1 # Avoid division by zero
|
|
44
|
+
P = P / row_sums[:, None]
|
|
45
|
+
|
|
46
|
+
return P, sorted_indices
|
|
47
|
+
|
|
48
|
+
if __name__ == '__main__':
|
|
49
|
+
# Create two subplots
|
|
50
|
+
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(16, 8))
|
|
51
|
+
|
|
52
|
+
# Generate swiss roll point cloud (smaller for visualization clarity)
|
|
53
|
+
x, z, t = generate_swiss_roll_2d(n_samples=500, noise=0.5)
|
|
54
|
+
|
|
55
|
+
# Compute diffusion matrix
|
|
56
|
+
P, sorted_indices = compute_diffusion_matrix(x, z, t, sigma=2)
|
|
57
|
+
|
|
58
|
+
# Left plot: Diffusion Matrix
|
|
59
|
+
im = ax1.imshow(P, cmap='Reds', aspect='equal', origin='upper')
|
|
60
|
+
ax1.axis('off')
|
|
61
|
+
ax1.set_facecolor('white')
|
|
62
|
+
|
|
63
|
+
# Right plot: Swiss Roll with probability-weighted connections
|
|
64
|
+
# Use original (unsorted) coordinates for the swiss roll plot
|
|
65
|
+
x_orig, z_orig, t_orig = x, z, t
|
|
66
|
+
|
|
67
|
+
# Draw line segments between points with opacity = transition probability
|
|
68
|
+
threshold = 0.02 # Only draw lines above this probability threshold
|
|
69
|
+
|
|
70
|
+
for i in range(len(x_orig)):
|
|
71
|
+
for j in range(i+1, len(x_orig)):
|
|
72
|
+
# Find corresponding indices in sorted matrix
|
|
73
|
+
orig_i_in_sorted = np.where(sorted_indices == i)[0][0]
|
|
74
|
+
orig_j_in_sorted = np.where(sorted_indices == j)[0][0]
|
|
75
|
+
|
|
76
|
+
# Get transition probability from matrix
|
|
77
|
+
prob = max(P[orig_i_in_sorted, orig_j_in_sorted], P[orig_j_in_sorted, orig_i_in_sorted])
|
|
78
|
+
|
|
79
|
+
if prob > threshold:
|
|
80
|
+
ax2.plot([x_orig[i], x_orig[j]], [z_orig[i], z_orig[j]],
|
|
81
|
+
color='black', linewidth=2, alpha=prob*2, zorder=1)
|
|
82
|
+
|
|
83
|
+
# Plot the swiss roll points on top
|
|
84
|
+
scatter = ax2.scatter(x_orig, z_orig, c=t_orig, cmap='viridis', s=100,
|
|
85
|
+
alpha=0.5, edgecolors='white', linewidth=1, zorder=2)
|
|
86
|
+
|
|
87
|
+
# Styling for swiss roll plot
|
|
88
|
+
ax2.set_aspect('equal')
|
|
89
|
+
ax2.axis('off')
|
|
90
|
+
ax2.set_facecolor('white')
|
|
91
|
+
|
|
92
|
+
# Clean overall styling
|
|
93
|
+
fig.patch.set_facecolor('white')
|
|
94
|
+
plt.subplots_adjust(left=0, right=1, top=1, bottom=0, wspace=0.02)
|
|
95
|
+
|
|
96
|
+
plt.savefig('figures/diffusion_swiss_roll.png', dpi=300, bbox_inches='tight',
|
|
97
|
+
facecolor='white', edgecolor='none', pad_inches=1)
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import numpy as np
|
|
3
|
+
from matplotlib import pyplot as plt
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
data_comparison_Ablation = {
|
|
7
|
+
'methods': [r'OT-CFM', r'SB-CFM', r'SF2M', r'Cflows (w/o growth + energy)', r'Cflows (w/o growth)', r'Cflows'],
|
|
8
|
+
'colors': ['#AADCA9', '#8BCF8B', '#E9A6A1', '#B8C9E5', '#7097CA', '#3775BA'],
|
|
9
|
+
'metrics': [r'RMSE$\downarrow$', r'MAE$\downarrow$', r'PCC$\uparrow$', r'SCC$\uparrow$'],
|
|
10
|
+
'mean': {
|
|
11
|
+
r'RMSE$\downarrow$': np.array([0.94, 1.05, 0.99, 0.89, 0.75, 0.62]),
|
|
12
|
+
r'MAE$\downarrow$': np.array([0.75, 0.85, 0.78, 0.70, 0.59, 0.48]),
|
|
13
|
+
r'PCC$\uparrow$': np.array([0.53, 0.49, 0.55, 0.58, 0.65, 0.72]),
|
|
14
|
+
r'SCC$\uparrow$': np.array([0.50, 0.47, 0.52, 0.55, 0.68, 0.70]),
|
|
15
|
+
},
|
|
16
|
+
'std': {
|
|
17
|
+
r'RMSE$\downarrow$': np.array([0.08, 0.09, 0.09, 0.07, 0.06, 0.05]),
|
|
18
|
+
r'MAE$\downarrow$': np.array([0.07, 0.08, 0.07, 0.06, 0.05, 0.04]),
|
|
19
|
+
r'PCC$\uparrow$': np.array([0.04, 0.02, 0.01, 0.03, 0.02, 0.02]),
|
|
20
|
+
r'SCC$\uparrow$': np.array([0.03, 0.02, 0.03, 0.03, 0.03, 0.01]),
|
|
21
|
+
},
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
if __name__ == '__main__':
|
|
26
|
+
plt.rcParams['font.family'] = 'helvetica'
|
|
27
|
+
plt.rcParams['font.size'] = 24
|
|
28
|
+
plt.rcParams['axes.spines.right'] = False
|
|
29
|
+
plt.rcParams['axes.spines.top'] = False
|
|
30
|
+
plt.rcParams['axes.linewidth'] = 3
|
|
31
|
+
|
|
32
|
+
fig = plt.figure(figsize=(35, 7))
|
|
33
|
+
|
|
34
|
+
num_methods = len(data_comparison_Ablation['methods'])
|
|
35
|
+
for metric_idx, metric_name in enumerate(data_comparison_Ablation['metrics']):
|
|
36
|
+
ax = fig.add_subplot(1, 5, metric_idx + 1)
|
|
37
|
+
|
|
38
|
+
ax.bar(
|
|
39
|
+
np.arange(num_methods),
|
|
40
|
+
data_comparison_Ablation['mean'][metric_name],
|
|
41
|
+
yerr=data_comparison_Ablation['std'][metric_name],
|
|
42
|
+
capsize=8,
|
|
43
|
+
error_kw={'capthick': 2},
|
|
44
|
+
color=data_comparison_Ablation['colors'],
|
|
45
|
+
label=data_comparison_Ablation['methods'],
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
if metric_idx == 0:
|
|
49
|
+
handles, labels = ax.get_legend_handles_labels()
|
|
50
|
+
|
|
51
|
+
ax.set_xticks([])
|
|
52
|
+
ax.set_ylabel(data_comparison_Ablation['metrics'][metric_idx], fontsize=36, labelpad=12)
|
|
53
|
+
ax.ticklabel_format(axis='y', style='sci', scilimits=(0, 0))
|
|
54
|
+
|
|
55
|
+
ax = fig.add_subplot(1, 5, 5)
|
|
56
|
+
ax.legend(handles, labels, fontsize=30, loc='lower left', frameon=False)
|
|
57
|
+
ax.set_axis_off()
|
|
58
|
+
|
|
59
|
+
fig.tight_layout(pad=2)
|
|
60
|
+
|
|
61
|
+
os.makedirs('./figures/', exist_ok=True)
|
|
62
|
+
fig.savefig('./figures/figX_comparison_Ablation.png', dpi=300)
|
|
63
|
+
fig.savefig('./figures/figX_comparison_Ablation.pdf', dpi=300)
|
|
64
|
+
plt.close(fig)
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import numpy as np
|
|
3
|
+
from matplotlib import pyplot as plt
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
data_comparison_GeneRegulatory = {
|
|
7
|
+
'methods': [r'OCE', r'PC', r'mTE', r'mMI', r'NRI', r'DCRNN', r'GTS', r'NIR', r'GC (ours)'],
|
|
8
|
+
'colors': ['#D0A3A3', '#EFE7B1', '#F4C2C2', '#D7C4E2', '#E5C09F', '#A8C6C2', '#B7D3B0', '#F5B5A0', '#3775BA'],
|
|
9
|
+
'metric': 'Graph Edit Distance',
|
|
10
|
+
'datasets': [
|
|
11
|
+
r'($|\mathcal{V}|$, $|\mathcal{E}|$) = (100, 137)',
|
|
12
|
+
r'($|\mathcal{V}|$, $|\mathcal{E}|$) = (150, 329)',
|
|
13
|
+
r'($|\mathcal{V}|$, $|\mathcal{E}|$) = (200, 507)',
|
|
14
|
+
],
|
|
15
|
+
'mean': {
|
|
16
|
+
r'($|\mathcal{V}|$, $|\mathcal{E}|$) = (100, 137)':
|
|
17
|
+
np.array([138.6, 140.4, 126.4, 51.2, 72.1, 158.14, 215.4, 62.7, 51.2]),
|
|
18
|
+
r'($|\mathcal{V}|$, $|\mathcal{E}|$) = (150, 329)':
|
|
19
|
+
np.array([293.4, 317.2, 261.0, 99.8, 106.6, 303.79, 347.2, 86.3, 109.0]),
|
|
20
|
+
r'($|\mathcal{V}|$, $|\mathcal{E}|$) = (200, 507)':
|
|
21
|
+
np.array([449.8, 495.6, 397.4, 162.8, 219.8, 508.25, 481.8, 159.2, 158.8]),
|
|
22
|
+
},
|
|
23
|
+
'std': {
|
|
24
|
+
r'($|\mathcal{V}|$, $|\mathcal{E}|$) = (100, 137)':
|
|
25
|
+
np.array([3.5, 3.9, 2.4, 3.3, 6.2, 8.6, 13.8, 3.2, 3.3]),
|
|
26
|
+
r'($|\mathcal{V}|$, $|\mathcal{E}|$) = (150, 329)':
|
|
27
|
+
np.array([2.9, 3.7, 2.2, 4.0, 5.4, 12.4, 19.3, 2.8, 6.4]),
|
|
28
|
+
r'($|\mathcal{V}|$, $|\mathcal{E}|$) = (200, 507)':
|
|
29
|
+
np.array([1.1, 6.5, 8.8, 6.2, 13.4, 23.6, 7.0, 11.6, 12.6]),
|
|
30
|
+
},
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
if __name__ == '__main__':
|
|
35
|
+
plt.rcParams['font.family'] = 'helvetica'
|
|
36
|
+
plt.rcParams['font.size'] = 24
|
|
37
|
+
plt.rcParams['axes.spines.right'] = False
|
|
38
|
+
plt.rcParams['axes.spines.top'] = False
|
|
39
|
+
plt.rcParams['axes.linewidth'] = 3
|
|
40
|
+
|
|
41
|
+
fig = plt.figure(figsize=(36, 6))
|
|
42
|
+
|
|
43
|
+
num_methods = len(data_comparison_GeneRegulatory['methods'])
|
|
44
|
+
for dataset_idx, dataset_name in enumerate(data_comparison_GeneRegulatory['datasets']):
|
|
45
|
+
ax = fig.add_subplot(1, 4, dataset_idx + 1)
|
|
46
|
+
|
|
47
|
+
ax.bar(
|
|
48
|
+
np.arange(num_methods),
|
|
49
|
+
data_comparison_GeneRegulatory['mean'][dataset_name],
|
|
50
|
+
yerr=data_comparison_GeneRegulatory['std'][dataset_name],
|
|
51
|
+
capsize=8,
|
|
52
|
+
error_kw={'capthick': 2},
|
|
53
|
+
color=data_comparison_GeneRegulatory['colors'],
|
|
54
|
+
label=data_comparison_GeneRegulatory['methods'],
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
if dataset_idx == 0:
|
|
58
|
+
handles, labels = ax.get_legend_handles_labels()
|
|
59
|
+
|
|
60
|
+
ax.set_xticks([])
|
|
61
|
+
ax.set_ylabel(data_comparison_GeneRegulatory['metric'], fontsize=36, labelpad=12)
|
|
62
|
+
ax.set_xlabel(dataset_name, fontsize=36, labelpad=12)
|
|
63
|
+
ax.ticklabel_format(axis='y', style='sci', scilimits=(0, 0))
|
|
64
|
+
|
|
65
|
+
ax = fig.add_subplot(1, 4, 4)
|
|
66
|
+
ax.legend(handles, labels, fontsize=30, loc='lower left', ncols=2, frameon=False)
|
|
67
|
+
ax.set_axis_off()
|
|
68
|
+
|
|
69
|
+
fig.tight_layout(pad=2)
|
|
70
|
+
|
|
71
|
+
os.makedirs('./figures/', exist_ok=True)
|
|
72
|
+
fig.savefig('./figures/fig2_comparison_GeneRegulatory.png', dpi=300)
|
|
73
|
+
fig.savefig('./figures/fig2_comparison_GeneRegulatory.pdf', dpi=300)
|
|
74
|
+
plt.close(fig)
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import numpy as np
|
|
3
|
+
from matplotlib import pyplot as plt
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
data_comparison_Trajectory = {
|
|
7
|
+
'methods': [r'TrajectoryNet', r'OT-CFM', r'SB-CFM', r'BEMIOflow (ours)'],
|
|
8
|
+
'colors': ['#DDF3DE', '#AADCA9', '#8BCF8B', '#3775BA'],
|
|
9
|
+
'metrics': ['PHATE Space RMSE', 'Gene Space RMSE', 'Interpolation EMD'],
|
|
10
|
+
'datasets': ['Bifurcation', 'Cycle', 'Unidirectional'],
|
|
11
|
+
'mean': {
|
|
12
|
+
'PHATE Space RMSE': {
|
|
13
|
+
'Bifurcation': np.array([6.16, 2.98, 2.83, 2.60]) * 1e-3,
|
|
14
|
+
'Cycle': np.array([2.49, 3.79, 1.58, 0.777]) * 1e-3,
|
|
15
|
+
'Unidirectional': np.array([8.08, 5.33, 5.67, 3.40]) * 1e-3,
|
|
16
|
+
},
|
|
17
|
+
'Gene Space RMSE': {
|
|
18
|
+
'Bifurcation': np.array([0.150, 0.0842, 0.0835, 0.0773]),
|
|
19
|
+
'Cycle': np.array([0.151, 0.209, 0.141, 0.118]),
|
|
20
|
+
'Unidirectional': np.array([0.118, 0.0960, 0.0978, 0.0853]),
|
|
21
|
+
},
|
|
22
|
+
'Interpolation EMD': {
|
|
23
|
+
'Bifurcation': np.array([1.07, 0.495, 0.516, 0.465]) * 1e-2,
|
|
24
|
+
'Cycle': np.array([0.710, 0.818, 0.526, 0.465]) * 1e-2,
|
|
25
|
+
'Unidirectional': np.array([1.50, 1.32, 1.28, 0.935]) * 1e-2,
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
if __name__ == '__main__':
|
|
32
|
+
plt.rcParams['font.family'] = 'helvetica'
|
|
33
|
+
plt.rcParams['font.size'] = 24
|
|
34
|
+
plt.rcParams['axes.spines.right'] = False
|
|
35
|
+
plt.rcParams['axes.spines.top'] = False
|
|
36
|
+
plt.rcParams['axes.linewidth'] = 3
|
|
37
|
+
|
|
38
|
+
fig = plt.figure(figsize=(36, 6))
|
|
39
|
+
|
|
40
|
+
num_methods = len(data_comparison_Trajectory['methods'])
|
|
41
|
+
for metric_idx, metric_name in enumerate(data_comparison_Trajectory['metrics']):
|
|
42
|
+
ax = fig.add_subplot(1, 4, metric_idx + 1)
|
|
43
|
+
xtick_list = []
|
|
44
|
+
|
|
45
|
+
for dataset_idx, dataset_name in enumerate(data_comparison_Trajectory['datasets']):
|
|
46
|
+
|
|
47
|
+
ax.bar(
|
|
48
|
+
np.arange(num_methods) + dataset_idx * (num_methods + 1),
|
|
49
|
+
data_comparison_Trajectory['mean'][metric_name][dataset_name],
|
|
50
|
+
color=data_comparison_Trajectory['colors'],
|
|
51
|
+
label=data_comparison_Trajectory['methods'],
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
xtick_list.append(np.mean(np.arange(num_methods)) + dataset_idx * (num_methods + 1))
|
|
55
|
+
|
|
56
|
+
if dataset_idx == 0:
|
|
57
|
+
handles, labels = ax.get_legend_handles_labels()
|
|
58
|
+
|
|
59
|
+
ax.set_xticks(xtick_list)
|
|
60
|
+
ax.set_xticklabels(data_comparison_Trajectory['datasets'])
|
|
61
|
+
ax.set_ylabel(data_comparison_Trajectory['metrics'][metric_idx], fontsize=36, labelpad=12)
|
|
62
|
+
ax.set_xlabel('Dataset', fontsize=36, labelpad=12)
|
|
63
|
+
ax.ticklabel_format(axis='y', style='sci', scilimits=(0, 0))
|
|
64
|
+
|
|
65
|
+
ax = fig.add_subplot(1, 4, 4)
|
|
66
|
+
ax.legend(handles, labels, fontsize=30, loc='lower left', frameon=False)
|
|
67
|
+
ax.set_axis_off()
|
|
68
|
+
|
|
69
|
+
fig.tight_layout(pad=2)
|
|
70
|
+
|
|
71
|
+
os.makedirs('./figures/', exist_ok=True)
|
|
72
|
+
fig.savefig('./figures/fig2_comparison_Trajectory.png', dpi=300)
|
|
73
|
+
fig.savefig('./figures/fig2_comparison_Trajectory.pdf', dpi=300)
|
|
74
|
+
plt.close(fig)
|
|
Binary file
|
|
Binary file
|
package/skills/13_Visualization/nature-figure/assets/figures4papers/figure_Dispersion/plot_idea.py
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import numpy as np
|
|
3
|
+
import matplotlib.pyplot as plt
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
EPSILON = 1e-6
|
|
7
|
+
|
|
8
|
+
def sample_points_in_ball(num_points, theta_range=2*np.pi):
|
|
9
|
+
r = np.sqrt(np.random.uniform(0, 0.95, num_points))
|
|
10
|
+
theta = np.random.uniform(np.pi/2 - theta_range/2, np.pi/2 + theta_range/2, num_points)
|
|
11
|
+
x = r * np.cos(theta)
|
|
12
|
+
y = r * np.sin(theta)
|
|
13
|
+
return np.stack([x, y], axis=1)
|
|
14
|
+
|
|
15
|
+
def plot_ball_with_points(ax, pts, facecolor):
|
|
16
|
+
num_points_grid = 512
|
|
17
|
+
|
|
18
|
+
xs = np.linspace(-1, 1, num_points_grid)
|
|
19
|
+
ys = np.linspace(-1, 1, num_points_grid)
|
|
20
|
+
x, y = np.meshgrid(xs, ys)
|
|
21
|
+
r2 = x**2 + y**2
|
|
22
|
+
mask = r2 <= 1.0
|
|
23
|
+
z = np.zeros_like(x)
|
|
24
|
+
z[mask] = np.sqrt(1.0 - r2[mask])
|
|
25
|
+
|
|
26
|
+
nx, ny, nz = x.copy(), y.copy(), z.copy()
|
|
27
|
+
norm = np.sqrt(nx**2 + ny**2 + nz**2) + EPSILON
|
|
28
|
+
nx, ny, nz = nx / norm, ny / norm, nz / norm
|
|
29
|
+
|
|
30
|
+
# light from top left.
|
|
31
|
+
light_dir = np.array([-0.5, 0.5, 0.8])
|
|
32
|
+
light_dir /= np.linalg.norm(light_dir)
|
|
33
|
+
intensity = np.maximum(0.0, nx*light_dir[0] + ny*light_dir[1] + nz*light_dir[2])
|
|
34
|
+
shade = np.clip(-0.5 + 2.0*intensity, 0, 1)
|
|
35
|
+
|
|
36
|
+
img = np.ones((num_points_grid, num_points_grid))
|
|
37
|
+
img[mask] = shade[mask]
|
|
38
|
+
|
|
39
|
+
ax.imshow(img, cmap='gray', origin='lower', extent=[-1, 1, -1, 1], vmin=0, vmax=1, alpha=0.3)
|
|
40
|
+
ax.set_xlim([-2, 2])
|
|
41
|
+
ax.set_ylim([-2, 2])
|
|
42
|
+
ax.set_axis_off()
|
|
43
|
+
|
|
44
|
+
# add points on sphere.
|
|
45
|
+
ax.scatter(pts[:, 0], pts[:, 1], s=80, facecolor=facecolor, edgecolor='black', alpha=0.8)
|
|
46
|
+
for i in range(pts.shape[0]):
|
|
47
|
+
ax.plot([pts[i, 0], 0], [pts[i, 1], 0],
|
|
48
|
+
linestyle="--", color="black", linewidth=1, alpha=0.8)
|
|
49
|
+
|
|
50
|
+
return ax
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
if __name__ == "__main__":
|
|
54
|
+
save_path = './figures/idea.png'
|
|
55
|
+
num_points = 16
|
|
56
|
+
|
|
57
|
+
np.random.seed(1)
|
|
58
|
+
plt.rcParams['text.usetex'] = True
|
|
59
|
+
plt.rcParams['font.family'] = 'sans-serif'
|
|
60
|
+
fig = plt.figure(figsize=(18, 6))
|
|
61
|
+
|
|
62
|
+
ax = fig.add_subplot(1, 3, 1)
|
|
63
|
+
pts = sample_points_in_ball(num_points=num_points)
|
|
64
|
+
plot_ball_with_points(ax, pts, facecolor='#cde5f8')
|
|
65
|
+
|
|
66
|
+
ax = fig.add_subplot(1, 3, 2)
|
|
67
|
+
pts = sample_points_in_ball(num_points=num_points, theta_range=np.pi/4)
|
|
68
|
+
plot_ball_with_points(ax, pts, facecolor='#6a98cb')
|
|
69
|
+
|
|
70
|
+
ax = fig.add_subplot(1, 3, 3)
|
|
71
|
+
pts = sample_points_in_ball(num_points=num_points)
|
|
72
|
+
plot_ball_with_points(ax, pts, facecolor='#6a98cb')
|
|
73
|
+
|
|
74
|
+
os.makedirs(os.path.dirname(save_path), exist_ok=True)
|
|
75
|
+
fig.tight_layout(pad=2)
|
|
76
|
+
fig.savefig(save_path, dpi=300)
|