Beispiel #1
0
real get_omega(real ekin,int *seed,FILE *fp,char *fn)
{
  static t_p2Ddata *p2Ddata = NULL;
  real r,ome,fx,fy;
  int  eindex,oindex;
  
  if (p2Ddata == NULL) 
    p2Ddata = read_p2Ddata(fn);
  
  /* Get energy index by binary search */
  if ((eindex = my_bsearch(ekin,p2Ddata->nener,p2Ddata->ener,TRUE)) >= 0) {
#ifdef DEBUG
    if (eindex >= p2Ddata->nener)
      gmx_fatal(FARGS,"eindex (%d) out of range (max %d) in get_omega",
		  eindex,p2Ddata->nener);
#endif

    /* Start with random number */
    r = rando(seed);
    
    /* Do binary search in the energy table */
    if ((oindex = my_bsearch(r,p2Ddata->n2Ddata,p2Ddata->prob[eindex],TRUE)) >= 0) {
#ifdef DEBUG
      if (oindex >= p2Ddata->n2Ddata)
	gmx_fatal(FARGS,"oindex (%d) out of range (max %d) in get_omega",
		    oindex,p2Ddata->n2Ddata);
#endif

      fy = ((r-p2Ddata->prob[eindex][oindex])/
	    (p2Ddata->prob[eindex][oindex+1]-p2Ddata->prob[eindex][oindex]));
      ome = interpolate2D(p2Ddata->nener,p2Ddata->n2Ddata,p2Ddata->ener,
			  p2Ddata->data,ekin,fy,
			  eindex,oindex);
      /* ome = p2Ddata->data[eindex][oindex];*/
      
      if (fp) 
	fprintf(fp,"%8.3f  %8.3f\n",ome,r);
      
      return ome;
    }
  }
  return 0;
}
UtilityInterval DistXContourTest::eval(IAssignment ass) const
{
    UtilityInterval ui(0.0, 0.0);

    std::pair<double, double> lastpoint;
    lastpoint.first = -18000 / 2;
    lastpoint.second = xMinVal;

    std::pair<double, double> nextpoint;
    nextpoint.first = 18000 / 2;
    nextpoint.second = xMaxVal;

    double val = 0;
    if (contourPoints.empty()) {
        return ui;
    }
    for (int i = 0; i < static_cast<int>(contourPoints.size()); ++i) {
        if (contourPoints[i].first < xAlloBall && contourPoints[i].first > lastpoint.first) {
            lastpoint = contourPoints[i];
        }

        if (contourPoints[i].first > xAlloBall && contourPoints[i].first < nextpoint.first) {
            nextpoint = contourPoints[i];
        }
    }
    if (xAlloBall > 18000 / 2)
        val = xMaxVal;
    else if (xAlloBall < -18000 / 2)
        val = xMinVal;
    else
        val = interpolate2D(lastpoint.first, lastpoint.second, nextpoint.first, nextpoint.second, xAlloBall);

    ui.setMin(val);
    ui.setMax(val);
    return ui;
}
Beispiel #3
0
/*linear*/
void rot2dlin (float *image,float *rotimg,long sx,long sy,float *p_phi,float px,float py,int euler_dim)
{
float rm00, rm01, rm10, rm11;   /* rot matrix */
float pi, pj;           /* coordinates according to pivot */
float r_x, r_y;         /* rotated pixel */
long  i, j;         /* loop variables */
long  sx_1, sy_1;   /* highest pixels  | image width and height */
/*float *imgp;*/
float phi;


    phi=p_phi[0];

    phi = phi * PI / 180;


    if (euler_dim == 1)
    {
        /* rotation matrix */
        rm00 = cos(phi);
        rm01 = -sin(phi);
        rm10 = sin(phi);
        rm11 = cos(phi);
        /*printf("coeff: %f %f %f %f /n",rm00,rm01,rm10,rm11);*/
    }
    else
    {

        rm00 = p_phi[0];
        rm10 = p_phi[1];
        rm01 = p_phi[2];
        rm11 = p_phi[3];
    }

    sx_1 = sx - 1; /*width*/
    sy_1 = sy - 1; /*height*/
    for (pj=-py, j=0; j<sy; j++, pj++)
    {
        for (pi=-px, i=0; i<sx; i++, pi++)
        {


            /* transformation of coordinates (rotataion)*/
            r_x = px + rm00 * pi + rm10 * pj;
            if (r_x < 0 || r_x > sx_1 )
            {
                *rotimg++ = 0;    /* pixel not inside -> set 0*/
                continue;
            }
            r_y = py + rm01 * pi + rm11 * pj;
            if (r_y < 0 || r_y > sy_1 )
            {
                *rotimg++ = 0;
                continue;
            }

            /* Interpolation */

            *rotimg++ = interpolate2D(image,sx,sy, r_x,r_y,__TOM_INTERPOL_LINEAR);
        }
    }
}
Beispiel #4
0
/*cubic spline*/
void rot2dcspline (float *image,float *rotimg,long sx,long sy,float *p_phi,float px,float py,int euler_dim,float* fact)
{
float rm00, rm01, rm10, rm11;   /* rot matrix */
float pi, pj;           /* coordinates according to pivot */
float r_x, r_y;         /* rotated pixel */
long  i, j;         /* loop variables */
long  sx_1, sy_1;   /* highest pixels  | image width and height */
/*long  floorx, floory;*/       /* rotated coordinates as integer */
/*float vx1, vx2;*/     /* interp. parameter */
/*float vy1, vy2;*/     /*  ... */
/*float *imgp;*/
float phi;
float f1,f2,f3,f4;
long borderx1,borderx2,bordery1,bordery2;

phi=p_phi[0];

phi = phi * PI / 180;


if (euler_dim == 1)
{
    /* rotation matrix */
    rm00 = cos(phi);
    rm01 = -sin(phi);
    rm10 = sin(phi);
    rm11 = cos(phi);
    /*printf("coeff: %f %f %f %f /n",rm00,rm01,rm10,rm11);*/
}
else
{

    rm00 = p_phi[0];
    rm10 = p_phi[1];
    rm01 = p_phi[2];
    rm11 = p_phi[3];
}

/*cubic spline interpolation*/
    sx_1 = sx - 1;
    sy_1 = sy - 1;


    /*values for natural spline , quadratic*/

    if(fact != NULL){
            f1=fact[0];/* -0.1556; 1556 , 0940*/
            f2=fact[1];/* 0.3111; 3111 , 1880*/
            f3=fact[2];/* -0.0889; 0889 , 0342*/
            f4=fact[3];/* 0.0444; 0444 , 0171*/
    }else{
            f1= -0.1556;
            f2=0.3111;
            f3=-0.0889;
            f4=0.0444;
    }

    borderx1=2;
    bordery1=2;
    borderx2=sx-2;
    bordery2=sy-2;

    for (pj=-py, j=0; j<sy; j++, pj++)
    {

        for (pi=-px, i=0; i<sx; i++, pi++)
        {

            /*printf("x%d y%d %d %d\n",sx,sy,i,j);*/
            /* transformation of coordinates */
            /* rotate pixel of interest */
            r_x = px + rm00 * pi + rm10 * pj;
            r_y = py + rm01 * pi + rm11 * pj;

             /*if any point of interpolation square out of bounds, return linear2D interpolation or 0*/
            if (r_x < borderx1 || r_x > borderx2 || r_y < borderx1 || r_y > bordery2)
            {
                if(r_x < 1 || r_x > sx-1 || r_y < 1 || r_y > sy-1){
                    /*if not in image anymore, return 0*/
                    *rotimg++ = 0;
                    continue;
                }
                *rotimg++ = interpolate2D(image,sx,sy, r_x,r_y,__TOM_INTERPOL_LINEAR);
            }else{
                *rotimg++ = interpolate2D(image,sx,sy, r_x,r_y,__TOM_INTERPOL_CSPLINE);
            }
        }
    }
}
Beispiel #5
0
void rot2dcubic(float *image,float *rotimg,long sx,long sy,float *p_phi,float px,float py,int euler_dim){
float rm00, rm01, rm10, rm11;   /* rot matrix */
float pi, pj;           /* coordinates according to pivot */
float r_x, r_y;         /* rotated pixel */
long  i, j;         /* loop variables */
/*long  sx_1, sy_1; *//* highest pixels  | image width and height */
/*float *imgp;*/
float phi;

long borderx1,borderx2,bordery1,bordery2;
phi=p_phi[0];

phi = phi * PI / 180;


    if (euler_dim == 1)
    {
        /* rotation matrix */
        rm00 = cos(phi);
        rm01 = -sin(phi);
        rm10 = sin(phi);
        rm11 = cos(phi);
        /*printf("coeff: %f %f %f %f /n",rm00,rm01,rm10,rm11);*/
    }
    else
    {

        rm00 = p_phi[0];
        rm10 = p_phi[1];
        rm01 = p_phi[2];
        rm11 = p_phi[3];
    }

    borderx1=1;
    bordery1=1;
    borderx2=sx-1;
    bordery2=sy-1;

    for (pj=-py, j=0; j<sy; j++, pj++)
    {

        for (pi=-px, i=0; i<sx; i++, pi++)
        {

            /*printf("x%d y%d %d %d\n",sx,sy,i,j);*/
            /* transformation of coordinates */
            /* rotate pixel of interest */
            r_x = px + rm00 * pi + rm10 * pj;
            r_y = py + rm01 * pi + rm11 * pj;

             /*if any point of interpolation square out of bounds, return linear2D interpolation or 0*/
            if (r_x < borderx1 || r_x > borderx2 || r_y < borderx1 || r_y > bordery2)
            {
                if(r_x < 1 || r_x > sx-1 || r_y < 1 || r_y > sy-1){
                    /*if not in image anymore, return 0*/
                    *rotimg++ = 0;
                    continue;
                }
                *rotimg++ = interpolate2D(image,sx,sy, r_x,r_y,__TOM_INTERPOL_LINEAR);
            }else{
                *rotimg++ = interpolate2D(image,sx,sy, r_x,r_y,__TOM_INTERPOL_CUBIC);
            }
        }
    }
}