if (name_declared("pkgversions") != 4 ) { execute("strdef pkgversions") } sprint(pkgversions,"%sutils = \$Revision: 1.22 \$, ",pkgversions) begintemplate Utils public error public warning public min, max public mean, stdev, stderr public mul_ratio_round public list_join, list_copy // // error(String error) // // Issue error string and stop simulation // proc error() { print "Error: ", \$s1 stop } // // warning(String error) // // Issue warning string // proc warning() { print "Warning: ", \$s1 } // // x = min(double a, double b) // // return minimum of a and b // func min() { if ( \$1 < \$2 ) { return \$1 } else { return \$2 } } // // x = max(double a, double b) // // return maximum of a and b // func max() { if ( \$1 > \$2 ) { return \$1 } else { return \$2 } } // // mean(Vector dest, Matrix src) // // Compute mean of columns of src storing output in mean // proc mean() { local i \$o1 = new Vector(\$o2.ncol()) for i=0, \$o2.ncol()-1 { \$o1.x(i) = \$o2.getcol(i).mean() } } // // stdev(Vector dest, Matrix src) // // Compute standard deviation of columns of src storing output in stdev // proc stdev() { local i \$o1 = new Vector(\$o2.ncol()) for i=0, \$o2.ncol()-1 { if (\$o2.getcol(i).size > 1) { \$o1.x(i) = \$o2.getcol(i).stdev() } else { \$o1.x(i) = 0 } } } // // stderr(Vector dest, Matrix src) // // Compute standard deviation of columns of src storing output in stderr // proc stderr() { local i \$o1 = new Vector(\$o2.ncol()) for i=0, \$o2.ncol()-1 { if (\$o2.getcol(i).size > 1) { \$o1.x(i) = \$o2.getcol(i).stderr() } else { \$o1.x(i) = 0 } } } // // mul_ratio_round(Vector out, int n, Vector ratio) // Return a vector OUT whose elements sum to N and are approximately in the ratio RATIO // objref ratio, out, out_floor, out_rem, si proc mul_ratio_round() { local n, i n = \$2 ratio = \$o3 out = ratio.c() out.mul(n/ratio.sum()) out_rem = out.c out.floor() out_rem.sub(out) si = out_rem.sortindex() i = si.size() while(out.sum() < n) { i = i - 1 out.x(si.x(i)) = out.x(si.x(i)) + 1 } \$o1 = out } // // list_join(List ldest, List lsrc) // Append every object in lsrc to ldest // proc list_join() { for i=0,\$o2.count()-1 { \$o1.append(\$o2.object(i)) } } // // list_copy(ldest, lsrc, src_start, src_end) // Copies lsrc into ldest, starting at src_start and finishing at src_end // proc list_copy() { local src_start, src_end, i src_start = \$3 src_end = \$4 \$o1 = new List() for i = src_start, src_end { \$o1.append(\$o2.object(i)) } } endtemplate Utils objref utils utils = new Utils()