77
Rolando V. Raqueño Monday, July 4, 2022 Statistics Function Implementation Traditional Programming Approach

Statistics Function Implementation

  • Upload
    taariq

  • View
    28

  • Download
    0

Embed Size (px)

DESCRIPTION

Statistics Function Implementation. Traditional Programming Approach. minimum.pro. function minimum, x n = n_elements(x) answer = x(0) for i=1 L , n-1 do begin if( answer gt x(i) ) then $ answer = x(i) endfor return, answer end. sum.pro. function sum, x - PowerPoint PPT Presentation

Citation preview

Page 1: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

Statistics Function Implementation

Traditional Programming Approach

Page 2: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

minimum.pro

function minimum, xn = n_elements(x)answer = x(0)for i=1L, n-1 do beginif( answer gt x(i) ) then $answer = x(i)

endforreturn, answer

end

Page 3: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

sum.pro

function sum, xn = n_elements( x )answer = 0for i = 0, n-1 do beginanswer = answer + x(i)endforreturn, answer

end

Page 4: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

Overflow Problems

• What if the array is an integer array?• Sums will have a maximum limit based on

the number of bits specified by the integer type.

Page 5: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

Corrected sum.pro

function sum, xn = n_elements( x )answer = 0.0Dfor i = 0L, n-1 do beginanswer = answer + x(i)

endforreturn, answer

end

Page 6: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

mean.pro

function mean, xn = n_elements(x)answer = sum(x) / nreturn, answer

end

Page 7: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

Integer Problems

IDL> b=9/5IDL> print,b 1

Page 8: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

Integer Problems

IDL> b=9/double(5)IDL> print,b 1.8000000

Page 9: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

Corrected mean.pro

function mean, xn = n_elements(x)answer = sum(x) / double(n)return, answer

end

Page 10: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

sum_squares.pro

function sum_squares, xsquares = x^2.0answer= sum( squares )return, answer

end

Page 11: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

variance.pro

function variance, xn = double(n_elements(x))answer=(sum_squares(x)-(sum(x)^2.0/n))/

(n-1)return, answer

end

Page 12: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

sd.pro

function sd, xanswer = sqrt(variance(x))return, answer

end

Page 13: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

Shell Programming

Page 14: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

UNIX Tip of the Day• Directory maneuvering commands pushd, popd, and, dirs

% cd /usr/tmp% pwd/usr/tmp% pushd ~rvrpci% pwd/cis/staff/rvrpci

Page 15: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

UNIX Tip of the Day

% dirs/cis/staff/rvrpci /usr/tmp% pushd% pwd/usr/tmp% dirs/usr/tmp /cis/staff/rvrpci% pushd /usr/local/bin

Page 16: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

UNIX Tip of the Day

% dirs/usr/local/bin /usr/tmp /cis/staff/rvrpci% pwd/usr/local/bin% pushd % dirs/usr/tmp /usr/local/bin/cis/staff/rvrpci

Page 17: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

UNIX Tip of the Day% dirs/usr/tmp /usr/local/bin/cis/staff/rvrpci% pwd/usr/tmp % pushd +2% pwd/cis/staff/rvrpci

Page 18: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

UNIX Tip of the Day% dirs/cis/staff/rvrpci /usr/tmp /usr/local/bin% popd% dirs/usr/tmp /usr/local/bin

Page 19: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

IMPORTANT UNIX Concepts• Environment and Shell Variables

– These allow you to customize your UNIX environment

– They are different in terms of their SCOPE• SCOPE determines the visibility of a variable

Page 20: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

Other IMPORTANT UNIX Concepts• Environment Variable

– Examples are TERM and DISPLAY– Set a particular variable to a value by using the setenv command

– You can print the value of a particular variable or all the environment variable using the printenv command

Page 21: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

% Environment Variables %• Examples

– To set environment variables% setenv TERM vt100% setenv DOG Goofy– print out the terminal type% printenv TERM vt100– print out all environment variables% printenv

Page 22: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

Shell Variables

• Shell variables are similar to Environment variables except they have a limited scope, i.e., they exist only in the shell which they are defined.

• Environment variables on the other hand, exist in all its children shells

• To illustrate this concept, let us look at the following example

Page 23: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

Environment vs. Shell Variables% set prompt = "Parent Shell > "Parent Shell > setenv DOG GoofyParent Shell > set mouse=MickeyParent Shell > printenv DOGGoofyParent Shell > echo $mouseMickeyParent Shell > xterm &

(YOU SHOULD NOW HAVE A NEW xterm WINDOW)THIS IS KNOWN AS

“SPAWNING A NEW (OR CHILD) PROCESS”

Page 24: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

Environment vs. Shell Variables(IN THE NEW xterm WINDOW, DO THE FOLLOWING)

% set prompt = "Child Shell > "Child Shell > printenv DOGGoofyChild Shell > echo $mousemouse: Undefined variable.

Page 25: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

Environment vs. Shell VariablesChild Shell > setenv DOG PlutoChild Shell > set mouse=MinnieChild Shell > printenv DOGPlutoChild Shell > echo $mouseMinnieChild Shell > exit

(THE xterm WINDOW SHOULD NOW GO AWAY - THIS PROCESS HAS NOW BEEN KILLED)

Page 26: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

Environment vs. Shell VariablesParent Shell >Parent Shell > printenv DOGGoofyParent Shell > echo $mouseMickeyParent Shell >

Page 27: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

Environment & Shell Variables

• Why is this important?– UNIX uses Environment and Shell Variables

control a number of processes– Customizes your working environment– Variables used for UNIX Scripts

• They are typically defined and initialized in your .login and .cshrc files

Page 28: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

Useful Shell Variables

filec#Allows file completionpath #List of command

directoriescdpath #List of candidate

directories to cd intohistory #Number of commands to

remember

Page 29: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

What is shell programming?

• Shell programming – automate a set of UNIX commands.– Just like any programming language– “wrappers”

• black box a customized collection of UNIX commands.

– Example of shell programs.login.cshrc

Page 30: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

.login fileset path=($HOME/bin /usr/local/bin \/usr/ucb /usr/sbin /bin /usr/bin \/usr/bin/X11 .)stty dec newtset -I -Qset mail=/usr/spool/mail/$USERset editmode = emacsumask 077biff ndate

Page 31: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

.cshrc file

if ($?prompt) then set notify set history = 100 set savehist = 100 alias pd pushd alias pop popd alias vt100 "set term = vt100"endif

Page 32: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

When these files are executed?

.cshrc – is automatically executed when you start a new

shell

.login – only gets executed once when you first login

Can be re-executed by giving the source command% source .cshrc

Page 33: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

Other useful .login and .cshrc entries

set filecset cdpath=(~ ~rvrpci/pub ~/mythesis)

Other common entries

set path=( $path /usr/local/bin)set path=(/usr/local/bin $path)

Page 34: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

User defined shell program

• Determine name of command• Determine input, output, and option

arguments• Determine UNIX commands to execute• Establish error trapping• Make shell program executable

Page 35: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

A simple shell program

• dd command to swap bytes

% dd if=input.dat of=output.dat bs=2 conv=swab

• Very difficult to remember• Very little utility to non-UNIX geeks

(normal people)

Page 36: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

We would rather see...

% swap_bytes input.dat output.dat

Page 37: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

Special Shell Variables Set

% swap_bytes input.dat output.dat

$0 $1 $2$argv[1] $argv[2]command

Page 38: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

Another Special Shell Variables

% swap_bytes input.dat output.dat

$#argvIndicates how many arguments are present

In this case, 2

Page 39: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

shell program swap_bytes

#!/bin/csh -fdd if=$1 of=$2 bs=2 conv=swab

Page 40: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

Making swap_bytes shell script executable

% ls -l swap_bytes-rw------- ... swap_bytes% chmod u+x swap_bytes% ls -l swap_bytes-rwx------ ... swap_bytes

Page 41: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

To run swap_bytes

• swap_bytes becomes just another unix command!

% swap_bytes input.dat output.dat

Page 42: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

Limitation of swap_bytes

• No error trapping• Should give usage when typing command

% swap_bytesusage: swap_bytes input_file output_file

Page 43: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

Improvement to swap_bytes

#!/bin/csh -f if ( $#argv != 2 ) then echo "usage: $0 input_file output_file" exit 1 endif dd if=$1 of=$2 bs=2 conv=swab

Page 44: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

Commad exit status

• By convention

exit 0Indicates successful command completion

exit 1 (or non-zero)Indicates some error condition

Page 45: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

Informational message from swap_bytes

• UNIX style informational message

% swap_bytesusage: swap_bytes input_file output_file

Page 46: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

Interactive swap_bytes

• If you want a “friendlier” shell program– Have it query the user for the inputs

• Another special shell variable can be used

$<

Page 47: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

Interactive swap_bytes#!/bin/csh -fif ( $#argv != 2 ) then echo -n "Please enter the input file> " set input=$< echo -n "Please enter the output file> " set output=$<endifdd if=$input of=$output bs=2 conv=swab

Page 48: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

Interactive swap_bytes example

• User simply types the command

% swap_bytesPlease enter the input file> input.datPlease enter the output file> output.dat

Page 49: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

UNIX Quotes

Page 50: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

A note about quotes in UNIX

% set a=ls% echo a% echo $a% set b=“$a”% echo $b% set b=‘$a’% echo $b% set b=`$a`% echo $b

Page 51: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

A note about shell variables

• Shell variables can also double up as arrays

• Using the previous example,% echo $b% echo $b[1]% echo $#b% echo $b[$#b]

Page 52: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

A more complex shell program• In pbmplus utilities,

rawtopgm conversion existspgmtoraw conversion does not

• A version of pgmtoraw in a programming language like C– Time consuming– Program will likely be used infrequently

• Solution: shell program

Page 53: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

pgmtoraw shell script design

• Define input and output files• Figure out dimensions of input image • Determine number of bytes for input image• Determine number of bytes for header• Need to strip out the header bytes• Write out headerless image data

Page 54: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

Define input and output files pgmtoraw

#!/bin/csh -fset command_name=$0set number_args=$#argvif( $number_args != 1 ) then echo “usage:$command_name input_file_name” exit 1endif...

Page 55: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

Dimensions of input image ( pnmfile)

% more test_data.pgmP23 32551 2 34 5 67 8 9

% pnmfile test_data.pgmtest_data.pgm: PGM plain, 3 by 3 maxval 255

Page 56: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

pgmtoraw (continued)

set input_file=$1set pnm_info = `pnmfile $input_file`set image_type = $pnm_info[2]set data_type = $pnm_info[3]set width = $pnm_info[4]set height = $pnm_info[6]set maxval = $pnm_info[8]set pixel_bytes = 1@ image_bytes = $width * $height

Page 57: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

pgmtoraw (continued)set file_info=`wc -c $input_file`set bytes_in_file = $file_info[1]@ header = $bytes_in_file - $image_bytesdd if=$input_file bs=$pixel_bytes skip=$header

Page 58: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

Resulting pgmtoraw utility

• Uses existing routines to obtain informationpnmfilewcdd

• Functional tool written in 20 command lines

Page 59: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

Current Limitations of Resulting pgmtoraw utility

• No check between “ASCII” vs. “RAW” pgmif( data_type == ‘plain,’) ...

• No provisions for multibyte per pixel case– Use pnmfile results to check for above cases– endian case needs to be addressed for multibyte

case• Above conditions can be addressed by suite

of UNIX commands

Page 60: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

Shell Scripts Wrappers and IDL

• Another utility formerly missing in pbmplusjpegtopnm or pnmtojpeg

• IDL has jpeg read/write capability– Create a “wrapper” that makes an idl

program pbmplus-like

Page 61: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

pnmtojpeg.pro

pro pnmtojpeg, input_file, output_file

read_ppm, input_file, image

write_jpeg, output_file, image

end

Page 62: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

Usage of pnmtojpeg.pro in IDL

IDL> pnmtojpeg,‘image.pnm’,’image.jpg’

Page 63: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

Usage of pnmtojpeg.pro in IDL

IDL> pnmtojpeg,‘image.pnm’,’image.jpg’

• For IDL to automatically find pnmtojpeg.pro

– It must be in the current working directory

– Directory containing pnmtojpeg.pro must be defined in the ENVIRONMENT VARIABLE•IDL_PATH

Page 64: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

IDL_PATH environment variable

setenv IDL_DIR /cis/common/rsi/idl_5setenv IDL_PATH \+$IDL_DIR/lib:\+$IDL_DIR/examples:

\+/dirs/common/rsi/idl_5:\+/dirs/common/lib/idl:\+~/lib/idl

Page 65: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

pnmtojpeg.csh#!/bin/csh -fecho pnmtojpeg “,” “’”$1”’” “,” “’”$2”’” | idl

Page 66: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

Usage of pnmtojpeg.csh

% pnmtojpeg.csh image.pnm image.jpg

Page 67: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

Limitation of pnmtojpeg.csh

• Does not conform to pbmplus piping, i.e.,% tifftopnm file.tif | pnmscale 2.0 > new_file.pnm

• No error trapping

Page 68: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

Usage cases of pnmtojpeg(no command line arguments)

% tifftopnm file.tif | pnmscale 2.0 | pnmtojpeg > new_file.jpg

Page 69: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

Usage cases of pnmtojpeg(1 command line argument)

% pnmtojpeg image.pnm > image.jpg

Page 70: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

Usage cases of pnmtojpeg(2 command line arguments)

% pnmtojpeg image.pnm image.jpg

Page 71: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

Yet another wrapper pnmtojpeg

#!/bin/csh -f

# If user interrupts process, jump to stop

onintr stop# $0 is the command name# $#argv is the number of arguments# $$ is the process id

Page 72: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

Code for no argument case

if($#argv == 0) then set input_file = /usr/tmp/$0_input_$$ set output_file = /usr/tmp/$0_output_$$ cat > $input_file pnmtojpeg.csh $input_file $output_file cat $output_file...

Page 73: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

Code for 1 argument case

else if($#argv ==1) then set input_file = $1 set output_file = /usr/tmp/$0_output_$$ pnmtojpeg.csh $input_file $output_file cat $output_file...

Page 74: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

Code for 2 argument caseelse set input_file = $1 set output_file = $2 pnmtojpeg.csh $input_file $output_fileendif

#clean up when finishedstop: rm -f /usr/tmp/$0_input_$$ rm -f /usr/tmp/$0_output_$$

Page 75: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

pnmtojpeg summary

• Produced a “new” pbmplus utility• Used UNIX shell scripting

– Argument handling– Scratch space /usr/tmp– Process id handling– Clean up

• Integrated IDL program and commands• 21 lines of UNIX commands

Page 76: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

Summary

• The “dot” files• Basics of Shell Scripting• Special Shell Variables• Seamless integration of UNIX to other

utilities (IDL)

Page 77: Statistics Function Implementation

Rolando V. Raqueño Saturday, April 22, 2023

Other Shell Constructs to keep in mind

• foreach• while• case