# Contrast estimates do not match hand-calculated values

I'm running a binomial logistic regression with one categorical predictor variable. I'm trying to come to terms with the meaning of the estimates returned, and I think I'm getting there, but I don't understand from where {multcomp} derived its estimates for my planned contrast:

Generalized linear mixed model fit by maximum likelihood (Laplace Approximation) ['glmerMod']
Family: binomial  ( logit )
Formula: survival ~ tree + (1 | tree/rep)
Data: NPV01Datacorr.data
Control: glmerControl(optimizer = "bobyqa")

...

Fixed effects:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -0.09531    0.17837  -0.534  0.59311
treeBC3F3    0.84765    0.26019   3.258  0.00112 **
treeD54     -0.40113    0.24606  -1.630  0.10305
treeD58     -0.76691    0.26314  -2.914  0.00356 **
treeEllis1  -0.38426    0.25090  -1.532  0.12563
treeQing     0.53357    0.24338   2.192  0.02836 *
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1


The levels of "tree" are

levels(NPV01Datacorr.data\$tree)
[1] "Ash"    "BC3F3"  "D54"    "D58"    "Ellis1" "Qing"


Contrasts:

contrastmatrix <- rbind(c(-0.5, 0, 0.5, 0.5, -0.5, 0), c(0, 0, 0.5, 0.5, -1, 0))
rownames(contrastmatrix) <- c("Transgenic - Wildtype", "Transgenic - Isogenic")
summary(glht(NPVcorrbinary.glmer, linfct=mcp(tree=contrastmatrix)))

Simultaneous Tests for General Linear Hypotheses

Multiple Comparisons of Means: User-defined Contrasts

Linear Hypotheses:
Estimate Std. Error z value Pr(>|z|)
Transgenic - Wildtype == 0  -0.3919     0.1797  -2.181   0.0459 *
Transgenic - Isogenic == 0  -0.1998     0.2183  -0.915   0.4866


I thought the estimate (-0.3919) could be calculated as:

(D54 estimate(0.5)) + (D58 estimate(0.5)) + (Intercept estimate(-0.5)) + (Ellis1 estimate(-0.5))
(-0.40113(0.5)) + (-0.76691(0.5)) + (-0.9531(-0.5)) + (-0.38426(-0.5))


That gives me -0.344235 for an estimate rather than the -0.3919 given by multcomp. What's going on?