#!/bin/sh
# the next line restarts using wish \
exec tclsh $0 $@

# MAKE sure that all of the sources are identified to the program
 
source [ file join $env(TCLTOOLS_HOME) TclToolInits.tcl ]
TclToolInits GPH GUI PLT UTILS UDF UDFDB GUIUTILS
 
lappend auto_path [file join $env(TCLTOOLS_HOME) TclEUVSim]
package require EUVSim
package require EUVSim_C

if { $argc < 4 } {
   puts stderr "USAGE ConvertSim iFile oFile Decim Filter"
   exit
} 

set decim  [lindex $argv 2]
set smooth [lindex $argv 3]

set IndX [ReadEUVInv [lindex $argv 0] Xs Ys iG iGI AnC]

# DECIMATE before SMOOTH

set nE [array size iGI]
for { set K 0 } { $K < $nE} { incr K } { set oGI($K) $iGI($K) }

if { $decim > 1 } {
   set oGI(4) [expr int($oGI(4) / $decim)]
   set oGI(5) [expr int($oGI(5) / $decim)]
   TUgridReGrid REGRID iG iGI oG oGI NorM END
} else { TUgridMath iG DUP iG oG iGI}

# SMOOTH it

set fE ""
switch -exact -- $smooth {
   3x3L {
      set fE [list 1.0  2.0  1.0 \
                   2.0  4.0  2.0 \
                   1.0  2.0  1.0 ]
   }
   3x3H {
      set fE [list -1.0  -1.0  -1.0 \
                   -1.0   9.0  -1.0 \
                   -1.0  -1.0  -1.0 ]
   }
   5x5L {
      set fE [list 1.0  1.0   1.0  1.0  1.0 \
                   1.0  4.0   4.0  4.0  1.0 \
                   1.0  4.0  12.0  4.0  1.0 \
                   1.0  4.0   4.0  4.0  1.0 \
                   1.0  1.0   1.0  1.0  1.0 ]
    }
   5x5H {
      set fE [list  0.0  -1.0   -1.0  -1.0   0.0 \
                   -1.0   2.0   -4.0   2.0  -1.0 \
                   -1.0  -4.0   13.0  -4.0  -1.0 \
                   -1.0   2.0   -4.0   2.0  -1.0 \
                    0.0  -1.0   -1.0  -1.0   0.0 ]
   }
}

# NORMALIZE the smoothing mask

set nE [llength $fE]
if { $nE > 0 } { 
   set SuM 0.0
   for { set K 0 } { $K < $nE } { incr K } { 
      set F($K) [lindex $fE $K] 
      set SuM [expr $SuM + abs($F($K))] 
   }
   for { set K 0 } { $K < $nE } { incr K } { 
      set F($K) [expr $F($K) / $SuM] 
   }

# Smooth the grid

   set sOp(0) 0
   TUgridFilter 2DFILTER oG oGI sOp F
}

set fo [open [lindex $argv 1] w]

set nE [llength $IndX]
for { set K 0 } { $K < $nE } { incr K } { 
   set FiD [lindex $IndX $K]
   puts $fo "$FiD : $AnC($FiD)"
}
TUgridPrint $fo oG Dummy oGI Opened 
