Skip to content

Commit e778884

Browse files
committed
Fix frame mapping for sparse dimension organization
1 parent c605981 commit e778884

File tree

1 file changed

+22
-19
lines changed

1 file changed

+22
-19
lines changed

src/metadata.js

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -134,10 +134,10 @@ function getFrameMapping (metadata) {
134134
numberOfOpticalPaths = Number(metadata.NumberOfOpticalPaths || 1)
135135
numberOfChannels = numberOfOpticalPaths
136136
} else if (metadata.SegmentSequence != null) {
137-
numberOfSegments = metadata.SegmentSequence.length
137+
numberOfSegments = Number(metadata.SegmentSequence.length)
138138
numberOfChannels = numberOfSegments
139139
} else if (Object.keys(mappingNumberToFrameNumbers).length > 0) {
140-
numberOfMappings = Object.keys(mappingNumberToFrameNumbers).length
140+
numberOfMappings = Number(Object.keys(mappingNumberToFrameNumbers).length)
141141
numberOfChannels = numberOfMappings
142142
} else {
143143
throw new Error('Could not determine the number of image channels.')
@@ -154,7 +154,7 @@ function getFrameMapping (metadata) {
154154
metadata.DimensionOrganizationType || 'TILED_SPARSE'
155155
)
156156
if (dimensionOrganizationType === 'TILED_FULL') {
157-
let n = 1
157+
let number = 1
158158
// Forth, along "channels"
159159
for (let i = 0; i < numberOfChannels; i++) {
160160
// Third, along the depth direction from glass slide -> coverslip
@@ -171,19 +171,21 @@ function getFrameMapping (metadata) {
171171
let channelIdentifier
172172
if (numberOfOpticalPaths > 0) {
173173
const opticalPath = metadata.OpticalPathSequence[i]
174-
channelIdentifier = opticalPath.OpticalPathIdentifier
174+
channelIdentifier = String(opticalPath.OpticalPathIdentifier)
175175
} else if (numberOfSegments > 0) {
176-
const segment = metadata.SegmentIdentificationSequence[i]
177-
channelIdentifier = String(segment.ReferencedSegmentNumber)
176+
const segment = metadata.SegmentSequence[i]
177+
channelIdentifier = String(segment.SegmentNumber)
178178
} else if (numberOfMappings > 0) {
179179
// TODO: ensure that frames are mapped accordingly
180-
channelIdentifier = String(frameNumberToMappingNumber[n])
180+
channelIdentifier = String(frameNumberToMappingNumber[number])
181181
} else {
182-
throw new Error(`Could not determine channel of frame #${n}.`)
182+
throw new Error(
183+
`Could not determine channel of frame #${number}.`
184+
)
183185
}
184-
const index = `${r + 1}-${c + 1}-${channelIdentifier}`
185-
frameMapping[index] = `${sopInstanceUID}/frames/${n}`
186-
n += 1
186+
const key = `${r + 1}-${c + 1}-${channelIdentifier}`
187+
frameMapping[key] = `${sopInstanceUID}/frames/${number}`
188+
number += 1
187189
}
188190
}
189191
}
@@ -197,6 +199,7 @@ function getFrameMapping (metadata) {
197199
const columnPosition = planePositions.ColumnPositionInTotalImagePixelMatrix
198200
const rowIndex = Math.ceil(rowPosition / rows)
199201
const colIndex = Math.ceil(columnPosition / columns)
202+
const number = j + 1
200203
let channelIdentifier
201204
if (numberOfOpticalPaths === 1) {
202205
try {
@@ -207,14 +210,14 @@ function getFrameMapping (metadata) {
207210
)
208211
} catch {
209212
channelIdentifier = String(
210-
perframeFuncGroups[0]
213+
perframeFuncGroups[j]
211214
.OpticalPathIdentificationSequence[0]
212215
.OpticalPathIdentifier
213216
)
214217
}
215218
} else if (numberOfOpticalPaths > 1) {
216219
channelIdentifier = String(
217-
perframeFuncGroups[0]
220+
perframeFuncGroups[j]
218221
.OpticalPathIdentificationSequence[0]
219222
.OpticalPathIdentifier
220223
)
@@ -227,25 +230,25 @@ function getFrameMapping (metadata) {
227230
)
228231
} catch {
229232
channelIdentifier = String(
230-
perframeFuncGroups[0]
233+
perframeFuncGroups[j]
231234
.SegmentIdentificationSequence[0]
232235
.ReferencedSegmentNumber
233236
)
234237
}
235238
} else if (numberOfSegments > 1) {
236239
channelIdentifier = String(
237-
perframeFuncGroups[0]
240+
perframeFuncGroups[j]
238241
.SegmentIdentificationSequence[0]
239242
.ReferencedSegmentNumber
240243
)
241244
} else if (numberOfMappings > 0) {
242-
channelIdentifier = String(frameNumberToMappingNumber[j + 1])
245+
channelIdentifier = String(frameNumberToMappingNumber[number])
243246
} else {
244-
throw new Error(`Could not determine channel of frame ${j}.`)
247+
throw new Error(`Could not determine channel of frame ${number}.`)
245248
}
246-
const index = `${rowIndex}-${colIndex}-${channelIdentifier}`
249+
const key = `${rowIndex}-${colIndex}-${channelIdentifier}`
247250
const frameNumber = j + 1
248-
frameMapping[index] = `${sopInstanceUID}/frames/${frameNumber}`
251+
frameMapping[key] = `${sopInstanceUID}/frames/${frameNumber}`
249252
}
250253
}
251254
return {

0 commit comments

Comments
 (0)