Note
Go to the end to download the full example code.
Intermediate
Neurotransmitter receptor densities
EBRAINS provides transmitter receptor density measurements linked to a selection of cytoarchitectonic brain regions
in the human brain (Palomero-Gallagher, Amunts, Zilles et al.). These can be accessed by calling the
siibra.features.get() method with feature types in siibra.features.molecular modality, and by
specifying a cytoarchitectonic region. Receptor densities come as cortical profiles and regional fingerprints,
both tabular style data features.
import siibra
If we query this modality for the whole atlas instead of a particular brain region, all linked receptor density features will be returned.
parcellation = siibra.parcellations.get('julich 2.9')
all_features = siibra.features.get(parcellation, siibra.features.molecular.ReceptorDensityFingerprint)
print("Receptor density fingerprints found at the following anatomical anchors:")
print('\n'.join({str(f.anchor) for f in all_features}))
Receptor density fingerprints found at the following anatomical anchors:
Area hOc1 (V1, 17, CalcS)
CA3 (Hippocampus)
Area 7A (SPL)
Area hOc3v (LingG)
CA2 (Hippocampus)
Area 4p (PreCG)
Area PFcm (IPL)
Area PF (IPL)
Area PGa (IPL)
Area FG1 (FusG)
Area 45 (IFG)
DG (Hippocampus)
Area TE 2.1 (STG)
Area hOc2 (V2, 18)
Area 3b (PostCG)
Area PGp (IPL)
Area FG2 (FusG)
Area PFm (IPL)
Area PFop (IPL)
Area TE 1.0 (HESCHL)
Area hOc3d (Cuneus)
CA1 (Hippocampus)
Area PFt (IPL)
Area 44 (IFG)
When providing a particular region instead, the returned list is filtered accordingly. So we can directly retrieve densities for the primary visual cortex:
v1_fingerprints = siibra.features.get(
siibra.get_region('julich 2.9', 'v1'),
siibra.features.molecular.ReceptorDensityFingerprint
)
v1_fingerprints[0].plot()

<Axes: title={'center': 'Neurotransmitter receptor density in\nArea hOc1 (V1, 17, CalcS)'}, ylabel='mean ± std\nfmol/mg'>
Each feature includes a data structure for the fingerprint, with mean and standard values for different receptors. The following table thus gives us the same values as shown in the polar plot above:
v1_fingerprints[0].data
Many of the receptor features also provide a profile of density measurements at different cortical depths, resolving the change of distribution from the white matter towards the pial surface. The profile is stored as a dictionary of density measures from 0 to 100% cortical depth.
v1_profiles = siibra.features.get(
siibra.get_region('julich 2.9', 'v1'),
siibra.features.molecular.ReceptorDensityProfile
)[0]
for p in v1_profiles:
print(p.receptor)
if "GABAA" in p.receptor:
break
p.data
5-HT1A
5-HT2
alpha1
alpha2
alpha4beta2
AMPA
BZ
D1
GABAA
The data can be simply plotted as such
p.plot()

<Axes: title={'center': 'Receptor Density Profile: GABAA'}, xlabel='Cortical depth', ylabel='fmol/mg'>
Total running time of the script: (0 minutes 30.805 seconds)
Estimated memory usage: 123 MB