7 #ifndef TOMATO_TOMATO_EXPORTT2_HXX     8 #define TOMATO_TOMATO_EXPORTT2_HXX    10 #include "CmakeConfigForTomato.h"    13 #include "gdcmUIDGenerator.h"    14 #include "itkGDCMImageIO.h"    15 #include "itkGDCMSeriesFileNames.h"    16 #include "itkMultiplyImageFilter.h"    17 #include "itkImageFileWriter.h"    18 #include "itkFileTools.h"    19 #include "itkAdaptImageFilter.h"    20 #include "itkThresholdImageFilter.h"    24     template< 
typename MeasureType >
    29         if (_opts->dir_output_map.empty()){
    30             printf(
"No DICOM export, dir_output_map not given.\n");
    35         typedef itk::Colorbar2DImageFilter< ImageType2D > OxColorbarImageFilterType;
    36         typedef itk::AdaptImageFilter < ImageType2D, OutputImageType, CastPixelAccessor< InputPixelType, OutputPixelType > > ImageAdaptorType;
    37         typedef itk::ImageFileWriter<OutputImageType> WriterType;
    38         typedef itk::MultiplyImageFilter< ImageType2D, ImageType2D, ImageType2D > MultiplyImageFilterType;
    39         typedef itk::ThresholdImageFilter<ImageType2D> ThresholdImageFilterType;
    43         typename OxColorbarImageFilterType::Pointer OxColorbarFilter = OxColorbarImageFilterType::New();
    44         OxColorbarFilter->SetInput(_imageCalculatorItk->GetT2Image());
    45         OxColorbarFilter->SetAddColorbar(_opts->use_colorbar);
    48         itk::EncapsulateMetaData<std::string>( _dictionaryInput, std::string(
"0028|1052"), 
"0"); 
    49         itk::EncapsulateMetaData<std::string>( _dictionaryInput, std::string(
"0028|1053"), 
"1"); 
    52         DictionaryType dictionaryOutput_T2(_dictionaryInput);
    55         gdcm::UIDGenerator sopuid;
    56         gdcm::UIDGenerator suid;
    57         std::string sopInstanceUID_T2 = sopuid.Generate();
    58         std::string seriesUID_T2;
    59         if (_opts->output_map_series_instance_uid.empty()){
    60             seriesUID_T2 = suid.Generate();
    62             seriesUID_T2 = _opts->output_map_series_instance_uid;
    66         std::string seriesNumber;
    67         itk::ExposeMetaData<std::string>(_dictionaryInput, 
"0020|0011", seriesNumber);
    68         if (_opts->output_map_series_number == 0) {
    69             _opts->output_map_series_number = KWUtil::StringToNumber<int>(seriesNumber) + 10002;
    71         std::string newSeriesNumber_T2 = KWUtil::NumberToString(_opts->output_map_series_number);
    73         itk::EncapsulateMetaData<std::string>( dictionaryOutput_T2, std::string(
"0008|0018"), sopInstanceUID_T2);
    74         itk::EncapsulateMetaData<std::string>( dictionaryOutput_T2, std::string(
"0002|0003"), sopInstanceUID_T2);
    75         itk::EncapsulateMetaData<std::string>( dictionaryOutput_T2, std::string(
"0020|000e"), seriesUID_T2);
    77         itk::EncapsulateMetaData<std::string>( dictionaryOutput_T2, std::string(
"0020|0011"), newSeriesNumber_T2); 
    81         itk::EncapsulateMetaData<std::string>( dictionaryOutput_T2, std::string(
"0020|4000"), 
"T2*10 map"); 
    82         itk::EncapsulateMetaData<std::string>( dictionaryOutput_T2, std::string(
"0020|0013"), std::string(
"1")); 
    85         DictionaryType dictionaryOutput_R2(_dictionaryInput);
    87         std::string sopInstanceUID_R2 = sopuid.Generate();
    88         std::string seriesUID_R2;
    89         if (_opts->output_fitparams_series_instance_uid.empty()){
    90             seriesUID_R2 = suid.Generate();
    92             seriesUID_R2 = _opts->output_map_series_instance_uid;
    95         itk::ExposeMetaData<std::string>(_dictionaryInput, 
"0020|0011", seriesNumber);
    96         if (_opts->output_fitparams_series_number == 0) {
    97             _opts->output_fitparams_series_number = KWUtil::StringToNumber<int>(seriesNumber) + 10003;
    99         std::string newSeriesNumber_R2 = KWUtil::NumberToString(_opts->output_fitparams_series_number);
   102         itk::EncapsulateMetaData<std::string>( dictionaryOutput_R2, std::string(
"0008|0018"), sopInstanceUID_R2);
   103         itk::EncapsulateMetaData<std::string>( dictionaryOutput_R2, std::string(
"0002|0003"), sopInstanceUID_R2);
   104         itk::EncapsulateMetaData<std::string>( dictionaryOutput_R2, std::string(
"0020|000e"), seriesUID_R2);
   106         itk::EncapsulateMetaData<std::string>( dictionaryOutput_R2, std::string(
"0020|0011"), newSeriesNumber_R2); 
   108         itk::EncapsulateMetaData<std::string>( dictionaryOutput_R2, std::string(
"0020|4000"), std::string(
"Rsquare*4000 Map")); 
   109         itk::EncapsulateMetaData<std::string>( dictionaryOutput_R2, std::string(
"0020|0013"), std::string(
"3")); 
   110         itk::EncapsulateMetaData<std::string>( dictionaryOutput_R2, std::string(
"0028|0106"), std::string(
"0")); 
   111         itk::EncapsulateMetaData<std::string>( dictionaryOutput_R2, std::string(
"0028|0107"), std::string(
"4096")); 
   112         itk::EncapsulateMetaData<std::string>( dictionaryOutput_R2, std::string(
"0028|1050"), std::string(
"3900")); 
   113         itk::EncapsulateMetaData<std::string>( dictionaryOutput_R2, std::string(
"0028|1051"), std::string(
"200")); 
   116         DictionaryType dictionaryOutput_A(_dictionaryInput);
   118         std::string sopInstanceUID_A = sopuid.Generate();
   120         itk::EncapsulateMetaData<std::string>( dictionaryOutput_A, std::string(
"0008|0018"), sopInstanceUID_A);
   121         itk::EncapsulateMetaData<std::string>( dictionaryOutput_A, std::string(
"0002|0003"), sopInstanceUID_A);
   122         itk::EncapsulateMetaData<std::string>( dictionaryOutput_A, std::string(
"0020|000e"), seriesUID_R2);
   124         itk::EncapsulateMetaData<std::string>( dictionaryOutput_A, std::string(
"0020|0011"), newSeriesNumber_R2); 
   127         itk::EncapsulateMetaData<std::string>( dictionaryOutput_A, std::string(
"0020|4000"), std::string(
"A"));  
   128         itk::EncapsulateMetaData<std::string>( dictionaryOutput_A, std::string(
"0020|0013"), std::string(
"4")); 
   129         itk::EncapsulateMetaData<std::string>( dictionaryOutput_A, std::string(
"0028|0106"), std::string(
"0")); 
   130         itk::EncapsulateMetaData<std::string>( dictionaryOutput_A, std::string(
"0028|0107"), std::string(
"4096")); 
   131         itk::EncapsulateMetaData<std::string>( dictionaryOutput_A, std::string(
"0028|1050"), std::string(
"2000")); 
   132         itk::EncapsulateMetaData<std::string>( dictionaryOutput_A, std::string(
"0028|1051"), std::string(
"4000")); 
   135         DictionaryType dictionaryOutput_B(_dictionaryInput);
   137         std::string sopInstanceUID_B = sopuid.Generate();
   139         itk::EncapsulateMetaData<std::string>( dictionaryOutput_B, std::string(
"0008|0018"), sopInstanceUID_B);
   140         itk::EncapsulateMetaData<std::string>( dictionaryOutput_B, std::string(
"0002|0003"), sopInstanceUID_B);
   141         itk::EncapsulateMetaData<std::string>( dictionaryOutput_B, std::string(
"0020|000e"), seriesUID_R2);
   143         itk::EncapsulateMetaData<std::string>( dictionaryOutput_B, std::string(
"0020|0011"), newSeriesNumber_R2); 
   146         itk::EncapsulateMetaData<std::string>( dictionaryOutput_B, std::string(
"0020|4000"), std::string(
"B"));
   147         itk::EncapsulateMetaData<std::string>( dictionaryOutput_B, std::string(
"0020|0013"), std::string(
"5")); 
   148         itk::EncapsulateMetaData<std::string>( dictionaryOutput_B, std::string(
"0028|0106"), std::string(
"0")); 
   149         itk::EncapsulateMetaData<std::string>( dictionaryOutput_B, std::string(
"0028|0107"), std::string(
"4096")); 
   150         itk::EncapsulateMetaData<std::string>( dictionaryOutput_B, std::string(
"0028|1050"), std::string(
"2000")); 
   151         itk::EncapsulateMetaData<std::string>( dictionaryOutput_B, std::string(
"0028|1051"), std::string(
"4000")); 
   154         DictionaryType dictionaryOutput_T2star(_dictionaryInput);
   156         std::string sopInstanceUID_T2star = sopuid.Generate();
   158         itk::EncapsulateMetaData<std::string>( dictionaryOutput_T2star, std::string(
"0008|0018"), sopInstanceUID_T2star);
   159         itk::EncapsulateMetaData<std::string>( dictionaryOutput_T2star, std::string(
"0002|0003"), sopInstanceUID_T2star);
   160         itk::EncapsulateMetaData<std::string>( dictionaryOutput_T2star, std::string(
"0020|000e"), seriesUID_R2);
   162         itk::EncapsulateMetaData<std::string>( dictionaryOutput_T2star, std::string(
"0020|0011"), newSeriesNumber_R2); 
   165         itk::EncapsulateMetaData<std::string>( dictionaryOutput_T2star, std::string(
"0020|0013"), std::string(
"6")); 
   166         itk::EncapsulateMetaData<std::string>( dictionaryOutput_T2star, std::string(
"0028|0106"), std::string(
"0")); 
   167         itk::EncapsulateMetaData<std::string>( dictionaryOutput_T2star, std::string(
"0028|0107"), std::string(
"4096")); 
   168         itk::EncapsulateMetaData<std::string>( dictionaryOutput_T2star, std::string(
"0028|1050"), std::string(
"2000")); 
   169         itk::EncapsulateMetaData<std::string>( dictionaryOutput_T2star, std::string(
"0028|1051"), std::string(
"4000")); 
   172         DictionaryType dictionaryOutput_RelSNRFinal(_dictionaryInput);
   174         std::string sopInstanceUID_RelSNRFinal = sopuid.Generate();
   176         itk::EncapsulateMetaData<std::string>( dictionaryOutput_RelSNRFinal, std::string(
"0008|0018"), sopInstanceUID_RelSNRFinal);
   177         itk::EncapsulateMetaData<std::string>( dictionaryOutput_RelSNRFinal, std::string(
"0002|0003"), sopInstanceUID_RelSNRFinal);
   178         itk::EncapsulateMetaData<std::string>( dictionaryOutput_RelSNRFinal, std::string(
"0020|000e"), seriesUID_R2);
   180         itk::EncapsulateMetaData<std::string>( dictionaryOutput_RelSNRFinal, std::string(
"0020|0011"), newSeriesNumber_R2); 
   182         itk::EncapsulateMetaData<std::string>( dictionaryOutput_RelSNRFinal, std::string(
"0020|4000"), std::string(
"_RelSNRFinal")); 
   183         itk::EncapsulateMetaData<std::string>( dictionaryOutput_RelSNRFinal, std::string(
"0020|0013"), std::string(
"9")); 
   184         itk::EncapsulateMetaData<std::string>( dictionaryOutput_RelSNRFinal, std::string(
"0028|0106"), std::string(
"0")); 
   185         itk::EncapsulateMetaData<std::string>( dictionaryOutput_RelSNRFinal, std::string(
"0028|0107"), std::string(
"4096")); 
   186         itk::EncapsulateMetaData<std::string>( dictionaryOutput_RelSNRFinal, std::string(
"0028|1050"), std::string(
"2000")); 
   187         itk::EncapsulateMetaData<std::string>( dictionaryOutput_RelSNRFinal, std::string(
"0028|1051"), std::string(
"4000")); 
   190         typedef itk::GDCMImageIO ImageIOType;
   191         ImageIOType::Pointer gdcmImageIO = ImageIOType::New();
   192         gdcmImageIO->KeepOriginalUIDOn();
   195         typename ImageAdaptorType::Pointer adaptor = ImageAdaptorType::New();
   198         typename WriterType::Pointer writer = WriterType::New();
   199         writer->SetUseInputMetaDataDictionary(
false);
   202         if (!_opts->dir_output_map.empty()) {
   204             printf(
"Saving to: %s ", _opts->dir_output_map.c_str());
   207             itk::FileTools::CreateDirectory(_opts->dir_output_map);
   210             typename MultiplyImageFilterType::Pointer multiplyT2Filter = MultiplyImageFilterType::New();
   211             multiplyT2Filter->SetInput(OxColorbarFilter->GetOutput() );
   212             multiplyT2Filter->SetConstant( 10. );
   214             typename ThresholdImageFilterType::Pointer thresholdFilter = ThresholdImageFilterType::New();
   215             thresholdFilter->SetInput(multiplyT2Filter->GetOutput());
   217             thresholdFilter->SetUpper(powl(2, 12) - 1);
   218             thresholdFilter->SetOutsideValue(thresholdFilter->GetUpper());
   221             gdcmImageIO->SetMetaDataDictionary(dictionaryOutput_T2);
   224             adaptor->SetInput(thresholdFilter->GetOutput());
   225             writer->SetFileName(_opts->dir_output_map + KWUtil::PathSeparator() + newSeriesNumber_T2 + 
"_T2.dcm");
   226             writer->SetInput(adaptor->GetOutput());
   227             writer->SetImageIO(gdcmImageIO);
   230             } 
catch (itk::ExceptionObject &e) {
   231                 std::cerr << 
"Exception in file writer " << std::endl;
   232                 std::cerr << e << std::endl;
   235             std::cout << 
" Saved!" << std::endl;
   238         if (!_opts->dir_output_fitparams.empty()) {
   240             printf(
"Saving to: %s ", _opts->dir_output_fitparams.c_str());
   244             typename MultiplyImageFilterType::Pointer multiplyR2Filter = MultiplyImageFilterType::New();
   245             multiplyR2Filter->SetInput(_imageCalculatorItk->GetR2Image() );
   246             multiplyR2Filter->SetConstant(4000 );
   248             OxColorbarFilter->SetInput(multiplyR2Filter->GetOutput());
   249             OxColorbarFilter->SetZerosInsteadOfColorbar(
true);
   252             itk::FileTools::CreateDirectory(_opts->dir_output_fitparams);
   255             gdcmImageIO->SetMetaDataDictionary(dictionaryOutput_R2);
   258             adaptor->SetInput(OxColorbarFilter->GetOutput());
   259             writer->SetFileName(_opts->dir_output_fitparams + KWUtil::PathSeparator() + newSeriesNumber_R2 + 
"_R2.dcm");
   260             writer->SetInput(adaptor->GetOutput());
   261             writer->SetImageIO(gdcmImageIO);
   264             } 
catch (itk::ExceptionObject &e) {
   265                 std::cerr << 
"Exception in file writer " << std::endl;
   266                 std::cerr << e << std::endl;
   270             gdcmImageIO->SetMetaDataDictionary(dictionaryOutput_A);
   272             OxColorbarFilter->SetInput(_imageCalculatorItk->GetAImage());
   273             OxColorbarFilter->SetZerosInsteadOfColorbar(
true);
   276             adaptor->SetInput(OxColorbarFilter->GetOutput());
   277             writer->SetFileName(_opts->dir_output_fitparams + KWUtil::PathSeparator() + newSeriesNumber_R2 + 
"_A.dcm");
   278             writer->SetInput(adaptor->GetOutput());
   279             writer->SetImageIO(gdcmImageIO);
   282             } 
catch (itk::ExceptionObject &e) {
   283                 std::cerr << 
"Exception in file writer " << std::endl;
   284                 std::cerr << e << std::endl;
   288             gdcmImageIO->SetMetaDataDictionary(dictionaryOutput_B);
   290             OxColorbarFilter->SetInput(_imageCalculatorItk->GetBImage());
   291             OxColorbarFilter->SetZerosInsteadOfColorbar(
true);
   294             adaptor->SetInput(OxColorbarFilter->GetOutput());
   295             writer->SetFileName(_opts->dir_output_fitparams + KWUtil::PathSeparator() + newSeriesNumber_R2 + 
"_B.dcm");
   296             writer->SetInput(adaptor->GetOutput());
   297             writer->SetImageIO(gdcmImageIO);
   300             } 
catch (itk::ExceptionObject &e) {
   301                 std::cerr << 
"Exception in file writer " << std::endl;
   302                 std::cerr << e << std::endl;
   306             gdcmImageIO->SetMetaDataDictionary(dictionaryOutput_T2star);
   308             OxColorbarFilter->SetInput(_imageCalculatorItk->GetT1starImage());
   309             OxColorbarFilter->SetZerosInsteadOfColorbar(
true);
   312             adaptor->SetInput(OxColorbarFilter->GetOutput());
   313             writer->SetFileName(_opts->dir_output_fitparams + KWUtil::PathSeparator() + newSeriesNumber_R2 + 
"_T2star.dcm");
   314             writer->SetInput(adaptor->GetOutput());
   315             writer->SetImageIO(gdcmImageIO);
   318             } 
catch (itk::ExceptionObject &e) {
   319                 std::cerr << 
"Exception in file writer " << std::endl;
   320                 std::cerr << e << std::endl;
   325             gdcmImageIO->SetMetaDataDictionary(dictionaryOutput_RelSNRFinal);
   327             OxColorbarFilter->SetInput(_imageCalculatorItk->GetSNRImage());
   328             OxColorbarFilter->SetZerosInsteadOfColorbar(
true);
   331             adaptor->SetInput(OxColorbarFilter->GetOutput());
   332             writer->SetFileName(_opts->dir_output_fitparams + KWUtil::PathSeparator() + newSeriesNumber_R2 + 
"_RelSNRFinal.dcm");
   333             writer->SetInput(adaptor->GetOutput());
   334             writer->SetImageIO(gdcmImageIO);
   337             } 
catch (itk::ExceptionObject &e) {
   338                 std::cerr << 
"Exception in file writer " << std::endl;
   339                 std::cerr << e << std::endl;
   341             std::cout << 
" Saved!" << std::endl;
   351 #endif //TOMATO_TOMATO_EXPORTT2_HXX Definition: OxCalculator.h:19