igerasimov commited on
Commit
5ab38b4
·
1 Parent(s): 68cf134

classification review-risk flagging

Browse files
data/articles.json CHANGED
@@ -293,18 +293,6 @@
293
  "Year": 2025,
294
  "Abstract": "Abstract We provide the first method allowing to retrieve spaceborne SIF maps at 30 m ground resolution with a strong correlation ( $$r^2=0.6$$ r 2 = 0.6 ) to high-quality airborne estimates of sun-induced fluorescence (SIF)SIF estimates can provide explanatory information for many tasks related to agricultural management and physiological studies. While SIF products from airborne platforms are accurate and spatially well resolved, the data acquisition of such products remains science-oriented and limited to temporally constrained campaigns. Spaceborne SIF products on the other hand are available globally with often sufficient revisit times. However, the spatial resolution of spaceborne SIF products is too small for agricultural applications. In view of ESAs upcoming FLEX mission we develop a method for SIF retrieval in the O $$_2$$ 2 -A band of hyperspectral DESIS imagery to provide first insights for spaceborne SIF retrieval at high spatial resolution. To this end, we train a simulation-based self-supervised network with a novel perturbation based regularizer and test performance improvements under additional supervised regularization of atmospheric variable prediction. In a validation study with corresponding HyPlant derived SIF estimates at 740 nm we find that our model reaches a mean absolute difference of $$0.78 \\, \\, \\mathrm {mW\\, nm^{-1} \\, sr^{-1} \\, m^{-2}}$$ 0.78 mW nm - 1 sr - 1 m - 2 ."
295
  },
296
- {
297
- "DOI": "10.1007/978-981-15-2527-8_7-1",
298
- "Title": "Emissions on Global Scale",
299
- "Year": 2023,
300
- "Abstract": ""
301
- },
302
- {
303
- "DOI": "10.1007/978-3-032-07705-9_11",
304
- "Title": "Sulfur in Volcanism",
305
- "Year": 2026,
306
- "Abstract": ""
307
- },
308
  {
309
  "DOI": "10.5194/WES-11-961-2026",
310
  "Title": "How well can the Mann model describe typhoon turbulence?",
@@ -359,12 +347,6 @@
359
  "Year": 2026,
360
  "Abstract": "Introduction Plant defence elicitors have emerged as promising tools and a sustainable alternative to enhance crop resilience. In barley, the potential benefits of elicitors on agronomic performance remain insufficiently understood. The present study aimed to evaluate the effects of the defence elicitor Plant Stimulator and Protector 1 (PSP1) on the Fusarium graminearum barley pathosystem in the Argentine Pampas, considering application timing. Methods Field experiments were conducted in 2022 and 2023 using two contrasting commercial tworow spring barley genotypes. The PSP1 was applied at three phenological stages: tillering (T1), stem elongation (T2), and heading (T3), with plots artificially inoculated with F. graminearum (DC.55) . Disease parameters, yield components, commercial grain traits and industrial malting quality variables were assessed. Results and discussion The results showed that applications close to heading resulted in low, nonsignificant reductions in FHB incidence (10%) and severity (5%) relative to earlier applications. Grain yield components were largely unaffected by PSP1, whereas malting quality showed a clear change in response to defence activation. Late applications tended to negatively affect malt extract, friability, and the Kolbach index (5%), as well as FAN and filtration time (25%) compared to the control. In contrast, malt protein, grain size, and wort pH increased. Under lowmoderate FHB pressure, PSP1 application timing was a key determinant of barley agronomic and technological outcomes, with earlier applications linked to better malting quality. These results provide novel fieldbased insights into elicitor use in barley, supporting the design of future multienvironment studies to optimize the deployment of elicitorbased strategies."
361
  },
362
- {
363
- "DOI": "10.2139/SSRN.3179472",
364
- "Title": "Artificial Neural Network for Forecasting One Day Ahead of Global Solar Irradiance",
365
- "Year": 2018,
366
- "Abstract": ""
367
- },
368
  {
369
  "DOI": "10.1029/2025JA034510",
370
  "Title": "Lower Atmospheric Drivers of Upper Atmospheric DaytoDay Variability Over Alaska in Arctic 20182019 Winter",
@@ -689,12 +671,6 @@
689
  "Year": 2025,
690
  "Abstract": "It might be difficult in many countries to find extended time series of measurements related to parameters of lakes hydrology and their interactions with catchments. Nowadays, the combined use of satellite imagery and spatially distributed hydrological models may contribute substantially to this direction. In this study, in order to assess for a long period of years a lakes surface elevation (LSE) and its water balance components, Lake Kastoria and its catchment, under Greeces dry-thermal conditions, were selected as the case study. This research employed the MIKE SHE coupled with the MIKE HYDRO River (MHR) hydrological modeling system, fed with precipitation and leaf area index (LAI) data coming from a ground weather station, typical values of LAI for the specific area, and satellite products from NASA for the precipitation and from Copernicus Global Land Service for the LAI. In all cases where satellite data were used, the simulation of the long-term LSE was very satisfactory, with minor to medium changes to the inflow and outflow components of the water balance in both the catchment (from 0.32 to 7.36%) and the lake (from 1.47 to 11.3%). The above changes were also reflected in the runoff coefficients. In conclusion, the above satellite products can adequately be used for the prediction of the LSE. Furthermore, a plethora of quantified information in relation to the catchments water balance can be extracted and used in decision-making processes."
691
  },
692
- {
693
- "DOI": "10.4430/BGO00517",
694
- "Title": "What mechanisms lead to the enhancement of sea surface chlorophyll-a in the Arafura Sea?",
695
- "Year": 2026,
696
- "Abstract": ""
697
- },
698
  {
699
  "DOI": "10.1029/2025AV001907",
700
  "Title": "Leaf Shedding During Drought Reduces Hydraulic Stress in Trees",
@@ -1037,12 +1013,6 @@
1037
  "Year": 2026,
1038
  "Abstract": "Satellites and models can both provide global CO2 mole fraction data. Satellite measurements are derived from the observed spectra, but they are often hampered by incomplete spatiotemporal coverage mainly due to cloud coverage. Model data is spatially and temporally continuous, but its uncertainty still remains relatively large. Therefore, assessing the spatial coverage, temporal trend, accuracy, and precision of multiple satellite and model products is critical for multi-source XCO2 fusion and joint applications in carbon cycle studies. In this study, we conduct a comprehensive evaluation of the consistencies among the column-averaged mole fraction of CO2 (XCO2) products from four satellites (GOSAT, GOSAT-2, OCO-2, and OCO-3) and three carbon models (CAMS, CT2025, and GEOS) over East Asia between August 2019 and November 2023. OCO-2 and OCO-3 XCO2 measurements show a good agreement, and their differences are generally within 1.5 ppm. Model XCO2 products tend to be larger than the satellite XCO2 measurements across most of East Asia, except the Tibetan Plateau. The satellite and model data are also validated with the ground-based TCCON measurements. GOSAT-2, whose XCO2 data is not bias-corrected, has the largest systematic biases of 3.315.76 ppm, with random uncertainties of 3.485.99 ppm at six TCCON sites. The annual growth rates of XCO2 derived from the four satellite and model products are 1.48 0.402.74 0.36 and 2.23 0.072.64 0.11 ppm/year, respectively, while TCCON-derived values are 2.19 0.152.63 0.12 ppm/year. The satellite and model datasets show systematic biases in the seasonal cycle, characterized by overestimated amplitudes and a consistent 510 day phase delay relative to TCCON. Overall, discrepancies exist among these four satellites and three model XCO2 datasets over East Asia, and users must exercise caution when using them together."
1039
  },
1040
- {
1041
- "DOI": "10.1007/978-981-97-9180-4_3",
1042
- "Title": "Understanding the Role of Land-Atmosphere Interaction on Soil Moisture Persistence",
1043
- "Year": 2025,
1044
- "Abstract": ""
1045
- },
1046
  {
1047
  "DOI": "10.1109/IGARSS55030.2025.11243806",
1048
  "Title": "Seasonal Bias in OCO-2 XCO2 Satellite Observations",
@@ -1613,12 +1583,6 @@
1613
  "Year": 2026,
1614
  "Abstract": "Abstract Measurements of personal ultraviolet radiation (UVR) exposure are a helpful tool in estimating people's UVR exposure. Gained values are valid for the corresponding location, time and date only. Assessment of personal UVR exposure as well as its translation to other locations, times and dates require ambient UVR as a reference. In some cases, UVR measurements are not available at the study site for practical reasons. Therefore, we have investigated alternative methods to substitute onsite measurements of ambient erythemally weighted daily radiant exposure. These methods comprise the assumption of spatial persistency of measurements from distant highgrade instruments, model calculations including clouds (TEMIS) and satellite measurements (OMI). Evaluation was done by substituting measurements of a highgrade instrument operated in Vienna, Austria. Our results show that up to a distance of 82 km the assumption of spatial persistency delivers lowest uncertainties. For larger distances, TEMIS performs better. Substituting with OMI carries the highest uncertainty but is the only method with global coverage, and therefore the only applicable method in large parts of the world. For correction of altitude, an increase of +14%/1000 m was found for clear sky, but for allsky, monthly medians up to +40%/1000 m were found."
1615
  },
1616
- {
1617
- "DOI": "10.1007/978-3-032-17129-0_28",
1618
- "Title": "Characterizing the Morphology and Thermodynamics of Mesoscale Convective Systems Driving Extreme Rainfall in West Africa",
1619
- "Year": 2026,
1620
- "Abstract": ""
1621
- },
1622
  {
1623
  "DOI": "10.5194/ACP-26-5333-2026",
1624
  "Title": "Isotopic apportionment of sulfate aerosols between natural and anthropogenic sources in the outflow of South Asia",
@@ -1817,12 +1781,6 @@
1817
  "Year": 2026,
1818
  "Abstract": "Abstract Aerosol hygroscopicity is a critical parameter for predicting radiative forcing and climate sensitivity, particularly under sub-saturated regimes where it drives complex aerosolwater interactions. Here, we show that externally mixed aerosols exert a stronger influence on direct radiative forcing than is currently represented in models. Incorporating our findings into radiative forcing calculations indicates a stronger aerosol cooling effect, especially at suburban sites, highlighting the importance of representing regional differences in mixing state. The conventional bulk-chemistry approach, which assumes volume-based mixing with limited spatial variability, exhibits low predictive performance for aerosol hygroscopicity (R2 0.61) at urban and suburban sites. Using an interpretable machine learning framework trained on geographically diverse, region-specific datasets can capture this variability with higher accuracy (R2 0.97), identifying key chemical compositional and mixing-state drivers."
1819
  },
1820
- {
1821
- "DOI": "10.1175/BAMS-D-26-0034.1",
1822
- "Title": "The MaddenJulian Oscillation and Equatorial Waves in Operational Forecasting",
1823
- "Year": 2026,
1824
- "Abstract": ""
1825
- },
1826
  {
1827
  "DOI": "10.1175/JHM-D-25-0162.1",
1828
  "Title": "PERSIANN-U-Net: A Global Deep Learning Framework for Near-Real-Time Precipitation Estimation Using Infrared Data",
@@ -2802,9 +2760,9 @@
2802
  "Abstract": "Abstract. The efficacy of the climate intervention method known as cirrus cloud thinning (CCT) is difficult to evaluate in climate models, largely due to uncertainties governing the relative contributions of homogeneous and heterogeneous ice nucleation. Here we take a different approach by employing recent satellite retrievals from the Cloud-Aerosol Lidar and Infrared Pathfinder Satellite Observation (CALIPSO) which provide estimates of the fraction of cirrus clouds dominated by homogeneous and heterogeneous ice nucleation and their associated physical properties. We employ a radiative transfer model (RTM) to quantify the cloud radiative effect for homogeneous and heterogeneous cirrus clouds at the top of atmosphere (TOA), Earth's surface, and within the atmosphere. The RTM experiments are initialized using cirrus microphysical profiles derived from CALIPSO retrievals for cirrus clouds dominated by homogeneous and heterogeneous ice nucleation across different regions (Arctic, Antarctic, and midlatitude) and surface types (ocean and land). We define two bounds: the lower bound assumes a full microphysical transition from the observed composition of homogeneous- and heterogeneous-dominated cirrus to only heterogeneous cirrus and production of new cirrus. The upper bound assumes production of new cirrus and that the atmospheric dynamics enables homogeneous freezing nucleation to occur regardless of the concentration of ice nucleating particles. Based on these bounds, we estimate an instantaneous surface effect ranging from 0.5 to +0.6 W m2 and a TOA effect from 0.9 to +1.1 W m2, respectively, showing the possibility of both cooling and warming. Recommendations are provided to improve the treatment of cirrus clouds in climate models."
2803
  },
2804
  {
2805
- "DOI": "",
2806
  "Title": "Simulated Changes in the Phytoplankton Community Structure at the Subsurface Chlorophyll Maximum in the Philippine sea: Sensitivity Analysis and Possible Temperature Scenarios",
2807
  "Year": 2025,
2808
  "Abstract": "Our study simulated a size-structured phytoplankton community in the Philippine Sea to determine the factors that regulate the vertical phytoplankton distribution using a one-dimensional coupled physical-biological individual-based model in the Virtual Ecosystem Workbench (VEW) software. Three phytoplankton groups (pico-, nanoand microphytoplankton) were governed by specific metabolic and reproductive rates and simulated to be grazed on by copepods, which in turn were controlled by carnivorous zooplankton. Sensitivity analysis using three salinity scenarios (33, 34 and 36 Practical Salinity Units [PSU]) showed that nutrient availability drives the phytoplankton communities towards the end of the simulations, wherein only the 34 PSU simulation was able to recreate the Subsurface Chlorophyll Maximum (SCM) profile similar to the 2011 in-situ observation. Three temperature scenarios (+ 1.0 oC,+ 2.0 oC,+ 10.0 oC) were then used to predict phytoplankton responses to changing temperature regimes. The scenarios predicted the SCM would develop deeper than the original simulation and a significant increase in the abundance of the dominant phytoplankton at the SCM, possibly affecting the higher trophic web or increasing the deep carbon export to deeper waters. Although the VEW software has been useful for investigations on plankton dynamics of global and specific regions, our study finds that the physical dynamics of the software is not attuned to simulate the highly variable Philippine Sea setting, limiting the model runs only to the drier months of the year. We suggest caution in the use of the version of the software as it needs restructuring to be more useful in such areas."
2809
  }
2810
- ]
 
293
  "Year": 2025,
294
  "Abstract": "Abstract We provide the first method allowing to retrieve spaceborne SIF maps at 30 m ground resolution with a strong correlation ( $$r^2=0.6$$ r 2 = 0.6 ) to high-quality airborne estimates of sun-induced fluorescence (SIF)SIF estimates can provide explanatory information for many tasks related to agricultural management and physiological studies. While SIF products from airborne platforms are accurate and spatially well resolved, the data acquisition of such products remains science-oriented and limited to temporally constrained campaigns. Spaceborne SIF products on the other hand are available globally with often sufficient revisit times. However, the spatial resolution of spaceborne SIF products is too small for agricultural applications. In view of ESAs upcoming FLEX mission we develop a method for SIF retrieval in the O $$_2$$ 2 -A band of hyperspectral DESIS imagery to provide first insights for spaceborne SIF retrieval at high spatial resolution. To this end, we train a simulation-based self-supervised network with a novel perturbation based regularizer and test performance improvements under additional supervised regularization of atmospheric variable prediction. In a validation study with corresponding HyPlant derived SIF estimates at 740 nm we find that our model reaches a mean absolute difference of $$0.78 \\, \\, \\mathrm {mW\\, nm^{-1} \\, sr^{-1} \\, m^{-2}}$$ 0.78 mW nm - 1 sr - 1 m - 2 ."
295
  },
 
 
 
 
 
 
 
 
 
 
 
 
296
  {
297
  "DOI": "10.5194/WES-11-961-2026",
298
  "Title": "How well can the Mann model describe typhoon turbulence?",
 
347
  "Year": 2026,
348
  "Abstract": "Introduction Plant defence elicitors have emerged as promising tools and a sustainable alternative to enhance crop resilience. In barley, the potential benefits of elicitors on agronomic performance remain insufficiently understood. The present study aimed to evaluate the effects of the defence elicitor Plant Stimulator and Protector 1 (PSP1) on the Fusarium graminearum barley pathosystem in the Argentine Pampas, considering application timing. Methods Field experiments were conducted in 2022 and 2023 using two contrasting commercial tworow spring barley genotypes. The PSP1 was applied at three phenological stages: tillering (T1), stem elongation (T2), and heading (T3), with plots artificially inoculated with F. graminearum (DC.55) . Disease parameters, yield components, commercial grain traits and industrial malting quality variables were assessed. Results and discussion The results showed that applications close to heading resulted in low, nonsignificant reductions in FHB incidence (10%) and severity (5%) relative to earlier applications. Grain yield components were largely unaffected by PSP1, whereas malting quality showed a clear change in response to defence activation. Late applications tended to negatively affect malt extract, friability, and the Kolbach index (5%), as well as FAN and filtration time (25%) compared to the control. In contrast, malt protein, grain size, and wort pH increased. Under lowmoderate FHB pressure, PSP1 application timing was a key determinant of barley agronomic and technological outcomes, with earlier applications linked to better malting quality. These results provide novel fieldbased insights into elicitor use in barley, supporting the design of future multienvironment studies to optimize the deployment of elicitorbased strategies."
349
  },
 
 
 
 
 
 
350
  {
351
  "DOI": "10.1029/2025JA034510",
352
  "Title": "Lower Atmospheric Drivers of Upper Atmospheric DaytoDay Variability Over Alaska in Arctic 20182019 Winter",
 
671
  "Year": 2025,
672
  "Abstract": "It might be difficult in many countries to find extended time series of measurements related to parameters of lakes hydrology and their interactions with catchments. Nowadays, the combined use of satellite imagery and spatially distributed hydrological models may contribute substantially to this direction. In this study, in order to assess for a long period of years a lakes surface elevation (LSE) and its water balance components, Lake Kastoria and its catchment, under Greeces dry-thermal conditions, were selected as the case study. This research employed the MIKE SHE coupled with the MIKE HYDRO River (MHR) hydrological modeling system, fed with precipitation and leaf area index (LAI) data coming from a ground weather station, typical values of LAI for the specific area, and satellite products from NASA for the precipitation and from Copernicus Global Land Service for the LAI. In all cases where satellite data were used, the simulation of the long-term LSE was very satisfactory, with minor to medium changes to the inflow and outflow components of the water balance in both the catchment (from 0.32 to 7.36%) and the lake (from 1.47 to 11.3%). The above changes were also reflected in the runoff coefficients. In conclusion, the above satellite products can adequately be used for the prediction of the LSE. Furthermore, a plethora of quantified information in relation to the catchments water balance can be extracted and used in decision-making processes."
673
  },
 
 
 
 
 
 
674
  {
675
  "DOI": "10.1029/2025AV001907",
676
  "Title": "Leaf Shedding During Drought Reduces Hydraulic Stress in Trees",
 
1013
  "Year": 2026,
1014
  "Abstract": "Satellites and models can both provide global CO2 mole fraction data. Satellite measurements are derived from the observed spectra, but they are often hampered by incomplete spatiotemporal coverage mainly due to cloud coverage. Model data is spatially and temporally continuous, but its uncertainty still remains relatively large. Therefore, assessing the spatial coverage, temporal trend, accuracy, and precision of multiple satellite and model products is critical for multi-source XCO2 fusion and joint applications in carbon cycle studies. In this study, we conduct a comprehensive evaluation of the consistencies among the column-averaged mole fraction of CO2 (XCO2) products from four satellites (GOSAT, GOSAT-2, OCO-2, and OCO-3) and three carbon models (CAMS, CT2025, and GEOS) over East Asia between August 2019 and November 2023. OCO-2 and OCO-3 XCO2 measurements show a good agreement, and their differences are generally within 1.5 ppm. Model XCO2 products tend to be larger than the satellite XCO2 measurements across most of East Asia, except the Tibetan Plateau. The satellite and model data are also validated with the ground-based TCCON measurements. GOSAT-2, whose XCO2 data is not bias-corrected, has the largest systematic biases of 3.315.76 ppm, with random uncertainties of 3.485.99 ppm at six TCCON sites. The annual growth rates of XCO2 derived from the four satellite and model products are 1.48 0.402.74 0.36 and 2.23 0.072.64 0.11 ppm/year, respectively, while TCCON-derived values are 2.19 0.152.63 0.12 ppm/year. The satellite and model datasets show systematic biases in the seasonal cycle, characterized by overestimated amplitudes and a consistent 510 day phase delay relative to TCCON. Overall, discrepancies exist among these four satellites and three model XCO2 datasets over East Asia, and users must exercise caution when using them together."
1015
  },
 
 
 
 
 
 
1016
  {
1017
  "DOI": "10.1109/IGARSS55030.2025.11243806",
1018
  "Title": "Seasonal Bias in OCO-2 XCO2 Satellite Observations",
 
1583
  "Year": 2026,
1584
  "Abstract": "Abstract Measurements of personal ultraviolet radiation (UVR) exposure are a helpful tool in estimating people's UVR exposure. Gained values are valid for the corresponding location, time and date only. Assessment of personal UVR exposure as well as its translation to other locations, times and dates require ambient UVR as a reference. In some cases, UVR measurements are not available at the study site for practical reasons. Therefore, we have investigated alternative methods to substitute onsite measurements of ambient erythemally weighted daily radiant exposure. These methods comprise the assumption of spatial persistency of measurements from distant highgrade instruments, model calculations including clouds (TEMIS) and satellite measurements (OMI). Evaluation was done by substituting measurements of a highgrade instrument operated in Vienna, Austria. Our results show that up to a distance of 82 km the assumption of spatial persistency delivers lowest uncertainties. For larger distances, TEMIS performs better. Substituting with OMI carries the highest uncertainty but is the only method with global coverage, and therefore the only applicable method in large parts of the world. For correction of altitude, an increase of +14%/1000 m was found for clear sky, but for allsky, monthly medians up to +40%/1000 m were found."
1585
  },
 
 
 
 
 
 
1586
  {
1587
  "DOI": "10.5194/ACP-26-5333-2026",
1588
  "Title": "Isotopic apportionment of sulfate aerosols between natural and anthropogenic sources in the outflow of South Asia",
 
1781
  "Year": 2026,
1782
  "Abstract": "Abstract Aerosol hygroscopicity is a critical parameter for predicting radiative forcing and climate sensitivity, particularly under sub-saturated regimes where it drives complex aerosolwater interactions. Here, we show that externally mixed aerosols exert a stronger influence on direct radiative forcing than is currently represented in models. Incorporating our findings into radiative forcing calculations indicates a stronger aerosol cooling effect, especially at suburban sites, highlighting the importance of representing regional differences in mixing state. The conventional bulk-chemistry approach, which assumes volume-based mixing with limited spatial variability, exhibits low predictive performance for aerosol hygroscopicity (R2 0.61) at urban and suburban sites. Using an interpretable machine learning framework trained on geographically diverse, region-specific datasets can capture this variability with higher accuracy (R2 0.97), identifying key chemical compositional and mixing-state drivers."
1783
  },
 
 
 
 
 
 
1784
  {
1785
  "DOI": "10.1175/JHM-D-25-0162.1",
1786
  "Title": "PERSIANN-U-Net: A Global Deep Learning Framework for Near-Real-Time Precipitation Estimation Using Infrared Data",
 
2760
  "Abstract": "Abstract. The efficacy of the climate intervention method known as cirrus cloud thinning (CCT) is difficult to evaluate in climate models, largely due to uncertainties governing the relative contributions of homogeneous and heterogeneous ice nucleation. Here we take a different approach by employing recent satellite retrievals from the Cloud-Aerosol Lidar and Infrared Pathfinder Satellite Observation (CALIPSO) which provide estimates of the fraction of cirrus clouds dominated by homogeneous and heterogeneous ice nucleation and their associated physical properties. We employ a radiative transfer model (RTM) to quantify the cloud radiative effect for homogeneous and heterogeneous cirrus clouds at the top of atmosphere (TOA), Earth's surface, and within the atmosphere. The RTM experiments are initialized using cirrus microphysical profiles derived from CALIPSO retrievals for cirrus clouds dominated by homogeneous and heterogeneous ice nucleation across different regions (Arctic, Antarctic, and midlatitude) and surface types (ocean and land). We define two bounds: the lower bound assumes a full microphysical transition from the observed composition of homogeneous- and heterogeneous-dominated cirrus to only heterogeneous cirrus and production of new cirrus. The upper bound assumes production of new cirrus and that the atmospheric dynamics enables homogeneous freezing nucleation to occur regardless of the concentration of ice nucleating particles. Based on these bounds, we estimate an instantaneous surface effect ranging from 0.5 to +0.6 W m2 and a TOA effect from 0.9 to +1.1 W m2, respectively, showing the possibility of both cooling and warming. Recommendations are provided to improve the treatment of cirrus clouds in climate models."
2761
  },
2762
  {
2763
+ "DOI": "10.63225/NRCP.RJ.2025.0019",
2764
  "Title": "Simulated Changes in the Phytoplankton Community Structure at the Subsurface Chlorophyll Maximum in the Philippine sea: Sensitivity Analysis and Possible Temperature Scenarios",
2765
  "Year": 2025,
2766
  "Abstract": "Our study simulated a size-structured phytoplankton community in the Philippine Sea to determine the factors that regulate the vertical phytoplankton distribution using a one-dimensional coupled physical-biological individual-based model in the Virtual Ecosystem Workbench (VEW) software. Three phytoplankton groups (pico-, nanoand microphytoplankton) were governed by specific metabolic and reproductive rates and simulated to be grazed on by copepods, which in turn were controlled by carnivorous zooplankton. Sensitivity analysis using three salinity scenarios (33, 34 and 36 Practical Salinity Units [PSU]) showed that nutrient availability drives the phytoplankton communities towards the end of the simulations, wherein only the 34 PSU simulation was able to recreate the Subsurface Chlorophyll Maximum (SCM) profile similar to the 2011 in-situ observation. Three temperature scenarios (+ 1.0 oC,+ 2.0 oC,+ 10.0 oC) were then used to predict phytoplankton responses to changing temperature regimes. The scenarios predicted the SCM would develop deeper than the original simulation and a significant increase in the abundance of the dominant phytoplankton at the SCM, possibly affecting the higher trophic web or increasing the deep carbon export to deeper waters. Although the VEW software has been useful for investigations on plankton dynamics of global and specific regions, our study finds that the physical dynamics of the software is not attuned to simulate the highly variable Philippine Sea setting, limiting the model runs only to the drier months of the year. We suggest caution in the use of the version of the software as it needs restructuring to be more useful in such areas."
2767
  }
2768
+ ]
scripts/run_small_classification.py CHANGED
@@ -208,6 +208,8 @@ REVIEW_CSV_FIELDS = (
208
  "classifier_evidence",
209
  "reason_for_stopping",
210
  "deterministic_valid",
 
 
211
  "no_classification_reason",
212
  "errors",
213
  )
@@ -256,6 +258,8 @@ def review_rows_for_result(result: ArticleResult) -> list[dict[str, object]]:
256
  "classifier_evidence": record.classifier_evidence or "",
257
  "reason_for_stopping": record.reason_for_stopping or "",
258
  "deterministic_valid": record.deterministic_validation.valid,
 
 
259
  "no_classification_reason": "",
260
  "errors": "",
261
  }
@@ -274,12 +278,24 @@ def review_rows_for_result(result: ArticleResult) -> list[dict[str, object]]:
274
  "classifier_evidence": "",
275
  "reason_for_stopping": "",
276
  "deterministic_valid": "",
 
 
277
  "no_classification_reason": result.no_classification_reason or "",
278
  "errors": errors_text(result),
279
  }
280
  ]
281
 
282
 
 
 
 
 
 
 
 
 
 
 
283
  def errors_text(result: ArticleResult) -> str:
284
  """Format structured article errors compactly for review CSV output."""
285
  return "; ".join(f"{error.code}: {error.message}" for error in result.errors)
 
208
  "classifier_evidence",
209
  "reason_for_stopping",
210
  "deterministic_valid",
211
+ "review_required",
212
+ "warnings",
213
  "no_classification_reason",
214
  "errors",
215
  )
 
258
  "classifier_evidence": record.classifier_evidence or "",
259
  "reason_for_stopping": record.reason_for_stopping or "",
260
  "deterministic_valid": record.deterministic_validation.valid,
261
+ "review_required": record.review_required,
262
+ "warnings": classification_warnings_text(record),
263
  "no_classification_reason": "",
264
  "errors": "",
265
  }
 
278
  "classifier_evidence": "",
279
  "reason_for_stopping": "",
280
  "deterministic_valid": "",
281
+ "review_required": "",
282
+ "warnings": article_warnings_text(result),
283
  "no_classification_reason": result.no_classification_reason or "",
284
  "errors": errors_text(result),
285
  }
286
  ]
287
 
288
 
289
+ def classification_warnings_text(record) -> str:
290
+ """Format structured classification warnings compactly for review CSV output."""
291
+ return "; ".join(f"{warning.code}: {warning.message}" for warning in record.warnings)
292
+
293
+
294
+ def article_warnings_text(result: ArticleResult) -> str:
295
+ """Format structured article warnings compactly for review CSV output."""
296
+ return "; ".join(f"{warning.code}: {warning.message}" for warning in result.warnings)
297
+
298
+
299
  def errors_text(result: ArticleResult) -> str:
300
  """Format structured article errors compactly for review CSV output."""
301
  return "; ".join(f"{error.code}: {error.message}" for error in result.errors)
src/gcmd_classifier/pipeline/batch.py CHANGED
@@ -208,7 +208,9 @@ def _run_summary(
208
  cache_hits: int,
209
  cache_misses: int,
210
  ) -> RunSummary:
211
- warnings_count = sum(len(result.warnings) for result in results)
 
 
212
  result_errors = tuple(error for result in results for error in result.errors)
213
  errors = (*invalid_errors, *result_errors)
214
  completed = sum(
@@ -240,6 +242,9 @@ def _run_summary(
240
  result.classification_outcome is ArticleClassificationOutcome.NOT_CLASSIFIED
241
  for result in results
242
  ),
 
 
 
243
  accepted_classifications=classifications,
244
  average_classifications_per_article=(classifications / processed if processed else None),
245
  average_processing_time_seconds=(duration_seconds / processed if processed else None),
 
208
  cache_hits: int,
209
  cache_misses: int,
210
  ) -> RunSummary:
211
+ warnings_count = sum(len(result.warnings) for result in results) + sum(
212
+ len(record.warnings) for result in results for record in result.classifications
213
+ )
214
  result_errors = tuple(error for result in results for error in result.errors)
215
  errors = (*invalid_errors, *result_errors)
216
  completed = sum(
 
242
  result.classification_outcome is ArticleClassificationOutcome.NOT_CLASSIFIED
243
  for result in results
244
  ),
245
+ articles_requiring_review=sum(
246
+ any(record.review_required for record in result.classifications) for result in results
247
+ ),
248
  accepted_classifications=classifications,
249
  average_classifications_per_article=(classifications / processed if processed else None),
250
  average_processing_time_seconds=(duration_seconds / processed if processed else None),
src/gcmd_classifier/pipeline/review.py ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Post-processing review-risk flags for accepted classifications."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from gcmd_classifier.models import (
6
+ ClassificationFinalStatus,
7
+ ClassificationRecord,
8
+ OutputWarning,
9
+ SupportType,
10
+ )
11
+
12
+ REVIEW_RECOMMENDED_WEAK_SUPPORT = "REVIEW_RECOMMENDED_WEAK_SUPPORT"
13
+
14
+
15
+ def flag_review_risk(
16
+ classifications: tuple[ClassificationRecord, ...],
17
+ ) -> tuple[ClassificationRecord, ...]:
18
+ """Mark accepted classifications that should receive manual scientific review."""
19
+ return tuple(_flag_record(record) for record in classifications)
20
+
21
+
22
+ def _flag_record(record: ClassificationRecord) -> ClassificationRecord:
23
+ if not _requires_review(record):
24
+ return record
25
+ warning = OutputWarning(
26
+ code=REVIEW_RECOMMENDED_WEAK_SUPPORT,
27
+ message="Manual scientific review is recommended because support is weak or inferred.",
28
+ stage="review_flagging",
29
+ details={
30
+ "level": record.level,
31
+ "support_type": None if record.support_type is None else record.support_type.value,
32
+ "confidence_final": _confidence_final(record),
33
+ },
34
+ )
35
+ warnings = record.warnings
36
+ if not any(existing.code == REVIEW_RECOMMENDED_WEAK_SUPPORT for existing in warnings):
37
+ warnings = (*warnings, warning)
38
+ return record.model_copy(update={"review_required": True, "warnings": warnings})
39
+
40
+
41
+ def _requires_review(record: ClassificationRecord) -> bool:
42
+ if record.final_status is not ClassificationFinalStatus.ACCEPTED:
43
+ return False
44
+ if record.support_type is None:
45
+ return False
46
+ confidence_final = _confidence_final(record)
47
+ if record.level == "Topic" and record.support_type in {
48
+ SupportType.INFERRED,
49
+ SupportType.MIXED,
50
+ }:
51
+ return True
52
+ if record.support_type is SupportType.INFERRED and record.level in {
53
+ "Variable_Level_2",
54
+ "Variable_Level_3",
55
+ }:
56
+ return True
57
+ if (
58
+ record.support_type is SupportType.INFERRED
59
+ and confidence_final is not None
60
+ and confidence_final < 0.75
61
+ ):
62
+ return True
63
+ return (
64
+ record.support_type is SupportType.MIXED
65
+ and confidence_final is not None
66
+ and confidence_final < 0.70
67
+ )
68
+
69
+
70
+ def _confidence_final(record: ClassificationRecord) -> float | None:
71
+ return None if record.confidence is None else record.confidence.final
src/gcmd_classifier/pipeline/service.py CHANGED
@@ -32,6 +32,7 @@ from gcmd_classifier.models import (
32
  ReviewStatus,
33
  )
34
  from gcmd_classifier.persistence.cache import article_fingerprint, configuration_hash
 
35
  from gcmd_classifier.vocabulary.index import VocabularyIndex
36
 
37
  APPLICATION_VERSION = "0.1.0"
@@ -121,7 +122,7 @@ def classify_article(
121
  errors.extend(rejected.deterministic_validation.errors)
122
  redundancy_result = remove_redundant_classifications(validation_result.accepted, vocabulary)
123
  warnings.extend(redundancy_result.warnings)
124
- classifications = redundancy_result.classifications
125
 
126
  result = _article_result(
127
  article=article,
 
32
  ReviewStatus,
33
  )
34
  from gcmd_classifier.persistence.cache import article_fingerprint, configuration_hash
35
+ from gcmd_classifier.pipeline.review import flag_review_risk
36
  from gcmd_classifier.vocabulary.index import VocabularyIndex
37
 
38
  APPLICATION_VERSION = "0.1.0"
 
122
  errors.extend(rejected.deterministic_validation.errors)
123
  redundancy_result = remove_redundant_classifications(validation_result.accepted, vocabulary)
124
  warnings.extend(redundancy_result.warnings)
125
+ classifications = flag_review_risk(redundancy_result.classifications)
126
 
127
  result = _article_result(
128
  article=article,
tests/test_pipeline.py CHANGED
@@ -38,12 +38,17 @@ def _article(abstract: str = "Atmospheric carbon dioxide profiles are discussed.
38
  )
39
 
40
 
41
- def _decision(candidate_id: str) -> dict:
 
 
 
 
 
42
  return {
43
  "candidate_id": candidate_id,
44
- "confidence": 0.8,
45
  "evidence": f"Evidence for {candidate_id}.",
46
- "support_type": "explicit",
47
  "reason": f"Reason for {candidate_id}.",
48
  }
49
 
@@ -111,6 +116,29 @@ def test_article_stops_at_topic_and_becomes_topic_classification() -> None:
111
  assert result.classifications[0].reason_for_stopping == "Topic is the deepest supported level."
112
 
113
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
114
  def test_article_stops_at_term_and_becomes_term_classification() -> None:
115
  client = FakeModelClient(
116
  [_select_topic(), _select_term(), _stop("Term is the deepest supported level.")]
 
38
  )
39
 
40
 
41
+ def _decision(
42
+ candidate_id: str,
43
+ *,
44
+ support_type: str = "explicit",
45
+ confidence: float = 0.8,
46
+ ) -> dict:
47
  return {
48
  "candidate_id": candidate_id,
49
+ "confidence": confidence,
50
  "evidence": f"Evidence for {candidate_id}.",
51
+ "support_type": support_type,
52
  "reason": f"Reason for {candidate_id}.",
53
  }
54
 
 
116
  assert result.classifications[0].reason_for_stopping == "Topic is the deepest supported level."
117
 
118
 
119
+ def test_review_risk_flagging_preserves_accepted_topic_classification() -> None:
120
+ client = FakeModelClient(
121
+ [
122
+ {"selected": [_decision("topic_0001", support_type="inferred", confidence=0.9)]},
123
+ _stop("Topic is the deepest supported level."),
124
+ ]
125
+ )
126
+
127
+ result = classify_article(
128
+ article=_article(),
129
+ vocabulary=_index(),
130
+ model_client=client,
131
+ settings=ModelSettings(),
132
+ )
133
+
134
+ classification = result.classifications[0]
135
+ assert classification.UUID == "topic-atmosphere"
136
+ assert classification.level == "Topic"
137
+ assert classification.final_status == "accepted"
138
+ assert classification.review_required is True
139
+ assert classification.warnings[-1].code == "REVIEW_RECOMMENDED_WEAK_SUPPORT"
140
+
141
+
142
  def test_article_stops_at_term_and_becomes_term_classification() -> None:
143
  client = FakeModelClient(
144
  [_select_topic(), _select_term(), _stop("Term is the deepest supported level.")]
tests/test_review_flagging.py ADDED
@@ -0,0 +1,125 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from __future__ import annotations
2
+
3
+ from gcmd_classifier.models import (
4
+ ClassificationFinalStatus,
5
+ ClassificationRecord,
6
+ ConfidenceMetadata,
7
+ DeterministicValidationResult,
8
+ SupportType,
9
+ )
10
+ from gcmd_classifier.pipeline.review import (
11
+ REVIEW_RECOMMENDED_WEAK_SUPPORT,
12
+ flag_review_risk,
13
+ )
14
+
15
+
16
+ def _record(
17
+ *,
18
+ level: str = "Variable_Level_1",
19
+ support_type: SupportType | None = SupportType.EXPLICIT,
20
+ confidence_final: float | None = 0.9,
21
+ final_status: ClassificationFinalStatus = ClassificationFinalStatus.ACCEPTED,
22
+ ) -> ClassificationRecord:
23
+ return ClassificationRecord(
24
+ UUID=f"uuid-{level.lower()}",
25
+ name=f"Name {level}",
26
+ level=level,
27
+ canonical_path=f"ATMOSPHERE > TERM > {level}",
28
+ path_components=("ATMOSPHERE", "TERM", level),
29
+ topic="ATMOSPHERE",
30
+ term="TERM" if level != "Topic" else None,
31
+ confidence=ConfidenceMetadata(final=confidence_final),
32
+ classifier_evidence="Evidence.",
33
+ support_type=support_type,
34
+ deterministic_validation=DeterministicValidationResult(valid=True),
35
+ final_status=final_status,
36
+ )
37
+
38
+
39
+ def _flagged(record: ClassificationRecord) -> ClassificationRecord:
40
+ return flag_review_risk((record,))[0]
41
+
42
+
43
+ def test_inferred_variable_level_2_is_flagged_even_with_high_confidence() -> None:
44
+ record = _flagged(
45
+ _record(level="Variable_Level_2", support_type=SupportType.INFERRED, confidence_final=0.95)
46
+ )
47
+
48
+ assert record.review_required is True
49
+ assert record.final_status is ClassificationFinalStatus.ACCEPTED
50
+ assert record.warnings[-1].code == REVIEW_RECOMMENDED_WEAK_SUPPORT
51
+
52
+
53
+ def test_inferred_variable_level_3_is_flagged_even_with_high_confidence() -> None:
54
+ record = _flagged(
55
+ _record(level="Variable_Level_3", support_type=SupportType.INFERRED, confidence_final=0.95)
56
+ )
57
+
58
+ assert record.review_required is True
59
+ assert record.warnings[-1].code == REVIEW_RECOMMENDED_WEAK_SUPPORT
60
+
61
+
62
+ def test_inferred_low_confidence_is_flagged() -> None:
63
+ record = _flagged(
64
+ _record(level="Variable_Level_1", support_type=SupportType.INFERRED, confidence_final=0.74)
65
+ )
66
+
67
+ assert record.review_required is True
68
+ assert record.warnings[-1].code == REVIEW_RECOMMENDED_WEAK_SUPPORT
69
+
70
+
71
+ def test_mixed_low_confidence_is_flagged() -> None:
72
+ record = _flagged(_record(level="Term", support_type=SupportType.MIXED, confidence_final=0.69))
73
+
74
+ assert record.review_required is True
75
+ assert record.warnings[-1].code == REVIEW_RECOMMENDED_WEAK_SUPPORT
76
+
77
+
78
+ def test_inferred_or_mixed_topic_is_flagged() -> None:
79
+ inferred = _flagged(
80
+ _record(level="Topic", support_type=SupportType.INFERRED, confidence_final=0.9)
81
+ )
82
+ mixed = _flagged(_record(level="Topic", support_type=SupportType.MIXED, confidence_final=0.9))
83
+
84
+ assert inferred.review_required is True
85
+ assert mixed.review_required is True
86
+
87
+
88
+ def test_explicit_or_strong_mixed_classification_is_not_flagged() -> None:
89
+ explicit = _flagged(
90
+ _record(level="Variable_Level_3", support_type=SupportType.EXPLICIT, confidence_final=0.1)
91
+ )
92
+ strong_mixed = _flagged(
93
+ _record(level="Variable_Level_1", support_type=SupportType.MIXED, confidence_final=0.70)
94
+ )
95
+
96
+ assert explicit.review_required is False
97
+ assert explicit.warnings == ()
98
+ assert strong_mixed.review_required is False
99
+ assert strong_mixed.warnings == ()
100
+
101
+
102
+ def test_non_accepted_classification_is_not_flagged() -> None:
103
+ record = _flagged(
104
+ _record(
105
+ level="Variable_Level_3",
106
+ support_type=SupportType.INFERRED,
107
+ confidence_final=0.1,
108
+ final_status=ClassificationFinalStatus.REJECTED,
109
+ )
110
+ )
111
+
112
+ assert record.review_required is False
113
+ assert record.warnings == ()
114
+
115
+
116
+ def test_review_warning_appears_in_json_output() -> None:
117
+ record = _flagged(
118
+ _record(level="Variable_Level_2", support_type=SupportType.INFERRED, confidence_final=0.95)
119
+ )
120
+
121
+ dumped = record.model_dump(mode="json")
122
+
123
+ assert dumped["review_required"] is True
124
+ assert dumped["final_status"] == "accepted"
125
+ assert dumped["warnings"][-1]["code"] == REVIEW_RECOMMENDED_WEAK_SUPPORT
tests/test_small_run_script.py CHANGED
@@ -103,6 +103,13 @@ def test_console_summary_includes_classification_and_no_classification(capsys) -
103
  "topic": "ATMOSPHERE",
104
  "deterministic_validation": {"valid": True},
105
  "final_status": "accepted",
 
 
 
 
 
 
 
106
  },
107
  ),
108
  review_status=ReviewStatus.NOT_REQUIRED,
@@ -169,6 +176,13 @@ def test_review_csv_contains_classification_and_article_level_rows(tmp_path: Pat
169
  "confidence": {"final": 0.7},
170
  "deterministic_validation": {"valid": True},
171
  "final_status": "accepted",
 
 
 
 
 
 
 
172
  },
173
  ),
174
  review_status=ReviewStatus.NOT_REQUIRED,
@@ -198,6 +212,8 @@ def test_review_csv_contains_classification_and_article_level_rows(tmp_path: Pat
198
  assert rows[0]["classifier_evidence"] == "Evidence text."
199
  assert rows[0]["reason_for_stopping"] == "Stopped here."
200
  assert rows[0]["deterministic_valid"] == "True"
 
 
201
  assert rows[1]["DOI"] == "10.example/failed"
202
  assert rows[1]["UUID"] == ""
203
  assert rows[1]["errors"] == "MODEL_ERROR: Model failed."
 
103
  "topic": "ATMOSPHERE",
104
  "deterministic_validation": {"valid": True},
105
  "final_status": "accepted",
106
+ "review_required": True,
107
+ "warnings": (
108
+ {
109
+ "code": "REVIEW_RECOMMENDED_WEAK_SUPPORT",
110
+ "message": "Manual scientific review is recommended.",
111
+ },
112
+ ),
113
  },
114
  ),
115
  review_status=ReviewStatus.NOT_REQUIRED,
 
176
  "confidence": {"final": 0.7},
177
  "deterministic_validation": {"valid": True},
178
  "final_status": "accepted",
179
+ "review_required": True,
180
+ "warnings": (
181
+ {
182
+ "code": "REVIEW_RECOMMENDED_WEAK_SUPPORT",
183
+ "message": "Manual scientific review is recommended.",
184
+ },
185
+ ),
186
  },
187
  ),
188
  review_status=ReviewStatus.NOT_REQUIRED,
 
212
  assert rows[0]["classifier_evidence"] == "Evidence text."
213
  assert rows[0]["reason_for_stopping"] == "Stopped here."
214
  assert rows[0]["deterministic_valid"] == "True"
215
+ assert rows[0]["review_required"] == "True"
216
+ assert "REVIEW_RECOMMENDED_WEAK_SUPPORT" in rows[0]["warnings"]
217
  assert rows[1]["DOI"] == "10.example/failed"
218
  assert rows[1]["UUID"] == ""
219
  assert rows[1]["errors"] == "MODEL_ERROR: Model failed."