/* routine.c  Ensemble de routines pour la photometrie de Geneve
 */

/* parmf.c  Calcul des indices et parametres de Geneve

            Definition des codes des parametres:

            INDICES           PARAMETRES     DIVERS

            1:  U-B           15:  d         31:  beta
            2:  B-V           16:  delta     32:  D(V1-G)
            3:  U-B1          17:  g
            4:  U-B2          18:  m2
            5:  B1-B2         19:  x
            6:  B2-V1         20:  y
            7:  B2-G          21:  z
            8:  V1-G          22:  l
                              23:  m
                              24:  n
 */
float parmf(c,p)
   float c[7];
   short p;
{
 static short jm[9] = {0,1,0,1,1,3,4,4,5};
 static short km[9] = {0,0,2,3,4,4,5,6,6};

 float cy = -0.30;
 short j,k;
 float val,x,y,z;

 if ( p <= 8)                      /* indice de couleur */
    {
     j=jm[p];
     k=km[p];
     return(c[j] - c[k]);
    }

switch (p)
 {
  case 15 :                        /* d */
           val = c[1] - 2.430*c[3] + 1.430*c[4];
           break;
  case 16 :                        /* delta */
           val = c[1] - 1.832*c[4] + 0.832*c[6];
           break;
  case 17 :                        /* g */
           val = c[3] - c[4] - 1.357*c[5] + 1.357*c[6];
           break;
  case 18 :                         /* m2 */
           val = c[3] - 1.457*c[4] + 0.457*c[5];
           break;
  case 19 :                         /* x */
           val = 1.3764*c[1] - 1.2162*c[3] - 0.8498*c[4] -
                 0.1554*c[5] + 0.8450*c[6] + 0.3788;
           break;
  case 20 :                         /* y */
           val = 0.3235*c[1] - 2.3228*c[3] + 2.3363*c[4] +
                 0.7495*c[5] - 1.0865*c[6] - 0.8288;
           if(val < cy)
              val = 9.;
           break;
  case 21 :                         /* z */
           val = 0.0255*c[1] - 0.1740*c[3] + 0.4696*c[4] -
                 1.1205*c[5] + 0.7994*c[6] - 0.4572;
           x = parmf(c,19);
           y = parmf(c,20);
           if(y < 0. && x > 1.25 || y < -0.10)
                val -= 0.1677*y;
           break;
  case 22 :                        /* l */
           val = 1.407*c[1] - 1.902*c[3] - 0.034*c[4] +
                 0.038*c[5] + 0.491*c[6] - 1.080;
           break;
  case 23 :                        /* m */
           val = 0.138*c[1] + 1.810*c[3] - 2.510*c[4] -
                 0.685*c[5] + 1.247*c[6] + 0.340;
           break;
  case 24 :                        /* n */
           val = 0.035*c[1] - 0.039*c[3] - 0.307*c[4] +
                 1.171*c[5] - 0.860*c[6] + 0.352;
           break;
  case 31 :                        /* beta */
           x = parmf(c,19);
           y = parmf(c,20);
           if(y < -0.6)
             val = 9.;
           else
             val = 2.5909+.0667*x-.6801*y-.2559*x*y+.1748*x*x-2.4676*y*y
             +.1448*x*y*y+.2582*x*x*y-.0612*x*x*x+.4418*y*y*y;
           break;
  case 32 :                        /* delta (v1-g) */
           val = 0.302 - 0.289*c[4] + c[5] - 0.711*c[6];
           break;
  }
 return(val);
}
          

 
