code wiki / (root) / nx_taste_transduce_test.nx

nx_taste_transduce_test.nx source

↩ module page · 56 lines · 2364 B

1// nx_taste_transduce_test.nx -- smoke for nx_taste_transduce (T0). 2// 3// Proves real receptor transduction + the MEASURED EXCEED over a static/ 4// linear taste score: 5// - monotone dose-response, half-max at K (1-4) 6// - SATURATION: 8x stimulus -> < 2x perception (5), and far below the 7// linear prediction (6) -- the exceed a static score cannot make 8// - high-dose saturation toward Imax (7) 9// - THRESHOLD gating: sub-threshold registers 0 (8-9) 10// - 1000x sensitivity range: bitter detected where sweet is not (10-11) 11// - cooperative (h=2) half-max at K for bitter (12-13) 12// Exit code = failed assertion number; 0 = all pass. 13 14import "nx_syscalls.nx" 15import "nx_taste_transduce.nx" 16 17func main() -> i64 { 18 let sweet: *NxTasteReceptor = nx_taste_receptor(NX_TQ_SWEET) 19 let bitter: *NxTasteReceptor = nx_taste_receptor(NX_TQ_BITTER) 20 21 // --- monotone dose-response --- 22 if nx_taste_response_milli(sweet, 60000) <= nx_taste_response_milli(sweet, 30000) { return 1 } 23 if nx_taste_response_milli(sweet, 30000) <= nx_taste_response_milli(sweet, 10000) { return 2 } 24 25 // --- half-max at K = 30000 (h=1 -> Imax/2 = 500) --- 26 let rk: i64 = nx_taste_response_milli(sweet, 30000) 27 if rk < 490 { return 3 } 28 if rk > 510 { return 4 } 29 30 // --- SATURATION: 8x the stimulus (K -> 8K) gives < 2x perception --- 31 let r8: i64 = nx_taste_response_milli(sweet, 240000) 32 if r8 >= rk * 2 { return 5 } 33 34 // --- MEASURED EXCEED vs a linear/static score: a linear model would 35 // predict 8x the at-K response; Hill gives less than HALF of that --- 36 let lin_pred: i64 = rk * 8 37 if r8 >= lin_pred / 2 { return 6 } 38 39 // --- high dose saturates toward Imax (100x K) --- 40 if nx_taste_response_milli(sweet, 3000000) < 900 { return 7 } 41 42 // --- THRESHOLD gating: sub-threshold registers as not-detected --- 43 if nx_taste_detectable(sweet, 100) != 0 { return 8 } 44 if nx_taste_detectable(sweet, 10000) != 1 { return 9 } 45 46 // --- 1000x sensitivity range: bitter detected at 10 uM, sweet not --- 47 if nx_taste_detectable(bitter, 10) != 1 { return 10 } 48 if nx_taste_detectable(sweet, 10) != 0 { return 11 } 49 50 // --- cooperative receptor (h=2): half-max at K=25 -> 500 --- 51 let bk: i64 = nx_taste_response_milli(bitter, 25) 52 if bk < 490 { return 12 } 53 if bk > 510 { return 13 } 54 55 return 0 56}