Getting Started =============== Welcome to BNMPy! This guide will help you get started with Boolean Network and Probabilistic Boolean Network modeling. Installation ------------ To install BNMPy, navigate to the BNMPy directory and run: .. code-block:: bash cd BNMPy pip install -e . Dependencies ~~~~~~~~~~~~ BNMPy requires the following packages: - numpy - scipy - pandas - matplotlib - networkx - pyswarms (for optimization) These will be installed automatically when you install BNMPy. Quick Start ----------- Loading a Network ~~~~~~~~~~~~~~~~~ BNMPy supports loading networks from text files or strings: .. code-block:: python import BNMPy # From a text file network = BNMPy.load_network_from_file("network.txt") # From a string network_string = """ A = A B = C C = !E D = A | B E = C & D F = !A & B """ network = BNMPy.load_network_from_string( network_string, initial_state=[0, 0, 0, 0, 0, 0] ) Network File Format ~~~~~~~~~~~~~~~~~~~ Network files use Boolean logic syntax: .. code-block:: text # Example network file Gene1 = Gene2 & Gene3 Gene2 = !Gene4 Gene3 = Gene1 | Gene5 Gene4 = Gene4 Gene5 = !Gene1 & Gene2 Supported operators: - ``&`` : AND - ``|`` : OR - ``!`` : NOT - ``( )`` : Grouping Initial States ~~~~~~~~~~~~~~ You can specify initial states in two ways: **Array format** (order matches gene order in network, can be obtained from ``network.nodeDict``): .. code-block:: python network = BNMPy.load_network_from_string( network_string, initial_state=[0, 1, 0, 1, 0, 0] ) **Dictionary format** (explicit gene names): .. code-block:: python network = BNMPy.load_network_from_string( network_string, initial_state={'A': 0, 'B': 1, 'C': 0, 'D': 1, 'E': 0, 'F': 0} ) Gene order can be obtained from ``network.nodeDict``. Basic Simulation ---------------- Deterministic Update ~~~~~~~~~~~~~~~~~~~~ Synchronous update (all nodes update simultaneously): .. code-block:: python # Run for 10 steps, the trajectory will be printed network.update(iterations=10) # Access current state print(network.nodes) Stochastic Update ~~~~~~~~~~~~~~~~~ Add noise to represent biological uncertainty: .. code-block:: python # Update with 5% flip probability network.update_noise(p=0.05, iterations=10) Steady State Analysis ~~~~~~~~~~~~~~~~~~~~~ Find stable states: .. code-block:: python from BNMPy import SteadyStateCalculator calc = SteadyStateCalculator(network) # Monte Carlo method (more accurate) steady_state = calc.compute_steady_state( method='monte_carlo', n_runs=20, n_steps=10000 ) # TSMC method (faster) steady_state = calc.compute_steady_state( method='tsmc', epsilon=0.001 ) print(f"Steady state probabilities: {steady_state}") Network Visualization --------------------- Create interactive network visualizations: .. code-block:: python # Create visualization BNMPy.vis_network( network, output_html="network.html", interactive=True ) # Open network.html in a browser to view Probabilistic Boolean Networks ------------------------------- Loading a PBN ~~~~~~~~~~~~~ .. code-block:: python # From file pbn = BNMPy.load_pbn_from_file("pbn_network.txt") # From string pbn_string = """ Gene1 = Gene2 & Gene3 | 0.6 Gene1 = Gene4 | 0.4 Gene2 = !Gene1 """ pbn = BNMPy.load_pbn_from_string(pbn_string) PBN Format ~~~~~~~~~~ Each gene can have multiple rules with probabilities: .. code-block:: text # Gene with two alternative rules GeneA = GeneB & GeneC | 0.7 GeneA = !GeneD | 0.3 # Gene with single rule GeneB = GeneA Probabilities must sum to 1.0 for each gene. PBN Simulation ~~~~~~~~~~~~~~ .. code-block:: python # Stochastic update (probabilistic rule selection) pbn.update_noise(p=0.01, iterations=100) # Calculate steady state calc = SteadyStateCalculator(pbn) steady_state = calc.compute_steady_state( method='monte_carlo', n_runs=20, n_steps=5000 ) Network Manipulation -------------------- Knockout/Knockdown ~~~~~~~~~~~~~~~~~~ Fix specific nodes to certain values: .. code-block:: python # Knockout (set to 0) network.knockout('Gene1', value=0) # Stimulate (set to 1) network.knockout('Gene2', value=1) # Undo knockouts network.undoKnockouts() Merging Networks ~~~~~~~~~~~~~~~~ Combine multiple networks: .. code-block:: python # Load networks network1 = BNMPy.load_network_from_file("network1.txt") network2 = BNMPy.load_network_from_file("network2.txt") # Merge into Boolean Network using Inhibitor Wins method merged_bn = BNMPy.merge_networks([network1, network2], method='Inhibitor Wins') # Merge into PBN (creates alternative rules with probability 0.9) merged_pbn = BNMPy.merge_networks([network1, network2], method='PBN', prob=0.9) Next Steps ---------- Now that you've learned the basics, explore: - :doc:`tutorials` - Detailed tutorials with examples - :doc:`steady_state_guide` - Advanced steady state analysis - :doc:`optimization_guide` - Parameter optimization - :doc:`api` - Complete API reference Examples -------- Check the ``Examples/`` directory for Jupyter notebooks: - ``BN_simulation.ipynb`` - Basic Boolean network simulation - ``PBN_simulation.ipynb`` - Probabilistic Boolean network simulation - ``BN_PBN_steady_state.ipynb`` - Steady state analysis - ``knowledge_graph.ipynb`` - Knowledge graph integration - ``Optimization.ipynb`` - Parameter optimization - ``workflow_example.ipynb`` - Complete workflow - ``BN_compression.ipynb`` - Boolean network compression Applications ------------ See the ``pancreatic_cancer_simulation/`` directory for real-world application examples on pancreatic cancer models.