Skip to main content
TACT provides a complete toolkit for processing, adjusting, and validating LiDAR turbulence intensity measurements.

Adjustment Methods

TACT includes multiple adjustment methods with an extensible framework for adding more:
Performance varies by dataset characteristics. Use compare_all_methods.py to evaluate all methods on your specific data and determine which performs best for your site conditions.

DNV RP-0661 Validation

Built-in industry-standard validation ensures your adjustments meet regulatory requirements.
from tact.validation import validate_dnv_rp0661

validation = validate_dnv_rp0661(
    adjusted_data=results["adjusted_data"],
    reference_col="ref_ti",
    adjusted_col="adjTI_RSD_TI",
    wind_speed_col="ref_ws",
    bin_col="bins",
    criteria_type="LV"
)

print(validation['overall'])  # Overall metrics
print(validation['by_bin'])   # Per-bin details

Validation Metrics

MRBE - Mean Relative Bias Error measures systematic biasRRMSE - Relative Root Mean Square Error measures overall accuracyIncludes per-bin analysis and automatic pass/fail determination

Criteria Types

LV (Load Verification): MRBE ≤ 5%, RRMSE ≤ 15% for turbine load calculationsPC (Power Curve): Stricter criteria for power performance testing

Visualization

Generate validation plots with a single function call.
from tact.visualization import plot_dnv_validation

plot_dnv_validation(
    validation_results=validation,
    adjusted_data=results["adjusted_data"],
    reference_col="ref_ti",
    adjusted_col="adjTI_RSD_TI",
    unadjusted_col="rsd_ti",
    wind_speed_col="ref_ws",
    bin_col="bins",
    method_name="SS-SF",
    output_dir="output/plots"
)

Example Output

MRBE by Wind Speed Bin

MRBE by wind speed bin with DNV acceptance limits

RRMSE by Wind Speed Bin

RRMSE by wind speed bin with acceptance thresholds

TI Scatter Plot

Adjusted vs reference TI with 1:1 line and regression

TI Comparison Plot

Before/after adjustment comparison by wind speed bin

Data Processing Pipeline

Standardized data processing ensures consistency and quality.
1

Data Loading

from tact.utils.load_data import load_data
data = load_data("your_data.csv")
  • Automatic CSV parsing
  • Column validation
  • Missing data detection
2

Binning

from tact.utils.setup_processors import setup_processors
bp, tp, sp = setup_processors("config.json")
data = bp.process(data)
  • Configurable wind speed bins
  • Automatic bin assignment
  • Statistical aggregation
3

TI Calculation

data = tp.process(data)
  • Turbulence intensity computation
  • Representative TI calculation
  • Standard deviation handling
4

Statistical Analysis

data = sp.process(data)
  • Per-bin statistics
  • Correlation analysis
  • Quality metrics

Extensible Architecture

Add your own adjustment methods with minimal code.
from tact.core.base import AdjustmentMethod
from tact.core.registry import AdjustmentRegistry

@AdjustmentRegistry.register("my-method")
class MyMethod(AdjustmentMethod):
    def required_model_parameters(self):
        return {"config_path": str}

    def required_data_columns(self):
        return ["reference.wind_speed", "rsd.height_1.wind_speed"]

    def adjust(self, data, parameters):
        # Your adjustment logic here
        adjusted_data = data.copy()
        # ... implement your algorithm ...
        return {"adjusted_data": adjusted_data}
See the Adding Custom Models guide for a complete tutorial with examples.

Configuration System

Flexible JSON-based configuration for easy customization.
{
    "input_data_column_mapping": {
        "reference": {
            "wind_speed": "ref_ws",
            "wind_speed_std": "ref_sd",
            "turbulence_intensity": "ref_ti"
        },
        "rsd": {
            "primary": {
                "wind_speed": "rsd_ws",
                "wind_speed_std": "rsd_sd",
                "turbulence_intensity": "rsd_ti"
            }
        }
    },
    "binning_config": {
        "bin_size": 1.0,
        "bin_min": 4.0,
        "bin_max": 20.0
    }
}
Map your CSV columns to TACT’s expected format (supports any column names), configure wind speed bins for analysis, and define method-specific parameters. See the Configuration Guide for detailed setup instructions.

Python Package Features

Importable Module

Use TACT in your own Python scripts from any directory
from tact import TACT

Standalone Scripts

Run included example scripts directly
python main.py
python compare_all_methods.py

Jupyter Compatible

Works seamlessly in Jupyter notebooks for interactive analysis

Minimal Dependencies

Only requires standard scientific Python packages (numpy, pandas, matplotlib)

Next Steps