Medical Imaging Interaction Toolkit  2018.4.99-389bf124
Medical Imaging Interaction Toolkit
mitkModelFitProviderBase.tpp
Go to the documentation of this file.
1 /*============================================================================
2 
3 The Medical Imaging Interaction Toolkit (MITK)
4 
5 Copyright (c) German Cancer Research Center (DKFZ)
6 All rights reserved.
7 
8 Use of this source code is governed by a 3-clause BSD license that can be
9 found in the LICENSE file.
10 
11 ============================================================================*/
12 
13 #include <mitkModelFitProviderBase.h>
14 #include <mitkExceptionMacro.h>
15 
16 #include <mitkExtractTimeGrid.h>
17 #include <mitkModelFitInfo.h>
18 
19 #include <usGetModuleContext.h>
20 #include <usModuleContext.h>
21 #include <usPrototypeServiceFactory.h>
22 
23 namespace mitk
24 {
25  template<class TModelFactory>
26  class ModelFitProviderBase<TModelFactory>::Impl
27  {
28  public:
29  Impl() : m_Ranking(0), m_ReferenceFactory(TModelFactory::New())
30  {
31  };
32 
33  Impl(const Impl &other) = default;
34 
35  void SetRanking(int ranking)
36  {
37  m_Ranking = ranking;
38  };
39 
40  int GetRanking() const
41  {
42  return m_Ranking;
43  };
44 
45  us::ServiceRegistration<IModelFitProvider> m_Reg;
46  int m_Ranking;
47  using ModelFactoryType = TModelFactory;
48 
49  typename ModelFactoryType::Pointer m_ReferenceFactory;
50  };
51 
52  template<class TModelFactory>
53  ModelFitProviderBase<TModelFactory>::ModelFitProviderBase() : d()
54  {
55  }
56 
57  template<class TModelFactory>
58  ModelFitProviderBase<TModelFactory>::~ModelFitProviderBase()
59  {
60  UnregisterService();
61  }
62 
63  template<class TModelFactory>
64  ModelFitProviderBase<TModelFactory>::ModelFitProviderBase(const ModelFitProviderBase &other) : IModelFitProvider(), d(new Impl(*other.d.get()))
65  {
66  }
67 
68  template<class TModelFactory>
69  itk::SmartPointer<ModelFactoryBase>
70  ModelFitProviderBase<TModelFactory>::GenerateFactory() const
71  {
72  return TModelFactory::New().GetPointer();
73  };
74 
75  template<class TModelFactory>
76  ModelBase::TimeGridType
77  ModelFitProviderBase<TModelFactory>::GetVariableGrid(const modelFit::ModelFitInfo* fitInfo) const
78  {
79  if (!fitInfo)
80  {
81  mitkThrow() << "Error. Cannot get variable grid for model. Passed model fit info is null.";
82  }
83 
84  if (!fitInfo->inputImage.IsNotNull())
85  {
86  mitkThrow() << "Error. Cannot get variable grid for model. Passed model fit info has no input image.";
87  }
88  return mitk::ExtractTimeGrid(fitInfo->inputImage);
89  };
90 
91 
92  template<class TModelFactory>
93  us::ServiceRegistration<IModelFitProvider>
94  ModelFitProviderBase<TModelFactory>::RegisterService(us::ModuleContext *context)
95  {
96  if (d)
97  return d->m_Reg;
98 
99  if (context == nullptr)
100  {
101  context = us::GetModuleContext();
102  }
103 
104  d.reset(new Impl());
105 
106  us::ServiceProperties props = this->GetServiceProperties();
107  d->m_Reg = context->RegisterService<IModelFitProvider>(this, props);
108  return d->m_Reg;
109  }
110 
111  template<class TModelFactory>
112  void
113  ModelFitProviderBase<TModelFactory>::UnregisterService()
114  {
115  try
116  {
117  d->m_Reg.Unregister();
118  }
119  catch (const std::exception &)
120  {
121  }
122  }
123 
124  template<class TModelFactory>
125  us::ServiceProperties
126  ModelFitProviderBase<TModelFactory>::GetServiceProperties() const
127  {
128  us::ServiceProperties result;
129 
130  result[IModelFitProvider::PROP_MODEL_CLASS_ID()] = this->d->m_ReferenceFactory->GetClassID();
131  result[IModelFitProvider::PROP_MODEL_TYPE()] = this->d->m_ReferenceFactory->GetModelType();
132  result[us::ServiceConstants::SERVICE_RANKING()] = this->GetRanking();
133  return result;
134  }
135 
136  template<class TModelFactory>
137  void
138  ModelFitProviderBase<TModelFactory>::SetRanking(int ranking) { d->SetRanking(ranking); }
139 
140  template<class TModelFactory>
141  int
142  ModelFitProviderBase<TModelFactory>::GetRanking() const { return d->GetRanking(); }
143 
144 }