global numfields, field1, field2, item_name, item_flag, flags1, flags2, in1, in2, out1, out2, out3, out4, first, item_cnt, dbg_flag procedure main() local date_start, date_stop, exec_time date_start := &dateline init() list_fields() dbg_flag := 0 if dbg_flag = 1 then write("DBG TOP2") # &trace := -1 field1 := 1 while field1 <= numfields - 1 do { process_field1() field1 +:= 1 } system("rm TMP/*.tmp") date_stop := &dateline write("Started " || date_start) write("Finished " || date_stop) exec_time := &time write("Execution Time " || exec_time || " ms") end procedure process_field1() # Process field1 -- for every field2 if dbg_flag = 1 then write("DBG FIELD1 AAA", field1, item_name[field1], "flag = ", item_flag[field1]) # start field2 as next field field2 := field1 + 1 while field2 <= numfields do { process_field2() field2 +:= 1 } return end procedure list_fields() local dbg_out, it if dbg_flag = 1 then { dbg_out := open("TMP/item_out.tmp","w") it := 1 while it <= numfields do { it +:= 1 } close(dbg_out) } return end procedure init() dbg_flag := 0 numfields := 152 item_cnt := 0 first := 1 item_name := [ "yr (PO) ", # 1 "mo (PO) ", # 2 "wgt (PO) ", # 3 "wgt_cnt (PO) ", # 4 "glu_avg (PO) ", # 5 "glu_cnt (PO) ", # 6 "glu_02 (PO) ", # 7 "cnt_02 (PO) ", # 8 "glu_04 (PO) ", # 9 "cnt_04 (PO) ", # 10 "glu_06 (PO) ", # 11 "cnt_06 (PO) ", # 12 "glu_08 (PO) ", # 13 "cnt_08 (PO) ", # 14 "glu_10 (PO) ", # 15 "cnt_10 (PO) ", # 16 "glu_12 (PO) ", # 17 "cnt_12 (PO) ", # 18 "glu_other (PO) ", # 19 "cnt_other (PO) ", # 20 "sys bp (PO) ", # 21 "dia bp (PO) ", # 22 "pulse (PO) ", # 23 "cnt_bp (PO) ", # 24 "bf (PO) ", # 25 "h2o (PO) ", # 26 "bone (PO) ", # 27 "bmi (PO) ", # 28 "cnt_bmi (PO) ", # 29 "cal (DP) ", # 30 "fat (DP) ", # 31 "sat (DP) ", # 32 "poly (DP) ", # 33 "mono (DP) ", # 34 "chol (DP) ", # 35 "sod (DP) ", # 36 "pot (DP) ", # 37 "carb (DP) ", # 38 "fib (DP) ", # 39 "sugar (DP) ", # 40 "prot (DP) ", # 41 "water (DP) ", # 42 "first_sleep (PO) ", # 43 "second_sleep (PO) ", # 44 "second_occurs (PO) ", # 45 "total_sleep (PO) ", # 46 "days (PO) ", # 47 "days_extra (PO) ", # 48 "days_none (PO) ", # 49 "miles_walk (PO) ", # 50 "minutes_lamp (PO) ", # 51 "min_yoga (PO) ", # 52 "neck_perc (PO) ", # 53 "stretch_perc (PO) ", # 54 "jg (PO) ", # 55 "massheat (PO) ", # 56 "massvib (PO) ", # 57 "to_sleep_time (PO) ", # 58 "chronotype (PO) ", # 59 "fast (LA) ", # 60 "a1c (LA) ", # 61 "sodium (LA) ", # 62 "potassium (LA) ", # 63 "chloride (LA) ", # 64 "carbon_dioxide (LA) ", # 65 "bun (LA) ", # 66 "creatnine (LA) ", # 67 "gfr (LA) ", # 68 "ast (LA) ", # 69 "alt (LA) ", # 70 "bilirubin_tot (LA) ", # 71 "alk_phosphatase (LA) ", # 72 "protein_total (LA) ", # 73 "albumin (LA) ", # 74 "calcium (LA) ", # 75 "glucose (LA) ", # 76 "triglycerides (LA) ", # 77 "cholesterol (LA) ", # 78 "hdl (LA) ", # 79 "ldl (LA) ", # 80 "ldl_hdl_ratio (LA) ", # 81 "chol_hdl_ratio (LA) ", # 82 "alb_creat_ratio (LA) ", # 83 "psa (LA) ", # 84 "ammonia (LA) ", # 85 "agap (LA) ", # 86 "TIME (mo) (LA) ", # 87 "bms (PO) ", # 88 "bm_angle (PO) ", # 89 "bm_sz (PO) ", # 90 "D yr (PO) ", # 91 "D mo (PO) ", # 92 "D wgt (PO) ", # 93 "D wgt_cnt (PO) ", # 94 "D glu_avg (PO) ", # 95 "D glu_cnt (PO) ", # 96 "D glu_02 (PO) ", # 97 "D cnt_02 (PO) ", # 98 "D glu_04 (PO) ", # 99 "D cnt_04 (PO) ", # 100 "D glu_06 (PO) ", # 101 "D cnt_06 (PO) ", # 102 "D glu_08 (PO) ", # 103 "D cnt_08 (PO) ", # 104 "D glu_10 (PO) ", # 105 "D cnt_10 (PO) ", # 106 "D glu_12 (PO) ", # 107 "D cnt_12 (PO) ", # 108 "D glu_other (PO) ", # 109 "D cnt_other (PO) ", # 110 "D sys bp (PO) ", # 111 "D dia bp (PO) ", # 112 "D pulse (PO) ", # 113 "D cnt_bp (PO) ", # 114 "D bf (PO) ", # 115 "D h2o (PO) ", # 116 "D bone (PO) ", # 117 "D bmi (PO) ", # 118 "D cnt_bmi (PO) ", # 119 "D cal (DP) ", # 120 "D fat (DP) ", # 121 "D sat (DP) ", # 122 "D poly (DP) ", # 123 "D mono (DP) ", # 124 "D chol (DP) ", # 125 "D sod (DP) ", # 126 "D pot (DP) ", # 127 "D carb (DP) ", # 128 "D fib (DP) ", # 129 "D sugar (DP) ", # 130 "D prot (DP) ", # 131 "D water (DP) ", # 132 "D first_sleep (PO) ", # 133 "D second_sleep (PO) ", # 134 "D second_occurs (PO) ", # 135 "D total_sleep (PO) ", # 136 "D days (PO) ", # 137 "D days_extra (PO) ", # 138 "D days_none (PO) ", # 139 "D miles_walk (PO) ", # 140 "D minutes_lamp (PO) ", # 141 "D min_yoga (PO) ", # 142 "D neck_perc (PO) ", # 143 "D stretch_perc (PO) ", # 144 "D jg (PO) ", # 145 "D massheat (PO) ", # 146 "D massvib (PO) ", # 147 "D to_sleep_time (PO) ", # 148 "D chronotype (PO) ", # 149 "D bms (PO) ", # 150 "D bm_angle (PO) ", # 151 "D bm_sz (PO) " # 152 ] item_flag := [ 0, # "yr (PO) ", # 1 0, # "mo (PO) ", # 2 1, # "wgt (PO) ", # 3 0, # "wgt_cnt (PO) ", # 4 1, # "glu_avg (PO) ", # 5 0, # "glu_cnt (PO) ", # 6 1, # "glu_02 (PO) ", # 7 0, # "cnt_02 (PO) ", # 8 1, # "glu_04 (PO) ", # 9 0, # "cnt_04 (PO) ", # 10 1, # "glu_06 (PO) ", # 11 0, # "cnt_06 (PO) ", # 12 1, # "glu_08 (PO) ", # 13 0, # "cnt_08 (PO) ", # 14 1, # "glu_10 (PO) ", # 15 0, # "cnt_10 (PO) ", # 16 1, # "glu_12 (PO) ", # 17 0, # "cnt_12 (PO) ", # 18 1, # "glu_other (PO) ", # 19 0, # "cnt_other (PO) ", # 20 1, # "sys bp (PO) ", # 21 1, # "dia bp (PO) ", # 22 1, # "pulse (PO) ", # 23 0, # "cnt_bp (PO) ", # 24 1, # "bf (PO) ", # 25 1, # "h2o (PO) ", # 26 1, # "bone (PO) ", # 27 1, # "bmi (PO) ", # 28 0, # "cnt_bmi (PO) ", # 29 1, # "cal (DP) ", # 30 1, # "fat (DP) ", # 31 1, # "sat (DP) ", # 32 0, # "poly (DP) ", # 33 0, # "mono (DP) ", # 34 1, # "chol (DP) ", # 35 1, # "sod (DP) ", # 36 0, # "pot (DP) ", # 37 1, # "carb (DP) ", # 38 1, # "fib (DP) ", # 39 1, # "sugar (DP) ", # 40 1, # "prot (DP) ", # 41 0, # "water (DP) ", # 42 1, # "first_sleep (PO) ", # 43 1, # "second_sleep (PO) ", # 44 1, # "second_occurs (PO) ", # 45 1, # "total_sleep (PO) ", # 46 1, # "days (PO) ", # 47 1, # "days_extra (PO) ", # 48 1, # "days_none (PO) ", # 49 1, # "miles_walk (PO) ", # 50 0, # "minutes_lamp (PO) ", # 51 0, # "min_yoga (PO) ", # 52 1, # "neck_perc (PO) ", # 53 0, # "stretch_perc (PO) ", # 54 0, # "jg (PO) ", # 55 0, # "massheat (PO) ", # 56 0, # "massvib (PO) ", # 57 1, # "to_sleep_time (PO) ", # 58 1, # "chronotype (PO) ", # 59 1, # "fast (LA) ", # 60 1, # "a1c (LA) ", # 61 1, # "sodium (LA) ", # 62 1, # "potassium (LA) ", # 63 1, # "chloride (LA) ", # 64 1, # "carbon_dioxide (LA) ", # 65 1, # "bun (LA) ", # 66 1, # "creatnine (LA) ", # 67 1, # "gfr (LA) ", # 68 1, # "ast (LA) ", # 69 1, # "alt (LA) ", # 70 1, # "bilirubin_tot (LA) ", # 71 1, # "alk_phosphatase (LA) ", # 72 1, # "protein_total (LA) ", # 73 1, # "albumin (LA) ", # 74 1, # "calcium (LA) ", # 75 1, # "glucose (LA) ", # 76 1, # "triglycerides (LA) ", # 77 1, # "cholesterol (LA) ", # 78 1, # "hdl (LA) ", # 79 1, # "ldl (LA) ", # 80 1, # "ldl_hdl_ratio (LA) ", # 81 1, # "chol_hdl_ratio (LA) ", # 82 1, # "alb_creat_ratio (LA) ", # 83 1, # "psa (LA) ", # 84 1, # "ammonia (LA) ", # 85 1, # "agap (LA) ", # 86 1, # "TIME (mo) (LA) ", # 87 1, # "bms (PO) ", # 88 1, # "bm_angle (PO) ", # 89 1, # "bm_sz (PO) ", # 90 0, # "D yr (PO) ", # 91 0, # "D mo (PO) ", # 92 1, # "D wgt (PO) ", # 93 0, # "D wgt_cnt (PO) ", # 94 1, # "D glu_avg (PO) ", # 95 0, # "D glu_cnt (PO) ", # 96 1, # "D glu_02 (PO) ", # 97 0, # "D cnt_02 (PO) ", # 98 1, # "D glu_04 (PO) ", # 99 0, # "D cnt_04 (PO) ", # 100 1, # "D glu_06 (PO) ", # 101 0, # "D cnt_06 (PO) ", # 102 1, # "D glu_08 (PO) ", # 103 0, # "D cnt_08 (PO) ", # 104 1, # "D glu_10 (PO) ", # 105 0, # "D cnt_10 (PO) ", # 106 1, # "D glu_12 (PO) ", # 107 0, # "D cnt_12 (PO) ", # 108 1, # "D glu_other (PO) ", # 109 0, # "D cnt_other (PO) ", # 110 1, # "D sys bp (PO) ", # 111 1, # "D dia bp (PO) ", # 112 1, # "D pulse (PO) ", # 112 0, # "D cnt_bp (PO) ", # 114 1, # "D bf (PO) ", # 115 1, # "D h2o (PO) ", # 116 1, # "D bone (PO) ", # 117 1, # "D bmi (PO) ", # 118 0, # "D cnt_bmi (PO) ", # 119 1, # "D cal (DP) ", # 120 1, # "D fat (DP) ", # 121 1, # "D sat (DP) ", # 122 0, # "D poly (DP) ", # 123 0, # "D mono (DP) ", # 124 1, # "D chol (DP) ", # 125 1, # "D sod (DP) ", # 126 0, # "D pot (DP) ", # 127 1, # "D carb (DP) ", # 128 1, # "D fib (DP) ", # 129 1, # "D sugar (DP) ", # 130 1, # "D prot (DP) ", # 131 0, # "D water (DP) ", # 132 1, # "D first_sleep (PO) ", # 133 1, # "D second_sleep (PO) ", # 134 1, # "D second_occurs (PO) ", # 135 1, # "D total_sleep (PO) ", # 136 1, # "D days (PO) ", # 137 1, # "D days_extra (PO) ", # 138 1, # "D days_none (PO) ", # 139 1, # "D miles_walk (PO) ", # 140 0, # "D minutes_lamp (PO) ", # 141 0, # "D min_yoga (PO) ", # 142 0, # "D neck_perc (PO) ", # 143 0, # "D stretch_perc (PO) ", # 144 0, # "D jg (PO) ", # 145 0, # "D massheat (PO) ", # 146 0, # "D massvib (PO) ", # 147 1, # "D to_sleep_time (PO) ", # 148 1, # "D chronotype (PO) ", # 149 1, # "D bms (PO) ", # 150 1, # "D bm_angle (PO) ", # 151 1 # "D bm_sz (PO) " # 152 ] flags1 := table(0) flags2 := table(0) return end procedure process_field2() if dbg_flag = 1 then write("DBG FIELD2 DDD -------------", field2, item_name[field2], " flag = ", item_flag[field2]) # see if field 1 should be processed if ((item_flag[field1] = 1) & (item_flag[field2] = 1)) then { # open files for field1 # in1 contains data # out1 for lines of maple program # out3 for determining min & max of accepted data later # open files for field2 # in2 contains data # out2 for lines of maple program # out4 for determining min & max of accepted data later process_part1() process_part2() process_part3() if item_cnt > 4 then { process_part4() } } return end procedure process_part1() local line1, line2, data1, data2 in1 := open("TMP/healthoutfield" || field1 || ".tmp","r") out1 := open("TMP/healthouttmp" || field1 || ".tmp","w") out3 := open("TMP/healthouttmpB" || field1 || ".tmp","w") in2 := open("TMP/healthoutfield" || field2 || ".tmp","r") out2 := open("TMP/healthouttmp" || field2 || ".tmp","w") out4 := open("TMP/healthouttmpB" || field2 || ".tmp","w") write(out1,"# item_name1 [",field1,"]",item_name[field1]) write(out1,"# item_name2 [",field2,"]",item_name[field2]) write(out1,"with(Statistics);") # for out1 only (maple) write(out1,"field1 := [") # for out1 (maple) write(out2,"field2 := [") # for out2 (maple) while (line1 := read(in1)) & (line2 := read(in2)) do { line1 ? { data1 := tab(many('-0123456789.')) } line2 ? { data2 := tab(many('-0123456789.')) } if (\data1 & \data2 & data1 > -9998.0) & (data2 > -9998.0) & (data1 < 99999.0) & (data2 < 99999.0) then { write(out1,data1) write(out3,data1) write(out2,data2) write(out4,data2) break } } while (line1 := read(in1)) & (line2 := read(in2)) do { line1 ? { data1 := tab(many('-0123456789.')) } line2 ? { data2 := tab(many('-0123456789.')) } if (data1 > -9998.0) & (data2 > -9998.0) & (data1 < 99999.0) & (data2 < 99999.0) then { write(out1,",") write(out2,",") if dbg_flag = 1 then write("DBG FIELD1 CCC -------------", field1, item_name[field1], " flag = ", item_flag[field1]) if dbg_flag = 1 then write("DBG FFFF line1 = ", line1) write(out1,data1) write(out3,data1) if dbg_flag = 1 then write("DBG GGGG line2 = ", line2) write(out2,data2) write(out4,data2) } } write(out1,"];") write(out2,"];") close(in1) close(in2) close(out1) close(out3) close(out4) return end procedure process_part2() local item1_min, item2_min, item1_max, item2_max, data1, data2, in3, in4 if dbg_flag = 1 then write("A0000001") item1_min := 99999.0 item1_max := -99990.0 item2_min := 99999.0 item2_max := -99999.0 if dbg_flag = 1 then write("A0000002") in3 := open("TMP/healthouttmpB" || field1 || ".tmp","r") if dbg_flag = 1 then write("A0000003") in4 := open("TMP/healthouttmpB" || field2 || ".tmp","r") item_cnt := 0 if dbg_flag = 1 then write("A0000003") while ((data1 := read(in3)) & (data2 := read(in4))) do { if dbg_flag = 1 then write("A0000004") if dbg_flag = 1 then write("DBG data1 ", data1) if dbg_flag = 1 then write("DBG data2 ", data2) if dbg_flag = 1 then write("A0000005") if (data1 > -9998.0 & data1 < 99999) & (data2 > -9998.0 & data2 < 99999) then { if dbg_flag = 1 then write("A0000006") if (data1 < item1_min) then item1_min := data1 if (data2 < item2_min) then item2_min := data2 if (data1 > item1_max) then item1_max := data1 if (data2 > item2_max) then item2_max := data2 item_cnt +:= 1 } if dbg_flag = 1 then write("A0000007") } if dbg_flag = 1 then write("A0000008") if dbg_flag = 1 then write("DBG data1 last", data1) if dbg_flag = 1 then write("DBG data2 last", data2) if dbg_flag = 1 then write("A0000009") write(out2,"item_corr := Correlation(field1,field2);") write(out2,"item_cnt := ", item_cnt,";") write(out2,"item_minA := ", left(item1_min,6), ";") write(out2,"item_maxA := ", left(item1_max,6), ";") write(out2,"item_minB := ", left(item2_min,6), ";") write(out2,"item_maxB := ", left(item2_max,6), ";") write(out2,"quit;") close(out2) close(in3) close(in4) if dbg_flag = 1 then write("A0000010") return end procedure process_part3() local line, out3, out3mame, in1, in2 in1 := open("TMP/healthouttmp" || field1 || ".tmp","r") in2 := open("TMP/healthouttmp" || field2 || ".tmp","r") out3name := "TMP/monthly_" || field1 || "_" || field2 || ".tmp" out3 := open(out3name,"w") while line := read(in1) do { write(out3,line) } while line := read(in2) do { write(out3,line) } close(in1) close(in2) close(out3) return end procedure process_part4() local out3name, cmd out3name := "TMP/monthly_" || field1 || "_" || field2 || ".tmp" write("maple " || out3name || " >TMP/monthlytmp.tmp") cmd := "maple " || out3name || " >TMP/monthlytmp.tmp" system(cmd) if first = 1 then { system("grep \"item_\" \"TMP/monthlytmp.tmp\" >monthly_corr2.txt") first := 0 } else system("grep \"item_\" \"TMP/monthlytmp.tmp\" >>monthly_corr2.txt") return end