Full Code of charlesll/rampy for AI

master a2218b177990 cached
543 files
89.6 MB
11.5M tokens
167 symbols
1 requests
Copy disabled (too large) Download .txt
Showing preview only (45,885K chars total). Download the full file to get everything.
Repository: charlesll/rampy
Branch: master
Commit: a2218b177990
Files: 543
Total size: 89.6 MB

Directory structure:
gitextract_1cpthhgz/

├── .github/
│   └── workflows/
│       └── publish.yml
├── .gitignore
├── .readthedocs.yaml
├── .travis.yml
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── NEWS.md
├── README.md
├── docs/
│   ├── .nojekyll
│   ├── API.rst
│   ├── Makefile
│   ├── _static/
│   │   ├── custom.js
│   │   └── require.js
│   ├── baseline.rst
│   ├── conf.py
│   ├── dac.rst
│   ├── examples.rst
│   ├── firststeps.rst
│   ├── index.rst
│   ├── installation.rst
│   ├── machinelearning.rst
│   ├── make.bat
│   ├── maps.rst
│   ├── modules.rst
│   ├── news.rst
│   ├── notebooks/
│   │   ├── Baseline.ipynb
│   │   ├── Baseline_and_Centroid.ipynb
│   │   ├── ML_Classification.ipynb
│   │   ├── ML_Exploration.ipynb
│   │   ├── ML_Regression.ipynb
│   │   ├── Maps.ipynb
│   │   ├── Mixing.ipynb
│   │   ├── Normalisation.ipynb
│   │   ├── Raman_fitting.ipynb
│   │   ├── Resample_and_flip.ipynb
│   │   ├── Smoothing.ipynb
│   │   └── data/
│   │       ├── 4338-NDC1-(31)_4X4.txt
│   │       ├── LS4.txt
│   │       └── NS4.txt
│   ├── peakfitting.rst
│   ├── philosophy.rst
│   ├── plotting.rst
│   ├── preprocessing.rst
│   ├── requirements.txt
│   ├── setup.rst
│   ├── signalparams.rst
│   ├── smoothing.rst
│   └── utils.rst
├── environment.yml
├── examples/
│   ├── Iron_AmMin_paper/
│   │   ├── .gitignore
│   │   ├── HOWTO.txt
│   │   ├── Iron_MORB_code.ipynb
│   │   ├── MORB_datalist.xlsx
│   │   ├── iron.py
│   │   └── raw/
│   │       ├── BD1469.txt
│   │       ├── BD1470.txt
│   │       ├── BD1471.txt
│   │       ├── BD1472.txt
│   │       ├── BD1473.txt
│   │       ├── BD1474.txt
│   │       ├── BD1475.txt
│   │       ├── BD1476.txt
│   │       ├── BD1477.txt
│   │       ├── BD1478.txt
│   │       ├── VG175_.txt
│   │       ├── VG175_1.txt
│   │       ├── VG175_2.txt
│   │       ├── VG175_3.txt
│   │       ├── VG175_4.txt
│   │       ├── VG183_.txt
│   │       ├── VG183_1.txt
│   │       ├── VG183_2.txt
│   │       ├── VG183_3.txt
│   │       ├── VG183_4.txt
│   │       ├── VG186_0__X_19996.5__Y_-20032__Time_0.txt
│   │       ├── VG186_2__X_20013__Y_-20055__Time_288.txt
│   │       ├── VG186_3__X_20030.8__Y_-20026.4__Time_433.txt
│   │       ├── VG186_4__X_20028.5__Y_-20016.4__Time_577.txt
│   │       ├── VG186_5__X_19960.5__Y_-20013.9__Time_722.txt
│   │       ├── VG187_0__X_24099.5__Y_-26618.8__Time_0.txt
│   │       ├── VG187_1__X_24133.8__Y_-26769.8__Time_144.txt
│   │       ├── VG187_2__X_23341.8__Y_-27123.3__Time_288.txt
│   │       ├── VG187_3__X_23212.5__Y_-27027.5__Time_433.txt
│   │       ├── VG187_4__X_23396__Y_-27469.3__Time_577.txt
│   │       ├── VG195_0__X_12141.4__Y_-19545.2__Time_0.txt
│   │       ├── VG195_1__X_12123.9__Y_-19557.5__Time_144.txt
│   │       ├── VG195_2__X_12157.9__Y_-19558.1__Time_288.txt
│   │       ├── VG195_3__X_12155.3__Y_-19533__Time_433.txt
│   │       ├── VG195_4__X_12127.4__Y_-19533.3__Time_578.txt
│   │       ├── VG202_0__X_7648.44__Y_-27430__Time_0.txt
│   │       ├── VG202_2__X_7634.03__Y_-27444.3__Time_288.txt
│   │       ├── VG202_3__X_7637.69__Y_-27420.2__Time_433.txt
│   │       ├── VG202_4__X_7660.95__Y_-27420.3__Time_577.txt
│   │       ├── VG202_oct_1_0__Time_0.txt
│   │       ├── VG203_0__X_7115.86__Y_-23841.7__Time_0.txt
│   │       ├── VG203_1__X_7125.78__Y_-23853.3__Time_144.txt
│   │       ├── VG203_2__X_7104.88__Y_-23853.2__Time_289.txt
│   │       ├── VG203_3__X_7106.54__Y_-23831.1__Time_433.txt
│   │       ├── VG203_4__X_7128.14__Y_-23832.2__Time_578.txt
│   │       ├── VG285_.txt
│   │       ├── VG285_1.txt
│   │       ├── VG285_2.txt
│   │       ├── VG285_3.txt
│   │       ├── VG285_4.txt
│   │       ├── VG290_.txt
│   │       ├── VG290_1.txt
│   │       ├── VG290_2.txt
│   │       ├── VG290_3.txt
│   │       ├── VG290_4.txt
│   │       ├── VG3073_0__X_24960.6__Y_-31533.1__Time_0.txt
│   │       ├── VG3073_1__X_24992.5__Y_-31555.7__Time_144.txt
│   │       ├── VG3073_2__X_25001__Y_-31550.5__Time_288.txt
│   │       ├── VG3073_3__X_24857.7__Y_-31338__Time_433.txt
│   │       ├── VG3073_4__X_24824.2__Y_-31298.1__Time_577.txt
│   │       ├── VG3079_1_0__X_11675.1__Y_-22752.8__Time_0.txt
│   │       ├── VG3079_1_1__X_11646.1__Y_-22772.1__Time_144.txt
│   │       ├── VG3079_1_2__X_11683.6__Y_-22746.7__Time_288.txt
│   │       ├── VG3079_2__X_12172.8__Y_-22892.5__Time_288.txt
│   │       ├── VG3079_3__X_12190.1__Y_-22882.1__Time_433.txt
│   │       ├── VG322_.txt
│   │       ├── VG322_1_0__X_16100.5__Y_-19847__Time_0.txt
│   │       ├── VG322_1_1__X_16116.9__Y_-19849__Time_144.txt
│   │       ├── VG322_1_2__X_16121.1__Y_-19831.4__Time_288.txt
│   │       ├── VG322_1_3__X_16117.9__Y_-19809.1__Time_433.txt
│   │       ├── VG334__0__X_20679.2__Y_-18282.5__Time_0.txt
│   │       ├── VG334__1__X_20664.6__Y_-18296.1__Time_144.txt
│   │       ├── VG334__2__X_20686.6__Y_-18297.2__Time_288.txt
│   │       ├── VG334__3__X_20688.3__Y_-18269.7__Time_433.txt
│   │       ├── VG334__4__X_20668.5__Y_-18272.8__Time_577.txt
│   │       ├── VG3450_0__X_14838.7__Y_-20142.8__Time_0.txt
│   │       ├── VG3450_1__X_14855.5__Y_-20151.9__Time_144.txt
│   │       ├── VG3450_2__X_14824.5__Y_-20153.1__Time_288.txt
│   │       ├── VG3450_3__X_14828.2__Y_-20132.5__Time_433.txt
│   │       ├── VG3450_4__X_14854.7__Y_-20133.6__Time_577.txt
│   │       ├── VG3831_0__X_22339.7__Y_-19634.3__Time_0.txt
│   │       ├── VG3831_1__X_22347.2__Y_-19640.8__Time_144.txt
│   │       ├── VG3831_2__X_22353.7__Y_-19646.9__Time_289.txt
│   │       ├── VG3831_3__X_22353.7__Y_-19624.4__Time_433.txt
│   │       ├── VG3831_4__X_22307.7__Y_-19611.5__Time_577.txt
│   │       ├── VG4088_0__X_16619.1__Y_-23684.9__Time_0.txt
│   │       ├── VG4088_1__X_16607.2__Y_-23693.9__Time_144.txt
│   │       ├── VG4088_2__X_16637.3__Y_-23693.8__Time_288.txt
│   │       ├── VG4088_3__X_16638.9__Y_-23680.7__Time_433.txt
│   │       ├── VG4088_4__X_16601.1__Y_-23676__Time_577.txt
│   │       ├── VG4522_.txt
│   │       ├── VG4522_1.txt
│   │       ├── VG4522_2.txt
│   │       ├── VG4522_3.txt
│   │       ├── VG4522_4.txt
│   │       ├── VG4700_0__X_18217.1__Y_-19810.8__Time_0.txt
│   │       ├── VG4700_1__X_18227.6__Y_-19821.2__Time_144.txt
│   │       ├── VG4700_2__X_18192.8__Y_-19824__Time_288.txt
│   │       ├── VG4700_3__X_18200.5__Y_-19800.4__Time_433.txt
│   │       ├── VG4700_4__X_18243.3__Y_-19813.8__Time_577.txt
│   │       ├── VG4701_0__X_25688.9__Y_-19810.7__Time_0.txt
│   │       ├── VG4701_1__X_25704.9__Y_-19815.2__Time_144.txt
│   │       ├── VG4701_2__X_25683.3__Y_-19817.4__Time_288.txt
│   │       ├── VG4701_3__X_25682.4__Y_-19803__Time_433.txt
│   │       ├── VG4701_4__X_25702.6__Y_-19801.7__Time_577.txt
│   │       ├── VG4709_0__X_21085.2__Y_-21479.9__Time_0.txt
│   │       ├── VG4709_1__X_21089.9__Y_-21483.4__Time_144.txt
│   │       ├── VG4709_2__X_21078.7__Y_-21485__Time_288.txt
│   │       ├── VG4709_3__X_21076.9__Y_-21474.6__Time_433.txt
│   │       ├── VG4709_4__X_21091.3__Y_-21472.8__Time_577.txt
│   │       ├── VG4971_.txt
│   │       ├── VG4971_1.txt
│   │       ├── VG4971_2.txt
│   │       ├── VG4971_3.txt
│   │       ├── VG4971_4.txt
│   │       ├── VG4974_.txt
│   │       ├── VG4974_1.txt
│   │       ├── VG4974_2.txt
│   │       ├── VG4974_3.txt
│   │       ├── VG4974_4.txt
│   │       ├── VG5374_0__X_18181.5__Y_-18038.6__Time_0.txt
│   │       ├── VG5374_1__X_18194.5__Y_-18046.3__Time_144.txt
│   │       ├── VG5374_2__X_18171__Y_-18046.7__Time_289.txt
│   │       ├── VG5374_3__X_18171.4__Y_-18026.8__Time_433.txt
│   │       ├── VG5374_4__X_18196__Y_-18028.4__Time_578.txt
│   │       ├── VG5697_.txt
│   │       ├── VG5697_1.txt
│   │       ├── VG5697_2.txt
│   │       ├── VG5697_3.txt
│   │       ├── VG5697_4.txt
│   │       ├── VG5781_.txt
│   │       ├── VG5781_1.txt
│   │       ├── VG5781_2.txt
│   │       ├── VG5781_3.txt
│   │       ├── VG5781_4.txt
│   │       ├── VG612_0__X_19514__Y_-19276.6__Time_0.txt
│   │       ├── VG612_1__X_19551.8__Y_-19295.8__Time_144.txt
│   │       ├── VG612_2__X_19501__Y_-19341__Time_288.txt
│   │       ├── VG612_3__X_19376.6__Y_-19350.4__Time_433.txt
│   │       ├── VG612_4__X_19287.5__Y_-19296.3__Time_577.txt
│   │       ├── VG662_0__X_13277.4__Y_-18492.1__Time_0.txt
│   │       ├── VG662_1__X_13303.4__Y_-18492.5__Time_144.txt
│   │       ├── VG662_2__X_13292.4__Y_-18480.4__Time_288.txt
│   │       ├── VG662_3__X_13277.7__Y_-18471.3__Time_433.txt
│   │       ├── VG662_4__X_13305.5__Y_-18472.1__Time_577.txt
│   │       ├── VG663_0__X_19823.3__Y_-22023.6__Time_0.txt
│   │       ├── VG663_1__X_19837.8__Y_-22035.6__Time_144.txt
│   │       ├── VG663_2__X_19805.4__Y_-22037.8__Time_288.txt
│   │       ├── VG663_3__X_19806.7__Y_-22010.3__Time_433.txt
│   │       ├── VG663_4__X_19837.2__Y_-22009.6__Time_577.txt
│   │       ├── VG664_.txt
│   │       ├── VG664_1_0__X_22184.8__Y_-25677.4__Time_0.txt
│   │       ├── VG664_1_1__X_22206.1__Y_-25676.3__Time_144.txt
│   │       ├── VG664_1_2__X_22208__Y_-25658.1__Time_288.txt
│   │       ├── VG664_1_3__X_22187.4__Y_-25657.9__Time_433.txt
│   │       ├── VG665_0__X_20243__Y_-29172.7__Time_0.txt
│   │       ├── VG665_1__X_20224.6__Y_-29185.8__Time_144.txt
│   │       ├── VG665_2__X_20259.3__Y_-29185.8__Time_288.txt
│   │       ├── VG665_3__X_20256__Y_-29162.3__Time_433.txt
│   │       ├── VG665_4__X_20228.7__Y_-29164.4__Time_577.txt
│   │       ├── VG666_0__X_17346.8__Y_-34522__Time_0.txt
│   │       ├── VG666_1__X_17421.8__Y_-34598.7__Time_144.txt
│   │       ├── VG666_2__X_17405.1__Y_-34315.9__Time_288.txt
│   │       ├── VG666_3__X_17494__Y_-34130.6__Time_433.txt
│   │       ├── VG666_4__X_17737.3__Y_-34226.4__Time_577.txt
│   │       ├── VG667_0__X_11954.1__Y_-36113.4__Time_0.txt
│   │       ├── VG667_1__X_11990.4__Y_-36038.7__Time_121.txt
│   │       ├── VG667_2__X_12073__Y_-36190.4__Time_242.txt
│   │       ├── VG667_3__X_12104.7__Y_-36244.6__Time_363.txt
│   │       ├── VG667_4__X_11944.8__Y_-36273.5__Time_484.txt
│   │       ├── VG6820_1__X_18106.3__Y_-19219.9__Time_144.txt
│   │       ├── VG6820_2__X_18084.6__Y_-19220.3__Time_288.txt
│   │       ├── VG6820_3__X_18087__Y_-19205.7__Time_433.txt
│   │       ├── VG6820_4__X_18107.9__Y_-19208.1__Time_577.txt
│   │       ├── VG6821_0__X_20030__Y_-21785.8__Time_0.txt
│   │       ├── VG6821_1__X_20045.4__Y_-21791.9__Time_144.txt
│   │       ├── VG6821_2__X_20057.6__Y_-21798.9__Time_288.txt
│   │       ├── VG6821_3__X_20070.5__Y_-21804.6__Time_433.txt
│   │       ├── VG6821_4__X_20083.2__Y_-21811.1__Time_577.txt
│   │       ├── VG6822_0__X_24458__Y_-27315.2__Time_0.txt
│   │       ├── VG6822_1__X_24458__Y_-27320.2__Time_144.txt
│   │       ├── VG6822_2__X_24458__Y_-27325.9__Time_288.txt
│   │       ├── VG6822_3__X_24458.5__Y_-27311.2__Time_433.txt
│   │       ├── VG6822_4__X_24462.7__Y_-27318.5__Time_577.txt
│   │       ├── VG6823_0__X_22497.6__Y_-30686__Time_0.txt
│   │       ├── VG6823_1__X_22481.9__Y_-30677.8__Time_144.txt
│   │       ├── VG6823_2__X_22494.1__Y_-30681__Time_288.txt
│   │       ├── VG6823_3__X_22498.1__Y_-30698.8__Time_433.txt
│   │       ├── VG6823_4__X_22534.1__Y_-30695.7__Time_577.txt
│   │       ├── VG6825_0__X_20612.2__Y_-36086.8__Time_0.txt
│   │       ├── VG6825_1__X_20606.3__Y_-36082.9__Time_144.txt
│   │       ├── VG6825_2__X_20644.3__Y_-36091.5__Time_288.txt
│   │       ├── VG6825_3__X_20631__Y_-36083.9__Time_433.txt
│   │       ├── VG6825_4__X_20627.8__Y_-36107.1__Time_577.txt
│   │       ├── VG682_.txt
│   │       ├── VG682_1.txt
│   │       ├── VG682_2.txt
│   │       ├── VG682_3.txt
│   │       ├── VG682_4.txt
│   │       ├── VG684_.txt
│   │       ├── VG684_1.txt
│   │       ├── VG684_2.txt
│   │       ├── VG684_3.txt
│   │       ├── VG684_4.txt
│   │       ├── VG758_0__X_19316.1__Y_-19291.2__Time_0.txt
│   │       ├── VG758_1__X_19323.2__Y_-19296__Time_144.txt
│   │       ├── VG758_2__X_19306.6__Y_-19297.7__Time_288.txt
│   │       ├── VG758_3__X_19307.1__Y_-19283.1__Time_433.txt
│   │       ├── VG758_4__X_19324.5__Y_-19284.8__Time_577.txt
│   │       ├── VG884_0__X_17275.9__Y_-20515.2__Time_0.txt
│   │       ├── VG884_1__X_17251.2__Y_-20417.2__Time_144.txt
│   │       ├── VG884_2__X_17127.6__Y_-20407.9__Time_288.txt
│   │       ├── VG884_3__X_17100.7__Y_-20385.9__Time_433.txt
│   │       ├── VG884_4__X_16946.2__Y_-20511.5__Time_577.txt
│   │       ├── r145.txt
│   │       ├── r147.txt
│   │       ├── r148.txt
│   │       ├── r149.txt
│   │       ├── r150.txt
│   │       ├── r151.txt
│   │       ├── r152.txt
│   │       ├── r153.txt
│   │       ├── r154.txt
│   │       ├── r155.txt
│   │       ├── r156.txt
│   │       ├── r157.txt
│   │       ├── r158.txt
│   │       ├── r159.txt
│   │       ├── r160.txt
│   │       ├── r161.txt
│   │       ├── r162.txt
│   │       ├── r163.txt
│   │       ├── r164.txt
│   │       ├── r165.txt
│   │       ├── r236.txt
│   │       ├── r237.txt
│   │       ├── r238.txt
│   │       ├── r239.txt
│   │       ├── r240.txt
│   │       ├── r241.txt
│   │       ├── r268_0.txt
│   │       ├── r268_1.txt
│   │       ├── r268_2.txt
│   │       ├── r269_0.txt
│   │       ├── r269_1.txt
│   │       ├── r269_2.txt
│   │       ├── r270_0.txt
│   │       ├── r270_1.txt
│   │       ├── r270_2.txt
│   │       ├── r271_0.txt
│   │       ├── r271_1.txt
│   │       ├── r271_2.txt
│   │       ├── r272_0.txt
│   │       ├── r272_1.txt
│   │       ├── r272_2.txt
│   │       ├── r273_0.txt
│   │       ├── r273_1.txt
│   │       ├── r273_2.txt
│   │       ├── r275_0.txt
│   │       ├── r275_1.txt
│   │       ├── r275_2.txt
│   │       ├── r276_0.txt
│   │       ├── r276_1.txt
│   │       ├── r276_2.txt
│   │       ├── r277_0.txt
│   │       ├── r277_1.txt
│   │       ├── r277_2.txt
│   │       ├── r278_0.txt
│   │       ├── r278_1.txt
│   │       ├── r278_2.txt
│   │       ├── r362.txt
│   │       ├── r363.txt
│   │       ├── r364.txt
│   │       ├── r365.txt
│   │       ├── r520.txt
│   │       ├── r521.txt
│   │       ├── r522.txt
│   │       ├── r523.txt
│   │       ├── r524.txt
│   │       ├── r711.txt
│   │       ├── r712.txt
│   │       ├── r714.txt
│   │       ├── r715.txt
│   │       ├── r716.txt
│   │       ├── r717.txt
│   │       ├── r718.txt
│   │       ├── r719.txt
│   │       ├── r720.txt
│   │       ├── r721.txt
│   │       ├── r722.txt
│   │       ├── r723.txt
│   │       ├── r724.txt
│   │       ├── r725.txt
│   │       ├── r726.txt
│   │       ├── r727.txt
│   │       ├── r728.txt
│   │       ├── r729.txt
│   │       ├── r730.txt
│   │       ├── r731.txt
│   │       ├── r732.txt
│   │       ├── r733.txt
│   │       ├── r738.txt
│   │       ├── r739.txt
│   │       └── r740.txt
│   ├── README.md
│   └── rameau_example/
│       ├── Python_treatment.ipynb
│       ├── Python_treatment_ext.ipynb
│       ├── README.md
│       ├── dataset.xlsx
│       ├── rameau.py
│       └── raw/
│           ├── Som-13-17.txt
│           ├── Som-13-18.txt
│           ├── Som-13-19.txt
│           ├── Som-14-18.txt
│           ├── Som-14-19.txt
│           ├── Som-14-20.txt
│           ├── Som-15-11.txt
│           ├── Som-15-12.txt
│           ├── Som-15-13.txt
│           ├── Som-16-15.txt
│           ├── Som-16-27.txt
│           ├── Som-16-28.txt
│           ├── ac8014.txt
│           ├── ac8015.txt
│           ├── ac8028.txt
│           ├── ac8037.txt
│           ├── ac8041.txt
│           ├── ac9025.txt
│           ├── ac9026.txt
│           ├── ac9027.txt
│           ├── ac9028.txt
│           ├── ac9029.txt
│           ├── ac9030.txt
│           ├── ad0085.txt
│           ├── ad0086.txt
│           ├── ad0087.txt
│           ├── ad0090.txt
│           ├── ad0091.txt
│           ├── ad0098.txt
│           ├── ad0099.txt
│           ├── ad0100.txt
│           ├── ad0101.txt
│           ├── ad0102.txt
│           ├── ad0104.txt
│           ├── ad0105.txt
│           ├── ad0107.txt
│           ├── ad0108.txt
│           ├── ad0110.txt
│           ├── ad0111.txt
│           ├── ad0112.txt
│           ├── ad0114.txt
│           ├── ad0116.txt
│           ├── ad0117.txt
│           ├── ad0118.txt
│           ├── ad0119.txt
│           ├── ad0120.txt
│           ├── ad0122.txt
│           ├── ad0123.txt
│           ├── ae0187.txt
│           ├── ae0188.txt
│           ├── ae0190.txt
│           ├── ae0191.txt
│           ├── ae0192.txt
│           ├── ae0199.txt
│           ├── ae0202.txt
│           ├── ae0203.txt
│           ├── ae0204.txt
│           ├── ae0405.txt
│           ├── ae0406.txt
│           ├── ae0409.txt
│           ├── ae0441.txt
│           ├── ae0442.txt
│           ├── ae0443.txt
│           ├── ae0660.txt
│           ├── ae0664.txt
│           ├── ae0674.txt
│           ├── ae0675.txt
│           ├── ae0676.txt
│           ├── ae0682.txt
│           ├── ae0684.txt
│           ├── ae0685.txt
│           ├── ae0980.txt
│           ├── r010.txt
│           ├── r015.txt
│           ├── r016.txt
│           ├── r024.txt
│           ├── r025.txt
│           ├── r026.txt
│           ├── r027.txt
│           ├── r030.txt
│           ├── r031.txt
│           ├── r032.txt
│           ├── r034.txt
│           ├── r039.txt
│           ├── r040.txt
│           ├── r041.txt
│           ├── r042.txt
│           ├── r044_0.txt
│           ├── r044_1.txt
│           ├── r044_2.txt
│           ├── r044_3.txt
│           ├── r044_4.txt
│           ├── r044_5.txt
│           ├── r049.txt
│           ├── r051.txt
│           ├── r107.txt
│           ├── r108.txt
│           ├── r109.txt
│           ├── r110.txt
│           ├── r111.txt
│           ├── r112.txt
│           ├── r113.txt
│           ├── r114.txt
│           ├── r116_0.txt
│           ├── r116_1.txt
│           ├── r116_2.txt
│           ├── r116_3.txt
│           ├── r116_4.txt
│           ├── r116_5.txt
│           ├── r118_0.txt
│           ├── r118_1.txt
│           ├── r118_2.txt
│           ├── r386.txt
│           ├── r387.txt
│           ├── r388.txt
│           ├── r389.txt
│           ├── r393.txt
│           ├── r397.txt
│           ├── r487_0.txt
│           ├── r487_1.txt
│           ├── r487_3.txt
│           ├── r487_4.txt
│           ├── r703.txt
│           ├── r704.txt
│           ├── r705.txt
│           ├── r706.txt
│           ├── r707.txt
│           └── r708.txt
├── legacy_code/
│   ├── Diamond_Pressure.py
│   ├── HF_Treatment_Auto.py
│   ├── HT_dec.py
│   ├── IR_dec_comb.py
│   ├── I_Io_calc.py
│   ├── LF_Treatment.py
│   ├── LF_dec.py
│   ├── README.md
│   ├── Remove_Ctx_MI.py
│   ├── cleaning.py
│   └── rameau_construction
├── pyproject.toml
├── roadmap.md
├── src/
│   ├── rampy/
│   │   ├── .gitignore
│   │   ├── __init__.py
│   │   ├── baseline.py
│   │   ├── dac.py
│   │   ├── filters.py
│   │   ├── functions.py
│   │   ├── maps.py
│   │   ├── mixing.py
│   │   ├── ml_classification.py
│   │   ├── ml_exploration.py
│   │   ├── ml_regressor.py
│   │   ├── notused/
│   │   │   └── IRTABS.py
│   │   ├── peak_area.py
│   │   ├── peak_shapes.py
│   │   ├── plotting.py
│   │   ├── rameau.py
│   │   ├── spectranization.py
│   │   └── tlcorrection.py
│   └── rampy.egg-info/
│       ├── PKG-INFO
│       ├── SOURCES.txt
│       ├── dependency_links.txt
│       ├── requires.txt
│       └── top_level.txt
└── tests/
    ├── __init__.py
    ├── map_test.txt
    ├── test_baseline.py
    ├── test_dac.py
    ├── test_mixing.py
    ├── test_mlclassificator.py
    ├── test_mlexplorer.py
    ├── test_mlregressor.py
    ├── test_peakarea.py
    ├── test_plotting.py
    ├── test_rameau.py
    ├── test_smooth.py
    ├── test_spectranization.py
    └── test_tlcorrection.py

================================================
FILE CONTENTS
================================================

================================================
FILE: .github/workflows/publish.yml
================================================
name: Upload Python Package to PyPI when a Release is Created

on:
  release:
    types: [created]

jobs:
  pypi-publish:
    name: Publish release to PyPI
    runs-on: ubuntu-latest
    environment:
      name: pypi
      url: https://pypi.org/p/rampy
    permissions:
      id-token: write
    steps:
      - uses: actions/checkout@v4
      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: "3.x"
      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          python -m pip install --upgrade build
      - name: Build package
        run: |
          python -m build  # Could also be python setup.py sdist bdist_wheel
      - name: Publish package distributions to PyPI
        uses: pypa/gh-action-pypi-publish@release/v1

================================================
FILE: .gitignore
================================================
.DS_STORE
/dist/
/dev/
/docs/doctrees/
/docs/build/
/docs/html/
/build/
.ipynb_checkpoints/
/rampy.egg-info/
/.pytest_cache/
/.cache/
__pycache__
.pyc


================================================
FILE: .readthedocs.yaml
================================================
# Read the Docs configuration file for Sphinx projects
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details

# Required
version: 2

# Set the OS, Python version and other tools you might need
build:
  os: ubuntu-22.04
  tools:
    python: "3.12"
    # You can also specify other tool versions:
    # nodejs: "20"
    # rust: "1.70"
    # golang: "1.20"

# Build documentation in the "docs/" directory with Sphinx
sphinx:
  configuration: docs/conf.py
  # You can configure Sphinx to use a different builder, for instance use the dirhtml builder for simpler URLs
  # builder: "dirhtml"
  # Fail on all warnings to avoid broken references
  # fail_on_warning: true

# Optionally build your docs in additional formats such as PDF and ePub
# formats:
#   - pdf
#   - epub

# Optional but recommended, declare the Python requirements required
# to build your documentation
# See https://docs.readthedocs.io/en/stable/guides/reproducible-builds.html
python:
  install:
    - requirements: docs/requirements.txt
    - method: pip
      path: .

================================================
FILE: .travis.yml
================================================
language: python
python:
  - "3.11"

os:
  - linux

install:
  - pip install cvxpy
  - pip install .
# command to run tests
script: pytest


================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Code of Conduct

## Our Pledge

In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, gender identity and expression, level of experience,
nationality, personal appearance, race, religion, or sexual identity and
orientation.

## Our Standards

Examples of behavior that contributes to creating a positive environment
include:

* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members

Examples of unacceptable behavior by participants include:

* The use of sexualized language or imagery and unwelcome sexual attention or
advances
* Trolling, insulting/derogatory/aggresive comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic
  address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a
  professional setting

## Our Responsibilities

Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.

Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.

## Scope

This Code of Conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community. Examples of
representing a project or community include using an official project e-mail
address, posting via an official social media account, or acting as an appointed
representative at an online or offline event. Representation of a project may be
further defined and clarified by project maintainers.

## Enforcement

Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at charles.lelosq@anu.edu.au. All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.

Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.

## Attribution

This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
available at [http://contributor-covenant.org/version/1/4][version]

[homepage]: http://contributor-covenant.org
[version]: http://contributor-covenant.org/version/1/4/


================================================
FILE: CONTRIBUTING.md
================================================
# Contributing

Any contribution is more than welcome!

When contributing to this repository, please first discuss the change you wish to make via issue,
email, or any other method with the owners of this repository before making a change. 

Please note we have a code of conduct, please follow it in all your interactions with the project.

## Pull Request Process

1. Ensure any install or build dependencies are removed before the end of the layer when doing a 
   build.
2. Update the README.md and NEWS.md with details of changes to the interface, this includes new environment variables, exposed ports, useful file locations and container parameters.
3. Increase the version numbers in any examples files and the NEWS.md to the new version that this
   Pull Request would represent. The versioning scheme we use is [SemVer](http://semver.org/).

================================================
FILE: LICENSE
================================================
GNU GENERAL PUBLIC LICENSE
                       Version 2, June 1991

 Copyright (C) 1989, 1991 Free Software Foundation, Inc., <http://fsf.org/>
 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

                            Preamble

  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users.  This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it.  (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.)  You can apply it to
your programs, too.

  When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.

  To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.

  For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have.  You must make sure that they, too, receive or can get the
source code.  And you must show them these terms so they know their
rights.

  We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.

  Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software.  If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.

  Finally, any free program is threatened constantly by software
patents.  We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary.  To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.

  The precise terms and conditions for copying, distribution and
modification follow.

                    GNU GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License.  The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language.  (Hereinafter, translation is included without limitation in
the term "modification".)  Each licensee is addressed as "you".

Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.

  1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.

You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.

  2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:

    a) You must cause the modified files to carry prominent notices
    stating that you changed the files and the date of any change.

    b) You must cause any work that you distribute or publish, that in
    whole or in part contains or is derived from the Program or any
    part thereof, to be licensed as a whole at no charge to all third
    parties under the terms of this License.

    c) If the modified program normally reads commands interactively
    when run, you must cause it, when started running for such
    interactive use in the most ordinary way, to print or display an
    announcement including an appropriate copyright notice and a
    notice that there is no warranty (or else, saying that you provide
    a warranty) and that users may redistribute the program under
    these conditions, and telling the user how to view a copy of this
    License.  (Exception: if the Program itself is interactive but
    does not normally print such an announcement, your work based on
    the Program is not required to print an announcement.)

These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works.  But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.

Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.

In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

  3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:

    a) Accompany it with the complete corresponding machine-readable
    source code, which must be distributed under the terms of Sections
    1 and 2 above on a medium customarily used for software interchange; or,

    b) Accompany it with a written offer, valid for at least three
    years, to give any third party, for a charge no more than your
    cost of physically performing source distribution, a complete
    machine-readable copy of the corresponding source code, to be
    distributed under the terms of Sections 1 and 2 above on a medium
    customarily used for software interchange; or,

    c) Accompany it with the information you received as to the offer
    to distribute corresponding source code.  (This alternative is
    allowed only for noncommercial distribution and only if you
    received the program in object code or executable form with such
    an offer, in accord with Subsection b above.)

The source code for a work means the preferred form of the work for
making modifications to it.  For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable.  However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.

If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.

  4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License.  Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.

  5. You are not required to accept this License, since you have not
signed it.  However, nothing else grants you permission to modify or
distribute the Program or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.

  6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions.  You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.

  7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all.  For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.

If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.

It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices.  Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.

This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.

  8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded.  In such case, this License incorporates
the limitation as if written in the body of this License.

  9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time.  Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

Each version is given a distinguishing version number.  If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation.  If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.

  10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission.  For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this.  Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.

                            NO WARRANTY

  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.

  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.

                     END OF TERMS AND CONDITIONS

            How to Apply These Terms to Your New Programs

  If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

  To do so, attach the following notices to the program.  It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

    {description}
    Copyright (C) {year}  {fullname}

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License along
    with this program; if not, write to the Free Software Foundation, Inc.,
    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

Also add information on how to contact you by electronic and paper mail.

If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:

    Gnomovision version 69, Copyright (C) year name of author
    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    This is free software, and you are welcome to redistribute it
    under certain conditions; type `show c' for details.

The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License.  Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary.  Here is a sample; alter the names:

  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
  `Gnomovision' (which makes passes at compilers) written by James Hacker.

  {signature of Ty Coon}, 1 April 1989
  Ty Coon, President of Vice

This General Public License does not permit incorporating your program into
proprietary programs.  If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library.  If this is what you want to do, use the GNU Lesser General
Public License instead of this License.


================================================
FILE: NEWS.md
================================================
# Rampy News

Copyright (c) 2014-2025 Dr. Charles Le Losq et al.

email: lelosq@ipgp.fr

Licence: see LICENCE.md

# Wanted features (planned)

- Addition of more unsupervised machine learning techniques

- Classification via 1D CNN and other algorithms using Keras or Pytorch

- peak fitting (in particular for maps): working on a Scikit-Learn API

# 0.6.4 (stable)

  - fix usage of tlcorrection with the area normalisation (issue #40)
  - fix docstrings (issue #39)
  - fix QDA classification example and test (use solver='eigen' and shrinkage='auto').

# 0.6.3

  - fix 'roi' and 'method' arguments in baseline() function (issue #38)


# 0.6.2

  - Fix the documentation.

# 0.6.0

## Additions

  - area_peak(): function to calculate analytically the area of peaks in a spectrum.

## Modifications

  - Minimal Python version is now 3.10
  - normalise(): "area" normalisation now uses the simpson() function from scipy.integrate, instead of the trapezoidal rule. This should be more precise.

# Improvements

  - maps(): documentation of the class has been improved.

## Fix

  - baseline(): a problem with the roi has been raised (issue #34). This is now fixed, roi argument is completely optional.
  - resample(): fill_value was not working properly (not the good default option). It is now fixed. resample() will extrapolate automatically.

# 0.6.0

## Improvements:

  - baseline(): we use the make_smoothing_spline function from Scipy for the GCVSmoothedNSpline smoothing mode (smooth function) and the gcvspline baseline, in replaced of the call to the gcvspline library.  make_smoothing_spline is a reimplenetation of the Woltring Fortran code in gcvspline library, so modulo numerical errors, it returns the same results. This offers now the gcvspline baseline to all, without problem of Fortran compilation.
  - baseline(): bir are now an optional argument in rampy.baseline (because they do not appear in als, arPLS and drPLS algorithms)
  - peakarea(): function is improved and a test is added.
  - mlclassificator(): this class was badly handling model parameters. This is now fixed. The code has been improved.
  - various improvements of the code formatting
  - tests & examples updated
  - docstrings re-written in Google Style
  - docs updated

## Additions:

  - plot_spectrum(): makes an interactive plot of a signal, and also possibly of added baselines and smoothed signals.
  - whittaker(): it is now possible to pass weights
  - baseline(): Whittaker and Gaussian process baselines going through regions of interest is also available in the baseline() function 
  - ruby_T_corr(): Computes the temperature correction for the Ruby pressure scale.
  - borate_T_corr(): Computes the temperature correction for the SrB4O7:Sm2+ pressure scale.
  - pressure_sensor(): Converts the wavelength of fluorescence lines into pressure in GPa.

## Deprecation:

  - get_portion_interest() becomes extract_signal(). get_portion_interest() still works but it will be removed in a future release

# 0.5.3

- Correction in despiking function (thanks Kevin Yuan)

# 0.5.2

- fix installation : something went bad as we switched to pyproject.toml in 0.5.1

# 0.5.1

- fix installation dependencies

# 0.5.0

- map() function is now maps() to avoid any conflict with built-in Python map() function

- add the possiblity of importing lines of spectra for Horiba spectrometers

- add a despiking() function

- add external calibration in rameau

- add the posibility to calibrate K coefficient(s) on another dataset of spectra

- correction of a typo in mlclassificator function

# 0.4.9

- quick fix of a bug in read_horiba function (from rampy.maps) 

# 0.4.8

- area and area ratio calculations available for maps

- read_horiba function (from rampy.maps) corrected (Github issue #25)

- rubberband baseline was fixed, test added, fit_baseline example update (Github issue #1, thanks @sjfraser05)

# 0.4.7

- urgent correction of a bug in rp.pseudovoigt() > float entries were resulting in an error message...

- map treatment available for HORIBA and RENISHAW spectrometer (see example folder). Please report any bug!

# 0.4.6

- doc improvements

- cvxpy 1.1 or higher is an optional dependency.

- switch to setup.cfg

- add shiftsp() function

# 0.4.5

- update docs

- enhancing the pseudovoigt section for its use with arrays

- adding an experimental "peakarea" function

- drPLS algorithm added in baselines (thanks @Snijderfrey)

# 0.4.4

- Cleaning the code

- Correction of a bug in tlcorrection

- add lorentzian() and pearson7() peak shape functions

- add mlexplorator function for easy PCA/NMF on spectroscopic data

- update docs

# 0.4.3

- Improvements in documentation of mlregressor.

- Improvements of rampy.normalise and rampy.centroid. Those functions can treat arrays of spectra now.

- Correction of a bug in rampy.normalize that caused the "area" method to not work when entering x.

- Better tests

# 0.4.2

- Removing dependency to cvxpy that does not build well in Windows... It affects the use of the rampy.mixing function

# 0.4.1

- Correction of an error in `mlregressor` which made impossible to import X_test datasets.

# 0.4.0

- BREAKING CHANGE: `mlregressor` is now a class and not a function anymore. You can provide directly sklearn arguments to the algorithms through dictionaries.
  The use of the class simplifies the use of `mlregressor`, as the created objects saves everything!
  It also makes it very easy to change the algorithm and try something else. See the example in the example folder!

- addition of the `centroid()` function, that calculates the centroid of a signal.

- addition of tests and examples for the `mlregressor()` class, the `resample()` and `flipsp()` functions.

- `chemical_splitting()` allows one to select the random seed.

- Correction of the `mixing_sp()` function, rampy is now compatible with cvxpy v1.0.

- arguments can be provided to `resample()` to use different techniques of interpolation in `scipy.interpolate.interp1d`.

- Various documentation improvements

# 0.3.6

- Correction of the `tlcorrection()` function: the 'hehlen' correction was missing a frequency term to be complete (eq. 2 and 3 in Hehlen 2010 J. Phys. Condes. Matter 22: 025401).

# 0.3.5

- Addition of the `rampy.mixing_sp()` function. See `help(rampy.mixing_sp())`, as well as the example folder.

# 0.3.4

- gcvspline is not a requirement anymore. Error messages will outputs when trying to use it, inviting to install it manually. This is implemented to avoid problems with FORTRAN compilation for people not interested in using gcvspline.

- Add early stopping in` mlregressor` neural networks.

# 0.3.3

- Minor dependency correction

# 0.3.2

- Adding the names in the `rameau` object
- Improvements of the `mlregressor` function, with addition of neural nets and bagging neural nets algorithms

# 0.3.1

- Rameau is now an object-oriented interface

- `smooth()` function updated; 10 algorithms are available.

- updated example of peak fitting

# 0.3.0

- Documentation improvements

- Python 3 compatible

- Addition of the Rameau function

# 0.2.9

- addition of gaussian baseline

- addition of `flipsp()` to flip spectra along the axis 0

- addition of `resample()` to resample spectra with scipy.interpolate

- improvement of `tlcorrection`

# 0.2.8

- addition of the `tlcorrection()` function to replace the Long function

# 0.2.7

- Minor correction of the `baseline()` documentation and removing a `print()` command.

# 0.2.6

- standardizatin in the `baseline()` function is now included (improve polynomial fits);

- addition of the arPLS algorithm from Baek et al. (2015) to automatic fit the baseline;

- addition of the whittaker smoother to fit the baseline (Eiler 2003);

- addition of the ALS algorithm (Eilers and Boelens 2005).


================================================
FILE: README.md
================================================
# RamPy
=======

[![Build Status](https://travis-ci.org/charlesll/rampy.svg?branch=master)](https://travis-ci.org/charlesll/rampy)
[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.1168729.svg)](https://doi.org/10.5281/zenodo.1168729) [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/charlesll/rampy.git/master)
![GitHub](https://img.shields.io/github/license/charlesll/rampy)

Rampy is a Python library that aims at helping processing spectroscopic data, such as Raman, Infrared or XAS spectra. It offers various functions, for instance to subtract baselines, resample and smooth spectra, perform machine learning classification, etc. It aims at facilitating the use of Python in processing spectroscopic data. It integrates within a workflow that uses Numpy/Scipy/Matplotlib as well as optimisation libraries such as lmfit, emcee or PyMC, for instance.

Check the documentation for more information!

- **Documentation:** https://rampy.readthedocs.io
- **Examples** see docs and https://github.com/charlesll/rampy/tree/master/examples
- **Source code:** https://github.com/charlesll/rampy/tree/master/rampy
- **Contributing:** https://github.com/charlesll/rampy/blob/master/CONTRIBUTING.md
- **Bug reports:** https://github.com/charlesll/rampy/issues
- **Contact** lelosq@ipgp.fr


================================================
FILE: docs/.nojekyll
================================================


================================================
FILE: docs/API.rst
================================================
rampy API
=============

Subpackages
-----------

.. toctree::
   :maxdepth: 4

Submodules
----------

rampy.baseline module
---------------------

.. automodule:: rampy.baseline
   :members:
   :undoc-members:
   :show-inheritance:

rampy.filters module
--------------------

.. automodule:: rampy.filters
   :members:
   :undoc-members:
   :show-inheritance:

rampy.plotting module
---------------------

.. automodule:: rampy.plotting
   :members:
   :undoc-members:
   :show-inheritance:

rampy.functions module
----------------------

.. automodule:: rampy.functions
   :members:
   :undoc-members:
   :show-inheritance:

rampy.maps module
-----------------

.. automodule:: rampy.maps
   :members:
   :undoc-members:
   :show-inheritance:

rampy.mixing module
-------------------

.. automodule:: rampy.mixing
   :members:
   :undoc-members:
   :show-inheritance:

rampy.ml\_classification module
-------------------------------

.. automodule:: rampy.ml_classification
   :members:
   :undoc-members:
   :show-inheritance:

rampy.ml\_exploration module
----------------------------

.. automodule:: rampy.ml_exploration
   :members:
   :undoc-members:
   :show-inheritance:

rampy.ml\_regressor module
--------------------------

.. automodule:: rampy.ml_regressor
   :members:
   :undoc-members:
   :show-inheritance:

rampy.peak\_area module
-----------------------

.. automodule:: rampy.peak_area
   :members:
   :undoc-members:
   :show-inheritance:

rampy.peak\_shapes module
-------------------------

.. automodule:: rampy.peak_shapes
   :members:
   :undoc-members:
   :show-inheritance:

rampy.rameau module
-------------------

.. automodule:: rampy.rameau
   :members:
   :undoc-members:
   :show-inheritance:

rampy.spectranization module
----------------------------

.. automodule:: rampy.spectranization
   :members:
   :undoc-members:
   :show-inheritance:

rampy.tlcorrection module
-------------------------

.. automodule:: rampy.tlcorrection
   :members:
   :undoc-members:
   :show-inheritance:


================================================
FILE: docs/Makefile
================================================
# Minimal makefile for Sphinx documentation
#

# You can set these variables from the command line, and also
# from the environment for the first two.
SPHINXOPTS    ?=
SPHINXBUILD   ?= sphinx-build
SOURCEDIR     = .
BUILDDIR      = .

# Put it first so that "make" without argument is like "make help".
help:
	@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)

.PHONY: help Makefile

# Catch-all target: route all unknown targets to Sphinx using the new
# "make mode" option.  $(O) is meant as a shortcut for $(SPHINXOPTS).
%: Makefile
	@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)


================================================
FILE: docs/_static/custom.js
================================================
requirejs.config({
    paths: {
        base: '/static/base',
        plotly: 'https://cdn.plot.ly/plotly-2.12.1.min.js?noext',
    },
});


================================================
FILE: docs/_static/require.js
================================================
/** vim: et:ts=4:sw=4:sts=4
 * @license RequireJS 2.3.7 Copyright jQuery Foundation and other contributors.
 * Released under MIT license, https://github.com/requirejs/requirejs/blob/master/LICENSE
 */
var requirejs,require,define;!function(global,setTimeout){var req,s,head,baseElement,dataMain,src,interactiveScript,currentlyAddingScript,mainScript,subPath,version="2.3.7",commentRegExp=/\/\*[\s\S]*?\*\/|([^:"'=]|^)\/\/.*$/gm,cjsRequireRegExp=/[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g,jsSuffixRegExp=/\.js$/,currDirRegExp=/^\.\//,op=Object.prototype,ostring=op.toString,hasOwn=op.hasOwnProperty,isBrowser=!("undefined"==typeof window||"undefined"==typeof navigator||!window.document),isWebWorker=!isBrowser&&"undefined"!=typeof importScripts,readyRegExp=isBrowser&&"PLAYSTATION 3"===navigator.platform?/^complete$/:/^(complete|loaded)$/,defContextName="_",isOpera="undefined"!=typeof opera&&"[object Opera]"===opera.toString(),contexts={},cfg={},globalDefQueue=[],useInteractive=!1,disallowedProps=["__proto__","constructor"];function commentReplace(e,t){return t||""}function isFunction(e){return"[object Function]"===ostring.call(e)}function isArray(e){return"[object Array]"===ostring.call(e)}function each(e,t){if(e)for(var i=0;i<e.length&&(!e[i]||!t(e[i],i,e));i+=1);}function eachReverse(e,t){if(e)for(var i=e.length-1;-1<i&&(!e[i]||!t(e[i],i,e));--i);}function hasProp(e,t){return hasOwn.call(e,t)}function getOwn(e,t){return hasProp(e,t)&&e[t]}function eachProp(e,t){for(var i in e)if(hasProp(e,i)&&-1==disallowedProps.indexOf(i)&&t(e[i],i))break}function mixin(i,e,r,n){e&&eachProp(e,function(e,t){!r&&hasProp(i,t)||(!n||"object"!=typeof e||!e||isArray(e)||isFunction(e)||e instanceof RegExp?i[t]=e:(i[t]||(i[t]={}),mixin(i[t],e,r,n)))})}function bind(e,t){return function(){return t.apply(e,arguments)}}function scripts(){return document.getElementsByTagName("script")}function defaultOnError(e){throw e}function getGlobal(e){var t;return e&&(t=global,each(e.split("."),function(e){t=t[e]}),t)}function makeError(e,t,i,r){t=new Error(t+"\nhttps://requirejs.org/docs/errors.html#"+e);return t.requireType=e,t.requireModules=r,i&&(t.originalError=i),t}if(void 0===define){if(void 0!==requirejs){if(isFunction(requirejs))return;cfg=requirejs,requirejs=void 0}void 0===require||isFunction(require)||(cfg=require,require=void 0),req=requirejs=function(e,t,i,r){var n,o=defContextName;return isArray(e)||"string"==typeof e||(n=e,isArray(t)?(e=t,t=i,i=r):e=[]),n&&n.context&&(o=n.context),r=(r=getOwn(contexts,o))||(contexts[o]=req.s.newContext(o)),n&&r.configure(n),r.require(e,t,i)},req.config=function(e){return req(e)},req.nextTick=void 0!==setTimeout?function(e){setTimeout(e,4)}:function(e){e()},require=require||req,req.version=version,req.jsExtRegExp=/^\/|:|\?|\.js$/,req.isBrowser=isBrowser,s=req.s={contexts:contexts,newContext:newContext},req({}),each(["toUrl","undef","defined","specified"],function(t){req[t]=function(){var e=contexts[defContextName];return e.require[t].apply(e,arguments)}}),isBrowser&&(head=s.head=document.getElementsByTagName("head")[0],baseElement=document.getElementsByTagName("base")[0],baseElement)&&(head=s.head=baseElement.parentNode),req.onError=defaultOnError,req.createNode=function(e,t,i){var r=e.xhtml?document.createElementNS("http://www.w3.org/1999/xhtml","html:script"):document.createElement("script");return r.type=e.scriptType||"text/javascript",r.charset="utf-8",r.async=!0,r},req.load=function(t,i,r){var e,n=t&&t.config||{};if(isBrowser)return(e=req.createNode(n,i,r)).setAttribute("data-requirecontext",t.contextName),e.setAttribute("data-requiremodule",i),!e.attachEvent||e.attachEvent.toString&&e.attachEvent.toString().indexOf("[native code")<0||isOpera?(e.addEventListener("load",t.onScriptLoad,!1),e.addEventListener("error",t.onScriptError,!1)):(useInteractive=!0,e.attachEvent("onreadystatechange",t.onScriptLoad)),e.src=r,n.onNodeCreated&&n.onNodeCreated(e,n,i,r),currentlyAddingScript=e,baseElement?head.insertBefore(e,baseElement):head.appendChild(e),currentlyAddingScript=null,e;if(isWebWorker)try{setTimeout(function(){},0),importScripts(r),t.completeLoad(i)}catch(e){t.onError(makeError("importscripts","importScripts failed for "+i+" at "+r,e,[i]))}},isBrowser&&!cfg.skipDataMain&&eachReverse(scripts(),function(e){if(head=head||e.parentNode,dataMain=e.getAttribute("data-main"))return mainScript=dataMain,cfg.baseUrl||-1!==mainScript.indexOf("!")||(mainScript=(src=mainScript.split("/")).pop(),subPath=src.length?src.join("/")+"/":"./",cfg.baseUrl=subPath),mainScript=mainScript.replace(jsSuffixRegExp,""),req.jsExtRegExp.test(mainScript)&&(mainScript=dataMain),cfg.deps=cfg.deps?cfg.deps.concat(mainScript):[mainScript],!0}),define=function(e,i,t){var r,n;"string"!=typeof e&&(t=i,i=e,e=null),isArray(i)||(t=i,i=null),!i&&isFunction(t)&&(i=[],t.length)&&(t.toString().replace(commentRegExp,commentReplace).replace(cjsRequireRegExp,function(e,t){i.push(t)}),i=(1===t.length?["require"]:["require","exports","module"]).concat(i)),useInteractive&&(r=currentlyAddingScript||getInteractiveScript())&&(e=e||r.getAttribute("data-requiremodule"),n=contexts[r.getAttribute("data-requirecontext")]),n?(n.defQueue.push([e,i,t]),n.defQueueMap[e]=!0):globalDefQueue.push([e,i,t])},define.amd={jQuery:!0},req.exec=function(text){return eval(text)},req(cfg)}function newContext(u){var t,e,f,c,i,b={waitSeconds:7,baseUrl:"./",paths:{},bundles:{},pkgs:{},shim:{},config:{}},d={},p={},r={},l=[],h={},n={},m={},g=1,x=1;function v(e,t,i){var r,n,o,a,s,u,c,d,p,f=t&&t.split("/"),l=b.map,h=l&&l["*"];if(e){t=(e=e.split("/")).length-1,b.nodeIdCompat&&jsSuffixRegExp.test(e[t])&&(e[t]=e[t].replace(jsSuffixRegExp,""));for(var m,g=e="."===e[0].charAt(0)&&f?f.slice(0,f.length-1).concat(e):e,x=0;x<g.length;x++)"."===(m=g[x])?(g.splice(x,1),--x):".."!==m||0===x||1===x&&".."===g[2]||".."===g[x-1]||0<x&&(g.splice(x-1,2),x-=2);e=e.join("/")}if(i&&l&&(f||h)){e:for(o=(n=e.split("/")).length;0<o;--o){if(s=n.slice(0,o).join("/"),f)for(a=f.length;0<a;--a)if(r=(r=getOwn(l,f.slice(0,a).join("/")))&&getOwn(r,s)){u=r,c=o;break e}!d&&h&&getOwn(h,s)&&(d=getOwn(h,s),p=o)}!u&&d&&(u=d,c=p),u&&(n.splice(0,c,u),e=n.join("/"))}return getOwn(b.pkgs,e)||e}function q(t){isBrowser&&each(scripts(),function(e){if(e.getAttribute("data-requiremodule")===t&&e.getAttribute("data-requirecontext")===f.contextName)return e.parentNode.removeChild(e),!0})}function E(e){var t=getOwn(b.paths,e);return t&&isArray(t)&&1<t.length&&(t.shift(),f.require.undef(e),f.makeRequire(null,{skipMap:!0})([e]),1)}function w(e){var t,i=e?e.indexOf("!"):-1;return-1<i&&(t=e.substring(0,i),e=e.substring(i+1,e.length)),[t,e]}function y(e,t,i,r){var n,o,a,s=null,u=t?t.name:null,c=e,d=!0,p="";return e||(d=!1,e="_@r"+(g+=1)),s=(a=w(e))[0],e=a[1],s&&(s=v(s,u,r),o=getOwn(h,s)),e&&(s?p=i?e:o&&o.normalize?o.normalize(e,function(e){return v(e,u,r)}):-1===e.indexOf("!")?v(e,u,r):e:(s=(a=w(p=v(e,u,r)))[0],i=!0,n=f.nameToUrl(p=a[1]))),{prefix:s,name:p,parentMap:t,unnormalized:!!(e=!s||o||i?"":"_unnormalized"+(x+=1)),url:n,originalName:c,isDefine:d,id:(s?s+"!"+p:p)+e}}function S(e){var t=e.id;return getOwn(d,t)||(d[t]=new f.Module(e))}function k(e,t,i){var r=e.id,n=getOwn(d,r);!hasProp(h,r)||n&&!n.defineEmitComplete?(n=S(e)).error&&"error"===t?i(n.error):n.on(t,i):"defined"===t&&i(h[r])}function M(t,e){var i=t.requireModules,r=!1;e?e(t):(each(i,function(e){e=getOwn(d,e);e&&(e.error=t,e.events.error)&&(r=!0,e.emit("error",t))}),r||req.onError(t))}function O(){globalDefQueue.length&&(each(globalDefQueue,function(e){var t=e[0];"string"==typeof t&&(f.defQueueMap[t]=!0),l.push(e)}),globalDefQueue=[])}function j(e){delete d[e],delete p[e]}function P(){var r,e=1e3*b.waitSeconds,n=e&&f.startTime+e<(new Date).getTime(),o=[],a=[],s=!1,u=!0;if(!t){if(t=!0,eachProp(p,function(e){var t=e.map,i=t.id;if(e.enabled&&(t.isDefine||a.push(e),!e.error))if(!e.inited&&n)E(i)?s=r=!0:(o.push(i),q(i));else if(!e.inited&&e.fetched&&t.isDefine&&(s=!0,!t.prefix))return u=!1}),n&&o.length)return(e=makeError("timeout","Load timeout for modules: "+o,null,o)).contextName=f.contextName,M(e);u&&each(a,function(e){!function r(n,o,a){var e=n.map.id;n.error?n.emit("error",n.error):(o[e]=!0,each(n.depMaps,function(e,t){var e=e.id,i=getOwn(d,e);!i||n.depMatched[t]||a[e]||(getOwn(o,e)?(n.defineDep(t,h[e]),n.check()):r(i,o,a))}),a[e]=!0)}(e,{},{})}),n&&!r||!s||(isBrowser||isWebWorker)&&(i=i||setTimeout(function(){i=0,P()},50)),t=!1}}function a(e){hasProp(h,e[0])||S(y(e[0],null,!0)).init(e[1],e[2])}function o(e,t,i,r){e.detachEvent&&!isOpera?r&&e.detachEvent(r,t):e.removeEventListener(i,t,!1)}function s(e){e=e.currentTarget||e.srcElement;return o(e,f.onScriptLoad,"load","onreadystatechange"),o(e,f.onScriptError,"error"),{node:e,id:e&&e.getAttribute("data-requiremodule")}}function R(){var e;for(O();l.length;){if(null===(e=l.shift())[0])return M(makeError("mismatch","Mismatched anonymous define() module: "+e[e.length-1]));a(e)}f.defQueueMap={}}return c={require:function(e){return e.require||(e.require=f.makeRequire(e.map))},exports:function(e){if(e.usingExports=!0,e.map.isDefine)return e.exports?h[e.map.id]=e.exports:e.exports=h[e.map.id]={}},module:function(e){return e.module||(e.module={id:e.map.id,uri:e.map.url,config:function(){return getOwn(b.config,e.map.id)||{}},exports:e.exports||(e.exports={})})}},(e=function(e){this.events=getOwn(r,e.id)||{},this.map=e,this.shim=getOwn(b.shim,e.id),this.depExports=[],this.depMaps=[],this.depMatched=[],this.pluginMaps={},this.depCount=0}).prototype={init:function(e,t,i,r){r=r||{},this.inited||(this.factory=t,i?this.on("error",i):this.events.error&&(i=bind(this,function(e){this.emit("error",e)})),this.depMaps=e&&e.slice(0),this.errback=i,this.inited=!0,this.ignore=r.ignore,r.enabled||this.enabled?this.enable():this.check())},defineDep:function(e,t){this.depMatched[e]||(this.depMatched[e]=!0,--this.depCount,this.depExports[e]=t)},fetch:function(){if(!this.fetched){this.fetched=!0,f.startTime=(new Date).getTime();var e=this.map;if(!this.shim)return e.prefix?this.callPlugin():this.load();f.makeRequire(this.map,{enableBuildCallback:!0})(this.shim.deps||[],bind(this,function(){return e.prefix?this.callPlugin():this.load()}))}},load:function(){var e=this.map.url;n[e]||(n[e]=!0,f.load(this.map.id,e))},check:function(){if(this.enabled&&!this.enabling){var t,i,e=this.map.id,r=this.depExports,n=this.exports,o=this.factory;if(this.inited){if(this.error)this.emit("error",this.error);else if(!this.defining){if(this.defining=!0,this.depCount<1&&!this.defined){if(isFunction(o)){if(this.events.error&&this.map.isDefine||req.onError!==defaultOnError)try{n=f.execCb(e,o,r,n)}catch(e){t=e}else n=f.execCb(e,o,r,n);if(this.map.isDefine&&void 0===n&&((r=this.module)?n=r.exports:this.usingExports&&(n=this.exports)),t)return t.requireMap=this.map,t.requireModules=this.map.isDefine?[this.map.id]:null,t.requireType=this.map.isDefine?"define":"require",M(this.error=t)}else n=o;this.exports=n,this.map.isDefine&&!this.ignore&&(h[e]=n,req.onResourceLoad)&&(i=[],each(this.depMaps,function(e){i.push(e.normalizedMap||e)}),req.onResourceLoad(f,this.map,i)),j(e),this.defined=!0}this.defining=!1,this.defined&&!this.defineEmitted&&(this.defineEmitted=!0,this.emit("defined",this.exports),this.defineEmitComplete=!0)}}else hasProp(f.defQueueMap,e)||this.fetch()}},callPlugin:function(){var s=this.map,u=s.id,e=y(s.prefix);this.depMaps.push(e),k(e,"defined",bind(this,function(e){var o,t,i=getOwn(m,this.map.id),r=this.map.name,n=this.map.parentMap?this.map.parentMap.name:null,a=f.makeRequire(s.parentMap,{enableBuildCallback:!0});this.map.unnormalized?(e.normalize&&(r=e.normalize(r,function(e){return v(e,n,!0)})||""),k(t=y(s.prefix+"!"+r,this.map.parentMap,!0),"defined",bind(this,function(e){this.map.normalizedMap=t,this.init([],function(){return e},null,{enabled:!0,ignore:!0})})),(r=getOwn(d,t.id))&&(this.depMaps.push(t),this.events.error&&r.on("error",bind(this,function(e){this.emit("error",e)})),r.enable())):i?(this.map.url=f.nameToUrl(i),this.load()):((o=bind(this,function(e){this.init([],function(){return e},null,{enabled:!0})})).error=bind(this,function(e){this.inited=!0,(this.error=e).requireModules=[u],eachProp(d,function(e){0===e.map.id.indexOf(u+"_unnormalized")&&j(e.map.id)}),M(e)}),o.fromText=bind(this,function(e,t){var i=s.name,r=y(i),n=useInteractive;t&&(e=t),n&&(useInteractive=!1),S(r),hasProp(b.config,u)&&(b.config[i]=b.config[u]);try{req.exec(e)}catch(e){return M(makeError("fromtexteval","fromText eval for "+u+" failed: "+e,e,[u]))}n&&(useInteractive=!0),this.depMaps.push(r),f.completeLoad(i),a([i],o)}),e.load(s.name,a,o,b))})),f.enable(e,this),this.pluginMaps[e.id]=e},enable:function(){(p[this.map.id]=this).enabled=!0,this.enabling=!0,each(this.depMaps,bind(this,function(e,t){var i,r;if("string"==typeof e){if(e=y(e,this.map.isDefine?this.map:this.map.parentMap,!1,!this.skipMap),this.depMaps[t]=e,r=getOwn(c,e.id))return void(this.depExports[t]=r(this));this.depCount+=1,k(e,"defined",bind(this,function(e){this.undefed||(this.defineDep(t,e),this.check())})),this.errback?k(e,"error",bind(this,this.errback)):this.events.error&&k(e,"error",bind(this,function(e){this.emit("error",e)}))}r=e.id,i=d[r],hasProp(c,r)||!i||i.enabled||f.enable(e,this)})),eachProp(this.pluginMaps,bind(this,function(e){var t=getOwn(d,e.id);t&&!t.enabled&&f.enable(e,this)})),this.enabling=!1,this.check()},on:function(e,t){(this.events[e]||(this.events[e]=[])).push(t)},emit:function(e,t){each(this.events[e],function(e){e(t)}),"error"===e&&delete this.events[e]}},(f={config:b,contextName:u,registry:d,defined:h,urlFetched:n,defQueue:l,defQueueMap:{},Module:e,makeModuleMap:y,nextTick:req.nextTick,onError:M,configure:function(e){e.baseUrl&&"/"!==e.baseUrl.charAt(e.baseUrl.length-1)&&(e.baseUrl+="/"),"string"==typeof e.urlArgs&&(i=e.urlArgs,e.urlArgs=function(e,t){return(-1===t.indexOf("?")?"?":"&")+i});var i,r=b.shim,n={paths:!0,bundles:!0,config:!0,map:!0};eachProp(e,function(e,t){n[t]?(b[t]||(b[t]={}),mixin(b[t],e,!0,!0)):b[t]=e}),e.bundles&&eachProp(e.bundles,function(e,t){each(e,function(e){e!==t&&(m[e]=t)})}),e.shim&&(eachProp(e.shim,function(e,t){!(e=isArray(e)?{deps:e}:e).exports&&!e.init||e.exportsFn||(e.exportsFn=f.makeShimExports(e)),r[t]=e}),b.shim=r),e.packages&&each(e.packages,function(e){var t=(e="string"==typeof e?{name:e}:e).name;e.location&&(b.paths[t]=e.location),b.pkgs[t]=e.name+"/"+(e.main||"main").replace(currDirRegExp,"").replace(jsSuffixRegExp,"")}),eachProp(d,function(e,t){e.inited||e.map.unnormalized||(e.map=y(t,null,!0))}),(e.deps||e.callback)&&f.require(e.deps||[],e.callback)},makeShimExports:function(t){return function(){var e;return(e=t.init?t.init.apply(global,arguments):e)||t.exports&&getGlobal(t.exports)}},makeRequire:function(o,a){function s(e,t,i){var r,n;return a.enableBuildCallback&&t&&isFunction(t)&&(t.__requireJsBuild=!0),"string"==typeof e?isFunction(t)?M(makeError("requireargs","Invalid require call"),i):o&&hasProp(c,e)?c[e](d[o.id]):req.get?req.get(f,e,o,s):(r=y(e,o,!1,!0).id,hasProp(h,r)?h[r]:M(makeError("notloaded",'Module name "'+r+'" has not been loaded yet for context: '+u+(o?"":". Use require([])")))):(R(),f.nextTick(function(){R(),(n=S(y(null,o))).skipMap=a.skipMap,n.init(e,t,i,{enabled:!0}),P()}),s)}return a=a||{},mixin(s,{isBrowser:isBrowser,toUrl:function(e){var t,i=e.lastIndexOf("."),r=e.split("/")[0];return-1!==i&&(!("."===r||".."===r)||1<i)&&(t=e.substring(i,e.length),e=e.substring(0,i)),f.nameToUrl(v(e,o&&o.id,!0),t,!0)},defined:function(e){return hasProp(h,y(e,o,!1,!0).id)},specified:function(e){return e=y(e,o,!1,!0).id,hasProp(h,e)||hasProp(d,e)}}),o||(s.undef=function(i){O();var e=y(i,o,!0),t=getOwn(d,i);t.undefed=!0,q(i),delete h[i],delete n[e.url],delete r[i],eachReverse(l,function(e,t){e[0]===i&&l.splice(t,1)}),delete f.defQueueMap[i],t&&(t.events.defined&&(r[i]=t.events),j(i))}),s},enable:function(e){getOwn(d,e.id)&&S(e).enable()},completeLoad:function(e){var t,i,r,n=getOwn(b.shim,e)||{},o=n.exports;for(O();l.length;){if(null===(i=l.shift())[0]){if(i[0]=e,t)break;t=!0}else i[0]===e&&(t=!0);a(i)}if(f.defQueueMap={},r=getOwn(d,e),!t&&!hasProp(h,e)&&r&&!r.inited){if(!(!b.enforceDefine||o&&getGlobal(o)))return E(e)?void 0:M(makeError("nodefine","No define call for "+e,null,[e]));a([e,n.deps||[],n.exportsFn])}P()},nameToUrl:function(e,t,i){var r,n,o,a,s,u=getOwn(b.pkgs,e);if(u=getOwn(m,e=u?u:e))return f.nameToUrl(u,t,i);if(req.jsExtRegExp.test(e))a=e+(t||"");else{for(r=b.paths,o=(n=e.split("/")).length;0<o;--o)if(s=getOwn(r,n.slice(0,o).join("/"))){isArray(s)&&(s=s[0]),n.splice(0,o,s);break}a=n.join("/"),a=("/"===(a+=t||(/^data\:|^blob\:|\?/.test(a)||i?"":".js")).charAt(0)||a.match(/^[\w\+\.\-]+:/)?"":b.baseUrl)+a}return b.urlArgs&&!/^blob\:/.test(a)?a+b.urlArgs(e,a):a},load:function(e,t){req.load(f,e,t)},execCb:function(e,t,i,r){return t.apply(r,i)},onScriptLoad:function(e){"load"!==e.type&&!readyRegExp.test((e.currentTarget||e.srcElement).readyState)||(interactiveScript=null,e=s(e),f.completeLoad(e.id))},onScriptError:function(e){var i,r=s(e);if(!E(r.id))return i=[],eachProp(d,function(e,t){0!==t.indexOf("_@r")&&each(e.depMaps,function(e){if(e.id===r.id)return i.push(t),!0})}),M(makeError("scripterror",'Script error for "'+r.id+(i.length?'", needed by: '+i.join(", "):'"'),e,[r.id]))}}).require=f.makeRequire(),f}function getInteractiveScript(){return interactiveScript&&"interactive"===interactiveScript.readyState||eachReverse(scripts(),function(e){if("interactive"===e.readyState)return interactiveScript=e}),interactiveScript}}(this,"undefined"==typeof setTimeout?void 0:setTimeout);


================================================
FILE: docs/baseline.rst
================================================
Baseline
========

Rampy allows you to fit polynomial, spline, generalized cross-validated spline, logarithms, exponential, ALS, arPLS, drPLS, rubberband and whittaker baselines to your spectra, in order to remove the background.

.. image:: ./images/baseline.png
  :width: 500

Below you will find the documentation of the relevant functions, and have a look at the example notebooks too: :ref:`RST Notebooks`

.. autofunction:: rampy.baseline

For some baseline types, individual baseline functions also can be used, if you are interested:

.. autofunction:: rampy.rubberband_baseline

.. autofunction:: rampy.als_baseline

.. autofunction:: rampy.arPLS_baseline

.. autofunction:: rampy.drPLS_baseline

================================================
FILE: docs/conf.py
================================================
# Configuration file for the Sphinx documentation builder.
#
# This file only contains a selection of the most common options. For a full
# list see the documentation:
# https://www.sphinx-doc.org/en/master/usage/configuration.html

# -- Path setup --------------------------------------------------------------

# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
#
# import os
# import sys
# sys.path.insert(0, os.path.abspath('.'))

# -- Project information -----------------------------------------------------

project = 'RamPy'
copyright = '2025, Charles Le Losq'
author = 'Charles Le Losq'

# The full version, including alpha/beta/rc tags
release = '0.6.0'


# -- General configuration ---------------------------------------------------

# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
extensions = ['sphinx.ext.autodoc','sphinx.ext.napoleon', 'nbsphinx', 'nbconvert'
]

# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']

# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.
# This pattern also affects html_static_path and html_extra_path.
exclude_patterns = []


# -- Options for HTML output -------------------------------------------------

# The theme to use for HTML and HTML Help pages.  See the documentation for
# a list of builtin themes.
#
html_theme = 'sphinx_rtd_theme'

# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
html_static_path = ['_static']
html_logo = 'images/Rampy.png'
tml_js_files = [
    "require.min.js",  # Add to your _static
    "custom.js",
]

# Here is for the plotly graphs
import plotly.io as pio
pio.renderers.default = 'sphinx_gallery'


================================================
FILE: docs/dac.rst
================================================
Diamond Anvil Cell Utilities
============================

Rampy can be useful if you are performing Diamond Anvil Cell experiments, to process florescence spectra of pressure sensors for instance, or remove the diamond background.

Here is some helper functions for DAC experiments!

Pressure calculations
---------------------

.. automodule:: rampy.dac
   :members:
   :undoc-members:
   :show-inheritance:

================================================
FILE: docs/examples.rst
================================================
.. _RST Notebooks:

Example notebooks
=================

Processing
----------

.. nbgallery::
    notebooks/Resample_and_Flip
    notebooks/Normalisation
    notebooks/Smoothing
    notebooks/Baseline
    notebooks/Baseline_and_Centroid

Peak fitting
----------------

.. nbgallery::
    notebooks/Raman_fitting

Machine learning
----------------

.. nbgallery::
    notebooks/Mixing
    notebooks/ML_Classification
    notebooks/ML_Exploration
    notebooks/ML_Regression

Maps
----------------

.. nbgallery::
    notebooks/Maps


================================================
FILE: docs/firststeps.rst
================================================
.. _RST First:

First Steps
===========

You can consult the help of each function/class/method on this website.

Quick examples of the use of the functions/classes are shown to highlight some of the possibilities offered by Rampy.

Example Jupyter notebooks are also shown, and `can be dowloaded <https://github.com/charlesll/rampy/tree/master/docs/notebooks>`_

Library importation
-------------------

Python does not come with a lot of possibilities. This is why you usually need to import a few libraries. You can assign a shortname to a library, as usually people import/use functions with libraries' prefix, to avoid confusion (two libraries can have a function with the same name...). A useful shortname for rampy is ``rp``:

.. code-block:: python

  # importing rampy
  import rampy as rp
  # and for numpy we will respect the usual name:
  import numpy as np
  # for matplotlib
  import matplotlib.pyplot as plt

Data importation
----------------

This is done using directly Pandas or numpy, except for:

  - importing multiple spectra can be done with the ``rampy.spectrarray()`` function;
  - maps for which rampy provides a function to import the CSV files generated by
the Renishaw or Horiba Raman spectrometers.

To import a spectrum saved in a 2 column text file "data.txt" with space separator, we can use the numpy genfromtxt function:

.. code-block:: python

  import numpy as np
  spectrum = np.genfromtxt("data.txt")

If our file has a 10 line header, we can skip it like

.. code-block:: python

  spectrum = np.genfromtxt("data.txt", skip_header=10)

See the documentation of numpy for further details, as well as that of Pandas.

Plot a spectrum
---------------

This can be done with Matplotlib directly. For instance, to plot our spectrum we can do:

.. code-block:: python

  plt.figure(figsize=(5,5))
  plt.plot(spectrum[:,0],spectrum[:,1],'k.',markersize=1)
  plt.xlabel("Raman shift, cm$^{-1}$", fontsize = 12)
  plt.ylabel("Normalized intensity, a. u.", fontsize = 12)
  plt.title("Fig. 1: the raw data",fontsize = 12,fontweight="bold")

This will give the image:

.. image:: ./images/spectrum.png
  :width: 400

Rampy also provides a function to plot a spectrum, allowing an interactive view (leveraging Plotly) of the data and possibly of baselines and smoothed signals:

.. code-block:: python
  
  import rampy as rp
  rp.plot_spectrum(spectrum[:,0], 
                  spectrum[:,1], 
                  xaxis_title="Raman shift, cm$^{-1}$", 
                  yaxis_title="Normalized intensity, a. u.", 
                  title="Fig. 1: the raw data")

See the :ref:`RST Plotting` page for details on the function. 

Now you are ready for the next steps: :ref:`RST Preprocessing`

================================================
FILE: docs/index.rst
================================================
.. RamPy documentation master file, created by
   sphinx-quickstart on Fri Oct  8 15:22:27 2021.
   You can adapt this file completely to your liking, but it should at least
   contain the root `toctree` directive.

Welcome to RamPy's documentation!
=================================

Copyright (2015-2026) C. Le Losq and co.

Charles Le Losq, Institut de physique du globe de Paris, Université Paris Cité
lelosq@ipgp.fr

.. image:: https://zenodo.org/badge/DOI/10.5281/zenodo.1168729.svg
   :target: https://doi.org/10.5281/zenodo.1168729

The Rampy project
-----------------

Rampy is a Python library that aims at helping processing spectroscopic data, such as Raman, Infrared or XAS spectra.
It offers, for instance, functions to subtract baselines as well as to stack, resample or smooth spectra.
It aims at facilitating the use of Python in processing spectroscopic data.

The project is hosted on Github (`here! <https://github.com/charlesll/rampy>`_), please do not hesitate to propose new features or simply ideas!

Integration with other packages
-------------------------------

Rampy integrates within a workflow that uses Numpy/Scipy/Matplotlib as well as optimisation libraries such as lmfit, emcee, PyMC3 for instance.

Rampy can be used also to analyse the output of the `RADIS <https://radis.readthedocs.io/en/latest/>`_ package. See the discussion about this `here <https://github.com/charlesll/rampy/issues/13>`_

For more advanced baseline algorithms, please also check the `Pybaselines package <https://pybaselines.readthedocs.io/>`_.

Indices and tables
==================

* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`

.. toctree::
   :maxdepth: 1
   :caption: Contents:

   philosophy
   news
   installation
   firststeps
   preprocessing
   baseline
   smoothing
   plotting
   signalparams
   peakfitting
   machinelearning
   maps
   dac
   examples
   utils
   API


================================================
FILE: docs/installation.rst
================================================
Installation
============

General preparation
-------------------

Rampy runs with a traditional Python stack.

If you are not familiar with Python, you can first have a look at the `scipy lecture notes <https://scipy-lectures.org/>`_,
a set of tutorials for the beginner.

You can install `Anaconda Python <https://www.anaconda.com/products/individual>`_ to get a running Python distribution. See the documentation of Anaconda for those steps.

Rampy installation
------------------

Install with pip in the command line:

 ``pip install rampy``

Optional dependencies
---------------------

If you want to use the "MSESmoothedNSpline" or "DOFSmoothedNSpline" options from the ``smooth()`` function, please install the following library:

 ``pip install gcvspline``

Please note that gcvspline installation requires gfortran, see `gcvspline documentation <https://charlesll.github.io/gcvspline/>`_.

Installation is done? Have a look here if you are new to Python: :ref:`RST First`

================================================
FILE: docs/machinelearning.rst
================================================
Machine learning
================

Rampy offers three classes for performing classification, regression or unsupervised ML exploration of a set of spectra. Those are helpful ways to automatically perform usual scalling, test-train splitting and ML training of popular ML algorithms, and use `scikit-learn <https://scikit-learn.org/stable/>`_ in the background.

Those functions work (``rp.regressor`` was used in `this publication <https://doi.org/10.2138/am-2019-6887>`_) but still may evolve in the futur. For advanced, ML, I suggest using directly scikit-learn or other ML libraries.

Below you will find the documentation of the relevant functions, and have a look at the example notebooks too: :ref:`RST Notebooks`

Do not hesitate to ask for new features depending on your needs !

Machine learning classification
-------------------------------

Based on a set of spectra and their labels, the ``rampy.mlclassificator`` class allows you to perform a classification of the spectra using a supervised ML algorithm. The class will take care of splitting the data into training and test sets, scaling the data, and training the model. You can then use the trained model to predict the labels of new spectra.

.. autoclass:: rampy.mlclassificator
   :members:
   :undoc-members:
   :show-inheritance:

Machine learning exploration
----------------------------

The ``rampy.mlexplorer`` class allows you to perform unsupervised ML exploration of a set of spectra. The class will take care of scaling the data and training the model. You can then use the trained model to explore the data and find patterns.

.. autoclass:: rampy.mlexplorer
   :members:
   :undoc-members:
   :show-inheritance:

Machine learning regression
---------------------------

Based on a set of spectra and their labels, the ``rampy.mlregressor`` class allows you to perform a regression using the spectra and a supervised ML algorithm. The class will take care of splitting the data into training and test sets, scaling the data, and training the model. You can then use the trained model to predict the new values of your target from new spectra.

.. autoclass:: rampy.mlregressor
   :members:
   :undoc-members:
   :show-inheritance:

Linear mixture
--------------

This function helps you solve a simple problem: you have spectra that are obtained by a linear combination of two endmember spectra.

If you have the two endmember spectra, you can use the ``rampy.mixing()`` function to know the fraction of each endmember in the mixture.

If you do not know the endmember spectra, then you may be interested in using directly the PyMCR library, see the documentation `here <https://pages.nist.gov/pyMCR/>`_ and an example notebook `here <https://github.com/usnistgov/pyMCR/blob/master/Examples/Demo.ipynb>`_. We used it in `this publication <https://doi.org/10.2138/am-2019-6887>`_, see the code `here <https://github.com/charlesll/rampy/blob/master/examples/Iron_AmMin_paper/Iron_MORB_code.ipynb>`_.

.. autofunction:: rampy.mixing_sp

Helper functions
-------------------------------

The ``rampy.chemical_splitting`` function allows you to split datasets depending on a target (e.g. sample composition).

.. autofunction:: rampy.chemical_splitting

================================================
FILE: docs/make.bat
================================================
@ECHO OFF

pushd %~dp0

REM Command file for Sphinx documentation

if "%SPHINXBUILD%" == "" (
	set SPHINXBUILD=sphinx-build
)
set SOURCEDIR=.
set BUILDDIR=.

if "%1" == "" goto help

%SPHINXBUILD% >NUL 2>NUL
if errorlevel 9009 (
	echo.
	echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
	echo.installed, then set the SPHINXBUILD environment variable to point
	echo.to the full path of the 'sphinx-build' executable. Alternatively you
	echo.may add the Sphinx directory to PATH.
	echo.
	echo.If you don't have Sphinx installed, grab it from
	echo.https://www.sphinx-doc.org/
	exit /b 1
)

%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
goto end

:help
%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%

:end
popd


================================================
FILE: docs/maps.rst
================================================
Maps
====

Rampy offers the possiblity to analyse maps from Raman spectrometers using the ``rampy.maps`` module.

Line and 2D Maps saved in CSV or TXT format from Horiba and Renishaw spectrometers can be loaded, and various data treatments can be performed afterwards.

Below you will find the documentation of the ``rampy.maps`` module, and have a look at the example notebooks too for further examples of use: :ref:`RST Notebooks`

.. autoclass:: rampy.maps
   :members:
   :undoc-members:
   :show-inheritance:

The following functions are also available and used in the ``rampy.maps`` class to load spectra from different spectrometers.

.. autofunction:: rampy.read_renishaw

.. autofunction:: rampy.read_horiba


================================================
FILE: docs/modules.rst
================================================
rampy
=====

.. toctree::
   :maxdepth: 2

   rampy


================================================
FILE: docs/news.rst
================================================
Rampy News
==========

Copyright (c) 2014-2025 Dr. Charles Le Losq et al.

email: lelosq@ipgp.fr

Licence: see LICENCE.md

Wanted features (planned)
-------------------------

- Addition of more unsupervised machine learning techniques

- Classification via 1D CNN and other algorithms using Keras or Pytorch

- peak fitting (in particular for maps): working on a Scikit-Learn API

0.6.4 (stable)
----------------

  - fix usage of tlcorrection with the area normalisation (issue #40)
  - fix docstrings (issue #39)
  - fix QDA classification example and test (use solver='eigen' and shrinkage='auto').

0.6.3
----------------

  - fix 'roi' and 'method' arguments in baseline() function (issue #38)

0.6.2
----------------

  - Fix the documentation.

0.6.1
----------------

Additions:

  - area_peak(): function to calculate analytically the area of peaks in a spectrum.

Modifications:

  - Minimal Python version is now 3.10
  - normalise(): "area" normalisation now uses the simpson() function from scipy.integrate, instead of the trapezoidal rule. This should be more precise.

Improvements:

  - maps(): documentation of the class has been improved.

Fix:

  - baseline(): a problem with the roi has been raised (issue #34). This is now fixed, roi argument is completely optional.
  - resample(): fill_value was not working properly (not the good default option). It is now fixed. resample() will extrapolate automatically.

0.6.0
----------------

Improvements:

  - baseline(): we use the make_smoothing_spline function from Scipy for the GCVSmoothedNSpline smoothing mode (smooth function) and the gcvspline baseline, in replaced of the call to the gcvspline library.  make_smoothing_spline is a reimplenetation of the Woltring Fortran code in gcvspline library, so modulo numerical errors, it returns the same results. This offers now the gcvspline baseline to all, without problem of Fortran compilation.
  - baseline(): bir are now an optional argument in rampy.baseline (because they do not appear in als, arPLS and drPLS algorithms)
  - peakarea(): function is improved and a test is added.
  - mlclassificator(): this class was badly handling model parameters. This is now fixed. The code has been improved.
  - various improvements of the code formatting
  - tests & examples updated
  - docstrings re-written in Google Style
  - docs updated

Additions:

  - plot_spectrum(): makes an interactive plot of a signal, and also possibly of added baselines and smoothed signals.
  - whittaker(): it is now possible to pass weights
  - baseline(): Whittaker and Gaussian process baselines going through regions of interest is also available in the baseline() function 
  - ruby_T_corr(): Computes the temperature correction for the Ruby pressure scale.
  - borate_T_corr(): Computes the temperature correction for the SrB4O7:Sm2+ pressure scale.
  - pressure_sensor(): Converts the wavelength of fluorescence lines into pressure in GPa.

Deprecation:

  - get_portion_interest() becomes extract_signal(). get_portion_interest() still works but it will be removed in a future release

0.5.3
-----

  - Correction in despiking function (thanks Kevin Yuan)

0.5.2
-----

  - fix installation : something went bad as we switched to pyproject.toml in 0.5.1

0.5.1
-----

  - fix installation dependencies

0.5.0
-----

  - map() function is now maps() to avoid any conflict with built-in Python map() function
  - add the possiblity of importing lines of spectra for Horiba spectrometers
  - add a despiking() function
  - add external calibration in rameau
  - add the posibility to calibrate K coefficient(s) on another dataset of spectra
  - correction of a typo in mlclassificator function

0.4.9
-----

- quick fix of a bug in read_horiba function (from rampy.maps) 

0.4.8
-----

  - area and area ratio calculations available for maps
  - read_horiba function (from rampy.maps) corrected (Github issue #25)
  - rubberband baseline was fixed, test added, fit_baseline example update (Github issue #1, thanks @sjfraser05)

0.4.7
-----

  - urgent correction of a bug in rp.pseudovoigt() > float entries were resulting in an error message...
  - map treatment available for HORIBA and RENISHAW spectrometer (see example folder). Please report any bug!

0.4.6
-----

  - doc improvements
  - cvxpy 1.1 or higher is an optional dependency.
  - switch to setup.cfg
  - add shiftsp() function

0.4.5
-----

  - update docs
  - enhancing the pseudovoigt section for its use with arrays
  - adding an experimental "peakarea" function
  - drPLS algorithm added in baselines (thanks @Snijderfrey)

0.4.4
-----

  - Cleaning the code
  - Correction of a bug in tlcorrection
  - add lorentzian() and pearson7() peak shape functions
  - add mlexplorator function for easy PCA/NMF on spectroscopic data
  - update docs

0.4.3
-----

  - Improvements in documentation of mlregressor.
  - Improvements of rampy.normalise and rampy.centroid. Those functions can treat arrays of spectra now.
  - Correction of a bug in rampy.normalize that caused the "area" method to not work when entering x.
  - Better tests

0.4.2
-----

  - Removing dependency to cvxpy that does not build well in Windows... It affects the use of the rampy.mixing function

0.4.1
-----

  - Correction of an error in `mlregressor` which made impossible to import X_test datasets.

0.4.0
-----

  - BREAKING CHANGE: `mlregressor` is now a class and not a function anymore. You can provide directly sklearn arguments to the algorithms through dictionaries.
    The use of the class simplifies the use of `mlregressor`, as the created objects saves everything!
    It also makes it very easy to change the algorithm and try something else. See the example in the example folder!
  - addition of the `centroid()` function, that calculates the centroid of a signal.
  - addition of tests and examples for the `mlregressor()` class, the `resample()` and `flipsp()` functions.
  - `chemical_splitting()` allows one to select the random seed.
  - Correction of the `mixing_sp()` function, rampy is now compatible with cvxpy v1.0.
  - arguments can be provided to `resample()` to use different techniques of interpolation in `scipy.interpolate.interp1d`.
  - Various documentation improvements

0.3.6
-----

  - Correction of the `tlcorrection()` function: the 'hehlen' correction was missing a frequency term to be complete (eq. 2 and 3 in Hehlen 2010 J. Phys. Condes. Matter 22: 025401).

0.3.5
-----

  - Addition of the `rampy.mixing_sp()` function. See `help(rampy.mixing_sp())`, as well as the example folder.

0.3.4
-----

  - gcvspline is not a requirement anymore. Error messages will outputs when trying to use it, inviting to install it manually. This is implemented to avoid problems with FORTRAN compilation for people not interested in using gcvspline.
  - Add early stopping in` mlregressor` neural networks.

0.3.3
-----

  - Minor dependency correction

0.3.2
-----

  - Adding the names in the `rameau` object
  - Improvements of the `mlregressor` function, with addition of neural nets and bagging neural nets algorithms

0.3.1
-----

  - Rameau is now an object-oriented interface
  - `smooth()` function updated; 10 algorithms are available.
  - updated example of peak fitting

0.3.0
-----

  - Documentation improvements
  - Python 3 compatible
  - Addition of the Rameau function

0.2.9
-----

  - addition of gaussian baseline
  - addition of `flipsp()` to flip spectra along the axis 0
  - addition of `resample()` to resample spectra with scipy.interpolate
  - improvement of `tlcorrection`

0.2.8
-----

  - addition of the `tlcorrection()` function to replace the Long function

0.2.7
-----

  - Minor correction of the `baseline()` documentation and removing a `print()` command.

0.2.6
-----

  - standardizatin in the `baseline()` function is now included (improve polynomial fits);
  - addition of the arPLS algorithm from Baek et al. (2015) to automatic fit the baseline;
  - addition of the whittaker smoother to fit the baseline (Eiler 2003);
  - addition of the ALS algorithm (Eilers and Boelens 2005).


================================================
FILE: docs/notebooks/Baseline.ipynb
================================================
{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Example: fit a baseline\n",
    "\n",
    "## Load the libraries and create a signal\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "        <script type=\"text/javascript\">\n",
       "        window.PlotlyConfig = {MathJaxConfig: 'local'};\n",
       "        if (window.MathJax && window.MathJax.Hub && window.MathJax.Hub.Config) {window.MathJax.Hub.Config({SVG: {font: \"STIX-Web\"}});}\n",
       "        </script>\n",
       "        <script>/**\n",
       "* plotly.js v3.0.1\n",
       "* Copyright 2012-2025, Plotly, Inc.\n",
       "* All rights reserved.\n",
       "* Licensed under the MIT license\n",
       "*/\n",
       "(\n",
       " function(root, factory) {\n",
       "  if (typeof module === \"object\" && module.exports) {\n",
       "   module.exports = factory();\n",
       "  } else {\n",
       "   root.moduleName = factory();\n",
       "  }\n",
       "} (typeof self !== \"undefined\" ? self : this, () => {\n",
       "\"use strict\";var Plotly=(()=>{var VQe=Object.create;var MS=Object.defineProperty,HQe=Object.defineProperties,GQe=Object.getOwnPropertyDescriptor,jQe=Object.getOwnPropertyDescriptors,WQe=Object.getOwnPropertyNames,XQ=Object.getOwnPropertySymbols,ZQe=Object.getPrototypeOf,KQ=Object.prototype.hasOwnProperty,XQe=Object.prototype.propertyIsEnumerable;var YQ=(e,t,r)=>t in e?MS(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,JQ=(e,t)=>{for(var r in t||(t={}))KQ.call(t,r)&&YQ(e,r,t[r]);if(XQ)for(var r of XQ(t))XQe.call(t,r)&&YQ(e,r,t[r]);return e},$Q=(e,t)=>HQe(e,jQe(t));var Ll=(e,t)=>()=>(e&&(t=e(e=0)),t);var ye=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),QQ=(e,t)=>{for(var r in t)MS(e,r,{get:t[r],enumerable:!0})},eee=(e,t,r,n)=>{if(t&&typeof t==\"object\"||typeof t==\"function\")for(let i of WQe(t))!KQ.call(e,i)&&i!==r&&MS(e,i,{get:()=>t[i],enumerable:!(n=GQe(t,i))||n.enumerable});return e};var YQe=(e,t,r)=>(r=e!=null?VQe(ZQe(e)):{},eee(t||!e||!e.__esModule?MS(r,\"default\",{value:e,enumerable:!0}):r,e)),B1=e=>eee(MS({},\"__esModule\",{value:!0}),e);var e6=ye(tee=>{\"use strict\";tee.version=\"3.0.1\"});var iee=ye((ree,t6)=>{(function(t,r,n){r[t]=r[t]||n(),typeof t6!=\"undefined\"&&t6.exports&&(t6.exports=r[t])})(\"Promise\",typeof window!=\"undefined\"?window:ree,function(){\"use strict\";var t,r,n,i=Object.prototype.toString,a=typeof setImmediate!=\"undefined\"?function(E){return setImmediate(E)}:setTimeout;try{Object.defineProperty({},\"x\",{}),t=function(E,k,A,L){return Object.defineProperty(E,k,{value:A,writable:!0,configurable:L!==!1})}}catch(p){t=function(k,A,L){return k[A]=L,k}}n=function(){var E,k,A;function L(_,C){this.fn=_,this.self=C,this.next=void 0}return{add:function(C,M){A=new L(C,M),k?k.next=A:E=A,k=A,A=void 0},drain:function(){var C=E;for(E=k=r=void 0;C;)C.fn.call(C.self),C=C.next}}}();function o(p,E){n.add(p,E),r||(r=a(n.drain))}function s(p){var E,k=typeof p;return p!=null&&(k==\"object\"||k==\"function\")&&(E=p.then),typeof E==\"function\"?E:!1}function l(){for(var p=0;p<this.chain.length;p++)u(this,this.state===1?this.chain[p].success:this.chain[p].failure,this.chain[p]);this.chain.length=0}function u(p,E,k){var A,L;try{E===!1?k.reject(p.msg):(E===!0?A=p.msg:A=E.call(void 0,p.msg),A===k.promise?k.reject(TypeError(\"Promise-chain cycle\")):(L=s(A))?L.call(A,k.resolve,k.reject):k.resolve(A))}catch(_){k.reject(_)}}function c(p){var E,k=this;if(!k.triggered){k.triggered=!0,k.def&&(k=k.def);try{(E=s(p))?o(function(){var A=new d(k);try{E.call(p,function(){c.apply(A,arguments)},function(){f.apply(A,arguments)})}catch(L){f.call(A,L)}}):(k.msg=p,k.state=1,k.chain.length>0&&o(l,k))}catch(A){f.call(new d(k),A)}}}function f(p){var E=this;E.triggered||(E.triggered=!0,E.def&&(E=E.def),E.msg=p,E.state=2,E.chain.length>0&&o(l,E))}function h(p,E,k,A){for(var L=0;L<E.length;L++)(function(C){p.resolve(E[C]).then(function(g){k(C,g)},A)})(L)}function d(p){this.def=p,this.triggered=!1}function v(p){this.promise=p,this.state=0,this.triggered=!1,this.chain=[],this.msg=void 0}function x(p){if(typeof p!=\"function\")throw TypeError(\"Not a function\");if(this.__NPO__!==0)throw TypeError(\"Not a promise\");this.__NPO__=1;var E=new v(this);this.then=function(A,L){var _={success:typeof A==\"function\"?A:!0,failure:typeof L==\"function\"?L:!1};return _.promise=new this.constructor(function(M,g){if(typeof M!=\"function\"||typeof g!=\"function\")throw TypeError(\"Not a function\");_.resolve=M,_.reject=g}),E.chain.push(_),E.state!==0&&o(l,E),_.promise},this.catch=function(A){return this.then(void 0,A)};try{p.call(void 0,function(A){c.call(E,A)},function(A){f.call(E,A)})}catch(k){f.call(E,k)}}var b=t({},\"constructor\",x,!1);return x.prototype=b,t(b,\"__NPO__\",0,!1),t(x,\"resolve\",function(E){var k=this;return E&&typeof E==\"object\"&&E.__NPO__===1?E:new k(function(L,_){if(typeof L!=\"function\"||typeof _!=\"function\")throw TypeError(\"Not a function\");L(E)})}),t(x,\"reject\",function(E){return new this(function(A,L){if(typeof A!=\"function\"||typeof L!=\"function\")throw TypeError(\"Not a function\");L(E)})}),t(x,\"all\",function(E){var k=this;return i.call(E)!=\"[object Array]\"?k.reject(TypeError(\"Not an array\")):E.length===0?k.resolve([]):new k(function(L,_){if(typeof L!=\"function\"||typeof _!=\"function\")throw TypeError(\"Not a function\");var C=E.length,M=Array(C),g=0;h(k,E,function(T,F){M[T]=F,++g===C&&L(M)},_)})}),t(x,\"race\",function(E){var k=this;return i.call(E)!=\"[object Array]\"?k.reject(TypeError(\"Not an array\")):new k(function(L,_){if(typeof L!=\"function\"||typeof _!=\"function\")throw TypeError(\"Not a function\");h(k,E,function(M,g){L(g)},_)})}),x})});var xa=ye((qQt,r6)=>{(function(){var e={version:\"3.8.2\"},t=[].slice,r=function(Z){return t.call(Z)},n=self.document;function i(Z){return Z&&(Z.ownerDocument||Z.document||Z).documentElement}function a(Z){return Z&&(Z.ownerDocument&&Z.ownerDocument.defaultView||Z.document&&Z||Z.defaultView)}if(n)try{r(n.documentElement.childNodes)[0].nodeType}catch(Z){r=function(oe){for(var we=oe.length,Be=new Array(we);we--;)Be[we]=oe[we];return Be}}if(Date.now||(Date.now=function(){return+new Date}),n)try{n.createElement(\"DIV\").style.setProperty(\"opacity\",0,\"\")}catch(Z){var o=this.Element.prototype,s=o.setAttribute,l=o.setAttributeNS,u=this.CSSStyleDeclaration.prototype,c=u.setProperty;o.setAttribute=function(oe,we){s.call(this,oe,we+\"\")},o.setAttributeNS=function(oe,we,Be){l.call(this,oe,we,Be+\"\")},u.setProperty=function(oe,we,Be){c.call(this,oe,we+\"\",Be)}}e.ascending=f;function f(Z,oe){return Z<oe?-1:Z>oe?1:Z>=oe?0:NaN}e.descending=function(Z,oe){return oe<Z?-1:oe>Z?1:oe>=Z?0:NaN},e.min=function(Z,oe){var we=-1,Be=Z.length,Ue,We;if(arguments.length===1){for(;++we<Be;)if((We=Z[we])!=null&&We>=We){Ue=We;break}for(;++we<Be;)(We=Z[we])!=null&&Ue>We&&(Ue=We)}else{for(;++we<Be;)if((We=oe.call(Z,Z[we],we))!=null&&We>=We){Ue=We;break}for(;++we<Be;)(We=oe.call(Z,Z[we],we))!=null&&Ue>We&&(Ue=We)}return Ue},e.max=function(Z,oe){var we=-1,Be=Z.length,Ue,We;if(arguments.length===1){for(;++we<Be;)if((We=Z[we])!=null&&We>=We){Ue=We;break}for(;++we<Be;)(We=Z[we])!=null&&We>Ue&&(Ue=We)}else{for(;++we<Be;)if((We=oe.call(Z,Z[we],we))!=null&&We>=We){Ue=We;break}for(;++we<Be;)(We=oe.call(Z,Z[we],we))!=null&&We>Ue&&(Ue=We)}return Ue},e.extent=function(Z,oe){var we=-1,Be=Z.length,Ue,We,wt;if(arguments.length===1){for(;++we<Be;)if((We=Z[we])!=null&&We>=We){Ue=wt=We;break}for(;++we<Be;)(We=Z[we])!=null&&(Ue>We&&(Ue=We),wt<We&&(wt=We))}else{for(;++we<Be;)if((We=oe.call(Z,Z[we],we))!=null&&We>=We){Ue=wt=We;break}for(;++we<Be;)(We=oe.call(Z,Z[we],we))!=null&&(Ue>We&&(Ue=We),wt<We&&(wt=We))}return[Ue,wt]};function h(Z){return Z===null?NaN:+Z}function d(Z){return!isNaN(Z)}e.sum=function(Z,oe){var we=0,Be=Z.length,Ue,We=-1;if(arguments.length===1)for(;++We<Be;)d(Ue=+Z[We])&&(we+=Ue);else for(;++We<Be;)d(Ue=+oe.call(Z,Z[We],We))&&(we+=Ue);return we},e.mean=function(Z,oe){var we=0,Be=Z.length,Ue,We=-1,wt=Be;if(arguments.length===1)for(;++We<Be;)d(Ue=h(Z[We]))?we+=Ue:--wt;else for(;++We<Be;)d(Ue=h(oe.call(Z,Z[We],We)))?we+=Ue:--wt;if(wt)return we/wt},e.quantile=function(Z,oe){var we=(Z.length-1)*oe+1,Be=Math.floor(we),Ue=+Z[Be-1],We=we-Be;return We?Ue+We*(Z[Be]-Ue):Ue},e.median=function(Z,oe){var we=[],Be=Z.length,Ue,We=-1;if(arguments.length===1)for(;++We<Be;)d(Ue=h(Z[We]))&&we.push(Ue);else for(;++We<Be;)d(Ue=h(oe.call(Z,Z[We],We)))&&we.push(Ue);if(we.length)return e.quantile(we.sort(f),.5)},e.variance=function(Z,oe){var we=Z.length,Be=0,Ue,We,wt=0,tt=-1,zt=0;if(arguments.length===1)for(;++tt<we;)d(Ue=h(Z[tt]))&&(We=Ue-Be,Be+=We/++zt,wt+=We*(Ue-Be));else for(;++tt<we;)d(Ue=h(oe.call(Z,Z[tt],tt)))&&(We=Ue-Be,Be+=We/++zt,wt+=We*(Ue-Be));if(zt>1)return wt/(zt-1)},e.deviation=function(){var Z=e.variance.apply(this,arguments);return Z&&Math.sqrt(Z)};function v(Z){return{left:function(oe,we,Be,Ue){for(arguments.length<3&&(Be=0),arguments.length<4&&(Ue=oe.length);Be<Ue;){var We=Be+Ue>>>1;Z(oe[We],we)<0?Be=We+1:Ue=We}return Be},right:function(oe,we,Be,Ue){for(arguments.length<3&&(Be=0),arguments.length<4&&(Ue=oe.length);Be<Ue;){var We=Be+Ue>>>1;Z(oe[We],we)>0?Ue=We:Be=We+1}return Be}}}var x=v(f);e.bisectLeft=x.left,e.bisect=e.bisectRight=x.right,e.bisector=function(Z){return v(Z.length===1?function(oe,we){return f(Z(oe),we)}:Z)},e.shuffle=function(Z,oe,we){(Be=arguments.length)<3&&(we=Z.length,Be<2&&(oe=0));for(var Be=we-oe,Ue,We;Be;)We=Math.random()*Be--|0,Ue=Z[Be+oe],Z[Be+oe]=Z[We+oe],Z[We+oe]=Ue;return Z},e.permute=function(Z,oe){for(var we=oe.length,Be=new Array(we);we--;)Be[we]=Z[oe[we]];return Be},e.pairs=function(Z){for(var oe=0,we=Z.length-1,Be,Ue=Z[0],We=new Array(we<0?0:we);oe<we;)We[oe]=[Be=Ue,Ue=Z[++oe]];return We},e.transpose=function(Z){if(!(We=Z.length))return[];for(var oe=-1,we=e.min(Z,b),Be=new Array(we);++oe<we;)for(var Ue=-1,We,wt=Be[oe]=new Array(We);++Ue<We;)wt[Ue]=Z[Ue][oe];return Be};function b(Z){return Z.length}e.zip=function(){return e.transpose(arguments)},e.keys=function(Z){var oe=[];for(var we in Z)oe.push(we);return oe},e.values=function(Z){var oe=[];for(var we in Z)oe.push(Z[we]);return oe},e.entries=function(Z){var oe=[];for(var we in Z)oe.push({key:we,value:Z[we]});return oe},e.merge=function(Z){for(var oe=Z.length,we,Be=-1,Ue=0,We,wt;++Be<oe;)Ue+=Z[Be].length;for(We=new Array(Ue);--oe>=0;)for(wt=Z[oe],we=wt.length;--we>=0;)We[--Ue]=wt[we];return We};var p=Math.abs;e.range=function(Z,oe,we){if(arguments.length<3&&(we=1,arguments.length<2&&(oe=Z,Z=0)),(oe-Z)/we===1/0)throw new Error(\"infinite range\");var Be=[],Ue=E(p(we)),We=-1,wt;if(Z*=Ue,oe*=Ue,we*=Ue,we<0)for(;(wt=Z+we*++We)>oe;)Be.push(wt/Ue);else for(;(wt=Z+we*++We)<oe;)Be.push(wt/Ue);return Be};function E(Z){for(var oe=1;Z*oe%1;)oe*=10;return oe}function k(Z,oe){for(var we in oe)Object.defineProperty(Z.prototype,we,{value:oe[we],enumerable:!1})}e.map=function(Z,oe){var we=new A;if(Z instanceof A)Z.forEach(function(tt,zt){we.set(tt,zt)});else if(Array.isArray(Z)){var Be=-1,Ue=Z.length,We;if(arguments.length===1)for(;++Be<Ue;)we.set(Be,Z[Be]);else for(;++Be<Ue;)we.set(oe.call(Z,We=Z[Be],Be),We)}else for(var wt in Z)we.set(wt,Z[wt]);return we};function A(){this._=Object.create(null)}var L=\"__proto__\",_=\"\\0\";k(A,{has:g,get:function(Z){return this._[C(Z)]},set:function(Z,oe){return this._[C(Z)]=oe},remove:P,keys:T,values:function(){var Z=[];for(var oe in this._)Z.push(this._[oe]);return Z},entries:function(){var Z=[];for(var oe in this._)Z.push({key:M(oe),value:this._[oe]});return Z},size:F,empty:q,forEach:function(Z){for(var oe in this._)Z.call(this,M(oe),this._[oe])}});function C(Z){return(Z+=\"\")===L||Z[0]===_?_+Z:Z}function M(Z){return(Z+=\"\")[0]===_?Z.slice(1):Z}function g(Z){return C(Z)in this._}function P(Z){return(Z=C(Z))in this._&&delete this._[Z]}function T(){var Z=[];for(var oe in this._)Z.push(M(oe));return Z}function F(){var Z=0;for(var oe in this._)++Z;return Z}function q(){for(var Z in this._)return!1;return!0}e.nest=function(){var Z={},oe=[],we=[],Be,Ue;function We(tt,zt,or){if(or>=oe.length)return Ue?Ue.call(Z,zt):Be?zt.sort(Be):zt;for(var lr=-1,Dr=zt.length,Ir=oe[or++],oi,ui,qr,Kr=new A,ii;++lr<Dr;)(ii=Kr.get(oi=Ir(ui=zt[lr])))?ii.push(ui):Kr.set(oi,[ui]);return tt?(ui=tt(),qr=function(vi,ci){ui.set(vi,We(tt,ci,or))}):(ui={},qr=function(vi,ci){ui[vi]=We(tt,ci,or)}),Kr.forEach(qr),ui}function wt(tt,zt){if(zt>=oe.length)return tt;var or=[],lr=we[zt++];return tt.forEach(function(Dr,Ir){or.push({key:Dr,values:wt(Ir,zt)})}),lr?or.sort(function(Dr,Ir){return lr(Dr.key,Ir.key)}):or}return Z.map=function(tt,zt){return We(zt,tt,0)},Z.entries=function(tt){return wt(We(e.map,tt,0),0)},Z.key=function(tt){return oe.push(tt),Z},Z.sortKeys=function(tt){return we[oe.length-1]=tt,Z},Z.sortValues=function(tt){return Be=tt,Z},Z.rollup=function(tt){return Ue=tt,Z},Z},e.set=function(Z){var oe=new V;if(Z)for(var we=0,Be=Z.length;we<Be;++we)oe.add(Z[we]);return oe};function V(){this._=Object.create(null)}k(V,{has:g,add:function(Z){return this._[C(Z+=\"\")]=!0,Z},remove:P,values:T,size:F,empty:q,forEach:function(Z){for(var oe in this._)Z.call(this,M(oe))}}),e.behavior={};function H(Z){return Z}e.rebind=function(Z,oe){for(var we=1,Be=arguments.length,Ue;++we<Be;)Z[Ue=arguments[we]]=X(Z,oe,oe[Ue]);return Z};function X(Z,oe,we){return function(){var Be=we.apply(oe,arguments);return Be===oe?Z:Be}}function G(Z,oe){if(oe in Z)return oe;oe=oe.charAt(0).toUpperCase()+oe.slice(1);for(var we=0,Be=N.length;we<Be;++we){var Ue=N[we]+oe;if(Ue in Z)return Ue}}var N=[\"webkit\",\"ms\",\"moz\",\"Moz\",\"o\",\"O\"];function W(){}e.dispatch=function(){for(var Z=new re,oe=-1,we=arguments.length;++oe<we;)Z[arguments[oe]]=ae(Z);return Z};function re(){}re.prototype.on=function(Z,oe){var we=Z.indexOf(\".\"),Be=\"\";if(we>=0&&(Be=Z.slice(we+1),Z=Z.slice(0,we)),Z)return arguments.length<2?this[Z].on(Be):this[Z].on(Be,oe);if(arguments.length===2){if(oe==null)for(Z in this)this.hasOwnProperty(Z)&&this[Z].on(Be,null);return this}};function ae(Z){var oe=[],we=new A;function Be(){for(var Ue=oe,We=-1,wt=Ue.length,tt;++We<wt;)(tt=Ue[We].on)&&tt.apply(this,arguments);return Z}return Be.on=function(Ue,We){var wt=we.get(Ue),tt;return arguments.length<2?wt&&wt.on:(wt&&(wt.on=null,oe=oe.slice(0,tt=oe.indexOf(wt)).concat(oe.slice(tt+1)),we.remove(Ue)),We&&oe.push(we.set(Ue,{on:We})),Z)},Be}e.event=null;function _e(){e.event.preventDefault()}function Me(){for(var Z=e.event,oe;oe=Z.sourceEvent;)Z=oe;return Z}function ke(Z){for(var oe=new re,we=0,Be=arguments.length;++we<Be;)oe[arguments[we]]=ae(oe);return oe.of=function(Ue,We){return function(wt){try{var tt=wt.sourceEvent=e.event;wt.target=Z,e.event=wt,oe[wt.type].apply(Ue,We)}finally{e.event=tt}}},oe}e.requote=function(Z){return Z.replace(ge,\"\\\\$&\")};var ge=/[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,ie={}.__proto__?function(Z,oe){Z.__proto__=oe}:function(Z,oe){for(var we in oe)Z[we]=oe[we]};function Te(Z){return ie(Z,Ce),Z}var Ee=function(Z,oe){return oe.querySelector(Z)},Ae=function(Z,oe){return oe.querySelectorAll(Z)},ze=function(Z,oe){var we=Z.matches||Z[G(Z,\"matchesSelector\")];return ze=function(Be,Ue){return we.call(Be,Ue)},ze(Z,oe)};typeof Sizzle==\"function\"&&(Ee=function(Z,oe){return Sizzle(Z,oe)[0]||null},Ae=Sizzle,ze=Sizzle.matchesSelector),e.selection=function(){return e.select(n.documentElement)};var Ce=e.selection.prototype=[];Ce.select=function(Z){var oe=[],we,Be,Ue,We;Z=me(Z);for(var wt=-1,tt=this.length;++wt<tt;){oe.push(we=[]),we.parentNode=(Ue=this[wt]).parentNode;for(var zt=-1,or=Ue.length;++zt<or;)(We=Ue[zt])?(we.push(Be=Z.call(We,We.__data__,zt,wt)),Be&&\"__data__\"in We&&(Be.__data__=We.__data__)):we.push(null)}return Te(oe)};function me(Z){return typeof Z==\"function\"?Z:function(){return Ee(Z,this)}}Ce.selectAll=function(Z){var oe=[],we,Be;Z=Re(Z);for(var Ue=-1,We=this.length;++Ue<We;)for(var wt=this[Ue],tt=-1,zt=wt.length;++tt<zt;)(Be=wt[tt])&&(oe.push(we=r(Z.call(Be,Be.__data__,tt,Ue))),we.parentNode=Be);return Te(oe)};function Re(Z){return typeof Z==\"function\"?Z:function(){return Ae(Z,this)}}var ce=\"http://www.w3.org/1999/xhtml\",Ge={svg:\"http://www.w3.org/2000/svg\",xhtml:ce,xlink:\"http://www.w3.org/1999/xlink\",xml:\"http://www.w3.org/XML/1998/namespace\",xmlns:\"http://www.w3.org/2000/xmlns/\"};e.ns={prefix:Ge,qualify:function(Z){var oe=Z.indexOf(\":\"),we=Z;return oe>=0&&(we=Z.slice(0,oe))!==\"xmlns\"&&(Z=Z.slice(oe+1)),Ge.hasOwnProperty(we)?{space:Ge[we],local:Z}:Z}},Ce.attr=function(Z,oe){if(arguments.length<2){if(typeof Z==\"string\"){var we=this.node();return Z=e.ns.qualify(Z),Z.local?we.getAttributeNS(Z.space,Z.local):we.getAttribute(Z)}for(oe in Z)this.each(nt(oe,Z[oe]));return this}return this.each(nt(Z,oe))};function nt(Z,oe){Z=e.ns.qualify(Z);function we(){this.removeAttribute(Z)}function Be(){this.removeAttributeNS(Z.space,Z.local)}function Ue(){this.setAttribute(Z,oe)}function We(){this.setAttributeNS(Z.space,Z.local,oe)}function wt(){var zt=oe.apply(this,arguments);zt==null?this.removeAttribute(Z):this.setAttribute(Z,zt)}function tt(){var zt=oe.apply(this,arguments);zt==null?this.removeAttributeNS(Z.space,Z.local):this.setAttributeNS(Z.space,Z.local,zt)}return oe==null?Z.local?Be:we:typeof oe==\"function\"?Z.local?tt:wt:Z.local?We:Ue}function ct(Z){return Z.trim().replace(/\\s+/g,\" \")}Ce.classed=function(Z,oe){if(arguments.length<2){if(typeof Z==\"string\"){var we=this.node(),Be=(Z=rt(Z)).length,Ue=-1;if(oe=we.classList){for(;++Ue<Be;)if(!oe.contains(Z[Ue]))return!1}else for(oe=we.getAttribute(\"class\");++Ue<Be;)if(!qt(Z[Ue]).test(oe))return!1;return!0}for(oe in Z)this.each(ot(oe,Z[oe]));return this}return this.each(ot(Z,oe))};function qt(Z){return new RegExp(\"(?:^|\\\\s+)\"+e.requote(Z)+\"(?:\\\\s+|$)\",\"g\")}function rt(Z){return(Z+\"\").trim().split(/^|\\s+/)}function ot(Z,oe){Z=rt(Z).map(Rt);var we=Z.length;function Be(){for(var We=-1;++We<we;)Z[We](this,oe)}function Ue(){for(var We=-1,wt=oe.apply(this,arguments);++We<we;)Z[We](this,wt)}return typeof oe==\"function\"?Ue:Be}function Rt(Z){var oe=qt(Z);return function(we,Be){if(Ue=we.classList)return Be?Ue.add(Z):Ue.remove(Z);var Ue=we.getAttribute(\"class\")||\"\";Be?(oe.lastIndex=0,oe.test(Ue)||we.setAttribute(\"class\",ct(Ue+\" \"+Z))):we.setAttribute(\"class\",ct(Ue.replace(oe,\" \")))}}Ce.style=function(Z,oe,we){var Be=arguments.length;if(Be<3){if(typeof Z!=\"string\"){Be<2&&(oe=\"\");for(we in Z)this.each(kt(we,Z[we],oe));return this}if(Be<2){var Ue=this.node();return a(Ue).getComputedStyle(Ue,null).getPropertyValue(Z)}we=\"\"}return this.each(kt(Z,oe,we))};function kt(Z,oe,we){function Be(){this.style.removeProperty(Z)}function Ue(){this.style.setProperty(Z,oe,we)}function We(){var wt=oe.apply(this,arguments);wt==null?this.style.removeProperty(Z):this.style.setProperty(Z,wt,we)}return oe==null?Be:typeof oe==\"function\"?We:Ue}Ce.property=function(Z,oe){if(arguments.length<2){if(typeof Z==\"string\")return this.node()[Z];for(oe in Z)this.each(Ct(oe,Z[oe]));return this}return this.each(Ct(Z,oe))};function Ct(Z,oe){function we(){delete this[Z]}function Be(){this[Z]=oe}function Ue(){var We=oe.apply(this,arguments);We==null?delete this[Z]:this[Z]=We}return oe==null?we:typeof oe==\"function\"?Ue:Be}Ce.text=function(Z){return arguments.length?this.each(typeof Z==\"function\"?function(){var oe=Z.apply(this,arguments);this.textContent=oe==null?\"\":oe}:Z==null?function(){this.textContent=\"\"}:function(){this.textContent=Z}):this.node().textContent},Ce.html=function(Z){return arguments.length?this.each(typeof Z==\"function\"?function(){var oe=Z.apply(this,arguments);this.innerHTML=oe==null?\"\":oe}:Z==null?function(){this.innerHTML=\"\"}:function(){this.innerHTML=Z}):this.node().innerHTML},Ce.append=function(Z){return Z=Yt(Z),this.select(function(){return this.appendChild(Z.apply(this,arguments))})};function Yt(Z){function oe(){var Be=this.ownerDocument,Ue=this.namespaceURI;return Ue===ce&&Be.documentElement.namespaceURI===ce?Be.createElement(Z):Be.createElementNS(Ue,Z)}function we(){return this.ownerDocument.createElementNS(Z.space,Z.local)}return typeof Z==\"function\"?Z:(Z=e.ns.qualify(Z)).local?we:oe}Ce.insert=function(Z,oe){return Z=Yt(Z),oe=me(oe),this.select(function(){return this.insertBefore(Z.apply(this,arguments),oe.apply(this,arguments)||null)})},Ce.remove=function(){return this.each(xr)};function xr(){var Z=this.parentNode;Z&&Z.removeChild(this)}Ce.data=function(Z,oe){var we=-1,Be=this.length,Ue,We;if(!arguments.length){for(Z=new Array(Be=(Ue=this[0]).length);++we<Be;)(We=Ue[we])&&(Z[we]=We.__data__);return Z}function wt(lr,Dr){var Ir,oi=lr.length,ui=Dr.length,qr=Math.min(oi,ui),Kr=new Array(ui),ii=new Array(ui),vi=new Array(oi),ci,Jr;if(oe){var un=new A,dn=new Array(oi),En;for(Ir=-1;++Ir<oi;)(ci=lr[Ir])&&(un.has(En=oe.call(ci,ci.__data__,Ir))?vi[Ir]=ci:un.set(En,ci),dn[Ir]=En);for(Ir=-1;++Ir<ui;)(ci=un.get(En=oe.call(Dr,Jr=Dr[Ir],Ir)))?ci!==!0&&(Kr[Ir]=ci,ci.__data__=Jr):ii[Ir]=er(Jr),un.set(En,!0);for(Ir=-1;++Ir<oi;)Ir in dn&&un.get(dn[Ir])!==!0&&(vi[Ir]=lr[Ir])}else{for(Ir=-1;++Ir<qr;)ci=lr[Ir],Jr=Dr[Ir],ci?(ci.__data__=Jr,Kr[Ir]=ci):ii[Ir]=er(Jr);for(;Ir<ui;++Ir)ii[Ir]=er(Dr[Ir]);for(;Ir<oi;++Ir)vi[Ir]=lr[Ir]}ii.update=Kr,ii.parentNode=Kr.parentNode=vi.parentNode=lr.parentNode,tt.push(ii),zt.push(Kr),or.push(vi)}var tt=Lt([]),zt=Te([]),or=Te([]);if(typeof Z==\"function\")for(;++we<Be;)wt(Ue=this[we],Z.call(Ue,Ue.parentNode.__data__,we));else for(;++we<Be;)wt(Ue=this[we],Z);return zt.enter=function(){return tt},zt.exit=function(){return or},zt};function er(Z){return{__data__:Z}}Ce.datum=function(Z){return arguments.length?this.property(\"__data__\",Z):this.property(\"__data__\")},Ce.filter=function(Z){var oe=[],we,Be,Ue;typeof Z!=\"function\"&&(Z=Ke(Z));for(var We=0,wt=this.length;We<wt;We++){oe.push(we=[]),we.parentNode=(Be=this[We]).parentNode;for(var tt=0,zt=Be.length;tt<zt;tt++)(Ue=Be[tt])&&Z.call(Ue,Ue.__data__,tt,We)&&we.push(Ue)}return Te(oe)};function Ke(Z){return function(){return ze(this,Z)}}Ce.order=function(){for(var Z=-1,oe=this.length;++Z<oe;)for(var we=this[Z],Be=we.length-1,Ue=we[Be],We;--Be>=0;)(We=we[Be])&&(Ue&&Ue!==We.nextSibling&&Ue.parentNode.insertBefore(We,Ue),Ue=We);return this},Ce.sort=function(Z){Z=xt.apply(this,arguments);for(var oe=-1,we=this.length;++oe<we;)this[oe].sort(Z);return this.order()};function xt(Z){return arguments.length||(Z=f),function(oe,we){return oe&&we?Z(oe.__data__,we.__data__):!oe-!we}}Ce.each=function(Z){return bt(this,function(oe,we,Be){Z.call(oe,oe.__data__,we,Be)})};function bt(Z,oe){for(var we=0,Be=Z.length;we<Be;we++)for(var Ue=Z[we],We=0,wt=Ue.length,tt;We<wt;We++)(tt=Ue[We])&&oe(tt,We,we);return Z}Ce.call=function(Z){var oe=r(arguments);return Z.apply(oe[0]=this,oe),this},Ce.empty=function(){return!this.node()},Ce.node=function(){for(var Z=0,oe=this.length;Z<oe;Z++)for(var we=this[Z],Be=0,Ue=we.length;Be<Ue;Be++){var We=we[Be];if(We)return We}return null},Ce.size=function(){var Z=0;return bt(this,function(){++Z}),Z};function Lt(Z){return ie(Z,St),Z}var St=[];e.selection.enter=Lt,e.selection.enter.prototype=St,St.append=Ce.append,St.empty=Ce.empty,St.node=Ce.node,St.call=Ce.call,St.size=Ce.size,St.select=function(Z){for(var oe=[],we,Be,Ue,We,wt,tt=-1,zt=this.length;++tt<zt;){Ue=(We=this[tt]).update,oe.push(we=[]),we.parentNode=We.parentNode;for(var or=-1,lr=We.length;++or<lr;)(wt=We[or])?(we.push(Ue[or]=Be=Z.call(We.parentNode,wt.__data__,or,tt)),Be.__data__=wt.__data__):we.push(null)}return Te(oe)},St.insert=function(Z,oe){return arguments.length<2&&(oe=Et(this)),Ce.insert.call(this,Z,oe)};function Et(Z){var oe,we;return function(Be,Ue,We){var wt=Z[We].update,tt=wt.length,zt;for(We!=we&&(we=We,oe=0),Ue>=oe&&(oe=Ue+1);!(zt=wt[oe])&&++oe<tt;);return zt}}e.select=function(Z){var oe;return typeof Z==\"string\"?(oe=[Ee(Z,n)],oe.parentNode=n.documentElement):(oe=[Z],oe.parentNode=i(Z)),Te([oe])},e.selectAll=function(Z){var oe;return typeof Z==\"string\"?(oe=r(Ae(Z,n)),oe.parentNode=n.documentElement):(oe=r(Z),oe.parentNode=null),Te([oe])},Ce.on=function(Z,oe,we){var Be=arguments.length;if(Be<3){if(typeof Z!=\"string\"){Be<2&&(oe=!1);for(we in Z)this.each(dt(we,Z[we],oe));return this}if(Be<2)return(Be=this.node()[\"__on\"+Z])&&Be._;we=!1}return this.each(dt(Z,oe,we))};function dt(Z,oe,we){var Be=\"__on\"+Z,Ue=Z.indexOf(\".\"),We=$t;Ue>0&&(Z=Z.slice(0,Ue));var wt=Ht.get(Z);wt&&(Z=wt,We=fr);function tt(){var lr=this[Be];lr&&(this.removeEventListener(Z,lr,lr.$),delete this[Be])}function zt(){var lr=We(oe,r(arguments));tt.call(this),this.addEventListener(Z,this[Be]=lr,lr.$=we),lr._=oe}function or(){var lr=new RegExp(\"^__on([^.]+)\"+e.requote(Z)+\"$\"),Dr;for(var Ir in this)if(Dr=Ir.match(lr)){var oi=this[Ir];this.removeEventListener(Dr[1],oi,oi.$),delete this[Ir]}}return Ue?oe?zt:tt:oe?W:or}var Ht=e.map({mouseenter:\"mouseover\",mouseleave:\"mouseout\"});n&&Ht.forEach(function(Z){\"on\"+Z in n&&Ht.remove(Z)});function $t(Z,oe){return function(we){var Be=e.event;e.event=we,oe[0]=this.__data__;try{Z.apply(this,oe)}finally{e.event=Be}}}function fr(Z,oe){var we=$t(Z,oe);return function(Be){var Ue=this,We=Be.relatedTarget;(!We||We!==Ue&&!(We.compareDocumentPosition(Ue)&8))&&we.call(Ue,Be)}}var _r,Br=0;function Or(Z){var oe=\".dragsuppress-\"+ ++Br,we=\"click\"+oe,Be=e.select(a(Z)).on(\"touchmove\"+oe,_e).on(\"dragstart\"+oe,_e).on(\"selectstart\"+oe,_e);if(_r==null&&(_r=\"onselectstart\"in Z?!1:G(Z.style,\"userSelect\")),_r){var Ue=i(Z).style,We=Ue[_r];Ue[_r]=\"none\"}return function(wt){if(Be.on(oe,null),_r&&(Ue[_r]=We),wt){var tt=function(){Be.on(we,null)};Be.on(we,function(){_e(),tt()},!0),setTimeout(tt,0)}}}e.mouse=function(Z){return ut(Z,Me())};var Nr=this.navigator&&/WebKit/.test(this.navigator.userAgent)?-1:0;function ut(Z,oe){oe.changedTouches&&(oe=oe.changedTouches[0]);var we=Z.ownerSVGElement||Z;if(we.createSVGPoint){var Be=we.createSVGPoint();if(Nr<0){var Ue=a(Z);if(Ue.scrollX||Ue.scrollY){we=e.select(\"body\").append(\"svg\").style({position:\"absolute\",top:0,left:0,margin:0,padding:0,border:\"none\"},\"important\");var We=we[0][0].getScreenCTM();Nr=!(We.f||We.e),we.remove()}}return Nr?(Be.x=oe.pageX,Be.y=oe.pageY):(Be.x=oe.clientX,Be.y=oe.clientY),Be=Be.matrixTransform(Z.getScreenCTM().inverse()),[Be.x,Be.y]}var wt=Z.getBoundingClientRect();return[oe.clientX-wt.left-Z.clientLeft,oe.clientY-wt.top-Z.clientTop]}e.touch=function(Z,oe,we){if(arguments.length<3&&(we=oe,oe=Me().changedTouches),oe){for(var Be=0,Ue=oe.length,We;Be<Ue;++Be)if((We=oe[Be]).identifier===we)return ut(Z,We)}},e.behavior.drag=function(){var Z=ke(Ue,\"drag\",\"dragstart\",\"dragend\"),oe=null,we=We(W,e.mouse,a,\"mousemove\",\"mouseup\"),Be=We(Ne,e.touch,H,\"touchmove\",\"touchend\");function Ue(){this.on(\"mousedown.drag\",we).on(\"touchstart.drag\",Be)}function We(wt,tt,zt,or,lr){return function(){var Dr=this,Ir=e.event.target.correspondingElement||e.event.target,oi=Dr.parentNode,ui=Z.of(Dr,arguments),qr=0,Kr=wt(),ii=\".drag\"+(Kr==null?\"\":\"-\"+Kr),vi,ci=e.select(zt(Ir)).on(or+ii,dn).on(lr+ii,En),Jr=Or(Ir),un=tt(oi,Kr);oe?(vi=oe.apply(Dr,arguments),vi=[vi.x-un[0],vi.y-un[1]]):vi=[0,0],ui({type:\"dragstart\"});function dn(){var Nn=tt(oi,Kr),ga,ya;Nn&&(ga=Nn[0]-un[0],ya=Nn[1]-un[1],qr|=ga|ya,un=Nn,ui({type:\"drag\",x:Nn[0]+vi[0],y:Nn[1]+vi[1],dx:ga,dy:ya}))}function En(){tt(oi,Kr)&&(ci.on(or+ii,null).on(lr+ii,null),Jr(qr),ui({type:\"dragend\"}))}}}return Ue.origin=function(wt){return arguments.length?(oe=wt,Ue):oe},e.rebind(Ue,Z,\"on\")};function Ne(){return e.event.changedTouches[0].identifier}e.touches=function(Z,oe){return arguments.length<2&&(oe=Me().touches),oe?r(oe).map(function(we){var Be=ut(Z,we);return Be.identifier=we.identifier,Be}):[]};var Ye=1e-6,Ve=Ye*Ye,Xe=Math.PI,ht=2*Xe,Le=ht-Ye,xe=Xe/2,Se=Xe/180,lt=180/Xe;function Gt(Z){return Z>0?1:Z<0?-1:0}function Vt(Z,oe,we){return(oe[0]-Z[0])*(we[1]-Z[1])-(oe[1]-Z[1])*(we[0]-Z[0])}function ar(Z){return Z>1?0:Z<-1?Xe:Math.acos(Z)}function Qr(Z){return Z>1?xe:Z<-1?-xe:Math.asin(Z)}function ai(Z){return((Z=Math.exp(Z))-1/Z)/2}function jr(Z){return((Z=Math.exp(Z))+1/Z)/2}function ri(Z){return((Z=Math.exp(2*Z))-1)/(Z+1)}function bi(Z){return(Z=Math.sin(Z/2))*Z}var nn=Math.SQRT2,Wi=2,Ni=4;e.interpolateZoom=function(Z,oe){var we=Z[0],Be=Z[1],Ue=Z[2],We=oe[0],wt=oe[1],tt=oe[2],zt=We-we,or=wt-Be,lr=zt*zt+or*or,Dr,Ir;if(lr<Ve)Ir=Math.log(tt/Ue)/nn,Dr=function(vi){return[we+vi*zt,Be+vi*or,Ue*Math.exp(nn*vi*Ir)]};else{var oi=Math.sqrt(lr),ui=(tt*tt-Ue*Ue+Ni*lr)/(2*Ue*Wi*oi),qr=(tt*tt-Ue*Ue-Ni*lr)/(2*tt*Wi*oi),Kr=Math.log(Math.sqrt(ui*ui+1)-ui),ii=Math.log(Math.sqrt(qr*qr+1)-qr);Ir=(ii-Kr)/nn,Dr=function(vi){var ci=vi*Ir,Jr=jr(Kr),un=Ue/(Wi*oi)*(Jr*ri(nn*ci+Kr)-ai(Kr));return[we+un*zt,Be+un*or,Ue*Jr/jr(nn*ci+Kr)]}}return Dr.duration=Ir*1e3,Dr},e.behavior.zoom=function(){var Z={x:0,y:0,k:1},oe,we,Be,Ue=[960,500],We=_n,wt=250,tt=0,zt=\"mousedown.zoom\",or=\"mousemove.zoom\",lr=\"mouseup.zoom\",Dr,Ir=\"touchstart.zoom\",oi,ui=ke(ci,\"zoomstart\",\"zoom\",\"zoomend\"),qr,Kr,ii,vi;zn||(zn=\"onwheel\"in n?($i=function(){return-e.event.deltaY*(e.event.deltaMode?120:1)},\"wheel\"):\"onmousewheel\"in n?($i=function(){return e.event.wheelDelta},\"mousewheel\"):($i=function(){return-e.event.detail},\"MozMousePixelScroll\"));function ci(pn){pn.on(zt,io).on(zn+\".zoom\",_s).on(\"dblclick.zoom\",Ns).on(Ir,Ss)}ci.event=function(pn){pn.each(function(){var za=ui.of(this,arguments),Lo=Z;Ro?e.select(this).transition().each(\"start.zoom\",function(){Z=this.__chart__||{x:0,y:0,k:1},ya(za)}).tween(\"zoom:zoom\",function(){var Fo=Ue[0],js=Ue[1],xl=we?we[0]:Fo/2,fu=we?we[1]:js/2,dl=e.interpolateZoom([(xl-Z.x)/Z.k,(fu-Z.y)/Z.k,Fo/Z.k],[(xl-Lo.x)/Lo.k,(fu-Lo.y)/Lo.k,Fo/Lo.k]);return function(xc){var At=dl(xc),Er=Fo/At[2];this.__chart__=Z={x:xl-At[0]*Er,y:fu-At[1]*Er,k:Er},so(za)}}).each(\"interrupt.zoom\",function(){wa(za)}).each(\"end.zoom\",function(){wa(za)}):(this.__chart__=Z,ya(za),so(za),wa(za))})},ci.translate=function(pn){return arguments.length?(Z={x:+pn[0],y:+pn[1],k:Z.k},ga(),ci):[Z.x,Z.y]},ci.scale=function(pn){return arguments.length?(Z={x:Z.x,y:Z.y,k:null},dn(+pn),ga(),ci):Z.k},ci.scaleExtent=function(pn){return arguments.length?(We=pn==null?_n:[+pn[0],+pn[1]],ci):We},ci.center=function(pn){return arguments.length?(Be=pn&&[+pn[0],+pn[1]],ci):Be},ci.size=function(pn){return arguments.length?(Ue=pn&&[+pn[0],+pn[1]],ci):Ue},ci.duration=function(pn){return arguments.length?(wt=+pn,ci):wt},ci.x=function(pn){return arguments.length?(Kr=pn,qr=pn.copy(),Z={x:0,y:0,k:1},ci):Kr},ci.y=function(pn){return arguments.length?(vi=pn,ii=pn.copy(),Z={x:0,y:0,k:1},ci):vi};function Jr(pn){return[(pn[0]-Z.x)/Z.k,(pn[1]-Z.y)/Z.k]}function un(pn){return[pn[0]*Z.k+Z.x,pn[1]*Z.k+Z.y]}function dn(pn){Z.k=Math.max(We[0],Math.min(We[1],pn))}function En(pn,za){za=un(za),Z.x+=pn[0]-za[0],Z.y+=pn[1]-za[1]}function Nn(pn,za,Lo,Fo){pn.__chart__={x:Z.x,y:Z.y,k:Z.k},dn(Math.pow(2,Fo)),En(we=za,Lo),pn=e.select(pn),wt>0&&(pn=pn.transition().duration(wt)),pn.call(ci.event)}function ga(){Kr&&Kr.domain(qr.range().map(function(pn){return(pn-Z.x)/Z.k}).map(qr.invert)),vi&&vi.domain(ii.range().map(function(pn){return(pn-Z.y)/Z.k}).map(ii.invert))}function ya(pn){tt++||pn({type:\"zoomstart\"})}function so(pn){ga(),pn({type:\"zoom\",scale:Z.k,translate:[Z.x,Z.y]})}function wa(pn){--tt||(pn({type:\"zoomend\"}),we=null)}function io(){var pn=this,za=ui.of(pn,arguments),Lo=0,Fo=e.select(a(pn)).on(or,fu).on(lr,dl),js=Jr(e.mouse(pn)),xl=Or(pn);ea.call(pn),ya(za);function fu(){Lo=1,En(e.mouse(pn),js),so(za)}function dl(){Fo.on(or,null).on(lr,null),xl(Lo),wa(za)}}function Ss(){var pn=this,za=ui.of(pn,arguments),Lo={},Fo=0,js,xl=\".zoom-\"+e.event.changedTouches[0].identifier,fu=\"touchmove\"+xl,dl=\"touchend\"+xl,xc=[],At=e.select(pn),Er=Or(pn);wi(),ya(za),At.on(zt,null).on(Ir,wi);function Wr(){var Bi=e.touches(pn);return js=Z.k,Bi.forEach(function(cn){cn.identifier in Lo&&(Lo[cn.identifier]=Jr(cn))}),Bi}function wi(){var Bi=e.event.target;e.select(Bi).on(fu,Ui).on(dl,Oi),xc.push(Bi);for(var cn=e.event.changedTouches,On=0,Bn=cn.length;On<Bn;++On)Lo[cn[On].identifier]=null;var yn=Wr(),to=Date.now();if(yn.length===1){if(to-oi<500){var Rn=yn[0];Nn(pn,Rn,Lo[Rn.identifier],Math.floor(Math.log(Z.k)/Math.LN2)+1),_e()}oi=to}else if(yn.length>1){var Rn=yn[0],Dn=yn[1],fn=Rn[0]-Dn[0],Ai=Rn[1]-Dn[1];Fo=fn*fn+Ai*Ai}}function Ui(){var Bi=e.touches(pn),cn,On,Bn,yn;ea.call(pn);for(var to=0,Rn=Bi.length;to<Rn;++to,yn=null)if(Bn=Bi[to],yn=Lo[Bn.identifier]){if(On)break;cn=Bn,On=yn}if(yn){var Dn=(Dn=Bn[0]-cn[0])*Dn+(Dn=Bn[1]-cn[1])*Dn,fn=Fo&&Math.sqrt(Dn/Fo);cn=[(cn[0]+Bn[0])/2,(cn[1]+Bn[1])/2],On=[(On[0]+yn[0])/2,(On[1]+yn[1])/2],dn(fn*js)}oi=null,En(cn,On),so(za)}function Oi(){if(e.event.touches.length){for(var Bi=e.event.changedTouches,cn=0,On=Bi.length;cn<On;++cn)delete Lo[Bi[cn].identifier];for(var Bn in Lo)return void Wr()}e.selectAll(xc).on(xl,null),At.on(zt,io).on(Ir,Ss),Er(),wa(za)}}function _s(){var pn=ui.of(this,arguments);Dr?clearTimeout(Dr):(ea.call(this),oe=Jr(we=Be||e.mouse(this)),ya(pn)),Dr=setTimeout(function(){Dr=null,wa(pn)},50),_e(),dn(Math.pow(2,$i()*.002)*Z.k),En(we,oe),so(pn)}function Ns(){var pn=e.mouse(this),za=Math.log(Z.k)/Math.LN2;Nn(this,pn,Jr(pn),e.event.shiftKey?Math.ceil(za)-1:Math.floor(za)+1)}return e.rebind(ci,ui,\"on\")};var _n=[0,1/0],$i,zn;e.color=Wn;function Wn(){}Wn.prototype.toString=function(){return this.rgb()+\"\"},e.hsl=It;function It(Z,oe,we){return this instanceof It?(this.h=+Z,this.s=+oe,void(this.l=+we)):arguments.length<2?Z instanceof It?new It(Z.h,Z.s,Z.l):Ha(\"\"+Z,oo,It):new It(Z,oe,we)}var ft=It.prototype=new Wn;ft.brighter=function(Z){return Z=Math.pow(.7,arguments.length?Z:1),new It(this.h,this.s,this.l/Z)},ft.darker=function(Z){return Z=Math.pow(.7,arguments.length?Z:1),new It(this.h,this.s,Z*this.l)},ft.rgb=function(){return jt(this.h,this.s,this.l)};function jt(Z,oe,we){var Be,Ue;Z=isNaN(Z)?0:(Z%=360)<0?Z+360:Z,oe=isNaN(oe)||oe<0?0:oe>1?1:oe,we=we<0?0:we>1?1:we,Ue=we<=.5?we*(1+oe):we+oe-we*oe,Be=2*we-Ue;function We(tt){return tt>360?tt-=360:tt<0&&(tt+=360),tt<60?Be+(Ue-Be)*tt/60:tt<180?Ue:tt<240?Be+(Ue-Be)*(240-tt)/60:Be}function wt(tt){return Math.round(We(tt)*255)}return new Fa(wt(Z+120),wt(Z),wt(Z-120))}e.hcl=Zt;function Zt(Z,oe,we){return this instanceof Zt?(this.h=+Z,this.c=+oe,void(this.l=+we)):arguments.length<2?Z instanceof Zt?new Zt(Z.h,Z.c,Z.l):Z instanceof Zr?Ki(Z.l,Z.a,Z.b):Ki((Z=xn((Z=e.rgb(Z)).r,Z.g,Z.b)).l,Z.a,Z.b):new Zt(Z,oe,we)}var yr=Zt.prototype=new Wn;yr.brighter=function(Z){return new Zt(this.h,this.c,Math.min(100,this.l+Vr*(arguments.length?Z:1)))},yr.darker=function(Z){return new Zt(this.h,this.c,Math.max(0,this.l-Vr*(arguments.length?Z:1)))},yr.rgb=function(){return Fr(this.h,this.c,this.l).rgb()};function Fr(Z,oe,we){return isNaN(Z)&&(Z=0),isNaN(oe)&&(oe=0),new Zr(we,Math.cos(Z*=Se)*oe,Math.sin(Z)*oe)}e.lab=Zr;function Zr(Z,oe,we){return this instanceof Zr?(this.l=+Z,this.a=+oe,void(this.b=+we)):arguments.length<2?Z instanceof Zr?new Zr(Z.l,Z.a,Z.b):Z instanceof Zt?Fr(Z.h,Z.c,Z.l):xn((Z=Fa(Z)).r,Z.g,Z.b):new Zr(Z,oe,we)}var Vr=18,gi=.95047,Si=1,Mi=1.08883,Pi=Zr.prototype=new Wn;Pi.brighter=function(Z){return new Zr(Math.min(100,this.l+Vr*(arguments.length?Z:1)),this.a,this.b)},Pi.darker=function(Z){return new Zr(Math.max(0,this.l-Vr*(arguments.length?Z:1)),this.a,this.b)},Pi.rgb=function(){return Gi(this.l,this.a,this.b)};function Gi(Z,oe,we){var Be=(Z+16)/116,Ue=Be+oe/500,We=Be-we/200;return Ue=ka(Ue)*gi,Be=ka(Be)*Si,We=ka(We)*Mi,new Fa(la(3.2404542*Ue-1.5371385*Be-.4985314*We),la(-.969266*Ue+1.8760108*Be+.041556*We),la(.0556434*Ue-.2040259*Be+1.0572252*We))}function Ki(Z,oe,we){return Z>0?new Zt(Math.atan2(we,oe)*lt,Math.sqrt(oe*oe+we*we),Z):new Zt(NaN,NaN,Z)}function ka(Z){return Z>.206893034?Z*Z*Z:(Z-4/29)/7.787037}function jn(Z){return Z>.008856?Math.pow(Z,1/3):7.787037*Z+4/29}function la(Z){return Math.round(255*(Z<=.00304?12.92*Z:1.055*Math.pow(Z,1/2.4)-.055))}e.rgb=Fa;function Fa(Z,oe,we){return this instanceof Fa?(this.r=~~Z,this.g=~~oe,void(this.b=~~we)):arguments.length<2?Z instanceof Fa?new Fa(Z.r,Z.g,Z.b):Ha(\"\"+Z,Fa,jt):new Fa(Z,oe,we)}function Ra(Z){return new Fa(Z>>16,Z>>8&255,Z&255)}function jo(Z){return Ra(Z)+\"\"}var oa=Fa.prototype=new Wn;oa.brighter=function(Z){Z=Math.pow(.7,arguments.length?Z:1);var oe=this.r,we=this.g,Be=this.b,Ue=30;return!oe&&!we&&!Be?new Fa(Ue,Ue,Ue):(oe&&oe<Ue&&(oe=Ue),we&&we<Ue&&(we=Ue),Be&&Be<Ue&&(Be=Ue),new Fa(Math.min(255,oe/Z),Math.min(255,we/Z),Math.min(255,Be/Z)))},oa.darker=function(Z){return Z=Math.pow(.7,arguments.length?Z:1),new Fa(Z*this.r,Z*this.g,Z*this.b)},oa.hsl=function(){return oo(this.r,this.g,this.b)},oa.toString=function(){return\"#\"+Sn(this.r)+Sn(this.g)+Sn(this.b)};function Sn(Z){return Z<16?\"0\"+Math.max(0,Z).toString(16):Math.min(255,Z).toString(16)}function Ha(Z,oe,we){var Be=0,Ue=0,We=0,wt,tt,zt;if(wt=/([a-z]+)\\((.*)\\)/.exec(Z=Z.toLowerCase()),wt)switch(tt=wt[2].split(\",\"),wt[1]){case\"hsl\":return we(parseFloat(tt[0]),parseFloat(tt[1])/100,parseFloat(tt[2])/100);case\"rgb\":return oe(br(tt[0]),br(tt[1]),br(tt[2]))}return(zt=Hr.get(Z))?oe(zt.r,zt.g,zt.b):(Z!=null&&Z.charAt(0)===\"#\"&&!isNaN(zt=parseInt(Z.slice(1),16))&&(Z.length===4?(Be=(zt&3840)>>4,Be=Be>>4|Be,Ue=zt&240,Ue=Ue>>4|Ue,We=zt&15,We=We<<4|We):Z.length===7&&(Be=(zt&16711680)>>16,Ue=(zt&65280)>>8,We=zt&255)),oe(Be,Ue,We))}function oo(Z,oe,we){var Be=Math.min(Z/=255,oe/=255,we/=255),Ue=Math.max(Z,oe,we),We=Ue-Be,wt,tt,zt=(Ue+Be)/2;return We?(tt=zt<.5?We/(Ue+Be):We/(2-Ue-Be),Z==Ue?wt=(oe-we)/We+(oe<we?6:0):oe==Ue?wt=(we-Z)/We+2:wt=(Z-oe)/We+4,wt*=60):(wt=NaN,tt=zt>0&&zt<1?0:wt),new It(wt,tt,zt)}function xn(Z,oe,we){Z=_t(Z),oe=_t(oe),we=_t(we);var Be=jn((.4124564*Z+.3575761*oe+.1804375*we)/gi),Ue=jn((.2126729*Z+.7151522*oe+.072175*we)/Si),We=jn((.0193339*Z+.119192*oe+.9503041*we)/Mi);return Zr(116*Ue-16,500*(Be-Ue),200*(Ue-We))}function _t(Z){return(Z/=255)<=.04045?Z/12.92:Math.pow((Z+.055)/1.055,2.4)}function br(Z){var oe=parseFloat(Z);return Z.charAt(Z.length-1)===\"%\"?Math.round(oe*2.55):oe}var Hr=e.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});Hr.forEach(function(Z,oe){Hr.set(Z,Ra(oe))});function ti(Z){return typeof Z==\"function\"?Z:function(){return Z}}e.functor=ti,e.xhr=zi(H);function zi(Z){return function(oe,we,Be){return arguments.length===2&&typeof we==\"function\"&&(Be=we,we=null),Yi(oe,we,Z,Be)}}function Yi(Z,oe,we,Be){var Ue={},We=e.dispatch(\"beforesend\",\"progress\",\"load\",\"error\"),wt={},tt=new XMLHttpRequest,zt=null;self.XDomainRequest&&!(\"withCredentials\"in tt)&&/^(http(s)?:)?\\/\\//.test(Z)&&(tt=new XDomainRequest),\"onload\"in tt?tt.onload=tt.onerror=or:tt.onreadystatechange=function(){tt.readyState>3&&or()};function or(){var lr=tt.status,Dr;if(!lr&&hi(tt)||lr>=200&&lr<300||lr===304){try{Dr=we.call(Ue,tt)}catch(Ir){We.error.call(Ue,Ir);return}We.load.call(Ue,Dr)}else We.error.call(Ue,tt)}return tt.onprogress=function(lr){var Dr=e.event;e.event=lr;try{We.progress.call(Ue,tt)}finally{e.event=Dr}},Ue.header=function(lr,Dr){return lr=(lr+\"\").toLowerCase(),arguments.length<2?wt[lr]:(Dr==null?delete wt[lr]:wt[lr]=Dr+\"\",Ue)},Ue.mimeType=function(lr){return arguments.length?(oe=lr==null?null:lr+\"\",Ue):oe},Ue.responseType=function(lr){return arguments.length?(zt=lr,Ue):zt},Ue.response=function(lr){return we=lr,Ue},[\"get\",\"post\"].forEach(function(lr){Ue[lr]=function(){return Ue.send.apply(Ue,[lr].concat(r(arguments)))}}),Ue.send=function(lr,Dr,Ir){if(arguments.length===2&&typeof Dr==\"function\"&&(Ir=Dr,Dr=null),tt.open(lr,Z,!0),oe!=null&&!(\"accept\"in wt)&&(wt.accept=oe+\",*/*\"),tt.setRequestHeader)for(var oi in wt)tt.setRequestHeader(oi,wt[oi]);return oe!=null&&tt.overrideMimeType&&tt.overrideMimeType(oe),zt!=null&&(tt.responseType=zt),Ir!=null&&Ue.on(\"error\",Ir).on(\"load\",function(ui){Ir(null,ui)}),We.beforesend.call(Ue,tt),tt.send(Dr==null?null:Dr),Ue},Ue.abort=function(){return tt.abort(),Ue},e.rebind(Ue,We,\"on\"),Be==null?Ue:Ue.get(an(Be))}function an(Z){return Z.length===1?function(oe,we){Z(oe==null?we:null)}:Z}function hi(Z){var oe=Z.responseType;return oe&&oe!==\"text\"?Z.response:Z.responseText}e.dsv=function(Z,oe){var we=new RegExp('[\"'+Z+`\n",
       "]`),Be=Z.charCodeAt(0);function Ue(or,lr,Dr){arguments.length<3&&(Dr=lr,lr=null);var Ir=Yi(or,oe,lr==null?We:wt(lr),Dr);return Ir.row=function(oi){return arguments.length?Ir.response((lr=oi)==null?We:wt(oi)):lr},Ir}function We(or){return Ue.parse(or.responseText)}function wt(or){return function(lr){return Ue.parse(lr.responseText,or)}}Ue.parse=function(or,lr){var Dr;return Ue.parseRows(or,function(Ir,oi){if(Dr)return Dr(Ir,oi-1);var ui=function(qr){for(var Kr={},ii=Ir.length,vi=0;vi<ii;++vi)Kr[Ir[vi]]=qr[vi];return Kr};Dr=lr?function(qr,Kr){return lr(ui(qr),Kr)}:ui})},Ue.parseRows=function(or,lr){var Dr={},Ir={},oi=[],ui=or.length,qr=0,Kr=0,ii,vi;function ci(){if(qr>=ui)return Ir;if(vi)return vi=!1,Dr;var un=qr;if(or.charCodeAt(un)===34){for(var dn=un;dn++<ui;)if(or.charCodeAt(dn)===34){if(or.charCodeAt(dn+1)!==34)break;++dn}qr=dn+2;var En=or.charCodeAt(dn+1);return En===13?(vi=!0,or.charCodeAt(dn+2)===10&&++qr):En===10&&(vi=!0),or.slice(un+1,dn).replace(/\"\"/g,'\"')}for(;qr<ui;){var En=or.charCodeAt(qr++),Nn=1;if(En===10)vi=!0;else if(En===13)vi=!0,or.charCodeAt(qr)===10&&(++qr,++Nn);else if(En!==Be)continue;return or.slice(un,qr-Nn)}return or.slice(un)}for(;(ii=ci())!==Ir;){for(var Jr=[];ii!==Dr&&ii!==Ir;)Jr.push(ii),ii=ci();lr&&(Jr=lr(Jr,Kr++))==null||oi.push(Jr)}return oi},Ue.format=function(or){if(Array.isArray(or[0]))return Ue.formatRows(or);var lr=new V,Dr=[];return or.forEach(function(Ir){for(var oi in Ir)lr.has(oi)||Dr.push(lr.add(oi))}),[Dr.map(zt).join(Z)].concat(or.map(function(Ir){return Dr.map(function(oi){return zt(Ir[oi])}).join(Z)})).join(`\n",
       "`)},Ue.formatRows=function(or){return or.map(tt).join(`\n",
       "`)};function tt(or){return or.map(zt).join(Z)}function zt(or){return we.test(or)?'\"'+or.replace(/\\\"/g,'\"\"')+'\"':or}return Ue},e.csv=e.dsv(\",\",\"text/csv\"),e.tsv=e.dsv(\"\t\",\"text/tab-separated-values\");var Ji,ua,Fn,Sa,go=this[G(this,\"requestAnimationFrame\")]||function(Z){setTimeout(Z,17)};e.timer=function(){Oo.apply(this,arguments)};function Oo(Z,oe,we){var Be=arguments.length;Be<2&&(oe=0),Be<3&&(we=Date.now());var Ue=we+oe,We={c:Z,t:Ue,n:null};return ua?ua.n=We:Ji=We,ua=We,Fn||(Sa=clearTimeout(Sa),Fn=1,go(ho)),We}function ho(){var Z=Mo(),oe=xo()-Z;oe>24?(isFinite(oe)&&(clearTimeout(Sa),Sa=setTimeout(ho,oe)),Fn=0):(Fn=1,go(ho))}e.timer.flush=function(){Mo(),xo()};function Mo(){for(var Z=Date.now(),oe=Ji;oe;)Z>=oe.t&&oe.c(Z-oe.t)&&(oe.c=null),oe=oe.n;return Z}function xo(){for(var Z,oe=Ji,we=1/0;oe;)oe.c?(oe.t<we&&(we=oe.t),oe=(Z=oe).n):oe=Z?Z.n=oe.n:Ji=oe.n;return ua=Z,we}e.round=function(Z,oe){return oe?Math.round(Z*(oe=Math.pow(10,oe)))/oe:Math.round(Z)},e.geom={};function zs(Z){return Z[0]}function ks(Z){return Z[1]}e.geom.hull=function(Z){var oe=zs,we=ks;if(arguments.length)return Be(Z);function Be(Ue){if(Ue.length<3)return[];var We=ti(oe),wt=ti(we),tt,zt=Ue.length,or=[],lr=[];for(tt=0;tt<zt;tt++)or.push([+We.call(this,Ue[tt],tt),+wt.call(this,Ue[tt],tt),tt]);for(or.sort(Xs),tt=0;tt<zt;tt++)lr.push([or[tt][0],-or[tt][1]]);var Dr=Zs(or),Ir=Zs(lr),oi=Ir[0]===Dr[0],ui=Ir[Ir.length-1]===Dr[Dr.length-1],qr=[];for(tt=Dr.length-1;tt>=0;--tt)qr.push(Ue[or[Dr[tt]][2]]);for(tt=+oi;tt<Ir.length-ui;++tt)qr.push(Ue[or[Ir[tt]][2]]);return qr}return Be.x=function(Ue){return arguments.length?(oe=Ue,Be):oe},Be.y=function(Ue){return arguments.length?(we=Ue,Be):we},Be};function Zs(Z){for(var oe=Z.length,we=[0,1],Be=2,Ue=2;Ue<oe;Ue++){for(;Be>1&&Vt(Z[we[Be-2]],Z[we[Be-1]],Z[Ue])<=0;)--Be;we[Be++]=Ue}return we.slice(0,Be)}function Xs(Z,oe){return Z[0]-oe[0]||Z[1]-oe[1]}e.geom.polygon=function(Z){return ie(Z,wl),Z};var wl=e.geom.polygon.prototype=[];wl.area=function(){for(var Z=-1,oe=this.length,we,Be=this[oe-1],Ue=0;++Z<oe;)we=Be,Be=this[Z],Ue+=we[1]*Be[0]-we[0]*Be[1];return Ue*.5},wl.centroid=function(Z){var oe=-1,we=this.length,Be=0,Ue=0,We,wt=this[we-1],tt;for(arguments.length||(Z=-1/(6*this.area()));++oe<we;)We=wt,wt=this[oe],tt=We[0]*wt[1]-wt[0]*We[1],Be+=(We[0]+wt[0])*tt,Ue+=(We[1]+wt[1])*tt;return[Be*Z,Ue*Z]},wl.clip=function(Z){for(var oe,we=Cs(Z),Be=-1,Ue=this.length-Cs(this),We,wt,tt=this[Ue-1],zt,or,lr;++Be<Ue;){for(oe=Z.slice(),Z.length=0,zt=this[Be],or=oe[(wt=oe.length-we)-1],We=-1;++We<wt;)lr=oe[We],os(lr,tt,zt)?(os(or,tt,zt)||Z.push(cl(or,lr,tt,zt)),Z.push(lr)):os(or,tt,zt)&&Z.push(cl(or,lr,tt,zt)),or=lr;we&&Z.push(Z[0]),tt=zt}return Z};function os(Z,oe,we){return(we[0]-oe[0])*(Z[1]-oe[1])<(we[1]-oe[1])*(Z[0]-oe[0])}function cl(Z,oe,we,Be){var Ue=Z[0],We=we[0],wt=oe[0]-Ue,tt=Be[0]-We,zt=Z[1],or=we[1],lr=oe[1]-zt,Dr=Be[1]-or,Ir=(tt*(zt-or)-Dr*(Ue-We))/(Dr*wt-tt*lr);return[Ue+Ir*wt,zt+Ir*lr]}function Cs(Z){var oe=Z[0],we=Z[Z.length-1];return!(oe[0]-we[0]||oe[1]-we[1])}var ml,Ys,Hs,Eo=[],fs,Ql,Hu=[];function fc(){Ls(this),this.edge=this.site=this.circle=null}function ms(Z){var oe=Eo.pop()||new fc;return oe.site=Z,oe}function on(Z){ko(Z),Hs.remove(Z),Eo.push(Z),Ls(Z)}function fa(Z){var oe=Z.circle,we=oe.x,Be=oe.cy,Ue={x:we,y:Be},We=Z.P,wt=Z.N,tt=[Z];on(Z);for(var zt=We;zt.circle&&p(we-zt.circle.x)<Ye&&p(Be-zt.circle.cy)<Ye;)We=zt.P,tt.unshift(zt),on(zt),zt=We;tt.unshift(zt),ko(zt);for(var or=wt;or.circle&&p(we-or.circle.x)<Ye&&p(Be-or.circle.cy)<Ye;)wt=or.N,tt.push(or),on(or),or=wt;tt.push(or),ko(or);var lr=tt.length,Dr;for(Dr=1;Dr<lr;++Dr)or=tt[Dr],zt=tt[Dr-1],Al(or.edge,zt.site,or.site,Ue);zt=tt[0],or=tt[lr-1],or.edge=cf(zt.site,or.site,null,Ue),Zn(zt),Zn(or)}function Qu(Z){for(var oe=Z.x,we=Z.y,Be,Ue,We,wt,tt=Hs._;tt;)if(We=Rl(tt,we)-oe,We>Ye)tt=tt.L;else if(wt=oe-vo(tt,we),wt>Ye){if(!tt.R){Be=tt;break}tt=tt.R}else{We>-Ye?(Be=tt.P,Ue=tt):wt>-Ye?(Be=tt,Ue=tt.N):Be=Ue=tt;break}var zt=ms(Z);if(Hs.insert(Be,zt),!(!Be&&!Ue)){if(Be===Ue){ko(Be),Ue=ms(Be.site),Hs.insert(zt,Ue),zt.edge=Ue.edge=cf(Be.site,zt.site),Zn(Be),Zn(Ue);return}if(!Ue){zt.edge=cf(Be.site,zt.site);return}ko(Be),ko(Ue);var or=Be.site,lr=or.x,Dr=or.y,Ir=Z.x-lr,oi=Z.y-Dr,ui=Ue.site,qr=ui.x-lr,Kr=ui.y-Dr,ii=2*(Ir*Kr-oi*qr),vi=Ir*Ir+oi*oi,ci=qr*qr+Kr*Kr,Jr={x:(Kr*vi-oi*ci)/ii+lr,y:(Ir*ci-qr*vi)/ii+Dr};Al(Ue.edge,or,ui,Jr),zt.edge=cf(or,Z,null,Jr),Ue.edge=cf(Z,ui,null,Jr),Zn(Be),Zn(Ue)}}function Rl(Z,oe){var we=Z.site,Be=we.x,Ue=we.y,We=Ue-oe;if(!We)return Be;var wt=Z.P;if(!wt)return-1/0;we=wt.site;var tt=we.x,zt=we.y,or=zt-oe;if(!or)return tt;var lr=tt-Be,Dr=1/We-1/or,Ir=lr/or;return Dr?(-Ir+Math.sqrt(Ir*Ir-2*Dr*(lr*lr/(-2*or)-zt+or/2+Ue-We/2)))/Dr+Be:(Be+tt)/2}function vo(Z,oe){var we=Z.N;if(we)return Rl(we,oe);var Be=Z.site;return Be.y===oe?Be.x:1/0}function Zl(Z){this.site=Z,this.edges=[]}Zl.prototype.prepare=function(){for(var Z=this.edges,oe=Z.length,we;oe--;)we=Z[oe].edge,(!we.b||!we.a)&&Z.splice(oe,1);return Z.sort(Xl),Z.length};function Ks(Z){for(var oe=Z[0][0],we=Z[1][0],Be=Z[0][1],Ue=Z[1][1],We,wt,tt,zt,or=Ys,lr=or.length,Dr,Ir,oi,ui,qr,Kr;lr--;)if(Dr=or[lr],!(!Dr||!Dr.prepare()))for(oi=Dr.edges,ui=oi.length,Ir=0;Ir<ui;)Kr=oi[Ir].end(),tt=Kr.x,zt=Kr.y,qr=oi[++Ir%ui].start(),We=qr.x,wt=qr.y,(p(tt-We)>Ye||p(zt-wt)>Ye)&&(oi.splice(Ir,0,new Hc(rh(Dr.site,Kr,p(tt-oe)<Ye&&Ue-zt>Ye?{x:oe,y:p(We-oe)<Ye?wt:Ue}:p(zt-Ue)<Ye&&we-tt>Ye?{x:p(wt-Ue)<Ye?We:we,y:Ue}:p(tt-we)<Ye&&zt-Be>Ye?{x:we,y:p(We-we)<Ye?wt:Be}:p(zt-Be)<Ye&&tt-oe>Ye?{x:p(wt-Be)<Ye?We:oe,y:Be}:null),Dr.site,null)),++ui)}function Xl(Z,oe){return oe.angle-Z.angle}function Ec(){Ls(this),this.x=this.y=this.arc=this.site=this.cy=null}function Zn(Z){var oe=Z.P,we=Z.N;if(!(!oe||!we)){var Be=oe.site,Ue=Z.site,We=we.site;if(Be!==We){var wt=Ue.x,tt=Ue.y,zt=Be.x-wt,or=Be.y-tt,lr=We.x-wt,Kr=We.y-tt,Dr=2*(zt*Kr-or*lr);if(!(Dr>=-Ve)){var Ir=zt*zt+or*or,oi=lr*lr+Kr*Kr,ui=(Kr*Ir-or*oi)/Dr,qr=(zt*oi-lr*Ir)/Dr,Kr=qr+tt,ii=Hu.pop()||new Ec;ii.arc=Z,ii.site=Ue,ii.x=ui+wt,ii.y=Kr+Math.sqrt(ui*ui+qr*qr),ii.cy=Kr,Z.circle=ii;for(var vi=null,ci=Ql._;ci;)if(ii.y<ci.y||ii.y===ci.y&&ii.x<=ci.x)if(ci.L)ci=ci.L;else{vi=ci.P;break}else if(ci.R)ci=ci.R;else{vi=ci;break}Ql.insert(vi,ii),vi||(fs=ii)}}}}function ko(Z){var oe=Z.circle;oe&&(oe.P||(fs=oe.N),Ql.remove(oe),Hu.push(oe),Ls(oe),Z.circle=null)}function Co(Z,oe,we,Be){return function(Ue){var We=Ue.a,wt=Ue.b,tt=We.x,zt=We.y,or=wt.x,lr=wt.y,Dr=0,Ir=1,oi=or-tt,ui=lr-zt,qr;if(qr=Z-tt,!(!oi&&qr>0)){if(qr/=oi,oi<0){if(qr<Dr)return;qr<Ir&&(Ir=qr)}else if(oi>0){if(qr>Ir)return;qr>Dr&&(Dr=qr)}if(qr=we-tt,!(!oi&&qr<0)){if(qr/=oi,oi<0){if(qr>Ir)return;qr>Dr&&(Dr=qr)}else if(oi>0){if(qr<Dr)return;qr<Ir&&(Ir=qr)}if(qr=oe-zt,!(!ui&&qr>0)){if(qr/=ui,ui<0){if(qr<Dr)return;qr<Ir&&(Ir=qr)}else if(ui>0){if(qr>Ir)return;qr>Dr&&(Dr=qr)}if(qr=Be-zt,!(!ui&&qr<0)){if(qr/=ui,ui<0){if(qr>Ir)return;qr>Dr&&(Dr=qr)}else if(ui>0){if(qr<Dr)return;qr<Ir&&(Ir=qr)}return Dr>0&&(Ue.a={x:tt+Dr*oi,y:zt+Dr*ui}),Ir<1&&(Ue.b={x:tt+Ir*oi,y:zt+Ir*ui}),Ue}}}}}}function Tl(Z){for(var oe=ml,we=Co(Z[0][0],Z[0][1],Z[1][0],Z[1][1]),Be=oe.length,Ue;Be--;)Ue=oe[Be],(!uf(Ue,Z)||!we(Ue)||p(Ue.a.x-Ue.b.x)<Ye&&p(Ue.a.y-Ue.b.y)<Ye)&&(Ue.a=Ue.b=null,oe.splice(Be,1))}function uf(Z,oe){var we=Z.b;if(we)return!0;var Be=Z.a,Ue=oe[0][0],We=oe[1][0],wt=oe[0][1],tt=oe[1][1],zt=Z.l,or=Z.r,lr=zt.x,Dr=zt.y,Ir=or.x,oi=or.y,ui=(lr+Ir)/2,qr=(Dr+oi)/2,Kr,ii;if(oi===Dr){if(ui<Ue||ui>=We)return;if(lr>Ir){if(!Be)Be={x:ui,y:wt};else if(Be.y>=tt)return;we={x:ui,y:tt}}else{if(!Be)Be={x:ui,y:tt};else if(Be.y<wt)return;we={x:ui,y:wt}}}else if(Kr=(lr-Ir)/(oi-Dr),ii=qr-Kr*ui,Kr<-1||Kr>1)if(lr>Ir){if(!Be)Be={x:(wt-ii)/Kr,y:wt};else if(Be.y>=tt)return;we={x:(tt-ii)/Kr,y:tt}}else{if(!Be)Be={x:(tt-ii)/Kr,y:tt};else if(Be.y<wt)return;we={x:(wt-ii)/Kr,y:wt}}else if(Dr<oi){if(!Be)Be={x:Ue,y:Kr*Ue+ii};else if(Be.x>=We)return;we={x:We,y:Kr*We+ii}}else{if(!Be)Be={x:We,y:Kr*We+ii};else if(Be.x<Ue)return;we={x:Ue,y:Kr*Ue+ii}}return Z.a=Be,Z.b=we,!0}function So(Z,oe){this.l=Z,this.r=oe,this.a=this.b=null}function cf(Z,oe,we,Be){var Ue=new So(Z,oe);return ml.push(Ue),we&&Al(Ue,Z,oe,we),Be&&Al(Ue,oe,Z,Be),Ys[Z.i].edges.push(new Hc(Ue,Z,oe)),Ys[oe.i].edges.push(new Hc(Ue,oe,Z)),Ue}function rh(Z,oe,we){var Be=new So(Z,null);return Be.a=oe,Be.b=we,ml.push(Be),Be}function Al(Z,oe,we,Be){!Z.a&&!Z.b?(Z.a=Be,Z.l=oe,Z.r=we):Z.l===we?Z.b=Be:Z.a=Be}function Hc(Z,oe,we){var Be=Z.a,Ue=Z.b;this.edge=Z,this.site=oe,this.angle=we?Math.atan2(we.y-oe.y,we.x-oe.x):Z.l===oe?Math.atan2(Ue.x-Be.x,Be.y-Ue.y):Math.atan2(Be.x-Ue.x,Ue.y-Be.y)}Hc.prototype={start:function(){return this.edge.l===this.site?this.edge.a:this.edge.b},end:function(){return this.edge.l===this.site?this.edge.b:this.edge.a}};function eu(){this._=null}function Ls(Z){Z.U=Z.C=Z.L=Z.R=Z.P=Z.N=null}eu.prototype={insert:function(Z,oe){var we,Be,Ue;if(Z){if(oe.P=Z,oe.N=Z.N,Z.N&&(Z.N.P=oe),Z.N=oe,Z.R){for(Z=Z.R;Z.L;)Z=Z.L;Z.L=oe}else Z.R=oe;we=Z}else this._?(Z=Of(this._),oe.P=null,oe.N=Z,Z.P=Z.L=oe,we=Z):(oe.P=oe.N=null,this._=oe,we=null);for(oe.L=oe.R=null,oe.U=we,oe.C=!0,Z=oe;we&&we.C;)Be=we.U,we===Be.L?(Ue=Be.R,Ue&&Ue.C?(we.C=Ue.C=!1,Be.C=!0,Z=Be):(Z===we.R&&(mu(this,we),Z=we,we=Z.U),we.C=!1,Be.C=!0,kc(this,Be))):(Ue=Be.L,Ue&&Ue.C?(we.C=Ue.C=!1,Be.C=!0,Z=Be):(Z===we.L&&(kc(this,we),Z=we,we=Z.U),we.C=!1,Be.C=!0,mu(this,Be))),we=Z.U;this._.C=!1},remove:function(Z){Z.N&&(Z.N.P=Z.P),Z.P&&(Z.P.N=Z.N),Z.N=Z.P=null;var oe=Z.U,we,Be=Z.L,Ue=Z.R,We,wt;if(Be?Ue?We=Of(Ue):We=Be:We=Ue,oe?oe.L===Z?oe.L=We:oe.R=We:this._=We,Be&&Ue?(wt=We.C,We.C=Z.C,We.L=Be,Be.U=We,We!==Ue?(oe=We.U,We.U=Z.U,Z=We.R,oe.L=Z,We.R=Ue,Ue.U=We):(We.U=oe,oe=We,Z=We.R)):(wt=Z.C,Z=We),Z&&(Z.U=oe),!wt){if(Z&&Z.C){Z.C=!1;return}do{if(Z===this._)break;if(Z===oe.L){if(we=oe.R,we.C&&(we.C=!1,oe.C=!0,mu(this,oe),we=oe.R),we.L&&we.L.C||we.R&&we.R.C){(!we.R||!we.R.C)&&(we.L.C=!1,we.C=!0,kc(this,we),we=oe.R),we.C=oe.C,oe.C=we.R.C=!1,mu(this,oe),Z=this._;break}}else if(we=oe.L,we.C&&(we.C=!1,oe.C=!0,kc(this,oe),we=oe.L),we.L&&we.L.C||we.R&&we.R.C){(!we.L||!we.L.C)&&(we.R.C=!1,we.C=!0,mu(this,we),we=oe.L),we.C=oe.C,oe.C=we.L.C=!1,kc(this,oe),Z=this._;break}we.C=!0,Z=oe,oe=oe.U}while(!Z.C);Z&&(Z.C=!1)}}};function mu(Z,oe){var we=oe,Be=oe.R,Ue=we.U;Ue?Ue.L===we?Ue.L=Be:Ue.R=Be:Z._=Be,Be.U=Ue,we.U=Be,we.R=Be.L,we.R&&(we.R.U=we),Be.L=we}function kc(Z,oe){var we=oe,Be=oe.L,Ue=we.U;Ue?Ue.L===we?Ue.L=Be:Ue.R=Be:Z._=Be,Be.U=Ue,we.U=Be,we.L=Be.R,we.L&&(we.L.U=we),Be.R=we}function Of(Z){for(;Z.L;)Z=Z.L;return Z}function Gc(Z,oe){var we=Z.sort(vd).pop(),Be,Ue,We;for(ml=[],Ys=new Array(Z.length),Hs=new eu,Ql=new eu;;)if(We=fs,we&&(!We||we.y<We.y||we.y===We.y&&we.x<We.x))(we.x!==Be||we.y!==Ue)&&(Ys[we.i]=new Zl(we),Qu(we),Be=we.x,Ue=we.y),we=Z.pop();else if(We)fa(We.arc);else break;oe&&(Tl(oe),Ks(oe));var wt={cells:Ys,edges:ml};return Hs=Ql=ml=Ys=null,wt}function vd(Z,oe){return oe.y-Z.y||oe.x-Z.x}e.geom.voronoi=function(Z){var oe=zs,we=ks,Be=oe,Ue=we,We=Bf;if(Z)return wt(Z);function wt(zt){var or=new Array(zt.length),lr=We[0][0],Dr=We[0][1],Ir=We[1][0],oi=We[1][1];return Gc(tt(zt),We).cells.forEach(function(ui,qr){var Kr=ui.edges,ii=ui.site,vi=or[qr]=Kr.length?Kr.map(function(ci){var Jr=ci.start();return[Jr.x,Jr.y]}):ii.x>=lr&&ii.x<=Ir&&ii.y>=Dr&&ii.y<=oi?[[lr,oi],[Ir,oi],[Ir,Dr],[lr,Dr]]:[];vi.point=zt[qr]}),or}function tt(zt){return zt.map(function(or,lr){return{x:Math.round(Be(or,lr)/Ye)*Ye,y:Math.round(Ue(or,lr)/Ye)*Ye,i:lr}})}return wt.links=function(zt){return Gc(tt(zt)).edges.filter(function(or){return or.l&&or.r}).map(function(or){return{source:zt[or.l.i],target:zt[or.r.i]}})},wt.triangles=function(zt){var or=[];return Gc(tt(zt)).cells.forEach(function(lr,Dr){for(var Ir=lr.site,oi=lr.edges.sort(Xl),ui=-1,qr=oi.length,Kr,ii,vi=oi[qr-1].edge,ci=vi.l===Ir?vi.r:vi.l;++ui<qr;)Kr=vi,ii=ci,vi=oi[ui].edge,ci=vi.l===Ir?vi.r:vi.l,Dr<ii.i&&Dr<ci.i&&ss(Ir,ii,ci)<0&&or.push([zt[Dr],zt[ii.i],zt[ci.i]])}),or},wt.x=function(zt){return arguments.length?(Be=ti(oe=zt),wt):oe},wt.y=function(zt){return arguments.length?(Ue=ti(we=zt),wt):we},wt.clipExtent=function(zt){return arguments.length?(We=zt==null?Bf:zt,wt):We===Bf?null:We},wt.size=function(zt){return arguments.length?wt.clipExtent(zt&&[[0,0],zt]):We===Bf?null:We&&We[1]},wt};var Bf=[[-1e6,-1e6],[1e6,1e6]];function ss(Z,oe,we){return(Z.x-we.x)*(oe.y-Z.y)-(Z.x-oe.x)*(we.y-Z.y)}e.geom.delaunay=function(Z){return e.geom.voronoi().triangles(Z)},e.geom.quadtree=function(Z,oe,we,Be,Ue){var We=zs,wt=ks,tt;if(tt=arguments.length)return We=ff,wt=ih,tt===3&&(Ue=we,Be=oe,we=oe=0),zt(Z);function zt(or){var lr,Dr=ti(We),Ir=ti(wt),oi,ui,qr,Kr,ii,vi,ci,Jr;if(oe!=null)ii=oe,vi=we,ci=Be,Jr=Ue;else if(ci=Jr=-(ii=vi=1/0),oi=[],ui=[],Kr=or.length,tt)for(qr=0;qr<Kr;++qr)lr=or[qr],lr.x<ii&&(ii=lr.x),lr.y<vi&&(vi=lr.y),lr.x>ci&&(ci=lr.x),lr.y>Jr&&(Jr=lr.y),oi.push(lr.x),ui.push(lr.y);else for(qr=0;qr<Kr;++qr){var un=+Dr(lr=or[qr],qr),dn=+Ir(lr,qr);un<ii&&(ii=un),dn<vi&&(vi=dn),un>ci&&(ci=un),dn>Jr&&(Jr=dn),oi.push(un),ui.push(dn)}var En=ci-ii,Nn=Jr-vi;En>Nn?Jr=vi+En:ci=ii+Nn;function ga(wa,io,Ss,_s,Ns,pn,za,Lo){if(!(isNaN(Ss)||isNaN(_s)))if(wa.leaf){var Fo=wa.x,js=wa.y;if(Fo!=null)if(p(Fo-Ss)+p(js-_s)<.01)ya(wa,io,Ss,_s,Ns,pn,za,Lo);else{var xl=wa.point;wa.x=wa.y=wa.point=null,ya(wa,xl,Fo,js,Ns,pn,za,Lo),ya(wa,io,Ss,_s,Ns,pn,za,Lo)}else wa.x=Ss,wa.y=_s,wa.point=io}else ya(wa,io,Ss,_s,Ns,pn,za,Lo)}function ya(wa,io,Ss,_s,Ns,pn,za,Lo){var Fo=(Ns+za)*.5,js=(pn+Lo)*.5,xl=Ss>=Fo,fu=_s>=js,dl=fu<<1|xl;wa.leaf=!1,wa=wa.nodes[dl]||(wa.nodes[dl]=Vl()),xl?Ns=Fo:za=Fo,fu?pn=js:Lo=js,ga(wa,io,Ss,_s,Ns,pn,za,Lo)}var so=Vl();if(so.add=function(wa){ga(so,wa,+Dr(wa,++qr),+Ir(wa,qr),ii,vi,ci,Jr)},so.visit=function(wa){Js(wa,so,ii,vi,ci,Jr)},so.find=function(wa){return hc(so,wa[0],wa[1],ii,vi,ci,Jr)},qr=-1,oe==null){for(;++qr<Kr;)ga(so,or[qr],oi[qr],ui[qr],ii,vi,ci,Jr);--qr}else or.forEach(so.add);return oi=ui=or=lr=null,so}return zt.x=function(or){return arguments.length?(We=or,zt):We},zt.y=function(or){return arguments.length?(wt=or,zt):wt},zt.extent=function(or){return arguments.length?(or==null?oe=we=Be=Ue=null:(oe=+or[0][0],we=+or[0][1],Be=+or[1][0],Ue=+or[1][1]),zt):oe==null?null:[[oe,we],[Be,Ue]]},zt.size=function(or){return arguments.length?(or==null?oe=we=Be=Ue=null:(oe=we=0,Be=+or[0],Ue=+or[1]),zt):oe==null?null:[Be-oe,Ue-we]},zt};function ff(Z){return Z.x}function ih(Z){return Z.y}function Vl(){return{leaf:!0,nodes:[],point:null,x:null,y:null}}function Js(Z,oe,we,Be,Ue,We){if(!Z(oe,we,Be,Ue,We)){var wt=(we+Ue)*.5,tt=(Be+We)*.5,zt=oe.nodes;zt[0]&&Js(Z,zt[0],we,Be,wt,tt),zt[1]&&Js(Z,zt[1],wt,Be,Ue,tt),zt[2]&&Js(Z,zt[2],we,tt,wt,We),zt[3]&&Js(Z,zt[3],wt,tt,Ue,We)}}function hc(Z,oe,we,Be,Ue,We,wt){var tt=1/0,zt;return function or(lr,Dr,Ir,oi,ui){if(!(Dr>We||Ir>wt||oi<Be||ui<Ue)){if(qr=lr.point){var qr,Kr=oe-lr.x,ii=we-lr.y,vi=Kr*Kr+ii*ii;if(vi<tt){var ci=Math.sqrt(tt=vi);Be=oe-ci,Ue=we-ci,We=oe+ci,wt=we+ci,zt=qr}}for(var Jr=lr.nodes,un=(Dr+oi)*.5,dn=(Ir+ui)*.5,En=oe>=un,Nn=we>=dn,ga=Nn<<1|En,ya=ga+4;ga<ya;++ga)if(lr=Jr[ga&3])switch(ga&3){case 0:or(lr,Dr,Ir,un,dn);break;case 1:or(lr,un,Ir,oi,dn);break;case 2:or(lr,Dr,dn,un,ui);break;case 3:or(lr,un,dn,oi,ui);break}}}(Z,Be,Ue,We,wt),zt}e.interpolateRgb=Cc;function Cc(Z,oe){Z=e.rgb(Z),oe=e.rgb(oe);var we=Z.r,Be=Z.g,Ue=Z.b,We=oe.r-we,wt=oe.g-Be,tt=oe.b-Ue;return function(zt){return\"#\"+Sn(Math.round(we+We*zt))+Sn(Math.round(Be+wt*zt))+Sn(Math.round(Ue+tt*zt))}}e.interpolateObject=ws;function ws(Z,oe){var we={},Be={},Ue;for(Ue in Z)Ue in oe?we[Ue]=Sl(Z[Ue],oe[Ue]):Be[Ue]=Z[Ue];for(Ue in oe)Ue in Z||(Be[Ue]=oe[Ue]);return function(We){for(Ue in we)Be[Ue]=we[Ue](We);return Be}}e.interpolateNumber=$s;function $s(Z,oe){return Z=+Z,oe=+oe,function(we){return Z*(1-we)+oe*we}}e.interpolateString=hs;function hs(Z,oe){var we=Ms.lastIndex=dc.lastIndex=0,Be,Ue,We,wt=-1,tt=[],zt=[];for(Z=Z+\"\",oe=oe+\"\";(Be=Ms.exec(Z))&&(Ue=dc.exec(oe));)(We=Ue.index)>we&&(We=oe.slice(we,We),tt[wt]?tt[wt]+=We:tt[++wt]=We),(Be=Be[0])===(Ue=Ue[0])?tt[wt]?tt[wt]+=Ue:tt[++wt]=Ue:(tt[++wt]=null,zt.push({i:wt,x:$s(Be,Ue)})),we=dc.lastIndex;return we<oe.length&&(We=oe.slice(we),tt[wt]?tt[wt]+=We:tt[++wt]=We),tt.length<2?zt[0]?(oe=zt[0].x,function(or){return oe(or)+\"\"}):function(){return oe}:(oe=zt.length,function(or){for(var lr=0,Dr;lr<oe;++lr)tt[(Dr=zt[lr]).i]=Dr.x(or);return tt.join(\"\")})}var Ms=/[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,dc=new RegExp(Ms.source,\"g\");e.interpolate=Sl;function Sl(Z,oe){for(var we=e.interpolators.length,Be;--we>=0&&!(Be=e.interpolators[we](Z,oe)););return Be}e.interpolators=[function(Z,oe){var we=typeof oe;return(we===\"string\"?Hr.has(oe.toLowerCase())||/^(#|rgb\\(|hsl\\()/i.test(oe)?Cc:hs:oe instanceof Wn?Cc:Array.isArray(oe)?ec:we===\"object\"&&isNaN(oe)?ws:$s)(Z,oe)}],e.interpolateArray=ec;function ec(Z,oe){var we=[],Be=[],Ue=Z.length,We=oe.length,wt=Math.min(Z.length,oe.length),tt;for(tt=0;tt<wt;++tt)we.push(Sl(Z[tt],oe[tt]));for(;tt<Ue;++tt)Be[tt]=Z[tt];for(;tt<We;++tt)Be[tt]=oe[tt];return function(zt){for(tt=0;tt<wt;++tt)Be[tt]=we[tt](zt);return Be}}var Ps=function(){return H},ov=e.map({linear:Ps,poly:Mh,quad:function(){return Ef},cubic:function(){return tc},sin:function(){return jc},exp:function(){return kf},circle:function(){return Ml},elastic:Yh,back:Eh,bounce:function(){return nh}}),wo=e.map({in:H,out:$o,\"in-out\":Ja,\"out-in\":function(Z){return Ja($o(Z))}});e.ease=function(Z){var oe=Z.indexOf(\"-\"),we=oe>=0?Z.slice(0,oe):Z,Be=oe>=0?Z.slice(oe+1):\"in\";return we=ov.get(we)||Ps,Be=wo.get(Be)||H,Od(Be(we.apply(null,t.call(arguments,1))))};function Od(Z){return function(oe){return oe<=0?0:oe>=1?1:Z(oe)}}function $o(Z){return function(oe){return 1-Z(1-oe)}}function Ja(Z){return function(oe){return .5*(oe<.5?Z(2*oe):2-Z(2-2*oe))}}function Ef(Z){return Z*Z}function tc(Z){return Z*Z*Z}function uu(Z){if(Z<=0)return 0;if(Z>=1)return 1;var oe=Z*Z,we=oe*Z;return 4*(Z<.5?we:3*(Z-oe)+we-.75)}function Mh(Z){return function(oe){return Math.pow(oe,Z)}}function jc(Z){return 1-Math.cos(Z*xe)}function kf(Z){return Math.pow(2,10*(Z-1))}function Ml(Z){return 1-Math.sqrt(1-Z*Z)}function Yh(Z,oe){var we;return arguments.length<2&&(oe=.45),arguments.length?we=oe/ht*Math.asin(1/Z):(Z=1,we=oe/4),function(Be){return 1+Z*Math.pow(2,-10*Be)*Math.sin((Be-we)*ht/oe)}}function Eh(Z){return Z||(Z=1.70158),function(oe){return oe*oe*((Z+1)*oe-Z)}}function nh(Z){return Z<1/2.75?7.5625*Z*Z:Z<2/2.75?7.5625*(Z-=1.5/2.75)*Z+.75:Z<2.5/2.75?7.5625*(Z-=2.25/2.75)*Z+.9375:7.5625*(Z-=2.625/2.75)*Z+.984375}e.interpolateHcl=hf;function hf(Z,oe){Z=e.hcl(Z),oe=e.hcl(oe);var we=Z.h,Be=Z.c,Ue=Z.l,We=oe.h-we,wt=oe.c-Be,tt=oe.l-Ue;return isNaN(wt)&&(wt=0,Be=isNaN(Be)?oe.c:Be),isNaN(We)?(We=0,we=isNaN(we)?oe.h:we):We>180?We-=360:We<-180&&(We+=360),function(zt){return Fr(we+We*zt,Be+wt*zt,Ue+tt*zt)+\"\"}}e.interpolateHsl=kh;function kh(Z,oe){Z=e.hsl(Z),oe=e.hsl(oe);var we=Z.h,Be=Z.s,Ue=Z.l,We=oe.h-we,wt=oe.s-Be,tt=oe.l-Ue;return isNaN(wt)&&(wt=0,Be=isNaN(Be)?oe.s:Be),isNaN(We)?(We=0,we=isNaN(we)?oe.h:we):We>180?We-=360:We<-180&&(We+=360),function(zt){return jt(we+We*zt,Be+wt*zt,Ue+tt*zt)+\"\"}}e.interpolateLab=Kh;function Kh(Z,oe){Z=e.lab(Z),oe=e.lab(oe);var we=Z.l,Be=Z.a,Ue=Z.b,We=oe.l-we,wt=oe.a-Be,tt=oe.b-Ue;return function(zt){return Gi(we+We*zt,Be+wt*zt,Ue+tt*zt)+\"\"}}e.interpolateRound=rc;function rc(Z,oe){return oe-=Z,function(we){return Math.round(Z+oe*we)}}e.transform=function(Z){var oe=n.createElementNS(e.ns.prefix.svg,\"g\");return(e.transform=function(we){if(we!=null){oe.setAttribute(\"transform\",we);var Be=oe.transform.baseVal.consolidate()}return new ah(Be?Be.matrix:Nf)})(Z)};function ah(Z){var oe=[Z.a,Z.b],we=[Z.c,Z.d],Be=df(oe),Ue=Wc(oe,we),We=df(Cu(we,oe,-Ue))||0;oe[0]*we[1]<we[0]*oe[1]&&(oe[0]*=-1,oe[1]*=-1,Be*=-1,Ue*=-1),this.rotate=(Be?Math.atan2(oe[1],oe[0]):Math.atan2(-we[0],we[1]))*lt,this.translate=[Z.e,Z.f],this.scale=[Be,We],this.skew=We?Math.atan2(Ue,We)*lt:0}ah.prototype.toString=function(){return\"translate(\"+this.translate+\")rotate(\"+this.rotate+\")skewX(\"+this.skew+\")scale(\"+this.scale+\")\"};function Wc(Z,oe){return Z[0]*oe[0]+Z[1]*oe[1]}function df(Z){var oe=Math.sqrt(Wc(Z,Z));return oe&&(Z[0]/=oe,Z[1]/=oe),oe}function Cu(Z,oe,we){return Z[0]+=we*oe[0],Z[1]+=we*oe[1],Z}var Nf={a:1,b:0,c:0,d:1,e:0,f:0};e.interpolateTransform=Cf;function Zc(Z){return Z.length?Z.pop()+\",\":\"\"}function ds(Z,oe,we,Be){if(Z[0]!==oe[0]||Z[1]!==oe[1]){var Ue=we.push(\"translate(\",null,\",\",null,\")\");Be.push({i:Ue-4,x:$s(Z[0],oe[0])},{i:Ue-2,x:$s(Z[1],oe[1])})}else(oe[0]||oe[1])&&we.push(\"translate(\"+oe+\")\")}function Ch(Z,oe,we,Be){Z!==oe?(Z-oe>180?oe+=360:oe-Z>180&&(Z+=360),Be.push({i:we.push(Zc(we)+\"rotate(\",null,\")\")-2,x:$s(Z,oe)})):oe&&we.push(Zc(we)+\"rotate(\"+oe+\")\")}function Bd(Z,oe,we,Be){Z!==oe?Be.push({i:we.push(Zc(we)+\"skewX(\",null,\")\")-2,x:$s(Z,oe)}):oe&&we.push(Zc(we)+\"skewX(\"+oe+\")\")}function Jh(Z,oe,we,Be){if(Z[0]!==oe[0]||Z[1]!==oe[1]){var Ue=we.push(Zc(we)+\"scale(\",null,\",\",null,\")\");Be.push({i:Ue-4,x:$s(Z[0],oe[0])},{i:Ue-2,x:$s(Z[1],oe[1])})}else(oe[0]!==1||oe[1]!==1)&&we.push(Zc(we)+\"scale(\"+oe+\")\")}function Cf(Z,oe){var we=[],Be=[];return Z=e.transform(Z),oe=e.transform(oe),ds(Z.translate,oe.translate,we,Be),Ch(Z.rotate,oe.rotate,we,Be),Bd(Z.skew,oe.skew,we,Be),Jh(Z.scale,oe.scale,we,Be),Z=oe=null,function(Ue){for(var We=-1,wt=Be.length,tt;++We<wt;)we[(tt=Be[We]).i]=tt.x(Ue);return we.join(\"\")}}function pd(Z,oe){return oe=(oe-=Z=+Z)||1/oe,function(we){return(we-Z)/oe}}function Lu(Z,oe){return oe=(oe-=Z=+Z)||1/oe,function(we){return Math.max(0,Math.min(1,(we-Z)/oe))}}e.layout={},e.layout.bundle=function(){return function(Z){for(var oe=[],we=-1,Be=Z.length;++we<Be;)oe.push($h(Z[we]));return oe}};function $h(Z){for(var oe=Z.source,we=Z.target,Be=Pu(oe,we),Ue=[oe];oe!==Be;)oe=oe.parent,Ue.push(oe);for(var We=Ue.length;we!==Be;)Ue.splice(We,0,we),we=we.parent;return Ue}function tu(Z){for(var oe=[],we=Z.parent;we!=null;)oe.push(Z),Z=we,we=we.parent;return oe.push(Z),oe}function Pu(Z,oe){if(Z===oe)return Z;for(var we=tu(Z),Be=tu(oe),Ue=we.pop(),We=Be.pop(),wt=null;Ue===We;)wt=Ue,Ue=we.pop(),We=Be.pop();return wt}e.layout.chord=function(){var Z={},oe,we,Be,Ue,We=0,wt,tt,zt;function or(){var Dr={},Ir=[],oi=e.range(Ue),ui=[],qr,Kr,ii,vi,ci;for(oe=[],we=[],qr=0,vi=-1;++vi<Ue;){for(Kr=0,ci=-1;++ci<Ue;)Kr+=Be[vi][ci];Ir.push(Kr),ui.push(e.range(Ue)),qr+=Kr}for(wt&&oi.sort(function(so,wa){return wt(Ir[so],Ir[wa])}),tt&&ui.forEach(function(so,wa){so.sort(function(io,Ss){return tt(Be[wa][io],Be[wa][Ss])})}),qr=(ht-We*Ue)/qr,Kr=0,vi=-1;++vi<Ue;){for(ii=Kr,ci=-1;++ci<Ue;){var Jr=oi[vi],un=ui[Jr][ci],dn=Be[Jr][un],En=Kr,Nn=Kr+=dn*qr;Dr[Jr+\"-\"+un]={index:Jr,subindex:un,startAngle:En,endAngle:Nn,value:dn}}we[Jr]={index:Jr,startAngle:ii,endAngle:Kr,value:Ir[Jr]},Kr+=We}for(vi=-1;++vi<Ue;)for(ci=vi-1;++ci<Ue;){var ga=Dr[vi+\"-\"+ci],ya=Dr[ci+\"-\"+vi];(ga.value||ya.value)&&oe.push(ga.value<ya.value?{source:ya,target:ga}:{source:ga,target:ya})}zt&&lr()}function lr(){oe.sort(function(Dr,Ir){return zt((Dr.source.value+Dr.target.value)/2,(Ir.source.value+Ir.target.value)/2)})}return Z.matrix=function(Dr){return arguments.length?(Ue=(Be=Dr)&&Be.length,oe=we=null,Z):Be},Z.padding=function(Dr){return arguments.length?(We=Dr,oe=we=null,Z):We},Z.sortGroups=function(Dr){return arguments.length?(wt=Dr,oe=we=null,Z):wt},Z.sortSubgroups=function(Dr){return arguments.length?(tt=Dr,oe=null,Z):tt},Z.sortChords=function(Dr){return arguments.length?(zt=Dr,oe&&lr(),Z):zt},Z.chords=function(){return oe||or(),oe},Z.groups=function(){return we||or(),we},Z},e.layout.force=function(){var Z={},oe=e.dispatch(\"start\",\"tick\",\"end\"),we,Be=[1,1],Ue,We,wt=.9,tt=Qs,zt=Qh,or=-30,lr=gd,Dr=.1,Ir=.64,oi=[],ui=[],qr,Kr,ii;function vi(Jr){return function(un,dn,En,Nn){if(un.point!==Jr){var ga=un.cx-Jr.x,ya=un.cy-Jr.y,so=Nn-dn,wa=ga*ga+ya*ya;if(so*so/Ir<wa){if(wa<lr){var io=un.charge/wa;Jr.px-=ga*io,Jr.py-=ya*io}return!0}if(un.point&&wa&&wa<lr){var io=un.pointCharge/wa;Jr.px-=ga*io,Jr.py-=ya*io}}return!un.charge}}Z.tick=function(){if((We*=.99)<.005)return we=null,oe.end({type:\"end\",alpha:We=0}),!0;var Jr=oi.length,un=ui.length,dn,En,Nn,ga,ya,so,wa,io,Ss;for(En=0;En<un;++En)Nn=ui[En],ga=Nn.source,ya=Nn.target,io=ya.x-ga.x,Ss=ya.y-ga.y,(so=io*io+Ss*Ss)&&(so=We*Kr[En]*((so=Math.sqrt(so))-qr[En])/so,io*=so,Ss*=so,ya.x-=io*(wa=ga.weight+ya.weight?ga.weight/(ga.weight+ya.weight):.5),ya.y-=Ss*wa,ga.x+=io*(wa=1-wa),ga.y+=Ss*wa);if((wa=We*Dr)&&(io=Be[0]/2,Ss=Be[1]/2,En=-1,wa))for(;++En<Jr;)Nn=oi[En],Nn.x+=(io-Nn.x)*wa,Nn.y+=(Ss-Nn.y)*wa;if(or)for(yu(dn=e.geom.quadtree(oi),We,ii),En=-1;++En<Jr;)(Nn=oi[En]).fixed||dn.visit(vi(Nn));for(En=-1;++En<Jr;)Nn=oi[En],Nn.fixed?(Nn.x=Nn.px,Nn.y=Nn.py):(Nn.x-=(Nn.px-(Nn.px=Nn.x))*wt,Nn.y-=(Nn.py-(Nn.py=Nn.y))*wt);oe.tick({type:\"tick\",alpha:We})},Z.nodes=function(Jr){return arguments.length?(oi=Jr,Z):oi},Z.links=function(Jr){return arguments.length?(ui=Jr,Z):ui},Z.size=function(Jr){return arguments.length?(Be=Jr,Z):Be},Z.linkDistance=function(Jr){return arguments.length?(tt=typeof Jr==\"function\"?Jr:+Jr,Z):tt},Z.distance=Z.linkDistance,Z.linkStrength=function(Jr){return arguments.length?(zt=typeof Jr==\"function\"?Jr:+Jr,Z):zt},Z.friction=function(Jr){return arguments.length?(wt=+Jr,Z):wt},Z.charge=function(Jr){return arguments.length?(or=typeof Jr==\"function\"?Jr:+Jr,Z):or},Z.chargeDistance=function(Jr){return arguments.length?(lr=Jr*Jr,Z):Math.sqrt(lr)},Z.gravity=function(Jr){return arguments.length?(Dr=+Jr,Z):Dr},Z.theta=function(Jr){return arguments.length?(Ir=Jr*Jr,Z):Math.sqrt(Ir)},Z.alpha=function(Jr){return arguments.length?(Jr=+Jr,We?Jr>0?We=Jr:(we.c=null,we.t=NaN,we=null,oe.end({type:\"end\",alpha:We=0})):Jr>0&&(oe.start({type:\"start\",alpha:We=Jr}),we=Oo(Z.tick)),Z):We},Z.start=function(){var Jr,un=oi.length,dn=ui.length,En=Be[0],Nn=Be[1],ga,ya;for(Jr=0;Jr<un;++Jr)(ya=oi[Jr]).index=Jr,ya.weight=0;for(Jr=0;Jr<dn;++Jr)ya=ui[Jr],typeof ya.source==\"number\"&&(ya.source=oi[ya.source]),typeof ya.target==\"number\"&&(ya.target=oi[ya.target]),++ya.source.weight,++ya.target.weight;for(Jr=0;Jr<un;++Jr)ya=oi[Jr],isNaN(ya.x)&&(ya.x=so(\"x\",En)),isNaN(ya.y)&&(ya.y=so(\"y\",Nn)),isNaN(ya.px)&&(ya.px=ya.x),isNaN(ya.py)&&(ya.py=ya.y);if(qr=[],typeof tt==\"function\")for(Jr=0;Jr<dn;++Jr)qr[Jr]=+tt.call(this,ui[Jr],Jr);else for(Jr=0;Jr<dn;++Jr)qr[Jr]=tt;if(Kr=[],typeof zt==\"function\")for(Jr=0;Jr<dn;++Jr)Kr[Jr]=+zt.call(this,ui[Jr],Jr);else for(Jr=0;Jr<dn;++Jr)Kr[Jr]=zt;if(ii=[],typeof or==\"function\")for(Jr=0;Jr<un;++Jr)ii[Jr]=+or.call(this,oi[Jr],Jr);else for(Jr=0;Jr<un;++Jr)ii[Jr]=or;function so(wa,io){if(!ga){for(ga=new Array(un),Ns=0;Ns<un;++Ns)ga[Ns]=[];for(Ns=0;Ns<dn;++Ns){var Ss=ui[Ns];ga[Ss.source.index].push(Ss.target),ga[Ss.target.index].push(Ss.source)}}for(var _s=ga[Jr],Ns=-1,pn=_s.length,za;++Ns<pn;)if(!isNaN(za=_s[Ns][wa]))return za;return Math.random()*io}return Z.resume()},Z.resume=function(){return Z.alpha(.1)},Z.stop=function(){return Z.alpha(0)},Z.drag=function(){if(Ue||(Ue=e.behavior.drag().origin(H).on(\"dragstart.force\",Lc).on(\"drag.force\",ci).on(\"dragend.force\",fl)),!arguments.length)return Ue;this.on(\"mouseover.force\",Xc).on(\"mouseout.force\",ic).call(Ue)};function ci(Jr){Jr.px=e.event.x,Jr.py=e.event.y,Z.resume()}return e.rebind(Z,oe,\"on\")};function Lc(Z){Z.fixed|=2}function fl(Z){Z.fixed&=-7}function Xc(Z){Z.fixed|=4,Z.px=Z.x,Z.py=Z.y}function ic(Z){Z.fixed&=-5}function yu(Z,oe,we){var Be=0,Ue=0;if(Z.charge=0,!Z.leaf)for(var We=Z.nodes,wt=We.length,tt=-1,zt;++tt<wt;)zt=We[tt],zt!=null&&(yu(zt,oe,we),Z.charge+=zt.charge,Be+=zt.charge*zt.cx,Ue+=zt.charge*zt.cy);if(Z.point){Z.leaf||(Z.point.x+=Math.random()-.5,Z.point.y+=Math.random()-.5);var or=oe*we[Z.point.index];Z.charge+=Z.pointCharge=or,Be+=or*Z.point.x,Ue+=or*Z.point.y}Z.cx=Be/Z.charge,Z.cy=Ue/Z.charge}var Qs=20,Qh=1,gd=1/0;e.layout.hierarchy=function(){var Z=Uf,oe=sv,we=Lf;function Be(Ue){var We=[Ue],wt=[],tt;for(Ue.depth=0;(tt=We.pop())!=null;)if(wt.push(tt),(or=oe.call(Be,tt,tt.depth))&&(zt=or.length)){for(var zt,or,lr;--zt>=0;)We.push(lr=or[zt]),lr.parent=tt,lr.depth=tt.depth+1;we&&(tt.value=0),tt.children=or}else we&&(tt.value=+we.call(Be,tt,tt.depth)||0),delete tt.children;return vc(Ue,function(Dr){var Ir,oi;Z&&(Ir=Dr.children)&&Ir.sort(Z),we&&(oi=Dr.parent)&&(oi.value+=Dr.value)}),wt}return Be.sort=function(Ue){return arguments.length?(Z=Ue,Be):Z},Be.children=function(Ue){return arguments.length?(oe=Ue,Be):oe},Be.value=function(Ue){return arguments.length?(we=Ue,Be):we},Be.revalue=function(Ue){return we&&(Pc(Ue,function(We){We.children&&(We.value=0)}),vc(Ue,function(We){var wt;We.children||(We.value=+we.call(Be,We,We.depth)||0),(wt=We.parent)&&(wt.value+=We.value)})),Ue},Be};function Gu(Z,oe){return e.rebind(Z,oe,\"sort\",\"children\",\"value\"),Z.nodes=Z,Z.links=Iu,Z}function Pc(Z,oe){for(var we=[Z];(Z=we.pop())!=null;)if(oe(Z),(Ue=Z.children)&&(Be=Ue.length))for(var Be,Ue;--Be>=0;)we.push(Ue[Be])}function vc(Z,oe){for(var we=[Z],Be=[];(Z=we.pop())!=null;)if(Be.push(Z),(wt=Z.children)&&(We=wt.length))for(var Ue=-1,We,wt;++Ue<We;)we.push(wt[Ue]);for(;(Z=Be.pop())!=null;)oe(Z)}function sv(Z){return Z.children}function Lf(Z){return Z.value}function Uf(Z,oe){return oe.value-Z.value}function Iu(Z){return e.merge(Z.map(function(oe){return(oe.children||[]).map(function(we){return{source:oe,target:we}})}))}e.layout.partition=function(){var Z=e.layout.hierarchy(),oe=[1,1];function we(We,wt,tt,zt){var or=We.children;if(We.x=wt,We.y=We.depth*zt,We.dx=tt,We.dy=zt,or&&(Dr=or.length)){var lr=-1,Dr,Ir,oi;for(tt=We.value?tt/We.value:0;++lr<Dr;)we(Ir=or[lr],wt,oi=Ir.value*tt,zt),wt+=oi}}function Be(We){var wt=We.children,tt=0;if(wt&&(or=wt.length))for(var zt=-1,or;++zt<or;)tt=Math.max(tt,Be(wt[zt]));return 1+tt}function Ue(We,wt){var tt=Z.call(this,We,wt);return we(tt[0],0,oe[0],oe[1]/Be(tt[0])),tt}return Ue.size=function(We){return arguments.length?(oe=We,Ue):oe},Gu(Ue,Z)},e.layout.pie=function(){var Z=Number,oe=oh,we=0,Be=ht,Ue=0;function We(wt){var tt=wt.length,zt=wt.map(function(vi,ci){return+Z.call(We,vi,ci)}),or=+(typeof we==\"function\"?we.apply(this,arguments):we),lr=(typeof Be==\"function\"?Be.apply(this,arguments):Be)-or,Dr=Math.min(Math.abs(lr)/tt,+(typeof Ue==\"function\"?Ue.apply(this,arguments):Ue)),Ir=Dr*(lr<0?-1:1),oi=e.sum(zt),ui=oi?(lr-tt*Ir)/oi:0,qr=e.range(tt),Kr=[],ii;return oe!=null&&qr.sort(oe===oh?function(vi,ci){return zt[ci]-zt[vi]}:function(vi,ci){return oe(wt[vi],wt[ci])}),qr.forEach(function(vi){Kr[vi]={data:wt[vi],value:ii=zt[vi],startAngle:or,endAngle:or+=ii*ui+Ir,padAngle:Dr}}),Kr}return We.value=function(wt){return arguments.length?(Z=wt,We):Z},We.sort=function(wt){return arguments.length?(oe=wt,We):oe},We.startAngle=function(wt){return arguments.length?(we=wt,We):we},We.endAngle=function(wt){return arguments.length?(Be=wt,We):Be},We.padAngle=function(wt){return arguments.length?(Ue=wt,We):Ue},We};var oh={};e.layout.stack=function(){var Z=H,oe=_u,we=xu,Be=md,Ue=ru,We=vf;function wt(tt,zt){if(!(ui=tt.length))return tt;var or=tt.map(function(vi,ci){return Z.call(wt,vi,ci)}),lr=or.map(function(vi){return vi.map(function(ci,Jr){return[Ue.call(wt,ci,Jr),We.call(wt,ci,Jr)]})}),Dr=oe.call(wt,lr,zt);or=e.permute(or,Dr),lr=e.permute(lr,Dr);var Ir=we.call(wt,lr,zt),oi=or[0].length,ui,qr,Kr,ii;for(Kr=0;Kr<oi;++Kr)for(Be.call(wt,or[0][Kr],ii=Ir[Kr],lr[0][Kr][1]),qr=1;qr<ui;++qr)Be.call(wt,or[qr][Kr],ii+=lr[qr-1][Kr][1],lr[qr][Kr][1]);return tt}return wt.values=function(tt){return arguments.length?(Z=tt,wt):Z},wt.order=function(tt){return arguments.length?(oe=typeof tt==\"function\"?tt:sh.get(tt)||_u,wt):oe},wt.offset=function(tt){return arguments.length?(we=typeof tt==\"function\"?tt:Fs.get(tt)||xu,wt):we},wt.x=function(tt){return arguments.length?(Ue=tt,wt):Ue},wt.y=function(tt){return arguments.length?(We=tt,wt):We},wt.out=function(tt){return arguments.length?(Be=tt,wt):Be},wt};function ru(Z){return Z.x}function vf(Z){return Z.y}function md(Z,oe,we){Z.y0=oe,Z.y=we}var sh=e.map({\"inside-out\":function(Z){var oe=Z.length,we,Be,Ue=Z.map(Lh),We=Z.map(Is),wt=e.range(oe).sort(function(Dr,Ir){return Ue[Dr]-Ue[Ir]}),tt=0,zt=0,or=[],lr=[];for(we=0;we<oe;++we)Be=wt[we],tt<zt?(tt+=We[Be],or.push(Be)):(zt+=We[Be],lr.push(Be));return lr.reverse().concat(or)},reverse:function(Z){return e.range(Z.length).reverse()},default:_u}),Fs=e.map({silhouette:function(Z){var oe=Z.length,we=Z[0].length,Be=[],Ue=0,We,wt,tt,zt=[];for(wt=0;wt<we;++wt){for(We=0,tt=0;We<oe;We++)tt+=Z[We][wt][1];tt>Ue&&(Ue=tt),Be.push(tt)}for(wt=0;wt<we;++wt)zt[wt]=(Ue-Be[wt])/2;return zt},wiggle:function(Z){var oe=Z.length,we=Z[0],Be=we.length,Ue,We,wt,tt,zt,or,lr,Dr,Ir,oi=[];for(oi[0]=Dr=Ir=0,We=1;We<Be;++We){for(Ue=0,tt=0;Ue<oe;++Ue)tt+=Z[Ue][We][1];for(Ue=0,zt=0,lr=we[We][0]-we[We-1][0];Ue<oe;++Ue){for(wt=0,or=(Z[Ue][We][1]-Z[Ue][We-1][1])/(2*lr);wt<Ue;++wt)or+=(Z[wt][We][1]-Z[wt][We-1][1])/lr;zt+=or*Z[Ue][We][1]}oi[We]=Dr-=tt?zt/tt*lr:0,Dr<Ir&&(Ir=Dr)}for(We=0;We<Be;++We)oi[We]-=Ir;return oi},expand:function(Z){var oe=Z.length,we=Z[0].length,Be=1/oe,Ue,We,wt,tt=[];for(We=0;We<we;++We){for(Ue=0,wt=0;Ue<oe;Ue++)wt+=Z[Ue][We][1];if(wt)for(Ue=0;Ue<oe;Ue++)Z[Ue][We][1]/=wt;else for(Ue=0;Ue<oe;Ue++)Z[Ue][We][1]=Be}for(We=0;We<we;++We)tt[We]=0;return tt},zero:xu});function _u(Z){return e.range(Z.length)}function xu(Z){for(var oe=-1,we=Z[0].length,Be=[];++oe<we;)Be[oe]=0;return Be}function Lh(Z){for(var oe=1,we=0,Be=Z[0][1],Ue,We=Z.length;oe<We;++oe)(Ue=Z[oe][1])>Be&&(we=oe,Be=Ue);return we}function Is(Z){return Z.reduce(Pf,0)}function Pf(Z,oe){return Z+oe[1]}e.layout.histogram=function(){var Z=!0,oe=Number,we=Vf,Be=Ic;function Ue(We,Ir){for(var tt=[],zt=We.map(oe,this),or=we.call(this,zt,Ir),lr=Be.call(this,or,zt,Ir),Dr,Ir=-1,oi=zt.length,ui=lr.length-1,qr=Z?1:1/oi,Kr;++Ir<ui;)Dr=tt[Ir]=[],Dr.dx=lr[Ir+1]-(Dr.x=lr[Ir]),Dr.y=0;if(ui>0)for(Ir=-1;++Ir<oi;)Kr=zt[Ir],Kr>=or[0]&&Kr<=or[1]&&(Dr=tt[e.bisect(lr,Kr,1,ui)-1],Dr.y+=qr,Dr.push(We[Ir]));return tt}return Ue.value=function(We){return arguments.length?(oe=We,Ue):oe},Ue.range=function(We){return arguments.length?(we=ti(We),Ue):we},Ue.bins=function(We){return arguments.length?(Be=typeof We==\"number\"?function(wt){return ju(wt,We)}:ti(We),Ue):Be},Ue.frequency=function(We){return arguments.length?(Z=!!We,Ue):Z},Ue};function Ic(Z,oe){return ju(Z,Math.ceil(Math.log(oe.length)/Math.LN2+1))}function ju(Z,oe){for(var we=-1,Be=+Z[0],Ue=(Z[1]-Be)/oe,We=[];++we<=oe;)We[we]=Ue*we+Be;return We}function Vf(Z){return[e.min(Z),e.max(Z)]}e.layout.pack=function(){var Z=e.layout.hierarchy().sort(pc),oe=0,we=[1,1],Be;function Ue(We,wt){var tt=Z.call(this,We,wt),zt=tt[0],or=we[0],lr=we[1],Dr=Be==null?Math.sqrt:typeof Be==\"function\"?Be:function(){return Be};if(zt.x=zt.y=0,vc(zt,function(oi){oi.r=+Dr(oi.value)}),vc(zt,Ih),oe){var Ir=oe*(Be?1:Math.max(2*zt.r/or,2*zt.r/lr))/2;vc(zt,function(oi){oi.r+=Ir}),vc(zt,Ih),vc(zt,function(oi){oi.r-=Ir})}return gc(zt,or/2,lr/2,Be?1:1/Math.max(2*zt.r/or,2*zt.r/lr)),tt}return Ue.size=function(We){return arguments.length?(we=We,Ue):we},Ue.radius=function(We){return arguments.length?(Be=We==null||typeof We==\"function\"?We:+We,Ue):Be},Ue.padding=function(We){return arguments.length?(oe=+We,Ue):oe},Gu(Ue,Z)};function pc(Z,oe){return Z.value-oe.value}function pf(Z,oe){var we=Z._pack_next;Z._pack_next=oe,oe._pack_prev=Z,oe._pack_next=we,we._pack_prev=oe}function Ph(Z,oe){Z._pack_next=oe,oe._pack_prev=Z}function Dl(Z,oe){var we=oe.x-Z.x,Be=oe.y-Z.y,Ue=Z.r+oe.r;return .999*Ue*Ue>we*we+Be*Be}function Ih(Z){if(!(oe=Z.children)||!(Ir=oe.length))return;var oe,we=1/0,Be=-1/0,Ue=1/0,We=-1/0,wt,tt,zt,or,lr,Dr,Ir;function oi(Jr){we=Math.min(Jr.x-Jr.r,we),Be=Math.max(Jr.x+Jr.r,Be),Ue=Math.min(Jr.y-Jr.r,Ue),We=Math.max(Jr.y+Jr.r,We)}if(oe.forEach(Wu),wt=oe[0],wt.x=-wt.r,wt.y=0,oi(wt),Ir>1&&(tt=oe[1],tt.x=tt.r,tt.y=0,oi(tt),Ir>2))for(zt=oe[2],hl(wt,tt,zt),oi(zt),pf(wt,zt),wt._pack_prev=zt,pf(zt,tt),tt=wt._pack_next,or=3;or<Ir;or++){hl(wt,tt,zt=oe[or]);var ui=0,qr=1,Kr=1;for(lr=tt._pack_next;lr!==tt;lr=lr._pack_next,qr++)if(Dl(lr,zt)){ui=1;break}if(ui==1)for(Dr=wt._pack_prev;Dr!==lr._pack_prev&&!Dl(Dr,zt);Dr=Dr._pack_prev,Kr++);ui?(qr<Kr||qr==Kr&&tt.r<wt.r?Ph(wt,tt=lr):Ph(wt=Dr,tt),or--):(pf(wt,zt),tt=zt,oi(zt))}var ii=(we+Be)/2,vi=(Ue+We)/2,ci=0;for(or=0;or<Ir;or++)zt=oe[or],zt.x-=ii,zt.y-=vi,ci=Math.max(ci,zt.r+Math.sqrt(zt.x*zt.x+zt.y*zt.y));Z.r=ci,oe.forEach(Rc)}function Wu(Z){Z._pack_next=Z._pack_prev=Z}function Rc(Z){delete Z._pack_next,delete Z._pack_prev}function gc(Z,oe,we,Be){var Ue=Z.children;if(Z.x=oe+=Be*Z.x,Z.y=we+=Be*Z.y,Z.r*=Be,Ue)for(var We=-1,wt=Ue.length;++We<wt;)gc(Ue[We],oe,we,Be)}function hl(Z,oe,we){var Be=Z.r+we.r,Ue=oe.x-Z.x,We=oe.y-Z.y;if(Be&&(Ue||We)){var wt=oe.r+we.r,tt=Ue*Ue+We*We;wt*=wt,Be*=Be;var zt=.5+(Be-wt)/(2*tt),or=Math.sqrt(Math.max(0,2*wt*(Be+tt)-(Be-=tt)*Be-wt*wt))/(2*tt);we.x=Z.x+zt*Ue+or*We,we.y=Z.y+zt*We-or*Ue}else we.x=Z.x+Be,we.y=Z.y}e.layout.tree=function(){var Z=e.layout.hierarchy().sort(null).value(null),oe=iu,we=[1,1],Be=null;function Ue(lr,Dr){var Ir=Z.call(this,lr,Dr),oi=Ir[0],ui=We(oi);if(vc(ui,wt),ui.parent.m=-ui.z,Pc(ui,tt),Be)Pc(oi,or);else{var qr=oi,Kr=oi,ii=oi;Pc(oi,function(un){un.x<qr.x&&(qr=un),un.x>Kr.x&&(Kr=un),un.depth>ii.depth&&(ii=un)});var vi=oe(qr,Kr)/2-qr.x,ci=we[0]/(Kr.x+oe(Kr,qr)/2+vi),Jr=we[1]/(ii.depth||1);Pc(oi,function(un){un.x=(un.x+vi)*ci,un.y=un.depth*Jr})}return Ir}function We(lr){for(var Dr={A:null,children:[lr]},Ir=[Dr],oi;(oi=Ir.pop())!=null;)for(var ui=oi.children,qr,Kr=0,ii=ui.length;Kr<ii;++Kr)Ir.push((ui[Kr]=qr={_:ui[Kr],parent:oi,children:(qr=ui[Kr].children)&&qr.slice()||[],A:null,a:null,z:0,m:0,c:0,s:0,t:null,i:Kr}).a=qr);return Dr.children[0]}function wt(lr){var Dr=lr.children,Ir=lr.parent.children,oi=lr.i?Ir[lr.i-1]:null;if(Dr.length){gf(lr);var ui=(Dr[0].z+Dr[Dr.length-1].z)/2;oi?(lr.z=oi.z+oe(lr._,oi._),lr.m=lr.z-ui):lr.z=ui}else oi&&(lr.z=oi.z+oe(lr._,oi._));lr.parent.A=zt(lr,oi,lr.parent.A||Ir[0])}function tt(lr){lr._.x=lr.z+lr.parent.m,lr.m+=lr.parent.m}function zt(lr,Dr,Ir){if(Dr){for(var oi=lr,ui=lr,qr=Dr,Kr=oi.parent.children[0],ii=oi.m,vi=ui.m,ci=qr.m,Jr=Kr.m,un;qr=Yc(qr),oi=mc(oi),qr&&oi;)Kr=mc(Kr),ui=Yc(ui),ui.a=lr,un=qr.z+ci-oi.z-ii+oe(qr._,oi._),un>0&&(nc(gt(qr,lr,Ir),lr,un),ii+=un,vi+=un),ci+=qr.m,ii+=oi.m,Jr+=Kr.m,vi+=ui.m;qr&&!Yc(ui)&&(ui.t=qr,ui.m+=ci-vi),oi&&!mc(Kr)&&(Kr.t=oi,Kr.m+=ii-Jr,Ir=lr)}return Ir}function or(lr){lr.x*=we[0],lr.y=lr.depth*we[1]}return Ue.separation=function(lr){return arguments.length?(oe=lr,Ue):oe},Ue.size=function(lr){return arguments.length?(Be=(we=lr)==null?or:null,Ue):Be?null:we},Ue.nodeSize=function(lr){return arguments.length?(Be=(we=lr)==null?null:or,Ue):Be?we:null},Gu(Ue,Z)};function iu(Z,oe){return Z.parent==oe.parent?1:2}function mc(Z){var oe=Z.children;return oe.length?oe[0]:Z.t}function Yc(Z){var oe=Z.children,we;return(we=oe.length)?oe[we-1]:Z.t}function nc(Z,oe,we){var Be=we/(oe.i-Z.i);oe.c-=Be,oe.s+=we,Z.c+=Be,oe.z+=we,oe.m+=we}function gf(Z){for(var oe=0,we=0,Be=Z.children,Ue=Be.length,We;--Ue>=0;)We=Be[Ue],We.z+=oe,We.m+=oe,oe+=We.s+(we+=We.c)}function gt(Z,oe,we){return Z.a.parent===oe.parent?Z.a:we}e.layout.cluster=function(){var Z=e.layout.hierarchy().sort(null).value(null),oe=iu,we=[1,1],Be=!1;function Ue(We,wt){var tt=Z.call(this,We,wt),zt=tt[0],or,lr=0;vc(zt,function(qr){var Kr=qr.children;Kr&&Kr.length?(qr.x=wr(Kr),qr.y=Bt(Kr)):(qr.x=or?lr+=oe(qr,or):0,qr.y=0,or=qr)});var Dr=vr(zt),Ir=Ur(zt),oi=Dr.x-oe(Dr,Ir)/2,ui=Ir.x+oe(Ir,Dr)/2;return vc(zt,Be?function(qr){qr.x=(qr.x-zt.x)*we[0],qr.y=(zt.y-qr.y)*we[1]}:function(qr){qr.x=(qr.x-oi)/(ui-oi)*we[0],qr.y=(1-(zt.y?qr.y/zt.y:1))*we[1]}),tt}return Ue.separation=function(We){return arguments.length?(oe=We,Ue):oe},Ue.size=function(We){return arguments.length?(Be=(we=We)==null,Ue):Be?null:we},Ue.nodeSize=function(We){return arguments.length?(Be=(we=We)!=null,Ue):Be?we:null},Gu(Ue,Z)};function Bt(Z){return 1+e.max(Z,function(oe){return oe.y})}function wr(Z){return Z.reduce(function(oe,we){return oe+we.x},0)/Z.length}function vr(Z){var oe=Z.children;return oe&&oe.length?vr(oe[0]):Z}function Ur(Z){var oe=Z.children,we;return oe&&(we=oe.length)?Ur(oe[we-1]):Z}e.layout.treemap=function(){var Z=e.layout.hierarchy(),oe=Math.round,we=[1,1],Be=null,Ue=fi,We=!1,wt,tt=\"squarify\",zt=.5*(1+Math.sqrt(5));function or(qr,Kr){for(var ii=-1,vi=qr.length,ci,Jr;++ii<vi;)Jr=(ci=qr[ii]).value*(Kr<0?0:Kr),ci.area=isNaN(Jr)||Jr<=0?0:Jr}function lr(qr){var Kr=qr.children;if(Kr&&Kr.length){var ii=Ue(qr),vi=[],ci=Kr.slice(),Jr,un=1/0,dn,En=tt===\"slice\"?ii.dx:tt===\"dice\"?ii.dy:tt===\"slice-dice\"?qr.depth&1?ii.dy:ii.dx:Math.min(ii.dx,ii.dy),Nn;for(or(ci,ii.dx*ii.dy/qr.value),vi.area=0;(Nn=ci.length)>0;)vi.push(Jr=ci[Nn-1]),vi.area+=Jr.area,tt!==\"squarify\"||(dn=Ir(vi,En))<=un?(ci.pop(),un=dn):(vi.area-=vi.pop().area,oi(vi,En,ii,!1),En=Math.min(ii.dx,ii.dy),vi.length=vi.area=0,un=1/0);vi.length&&(oi(vi,En,ii,!0),vi.length=vi.area=0),Kr.forEach(lr)}}function Dr(qr){var Kr=qr.children;if(Kr&&Kr.length){var ii=Ue(qr),vi=Kr.slice(),ci,Jr=[];for(or(vi,ii.dx*ii.dy/qr.value),Jr.area=0;ci=vi.pop();)Jr.push(ci),Jr.area+=ci.area,ci.z!=null&&(oi(Jr,ci.z?ii.dx:ii.dy,ii,!vi.length),Jr.length=Jr.area=0);Kr.forEach(Dr)}}function Ir(qr,Kr){for(var ii=qr.area,vi,ci=0,Jr=1/0,un=-1,dn=qr.length;++un<dn;)(vi=qr[un].area)&&(vi<Jr&&(Jr=vi),vi>ci&&(ci=vi));return ii*=ii,Kr*=Kr,ii?Math.max(Kr*ci*zt/ii,ii/(Kr*Jr*zt)):1/0}function oi(qr,Kr,ii,vi){var ci=-1,Jr=qr.length,un=ii.x,dn=ii.y,En=Kr?oe(qr.area/Kr):0,Nn;if(Kr==ii.dx){for((vi||En>ii.dy)&&(En=ii.dy);++ci<Jr;)Nn=qr[ci],Nn.x=un,Nn.y=dn,Nn.dy=En,un+=Nn.dx=Math.min(ii.x+ii.dx-un,En?oe(Nn.area/En):0);Nn.z=!0,Nn.dx+=ii.x+ii.dx-un,ii.y+=En,ii.dy-=En}else{for((vi||En>ii.dx)&&(En=ii.dx);++ci<Jr;)Nn=qr[ci],Nn.x=un,Nn.y=dn,Nn.dx=En,dn+=Nn.dy=Math.min(ii.y+ii.dy-dn,En?oe(Nn.area/En):0);Nn.z=!1,Nn.dy+=ii.y+ii.dy-dn,ii.x+=En,ii.dx-=En}}function ui(qr){var Kr=wt||Z(qr),ii=Kr[0];return ii.x=ii.y=0,ii.value?(ii.dx=we[0],ii.dy=we[1]):ii.dx=ii.dy=0,wt&&Z.revalue(ii),or([ii],ii.dx*ii.dy/ii.value),(wt?Dr:lr)(ii),We&&(wt=Kr),Kr}return ui.size=function(qr){return arguments.length?(we=qr,ui):we},ui.padding=function(qr){if(!arguments.length)return Be;function Kr(ci){var Jr=qr.call(ui,ci,ci.depth);return Jr==null?fi(ci):xi(ci,typeof Jr==\"number\"?[Jr,Jr,Jr,Jr]:Jr)}function ii(ci){return xi(ci,qr)}var vi;return Ue=(Be=qr)==null?fi:(vi=typeof qr)==\"function\"?Kr:(vi===\"number\"&&(qr=[qr,qr,qr,qr]),ii),ui},ui.round=function(qr){return arguments.length?(oe=qr?Math.round:Number,ui):oe!=Number},ui.sticky=function(qr){return arguments.length?(We=qr,wt=null,ui):We},ui.ratio=function(qr){return arguments.length?(zt=qr,ui):zt},ui.mode=function(qr){return arguments.length?(tt=qr+\"\",ui):tt},Gu(ui,Z)};function fi(Z){return{x:Z.x,y:Z.y,dx:Z.dx,dy:Z.dy}}function xi(Z,oe){var we=Z.x+oe[3],Be=Z.y+oe[0],Ue=Z.dx-oe[1]-oe[3],We=Z.dy-oe[0]-oe[2];return Ue<0&&(we+=Ue/2,Ue=0),We<0&&(Be+=We/2,We=0),{x:we,y:Be,dx:Ue,dy:We}}e.random={normal:function(Z,oe){var we=arguments.length;return we<2&&(oe=1),we<1&&(Z=0),function(){var Be,Ue,We;do Be=Math.random()*2-1,Ue=Math.random()*2-1,We=Be*Be+Ue*Ue;while(!We||We>1);return Z+oe*Be*Math.sqrt(-2*Math.log(We)/We)}},logNormal:function(){var Z=e.random.normal.apply(e,arguments);return function(){return Math.exp(Z())}},bates:function(Z){var oe=e.random.irwinHall(Z);return function(){return oe()/Z}},irwinHall:function(Z){return function(){for(var oe=0,we=0;we<Z;we++)oe+=Math.random();return oe}}},e.scale={};function Fi(Z){var oe=Z[0],we=Z[Z.length-1];return oe<we?[oe,we]:[we,oe]}function Xi(Z){return Z.rangeExtent?Z.rangeExtent():Fi(Z.range())}function hn(Z,oe,we,Be){var Ue=we(Z[0],Z[1]),We=Be(oe[0],oe[1]);return function(wt){return We(Ue(wt))}}function Ti(Z,oe){var we=0,Be=Z.length-1,Ue=Z[we],We=Z[Be],wt;return We<Ue&&(wt=we,we=Be,Be=wt,wt=Ue,Ue=We,We=wt),Z[we]=oe.floor(Ue),Z[Be]=oe.ceil(We),Z}function qi(Z){return Z?{floor:function(oe){return Math.floor(oe/Z)*Z},ceil:function(oe){return Math.ceil(oe/Z)*Z}}:Ii}var Ii={floor:H,ceil:H};function mi(Z,oe,we,Be){var Ue=[],We=[],wt=0,tt=Math.min(Z.length,oe.length)-1;for(Z[tt]<Z[0]&&(Z=Z.slice().reverse(),oe=oe.slice().reverse());++wt<=tt;)Ue.push(we(Z[wt-1],Z[wt])),We.push(Be(oe[wt-1],oe[wt]));return function(zt){var or=e.bisect(Z,zt,1,tt)-1;return We[or](Ue[or](zt))}}e.scale.linear=function(){return Pn([0,1],[0,1],Sl,!1)};function Pn(Z,oe,we,Be){var Ue,We;function wt(){var zt=Math.min(Z.length,oe.length)>2?mi:hn,or=Be?Lu:pd;return Ue=zt(Z,oe,or,we),We=zt(oe,Z,or,Sl),tt}function tt(zt){return Ue(zt)}return tt.invert=function(zt){return We(zt)},tt.domain=function(zt){return arguments.length?(Z=zt.map(Number),wt()):Z},tt.range=function(zt){return arguments.length?(oe=zt,wt()):oe},tt.rangeRound=function(zt){return tt.range(zt).interpolate(rc)},tt.clamp=function(zt){return arguments.length?(Be=zt,wt()):Be},tt.interpolate=function(zt){return arguments.length?(we=zt,wt()):we},tt.ticks=function(zt){return qa(Z,zt)},tt.tickFormat=function(zt,or){return d3_scale_linearTickFormat(Z,zt,or)},tt.nice=function(zt){return Ta(Z,zt),wt()},tt.copy=function(){return Pn(Z,oe,we,Be)},wt()}function Ma(Z,oe){return e.rebind(Z,oe,\"range\",\"rangeRound\",\"interpolate\",\"clamp\")}function Ta(Z,oe){return Ti(Z,qi(Ea(Z,oe)[2])),Ti(Z,qi(Ea(Z,oe)[2])),Z}function Ea(Z,oe){oe==null&&(oe=10);var we=Fi(Z),Be=we[1]-we[0],Ue=Math.pow(10,Math.floor(Math.log(Be/oe)/Math.LN10)),We=oe/Be*Ue;return We<=.15?Ue*=10:We<=.35?Ue*=5:We<=.75&&(Ue*=2),we[0]=Math.ceil(we[0]/Ue)*Ue,we[1]=Math.floor(we[1]/Ue)*Ue+Ue*.5,we[2]=Ue,we}function qa(Z,oe){return e.range.apply(e,Ea(Z,oe))}var Cn={s:1,g:1,p:1,r:1,e:1};function sn(Z){return-Math.floor(Math.log(Z)/Math.LN10+.01)}function Ua(Z,oe){var we=sn(oe[2]);return Z in Cn?Math.abs(we-sn(Math.max(p(oe[0]),p(oe[1]))))+ +(Z!==\"e\"):we-(Z===\"%\")*2}e.scale.log=function(){return mo(e.scale.linear().domain([0,1]),10,!0,[1,10])};function mo(Z,oe,we,Be){function Ue(tt){return(we?Math.log(tt<0?0:tt):-Math.log(tt>0?0:-tt))/Math.log(oe)}function We(tt){return we?Math.pow(oe,tt):-Math.pow(oe,-tt)}function wt(tt){return Z(Ue(tt))}return wt.invert=function(tt){return We(Z.invert(tt))},wt.domain=function(tt){return arguments.length?(we=tt[0]>=0,Z.domain((Be=tt.map(Number)).map(Ue)),wt):Be},wt.base=function(tt){return arguments.length?(oe=+tt,Z.domain(Be.map(Ue)),wt):oe},wt.nice=function(){var tt=Ti(Be.map(Ue),we?Math:Xo);return Z.domain(tt),Be=tt.map(We),wt},wt.ticks=function(){var tt=Fi(Be),zt=[],or=tt[0],lr=tt[1],Dr=Math.floor(Ue(or)),Ir=Math.ceil(Ue(lr)),oi=oe%1?2:oe;if(isFinite(Ir-Dr)){if(we){for(;Dr<Ir;Dr++)for(var ui=1;ui<oi;ui++)zt.push(We(Dr)*ui);zt.push(We(Dr))}else for(zt.push(We(Dr));Dr++<Ir;)for(var ui=oi-1;ui>0;ui--)zt.push(We(Dr)*ui);for(Dr=0;zt[Dr]<or;Dr++);for(Ir=zt.length;zt[Ir-1]>lr;Ir--);zt=zt.slice(Dr,Ir)}return zt},wt.copy=function(){return mo(Z.copy(),oe,we,Be)},Ma(wt,Z)}var Xo={floor:function(Z){return-Math.ceil(-Z)},ceil:function(Z){return-Math.floor(-Z)}};e.scale.pow=function(){return Ts(e.scale.linear(),1,[0,1])};function Ts(Z,oe,we){var Be=Qo(oe),Ue=Qo(1/oe);function We(wt){return Z(Be(wt))}return We.invert=function(wt){return Ue(Z.invert(wt))},We.domain=function(wt){return arguments.length?(Z.domain((we=wt.map(Number)).map(Be)),We):we},We.ticks=function(wt){return qa(we,wt)},We.tickFormat=function(wt,tt){return d3_scale_linearTickFormat(we,wt,tt)},We.nice=function(wt){return We.domain(Ta(we,wt))},We.exponent=function(wt){return arguments.length?(Be=Qo(oe=wt),Ue=Qo(1/oe),Z.domain(we.map(Be)),We):oe},We.copy=function(){return Ts(Z.copy(),oe,we)},Ma(We,Z)}function Qo(Z){return function(oe){return oe<0?-Math.pow(-oe,Z):Math.pow(oe,Z)}}e.scale.sqrt=function(){return e.scale.pow().exponent(.5)},e.scale.ordinal=function(){return ys([],{t:\"range\",a:[[]]})};function ys(Z,oe){var we,Be,Ue;function We(tt){return Be[((we.get(tt)||(oe.t===\"range\"?we.set(tt,Z.push(tt)):NaN))-1)%Be.length]}function wt(tt,zt){return e.range(Z.length).map(function(or){return tt+zt*or})}return We.domain=function(tt){if(!arguments.length)return Z;Z=[],we=new A;for(var zt=-1,or=tt.length,lr;++zt<or;)we.has(lr=tt[zt])||we.set(lr,Z.push(lr));return We[oe.t].apply(We,oe.a)},We.range=function(tt){return arguments.length?(Be=tt,Ue=0,oe={t:\"range\",a:arguments},We):Be},We.rangePoints=function(tt,zt){arguments.length<2&&(zt=0);var or=tt[0],lr=tt[1],Dr=Z.length<2?(or=(or+lr)/2,0):(lr-or)/(Z.length-1+zt);return Be=wt(or+Dr*zt/2,Dr),Ue=0,oe={t:\"rangePoints\",a:arguments},We},We.rangeRoundPoints=function(tt,zt){arguments.length<2&&(zt=0);var or=tt[0],lr=tt[1],Dr=Z.length<2?(or=lr=Math.round((or+lr)/2),0):(lr-or)/(Z.length-1+zt)|0;return Be=wt(or+Math.round(Dr*zt/2+(lr-or-(Z.length-1+zt)*Dr)/2),Dr),Ue=0,oe={t:\"rangeRoundPoints\",a:arguments},We},We.rangeBands=function(tt,zt,or){arguments.length<2&&(zt=0),arguments.length<3&&(or=zt);var lr=tt[1]<tt[0],Dr=tt[lr-0],Ir=tt[1-lr],oi=(Ir-Dr)/(Z.length-zt+2*or);return Be=wt(Dr+oi*or,oi),lr&&Be.reverse(),Ue=oi*(1-zt),oe={t:\"rangeBands\",a:arguments},We},We.rangeRoundBands=function(tt,zt,or){arguments.length<2&&(zt=0),arguments.length<3&&(or=zt);var lr=tt[1]<tt[0],Dr=tt[lr-0],Ir=tt[1-lr],oi=Math.floor((Ir-Dr)/(Z.length-zt+2*or));return Be=wt(Dr+Math.round((Ir-Dr-(Z.length-zt)*oi)/2),oi),lr&&Be.reverse(),Ue=Math.round(oi*(1-zt)),oe={t:\"rangeRoundBands\",a:arguments},We},We.rangeBand=function(){return Ue},We.rangeExtent=function(){return Fi(oe.a[0])},We.copy=function(){return ys(Z,oe)},We.domain(Z)}e.scale.category10=function(){return e.scale.ordinal().range(Bo)},e.scale.category20=function(){return e.scale.ordinal().range(yl)},e.scale.category20b=function(){return e.scale.ordinal().range(Gs)},e.scale.category20c=function(){return e.scale.ordinal().range(Rs)};var Bo=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(jo),yl=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(jo),Gs=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(jo),Rs=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(jo);e.scale.quantile=function(){return ia([],[])};function ia(Z,oe){var we;function Be(){var We=0,wt=oe.length;for(we=[];++We<wt;)we[We-1]=e.quantile(Z,We/wt);return Ue}function Ue(We){if(!isNaN(We=+We))return oe[e.bisect(we,We)]}return Ue.domain=function(We){return arguments.length?(Z=We.map(h).filter(d).sort(f),Be()):Z},Ue.range=function(We){return arguments.length?(oe=We,Be()):oe},Ue.quantiles=function(){return we},Ue.invertExtent=function(We){return We=oe.indexOf(We),We<0?[NaN,NaN]:[We>0?we[We-1]:Z[0],We<we.length?we[We]:Z[Z.length-1]]},Ue.copy=function(){return ia(Z,oe)},Be()}e.scale.quantize=function(){return Ka(0,1,[0,1])};function Ka(Z,oe,we){var Be,Ue;function We(tt){return we[Math.max(0,Math.min(Ue,Math.floor(Be*(tt-Z))))]}function wt(){return Be=we.length/(oe-Z),Ue=we.length-1,We}return We.domain=function(tt){return arguments.length?(Z=+tt[0],oe=+tt[tt.length-1],wt()):[Z,oe]},We.range=function(tt){return arguments.length?(we=tt,wt()):we},We.invertExtent=function(tt){return tt=we.indexOf(tt),tt=tt<0?NaN:tt/Be+Z,[tt,tt+1/Be]},We.copy=function(){return Ka(Z,oe,we)},wt()}e.scale.threshold=function(){return vs([.5],[0,1])};function vs(Z,oe){function we(Be){if(Be<=Be)return oe[e.bisect(Z,Be)]}return we.domain=function(Be){return arguments.length?(Z=Be,we):Z},we.range=function(Be){return arguments.length?(oe=Be,we):oe},we.invertExtent=function(Be){return Be=oe.indexOf(Be),[Z[Be-1],Z[Be]]},we.copy=function(){return vs(Z,oe)},we}e.scale.identity=function(){return Ko([0,1])};function Ko(Z){function oe(we){return+we}return oe.invert=oe,oe.domain=oe.range=function(we){return arguments.length?(Z=we.map(oe),oe):Z},oe.ticks=function(we){return qa(Z,we)},oe.tickFormat=function(we,Be){return d3_scale_linearTickFormat(Z,we,Be)},oe.copy=function(){return Ko(Z)},oe}e.svg={};function nu(){return 0}e.svg.arc=function(){var Z=ac,oe=mf,we=nu,Be=Ru,Ue=bu,We=Kc,wt=Du;function tt(){var or=Math.max(0,+Z.apply(this,arguments)),lr=Math.max(0,+oe.apply(this,arguments)),Dr=Ue.apply(this,arguments)-xe,Ir=We.apply(this,arguments)-xe,oi=Math.abs(Ir-Dr),ui=Dr>Ir?0:1;if(lr<or&&(qr=lr,lr=or,or=qr),oi>=Le)return zt(lr,ui)+(or?zt(or,1-ui):\"\")+\"Z\";var qr,Kr,ii,vi,ci=0,Jr=0,un,dn,En,Nn,ga,ya,so,wa,io=[];if((vi=(+wt.apply(this,arguments)||0)/2)&&(ii=Be===Ru?Math.sqrt(or*or+lr*lr):+Be.apply(this,arguments),ui||(Jr*=-1),lr&&(Jr=Qr(ii/lr*Math.sin(vi))),or&&(ci=Qr(ii/or*Math.sin(vi)))),lr){un=lr*Math.cos(Dr+Jr),dn=lr*Math.sin(Dr+Jr),En=lr*Math.cos(Ir-Jr),Nn=lr*Math.sin(Ir-Jr);var Ss=Math.abs(Ir-Dr-2*Jr)<=Xe?0:1;if(Jr&&Dc(un,dn,En,Nn)===ui^Ss){var _s=(Dr+Ir)/2;un=lr*Math.cos(_s),dn=lr*Math.sin(_s),En=Nn=null}}else un=dn=0;if(or){ga=or*Math.cos(Ir-ci),ya=or*Math.sin(Ir-ci),so=or*Math.cos(Dr+ci),wa=or*Math.sin(Dr+ci);var Ns=Math.abs(Dr-Ir+2*ci)<=Xe?0:1;if(ci&&Dc(ga,ya,so,wa)===1-ui^Ns){var pn=(Dr+Ir)/2;ga=or*Math.cos(pn),ya=or*Math.sin(pn),so=wa=null}}else ga=ya=0;if(oi>Ye&&(qr=Math.min(Math.abs(lr-or)/2,+we.apply(this,arguments)))>.001){Kr=or<lr^ui?0:1;var za=qr,Lo=qr;if(oi<Xe){var Fo=so==null?[ga,ya]:En==null?[un,dn]:cl([un,dn],[so,wa],[En,Nn],[ga,ya]),js=un-Fo[0],xl=dn-Fo[1],fu=En-Fo[0],dl=Nn-Fo[1],xc=1/Math.sin(Math.acos((js*fu+xl*dl)/(Math.sqrt(js*js+xl*xl)*Math.sqrt(fu*fu+dl*dl)))/2),At=Math.sqrt(Fo[0]*Fo[0]+Fo[1]*Fo[1]);Lo=Math.min(qr,(or-At)/(xc-1)),za=Math.min(qr,(lr-At)/(xc+1))}if(En!=null){var Er=Da(so==null?[ga,ya]:[so,wa],[un,dn],lr,za,ui),Wr=Da([En,Nn],[ga,ya],lr,za,ui);qr===za?io.push(\"M\",Er[0],\"A\",za,\",\",za,\" 0 0,\",Kr,\" \",Er[1],\"A\",lr,\",\",lr,\" 0 \",1-ui^Dc(Er[1][0],Er[1][1],Wr[1][0],Wr[1][1]),\",\",ui,\" \",Wr[1],\"A\",za,\",\",za,\" 0 0,\",Kr,\" \",Wr[0]):io.push(\"M\",Er[0],\"A\",za,\",\",za,\" 0 1,\",Kr,\" \",Wr[0])}else io.push(\"M\",un,\",\",dn);if(so!=null){var wi=Da([un,dn],[so,wa],or,-Lo,ui),Ui=Da([ga,ya],En==null?[un,dn]:[En,Nn],or,-Lo,ui);qr===Lo?io.push(\"L\",Ui[0],\"A\",Lo,\",\",Lo,\" 0 0,\",Kr,\" \",Ui[1],\"A\",or,\",\",or,\" 0 \",ui^Dc(Ui[1][0],Ui[1][1],wi[1][0],wi[1][1]),\",\",1-ui,\" \",wi[1],\"A\",Lo,\",\",Lo,\" 0 0,\",Kr,\" \",wi[0]):io.push(\"L\",Ui[0],\"A\",Lo,\",\",Lo,\" 0 0,\",Kr,\" \",wi[0])}else io.push(\"L\",ga,\",\",ya)}else io.push(\"M\",un,\",\",dn),En!=null&&io.push(\"A\",lr,\",\",lr,\" 0 \",Ss,\",\",ui,\" \",En,\",\",Nn),io.push(\"L\",ga,\",\",ya),so!=null&&io.push(\"A\",or,\",\",or,\" 0 \",Ns,\",\",1-ui,\" \",so,\",\",wa);return io.push(\"Z\"),io.join(\"\")}function zt(or,lr){return\"M0,\"+or+\"A\"+or+\",\"+or+\" 0 1,\"+lr+\" 0,\"+-or+\"A\"+or+\",\"+or+\" 0 1,\"+lr+\" 0,\"+or}return tt.innerRadius=function(or){return arguments.length?(Z=ti(or),tt):Z},tt.outerRadius=function(or){return arguments.length?(oe=ti(or),tt):oe},tt.cornerRadius=function(or){return arguments.length?(we=ti(or),tt):we},tt.padRadius=function(or){return arguments.length?(Be=or==Ru?Ru:ti(or),tt):Be},tt.startAngle=function(or){return arguments.length?(Ue=ti(or),tt):Ue},tt.endAngle=function(or){return arguments.length?(We=ti(or),tt):We},tt.padAngle=function(or){return arguments.length?(wt=ti(or),tt):wt},tt.centroid=function(){var or=(+Z.apply(this,arguments)+ +oe.apply(this,arguments))/2,lr=(+Ue.apply(this,arguments)+ +We.apply(this,arguments))/2-xe;return[Math.cos(lr)*or,Math.sin(lr)*or]},tt};var Ru=\"auto\";function ac(Z){return Z.innerRadius}function mf(Z){return Z.outerRadius}function bu(Z){return Z.startAngle}function Kc(Z){return Z.endAngle}function Du(Z){return Z&&Z.padAngle}function Dc(Z,oe,we,Be){return(Z-we)*oe-(oe-Be)*Z>0?0:1}function Da(Z,oe,we,Be,Ue){var We=Z[0]-oe[0],wt=Z[1]-oe[1],tt=(Ue?Be:-Be)/Math.sqrt(We*We+wt*wt),zt=tt*wt,or=-tt*We,lr=Z[0]+zt,Dr=Z[1]+or,Ir=oe[0]+zt,oi=oe[1]+or,ui=(lr+Ir)/2,qr=(Dr+oi)/2,Kr=Ir-lr,ii=oi-Dr,vi=Kr*Kr+ii*ii,ci=we-Be,Jr=lr*oi-Ir*Dr,un=(ii<0?-1:1)*Math.sqrt(Math.max(0,ci*ci*vi-Jr*Jr)),dn=(Jr*ii-Kr*un)/vi,En=(-Jr*Kr-ii*un)/vi,Nn=(Jr*ii+Kr*un)/vi,ga=(-Jr*Kr+ii*un)/vi,ya=dn-ui,so=En-qr,wa=Nn-ui,io=ga-qr;return ya*ya+so*so>wa*wa+io*io&&(dn=Nn,En=ga),[[dn-zt,En-or],[dn*we/ci,En*we/ci]]}function eo(){return!0}function Jc(Z){var oe=zs,we=ks,Be=eo,Ue=_c,We=Ue.key,wt=.7;function tt(zt){var or=[],lr=[],Dr=-1,Ir=zt.length,oi,ui=ti(oe),qr=ti(we);function Kr(){or.push(\"M\",Ue(Z(lr),wt))}for(;++Dr<Ir;)Be.call(this,oi=zt[Dr],Dr)?lr.push([+ui.call(this,oi,Dr),+qr.call(this,oi,Dr)]):lr.length&&(Kr(),lr=[]);return lr.length&&Kr(),or.length?or.join(\"\"):null}return tt.x=function(zt){return arguments.length?(oe=zt,tt):oe},tt.y=function(zt){return arguments.length?(we=zt,tt):we},tt.defined=function(zt){return arguments.length?(Be=zt,tt):Be},tt.interpolate=function(zt){return arguments.length?(typeof zt==\"function\"?We=Ue=zt:We=(Ue=yc.get(zt)||_c).key,tt):We},tt.tension=function(zt){return arguments.length?(wt=zt,tt):wt},tt}e.svg.line=function(){return Jc(H)};var yc=e.map({linear:_c,\"linear-closed\":le,step:w,\"step-before\":B,\"step-after\":Q,basis:yt,\"basis-open\":Ot,\"basis-closed\":Nt,bundle:hr,cardinal:qe,\"cardinal-open\":ee,\"cardinal-closed\":se,monotone:Mt});yc.forEach(function(Z,oe){oe.key=Z,oe.closed=/-closed$/.test(Z)});function _c(Z){return Z.length>1?Z.join(\"L\"):Z+\"Z\"}function le(Z){return Z.join(\"L\")+\"Z\"}function w(Z){for(var oe=0,we=Z.length,Be=Z[0],Ue=[Be[0],\",\",Be[1]];++oe<we;)Ue.push(\"H\",(Be[0]+(Be=Z[oe])[0])/2,\"V\",Be[1]);return we>1&&Ue.push(\"H\",Be[0]),Ue.join(\"\")}function B(Z){for(var oe=0,we=Z.length,Be=Z[0],Ue=[Be[0],\",\",Be[1]];++oe<we;)Ue.push(\"V\",(Be=Z[oe])[1],\"H\",Be[0]);return Ue.join(\"\")}function Q(Z){for(var oe=0,we=Z.length,Be=Z[0],Ue=[Be[0],\",\",Be[1]];++oe<we;)Ue.push(\"H\",(Be=Z[oe])[0],\"V\",Be[1]);return Ue.join(\"\")}function ee(Z,oe){return Z.length<4?_c(Z):Z[1]+je(Z.slice(1,-1),it(Z,oe))}function se(Z,oe){return Z.length<3?le(Z):Z[0]+je((Z.push(Z[0]),Z),it([Z[Z.length-2]].concat(Z,[Z[1]]),oe))}function qe(Z,oe){return Z.length<3?_c(Z):Z[0]+je(Z,it(Z,oe))}function je(Z,oe){if(oe.length<1||Z.length!=oe.length&&Z.length!=oe.length+2)return _c(Z);var we=Z.length!=oe.length,Be=\"\",Ue=Z[0],We=Z[1],wt=oe[0],tt=wt,zt=1;if(we&&(Be+=\"Q\"+(We[0]-wt[0]*2/3)+\",\"+(We[1]-wt[1]*2/3)+\",\"+We[0]+\",\"+We[1],Ue=Z[1],zt=2),oe.length>1){tt=oe[1],We=Z[zt],zt++,Be+=\"C\"+(Ue[0]+wt[0])+\",\"+(Ue[1]+wt[1])+\",\"+(We[0]-tt[0])+\",\"+(We[1]-tt[1])+\",\"+We[0]+\",\"+We[1];for(var or=2;or<oe.length;or++,zt++)We=Z[zt],tt=oe[or],Be+=\"S\"+(We[0]-tt[0])+\",\"+(We[1]-tt[1])+\",\"+We[0]+\",\"+We[1]}if(we){var lr=Z[zt];Be+=\"Q\"+(We[0]+tt[0]*2/3)+\",\"+(We[1]+tt[1]*2/3)+\",\"+lr[0]+\",\"+lr[1]}return Be}function it(Z,oe){for(var we=[],Be=(1-oe)/2,Ue,We=Z[0],wt=Z[1],tt=1,zt=Z.length;++tt<zt;)Ue=We,We=wt,wt=Z[tt],we.push([Be*(wt[0]-Ue[0]),Be*(wt[1]-Ue[1])]);return we}function yt(Z){if(Z.length<3)return _c(Z);var oe=1,we=Z.length,Be=Z[0],Ue=Be[0],We=Be[1],wt=[Ue,Ue,Ue,(Be=Z[1])[0]],tt=[We,We,We,Be[1]],zt=[Ue,\",\",We,\"L\",Sr(Pe,wt),\",\",Sr(Pe,tt)];for(Z.push(Z[we-1]);++oe<=we;)Be=Z[oe],wt.shift(),wt.push(Be[0]),tt.shift(),tt.push(Be[1]),Oe(zt,wt,tt);return Z.pop(),zt.push(\"L\",Be),zt.join(\"\")}function Ot(Z){if(Z.length<4)return _c(Z);for(var oe=[],we=-1,Be=Z.length,Ue,We=[0],wt=[0];++we<3;)Ue=Z[we],We.push(Ue[0]),wt.push(Ue[1]);for(oe.push(Sr(Pe,We)+\",\"+Sr(Pe,wt)),--we;++we<Be;)Ue=Z[we],We.shift(),We.push(Ue[0]),wt.shift(),wt.push(Ue[1]),Oe(oe,We,wt);return oe.join(\"\")}function Nt(Z){for(var oe,we=-1,Be=Z.length,Ue=Be+4,We,wt=[],tt=[];++we<4;)We=Z[we%Be],wt.push(We[0]),tt.push(We[1]);for(oe=[Sr(Pe,wt),\",\",Sr(Pe,tt)],--we;++we<Ue;)We=Z[we%Be],wt.shift(),wt.push(We[0]),tt.shift(),tt.push(We[1]),Oe(oe,wt,tt);return oe.join(\"\")}function hr(Z,oe){var we=Z.length-1;if(we)for(var Be=Z[0][0],Ue=Z[0][1],We=Z[we][0]-Be,wt=Z[we][1]-Ue,tt=-1,zt,or;++tt<=we;)zt=Z[tt],or=tt/we,zt[0]=oe*zt[0]+(1-oe)*(Be+or*We),zt[1]=oe*zt[1]+(1-oe)*(Ue+or*wt);return yt(Z)}function Sr(Z,oe){return Z[0]*oe[0]+Z[1]*oe[1]+Z[2]*oe[2]+Z[3]*oe[3]}var he=[0,2/3,1/3,0],be=[0,1/3,2/3,0],Pe=[0,1/6,2/3,1/6];function Oe(Z,oe,we){Z.push(\"C\",Sr(he,oe),\",\",Sr(he,we),\",\",Sr(be,oe),\",\",Sr(be,we),\",\",Sr(Pe,oe),\",\",Sr(Pe,we))}function Je(Z,oe){return(oe[1]-Z[1])/(oe[0]-Z[0])}function He(Z){for(var oe=0,we=Z.length-1,Be=[],Ue=Z[0],We=Z[1],wt=Be[0]=Je(Ue,We);++oe<we;)Be[oe]=(wt+(wt=Je(Ue=We,We=Z[oe+1])))/2;return Be[oe]=wt,Be}function et(Z){for(var oe=[],we,Be,Ue,We,wt=He(Z),tt=-1,zt=Z.length-1;++tt<zt;)we=Je(Z[tt],Z[tt+1]),p(we)<Ye?wt[tt]=wt[tt+1]=0:(Be=wt[tt]/we,Ue=wt[tt+1]/we,We=Be*Be+Ue*Ue,We>9&&(We=we*3/Math.sqrt(We),wt[tt]=We*Be,wt[tt+1]=We*Ue));for(tt=-1;++tt<=zt;)We=(Z[Math.min(zt,tt+1)][0]-Z[Math.max(0,tt-1)][0])/(6*(1+wt[tt]*wt[tt])),oe.push([We||0,wt[tt]*We||0]);return oe}function Mt(Z){return Z.length<3?_c(Z):Z[0]+je(Z,et(Z))}e.svg.line.radial=function(){var Z=Jc(Dt);return Z.radius=Z.x,delete Z.x,Z.angle=Z.y,delete Z.y,Z};function Dt(Z){for(var oe,we=-1,Be=Z.length,Ue,We;++we<Be;)oe=Z[we],Ue=oe[0],We=oe[1]-xe,oe[0]=Ue*Math.cos(We),oe[1]=Ue*Math.sin(We);return Z}function Ut(Z){var oe=zs,we=zs,Be=0,Ue=ks,We=eo,wt=_c,tt=wt.key,zt=wt,or=\"L\",lr=.7;function Dr(Ir){var oi=[],ui=[],qr=[],Kr=-1,ii=Ir.length,vi,ci=ti(oe),Jr=ti(Be),un=oe===we?function(){return En}:ti(we),dn=Be===Ue?function(){return Nn}:ti(Ue),En,Nn;function ga(){oi.push(\"M\",wt(Z(qr),lr),or,zt(Z(ui.reverse()),lr),\"Z\")}for(;++Kr<ii;)We.call(this,vi=Ir[Kr],Kr)?(ui.push([En=+ci.call(this,vi,Kr),Nn=+Jr.call(this,vi,Kr)]),qr.push([+un.call(this,vi,Kr),+dn.call(this,vi,Kr)])):ui.length&&(ga(),ui=[],qr=[]);return ui.length&&ga(),oi.length?oi.join(\"\"):null}return Dr.x=function(Ir){return arguments.length?(oe=we=Ir,Dr):we},Dr.x0=function(Ir){return arguments.length?(oe=Ir,Dr):oe},Dr.x1=function(Ir){return arguments.length?(we=Ir,Dr):we},Dr.y=function(Ir){return arguments.length?(Be=Ue=Ir,Dr):Ue},Dr.y0=function(Ir){return arguments.length?(Be=Ir,Dr):Be},Dr.y1=function(Ir){return arguments.length?(Ue=Ir,Dr):Ue},Dr.defined=function(Ir){return arguments.length?(We=Ir,Dr):We},Dr.interpolate=function(Ir){return arguments.length?(typeof Ir==\"function\"?tt=wt=Ir:tt=(wt=yc.get(Ir)||_c).key,zt=wt.reverse||wt,or=wt.closed?\"M\":\"L\",Dr):tt},Dr.tension=function(Ir){return arguments.length?(lr=Ir,Dr):lr},Dr}B.reverse=Q,Q.reverse=B,e.svg.area=function(){return Ut(H)},e.svg.area.radial=function(){var Z=Ut(Dt);return Z.radius=Z.x,delete Z.x,Z.innerRadius=Z.x0,delete Z.x0,Z.outerRadius=Z.x1,delete Z.x1,Z.angle=Z.y,delete Z.y,Z.startAngle=Z.y0,delete Z.y0,Z.endAngle=Z.y1,delete Z.y1,Z};function tr(Z){return Z.source}function mr(Z){return Z.target}e.svg.chord=function(){var Z=tr,oe=mr,we=Rr,Be=bu,Ue=Kc;function We(lr,Dr){var Ir=wt(this,Z,lr,Dr),oi=wt(this,oe,lr,Dr);return\"M\"+Ir.p0+zt(Ir.r,Ir.p1,Ir.a1-Ir.a0)+(tt(Ir,oi)?or(Ir.r,Ir.p1,Ir.r,Ir.p0):or(Ir.r,Ir.p1,oi.r,oi.p0)+zt(oi.r,oi.p1,oi.a1-oi.a0)+or(oi.r,oi.p1,Ir.r,Ir.p0))+\"Z\"}function wt(lr,Dr,Ir,oi){var ui=Dr.call(lr,Ir,oi),qr=we.call(lr,ui,oi),Kr=Be.call(lr,ui,oi)-xe,ii=Ue.call(lr,ui,oi)-xe;return{r:qr,a0:Kr,a1:ii,p0:[qr*Math.cos(Kr),qr*Math.sin(Kr)],p1:[qr*Math.cos(ii),qr*Math.sin(ii)]}}function tt(lr,Dr){return lr.a0==Dr.a0&&lr.a1==Dr.a1}function zt(lr,Dr,Ir){return\"A\"+lr+\",\"+lr+\" 0 \"+ +(Ir>Xe)+\",1 \"+Dr}function or(lr,Dr,Ir,oi){return\"Q 0,0 \"+oi}return We.radius=function(lr){return arguments.length?(we=ti(lr),We):we},We.source=function(lr){return arguments.length?(Z=ti(lr),We):Z},We.target=function(lr){return arguments.length?(oe=ti(lr),We):oe},We.startAngle=function(lr){return arguments.length?(Be=ti(lr),We):Be},We.endAngle=function(lr){return arguments.length?(Ue=ti(lr),We):Ue},We};function Rr(Z){return Z.radius}e.svg.diagonal=function(){var Z=tr,oe=mr,we=zr;function Be(Ue,We){var wt=Z.call(this,Ue,We),tt=oe.call(this,Ue,We),zt=(wt.y+tt.y)/2,or=[wt,{x:wt.x,y:zt},{x:tt.x,y:zt},tt];return or=or.map(we),\"M\"+or[0]+\"C\"+or[1]+\" \"+or[2]+\" \"+or[3]}return Be.source=function(Ue){return arguments.length?(Z=ti(Ue),Be):Z},Be.target=function(Ue){return arguments.length?(oe=ti(Ue),Be):oe},Be.projection=function(Ue){return arguments.length?(we=Ue,Be):we},Be};function zr(Z){return[Z.x,Z.y]}e.svg.diagonal.radial=function(){var Z=e.svg.diagonal(),oe=zr,we=Z.projection;return Z.projection=function(Be){return arguments.length?we(Xr(oe=Be)):oe},Z};function Xr(Z){return function(){var oe=Z.apply(this,arguments),we=oe[0],Be=oe[1]-xe;return[we*Math.cos(Be),we*Math.sin(Be)]}}e.svg.symbol=function(){var Z=Li,oe=di;function we(Be,Ue){return(Qi.get(Z.call(this,Be,Ue))||Ci)(oe.call(this,Be,Ue))}return we.type=function(Be){return arguments.length?(Z=ti(Be),we):Z},we.size=function(Be){return arguments.length?(oe=ti(Be),we):oe},we};function di(){return 64}function Li(){return\"circle\"}function Ci(Z){var oe=Math.sqrt(Z/Xe);return\"M0,\"+oe+\"A\"+oe+\",\"+oe+\" 0 1,1 0,\"+-oe+\"A\"+oe+\",\"+oe+\" 0 1,1 0,\"+oe+\"Z\"}var Qi=e.map({circle:Ci,cross:function(Z){var oe=Math.sqrt(Z/5)/2;return\"M\"+-3*oe+\",\"+-oe+\"H\"+-oe+\"V\"+-3*oe+\"H\"+oe+\"V\"+-oe+\"H\"+3*oe+\"V\"+oe+\"H\"+oe+\"V\"+3*oe+\"H\"+-oe+\"V\"+oe+\"H\"+-3*oe+\"Z\"},diamond:function(Z){var oe=Math.sqrt(Z/(2*pa)),we=oe*pa;return\"M0,\"+-oe+\"L\"+we+\",0 0,\"+oe+\" \"+-we+\",0Z\"},square:function(Z){var oe=Math.sqrt(Z)/2;return\"M\"+-oe+\",\"+-oe+\"L\"+oe+\",\"+-oe+\" \"+oe+\",\"+oe+\" \"+-oe+\",\"+oe+\"Z\"},\"triangle-down\":function(Z){var oe=Math.sqrt(Z/Mn),we=oe*Mn/2;return\"M0,\"+we+\"L\"+oe+\",\"+-we+\" \"+-oe+\",\"+-we+\"Z\"},\"triangle-up\":function(Z){var oe=Math.sqrt(Z/Mn),we=oe*Mn/2;return\"M0,\"+-we+\"L\"+oe+\",\"+we+\" \"+-oe+\",\"+we+\"Z\"}});e.svg.symbolTypes=Qi.keys();var Mn=Math.sqrt(3),pa=Math.tan(30*Se);Ce.transition=function(Z){for(var oe=Ro||++co,we=po(Z),Be=[],Ue,We,wt=Ds||{time:Date.now(),ease:uu,delay:0,duration:250},tt=-1,zt=this.length;++tt<zt;){Be.push(Ue=[]);for(var or=this[tt],lr=-1,Dr=or.length;++lr<Dr;)(We=or[lr])&&_l(We,lr,we,oe,wt),Ue.push(We)}return To(Be,we,oe)},Ce.interrupt=function(Z){return this.each(Z==null?ea:Ga(po(Z)))};var ea=Ga(po());function Ga(Z){return function(){var oe,we,Be;(oe=this[Z])&&(Be=oe[we=oe.active])&&(Be.timer.c=null,Be.timer.t=NaN,--oe.count?delete oe[we]:delete this[Z],oe.active+=.5,Be.event&&Be.event.interrupt.call(this,this.__data__,Be.index))}}function To(Z,oe,we){return ie(Z,Wa),Z.namespace=oe,Z.id=we,Z}var Wa=[],co=0,Ro,Ds;Wa.call=Ce.call,Wa.empty=Ce.empty,Wa.node=Ce.node,Wa.size=Ce.size,e.transition=function(Z,oe){return Z&&Z.transition?Ro?Z.transition(oe):Z:e.selection().transition(Z)},e.transition.prototype=Wa,Wa.select=function(Z){var oe=this.id,we=this.namespace,Be=[],Ue,We,wt;Z=me(Z);for(var tt=-1,zt=this.length;++tt<zt;){Be.push(Ue=[]);for(var or=this[tt],lr=-1,Dr=or.length;++lr<Dr;)(wt=or[lr])&&(We=Z.call(wt,wt.__data__,lr,tt))?(\"__data__\"in wt&&(We.__data__=wt.__data__),_l(We,lr,we,oe,wt[we][oe]),Ue.push(We)):Ue.push(null)}return To(Be,we,oe)},Wa.selectAll=function(Z){var oe=this.id,we=this.namespace,Be=[],Ue,We,wt,tt,zt;Z=Re(Z);for(var or=-1,lr=this.length;++or<lr;)for(var Dr=this[or],Ir=-1,oi=Dr.length;++Ir<oi;)if(wt=Dr[Ir]){zt=wt[we][oe],We=Z.call(wt,wt.__data__,Ir,or),Be.push(Ue=[]);for(var ui=-1,qr=We.length;++ui<qr;)(tt=We[ui])&&_l(tt,ui,we,oe,zt),Ue.push(tt)}return To(Be,we,oe)},Wa.filter=function(Z){var oe=[],we,Be,Ue;typeof Z!=\"function\"&&(Z=Ke(Z));for(var We=0,wt=this.length;We<wt;We++){oe.push(we=[]);for(var Be=this[We],tt=0,zt=Be.length;tt<zt;tt++)(Ue=Be[tt])&&Z.call(Ue,Ue.__data__,tt,We)&&we.push(Ue)}return To(oe,this.namespace,this.id)},Wa.tween=function(Z,oe){var we=this.id,Be=this.namespace;return arguments.length<2?this.node()[Be][we].tween.get(Z):bt(this,oe==null?function(Ue){Ue[Be][we].tween.remove(Z)}:function(Ue){Ue[Be][we].tween.set(Z,oe)})};function As(Z,oe,we,Be){var Ue=Z.id,We=Z.namespace;return bt(Z,typeof we==\"function\"?function(wt,tt,zt){wt[We][Ue].tween.set(oe,Be(we.call(wt,wt.__data__,tt,zt)))}:(we=Be(we),function(wt){wt[We][Ue].tween.set(oe,we)}))}Wa.attr=function(Z,oe){if(arguments.length<2){for(oe in Z)this.attr(oe,Z[oe]);return this}var we=Z==\"transform\"?Cf:Sl,Be=e.ns.qualify(Z);function Ue(){this.removeAttribute(Be)}function We(){this.removeAttributeNS(Be.space,Be.local)}function wt(zt){return zt==null?Ue:(zt+=\"\",function(){var or=this.getAttribute(Be),lr;return or!==zt&&(lr=we(or,zt),function(Dr){this.setAttribute(Be,lr(Dr))})})}function tt(zt){return zt==null?We:(zt+=\"\",function(){var or=this.getAttributeNS(Be.space,Be.local),lr;return or!==zt&&(lr=we(or,zt),function(Dr){this.setAttributeNS(Be.space,Be.local,lr(Dr))})})}return As(this,\"attr.\"+Z,oe,Be.local?tt:wt)},Wa.attrTween=function(Z,oe){var we=e.ns.qualify(Z);function Be(We,wt){var tt=oe.call(this,We,wt,this.getAttribute(we));return tt&&function(zt){this.setAttribute(we,tt(zt))}}function Ue(We,wt){var tt=oe.call(this,We,wt,this.getAttributeNS(we.space,we.local));return tt&&function(zt){this.setAttributeNS(we.space,we.local,tt(zt))}}return this.tween(\"attr.\"+Z,we.local?Ue:Be)},Wa.style=function(Z,oe,we){var Be=arguments.length;if(Be<3){if(typeof Z!=\"string\"){Be<2&&(oe=\"\");for(we in Z)this.style(we,Z[we],oe);return this}we=\"\"}function Ue(){this.style.removeProperty(Z)}function We(wt){return wt==null?Ue:(wt+=\"\",function(){var tt=a(this).getComputedStyle(this,null).getPropertyValue(Z),zt;return tt!==wt&&(zt=Sl(tt,wt),function(or){this.style.setProperty(Z,zt(or),we)})})}return As(this,\"style.\"+Z,oe,We)},Wa.styleTween=function(Z,oe,we){arguments.length<3&&(we=\"\");function Be(Ue,We){var wt=oe.call(this,Ue,We,a(this).getComputedStyle(this,null).getPropertyValue(Z));return wt&&function(tt){this.style.setProperty(Z,wt(tt),we)}}return this.tween(\"style.\"+Z,Be)},Wa.text=function(Z){return As(this,\"text\",Z,yo)};function yo(Z){return Z==null&&(Z=\"\"),function(){this.textContent=Z}}Wa.remove=function(){var Z=this.namespace;return this.each(\"end.transition\",function(){var oe;this[Z].count<2&&(oe=this.parentNode)&&oe.removeChild(this)})},Wa.ease=function(Z){var oe=this.id,we=this.namespace;return arguments.length<1?this.node()[we][oe].ease:(typeof Z!=\"function\"&&(Z=e.ease.apply(e,arguments)),bt(this,function(Be){Be[we][oe].ease=Z}))},Wa.delay=function(Z){var oe=this.id,we=this.namespace;return arguments.length<1?this.node()[we][oe].delay:bt(this,typeof Z==\"function\"?function(Be,Ue,We){Be[we][oe].delay=+Z.call(Be,Be.__data__,Ue,We)}:(Z=+Z,function(Be){Be[we][oe].delay=Z}))},Wa.duration=function(Z){var oe=this.id,we=this.namespace;return arguments.length<1?this.node()[we][oe].duration:bt(this,typeof Z==\"function\"?function(Be,Ue,We){Be[we][oe].duration=Math.max(1,Z.call(Be,Be.__data__,Ue,We))}:(Z=Math.max(1,Z),function(Be){Be[we][oe].duration=Z}))},Wa.each=function(Z,oe){var we=this.id,Be=this.namespace;if(arguments.length<2){var Ue=Ds,We=Ro;try{Ro=we,bt(this,function(wt,tt,zt){Ds=wt[Be][we],Z.call(wt,wt.__data__,tt,zt)})}finally{Ds=Ue,Ro=We}}else bt(this,function(wt){var tt=wt[Be][we];(tt.event||(tt.event=e.dispatch(\"start\",\"end\",\"interrupt\"))).on(Z,oe)});return this},Wa.transition=function(){for(var Z=this.id,oe=++co,we=this.namespace,Be=[],Ue,We,wt,tt,zt=0,or=this.length;zt<or;zt++){Be.push(Ue=[]);for(var We=this[zt],lr=0,Dr=We.length;lr<Dr;lr++)(wt=We[lr])&&(tt=wt[we][Z],_l(wt,lr,we,oe,{time:tt.time,ease:tt.ease,delay:tt.delay+tt.duration,duration:tt.duration})),Ue.push(wt)}return To(Be,we,oe)};function po(Z){return Z==null?\"__transition__\":\"__transition_\"+Z+\"__\"}function _l(Z,oe,we,Be,Ue){var We=Z[we]||(Z[we]={active:0,count:0}),wt=We[Be],tt,zt,or,lr,Dr;function Ir(qr){var Kr=wt.delay;if(zt.t=Kr+tt,Kr<=qr)return oi(qr-Kr);zt.c=oi}function oi(qr){var Kr=We.active,ii=We[Kr];ii&&(ii.timer.c=null,ii.timer.t=NaN,--We.count,delete We[Kr],ii.event&&ii.event.interrupt.call(Z,Z.__data__,ii.index));for(var vi in We)if(+vi<Be){var ci=We[vi];ci.timer.c=null,ci.timer.t=NaN,--We.count,delete We[vi]}zt.c=ui,Oo(function(){return zt.c&&ui(qr||1)&&(zt.c=null,zt.t=NaN),1},0,tt),We.active=Be,wt.event&&wt.event.start.call(Z,Z.__data__,oe),Dr=[],wt.tween.forEach(function(Jr,un){(un=un.call(Z,Z.__data__,oe))&&Dr.push(un)}),lr=wt.ease,or=wt.duration}function ui(qr){for(var Kr=qr/or,ii=lr(Kr),vi=Dr.length;vi>0;)Dr[--vi].call(Z,ii);if(Kr>=1)return wt.event&&wt.event.end.call(Z,Z.__data__,oe),--We.count?delete We[Be]:delete Z[we],1}wt||(tt=Ue.time,zt=Oo(Ir,0,tt),wt=We[Be]={tween:new A,time:tt,timer:zt,delay:Ue.delay,duration:Ue.duration,ease:Ue.ease,index:oe},Ue=null,++We.count)}e.svg.axis=function(){var Z=e.scale.linear(),oe=Hl,we=6,Be=6,Ue=3,We=[10],wt=null,tt;function zt(or){or.each(function(){var lr=e.select(this),Dr=this.__chart__||Z,Ir=this.__chart__=Z.copy(),oi=wt==null?Ir.ticks?Ir.ticks.apply(Ir,We):Ir.domain():wt,ui=tt==null?Ir.tickFormat?Ir.tickFormat.apply(Ir,We):H:tt,qr=lr.selectAll(\".tick\").data(oi,Ir),Kr=qr.enter().insert(\"g\",\".domain\").attr(\"class\",\"tick\").style(\"opacity\",Ye),ii=e.transition(qr.exit()).style(\"opacity\",Ye).remove(),vi=e.transition(qr.order()).style(\"opacity\",1),ci=Math.max(we,0)+Ue,Jr,un=Xi(Ir),dn=lr.selectAll(\".domain\").data([0]),En=(dn.enter().append(\"path\").attr(\"class\",\"domain\"),e.transition(dn));Kr.append(\"line\"),Kr.append(\"text\");var Nn=Kr.select(\"line\"),ga=vi.select(\"line\"),ya=qr.select(\"text\").text(ui),so=Kr.select(\"text\"),wa=vi.select(\"text\"),io=oe===\"top\"||oe===\"left\"?-1:1,Ss,_s,Ns,pn;if(oe===\"bottom\"||oe===\"top\"?(Jr=cu,Ss=\"x\",Ns=\"y\",_s=\"x2\",pn=\"y2\",ya.attr(\"dy\",io<0?\"0em\":\".71em\").style(\"text-anchor\",\"middle\"),En.attr(\"d\",\"M\"+un[0]+\",\"+io*Be+\"V0H\"+un[1]+\"V\"+io*Be)):(Jr=el,Ss=\"y\",Ns=\"x\",_s=\"y2\",pn=\"x2\",ya.attr(\"dy\",\".32em\").style(\"text-anchor\",io<0?\"end\":\"start\"),En.attr(\"d\",\"M\"+io*Be+\",\"+un[0]+\"H0V\"+un[1]+\"H\"+io*Be)),Nn.attr(pn,io*we),so.attr(Ns,io*ci),ga.attr(_s,0).attr(pn,io*we),wa.attr(Ss,0).attr(Ns,io*ci),Ir.rangeBand){var za=Ir,Lo=za.rangeBand()/2;Dr=Ir=function(Fo){return za(Fo)+Lo}}else Dr.rangeBand?Dr=Ir:ii.call(Jr,Ir,Dr);Kr.call(Jr,Dr,Ir),vi.call(Jr,Ir,Ir)})}return zt.scale=function(or){return arguments.length?(Z=or,zt):Z},zt.orient=function(or){return arguments.length?(oe=or in Zu?or+\"\":Hl,zt):oe},zt.ticks=function(){return arguments.length?(We=r(arguments),zt):We},zt.tickValues=function(or){return arguments.length?(wt=or,zt):wt},zt.tickFormat=function(or){return arguments.length?(tt=or,zt):tt},zt.tickSize=function(or){var lr=arguments.length;return lr?(we=+or,Be=+arguments[lr-1],zt):we},zt.innerTickSize=function(or){return arguments.length?(we=+or,zt):we},zt.outerTickSize=function(or){return arguments.length?(Be=+or,zt):Be},zt.tickPadding=function(or){return arguments.length?(Ue=+or,zt):Ue},zt.tickSubdivide=function(){return arguments.length&&zt},zt};var Hl=\"bottom\",Zu={top:1,right:1,bottom:1,left:1};function cu(Z,oe,we){Z.attr(\"transform\",function(Be){var Ue=oe(Be);return\"translate(\"+(isFinite(Ue)?Ue:we(Be))+\",0)\"})}function el(Z,oe,we){Z.attr(\"transform\",function(Be){var Ue=oe(Be);return\"translate(0,\"+(isFinite(Ue)?Ue:we(Be))+\")\"})}e.svg.brush=function(){var Z=ke(lr,\"brushstart\",\"brush\",\"brushend\"),oe=null,we=null,Be=[0,0],Ue=[0,0],We,wt,tt=!0,zt=!0,or=zc[0];function lr(qr){qr.each(function(){var Kr=e.select(this).style(\"pointer-events\",\"all\").style(\"-webkit-tap-highlight-color\",\"rgba(0,0,0,0)\").on(\"mousedown.brush\",ui).on(\"touchstart.brush\",ui),ii=Kr.selectAll(\".background\").data([0]);ii.enter().append(\"rect\").attr(\"class\",\"background\").style(\"visibility\",\"hidden\").style(\"cursor\",\"crosshair\"),Kr.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\",\"extent\").style(\"cursor\",\"move\");var vi=Kr.selectAll(\".resize\").data(or,H);vi.exit().remove(),vi.enter().append(\"g\").attr(\"class\",function(dn){return\"resize \"+dn}).style(\"cursor\",function(dn){return au[dn]}).append(\"rect\").attr(\"x\",function(dn){return/[ew]$/.test(dn)?-3:null}).attr(\"y\",function(dn){return/^[ns]/.test(dn)?-3:null}).attr(\"width\",6).attr(\"height\",6).style(\"visibility\",\"hidden\"),vi.s
Download .txt
gitextract_1cpthhgz/

├── .github/
│   └── workflows/
│       └── publish.yml
├── .gitignore
├── .readthedocs.yaml
├── .travis.yml
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── NEWS.md
├── README.md
├── docs/
│   ├── .nojekyll
│   ├── API.rst
│   ├── Makefile
│   ├── _static/
│   │   ├── custom.js
│   │   └── require.js
│   ├── baseline.rst
│   ├── conf.py
│   ├── dac.rst
│   ├── examples.rst
│   ├── firststeps.rst
│   ├── index.rst
│   ├── installation.rst
│   ├── machinelearning.rst
│   ├── make.bat
│   ├── maps.rst
│   ├── modules.rst
│   ├── news.rst
│   ├── notebooks/
│   │   ├── Baseline.ipynb
│   │   ├── Baseline_and_Centroid.ipynb
│   │   ├── ML_Classification.ipynb
│   │   ├── ML_Exploration.ipynb
│   │   ├── ML_Regression.ipynb
│   │   ├── Maps.ipynb
│   │   ├── Mixing.ipynb
│   │   ├── Normalisation.ipynb
│   │   ├── Raman_fitting.ipynb
│   │   ├── Resample_and_flip.ipynb
│   │   ├── Smoothing.ipynb
│   │   └── data/
│   │       ├── 4338-NDC1-(31)_4X4.txt
│   │       ├── LS4.txt
│   │       └── NS4.txt
│   ├── peakfitting.rst
│   ├── philosophy.rst
│   ├── plotting.rst
│   ├── preprocessing.rst
│   ├── requirements.txt
│   ├── setup.rst
│   ├── signalparams.rst
│   ├── smoothing.rst
│   └── utils.rst
├── environment.yml
├── examples/
│   ├── Iron_AmMin_paper/
│   │   ├── .gitignore
│   │   ├── HOWTO.txt
│   │   ├── Iron_MORB_code.ipynb
│   │   ├── MORB_datalist.xlsx
│   │   ├── iron.py
│   │   └── raw/
│   │       ├── BD1469.txt
│   │       ├── BD1470.txt
│   │       ├── BD1471.txt
│   │       ├── BD1472.txt
│   │       ├── BD1473.txt
│   │       ├── BD1474.txt
│   │       ├── BD1475.txt
│   │       ├── BD1476.txt
│   │       ├── BD1477.txt
│   │       ├── BD1478.txt
│   │       ├── VG175_.txt
│   │       ├── VG175_1.txt
│   │       ├── VG175_2.txt
│   │       ├── VG175_3.txt
│   │       ├── VG175_4.txt
│   │       ├── VG183_.txt
│   │       ├── VG183_1.txt
│   │       ├── VG183_2.txt
│   │       ├── VG183_3.txt
│   │       ├── VG183_4.txt
│   │       ├── VG186_0__X_19996.5__Y_-20032__Time_0.txt
│   │       ├── VG186_2__X_20013__Y_-20055__Time_288.txt
│   │       ├── VG186_3__X_20030.8__Y_-20026.4__Time_433.txt
│   │       ├── VG186_4__X_20028.5__Y_-20016.4__Time_577.txt
│   │       ├── VG186_5__X_19960.5__Y_-20013.9__Time_722.txt
│   │       ├── VG187_0__X_24099.5__Y_-26618.8__Time_0.txt
│   │       ├── VG187_1__X_24133.8__Y_-26769.8__Time_144.txt
│   │       ├── VG187_2__X_23341.8__Y_-27123.3__Time_288.txt
│   │       ├── VG187_3__X_23212.5__Y_-27027.5__Time_433.txt
│   │       ├── VG187_4__X_23396__Y_-27469.3__Time_577.txt
│   │       ├── VG195_0__X_12141.4__Y_-19545.2__Time_0.txt
│   │       ├── VG195_1__X_12123.9__Y_-19557.5__Time_144.txt
│   │       ├── VG195_2__X_12157.9__Y_-19558.1__Time_288.txt
│   │       ├── VG195_3__X_12155.3__Y_-19533__Time_433.txt
│   │       ├── VG195_4__X_12127.4__Y_-19533.3__Time_578.txt
│   │       ├── VG202_0__X_7648.44__Y_-27430__Time_0.txt
│   │       ├── VG202_2__X_7634.03__Y_-27444.3__Time_288.txt
│   │       ├── VG202_3__X_7637.69__Y_-27420.2__Time_433.txt
│   │       ├── VG202_4__X_7660.95__Y_-27420.3__Time_577.txt
│   │       ├── VG202_oct_1_0__Time_0.txt
│   │       ├── VG203_0__X_7115.86__Y_-23841.7__Time_0.txt
│   │       ├── VG203_1__X_7125.78__Y_-23853.3__Time_144.txt
│   │       ├── VG203_2__X_7104.88__Y_-23853.2__Time_289.txt
│   │       ├── VG203_3__X_7106.54__Y_-23831.1__Time_433.txt
│   │       ├── VG203_4__X_7128.14__Y_-23832.2__Time_578.txt
│   │       ├── VG285_.txt
│   │       ├── VG285_1.txt
│   │       ├── VG285_2.txt
│   │       ├── VG285_3.txt
│   │       ├── VG285_4.txt
│   │       ├── VG290_.txt
│   │       ├── VG290_1.txt
│   │       ├── VG290_2.txt
│   │       ├── VG290_3.txt
│   │       ├── VG290_4.txt
│   │       ├── VG3073_0__X_24960.6__Y_-31533.1__Time_0.txt
│   │       ├── VG3073_1__X_24992.5__Y_-31555.7__Time_144.txt
│   │       ├── VG3073_2__X_25001__Y_-31550.5__Time_288.txt
│   │       ├── VG3073_3__X_24857.7__Y_-31338__Time_433.txt
│   │       ├── VG3073_4__X_24824.2__Y_-31298.1__Time_577.txt
│   │       ├── VG3079_1_0__X_11675.1__Y_-22752.8__Time_0.txt
│   │       ├── VG3079_1_1__X_11646.1__Y_-22772.1__Time_144.txt
│   │       ├── VG3079_1_2__X_11683.6__Y_-22746.7__Time_288.txt
│   │       ├── VG3079_2__X_12172.8__Y_-22892.5__Time_288.txt
│   │       ├── VG3079_3__X_12190.1__Y_-22882.1__Time_433.txt
│   │       ├── VG322_.txt
│   │       ├── VG322_1_0__X_16100.5__Y_-19847__Time_0.txt
│   │       ├── VG322_1_1__X_16116.9__Y_-19849__Time_144.txt
│   │       ├── VG322_1_2__X_16121.1__Y_-19831.4__Time_288.txt
│   │       ├── VG322_1_3__X_16117.9__Y_-19809.1__Time_433.txt
│   │       ├── VG334__0__X_20679.2__Y_-18282.5__Time_0.txt
│   │       ├── VG334__1__X_20664.6__Y_-18296.1__Time_144.txt
│   │       ├── VG334__2__X_20686.6__Y_-18297.2__Time_288.txt
│   │       ├── VG334__3__X_20688.3__Y_-18269.7__Time_433.txt
│   │       ├── VG334__4__X_20668.5__Y_-18272.8__Time_577.txt
│   │       ├── VG3450_0__X_14838.7__Y_-20142.8__Time_0.txt
│   │       ├── VG3450_1__X_14855.5__Y_-20151.9__Time_144.txt
│   │       ├── VG3450_2__X_14824.5__Y_-20153.1__Time_288.txt
│   │       ├── VG3450_3__X_14828.2__Y_-20132.5__Time_433.txt
│   │       ├── VG3450_4__X_14854.7__Y_-20133.6__Time_577.txt
│   │       ├── VG3831_0__X_22339.7__Y_-19634.3__Time_0.txt
│   │       ├── VG3831_1__X_22347.2__Y_-19640.8__Time_144.txt
│   │       ├── VG3831_2__X_22353.7__Y_-19646.9__Time_289.txt
│   │       ├── VG3831_3__X_22353.7__Y_-19624.4__Time_433.txt
│   │       ├── VG3831_4__X_22307.7__Y_-19611.5__Time_577.txt
│   │       ├── VG4088_0__X_16619.1__Y_-23684.9__Time_0.txt
│   │       ├── VG4088_1__X_16607.2__Y_-23693.9__Time_144.txt
│   │       ├── VG4088_2__X_16637.3__Y_-23693.8__Time_288.txt
│   │       ├── VG4088_3__X_16638.9__Y_-23680.7__Time_433.txt
│   │       ├── VG4088_4__X_16601.1__Y_-23676__Time_577.txt
│   │       ├── VG4522_.txt
│   │       ├── VG4522_1.txt
│   │       ├── VG4522_2.txt
│   │       ├── VG4522_3.txt
│   │       ├── VG4522_4.txt
│   │       ├── VG4700_0__X_18217.1__Y_-19810.8__Time_0.txt
│   │       ├── VG4700_1__X_18227.6__Y_-19821.2__Time_144.txt
│   │       ├── VG4700_2__X_18192.8__Y_-19824__Time_288.txt
│   │       ├── VG4700_3__X_18200.5__Y_-19800.4__Time_433.txt
│   │       ├── VG4700_4__X_18243.3__Y_-19813.8__Time_577.txt
│   │       ├── VG4701_0__X_25688.9__Y_-19810.7__Time_0.txt
│   │       ├── VG4701_1__X_25704.9__Y_-19815.2__Time_144.txt
│   │       ├── VG4701_2__X_25683.3__Y_-19817.4__Time_288.txt
│   │       ├── VG4701_3__X_25682.4__Y_-19803__Time_433.txt
│   │       ├── VG4701_4__X_25702.6__Y_-19801.7__Time_577.txt
│   │       ├── VG4709_0__X_21085.2__Y_-21479.9__Time_0.txt
│   │       ├── VG4709_1__X_21089.9__Y_-21483.4__Time_144.txt
│   │       ├── VG4709_2__X_21078.7__Y_-21485__Time_288.txt
│   │       ├── VG4709_3__X_21076.9__Y_-21474.6__Time_433.txt
│   │       ├── VG4709_4__X_21091.3__Y_-21472.8__Time_577.txt
│   │       ├── VG4971_.txt
│   │       ├── VG4971_1.txt
│   │       ├── VG4971_2.txt
│   │       ├── VG4971_3.txt
│   │       ├── VG4971_4.txt
│   │       ├── VG4974_.txt
│   │       ├── VG4974_1.txt
│   │       ├── VG4974_2.txt
│   │       ├── VG4974_3.txt
│   │       ├── VG4974_4.txt
│   │       ├── VG5374_0__X_18181.5__Y_-18038.6__Time_0.txt
│   │       ├── VG5374_1__X_18194.5__Y_-18046.3__Time_144.txt
│   │       ├── VG5374_2__X_18171__Y_-18046.7__Time_289.txt
│   │       ├── VG5374_3__X_18171.4__Y_-18026.8__Time_433.txt
│   │       ├── VG5374_4__X_18196__Y_-18028.4__Time_578.txt
│   │       ├── VG5697_.txt
│   │       ├── VG5697_1.txt
│   │       ├── VG5697_2.txt
│   │       ├── VG5697_3.txt
│   │       ├── VG5697_4.txt
│   │       ├── VG5781_.txt
│   │       ├── VG5781_1.txt
│   │       ├── VG5781_2.txt
│   │       ├── VG5781_3.txt
│   │       ├── VG5781_4.txt
│   │       ├── VG612_0__X_19514__Y_-19276.6__Time_0.txt
│   │       ├── VG612_1__X_19551.8__Y_-19295.8__Time_144.txt
│   │       ├── VG612_2__X_19501__Y_-19341__Time_288.txt
│   │       ├── VG612_3__X_19376.6__Y_-19350.4__Time_433.txt
│   │       ├── VG612_4__X_19287.5__Y_-19296.3__Time_577.txt
│   │       ├── VG662_0__X_13277.4__Y_-18492.1__Time_0.txt
│   │       ├── VG662_1__X_13303.4__Y_-18492.5__Time_144.txt
│   │       ├── VG662_2__X_13292.4__Y_-18480.4__Time_288.txt
│   │       ├── VG662_3__X_13277.7__Y_-18471.3__Time_433.txt
│   │       ├── VG662_4__X_13305.5__Y_-18472.1__Time_577.txt
│   │       ├── VG663_0__X_19823.3__Y_-22023.6__Time_0.txt
│   │       ├── VG663_1__X_19837.8__Y_-22035.6__Time_144.txt
│   │       ├── VG663_2__X_19805.4__Y_-22037.8__Time_288.txt
│   │       ├── VG663_3__X_19806.7__Y_-22010.3__Time_433.txt
│   │       ├── VG663_4__X_19837.2__Y_-22009.6__Time_577.txt
│   │       ├── VG664_.txt
│   │       ├── VG664_1_0__X_22184.8__Y_-25677.4__Time_0.txt
│   │       ├── VG664_1_1__X_22206.1__Y_-25676.3__Time_144.txt
│   │       ├── VG664_1_2__X_22208__Y_-25658.1__Time_288.txt
│   │       ├── VG664_1_3__X_22187.4__Y_-25657.9__Time_433.txt
│   │       ├── VG665_0__X_20243__Y_-29172.7__Time_0.txt
│   │       ├── VG665_1__X_20224.6__Y_-29185.8__Time_144.txt
│   │       ├── VG665_2__X_20259.3__Y_-29185.8__Time_288.txt
│   │       ├── VG665_3__X_20256__Y_-29162.3__Time_433.txt
│   │       ├── VG665_4__X_20228.7__Y_-29164.4__Time_577.txt
│   │       ├── VG666_0__X_17346.8__Y_-34522__Time_0.txt
│   │       ├── VG666_1__X_17421.8__Y_-34598.7__Time_144.txt
│   │       ├── VG666_2__X_17405.1__Y_-34315.9__Time_288.txt
│   │       ├── VG666_3__X_17494__Y_-34130.6__Time_433.txt
│   │       ├── VG666_4__X_17737.3__Y_-34226.4__Time_577.txt
│   │       ├── VG667_0__X_11954.1__Y_-36113.4__Time_0.txt
│   │       ├── VG667_1__X_11990.4__Y_-36038.7__Time_121.txt
│   │       ├── VG667_2__X_12073__Y_-36190.4__Time_242.txt
│   │       ├── VG667_3__X_12104.7__Y_-36244.6__Time_363.txt
│   │       ├── VG667_4__X_11944.8__Y_-36273.5__Time_484.txt
│   │       ├── VG6820_1__X_18106.3__Y_-19219.9__Time_144.txt
│   │       ├── VG6820_2__X_18084.6__Y_-19220.3__Time_288.txt
│   │       ├── VG6820_3__X_18087__Y_-19205.7__Time_433.txt
│   │       ├── VG6820_4__X_18107.9__Y_-19208.1__Time_577.txt
│   │       ├── VG6821_0__X_20030__Y_-21785.8__Time_0.txt
│   │       ├── VG6821_1__X_20045.4__Y_-21791.9__Time_144.txt
│   │       ├── VG6821_2__X_20057.6__Y_-21798.9__Time_288.txt
│   │       ├── VG6821_3__X_20070.5__Y_-21804.6__Time_433.txt
│   │       ├── VG6821_4__X_20083.2__Y_-21811.1__Time_577.txt
│   │       ├── VG6822_0__X_24458__Y_-27315.2__Time_0.txt
│   │       ├── VG6822_1__X_24458__Y_-27320.2__Time_144.txt
│   │       ├── VG6822_2__X_24458__Y_-27325.9__Time_288.txt
│   │       ├── VG6822_3__X_24458.5__Y_-27311.2__Time_433.txt
│   │       ├── VG6822_4__X_24462.7__Y_-27318.5__Time_577.txt
│   │       ├── VG6823_0__X_22497.6__Y_-30686__Time_0.txt
│   │       ├── VG6823_1__X_22481.9__Y_-30677.8__Time_144.txt
│   │       ├── VG6823_2__X_22494.1__Y_-30681__Time_288.txt
│   │       ├── VG6823_3__X_22498.1__Y_-30698.8__Time_433.txt
│   │       ├── VG6823_4__X_22534.1__Y_-30695.7__Time_577.txt
│   │       ├── VG6825_0__X_20612.2__Y_-36086.8__Time_0.txt
│   │       ├── VG6825_1__X_20606.3__Y_-36082.9__Time_144.txt
│   │       ├── VG6825_2__X_20644.3__Y_-36091.5__Time_288.txt
│   │       ├── VG6825_3__X_20631__Y_-36083.9__Time_433.txt
│   │       ├── VG6825_4__X_20627.8__Y_-36107.1__Time_577.txt
│   │       ├── VG682_.txt
│   │       ├── VG682_1.txt
│   │       ├── VG682_2.txt
│   │       ├── VG682_3.txt
│   │       ├── VG682_4.txt
│   │       ├── VG684_.txt
│   │       ├── VG684_1.txt
│   │       ├── VG684_2.txt
│   │       ├── VG684_3.txt
│   │       ├── VG684_4.txt
│   │       ├── VG758_0__X_19316.1__Y_-19291.2__Time_0.txt
│   │       ├── VG758_1__X_19323.2__Y_-19296__Time_144.txt
│   │       ├── VG758_2__X_19306.6__Y_-19297.7__Time_288.txt
│   │       ├── VG758_3__X_19307.1__Y_-19283.1__Time_433.txt
│   │       ├── VG758_4__X_19324.5__Y_-19284.8__Time_577.txt
│   │       ├── VG884_0__X_17275.9__Y_-20515.2__Time_0.txt
│   │       ├── VG884_1__X_17251.2__Y_-20417.2__Time_144.txt
│   │       ├── VG884_2__X_17127.6__Y_-20407.9__Time_288.txt
│   │       ├── VG884_3__X_17100.7__Y_-20385.9__Time_433.txt
│   │       ├── VG884_4__X_16946.2__Y_-20511.5__Time_577.txt
│   │       ├── r145.txt
│   │       ├── r147.txt
│   │       ├── r148.txt
│   │       ├── r149.txt
│   │       ├── r150.txt
│   │       ├── r151.txt
│   │       ├── r152.txt
│   │       ├── r153.txt
│   │       ├── r154.txt
│   │       ├── r155.txt
│   │       ├── r156.txt
│   │       ├── r157.txt
│   │       ├── r158.txt
│   │       ├── r159.txt
│   │       ├── r160.txt
│   │       ├── r161.txt
│   │       ├── r162.txt
│   │       ├── r163.txt
│   │       ├── r164.txt
│   │       ├── r165.txt
│   │       ├── r236.txt
│   │       ├── r237.txt
│   │       ├── r238.txt
│   │       ├── r239.txt
│   │       ├── r240.txt
│   │       ├── r241.txt
│   │       ├── r268_0.txt
│   │       ├── r268_1.txt
│   │       ├── r268_2.txt
│   │       ├── r269_0.txt
│   │       ├── r269_1.txt
│   │       ├── r269_2.txt
│   │       ├── r270_0.txt
│   │       ├── r270_1.txt
│   │       ├── r270_2.txt
│   │       ├── r271_0.txt
│   │       ├── r271_1.txt
│   │       ├── r271_2.txt
│   │       ├── r272_0.txt
│   │       ├── r272_1.txt
│   │       ├── r272_2.txt
│   │       ├── r273_0.txt
│   │       ├── r273_1.txt
│   │       ├── r273_2.txt
│   │       ├── r275_0.txt
│   │       ├── r275_1.txt
│   │       ├── r275_2.txt
│   │       ├── r276_0.txt
│   │       ├── r276_1.txt
│   │       ├── r276_2.txt
│   │       ├── r277_0.txt
│   │       ├── r277_1.txt
│   │       ├── r277_2.txt
│   │       ├── r278_0.txt
│   │       ├── r278_1.txt
│   │       ├── r278_2.txt
│   │       ├── r362.txt
│   │       ├── r363.txt
│   │       ├── r364.txt
│   │       ├── r365.txt
│   │       ├── r520.txt
│   │       ├── r521.txt
│   │       ├── r522.txt
│   │       ├── r523.txt
│   │       ├── r524.txt
│   │       ├── r711.txt
│   │       ├── r712.txt
│   │       ├── r714.txt
│   │       ├── r715.txt
│   │       ├── r716.txt
│   │       ├── r717.txt
│   │       ├── r718.txt
│   │       ├── r719.txt
│   │       ├── r720.txt
│   │       ├── r721.txt
│   │       ├── r722.txt
│   │       ├── r723.txt
│   │       ├── r724.txt
│   │       ├── r725.txt
│   │       ├── r726.txt
│   │       ├── r727.txt
│   │       ├── r728.txt
│   │       ├── r729.txt
│   │       ├── r730.txt
│   │       ├── r731.txt
│   │       ├── r732.txt
│   │       ├── r733.txt
│   │       ├── r738.txt
│   │       ├── r739.txt
│   │       └── r740.txt
│   ├── README.md
│   └── rameau_example/
│       ├── Python_treatment.ipynb
│       ├── Python_treatment_ext.ipynb
│       ├── README.md
│       ├── dataset.xlsx
│       ├── rameau.py
│       └── raw/
│           ├── Som-13-17.txt
│           ├── Som-13-18.txt
│           ├── Som-13-19.txt
│           ├── Som-14-18.txt
│           ├── Som-14-19.txt
│           ├── Som-14-20.txt
│           ├── Som-15-11.txt
│           ├── Som-15-12.txt
│           ├── Som-15-13.txt
│           ├── Som-16-15.txt
│           ├── Som-16-27.txt
│           ├── Som-16-28.txt
│           ├── ac8014.txt
│           ├── ac8015.txt
│           ├── ac8028.txt
│           ├── ac8037.txt
│           ├── ac8041.txt
│           ├── ac9025.txt
│           ├── ac9026.txt
│           ├── ac9027.txt
│           ├── ac9028.txt
│           ├── ac9029.txt
│           ├── ac9030.txt
│           ├── ad0085.txt
│           ├── ad0086.txt
│           ├── ad0087.txt
│           ├── ad0090.txt
│           ├── ad0091.txt
│           ├── ad0098.txt
│           ├── ad0099.txt
│           ├── ad0100.txt
│           ├── ad0101.txt
│           ├── ad0102.txt
│           ├── ad0104.txt
│           ├── ad0105.txt
│           ├── ad0107.txt
│           ├── ad0108.txt
│           ├── ad0110.txt
│           ├── ad0111.txt
│           ├── ad0112.txt
│           ├── ad0114.txt
│           ├── ad0116.txt
│           ├── ad0117.txt
│           ├── ad0118.txt
│           ├── ad0119.txt
│           ├── ad0120.txt
│           ├── ad0122.txt
│           ├── ad0123.txt
│           ├── ae0187.txt
│           ├── ae0188.txt
│           ├── ae0190.txt
│           ├── ae0191.txt
│           ├── ae0192.txt
│           ├── ae0199.txt
│           ├── ae0202.txt
│           ├── ae0203.txt
│           ├── ae0204.txt
│           ├── ae0405.txt
│           ├── ae0406.txt
│           ├── ae0409.txt
│           ├── ae0441.txt
│           ├── ae0442.txt
│           ├── ae0443.txt
│           ├── ae0660.txt
│           ├── ae0664.txt
│           ├── ae0674.txt
│           ├── ae0675.txt
│           ├── ae0676.txt
│           ├── ae0682.txt
│           ├── ae0684.txt
│           ├── ae0685.txt
│           ├── ae0980.txt
│           ├── r010.txt
│           ├── r015.txt
│           ├── r016.txt
│           ├── r024.txt
│           ├── r025.txt
│           ├── r026.txt
│           ├── r027.txt
│           ├── r030.txt
│           ├── r031.txt
│           ├── r032.txt
│           ├── r034.txt
│           ├── r039.txt
│           ├── r040.txt
│           ├── r041.txt
│           ├── r042.txt
│           ├── r044_0.txt
│           ├── r044_1.txt
│           ├── r044_2.txt
│           ├── r044_3.txt
│           ├── r044_4.txt
│           ├── r044_5.txt
│           ├── r049.txt
│           ├── r051.txt
│           ├── r107.txt
│           ├── r108.txt
│           ├── r109.txt
│           ├── r110.txt
│           ├── r111.txt
│           ├── r112.txt
│           ├── r113.txt
│           ├── r114.txt
│           ├── r116_0.txt
│           ├── r116_1.txt
│           ├── r116_2.txt
│           ├── r116_3.txt
│           ├── r116_4.txt
│           ├── r116_5.txt
│           ├── r118_0.txt
│           ├── r118_1.txt
│           ├── r118_2.txt
│           ├── r386.txt
│           ├── r387.txt
│           ├── r388.txt
│           ├── r389.txt
│           ├── r393.txt
│           ├── r397.txt
│           ├── r487_0.txt
│           ├── r487_1.txt
│           ├── r487_3.txt
│           ├── r487_4.txt
│           ├── r703.txt
│           ├── r704.txt
│           ├── r705.txt
│           ├── r706.txt
│           ├── r707.txt
│           └── r708.txt
├── legacy_code/
│   ├── Diamond_Pressure.py
│   ├── HF_Treatment_Auto.py
│   ├── HT_dec.py
│   ├── IR_dec_comb.py
│   ├── I_Io_calc.py
│   ├── LF_Treatment.py
│   ├── LF_dec.py
│   ├── README.md
│   ├── Remove_Ctx_MI.py
│   ├── cleaning.py
│   └── rameau_construction
├── pyproject.toml
├── roadmap.md
├── src/
│   ├── rampy/
│   │   ├── .gitignore
│   │   ├── __init__.py
│   │   ├── baseline.py
│   │   ├── dac.py
│   │   ├── filters.py
│   │   ├── functions.py
│   │   ├── maps.py
│   │   ├── mixing.py
│   │   ├── ml_classification.py
│   │   ├── ml_exploration.py
│   │   ├── ml_regressor.py
│   │   ├── notused/
│   │   │   └── IRTABS.py
│   │   ├── peak_area.py
│   │   ├── peak_shapes.py
│   │   ├── plotting.py
│   │   ├── rameau.py
│   │   ├── spectranization.py
│   │   └── tlcorrection.py
│   └── rampy.egg-info/
│       ├── PKG-INFO
│       ├── SOURCES.txt
│       ├── dependency_links.txt
│       ├── requires.txt
│       └── top_level.txt
└── tests/
    ├── __init__.py
    ├── map_test.txt
    ├── test_baseline.py
    ├── test_dac.py
    ├── test_mixing.py
    ├── test_mlclassificator.py
    ├── test_mlexplorer.py
    ├── test_mlregressor.py
    ├── test_peakarea.py
    ├── test_plotting.py
    ├── test_rameau.py
    ├── test_smooth.py
    ├── test_spectranization.py
    └── test_tlcorrection.py
Download .txt
SYMBOL INDEX (167 symbols across 36 files)

FILE: docs/_static/require.js
  function commentReplace (line 5) | function commentReplace(e,t){return t||""}
  function isFunction (line 5) | function isFunction(e){return"[object Function]"===ostring.call(e)}
  function isArray (line 5) | function isArray(e){return"[object Array]"===ostring.call(e)}
  function each (line 5) | function each(e,t){if(e)for(var i=0;i<e.length&&(!e[i]||!t(e[i],i,e));i+...
  function eachReverse (line 5) | function eachReverse(e,t){if(e)for(var i=e.length-1;-1<i&&(!e[i]||!t(e[i...
  function hasProp (line 5) | function hasProp(e,t){return hasOwn.call(e,t)}
  function getOwn (line 5) | function getOwn(e,t){return hasProp(e,t)&&e[t]}
  function eachProp (line 5) | function eachProp(e,t){for(var i in e)if(hasProp(e,i)&&-1==disallowedPro...
  function mixin (line 5) | function mixin(i,e,r,n){e&&eachProp(e,function(e,t){!r&&hasProp(i,t)||(!...
  function bind (line 5) | function bind(e,t){return function(){return t.apply(e,arguments)}}
  function scripts (line 5) | function scripts(){return document.getElementsByTagName("script")}
  function defaultOnError (line 5) | function defaultOnError(e){throw e}
  function getGlobal (line 5) | function getGlobal(e){var t;return e&&(t=global,each(e.split("."),functi...
  function makeError (line 5) | function makeError(e,t,i,r){t=new Error(t+"\nhttps://requirejs.org/docs/...
  function newContext (line 5) | function newContext(u){var t,e,f,c,i,b={waitSeconds:7,baseUrl:"./",paths...
  function getInteractiveScript (line 5) | function getInteractiveScript(){return interactiveScript&&"interactive"=...

FILE: examples/Iron_AmMin_paper/iron.py
  function preparing_data (line 11) | def preparing_data(dataliste,**kwargs):
  function intensity (line 121) | def intensity(x,y,idx1=929.,idx2=931.):
  function chimie_control (line 147) | def chimie_control(datalist):
  function molarweights (line 189) | def molarweights():
  function wt_mol (line 241) | def wt_mol(chemtable):

FILE: examples/rameau_example/rameau.py
  function main (line 13) | def main(argv):
  function plot_spectra (line 135) | def plot_spectra(rameau_object,**kwargs):

FILE: legacy_code/Diamond_Pressure.py
  function residual (line 38) | def residual(pars, x, data=None, eps=None):

FILE: legacy_code/HF_Treatment_Auto.py
  function residual (line 182) | def residual(pars, spforcorr, sptarget=None):

FILE: legacy_code/IR_dec_comb.py
  function residual (line 39) | def residual(pars, x, data=None, eps=None):

FILE: legacy_code/LF_Treatment.py
  function removebas_melt (line 32) | def removebas_melt(name):
  function removebas_fluid (line 73) | def removebas_fluid(name):

FILE: legacy_code/LF_dec.py
  function residual_melt (line 40) | def residual_melt(pars, x, data=None, eps=None):
  function residual_fluid (line 77) | def residual_fluid(pars, x, data=None, eps=None):

FILE: legacy_code/Remove_Ctx_MI.py
  function residual (line 133) | def residual(pars, spforcorr, sptarget=None):
  function residual2 (line 185) | def residual2(pars, spforcorr, spctx, sptarget=None):

FILE: src/rampy/baseline.py
  function get_portion_interest (line 21) | def get_portion_interest(x: np.ndarray, y: np.ndarray, roi) -> np.ndarray:
  function extract_signal (line 25) | def extract_signal(x: np.ndarray, y: np.ndarray, roi) -> np.ndarray:
  function validate_input (line 80) | def validate_input(x, y):
  function validate_roi (line 88) | def validate_roi(roi):
  function standardize_data (line 99) | def standardize_data(x: np.ndarray, y: np.ndarray):
  function baseline (line 107) | def baseline(x_input: np.ndarray,
  function fit_baseline (line 223) | def fit_baseline(x: np.ndarray, y: np.ndarray, roi_: np.ndarray, yafit: ...
  function rubberband_baseline (line 310) | def rubberband_baseline(x: np.ndarray, y: np.ndarray) -> np.ndarray:
  function als_baseline (line 355) | def als_baseline(y: np.ndarray, lam: float, p: float, niter: int) -> np....
  function arPLS_baseline (line 367) | def arPLS_baseline(y: np.ndarray, lam: float, ratio: float) -> np.ndarray:
  function drPLS_baseline (line 387) | def drPLS_baseline(y: np.ndarray, niter: int, lam: float, eta: float, ra...

FILE: src/rampy/dac.py
  function ruby_T_corr (line 3) | def ruby_T_corr(T_K: float | np.ndarray) -> float | np.ndarray:
  function borate_T_corr (line 23) | def borate_T_corr(T_K: float | np.ndarray) -> float | np.ndarray:
  function pressure_sensor (line 43) | def pressure_sensor(

FILE: src/rampy/filters.py
  function smooth (line 15) | def smooth(x: np.ndarray, y: np.ndarray, method: str = "whittaker", **kw...
  function whittaker (line 135) | def whittaker(y: np.ndarray, weights: np.ndarray = None, **kwargs) -> np...
  function spectrafilter (line 189) | def spectrafilter(spectre : np.ndarray, filtertype: str, fq: int, numtap...

FILE: src/rampy/functions.py
  function funlog (line 14) | def funlog(x, a, b, c, d):
  function funexp (line 21) | def funexp(x, a, b, c):
  function poly2 (line 28) | def poly2(x, a, b, c):
  function linear (line 32) | def linear(x, a, b):
  function linear0 (line 36) | def linear0(x, a):
  function constant (line 40) | def constant(x, a):
  function multigaussian (line 56) | def multigaussian(x,params):
  function gauss_lsq (line 68) | def gauss_lsq(params,x):
  function gauss_lsq_lfix (line 99) | def gauss_lsq_lfix(params,x):
  function diffshort (line 137) | def diffshort(x: np.ndarray, t: float, C0: float, C1: float, D: float) -...
  function difffull (line 163) | def difffull(x1: float, x2: float, t: float, C0: float, C1: float, D: fl...

FILE: src/rampy/maps.py
  class maps (line 17) | class maps():
    method __init__ (line 36) | def __init__(self, file,
    method background (line 70) | def background(self, bir, method = "poly", **kwargs):
    method normalise (line 115) | def normalise(self, y, method="intensity"):
    method smooth (line 130) | def smooth(self, y, method="whittaker",**kwargs):
    method centroid (line 154) | def centroid(self, y, region_to_investigate):
    method intensity (line 169) | def intensity(self, y, region_to_investigate):
    method area (line 186) | def area(self, y, region_to_investigate):
    method intensity_ratio (line 203) | def intensity_ratio(self, y, region_to_investigate):
    method area_ratio (line 226) | def area_ratio(self, y, region_to_investigate):
  function read_renishaw (line 248) | def read_renishaw(file):
  function read_horiba (line 281) | def read_horiba(file, map_type="2D"):
  function peak (line 319) | def peak(X, Y, lambdas, intensities, function, Xrange, amp, Xmean, sigma...

FILE: src/rampy/mixing.py
  function mixing_sp (line 12) | def mixing_sp(y_fit: np.ndarray, ref1: np.ndarray, ref2: np.ndarray) -> ...

FILE: src/rampy/ml_classification.py
  class mlclassificator (line 13) | class mlclassificator:
    method __init__ (line 37) | def __init__(self,x,y,**kwargs):
    method scale_data (line 112) | def scale_data(self):
    method fit (line 121) | def fit(self, params_: dict = None):
    method refit (line 163) | def refit(self):
    method predict (line 176) | def predict(self,X):

FILE: src/rampy/ml_exploration.py
  class mlexplorer (line 12) | class mlexplorer:
    method __init__ (line 62) | def __init__(self,x,**kwargs):
    method fit (line 105) | def fit(self):
    method refit (line 121) | def refit(self):
    method predict (line 132) | def predict(self,X):

FILE: src/rampy/ml_regressor.py
  function chemical_splitting (line 19) | def chemical_splitting(Pandas_DataFrame, target, split_fraction=0.30, ra...
  class mlregressor (line 78) | class mlregressor:
    method __init__ (line 151) | def __init__(self,x,y,**kwargs):
    method fit (line 223) | def fit(self):
    method refit (line 283) | def refit(self):
    method predict (line 298) | def predict(self,X):

FILE: src/rampy/notused/IRTABS.py
  function FTIRout (line 14) | def FTIRout(nameR,nameB,nameout,thick,**options): # FUNCTION TO CALCULAT...
  function FTIRcomp (line 65) | def FTIRcomp(names, listelg, plotdisplay, nameout): # FUNCTION TO PLOT T...

FILE: src/rampy/peak_area.py
  function peakarea (line 16) | def peakarea(shape: str, amp: float, HWHM: float, pos: float = None,
  function gaussianarea (line 137) | def gaussianarea(amp,HWHM,**options):
  function area_peak (line 161) | def area_peak(

FILE: src/rampy/peak_shapes.py
  function gaussian (line 14) | def gaussian(x: np.ndarray, amp, freq, HWHM) -> np.ndarray:
  function lorentzian (line 51) | def lorentzian(x: np.ndarray, amp, freq, HWHM) -> np.ndarray:
  function pseudovoigt (line 88) | def pseudovoigt(x: np.ndarray, amp, freq, HWHM, L_ratio) -> np.ndarray:
  function pearson7 (line 132) | def pearson7(x, a0, a1, a2, a3):

FILE: src/rampy/plotting.py
  function plot_spectrum (line 12) | def plot_spectrum(

FILE: src/rampy/rameau.py
  class rameau (line 16) | class rameau:
    method __init__ (line 84) | def __init__(self, data_liste, path_spectra='./raw/'):
    method data_reduction (line 90) | def data_reduction(self,method="LL2012",delim='\t',laser=514.532,splin...
    method calibrate (line 127) | def calibrate(self,data_calib=None,method="LL2012", delim='\t',path_ca...
    method predict (line 196) | def predict(self,method="LL2012"):
    method external_calibration (line 236) | def external_calibration(self, path_ref='./raw/Standards/', roi = np.a...
  function fit_spectra (line 321) | def fit_spectra(data_liste,method="LL2012",delim='\t',path_in='./raw/',l...
  function DG2017_predict (line 438) | def DG2017_predict(dictio,a=0.096,b=0.663):
  function DG2017_calibrate (line 456) | def DG2017_calibrate(dictio):
  function LL2012_predict (line 472) | def LL2012_predict(dictio,A=0.007609):
  function LL2012_calibrate (line 487) | def LL2012_calibrate(dictio):

FILE: src/rampy/spectranization.py
  function spectrarray (line 15) | def spectrarray(name: np.ndarray, sh: int, sf: int, x: np.ndarray) -> np...
  function spectrataux (line 64) | def spectrataux(spectres: np.ndarray) -> np.ndarray:
  function spectraoffset (line 110) | def spectraoffset(spectre, oft):
  function shiftsp (line 144) | def shiftsp(sp: np.ndarray, shift: float) -> np.ndarray:
  function flipsp (line 166) | def flipsp(sp: np.ndarray) -> np.ndarray:
  function resample (line 188) | def resample(x: np.ndarray, y: np.ndarray, x_new: np.ndarray, fill_value...
  function normalise (line 217) | def normalise(y: np.ndarray, x : np.ndarray = None, method: str = "inten...
  function centroid (line 262) | def centroid(x: np.ndarray, y: np.ndarray, smoothing: bool = False, **kw...
  function despiking (line 294) | def despiking(x: np.ndarray, y: np.ndarray, neigh:int = 4, threshold:int...
  function invcm_to_nm (line 347) | def invcm_to_nm(x_inv_cm: np.ndarray, laser_nm: float = 532.0) -> np.nda...
  function nm_to_invcm (line 367) | def nm_to_invcm(x: np.ndarray, laser_nm: float = 532.0) -> np.ndarray:
  function convert_x_units (line 387) | def convert_x_units(x: np.ndarray, laser_nm: float = 532.0, way: str = "...

FILE: src/rampy/tlcorrection.py
  function tlcorrection (line 13) | def tlcorrection(x: np.ndarray, y: np.ndarray, temperature: float, wavel...

FILE: tests/test_baseline.py
  class TestBaseline (line 11) | class TestBaseline(unittest.TestCase):
    method test_baseline (line 13) | def test_baseline(self):

FILE: tests/test_dac.py
  class TestPressureFunctions (line 5) | class TestPressureFunctions(unittest.TestCase):
    method test_ruby_T_corr (line 7) | def test_ruby_T_corr(self):
    method test_borate_T_corr (line 16) | def test_borate_T_corr(self):
    method test_pressure_sensor_ruby (line 25) | def test_pressure_sensor_ruby(self):
    method test_pressure_sensor_borate_datchi (line 39) | def test_pressure_sensor_borate_datchi(self):
    method test_pressure_sensor_invalid_scale (line 55) | def test_pressure_sensor_invalid_scale(self):

FILE: tests/test_mixing.py
  class TestSmooth (line 8) | class TestSmooth(unittest.TestCase):
    method test_mixing (line 10) | def test_mixing(self):

FILE: tests/test_mlclassificator.py
  class TestMLC (line 13) | class TestMLC(unittest.TestCase):
    method test_mlclassificator (line 15) | def test_mlclassificator(self):

FILE: tests/test_mlexplorer.py
  class TestML2 (line 11) | class TestML2(unittest.TestCase):
    method test_mlexplorer (line 13) | def test_mlexplorer(self):

FILE: tests/test_mlregressor.py
  class TestML (line 11) | class TestML(unittest.TestCase):
    method test_mlregressor (line 13) | def test_mlregressor(self):

FILE: tests/test_peakarea.py
  class TestPeakArea (line 6) | class TestPeakArea(unittest.TestCase):
    method test_gaussian_peak (line 7) | def test_gaussian_peak(self):
    method test_gaussian_with_uncertainties (line 17) | def test_gaussian_with_uncertainties(self):
    method test_lorentzian_peak (line 32) | def test_lorentzian_peak(self):
    method test_pseudovoigt_peak (line 44) | def test_pseudovoigt_peak(self):
    method test_pearson7_peak (line 57) | def test_pearson7_peak(self):
    method test_invalid_shape (line 70) | def test_invalid_shape(self):
    method test_missing_parameters (line 75) | def test_missing_parameters(self):
    method test_invalid_L_ratio (line 82) | def test_invalid_L_ratio(self):
    method test_array_inputs (line 89) | def test_array_inputs(self):
    method test_area_peak (line 102) | def test_area_peak(self):

FILE: tests/test_plotting.py
  class TestPlotSpectra (line 6) | class TestPlotSpectra(unittest.TestCase):
    method setUp (line 7) | def setUp(self):
    method test_plot_spectra_no_baselines_or_smoothed_signals (line 18) | def test_plot_spectra_no_baselines_or_smoothed_signals(self):
    method test_plot_spectra_with_baselines_and_smoothed_signals (line 32) | def test_plot_spectra_with_baselines_and_smoothed_signals(self):
    method test_plot_spectra_with_missing_labels (line 53) | def test_plot_spectra_with_missing_labels(self):

FILE: tests/test_smooth.py
  class TestSmooth (line 10) | class TestSmooth(unittest.TestCase):
    method test_smooth (line 12) | def test_smooth(self):

FILE: tests/test_spectranization.py
  class TestSpectranization (line 12) | class TestSpectranization(unittest.TestCase):
    method test_flipsp (line 14) | def test_flipsp(self):
    method test_resample (line 25) | def test_resample(self):
    method test_centroid (line 38) | def test_centroid(self):
    method test_normalise (line 54) | def test_normalise(self):
    method test_despiking (line 68) | def test_despiking(self):

FILE: tests/test_tlcorrection.py
  class Testtlcorrection (line 10) | class Testtlcorrection(unittest.TestCase):
    method test_tlcorrection (line 12) | def test_tlcorrection(self):
Copy disabled (too large) Download .json
Condensed preview — 543 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (51,248K chars).
[
  {
    "path": ".github/workflows/publish.yml",
    "chars": 817,
    "preview": "name: Upload Python Package to PyPI when a Release is Created\n\non:\n  release:\n    types: [created]\n\njobs:\n  pypi-publish"
  },
  {
    "path": ".gitignore",
    "chars": 151,
    "preview": ".DS_STORE\n/dist/\n/dev/\n/docs/doctrees/\n/docs/build/\n/docs/html/\n/build/\n.ipynb_checkpoints/\n/rampy.egg-info/\n/.pytest_ca"
  },
  {
    "path": ".readthedocs.yaml",
    "chars": 1059,
    "preview": "# Read the Docs configuration file for Sphinx projects\n# See https://docs.readthedocs.io/en/stable/config-file/v2.html f"
  },
  {
    "path": ".travis.yml",
    "chars": 139,
    "preview": "language: python\npython:\n  - \"3.11\"\n\nos:\n  - linux\n\ninstall:\n  - pip install cvxpy\n  - pip install .\n# command to run te"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "chars": 3222,
    "preview": "# Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, we as\ncontributors and"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 850,
    "preview": "# Contributing\n\nAny contribution is more than welcome!\n\nWhen contributing to this repository, please first discuss the c"
  },
  {
    "path": "LICENSE",
    "chars": 18026,
    "preview": "GNU GENERAL PUBLIC LICENSE\n                       Version 2, June 1991\n\n Copyright (C) 1989, 1991 Free Software Foundati"
  },
  {
    "path": "NEWS.md",
    "chars": 7816,
    "preview": "# Rampy News\n\nCopyright (c) 2014-2025 Dr. Charles Le Losq et al.\n\nemail: lelosq@ipgp.fr\n\nLicence: see LICENCE.md\n\n# Want"
  },
  {
    "path": "README.md",
    "chars": 1311,
    "preview": "# RamPy\n=======\n\n[![Build Status](https://travis-ci.org/charlesll/rampy.svg?branch=master)](https://travis-ci.org/charle"
  },
  {
    "path": "docs/.nojekyll",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "docs/API.rst",
    "chars": 2024,
    "preview": "rampy API\n=============\n\nSubpackages\n-----------\n\n.. toctree::\n   :maxdepth: 4\n\nSubmodules\n----------\n\nrampy.baseline mo"
  },
  {
    "path": "docs/Makefile",
    "chars": 629,
    "preview": "# Minimal makefile for Sphinx documentation\n#\n\n# You can set these variables from the command line, and also\n# from the "
  },
  {
    "path": "docs/_static/custom.js",
    "chars": 139,
    "preview": "requirejs.config({\n    paths: {\n        base: '/static/base',\n        plotly: 'https://cdn.plot.ly/plotly-2.12.1.min.js?"
  },
  {
    "path": "docs/_static/require.js",
    "chars": 17590,
    "preview": "/** vim: et:ts=4:sw=4:sts=4\n * @license RequireJS 2.3.7 Copyright jQuery Foundation and other contributors.\n * Released "
  },
  {
    "path": "docs/baseline.rst",
    "chars": 704,
    "preview": "Baseline\n========\n\nRampy allows you to fit polynomial, spline, generalized cross-validated spline, logarithms, exponenti"
  },
  {
    "path": "docs/conf.py",
    "chars": 2178,
    "preview": "# Configuration file for the Sphinx documentation builder.\n#\n# This file only contains a selection of the most common op"
  },
  {
    "path": "docs/dac.rst",
    "chars": 409,
    "preview": "Diamond Anvil Cell Utilities\n============================\n\nRampy can be useful if you are performing Diamond Anvil Cell "
  },
  {
    "path": "docs/examples.rst",
    "chars": 532,
    "preview": ".. _RST Notebooks:\n\nExample notebooks\n=================\n\nProcessing\n----------\n\n.. nbgallery::\n    notebooks/Resample_an"
  },
  {
    "path": "docs/firststeps.rst",
    "chars": 2718,
    "preview": ".. _RST First:\n\nFirst Steps\n===========\n\nYou can consult the help of each function/class/method on this website.\n\nQuick "
  },
  {
    "path": "docs/index.rst",
    "chars": 1901,
    "preview": ".. RamPy documentation master file, created by\n   sphinx-quickstart on Fri Oct  8 15:22:27 2021.\n   You can adapt this f"
  },
  {
    "path": "docs/installation.rst",
    "chars": 983,
    "preview": "Installation\n============\n\nGeneral preparation\n-------------------\n\nRampy runs with a traditional Python stack.\n\nIf you "
  },
  {
    "path": "docs/machinelearning.rst",
    "chars": 3229,
    "preview": "Machine learning\n================\n\nRampy offers three classes for performing classification, regression or unsupervised "
  },
  {
    "path": "docs/make.bat",
    "chars": 795,
    "preview": "@ECHO OFF\r\n\r\npushd %~dp0\r\n\r\nREM Command file for Sphinx documentation\r\n\r\nif \"%SPHINXBUILD%\" == \"\" (\r\n\tset SPHINXBUILD=sp"
  },
  {
    "path": "docs/maps.rst",
    "chars": 717,
    "preview": "Maps\n====\n\nRampy offers the possiblity to analyse maps from Raman spectrometers using the ``rampy.maps`` module.\n\nLine a"
  },
  {
    "path": "docs/modules.rst",
    "chars": 52,
    "preview": "rampy\n=====\n\n.. toctree::\n   :maxdepth: 2\n\n   rampy\n"
  },
  {
    "path": "docs/news.rst",
    "chars": 8099,
    "preview": "Rampy News\n==========\n\nCopyright (c) 2014-2025 Dr. Charles Le Losq et al.\n\nemail: lelosq@ipgp.fr\n\nLicence: see LICENCE.m"
  },
  {
    "path": "docs/notebooks/Baseline.ipynb",
    "chars": 5027198,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Example: fit a baseline\\n\",\n    \""
  },
  {
    "path": "docs/notebooks/Baseline_and_Centroid.ipynb",
    "chars": 222199,
    "preview": "{\n \"cells\": [\n  {\n   \"attachments\": {},\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Baseline re"
  },
  {
    "path": "docs/notebooks/ML_Classification.ipynb",
    "chars": 143589,
    "preview": "{\n \"cells\": [\n  {\n   \"attachments\": {},\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Machine lea"
  },
  {
    "path": "docs/notebooks/ML_Exploration.ipynb",
    "chars": 279569,
    "preview": "{\n \"cells\": [\n  {\n   \"attachments\": {},\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Example of "
  },
  {
    "path": "docs/notebooks/ML_Regression.ipynb",
    "chars": 630190,
    "preview": "{\n \"cells\": [\n  {\n   \"attachments\": {},\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# ML regressi"
  },
  {
    "path": "docs/notebooks/Maps.ipynb",
    "chars": 240520,
    "preview": "{\n \"cells\": [\n  {\n   \"attachments\": {},\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Example: Ma"
  },
  {
    "path": "docs/notebooks/Mixing.ipynb",
    "chars": 153197,
    "preview": "{\n \"cells\": [\n  {\n   \"attachments\": {},\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Mixing endm"
  },
  {
    "path": "docs/notebooks/Raman_fitting.ipynb",
    "chars": 764137,
    "preview": "{\n \"cells\": [\n  {\n   \"attachments\": {},\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Peak fittin"
  },
  {
    "path": "docs/notebooks/Resample_and_flip.ipynb",
    "chars": 177947,
    "preview": "{\n \"cells\": [\n  {\n   \"attachments\": {},\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Resample an"
  },
  {
    "path": "docs/notebooks/data/4338-NDC1-(31)_4X4.txt",
    "chars": 4725071,
    "preview": "-2\t-2\t2825.97\t6407.47\n-2\t-2\t2824.6\t6416.63\n-2\t-2\t2823.24\t6418.86\n-2\t-2\t2821.87\t6391.79\n-2\t-2\t2820.51\t6399.52\n-2\t-2\t2819."
  },
  {
    "path": "docs/notebooks/data/LS4.txt",
    "chars": 74251,
    "preview": "TITLE\t\r\nDATA TYPE\tRAMAN SPECTRUM\r\nORIGIN\tJASCO\r\nOWNER\t\r\nDATE\t14/01/10\r\nTIME\t17:38:47\r\nSPECTROMETER/DATA SYSTEM\t\r\nLOCALE\t"
  },
  {
    "path": "docs/notebooks/data/NS4.txt",
    "chars": 73087,
    "preview": "580.4009\t22628.3\r\n580.6010\t22642.1\r\n580.8010\t22652.4\r\n581.0009\t22655.6\r\n581.2009\t22648.1\r\n581.4009\t22627.2\r\n581.6010\t225"
  },
  {
    "path": "docs/peakfitting.rst",
    "chars": 1347,
    "preview": ".. _RST Fitting:\n\nPeak fitting\n=============\n\nRampy will soon offer a dedicated function for peak fitting: ``rampy.fit_p"
  },
  {
    "path": "docs/philosophy.rst",
    "chars": 435,
    "preview": "Philosophy\n============\n\nRamPy is created from a set of functions I use everyday to treat various kind of spectroscopic "
  },
  {
    "path": "docs/plotting.rst",
    "chars": 421,
    "preview": ".. _RST Plotting:\n\nPlotting\n========\n\nStarting from v0.6.0, there is now a function ``rampy.plot_spectrum`` to plot a sp"
  },
  {
    "path": "docs/preprocessing.rst",
    "chars": 2939,
    "preview": ".. _RST Preprocessing:\n\nPreprocessing\n=============\n\nRampy offers handful functions to preprocess your spectra. Do not h"
  },
  {
    "path": "docs/requirements.txt",
    "chars": 131,
    "preview": "sphinx>=5.0.0  # Compatible with furo theme\nnbsphinx\nsphinx_gallery\nsphinx_rtd_theme\nplotly  # Include other dependencie"
  },
  {
    "path": "docs/setup.rst",
    "chars": 103,
    "preview": "setup module\n============\n\n.. automodule:: setup\n   :members:\n   :undoc-members:\n   :show-inheritance:\n"
  },
  {
    "path": "docs/signalparams.rst",
    "chars": 378,
    "preview": "Signal parameters\n========================\n\nI will enrich rampy with new functions to calculate the characteristics/para"
  },
  {
    "path": "docs/smoothing.rst",
    "chars": 1289,
    "preview": "Smoothing and filtering\n========================\n\nFunctions are provided to smooth and filter spectra. Smoothing is usef"
  },
  {
    "path": "docs/utils.rst",
    "chars": 206,
    "preview": "Utilities\n===========\n\nSome functions are included in rampy and have a minor role. They are listed below for reference.\n"
  },
  {
    "path": "environment.yml",
    "chars": 151,
    "preview": "name: rampy\ndependencies:\n  - numpy\n  - scipy\n  - matplotlib\n  - pandas\n  - pip\n  - pip:\n    - cvxpy\n    - rampy\n    - l"
  },
  {
    "path": "examples/Iron_AmMin_paper/.gitignore",
    "chars": 26,
    "preview": "out_table1.csv\nTableS1.csv"
  },
  {
    "path": "examples/Iron_AmMin_paper/HOWTO.txt",
    "chars": 1420,
    "preview": "# Supplementary Code \n\nDetermination of the oxidation state of iron in Mid-Ocean Ridge basalt glasses by Raman spectrosc"
  },
  {
    "path": "examples/Iron_AmMin_paper/Iron_MORB_code.ipynb",
    "chars": 5609446,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"(c) Copyright 2019 Le Losq et al.\\n"
  },
  {
    "path": "examples/Iron_AmMin_paper/iron.py",
    "chars": 9697,
    "preview": "# coding: utf-8\n# (c) Copyright Le Losq et al. 2018\n# Supplementary material of Le Losq, Berry, Kendrick, Neuville, O'Ne"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/BD1469.txt",
    "chars": 44086,
    "preview": "25.061272\t920.29248\r\n25.75667\t912.52185\r\n26.452066\t905.0451\r\n27.147465\t927.7243\r\n27.842863\t920.3465\r\n28.538261\t929.2077\r"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/BD1470.txt",
    "chars": 44103,
    "preview": "25.061272\t752.67511\r\n25.75667\t788.47437\r\n26.452066\t788.16327\r\n27.147465\t798.93677\r\n27.842863\t782.1701\r\n28.538261\t777.484"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/BD1471.txt",
    "chars": 44106,
    "preview": "25.061272\t973.22412\r\n25.75667\t980.84631\r\n26.452066\t981.64453\r\n27.147465\t1019.0714\r\n27.842863\t951.86487\r\n28.538261\t945.11"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/BD1472.txt",
    "chars": 44081,
    "preview": "25.061272\t1072.812\r\n25.75667\t1074.1698\r\n26.452066\t1062.9562\r\n27.147465\t1077.2035\r\n27.842863\t1093.9214\r\n28.538261\t1093.17"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/BD1473.txt",
    "chars": 44123,
    "preview": "25.061272\t3144.6567\r\n25.756342\t3219.2175\r\n26.451412\t3228.4211\r\n27.146482\t3227.9644\r\n27.841553\t3232.0503\r\n28.536623\t3248."
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/BD1474.txt",
    "chars": 44085,
    "preview": "25.061272\t683.26025\r\n25.75667\t717.17303\r\n26.452066\t698.42865\r\n27.147465\t714.8197\r\n27.842863\t718.26422\r\n28.538261\t707.297"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/BD1475.txt",
    "chars": 44085,
    "preview": "25.061272\t731.41113\r\n25.75667\t724.62213\r\n26.452066\t742.88971\r\n27.147465\t745.22083\r\n27.842863\t765.95642\r\n28.538261\t785.79"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/BD1476.txt",
    "chars": 44091,
    "preview": "25.061272\t743.57422\r\n25.75667\t735.63025\r\n26.452066\t772.60797\r\n27.147465\t789.06329\r\n27.842863\t789.88849\r\n28.538261\t796.80"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/BD1477.txt",
    "chars": 44086,
    "preview": "25.061272\t512.35498\r\n25.75667\t501.14209\r\n26.452066\t526.26019\r\n27.147465\t515.57098\r\n27.842863\t517.63232\r\n28.538261\t512.48"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/BD1478.txt",
    "chars": 44067,
    "preview": "25.061272\t981.07617\r\n25.75667\t999.56384\r\n26.452066\t994.66144\r\n27.147465\t1004.5745\r\n27.842863\t1001.5822\r\n28.538261\t999.73"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG175_.txt",
    "chars": 25281,
    "preview": "#Wave\t\t#Intensity\r\n1319.062500\t5933.889648\r\n1317.935547\t6217.722656\r\n1316.808594\t6023.718750\r\n1315.679688\t6069.182129\r\n1"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG175_1.txt",
    "chars": 24631,
    "preview": "#Wave\t\t#Intensity\r\n1319.062500\t4317.370117\r\n1317.935547\t4421.590332\r\n1316.808594\t4505.041016\r\n1315.679688\t4380.096191\r\n1"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG175_2.txt",
    "chars": 25211,
    "preview": "#Wave\t\t#Intensity\r\n1319.062500\t6135.677246\r\n1317.935547\t6027.022461\r\n1316.808594\t6119.051758\r\n1315.679688\t6102.431641\r\n1"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG175_3.txt",
    "chars": 24837,
    "preview": "#Wave\t\t#Intensity\r\n1319.062500\t5335.178711\r\n1317.935547\t5344.048340\r\n1316.808594\t5382.991699\r\n1315.679688\t5503.937012\r\n1"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG175_4.txt",
    "chars": 24833,
    "preview": "#Wave\t\t#Intensity\r\n1319.062500\t5206.566895\r\n1317.935547\t5381.745117\r\n1316.808594\t5243.317871\r\n1315.679688\t5135.973145\r\n1"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG183_.txt",
    "chars": 24712,
    "preview": "#Wave\t\t#Intensity\r\n1319.062500\t4525.810547\r\n1317.935547\t4452.634766\r\n1316.808594\t4560.467285\r\n1315.679688\t4459.895508\r\n1"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG183_1.txt",
    "chars": 25319,
    "preview": "#Wave\t\t#Intensity\r\n1319.062500\t5993.760742\r\n1317.935547\t6131.242188\r\n1316.808594\t6139.004883\r\n1315.679688\t5980.516113\r\n1"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG183_2.txt",
    "chars": 25314,
    "preview": "#Wave\t\t#Intensity\r\n1319.062500\t5962.716309\r\n1317.935547\t6058.066406\r\n1316.808594\t6232.121094\r\n1315.679688\t6288.630371\r\n1"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG183_3.txt",
    "chars": 25252,
    "preview": "#Wave\t\t#Intensity\r\n1319.062500\t6080.241211\r\n1317.935547\t6009.282715\r\n1316.808594\t5959.424316\r\n1315.679688\t5909.583496\r\n1"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG183_4.txt",
    "chars": 25335,
    "preview": "#Wave\t\t#Intensity\r\n1319.062500\t6062.501465\r\n1317.935547\t6122.372559\r\n1316.808594\t6245.423340\r\n1315.679688\t6168.931152\r\n1"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG186_0__X_19996.5__Y_-20032__Time_0.txt",
    "chars": 25621,
    "preview": "1318.902344\t13701.278320\r\n1317.775391\t13896.409180\r\n1316.646484\t13794.138672\r\n1315.519531\t13871.448242\r\n1314.390625\t1373"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG186_2__X_20013__Y_-20055__Time_288.txt",
    "chars": 25448,
    "preview": "1318.902344\t9049.185547\r\n1317.775391\t8933.880859\r\n1316.646484\t9171.705078\r\n1315.519531\t8850.862305\r\n1314.390625\t9059.804"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG186_3__X_20030.8__Y_-20026.4__Time_433.txt",
    "chars": 25448,
    "preview": "1318.902344\t9060.272461\r\n1317.775391\t9040.315430\r\n1316.646484\t9076.375000\r\n1315.519531\t8999.374023\r\n1314.390625\t9015.480"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG186_4__X_20028.5__Y_-20016.4__Time_577.txt",
    "chars": 25537,
    "preview": "1318.902344\t10448.361328\r\n1317.775391\t10694.491211\r\n1316.646484\t10320.108398\r\n1315.519531\t10271.699219\r\n1314.390625\t1038"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG186_5__X_19960.5__Y_-20013.9__Time_722.txt",
    "chars": 25441,
    "preview": "1318.902344\t8237.619141\r\n1317.775391\t8308.575195\r\n1316.646484\t8422.361328\r\n1315.519531\t8553.837891\r\n1314.390625\t8463.648"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG187_0__X_24099.5__Y_-26618.8__Time_0.txt",
    "chars": 25440,
    "preview": "1318.892578\t8308.563477\r\n1317.763672\t8596.824219\r\n1316.636719\t8433.433594\r\n1315.509766\t8564.908203\r\n1314.380859\t8430.392"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG187_1__X_24133.8__Y_-26769.8__Time_144.txt",
    "chars": 25428,
    "preview": "1318.892578\t8064.649902\r\n1317.763672\t8106.780762\r\n1316.636719\t8036.592285\r\n1315.509766\t8376.498047\r\n1314.380859\t8219.854"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG187_2__X_23341.8__Y_-27123.3__Time_288.txt",
    "chars": 25448,
    "preview": "1318.892578\t8616.780273\r\n1317.763672\t8816.345703\r\n1316.636719\t8734.944336\r\n1315.509766\t8766.618164\r\n1314.380859\t8625.416"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG187_3__X_23212.5__Y_-27027.5__Time_433.txt",
    "chars": 25447,
    "preview": "1318.892578\t8556.911133\r\n1317.763672\t8567.998047\r\n1316.636719\t8564.236328\r\n1315.509766\t8624.755859\r\n1314.380859\t8554.499"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG187_4__X_23396__Y_-27469.3__Time_577.txt",
    "chars": 25424,
    "preview": "1318.892578\t7873.954590\r\n1317.763672\t7975.954590\r\n1316.636719\t7768.336426\r\n1315.509766\t7984.161621\r\n1314.380859\t7936.181"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG195_0__X_12141.4__Y_-19545.2__Time_0.txt",
    "chars": 25418,
    "preview": "1319.062500\t6851.912598\r\n1317.935547\t7115.789063\r\n1316.808594\t6974.832031\r\n1315.679688\t6949.191406\r\n1314.552734\t6874.802"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG195_1__X_12123.9__Y_-19557.5__Time_144.txt",
    "chars": 25420,
    "preview": "1319.062500\t7137.963379\r\n1317.935547\t7016.003906\r\n1316.808594\t7045.777344\r\n1315.679688\t7117.656738\r\n1314.552734\t7107.508"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG195_2__X_12157.9__Y_-19558.1__Time_288.txt",
    "chars": 25420,
    "preview": "1319.062500\t7246.618652\r\n1317.935547\t7255.488281\r\n1316.808594\t6926.057129\r\n1315.679688\t7204.105957\r\n1314.552734\t7233.834"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG195_3__X_12155.3__Y_-19533__Time_433.txt",
    "chars": 25421,
    "preview": "1319.062500\t7093.614746\r\n1317.935547\t7164.572754\r\n1316.808594\t7138.893555\r\n1315.679688\t7037.857422\r\n1314.552734\t7027.723"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG195_4__X_12127.4__Y_-19533.3__Time_578.txt",
    "chars": 25420,
    "preview": "1319.062500\t7386.317871\r\n1317.935547\t7013.786621\r\n1316.808594\t7249.746094\r\n1315.679688\t7113.223145\r\n1314.552734\t7003.344"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG202_0__X_7648.44__Y_-27430__Time_0.txt",
    "chars": 25161,
    "preview": "1319.062500\t5397.267090\r\n1317.935547\t5397.267090\r\n1316.808594\t5382.991699\r\n1315.679688\t5599.252930\r\n1314.552734\t5511.809"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG202_2__X_7634.03__Y_-27444.3__Time_288.txt",
    "chars": 25160,
    "preview": "1319.062500\t5403.919434\r\n1317.935547\t5266.437988\r\n1316.808594\t5418.464355\r\n1315.679688\t5472.903809\r\n1314.552734\t5197.102"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG202_3__X_7637.69__Y_-27420.2__Time_433.txt",
    "chars": 25170,
    "preview": "1319.062500\t5561.358398\r\n1317.935547\t5780.885742\r\n1316.808594\t5609.130859\r\n1315.679688\t5515.020020\r\n1314.552734\t5496.295"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG202_4__X_7660.95__Y_-27420.3__Time_577.txt",
    "chars": 25164,
    "preview": "1319.062500\t5485.965332\r\n1317.935547\t5621.229492\r\n1316.808594\t5702.246582\r\n1315.679688\t5603.686035\r\n1314.552734\t5576.080"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG202_oct_1_0__Time_0.txt",
    "chars": 25067,
    "preview": "1318.914063\t4545.665527\r\n1317.787109\t4876.057617\r\n1316.658203\t4717.771484\r\n1315.531250\t4703.621582\r\n1314.402344\t4764.826"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG203_0__X_7115.86__Y_-23841.7__Time_0.txt",
    "chars": 25173,
    "preview": "1319.062500\t5738.754395\r\n1317.935547\t5581.315430\r\n1316.808594\t5569.223633\r\n1315.679688\t5592.602539\r\n1314.552734\t5549.485"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG203_1__X_7125.78__Y_-23853.3__Time_144.txt",
    "chars": 25187,
    "preview": "1319.062500\t5871.800781\r\n1317.935547\t5953.846680\r\n1316.808594\t5912.866211\r\n1315.679688\t5911.800293\r\n1314.552734\t5784.407"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG203_2__X_7104.88__Y_-23853.2__Time_289.txt",
    "chars": 25186,
    "preview": "1319.062500\t5674.448242\r\n1317.935547\t5774.233398\r\n1316.808594\t5793.145508\r\n1315.679688\t5674.618652\r\n1314.552734\t5755.596"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG203_3__X_7106.54__Y_-23831.1__Time_433.txt",
    "chars": 25183,
    "preview": "1319.062500\t5854.061523\r\n1317.935547\t5497.052246\r\n1316.808594\t5695.595703\r\n1315.679688\t5690.135254\r\n1314.552734\t5715.704"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG203_4__X_7128.14__Y_-23832.2__Time_578.txt",
    "chars": 25172,
    "preview": "1319.062500\t5554.706055\r\n1317.935547\t5565.793457\r\n1316.808594\t5529.316895\r\n1315.679688\t5710.084961\r\n1314.552734\t5502.944"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG285_.txt",
    "chars": 25177,
    "preview": "#Wave\t\t#Intensity\r\n1319.062500\t6031.457031\r\n1317.935547\t6126.807617\r\n1316.808594\t5877.393555\r\n1315.679688\t5889.633789\r\n1"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG285_1.txt",
    "chars": 25186,
    "preview": "#Wave\t\t#Intensity\r\n1319.062500\t6135.677246\r\n1317.935547\t6277.593750\r\n1316.808594\t6059.191406\r\n1315.679688\t6202.181152\r\n1"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG285_2.txt",
    "chars": 24686,
    "preview": "#Wave\t\t#Intensity\r\n1319.062500\t5470.442871\r\n1317.935547\t5603.489746\r\n1316.808594\t5708.897949\r\n1315.679688\t5557.136230\r\n1"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG285_3.txt",
    "chars": 25173,
    "preview": "#Wave\t\t#Intensity\r\n1319.062500\t6612.428711\r\n1317.935547\t6619.081055\r\n1316.808594\t6691.049805\r\n1315.679688\t6492.562012\r\n1"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG285_4.txt",
    "chars": 25140,
    "preview": "#Wave\t\t#Intensity\r\n1319.062500\t5725.449707\r\n1317.935547\t5809.712402\r\n1316.808594\t5895.129883\r\n1315.679688\t5774.367676\r\n1"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG290_.txt",
    "chars": 24632,
    "preview": "#Wave\t\t#Intensity\r\n1319.062500\t3960.361328\r\n1317.935547\t4046.841797\r\n1316.808594\t3924.174316\r\n1315.679688\t3996.616211\r\n1"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG290_1.txt",
    "chars": 24627,
    "preview": "#Wave\t\t#Intensity\r\n1319.062500\t3842.836426\r\n1317.935547\t3962.578613\r\n1316.808594\t4041.677979\r\n1315.679688\t4029.865967\r\n1"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG290_2.txt",
    "chars": 24625,
    "preview": "#Wave\t\t#Intensity\r\n1319.062500\t3851.706299\r\n1317.935547\t3831.749268\r\n1316.808594\t3882.050537\r\n1315.679688\t3845.884277\r\n1"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG290_3.txt",
    "chars": 24625,
    "preview": "#Wave\t\t#Intensity\r\n1319.062500\t3858.358643\r\n1317.935547\t3853.923828\r\n1316.808594\t3815.539063\r\n1315.679688\t3805.984619\r\n1"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG290_4.txt",
    "chars": 24626,
    "preview": "#Wave\t\t#Intensity\r\n1319.062500\t4053.494141\r\n1317.935547\t4053.494141\r\n1316.808594\t3788.934570\r\n1315.679688\t4085.282227\r\n1"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG3073_0__X_24960.6__Y_-31533.1__Time_0.txt",
    "chars": 25215,
    "preview": "1318.902344\t6339.529785\r\n1317.775391\t6499.182129\r\n1316.646484\t6415.981445\r\n1315.519531\t6494.622070\r\n1314.390625\t6291.777"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG3073_1__X_24992.5__Y_-31555.7__Time_144.txt",
    "chars": 25192,
    "preview": "1318.902344\t6514.703613\r\n1317.775391\t6641.095215\r\n1316.646484\t6216.452148\r\n1315.519531\t6270.746094\r\n1314.390625\t6440.262"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG3073_2__X_25001__Y_-31550.5__Time_288.txt",
    "chars": 25196,
    "preview": "1318.902344\t6337.312500\r\n1317.775391\t6403.833984\r\n1316.646484\t6274.093750\r\n1315.519531\t6381.575684\r\n1314.390625\t6342.749"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG3073_3__X_24857.7__Y_-31338__Time_433.txt",
    "chars": 25234,
    "preview": "1318.902344\t6514.703613\r\n1317.775391\t6681.008301\r\n1316.646484\t6677.586914\r\n1315.519531\t6669.732910\r\n1314.390625\t6435.830"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG3073_4__X_24824.2__Y_-31298.1__Time_577.txt",
    "chars": 25237,
    "preview": "1318.902344\t6876.139160\r\n1317.775391\t6749.747559\r\n1316.646484\t6759.615723\r\n1315.519531\t6760.613281\r\n1314.390625\t6588.747"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG3079_1_0__X_11675.1__Y_-22752.8__Time_0.txt",
    "chars": 24885,
    "preview": "1318.902344\t5166.528320\r\n1317.775391\t5210.875977\r\n1316.646484\t5054.747070\r\n1315.519531\t5324.260254\r\n1314.390625\t5312.219"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG3079_1_1__X_11646.1__Y_-22772.1__Time_144.txt",
    "chars": 24863,
    "preview": "1318.902344\t5423.746094\r\n1317.775391\t5374.963379\r\n1316.646484\t5380.645020\r\n1315.519531\t5701.081055\r\n1314.390625\t5411.947"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG3079_1_2__X_11683.6__Y_-22746.7__Time_288.txt",
    "chars": 24843,
    "preview": "1318.902344\t5275.180664\r\n1317.775391\t5290.702148\r\n1316.646484\t5012.624023\r\n1315.519531\t5140.282715\r\n1314.390625\t5210.273"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG3079_2__X_12172.8__Y_-22892.5__Time_288.txt",
    "chars": 24958,
    "preview": "1318.902344\t5838.398438\r\n1317.775391\t5825.094238\r\n1316.646484\t5839.562988\r\n1315.519531\t5975.938965\r\n1314.390625\t5954.915"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG3079_3__X_12190.1__Y_-22882.1__Time_433.txt",
    "chars": 24861,
    "preview": "1318.902344\t5598.919922\r\n1317.775391\t5494.702637\r\n1316.646484\t5402.814941\r\n1315.519531\t5514.887207\r\n1314.390625\t5640.215"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG322_.txt",
    "chars": 25202,
    "preview": "#Wave\t\t#Intensity\r\n1319.062500\t5499.270020\r\n1317.935547\t5568.010742\r\n1316.808594\t5542.619141\r\n1315.679688\t5433.003906\r\n1"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG322_1_0__X_16100.5__Y_-19847__Time_0.txt",
    "chars": 25403,
    "preview": "1319.062500\t6521.513184\r\n1317.935547\t6443.902344\r\n1316.808594\t6582.414551\r\n1315.679688\t6439.362305\r\n1314.552734\t6356.200"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG322_1_1__X_16116.9__Y_-19849__Time_144.txt",
    "chars": 25407,
    "preview": "1319.062500\t6381.813965\r\n1317.935547\t6497.121094\r\n1316.808594\t6549.158691\r\n1315.679688\t6576.794434\r\n1314.552734\t6236.522"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG322_1_2__X_16121.1__Y_-19831.4__Time_288.txt",
    "chars": 25406,
    "preview": "1319.062500\t6335.247559\r\n1317.935547\t6466.077148\r\n1316.808594\t6362.926758\r\n1315.679688\t6295.280273\r\n1314.552734\t6320.740"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG322_1_3__X_16117.9__Y_-19809.1__Time_433.txt",
    "chars": 25405,
    "preview": "1319.062500\t6585.819336\r\n1317.935547\t6490.468750\r\n1316.808594\t6411.702148\r\n1315.679688\t6720.876465\r\n1314.552734\t6611.068"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG334__0__X_20679.2__Y_-18282.5__Time_0.txt",
    "chars": 25423,
    "preview": "1319.062500\t7625.801758\r\n1317.935547\t7716.717285\r\n1316.808594\t7921.511230\r\n1315.679688\t7942.249512\r\n1314.552734\t7759.084"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG334__1__X_20664.6__Y_-18296.1__Time_144.txt",
    "chars": 25425,
    "preview": "1319.062500\t7916.287598\r\n1317.935547\t7880.808594\r\n1316.808594\t8023.495605\r\n1315.679688\t7844.717285\r\n1314.552734\t7951.898"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG334__2__X_20686.6__Y_-18297.2__Time_288.txt",
    "chars": 25418,
    "preview": "1319.062500\t7441.753906\r\n1317.935547\t7738.891602\r\n1316.808594\t7431.543945\r\n1315.679688\t7842.500488\r\n1314.552734\t7535.244"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG334__3__X_20688.3__Y_-18269.7__Time_433.txt",
    "chars": 25423,
    "preview": "1319.062500\t7781.023438\r\n1317.935547\t7836.459473\r\n1316.808594\t7741.930664\r\n1315.679688\t7915.649902\r\n1314.552734\t7920.871"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG334__4__X_20668.5__Y_-18272.8__Time_577.txt",
    "chars": 25452,
    "preview": "1319.062500\t9457.414063\r\n1317.935547\t9592.677734\r\n1316.808594\t9373.677734\r\n1315.679688\t9606.952148\r\n1314.552734\t9461.164"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG3450_0__X_14838.7__Y_-20142.8__Time_0.txt",
    "chars": 25427,
    "preview": "1318.902344\t8344.053711\r\n1317.775391\t8619.010742\r\n1316.646484\t8258.303711\r\n1315.519531\t8336.612305\r\n1314.390625\t8572.241"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG3450_1__X_14855.5__Y_-20151.9__Time_144.txt",
    "chars": 25430,
    "preview": "1318.902344\t8752.054688\r\n1317.775391\t8758.707031\r\n1316.646484\t8575.333984\r\n1315.519531\t8884.111328\r\n1314.390625\t8749.537"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG3450_2__X_14824.5__Y_-20153.1__Time_288.txt",
    "chars": 25431,
    "preview": "1318.902344\t8605.706055\r\n1317.775391\t8816.358398\r\n1316.646484\t8402.408203\r\n1315.519531\t8702.350586\r\n1314.390625\t8820.455"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG3450_3__X_14828.2__Y_-20132.5__Time_433.txt",
    "chars": 25427,
    "preview": "1318.902344\t8352.923828\r\n1317.775391\t8570.228516\r\n1316.646484\t8519.909180\r\n1315.519531\t8511.722656\r\n1314.390625\t8499.107"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG3450_4__X_14854.7__Y_-20133.6__Time_577.txt",
    "chars": 25427,
    "preview": "1318.902344\t8454.923828\r\n1317.775391\t8412.792969\r\n1316.646484\t8548.729492\r\n1315.519531\t8706.783203\r\n1314.390625\t8574.458"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG3831_0__X_22339.7__Y_-19634.3__Time_0.txt",
    "chars": 25381,
    "preview": "1318.902344\t6787.443359\r\n1317.775391\t6774.139160\r\n1316.646484\t6757.398438\r\n1315.519531\t6858.143555\r\n1314.390625\t6810.366"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG3831_1__X_22347.2__Y_-19640.8__Time_144.txt",
    "chars": 25251,
    "preview": "1318.902344\t6279.660156\r\n1317.775391\t6352.833984\r\n1316.646484\t6433.717285\r\n1315.519531\t6417.041016\r\n1314.390625\t6336.101"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG3831_2__X_22353.7__Y_-19646.9__Time_289.txt",
    "chars": 25226,
    "preview": "1318.902344\t6146.616211\r\n1317.775391\t6135.529297\r\n1316.646484\t6296.263672\r\n1315.519531\t6159.916016\r\n1314.390625\t6072.374"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG3831_3__X_22353.7__Y_-19624.4__Time_433.txt",
    "chars": 25343,
    "preview": "1318.902344\t6441.529785\r\n1317.775391\t6683.225586\r\n1316.646484\t6469.189453\r\n1315.519531\t6612.101563\r\n1314.390625\t6568.801"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG3831_4__X_22307.7__Y_-19611.5__Time_577.txt",
    "chars": 25397,
    "preview": "1318.902344\t6898.312988\r\n1317.775391\t7153.313477\r\n1316.646484\t7089.947754\r\n1315.519531\t7126.351563\r\n1314.390625\t6983.229"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG4088_0__X_16619.1__Y_-23684.9__Time_0.txt",
    "chars": 25450,
    "preview": "1318.902344\t9865.186523\r\n1317.775391\t10089.143555\r\n1316.646484\t10065.154297\r\n1315.519531\t10096.587891\r\n1314.390625\t10077"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG4088_1__X_16607.2__Y_-23693.9__Time_144.txt",
    "chars": 25371,
    "preview": "1318.902344\t8647.836914\r\n1317.775391\t8953.836914\r\n1316.646484\t9056.421875\r\n1315.519531\t8839.779297\r\n1314.390625\t8840.401"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG4088_2__X_16637.3__Y_-23693.8__Time_288.txt",
    "chars": 25452,
    "preview": "1318.902344\t10206.665039\r\n1317.775391\t9936.142578\r\n1316.646484\t9963.171875\r\n1315.519531\t10152.002930\r\n1314.390625\t9806.6"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG4088_3__X_16638.9__Y_-23680.7__Time_433.txt",
    "chars": 25467,
    "preview": "1318.902344\t10142.360352\r\n1317.775391\t10299.795898\r\n1316.646484\t10102.842773\r\n1315.519531\t10247.316406\r\n1314.390625\t1003"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG4088_4__X_16601.1__Y_-23676__Time_577.txt",
    "chars": 25390,
    "preview": "1318.902344\t8969.359375\r\n1317.775391\t8938.315430\r\n1316.646484\t8965.524414\r\n1315.519531\t8988.291016\r\n1314.390625\t8882.508"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG4522_.txt",
    "chars": 24891,
    "preview": "#Wave\t\t#Intensity\r\n1319.062500\t4955.995117\r\n1317.935547\t5355.135742\r\n1316.808594\t5360.821289\r\n1315.679688\t5195.822754\r\n1"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG4522_1.txt",
    "chars": 24914,
    "preview": "#Wave\t\t#Intensity\r\n1319.062500\t5587.967773\r\n1317.935547\t5913.932617\r\n1316.808594\t5824.184082\r\n1315.679688\t5634.719238\r\n1"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG4522_2.txt",
    "chars": 24919,
    "preview": "#Wave\t\t#Intensity\r\n1319.062500\t5521.444336\r\n1317.935547\t5610.142090\r\n1316.808594\t5640.169434\r\n1315.679688\t5632.502441\r\n1"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG4522_3.txt",
    "chars": 24950,
    "preview": "#Wave\t\t#Intensity\r\n1319.062500\t5266.437988\r\n1317.935547\t5434.963867\r\n1316.808594\t5445.069336\r\n1315.679688\t5280.055176\r\n1"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG4522_4.txt",
    "chars": 24900,
    "preview": "#Wave\t\t#Intensity\r\n1319.062500\t5355.135742\r\n1317.935547\t5250.915527\r\n1316.808594\t5256.620117\r\n1315.679688\t5497.287109\r\n1"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG4700_0__X_18217.1__Y_-19810.8__Time_0.txt",
    "chars": 25438,
    "preview": "1318.902344\t8905.054688\r\n1317.775391\t9175.577148\r\n1316.646484\t8961.090820\r\n1315.519531\t8977.208008\r\n1314.390625\t8911.319"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG4700_1__X_18227.6__Y_-19821.2__Time_144.txt",
    "chars": 25437,
    "preview": "1318.902344\t8754.271484\r\n1317.775391\t8984.880859\r\n1316.646484\t8761.561523\r\n1315.519531\t8892.977539\r\n1314.390625\t8731.807"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG4700_2__X_18192.8__Y_-19824__Time_288.txt",
    "chars": 25453,
    "preview": "1318.902344\t9627.924805\r\n1317.775391\t9780.925781\r\n1316.646484\t9752.557617\r\n1315.519531\t9808.430664\r\n1314.390625\t9496.394"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG4700_3__X_18200.5__Y_-19800.4__Time_433.txt",
    "chars": 25444,
    "preview": "1318.902344\t9297.533203\r\n1317.775391\t9197.750977\r\n1316.646484\t9131.799805\r\n1315.519531\t9389.494141\r\n1314.390625\t9303.585"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG4700_4__X_18243.3__Y_-19813.8__Time_577.txt",
    "chars": 25438,
    "preview": "1318.902344\t8982.663086\r\n1317.775391\t9007.054688\r\n1316.646484\t8865.759766\r\n1315.519531\t8950.608398\r\n1314.390625\t8999.966"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG4701_0__X_25688.9__Y_-19810.7__Time_0.txt",
    "chars": 25289,
    "preview": "1318.902344\t7567.965820\r\n1317.775391\t7698.792480\r\n1316.646484\t7817.122070\r\n1315.519531\t7817.928711\r\n1314.390625\t7612.629"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG4701_1__X_25704.9__Y_-19815.2__Time_144.txt",
    "chars": 25341,
    "preview": "1318.902344\t8443.836914\r\n1317.775391\t8339.619141\r\n1316.646484\t8364.719727\r\n1315.519531\t8341.044922\r\n1314.390625\t8355.054"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG4701_2__X_25683.3__Y_-19817.4__Time_288.txt",
    "chars": 25311,
    "preview": "1318.902344\t8104.575195\r\n1317.775391\t8175.532227\r\n1316.646484\t8269.388672\r\n1315.519531\t8010.772461\r\n1314.390625\t7916.248"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG4701_3__X_25682.4__Y_-19803__Time_433.txt",
    "chars": 25305,
    "preview": "1318.902344\t8109.010254\r\n1317.775391\t7898.357910\r\n1316.646484\t7912.452637\r\n1315.519531\t7962.007813\r\n1314.390625\t7885.221"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG4701_4__X_25702.6__Y_-19801.7__Time_577.txt",
    "chars": 25297,
    "preview": "1318.902344\t7913.879395\r\n1317.775391\t7816.313965\r\n1316.646484\t7777.215820\r\n1315.519531\t7915.458984\r\n1314.390625\t7878.572"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG4709_0__X_21085.2__Y_-21479.9__Time_0.txt",
    "chars": 25161,
    "preview": "1318.902344\t6086.746582\r\n1317.775391\t6270.790527\r\n1316.646484\t5903.855957\r\n1315.519531\t6051.303223\r\n1314.390625\t6143.291"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG4709_1__X_21089.9__Y_-21483.4__Time_144.txt",
    "chars": 25147,
    "preview": "1318.902344\t5656.572266\r\n1317.775391\t6066.790039\r\n1316.646484\t5817.393066\r\n1315.519531\t5962.639160\r\n1314.390625\t5722.215"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG4709_2__X_21078.7__Y_-21485__Time_288.txt",
    "chars": 25157,
    "preview": "1318.902344\t6142.181641\r\n1317.775391\t6177.660156\r\n1316.646484\t6101.168457\r\n1315.519531\t6350.543457\r\n1314.390625\t6309.506"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG4709_3__X_21076.9__Y_-21474.6__Time_433.txt",
    "chars": 25147,
    "preview": "1318.902344\t6044.616211\r\n1317.775391\t5836.181152\r\n1316.646484\t6043.526367\r\n1315.519531\t6004.754395\r\n1314.390625\t5977.077"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG4709_4__X_21091.3__Y_-21472.8__Time_577.txt",
    "chars": 25138,
    "preview": "1318.902344\t6153.268555\r\n1317.775391\t5907.137695\r\n1316.646484\t5735.364258\r\n1315.519531\t6151.049805\r\n1314.390625\t6036.914"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG4971_.txt",
    "chars": 25072,
    "preview": "#Wave\t\t#Intensity\r\n1319.062500\t5239.828613\r\n1317.935547\t5297.481934\r\n1316.808594\t5252.186035\r\n1315.679688\t5350.988281\r\n1"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG4971_1.txt",
    "chars": 24938,
    "preview": "#Wave\t\t#Intensity\r\n1319.062500\t4616.725586\r\n1317.935547\t4490.331055\r\n1316.808594\t4365.366699\r\n1315.679688\t4428.862793\r\n1"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG4971_2.txt",
    "chars": 25054,
    "preview": "#Wave\t\t#Intensity\r\n1319.062500\t5335.178711\r\n1317.935547\t5419.441895\r\n1316.808594\t5145.767578\r\n1315.679688\t5304.438477\r\n1"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG4971_3.txt",
    "chars": 25129,
    "preview": "#Wave\t\t#Intensity\r\n1319.062500\t5417.224121\r\n1317.935547\t5406.137207\r\n1316.808594\t5320.914551\r\n1315.679688\t5477.336914\r\n1"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG4971_4.txt",
    "chars": 25116,
    "preview": "#Wave\t\t#Intensity\r\n1319.062500\t5120.086426\r\n1317.935547\t5310.786621\r\n1316.808594\t5214.496094\r\n1315.679688\t5306.655273\r\n1"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG4974_.txt",
    "chars": 24903,
    "preview": "#Wave\t\t#Intensity\r\n1319.062500\t5370.657715\r\n1317.935547\t5297.481934\r\n1316.808594\t5473.890625\r\n1315.679688\t5435.220703\r\n1"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG4974_1.txt",
    "chars": 24896,
    "preview": "#Wave\t\t#Intensity\r\n1319.062500\t5244.263184\r\n1317.935547\t5308.569336\r\n1316.808594\t5363.038574\r\n1315.679688\t5277.838867\r\n1"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG4974_2.txt",
    "chars": 24901,
    "preview": "#Wave\t\t#Intensity\r\n1319.062500\t4938.255371\r\n1317.935547\t4927.168457\r\n1316.808594\t5070.388184\r\n1315.679688\t5135.973145\r\n1"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG4974_3.txt",
    "chars": 24871,
    "preview": "#Wave\t\t#Intensity\r\n1319.062500\t4638.900391\r\n1317.935547\t5049.127930\r\n1316.808594\t4999.442383\r\n1315.679688\t4858.892090\r\n1"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG4974_4.txt",
    "chars": 24839,
    "preview": "#Wave\t\t#Intensity\r\n1319.062500\t4277.456055\r\n1317.935547\t4315.152832\r\n1316.808594\t4161.398438\r\n1315.679688\t4167.298340\r\n1"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG5374_0__X_18181.5__Y_-18038.6__Time_0.txt",
    "chars": 25412,
    "preview": "1318.892578\t7088.998047\r\n1317.763672\t7268.606934\r\n1316.636719\t7114.323730\r\n1315.509766\t7328.050293\r\n1314.380859\t7109.542"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG5374_1__X_18194.5__Y_-18046.3__Time_144.txt",
    "chars": 25411,
    "preview": "1318.892578\t7064.606934\r\n1317.763672\t7202.084961\r\n1316.636719\t7176.399414\r\n1315.509766\t7135.207031\r\n1314.380859\t7040.840"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG5374_2__X_18171__Y_-18046.7__Time_289.txt",
    "chars": 25414,
    "preview": "1318.892578\t7319.606934\r\n1317.763672\t7250.867676\r\n1316.636719\t7280.598145\r\n1315.509766\t7418.930664\r\n1314.380859\t7269.107"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG5374_3__X_18171.4__Y_-18026.8__Time_433.txt",
    "chars": 25411,
    "preview": "1318.892578\t7077.911133\r\n1317.763672\t6927.128906\r\n1316.636719\t7307.202148\r\n1315.509766\t7099.741699\r\n1314.380859\t7284.621"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG5374_4__X_18196__Y_-18028.4__Time_578.txt",
    "chars": 25411,
    "preview": "1318.892578\t7157.737305\r\n1317.763672\t7195.433105\r\n1316.636719\t7282.815430\r\n1315.509766\t7121.907715\r\n1314.380859\t7315.647"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG5697_.txt",
    "chars": 25045,
    "preview": "#Wave\t\t#Intensity\r\n1319.062500\t5197.696777\r\n1317.935547\t5395.049805\r\n1316.808594\t5203.411133\r\n1315.679688\t5164.789551\r\n1"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG5697_1.txt",
    "chars": 25054,
    "preview": "#Wave\t\t#Intensity\r\n1319.062500\t5415.006836\r\n1317.935547\t5148.913086\r\n1316.808594\t5205.627930\r\n1315.679688\t5186.956055\r\n1"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG5697_2.txt",
    "chars": 25067,
    "preview": "#Wave\t\t#Intensity\r\n1319.062500\t5273.090332\r\n1317.935547\t5454.920898\r\n1316.808594\t5544.836426\r\n1315.679688\t5550.486328\r\n1"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG5697_3.txt",
    "chars": 25061,
    "preview": "#Wave\t\t#Intensity\r\n1319.062500\t5838.539063\r\n1317.935547\t5543.618652\r\n1316.808594\t5742.153320\r\n1315.679688\t5860.817383\r\n1"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG5697_4.txt",
    "chars": 25034,
    "preview": "#Wave\t\t#Intensity\r\n1319.062500\t5579.098145\r\n1317.935547\t5703.274902\r\n1316.808594\t5837.486816\r\n1315.679688\t5707.868652\r\n1"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG5781_.txt",
    "chars": 25168,
    "preview": "#Wave\t\t#Intensity\r\n1319.062500\t6384.031250\r\n1317.935547\t6481.599121\r\n1316.808594\t6347.407715\r\n1315.679688\t6523.594727\r\n1"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG5781_1.txt",
    "chars": 25174,
    "preview": "#Wave\t\t#Intensity\r\n1319.062500\t6681.169434\r\n1317.935547\t6849.695313\r\n1316.808594\t6640.057617\r\n1315.679688\t6669.893555\r\n1"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG5781_2.txt",
    "chars": 25168,
    "preview": "#Wave\t\t#Intensity\r\n1319.062500\t6377.378906\r\n1317.935547\t6494.903809\r\n1316.808594\t6495.949707\r\n1315.679688\t6352.913086\r\n1"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG5781_3.txt",
    "chars": 25178,
    "preview": "#Wave\t\t#Intensity\r\n1319.062500\t6386.249023\r\n1317.935547\t6492.686523\r\n1316.808594\t6236.555176\r\n1315.679688\t6550.194824\r\n1"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG5781_4.txt",
    "chars": 25173,
    "preview": "#Wave\t\t#Intensity\r\n1319.062500\t6381.813965\r\n1317.935547\t6543.687500\r\n1316.808594\t6323.020020\r\n1315.679688\t6441.579102\r\n1"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG612_0__X_19514__Y_-19276.6__Time_0.txt",
    "chars": 25303,
    "preview": "1318.892578\t6642.928223\r\n1317.763672\t6662.023438\r\n1316.636719\t6556.171387\r\n1315.509766\t6549.039063\r\n1314.380859\t6516.688"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG612_1__X_19551.8__Y_-19295.8__Time_144.txt",
    "chars": 25324,
    "preview": "1318.892578\t7004.769531\r\n1317.763672\t7096.992188\r\n1316.636719\t7049.965820\r\n1315.509766\t7151.273926\r\n1314.380859\t7133.982"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG612_2__X_19501__Y_-19341__Time_288.txt",
    "chars": 25336,
    "preview": "1318.892578\t7111.081543\r\n1317.763672\t7218.236328\r\n1316.636719\t7182.622070\r\n1315.509766\t7305.897461\r\n1314.380859\t7291.500"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG612_3__X_19376.6__Y_-19350.4__Time_433.txt",
    "chars": 25314,
    "preview": "1318.892578\t6785.135254\r\n1317.763672\t6826.269043\r\n1316.636719\t6737.532227\r\n1315.509766\t6762.901855\r\n1314.380859\t6734.906"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG612_4__X_19287.5__Y_-19296.3__Time_577.txt",
    "chars": 25342,
    "preview": "1318.892578\t7227.203125\r\n1317.763672\t7354.270996\r\n1316.636719\t7334.349121\r\n1315.509766\t7487.058105\r\n1314.380859\t7476.664"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG662_0__X_13277.4__Y_-18492.1__Time_0.txt",
    "chars": 25392,
    "preview": "1319.062500\t5721.014648\r\n1317.935547\t6051.414063\r\n1316.808594\t5726.634277\r\n1315.679688\t5814.267578\r\n1314.552734\t5853.111"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG662_1__X_13303.4__Y_-18492.5__Time_144.txt",
    "chars": 25397,
    "preview": "1319.062500\t6168.938965\r\n1317.935547\t6286.463867\r\n1316.808594\t6203.299316\r\n1315.679688\t6135.681641\r\n1314.552734\t5897.436"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG662_2__X_13292.4__Y_-18480.4__Time_288.txt",
    "chars": 25397,
    "preview": "1319.062500\t6049.196777\r\n1317.935547\t5982.673340\r\n1316.808594\t6238.772461\r\n1315.679688\t5942.833008\r\n1314.552734\t5983.870"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG662_3__X_13277.7__Y_-18471.3__Time_433.txt",
    "chars": 25394,
    "preview": "1319.062500\t5576.880371\r\n1317.935547\t5854.061523\r\n1316.808594\t5762.106934\r\n1315.679688\t5964.999512\r\n1314.552734\t5811.002"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG662_4__X_13305.5__Y_-18472.1__Time_577.txt",
    "chars": 25393,
    "preview": "1319.062500\t5858.496094\r\n1317.935547\t5712.145020\r\n1316.808594\t5824.184082\r\n1315.679688\t5703.435059\r\n1314.552734\t5839.813"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG663_0__X_19823.3__Y_-22023.6__Time_0.txt",
    "chars": 25398,
    "preview": "1319.062500\t5876.235840\r\n1317.935547\t6166.721680\r\n1316.808594\t6068.059570\r\n1315.679688\t6013.766113\r\n1314.552734\t5966.140"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG663_1__X_19837.8__Y_-22035.6__Time_144.txt",
    "chars": 25395,
    "preview": "1319.062500\t5842.974121\r\n1317.935547\t5956.063965\r\n1316.808594\t5733.285156\r\n1315.679688\t5796.534180\r\n1314.552734\t5846.462"
  },
  {
    "path": "examples/Iron_AmMin_paper/raw/VG663_2__X_19805.4__Y_-22037.8__Time_288.txt",
    "chars": 25397,
    "preview": "1319.062500\t5885.105469\r\n1317.935547\t5911.714844\r\n1316.808594\t5950.556152\r\n1315.679688\t5741.118164\r\n1314.552734\t5822.083"
  }
]

// ... and 343 more files (download for full content)

About this extraction

This page contains the full source code of the charlesll/rampy GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 543 files (89.6 MB), approximately 11.5M tokens, and a symbol index with 167 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!