Originally Posted by zoyd
The Y shift is because HCFR implements a Y correction by design. So if you profile the D3 using HCFR (like I do) it's fine, but because your matrix does not include a Y correction it generates that small error. I think John said he would fix that so that one can do the correction with or without Y.
Sorry about adding to the confusion, I'll try and clarify things a bit.
If we start with the 3 colour method, this takes the readings and references in xyz or XYZ space and calculates the matrix that will transform the readings to the references. If you use xyz then the columns of the matrix add to 1 which means that if you apply it to xyz values then the results are always valid xyz triplets.
The 4 colour approach ends up doing something more subtle and ends up with a matrix that when applied to xyz values converts the white from reading to reference keeping the xyz balance intact but that only works for that one point, looking at the column sums they no longer add to 1.
This is what confused me slightly and made me think that re-normalisation was desireable/correct.
When moving to XYZ values rather than xyz the 3 colour approach will adjust the 3 primaries from whatever the readings are to whatever the references are for all 3 values so it just works.
With the 4 colour matrix the Y values with shift in a clever but not very obvious way that's not related to the actual Y readings as all the inputs to the calculations are normalized values.
I'm currently thinking that the best approach will be to scale the resulting 4 colour matrix so that the measured Y value for white is corrected to the reference white Y value and not to do any normalisation of the results. This is a minor issue and with only effect the Y values in a linear fashion and so for now just use the calculated matrices.