← All .science files
pmid:40200603
SapFlower: an automated tool for sap flow data preprocessing, gap-filling, and analysis using deep learning.
Jiaxin Wang · Heidi J Renninger
The New phytologist · 2025 doi:10.1111/nph.70107
Paper
complete
Experiment
partial
Data
partial
Analysis
partial
Execution
absent
Execution evidence has not yet been added to this .science file. Explore its methods, data and open questions to plan the next step.
Record details sci_version · id · kind · revision · content_hash · schema · created_at · updated_at · generator
paper object · 10 fields
authors array · 2 items
claims array · 3 items
[0] object · 6 fields
[1] object · 6 fields
[2] object · 6 fields
evidence array · 1 item
[0] object · 3 fields
gaps array · 0 items
experiment object · 8 fields
steps array · 3 items
[0] object · 13 fields
parameters object · 0 fields
inputs array · 1 item
outputs array · 1 item
instruments array · 0 items
reagents array · 0 items
[1] object · 13 fields
parameters object · 0 fields
inputs array · 0 items
outputs array · 1 item
instruments array · 0 items
reagents array · 0 items
[2] object · 13 fields
parameters object · 0 fields
inputs array · 0 items
outputs array · 1 item
instruments array · 0 items
reagents array · 0 items
materials array · 0 items
instruments array · 0 items
reagents array · 0 items
conditions object · 0 fields
gaps array · 2 items
data object · 3 fields
assets array · 1 item
[0] object · 15 fields
structure object · 4 fields
gaps array · 0 items
analysis object · 4 fields
methods array · 2 items
[0] object · 10 fields
dsl_operations array · 0 items
missing_operations array · 1 item
parameters object · 0 fields
data_shapes array · 1 item
[1] object · 10 fields
dsl_operations array · 0 items
missing_operations array · 0 items
parameters object · 0 fields
data_shapes array · 0 items
targets array · 0 items
gaps array · 2 items
capability object · 3 fields
requirements array · 1 item
[0] object · 6 fields
assay_families array · 9 items
gaps array · 0 items
readiness object · 8 fields
axes object · 3 fields
method object · 5 fields
required_operations array · 0 items
missing_operations array · 1 item
capability object · 4 fields
data object · 6 fields
accessions array · 0 items
resolved_accessions array · 0 items
statements array · 1 item
can_run object · 3 fields
must_build object · 5 fields
dsl_operations array · 1 item
[0] object · 3 fields
converters array · 0 items
readers array · 0 items
capabilities array · 0 items
data_gaps array · 1 item
gaps array · 1 item
review object · 5 fields
machine_critique object · 5 fields
reader object · 5 fields
evidence_check object · 2 fields
usage object · 3 fields
stages array · 1 item
[0] object · 4 fields
gaps array · 3 items
provenance object · 7 fields
entities array · 3 items
activities array · 3 items
[0] object · 4 fields
used array · 3 items
[0] object · 3 fields
[1] object · 3 fields
[2] object · 3 fields
[1] object · 4 fields
agents array · 2 items
lineage object · 4 fields
gaps array · 8 items
assays array · 1 item
[0] object · 11 fields
required_operations array · 0 items
source_hashes object · 1 field
evidence array · 1 item
Complete file
{"sci_version": "1.2", "schema": "https://corpus.bntrg.co.uk/sci/1.0/sci.schema.json", "id": "pmid:40200603", "kind": "science-record", "revision": 3, "content_hash": "sha256:41defbf2ad5bc068d67c244bf948e6e30a4259171d7808b1d0d51299df330623", "created_at": "2026-11-01T20:30:22Z", "updated_at": "2026-11-01T22:13:52Z", "generator": {"name": "corpus-assay-engine", "run_id": "reading-sci-2026-11-01"}, "paper": {"state": "complete", "title": "SapFlower: an automated tool for sap flow data preprocessing, gap-filling, and analysis using deep learning.", "doi": "10.1111/nph.70107", "pmid": "40200603", "authors": ["Jiaxin Wang", "Heidi J Renninger"], "journal": "The New phytologist", "year": 2025, "abstract": "Sap flow, a critical process in plant water use and ecosystem water cycles, is often measured using thermal dissipation probes (TDP) due to their ease of installation and continuous data collection. However, sap flow data frequently include noise, outliers, and gaps, creating challenges for analysis and requiring substantial manual processing. We developed SapFlower, a tool that automates data preprocessing, model training, gap-filling, sapwood area scaling and modeling, and water use analysis. It integrates autocleaning, machine learning and deep learning models (e.g. random forest, Gaussian process regression, long short-term memory (LSTM), bidirectional LSTM (BiLSTM)), and efficient workflows to process sap flow data. SapFlower can remove over 90% of noisy data while preserving legitimate variations and achieve high accuracy in gap-filling based on user-determined parameters. Random forest, LSTM, and BiLSTM models reduced root mean square error to 10% or less for long-term gaps. Model training and prediction can be performed efficiently within seconds. SapFlower significantly enhances the efficiency and accessibility of TDP data analysis by automating complex tasks, enabling researchers without programming expertise to employ advanced techniques. Future improvements will focus on species-specific corrections for TDP and support for additional measurement methods. SapFlower is openly available on GitHub (https://github.com/JiaxinWang123/SapFlower) and Zenodo (doi: 10.5281/zenodo.13665919).", "claims": [{"id": "claim-method", "statement": "During model training for gap‐filling, we fine‐tuned hyperparameters to achieve an RMSE of c. 10% or less of the average raw sap flow measurements (e.g. in ΔV, millivolts).", "kind": "methodological", "target": null, "evidence": [{"asset": "source:pmid:40200603", "locator": "sections[28] \"Model training and gap‐filling\" paragraph 2", "quote": "During model training for gap‐filling, we fine‐tuned hyperparameters to achieve an RMSE of c. 10% or less of the average raw sap flow measurements (e.g. in ΔV, millivolts)."}], "state": "complete"}, {"id": "claim-data-access", "statement": "The data that support the findings of this study are openly available in Zenodo at doi: 10.5281/zenodo.13665919.", "kind": "methodological", "target": null, "evidence": [{"asset": "source:pmid:40200603", "locator": "sections[43] \"Data availability\" paragraph 2", "quote": "The data that support the findings of this study are openly available in Zenodo at doi: 10.5281/zenodo.13665919."}], "state": "complete"}, {"id": "claim-target-result", "statement": "SapFlower removed over 90% of noisy data and reduced root mean square error to 10% or less for long-term gaps using random forest, LSTM, and BiLSTM models.", "kind": "qualitative", "target": null, "evidence": [{"asset": "source:pmid:40200603", "locator": "sections[0] \"Abstract\" paragraph 1", "quote": "SapFlower can remove over 90% of noisy data while preserving legitimate variations and achieve high accuracy in gap‐filling based on user‐determined parameters. Random forest, LSTM, and BiLSTM models reduced root mean square error to 10% or less for long‐term gaps."}], "state": "complete"}], "gaps": []}, "experiment": {"state": "partial", "objective": "SapFlower removed over 90% of noisy data and reduced root mean square error to 10% or less for long-term gaps using random forest, LSTM, and BiLSTM models.", "steps": [{"id": "read_published_estimate", "order": 1, "name": "Read the published estimate from the source", "kind": "other", "state": "complete", "blocked_on": null, "description": "The claim, method and evidence span published with the source article.", "duration_hours": null, "parameters": {}, "inputs": ["source:pmid:40200603"], "outputs": ["the published estimate and its evidence"], "instruments": [], "reagents": []}, {"id": "obtain_source_data", "order": 2, "name": "Obtain the source data from the named repository", "kind": "data-preparation", "state": "blocked", "blocked_on": "data:accession_absent", "description": "The GEO series accession resolves and its sample accessions are listed. This lane did not download the dataset or read its licence.", "duration_hours": null, "parameters": {}, "inputs": [], "outputs": ["the source data with its repository provenance"], "instruments": [], "reagents": []}, {"id": "run_analysis", "order": 3, "name": "Run the published analysis", "kind": "analysis", "state": "blocked", "blocked_on": "method:machine_learning_random_forest", "description": "Apply the paper's statistical method to the resolved series and compare the result with the published target.", "duration_hours": null, "parameters": {}, "inputs": [], "outputs": ["the replicated result and its comparison"], "instruments": [], "reagents": []}], "materials": [], "instruments": [], "reagents": [], "conditions": {}, "gaps": ["step:run_analysis blocked on method:machine_learning_random_forest", "step:obtain_source_data blocked on data:accession_absent"]}, "data": {"state": "partial", "assets": [{"id": "source:pmid:40200603", "role": "manuscript", "format": "xml", "media_type": "application/xml", "uri": "https://doi.org/10.1111/nph.70107", "sha256": "sha256:7dcfdecfa578d5afb9d50aa25812f1986384265fac3bd9204d94d7764e6d275e", "bytes": 58997, "access": "open", "state": "resolved", "reader": null, "reader_status": "reader_required", "identifier": "10.1111/nph.70107", "version": null, "note": "Full article fetched from PMC; the checksum covers the rendered section body, not the original XML bytes.", "structure": {"pmcid": "PMC12059536", "source": "europe_pmc_fulltext", "coverage": "whole_body_without_references", "text_hash_scope": "rendered_section_body"}}], "gaps": []}, "analysis": {"state": "partial", "methods": [{"id": "method-1", "family": "machine_learning", "specific": "random_forest", "label": "Machine learning", "dsl_operations": [], "missing_operations": ["machine_learning_random_forest"], "expressible": false, "parameters": {}, "data_shapes": ["labelled_feature_matrix"], "evidence": {"score": 0.7, "band": "medium", "quote": "random forest"}}, {"id": "method-2", "family": null, "specific": null, "label": "Root mean square error (RMSE)", "dsl_operations": [], "missing_operations": [], "expressible": null, "parameters": {}, "data_shapes": [], "evidence": {"score": 1.0, "band": "verbatim", "quote": "During model training for gap‐filling, we fine‐tuned hyperparameters to achieve an RMSE of c. 10% or less of the average raw sap flow measurements (e.g. in ΔV, millivolts)."}}], "targets": [], "gaps": ["method.reader_named_unmapped", "method.machine_learning_random_forest"]}, "capability": {"state": "complete", "requirements": [{"capability_id": "capability:computational_analysis", "label": "Computational analysis platform", "assay_families": ["meta_analysis", "machine_learning", "survival_analysis", "statistical_regression", "pca", "molecular_docking", "network_analysis", "differential_expression", "gwas"], "availability_state": "owned", "tier_unlocked": "R1", "candidate": "Automated Assays Laravel application and simulated adapters"}], "gaps": []}, "readiness": {"state": "blocked", "tier": "R4", "blocking_axis": "data", "blocked_on": "data:accession_absent", "axes": {"method": {"tier": "R1", "expressible": false, "required_operations": [], "missing_operations": ["machine_learning_random_forest"], "basis": "The paper names the method it used and the corpus's method extractor maps it onto the DSL catalogue: random_forest."}, "capability": {"tier": "R1", "capability_id": "capability:computational_analysis", "availability_state": "owned", "basis": "The computational analysis is owned. The physical bench the paper used is not, so a physical validation cannot be run here."}, "data": {"tier": "R4", "reachable": false, "accessions": [], "resolved_accessions": [], "statements": ["The data that support the findings of this study are openly available in Zenodo at doi: 10.5281/zenodo.13665919."], "basis": "The paper names no accession to its source data, so the data has to come from the authors."}}, "can_run": {"dsl_operations": [], "assets": ["source:pmid:40200603"], "steps": []}, "must_build": {"dsl_operations": [{"operation": "machine_learning_random_forest", "unlocks_papers": null, "priority": null}], "converters": [], "readers": [], "capabilities": [], "data_gaps": ["data:geo:None"]}, "gaps": ["data:accession_absent"]}, "review": {"state": "partial", "machine_critique": {"kind": "extraction_review", "reader": {"model": "MiniMax-M3.1-Flash", "provider": "minimax", "provider_family": "minimax", "read_at": "2026-11-01T19:49:45Z", "independence": "single_reader"}, "evidence_check": {"method": "verbatim", "availability": "verbatim"}, "calls": 5, "usage": {"prompt_tokens": 15152, "completion_tokens": 1111, "cached_tokens": 264}}, "human_critique": null, "stages": [{"id": "extraction", "state": "complete", "reader": "MiniMax-M3.1-Flash", "provider": "minimax"}], "gaps": ["review.independent_reader", "review.machine_critique", "review.human_critique"]}, "execution": {"state": "absent", "status": "not_run", "mode": null, "runs": [], "gaps": ["execution.not_run"]}, "provenance": {"entities": [{"id": "pmid:40200603", "type": "paper", "label": "pmid:40200603"}, {"id": "source:pmid:40200603", "type": "manuscript", "label": "PMID 40200603 full text"}, {"id": "data:geo:None", "type": "dataset", "label": "GEO None"}], "activities": [{"id": "activity-reading-sci-2026-11-01", "type": "classification", "used": [{"id": "pmid:40200603", "type": "paper", "label": "pmid:40200603"}, {"id": "source:pmid:40200603", "type": "manuscript", "label": "PMID 40200603 full text"}, {"id": "data:geo:None", "type": "dataset", "label": "GEO None"}], "agent": "agent:corpus-assay-engine"}, {"id": "activity-read-40200603", "type": "extraction", "used": ["source:pmid:40200603"], "agent": "agent:minimax-reader"}, {"id": "activity-resolve-None", "type": "accession_resolution", "used": ["data:geo:None"], "agent": "agent:corpus-assay-engine"}], "agents": [{"id": "agent:corpus-assay-engine", "type": "software", "label": "Corpus assay engine"}, {"id": "agent:minimax-reader", "type": "software", "label": "MiniMax literature reader"}], "source_run_id": "reading-sci-2026-11-01", "dsl_catalogue_fingerprint": "343fb30756ba6ec3", "capability_table_fingerprint": "2cb3e42f047d2ecf", "snapshot_id": "ba34b49490d9bfaf"}, "lineage": {"parent_id": "pmid:40200603", "parent_hash": "sha256:eaefd051ab3de48b34e6d58dbdf69d6aefa0359314776aea9df107f3f5ac2104", "fork_of": null, "generation": 2}, "gaps": ["execution.not_run", "method.machine_learning_random_forest", "method.reader_named_unmapped", "review.human_critique", "review.independent_reader", "review.machine_critique", "step:obtain_source_data blocked on data:accession_absent", "step:run_analysis blocked on method:machine_learning_random_forest"], "assays": [{"role": "analysis", "definition_id": "machine_learning", "definition_version": "f2132e96ae6c7a4e", "definition_digest": null, "required_operations": [], "support_state": "partial", "source_hashes": {"dsl_catalogue": "f2132e96ae6c7a4e"}, "confidence": 0.7, "evidence": ["random forest"], "order_basis": "analysis_only", "id": "assay:1"}]}