# ------------------------------------------------------------
# TASCAP.sml
# ------------------------------------------------------------
# SET WARNING LEVEL:
$warnings 3
# ------------------------------------------------------------
# DEFINE PROCEDURE writeTitle:
# PURPOSE: WRITES TITLE & AUTHOR INFO TO CONSOLE WINDOW.
proc writeTitle() begin
printf("TASCAP.sml:\n");
printf(" VERSION: November 15, 2005\n");
printf(" PURPOSE: CONVERT SRFI DATA ");
printf("TO TASSELED-CAP DATA\n");
printf(" WITH AUTOMATIC CONTRAST ");
printf("LOOK-UP TABLES.\n");
printf(" DETAILS: FAQs_by_Jack A & F\n");
printf(" AUTHOR: Dr. Jack F. Paris\n");
printf(" CONTACT INFO: [email protected] ");
printf(" 303-775-1195\n");
printf(" ALLOWED USE: ONLY NON-COMMERCIAL\n\n");
end
# ------------------------------------------------------------
# DECLARE VARIABLES
numeric nbands,bp0,bp1,bp2,bp3,bp4,bp5,bp6,bp7,bp8,bp9;
numeric i,j,nbandsm1,m;
numeric itc,nTC,tc0,tc1,tc2,tc3,tc4,tc5,tc6,tc7,tc8,tc9;
numeric lin,col,nlins,ncols,fsize;
numeric tcn,tcnp1,isnull,lintcp,coltcp;
array lintcp[10]; array coltcp[10];
string bp0$,bp1$,bp2$,bp3$,bp4$,bp5$,bp6$,bp7$,bp8$;
string stype$,dtype$,ttype$;
dtype$ = "16-bit unsigned";
ttype$ = "16-bit signed"; tcn = -32000; tcnp1 = tcn + 1;
numeric d,d2,sd2,mag,f,sf2,ds,tc;
numeric dot1,dot2,dot3,dot4,dot5,dot6,dot7,dot8,dot9;
numeric c1DS0,c1DS1,c1DS2,c1DS3,c1DS4;
numeric c1DS5,c1DS6,c1DS7,c1DS8;
numeric c2DS0,c2DS1,c2DS2,c2DS3,c2DS4;
numeric c2DS5,c2DS6,c2DS7,c2DS8;
numeric c3DS0,c3DS1,c3DS2,c3DS3,c3DS4;
numeric c3DS5,c3DS6,c3DS7,c3DS8;
numeric pDS0,pDS1,pDS2,pDS3,pDS4,pDS5,pDS6,pDS7,pDS8;
numeric c1TC1,c1TC2,c1TC3,c1TC4,c1TC5,c1TC6,c1TC7,c1TC8;
numeric c2TC1,c2TC2,c2TC3,c2TC4,c2TC5,c2TC6,c2TC7,c2TC8;
numeric c3TC1,c3TC2,c3TC3,c3TC4,c3TC5,c3TC6,c3TC7,c3TC8;
numeric pTC1,pTC2,pTC3,pTC4,pTC5,pTC6,pTC7,pTC8;
numeric hnmDS0,hnmDS1,hnmDS2,hnmDS3,hnmDS4;
numeric hnmDS5,hnmDS6,hnmDS7,hnmDS8;
numeric hnDS0,hnDS1,hnDS2,hnDS3,hnDS4;
numeric hnDS5,hnDS6,hnDS7,hnDS8;
numeric nvDS0,nvDS1,nvDS2,nvDS3,nvDS4;
numeric nvDS5,nvDS6,nvDS7,nvDS8;
numeric hnmTC1,hnmTC2,hnmTC3,hnmTC4;
numeric hnmTC5,hnmTC6,hnmTC7,hnmTC8;
numeric hnTC1,hnTC2,hnTC3,hnTC4;
numeric hnTC5,hnTC6,hnTC7,hnTC8;
numeric nvTC1,nvTC2,nvTC3,nvTC4;
numeric nvTC5,nvTC6,nvTC7,nvTC8;
# ------------------------------------------------------------
# DECLARE VARIABLES RELATED TO CONTRAST LOOKUP PROCESS:
class CONTRAST smlContrast;
string clut1$,clut2$,clut3$;
array numeric v[131072];
clut1$ = "exp"; clut2$ = "Exponential";
clut3$ = "Exponential contrast table";
smlContrast.OutputLowerLimit = 1;
smlContrast.OutputUpperLimit = 255;
# ------------------------------------------------------------
# DEFINE STRING VARIABLES FOR POPUP WINDOWS:
string t$,p$,p1$,p2$,p3$,p4$,p5$,p6$,p7$,p8$,p9$;
string p10$,p11$,p12$,p13$,p14$,p15$,p16$,p17$,p18$,p19$;
string p20$,p21$;
# ------------------------------------------------------------
# DECLARE ARRAYS
array bp0[10]; array bp1[10]; array bp2[10]; array bp3[10];
array bp4[10]; array bp5[10]; array bp6[10]; array bp7[10];
array bp8[10]; array bp9[10]; array tc0[10]; array tc1[10];
array tc2[10]; array tc3[10]; array tc4[10]; array tc5[10];
array tc6[10]; array tc7[10]; array tc8[10]; array tc9[10];
array numeric srfi[10];
# ------------------------------------------------------------
# CLEAR CONSOLE WINDOW & REQUEST REPOSITIONING:
clear();
p1$ = "CONSOLE-WINDOW ADJUSTMENT:\n";
p2$ = "* REPOSITION the CONSOLE WINDOW.\n";
p3$ = "* Then, CLICK OK.";
p$ = p1$ + p2$ + p3$;
PopupMessage(p$);
# ------------------------------------------------------------
# SELECT METHOD (OUT OF 3 CHOICES): m
p1$ = "METHOD-NUMBER ENTRY:\n";
p2$ = " CHOICES:\n";
p3$ = " 1: Process LANDSAT SRFItoa DATA (6 Bands)\n";
p4$ = " Using USGS TASCAP Coefficients.\n";
p5$ = " 2: Process with PRE-DEFINED bp VALUES.\n";
p6$ = " 3: Specify KEY PIXELS (lin,col) to Fetch\n";
p7$ = " bp Values from Input SRFT Rasters.\n";
p8$ = "METHOD-NUMBER ENTERED:";
p$ = p1$ + p2$ + p3$ + p4$ + p5$ + p6$ + p7$ + p8$;
m = PopupNum(p$,1,1,3,0);
# ------------------------------------------------------------
# ASSIGN VALUES TO dtype$, ttype$, tcn, tcnp1, nbands & nTC:
dtype$ = "16-bit unsigned";
ttype$ = "16-bit signed"; tcn = -32000; tcnp1 = tcn + 1;
nbands = 6; nTC = 4;
# ============================================================
# DEFAULT PARAMETERS FOR METHOD 1: Landsat 6-Band MS Data.
# Classic TASCAP for SRFI Rasters: BL, GL, RL, NA, MB, MC:
# WARNING: Only Applicable to Landsat SRFItoa Raster Values.
if (m == 1) then begin
bp0$ = "BLACK"; bp1$ = "Brightness";
bp2$ = "Greenness" ; bp3$ = "Wetness" ;
bp4$ = "Haze" ;
tc0[1]= 0.0; tc0[2]= 0.0; tc0[3]= 0.0;
tc0[4]= 0.0; tc0[5]= 0.0; tc0[6]= 0.0;
tc1[1]= 0.3561; tc1[2]= 0.3972; tc1[3]= 0.3904;
tc1[4]= 0.6966; tc1[5]= 0.2286; tc1[6]= 0.1596;
tc2[1]= -0.3344; tc2[2]= -0.3544; tc2[3]= -0.4556;
tc2[4]= 0.6966; tc2[5]= -0.0242; tc2[6]= -0.2630;
tc3[1]= 0.2626; tc3[2]= 0.2141; tc3[3]= 0.0926;
tc3[4]= 0.0656; tc3[5]= -0.7629; tc3[6]= -0.5388;
tc4[1]= 0.0805; tc4[2]= -0.0498; tc4[3]= 0.1950;
tc4[4]= -0.1327; tc4[5]= 0.5752; tc4[6]= -0.7775;
end
# ============================================================
# DEFAULT PARAMETERS FOR METHOD 2:
# Default TASCAP for SRFI Rasters: BL, GL, RL, NA, (MB, MC):
# METHOD 2 Requires No Input Key Inputs from User:
# NOTE: METHOD 2 can be Applied to 3 to 6 Bands (SRFI):
if (m == 2) then begin
bp0$="Dark Soil "; bp1$="Bright Soil";
bp2$="Dense Green Veg."; bp3$="Water" ;
bp4$="Yellow Veg." ;
t$ = "n-SPACE ORIGIN TYPE";
p1$ = "SELECT n-SPACE ORIGIN TYPE:\n";
p2$ = " ENTER 'BLACK' or ACCEPT DEFAULT:\n";
p3$ = "n-SPACE ORIGIN-TYPE ENTERED:";
p$ = p1$ + p2$ + p3$;
bp0$ = PopupString(p$,bp0$,t$);
bp0[1]= 190; bp0[2]= 326; bp0[3]= 100;
bp0[4]= 200; bp0[5]=142; bp0[6]= 276;
if (bp0$ == "BLACK") then begin
bp0[1]=0; bp0[2]=0; bp0[3]=0;
bp0[4]=0; bp0[5]=0; bp0[6]=0;
end
bp1[1]= 945; bp1[2]=1157; bp1[3]=1746;
bp1[4]=1998; bp1[5]=2688; bp1[6]=1967;
bp2[1]= 400; bp2[2]= 600; bp2[3]= 300;
bp2[4]=6000; bp2[5]=2000; bp2[6]= 600;
bp3[1]= 400; bp3[2]= 500; bp3[3]= 200;
bp3[4]= 189; bp3[5]= 105; bp3[6]= 70;
bp4[1]= 450; bp4[2]=1000; bp4[3]=1400;
bp4[4]=4500; bp4[5]=2500; bp4[6]= 800;
end
# ============================================================
# METHOD 3: User must Provide Raster lin & col Locations that
# TASCAP.sml Will Use to Fetch Related bp Values.
# ============================================================
# DEFINE proc checkHisto(Band)
# PURPOSE: Check that Input Raster has a Full (Unsampled)
# Histogram. If Not, Then Recompute Histogram.
proc checkHisto (raster Band) begin
local numeric sampleInt;
sampleInt = HistogramGetSampleInterval(Band);
if (sampleInt > 1) begin
DeleteHistogram(Band); CreateHistogram(Band,0);
end
else if (sampleInt == -1) then begin
CreateHistogram(Band,0);
end
end
# ------------------------------------------------------------
# func GlobalPtile(Rl,ptilel):
func GlobalPtile(raster Rl, numeric ptilel,hnl,nvl) begin
local numeric funcval,rl,roffl;
local numeric nlinsl,ncolsl,linl,coll,il;
local numeric countl,suml,flagl,cfql;
roffl = -65535; countl = 0;
if (hnl == 1) then begin
for each Rl begin
rl = Rl;
if (rl <> nvl) then countl = countl + 1;
end
end
if (hnl == 0) then begin
nlinsl = NumLins(Rl); ncolsl = NumCols(Rl);
countl = nlinsl * ncolsl;
end
for il = 0 to 131071 v[il] = 0;
for each Rl begin
rl = Rl;
if (hnl == 1) then begin
if (rl <> nvl) then begin
il = rl - roffl; v[il] = v[il] + 1;
end
end
if (hnl == 0) then begin
il = rl - roffl; v[il] = v[il] + 1;
end
end
suml = v[0]; flagl = 0;
for il=1 to 131071 begin
if (flagl == 0) then begin
suml = suml + v[il]; cfql = suml * 100 / countl;
if (cfql >= ptilel) then begin
flagl = 1; funcval = il + roffl;
end
end
end
return (funcval);
end
# ------------------------------------------------------------
# DEFINE func expPower(dnLl,dnMl,dnHl):
func expPower(dnLl,dnMl,dnHl) begin
local numeric delLHl,delLMl,sr1l,sr2l,exppl;
sr1l = 0.3; sr2l = 2 * (1 - sr1l);
delLHl = dnHl - dnLl; delLMl = dnMl - dnLl;
exppl = sr1l + sr2l * delLMl / delLHl;
return (exppl);
end
# ------------------------------------------------------------
# WRITE TITLE & AUTHOR INFORMATION:
writeTitle();
# ------------------------------------------------------------
# WRITE METHOD TO CONSOLE WINDOW:
if (m == 1) then begin
printf("METHOD 1: Use USGS Coefficients\n");
printf(" Applied to Landsat SRFItoa Data.\n\n");
end
if (m == 2) then begin
printf("METHOD 2: Use Default TASCAP Coefficients\n");
printf(" Applied to SRFIsfc Data.\n\n");
end
if (m == 3) then begin
printf("METHOD 3: Use Customized TASCAP Coefficients\n");
printf(" Applied to SRFIsfc.\n");
printf(" Customized Names with Associated\n");
printf(" SRFI Image LIN & COL Locations.\n\n");
end
# ------------------------------------------------------------
# SPECIFY nbands & nTC PARAMETERS:
if (m == 2) then begin
p1$ = "NUMBER OF INPUT SRFI RASTERS ENTRY:\n";
p2$ = " RANGE: 4 to 6\n";
p3$ = "NUMBER ENTERED:";
p$ = p1$ + p2$ + p3$;
nbands = PopupNum(p$,nbands,4,6,0);
nbandsm1 = nbands - 1;
end
if (m == 2) then begin
if (nTC > (nbands - 1)) then nTC = nbands - 1;
p1$ = "NUMBER OF OUTPUT RASTER PAIRS ENTRY:\n";
p2$ = " RANGE: 2 to (NumInputBands - 1)\n";
p3$ = "NUMBER ENTERED:";
p$ = p1$ + p2$ + p3$;
nTC = PopupNum(p$,nTC,2,nbandsm1,0);
end
if (m == 3) then begin
p1$ = "NUMBER OF INPUT SRFI RASTERS ENTRY:\n";
p2$ = " RANGE: 3 to 9\n";
p3$ = "NUMBER ENTERED:";
p$ = p1$ + p2$ + p3$;
nbands = PopupNum(p$,nbands,3,9,0);
nbandsm1 = nbands - 1;
end
printf("NUMBERS OF INPUT RASTERS & OUTPUT RASTERS:\n");
printf(" %1d Sets of SRFI INPUT Rasters\n",nbands);
if (m == 3) then begin
if (nTC > (nbands - 1)) then nTC = nbands - 1;
p1$ = "NUMBER OF OUTPUT RASTER PAIRS ENTRY:\n";
p2$ = " RANGE: 2 to (NumInputBands - 1)\n";
p3$ = "NUMBER ENTERED:";
p$ = p1$ + p2$ + p3$;
nTC = PopupNum(p$,nTC,2,nbandsm1,0);
end
printf(" %1d Pairs of TC & DS OUTPUT Rasters\n\n",nTC);
# ------------------------------------------------------------
# OPEN INPUT RASTERS:
raster SRFI1,SRFI2,SRFI3,SRFI4,SRFI5;
raster SRFI6,SRFI7,SRFI8,SRFI9;
GetInputRaster(SRFI1);
nlins = NumLins(SRFI1); ncols = NumCols(SRFI1);
stype$ = RastType(SRFI1);
checkHisto(SRFI1);
GetInputRaster(SRFI2,nlins,ncols,stype$);
checkHisto(SRFI2);
GetInputRaster(SRFI3,nlins,ncols,stype$);
checkHisto(SRFI3);
if (nbands>3) then begin
GetInputRaster(SRFI4,nlins,ncols,stype$);
checkHisto(SRFI4);
end
if (nbands>4) then begin
GetInputRaster(SRFI5,nlins,ncols,stype$);
checkHisto(SRFI5);
end
if (nbands>5) then begin
GetInputRaster(SRFI6,nlins,ncols,stype$);
checkHisto(SRFI6);
end
if (nbands>6) then begin
GetInputRaster(SRFI7,nlins,ncols,stype$);
checkHisto(SRFI7);
end
if (nbands>7) then begin
GetInputRaster(SRFI8,nlins,ncols,stype$);
checkHisto(SRFI8);
end
if (nbands>8) then begin
GetInputRaster(SRFI9,nlins,ncols,stype$);
checkHisto(SRFI9);
end
# ------------------------------------------------------------
# GET USER-PROVIDED LIN & COL PARAMETERS:
if (m == 3) then begin
t$ = "METHOD-3 PARAMETER";
bp0$ = "bp0 NAME";
p$ = "ENTER bp0 NAME:";
bp0$ = PopupString(p$,bp0$,t$);
if (bp0$ == "BLACK") then begin
lintcp[0] = 1;
coltcp[0] = 1;
end
p1$ = "METHOD-3 LINE & COLUMN PARAMETERS ENTRY:\n";
if (bp0$ <> "BLACK") then begin
p2$ = "FOR " + bp0$ + ", ENTER LIN:";
p$ = p1$ + p2$;
lintcp[0] = PopupNum(p$,1,1,100000,0);
p2$ = "FOR " + bp0$ + ", ENTER COL:";
p$ = p1$ + p2$;
coltcp[0] = PopupNum(p$,1,1,100000,0);
end
bp1$ = "bp1 NAME";
p$ = "ENTER bp1 NAME:";
bp1$ = PopupString(p$,bp1$,t$);
p2$ = "FOR " + bp1$ + ", ENTER LIN:";
p$ = p1$ + p2$;
lintcp[1] = PopupNum(p$,1,1,100000,0);
p2$ = "FOR " + bp1$ + ", ENTER COL:";
p$ = p1$ + p2$;
coltcp[1] = PopupNum(p$,1,1,100000,0);
bp2$ = "bp2 NAME";
p$ = "ENTER bp2 NAME:";
bp2$ = PopupString(p$,bp2$,t$);
p2$ = "FOR " + bp2$ + ", ENTER LIN:";
p$ = p1$ + p2$;
lintcp[2] = PopupNum(p$,1,1,100000,0);
p2$ = "FOR " + bp2$ + ", ENTER COL:";
p$ = p1$ + p2$;
coltcp[2] = PopupNum(p$,1,1,100000,0);
if (nTC > 2) then begin
bp3$ = "bp3 NAME";
p$ = "ENTER bp3 NAME:";
bp3$ = PopupString(p$,bp3$,t$);
p2$ = "FOR " + bp3$ + ", ENTER LIN:";
p$ = p1$ + p2$;
lintcp[3] = PopupNum(p$,1,1,100000,0);
p2$ = "FOR " + bp3$ + ", ENTER COL:";
p$ = p1$ + p2$;
coltcp[3] = PopupNum(p$,1,1,100000,0);
end
if (nTC > 3) then begin
bp4$ = "bp4 NAME";
p$ = "ENTER bp4 NAME:";
bp4$ = PopupString(p$,bp4$,t$);
p2$ = "FOR " + bp4$ + ", ENTER LIN:";
p$ = p1$ + p2$;
lintcp[4] = PopupNum(p$,1,1,100000,0);
p2$ = "FOR " + bp4$ + ", ENTER COL:";
p$ = p1$ + p2$;
coltcp[4] = PopupNum(p$,1,1,100000,0);
end
if (nTC > 4) then begin
bp5$ = "bp5 NAME";
p$ = "ENTER bp5 NAME:";
bp5$ = PopupString(p$,bp5$,t$);
p2$ = "FOR " + bp5$ + ", ENTER LIN:";
p$ = p1$ + p2$;
lintcp[5] = PopupNum(p$,1,1,100000,0);
p2$ = "FOR " + bp5$ + ", ENTER COL:";
p$ = p1$ + p2$;
coltcp[5] = PopupNum(p$,1,1,100000,0);
end
if (nTC > 5) then begin
bp6$ = "bp6 NAME";
p$ = "ENTER bp6 NAME:";
bp6$ = PopupString(p$,bp6$,t$);
p2$ = "FOR " + bp6$ + ", ENTER LIN:";
p$ = p1$ + p2$;
lintcp[6] = PopupNum(p$,1,1,100000,0);
p2$ = "FOR " + bp6$ + ", ENTER COL:";
p$ = p1$ + p2$;
coltcp[6] = PopupNum(p$,1,1,100000,0);
end
if (nTC > 6) then begin
bp7$ = "bp7 NAME";
p$ = "ENTER bp7 NAME:";
bp7$ = PopupString(p$,bp7$,t$);
p2$ = "FOR " + bp7$ + ", ENTER LIN:";
p$ = p1$ + p2$;
lintcp[7] = PopupNum(p$,1,1,100000,0);
p2$ = "FOR " + bp7$ + ", ENTER COL:";
p$ = p1$ + p2$;
coltcp[7] = PopupNum(p$,1,1,100000,0);
end
if (nTC > 7) then begin
bp8$ = "bp8 NAME";
p$ = "ENTER bp8 NAME:";
bp8$ = PopupString(p$,bp8$,t$);
p2$ = "FOR " + bp8$ + ", ENTER LIN:";
p$ = p1$ + p2$;
lintcp[8] = PopupNum(p$,1,1,100000,0);
p2$ = "FOR " + bp8$ + ", ENTER COL:";
p$ = p1$ + p2$;
coltcp[8] = PopupNum(p$,1,1,100000,0);
end
end
# ------------------------------------------------------------
# GET bpn[nband] VALUES:
for i=0 to nTC begin
if (m == 3) then begin
lin = lintcp[i]; col = coltcp[i];
if (i==0) then begin
bp0[1] = 0; bp0[2] = 0; bp0[3] = 0;
bp0[4] = 0; bp0[5] = 0; bp0[6] = 0;
bp0[7] = 0; bp0[8] = 0; bp0[9] = 0;
if (bp0$ <> "BLACK") then begin
bp0[1] = SRFI1[lin,col]; bp0[2] = SRFI2[lin,col];
bp0[3] = SRFI3[lin,col];
if (nbands > 3) then bp0[4] = SRFI4[lin,col];
if (nbands > 4) then bp0[5] = SRFI5[lin,col];
if (nbands > 5) then bp0[6] = SRFI6[lin,col];
if (nbands > 6) then bp0[7] = SRFI7[lin,col];
if (nbands > 7) then bp0[8] = SRFI8[lin,col];
if (nbands > 8) then bp0[9] = SRFI9[lin,col];
end
end
if (i==1) then begin
bp1[1] = SRFI1[lin,col]; bp1[2] = SRFI2[lin,col];
bp1[3] = SRFI3[lin,col];
if (nbands > 3) then bp1[4] = SRFI4[lin,col];
if (nbands > 4) then bp1[5] = SRFI5[lin,col];
if (nbands > 5) then bp1[6] = SRFI6[lin,col];
if (nbands > 6) then bp1[7] = SRFI7[lin,col];
if (nbands > 7) then bp1[8] = SRFI8[lin,col];
if (nbands > 8) then bp1[9] = SRFI9[lin,col];
end
if (i==2) then begin
bp2[1] = SRFI1[lin,col]; bp2[2] = SRFI2[lin,col];
bp2[3] = SRFI3[lin,col];
if (nbands > 3) then bp2[4] = SRFI4[lin,col];
if (nbands > 4) then bp2[5] = SRFI5[lin,col];
if (nbands > 5) then bp2[6] = SRFI6[lin,col];
if (nbands > 6) then bp2[7] = SRFI7[lin,col];
if (nbands > 7) then bp2[8] = SRFI8[lin,col];
if (nbands > 8) then bp2[9] = SRFI9[lin,col];
end
if (i==3) then begin
bp3[1] = SRFI1[lin,col]; bp3[2] = SRFI2[lin,col];
bp3[3] = SRFI3[lin,col];
if (nbands > 3) then bp3[4] = SRFI4[lin,col];
if (nbands > 4) then bp3[5] = SRFI5[lin,col];
if (nbands > 5) then bp3[6] = SRFI6[lin,col];
if (nbands > 6) then bp3[7] = SRFI7[lin,col];
if (nbands > 7) then bp3[8] = SRFI8[lin,col];
if (nbands > 8) then bp3[9] = SRFI9[lin,col];
end
if (i==4) then begin
bp4[1] = SRFI1[lin,col]; bp4[2] = SRFI2[lin,col];
bp4[3] = SRFI3[lin,col];
if (nbands > 3) then bp4[4] = SRFI4[lin,col];
if (nbands > 4) then bp4[5] = SRFI5[lin,col];
if (nbands > 5) then bp4[6] = SRFI6[lin,col];
if (nbands > 6) then bp4[7] = SRFI7[lin,col];
if (nbands > 7) then bp4[8] = SRFI8[lin,col];
if (nbands > 8) then bp4[9] = SRFI9[lin,col];
end
if (i==5) then begin
bp5[1] = SRFI1[lin,col]; bp5[2] = SRFI2[lin,col];
bp5[3] = SRFI3[lin,col];
if (nbands > 3) then bp5[4] = SRFI4[lin,col];
if (nbands > 4) then bp5[5] = SRFI5[lin,col];
if (nbands > 5) then bp5[6] = SRFI6[lin,col];
if (nbands > 6) then bp5[7] = SRFI7[lin,col];
if (nbands > 7) then bp5[8] = SRFI8[lin,col];
if (nbands > 8) then bp5[9] = SRFI9[lin,col];
end
if (i==6) then begin
bp6[1] = SRFI1[lin,col]; bp6[2] = SRFI2[lin,col];
bp6[3] = SRFI3[lin,col];
if (nbands > 3) then bp6[4] = SRFI4[lin,col];
if (nbands > 4) then bp6[5] = SRFI5[lin,col];
if (nbands > 5) then bp6[6] = SRFI6[lin,col];
if (nbands > 6) then bp6[7] = SRFI7[lin,col];
if (nbands > 7) then bp6[8] = SRFI8[lin,col];
if (nbands > 8) then bp6[9] = SRFI9[lin,col];
end
if (i==7) then begin
bp7[1] = SRFI1[lin,col]; bp7[2] = SRFI2[lin,col];
bp7[3] = SRFI3[lin,col];
if (nbands > 3) then bp7[4] = SRFI4[lin,col];
if (nbands > 4) then bp7[5] = SRFI5[lin,col];
if (nbands > 5) then bp7[6] = SRFI6[lin,col];
if (nbands > 6) then bp7[7] = SRFI7[lin,col];
if (nbands > 7) then bp7[8] = SRFI8[lin,col];
if (nbands > 8) then bp7[9] = SRFI9[lin,col];
end
if (i==8) then begin
bp8[1] = SRFI1[lin,col]; bp8[2] = SRFI2[lin,col];
bp8[3] = SRFI3[lin,col];
if (nbands > 3) then bp8[4] = SRFI4[lin,col];
if (nbands > 4) then bp8[5] = SRFI5[lin,col];
if (nbands > 5) then bp8[6] = SRFI6[lin,col];
if (nbands > 6) then bp8[7] = SRFI7[lin,col];
if (nbands > 7) then bp8[8] = SRFI8[lin,col];
if (nbands > 8) then bp8[9] = SRFI9[lin,col];
end
if (i==9) then begin
bp9[1] = SRFI1[lin,col]; bp9[2] = SRFI2[lin,col];
bp9[3] = SRFI3[lin,col];
if (nbands > 3) then bp9[4] = SRFI4[lin,col];
if (nbands > 4) then bp9[5] = SRFI5[lin,col];
if (nbands > 5) then bp9[6] = SRFI6[lin,col];
if (nbands > 6) then bp9[7] = SRFI7[lin,col];
if (nbands > 7) then bp9[8] = SRFI8[lin,col];
if (nbands > 8) then bp9[9] = SRFI9[lin,col];
end
end
end
# ------------------------------------------------------------
# WRTIE BIOPHYSICAL VECTORS TO CONSOLE WINDOW (SRFI Units):
printf("BIOPHYSICAL CONTROL MATERIALS:\n");
printf(" BPO: %s\n",bp0$);
if (m > 1) then begin
printf(" BP0:");
nbandsm1 = nbands - 1;
for i=1 to nbandsm1 begin
printf("%8d",bp0[i]);
end
printf("%8d\n\n",bp0[nbands]);
end
printf(" BP1: %s\n",bp1$);
if (m > 1) then begin
printf(" BP1:");
for i=1 to nbandsm1 begin
printf("%8d",bp1[i]);
end
printf("%8d\n\n",bp1[nbands]);
end
printf(" BP2: %s\n",bp2$);
if (m > 1) then begin
printf(" BP2:");
for i=1 to nbandsm1 begin
printf("%8d",bp2[i]);
end
printf("%8d\n\n",bp2[nbands]);
end
for itc=3 to nTC begin
if (itc==3) then begin
printf(" BP3: %s\n",bp3$);
if (m > 1) then begin
printf(" BP3:");
for i=1 to nbandsm1 begin
printf("%8d",bp3[i]);
end
printf("%8d\n\n",bp3[nbands]);
end
end
if (itc==4) then begin
printf(" BP4: %s\n",bp4$);
if (m > 1) then begin
printf(" BP4:");
for i=1 to nbandsm1 begin
printf("%8d",bp4[i]);
end
printf("%8d\n\n",bp4[nbands]);
end
end
if (itc==5) then begin
printf(" BP5: %s\n",bp5$);
if (m > 1) then begin
printf(" BP5:");
for i=1 to nbandsm1 begin
printf("%8d",bp5[i]);
end
printf("%8d\n\n",bp5[nbands]);
end
end
if (itc==6) then begin
printf(" BP6: %s\n",bp6$);
if (m > 1) then begin
printf(" BP6:");
for i=1 to nbandsm1 begin
printf("%8d",bp6[i]);
end
printf("%8d\n\n",bp6[nbands]);
end
end
if (itc==7) then begin
printf(" BP7: %s\n",bp7$);
if (m > 1) then begin
printf(" BP7:");
for i=1 to nbandsm1 begin
printf("%8d",bp7[i]);
end
printf("%8d\n\n",bp7[nbands]);
end
end
if (itc==8) then begin
printf(" BP8: %s\n",bp8$);
if (m > 1) then begin
printf(" BP8:");
for i=1 to nbandsm1 begin
printf("%8d",bp8[i]);
end
printf("%8d\n\n",bp8[nbands]);
end
end
end
# ------------------------------------------------------------
# COMPUTE TC OFFSETS & ROTATION COEFFICIENTS:
printf("TC OFFSETS (tc0) COEFFICIENTS (tc1 etc.):\n");
# tc0:
printf(" tc0: ");
for i=1 to nbands begin
if (m > 1) then begin
tc0[i] = bp0[i];
end
printf("%8d",tc0[i]);
end
# tc1:
printf("\n tc1: ");
if (m > 1) then begin
sd2 = 0;
for i=1 to nbands begin
d = bp1[i] - tc0[i];
sd2 = sd2 + d * d;
end
mag = sqrt(sd2);
end
for i=1 to nbands begin
if (m > 1) then begin
d = bp1[i] - tc0[i];
tc1[i] = d / mag;
end
printf("%8.4f",tc1[i]);
end
# tc2:
printf("\n tc2: ");
if (m > 1) then begin
dot1 = 0;
for i=1 to nbands begin
d = bp2[i] - tc0[i];
dot1 = dot1 + tc1[i] * d;
end
sf2 = 0;
for i=1 to nbands begin
d = bp2[i] - tc0[i];
f = d - dot1 * tc1[i];
sf2 = sf2 + f * f;
end
mag = sqrt(sf2);
end
for i=1 to nbands begin
if (m > 1) then begin
d = bp2[i] - tc0[i];
f = d - dot1 * tc1[i];
tc2[i] = f / mag;
end
printf("%8.4f",tc2[i]);
end
# tc3:
if (nTC > 2) then begin
printf("\n tc3: ");
if (m > 1) then begin
dot1 = 0; dot2 = 0;
for i=1 to nbands begin
d = bp3[i] - tc0[i];
dot1 = dot1 + tc1[i] * d;
dot2 = dot2 + tc2[i] * d;
end
sf2 = 0;
for i=1 to nbands begin
d = bp3[i] - tc0[i];
f = d - dot1 * tc1[i];
f = f - dot2 * tc2[i];
sf2 = sf2 + f * f;
end
mag = sqrt(sf2);
end
for i=1 to nbands begin
if (m > 1) then begin
d = bp3[i] - tc0[i];
f = d - dot1 * tc1[i];
f = f - dot2 * tc2[i];
tc3[i] = f / mag;
end
printf("%8.4f",tc3[i]);
end
end
# tc4:
if (nTC > 3) then begin
printf("\n tc4: ");
if (m > 1) then begin
dot1 = 0; dot2 = 0; dot3 = 0;
for i=1 to nbands begin
d = bp4[i] - tc0[i];
dot1 = dot1 + tc1[i] * d;
dot2 = dot2 + tc2[i] * d;
dot3 = dot3 + tc3[i] * d;
end
sf2 = 0;
for i=1 to nbands begin
d = bp4[i] - tc0[i];
f = d - dot1 * tc1[i];
f = f - dot2 * tc2[i];
f = f - dot3 * tc3[i];
sf2 = sf2 + f * f;
end
mag = sqrt(sf2);
end
for i=1 to nbands begin
if (m > 1) then begin
d = bp4[i] - tc0[i];
f = d - dot1 * tc1[i];
f = f - dot2 * tc2[i];
f = f - dot3 * tc3[i];
tc4[i] = f / mag;
end
printf("%8.4f",tc4[i]);
end
end
# tc5:
if (nTC > 4) then begin
printf("\n tc5: ");
dot1 = 0; dot2 = 0; dot3 = 0; dot4 = 0;
for i=1 to nbands begin
d = bp5[i] - tc0[i];
dot1 = dot1 + tc1[i] * d;
dot2 = dot2 + tc2[i] * d;
dot3 = dot3 + tc3[i] * d;
dot4 = dot4 + tc4[i] * d;
end
sf2 = 0;
for i=1 to nbands begin
d = bp5[i] - tc0[i];
f = d - dot1 * tc1[i];
f = f - dot2 * tc2[i];
f = f - dot3 * tc3[i];
f = f - dot4 * tc4[i];
sf2 = sf2 + f * f;
end
mag = sqrt(sf2);
for i=1 to nbands begin
d = bp5[i] - tc0[i];
f = d - dot1 * tc1[i];
f = f - dot2 * tc2[i];
f = f - dot3 * tc3[i];
f = f - dot4 * tc4[i];
tc5[i] = f / mag;
printf("%8.4f",tc5[i]);
end
end
# tc6:
if (nTC > 5) then begin
printf("\n tc6: ");
dot1 = 0; dot2 = 0; dot3 = 0; dot4 = 0; dot5 = 0;
for i=1 to nbands begin
d = bp6[i] - tc0[i];
dot1 = dot1 + tc1[i] * d;
dot2 = dot2 + tc2[i] * d;
dot3 = dot3 + tc3[i] * d;
dot4 = dot4 + tc4[i] * d;
dot5 = dot5 + tc5[i] * d;
end
sf2 = 0;
for i=1 to nbands begin
d = bp6[i] - tc0[i];
f = d - dot1 * tc1[i];
f = f - dot2 * tc2[i];
f = f - dot3 * tc3[i];
f = f - dot4 * tc4[i];
f = f - dot5 * tc5[i];
sf2 = sf2 + f * f;
end
mag = sqrt(sf2);
for i=1 to nbands begin
d = bp6[i] - tc0[i];
f = d - dot1 * tc1[i];
f = f - dot2 * tc2[i];
f = f - dot3 * tc3[i];
f = f - dot4 * tc4[i];
f = f - dot5 * tc5[i];
tc6[i] = f / mag;
printf("%8.4f",tc6[i]);
end
end
# tc7:
if (nTC > 6) then begin
printf("\n tc7: ");
dot1 = 0; dot2 = 0; dot3 = 0; dot4 = 0; dot5 = 0;
dot6 = 0;
for i=1 to nbands begin
d = bp7[i] - tc0[i];
dot1 = dot1 + tc1[i] * d;
dot2 = dot2 + tc2[i] * d;
dot3 = dot3 + tc3[i] * d;
dot4 = dot4 + tc4[i] * d;
dot5 = dot5 + tc5[i] * d;
dot6 = dot6 + tc6[i] * d;
end
sf2 = 0;
for i=1 to nbands begin
d = bp7[i] - tc0[i];
f = d - dot1 * tc1[i];
f = f - dot2 * tc2[i];
f = f - dot3 * tc3[i];
f = f - dot4 * tc4[i];
f = f - dot5 * tc5[i];
f = f - dot6 * tc6[i];
sf2 = sf2 + f * f;
end
mag = sqrt(sf2);
for i=1 to nbands begin
d = bp7[i] - tc0[i];
f = d - dot1 * tc1[i];
f = f - dot2 * tc2[i];
f = f - dot3 * tc3[i];
f = f - dot4 * tc4[i];
f = f - dot5 * tc5[i];
f = f - dot6 * tc6[i];
tc7[i] = f / mag;
printf("%8.4f",tc7[i]);
end
end
# tc8:
if (nTC > 7) then begin
printf("\n tc8: ");
dot1 = 0; dot2 = 0; dot3 = 0; dot4 = 0; dot5 = 0;
dot6 = 0; dot7 = 0;
for i=1 to nbands begin
d = bp8[i] - tc0[i];
dot1 = dot1 + tc1[i] * d;
dot2 = dot2 + tc2[i] * d;
dot3 = dot3 + tc3[i] * d;
dot4 = dot4 + tc4[i] * d;
dot5 = dot5 + tc5[i] * d;
dot6 = dot6 + tc6[i] * d;
dot7 = dot7 + tc7[i] * d;
end
sf2 = 0;
for i=1 to nbands begin
d = bp8[i] - tc0[i];
f = d - dot1 * tc1[i];
f = f - dot2 * tc2[i];
f = f - dot3 * tc3[i];
f = f - dot4 * tc4[i];
f = f - dot5 * tc5[i];
f = f - dot6 * tc6[i];
f = f - dot7 * tc7[i];
sf2 = sf2 + f * f;
end
mag = sqrt(sf2);
for i=1 to nbands begin
d = bp8[i] - tc0[i];
f = d - dot1 * tc1[i];
f = f - dot2 * tc2[i];
f = f - dot3 * tc3[i];
f = f - dot4 * tc4[i];
f = f - dot5 * tc5[i];
f = f - dot6 * tc6[i];
f = f - dot7 * tc7[i];
tc8[i] = f / mag;
printf("%8.4f",tc8[i]);
end
end
# tc9:
if (nTC > 6) then begin
printf("\n tc9: ");
dot1 = 0; dot2 = 0; dot3 = 0; dot4 = 0; dot5 = 0;
dot6 = 0; dot7 = 0; dot8 = 0;
for i=1 to nbands begin
d = bp9[i] - tc0[i];
dot1 = dot1 + tc1[i] * d;
dot2 = dot2 + tc2[i] * d;
dot3 = dot3 + tc3[i] * d;
dot4 = dot4 + tc4[i] * d;
dot5 = dot5 + tc5[i] * d;
dot6 = dot6 + tc6[i] * d;
dot7 = dot7 + tc7[i] * d;
dot8 = dot8 + tc8[i] * d;
end
sf2 = 0;
for i=1 to nbands begin
d = bp9[i] - tc0[i];
f = d - dot1 * tc1[i];
f = f - dot2 * tc2[i];
f = f - dot3 * tc3[i];
f = f - dot4 * tc4[i];
f = f - dot5 * tc5[i];
f = f - dot6 * tc6[i];
f = f - dot7 * tc7[i];
f = f - dot8 * tc8[i];
sf2 = sf2 + f * f;
end
mag = sqrt(sf2);
for i=1 to nbands begin
d = bp9[i] - tc0[i];
f = d - dot1 * tc1[i];
f = f - dot2 * tc2[i];
f = f - dot3 * tc3[i];
f = f - dot4 * tc4[i];
f = f - dot5 * tc5[i];
f = f - dot6 * tc6[i];
f = f - dot7 * tc7[i];
f = f - dot8 * tc8[i];
tc9[i] = f / mag;
printf("%8.4f",tc9[i]);
end
end
# ------------------------------------------------------------
# SETUP OUTPUT RASTERS:
raster DS0,TC1,DS1,TC2,DS2,TC3,DS3,TC4,DS4,TC5,DS5;
raster TC6,DS6,TC7,DS7,TC8,DS8;
GetOutputRaster(DS0,nlins,ncols,dtype$); SetNull(DS0,0);
CopySubobjects(SRFI1,DS0,"GEOREF");
GetOutputRaster(TC1,nlins,ncols,ttype$); SetNull(TC1,tcn);
CopySubobjects(SRFI1,TC1,"GEOREF");
GetOutputRaster(DS1,nlins,ncols,dtype$); SetNull(DS1,0);
CopySubobjects(SRFI1,DS1,"GEOREF");
GetOutputRaster(TC2,nlins,ncols,ttype$); SetNull(TC2,tcn);
CopySubobjects(SRFI1,TC2,"GEOREF");
GetOutputRaster(DS2,nlins,ncols,dtype$); SetNull(DS2,0);
CopySubobjects(SRFI1,DS2,"GEOREF");
if (nTC>2) then begin
GetOutputRaster(TC3,nlins,ncols,ttype$);
SetNull(TC3,tcn);
CopySubobjects(SRFI1,TC3,"GEOREF");
GetOutputRaster(DS3,nlins,ncols,dtype$); SetNull(DS3,0);
CopySubobjects(SRFI1,DS3,"GEOREF");
end
if (nTC>3) then begin
GetOutputRaster(TC4,nlins,ncols,ttype$);
SetNull(TC4,tcn);
CopySubobjects(SRFI1,TC4,"GEOREF");
GetOutputRaster(DS4,nlins,ncols,dtype$); SetNull(DS4,0);
CopySubobjects(SRFI1,DS4,"GEOREF");
end
if (nTC>4) then begin
GetOutputRaster(TC5,nlins,ncols,ttype$);
SetNull(TC5,tcn);
CopySubobjects(SRFI1,TC5,"GEOREF");
GetOutputRaster(DS5,nlins,ncols,dtype$); SetNull(DS5,0);
CopySubobjects(SRFI1,DS5,"GEOREF");
end
if (nTC>5) then begin
GetOutputRaster(TC6,nlins,ncols,ttype$);
SetNull(TC6,tcn);
CopySubobjects(SRFI1,TC6,"GEOREF");
GetOutputRaster(DS6,nlins,ncols,dtype$); SetNull(DS6,0);
CopySubobjects(SRFI1,DS6,"GEOREF");
end
if (nTC>6) then begin
GetOutputRaster(TC7,nlins,ncols,ttype$);
SetNull(TC7,tcn);
CopySubobjects(SRFI1,TC7,"GEOREF");
GetOutputRaster(DS7,nlins,ncols,dtype$); SetNull(DS7,0);
CopySubobjects(SRFI1,DS7,"GEOREF");
end
if (nTC>7) then begin
GetOutputRaster(TC8,nlins,ncols,ttype$);
SetNull(TC8,tcn);
CopySubobjects(SRFI1,TC8,"GEOREF");
GetOutputRaster(DS8,nlins,ncols,dtype$); SetNull(DS8,0);
CopySubobjects(SRFI1,DS8,"GEOREF");
end
# ------------------------------------------------------------
# COMPUTE DS & TC VALUES & ASSIGN TO DS & TC RASTERS:
printf("\n\nPRODUCING OUTPUT RASTERS:\n");
printf(" DS0");
for each SRFI1 begin
isnull = IsNull(SRFI1);
if (isnull <> 1) then begin
srfi[1] = SRFI1; srfi[2] = SRFI2; srfi[3] = SRFI3;
if (nbands>3) then srfi[4] = SRFI4;
if (nbands>4) then srfi[5] = SRFI5;
if (nbands>5) then srfi[6] = SRFI6;
if (nbands>6) then srfi[7] = SRFI7;
if (nbands>7) then srfi[8] = SRFI8;
if (nbands>8) then srfi[9] = SRFI9;
sd2 = 0;
for i=1 to nbands begin
d = srfi[i] - tc0[i];
sd2 = sd2 + d * d;
end
ds = round(sqrt(sd2));
if (ds < 1) then ds = 1;
DS0 = ds;
end
end
printf(" TC1 DS1");
for each SRFI1 begin
isnull = IsNull(SRFI1);
if (isnull <> 1) then begin
srfi[1] = SRFI1; srfi[2] = SRFI2; srfi[3] = SRFI3;
if (nbands>3) then srfi[4] = SRFI4;
if (nbands>4) then srfi[5] = SRFI5;
if (nbands>5) then srfi[6] = SRFI6;
if (nbands>6) then srfi[7] = SRFI7;
if (nbands>7) then srfi[8] = SRFI8;
if (nbands>8) then srfi[9] = SRFI9;
ds = DS0;
tc = 0;
for i=1 to nbands begin
tc = tc + tc1[i] * (srfi[i] - tc0[i]);
end
ds = ds * ds - tc * tc;
if (ds < 1) then ds = 1;
ds = round(sqrt(ds));
if (tc < tcnp1) then tc = tcnp1;
TC1 = tc; DS1 = ds;
end
end
printf(" TC2 DS2");
for each SRFI1 begin
isnull = IsNull(SRFI1);
if (isnull <> 1) then begin
srfi[1] = SRFI1; srfi[2] = SRFI2; srfi[3] = SRFI3;
if (nbands>3) then srfi[4] = SRFI4;
if (nbands>4) then srfi[5] = SRFI5;
if (nbands>5) then srfi[6] = SRFI6;
if (nbands>6) then srfi[7] = SRFI7;
if (nbands>7) then srfi[8] = SRFI8;
if (nbands>8) then srfi[9] = SRFI9;
ds = DS1; tc = 0;
for i=1 to nbands begin
tc = tc + tc2[i] * (srfi[i] - tc0[i]);
end
ds = ds * ds - tc * tc;
if (ds < 1) then ds = 1;
ds = round(sqrt(ds));
if (tc < tcnp1) then tc = tcnp1;
TC2 = tc; DS2 = ds;
end
end
if (nTC>2) then begin
printf(" TC3 DS3");
for each SRFI1 begin
isnull = IsNull(SRFI1);
if (isnull <> 1) then begin
srfi[1] = SRFI1; srfi[2] = SRFI2; srfi[3] = SRFI3;
if (nbands>3) then srfi[4] = SRFI4;
if (nbands>4) then srfi[5] = SRFI5;
if (nbands>5) then srfi[6] = SRFI6;
if (nbands>6) then srfi[7] = SRFI7;
if (nbands>7) then srfi[8] = SRFI8;
if (nbands>8) then srfi[9] = SRFI9;
ds = DS2; tc = 0;
for i=1 to nbands begin
tc = tc + tc3[i] * (srfi[i] - tc0[i]);
end
ds = ds * ds - tc * tc;
if (ds < 1) then ds = 1;
ds = round(sqrt(ds));
if (tc < tcnp1) then tc = tcnp1;
TC3 = tc; DS3 = ds;
end
end
end
if (nTC>3) then begin
printf(" TC4 DS4");
for each SRFI1 begin
isnull = IsNull(SRFI1);
if (isnull <> 1) then begin
srfi[1] = SRFI1; srfi[2] = SRFI2; srfi[3] = SRFI3;
if (nbands>3) then srfi[4] = SRFI4;
if (nbands>4) then srfi[5] = SRFI5;
if (nbands>5) then srfi[6] = SRFI6;
if (nbands>6) then srfi[7] = SRFI7;
if (nbands>7) then srfi[8] = SRFI8;
if (nbands>8) then srfi[9] = SRFI9;
ds = DS3; tc = 0;
for i=1 to nbands begin
tc = tc + tc4[i] * (srfi[i] - tc0[i]);
end
ds = ds * ds - tc * tc;
if (ds < 1) then ds = 1;
ds = round(sqrt(ds));
if (tc < tcnp1) then tc = tcnp1;
TC4 = tc; DS4 = ds;
end
end
end
if (nTC>4) then begin
printf(" TC5 DS5");
for each SRFI1 begin
isnull = IsNull(SRFI1);
if (isnull <> 1) then begin
srfi[1] = SRFI1; srfi[2] = SRFI2; srfi[3] = SRFI3;
if (nbands>3) then srfi[4] = SRFI4;
if (nbands>4) then srfi[5] = SRFI5;
if (nbands>5) then srfi[6] = SRFI6;
if (nbands>6) then srfi[7] = SRFI7;
if (nbands>7) then srfi[8] = SRFI8;
if (nbands>8) then srfi[9] = SRFI9;
ds = DS4; tc = 0;
for i=1 to nbands begin
tc = tc + tc5[i] * (srfi[i] - tc0[i]);
end
ds = ds * ds - tc * tc;
if (ds < 1) then ds = 1;
ds = round(sqrt(ds));
if (tc < tcnp1) then tc = tcnp1;
TC5 = tc; DS5 = ds;
end
end
end
if (nTC>5) then begin
printf(" TC6 DS6");
for each SRFI1 begin
isnull = IsNull(SRFI1);
if (isnull <> 1) then begin
srfi[1] = SRFI1; srfi[2] = SRFI2; srfi[3] = SRFI3;
if (nbands>3) then srfi[4] = SRFI4;
if (nbands>4) then srfi[5] = SRFI5;
if (nbands>5) then srfi[6] = SRFI6;
if (nbands>6) then srfi[7] = SRFI7;
if (nbands>7) then srfi[8] = SRFI8;
if (nbands>8) then srfi[9] = SRFI9;
ds = DS5; tc = 0;
for i=1 to nbands begin
tc = tc + tc6[i] * (srfi[i] - tc0[i]);
end
ds = ds * ds - tc * tc;
if (ds < 1) then ds = 1;
ds = round(sqrt(ds));
if (tc < tcnp1) then tc = tcnp1;
TC6 = tc; DS6 = ds;
end
end
end
if (nTC>6) then begin
printf(" TC7 DS7");
for each SRFI1 begin
isnull = IsNull(SRFI1);
if (isnull <> 1) then begin
srfi[1] = SRFI1; srfi[2] = SRFI2; srfi[3] = SRFI3;
if (nbands>3) then srfi[4] = SRFI4;
if (nbands>4) then srfi[5] = SRFI5;
if (nbands>5) then srfi[6] = SRFI6;
if (nbands>6) then srfi[7] = SRFI7;
if (nbands>7) then srfi[8] = SRFI8;
if (nbands>8) then srfi[9] = SRFI9;
ds = DS6; tc = 0;
for i=1 to nbands begin
tc = tc + tc7[i] * (srfi[i] - tc0[i]);
end
ds = ds * ds - tc * tc;
if (ds < 1) then ds = 1;
ds = round(sqrt(ds));
if (tc < tcnp1) then tc = tcnp1;
TC7 = tc; DS7 = ds;
end
end
end
if (nTC>7) then begin
printf(" TC8 DS8");
for each SRFI1 begin
isnull = IsNull(SRFI1);
if (isnull <> 1) then begin
srfi[1] = SRFI1; srfi[2] = SRFI2; srfi[3] = SRFI3;
if (nbands>3) then srfi[4] = SRFI4;
if (nbands>4) then srfi[5] = SRFI5;
if (nbands>5) then srfi[6] = SRFI6;
if (nbands>6) then srfi[7] = SRFI7;
if (nbands>7) then srfi[8] = SRFI8;
if (nbands>8) then srfi[9] = SRFI9;
ds = DS7; tc = 0;
for i=1 to nbands begin
tc = tc + tc8[i] * (srfi[i] - tc0[i]);
end
ds = ds * ds - tc * tc;
if (ds < 1) then ds = 1;
ds = round(sqrt(ds));
if (tc < tcnp1) then tc = tcnp1;
TC8 = tc; DS8 = ds;
end
end
end
printf("\n\n");
# ------------------------------------------------------------
# CLOSE INPUT RASTERS:
CloseRaster(SRFI1); CloseRaster(SRFI2); CloseRaster(SRFI3);
if (nbands>3) then CloseRaster(SRFI4);
if (nbands>4) then CloseRaster(SRFI5);
if (nbands>5) then CloseRaster(SRFI6);
if (nbands>6) then CloseRaster(SRFI7);
if (nbands>7) then CloseRaster(SRFI8);
if (nbands>8) then CloseRaster(SRFI9);
# ------------------------------------------------------------
# MAKE SUBOBJECTS:
printf("MAKING SUBOBJECTS:\n");
printf("CONTRAST LOOK-UP TABLE PARAMETERS:\n");
printf("RASTER LOW HIGH POWER\n");
CreateHistogram(DS0,0); CreatePyramid(DS0);
hnmDS0 = HasNullMask(DS0); hnDS0 = HasNull(DS0);
if (hnDS0 == 1) then nvDS0 = NullValue(DS0);
c1DS0 = GlobalPtile(DS0,0.5,hnDS0,nvDS0);
c3DS0 = GlobalPtile(DS0,50,hnDS0,nvDS0);
c2DS0 = GlobalPtile(DS0,99.5,hnDS0,nvDS0);
pDS0 = expPower(c1DS0,c3DS0,c2DS0);
smlContrast.InputLowerLimit = c1DS0;
smlContrast.InputUpperLimit = c2DS0;
smlContrast.Power = pDS0;
smlContrast.Compute(DS0,clut1$,clut2$,clut3$);
printf(" DS0 %9d %9d %9.2f\n",c1DS0,c2DS0,pDS0);
CloseRaster(DS0);
CreateHistogram(TC1,0); CreatePyramid(TC1);
hnmTC1 = HasNullMask(TC1); hnTC1 = HasNull(TC1);
if (hnTC1 == 1) then nvTC1 = NullValue(TC1);
c1TC1 = GlobalPtile(TC1,0.5,hnTC1,nvTC1);
c3TC1 = GlobalPtile(TC1,50,hnTC1,nvTC1);
c2TC1 = GlobalPtile(TC1,99.5,hnTC1,nvTC1);
pTC1 = expPower(c1TC1,c3TC1,c2TC1);
smlContrast.InputLowerLimit = c1TC1;
smlContrast.InputUpperLimit = c2TC1;
smlContrast.Power = pTC1;
smlContrast.Compute(TC1,clut1$,clut2$,clut3$);
printf(" TC1 %9d %9d %9.2f\n",c1TC1,c2TC1,pTC1);
CloseRaster(TC1);
CreateHistogram(DS1,0); CreatePyramid(DS1);
hnmDS1 = HasNullMask(DS1); hnDS1 = HasNull(DS1);
if (hnDS1 == 1) then nvDS1 = NullValue(DS1);
c1DS1 = GlobalPtile(DS1,0.5,hnDS1,nvDS1);
c3DS1 = GlobalPtile(DS1,50,hnDS1,nvDS1);
c2DS1 = GlobalPtile(DS1,99.5,hnDS1,nvDS1);
pDS1 = expPower(c1DS1,c3DS1,c2DS1);
smlContrast.InputLowerLimit = c1DS1;
smlContrast.InputUpperLimit = c2DS1;
smlContrast.Power = pDS1;
smlContrast.Compute(DS1,clut1$,clut2$,clut3$);
printf(" DS1 %9d %9d %9.2f\n",c1DS1,c2DS1,pDS1);
CloseRaster(DS1);
CreateHistogram(TC2,0); CreatePyramid(TC2);
hnmTC2 = HasNullMask(TC2); hnTC2 = HasNull(TC2);
if (hnTC2 == 1) then nvTC2 = NullValue(TC2);
c1TC2 = GlobalPtile(TC2,0.5,hnTC2,nvTC2);
c3TC2 = GlobalPtile(TC2,50,hnTC2,nvTC2);
c2TC2 = GlobalPtile(TC2,99.5,hnTC2,nvTC2);
pTC2 = expPower(c1TC2,c3TC2,c2TC2);
smlContrast.InputLowerLimit = c1TC2;
smlContrast.InputUpperLimit = c2TC2;
smlContrast.Power = pTC2;
smlContrast.Compute(TC2,clut1$,clut2$,clut3$);
printf(" TC2 %9d %9d %9.2f\n",c1TC2,c2TC2,pTC2);
CloseRaster(TC2);
CreateHistogram(DS2,0); CreatePyramid(DS2);
hnmDS2 = HasNullMask(DS2); hnDS2 = HasNull(DS2);
if (hnDS2 == 1) then nvDS2 = NullValue(DS2);
c1DS2 = GlobalPtile(DS2,0.5,hnDS2,nvDS2);
c3DS2 = GlobalPtile(DS2,50,hnDS2,nvDS2);
c2DS2 = GlobalPtile(DS2,99.5,hnDS2,nvDS2);
pDS2 = expPower(c1DS2,c3DS2,c2DS2);
smlContrast.InputLowerLimit = c1DS2;
smlContrast.InputUpperLimit = c2DS2;
smlContrast.Power = pDS2;
smlContrast.Compute(DS2,clut1$,clut2$,clut3$);
printf(" DS2 %9d %9d %9.2f\n",c1DS2,c2DS2,pDS2);
CloseRaster(DS2);
if (nTC>2) then begin
CreateHistogram(TC3,0); CreatePyramid(TC3);
hnmTC3 = HasNullMask(TC3); hnTC3 = HasNull(TC3);
if (hnTC3 == 1) then nvTC3 = NullValue(TC3);
c1TC3 = GlobalPtile(TC3,0.5,hnTC3,nvTC3);
c3TC3 = GlobalPtile(TC3,50,hnTC3,nvTC3);
c2TC3 = GlobalPtile(TC3,99.5,hnTC3,nvTC3);
pTC3 = expPower(c1TC3,c3TC3,c2TC3);
smlContrast.InputLowerLimit = c1TC3;
smlContrast.InputUpperLimit = c2TC3;
smlContrast.Power = pTC3;
smlContrast.Compute(TC3,clut1$,clut2$,clut3$);
printf(" TC3 %9d %9d %9.2f\n",c1TC3,c2TC3,pTC3);
CloseRaster(TC3);
CreateHistogram(DS3,0); CreatePyramid(DS3);
hnmDS3 = HasNullMask(DS3); hnDS3 = HasNull(DS3);
if (hnDS3 == 1) then nvDS3 = NullValue(DS3);
c1DS3 = GlobalPtile(DS3,0.5,hnDS3,nvDS3);
c3DS3 = GlobalPtile(DS3,50,hnDS3,nvDS3);
c2DS3 = GlobalPtile(DS3,99.5,hnDS3,nvDS3);
pDS3 = expPower(c1DS3,c3DS3,c2DS3);
smlContrast.InputLowerLimit = c1DS3;
smlContrast.InputUpperLimit = c2DS3;
smlContrast.Power = pDS3;
smlContrast.Compute(DS3,clut1$,clut2$,clut3$);
printf(" DS3 %9d %9d %9.2f\n",c1DS3,c2DS3,pDS3);
CloseRaster(DS3);
end
if (nTC>3) then begin
CreateHistogram(TC4,0); CreatePyramid(TC4);
hnmTC4 = HasNullMask(TC4); hnTC4 = HasNull(TC4);
if (hnTC4 == 1) then nvTC4 = NullValue(TC4);
c1TC4 = GlobalPtile(TC4,0.5,hnTC4,nvTC4);
c3TC4 = GlobalPtile(TC4,50,hnTC4,nvTC4);
c2TC4 = GlobalPtile(TC4,99.5,hnTC4,nvTC4);
pTC4 = expPower(c1TC4,c3TC4,c2TC4);
smlContrast.InputLowerLimit = c1TC4;
smlContrast.InputUpperLimit = c2TC4;
smlContrast.Power = pTC4;
smlContrast.Compute(TC4,clut1$,clut2$,clut3$);
printf(" TC4 %9d %9d %9.2f\n",c1TC4,c2TC4,pTC4);
CloseRaster(TC4);
CreateHistogram(DS4,0); CreatePyramid(DS4);
hnmDS4 = HasNullMask(DS4); hnDS4 = HasNull(DS4);
if (hnDS4 == 1) then nvDS4 = NullValue(DS4);
c1DS4 = GlobalPtile(DS4,0.5,hnDS4,nvDS4);
c3DS4 = GlobalPtile(DS4,50,hnDS4,nvDS4);
c2DS4 = GlobalPtile(DS4,99.5,hnDS4,nvDS4);
pDS4 = expPower(c1DS4,c3DS4,c2DS4);
smlContrast.InputLowerLimit = c1DS4;
smlContrast.InputUpperLimit = c2DS4;
smlContrast.Power = pDS4;
smlContrast.Compute(DS4,clut1$,clut2$,clut3$);
printf(" DS4 %9d %9d %9.2f\n",c1DS4,c2DS4,pDS4);
CloseRaster(DS4);
end
if (nTC>4) then begin
CreateHistogram(TC5,0); CreatePyramid(TC5);
hnmTC5 = HasNullMask(TC5); hnTC5 = HasNull(TC5);
if (hnTC5 == 1) then nvTC5 = NullValue(TC5);
c1TC5 = GlobalPtile(TC5,0.5,hnTC5,nvTC5);
c3TC5 = GlobalPtile(TC5,50,hnTC5,nvTC5);
c2TC5 = GlobalPtile(TC5,99.5,hnTC5,nvTC5);
pTC5 = expPower(c1TC5,c3TC5,c2TC5);
smlContrast.InputLowerLimit = c1TC5;
smlContrast.InputUpperLimit = c2TC5;
smlContrast.Power = pTC5;
smlContrast.Compute(TC5,clut1$,clut2$,clut3$);
printf(" TC5 %9d %9d %9.2f\n",c1TC5,c2TC5,pTC5);
CloseRaster(TC5);
CreateHistogram(DS5,0); CreatePyramid(DS5);
hnmDS5 = HasNullMask(DS5); hnDS5 = HasNull(DS5);
if (hnDS5 == 1) then nvDS5 = NullValue(DS5);
c1DS5 = GlobalPtile(DS5,0.5,hnDS5,nvDS5);
c3DS5 = GlobalPtile(DS5,50,hnDS5,nvDS5);
c2DS5 = GlobalPtile(DS5,99.5,hnDS5,nvDS5);
pDS5 = expPower(c1DS5,c3DS5,c2DS5);
smlContrast.InputLowerLimit = c1DS5;
smlContrast.InputUpperLimit = c2DS5;
smlContrast.Power = pDS5;
smlContrast.Compute(DS5,clut1$,clut2$,clut3$);
printf(" DS5 %9d %9d %9.2f\n",c1DS5,c2DS5,pDS5);
CloseRaster(DS5);
end
if (nTC>5) then begin
CreateHistogram(TC6,0); CreatePyramid(TC6);
hnmTC6 = HasNullMask(TC6); hnTC6 = HasNull(TC6);
if (hnTC6 == 1) then nvTC6 = NullValue(TC6);
c1TC6 = GlobalPtile(TC6,0.5,hnTC6,nvTC6);
c3TC6 = GlobalPtile(TC6,50,hnTC6,nvTC6);
c2TC6 = GlobalPtile(TC6,99.5,hnTC6,nvTC6);
pTC6 = expPower(c1TC6,c3TC6,c2TC6);
smlContrast.InputLowerLimit = c1TC6;
smlContrast.InputUpperLimit = c2TC6;
smlContrast.Power = pTC6;
smlContrast.Compute(TC6,clut1$,clut2$,clut3$);
printf(" TC6 %9d %9d %9.2f\n",c1TC6,c2TC6,pTC6);
CloseRaster(TC6);
CreateHistogram(DS6,0); CreatePyramid(DS6);
hnmDS6 = HasNullMask(DS6); hnDS6 = HasNull(DS6);
if (hnDS6 == 1) then nvDS6 = NullValue(DS6);
c1DS6 = GlobalPtile(DS6,0.5,hnDS6,nvDS6);
c3DS6 = GlobalPtile(DS6,50,hnDS6,nvDS6);
c2DS6 = GlobalPtile(DS6,99.5,hnDS6,nvDS6);
pDS6 = expPower(c1DS6,c3DS6,c2DS6);
smlContrast.InputLowerLimit = c1DS6;
smlContrast.InputUpperLimit = c2DS6;
smlContrast.Power = pDS6;
smlContrast.Compute(DS6,clut1$,clut2$,clut3$);
printf(" DS6 %9d %9d %9.2f\n",c1DS6,c2DS6,pDS6);
CloseRaster(DS6);
end
if (nTC>6) then begin
CreateHistogram(TC7,0); CreatePyramid(TC7);
hnmTC7 = HasNullMask(TC7); hnTC7 = HasNull(TC7);
if (hnTC7 == 1) then nvTC7 = NullValue(TC7);
c1TC7 = GlobalPtile(TC7,0.5,hnTC7,nvTC7);
c3TC7 = GlobalPtile(TC7,50,hnTC7,nvTC7);
c2TC7 = GlobalPtile(TC7,99.5,hnTC7,nvTC7);
pTC7 = expPower(c1TC7,c3TC7,c2TC7);
smlContrast.InputLowerLimit = c1TC7;
smlContrast.InputUpperLimit = c2TC7;
smlContrast.Power = pTC7;
smlContrast.Compute(TC7,clut1$,clut2$,clut3$);
printf(" TC7 %9d %9d %9.2f\n",c1TC7,c2TC7,pTC7);
CloseRaster(TC7);
CreateHistogram(DS7,0); CreatePyramid(DS7);
hnmDS7 = HasNullMask(DS7); hnDS7 = HasNull(DS7);
if (hnDS7 == 1) then nvDS7 = NullValue(DS7);
c1DS7 = GlobalPtile(DS7,0.5,hnDS7,nvDS7);
c3DS7 = GlobalPtile(DS7,50,hnDS7,nvDS7);
c2DS7 = GlobalPtile(DS7,99.5,hnDS7,nvDS7);
pDS7 = expPower(c1DS7,c3DS7,c2DS7);
smlContrast.InputLowerLimit = c1DS7;
smlContrast.InputUpperLimit = c2DS7;
smlContrast.Power = pDS7;
smlContrast.Compute(DS7,clut1$,clut2$,clut3$);
printf(" DS7 %9d %9d %9.2f\n",c1DS7,c2DS7,pDS7);
CloseRaster(DS7);
end
if (nTC>7) then begin
CreateHistogram(TC8,0); CreatePyramid(TC8);
hnmTC8 = HasNullMask(TC8); hnTC8 = HasNull(TC8);
if (hnTC8 == 1) then nvTC8 = NullValue(TC8);
c1TC8 = GlobalPtile(TC8,0.5,hnTC8,nvTC8);
c3TC8 = GlobalPtile(TC8,50,hnTC8,nvTC8);
c2TC8 = GlobalPtile(TC8,99.5,hnTC8,nvTC8);
pTC8 = expPower(c1TC8,c3TC8,c2TC8);
smlContrast.InputLowerLimit = c1TC8;
smlContrast.InputUpperLimit = c2TC8;
smlContrast.Power = pTC8;
smlContrast.Compute(TC8,clut1$,clut2$,clut3$);
printf(" TC8 %9d %9d %9.2f\n",c1TC8,c2TC8,pTC8);
CloseRaster(TC8);
CreateHistogram(DS8,0); CreatePyramid(DS8);
hnmDS8 = HasNullMask(DS8); hnDS8 = HasNull(DS8);
if (hnDS8 == 1) then nvDS8 = NullValue(DS8);
c1DS8 = GlobalPtile(DS8,0.5,hnDS8,nvDS8);
c3DS8 = GlobalPtile(DS8,50,hnDS8,nvDS8);
c2DS8 = GlobalPtile(DS8,99.5,hnDS8,nvDS8);
pDS8 = expPower(c1DS8,c3DS8,c2DS8);
smlContrast.InputLowerLimit = c1DS8;
smlContrast.InputUpperLimit = c2DS8;
smlContrast.Power = pDS8;
smlContrast.Compute(DS8,clut1$,clut2$,clut3$);
printf(" DS8 %9d %9d %9.2f\n",c1DS8,c2DS8,pDS8);
CloseRaster(DS8);
end
printf("\n");
printf("TO SAVE THE CONSOLE WINDOW TEXT AS A REPORT:\n");
printf(" 1. RIGHT-CLICK IN THE CONSOLE WINDOW.\n");
printf(" 2. SELECT THE Save As... OPTION.\n");
printf(" 3. NAVIGATE TO THE DESIRED LOCATION.\n");
printf(" 4. PROVIDE A REPORT NAME (or OVERWRITE).\n");
printf(" 5. CLICK OK.");