Skip to main content

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.

Python 3.8+ PyPI version License: GPL v3 Documentation

๐Ÿš€ 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

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:

  • @zacsims โ€” fixed Dirichlet boundary boolean attribute casing (enabled="False" โ†’ enabled="false") in the XML output (#5)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

physicell_settings-0.6.1.tar.gz (81.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

physicell_settings-0.6.1-py3-none-any.whl (61.1 kB view details)

Uploaded Python 3

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

Hashes for physicell_settings-0.6.1.tar.gz
Algorithm Hash digest
SHA256 5b268db771f85dd4136958ec9a1212f2009ac196bba4a094449ce29271ae52a2
MD5 abe565c5d9346011b0248a851060e4e7
BLAKE2b-256 71f2916f0161db3a1762e10b1830b44ffaea8f16cc54e792de99292543859fd1

See more details on using hashes here.

File details

Details for the file physicell_settings-0.6.1-py3-none-any.whl.

File metadata

File hashes

Hashes for physicell_settings-0.6.1-py3-none-any.whl
Algorithm Hash digest
SHA256 c313ecb086ffea8e6c42db6972240737fe4b71bf7c3aaafbdbd019239bb3c309
MD5 c3d216709602d73bd48cebd704ae637b
BLAKE2b-256 52fb03be0e60b5aaa2f17e8fa5a886271143ac3221956f597825d9a37c2f35c1

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page