Пример #1
0
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 #}}} */
Пример #2
0
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);
	
}
Пример #4
0
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
}