Skip to content

Commit 44b4e48

Browse files
committed
WIP: change pipeline interface
1 parent fe5033b commit 44b4e48

File tree

8 files changed

+127
-45
lines changed

8 files changed

+127
-45
lines changed

packages/dicom/CMakeLists.txt

+1-10
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,4 @@ set(CMAKE_CXX_STANDARD 17)
55

66
add_subdirectory(gdcm)
77
add_subdirectory(dcmtk)
8-
9-
find_package(ITK REQUIRED
10-
COMPONENTS ITKCommon
11-
ITKGDCM
12-
WebAssemblyInterface
13-
)
14-
include(${ITK_USE_FILE})
15-
16-
add_executable(sort-dicom-series sort-dicom-series.cxx)
17-
target_link_libraries(sort-dicom-series PUBLIC ${ITK_LIBRARIES})
8+
add_subdirectory(sort-dicom-series)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
from pathlib import Path
2+
3+
4+
def test_sort_dicom_series():
5+
from itkwasm_dicom_wasi import sort_dicom_series
6+
7+
file_name = "ImageOrientation.1.dcm"
8+
test_file_path = Path(
9+
"..", "..", "test", "data", "input", "DicomImageOrientationTest", file_name
10+
)
11+
12+
assert test_file_path.exists()
13+
14+
output_text = sort_dicom_series([test_file_path])
15+
assert output_text

packages/dicom/sort-dicom-series.cxx

-35
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
find_package(ITK REQUIRED
2+
COMPONENTS ITKCommon
3+
ITKGDCM
4+
WebAssemblyInterface
5+
)
6+
include(${ITK_USE_FILE})
7+
8+
add_executable(sort-dicom-series sort-dicom-series.cxx)
9+
target_link_libraries(sort-dicom-series PUBLIC ${ITK_LIBRARIES})
10+
11+
enable_testing()
12+
13+
add_test(NAME sort-dicom-series-help COMMAND sort-dicom-series --help)
14+
15+
add_test(NAME sort-dicom-series-smoke
16+
COMMAND sort-dicom-series --files
17+
${CMAKE_CURRENT_SOURCE_DIR}/test/data/input/DicomImageOrientationTest/ImageOrientation.1.dcm
18+
${CMAKE_CURRENT_SOURCE_DIR}/test/data/input/DicomImageOrientationTest/ImageOrientation.2.dcm
19+
${CMAKE_CURRENT_SOURCE_DIR}/test/data/input/DicomImageOrientationTest/ImageOrientation.3.dcm
20+
)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
/*=========================================================================
2+
3+
* Copyright NumFOCUS
4+
*
5+
* Licensed under the Apache License, Version 2.0 (the "License");
6+
* you may not use this file except in compliance with the License.
7+
* You may obtain a copy of the License at
8+
*
9+
* https://www.apache.org/licenses/LICENSE-2.0.txt
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*
17+
*=========================================================================*/
18+
19+
#include "itkPipeline.h"
20+
#include "itkOutputTextStream.h"
21+
22+
#include "rapidjson/document.h"
23+
#include "rapidjson/stringbuffer.h"
24+
#include "rapidjson/writer.h"
25+
26+
int main(int argc, char *argv[])
27+
{
28+
itk::wasm::Pipeline pipeline("sort-dicom-series", "Group DICOM files into volumes", argc, argv);
29+
30+
std::vector<std::string> files;
31+
pipeline.add_option("--files", files, "DICOM files to group")->required()->check(CLI::ExistingFile)->type_size(1, -1)->type_name("INPUT_BINARY_FILE");
32+
33+
itk::wasm::OutputTextStream volumes;
34+
pipeline.add_option("volumes", volumes, "Files grouped into volumes")->required()->type_name("OUTPUT_JSON");
35+
36+
ITK_WASM_PARSE(pipeline);
37+
38+
rapidjson::Document volumesJson;
39+
volumesJson.SetObject();
40+
rapidjson::Document::AllocatorType &allocator = volumesJson.GetAllocator();
41+
42+
rapidjson::Value almostEqualValue;
43+
almostEqualValue.SetBool(false);
44+
volumesJson.AddMember("almostEqual", almostEqualValue, allocator);
45+
46+
rapidjson::StringBuffer stringBuffer;
47+
rapidjson::Writer<rapidjson::StringBuffer> writer(stringBuffer);
48+
volumesJson.Accept(writer);
49+
volumes.Get() << stringBuffer.GetString();
50+
51+
return EXIT_SUCCESS;
52+
}

packages/dicom/typescript/src/index-node-only.ts

+10
Original file line numberDiff line numberDiff line change
@@ -60,3 +60,13 @@ export type { ReadImageDicomFileSeriesNodeOptions }
6060

6161
import readImageDicomFileSeriesNode from './read-image-dicom-file-series-node.js'
6262
export { readImageDicomFileSeriesNode }
63+
64+
65+
import SortDicomSeriesNodeResult from './sort-dicom-series-node-result.js'
66+
export type { SortDicomSeriesNodeResult }
67+
68+
import SortDicomSeriesNodeOptions from './sort-dicom-series-node-options.js'
69+
export type { SortDicomSeriesNodeOptions }
70+
71+
import sortDicomSeriesNode from './sort-dicom-series-node.js'
72+
export { sortDicomSeriesNode }

packages/dicom/typescript/src/index-only.ts

+10
Original file line numberDiff line numberDiff line change
@@ -66,3 +66,13 @@ export { readImageDicomFileSeries }
6666

6767
import readImageDicomFileSeriesWorkerFunction from './read-image-dicom-file-series-worker-function.js'
6868
export { readImageDicomFileSeriesWorkerFunction }
69+
70+
71+
import SortDicomSeriesResult from "./sort-dicom-series-result.js";
72+
export type { SortDicomSeriesResult };
73+
74+
import SortDicomSeriesOptions from "./sort-dicom-series-options.js";
75+
export type { SortDicomSeriesOptions };
76+
77+
import sortDicomSeries from "./sort-dicom-series.js";
78+
export { sortDicomSeries };
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import test from "ava";
2+
import path from "path";
3+
import glob from "glob";
4+
5+
import { sortDicomSeriesNode } from "../../dist/index-node.js";
6+
7+
const testDataInputDirectory = path.resolve("..", "test", "data", "input");
8+
const testSeriesDirectory = path.resolve(
9+
testDataInputDirectory,
10+
"DicomImageOrientationTest",
11+
);
12+
const testDicomSeriesFiles = glob.sync(`${testSeriesDirectory}/*.dcm`);
13+
14+
test("Test reading a DICOM file", async (t) => {
15+
const { volumes } = await sortDicomSeriesNode({
16+
files: testDicomSeriesFiles,
17+
});
18+
t.assert(!!volumes);
19+
});

0 commit comments

Comments
 (0)