Mercurial > repos > bgruening > 3dtrees_standardization
changeset 1:6524ef47a755 draft default tip
planemo upload for repository https://github.com/bgruening/galaxytools/tree/master/tools/3Dtrees_standardization commit a46a7cd9cef25a6d34bcc268ba72d8afebfdf8c6
| author | bgruening |
|---|---|
| date | Tue, 13 Jan 2026 07:41:37 +0000 |
| parents | e78c8c5ea3df |
| children | |
| files | standard.xml test-data/mikro2.laz |
| diffstat | 2 files changed, 125 insertions(+), 51 deletions(-) [+] |
line wrap: on
line diff
--- a/standard.xml Tue Dec 09 12:54:11 2025 +0000 +++ b/standard.xml Tue Jan 13 07:41:37 2026 +0000 @@ -1,86 +1,160 @@ -<tool id="3dtrees_standardization" name="3Dtrees: LAZ Standardization" version="@TOOL_VERSION@+galaxy@VERSION_SUFFIX@" profile="24.2"> - <description> - laz file checks and standardization. - </description> +<tool id="3dtrees_standardization" name="3DTrees: LAS/LAZ Standardization" version="@TOOL_VERSION@+galaxy@VERSION_SUFFIX@" profile="24.2"> + <description>Standardize LAS/LAZ files or validate collections for consistency</description> <macros> - <token name="@TOOL_VERSION@">1.0.1</token> + <token name="@TOOL_VERSION@">1.1.0</token> <token name="@VERSION_SUFFIX@">0</token> </macros> <requirements> <container type="docker">ghcr.io/3dtrees-earth/3dtrees-pc-standard:@TOOL_VERSION@</container> </requirements> <command detect_errors="exit_code"><![CDATA[ -## needed because the Rscript is following symlinks -cp '$input' /in/input.laz && -cd /src && -Rscript run.R - --dataset-path /in/input.laz - --output-dir . - --min-density - $min_density && -mv /src/pc_standardized.laz '$pc_standardized' - ]]> - </command> + #if $mode.task == 'single_file': + cp '$mode.input' input.laz && + Rscript /src/run.R + --dataset-path ./input.laz + --output-dir ./ + --method single_file + --min-density '$mode.min_density' + #if $mode.removeable_attributes: + --removeable_attributes '$mode.removeable_attributes' + #end if + #else: + mkdir -p ./input_files && + #for $f in $mode.input_collection + cp '$f' ./input_files/'${f.element_identifier}.laz' && + #end for + Rscript /src/run.R + --dataset-path ./input_files/ + --output-dir ./ + --method collection + #end if + ]]></command> + <inputs> - <param name="input" type="data" format="laz" label="Point Cloud Dataset" help="LAZ point cloud to process"/> - <param name="min_density" type="integer" value="500" min="1" max="10000" label="Minimum Point Density (points/m²)" help="Minimum required point density in points per square meter. Default: 500 for TLS data. Use lower values (e.g., 10-50) for ALS data."/> + <conditional name="mode"> + <param name="task" type="select" label="Mode"> + <option value="single_file">Single File Standardization</option> + <option value="collection">Collection Validation</option> + </param> + <when value="single_file"> + <param name="input" type="data" format="laz" label="Point Cloud File" + help="LAS/LAZ point cloud file to standardize (CRS validation, density check, format normalization)"/> + <param argument="--min-density" type="integer" min="1" max="10000" value="10" + label="Minimum Point Density" + help="Minimum acceptable point density in points per square meter. Default: 10 pts/m²"/> + <param argument="--removeable_attributes" type="text" value="" optional="true" + label="Attributes to Remove" + help="Space-separated list of attribute names to remove (e.g., 'Intensity UserData'). Leave empty for auto-detection."/> + </when> + <when value="collection"> + <param name="input_collection" type="data" format="laz" multiple="true" label="Point Cloud Collection" + help="Multiple LAZ/LAS files to validate for consistency (CRS homogeneity, attribute consistency, overlaps)"/> + </when> + </conditional> </inputs> <outputs> - <data name="pc_standardized" format="laz" label="Standardized Point Cloud"/> + <data name="pc_standardized" format="laz" label="standardized" from_work_dir="input.laz"> + <filter>mode['task'] == "single_file"</filter> + </data> + <data name="metadata_json" format="json" label="metadata" from_work_dir="input.json"> + <filter>mode['task'] == "single_file"</filter> + </data> + <data name="convex_hull" format="geojson" label="convex_hull" from_work_dir="input_convex_hull_wgs84.GeoJSON"> + <filter>mode['task'] == "single_file"</filter> + </data> + <data name="collection_summary" format="json" label="collection_summary" from_work_dir="collection_summary.json"> + <filter>mode['task'] == "collection"</filter> + </data> </outputs> <tests> - <test> - <param name="input" value="mikro.laz" ftype="laz"/> - <param name="min_density" value="10"/> - <output name="pc_standardized"> + <test expect_num_outputs="3"> + <conditional name="mode"> + <param name="task" value="single_file"/> + <param name="input" value="mikro.laz" ftype="laz"/> + <param name="min_density" value="10"/> + </conditional> + <output name="pc_standardized" ftype="laz"> + <assert_contents> + <has_size min="1000"/> + </assert_contents> + </output> + <output name="convex_hull" ftype="geojson"> <assert_contents> - <has_size value="100000" delta="50000"/> + <has_json_property_with_text property="type" text="FeatureCollection"/> + </assert_contents> + </output> + <output name="metadata_json" ftype="json"> + <assert_contents> + <has_text text='"point_count":[12917]'/> + <has_text text='"standardized":[true]'/> + </assert_contents> + </output> + </test> + <test expect_num_outputs="1"> + <conditional name="mode"> + <param name="task" value="collection"/> + <param name="input_collection" value="mikro.laz,mikro2.laz" ftype="laz"/> + </conditional> + <output name="collection_summary" ftype="json"> + <assert_contents> + <has_json_property_with_value property="n_tiles" value="2"/> + <has_json_property_with_value property="homogeneous_crs" value="true"/> + <has_json_property_with_value property="homogeneous_attribute_names" value="true"/> </assert_contents> </output> </test> </tests> - <help> - **What it does** + + <help><![CDATA[ +**What it does** -This tool performs a series of checks and standardizations on a LAS/LAZ point cloud file. It checks: +This tool supports two modes: -1. **Basic LAS Validation** - - Validates the object using las_check() - - Ensures the file has at least 100 points +**Single File Mode** (standardization): +Standardizes a single LAS/LAZ file: -2. **Bounding Box Consistency** - - Updates header if bounding box doesn't match points - - Validates spatial extent (all dimensions > 1 meter) - - Checks Z range is plausible (-100 to 5500 meters) +1. **LAS Validation**: Runs ``las_check()`` and fixes header issues +2. **Bounding Box**: Validates and corrects header bounding box +3. **Point Density**: Checks density meets minimum threshold +4. **CRS Validation**: Verifies CRS is defined and transformable to EPSG:4978 +5. **Land Check**: Confirms centroid is on land (using Natural Earth data) +6. **Format Normalization**: Downgrades Point Data Format to ≤7 for compatibility +7. **Attribute Cleanup**: Optionally removes specified attributes -3. **Point Density Check** - - Calculates point density using convex hull - - Requires minimum point density (configurable, default: 500 points/m² for TLS) +**Outputs (single file mode):** +- Standardized ``.laz`` file +- Metadata JSON with pre/post standardization info +- Convex hull GeoJSON in WGS84 -4. **Extra Byte Data Type Check** - - Validates extra byte attribute data types - - Corrects mismatches if found +**Collection Mode** (validation): +Validates consistency of multiple LAS/LAZ files: -5. **CRS Validation** - - Ensures CRS is specified - - Validates transformation to EPSG:3857 +- **CRS Homogeneity**: Checks if all files share the same coordinate reference system +- **Attribute Consistency**: Verifies attribute names and types across files +- **Tile Geometry**: Detects overlaps and gaps between tiles +- **Global Statistics**: Computes aggregated statistics across all files +- **Removeable Attributes**: Identifies attributes that are all-NA or constant-zero -6. **Point Data Format Check** - - Downgrades format to 7 if necessary - - Preserves NIR channel as extra attribute +**Outputs (collection mode):** +- ``collection_summary.json`` containing collection-level checks and flags, per-file metadata (CRS, attributes, point counts, convex hulls), and suggested removeable attributes for standardization + +**Workflow Usage** -7. **Land Coverage Validation** - - Validates centroid is on land using Natural Earth data +For collection-based workflows: +1. Run this tool with **Collection Validation** first to check consistency +2. Use the suggested ``removeable_attributes`` from the collection summary +3. Then run this tool with **Single File Standardization** (Galaxy maps over collection automatically) for standardization -8. **Output Writing** - - Writes standardized LAZ file with Point Format ≤ 7 - </help> + ]]></help> + <creator> <person name="Julian Frey" email="julian.frey@wwd.uni-freiburg.de" url="https://orcid.org/0000-0001-7895-702X"/> <person name="Janusch Vajna-Jehle" email="janusch.jehle@geosense.uni-freiburg.de" url="https://orcid.org/0009-0002-0034-9387"/> <person name="Kilian Gerberding" email="kilian.gerberding@geosense.uni-freiburg.de" url="https://orcid.org/0009-0002-5001-2571"/> + <person name="Mirko Mälicke" identifier="0000-0002-0424-2651"/> <organization name="3Dtrees-Team, University of Freiburg" url="https://github.com/3dTrees-earth"/> </creator> + <citations> <citation type="bibtex"> @misc{3dtrees_standard, title = {3D Trees Standardization}, author = {3D Trees Project}, year = {2025}}
