Problem with "Index out of range" error.
steeve88
I am trying to create a code that firstly creates a dataset that simulates a radar measurements of a cloud in the atmosphere. Then I want to convert it into data with real height and range. However, this is not the problem. I get an "Index out of range" error for the RealCloud wave. When I debug me code it seems that it stucks in the RealCloudConv function, and it doesn't return the value into RCloud in fake2real function. Could anyone help me please?
This is my whole code (there are 4 different functions. The first is the basic. The two last are secondary functions and there is no problem with them. The problem in the last command of the first function or somewhere in the second function.
Function Fake2Real(HoRes,VeRes) // Calculates real height and real range of radar values in two different matrices
variable HoRes,VeRes
variable Perimeter, RadiusOfRange, RangeColumns, i, j, HeightRaws, Rad, EarthRadius, a, b, c, d
variable RealHeightMax, RealRangeMax
make/O/N=(60/VeRes,200/HoRes) RealRange
make/O/N=(60/VeRes,200/HoRes) RealHeight
make/O/N=(60/VeRes,200/HoRes) cloud=0
wave cloud20
LoadWave/J/D/O/M/W/K=0/N=cloud2 "\\\\nask.man.ac.uk\\home$:Desktop:FakeCloud.csv"
RangeColumns = 200/HoRes //200 is the total range of the radar
HeightRaws = 60/VeRes
Perimeter=44050
EarthRadius = 6371
Rad=Deg2Rad(VeRes)
For (i=0; i<RangeColumns; i+=1)
For (j=0; j<HeightRaws; j+=1)
RadiusOfRange = ((i+1)*HoRes*360)/Perimeter
RealRange[j][i]= (RadiusOfRange*2*pi*6371)/360
RealHeight[j][i]= ((RealRange[j][i])*sin(Rad))+((RealRange[j][i]^2)/(2*EarthRadius))*(HeightRaws-j)
EndFor
EndFor
RealRangeMax=round(Maximum(HeightRaws,RangeColumns,RealRange))
RealHeightMax=round(Maximum(HeightRaws,RangeColumns,RealHeight))
Make/O/N=(RealHeightMax, RealRangeMax) RCloud=0
RCloud=RealCloudConv(cloud20, RealRange, RealHeight, VeRes, HoRes, RealHeightMax, RealRangeMax)
End
//-------------------------------------------------------------------------------------------------------------------------//3
Function RealCloudConv(cloud1, RealRange1, RealHeight1, VeRes1, HoRes1, RealHeightMax1, RealRangeMax1)
wave cloud1, RealRange1, RealHeight1
variable VeRes1, HoRes1, RealHeightMax1, RealRangeMax1
variable i, j, raws, columns, col, raw, realcols, RealRangeMax, RealHeightMax
raws=dimsize(cloud1,0)
columns=dimsize(cloud1,1)
make/O/N=(RealHeightMax1, RealRangeMax1) RealCloud=0 //60/VeRes1,200/HoRes1
For (i=0; i<raws; i+=1)
For (j=0; j<columns; j+=1)
col=round(RealRange1[i][j])
raw=round(RealHeight1[i][j])
RealCloud[raw][col] = cloud1[i][j]
EndFor
EndFor
return RealCloud
End
//--------------------------------------------------------------------------------------------------------------------------//
//SECONDARY FUNCTIONS//
//--------------------------------------------------------------------------------------------------------------------------//
Function Maximum(raws1,columns1,matrix)
wave matrix
variable raws1,columns1
variable max1, i, j
max1=0
for (i=0; i<raws1; i+=1)
for(j=0; j<columns1; j+=1)
if (matrix[i][j]>max1)
max1=matrix[i][j]
endif
endfor
endfor
return max1
end
//------------------------------------------------------------------------------------------------------------------------//
Function Deg2Rad(VRes) //Converts degrees to radians
variable VRes
variable radians
radians=VRes*0.005555556*pi
return radians
End
variable HoRes,VeRes
variable Perimeter, RadiusOfRange, RangeColumns, i, j, HeightRaws, Rad, EarthRadius, a, b, c, d
variable RealHeightMax, RealRangeMax
make/O/N=(60/VeRes,200/HoRes) RealRange
make/O/N=(60/VeRes,200/HoRes) RealHeight
make/O/N=(60/VeRes,200/HoRes) cloud=0
wave cloud20
LoadWave/J/D/O/M/W/K=0/N=cloud2 "\\\\nask.man.ac.uk\\home$:Desktop:FakeCloud.csv"
RangeColumns = 200/HoRes //200 is the total range of the radar
HeightRaws = 60/VeRes
Perimeter=44050
EarthRadius = 6371
Rad=Deg2Rad(VeRes)
For (i=0; i<RangeColumns; i+=1)
For (j=0; j<HeightRaws; j+=1)
RadiusOfRange = ((i+1)*HoRes*360)/Perimeter
RealRange[j][i]= (RadiusOfRange*2*pi*6371)/360
RealHeight[j][i]= ((RealRange[j][i])*sin(Rad))+((RealRange[j][i]^2)/(2*EarthRadius))*(HeightRaws-j)
EndFor
EndFor
RealRangeMax=round(Maximum(HeightRaws,RangeColumns,RealRange))
RealHeightMax=round(Maximum(HeightRaws,RangeColumns,RealHeight))
Make/O/N=(RealHeightMax, RealRangeMax) RCloud=0
RCloud=RealCloudConv(cloud20, RealRange, RealHeight, VeRes, HoRes, RealHeightMax, RealRangeMax)
End
//-------------------------------------------------------------------------------------------------------------------------//3
Function RealCloudConv(cloud1, RealRange1, RealHeight1, VeRes1, HoRes1, RealHeightMax1, RealRangeMax1)
wave cloud1, RealRange1, RealHeight1
variable VeRes1, HoRes1, RealHeightMax1, RealRangeMax1
variable i, j, raws, columns, col, raw, realcols, RealRangeMax, RealHeightMax
raws=dimsize(cloud1,0)
columns=dimsize(cloud1,1)
make/O/N=(RealHeightMax1, RealRangeMax1) RealCloud=0 //60/VeRes1,200/HoRes1
For (i=0; i<raws; i+=1)
For (j=0; j<columns; j+=1)
col=round(RealRange1[i][j])
raw=round(RealHeight1[i][j])
RealCloud[raw][col] = cloud1[i][j]
EndFor
EndFor
return RealCloud
End
//--------------------------------------------------------------------------------------------------------------------------//
//SECONDARY FUNCTIONS//
//--------------------------------------------------------------------------------------------------------------------------//
Function Maximum(raws1,columns1,matrix)
wave matrix
variable raws1,columns1
variable max1, i, j
max1=0
for (i=0; i<raws1; i+=1)
for(j=0; j<columns1; j+=1)
if (matrix[i][j]>max1)
max1=matrix[i][j]
endif
endfor
endfor
return max1
end
//------------------------------------------------------------------------------------------------------------------------//
Function Deg2Rad(VRes) //Converts degrees to radians
variable VRes
variable radians
radians=VRes*0.005555556*pi
return radians
End
This will make the code much easier to read.
One mistake is that
RealCloudConv
returns a wave but declares the return type to be a variable.May 5, 2015 at 03:43 am - Permalink
Thanks a lot.
May 5, 2015 at 07:40 am - Permalink
displayhelptopic "Function"
Igor tags are "igor" and "/igor" each enclosed in "<" and ">".
HJ
May 5, 2015 at 07:44 am - Permalink
May 6, 2015 at 07:23 am - Permalink