Medical Imaging Interaction Toolkit  2025.12.02
Medical Imaging Interaction Toolkit
QmitkDataGeneratorBase.h
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 #ifndef QmitkDataGeneratorBase_h
14 #define QmitkDataGeneratorBase_h
15 
16 #include <mutex>
17 
18 //QT
19 #include <QObject>
20 
21 //MITK
22 #include <mitkDataStorage.h>
23 
25 
27 
42 {
43  Q_OBJECT
44 public:
47 
49 
51 
52  mitk::DataStorage::Pointer GetDataStorage() const;
53 
58  bool GetAutoUpdate() const;
59 
63  bool IsGenerating() const;
64 
69  bool Generate() const;
70 
72  virtual bool IsValidResultAvailable(const mitk::DataNode* imageNode, const mitk::DataNode* roiNode) const = 0;
73 
74 public slots:
77 
78  void SetAutoUpdate(bool autoUpdate);
79 
80 protected slots:
82  void OnJobError(QString error, const QmitkDataGenerationJobBase* failedJob) const;
85 
86 signals:
87 
90  void DataGenerationStarted(const mitk::DataNode* imageNode, const mitk::DataNode* roiNode, const QmitkDataGenerationJobBase* job) const;
91 
94  void NewDataAvailable(mitk::DataStorage::SetOfObjects::ConstPointer data) const;
95 
98  void GenerationFinished() const;
99 
102  void JobError(QString error, const QmitkDataGenerationJobBase* failedJob) const;
103 
104 protected:
109  QmitkDataGeneratorBase(mitk::DataStorage::Pointer storage, QObject* parent = nullptr);
110  QmitkDataGeneratorBase(QObject* parent = nullptr);
111 
112  using InputPairVectorType = std::vector<std::pair<mitk::DataNode::ConstPointer, mitk::DataNode::ConstPointer>>;
113 
115  virtual bool ChangedNodeIsRelevant(const mitk::DataNode* changedNode) const = 0;
122  virtual void IndicateFutureResults(const mitk::DataNode* imageNode, const mitk::DataNode* roiNode) const = 0;
130  virtual std::pair<QmitkDataGenerationJobBase*,mitk::DataNode::Pointer> GetNextMissingGenerationJob(const mitk::DataNode* imageNode, const mitk::DataNode* roiNode) const =0;
133  virtual void RemoveObsoleteDataNodes(const mitk::DataNode* imageNode, const mitk::DataNode* roiNode) const = 0;
135  virtual mitk::DataNode::Pointer PrepareResultForStorage(const std::string& label, mitk::BaseData* result, const QmitkDataGenerationJobBase* job) const = 0;
136 
138  static mitk::DataNode::Pointer CreateWIPDataNode(mitk::BaseData* dataDummy, const std::string& nodeName);
139 
142 
144  std::string GetPairDescription(const InputPairVectorType::value_type& imageAndSeg) const;
145 
147  bool DoGenerate() const;
148 
151 
153 
154  bool m_AutoUpdate = false;
155 
156  mutable std::mutex m_DataMutex;
157 
159  mutable itk::TimeStamp m_GenerationTime;
160 
161 private:
164  mutable bool m_InGenerate = false;
166  mutable bool m_RestartGeneration = false;
168  mutable bool m_WIP = false;
170  mutable bool m_AddingToStorage = false;
171 
173  void NodeAddedOrModified(const mitk::DataNode* node);
174 
175  unsigned long m_DataStorageDeletedTag;
176 };
177 
178 #endif
#define MITKIMAGESTATISTICSUI_EXPORT
QmitkDataGenerationJobBase Base class for generation jobs used by QmitkDataGenerationBase and derived...
std::map< std::string, mitk::BaseData::Pointer > ResultMapType
QmitkDataGeneratorBase BaseClass that implements the organization of (statistic) data generation for ...
mitk::WeakPointer< mitk::DataStorage > m_Storage
virtual bool ChangedNodeIsRelevant(const mitk::DataNode *changedNode) const =0
void NewDataAvailable(mitk::DataStorage::SetOfObjects::ConstPointer data) const
Signal that is emitted if new final data is produced.
void SetAutoUpdate(bool autoUpdate)
QmitkDataGenerationJobBase::ResultMapType JobResultMapType
QmitkDataGeneratorBase(QObject *parent=nullptr)
std::string GetPairDescription(const InputPairVectorType::value_type &imageAndSeg) const
mitk::DataStorage::Pointer GetDataStorage() const
virtual ~QmitkDataGeneratorBase()
virtual mitk::DataNode::Pointer PrepareResultForStorage(const std::string &label, mitk::BaseData *result, const QmitkDataGenerationJobBase *job) const =0
virtual bool IsValidResultAvailable(const mitk::DataNode *imageNode, const mitk::DataNode *roiNode) const =0
bool DoGenerate() const
void OnFinalResultsAvailable(JobResultMapType results, const QmitkDataGenerationJobBase *job) const
bool IsGenerating() const
void GenerationFinished() const
Signal that is emitted if all jobs are finished and everything is up to date.
void JobError(QString error, const QmitkDataGenerationJobBase *failedJob) const
Signal that is emitted in case of job errors.
void EnsureRecheckingAndGeneration() const
virtual void RemoveObsoleteDataNodes(const mitk::DataNode *imageNode, const mitk::DataNode *roiNode) const =0
virtual void IndicateFutureResults(const mitk::DataNode *imageNode, const mitk::DataNode *roiNode) const =0
void DataGenerationStarted(const mitk::DataNode *imageNode, const mitk::DataNode *roiNode, const QmitkDataGenerationJobBase *job) const
Signal that is emitted if a data generation job is started to generate outdated/inexistent data.
QmitkDataGeneratorBase(const QmitkDataGeneratorBase &other)=delete
InputPairVectorType FilterImageROICombinations(InputPairVectorType &&imageROICombinations) const
bool GetAutoUpdate() const
void SetDataStorage(mitk::DataStorage *storage)
std::vector< std::pair< mitk::DataNode::ConstPointer, mitk::DataNode::ConstPointer > > InputPairVectorType
static mitk::DataNode::Pointer CreateWIPDataNode(mitk::BaseData *dataDummy, const std::string &nodeName)
QmitkDataGeneratorBase & operator=(const QmitkDataGeneratorBase &other)=delete
QmitkDataGeneratorBase(mitk::DataStorage::Pointer storage, QObject *parent=nullptr)
Constructor.
void OnJobError(QString error, const QmitkDataGenerationJobBase *failedJob) const
virtual std::pair< QmitkDataGenerationJobBase *, mitk::DataNode::Pointer > GetNextMissingGenerationJob(const mitk::DataNode *imageNode, const mitk::DataNode *roiNode) const =0
Is called to generate the next job instance that needs to be done and is associated dummy node in ord...
virtual InputPairVectorType GetAllImageROICombinations() const =0
Base of all data objects.
Definition: mitkBaseData.h:44
Class for nodes of the DataTree.
Definition: mitkDataNode.h:64
Data management class that handles 'was created by' relations.