User-friendly Python package for generating PhysiCell_settings.xml configuration files
Project description
PhysiCell Settings
A powerful, modular Python package for generating PhysiCell_settings.xml configuration files with comprehensive parameter coverage, intuitive API design, and maintainable architecture.
๐ Overview
The PhysiCell Settings package provides a powerful yet simple API for creating complex PhysiCell simulations. Built with a modern modular architecture, it handles all aspects of PhysiCell configuration with a focus on ease of use, maintainability, and compatibility with existing PhysiCell standards.
๐ฆ Installation
Install from PyPI using pip:
pip install physicell-settings
Requirements:
- Python 3.8 or higher
- No external dependencies (uses only Python standard library)
๐ Quick Start
import physicell_config
from physicell_config import PhysiCellConfig
# Create a new configuration
config = PhysiCellConfig()
# Set up simulation domain
config.domain.set_bounds(x_min=-500, x_max=500, y_min=-500, y_max=500)
# Add substrates
config.substrates.add_substrate(
name="oxygen",
diffusion_coefficient=100000.0,
decay_rate=0.1
)
# Add cell type
config.cell_types.add_cell_type(
name="cancer_cell",
cycle_model="Ki67_basic"
)
# Save configuration
config.save("PhysiCell_settings.xml")
Development Status
Current Version: 0.5.0
This package is stable and actively maintained. All core features are working and covered by regression tests.
โจ Key Features
- ๐๏ธ Modular Architecture - Well-organized, maintainable codebase with focused modules
- ๐ฏ Simple & Intuitive - Clean API with sensible defaults and method chaining
- ๐ง Comprehensive Coverage - All PhysiCell features: domain, substrates, cells, rules, PhysiBoSS
- โ Built-in Validation - Configuration validation with detailed error reporting
- ๐ Full Compatibility - Generates standard PhysiCell XML, reproduces existing configs
- ๐งฌ Advanced Features - Cell rules, PhysiBoSS integration, initial conditions, enhanced visualization
- ๐ Cell Rules CSV - Context-aware generation of rules.csv files with signal/behavior validation
- ๐ Well Documented - Extensive examples and clear modular documentation
๐ฏ Perfect For
- Researchers building new PhysiCell models with complex requirements
- Developers programmatically generating parameter sweeps and batch simulations
- Teams collaborating on large simulation projects with maintainable code
- Educators teaching computational biology with clear, reproducible examples
๐๏ธ Modular Architecture
The configuration builder uses a modular composition pattern that provides:
- Clean Separation: Each module handles one aspect of configuration
- Easy Maintenance: Small, focused files instead of monolithic code
- Team Development: Multiple developers can work on different modules
- Extensibility: Easy to add new modules without affecting existing code
Module Structure
โโโ config_builder_modular.py # Main configuration class
โโโ modules/
โโโ domain.py # Simulation domain and mesh
โโโ substrates.py # Microenvironment substrates
โโโ cell_types.py # Cell definitions and phenotypes
โโโ cell_rules.py # Cell behavior rules and CSV generation with context awareness
โโโ physiboss.py # PhysiBoSS boolean networks
โโโ initial_conditions.py # Initial cell placement
โโโ save_options.py # Output and visualization
โโโ options.py # Simulation parameters
๐ Quick Start
Installation
The package is available on PyPI for easy installation:
pip install physicell-settings
Basic Usage
import physicell_config
from physicell_config import PhysiCellConfig
# Create configuration
config = PhysiCellConfig()
# Set up simulation domain
config.domain.set_bounds(x_min=-400, x_max=400, y_min=-400, y_max=400)
# Add substrates
config.substrates.add_substrate(
name="oxygen",
diffusion_coefficient=100000.0,
decay_rate=0.1
)
# Add cell type
config.cell_types.add_cell_type(
name="cancer_cell",
cycle_model="Ki67_basic"
)
Advanced Modular Usage
# Direct module access for advanced features
config.domain.set_bounds(-500, 500, -500, 500)
config.substrates.add_substrate("glucose", diffusion_coefficient=50000.0)
config.cell_types.add_cell_type("immune_cell")
config.cell_types.set_motility("immune_cell", speed=2.0, enabled=True)
config.cell_types.add_secretion("immune_cell", "oxygen", uptake_rate=5.0)
config.cell_rules.add_rule("oxygen", "proliferation", "cancer_cell")
config.physiboss.enable_physiboss("boolean_model.bnd")
config.initial_conditions.add_cell_cluster("cancer_cell", x=0, y=0, radius=100)
๐ Examples
Complete Tumor-Immune Simulation
from config_builder_modular import PhysiCellConfig
# Create configuration
config = PhysiCellConfig()
# Setup domain
config.domain.set_bounds(-600, 600, -600, 600)
config.domain.set_mesh(20.0, 20.0)
# Add substrates
config.substrates.add_substrate("oxygen",
diffusion_coefficient=100000.0,
decay_rate=0.1,
initial_condition=38.0)
config.substrates.add_substrate("glucose",
diffusion_coefficient=50000.0,
decay_rate=0.01,
initial_condition=10.0)
# Add cell types
config.cell_types.add_cell_type("cancer_cell")
config.cell_types.set_motility("cancer_cell", speed=0.5, enabled=True)
config.cell_types.add_secretion("cancer_cell", "oxygen", uptake_rate=10.0)
config.cell_types.add_cell_type("immune_cell")
config.cell_types.set_motility("immune_cell", speed=2.0, enabled=True)
# Add initial conditions
config.initial_conditions.add_cell_cluster("cancer_cell", x=0, y=0, radius=150, num_cells=100)
config.initial_conditions.add_cell_cluster("immune_cell", x=300, y=300, radius=50, num_cells=20)
# Add cell rules to XML
config.cell_rules.add_rule(
signal="oxygen",
behavior="proliferation",
cell_type="cancer_cell",
min_signal=0.0,
max_signal=38.0,
min_behavior=0.0,
max_behavior=0.05
)
# Configure visualization
config.save_options.set_svg_options(
interval=120.0,
plot_substrate=True,
substrate_to_plot="oxygen",
cell_color_by="cell_type"
)
# Save configuration
config.save_xml("tumor_immune_simulation.xml")
Loading Cell Rules from CSV
# Create rules CSV file
import csv
rules = [
{"signal": "oxygen", "behavior": "proliferation", "cell_type": "cancer_cell",
"min_signal": 0.0, "max_signal": 38.0, "min_behavior": 0.0, "max_behavior": 0.05},
{"signal": "pressure", "behavior": "apoptosis", "cell_type": "cancer_cell",
"min_signal": 0.0, "max_signal": 1.0, "min_behavior": 0.0, "max_behavior": 0.1}
]
with open("cell_rules.csv", "w", newline="") as f:
writer = csv.DictWriter(f, fieldnames=rules[0].keys())
writer.writeheader()
writer.writerows(rules)
# Load rules in configuration
config.cell_rules.load_rules_from_csv("cell_rules.csv")
๐งช Testing and Validation
Run Demo
python demo_modular.py
Configuration Validation
# Built-in validation
issues = config.validate()
if issues:
for issue in issues:
print(f"โ ๏ธ {issue}")
else:
print("โ
Configuration is valid!")
# Get configuration summary
summary = config.get_summary()
print(f"Substrates: {summary['substrates']}")
print(f"Cell types: {summary['cell_types']}")
๐ Project Structure
physicell_config/
โโโ README.md # This file
โโโ config_builder.py # Main configuration class
โโโ demo_modular.py # Demonstration script
โโโ modules/ # Modular components
โ โโโ __init__.py
โ โโโ base.py # Common utilities
โ โโโ domain.py # Domain configuration
โ โโโ substrates.py # Substrate management
โ โโโ cell_types.py # Cell type definitions
โ โโโ cell_rules.py # Cell behavior rules
โ โโโ physiboss.py # PhysiBoSS integration
โ โโโ initial_conditions.py # Initial cell placement
โ โโโ save_options.py # Output configuration
โ โโโ options.py # Simulation options
โโโ examples/ # Example configurations
โ โโโ PhysiCell_settings.xml # Reference PhysiCell config
โ โโโ basic_tumor.py # Basic tumor example
โ โโโ cancer_immune.py # Cancer-immune interaction
โ โโโ physiboss_integration.py # PhysiBoSS example
โโโ MODULAR_ARCHITECTURE.md # Detailed architecture docs
โโโ MODULARIZATION_COMPLETE.md # Project completion summary
โโโ setup.py # Package setup
๐ง Advanced Features
PhysiBoSS Integration
# Enable PhysiBoSS boolean networks
config.physiboss.enable_physiboss("boolean_model.bnd")
config.physiboss.add_mutation("mutant_cell", "p53", False)
config.physiboss.add_initial_value("EGFR", True)
Complex Initial Conditions
# Multiple initial condition types
config.initial_conditions.add_cell_cluster("cancer", 0, 0, radius=100)
config.initial_conditions.add_single_cell("stem_cell", 200, 200)
config.initial_conditions.add_rectangular_region("stromal", -300, 300, -300, 300, density=0.3)
Enhanced Visualization
# Advanced SVG options
config.save_options.set_svg_options(
plot_substrate=True,
substrate_to_plot="oxygen",
cell_color_by="cell_type",
interval=60.0
)
Cell Rules CSV Generation
# All cell rules functionality is in config.cell_rules
rules = config.cell_rules
rules.update_context_from_config(config) # sync cell types / substrates
# Explore available signals and behaviors
rules.print_available_signals(filter_by_type="contact")
rules.print_available_behaviors(filter_by_type="motility")
rules.print_context() # Shows current cell types and substrates
# Add rules following PhysiCell CSV format
rules.add_rule("tumor", "oxygen", "decreases", "necrosis", 0, 3.75, 8, 0)
rules.add_rule("tumor", "contact with immune_cell", "increases", "apoptosis", 0.1, 0.5, 4, 0)
# Validate all rules against the embedded registry
warnings = rules.validate_rules()
# Generate PhysiCell-compatible CSV file
rules.generate_csv("config/differentiation/rules.csv")
PhysiBoSS Integration
# Add intracellular models to cell types
config.cell_types.add_intracellular_model("T_cell", "maboss")
config.cell_types.set_intracellular_settings("T_cell",
bnd_filename="tcell.bnd",
cfg_filename="tcell.cfg")
config.cell_types.add_intracellular_mutation("T_cell", "FOXP3", 0)
๐ค Contributing
We welcome contributions! The modular architecture makes it easy to:
- Add new modules for additional PhysiCell features
- Enhance existing modules with new functionality
- Improve documentation and examples
- Add comprehensive test suites
๐ง Support & Contact
- Author: Marco Ruscone
- Email: m.ruscone94@gmail.com
- PyPI: https://pypi.org/project/physicell-settings/
For questions, suggestions, or bug reports, please feel free to reach out via email.
๐ License
This project is licensed under the GNU General Public License v3.0 - see the LICENSE file for details.
๐ Acknowledgments
- PhysiCell development team for creating the simulation framework
- The open-source community for inspiration and best practices
Contributors
Thanks to our external contributors:
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file physicell_settings-0.6.1.tar.gz.
File metadata
- Download URL: physicell_settings-0.6.1.tar.gz
- Upload date:
- Size: 81.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5b268db771f85dd4136958ec9a1212f2009ac196bba4a094449ce29271ae52a2
|
|
| MD5 |
abe565c5d9346011b0248a851060e4e7
|
|
| BLAKE2b-256 |
71f2916f0161db3a1762e10b1830b44ffaea8f16cc54e792de99292543859fd1
|
File details
Details for the file physicell_settings-0.6.1-py3-none-any.whl.
File metadata
- Download URL: physicell_settings-0.6.1-py3-none-any.whl
- Upload date:
- Size: 61.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c313ecb086ffea8e6c42db6972240737fe4b71bf7c3aaafbdbd019239bb3c309
|
|
| MD5 |
c3d216709602d73bd48cebd704ae637b
|
|
| BLAKE2b-256 |
52fb03be0e60b5aaa2f17e8fa5a886271143ac3221956f597825d9a37c2f35c1
|