I fixed the overall height of the adapter (attachment 1). I put an OSEM next to the side magnet. I positioned a camera in front of the SOS and connected it to my laptop for live streaming. I painted a line indicating the height of the OSEM plates and a line in between with the mean height. I discarded the wire clamp on the suspension block I released the wires from the winches and pulled on them until the magnet was roughly in the right position. I clamped the wires back on the winches and adjusted them until the magnet was on the middle line. I also verified that the roll of the adapter is aligned as before by making sure that the horizontal features on the adapter are parallel to the horizontal features on the SOS tower.
The wires were clamped to the suspension block using a new wire clamp.
I Found that locking the counterweight setscrew changes the alignment. Today we verified this effect. We released the setscrew and pre-compensated by adjusting the counterweight such that when the setscrew was locked the mirror was aligned.
We measured mechanical resonances (attachment 2). This time the yaw motion was very quiet so we got a smaller peak for the yaw. The peaks are the same as before. Y readout has peaks around the pitch and pos resonances that don't appear in the X readout. I'm not sure what they are. Maybe coming from the QPD electronics.
We locked the adapter using the EQ stops. We made sure the alignment stays close to ideal.
We installed OSEMs on the SOS. We chose suboptimal OSEMs because LO1 will only be used for steering. I made a spreadsheet copying the OSEM catalog into it. There we mark which OSEM goes where.
I cleaned the optic using the ion gun with a pressure of 30 PSI.
The next steps are:
1. Engrave the SOS tower.
2. Cut the wire at the winches and remove the winch adapter plate.
3. Wrap the SOS with foil.
4. Install the SOS in the vacuum chamber.
Added new temp EPICs channels to database file (/cvs/cds/caltech/target/c1pem1/tempsensor/C1PEMaux.db)
Added new temp EPICs channels to slow channels ini file (/opt/rtcds/caltech/c1/chans/daq/C0EDCU.ini)
[SUS medm screen]
Moved new SUS screen to location : /opt/rtcds/userapps/trunk/sus/c1/medm/templates/NEW_SUS_SCREENS
Place button on the new screen to link to the old screen and replace old screens link on sitemap.
Fixed Load Coefficient button location issue
Fixed LOCKIN flow diagram issue
Fixed watchdog labelling issue
Linked STATE WORD block to FrontEnd STATUS screen
Replaced the 2x1 pit/yaw filter screens for LOCK and DAMP fliters with 3x1 LPY filter screen
*Need some more time to figure out the OPTLEV red indicator
git repo: https://git.ligo.org/40m/tempsensor.git
Update the temp sensor channels to fit with cds format, ie. "C1:PEM-TEMP_EX", "C1:PEM-TEMP_EY", "C1:PEM-TEMP_BS"
- Use FLOAT32_LE data format for the database file (/cvs/cds/caltech/target/c1pem1/tempsensor/C1PEMaux.db) to create the new channels.
- Keep the old datadase code and channels so we can compare with new temp channels afterwards. Also we need a 1-month overlap b4 deleting the old channels.
[sus medm screen]
git repo: https://git.ligo.org/40m/susmedmscreen.git
todo (from talk with Koji)
- Link stateword display to open "C1CDS_FE_STATUS.adl"
- Damp filter and Lock filter buttons should open a 3x1 filter screen so that the 6 filters are opened by 2 buttons compared to the old screen that has 3 buttons connected to 2X1 filter screen
- Make the LOCKIN signla modulation flow diagramlook more like the old 40m screen since that is a better layout
- Move load coefficient button to top of sus medm screen (beside stateword)
- The rectangular red outline around the oplev display is confusing and needs to be modified for clarity
- COMM tag block should not be 3D as this suggests it is a button. Make it flat and change tag name to indicate individual watchdog control as this better reflect its functionality. Rename current watchdog switch to watchdog master is it does what the 5 COMM switches do at once.
- Macro pass need to be better documented so that when we call the sus screens from locations other than sitemap, we should know what macro variables to pass in, like DCU_ID etc.
- Edit sitemap.adl to point only to the new screens. Then create a button on the new screen that points to the old screen. This way, we can still access the old screen without clogging sitemap.
- Move the new screen location to a subfolder of where the current sus screens reside, /opt/rtcds/userapps/trunk/sus/c1/medm/templates
- Rename the overview screen (SUS_CUST_HSSS_OVERVIEW.adl) to use the SUS_SINGLE nomenclature, i.e. SUS_SINGLE_OVERVIEW.adl
- Keep an eye of the cpu usage of c1pem as we add BLRMS block for other optics.
4 units of Vertex SUS DAC adapter (https://dcc.ligo.org/LIGO-D2100035) ready.
The units are completely passive right now and has option to extend to have a dewhitening board added inside.
So the power switch does nothing.
Some of the components for the dewhitening enhancement are attached inside the units.
The scan result was ~x10 higher than the previously reported scan on 2020/9/15 (https://nodus.ligo.caltech.edu:8081/40m/15570), which was sort of high from the reference taken on 2018/7/18.
This just could mean that the vacuum level at the RGA was x10 high.
We'll just go ahead with the vacuum repair and come back to the RGA once we return to "vacuum normal".
Meanwhile, I asked Jordan to turn off the RGA to make it cool down. I shut off RGA section and turned TP2 off.
Turns out the BLRMS monitoring channels for MC1, MC2, MC3, ITMY and SRM already exist in c1pem. So I modified the new SUS screen to display the BLRMS info for the aforementioned optics. Next step is to add the BLRMS monitor for PRM, ITMX, ETMX and ETMY. This would require extending the number of inputs for the "SUS" block in c1pem to accomodate the additional inputs from the remaining optics.
We have completed modifications and testing of the HAM Coil driver D1100687 units with serial numbers listed below. The DCC tree reflects these changes and tests (Run/Acq modes transfer functions).
** A fix had to be done on the DC power supply for these. The units' regulated power boards were not connected to the raw DC power, so the cabling had to be modified accordingly (see Attachment #1)
I am trying to replicate the simulation done by Matt Evans in his presentation (see Attachment 1 for the slide in particular).
He defines his input as so he has two inputs one of amplitude 1 at 1 Hz and one of amplitude 10^-9 at 1/4th the sampling frequency in this case: 4096 Hz
For his filter, he uses a fourth-order notch filter. To achieve this filter I cascaded two second-order notch filters (signal.iirnotch) both with locations at 1 Hz and quality factors of 1 and 1e6. as specified in slide 13 of his presentation.
I used the same procedure outlined here. My results are posted below in attachment 2.
Analysis of results:
As we can see from the results posted below the results don't match. there are a few problems that I noticed that may give us some idea of what went wrong.
First, there is a peak in the noise around 35 Hz. this peak is not shown at all in Matt's results and may indicate that something is inconsistent.
the second thing is that there is no peak at 4096 Hz. This is clearly shown in Matt's slides and it is shown in the input spectrum so it is strange that it does not appear in the output.
My first thought was that the 4kHz signal was being entered at about 35Hz but even when you remove the 4kHz signal from the input it is still there. The spectrum of the input shown in Attachment 3 shows no features at ~35Hz.
The Input filter, Shown in attachment 4 shows the input filter, which also has no features at ~35Hz. Seeing how the input has no features at ~35Hz and the filter has no features at ~35Hz there must be either some sort of quantization noise feature there or more likely there is some sort of sampling effect or some effect of the calculation.
To figure out what is causing this I will continue to change things in the model until I find what is controlling it.
I have included a Zip file that includes all the necessary files to recreate these plots and results.
We took the optic out of the SOS tower and removed the side blocks. We mounted new side blocks with wires already clamped in them in the reverse order.
The Adapter was placed back into the SOS and the wires were threaded through the wire clamp and suspended on the winches. The roll of the optic was balanced using a camera (attachment 1).
The pitch was balanced. this time I used 2 counterweights instead of 1 in order to not have to take so much of the weight out.
The mechanical resonances were measured by taking a 100 sec time series of QPD readout and doing PSD estimation (attachment 2). The mirror motion was damped as much as possible before taking the measurement.
3 peaks below 1.5Hz can be seen with frequencies of 755mHz (Yaw), 942mHz, 1040mHz (Pitch + Pos). The pitch/pos peaks are a bit close to each other, I bet if we go back to 1 counterweight the situation will be better.
While inserting the side OSEM I realized I didn't check the overall height of the adapter. The magnet was too high. I will fix it tomorrow and repeat the roll balancing.
Work on the medm screen for SUS RMS monitor is ongoing. The next step would be to incorporate this into the SUS medm screen, add the BLRMS model to the SUS controller model, recompile, check that the channels are being correctly addressed, then load the appropriate bandpass and lowpass filters.
The new SUS screen can be reached via sitemap -> IFO SUS button -> NEW ETMX dropdown menu link. Please use and provide feedback. Not sure exactly if we need/want the display screens after the IOP model on the right of the medm screen. I have not been able to locate the corresponding channels but did not want to remove them until I was sure that we don't plan to add these features to our screens. When all bugs have been ironed out, we can use appropriate macro substitution for the other optics.
The next feature to add is the BLRMS to the coil and PD channels. I plan to combine the PEM BLRMS medm implementation with the sus_single_BLRMS model block (located in /opt/rtcds/userapps/release/cds/c1/models). This way we use the latest BLRMS block in "/opt/rtcds/userapps/release/cds/common/models/BLRMS.mdl" whilst also leveraging the previous work done on the sus_single_BLRMS model, which neatly fits into our current SUS model.
After an overnight pumpdown/RGA warm up, I took a 100 amu scan of the RGA volume and subsequent pumping line. Attached is a screenshot along with the .txt file. Given the high argon peak (40) and the N2/O2 ratio, it looks like there is a decent sized air leak somehwere in the volume.
Are we interested in the hydrocarbon leak rates of this volume? That will require another scan with one of the calibrated leaks opened.
Edit: Added a Torr v AMU plot to see the partial pressures
So that Jordan can run the RGA scan this afternoon, I ran TP3 and started pumping down the RGA section.
- Same 1~4
- Same 5
- 6 Opened only the backing path for TP3
- 7 Turned on TP3 only
- TP3 reached the nominal full speed @75kRPM
- 11 Opened V5 to pump the pump spool -> Immediately reached P3<1e-4
- 12 Opened VM3 to pump the RGA section -> Immediately reached P4<1e-4
The pumps are kept running. I'll come back later to shut down the pumps.
=> Jordan wants to heat the filament (?) and to run the scan tomorrow.
So we decided to keep TP3 running overnight. I switched TP3 to the stand-by mode (= lower rotation speed @50kRPM)
- Same 1~4
- Same 5
- 6 Opened only the backing path for TP3
- 7 Turned on TP3 only
- 11 Opened V5 to pump the pump spool -> Immediately reached P3<1e-4
- 12 Opened VM3 to pump the RGA section -> Immediately reached P4<1e-4
The pumps are kept running. I'll come back later to shut down the pumps.
=> Jordan wants to heat the filament (?) and to run the scan tomorrow.
So we decided to keep TP3 running overnight. I switched TP3 to the stand-by mode (= lower rotation speed @50kRPM)
Tega and I have gone through the IIR Filter code and optimized it to make sure there aren't any areas that force high precision to be down-converted to low precision.
For the new biquad filter we have run into the issue where the gain of the filter is much higher than it should be. Looking at attachments 1 and 2, which are time series comparisons of the inputs and outputs from the different filters, we see that the scale for the output of the Direct form II filter shown in attachment 1 on the right is on the order of 10^-5 where the magnitude of the response of the biquad filter is on the order of 10^2. other than this gain the responses look to be the same.
I am not entirely sure how this gain came into the system because we copied the c code that actually runs on the CDS system into python. There is a gain that affects the input of the biquad filter as shown on this slide of Matt Evans Slides. This gain, shown below as g, could decrease the input signal and thus fix the gain. However, I have not found any way to calculate this g.
With this gain problem we are left with the quantization noise shown in Attachment 4.
I have controlled the state space filter to act with a given precision level. However, my code is not optimized. It works by putting the input state through the first state-space equation then integrating the result, which finally gets fed through the second state-space equation.
This is not optimized and gives us the resulting quantization noise shown in attachment 5.
However, the state-space filter also has a gain problem where it is about 85 times the amplitude of the DF2 filter. Also since the state space is not operating in the most efficient way possible I decided to port the code chris made to run the state-space model to python. This code has a problem where it seems to be unstable. I will see if I can fix it
I installed OSEMs on the LO1 SOS. To my surprise, the side magnet is not in the center of the side OSEM. It completely misses the LED as can be seen in the attachment.
Looking at the CAD model, it turns out the position of the OSEM on the left side plate is different from the position of the OSEM on the right side plate in the SOS tower.
We need to take the optic down, swap the right and left side blocks, and resuspend it.
There is not enough 🤦🏻♂️in the world
Jordan reported that the RGA section needs to be pumped down to allow the analyzer to run at sufficiently low pressure (P<1e-4 torr).
The RGA section was pumped down with the TP2/TP3. The procedure is as listed below.
If the pressure go up to P>1e-4 torr, we need to keep the pump running until the scan is ready.
### Monitor / Control screen setup ###
1. On c1vac: cd /cvs/cds/caltech/target/c1vac/medm
2. medm -x C0VAC_MONITOR.adl&
3. RGA section (P4) 3.6e-1 torr / P3/P2 still atm.
4. medm -x C0VAC_CONTROL.adl
### TP2/TP3 backing ###
5. Turn on AUX RP with the circuit breaker hanging on the AC.
6. Open manual valve for TP2/3/ backing / PTP2/3 ~ 8torr
### TP2/TP3 starting ###
7. Turned on TP2/TP3 with the Standby OFF
### Pump down the pump spool ###
8. Connect manual RP line (Quick Connect)
9. Turned on RP1/RP3 -> quickly reached 0.4 torr
10. Open V6 for pump spool pumping -> Immediately go down to sufficiently low pressure for TP2/TP3.
(10.5 I had to close V6 at this point)
11. Open V5 to start pumping pump spool with TP3 (TP2 still stand by) -> P3 immediately goes down below 1e-4 torr. This automatically closed V6 because of the low pressure of P3 (interlocking)
### Pump down the RGA section ###
12. Open VM3 to pump down RGA section -> P4 goes down to <1e-4 torr
13. P2 is still 2e-3. So decided to open V4 to use TP2 (now it's ready) too. -> Saturated at 1.7e-3
### Shutting down ###
14. Close VM3
15. Close V4/V5 to isolate TP2/TP3
16. Stop TP2/TP3 -> Slowing down
17. Stop RP1/RP3
18. Close the manual valves for TP2/3/ backing
19. Stop AUX RP with the circuit breaker hanging on the AC.
We glued some magnets onto modified side blocks. We followed pretty much the same procedure form last time. The music wires were clamped on the side blocks away from the optic adapter. The clamps were screwed down using the low profile screws the Jordan obtained from UC components to allow maximum clearance for the coils (Attachment 2).
The modified side blocks with wires already clamped in them were screwed onto the adapter. We put the adapter on the EQ stops and do rough adjustments, making sure the side magnet is roughly on the center of a coil we inserted to the side. The wires were threaded through the wire clamp on the suspension block and clamped on the winches. We realigned the Oplev beam such that it is parallel to the table using the quad photodiode.
We balanced the height of the adapter. This time we used a camera facing the adapter. The tilt of the camera was set by drawing a straight line (red line in attachment 1) such that the bottom clamps on the SOS are parallel to it.
Then, we adjusted the winches such that the screws on the side blocks are on the same green line on attachment 1.
Once the height was adjusted, we clamped the wire on the suspension block and cut it at the winches.
We balanced the optic. We had to take out the front counterweight to get the balance (attachment 3).
We checked whether the wire is touching anything. We confirmed that it doesn't. The wire goes nicely through the new hole on the side blocks (attachment 4, 5).
We measure the resonance frequency for both yaw (attachment 6) and pitch (attachment 7). They both seem to be sub-Hz. The pitch trace also shows that the oscillations are centered around 0 meaning the optic is balanced.
There's still the issue of what to do with the lower back EQ stop not touching the adapter.
[Paco, Ian, Tega]
We moved the white rack (formerly unused along the YARM) to a position between 1X3, and 1X4. For this task we temporarily removed the hepas near the enclosures, but have since restored them.
a plumber came in yesterday and fixed the issue.
The toilet tank in the big bathroom stopped refilling. I contacted PPService@caltech.edu and put up an "Out of Order sign".
We have been discussing how does the parameter estimation depends on the length per FFT segment. In other words, after we collected a series of data, would it be better for us to divide it into many segments so that we have many averages, or should we use long FFT segments so that we have more frequency bins?
My conclusions are that:
1). We need to make sure that the segment length is long enough with T_seg > min[ Q_i / f_i ], where f_i is the resonant frequency of the i'th resonant peak and the Q_i its quality factor.
2). Once 1) is satisfied, the result depends weakly on the FFT length. There might be a weak hint preferring a longer segment length (i.e., want more freq bins than more averages) though.
To reach the conclusion, I performed the following numerical experiment.
I considered a simple pendulum with resonant frequency f_1 = 0.993 Hz and Q_1 = 6.23. The value of f_1 is chosen such that it is not too special to fall into a single freq bin. Additionally, I set an overall gain of k=20. I generated T_tot = 512 s of data in the time domain and then did the standard frequency domain TF estimation. I.e., I computed the CSD between excitation and response (with noise) over the PSD of the excitation. The spectra of excitation and noise in the readout channel are shown in the first plot.
In the second plot, I showed the 1-sigma errors from the Fisher matrix calculation of the three parameters in this problem, as well as the determinant of the error matrix \Sigma = inv(Fisher matrix). All quantities are plotted as functions of the duration per FFT segment T_seg. The red dotted line is [Q_1/f_1], i.e., the time required to resolve the resonant peak. As one would expect, if T_seg <~ (Q_1/f_1), we cannot resolve the dynamics of the system and therefore we get nonsense PE results. However, once T_seg > (Q_1/f_1), the PE results seem to be just fluctuating (as f_1 does not fall exactly into a single bin). Maybe there is a small hint that longer T_seg is better. Potentially, this might be due to that we lose less information due to windowing? To be investigated further...
I also showed the Fisher estimation vs. MCMC results in the last two plots. Here each dot is an MCMC posterior. The red crosses are the true values, and the purple contours are the results of the Fisher calculations (3-sigma contours). The MCMC results showed similar trends as the Fisher predictions and the results for T_seg = (32, 64, 128) s all have similar amounts of scattering << the scattering of the T_seg=8 s results. Though somehow it showed a biased result. In the third plot, I manually corrected the mean so that we could just compare the scattering. The fourth plot showed the original posterior distribution.
Koji found out that the stock for BIO Acromag modules is very low and that the lead time for ordering new ones is ~ 1-year X-o.
We figure we might need to minimize the number of modules but still keep the Acromag chassis functional.
Looking at the new C1AUXEY feed-throughs spreadsheet one can see that we actually normally need only 1 BIO (not 2) module since there are 16 suspensions related bios + 1 green shutter which is unrelated to SUSAUX so there is no room to cut back here.
There are 16 analog input channels, 5 for PDMONs and 5 VMONs, and 6 spares which require 2 ADCs. Removing the spares and 2 monitoring channels will be enough to get us to 1 ADC.
Late update. We got 2 modified side blocks from Jordan a few days ago. Yesterday, I glued a side magnet to one of the modified side blocks.
I took the opportunity to reglue some magnets that were knocked off from the adapters. I did this for 2 adapters only since w need 4 shallow adapters and we already had 2 complete ones.
Today, Jordan gave us the rest of the modified side blocks clean and baked. We are ready to suspend a mirror today.
This looks great. I think what we want to see mainly is just the noise in the 32 bit IIR filtering subtracted from the 64 bit one.
It would be good if Tega can look through your code to make sure there's NO sneaky places where python is doing some funny casting of the numbers. I didn't see anything obvious, but as Chris points out, these things can be really sneaky so you have to be next level paranoid to really be sure. Fox Mulder level paranoia.
And, we want to see a comparison between what you get and what Denis Martynov put in an appendix of his thesis when comparing the Direct Form II, with the low-noise form (also some slides from Matt Evans on thsi from a ~decade agoo). You should be able to reproduce his results. He used matlab + C, so I am curious to see if it can be done all in python, or if we really need to do it in C.
And then...we can make this a part of the IFOtest suite, so that we point it at any filter module anywhere in LIGO, and it downloads the data and gives us an estimate of the digital noise being generated.
I added mpmath to the quantization noise code. mpmath allows me to specify the precision that I am using in calculations. I added this to both the IIR filters and the State-space models although I am only looking at the IIR filters here. I hope to look at the state-space model soon.
I also added a new notebook which you can find HERE. This notebook creates a signal by summing two sine waves and windowing them.
Then that signal is passed through our filter that has been limited to a specific precision. In our case, we pass the same signal through a number of filters at different precisions.
Next, we take the output from the filter with the highest precision, because this one should have the lowest quantization noise by a significant margin, and we subtract the outputs of the lower precision filters from it. In summary, we are subtracting a clean signal from a noisy signal; because the underlying signal is the same, when we subtract them the only thing that should be left is noise. and since this system is purely digital and theoretical the limiting noise should be quantization noise.
Now we have a time series of the noise for each precision level (except for our highest precision level but that is because we are defining it as noiseless). From here we take a power spectrum of the result and plot it.
After this, we can calculate a frequency-dependent SNR and plot it. I also calculated values for the SNR at the frequencies of our two inputs.
This is the procedure taken in the notebook and the results are shown below.
Analysis of Results:
The first thing we can see is that the precision levels 256 and 128 bits are not shown on our graph. the 256-bit signal was our clean signal so it was defined to have no noise so it cant be plotted. The 128-bit signal should have some quantization noise but I checked the output array and it contained all zeros. after further investigation, I found that the quantization noise was so small that when the result was being handed over from mpmath to the general python code it was rounding those numbers to zero. To overcome this issue I would have to keep the array as a mpmath object the entire time. I don't think this is useful because matplotlib probably couldn't handle it and it would be easier to just rewrite the code in C.
The next thing to notice is sort of a sanity check thing. In general, low precision filters yield higher noise than high precision. This is a good quick sanity check. However, this does not hold true at the low end. we can see that 16-bit actually has the highest noise for most of the range. Chris pointed out that at low precisions that quantization noise can become so large that it is no longer a linearly coupled noise source. He also noted that this is prone to happen for low precision coefficients with features far below the Nyquist frequency like I have here. This is one explanation that seems to explain the data especially because this ambiguity is happening at 16-bit and lower as he points out.
Another thing that I must mention, even if it is just a note to future readers, is that quantization noise is input dependent. by changing the input signal I see different degrees of quantization noise.
Analysis of SNR:
One of the things we hoped to accomplish in the original plan was to play around with the input and see how the results changed. I mainly looked at how the amplitude of the input signal scaled the SNR of the output. Below I include a table of the results. These results were taken from the SNR calculated at the first peak (see the last code block in the notebook) with the amplitude of the given sine wave given at the top of each column. this amplitude was given to both of the two sine waves even though only the first one was reported. To see an example, currently, the notebook is set up for measurement of input amplitude 10.
As we can see from the table above the SNR does not seem to relate to the amplitude of the input. in multiple instances, the SNR dips or peaks in the middle of our amplitude range.
I finished copying over the current autolocker bash script functionality into a python script which runs using a simple configuration yaml file. To run this script, one needs to ssh into optimus and :
That's it. To check out running docker processes, one can:
And to shut down this particular script, in the same directory, one can
If the docker image requires to be rebuild in future, go to the directory where Dockerfile is present and run:
I had to add PyYAML package in the pyepics docker image already present on docker hub, thanks to Andrew.
For now, I have disabled the MCautolocker service on Megatron. To start it back again, one would need to ssh into megatron and do following:
Let's see for a day how this new script does. I've left PSL shutter open and autolocker engaged.
To do: Fix the C1:IFO-STATE epics channel definition so that it takes its bits from separate lock status channels instead of scripts writign the whole word arbitrarily.
I used the UPS that was providing battery backup for chiara earlier (a APS Back-UPS Pro 1000), to provide battery backup to Megatron. This completes UPS backup to all important computers in the lab. Note that this UPS nominally consumes 36% of UPS capacity in power delivery but at start-up, Megatron was many fans that use up to 90% of the capacity. So we should not use this UPS for any other computer or equipment.
While doing so, we found that PS3 on Megatron was malfunctioning. It's green LED was not lighting up on connecting to power, so we replaced it from the PS3 of old FB computer from the same rack. This solved this issue.
Another thing we found was that Megatron on restart does not get configured to correct nameserver resolution settings and loses the ability to resolve names chiara and fb1. This results in the nfs mounts to fail which in turn results in the script services to fail. We fixed this by identifying that the NetworkManager of ubuntu was not disabled and would mess up the nameserver settings which we want to be run by systemd-resolved instead. We corrected the symbolic link: /etc/resolv.conf -> /run/systemd/resolve/resolv.conf. the we stopped and diabled the NetworkManager service to keep this persistent on reboot. Following are the steps that did this:
1. Investigate cross-coupling btw the various degrees of freedom (dof) - turn on noise for each dof in the plant model and measure the transfer function of the other dofs.
2. Get a closed-loop transfer function using noise injection and give a detailed outline of the procedure in elog - IN1/IN2 for each TM_RESP filter while the others are turned off.
3. Derive analytic model of the closed-loop transfer functions for comparison.
4. Adapt control filters to fit optimized analytical solutions.
[Ian, Raj, Tega]
Here is the comparison between the results of Raj's python model and the transfer function measurement done on the plant model by Tega and me.
As You can see in the graphs there are a few small spots of disagreement but it doesn't look too serious. Next we will measure the signals flowing through the entire plant and controller.
For a nicer (and printable) version of these plots look in the zipped folder under Plots/Plant_TF_Individuals.pdf
We moved chiara to 1X7 above nodus and powered with same UPS from a battery backed port. The UPS is at 40% load capacity. The nameserver and nfs came back online automatically on boot up.
I went through the optics list (in the BHD procurement google spreadsheet) and summarized how to build them.
The red ones are what we need to purchase. Because of the strange height of the LMR mounts, the post needs to have none half-integer inch heights.
They need to be designed as the usual SS posts are not designed to be vac compatible (not because of the material but the design like screw hole venting).
We also need to check how many clean forks we have.
-> The components were ordered except for the custom posts.
Today I placed nodus and fb1 on UPS battery backed supply. Now power glitches should not hurt our cds system.
Of course, we remove the magnet-dumbbell for machining. After that the part will be cleaned/baked again. And Yehonathan is going to glue the magnet-dumbbell again.
This will be difficult to modify with the magnets and dumbells in place. Even if someone CAN clamp this piece into an endmill machine with the magnets/dumbells in place, the vibration of the cutting operation may be enough to break them off.
Yehonathan told me that the wires are touching between the clamps! I went back to the CAD and confirmed it is really happening. Sad.
The distance of the wires at the upper clamp is 17.018mm.
The distance of the lower clamps is 74.168mm
The vertical drop of the wire is 251mm
--> The wire angle from the vertical line is 0.114 rad
The lower wire block has a step of 1.016mm with the vertical extension of the piece by 11.684mm
--> The angle clearance of the lower clamp is 0.087 rad
So the clearance was not enough.
If we cut the top center of the wire block more than 2.77mm, we can make the wires free.
For safety, we can cut 0.25" = 6.35mm. This will give 0.4mm clearance between the block and the wire at the closest point.
I did this modification on the 3D model and modified the 2D drawing too, so that we can find the machine shop to do it quickly.
Another attempt at the suspension of a Lambda Optic mirror
The lambda mirror was removed from the adapter whose magnets were knocked off. We tried to mount the mirror on a different adapter but we knocked off magnets from two adapters . We succeeded in mounting the mirror at the third attempt (Adapter number 6). In the meanwhile, Tega threaded wires through side blocks separated from the adapter. He positioned the wires inside the grooves of the side block under a microscope (attachment 1). This procedure is much more accurate and pain-free than doing it on the suspended mirror.
We took the adapter and put it on the EQ stops. The wires were threaded through the wire clamp on the suspension block and clamped at the winches.
The adapter was rotated until the side magnet was roughly at the center of the side OSEM port. We then, as before, put coils in OSEM ports and try to adjust the height of the side magnet and the magnet groove on the other side block such that they are roughly at the center of the coil. We used the winches for fine adjustment.
I used the Canon camera to make sure the side blocks are leveled (attachment 2). I used the macro lens for that purpose. I set up a live stream from the Canon camera using these instructions only that I use OBS instead of CamTwist. I painted a semi-transparent green rectangle to annotate the position of the side magnet socket (attachment 3). I did this several times to confirm the repeatability of the results. Again using the winches for fine adjustments.
Once the height of the side magnets was confirmed to be leveled. I clamped the wires to the suspension block and cut them above it.
I tried to balance the optic but again I see that the suspensions are hysteretic. I check to see whether the wire is touching anything and indeed it touches the corner of the side block (attachments 4, 5).
Updated A, B, C, D matrices for the state-space model to remove bugs in the previous estimate of the system dynamics. Updated the last post to represent the current matrixes.
We used MatLab to get the correct time-series filter coefficients in ZPK format and added them to the filters running in the TM_RESP filter matrix.
Get the pos-pos transfer function from the CDS model. Strangely, this seems to take a lot longer than anticipated to generate the transfer function, even though we are mainly probing the low-frequency behavior of the system.
For example, a test that should be taking approximately 6 minutes is taking well over an hour to complete. This swept sine (results below) was on the low settings to get a fast answer and it looks bad. This is a VERY basic system it shouldn't be taking this long to complete a Swept sine TF.
Noticed that we need to run eval $(./env_cymac) every time we open a new terminal otherwise CDS doesn't work as expected. Since this has been the source of quite a few errors already, we have decided to put it in the startup .bashrc script.
One goal of our sysID study is to improve the aLIGO L2A feedforward. Our algorithm currently improves only the statistical uncertainty and assumes the systematic errors are negligible. However, I am currently baffled by how to fit a (nearly) realistic suspension model...
My test study uses the damped aLIGO QUAD suspension model. From the Matlab model I extract the L2 drive in [N] to L3 pitch in [rad] transfer function (given by a SS model with the A matrix having a shape of 103x103). I then tried to use VectFIT to fit the noiseless TF. After removing nearby z-p pairs (defined by less than 0.2 times the lowest pole frequency) and high-frequency zeros, I got a model with 6 complex pole pairs and 4 complex zero pairs (21 free parameters in total). I also tried to fit the TF (again, noiseless) with an MCMC algorithm assuming the underlying model has the same number of parameters as the VectFIT results.
Please see the first attached plots for a comparison between the fitted models and the true one. In the second plot, we show the fractional residual
| TF_true - TF_fit | / | TF_true |,
and the inverse of this number gives the saturating SNR at each frequency. I.e., when the statistical SNR is more than the saturating value, we are then limited by systematic errors in the fitting. And so far, disappointingly I can only get an SNR of 10ish for the main resonances...
I wonder if people know better ways to reduce this fitting systematic... Help is greatly appreciated!
We are working on three fronts for the suspension plant model:
Here are the State-space matrices:
A few notes: If you want the values for these parameters see the .yml file or the State-space model file. I also haven't been able to find what exactly this s is in the matrices.
UPDATE [11/16/21 4:26pm]: I updated the matrices to make them more general and eliminate the "s" that I couldn't identify.
The input vector will take the form:
where x is the position, theta is the pitch, phi is the yaw, and y is the y-direction displacement
First attempt at the suspension of a Lambda Optic mirror
We found the box with the 2" Lambda Optic mirrors in the cleanroom. We choose to suspend a mirror with a ROC = 5m, probably LO1.
The mirror was put inside an adapter that was prepared beforehand, put the mirror in place by tightening the Teflon rod, and then clamp it using the clamping pads.
We decided to cut two wires and clamp them to the side blocks of the adapter, while it sits on the EQ stops. The wires were threaded through the winches' clamps, through the wire clamp on the suspension block, and through the side blocks' wire clamps. We adjusted the wire position while pulling on it. The wire was made to sit inside the wire grooves on the side blocks. While tightening the clamp on the side block with the magnet, the LN key fell knocking off two magnets from the back of the adapter.
Next time we think it might be a better idea to do all the adapter wire clamping on the table instead of on the SOS tower.
In the meanwhile, here are some pictures from today.
Yehonathan and Tega found that the new PR3 and SR3 delivered in 2020 is in fact 3/4" in thickness (!). Digging the past email threads, it seems that the spec was 10mm but the thickness was increased for better relieving the residual stress by the coatings.
There are a few issues.
1. Simply the mirror is too thick for the ring. It sticks out from the hole. And the mirror retainers (four plastic plates) are too far from the designed surface, which will make the plates tilted.
2. The front side of the mirror assembly is too heavy and the pitch adjustment is not possible with the balance mass.
Some possible solutions:
- How about making the recess deeper?
In principle this is possible, but the machining is tricky because the recess is not a simple round hole but has "pads" where the mirror sits. And the distance of the retainer to the thread is still far.
And the lead time might become long.
- How about making new holes on the ring to shift the clamp?
Yes it is possible. This will shift the mirror assembly by a few mm. Let's consider this.
- How about modifying the wire blocks?
Yes it is equivalent to shift the holes on the ring. Let's consider this too.
1. How to hold the mirror with the retainer plates
[Attachment 1] The expected distance between the retainer plate and the threaded hole is 13.4mm. We can insert a #4-40 x L0.5" stand off (McMaster-Carr 91197A150, SUS316) there. This will make the gap down to 0.7mm. With a washer, we can handle this gap with the plate. Note that we need to use vented & silver plated #4-40 screws to hold the plates.
[Attachment 2] How does this look like when the CoM is aligned with the wire plane? Oh, no... the lower two plates will interfere with the EQ stops and the EQ stop holders. We have to remove them. [Attachment 3]
We need to check with the suspension if the EQ stop screws may hit the protruded optics and can cause chipping/cracking.
2. Modifying the wire block
[Attachment 4] The 4x thru holes of the wire block were extended to be +/-0.1" slots. The slots are too long to form ovals and produce thin areas. With the nominal position of the balance mass, the clamp coordinates are y=1.016 (vertical) and z=-2.54mm (longitudinal).
==> The CoM is 0.19mm backside (magnet side) and 0.9134 mm lower from the wire clamping points. This looks mathematically doable, but the feasibility of the manufacturing is questionable.
[Attachment 5] Because the 0.1" shift of the CoM is large, we are able to make new #2-56 thread holes right next to the original ones. The clamp coordinates are y=1.016 (vertical) and z=-2.54mm (longitudinal).
==> The CoM is 0.188mm backside (magnet side) and 0.9136 mm lower from the wire clamping points. With the given parameters, the expected pitch resonant frequency is 0.756Hz
- Modify the metal ring to shift the #2-56 threads by 0.1"
- The upper two retainer plates will have #4-40 x 0.5" stand off. Use vented Ag-coated #4-40 screws.
- The lower two are to be removed.
- Take care of the EQ stops.
- Of course, the best solution is to redesign the holder for 3/4" optics. Can we ask Protolab for rapid manufacturing???
Why did we need to place the mass forward to align the 1/4" thick optic?
We were supposed to adjust the CoM not to have too much adjustment. But we had to move the balance mass way too front for the proper alignment with a 1/4" thick optic. Why...?
This is because the ring was designed for a 3/8" thick optic... It does not make sense because the depth of the thread holes for the retainer plate was designed for 1/4" optics...
When the balance mass is located at the neutral position, the CoM coordinate is
x 0.0351mm (x+: left side at the front view)
y 0.0254mm (y+: vertical up)
z 0.4493mm (z+: towards back)
So, the CoM is way too behind. When the balance mass was stacked and the moved forward (center of the axis was moved forward by 0.27"), the CoM coordinate is (Attachment 6)
This makes sens why we had to move the balance mass a lot for the adjustment.
Today we populated 4 Sat Amp boxes for LO1, Lo2, AS1, and AS4, 2 BO boxes for C1SU2, and 1 Sat Amp Adaptor box, at 1Y0 according the latest rack plan. We also added 2 Sorenson power supplies in 1Y0 at the top slots to power +/- 18V DC strips on both 1Y1 and 1Y0. All wiring has been done for these power connections.
Now that the computer is in its new rack I have copied over the filter two files that I will use in the plant and the controller from pianosa:/opt/rtcds/caltech/c1/chans to the docker system in c1sim:/home/controls/docker-cymac/chans. That is to say, C1SUP.txt -> X1SUP.txt and C1SUS.txt -> X1SUS_CP.txt, where we have updated the names of the plant and controller inside the txt files to match our testing system, e.g. ITMX -> OPT_PLANT in plant model and ITMX -> OPT_CTRL in the controller and the remaining optics (BS, ITMY, PRM, SRM) are stripped out of C1SUS.txt in order to make X1SUS_CP.txt.
Once the filter files were copied over need to add them to the filters that are in my models to do this I run the commands:
$ cd docker-cymac
$ eval $(./env_cymac)
# cd /opt/rtcds/tst/x1/medm/x1sus_cp
# medm -x X1SUS_OPT_PLANT_TM_RESP.adl
see this post for more detail
Unfortunately, the graphics forwarding from the docker is not working and is giving the errors:
canAccess('X1SUS_OPT_PLANT_TM_RESP.adl', 4) = 0
can directly access 'X1SUS_OPT_PLANT_TM_RESP.adl'
locateResource(X1SUS_OPT_PLANT_TM_RESP.adl...) returning 1
Error: Can't open display:
This means that the easiest way to add the filters to the model is through the GUI that can be opened through X2go client. It is probably easiest to get that working. graphics forwarding from inside the docker is most likely very hard.
unfortunately again x2go client won't connect even with updated IP and routing. It gives me the error: unable to execute: startkde. Going into the files on c1sim:/usr/bin and trying to start startkde by myself also did not work, telling me that there was no such thing even though it was right in front of me.
unable to execute: startkde.
We have moved c1sim computer from the test stand to the server rack in the office area. (see picture)
It is connected to the general campus network. Through the network switch at the top of the rack. This switch seeds the entire Martian network.
Test to show that I am not lying:
c1sim is now as connected to the 40m network as my mom's 10-year-old laptop.
unfortunately, I have not been able to get the x2go client to connect to it. I will have to investigate further. It is nice to have access to the GUI of c1sim occasionally.
After talking with Rana we have an updated plan. We will be working on this plan step by step in this order.
The gluing was mostly successful. Only two magnets didn't stick (see attachment).
We combined a controler and a plant model into a single modle (See first attachment) called x1sus_cp.mdl in the userapps folder of the cymac in c1sim. This model combines 2 blocks: the controler block which is used to control the current optics and is found in cvs/cds/rtcds/userapps/release/sus/c1/models/c1sus.mdl further the control block we are using comes from the same path but from the c1sup.mdl model. This plant model is the bases for all of my custom plant models and thus is a good starting point for the testing. It is also ideal because I know it can beeasily altered into a my state-space plant model. However, we had to make a few adjustments to get the model up to date for the cds system. So it is now a unique block.
These two library blocks are set in the userapps/lib folder on the cymac. This is the lib file that the docker system looks to when it is compiling models. For a quick overview see this. All other models have been removed from the MatLab path so that when we open x1sus_cp.mdl in MatLab it is using the same models it will compile with.
We could not find the rtbitget library part, but chris pointed us to userapps, and we copied it over using: scp /opt/rtcds/userapps/trunk/cds/common/models/rtbitget.mdl controls@c1sim:/home/controls/simLink/lib.
scp /opt/rtcds/userapps/trunk/cds/common/models/rtbitget.mdl controls@c1sim:/home/controls/simLink/lib
NOTE TO FUTURE IAN: don't forget that unit delays exist.
Next step: now that we have a model that is compiling and familiar we need to make medm screens. We will use the auto mdl2adl for this so that it is quick. Then we can start adding our custom pieces one by one so that we know that they are working. We will also work with Raj to get an independent python model working. Which will allow us to compare the cds and python models.
Big Gluing Day
Today I glued the magnet+dumbell assemblies on the optics adapters.
Unlike magnet gluing on a 3" optic where one can use a magnet gluing fixture, here I had to position the magnets manually. There is a complication though: the magnet is much heavier than the dumbell making it almost impossible gluing the dumbell side down onto the adapter since it is very unstable in this position. A workaround is to put the magnets on some paramagnetic sheet so that the magnets stick to it and then flip it over and glue it on the adapter dumbell sides down.
The problem here is that I need to position the magnets relatively accurately on the metal sheet. To make things slightly easier I printed some drawings of the positions of the magnet, laminated them, and cleaned them to have a decent starting point (attachment 1).
For each adapter:
1. I applied glue to the 4 circular grooves at the back of the adapter.
2. I picked 4 magnets (2 north, 2 south). Trying to match their strength.
3. Made a note of which magnets I picked for which adapter in the magnet+dumbell spreadsheet.
4. Clean the dumbells' surfaces when necessary.
5. Put the magnets on a laminated magnet-positions-drawing on a metal sheet that was precleaned in the right order.
6. Flip the metal sheet and position it on the adapter such that the dumbells go as precisely as possible into the circular grooves on the adapater.
7. Adjust the magnets' positions by pushing them slightly with a non-magnetic tip.
Attachment 2 shows the numbering on the adapters for future tracking.
I also glued some magnets and aluminum rods to side blocks. Next gluing session I will glue magnets to the aluminum rods. Probably some dumbells will not stick well to the adapters. These will have to be cleaned and reglued as well.
In reference to Koji's concern (see previous elog), we have completely removed sorensen power supplies from 1Y1. We added a 12 Volts / 2 Amps AC-to-DC power supply for the cameras and verified it works. We stripped off all unused hardware from shutters and other power lines in the strips, and saved the relays and fuses.
We then mounted SR2, PR3, PR2 Sat Amps, 1Y1 Sat amp adapter, and C1SUS2 AA (2) and AI (3) boards. We made all connections we could make with the cables from the test stand, as well as power connections to an 18 VDC power strip.