#!/usr/bin/perl

# Query the NHC ATCF (via ftp.nhc.noaa.gov) and JTWC (via wget from their machine pzal. Password required) database for currently active storms and invest areas.

#-- assign directory for data

$work_dir = "/home/padt/ADTV8.2.1/forecasts/tmp";
$atcf_dir = "/data/TCFP/ATCF";

print "#####################-----get_active_storms.cgi-----#####################\n";
$stdate=`date`;
print "$stdate";

#-- Get day/time system information...
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$indst)=gmtime(time);

$year = $year-100;
$mon = $mon + 1;
if($year < 10) {$year = "0".$year};
$year= "20$year";

$echo_date = "date > $work_dir/date.txt";
system($echo_date);
$make_log = "cat $work_dir/date.txt $work_dir/new_sector_file >> $work_dir/new_sector_file.old";
system($make_log);

#-- remove old files
$clean_sector_file = "rm -f  $work_dir/new_sector_file";
system($clean_sector_file);
$clean_sector_file_temp = "rm -f  $work_dir/new_sector_file.temp";
system($clean_sector_file_temp);
$clean_sector_file_jtwc = "rm -f  $work_dir/jtwc_sector_file";
system($clean_sector_file_jtwc);

#-- move the old files to an archive directory
#$mv_old = "mv -f $work_dir/*.dat $work_dir/archive";
#system($mv_old);

#-- Get the ordinal date which we will use to check if storm is current

if ($year == 2012 || $year == 2016 || $year == 2020  || $year == 2024 || $year == 2028 || $year == 2032){ 
    @mbl = ("0","31","60","91","121","152","182","213","244","274","305","335");
}
else{
    @mbl = ("0","31","59","90","120","151","181","212","243","273","304","334");
}

$add_days = $mbl[$mon -1];
$iday = $mday + $add_days;

$jday = $iday;
if(($dec_flag == 1) && ($mon eq "01"))  {  $jday = 365 + $jday; } # keep sat_jday sequential when going from Dec to Jan

$cdate1 = $hour/24 + ($min/60)/60;
$cdate2 = sprintf("%0.3f", $cdate1);
$cdate = $cdate2 + $jday;


##########################################################################
#-- get all ATCF files from NHC area of responsibility
####################################################################
if ($year == 2000 || $year == 2004 || $year == 2008 || $year == 2012 ){
    @mbl = ("0","31","60","91","121","152","182","213","244","274","305","335");

}
else{
    @mbl = ("0","31","59","90","120","151","181","212","243","273","304","334");
}

$add_days = $mbl[$mon -1];
$iday = $mday + $add_days;

$jday = $iday;
if(($dec_flag == 1) && ($mon eq "01"))  {  $jday = 365 + $jday; } # keep sat_jday sequential when going from Dec to Jan

$cdate1 = $hour/24 + ($min/60)/60;
$cdate2 = sprintf("%0.3f", $cdate1);
$cdate = $cdate2 + $jday;

#$getatcf_nhc="ftp ftp.nhc.noaa.gov < $work_dir/getatcf_atl.scr";
#system($getatcf_nhc);

$nhc_list_file = "$work_dir/ftp_nhc_list.txt"; 
#$ls = "ls $atcf_dir/NHC/b*.dat > $nhc_list_file";
$ls = "find $atcf_dir/NHC/b*.dat  -type f -mtime -7 > $nhc_list_file";
system($ls);

   print "---NHC LIST FILE: $nhc_list_file\n";  
   $catListFile = "cat $nhc_list_file\n";
   system($catListFile);

open(nhc_file_list,"<$nhc_list_file") || print "Can't open $nhc_list_file!\n";
while(<nhc_file_list>){

   chop $_;
   ($bfile)=split(/\s+/);

   print "---NHC bfile is:  $bfile\n";
   $catBfile = "cat $bfile\n";
   system($catBfile);

   open(bfile,"<$bfile") || die "Can't open $bfile!\n";
   while(<bfile>){

     chop $_;
     ($b,$btnum,$btdate,$gb,$gb2,$gb3,$btlat,$btlon,$btwind,$btp,$type,$radid,$quad,$q1,$q2,$q3,$q4,$bpenv,$bpdist,$brmw,$gb14,$beye_sz,$sub_basin,$gb17,$gb18,$gb19,$gb20,$bname,$gb22)=split(/,/,$_);

      $sub_basin =~ s/ //g;  #remove leading space  (added on 11/30/2017)
      print "sub_basin is: $sub_basin\n";

      #if (($type eq " DB") || ($type eq " WV") || ($type eq " LO")) { $bname = "INVEST"; }
      if (($type eq " DB") || ($type eq " WV") ) { $bname = "INVEST"; }
      if ($bname =~ "TEST") { next; }

      $byear = substr($btdate,1,4);
      $bmon = substr($btdate,5,2);
      $bday = substr($btdate,7,2);
      $bhour = substr($btdate,9,2);
      $btime= "$bhour"."00";
      $blon = substr($btlon,-5,4);
      $blon_flag = substr($btlon,-1,1);
      $blon = $blon/10;
      $blon = "$blon$blon_flag";
      $blat = substr($btlat,-4,3);
      $blat_flag = substr($btlat,4,1);
      $blat = $blat/10;
      $blat = "$blat$blat_flag";

      if ($ryear == 2000 || $byear == 2004 || $byear == 2008 || $byear == 2012){
        @bmbl = ("0","31","60","91","121","152","182","213","244","274","305","335");
      }
      else{
         @bmbl = ("0","31","59","90","120","151","181","212","243","273","304","334");
      }

      $badd_days = $bmbl[$bmon -1];
      $bday = $bday + $badd_days;

      $bjday = $bday;
      if (($dec_flag == 1)  && ($bmon == "01") ) { $bjday = $bjday + 365; }
      $count_bday[$bcount] = $bjday;
      $b_date1 = $bhour/24;
      $b_date2 = sprintf("%0.3f", $b_date1);
      $b_date = $b_date2 + $bjday;

    }  # end while bfile
    close(bfile);

    $sect_date = substr($btdate,3,6);

    $date_diff = $cdate - $b_date;
#    $date_diff = abs($date_diff);
 
    if($b eq"AL"){ $b="L";}
    if($b eq"EP"){ $b="E";}
    if($b eq"CP"){ $b="C";}
    if($b eq"WP"){ $b="W";}

    if($b eq "IO"){
#       $b= "B";
#       if($blon_save < 77){ $b= "A";}
       $b = $sub_basin;                    #changed and added on 11/30/2017
    }

    if($b eq "SH"){
#       $b= "S";
#       if($blon_flag eq "W"){ $b= "P"}
#       if($blon_save > 140){ $b= "P";}
       $b = $sub_basin;                    #changed and added on 11/30/2017 
    }

#-- add below block on 02/18/2015
    $b23 = chop $sub_basin;
    print "b23 is: $b23\n";

#-- changed on 07/13/2015
#    if($b23 eq "") {
#       print "b23 is unavailable\n";
#    }
#    else{
#       $b = $b23;
#    }

     if (($b eq "W") && ($b23 eq "P")) { $b = "P"}
     if (($b eq "P") && ($b23 eq "W")) { $b = "W"} 

#------------------------
    if($b eq"L"){ $bsn="ATL";}
    if($b eq"E"){ $bsn="EPAC";}
    if($b eq"C"){ $bsn="CPAC";}
    if($b eq"W"){ $bsn="WPAC";}
    if($b eq"S"){ $bsn="SHEM";}
    if($b eq"I"){ $bsn="NIO";}

    if($bname eq "") { $bname = "$btnum$b"; }

    #if (($type eq " DB") || ($type eq " WV") || ($type eq " LO")) { $bname = "INVEST"; }
     if (($type eq " DB") || ($type eq " WV") ) { $bname = "INVEST"; }

    if (($bname eq "     INVEST") && ($type eq " TD")) { $bname = "$btnum$b";  }
    if (($bname eq "     INVEST") && ($type eq " TS")) { $bname = "$btnum$b";  }

#    if (($bname eq "INVEST") && ($b eq "L") && ($btwind < 25)) { $btwind = 25 ;}  # override btwind so that it shows on TC page during HS3

print "Date: $cdate: $b_date: $date_diff\n";

#-- modified condition on 10/30/2015
#    if ($date_diff < 0.5 && $date_diff > 0.00) {
    if ($date_diff < 0.5) {
      if ( $btnum < 90) {
         # active storm.  Write to temp file then we will check the temp file for dupes
         print "btnum:$btnum\n";
         $ffile=substr($bfile,-12,8);
         print "ffile: $ffile\n";
         $ffile="$atcf_dir/NHC/$ffile.fst";
         $forecast="/home/padt/ADTV8.2.1/forecasts/$btnum$b.FORECAST";
         $copy_fst="cp $ffile $forecast";
         print "ffile: $ffile\n";
         print "forecast: $forecast\n";

         $make_sector="echo $btnum$b $bname   $sect_date   $btime   $blat   $blon   $bsn   $btwind   $btp $ffile>> $work_dir/new_sector_file.temp";

         system($make_sector);
       }

    } # end if date_diff < 1

} # end while nhc file
close(nhc_file_list);

# open the just created sector file and check to see if invests are now numbered storms

open(sect_file,"<$work_dir/new_sector_file.temp") || print "3 Can't open $work_dir/new_sector_file.temp!\n";
while(<sect_file>){

   chop $_;
   ($snum,$sname,$ssect_date,$stime,$slat,$slon,$sbsn,$sbtwind,$sbtp,$ffile)=split(/\s+/);

   $slon1 = sprintf("%4.1f",$slon);  # to prevent truncation of ingeters
   $slat1 = sprintf("%3.1f",$slat);

   $dupe = 0;  # assume it is not a duplicate

   $slon1 =~ s/W//;
   $slat1 =~ s/N//;
   $slat1 =~ s/S//;

#  open temp file again and read through looking for invests that are now numbered systems

        open(sect_file2,"<$work_dir/new_sector_file.temp") || print "4 Can't open $work_dir/new_sector_file.temp!\n";
        while(<sect_file2>){

           chop $_;
           #($snum,$sname,$ssect_date,$stime,$slat,$slon,$sbsn,$sbtwind,$sbtp,$ffile)=split(/\s+/);
           ($snum2,$sname2,$ssect_date2,$stime2,$slat2,$slon2,$sbsn2,$sbtwind2,$sbtp2,$ffile2)=split(/\s+/);

             $snumc = substr($snum,0,2);
             $snum2c = substr($snum2,0,2);
             $snumc = sprintf("%2.0f",$snumc); 
             $snum2c = sprintf("%2.0f",$snum2c);

             $slon2 =~ s/W//;
             $slat2 =~ s/N//;
             $slat2 =~ s/S//;

             $lat_diff = abs($slat2 - $slat1);
             $lon_diff = abs($slon2 - $slon1);

             if(($dupe != 1) && ( $snumc > 89 ) && ($snumc != $snum2c)){

               if (($lat_diff < 4) && ($lon_diff < 4)) {

                 $dupe = 1;  # true

                   print "THIS INVEST $snum IS NOW A NUMBERED STORM $snum2\n";
               }

             }  # end if INVEST 

          }  # end while sect file second open 

          if (($dupe == 0)&&($sbtwind > 15))  {

              #$echo_sect = "echo $snum  $sname  $ssect_date  $stime  $slat1$blat_flag  $slon1$blon_flag  $sbsn $sbtwind   $sbtp >> $work_dir/jtwc_sector_file";
              $echo_sect = "echo $snum  $sname  $ssect_date  $stime  $slat1$blat_flag  $slon1$blon_flag  $sbsn $sbtwind   $sbtp $ffile>> $work_dir/jtwc_sector_file";
              system($echo_sect);

          }  # end if dupe =0

} # end while sect_file first open




#####################################################################
#-- get all ATCF files from JTWC machine for storms in their AOR.
#################################################################

$clean_sector_file_temp = "rm -f  $work_dir/new_sector_file.temp";
system($clean_sector_file_temp);
$clean_sector_file_temp = "touch  $work_dir/new_sector_file.temp";
system($clean_sector_file_temp);


#$getatcf_jtwc = "/usr/bin/wget -r -l0 -nd --no-parent -A \"bwp*.dat\" --directory-prefix=$atcf_dir/* -i $work_dir/get_jtwc_list.txt";
#system($getatcf_jtwc);

#$getatcf_jtwc = "/usr/bin/wget -r -l0 -nd --no-parent -A \"bsh*.dat\" --directory-prefix=$atcf_dir/* -i $work_dir/get_jtwc_list.txt";
#system($getatcf_jtwc);

#$getatcf_jtwc = "/usr/bin/wget -r -l0 -nd --no-parent -A \"bio*.dat\" --directory-prefix=$atcf_dir/* -i $work_dir/get_jtwc_list.txt";
#system($getatcf_jtwc);

$jtwc_list_file = "$work_dir/ftp_jtwc_list.txt"; 
#$ls = "ls $atcf_dir/DOD/bwp*.dat $atcf_dir/DOD/bsh*.dat $atcf_dir/DOD/bio*.dat > $jtwc_list_file";
$ls = "find $atcf_dir/DOD/bwp*.dat -type f -mtime -7 > $jtwc_list_file";
system($ls);
$ls = "find $atcf_dir/DOD/bsh*.dat -type f -mtime -7 >> $jtwc_list_file";
system($ls);
$ls = "find $atcf_dir/DOD/bio*.dat -type f -mtime -7 >> $jtwc_list_file";
system($ls);
$ls = "find $atcf_dir/DOD/bcp*.dat -type f -mtime -7 >> $jtwc_list_file";
system($ls);

#--added following on 08/07/2014 as Liqun Ma requested
$ls = "find $atcf_dir/DOD/bep*.dat -type f -mtime -7 >> $jtwc_list_file";
system($ls);

   print "---JTWC LIST FILE:  $jtwc_list_file\n";  
   $catListFile = "cat $jtwc_list_file\n";
   system($catListFile);

open(jtwc_file_list,"<$jtwc_list_file") || print "Can't open $jtwc_list_file!\n";
while(<jtwc_file_list>){

   chop $_;
   ($bfile)=split(/\s+/);

   print "---JTWC bfile is:  $bfile\n";
   $catBfile = "cat $bfile\n";
   system($catBfile);

   open(bfile,"<$bfile") || die "Can't open $bfile!\n";
   while(<bfile>){

     chop $_;
     ($b,$btnum,$btdate,$gb,$gb2,$gb3,$btlat,$btlon,$btwind,$btp,$type,$radid,$quad,$q1,$q2,$q3,$q4,$bpenv,$bpdist,$brmw,$gb14,$beye_sz,$sub_basin,$gb17,$gb18,$gb19,$gb20,$bname,$gb22)=split(/,/,$_);

      $sub_basin =~ s/ //g;  #remove leading space  (added on 11/30/2017)
      print "sub_basin is: $sub_basin\n";

     # if (($type eq " DB") || ($type eq " SD")||($type eq " SS")||($type eq " WV") || ($type eq " LO")) { $bname = "INVEST"; }
      if (($type eq " DB") || ($type eq " WV") ) { $bname = "INVEST"; }
      if ($bname =~ "TEST") { next; }

      $byear = substr($btdate,1,4);
      $bmon = substr($btdate,5,2);
      $bday = substr($btdate,7,2);
      $bhour = substr($btdate,9,2);
      $btime= "$bhour"."00";
      $blon = substr($btlon,-5,4);
      $blon_flag = substr($btlon,-1,1);
      $blon = $blon/10;
      $blon_save = $blon;
      $blon = "$blon$blon_flag";
      $blat = substr($btlat,-4,3);
      $blat_flag = substr($btlat,4,1);
      $blat = $blat/10;
      $blat = "$blat$blat_flag";

      if ($byear == 2000 || $byear == 2004 || $byear == 2008 || $byear == 2012){
        @bmbl = ("0","31","60","91","121","152","182","213","244","274","305","335");
      }
      else{
         @bmbl = ("0","31","59","90","120","151","181","212","243","273","304","334");
      }

      $badd_days = $bmbl[$bmon -1];
      $bday = $bday + $badd_days;

      $bjday = $bday;
      if (($dec_flag == 1)  && ($bmon == "01") ) { $bjday = $bjday + 365; }
      $count_bday[$bcount] = $bjday;
      $b_date1 = $bhour/24;
      $b_date2 = sprintf("%0.3f", $b_date1);
      $b_date = $b_date2 + $bjday;

    }  # end while bfile
    close(bfile);

    $sect_date = substr($btdate,3,6);

    $date_diff = $cdate - $b_date;
#    $date_diff = abs($date_diff);

    if($b eq"AL"){ $b="L";}
    if($b eq"EP"){ $b="E";}
    if($b eq"CP"){ $b="C";}
    if($b eq"WP"){ $b="W";}

    if($b eq "IO"){
#       $b= "B";
#       if($blon_save < 77){ $b= "A";}
       $b = $sub_basin;                    #changed and added on 11/30/2017
    } 


    if($b eq "SH"){
#       $b= "S";
#       if($blon_flag eq "W"){ $b= "P"}
#       if($blon_save > 140){ $b= "P";}
       $b = $sub_basin;                    #changed and added on 11/30/2017
    } 

#-- add below block on 02/18/2015 
    $b23 = chop $sub_basin;
    print "b23 is: $b23\n";

#-- changed on 07/13/2015
#    if($b23 eq "") {
#       print "b23 is unavailable\n";
#    }
#    else{
#       $b = $b23;
#    }

     if (($b eq "W") && ($b23 eq "P")) { $b = "P"}
     if (($b eq "P") && ($b23 eq "W")) { $b = "W"} 

#--------------
    if($b eq "L"){ $bsn="ATL";}
    if($b eq "E"){ $bsn="EPAC";}
    if($b eq "C"){ $bsn="CPAC";}
    if($b eq "W"){ $bsn="WPAC";}
    if($b eq "S"){ $bsn="SHEM";}
    if($b eq "A" || $b eq "B"){ $bsn="IO";}

    if($bname eq "") { $bname = "$btnum$b"; }

    #if (($type eq " DB") || ($type eq " WV") || ($type eq " LO")) { $bname = "INVEST"; }
     if (($type eq " DB") || ($type eq " WV") ) { $bname = "INVEST"; }

    if (($bname eq "     INVEST") && ($type eq " TD")) { $bname = "$btnum$b";  }
    if (($bname eq "     INVEST") && ($type eq " TS")) { $bname = "$btnum$b";  }

print "Date: $cdate: $b_date: $date_diff: $btdate\n";

#-- modified condition on 10/30/2015
#    if ($date_diff < 0.9 && $date_diff > 0.00) {
    if ($date_diff < 0.9) {
      if ( ($btnum < 90) && ($type !~ "TEST") ) {

        # active storm.  Write to temp file then we will check the temp file for dupes
        print "btnum:$btnum\n";
        $ffile=substr($bfile,-12,8);
        print "ffile: $ffile\n";
        $ffile="$atcf_dir/DOD/$ffile.fst";
        $forecast="/home/padt/ADTV8.2.1/forecasts/$btnum$b.FORECAST";
        $copy_fst="cp $ffile $forecast";
        print "ffile: $ffile\n";
        print "forecast: $forecast\n";
        #system($copy_fst);

        #$make_sector="echo $btnum$b $bname   $sect_date   $btime   $blat   $blon   $bsn   $btwind   $btp >> $work_dir/new_sector_file.temp";
        $make_sector="echo $btnum$b $bname   $sect_date   $btime   $blat   $blon   $bsn   $btwind   $btp $ffile>> $work_dir/new_sector_file.temp";
#        $make_sector="echo $btnum$b $bname   $sect_date   $btime   $blat   $blon   $bsn   $btwind   $btp $ffile> $work_dir/new_sector_file.temp";

        system($make_sector);
      } # end if btnum < 90
    } # end if date_diff < 1
} # end while jtwc file
close(jtwc_file_list);

#-- open the just created sector file and check to see if invests are now numbered storms
open(sect_file,"<$work_dir/new_sector_file.temp") || print "1 Can't open $work_dir/new_sector_file.temp!\n";
while(<sect_file>){

   chop $_;
   ($snum,$sname,$ssect_date,$stime,$slat,$slon,$sbsn,$sbtwind,$sbtp,$ffile)=split(/\s+/);

   $slon1 = sprintf("%4.1f",$slon);  # to prevent truncation of ingeters
   $slat1 = sprintf("%3.1f",$slat);
   $blon_flag = substr($slon,-1,1);
   $blat_flag = substr($slat,-1,1);

   $dupe = 0;  # assume it is not a duplicate

   $slon1 =~ s/E//;
   $slat1 =~ s/N//;
   $slat1 =~ s/S//;

#-- open temp file again and read through looking for invests that are now numbered systems

        open(sect_file2,"<$work_dir/new_sector_file.temp") || print "2 Can't open $work_dir/new_sector_file.temp!\n";
        while(<sect_file2>){

           chop $_;
           ($snum2,$sname2,$ssect_date2,$stime2,$slat2,$slon2,$sbsn2,$sbtwind2,$sbtp2,$ffile2)=split(/\s+/);

             $snumc = substr($snum,0,2);
             $snum2c = substr($snum2,0,2);
             $snumc = sprintf("%2.0f",$snumc); 
             $snum2c = sprintf("%2.0f",$snum2c);

             $slon2 =~ s/E//;
             $slat2 =~ s/N//;
             $slat2 =~ s/S//;

             $lat_diff = abs($slat2 -$slat1);
             $lon_diff = abs($slon2 -$slon1);

             if(($dupe != 1) && ( $snumc > 89 ) && ($snumc != $snum2c)){

               if (($lat_diff < 4) && ($lon_diff < 4)) {

                 $dupe = 1;  # true

                   print "THIS INVEST $snum IS NOW A NUMBERED STORM $snum2\n";
               }

             }  # end if INVEST 

          }  # end while sect file second open 

          if (($dupe == 0)&&($sbtwind > 15)) {

              $echo_sect = "echo $snum  $sname  $ssect_date  $stime  $slat1$blat_flag  $slon1$blon_flag  $sbsn $sbtwind   $sbtp $ffile>> $work_dir/jtwc_sector_file";

              system($echo_sect);

          }  # end if dupe =0

} # end while sect_file first open


$cp_temp = "cp $work_dir/jtwc_sector_file $work_dir/new_sector_file";
system($cp_temp);

# send the file to SSEC ftp server for pickup by other scripts

#$ftp = "ftp ftp.ssec.wisc.edu < $work_dir/put_sector.sh";
#system($ftp);
