Welcome to NetCDF Studio
Your guide to converting climate reanalysis and projection data into research-ready CSV datasets.
What Can You Do?
Supported Data Sources
NetCDF Studio provides guided workflows for six major climate data sources. Each page explains the dataset, access requirements, and how the conversion works.
Uploading Archives
How to upload IMDAA reanalysis ZIP files for conversion. For ERA5 or CMIP6 data, see the dedicated pages.
Step-by-Step
.zip archive onto the upload zone, or click to browse. The file must contain NetCDF (.nc) files from IMDAA reanalysis datasets.Tracking Requests
Monitor your conversion jobs in real time.
Request Statuses
| Status | Meaning |
|---|---|
| Queued | Your request is waiting to be processed. |
| Processing | The server is actively converting your archive. You'll see a live progress bar. |
| Completed | All CSV files are ready for download. |
| Failed | Something went wrong. Check the error message and try again. |
What You Can Do
- View Progress — Live percentage and ETA updates as your job runs.
- Download Files — Once complete, download individual CSVs or all at once.
- Delete Requests — Remove completed or failed requests from your history.
- Re-run — Use the same archive to create new CSV variants with different settings.
Correction Engines
Apply scientific correction pipelines to your processed CSV data.
What Are Correction Engines?
IMDAA provides raw 3-hourly reanalysis data. Correction engines transform this raw data into daily, scientifically standardized products that are ready for research — converting units, aggregating timesteps, and applying domain-specific formulas.
How to Apply Corrections
Available Modules
| Module | What It Does | Output |
|---|---|---|
| 🌡️ Temperature | Converts 3-hourly Kelvin data to daily °C products | Tmean, Tmax, Tmin |
| ☀️ Radiation | Integrates W/m² flux into daily energy totals | SW, LW, Net Radiation (MJ/m²/day) |
| 💧 Relative Humidity | Converts fractional RH to daily percentage stats | RH mean, max, min (%) |
| ☁️ Vapor Pressure | Derives actual vapor pressure from dewpoint | ea (kPa) |
| 🌬️ Wind Speed | Computes magnitude from U/V components at 2m height | Daily mean wind speed (m/s) |
| 🌧️ Rainfall Erosivity | Estimates R-factor from sub-daily rainfall | Erosivity index (MJ·mm/ha/hr) |
| 🌱 Soil Moisture | Processes 4-layer Noah LSM soil moisture data | Layer-wise daily mean, SWS (mm), Root Zone, Surface |
Unit Conversion
Transform units across your CSV datasets with built-in scientific formulas.
How to Use
Common Conversions
| From | To | Formula |
|---|---|---|
| Kelvin (K) | Celsius (°C) | T(°C) = T(K) − 273.15 |
| W/m² | MJ/m²/day | E = flux × 0.0864 |
| Pa | kPa | P(kPa) = P(Pa) / 1000 |
| m/s | km/h | v(km/h) = v(m/s) × 3.6 |
| kg/m²/s | mm/day | P(mm) = P(kg/m²/s) × 86400 |
File Management
Organize, download, and manage your processed archives and CSV outputs.
Your Workspace
The Files page shows all your archives and their associated outputs organized by upload. Each archive can have multiple CSV variants from different processing runs.
What You Can Do
- Download — Download individual CSV files or all outputs from an archive at once.
- Preview — Quick-view the first rows of any CSV to verify the data before downloading.
- Re-process — Select an existing archive and run it again with different settings.
- Delete — Remove files you no longer need to free up storage.
Scientific Modules Reference
How each correction module transforms your IMDAA data.
🌡️ Temperature
Converts 3-hourly temperatures from Kelvin to Celsius, then produces daily aggregates.
Products: Tmean (daily mean), Tmax (daily maximum), Tmin (daily minimum).
☀️ Radiation
Integrates instantaneous flux values (W/m²) into daily energy totals (MJ/m²/day).
where 0.03888 = 10800 seconds / 10⁶ (J → MJ)
Products: Net Shortwave, Net Longwave, Net Radiation.
💧 Relative Humidity
Converts fractional RH (0–1) to percentage and computes daily statistics.
Products: RH mean, RH max, RH min.
☁️ Vapor Pressure
Derives actual vapor pressure from dewpoint temperature using the Magnus formula.
Products: Daily mean actual vapor pressure (kPa).
🌬️ Wind Speed
Computes wind speed from U and V vector components with FAO-56 height adjustment.
WS_2m = WS_z × [ 4.87 / ln(67.8z − 5.42) ]
Products: Daily mean wind speed at 2m (m/s).
🌧️ Rainfall Erosivity
Estimates the R-factor (erosive potential) from sub-daily rainfall intensity.
Products: Daily precipitation (mm), Erosivity index.
🌱 Soil Moisture
Processes 4-layer Noah LSM soil moisture data (m³/m³) to compute layer-wise daily means, total soil water storage, and root zone averages.
Layers: L1 (0–10cm, 100mm) · L2 (10–35cm, 250mm) · L3 (35–100cm, 650mm) · L4 (100–300cm, 2000mm)
Products: Layer-wise daily mean, Total SWS (mm), Root Zone moisture (0–1 m), Surface layer (0–10 cm), Monthly summaries.
Build Custom Correction Engines
Create your own scientific correction modules and share them with the research community.
What You Need
Every custom correction module requires two files:
| File | Format | Purpose |
|---|---|---|
| logic.py | Python (.py) | The processing script with your scientific logic |
| theory.md | Markdown (.md) | Scientific documentation shown to users in the wizard |
Input File Requirements
Your module will receive a processed IMDAA CSV file. These CSVs always contain:
| Column | Type | Description |
|---|---|---|
lat | Float | Latitude coordinate |
lon | Float | Longitude coordinate |
time | Datetime | Timestamp of the observation |
station | String | Station name or ID |
height | Float | Station elevation (m) |
grid | String | Grid cell identifier |
loc_id | String | Location identifier (lat_lon) |
| Variable columns | Float | The actual data values (e.g., temperature, wind speed) |
Variable Mapping & Unit Conversion Flow
Before your apply_correction() runs, the engine performs two preprocessing steps automatically:
REQUIRED_VARIABLES to a CSV column. The engine sends the column indices (0-based) to the Python worker. Your module receives only the mapped columns plus the standard metadata columns (lat, lon, time, station, height, grid, loc_id, date).apply_correction(). Your function receives already-converted data. You do not need to handle unit conversion in your logic.The complete data flow from user input to your function:
"original" baseline option gives the user access to the pre-conversion data, while "converted" gives the post-conversion data. Both are handled by the engine — your module only sees the converted data.Python Script Structure
Your logic.py must define two things:
1. Metadata Constants
These tell the UI what your module needs and what it produces:
2. How the Output Selection Plan Works
When a user selects your module in the correction wizard, the Output Selection Plan section is dynamically generated from your AGGREGATION_SCHEMA. This means the checkboxes, group labels, and default states are entirely driven by what you define — no UI code changes are needed.
Data Flow
Schema Structure Breakdown
| Field | Level | Purpose |
|---|---|---|
baseline.options | Root | Defines baseline checkboxes (e.g., "Original Values", "Unit Converted"). Each option has id, label, and default (checked state). |
correctionOutputs.note | Root | A descriptive string shown above the aggregation checkboxes (e.g., "Temperature Product Suite: Generates Tmax, Tmin, Tmean"). |
aggregations[] | Output group | Each entry defines a temporal group (row of checkboxes). |
temporal | Group | The temporal key — "sub-daily", "daily", "monthly", or "yearly". This value is passed to apply_correction() in the aggregations payload. |
label | Group | Display label for the group (e.g., "DAILY PRODUCTS", "Monthly"). |
defaultEnabled | Group | If true, the group's checkboxes are checked by default. If false or omitted, they start unchecked. |
types[] | Group | Individual output checkboxes within the group. |
types[].id | Type | Unique identifier for the output type (e.g., "max", "sws"). This id is what your apply_correction() receives in the aggregations payload. |
types[].label | Type | User-visible label (e.g., "Tmax (Max)", "Total Soil Water Storage (mm)"). |
types[].default | Type | If true, this checkbox starts checked. |
Supported Temporal Values
| Value | Use Case | Example |
|---|---|---|
"sub-daily" | Instantaneous or same-resolution outputs | 10m wind speed from hourly U/V |
"daily" | Daily aggregations (mean, max, min, sum) | Daily mean temperature |
"monthly" | Monthly summaries | Monthly mean soil water storage |
"yearly" | Annual summaries | Mean annual erosivity |
"none" | Baseline only (no temporal grouping) | Original or unit-converted data |
What the User's Selection Becomes
When the user clicks Execute Pipeline, the checked checkboxes are collected into an aggregations array and sent to apply_correction():
Your apply_correction() function iterates over this array to produce the requested outputs. The temporal and types[].id values are what you defined in your schema — they are the contract between your UI declaration and your processing logic.
AGGREGATION_SCHEMA is defined, the system falls back to a default schema with a single "none" temporal group producing "original" and "converted" baseline outputs.3. The apply_correction Function
This is the entry point the engine calls with the user's mapped data:
Output Schema
Your function must return a dictionary where:
- Keys = output filenames (e.g.,
"Daily_Mean.csv") - Values = Pandas DataFrames with the computed results
Each DataFrame should include lat, lon, date columns plus your computed values. The engine handles storage and download links automatically.
Output File Naming Convention
Every correction run generates one or more CSV files. Understanding the naming convention helps you identify outputs programmatically and build downstream automation.
How Filenames Are Resolved
The engine uses a two-stage resolution process to produce final filenames:
apply_correction() returns a dict.csv) or a suffix (without .csv). The engine treats these differently.write_results() resolves the final name- If the key ends with
.csv→ used as-is (e.g.,"Output_Tmax_Daily.csv") - If the key does not end with
.csv→ the engine prepends{output_prefix}_and appends.csv(e.g.,"Daily_Mean"becomes"Output_Daily_Mean.csv")
Baseline Output Names
Baseline outputs are generated automatically by the engine (not by your module):
| Baseline Option | Filename |
|---|---|
"original" | {output_prefix}_Original.csv |
"converted" | {output_prefix}_UnitConverted.csv |
Built-in Module Naming Patterns
The table below shows the naming convention used by each built-in module, so you know what to expect when running them:
| Module | Dict Key Pattern | Final Filename Example | Has .csv in key? |
|---|---|---|---|
| Temperature | {prefix}_{Label}_{Temporal}.csv | Output_Tmax_Daily.csv | Yes |
| Relative Humidity | {prefix}_{Label}_{Temporal}.csv | Output_RHmean_Daily.csv | Yes |
| Radiation | {prefix}_{Product}_Daily_MJ.csv | Output_NetSW_Daily_MJ.csv | Yes |
| Rainfall Erosivity | {prefix}_{Product}_{Temporal}.csv | Output_Rainfall_Daily.csv | Yes |
| Soil Moisture | {prefix}_{Product}_{Temporal} | Output_SoilWaterStorage_Daily.csv | No — engine adds .csv |
| Wind Speed | {Product} | Output_Daily_Wind_Speed_10m.csv | No — engine adds prefix + .csv |
| Vapor Pressure | {Product} | Output_Daily_Saturation_Vapor_Pressure_ES.csv | No — engine adds prefix + .csv |
Recommended Pattern for Custom Modules
For consistency with the built-in modules, we recommend including both output_prefix and .csv in your dict keys. This makes filenames predictable and self-documenting:
output_prefix comes from the user's "Output Prefix" field in the wizard (defaults to "Output"). If multiple files are generated, each gets its own name — no index suffixes are added by the engine.Transpose Output Format
The transpose parameter controls the output format:
transpose=True(default): Output is pivoted — rows are timestamps, columns are station/location IDs. Best for time-series analysis.transpose=False: Output is in long format — each row is a single observation withlat,lon,time, and value columns.
loc_id column creation from lat/lon coordinates when needed for grouping.Error Handling
To signal errors, return a dictionary with an "error" key:
The engine will catch this and display the error message to the user instead of generating output files.
Writing Theory Documentation
The theory.md file is shown to users in the correction wizard. It should include:
$$ T(°C) = T(K) - 273.15 $$Getting Started Template
Copy this starter template and modify it for your use case:
How to Upload
logic.py and theory.md files.pandas, numpy, and scipy are available. If you need additional packages, contact the admin.Google Earth Engine
Fetch satellite and climate datasets from Google Earth Engine directly into your processing jobs.
What Is GEE Integration?
Instead of uploading a local IMDAA archive, you can point a job at a Google Earth Engine collection. NetCDF Studio will authenticate with GEE using your credentials, fetch the requested data, and run the same processing pipeline — correction engines, unit conversion, and CSV export — on the result.
Billing Clarification
| Cost Item | Who Pays |
|---|---|
| GEE API calls & data retrieval quota | Google bills your GEE account |
| Server computation (conversion, corrections) | Covered by your NetCDF Studio plan |
| Output storage | Covered by your plan quota |
Setting Up Your GEE Credential
Supported Data Sources
- Any publicly accessible GEE
ImageCollectionyour account can read - CMIP6 collections available via GEE catalogue
- ERA5, MODIS, Landsat, Sentinel — anything your GEE quota allows
ERA5 Reanalysis (CDS)
Fetch ERA5 reanalysis data from the Copernicus Climate Data Store directly into your processing pipeline.
What Is ERA5?
ERA5 is the fifth generation of ECMWF's atmospheric reanalysis, providing hourly estimates of atmospheric, land, and ocean variables on a 0.25° global grid from 1940 to present. NetCDF Studio can fetch ERA5 data directly from the Copernicus CDS — no file upload required.
Setting Up Your CDS Credential
Available Variables
| Level Type | Examples |
|---|---|
| Single Level | 2m temperature, 10m wind U/V, total precipitation, surface pressure, soil moisture, radiation fluxes |
| Pressure Level | Temperature, geopotential, relative humidity, wind U/V at specified pressure levels (e.g., 500 hPa, 850 hPa) |
How It Works
- Queuing — ERA5 requests are queued with the Copernicus CDS API. Large requests may take minutes to hours depending on CDS server load.
- Download — Once the CDS fulfils the request, NetCDF Studio downloads the NetCDF file and converts it to CSV using the same pipeline as a local archive upload.
- Post-processing — All standard features apply: correction engines, unit conversion, CSV preview, and file management.
Frequently Asked Questions
Common questions about using NetCDF Studio.
What file formats can I upload?
NetCDF Studio accepts .zip archives containing NetCDF (.nc) files. For ERA5 and CMIP6, no upload is needed — the server fetches data directly from the Copernicus CDS or Google Earth Engine.
What data sources are supported?
Three sources are available on the Home page: Upload Archive (your own IMDAA ZIP files), ERA5 (Copernicus Climate Data Store), and CMIP6 (NASA NEX-GDDP via Google Earth Engine). Each source feeds into the same CSV processing pipeline.
What is the maximum upload size?
Uploads are capped at 500 MB on the free tier and 2 GB on Pro and Max plans. Enterprise upload limits are negotiated per account. For larger archives, run NetCDF Studio locally — the CLI and Python tools process files of any size on your own computer.
How do I set up ERA5 access?
Register at cds.climate.copernicus.eu, accept the ERA5 licence terms, then paste your CDS Personal Access Token in Settings → Credentials. See the ERA5 Reanalysis page for details.
Does NetCDF Studio charge for external data?
No. ERA5 data from the Copernicus CDS is free. GEE/CMIP6 usage is billed by Google to your GEE account. Your NetCDF Studio plan covers server-side computation only. See the Google Earth Engine page for a full cost breakdown.
Do I need Python installed?
No. The web app handles everything in the cloud. Python is only used on the server side — you never need to install anything locally.
Can I re-use uploaded archives?
Yes. Previously uploaded archives are saved in your workspace. You can select them again during the upload step to create new CSV variants without re-uploading.
How long is my data retained?
Processed files are retained according to your membership plan's data retention policy (shown on the Files page). Job scratch data on Compute Nodes is deleted immediately after each job completes. You can delete files at any time from the Files page to free up storage.
How do I check my storage usage?
Go to the Files page — the storage quota bar at the top shows how much of your plan's storage is used. Your plan and storage limit are also shown on the Profile page under Membership Access.
AWS Open Data
Retrieve atmospheric datasets from the AWS Open Data Registry without leaving NetCDF Studio.
What is AWS Open Data?
The AWS Open Data Registry is a catalogue of publicly available scientific datasets hosted on Amazon S3. NetCDF Studio can fetch selected atmospheric and climate datasets from this registry directly into your processing pipeline — no AWS account or IAM credentials required for the supported open datasets.
Supported Datasets
How to Use AWS Open Data
- On the Dashboard Home page, select the AWS tab from the data source selector.
- Choose a dataset from the dropdown (e.g., IMDAA Reanalysis).
- Select the variables you need using the chip grid (e.g., Temperature at 2m, Wind Speed).
- Set the date range — hourly, 6-hourly, or daily granularity depending on the dataset.
- Click Request. The server fetches the relevant S3 objects and queues a conversion job.
No AWS Credentials Required
The datasets available through the AWS tab are part of the AWS Open Data program — they are publicly accessible without authentication. NetCDF Studio handles the S3 access server-side; you never need to configure or supply AWS credentials.
Output
Fetched data goes through the same conversion pipeline as uploaded archives: variable selection, scientific corrections (if enabled), unit conversion, and final CSV export. The resulting files appear on your Files page once the job completes.
ESGF Federation
Access CMIP6 and other climate model outputs via the Earth System Grid Federation.
What is ESGF?
The Earth System Grid Federation (ESGF) is a global network of data nodes that distributes climate model outputs — including CMIP5, CMIP6, CORDEX, and other multi-model ensembles — produced by major modelling centres worldwide.
ESGF in NetCDF Studio
NetCDF Studio provides two routes to CMIP6 data:
- GEE/CMIP6 route — retrieves pre-processed CMIP6 outputs via NASA NEX-GDDP through Google Earth Engine (requires a GEE account). Best for downscaled, bias-corrected projections. See the Google Earth Engine page.
- ESGF direct route — supply a dataset ID and file URL from an ESGF node to download and convert a specific model output file directly. This does not require a GEE account but does require you to locate the dataset on an ESGF search portal.
How to Use the ESGF Route
- Visit an ESGF search portal (e.g. esgf-node.llnl.gov) and find the dataset you need.
- Copy the Dataset ID (e.g.
CMIP6.ScenarioMIP.MIROC.MIROC6.ssp585.r1i1p1f3.Amon.tas.gn.v20191108). - Copy the direct File URL for the specific
.ncfile from the ESGF node. - On the Dashboard Home page, select the ESGF tab.
- Paste the Dataset ID and File URL into the respective fields.
- Click Request. The server downloads the file and queues a conversion job.
Supported Variables
ESGF files can contain any CMIP6-standard variable. After the file is downloaded, NetCDF Studio extracts all variables present and presents them for selection before generating the CSV output. No pre-configuration of variable names is required.
Notes and Limitations
- ESGF file servers can be slow or temporarily unavailable. If a download fails, retry after a few minutes.
- File sizes can be large; your plan's upload limit does not apply to ESGF downloads (they are server-side), but your storage quota does count the output files.
- Some ESGF nodes require OpenID credentials — NetCDF Studio does not manage ESGF authentication; ensure you supply a publicly accessible file URL.
Membership Plans
Understanding storage quotas, processing limits, and plan tiers.
Plan Overview
NetCDF Studio uses a tiered membership model. Every account starts on the FREE tier automatically. Upgrades to paid tiers require an admin-approved membership application.
Membership Application
When you first sign up, your account is placed in the NONE (pending) state. Completing the onboarding wizard submits a membership application to the administrators for review. You will be notified when your membership is approved or if additional information is needed.
To upgrade an existing plan, contact an administrator or use the Upgrade Plan option in the membership wizard (accessible from your Profile page).
Storage Quota
Your storage quota covers all files in your workspace — uploaded archives, generated CSV outputs, and correction results. The quota bar on the Files page shows current usage. You can free space at any time by deleting individual files or using Settings → Purge Studio Files to remove all outputs.
Processing Threads
Processing threads control how many conversion jobs can run in parallel for your account. On the FREE tier, only one job runs at a time — additional submissions are queued. PRO and MAX plans support concurrent processing, which significantly reduces turnaround time when working with multiple datasets.
Membership States
- NONE — New account; application not yet submitted or still in review.
- PENDING — Application submitted and awaiting admin approval.
- FREE — Active free-tier membership.
- PRO — Active PRO membership.
- MAX — Active MAX membership.
- ENTERPRISE — Active Enterprise membership (custom quota).
- EXPIRED — Membership lapsed; contact an admin to renew.