#read in data set data logdata read {lnamp 1 lnmass 2} #define macro MACRO lsfit 4 { # Calculate least squares fit of a data set (x,y) # to y = m*x + b # # Arguments: # $1 x data # $2 y data # Output: # $3 the slope # $4 the y-intercept set sumx = sum($1) set sumy = sum($2) set sumxy = sum($1*$2) set sumxsq = sum($1**2) set n = dimen($1) set m = (n*sumxy - sumy*sumx)/(n*sumxsq - sumx**2) set b = (sumy - m*sumx)/n set $3 = m set $4 = b set x = $1 set y = m*x + b } #Call fit macro lsfit lnamp lnmass m b #output slope and intercept print {m} print {b} MACRO drawparab 5 { #Draw a parabola with extremum point ($1,$2) from $3 to $4 #with "slope" $5 # pick a point at top of parabola set x_p = $1 set y_p = $2 set xt = $3, $4, ($4-$3)/100 set a = $5 set b = -2*a*x_p set c = y_p - a*x_p**2 - b*x_p set yt = a*xt**2 + b*xt + c connect xt yt # } MACRO drawarc 5 { # draw an arc, centre ($1,$2) radius $3, # between centered around angle $4, of length $5 SET _ang local set _x local set _y local SET _ang = $4-$5,$4+$5,PI/30 SET _x = $1 + $3*COS(_ang) SET _y = $2 + $3*SIN(_ang) CONNECT _x _y # } MACRO makebox 4 { #draw lines from ($1,$2)->($1,$4)->($3,$4)->($3,$2)->($1,$2) relocate $1 $2 draw $1 $4 draw $3 $4 draw $3 $2 draw $1 $2 # } MACRO makebox2 5 { #draw lines from ($1,$2)->($1,$4)->($3,$4)->($3,$2)->($1,$2) relocate $1 $2 draw $1 $4 draw $3 $4 draw $3 $2 draw $1 $2 #set p = { $1 $1 $3 $3 $1 } #set p' = { $2 $4 $4 $2 $2 } set p = $1 concat $1 concat $3 concat $3 concat $1 set p' = $2 concat $4 concat $4 concat $2 concat $2 shade $5 p p' # }