#!/usr/bin/perl

##########################################################################
# mkappNQimgNL.pl
# revised on 20080704
# by FUJIWARA Hideaki
# revised on 20080717
# by KATAZA
##########################################################################

use strict; # to avoid mistake

# ---------------- Default Parameters 

# Nickname and name for N filters 
my @NimgN = ("N78", "N88" ,"N97" ,"N105" ,"N117" ,"N124" ,"U86"   ,"U112"   );
my @NimgF = ("N7.8","N8.8","N9.7","N10.5","N11.7","N12.4","UIR8.6","UIR11.2");

# Nickname and name for Q filters
my @QimgN = ("Q177" ,"Q188" ,"Q205" ,"Q245"      );
my @QimgF = ("Q17.7","Q18.8","Q20.5","Q24.5_TEST");

# Telescope Parameters
my $chopthrow = 30 ; # Chopping Throw
my $choppa ; # Chopping PA is -(Inst_PA) for Imaging, and -(Inst_PA)-1 for NL
my $nodthrow = "not_used" ; # Nod Throw
my $nodpa    = "not_used" ; # Nod PA    
my $instpa ; # Inst. PA is given by target list file
my $offsetx = -$chopthrow/2 ; # Offset X
my $offsety = 8 ;             # Offset Y
my $autoguide = "OFF" ;       # Auto Guide

# Other parameters
my $readpriority = "ND_Readout" ; # Readout Priority
my $integNimg =   9 ; # Integration Time for Nimg
my $integQimg = 100 ; # Integration Time for Qimg
my $integNL   =  45 ; # Integration Time for NL 
my $modeNimg = "Raw"; # CoAdd mode for Nimg
my $modeQimg = "Add"; # CoAdd mode for Qimg
my $modeNL   = "Add"; # CoAdd mode for NL

# ---------------- Check COMMAND LINE
if(($#ARGV != 0)) {
    &print_usage;
    die("Number of Parameter is not vaild  ");
}

# ---------------- Read Target List File
my $targetlist=$ARGV[0];

my ($target,$ra,$dec,$tgttype,$type);

open(g,"<$targetlist");
while(<g>){
    if(/^#/){ next ; }
    my @a=split;
    if($#a < 4 ) { next ; }
    $target=@a[0];
    $ra=@a[1];
    $dec=@a[2];
    $instpa=@a[3];
    $choppa=-$instpa;
    $tgttype=@a[4];
    if($tgttype eq 'OBJECT'){ $type='O'; $readpriority = "ND_Readout" ; }
    else{                     $type='S'; $readpriority = "Partially_Readout";}
    for(my $i=0;$i<=$#NimgN;++$i){
      my $fname = sprintf("%s_%s_%s.app",$type,$target,$NimgN[$i]);
      &Print_Img("N",$fname,$target,$ra,$dec,$chopthrow,$choppa,
                 $nodthrow,$nodpa,$instpa,$offsetx,$offsety,$autoguide,
                 $NimgF[$i],$integNimg,$readpriority,$modeNimg,$tgttype)
    }
    for(my $i=0;$i<=$#QimgN;++$i){
      my $fname = sprintf("%s_%s_%s.app",$type,$target,$QimgN[$i]);
      &Print_Img("Q",$fname,$target,$ra,$dec,$chopthrow,$choppa,
                 $nodthrow,$nodpa,$instpa,$offsetx,$offsety,$autoguide,
                 $QimgF[$i],$integQimg,$readpriority,$modeQimg,$tgttype)
    }
    my $fname = sprintf("%s_%s_NL.app",$type,$target);
    &Print_NL($fname,$target,$ra,$dec,$chopthrow,$choppa,$nodthrow,$nodpa,
              $instpa,$offsetx,$offsety,$autoguide,$integNL,
              $modeNL,$tgttype);
}
close(g);
exit ;

##########################################################################
#-------------------------------------------------------------------------
sub Print_Img{
my ($band,$fname,$target,$ra,$dec,$chopthrow,$choppa,$nodthrow,$nodpa,
    $instpa,$offsetx,$offsety,$autoguide,$filter,$integtime,
    $readpriority,$mode,$tgttype) = @_ ;
open ope, ">".$fname ;
printf ope "# START\n";
printf ope "#--------------------------------------------\n";
printf ope "# COMICS Observation Planning Tool\n";
printf ope "#\n";
printf ope "# 2007-6-4 8:55:52 UT\n";
printf ope "#--------------------------------------------\n";
printf ope "Version                = 0.2.3\n";
printf ope "#--------------------------------------------\n";
printf ope "# [Target Information]\n";
printf ope "Target_Name            = %s\n",$target;
printf ope "Target_RA              = %s\n",$ra;
printf ope "Target_Dec             = %s\n",$dec;
printf ope "Equinox                = 2000\n";
printf ope "#--------------------------------------------\n";
printf ope "# [Telescope]\n";
printf ope "Chopping_Throw         = %s\n",$chopthrow;
printf ope "Chopping_PA            = %s\n",$choppa;
printf ope "Nod_Throw              = %s\n",$nodthrow;
printf ope "Nod_PA                 = %s\n",$nodpa;
printf ope "Inst_PA                = %.1f\n",$instpa;
printf ope "Offset_X               = %.1f\n",$offsetx;
printf ope "Offset_Y               = %.1f\n",$offsety;
printf ope "Auto_Guide             = %s\n",$autoguide ;
printf ope "#--------------------------------------------\n";
printf ope "# [COMICS optics]\n";
printf ope "COMICS_Mode            = IMG_%s\n",$band;
printf ope "Imaging_Filter         = %s\n",$filter;
printf ope "Central_Wavelength     = not_used\n";
printf ope "Slit_Width             = mirror\n";
printf ope "#--------------------------------------------\n";
printf ope "# [Detector read out]\n";
printf ope "Integration_Time_1beam = %s\n",$integtime;
printf ope "Readout_Priority       = %s\n",$readpriority;
printf ope "CoAdd_Mode             = %s\n",$mode;
printf ope "#--------------------------------------------\n";
printf ope "# [Reduction Recipe]\n";
printf ope "Reduction_recipe       = %s\n",$tgttype;
printf ope "#--------------------------------------------\n";
printf ope "# [Observation Sequence]\n";
printf ope "Position_adjust        = Enable\n";
printf ope "Repeat                 = 10\n";
printf ope "#--------------------------------------------\n";
printf ope "# [Comments]\n";
printf ope "Comments               = \n";
printf ope "#--------------------------------------------\n";
printf ope "# END\n";
close ope ;
}

#------------------------------------------------------------------------
sub Print_NL{
my ($fname,$target,$ra,$dec,$chopthrow,$choppa,$nodthrow,$nodpa,
    $instpa,$offsetx,$offsety,$autoguide,$integtime,
    $mode,$tgttype) = @_ ;

open ope, ">".$fname ;
printf ope "# START\n";
printf ope "#--------------------------------------------\n";
printf ope "# COMICS Observation Planning Tool\n";
printf ope "#\n";
printf ope "# 2007-6-4 8:55:52 UT\n";
printf ope "#--------------------------------------------\n";
printf ope "Version                = 0.2.3\n";
printf ope "#--------------------------------------------\n";
printf ope "# [Target Information]\n";
printf ope "Target_Name            = %s\n",$target;
printf ope "Target_RA              = %s\n",$ra;
printf ope "Target_Dec             = %s\n",$dec;
printf ope "Equinox                = 2000\n";
printf ope "#--------------------------------------------\n";
printf ope "# [Telescope]\n";
printf ope "Chopping_Throw         = %s\n",$chopthrow;
printf ope "Chopping_PA            = %s\n",$choppa-1;
printf ope "Nod_Throw              = %s\n",$nodthrow;
printf ope "Nod_PA                 = %s\n",$nodpa;
printf ope "Inst_PA                = %.1f\n",$instpa;
printf ope "Offset_X               = %.1f\n",$offsetx;
printf ope "Offset_Y               = %.1f\n",$offsety;
printf ope "Auto_Guide             = %s\n",$autoguide ;
printf ope "#--------------------------------------------\n";
printf ope "# [COMICS optics]\n";
printf ope "COMICS_Mode            = SPC_NL\n";
printf ope "Imaging_Filter         = HOLE\n";
printf ope "Central_Wavelength     = not_used\n";
printf ope "Slit_Width             = 2\n";
printf ope "#--------------------------------------------\n";
printf ope "# [Detector read out]\n";
printf ope "Integration_Time_1beam = %s\n",$integtime;
printf ope "Readout_Priority       = Partially_Readout\n";
printf ope "CoAdd_Mode             = %s\n",$mode;
printf ope "#--------------------------------------------\n";
printf ope "# [Reduction Recipe]\n";
printf ope "Reduction_recipe       = %s\n",$tgttype;
printf ope "#--------------------------------------------\n";
printf ope "# [Observation Sequence]\n";
printf ope "Position_adjust        = Enable\n";
printf ope "Repeat                 = 10\n";
printf ope "#--------------------------------------------\n";
printf ope "# [Comments]\n";
printf ope "Comments               = \n";
printf ope "#--------------------------------------------\n";
printf ope "# END\n";
close ope;
}

##########################################################################
#------------------------------------------------------------------------
sub print_usage{
printf STDERR "NAME\n";
printf STDERR "       mkappNimgNL2 - making appfiles for COMICS Nimg/Qimg/NL obs\n";
printf STDERR "\n";
printf STDERR "SYNOPSIS\n";
printf STDERR "       mkappNimgNL targetlist\n";
printf STDERR "\n";
printf STDERR "DESCRIPTION\n";
printf STDERR "       targetlist\n";
printf STDERR "         - 1st column : Name\n";
printf STDERR "         - 2nd column : RA (XX:XX:XX.XX)\n";
printf STDERR "         - 3rd column : Dec (+XX:XX:XX.XX or -XX:XX:XX.XX)\n";
printf STDERR "         - 4th column : InstPA (in degree)\n";
printf STDERR "         - 5th column : TargetType (OBJECT/STANDARD)\n";
printf STDERR "       output\n";
printf STDERR "         - Nimg : ";
for(my $i=0;$i<=$#NimgN;++$i){
  printf STDERR "Name_%s.app",$NimgN[$i] ;
  if($i==$#NimgN){printf STDERR "\n";}
  elsif($i%4==3 ){printf STDERR "\n                  ";}
  else{printf STDERR ", ";}
}
printf STDERR "         - Qimg : ";
for(my $i=0;$i<=$#QimgN;++$i){
  printf STDERR "Qame_%s.app",$QimgN[$i] ;
  if($i==$#QimgN){printf STDERR "\n";}
  elsif($i%4==3 ){printf STDERR "\n                  ";}
  else{printf STDERR ", ";}
}
printf STDERR "         - NL   : Name_NL.app\n";
printf STDERR "       default paramters\n";
printf STDERR "         - ChopThrow  : %s\n",$chopthrow;
printf STDERR "         - chop PA    : default\n";
printf STDERR "         - Offset_X   : %s\n",$offsetx;
printf STDERR "         - Offset_Y   : %s\n",$offsety;
printf STDERR "         - Auto_Guide : %s\n",$autoguide;
printf STDERR "         - Integ Time : %s for Nimg\n",$integNimg;
printf STDERR "                        %s for Qimg\n",$integQimg;
printf STDERR "                        %s for NL\n",$integNL;
printf STDERR "         - Coadd Mode : %s for Nimg\n",$modeNimg;
printf STDERR "                        %s for Qimg\n",$modeQimg;
printf STDERR "                        %s for NL\n",$modeNL;
printf STDERR "         - Priority   : %s\n",$readpriority;
printf STDERR "\n";
}
