Medical Imaging Interaction Toolkit  2026.06.00
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 
46 {
47  Q_OBJECT
48 public:
51 
53 
56 
61  mitk::DataStorage::Pointer GetDataStorage() const;
62 
72  bool GetAutoUpdate() const;
73 
82  bool IsGenerating() const;
83 
92  bool Generate() const;
93 
100  virtual bool IsValidResultAvailable(const mitk::DataNode* imageNode, const mitk::DataNode* roiNode) const = 0;
101 
102 public slots:
108 
113  void SetAutoUpdate(bool autoUpdate);
114 
115 protected slots:
121  void OnJobError(QString error, const QmitkDataGenerationJobBase* failedJob) const;
128 
129 signals:
130 
137  void DataGenerationStarted(const mitk::DataNode* imageNode, const mitk::DataNode* roiNode, const QmitkDataGenerationJobBase* job) const;
138 
143  void NewDataAvailable(mitk::DataStorage::SetOfObjects::ConstPointer data) const;
144 
148  void GenerationFinished() const;
149 
155  void JobError(QString error, const QmitkDataGenerationJobBase* failedJob) const;
156 
157 protected:
163  QmitkDataGeneratorBase(mitk::DataStorage::Pointer storage, QObject* parent = nullptr);
168  QmitkDataGeneratorBase(QObject* parent = nullptr);
169 
171  using InputPairVectorType = std::vector<std::pair<mitk::DataNode::ConstPointer, mitk::DataNode::ConstPointer>>;
172 
178  virtual bool ChangedNodeIsRelevant(const mitk::DataNode* changedNode) const = 0;
196  virtual void IndicateFutureResults(const mitk::DataNode* imageNode, const mitk::DataNode* roiNode) const = 0;
209  virtual std::pair<QmitkDataGenerationJobBase*,mitk::DataNode::Pointer> GetNextMissingGenerationJob(const mitk::DataNode* imageNode, const mitk::DataNode* roiNode) const =0;
218  virtual void RemoveObsoleteDataNodes(const mitk::DataNode* imageNode, const mitk::DataNode* roiNode) const = 0;
226  virtual mitk::DataNode::Pointer PrepareResultForStorage(const std::string& label, mitk::BaseData* result, const QmitkDataGenerationJobBase* job) const = 0;
227 
239  static mitk::DataNode::Pointer CreateWIPDataNode(mitk::BaseData* dataDummy, const std::string& nodeName);
240 
247 
253  std::string GetPairDescription(const InputPairVectorType::value_type& imageAndSeg) const;
254 
259  bool DoGenerate() const;
260 
265 
267 
268  bool m_AutoUpdate = false;
269 
270  mutable std::mutex m_DataMutex;
271 
273  mutable itk::TimeStamp m_GenerationTime;
274 
275 private:
278  mutable bool m_InGenerate = false;
280  mutable bool m_RestartGeneration = false;
282  mutable bool m_WIP = false;
284  mutable bool m_AddingToStorage = false;
285 
287  void NodeAddedOrModified(const mitk::DataNode* node);
288 
289  unsigned long m_DataStorageDeletedTag;
290 };
291 
292 #endif
#define MITKIMAGESTATISTICSUI_EXPORT
Base class for background data generation jobs used by QmitkDataGeneratorBase and derived classes.
std::map< std::string, mitk::BaseData::Pointer > ResultMapType
Map type for results produced by the job.
Base class that orchestrates asynchronous data generation for image/ROI pairs.
mitk::WeakPointer< mitk::DataStorage > m_Storage
virtual bool ChangedNodeIsRelevant(const mitk::DataNode *changedNode) const =0
Determines whether a changed data node is relevant and should trigger a regeneration.
void NewDataAvailable(mitk::DataStorage::SetOfObjects::ConstPointer data) const
Emitted when new final result data has been produced and added to the data storage.
void SetAutoUpdate(bool autoUpdate)
Enables or disables automatic update on data changes.
QmitkDataGenerationJobBase::ResultMapType JobResultMapType
Alias for the result map type produced by generation jobs.
QmitkDataGeneratorBase(QObject *parent=nullptr)
Constructs a generator without an initial data storage.
std::string GetPairDescription(const InputPairVectorType::value_type &imageAndSeg) const
Returns a human-readable description of an image/ROI pair for debug logging.
mitk::DataStorage::Pointer GetDataStorage() const
Returns the data storage used by this generator.
virtual ~QmitkDataGeneratorBase()
virtual mitk::DataNode::Pointer PrepareResultForStorage(const std::string &label, mitk::BaseData *result, const QmitkDataGenerationJobBase *job) const =0
Wraps a generation result in a data node suitable for storage.
virtual bool IsValidResultAvailable(const mitk::DataNode *imageNode, const mitk::DataNode *roiNode) const =0
Checks whether a valid final result exists for the given image and ROI.
bool DoGenerate() const
Core generation loop that checks validity and launches jobs for all image/ROI pairs.
void OnFinalResultsAvailable(JobResultMapType results, const QmitkDataGenerationJobBase *job) const
Handles completed job results, adds them to the data storage, and emits NewDataAvailable.
bool IsGenerating() const
Returns whether data generation jobs are currently running or pending.
void GenerationFinished() const
Emitted when all generation jobs have finished and all results are up to date.
void JobError(QString error, const QmitkDataGenerationJobBase *failedJob) const
Emitted when a generation job encounters an error.
void EnsureRecheckingAndGeneration() const
Ensures generation is (re)started, either immediately or by flagging a restart if already running.
virtual void RemoveObsoleteDataNodes(const mitk::DataNode *imageNode, const mitk::DataNode *roiNode) const =0
Removes obsolete result nodes for the given image/ROI pair from the data storage.
virtual void IndicateFutureResults(const mitk::DataNode *imageNode, const mitk::DataNode *roiNode) const =0
Adds placeholder nodes and WIP dummy data to the data storage for missing or outdated results.
void DataGenerationStarted(const mitk::DataNode *imageNode, const mitk::DataNode *roiNode, const QmitkDataGenerationJobBase *job) const
Emitted when a data generation job is started for outdated or missing data.
QmitkDataGeneratorBase(const QmitkDataGeneratorBase &other)=delete
InputPairVectorType FilterImageROICombinations(InputPairVectorType &&imageROICombinations) const
Filters image/ROI pairs to only include those whose nodes exist in the data storage.
bool GetAutoUpdate() const
Returns whether automatic updates are enabled.
bool Generate() const
Checks data validity and triggers generation of missing or outdated data.
void SetDataStorage(mitk::DataStorage *storage)
Sets the data storage for monitoring, storing WIP placeholders, and final results.
std::vector< std::pair< mitk::DataNode::ConstPointer, mitk::DataNode::ConstPointer > > InputPairVectorType
Vector of image/ROI node pairs used as input for generation.
static mitk::DataNode::Pointer CreateWIPDataNode(mitk::BaseData *dataDummy, const std::string &nodeName)
Creates a WIP placeholder data node for future results.
QmitkDataGeneratorBase & operator=(const QmitkDataGeneratorBase &other)=delete
QmitkDataGeneratorBase(mitk::DataStorage::Pointer storage, QObject *parent=nullptr)
Constructs a generator with the given data storage.
void OnJobError(QString error, const QmitkDataGenerationJobBase *failedJob) const
Handles error signals from generation jobs and re-emits JobError.
virtual std::pair< QmitkDataGenerationJobBase *, mitk::DataNode::Pointer > GetNextMissingGenerationJob(const mitk::DataNode *imageNode, const mitk::DataNode *roiNode) const =0
Returns the next generation job and its associated placeholder node.
virtual InputPairVectorType GetAllImageROICombinations() const =0
Returns all image/ROI pairs for which data generation is needed.
Base class of all data objects.
Definition: mitkBaseData.h:60
Central node class of the MITK data tree, associating a data object with properties and mappers.
Definition: mitkDataNode.h:72
Abstract data management class that organizes DataNode objects in a directed acyclic graph.