SelectionCollection::Impl::Impl(gmx_ana_poscalc_coll_t *pcc) : _options("selection", "Common selection control"), _debugLevel(0), _grps(NULL) { _sc.root = NULL; _sc.nvars = 0; _sc.varstrs = NULL; _sc.top = NULL; gmx_ana_index_clear(&_sc.gall); _sc.pcc = pcc; _sc.mempool = NULL; _sc.symtab = NULL; // TODO: This is not exception-safe if any called function throws. if (_sc.pcc == NULL) { int rc = gmx_ana_poscalc_coll_create(&_sc.pcc); if (rc != 0) { // TODO: A more reasonable error GMX_THROW(InternalError("Failed to create position calculation collection")); } _flags.set(Impl::efOwnPositionCollection); } _gmx_sel_symtab_create(&_sc.symtab); gmx_ana_selmethod_register_defaults(_sc.symtab); }
/*! * \param[out] data Trajectory analysis data structure poitner to initialize. * \param[in] flags Combination of flags (see \ref analysis_flags). * \returns 0 on success. */ int gmx_ana_traj_create(gmx_ana_traj_t **data, unsigned long flags) { gmx_ana_traj_t *d; int rc; snew(d, 1); d->nrefgrps = 0; d->nanagrps = 1; d->frflags = TRX_NEED_X; d->bRmPBC = TRUE; d->bPBC = TRUE; d->trjfile = NULL; d->topfile = NULL; d->ndxfile = NULL; d->selfile = NULL; d->selection = NULL; d->top = NULL; d->bTop = FALSE; d->xtop = NULL; d->ePBC = -1; d->fr = NULL; d->nframes = 0; d->ngrps = 0; d->sel = NULL; d->grpnames = NULL; d->flags = flags; d->topfile_notnull = NULL; rc = gmx_ana_poscalc_coll_create(&d->pcc); if (rc != 0) { sfree(d); *data = NULL; return rc; } rc = gmx_ana_selcollection_create(&d->sc, d->pcc); if (rc != 0) { gmx_ana_poscalc_coll_free(d->pcc); sfree(d); *data = NULL; return rc; } d->status = -1; *data = d; return 0; }