Skip to content

Commit 7ca3641

Browse files
author
Tejas Ganesh Naik
committed
healthimaging sample code updates
1 parent 146ce2f commit 7ca3641

File tree

4 files changed

+106
-66
lines changed

4 files changed

+106
-66
lines changed

cpp/example_code/medical-imaging/start_dicom_import_job.cpp

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
\param outputBucketName: The name of the S3 bucket for the output.
3030
\param outputDirectory: The directory in the S3 bucket to store the output.
3131
\param roleArn: The ARN of the IAM role with permissions for the import.
32+
\param importConfigJson: The import configuration JSON string (optional).
3233
\param importJobId: A string to receive the import job ID.
3334
\param clientConfig: Aws client configuration.
3435
\return bool: Function succeeded.
@@ -37,6 +38,7 @@ bool AwsDoc::Medical_Imaging::startDICOMImportJob(
3738
const Aws::String &dataStoreID, const Aws::String &inputBucketName,
3839
const Aws::String &inputDirectory, const Aws::String &outputBucketName,
3940
const Aws::String &outputDirectory, const Aws::String &roleArn,
41+
const Aws::String &importConfigJson,
4042
Aws::String &importJobId,
4143
const Aws::Client::ClientConfiguration &clientConfig) {
4244
Aws::MedicalImaging::MedicalImagingClient medicalImagingClient(clientConfig);
@@ -48,8 +50,20 @@ bool AwsDoc::Medical_Imaging::startDICOMImportJob(
4850
startDICOMImportJobRequest.SetInputS3Uri(inputURI);
4951
startDICOMImportJobRequest.SetOutputS3Uri(outputURI);
5052

51-
Aws::MedicalImaging::Model::StartDICOMImportJobOutcome startDICOMImportJobOutcome = medicalImagingClient.StartDICOMImportJob(
52-
startDICOMImportJobRequest);
53+
if (!importConfigJson.empty()) {
54+
Aws::Utils::Json::JsonValue jsonValue(importConfigJson);
55+
if (jsonValue.WasParseSuccessful()) {
56+
startDICOMImportJobRequest.SetImportConfiguration(
57+
Aws::MedicalImaging::Model::ImportConfiguration(jsonValue));
58+
}
59+
else {
60+
std::cerr << "Failed to parse import configuration JSON" << std::endl;
61+
return false;
62+
}
63+
}
64+
65+
Aws::MedicalImaging::Model::StartDICOMImportJobOutcome startDICOMImportJobOutcome =
66+
medicalImagingClient.StartDICOMImportJob(startDICOMImportJobRequest);
5367

5468
if (startDICOMImportJobOutcome.IsSuccess()) {
5569
importJobId = startDICOMImportJobOutcome.GetResult().GetJobId();

javascriptv3/example_code/medical-imaging/actions/start-dicom-import-job.js

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,25 @@ import { medicalImagingClient } from "../libs/medicalImagingClient.js";
1313
* @param {string} dataAccessRoleArn - The Amazon Resource Name (ARN) of the role that grants permission.
1414
* @param {string} inputS3Uri - The URI of the S3 bucket containing the input files.
1515
* @param {string} outputS3Uri - The URI of the S3 bucket where the output files are stored.
16+
* @param {Object} importConfiguration - The configuration for digital pathology import.
1617
*/
1718
export const startDicomImportJob = async (
1819
jobName = "test-1",
1920
datastoreId = "12345678901234567890123456789012",
2021
dataAccessRoleArn = "arn:aws:iam::xxxxxxxxxxxx:role/ImportJobDataAccessRole",
2122
inputS3Uri = "s3://medical-imaging-dicom-input/dicom_input/",
2223
outputS3Uri = "s3://medical-imaging-output/job_output/",
24+
importConfiguration = {
25+
digitalPathologyImportConfiguration: {
26+
qualityFactor: 85,
27+
fileMetadataMappings: [
28+
{
29+
imageFilePath: "image.svs",
30+
metadataFilePath: "metadata.json"
31+
}
32+
]
33+
}
34+
}
2335
) => {
2436
const response = await medicalImagingClient.send(
2537
new StartDICOMImportJobCommand({
@@ -28,23 +40,11 @@ export const startDicomImportJob = async (
2840
dataAccessRoleArn: dataAccessRoleArn,
2941
inputS3Uri: inputS3Uri,
3042
outputS3Uri: outputS3Uri,
43+
importConfiguration: importConfiguration,
3144
}),
3245
);
3346
console.log(response);
34-
// {
35-
// '$metadata': {
36-
// httpStatusCode: 200,
37-
// requestId: '6e81d191-d46b-4e48-a08a-cdcc7e11eb79',
38-
// extendedRequestId: undefined,
39-
// cfId: undefined,
40-
// attempts: 1,
41-
// totalRetryDelay: 0
42-
// },
43-
// datastoreId: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
44-
// jobId: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
45-
// jobStatus: 'SUBMITTED',
46-
// submittedAt: 2023-09-22T14:48:45.767Z
47-
// }
47+
// {// '$metadata': {// httpStatusCode: 200,// requestId: '6e81d191-d46b-4e48-a08a-cdcc7e11eb79',// extendedRequestId: undefined,// cfId: undefined,// attempts: 1,// totalRetryDelay: 0// },// datastoreId: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',// jobId: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',// jobStatus: 'SUBMITTED',// submittedAt: 2023-09-22T14:48:45.767Z// }
4848
return response;
4949
};
5050
// snippet-end:[medical-imaging.JavaScript.dicom.startDicomImportJobV3]

javav2/example_code/medicalimaging/src/main/java/com/example/medicalimaging/StartDicomImportJob.java

Lines changed: 46 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -64,28 +64,53 @@ public static void main(String[] args) {
6464

6565
// snippet-start:[medicalimaging.java2.start_dicom_import_job.main]
6666
public static String startDicomImportJob(MedicalImagingClient medicalImagingClient,
67-
String jobName,
68-
String datastoreId,
69-
String dataAccessRoleArn,
70-
String inputS3Uri,
71-
String outputS3Uri) {
72-
73-
try {
74-
StartDicomImportJobRequest startDicomImportJobRequest = StartDicomImportJobRequest.builder()
75-
.jobName(jobName)
76-
.datastoreId(datastoreId)
77-
.dataAccessRoleArn(dataAccessRoleArn)
78-
.inputS3Uri(inputS3Uri)
79-
.outputS3Uri(outputS3Uri)
67+
String jobName,
68+
String datastoreId,
69+
String dataAccessRoleArn,
70+
String inputS3Uri,
71+
String outputS3Uri,
72+
String importConfigJson) {
73+
74+
try {
75+
software.amazon.awssdk.utils.json.JsonNode jsonNode =
76+
software.amazon.awssdk.utils.json.JsonFactory.jsonParser().parse(importConfigJson);
77+
78+
ImportConfiguration importConfiguration = ImportConfiguration.builder()
79+
.digitalPathologyImportConfiguration(
80+
DigitalPathologyImportConfiguration.builder()
81+
.qualityFactor(jsonNode.get("digitalPathologyImportConfiguration")
82+
.get("qualityFactor").asInt())
83+
.fileMetadataMappings(
84+
jsonNode.get("digitalPathologyImportConfiguration")
85+
.get("fileMetadataMappings")
86+
.elements()
87+
.map(mapping -> FileMetadataMapping.builder()
88+
.imageFilePath(mapping.get("imageFilePath").asString())
89+
.metadataFilePath(mapping.get("metadataFilePath").asString())
90+
.build())
91+
.collect(java.util.stream.Collectors.toList())
92+
)
93+
.build()
94+
)
8095
.build();
81-
StartDicomImportJobResponse response = medicalImagingClient.startDICOMImportJob(startDicomImportJobRequest);
82-
return response.jobId();
83-
} catch (MedicalImagingException e) {
84-
System.err.println(e.awsErrorDetails().errorMessage());
85-
System.exit(1);
86-
}
8796

88-
return "";
89-
}
97+
StartDicomImportJobRequest startDicomImportJobRequest = StartDicomImportJobRequest.builder()
98+
.jobName(jobName)
99+
.datastoreId(datastoreId)
100+
.dataAccessRoleArn(dataAccessRoleArn)
101+
.inputS3Uri(inputS3Uri)
102+
.outputS3Uri(outputS3Uri)
103+
.importConfiguration(importConfiguration)
104+
.build();
105+
106+
StartDicomImportJobResponse response = medicalImagingClient.startDICOMImportJob(startDicomImportJobRequest);
107+
return response.jobId();
108+
} catch (MedicalImagingException e) {
109+
System.err.println(e.awsErrorDetails().errorMessage());
110+
System.exit(1);
111+
}
112+
113+
return "";
114+
}
90115
// snippet-end:[medicalimaging.java2.start_dicom_import_job.main]
91116
}

python/example_code/medical-imaging/medical_imaging_basics.py

Lines changed: 30 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -123,35 +123,36 @@ def delete_datastore(self, datastore_id):
123123

124124
# snippet-start:[python.example_code.medical-imaging.StartDICOMImportJob]
125125
def start_dicom_import_job(
126-
self, job_name, datastore_id, role_arn, input_s3_uri, output_s3_uri
127-
):
128-
"""
129-
Start a DICOM import job.
130-
131-
:param job_name: The name of the job.
132-
:param datastore_id: The ID of the data store.
133-
:param role_arn: The Amazon Resource Name (ARN) of the role to use for the job.
134-
:param input_s3_uri: The S3 bucket input prefix path containing the DICOM files.
135-
:param output_s3_uri: The S3 bucket output prefix path for the result.
136-
:return: The job ID.
137-
"""
138-
try:
139-
job = self.health_imaging_client.start_dicom_import_job(
140-
jobName=job_name,
141-
datastoreId=datastore_id,
142-
dataAccessRoleArn=role_arn,
143-
inputS3Uri=input_s3_uri,
144-
outputS3Uri=output_s3_uri,
145-
)
146-
except ClientError as err:
147-
logger.error(
148-
"Couldn't start DICOM import job. Here's why: %s: %s",
149-
err.response["Error"]["Code"],
150-
err.response["Error"]["Message"],
151-
)
152-
raise
153-
else:
154-
return job["jobId"]
126+
self, job_name, datastore_id, role_arn, input_s3_uri, output_s3_uri, import_configuration
127+
):
128+
"""
129+
Start a DICOM import job.
130+
131+
:param job_name: The name of the job.
132+
:param datastore_id: The ID of the data store.
133+
:param role_arn: The Amazon Resource Name (ARN) of the role to use for the job.
134+
:param input_s3_uri: The S3 bucket input prefix path containing the DICOM files.
135+
:param output_s3_uri: The S3 bucket output prefix path for the result.
136+
:return: The job ID.
137+
"""
138+
try:
139+
job = self.health_imaging_client.start_dicom_import_job(
140+
jobName=job_name,
141+
datastoreId=datastore_id,
142+
dataAccessRoleArn=role_arn,
143+
inputS3Uri=input_s3_uri,
144+
outputS3Uri=output_s3_uri,
145+
importConfiguration=import_configuration
146+
)
147+
except ClientError as err:
148+
logger.error(
149+
"Couldn't start DICOM import job. Here's why: %s: %s",
150+
err.response["Error"]["Code"],
151+
err.response["Error"]["Message"],
152+
)
153+
raise
154+
else:
155+
return job["jobId"]
155156

156157
# snippet-end:[python.example_code.medical-imaging.StartDICOMImportJob]
157158

0 commit comments

Comments
 (0)