When we first put together everything for PM1, we just copied all the filters over from RM1(84457). It turns out that the coil drivers for RM1 and RM2 both have had ECRs completed (ECR:E2200307, IIET:24501) that changed the frequency response for the coil drivers, a change which the PM1 coil drivers do not have.
After some troubleshooting (84454), we figured this all out, and so I just went in and updated the COILOUTF filters for PM1 to be what they are supposed to be, which is identical to the filters used in the other HAMA driver top masses that haven't had the ECRs done to them, like the ZMs. Filters have been loaded in.
| Filter | Before (matching RMs) | After (matching ZMs) |
| LPM1 (not used) | zpk([52.32;50.77],[0.5;3174],1,"n") | zpk([9.99999;20.9999],[0.9;211.883],1,"n") |
| AntiLPM1 | zpk([0.5;3174],[52.32;50.77],1,"n") | zpk([0.9;211.883],[9.99999;20.9999],1,"n") |
J. Kissel, R. Kumar, O. Patane, F. Clara We're debugging why high-frequency asymptote/slope/frequency response of PM1's transfer functions do not match RM1's -- see RED (PM1) and BLACK (RM1) from the attachments of LHO:84397. I immediately suspected coil driver compensation filters in COILOUTF banks did not match the analog HAM-A driver's low pass filter *state.* In the modern era all HAM-A driver's low pass filters are to be jumpered ON since we don't have binary input/ouput remote control of them. And when instantiating a new HTTS suspension, because there's no MEDM interface to set it, and you have to "caput" the channel (H1:SUS-RM1_BIO_M1_STATEREQ) to 2.0 via the command line. When we forget to do this, we errantly see the analog response of the driver in the health check transfer functions rather than the expected "falls as 1/f^2 above the resonances." We confirmed (via trend) that I *did* set this correctly when I original brought the infrastructure online see LHO:84457 comment to LHO:83293 on Mar 20 2025. We also confirmed that it's still the case today -- see attached screenshot, with magneta box around the CD state. We also confirmed that the LED status lights of the LP filter are green / ON, which report that, internally, indeed the HAM-A driver's LP filter switch is in the "Run" state, which is LP ON, see attached photo of SUS-C4, U-heights 3 (for PM1),4 (for RM2), 5 (for RM1) (per page 14 of D0902810-v11). HOWEVER (1) In taking that picture, I noticed that all the HAM-A drivers in that rack had a sticker mentioning ECR E2100430 *except* for PM1's driver in U3. In that ECR -- which is for modifying the OMs -- is better described in T2100410, the low pass filter response was changed from a z:p = [10,20]:[1,200] to z:p = [0.5,3174]:[52.32, 50.77]. There are later ECRs E2200307 and E2400048 that demand the *rest* of the HAM-A drivers should be modified with these same changes. Tickets IIET:20650 (for OMs) IIET:24501 (for IMs, RMs, and OFI), confirm that these modifications have been done at LHO for those suspensions. (2) IIET:30349 (for the A+ SUS), suggests that no such modifications have been done at LHO (and partially implemented at LLO). Rahul confirms with a pictures from SUS-M1 that the ZM1 ZM2 ZM3 and the OPO, and SUS-C8 for ZM4 ZM5 ZM6 that there are no stickers referencing any ECR E2100430, E2200307, and what it *should* reference, E2400048. From this we conclude that E2400048 has NOT been implemented here at LHO. (3) Finally - even though ECRs demand that essentially ALL HAM-A drivers should now have this LP filter change -- there exists NO version of D1100117 that has the the change in components or callout of new frequency response. This is likely why this change got overlooked when setting up PM1's HAMA driver. So, from the lack of sticker, lack of updated circuit drawing, and odd health check transfer function response -- we conclude frequency response PM1's HAM-A driver has frequency response is still the z:p = [10,20]:[1,200] response. When I set up PM1, I copied RM1's COILOUTF frequency response. RM1's COILOUTF is *correctly* was compensating the z:p = [0.5,3174]:[52.32, 50.77] analog response. However, that will NOT correctly compensate the unmondified PM1 driver's z:p = [10,20]:[1,200] response. *sigh* For now, we'll update the COILOUTF filters, and then discuss later when / if we want to modify the driver.
I am attaching two pictures as a reference to Jeff's comments above ("there are no stickers referencing any ECR E2100430, E2200307, and what it *should* reference, E2400048"), please see them below,
1. Picture01- SUS-M1 for ZM1 ZM2 ZM3 taken at the MER
2. Picture02 - SUS-M1 for ZM4-5-6 taken at the CER (see slot U11 and U12).
Yikes! E2200307 also mentions to eliminate the binary switching for the IMs and use jumpers like all the others. Since the binary IO chassis for the IMs are still in the rack, I suspect this hasn't been completed. We should go ahead and install the jumpers for the IMs and remove the binary IO chassis.
The COILOUTF filters have been updated to compensate the current, z:p = [10,20]:[1,200], frequency response -- see LHO:84455.
Original (and more detailed) post: SWG:12283
I have added two scripts and a folder to the Common/MatlabTools of the Sus SVN. The folder is called ExportedModels and it contains exported [A,B,C,D] matrices for making state-space models for 13 suspension types (HLTS_model, QUAD_model, HAUX_model, etc.). It also contains a SUS_projections struct that contains a summary of the OSEM to euler bais changes for most suspensions, also organized by suspension type.
Instructions to navigate the structs can be found in export_SUS_production_models.m, and export_SUS_projection_matrices.m; both inside Common/MatlabTools/
The idea is that these two can be imported into other programming languages (I'm thinking python right now) for analysis, scripting or any other things that people might want.
___
The use I have in mind right now is for OSEM calibration using ISI drives, following the work we're doing with Oli [see LHO:84296]. But could be handy for something else.
Mon May 19 10:06:14 2025 INFO: Fill completed in 6min 11secs
FAMIS 31086
The PMC was left unlocked over the weekend, and when Oli relocked it this morning, it came back with higher transmitted power but about the same reflected, and the ISS diffracted power is lower too. As things are still settling, PMC TRANS is coming down and the ISS diffraction is coming up. However, this has also made the (already poorly calibrated) rotation stage downstream unhappy as the higher power out of the PMC is causing the stage to not exactly provide the power requested (e.g 2.2W vs 2.0W) and the LASER_PWR Guardian is reporting "Power not the same as requested." As the HAM1 team is currently using the beam for alignment checks and doesn't particularly care about the extra 200mW, I'll leave things alone for now.
Dry air skid checks, water pump, kobelco, drying towers all nominal.
Dew point measurement at HAM1 -43.9 °C.
TITLE: 05/19 Day Shift: 1430-2330 UTC (0730-1630 PST), all times posted in UTC
STATE of H1: Planned Engineering
OUTGOING OPERATOR: None
CURRENT ENVIRONMENT:
SEI_ENV state: LIGHT_MAINTENANCE_WINDY
Wind: 17mph Gusts, 10mph 3min avg
Primary useism: 0.02 μm/s
Secondary useism: 0.11 μm/s
QUICK SUMMARY:
HAM1 doors should be going on today!
LVEA is currently LASER SAFE (84443)
Sun May 18 10:06:37 2025 INFO: Fill completed in 6min 33secs
Sat May 17 10:06:18 2025 INFO: Fill completed in 6min 14secs
I left 10W out of the rotation stage, with the stage de-engergized this evening and the light pipe closed. I've just now unlocked the PMC (LOCK off, RAMP off) so that we won't have 10W on the light pipe shutter all weekend.
This is a reminder that whenever the PMC is unlocked, especially for an extended period of time, the FSS and ISS should also be disengaged; otherwise, the respective autolockers will continue to try to engage these systems despite not having the means to do so (because they have no light, since the PMC is unlocked). If there are ever any questions as to how to properly and safely disengage the PSL stabilization systems, CONTACT ME. It does not matter if I'm offsite for any reason (RDO, vacation, sick, etc.).
From the 10-day trends Ryan posted this morning, neither the ISS nor the FSS were properly disengaged, so were left trying to lock all weekend. For the FSS see the plot H1:PSL-FSS_NPRO_XTALTEMP in this set of plots. It's clear from this plot that the FSS autolocker was doing a temperature search while trying to lock the RefCav, which means the NPRO PZT was also ramping. Since there was no light in the FSS path the RefCav could not lock, so the search continued all weekend.
For the ISS, see the plot H1:PSL-ISS_DIFFRACTION_AVG in this set of plots. The ISS diffraction should be completely flat if it is off, but the series of downward spikes indicate the ISS was trying to lock and failing to do so, since there was no light on the ISS PDs (my guess is it kept lowering the diffraction percentage to try to increase light on the ISS PDs, and unlocking when the diffraction hit 0% to start the process again). This can also be seen in the behavior of the PMC reflected power (1st attached picture), which was moving around substantially all weekend as the ISS was trying and failing to lock; can also see the ISS diffracted power moving between 0% and 40%. A zoomed in portion is also attached, in which it's seen that the ISS diffraction was moving from zero to ~20% (but as high as 50%) in a roughly 15 second period; note the changes in PMC Refl during this time (the small spikes in PMC Trans are not the PMC trying to lock, it's small flashes of resonance as the temperature of the PMC changes combined with the FSS actuating on the laser frequency).
While not strictly necessary, it's good practice to also close the PSL external shutter if the stabilization systems are going to be disabled for an extended period.
I don't think that this will compromise the performance of the ISS or FSS, but this does represent unnecessary wear on the mechanical components that are the actuators for both of these stabilization subsystems. I should have caught that the PSL was left in this state, but did not pay attention to the alog during my RDO weekend and therefore did not catch this. For this I apologize.
Sheila and I went into HAM1 today to do a few last things:
From ISC perspective, we are good to go for doors and pumpdown.
Sheila, has Transitioned the LVEA back to LASER SAFE.
TITLE: 05/16 Day Shift: 1430-2330 UTC (0730-1630 PST), all times posted in UTC
STATE of H1: Planned Engineering
INCOMING OPERATOR: None
SHIFT SUMMARY:
Work is ongoing in HAM1 to finish up all the checks we need done before doors go on next week.
The RM/PM damping issues that we've been seeing (84427) are most likely due to the higher purge air in HAM1 since they had been working fine two days ago when the purge air had been turned way down, and yesterday and today when the purge air had been turned up, were not working. We'll be able to better confirm this on Monday during a time when we can have the purge air very low and there isn't any activity happening in HAM1. RM1, RM2, and PM1 have been put into SAFE for the weekend.
The LVEA is currently LASER HAZARD.
Sensor correction is on in the LVEA (SEI_ENV: LIGHT_MAINTENANCE_WINDY and SEI_CONF: NOBRSXY_WINDY).
LOG:
| Start Time | System | Name | Location | Lazer_Haz | Task | Time End |
|---|---|---|---|---|---|---|
| 14:52 | FAC | Kim | LVEA | YES | Tech clean | 15:40 |
| 15:28 | ISC | Sheila | LVEA | YES | Transitioning to laser hazard | 15:42 |
| 15:28 | VAC | Jordan | LVEA | YES | Purge air checks | 15:44 |
| 16:01 | ISC | Sheila | LVEA | YES | Turning off a sideband | 16:08 |
| 16:36 | ISC | Marc, Sheila | LVEA | YES | Turning on HV for HAM6 | 16:41 |
| 16:37 | VAC | Janos | LVEA | YES | Checking things | 16:45 |
| 17:10 | ISC | Sheila | LVEA | YES | Turning sidebands back on | 17:26 |
| 17:53 | ISC | Sheila, Elenna | LVEA | YES | Final beam checks in HAM1 | 20:13 |
| 20:04 | SEI | Michael, Shoshana | EY | n | Minor wiring on BRS | 20:47 |
| 20:14 | VAC | Jordan | MX | n | Vacuum measurements | 21:46 |
| 20:47 | PEM | Robert | LVEA | YES | Looking for scattered light in HAM1 | 21:57 |
| 21:46 | VAC | Jordan | LVEA | YES | Vacuum measurements | 21:57 |
| 21:55 | TCS | Tony & Mitchel | Mech room | N | Chiller water checks. | 22:06 |
| 22:07 | CDS | Oli, Marc | CER | YES | Checking out PM1 coil drivers | 22:14 |
| 22:16 | ASC | Sheila & Elenna | LVEA HAM1 | Yes | Final Beam Checks. | ongoing |
| 22:43 | VAC | Jordan | LVEA | YES | Turning HAM1 purge air down | 22:46 |
| 23:13 | VAC | Jordan | LVEA | YES | Turning purge air back up | 23:14 |
Just adding a note:
As of the end of the day, Sheila and I have left the sidebands OFF, and the HAM6 high voltage ON (per WP #12545).
Jennie W, Sheila, Elenna
In order to get data for mode-matching and for Elenna to get data to calibrate sideband heights we ran some mode scans after the SR3 heater was turned on last night.
16:55:24 UTC Carried out single bounce OMC scan at 10W PSL input with sensor correction on HAM6 on, high voltage on for PZT driver in HAM6, sidebands off , SRM mis-aligned, ITMY mis-aligned, DC 3 and 4 on, OMC ASC on.
Excitation freq changed to 0.005 Hz as the top peak of the TM00 mode looked squint so could have been saturating. Lowering this frequency prevented this.
Ref 15-17 corresponds to dcpd data, pzt exc signal, pzt2 dc monitor.
Then mis-aligned ITMX and aligned ITMY (Sheila had to re-align SR2 to centre on ASC-AS_C).
Measurement starts at 17:08:18 UTC.
Ref 18-20 corresponds to dcpd data, pzt exc signal, pzt2 dc monitor.
Traces saved in 20250516_OMC_scan.xml. The top left plot is the first scan bouncing beam off ITMX, the second scan is the bottom right bouncing off ITMY.
The top right is the two plots of the PZT2 DC voltage monitor. That is, the current voltage applied to the PZT. The bottom left is the plot of the voltage ramp applied to the PZT2 on the OMC for this measurement.
The ndscope attached shows the power in mA transmitted through the OMC on the top, then the PZT used for the scan DC voltage underneath, then the input PZT voltage underneath that, then the reflected power from the OMC in mW, then at the bottom the SR3 heater element temperature in degrees.
Elenna did two more scans in single bounce with sidebands back on and different modulations depths in each.
See Elenna's comment on her previous measurement where this saturation happened.
Turn off the sidebands - instructions in this alog.
Sheila and I ran one more OMC scan with sidebands off after OM2 heated up. Attached is the screenshot with scans off both ITMX and ITMY, data is saved in [userapp]/omc/h1/templates/OMC_scan_single_bounce_sidebands_off.xml
I also ran two OMC scans, single bounce off ITMY, 10 W input, with the sidebands ON. One measurement I ran with the sidebands set to 23 dBm and 27 dBm (9 and 45 MHz) and another set to 20 dBm and 21 dBm (9 and 45 MHz). I will use these measurements to calibrate the modulation depth. Data saved in /opt/rtcds/userapps/release/omc/h1/templates/OMC_scan_single_bounce_RF_cal.xml
SR3 heater was on for this measurement but it should have little effect on my results.
Looked closer at these HWS signals during SR3 heater heat up and cool down. In all these plots, the two t-cursors are used as the reference and shown HWS live image.
Some strange things:
Finally got round to fitting the two single bounce mode scans done with SR3 hot and OM2 cold. The first we had ITMX aligned, the second we switched to ITMY aligned.
These can currently be processed using OMCscan.py in the /dev branch for the labutils/omcscan repository at /ligo/gitcommon/labutils/omc_scan, you need to have activated the labutils conda environment to do so.
The call statements for the data processing are:
python OMCscan.py 1431449762 130 "1st 1431449762 - SR3 hot, 10W PSL, ITMY mis-aligned" "single bounce" -s -v -o 2 -m
python OMCscan.py 1431450536 140 "2nd 1431450536 - SR3 hot, 10W PSL, ITMX mis-aligned" "single bounce" -s --verbose -m -o 2
For each measurement the tag -s specifices that the sidebands were not on and so in order to calibrate the PZT the code uses the two TM00 modes and then you have to tell it in what height order the 10 and 20 modes appear relative to the highest peak which will be one of the 00 modes.
def identify_C02(self):
"""If in single bounce configuration, and with sidebands off,
identify 10 and 20 modes in order to improve fit.
Assumes that
OMCscan.identify_peaks()
and
OMCscan.identify_carrier_00_peaks()
have already been run.
Output:
-------
self.peak_dict: dictionary
first set of keys are carrier, 45 upper, 45 lower
second set of keys are TEM mode, e.g. "00", "01", "20", etc.
third set of keys is the fsr number
"""
# Create temporary dictionary to combine into self.peak_dict
peak_dict = {}
peak_dict["carrier"] = {"10": {}, "20": {}}
#print(peak_dict)
nn = [2, 1]
mm = 0
#freq_diff = np.empty(np.size(self.peak_frequencies)) not sure why this line here.
#set frequency to be that of third largest peak.
first_order = np.argsort(self.peak_heights)[-4]#-4 for second meas.
second_order = np.argsort(self.peak_heights)[-3]#change index to match where 20 is in terfirst meas if measuring from start of scan.ms of peak height.
#print(third_larg)
for ii, peak_freq in enumerate(self.peak_frequencies):
if peak_freq == self.peak_frequencies[second_order]:
#print("found C02")
#print(f"List fields in IFO {self.fields_MHz}")
#print(type(self.fields_MHz))
#print(f"OMC HOM spacing {self.omc_hom} MHz")
#print(type(self.omc_hom))
field = f"carrier"
#print(f"mode {field}{nn[0]}{mm}")
peak_dict[field]["20"][-1] = {
"height": self.peak_heights[ii],
"voltage": self.peak_pzt_voltages[ii],
"frequency": self.peak_frequencies[ii],
"true_frequency": np.mod((self.fields_MHz - (nn[0] + mm) * self.omc_hom), self.omc_fsr),
"label": r"$c_{20}$",
}
self.peak_ided[ii] = 1
elif peak_freq == self.peak_frequencies[first_order]:
field = f"carrier"
peak_dict[field]["10"][-1] = {
"height": self.peak_heights[ii],
"voltage": self.peak_pzt_voltages[ii],
"frequency": self.peak_frequencies[ii],
"true_frequency": np.mod((self.fields_MHz - (nn[1] + mm) * self.omc_hom), self.omc_fsr),
"label": r"$c_{10}$",
}
self.peak_ided[ii] = 1
else:
continue
# Merge dictionaries
#if not "20" in peak_dict["carrier"].keys():
self.peak_dict["carrier"] = {**self.peak_dict["carrier"], **peak_dict["carrier"]}
#print(self.peak_dict)
#print(self.peak_ided)
return
For both measurements I only took slightly over 1 FSR of the data, this is because in order to fit a polynomial to the known peaks (allowing us to calculate the PZT non-linearity), the code assumes the 1st order is the 3rd highest and 2nd order is the 4th highest. In the code above you need to change the indexes in the below lines to match the height order of the peaks (ie. and index of -4 is fourth highest peak).
first_order = np.argsort(self.peak_heights)[-4]
second_order = np.argsort(self.peak_heights)[-3]
When the mode-matching is bad this may not be true, also if there are multiple FSRs in the scan this also may not be true.
First measurement 1st order mode is fifth highest, 2nd order mode is third highest. The scan is here. I took 130 s of data. The PZT fit is here.
Second measurement the 1st order mode was the 4th highest, 2nd order mode was the third highest. The scan is here. I took 140s of the scan data. The PZT fit is here.
First measurement has
1.69/(1.69+15.86) = 9.63 % mode mis-match.
Second measurement has
1.25*100/(1.25 + 16.46) = 7.06 % mode mis-match
I also analysed the single bounce measurements Elenna and Sheila made after OM2 was heated up. So these have both SR3 and OM2 hot.
For both these measurements C02 was the third highest mode and C01 was the fourth highest. I took 120s starting 45s into the scan.
Measurement 1: 23:40:38 UTC on 2025/05/16 with ITMX aligned and ITMY mis-aligned.
See the spectrum with labelled peaks here.
And the PZT calibration here.
Mode mis-match is:
0.93/( 0.93 + 17.29 ) = 5.10 %
Measurement 2: 23:46:48 UTC on 2025/05/16 with ITMY aligned and ITMX mis-aligned.
See the spectrum with labelled peaks here.
And the PZT calibration here.
100 * 0.56/( 0.56 + 17.62 ) = 3.08 %
Bear in mind that this is assuming that there is no astigmatism in the OMC (since there is but we cannot resolve 02 vs 20 modes). This requires some careful analysis of uncertainties to get useful info about how we should tune for better mode-matching. Watch this space.
J. Kissel Today Dave installed all the simulink front-end code infrastructure that Oli and I built for PM1 (see LHO:83214), Oli created a generic MEDM macro for PM1 and attached a call to that file with the generic HTTS MEDM screen to the sitemap yesteday. That meant I had everything in place for me to completely fill out the PM1 infrastructure: - Populated OSEM2EUL, SENSALIGN, and EUL2OSEM matrices with generic HTTS values - Populated OSEMINF filter banks with standard OSEM calibration filters and turned them ON with a gain of 1.0 for now - Populated the DAMP filter with standard (recently improved) HTTS damping filters - Populated the COILOUTF filter bank with HAM-A coil driver frequency response compensation, and turned the filters on with magnet polarity compensating gains of UL LL UR LR = +1, -1, -1, +1' - Populated and turned on the RMS filtering to support the watchdog trigger signals, and set the threshold to 150 [urad_RMS] as is the case for other HTTS - Turned on the on-diagonal elements of the DRIVEALIGN matrix - Set the calibration gain of the OPTICALIGN alignment offsets to 1.0, which is not the right number, but standard for HTTS. Turn the offset ON. Then monitored and accepted all the settings in the h1sushtts_safe.snap, expect the OPTICALIGN offsets. The committed the safe.snap and filter file to the userapps repo. All we need now is PM1 itself!
Expanding on the digital setup of the coil driver signal chain:
- Populated the COILOUTF filter bank with HAM-A coil driver frequency response compensation, and turned the filters on with magnet polarity compensating gains of UL LL UR LR = +1, -1, -1, +1'
- I copied the COILOUTF frequency response from RM1, which has
FM1 LPM1 zpk([52.32;50.77],[0.5;3174],1,"n")
FM6 AntiLPM1 zpk([0.5;3174],[52.32;50.77],1,"n")
- I set the H1:SUS-PM1_BIO_M1_STATEREQ to 2.0 to ensure the response of the HAM-A driver's low-pass (which is always jumpered to ON) is correctly compensated with only FM6 ON via "caget" on the command line.