Sandbox
From Metabolomics.JP
(Difference between revisions)
m |
m |
||
| Line 1: | Line 1: | ||
| + | {| class ="wikitable" | ||
{{#replace: | {{#replace: | ||
{{#lua: | {{#lua: | ||
| + | function atomicNum(atom, str) | ||
| + | if (str == "") then return 0; end | ||
| + | if (str == atom) then return 1; end | ||
| + | return tonumber(string.sub(str,2)); | ||
| + | end | ||
| + | |||
| + | function mass(str) | ||
| + | local c,h,n,o=string.match(str,"(C?[1-9]?[0-9]?)(H?[1-9]?[0-9]?)(N?[1-9]?[0-9]?)(O?[1-9]?[0-9]?)"); | ||
| + | c = atomicNum("C", c) * 12; | ||
| + | h = atomicNum("H", h); | ||
| + | n = atomicNum("N", n) * 14; | ||
| + | o = atomicNum("O", o) * 16; | ||
| + | return c + h + n + o; | ||
| + | end | ||
| + | |||
| + | function diff(str1, str2) | ||
| + | ---computes str1 - str2. If negative, returns nil.--- | ||
| + | local c1,h1,n1,o1=string.match(str1,"(C?[1-9]?[0-9]?)(H?[1-9]?[0-9]?)(N?[1-9]?[0-9]?)(O?[1-9]?[0-9]?)"); | ||
| + | local c2,h2,n2,o2=string.match(str2,"(C?[1-9]?[0-9]?)(H?[1-9]?[0-9]?)(N?[1-9]?[0-9]?)(O?[1-9]?[0-9]?)"); | ||
| + | c1 = atomicNum("C", c1); | ||
| + | h1 = atomicNum("H", h1); | ||
| + | n1 = atomicNum("N", n1); | ||
| + | o1 = atomicNum("O", o1); | ||
| + | c2 = atomicNum("C", c2); | ||
| + | h2 = atomicNum("H", h2); | ||
| + | n2 = atomicNum("N", n2); | ||
| + | o2 = atomicNum("O", o2); | ||
| + | if (c2 > c1) then return nil; else c1 = c1 - c2; end | ||
| + | if (h2 > h1) then return nil; else h1 = h1 - h2; end | ||
| + | if (n2 > n1) then return nil; else n1 = n1 - n2; end | ||
| + | if (o2 > o1) then return nil; else o1 = o1 - o2; end | ||
| + | local ret = ""; | ||
| + | if (c1 > 1) then ret = ret .. "C" .. c1; | ||
| + | else if (c1 == 1) then ret = ret .. "C"; end end | ||
| + | if (h1 > 1) then ret = ret .. "H" .. h1; | ||
| + | else if (h1 == 1) then ret = ret .. "H"; end end | ||
| + | if (n1 > 1) then ret = ret .. "N" .. n1; | ||
| + | else if (n1 == 1) then ret = ret .. "N"; end end | ||
| + | if (o1 > 1) then ret = ret .. "O" .. o1; | ||
| + | else if (o1 == 1) then ret = ret .. "O"; end end | ||
| + | return ret; | ||
| + | end | ||
| + | |||
local ruler = stdin:match("[%S ,]+"); | local ruler = stdin:match("[%S ,]+"); | ||
local axis = {}; | local axis = {}; | ||
| Line 9: | Line 53: | ||
end | end | ||
print("#-\n"); | print("#-\n"); | ||
| − | print("## sample"); | + | print("## sample \n"); |
for i=1, table.getn(axis) do | for i=1, table.getn(axis) do | ||
| − | print("## " .. axis[i]); | + | print("#style='text-align:right'# " .. mass(axis[i]) .. "<br/>" .. axis[i]); |
end | end | ||
| + | local s; | ||
for i=1, table.getn(axis) do | for i=1, table.getn(axis) do | ||
print("#-\n"); | print("#-\n"); | ||
| − | print("##" .. axis[i]); | + | print("#style='text-align:right'# " .. mass(axis[i]) .. "<br/>" .. axis[i]); |
for j=1, table.getn(axis) do | for j=1, table.getn(axis) do | ||
| − | |||
if (j < i) then | if (j < i) then | ||
| − | + | s = diff(axis[j],axis[i]); | |
| + | if (s == nil) then print('#style="background-color:gray"# '); | ||
| + | else print("## " .. s); | ||
| + | end | ||
| + | else print('#style="background-color:white"# '); | ||
end | end | ||
end | end | ||
| Line 27: | Line 75: | ||
}} | }} | ||
|#|{{#bar:}}}} | |#|{{#bar:}}}} | ||
| + | |} | ||
<!---- | <!---- | ||
Revision as of 11:25, 12 May 2009
| sample | 160 C7H14NO3 |
143 C7H11O3 |
114 C5H8NO2 |
102 C4H8NO2 |
97 C7H13 |
88 C4H10NO |
83 C6H11 |
79 C6H7 |
71 C4H7O |
69 C5H9 |
58 C3H8N |
55 C4H7 |
| 160 C7H14NO3 |
| |||||||||||
| 143 C7H11O3 |
H3N |
| ||||||||||
| 114 C5H8NO2 |
C2H6O |
| ||||||||||
| 102 C4H8NO2 |
C3H6O | C |
| |||||||||
| 97 C7H13 |
HNO3 |
| ||||||||||
| 88 C4H10NO |
C3H4O2 |
| ||||||||||
| 83 C6H11 |
CH3NO3 | CO3 | CH2 |
| ||||||||
| 79 C6H7 |
CH7NO3 | CH4O3 | CH6 | H4 |
| |||||||
| 71 C4H7O |
C3H7NO2 | C3H4O2 | CHNO | HNO | H3N |
| ||||||
| 69 C5H9 |
C2H5NO3 | C2H2O3 | C2H4 | CH2 |
| |||||||
| 58 C3H8N |
C4H6O3 | C2O2 | CO2 | CH2O |
| |||||||
| 55 C4H7 |
C3H7NO3 | C3H4O3 | CHNO2 | HNO2 | C3H6 | H3NO | C2H4 | C2 | O | CH2 |