void DrawableStatsAttachment::operator -=(DrawableStatsAttachment *arg) { setVertices (getVertices() - arg->getVertices()); setPoints (getPoints() - arg->getPoints()); setLines (getLines() - arg->getLines()); setTriangles (getTriangles() - arg->getTriangles()); setPatches (getPatches () - arg->getPatches ()); setProcessedAttributeBytes(getProcessedAttributeBytes() - arg->getProcessedAttributeBytes()); setStoredAttributeBytes (getStoredAttributeBytes() - arg->getStoredAttributeBytes()); setValid(true); }
TrueClusterHistogram::TrueClusterHistogram(features::Feature *feature_, DataPointCollection dps): feature(feature_), ncenters(Parameters::getInstance()->getiParameter("clustering_means")), nsegments(1), patch_size(Parameters::getInstance()->getiParameter("clustering_patch_size")), spacing (Parameters::getInstance()->getiParameter("clustering_spacing")), histogram_type(Parameters::getInstance()-> getiParameter("clustering_histogram_type")), parameters(Parameters::getUniqueClone()), feature_type("") { patch_collection patches = getPatches(dps, ncenters * 100); KMeansClustering clustering; centers = clustering.cluster(patches); }
SEXP sw(SEXP sbondProbs, SEXP soneIteration, SEXP sedges, SEXP snedge, SEXP sniter, SEXP snvert, SEXP sncolor) { if (TYPEOF(sbondProbs) != REALSXP) error("'bondProbs' must be of type 'double'."); if (TYPEOF(soneIteration) != INTSXP) error("'oneIteration' must be of type 'integer'."); if (TYPEOF(sedges) != INTSXP) error("'edges' must be of type 'integer'."); if (TYPEOF(snedge) != INTSXP) error("'nedge' must be of type 'integer'."); if (TYPEOF(sniter) != INTSXP) error("'niter' must be of type 'integer'."); if (TYPEOF(snvert) != INTSXP) error("'nvert' must be of type 'integer'."); if (TYPEOF(sncolor) != INTSXP) error("'ncolor' must be of type 'integer'."); double *bondProbs = REAL(sbondProbs); int *oneIteration = INTEGER(soneIteration); int *edges = INTEGER(sedges); int nedge = asInteger(snedge); int niter = asInteger(sniter); int nvert = asInteger(snvert); int ncolor = asInteger(sncolor); int i, j; int *bondsPick = (int *) R_alloc(nedge, sizeof(int)); SEXP scolors = PROTECT(allocMatrix(INTSXP, nvert, niter)); int *colors = INTEGER(scolors); SEXP snbond = PROTECT(allocVector(INTSXP, 1)); int *nbond = INTEGER(snbond); GetRNGstate(); for (i = 0; i < niter; i++) { nbond[0] = 0; /* build bonds */ for (j = 0; j < nedge; j++) { double sunif; if (oneIteration[edges[j]] == oneIteration[edges[j+nedge]]){ sunif = unif_rand(); if (sunif < bondProbs[j]){ bondsPick[j] = 1; nbond[0] = nbond[0] + 1; } else{ bondsPick[j] = 0; } } else{ bondsPick[j] = 0; } } if (nbond[0] > 0){ /* obtain patches */ SEXP sa = PROTECT(allocVector(INTSXP, nbond[0])); SEXP sb = PROTECT(allocVector(INTSXP, nbond[0])); int *a = INTEGER(sa); int *b = INTEGER(sb); int k = 0; for (j = 0; j < nedge; j++) { if (bondsPick[j] == 1){ a[k] = edges[j]; b[k] = edges[j + nedge]; k = k + 1; } } SEXP patches = PROTECT(getPatches(sa, sb, snbond, snvert)); /* obtain new colors of each patch */ //int *newColors = (int *) Calloc(LENGTH(patches), sizeof(int)); int *newColors = Calloc(LENGTH(patches), int); double crand; for( j = 0; j < LENGTH(patches); j++){ double rr=30000*unif_rand(); crand = (int) rr % ncolor; newColors[j] = (int) crand; } /* assign new colors to each patch */ for (j = 0; j < LENGTH(patches); j++) { int *ver = INTEGER(VECTOR_ELT(patches, j)); int nver = LENGTH(VECTOR_ELT(patches, j)); for (k = 0; k < nver; k++) { oneIteration[ver[k]] = newColors[j]; colors[ver[k] + i*nvert] = newColors[j]; } } Free(newColors); UNPROTECT(3); } else{