Chain *newChain(Config *cfg){ /* host */ int n, g, N, G, *grp; count_t *y; num_t tmp; Chain *a; chdir(cfg->cwd); y = readData(cfg); N = cfg->N; G = cfg->G; if(y == NULL) return NULL; grp = readGrp(cfg); if(grp == NULL){ free(y); return NULL; } chdir(cfg->outDir); if(cfg->verbose) printf("Allocating chain object.\n"); a = allocChain(cfg); /* data and configuration info */ a->M = cfg->M; a->N = cfg->N; a->G = cfg->G; a->burnin = cfg->burnin; for(n = 0; n < cfg->N; ++n){ a->grp[n] = grp[n]; tmp = 0; for(g = 0; g < cfg->G; ++g){ a->y[iG(n, g)] = y[iG(n, g)]; tmp += y[iG(n, g)]; } a->yMeanG[n] = tmp / cfg->G; } /* choices of priors */ a->phiPrior = cfg->phiPrior; a->alpPrior = cfg->alpPrior; a->delPrior = cfg->delPrior; /* initialization constants */ a->sigC0 = cfg->sigC0; a->d0 = cfg->d0; a->aTau = cfg->aTau; a->aAlp = cfg->aAlp; a->aDel = cfg->aDel; a->bTau = cfg->bTau; a->bAlp = cfg->bAlp; a->bDel = cfg->bDel; a->gamPhi = cfg->gamPhi; a->gamAlp = cfg->gamAlp; a->gamDel = cfg->gamDel; a->sigPhi0 = cfg->sigPhi0; a->sigAlp0 = cfg->sigAlp0; a->sigDel0 = cfg->sigDel0; /* hyperparameters */ a->sigC = cfg->sigC; a->d = cfg->d; a->tau = cfg->tau; a->thePhi = cfg->thePhi; a->theAlp = cfg->theAlp; a->theDel = cfg->theDel; a->sigPhi = cfg->sigPhi; a->sigAlp = cfg->sigAlp; a->sigDel = cfg->sigDel; a->piAlp = cfg->piAlp; a->piDel = cfg->piDel; /* choices to hold hyperparameters constant */ a->constSigC = cfg->constSigC; a->constD = cfg->constD; a->constTau = cfg->constTau; a->constThePhi = cfg->constThePhi; a->constTheAlp = cfg->constTheAlp; a->constTheDel = cfg->constTheDel; a->constSigPhi = cfg->constSigPhi; a->constSigAlp = cfg->constSigAlp; a->constSigDel = cfg->constSigDel; a->constPiAlp = cfg->constPiAlp; a->constPiDel = cfg->constPiDel; newChain_kernel1(a); newChain_kernel2(a); free(grp); free(y); return a; }
inline Chain *newChain(void) { Chain *n = allocChain(); n->value = NULL; n->next = NULL; return n; }