#!/bin/csh -f
set progname = `basename $0`
# See if arguments passed
if( $#argv == 0 ) then
more << EOT
====================================================================================
$progname fits 1,2 or 3 components with the options of dsqrfit

usage:  
fit the 3 comps. of the site ALBH
    $progname -site albh 
fit the east component and generate a plot 
    $progname -site albh -comp lon -plot

to fit 3 comps. for all the sites in the directory "series"
    $progname -indir series 


====================================================================================
EOT
exit
endif
set append = 0
set verb = 0
set showcmd = 0
set here = .  
set tr = "-t0 "`gpsdate -i today -delta -15  dy`
set ti = ''
set tf = ''
set plot = 0
set npf = ""
set nf = ""
set mask = 0
set indir  = $here/series.xyz
set outdir = $here/tsdata.xyz
set fitdir = $here/fit.xyz
set jpegdir = $here/jpegfiles.xyz
set pngdir = $here/pngfiles.xyz
set step = ''
set mask = '' 
set event = ''
set scl = '' #"-scl 1000"
set nsig = 3
set ntol = '' 
set mxsg = 0.5
set out = ( ) 
set Model = "" 
set model = "" 
set rm = ''
set datasets = '-o -d -r'
set comps = ( lat lon rad )
set comps = ( x y z )
set exclude = ( ) 
set SITES = ( )
set skip_until = ''
set dqrfit = "$GPS_HOME_DIR/bin/dqrfit_xyz"
set dqrfit = "$GPS_HOME_DIR/bin/dqrfit_xyz"
foreach d ( $indir $outdir $fitdir $jpegdir $pngdir ) 
  if ( ! -d $d ) mkdir $d
end
alias uc "tr '[a-z]' '[A-Z]'" 
alias lc "tr '[A-Z]' '[a-z]'"
############## DECIPHER COMMAND LINE ################   
while ($#argv > 0 )
  switch($argv[1])
    case -sku:
      set skip_until = `echo $argv[2]|uc`
    breaksw
    case -nots
      set datasets = ''
    breaksw
    case -d:
    set dqrfit = "$GPS_HOME_DIR/bin/dqrfit_xyz.d"
        breaksw
    case -indir:
    set indir = $argv[2]
        breaksw
    case -outdir:
    set outdir = "$here/$argv[2]"
        breaksw
    case -excl*:
    set exclude = `echo $argv[2]| tr '[a-z]' '[A-Z]' |sed 's/,/ /g'`
        breaksw
    case -site:
    set SITES =  ( `echo $argv[2]| tr '[a-z]' '[A-Z]' |sed 's/,/ /g'` )
        breaksw
    case -comp:
    set comps = ( `echo $argv[2]| tr '[A-Z]' '[a-z]' |sed 's/,/ /g'` )
    breaksw    
    case -scl:
    set scl = "-scl $argv[2]"
    breaksw
    case -mxsig:
    set mxsg = $argv[2]
    breaksw
    case -nsig:
    set nsig = $argv[2]
    breaksw
    case -model:
    set model = $argv[2]
    breaksw
    case -rm:
    set rm = "-rm $argv[2]"
    breaksw
    case -out:
    set out = ( `echo $argv[2]| tr '[A-Z]' '[a-z]' |sed 's/,/ /g'` )
    breaksw
    case -t0:
    set tr = "-t0 "`gpsdate -i $argv[2] -o dy`
    breaksw
    case -ti: 
    set ti = "-ti "`gpsdate -i $argv[2] -o dy`
    breaksw
    case -tf:
    set tf = "-tf "`gpsdate -i $argv[2] -o dy`
    breaksw
    case -append:
    set append = 1
    breaksw
    case -ntol:
       set ntol = "-ntol $argv[2]"
    breaksw
    case -npf:
    set npf = "-npf"
    breaksw
    case -nf:
    set nf = "-nf"
    breaksw
    case -mask:
    set mask = 1
    breaksw
    case -[vV]:
    set verb = 1
    breaksw
    case -cmd:
    set showcmd = 1
    breaksw
    case -plot:
    set plot = 1
    breaksw
  endsw
  if ( $#argv > 0 ) shift argv
end

# select output
if ( $#out  ) then
    set datasets = ''
    while ($#out > 0 )
      switch($out[1])
        case n*:
    set datasets = ''
            breaksw
        case o*:
    set datasets = "$datasets -o"
            breaksw
        case d*:
    set datasets = "$datasets -d"
            breaksw
        case r*:
    set datasets = "$datasets -r"
            breaksw
      endsw
          if ( $#out > 0 ) shift out
    end
endif
if ( ! $#SITES ) set SITES = ( `ls $indir/*.x|awk -F\/ '{print $NF}' | grep -v \~$ | awk -F. '{print $1}'` )

# exclude sites from list
if ( $#exclude ) then
    foreach s ( $exclude ) 
    set SITES = `echo $SITES | sed 's/'$s'//'`
    end
endif

set header = '#STN    Vel[mm/yr]      Sigma[mm/yr]    RSD.RMS[mm]     Chi^2/DOF       DOF        TSPAN[yr]'

echo "outdir $outdir $datasets"
#if ( $indir != "" ) \rm $outdir/* >& /dev/null
#set plot = 0

\rm site.failed cmd.failed >& /dev/null
foreach SITE ( $SITES ) 
    #echo $skip_until
    if ( $skip_until != '' ) then
         ##echo skipping $SITE
         if ( $skip_until == "$SITE" ) then 
            set skip_until = ''       
          else
            #echo $skip_until
            goto NEXT 
          endif
    endif
    set site = `echo $SITE |tr '[A-Z]' '[a-z]'`
    set loutput = "$fitdir/$site.lfit.par"
    set output = "$fitdir/$site.fit.par"
    if ( ! $append ) then
      echo "#new fit and  lfit files"
      \rm $loutput $output >& /dev/null
      touch $loutput 
      touch $output
    endif

    #echo "$header" | sed 's/STN/'$SITE'/' 
    foreach comp ( $comps )
    if ( $verb ) echo "# working on $site $comp"
    if ( $comp == "x" ) set neu = X
    if ( $comp == "y" ) set neu = Y
    if ( $comp == "z" ) set neu = Z
    #et mxsg = `echo $mxsg |awk '{print $1*5}'`
    set raw  = $indir/$SITE.$comp

    if ( ! -e $raw ) goto NEXT
    
    set data = $outdir/$site.data.$comp
    set ldet = $outdir/$site.ldet.$comp
    set resd = $outdir/$site.resd.$comp
    set crsd = $outdir/$site.crsd.$comp
    set t0 = `head -1 $raw |awk '{print $1}'`
    set t1 = `tail -1 $raw |awk '{print $1}'`
            
                  
    set min_tspan = `echo $t0 $t1 | awk '{ if ( ($2 - $1) < 2.5 ) {print "1" } else {print "0"} }'`
    set tspan = `echo $t0 $t1 | awk '{ print ($2 - $1) }'`
            
                echo "#Time Span = $tspan"
 
    set Model = ""
    if ( $min_tspan ) then
    set Model = "lj"
    endif    
    if (  $model != "" ) then
    set Model = $model 
    else if ( $Model == "" ) then
    set Model = "lasj"
    endif
    
    echo "#Model set to $Model"
                   
    if ( -e step/$site.step )  set step = "-s step/$site.step"

    if ( -e step/$site.step ) then
      set step = "-s step/$site.step"
      if ( -e tsbreak.step ) then
         cat step/$site.step tsbreak.step > site.step
         set step = "-s site.step"
      endif
    else
      set step = "-s tsbreak.step" 
    endif
    if ( -e mask/$site.mask && $mask ) set mask = "-k mask/$site.mask"
    if ( -e mask/$site.mask ) set mask = "-k mask/$site.mask"
    if ( -e slow/$site.slow ) set event = "-e slow/$site.slow"
    
    set cmd = "$dqrfit -i $raw $scl $tr $ti $tf $step $mask $event $datasets $rm -mxsg $mxsg -nsig $nsig -m $Model $npf $nf $ntol" 
    if ( $showcmd ) echo $cmd 
    
    $cmd | sed 's/\^/\\^/g;s/\//\\\//g;s/^\s\+//;s/P /P/g;' >  output.tmp 
        
    #ls $SITE.*    
    if ( -e $SITE.data.$comp ) \mv $SITE.data.$comp $data    
    if ( -e $SITE.resd.$comp ) \mv $SITE.resd.$comp $resd
    if ( -e $SITE.crsd.$comp ) \mv $SITE.crsd.$comp $crsd
    if ( -e $SITE.ldet.$comp ) \mv $SITE.ldet.$comp $ldet    
    
    set ns = `cat output.tmp |grep '\*\*'|wc -l`    
    set nan = `cat output.tmp |grep 'NaN'|wc -l`
    if ( $ns > 3 || $nan > 2 ) then
    echo $site nstars $ns NaN $nan>> site.failed 
    cat $cmd >> cmd.failed
    goto END
    endif    
    #dsqrfit -i $raw $scl $ti $tf \
    #$step $mask $event \
    #-o $data -d $ldet -r $resd \
    #-mxsg $mxsg -nsig $nsig -m $model $npf |sed 's/^\s\+//;s/P /P/g' >  output.tmp 

    
    if ( $verb ) cat output.tmp 
     
    #echo " get some statistics"
    set tspan = `cat output.tmp | grep 'TIME-SPAN='|awk -F\= '{print $3}'`  
    set chi = (`cat output.tmp | grep 'CHI'| tr '\*' '0'|awk '{print $2,$4,$6}'`)  
    set rms = `cat output.tmp | grep 'RMS'| tr '\*' '0'|awk '{print $2}'`  

    echo "$header"  >> $loutput
    echo "$header" | sed 's/STN/'$SITE'/' 
    cat output.tmp | grep ^P| grep -v '#' |grep  'VEL' | \
    awk '{printf "#%s_%s\t%4.2f\t\t%4.2f\t\t%4.2f\t\t%4.2f\t\t%d\t%9.4f\n", "'$SITE'","'$neu'",$3,$5,"'$rms'","'$chi[1]'","'$chi[2]'","'$chi[3]'"}' > lfit.tmp 
    cat output.tmp | grep ^P| grep -v '#' |grep 'VEL' | awk '{printf "%s_%s %s = %s +- %s\n", "'$SITE'","'$neu'",$7,$3,$5}' >> lfit.tmp
    cat output.tmp | grep ^P| grep -v '#' |grep 'POS' | awk '{printf "%s_%s %s %s = %s +- %s\n", "'$SITE'","'$neu'",$7,$8,$3,$5}' >> lfit.tmp
    #echo "get slope"
    cat output.tmp | grep ^P| grep -v '#' |grep -Ev 'OFFSET|VEL|POS' | awk '{printf "%s_%s %s %s = %s +- %s\n", "'$SITE'","'$neu'",$7,$8,$3,$5}' >> lfit.tmp

    #get the offsets
    cat output.tmp | grep ^P| grep -v '#' |grep 'OFFSET' | awk '{printf "%s_%s %s %s = %s +- %s\n", "'$SITE'","'$neu'",$7,$8,$3,$5}' >> lfit.tmp
    
    cat output.tmp | grep COV |\
    awk '{printf "%s_%s %s %s %s %s \n", "'$SITE'","'$neu'",$1,$2,$3,$4}' >> lfit.tmp
    #show result on the screen
    cat lfit.tmp
    if (  "$datasets" != "" ) then
    cat output.tmp >> $output
    cat lfit.tmp >> $loutput
    endif    
END:     
    end
    echo "plot  $plot "
    if ( $plot ) then
      echo "plotting $site"
      xyzplot $site #> /dev/null
    endif
NEXT:
end

