科研文件整理与编程习惯

科研文件夹的命名

根文件夹:Project name

子文件夹:Program、Output、Figure

  1. Program-涉及到的程序:如-cal.m 和 -plot.m
  2. Output-涉及到中间过程保存的变量:如.mat
  3. Figure-涉及到的画出的图片
  4. 子文件夹下应包含old文件夹,存放可能存在错误的文件

子文件夹下的文件命名:

  1. 起始项为数据来源:如 OFES10_
  2. 中间项为变量内容:如 heat_flux_
  3. 中二项为执行动作:如 cal_
  4. 结尾项为版本次数:如 01,当01版本下出现更多子版本时,使用 01_01_
  5. 后缀项为扩展名:.m.png.mat.fig

Tips:

  • 命名对应的-cal.m-plot.m-.mat-.png应统一版本次数“01”“02”
  • 图片输出格式最好为.png,投稿论文使用.pdf
  • -cal.m要在末尾save .mat文件给Output文件夹,一个-cal文件通常只save一个.mat文件

一个良好的编程题头习惯

  • 动词+名词:程序简介:Purpose:
  • 生成时间:create on 2017-08-04,by Hengkai Yao,@Laoshan OUC
  • 修改时间:revise on 2017-10-07
  • 程序的题头应充分写明程序的作用,涉及的输入输出变量,变更事项及修改时间,新文件版本应完全拷贝前一版本的文件后再做修改

一个良好的对齐习惯

  • 使用Ctl+I只能对齐
  • 确定在系统默认的10号字大小下
  • 使用同一字母数字大小的字体,如 YaHei Consolas Hybrid
  • 使用空格隔开字母、数字、符号等、

一个良好的变量名习惯

  • 驼峰式,小写开头,大小写混合
  • 循环:iLevel,nLevel;jPosition,nPosition
  • 单个变量+No:tableNo
  • 常量、全局变量用全部大写及下划线
  • 结构体:大写开头,大小写混合,如Segment.length.
  • 函数:全小写,但Compute、Find、Initialize、is应大写开头,大小写混合

一个良好的m文件编辑习惯

  • 模块化,不宜超过两页80列
  • 多次调用封装函数,单次调用只作为子函数
  • 每个函数都写一个测试脚本
  • 在嵌套式循环的时候应该在end行加上注释
  • 在文件开始部分的注释中为重要变量编写文档
  • 在语句行注释的最后为常数编写文档
  • 应该避免复杂的条件表示式,而采用临时逻辑变量进行替代
  • 在if else 结构的时候,发生较频繁的事件应该放在if 部分,例外情况放在else部分
  • 浮点常数应该在小数点前面写上一个阿拉伯数据
  • clc;clear;close all在一般的M文件开头,写这三个东西
  • 文件结束应在屏幕输出结束提示'Program finished.',最后发送一条邮件给自己,以便知道程序运行结束。

一个function的例子:

    %================================================================
    % 功能:  求圆孔的夫琅禾费衍射光强分布
    % 参数:  CircleHoleFD为圆孔结构体,包含圆孔衍射相关信息;
    %          theta为衍射场的次波方向,可以为向量,求取各方向的光强
    % 返回值: I为衍射光强分布
    % 主要思路:使用夫琅禾费单缝衍射公式计算
    % 备注:   入射角只考虑一个维度的
    % 调用方法:见CalcCircleHoleFD_Test文件
    % 日期:   2011/7/12 20:37
    %================================================================
function vonz = func_zsurf(var, zfield, zval, dbm)
%----------------------------------------------------------------
% Description : Extract variable at specified z-surface (depth or isopycnal). 
%                  This is a slightly modified version of sigma2z.m taken from
%                  Francois Colas (belongs to ROMS TOOLS or not??).
%
% Input  : 1. var    (3D ZYX Matrix) - variable to be extracted 
%          2. zfield (3D ZYX Matrix) - extract based on this field  (can be +ve/-ve)
%          3. zval   (scalar)        - extract var on zfield=zval surface  (    "  )
%          4. dbm    (scalar,optional) - debug mode, 1 for debugging and 0 for not.
%                                       (overrides the global variable "dbmod").
%
% Global  : dbmod  (scalar) - debug mode, 1 for debugging and 0 for not
%                                                                            
% Output : vonz (2D YX Matrix): variable on specified Z-surface
%
%
% Based on   : sigma2z.m ( c/o Francois Colas )
% Written By : UCLA ROMS Team (jaison@atmos.ucla.edu)
% Written On : June/11/2008
% Copyright @ UCLA ROMS Team
% Tool       : Eddy Tracker
% Version    : 1.0
%
%----------------------------------------------------------------

Ref: http://blog.sciencenet.cn/blog-437026-779476.html

鸣谢

特别感谢郭师兄的大力帮助!

另附一篇NATURE发表的“The key to a happy lab life is in the manual”(“如何做一只快乐的科研狗”)
以及一篇文章作者Mariam Aly所在实验室的Manual

p.s.

有时matlab不识别文件路径中的减号“-”,建议都用下划线"_"。

Last modification:July 19th, 2019 at 05:15 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment