Skip to content

Commit a9a5e53

Browse files
committed
fix propagation distance option
1 parent b98a49f commit a9a5e53

File tree

9 files changed

+38
-30
lines changed

9 files changed

+38
-30
lines changed

src/ptychodus/model/patterns/dataset.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,8 @@ def _load_arrays(self) -> None:
140140
processed_array = processor(task.array)
141141
except FileNotFoundError:
142142
logger.warning(f'File not found for array index={task.index}.')
143+
except OSError:
144+
logger.error(f'OS error while reading array index={task.index}.')
143145
except Exception:
144146
logger.exception(f'Error while loading array index={task.index}!')
145147
else:
@@ -273,7 +275,7 @@ def get_assembled_indexes(self) -> PatternIndexesType:
273275
def get_assembled_patterns(self) -> PatternDataType:
274276
return self._data[self._indexes >= 0]
275277

276-
def get_maximum_pattern_counts(self) -> int: # FIXME use
278+
def get_maximum_pattern_counts(self) -> int:
277279
patterns = self.get_assembled_patterns()
278280
good_pixels = numpy.logical_not(self.get_processed_bad_pixels())
279281
total_counts = numpy.sum(patterns[:, good_pixels], axis=-1)

src/ptychodus/model/product/item.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -76,11 +76,11 @@ def assignItem(self, item: ProductRepositoryItem, *, notify: bool = True) -> Non
7676
if notify:
7777
self._parent.handleCostsChanged(self)
7878

79-
def assign(self, product: Product) -> None:
79+
def assign(self, product: Product, *, mutable: bool = True) -> None:
8080
self._metadata.assign(product.metadata)
81-
self._scan.assign(product.scan)
82-
self._probe.assign(product.probe)
83-
self._object.assign(product.object_)
81+
self._scan.assign(product.scan, mutable=mutable)
82+
self._probe.assign(product.probe, mutable=mutable)
83+
self._object.assign(product.object_, mutable=mutable)
8484
self._costs = list(product.costs)
8585
self._parent.handleCostsChanged(self)
8686

src/ptychodus/model/product/object/item.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,9 @@ def assignItem(self, item: ObjectRepositoryItem) -> None:
3636
self.setBuilder(item.getBuilder().copy())
3737
self._rebuild()
3838

39-
def assign(self, object_: Object) -> None:
39+
def assign(self, object_: Object, *, mutable: bool = True) -> None:
4040
builder = FromMemoryObjectBuilder(self._settings, object_)
41-
self.setBuilder(builder)
41+
self.setBuilder(builder, mutable=mutable)
4242

4343
def syncToSettings(self) -> None:
4444
for parameter in self.parameters().values():
@@ -73,15 +73,15 @@ def getObject(self) -> Object:
7373
def getBuilder(self) -> ObjectBuilder:
7474
return self._builder
7575

76-
def setBuilder(self, builder: ObjectBuilder) -> None:
76+
def setBuilder(self, builder: ObjectBuilder, *, mutable: bool = True) -> None:
7777
self._removeGroup('builder')
7878
self._builder.removeObserver(self)
7979
self._builder = builder
8080
self._builder.addObserver(self)
8181
self._addGroup('builder', self._builder, observe=True)
82-
self._rebuild()
82+
self._rebuild(mutable=mutable)
8383

84-
def _rebuild(self) -> None:
84+
def _rebuild(self, *, mutable: bool = True) -> None:
8585
try:
8686
object_ = self._builder.build(
8787
self._geometryProvider, self.layerDistanceInMeters.getValue()
@@ -90,6 +90,7 @@ def _rebuild(self) -> None:
9090
logger.error(''.join(exc.args))
9191
return
9292

93+
# TODO mutable is unused
9394
self._object = object_
9495
self.layerDistanceInMeters.setValue(object_.layerDistanceInMeters)
9596
self.notifyObservers()

src/ptychodus/model/product/probe/item.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,9 @@ def assignItem(self, item: ProbeRepositoryItem) -> None:
4242
self.setBuilder(item.getBuilder().copy())
4343
self._rebuild()
4444

45-
def assign(self, probe: Probe) -> None:
45+
def assign(self, probe: Probe, *, mutable: bool = True) -> None:
4646
builder = FromMemoryProbeBuilder(self._settings, probe)
47-
self.setBuilder(builder)
47+
self.setBuilder(builder, mutable=mutable)
4848

4949
def syncToSettings(self) -> None:
5050
for parameter in self.parameters().values():
@@ -59,22 +59,24 @@ def getProbe(self) -> Probe:
5959
def getBuilder(self) -> ProbeBuilder:
6060
return self._builder
6161

62-
def setBuilder(self, builder: ProbeBuilder) -> None:
62+
def setBuilder(self, builder: ProbeBuilder, *, mutable: bool = True) -> None:
6363
self._removeGroup('builder')
6464
self._builder.removeObserver(self)
6565
self._builder = builder
6666
self._builder.addObserver(self)
6767
self._addGroup('builder', self._builder, observe=True)
68-
self._rebuild()
68+
self._rebuild(mutable=mutable)
6969

70-
def _rebuild(self) -> None:
70+
def _rebuild(self, *, mutable: bool = True) -> None:
7171
try:
7272
probe = self._builder.build(self._geometryProvider)
7373
except Exception as exc:
7474
logger.error(''.join(exc.args))
7575
return
7676

77-
self._probe = self._additionalModesBuilder.build(probe, self._geometryProvider)
77+
self._probe = (
78+
self._additionalModesBuilder.build(probe, self._geometryProvider) if mutable else probe
79+
)
7880
self.notifyObservers()
7981

8082
def getAdditionalModesBuilder(self) -> MultimodalProbeBuilder:

src/ptychodus/model/product/probe/multimodal.py

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -105,12 +105,6 @@ def _adjust_power(self, probe: WavefieldArrayType, power: float) -> WavefieldArr
105105
return array
106106

107107
def build(self, probe: Probe, geometryProvider: ProbeGeometryProvider) -> Probe:
108-
num_requested_modes = self.numberOfIncoherentModes.getValue()
109-
num_existing_modes = probe.numberOfIncoherentModes
110-
111-
if num_requested_modes <= num_existing_modes:
112-
return probe
113-
114108
array = self._init_modes(probe.getArray())
115109

116110
if self.orthogonalizeIncoherentModes.getValue():

src/ptychodus/model/product/scan/item.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,9 @@ def assignItem(self, item: ScanRepositoryItem) -> None:
7070

7171
self.setBuilder(item.getBuilder().copy())
7272

73-
def assign(self, scan: Scan) -> None:
73+
def assign(self, scan: Scan, *, mutable: bool = True) -> None:
7474
builder = FromMemoryScanBuilder(self._settings, scan)
75-
self.setBuilder(builder)
75+
self.setBuilder(builder, mutable=mutable)
7676

7777
def syncToSettings(self) -> None:
7878
for parameter in self.parameters().values():
@@ -87,13 +87,13 @@ def getScan(self) -> Scan:
8787
def getBuilder(self) -> ScanBuilder:
8888
return self._builder
8989

90-
def setBuilder(self, builder: ScanBuilder) -> None:
90+
def setBuilder(self, builder: ScanBuilder, *, mutable: bool = True) -> None:
9191
self._removeGroup('builder')
9292
self._builder.removeObserver(self)
9393
self._builder = builder
9494
self._builder.addObserver(self)
9595
self._addGroup('builder', self._builder)
96-
self._rebuild()
96+
self._rebuild(mutable=mutable)
9797

9898
def getBoundingBox(self) -> ScanBoundingBox | None:
9999
bbox = self._boundingBoxBuilder.getBoundingBox()
@@ -132,14 +132,14 @@ def _transformScan(self) -> None:
132132
self._lengthInMeters = lengthInMeters
133133
self.notifyObservers()
134134

135-
def _rebuild(self) -> None:
135+
def _rebuild(self, *, mutable: bool = True) -> None:
136136
try:
137137
scan = self._builder.build()
138138
except Exception as exc:
139139
logger.error(''.join(exc.args))
140140
else:
141141
self._untransformedScan = scan
142-
self._transformScan()
142+
self._transformScan() # FIXME mutable
143143

144144
def getTransform(self) -> ScanPointTransform:
145145
return self._transform

src/ptychodus/model/ptychi/helper.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -562,9 +562,14 @@ def __init__(
562562
def create_data_options(self, parameters: ReconstructInput) -> PtychographyDataOptions:
563563
metadata = parameters.product.metadata
564564
pixel_geometry = self._pattern_sizer.get_processed_pixel_geometry()
565+
free_space_propagation_distance_m = (
566+
numpy.inf
567+
if self._reconstructor_settings.useFarFieldPropagation
568+
else metadata.detectorDistanceInMeters
569+
)
565570
return PtychographyDataOptions(
566571
data=parameters.patterns,
567-
free_space_propagation_distance_m=metadata.detectorDistanceInMeters,
572+
free_space_propagation_distance_m=free_space_propagation_distance_m,
568573
wavelength_m=metadata.probeWavelengthInMeters,
569574
fft_shift=self._reconstructor_settings.fftShiftDiffractionPatterns.getValue(),
570575
detector_pixel_size_m=pixel_geometry.widthInMeters,

src/ptychodus/model/ptychi/settings.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ def __init__(self, registry: SettingsRegistry) -> None:
2222
'UseLowMemoryMode', False
2323
)
2424
self.padForShift = self._settingsGroup.createIntegerParameter('PadForShift', 0, minimum=0)
25+
26+
self.useFarFieldPropagation = self._settingsGroup.createBooleanParameter(
27+
'UseFarFieldPropagation', True
28+
)
2529
self.fftShiftDiffractionPatterns = self._settingsGroup.createBooleanParameter(
2630
'FFTShiftDiffractionPatterns', True
2731
)

src/ptychodus/model/reconstructor/queue.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ def __init__(self, result: ReconstructOutput, product: ProductRepositoryItem) ->
2727

2828
def execute(self) -> None:
2929
name = self._product.getName()
30-
self._product.assign(self._result.product)
30+
self._product.assign(self._result.product, mutable=False)
3131
self._product.setName(name)
3232

3333

0 commit comments

Comments
 (0)