Skip to main content

TACT Documentation

TACT (Turbulence Adjustment Computation Tool) is a Python package for processing, adjusting, and comparing LiDAR-based turbulence intensity measurements with traditional anemometer-based measurements.

πŸš€ Getting Started

New to TACT? Start here:

✨ Features

  • Standardized Data Processing: Consistent formatting and validation for LiDAR and anemometer data
  • Multiple Adjustment Methods:
    • Baseline (no adjustment reference)
    • Site-Specific Simple + Filter (SS-SF) - recommended
    • Site-Specific Wind Speed (SSWS)
    • Site-Specific Wind Speed + Std Dev (SSWSStd)
  • DNV RP-0661 Validation: Industry-standard validation with MRBE/RRMSE metrics
  • Professional Visualization: Publication-ready plots with DNV acceptance criteria
  • Method Comparison Framework: Automated benchmarking of all methods
  • Extensible Architecture: Easy to add custom adjustment methods
  • Statistical Analysis Tools: Comprehensive metrics and regression analysis

πŸ“– User Guides

Core Workflows

Example Scripts

πŸ“š API Documentation

Core Components

Adjustment Methods

  • Baseline - No adjustment (reference comparison)
  • SS-SF - Site-Specific Simple + Filter (recommended)
  • SSWS - Site-Specific Wind Speed
  • SSWSStd - SS Wind Speed + Standard Deviation

Validation & Visualization

  • DNV RP-0661 Validation (tact/validation/dnv_rp0661.py) - Industry-standard validation
  • Visualization Suite (tact/visualization/dnv_plots.py) - Professional plotting

Utilities

πŸ“Š Method Comparison

See Method Comparison Results for detailed performance analysis of all implemented methods on example data. Quick Summary:
  • SS-SF: Best overall performance (MRBE: 37.8%, RRMSE: 111.1%)
  • SSWSStd: Second best (MRBE: 37.7%, RRMSE: 121.6%)
  • SSWS: Third (MRBE: 92.1%, RRMSE: 188.0%)
  • Baseline: Reference (MRBE: 90.4%, RRMSE: 183.0%)

πŸ”§ Configuration

TACT uses JSON configuration files to map your data columns and set processing parameters:
{
    "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
    }
}
See Data Import Guide for details.

🎯 Quick Examples

Run Adjustment with Validation

from tact import TACT
from tact.utils.load_data import load_data
from tact.utils.setup_processors import setup_processors
from tact.validation import validate_dnv_rp0661

# Load and process data
data = load_data("data.csv")
bp, tp, sp = setup_processors("config.json")
data = bp.process(tp.process(data))

# Run adjustment
tact = TACT()
results = tact.adjust(data, "ss-sf", {"split": True, "config_path": "config.json"})

# Validate with DNV RP-0661
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(f"MRBE: {validation['overall']['MRBE_%'].iloc[0]:.2f}%")
print(f"RRMSE: {validation['overall']['RRMSE_%'].iloc[0]:.2f}%")

Compare All Methods

from compare_all_methods import compare_all_methods

# Runs baseline, ss-sf, ssws, sswsstd
comparison = compare_all_methods()
print(comparison)

Add Custom Method

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", ...]

    def adjust(self, data, parameters):
        # Your implementation
        return {"adjusted_data": adjusted_data}
See Adding Custom Models for complete tutorial.

πŸ“¦ Project Structure

TACT/
β”œβ”€β”€ tact/                      # Main package
β”‚   β”œβ”€β”€ adjustments/          # Adjustment method implementations
β”‚   β”œβ”€β”€ validation/           # DNV RP-0661 validation
β”‚   β”œβ”€β”€ visualization/        # Plotting functions
β”‚   β”œβ”€β”€ core/                 # Core infrastructure
β”‚   β”œβ”€β”€ utils/                # Utility functions
β”‚   β”œβ”€β”€ example/              # Example data and configs
β”‚   └── tests/                # Test suite
β”œβ”€β”€ docs/                     # Documentation (you are here!)
β”œβ”€β”€ legacy/                   # Original monolithic implementation
β”œβ”€β”€ main.py                   # Example pipeline script
β”œβ”€β”€ compare_all_methods.py    # Method comparison script
└── requirements.txt          # Dependencies

🀝 Contributing

We welcome contributions! See the Contributing Guide for:
  • Code style and standards
  • Testing requirements
  • Pull request process
  • Development setup

πŸ“„ License

This project is licensed under the BSD 3-Clause License - see the LICENSE file for details.

πŸ“ž Support

πŸ“ Additional Resources


Ready to get started? β†’ Getting Started Guide