Skip to content

FCS Express compatibility #139

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
malcook opened this issue Oct 27, 2021 · 10 comments
Open

FCS Express compatibility #139

malcook opened this issue Oct 27, 2021 · 10 comments

Comments

@malcook
Copy link

malcook commented Oct 27, 2021

Has any testing been performed with .fcs files as generated by FCS Express. Specifically, should load_cytoset_from_fcs work as it does with FloJo .fcs files?

@mikejiang
Copy link
Member

As long as fcs file generated conforms to the standard, cytolib should have no problem to parser it. Feel free to report it when it does

@malcook
Copy link
Author

malcook commented Nov 1, 2021

Apologies, my question was only poorly stated. I am really most interested in applying a gating strategy developed in FCSExpress under control of R, something akin to what flowWorkspace enables for flowjo workspaces. So far, I am successful in importing into an environment the .gatingML files (which recent versions of FCSExpress can export). I can identify the imported filters and apply them individually to a flowFrame or flowSet.

I am now building a GatingSet and using gs_pop_add to add to it each imported filter. In appreciation of your TIP that the standard gatingML mainly focuses on the definition of individual gates in a flat structure, which is really not suitable for representing the gating hierarchy from GatingSet, I am employing a naming convention for the gates to encode the hierarchy (or simple order) of gating (e.g. liveCells.1.0, singleCells.2.1, giving each named gate an index and the index of its parent) and thus how to structure the various calls to gs_pop_add .

Having done this, when I then recompute the GatingSet I (appropriately) get an error

Error in cpp_gating(x@pointer, y, alwaysLoadData, verbose, leaf.bool) : 
  colname not found: TransformsingleSS02-W.fcs.SS02-W

which makes sense because I have not (yet) learned how to add the transforms present in the gatingML to the GatingSet.

I am having trouble figuring out what my next steps should be. Perhaps examining the source for how the flowJo workspace import will give me the secret sauce I need at this point. But I would be grateful for any worked examples.

I am attaching an example .gatingML (which does not yet adhere to my proposed gate naming convention) and an .fcs file file if it helps you to help me.
21cy147.zip

Thanks

@altrabio
Copy link

Hi Malcolm,
I am wondering if you finally succeeded in importing an FCSExpress gating in R? If so, would you be able to share your code, it would so much helpful!
Thanks

@malcook
Copy link
Author

malcook commented Jan 4, 2024 via email

@PedroMilanezAlmeida
Copy link

hey @mikejiang, just checking whether are there any plans to support FCSExpress layouts in near future?

@gfinak
Copy link
Member

gfinak commented Apr 2, 2024

FCS express doesn't open their format (last time we checked), so no we have no plans to support it.

@PedroMilanezAlmeida
Copy link

thank you @gfinak!

@malcook
Copy link
Author

malcook commented Jun 4, 2025

@gfinak re:

FCS express doesn't open their format (last time we checked), so no we have no plans to support it.

IMO - no opening of format should be needed - FCS express exports gatingML files

@altrabio - I'm taking this up again in #86 - still hoping to find satisfadction - please alert me with any insights/progress you may have!

@gfinak
Copy link
Member

gfinak commented Jun 4, 2025 via email

@malcook
Copy link
Author

malcook commented Jun 4, 2025

reverse engineer another undocumented file format.

@gfinak I am sympathetic but hoped that FCS Express exporting using the reasonably well documented gatingML format would alleviate anyone's need for having to do so.

It seems to me that the effort is learning how to convert a naked (outside of a flowJo workspace) gatingML file into a form that can be applied to a gating set.

In #86 you will see I am trying to undertake this effort by using CytoML:::read.gatingML to read the xml into an R environment, and the writing setAs('environment','graphGML') as an approach to converting such an environment into a graphGML object which I hope to be apply to apply to a gating set using CytoML:::gating_graphGML.

Might you (or anyone) be able and willing to provide some guidance, perhaps in the form of discussion (in your choice of forum), as to whether this approach is reasonable and perhaps some insight into what read.gatingML.cytobank is doing that needs a parallel treatment in my setAs approach?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants