Single-cell profiling identifies ACE+ granuloma macrophages as a non-permissive niche for intracellular bacteria during persistent Salmonella infection
Abstract
Macrophages mediate key antimicrobial responses against intracellular bacterial pathogens, such as Salmonella enterica. Yet, they can also act as a permissive niche for these pathogens to persist in infected tissues within granulomas, which are immunological structures comprised of macrophages and other immune cells. We apply single-cell transcriptomics to investigate macrophage functional diversity during persistent Salmonella enterica serovar Typhimurium (STm) infection in mice. We identify determinants of macrophage heterogeneity in infected spleens and describe populations of distinct phenotypes, functional programming, and spatial localization. Using a STm mutant with impaired ability to polarize macrophage phenotypes, we find that angiotensin converting enzyme (ACE) defines a granuloma macrophage population that is non-permissive for intracellular bacteria and their abundance anticorrelates with tissue bacterial burden. Disruption of pathogen control by neutralizing TNF is linked to preferential depletion of ACE+ macrophages in infected tissues. Thus ACE+ macrophages have limited capacity to serve as cellular niche for intracellular bacteria to establish persistent infection.
Methods
Spleens from mice were minced with surgical blades No. 22 and incubated in digestion buffer (HBSS + Ca2+ + Mg2+ + 50 μg/mL DNase (Roche) + 25 μg/mL Liberase TL (Sigma)) at 37 °C for 25 min, mixing at 200 rpm. EDTA was added at a final concentration of 5 mM to halt digestion. Single cell suspensions were passed through a 70-μm filter and washed with R5 buffer (RPMI containing 5% FBS and 10 mM Hepes). Red blood cells were lysed with ACK Lysis Buffer (Lonza) for 3 min at room temperature, washed, and resuspended in R5 buffer until they were stained for flow cytometry.
All samples subjected to scRNA-seq were prepared and FACS-enriched using the following procedures. STm infected spleens were harvested and digested in buffer containing HBSS + Ca2+ + Mg2+ + 50 μg/mL DNase (Roche) + 25 μg/mL Liberase TL (Sigma) at 37 °C for 25 min, mixing at 200 rpm. EDTA was added to 5 mM final concentration to stop digestion reaction and cells were washed with RPMI containing 10% FCS. Following RBC lysis, splenocytes were washed twice RPMI containing 10% FCS. Splenocytes were stained with an antibody mixture for surface markers (CD11b Alexa fluor 647, CD11c PECy7, Ly6C PerCP Cy5.5, Ly6G FITC, CD3 APC efluor 780, CD19 APC efluor 780, and NK1.1 APC efluor 780) for 25 minutes on ice, washed twice with RPMI containing 10% FCS, then resuspended in the same buffer with 1:2000 DAPI. Splenocytes were then FACS-enriched on a BD FACSAria cell sorter. A permissive gating strategy was utilized to simultaneously enrich CD11b+CD11c+Ly6C+ macrophages and capture other splenocytes for sequencing. Sorting gates were set tightly for size/scatter, singlet, and living cells but more loosely for CD3/CD19/NK1.1-, CD11b+, Ly6G-, Ly6C+, and CD11c+ cells as shown in Figure S1B. A complete list of antibodies used in this study is provided in the supplementary information (Table 1). The viability of sorted cells were checked using Trypan blue staining and hemocytometer inspection under a light microscope. Samples had viability greater than 90%. Cells were resuspended to a concentration to 500-1200 cells/uL, partitioned, and captured for sequencing on a 10x Chromium Controller. Libraries were prepared by the Stanford Functional Genomics Facility (SFGF) using 10X Genomics 3’ GEX v3.1 kit and sequenced on the Illumina HiSeq4000 platform to a depth of ~40,000 - 50,000 reads/cell. Raw sequencing data were demultiplexed by SFGF to yield fastqs reads.
Usage notes
Software package versions used:
adjustText==0.7.3
anndata==0.8.0
backcall==0.2.0
click==8.1.3
cycler==0.11.0
debugpy==1.6.3
decorator==5.1.1
DensityPlot==0.1.8
dunamai==1.14.1
entrypoints==0.4
fonttools==4.38.0
get_version==3.5.4
h5py==3.7.0
importlib-metadata==5.1.0
ipykernel==6.16.2
ipython==7.34.0
jedi==0.18.2
Jinja2==3.1.2
joblib==1.2.0
jupyter_client==7.4.7
jupyter_core==4.11.2
kiwisolver==1.4.4
legacy-api-wrap==1.2
llvmlite==0.31.0
loompy==3.0.7
MarkupSafe==2.1.1
matplotlib==3.5.3
matplotlib-inline==0.1.6
matplotlib-venn==0.11.7
natsort==8.2.0
nest-asyncio==1.5.6
networkx==2.6.3
nheatmap==0.1.4
numba==0.48.0
numexpr==2.8.4
numpy==1.21.6
numpy-groupies==0.9.20
packaging==21.3
pandas==1.1.5
parso==0.8.3
patsy==0.5.3
pexpect==4.8.0
pickleshare==0.7.5
Pillow==9.3.0
pip==22.3.1
plotly==5.11.0
prompt-toolkit==3.0.33
psutil==5.9.4
ptyprocess==0.7.0
Pygments==2.13.0
pynndescent==0.5.8
pyparsing==3.0.9
python-dateutil==2.8.2
pytz==2022.6
pyzmq==24.0.1
sam-algorithm==0.7.1
scanpy==1.6.0
scikit-learn==1.0.2
scipy==1.7.3
scvelo==0.1.25
seaborn==0.12.1
session-info==1.0.0
setuptools==65.5.1
setuptools-scm==7.0.5
sinfo==0.3.4
six==1.16.0
statsmodels==0.13.5
stdlib-list==0.8.0
tables==3.7.0
tbb==2021.7.1
tenacity==8.1.0
threadpoolctl==3.1.0
tomli==2.0.1
tornado==6.2
tqdm==4.64.1
traitlets==5.5.0
typing_extensions==4.4.0
umap-learn==0.3.10
wcwidth==0.2.5
wheel==0.38.4
zipp==3.11.0