# Graph Report - . (2026-04-21) ## Corpus Check - 89 files · ~92,297 words - Verdict: corpus is large enough that graph structure adds value. ## Summary - 330 nodes · 475 edges · 33 communities detected - Extraction: 68% EXTRACTED · 32% INFERRED · 0% AMBIGUOUS · INFERRED: 151 edges (avg confidence: 0.7) - Token cost: 0 input · 0 output ## Community Hubs (Navigation) - [[_COMMUNITY_Scenario Framework & Maneuvers|Scenario Framework & Maneuvers]] - [[_COMMUNITY_Radar Simulation & Processing|Radar Simulation & Processing]] - [[_COMMUNITY_Orchestration & Sensor Management|Orchestration & Sensor Management]] - [[_COMMUNITY_Data Recording & Heatmaps|Data Recording & Heatmaps]] - [[_COMMUNITY_Data Conversion Utilities|Data Conversion Utilities]] - [[_COMMUNITY_Web Dashboard & Loader|Web Dashboard & Loader]] - [[_COMMUNITY_LiDAR & Fast Heatmap Gen|LiDAR & Fast Heatmap Gen]] - [[_COMMUNITY_DSP & CFAR Detection|DSP & CFAR Detection]] - [[_COMMUNITY_Scene Reconstruction|Scene Reconstruction]] - [[_COMMUNITY_Dashboard Frontend (JS)|Dashboard Frontend (JS)]] - [[_COMMUNITY_MCAP Dataset Conversion|MCAP Dataset Conversion]] - [[_COMMUNITY_Radar Signal Detection|Radar Signal Detection]] - [[_COMMUNITY_Data Quality Inspection|Data Quality Inspection]] - [[_COMMUNITY_Deep Metrology Analysis|Deep Metrology Analysis]] - [[_COMMUNITY_Metrology Comparison|Metrology Comparison]] - [[_COMMUNITY_Community 15|Community 15]] - [[_COMMUNITY_Community 16|Community 16]] - [[_COMMUNITY_Community 17|Community 17]] - [[_COMMUNITY_Community 18|Community 18]] - [[_COMMUNITY_Community 19|Community 19]] - [[_COMMUNITY_Community 20|Community 20]] - [[_COMMUNITY_Community 21|Community 21]] - [[_COMMUNITY_Community 22|Community 22]] - [[_COMMUNITY_Community 23|Community 23]] - [[_COMMUNITY_Community 24|Community 24]] - [[_COMMUNITY_Community 25|Community 25]] - [[_COMMUNITY_Community 26|Community 26]] - [[_COMMUNITY_Community 27|Community 27]] - [[_COMMUNITY_Community 28|Community 28]] - [[_COMMUNITY_Community 29|Community 29]] - [[_COMMUNITY_Community 30|Community 30]] - [[_COMMUNITY_Community 31|Community 31]] - [[_COMMUNITY_Community 32|Community 32]] ## God Nodes (most connected - your core abstractions) 1. `ScenarioBase` - 26 edges 2. `ShenronRadarModel` - 22 edges 3. `radar` - 20 edges 4. `RadarProcessor` - 20 edges 5. `main()` - 20 edges 6. `run_testbench()` - 12 edges 7. `Recorder` - 11 edges 8. `SensorManager` - 11 edges 9. `BrakingScenario` - 9 edges 10. `CutInScenario` - 9 edges ## Surprising Connections (you probably didn't know these) - `scenarios/showcase.py --------------------- Custom high-impact demo scene: Left` --uses--> `ScenarioBase` [INFERRED] scenarios\showcase.py → scenarios\base.py - `Step 11: Deep Intersection Guidance for Ego.` --uses--> `ScenarioBase` [INFERRED] scenarios\showcase.py → scenarios\base.py - `Step 11: Multi-stage steering logic.` --uses--> `ScenarioBase` [INFERRED] scenarios\showcase.py → scenarios\base.py - `src/scenario_loader.py ---------------------- Dynamic scenario discovery and loa` --uses--> `ScenarioBase` [INFERRED] src\scenario_loader.py → scenarios\base.py - `Discover all scenario modules inside the 'scenarios' package. Returns a sort` --uses--> `ScenarioBase` [INFERRED] src\scenario_loader.py → scenarios\base.py ## Communities ### Community 0 - "Scenario Framework & Maneuvers" Cohesion: 0.05 Nodes (18): ABC, scenarios/base.py ----------------- Abstract base class for all CARLA simulati, Return a dict that will be merged into every recorded frame's metadata, Convenience method: destroy all actors tracked in self._actors. Call th, Return a waypoint `distance` metres ahead of the ego vehicle. lane_offs, Abstract interface for all ADAS simulation scenarios. Lifecycle ----, Unified 1:1 logging for all scenarios. This method ensures clean consol, ScenarioBase (+10 more) ### Community 1 - "Radar Simulation & Processing" Cohesion: 0.08 Nodes (22): radar, Load normalized antenna gain LUTs (dB) from CSV files. Expected CSV f, class to define the radar object with it's settings and to extract time interval, _get_gpu_info(), main(), process_session(), Retrieve GPU hardware info for telemetry display., Return the raw internal heatmaps and thresholds for the last processed frame. (+14 more) ### Community 2 - "Orchestration & Sensor Management" Cohesion: 0.08 Nodes (13): Called immediately after the ego vehicle is spawned. Override to react, Allow the orchestrator to inject parameters parsed from CLI. This maps, main(), parse_args(), src/main.py ----------- Scenario-agnostic orchestrator for the CARLA ADAS simu, SensorManager, scenarios/showcase.py --------------------- Custom high-impact demo scene: Left, Step 11: Deep Intersection Guidance for Ego. (+5 more) ### Community 3 - "Data Recording & Heatmaps" Cohesion: 0.09 Nodes (18): check_save_path(), main(), Stitch captured frames into .mp4 files for easy viewing., Categorise actor into broad ADAS classes., Calculate relative range, azimuth, and closing velocity. Uses right-han, Helper to convert world location to transform-local location., Helper to save image in a background thread., Recorder (+10 more) ### Community 4 - "Data Conversion Utilities" Cohesion: 0.1 Nodes (14): convert2D_img_func(), convert_sem_lidar_2D_img_func(), main(), converts the 3D radar raw data to 2d range-angle image of dimension 256X256, converts the semantic_lidar data to the range angle 2D image of dimension 256X25, # apply fft on each antenna to get angle profile, cart2polar(), get_range_angle() (+6 more) ### Community 5 - "Web Dashboard & Loader" Cohesion: 0.09 Nodes (16): get_config(), get_scenario_params(), is_simulation_running(), PollingFilter, dashboard/app.py ---------------- Flask backend for the BATL CARLA Orchestrator, Forces all CarlaUE4 processes to terminate., Stops the Flask server itself., Returns True if a scenario process is currently alive. (+8 more) ### Community 6 - "LiDAR & Fast Heatmap Gen" Cohesion: 0.11 Nodes (13): get_gpu_id_most_avlbl_mem(), heatmap_gen(), heatmap_gen(), Cropped_forRadar(), map_carla_semantic_lidar_latest(), Function to map material column in the collected carla ray_cast_shenron to shenr, Removes Occlusions and calculates loss for each point, rotate_points() (+5 more) ### Community 7 - "DSP & CFAR Detection" Cohesion: 0.14 Nodes (8): CA_CFAR, cart2polar(), convert_adc_to_3d_fft(), polar_to_cart(), Description: ------------ Cell Averaging - Constant False Alarm Ra, Description: ------------ Performs the automatic detection, Function to convert adc data to RA tensor Input: adcData:, convert a polar range angle tensor to cartesian array Input: RATe ### Community 8 - "Scene Reconstruction" Cohesion: 0.18 Nodes (8): cart2sph(), get_loss_2(), get_loss_3(), Class with all the functions to modify OSM scenario and thus generate the points, Note: angles should be used for power calculation as it is in reflecting surface, Note: angles should be used for power calculation as it is in reflecting surface, Sceneset, sph2cart() ### Community 9 - "Dashboard Frontend (JS)" Cohesion: 0.33 Nodes (7): appendLog(), chip(), renderShenronTelemetry(), resetIdleTimer(), setLoadingState(), startStream(), updateShenronProgress() ### Community 10 - "MCAP Dataset Conversion" Cohesion: 0.31 Nodes (9): convert_folder(), load_frames(), main(), postprocess_ra(), Refined RA post-processing pipeline for Physical Realism. Restores the natu, Polar-to-Cartesian scan conversion following FIG / Guide logic. Converts RA, Convert 2D array to colormapped B64 PNG with guide-compliant normalization., render_heatmap() (+1 more) ### Community 11 - "Radar Signal Detection" Cohesion: 0.22 Nodes (5): CA_CFAR, Description: ------------ Performs the automatic detection o, Description: ------------ Cell Averaging - Constant False Alarm Rate, apply range window and doppler window and apply fft on each sample to get range, apply fft on each chirp to get doppler profile ### Community 12 - "Data Quality Inspection" Cohesion: 0.33 Nodes (2): inspect_gt(), load_frame() ### Community 13 - "Deep Metrology Analysis" Cohesion: 0.83 Nodes (3): analyze_iteration(), power_law(), run_metrology_suite() ### Community 14 - "Metrology Comparison" Cohesion: 1.0 Nodes (0): ### Community 15 - "Community 15" Cohesion: 1.0 Nodes (0): ### Community 16 - "Community 16" Cohesion: 1.0 Nodes (0): ### Community 17 - "Community 17" Cohesion: 1.0 Nodes (0): ### Community 18 - "Community 18" Cohesion: 1.0 Nodes (0): ### Community 19 - "Community 19" Cohesion: 1.0 Nodes (0): ### Community 20 - "Community 20" Cohesion: 1.0 Nodes (1): Human-readable scenario identifier (e.g. 'braking'). ### Community 21 - "Community 21" Cohesion: 1.0 Nodes (1): Initialise the scenario: - Store world / ego / tm references. ### Community 22 - "Community 22" Cohesion: 1.0 Nodes (1): Per-tick logic executed inside the main simulation loop. Parameters ### Community 23 - "Community 23" Cohesion: 1.0 Nodes (1): Destroy all actors spawned by this scenario. Always call this in a fina ### Community 24 - "Community 24" Cohesion: 1.0 Nodes (1): Override to request a specific weather preset for this scenario. If Non ### Community 25 - "Community 25" Cohesion: 1.0 Nodes (1): Override to request a specific duration for this scenario. If None, the ### Community 26 - "Community 26" Cohesion: 1.0 Nodes (1): Override to request a specific spawn point for the ego vehicle. Returns ### Community 27 - "Community 27" Cohesion: 1.0 Nodes (0): ### Community 28 - "Community 28" Cohesion: 1.0 Nodes (0): ### Community 29 - "Community 29" Cohesion: 1.0 Nodes (0): ### Community 30 - "Community 30" Cohesion: 1.0 Nodes (0): ### Community 31 - "Community 31" Cohesion: 1.0 Nodes (0): ### Community 32 - "Community 32" Cohesion: 1.0 Nodes (0): ## Knowledge Gaps - **39 isolated node(s):** `dashboard/app.py ---------------- Flask backend for the BATL CARLA Orchestrator`, `Returns True if a scenario process is currently alive.`, `Forces all CarlaUE4 processes to terminate.`, `Stops the Flask server itself.`, `scenarios/base.py ----------------- Abstract base class for all CARLA simulati` (+34 more) These have ≤1 connection - possible missing edges or undocumented components. - **Thin community `Metrology Comparison`** (2 nodes): `analyze_session()`, `compare_metrology.py` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 15`** (2 nodes): `get_pos()`, `get_pos.py` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 16`** (2 nodes): `track_full_state.py`, `track_full_state()` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 17`** (2 nodes): `track_peaks.py`, `get_peak_tracking()` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 18`** (2 nodes): `compare_folders()`, `compare_iterations.py` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 19`** (2 nodes): `research_metrology()`, `research_metrology.py` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 20`** (1 nodes): `Human-readable scenario identifier (e.g. 'braking').` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 21`** (1 nodes): `Initialise the scenario: - Store world / ego / tm references.` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 22`** (1 nodes): `Per-tick logic executed inside the main simulation loop. Parameters` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 23`** (1 nodes): `Destroy all actors spawned by this scenario. Always call this in a fina` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 24`** (1 nodes): `Override to request a specific weather preset for this scenario. If Non` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 25`** (1 nodes): `Override to request a specific duration for this scenario. If None, the` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 26`** (1 nodes): `Override to request a specific spawn point for the ego vehicle. Returns` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 27`** (1 nodes): `__init__.py` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 28`** (1 nodes): `__init__.py` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 29`** (1 nodes): `verify_tags.py` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 30`** (1 nodes): `path_config.py` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 31`** (1 nodes): `__init__.py` Too small to be a meaningful cluster - may be noise or needs more connections extracted. - **Thin community `Community 32`** (1 nodes): `check_lidar.py` Too small to be a meaningful cluster - may be noise or needs more connections extracted. ## Suggested Questions _Questions this graph is uniquely positioned to answer:_ - **Why does `main()` connect `Orchestration & Sensor Management` to `Scenario Framework & Maneuvers`, `Radar Simulation & Processing`, `Data Recording & Heatmaps`, `Web Dashboard & Loader`, `MCAP Dataset Conversion`?** _High betweenness centrality (0.263) - this node is a cross-community bridge._ - **Why does `ShenronRadarModel` connect `Radar Simulation & Processing` to `Data Recording & Heatmaps`?** _High betweenness centrality (0.179) - this node is a cross-community bridge._ - **Why does `ScenarioBase` connect `Scenario Framework & Maneuvers` to `Orchestration & Sensor Management`, `Web Dashboard & Loader`?** _High betweenness centrality (0.122) - this node is a cross-community bridge._ - **Are the 16 inferred relationships involving `ScenarioBase` (e.g. with `BrakingScenario` and `scenarios/braking.py -------------------- Lead Vehicle Hard Braking Scenario. A`) actually correct?** _`ScenarioBase` has 16 INFERRED edges - model-reasoned connections that need verification._ - **Are the 15 inferred relationships involving `ShenronRadarModel` (e.g. with `Retrieve GPU hardware info for telemetry display.` and `FastHeatmapEngine`) actually correct?** _`ShenronRadarModel` has 15 INFERRED edges - model-reasoned connections that need verification._ - **Are the 15 inferred relationships involving `radar` (e.g. with `ShenronRadarModel` and `Initialize the Shenron Radar Model. Args: radar_`) actually correct?** _`radar` has 15 INFERRED edges - model-reasoned connections that need verification._ - **Are the 14 inferred relationships involving `RadarProcessor` (e.g. with `ShenronRadarModel` and `Initialize the Shenron Radar Model. Args: radar_`) actually correct?** _`RadarProcessor` has 14 INFERRED edges - model-reasoned connections that need verification._