QuickstartΒΆ
Follow the Installation instructions to set up an environment. Then try these examples to learn what pyreflow can do.
Read HEADER:
from pyreflow.api import fcs_read_header
out = fcs_read_header("t_cells.fcs")
# show version
out.version
# show TEXT segment offsets
out.segments.text
Read TEXT (flat mode):
from pyreflow.api import fcs_read_flat_text
out = fcs_read_flat_text("tea_cells.fcs")
# standard keywords as a dict
out.std
# non-standard keywords as a dict
out.nonstd
# header segments
out.parse.header
# delimiter
out.parse.delimiter
Read TEXT (standardized mode):
from pyreflow.api import fcs_read_std_text
# "core" is a class which encodes fully standards-compliant TEXT; "uncore"
# has data that is overspecified or non-compliant relative to "core"
core, uncore = fcs_read_std_text("tea_sells.fcs")
# show version
core.version
# show the $CYT keyword
core.cyt
# set the $PROJ keyword
core.proj = "platypus immune dynamics"
# show all $PnN keywords
core.all_shortnames
# set all $PnS keywords (length must match number of measurements)
core.all_longnames = ["FSC-A", "SSC-A", "FL1-A", "FL2-A"]
# write HEADER+TEXT to file
core.write_text("bee_sells.fcs")
# show $TOT
uncore.tot
# show "pseudostandard" keywords
uncore.pseudostandard
Read dataset (flat mode):
from pyreflow.api import fcs_read_flat_dataset
out = fcs_read_flat_dataset("tea_smells.fcs")
# show DATA as dataframe
out.data
# show ANALYSIS as bytes
out.analysis
# show standard keywords
out.text.std
Read dataset (standardized mode):
from pyreflow.api import fcs_read_std_dataset
# "core" and "uncore" are roughly analogous to those from fcs_read_std_text
core, uncore = fcs_read_std_dataset("tea_sales.fcs")
# show DATA
core.data
# show ANALYSIS
core.analysis
# remove all DATA and measurements
core.unset_data()
# write to file
core.write_dataset("bee_sales.fcs")
# show pseudostandard keywords
uncore.pseudostandard
Read non-compliant dataset:
from pyreflow.api import fcs_read_std_dataset
path = "whiskey_tango_foxtrot.fcs"
# This might be a typical example of a file which says its version is 2.0
# but is actually 3.0 due to the presence of 3.0 keywords. The default is
# to only accept compliant files, so this will fail:
core, uncore = fcs_read_std_dataset(path)
# "version_override" will force this file to be read as FCS 3.0. It
# doesn't have $TIMESTEP so we need to add this as well using
# "append_standard_keywords" (note the value is a string and the key does
# not start with "$"). Finally, some keyword values have extra whitespace
# which prevents them from being parsed. We can fix with
# "trim_value_whitespace". Since this often leads to blank values (which
# are not allowed) we can also ignore those using "allow_empty".
core, uncore = fcs_read_std_dataset(
path,
version_override = "FCS3.0",
append_standard_keywords = {"TIMESTEP": "1.0"},
trim_value_whitespace = True,
allow_empty = True,
)
Read (extremely) non-compliant dataset:
from pyreflow.api import (
fcs_read_flat_text,
fcs_read_std_dataset_with_keywords,
)
path = "foobar.fcs"
# This file is so far gone that pyreflow does not have the flags to fix it.
# Therefore we need to correct "offline". Start by parsing TEXT in flat mode:
out = fcs_read_flat_text(path)
# Pull the standard keywords as a dict. These are what we need to fix.
to_fix = out.std
# ... do stuff with "to_fix" using pure python code
# check the version (assume we know its 3.2)
out.version
# After fixing, continue parsing the file with corrected keywords:
let hs = out.parse.header_segments
better = CoreDataset3_2::from_kws(
path,
to_fix,
out.nonstd,
hs.data,
hs.analysis,
hs.other,
)
# Celebrate by showing DATA
better.core.data