7/1: CMB Polarization Conference
file upload problems:
7/6 : At Caltech
Adding new mce commands
7/7
Fridge Commands
7/8
7/9
Run MCE from gcp
running
7/11
Walt's email: Data Acquisition Notes
7/16
Things to do
7/17
Solidworks model for 50k loading jig
7/21
reconfigure keyboard to devorak
spt data cuts
7/23
Re-do bars for stand
Continue on spt cuts
7/24
get_response_cuts.pro
7/27
get_outlier_cuts
get_line_cuts
7/28
Add stop mce cmd
Lakeshore readout
7/30
7/31

7/1: CMB Polarization Conference

See meetings page: CMBPol meeting link

file upload problems:

Gear, Walter. Clover. Too big: 61.37 MB
Kogut, Al. PIPER. ??
Pearson, Timothy. C-Bass. Too big: 51 MB

7/6 : At Caltech

Adding new mce commands

Added mce_start_acq command.
Syntax:
mce_start_acq [# frames], [readout cards], [data rate], [# rows]

example

bicepViewer> mce_start_acq 1000, 1, 100, 33

7/7

Fridge Commands

look at specificscript.c
command sc_fridge_cmd


similar to datasystem_cmd
want channels from 1-8

looking at setbias_cmd
type = dc
freq: set once for all NTD's
voltage:
percent:
value:
  keep these 3
device: number or list of numbers from 1 to 8

7/8

my laptop is broken :(

7/9

Run MCE from gcp

MCE bash commands:
% reads all readout cards
mce_cmd -x rb rca data_mode
% rb = read block, rca = all readout cards, data mode = obvious


%%%%%%% Take data:
mce_fast_acq 25000 s 38

% s means all readout cards, use 1 for rc1, 2 for rc2
% defaults: data rate = 38, new_rows_rep=33 % num rows reported
% 25000 frames = 1 min
MCE IDL commands:
auto_tune_setup

% Converting data rate to frame rate:
% 50 MHz/ (num_rows*100*data_rate), 100=dwell_time

1. Freq sweep @ 14 amp ptp
2. Amp sweep @ 0.1 Hz
3. DC offset sweep, 1 amp ptp, 0.1 Hz, -6V to +6V

mce reset if it hangs:
mce_cmd -x mce_reset
dsp_reset
fakestop
empty


bicep@bicep32:/usr/mce/mce_script/idl_pro$
auto_setup_squids.pro

mce_fast_pipe -> continuous data taking?

running

gcp is already running on bicep31.
compile in emacs. Not sure if I needed to compile with GCP32=1?
Run mce from bicep32 with basic start.
Run bicepViewer on bicep32.

bicepViewer>

bicepViewer> mce_cmd -x rb tes bias
Masd/CommandMsg::packMceGenericMsg(mce_cmd -x rb tes bias)
masd::CommandTask::runGenericCommand()
This is mce_cmd version MAS/slotpc/363
Line   0 : ok : 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Processed 0 lines, exiting.

bicepViewer> mce_cmd -x rb rca data_mode

Masd/CommandMsg::packMceGenericMsg(mce_cmd -x rb rca data_mode)
masd::CommandTask::runGenericCommand()
This is mce_cmd version MAS/slotpc/363
Line   0 : ok : 0 0
Processed 0 lines, exiting.

bicepViewer> mce_cmd -x rb rca

Masd/CommandMsg::packMceGenericMsg(mce_cmd -x rb rca)
masd::CommandTask::runGenericCommand()
This is mce_cmd version MAS/slotpc/363
Line   0 : error : rca expects at least 1 arguments
Processed 0 lines, exiting.


bicepViewer> mceGeneric "mce_cmd -x rb sa fb"

Masd/CommandMsg::packMceGenericMsg(mce_cmd -x rb sa fb)
masd::CommandTask::runGenericCommand()
This is mce_cmd version MAS/slotpc/363
Line   0 : ok : 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Processed 0 lines, exiting.

Try taking data:

bicepViewer> mce_start_acq 100, 1, 100, 33

MceNetCmdForwarder::forwardNetCmd( NET_MCE_START_ACQ_CMD )
MasdNetCmdForwarder: Got a MCE_START_ACQ command

Masd/CommandMsg::packMceStartAcqMsg()
CommandTask: case MCE_START_ACQ
masd::CommandTask::runStartAcqCommand()
mce_fast_acq 100 1 100 33

I'm not sure it did anything.
It did not do anything, because the command had the popen part commented out!
Uncomment this and try again...

mce_start_acq 20000, 1, 100, 33

Nothing...
I need a the command to look like:
./mce_fast_pipe 1000 s

./mce_fast_pipe 1000 1 100 33
works from the command line

this works also:
/home/bicep/./mce_fast_pipe 1000 1 100 33

Walts commands to find out what was wrong:
sudo rmmod mce_dsp

ps aux grep mce

mce_cmd -x mce_reset
mce_cmd -x dsp_reset
mce_cmd -x fakestop
mce_cmd -x empty
mce_status

/home/bicep/mce_fast_pipe 500 1 100 33

The important error:

/usr/mce/mce_script//script/mce_run: line 99: echo: write error: Broken pipe

command line
Left 3 columns empty parsing runfile line for rc.
Error parsing runfile line, but will keep trying.
No register associated with runfile entry 'data_filename' in board 'frameacq.'
Ignoring it.

system()
Left 3 columns empty parsing runfile line for rc.
Error parsing runfile line, but will keep trying.
No register associated with runfile entry 'data_filename' in board 'frameacq.'
Ignoring it.
FRAME_BASENAME=/data/cryo/current_data//../mas_data_pipe

popen()
Left 3 columns empty parsing runfile line for rc.
Error parsing runfile line, but will keep trying.
No register associated with runfile entry 'data_filename' in board 'frameacq.'
Ignoring it.

popen() without collecting output
Left 3 columns empty parsing runfile line for rc.
Error parsing runfile line, but will keep trying.
No register associated with runfile entry 'data_filename' in board 'frameacq.'
Ignoring it.
/usr/mce/mce_script//script/mce_run: line 99: echo: write error: Broken pipe

Mystery "solved:"
adding the bash command "at" seems to fix the problem.

7/11

Walt's email: Data Acquisition Notes

Hi guys,

This e-mail is a summary of where the data acquisition software and hardware
stand after this week's development  There are a few points of general
interest to everyone who will be taking data, and also some for Chin Lin,
Grant, and Doug, who will be working on monitoring and the fridge cycle
program.

1. Driving MCE - we have a few new commands that can be used in bicepViewer or
in schedule files, thanks to Kyle's efforts:
   mceGeneric [...] - runs commands on the MCE computer.  For
                                instance, mceGeneric mce_cmd -x mce_reset
                                You can use this basically in the same
                                way as when controlling MCE from the
                                command line.
     mce_start_acq num_frames data_rate n_rows [rc] - start acquisition.
 We still need a command to cleanly *stop* the acquisition, and we will add
 more commands (and modify these) over the next run.

2. Controlling the sync box - I have added monitoring and control of the
   box settings.  The new registers are antenna0.syncBox.enable,
  .data_rate, .row_len, and .num_rows.  You can set them with the new
  syncBox command, like this:
     syncBox enable=on
     syncBox data_rate=150
  etc.  Important: when taking data, the sync box settings should be
  consistent with the MCE settings.  They should have the same data_rate
  and num_rows, and row_len on the sync box should be exactly half of
  the row_len on the MCE (usually row_len=50 on sync box and
  row_len=100 on MCE).  data_rate=150 corresponds to 100 Hz acquisition.
  This is our standard mode for the moment.  In the future, GCP will
  automatically make sure that the MCE and sync box settings match, but
  for now you should check this when running mce_start_acq.

3. Frame synchronization - I have put in place a workaround for the "Y1859"
  bug, which was causing bicepViewer to frequently display points in the year
  1859.  The underlying hardware problem remains, and Viktor, Steve Benton,
  and I will try to fix it over the next month or so.  In the meantime, your
  plots in bicepViewer will look much nicer.

4. Monitoring - we have simple monitoring plots online at
  http://bicep0.caltech.edu/~spuder/control_software/monitor/monitor.html
  Grant, Chin Lin, and Doug can work on some more refined plots for
  web display.

5. Thermometry - GCP is ready to read out all of the needed channels through
   the BLAST bus, and convert to volts.  We don't yet have temperature
   calibrations.  We have not yet tested this with the backpack on the dewar.
   Will try this early next week.  The BLAST bus readout has been heavily
   modified: it now runs in its own thread, at the BLAST bus clock rate,
   independent of GCP's sample rate.  It is also more robust, so that
   malformed readings are automatically thrown out.  The voltages are
   reported in some of the registers in antenna0.hk.

6. Heater control - We have tested that GCP can correctly set voltages on the
   heater channels of the housekeeping backpack.  There are commands to
   control these from bicepViewer or schedule files.  The voltages are
   reported in some of the registers in antenna0.hk.

7. Thermal control - I have made a thermal control thread in GCP that can be
   used to servo heaters in order to keep a constant temperature.  It runs at
   a constant 100 Hz, independent of everything else in the world.  It can
   control multiple heaters, so we will be able to servo on the "clean side"
   and the "dirty side" simultaneously.  I have also added some output
   registers that let you look at what the thermal control system is doing.
   You can find them in antenna0.tc.  The four sets of P,I,D,S correspond to
   the four temperature control modules with four heaters that can be servoed
   simultaneously.

8. Fridge cycle - Not started yet, but I know how to do it now.  Doug,
   Chin Lin, and Grant can help.  We will write a stand-alone fridge cycle
   controller that will get data from and send commands to GCP.

9. Real-time analysis (teaser) - In planning

- Walt

7/16

Things to do

BICEP2
  - add "at" to mceGeneric cmd
  - add a command or fn that checks if the mce is doing anything, and prevents
    us from making commands that the mce doesn't like.
  - mce shutdown
  - add logbook posting about how to add commands
  - Check that MCE and sync box settings match.

  - continuous running?
  - thermometry control?
  - real-time analysis?

KECK
  - 50k lifting lid -> check drawing for center hole
  - 4k lifting lid
  - 50k inserting plate and rod

7/17

Solidworks model for 50k loading jig

Part Numbers:
01-021: 50k_lifting_lid
01-022: 4k_lifting_lid
01-023: 300k_loading_plate
01-024: 300k_loading_bar

01-025: 50k_loading_plate

7/21

reconfigure keyboard to devorak

http://www.kaufmann.no/roland/dvorak/linux.html
$ wget http://www.kaufmann.no/downloads/linux/kbddvp-1_2_1-src-linux.tgz
$ DVP_DIR=$(mktemp -t -d kbddvp.XXXXXX)
Illegal variable name.

$ mkdir kbddvp
$ cd kvddvp
$ gzip -d kbddvp-1_2_1-src-linux.tgz
$ tar -xvf kbddvp-1_2_1-src-linux.tar
$ chmod a+x dvp.p
$ chmod a+x dvp.postinst.sh
$ su
# ./dvp.postinst.sh && ./dvp.postinst.sh
# exit
$ system-config-keyboard
Nope...
$ setxkbmap -layout us -variant dvp
Error loading new keyboard description
$ setxkbmap -print
xkb_keymap {
        xkb_keycodes { include "xfree86+aliases(qwerty)" };
        xkb_types { include "complete" };
        xkb_compat { include "complete" };
        xkb_symbols { include "pc(pc105)+us" };
        xkb_geometry { include "pc(pc105)" };
};

edit /etc/X11/xorg.conf
$ setxkbmap -layout us -variant dvp -option compose:102 -option keypad:atm -option numpad:shift3 -option kpdl:semi


tom says:
setxkbmap -help
tcaswell@ivanova:~$ setxkbmap -print
xkb_keymap {
        xkb_keycodes { include "evdev+aliases(qwerty)" };
        xkb_types { include "complete" };
        xkb_compat { include "complete" };
        xkb_symbols { include "pc+us(dvp)+us:2+inet(evdev)+level3(rwin_switch)+ctrl(swapcaps)+compose(menu)" };
        xkb_geometry { include "pc(pc104)" };
};
are what my computer is set to
  Envoyé mardi à 14:06

setxkbmap -layout us -variant dvp

spt data cuts

refer to 6/30 Notebook entry.

goal 1: make plot of response as fn of bolometers
from spt_analysis/fits/
type:

> data=read_spt_fits('/data/sptdat/fits/calibrator/calibrator_20090623_191359.fits')
> plot,data.observation.bolo_cal_response,/ps
Make a hard-copy plot:
IDL> set_plot, 'PS'
IDL> device, filename='bolo_response_20090721.ps'
IDL> plot, data.observation.bolo_cal_response, xtitle="bolometers", ytitle="response", /ps
IDL> device, /close
IDL> set_plot,'X'

looking at spt_analysis/cuts/get_cuts.pro
First try running:
IDL> get_cuts, data
IDL> print, data.obserfation.bolo_flags
error:
  % Program caused arithmetic error: Floating divide by 0
can't get even a print statement to work. -> need to compile with .compile

$idl
> data=read_spt_fits('/data/sptdat/fits/calibrator/calibrator_20090623_191359.fits')
>

get_cuts
calls the following sub-routines:
  - get_lowlevel_cuts
  - get_response_cuts
  - get_outlier_cuts
  - get_line_cuts
  - get_calibration_failed_cuts
  - get_cal_wt_outlier_cuts

get_lowlevel_cuts
call read_cuts_config:
read_cuts_config.pro: later
args
  - customfile, starttime, endtime, configfile, default, string
  - call find_valid_config -> skip for now.

Figure out where we'll start appending new cuts, and grab the cut flags that we'll be modifying
  - cut_flag_name_to_index()

Cuts:
  - bolo_sqc_switch_enable >= 1
      all are 1 or 0
  - bolo_sqc_rfb_switch in [1, 3)
      most are 1, some are 0, a few are ~255
  - bolo_sqc_rfb_switch > 1
  - bolo_squid_ibias >= bolo_squid_ibias_min
      values fall in two ranges: (6.2, 7) and (5.5, 6)
      cut value is 0.5
  - bolo_dds_freq >= bolo_dds_freq_min=30,000
      evenly scattered between (3.5e5, 1e6)
      cut value is 3e5
  - bolo_car_digpot >= bolo_car_digpot_min=1
      all above 30
      line at 170
      interesting curve shape
      cut value at 1
  - bolo_dds_amp_i >= bolo_dds_amp_i_min=0.1

Q: are the detectors being cut the same for all cuts?

divide by zero error is in get_cal_wt_outlier_cuts

get_response_cuts
fills bolo_flag variable with a number representing what cuts the channel failed

Questions:
  - How do I look inside a struct?
  - Difference between "fn, arg" and "fn(arg)" ?
  - "which" command?
  - when do I need to compile
  - quick hardcopy? to non-local directory?
spt:
  - what is "rail"?, i.e. get_lowlevel_cuts L139

7/23

Re-do bars for stand

barUpper1 - 21.5"
barLower1 - 18.375"

Continue on spt cuts

Make plots of cuts
> data=read_spt_fits('/data/sptdat/fits/calibrator/calibrator_20090623_191359.fits')
IDL> set_plot, 'PS'
IDL> device, filename='bolo_dds_freq.ps'
IDL> plot, data.observation.bolo_dds_freq, /ps
IDL> device, filename='bolo_car_digpot.ps'
IDL> plot, data.observation.bolo_car_digpot, /ps
IDL> device, filename='bolo_dds_amp_i.ps'
IDL> plot, data.observation.bolo_dds_amp_i, /ps
IDL> device, /close

bolo_sqc_rfb_switch == 1

bolo_squid_ibias >= 1/2

bolo_dds_freq, >= 30,000

bolo_car_digpot, >= 1

bolo_dds_amp 0.1

7/24

get_response_cuts.pro

cuts applied:
  - calibrator S/N
      cal_sn_min = 10
  - elnod response and goodness of fit
fills the data.rbservation.bolo_flag variable

SN cut

cal_sn_min=config.cal_sn_min
bolo_elnod_response=data.observation.bolo_elnod_response
bolo_elnod_gof=data.observation.bolo_elnod_gof
obs_tags=tag_names(data.observation)
bolo_cal_response=data.observation.bolo_cal_response
bolo_psd_9to11=data.observation.bolo_psd_9to11

two options,
  - AUX_BOLO_PSD_9TO11 in obs_tags
  - data.observation.aux_bolo_psd_9to11 has non-zero element

; SN cut
whcal=where(bolo_cal_response/(bolo_psd_9to11/sqrt(2.)) gt cal_sn_min
calibrator_flags[whnocal] = 1

elnod cut

Not being run. ??

7/27

data=read_spt_fits('/data/sptdat/fits/calibrator/calibrator_20090623_191359.fits')

get_outlier_cuts

arguments:
elnod_data, cal_data, elnod_sig_thresh, cal_sig_thresh, config

elnod_sig_thresh = config.elnod_sig_thresh
cal_sig_thresh = config.cal_sig_thresh
old_style=0
bolo_elnod_response=data.observation.bolo_elnod_response
bolo_elnod_gof=data.observation.bolo_elnod_gof
bolo_cal_response=data.observation.bolo_cal_response
bolo_psd_9to11=data.observation.bolo_psd_9to11

;-------------------------------------------------------------------
; Cut out channels that are more than 3 sigma away from some
; iteratively-determined mean calibrator response for live channels
; on that wedge
;-------------------------------------------------------------------
wh_these = ;good bolometers
wh_not_outlier= where_not_outlier(bolo_cal_response[wh_these], nsigma=3,wh_outlier=wh_outlier)
frac_cut = 0.05
maxiter = 15

where_not_outlier()
count = 0
keep_going = 1
while keep_going eq 1 do begin
    thisdata = data[ind]
    this_stddev = stddev(thisdata,/nan)
; find the non-outliers of this subset of data
    testdata = abs(thisdata-median(thisdata))
    wh_ok = where(testdata lt nsigma*this_stddev, nok)

; calculate the standard deviation of the new subset of data
    new_stddev = stddev(thisdata[wh_ok],/nan)
; if we are not trying to hit a target, check to see if
; this stdev is close enough to the previous stdev, so
; that the iteration can stop
        if (this_stddev-new_stddev)/(this_stddev) lt frac_cut then keep_going = 0
    endelse

    ind = ind[wh_ok]
    count=count+1


cuts after get_lowlevel_cuts, get_response_cuts
why isn't the hard-copy working?
Answer:
> plot, x
> write_png, 'test.png'

This is a plot of bolo response in 'response units'.
Here, red crosses are the points that are cut by the outlier cut,
  and blue are the bolometers that are being kept.

Answers
  - can the Kludge comment be deleted? -> probably
  - what is bolo_elnod_gof -> "goodness of fit" to weather data
  - what is the flag 9to11 -> 9 to 11 hz

http://spt.uchicago.edu/intweb/analysis/doc/data_guide.html

get_line_cuts

bolo_n_lines=data.observation.bolo_n_lines
bolo_line_widths=data.observation.bolo_line_widths
bolo_line_centers=data.observation.bolo_line_centers

CUTS
1) cut lines which have too many lines
    39
2) line width
    1
3) line bandwidth
    2
4) line bandwidth check range
    [0, 25]

7/28

Add stop mce cmd

7/16 - things to do

NetDataSystemCmd
NetMask mces

To Do
  - logbook posting on adding commands
  - save idl plots -> done
  - LakeShore driver

Lakeshore readout

See Projects -> lakeShore

7/30

To Do
  - mce status command
  - LakeShore stuff

email from Ryan

ra3h30dec-60: /data/sptdat/run1_2009/ra3h30dec-60/fits/
ra21hdec-60 (temporary spot?): /data11/sptdat/run1_2009/ra21hdec-60/fits/

myspawn='find /data/sptdat/run1_2009/ra3h30dec-60/fits/ -name
"field_scan_stub_*" | sort'
spawn,myspawn,list
nlist=n_elements(list)

for i=0,nlist-1 do begin
 data=read_spt_fits(list[i])
endfor

; if you want to cut on dates before reading in the full list
mjd=extract_date_from_filename(list,/mjd)
; mjd_to_date_string and date_string_to_mjd are both useful.

; decent IDL help: dfanning.com

7/31

working on Lakeshore. See Projects/Lakeshore