← Search

Data · dataset · 2026

Data & Scripts for: Cross-Scale Multiplicative Dynamics Decode the Resilience Paradox of Monsoon Forests Under Compound Extremes

Listed in ScienceDB

Description

Data & Code Archive for the EAM StudyManuscript: Enhanced atmospheric water demand (VPD) variability modulates South Chinese Monsoon Forest (SCMF; 20°–35°N, 100°–122°E) summer gross primary productivity anomalies: a Fast-MEEMD, causal (PCMCI), and normalized Hilbert spectral analysis of the 2003 and 2013 heatwavesVersion: v4.0 (2026-09-24: NHT/DQ upgrade, main-text Figures 4–6 renumbering, SI Figures S1–S5) Date: 2026-09-24 License: This repository is released under CC BY 4.0 (data and code), in line with the AGU Data Policy.

Please cite this record and the associated manuscript if you use any part of it.1. Overview and methodological highlightsThis self-contained eam/ bundle provides the reproducible scripts, input/intermediate NetCDF data, and derived figures and tables for the mechanism study on how atmospheric water demand (VPD) variability modulates summer GPP anomalies of the South Chinese Monsoon Forests (SCMFs; 20°–35°N, 100°–122°E) during the 2003 and 2013 heatwaves.Two methodological pillars underpin the analysis and must be highlighted:Spatiotemporal separation with Fast-MEEMD.    Spatially gridded anomalies are separated into oscillatory modes with physical time scales using Fast Multivariate Ensemble Empirical Mode Decomposition (Fast-MEEMD) — an accelerated realization of the multivariate EEMD approach (MEEMD; Wu, Huang, & Chen, 2009) based on principal-component (PCA/EOF) compression of the spatial field followed by EEMD of the leading principal components (Wang et al., 2014).

Read the rest (12 more)

The separated IMFs (intrinsic mode functions) provide the carrier (high-frequency, sub-seasonal) and modulation (low-frequency, intraseasonal-to-seasonal) bands analyzed in the manuscript.Frequency-domain analysis fully upgraded to the Normalized Hilbert Transform (NHT) with Direct Quadrature (DQ).    Instantaneous frequency and phase are extracted with the Normalized Hilbert Transform (NHT) combined with Direct Quadrature (DQ) (Huang et al., 2009), which explicitly removes the amplitude-fluctuation dependence of the analytic signal before phase differentiation.

This eliminates phase singularities and spurious (negative/overshoot) instantaneous frequencies that the classical Hilbert transform produces when the Bedrosian and Nuttall conditions are violated — a known limitation of the plain Hilbert approach (Huang et al., 2009). All main-text spectral diagnostics (Figures 5a, 5b, and 6) and their supplementary counterparts use the NHT/DQ algorithm; a quality-control report quantifying the removed negative-frequency fractions is provided in outputs/tables/qc_nht_report.txt.Causal inference is performed with the PCMCI framework (Runge et al., 2019) on the time-separated components, and band-energy partitioning is quantified from NHT-based marginal spectra.2.

Directory treeeam/                 # EAM reproducibility bundle root (EAM_ROOT)├── README.md             # quick-start entry point├── LICENSE              # CC BY 4.0 license (data and code)├── requirements.txt         # Python dependencies (Python >= 3.10)├── run_revision.sh          # one-click re-run of the revised NHT outputs (Figures 5a/5b/6)├── DATA_LARGE_FILES.md        # large-file inventory & size guidance│├── data/               # all inputs and intermediates (see data/README.md)│ ├── README.md│ ├── DATA_COPIED_MANIFEST.md│ ├── raw_inputs/          # el_gpp4ea.nc, el_sm4ea.nc, el_t2m4ea.nc, el_vpd4ea.nc (+ README.md)│ ├── fast_meemd/          # Fast-MEEMD decomposition & IMF artifacts (K = 4/8/20 runs)│ │ ├── fast_meemd_results_{2003,2013}.nc│ │ ├── cfast_input_k{4,20}_{2003,2013}.nc│ │ ├── pc_eemd_results_k4_{2003,2013}.nc│ │ ├── carrier_modulation_k8_{2003,2013}.nc│ │ ├── imf_physics_k8_{2003,2013}.nc (+ _summary/spectral_groups txt)│ │ └── k_sensitivity_results.txt│ ├── forcing_marginal/       # NHT marginal spectra of forcings│ │ └── forcing_marginal_spectrum_{2003,2013}.nc│ ├── pcmci_results/        # PCMCI outputs (+ README.md)│ │ ├── gridded_pcmci_results_{2003,2013}.nc│ │ ├── all_lags_{2003,2013}_ANNUAL.nc│ │ └── README.md│ └── bootstrap_cache/       # bootstrap caches for step2_2 (first run: slow)│   └── *_bootstrap.nc (10 files: gpp_self / sm_to_gpp / t2m_to_gpp / vpd_to_gpp / total × 2003,2013)│├── scripts/             # all analysis & plotting code (English)│ ├── eam_paths.py         # single source of truth for all paths│ ├── figure1_common.py       # shared Figure 1 helpers│ ├── run_all.sh          # full pipeline launcher (run as: bash scripts/run_all.sh)│ ├── qc_check_nht.py        # NHT quality control (negative-frequency / envelope checks)│ ├── verify_data_coordinates.py  # data-coordinate consistency checks│ ├── step0_0_figure1a_gpp_seasonal_maps.py   # Figure 1a│ ├── step0_0_figure1b_regional_mean_timeseries.py # Figure 1b│ ├── step0_1_create_table1.py          # Table 1│ ├── step1_jphs_analysis.py           # Figure 2 (joint PDF heatmaps)│ ├── step2_0_pcmci_annual_gridded.py      # gridded annual PCMCI (needs annual_inputs/)│ ├── step2_1_pcmci_failure.py          # Figure 3 (failure maps + metric CSVs)│ ├── step2_2_bootstrap_robustness.py      # Figure 3 (bootstrap robustness)│ ├── step2_3_create_table2.py          # Table 2│ ├── step2_3_create_table_s1.py         # Table S1 (PCMCI parameter documentation)│ ├── step_si_figure_s1_k_sensitivity_scan.py  # K-sensitivity scan; writes data/fast_meemd/k_sensitivity_results.txt (heavy, off by default)│ ├── step3_2_create_table_s2.py         # Table S2 (IMF characteristics)│ ├── step3_3_create_table3_imf_characteristics.py # Table 3│ ├── step3_fast_meemd_pc_eemd.py        # Fast-MEEMD decomposition (heavy; regenerates data/fast_meemd/)│ ├── step3_fast_meemd_reconstruction.py     # field reconstruction from IMFs│ ├── step3_fast_meemd_separate.py        # spatiotemporal separation helper│ ├── step3_4_figure4_imf_period_kde_kldiv_3x3.py  # Figure 4 (IMF 1-8 period KDE, 2003 vs 2013, + K-L divergence)│ ├── step4_0_figure5a_forcing_marginal_spectrum.py # Figure 5a (band energy partition, NHT) + SI Figure S2│ ├── step4_1_figure5b_imf_spectral_gap.py    # Figure 5b (IMF energy–period, NHT)│ ├── step5_0_figure6_holo_hilbert_multiplicative_spectrum.py # Figure 6 (2D Holo-Hilbert NHT multiplicative spectrum; 6a/6b)│ ├── archive_legacy/              # retired duplicates (figure6/8/9 legacy variants; deprecated EOF spatial-loading S1; retired SI S2 IMF 1-8 KDE + K-L 3×3, now served by main-text Figure 4; not run)│ ├── step_si_figure_s1_k_truncation_optimization.py # SI Figure S1 (K-truncation sensitivity curve)│ ├── step_si_figure_s3_nht_vs_ht_instantaneous_frequency.py # SI Figure S3 (HT vs NHT/DQ validation)│ ├── step_si_figure_s4_s5_modal_energy_maps.py # SI Figures S4 & S5 (seasonal carrier/modulator spatial fields; demoted from the main text 2026-09-21)│ ├── step6_4_create_table_s4_nht_qc.py      # Table S4 (NHT QC metrics)│ └── step5_1_create_table_s3_forcing_energy_gain.py # Table S3│├── outputs/│ ├── figures/            # main-text figures ONLY (Figure 1–6 series)│ │ ├── figure1a_gpp_seasonal_maps.png            (Figure 1a)│ │ ├── figure1b_regional_mean_timeseries.png         (Figure 1b)│ │ ├── figure2_joint_probability_heatmaps.png        (Figure 2)│ │ ├── figure3_pcmci_causality_failure.png          (Figure 3)│ │ ├── figure3_bootstrap_robustness.png           (Figure 3)│ │ ├── figure4_imf_period_kde_kldiv_3x3.png         (Figure 4; IMF 1-8 period KDE + K-L divergence, 2003 vs 2013)│ │ ├── figure5a_forcing_carrier_modulation_partition.png   (Figure 5a; NHT band energy partition)│ │ ├── figure5b_imf_energy_period_distribution.png      (Figure 5b; NHT IMF energy–period)│ │ ├── figure6a_holo_hilbert_multiplicative_spectrum.png   (Figure 6a,b; 2D Holo-Hilbert NHT spectrum, LogNorm plasma)│ │ └── figure6b_carrier_modulation_pc1_timeseries.png    (Figure 6c,d; carrier/modulation waves + PC1)│ └── tables/            # tables-as-text and CSV metrics│   ├── table1_anomaly_comparison.txt│   ├── table2_diagnostic_metrics.txt│   ├── table3_imf_characteristics_k8.txt│   ├── metric_failure_baseline_v2_{summary,details}.csv│   └── qc_nht_report.txt     # NHT quality-control report│├── supplementary/│ ├── figures/           # SI figure PNGs (S1-S5; written by step4_0 and step_si_*)│ │ ├── figure_s1_eof_truncation_optimization.png       (SI Figure S1; K-truncation sensitivity curve)│ │ ├── figure_s2_forcing_marginal_spectrum.png        (SI Figure S2)│ │ ├── figure_s3_nht_vs_ht_instantaneous_frequency.png    (SI Figure S3)│ │ ├── figure_s4_modal_energy_spatial_distribution.png    (SI Figure S4; 4×4 seasonal energy-ratio maps)│ │ ├── figure_s4_low_freq_ratio_source.png          (SI Figure S4 source; 2×4 low-freq only)│ │ ├── figure_s4_high_freq_ratio_source.png          (SI Figure S4 source; 2×4 high-freq only)│ │ └── figure_s5_modal_energy_difference_seasons.png     (SI Figure S5; 2×4 Δ2003−2013)│ ├── tables/            # SI tables & per-figure statistics│ │ ├── figure_s3_nht_validation_stats.txt│ │ ├── table_s1_pcmci_parameters.txt│ │ ├── table_s2_imf_characteristics.txt│ │ ├── table_s3_forcing_energy_difference.txt│ │ └── table_s4_nht_qc_metrics.txt│ └── archive_deprecated/      # assets removed from the SI (not cited by the text):│   ├── figure_s1_sm_gpp_drought_correlation.png  # soil-moisture/GPP correlation│   ├── figure_s1_sm_gpp_corr_stats.txt│   ├── figure_s1_eof_spatial_patterns.png     # deprecated EOF spatial-loading panels│   ├── figure_s1a_eof_spatial_patterns_{2003,2013}.png│   ├── figure_s2_imf_period_distributions_kde.png # retired SI variant of main-text Figure 4│   ├── figure_s2_k_sensitivity_scan.png      # raw K-scan rendering│   └── step6_1_plot_soil_sensitivity_DEPRECATED.py│├── docs/│ └── ARTICLE_README.md       # this fileMain-text figure index (Figure 1–6) — script ↔ output mapping Figure Content Producing script Output file(s) Figure 1a Extreme-event hydrothermal trajectories & GPP anomaly spatial fields scripts/step0_0_figure1a_gpp_seasonal_maps.py outputs/figures/figure1a_gpp_seasonal_maps.png Figure 1b Regional-mean hydrothermal / GPP anomaly time series scripts/step0_0_figure1b_regional_mean_timeseries.py outputs/figures/figure1b_regional_mean_timeseries.png Figure 2 Bivariate hydrothermal phase-space migration & functional steady-state divergence (joint PDF heatmaps) scripts/step1_jphs_analysis.py outputs/figures/figure2_joint_probability_heatmaps.png Figure 3 Additive time-domain causal inference failure & scale-aliasing artefacts (+ bootstrap robustness) scripts/step2_1_pcmci_failure.py, scripts/step2_2_bootstrap_robustness.py outputs/figures/figure3_pcmci_causality_failure.png, outputs/figures/figure3_bootstrap_robustness.png Figure 4 IMF 1–8 period KDE distributions (2003 vs 2013) + K–L divergence between the two years scripts/step3_4_figure4_imf_period_kde_kldiv_3x3.py outputs/figures/figure4_imf_period_kde_kldiv_3x3.png Figure 5a Forcing-side energy dichotomy (carrier/modulation band partition, NHT) scripts/step4_0_figure5a_forcing_marginal_spectrum.py outputs/figures/figure5a_forcing_carrier_modulation_partition.png Figure 5b Quasi-40-day ecological spectral gap (IMF energy–period, NHT) scripts/step4_1_figure5b_imf_spectral_gap.py outputs/figures/figure5b_imf_energy_period_distribution.png Figure 6a,b 2D Holo-Hilbert multiplicative modulation spectrum (NHT, LogNorm) scripts/step5_0_figure6_holo_hilbert_multiplicative_spectrum.py outputs/figures/figure6a_holo_hilbert_multiplicative_spectrum.png Figure 6c,d Cross-seasonal carrier/modulation envelope time series + PC1 (no EEMD) scripts/step5_0_figure6_holo_hilbert_multiplicative_spectrum.py outputs/figures/figure6b_carrier_modulation_pc1_timeseries.png SI asset map (Figure S1–S5 / Table S1–S4) Asset Description Producing script Output file Figure S1 Fast-MEEMD truncation parameter (K) sensitivity curve: cumulative variance explained + spatial-correlation saturation scripts/step_si_figure_s1_k_truncation_optimization.py supplementary/figures/figure_s1_eof_truncation_optimization.png Figure S2 Continuous Hilbert marginal spectra of atmospheric forcings (VPD, T2m, SM) scripts/step4_0_figure4a_forcing_marginal_spectrum.py supplementary/figures/figure_s2_forcing_marginal_spectrum.png Figure S3 Instantaneous frequency validation of GPP IMF 4: classical HT vs. NHT/DQ scripts/step_si_figure_s3_nht_vs_ht_instantaneous_frequency.py supplementary/figures/figure_s3_nht_vs_ht_instantaneous_frequency.png Figure S4 Seasonal low-/high-frequency modal energy-ratio maps (4×4: 2003/2013 × low/high) — former main-text Figure 5, demoted 2026-09-21 scripts/step_si_figure_s4_s5_modal_energy_maps.py supplementary/figures/figure_s4_modal_energy_spatial_distribution.png (+ per-band sources figure_s4_low_freq_ratio_source.png, figure_s4_high_freq_ratio_source.png) Figure S5 Seasonal modal energy-ratio difference maps, 2003−2013 (2×4) scripts/step_si_figure_s4_s5_modal_energy_maps.py supplementary/figures/figure_s5_modal_energy_difference_seasons.png Table S1 Configuration and Parameter Summary of PCMCI Causal Discovery scripts/step2_3_create_table_s1.py supplementary/tables/table_s1_pcmci_parameters.txt Table S2 Fast-MEEMD Intrinsic Mode Characteristics and Reconstruction Completeness scripts/step3_2_create_table_s2.py supplementary/tables/table_s2_imf_characteristics.txt Table S3 Quantitative Comparison of Sub-Seasonal (30–50 day) Forcing Energy scripts/step5_1_create_table_s3_forcing_energy_gain.py supplementary/tables/table_s3_forcing_energy_difference.txt Table S4 Quality-Control Metrics for NHT/DQ Empirical AM-FM Separation scripts/step6_4_create_table_s4_nht_qc.py supplementary/tables/table_s4_nht_qc_metrics.txt Note on authoritative vs. legacy scripts. The HHT-family figure numbering changed across journal versions.

The authoritative scripts are: Figure 4 → scripts/step3_4_figure4_imf_period_kde_kldiv_3x3.py; Figure 5a → scripts/step4_0_figure5a_forcing_marginal_spectrum.py (also writes SI Fig. S2); Figure 5b → scripts/step4_1_figure5b_imf_spectral_gap.py; Figure 6 → scripts/step5_0_figure6_holo_hilbert_multiplicative_spectrum.py; SI Figure S1 → scripts/step_si_figure_s1_k_truncation_optimization.py; SI Figures S4 & S5 → scripts/step_si_figure_s4_s5_modal_energy_maps.py.

The former Figure 6/8/9 legacy duplicates now live in scripts/archive_legacy/ and are not run. The duplicates are kept only for version continuity and produce identical output.3. Reproducibility3.1 One-click re-run of the revision outputs (recommended)All outputs modified in the latest revision round are regenerated with:cd eambash run_revision.shExecution order and purpose (run_revision.sh): Step Command Outputs 1/7 python3 scripts/step0_0_figure1a_gpp_seasonal_maps.py Figure 1a (year labels 2003–2004 / 2013–2014) 2/7 python3 scripts/step0_0_figure1b_regional_mean_timeseries.py Figure 1b (year labels 2003–2004 / 2013–2014) 3/7 python3 scripts/step2_3_create_table_s1.py Table S1 (reworded plain-language description) 4/7 python3 scripts/step4_0_figure5a_forcing_marginal_spectrum.py Figure 5a + SI Fig. S2 (NHT) 5/7 python3 scripts/step4_1_figure5b_imf_spectral_gap.py Figure 5b (NHT; grid-wise, slowest step) 6/7 python3 scripts/step5_0_figure6_holo_hilbert_multiplicative_spectrum.py Figure 6 (6a/6b: NHT 2D Holo-Hilbert spectrum + carrier/modulation envelopes) 7/7 python3 scripts/qc_check_nht.py outputs/tables/qc_nht_report.txt The revision changed: (i) the standard Hilbert transform to NHT/DQ in Figures 5a, 5b, and 6; (ii) the Figure 6 annotation "Hydraulic Resonance" to "Nonlinear Multiplicative Amplification"; (iii) year labels in Figures 1a/1b; and (iv) plain-language rewording in Table S1.

The seasonal variance-decomposition maps were additionally demoted from the main text to SI Figures S4/S5 (python3 scripts/step_si_figure_s4_s5_modal_energy_maps.py, run via scripts/run_all.sh). The former SI Figure S2 (IMF 1–8 period KDE + K–L divergence, 3×3) is retired to scripts/archive_legacy/ now that the full-mode matrix is carried by main-text Figure 4; it uses zero-crossing period estimation (no Hilbert transform) and is intentionally not re-run by run_revision.sh.3.2 Full pipelineFrom the eam/ root, bash run_all.sh runs every figure/table script that consumes the precomputed data/ NetCDF products.

Heavy optional scripts (gridded PCMCI, K-sensitivity scan, Fast-MEEMD regeneration) are documented in README.md and in each script docstring.3.3 Environmentpython -m venv .venv && source .venv/bin/activate # optionalpip install -r requirements.txt          # numpy, pandas, xarray, netCDF4, scipy,                          # matplotlib, cartopy, tigramite, tqdmpip install EMD-signal               # EEMD engine (PyEMD) used inside Fast-MEEMDPaths are resolved relative to eam/ through scripts/eam_paths.py — no hard-coded machine paths.

Large NetCDF files are expected under data/ (see data/README.md and DATA_LARGE_FILES.md for the size budget).4. Data availability statement (AGU Data Policy)All data underlying the figures and tables are provided within this record, either as processed NetCDF inputs (data/raw_inputs/, data/fast_meemd/, data/pcmci_results/, data/forcing_marginal/, data/bootstrap_cache/) or as derived products (outputs/, supplementary/).

The scripts that produce every figure and table are included, so all results can be regenerated end-to-end. ERA5-derived meteorological fields (VPD, T2m, SM) and satellite GPP used as input are stored in data/raw_inputs/ with provenance described in data/README.md. This record is published under CC BY 4.0 in accordance with the AGU Data Policy.5.

Key referencesHuang, N. E., et al. (1998). The empirical mode decomposition and the Hilbert spectrum for nonlinear and non-stationary time series analysis. Proceedings of the Royal Society of London. Series A, 454, 903–995.Wu, Z., & Huang, N. E. (2009).

Ensemble empirical mode decomposition: a noise-assisted data analysis method. Advances in Adaptive Data Analysis, 1(1), 1–41.Wu, Z., Huang, N. E., & Chen, X. (2009). The multi-dimensional ensemble empirical mode decomposition method (MEEMD). Advances in Adaptive Data Analysis, 1(3), 339–372.Huang, N. E., Wu, Z., Long, S. R., Arnold, K. C., Chen, X., & Blank, K. (2009). On instantaneous frequency. Advances in Adaptive Data Analysis, 1(2), 177–229. NHT/DQ reference·       Runge, J., Nowack, P., Kretschmer, M., Flaxman, S., & Sejdinovic, D. (2019).

Detecting and quantifying causal associations in large nonlinear time series datasets. Science Advances, 5(11), eaau4996. This file is a high-level guide. For exact PCMCI settings, bootstrap design, NHT implementation, and IMF interpretation, see the docstrings and comments in each scripts/step*.py file.

Links

Where it is published

Catalogue records · 1

Topics

Inferred from text
Hydrology 74% · Tabular 65% · Text 75%
Provenance · 1 source records, 14 field assertions
SourceKeyLast seenRaw
ScienceDB10.57760/sciencedb.013xu12 d agoJSON v1
FieldAssertionExtractorEvidence
access_levelsource · scidb cnconnector:scidb_cn@1.0.0
concepts[field].anzsrc:group:3707enrichment · scidb cntaxonomy-embedding@1.0.0title+keywords+description (74%)
concepts[field].local:field:earth-environmentalmapping · scidb cnconnector:scidb_cn@1.0.0
concepts[field].local:field:engineeringmapping · scidb cnconnector:scidb_cn@1.0.0
concepts[field].local:field:humanitiesmapping · scidb cnconnector:scidb_cn@1.0.0
concepts[field].local:field:life-sciencesmapping · scidb cnconnector:scidb_cn@1.0.0
concepts[field].local:field:ocean-atmosphericmapping · scidb cnconnector:scidb_cn@1.0.0
concepts[field].local:field:social-sciencemapping · scidb cnconnector:scidb_cn@1.0.0
concepts[modality].local:modality:tabularenrichment · scidb cnkeyword-concept-rules@1.0.0title+description (65%)
concepts[modality].local:modality:textenrichment · scidb cnkeyword-concept-rules@1.0.0title+description (75%)
descriptionsource · scidb cnconnector:scidb_cn@1.0.0/metadata/dc/description
licensesource · scidb cnconnector:scidb_cn@1.0.0/metadata/dc/rights
publication_datesource · scidb cnconnector:scidb_cn@1.0.0
titlesource · scidb cnconnector:scidb_cn@1.0.0/metadata/dc/title