Computing distances via script on .xsd file

Greetings

I am working on a script that would take into input a .xsd file, which is the result of a DPD simulation (the final frame). It should evaluate a centroid by selecting the solute bead which is the closest to the center of the lattice box, than it computes the distances from this centroid to all solvent beads present in the simulation. 
The centroid is defined just fine, but it fails here at computing the distances, without any particular error message. I just take their coordinates and calculates euclidian distance, but my %computedDistances remain empty.
 

Does someone know what could be the reasons of this ? Did I not define the sets in a proper manner for distance monitors?

 

Below the script : 



"#!/usr/bin/perl -w
use strict;
use warnings;
use MaterialsScript qw(:all);

# Load the initial .xsd document
my \$meso = \$Documents{"File.xsd"};
die "Error: Unable to open .xsd\n" unless defined \$meso;

# Create solute and solvent sets
my (\$soluteSet, \$solventSet) = createSoluteSolventSets(\$meso->UnitCell->Beads, \$meso);

sub createSoluteSolventSets {
   my (\$beads, \$meso) = @_;

   my \$soluteBeadCounter = 0;
   my \$solventBeadCounter = 0;

   my \$soluteSet = \$meso->CreateSet("Solute", []);
   my \$solventSet = \$meso->CreateSet("Solvent", []);

   foreach my \$bead (@\$beads) {
       if (\$bead->Name =~ /^A_\d+/) {
           \$soluteSet->Add(\$bead);
           ++\$soluteBeadCounter;
       } elsif (\$bead->Name =~ /^(B)\d*\$/) {
           \$solventSet->Add(\$bead);
           ++\$solventBeadCounter;
       }
   }

   # Ensure solvent beads are visible
   \$solventSet->IsVisible = 1;
   print "DEBUG: Ensured solvent beads are visible.\n";

   print "\nDEBUG: Solute beads in meso: \$soluteBeadCounter\n";
   print "DEBUG: Solvent beads in meso: \$solventBeadCounter\n";

   return (\$soluteSet, \$solventSet);
}

sub computeSolventDistances {
   my (\$soluteSet, \$solventSet, \$meso) = @_;
   my @soluteBeads = @{\$soluteSet->Items};
   return if scalar(@soluteBeads) == 0;

   # Get lattice parameters and compute the center of the simulation box
   my \$lattice = \$meso->SymmetryDefinition;
   my \$simulationBoxCenter = Point(
       X => (\$lattice->LengthA / 2),
       Y => (\$lattice->LengthB / 2),
       Z => (\$lattice->LengthC / 2)
   );

   my \$closestBead;
   my \$minDistance = 1e6;

   foreach my \$bead (@soluteBeads) {
       next unless \$bead->Name =~ /^PTC_1\d+/;
       my \$coords = \$bead->XYZ;
       my \$distance = sqrt((\$simulationBoxCenter->X - \$coords->X)**2 + 
                            (\$simulationBoxCenter->Y - \$coords->Y)**2 + 
                            (\$simulationBoxCenter->Z - \$coords->Z)**2);
       if (\$distance < \$minDistance) {
           \$minDistance = \$distance;
           \$closestBead = \$bead;
       }
   }
   
   die "ERROR: No solute bead named PTC_1 found in the solute set." unless defined \$closestBead;
   my \$centroidPos = Point(
       X => \$closestBead->XYZ->X,
       Y => \$closestBead->XYZ->Y,
       Z => \$closestBead->XYZ->Z
   );
   print "DEBUG: Using solute bead PTC_1 at (\$centroidPos->{X}, \$centroidPos->{Y}, \$centroidPos->{Z}) as centroid.\n";

   # Verify that solvent beads exist
   my @solventBeads = @{\$solventSet->Items};
   if (scalar(@solventBeads) == 0) {
       die "ERROR: No solvent beads were found in the input file. Check if they exist and are properly assigned.\n";
   }

   my %solventDistances;

   foreach my \$solventBead (@solventBeads) {
       next unless \$solventBead->isa("Bead");
       
       my \$solventCoords = Point(
           X => \$solventBead->XYZ->X,
           Y => \$solventBead->XYZ->Y,
           Z => \$solventBead->XYZ->Z
       );

       my \$distance = sqrt(
           (\$centroidPos->X - \$solventCoords->X)**2 +
           (\$centroidPos->Y - \$solventCoords->Y)**2 +
           (\$centroidPos->Z - \$solventCoords->Z)**2
       );

       \$solventDistances{\$solventBead} = \$distance;

       print "DEBUG: Solvent bead at (\$solventCoords->X, \$solventCoords->Y, \$solventCoords->Z) is at distance \$distance Å\n";
   }

   print "\n--- Computed Distances ---\n";
   foreach my \$bead (keys %solventDistances) {
       print "Solvent bead at distance: \$solventDistances{\$bead} Å\n";
   }
   print "--- End of Computed Distances ---\n";

   print "DEBUG: Computed distances for all solvent beads.\n";
}

# Execute function to compute all solvent distances
computeSolventDistances(\$soluteSet, \$solventSet, \$meso);"

Kind regards,

Moncef