|||
为了增加模型集成系统使用的灵活性,设计开发这套可以编程的“二次开发语言”,暂时定名为RTM语言。从春节到现在主要在做这件工作。
每次回车,系统接受字符串,分析字符串,进行判断用户的操作意图,然后解析出字符串中的内容,执行相应的操作。其实是简单的指令+一套数据结构+一套流程控制。
将所需要的指令整理成如下的几类:
0. 系统查询类的指令
1. 模型信息查询类的指令
2. 变量的声明,引用,赋值和查询类的指令
3. 运行类的指令
4. 流程控制类的指令
5. 文件IO类的指令
6. 数学计算,回归统计类的指令, 参考IDL中的Mathematics
7. 与其他语言的接口指令
8. 数据可视化类指令
详细的设计如下: 其中绿色的指令是已经开发完成的。黄色的是正在开发测试中的。
*******************************************************************************
0. 系统查询类的指令
*******************************************************************************
RTM> sys.list
RTM> sys.CPU_Core_Num // CPU的核心数
RTM〉sys.Memory // 系统开辟的内存数
*******************************************************************************
1. 模型信息查询类的指令
*******************************************************************************
RTM> Root.ListHelpauthorband // 显示系统中所有的模型名称,模型简要说明,模型波段,模型作者等
RTM> Modtran.ListValueDataTypeSizeUnitRangeMean // 显示指定模型Modtran的所有输入输出参数名称,参数类型,参数尺寸,单位,取值范围,含义
RTM> Modtran.Input.ListValueDataTypeSizeUnitRangeMean // 显示指定模型Modtran的所有输入参数名称,参数类型,参数尺寸,单位,取值范围,含义
RTM> Modtran.Output.List 同上 // 显示指定模型Modtran的所有输出参数名称,参数类型,参数尺寸,单位,取值范围,含义
RTM> Modtran.Input.V1.list 同上 // 在文本窗口显示指定模型Modtran的指定输入参数V1的值,它是由load Modtran和V1.list两个语句组成。
RTM> Modtran.Input.V1.Plot // 在绘图窗口绘制显示指定模型Modtran的指定输入参数V1的值
RTM> Modtran.Output.TRANS.list // 在文本窗口显示指定模型Modtran的指定输出参数TRANS的值
RTM> Modtran.Output.TRANS.Plot // 在绘图窗口绘制显示指定模型Modtran的指定输出参数TRANS的值
RTM> Modtran.Output.TRANS.Plot LUT_Model // 调用复杂显示模块,进行显示TRANS
*******************************************************************************
2. 变量的声明,引用,赋值和查询类的指令
*******************************************************************************
我们要在每一个查询的语句返回一个结果变量,保存在通用的变量名称为ANS的变量中。如果通过“=”赋值,则被复制到“=”左边的变量中。与MATLAB类似的风格,如果行结尾处有“;”则不打印返回结果,否则打印出该结果到命令行的下一行。
结构体的声明,赋值和查询。
RTM> B = int[10] (float[10] short[10] char[10] double[10]) // 变量的声明
RTM> B = int[10;10] // 变量的声明
RTM>A = <B>[10] //变量声明,数据类型如B的声明10组。
RTM>A = “C:adafdasdf.hdr” /// 字符串变量的赋值。
RTM> B = AAA[i] (i为任意整数,在取值范围内)
RTM> B = AAA[i;j] (i,j为任意整数,在取值范围内)
RTM> B = AAA[i;:]
RTM> B = AAA[i;n1:n2]
RTM> B[j;i;k] = a
RTM> B[j;n1:n2] = AAA[i; n1:n2]
RTM> Modtran.Input.V1 = 30 // 对Modtran模型的参数V1进行赋值为30的操作
RTM> Modtran.Input.V1 = 30;31;32;33;34;35 // 对Modtran模型的参数V1进行赋值为多个值的矢量的操作
RTM> Modtran.Input.V1 = 30;31;32;33;34;35 LUT_Model // 对Modtran模型的参数V1进行赋值为多个值的循环参数的操作
RTM> Modtran.Input.V1 = 30:2:50 // 对Modtran模型的参数V1进行赋值为初始值为30,步长为2,结束值为50的循环参数
RTM> Modtran.Input.V1 = PROSPECT.V1 // 从模型PROSPECT中的V1对Modtran模型的参数V1进行赋值的操作
RTM> Modtran.Input.V1 = PROSPECT.V1 LUT_Model // 从模型PROSPECT中的V1对Modtran模型的参数V1进行赋值循环参数的操作
RTM> A= size(B) //获取B的尺寸信息
RTM> A= dataType(B) //获取B的类型
RTM> A= Dimension(B) //获取B的维数
RTM> A= Q_INFO(B) //获取B的尺寸信息
RTM> A 回车 // 打印A的数值
*******************************************************************************
3. 运行类的指令
*******************************************************************************
RTM> Modtran.run // 触发模型运算
RTM> Modtran.run LUT_Model // 循环运行模型Modtran,生成查找表
RTM> Modtran.run LUT, M1 = 111:2:115, M2 = 2:4:19 // 组合命令,先赋值,再循环运行模型Modtran,生成查找表
有了流程控制类,这个语句的存在价值值得商榷
*******************************************************************************
4. 流程控制类的指令
*******************************************************************************
RTM> FOR PROSPECT.CM = 2:2:400 // 两种以上的模型串联后,进行模型循环运算。
FOR SAIL.VZA = 2:2:400
PROSPECT.run
SAIL.Input.leafTrans = PROSPECT.Output.Trans
SAIL.run
Ref = SAIL.Output.Ref LUT_Model
ENDFOR
ENDFOR
IF PROSPECT.CM > 5 // 判断语句
SAIL.run
ENDIF
IF PROSPECT.CM>5 AND PROSPECT.CM < 15 OR PROSPECT.WM < 15
// 组合判断语句
SAIL.run
ENDIF
*******************************************************************************
5. 文件IO类的指令
*******************************************************************************
该部分一部分依靠GDAL库;
一部分依靠以前开发的少量的HDR文件;
一部分依靠模型开发中采用的文件-内存模式的映射。
RTM> ReadFile,FilePath = aaaa, line = 2, sample = 2, DataType = float, Result = AAA F[C] ASCII[BIN][GeoTiff][ENVI_IMG]
RTM> ReadFile,FilePath = aaaa, line = 2:10, sample = 2, DataType = float, Result = AAA F[C] ASCII[BIN][GeoTiff][ENVI_IMG] //带着line循环的读取,结果保存到AAA中
RTM> ReadFile,FilePath = aaaa, line = 2, sample = 2:10, DataType = float, Result = AAA F[C] ASCII[BIN][GeoTiff][ENVI_IMG]
RTM> ReadFile,FilePath = aaaa, line = 2:10, sample = 2:10, DataType = float, Result = AAA F[C] ASCII[BIN][GeoTiff][ENVI_IMG]
RTM> ReadFile,FilePath = aaaa, Lat = 38.56:0.005:38.99, Lon = 108.93:0.005:109.40, DataType = float, Result = AAA GeoTiff[ENVI_IMG] //带地理投影的数据,按照地理坐标读取,从中进行几何重采样了。
RTM> WriteFile,FilePath = aaaa, line = 2, sample = 2, DataType = float, Result = AAA F[C] ASCII[BIN][GeoTiff][ENVI_IMG]
RTM> WriteFile,FilePath = aaaa, line = 2:10, sample = 2, DataType = float, Result = AAA F[C] ASCII[BIN][GeoTiff][ENVI_IMG] //带着line循环的读取,结果保存到AAA中
RTM> WriteFile,FilePath = aaaa, line = 2, sample = 2:10, DataType = float, Result = AAA F[C] ASCII[BIN][GeoTiff][ENVI_IMG]
RTM> WriteFile,FilePath = aaaa, line = 2:10, sample = 2:10, DataType = float, Result = AAA F[C] ASCII[BIN][GeoTiff][ENVI_IMG]
///文件群的读取
RTM> ReadFile,FilePath = aaaa, FormatFilePath = FFFF, Result = AAA ///文件-内存模式的映射的文件读取
RTM> WriteFile,FilePath = aaaa, FormatFilePath = FFFF, Result = AAA ///文件-内存模式的映射的文件读取
*******************************************************************************
6. 数学计算,回归统计类的指令, 参考IDL中的Mathematics
*******************************************************************************
RTM> C = Convolution(A, B) \卷积计算
RTM〉 C = FFT(A) \付利叶变换
RTM〉 C = inFFT(A) \付利叶逆变换
RTM> R = PLANK(T,WaveLength) \普朗克公式
RTM> T = inPLANK(R,WaveLength) \普朗克逆运算公式
RTM> C = A+-*/B \加减乘除计算
RTM〉C = exp(A) \指数计算
RTM〉C = A^n \幂运算
RTM> Regress A, Type = 1, Result = A_Regress \数据回归成某一个公式
RTM> CurFit \曲线拟合(参考IDL中的Curve and Surface Fitting)
RTM> Interp \曲线拟合(参考IDL中的Curve and Surface Fitting和)
其他很多,参考Mathematics
*******************************************************************************
7. 与其他语言的接口指令
*******************************************************************************
RTM> IDL_CMD("aaaaaaaaa") \ 在IDL中执行aaaaaaa命令
RTM> IDL_DataTransfer("V_IDL_Name", A,true) \ 将参数A与IDL中的"V_IDL_Name"数据交换,交换方向决定于true.
RTM> Mat_CMD("aaaaaaa") \ 在MatLab中执行aaaaa命令
RTM> Mat_DataTransfer("V_IDL_Name", A,true) \ 将参数A与MatLab中的"V_IDL_Name"数据交换,交换方向决定于true.
*******************************************************************************
8. 数据可视化类指令
*******************************************************************************
RTM> plot(A,B)
RTM> IMG(A)
RTM> Surf(A)
RTM> Masic(A)
RTM> MasicOnBall(A)
RTM> Map(A)
RTM> Overlay(A)
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-9-1 09:28
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社