(These comments were made about the original SepMask operator which is currently in book/Otherops. As of this writing, I am using SepMask2 in book/misfilt.)
Perhaps we could have a MaskFactory which would have functions like:
getMaskFromKnownData(Vector knownData): this could return an Rsf or Isf mask depending on the class of knownData
getMaskFromUnknownData(Vector knownData): analogous to the above, but this returns the "complement"
Maybe a Mask should have a method Mask getComplement(), which would return the complement as a mask (Complement = Identity - Mask). This getComplement() function conflicts with the fact that SepMask is derived from DiagRsfOp, since the complement requires a new Rsf to be made. That's inefficient. Basically, if we don't want getComplement, SepMask should continue to be derived from DiagRsfOp, otherwise it probably should not.