~ubuntu-branches/debian/sid/eso-midas/sid

« back to all changes in this revision

Viewing changes to stdred/feros/libsrc/spatial_profile.c

  • Committer: Package Import Robot
  • Author(s): Ole Streicher
  • Date: 2015-06-10 14:20:37 UTC
  • mfrom: (1.2.1) (6.1.9 experimental)
  • Revision ID: package-import@ubuntu.com-20150610142037-6iowpbtyjrpou36o
Tags: 15.02pl1.3-1
* New upstream version
* Add CI tests
* Move back to unstable

Show diffs side-by-side

added added

removed removed

Lines of Context:
24
24
 
25
25
/* FEROS specific includes */
26
26
 
27
 
#include <proto_nrutil.h>
28
 
#include <proto_mutil.h>
29
 
#include <dlfit.h>
 
27
#include "cpl_matrix.h"
 
28
#include <nrutil.h>
 
29
#include <mutil.h>
30
30
 
31
31
static float rrrarg1, rrrarg2;
32
32
 
291
291
     double ad[];
292
292
#endif
293
293
     
294
 
/*      fit a polynomial (Numerical Recipes), modified for echelle!  */
 
294
/*      fit a polynomial, modified for echelle!  */
295
295
 
296
296
{
297
297
 
339
339
     double *ad;
340
340
#endif
341
341
 
342
 
/*      fit a polynomial (Numerical Recipes), modified for echelle!  */
 
342
/*      fit a polynomial, modified for echelle!  */
343
343
 
344
344
{
345
345
  /*  float xout;*/
346
 
  double xout;
347
 
  double *xin, *yin;
348
346
  int i;
349
 
 
350
 
  /* new - dlfit not lfit*/
351
 
  double *sig, chisq, **covar;
352
 
  int    *ia;
353
 
 
354
 
  covar = (double **) dmatrix (1, fit_deg, 1, fit_deg);
355
 
  sig = (double *) dvector (1, npixi);
356
 
  ia = (int *) ivector (1, fit_deg);
357
 
 
358
 
  xin = (double *) dvector (1, npixi);
359
 
  yin = (double *) dvector (1, npixi);
360
 
 
361
 
 
362
 
 
 
347
  cpl_vector * sample = cpl_vector_new(npixi);
 
348
  cpl_vector * values = cpl_vector_new(npixi);
 
349
  cpl_vector * errors = cpl_vector_new(npixi);
363
350
  for (i = 0; i < npixi; i++)
364
351
    {
365
 
      xin[i+1] = (double) ximage[i];
366
 
      yin[i+1] = (double) inimage[i];
367
 
      sig[i+1] = (double) sigin[i];;
368
 
    }
369
 
  for (i = 1 ; i <= fit_deg ; i++)
370
 
    ia[i] = 1;
371
 
 
372
 
 
373
 
  dlfit (xin, yin, sig, npixi, ad, ia, fit_deg, covar, &chisq, dpoly);
374
 
 
375
 
  for (i = 0; i < npixo; i++)
376
 
    {
377
 
      xout = (double) ximageo[i];
378
 
      outimage[i] = (float) eval_dpoly (xout, ad, fit_deg);
379
 
    }
380
 
 
381
 
 
382
 
  free_dvector(xin, 1, npixi); 
383
 
  free_dvector(yin, 1, npixi);
384
 
  free_dvector(sig, 1, npixi);
385
 
  free_dmatrix(covar, 1, fit_deg, 1, fit_deg);
386
 
  free_ivector(ia, 1, fit_deg);
 
352
      cpl_vector_set(sample, i, ximage[i]);
 
353
      cpl_vector_set(values, i, inimage[i]);
 
354
      cpl_vector_set(errors, i, sigin[i]);
 
355
    }
 
356
  cpl_matrix * design = polyvander1d(sample, fit_deg - 1);
 
357
  cpl_matrix * coef;
 
358
  lsqfit(design, values, errors, &coef);
 
359
  cpl_vector_delete(sample);
 
360
  cpl_matrix_delete(design);
 
361
  sample = cpl_vector_new(npixo);
 
362
  for (i = 0; i < npixo; i++)
 
363
    {
 
364
      cpl_vector_set(sample, i, ximageo[i]);
 
365
    }
 
366
  design = polyvander1d(sample, fit_deg - 1);
 
367
  cpl_vector * fitted = eval_poly(design, coef);
 
368
 
 
369
  for (i = 0; i < npixo; i++)
 
370
    {
 
371
      outimage[i] = cpl_vector_get(fitted, i);
 
372
    }
 
373
  for (i = 1; i <= fit_deg; i++) {
 
374
      ad[i] = cpl_matrix_get(coef, i - 1, 0);
 
375
  }
 
376
 
 
377
  cpl_vector_delete(sample);
 
378
  cpl_vector_delete(values);
 
379
  cpl_vector_delete(errors);
 
380
  cpl_vector_delete(fitted);
 
381
  cpl_matrix_delete(coef);
 
382
  cpl_matrix_delete(design);
387
383
}
388
384