532 {
534 if (!std::filesystem::is_directory(folder))
535 {
536 if (output_messages)
537 {
538 std::cout <<
"ERROR: '" <<
folder <<
"' is not a valid folder." << std::endl;
539 }
540 return ret;
541 }
542 std::set<std::string> read_one_part_of_v1_cells;
543 int event_count = 0;
544 for (
const std::filesystem::path &
file : std::filesystem::directory_iterator(folder))
545 {
546 if ( max_events > 0 && event_count >= max_events &&
547 ret.geometry.size() > 0 && ret.noise.size() > 0 )
548 {
549 break;
550 }
551
552 const bool can_load_events = (
max_events < 0) || (event_count < max_events);
554
555 if (filter_function(filename))
556 {
557 continue;
558 }
559
560 auto check_error = [&](
const ErrorState & es,
const std::string &
str)
561 {
563 {
564 return false;
565 }
566 if (output_messages)
567 {
568 std::cout <<
"ERROR: '" <<
file <<
"' is not a valid " <<
str <<
" file (" << (
int) es <<
")." << std::endl;
569 }
570 return true;
571 };
572
573 auto output_loading_message = [&](
const std::string &
str)
574 {
575 if (output_messages)
576 {
577 std::cout <<
"Loaded " <<
str <<
" from '" <<
file <<
"'." << std::endl;
578 }
579 };
580
581 if (
file.extension() ==
".geometry")
582 {
583 if (!flo.load_geometry)
584 {
585 continue;
586 }
589 {
590 continue;
591 }
592 ret.geometry[
filename] = std::move(tempgeo);
593 output_loading_message("geometry");
594 }
595 else if (
file.extension() ==
".cellinfo")
596 {
597 if (!flo.load_cell_info || !can_load_events)
598 {
599 continue;
600 }
603 {
604 continue;
605 }
606 ret.cell_info[
filename] = std::move(tempcellinfo);
607 output_loading_message("cell info");
608 if (ret.cluster_info.count(filename) > 0 || !flo.load_cluster_info)
609 {
610 ++event_count;
611 }
612 }
613 else if (
file.extension() ==
".clusterinfo")
614 {
615 if (!flo.load_cluster_info || !can_load_events)
616 {
617 continue;
618 }
621 {
622 continue;
623 }
624 ret.cluster_info[
filename] = std::move(tempclu);
625 output_loading_message("cluster info");
626 if (ret.cell_info.count(filename) > 0 || !flo.load_cell_info)
627 {
628 ++event_count;
629 }
630 }
631 else if (
file.extension() ==
".noise")
632 {
633 if (!flo.load_noise)
634 {
635 continue;
636 }
639 {
640 continue;
641 }
642 ret.noise[
filename] = std::move(tempnois);
643 output_loading_message("noise");
644 }
645 }
646 return ret;
647 }
SimpleHolder< T, MemoryContext::CPU, true > CPU_object
Holds an object of type T in CPU memory.