@@ -665,6 +665,23 @@ bool Groom::run_alignment() {
665665 landmarks.push_back (get_landmarks (i, domain));
666666 }
667667
668+ // confirm that each subject has landmarks and has the same number of landmarks
669+ for (size_t i = 0 ; i < subjects.size (); i++) {
670+ if (landmarks[i]->GetNumberOfPoints () == 0 ) {
671+ SW_ERROR (
672+ " Unable to perform landmark-based alignment. Subject '{}' does not have landmarks defined for domain {}" ,
673+ subjects[i]->get_display_name (), domain);
674+ return false ;
675+ }
676+ if (i > 0 && landmarks[i]->GetNumberOfPoints () != landmarks[0 ]->GetNumberOfPoints ()) {
677+ SW_ERROR (
678+ " Unable to perform landmark-based alignment. Subject '{}' has a different number of landmarks than "
679+ " subject '{}'" ,
680+ subjects[i]->get_display_name (), subjects[0 ]->get_display_name ());
681+ return false ;
682+ }
683+ }
684+
668685 int reference_index = Groom::find_reference_landmarks (landmarks);
669686 params.set_alignment_reference_chosen (reference_index);
670687 params.save_to_project ();
@@ -960,7 +977,11 @@ Mesh Groom::get_mesh(int subject, int domain, bool transformed) {
960977vtkSmartPointer<vtkPoints> Groom::get_landmarks (int subject, int domain) {
961978 vtkSmartPointer<vtkPoints> vtk_points = vtkSmartPointer<vtkPoints>::New ();
962979 auto subjects = project_->get_subjects ();
963- auto path = subjects[subject]->get_landmarks_filenames ()[domain];
980+ auto landmarks_filenames = subjects[subject]->get_landmarks_filenames ();
981+ if (domain >= landmarks_filenames.size ()) {
982+ return vtk_points;
983+ }
984+ auto path = landmarks_filenames[domain];
964985
965986 std::ifstream in (path.c_str ());
966987 if (!in.good ()) {
0 commit comments