-- Merges all intervals into a sorted list of unoverlapping intervals -- -- ps: this utility is similar to -im on GATK, but for queue scripts we need the intervals -- file fixed before we can run Unified Genotyper because of scatter-gather. -- -- Usage: -- lua MergeIntervals.lua raw.intervals > merged.intervals -- assert(table.getn(arg) > 0, "\n\nMissing input file\n\nUsage:\n\tlua MergeIntervals.lua raw.intervals > merged.intervals\n\n") local function comp(a, b) if tonumber(a) and tonumber(b) then return tonumber(a) < tonumber(b) end return a lastPositionRead do if (intervalStart < 0 or i ~= (intervalStart + intervalSize[c][intervalStart] + 1)) then intervalStart = i intervalSize[c][intervalStart] = 0 table.insert(intervalsIndex[c], intervalStart) else intervalSize[c][intervalStart] = intervalSize[c][intervalStart] + 1 end lastPositionRead = i i = i + 1 end end end table.sort(sortedChrs, comp) for _,c in pairs(sortedChrs) do table.sort(intervalsIndex[c]) for _,intervalStart in ipairs(intervalsIndex[c]) do if intervalSize[c][intervalStart] > 0 then print(c..":"..intervalStart.."-"..intervalStart + intervalSize[c][intervalStart]) end end end