Fix single far nondeterminism
@andrewmichael.gozzard found an issue with our python and C memory interop.
When python postcoh_finalsink
receives a buffer, it runs from_buffer
in _postcohtable.c
. That copies the buffer's triggers into new blocks of memory. Following Tom's changes, it also creates a bunch of NumPy arrays per IFO, to store values like far_sngl
. However, these NumPy arrays were backed by buffer's memory, rather than the new memory block.
In addition to that, we had 2 ways of accessing the elements of far_sngl
in finalsink
. 1st, using the array itself, which jumped straight to the buffer's memory. 2nd, using getter/setter methods created per IFO in _postcohtable
, such as far_sngl_H1
, which used the new memory block.
That issue was fixed by backing the NumPy arrays onto the new memory blocks.
Finally, far_sngl could be redefined in python as we never wrote getter/setter methods for the array itself. So we added the READONLY
flag.