ID |
Date |
Author |
Type |
Category |
Subject |
146
|
Wed May 11 18:38:47 2011 |
Aidan | Computing | Hartmann sensor | test_HS binary |
From Won: (the zip file is also on the SVN /users/won/compiled_code/test_HS.zip )
Attached is test_HS.zip file, that contains
- test_HS.prj: project file created by Matlab Compiler. This file is not
required to run the application but I included it just in case someone's
insterested.
- test_HS folder contains two subfolders src and distrib, each of which
contains the standalone application test_HS.
Usage: test_HS <path to the image folder>, for example
test_HS ~/test_images/
Make sure you create the folder prior to running the application, and the
folder name ends with "/". Running test_HS will take and save 10 images
using the camera (provided the frame grabber applications are installed in
/opt/EDTpdv), averages those 10 images and find centroids, then plots the
result.
As I put in the eLOG, one needs MCRInstaller.bin and run it to install MCR
(probably 2008b 64bit version to test my files). If there are difficulties
getting MCRInstaller, let me know.
Won
<test_HS.zip>
|
Attachment 1: test_HS.zip
|
61
|
Wed Jun 30 00:00:13 2010 |
Kathryn and Won | Computing | Hartmann sensor | rms of centroid position changes |
Given below is a brief overview of calculating rms of spot position changes to test the accuracy/precision of the centroiding code. Centroids are obtained by summing over the array of size 30 by 30 around peak pixels, as opposed to the old method of using matlab built-in functions only. Still peak pixel positions were obtained by using builtin matlab function. Plese see the code detect_peaks_bygrid.m for bit more details.
My apologies for codes being well modularised and bit messy...
Please unzip the attached file to find the matlab codes.
The rest of this log is mainly put together by Kathryn.
Won
(EDIT/PS) The attached codes were run with raw image data saved on the hard disk, but it should be relatively easy to edit the script to use images acquired real time. We are yet to play with real-time images, and still operating under Windows XP...
---
When calculating the rms, the code outputs the results of two
different methods. The "old" method is using the built-in matlab
method while the "new" method is one Won constructed and seems to
give a result that is closer to the expected value. In calculating
and plotting the rms, the following codes were used:
- centroid_statics_raw_bygrid.m (main script run to do the analysis)
- process_raw.m (takes raw image data and converts them into 2D array)
- detect_peaks_bygrid.m (returns centroids obtained by old and new methods)
- shuffle.m (used to shuffle the images before averaging)
The reference image frame was obtained by averaging 4000 image frames,
the test image frames were obtained by averaging 1, 2, 5, 10 ... 500,
1000 frames respectively, from the remaining 1000 images.
In order to convert rms values in units of pixels to wavefront
aberration, do the following:
aberration = rms * pixel_width * hole_spacing / lever_arm
pixel_width: 12 micrometer
hole_spacing: about 37*12 micrometer
lever_arm: 0.01 meter
rms of 0.00018 roughly corresponds to lambda over 10000.
Note: In order to get smaller rms values the images had to be shuffled
before taking averages. By setting shuffle_array (in
centroid_statics_raw_bygrid.m) to be false one can
turn off the image array shuffling.
N_av rms
1 0.004018866673087
2 0.002724680286563
5 0.002319477846009
10 0.001230553835673
20 0.000767638027270
50 0.000432681002432
100 0.000427139665006
200 0.000270955332752
500 0.000226521040455
1000 0.000153760240692
fitted_slope = -0.481436501422376
Here are some plots:
 
---
Next logs will be about centroid testing with simulated images, and wavefront changes due to the change in the camera temperature!
(PS) I uploaded the same figure twice by accident, and the site does not let me remove a copy!... |
Attachment 2: rms_plot_shuffle.jpg
|
|
Attachment 4: eLOG.zip
|
11
|
Mon Feb 8 10:45:50 2010 |
Steve O'Connor | Electronics | Pre-amplifier | replace Pot with fixed Resistor |
|
|
|
|
|
|
Preamp for Bulls eye detector |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
It was felt that the Pot used at the input stage to remove offset added Noise |
|
|
|
|
|
|
|
To test this the Pot was replaced with a fixed resistor and the offset removed at the second stage |
|
|
|
|
|
Noise was measured after the first stage and at the monitor point first with the pot and then with the pot replaced with a Resistor |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
First stage gain =1+500/10 |
test point 1 gain = 51 |
|
|
|
|
|
|
|
|
|
|
second stage gain=10K/1K |
test point 2 gain = 510 |
|
|
|
1K Pot (R19) is present |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Chan #1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dbVrms/Hz |
|
|
|
nV/Hz |
|
|
|
Referred Input Noise |
nV/Hz |
|
|
|
|
|
|
|
|
|
|
|
|
|
gain = 51 |
|
|
|
|
|
|
200Hz |
100Hz |
50Hz |
|
200Hz |
100Hz |
50Hz |
|
200Hz |
100Hz |
50Hz |
|
|
|
Test Point #1 |
-141.1 |
-140.0 |
-136.8 |
|
88.1 |
100.0 |
144.5 |
|
1.7 |
2.0 |
2.8 |
|
|
|
|
|
|
|
|
|
|
|
|
gain = 510 |
|
|
|
|
|
Test Point #2 |
-119.4 |
-120.4 |
-118.4 |
|
1071.5 |
955.0 |
1202.3 |
|
2.1 |
1.9 |
2.4 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Pot replaced with Resistor (R4) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Chan #1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dbVrms/Hz |
|
|
|
nV/Hz |
|
|
|
RIN |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
gain = 50 |
|
|
|
|
|
|
200Hz |
100Hz |
50Hz |
|
200Hz |
100Hz |
50Hz |
|
200Hz |
100Hz |
50Hz |
|
|
|
Test Point #1 |
-142.7 |
-142.7 |
-141.9 |
|
73.7 |
73.3 |
80.8 |
|
1.4 |
1.4 |
1.6 |
|
|
|
|
|
|
|
|
|
|
|
|
gain = 500 |
|
|
|
|
|
Test Point #2 |
-122.0 |
-121.1 |
-120.7 |
|
794.3 |
881.0 |
922.6 |
|
1.6 |
1.7 |
1.8 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
When the Pot was replaced with R4, the offset was removed with the Pot at the second gain stage |
|
|
|
|
|
|
R4 was not a thin film metal resistor |
|
|
|
|
|
|
|
|
|
|
|
12
|
Mon Feb 8 17:44:38 2010 |
Aidan | Electronics | Pre-amplifier | replace Pot with fixed Resistor |
Quote: |
|
|
|
|
|
|
Preamp for Bulls eye detector |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
It was felt that the Pot used at the input stage to remove offset added Noise |
|
|
|
|
|
|
|
To test this the Pot was replaced with a fixed resistor and the offset removed at the second stage |
|
|
|
|
|
Noise was measured after the first stage and at the monitor point first with the pot and then with the pot replaced with a Resistor |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
First stage gain =1+500/10 |
test point 1 gain = 51 |
|
|
|
|
|
|
|
|
|
|
second stage gain=10K/1K |
test point 2 gain = 510 |
|
|
|
1K Pot (R19) is present |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Chan #1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dbVrms/Hz |
|
|
|
nV/Hz |
|
|
|
Referred Input Noise |
nV/Hz |
|
|
|
|
|
|
|
|
|
|
|
|
|
gain = 51 |
|
|
|
|
|
|
200Hz |
100Hz |
50Hz |
|
200Hz |
100Hz |
50Hz |
|
200Hz |
100Hz |
50Hz |
|
|
|
Test Point #1 |
-141.1 |
-140.0 |
-136.8 |
|
88.1 |
100.0 |
144.5 |
|
1.7 |
2.0 |
2.8 |
|
|
|
|
|
|
|
|
|
|
|
|
gain = 510 |
|
|
|
|
|
Test Point #2 |
-119.4 |
-120.4 |
-118.4 |
|
1071.5 |
955.0 |
1202.3 |
|
2.1 |
1.9 |
2.4 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Pot replaced with Resistor (R4) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Chan #1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dbVrms/Hz |
|
|
|
nV/Hz |
|
|
|
RIN |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
gain = 50 |
|
|
|
|
|
|
200Hz |
100Hz |
50Hz |
|
200Hz |
100Hz |
50Hz |
|
200Hz |
100Hz |
50Hz |
|
|
|
Test Point #1 |
-142.7 |
-142.7 |
-141.9 |
|
73.7 |
73.3 |
80.8 |
|
1.4 |
1.4 |
1.6 |
|
|
|
|
|
|
|
|
|
|
|
|
gain = 500 |
|
|
|
|
|
Test Point #2 |
-122.0 |
-121.1 |
-120.7 |
|
794.3 |
881.0 |
922.6 |
|
1.6 |
1.7 |
1.8 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
When the Pot was replaced with R4, the offset was removed with the Pot at the second gain stage |
|
|
|
|
|
|
R4 was not a thin film metal resistor |
|
|
|
|
|
|
|
|
|
|
|
Just a note: this board was for the QPD not the Bull's eye detector.
|
140
|
Fri Apr 22 19:51:37 2011 |
Aidan | Computing | EPICS | pyepics installed on princess_sparkle |
I installed the pyepics package on princess_sparkle since this is much easier under Ubuntu than under CentOS.
sudo apt-get install python-dateutil python-setuptools
- make sure that LD_LIBRARY_PATH points to EPICS libraries by echo $LD_LIBRARY_PATH
- sudo ldconfig
- sudo easy_install -U pyepics
Then I started the following python script ~/start_test_channels.py in the background on princess_sparkle. The EPICS channels are actually in an IOC on tcs_daq . They are all acquired by the frame builder at 16Hz.
|
Attachment 1: start_test_channels.py
|
#!/usr/bin/python
# a short script to output low frequency sine wave to EPICS channels
import epics
import math
import time
import os
import random
a = 0
... 70 more lines ...
|
22
|
Thu Apr 22 01:48:33 2010 |
Won Kim | Computing | Frame Grabber | from the manual install.pdf |
Regarding the installation of EDT software, I overlooked a note from the install.pdf file.
The gist of it is that if the scripts do not run, then remount the CD-ROM by typing the
following:
mount /mnt/cdrom -o remount,exec
which will then allow the scripts to be run. The directory /mnt/cdrom should be changed if
the cdrom is mounted somewhere else. (The note can be found in the page 1 of the file
install.pdf.)
Unfortunately I don't have linux installed at the moment so I cannot test this. My computer was
reinstalled with Windows XP, the previous CentOS system being wiped out. However if this works,
then there is probably no need to copy the files to the hard drive. |
24
|
Thu Apr 22 08:22:18 2010 |
Aidan | Computing | Frame Grabber | from the manual install.pdf |
Quote: |
Regarding the installation of EDT software, I overlooked a note from the install.pdf file.
The gist of it is that if the scripts do not run, then remount the CD-ROM by typing the
following:
mount /mnt/cdrom -o remount,exec
which will then allow the scripts to be run. The directory /mnt/cdrom should be changed if
the cdrom is mounted somewhere else. (The note can be found in the page 1 of the file
install.pdf.)
Unfortunately I don't have linux installed at the moment so I cannot test this. My computer was
reinstalled with Windows XP, the previous CentOS system being wiped out. However if this works,
then there is probably no need to copy the files to the hard drive.
|
I saw this and tried it when i was installing, but I had more flexibility when I copied the files directly to the hard drive.
|
131
|
Fri Apr 1 02:41:55 2011 |
Won | Computing | Hartmann sensor | exposure time and reproducibility of centroids |
Here is a brief and preliminary summary of rms of centroid displacements calculated at a number of different exposure time values. To get the results I did the following for each value of exposure time:
1. Take a set of images. I took 2000 images for shorter exposure times, 1000 images with exposure times greater than 1 second, and 200 images with exposure time 4.4 second. I tried to keep the maximum pixel count to be roughly the same (about 2430 plus/minus 40).
2. Obtain the centroids for each image frames in a set. I saved centroids as an array of n by m by 2, where n is the number of image frames that I took, m is the number of centroids in each frame, and 2 for x and y coordinates.
Then I iterated through the centroid sets to calculate total rms, using various N_av values. If N_av = 100; then reference centroids were obtained by averaging the centroids of first 50 and the last 50 frames, and remaining 100 frames are averaged to get the other (or non-reference) centroids. I think this method gives a better view of the centroid reproducibility than fixing the number of reference centroids to be, say, first 1000 and last 1000 frames and varying the number of frames to be averaged for non-reference centroid.
Datasets of centroids are labelled as spcdet_I_t, where spcdet stands for "same (maximum) pixel count (with) differen exposure times", I the value of the current that drives the light source, and t the exposure time that I used.
Here are the plots:
 
 
 
 

It can be seen from these plots that the benefit of averaging multiple frames quickly diminish once we go over 1 second. I am investigating if there is any way to improve the reproducibility while using the same sets of images.
Issues that need further investigation:
1. Effect of pixels with unusually high pixel count. Dark images that we took show that, with longer exposure times, not only overall dark noise increase (and become less uniform) but also several pixels show unusually high pixel count (even higher than 2000), without a light source on. More investigation is needed to determine how much this affects the centroids calculation and to devise an way to deal with it.
2. Extra/Duplicate centroids. As exposure time increased, I observed that duplicate centroids start to appear, i.e., HS_Centroids##centroids had duplicate entries. The number of duplicate entries increased as exposure time increased. I believe this is due to the images getting noisier as exposure time increases. So After taking initial reference centroids, I removed duplicate centroid entries before calculating rms. I am thinking about adding a method to do this in HS_Centroids class.
In addition, there were one 'false' centroid when the exposure time was 4.4 seconds. For now I chose to manually remove it myself before calculating rms.
|
33
|
Thu May 6 12:32:11 2010 |
Aidan | Computing | Hartmann sensor | dalsa_to_epics Python script crashed ... |
Here's the error:
Traceback (most recent call last):
File "./dalsa_to_epics.py", line 81, in ?
stdout = subprocess.PIPE)
File "/usr/lib64/python2.4/subprocess.py", line 550, in __init__
errread, errwrite)
File "/usr/lib64/python2.4/subprocess.py", line 916, in _execute_child
errpipe_read, errpipe_write = os.pipe()
OSError: [Errno 24] Too many open files
[2]+ Exit 1 ./dalsa_to_epics.py (wd: ~/scripts)
(wd now: /cvs/users/abrooks/advLigo/HWS)
|
4
|
Tue Dec 29 16:05:09 2009 |
Frank | Computing | DAQ | booting VME crates from fb1 |
http://nodus.ligo.caltech.edu:8080/AdhikariLab/514 |
63
|
Sun Jul 4 06:45:50 2010 |
Kathryn and Won | Computing | Hartmann sensor | analyzing the wavefront aberration |
Happy Fourth of July!
The following is a brief overview of how we are analyzing the wavefront aberration and includes the aberration parameters calculated for 9 different temperature differences. So far we are still seeing the cylindrical power even after removing the tape/glue on the Hartmann plate. Attached are the relevant matlab codes and a couple of plots of the wavefront aberration.
We took pictures when the camera was in equilibrium at room temperature and then at each degree increase in camera temperature as we heated the room using the air conditioner. For each degree increase in camera temperature, we compared the spot positions at the increased temperature to the spot positions at room temperature. We used the following codes to generate the aberration parameters and make plots of the wavefront aberration:
-build_M.m (builds 8 by 8 matrix M from centroid displacements)
-wf_aberration_temperature_bygrid.m (main script)
-wf_from_parms.m (generates 2D aberration array from aberation parameters)
-intgrad2.m (generates 2D aberration array from an interpolated array of centroid displacements)
In order to perform the "inverse gradient" method to obtain contours, we first interpolated the centroid displacement vectors to generate a square array. As this array has some NaN (not a number) values, we cropped out some outer region of the array and used array values from (200,200) to (800,800). Sorry we forgot to put that part of the code in wf_aberration_temperature_bygrid.m.
The main script wf_aberration_temperature_bygrid.m needs to be revised so that the sign conventions are less confusing... We will update the code later.
The initial and final temperature values are as follows:
|
Hand-held |
Digitizer Board |
Sensor Board |
Initial |
30.8 |
44.4 |
36.0 |
Final |
40.8 |
51.2 |
43.2 |
Aberration parameters:
1) Comparing high temp (+10) with room temp
p: 1.888906773203923e-004
al: -0.295042766811686
phi: 0.195737681653530
c: -0.001591869846958
s: -0.003826146141562
b: 0.098283157674967
be: -0.376038636781319
a: 5.967617809296910
2) Comparing +9 with room temp
p: 1.629083055002727e-004
al: -0.222506109890745
phi: 0.193334452094940
c: -0.001548838746542
s: -0.003404217451916
b: 0.091368295953142
be: -0.351830698303612
a: 5.764068008962653
3) Comparing +8 with room temp
p: 1.485283322069376e-004
al: -0.212605187544093
phi: 0.206716196097728
c: -0.001425962488852
s: -0.003148796701331
b: 0.089936286297599
be: -0.363538909377296
a: 5.546514425485094
4) Comparing +7 with room temp
p: 1.284124028380585e-004
al: -0.163672705473379
phi: 0.229219952949728
c: -0.001452457146947
s: -0.002807207555944
b: 0.084090100490331
be: -0.379195428095102
a: 5.289173743478881
5) Comparing +6 with room temp
p: 1.141756950753851e-004
al: -0.149439038317734
phi: 0.240503450300707
c: -0.001350015836130
s: -0.002529240946848
b: 0.078118977034120
be: -0.326704416216547
a: 4.847406652448727
6) Comparing +5 with room temp
p: 8.833496828581757e-005
al: -0.071871278822766
phi: 0.263210114512376
c: -0.001257787180513
s: -0.002095618522105
b: 0.069587080420443
be: -0.335912998511077
a: 4.542557551218057
7) Comparing +4 with room temp
p: 6.217428324604411e-005
al: 0.019965235199575
phi: 0.250991433584904
c: -0.001266061216964
s: -0.001568527823273
b: 0.058323732750548
be: -0.289315790283207
a: 3.957825468583509
8) Comparing +3 with room temp
p: 4.781068895714900e-005
al: 0.140720713391208
phi: 0.270865276786418
c: -0.001228146894728
s: -0.001371110045136
b: 0.052794990899554
be: -0.273968130963666
a: 3.591187350052610
9) Comparing +2 with room temp
p: 2.491163442408281e-005
al: 0.495136135872766
phi: 0.220727346409557
c: -9.897729773516012e-004
s: -0.001076008621974
b: 0.048467660428427
be: -0.280879088681660
a: 3.315430577872808
10) Comparing +1 with room temp
p: 8.160828332639811e-006
al: 1.368853902659128
phi: 0.116300954280238
c: -6.149390553733007e-004
s: -3.621216621887707e-004
b: 0.025454969698557
be: -0.242584267252882
a: 1.809039775332749
The first plot is of the wavefront aberration obtained by integrating the gradient of the aberration and the second plot fits the aberration according to the aberration parameters so is smoother since it is an approximation.
|
Attachment 1: eLOG.zip
|
Attachment 2: wf_aberration_plot_hightemp_byintegration.jpg
|
|
Attachment 3: wf_aberration_plot_hightemp_fitted.jpg
|
|
112
|
Thu Feb 24 14:20:55 2011 |
Aidan | Misc | Ring Heater | aLIGO H2 Ring Heater Pics |
Here are some pictures of the ring heater segments destined for the H2 Y-arm this year.
These still need to be put onto ResourceSpace. |
Attachment 1: aLIGO_Ring_Heaters.zip
|
200
|
Mon Oct 30 17:13:32 2017 |
Jon Richardson | Laser | Hartmann sensor | Write-Up of CO2 Projector Measurements |
For archive purposes, attached is a write-up of all the HWS measurements I've made to date for the SRM CO2 projector mock-up. |
Attachment 1: awc_srm_actuator_v1.pdf
|
|
148
|
Tue May 17 16:08:02 2011 |
Aidan | Computing | Hartmann sensor | Write speed of the frame grabber to file |
The attached file shows the output of the command. The maximum average frame rate is 57.2Hz when the nominal frame rate was 58Hz:
/opt/EDTpdv/take -f max_frame_rate_image -l 120 -N 4 -d > max_frame_rate_data.txt
|
Attachment 1: max_frame_rate_data.txt
|
reading image from Dalsa 1M60 12 bit dual channel camera link
width 1024 height 1024 depth 12 total bytes 2097152
writing 1024x1024x12 raw file to max_frame_rate_image0000.raw (actual size 2097152)
writing 1024x1024x12 raw file to max_frame_rate_image0001.raw (actual size 2097152)
writing 1024x1024x12 raw file to max_frame_rate_image0002.raw (actual size 2097152)
writing 1024x1024x12 raw file to max_frame_rate_image0003.raw (actual size 2097152)
writing 1024x1024x12 raw file to max_frame_rate_image0004.raw (actual size 2097152)
writing 1024x1024x12 raw file to max_frame_rate_image0005.raw (actual size 2097152)
writing 1024x1024x12 raw file to max_frame_rate_image0006.raw (actual size 2097152)
writing 1024x1024x12 raw file to max_frame_rate_image0007.raw (actual size 2097152)
... 117 more lines ...
|
85
|
Fri Jul 30 19:22:24 2010 |
Aidan | Computing | EPICS | Waveform Channel Access for storing centroids |
A waveform channel was added to the HWS softIoc on hartmann. This allows arrays of data to be stored in a single channel. It's not clear whether it is storing this data as a set of number or strings. However, the values can be changed by the following command:
caput -a -n C4:TCS-HWS_CENTROIDSX 5 1,2,3,4,5
Although the <no of values> entry doesn't seem to actual enforce anything - you can have more or less values than this in the array and they are still added to the channel. What does seem to be necessary is no spaces between the commas and the values of the array.
This also works:
[controls@fb1 cds]$ caput -a -n C4:TCS-HWS_CENTROIDSX 2 1,2,3n
Old : C4:TCS-HWS_CENTROIDSX 1,2,35.4342
New : C4:TCS-HWS_CENTROIDSX 1,2,3n
which suggests that this is really a string variable - even with the -n enforce. The cainfo command suggests this as well.
[controls@fb1 cds]$ cainfo C4:TCS-HWS_CENTROIDSX
C4:TCS-HWS_CENTROIDSX
State: connected
Host:
Access: read, write
Data type: DBR_STRING (native: DBF_STRING)
Element count: 1
Usage: caput [options] <PV name> <PV value>
caput -a [options] <PV name> <no of values> <PV value> ...
-h: Help: Print this message
Channel Access options:
-w <sec>: Wait time, specifies longer CA timeout, default is 1.000000 second
Format options:
-t: Terse mode - print only sucessfully written value, without name
Enum format:
Default: Auto - try value as ENUM string, then as index number
-n: Force interpretation of values as numbers
-s: Force interpretation of values as strings
Arrays:
-a: Put array
Value format: number of requested values, then list of values
|
86
|
Fri Jul 30 21:19:05 2010 |
Aidan | Computing | EPICS | Waveform Channel Access for storing centroids |
After some discussion with Frank we figured out how to edit the record type in HWS.db so that the waveform/array channel actually behaved like a numerical array and not like a single string. This just involved defining the data type and the element count in the record definition, like so:
record(waveform, "C4:TCS-HWS_CENTROIDSX")
{
field(EGU,"PIXELS")
field(HOPR,"1024")
field(LOPR,"0")
field(FTVL,"DOUBLE")
field(NELM,"1000")
}
and then when the ioc was rebooted, examination of the channel showed the following:
[controls@hartmann softIoc]$ cainfo C4:TCS-HWS_CENTROIDSX
C4:TCS-HWS_CENTROIDSX
State: connected
Host: hartmann:5064
Access: read, write
Data type: DBR_DOUBLE (native: DBF_DOUBLE)
Element count: 1000
[controls@hartmann softIoc]$ caput -a -n C4:TCS-HWS_CENTROIDSX 10 1 2 3 4 5 6 7 8 9 10 11 12 13.1
Old : C4:TCS-HWS_CENTROIDSX 13 1 2 3 4 5 6 7 8 9 10 11 12 13.1
New : C4:TCS-HWS_CENTROIDSX 13 1 2 3 4 5 6 7 8 9 10 11 12 13.1
[controls@hartmann softIoc]$ caget C4:TCS-HWS_CENTROIDSX
C4:TCS-HWS_CENTROIDSX 1000 1 2 3 4 5 6 7 8 9 10 11 12 13.1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Quote: |
A waveform channel was added to the HWS softIoc on hartmann. This allows arrays of data to be stored in a single channel. It's not clear whether it is storing this data as a set of number or strings. However, the values can be changed by the following command:
caput -a -n C4:TCS-HWS_CENTROIDSX 5 1,2,3,4,5
Although the <no of values> entry doesn't seem to actual enforce anything - you can have more or less values than this in the array and they are still added to the channel. What does seem to be necessary is no spaces between the commas and the values of the array.
This also works:
[controls@fb1 cds]$ caput -a -n C4:TCS-HWS_CENTROIDSX 2 1,2,3n
Old : C4:TCS-HWS_CENTROIDSX 1,2,35.4342
New : C4:TCS-HWS_CENTROIDSX 1,2,3n
which suggests that this is really a string variable - even with the -n enforce. The cainfo command suggests this as well.
[controls@fb1 cds]$ cainfo C4:TCS-HWS_CENTROIDSX
C4:TCS-HWS_CENTROIDSX
State: connected
Host:
Access: read, write
Data type: DBR_STRING (native: DBF_STRING)
Element count: 1
Usage: caput [options] <PV name> <PV value>
caput -a [options] <PV name> <no of values> <PV value> ...
-h: Help: Print this message
Channel Access options:
-w <sec>: Wait time, specifies longer CA timeout, default is 1.000000 second
Format options:
-t: Terse mode - print only sucessfully written value, without name
Enum format:
Default: Auto - try value as ENUM string, then as index number
-n: Force interpretation of values as numbers
-s: Force interpretation of values as strings
Arrays:
-a: Put array
Value format: number of requested values, then list of values
|
|
225
|
Fri Feb 8 10:48:33 2019 |
Aidan | Lab Infrastructure | General | Water damage repair work in the TCS Lab |
Caltech Facilities has determined that the walls in the SE corner of the TCS Lab in West Bridge were water damaged during last weekend’s rain. They are going to remove the plaster from the walls and dehumidify the area for a week or so. All tables in the room are going to be covered with plastic for this process. In the short term I’ve shutdown all the equipment in the lab (including FB4). The 2-micron cavity-testing fabrication has been moved next door to the QIL. |
99
|
Tue Oct 5 12:51:16 2010 |
Aidan | Laser | Hartmann sensor | Variable power in two beams of cross-sampling experiment |
The SLED in the cross-sampling experiment produces unpolarized light at 980nm. So I added a PBS after the output and then a HWP (for 1064nm sadly) after that. In this way I produced linearly p-polarized light from the PBS. Then I could rotate it to any angle by rotating the HWP. The only drawback was that the HWP was only close to half a wave of retardation at 980nm. As a result, the output from this plate became slightly elliptically polarized.
The beam then went into another PBS which split it into two beams in a Michelson-type configuration (REFL and TRANS beams) - see attached image. By rotating the HWP I could vary the relative amount of power in the two arms of the Michelson. The two beams were retro-reflected and we then incident onto a HWS.
I measured the power in the REFL beam relative to the total power as a function of the HWP angle. The results are shown in the attached plot.
|
Attachment 1: test002_two_beams_on_HWS_analyze.pdf
|
|
Attachment 2: Hartmann_Enclosure_Diagram__x-sampling.png
|
|
5
|
Tue Dec 29 17:50:57 2009 |
Aidan | Computing | DAQ | VME crate has proper boot settings |
We fixed the start-up settings on the VME crate to look for a TCS startup file on fb0. The settings on the Baja 4700 are now: |
Attachment 1: VME_tcs_boot_settings.jpg
|
|
3
|
Mon Dec 28 14:48:29 2009 |
Aidan | Computing | DAQ | VME crate has a "new" CPU - needs to be configured |
I installed a recycled VME crate in the electronics rack. It currently has a Baja 4700E CPU card in it - and this needs to be configured. We also have the following cards, which are not plugged in right now.
1. ICS-110A-32 Analogue-to-Digital Converter - the jumpers need to be set on this to give it a unique memory address in the VME bus.
2. D000186 LIGO-type Anti Image card.
The CPU card needs to be configured to search it's OS binaries on the network (in this case we're going to store them on the framebuilder in Rana's lab). These settings are accessed by plugging a serial cable into the front of the card and using a terminal window to access the menu system. There are some screen caps of this below. As the card is reset we get the Start-up screen and then we can either do nothing (and a full boot will take place) or we can press a key and access the menu. From there we can restart the boot process by entering "@" or we can change the boot settings by entering "c". These are shown below:
|
Attachment 1: VME_boot_02.jpg
|
|
Attachment 2: VME_boot_01.JPG
|
|
Attachment 3: VME_boot_03.jpg
|
|
59
|
Fri Jun 25 10:47:08 2010 |
Aidan | Misc | aLIGO Modeling | Uploaded aLIGO axicon+ITM COMSOL model to the 40m SVN |
I added a COMSOL model of the aLIGO ITM being heated by an axicon-formed annulus to the 40m SVN. The model assumes a fixed input beam size into an axicon pair and then varies the distance between the axicons. The output is imaged onto the ITM with varying magnitudes. The thermal lens is determined in the ITM and added to the self-heating thermal lens (assuming 1W absorption, I think - need to check). The power in the annulus is varied until the sum of the two thermal lenses scatters the least amount of power out of the TEM00 mode of the IFO.
https://nodus.ligo.caltech.edu:30889/svn/trunk/comsol/TCS/aLIGO/
The results across the parameter space (axicon separation and post-axicon-magnification) are attached. These were then mapped from this space to the space of annulus thickness vs annulus diameter, (see elog here).
|
Attachment 1: aLIGO_axicon_spacing_post-magnification_optimization.jpg
|
|
60
|
Fri Jun 25 10:59:43 2010 |
Aidan | Misc | aLIGO Modeling | Uploaded aLIGO axicon+ITM COMSOL model to the 40m SVN |
Here are the results in the annulus thickness vs annulus diameter space ...
Quote: |
I added a COMSOL model of the aLIGO ITM being heated by an axicon-formed annulus to the 40m SVN. The model assumes a fixed input beam size into an axicon pair and then varies the distance between the axicons. The output is imaged onto the ITM with varying magnitudes. The thermal lens is determined in the ITM and added to the self-heating thermal lens (assuming 1W absorption, I think - need to check). The power in the annulus is varied until the sum of the two thermal lenses scatters the least amount of power out of the TEM00 mode of the IFO.
https://nodus.ligo.caltech.edu:30889/svn/trunk/comsol/TCS/aLIGO/
The results across the parameter space (axicon separation and post-axicon-magnification) are attached. These were then mapped from this space to the space of annulus thickness vs annulus diameter, also attached.
|
|
Attachment 1: Screen_shot_2010-06-25_at_11.01.38_AM.png
|
|
224
|
Tue Dec 4 16:57:08 2018 |
Aidan | Computing | Hartmann sensor | Updated GIT version of HWS code |
I changed the HWS code to the new git.ligo HWS version.
- Object files are in ~/hws
- scripts are in ~/hws-server
- utilities are still in old git repo moved to ~/.HWS_code_temporary_home
I've set up some symbolic links to these directories to mimic the old directory structure, so ..
- ~/pyHWS links to new object file directory
- ~/pyHWS/scripts lnks to new scripts directory
- ~/pyHWS/utilities links to old utilities directory
|
234
|
Wed Jul 24 16:25:13 2019 |
Edita Bytyqi | Lab Infrastructure | Optics | Updated 2-lens setup |
The previous 2-lens setup focused the beam to a tight spot, however due to the divergence angle of the laser beam, a significant amount of power was not being captured by the fiirst lens at a distance of 40 cm from the source. The divergence angle seems to be bigger than 0.06 by a factor of 2, so a f = 20 cm lens was used to collimate the beam and a f = 30 cm lens was used to focus it. A mirror was used to reflect the beam, so we obtain steering control. Additionally, the focusing lens was placed on a small 1-axis stage in order to control the distance of the lens from the CCD, providing control over the focused beam size.
Note: The 30 cm lens was cleaned with methanol, however it still has some residue on the surface. The beam imaged to the Harrtmann Sensor looks good, however the lens will be cleaned by using a different solvent or replaced by a different 30 cm lens. The 3 lenses at the edge of the box will stay inside in order to prevent contamination, however they will not be used in the design. |
Attachment 1: 20190724_161926.jpg
|
|
252
|
Fri May 20 16:42:47 2022 |
Stephen | Things to Buy | Ordering | Up to Air valve for IR Labs Cryostat |
Purchased from Lesker, for venting of IR Labs Cryostat:
- P/N C35103000 (KF10 Valve for up-to-air)
- P/N QF25XQF10 (KF25-KF10 Reducer)
- P/N QF25-100-T (KF25 Tee)
(to be connected in between the Chamber Tee and the Gate Valve)
Should be in next week! |
214
|
Thu Jun 21 17:12:38 2018 |
Aidan | Laser | Hartmann sensor | Two inch PBS from Edmund Optics - effect on ETM HWS transmission |
I'm considering the 86-711 2" 532nm PBS from Edmund Optics for the ETM HWS at the sites.
https://www.edmundoptics.com/optics/polarization/linear-polarizers/532nm-50mm-diameter-high-energy-laser-line-polarizer/
The effect on the transmission through the system, compared to the THorlabs PBS, is shown in the attached plot.
Conclusion: it looks almost as effective as the Thorlabs PBS with the added benefit of being 2" in diameter. |
Attachment 1: PBS_Thorlabs_v_EdmundOptics.pdf
|
|
246
|
Tue Jul 27 08:39:33 2021 |
Aidan | Misc | Flood | Tuesday (27-Jul) morning check - lab looks okay |
I checked the lab this morning. It was dry and there wall was in the same state as yesterday. |
Attachment 1: Image_Pasted_at_2021-7-27_08-38-2.jpeg
|
|
Attachment 2: Image_Pasted_at_2021-7-27_08-38.jpeg
|
|
128
|
Mon Mar 28 13:00:50 2011 |
Aidan | Laser | Hartmann sensor | To do: Check the polarization from the SLED |
|
105
|
Tue Feb 8 13:02:26 2011 |
Aidan | Electronics | Delivery Note | Thorlabs S322C 200W power head arrived |
The 200W Thermopile power head from Thorlabs arrive today. The scanned delivery note and calibration info are attached. |
Attachment 1: Co2_200W_power_meter_delviery_note.pdf
|
|
Attachment 2: Co2_200W_power_meter_calibration_info.pdf
|
|
149
|
Wed May 18 18:52:12 2011 |
Aidan | Computing | Hartmann sensor | Test of position modulation algorithm |
I measured the prism and displacement of the Gaussian beam on the Hartmann sensor. The beam pointing was modulated at 10mHz using a galvo mirror as illustrated in Attachment 1. The galvo was around 680mm from the Hartmann sensor. The amplitude of the prism modulation was approximately 1E-5 radians. The displacement of the beam was measured using a new algorithm that tries to fit a parabola to the logarithm of the intensity of each Hartmann spot. The amplitude of the displacement modulation was measured at around 42 microns: corresponding to around 6E-5 radians (=42um/680mm).
To resolve the discrepancy between the prism and displacement measurements, I removed the Hartmann plate to simply get a Gaussian beam on the CCD (bottom right image in Figures 2 & 3 - the beam is slightly clipped and there is a ghost beam in the center - I'm not yet certain where this is coming from). I measured the Gaussian beam displacement directly by fitting a Gaussian to the mean horizontal cross-section of the intensity distribution (top right plot in Figures 2 & 3). Using this technique the measured displacement on the CCD had an amplitude of around 0.7 +/- 0.05 pixels = 8.4 +/- 0.6 microns, corresponding to a prism of 12.5E-6 radians (seen in top left plot in Figures 2 and 3). This indicates that there is an error in the Gaussian fitting algorithm using the Hartmann sensor data.
The second plot simply shows the position modulation of the beam as I increased the amplitude of the signal going to the galvo.
Voltage (Vpp) |
Displacement on CCD (pixels) |
0.01 |
0.325 |
0.012 |
0.400 |
0.014 |
0.487 |
0.015 |
0.541 |
0.016 |
0.576 |
0.019 |
0.708 |
0.02 |
0.763 |
0.023 |
0.887 |
0.028 |
1.194 |
0.034 |
1.803 |
0.041 |
3.053 |
0.049 |
7.107 |
|
Attachment 1: galvo_mirror_experiment.jpg
|
|
Attachment 2: 2011-05-18_gaussian_beam_with_galvo_constant.pdf
|
|
Attachment 3: 2011-05-18_gaussian_beam_with_galvo.pdf
|
|
1
|
Fri Nov 6 20:09:47 2009 |
Aidan | Laser | Laser | Test |
Does this work? |
2
|
Thu Dec 10 22:23:47 2009 |
Not Aidan | Laser | Laser | Test |
Yes.
|
185
|
Wed May 24 09:58:17 2017 |
Aidan | Electronics | Electronics | Temperature sensor batteries swapped in TCS Lab |
I noticed that the TCS lab temperature sensor batteries died. Apparently they died two days ago. I swapped in some new batteries this morning.
|
122
|
Tue Mar 8 18:28:14 2011 |
Aidan | Computing | General | TO DO notes |
- Write a Wiki page that describes how to add channels to the Athena Box
- Write a Wiki page that describes how to add a new computer to the network and mount all the network drives
- Add an EPICS channel that writes the disk usage to file (to keep track of the total accumulated disk space used by the centroid storage)
|
156
|
Tue Nov 29 09:13:49 2011 |
rana | Misc | LIGO 3G | Switching from CO2 to shorter wavelength solid state laser |
Around a year ago, Phil and I discussed the possibility of using an OPO to possibly generate our own laser beam at ~2 microns for TCS. This was to avoid all of the usual hassle of the 10 micron CO2 laser.
As it turns out, the 1.5-3 micron range doesn't have enough absorption in fused silica: the absorption depth would be basically the whole thickness of the optics and this is not so useful when trying to correct surface heating.
During my recent trip to JILA, Jan Hall mentioned to me that it should be possible to operate instead at ~5 microns, where laser technology may be solid state and where we can use Si:As detectors instead of the inefficient HgCdTe ones which we use now.
JWST, in partnerships with industry, have developed some Si:As detectors: http://www.jwst.nasa.gov/infrared.html
Some internet searching shows that there are now several laser technologies for the mid-IR or MWIR range. Some are <1 W, but some are in the ~10 W range.
Of course, its possible that we'll switch to Silicon substrates, in which case we need to re-evaluate the goals and/or existence of TCS. |
43
|
Wed May 26 06:47:02 2010 |
Aidan | Laser | SLED | Switched off SLED - 6:40AM |
|
54
|
Tue Jun 22 00:21:47 2010 |
James K | Misc | Hartmann sensor | Surf Log -- Day 4, Hartmann Spot Flickering Investigation |
I started out the day by taking some images from the CCD with the OLED switched off, to just look at the pattern when it's dark. The images looked like this:
Taken with camera settings:
The statistical analysis of them using the functions from Friday gave the following result:
At first glance, the distribution looks pretty Poissonian, as expected. There are a few scattered pixels registering a little brighter, but that's perhaps not so terribly unusual, given the relatively tiny spread of intensities with even the most extreme outliers. I won't say for certain whether or not there might be something unexpected at play, here, but I don't notice anything as unusual as the standard deviation 'spike' seen from intensities 120-129 as observed in the log from yesterday.
Speaking of that spike, the rest of the day was spent trying to investigate it a little more. In order to accomplish this, I wrote the following functions (all attached):
-spotfind.m -- inputs a 3D array of several Hartmann images as well as a starting pixel and threshold intensity level. analyzes the first image, scanning starting at the starting pixel until it finds a spot (with an edge determined by the threshold level), after which it finds a box of pixels which completely surrounds the spot and then shrinks the matrix down to this size, localizing the image to a single spot
-singspotcent.m -- inputs the image array outputted from spotfind, subtracts an estimate of the background, then uses the centroiding algorithm sum(x*P^2)/sum(P^2) to find the centroid (where x is the coordinate and P is the intensity level), then outputs the centroid location
-hemiadd.m -- inputs the image from spotfind and the centroid from singspotcent, subtracts an estimate of the background, then finds the sum total intensity in the top half of the image above the centroid, the bottom half, the left half and the right half, outputs these values as n-component vectors for an n-image input, subtracts from each vector its mean and then plots the deviations in intensity from the mean in each half of the image as a function of time
-edgeadd.m -- similar to hemiadd, except that rather than adding up all pixels on one half of the image, it inputs a threshold, determines how far to the right of the centroid that the spot falls past this treshold and uses it as a radial length, then finds the sum of the intensities of a bar of 3 pixels on this "edge" at the radial length away from the centroid.
-spotfft.m -- performs a fast fourier transform on the outputs from edgeadd, outputting the frequency spectrum at which the intensity of these edge pixels oscillate, then plotting these for each of the four edge vectors. see an example output below.
--halfspot_fluc.m and halfspot_edgefluc.m -- master functions which combine and automate the functions previous
Dr. Brooks has suggested that the observed flickering might perhaps be an effect resulting from the finite thickness of the Hartmann Plate. The OLED can be treated as a point source and thus can be approximated as emitting a spherical wavefront, and thus the light from it will hit this edge at an angle and be scattered onto the CCD. If the plate vibrates, then (which it certainly must to some degree) the wavefront will hit this edge at a different angle as the edge is displaced temporarily through vibration, and thus this light will hit the CCD at a different point, causing the flickering (which is, after all, observed to occur near the edge of the spot). This effect certainly must cause some level of noise, but whether it's the culprit for our 'flickering' spike in the standard deviation remains to be seen.
Here is the frequency spectrum of the edge intensity sums for two separate spots, found over 128 images:
Intensity Sum Amplitude Spectrum of Edge Fluctuations, 128 images, spot search point (100,110), threshold level 110
128 images, spot search point (100,100), threshold level 129
At first glance, I am not able to conclude anything from this data. I should investigate this further.
A few things to note, to myself and others:
--I still should construct a Bode plot from this data and see if I can deduce anything useful from it
--I should think about whether or not my algorithms are good for detecting what I want to look at. Is looking at a 3 pixel vertical or horizontal 'bar' on the edge good for determining what could possibly be a more spherical phenomenon? Are there any other things I need to consider? How will the settings of the camera affect these images and thus the results of these functions?
--Am I forgetting any of the subtleties of FFTs? I've confirmed that I am measuring the amplitude spectrum by looking at reference sine waves, but I should be careful since I haven't worked with these in a while
It's late (I haven't been working on this all night, but I haven't gotten the chance to type this up until now), so thoughts on this problem will continue tomorrow morning..
|
Attachment 1: spotfind.m
|
function [spotM,r0,c0] = spotfind(M,level,rs,cs)
%SPOTFIND Inputs a 3D array of hartmann spots and spot edge level
%and outputs a subarray located around a single spot located near (rs,cs)
cut=level/65535;
A=double(M(:,:,1)).*double(im2bw(M(:,:,1),cut));
%start at (rs,cs) and sweep to find spot
r=rs;
c=cs;
while A(r,c)==0
... 34 more lines ...
|
Attachment 2: singspotcent.m
|
function [rc,cc] = singspotcent(A)
%SINGSPOTCENT returns centroid location for first image in input 3D matrix
MB=double(A(:,:,1));
[rn cn]=size(MB);
M=MB-mean(mean(min(MB)));
r=1;
c=1;
sumIc=0;
sumIr=0;
while c<(cn+1)
... 26 more lines ...
|
Attachment 3: hemiadd.m
|
function [topsum,botsum,leftsum,ritsum] = hemiadd(MB,rcd,ccd)
%HEMIADD inputs a 3D image matrix and centroid location and finds the difference of
%the sums of the top half, bottom half, left half and right half at each time
%compared to their means over that time
%round coordinates of centroid
rc=round(rcd);
cc=round(ccd);
%subtract approximate background
... 51 more lines ...
|
Attachment 4: edgeadd.m
|
function [topsum,botsum,leftsum,ritsum] = edgeadd(MB,rcd,ccd,edgemax)
%HEMIADD inputs a 3D image matrix and centroid location and finds the difference of
%the sums of 3 edge pixels at radial distance "radial" from centroid for
%the top half, bottom half, left half and right half at each time
%compared to their means over that time
%round coordinates of centroid
rc=round(rcd);
cc=round(ccd);
... 59 more lines ...
|
Attachment 5: spotfft.m
|
function spotfft(t,b,l,r)
%SPOTFFT Does an fft and plots the frequency spectrum of four input vectors
%Specifically, this is to be used with halfspot_edgefluc to find the
%frequencies of oscillations about the edges of Hartmann spots
[n,m]=size(t);
NFFT=2^nextpow2(n);
T=fft(t,NFFT)/n;
B=fft(b,NFFT)/n;
L=fft(l,NFFT)/n;
R=fft(r,NFFT)/n;
... 30 more lines ...
|
Attachment 6: halfspot_fluc.m
|
function [top,bot,lft,rgt] = halfspot_fluc(M,spotr,spotc,thresh)
%HALFSPOT_FLUC Inputs a 3D array of Hartmann sensor images, along with an
%approximate spot location and intensity threshhold. Finds a spot on the
%first image near (spotc,spotr) and defines boundary of spot near an
%intensity of 'thresh'. Outputs fluctuations of the intensity sums of the
%top, bottom, left and right halves of the spot about their means, and
%graphs these against each other automatically.
[I,r0,c0]=spotfind(M,thresh,spotr,spotc);
[r,c]=singspotcent(I);
... 7 more lines ...
|
Attachment 7: halfspot_edgefluc.m
|
function [top,bot,lft,rgt] = halfspot_edgefluc(M,spotr,spotc,thresh,plot)
%HALFSPOT_FLUC Inputs a 3D array of Hartmann sensor images, along with an
%approximate spot location and intensity threshhold. Finds a spot on the
%first image near (spotc,spotr) and defines boundary of spot near an
%intensity of 'thresh'. Outputs fluctuations of the intensity sums of the
%top, bottom, left and right edges of the spot about their means, and
%graphs these against each other automatically.
%
%For 'plot', specify 'time' for the time signal or 'fft' for the frequency
... 10 more lines ...
|
75
|
Sun Jul 25 16:24:56 2010 |
Aidan | Computing | SLED | Superlum SLED test integrated with DAQ - new channel names |
I added some new channels to the Athena DAQ that record the diagnostic channels from the Superlum SLED.
- C4:TCS-ATHENA_I_SET_VOLTS: - the set current signal in Volts (1V = 1A)
- C4:TCS-ATHENA_I_ACTUAL_VOLTS: - a signal proportional to the actual current flowing to the SLED (1V = 1A)
- C4:TCS-ATHENA_I_LIM_VOLTS: - the current limit signal in volts (1V = 1A)
- C4:TCS-ATHENA_TEMP_SENS_V: - the signal from the on-board temperature sensor [thermistor] (1V = 10kOhm ?)
- C4:TCS-ATHENA_PD_VOLTAGE: - the signal from the on-board photodetector (1V = 1A?)
The ioc that handles the EPICS channels is on tcs_daq(10.0.1.34) in /target/TCS_westbridge.db
The channels are added to the frame builder in /cvs/cds/caltech/chans/daq/C4TCS.ini
Currently, the driver for the SLED is ON but the current to the SLED is off. This is to check that the zero value of the PD_VOLTAGE signal doesn't wander.
Also, the input noise of the Athena is around +/- 10 counts (where 2^15 counts = 10V) which is a pretty poor 3mV. |
84
|
Fri Jul 30 13:38:39 2010 |
James Kunert | Computing | Hartmann sensor | Summary of Thermal Defocus Data Analysis |
Below is a table summarizing the results of recent thermal defocus experiments. The values are the calculated change in measured defocus per unit temperature change of the sensor:
Experiment |
72710a |
72710b |
72810a |
72910a |
DeltaS/DeltaT (x) [m^-1/K] |
-1.31E-4 |
-1.46E-4 |
-1.40E-4 |
-1.52E-4 |
DeltaS/DeltaT (y) [m^-1/K] |
-1.63E-4 |
-1.53E-4 |
-1.56E-4 |
-1.70E-4 |
More detail on these experiments will be available in my second progress report, which will be uploaded to the LIGO DCC by next Monday.
The main purpose of this particular eLog is to summarize what functions I wrote and used to do this data analysis, and how I used them. All relevant code which is referenced here can be found on the SVN; I uploaded my most recent versions earlier today.
Here is a flowchart summarizing the three master functions which were specifically addressed for each experiment:

py4plot.m is probably the most complicated of these three functions, in terms of the amount of data analysis done, so here's a flowchart which shows how the function works and the main subfunctions that it addresses:

Also, here is a step-by-step example of how these functions might be used during a particular experiment:
(1)Suppose that I have an experiment which I have named "73010a", in which I wish to take 40 images of 200 sums. I would open the code for framesumexport2.py and change lines 7, 8 and 17 to read:
7 LoopN=40
8 SumN=200
17 mainoutbase="73010a"
And I would then save the changes. I would double-check that the output basename had indeed been changed to 73010a (it will overwrite existing data files, if you forget to change the basename before running it). I would then let the script run (changing the set temperature of the lab after the first summed image was taken). Note that the total duration of the measurement is a function of how many images are summed and how many summed images are taken (in this example, if I was taking each single image at a rate of 11Hz, data collection would take ~20 seconds and data processing (summing the images) would take ~4 minutes (on the order of ~1 second per image in the sum) (the script isn't very quick at summing images, obviously).
EDIT(7/30 3:40pm): I just updated framesumexport2.py so that the program prompts you for this information. I also changed enabled execute permissions on the copy of the code on the Hartmann machine located in /users/jkunert/, so going to that directory and typing ./framesumexport2.py then inputting the information when prompted is all you need to do now. No need to go change around the actual code every time, any more.
(2)Once data collection had ceased entirely, I would open MATLAB and enter the following:
[x,y,dx,dy,time,M,centroids]=pyanalyze_uni('73010a',40);
The function would then look for 73010a.raw and 73010a.txt in ./opt/EDTpdv/ and import the 40 images individually and centroid them. The x and y outputs are the centroid locations. If, for example, 952 centroids were located, x and y would be 952x1x40 arrays. M would be a 40x4 array of the form:
[time_before_img_taken time_after_img_taken digitizer_temp sensor_temp]
(3)Once MATLAB had finished the previous function, I would input:
tG=struct;
py4plot('73010a',0,39,x,y,'73010a','200',[1 952],2,tG)
The inputs are, respectively:
(1)python output basename,
(2)first image to analyze (where the first image is image 0),
(3)last image to analyze,
(4)x data (or, rather, data to analyze. to analyze y instead, just flip around "x" and "y" in the input),
(5)y data (or, if you want to analyze the y-direction, "x" would be the entry here),
(6)experiment name,
(7)number of sums in each image (as a string),
(8)range of centroids to include in analysis (if you have 952 centroids, for example, and no ridiculous noise at the edges of the CCD, then [1 952] would be the best entry here),
(9)outlier tolerance (number of standard deviations from initial fit line that a datapoint must be within to be included in the second line fitting, in the dx vs x plot),
(10)exponential fitting structure (input an empty structure unless the temperature/time exponential fit turns out poorly, in which case a better fit parameter guess can be inputted as field tG.guess) |
159
|
Thu Jun 7 00:23:11 2012 |
Aditi Mittal | Misc | LIGO 3G | Summary June 5 and June 6, 2012 |
June 5
-Discussed the actual project outline
-Installed Comsol on the system
-Learned the basics of Comsol with the help of tutorials available on 40m wiki
and others.
June 6
-Made few simple models in Comsol
-Studied LIGO GWADW slides for a better understanding of the project.
-Setup SVN to access remote repository.
|
176
|
Tue Jun 26 17:55:44 2012 |
Aditi Mittal | Misc | LIGO 3G | Summary June 26, 2012 |
- Discussed the further project with Dr. Brooks.
-Tried to derive formula for the test mass inside cryogenic shield(infinitely long shield from one side)
|
165
|
Mon Jun 11 20:53:31 2012 |
Aditi Mittal | Misc | LIGO 3G | Summary June 11, 2012 |
-Continued with the same cryogenic model created and varied the length of outer shield and studied the temperature variation inside.
-Compared the temperature difference given by COMSOL with manually calculated one. |
163
|
Fri Jun 8 23:51:13 2012 |
Aditi Mittal | Misc | LIGO 3G | Summary June 8, 2012 |
-Created a COMSOL model for cryogenically shielded test mass with compensation plate.
-Analyzed the behavior of the model in different size configurations. |
161
|
Thu Jun 7 23:24:56 2012 |
Aditi Mittal | Misc | LIGO 3G | Summary June 7, 2012 |
-Created a COMSOL model for variation of temperature in two mass system.
-Used the above model for cryogenic conditions.
-checked it analytically. |
167
|
Thu Jun 14 05:37:30 2012 |
Aditi Mittal | Misc | LIGO 3G | Summary June 13, 2012 |
-Derived formula for manual calculation of temperature due to total influx.
-Compared the results by COMSOL and by the formula. |
179
|
Fri Jun 29 15:51:24 2012 |
Aditi Mittal | Misc | LIGO 3G | Summary June 28 and 29, 2012 |
-Discussed the project outline for next 6 weeks.
-made a write up for the tasks. (attached)
-Analyzed the variation of temperature of the test mass with input power for different lengths of the shield. |
Attachment 1: pipelength_power.xlsx
|
Attachment 2: 6week_plan.doc
|
175
|
Thu Jun 21 18:35:44 2012 |
Aditi Mittal | Misc | LIGO 3G | Summary June 21, 2012 |
-Updated 3 week progress report with new additions and deletions.
-Attended LIGO lecture which was very interesting and full of information. |
173
|
Thu Jun 21 11:16:27 2012 |
Aditi Mittal | Misc | LIGO 3G | Summary June 19 and 20, 2012 |
-Attented LIGO orientation meeting and safety session.
-Prepared 3 week report
|
Attachment 1: temp_of_test_mass.png
|
|
109
|
Wed Feb 23 20:18:30 2011 |
Aidan | Electronics | Hartmann sensor | Successfully re-started the Hartmann sensor |
I reattached the Hartmann Sensor to the LENOVO machine that is running Ubuntu and turned it on (it's been disconnected for a couple of months). The /opt/EDTpdv/serial_cmd was able to communicate successfully with the camera. |
26
|
Mon May 3 17:43:48 2010 |
Aidan | Computing | Frame Grabber | Successful image capture with EDT frame grabber |
I noticed that when i ran /opt/EDTpdv/camconfig and selected camera 331, which appeared to be closest to the Dalsa Pantera 1M60 camera, the software loaded the configuration file pantera11m4fr.cfg.
I tried to locate which entry in the camconfig list corresponded to the dalsa_1m60.cfg configuration file, but none of them seemed to. I couldn't select any entry and get it to report that it was using the 1m60 config file.
Next I noticed that there were 659 configuration files in the /opt/EDTpdv/camera_config directory but only 460 configuration options in camconfig. This seemed like 1/3 of the config files were somehow not formatted correctly, including,possibly the 1M60 config file.
By editing the pantera11m4fr.cfg I verified that the name of the camera, as it appears in the camconfig program, is the second line in the configuration file. For that file it was:
# CAMERA_MODEL "Dalsa Pantera 12 bit single channel camera link"
where the first line is just a single hash. The dalsa_1m60.cfg file did not have a name formatted in the same way as above: it was originally as shown below:
# Dalsa 1m60 config file (freerun)
so i changed the name in that configuration file to the following and it was suddenly available in the list when ./camconfig was run
# CAMERA_MODEL "Dalsa 1m60 config file (freerun)"
I selected that camera (number 53 in the list). Once this was done I ran pdv_flshow/pdvshow again the image that was displayed from the camera appeared to be correctlty demodulated.
Actually, the very first time i ran pdvshow the image was demodulated correctly but it appeared that the origin was offset and then the image wrapped around a little at the edges. However, every successive time I've run pdvshow since then I've had a perfectly demodulated image.
I ran some test patterns by changing the video mode using the serial communications menu in the camera. I also illuminated the Hartmann sensor with a torch/flashlight and got some spot patterns - see attached images.
Also, I've attached the dalsa_1m60.cfg file.
|
Attachment 1: 20100503_dalsa1m60_configuration_notes.txt
|
Configuring HWS to get image in CentOS
----------
9:34AM - Dalsa 1m60 turned on
----
$ /opt/EDTpdv
$ ./serial_cmd
%%this starts the serial communications device in the EDT FG but it isn't configured.
... 123 more lines ...
|
Attachment 2: 2010-05-03_dalsa1m60_image_test_pattern_and_spots.tif
|
|
Attachment 3: 2010-05-03_dalsa1m60_image_test_pattern_right_side.tif
|
|
Attachment 4: dalsa_1m60.cfg
|
#
# CAMERA_MODEL "Dalsa 1m60 config file (freerun)"
#
# camera name/description
#
camera_class: "Dalsa"
camera_model: "1M60"
camera_info: "12 bit dual channel camera link"
... 39 more lines ...
|