#!/opsw/hst/bin/perl

$grating = uc ( $ARGV[0] );

if ( $grating =~ /M$/ )
{
  $ax = 85;
  $bx = 455;
  $alambda = 1100;
  $blambda = 3300;
  $ay = 163;
  $by = 23;
  $apower = 12000;
  $bpower = 38000;
}
elsif ( $grating =~ /L$/ )
{
  $ax = 98;
  $bx = 442;
  $alambda = 1100;
  $blambda = 1900;
  $ay = 161;
  $by = 27;
  $apower = 1500;
  $bpower = 3000;
}
else
{
   print "Unknown grating\n";
   exit 1;
}

$lambda = $ARGV[1];

# 
# $power ($lambda) = ???
#

&$grating;

$power = &Power( $lambda );

if ( ! $power ) { $power = "0"; }

print "lambda: $lambda     power: $power\n\n";

sub Power
{
   my ($lambda) = @_;

   $xlambda = ( $lambda - $alambda ) / ( $blambda - $alambda ) * ( $bx - $ax ) + $ax;

   $ixold = 0;
   for($i = 0; $i <= $#x; $i++)
   {
      $ix = $x[$i];
      $iy = $y[$i];
      if ( $xlambda < $ix && $xlambda > $ixold )
      {
         # Here we are!
         $ypower = ( $iy - $iyold ) / ( $ix - $ixold ) * ( $xlambda - $ixold ) + $iyold;
         $power = ( $bpower - $apower ) / ( $by - $ay ) * ( $ypower - $ay ) + $apower;
         return ( $power );
      }
      $ixold = $ix;
      $iyold = $iy;
   }
}
sub G140M
{
   @x = ( 86, 145, 195);
   @y = ( 127, 91, 56 );
}
sub G160M
{
   @x = ( 103, 117, 195, 237 );
   @y = ( 144, 112, 103, 77 );
}
sub G200M
{
   @x = ( 187, 277, 336 );
   @y = ( 127, 90, 59 );
}
sub G270M
{
   @x = ( 288, 352, 455 );
   @y = ( 106, 82, 34 );
}
sub G140L
{
   @x = ( 100, 377, 424, 451 );
   @y = ( 142, 53, 39, 31 );
}

