IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Dec 22, 2009, 9:52:30 AM (17 years ago)
Author:
eugene
Message:

adding hermitian polynomials and functions

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/20091201/Ohana/src/opihi/cmd.data/hermitian2d.c

    r26463 r26467  
    33int hermitian2d (int argc, char **argv) {
    44 
    5   int i, j, Nx, Ny, N;
     5  int i, j, N, Nx, Ny, Xorder, Yorder, Poly;
    66  float *in;
    7   double Sig_x, Sig_y, Theta;
    8   double root1, root2, R, A1, A2, A3;
    9   double Sx, Sy, Sxy;
    10   double x, y, r, f, Xo, Yo;
     7  double Xo, Yo, sigma;
     8  double x, y, xf, yf, value, norm, weight;
     9  double nf, mf;
    1110  Buffer *buf;
    1211
    13   Poly = FALSE;
     12  // optionally return the Hermitian Polynomial or the Hermitian Function
     13  Poly = FALSE;
    1414  if ((N = get_argument (argc, argv, "-poly"))) {
    1515    Poly = TRUE;
     
    2626  }
    2727
    28   if (argc > 5) {
    29     gprint (GP_ERR, "USAGE: hermitian2d (buffer) (sigma) Xorder Yorder\n");
    30     return (FALSE);
    31   }
     28  if (argc != 5) goto usage;
    3229
    3330  /* select input / output buffers */
     
    4340  Xorder = atof (argv[3]);
    4441  Yorder = atof (argv[4]);
     42  if (Xorder < 0) goto usage;
     43  if (Yorder < 0) goto usage;
     44  if (Xorder > 10) goto usage;
     45  if (Yorder > 10) goto usage;
     46
     47  nf = exp(lgamma(Xorder + 1));
     48  mf = exp(lgamma(Yorder + 1));
     49  norm = 1.0 / sqrt(nf*mf*2*M_PI) / sigma;
    4550
    4651  in = (float *) buf[0].matrix.buffer;
     
    5863      value = xf*yf;
    5964      if (!Poly) {
    60         value *= xf*yf;
     65        weight = norm*exp(-0.25*(x*x + y*y));
     66        value *= weight;
    6167      }
    6268
    63       *in += xf*yf;
     69      *in += value;
    6470    }
    6571  }
    6672
    6773  return (TRUE);
     74
     75usage:
     76  gprint (GP_ERR, "USAGE: hermitian2d (buffer) (sigma) Xorder Yorder\n");
     77  gprint (GP_ERR, "  Note : only orders up to 10 are supported\n");
     78  return (FALSE);
    6879}
Note: See TracChangeset for help on using the changeset viewer.