Skip to content

Commit 0ac1c99

Browse files
author
Alexis Girault
committed
WIP: logs for profiling
1 parent 45c21e8 commit 0ac1c99

File tree

1 file changed

+82
-31
lines changed

1 file changed

+82
-31
lines changed

examples/Dicom/src/index.js

+82-31
Original file line numberDiff line numberDiff line change
@@ -33,47 +33,98 @@ const outputFileInformation = curry(async function outputFileInformation (output
3333
const files = event.target.files || dataTransfer.files
3434

3535
// Parse DICOM metadata
36-
let start = startChrono("Parsing + organising all files using javascript")
37-
const { patients, failures } = await parseDicomFiles(files, true)
36+
let start = startChrono(`Parsing + organising ${files.length} files using javascript`)
37+
const { patients, failures } = await parseDicomFiles(files, false)
3838
const parseTime = endChrono(start)
39+
console.log(`PARSE: ${parseTime}`);
3940

4041
// Select DICOM series
4142
setupDicomForm(patients, async (serie) => {
43+
console.log(serie.metaData.Modality)
44+
console.log(serie.metaData.SeriesDescription)
45+
console.log(serie.metaData.TransferSyntaxUID)
46+
47+
const images = Object.values(serie.images);
48+
const seriesFiles = images.map((image) => image.file)
49+
50+
// Read image data with itk (preSorted = true)
51+
start = startChrono(`Parsing selected series ${seriesFiles.length} files + loading image data using itk (preSorted=true)`)
52+
const readItkSortedTrue = await readImageDICOMFileSeries(seriesFiles, true)
53+
const imageSortedTrue = readItkSortedTrue.image
54+
const itkTimeSortedTrue = endChrono(start)
55+
// outputTextArea.textContent += JSON.stringify(imageSortedTrue, replacer, 4)
56+
// outputTextArea.textContent += '\n'
57+
console.log(`ITK READ PRESORTED: ${itkTimeSortedTrue}`);
58+
59+
// Read image data with itk (preSorted = false)
60+
start = startChrono(`Parsing selected series ${seriesFiles.length} files + loading image data using itk (preSorted=false)`)
61+
const readItkSortedFalse = await readImageDICOMFileSeries(seriesFiles, false)
62+
const imageSortedFalse = readItkSortedFalse.image
63+
const itkTimeSortedFalse = endChrono(start)
64+
// outputTextArea.textContent += JSON.stringify(imageSortedFalse, replacer, 4)
65+
// outputTextArea.textContent += '\n'
66+
console.log(`ITK SORT + READ: ${itkTimeSortedFalse}`);
67+
4268
// Read image data with javascript code
4369
start = startChrono("Loading image data using javascript")
44-
const image1 = serie.getImageData()
45-
const loadTime = endChrono(start)
46-
outputTextArea.textContent += JSON.stringify(image1, replacer, 4)
47-
outputTextArea.textContent += '\n'
48-
49-
// Read image data with itk
50-
start = startChrono("Parsing selected series files + loading image data using itk")
51-
const files = Object.values(serie.images).map((image) => image.file)
52-
const { image, webWorker } = await readImageDICOMFileSeries(null, files)
53-
webWorker.terminate()
54-
const itkTime = endChrono(start)
55-
outputTextArea.textContent += JSON.stringify(image, replacer, 4)
56-
outputTextArea.textContent += '\n'
70+
const imageDicomParser = serie.getImageData()
71+
const dicomParserTime = endChrono(start)
72+
// outputTextArea.textContent += JSON.stringify(imageDicomParser, replacer, 4)
73+
// outputTextArea.textContent += '\n'
74+
console.log(`DICOMPARSER READ: ${dicomParserTime}`);
5775

58-
// Time compare
59-
let ratio = (itkTime / (parseTime + loadTime)).toFixed(2)
60-
outputTextArea.textContent += `-- js code was about ${ratio}x faster than itk's webassembly dicom reader\n`
61-
62-
// Image compare
63-
outputTextArea.textContent += "-- Comparing pixel data..."
64-
if (image1.data.length !== image.data.length) {
65-
let msg = 'Pixel data size differ 𐄂'
66-
outputTextArea.textContent += ` ${msg}\n`
67-
throw Error(msg)
76+
// Images compare
77+
function arraysMatch(arr1, arr2) {
78+
if (arr1.length !== arr2.length) {
79+
outputTextArea.textContent += `⚠️ Mismatch in length (${arr1.length} vs ${arr2.length}) for `
80+
return false;
81+
}
82+
for (let i = 0; i < arr1.length; i += 1) {
83+
if (arr1[i] !== arr2[i]) {
84+
outputTextArea.textContent += `⚠️ Values don't match (${arr1[i]} vs ${arr2[i]}) at index ${i} in `
85+
return false;
86+
}
87+
}
88+
return true;
6889
}
69-
for (let i = 0; i < image.data.length; i++) {
70-
if (image1.data[i] !== image.data[i]) {
71-
let msg = `Element ${i} differs: ${image1.data[i]} !== ${image.data[i]}`
72-
outputTextArea.textContent += ` ${msg}\n`
73-
throw Error(msg)
90+
function objectsMatch(a, b) {
91+
const aProps = Object.getOwnPropertyNames(a);
92+
const bProps = Object.getOwnPropertyNames(b);
93+
if (aProps.length !== bProps.length) {
94+
outputTextArea.textContent += `⚠️ Mismatch in number of properties (${aProps.length} vs ${aProps.length})\n`
95+
return false;
7496
}
97+
let match = true;
98+
for (let i = 0; i < aProps.length; i += 1) {
99+
const propName = aProps[i];
100+
if (a[propName] instanceof Array || ArrayBuffer.isView(a[propName])) {
101+
if (!arraysMatch(a[propName], b[propName])) {
102+
outputTextArea.textContent += `"${propName}"\n`
103+
match = false;
104+
}
105+
} else if (a[propName] instanceof Object) {
106+
match = match && objectsMatch(a[propName], b[propName])
107+
} else if (a[propName] !== b[propName]) {
108+
match = false;
109+
outputTextArea.textContent += `⚠️ Values don't match (${a[propName]} vs ${b[propName]}) for "${propName}"\n`
110+
}
111+
}
112+
return match;
113+
}
114+
115+
outputTextArea.textContent += `-- Comparing image from js code and itk's webassembly dicom reader\n`
116+
if (objectsMatch(imageDicomParser, imageSortedFalse)) {
117+
outputTextArea.textContent += `✅ Perfect match\n`
118+
} else {
119+
outputTextArea.textContent += `❌ Mismatch\n`
75120
}
76-
outputTextArea.textContent += ' they match ✓'
121+
122+
// Time compare
123+
let ratio = (itkTimeSortedTrue / (parseTime + dicomParserTime)).toFixed(2)
124+
outputTextArea.textContent += `⚡ javascript code was ~${ratio}x faster than itk's webassembly dicom reader (preSorted=true)\n`
125+
ratio = (itkTimeSortedFalse / (parseTime + dicomParserTime)).toFixed(2)
126+
outputTextArea.textContent += `⚡ javascript code was ~${ratio}x faster than itk's webassembly dicom reader (preSorted=false)\n`
127+
77128
})
78129
})
79130

0 commit comments

Comments
 (0)