double *SampleGauss(gauss_t *mp)
{
    int i,j;
    double *v,*aux;

    nonull(v=malloc(mp->dim*sizeof(double)));
    nonull(aux=malloc(mp->dim*sizeof(double)));
    for (i=0; i<mp->dim; i++) aux[i]=BoxMuller();
    for (i=0; i<mp->dim; i++) v[i]=mp->mean[i];
    if (mp->type==DIAG)
        for (i=0; i<mp->dim; i++) v[i]+=mp->dCholesky[i]*aux[i];
    else {
        for (i=0; i<mp->dim; i++)
            for (j=0; j<=i; j++)
                v[i]+=mp->Cholesky[i][j]*aux[j];
    }
    free(aux);
    return v;
}
Exemple #2
0
/* Pack the information from any client method into a generic xmlrpc
   struct to send to the server */
xmlrpc_value *
callinfo_pack(xmlrpc_env *envP, struct call_info *cip)
{
  xmlrpc_value *s = xmlrpc_struct_new(envP);
  xmlrpc_value *methargs = xmlrpc_array_new(envP);
  xmlrpc_value *files = xmlrpc_array_new(envP);
  int i;

  xmlrpc_struct_set_value(envP, s, "clientIP", xmlrpc_string_new(envP, nonull(cip->clientIP)));
  xmlrpc_struct_set_value(envP, s, "serverURL", xmlrpc_string_new(envP, nonull(cip->serverURL)));
  xmlrpc_struct_set_value(envP, s, "session", xmlrpc_string_new(envP, nonull(cip->session)));
  xmlrpc_struct_set_value(envP, s, "method", xmlrpc_string_new(envP, nonull(cip->method)));
  xmlrpc_struct_set_value(envP, s, "user", xmlrpc_string_new(envP, nonull(cip->user)));
  xmlrpc_struct_set_value(envP, s, "password", xmlrpc_string_new(envP, nonull(cip->password)));
  xmlrpc_struct_set_value(envP, s, "project", xmlrpc_string_new(envP, nonull(cip->project)));
  xmlrpc_struct_set_value(envP, s, "version", xmlrpc_string_new(envP, nonull(cip->version)));

  if (cip->methodargs)
    {
      for (i = 0; cip->methodargs[i]; ++i)
	{
	  if (!strncmp(cip->methodargs[i], "file:", 5))
	    {
	      char *file_what, *file_name;
	      
	      file_what = strdup(&cip->methodargs[i][5]);
	      file_name = strchr(file_what, '=');
	      if (file_name)
		{
		  xmlrpc_value * fstruct;
		  *file_name++ = '\0';
		  fstruct = file_pack(envP, file_what, file_name);
		  xmlrpc_array_append_item(envP, files, fstruct);
		}
	      else
		{
		  fprintf(stderr, "oracc-client: bad -Mfile arg, expected -Mfile:WHAT=NAME\n");
		  exit(1);
		}
	    }
	  else
	    xmlrpc_array_append_item(envP, methargs, xmlrpc_string_new(envP, cip->methodargs[i]));
	}
    }

  xmlrpc_struct_set_value(envP, s, "method-args", methargs);
  xmlrpc_struct_set_value(envP, s, "method-data", files);

  return s;
}
Exemple #3
0
static void dns_event_failure(struct resolve *rp, int type)
{
  if (!rp)
    return;

  if (type == T_PTR) {
    static char s[UHOSTLEN];

    debug1("DNS resolve failed for %s", iptostr(rp->ip));
    strcpy(s, iptostr(rp->ip));
    call_hostbyip(ntohl(rp->ip), s, 0);
  } else if (type == T_A) {
    debug1("DNS resolve failed for %s", rp->hostn);
    call_ipbyhost(rp->hostn, 0, 0);
  } else
    debug2("DNS resolve failed for unknown %s / %s", iptostr(rp->ip),
           nonull(rp->hostn));
  return;
}
gauss_t *GetGauss(FILE *fp)
{
    char line[MLL],*cp;
    int i,j;
    gauss_t *mp;

    if (verbose) fprintf(stderr,"Reading Gaussian...\n");
    nonull(mp=malloc(sizeof(gauss_t)));
    mp->dim=1;
    mp->type=FULL;
    mp->prior_prob=0.0;
    while (1) {
        if (fgets(line,MLL,fp)==NULL) {
            mp->type=UNKNOWN;
            break;
        }
        if ((cp=strtok(line,IFS))==NULL) continue;
        if (strcmp(cp,"GAUSS")!=0) continue;
        if ((cp=strtok(NULL,IFS))==NULL) continue;
        nonull(mp->label=malloc((strlen(cp)+1)*sizeof(char)));
        strcpy(mp->label,cp);
        if ((cp=strtok(NULL,IFS))==NULL) break;
        if ((mp->dim=atoi(cp))<1) {
            free(mp->label);
            continue;
        }
        if ((cp=strtok(NULL,IFS))==NULL) break;
        if (strncmp(cp,"Diagonal",1)==0) mp->type=DIAG;
        if ((cp=strtok(NULL,IFS))!=NULL) mp->prior_prob=atof(cp);
        if (verbose) {
            fprintf(stderr,"label=%s dim=%d ",mp->label,mp->dim);
            if (mp->type==DIAG) fprintf(stderr,"type=Diag\n");
            else fprintf(stderr,"type=Full\n");
        }
        break;
    }
    if (mp->type==UNKNOWN) {
        if (verbose) fprintf(stderr,"no more gaussians.\n");
        return NULL;
    }
    if (verbose) fprintf(stderr,"mean...\n");
    nonull(mp->mean=malloc(mp->dim*sizeof(double)));
    nonull(GetVector(fp,mp->dim,mp->mean));
    if (verbose) fprintf(stderr,"covariance matrix...\n");
    if (mp->type==DIAG) {
        mp->covar=mp->Cholesky=NULL;
        nonull(mp->dcovar=malloc(mp->dim*sizeof(double)));
        nonull(GetVector(fp,mp->dim,mp->dcovar));
        nonull(mp->dCholesky=malloc(mp->dim*sizeof(double)));
        for (i=0; i<mp->dim; i++) mp->dCholesky[i]=sqrt(mp->dcovar[i]);
    }
    else {
        mp->dcovar=mp->dCholesky=NULL;
        nonull(mp->covar=malloc(mp->dim*sizeof(double *)));
        nonull(mp->Cholesky=malloc(mp->dim*sizeof(double *)));
        for (i=0; i<mp->dim; i++) {
            nonull(mp->covar[i]=malloc((i+1)*sizeof(double)));
            nonull(GetVector(fp,i+1,mp->covar[i]));
            nonull(mp->Cholesky[i]=malloc((i+1)*sizeof(double)));
            for (j=0; j<=i; j++) mp->Cholesky[i][j]=mp->covar[i][j];
        }
        Cholesky(mp->dim,mp->Cholesky);
    }
    if (verbose) fprintf(stderr,"end GAUSS.\n");
    return mp;
}