uint32_t count_data(rbNode_s *node, int32_t toCount)/*#{{{*/ { uint32_t match = 0; /* total times match was found */ if(node == NULL){ return 0;} /* check if current nodes data is a match */ match = (toCount == node -> data -> pinNum) ? 0 : 1; return count_data(node -> child[RIGHT], toCount) + count_data(node -> child[LEFT], toCount) + match; } /* end count_data #}}} */
void cmd_nlls() { Real *work, *y, *bounds, *covar, *p; int nQ = count_data(); int ndim = fit[0].pars.n; int i; /* Allocate storage: y, covar, bounds, p */ work = (Real *)malloc(sizeof(Real)*(nQ + ndim*ndim + 3*ndim)); assert(work != NULL); y = work; bounds = y + nQ; covar = bounds + 2*ndim; p = covar + ndim*ndim; write_pop(&set); /* In case fit crashes */ /* Record what we are doing */ if (parFD != NULL) { fprintf(parFD,"# %15d Starting Levenberg-Marquardt\n", GetGen(&set)); fflush(parFD); } /* Copy normalized data values */ copy_normalized_data(y); /* Set bounds */ for (i=0; i < ndim; i++) { bounds[i] = 0.; bounds[i+ndim] = 1.; } /* Get best into p */ pars_set(&fit[0].pars, bestpars); pars_get01(&fit[0].pars, p); /* Call nlls */ tic(); #if 1 box_nlls(step_nlls, ndim, nQ, fit, y, bounds, p, covar); #else nlls(step_nlls, ndim, nQ, fit, y, p, covar); #endif printf("Done LM\n");fflush(stdout); toc(); print_covar(ndim,covar); /* Record LM results */ log_best(); /* Inject new p into the GA */ setChromosome(&set, 0, p); /* Done */ free(work); }
void data_calcs(void) { //External variables extern char datafile[FILEPATH_LENGTH]; //Internal variables long ii,jj,*N; double *flux, *fluxerr; N = (long *)malloc(sizeof(long)); //Read data mags and uncertainties count_data(datafile,N); Ndata = *N; printf("\nThere are %ld sources in data file\n",Ndata); //alloc dataflux = malloc(Nfilter*sizeof(double*)); datafluxerr = malloc(Nfilter*sizeof(double*)); flux = (double *)malloc(Ndata * sizeof(double)); fluxerr = (double *)malloc(Ndata * sizeof(double)); //read in data for each filter for (ii=0;ii<Nfilter;ii++) { //alloc dataflux[ii] = (double *)malloc(Ndata * sizeof(double)); datafluxerr[ii] = (double *)malloc(Ndata * sizeof(double)); //read in data for ii-th filter calc_datavals(ii,datafile,norm[ii],flux,fluxerr); for (jj=0; jj<Ndata; jj++) { dataflux[ii][jj] = flux[jj]; datafluxerr[ii][jj] = fluxerr[jj]; } } free(N); free(flux); free(fluxerr); }
uint32_t data_count(cardDeck_s *tree, int32_t pin)/*#{{{*/ { return count_data(tree -> root , pin); } /* end data_count #}}} */
void showcountingmeasurement::adddata(int count,QString data){ #if 1 QSettings count_data("shanghaikairen","count_data"); data.remove(0,2); QString s_count = data.left(5); data.remove(0,5); QString ca_count = data.left(5); data.remove(0,5); QString fe_count = data.left(5); QTableWidgetItem *tmpitem1 = new QTableWidgetItem(tr("%1").arg(s_count)); tmpitem1->setTextAlignment(Qt::AlignHCenter); ui->tableWidget->setItem(count - 1,0,tmpitem1); QTableWidgetItem *tmpitem2 = new QTableWidgetItem(tr("%1").arg(ca_count)); tmpitem2->setTextAlignment(Qt::AlignHCenter); ui->tableWidget->setItem(count - 1,1,tmpitem2); QTableWidgetItem *tmpitem3 = new QTableWidgetItem(tr("%1").arg(fe_count)); tmpitem3->setTextAlignment(Qt::AlignHCenter); ui->tableWidget->setItem(count - 1,2,tmpitem3); if(count == 11){ double y_s = 0 , y_ca = 0 ,y_fe = 0; double sumsub_s = 0 ,sumsub_ca = 0,sumsub_fe = 0; long long sum_s = 0,sum_ca = 0,sum_fe = 0; int tmp_count = 0; tmp_count = count_data.value("count_count").toInt() + 1; if(tmp_count > COUNT_MEASUREMENT_MOST_STORAGE) tmp_count = 1; ui->label_data->setText(QDateTime::currentDateTime().toString("MM月dd日 hh:mm")); for(int i = 0;i < 11;i++){ sum_s += ui->tableWidget->item(i,0)->text().toInt(); sum_ca += ui->tableWidget->item(i,1)->text().toInt(); sum_fe += ui->tableWidget->item(i,2)->text().toInt(); } //s for(int i = 0;i < 10; i++){ sumsub_s += pow(sum_s / 11 - ui->tableWidget->item(i,0)->text().toInt(),2); } y_s = pow((sumsub_s / (double)(sum_s/11)) * (double)(TURN_SECONDS/10),0.5); ui->label_s->setText(QString("SO3 计数平均数 = %1").arg(sum_s/11)); ui->label_sy->setText(" γ= " + QString::number(y_s,'f',4)); //s //ca for(int i = 0;i < 10; i++){ sumsub_ca += pow(sum_ca / 11 - ui->tableWidget->item(i,1)->text().toInt(),2); } y_ca = pow((sumsub_ca / (double)(sum_ca/11)) * (double)(TURN_SECONDS/10),0.5); ui->label_ca->setText(QString("CaO 计数平均数 = %1").arg(sum_ca/11)); ui->label_cay->setText(" γ= " + QString::number(y_ca,'f',4)); //ca //fe for(int i = 0;i < 10; i++){ sumsub_fe += pow(sum_fe / 11 - ui->tableWidget->item(i,2)->text().toInt(),2); } y_fe = pow((sumsub_fe / (double)(sum_fe/11)) * (double)(TURN_SECONDS/10),0.5); ui->label_fe->setText(QString("Fe2O3 计数平均数 = %1").arg(sum_fe/11)); ui->label_fey->setText(" γ= " + QString::number(y_fe,'f',4)); //fe if(issample::global_is_sample == WAIT_BE_LOCATION || ui->widget_2->global_ispreheat >= 2){ return; } count_data.setValue(QString("count_data_%1").arg(tmp_count), QString::number(sum_s/11) + ";"+ QString::number(y_s,'f',4) + ";" + QString::number(sum_ca/11) + ";"+ QString::number(y_ca,'f',4) + ";" + QString::number(sum_fe/11) + ";"+ QString::number(y_fe,'f',4) + ";" + QDateTime::currentDateTime().toString("yyyy.MM.dd hh:mm:ss")); count_data.setValue("count_count",tmp_count); } #endif }