50 mCores = this->createCores(algo, par, createBModeWhenAngio);
52 std::vector<bool> angio;
53 for (
unsigned i=0; i<mCores.size(); ++i)
54 angio.push_back(mCores[i]->getInputParams().mAngio);
56 std::vector<cx::ProcessedUSInputDataPtr> processedInput = preprocessor->createProcessedInput(angio);
58 for (
unsigned i=0; i<mCores.size(); ++i)
60 mCores[i]->initialize(processedInput[i], preprocessor->getOutputVolumeParams());
62 for (
unsigned i=0; i<mCores.size(); ++i)
64 mCores[i]->reconstruct();
72 reportError(
"Reconstruct Executer can only be run once. Ignoring start.");
81 createBModeWhenAngio =
false;
83 mCores = this->createCores(algo, par, createBModeWhenAngio);
88 this->launch(algorithm);
93 std::vector<cx::ImagePtr> retval;
94 if (mPipeline && !mPipeline->isFinished())
97 for (
unsigned i=0; i<mCores.size(); ++i)
98 retval.push_back(mCores[i]->getOutput());
112 cx::CompositeTimedAlgorithmPtr ReconstructionExecuter::assembleReconstructionPipeline(std::vector<ReconstructCorePtr> cores, ReconstructCore::InputParams par, USReconstructInputData fileData)
120 if(this->canCoresRunInParallel(cores) && cores.size()>1)
123 pipeline->append(parallel);
125 reportDebug(
"Running reconstruction cores in parallel.");
128 for (
unsigned i=0; i<cores.size(); ++i)
134 bool ReconstructionExecuter::canCoresRunInParallel(std::vector<ReconstructCorePtr> cores)
136 bool parallelizable =
true;
138 std::vector<ReconstructCorePtr>::iterator it;
139 for(it = cores.begin(); it != cores.end(); ++it)
140 parallelizable = parallelizable && (it->get()->getInputParams().mAlgorithmUid ==
"PNN");
142 return parallelizable;
145 ReconstructPreprocessorPtr ReconstructionExecuter::createPreprocessor(ReconstructCore::InputParams par, USReconstructInputData fileData)
148 retval->initialize(par, fileData);
153 std::vector<ReconstructCorePtr> ReconstructionExecuter::createCores(ReconstructionMethodService* algo, ReconstructCore::InputParams par,
bool createBModeWhenAngio)
155 std::vector<ReconstructCorePtr> retval;
157 if (createBModeWhenAngio && par.mAngio)
161 retval.push_back(core);
162 core = this->createCore(par, algo);
164 retval.push_back(core);
171 retval.push_back(core);
177 ReconstructCorePtr ReconstructionExecuter::createCore(ReconstructCore::InputParams par, ReconstructionMethodService* algo)
180 retval->initialize(par, algo);
184 ReconstructCorePtr ReconstructionExecuter::createBModeCore(ReconstructCore::InputParams par, ReconstructionMethodService* algo)
188 par.mTransferFunctionPreset =
"US B-Mode";
189 retval->initialize(par, algo);
boost::shared_ptr< class CompositeTimedAlgorithm > CompositeTimedAlgorithmPtr
void reportError(QString msg)
Abstract interface for reconstruction algorithm.
static ThreadedTimedReconstructCorePtr create(PatientModelServicePtr patientModelService, VisualizationServicePtr visualizationService, ReconstructCorePtr reconstructer)
void startReconstruction(ReconstructionMethodService *algo, ReconstructCore::InputParams par, USReconstructInputData fileData, bool createBModeWhenAngio)
void reconstructAboutToStart()
emitted before reconstruction threads are fired
boost::shared_ptr< class TimedBaseAlgorithm > TimedAlgorithmPtr
static ThreadedTimedReconstructPreprocessorPtr create(PatientModelServicePtr patientModelService, ReconstructPreprocessorPtr input, std::vector< ReconstructCorePtr > cores)
std::vector< cx::ImagePtr > getResult()
void reportWarning(QString msg)
boost::shared_ptr< class ReconstructPreprocessor > ReconstructPreprocessorPtr
void startNonThreadedReconstruction(ReconstructionMethodService *algo, ReconstructCore::InputParams par, USReconstructInputData fileData, bool createBModeWhenAngio)
boost::shared_ptr< CompositeParallelTimedAlgorithm > CompositeParallelTimedAlgorithmPtr
void reconstructFinished()
cx::TimedAlgorithmPtr getThread()
Return the currently reconstructing thread object.
boost::shared_ptr< CompositeSerialTimedAlgorithm > CompositeSerialTimedAlgorithmPtr
boost::shared_ptr< class ReconstructCore > ReconstructCorePtr
void reportDebug(QString msg)
void reconstructStarted()