This is sort of a post-mortem issue to wrangle related commits to cytolib, flowWorkspace, and CytoML to address the following and provide some rationale to our future selves:
Before these commits, flowWorkspace::gh_apply_to_new_fcs was calling flowWorkspace:::.cpp_NewGatingSet, which in turn was automatically scaling the time channel by the factor in the $TIMESTEP keyword from the sample FCS:
This makes sense if the source for the template GatingHierarchy for gh_apply_to_new_fcs originated in FlowJo where this scaling is standard. But otherwise, this results in a perhaps unexpected scaling of the time channel for the new samples relative to the template GatingHierarchy. Furthermore, there would be no intrinsic history of whether this transformation had already been applied, meaning using a result itself as a template would result in further rescaling.
For these reasons, it made sense to instead add the time channel transformation back as a separate transformation object during FlowJo parsing in CytoML. This in turn required some changes to cytolib::scaleTrans to handle a scale transformation based on a single floating point factor (as opposed to two ints). That in turn required some changes to the protocol buffers.
This is sort of a post-mortem issue to wrangle related commits to
cytolib
,flowWorkspace
, andCytoML
to address the following and provide some rationale to our future selves:Before these commits,
flowWorkspace::gh_apply_to_new_fcs
was callingflowWorkspace:::.cpp_NewGatingSet
, which in turn was automatically scaling the time channel by the factor in the$TIMESTEP
keyword from the sample FCS:https://github.com/RGLab/cytolib/blob/4a03d9920224db44171a9eb2d77a6c318829241c/src/GatingSet.cpp#L354
This makes sense if the source for the template
GatingHierarchy
forgh_apply_to_new_fcs
originated in FlowJo where this scaling is standard. But otherwise, this results in a perhaps unexpected scaling of the time channel for the new samples relative to the templateGatingHierarchy
. Furthermore, there would be no intrinsic history of whether this transformation had already been applied, meaning using a result itself as a template would result in further rescaling.For these reasons, it made sense to instead add the time channel transformation back as a separate transformation object during FlowJo parsing in
CytoML
. This in turn required some changes tocytolib::scaleTrans
to handle a scale transformation based on a single floating point factor (as opposed to two ints). That in turn required some changes to the protocol buffers.