| 13 | #include <mitkModelFitFunctorBase.h> |
| 14 | |
| 15 | mitk::ModelFitFunctorBase::OutputPixelArrayType |
| 16 | mitk::ModelFitFunctorBase:: |
| 17 | Compute(const InputPixelArrayType& value, const ModelBase* model, |
| 18 | const ModelBase::ParametersType& initialParameters) const |
| 19 | { |
| 20 | if (!model) |
| 21 | { |
| 22 | itkExceptionMacro("Cannot compute fit. Passed model is not defined."); |
| 23 | } |
| 24 | |
| 25 | if (model->GetNumberOfParameters() != initialParameters.Size()) |
| 26 | { |
| 27 | itkExceptionMacro("Cannot compute fit. Parameter count of passed model and passed initial parameters differ. Model parameter count: " |
| 28 | << model->GetNumberOfParameters() << "; Initial parameters: " << initialParameters); |
| 29 | } |
| 30 | |
| 31 | SignalType sample(value.size()); |
| 32 | |
| 33 | for (SignalType::SizeValueType i = 0; i < sample.Size(); ++i) |
| 34 | { |
| 35 | sample[i] = value [i]; |
| 36 | } |
| 37 | |
| 38 | DebugParameterMapType debugParams; |
| 39 | ParameterNamesType debugNames; |
| 40 | if (this->m_DebugParameterMaps) |
| 41 | { |
| 42 | debugNames = this->GetDebugParameterNames(); |
| 43 | } |
| 44 | |
| 45 | ParametersType fittedParameters = DoModelFit(sample, model, initialParameters, debugParams); |
| 46 | |
| 47 | OutputPixelArrayType derivedParameters = this->GetDerivedParameters(model, fittedParameters); |
| 48 | |
| 49 | OutputPixelArrayType criteria = this->GetCriteria(model, fittedParameters, sample); |
| 50 | |
| 51 | OutputPixelArrayType evaluationParameters = this->GetEvaluationParameters(model, fittedParameters, |
| 52 | sample); |
| 53 | |
| 54 | if (criteria.size() != this->GetCriterionNames().size()) |
| 55 | { |
| 56 | itkExceptionMacro("ModelFitInfo implementation seems to be inconsistent. Number of criterion values is not equal to number of criterion names."); |
| 57 | } |
| 58 | |
| 59 | OutputPixelArrayType result(fittedParameters.Size() + derivedParameters.size() + criteria.size() + |
| 60 | evaluationParameters.size() + debugNames.size()); |
| 61 | |
| 62 | for (ParametersType::SizeValueType i = 0; i < fittedParameters.Size(); ++i) |
| 63 | { |
| 64 | result[i] = fittedParameters[i]; |
| 65 | } |
| 66 | |
| 67 | OutputPixelArrayType::size_type offset = fittedParameters.Size(); |
| 68 | |
| 69 | for (OutputPixelArrayType::size_type j = 0; j < derivedParameters.size(); ++j) |
| 70 | { |
| 71 | result[offset + j] = derivedParameters[j]; |
| 72 | } |
nothing calls this directly
no test coverage detected