Decreased amyloid-related structure-function coupling in preclinical Alzheimer's disease.
The 9 matches · 3 of them tie a paragraph to a whole file, not to given lines: weak matches, whose lines are not tinted
- [1] § Materials and Methods › Statistics and reproducibility › Transcriptomic determinants of amyloid-related structure–function coupling ↔ abagen/reporting.py, lines 105–169 · score 0.78 · post mortem brains, Allen Human Brain, female, abagen, AHBA, microarray
- [2] § Materials and Methods › Structural-decoupling index (SDI) computation ↔ Code_NCOMMS/Matlab/GSP_FullPipeline.m, lines 5–10 · score 0.70 · graph Laplacian, fMRI, structural connections, pipeline, harmonics, signal
- [3] § Materials and Methods › Imaging data acquisition & processing › Resting-state fMRI preprocessing and functional connectome computation ↔ Code_NCOMMS/Matlab/BrainGraphTools/show_FSmesh.m, the whole file · a weak match · score 0.60 · FreeSurfer, subdivides, algorithm, dorsal, ventral, matrices
- [4] § Materials and Methods › Graph metrics and network topology analysis ↔ Code_NCOMMS/Matlab/cnm/sw_net.m, the whole file · a weak match · score 0.60 · clustering coefficient, Diagonal, shortest, undirected, edges, node
- [5] § Materials and Methods › Imaging data acquisition & processing › Diffusion-weighted imaging preprocessing and structural connectome computation ↔ abagen/correct.py, lines 438–529 · score 0.58 · MNI space, volume, symmetric, cortical, parcels, parcellation
- [6] § Materials and Methods › Imaging data acquisition & processing › Resting-state fMRI preprocessing and functional connectome computation ↔ abagen/cli/run.py, lines 59–123 · score 0.57 · pre processed, noise, boundary, filtering, parcels, space
- [7] § Materials and Methods › Statistics and reproducibility › Transcriptomic determinants of amyloid-related structure–function coupling ↔ abagen/datasets/fetchers.py, lines 72–160 · score 0.57 · Allen Human Brain, abagen, adult, Ontology, transcriptomic, microarray
- [8] § Materials and Methods › Graph metrics and network topology analysis ↔ Code_NCOMMS/Matlab/cnm/avgClusteringCoefficient.m, the whole file · a weak match · score 0.52 · clustering coefficient, undirected, zero, node, matrices, graph
- [9] § Materials and Methods › Imaging data acquisition & processing › Diffusion-weighted imaging preprocessing and structural connectome computation ↔ abagen/allen.py, lines 83–142 · score 0.51 · terminated, native, intensity, tissue, MNI, filtering
Paper
Loaded from Europe PMC by your browser, not stored by OSCR: doi.org · Europe PMC
The paper is loaded when this pane is shown.
The authors' code
Python · 625 lines · 27 KB · BSD-3-Clause · 1 match
- # -*- coding: utf-8 -*-
- """
- Functions for generating workflow methods reports
- Note: all text contained within this module is released under a `CC-0 license
- <https://creativecommons.org/publicdomain/zero/1.0/>`_.
- """
- import logging
- import numpy as np
- from . import __version__
- from .datasets import check_donors, fetch_donor_info
- from .images import coerce_atlas_to_dict
- from .utils import first_entry
- LGR = logging.getLogger('abagen')
- METRICS = {
- np.mean: 'mean',
- np.median: 'median'
- }
- REFERENCES = dict(
- A2019N=('Arnatkevic̆iūtė, A., Fulcher, B. D., & Fornito, A. (2019). '
- 'A practical guide to linking brain-wide gene expression and '
- 'neuroimaging data. Neuroimage, 189, 353-367.'),
- F2016P=('Fulcher, B. D., & Fornito, A. (2016). A transcriptional '
- 'signature of hub connectivity in the mouse connectome. '
- 'Proceedings of the National Academy of Sciences, 113(5), '
- '1435-1440.'),
- F2013J=('Fulcher, B. D., Little, M. A., & Jones, N. S. (2013). '
- 'Highly comparative time-series analysis: the empirical '
- 'structure of time series and their methods. Journal of '
- 'the Royal Society Interface, 10(83), 20130048.'),
- H2012N=('Hawrylycz, M. J., Lein, E. S., Guillozet-Bongaarts, A. L., '
- 'Shen, E. H., Ng, L., Miller, J. A., ... & Jones, A. R. '
- '(2012). An anatomically comprehensive atlas of the adult '
- 'human brain transcriptome. Nature, 489(7416), 391-399.'),
- H2015N=('Hawrylycz, M., Miller, J. A., Menon, V., Feng, D., '
- 'Dolbeare, T., Guillozet-Bongaarts, A. L., ... & Lein, E. '
- '(2015). Canonical genetic signatures of the adult human '
- 'brain. Nature Neuroscience, 18(12), 1832.'),
- M2021B=('Markello, R.D., Arnatkevic̆iūtė, A., Poline, J-B., Fulcher, B. '
- 'D., Fornito, A., & Misic, B. (2021). Standardizing workflows in '
- 'imaging transcriptomics with the abagen toolbox. Biorxiv.'),
- P2017G=('Parkes, L., Fulcher, B. D., Yücel, M., & Fornito, A. '
- '(2017). Transcriptional signatures of connectomic '
- 'subregions of the human striatum. Genes, Brain and '
- 'Behavior, 16(7), 647-663.'),
- Q2002N=('Quackenbush, J. (2002). Microarray data normalization and '
- 'transformation. Nature Genetics, 32(4), 496-501.'),
- R2018N=('Romero-Garcia, R., Whitaker, K. J., Váša, F., Seidlitz, '
- 'J., Shinn, M., Fonagy, P., ... & NSPN Consortium. (2018). '
- 'Structural covariance networks are coupled to expression '
- 'of genes enriched in supragranular layers of the human '
- 'cortex. NeuroImage, 171, 256-267.')
- )
- class Report:
- """ Generates report of methods for :func:`abagen.get_expression_data()`
- Refer to the doc-string of the workflow for an overview of paramter options
- """
- def __init__(self, atlas, atlas_info=None, *, ibf_threshold=0.5,
- probe_selection='diff_stability', donor_probes='aggregate',
- lr_mirror=None, missing=None, tolerance=2, sample_norm='srs',
- gene_norm='srs', norm_matched=True, norm_structures=False,
- region_agg='donors', agg_metric='mean', corrected_mni=True,
- reannotated=True, donors='all', return_donors=False,
- data_dir=None, counts=None, n_probes=None, n_genes=None):
- efflevel = LGR.getEffectiveLevel()
- LGR.setLevel(100)
- atlas, self.group_atlas = \
- coerce_atlas_to_dict(atlas, donors, atlas_info=atlas_info,
- data_dir=data_dir)
- self.atlas = first_entry(atlas)
- self.atlas_info = self.atlas.atlas_info
- self.ibf_threshold = ibf_threshold
- self.probe_selection = probe_selection
- self.donor_probes = donor_probes
- self.lr_mirror = lr_mirror
- self.missing = missing
- self.tolerance = tolerance
- self.sample_norm = sample_norm
- self.gene_norm = gene_norm
- self.norm_matched = norm_matched
- self.norm_structures = norm_structures
- self.region_agg = region_agg
- self.agg_metric = METRICS.get(agg_metric, agg_metric)
- self.corrected_mni = corrected_mni
- self.reannotated = reannotated
- self.donors = donors
- self.return_donors = return_donors
- self.counts = counts
- self.n_probes = n_probes
- self.n_genes = n_genes
- self.body = self.gen_report()
- LGR.setLevel(efflevel)
- def gen_report(self):
- """ Generates main text of report
- """
- report = ''
- report += """
- Regional microarry expression data were obtained from {n_donors}
- post-mortem brains ({n_female} female, ages {min}--{max}, {mean:.2f}
- +/- {std:.2f}) provided by the Allen Human Brain Atlas (AHBA,
- https://human.brain-map.org; [H2012N]). Data were processed with the
- abagen toolbox (version {vers}; https://github.com/rmarkello/abagen;
- [M2021B])
- """.format(**_get_donor_demographics(self.donors), vers=__version__)
- if self.atlas.volumetric and self.group_atlas:
- report += """
- using a {n_region}-region volumetric atlas in MNI space.<br>
- """.format(n_region=len(self.atlas.labels))
- elif not self.atlas.volumetric and self.group_atlas:
- report += """
- using a {n_region}-region surface-based atlas in MNI space.<br>
- """.format(n_region=len(self.atlas.labels))
- elif self.atlas.volumetric and not self.group_atlas:
- report += """
- using a {n_region}-region volumetric atlas, independently aligned
- to each donor's native MRI space.<br>
- """.format(n_region=len(self.atlas.labels))
- else:
- report += ".<br>"
- if self.reannotated:
- report += """
- First, microarray probes were reannotated using data provided by
- [A2019N]; probes not matched to a valid Entrez ID were discarded.
- """
- else:
- report += """
- First, microarray probes not matched to a valid Entrez ID were
- discarded.
- """
- if self.ibf_threshold > 0:
- report += """
- Next, probes were filtered based on their expression intensity
- relative to background noise [Q2002N], such that probes with
- intensity less than the background in >={threshold:.2f}% of samples
- across donors were discarded
- """.format(threshold=self.ibf_threshold * 100)
- if self.n_probes is not None:
- report += """
- , yielding {n_probes:,} probes
- """.format(n_probes=self.n_probes)
- report += "."
- if self.probe_selection == 'average':
- report += """
- When multiple probes indexed the expression of the same gene we
- calculated the mean expression across probes.
- """
- elif self.probe_selection == 'diff_stability':
- report += r"""
- When multiple probes indexed the expression of the same gene, we
- selected and used the probe with the most consistent pattern of
- regional variation across donors (i.e., differential stability;
- [H2015N]), calculated with:<br>
- $$ \Delta_{{S}}(p) = \frac{{1}}{{\binom{{N}}{{2}}}} \,
- \sum_{{i=1}}^{{N-1}} \sum_{{j=i+1}}^{{N}}
- \rho[B_{{i}}(p), B_{{j}}(p)] $$<br>
- where $ \rho $ is Spearman's rank correlation of the expression of
- a single probe, p, across regions in two donors $B_{{i}}$ and
- $B_{{j}}$, and N is the total number of donors. Here, regions
- correspond to the structural designations provided in the ontology
- from the AHBA.
- """
- elif self.probe_selection == "pc_loading":
- report += """
- When multiple probes indexed the expression of the same gene we
- selected and used the probe with the highest loading on the first
- principal component taken from a decomposition of probe expression
- across samples from all donors [P2017G].
- """
- elif self.probe_selection == "max_intensity":
- report += """
- When multiple probes indexed the expression of the same gene we
- selected and used the probe with the highest mean intensity across
- samples.
- """
- elif self.probe_selection == "max_variance":
- report += """
- When multiple probes indexed the expression of the same gene we
- selected and used the probe with the highest variance across
- samples.
- """
- elif self.probe_selection == "corr_intensity":
- report += """
- When multiple probes indexed the expression of the same gene we
- selected and used the expression profile of a single representative
- probe. For genes where only two probes were available we selected
- the probe with the highest mean intensity across samples; where
- three or more probes were available, we calculated the correlation
- of probe expression across samples and selected the probe with the
- highest average correlation.
- """
- elif self.probe_selection == "corr_variance":
- report += """
- When multiple probes indexed the expression of the same gene we
- selected and used the expression profile of a single representative
- probe. For genes where only two probes were available we selected
- the probe with the highest variance across samples; where three or
- more probes were available, we calculated the correlation of probe
- expression across samples and selected the probe with the highest
- average correlation.
- """
- elif self.probe_selection == "rnaseq":
- report += """
- When multiple probes indexed the expression of the same gene we
- selected and used the probe with the most consistent pattern of
- regional expression to RNA-seq data (available for two donors in
- the AHBA). That is, we calculated the Spearman’s rank correlation
- between each probes' microarray expression and RNA-seq expression
- data of the corresponding gene, and selected the probe with the
- highest correspondence. Here, regions correspond to the structural
- designations provided in the ontology from the AHBA.
- """
- if (self.donor_probes == "aggregate" and self.probe_selection not in
- ['average', 'diff_stability', 'rnaseq']):
- report += """
- The selection of probes was performed using sample expression data
- aggregated across all donors.<br>
- """
- elif (self.donor_probes == "aggregate" and self.probe_selection in
- ['average', 'diff_stability', 'rnaseq']):
- report += "<br>"
- elif self.donor_probes == "independent":
- report += """
- The selection of probes was performed independently for each donor,
- such that the probes chosen to represent each gene could differ
- across donors.<br>
- """
- elif self.donor_probes == "common":
- report += """
- The selection of probes was performed independently for each donor,
- and the probe most commonly selected across all donors was chosen
- to represent the expression of each gene for all donors.<br>
- """
- if self.corrected_mni and self.group_atlas:
- report += """
- The MNI coordinates of tissue samples were updated to those
- generated via non-linear registration using the Advanced
- Normalization Tools (ANTs; https://github.com/chrisfilo/alleninf).
- """
- if self.lr_mirror == 'bidirectional':
- report += """
- To increase spatial coverage, tissue samples were mirrored
- bilaterally across the left and right hemispheres [R2018N].
- """
- elif self.lr_mirror == 'leftright':
- report += """
- To increase spatial coverage, tissue samples in the left hemisphere
- were mirrored into the right hemisphere [R2018N].
- """
- elif self.lr_mirror == 'rightleft':
- report += """
- To increase spatial coverage, tissue samples in the right
- hemisphere were mirrored into the left hemisphere [R2018N].
- """
- if self.tolerance == 0 and not self.atlas.volumetric:
- report += """
- Samples were assigned to brain regions by minimizing the Euclidean
- distance between the {space} coordinates of each sample and the
- nearest surface vertex. Samples where the Euclidean distance to the
- nearest vertex was greater than the mean distance for all samples
- belonging to that donor were excluded.
- """.format(space='MNI' if self.group_atlas else 'native voxel')
- elif self.tolerance == 0 and self.atlas.volumetric:
- report += """
- Samples were assigned to brain regions in the provided atlas only
- if their {space} coordinates were directly within a voxel belonging
- to a parcel.
- """.format(space='MNI' if self.group_atlas else 'native voxel')
- elif self.tolerance > 0 and not self.atlas.volumetric:
- report += """
- Samples were assigned to brain regions by minimizing the Euclidean
- distance between the {space} coordinates of each sample and the
- nearest surface vertex. Samples where the Euclidean distance to the
- nearest vertex was more than {tolerance} standard deviations above
- the mean distance for all samples belonging to that donor were
- excluded.
- """.format(space='MNI' if self.group_atlas else 'native voxel',
- tolerance=self.tolerance)
- elif self.tolerance > 0 and self.atlas.volumetric:
- report += """
- Samples were assigned to brain regions in the provided atlas if
- their {space} coordinates were within {tolerance} mm of a given
- parcel.
- """.format(space='MNI' if self.group_atlas else 'native voxel',
- tolerance=self.tolerance)
- elif self.tolerance < 0 and not self.atlas.volumetric:
- report += """
- Samples were assigned to brain regions by minimizing the Euclidean
- distance between the {space} coordinates of each sample and the
- nearest surface vertex. Samples where the Euclidean distance to the
- nearest vertex was more than {tolerance}mm were excluded.
- """.format(space='MNI' if self.group_atlas else 'native voxel',
- tolerance=abs(self.tolerance))
- if self.atlas_info is not None:
- report += """
- To reduce the potential for misassignment, sample-to-region
- matching was constrained by hemisphere and gross structural
- divisions (i.e., cortex, subcortex/brainstem, and cerebellum, such
- that e.g., a sample in the left cortex could only be assigned to an
- atlas parcel in the left cortex; [A2019N]).
- """
- if self.missing == 'centroids':
- report += """
- If a brain region was not assigned a sample from any donor based on
- the above procedure, the tissue sample closest to the centroid of
- that parcel was identified independently for each donor. The
- average of these samples was taken across donors, weighted by the
- distance between the parcel centroid and the sample, to obtain an
- estimate of the parcellated expression values for the missing
- region.
- """
- if self.counts is not None:
- n_missing = np.sum(self.counts.sum(axis=1) == 0)
- if n_missing > 0:
- report += """
- This procedure was performed for {n_missing} regions that
- were not assigned tissue samples.
- """.format(n_missing=n_missing)
- elif self.missing == 'interpolate':
- report += """
- If a brain region was not assigned a tissue sample based on the
- above procedure, every {node} in the region was mapped to the
- nearest tissue sample from the donor in order to generate a dense,
- interpolated expression map. The average of these expression values
- was taken across all {nodes} in the region, weighted by the
- distance between each {node} and the sample mapped to it, in order
- to obtain an estimate of the parcellated expression values for the
- missing region.
- """.format(node='voxel' if self.atlas.volumetric else 'vertex',
- nodes='voxels' if self.atlas.volumetric else 'vertices')
- if self.norm_matched:
- report += """
- All tissue samples not assigned to a brain region in the provided
- atlas were discarded.
- """
- report += "<br>"
- if self.sample_norm is not None:
- report += """
- Inter-subject variation was addressed {}
- """.format(_get_norm_procedure(self.sample_norm, 'sample_norm'))
- if self.gene_norm is None:
- pass
- elif self.gene_norm == self.sample_norm:
- report += """
- Gene expression values were then normalized across tissue samples
- using an identical procedure.
- """
- elif (self.gene_norm != self.sample_norm
- and self.sample_norm is not None):
- report += """
- Inter-subject variation in gene expression was then addressed {}
- """.format(_get_norm_procedure(self.gene_norm, 'gene_norm'))
- elif self.gene_norm != self.sample_norm and self.sample_norm is None:
- report += """
- Inter-subject variation was addressed {}
- """.format(_get_norm_procedure(self.gene_norm, 'gene_norm'))
- if not self.norm_matched and not self.norm_structures:
- report += """
- All available tissue samples were used in the normalization process
- regardless of whether they were assigned to a brain region.
- """
- elif not self.norm_matched and self.norm_structures:
- report += """
- All available tissue samples were used in the normalization process
- regardless of whether they were matched to a brain region; however,
- normalization was performed separately for samples in distinct
- structural classes (i.e., cortex, subcortex/brainstem, cerebellum).
- """
- elif self.norm_matched and self.norm_structures:
- report += """
- Normalization was performed separately for samples in distinct
- structural classes (i.e., cortex, subcortex/brainstem, cerebellum).
- """
- if not self.norm_matched and self.gene_norm is not None:
- report += """
- Tissue samples not matched to a brain region were discarded after
- normalization.
- """
- if self.region_agg == 'donors' and self.agg_metric == 'mean':
- report += """
- Samples assigned to the same brain region were averaged separately
- for each donor{donors}, yielding a regional expression matrix
- {n_donors}
- """.format(donors=' and then across donors' if
- not self.return_donors else '',
- n_donors=' for each donor ' if
- self.return_donors else '')
- elif self.region_agg == 'samples' and self.agg_metric == 'mean':
- report += """
- Samples assigned to the same brain region were averaged across all
- donors, yielding a regional expression matrix
- """
- elif self.region_agg == 'donors' and self.agg_metric == 'median':
- report += """
- The median value of samples assigned to the same brain region was
- computed separately for each donor{donors}, yielding a regional
- expression matrix{n_donors}
- """.format(donors=' and then across donors' if
- not self.return_donors else '',
- n_donors=' for each donor' if
- self.return_donors else '')
- elif self.region_agg == 'samples' and self.agg_metric == 'median':
- report += """
- The median value of samples assigned to the same brain region was
- computed across donors, yielding a single regional expression
- matrix
- """
- if self.n_genes is not None:
- report += """
- with {n_region} rows, corresponding to brain regions, and
- {n_genes:,} columns, corresponding to the retained genes
- """.format(n_region=len(self.atlas.labels),
- n_genes=self.n_genes)
- report += "\b."
- report += str(_add_references(report))
- return _sanitize_text(report)
- def _sanitize_text(text):
- """ Cleans up line and paragraph breaks in `text`
- """
- text = ' '.join(text.replace('\n', ' ').split())
- return text.replace('<br> ', '\n\n') \
- .replace('<p>', '\n')
- def _get_donor_demographics(donors):
- """
- Gets demographic info about the requested `donors`
- Parameters
- ----------
- donors : list, optional
- List of donors. Can be either donor numbers or UID. If not specified
- will use all available donors. Note that donors '9861' and '10021'
- have samples from both left + right hemispheres; all other donors have
- samples from the left hemisphere only. Default: 'all'
- Returns
- -------
- info : dict
- With keys ['n_donor', 'n_female','min', 'max', 'mean', 'std']. The
- values represent features of the age distribution of requested donors.
- """
- donors = [int(i) for i in check_donors(donors)]
- info = fetch_donor_info().set_index('uid').loc[donors]
- age_info = info['age'].describe()
- dinfo = dict(n_donors=len(info), n_female=sum(info['sex'] == 'F'))
- dinfo.update(age_info.loc[['min', 'max', 'mean', 'std']].to_dict())
- return dinfo
- def _get_norm_procedure(norm, parameter):
- """
- Returns methods description of the provided `norm`
- Parameters
- ----------
- norm : str
- Normalization procedure
- Returns
- -------
- procedure : str
- Reporting procedures
- """
- if parameter not in ('sample_norm', 'gene_norm'):
- raise ValueError(f'Invalid norm parameter {parameter}')
- if parameter == 'sample_norm':
- mod = ('tissue sample expression values across genes')
- suff = ('tissue sample across genes')
- else:
- mod = ('gene expression values across tissue samples')
- suff = ('gene across tissue samples')
- sigmoid = r"""
- independently for each donor using a sigmoid function [F2016P]:<br>
- $$ x_{{norm}} = \frac{{1}}{{1 + \exp(-\frac{{(x - \overline{{x}})}}
- {{\sigma_{{x}}}})}} $$<br>
- where $\bar{{x}}$ is the arithmetic mean and $\sigma_{{x}}$ is the
- sample standard deviation of the expression of a single
- """
- robust_sigmoid = r"""
- using a robust sigmoid function [F2013J]:<br>
- $$ x_{{norm}} = \frac{{1}}{{1 + \exp(-\frac{{(x-\langle x \rangle)}}
- {{\text{{IQR}}_{{x}}}})}} $$<br>
- where $\langle x \rangle$ is the median and $\text{{IQR}}_{{x}}$
- is the normalized interquartile range of the expression of a single
- """
- rescale = r"""
- Normalized expression values were then rescaled to the unit interval: <br>
- $$ x_{{scaled}} = \frac{{x_{{norm}} - \min(x_{{norm}})}}
- {{\max(x_{{norm}}) - \min(x_{{norm}})}} $$<br>
- """
- procedure = ''
- if norm in ['center', 'demean']:
- procedure += """
- by demeaning {mod} independently for each donor.
- """.format(mod=mod)
- elif norm == 'zscore':
- procedure += """
- by mean- and variance-normalizing (i.e., z-scoring) {mod} independently
- for each donor.
- """.format(mod=mod)
- elif norm == 'minmax':
- procedure += r"""
- by rescaling {mod} to the unit interval independently for each donor:
- <br>
- $$ x_{{{{scaled}}}} = \frac{{{{x - \min(x)}}}}{{{{\max(x) - \min(x)}}}}
- $$<br>
- """.format(mod=mod)
- elif norm in ['sigmoid', 'sig']:
- procedure += r"""
- by normalizing {mod} {sigmoid} {suff}.
- """.format(mod=mod, sigmoid=sigmoid, suff=suff)
- elif norm in ['scaled_sigmoid', 'scaled_sig']:
- procedure += r"""
- by normalizing {mod} {sigmoid} {suff}. {rescale}
- """.format(mod=mod, sigmoid=sigmoid, suff=suff, rescale=rescale)
- elif norm in ['scaled_sigmoid_quantiles', 'scaled_sig_qnt']:
- procedure += r"""
- by normalizing {mod} {sigmoid} {suff}, calculated using only data in
- the 5–95th percentile range to downweight the impact of outliers.
- {rescale}
- """.format(mod=mod, sigmoid=sigmoid, suff=suff, rescale=rescale)
- elif norm in ['robust_sigmoid', 'rsig', 'rs']:
- procedure += r"""
- by normalizing {mod} {robust_sigmoid} {suff}.
- """.format(mod=mod, robust_sigmoid=robust_sigmoid, suff=suff)
- elif norm in ['scaled_robust_sigmoid', 'scaled_rsig', 'srs']:
- procedure += r"""
- by normalizing {mod} {robust_sigmoid} {suff}. {rescale}
- """.format(mod=mod, robust_sigmoid=robust_sigmoid, suff=suff,
- rescale=rescale)
- elif norm in ['mixed_sigmoid', 'mixed_sig']:
- procedure += r"""
- by normalizing {mod} using a mixed sigmoid function [F2013J]:<br>
- $$ x_{{{{norm}}}} = \left\{{{{\begin{{{{array}}}}{{{{r r}}}}
- \frac{{{{1}}}}{{{{1 + \exp(-\frac{{{{(x-\overline{{{{x}}}})}}}}
- {{{{\sigma_{{{{x}}}}}}}})}}}} ,& \text{{{{IQR}}}}_{{{{x}}}} = 0
- \frac{{{{1}}}}{{{{1 + \exp(-\frac{{{{(x-\langle x \rangle)}}}}
- {{{{\text{{{{IQR}}}}_{{{{x}}}}}}}})}}}} ,& \text{{{{IQR}}}}_{{{{x}}}}
- \neq 0 \end{{{{array}}}}\right. $$<br>
- where $\bar{{{{x}}}}$ is the arithmetic mean, $\sigma_{{{{x}}}}$ is the
- sample standard deviation, $\langle x \rangle$ is the median, and
- $\text{{{{IQR}}}}_{{{{x}}}}$ is the normalized interquartile range of
- the expression value of a single {suff}. {rescale}
- """.format(mod=mod, suff=suff, rescale=rescale)
- return procedure
- def _add_references(report):
- """
- Detects references in `report` and generates list
- Parameters
- ----------
- report : str
- Report body
- Returns
- -------
- references : str
- List of references to be appended to `report`
- """
- refreport = ''
- for ref, cite in REFERENCES.items():
- if ref in report:
- refreport += f'[{ref}]: {cite}<p>'
- if len(refreport) > 0:
- refreport = '<br> REFERENCES<p>----------<p>' + refreport
- if refreport.endswith('<p> '):
- refreport = refreport[:-4]
- return refreport
reporting.py at commit dc4a007, under BSD-3-Clause · at the source
Overview
25 affiliations
- Department of Radiology and Nuclear Medicine, UMC Vrije Universiteit Amsterdam,Amsterdam, the Netherlands
- Amsterdam Neuroscience, Brain Imaging,Amsterdam, the Netherlands
- Department of Neuroscience, Rehabilitation, Ophthalmology, Genetics, Maternal and Child Health (DiNOGMI), University of Genoa,Genoa, Italy
- Department of Anatomy and Neurosciences, Amsterdam UMC, Vrije Universiteit Amsterdam,Amsterdam, the Netherlands
- Amsterdam Neuroscience, Neurodegeneration,Amsterdam, the Netherlands
- Department of Advanced Biomedical Sciences, University “Federico II”,Naples, Italy
- Department of Biomedical and Clinical Sciences, Neuroscience Research Center, University of Milan,Milan, Italy
- Department of Electrical, Computer and Biomedical Engineering, University of Pavia,Pavia, Italy
- UCL Queen Square Institute of Neurology, University College London,London, UK
- Neuro-X Institute, Ecole Polytechnique Fédérale De Lausanne (EPFL),Geneva, Switzerland
- Department of Radiology and Medical Informatics, University of Geneva (UNIGE),Geneva, Switzerland
- MS Center Amsterdam, Amsterdam Neuroscience, Amsterdam UMC, Vrije Universiteit Amsterdam,Amsterdam, the Netherlands
- Scottish Brain Sciences, Edinburgh, Scotland
- Ace Alzheimer Center Barcelona – Universitat Internacional de Catalunya,Barcelona, Spain
- Networking Research Center on Neurodegenerative Diseases (CIBERNED), Instituto de Salud Carlos III,Madrid, Spain
- Alzheimer Center Amsterdam, Department of Neurology, Amsterdam UMC,Amsterdam, the Netherlands
- Department of Psychiatry, Maastricht University,Maastricht, the Netherlands
- Barcelonaβeta Brain Research Center (BBRC), Pasqual Maragall Foundation,Barcelona, Spain
- Hospital del Mar Medical Research Institute (IMIM),Barcelona, Spain
- Centro de Investigación Biomédica en Red de Fragilidad y Envejecimiento Saludable (CIBERFES),Madrid, Spain
- Clinical Memory Research Unit, Department of Clinical Sciences Malmö, Faculty of Medicine, Lund University,Lund, Sweden
- Laboratory for Cognitive Neurology, KU Leuven,Leuven, Belgium
- Laboratory for Complex Genetics, KU Leuven,Leuven, Belgium
- Hawkes Institute, Department of Computer Science, UCL,London, UK
- Dementia Research Centre, Queen Square Institute of Neurology, UCL,London, UK
Abstract
The abstract is not reproduced here: the paper's license (CC BY-NC-ND) does not allow it. Read it in the paper, at the publisher or on Europe PMC.
Repositories
Its files are read in the Code ↔ Paper reader above, with 9 matches between paragraphs and lines of code.
rmarkello/abagen
dc4a007e4e902e51f97251390c8d1bbf7e58c6d3, 29 September 2023Availability: 1 check, the latest on 27 September 2026: the link answers
- 27 September 2026: the link answers
55 files
- abagen/
__init__.py , Python, 26 lines - abagen/
_version.py , Python, 683 lines - abagen/
allen.py , Python, 817 lines, 1 match - abagen/
cli/ , Python, 1 line__init__.py - abagen/
cli/ , Python, 417 lines, 1 matchrun.py - abagen/
correct.py , Python, 626 lines, 1 match - abagen/
datasets/ , Python, 17 lines__init__.py - abagen/
datasets/ , Python, 546 lines, 1 matchfetchers.py - abagen/
datasets/ , Python, 604 linesutils.py - abagen/
images.py , Python, 586 lines - abagen/
info.py , Python, 164 lines - abagen/
io.py , Python, 430 lines - abagen/
matching.py , Python, 620 lines - abagen/
mouse/ , Python, 13 lines__init__.py - abagen/
mouse/ , Python, 120 linesgene.py - abagen/
mouse/ , Python, 178 linesio.py - abagen/
mouse/ , Python, 268 linesmouse.py - abagen/
mouse/ , Python, 171 linesstructure.py - abagen/
mouse/ , Python, 83 linesutils.py - abagen/
probes_.py , Python, 763 lines - abagen/
reporting.py , Python, 625 lines, 1 match - abagen/
samples_.py , Python, 491 lines - abagen/
surfaces.py , Python, 231 lines - abagen/
tests/ , Python, 1 line__init__.py - abagen/
tests/ , Python, 1 linecli/ __init__.py - abagen/
tests/ , Python, 118 linescli/ test_run.py - abagen/
tests/ , Python, 46 linesconftest.py - abagen/
tests/ , Python, 1 linedatasets/ __init__.py - abagen/
tests/ , Python, 198 linesdatasets/ test_fetchers.py - abagen/
tests/ , Python, 43 linesdatasets/ test_utils.py - abagen/
tests/ , Python, 1 linemouse/ __init__.py - abagen/
tests/ , Python, 37 linesmouse/ test_gene.py - abagen/
tests/ , Python, 52 linesmouse/ test_io.py - abagen/
tests/ , Python, 102 linesmouse/ test_mouse.py - abagen/
tests/ , Python, 66 linesmouse/ test_structure.py - abagen/
tests/ , Python, 136 linestest_allen.py - abagen/
tests/ , Python, 257 linestest_correct.py - abagen/
tests/ , Python, 266 linestest_images.py - abagen/
tests/ , Python, 128 linestest_io.py - abagen/
tests/ , Python, 183 linestest_matching.py - abagen/
tests/ , Python, 276 linestest_probes.py - abagen/
tests/ , Python, 58 linestest_reporting.py - abagen/
tests/ , Python, 322 linestest_samples.py - abagen/
tests/ , Python, 60 linestest_surfaces.py - abagen/
tests/ , Python, 56 linestest_transforms.py - abagen/
tests/ , Python, 88 linestest_utils.py - abagen/
transforms.py , Python, 185 lines - abagen/
utils.py , Python, 221 lines - docs/
conf.py , Python, 129 lines - setup.py, Python, 14 lines
- tools/
update_changes.sh , Shell, 54 lines - tools/
update_readme.py , Python, 33 lines - versioneer.py, Python, 2,277 lines
- LICENSE, License, 29 lines
- README.rst, Text, 163 lines
gpreti/GSP_StructuralDecouplingIndex
16382be93c3bae8e196934a8e05b7a9300a909c3, 10 September 2019Availability: 1 check, the latest on 27 September 2026: the link answers
- 27 September 2026: the link answers
40 files
- Code_NCOMMS/
Matlab/ , MATLAB, 110 linesBrainGraphTools/ PlotBrainGraph.m - Code_NCOMMS/
Matlab/ , MATLAB, 63 linesBrainGraphTools/ cylinder2P.m - Code_NCOMMS/
Matlab/ , MATLAB, 30 linesBrainGraphTools/ fread3.m - Code_NCOMMS/
Matlab/ , MATLAB, 237 linesBrainGraphTools/ freezeColors.m - Code_NCOMMS/
Matlab/ , MATLAB, 132 linesBrainGraphTools/ process_options.m - Code_NCOMMS/
Matlab/ , MATLAB, 78 linesBrainGraphTools/ read_surf.m - Code_NCOMMS/
Matlab/ , MATLAB, 143 lines, 1 matchBrainGraphTools/ show_FSmesh.m - Code_NCOMMS/
Matlab/ , MATLAB, 929 linesBrainGraphTools/ show_cm.m - Code_NCOMMS/
Matlab/ , MATLAB, 941 linesBrainGraphTools/ show_cm_extended.m - Code_NCOMMS/
Matlab/ , MATLAB, 30 linesBrainGraphTools/ whereAmIRunning.m - Code_NCOMMS/
Matlab/ , MATLAB, 31 lines, 1 matchGSP_FullPipeline.m - Code_NCOMMS/
Matlab/ , MATLAB, 84 linesGSP_Laplacian.m - Code_NCOMMS/
Matlab/ , MATLAB, 38 linesGS_FC.m - Code_NCOMMS/
Matlab/ , MATLAB, 22 linesGSanalysis.m - Code_NCOMMS/
Matlab/ , MATLAB, 32 linesGSrandomozation_create_S Cignorant_surrogates.m - Code_NCOMMS/
Matlab/ , MATLAB, 21 linesGSrandomozation_create_S Cinformed_surrogates.m - Code_NCOMMS/
Matlab/ , MATLAB, 24 linesNeurosynth_createmaps.m - Code_NCOMMS/
Matlab/ , MATLAB, 38 linesNeurosynth_inputs.m - Code_NCOMMS/
Matlab/ , MATLAB, 39 linesPlotGraph.m - Code_NCOMMS/
Matlab/ , MATLAB, 27 linesSDI_SCignorant_surrogate s.m - Code_NCOMMS/
Matlab/ , MATLAB, 87 linesSDI_SCinformed_surrogate s.m - Code_NCOMMS/
Matlab/ , MATLAB, 15 linescnm/ angular_dist.m - Code_NCOMMS/
Matlab/ , MATLAB, 57 lines, 1 matchcnm/ avgClusteringCoefficient .m - Code_NCOMMS/
Matlab/ , MATLAB, 106 linescnm/ ba_net.m - Code_NCOMMS/
Matlab/ , MATLAB, 48 linescnm/ characteristicPathLength .m - Code_NCOMMS/
Matlab/ , MATLAB, 112 linescnm/ cm_net.m - Code_NCOMMS/
Matlab/ , MATLAB, 57 linescnm/ er_net.m - Code_NCOMMS/
Matlab/ , MATLAB, 150 linescnm/ h2_net.m - Code_NCOMMS/
Matlab/ , MATLAB, 27 linescnm/ hyperbolic_dist.m - Code_NCOMMS/
Matlab/ , MATLAB, 136 linescnm/ matToGML.m - Code_NCOMMS/
Matlab/ , MATLAB, 80 linescnm/ plotNodeDegreeDistrib.m - Code_NCOMMS/
Matlab/ , MATLAB, 156 linescnm/ ps_net.m - Code_NCOMMS/
Matlab/ , MATLAB, 17 linescnm/ rand_graph.m - Code_NCOMMS/
Matlab/ , MATLAB, 76 linescnm/ randp.m - Code_NCOMMS/
Matlab/ , MATLAB, 154 lines, 1 matchcnm/ sw_net.m - Code_NCOMMS/
Matlab/ , MATLAB, 40 linespercentile.m - Code_NCOMMS/
Python/ , Jupyter, 124 lines.ipynb_checkpoints/ 05_metaanalysis_neurosyn th_myanalysis-checkpoint .ipynb - Code_NCOMMS/
Python/ , Jupyter, 124 lines05_metaanalysis_neurosyn th_myanalysis.ipynb - LICENSE, License, 201 lines
- README.md, Text, 58 lines
Code availability statement
The paper has a code availability statement. Its license (CC BY-NC-ND) does not allow reproducing it here; in short, from what the harvester recognized in it:
- it points to the authors' code: gpreti/
GSP_StructuralDecoupling , rmarkello/Index abagen
Read it in the paper: doi.org/10.1038/s43856-026-01707-2.
Tracing map
Proposed by the machine: these links were found in the paper and verified at the source, without human review. The map will receive a Zenodo DOI once one of the paper's authors has validated it with their ORCID.
What the map holds:
- 2 repositories of the authors' code, each at its verified commit, with its license and how the link was found in the paper;
- 91 scripts, each with its path and the digest of its content;
- 9 matches between paragraphs of the paper and lines of the code (method lexical-v1);
- neither the text of the paper nor the code itself.
Its JSON (tracing-map.json) is deposited on Zenodo with its DOI once the map is validated.
Data
Datasets cited
- zenodo:7962737, at Zenodo; found in the acknowledgements
- zenodo:8017083, at Zenodo; found in the references
Data availability statement
The paper has a data availability statement. Its license (CC BY-NC-ND) does not allow reproducing it here; in short, from what the harvester recognized in it:
- it says that the data are available on request
Read it in the paper: doi.org/10.1038/s43856-026-01707-2.
Versions
The history of this record: each version stored by the harvester or made by a correction of its authors or of the maintainers of its code, and what changed in its facts. The texts of the paper (its abstract, its availability statements) are not part of it; versions that changed only those are not listed.
Version 1, 27 September 2026: the first record
Recorded: type, language, journal, volume, issue, pages, dates, 23 authors, 2 keywords, 3 funders, 121 references.
Cite
This paper
Arunachalam, P., Pieperhoff, L., Lorenzini, L., Tranfa, M., Masserini, F., Treves, F., Pontillo, G., Preti, M. G., Broeders, T. A. A., Schoonheim, M. M., Douw, L., Ritchie, C., Boada, M., Marquié, M., Visser, P. J., Cacciaglia, R., Gispert, J. D., Salvadó, G., Luckett, E. S., . . . Wink, A. M. (2026). Decreased amyloid-related structure-function coupling in preclinical Alzheimer's disease. Communications medicine, 6(1), 491. https://
BibTeX
@article{arunachalam2026
author = {Arunachalam, Prithvi and Pieperhoff, Leonard and Lorenzini, Luigi and Tranfa, Mario and Masserini, Federico and Treves, Francesca and Pontillo, Giuseppe and Preti, Maria G. and Broeders, Tommy A. A. and Schoonheim, Menno M. and Douw, Linda and Ritchie, Craig and Boada, Mercè and Marquié, Marta and Visser, Pieter Jelle and Cacciaglia, Raffaele and Gispert, Juan Domingo and Salvadó, Gemma and Luckett, Emma S. and Collij, Lyduine E. and Cole, James H. and Barkhof, Frederik and Wink, Alle Meije},
title = {{Decreased amyloid-related structure-function coupling in preclinical Alzheimer's disease}},
journal = {Communications medicine},
year = {2026},
month = jun,
volume = {6},
number = {1},
pages = {491},
publisher = {Nature Publishing Group},
issn = {2730-664X},
doi = {10.1038/
url = {https://
pmid = {42265349},
pmcid = {PMC13590598}
}
RIS
TY - JOUR
AU - Arunachalam, Prithvi
AU - Pieperhoff, Leonard
AU - Lorenzini, Luigi
AU - Tranfa, Mario
AU - Masserini, Federico
AU - Treves, Francesca
AU - Pontillo, Giuseppe
AU - Preti, Maria G.
AU - Broeders, Tommy A. A.
AU - Schoonheim, Menno M.
AU - Douw, Linda
AU - Ritchie, Craig
AU - Boada, Mercè
AU - Marquié, Marta
AU - Visser, Pieter Jelle
AU - Cacciaglia, Raffaele
AU - Gispert, Juan Domingo
AU - Salvadó, Gemma
AU - Luckett, Emma S.
AU - Collij, Lyduine E.
AU - Cole, James H.
AU - Barkhof, Frederik
AU - Wink, Alle Meije
TI - Decreased amyloid-related structure-function coupling in preclinical Alzheimer's disease
T2 - Communications medicine
J2 - Commun Med (Lond)
PY - 2026
DA - 2026/
VL - 6
IS - 1
SP - 491
SN - 2730-664X
PB - Nature Publishing Group
DO - 10.1038/
UR - https://
LA - en
ER -
CSL-JSON
{
"id": "10.1038/
"type": "article-journal",
"title": "Decreased amyloid-related structure-function coupling in preclinical Alzheimer's disease",
"container-title": "Communications medicine",
"author": [
{
"family": "Arunachalam",
"given": "Prithvi"
},
{
"family": "Pieperhoff",
"given": "Leonard"
},
{
"family": "Lorenzini",
"given": "Luigi"
},
{
"family": "Tranfa",
"given": "Mario"
},
{
"family": "Masserini",
"given": "Federico"
},
{
"family": "Treves",
"given": "Francesca"
},
{
"family": "Pontillo",
"given": "Giuseppe"
},
{
"family": "Preti",
"given": "Maria G."
},
{
"family": "Broeders",
"given": "Tommy A. A."
},
{
"family": "Schoonheim",
"given": "Menno M."
},
{
"family": "Douw",
"given": "Linda"
},
{
"family": "Ritchie",
"given": "Craig"
},
{
"family": "Boada",
"given": "Mercè"
},
{
"family": "Marquié",
"given": "Marta"
},
{
"family": "Visser",
"given": "Pieter Jelle"
},
{
"family": "Cacciaglia",
"given": "Raffaele"
},
{
"family": "Gispert",
"given": "Juan Domingo"
},
{
"family": "Salvadó",
"given": "Gemma"
},
{
"family": "Luckett",
"given": "Emma S."
},
{
"family": "Collij",
"given": "Lyduine E."
},
{
"family": "Cole",
"given": "James H."
},
{
"family": "Barkhof",
"given": "Frederik"
},
{
"family": "Wink",
"given": "Alle Meije"
}
],
"container-title-short":
"volume": "6",
"issue": "1",
"page": "491",
"DOI": "10.1038/
"PMID": "42265349",
"PMCID": "PMC13590598",
"ISSN": "2730-664X",
"publisher": "Nature Publishing Group",
"URL": "https://
"language": "en",
"issued": {
"date-parts": [
[
2026,
6,
9
]
]
}
}
The tracing map gets a citation of its own once an author has validated it and it has a DOI.
Similar papers
The papers with a page that share the most with this one: the tools found in their code, their categories, datasets, cited references and authors, the rarest counting most.
- [1] doi:10.1002/alz.71609
- Cortical gray-white matter contrast alterations precede amyloid-β positivity and macrostructural changes in older adults without dementia.Journal: Alzheimer's & dementia : the journal of the Alzheimer's AssociationIn common: Alzheimer's / dementia, 10 references, 11 authors
- [2] doi:10.1038/s42003-025-09444-3 [code]
- Decoupling of neurophysiological activity from structure mirrors global microarchitectural and neuromodulatory trends.Journal: Communications biologyIn common: abagen, NiBabel, Statistics and Machine Learning Toolbox, 4 other tools, 16 references
- [3] doi:10.7554/elife.103097 [code]
- Canonical neurodevelopmental trajectories of structural and functional manifolds.Journal: eLifeIn common: NiBabel, Statistics and Machine Learning Toolbox, pandas, 2 other tools, 17 references
- [4] doi:10.1017/s0033291726104838 [code]
- Variations of structural-functional coupling in post-traumatic stress disorder are associated with underlying molecular and transcriptional features.Journal: Psychological medicineIn common: abagen, NiBabel, pandas, 2 other tools, 14 references
- [5] doi:10.1038/s41467-026-71719-y [code]
- Brain functional-structural gradient coupling reflects development, behavior and genetic influences.Journal: Nature communicationsIn common: abagen, FreeSurfer, NiBabel, 5 other tools, 11 references
- [6] doi:10.1371/journal.pbio.3003927 [code]
- Brain structural and functional connectivity converge prenatally but diverge after birth.Journal: PLoS biologyIn common: Statistics and Machine Learning Toolbox, 15 references
- [7] doi:10.1177/20552173261448282 [code]
- The constrained brain in multiple sclerosis: Cognitive impairment is related to network-specific coupling of structural and functional connectivity.Journal: Multiple sclerosis journal - experimental, translational and clinicalIn common: 3 references, 3 authors
- [8] doi:10.1038/s41593-026-02205-3 [code]
- Competitive interactions shape mammalian brain network dynamics and computation.Journal: Nature neuroscienceIn common: SPM, NiBabel, Statistics and Machine Learning Toolbox, 5 other tools, 8 references
- [9] doi:10.1038/s41467-026-71682-8 [code]
- GWAS meta-analysis of cerebrospinal fluid Alzheimer's biomarkers reveals loci regulating lipids, brain volume and autophagy.Journal: Nature communicationsIn common: pandas, SciPy, NumPy, Alzheimer's / dementia, 3 references, 2 authors
- [10] doi:10.1186/s40708-026-00312-2 [code]
- Synergistic and redundant information dynamics exhibit dissociable alterations across schizophrenia and neurodevelopmental conditions.Journal: Brain informaticsIn common: FreeSurfer, SPM, NiBabel, 5 other tools, 7 references
Contribute
The authors of this paper can claim it, correct its record and validate its tracing map, and the maintainers of its code (its owner, or a public member of its organization) correct what it says of their repository; anyone signed in can ask for its removal. Every request goes to OSCR's own machine, which answers it; your account page follows them.
Sign in with ORCID to claim this paper as one of its authors, correct its record or validate its tracing map: when the paper's metadata lists your ORCID iD, you are recognized at once. Maintainers of its code: sign in with GitHub, then claim the repository on your account page.
Claim this paper
Correct its record
Say what each link of this record is, remove the ones that are not the paper's, add the ones that are missing. The correction becomes a new version of the record, in its Versions section.
Validate its tracing map
You validate the map as this page shows it: 2 repositories of the authors' code, each at its verified commit and with its license, 91 scripts, and 9 matches between paragraphs and code (see the Code and Map sections). It then receives a DOI on Zenodo, with you (your ORCID iD) and OSCR as its creators; the code itself is not deposited.
The map's fingerprint: sha256:551fcd8703e25f05…
Add the badge to its README
The badge links the code to this page. Copy one of these into the README of the paper's code: only you decide where it goes, and nothing is changed for you.
Markdown
[, paste the snippet at the top, then “Commit changes…” and, to review it first, “Create a new branch and start a pull request”. You open the pull request; OSCR asks for no permission.
Request its removal
To ask OSCR to remove this record, the copies of its authors' scripts or its tracing map, use the removal request page: signed in, you say who you are, what to remove and why, then review and confirm the request. Published rules decide every request (how).
Discussion, reproductions, activity
Discussion: questions and error reports about this paper and its code, from signed-in readers and its authors. It opens with sign-in.
Reproductions: reports from readers who ran the authors' code: what they reproduced, with which environment, commit and data. It opens with sign-in.
Activity: what happens around this paper: new versions of its record, its map's validation, discussions and reproductions. It opens with sign-in.
