Module:ClinVar
From SNPedia
Documentation for this module may be created at Module:ClinVar/doc
-- For unit tests, see [[Module:ClinVar/testcases]] local p = {} function smw_redlink(frame, key, value, form_name) local setpart, formpart setpart = frame:callParserFunction{ name = '#set:', args = { [key] = value } } formpart = frame:callParserFunction{ name = '#formredlink:', args = { target = value, form = form_name } } return setpart .. formpart end function string:split(sSeparator, nMax, bRegexp) assert(sSeparator ~= '') assert(nMax == nil or nMax >= 1) local aRecord = {} if self:len() > 0 then local bPlain = not bRegexp nMax = nMax or -1 local nField=1 nStart=1 local nFirst,nLast = self:find(sSeparator, nStart, bPlain) while nFirst and nMax ~= 0 do aRecord[nField] = self:sub(nStart, nFirst-1) nField = nField+1 nStart = nLast+1 nFirst,nLast = self:find(sSeparator, nStart, bPlain) nMax = nMax-1 end aRecord[nField] = self:sub(nStart) end return aRecord end function p.ClinVar(frame) local Risk = frame.args.Risk local FwdALT = frame.args.FwdALT local risk_geno if string.len(tostring(frame.args.Risk)) > 0 then risk_geno = frame.args.Risk else risk_geno = frame.args.FwdALT end local part1 part1 = [====[ <table style="width:25em; font-size: 90%%; border: 1px solid #aaaaaa; background-color: #f9f9f9; color: black; margin-bottom: 0.5em; margin-left: 1em; padding: 0.2em; float: right; clear: right; text-align:left;"> <tr> <th style="text-align: center; background-color:#ccccff;" colspan="2"><big>[[ClinVar]]</big> </th></tr> <tr> <th> Risk </th> <td>]====] local risk_geno_full, alt_geno_full, ref_geno_full local part1a, part1b, part1c, part1d, part1e, part1f part1a = '' part1c = '' for k,allele in next, string.split(tostring(risk_geno), ',') do risk_geno_full = string.format([====[rs%s(%s;%s)]====], tostring(frame.args.rsid), tostring(allele), tostring(allele) ) part1a = part1a .. smw_redlink(frame, 'RiskGeno', risk_geno_full, 'Genotype') .. ' ' end for k,allele in next, string.split(tostring(frame.args.FwdALT), ',') do alt_geno_full = string.format([====[rs%s(%s;%s)]====], tostring(frame.args.rsid), tostring(allele), tostring(allele) ) part1c = part1c .. smw_redlink(frame, 'AltGeno', alt_geno_full, 'Genotype') .. ' ' end ref_geno_full = string.format([====[rs%s(%s;%s)]====], tostring(frame.args.rsid), tostring(frame.args.FwdREF), tostring(frame.args.FwdREF) ) part1e = smw_redlink(frame, 'RefGeno', ref_geno_full, 'Genotype') part1b = [====[ </td></tr> <tr> <th> Alt </th> <td>]====] part1d = [====[ </td></tr> <tr> <th> Reference </th> <td> ]====] part1f = [====[ </td></tr> ]====] local CLNSIG CLNSIG = tostring(frame.args.CLNSIG) local part2 part2 = [====[ <tr> <th> Significance </th> <td> [[ClinVar CLNSIG::]====] .. CLNSIG .. '| ]] ' if CLNSIG == '5' then part2 = part2 .. 'Pathogenic' elseif CLNSIG == '4' then part2 = part2 .. 'Probable-Pathogenic' elseif CLNSIG == '3' then part2 = part2 .. 'Probable-non-pathogenic' elseif CLNSIG == '2' then part2 = part2 .. 'Non-pathogenic' elseif CLNSIG == '1' then part2 = part2 .. 'Untested' elseif CLNSIG == '7' then part2 = part2 .. 'Histocompatibility' elseif CLNSIG == '6' then part2 = part2 .. 'Drug-response' elseif CLNSIG == '255' then part2 = part2 .. 'Other' else part2 = part2 .. 'Unknown' end part2 = part2 .. [====[ </td></tr> ]====] local part3 part3 = [====[ <tr> <th> Disease </th> <td> ]====] for adisease in string.gmatch(frame.args.Disease, '([^;]+)') do part3 = part3 .. smw_redlink(frame, 'ClinVar Disease', adisease, 'ClinVar Disease') .. ' ' end part3 = part3 .. [====[ </td> </tr> ]====] --[=[ local varvu varvu = '<tr><th> varvu </th><td>' for gene in string.gmatch(frame.args.GENE_ID, '([^;]+)') do varvu = varvu .. ' [http://www.ncbi.nlm.nih.gov/sites/varvu?gene=' .. gene .. '&rs=' .. tostring(frame.args.rsid) .. ' info] ' end varvu = varvu .. '</td></tr>' ]=] local varvu2 varvu2 = '<tr><th> Variation </th><td>' .. ' [http://www.ncbi.nlm.nih.gov/variation/view/?q=rs' .. tostring(frame.args.rsid) .. ' info] ' .. '</td></tr>' local out1 out1 = part1 .. part1a .. part1b .. part1c .. part1d .. part1e .. part1f -- formpart = frame:callParserFunction{ name = '#formredlink:', args = { -- target = adisease, -- form = 'ClinVar Disease' -- } } local part5 part5 = [====[ <tr> <th> Gene </th> <td> ]====] for gene in string.gmatch(frame.args.GENE_NAME, '([^;]+)') do part5 = part5 .. smw_redlink(frame, 'in gene', gene, 'Gene') .. ' ' end part5 = part5 .. [====[ </td> </tr> ]====] part5 = part5 .. [====[ <tr> <th> CLNDBN </th> <td> ]====] for adisease in string.gmatch(frame.args.CLNDBN, '([^;]+)') do part5 = part5 .. ' [[ClinVar CLNDBN::' .. adisease .. ']] ' end part5 = part5 .. [====[ </td> </tr> ]====] part5 = part5 .. [====[ <tr> <th> Reversed </th> <td> ]====] part5 = part5 .. frame.args.Reversed .. [====[ </td> </tr> ]====] part5 = part5 .. [====[ <tr> <th> HGVS </th> <td> ]====] part5 = part5 .. ' [[ClinVar CLNHGVS::' .. tostring(frame.args.CLNHGVS) .. ']] ' part5 = part5 .. [====[ </td> </tr> ]====] part5 = part5 .. [====[ <tr> <th> CLNSRC </th> <td> ]====] for adisease in string.gmatch(frame.args.CLNSRC, '([^;]+)') do part5 = part5 .. ' [[ClinVar CLNSRC::' .. adisease .. ']] ' end part5 = part5 .. [====[ </td> </tr> ]====] part5 = part5 .. [====[ <tr> <th> CLNACC </th> <td> ]====] for k,adisease in next, string.split(frame.args.CLNACC, '; ') do part5 = part5 .. '[[ClinVar CLNACC::' .. adisease .. '| ]][http://www.ncbi.nlm.nih.gov/clinvar/' .. adisease .. ' ' .. adisease .. '], ' end part5 = part5 .. [====[ </td> </tr> ]====] local out out = out1 .. part2 .. part3 .. varvu2 .. part5 .. '</table>' return out end return p