Vicky mentioned to me that she was having trouble using pyDARM to calibrate H1:OMC-DCPD_SUM_OUT
to strain for the noise budget. I still need to take a closer look to how strain is computed in the noise budget but I have put together some example scripts that should make it easy to do.
To convert the OMC-DCPD_SUM_OUT
signal to strain you need to do the following:
1.) convert OMC-DCPD_SUM_OUT
to units of DARM_ERROR (or DARM1_IN1) from units of mA
2.) multiply the result by the response function provided by pyDARM (informed by the most recent calibration report)
3.) divide the product by the mean length of the arms
For discussion on steps 2 and 3: see Eq. (4) in the O3b cal paper.
Step 1 above is necessary because LHO has linearization logic in between the raw DCPD readout and the output of the LSC Input Matrix. For discussion on this, see G1700316. In particular, I am referring to everything from the input of the block named "Power Normalization" to the output of the block named "LSC Input Matrix" along the red path shown on Slide 18.
To estimate the effect of this signal path we can take a transfer function: H1:LSC-DARM1_IN1_DQ/H1:OMC-DCPD_SUM_OUT_DQ
.
I've written some Python code to measure H1:LSC-DARM1_IN1_DQ/H1:OMC-DCPD_SUM_OUT_DQ
and to calibrate a H1:OMC-DCPD_SUM_OUT
timeseries into an asd with units of strain. While I hope to get these tools integrated with pyDARM soon, I've placed them in a utility repo for now: https://git.ligo.org/louis.dartez/pydarm-utils.
In particular, the function to estimate the tf that converts an OMC-DCPD_SUM_OUT signal into units of DARM counts is here: https://git.ligo.org/louis.dartez/pydarm-utils/-/blob/main/pydarm_utils/measure/cal.py?ref_type=heads#L7. And the function to calibrate a OMC-DCPD_SUM_OUT timeseries into an asd in units of strain is here: https://git.ligo.org/louis.dartez/pydarm-utils/-/blob/main/pydarm_utils/util/strain.py?ref_type=heads#L6.
To demonstrate that this works, I've attached an example asd plot (dcpd_sum_asd.png) that shows strain as taken from GDS-CALIB_STRAIN, DELTAL_EXTERNAL/L, and from OMC-DCPD_SUM_OUT overlaid on each other. I've also included plots of the H1:LSC-DARM1_IN1_DQ/H1:OMC-DCPD_SUM_OUT_DQ
transfer function (dcpd_sum_darmin1_tf.png) and its coherence (dcpd_sum_darmin1_coh.png) to show that 1.) it's pretty flat and 2.) has good coherence below 100Hz.
The times I used for testing were passed to by Vicky.
gps start time: 1387130434
gps end time: gps_start + 600
Being able to measure H1:LSC-DARM1_IN1_DQ/H1:OMC-DCPD_SUM_OUT_DQ
is pretty important because it can fluctuate with time and is under no expectation to remain constant between lock stretches.
For my tests, I estimated the H1:LSC-DARM1_IN1_DQ/H1:OMC-DCPD_SUM_OUT_DQ
value to be: 4.0568e-7. This was calculated at the same time as above.