"""Actually produce own analytic component/observation fixtures before fitting.""" import math import numpy as np from physical_units import GRAVITY_KPC_KMS2_PER_SOLAR_MASS as GRAVITY from thin_disk_reference import speed_squared_dimensionless from observation_record import FIELDS from rotation_model import forward def make_record(): radius=np.geomspace(.2,25,48) disk=np.sqrt([GRAVITY*1e10/2*speed_squared_dimensionless(value/2) for value in radius]) gas=np.sqrt([GRAVITY*3e9/5*speed_squared_dimensionless(value/5) for value in radius]) surface_brightness=1e10/(2*math.pi*2**2)/1e6*np.exp(-radius/2) rows=np.column_stack([radius,np.ones(48),np.full(48,2.5),gas,disk,np.zeros(48),surface_brightness,np.zeros(48)]) record={'schema':'rotation-curve-observation-v1','label':'Own synthetic exponential-disk plus NFW fixture', 'metadata':{'distanceMpc':10.,'distanceErrorMpc':.5,'inclinationDegrees':63.,'inclinationErrorDegrees':3.,'quality':'synthetic'},'columns':FIELDS,'rows':rows.tolist(),'ownGeometry':{'diskUnitMassSolar':1e10,'diskScaleKpc':2.,'gasMassSolar':3e9,'gasScaleKpc':5.,'diskLightFollowsSameExponentialInput':True}} truth=forward(record,.55,1.4e7,9.,'nfw') generator=np.random.default_rng(np.random.SeedSequence(39122).spawn(2)[0]) rows[:,1]=truth['circularVelocityKms']+generator.normal(0,2.5,len(radius));record['rows']=rows.tolist() return record,{'massToLight':.55,'haloDensity':1.4e7,'haloScale':9.,'haloKind':'nfw','noiseSigmaKms':2.5,'seed':39122,'spawnKey':[0]}