comparison Applications/Dicomizer.cpp @ 199:a1c265cb2174

replacing deprecated std::auto_ptr by std::unique_ptr
author Sebastien Jodogne <s.jodogne@gmail.com>
date Mon, 06 Jul 2020 16:29:41 +0200
parents f299c191cd76
children 2a4e1f7de5ab
comparison
equal deleted inserted replaced
198:2d3fe6967894 199:a1c265cb2174
31 #include "../Framework/Inputs/TiledPyramidStatistics.h" 31 #include "../Framework/Inputs/TiledPyramidStatistics.h"
32 #include "../Framework/MultiThreading/BagOfTasksProcessor.h" 32 #include "../Framework/MultiThreading/BagOfTasksProcessor.h"
33 #include "../Framework/Outputs/DicomPyramidWriter.h" 33 #include "../Framework/Outputs/DicomPyramidWriter.h"
34 #include "../Framework/Outputs/TruncatedPyramidWriter.h" 34 #include "../Framework/Outputs/TruncatedPyramidWriter.h"
35 35
36 #include <Compatibility.h> // For std::unique_ptr
36 #include <DicomParsing/FromDcmtkBridge.h> 37 #include <DicomParsing/FromDcmtkBridge.h>
37 #include <Logging.h> 38 #include <Logging.h>
38 #include <OrthancException.h> 39 #include <OrthancException.h>
39 #include <SystemToolbox.h> 40 #include <SystemToolbox.h>
40 41
298 LOG(ERROR) << "Cannot parse the JSON file in: " << path; 299 LOG(ERROR) << "Cannot parse the JSON file in: " << path;
299 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); 300 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat);
300 } 301 }
301 } 302 }
302 303
303 std::auto_ptr<DcmDataset> dataset(Orthanc::FromDcmtkBridge::FromJson(json, true, true, Orthanc::Encoding_Latin1, 304 std::unique_ptr<DcmDataset> dataset(Orthanc::FromDcmtkBridge::FromJson(json, true, true, Orthanc::Encoding_Latin1,
304 "" /* no private tag, thus no private creator */)); 305 "" /* no private tag, thus no private creator */));
305 if (dataset.get() == NULL) 306 if (dataset.get() == NULL)
306 { 307 {
307 LOG(ERROR) << "Cannot convert to JSON file to a DICOM dataset: " << path; 308 LOG(ERROR) << "Cannot convert to JSON file to a DICOM dataset: " << path;
308 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); 309 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat);
357 } 358 }
358 359
359 360
360 { 361 {
361 // Construct tag "Dimension Organization Sequence" (0020,9221) 362 // Construct tag "Dimension Organization Sequence" (0020,9221)
362 std::auto_ptr<DcmItem> item(new DcmItem); 363 std::unique_ptr<DcmItem> item(new DcmItem);
363 OrthancWSI::DicomToolbox::SetStringTag(*item, DCM_DimensionOrganizationUID, organization); 364 OrthancWSI::DicomToolbox::SetStringTag(*item, DCM_DimensionOrganizationUID, organization);
364 365
365 std::auto_ptr<DcmSequenceOfItems> sequence(new DcmSequenceOfItems(DCM_DimensionOrganizationSequence)); 366 std::unique_ptr<DcmSequenceOfItems> sequence(new DcmSequenceOfItems(DCM_DimensionOrganizationSequence));
366 367
367 if (!sequence->insert(item.release(), false, false).good() || 368 if (!sequence->insert(item.release(), false, false).good() ||
368 !dataset.insert(sequence.release(), true /* replace */, false).good()) 369 !dataset.insert(sequence.release(), true /* replace */, false).good())
369 { 370 {
370 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError); 371 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError);
372 } 373 }
373 374
374 375
375 { 376 {
376 // Construct tag "Dimension Index Sequence" (0020,9222) 377 // Construct tag "Dimension Index Sequence" (0020,9222)
377 std::auto_ptr<DcmItem> item(new DcmItem); 378 std::unique_ptr<DcmItem> item(new DcmItem);
378 OrthancWSI::DicomToolbox::SetStringTag(*item, DCM_DimensionOrganizationUID, organization); 379 OrthancWSI::DicomToolbox::SetStringTag(*item, DCM_DimensionOrganizationUID, organization);
379 OrthancWSI::DicomToolbox::SetAttributeTag(*item, DCM_FunctionalGroupPointer, DCM_PlanePositionSlideSequence); 380 OrthancWSI::DicomToolbox::SetAttributeTag(*item, DCM_FunctionalGroupPointer, DCM_PlanePositionSlideSequence);
380 OrthancWSI::DicomToolbox::SetAttributeTag(*item, DCM_DimensionIndexPointer, DCM_ColumnPositionInTotalImagePixelMatrix); 381 OrthancWSI::DicomToolbox::SetAttributeTag(*item, DCM_DimensionIndexPointer, DCM_ColumnPositionInTotalImagePixelMatrix);
381 382
382 std::auto_ptr<DcmItem> item2(new DcmItem); 383 std::unique_ptr<DcmItem> item2(new DcmItem);
383 OrthancWSI::DicomToolbox::SetStringTag(*item2, DCM_DimensionOrganizationUID, organization); 384 OrthancWSI::DicomToolbox::SetStringTag(*item2, DCM_DimensionOrganizationUID, organization);
384 OrthancWSI::DicomToolbox::SetAttributeTag(*item2, DCM_FunctionalGroupPointer, DCM_PlanePositionSlideSequence); 385 OrthancWSI::DicomToolbox::SetAttributeTag(*item2, DCM_FunctionalGroupPointer, DCM_PlanePositionSlideSequence);
385 OrthancWSI::DicomToolbox::SetAttributeTag(*item2, DCM_DimensionIndexPointer, DCM_RowPositionInTotalImagePixelMatrix); 386 OrthancWSI::DicomToolbox::SetAttributeTag(*item2, DCM_DimensionIndexPointer, DCM_RowPositionInTotalImagePixelMatrix);
386 387
387 std::auto_ptr<DcmSequenceOfItems> sequence(new DcmSequenceOfItems(DCM_DimensionIndexSequence)); 388 std::unique_ptr<DcmSequenceOfItems> sequence(new DcmSequenceOfItems(DCM_DimensionIndexSequence));
388 389
389 if (!sequence->insert(item.release(), false, false).good() || 390 if (!sequence->insert(item.release(), false, false).good() ||
390 !sequence->insert(item2.release(), false, false).good() || 391 !sequence->insert(item2.release(), false, false).good() ||
391 !dataset.insert(sequence.release(), true /* replace */, false).good()) 392 !dataset.insert(sequence.release(), true /* replace */, false).good())
392 { 393 {
395 } 396 }
396 397
397 398
398 { 399 {
399 // Construct tag "Shared Functional Groups Sequence" (5200,9229) 400 // Construct tag "Shared Functional Groups Sequence" (5200,9229)
400 std::auto_ptr<DcmItem> item(new DcmItem); 401 std::unique_ptr<DcmItem> item(new DcmItem);
401 402
402 std::auto_ptr<DcmItem> item3(new DcmItem); 403 std::unique_ptr<DcmItem> item3(new DcmItem);
403 OrthancWSI::DicomToolbox::SetStringTag(*item3, DCM_OpticalPathIdentifier, opticalPathId); 404 OrthancWSI::DicomToolbox::SetStringTag(*item3, DCM_OpticalPathIdentifier, opticalPathId);
404 405
405 std::auto_ptr<DcmSequenceOfItems> sequence(new DcmSequenceOfItems(DCM_SharedFunctionalGroupsSequence)); 406 std::unique_ptr<DcmSequenceOfItems> sequence(new DcmSequenceOfItems(DCM_SharedFunctionalGroupsSequence));
406 std::auto_ptr<DcmSequenceOfItems> sequence3(new DcmSequenceOfItems(DCM_OpticalPathIdentificationSequence)); 407 std::unique_ptr<DcmSequenceOfItems> sequence3(new DcmSequenceOfItems(DCM_OpticalPathIdentificationSequence));
407 408
408 if (!sequence3->insert(item3.release(), false, false).good() || 409 if (!sequence3->insert(item3.release(), false, false).good() ||
409 !item->insert(sequence3.release(), false, false).good() || 410 !item->insert(sequence3.release(), false, false).good() ||
410 !sequence->insert(item.release(), false, false).good() || 411 !sequence->insert(item.release(), false, false).good() ||
411 !dataset.insert(sequence.release(), true /* replace */, false).good()) 412 !dataset.insert(sequence.release(), true /* replace */, false).good())
439 440
440 OrthancWSI::DicomToolbox::SetStringTag(dataset, DCM_ImagedVolumeWidth, boost::lexical_cast<std::string>(volume.GetWidth())); 441 OrthancWSI::DicomToolbox::SetStringTag(dataset, DCM_ImagedVolumeWidth, boost::lexical_cast<std::string>(volume.GetWidth()));
441 OrthancWSI::DicomToolbox::SetStringTag(dataset, DCM_ImagedVolumeHeight, boost::lexical_cast<std::string>(volume.GetHeight())); 442 OrthancWSI::DicomToolbox::SetStringTag(dataset, DCM_ImagedVolumeHeight, boost::lexical_cast<std::string>(volume.GetHeight()));
442 OrthancWSI::DicomToolbox::SetStringTag(dataset, DCM_ImagedVolumeDepth, boost::lexical_cast<std::string>(volume.GetDepth())); 443 OrthancWSI::DicomToolbox::SetStringTag(dataset, DCM_ImagedVolumeDepth, boost::lexical_cast<std::string>(volume.GetDepth()));
443 444
444 std::auto_ptr<DcmItem> origin(new DcmItem); 445 std::unique_ptr<DcmItem> origin(new DcmItem);
445 OrthancWSI::DicomToolbox::SetStringTag(*origin, DCM_XOffsetInSlideCoordinateSystem, 446 OrthancWSI::DicomToolbox::SetStringTag(*origin, DCM_XOffsetInSlideCoordinateSystem,
446 boost::lexical_cast<std::string>(volume.GetOffsetX())); 447 boost::lexical_cast<std::string>(volume.GetOffsetX()));
447 OrthancWSI::DicomToolbox::SetStringTag(*origin, DCM_YOffsetInSlideCoordinateSystem, 448 OrthancWSI::DicomToolbox::SetStringTag(*origin, DCM_YOffsetInSlideCoordinateSystem,
448 boost::lexical_cast<std::string>(volume.GetOffsetY())); 449 boost::lexical_cast<std::string>(volume.GetOffsetY()));
449 450
450 std::auto_ptr<DcmSequenceOfItems> sequenceOrigin(new DcmSequenceOfItems(DCM_TotalPixelMatrixOriginSequence)); 451 std::unique_ptr<DcmSequenceOfItems> sequenceOrigin(new DcmSequenceOfItems(DCM_TotalPixelMatrixOriginSequence));
451 if (!sequenceOrigin->insert(origin.release(), false, false).good() || 452 if (!sequenceOrigin->insert(origin.release(), false, false).good() ||
452 !dataset.insert(sequenceOrigin.release(), false, false).good()) 453 !dataset.insert(sequenceOrigin.release(), false, false).good())
453 { 454 {
454 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError); 455 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError);
455 } 456 }
471 if (!reader.parse(brightfield, json, false)) 472 if (!reader.parse(brightfield, json, false))
472 { 473 {
473 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError); 474 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError);
474 } 475 }
475 476
476 std::auto_ptr<DcmElement> element(Orthanc::FromDcmtkBridge::FromJson( 477 std::unique_ptr<DcmElement> element(Orthanc::FromDcmtkBridge::FromJson(
477 Orthanc::DicomTag(DCM_OpticalPathSequence.getGroup(), 478 Orthanc::DicomTag(DCM_OpticalPathSequence.getGroup(),
478 DCM_OpticalPathSequence.getElement()), 479 DCM_OpticalPathSequence.getElement()),
479 json, false, encoding, 480 json, false, encoding,
480 "" /* no private tag, thus no private creator */)); 481 "" /* no private tag, thus no private creator */));
481 if (!dataset.insert(element.release()).good()) 482 if (!dataset.insert(element.release()).good())
503 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); 504 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat);
504 } 505 }
505 506
506 if (!opticalPath->tagExists(DCM_ICCProfile)) 507 if (!opticalPath->tagExists(DCM_ICCProfile))
507 { 508 {
508 std::auto_ptr<DcmOtherByteOtherWord> icc(new DcmOtherByteOtherWord(DCM_ICCProfile)); 509 std::unique_ptr<DcmOtherByteOtherWord> icc(new DcmOtherByteOtherWord(DCM_ICCProfile));
509 510
510 if (!icc->putUint8Array(reinterpret_cast<const Uint8*>(profile.c_str()), profile.size()).good() || 511 if (!icc->putUint8Array(reinterpret_cast<const Uint8*>(profile.c_str()), profile.size()).good() ||
511 !opticalPath->insert(icc.release()).good()) 512 !opticalPath->insert(icc.release()).good())
512 { 513 {
513 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError); 514 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError);
925 926
926 case OrthancWSI::ImageCompression_Tiff: 927 case OrthancWSI::ImageCompression_Tiff:
927 { 928 {
928 try 929 try
929 { 930 {
930 std::auto_ptr<OrthancWSI::HierarchicalTiff> tiff(new OrthancWSI::HierarchicalTiff(path)); 931 std::unique_ptr<OrthancWSI::HierarchicalTiff> tiff(new OrthancWSI::HierarchicalTiff(path));
931 sourceCompression = tiff->GetImageCompression(); 932 sourceCompression = tiff->GetImageCompression();
932 return tiff.release(); 933 return tiff.release();
933 } 934 }
934 catch (Orthanc::OrthancException&) 935 catch (Orthanc::OrthancException&)
935 { 936 {
970 OrthancWSI::ImagedVolumeParameters volume; 971 OrthancWSI::ImagedVolumeParameters volume;
971 972
972 if (ParseParameters(exitStatus, parameters, volume, argc, argv)) 973 if (ParseParameters(exitStatus, parameters, volume, argc, argv))
973 { 974 {
974 OrthancWSI::ImageCompression sourceCompression; 975 OrthancWSI::ImageCompression sourceCompression;
975 std::auto_ptr<OrthancWSI::ITiledPyramid> source; 976 std::unique_ptr<OrthancWSI::ITiledPyramid> source;
976 977
977 source.reset(OpenInputPyramid(sourceCompression, parameters.GetInputFile(), parameters)); 978 source.reset(OpenInputPyramid(sourceCompression, parameters.GetInputFile(), parameters));
978 if (source.get() == NULL) 979 if (source.get() == NULL)
979 { 980 {
980 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); 981 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat);
981 } 982 }
982 983
983 LOG(WARNING) << "Compression of the individual source tiles: " << OrthancWSI::EnumerationToString(sourceCompression); 984 LOG(WARNING) << "Compression of the individual source tiles: " << OrthancWSI::EnumerationToString(sourceCompression);
984 985
985 // Create the shared DICOM tags 986 // Create the shared DICOM tags
986 std::auto_ptr<DcmDataset> dataset(ParseDataset(parameters.GetDatasetPath())); 987 std::unique_ptr<DcmDataset> dataset(ParseDataset(parameters.GetDatasetPath()));
987 EnrichDataset(*dataset, *source, sourceCompression, parameters, volume); 988 EnrichDataset(*dataset, *source, sourceCompression, parameters, volume);
988 989
989 std::auto_ptr<OrthancWSI::IFileTarget> output(parameters.CreateTarget()); 990 std::unique_ptr<OrthancWSI::IFileTarget> output(parameters.CreateTarget());
990 Recompress(*output, *source, *dataset, parameters, volume, sourceCompression); 991 Recompress(*output, *source, *dataset, parameters, volume, sourceCompression);
991 } 992 }
992 } 993 }
993 catch (Orthanc::OrthancException& e) 994 catch (Orthanc::OrthancException& e)
994 { 995 {