Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --Define input folder
- local folder = [[D:\data\MPhys2019\PETCT-HN\SEM2\Nonrigid_inversewarp\]]; --Nonrigid registration scans are the input
- local output_folder = [[D:\data\MPhys2019\PETCT-HN\SEM2\Sensitivity\maximum_entity\]]; --Output folder
- --local file = io.open(output_folder.."print.txt","w")
- local function scandir(directory)
- local i, t, popen = 0, {}, io.popen
- for filename in popen('dir "'..directory..'" /o:n /b'):lines() do
- i = i + 1
- t[i] = filename
- end
- return t
- end
- local function has_item(tab, val) --Check is val in tab
- for index, value in ipairs(tab) do
- if value == val then
- return true
- end
- end
- return false
- end
- local t = scandir(folder);
- --Comment following line to cycle through packs - paste desired pack name otherwise:
- --t = {'263538649.pack'}
- local skip_these = {[[empty]]}
- fraction=1
- for k,patientpack in ipairs(t) do
- if string.find(patientpack, ".pack") then
- patientpack_new= patientpack:gsub(".pack","")
- skip_scan= false
- if has_item(skip_these, patientpack) then skip_scan= true end
- if skip_scan == false then
- loadpack( folder .. patientpack )
- skip= false
- if wm.Delineation.CTV1 == nil then
- skip = true
- --CTV_missing:write(patientpack_new.."\n")
- end
- if skip == false then
- mask= wm.Scan[1]:burn(wm.Delineation.CTV1)
- wm.Scan[9]= Scan:new()
- wm.Scan[9]= wm.Scan[1]:mask(mask)
- name= ("%s_scan%d_CTV_%s"):format(patientpack_new,1,"mask")
- mask:write_nifty(output_folder .. name ..".nii")
- name= ("%s_scan%d_CTV_%s"):format(patientpack_new,1,"original")
- wm.Scan[9]:write_nifty(output_folder .. name ..".nii")
- --wm.Scan[9]=mask
- cb = Clipbox:new()
- cb:fit(wm.Scan[9])
- local minx = cb.Coordinates:getvalue(0)
- local maxx = cb.Coordinates:getvalue(1)
- local miny = cb.Coordinates:getvalue(2)
- local maxy = cb.Coordinates:getvalue(3)
- local minz = cb.Coordinates:getvalue(4)
- local maxz = cb.Coordinates:getvalue(5)
- -- file.write(minx)
- --io.close(file)
- local deltax= 0.1*(maxx-minx) --Want to translate CTV by 10% of the diameter in x,y,z directions respectively
- local deltay= 0.1*(maxy-miny)
- local deltaz= 0.1*(maxz-minz)
- a=1
- --- First do x ---
- wm.Scan[9]= Scan:new()
- wm.Scan[9]= wm.Scan[1]
- --wm.Scan[8].Adjust:setvalue(3,0,-a)
- wm.Scan[9].Adjust:setvalue(3,0,-fraction*deltax)
- wm.Scan[9]=wm.Scan[9]:as(wm.Scan[1])
- wm.Scan[9]:mask(mask)
- name= ("%s_scan%d_CTV_%s"):format(patientpack_new,1,"x_minus")
- wm.Scan[9]:write_nifty(output_folder .. name ..".nii")
- wm.Scan[9]= Scan:new()
- wm.Scan[9]= wm.Scan[1]
- wm.Scan[9].Adjust:setvalue(3,0,fraction*deltax)
- wm.Scan[9]= wm.Scan[9]:as(wm.Scan[1])
- wm.Scan[9]:mask(mask)
- name= ("%s_scan%d_CTV_%s"):format(patientpack_new,1,"x_plus")
- wm.Scan[9]:write_nifty(output_folder .. name ..".nii")
- --- Now do y ---
- wm.Scan[9]= Scan:new()
- wm.Scan[9]= wm.Scan[1]
- wm.Scan[9].Adjust:setvalue(3,1,-fraction*deltay)
- wm.Scan[9]= wm.Scan[9]:as(wm.Scan[1])
- wm.Scan[9]:mask(mask)
- name= ("%s_scan%d_CTV_%s"):format(patientpack_new,1,"y_minus")
- wm.Scan[9]:write_nifty(output_folder .. name ..".nii")
- wm.Scan[9]= Scan:new()
- wm.Scan[9]= wm.Scan[1]
- wm.Scan[9].Adjust:setvalue(3,1,fraction*deltay)
- wm.Scan[9]= wm.Scan[9]:as(wm.Scan[1])
- wm.Scan[9]:mask(mask)
- name= ("%s_scan%d_CTV_%s"):format(patientpack_new,1,"y_plus")
- wm.Scan[9]:write_nifty(output_folder .. name ..".nii")
- -- Now do z ---
- wm.Scan[9]= Scan:new()
- wm.Scan[9]= wm.Scan[1]
- wm.Scan[9].Adjust:setvalue(3,2,-fraction*deltaz)
- wm.Scan[9]= wm.Scan[9]:as(wm.Scan[1])
- wm.Scan[9]:mask(mask)
- name= ("%s_scan%d_CTV_%s"):format(patientpack_new,1,"z_minus")
- wm.Scan[9]:write_nifty(output_folder .. name ..".nii")
- wm.Scan[9]= Scan:new()
- wm.Scan[9]= wm.Scan[1]
- wm.Scan[9].Adjust:setvalue(3,2,fraction*deltaz)
- wm.Scan[9]= wm.Scan[9]:as(wm.Scan[1])
- wm.Scan[9]:mask(mask)
- name= ("%s_scan%d_CTV_%s"):format(patientpack_new,1,"z_plus")
- wm.Scan[9]:write_nifty(output_folder .. name ..".nii")
- end
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement