Download and operate

Start locally, then follow the workflow you need

Docker Compose is the shortest supported path. It builds the React workspace, Go service, and Ankara datasets into one local application. Source development remains available for RF-model and interface work.

Recommended runtimeDocker Compose
Applicationlocalhost:8080
Source dataGit LFS required
BackendGo 1.26.5
FrontendNode 24+

Get the complete source and data

The Ankara building file is approximately 111 MB and is managed by Git LFS. A normal Git clone without LFS can leave a tiny pointer file in its place, which prevents the backend from becoming ready.

Recommended: clone with Git LFS

Use this path for Docker, local development, updates, and access to the complete planning dataset.

git lfs install
git clone https://github.com/Berk-Unsal/urban-ray-tracer.git
cd urban-ray-tracer
git lfs pull

Install Git LFS first from git-lfs.com if the command is unavailable.

Secondary: repository ZIP

A ZIP is convenient for reading the source, but GitHub archives can omit LFS object contents. Verify the building file before attempting to run A.T.O.M.

  • data-pipeline/ankara_buildings.geojson should be roughly 111 MB.
  • It must begin with GeoJSON content, not version https://git-lfs.github.com/spec/v1.
  • Clone with Git LFS if either check fails.

Run the production-style container

This path serves the built frontend and API from port 8080. The first build downloads Go and npm dependencies; later builds reuse Docker layers when the inputs have not changed.

1. Build and start

docker compose up --build -d atom

Run from the repository root, then open http://localhost:8080.

2. Verify readiness

curl http://localhost:8080/readyz
docker compose logs -f atom

/readyz returns 200 only after buildings, towers, and the frontend bundle are available.

Stop the application

docker compose down

Update an existing clone

git pull --ff-only
git lfs pull
docker compose up --build -d atom
Liveness and readiness answer different questions

/healthz confirms that the process is running. /readyz confirms that the runtime data and frontend are loaded and the instance can serve planning requests.

Run the frontend and backend separately

Use two terminals for local development. The Vite server proxies API traffic to the Go backend, so the browser stays on port 5173 while requests are executed on port 8080.

Terminal 1: Go API

Requires Go 1.26.5 and the LFS-managed data files.

cd backend-go
go mod download
go run .

API and production static host: http://localhost:8080

Terminal 2: React workspace

Requires Node.js 24 or newer; Node 24 LTS is recommended.

cd frontend-react
npm ci
npm run dev

Development workspace: http://localhost:5173

The default basemap needs network access

RF analysis and Ankara data run locally. The Leaflet basemap still requests OpenStreetMap tiles unless you configure a separate local tile source.

Add the optional 5G Core Lab adapter

The compose overlay starts the Core Lab adapter on its private service network and connects the main application to it. The adapter runs as a non-root, read-only service, provides a deterministic communication-path overlay by default, and can probe configured Open5GS status or metrics endpoints. It does not bundle a full Open5GS deployment.

export CORE_LAB_API_KEY="$(openssl rand -hex 32)"
docker compose -f docker-compose.yml -f docker-compose.core-lab.yml \
  --profile core-lab up --build
PathMeaning in A.T.O.MAvailability
Xn-C / Xn-UDirect control and user-plane coordination between eligible neighboring gNBs.Selected 5G cells within neighbor criteria.
N2 through AMFControl-plane fallback when direct Xn is unavailable or degraded.Shown by Core Lab scenarios.
N3 through UPFUser-plane session path between the gNB and UPF.Tracked separately from Xn-C health.
Core Lab is intentionally 5G-only

The Core tool is marked not applicable in 4G LTE and 6G research mode. A.T.O.M does not reuse 5GC labels for LTE/EPC behavior.

Guided first-use workflows

The map is the workspace. The command bar holds the active context and RF run action; the rail opens one focused tool at a time. Start with Setup, then move only to the analysis needed for the current question.

Optional first-run project

Import examples/ankara-sample.atom-project.json from the project menu for a settings-first baseline, then select local cells and rerun before interpreting results.

Workflow 01

Plan one sector

1Choose the context

Open Setup, select Single mode and a network technology, then choose a tower on the map.

2Shape propagation

Open Propagation and set ray count, radius, azimuth, and beam width.

3Run and inspect

Select Run Sector in the command bar. Inspect rays and gaps from the map or Results tool.

Workflow 02

Evaluate a cell cluster

1Build the cluster

Switch Setup to Network mode and select two to six towers. Numbered map badges preserve cluster order.

2Evaluate or optimize

Use Evaluate Network in the command bar, or Optimize Network from Propagation.

3Compare evidence

Open Results for score, demand reach, overlap, and optimization deltas. Per-cell rays render sequentially.

Workflow 03

Analyze radio quality

1Use 4G or 5G

Select at least two cells. Interference is not available for the 6G research mode.

2Set assumptions

Open Interference and choose bandwidth, load, reuse, noise figure, and sample spacing.

3Read the surface

Analyze, switch between SINR, RSRP, and RSRQ, then select a sample to see its serving and interfering cells.

Workflow 04

Exercise 5G paths

1Start the profile

Run the Core Lab compose overlay and select 5G Network mode with at least two cells.

2Enable the overlay

Open 5G Core and activate Core Lab to load functions, sessions, events, and communication paths.

3Change the route

Run Xn degraded or unavailable scenarios and observe the N2 fallback while N3 session state remains distinct.

Workflow 05

Save and compare scenarios

1Name the project

Use the project selector in the command bar and save a scenario after each meaningful run.

2Compare two plans

Open Results and Compare, then switch the map between A and B while reviewing KPI deltas.

3Make it portable

Export the versioned .atom-project.json file to preserve exact inputs, metadata, summaries, and recent layers.

Workflow 06

Recommend and validate

1Bound the search

Draw an area for a 4G/5G network plan, then open Results and Candidates to rank known site records.

2Preserve the baseline

Apply an option as a new scenario, evaluate it, and run interference before considering it preferred.

3Check field evidence

Import RSRP CSV data in Data, inspect residuals, and review holdout error before applying any global bias correction.

Orient yourself in the focused workspace

Every capability remains available, but the interface reveals one task at a time so the map stays primary.

A.T.O.M focused workspace with a command bar, icon tool rail, Setup drawer, and full-height Ankara map
The current desktop workspace. On mobile, tools move to a bottom bar and open in a dismissible sheet.
SurfaceUse it forOperational detail
Command barCurrent mode, cell context, plan summary, run state, and the primary RF action.The result summary opens the relevant Results view.
Tool railSetup, Propagation, Interference, 5G Core, Results, Data, and Report.Click the active icon, Close, or press Escape to collapse the drawer.
Map toolbarDraw, Clear, Fit, and layer visibility.Metric controls appear only while an interference surface is active.
InspectorTower, gap, path, radio sample, candidate, and measurement-residual details.Back restores the previous tool; popups remain compact labels.
Data and ReportReview dataset provenance, runtime versions, validation evidence, assumptions, and exports.Reports record active model, dataset, and calibration metadata.

Troubleshooting

Start with docker compose logs -f atom and /readyz; they distinguish missing data from an API or browser issue.

The backend reports invalid GeoJSON or never becomes ready

Check data-pipeline/ankara_buildings.geojson. If it is a small text file containing a Git LFS pointer, run git lfs install and git lfs pull, then rebuild the container.

Port 8080 or 5173 is already in use

Stop the process or container using the port. For Docker, change the host side of the mapping in docker-compose.yml, for example 8081:8080, and open the new host port.

/healthz works but /readyz returns 503

The process is alive but a required runtime dependency is missing. Review the readiness JSON and logs for manifest/hash validation, building data, tower data, or the compiled frontend. Confirm Git LFS completed and rebuild after frontend changes.

Docker exits or becomes slow during RF analysis

Allocate at least 2 CPU cores and about 1 GB of memory to the main app. Allow more headroom when using the Core Lab profile or running repeated six-cell analyses.

The API returns 429: RF analysis capacity is busy

A.T.O.M admits two RF jobs by default to protect the host. Let the active run finish and retry after the response's Retry-After interval. Avoid launching optimization, interference, and repeated sector runs in parallel.

The map is blank while controls and results still work

The default OpenStreetMap tile layer needs network access. RF computation can still be local; confirm tile requests are not blocked, or configure a separate local tile service.

SINR samples show no signal or approximately 0 dB

No signal means no selected cell contributes at that point under the configured radius and beam geometry. Around 0 dB is expected where a serving cell and a co-channel interferer arrive at similar power; inspect the sample's serving and strongest-interferer fields.

Go deeper

Use the architecture guide for system behavior and the model references before interpreting planning results as field measurements.