Skip to content

Conversation

joeyschultz
Copy link
Contributor

@joeyschultz joeyschultz commented Sep 17, 2025

Description

This PR enables resampling of n-dimensional variables (3D and above).

Jira Issue ID

DAS-2221

Local Test Steps

  • Build the service and test images and run the unit tests.
    Note: I am still working on resolving test failures in test_interpolation.py
 ./bin/build-image && ./bin/build-test && ./bin/run-test
  • Ensure your LOCALLY_DEPLOYED_SERVICES contains swath-projector
  • Restart harmony to pick up the new image: ./bin/bootstrap-harmony
  • Run the notebook DAS-2221.ipynb attached to the ticket to test all TEMPO standard v04 and nrt v02 collections and ensure it runs successfully.
    • Open the output for TEMPO_NO2_L2_V04 and inspect /support_data/scattering_weights to verify the reprojection of a 3D variable

Note: If tester does not have permissions to the ASDC collections in the notebook, this url can be used to test the TEMPO_O3TOT_L2_V03 collection in the EEDTEST provider. Ensure the request suceeds and download the output to inspect the 3D variables were processed correctly:
http://localhost:3000/C1270257471-EEDTEST/ogc-api-coverages/1.0.0/collections/parameter_vars/coverage/rangeset?forceAsync=true&granuleId=G1270257477-EEDTEST&variable=all&serviceId=S1237974711-EEDTEST

PR Acceptance Checklist

  • Jira ticket acceptance criteria met.
  • CHANGELOG.md updated to include high level summary of PR changes.
  • docker/service_version.txt updated if publishing a release.
  • Tests added/updated and passing.
  • Documentation updated (if needed).

"/support_data/gas_profile",
"/support_data/scattering_weights",
"/support_data/temperature_profile"
"/support_data/cal_adjustment"
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"/support_data/cal_adjustment" must remain in the excluded variables list because it is non-projectable due to its dimension shape not matching that of its coordinates.

float cal_adjustment(xtrack=2048, wavelength=12);

"/support_data/ozone_profile_temperature",
"/qa_statistics/avg_residuals",
"/qa_statistics/fit_RMS"
"/support_data/other_gas_names"
Copy link
Contributor Author

@joeyschultz joeyschultz Sep 17, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

/support_data/nongas_param_names, /support_data/nongas_param_units, and /support_data/other_gas_names must remain in the excluded variables list because they are non-projectable due to their dimension shape not matching that of the coordinates.

char nongas_param_names(non_gas_variables=9, param_strlen=4);
char nongas_param_units(non_gas_variables=9, param_unit_strlen=20);
char other_gas_names(gases=3, param_strlen=4);

Copy link
Member

@flamingbear flamingbear left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is nice work. Most of my comments are pretty nit-picky, but I think it could help the tests some.

'latitude_longitude',
non_horizontal_dim = Mock(spec=Dimension)
non_horizontal_dim.name = "third_dim"
non_horizontal_dim.size = 2
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This would be better as 3 or 5 so that it doesn't get confused with the horizontal dimension with the same size.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Updated in 6ae3f23.

self.assertEqual(len(dataset.dimensions["time"]), 5)
self.assertEqual(len(dataset.dimensions["layer"]), 10)

with self.subTest("duplicate non-horizontal dimensions handled correctly"):
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What causes duplicate dimensions that need to be dropped?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's not that duplicate dimensions need to be dropped, but rather that attempting to create a dimension that already exists would cause an error.

In write_non_horizontal_dimensions, I am preventing that error case by checking whether it exists before creating the dimension - this covers the duplicate dimension use case.

{'values': source_layer, 'fill_value': fill_value},
reprojection_information,
)
np.testing.assert_array_equal(result, mocked_resample_result)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think this is a great test. I think it's already implicitly covered in the test_resample_*** functions. It seems like it is just calling a function and testing that it puts the information into a dictionary and then calls a different function. I don't know it's probably not worth ripping out but not sure what we're learning.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree with your point, I'm ok with removing it.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Removed the test in a3033c0.

("time", "layer", "mirror_step", "xtrack"),
[time_dim, layer_dim],
)
self.assertEqual(result, expected)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These are great and comprehensive. Nice!

@joeyschultz joeyschultz marked this pull request as ready for review September 23, 2025 15:34
case of a 2-D layer representing a horizontal spatial slice. This slice
is resampled with the supplied resampler.
"""
if len(s_var.shape) > 2:
Copy link

@vutrannasa vutrannasa Sep 24, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Up to you, this will return right away if the condition is not met.

if len(s_var.shape) <= 2:
    return resample_layer(s_var[:], fill_value, reprojection_information, resampler)
        
for layer_index in range(s_var.shape[0]):
    t_var[layer_index, ...] = resample_variable_data(
        s_var[layer_index, ...],
        t_var[layer_index, ...],
        fill_value,
        reprojection_information,
        resampler,
    )
 
return t_var

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice idea. I find that having the base case up top is more readable. Updated in a1f12a5.

Copy link
Member

@flamingbear flamingbear left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think you worked through all of the items. Thanks for cleaning those up. Let keep our fingers crossed that the regressions don't need attention after you push this to SIT.

@vutrannasa
Copy link

Test: PASS
ENV: localhost

Test Step:

% cd harmony-swath-projector
% git checkout DAS-2221
% git pull origin DAS-2221
% git fetch
% ./bin/build-image && ./bin/build-test && ./bin/run-test
  • Started Harmony in a Box
    LOCALLY_DEPLOYED_SERVICES=swath-projector

Ran URL link below
http://localhost:3000/C1270257471-EEDTEST/ogc-api-coverages/1.0.0/collections/parameter_vars/coverage/rangeset?forceAsync=true&granuleId=G1270257477-EEDTEST&variable=all&serviceId=S1237974711-EEDTEST

[
"2025-09-25T19:48:15.652Z Start of service execution (retryCount=0, workItemId=4)",
[
"2025-09-25T19:48:15.652Z SIDECAR STATUS: {\n  \"metadata\": {},\n  \"status\": \"Failure\",\n  \"message\": \"command terminated with non-zero exit code: command terminated with exit code 137\",\n  \"reason\": \"NonZeroExitCode\",\n  \"details\": {\n    \"causes\": [\n      {\n        \"reason\": \"ExitCode\",\n        \"message\": \"137\"\n      }\n    ]\n  }\n}",
"COMMAND: python -m swath_projector --harmony-action invoke --harmony-input {\"sources\":[{\"collection\":\"C1274178436-LARC_CLOUD\",\"shortName\":\"TEMPO_NO2_L2\",\"versionId\":\"V04\",\"coordinateVariables\":[],\"visualizations\":[]}],\"format\":{\"mime\":\"image/tiff\"},\"subset\":{\"dimensions\":[]},\"isSynchronous\":false,\"concatenate\":false,\"extraArgs\":{\"granValidation\":{\"reason\":3,\"serviceName\":\"sds/swath-projector\",\"maxResults\":10000000}},\"requestId\":\"3b3e4b15-36e9-4dc5-b031-16305d81ca36\",\"user\":\"vt1881\",\"client\":\"harmony-in-a-box\",\"accessToken\":\"<redacted>\",\"stagingLocation\":\"s3://local-staging-bucket/public/3b3e4b15-36e9-4dc5-b031-16305d81ca36/4/\",\"version\":\"0.22.0\"} --harmony-sources s3://local-artifact-bucket/3b3e4b15-36e9-4dc5-b031-16305d81ca36/3/outputs/catalog0.json --harmony-metadata-dir s3://local-artifact-bucket/3b3e4b15-36e9-4dc5-b031-16305d81ca36/4/outputs/",
"POD: swath-projector-6fcc48569d-224q4",
"STATUS REASON: NonZeroExitCode",
"STATUS MESSAGE: command terminated with non-zero exit code: command terminated with exit code 137",
"STATUS CODE: undefined"
],
"/home/swath_projector/interpolation.py:13: UserWarning: XArray, dask, and/or zarr not found, XArrayBilinearResampler won't be available.\r\n  from pyresample.bilinear import get_bil_info, get_sample_from_bil_info\r\n",
"2025-09-25 19:47:59,397 [INFO] [harmony-service.run_cli:349] timing./home/swath_projector/__main__.py.start\r\n2025-09-25 19:47:59,397 [INFO] [harmony-service.invoke:32] Starting Data Services Swath Projector Service\r\n",
"2025-09-25 19:47:59,413 [INFO] [harmony-service.download:400] timing.download.start https://data.asdc.uat.earthdata.nasa.gov/asdc2-uat-protected/TEMPO/TEMPO_NO2_L2_V04/2025.07.25/TEMPO_NO2_L2_V04_20250725T110957Z_S001G06.nc?A-api-request-uuid=3b3e4b15-36e9-4dc5-b031-16305d81ca36\r\n",
"2025-09-25 19:48:09,437 [INFO] [harmony-service._log_download_performance:340] timing.download.end\r\n",
"2025-09-25 19:48:09,441 [INFO] [harmony-service.process_item:76] Granule data copied\r\n",
"2025-09-25 19:48:09,468 [INFO] [harmony-service.reproject:47] Reprojecting file /tmp/tmp4cikzzco/01b4117fe0f1e6f9fb068e426e839844bfd13afde3cd30ed27ed1496cf23b035.nc as /tmp/tmprkkyrr8q/01b4117fe0f1e6f9fb068e426e839844bfd13afde3cd30ed27ed1496cf23b035_repr.nc\r\n2025-09-25 19:48:09,469 [INFO] [harmony-service.reproject:48] Selected CRS: +proj=longlat +ellps=WGS84\tInterpolation: ewa-nn\r\n",
"2025-09-25 19:48:09,551 [INFO] [harmony-service.reproject:68] Input file has 38 science variables\r\n",
"2025-09-25 19:48:09,552 [INFO] [harmony-service.resample_all_variables:78] Reprojecting variable \"/support_data/amf_stratosphere\"\r\n",
"2025-09-25 19:48:09,552 [INFO] [harmony-service.resample_all_variables:79] Reprojected output: \"/tmp/tmprkkyrr8q/support_data_amf_stratosphere.nc\"\r\n",
"2025-09-25 19:48:09,656 [INFO] [harmony-service.get_target_area:524] Calculated x extent: x_min: -111.17788696289064, x_max: -95.29047393798828\r\n2025-09-25 19:48:09,656 [INFO] [harmony-service.get_target_area:525] Calculated y extent: y_min: 17.178890228271484, y_max: 58.2663917541504\r\n",
"2025-09-25 19:48:09,753 [INFO] [harmony-service.get_target_area:539] Calculated projected resolutions: (0.03417552291879538, -0.03417552291879538)\r\n",
"2025-09-25 19:48:09,754 [INFO] [harmony-service.get_target_area:548] Calculated width: 465\r\n2025-09-25 19:48:09,754 [INFO] [harmony-service.get_target_area:549] Calculated height: 1202\r\n",
"2025-09-25 19:48:09,875 [INFO] [harmony-service.resample_all_variables:78] Reprojecting variable \"/product/vertical_column_stratosphere\"\r\n2025-09-25 19:48:09,875 [INFO] [harmony-service.resample_all_variables:79] Reprojected output: \"/tmp/tmprkkyrr8q/product_vertical_column_stratosphere.nc\"\r\n",
"2025-09-25 19:48:09,940 [INFO] [harmony-service.resample_all_variables:78] Reprojecting variable \"/support_data/terrain_height\"\r\n2025-09-25 19:48:09,941 [INFO] [harmony-service.resample_all_variables:79] Reprojected output: \"/tmp/tmprkkyrr8q/support_data_terrain_height.nc\"\r\n",
"2025-09-25 19:48:09,984 [INFO] [harmony-service.resample_all_variables:78] Reprojecting variable \"/support_data/amf_troposphere\"\r\n2025-09-25 19:48:09,984 [INFO] [harmony-service.resample_all_variables:79] Reprojected output: \"/tmp/tmprkkyrr8q/support_data_amf_troposphere.nc\"\r\n",
"2025-09-25 19:48:10,031 [INFO] [harmony-service.resample_all_variables:78] Reprojecting variable \"/geolocation/solar_azimuth_angle\"\r\n2025-09-25 19:48:10,031 [INFO] [harmony-service.resample_all_variables:79] Reprojected output: \"/tmp/tmprkkyrr8q/geolocation_solar_azimuth_angle.nc\"\r\n",
"2025-09-25 19:48:10,068 [INFO] [harmony-service.resample_all_variables:78] Reprojecting variable \"/support_data/snow_ice_fraction\"\r\n2025-09-25 19:48:10,068 [INFO] [harmony-service.resample_all_variables:79] Reprojected output: \"/tmp/tmprkkyrr8q/support_data_snow_ice_fraction.nc\"\r\n",
"2025-09-25 19:48:10,106 [INFO] [harmony-service.resample_all_variables:78] Reprojecting variable \"/geolocation/viewing_azimuth_angle\"\r\n2025-09-25 19:48:10,106 [INFO] [harmony-service.resample_all_variables:79] Reprojected output: \"/tmp/tmprkkyrr8q/geolocation_viewing_azimuth_angle.nc\"\r\n",
"2025-09-25 19:48:10,147 [INFO] [harmony-service.resample_all_variables:78] Reprojecting variable \"/geolocation/viewing_zenith_angle\"\r\n2025-09-25 19:48:10,147 [INFO] [harmony-service.resample_all_variables:79] Reprojected output: \"/tmp/tmprkkyrr8q/geolocation_viewing_zenith_angle.nc\"\r\n",
"2025-09-25 19:48:10,187 [INFO] [harmony-service.resample_all_variables:78] Reprojecting variable \"/support_data/gas_profile\"\r\n2025-09-25 19:48:10,187 [INFO] [harmony-service.resample_all_variables:79] Reprojected output: \"/tmp/tmprkkyrr8q/support_data_gas_profile.nc\"\r\n",
"2025-09-25T19:48:31.687Z Start of service execution (retryCount=1, workItemId=4)",
[
"2025-09-25T19:48:31.687Z SIDECAR STATUS: {\n  \"metadata\": {},\n  \"status\": \"Failure\",\n  \"message\": \"command terminated with non-zero exit code: command terminated with exit code 137\",\n  \"reason\": \"NonZeroExitCode\",\n  \"details\": {\n    \"causes\": [\n      {\n        \"reason\": \"ExitCode\",\n        \"message\": \"137\"\n      }\n    ]\n  }\n}",
"COMMAND: python -m swath_projector --harmony-action invoke --harmony-input {\"sources\":[{\"collection\":\"C1274178436-LARC_CLOUD\",\"shortName\":\"TEMPO_NO2_L2\",\"versionId\":\"V04\",\"coordinateVariables\":[],\"visualizations\":[]}],\"format\":{\"mime\":\"image/tiff\"},\"subset\":{\"dimensions\":[]},\"isSynchronous\":false,\"concatenate\":false,\"extraArgs\":{\"granValidation\":{\"reason\":3,\"serviceName\":\"sds/swath-projector\",\"maxResults\":10000000}},\"requestId\":\"3b3e4b15-36e9-4dc5-b031-16305d81ca36\",\"user\":\"vt1881\",\"client\":\"harmony-in-a-box\",\"accessToken\":\"<redacted>\",\"stagingLocation\":\"s3://local-staging-bucket/public/3b3e4b15-36e9-4dc5-b031-16305d81ca36/4/\",\"version\":\"0.22.0\"} --harmony-sources s3://local-artifact-bucket/3b3e4b15-36e9-4dc5-b031-16305d81ca36/3/outputs/catalog0.json --harmony-metadata-dir s3://local-artifact-bucket/3b3e4b15-36e9-4dc5-b031-16305d81ca36/4/outputs/",
"POD: swath-projector-6fcc48569d-224q4",
"STATUS REASON: NonZeroExitCode",
"STATUS MESSAGE: command terminated with non-zero exit code: command terminated with exit code 137",
"STATUS CODE: undefined"
],
"/home/swath_projector/interpolation.py:13: UserWarning: XArray, dask, and/or zarr not found, XArrayBilinearResampler won't be available.\r\n  from pyresample.bilinear import get_bil_info, get_sample_from_bil_info\r\n",
"2025-09-25 19:48:18,554 [INFO] [harmony-service.run_cli:349] timing./home/swath_projector/__main__.py.start\r\n2025-09-25 19:48:18,554 [INFO] [harmony-service.invoke:32] Starting Data Services Swath Projector Service\r\n",
"2025-09-25 19:48:18,571 [INFO] [harmony-service.download:400] timing.download.start https://data.asdc.uat.earthdata.nasa.gov/asdc2-uat-protected/TEMPO/TEMPO_NO2_L2_V04/2025.07.25/TEMPO_NO2_L2_V04_20250725T110957Z_S001G06.nc?A-api-request-uuid=3b3e4b15-36e9-4dc5-b031-16305d81ca36\r\n",
"2025-09-25 19:48:28,081 [INFO] [harmony-service._log_download_performance:340] timing.download.end\r\n",
"2025-09-25 19:48:28,083 [INFO] [harmony-service.process_item:76] Granule data copied\r\n",
"2025-09-25 19:48:28,117 [INFO] [harmony-service.reproject:47] Reprojecting file /tmp/tmpjlezsz1d/01b4117fe0f1e6f9fb068e426e839844bfd13afde3cd30ed27ed1496cf23b035.nc as /tmp/tmpvx74dy41/01b4117fe0f1e6f9fb068e426e839844bfd13afde3cd30ed27ed1496cf23b035_repr.nc\r\n2025-09-25 19:48:28,117 [INFO] [harmony-service.reproject:48] Selected CRS: +proj=longlat +ellps=WGS84\tInterpolation: ewa-nn\r\n",
"2025-09-25 19:48:28,214 [INFO] [harmony-service.reproject:68] Input file has 38 science variables\r\n",
"2025-09-25 19:48:28,214 [INFO] [harmony-service.resample_all_variables:78] Reprojecting variable \"/support_data/amf_troposphere_clear_sky\"\r\n2025-09-25 19:48:28,214 [INFO] [harmony-service.resample_all_variables:79] Reprojected output: \"/tmp/tmpvx74dy41/support_data_amf_troposphere_clear_sky.nc\"\r\n",
"2025-09-25 19:48:28,311 [INFO] [harmony-service.get_target_area:524] Calculated x extent: x_min: -111.17788696289064, x_max: -95.29047393798828\r\n2025-09-25 19:48:28,311 [INFO] [harmony-service.get_target_area:525] Calculated y extent: y_min: 17.178890228271484, y_max: 58.2663917541504\r\n",
"2025-09-25 19:48:28,408 [INFO] [harmony-service.get_target_area:539] Calculated projected resolutions: (0.03417552291879538, -0.03417552291879538)\r\n",
"2025-09-25 19:48:28,408 [INFO] [harmony-service.get_target_area:548] Calculated width: 465\r\n2025-09-25 19:48:28,408 [INFO] [harmony-service.get_target_area:549] Calculated height: 1202\r\n",
"2025-09-25 19:48:28,532 [INFO] [harmony-service.resample_all_variables:78] Reprojecting variable \"/support_data/ground_pixel_quality_flag\"\r\n2025-09-25 19:48:28,532 [INFO] [harmony-service.resample_all_variables:79] Reprojected output: \"/tmp/tmpvx74dy41/support_data_ground_pixel_quality_flag.nc\"\r\n",
"/home/swath_projector/interpolation.py:176: RuntimeWarning: invalid value encountered in cast\r\n  results = results.astype(variable.dtype)\r\n",
"2025-09-25 19:48:28,590 [INFO] [harmony-service.resample_all_variables:78] Reprojecting variable \"/support_data/scattering_weights\"\r\n2025-09-25 19:48:28,591 [INFO] [harmony-service.resample_all_variables:79] Reprojected output: \"/tmp/tmpvx74dy41/support_data_scattering_weights.nc\"\r\n",
"2025-09-25T19:48:47.432Z Start of service execution (retryCount=2, workItemId=4)",
[
"2025-09-25T19:48:47.432Z SIDECAR STATUS: {\n  \"metadata\": {},\n  \"status\": \"Failure\",\n  \"message\": \"command terminated with non-zero exit code: command terminated with exit code 137\",\n  \"reason\": \"NonZeroExitCode\",\n  \"details\": {\n    \"causes\": [\n      {\n        \"reason\": \"ExitCode\",\n        \"message\": \"137\"\n      }\n    ]\n  }\n}",
"COMMAND: python -m swath_projector --harmony-action invoke --harmony-input {\"sources\":[{\"collection\":\"C1274178436-LARC_CLOUD\",\"shortName\":\"TEMPO_NO2_L2\",\"versionId\":\"V04\",\"coordinateVariables\":[],\"visualizations\":[]}],\"format\":{\"mime\":\"image/tiff\"},\"subset\":{\"dimensions\":[]},\"isSynchronous\":false,\"concatenate\":false,\"extraArgs\":{\"granValidation\":{\"reason\":3,\"serviceName\":\"sds/swath-projector\",\"maxResults\":10000000}},\"requestId\":\"3b3e4b15-36e9-4dc5-b031-16305d81ca36\",\"user\":\"vt1881\",\"client\":\"harmony-in-a-box\",\"accessToken\":\"<redacted>\",\"stagingLocation\":\"s3://local-staging-bucket/public/3b3e4b15-36e9-4dc5-b031-16305d81ca36/4/\",\"version\":\"0.22.0\"} --harmony-sources s3://local-artifact-bucket/3b3e4b15-36e9-4dc5-b031-16305d81ca36/3/outputs/catalog0.json --harmony-metadata-dir s3://local-artifact-bucket/3b3e4b15-36e9-4dc5-b031-16305d81ca36/4/outputs/",
"POD: swath-projector-6fcc48569d-224q4",
"STATUS REASON: NonZeroExitCode",
"STATUS MESSAGE: command terminated with non-zero exit code: command terminated with exit code 137",
"STATUS CODE: undefined"
],
"/home/swath_projector/interpolation.py:13: UserWarning: XArray, dask, and/or zarr not found, XArrayBilinearResampler won't be available.\r\n  from pyresample.bilinear import get_bil_info, get_sample_from_bil_info\r\n",
"2025-09-25 19:48:34,582 [INFO] [harmony-service.run_cli:349] timing./home/swath_projector/__main__.py.start\r\n2025-09-25 19:48:34,582 [INFO] [harmony-service.invoke:32] Starting Data Services Swath Projector Service\r\n",
"2025-09-25 19:48:34,600 [INFO] [harmony-service.download:400] timing.download.start https://data.asdc.uat.earthdata.nasa.gov/asdc2-uat-protected/TEMPO/TEMPO_NO2_L2_V04/2025.07.25/TEMPO_NO2_L2_V04_20250725T110957Z_S001G06.nc?A-api-request-uuid=3b3e4b15-36e9-4dc5-b031-16305d81ca36\r\n",
"2025-09-25 19:48:43,639 [INFO] [harmony-service._log_download_performance:340] timing.download.end\r\n",
"2025-09-25 19:48:43,644 [INFO] [harmony-service.process_item:76] Granule data copied\r\n",
"2025-09-25 19:48:43,677 [INFO] [harmony-service.reproject:47] Reprojecting file /tmp/tmpnga6tk_d/01b4117fe0f1e6f9fb068e426e839844bfd13afde3cd30ed27ed1496cf23b035.nc as /tmp/tmpl45ak4ub/01b4117fe0f1e6f9fb068e426e839844bfd13afde3cd30ed27ed1496cf23b035_repr.nc\r\n2025-09-25 19:48:43,677 [INFO] [harmony-service.reproject:48] Selected CRS: +proj=longlat +ellps=WGS84\tInterpolation: ewa-nn\r\n",
"2025-09-25 19:48:43,775 [INFO] [harmony-service.reproject:68] Input file has 38 science variables\r\n",
"2025-09-25 19:48:43,776 [INFO] [harmony-service.resample_all_variables:78] Reprojecting variable \"/support_data/fitted_slant_column_uncertainty\"\r\n2025-09-25 19:48:43,776 [INFO] [harmony-service.resample_all_variables:79] Reprojected output: \"/tmp/tmpl45ak4ub/support_data_fitted_slant_column_uncertainty.nc\"\r\n",
"2025-09-25 19:48:43,887 [INFO] [harmony-service.get_target_area:524] Calculated x extent: x_min: -111.17788696289064, x_max: -95.29047393798828\r\n2025-09-25 19:48:43,887 [INFO] [harmony-service.get_target_area:525] Calculated y extent: y_min: 17.178890228271484, y_max: 58.2663917541504\r\n",
"2025-09-25 19:48:43,991 [INFO] [harmony-service.get_target_area:539] Calculated projected resolutions: (0.03417552291879538, -0.03417552291879538)\r\n",
"2025-09-25 19:48:43,992 [INFO] [harmony-service.get_target_area:548] Calculated width: 465\r\n2025-09-25 19:48:43,992 [INFO] [harmony-service.get_target_area:549] Calculated height: 1202\r\n",
"2025-09-25 19:48:44,219 [INFO] [harmony-service.resample_all_variables:78] Reprojecting variable \"/support_data/amf_stratosphere\"\r\n2025-09-25 19:48:44,219 [INFO] [harmony-service.resample_all_variables:79] Reprojected output: \"/tmp/tmpl45ak4ub/support_data_amf_stratosphere.nc\"\r\n",
"2025-09-25 19:48:44,274 [INFO] [harmony-service.resample_all_variables:78] Reprojecting variable \"/qa_statistics/fit_convergence_flag\"\r\n2025-09-25 19:48:44,274 [INFO] [harmony-service.resample_all_variables:79] Reprojected output: \"/tmp/tmpl45ak4ub/qa_statistics_fit_convergence_flag.nc\"\r\n",
"2025-09-25 19:48:44,324 [INFO] [harmony-service.resample_all_variables:78] Reprojecting variable \"/geolocation/solar_azimuth_angle\"\r\n",
"2025-09-25 19:48:44,325 [INFO] [harmony-service.resample_all_variables:79] Reprojected output: \"/tmp/tmpl45ak4ub/geolocation_solar_azimuth_angle.nc\"\r\n",
"2025-09-25 19:48:44,367 [INFO] [harmony-service.resample_all_variables:78] Reprojecting variable \"/support_data/fitted_slant_column\"\r\n2025-09-25 19:48:44,367 [INFO] [harmony-service.resample_all_variables:79] Reprojected output: \"/tmp/tmpl45ak4ub/support_data_fitted_slant_column.nc\"\r\n",
"2025-09-25 19:48:44,424 [INFO] [harmony-service.resample_all_variables:78] Reprojecting variable \"/support_data/amf_total\"\r\n2025-09-25 19:48:44,424 [INFO] [harmony-service.resample_all_variables:79] Reprojected output: \"/tmp/tmpl45ak4ub/support_data_amf_total.nc\"\r\n",
"2025-09-25 19:48:44,466 [INFO] [harmony-service.resample_all_variables:78] Reprojecting variable \"/support_data/gas_profile\"\r\n2025-09-25 19:48:44,466 [INFO] [harmony-service.resample_all_variables:79] Reprojected output: \"/tmp/tmpl45ak4ub/support_data_gas_profile.nc\"\r\n",
"2025-09-25T19:49:02.456Z Start of service execution (retryCount=3, workItemId=4)",
[
"2025-09-25T19:49:02.456Z SIDECAR STATUS: {\n  \"metadata\": {},\n  \"status\": \"Failure\",\n  \"message\": \"command terminated with non-zero exit code: command terminated with exit code 137\",\n  \"reason\": \"NonZeroExitCode\",\n  \"details\": {\n    \"causes\": [\n      {\n        \"reason\": \"ExitCode\",\n        \"message\": \"137\"\n      }\n    ]\n  }\n}",
"COMMAND: python -m swath_projector --harmony-action invoke --harmony-input {\"sources\":[{\"collection\":\"C1274178436-LARC_CLOUD\",\"shortName\":\"TEMPO_NO2_L2\",\"versionId\":\"V04\",\"coordinateVariables\":[],\"visualizations\":[]}],\"format\":{\"mime\":\"image/tiff\"},\"subset\":{\"dimensions\":[]},\"isSynchronous\":false,\"concatenate\":false,\"extraArgs\":{\"granValidation\":{\"reason\":3,\"serviceName\":\"sds/swath-projector\",\"maxResults\":10000000}},\"requestId\":\"3b3e4b15-36e9-4dc5-b031-16305d81ca36\",\"user\":\"vt1881\",\"client\":\"harmony-in-a-box\",\"accessToken\":\"<redacted>\",\"stagingLocation\":\"s3://local-staging-bucket/public/3b3e4b15-36e9-4dc5-b031-16305d81ca36/4/\",\"version\":\"0.22.0\"} --harmony-sources s3://local-artifact-bucket/3b3e4b15-36e9-4dc5-b031-16305d81ca36/3/outputs/catalog0.json --harmony-metadata-dir s3://local-artifact-bucket/3b3e4b15-36e9-4dc5-b031-16305d81ca36/4/outputs/",
"POD: swath-projector-6fcc48569d-224q4",
"STATUS REASON: NonZeroExitCode",
"STATUS MESSAGE: command terminated with non-zero exit code: command terminated with exit code 137",
"STATUS CODE: undefined"
],
"/home/swath_projector/interpolation.py:13: UserWarning: XArray, dask, and/or zarr not found, XArrayBilinearResampler won't be available.\r\n  from pyresample.bilinear import get_bil_info, get_sample_from_bil_info\r\n",
"2025-09-25 19:48:50,102 [INFO] [harmony-service.run_cli:349] timing./home/swath_projector/__main__.py.start\r\n2025-09-25 19:48:50,102 [INFO] [harmony-service.invoke:32] Starting Data Services Swath Projector Service\r\n",
"2025-09-25 19:48:50,117 [INFO] [harmony-service.download:400] timing.download.start https://data.asdc.uat.earthdata.nasa.gov/asdc2-uat-protected/TEMPO/TEMPO_NO2_L2_V04/2025.07.25/TEMPO_NO2_L2_V04_20250725T110957Z_S001G06.nc?A-api-request-uuid=3b3e4b15-36e9-4dc5-b031-16305d81ca36\r\n",
"2025-09-25 19:48:58,751 [INFO] [harmony-service._log_download_performance:340] timing.download.end\r\n",
"2025-09-25 19:48:58,758 [INFO] [harmony-service.process_item:76] Granule data copied\r\n",
"2025-09-25 19:48:58,789 [INFO] [harmony-service.reproject:47] Reprojecting file /tmp/tmp7itiyrnu/01b4117fe0f1e6f9fb068e426e839844bfd13afde3cd30ed27ed1496cf23b035.nc as /tmp/tmpd2oi_ht5/01b4117fe0f1e6f9fb068e426e839844bfd13afde3cd30ed27ed1496cf23b035_repr.nc\r\n2025-09-25 19:48:58,789 [INFO] [harmony-service.reproject:48] Selected CRS: +proj=longlat +ellps=WGS84\tInterpolation: ewa-nn\r\n",
"2025-09-25 19:48:58,881 [INFO] [harmony-service.reproject:68] Input file has 38 science variables\r\n",
"2025-09-25 19:48:58,881 [INFO] [harmony-service.resample_all_variables:78] Reprojecting variable \"/support_data/amf_troposphere\"\r\n",
"2025-09-25 19:48:58,881 [INFO] [harmony-service.resample_all_variables:79] Reprojected output: \"/tmp/tmpd2oi_ht5/support_data_amf_troposphere.nc\"\r\n",
"2025-09-25 19:48:58,978 [INFO] [harmony-service.get_target_area:524] Calculated x extent: x_min: -111.17788696289064, x_max: -95.29047393798828\r\n2025-09-25 19:48:58,978 [INFO] [harmony-service.get_target_area:525] Calculated y extent: y_min: 17.178890228271484, y_max: 58.2663917541504\r\n",
"2025-09-25 19:48:59,074 [INFO] [harmony-service.get_target_area:539] Calculated projected resolutions: (0.03417552291879538, -0.03417552291879538)\r\n",
"2025-09-25 19:48:59,074 [INFO] [harmony-service.get_target_area:548] Calculated width: 465\r\n2025-09-25 19:48:59,074 [INFO] [harmony-service.get_target_area:549] Calculated height: 1202\r\n",
"2025-09-25 19:48:59,199 [INFO] [harmony-service.resample_all_variables:78] Reprojecting variable \"/support_data/fitted_slant_column_uncertainty\"\r\n2025-09-25 19:48:59,199 [INFO] [harmony-service.resample_all_variables:79] Reprojected output: \"/tmp/tmpd2oi_ht5/support_data_fitted_slant_column_uncertainty.nc\"\r\n",
"2025-09-25 19:48:59,268 [INFO] [harmony-service.resample_all_variables:78] Reprojecting variable \"/support_data/destriping_correction\"\r\n2025-09-25 19:48:59,269 [INFO] [harmony-service.resample_all_variables:79] Reprojected output: \"/tmp/tmpd2oi_ht5/support_data_destriping_correction.nc\"\r\n",
"2025-09-25 19:48:59,314 [INFO] [harmony-service.resample_all_variables:78] Reprojecting variable \"/product/vertical_column_troposphere_uncertainty\"\r\n2025-09-25 19:48:59,314 [INFO] [harmony-service.resample_all_variables:79] Reprojected output: \"/tmp/tmpd2oi_ht5/product_vertical_column_troposphere_uncertainty.nc\"\r\n",
"2025-09-25 19:48:59,373 [INFO] [harmony-service.resample_all_variables:78] Reprojecting variable \"/support_data/surface_pressure\"\r\n2025-09-25 19:48:59,373 [INFO] [harmony-service.resample_all_variables:79] Reprojected output: \"/tmp/tmpd2oi_ht5/support_data_surface_pressure.nc\"\r\n",
"2025-09-25 19:48:59,416 [INFO] [harmony-service.resample_all_variables:78] Reprojecting variable \"/support_data/terrain_height\"\r\n2025-09-25 19:48:59,416 [INFO] [harmony-service.resample_all_variables:79] Reprojected output: \"/tmp/tmpd2oi_ht5/support_data_terrain_height.nc\"\r\n",
"2025-09-25 19:48:59,460 [INFO] [harmony-service.resample_all_variables:78] Reprojecting variable \"/support_data/amf_stratosphere\"\r\n2025-09-25 19:48:59,460 [INFO] [harmony-service.resample_all_variables:79] Reprojected output: \"/tmp/tmpd2oi_ht5/support_data_amf_stratosphere.nc\"\r\n",
"2025-09-25 19:48:59,503 [INFO] [harmony-service.resample_all_variables:78] Reprojecting variable \"/support_data/gas_profile\"\r\n2025-09-25 19:48:59,503 [INFO] [harmony-service.resample_all_variables:79] Reprojected output: \"/tmp/tmpd2oi_ht5/support_data_gas_profile.nc\"\r\n",
"2025-09-25T19:49:19.442Z Start of service execution (retryCount=4, workItemId=4)",
[
"2025-09-25T19:49:19.442Z SIDECAR STATUS: {\n  \"metadata\": {},\n  \"status\": \"Failure\",\n  \"message\": \"command terminated with non-zero exit code: command terminated with exit code 137\",\n  \"reason\": \"NonZeroExitCode\",\n  \"details\": {\n    \"causes\": [\n      {\n        \"reason\": \"ExitCode\",\n        \"message\": \"137\"\n      }\n    ]\n  }\n}",
"COMMAND: python -m swath_projector --harmony-action invoke --harmony-input {\"sources\":[{\"collection\":\"C1274178436-LARC_CLOUD\",\"shortName\":\"TEMPO_NO2_L2\",\"versionId\":\"V04\",\"coordinateVariables\":[],\"visualizations\":[]}],\"format\":{\"mime\":\"image/tiff\"},\"subset\":{\"dimensions\":[]},\"isSynchronous\":false,\"concatenate\":false,\"extraArgs\":{\"granValidation\":{\"reason\":3,\"serviceName\":\"sds/swath-projector\",\"maxResults\":10000000}},\"requestId\":\"3b3e4b15-36e9-4dc5-b031-16305d81ca36\",\"user\":\"vt1881\",\"client\":\"harmony-in-a-box\",\"accessToken\":\"<redacted>\",\"stagingLocation\":\"s3://local-staging-bucket/public/3b3e4b15-36e9-4dc5-b031-16305d81ca36/4/\",\"version\":\"0.22.0\"} --harmony-sources s3://local-artifact-bucket/3b3e4b15-36e9-4dc5-b031-16305d81ca36/3/outputs/catalog0.json --harmony-metadata-dir s3://local-artifact-bucket/3b3e4b15-36e9-4dc5-b031-16305d81ca36/4/outputs/",
"POD: swath-projector-6fcc48569d-224q4",
"STATUS REASON: NonZeroExitCode",
"STATUS MESSAGE: command terminated with non-zero exit code: command terminated with exit code 137",
"STATUS CODE: undefined"
],
"/home/swath_projector/interpolation.py:13: UserWarning: XArray, dask, and/or zarr not found, XArrayBilinearResampler won't be available.\r\n  from pyresample.bilinear import get_bil_info, get_sample_from_bil_info\r\n",
"2025-09-25 19:49:05,191 [INFO] [harmony-service.run_cli:349] timing./home/swath_projector/__main__.py.start\r\n2025-09-25 19:49:05,191 [INFO] [harmony-service.invoke:32] Starting Data Services Swath Projector Service\r\n",
"2025-09-25 19:49:05,214 [INFO] [harmony-service.download:400] timing.download.start https://data.asdc.uat.earthdata.nasa.gov/asdc2-uat-protected/TEMPO/TEMPO_NO2_L2_V04/2025.07.25/TEMPO_NO2_L2_V04_20250725T110957Z_S001G06.nc?A-api-request-uuid=3b3e4b15-36e9-4dc5-b031-16305d81ca36\r\n",
"2025-09-25 19:49:15,760 [INFO] [harmony-service._log_download_performance:340] timing.download.end\r\n",
"2025-09-25 19:49:15,763 [INFO] [harmony-service.process_item:76] Granule data copied\r\n",
"2025-09-25 19:49:15,792 [INFO] [harmony-service.reproject:47] Reprojecting file /tmp/tmpak9m6c95/01b4117fe0f1e6f9fb068e426e839844bfd13afde3cd30ed27ed1496cf23b035.nc as /tmp/tmpm9lbhz2_/01b4117fe0f1e6f9fb068e426e839844bfd13afde3cd30ed27ed1496cf23b035_repr.nc\r\n2025-09-25 19:49:15,792 [INFO] [harmony-service.reproject:48] Selected CRS: +proj=longlat +ellps=WGS84\tInterpolation: ewa-nn\r\n",
"2025-09-25 19:49:15,890 [INFO] [harmony-service.reproject:68] Input file has 38 science variables\r\n",
"2025-09-25 19:49:15,890 [INFO] [harmony-service.resample_all_variables:78] Reprojecting variable \"/support_data/vertical_column_total\"\r\n2025-09-25 19:49:15,890 [INFO] [harmony-service.resample_all_variables:79] Reprojected output: \"/tmp/tmpm9lbhz2_/support_data_vertical_column_total.nc\"\r\n",
"2025-09-25 19:49:15,984 [INFO] [harmony-service.get_target_area:524] Calculated x extent: x_min: -111.17788696289064, x_max: -95.29047393798828\r\n",
"2025-09-25 19:49:15,985 [INFO] [harmony-service.get_target_area:525] Calculated y extent: y_min: 17.178890228271484, y_max: 58.2663917541504\r\n",
"2025-09-25 19:49:16,106 [INFO] [harmony-service.get_target_area:539] Calculated projected resolutions: (0.03417552291879538, -0.03417552291879538)\r\n",
"2025-09-25 19:49:16,107 [INFO] [harmony-service.get_target_area:548] Calculated width: 465\r\n2025-09-25 19:49:16,107 [INFO] [harmony-service.get_target_area:549] Calculated height: 1202\r\n",
"2025-09-25 19:49:16,258 [INFO] [harmony-service.resample_all_variables:78] Reprojecting variable \"/support_data/temperature_profile\"\r\n2025-09-25 19:49:16,258 [INFO] [harmony-service.resample_all_variables:79] Reprojected output: \"/tmp/tmpm9lbhz2_/support_data_temperature_profile.nc\"\r\n",
"2025-09-25T19:49:35.756Z Start of service execution (retryCount=5, workItemId=4)",
[
"2025-09-25T19:49:35.756Z SIDECAR STATUS: {\n  \"metadata\": {},\n  \"status\": \"Failure\",\n  \"message\": \"command terminated with non-zero exit code: command terminated with exit code 137\",\n  \"reason\": \"NonZeroExitCode\",\n  \"details\": {\n    \"causes\": [\n      {\n        \"reason\": \"ExitCode\",\n        \"message\": \"137\"\n      }\n    ]\n  }\n}",
"COMMAND: python -m swath_projector --harmony-action invoke --harmony-input {\"sources\":[{\"collection\":\"C1274178436-LARC_CLOUD\",\"shortName\":\"TEMPO_NO2_L2\",\"versionId\":\"V04\",\"coordinateVariables\":[],\"visualizations\":[]}],\"format\":{\"mime\":\"image/tiff\"},\"subset\":{\"dimensions\":[]},\"isSynchronous\":false,\"concatenate\":false,\"extraArgs\":{\"granValidation\":{\"reason\":3,\"serviceName\":\"sds/swath-projector\",\"maxResults\":10000000}},\"requestId\":\"3b3e4b15-36e9-4dc5-b031-16305d81ca36\",\"user\":\"vt1881\",\"client\":\"harmony-in-a-box\",\"accessToken\":\"<redacted>\",\"stagingLocation\":\"s3://local-staging-bucket/public/3b3e4b15-36e9-4dc5-b031-16305d81ca36/4/\",\"version\":\"0.22.0\"} --harmony-sources s3://local-artifact-bucket/3b3e4b15-36e9-4dc5-b031-16305d81ca36/3/outputs/catalog0.json --harmony-metadata-dir s3://local-artifact-bucket/3b3e4b15-36e9-4dc5-b031-16305d81ca36/4/outputs/",
"POD: swath-projector-6fcc48569d-224q4",
"STATUS REASON: NonZeroExitCode",
"STATUS MESSAGE: command terminated with non-zero exit code: command terminated with exit code 137",
"STATUS CODE: undefined"
],
"/home/swath_projector/interpolation.py:13: UserWarning: XArray, dask, and/or zarr not found, XArrayBilinearResampler won't be available.\r\n  from pyresample.bilinear import get_bil_info, get_sample_from_bil_info\r\n",
"2025-09-25 19:49:22,053 [INFO] [harmony-service.run_cli:349] timing./home/swath_projector/__main__.py.start\r\n2025-09-25 19:49:22,054 [INFO] [harmony-service.invoke:32] Starting Data Services Swath Projector Service\r\n",
"2025-09-25 19:49:22,073 [INFO] [harmony-service.download:400] timing.download.start https://data.asdc.uat.earthdata.nasa.gov/asdc2-uat-protected/TEMPO/TEMPO_NO2_L2_V04/2025.07.25/TEMPO_NO2_L2_V04_20250725T110957Z_S001G06.nc?A-api-request-uuid=3b3e4b15-36e9-4dc5-b031-16305d81ca36\r\n",
"2025-09-25 19:49:32,414 [INFO] [harmony-service._log_download_performance:340] timing.download.end\r\n2025-09-25 19:49:32,416 [INFO] [harmony-service.process_item:76] Granule data copied\r\n",
"2025-09-25 19:49:32,453 [INFO] [harmony-service.reproject:47] Reprojecting file /tmp/tmp05wwq7ql/01b4117fe0f1e6f9fb068e426e839844bfd13afde3cd30ed27ed1496cf23b035.nc as /tmp/tmp47obeatf/01b4117fe0f1e6f9fb068e426e839844bfd13afde3cd30ed27ed1496cf23b035_repr.nc\r\n2025-09-25 19:49:32,453 [INFO] [harmony-service.reproject:48] Selected CRS: +proj=longlat +ellps=WGS84\tInterpolation: ewa-nn\r\n",
"2025-09-25 19:49:32,560 [INFO] [harmony-service.reproject:68] Input file has 38 science variables\r\n",
"2025-09-25 19:49:32,561 [INFO] [harmony-service.resample_all_variables:78] Reprojecting variable \"/support_data/gas_profile\"\r\n2025-09-25 19:49:32,561 [INFO] [harmony-service.resample_all_variables:79] Reprojected output: \"/tmp/tmp47obeatf/support_data_gas_profile.nc\"\r\n",
"2025-09-25 19:49:32,667 [INFO] [harmony-service.get_target_area:524] Calculated x extent: x_min: -111.17788696289064, x_max: -95.29047393798828\r\n2025-09-25 19:49:32,667 [INFO] [harmony-service.get_target_area:525] Calculated y extent: y_min: 17.178890228271484, y_max: 58.2663917541504\r\n",
"2025-09-25 19:49:32,763 [INFO] [harmony-service.get_target_area:539] Calculated projected resolutions: (0.03417552291879538, -0.03417552291879538)\r\n",
"2025-09-25 19:49:32,764 [INFO] [harmony-service.get_target_area:548] Calculated width: 465\r\n2025-09-25 19:49:32,764 [INFO] [harmony-service.get_target_area:549] Calculated height: 1202\r\n"
]

@joeyschultz joeyschultz merged commit e88b515 into main Sep 25, 2025
4 checks passed
@joeyschultz joeyschultz deleted the DAS-2221 branch September 25, 2025 20:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants