Skip to content

Commit f3bd421

Browse files
authored
Merge branch 'main' into 137-feature-bring-rtd-page-up-to-date
2 parents 9e9461e + ba9ef14 commit f3bd421

File tree

8 files changed

+194
-321
lines changed

8 files changed

+194
-321
lines changed

brainles_preprocessing/modality.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from typing import Dict, Optional, Union
66

77
from auxiliary.io import read_image, write_image
8+
from loguru import logger
89

910
from brainles_preprocessing.brain_extraction.brain_extractor import BrainExtractor
1011
from brainles_preprocessing.constants import Atlas, PreprocessorSteps
@@ -17,8 +18,6 @@
1718
from brainles_preprocessing.registration.registrator import Registrator
1819
from brainles_preprocessing.utils.zenodo import verify_or_download_atlases
1920

20-
logger = logging.getLogger(__name__)
21-
2221

2322
class Modality:
2423
"""

brainles_preprocessing/preprocessor/atlas_centric_preprocessor.py

Lines changed: 89 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,17 @@
22
from pathlib import Path
33
from typing import List, Optional, Union
44

5+
from loguru import logger
6+
57
from brainles_preprocessing.brain_extraction.brain_extractor import BrainExtractor
68
from brainles_preprocessing.constants import Atlas, PreprocessorSteps
79
from brainles_preprocessing.defacing import Defacer, QuickshearDefacer
810
from brainles_preprocessing.modality import CenterModality, Modality
911
from brainles_preprocessing.n4_bias_correction import N4BiasCorrector
1012
from brainles_preprocessing.preprocessor.preprocessor import BasePreprocessor
1113
from brainles_preprocessing.registration.registrator import Registrator
12-
from brainles_preprocessing.utils.logging_utils import LoggingManager
1314
from brainles_preprocessing.utils.zenodo import verify_or_download_atlases
1415

15-
logging_man = LoggingManager(name=__name__)
16-
logger = logging_man.get_logger()
17-
1816

1917
class AtlasCentricPreprocessor(BasePreprocessor):
2018
"""
@@ -101,97 +99,102 @@ def run(
10199
Results are saved in the specified directories, allowing for modular and configurable output storage.
102100
"""
103101

104-
logging_man._set_log_file(log_file)
105-
logger.info(f"{' Starting preprocessing ':=^80}")
106-
logger.info(f"Logs are saved to {logging_man.log_file_handler.baseFilename}")
107-
modality_names = ", ".join(
108-
[modality.modality_name for modality in self.moving_modalities]
109-
)
110-
logger.info(
111-
f"Received center modality: {self.center_modality.modality_name} "
112-
f"and moving modalities: {modality_names}"
113-
)
114-
115-
# Co-register moving modalities to center modality
116-
logger.info(f"{' Starting Coregistration ':-^80}")
117-
self.run_coregistration(
118-
save_dir_coregistration=save_dir_coregistration,
119-
)
120-
logger.info(
121-
f"Coregistration complete. Output saved to {save_dir_coregistration}"
122-
)
123-
124-
# Register center modality to atlas
125-
logger.info(f"{' Starting atlas registration ':-^80}")
126-
self.run_atlas_registration(
127-
save_dir_atlas_registration=save_dir_atlas_registration,
128-
)
129-
logger.info(
130-
f"Transformations complete. Output saved to {save_dir_atlas_registration}"
131-
)
102+
logger_id = self._add_log_file_handler(log_file)
103+
try:
104+
logger.info(f"{' Starting preprocessing ':=^80}")
105+
modality_names = ", ".join(
106+
[modality.modality_name for modality in self.moving_modalities]
107+
)
108+
logger.info(
109+
f"Received center modality: {self.center_modality.modality_name} "
110+
f"and moving modalities: {modality_names}"
111+
)
132112

133-
# Optional: additional correction in atlas space
134-
logger.info(f"{' Checking optional atlas correction ':-^80}")
135-
self.run_atlas_correction(
136-
save_dir_atlas_correction=save_dir_atlas_correction,
137-
)
113+
# Co-register moving modalities to center modality
114+
logger.info(f"{' Starting Coregistration ':-^80}")
115+
self.run_coregistration(
116+
save_dir_coregistration=save_dir_coregistration,
117+
)
118+
logger.info(
119+
f"Coregistration complete. Output saved to {save_dir_coregistration}"
120+
)
138121

139-
# Optional: N4 bias correction
140-
logger.info(f"{' Checking optional N4 bias correction ':-^80}")
141-
self.run_n4_bias_correction(
142-
save_dir_n4_bias_correction=save_dir_n4_bias_correction,
143-
)
122+
# Register center modality to atlas
123+
logger.info(f"{' Starting atlas registration ':-^80}")
124+
self.run_atlas_registration(
125+
save_dir_atlas_registration=save_dir_atlas_registration,
126+
)
127+
logger.info(
128+
f"Transformations complete. Output saved to {save_dir_atlas_registration}"
129+
)
144130

145-
# Now we save images that are not skullstripped (current image = atlas registered or atlas registered + corrected)
146-
logger.info("Saving non skull-stripped images...")
147-
for modality in self.all_modalities:
148-
if modality.raw_skull_output_path:
149-
modality.save_current_image(
150-
modality.raw_skull_output_path,
151-
normalization=False,
152-
)
153-
if modality.normalized_skull_output_path:
154-
modality.save_current_image(
155-
modality.normalized_skull_output_path,
156-
normalization=True,
157-
)
131+
# Optional: additional correction in atlas space
132+
logger.info(f"{' Checking optional atlas correction ':-^80}")
133+
self.run_atlas_correction(
134+
save_dir_atlas_correction=save_dir_atlas_correction,
135+
)
158136

159-
# Optional: Brain extraction
160-
logger.info(f"{' Checking optional brain extraction ':-^80}")
161-
self.run_brain_extraction(
162-
save_dir_brain_extraction=save_dir_brain_extraction,
163-
)
137+
# Optional: N4 bias correction
138+
logger.info(f"{' Checking optional N4 bias correction ':-^80}")
139+
self.run_n4_bias_correction(
140+
save_dir_n4_bias_correction=save_dir_n4_bias_correction,
141+
)
164142

165-
# Defacing
166-
logger.info(f"{' Checking optional defacing ':-^80}")
167-
self.run_defacing(
168-
save_dir_defacing=save_dir_defacing,
169-
)
143+
# Now we save images that are not skullstripped (current image = atlas registered or atlas registered + corrected)
144+
logger.info("Saving non skull-stripped images...")
145+
for modality in self.all_modalities:
146+
if modality.raw_skull_output_path:
147+
modality.save_current_image(
148+
modality.raw_skull_output_path,
149+
normalization=False,
150+
)
151+
if modality.normalized_skull_output_path:
152+
modality.save_current_image(
153+
modality.normalized_skull_output_path,
154+
normalization=True,
155+
)
156+
157+
# Optional: Brain extraction
158+
logger.info(f"{' Checking optional brain extraction ':-^80}")
159+
self.run_brain_extraction(
160+
save_dir_brain_extraction=save_dir_brain_extraction,
161+
)
170162

171-
# move to separate method
172-
if save_dir_transformations:
173-
save_dir_transformations = Path(save_dir_transformations)
163+
# Defacing
164+
logger.info(f"{' Checking optional defacing ':-^80}")
165+
self.run_defacing(
166+
save_dir_defacing=save_dir_defacing,
167+
)
174168

175-
# Save transformation matrices
176-
logger.info(f"Saving transformation matrices to {save_dir_transformations}")
177-
for modality in self.all_modalities:
169+
# move to separate method
170+
if save_dir_transformations:
171+
save_dir_transformations = Path(save_dir_transformations)
178172

179-
modality_transformations_dir = (
180-
save_dir_transformations / modality.modality_name
173+
# Save transformation matrices
174+
logger.info(
175+
f"Saving transformation matrices to {save_dir_transformations}"
181176
)
182-
modality_transformations_dir.mkdir(exist_ok=True, parents=True)
183-
for step, path in modality.transformation_paths.items():
184-
if path is not None:
185-
shutil.copyfile(
186-
src=str(path.absolute()),
187-
dst=str(
188-
modality_transformations_dir
189-
/ f"{step.value}_{path.name}"
190-
),
191-
)
192-
193-
# End
194-
logger.info(f"{' Preprocessing complete ':=^80}")
177+
for modality in self.all_modalities:
178+
179+
modality_transformations_dir = (
180+
save_dir_transformations / modality.modality_name
181+
)
182+
modality_transformations_dir.mkdir(exist_ok=True, parents=True)
183+
for step, path in modality.transformation_paths.items():
184+
if path is not None:
185+
shutil.copyfile(
186+
src=str(path.absolute()),
187+
dst=str(
188+
modality_transformations_dir
189+
/ f"{step.value}_{path.name}"
190+
),
191+
)
192+
193+
# End
194+
logger.info(f"{' Preprocessing complete ':=^80}")
195+
finally:
196+
# Remove log file handler if it was added
197+
logger.remove(logger_id)
195198

196199
def run_atlas_registration(
197200
self, save_dir_atlas_registration: Optional[Union[str, Path]] = None

brainles_preprocessing/preprocessor/native_space_preprocessor.py

Lines changed: 75 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,10 @@
22
from pathlib import Path
33
from typing import Optional, Union
44

5+
from loguru import logger
6+
57
from brainles_preprocessing.defacing import QuickshearDefacer
68
from brainles_preprocessing.preprocessor.preprocessor import BasePreprocessor
7-
from brainles_preprocessing.utils.logging_utils import LoggingManager
8-
9-
logging_man = LoggingManager(name=__name__)
10-
logger = logging_man.get_logger()
119

1210

1311
class NativeSpacePreprocessor(BasePreprocessor):
@@ -57,81 +55,85 @@ def run(
5755
Results are saved in the specified directories, allowing for modular and configurable output storage.
5856
"""
5957

60-
logging_man._set_log_file(log_file)
61-
logger.info(f"{' Starting preprocessing ':=^80}")
62-
logger.info(f"Logs are saved to {logging_man.log_file_handler.baseFilename}")
63-
modality_names = ", ".join(
64-
[modality.modality_name for modality in self.moving_modalities]
65-
)
66-
logger.info(
67-
f"Received center modality: {self.center_modality.modality_name} "
68-
f"and moving modalities: {modality_names}"
69-
)
70-
71-
# Co-register moving modalities to center modality
72-
logger.info(f"{' Starting Coregistration ':-^80}")
73-
self.run_coregistration(
74-
save_dir_coregistration=save_dir_coregistration,
75-
)
76-
logger.info(
77-
f"Coregistration complete. Output saved to {save_dir_coregistration}"
78-
)
79-
# Optional: N4 bias correction
80-
logger.info(f"{' Checking optional N4 bias correction ':-^80}")
81-
self.run_n4_bias_correction(
82-
save_dir_n4_bias_correction=save_dir_n4_bias_correction,
83-
)
84-
85-
# Now we save images that are not skullstripped (current image = atlas registered or atlas registered + corrected)
86-
logger.info("Saving non skull-stripped images...")
87-
for modality in self.all_modalities:
88-
if modality.raw_skull_output_path:
89-
modality.save_current_image(
90-
modality.raw_skull_output_path,
91-
normalization=False,
92-
)
93-
if modality.normalized_skull_output_path:
94-
modality.save_current_image(
95-
modality.normalized_skull_output_path,
96-
normalization=True,
97-
)
58+
logger_id = self._add_log_file_handler(log_file)
59+
try:
60+
logger.info(f"{' Starting preprocessing ':=^80}")
61+
modality_names = ", ".join(
62+
[modality.modality_name for modality in self.moving_modalities]
63+
)
64+
logger.info(
65+
f"Received center modality: {self.center_modality.modality_name} "
66+
f"and moving modalities: {modality_names}"
67+
)
9868

99-
# Optional: Brain extraction
100-
logger.info(f"{' Checking optional brain extraction ':-^80}")
101-
self.run_brain_extraction(
102-
save_dir_brain_extraction=save_dir_brain_extraction,
103-
)
69+
# Co-register moving modalities to center modality
70+
logger.info(f"{' Starting Coregistration ':-^80}")
71+
self.run_coregistration(
72+
save_dir_coregistration=save_dir_coregistration,
73+
)
74+
logger.info(
75+
f"Coregistration complete. Output saved to {save_dir_coregistration}"
76+
)
77+
# Optional: N4 bias correction
78+
logger.info(f"{' Checking optional N4 bias correction ':-^80}")
79+
self.run_n4_bias_correction(
80+
save_dir_n4_bias_correction=save_dir_n4_bias_correction,
81+
)
10482

105-
# Defacing
106-
logger.info(f"{' Checking optional defacing ':-^80}")
107-
self.run_defacing(
108-
save_dir_defacing=save_dir_defacing,
109-
)
83+
# Now we save images that are not skullstripped (current image = atlas registered or atlas registered + corrected)
84+
logger.info("Saving non skull-stripped images...")
85+
for modality in self.all_modalities:
86+
if modality.raw_skull_output_path:
87+
modality.save_current_image(
88+
modality.raw_skull_output_path,
89+
normalization=False,
90+
)
91+
if modality.normalized_skull_output_path:
92+
modality.save_current_image(
93+
modality.normalized_skull_output_path,
94+
normalization=True,
95+
)
96+
97+
# Optional: Brain extraction
98+
logger.info(f"{' Checking optional brain extraction ':-^80}")
99+
self.run_brain_extraction(
100+
save_dir_brain_extraction=save_dir_brain_extraction,
101+
)
110102

111-
# move to separate method
112-
if save_dir_transformations:
113-
save_dir_transformations = Path(save_dir_transformations)
103+
# Defacing
104+
logger.info(f"{' Checking optional defacing ':-^80}")
105+
self.run_defacing(
106+
save_dir_defacing=save_dir_defacing,
107+
)
114108

115-
# Save transformation matrices
116-
logger.info(f"Saving transformation matrices to {save_dir_transformations}")
117-
for modality in self.all_modalities:
109+
# move to separate method
110+
if save_dir_transformations:
111+
save_dir_transformations = Path(save_dir_transformations)
118112

119-
modality_transformations_dir = (
120-
save_dir_transformations / modality.modality_name
113+
# Save transformation matrices
114+
logger.info(
115+
f"Saving transformation matrices to {save_dir_transformations}"
121116
)
122-
modality_transformations_dir.mkdir(exist_ok=True, parents=True)
123-
for step, path in modality.transformation_paths.items():
124-
if path is not None:
125-
shutil.copyfile(
126-
src=str(path.absolute()),
127-
dst=str(
128-
modality_transformations_dir
129-
/ f"{step.value}_{path.name}"
130-
),
131-
)
132-
133-
# End
134-
logger.info(f"{' Preprocessing complete ':=^80}")
117+
for modality in self.all_modalities:
118+
119+
modality_transformations_dir = (
120+
save_dir_transformations / modality.modality_name
121+
)
122+
modality_transformations_dir.mkdir(exist_ok=True, parents=True)
123+
for step, path in modality.transformation_paths.items():
124+
if path is not None:
125+
shutil.copyfile(
126+
src=str(path.absolute()),
127+
dst=str(
128+
modality_transformations_dir
129+
/ f"{step.value}_{path.name}"
130+
),
131+
)
132+
133+
# End
134+
logger.info(f"{' Preprocessing complete ':=^80}")
135+
finally:
136+
logger.remove(logger_id)
135137

136138
def run_defacing(
137139
self, save_dir_defacing: Optional[Union[str, Path]] = None

0 commit comments

Comments
 (0)