Пример #1
0
int waveform (int color, int data_file)
{
	static char write_buffer[100],  read_buffer[10000]  ;
	int numToRead=10000;
	int written_bytes;
	
	////////////////////////////////////////////////
	memset(read_buffer, 0, 10000);
	ibsic(device);

	strcpy (write_buffer, "DATA:STARt 1");
	ibwrt (device, write_buffer, strlen(write_buffer));
	sprintf (write_buffer, "DATA:STOP 10000");
	ibwrt (device, write_buffer, strlen(write_buffer));
	strcpy (write_buffer, "ACQUIRE:MODE SAMPLE");
	ibwrt (device, write_buffer, strlen(write_buffer));

	strcpy (write_buffer, "ACQUIRE:STOPAFTER SEQUENCE");
	ibwrt (device, write_buffer, strlen(write_buffer));
	
	//read pump intensity, mask type and scan ref
	get_intensity();
//	Delay(0.5);
	
	strcpy (write_buffer, "ACQUIRE:STATE ON");
	ibwrt (device, write_buffer, strlen(write_buffer));

	strcpy (write_buffer, "*WAI");
	ibwrt (device, write_buffer, strlen(write_buffer));

	strcpy (write_buffer, "CURVe?");
	ibwrt (device, write_buffer, strlen(write_buffer));
	Delay(0.3); 

	ibrd (device, read_buffer, numToRead);

//Delay(1);	 
	ConvertArrayType (read_buffer, VAL_CHAR, data2fit, VAL_DOUBLE, 10000);
	written_bytes=WriteFile (data_file,read_buffer ,10000 );
	CloseFile (data_file);
	
	
	
	if (written_bytes!=10000)
	{
		printf("Error writing file!!\n");
	}

	plot_data(color);                   
	
	GetCtrlVal (ERG_panel, ERG_panel_fit_live, &j);
//	printf ("%d", j);
	if (j==1)
	{
	fit_data ();
	}
	
	return 1;
}
Пример #2
0
int CVICALLBACK Fit_loaded_curve (int panel, int control, int event,
								  void *callbackData, int eventData1, int eventData2)
{
	switch (event)
	{
		case EVENT_COMMIT:
			fit_data();
			break;
	}
	return 0;
}
Пример #3
0
int waveform (int color, int data_file)
{
	static char write_buffer[100];
	int numToRead=10000;
	char * read_buffer;
	read_buffer = malloc (numToRead);
	
	
	memset(read_buffer, 0, 10000);
	ibsic(device);

	strcpy (write_buffer, "DATA:STARt 1");
	ibwrt (device, write_buffer, strlen(write_buffer));
	sprintf (write_buffer, "DATA:STOP 10000");
	ibwrt (device, write_buffer, strlen(write_buffer));
	strcpy (write_buffer, "ACQUIRE:MODE SAMPLE");
	ibwrt (device, write_buffer, strlen(write_buffer));

	strcpy (write_buffer, "ACQUIRE:STOPAFTER SEQUENCE");
	ibwrt (device, write_buffer, strlen(write_buffer));
	
	strcpy (write_buffer, "ACQUIRE:STATE ON");
	ibwrt (device, write_buffer, strlen(write_buffer));

	strcpy (write_buffer, "*WAI");				// wait for trigger to continue
	ibwrt (device, write_buffer, strlen(write_buffer));

	strcpy (write_buffer, "CURVe?");
	ibwrt (device, write_buffer, strlen(write_buffer));
	Delay(0.3); 

	ibrd (device, read_buffer, numToRead);

	ConvertArrayType (read_buffer, VAL_CHAR, data2fit, VAL_DOUBLE, 10000);
	free (read_buffer)  ;
	
	
	
	
	plot_data(color);                   
	
	// check if live-fitting is enabled
	GetCtrlVal (Fit_pnl_handle, Fit_panel_fit_live, &fit_status);
	if (fit_status==1)
	{
		fit_data ();
	}
	
	return 1;
}
Пример #4
0
bool rational_fitter_parsec_multi::fit_data(const ptr<data>& dat, ptr<function>& fit, const arguments &args)
{
    std::cerr << "Entering first level of fit_data" << std::endl;

    ptr<rational_function> r = dynamic_pointer_cast<rational_function>(fit);
    const ptr<vertical_segment>& d = dynamic_pointer_cast<vertical_segment>(dat);
    if(!r || !d
       || d->confidence_interval_kind() != vertical_segment::ASYMMETRICAL_CONFIDENCE_INTERVAL)
	{
	    std::cerr << "<<ERROR>> not passing the correct class to the fitter" << std::endl;
	    return false;
	}

    // I need to set the dimension of the resulting function to be equal
    // to the dimension of my fitting problem

    // This doesn't work for dimension greater than 1 for now.
    //assert( d->dimY() == 1 );

    r->setDimX(d->dimX());
    r->setDimY(d->dimY());
    r->setMin(d->min());
    r->setMax(d->max());

    std::cout << "<<INFO>> np in  [" << _min_np << ", " << _max_np
	      << "] & nq in [" << _min_nq << ", " << _max_nq << "]" << std::endl;

    const int step = args.get_int("np-step", 1);
    int i;

    for(i=std::max<int>(2,_min_np); i<=_max_np; i+=step )
	{
	    // double min_delta  = std::numeric_limits<double>::max();
	    // double min_l2_dist= std::numeric_limits<double>::max();
	    // double mean_delta = 0.0;
	    // int nb_sol_found  = 0;
	    // int nb_sol_tested = 0;
	    timer time;
	    int np;

	    std::cout << "<<INFO>> fit using np+nq = " << i << std::endl ;
	    std::cout.flush() ;

	    time.start();

	    // i=np+nq => i-1 independant pb
	    std::cout << r.getcounter() << std::endl;
	    if(fit_data(d.get(), i-1, r.get(), np))
		{
		    time.stop();

		    std::cout << r.getcounter() << std::endl;
		    std::cout << "<<INFO>> got a fit using np = " << np << " & nq =  " << i-np << "      " << std::endl;
		    std::cout << "<<INFO>> " << *(r.get()) << std::endl;
		    std::cout << "<<INFO>> it took " << time << std::endl;

		    return true;
		}
	}

    std::cerr << "Exiting first level of fit_data" << std::endl;
    return false;
}
Пример #5
0
/*============ INITIAL SETUP ============================*/
fitinfo* setup_models(int *models)
{
  static fitinfo fit[MODELS];
  static Real incoh_w[1] = {1.}; /* Start with equal weighting */
  static model *incoh_m[1];
  int i;
  fitpars *pars = &fit[0].pars;
  fitpars *freepars = &fit[1].pars;

  for (i=0; i < MODELS; i++) fit_init(&fit[i]);
  fit[0].number_incoherent = 1;
  fit[0].incoherent_models = incoh_m;
  fit[0].incoherent_weights = incoh_w;
  incoh_m[0] = &fit[1].m;
  *models = 1;
  
  /* Load the data for each model */
  fit_data(&fit[0],"wc02.yor"); 
  fit_data(&fit[1],"wc03.yor");

  /* Initialize instrument parameters for each model.*/
  for (i=0; i < MODELS; i++) {
    const Real L = 5.0042,dLoL=0.020,d=1890.0;
    Real Qlo,Tlo, dTlo,dToT,s1,s2;
    Qlo=0.0154,Tlo=0.35;
    s1=0.21, s2=s1;
    dTlo=resolution_dT(s1,s2,d);
    dToT=resolution_dToT(s1,s2,d,Tlo);
    data_resolution_fv(&fit[i].dataA,L,dLoL,Qlo,dTlo,dToT);
    fit[i].beam.lambda = L;
    fit[i].beam.background = 1e-10;
    interface_create(&fit[i].rm, "erf", erf_interface, 30);
  }

  /*============= MODEL =====================================*/

  /* Add layers: d (thickness, �), rho (Nb, �-2), mu (absorption, �?), rough (interlayer roughness, �) */
  for (i=0; i < MODELS; i++) {
    model_layer(&fit[i].m, 0.000, 2.07e-6, 0.0e-8, 10.00); /* 0 substrate */
    model_layer(&fit[i].m, 12.000, 3.60e-6, 0.0e-8, 10.00); /* 1 oxide */
    model_layer(&fit[i].m, 5.800, 3.8e-6, 0.0e-8, 10.00); /* 2 chromium */
    model_layer(&fit[i].m, 90.70, 4.50e-6, 0.0e-8, 10.00); /* 3 gold */
    model_layer(&fit[i].m, 18.00, 1.00e-6, 0.0e-8, 10.00); /* 4 spacer */
    model_layer(&fit[i].m, 14.00, -0.2e-6, 0.0e-8, 10.00); /* 5 alkyl tails */
    model_layer(&fit[i].m, 100.0, 6.35e-6, 0.0e-8, 10.00); /* 6 solvent */
  }
  
  rho_spacer=0.50e-6;
  rho_alkyl=-0.40e-6;
  vol_fract_spacer=0.9;
  vol_fract_alkyl=0.99;
  global_rough=10.0;

  /*correct solvent layers for different models*/
  /* fit[3].m.d[3] = ... */
  fit[1].m.rho[6]=3.4e-6;

  
  /*=============== FIT PARAMETERS ===============================*/

  /* Specify which parameters are your fit parameters. Parameters are fitted
   * to be the same in all datasets by default
   */
  pars_add(pars, "d_oxide", &(fit[0].m.d[1]), 8., 30.);
  pars_add(pars, "d_chromium", &(fit[0].m.d[2]), 5., 30.);
  pars_add(pars, "rho_chromium", &(fit[0].m.rho[2]), 3.0e-6, 4.5e-6);
  pars_add(pars, "rough_cr_au", &(fit[0].m.rough[3]), 5.,30.);
  pars_add(pars, "d_gold", &(fit[0].m.d[3]), 40., 150.);
  pars_add(pars, "rho_gold", &(fit[0].m.rho[3]), 4.0e-6, 4.5e-6);
  pars_add(pars, "d_spacer", &(fit[0].m.d[4]), 10., 30.);
  pars_add(pars, "rho_spacer", &(rho_spacer), 0e-6, 0.5e-6);
  pars_add(pars, "vol_fract_spacer", &(vol_fract_spacer), 0., 1.);
  pars_add(pars, "d_alkyl", &(fit[0].m.d[5]), 10., 17.);
  pars_add(pars, "rho_alkyl", &(rho_alkyl), -0.5e-6, 0.0e-6);
  pars_add(pars, "vol_fract_alkyl", &(vol_fract_alkyl), 0., 1.);  
  pars_add(pars, "rho_solv_0", &(fit[0].m.rho[fit[0].m.n-1]), 6.0e-6, 6.35e-6);
  pars_add(pars, "rho_solv_1", &(fit[1].m.rho[fit[1].m.n-1]), 3.0e-6, 4.5e-6);
  pars_add(pars, "global_rough", &(global_rough), 8.0, 15.0);
  pars_add(pars, "model_weight",&(incoh_w[0]), 0., 1.);

  /* Build a list of 'free parameters' in fit[1].pars. These are
   * parameters for which the values are aloowed to differ from those
   * in model 0.  By default all values in all models are the same unless 
   * specified here. The range data is not useful, so set it to [0,1].  
   */

  pars_add(freepars, "rho_solv_1", &(fit[1].m.rho[fit[1].m.n-1]), 0., 1.);
  pars_add(freepars, "rough_cr_au", &(fit[0].m.rough[3]), 0., 1.);
  constraints = constr_models;
  return fit;
}