prologues := 3; outputformat := "svg"; defaultfont := "cmr10"; defaultscale := 1.1; color Blue,Teal,Orange,Green,Grey,Light,Wash; Blue := (0,84/255,159/255); Teal := (0,177/255,183/255); Orange := (246/255,168/255,0); Green := (87/255,171/255,39/255); Grey := (100/255,101/255,103/255); Light := (236/255,236/255,237/255); Wash := (232/255,241/255,250/255); % Format displayed numbers to hundredths using integer strings. vardef numlabel(expr value)= save n,whole,frac; numeric n,whole,frac; n:=round(100abs value); whole:=floor(n/100); frac:=n mod 100; (if value<-.005: "-" & fi decimal whole if frac>0: & "." & if frac<10: "0" & fi decimal frac fi) enddef; pickup pencircle scaled .9; outputtemplate := "MPT-14-002.svg"; input graph; numeric n,t[],observed[],model[],low[],high[],valid[]; n:=0; gdata("data/readings.dat", row, n:=n+1; t[n]:=scantokens row1; observed[n]:=scantokens row2; model[n]:=scantokens row3; low[n]:=scantokens row4; high[n]:=scantokens row5; valid[n]:=scantokens row6; ); beginfig(1); fill unitsquare xscaled 320 yscaled 220 withcolor white; % BEGIN DRAWING vardef xx(expr x)=45+30x enddef; draw (45,190)--(45,110)--(285,110) withcolor Grey; draw (45,90)--(45,42)--(285,42) withcolor Grey; draw (45,66)--(285,66) dashed evenly withcolor Grey; for j=1 upto n: if valid[j]=1: fill fullcircle scaled 4 shifted (xx(t[j]),110+13observed[j]) withcolor Blue; fill fullcircle scaled 4 shifted (xx(t[j]),66+40*(observed[j]-model[j])) withcolor Teal; fi endfor; draw (xx(0),123)--(xx(8),110+13model[n]) withcolor Orange; label.lft("0",(42,110)); label.lft("6",(42,188)); for y=-.6 step .6 until .6: label.lft(numlabel(y),(42,66+40y)); endfor; label.top("(a) Response (a.u.)",(165,190)); label.top("(b) Residual (a.u.)",(165,88)); for j=0 upto 8: label.bot(decimal j,(xx(j),42)); endfor; label.bot("Time (s)",(165,25)); % END DRAWING label.lft("MPT-14-002" infont "cmr8",(312,210)); setbounds currentpicture to unitsquare xscaled 320 yscaled 220; endfig; end.