/* Authors Martin Schlather, martin.schlather@math.uni-goettingen.de library for simulation of random fields -- get key strukture Copyright (C) 2001 -- 2011 Martin Schlather, This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. RO This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ //#include #include #include //#include #include #include #include "RF.h" #include //#include "CovFcts.h" //#include //#include SEXP Logi(bool* V, int n, int max, long *mem) { int i; SEXP dummy; if (V==NULL) return allocVector(VECSXP, 0); (*mem) += n * sizeof(bool); if (n>max) return TooLarge(&n, 1); PROTECT(dummy=allocVector(LGLSXP, n)); for (i=0; imax) return TooLarge(&n, 1); PROTECT(dummy=allocVector(REALSXP, n)); for (i=0; imax) return TooLarge(&n, 1); PROTECT(dummy=allocVector(REALSXP, n)); for (i=0; imax) return TooLarge(&n, 1); PROTECT(dummy=allocVector(INTSXP, n)); for (i=0; imax) return TooLarge(&n, 1); PROTECT(dummy=allocVector(INTSXP, n)); for (i=0; imax) { int nn[2]; nn[0] = row; nn[1] = col; return TooLarge(nn, 2); } SEXP dummy; PROTECT(dummy=allocMatrix(REALSXP, row, col)); for (i=0; imax) { int nn[2]; nn[0] = row; nn[1] = col; return TooLarge(nn, 2); } SEXP dummy; PROTECT(dummy=allocMatrix(REALSXP, row, col)); for (i=0; imax) { int nn[2]; nn[0] = row; nn[1] = col; return TooLarge(nn, 2); } SEXP dummy; PROTECT(dummy=allocMatrix(INTSXP, row, col)); for (i=0; imax) { int nn[3]; nn[0] = row; nn[1] = col; nn[2] = depth; return TooLarge(nn, 3); } SEXP dummy; PROTECT(dummy=alloc3DArray(REALSXP, depth, row, col)); for(j=0; j= LISTOF){ dummy = allocVector(VECSXP, nrow); listoftype *q = (listoftype *) p; for (i=0; ip[i], q->nrow[i], q->ncol[i], REALSXP, false, mem)); } } else { assert(false); } return dummy; } SEXP GetModelInfo(cov_model *cov, int level, bool gatter, long *mem) { #define ninfo0 3 #define ninfo1 4 #define ninfo2 4 #define ninfo3 11 // printf("1st gmi %s\n", CovList[cov->nr].name); if (cov == NULL) return allocVector(VECSXP, 0); SEXP model, submodels, nameMvec, param, pnames; int i, j, nmodelinfo, k = 0; cov_fct *C = CovList + cov->nr; // printf("2nd gmi\n"); if (!gatter && cov->nr >= GATTER && cov->nr <= LASTGATTER) return GetModelInfo(cov->sub[0], level, gatter, mem); // printf("3rd gmi\n"); nmodelinfo = ninfo0; switch (level) { case 3 : nmodelinfo += ninfo3; case 2 : nmodelinfo += ninfo2; case 1 : nmodelinfo += ninfo1; } if (cov->nsub==0) nmodelinfo--; PROTECT(model = allocVector(VECSXP, nmodelinfo)); PROTECT(nameMvec = allocVector(STRSXP, nmodelinfo)); SET_STRING_ELT(nameMvec, k, mkChar("name")); cov_fct *CC = CovList + cov->nr; while(strncmp(CC->name, InternalName, strlen(InternalName)) ==0) CC--; SET_VECTOR_ELT(model, k++, mkString(CC->name)); SET_STRING_ELT(nameMvec, k, mkChar("param")); int notnull = 0; for (i=0; ikappas; i++) { if (cov->nrow[i]>0 && cov->ncol[i]>0) notnull++; } PROTECT(param = allocVector(VECSXP, notnull)); PROTECT(pnames = allocVector(STRSXP, notnull)); for (j=i=0; ikappas; i++) { if (cov->nrow[i]>0 && cov->ncol[i]>0) { SET_STRING_ELT(pnames, j, mkChar(C->kappanames[i])); SET_VECTOR_ELT(param, j, Param((void*) cov->p[i], cov->nrow[i], cov->ncol[i], C->kappatype[i], true, mem)); j++; } } setAttrib(param, R_NamesSymbol, pnames); // printf("gmi !\n"); SET_VECTOR_ELT(model, k++, param); UNPROTECT(2); // goto END; // printf("start GMI 1 %d\n", level); if (level>=1) { SET_STRING_ELT(nameMvec, k, mkChar("covnr")); SET_VECTOR_ELT(model, k++, ScalarInteger(cov->nr)); SET_STRING_ELT(nameMvec, k, mkChar("vdim")); SET_VECTOR_ELT(model, k++, ScalarInteger(cov->vdim)); // SET_STRING_ELT(nameMvec, k, mkChar("naturalscaling")); // SET_VECTOR_ELT(model, k++, ScalarInteger(cov->naturalscaling)); SET_STRING_ELT(nameMvec, k, mkChar("tsdim")); SET_VECTOR_ELT(model, k++, ScalarInteger(cov->tsdim)); SET_STRING_ELT(nameMvec, k, mkChar("xdim")); SET_VECTOR_ELT(model, k++, ScalarInteger(cov->xdim)); } // printf("GMI 2\n"); if (level>=2) { SET_STRING_ELT(nameMvec, k, mkChar("statIn")); SET_VECTOR_ELT(model, k++, ScalarInteger(cov->statIn)); SET_STRING_ELT(nameMvec, k, mkChar("isoIn")); SET_VECTOR_ELT(model, k++, ScalarInteger(cov->isoIn)); SET_STRING_ELT(nameMvec, k, mkChar("internalq")); SET_VECTOR_ELT(model, k++, Num(cov->q, cov->qlen, MAX_INT, mem)); SET_STRING_ELT(nameMvec, k, mkChar("pref")); SET_VECTOR_ELT(model, k++, Int(cov->pref, Nothing + 1, MAXINT, mem)); } // printf("GMI 3\n"); if (level>=3) { SET_STRING_ELT(nameMvec, k, mkChar("maxdim")); SET_VECTOR_ELT(model, k++, ScalarInteger(cov->maxdim)); SET_STRING_ELT(nameMvec, k, mkChar("derivatives")); SET_VECTOR_ELT(model, k++, ScalarInteger(cov->derivatives)); SET_STRING_ELT(nameMvec, k, mkChar("normalmix")); SET_VECTOR_ELT(model, k++, ScalarLogical(cov->normalmix)); SET_STRING_ELT(nameMvec, k, mkChar("anyNAdown")); SET_VECTOR_ELT(model, k++, ScalarInteger((int) cov->anyNAdown)); SET_STRING_ELT(nameMvec, k, mkChar("anyNAscaleup")); SET_VECTOR_ELT(model, k++, ScalarInteger((int) cov->anyNAscaleup)); SET_STRING_ELT(nameMvec, k, mkChar("MLE")); SET_VECTOR_ELT(model, k++, ScalarLogical(cov->MLE != NULL)); SET_STRING_ELT(nameMvec, k, mkChar("finiterange")); SET_VECTOR_ELT(model, k++, ScalarLogical(cov->finiterange)); SET_STRING_ELT(nameMvec, k, mkChar("diag")); SET_VECTOR_ELT(model, k++, ScalarLogical(cov->diag)); // SET_STRING_ELT(nameMvec, k, mkChar("quasidiag")); // SET_VECTOR_ELT(model, k++, ScalarLogical(cov->quasidiag)); SET_STRING_ELT(nameMvec, k, mkChar("semisep.last")); SET_VECTOR_ELT(model, k++, ScalarLogical(cov->semiseparatelast)); SET_STRING_ELT(nameMvec, k, mkChar("sep.last")); SET_VECTOR_ELT(model, k++, ScalarLogical(cov->separatelast)); // SET_STRING_ELT(nameMvec, k, mkChar("idx")); // SET_VECTOR_ELT(model, k++, Int(cov->idx, cov->tsdim, MAXINT, mem)); SET_STRING_ELT(nameMvec, k, mkChar("user")); SET_VECTOR_ELT(model, k++, Int(cov->user, Nothing + 1, MAXINT, mem)); } if (cov->nsub > 0) { SET_STRING_ELT(nameMvec, k, mkChar("submodels")); // printf("gmi 1\n"); PROTECT(submodels = allocVector(VECSXP, cov->nsub)); int zaehler = 0; // printf("gmi 2\n"); for (i=0; inr].name); if (cov->sub[i] != NULL) { // printf("gmi a\n"); if (level >= 2 || cov->sub[i]->nr < GATTER || cov->sub[i]->nr > LASTGATTER) { // printf("gmi b\n"); // PrintModelInfo(cov); // printf("gmi XX %d %d %d %d\n", i, MAXSUB, level, gatter); SET_VECTOR_ELT(submodels, zaehler, GetModelInfo(cov->sub[i], level, gatter, mem)); } else { // printf("gmi c\n"); SET_VECTOR_ELT(submodels, zaehler, GetModelInfo(cov->sub[i]->sub[0], level, gatter,mem)); } if (++zaehler >= cov->nsub) break; } } SET_VECTOR_ELT(model, k++, submodels); UNPROTECT(1); // printf("return GMI\n"); } // SET_STRING_ELT(nameMvec, k, mkChar("method")); // SET_VECTOR_ELT(model, k++, mkChar(METHODNAMES[(int) cov->usermethod])); setAttrib(model, R_NamesSymbol, nameMvec); // END: assert(k==nmodelinfo); UNPROTECT(2); // model + namemodelvec return model; } SEXP GetExtModelInfo(SEXP keynr, SEXP Level, SEXP gatter) { int knr, level; long mem; knr = INTEGER(keynr)[0]; level = INTEGER(Level)[0]; if (knr>=0) { if (knr < MAXKEYS) { key_type *key; key = &(KEY[knr]); return key->cov == NULL ? allocVector(VECSXP, 0) : GetModelInfo(key->cov, level, (bool) INTEGER(gatter)[0], &mem); } } else { knr = -knr-1; if (knr < MODEL_MAX && STORED_MODEL[knr] != NULL) return GetModelInfo(STORED_MODEL[knr], level,(bool) INTEGER(gatter)[0], &mem); // 0 } return allocVector(VECSXP, 0); } #define nglobalinfo 0 SEXP GetGlobalInfo(globalparam global, long *mem) { SEXP namevec, l; int k; PROTECT(l = allocVector(VECSXP, nglobalinfo)); PROTECT(namevec = allocVector(STRSXP, nglobalinfo)); k = 0; setAttrib(l, R_NamesSymbol, namevec); assert(k == nglobalinfo); UNPROTECT(2); return l; } #define nlocinfo 10 SEXP GetLocationInfo(location_type *loc, long *mem) { if (loc == NULL) return allocVector(VECSXP, 0); const char *info[nlocinfo] = {"timespacedim", "length", "spatialdim", "spatialtotpts", "totpts", "grid", "Time", "xgr", "x", "T"}; SEXP namevec, l; int k, tsdim = loc->timespacedim, spdim = loc->spatialdim; // printf("%d %d\n", tsdim, spdim); PROTECT(l = allocVector(VECSXP, nlocinfo)); PROTECT(namevec = allocVector(STRSXP, nlocinfo)); for (k=0; klength, tsdim, MAX_INT, mem)); SET_VECTOR_ELT(l, k++, ScalarInteger(loc->spatialdim)); SET_VECTOR_ELT(l, k++, ScalarInteger((int) loc->spatialtotalpoints)); SET_VECTOR_ELT(l, k++, ScalarInteger((int) loc->totalpoints)); SET_VECTOR_ELT(l, k++, ScalarLogical(loc->grid)); SET_VECTOR_ELT(l, k++, ScalarLogical(loc->Time)); SET_VECTOR_ELT(l, k++, Mat(loc->xgr[0], loc->grid ? 3 : 0, spdim, MAX_INT, mem)); SET_VECTOR_ELT(l, k++, Mat(loc->x, loc->spatialdim, loc->grid ? 0 : loc->spatialtotalpoints, MAX_INT, mem)); SET_VECTOR_ELT(l, k++, Num(loc->T, loc->Time ? 3 : 0, MAX_INT, mem)); setAttrib(l, R_NamesSymbol, namevec); UNPROTECT(2); // l + namelvec assert(k == nlocinfo); return l; } #define ntrendinfo 5 SEXP GetTrendInfo(trend_type *trend, long *mem) { if (trend == NULL) return allocVector(VECSXP, 0); const char *info[ntrendinfo] = {"lTrendFct", "TrendModus", "TrendFct", "mean", "LinTrend"}; SEXP namevec, l; int k; PROTECT(l = allocVector(VECSXP, ntrendinfo)); PROTECT(namevec = allocVector(STRSXP, ntrendinfo)); for (k=0; klTrendFct)); SET_VECTOR_ELT(l, k++, ScalarInteger(trend->TrendModus)); SET_VECTOR_ELT(l, k++, mkString(trend->TrendFunction == NULL ? "" : trend->TrendFunction)); SET_VECTOR_ELT(l, k++, ScalarReal(trend->mean)); SET_VECTOR_ELT(l, k++, Num(trend->LinearTrend, trend->lLinTrend, MAX_INT, mem)); setAttrib(l, R_NamesSymbol, namevec); UNPROTECT(2); // l + namelvec assert(k == ntrendinfo); return l; } #define nsimuinfo 4 SEXP GetSimuInfo(simu_type *simu, long *mem) { if (simu == NULL) return allocVector(VECSXP, 0); const char *info[nsimuinfo] = {"active", "stop", "distr", "expect.simu"}; SEXP namevec, l; int k; PROTECT(l = allocVector(VECSXP, nsimuinfo)); PROTECT(namevec = allocVector(STRSXP, nsimuinfo)); for (k=0; kactive)); SET_VECTOR_ELT(l, k++, ScalarLogical(simu->stop)); SET_VECTOR_ELT(l, k++, mkString(DISTRNAMES[simu->distribution])); SET_VECTOR_ELT(l, k++, ScalarInteger(simu->expected_number_simu)); assert(k==nsimuinfo); setAttrib(l, R_NamesSymbol, namevec); UNPROTECT(2); // l + namelvec assert(k == nsimuinfo); return l; } #define nmethodinfo 14 SEXP GetMethodInfo(method_type *meth, bool ignore_active, int depth, int max, long *mem) { if (meth==NULL) { return allocVector(VECSXP, 0); } const char *methodinfo[nmethodinfo] = {"name", "compatible", "cov", "caniso","cproj", "cscale", "cvar", "matrixtype", "hanging", "space", "sptime", "S", "sub", "mem"}; SEXP namemethodvec, method, nameSvec, S, submethods; location_type *loc = meth->loc; int i, k,l, dim, level = 3, NR = -meth->nr -1; long totalpoints, dummymem, timespacedim, Time, xdim; if (meth->loc==NULL) { timespacedim = totalpoints = Time = 0; } else { totalpoints = loc->totalpoints; timespacedim = loc->timespacedim; Time = loc->Time; } if (meth->cov==NULL) { xdim = dim = 0; } else { dim = meth->cov->tsdim; xdim = meth->cov->xdim; } const char *invm[NoFurtherInversionMethod + 1] = {"Cholesky", "SVD", "None"}; PROTECT(method = allocVector(VECSXP, nmethodinfo)); PROTECT(namemethodvec = allocVector(STRSXP, nmethodinfo)); for (k=0; k= 0) { SET_VECTOR_ELT(method, l++, mkString(METHODNAMES[NR])); } else { cov_fct *CC = CovList + meth->nr; while(strcmp(CC->name, InternalName) ==0) { // printf("%s %s\n", CC->name, InternalName); CC--; } SET_VECTOR_ELT(method, l++, mkString(CC->name)); } //printf("%d %d %d %d\n", MaxMpp, ExtremalGauss, meth->nr, NR); assert(false); SET_VECTOR_ELT(method, l++, ScalarLogical(meth->compatible)); SET_VECTOR_ELT(method, l++, GetModelInfo(meth->cov, level, true, &dummymem)); SET_VECTOR_ELT(method, l++, Mat(meth->caniso, timespacedim, xdim, MAX_INT, mem)); SET_VECTOR_ELT(method, l++, Int(meth->cproj, xdim, MAX_INT, mem)); SET_VECTOR_ELT(method, l++, ScalarReal(meth->cscale)); SET_VECTOR_ELT(method, l++, ScalarReal(meth->cvar)); SET_VECTOR_ELT(method, l++, ScalarInteger(meth->type)); SET_VECTOR_ELT(method, l++, ScalarLogical(meth->hanging != NULL)); SET_VECTOR_ELT(method, l++, Num(meth->space, (dim - Time) * totalpoints, MAX_INT, mem)); SET_VECTOR_ELT(method, l++, Num(meth->sptime, dim * totalpoints, MAX_INT, mem)); // SET_VECTOR_ELT(method, l++, Mat(, dim, MAX_INT, mem)); int nS, nSlist[Forbidden + 1] = {12 /* CE */, 2 /*Cutoff*/, 2 /* Intr */, 4 /* TBM2 */, 4 /* TBM3 */, 0 /*Spectral */, 3 /* dir */, 12 /* sequ */, 0 /* Markov */, 0 /* average */, 3 /* nug */, 24 /* coin */, 4 /* hyp */, 1 /* noth */, 11 /* maxmpp */, 4 /*extremalGauss */, 1 /* Forbidden */}; assert(Forbidden == 16); k = 0; // printf("nS : %d %d %d\n", meth->S!=NULL, depth, NR); nS = (meth->S!=NULL && depth<=4 && NR >= 0) ? nSlist[NR] : 0; PROTECT(S = allocVector(VECSXP, nS)); PROTECT(nameSvec = allocVector(STRSXP, nS)); if (nS != 0) switch (NR) { case CircEmbed : { CE_storage* s; s = (CE_storage*) meth->S; int vdim = s->vdim, vdimSQ = vdim * vdim; SET_STRING_ELT(nameSvec, k, mkChar("size")); SET_VECTOR_ELT(S, k++, Int(s->m, dim, MAX_INT, mem)); SET_STRING_ELT(nameSvec, k, mkChar("trials")); SET_VECTOR_ELT(S, k++, ScalarInteger(s->trials)); SET_STRING_ELT(nameSvec, k, mkChar("next_new")); SET_VECTOR_ELT(S, k++, ScalarLogical(s->new_simulation_next)); SET_STRING_ELT(nameSvec, k, mkChar("curSimuPosition")); SET_VECTOR_ELT(S, k++, Int(s->cur_square, dim, MAX_INT, mem)); SET_STRING_ELT(nameSvec, k, mkChar("simupositions")); SET_VECTOR_ELT(S, k++, Int(s->max_squares, dim, MAX_INT, mem)); SET_STRING_ELT(nameSvec, k, mkChar("segmentLength")); { int dummy[MAXCEDIM], i; for (i=0; i< dim; i++) dummy[i] = s-> square_seg[i] / s->cumm[i]; SET_VECTOR_ELT(S, k++, Int(dummy, dim, MAX_INT, mem)); } SET_STRING_ELT(nameSvec, k, mkChar("totalsize")); SET_VECTOR_ELT(S, k++, ScalarInteger(s->mtot)); SET_STRING_ELT(nameSvec, k, mkChar("smallest.neg.real")); SET_VECTOR_ELT(S, k++, ScalarReal(s->smallestRe)); SET_STRING_ELT(nameSvec, k, mkChar("largest.abs.imag")); SET_VECTOR_ELT(S, k++, ScalarReal(s->largestAbsIm)); SET_STRING_ELT(nameSvec, k, mkChar("fft")); SET_VECTOR_ELT(S, k++, vdim == 1 ? Mat(s->c[0], 2, s->mtot, max, mem) : Array3D(s->c, vdimSQ, 2, s->mtot, max, mem)); SET_STRING_ELT(nameSvec, k, mkChar("invfft")); SET_VECTOR_ELT(S, k++, (vdim == 1 || true) ? ScalarInteger(s->mtot) : true ? Mat(s->d[0], 2, s->mtot, max, mem) : Array3D(s->d, vdimSQ, 2, s->mtot, max, mem)); SET_STRING_ELT(nameSvec, k, mkChar("positivedefinite")); SET_VECTOR_ELT(S, k++, ScalarLogical(s->positivedefinite)); } break; case CircEmbedCutoff : case CircEmbedIntrinsic : { localCE_storage* s; s = (localCE_storage*) meth->S; SET_STRING_ELT(nameSvec, k, mkChar("correctionTerms")); SET_VECTOR_ELT(S, k++, Mat((double*) s->correction, dim, dim, MAX_INT, mem)); // printf("calling form meth\n"); SET_STRING_ELT(nameSvec, k, mkChar("new")); SET_VECTOR_ELT(S, k++, InternalGetKeyInfo(&(s->key), ignore_active, depth + 1, max)); // printf("back to meth\n"); } break; case TBM2: case TBM3 : { TBM_storage* s; s = (TBM_storage*) meth->S; int* length = s->key.loc.length; // SET_STRING_ELT(nameSvec, k, mkChar("aniso")); // SET_VECTOR_ELT(S, k++, // Mat(s->aniso, dim, s->reduceddim, MAX_INT, mem)); // SET_STRING_ELT(nameSvec, k, mkChar("simugrid")); // SET_VECTOR_ELT(S, k++, ScalarLogical(s->simugrid)); // SET_STRING_ELT(nameSvec, k, mkChar("simuspatialdim")); // SET_VECTOR_ELT(S, k++, ScalarInteger(s->simuspatialdim)); SET_STRING_ELT(nameSvec, k, mkChar("ce_dim")); SET_VECTOR_ELT(S, k++, ScalarInteger(s->ce_dim)); // SET_STRING_ELT(nameSvec, k, mkChar("reduceddim")); // SET_VECTOR_ELT(S, k++, ScalarInteger(s->reduceddim)); SET_STRING_ELT(nameSvec, k, mkChar("center")); SET_VECTOR_ELT(S, k++, Num(s->center, dim - (s->ce_dim==2), MAX_INT, mem)); // SET_STRING_ELT(nameSvec, k, mkChar("x")); // SET_VECTOR_ELT(S, k++, Mat(s->x, dim, // loc->grid ? 3 : totalpoints, max, mem)); // SET_STRING_ELT(nameSvec, k, mkChar("xsimgr")); // SET_VECTOR_ELT(S, k++, Mat(s->xsimugr[0], loc->grid ? 3 : 0, // dim, MAX_INT, mem)); SET_STRING_ELT(nameSvec, k, mkChar("line")); // never change this // name; otherwise the tricky // TBM examples does not work anymore SET_VECTOR_ELT(S, k++, (s->ce_dim <= 1) ? Result(s->simuline, length[0], max, mem) : ResultMat(s->simuline, length[0], length[1], max, mem) ); SET_STRING_ELT(nameSvec, k, mkChar("new")); SET_VECTOR_ELT(S, k++, InternalGetKeyInfo(&(s->key), ignore_active, depth + 1, max)); } break; case SpectralTBM: { /* spectral_storage* s; s = (spectral_storage*) meth->S; SET_STRING_ELT(nameSvec, k, mkChar("density")); SET_VECTOR_ELT(S, k++, ScalarLogical(s->density != NULL)); SET_STRING_ELT(nameSvec, k, mkChar("sigmametro")); SET_VECTOR_ELT(S, k++, ScalarReal(s->sigma)); SET_STRING_ELT(nameSvec, k, mkChar("nmetro")); SET_VECTOR_ELT(S, k++, ScalarInteger(s->nmetro)); SET_STRING_ELT(nameSvec, k, mkChar("phistep2d")); SET_VECTOR_ELT(S, k++, ScalarReal(s->phistep2d)); SET_STRING_ELT(nameSvec, k, mkChar("phi2d")); SET_VECTOR_ELT(S, k++, ScalarReal(s->phi2d)); SET_STRING_ELT(nameSvec, k, mkChar("grid")); SET_VECTOR_ELT(S, k++, ScalarLogical(s->grid)); */ } break; case Direct : { direct_storage* s; s = (direct_storage*) meth->S; SET_STRING_ELT(nameSvec, k, mkChar("invmethod")); SET_VECTOR_ELT(S, k++, (s->method < NoFurtherInversionMethod) ? mkString(invm[s->method]) : ScalarLogical(false)); SET_STRING_ELT(nameSvec, k, mkChar("sqrtCov")); SET_VECTOR_ELT(S, k++, Mat(s->U, totalpoints, totalpoints, max, mem)); SET_STRING_ELT(nameSvec, k, mkChar("dummy")); SET_VECTOR_ELT(S, k++, Num(s->G, totalpoints + 1, max, mem)); } break; case Sequential : { sequential_storage *s; s = (sequential_storage*) meth->S; SET_STRING_ELT(nameSvec, k, mkChar("back")); SET_VECTOR_ELT(S, k++, ScalarInteger(s->back)); SET_STRING_ELT(nameSvec, k, mkChar("totpnts")); SET_VECTOR_ELT(S, k++, ScalarInteger(s->totpnts)); SET_STRING_ELT(nameSvec, k, mkChar("spatialpnts")); SET_VECTOR_ELT(S, k++, ScalarInteger(s->spatialpnts)); SET_STRING_ELT(nameSvec, k, mkChar("ntime")); SET_VECTOR_ELT(S, k++, ScalarInteger(s->ntime)); SET_STRING_ELT(nameSvec, k, mkChar("initial")); SET_VECTOR_ELT(S, k++, ScalarInteger(s->initial)); SET_STRING_ELT(nameSvec, k, mkChar("sqrtCov22")); SET_VECTOR_ELT(S, k++, Mat(s->U22, s->totpnts, s->totpnts, max, mem)); SET_STRING_ELT(nameSvec, k, mkChar("sqrtCov11")); SET_VECTOR_ELT(S, k++, Mat(s->U11, s->spatialpnts, s->spatialpnts, max, mem)); SET_STRING_ELT(nameSvec, k, mkChar("Cov21.debug")); SET_VECTOR_ELT(S, k++, Mat(s->Cov21, s->totpnts, s->spatialpnts, max, mem)); SET_STRING_ELT(nameSvec, k, mkChar("Inv22.debug")); SET_VECTOR_ELT(S, k++, Mat(s->Inv22, s->totpnts, s->totpnts, max, mem)); SET_STRING_ELT(nameSvec, k, mkChar("mutransposed")); SET_VECTOR_ELT(S, k++, Mat(s->MuT, s->totpnts, s->spatialpnts, max, mem)); SET_STRING_ELT(nameSvec, k, mkChar("dummy")); SET_VECTOR_ELT(S, k++, Num(s->G, s->totpnts, max, mem)); SET_STRING_ELT(nameSvec, k, mkChar("res0")); SET_VECTOR_ELT(S, k++, Result(s->res0, s->totpnts, max, mem)); } case Markov : { /* markov_storage* s; s = (markov_storage*) meth->S; */ } break; case Average : { } break; case Nugget : { nugget_storage* s; s = (nugget_storage*) meth->S; SET_STRING_ELT(nameSvec, k, mkChar("simple")); SET_VECTOR_ELT(S, k++, ScalarLogical(s->simple)); SET_STRING_ELT(nameSvec, k, mkChar("simugrid")); SET_VECTOR_ELT(S, k++, ScalarLogical(s->simugrid)); // SET_STRING_ELT(nameSvec, k, mkChar("srqtnugget")); // SET_VECTOR_ELT(S, k++, ScalarReal(s->sqrtnugget)); SET_STRING_ELT(nameSvec, k, mkChar("internalsort")); SET_VECTOR_ELT(S, k++, Int(s->pos, totalpoints, max, mem)); } break; case RandomCoin : { mpp_storage* s; s = (mpp_storage*) meth->S; SET_STRING_ELT(nameSvec, k, mkChar("integral")); SET_VECTOR_ELT(S, k++, ScalarReal(s->integral)); SET_STRING_ELT(nameSvec, k, mkChar("integralsq")); SET_VECTOR_ELT(S, k++, ScalarReal(s->integralsq)); SET_STRING_ELT(nameSvec, k, mkChar("effectiveRadius")); SET_VECTOR_ELT(S, k++, ScalarReal(s->effectiveRadius)); SET_STRING_ELT(nameSvec, k, mkChar("effectivearea")); SET_VECTOR_ELT(S, k++, ScalarReal(s->effectivearea)); SET_STRING_ELT(nameSvec, k, mkChar("plus")); SET_VECTOR_ELT(S, k++, ScalarReal(s->plus)); SET_STRING_ELT(nameSvec, k, mkChar("relplus")); SET_VECTOR_ELT(S, k++, ScalarReal(s->relplus)); SET_STRING_ELT(nameSvec, k, mkChar("lensimu")); SET_VECTOR_ELT(S, k++, Num(s->lensimu, dim, MAX_INT, mem)); SET_STRING_ELT(nameSvec, k, mkChar("min")); SET_VECTOR_ELT(S, k++, Num(s->min, dim, MAX_INT, mem)); SET_STRING_ELT(nameSvec, k, mkChar("maxgrid")); SET_VECTOR_ELT(S, k++, Num(s->max, dim, MAX_INT, mem)); SET_STRING_ELT(nameSvec, k, mkChar("minsimu")); SET_VECTOR_ELT(S, k++, Num(s->minsimu, dim, MAX_INT, mem)); SET_STRING_ELT(nameSvec, k, mkChar("maxsimu")); SET_VECTOR_ELT(S, k++, Num(s->maxsimu, dim, MAX_INT, mem)); SET_STRING_ELT(nameSvec, k, mkChar("mean")); SET_VECTOR_ELT(S, k++, Num(s->mean, dim, MAX_INT, mem)); SET_STRING_ELT(nameSvec, k, mkChar("sdgauss")); SET_VECTOR_ELT(S, k++, Num(s->sdgauss, dim, MAX_INT, mem)); SET_STRING_ELT(nameSvec, k, mkChar("internal.constants")); SET_VECTOR_ELT(S, k++, Num(s->c, 6, MAX_INT, mem)); SET_STRING_ELT(nameSvec, k, mkChar("u")); SET_VECTOR_ELT(S, k++, Num(s->u, dim, MAX_INT, mem)); // SET_STRING_ELT(nameSvec, k, mkChar("var")); // SET_VECTOR_ELT(S, k++, ScalarReal(s->var)); SET_STRING_ELT(nameSvec, k, mkChar("logapproxzero")); SET_VECTOR_ELT(S, k++, ScalarReal(s->logapproxzero)); SET_STRING_ELT(nameSvec, k, mkChar("samplingdist")); SET_VECTOR_ELT(S, k++, ScalarReal(s->samplingdist)); SET_STRING_ELT(nameSvec, k, mkChar("samplingr")); SET_VECTOR_ELT(S, k++, ScalarReal(s->samplingr)); SET_STRING_ELT(nameSvec, k, mkChar("average")); SET_VECTOR_ELT(S, k++, ScalarReal(s->average)); SET_STRING_ELT(nameSvec, k, mkChar("factor")); SET_VECTOR_ELT(S, k++, ScalarReal(s->factor)); SET_STRING_ELT(nameSvec, k, mkChar("dim")); SET_VECTOR_ELT(S, k++, ScalarInteger(s->dim)); SET_STRING_ELT(nameSvec, k, mkChar("ntot")); SET_VECTOR_ELT(S, k++, ScalarInteger(s->ntot)); SET_STRING_ELT(nameSvec, k, mkChar("invscale")); SET_VECTOR_ELT(S, k++, ScalarReal(s->factor)); SET_STRING_ELT(nameSvec, k, mkChar("logInvSqrtDens")); SET_VECTOR_ELT(S, k++, ScalarReal(s->logInvSqrtDens)); } break; case Hyperplane : { hyper_storage* s; s = (hyper_storage*) meth->S; SET_STRING_ELT(nameSvec, k, mkChar("rx")); SET_VECTOR_ELT(S, k++, Num(s->rx, dim, MAX_INT, mem)); SET_STRING_ELT(nameSvec, k, mkChar("center")); SET_VECTOR_ELT(S, k++, Num(s->center, dim, MAX_INT, mem)); SET_STRING_ELT(nameSvec, k, mkChar("radius")); SET_VECTOR_ELT(S, k++, ScalarReal(s->radius)); SET_STRING_ELT(nameSvec, k, mkChar("HyperplaneFctOK")); SET_VECTOR_ELT(S, k++, ScalarLogical(s->hyperplane != NULL)); } break; case MaxMpp : { mpp_storage* s; s = (mpp_storage*) meth->S; SET_STRING_ELT(nameSvec, k, mkChar("integralpos")); SET_VECTOR_ELT(S, k++, ScalarReal(s->integralpos)); SET_STRING_ELT(nameSvec, k, mkChar("factor")); SET_VECTOR_ELT(S, k++, ScalarReal(s->factor)); SET_STRING_ELT(nameSvec, k, mkChar("maxheight")); SET_VECTOR_ELT(S, k++, ScalarReal(s->maxheight)); SET_STRING_ELT(nameSvec, k, mkChar("effectiveRadius")); SET_VECTOR_ELT(S, k++, ScalarReal(s->effectiveRadius)); SET_STRING_ELT(nameSvec, k, mkChar("effectivearea")); SET_VECTOR_ELT(S, k++, ScalarReal(s->effectivearea)); SET_STRING_ELT(nameSvec, k, mkChar("plus")); SET_VECTOR_ELT(S, k++, ScalarReal(s->plus)); SET_STRING_ELT(nameSvec, k, mkChar("min")); SET_VECTOR_ELT(S, k++, Num(s->min, dim, MAX_INT, mem)); SET_STRING_ELT(nameSvec, k, mkChar("lensimu")); SET_VECTOR_ELT(S, k++, Num(s->lensimu, dim, MAX_INT, mem)); SET_STRING_ELT(nameSvec, k, mkChar("internal.constants")); SET_VECTOR_ELT(S, k++, Num(s->c, 6, MAX_INT, mem)); // SET_STRING_ELT(nameSvec, k, mkChar("primitiveFctOK")); // SET_VECTOR_ELT(S, k++, ScalarLogical(s->MppFct != NULL)); SET_STRING_ELT(nameSvec, k, mkChar("dim")); SET_VECTOR_ELT(S, k++, ScalarInteger(s->dim)); } break; case ExtremalGauss : { extremes_storage* s; s = (extremes_storage*) meth->S; SET_STRING_ELT(nameSvec, k, mkChar("inv_mean_pos")); SET_VECTOR_ELT(S, k++, ScalarReal(s->inv_mean_pos)); SET_STRING_ELT(nameSvec, k, mkChar("assumedmax")); SET_VECTOR_ELT(S, k++, ScalarReal(s->assumedmax)); SET_STRING_ELT(nameSvec, k, mkChar("field")); SET_VECTOR_ELT(S, k++, Result(s->rf, 0, max, mem)); /* locdim = loc->grid ? dim : 1; if (locdim==1) { SET_VECTOR_ELT(S, k++, Num(s->rf, totalpoints, max, mem)); } else { PROTECT(dummy=allocVector(INTSXP, locdim)); for (i=0; ilength[i]; PROTECT(array=allocArray(REALSXP, dummy)); for (i=0; irf[i]; SET_VECTOR_ELT(S, k++, array); UNPROTECT(2); } */ SET_STRING_ELT(nameSvec, k, mkChar("new")); SET_VECTOR_ELT(S, k++, InternalGetKeyInfo(&(s->key), ignore_active, depth + 1, max)); } break; default : assert(meth->nr <0); SET_STRING_ELT(nameSvec, k, mkChar("calling.method from ")); SET_VECTOR_ELT(S, k++, mkString(CovList[- meth->nr].name)); } assert(k==nS); setAttrib(S, R_NamesSymbol, nameSvec); SET_VECTOR_ELT(method, l++, S); // SET_STRING_ELT(nameSvec, , mkChar("submethods")); PROTECT(submethods = allocVector(VECSXP, meth->nsub)); for (i=0; insub; i++) { SET_VECTOR_ELT(submethods, i, GetMethodInfo(meth->sub[i], ignore_active, depth + 1, max, mem)); } SET_VECTOR_ELT(method, l++, submethods); UNPROTECT(1); //ERROR: cast from ‘long int*’ to ‘int’ loses precision SET_VECTOR_ELT(method, l++, ScalarInteger((int) *mem)); //original: (int) mem setAttrib(method, R_NamesSymbol, namemethodvec); UNPROTECT(2); // method + namemethodvec assert(l == nmethodinfo); UNPROTECT(2); // method + namemethodvec return method; } #define ninfo 8 SEXP InternalGetKeyInfo(key_type *key, bool ignore_active, int depth, int max){ const char *infonames[ninfo] = {"gp", "gpdo", "simu", "loc", "trend", "cov", "meth", "mem" }; int ni=0, actninfo, i, level = 3; long mem=0; SEXP info, namevec; actninfo = (key->simu.active || ignore_active) ? ninfo : 3; PROTECT(info=allocVector(VECSXP, actninfo)); PROTECT(namevec = allocVector(STRSXP, actninfo)); for (i=0; igp, &mem)); //printf("gpdo\n"); SET_VECTOR_ELT(info, ni++, GetGlobalInfo(key->gpdo, &mem)); //printf("simu\n"); SET_VECTOR_ELT(info, ni++, GetSimuInfo(&(key->simu), &mem)); if (actninfo > 3) { // printf("loc\n"); SET_VECTOR_ELT(info, ni++, GetLocationInfo(&(key->loc), &mem)); // printf("trnde\n"); SET_VECTOR_ELT(info, ni++, GetTrendInfo(&(key->trend), &mem)); // printf("cov\n"); SET_VECTOR_ELT(info, ni++, GetModelInfo(key->cov, level, true, &mem)); // printf("meth\n"); // printf("%d\n", key->meth); // printf("%d\n",ignore_active ); // printf("%d\n", depth); // printf("%d\n", max); // printf("%d\n", mem); SET_VECTOR_ELT(info, ni++, GetMethodInfo(key->meth, ignore_active, depth, max, &mem)); //printf("done\n"); SET_VECTOR_ELT(info, ni++, ScalarInteger(mem)); } assert(ni ==actninfo); UNPROTECT(2); // info + name //assert(false); // printf("end\n"); return info; } SEXP GetRegisterInfo(SEXP keynr, SEXP Ignoreactive, SEXP max_elements) { // extended int knr; knr = INTEGER(keynr)[0]; if ((knr<0) || (knr>=MAXKEYS)) { return allocVector(VECSXP, 0); } // PrintMethodInfo(KEY[knr].meth); return InternalGetKeyInfo(&(KEY[knr]), LOGICAL(Ignoreactive)[0], 0, INTEGER(max_elements)[0]); } void leer(int level){ char format[255]; // printf("level=%d\n", level); sprintf(format,"%%%ds", -level * 3); PRINTF(format, ""); } int MAX_PMI; void PMI(cov_model *cov, int level) { int i, j, endfor; cov_fct *C = CovList + cov->nr; #define MNlength 5 char MN[Forbidden + 1][MNlength], TriNames[TriBeyond + 1][12] = {"false", "true", "false (max)", "NaN"}; //int n = 2; for (i=0; i<=Forbidden; i++) { strcopyN(MN[i], METHODNAMES[i], MNlength); } leer(level); cov_fct *CC = C; while(strcmp(CC->name, InternalName) ==0) CC--; PRINTF(">>> %s <<< [%d]", CC->name, cov->nr); PRINTF("\n"); leer(level); PRINTF("param\n"); // printf(">> %d %s %d\n", cov->nr, C->name, C->kappas); for(i=0; ikappas; i++) { leer(level + 1); PRINTF("%-10s ", C->kappanames[i]); if (cov->p[i] == NULL) { PRINTF(" NULL\n"); continue; } if (C->kappatype[i] == REALSXP) { if (cov->ncol[i]==1) { if (cov->nrow[i]==1) { PRINTF("%f", cov->p[i][0]); } else { PRINTF("[%d] ", cov->nrow[i]); endfor = cov->nrow[i]; if (endfor > MAX_PMI) endfor = MAX_PMI; for (j=0; jp[i][j]); } } else { PRINTF("[%d, %d] ", cov->nrow[i], cov->ncol[i]); endfor = cov->nrow[i] * cov->ncol[i]; if (endfor > MAX_PMI) endfor = MAX_PMI; for (j=0; jp[i][j]); } } else if (C->kappatype[i] == INTSXP) { if (cov->ncol[i]==1) { if (cov->nrow[i]==1) { PRINTF("%d", ((int*) cov->p[i])[0]); } else { PRINTF("[%d] ", cov->nrow[i]); endfor = cov->nrow[i]; if (endfor > MAX_PMI) endfor = MAX_PMI; for (j=0; jp[i])[j]); } } else { PRINTF("[%d, %d] ", cov->nrow[i], cov->ncol[i]); endfor = cov->nrow[i] * cov->ncol[i]; if (endfor > MAX_PMI) endfor = MAX_PMI; for (j=0; jp[i])[j]); } } else if (C->kappatype[i] == LISTOF + REALSXP) { int k; listoftype *p=(listoftype*) (cov->p[i]); PRINTF("list [%d]\n", cov->nrow[i]); leer(level + 2); for (k=0; knrow[i]; k++) { if (p->ncol[k]==1) { if (p->nrow[k]==1) { PRINTF("%f", p->p[k][0]); } else { PRINTF("[%d] ", p->nrow[k]); endfor = p->nrow[k]; if (endfor > MAX_PMI) endfor = MAX_PMI; for (j=0; jp[k][j]); } } else { PRINTF("[%d, %d] ", p->nrow[k], p->ncol[k]); endfor = p->nrow[k] * p->ncol[k]; if (endfor > MAX_PMI) endfor = MAX_PMI; for (j=0; jp[k][j]); } } PRINTF("\n"); } else { assert(false); } PRINTF("\n"); } leer(level); PRINTF("%-10s [%d]","internal-q", cov->qlen); endfor = cov->qlen; if (endfor > MAX_PMI) endfor = MAX_PMI; for (i=0; iq[i]); PRINTF("\n"); leer(level); PRINTF("%-10s %s\n","calling", cov->calling==NULL ? "NULL" : CovList[cov->calling->nr].name); leer(level); PRINTF("%-10s %d (%s)\n","statIn", cov->statIn, STATNAMES[(int) cov->statIn]); leer(level); PRINTF("%-10s %d (%s)\n","isoIn", cov->isoIn, ISONAMES[(int) cov->isoIn]); // leer(level); PRINTF("%-10s %d\n","naturalscaling", cov->naturalscaling); leer(level); PRINTF("%-10s %d\n","tsdim", cov->tsdim); leer(level); PRINTF("%-10s %d\n","xdim", cov->xdim); leer(level); PRINTF("%-10s %d\n","vdim", cov->vdim); leer(level); PRINTF("%-10s %d\n","maxdim", cov->maxdim); leer(level); PRINTF("%-10s %d\n","derivatives", cov->derivatives); leer(level); PRINTF("%-10s %d\n","normalmix", (int) cov->normalmix); leer(level); PRINTF("%-10s %d\n","finiterng", (int) cov->finiterange); leer(level); PRINTF("%-10s %d\n","diag", (int) cov->diag); leer(level); PRINTF("%-10s %d\n","ssep.last", (int) cov->semiseparatelast); leer(level); PRINTF("%-10s %d\n","sep.last", (int) cov->separatelast); leer(level); PRINTF("%-10s %d\n","tbm2num", (int) cov->tbm2num); leer(level); PRINTF("%-10s %s\n","anyNAdown", TriNames[(int) cov->anyNAdown]); leer(level); PRINTF("%-10s %s\n","anyNAscaleup", TriNames[(int) cov->anyNAscaleup]); leer(level); PRINTF("%-10s %d\n","spec:nmetro", cov->spec.nmetro); leer(level); PRINTF("%-10s %f\n","spec:sigma", cov->spec.sigma); leer(level); PRINTF("%-10s %d\n", "MLE", cov->MLE==NULL); leer(level); PRINTF("%-10s ", "pref"); for (i=0; i<=Direct; i++) PRINTF("%s:%d ", MN[i], (int) cov->pref[i]); PRINTF("\n"); leer(level); PRINTF("%-10s ", ""); for (; i<=Nothing; i++) PRINTF("%s:%d ", MN[i], (int) cov->pref[i]); PRINTF("\n"); leer(level); PRINTF("%-10s ", "user"); for (i=0; i<=Direct; i++) PRINTF("%s:%d ", MN[i], (int) cov->user[i]); PRINTF("\n"); leer(level); PRINTF("%-10s ", ""); for (; i<=Nothing; i++) PRINTF("%s:%d ", MN[i], (int) cov->user[i]); PRINTF("\n"); for (i=0; isub[i] == NULL) { // PRINTF(" NULL\n"); continue; } // leer(level); PRINTF("%s%-10s %d %d:\n",C->name, "submodel", i, level); leer(level); PRINTF("%-10s %d:", "submodel", i); // printf("%d \n", cov->sub[i]->nr); PMI(cov->sub[i], level + 1); } } void PrintModelInfo(cov_model *cov) { // OK PRINTF("\n"); if (cov == NULL) { PRINTF("Covariance model is empty.\n"); } else PMI(cov, 0); } /* leer(level); PRINTF("%-10s %d\n","stop", (int) meth->stop); leer(level); PRINTF("%-10s %s\n","distrib", DISTRNAMES[loc->distribution]); leer(level); PRINTF("%-10s %d\n","T", (int) loc->T); leer(level); PRINTF("%-10s %d\n","x", (int) loc->x); leer(level); PRINTF("%-10s %d\n","totalpts", (int) loc->totalpoints); leer(level); PRINTF("%-10s ", "length"); for (j=0; jtimespacedim; j++) { PRINTF("%d ", loc->length[j]); } PRINTF("\n"); leer(level); PRINTF("%-10s %d\n","exp.#.simu", (int) meth->expected_number_simu); */ void PMeI(method_type *meth, int level){ // printf("XXX %d\n", meth); printf("XXX %d\n", meth->cov); // printf("XXX %d\n", meth->cov->tsdim); cov_model *cov = meth->cov; int i,j, dim; PRINTF("\n"); //leer(level); PRINTF("%-10s %d\n","gp", (int) meth->gp); //leer(level); PRINTF("%-10s %d\n","gpdo", (int) meth->gpdo); //leer(level); PRINTF("%-10s %d\n","destruct", (int) meth->destruct); //leer(level); PRINTF("%-10s %d\n","S", (int) meth->S); //leer(level); PRINTF("%-10s %d\n","compatible", (int) meth->compatible); if (cov == NULL) { dim = -1; leer(level); PRINTF("cov model is empty\n"); } else { dim = cov->tsdim; leer(level); PRINTF("cov [%d]", cov); PMI(cov, level+1); } if (meth->caniso == NULL) { leer(level); PRINTF("%-10s %s\n", "caniso", "NULL"); } else { for (i=0; icaniso[i + j * dim]); } PRINTF("\n"); } } leer(level); PRINTF("%-10s %f\n","cvar", meth->cvar); leer(level); PRINTF("%-10s %d\n","matr.type", (int) meth->type); //leer(level); PRINTF("%-10s %d\n","grid", (int) ,loc->grid); //leer(level); PRINTF("%-10s %d\n","xdim", dim); // leer(level); PRINTF("%-10s %ld\n","S", // (POINTER) meth->S); // leer(level); PRINTF("%-10s %ld\n","space", // (POINTER) meth->space); // leer(level); PRINTF("%-10s %ld\n","sptime", // (POINTER) meth->sptime); //leer(level); PRINTF("%-10s %d\n","grani", -1); // leer(level); PRINTF("%-10s %ld\n","domethod", // (POINTER) meth->domethod); leer(level); PRINTF("%-10s %d (%s) \n","nr", meth->nr, (meth->nr < 0) ? METHODNAMES[-meth->nr-1] : (meth->nr > 1000) ? "NOT SET" : CovList[meth->nr].name); // leer(level); PRINTF("%-10s %ld\n","hanging", // (POINTER) meth->hanging); leer(level); PRINTF("%-10s %d\n","xdimout", meth->xdimout); if (level < 5) { if (meth->nsub == 0) { leer(level); PRINTF("%-10s (none)\n","submethods"); } else { for (j=0; jnsub; j++) { assert(meth->sub[j] != NULL); leer(level); PRINTF("%-10s %d", "submeth", j); PMeI(meth->sub[j], level +1); } } } if (false && level == 0) { for (i=0; i