#!/bin/sh  
# \
exec oagtclsh "$0" "$@"

set auto_path [linsert $auto_path 0 /usr/local/oag/apps/lib/$env(HOST_ARCH)]
set auto_path [linsert $auto_path 0 /usr/local/oag/lib_patch/$env(HOST_ARCH)]
APSStandardSetup

proc ProcessData {args} {
    set rootname ""
    APSParseArguments {rootname}

    global rawDataDir
    
    set parFile $rawDataDir/${rootname}.scope
    set scalarFile $rawDataDir/${rootname}.scalars
    set extraOpt ""

    if [file exist $scalarFile] {
        set nameList [exec sdds2stream -col=ReadbackName $scalarFile]
        set valList [exec sdds2stream -col=ValueString $scalarFile]
        set pvList [exec sdds2stream -col=ControlName $scalarFile]
        
        foreach nm $nameList val $valList pv $pvList {
            if [catch {expr $val /2} result] {
                #string value
                lappend extraOpt "-reprint=par,$nm,$val,symbol=$pv"
            } else {
                lappend extraOpt -redefine=par,$nm,$val,symbol=$pv
            }
        }
    }


    set pars [exec sddsquery -par $parFile]
    foreach par $pars {
        set $par [exec sdds2stream $parFile -par=$par]
    }
    set rows [exec sdds2stream -rows=bar $parFile]
    set cols [exec sddsquery -col $parFile]
    foreach col $cols {
        set ${col}List [exec sdds2stream -col=$col $parFile]
    }
    set rawData $rawDataDir/${rootname}.gz
    set tmpData /tmp/[APSTmpString]
    
    for {set i 0} {$i<$rows} {incr i} {
        set measurement [lindex $MeasurementList $i]
        set offset [lindex $OffsetList $i]
        set range [lindex $RangeList $i]
        set scopeCol [lindex $ScopeChannelList $i]
        if {$scopeCol == ""} { continue }
        set chan [scan $scopeCol Channel%ld]
        set normValue [lindex $NormValueList $i]
        set normUnits [lindex $NormUnitsList $i]
        set unitsSuffix [lindex $UnitsSuffixList $i]
        set waveformName [lindex $WaveformNameList $i]
        set tmin [lindex $tminList $i]
        set tmax [lindex $tmaxList $i]
        set dir [lindex $DirectoryList $i]
        set normPV [lindex $NormPVList $i]
        set extraDesc [lindex $ExtraDescriptionList $i]
        set option " \"-redefine=col,$scopeCol,$scopeCol $offset  - $range /,units=Div\""
        set col Channel$chan
        if {$PeakDect=="PDET"} {
            set rows [exec sdds2stream -rows=bar $tmpData]
            set rows1 [expr $rows / 2]
            if [catch {eval exec sddsbreak $rawData -pipe=out -rowLimit=$rows1 \
                         | sddsprocess -pipe \
                         \"-redefine=col,Index,i_row,type=long\" \
                         \"-redefine=col,t,Index, $DeltaT * $Delay +,units=seconds\" \
                         $option \
                         | sddsconvert -pipe -retain=col,t,$col \
                         | sddsconvert -pipe=in -rename=col,$col=$waveformName $tmpData.convert } result] {
                return -code error "ProcessData1: $result"
            }
        } else {
            if [catch {eval exec sddsprocess $rawData -pipe=out \
                         \"-redefine=col,Index,i_row,type=long\" \
                         \"-redefine=col,t,Index $DeltaT * $Delay +,units=seconds\" \
                         $option \
                         | sddsconvert -pipe -retain=col,t,$col \
                         | sddsconvert -pipe=in -rename=col,$col=$waveformName $tmpData.convert } result] {
                return -code error "ProcessData2 (Error in process scope data2: $result)"
            }
        }
        if [catch {eval exec sddsprocess $tmpData.convert $DataDir/$dir/$rootname \
                     $extraOpt \
                     \"-test=column,i_row n_rows $RowFractor * <\" \
                     -filter=column,t,$tmin,$tmax \
                     \"-print=param,NormalizationPVName,$normPV\" \
                     \"-define=param,NormalizationPVValue,$normValue,units=$normUnits\" \
                     \"-print=param,UserDescription,[APSMakeSafeQualifierString [APSMakeSafeQualifierString [regsub -all \" $UserDescription ""]]] $extraDesc\" \
                     -define=param,Channel,$chan,type=long \
                     \"-define=column,${waveformName}Norm,$waveformName $normValue /,units=V$unitsSuffix\" \
                     -print=param,WaveformName,$waveformName \
                     \"-print=param,TimeStamp,[regsub -all \" $TimeStamp ""]\" \
                 } result] {
            return -code error "APSCollectHP9000Data14: $result"
        }
        if [file exist $DataDir/$dir/${rootname}.gz] {
            exec rm $DataDir/$dir/${rootname}.gz
        }
        if [catch {exec gzip $DataDir/$dir/${rootname} } result] {
            return -code error "ProcessData4: $result"
        }
       # catch {APSProcessKickerParameters -file $dataDir/$dir($i)/$file} result
    }
    
    set extraOpt ""
   

}


set rawDataDir /home/helios/oagData/sr/scope/archiveData1/RawData

set files [glob -nocomplain $rawDataDir/*.gz]

if ![llength $files] {
    #no files found 
    puts "no files found."
    exit 0
}

foreach file $files {
    set rootname [file root [file tail $file]]
    puts "processing $rootname..."
    if [catch {ProcessData -rootname $rootname} result] {
        puts  stderr "Error: $result"
        exit
    } else {
        #remove files
        set files [glob $rawDataDir/${rootname}*]
        eval file delete -force $files
        
    }
}

exit 0



