function [ModulationFlag] = determineDensityModulation(psi, Params, Transf)
    % Axes scaling and coordinates in micrometers
    x               = Transf.x * Params.l0 * 1e6; 
    dx              = x(2)-x(1); 
    % Compute probability density |psi|^2
    n               = abs(psi).^2;
    nyz             = squeeze(trapz(n*dx,1));
    
    densityProfile  = sum(nyz,2);
    
    % We need to first smoothen the density profile and subtract the smoothened profile from the
    % original density profile to - 
    % 1. Remove the dominant low-frequency content.
    % 2. Isolate the high-frequency components (like a sinusoidal modulation).
    % FFT of the residual then highlights the periodic part, making the
    % modulation easy to detect.

    % Step 1: Smooth the density profile (Gaussian smoothing)
    smoothedProfile = smooth(densityProfile, 10);
    
    % Step 2: Compute the residual (original - smoothed)
    residual        = densityProfile - smoothedProfile; % We do this 
    
    % Step 3: Compute the Fourier Transform of the residual
    N               = length(residual);
    Y               = fft(residual);
    P2              = abs(Y/N);       % Two-sided spectrum
    P1              = P2(1:N/2+1);    % Single-sided spectrum
    P1(2:end-1)     = 2*P1(2:end-1);  % Correct for the energy in the negative frequencies
    
    % Step 4: Check for significant peaks in the Fourier spectrum
    % We check if the peak frequency is above a certain threshold
    threshold       = 1E-3;           % This can be adjusted based on the expected modulation strength
    peakValue       = max(P1);
    
    if peakValue > threshold
        ModulationFlag = true;   % Indicates sinusoidal modulation
    else
        ModulationFlag = false;  % Indicates otherwise
    end
end



    
    
            