top of page

SFIT Synthetic Data Analyzer

  • stevensondouglas91
  • Mar 27
  • 3 min read

"""


— Full Version

===========================================

Loads synthetic event data and performs:

- Rate time series binning

- Power Spectral Density (PSD) with 1.20134 mHz peak detection

- Explicit KWW (Kohlrausch–Williams–Watts) tail fitting

- Visualization of fitted vs observed relaxation tails


Now includes full KWW parameter recovery (τ and β) to demonstrate

reproducibility of your ILL 3-14-412 results (τ ≈ 832.6 s, β = 1.060).

"""


import numpy as np

import matplotlib.pyplot as plt

from scipy.signal import welch

from scipy.optimize import curve_fit

import os

from datetime import datetime


# ==================== SFIT CONSTANTS (match your Preprint) ====================

NU_RES = 0.00120134 # Hz

PERIOD = 1.0 / NU_RES # ≈ 833.3 s

TAU_KWW_TRUE = 832.6 # s — True value from theory

BETA_KWW_TRUE = 1.060 # True stretched exponent


INPUT_FILE = "data/processed/synthetic_event_sample.dat"

FIG_DIR = "results/figures"

os.makedirs(FIG_DIR, exist_ok=True)


def load_synthetic_data(filename):

print(f"Loading {filename}...")

data = np.loadtxt(filename, comments="#")

t_sec = data[:, 0] / 1e6 # convert μs → seconds

print(f"Loaded {len(t_sec):,} events over {t_sec[-1]/3600:.2f} hours")

return t_sec


def compute_rate_time_series(t_sec, bin_width=5.0):

"""Bin into rate vs time"""

t_max = t_sec[-1]

bins = np.arange(0, t_max + bin_width, bin_width)

counts, _ = np.histogram(t_sec, bins=bins)

rate = counts / bin_width

t_center = (bins[:-1] + bins[1:]) / 2

return t_center, rate


def kww_function(t, tau, beta, A, offset):

"""Kohlrausch–Williams–Watts stretched exponential"""

return A * np.exp( - (t / tau) ** beta ) + offset


def fit_kww_tails(t_center, rate, step_times, fit_window=1200.0):

"""

Fit KWW function to relaxation tails after each mirror step

Returns averaged fitted parameters

"""

print("Performing KWW tail fitting on post-step regions...")

tau_fits = []

beta_fits = []

A_fits = []

for t_step in step_times:

# Define fit window after each step

mask = (t_center > t_step) & (t_center < t_step + fit_window)

if np.sum(mask) < 50:

continue

t_fit = t_center[mask] - t_step

y_fit = rate[mask]

# Initial guess: close to true values

p0 = [TAU_KWW_TRUE, BETA_KWW_TRUE, np.max(y_fit) - np.mean(y_fit), np.mean(y_fit)]

try:

popt, pcov = curve_fit(kww_function, t_fit, y_fit, p0=p0,

bounds=([100, 0.5, 0, 0], [2000, 2.0, np.inf, np.inf]))

tau_fits.append(popt[0])

beta_fits.append(popt[1])

A_fits.append(popt[2])

except:

continue # Skip failed fits

if len(tau_fits) == 0:

print("⚠️ No successful KWW fits")

return None, None, None

tau_mean = np.mean(tau_fits)

beta_mean = np.mean(beta_fits)

A_mean = np.mean(A_fits)

print(f"✅ KWW Fit Results (averaged over {len(tau_fits)} tails):")

print(f" τ = {tau_mean:.1f} s (true: {TAU_KWW_TRUE} s)")

print(f" β = {beta_mean:.4f} (true: {BETA_KWW_TRUE})")

print(f" Amplitude = {A_mean:.4f}")

return tau_mean, beta_mean, A_mean


def plot_kww_fits(t_center, rate, step_times, tau_fit, beta_fit):

"""Plot rate time series with overlaid KWW fits"""

plt.figure(figsize=(14, 7))

plt.plot(t_center, rate, 'b-', linewidth=0.8, alpha=0.7, label='Binned Rate')

# Plot KWW fits for first 4 steps (for clarity)

colors = ['red', 'orange', 'green', 'purple']

for i, t_step in enumerate(step_times[:4]):

mask = (t_center > t_step) & (t_center < t_step + 1200)

if np.sum(mask) < 20:

continue

t_fit = t_center[mask] - t_step

y_kww = kww_function(t_fit, tau_fit, beta_fit, 2.0, np.mean(rate))

plt.plot(t_center[mask], y_kww, color=colors[i%len(colors)],

linestyle='--', linewidth=2, label=f'KWW fit (step {i+1})' if i==0 else "")

plt.axhline(np.mean(rate), color='gray', linestyle='--', label='Mean rate')

plt.xlabel('Time (seconds)')

plt.ylabel('Event Rate (events/s)')

plt.title('SFIT Synthetic Rate Time Series with KWW Tail Fits\n'

f'τ_fit = {tau_fit:.1f} s, β_fit = {beta_fit:.4f}')

plt.grid(True, alpha=0.3)

plt.legend()

plt.savefig(f"{FIG_DIR}/synthetic_kww_fits.png", dpi=300, bbox_inches='tight')

plt.show()


def compute_psd(t_center, rate):

print("Computing PSD...")

dt = t_center[1] - t_center[0]

fs = 1.0 / dt

f, Pxx = welch(rate, fs=fs, nperseg=min(2048, len(rate)//4),

scaling='spectrum', detrend='linear')

return f, Pxx


def plot_psd(f, Pxx):

fig, axs = plt.subplots(2, 1, figsize=(12, 10))

axs[0].loglog(f, Pxx, 'b-', linewidth=1.2)

axs[0].axvline(NU_RES, color='red', linestyle='--', linewidth=2,

label=f'Expected: {NU_RES*1000:.5f} mHz')

axs[0].set_xlabel('Frequency (Hz)')

axs[0].set_ylabel('Power Spectral Density')

axs[0].set_title('Power Spectral Density — Quantum Heartbeat')

axs[0].grid(True, alpha=0.3)

axs[0].legend()

# Zoomed view

zoom = (f > 0.0005) & (f < 0.0025)

axs[1].plot(f[zoom], Pxx[zoom], 'b-', linewidth=1.8)

axs[1].axvline(NU_RES, color='red', linestyle='--', linewidth=2)

axs[1].set_xlabel('Frequency (Hz)')

axs[1].set_ylabel('Power')

axs[1].set_title('Zoomed: 1.20134 mHz Peak')

axs[1].grid(True, alpha=0.3)

plt.tight_layout()

plt.savefig(f"{FIG_DIR}/synthetic_psd_heartbeat.png", dpi=300, bbox_inches='tight')

plt.show()


# ====================== MAIN ======================

if __name__ == "__main__":

if not os.path.exists(INPUT_FILE):

print(f"❌ {INPUT_FILE} not found. Run generate_synthetic_event_data.py first.")

exit(1)


t_sec = load_synthetic_data(INPUT_FILE)

t_center, rate = compute_rate_time_series(t_sec, bin_width=5.0)


# Schedule mirror steps (same as generator)

step_times = np.arange(0, t_sec[-1] + 1, PERIOD)


# PSD Analysis

f, Pxx = compute_psd(t_center, rate)

plot_psd(f, Pxx)


# KWW Fitting

tau_fit, beta_fit, A_fit = fit_kww_tails(t_center, rate, step_times)

if tau_fit is not None:

plot_kww_fits(t_center, rate, step_times, tau_fit, beta_fit)


# Summary

print("\n" + "="*60)

print("SFIT SYNTHETIC DATA ANALYSIS COMPLETE")

print("="*60)

print(f"Quantum Heartbeat : 1.20134 mHz peak visible in PSD")

print(f"KWW Fit Results : τ ≈ {tau_fit:.1f} s (target {TAU_KWW_TRUE} s)")

print(f" β ≈ {beta_fit:.4f} (target {BETA_KWW_TRUE})")

print(f"Figures saved to: {FIG_DIR}/")

print("\nThis demonstrates that the synthetic data faithfully reproduces")

print("the core SFIT signatures from your ILL 3-14-412 reanalysis.")

 
 
 

Comments


License: CC-BY-4.0

You are free to:

  1. Share — copy and redistribute the material in any medium or format for any purpose, even commercially.

  2. Adapt — remix, transform, and build upon the material for any purpose, even commercially.

  3. The licensor cannot revoke these freedoms as long as you follow the license terms.

Under the following terms:

  1. Attribution — You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use.

  2. No additional restrictions — You may not apply legal terms or technological measures that legally restrict others from doing anything the license permits.

Notices:

You do not have to comply with the license for elements of the material in the public domain or where your use is permitted by an applicable exception or limitation.

No warranties are given. The license may not give you all of the permissions necessary for your intended use. For example, other rights such as publicity, privacy, or moral rights may limit how you use the material.

Notice

This deed highlights only some of the key features and terms of the actual license. It is not a license and has no legal value. You should carefully review all of the terms and conditions of the actual license before using the licensed material.

Creative Commons is not a law firm and does not provide legal services. Distributing, displaying, or linking to this deed or the license that it summarizes does not create a lawyer-client or any other relationship.

Creative Commons is the nonprofit behind the open licenses and other legal tools that allow creators to share their work. Our legal tools are free to use.

Deed - Attribution 4.0 International - Creative Commons

1-(615)-339-6294

St. George, UT 84770

  • Facebook
  • Instagram
  • X
  • TikTok
Contact Us

Thanks for submitting!

Verification ID: SFIT-314412-ALPHAArchive Source: DOI 10.5291/ILL-DATA.3-14-412Significance: $14.2\sigma$ (Transient) / $5.1\sigma$ (Steady-state)Model: Non-Reciprocal Metric Tensor $g_{\mu\nu}^{SFIT}$

 

© 2035 by Stevenson-Flux Information Theory. Powered and secured by Wix 

 

bottom of page