Updates the QSM cylinder data in preparation for radii correction
Details
Updates and verifies parent-child cylinder relationships and calculates new variables and metrics found throughout the supported QSM software. This function is required to run the rest of the rTwig functions.
Examples
## TreeQSM Processing Chain
file <- system.file("extdata/QSM.mat", package = "rTwig")
qsm <- import_qsm(file)
#> Importing TreeQSM
cylinder <- qsm$cylinder
cylinder <- update_cylinders(cylinder)
#> Updating Cylinder Ordering
#> Calculating Total Children
#> Building Cylinder Network
#> Caching Network
#> Verifying Topology
#> Calculating Growth Length
#> Calculating Reverse Branch Order
#> Calculating Branch Segments
#> Calculating Alternate Branch Numbers
#> Calculating Path Metrics
str(cylinder)
#> Classes ‘tidytable’, ‘tbl’, ‘data.table’ and 'data.frame': 1136 obs. of 33 variables:
#> $ radius : num 0.0465 0.0454 0.0442 0.0437 0.0429 ...
#> $ length : num 0.09392 0.07216 0.06654 0.00938 0.06795 ...
#> $ start.x : num 0.768 0.768 0.768 0.769 0.769 ...
#> $ start.y : num -16.4 -16.4 -16.4 -16.3 -16.3 ...
#> $ start.z : num 254 254 254 254 254 ...
#> $ axis.x : num 0.00995 -0.0111 0.01364 0.01571 0.01449 ...
#> $ axis.y : num 0.0912 0.0391 0.0367 0.0271 0.0267 ...
#> $ axis.z : num 0.996 0.999 0.999 1 1 ...
#> $ end.x : num 0.769 0.768 0.769 0.769 0.77 ...
#> $ end.y : num -16.4 -16.4 -16.3 -16.3 -16.3 ...
#> $ end.z : num 254 254 254 254 254 ...
#> $ added : num 0 0 0 0 0 0 0 0 0 0 ...
#> $ BranchOrder : int 0 0 0 0 0 0 0 0 0 0 ...
#> $ reverseBranchOrder : num 20 20 20 20 20 20 20 20 20 20 ...
#> $ PositionInBranch : int 1 2 3 4 5 6 7 8 9 10 ...
#> $ segment : int 1 1 1 1 1 1 1 1 1 1 ...
#> $ parentSegment : int 0 0 0 0 0 0 0 0 0 0 ...
#> $ mad : num 0.00072 0.000538 0.000523 0.000335 0.000438 ...
#> $ SurfCov : num 0.875 1 1 1 1 1 1 1 1 1 ...
#> $ UnmodRadius : num 0.0465 0.0454 0.0442 0.0437 0.0429 ...
#> $ OldRadius : num 0.0465 0.0454 0.0442 0.0437 0.0429 ...
#> $ growthLength : num 32.8 32.7 32.6 32.6 32.6 ...
#> $ branch : int 1 1 1 1 1 1 1 1 1 1 ...
#> $ branch_alt : int 0 0 0 0 0 0 0 0 0 0 ...
#> $ parent : num 0 1 2 3 4 5 6 7 8 9 ...
#> $ extension : int 1 2 3 4 5 6 7 8 9 10 ...
#> $ totalChildren : int 1 1 1 1 1 1 1 1 1 1 ...
#> $ index : int 1 2 3 4 5 6 7 8 9 10 ...
#> $ distanceFromBase : num 0 0.0722 0.1387 0.1481 0.216 ...
#> $ distanceToTwig : num 3.4 3.31 3.24 3.17 3.16 ...
#> $ reversePipeAreaBranchorder : int 82 82 82 82 82 82 82 82 82 82 ...
#> $ reversePipeRadiusBranchorder: num 9.06 9.06 9.06 9.06 9.06 ...
#> $ vesselVolume : num 279 271 266 260 259 ...
#> - attr(*, ".internal.selfref")=<externalptr>
## SimpleForest Processing Chain
file <- system.file("extdata/QSM.csv", package = "rTwig")
cylinder <- read.csv(file)
cylinder <- update_cylinders(cylinder)
#> Finding Branches
#> Calculating Total Children
#> Building Cylinder Network
#> Caching Network
#> Verifying Topology
#> Calculating Path Metrics
str(cylinder)
#> Classes ‘tidytable’, ‘tbl’, ‘data.table’ and 'data.frame': 1149 obs. of 30 variables:
#> $ ID : int 1 2 3 4 5 6 7 8 9 10 ...
#> $ parentID : num 0 1 2 3 4 5 6 7 8 9 ...
#> $ startX : num 0.761 0.759 0.771 0.768 0.765 ...
#> $ startY : num -16.4 -16.4 -16.4 -16.3 -16.4 ...
#> $ startZ : num 254 254 254 254 254 ...
#> $ endX : num 0.759 0.771 0.768 0.765 0.769 ...
#> $ endY : num -16.4 -16.4 -16.3 -16.4 -16.4 ...
#> $ endZ : num 254 254 254 254 254 ...
#> $ axisX : num -0.0286 0.2148 -0.0473 -0.0498 0.0678 ...
#> $ axisY : num -0.078889 0.163918 0.03933 -0.011114 -0.000265 ...
#> $ axisZ : num 0.996 0.963 0.998 0.999 0.998 ...
#> $ radius : num 0.0472 0.0479 0.0469 0.0467 0.0453 ...
#> $ length : num 0.0497 0.0529 0.0535 0.0525 0.0528 ...
#> $ growthLength : num 31.4 31.4 31.3 31.3 31.2 ...
#> $ averagePointDistance : num 0.00589 0.00378 0.00205 0.00246 0.00251 ...
#> $ segmentID : num 1 1 1 1 1 1 1 1 1 1 ...
#> $ parentSegmentID : num 0 0 0 0 0 0 0 0 0 0 ...
#> $ branchOrder : int 0 0 0 0 0 0 0 0 0 0 ...
#> $ reverseBranchOrder : int 18 18 18 18 18 18 18 18 18 18 ...
#> $ UnmodRadius : num 0.0472 0.0479 0.0469 0.0467 0.0453 ...
#> $ branch_alt : num 0 0 0 0 0 0 0 0 0 0 ...
#> $ branchID : int 1 1 1 1 1 1 1 1 1 1 ...
#> $ positionInBranch : int 1 2 3 4 5 6 7 8 9 10 ...
#> $ totalChildren : int 1 1 1 1 1 1 1 1 1 1 ...
#> $ index : int 1 2 3 4 5 6 7 8 9 10 ...
#> $ distanceFromBase : num 0 0.0529 0.1065 0.1589 0.2117 ...
#> $ distanceToTwig : num 3.43 3.38 3.33 3.27 3.22 ...
#> $ reversePipeAreaBranchorder : int 69 69 69 69 69 69 69 69 69 69 ...
#> $ reversePipeRadiusBranchorder: num 8.31 8.31 8.31 8.31 8.31 ...
#> $ vesselVolume : num 237 233 229 226 222 ...
#> - attr(*, ".internal.selfref")=<externalptr>
## aRchi Processing Chain
file <- system.file("extdata/QSM2.csv", package = "rTwig")
cylinder <- read.csv(file)
cylinder <- update_cylinders(cylinder)
#> Updating Cylinder Ordering
#> Finding Branches
#> Calculating Total Children
#> Building Cylinder Network
#> Caching Network
#> Verifying Topology
#> Calculating Growth Length
#> Calculating Reverse Branch Order
#> Calculating Branch Segments
#> Calculating Alternate Branch Numbers
#> Calculating Path Metrics
str(cylinder)
#> Classes ‘tidytable’, ‘tbl’, ‘data.table’ and 'data.frame': 1231 obs. of 34 variables:
#> $ startX : num 0.763 0.77 0.77 0.763 0.764 ...
#> $ startY : num -16.4 -16.4 -16.4 -16.4 -16.3 ...
#> $ startZ : num 254 254 254 254 254 ...
#> $ endX : num 0.77 0.77 0.763 0.764 0.766 ...
#> $ endY : num -16.4 -16.4 -16.4 -16.3 -16.4 ...
#> $ endZ : num 254 254 254 254 254 ...
#> $ axisX : num 0.1307 -0.0172 -0.2653 0.0294 0.1055 ...
#> $ axisY : num 0.1531 -0.1311 0.0981 0.1203 -0.2048 ...
#> $ axisZ : num 0.98 0.991 0.959 0.992 0.973 ...
#> $ extension_ID : int 2 3 4 5 6 7 8 9 10 11 ...
#> $ radius_cyl : num 0.0428 0.0428 0.0428 0.0428 0.0428 ...
#> $ length : num 0.0579 0.0269 0.0258 0.0245 0.0256 ...
#> $ volume : num 0.000333 0.000155 0.000149 0.000141 0.000147 ...
#> $ axis_ID : int 1 1 1 1 1 1 1 1 1 1 ...
#> $ segment_ID : int 44 44 44 44 44 44 44 44 44 44 ...
#> $ node_ID : int 0 0 0 0 0 0 0 0 0 0 ...
#> $ branching_order : num 0 0 0 0 0 0 0 0 0 0 ...
#> $ cyl_ID : int 1 2 3 4 5 6 7 8 9 10 ...
#> $ parent_ID : num 0 1 2 3 4 5 6 7 8 9 ...
#> $ UnmodRadius : num 0.0428 0.0428 0.0428 0.0428 0.0428 ...
#> $ branch_ID : int 1 1 1 1 1 1 1 1 1 1 ...
#> $ positionInBranch : int 1 2 3 4 5 6 7 8 9 10 ...
#> $ totalChildren : int 1 1 1 1 1 1 1 1 1 1 ...
#> $ growthLength : num 34.2 34.2 34.2 34.1 34.1 ...
#> $ reverseBranchOrder : num 20 20 20 20 20 20 20 20 20 20 ...
#> $ segment : int 1 1 1 1 1 1 1 1 1 1 ...
#> $ parentSegment : int 0 0 0 0 0 0 0 0 0 0 ...
#> $ branch_alt : int 0 0 0 0 0 0 0 0 0 0 ...
#> $ index : int 1 2 3 4 5 6 7 8 9 10 ...
#> $ distanceFromBase : num 0 0.0269 0.0527 0.0772 0.1027 ...
#> $ distanceToTwig : num 3.44 3.38 3.36 3.33 3.3 ...
#> $ reversePipeAreaBranchorder : int 121 121 121 121 121 121 121 121 121 121 ...
#> $ reversePipeRadiusBranchorder: num 11 11 11 11 11 11 11 11 11 11 ...
#> $ vesselVolume : num 416 409 406 403 400 ...
#> - attr(*, ".internal.selfref")=<externalptr>