Module:LBGA
Documentation for this module may be created at Module:LBGA/doc
local getArgs = require('Module:Arguments').getArgs;
local defArgs = require('Module:Arguments').defaultArgs;
local lbga = {};
function lbga.RegisteredSpecies( frame )
local args = defArgs(getArgs(frame), 1, "");
local arg = args[1];
isIn = {} T = {}
for ref, sp, id in arg:gmatch("&?&?([%w\. ]+)&&([%w]+)[%w\., ]*&&([^\n]+)") do
if (isIn[sp] == nil) then isIn[sp] = true table.insert(T, sp) end
end
table.sort(T)
s = ""
for i,v in pairs(T) do
s = s .. "{{#volatile:ListMolByReference|" .. v .. "|" .. v .. "}} "
end
return frame:preprocess(s)
end
local function createBucket()
return { {A={},C={} },{ N={},I={} },{ G={},X={} } }
end
local function printRow(name, T, reg)
local r;
if (string.find(name, "cenarchaea") ~= nil)
then r = '\n&- align="right" style="background-color:#fa3"';
elseif (string.find(name, "halobacter") ~= nil)
then r = '\n&- align="right" style="background-color:#ddf"';
elseif (string.find(name, "methano") == nil)
then r = '\n&- align="right" style="background-color:#fdd"';
else
r = '\n&- align="right"';
end
if (string.find(name, "cenarchaeales") ~= nil)
then r = r .. '\n! rowspan="1" style="background-color:#ddd" & <b>thaumarchaeota</b>'; end
if (string.find(name, "desulfurococcales") ~= nil)
then r = r .. '\n! rowspan="3" style="background-color:#ddd" & <b>crenarchaeota</b>'; end
if (string.find(name, "thermococcales") ~= nil)
then r = r .. '\n! rowspan="8" style="background-color:#ddd" & <b>euryarchaeota</b>'; end
r = r .. "\n& {{#volatile:ListMolByReference|"..name.."|"..reg.."}} && ";
r = r .. table.getn(T[1]["A"]).."\n&&"..table.getn(T[1]["C"]).."\n&&";
T[1]["A"] = nil;
T[1]["C"] = nil;
for k,v in pairs(T[1]) do
r = r .. k.."("..table.getn(v)..") ";
end
r = r .. " && ";
r = r .. table.getn(T[2]["N"]).."\n&&"..table.getn(T[2]["I"]).."\n&&";
T[2]["N"] = nil;
T[2]["I"] = nil;
for k,v in pairs(T[2]) do
r = r .. k.."("..table.getn(v)..") ";
end
r = r .. " && ";
r = r .. table.getn(T[3]["G"]).."\n&&"..table.getn(T[3]["X"]).."\n&&";
T[3]["G"] = nil;
T[3]["X"] = nil;
for k,v in pairs(T[3]) do
r = r .. k.."("..table.getn(v)..") ";
end
return r;
end
local function addTable(T, id)
exist = false
for k,v in pairs(T) do if (id == v) then exist = true end end
if (not exist) then table.insert(T, id) end
end
local function register(T, id)
local s = string.sub(id,5,5)
if (T[1][s] == nil) then T[1][s] = {} end addTable(T[1][s], id)
s = string.sub(id,6,6)
if (T[2][s] == nil) then T[2][s] = {} end addTable(T[2][s], id)
s = string.sub(id,8,8)
if (T[3][s] == nil) then T[3][s] = {} end addTable(T[3][s], id)
end
function lbga.Species2Structure_Relationship( frame )
local args = defArgs(getArgs(frame), 1, "");
local arg = args[1];
local r = "";
cenarchaeales = createBucket()
desulfurococcales = createBucket()
sulfolobales = createBucket()
thermoproteales = createBucket()
thermococcales = createBucket()
thermoplasmatales = createBucket()
halobacteriales = createBucket()
methanobacteriales = createBucket()
methanococcales = createBucket()
methanomicrobiales = createBucket()
methanopyrales = createBucket()
methanosarcinales = createBucket()
for ref, sp, id in arg:gmatch("&?&?([%w\. ]+)&&([%w]+)[%w\., ]+&&([^\n]+)") do
if (string.match(sp,"Cenarchaeum") or string.find(sp,"Nitroso") or string.match(sp,"Giganthauma"))
then register(cenarchaeales, id)
elseif (string.match(sp,"Aeropyrum") or string.match(sp,"Desulfurococcus") or string.match(sp,"Pyrolobus"))
then register(desulfurococcales, id)
elseif (string.match(sp,"Acidianus") or string.match(sp,"Sulfolobus") or string.match(sp,"Desulfurolobus"))
then register(sulfolobales, id)
elseif (string.match(sp,"Pyrobaculum") or string.match(sp,"Thermoproteus"))
then register(thermoproteales, id)
elseif (string.match(sp,"Pyrococcus") or string.match(sp,"Thermococcus"))
then register(thermococcales, id)
elseif (string.match(sp,"Thermoplasma"))
then register(thermoplasmatales, id)
elseif (string.match(sp,"Haloarcula") or string.match(sp,"Halobacterium") or string.match(sp,"Halococcus") or string.match(sp,"Haloferax") or string.match(sp,"Halorubrum") or string.match(sp,"Natrialba") or string.match(sp,"Natronobacterium") or string.match(sp,"Natronococcus") or string.match(sp,"Halarchaeum"))
then register(halobacteriales, id)
elseif (string.match(sp,"Methanothermobacter") or string.match(sp,"Methanobrevibacter") or string.match(sp,"Methanosphaera") or string.match(sp,"Methanothermobacter"))
then register(methanobacteriales, id)
elseif (string.match(sp,"Methanothermococcus") or string.match(sp,"Methanococcus") or string.match(sp,"Methanocaldococcus"))
then register(methanococcales, id)
elseif (string.match(sp,"Methanomicrobium") or string.match(sp,"Methanospirillum"))
then register(methanomicrobiales, id)
elseif (string.match(sp,"Methanopyrus"))
then register(methanopyrales, id)
elseif (string.match(sp,"Methanococcoides") or string.match(sp,"Methanohalophilus") or string.match(sp,"Methanolobus") or string.match(sp,"Methanosarcina"))
then register(methanosarcinales, id)
end
end
r = r .. printRow("cenarchaeales", cenarchaeales, "Cenarchaeum~Nitroso~Giganthauma")
r = r .. printRow("desulfurococcales", desulfurococcales, "Aeropyrum~Desulfurococcus~Pyrolobus")
r = r .. printRow("sulfolobales",sulfolobales, "Acidianus~Sulfolobus~Desulfurolobus")
r = r .. printRow("thermoproteales",thermoproteales, "Pyrobaculum~Thermoproteus")
r = r .. printRow("thermococcales",thermococcales, "Pyrococcus~Thermococcus")
r = r .. printRow("thermoplasmatales",thermoplasmatales, "Thermoplasma")
r = r .. printRow("halobacteriales",halobacteriales, "Haloarcula~Halobacterium~Halococcus~Haloferax~Halorubrum~Natrialba~Natronobacterium~Natronococcus~Halarchaeum")
r = r .. printRow("methanobacteriales",methanobacteriales, "Methanothermobacter~Methanobrevibacter~Methanosphaera")
r = r .. printRow("methanococcales",methanococcales, "Methanothermococcus~Methanococcus~Methanocaldococcus")
r = r .. printRow("methanomicrobiales",methanomicrobiales, "Methanomicrobium~Methanospirillum")
r = r .. printRow("methanopyrales",methanopyrales, "Methanopyrus")
r = r .. printRow("methanosarcinales",methanosarcinales, "Methanococcoides~Methanohalophilus~Methanolobus~Methanosarcina")
return frame:preprocess(r);
end
local function createTable(T, title, Tp, Ts)
local text = '==' .. title .. '==\n{& class="wikitable sortable"\n! ID && Polar group<br/><small>Gro: glycerol </small> && Sugar group<br/><small>Glc: glucose Gul: gulose</small>'
for k,v in ipairs(T) do
s = "\n&-\n& [[" .. v .. "]] && "
if (Tp[v] ~= nil) then s = s .. Tp[v] end
s = s .. " && "
if (Ts[v] ~= nil) then s = s .. Ts[v] end
text = text .. s
end
text = text .. "\n&}\n"
return text
end
function lbga.GroupTable( frame )
local args = defArgs(getArgs(frame), 1, "");
local arg = args[1];
local Tp = {}
local Ts = {}
local S0 = {}; S1 = {}; S2= {}; S3 = {}
local dup = {}
local text = ""
for id, group, seq in arg:gmatch("&&([^\n]+)|([%w]+)Group=([^\n]+)") do
if (string.match(group,"Polar")) then Tp[id] = seq end
if (string.match(group,"Sugar")) then Ts[id] = seq end
d = 0
for k,v in ipairs(dup) do
if (string.match(id, v)) then
d = 1
break
end
end
table.insert(dup, id)
if (d == 0) then
s = string.sub(id,7,7)
if (s == "0") then table.insert(S0, id)
elseif (s == "1") then table.insert(S1, id)
elseif (s == "2") then table.insert(S2, id)
else table.insert(S3, id) end
end
end
text = createTable(S0, "No Sugar", Tp, Ts)
text = text .. createTable(S1, "One Sugar <small>including inositol</small>", Tp, Ts)
text = text .. createTable(S2, "Two Sugars <small>including inositol</small>", Tp, Ts)
text = text .. createTable(S3, "Three or more <small>including inositol</small>", Tp, Ts)
return text
end
return lbga