You've combined FrameGeommety from cti_image with CIFrame from ci_frame. This is fine for the most part, however there are routines which are specific to charge injection imaging (e.g. parallel_trail_from_y) which are not applicable to other imaging which may need to be a cti_image and thus have a FrameGeometry (e.g. science imaging data).
I would suggest we split the classes again and have CIFrameGeometry inherit from FrameGeometry.