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

« back to all changes in this revision

Viewing changes to stdred/ccdred/libsrc/exmed.c

  • Committer: Package Import Robot
  • Author(s): Ole Streicher
  • Date: 2015-03-17 15:17:38 UTC
  • mfrom: (1.1.4)
  • Revision ID: package-import@ubuntu.com-20150317151738-04qxxeqm36oful9i
Tags: 15.02pl1.1-1~exp1
New upstream version

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#include "midas_def.h"
 
2
 
 
3
int exmed(actio,ino,zbins,npix,spix,epix,valmed,stat)
 
4
int      actio, ino, *npix, *spix, *epix, stat;
 
5
float    *zbins, *valmed;
 
6
{
 
7
  int      iav,n,chunka,chunkb,nn;
 
8
  int      na,nb,insiz,outsiz;
 
9
  int      uni,ibuf[8];
 
10
  int      imnox,imnoy;
 
11
  char     *pntrx, *pntry;
 
12
  float    rbuf[8], *fptrx, *fptry;
 
13
 
 
14
  int  datmov(), sortmed();
 
15
 
 
16
 
 
17
 
 
18
  if (actio == 5)                           /* plane option */
 
19
    {
 
20
      insiz = npix[1] * npix[2];
 
21
      outsiz = insiz;
 
22
      na = (spix[2]*insiz) + 1;
 
23
      stat = SCFCRE("middstat2",D_R4_FORMAT,F_X_MODE,F_IMA_TYPE,outsiz,&imnoy);
 
24
      stat = SCFMAP(imnoy,F_X_MODE,1,outsiz,&iav,&pntry);
 
25
      stat = SCFGET(ino,na,insiz,&iav,pntry);
 
26
      fptry = (float*) pntry;
 
27
    }
 
28
  else if (actio != 0)                      /* subframe input */
 
29
    {
 
30
      nn = epix[1]-spix[1]+1;
 
31
      insiz = npix[1] * nn;                 /* size of full y-strip */
 
32
      chunka = npix[1];
 
33
      chunkb = epix[0] - spix[0] + 1;
 
34
      outsiz = chunkb * nn;
 
35
      na = spix[1]*npix[1] + 1;
 
36
 
 
37
      stat = SCFCRE("middstat1",D_R4_FORMAT,F_X_MODE,F_IMA_TYPE,chunka,&imnox);
 
38
      stat = SCFMAP(imnox,F_X_MODE,1,chunka,&iav,&pntrx);
 
39
      stat = SCFCRE("middstat2",D_R4_FORMAT,F_X_MODE,F_IMA_TYPE,outsiz,&imnoy);
 
40
      stat = SCFMAP(imnoy,F_X_MODE,1,outsiz,&iav,&pntry);
 
41
      fptrx = (float*) pntrx;
 
42
      fptry = (float*) pntry;
 
43
      nb = 1;
 
44
      for (n=1;n<=nn;n++)
 
45
        {
 
46
          stat = SCFGET(ino,na,chunka,&iav,pntrx);
 
47
          datmov(fptrx,nb-1,chunkb,spix[0],fptry);
 
48
          na = na + chunka;
 
49
          nb = nb + chunkb;
 
50
        }
 
51
      stat = SCFCLO(imnox);
 
52
    }
 
53
  else                                         /* full frame */
 
54
    {
 
55
      insiz = npix[1] * npix[2] * npix[3];
 
56
      outsiz = insiz;
 
57
      stat = SCFCRE("middstat2",D_R4_FORMAT,F_X_MODE,F_IMA_TYPE,outsiz,&imnoy);
 
58
      stat = SCFMAP(imnoy,F_X_MODE,1,outsiz,&iav,&pntry);
 
59
      stat = SCFGET(ino,1,insiz,&iav,pntry);
 
60
      fptry = (float*) pntry;
 
61
    }
 
62
 
 
63
/* sort array + return median */
 
64
  na = (outsiz+1)/2;                             /* index of median */
 
65
  fptry = fptry - 1;
 
66
 
 
67
  stat = sortmed(fptry,zbins,outsiz,na,valmed);
 
68
 
 
69
  if (stat == -1)
 
70
    {
 
71
      SCTPUT("no pixels found with data in given interval...");
 
72
      for (n=1;n<8;n++)
 
73
        {
 
74
          rbuf[n] = -1.0;
 
75
          ibuf[n] = -1;
 
76
        }
 
77
      stat = SCKWRR("OUTPUTR",rbuf,1,7,&uni);
 
78
      stat = SCKWRI("OUTPUTI",ibuf,1,7,&uni);
 
79
      SCFCLO(imnoy);                       /* keep value of stat */
 
80
    }
 
81
  else
 
82
    {
 
83
      stat = SCKWRR("OUTPUTR",valmed,8,1,&uni);
 
84
      stat = SCFCLO(imnoy);
 
85
    }
 
86
 
 
87
  return(0);
 
88
}
 
89
 
 
90
 
 
91
 
 
92
int datmov(a,off,chunk,spix,y)
 
93
int      off,chunk,spix;
 
94
float    *a, *y;
 
95
{
 
96
  int   n, nn;
 
97
 
 
98
  for (n=spix,nn=off;n<spix+chunk;n++,nn++) y[nn] = a[n];
 
99
 
 
100
  return(0);
 
101
}