Second of the four co-routines which takes a collection of siblings, grows the tree for each, and appends them side by side into a single tree.
Arguments
- idx
Indexes of the subjects
- dadx
Indexes of the fathers
- momx
Indexes of the mothers
- level
Vector of the level of each subject
- horder
A named numeric vector with one element per subject in the Pedigree. It determines the relative horizontal order of subjects within a sibship, as well as the relative order of processing for the founder couples. (For this latter, the female founders are ordered as though they were sisters). The names of the vector should be the individual identifiers.
- packed
Should the Pedigree be compressed. (i.e. allow diagonal lines connecting parents to children in order to have a smaller overall width for the plot.)
- spouselist
Matrix of spouses with 4 columns:
1
: husband index2
: wife index3
: husband anchor4
: wife anchor
Value
A list containing the elements to plot the Pedigree. It contains a set of matrices along with the spouselist matrix. The latter has marriages removed as they are processed.
n
: A vector giving the number of subjects on each horizonal level of the plotnid
: A matrix with one row for each level, giving the numeric id of each subject plotted. (A value of17
means the 17th subject in the Pedigree).pos
: A matrix giving the horizontal position of each plot pointfam
: A matrix giving the family id of each plot point. A value of3
would mean that the two subjects in positions 3 and 4, in the row above, are this subject's parents.spouselist
: Spouse matrix with anchors informations
Details
The input arguments are the same as those to alignped1()
with the
exception that idx will be a vector. This routine does nothing
to the spouselist matrix, but needs to pass it down the tree and back
since one of the routines called by alignped2()
might change the matrix.
The code below has one non-obvious special case. Suppose that two sibs marry.
When the first sib is processed by alignped1
then both partners
(and any children) will be added to the rval structure below.
When the second sib is processed they will come back as a 1 element tree
(the marriage will no longer be on the spouselist),
which should be added onto rval.
The rule thus is to not add any 1 element tree whose value
(which must be idx[i]
is already in the rval structure for this level.
Examples
data(sampleped)
ped <- Pedigree(sampleped)
align(ped)
#> $`1`
#> $`1`$n
#> [1] 2 10 16 14
#>
#> $`1`$nid
#> [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14]
#> [1,] 35 36 0 0 0 0 0 0 0 0 0 0 0 0
#> [2,] 1 2 3 4 37 38 5 6 7 8 0 0 0 0
#> [3,] 9 10 11 12 14 39 40 41 14 15 12 18 17 16
#> [4,] 21 22 23 24 27 28 25 26 29 30 31 32 33 34
#> [,15] [,16]
#> [1,] 0 0
#> [2,] 0 0
#> [3,] 19 20
#> [4,] 0 0
#>
#> $`1`$pos
#> [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13]
#> [1,] 3.8 4.8 0.0 0.0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
#> [2,] 0.0 1.0 2.8 3.8 4.80 5.80 11.25 12.25 14.01 15.01 0.00 0.00 0.00
#> [3,] 0.0 1.0 2.0 3.0 4.00 5.00 6.00 7.00 8.00 9.00 10.00 11.00 12.00
#> [4,] 0.0 1.0 2.0 3.0 6.01 7.01 8.01 9.01 10.01 11.01 12.01 13.01 14.01
#> [,14] [,15] [,16]
#> [1,] 0.00 0 0
#> [2,] 0.00 0 0
#> [3,] 13.00 14 15
#> [4,] 15.01 0 0
#>
#> $`1`$fam
#> [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14]
#> [1,] 0 0 0 0 0 0 0 0 0 0 0 0 0 0
#> [2,] 0 0 1 0 0 1 0 0 0 0 0 0 0 0
#> [3,] 1 3 3 3 3 5 5 5 0 7 0 7 0 7
#> [4,] 1 1 1 1 9 9 11 11 13 15 15 15 15 15
#> [,15] [,16]
#> [1,] 0 0
#> [2,] 0 0
#> [3,] 7 9
#> [4,] 0 0
#>
#> $`1`$spouse
#> [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14]
#> [1,] 1 0 0 0 0 0 0 0 0 0 0 0 0 0
#> [2,] 1 0 1 0 1 0 1 0 1 0 0 0 0 0
#> [3,] 1 0 0 0 0 0 0 0 1 0 1 0 1 0
#> [4,] 0 0 0 0 0 0 0 0 0 0 0 0 0 0
#> [,15] [,16]
#> [1,] 0 0
#> [2,] 0 0
#> [3,] 1 0
#> [4,] 0 0
#>
#>
#> $`2`
#> $`2`$n
#> [1] 2 7 5
#>
#> $`2`$nid
#> [,1] [,2] [,3] [,4] [,5] [,6] [,7]
#> [1,] 1 2 0 0 0 0 0
#> [2,] 3 4 5 6 7 9 8
#> [3,] 10 11 12 13 14 0 0
#>
#> $`2`$pos
#> [,1] [,2] [,3] [,4] [,5] [,6] [,7]
#> [1,] 2.7 3.7 0.0 0.0 0.0 0 0
#> [2,] 0.0 1.0 2.0 3.0 4.0 5 6
#> [3,] 0.0 1.0 4.5 5.5 6.5 0 0
#>
#> $`2`$fam
#> [,1] [,2] [,3] [,4] [,5] [,6] [,7]
#> [1,] 0 0 0 0 0 0 0
#> [2,] 0 1 1 1 1 0 1
#> [3,] 1 1 6 6 6 0 0
#>
#> $`2`$spouse
#> [,1] [,2] [,3] [,4] [,5] [,6] [,7]
#> [1,] 1 0 0 0 0 0 0
#> [2,] 1 0 0 0 0 1 0
#> [3,] 0 0 0 0 0 0 0
#>
#>