void Connector::setup(QLabel *ql, QLineEdit *le, QPushButton *mBtn, QPushButton *dBtn, Canvas *c) { status = ql; ipBox = le; modeBtn = mBtn; delayBtn = dBtn; canvas = c; connect(this, SIGNAL(addY()), canvas, SLOT(addY())); connect(this, SIGNAL(subY()), canvas, SLOT(subY())); connect(this, SIGNAL(addX()), canvas, SLOT(addX())); connect(this, SIGNAL(subX()), canvas, SLOT(subX())); connect(this, SIGNAL(paint()), canvas, SLOT(paintClicked())); }
void Connector::timesUp() { QPair<int, int> next = cmdQ.dequeue(); switch(next.first) { case CW: axis_number = next.second; canvas->rotateCW(); break; case CCW: axis_number = next.second; canvas->rotateCCW(); break; case ADDY: emit addY(); break; case SUBY: emit subY(); break; case ADDX: emit addX(); break; case SUBX: emit subX(); break; case PAINT: emit paint(); break; default: qDebug() << "RECEIVE ERROR:" << next.first; break; } }
int AnovaTest::anovacase(gsl_matrix *bY, gsl_matrix *bX) { unsigned int j; // if Y col is all zeros for ( j=0; j<nVars; j++ ){ gsl_vector_view colj = gsl_matrix_column(bY, j); if ( gsl_vector_isnull(&colj.vector) == TRUE ) return GSL_ERANGE; } unsigned int i, hid, aid; double *sj, *pj, *bj; gsl_matrix *Z = gsl_matrix_alloc(nRows, nVars); gsl_matrix_memcpy(Z, bY); // Hats.X for (i=0; i<nModels-1; i++){ hid = i+1; aid = i; gsl_vector_view ref1 = gsl_matrix_row(inRef, aid); subX(bX, &ref1.vector, Hats[aid].X); gsl_vector_view ref0 = gsl_matrix_row(inRef, hid); subX(bX, &ref0.vector, Hats[hid].X); //Y = X*coef gsl_blas_dgemm(CblasNoTrans,CblasNoTrans,-1.0,Hats[aid].X,Hats[aid].Coef,0.0,Z); //Z = bY - Yhat; gsl_matrix_add (Z, bY); // calc teststats calcSS(Z, &(Hats[hid]), mmRef); calcSS(Z, &(Hats[aid]), mmRef); testStatCalc(&(Hats[hid]), &(Hats[aid]), mmRef, TRUE, &(bMultStat), bStatj); if (bMultStat >= multstat[i]) Pmultstat[i]++; sj = gsl_matrix_ptr (statj, i, 0); pj = gsl_matrix_ptr (Pstatj, i, 0); bj = gsl_vector_ptr (bStatj, 0); calcAdjustP(mmRef->punit, nVars, bj, sj, pj, sortid[i]); } gsl_matrix_free(Z); return 0; }
void Connector::readCommands() { if (client) { qDebug() << "READ - NOT SERVER"; return; } char buf[2] = {0}; serverSock->read(buf, serverSock->bytesAvailable()); int command = int(buf[0]); int axis = int(buf[1]); if (delay) { cmdQ.enqueue(qMakePair(command, axis)); QTimer::singleShot(2000, this, SLOT(timesUp())); } else { switch(command) { case CW: axis_number = next.second; canvas->rotateCW(); break; case CCW: axis_number = next.second; canvas->rotateCCW(); break; case ADDY: emit addY(); break; case SUBY: emit subY(); break; case ADDX: emit addX(); break; case SUBX: emit subX(); break; case PAINT: emit paint(); break; default: qDebug() << "RECEIVE ERROR:" << next.first; break; } } }
int GlmTest::anova(glm *fit, gsl_matrix *isXvarIn) { // Assume the models have been already sorted (in R) Xin = isXvarIn; nModels = Xin->size1; double *rdf = new double [nModels]; unsigned int nP, i, j, k; unsigned int ID0, ID1, nP0, nP1; unsigned int nRows=tm->nRows, nVars=tm->nVars, nParam=tm->nParam; unsigned int mtype = fit->mmRef->model-1; dfDiff = new unsigned int [nModels-1]; anovaStat = gsl_matrix_alloc((nModels-1), nVars+1); Panova = gsl_matrix_alloc((nModels-1), nVars+1); gsl_vector *bStat = gsl_vector_alloc(nVars+1); gsl_matrix_set_zero (anovaStat); gsl_matrix_set_zero (Panova); gsl_vector_set_zero (bStat); PoissonGlm pNull(fit->mmRef), pAlt(fit->mmRef); BinGlm binNull(fit->mmRef), binAlt(fit->mmRef); NBinGlm nbNull(fit->mmRef), nbAlt(fit->mmRef); PoissonGlm pNullb(fit->mmRef), pAltb(fit->mmRef); BinGlm binNullb(fit->mmRef), binAltb(fit->mmRef); NBinGlm nbNullb(fit->mmRef), nbAltb(fit->mmRef); glm *PtrNull[3] = { &pNull, &nbNull, &binNull }; glm *PtrAlt[3] = { &pAlt, &nbAlt, &binAlt }; glm *bNull[3] = { &pNullb, &nbNullb, &binNullb }; glm *bAlt[3] = { &pAltb, &nbAltb, &binAltb }; double *suj, *buj, *puj; gsl_vector_view teststat, unitstat,ref1, ref0; gsl_matrix *X0=NULL, *X1=NULL, *L1=NULL, *tmp1=NULL, *BetaO=NULL; gsl_matrix *bO=NULL, *bY=gsl_matrix_alloc(nRows, nVars); bO = gsl_matrix_alloc(nRows, nVars); gsl_permutation *sortid=NULL; if (tm->punit==FREESTEP) sortid = gsl_permutation_alloc(nVars); // ======= Fit the (first) Alt model =========// for (i=0; i<nModels; i++) { nP = 0; for (k=0; k<nParam; k++) if (gsl_matrix_get(Xin,i,k)!=FALSE) nP++; rdf[i] = nRows-nP; } for (i=1; i<nModels; i++) { // ======= Fit the Null model =========// ID0 = i; ID1 = i-1; nP0 = nRows - (unsigned int)rdf[ID0]; nP1 = nRows - (unsigned int)rdf[ID1]; // Degrees of freedom dfDiff[i-1] = nP1 - nP0; ref1=gsl_matrix_row(Xin, ID1); ref0=gsl_matrix_row(Xin, ID0); X0 = gsl_matrix_alloc(nRows, nP0); subX(fit->Xref, &ref0.vector, X0); X1 = gsl_matrix_alloc(nRows, nP1); subX(fit->Xref, &ref1.vector, X1); // ======= Get multivariate test statistics =======// // Estimate shrinkage parametr only once under H1 // See "FW: Doubts R package "mvabund" (12/14/11) teststat = gsl_matrix_row(anovaStat, (i-1)); PtrNull[mtype]->regression(fit->Yref, X0, fit->Oref, NULL); if (tm->test == SCORE) { lambda = gsl_vector_get(tm->anova_lambda, ID0); GetR(PtrNull[mtype]->Res, tm->corr, lambda, Rlambda); GeeScore(X1, PtrNull[mtype], &teststat.vector); } else if (tm->test==WALD) { PtrAlt[mtype]->regression(fit->Yref, X1, fit->Oref, NULL); L1 = gsl_matrix_alloc (nP1-nP0, nP1); tmp1 = gsl_matrix_alloc (nParam, nP1); subX(L, &ref1.vector, tmp1); subXrow1(tmp1, &ref0.vector, &ref1.vector, L1); lambda = gsl_vector_get(tm->anova_lambda, ID1); GetR(PtrAlt[mtype]->Res, tm->corr, lambda, Rlambda); GeeWald(PtrAlt[mtype], L1, &teststat.vector); } else { BetaO = gsl_matrix_alloc(nP1, nVars); addXrow2(PtrNull[mtype]->Beta, &ref1.vector, BetaO); PtrAlt[mtype]->regression(fit->Yref, X1, fit->Oref, BetaO); GeeLR(PtrAlt[mtype], PtrNull[mtype], &teststat.vector); } if (tm->resamp==MONTECARLO) { lambda=gsl_vector_get(tm->anova_lambda,ID0); GetR(fit->Res, tm->corr, lambda, Sigma); setMonteCarlo (PtrNull[mtype], XBeta, Sigma); } // ======= Get univariate test statistics =======// if (tm->punit == FREESTEP) { unitstat=gsl_vector_subvector(&teststat.vector,1,nVars); gsl_sort_vector_index (sortid, &unitstat.vector); gsl_permutation_reverse(sortid); } // ======= Get resampling distribution under H0 ===== // nSamp=0; double dif, timelast=0; clock_t clk_start=clock(); if (tm->showtime==TRUE) printf("Resampling begins for test %d.\n", i); for (j=0; j<tm->nboot; j++) { // printf("simu %d :", j); gsl_vector_set_zero (bStat); if ( tm->resamp == CASEBOOT ) { resampAnovaCase(PtrAlt[mtype],bY,X1,bO,j); subX(X1, &ref0.vector, X0); } else { resampNonCase(PtrNull[mtype], bY, j); gsl_matrix_memcpy(bO, fit->Oref); } if ( tm->test == WALD ) { bAlt[mtype]->regression(bY,X1,bO,NULL); lambda = gsl_vector_get(tm->anova_lambda, ID1); GetR(bAlt[mtype]->Res, tm->corr, lambda, Rlambda); GeeWald(bAlt[mtype], L1, bStat); } else if ( tm->test == SCORE ) { bNull[mtype]->regression(bY,X0,bO,NULL); lambda = gsl_vector_get(tm->anova_lambda, ID0); GetR(bNull[mtype]->Res, tm->corr, lambda, Rlambda); GeeScore(X1, bNull[mtype], bStat); } else { bNull[mtype]->regression(bY,X0,bO,NULL); addXrow2(bNull[mtype]->Beta, &ref1.vector, BetaO); bAlt[mtype]->regression(bY,X1,bO,BetaO); GeeLR(bAlt[mtype], bNull[mtype], bStat); } // ----- get multivariate counts ------- // buj = gsl_vector_ptr (bStat,0); suj = gsl_matrix_ptr (anovaStat, i-1, 0); puj = gsl_matrix_ptr (Panova, i-1, 0); if ( *(buj) > (*(suj)-1e-8) ) *puj=*puj+1; // ------ get univariate counts ---------// calcAdjustP(tm->punit,nVars,buj+1,suj+1,puj+1,sortid); nSamp++; // Prompts if ((tm->showtime==TRUE)&(j%100==0)) { dif = (float)(clock() - clk_start)/(float)CLOCKS_PER_SEC; timelast+=(double)dif/60; printf("\tResampling run %d finished. Time elapsed: %.2f minutes...\n", j, timelast); clk_start=clock(); } } // end j for loop // ========= get p-values ======== // if ( tm->punit == FREESTEP) { puj = gsl_matrix_ptr (Panova, i-1, 1); reinforceP(puj, nVars, sortid); } if (BetaO!=NULL) gsl_matrix_free(BetaO); if (X0!=NULL) gsl_matrix_free(X0); if (X1!=NULL) gsl_matrix_free(X1); if (tm->test == WALD) { if (L1!=NULL) gsl_matrix_free(L1); if (tmp1!=NULL) gsl_matrix_free(tmp1); } } // end i for loop and test for loop // p = (#exceeding observed stat + 1)/(#nboot+1) gsl_matrix_add_constant (Panova, 1.0); gsl_matrix_scale (Panova, (double)1/(nSamp+1.0)); bAlt[mtype]->releaseGlm(); PtrAlt[mtype]->releaseGlm(); if ( tm->test!=WALD ) { bNull[mtype]->releaseGlm(); PtrNull[mtype]->releaseGlm(); } delete []rdf; if (sortid != NULL ) gsl_permutation_free(sortid); gsl_vector_free(bStat); gsl_matrix_free(bY); if (bO!=NULL) gsl_matrix_free(bO); return SUCCESS; }
void CStarCamera::setViewportAngle(const FPoint &angles) { debug(DEBUG_DETAILED, "setViewportAngle %f %f", angles._x, angles._y); if (isLocked()) return; if (_matrixRow == -1) { FPose subX(X_AXIS, angles._y); FPose subY(Y_AXIS, angles._x); FPose sub(subX, subY); proc22(sub); } else if (_matrixRow == 0) { FVector row1 = _matrix._row1; FPose subX(X_AXIS, angles._y); FPose subY(Y_AXIS, angles._x); FPose sub(subX, subY); FMatrix m1 = _viewport.getOrientation(); FVector tempV1 = _viewport._position; FVector tempV2, tempV3, tempV4, tempV5, tempV6; tempV2._y = m1._row1._y * 100000.0; tempV2._z = m1._row1._z * 100000.0; tempV3._x = m1._row1._x * 100000.0 + tempV1._x; tempV4._x = tempV3._x; tempV3._y = tempV2._y + tempV1._y; tempV4._y = tempV3._y; tempV3._z = tempV2._z + tempV1._z; tempV4._z = tempV3._z; tempV2._x = m1._row2._x * 100000.0; tempV2._y = m1._row2._y * 100000.0; tempV2._z = m1._row2._z * 100000.0; tempV2._x = m1._row3._x * 100000.0; tempV2._y = m1._row3._y * 100000.0; tempV2._z = m1._row3._z * 100000.0; tempV2._x = tempV2._x + tempV1._x; tempV2._y = tempV2._y + tempV1._y; tempV2._z = tempV2._z + tempV1._z; tempV3._x = tempV2._x + tempV1._x; tempV3._y = tempV2._y + tempV1._y; tempV5._x = tempV2._x; tempV5._y = tempV2._y; tempV3._z = tempV2._z + tempV1._z; tempV5._z = tempV2._z; tempV6._x = tempV3._x; tempV6._y = tempV3._y; tempV6._z = tempV3._z; tempV1._x = tempV1._x - row1._x; tempV1._y = tempV1._y - row1._y; tempV1._z = tempV1._z - row1._z; tempV4._x = tempV3._x - row1._x; tempV4._y = tempV4._y - row1._y; tempV4._z = tempV4._z - row1._z; tempV5._x = tempV2._x - row1._x; tempV5._y = tempV5._y - row1._y; tempV5._z = tempV5._z - row1._z; tempV6._x = tempV3._x - row1._x; tempV6._y = tempV6._y - row1._y; tempV6._z = tempV6._z - row1._z; FVector modV1 = tempV1.fn5(sub); FVector modV2 = tempV4.fn5(sub); FVector modV3 = tempV5.fn5(sub); FVector modV4 = tempV6.fn5(sub); tempV1 = modV1; tempV4 = modV2; tempV5 = modV3; tempV4 = modV4; tempV2._x = tempV4._x - tempV1._x; tempV2._y = tempV4._y - tempV1._y; tempV2._z = tempV4._z - tempV1._z; tempV4._x = tempV2._x; tempV4._y = tempV2._y; tempV2._x = tempV5._x - tempV1._x; tempV4._z = tempV2._z; tempV5._x = tempV2._x; tempV2._y = tempV5._y - tempV1._y; tempV5._y = tempV2._y; tempV2._z = tempV5._z - tempV1._z; tempV5._z = tempV2._z; tempV2._x = tempV6._x - tempV1._x; tempV2._y = tempV6._y - tempV1._y; tempV2._z = tempV6._z - tempV1._z; tempV6 = tempV2; tempV4.normalize(); tempV5.normalize(); tempV6.normalize(); tempV1 += row1; m1.set(tempV4, tempV5, tempV6); _viewport.setOrientation(m1); _viewport.setPosition(tempV1); } else if (_matrixRow == 1) { FVector tempV2; DMatrix m1, m2, sub; DVector mrow1, mrow2, mrow3; DVector tempV1, diffV, multV, multV2, tempV3, tempV4, tempV5, tempV6, tempV7; DVector tempV8, tempV9, tempV10, tempV11, tempV12; DVector tempV13, tempV14, tempV15, tempV16; DMatrix subX(0, _matrix._row1); DMatrix subY(Y_AXIS, angles._y); tempV1 = _matrix._row2 - _matrix._row1; diffV = tempV1; m1 = diffV.fn5(); m1 = m1.fn4(subX); subX = m1.fn1(); subX = subX.fn4(subY); FMatrix m3 = _viewport.getOrientation(); tempV2 = _viewport._position; multV._x = m3._row1._x * 1000000.0; multV._y = m3._row1._y * 1000000.0; multV._z = m3._row1._z * 1000000.0; tempV3._x = tempV2._x; tempV3._y = tempV2._y; tempV3._z = tempV2._z; multV2._z = m3._row2._z * 1000000.0; tempV1._x = multV._x + tempV3._x; tempV1._y = multV._y + tempV3._y; tempV1._z = multV._z + tempV3._z; mrow3._z = 0.0; mrow3._y = 0.0; mrow3._x = 0.0; multV2._x = m3._row2._x * 1000000.0; multV2._y = m3._row2._y * 1000000.0; mrow1 = tempV1; multV = multV2 + tempV3; mrow2 = multV; tempV7._z = m3._row3._z * 1000000.0 + tempV3._z; tempV7._y = m3._row3._y * 1000000.0 + tempV3._y; tempV7._x = m3._row3._x * 1000000.0 + tempV3._x; mrow3 = tempV8; DVector *v = tempV3.fn1(tempV9, subX); tempV3 = *v; v = mrow1.fn1(tempV10, subX); mrow1 = *v; v = mrow2.fn1(tempV11, subX); mrow2 = *v; v = mrow3.fn1(tempV12, subX); mrow3 = *v; v = tempV3.fn1(tempV13, m1); tempV3 = *v; v = mrow1.fn1(tempV14, m1); mrow1 = *v; v = mrow2.fn1(tempV15, m1); mrow2 = *v; v = mrow3.fn1(tempV16, m1); mrow3 = *v; mrow1 -= tempV3; mrow2 -= tempV3; mrow3 -= tempV3; mrow1.normalize(); mrow2.normalize(); mrow3.normalize(); tempV16 = tempV3; m3.set(mrow1, mrow2, mrow3); _viewport.setOrientation(m3); _viewport.setPosition(tempV16); } }
AnovaTest::AnovaTest(mv_Method *mm, gsl_matrix *Y, gsl_matrix *X, gsl_matrix *isXvarIn):mmRef(mm), Yref(Y), Xref(X), inRef(isXvarIn) { unsigned int hid, aid; unsigned int i, j, count; nModels=inRef->size1, nParam=Xref->size2; nRows=Yref->size1, nVars=Yref->size2; // printf("initialize public variables: stats\n"); multstat=(double *)malloc((nModels-1)*sizeof(double)); Pmultstat = (double *)malloc((nModels-1)*sizeof(double)); for (j=0; j<nModels-1; j++) *(Pmultstat+j)=0.0; dfDiff = (unsigned int *)malloc((nModels-1)*sizeof(unsigned int)); statj = gsl_matrix_alloc(nModels-1, nVars); Pstatj = gsl_matrix_alloc(nModels-1, nVars); gsl_matrix_set_zero(Pstatj); bStatj = gsl_vector_alloc(nVars); Hats = (mv_mat *)malloc(nModels*sizeof(mv_mat)); sortid = (gsl_permutation **)malloc((nModels-1)*sizeof(gsl_permutation *)); for (i=0; i<nModels; i++ ) { // Hats[i] Hats[i].mat=gsl_matrix_alloc(nRows, nRows); Hats[i].SS=gsl_matrix_alloc(nVars, nVars); Hats[i].R=gsl_matrix_alloc(nVars, nVars); Hats[i].Res=gsl_matrix_alloc(nRows, nVars); Hats[i].Y = gsl_matrix_alloc(nRows, nVars); Hats[i].sd = gsl_vector_alloc(nVars); count = 0; for (j=0; j<nParam; j++){ count+=(unsigned int)gsl_matrix_get(inRef, i, j); } // printf("count=%d \n", count); Hats[i].X = gsl_matrix_alloc(nRows, count); Hats[i].Coef=gsl_matrix_alloc(count, nVars); gsl_vector_view refi=gsl_matrix_row(inRef, i); subX(Xref, &refi.vector, Hats[i].X); calcSS(Yref, &(Hats[i]), mmRef); // displaymatrix(Hats[i].SS, "SS"); } for (i=1; i<nModels; i++) { hid = i; aid = i-1; if ( mmRef->resamp != CASEBOOT ) { // fit = Y- resi gsl_matrix_memcpy (Hats[i].Y, Yref); gsl_matrix_sub (Hats[i].Y, Hats[i].Res); } gsl_vector_view statij = gsl_matrix_row(statj, aid); testStatCalc(&(Hats[hid]), &(Hats[aid]), mmRef, TRUE, (multstat+aid), &statij.vector); dfDiff[aid] = Hats[aid].X->size2-Hats[hid].X->size2; // sortid sortid[aid] = gsl_permutation_alloc(nVars); gsl_sort_vector_index (sortid[aid], &statij.vector); // rearrange sortid in descending order gsl_permutation_reverse (sortid[aid]); } // initialize resampling indices // getBootID(); done in R bootID = NULL; // Initialize GSL rnd environment variables const gsl_rng_type *T; gsl_rng_env_setup(); T = gsl_rng_default; // an mt19937 generator with a seed of 0 rnd = gsl_rng_alloc(T); if (mmRef->reprand!=TRUE){ struct timeval tv; // seed generation based on time gettimeofday(&tv, 0); unsigned long mySeed=tv.tv_sec + tv.tv_usec; gsl_rng_set(rnd, mySeed); // reset seed } // printf("Anova test initialized.\n"); }