.. _tutorials: ========= Tutorials ========= These tutorials provide step-by-step guides for common BING workflows. .. toctree:: :maxdepth: 2 basic_fitting pace_processing argo_matching model_comparison uncertainty_analysis visualization Getting Started --------------- If you're new to BING, we recommend starting with these tutorials in order: 1. :doc:`basic_fitting` - Learn the fundamentals of fitting bio-optical models 2. :doc:`pace_processing` - Process PACE OCI data 3. :doc:`argo_matching` - Match satellite data with Argo floats 4. :doc:`model_comparison` - Compare different model formulations 5. :doc:`uncertainty_analysis` - Quantify uncertainties in retrieved parameters 6. :doc:`visualization` - Create publication-quality figures Tutorial Format --------------- Each tutorial includes: * **Objectives** - What you'll learn * **Prerequisites** - Required knowledge and data * **Code examples** - Complete, runnable code * **Expected output** - What results to expect * **Exercises** - Practice problems to test understanding Example Data ------------ Tutorial data can be downloaded from: * PACE OCI sample data: `NASA Earthdata `_ * Argo BGC profiles: `Argo Data Management `_ * Loisel et al. (2023) synthetic dataset: Included in BING Jupyter Notebooks ----------------- Interactive Jupyter notebooks for all tutorials are available in the `BING repository `_. To run the notebooks: .. code-block:: bash git clone https://github.com/yourusername/bing.git cd bing/notebooks jupyter notebook Quick Examples -------------- Basic Fitting Example ~~~~~~~~~~~~~~~~~~~~~ .. code-block:: python import numpy as np from bing.parameters import standard from bing.models import utils as model_utils from bing.fitting import chisq_fit # Setup wavelengths = np.arange(400, 701, 10) params = standard.expb_pow() models = model_utils.init(params.model_names, wavelengths) # Simulate data (replace with real data) true_params = [0.01, 0.65, 0.015, 0.001] Rrs_true = models[0].eval(true_params[:2]) + models[1].eval(true_params[2:]) Rrs_noise = Rrs_true + np.random.normal(0, 0.0005, len(wavelengths)) Rrs_unc = np.full_like(Rrs_noise, 0.0005) # Fit result = chisq_fit.fit(models, wavelengths, Rrs_noise, Rrs_unc) print(f"Fitted: {result['x']}") print(f"True: {true_params}") PACE Processing Example ~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: python from ocpy.pace import io as pace_io import fitting as m_fitting import pandas as pd # Load matched data matched = pd.read_csv('matched_argo_bgc_profiles.csv') # Process first match imatched = matched.iloc[0] outfile = f"fits/{imatched.cruise}_{imatched.profile:03d}.npz" # Run fitting m_fitting.doit(imatched, outfile) # Load results results = np.load(outfile) print(f"Available data: {list(results.keys())}") Visualization Example ~~~~~~~~~~~~~~~~~~~~~ .. code-block:: python from bing import plotting import matplotlib.pyplot as plt # After fitting... plotting.show_fits( models, chains, Chl=1.5, Y=443, Rrs_true={'wave': wavelengths, 'spec': Rrs_measured}, perc=(16, 84), savefig='fit_results.png' ) plt.show() Common Issues ------------- **Memory errors with large datasets** Use data chunking or reduce MCMC steps **Convergence failures** Check initial parameters and adjust bounds **Missing dependencies** Ensure all required packages are installed **Authentication errors** Configure NASA Earthdata credentials Support ------- For tutorial-specific questions: * Check the FAQ section in each tutorial * Post issues on GitHub * Contact the BING development team Video Tutorials --------------- Video walkthroughs of key tutorials are available on our `YouTube channel `_. Contributing Tutorials ---------------------- We welcome community-contributed tutorials! See :doc:`/contributing` for guidelines on submitting new tutorials.