Beispiel #1
0
static void free_outputs(list_t *outputs) {
	int i;
	for (i = 0; i < outputs->length; ++i) {
		free_output(outputs->items[i]);
	}
	list_free(outputs);
}
Beispiel #2
0
/* Free any allocated data in the struct */
static void free_nb_struct(struct object *obj) {
  DERR(fprintf(stderr, "Freeing storage.\n"));
  while(THIS->inputs != NULL) {
    free_input(THIS->inputs);
  }

  if(THIS->outp != NULL) {
    free_output(THIS->outp);
    THIS->outp = NULL;
  }
  free_data_buf();
  free_svalue(&THIS->args);
  free_svalue(&THIS->cb);
  THIS->cb.type = T_INT; 
  THIS->args.type = T_INT; 
}
Beispiel #3
0
/* Set the output file (file object) */
static void f_output(INT32 args) {
  if(args) {
    if(ARG(1).type != T_OBJECT) {
      SIMPLE_BAD_ARG_ERROR("_Caudium.nbio()->output", 1, "object");
    } else {
      output *outp;
      if(THIS->outp != NULL) {
	free_output(THIS->outp);
	THIS->outp = NULL;
      }
      outp = malloc(sizeof(output));
      outp->file = ARG(1).u.object;
      outp->fd = fd_from_object(outp->file);

      outp->set_nb_off = find_identifier("set_nonblocking", outp->file->prog);
      outp->set_b_off  = find_identifier("set_blocking", outp->file->prog);
      outp->write_off  = find_identifier("write", outp->file->prog);

      if (outp->write_off < 0 || outp->set_nb_off < 0 || outp->set_b_off < 0) 
      {
	free(outp);
	Pike_error("_Caudium.nbio()->output: illegal file object%s%s%s\n",
		   ((outp->write_off < 0)?"; no write":""),
		   ((outp->set_nb_off < 0)?"; no set_nonblocking":""),
		   ((outp->set_b_off < 0)?"; no set_blocking":""));
      }

      DERR(fprintf(stderr, "New output (fd = %d)\n", outp->fd));
      outp->mode = ACTIVE;
      add_ref(outp->file);
      THIS->outp = outp;
      noutputs++;
      /* Set up the read callback. We don't need a close callback since
       * it never will be called w/o a read_callback (which we don't want one).
       */
      set_outp_write_cb(outp);
    }
  } else {
    SIMPLE_TOO_FEW_ARGS_ERROR("_Caudium.nbio()->output", 1);
  }
  pop_n_elems(args-1);
}
Beispiel #4
0
void bar_teardown(struct bar *bar) {
	free_config(bar->config);
	free_output(bar->output);
	free_status_line(bar->status);

	/* close sockets/pipes */
	if (bar->status_read_fd) {
		close(bar->status_read_fd);
	}

	if (bar->ipc_socketfd) {
		close(bar->ipc_socketfd);
	}

	if (bar->ipc_event_socketfd) {
		close(bar->ipc_event_socketfd);
	}

	/* terminate status command process */
	terminate_status_command(bar->status_command_pid);
}
Beispiel #5
0
/* Called when the sending is finished. Either due to broken connection
 * or no more data to send.
 */
static void finished(void)
{
  DERR(fprintf(stderr, "Done writing (%d sent)\n", (INT32)THIS->written));

  THIS->finished   = 1;
  while(THIS->inputs != NULL) {
    free_input(THIS->inputs);
  }

  if(THIS->outp != NULL) {
    free_output(THIS->outp);
    THIS->outp = NULL;
  }

  if(THIS->cb.type != T_INT)
  {
    DERR(fprintf(stderr, "Calling done callback\n"));
    push_svalue(&(THIS->args));
    apply_svalue(&(THIS->cb),1);
    pop_stack();
  }
}
Beispiel #6
0
// this function is called by the FORTRAN part of ATLAS
int fit_wrapper_ (double *spec_f, int *ntheta_f, int *nk_f, int *nnu_f, double *delta_k_f, double *delta_nu_f, 
		char *fname_guess, int *verbose_f, int *nmodes, float *dataout, int *narr, int *karr, int *kstart, int *kend)
{
	FILE *fp;
	int retval, ii, ij, junk, printback, verbose, ntheta, nk, nnu, ind;
	double delta_k, delta_nu, ***spec;
	int nummodes, *guess_k;
	double *guess_freq, *guess_amp, *guess_width;
	cl_tag tag;

	// file names
	char fname_pspec[FNAMELEN], fname_output[FNAMELEN];
	char fname_back[FNAMELEN];

	inputs inp; // struct containing all of the inputs for mrf
	outputs outp; // struct containing all of the outputs

	verbose = *verbose_f;
	ntheta = *ntheta_f;
	nk = *nk_f;
	nnu = *nnu_f;
	delta_k = *delta_k_f;
	delta_nu = *delta_nu_f;

	// make room for spectrum
	ind = 0;
	spec = (double***) malloc(nnu*sizeof(double**));
	for (ii=0; ii<nnu; ii++)
	{
		spec[ii] = (double**) malloc(nk*sizeof(double*));
		for (ij=0; ij<nk; ij++)
		{
			spec[ii][ij] = (double*) malloc(ntheta*sizeof(double));
			if (spec[ii][ij]==NULL)
			{
				printf("Error allocating memory.\n");
				return EXIT_FAILURE;
			} else {
				memcpy(spec[ii][ij], &(spec_f[ind]), ntheta*sizeof(double));
				ind += ntheta;
			}
		}
	}

	
	// load power spectrum data into input struct
	inp.pspec = spec;
	inp.pspec_ntheta = ntheta;
	inp.pspec_nk = nk;
	inp.pspec_nnu = nnu;
	inp.pspec_delta_k = delta_k;
	inp.pspec_delta_nu = delta_nu;
	
	// tell code that it needs to convert a pspec in log-power, kx-ky to one of linear-power, tht-k
	inp.convert_cart_polar = 0;

	// read a guess table
	//retval = read_model_file_testing ("16_deg.model", &nummodes, &guess_k, &guess_freq, &guess_amp, &guess_width, verbose);
  nummodes = guess_table_num;
  guess_k = (int*) malloc(nummodes * sizeof(int));
  guess_freq = (double*) malloc(nummodes * sizeof(double));
  guess_amp = (double*) malloc(nummodes * sizeof(double));
  guess_width = (double*) malloc(nummodes * sizeof(double));
  memcpy(guess_k, guess_table_k, nummodes * sizeof(int));
  memcpy(guess_freq, guess_table_freq, nummodes * sizeof(double));
  memcpy(guess_amp, guess_table_amp, nummodes * sizeof(double));
  memcpy(guess_width, guess_table_width, nummodes * sizeof(double));

	// load guess table into input struct
	inp.guess_nummodes = nummodes;
	inp.guess_k = guess_k; // wavenumber index
	inp.guess_freq = guess_freq;
	inp.guess_amp = guess_amp;
	inp.guess_width = guess_width;

	// set up run parameters
	// check meanings in interface.h
	inp.verbose = 0;//verbose;
	inp.dofits = 1;
	inp.fit_above = 2;
	inp.ac_cutoff = 4500.0;
	inp.detect_ridge = 1.;
	inp.kstart = *kstart;
	inp.kend = *kend;
	inp.ftol = 1e-8;
	inp.xtol = 1e-4;
	inp.gtol = 1e-8;
	inp.niter = 400;
	inp.output_covar = 0;

	// recording the entire covariance matrix is a pain
	// mostly from a data organization perspective
	// call fitting procedure
	if (verbose) printf("Calling fitting.. (%d-%d)\n", *kstart, *kend);
	mrf_fit(&inp, &outp);
	if (verbose) printf("Done fitting.\n");

	// do something with outputs
	if (verbose) printf("Total Modes Fit between (%d-%d) = %d\n", *kstart, *kend, outp.nummodes);

	*nmodes = outp.nummodes;

	for (ii=0; ii<outp.nummodes; ii++)
	{
		(narr)[ii] = outp.mode_n[ii];
		(karr)[ii] = outp.mode_k[ii];
		(dataout)[ii*4+0] = outp.mode_ux[ii];
		(dataout)[ii*4+1] = outp.mode_err_ux[ii];
		(dataout)[ii*4+2] = outp.mode_uy[ii];
		(dataout)[ii*4+3] = outp.mode_err_uy[ii];
	}

	/*fp = fopen(fname_output, "w");
	for (ii=0; ii<outp.nummodes; ii++)
	{
		// obviously there are more parameters that can be printed
		// check interface.h, outputs struct for all of the mode_* parameters
		fprintf(fp, "%d\t%e\t%e\t%e\t%e\t%e\t%e\t%e\t%e\t%e\t%e\t%e\t%e\t%e\t%e\t%e\t%e\t%e\t%e\t%d\t%d\t%d\n", 
				outp.mode_k[ii], 
				(outp.mode_k[ii]+1)*delta_k, // the wavenumber in Mm^-1
				outp.mode_freq[ii] / ((outp.mode_k[ii]+1)*delta_k),
				outp.mode_freq[ii], outp.mode_err_freq[ii], 
				outp.mode_amp[ii], outp.mode_err_amp[ii], 
				outp.mode_width[ii], outp.mode_err_width[ii],
				outp.mode_ux[ii], outp.mode_err_ux[ii], 
				outp.mode_uy[ii], outp.mode_err_uy[ii], 
				outp.mode_fanis[ii], outp.mode_err_fanis[ii], 
				outp.mode_thtanis[ii], outp.mode_err_thtanis[ii], 
				0.0, 0.0, 
				outp.mode_n[ii],
				outp.mode_mpreturn[ii], // return code from optimization. used for data culling
				outp.mode_failure[ii]); // failure mode tag. also used for culling
	}
	fclose(fp);
*/

	// free memory? probably important..
	// TODO: free memory...

  free_output(&outp);

  free(guess_k);
  free(guess_freq);
  free(guess_amp);
  free(guess_width);
	return 0;
}