Remove silly tex/ directory.
[thesis.git] / src / figures / cantilever-data / extract_f_v_k_data.sh
1 #!/bin/bash
2 #
3 # Extract v,f,k data.  Ignore index, temperature, etc.
4
5 set -e # exit immediately on failed command
6 set -o pipefail # pipes fail if any stage fails
7
8 BASE_DATA_DIR="$HOME/rsrch/data"
9 SCALED_DATA_DIR="scaled_unfold"
10 CALIBRATION_DATA_DIR="calibration"
11
12 EXTRACT_UNFOLDS="$HOME/src/lab/analysis/sawmodel/extract_unfolds.py"
13 SCALE_UNFOLD="$HOME/src/lab/analysis/sawtooth_worming-0.1/scale_unfold.py"
14
15 DATA_DAYS[8]=20090114
16 #DATA_DAYS[9]=20090128   # No good sawteeth
17 DATA_DAYS[10]=20090203
18 #DATA_DAYS[11]=20090211  # No good sawteeth
19 DATA_DAYS[12]=20090212
20 DATA_DAYS[13]=20090214
21 DATA_DAYS[14]=20090219
22 DATA_DAYS[15]=20090222
23
24 echo -e "#Unfolding force (pN)\tUnfolding rate (nm/s)\tSpring constant (pN/nm)\tLoading rate (pN/s)\tDatafile"
25
26 function NotEmpty ()
27 {
28     NAME=$1
29     VALUE=$2
30     if [ -z "$VALUE" ]; then
31         echo "Error parsing"
32         echo "$UNFOLD_LINE"
33         echo "$NAME not defined.  File format must have changed."
34         exit 1
35     fi
36 }
37
38 FIELD_INDEX=""
39 function FieldIndex ()
40 {
41     LINE="$1"
42     TITLE_REGEXP="$2"
43     FIELD_INDEX=`echo "$LINE" | sed 's/\t/\n/g' | grep -n "$TITLE_REGEXP" | cut -d: -f1`
44 }
45
46 for DAY in ${DATA_DAYS[*]}
47 do
48     echo "---Processing day $DAY---" >&2
49     DATAFILE_FIELD=""
50     FORCE_FIELD=""
51     LAST_DATAFILE="" # Caching for efficiency
52     while read UNFOLD_LINE
53     do
54         echo "Parsing '$UNFOLD_LINE'" >&2
55         if [ "${UNFOLD_LINE:0:1}" == "#" ] ; then
56             # reading the header line
57             FieldIndex "$UNFOLD_LINE" "Datafile"
58             DATAFILE_FIELD="$FIELD_INDEX"
59             FieldIndex "$UNFOLD_LINE" "Force (pN)"
60             FORCE_FIELD="$FIELD_INDEX"
61             FieldIndex "$UNFOLD_LINE" "Stiffness (pN/nm)"
62             STIFFNESS_FIELD="$FIELD_INDEX"
63             NotEmpty 'Datafile field' "$DATAFILE_FIELD"
64             NotEmpty 'Force field' "$FORCE_FIELD"
65             NotEmpty 'Stiffness field' "$STIFFNESS_FIELD"
66             continue
67         fi
68         NotEmpty "$DAY extraction header" "$DATAFILE_FIELD"
69         DATAFILE=`echo "$UNFOLD_LINE" | cut -f $DATAFILE_FIELD`
70         NotEmpty 'Datafile' "$DATAFILE"
71         DATAFILE="$BASE_DATA_DIR/$SCALED_DATA_DIR/$DATAFILE"
72         UNFOLDING_FORCE=`echo "$UNFOLD_LINE" | cut -f $FORCE_FIELD`
73         NotEmpty 'Unfolding force' "$UNFOLDING_FORCE"
74         STIFFNESS=`echo "$UNFOLD_LINE" | cut -f $STIFFNESS_FIELD`
75         NotEmpty 'Stiffness' "$STIFFNESS"
76         if [ "$DATAFILE" != "$LAST_DATAFILE" ]; then
77             UNFOLDING_RATE=`sed -n 's/^Unfold rate (nm\/s):\t//p' "${DATAFILE}_param"`
78             NotEmpty 'Unfolding rate' "$UNFOLDING_RATE"
79             SPRING_CONSTANT_STRING=`$SCALE_UNFOLD --print-k "$DATAFILE"`
80             NotEmpty 'Spring constant string' "$SPRING_CONSTANT_STRING"
81             SPRING_CONSTANT_N_PER_M=`echo "$SPRING_CONSTANT_STRING" | sed -n 's/ N\/m$//p'`
82             NotEmpty 'Spring constant (N/m)' "$SPRING_CONSTANT_N_PER_M"
83             SPRING_CONSTANT=`echo "print ($SPRING_CONSTANT_N_PER_M * 1e3)" | python`
84             NotEmpty 'Spring constant (pN/nm)' "$SPRING_CONSTANT"
85         fi
86         LOADING_RATE=`python -c "print $STIFFNESS * $UNFOLDING_RATE"` # pN/s
87         echo -e "$UNFOLDING_FORCE\t$UNFOLDING_RATE\t$SPRING_CONSTANT\t$LOADING_RATE\t$DATAFILE"
88         LAST_DATAFILE="$DATAFILE"
89     done < <(cd $BASE_DATA_DIR/$SCALED_DATA_DIR/ && $EXTRACT_UNFOLDS ${DAY}_select_fit.xml)
90 done
91
92 exit 0