diff --git a/README.md b/README.md index d47212a0..c34a2cd7 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,12 @@ Install all the dependencies. pip install -r requirements.txt ``` +Generate all the content require for the build. + +```bash +make update +``` + Serve the website with the mkdocs. ```bash mkdocs serve diff --git a/data/beps/beps_completed.yml b/data/beps/beps_completed.yml index 82d0b898..9f8351eb 100644 --- a/data/beps/beps_completed.yml +++ b/data/beps/beps_completed.yml @@ -9,7 +9,8 @@ # - raw - number: '001' - title: Quantitative MRI (qMRI) + title: Quantitative MRI + display: qMRI link: https://bids-specification.readthedocs.io/en/stable/appendices/qmri.html leads: - name: Gilles de Hollander @@ -22,6 +23,7 @@ - number: '002' title: BIDS Statistical Models Specification + display: stats model link: https://bids-standard.github.io/stats-models/ leads: - name: Tal Yarkoni @@ -34,6 +36,7 @@ - number: '003' title: Common Derivatives + display: Common Der link: https://bids-specification.readthedocs.io/en/stable/derivatives/introduction.html leads: - name: Chris Markiewicz @@ -46,7 +49,8 @@ pull_request_merged: 2020-06 - number: '005' - title: Arterial Spin Labeling (ASL) + title: Arterial Spin Labeling + display: ASL link: https://bids-specification.readthedocs.io/en/stable/appendices/arterial-spin-labeling.html leads: - name: Henk-Jan Mutsaerts @@ -60,7 +64,8 @@ pull_request_merged: 2021-02 - number: '006' - title: Electroencephalography (EEG) + title: Electroencephalography + display: EEG link: https://bids-specification.readthedocs.io/en/stable/modality-specific-files/electroencephalography.html leads: - name: Cyril Pernet @@ -73,7 +78,8 @@ pull_request_merged: 2019-03 - number: '007' - title: Hierarchical Event Descriptor (HED) Tags + title: Hierarchical Event Descriptor Tags + display: HED link: https://bids-specification.readthedocs.io/en/stable/appendices/hed.html leads: - name: Chris Gorgolewski @@ -84,7 +90,8 @@ pull_request_merged: 2018-04 - number: '008' - title: Magnetoencephalography (MEG) + title: Magnetoencephalography + display: MEG link: https://bids-specification.readthedocs.io/en/stable/modality-specific-files/magnetoencephalography.html leads: - name: Guiomar Niso @@ -95,7 +102,8 @@ pull_request_merged: 2018-04 - number: '009' - title: Positron Emission Tomography (PET) + title: Positron Emission Tomography + display: PET link: https://bids-specification.readthedocs.io/en/stable/modality-specific-files/positron-emission-tomography.html leads: - name: Melanie Ganz @@ -106,7 +114,8 @@ pull_request_merged: 2021-04 - number: '010' - title: intracranial Electroencephalography (iEEG) + title: intracranial Electroencephalography + display: iEEG link: https://bids-specification.readthedocs.io/en/stable/modality-specific-files/intracranial-electroencephalography.html leads: - name: Chris Holdgraf @@ -119,6 +128,7 @@ - number: '018' title: Genetic information + display: Genetic link: https://bids-specification.readthedocs.io/en/stable/modality-specific-files/genetic-descriptor.html leads: - name: Cyril Pernet @@ -132,6 +142,7 @@ - number: '027' title: BIDS Applications 2.0 + display: execution link: https://bids-standard.github.io/execution-spec/ leads: - name: Chris Markiewicz @@ -144,6 +155,7 @@ - number: '029' title: Virtual and physical motion data + display: motion link: https://bids-specification.readthedocs.io/en/stable/modality-specific-files/motion.html leads: - name: Sein Jeung @@ -156,7 +168,8 @@ pull_request_merged: 2023-03 - number: '030' - title: Near Infrared Spectroscopy (NIRS) + title: Near Infrared Spectroscopy + display: NIRS link: https://bids-specification.readthedocs.io/en/stable/modality-specific-files/near-infrared-spectroscopy.html leads: - name: Robert Luke @@ -169,6 +182,7 @@ - number: '031' title: Microscopy + display: Microscopy link: https://bids-specification.readthedocs.io/en/stable/modality-specific-files/microscopy.html leads: - name: Marie-Hélène Bourget diff --git a/data/count_citation.tsv b/data/count_citation.tsv index 2824d2f2..513761b5 100644 --- a/data/count_citation.tsv +++ b/data/count_citation.tsv @@ -1,6 +1,6 @@ papers years nb_citations -fNIRS-BIDS, the Brain Imaging Data Structure Extended to Functional Near-Infrared Spectroscopy 2023 1 -ASL-BIDS, the brain imaging data structure extension for arterial spin labeling 2023 8 +fNIRS-BIDS 2023 1 +ASL-BIDS 2023 8 Guidelines for the content and format of PET brain data in publications and archives 2021 13 Guidelines for the content and format of PET brain data in publications and archives 2022 10 Guidelines for the content and format of PET brain data in publications and archives 2020 6 @@ -10,36 +10,36 @@ The genetics-BIDS extension 2021 3 The genetics-BIDS extension 2022 4 Microscopy-BIDS 2023 5 Microscopy-BIDS 2022 2 -PET-BIDS, an extension to the brain imaging data structure for positron emission tomography 2023 7 -PET-BIDS, an extension to the brain imaging data structure for positron emission tomography 2022 5 -MEG-BIDS, the brain imaging data structure extended to magnetoencephalography 2019 19 -MEG-BIDS, the brain imaging data structure extended to magnetoencephalography 2022 23 -MEG-BIDS, the brain imaging data structure extended to magnetoencephalography 2023 12 -MEG-BIDS, the brain imaging data structure extended to magnetoencephalography 2021 23 -MEG-BIDS, the brain imaging data structure extended to magnetoencephalography 2020 8 -MEG-BIDS, the brain imaging data structure extended to magnetoencephalography 2018 3 -iEEG-BIDS, extending the Brain Imaging Data Structure specification to human intracranial electrophysiology 2020 14 -iEEG-BIDS, extending the Brain Imaging Data Structure specification to human intracranial electrophysiology 2019 6 -iEEG-BIDS, extending the Brain Imaging Data Structure specification to human intracranial electrophysiology 2021 18 -iEEG-BIDS, extending the Brain Imaging Data Structure specification to human intracranial electrophysiology 2022 25 -iEEG-BIDS, extending the Brain Imaging Data Structure specification to human intracranial electrophysiology 2023 16 -EEG-BIDS, an extension to the brain imaging data structure for electroencephalography 2021 58 -EEG-BIDS, an extension to the brain imaging data structure for electroencephalography 2020 17 -EEG-BIDS, an extension to the brain imaging data structure for electroencephalography 2019 6 -EEG-BIDS, an extension to the brain imaging data structure for electroencephalography 2022 58 -EEG-BIDS, an extension to the brain imaging data structure for electroencephalography 2023 33 +PET-BIDS 2023 7 +PET-BIDS 2022 5 +MEG-BIDS 2019 19 +MEG-BIDS 2022 23 +MEG-BIDS 2023 12 +MEG-BIDS 2021 23 +MEG-BIDS 2020 8 +MEG-BIDS 2018 3 +iEEG-BIDS 2020 14 +iEEG-BIDS 2019 6 +iEEG-BIDS 2021 18 +iEEG-BIDS 2022 25 +iEEG-BIDS 2023 16 +EEG-BIDS 2020 17 +EEG-BIDS 2022 57 +EEG-BIDS 2021 58 +EEG-BIDS 2023 33 +EEG-BIDS 2019 6 +BIDS apps 2022 49 BIDS apps 2021 36 -BIDS apps 2019 34 BIDS apps 2020 26 -BIDS apps 2022 49 +BIDS apps 2019 33 BIDS apps 2018 20 BIDS apps 2017 12 BIDS apps 2023 20 -The brain imaging data structure, a format for organizing and describing outputs of neuroimaging experiments 2022 215 -The brain imaging data structure, a format for organizing and describing outputs of neuroimaging experiments 2023 146 -The brain imaging data structure, a format for organizing and describing outputs of neuroimaging experiments 2020 129 -The brain imaging data structure, a format for organizing and describing outputs of neuroimaging experiments 2019 88 -The brain imaging data structure, a format for organizing and describing outputs of neuroimaging experiments 2016 13 -The brain imaging data structure, a format for organizing and describing outputs of neuroimaging experiments 2021 184 -The brain imaging data structure, a format for organizing and describing outputs of neuroimaging experiments 2017 33 -The brain imaging data structure, a format for organizing and describing outputs of neuroimaging experiments 2018 40 +The brain imaging data structure 2022 215 +The brain imaging data structure 2023 146 +The brain imaging data structure 2020 128 +The brain imaging data structure 2019 85 +The brain imaging data structure 2016 13 +The brain imaging data structure 2021 182 +The brain imaging data structure 2017 32 +The brain imaging data structure 2018 39 diff --git a/data/openneuro_datasets.tsv b/data/openneuro_datasets.tsv new file mode 100644 index 00000000..97eacc5b --- /dev/null +++ b/data/openneuro_datasets.tsv @@ -0,0 +1,769 @@ +n_datasets n_subjects release_dates +2 33.0 2016-10-12 +6 91.0 2016-10-13 +6 128.0 2016-10-14 +2 54.0 2016-10-17 +1 99.0 2016-10-25 +1 8.0 2016-11-07 +2 66.0 2016-11-08 +1 24.0 2016-12-15 +1 10.0 2017-06-19 +1 17.0 2017-07-25 +1 1.0 2017-08-01 +2 99.0 2017-08-22 +1 217.0 2017-08-23 +2 43.0 2017-08-24 +1 1.0 2017-08-26 +2 81.0 2017-08-28 +1 14.0 2017-08-29 +3 132.0 2017-09-04 +2 112.0 2017-09-12 +1 26.0 2017-09-18 +1 19.0 2017-09-19 +1 10.0 2017-09-20 +1 155.0 2017-09-21 +2 22.0 2017-09-23 +2 133.0 2017-09-24 +1 3.0 2017-09-25 +1 59.0 2017-09-26 +1 28.0 2017-09-28 +1 0.0 2017-10-03 +1 37.0 2017-10-13 +2 70.0 2017-10-30 +1 24.0 2017-11-08 +1 22.0 2017-11-30 +1 23.0 2017-12-07 +1 30.0 2018-02-02 +3 89.0 2018-02-06 +4 117.0 2018-02-12 +1 21.0 2018-02-15 +1 18.0 2018-02-16 +1 12.0 2018-02-19 +1 24.0 2018-02-23 +1 52.0 2018-02-24 +1 79.0 2018-02-28 +1 5.0 2018-03-01 +1 43.0 2018-03-02 +1 21.0 2018-03-05 +1 13.0 2018-03-07 +1 19.0 2018-03-08 +1 6.0 2018-03-09 +4 28.0 2018-03-13 +3 151.0 2018-03-14 +1 34.0 2018-03-16 +1 272.0 2018-03-19 +1 7.0 2018-03-20 +1 33.0 2018-03-21 +3 360.0 2018-03-23 +2 61.0 2018-03-26 +2 72.0 2018-03-27 +1 35.0 2018-03-28 +8 268.0 2018-03-29 +5 35.0 2018-03-30 +1 26.0 2018-04-04 +1 22.0 2018-04-19 +1 14.0 2018-04-20 +1 15.0 2018-04-27 +1 33.0 2018-05-02 +1 18.0 2018-05-06 +1 1.0 2018-05-09 +1 35.0 2018-05-12 +1 25.0 2018-05-22 +1 42.0 2018-05-29 +1 6.0 2018-06-13 +1 52.0 2018-06-22 +1 36.0 2018-07-03 +1 1.0 2018-07-05 +2 3.0 2018-07-09 +1 31.0 2018-07-24 +1 18.0 2018-07-26 +1 2.0 2018-08-01 +1 24.0 2018-08-02 +1 81.0 2018-08-05 +1 37.0 2018-08-12 +1 132.0 2018-08-22 +1 20.0 2018-08-30 +2 14.0 2018-09-04 +1 3.0 2018-09-07 +2 44.0 2018-09-10 +1 24.0 2018-09-18 +1 41.0 2018-09-20 +1 17.0 2018-09-26 +1 38.0 2018-10-01 +1 42.0 2018-10-08 +2 46.0 2018-10-10 +1 5.0 2018-10-11 +1 34.0 2018-10-14 +2 26.0 2018-10-15 +1 3.0 2018-10-16 +1 1.0 2018-10-23 +1 36.0 2018-10-29 +1 32.0 2018-11-08 +1 2.0 2018-11-13 +1 1.0 2018-11-16 +1 20.0 2018-11-19 +1 1.0 2018-11-24 +1 32.0 2018-12-03 +1 24.0 2018-12-06 +1 31.0 2018-12-07 +1 36.0 2018-12-12 +1 20.0 2018-12-14 +2 35.0 2018-12-31 +1 8.0 2019-01-16 +1 5.0 2019-01-28 +1 34.0 2019-01-31 +2 274.0 2019-02-01 +1 1.0 2019-02-05 +2 37.0 2019-02-06 +1 24.0 2019-02-07 +1 62.0 2019-02-08 +1 20.0 2019-02-12 +2 35.0 2019-02-15 +1 1.0 2019-02-25 +1 40.0 2019-02-26 +1 24.0 2019-03-01 +1 1.0 2019-03-06 +1 14.0 2019-03-08 +1 24.0 2019-03-09 +1 64.0 2019-03-14 +1 35.0 2019-03-23 +2 69.0 2019-04-04 +1 6.0 2019-04-05 +1 32.0 2019-04-10 +1 52.0 2019-04-11 +1 9.0 2019-04-26 +1 30.0 2019-05-02 +1 46.0 2019-05-08 +1 108.0 2019-05-13 +2 29.0 2019-05-15 +1 17.0 2019-05-16 +1 23.0 2019-05-17 +1 188.0 2019-05-20 +1 32.0 2019-05-21 +1 34.0 2019-05-24 +2 67.0 2019-05-28 +1 21.0 2019-06-04 +1 20.0 2019-06-07 +1 14.0 2019-06-12 +1 33.0 2019-06-13 +1 15.0 2019-06-14 +2 31.0 2019-06-28 +1 30.0 2019-07-01 +1 22.0 2019-07-04 +1 4.0 2019-07-09 +1 50.0 2019-07-10 +1 43.0 2019-07-15 +1 1.0 2019-07-16 +2 45.0 2019-07-21 +1 29.0 2019-07-23 +1 4.0 2019-07-29 +1 29.0 2019-07-31 +2 26.0 2019-08-01 +1 20.0 2019-08-02 +1 24.0 2019-08-10 +1 20.0 2019-08-22 +1 14.0 2019-08-24 +2 64.0 2019-09-02 +3 34.0 2019-09-03 +1 1.0 2019-09-04 +1 20.0 2019-09-05 +1 226.0 2019-09-16 +1 1.0 2019-09-17 +1 24.0 2019-09-19 +1 7.0 2019-09-26 +1 1.0 2019-09-29 +1 7.0 2019-09-30 +1 18.0 2019-10-03 +1 6.0 2019-10-07 +1 16.0 2019-10-11 +2 75.0 2019-10-15 +1 91.0 2019-10-17 +1 20.0 2019-10-24 +2 20.0 2019-10-28 +1 5.0 2019-10-29 +1 1.0 2019-10-30 +1 1.0 2019-10-31 +1 23.0 2019-11-08 +1 19.0 2019-11-10 +1 36.0 2019-11-13 +1 82.0 2019-11-14 +1 26.0 2019-11-15 +1 1.0 2019-11-19 +1 12.0 2019-11-29 +2 27.0 2019-12-04 +1 345.0 2019-12-11 +1 1.0 2019-12-15 +1 66.0 2019-12-16 +1 1.0 2019-12-18 +2 2.0 2019-12-19 +1 34.0 2019-12-20 +1 143.0 2020-01-14 +2 2020-01-18 +1 47.0 2020-01-19 +1 46.0 2020-01-20 +2 39.0 2020-01-21 +1 22.0 2020-01-22 +1 48.0 2020-01-23 +1 6.0 2020-01-27 +1 29.0 2020-01-29 +1 48.0 2020-02-05 +1 26.0 2020-02-08 +3 115.0 2020-02-14 +1 22.0 2020-02-18 +1 3.0 2020-02-19 +1 7.0 2020-02-20 +1 2.0 2020-02-21 +1 19.0 2020-02-24 +1 23.0 2020-03-03 +1 61.0 2020-03-04 +1 10.0 2020-03-09 +2 53.0 2020-03-13 +1 79.0 2020-03-18 +2 111.0 2020-03-19 +1 41.0 2020-03-23 +1 5.0 2020-04-01 +2 32.0 2020-04-03 +1 4.0 2020-04-06 +1 13.0 2020-04-07 +1 24.0 2020-04-08 +2 34.0 2020-04-09 +1 35.0 2020-04-10 +1 40.0 2020-04-11 +1 11.0 2020-04-14 +1 15.0 2020-04-16 +3 57.0 2020-04-17 +1 59.0 2020-04-19 +1 18.0 2020-04-21 +8 142.0 2020-04-24 +2 75.0 2020-04-28 +1 36.0 2020-04-29 +2 108.0 2020-04-30 +1 23.0 2020-05-05 +2 50.0 2020-05-06 +2 50.0 2020-05-08 +1 24.0 2020-05-10 +1 26.0 2020-05-12 +1 48.0 2020-05-13 +2 47.0 2020-05-15 +1 28.0 2020-05-17 +2 33.0 2020-05-18 +8 158.0 2020-05-19 +2 442.0 2020-05-24 +1 86.0 2020-05-26 +5 204.0 2020-06-01 +1 36.0 2020-06-04 +2 88.0 2020-06-09 +1 39.0 2020-06-11 +1 3.0 2020-06-16 +2 65.0 2020-06-17 +1 2.0 2020-06-24 +2 54.0 2020-06-26 +2 50.0 2020-06-29 +1 18.0 2020-07-07 +2 63.0 2020-07-10 +2 54.0 2020-07-15 +3 99.0 2020-07-17 +1 18.0 2020-07-21 +1 3.0 2020-07-28 +1 53.0 2020-07-29 +1 92.0 2020-08-06 +3 41.0 2020-08-07 +1 36.0 2020-08-11 +2 44.0 2020-08-12 +1 17.0 2020-08-14 +1 6.0 2020-08-17 +1 26.0 2020-08-18 +2 52.0 2020-08-19 +1 20.0 2020-08-24 +1 159.0 2020-08-25 +1 1.0 2020-08-29 +2 31.0 2020-08-31 +1 49.0 2020-09-02 +1 13.0 2020-09-07 +1 58.0 2020-09-10 +3 205.0 2020-09-15 +2 80.0 2020-09-16 +1 31.0 2020-09-21 +1 3.0 2020-09-22 +1 17.0 2020-09-23 +1 35.0 2020-09-29 +2 72.0 2020-09-30 +2 22.0 2020-10-01 +1 25.0 2020-10-06 +1 96.0 2020-10-07 +2 25.0 2020-10-13 +1 33.0 2020-10-14 +1 16.0 2020-10-16 +1 19.0 2020-10-21 +1 20.0 2020-10-25 +1 75.0 2020-10-27 +1 144.0 2020-10-29 +1 20.0 2020-10-31 +1 18.0 2020-11-03 +1 32.0 2020-11-06 +1 40.0 2020-11-10 +1 9.0 2020-11-11 +1 20.0 2020-11-12 +2 22.0 2020-11-13 +1 10.0 2020-11-16 +1 11.0 2020-11-20 +1 21.0 2020-11-22 +2 26.0 2020-11-30 +1 35.0 2020-12-02 +3 1056.0 2020-12-03 +1 18.0 2020-12-04 +2 43.0 2020-12-08 +1 7.0 2020-12-09 +1 57.0 2020-12-10 +2 32.0 2020-12-15 +1 38.0 2020-12-16 +2 36.0 2020-12-17 +9 10.0 2020-12-18 +1 13.0 2020-12-23 +1 7.0 2020-12-28 +1 24.0 2020-12-30 +3 52.0 2021-01-02 +1 23.0 2021-01-04 +2 49.0 2021-01-05 +1 9.0 2021-01-06 +1 22.0 2021-01-07 +1 18.0 2021-01-13 +1 20.0 2021-01-14 +1 122.0 2021-01-18 +1 21.0 2021-01-19 +1 145.0 2021-01-21 +1 21.0 2021-01-24 +1 50.0 2021-01-27 +1 55.0 2021-01-28 +1 24.0 2021-02-01 +1 26.0 2021-02-02 +1 20.0 2021-02-04 +2 178.0 2021-02-05 +1 21.0 2021-02-06 +1 56.0 2021-02-08 +1 57.0 2021-02-09 +1 25.0 2021-02-12 +1 26.0 2021-02-14 +1 17.0 2021-02-15 +1 110.0 2021-02-16 +2 108.0 2021-02-17 +2 131.0 2021-02-19 +1 91.0 2021-02-22 +2 47.0 2021-02-23 +3 73.0 2021-02-24 +2 54.0 2021-02-25 +1 18.0 2021-02-26 +1 55.0 2021-03-04 +1 30.0 2021-03-06 +1 40.0 2021-03-07 +1 20.0 2021-03-10 +1 20.0 2021-03-11 +1 1.0 2021-03-12 +1 4.0 2021-03-15 +1 51.0 2021-03-16 +1 25.0 2021-03-18 +1 40.0 2021-03-20 +1 18.0 2021-03-26 +1 1.0 2021-03-30 +1 133.0 2021-04-05 +1 29.0 2021-04-10 +2 373.0 2021-04-16 +2 26.0 2021-04-17 +1 44.0 2021-04-20 +1 3.0 2021-04-27 +1 29.0 2021-04-30 +1 24.0 2021-05-02 +1 34.0 2021-05-07 +1 166.0 2021-05-08 +1 11.0 2021-05-16 +2 174.0 2021-05-20 +1 112.0 2021-05-26 +1 47.0 2021-05-29 +1 28.0 2021-06-05 +1 75.0 2021-06-10 +1 63.0 2021-06-13 +1 47.0 2021-06-15 +1 96.0 2021-06-22 +2 35.0 2021-06-23 +1 36.0 2021-06-25 +1 51.0 2021-06-28 +1 1.0 2021-07-01 +2 122.0 2021-07-02 +1 25.0 2021-07-10 +1 13.0 2021-07-12 +2 29.0 2021-07-13 +3 98.0 2021-07-19 +1 30.0 2021-07-23 +1 50.0 2021-07-27 +1 3.0 2021-07-30 +1 5.0 2021-08-02 +2 121.0 2021-08-06 +1 40.0 2021-08-08 +1 15.0 2021-08-09 +1 60.0 2021-08-10 +1 5.0 2021-08-11 +1 62.0 2021-08-12 +3 83.0 2021-08-17 +1 2021-08-19 +2 40.0 2021-08-20 +1 27.0 2021-08-21 +1 90.0 2021-08-23 +1 20.0 2021-08-24 +1 111.0 2021-08-25 +2 72.0 2021-08-30 +1 49.0 2021-09-05 +1 48.0 2021-09-08 +1 4.0 2021-09-14 +1 20.0 2021-09-16 +1 57.0 2021-09-17 +1 10.0 2021-09-20 +1 12.0 2021-09-22 +1 2021-09-25 +3 58.0 2021-09-28 +2 50.0 2021-09-29 +2 186.0 2021-10-01 +1 37.0 2021-10-03 +1 60.0 2021-10-15 +1 6.0 2021-10-16 +2 100.0 2021-10-19 +1 19.0 2021-10-20 +1 92.0 2021-10-21 +2 7.0 2021-10-22 +2 36.0 2021-10-26 +1 14.0 2021-10-27 +1 22.0 2021-11-04 +1 62.0 2021-11-05 +1 8.0 2021-11-08 +1 56.0 2021-11-09 +1 79.0 2021-11-10 +2 48.0 2021-11-12 +2 54.0 2021-11-15 +1 1.0 2021-11-22 +1 7.0 2021-11-23 +2 326.0 2021-12-02 +2 19.0 2021-12-06 +1 44.0 2021-12-13 +1 6.0 2021-12-16 +2 142.0 2021-12-17 +1 98.0 2022-01-03 +1 8.0 2022-01-05 +1 13.0 2022-01-07 +1 52.0 2022-01-08 +1 3.0 2022-01-11 +1 6.0 2022-01-12 +1 117.0 2022-01-14 +1 301.0 2022-01-18 +1 43.0 2022-01-20 +4 209.0 2022-01-24 +1 33.0 2022-01-25 +1 24.0 2022-01-26 +1 23.0 2022-02-01 +2 78.0 2022-02-08 +2 78.0 2022-02-09 +2 20.0 2022-02-15 +1 31.0 2022-02-22 +1 13.0 2022-02-24 +1 20.0 2022-02-25 +1 1.0 2022-03-01 +1 74.0 2022-03-03 +1 62.0 2022-03-04 +1 29.0 2022-03-09 +1 2.0 2022-03-10 +1 80.0 2022-03-13 +1 32.0 2022-03-17 +1 29.0 2022-03-18 +1 36.0 2022-03-30 +2 78.0 2022-03-31 +1 35.0 2022-04-01 +1 8.0 2022-04-05 +1 20.0 2022-04-07 +1 12.0 2022-04-11 +1 30.0 2022-04-13 +1 18.0 2022-04-14 +1 9.0 2022-04-18 +2 40.0 2022-04-19 +1 8.0 2022-04-22 +1 31.0 2022-04-26 +3 1032.0 2022-04-28 +1 27.0 2022-04-29 +1 13.0 2022-05-02 +6 368.0 2022-05-04 +2 75.0 2022-05-05 +1 19.0 2022-05-06 +1 2951.0 2022-05-15 +1 37.0 2022-05-20 +1 20.0 2022-05-23 +2 33.0 2022-05-24 +1 66.0 2022-05-26 +1 36.0 2022-05-27 +1 20.0 2022-05-31 +1 417.0 2022-06-03 +1 1.0 2022-06-04 +1 66.0 2022-06-06 +1 12.0 2022-06-07 +2 2.0 2022-06-09 +2 70.0 2022-06-13 +2 78.0 2022-06-14 +2 44.0 2022-06-15 +1 23.0 2022-06-16 +1 71.0 2022-06-17 +1 1202.0 2022-06-22 +1 48.0 2022-06-24 +1 29.0 2022-06-29 +1 20.0 2022-07-01 +1 3.0 2022-07-02 +1 14.0 2022-07-06 +1 32.0 2022-07-08 +1 20.0 2022-07-11 +1 67.0 2022-07-20 +2 38.0 2022-07-21 +1 10.0 2022-07-25 +1 118.0 2022-07-27 +1 70.0 2022-08-01 +2 17.0 2022-08-02 +1 39.0 2022-08-04 +1 157.0 2022-08-05 +1 35.0 2022-08-10 +1 80.0 2022-08-15 +1 1.0 2022-08-17 +1 49.0 2022-08-19 +2 23.0 2022-08-22 +1 35.0 2022-08-30 +1 64.0 2022-09-01 +2 74.0 2022-09-07 +1 21.0 2022-09-13 +1 5.0 2022-09-14 +1 40.0 2022-09-18 +1 57.0 2022-09-21 +1 30.0 2022-09-26 +1 2.0 2022-09-27 +1 4.0 2022-09-30 +1 148.0 2022-10-01 +1 18.0 2022-10-07 +1 5.0 2022-10-10 +1 3.0 2022-10-13 +1 26.0 2022-10-15 +1 11.0 2022-10-20 +2 140.0 2022-10-21 +2 100.0 2022-10-27 +1 71.0 2022-11-02 +1 23.0 2022-11-04 +2 60.0 2022-11-08 +1 22.0 2022-11-09 +1 2.0 2022-11-25 +1 24.0 2022-11-28 +1 1.0 2022-11-30 +1 9.0 2022-12-01 +1 57.0 2022-12-02 +1 24.0 2022-12-06 +1 57.0 2022-12-10 +1 22.0 2022-12-12 +1 1.0 2022-12-13 +3 188.0 2022-12-15 +2 7.0 2023-01-05 +1 78.0 2023-01-12 +1 1.0 2023-01-13 +1 32.0 2023-01-16 +1 58.0 2023-01-17 +1 25.0 2023-01-18 +1 19.0 2023-01-20 +2 50.0 2023-01-23 +1 12.0 2023-01-24 +3 84.0 2023-01-25 +3 87.0 2023-01-26 +2 117.0 2023-01-30 +1 42.0 2023-01-31 +1 2.0 2023-02-01 +1 20.0 2023-02-03 +1 41.0 2023-02-06 +3 199.0 2023-02-07 +2 17.0 2023-02-08 +1 15.0 2023-02-09 +1 170.0 2023-02-14 +1 1.0 2023-02-15 +1 48.0 2023-02-16 +1 88.0 2023-02-17 +1 20.0 2023-02-19 +1 3.0 2023-02-20 +3 53.0 2023-02-22 +1 74.0 2023-02-23 +1 45.0 2023-02-24 +3 42.0 2023-03-03 +1 40.0 2023-03-04 +1 30.0 2023-03-05 +1 33.0 2023-03-06 +2 77.0 2023-03-07 +1 10.0 2023-03-10 +1 34.0 2023-03-13 +1 20.0 2023-03-14 +1 110.0 2023-03-16 +1 21.0 2023-03-17 +1 10.0 2023-03-22 +2 86.0 2023-03-24 +2 63.0 2023-03-30 +1 14.0 2023-04-02 +2 129.0 2023-04-07 +1 1.0 2023-04-19 +2 52.0 2023-04-20 +1 16.0 2023-04-21 +2 88.0 2023-04-24 +3 22.0 2023-04-26 +1 48.0 2023-05-02 +1 23.0 2023-05-04 +1 2.0 2023-05-16 +1 5.0 2023-05-17 +1 146.0 2023-05-24 +4 441.0 2023-05-25 +2 406.0 2023-06-01 +1 4.0 2023-06-02 +1 149.0 2023-06-07 +1 54.0 2023-06-09 +3 82.0 2023-06-13 +1 32.0 2023-06-15 +1 27.0 2023-06-16 +1 2.0 2023-06-30 +1 40.0 2023-07-05 +1 9.0 2023-07-06 +3 172.0 2023-07-07 +2 85.0 2023-07-10 +2 59.0 2023-07-11 +1 2.0 2023-07-13 +1 26.0 2023-07-18 +1 24.0 2023-07-20 +2 197.0 2023-07-21 +1 44.0 2023-07-27 +1 53.0 2023-07-28 +4 129.0 2023-07-31 +1 28.0 2023-08-01 +1 56.0 2023-08-02 +1 15.0 2023-08-04 +3 62.0 2023-08-05 +1 8.0 2023-08-06 +1 52.0 2023-08-07 +1 50.0 2023-08-09 +1 45.0 2023-08-12 +1 30.0 2023-08-15 +5 232.0 2023-08-16 +2 44.0 2023-08-18 +2 221.0 2023-08-23 +2 108.0 2023-08-26 +1 2.0 2023-08-28 +1 4.0 2023-09-03 +1 1.0 2023-09-06 +2 36.0 2023-09-07 +2 93.0 2023-09-08 +1 19.0 2023-09-11 +2 38.0 2023-09-13 +2 44.0 2023-09-14 +1 55.0 2023-09-18 +1 395.0 2023-09-19 +1 20.0 2023-09-20 +2 17.0 2023-09-22 +2 89.0 2023-09-25 +1 2.0 2023-09-26 +2 111.0 2023-09-28 +1 17.0 2023-10-02 +2 45.0 2023-10-04 +1 280.0 2023-10-10 +1 42.0 2023-10-12 +1 15.0 2023-10-16 +1 24.0 2023-10-18 +1 38.0 2023-10-19 +2 262.0 2023-10-20 +1 68.0 2023-10-24 +6 81.0 2023-10-26 +1 12.0 2023-10-27 +3 88.0 2023-10-30 +1 60.0 2023-11-02 +1 58.0 2023-11-03 +2 86.0 2023-11-06 +1 11.0 2023-11-09 +1 10.0 2023-11-10 +1 9.0 2023-11-12 +4 65.0 2023-11-13 +7 72.0 2023-11-14 +1 73.0 2023-11-16 +2 38.0 2023-11-23 +1 49.0 2023-11-29 +1 5.0 2023-11-30 +1 40.0 2023-12-12 +1 40.0 2023-12-14 +1 1.0 2023-12-15 +4 2017.0 2023-12-20 +7 298.0 2023-12-21 +3 88.0 2024-01-04 +1 59.0 2024-01-05 +1 40.0 2024-01-07 +1 20.0 2024-01-09 +1 12.0 2024-01-16 +1 44.0 2024-01-17 +1 124.0 2024-01-19 +1 22.0 2024-01-20 +1 5.0 2024-01-25 +1 22.0 2024-01-30 +1 32.0 2024-02-03 +1 103.0 2024-02-04 +2 149.0 2024-02-06 +1 49.0 2024-02-07 +2 59.0 2024-02-08 +5 98.0 2024-02-12 +1 20.0 2024-02-17 +1 79.0 2024-02-18 +1 62.0 2024-02-23 +3 77.0 2024-02-26 +1 20.0 2024-02-28 +1 51.0 2024-02-29 +1 41.0 2024-03-04 +1 7.0 2024-03-05 +3 287.0 2024-03-06 +1 40.0 2024-03-07 +1 60.0 2024-03-09 +3 199.0 2024-03-11 +2 186.0 2024-03-15 +1 30.0 2024-03-17 +2 65.0 2024-03-20 +2 108.0 2024-03-21 +1 11.0 2024-03-24 +2 106.0 2024-03-25 +1 72.0 2024-04-03 +2 2.0 2024-04-07 +1 1.0 2024-04-08 +3 2024-04-09 +1 60.0 2024-04-10 +2 15.0 2024-04-11 +2 81.0 2024-04-12 +1 10.0 2024-04-13 +2 88.0 2024-04-15 +3 74.0 2024-04-18 +3 86.0 2024-04-19 +1 63.0 2024-04-25 +1 42.0 2024-04-26 +1 91.0 2024-04-29 +1 1.0 2024-05-01 +2 35.0 2024-05-02 +1 34.0 2024-05-05 +1 15.0 2024-05-06 +1 58.0 2024-05-10 +1 4.0 2024-05-13 +2 119.0 2024-05-15 +1 27.0 2024-05-16 +1 16.0 2024-05-17 +1 20.0 2024-05-22 +1 53.0 2024-05-23 +1 3.0 2024-05-24 +1 30.0 2024-05-28 +3 39.0 2024-05-29 +1 20.0 2024-06-01 +2 28.0 2024-06-03 +1 13.0 2024-06-04 +1 73.0 2024-06-05 +1 10.0 2024-06-06 +1 74.0 2024-06-08 +2 113.0 2024-06-11 +2 89.0 2024-06-12 +2 367.0 2024-06-14 +1 12.0 2024-06-17 +1 241.0 2024-06-18 +6 264.0 2024-06-20 +2 2024-06-21 +1 33.0 2024-06-22 diff --git a/data/people/affiliations.md b/data/people/affiliations.md new file mode 100644 index 00000000..b9aa472e --- /dev/null +++ b/data/people/affiliations.md @@ -0,0 +1,4 @@ +- Number of affiliations: 154 +- Number of countries: 24 +- Number of contributors without affiliation: 171 +- Number of unknown affiliations: 0 diff --git a/data/affiliations.tsv b/data/people/affiliations.tsv similarity index 100% rename from data/affiliations.tsv rename to data/people/affiliations.tsv diff --git a/data/people/gender.md b/data/people/gender.md new file mode 100644 index 00000000..336f2b54 --- /dev/null +++ b/data/people/gender.md @@ -0,0 +1,6 @@ +- male: 177 +- female: 47 +- andy: 6 +- unknown: 80 +- mostly_male: 13 +- mostly_female: 2 diff --git a/docs/assets/img/affiliations.png b/docs/assets/img/affiliations.png deleted file mode 100644 index 71c080a3..00000000 Binary files a/docs/assets/img/affiliations.png and /dev/null differ diff --git a/docs/assets/img/citation_per_year.png b/docs/assets/img/citation_per_year.png deleted file mode 100644 index 13d13664..00000000 Binary files a/docs/assets/img/citation_per_year.png and /dev/null differ diff --git a/docs/assets/img/hemispheres_2070x1025.jpg b/docs/assets/img/hemispheres_2070x1025.jpg deleted file mode 100644 index f7aea8b6..00000000 Binary files a/docs/assets/img/hemispheres_2070x1025.jpg and /dev/null differ diff --git a/docs/assets/img/hemispheres_850x325.jpg b/docs/assets/img/hemispheres_850x325.jpg deleted file mode 100644 index 97e8d88f..00000000 Binary files a/docs/assets/img/hemispheres_850x325.jpg and /dev/null differ diff --git a/docs/assets/img/new_merch.png b/docs/assets/img/new_merch.png deleted file mode 100644 index fdd2b0e6..00000000 Binary files a/docs/assets/img/new_merch.png and /dev/null differ diff --git a/docs/assets/img/openneuro_data_growth.png b/docs/assets/img/openneuro_data_growth.png deleted file mode 100644 index de1e28bf..00000000 Binary files a/docs/assets/img/openneuro_data_growth.png and /dev/null differ diff --git a/docs/bep/beps.md b/docs/bep/beps.md index 75fbd729..12275a6d 100644 --- a/docs/bep/beps.md +++ b/docs/bep/beps.md @@ -22,55 +22,7 @@ Below is a table of BEPs that have been merged. The references of the final publication for those BEPS can be found in the BIDS [specification](https://bids-specification.readthedocs.io/en/latest/01-introduction.html#datatype-specific-publications). - -```mermaid -gantt - title completed BEP timeline - dateFormat YYYY-MM - tickInterval 6month - axisFormat %b-%Y - section BEP001 - Google doc :2017-02, 2020-06 - Pull request :2020-06, 2021-02 - section BEP002 - Google doc :2016-09, 2018-10 - Pull request :2018-10, 2023-08 - section BEP003 - Google doc :2016-02, 2018-12 - Pull request :2018-12, 2020-06 - section BEP005 - Google doc :2017-05, 2020-10 - Pull request :2020-10, 2021-02 - section BEP006 - Google doc :2017-06, 2018-12 - Pull request :2018-12, 2019-03 - section BEP007 - Google doc :2017-07, 2018-04 - section BEP008 - Google doc :2016-03, 2018-04 - section BEP009 - Google doc :2016-03, 2020-10 - Pull request :2020-10, 2021-04 - section BEP010 - Google doc :2017-04, 2018-12 - Pull request :2018-12, 2019-03 - section BEP018 - Google doc :2017-09, 2019-07 - Pull request :2019-07, 2020-04 - section BEP027 - Google doc :2019-05, 2023-09 - Pull request :2023-09, 2023-12 - section BEP029 - Google doc :2019-11, 2022-01 - Pull request :2022-01, 2023-03 - section BEP030 - Google doc :2020-04, 2021-05 - Pull request :2021-05, 2022-10 - section BEP031 - Google doc :2020-06, 2021-09 - Pull request :2021-09, 2022-02 -``` - +--8<-- "tmp/bids_timeline.html" {{ MACROS___generate_beps_table(file="beps_completed.yml", type="completed") }} diff --git a/docs/impact.md b/docs/impact.md index d8735f5d..a32f16c7 100644 --- a/docs/impact.md +++ b/docs/impact.md @@ -48,19 +48,16 @@ A listing of the previous grants can be found [here](./collaboration/acknowledgm ### Datasets -![](./assets/img/openneuro_data_growth.png) +--8<-- "tmp/openneuro_data_growth.html" + ### Citation Count -BIDS references are centralized in a [zotero group](https://www.zotero.org/groups/5111637/bids) +BIDS references are centralized in a [zotero group](https://www.zotero.org/groups/5111637/bids) You can also find them [in the specification](https://bids-specification.readthedocs.io/en/latest/introduction.html#citing-bids) -![](./assets/img/citation_per_year.png) - -#### Citation according to google scholar - -![](./assets/img/google_citations.png) +--8<-- "tmp/citation_per_year.html" ### GitHub stars @@ -108,22 +105,13 @@ we have over 300 credited contributors. Guessed with [gender-guesser](https://pypi.org/project/gender-guesser/) -- male: 177 -- female: 47 -- andy: 6 -- unknown: 80 -- mostly_male: 13 -- mostly_female: 2 +--8<-- "data/people/gender.md" #### Contributors affiliations -Number of known affiliations: 148 - -Number of authors without affiliation: 171 - -Number of unkwon affiliations: 19 +--8<-- "data/people/affiliations.md" -![](./assets/img/affiliations.png) +--8<-- "tmp/affiliations.html" ### GitHub dependents diff --git a/docs/tools/apps/dashboard.md b/docs/tools/apps/index.md similarity index 100% rename from docs/tools/apps/dashboard.md rename to docs/tools/apps/index.md diff --git a/makefile b/makefile index 0d02acdb..79df91a5 100644 --- a/makefile +++ b/makefile @@ -3,7 +3,7 @@ all: update serve: update mkdocs serve -update: update_from_spec update_faq update_contributors update_datasets_examples +update: update_from_spec update_faq update_contributors update_datasets_examples tmp_figures package.json: npm install `cat npm-requirements.txt` @@ -37,6 +37,29 @@ update_datasets_examples: @echo " ---------------------------------- " python examples/tools/print_dataset_listing.py docs/datasets/index.md + +# Figures +.PHONY: tmp/affiliations.html tmp/bids_timeline.html tmp/citation_per_year.html tmp/openneuro_data_growth.html + +tmp_figures: tmp/affiliations.html tmp/bids_timeline.html tmp/citation_per_year.html tmp/openneuro_data_growth.html + +tmp/affiliations.html: + @echo " ---------------------------------- " + python tools/build/figure_affiliations.py + +tmp/bids_timeline.html: + @echo " ---------------------------------- " + python tools/build/figure_bep_gantt.py + +tmp/citation_per_year.html: + @echo " ---------------------------------- " + python tools/build/figure_citation.py + +tmp/openneuro_data_growth.html: + @echo " ---------------------------------- " + python tools/build/figure_data_openneuro.py + + # Linting lint: remark diff --git a/mkdocs.yml b/mkdocs.yml index 92ae25c9..b8142061 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -172,20 +172,23 @@ nav: - contributors: standards/execution/contributors.md - Tools: - tools/index.md - - Validator: tools/validator.md + - Validator: + - tools/validator.md - Converters: - tools/converters/index.md - MRI and PET: tools/converters/mri-pet.md - MEEG: tools/converters/meeg.md - physio: tools/converters/physio.md - others: tools/converters/others.md - - BIDS apps: tools/apps/dashboard.md + - BIDS apps: tools/apps/index.md - Others: tools/others.md - Collaboration: - Governance: collaboration/governance.md - - Code of conduct: - - specification: specification/CODE_OF_CONDUCT.md - - starter_kit: starter_kit/src/CODE_OF_CONDUCT.md + - Code of conduct: specification/CODE_OF_CONDUCT.md + + # TODO have a single code of conduct + # - starter_kit: starter_kit/src/CODE_OF_CONDUCT.md + # TODO remove those pages from the website # until all the contributing pages have been refactored # see https://github.com/bids-standard/.github/issues/7 @@ -228,7 +231,7 @@ nav: - general_guidelines: extensions/docs/general_guidelines.md - guide: extensions/docs/guide.md - submission: extensions/docs/submission.md - - macros: specification/macros_doc.md + # - macros: specification/macros_doc.md - FAQ: - faq/index.md - general: faq/faq_general.md diff --git a/pyproject.toml b/pyproject.toml index 787f1ad1..b68ee6a8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -15,7 +15,7 @@ line-length = 79 [tool.codespell] ignore-words-list = "Acknowledgements,als,ans,asai,nd,manuel,te" -skip = ".git,env,specification,starter_kit,examples,apps,execution,pyproject.toml,data/affiliations.tsv,docs/collaboration/contributors.md,data/papers.json" +skip = ".git,env,specification,starter_kit,examples,apps,execution,pyproject.toml,data/**.tsv,data/**.json,docs/collaboration/contributors.md" [tool.hatch.build.hooks.vcs] version-file = "tools/utils/_version.py" diff --git a/requirements.in b/requirements.in index 52733b0f..84d06e54 100644 --- a/requirements.in +++ b/requirements.in @@ -1,11 +1,16 @@ faqtory +gender_guesser +geopy mkdocs-material[imaging] mkdocs-macros-plugin mkdocs-open-in-new-tab mkdocs-redirects mkdocs-rss-plugin +plotly>=5.3.1 pybids +rich ruamel.yaml tabulate +pyzotero file:specification/tools/schemacode -e file:tools diff --git a/requirements.txt b/requirements.txt index ad7ba8ff..d443b5bf 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,5 @@ # -# This file is autogenerated by pip-compile with Python 3.11 +# This file is autogenerated by pip-compile with Python 3.12 # by the following command: # # pip-compile --strip-extras requirements.in @@ -14,6 +14,8 @@ attrs==23.2.0 # referencing babel==2.15.0 # via mkdocs-material +bibtexparser==1.4.1 + # via pyzotero bids-validator==1.14.6 # via pybids file:specification/tools/schemacode @@ -50,10 +52,18 @@ docopt==0.6.2 # via num2words faqtory==1.1.3 # via -r requirements.in +feedparser==6.0.11 + # via pyzotero fonttools==4.53.0 # via matplotlib formulaic==0.5.2 # via pybids +gender-guesser==0.4.0 + # via -r requirements.in +geographiclib==2.0 + # via geopy +geopy==2.4.1 + # via -r requirements.in ghp-import==2.1.0 # via mkdocs gitdb==4.0.11 @@ -135,6 +145,7 @@ packaging==24.1 # matplotlib # mkdocs # nibabel + # plotly paginate==0.5.6 # via mkdocs-material pandas==2.2.2 @@ -151,6 +162,8 @@ pillow==10.3.0 # mkdocs-material platformdirs==4.2.2 # via mkdocs-get-deps +plotly==5.22.0 + # via -r requirements.in pybids==0.16.5 # via -r requirements.in pycparser==2.22 @@ -164,7 +177,9 @@ pygments==2.18.0 pymdown-extensions==10.8.1 # via mkdocs-material pyparsing==3.1.2 - # via matplotlib + # via + # bibtexparser + # matplotlib python-dateutil==2.9.0.post0 # via # ghp-import @@ -176,7 +191,9 @@ python-frontmatter==1.1.0 python-levenshtein==0.25.1 # via thefuzz pytz==2024.1 - # via pandas + # via + # pandas + # pyzotero pyyaml==6.0.1 # via # bidsschematools @@ -189,6 +206,8 @@ pyyaml==6.0.1 # pyyaml-env-tag pyyaml-env-tag==0.1 # via mkdocs +pyzotero==1.5.19 + # via -r requirements.in rapidfuzz==3.9.3 # via levenshtein referencing==0.35.1 @@ -198,9 +217,13 @@ referencing==0.35.1 regex==2024.5.15 # via mkdocs-material requests==2.32.3 - # via mkdocs-material + # via + # mkdocs-material + # pyzotero rich==12.6.0 - # via faqtory + # via + # -r requirements.in + # faqtory rpds-py==0.18.1 # via # jsonschema @@ -215,6 +238,8 @@ scipy==1.13.1 # pybids seaborn==0.13.2 # via bids-website +sgmllib3k==1.0.0 + # via feedparser six==1.16.0 # via python-dateutil smmap==5.0.1 @@ -223,6 +248,8 @@ sqlalchemy==2.0.30 # via pybids tabulate==0.9.0 # via -r requirements.in +tenacity==8.4.1 + # via plotly termcolor==2.4.0 # via mkdocs-macros-plugin thefuzz==0.19.0 diff --git a/tools/README.md b/tools/README.md index 2198f7dd..2d1197dc 100644 --- a/tools/README.md +++ b/tools/README.md @@ -49,3 +49,16 @@ The resulting citation count is then visualized using [Plotly](https://plotly.co in the same directory as the script. 1. A bar chart of the citation count will be displayed using your default browser. + +## Interactive figures + +- use plotly to create interactive HTML figures + +- HTML figures are not committed and saved in a `tmp` folder in the root of the repo. + +- HTML figures and other content that can be updated is "stored" in external files + that are injected into markdown files using [snippets](https://facelessuser.github.io/pymdown-extensions/extensions/snippets/) + +```text +--8<-- "tmp/bids_timeline.html" +``` diff --git a/tools/bids_website/utils.py b/tools/bids_website/utils.py index 078ba13a..42b040f1 100644 --- a/tools/bids_website/utils.py +++ b/tools/bids_website/utils.py @@ -94,7 +94,6 @@ def plot_neurostars(file, print_to_file=True): sns.despine(fig) fig.suptitle("Neurostars summary for 'BIDS' tag") - fig.show() if print_to_file: fig.savefig("output_neurostars.png", bbox_inches="tight") diff --git a/tools/build/create_dahsboard.py b/tools/build/dashboard_bids_app.py similarity index 73% rename from tools/build/create_dahsboard.py rename to tools/build/dashboard_bids_app.py index e9626fd6..51f79aec 100644 --- a/tools/build/create_dahsboard.py +++ b/tools/build/dashboard_bids_app.py @@ -31,20 +31,22 @@ else: if not app.get("ci"): - image = f"https://circleci.com/gh/{ app['gh'] }.svg?style=shield" - link = f"https://circleci.com/gh/{ app['gh'] }/tree/{ branch }" + image = f"https://circleci.com/gh/{app['gh']}.svg?style=shield" + link = f"https://circleci.com/gh/{app['gh']}/tree/{branch}" elif app["ci"] == "none": image = "https://img.shields.io/badge/CI-none-lightgrey" link = None elif app["ci"] == "travis": - image = f"https://app.travis-ci.com/{ app['gh'] }.svg?branch={ branch }" - link = f"https://app.travis-ci.com/{ app['gh'] }" + image = ( + f"https://app.travis-ci.com/{app['gh']}.svg?branch={branch}" + ) + link = f"https://app.travis-ci.com/{app['gh']}" elif app["ci"] == "gh": - image = f"https://github.com/{ app['gh'] }/actions/workflows/{ app['workflow'] }.yml/badge.svg?branch={ branch }" - link = f"https://github.com/{ app['gh'] }/actions/workflows/{ app['workflow'] }.yml/" + image = f"https://github.com/{app['gh']}/actions/workflows/{app['workflow']}.yml/badge.svg?branch={branch}" + link = f"https://github.com/{app['gh']}/actions/workflows/{app['workflow']}.yml/" else: image = "https://img.shields.io/badge/CI-UNKNOWN-darkgrey" @@ -57,7 +59,7 @@ ) version.append( - f"![version tag](https://img.shields.io/github/v/tag/{ app['gh'].lower() }?label=version)" + f"![version tag](https://img.shields.io/github/v/tag/{app['gh'].lower()}?label=version)" ) df = pd.DataFrame( diff --git a/tools/build/figure_affiliations.py b/tools/build/figure_affiliations.py new file mode 100644 index 00000000..10f252d7 --- /dev/null +++ b/tools/build/figure_affiliations.py @@ -0,0 +1,35 @@ +"""Plot affiliations on map.""" + +from __future__ import annotations + +import pandas as pd +import plotly.express as px +from bids_website.utils import data_dir, root_dir + +OUTPUT_DIR = root_dir() / "tmp" + + +def main(): + + output_file = data_dir() / "people" / "affiliations.tsv" + + df = pd.read_csv(output_file, sep="\t") + + fig = px.scatter_geo( + df, + lat=df.latitude, + lon=df.longitude, + hover_name="address", + projection="natural earth", + ) + + fig.update_layout(margin=dict(l=0, r=0, t=0, b=0)) + + # save as html + # NOTE: This file is ignored in git (see .gitignore) + OUTPUT_DIR.mkdir(exist_ok=True, parents=True) + fig.write_html(OUTPUT_DIR / "affiliations.html") + + +if __name__ == "__main__": + main() diff --git a/tools/bep_gantt_html_create.py b/tools/build/figure_bep_gantt.py similarity index 94% rename from tools/bep_gantt_html_create.py rename to tools/build/figure_bep_gantt.py index f076a4dd..b037c26b 100644 --- a/tools/bep_gantt_html_create.py +++ b/tools/build/figure_bep_gantt.py @@ -19,6 +19,8 @@ DATE_FORMAT = "%Y-%m" Y_AXIS_VALUE = "" +OUTPUT_DIR = root_dir() / "tmp" + def create_bep_timeline() -> type[go.Figure]: completd_beps = data_dir() / "beps" / "beps_completed.yml" @@ -35,7 +37,7 @@ def create_bep_timeline() -> type[go.Figure]: StartPR = bep.get("pull_request_created") Finish = bep["pull_request_merged"] - BEP = f"{bep['number']} - {bep['title']} " + BEP = f"{bep['number']}-{bep['display']}" if StartDoc and StartPR: df.append( @@ -178,18 +180,20 @@ def main(): ), ) + fig.update_yaxes(visible=True, showticklabels=False) + + fig.update_layout(margin=dict(l=0, r=0, t=0, b=0)) + fig = add_publications_to_timeline(fig) fig.update_layout(legend_font_size=15) fig.update_layout(title=dict(font=dict(size=30))) fig.update_layout(yaxis=dict(tickfont=dict(size=15))) - fig.show() - # save as html # NOTE: This file is ignored in git (see .gitignore) - (root_dir() / "tmp").mkdir(exist_ok=True, parents=True) - fig.write_html(root_dir() / "tmp" / "bids_timeline.html") + OUTPUT_DIR.mkdir(exist_ok=True, parents=True) + fig.write_html(OUTPUT_DIR / "bids_timeline.html") if __name__ == "__main__": diff --git a/tools/build/figure_citation.py b/tools/build/figure_citation.py new file mode 100644 index 00000000..638dd931 --- /dev/null +++ b/tools/build/figure_citation.py @@ -0,0 +1,59 @@ +from __future__ import annotations + +import pandas as pd +import plotly.express as px +from bids_website.utils import data_dir, root_dir + +INPUT_FILE = data_dir() / "count_citation.tsv" + +TMP_DIR = root_dir() / "tmp" +TMP_DIR.mkdir(parents=True, exist_ok=True) + + +def main(): + df = pd.read_csv(INPUT_FILE, sep="\t") + df = df.replace( + "Guidelines for the content and format of PET brain data in publications and archives", + "PET Guidelines", + ) + plot_citation_count(df) + + +def plot_citation_count(df: pd.DataFrame): + """ + Use Plotly to create a bar chart of the citation count per year stacked by paper. + """ + # taken from https://colorbrewer2.org/#type=qualitative&scheme=Paired&n=12 + cmap = [ + "#a6cee3", + "#1f78b4", + "#b2df8a", + "#33a02c", + "#fb9a99", + "#e31a1c", + "#fdbf6f", + "#ff7f00", + "#cab2d6", + "#6a3d9a", + "#ffff99", + "#b15928", + ] + cmap.reverse() + + fig = px.bar( + df, + x="years", + y="nb_citations", + color="papers", + title="Citation count per year", + labels={"years": "Year", "nb_citations": "Number of citations"}, + color_discrete_sequence=cmap, + ) + + fig.update_layout(margin=dict(l=0, r=0, t=40, b=0)) + + fig.write_html(TMP_DIR / "citation_per_year.html") + + +if __name__ == "__main__": + main() diff --git a/tools/build/figure_data_openneuro.py b/tools/build/figure_data_openneuro.py new file mode 100644 index 00000000..3b98b064 --- /dev/null +++ b/tools/build/figure_data_openneuro.py @@ -0,0 +1,63 @@ +#!/usr/bin/env python + +# from BIDS paper +# +# - OpenNeuro data are obtained from the openneuro API +# + +import pandas as pd +import plotly.graph_objs as go + +from plotly.subplots import make_subplots + +from bids_website.utils import root_dir, data_dir + +TMP_DIR = root_dir() / "tmp" + + +def main(): + + df = pd.read_csv( + data_dir() / "openneuro_datasets.tsv", + sep="\t", + ) + + # end_year = 24 # set to current year + 1 + # # July 2 is the midpoint of year + # midyears = pd.to_datetime([f"20{yr}-07-02" for yr in range(18, end_year)]).astype(int) + # midyears + + df["cumsum_datasets"] = df["n_datasets"].cumsum() + df["cumsum_subjects"] = df["n_subjects"].cumsum() + + fig = make_subplots(specs=[[{"secondary_y": True}]]) + for col in ["cumsum_datasets", "cumsum_subjects"]: + secondary_y = False + if col == "cumsum_subjects": + secondary_y = True + + fig.add_trace( + go.Scatter( + name=col.replace("cumsum_", ""), + x=df["release_dates"], + y=df[col], + mode="lines", + ), + secondary_y=secondary_y, + ) + fig.update_layout(title="Openneuro data growth", hovermode="x") + fig.update_yaxes( + title_text="Cumulative datasets", secondary_y=False, nticks=10 + ) + fig.update_yaxes( + title_text="Cumulative subjects", secondary_y=True, nticks=10 + ) + fig.update_xaxes(title_text="date") + + fig.update_layout(margin=dict(l=0, r=0, t=40, b=0)) + + fig.write_html(TMP_DIR / "openneuro_data_growth.html") + + +if __name__ == "__main__": + main() diff --git a/tools/count_citation.py b/tools/count_citation.py index 9e43cae3..b5040f3a 100644 --- a/tools/count_citation.py +++ b/tools/count_citation.py @@ -4,16 +4,22 @@ from pathlib import Path import pandas as pd -import plotly.express as px import requests from bids_website.utils import data_dir from pyzotero import zotero from rich import print +import os DEBUG = False -VERBOSE = False +VERBOSE = True MINIMUM_YEAR = 2016 +# TODO: switch this to a .env file +os.environ["OPEN_CITATIONS_ACCESS_TOKEN"] = "/home/remi/Documents/tokens/open_citations_access_token.txt" +TOKEN_FILE = os.environ.get("OPEN_CITATIONS_ACCESS_TOKEN", "") + +OUTPUT_FILE = data_dir() / "count_citation.tsv" + # requires token from https://opencitations.net/index/coci/api/v1/token # saved in token.txt @@ -29,7 +35,10 @@ def main(): for item in items: if VERBOSE: print(item) - title = item["data"].get("shortTitle") or item["data"].get("title") + title = ( + item["data"].get("shortTitle") + or item["data"].get("title").split(",")[0] + ) DOI = item["data"].get("DOI") if not DOI: @@ -41,24 +50,7 @@ def main(): print(papers) - output_file = data_dir() / "count_citation.tsv" - - df = load_dataframe_from_file(output_file) - - if df.empty: - df = query_api(papers) - save_dataframe_to_file(df, output_file) - - plot_citation_count(df) - - -def load_dataframe_from_file(file_path: Path) -> pd.DataFrame: - """ - Load DataFrame from file if it exists. - """ - if file_path.exists(): - return pd.read_csv(file_path, sep="\t") - return pd.DataFrame() + query_api(papers) def return_citation_count_per_year(citations_doi: str) -> dict[str, int]: @@ -86,7 +78,12 @@ def return_citation_count_per_year(citations_doi: str) -> dict[str, int]: print(f" querying: {citation}") if metadata := query_for_metadata(citation): year = metadata[0]["year"].split("-")[0] - if int(year) < MINIMUM_YEAR: + print(year) + try: + if int(year) < MINIMUM_YEAR: + continue + except: # noqa + print("skipping") continue if year in citation_count_per_year: citation_count_per_year[year] += 1 @@ -96,7 +93,7 @@ def return_citation_count_per_year(citations_doi: str) -> dict[str, int]: def query_for_metadata(doi: str) -> dict[str, str]: - with open("token.txt") as f: + with open(TOKEN_FILE) as f: token = f.read().strip() headers = {"authorization": token} api_call = f"https://opencitations.net/index/coci/api/v1/metadata/{doi}" @@ -128,30 +125,16 @@ def query_api(papers: dict[str, str]) -> dict[str, list[str] | list[int]]: df["papers"].append(paper_) df["years"].append(int(year)) df["nb_citations"].append(citation_count_per_year[year]) + pd.DataFrame(df).to_csv(OUTPUT_FILE, sep="\t", index=False) return pd.DataFrame(df) def save_dataframe_to_file(df: pd.DataFrame, file_path: Path): - """Save DataFrame to TSV if output file does not exist.""" - if not df.empty and not file_path.exists(): + """Save DataFrame to TSV""" + if not df.empty: df.to_csv(file_path, sep="\t", index=False) -def plot_citation_count(df: pd.DataFrame): - """ - Use Plotly to create a bar chart of the citation count per year stacked by paper. - """ - fig = px.bar( - df, - x="years", - y="nb_citations", - color="papers", - title="Citation count per year", - labels={"years": "Year", "nb_citations": "Number of citations"}, - ) - fig.show() - - if __name__ == "__main__": main() diff --git a/tools/figure_data_openneuro.py b/tools/data_openneuro.py similarity index 87% rename from tools/figure_data_openneuro.py rename to tools/data_openneuro.py index 286c3c5b..ecb71366 100644 --- a/tools/figure_data_openneuro.py +++ b/tools/data_openneuro.py @@ -10,17 +10,15 @@ import os from collections import defaultdict from datetime import datetime -from pathlib import Path import pandas as pd -import plotly.graph_objs as go import requests -from plotly.subplots import make_subplots +from bids_website.utils import data_dir, root_dir from rich import print UPDATE = False -TMP_DIR = Path(__file__).parent / "tmp" +TMP_DIR = root_dir() / "tmp" TMP_DIR.mkdir(parents=True, exist_ok=True) scan_dict = { @@ -364,47 +362,12 @@ def main(): by="ReleaseDate" ) - df_plotting["cumsum_datasets"] = df_plotting["n_datasets"].cumsum() - df_plotting["cumsum_subjects"] = df_plotting["n_subjects"].cumsum() - release_dates = df_plotting.index.astype(int) - df_plotting.to_csv(TMP_DIR / "df.tsv", sep="\t", index=False) - - # end_year = 24 # set to current year + 1 - # # July 2 is the midpoint of year - # midyears = pd.to_datetime([f"20{yr}-07-02" for yr in range(18, end_year)]).astype(int) - # midyears - - release_datetimes = pd.to_datetime(release_dates) - - fig = make_subplots(specs=[[{"secondary_y": True}]]) - for col in ["cumsum_datasets", "cumsum_subjects"]: - secondary_y = False - if col == "cumsum_subjects": - secondary_y = True - - fig.add_trace( - go.Scatter( - name=col.replace("cumsum_", ""), - x=release_datetimes, - y=df_plotting[col], - mode="lines", - ), - secondary_y=secondary_y, - ) - fig.update_layout(title="Openneuro data growth", hovermode="x") - fig.update_yaxes( - title_text="Cumulative datasets", secondary_y=False, nticks=10 - ) - fig.update_yaxes( - title_text="Cumulative subjects", secondary_y=True, nticks=10 - ) - fig.update_xaxes(title_text="date") + df_plotting["release_dates"] = pd.to_datetime(release_dates) - # fig.write_html(Path(__file__).parent / ".." / "images" / "openneuro_data_growth.html") - fig.write_image( - Path(__file__).parent / ".." / "images" / "openneuro_data_growth.png" + df_plotting.to_csv( + data_dir() / "openneuro_datasets.tsv", sep="\t", index=False ) diff --git a/tools/guess_gender_contributors.py b/tools/guess_gender_contributors.py index b759af23..08c6cfaa 100644 --- a/tools/guess_gender_contributors.py +++ b/tools/guess_gender_contributors.py @@ -7,28 +7,37 @@ import gender_guesser.detector as gender import ruamel.yaml +from bids_website.utils import bids_spec_dir, data_dir -from tools.utils.utils import bids_spec_dir +yaml = ruamel.yaml.YAML(typ="rt") -with open(bids_spec_dir() / "CITATION.cff") as f: - cff = ruamel.yaml.load(f, Loader=ruamel.yaml.RoundTripLoader) -results = { - "male": 0, - "female": 0, - "andy": 0, - "unknown": 0, - "mostly_male": 0, - "mostly_female": 0, -} +def main(): -d = gender.Detector() -for author in cff["authors"]: - guess = d.get_gender(author["given-names"]) - print(f"{author['given-names']}: {guess}") - results[guess] += 1 + with open(bids_spec_dir() / "CITATION.cff") as f: + cff = yaml.load(f) -print() + results = { + "male": 0, + "female": 0, + "andy": 0, + "unknown": 0, + "mostly_male": 0, + "mostly_female": 0, + } -for key in results: - print(f"- {key}: {results[key]}") + d = gender.Detector() + for author in cff["authors"]: + guess = d.get_gender(author["given-names"]) + print(f"{author['given-names']}: {guess}") + results[guess] += 1 + + output_file = data_dir() / "people" / "gender.md" + + with open(output_file, "w") as f: + for key in results: + f.write(f"- {key}: {results[key]}\n") + + +if __name__ == "__main__": + main() diff --git a/tools/locate_affiliations.py b/tools/locate_affiliations.py index 427fab9a..20fa4b51 100644 --- a/tools/locate_affiliations.py +++ b/tools/locate_affiliations.py @@ -4,7 +4,6 @@ - list affiliations - locate longitude and latitude of each affiliation - write to file -- plot on map """ from __future__ import annotations @@ -12,14 +11,15 @@ import re import pandas as pd -import plotly.express as px import ruamel.yaml -from bids_website.utils import bids_spec_dir, data_dir, figures_dir +from bids_website.utils import bids_spec_dir, data_dir from geopy.geocoders import Nominatim from rich import print yaml = ruamel.yaml.YAML(typ="rt") +UPDATE = False + def main(): with open(bids_spec_dir() / "CITATION.cff") as f: @@ -31,63 +31,54 @@ def main(): if "affiliation" in author ] + columns = ["address", "city", "country", "longitude", "latitude"] + df = { + "affiliation": sorted(list(set(affiliations))), + "address": [], + "city": [], + "country": [], + "longitude": [], + "latitude": [], + } + + geolocator = Nominatim(user_agent="my_request") + for affiliation_ in df["affiliation"]: + print(f"\nLocating: {affiliation_}") + location = get_location(geolocator, affiliation_) + if location is None: + print(f" could not locate: {affiliation_}") + for column in columns: + df[column].append("n/a") + continue + print(" address: ", location.address) + df["city"].append(location.raw["address"].get("city")) + df["country"].append(location.raw["address"].get("country")) + df["address"].append(location.address) + df["longitude"].append(location.longitude) + df["latitude"].append(location.latitude) + + df = pd.DataFrame(df) + output_file = data_dir() / "people" / "affiliations.tsv" - if output_file.exists(): - df = pd.read_csv(output_file, sep="\t") - - else: - columns = ["address", "city", "country", "longitude", "latitude"] - df = { - "affiliation": sorted(list(set(affiliations))), - "address": [], - "city": [], - "country": [], - "longitude": [], - "latitude": [], - } - - geolocator = Nominatim(user_agent="my_request") - for affiliation_ in df["affiliation"]: - print(f"\nLocating: {affiliation_}") - location = get_location(geolocator, affiliation_) - if location is None: - print(f" could not locate: {affiliation_}") - for column in columns: - df[column].append("n/a") - continue - print(" address: ", location.address) - df["city"].append(location.raw["address"].get("city")) - df["country"].append(location.raw["address"].get("country")) - df["address"].append(location.address) - df["longitude"].append(location.longitude) - df["latitude"].append(location.latitude) - - df = pd.DataFrame(df) - df.to_csv(output_file, index=False, sep="\t") - - print(f"Number of affiliations: {len(affiliations)}") - nb_without_affiliation = sum( - "affiliation" not in author for author in cff["authors"] - ) - nb_countries = len(set(df["country"])) - print(f"Number of countries: {nb_countries}") - print(f"Number of authors without affiliation: {nb_without_affiliation}") - unknown_affiliations = df["address"].isna().sum() - print(f"Number of unknown affiliations: {unknown_affiliations}") - - planet_slider_fig = px.scatter_geo( - df, - lat=df.latitude, - lon=df.longitude, - hover_name="address", - projection="natural earth", - ) + df.to_csv(output_file, index=False, sep="\t") - planet_slider_fig.show() + output_file = data_dir() / "people" / "affiliations.md" - planet_slider_fig.write_image( - figures_dir() / "affiliations.png", width=800, height=400, scale=2 - ) + with open(output_file, "w") as f: + f.write(f"- Number of affiliations: {len(affiliations)}\n") + + nb_countries = len(set(df["country"])) + f.write(f"- Number of countries: {nb_countries}\n") + + nb_without_affiliation = sum( + "affiliation" not in author for author in cff["authors"] + ) + f.write( + f"- Number of contributors without affiliation: {nb_without_affiliation}\n" + ) + + unknown_affiliations = df["address"].isna().sum() + f.write(f"- Number of unknown affiliations: {unknown_affiliations}\n") def get_location(geolocator, affiliation): diff --git a/tools/plot_google_citations.py b/tools/plot_google_citations.py index bbca6d08..12a940d2 100644 --- a/tools/plot_google_citations.py +++ b/tools/plot_google_citations.py @@ -25,4 +25,3 @@ title="Citation count per year", labels={"years": "Year", "nb_citations": "Number of citations"}, ) -fig.show() diff --git a/tools/pyproject.toml b/tools/pyproject.toml index 19b7a8f8..9980d1f8 100644 --- a/tools/pyproject.toml +++ b/tools/pyproject.toml @@ -18,15 +18,9 @@ ci = [ # but not for the utilities dev = [ "beautifulsoup4", - "gender_guesser", - "geopy", - "plotly>=5.3.1", "pygithub", - "pyzotero", - "rich", "requests>=2.25.1", "requests_mock", - "ruamel.yaml", "tqdm" ] test = [