**Getting Started with FlowCyPy** --------------------------------- This section is designed to help you set up **FlowCyPy**, familiarize yourself with its components, and explore its capabilities through hands-on experimentation. By following the steps below, you will gain the foundational knowledge and skills needed to contribute meaningfully to the project. Installation ~~~~~~~~~~~~ To get started, clone the **FlowCyPy** repository and install the necessary dependencies: .. code-block:: bash git clone https://github.com/MartinPdeS/FlowCyPy.git cd FlowCyPy python -m pip install -e .[testing, documentation] # For Windows/Linux python -m pip install -e ".[testing, documentation]" # For macOS python -m pytest . # Run tests to validate the installation .. admonition:: Mini Objective After installation, run `pytest` to ensure the software is functioning correctly. If any tests fail, investigate the issues and review the related code to familiarize yourself with its structure and functionality. Explore the Documentation ~~~~~~~~~~~~~~~~~~~~~~~~~~ The **FlowCyPy** documentation provides an in-depth guide to the library’s features, components, and workflows. It is a valuable resource for learning how to configure and run simulations effectively. - Access the documentation: `FlowCyPy Documentation `_ In particular, explore the **Examples** section, which contains tutorials and step-by-step guides for simulating various flow cytometry experiments. .. admonition:: Mini Objective Identify an example in the **Examples** section that simulates scatterers with different sizes. Run the example and analyze the output to understand the relationship between scatterer properties and signals. Run Example Simulations ~~~~~~~~~~~~~~~~~~~~~~~ Pre-written scripts in the `examples` folder demonstrate typical workflows in **FlowCyPy**. Running these scripts is a great way to explore the software’s capabilities. .. code-block:: bash cd examples python example_simulation.py .. admonition:: Mini Objective - Modify an example script to compare the signals generated by a detector with high noise versus one with minimal noise. Observe and interpret the differences. - Adjust detector parameters to induce saturation by using larger scatterers or increasing the laser's optical power. Analyze how saturation impacts the output signal. Study Core Components ~~~~~~~~~~~~~~~~~~~~~~ The core components of **FlowCyPy** are modular and designed for flexibility. Familiarizing yourself with these files will deepen your understanding of the library: - **`scatterer.py`**: Manages particle distributions and their optical properties. - **`source.py`**: Defines laser source characteristics, such as wavelength and power. - **`detector.py`**: Configures detectors, including noise levels, responsitivity, and resolution. - **`flow_cytometer.py`**: Integrates scatterers, sources, and detectors to simulate flow cytometry experiments. .. admonition:: Mini Objective - Use `scatterer.py` to simulate scatterers with distinct refractive indices. Visualize how these variations affect forward and side scatter signals. - Modify `source.py` to experiment with different laser wavelengths. Explore the impact on scattering behavior when particle sizes are comparable to or smaller than the wavelength. - In `detector.py`, reduce the number of signal digitization bins to simulate a low-resolution detector. Observe the effects on signal clarity and precision. - Configure an entire flow cytometry experiment using `flow_cytometer.py` and compare the performance of detectors placed at different angles. Stretch Goals ~~~~~~~~~~~~~ For advanced exploration, consider the following challenges: 1. Experiment with the `NoiseSetting` module: - Combine multiple noise types (e.g., shot noise, thermal noise) to simulate real-world imperfections. - Analyze how cumulative noise impacts signal quality. 2. Create a custom particle population: - Design a population with a bimodal size distribution. - Simulate and analyze the resulting scatter signals. 3. Investigate coincidence analysis: - Use the `EventCorrelator` to study coincidences between detectors. - Examine how altering particle concentration or detector placement affects the coincidence rate. Forking the Repository ~~~~~~~~~~~~~~~~~~~~~~~ In most cases, interns working on **FlowCyPy** will not need to fork the repository. Instead, you can clone the main repository directly and work within branches to implement features or fix issues. However, for specific long-term tasks or independent projects, forking may be required. If forking is necessary: - Fork the repository on GitHub. - Clone your forked version locally. - Sync your fork regularly with the main repository to stay up-to-date. .. admonition:: Mini Objective - Understand the difference between cloning and forking. If you are working collaboratively on shared tasks, stick to cloning unless explicitly instructed otherwise.