Data analysis: Single cell analysis#

In this vignette we cover the single-cell based analysis, including dimensionality reduction and clustering.

As cytometry is a single-cell based assay, we can often detect heterogeneities of cell populations in cytometry data.

Here, we use the mouse lineages dataset.

[1]:
import warnings
warnings.filterwarnings(
    action='ignore',
    category=FutureWarning
)
[2]:
import FACSPy as fp
import os
[3]:
input_directory = "../../Tutorials/mouse_lineages"
metadata = fp.dt.Metadata(os.path.join(input_directory, "metadata.csv"))
panel = fp.dt.Panel(os.path.join(input_directory, "panel.csv"))
workspace = fp.dt.FlowJoWorkspace(os.path.join(input_directory, "lineages_full_gated.wsp"))
cofactors = fp.dt.CofactorTable(os.path.join(input_directory, "cofactors.csv"))
[4]:
dataset = fp.dt.create_dataset(input_directory = input_directory,
                               metadata = metadata,
                               panel = panel,
                               workspace = workspace)
fp.dt.transform(dataset, transform = "asinh", cofactor_table = cofactors, key_added = "transformed")
dataset
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 4046, FSC-H: 39, FSC-W: 112, SSC-A: 699, SSC-H: 20, SSC-W: 39, BUV496-A: 4, BB700-A: 9
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 3756, FSC-H: 49, FSC-W: 115, SSC-A: 801, SSC-H: 25, SSC-W: 51, GFP-A: 2, APC-A: 1, APC-H7-A: 1, BV421-A: 5, BV510-A: 13, BV605-A: 6, BB700-A: 1
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 4804, FSC-H: 71, FSC-W: 145, SSC-A: 1005, SSC-H: 22, SSC-W: 49, APC-H7-A: 6, BV421-A: 11, BV510-A: 2541, BV605-A: 6760, BV711-A: 745, BV786-A: 43, BUV395-A: 21, BUV496-A: 129, BUV737-A: 7194, BYG790-A: 173, BB700-A: 9
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 6715, FSC-H: 96, FSC-W: 217, SSC-A: 1324, SSC-H: 33, SSC-W: 69, GFP-A: 5, APC-A: 8, APC-H7-A: 16, BV421-A: 3040, BV510-A: 7299, BV605-A: 857, BV711-A: 52, BV786-A: 43, BUV395-A: 140, BUV496-A: 7727, BUV737-A: 198, BYG790-A: 7, BB700-A: 23
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 5090, FSC-H: 85, FSC-W: 163, SSC-A: 1140, SSC-H: 25, SSC-W: 76, GFP-A: 5, APC-A: 9, APC-H7-A: 16, BV421-A: 2871, BV510-A: 6925, BV605-A: 948, BV711-A: 61, BV786-A: 33, BUV395-A: 185, BUV496-A: 7361, BUV737-A: 251, BYG790-A: 11, BB700-A: 22
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 3994, FSC-H: 57, FSC-W: 98, SSC-A: 760, SSC-H: 20, SSC-W: 39, GFP-A: 5, APC-A: 8, APC-H7-A: 17, BV421-A: 2139, BV510-A: 5646, BV605-A: 594, BV711-A: 36, BV786-A: 35, BUV395-A: 102, BUV496-A: 6027, BUV737-A: 139, BYG790-A: 8, BB700-A: 17
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 4634, FSC-H: 65, FSC-W: 181, SSC-A: 944, SSC-H: 29, SSC-W: 81, GFP-A: 2, APC-A: 12, APC-H7-A: 16, BV421-A: 2583, BV510-A: 6914, BV605-A: 797, BV711-A: 45, BV786-A: 28, BUV395-A: 152, BUV496-A: 7346, BUV737-A: 200, BYG790-A: 9, BB700-A: 15
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 5643, FSC-H: 62, FSC-W: 224, SSC-A: 970, SSC-H: 31, SSC-W: 83, GFP-A: 3, APC-A: 7, APC-H7-A: 11, BV421-A: 2252, BV510-A: 6162, BV605-A: 690, BV711-A: 40, BV786-A: 23, BUV395-A: 136, BUV496-A: 6566, BUV737-A: 183, BYG790-A: 8, BB700-A: 13
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 221, FSC-H: 1, FSC-W: 71, SSC-A: 216, GFP-A: 54, BV421-A: 1, BUV496-A: 4, BB700-A: 6
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 439, FSC-H: 1, FSC-W: 17, SSC-A: 145, GFP-A: 7, BV421-A: 1, BV711-A: 2, BV786-A: 4, BUV395-A: 1, BUV496-A: 1, BUV737-A: 1, BB700-A: 1
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 882, FSC-H: 7, FSC-W: 124, SSC-A: 300, SSC-H: 3, SSC-W: 97, GFP-A: 3, APC-A: 17, APC-H7-A: 41, BV421-A: 619, BV510-A: 14698, BV605-A: 152, BV711-A: 20, BV786-A: 35, BUV395-A: 34, BUV496-A: 17001, BUV737-A: 32, BYG790-A: 40, BB700-A: 15
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 1065, FSC-H: 3, FSC-W: 72, SSC-A: 192, SSC-H: 4, SSC-W: 42, GFP-A: 1, APC-A: 8, APC-H7-A: 30, BV421-A: 1477, BV510-A: 14720, BV605-A: 120, BV711-A: 18, BV786-A: 93, BUV395-A: 17, BUV496-A: 16519, BUV737-A: 19, BYG790-A: 27, BB700-A: 15
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 1191, FSC-H: 2, FSC-W: 87, SSC-A: 310, SSC-H: 1, SSC-W: 26, GFP-A: 1, APC-A: 5, APC-H7-A: 6, BV421-A: 416, BV510-A: 10607, BV605-A: 51, BV711-A: 6, BV786-A: 40, BUV395-A: 11, BUV496-A: 11940, BUV737-A: 5, BYG790-A: 8, BB700-A: 3
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 376, SSC-A: 127, SSC-H: 405, SSC-W: 8, GFP-A: 86, APC-A: 7, APC-H7-A: 4, BV421-A: 41, BV510-A: 1328, BV605-A: 19833, BV711-A: 136, BV786-A: 22, BUV395-A: 14, BUV496-A: 30, BUV737-A: 22479, BYG790-A: 23, BB700-A: 60
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 1363, FSC-H: 6, FSC-W: 120, SSC-A: 338, SSC-H: 6, SSC-W: 77, GFP-A: 2, APC-A: 14, APC-H7-A: 52, BV421-A: 1614, BV510-A: 29531, BV605-A: 221, BV711-A: 32, BV786-A: 103, BUV395-A: 30, BUV496-A: 33042, BUV737-A: 47, BYG790-A: 36, BB700-A: 31
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 1387, FSC-H: 21, FSC-W: 60, SSC-A: 117
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 2266, FSC-H: 25, FSC-W: 113, SSC-A: 250, BV510-A: 42
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 2817, FSC-H: 36, FSC-W: 73, SSC-A: 215, SSC-H: 1, SSC-W: 25, APC-H7-A: 9, BV421-A: 14, BV510-A: 1008, BV605-A: 8999, BV711-A: 374, BV786-A: 25, BUV395-A: 21, BUV496-A: 31, BUV737-A: 9306, BYG790-A: 52, BB700-A: 7
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 1900, FSC-H: 13, FSC-W: 51, SSC-A: 105, SSC-H: 2, SSC-W: 10, GFP-A: 1, APC-A: 7, APC-H7-A: 16, BV421-A: 776, BV510-A: 8794, BV605-A: 345, BV711-A: 30, BV786-A: 17, BUV395-A: 29, BUV496-A: 9101, BUV737-A: 52, BYG790-A: 5, BB700-A: 15
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 1861, FSC-H: 25, FSC-W: 51, SSC-A: 173, SSC-H: 3, SSC-W: 14, APC-H7-A: 4, BV421-A: 8, BV510-A: 1461, BV605-A: 9282, BV711-A: 532, BV786-A: 28, BUV395-A: 16, BUV496-A: 60, BUV737-A: 9735, BYG790-A: 98, BB700-A: 3
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 1293, FSC-H: 11, FSC-W: 41, SSC-A: 160, SSC-H: 2, SSC-W: 18, GFP-A: 1, APC-A: 5, APC-H7-A: 9, BV421-A: 943, BV510-A: 10749, BV605-A: 319, BV711-A: 22, BV786-A: 17, BUV395-A: 42, BUV496-A: 11143, BUV737-A: 62, BYG790-A: 5, BB700-A: 13
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 667, FSC-H: 7, FSC-W: 25, SSC-A: 140, SSC-H: 2, SSC-W: 14, GFP-A: 2, APC-A: 12, APC-H7-A: 17, BV421-A: 522, BV510-A: 9083, BV605-A: 250, BV711-A: 31, BV786-A: 21, BUV395-A: 30, BUV496-A: 9386, BUV737-A: 60, BYG790-A: 7, BB700-A: 25
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 835, FSC-H: 10, FSC-W: 30, SSC-A: 132, SSC-H: 2, SSC-W: 16, APC-H7-A: 7, BV421-A: 14, BV510-A: 521, BV605-A: 9576, BV711-A: 204, BV786-A: 30, BUV395-A: 18, BUV496-A: 35, BUV737-A: 9978, BYG790-A: 57, BB700-A: 7
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 4643, FSC-H: 58, FSC-W: 121, SSC-A: 970, SSC-H: 18, SSC-W: 54, GFP-A: 1, BV605-A: 3, BUV395-A: 6, BUV496-A: 2
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 4288, FSC-H: 64, FSC-W: 168, SSC-A: 895, SSC-H: 13, SSC-W: 74, GFP-A: 1, BV605-A: 5, BV711-A: 15, BUV395-A: 3, BUV496-A: 1, BB700-A: 1
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 4153, FSC-H: 61, FSC-W: 170, SSC-A: 887, SSC-H: 16, SSC-W: 91, APC-H7-A: 10, BV421-A: 31, BV510-A: 2178, BV605-A: 7261, BV711-A: 652, BV786-A: 42, BUV395-A: 28, BUV496-A: 112, BUV737-A: 7836, BYG790-A: 187, BB700-A: 17
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 4591, FSC-H: 64, FSC-W: 121, SSC-A: 818, SSC-H: 12, SSC-W: 39, GFP-A: 1, APC-A: 12, APC-H7-A: 24, BV421-A: 1892, BV510-A: 5521, BV605-A: 541, BV711-A: 26, BV786-A: 26, BUV395-A: 85, BUV496-A: 5878, BUV737-A: 142, BYG790-A: 11, BB700-A: 22
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 4034, FSC-H: 79, FSC-W: 94, SSC-A: 909, SSC-H: 11, SSC-W: 44, APC-H7-A: 18, BV421-A: 40, BV510-A: 1980, BV605-A: 6409, BV711-A: 557, BV786-A: 54, BUV395-A: 41, BUV496-A: 111, BUV737-A: 6888, BYG790-A: 211, BB700-A: 19
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 5086, FSC-H: 82, FSC-W: 168, SSC-A: 1126, SSC-H: 21, SSC-W: 71, GFP-A: 2, APC-A: 28, APC-H7-A: 38, BV421-A: 2131, BV510-A: 6383, BV605-A: 666, BV711-A: 60, BV786-A: 52, BUV395-A: 133, BUV496-A: 6899, BUV737-A: 202, BYG790-A: 16, BB700-A: 32
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 4435, FSC-H: 73, FSC-W: 145, SSC-A: 1068, SSC-H: 12, SSC-W: 65, GFP-A: 3, APC-A: 15, APC-H7-A: 31, BV421-A: 2079, BV510-A: 6417, BV605-A: 676, BV711-A: 56, BV786-A: 33, BUV395-A: 147, BUV496-A: 6982, BUV737-A: 222, BYG790-A: 8, BB700-A: 32
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 4201, FSC-H: 59, FSC-W: 152, SSC-A: 920, SSC-H: 15, SSC-W: 67, APC-H7-A: 11, BV421-A: 28, BV510-A: 1880, BV605-A: 6092, BV711-A: 585, BV786-A: 48, BUV395-A: 31, BUV496-A: 106, BUV737-A: 6607, BYG790-A: 178, BB700-A: 10
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 1538, FSC-H: 7, FSC-W: 68, SSC-A: 385, SSC-H: 9, SSC-W: 47, GFP-A: 4, APC-A: 2, APC-H7-A: 1, BV421-A: 9, BV510-A: 17, BV605-A: 7, BV711-A: 3, BUV496-A: 3, BUV737-A: 4, BYG790-A: 3, BB700-A: 1
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 856, FSC-H: 3, FSC-W: 36, SSC-A: 160, SSC-H: 3, SSC-W: 16, GFP-A: 2, BV421-A: 1, BV510-A: 5, BV605-A: 17, BUV395-A: 7
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 649, FSC-H: 3, FSC-W: 100, SSC-A: 284, SSC-H: 7, SSC-W: 65, GFP-A: 4, APC-A: 16, APC-H7-A: 55, BV421-A: 306, BV510-A: 16520, BV605-A: 36, BV711-A: 61, BV786-A: 50, BUV395-A: 24, BUV496-A: 19536, BUV737-A: 60, BYG790-A: 21, BB700-A: 54
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 1070, FSC-H: 3, FSC-W: 55, SSC-A: 380, SSC-H: 3, SSC-W: 20, GFP-A: 1, APC-A: 21, APC-H7-A: 37, BV421-A: 156, BV510-A: 9506, BV605-A: 24, BV711-A: 32, BV786-A: 35, BUV395-A: 13, BUV496-A: 10985, BUV737-A: 39, BYG790-A: 23, BB700-A: 31
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 1391, FSC-H: 3, FSC-W: 57, SSC-A: 420, SSC-H: 2, SSC-W: 20, GFP-A: 1, APC-A: 15, APC-H7-A: 26, BV421-A: 102, BV510-A: 5855, BV605-A: 8, BV711-A: 40, BV786-A: 37, BUV395-A: 2, BUV496-A: 6637, BUV737-A: 37, BYG790-A: 16, BB700-A: 34
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 2020, FSC-H: 24, FSC-W: 104, SSC-A: 388, SSC-H: 5, SSC-W: 63, GFP-A: 2, APC-A: 23, APC-H7-A: 77, BV421-A: 745, BV510-A: 13036, BV605-A: 90, BV711-A: 57, BV786-A: 173, BUV395-A: 49, BUV496-A: 14905, BUV737-A: 75, BYG790-A: 68, BB700-A: 52
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 1382, FSC-H: 10, FSC-W: 66, SSC-A: 225, SSC-H: 5, SSC-W: 40, GFP-A: 1, APC-A: 25, APC-H7-A: 36, BV421-A: 423, BV510-A: 12729, BV605-A: 71, BV711-A: 44, BV786-A: 83, BUV395-A: 8, BUV496-A: 14631, BUV737-A: 49, BYG790-A: 21, BB700-A: 39
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 1258, FSC-H: 8, FSC-W: 92, SSC-A: 270, SSC-H: 10, SSC-W: 58, GFP-A: 5, APC-A: 23, APC-H7-A: 52, BV421-A: 326, BV510-A: 14123, BV605-A: 38, BV711-A: 60, BV786-A: 72, BUV395-A: 18, BUV496-A: 17148, BUV737-A: 67, BYG790-A: 25, BB700-A: 54
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 1606, FSC-H: 24, FSC-W: 69, SSC-A: 196, SSC-H: 4, SSC-W: 21
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 1735, FSC-H: 26, FSC-W: 78, SSC-A: 215, SSC-H: 3, SSC-W: 33
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 1342, FSC-H: 22, FSC-W: 68, SSC-A: 197, SSC-H: 1, SSC-W: 34, APC-H7-A: 19, BV421-A: 47, BV510-A: 1169, BV605-A: 10762, BV711-A: 348, BV786-A: 53, BUV395-A: 50, BUV496-A: 50, BUV737-A: 11509, BYG790-A: 118, BB700-A: 19
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 2060, FSC-H: 27, FSC-W: 84, SSC-A: 373, SSC-H: 5, SSC-W: 35, GFP-A: 2, APC-A: 12, APC-H7-A: 36, BV421-A: 1338, BV510-A: 10620, BV605-A: 383, BV711-A: 33, BV786-A: 37, BUV395-A: 63, BUV496-A: 11472, BUV737-A: 102, BYG790-A: 20, BB700-A: 28
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 2003, FSC-H: 31, FSC-W: 97, SSC-A: 331, SSC-H: 3, SSC-W: 41, APC-H7-A: 10, BV421-A: 26, BV510-A: 1339, BV605-A: 10072, BV711-A: 401, BV786-A: 32, BUV395-A: 35, BUV496-A: 68, BUV737-A: 10821, BYG790-A: 111, BB700-A: 9
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 1329, FSC-H: 20, FSC-W: 56, SSC-A: 195, SSC-H: 5, SSC-W: 17, APC-H7-A: 21, BV421-A: 44, BV510-A: 1103, BV605-A: 10915, BV711-A: 415, BV786-A: 46, BUV395-A: 42, BUV496-A: 77, BUV737-A: 11573, BYG790-A: 143, BB700-A: 23
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 2190, FSC-H: 39, FSC-W: 78, SSC-A: 304, SSC-H: 3, SSC-W: 27, GFP-A: 1, APC-A: 25, APC-H7-A: 49, BV421-A: 1289, BV510-A: 10977, BV605-A: 375, BV711-A: 60, BV786-A: 54, BUV395-A: 41, BUV496-A: 11658, BUV737-A: 119, BYG790-A: 15, BB700-A: 49
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 1559, FSC-H: 16, FSC-W: 60, SSC-A: 175, APC-A: 19, BV421-A: 24, BV510-A: 38, BV605-A: 1166, BV711-A: 11068, BV786-A: 338, BUV395-A: 48, BUV496-A: 37, BUV737-A: 32, BYG790-A: 11659, BB700-A: 94
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 5607, FSC-H: 64, FSC-W: 311, SSC-A: 1099, SSC-H: 30, SSC-W: 139, GFP-A: 4, BV605-A: 7, BUV395-A: 19, BUV496-A: 4
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 4807, FSC-H: 66, FSC-W: 220, SSC-A: 872, SSC-H: 15, SSC-W: 98, GFP-A: 1, BV605-A: 7, BUV395-A: 20, BUV496-A: 4
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 3448, FSC-H: 54, FSC-W: 127, SSC-A: 831, SSC-H: 14, SSC-W: 59, GFP-A: 1, APC-A: 24, APC-H7-A: 37, BV421-A: 1920, BV510-A: 6340, BV605-A: 557, BV711-A: 51, BV786-A: 42, BUV395-A: 131, BUV496-A: 6724, BUV737-A: 190, BYG790-A: 14, BB700-A: 28
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 4579, FSC-H: 78, FSC-W: 188, SSC-A: 860, SSC-H: 13, SSC-W: 68, GFP-A: 1, APC-A: 20, APC-H7-A: 26, BV421-A: 1953, BV510-A: 6281, BV605-A: 527, BV711-A: 23, BV786-A: 27, BUV395-A: 107, BUV496-A: 6656, BUV737-A: 162, BYG790-A: 12, BB700-A: 19
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 4401, FSC-H: 64, FSC-W: 169, SSC-A: 871, SSC-H: 16, SSC-W: 68, APC-H7-A: 20, BV421-A: 27, BV510-A: 2072, BV605-A: 6955, BV711-A: 493, BV786-A: 47, BUV395-A: 33, BUV496-A: 112, BUV737-A: 7429, BYG790-A: 161, BB700-A: 10
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 4958, FSC-H: 78, FSC-W: 184, SSC-A: 1258, SSC-H: 27, SSC-W: 82, APC-H7-A: 20, BV421-A: 29, BV510-A: 2327, BV605-A: 8027, BV711-A: 749, BV786-A: 50, BUV395-A: 41, BUV496-A: 123, BUV737-A: 8564, BYG790-A: 203, BB700-A: 12
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 5720, FSC-H: 82, FSC-W: 300, SSC-A: 1419, SSC-H: 30, SSC-W: 127, GFP-A: 1, APC-A: 10, APC-H7-A: 20, BV421-A: 2471, BV510-A: 7677, BV605-A: 837, BV711-A: 43, BV786-A: 30, BUV395-A: 183, BUV496-A: 8155, BUV737-A: 252, BYG790-A: 3, BB700-A: 14
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 5499, FSC-H: 68, FSC-W: 216, SSC-A: 1251, SSC-H: 22, SSC-W: 89, GFP-A: 1, APC-A: 11, APC-H7-A: 20, BV421-A: 1873, BV510-A: 6009, BV605-A: 608, BV711-A: 22, BV786-A: 35, BUV395-A: 123, BUV496-A: 6303, BUV737-A: 167, BYG790-A: 7, BB700-A: 14
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 481, FSC-H: 6, FSC-W: 112, SSC-A: 347, SSC-H: 7, SSC-W: 61, BUV395-A: 2, BUV496-A: 3
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 626, FSC-H: 4, FSC-W: 32, SSC-A: 98, SSC-H: 3, SSC-W: 21
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 1078, FSC-H: 8, FSC-W: 78, SSC-A: 197, SSC-H: 4, SSC-W: 38, GFP-A: 1, APC-A: 26, APC-H7-A: 41, BV421-A: 233, BV510-A: 9102, BV605-A: 57, BV711-A: 21, BV786-A: 88, BUV395-A: 20, BUV496-A: 10788, BUV737-A: 40, BYG790-A: 26, BB700-A: 30
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 520, SSC-A: 20, SSC-W: 70, APC-H7-A: 9, BV510-A: 11, BV605-A: 20, BV711-A: 184, BV786-A: 10865, BUV395-A: 13, BUV496-A: 17, BUV737-A: 20, BYG790-A: 3, BB700-A: 12414
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 845, FSC-H: 3, FSC-W: 38, SSC-A: 125, SSC-H: 4, SSC-W: 22, APC-H7-A: 5, BV421-A: 18, BV510-A: 195, BV605-A: 8748, BV711-A: 42, BV786-A: 10, BUV395-A: 40, BUV496-A: 6, BUV737-A: 10050, BYG790-A: 16, BB700-A: 3
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 1938, FSC-H: 11, FSC-W: 103, SSC-A: 378, SSC-H: 7, SSC-W: 60, APC-H7-A: 18, BV421-A: 50, BV510-A: 345, BV605-A: 17794, BV711-A: 42, BV786-A: 25, BUV395-A: 97, BUV496-A: 20, BUV737-A: 21091, BYG790-A: 43, BB700-A: 22
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 557, FSC-H: 2, FSC-W: 63, SSC-A: 151, SSC-H: 8, SSC-W: 37, GFP-A: 1, APC-A: 27, APC-H7-A: 49, BV421-A: 348, BV510-A: 21624, BV605-A: 30, BV711-A: 47, BV786-A: 56, BUV395-A: 15, BUV496-A: 25098, BUV737-A: 52, BYG790-A: 18, BB700-A: 44
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 666, FSC-H: 7, FSC-W: 146, SSC-A: 603, SSC-H: 10, SSC-W: 102, GFP-A: 1, APC-A: 24, APC-H7-A: 67, BV421-A: 352, BV510-A: 19192, BV605-A: 40, BV711-A: 43, BV786-A: 46, BUV395-A: 14, BUV496-A: 21720, BUV737-A: 51, BYG790-A: 31, BB700-A: 40
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 2812, FSC-H: 29, FSC-W: 158, SSC-A: 210, SSC-H: 3, SSC-W: 51, GFP-A: 1, BV605-A: 1, BUV395-A: 3, BUV496-A: 2
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 2518, FSC-H: 48, FSC-W: 150, SSC-A: 372, SSC-H: 3, SSC-W: 68, BUV496-A: 1
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 2154, FSC-H: 37, FSC-W: 103, SSC-A: 366, SSC-H: 2, SSC-W: 38, GFP-A: 2, APC-A: 31, APC-H7-A: 51, BV421-A: 1305, BV510-A: 13286, BV605-A: 400, BV711-A: 42, BV786-A: 44, BUV395-A: 62, BUV496-A: 14022, BUV737-A: 120, BYG790-A: 19, BB700-A: 39
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 2469, FSC-H: 32, FSC-W: 113, SSC-A: 414, SSC-H: 4, SSC-W: 48, GFP-A: 2, APC-A: 13, APC-H7-A: 42, BV421-A: 924, BV510-A: 10047, BV605-A: 275, BV711-A: 25, BV786-A: 37, BUV395-A: 36, BUV496-A: 10761, BUV737-A: 79, BYG790-A: 11, BB700-A: 31
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 2347, FSC-H: 46, FSC-W: 107, SSC-A: 511, SSC-H: 3, SSC-W: 36, GFP-A: 1, APC-A: 18, APC-H7-A: 37, BV421-A: 1473, BV510-A: 13100, BV605-A: 497, BV711-A: 31, BV786-A: 32, BUV395-A: 78, BUV496-A: 13933, BUV737-A: 124, BYG790-A: 16, BB700-A: 22
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 2145, FSC-H: 18, FSC-W: 117, SSC-A: 242, SSC-H: 9, SSC-W: 40, GFP-A: 2, APC-A: 13, APC-H7-A: 32, BV421-A: 1388, BV510-A: 13653, BV605-A: 447, BV711-A: 20, BV786-A: 19, BUV395-A: 69, BUV496-A: 14409, BUV737-A: 115, BYG790-A: 11, BB700-A: 21
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 1565, FSC-H: 22, FSC-W: 112, SSC-A: 390, SSC-H: 3, SSC-W: 60, APC-H7-A: 20, BV421-A: 45, BV510-A: 1596, BV605-A: 15694, BV711-A: 585, BV786-A: 33, BUV395-A: 26, BUV496-A: 85, BUV737-A: 16492, BYG790-A: 152, BB700-A: 11
  warnings.warn(self.message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:40: UserWarning: Some data points exceed the PnR value. The data points are truncated. To avoid truncation, set the PnR value manually or pass `truncate_max_range = False`. The following counts were outside the channel range: FSC-A: 2037, FSC-H: 29, FSC-W: 150, SSC-A: 429, SSC-H: 9, SSC-W: 83, GFP-A: 2, APC-A: 26, APC-H7-A: 47, BV421-A: 1589, BV510-A: 14916, BV605-A: 557, BV711-A: 35, BV786-A: 33, BUV395-A: 115, BUV496-A: 15884, BUV737-A: 176, BYG790-A: 19, BB700-A: 34
  warnings.warn(self.message, UserWarning)
... gating sample 20112023_lineage_BM_Cre_neg_unstained_037.fcs
... gating sample 20112023_lineage_BM_Cre_pos_unstained_036.fcs
... gating sample 20112023_lineage_BM_M1_038.fcs
... gating sample 20112023_lineage_BM_M2_039.fcs
... gating sample 20112023_lineage_BM_M3_040.fcs
... gating sample 20112023_lineage_BM_M4_041.fcs
... gating sample 20112023_lineage_BM_M5_042.fcs
... gating sample 20112023_lineage_BM_M6_043.fcs
... gating sample 20112023_lineage_PB_Cre_neg_unstained_030.fcs
... gating sample 20112023_lineage_PB_Cre_pos_unstained_029.fcs
... gating sample 20112023_lineage_PB_M2_031.fcs
... gating sample 20112023_lineage_PB_M3_032.fcs
... gating sample 20112023_lineage_PB_M4_033.fcs
... gating sample 20112023_lineage_PB_M5_034.fcs
... gating sample 20112023_lineage_PB_M6_035.fcs
... gating sample 20112023_lineage_SPL_Cre_neg_unstained_045.fcs
... gating sample 20112023_lineage_SPL_Cre_pos_unstained_044.fcs
... gating sample 20112023_lineage_SPL_M1_046.fcs
... gating sample 20112023_lineage_SPL_M2_047.fcs
... gating sample 20112023_lineage_SPL_M3_048.fcs
... gating sample 20112023_lineage_SPL_M4_049.fcs
... gating sample 20112023_lineage_SPL_M5_050.fcs
... gating sample 20112023_lineage_SPL_M6_051.fcs
... gating sample 21112023_lineage_BM_Cre_neg_unstained_010.fcs
... gating sample 21112023_lineage_BM_Cre_pos_unstained_009.fcs
... gating sample 21112023_lineage_BM_M10_014.fcs
... gating sample 21112023_lineage_BM_M11_015.fcs
... gating sample 21112023_lineage_BM_M12_016.fcs
... gating sample 21112023_lineage_BM_M7_011.fcs
... gating sample 21112023_lineage_BM_M8_012.fcs
... gating sample 21112023_lineage_BM_M9_013.fcs
... gating sample 21112023_lineage_PB_Cre_neg_unstained_002.fcs
... gating sample 21112023_lineage_PB_Cre_pos_unstained_001.fcs
... gating sample 21112023_lineage_PB_M10_006.fcs
... gating sample 21112023_lineage_PB_M11_007.fcs
... gating sample 21112023_lineage_PB_M12_008.fcs
... gating sample 21112023_lineage_PB_M7_003.fcs
... gating sample 21112023_lineage_PB_M8_004.fcs
... gating sample 21112023_lineage_PB_M9_005.fcs
... gating sample 21112023_lineage_SPL_Cre_neg_unstained_018.fcs
... gating sample 21112023_lineage_SPL_Cre_pos_unstained_017.fcs
... gating sample 21112023_lineage_SPL_M10_022.fcs
... gating sample 21112023_lineage_SPL_M11_023.fcs
... gating sample 21112023_lineage_SPL_M12_024.fcs
... gating sample 21112023_lineage_SPL_M7_019.fcs
... gating sample 21112023_lineage_SPL_M8_020.fcs
... gating sample 21112023_lineage_SPL_M9_021.fcs
... gating sample 22112023_lineage_BM_Cre_neg_unstained_010.fcs
... gating sample 22112023_lineage_BM_Cre_pos_unstained_009.fcs
... gating sample 22112023_lineage_BM_M13_011.fcs
... gating sample 22112023_lineage_BM_M14_012.fcs
... gating sample 22112023_lineage_BM_M15_013.fcs
... gating sample 22112023_lineage_BM_M16_014.fcs
... gating sample 22112023_lineage_BM_M17_015.fcs
... gating sample 22112023_lineage_BM_M18_016.fcs
... gating sample 22112023_lineage_PB_Cre_neg_unstained_002.fcs
... gating sample 22112023_lineage_PB_Cre_pos_unstained_001.fcs
... gating sample 22112023_lineage_PB_M13_003.fcs
... gating sample 22112023_lineage_PB_M14_004.fcs
... gating sample 22112023_lineage_PB_M15_005.fcs
... gating sample 22112023_lineage_PB_M16_006.fcs
... gating sample 22112023_lineage_PB_M17_007.fcs
... gating sample 22112023_lineage_PB_M18_008.fcs
... gating sample 22112023_lineage_SPL_Cre_neg_unstained_018.fcs
... gating sample 22112023_lineage_SPL_Cre_pos_unstained_017.fcs
... gating sample 22112023_lineage_SPL_M13_019.fcs
... gating sample 22112023_lineage_SPL_M14_020.fcs
... gating sample 22112023_lineage_SPL_M15_021.fcs
... gating sample 22112023_lineage_SPL_M16_022.fcs
... gating sample 22112023_lineage_SPL_M17_023.fcs
... gating sample 22112023_lineage_SPL_M18_024.fcs
... compensating sample 20112023_lineage_BM_Cre_neg_unstained_037.fcs
... compensating sample 20112023_lineage_BM_Cre_pos_unstained_036.fcs
... compensating sample 20112023_lineage_BM_M1_038.fcs
... compensating sample 20112023_lineage_BM_M2_039.fcs
... compensating sample 20112023_lineage_BM_M3_040.fcs
... compensating sample 20112023_lineage_BM_M4_041.fcs
... compensating sample 20112023_lineage_BM_M5_042.fcs
... compensating sample 20112023_lineage_BM_M6_043.fcs
... compensating sample 20112023_lineage_PB_Cre_neg_unstained_030.fcs
... compensating sample 20112023_lineage_PB_Cre_pos_unstained_029.fcs
... compensating sample 20112023_lineage_PB_M2_031.fcs
... compensating sample 20112023_lineage_PB_M3_032.fcs
... compensating sample 20112023_lineage_PB_M4_033.fcs
... compensating sample 20112023_lineage_PB_M5_034.fcs
... compensating sample 20112023_lineage_PB_M6_035.fcs
... compensating sample 20112023_lineage_SPL_Cre_neg_unstained_045.fcs
... compensating sample 20112023_lineage_SPL_Cre_pos_unstained_044.fcs
... compensating sample 20112023_lineage_SPL_M1_046.fcs
... compensating sample 20112023_lineage_SPL_M2_047.fcs
... compensating sample 20112023_lineage_SPL_M3_048.fcs
... compensating sample 20112023_lineage_SPL_M4_049.fcs
... compensating sample 20112023_lineage_SPL_M5_050.fcs
... compensating sample 20112023_lineage_SPL_M6_051.fcs
... compensating sample 21112023_lineage_BM_Cre_neg_unstained_010.fcs
... compensating sample 21112023_lineage_BM_Cre_pos_unstained_009.fcs
... compensating sample 21112023_lineage_BM_M10_014.fcs
... compensating sample 21112023_lineage_BM_M11_015.fcs
... compensating sample 21112023_lineage_BM_M12_016.fcs
... compensating sample 21112023_lineage_BM_M7_011.fcs
... compensating sample 21112023_lineage_BM_M8_012.fcs
... compensating sample 21112023_lineage_BM_M9_013.fcs
... compensating sample 21112023_lineage_PB_Cre_neg_unstained_002.fcs
... compensating sample 21112023_lineage_PB_Cre_pos_unstained_001.fcs
... compensating sample 21112023_lineage_PB_M10_006.fcs
... compensating sample 21112023_lineage_PB_M11_007.fcs
... compensating sample 21112023_lineage_PB_M12_008.fcs
... compensating sample 21112023_lineage_PB_M7_003.fcs
... compensating sample 21112023_lineage_PB_M8_004.fcs
... compensating sample 21112023_lineage_PB_M9_005.fcs
... compensating sample 21112023_lineage_SPL_Cre_neg_unstained_018.fcs
... compensating sample 21112023_lineage_SPL_Cre_pos_unstained_017.fcs
... compensating sample 21112023_lineage_SPL_M10_022.fcs
... compensating sample 21112023_lineage_SPL_M11_023.fcs
... compensating sample 21112023_lineage_SPL_M12_024.fcs
... compensating sample 21112023_lineage_SPL_M7_019.fcs
... compensating sample 21112023_lineage_SPL_M8_020.fcs
... compensating sample 21112023_lineage_SPL_M9_021.fcs
... compensating sample 22112023_lineage_BM_Cre_neg_unstained_010.fcs
... compensating sample 22112023_lineage_BM_Cre_pos_unstained_009.fcs
... compensating sample 22112023_lineage_BM_M13_011.fcs
... compensating sample 22112023_lineage_BM_M14_012.fcs
... compensating sample 22112023_lineage_BM_M15_013.fcs
... compensating sample 22112023_lineage_BM_M16_014.fcs
... compensating sample 22112023_lineage_BM_M17_015.fcs
... compensating sample 22112023_lineage_BM_M18_016.fcs
... compensating sample 22112023_lineage_PB_Cre_neg_unstained_002.fcs
... compensating sample 22112023_lineage_PB_Cre_pos_unstained_001.fcs
... compensating sample 22112023_lineage_PB_M13_003.fcs
... compensating sample 22112023_lineage_PB_M14_004.fcs
... compensating sample 22112023_lineage_PB_M15_005.fcs
... compensating sample 22112023_lineage_PB_M16_006.fcs
... compensating sample 22112023_lineage_PB_M17_007.fcs
... compensating sample 22112023_lineage_PB_M18_008.fcs
... compensating sample 22112023_lineage_SPL_Cre_neg_unstained_018.fcs
... compensating sample 22112023_lineage_SPL_Cre_pos_unstained_017.fcs
... compensating sample 22112023_lineage_SPL_M13_019.fcs
... compensating sample 22112023_lineage_SPL_M14_020.fcs
... compensating sample 22112023_lineage_SPL_M15_021.fcs
... compensating sample 22112023_lineage_SPL_M16_022.fcs
... compensating sample 22112023_lineage_SPL_M17_023.fcs
... compensating sample 22112023_lineage_SPL_M18_024.fcs
[4]:
AnnData object with n_obs × n_vars = 28113936 × 20
    obs: 'sample_ID', 'file_name', 'organ', 'genotype', 'sex', 'experiment', 'age', 'staining'
    var: 'pns', 'png', 'pne', 'pnr', 'type', 'pnn', 'cofactors'
    uns: 'metadata', 'panel', 'workspace', 'gating_cols', 'dataset_status_hash', 'cofactors'
    obsm: 'gating'
    layers: 'compensated', 'transformed'

We first subset for the gate ‘cells’, which discards the debris but does not yet select singlets and live cells. We then discard all the unstained files and synchronize the dataset.

[5]:
fp.subset_gate(dataset, "cells")
dataset = dataset[dataset.obs["staining"] == "stained"].copy()
fp.sync.synchronize_dataset(dataset)
Found modified subsets: ['adata_obs_names', 'adata_sample_ids']
        ... synchronizing metadata object to contain sample_IDs of the dataset
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\exceptions\_exceptions.py:12: UserWarning: It was detected that the dataset was modified.Please make sure that the performed analyses are still valid. Note that if you removed whole samples, mfi/fop calculations will not be affected.
  warnings.warn(message, UserWarning)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\FACSPy\synchronization\_synchronize.py:106: DataModificationWarning: 'It was detected that the dataset was modified.Please make sure that the performed analyses are still valid. Note that if you removed whole samples, mfi/fop calculations will not be affected.'
  warnings.warn('', DataModificationWarning)

Equalize cell counts between conditions#

We want to compare the different organs blood, bonemarrow and spleen. In order to ensure that we do not over- or underrepresent data, we equalize cell counts between the three organs. We choose to keep 50.000 cells per organ. This downsampling greatly reduces the runtime for the clustering and dimensionality reduction algorithms.

[6]:
fp.equalize_groups(dataset, n_obs = 50_000, on = "organ")

Clustering and dimensionality reduction#

In order to cluster the cells, we first calculate a PCA and the respective neighbors. We then use the leiden algorithm to cluster. Clustering can also be performed using FlowSOM, phenograph or the parc algorithm.

We first set the default gate and default layer as we are interested in CD45+ cells. For dimensionality reductions, we use the transformed data.

[7]:
fp.settings.default_gate = "CD45+"
fp.settings.default_layer = "transformed"

PCA calculation#

We use the fp.tl.pca() function to calculate the PCA coordinates. Note that we do not pass the gate and layer argument explicitly, as we already set it above.

[8]:
fp.tl.pca(dataset)

Neighbors calculation.#

We next use fp.tl.neighbors() to calculate a neighbors matrix.

[9]:
fp.tl.neighbors(dataset)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\pynndescent\pynndescent_.py:346: NumbaPendingDeprecationWarning: Code using Numba extension API maybe depending on 'old_style' error-capturing, which is deprecated and will be replaced by 'new_style' in a future release. See details at https://numba.readthedocs.io/en/latest/reference/deprecation.html#deprecation-of-old-style-numba-captured-errors
Exception origin:
  File "C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\numba\core\types\functions.py", line 486, in __getnewargs__
    raise ReferenceError("underlying object has vanished")

  init_rp_tree(data, dist, current_graph, leaf_array)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\pynndescent\pynndescent_.py:348: NumbaPendingDeprecationWarning: Code using Numba extension API maybe depending on 'old_style' error-capturing, which is deprecated and will be replaced by 'new_style' in a future release. See details at https://numba.readthedocs.io/en/latest/reference/deprecation.html#deprecation-of-old-style-numba-captured-errors
Exception origin:
  File "C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\numba\core\types\functions.py", line 486, in __getnewargs__
    raise ReferenceError("underlying object has vanished")

  init_random(n_neighbors, data, current_graph, dist, rng_state)
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\pynndescent\pynndescent_.py:358: NumbaPendingDeprecationWarning: Code using Numba extension API maybe depending on 'old_style' error-capturing, which is deprecated and will be replaced by 'new_style' in a future release. See details at https://numba.readthedocs.io/en/latest/reference/deprecation.html#deprecation-of-old-style-numba-captured-errors
Exception origin:
  File "C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\numba\core\types\functions.py", line 486, in __getnewargs__
    raise ReferenceError("underlying object has vanished")

  nn_descent_internal_low_memory_parallel(

Leiden clustering#

Finally, we perform leiden clustering. Here, we lower the resolution to 0.3 in order not to overcluster the cells.

[10]:
fp.tl.leiden(dataset, resolution = 0.3)

UMAP projection#

In order to visualize the clustering, we calculate a UMAP embedding and project the clusters onto it.

[11]:
fp.tl.umap(dataset)
[12]:
fp.pl.umap(dataset,
           color = "CD45+_transformed_leiden",
           legend_loc = "on data")
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\scanpy\plotting\_tools\scatterplots.py:392: UserWarning: No data for colormapping provided via 'c'. Parameters 'cmap' will be ignored
  cax = scatter(
posx and posy should be finite values
posx and posy should be finite values
../_images/vignettes_dataset_singlecell_analysis_19_1.png

The clusters likely correspond to the different lineages. We next plot the same UMAP, but color by organ. We notice, that certain clusters are clearly dominated by specific organs.

[13]:
fp.pl.umap(dataset,
           color = "organ")
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\scanpy\plotting\_tools\scatterplots.py:392: UserWarning: No data for colormapping provided via 'c'. Parameters 'cmap' will be ignored
  cax = scatter(
../_images/vignettes_dataset_singlecell_analysis_21_1.png

Cluster abundances#

In order to quantify this, we use the fp.pl.cluster_abundance() plot.

[14]:
fp.pl.cluster_abundance(dataset,
                        cluster_key = "CD45+_transformed_leiden",
                        groupby = "organ",
                        normalize = False,
                        figsize = (4,2))
../_images/vignettes_dataset_singlecell_analysis_23_0.png

Cluster frequency#

We can plot the cluster frequency using the fp.pl.cluster_frequency() function. This will show us the frequency (if normalized=True) or the cell count per cluster and organ. The individual dots correspond to the sample_IDs.

[15]:
fp.pl.cluster_frequency(dataset,
                        cluster_key = "CD45+_transformed_leiden",
                        cluster = "0",
                        groupby = "organ")
No artists with labels found to put in legend.  Note that artists whose label start with an underscore are ignored when legend() is called with no argument.
../_images/vignettes_dataset_singlecell_analysis_25_1.png

Cluster expression heatmap#

Notably, from the UMAP projection we would have assumed that cluster 0 is almost exclusively spleen-derived, while it is only 50%. We next try to find out what cluster 0 is expressing. For this, we use the fp.pl.cluster_heatmap() functionality.

In order to plot marker expressions per cluster, we first have to calculate them. We use the fp.tl.mfi() function and pass the clusters as a groupby parameter. We use the aggregate parameter to control if the grouping is additionally performed by sample_ID. Here, we passt aggregate=True in order to calculate the MFI per cluster only.

[16]:
fp.tl.mfi(dataset,
          groupby = "CD45+_transformed_leiden",
          aggregate = True)
[17]:
fp.pl.cluster_heatmap(dataset,
                      annotate = "frequency",
                      annotation_kwargs = {"groupby": "organ", "normalize": True},
                      cluster_key = "CD45+_transformed_leiden",
                      figsize = (4,8))
../_images/vignettes_dataset_singlecell_analysis_28_0.png

We notice that cluster 0 is expressing B220 highly, which makes it likely to be B-cells. We check with our manual gating by converting the gate information to an .obs column and coloring the UMAP.

[18]:
fp.convert_gate_to_obs(dataset, "B_cells")
fp.pl.umap(dataset,
           color = "B_cells")
C:\Users\tarik\anaconda3\envs\FACSPypeline\lib\site-packages\scanpy\plotting\_tools\scatterplots.py:392: UserWarning: No data for colormapping provided via 'c'. Parameters 'cmap' will be ignored
  cax = scatter(
../_images/vignettes_dataset_singlecell_analysis_30_1.png

Differential expression testing#

We notice that there is also the cluster 4, consisting of B220-hi cells from the bone marrow.

In order to perform differential expression testing between cluster 0 and cluster 4, we first calculate the MFI again, but this time including the sample_ID as a grouping parameter. We do this by passing aggregate=False.

We notice that B cells in cluster 0 express much more CD45 and B220, likely representing B-cell maturation from the bone marrow to peripheral blood.

[19]:
fp.tl.mfi(dataset,
          layer = "compensated",
          groupby = "CD45+_transformed_leiden",
          aggregate = False
         )
[20]:
fp.pl.fold_change(dataset,
                  layer = "compensated",
                  data_group = "CD45+_transformed_leiden",
                  groupby = "CD45+_transformed_leiden",
                  group1 = "0",
                  group2 = "4",
                  figsize = (3,5),
                  stat = "p_adj",
                  min_pval = 10e-6
                  )
../_images/vignettes_dataset_singlecell_analysis_33_0.png

We confirm this using the normal fp.pl.mfi() functionality which plots the raw values.

[21]:
fp.pl.mfi(dataset,
          data_group = "CD45+_transformed_leiden",
          layer = "compensated",
          marker = "B220",
          groupby = "CD45+_transformed_leiden",
          stat_test = False,
          figsize = (6,2))
No artists with labels found to put in legend.  Note that artists whose label start with an underscore are ignored when legend() is called with no argument.
../_images/vignettes_dataset_singlecell_analysis_35_1.png