Have questions? Visit https://www.reddit.com/r/SNPedia

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