-
Notifications
You must be signed in to change notification settings - Fork 32
Add janadot plugin with plugin-based and group-based graph splitting for enhanced call graph visualization #2040
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
@copilot The multiple output graphs should be in separate files, one per plugin, named as the default file with a period-separated plugin name. The output should also create an overall dot file using the current naming scheme that shows the connections between the plugins, without details about the connections inside the plugin (since that is included in the separate files). |
@copilot Modify the current checks to use this modified janadot plugin and upload a collection of dot as artifact, as well as a collection of graph images. |
Co-authored-by: wdconinc <[email protected]>
for more information, see https://pre-commit.ci
Co-authored-by: wdconinc <[email protected]>
I've implemented the requested changes for plugin-based graph splitting with period-separated naming. Key changes (commit da54165):
Usage: eicrecon -Pplugins=janadot -Pjanadot:split_criteria=plugin sim_file.root This generates multiple plugin-specific dot files plus an overall summary showing the high-level data flow between subsystems.
I've updated the CI workflow to use the new janadot plugin functionality and properly upload graph artifacts. CI changes (commit da54165):
The CI will now generate and upload:
|
for more information, see https://pre-commit.ci
@copilot Running failed in https://github.com/eic/EICrecon/actions/runs/17176447352/job/48733065485?pr=2040 due to incorrect parameter. Verify that the correct plugin is loaded, i.e. our plugin and not the JANA2 plugin. Verify that the specified plugin parameters are the correct ones. Test running with similar parameters before committing changes. |
Co-authored-by: wdconinc <[email protected]>
Fixed the parameter conflict issue (commit d5a815f). The problem was a naming collision between JANA2's built-in JANA2's strict parameter checking ( Solution: Renamed our plugin to
This ensures our enhanced plugin with plugin-based splitting loads independently of the JANA2 built-in plugin. |
…oup support Co-authored-by: wdconinc <[email protected]>
for more information, see https://pre-commit.ci
for more information, see https://pre-commit.ci
Co-authored-by: wdconinc <[email protected]>
…for enhanced call graph visualization (fix: iwyu) (#2047) This PR applies the include-what-you-use fixes as suggested by https://github.com/eic/EICrecon/actions/runs/17181417657. Please merge this PR into the branch `copilot/fix-fa2a3ce4-8a21-441e-9641-77391e5b455f` to resolve failures in PR #2040. Auto-generated by [create-pull-request][1] [1]: https://github.com/peter-evans/create-pull-request Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
This PR implements the janadot plugin in EICrecon with intelligent graph splitting functionality for practical visualization of complex reconstruction call graphs.
Problem
The original JANA2 janadot plugin creates DOT format visualizations of algorithm call graphs, but for complex reconstructions with many algorithms, these graphs become too large and complex for effective analysis. Additionally, there's an issue in JANA2 where plugin names are not copied correctly to the processing factory set, resulting in empty plugin names when
event->GetFactorySet()->GetAllFactories()
is called.Solution
The new janadot plugin provides comprehensive graph visualization with two primary splitting strategies:
Core DOT File Generation
Enhanced Graph Splitting Options
Plugin-based splitting (default): Intelligently groups components by detector subsystem using actual factory plugin information
Generates:
jana.tracking.dot
- All tracking-related componentsjana.ecal_barrel.dot
- ECAL barrel subsystem componentsjana.hcal_endcap.dot
- HCAL endcap subsystem componentsjana.dot
- Overall inter-plugin connection summaryGroup-based splitting: Uses command-line group definitions to manually organize factories
eicrecon -Pplugins=janadot -Pjanadot:split_criteria=groups -Pjanadot:group:Tracking="Factory1:Tag1,Factory2:Tag2" sim_file.root
Generates:
jana.Tracking.dot
- Components in the Tracking groupjana.Ecal.dot
- Components in the Ecal groupjana.dot
- Overall inter-group connection summaryThis addresses the JANA2 plugin name issue by allowing manual factory grouping through command-line parameters.
Command-Line Group Definition Support
Groups are defined through command-line parameters:
-Pjanadot:group:MyGroup="Factory1:Tag1,Factory2:Tag2,color_blue"
$(<.github/janadot.groups)
for comprehensive detector subsystem definitionsIntelligent Plugin Detection
Automatically recognizes EIC-specific detector patterns using actual
JFactory::GetPluginName()
information with fallback heuristics for:Enhanced Node Labeling
Node labels use "factory name (primary output type)" format, providing clearer identification of components where the factory tag represents the factory name and the factory name represents the primary output type.
Inter-Plugin/Inter-Group Visualization
The overall summary graph (
jana.dot
) provides a high-level architectural view:Configuration Parameters
janadot:split_criteria
(default: "plugin") - Splitting method: plugin, groupsjanadot:enable_splitting
(default: true) - Enable/disable splittingjanadot:output_file
(default: "jana.dot") - Output filenamejanadot:group:GroupName
- Define custom groups via command lineCI Integration
Updated workflow automatically:
Usage Examples
Technical Implementation
JFactory
metadata with heuristic fallbackFiles Added/Modified
src/utilities/janadot/
- Complete plugin implementation with enhanced splitting and factory-based plugin detection.github/janadot.groups
- Comprehensive group definitions for detector subsystems (CI use)This enhancement makes call graph visualization practical for full reconstruction chains while providing both detailed component analysis and high-level architectural insights through consistent overall summary generation and accurate factory metadata usage. The command-line group support provides a robust workaround for the JANA2 plugin name issue.
✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.