Burst Mode: Sentinel-1 SLC Burst Search and Download

Overview

Phidown provides comprehensive support for searching and downloading individual Sentinel-1 SLC bursts. This feature allows you to access the fundamental imaging units of Sentinel-1 TOPSAR data without downloading entire SLC products.

What are Sentinel-1 Bursts?

Sentinel-1 operates in Interferometric Wide (IW) and Extra-Wide (EW) modes using a ScanSAR technique called TOPSAR (Terrain Observation with Progressive Scans SAR). In these modes, the radar antenna repeatedly switches between several adjacent sub-swaths, collecting short sequences of radar pulses during each observation. Each of these short pulse sequences is known as a burst, which represents the smallest imaging unit in Sentinel-1 SLC data.

A standard IW or EW SLC product combines data from many bursts. Each sub-swath is processed into an image containing a series of slightly overlapping bursts, and all sub-swaths (three for IW, five for EW) are then merged to form the final SLC product. Although the product contains multiple bursts, each burst can also be processed and used individually.

Key Characteristics

  • Available from: August 2, 2024 onwards

  • IW Mode: 3 sub-swaths (IW1, IW2, IW3)

  • EW Mode: 5 sub-swaths (EW1, EW2, EW3, EW4, EW5)

  • Polarizations: VV, VH, HH, HV

  • On-Demand Processing: Bursts are generated dynamically upon request

Searching for Bursts

Enabling Burst Mode

To search for bursts instead of full products, set burst_mode=True in the query_by_filter method:

from phidown.search import CopernicusDataSearcher

searcher = CopernicusDataSearcher()
searcher.query_by_filter(
    burst_mode=True,
    start_date='2024-08-01T00:00:00',
    end_date='2024-08-03T00:00:00',
    top=10
)

df = searcher.execute_query()

Available Burst Parameters

When burst_mode=True, you can use the following burst-specific filters:

Parameter

Type

Description

Example Values

burst_id

int

Unique identifier for a specific burst location

15804

absolute_burst_id

int

Global unique burst identifier

1580415

swath_identifier

str

Swath name

'IW1', 'IW2', 'IW3', 'EW1'-'EW5'

parent_product_name

str

Name of the parent SLC product

'S1A_IW_SLC__1SDV_...'

parent_product_type

str

Type of parent product

'IW_SLC__1S', 'EW_SLC__1S'

operational_mode

str

Acquisition mode

'IW', 'EW'

polarisation_channels

str

Polarization

'VV', 'VH', 'HH', 'HV'

platform_serial_identifier

str

Sentinel-1 satellite

'A', 'B'

relative_orbit_number

int

Relative orbit number

8, 73

datatake_id

int

Datatake identifier

439374

You can also combine burst-specific parameters with standard filters like start_date, end_date, aoi_wkt, and orbit_direction.

Search Examples

Example 1: Basic Burst Search with Temporal Filter

The simplest burst search uses only temporal filters:

from phidown.search import CopernicusDataSearcher

searcher = CopernicusDataSearcher()

# Configure search for bursts with temporal filter
searcher.query_by_filter(
    burst_mode=True,
    start_date='2024-08-01T00:00:00',
    end_date='2024-08-03T00:00:00',
    top=10,
    count=True
)

# Execute the query
df = searcher.execute_query()
print(f'Number of results: {len(df)}')
print(f'Total available results: {searcher.num_results}')

# Display first few results
searcher.display_results(top_n=5)

Example 2: Burst Search with Spatial Filter (AOI)

Combine burst mode with spatial filtering using a WKT polygon:

# Define an area of interest (example: region in central Europe)
aoi_wkt = """POLYGON((12.655118166047592 47.44667197521409,
                       21.39065656328509 48.347694733853245,
                       28.334291357162826 41.877123516783655,
                       17.47086198383573 40.35854475076158,
                       12.655118166047592 47.44667197521409))"""

searcher = CopernicusDataSearcher()

# Configure search with AOI and temporal filter
searcher.query_by_filter(
    burst_mode=True,
    aoi_wkt=aoi_wkt,
    start_date='2024-08-01T00:00:00',
    end_date='2024-08-03T00:00:00',
    top=10,
    count=True
)

# Execute and display results
df = searcher.execute_query()
print(f'Found {len(df)} bursts in the specified area')

Example 3: Search by Specific Burst ID

Retrieve all acquisitions of a specific burst:

searcher = CopernicusDataSearcher()

# Search for a specific burst ID
searcher.query_by_filter(
    burst_mode=True,
    burst_id=15804,
    start_date='2024-08-01T00:00:00',
    end_date='2024-08-15T00:00:00',
    top=20,
    count=True
)

df = searcher.execute_query()
print(f'Found {len(df)} acquisitions of burst 15804')

Example 4: Filter by Swath and Polarization

Search for bursts from a specific swath with specific polarization:

searcher = CopernicusDataSearcher()

# Search for IW2 swath with VV polarization
searcher.query_by_filter(
    burst_mode=True,
    swath_identifier='IW2',
    polarisation_channels='VV',
    start_date='2024-08-01T00:00:00',
    end_date='2024-08-03T00:00:00',
    top=10,
    count=True
)

df = searcher.execute_query()
print(f'Found {len(df)} bursts from swath IW2 with VV polarization')

Example 5: Search Bursts from a Specific Parent Product

Retrieve all bursts from a specific parent SLC product:

searcher = CopernicusDataSearcher()

parent_product = 'S1A_IW_SLC__1SDV_20240802T060719_20240802T060746_055030_06B44E_E7CC.SAFE'

searcher.query_by_filter(
    burst_mode=True,
    parent_product_name=parent_product,
    start_date='2024-08-01T00:00:00',
    end_date='2024-08-15T00:00:00',
    polarisation_channels='VV',
    top=1000
)

df = searcher.execute_query()
print(f'Found {len(df)} bursts in parent product')

Example 6: Filter by Orbit Parameters

Combine orbit parameters for consistent time-series analysis:

searcher = CopernicusDataSearcher()

searcher.query_by_filter(
    burst_mode=True,
    orbit_direction='DESCENDING',
    relative_orbit_number=8,
    operational_mode='IW',
    start_date='2024-08-01T00:00:00',
    end_date='2024-08-10T00:00:00',
    top=20,
    count=True
)

df = searcher.execute_query()
print(f'Found {len(df)} bursts from descending orbit #8')

Downloading Bursts

Authentication

To download bursts, you need to obtain an access token using your CDSE credentials:

from phidown.downloader import get_token

access_token = get_token(
    username='your_cdse_username',
    password='your_cdse_password'
)

On-Demand Burst Download

Bursts are generated on-demand rather than retrieved from pre-stored files. This means S3 commands are not applicable. Instead, a POST request is sent to the CDSE service, which dynamically produces and returns the requested burst.

from pathlib import Path
from phidown.downloader import download_burst_on_demand

# Get burst ID from search results
burst_id = df.iloc[0]['Id']

# Download the burst
download_burst_on_demand(
    burst_id=burst_id,
    token=access_token,
    output_dir=Path('./output')
)

Complete Download Workflow

Here’s a complete example combining search and download:

import os
from pathlib import Path
from phidown.search import CopernicusDataSearcher
from phidown.downloader import get_token, download_burst_on_demand

# Step 1: Authenticate
username = os.environ['CDSE_USERNAME']
password = os.environ['CDSE_PASSWORD']
token = get_token(username=username, password=password)

# Step 2: Search for bursts
searcher = CopernicusDataSearcher()
searcher.query_by_filter(
    burst_mode=True,
    burst_id=15804,
    swath_identifier='IW2',
    polarisation_channels='VV',
    start_date='2024-08-01T00:00:00',
    end_date='2024-08-03T00:00:00',
    top=5
)
df = searcher.execute_query()

# Step 3: Download bursts
output_dir = Path('./bursts')
output_dir.mkdir(exist_ok=True)

for idx, row in df.iterrows():
    burst_id = row['Id']
    print(f'Downloading burst {burst_id}...')
    download_burst_on_demand(
        burst_id=burst_id,
        token=token,
        output_dir=output_dir
    )

Common Use Cases

InSAR Time Series

Search for specific burst IDs across multiple dates with consistent orbit parameters:

searcher.query_by_filter(
    burst_mode=True,
    burst_id=15804,
    relative_orbit_number=8,
    orbit_direction='DESCENDING',
    start_date='2024-08-01T00:00:00',
    end_date='2024-12-31T00:00:00',
    top=1000
)

Regional Analysis

Use AOI with swath/polarization filters to get bursts covering your study area:

searcher.query_by_filter(
    burst_mode=True,
    aoi_wkt=your_polygon_wkt,
    swath_identifier='IW2',
    polarisation_channels='VV',
    start_date='2024-08-01T00:00:00',
    end_date='2024-08-31T00:00:00'
)

Product Decomposition

Retrieve all bursts from a parent SLC product for individual processing:

searcher.query_by_filter(
    burst_mode=True,
    parent_product_name='S1A_IW_SLC__1SDV_...',
    top=1000
)

Systematic Monitoring

Filter by relative orbit number and burst ID for regular acquisitions:

searcher.query_by_filter(
    burst_mode=True,
    burst_id=15804,
    relative_orbit_number=8,
    start_date='2024-08-01T00:00:00',
    end_date='2024-12-31T00:00:00'
)

Valid Parameter Values

Swath Identifiers
  • IW mode: 'IW1', 'IW2', 'IW3'

  • EW mode: 'EW1', 'EW2', 'EW3', 'EW4', 'EW5'

Parent Product Types
  • 'IW_SLC__1S' (Interferometric Wide SLC)

  • 'EW_SLC__1S' (Extra Wide SLC)

Operational Modes
  • 'IW' (Interferometric Wide)

  • 'EW' (Extra Wide)

Polarization Channels
  • 'VV' (Vertical-Vertical)

  • 'VH' (Vertical-Horizontal)

  • 'HH' (Horizontal-Horizontal)

  • 'HV' (Horizontal-Vertical)

Platform Serial Identifiers
  • 'A' (Sentinel-1A)

  • 'B' (Sentinel-1B)

Orbit Directions
  • 'ASCENDING'

  • 'DESCENDING'

Important Notes

Note

Burst data is only available from August 2, 2024 onwards.

Warning

Bursts are generated on-demand, which means download times may be longer than for pre-stored products. The first request for a specific burst may take several minutes as the system processes it.

Tip

For InSAR time series, always use the same burst_id and relative_orbit_number to ensure spatial consistency across acquisitions.

See also

API Reference

phidown.downloader.get_token(username, password)[source]

Acquire an access token from Copernicus Data Space Ecosystem.

This function authenticates with the CDSE identity service using username and password credentials to obtain a Keycloak access token for API access.

Parameters:
  • username (str) – CDSE account username.

  • password (str) – CDSE account password.

Returns:

The access token string to be used for authenticated API requests.

Return type:

str

Raises:
  • AssertionError – If username or password is empty.

  • requests.exceptions.HTTPError – If the authentication request fails.

Example

>>> token = get_token('myuser@example.com', 'mypassword')
Acquired keycloak token!
phidown.downloader.download_burst_on_demand(burst_id, token, output_dir)[source]

Download and save a Sentinel-1 burst product from CDSE.

This function requests on-demand processing of a single Sentinel-1 burst and downloads the resulting product as a ZIP file. The burst is identified by its UUID from the CDSE catalogue.

Parameters:
  • burst_id (str) – UUID of the burst to download from the CDSE catalogue.

  • token (str) – Keycloak access token obtained from get_token().

  • output_dir (Path) – Directory path where the burst ZIP file will be saved.

Raises:
Return type:

None

Example

>>> from pathlib import Path
>>> token = get_token('user@example.com', 'password')
>>> download_burst('12345678-1234-1234-1234-123456789abc', token, Path('./output'))
Processing burst...
Processing has been successful!
Saving output product...
Output product has been saved to: ./output/burst_12345678.zip
CopernicusDataSearcher.query_by_filter(base_url='https://catalogue.dataspace.copernicus.eu/odata/v1/Products', collection_name='SENTINEL-1', product_type=None, orbit_direction=None, cloud_cover_threshold=None, attributes=None, aoi_wkt=None, start_date=None, end_date=None, top=1000, count=False, order_by='ContentDate/Start desc', burst_mode=False, burst_id=None, absolute_burst_id=None, swath_identifier=None, parent_product_name=None, parent_product_type=None, parent_product_id=None, datatake_id=None, relative_orbit_number=None, operational_mode=None, polarisation_channels=None, platform_serial_identifier=None)[source]

Set and validate search parameters for the Copernicus data query.

Parameters:
  • base_url (str) – The base URL for the OData API.

  • collection_name (str, optional) – Name of the collection to search. Defaults to ‘SENTINEL-1’.

  • product_type (str, optional) – Type of product to filter. Defaults to None.

  • orbit_direction (str, optional) – Orbit direction to filter (e.g., ‘ASCENDING’, ‘DESCENDING’). Defaults to None.

  • cloud_cover_threshold (float, optional) – Maximum cloud cover percentage to filter. Defaults to None.

  • attributes (Dict[str, Union[str, int, float]], optional) – Additional attributes for filtering. Defaults to None.

  • aoi_wkt (str, optional) – Area of Interest in WKT format. Defaults to None.

  • start_date (str, optional) – Start date for filtering (ISO 8601 format). Defaults to None.

  • end_date (str, optional) – End date for filtering (ISO 8601 format). Defaults to None.

  • top (int, optional) – Maximum number of results to retrieve. Defaults to 1000.

  • count (bool, optional) – Whether to include count of results. Defaults to False.

  • order_by (str, optional) – Field and direction to order results by. Defaults to “ContentDate/Start desc”.

  • burst_mode (bool, optional) – Enable Sentinel-1 SLC Burst mode searching. Defaults to False.

  • burst_id (int, optional) – Burst ID to filter (burst mode only). Defaults to None.

  • absolute_burst_id (int, optional) – Absolute Burst ID to filter (burst mode only). Defaults to None.

  • swath_identifier (str, optional) – Swath identifier (e.g., ‘IW1’, ‘IW2’) (burst mode only). Defaults to None.

  • parent_product_name (str, optional) – Parent product name (burst mode only). Defaults to None.

  • parent_product_type (str, optional) – Parent product type (burst mode only). Defaults to None.

  • parent_product_id (str, optional) – Parent product ID (burst mode only). Defaults to None.

  • datatake_id (int, optional) – Datatake ID (burst mode only). Defaults to None.

  • relative_orbit_number (int, optional) – Relative orbit number (burst mode only). Defaults to None.

  • operational_mode (str, optional) – Operational mode (e.g., ‘IW’, ‘EW’) (burst mode only). Defaults to None.

  • polarisation_channels (str, optional) – Polarisation channels (e.g., ‘VV’, ‘VH’) (burst mode only). Defaults to None.

  • platform_serial_identifier (str, optional) – Platform serial identifier (e.g., ‘A’, ‘B’) (burst mode only). Defaults to None.

Return type:

None