orig/falsecolor.csh
author Axel Jacobs <axel@jaloxa.eu>
Mon, 14 Apr 2014 22:21:17 +0100
changeset 73 87fa3132a136
parent 0 0aa115157c9c
permissions -rw-r--r--
New IES test file with spaces in file name
     1 #!/bin/csh -fe
     2 # RCSid: $Id: falsecolor.csh,v 2.19 2008/11/10 19:08:19 greg Exp $
     3 #
     4 # Create false color image with legend
     5 #
     6 # Added user-definable legend 2004/01/20 Rob Guglielmetti
     7 
     8 onintr quit
     9 set td=`mktemp -d /tmp/fc.XXXXXX`
    10 set mult=179
    11 set label=Nits
    12 set scale=1000
    13 set decades=0
    14 set redv='def_red(v)'
    15 set grnv='def_grn(v)'
    16 set bluv='def_blu(v)'
    17 set ndivs=8
    18 set picture='-'
    19 set cpict=
    20 set loff=0
    21 set legwidth=100
    22 set legheight=200
    23 while ($#argv > 0)
    24 	switch ($argv[1])
    25 	case -lw:
    26 		shift argv
    27 		set legwidth="$argv[1]"
    28 		breaksw
    29 	case -lh:
    30 		shift argv
    31 		set legheight="$argv[1]"
    32 		breaksw
    33 	case -m:
    34 		shift argv
    35 		set mult="$argv[1]"
    36 		breaksw
    37 	case -s:
    38 		shift argv
    39 		set scale="$argv[1]"
    40 		if ("$scale" =~ [aA]*) set needfile
    41 		breaksw
    42 	case -l:
    43 		shift argv
    44 		set label="$argv[1]"
    45 		breaksw
    46 	case -log:
    47 		shift argv
    48 		set decades=$argv[1]
    49 		breaksw
    50 	case -r:
    51 		shift argv
    52 		set redv="$argv[1]"
    53 		breaksw
    54 	case -g:
    55 		shift argv
    56 		set grnv="$argv[1]"
    57 		breaksw
    58 	case -b:
    59 		shift argv
    60 		set bluv="$argv[1]"
    61 		breaksw
    62 	case -spec:
    63 		set redv='1.6*v-.6'
    64 		set grnv='if(v-.375,1.6-1.6*v,8/3*v)'
    65 		set bluv='1-8/3*v'
    66 		breaksw
    67 	case -i:
    68 		shift argv
    69 		set picture="$argv[1]"
    70 		breaksw
    71 	case -p:
    72 		shift argv
    73 		set cpict="$argv[1]"
    74 		breaksw
    75 	case -ip:
    76 	case -pi:
    77 		shift argv
    78 		set picture="$argv[1]"
    79 		set cpict="$argv[1]"
    80 		breaksw
    81 	case -cl:
    82 		set docont=a
    83 		set loff=12
    84 		breaksw
    85 	case -cb:
    86 		set docont=b
    87 		set loff=13
    88 		breaksw
    89 	case -e:
    90 		set doextrem
    91 		set needfile
    92 		breaksw
    93 	case -n:
    94 		shift argv
    95 		set ndivs="$argv[1]"
    96 		breaksw
    97 	default:
    98 		echo bad option "'$argv[1]'"
    99 		exit 1
   100 	endsw
   101 	shift argv
   102 end
   103 if ($?needfile && "$picture" == '-') then
   104 	cat > $td/picture
   105 	set picture=$td/picture
   106 endif
   107 if ("$scale" =~ [aA]*) then
   108 	set LogLmax=`phisto $picture | tail -2 | sed -n '1s/	[0-9]*$//p'`
   109 	set scale=`ev "$mult/179*10^$LogLmax"`
   110 endif
   111 cat > $td/pc0.cal <<_EOF_
   112 PI : 3.14159265358979323846 ;
   113 scale : $scale ;
   114 mult : $mult ;
   115 ndivs : $ndivs ;
   116 
   117 or(a,b) : if(a,a,b);
   118 EPS : 1e-7;
   119 neq(a,b) : if(a-b-EPS,1,b-a-EPS);
   120 btwn(a,x,b) : if(a-x,-1,b-x);
   121 clip(x) : if(x-1,1,if(x,x,0));
   122 frac(x) : x - floor(x);
   123 boundary(a,b) : neq(floor(ndivs*a+.5),floor(ndivs*b+.5));
   124 
   125 interp_arr2(i,x,f):(i+1-x)*f(i)+(x-i)*f(i+1);
   126 interp_arr(x,f):if(x-1,if(f(0)-x,interp_arr2(floor(x),x,f),f(f(0))),f(1));
   127 def_redp(i):select(i,0.18848,0.05468174,
   128 0.00103547,8.311144e-08,7.449763e-06,0.0004390987,0.001367254,
   129 0.003076,0.01376382,0.06170773,0.1739422,0.2881156,0.3299725,
   130 0.3552663,0.372552,0.3921184,0.4363976,0.6102754,0.7757267,
   131 0.9087369,1,1,0.9863);
   132 def_red(x):interp_arr(x/0.0454545+1,def_redp);
   133 def_grnp(i):select(i,0.0009766,2.35501e-05,
   134 0.0008966244,0.0264977,0.1256843,0.2865799,0.4247083,0.4739468,
   135 0.4402732,0.3671876,0.2629843,0.1725325,0.1206819,0.07316644,
   136 0.03761026,0.01612362,0.004773749,6.830967e-06,0.00803605,
   137 0.1008085,0.3106831,0.6447838,0.9707);
   138 def_grn(x):interp_arr(x/0.0454545+1,def_grnp);
   139 def_blup(i):select(i,0.2666,0.3638662,0.4770437,
   140 0.5131397,0.5363797,0.5193677,0.4085123,0.1702815,0.05314236,
   141 0.05194055,0.08564082,0.09881395,0.08324373,0.06072902,
   142 0.0391076,0.02315354,0.01284458,0.005184709,0.001691774,
   143 2.432735e-05,1.212949e-05,0.006659406,0.02539);
   144 def_blu(x):interp_arr(x/0.0454545+1,def_blup);
   145 
   146 isconta = if(btwn(0,v,1),or(boundary(vleft,vright),boundary(vabove,vbelow)),-1);
   147 iscontb = if(btwn(0,v,1),btwn(.4,frac(ndivs*v),.6),-1); 
   148 
   149 ra = 0;
   150 ga = 0;
   151 ba = 0;
   152 
   153 in = 1;
   154 
   155 ro = if(in,clip($redv),ra);
   156 go = if(in,clip($grnv),ga);
   157 bo = if(in,clip($bluv),ba);
   158 _EOF_
   159 cat > $td/pc1.cal <<_EOF_
   160 norm : mult/scale/le(1);
   161 
   162 v = map(li(1)*norm);
   163 
   164 vleft = map(li(1,-1,0)*norm);
   165 vright = map(li(1,1,0)*norm);
   166 vabove = map(li(1,0,1)*norm);
   167 vbelow = map(li(1,0,-1)*norm);
   168 
   169 map(x) = x;
   170 
   171 ra = ri(nfiles);
   172 ga = gi(nfiles);
   173 ba = bi(nfiles);
   174 _EOF_
   175 set pc0args=(-f $td/pc0.cal)
   176 set pc1args=(-f $td/pc1.cal)
   177 if ($?docont) then
   178 	set pc0args=($pc0args -e "in=iscont$docont")
   179 endif
   180 if ("$cpict" == "") then
   181 	set pc1args=($pc1args -e 'ra=0;ga=0;ba=0')
   182 else if ("$cpict" == "$picture") then
   183 	set cpict=
   184 endif
   185 if ("$decades" != "0") then
   186 	set pc1args=($pc1args -e "map(x)=if(x-10^-$decades,log10(x)/$decades+1,0)")
   187 	set imap="imap(y)=10^((y-1)*$decades)"
   188 else
   189 	set imap="imap(y)=y"
   190 endif
   191 if ( $legwidth > 20 && $legheight > 40 ) then
   192 pcomb $pc0args -e 'v=(y+.5)/yres;vleft=v;vright=v' \
   193 		-e 'vbelow=(y-.5)/yres;vabove=(y+1.5)/yres' \
   194 		-x $legwidth -y $legheight > $td/scol.hdr
   195 ( echo "$label"; cnt $ndivs \
   196 		| rcalc -e '$1='"($scale)*imap(($ndivs-.5-"'$1'")/$ndivs)" \
   197 		-e "$imap" | sed -e 's/\(\.[0-9][0-9][0-9]\)[0-9]*/\1/' ) \
   198 	| psign -s -.15 -cf 1 1 1 -cb 0 0 0 \
   199 		-h `ev "floor($legheight/$ndivs+.5)"` > $td/slab.hdr
   200 else
   201 	set legwidth=0
   202 	set legheight=0
   203 	(echo "" ; echo "-Y 1 +X 1" ; echo "aaa" ) > $td/scol.hdr
   204 	cp $td/scol.hdr $td/slab.hdr
   205 endif
   206 if ( $?doextrem ) then
   207 	pextrem -o $picture > $td/extrema
   208 	set minpos=`sed 2d $td/extrema | rcalc -e '$2=$2;$1=$1+'"$legwidth"`
   209 	set minval=`rcalc -e '$1=($3*.27+$4*.67+$5*.06)*'"$mult" $td/extrema | sed -e 2d -e 's/\(\.[0-9][0-9][0-9]\)[0-9]*/\1/'`
   210 	set maxpos=`sed 1d $td/extrema | rcalc -e '$2=$2;$1=$1+'"$legwidth"`
   211 	set maxval=`rcalc -e '$1=($3*.27+$4*.67+$5*.06)*'"$mult" $td/extrema | sed -e 1d -e 's/\(\.[0-9][0-9][0-9]\)[0-9]*/\1/'`
   212 	psign -s -.15 -a 2 -h 16 $minval > $td/minv.hdr
   213 	psign -s -.15 -a 2 -h 16 $maxval > $td/maxv.hdr
   214 	pcomb $pc0args $pc1args $picture $cpict \
   215 		| pcompos $td/scol.hdr 0 0 \
   216 			+t .1 "\!pcomb -e 'lo=1-gi(1)' $td/slab.hdr" \
   217 			`ev 2 $loff-1` -t .5 $td/slab.hdr 0 $loff \
   218 		  - $legwidth 0 $td/minv.hdr $minpos $td/maxv.hdr $maxpos
   219 else
   220 	pcomb $pc0args $pc1args $picture $cpict \
   221 		| pcompos $td/scol.hdr 0 0 \
   222 			+t .1 "\!pcomb -e 'lo=1-gi(1)' $td/slab.hdr" \
   223 			`ev 2 $loff-1` -t .5 $td/slab.hdr 0 $loff \
   224 			- $legwidth 0
   225 endif
   226 quit:
   227 rm -rf $td