316 if (args.
find(
"config-file") != args.
end()) {
317 auto cfg_file = args.
at(
"config-file").as<fs::path>();
318 if (cfg_file !=
"" && !fs::exists(cfg_file)) {
319 throw Elements::Exception() <<
"The configuration file '" << cfg_file <<
"' does not exist";
329 config_manager.initialize(args);
332 auto memory_config = config_manager.getConfiguration<
MemoryConfig>();
334 memory_config.getTileSize(), memory_config.getTileMaxMemory());
370 auto prefetch = source_grouping->requiredProperties();
371 auto deblending_prefetch = deblending->requiredProperties();
372 prefetch.insert(deblending_prefetch.begin(), deblending_prefetch.end());
373 if (!prefetch.empty()) {
375 prefetcher->requestProperties(prefetch);
384 prefetcher->setNextStage(source_grouping);
387 partition->setNextStage(source_grouping);
390 source_grouping->setNextStage(deblending);
391 deblending->setNextStage(measurement);
394 logger.info() <<
"Writing output following measure order";
395 measurement->setNextStage(output);
397 logger.info() <<
"Writing output following segmentation order";
399 measurement->setNextStage(sorter);
400 sorter->setNextStage(output);
403 segmentation->Observable<SegmentationProgress>::addObserver(progress_mediator->getSegmentationObserver());
404 segmentation->Observable<SourceInterface>::addObserver(progress_mediator->getDetectionObserver());
405 deblending->Observable<SourceGroupInterface>::addObserver(progress_mediator->getDeblendingObserver());
406 measurement->Observable<SourceGroupInterface>::addObserver(progress_mediator->getMeasurementObserver());
421 const auto& detection_frames = config_manager.getConfiguration<
DetectionFrameConfig>().getDetectionFrames();
424 measurement->startThreads();
425 size_t prev_writen_rows = 0;
427 if (detection_frames.size() > 0) {
428 size_t frame_number = 0;
429 for (
auto& detection_frame : detection_frames) {
433 logger.info() <<
"Processing frame "
434 << frame_number <<
" / " << detection_frames.size() <<
" : " << detection_frame->getLabel();
435 segmentation->processFrame(detection_frame);
438 logger.error() <<
"Failed to process the frame! " << e.what();
439 measurement->stopThreads();
444 prefetcher->synchronize();
446 measurement->synchronizeThreads();
448 size_t nb_writen_rows = output->flush();
451 logger.info() << (nb_writen_rows - prev_writen_rows) <<
" sources detected in frame, " << nb_writen_rows <<
" total";
453 prev_writen_rows = nb_writen_rows;
458 auto assoc_mode_config = config_manager.getConfiguration<
AssocModeConfig>();
459 if (assoc_mode_config.getCatalogs().size() < 1) {
460 logger.error() <<
"No detection image and no assoc catalog";
461 measurement->stopThreads();
467 logger.info() <<
"Processing assoc catalog (no detection image)\n";
468 segmentation->processFrame(
nullptr);
471 logger.error() <<
"Failed to process the assoc catalog!\n" << e.what();
472 measurement->stopThreads();
477 prefetcher->synchronize();
479 measurement->synchronizeThreads();
481 size_t nb_writen_rows = output->flush();
484 logger.info() << (nb_writen_rows - prev_writen_rows) <<
" sources detected in catalog, " << nb_writen_rows <<
" total";
486 prev_writen_rows = nb_writen_rows;
492 measurement->stopThreads();
495 for (
auto& detection_frame : detection_frames) {
503 progress_mediator->done();
505 if (prev_writen_rows > 0) {
506 logger.info() <<
"total " << prev_writen_rows <<
" sources detected";
508 logger.info() <<
"NO SOURCES DETECTED";