Skip to content

Commit f079ba6

Browse files
authored
Merge pull request #731 from dyollb/build_template_cleanup
Build template: delete temporary files
2 parents 726931e + 9f23c11 commit f079ba6

File tree

1 file changed

+18
-5
lines changed

1 file changed

+18
-5
lines changed

ants/registration/build_template.py

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import numpy as np
44
import os
5+
import shutil
56
from tempfile import mktemp
67

78
import ants
@@ -14,6 +15,7 @@ def build_template(
1415
blending_weight=0.75,
1516
weights=None,
1617
useNoRigid=True,
18+
output_dir=None,
1719
**kwargs
1820
):
1921
"""
@@ -44,6 +46,10 @@ def build_template(
4446
useNoRigid : boolean
4547
equivalent of -y in the script. Template update
4648
step will not use the rigid component if this is True.
49+
50+
output_dir : path
51+
directory name where intermediate transforms are written
52+
4753
kwargs : keyword args
4854
extra arguments passed to ants registration
4955
@@ -60,6 +66,12 @@ def build_template(
6066
>>> timage = ants.build_template( image_list = ( image, image2, image3 ) ).resample_image( (45,45))
6167
>>> timagew = ants.build_template( image_list = ( image, image2, image3 ), weights = (5,1,1) )
6268
"""
69+
work_dir = mktemp() if output_dir is None else output_dir
70+
71+
def make_outprefix(k: int):
72+
os.makedirs(os.path.join(work_dir, f"img{k:04d}"), exist_ok=True)
73+
return os.path.join(work_dir, f"img{k:04d}", "out")
74+
6375
if "type_of_transform" not in kwargs:
6476
type_of_transform = "SyN"
6577
else:
@@ -80,7 +92,7 @@ def build_template(
8092
affinelist = []
8193
for k in range(len(image_list)):
8294
w1 = ants.registration(
83-
xavg, image_list[k], type_of_transform=type_of_transform, **kwargs
95+
xavg, image_list[k], type_of_transform=type_of_transform, outprefix=make_outprefix(k), **kwargs
8496
)
8597
L = len(w1["fwdtransforms"])
8698
# affine is the last one
@@ -99,7 +111,7 @@ def build_template(
99111
avgaffine = ants.average_affine_transform_no_rigid(affinelist)
100112
else:
101113
avgaffine = ants.average_affine_transform(affinelist)
102-
afffn = mktemp(suffix=".mat")
114+
afffn = os.path.join(work_dir, "avgAffine.mat")
103115
ants.write_transform(avgaffine, afffn)
104116

105117
if L == 2:
@@ -108,17 +120,18 @@ def build_template(
108120
wavg = wavg * wscl
109121
# apply affine to the nonlinear?
110122
# need to save the average
111-
wavgA = ants.apply_transforms(fixed = xavgNew, moving = wavg, imagetype=1, transformlist=afffn, whichtoinvert=[1])
112-
wavgfn = mktemp(suffix=".nii.gz")
123+
wavgA = ants.apply_transforms(fixed=xavgNew, moving=wavg, imagetype=1, transformlist=afffn, whichtoinvert=[1])
124+
wavgfn = os.path.join(work_dir, "avgWarp.nii.gz")
113125
ants.image_write(wavgA, wavgfn)
114126
xavg = ants.apply_transforms(fixed=xavgNew, moving=xavgNew, transformlist=[wavgfn, afffn], whichtoinvert=[0, 1])
115127
else:
116128
xavg = ants.apply_transforms(fixed=xavgNew, moving=xavgNew, transformlist=[afffn], whichtoinvert=[1])
117129

118-
os.remove(afffn)
119130
if blending_weight is not None:
120131
xavg = xavg * blending_weight + ants.iMath(xavg, "Sharpen") * (
121132
1.0 - blending_weight
122133
)
123134

135+
if output_dir is None:
136+
shutil.rmtree(work_dir)
124137
return xavg

0 commit comments

Comments
 (0)