7 #ifndef Tomato_OXTESTImage_HXX 8 #define Tomato_OXTESTImage_HXX 10 #include "CmakeConfigForTomato.h" 16 template<
typename MeasureType >
17 TestImage<MeasureType>
18 ::TestImage(
int nRows,
int nCols, std::vector <std::string> filesPaths, std::vector<int> invTimesOrder){
19 init(nRows, nCols, filesPaths, invTimesOrder);
22 template<
typename MeasureType >
23 TestImage<MeasureType>
24 ::TestImage(
int nRows,
int nCols, std::vector <std::string> filesPaths){
25 std::vector<int> invTimesOrder;
26 init(nRows, nCols, filesPaths, invTimesOrder);
29 template<
typename MeasureType >
31 TestImage<MeasureType>
32 ::init(
int nRows,
int nCols, std::vector <std::string> filesPaths, std::vector<int> invTimesOrder) {
35 size_t nTissues = filesPaths.size();
36 std::vector< TestData <MeasureType> > TestDataVector;
39 if (nTissues > _nCols){
40 throw std::runtime_error(
"Give me more nCols or less tissues");
44 for (
size_t i = 0; i < nTissues; ++i){
45 TestDataVector.push_back(TestData<MeasureType>((
char*)filesPaths.at(i).c_str()));
49 for (
size_t i = 1; i < nTissues; ++i){
50 if(!(TestDataVector.at(i).getInvTimes() == TestDataVector.at(i-1).getInvTimes())){
51 throw std::runtime_error(
"InvTimes are different");
54 std::vector<MeasureType> invTimesWithoutOrder = TestDataVector.at(0).getInvTimes();
55 _nSamples = (int)invTimesWithoutOrder.size();
57 if (invTimesOrder.empty()){
59 invTimesOrder = std::vector<int>(_nSamples);
60 for (
int i = 0; i < _nSamples; ++i){
61 invTimesOrder.at(i) = i;
65 if (invTimesOrder.size() != (size_t)_nSamples){
66 throw std::runtime_error(
"invTimesOrder size is different than the input files nSamples");
69 _invTimes = std::vector <MeasureType>(_nSamples);
70 for (
int i = 0; i < _nSamples; ++i){
71 _invTimes.at(i) = invTimesWithoutOrder.at(invTimesOrder.at(i));
74 _invTimesOrder = invTimesOrder;
77 _imageMag =
new MeasureType[_nCols*_nRows*_nSamples];
78 _imagePha =
new MeasureType[_nCols*_nRows*_nSamples];
79 _imageResultsMolli =
new MeasureType[_nRows*_nCols*3];
80 _imageResultsShmolli =
new MeasureType[_nRows*_nCols*3];
83 std::vector<int> ranges = KWUtil::bounds<int>((int)nTissues, _nCols);
92 for (
int iSample = 0; iSample < _nSamples; ++iSample){
94 for (
int iRow = 0; iRow < _nRows; ++iRow) {
95 for (
int iTissue = 0; iTissue < ranges.size()-1; ++iTissue) {
97 for (
int iCol = ranges[iTissue]; iCol < ranges[iTissue+1]; ++iCol) {
98 int invTimesIdx = _invTimesOrder.at(iSample);
100 int index = iSample * (nRows * nCols) + iRow * nCols + iCol;
101 _imageMag[index] = TestDataVector.at(iTissue).getSignalMagPtr()[invTimesIdx];
102 _imagePha[index] = TestDataVector.at(iTissue).getSignalPhaPtr()[invTimesIdx];
108 for (
int iDim = 0; iDim < 3; ++iDim){
110 for (
int iRow = 0; iRow < _nRows; ++iRow) {
111 for (
int iTissue = 0; iTissue < ranges.size()-1; ++iTissue) {
113 for (
int iCol = ranges[iTissue]; iCol < ranges[iTissue+1]; ++iCol) {
115 int index = iDim * (nRows * nCols) + iRow * nCols + iCol;
116 _imageResultsMolli[index] = TestDataVector.at(iTissue).getResultsMolliPtr()[iDim];
117 _imageResultsShmolli[index] = TestDataVector.at(iTissue).getResultsShmolliPtr()[iDim];
125 template<
typename MeasureType >
126 TestImage<MeasureType>
130 delete [] _imageResultsMolli;
131 delete [] _imageResultsShmolli;
134 template<
typename MeasureType >
135 std::vector<MeasureType>
136 TestImage<MeasureType>
137 ::getInvTimes()
const {
141 template<
typename MeasureType >
143 TestImage<MeasureType>
145 return &_invTimes.at(0);
149 template<
typename MeasureType >
151 TestImage<MeasureType>
152 ::getImageMagPtr()
const {
156 template<
typename MeasureType >
158 TestImage<MeasureType>
159 ::getImagePhaPtr()
const {
163 template<
typename MeasureType >
165 TestImage<MeasureType>
166 ::getImageResultsMolliPtr()
const {
167 return _imageResultsMolli;
170 template<
typename MeasureType >
172 TestImage<MeasureType>
173 ::getImageResultsShmolliPtr()
const {
174 return _imageResultsShmolli;
180 #endif //Tomato_OXTESTImage_HXX Definition: OxCalculator.h:19