384 lines
13 KiB
Python
384 lines
13 KiB
Python
#!/usr/bin/env python3
|
||
"""
|
||
Bola Physics Test for Quarks
|
||
|
||
Tests different rotational geometries for quark confinement:
|
||
|
||
1. ATOMIC MODEL: Single particle on spacetime ball
|
||
- F = ℏ²/(γmr³) [electron on proton]
|
||
|
||
2. BOLA MODEL: Two particles leashed together
|
||
- F = 2ℏ²s²/(γm*d³) [two quarks spinning around center of mass]
|
||
|
||
3. TRIPLE BOLA: Three particles (actual proton)
|
||
- F = 3ℏ²s²/(γm*d³) [three quarks around common center]
|
||
|
||
4. REDUCED MASS MODELS: Account for multi-body physics
|
||
|
||
The key insight: quarks aren't standing on a ball - they're spinning
|
||
together like a bola, sharing angular momentum.
|
||
|
||
Author: Andre Heinecke & AI Collaborators
|
||
Date: June 2025
|
||
License: CC BY-SA 4.0
|
||
"""
|
||
|
||
import numpy as np
|
||
import sys
|
||
import math
|
||
|
||
# ==============================================================================
|
||
# PHYSICAL CONSTANTS
|
||
# ==============================================================================
|
||
|
||
HBAR = 1.054e-34 # J⋅s
|
||
C = 2.99792458e8 # m/s
|
||
E_CHARGE = 1.602176634e-19 # C
|
||
|
||
# V21 baseline parameters
|
||
V21_PARAMS = {
|
||
'hbar': 1.054e-34,
|
||
'quark_mass': 4e-30, # kg
|
||
'proton_radius': 1.0e-15, # m
|
||
'string_tension': 1.4e5, # N
|
||
'target_force': 8.2e5, # N
|
||
'quark_spin': 0.5
|
||
}
|
||
|
||
# ==============================================================================
|
||
# GEOMETRIC MODELS
|
||
# ==============================================================================
|
||
|
||
def atomic_model(hbar, m, r, sigma=0, s=1, gamma=1.0):
|
||
"""
|
||
Single particle on spacetime ball (like electron on proton)
|
||
F = ℏ²s²/(γmr³) + σ
|
||
"""
|
||
F_geometric = (hbar**2 * s**2) / (gamma * m * r**3)
|
||
F_confinement = sigma
|
||
F_total = F_geometric + F_confinement
|
||
|
||
return {
|
||
'model': 'atomic',
|
||
'F_geometric': F_geometric,
|
||
'F_confinement': F_confinement,
|
||
'F_total': F_total,
|
||
'description': f'Single particle, s={s}, r={r*1e15:.1f}fm'
|
||
}
|
||
|
||
def bola_two_body(hbar, m, d, sigma, s=0.5, gamma=1.0):
|
||
"""
|
||
Two particles leashed together, spinning around center of mass
|
||
|
||
Physics:
|
||
- Each particle at distance d/2 from center of mass
|
||
- Total angular momentum L = 2 * (m * v * d/2) = m * v * d = ℏ * s_total
|
||
- Each particle has s_total/2 angular momentum
|
||
- Centripetal force: F = m * v² / (d/2) = 2mv²/d
|
||
- With v = ℏ*s_total/(m*d), get F = 2ℏ²s_total²/(m*d³)
|
||
"""
|
||
|
||
# Total angular momentum distributed between particles
|
||
s_total = 2 * s # Each particle contributes s/2
|
||
|
||
# Geometric force from bola rotation
|
||
F_geometric = 2 * (hbar**2 * s_total**2) / (gamma * m * d**3)
|
||
|
||
# String tension between particles
|
||
F_confinement = sigma
|
||
|
||
F_total = F_geometric + F_confinement
|
||
|
||
return {
|
||
'model': 'bola_2body',
|
||
'F_geometric': F_geometric,
|
||
'F_confinement': F_confinement,
|
||
'F_total': F_total,
|
||
'description': f'Two-body bola, s_each={s}, d={d*1e15:.1f}fm'
|
||
}
|
||
|
||
def bola_three_body(hbar, m, d, sigma, s=1/3, gamma=1.0):
|
||
"""
|
||
Three particles (actual proton: uud quarks) in triangular rotation
|
||
|
||
Physics:
|
||
- Three quarks in equilateral triangle, side length d
|
||
- Distance from center to each quark: r = d/√3
|
||
- Each quark contributes s to total angular momentum
|
||
- Total L = 3 * m * v * r = ℏ * s_total where s_total = 3*s
|
||
"""
|
||
|
||
# Geometry of equilateral triangle
|
||
r_center = d / math.sqrt(3) # Distance from center to vertex
|
||
s_total = 3 * s # Total angular momentum
|
||
|
||
# Each quark experiences centripetal force toward center
|
||
# F = m * v² / r where v = ℏ*s_total/(3*m*r)
|
||
v = (hbar * s_total) / (3 * m * r_center)
|
||
F_geometric = m * v**2 / r_center
|
||
|
||
# Alternative: Direct formula
|
||
# F_geometric = (ℏ²s_total²) / (9*m*r_center³) * 3
|
||
F_geometric_alt = 3 * (hbar**2 * s_total**2) / (9 * gamma * m * r_center**3)
|
||
|
||
F_confinement = sigma
|
||
F_total = F_geometric + F_confinement
|
||
|
||
return {
|
||
'model': 'bola_3body',
|
||
'F_geometric': F_geometric,
|
||
'F_geometric_alt': F_geometric_alt,
|
||
'F_confinement': F_confinement,
|
||
'F_total': F_total,
|
||
'description': f'Three-body bola, s_each={s}, d={d*1e15:.1f}fm'
|
||
}
|
||
|
||
def reduced_mass_model(m1, m2, hbar, d, sigma, s=0.5, gamma=1.0):
|
||
"""
|
||
Two different masses leashed together (e.g., up and down quarks)
|
||
Uses reduced mass μ = m1*m2/(m1+m2)
|
||
"""
|
||
|
||
# Reduced mass
|
||
mu = (m1 * m2) / (m1 + m2)
|
||
|
||
# Center of mass distances
|
||
r1 = m2 * d / (m1 + m2) # Distance of m1 from center
|
||
r2 = m1 * d / (m1 + m2) # Distance of m2 from center
|
||
|
||
# Angular momentum constraint: L = mu * v * d = ℏ * s
|
||
v = (hbar * s) / (mu * d)
|
||
|
||
# Forces on each mass
|
||
F1 = m1 * v**2 / r1
|
||
F2 = m2 * v**2 / r2
|
||
|
||
# Average force (what we measure)
|
||
F_geometric = (F1 + F2) / 2
|
||
F_confinement = sigma
|
||
F_total = F_geometric + F_confinement
|
||
|
||
return {
|
||
'model': 'reduced_mass',
|
||
'F_geometric': F_geometric,
|
||
'F_confinement': F_confinement,
|
||
'F_total': F_total,
|
||
'F1': F1,
|
||
'F2': F2,
|
||
'reduced_mass': mu,
|
||
'description': f'Reduced mass μ={mu*1e30:.1f}×10⁻³⁰kg, d={d*1e15:.1f}fm'
|
||
}
|
||
|
||
# ==============================================================================
|
||
# TEST FUNCTIONS
|
||
# ==============================================================================
|
||
|
||
def test_geometric_models():
|
||
"""Compare different geometric models with v21 parameters"""
|
||
|
||
print("GEOMETRIC MODEL COMPARISON")
|
||
print("="*60)
|
||
print(f"Target force: {V21_PARAMS['target_force']:.1e} N")
|
||
print(f"Using v21 parameters: m={V21_PARAMS['quark_mass']*1e30:.1f}×10⁻³⁰kg, r/d=1.0fm")
|
||
print()
|
||
|
||
p = V21_PARAMS
|
||
|
||
# Test different models
|
||
models = []
|
||
|
||
# 1. Original atomic model (s²)
|
||
atomic_with_s2 = atomic_model(p['hbar'], p['quark_mass'], p['proton_radius'],
|
||
p['string_tension'], s=p['quark_spin'])
|
||
models.append(atomic_with_s2)
|
||
|
||
# 2. Atomic model without s² (s=1)
|
||
atomic_no_s2 = atomic_model(p['hbar'], p['quark_mass'], p['proton_radius'],
|
||
p['string_tension'], s=1)
|
||
models.append(atomic_no_s2)
|
||
|
||
# 3. Two-body bola
|
||
bola_2 = bola_two_body(p['hbar'], p['quark_mass'], p['proton_radius'],
|
||
p['string_tension'], s=p['quark_spin'])
|
||
models.append(bola_2)
|
||
|
||
# 4. Three-body bola (actual proton)
|
||
bola_3 = bola_three_body(p['hbar'], p['quark_mass'], p['proton_radius'],
|
||
p['string_tension'], s=1/3)
|
||
models.append(bola_3)
|
||
|
||
# 5. Reduced mass (up + down quark)
|
||
m_up = 2.16e-30 # kg (2.16 MeV/c²)
|
||
m_down = 4.67e-30 # kg (4.67 MeV/c²)
|
||
reduced = reduced_mass_model(m_up, m_down, p['hbar'], p['proton_radius'],
|
||
p['string_tension'], s=0.5)
|
||
models.append(reduced)
|
||
|
||
# Display results
|
||
print(f"{'Model':<15} {'F_total(N)':<12} {'Agreement%':<12} {'Geom%':<8} {'Description'}")
|
||
print("-" * 80)
|
||
|
||
for model in models:
|
||
agreement = model['F_total'] / p['target_force'] * 100
|
||
geom_percent = model['F_geometric'] / model['F_total'] * 100
|
||
|
||
print(f"{model['model']:<15} {model['F_total']:<12.2e} {agreement:<12.1f} "
|
||
f"{geom_percent:<8.1f} {model['description']}")
|
||
|
||
def test_bola_scaling():
|
||
"""Test how bola models scale with separation distance"""
|
||
|
||
print(f"\n" + "="*60)
|
||
print("BOLA SCALING ANALYSIS")
|
||
print("="*60)
|
||
|
||
distances = [0.5e-15, 0.8e-15, 1.0e-15, 1.2e-15, 1.5e-15] # meters
|
||
|
||
print(f"{'d(fm)':<8} {'2-body':<12} {'3-body':<12} {'Agreement_2':<12} {'Agreement_3':<12}")
|
||
print("-" * 65)
|
||
|
||
p = V21_PARAMS
|
||
|
||
for d in distances:
|
||
d_fm = d * 1e15
|
||
|
||
# Two-body bola
|
||
bola_2 = bola_two_body(p['hbar'], p['quark_mass'], d, p['string_tension'])
|
||
|
||
# Three-body bola
|
||
bola_3 = bola_three_body(p['hbar'], p['quark_mass'], d, p['string_tension'])
|
||
|
||
agree_2 = bola_2['F_total'] / p['target_force'] * 100
|
||
agree_3 = bola_3['F_total'] / p['target_force'] * 100
|
||
|
||
print(f"{d_fm:<8.1f} {bola_2['F_total']:<12.2e} {bola_3['F_total']:<12.2e} "
|
||
f"{agree_2:<12.1f} {agree_3:<12.1f}")
|
||
|
||
def test_spin_distribution():
|
||
"""Test different ways of distributing angular momentum in bola"""
|
||
|
||
print(f"\n" + "="*60)
|
||
print("ANGULAR MOMENTUM DISTRIBUTION")
|
||
print("="*60)
|
||
|
||
print("How should total angular momentum be distributed among quarks?")
|
||
print()
|
||
|
||
p = V21_PARAMS
|
||
|
||
# Test different total angular momentum values
|
||
spin_configs = [
|
||
("Each s=1/2, total=1", 0.5, 2), # Two quarks each with s=1/2
|
||
("Each s=1/3, total=1", 1/3, 3), # Three quarks each with s=1/3
|
||
("Each s=1/2, total=3/2", 0.5, 3), # Three quarks each with s=1/2
|
||
("Each s=1, total=2", 1.0, 2), # Two quarks each with s=1
|
||
("Each s=1, total=3", 1.0, 3), # Three quarks each with s=1
|
||
]
|
||
|
||
print(f"{'Configuration':<20} {'s_each':<8} {'N_quarks':<10} {'F_total':<12} {'Agreement%':<12}")
|
||
print("-" * 75)
|
||
|
||
for desc, s_each, n_quarks in spin_configs:
|
||
if n_quarks == 2:
|
||
result = bola_two_body(p['hbar'], p['quark_mass'], p['proton_radius'],
|
||
p['string_tension'], s=s_each)
|
||
else:
|
||
result = bola_three_body(p['hbar'], p['quark_mass'], p['proton_radius'],
|
||
p['string_tension'], s=s_each)
|
||
|
||
agreement = result['F_total'] / p['target_force'] * 100
|
||
|
||
print(f"{desc:<20} {s_each:<8.2f} {n_quarks:<10} {result['F_total']:<12.2e} {agreement:<12.1f}")
|
||
|
||
def test_physical_interpretation():
|
||
"""Explore what the models tell us about quark physics"""
|
||
|
||
print(f"\n" + "="*60)
|
||
print("PHYSICAL INTERPRETATION")
|
||
print("="*60)
|
||
|
||
p = V21_PARAMS
|
||
|
||
print("What does each model predict about quark motion?")
|
||
print()
|
||
|
||
# Calculate velocities for different models
|
||
models_to_test = [
|
||
("Atomic s=1/2", lambda: atomic_model(p['hbar'], p['quark_mass'], p['proton_radius'], 0, s=0.5)),
|
||
("Atomic s=1", lambda: atomic_model(p['hbar'], p['quark_mass'], p['proton_radius'], 0, s=1)),
|
||
("Bola 2-body", lambda: bola_two_body(p['hbar'], p['quark_mass'], p['proton_radius'], 0)),
|
||
("Bola 3-body", lambda: bola_three_body(p['hbar'], p['quark_mass'], p['proton_radius'], 0))
|
||
]
|
||
|
||
print(f"{'Model':<15} {'v/c':<8} {'F_geom(N)':<12} {'Note'}")
|
||
print("-" * 50)
|
||
|
||
for name, model_func in models_to_test:
|
||
result = model_func()
|
||
|
||
# Estimate velocity from angular momentum
|
||
if 'atomic' in name:
|
||
if 's=1/2' in name:
|
||
s = 0.5
|
||
else:
|
||
s = 1.0
|
||
v = (p['hbar'] * s) / (p['quark_mass'] * p['proton_radius'])
|
||
else:
|
||
# For bola models, estimate average velocity
|
||
s_total = 1.0 # Assume total L = ℏ
|
||
if '2-body' in name:
|
||
v = (p['hbar'] * s_total) / (2 * p['quark_mass'] * p['proton_radius']/2)
|
||
else:
|
||
v = (p['hbar'] * s_total) / (3 * p['quark_mass'] * p['proton_radius']/math.sqrt(3))
|
||
|
||
v_over_c = v / C
|
||
|
||
note = ""
|
||
if v_over_c > 0.1:
|
||
note = "relativistic!"
|
||
elif v_over_c > 0.01:
|
||
note = "fast"
|
||
|
||
print(f"{name:<15} {v_over_c:<8.3f} {result['F_geometric']:<12.2e} {note}")
|
||
|
||
# ==============================================================================
|
||
# MAIN TEST ROUTINE
|
||
# ==============================================================================
|
||
|
||
def main():
|
||
"""Run all bola physics tests"""
|
||
|
||
print("BOLA PHYSICS TEST FOR QUARKS")
|
||
print("="*70)
|
||
print("Testing different rotational geometries for quark confinement")
|
||
print("Key insight: Quarks spin together like bola, not single particles on balls")
|
||
print()
|
||
|
||
test_geometric_models()
|
||
test_bola_scaling()
|
||
test_spin_distribution()
|
||
test_physical_interpretation()
|
||
|
||
print(f"\n" + "="*70)
|
||
print("CONCLUSIONS")
|
||
print("="*70)
|
||
|
||
print("Key insights from bola model:")
|
||
print("1. Multi-particle systems have different rotational dynamics")
|
||
print("2. Angular momentum distribution affects force calculations")
|
||
print("3. Geometry matters: 2-body vs 3-body vs single particle")
|
||
print("4. The 'leash' connects particles in shared rotation")
|
||
print("5. This explains why s=1/2 worked in v21 (shared angular momentum)")
|
||
|
||
print(f"\nThe bola model suggests quarks are not isolated particles")
|
||
print(f"but components of a rotating, bound multi-particle system.")
|
||
print(f"This is fundamentally different from atoms (single particle on ball).")
|
||
|
||
if __name__ == "__main__":
|
||
if len(sys.argv) > 1 and sys.argv[1] in ['-h', '--help']:
|
||
print("Usage: python bola_physics_test.py")
|
||
print(" Tests bola vs atomic models for quark confinement")
|
||
print(" Explores multi-particle rotational dynamics")
|
||
sys.exit(0)
|
||
|
||
main() |