Tomato
OxOriginalShmolliDicomReader.hxx
Go to the documentation of this file.
1 
7 #ifndef Tomato_OxOriginalShmolliDicomReader_HXX
8 #define Tomato_OxOriginalShmolliDicomReader_HXX
9 
10 #include <itkImageFileReader.h>
12 
13 namespace Ox {
14 
15  template< typename MeasureType >
16  int
17  OriginalShmolliDicomReader<MeasureType>
18  ::readAndSort() {
19 
20  // Mag
21  typename ReadFileListFilterType::Pointer readerMag = ReadFileListFilterType::New();
22  readerMag->SetFileList(_filesMag);
23  readerMag->Update();
24 
25  typename SortInvTimesImageFilterType::Pointer sorterMag = SortInvTimesImageFilterType::New();
26  sorterMag->SetInvTimesNonSorted(readerMag->GetInvTimes());
27  sorterMag->SetInput(readerMag->GetOutput());
28  sorterMag->Update();
29 
30  // pha
31  typename ReadFileListFilterType::Pointer readerPha = ReadFileListFilterType::New();
32  readerPha->SetFileList(_filesPha);
33  readerPha->Update();
34 
35  typename SortInvTimesImageFilterType::Pointer sorterPha = SortInvTimesImageFilterType::New();
36  sorterPha->SetInvTimesNonSorted(readerPha->GetInvTimes());
37  sorterPha->SetInput(readerPha->GetOutput());
38  sorterPha->Update();
39 
40  if (sorterMag->GetInvTimesSorted() == sorterPha->GetInvTimesSorted()){
41  vnl_vector<InputPixelType > temp = sorterMag->GetInvTimesSorted();
42  _nSamples = temp.size();
43  delete [] _invTimes;
44  _invTimes = new InputPixelType[_nSamples];
45  KWUtil::copyArrayToArray(_nSamples, _invTimes, temp.data_block());
46  } else {
47  throw std::runtime_error("Mag and Pha inv times are not equal");
48  }
49 
50  _imageMag = sorterMag->GetOutput();
51  _imagePha = sorterPha->GetOutput();
52 
53  if (_filesT1.size() > 0) {
54  typename itk::ImageFileReader<Image2dType>::Pointer reader = itk::ImageFileReader<Image2dType>::New();
55  reader->SetFileName(_filesT1.at(0));
56  reader->Update();
57  _imageT1color = reader->GetOutput();
58  }
59 
60  if (_filesT1.size() > 1) {
61  typename itk::ImageFileReader<Image2dType>::Pointer reader = itk::ImageFileReader<Image2dType>::New();
62  reader->SetFileName(_filesT1.at(1));
63  reader->Update();
64  _imageT1grey = reader->GetOutput();
65  }
66 
67  if (_filesFitparams.size() > 0) {
68  typename itk::ImageFileReader<Image2dType>::Pointer reader = itk::ImageFileReader<Image2dType>::New();
69  reader->SetFileName(_filesFitparams.at(0));
70  reader->Update();
71  _imageR2 = reader->GetOutput();
72  }
73 
74  if (_filesFitparams.size() > 1) {
75  typename itk::ImageFileReader<Image2dType>::Pointer reader = itk::ImageFileReader<Image2dType>::New();
76  reader->SetFileName(_filesFitparams.at(1));
77  reader->Update();
78  _imageA = reader->GetOutput();
79  }
80 
81  if (_filesFitparams.size() > 2) {
82  typename itk::ImageFileReader<Image2dType>::Pointer reader = itk::ImageFileReader<Image2dType>::New();
83  reader->SetFileName(_filesFitparams.at(2));
84  reader->Update();
85  _imageB = reader->GetOutput();
86  }
87 
88  if (_filesFitparams.size() > 3) {
89  typename itk::ImageFileReader<Image2dType>::Pointer reader = itk::ImageFileReader<Image2dType>::New();
90  reader->SetFileName(_filesFitparams.at(3));
91  reader->Update();
92  _imageT1star = reader->GetOutput();
93  }
94 
95  if (_filesFitparams.size() > 4) {
96  typename itk::ImageFileReader<Image2dType>::Pointer reader = itk::ImageFileReader<Image2dType>::New();
97  reader->SetFileName(_filesFitparams.at(4));
98  reader->Update();
99  _imageNShmolliSamplesUsed = reader->GetOutput();
100  }
101 
102  if (_filesFitparams.size() > 5) {
103  typename itk::ImageFileReader<Image2dType>::Pointer reader = itk::ImageFileReader<Image2dType>::New();
104  reader->SetFileName(_filesFitparams.at(5));
105  reader->Update();
106  _imageChiSqrt = reader->GetOutput();
107  }
108 
109  if (_filesFitparams.size() > 6) {
110  typename itk::ImageFileReader<Image2dType>::Pointer reader = itk::ImageFileReader<Image2dType>::New();
111  reader->SetFileName(_filesFitparams.at(6));
112  reader->Update();
113  _imageSnr = reader->GetOutput();
114  }
115 
116  return 0; // EXIT_SUCCESS
117  }
118 
119  template< typename MeasureType >
120  int
121  OriginalShmolliDicomReader<MeasureType>
122  ::copyFromImage(MeasureType* array, const typename Image3dType::Pointer image, const typename Image3dType::IndexType index){
123 
124  typename Image3dType::SizeType size = image->GetLargestPossibleRegion().GetSize();
125  typename Image3dType::IndexType tempIndex = index;
126 
127  for (int i = 0; i < size[2]; ++i){
128  tempIndex[2] = i;
129  array[i] = image->GetPixel(tempIndex);
130  }
131 
132  return 0; //EXIT_SUCCESS
133  }
134 
135 } // namespace Ox
136 
137 
138 #endif //Tomato_OxOriginalShmolliDicomReader_H
Definition: OxCalculator.h:19